From 22a91080f4e1469ec84feb6ff634b08f5cd899fd Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 10 Mar 2023 05:44:20 +0000 Subject: [PATCH 001/337] Updates to improve handling of type. #65 Fix issue of metacore object types not being put in lowercase, #77 --- .gitignore | 3 ++- NAMESPACE | 1 + R/type.R | 14 ++++++++++++-- R/utils-xportr.R | 2 +- R/xportr-package.R | 3 ++- R/zzz.R | 1 + tests/testthat/test-type.R | 34 +++++++++++++++++++++++++++++++++- 7 files changed, 52 insertions(+), 6 deletions(-) diff --git a/.gitignore b/.gitignore index 7bda4869..608d713f 100644 --- a/.gitignore +++ b/.gitignore @@ -17,4 +17,5 @@ docs xportr.Rcheck/ xportr*.tar.gz xportr*.tgz -docs/* \ No newline at end of file +docs/* +local diff --git a/NAMESPACE b/NAMESPACE index cf77d50a..05d1e735 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -27,6 +27,7 @@ importFrom(dplyr,distinct) importFrom(dplyr,everything) importFrom(dplyr,filter) importFrom(dplyr,group_by) +importFrom(dplyr,if_else) importFrom(dplyr,left_join) importFrom(dplyr,mutate) importFrom(dplyr,n) diff --git a/R/type.R b/R/type.R index b3c98740..84e7fc2e 100644 --- a/R/type.R +++ b/R/type.R @@ -39,6 +39,7 @@ xportr_type <- function(.df, metacore, domain = NULL, variable_name <- getOption("xportr.variable_name") type_name <- getOption("xportr.type_name") characterTypes <- getOption("xportr.character_types") + numericTypes <- getOption("xportr.numeric_types") if (!is.null(domain) && !is.character(domain)) { abort(c("`domain` must be a vector with type .", @@ -76,7 +77,16 @@ xportr_type <- function(.df, metacore, domain = NULL, data.frame(variable = names(.df), type = unlist(table_cols_types)), metacore, by = "variable" - ) + ) %>% + mutate( + # _character is used here as a mask of character, in case someone doesn't + # wants 'character' coersed to character + type.x = if_else(type.x %in% characterTypes, "_character", type.x), + type.x = if_else(type.x %in% numericTypes, "_numeric", type.x), + type.y = tolower(type.y), + type.y = if_else(type.y %in% characterTypes, "_character", type.y), + type.y = if_else(type.y %in% numericTypes, "_numeric", type.y) + ) # It is possible that a variable exists in the table that isn't in the metadata # it will be silently ignored here. This may happen depending on what a user @@ -96,7 +106,7 @@ xportr_type <- function(.df, metacore, domain = NULL, walk2(correct_type, seq_along(correct_type), function(x, i, is_correct) { if (!is_correct[i]) { - if (correct_type[i] %in% characterTypes) + if (correct_type[i] %in% c(characterTypes, "_character")) .df[[i]] <<- as.character(.df[[i]]) else .df[[i]] <<- as.numeric(.df[[i]]) } diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 2c39698b..c024c52b 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -244,7 +244,7 @@ xpt_validate <- function(data) { #' @return The R Object at the top of a pipe stack #' @noRd get_pipe_call <- function() { - call_strs <- map_chr(sys.calls(), as_label) + call_strs <- map_chr(as.list(sys.calls()), as_label) top_call <- min(which(str_detect(call_strs, "%>%"))) call_str <- as_label(sys.calls()[[top_call]]) trimws(strsplit(call_str, "%>%", fixed = TRUE)[[1]][[1]]) diff --git a/R/xportr-package.R b/R/xportr-package.R index 6dae369c..31d37313 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -8,6 +8,7 @@ #' @importFrom purrr map_chr walk2 map map_dbl #' @importFrom dplyr left_join bind_cols filter select rename rename_with n #' everything arrange group_by summarize mutate ungroup case_when distinct +#' if_else #' @importFrom glue glue glue_collapse #' @importFrom cli cli_alert_info cli_h2 cli_alert_success cli_alert_info #' cli_div cli_alert_success cli_text cli_h2 @@ -25,7 +26,7 @@ globalVariables(c("abbr_parsed", "abbr_stem", "adj_orig", "adj_parsed", "col_pos", "dict_varname", "lower_original_varname", "my_minlength", "num_st_ind", "original_varname", - "renamed_n", "renamed_var", "use_bundle", "viable_start")) + "renamed_n", "renamed_var", "use_bundle", "viable_start", "type.x", "type.y")) # The following block is used by usethis to automatically manage # roxygen namespace tags. Modify with care! diff --git a/R/zzz.R b/R/zzz.R index 35eca269..f596edc1 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -15,6 +15,7 @@ xportr.length_verbose = "none", xportr.type_verbose = "none", xportr.character_types = c("character", "char", "text", "date", "posixct", "posixt"), + xportr.numeric_types = c("integer", "numeric"), xportr.order_name = "order" ) toset <- !(names(op.devtools) %in% names(op)) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index b7a9124a..58908e69 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -6,12 +6,44 @@ meta_example <- data.frame( ) df <- data.frame( - Subj = as.character(123, 456, 789), + Subj = as.character(c(123, 456, 789)), Different = c("a", "b", "c"), Val = c("1", "2", "3"), Param = c("param1", "param2", "param3") ) +test_that("NAs are handled as expected", { + # Namely that "" isn't converted to NA or vice versa + # Numeric columns will become NA but that is the nature of as.numeric + df <- data.frame( + Subj = as.character(c(123, 456, 789, "", NA, NA_integer_)), + Different = c("a", "b", "c", "", NA, NA_character_), + Val = c("1", "2", "3", "", NA, NA_character_), + Param = c("param1", "param2", "param3", "", NA, NA_character_) + ) + meta_example <- data.frame( + dataset = "df", + variable = c("Subj", "Param", "Val", "NotUsed"), + type = c("numeric", "character", "numeric", "character") + ) + + df2 <- xportr_type(df, meta_example) + expect_equal( + df2, + structure( + list( + Subj = c(123, 456, 789, NA, NA, NA), + Different = c("a", "b", "c", "", NA, NA), + Val = c(1, 2, 3, NA, NA, NA), + Param = c("param1", "param2", "param3", "", NA, NA) + ), + row.names = c(NA, -6L), + `_xportr.df_arg_` = "df", + class = "data.frame" + ) + ) +}) + test_that("variable types are coerced as expected and can raise messages", { expect_message(df2 <- xportr_type(df, meta_example), From db83fcb0ed485c47ae0f9b5ada4a389d0862c16c Mon Sep 17 00:00:00 2001 From: EeethB Date: Thu, 13 Apr 2023 13:45:48 +0000 Subject: [PATCH 002/337] Update `xportr_type()` to retain column attributes Fixes issue #75 by retaining column attributes (such as label). Tested with `xportr_label()` only, not with `metacore::set_variable_labels()` (is that even a real function?) --- R/type.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/R/type.R b/R/type.R index b3c98740..5cac29dc 100644 --- a/R/type.R +++ b/R/type.R @@ -51,7 +51,7 @@ xportr_type <- function(.df, metacore, domain = NULL, if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") else if (identical(df_arg, ".")) { attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") + df_arg <- attr(.df, "_xportr.df_arg_") } domain <- domain %||% df_arg @@ -70,7 +70,7 @@ xportr_type <- function(.df, metacore, domain = NULL, # Current class of table variables table_cols_types <- map(.df, first_class) - + # Produces a data.frame with Variables, Type.x(Table), and Type.y(metadata) meta_ordered <- left_join( data.frame(variable = names(.df), type = unlist(table_cols_types)), @@ -96,9 +96,11 @@ xportr_type <- function(.df, metacore, domain = NULL, walk2(correct_type, seq_along(correct_type), function(x, i, is_correct) { if (!is_correct[i]) { + orig_attributes <- attributes(.df[[i]]) if (correct_type[i] %in% characterTypes) .df[[i]] <<- as.character(.df[[i]]) else .df[[i]] <<- as.numeric(.df[[i]]) + attributes(.df[[i]]) <<- orig_attributes } }, is_correct) From 338c475f198048035c8b0487930107aeb2fbeb60 Mon Sep 17 00:00:00 2001 From: EeethB Date: Thu, 13 Apr 2023 14:04:36 +0000 Subject: [PATCH 003/337] Add test for label vs type order Now that `xportr_type()` is not overwriting column labels, applying it before or after `xportr_label()` should make no difference --- tests/testthat/test-type.R | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index b7a9124a..d275cf9d 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -30,3 +30,29 @@ test_that("variable types are coerced as expected and can raise messages", { expect_equal(purrr::map_chr(df4, class), c(Subj = "numeric", Different = "character", Val = "numeric", Param = "character"))}) +test_that("xportr_type() retains column attributes", { + adsl <- data.frame( + USUBJID = c(1001, 1002, 1003), + SITEID = c(001, 002, 003), + AGE = c(63, 35, 27), + SEX = c("M", "F", "M") + ) + + metacore <- data.frame( + dataset = "adsl", + variable = c("USUBJID", "SITEID", "AGE", "SEX"), + label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex"), + type = c("character", "character", "numeric", "character") + ) + + df_type_label <- adsl %>% + xportr_type(metacore) %>% + xportr_label(metacore) + + df_label_type <- adsl %>% + xportr_label(metacore) %>% + xportr_type(metacore) + + expect_equal(df_type_label, df_label_type) +}) + From 1f912979efd17ac97043cdea630600cac5a43836 Mon Sep 17 00:00:00 2001 From: EeethB Date: Thu, 13 Apr 2023 18:19:47 +0000 Subject: [PATCH 004/337] Update `xportr_type()` to drop column attribute 'class' only In general, setting the type for each column should retain each column's attributes, such as label, width, and sas.format. These are set by other xportr functions. However, in cases where a column in the input dataset has a class already, such as a Date or a factor, this attribute should be dropped from the column. If it is not, it causes an error --- R/type.R | 3 ++- tests/testthat/test-type.R | 23 +++++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/R/type.R b/R/type.R index 5cac29dc..53b06f4e 100644 --- a/R/type.R +++ b/R/type.R @@ -90,13 +90,14 @@ xportr_type <- function(.df, metacore, domain = NULL, is_correct <- sapply(meta_ordered[["type.x"]] == meta_ordered[["type.y"]], isTRUE) # Use the original variable iff metadata is missing that variable correct_type <- ifelse(is.na(meta_ordered[["type.y"]]), meta_ordered[["type.x"]], meta_ordered[["type.y"]]) - + # Walk along the columns and coerce the variables. Modifying the columns # Directly instead of something like map_dfc to preserve any attributes. walk2(correct_type, seq_along(correct_type), function(x, i, is_correct) { if (!is_correct[i]) { orig_attributes <- attributes(.df[[i]]) + orig_attributes$class <- NULL if (correct_type[i] %in% characterTypes) .df[[i]] <<- as.character(.df[[i]]) else .df[[i]] <<- as.numeric(.df[[i]]) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index d275cf9d..9afc862d 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -30,27 +30,34 @@ test_that("variable types are coerced as expected and can raise messages", { expect_equal(purrr::map_chr(df4, class), c(Subj = "numeric", Different = "character", Val = "numeric", Param = "character"))}) -test_that("xportr_type() retains column attributes", { - adsl <- data.frame( +test_that("xportr_type() retains column attributes, besides class", { + adsl <- tibble::tibble( USUBJID = c(1001, 1002, 1003), SITEID = c(001, 002, 003), + ADATE = readr::parse_date(c("2023-04-11", "2023-04-12", "2023-04-13")), AGE = c(63, 35, 27), SEX = c("M", "F", "M") ) - metacore <- data.frame( + metacore <- tibble::tibble( dataset = "adsl", - variable = c("USUBJID", "SITEID", "AGE", "SEX"), - label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex"), - type = c("character", "character", "numeric", "character") + variable = c("USUBJID", "SITEID", "ADATE", "AGE", "SEX"), + label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), + type = c("character", "character", "character", "numeric", "character"), + length = c(10, 10, 10, 8, 10), + format = c(NA, NA, "DATE9.", NA, NA) ) df_type_label <- adsl %>% xportr_type(metacore) %>% - xportr_label(metacore) + xportr_label(metacore) %>% + xportr_length(metacore) %>% + xportr_format(metacore) df_label_type <- adsl %>% - xportr_label(metacore) %>% + xportr_label(metacore) %>% + xportr_length(metacore) %>% + xportr_format(metacore) %>% xportr_type(metacore) expect_equal(df_type_label, df_label_type) From 7ff8652c63ec74e8d882c74fc762f967a19b6524 Mon Sep 17 00:00:00 2001 From: EeethB Date: Thu, 13 Apr 2023 19:27:58 +0000 Subject: [PATCH 005/337] Update tibble::tibble to dplyr::tibble to clear R CMD check warning --- tests/testthat/test-type.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 9afc862d..f0930ab2 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -31,7 +31,7 @@ test_that("variable types are coerced as expected and can raise messages", { Val = "numeric", Param = "character"))}) test_that("xportr_type() retains column attributes, besides class", { - adsl <- tibble::tibble( + adsl <- dplyr::tibble( USUBJID = c(1001, 1002, 1003), SITEID = c(001, 002, 003), ADATE = readr::parse_date(c("2023-04-11", "2023-04-12", "2023-04-13")), @@ -39,7 +39,7 @@ test_that("xportr_type() retains column attributes, besides class", { SEX = c("M", "F", "M") ) - metacore <- tibble::tibble( + metacore <- dplyr::tibble( dataset = "adsl", variable = c("USUBJID", "SITEID", "ADATE", "AGE", "SEX"), label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), From 589ca3040c29c92ac2153d4b389dc8577183df52 Mon Sep 17 00:00:00 2001 From: elimillera Date: Mon, 17 Apr 2023 16:07:07 +0000 Subject: [PATCH 006/337] Add lint CI and first pass at resolving issues --- .github/workflows/lint.yaml | 32 +++++++++++++++++ .lintr | 8 +++++ R/df_label.R | 9 +++-- R/format.R | 8 ++--- R/label.R | 6 ++-- R/length.R | 6 ++-- R/messages.R | 18 +++++----- R/order.R | 18 ++++------ R/type.R | 4 +-- R/utils-xportr.R | 56 +++++++++++++++--------------- R/write.R | 6 ++-- R/xportr-package.R | 2 +- tests/testthat/test-metadata.R | 40 ++++++++++----------- tests/testthat/test-options.R | 1 - tests/testthat/test-order.R | 14 +++----- tests/testthat/test-type.R | 4 +-- tests/testthat/test-utils-xportr.R | 4 +-- tests/testthat/test-var_checks.R | 2 +- tests/testthat/test-write.R | 1 - vignettes/xportr.Rmd | 12 +++---- 20 files changed, 138 insertions(+), 113 deletions(-) create mode 100644 .github/workflows/lint.yaml create mode 100644 .lintr diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml new file mode 100644 index 00000000..c3690e45 --- /dev/null +++ b/.github/workflows/lint.yaml @@ -0,0 +1,32 @@ +# Workflow derived from https://github.com/r-lib/actions/tree/v2/examples +# Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +on: + push: + branches: [main] + pull_request: + branches: [main, dev] + +name: lint + +jobs: + lint: + runs-on: ubuntu-latest + env: + GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v3 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - uses: r-lib/actions/setup-r-dependencies@v2 + with: + extra-packages: any::lintr, local::. + needs: lint + + - name: Lint + run: lintr::lint_package() + shell: Rscript {0} + env: + LINTR_ERROR_ON_LINT: true \ No newline at end of file diff --git a/.lintr b/.lintr new file mode 100644 index 00000000..80754030 --- /dev/null +++ b/.lintr @@ -0,0 +1,8 @@ +linters: linters_with_defaults( + line_length_linter(120), + object_usage_linter = NULL, + object_name_linter = NULL, + trailing_whitespace_linter(allow_empty_lines = TRUE, allow_in_strings = TRUE) + ) +encoding: "UTF-8" +exclusions: list() diff --git a/R/df_label.R b/R/df_label.R index 33afc03c..6ae77d51 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -19,7 +19,7 @@ #' AGE = c(63, 35, 27), #' SEX = c("M", "F", "M") #' ) -#' +#' #' metacore <- data.frame( #' dataset = c("adsl", "adae"), #' label = c("Subject-Level Analysis", "Adverse Events Analysis") @@ -35,9 +35,9 @@ xportr_df_label <- function(.df, metacore, domain = NULL) { df_arg <- as_name(enexpr(.df)) if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") - else if(identical(df_arg, ".")){ + else if (identical(df_arg, ".")) { attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") + df_arg <- attr(.df, "_xportr.df_arg_") } if (!is.null(domain) && !is.character(domain)) { @@ -48,7 +48,7 @@ xportr_df_label <- function(.df, metacore, domain = NULL) { df_arg <- domain %||% df_arg - if(!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain + if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain if (inherits(metacore, "Metacore")) metacore <- metacore$ds_spec @@ -70,4 +70,3 @@ xportr_df_label <- function(.df, metacore, domain = NULL) { .df } - diff --git a/R/format.R b/R/format.R index 89941701..4a8c4c03 100644 --- a/R/format.R +++ b/R/format.R @@ -19,7 +19,7 @@ #' USUBJID = c(1001, 1002, 1003), #' BRTHDT = c(1, 1, 2) #' ) -#' +#' #' metacore <- data.frame( #' dataset = c("adsl", "adsl"), #' variable = c("USUBJID", "BRTHDT"), @@ -39,7 +39,7 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") else if (identical(df_arg, ".")) { attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") + df_arg <- attr(.df, "_xportr.df_arg_") } if (!is.null(domain) && !is.character(domain)) { @@ -79,9 +79,9 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo # Convert NA formats to "" for haven for (i in seq_len(ncol(.df))) { - if (is.na(attr(.df[[i]], "format.sas")) || is.null(attr(.df[[i]], "format.sas"))) + if (is.na(attr(.df[[i]], "format.sas")) || is.null(attr(.df[[i]], "format.sas"))) attr(.df[[i]], "format.sas") <- "" } .df -} \ No newline at end of file +} diff --git a/R/label.R b/R/label.R index c346823f..01c07ecb 100644 --- a/R/label.R +++ b/R/label.R @@ -21,7 +21,7 @@ #' AGE = c(63, 35, 27), #' SEX = c("M", "F", "M") #' ) -#' +#' #' metacore <- data.frame( #' dataset = "adsl", #' variable = c("USUBJID", "SITEID", "AGE", "SEX"), @@ -41,7 +41,7 @@ xportr_label <- function(.df, metacore, domain = NULL, if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") else if (identical(df_arg, ".")) { attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") + df_arg <- attr(.df, "_xportr.df_arg_") } if (!is.null(domain) && !is.character(domain)) { @@ -90,4 +90,4 @@ xportr_label <- function(.df, metacore, domain = NULL, } .df -} \ No newline at end of file +} diff --git a/R/length.R b/R/length.R index 2ed45027..9fcc07df 100644 --- a/R/length.R +++ b/R/length.R @@ -6,7 +6,7 @@ #' @param metacore A data frame containing variable level metadata. #' @param domain A character value to subset the `.df`. If `NULL`(default), uses #' `.df` value as a subset condition. -#' @param verbose The action the function takes when a length isn't found in +#' @param verbose The action the function takes when a length isn't found in #' metadata. Options are 'stop', 'warn', 'message', and 'none' #' #' @return Data frame with `SASlength` attributes for each variable. @@ -25,7 +25,7 @@ #' variable = c("USUBJID", "BRTHDT"), #' length = c(10, 8) #' ) -#' +#' #' adsl <- xportr_length(adsl, metacore) xportr_length <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.length_verbose", "none")) { @@ -39,7 +39,7 @@ xportr_length <- function(.df, metacore, domain = NULL, if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") else if (identical(df_arg, ".")) { attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") + df_arg <- attr(.df, "_xportr.df_arg_") } if (!is.null(domain) && !is.character(domain)) { diff --git a/R/messages.R b/R/messages.R index 2dae3051..453037c3 100644 --- a/R/messages.R +++ b/R/messages.R @@ -1,5 +1,5 @@ #' Utility Logging Function -#' +#' #' Functions to output user messages, usually relating to differences #' found between dataframe and the metacore/metadata object #' @@ -13,7 +13,7 @@ xportr_logger <- function(message, type = "none", ...) { log_fun <- switch(type, stop = abort, - warn = warn, + warn = warn, message = inform, return()) @@ -28,7 +28,7 @@ xportr_logger <- function(message, type = "none", ...) { #' #' @return Output to Console #' @export -var_names_log <- function(tidy_names_df, verbose){ +var_names_log <- function(tidy_names_df, verbose) { only_renames <- tidy_names_df %>% @@ -40,8 +40,8 @@ var_names_log <- function(tidy_names_df, verbose){ num_renamed <- nrow(only_renames) tot_num_vars <- nrow(tidy_names_df) message("\n") - cli::cli_h2(paste0( num_renamed, " of ", tot_num_vars, " (", - round(100*(num_renamed/tot_num_vars), 1), "%) variables were renamed")) + cli::cli_h2(paste0(num_renamed, " of ", tot_num_vars, " (", + round(100 * (num_renamed / tot_num_vars), 1), "%) variables were renamed")) # Message stating any renamed variables each original variable and it's new name if (nrow(only_renames) > 0) message(paste0(paste(only_renames$renamed_msg, collapse = "\n"), "\n")) @@ -65,7 +65,7 @@ var_names_log <- function(tidy_names_df, verbose){ #' #' @return Output to Console #' @export -type_log <- function(meta_ordered, type_mismatch_ind, verbose){ +type_log <- function(meta_ordered, type_mismatch_ind, verbose) { if (length(type_mismatch_ind) > 0) { @@ -84,7 +84,7 @@ type_log <- function(meta_ordered, type_mismatch_ind, verbose){ #' Utility for Lengths #' -#' @param miss_vars Variables missing from metatdata +#' @param miss_vars Variables missing from metatdata #' @param verbose Provides additional messaging for user #' #' @return Output to Console @@ -111,7 +111,7 @@ length_log <- function(miss_vars, verbose) { #' #' @return Output to Console #' @export -label_log <- function(miss_vars, verbose){ +label_log <- function(miss_vars, verbose) { if (length(miss_vars) > 0) { cli_h2("Variable labels missing from metadata.") @@ -133,7 +133,7 @@ label_log <- function(miss_vars, verbose){ #' #' @return Output to Console #' @export -var_ord_msg <- function(moved_vars, verbose){ +var_ord_msg <- function(moved_vars, verbose) { if (moved_vars > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") diff --git a/R/order.R b/R/order.R index ee1c056b..0b451258 100644 --- a/R/order.R +++ b/R/order.R @@ -5,10 +5,10 @@ #' @param domain A character value to subset the `.df`. If `NULL`(default), uses #' `.df` value as a subset condition. #' @param verbose Option for messaging order results -#' +#' #' @export #' @return Dataframe that has been re-ordered according to spec -#' +#' xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.order_verbose", "none")) { domain_name <- getOption("xportr.domain_name") @@ -21,7 +21,7 @@ xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xpor if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") else if (identical(df_arg, ".")) { attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") + df_arg <- attr(.df, "_xportr.df_arg_") } if (!is.null(domain) && !is.character(domain)) { @@ -52,11 +52,11 @@ xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xpor vars_in_spec_ds <- vars_in_spec_ds[!is.na(vars_in_spec_ds)] # Grabs all variables from Spec file and orders accordingly - ord_vars <- .df %>% + ord_vars <- .df %>% select(any_of(vars_in_spec_ds)) # Variables not in Spec file - will be moved to the end - drop_vars <- .df %>% + drop_vars <- .df %>% select(!any_of(vars_in_spec_ds)) # Used in warning message for how many vars have been moved @@ -66,13 +66,7 @@ xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xpor df_re_ord <- bind_cols(ord_vars, drop_vars) # Function is located in messages.R - var_ord_msg(moved_vars, verbose) + var_ord_msg(moved_vars, verbose) return(df_re_ord) } - - - - - - diff --git a/R/type.R b/R/type.R index b3c98740..c5b1d9d0 100644 --- a/R/type.R +++ b/R/type.R @@ -32,7 +32,7 @@ #' #' df2 <- xportr_type(.df, metacore, "test") xportr_type <- function(.df, metacore, domain = NULL, - verbose = getOption('xportr.type_verbose', 'none')){ + verbose = getOption("xportr.type_verbose", "none")) { # Name of the columns for working with metadata domain_name <- getOption("xportr.domain_name") @@ -51,7 +51,7 @@ xportr_type <- function(.df, metacore, domain = NULL, if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") else if (identical(df_arg, ".")) { attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") + df_arg <- attr(.df, "_xportr.df_arg_") } domain <- domain %||% df_arg diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 2c39698b..5df65503 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -8,10 +8,10 @@ extract_attr <- function(data, attr = c("label", "format.sas", "SAStype", "SASlength")) { attr <- match.arg(attr) out <- lapply(data, function(.x) attr(.x, attr)) - out <- vapply(out, - function(.x) ifelse(is.null(.x), "", .x), + out <- vapply(out, + function(.x) ifelse(is.null(.x), "", .x), character(1L), USE.NAMES = FALSE) - names(out) <- names(data) + names(out) <- names(data) out } @@ -29,13 +29,13 @@ ntext <- function(n, msg1, msg2) { #' Assign Commas and Oxford Comma to a Series of Words in Text #' -#' @param x Character Vector, usually a series of column names +#' @param x Character Vector, usually a series of column names #' -#' @return String of text where words are separated by commas and final +#' @return String of text where words are separated by commas and final #' oxford comma ", and" convention #' @noRd fmt_comma <- function(x) { - glue_collapse(x, sep = ", ", last = if (length(x) <= 2) " and " else ", and ") + glue_collapse(x, sep = ", ", last = if (length(x) <= 2) " and " else ", and ") } #' Encode String of Variables in Tick Marks @@ -50,7 +50,7 @@ encode_vars <- function(x) { x <- encodeString(x, quote = "`") } - fmt_comma(x) + fmt_comma(x) } #' Encode String of Values in Quotation Marks @@ -104,16 +104,16 @@ fmt_fmts <- function(x) { #' Check Variable Names Before Exporting to xpt #' -#' @param varnames Column names of data -#' +#' @param varnames Column names of data +#' #' @param list_vars_first Logical value to toggle where to list out column names -#' in error message -#' +#' in error message +#' #' @param err_cnd Character vector to initialize message -#' +#' #' @details Prior to exporting xpt file, check that column names meet appropriate -#' conditions like character limits, capitalization, and other naming conventions. -#' +#' conditions like character limits, capitalization, and other naming conventions. +#' #' @return An error message if incompatible variable names were used. #' @noRd xpt_validate_var_names <- function(varnames, @@ -148,19 +148,19 @@ xpt_validate_var_names <- function(varnames, err_cnd <- c(err_cnd, ifelse(list_vars_first, glue("{fmt_vars(chk_alnum)} cannot contain any non-ASCII, symbol or underscore characters."), glue(" - Cannot contain any non-ASCII, symbol or underscore characters: {fmt_vars(chk_alnum)}."))) + Cannot contain any non-ASCII, symbol or underscore characters: {fmt_vars(chk_alnum)}."))) } # 1.4 Check for any lowercase letters - or not all uppercase chk_lower <- varnames[!stringr::str_detect( - stringr::str_replace_all(varnames, "[:digit:]", ""), + stringr::str_replace_all(varnames, "[:digit:]", ""), "^[[:upper:]]+$")] if (length(chk_lower) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, glue("{fmt_vars(chk_lower)} cannot contain any lowercase characters."), glue(" - Cannot contain any lowercase characters {fmt_vars(chk_lower)}."))) + Cannot contain any lowercase characters {fmt_vars(chk_lower)}."))) } return(err_cnd) } @@ -187,8 +187,8 @@ xpt_validate <- function(data) { chk_label_len <- labels[nchar(labels) > 40] if (length(chk_label_len) > 0) { - err_cnd <- c(err_cnd, - glue("{fmt_labs(chk_label_len)} must be 40 characters or less.")) + err_cnd <- c(err_cnd, + glue("{fmt_labs(chk_label_len)} must be 40 characters or less.")) } # 2.2 Check Non-ASCII and special characters @@ -201,9 +201,9 @@ xpt_validate <- function(data) { # 3.0 VARIABLE TYPES ---- types <- tolower(extract_attr(data, attr = "SAStype")) - expected_types <- c('', 'text', 'integer', 'float', 'datetime', 'date', 'time', - 'partialdate', 'partialtime', 'partialdatetime', - 'incompletedatetime', 'durationdatetime', 'intervaldatetime') + expected_types <- c("", "text", "integer", "float", "datetime", "date", "time", + "partialdate", "partialtime", "partialdatetime", + "incompletedatetime", "durationdatetime", "intervaldatetime") # 3.1 Invalid types -- chk_types <- types[which(!types %in% expected_types)] @@ -217,10 +217,10 @@ xpt_validate <- function(data) { formats <- tolower(extract_attr(data, attr = "format.sas")) ## The usual expected formats in clinical trials: characters, dates - expected_formats <- c(NA, - '', + expected_formats <- c(NA, + "", paste("$", 1:200, ".", sep = ""), - paste("date", 5:11, ".", sep = ""), + paste("date", 5:11, ".", sep = ""), paste("time", 2:20, ".", sep = ""), paste("datetime", 7:40, ".", sep = ""), paste("yymmdd", 2:10, ".", sep = ""), @@ -230,9 +230,9 @@ xpt_validate <- function(data) { chk_formats <- formats[which(!formats %in% expected_formats)] ## Remove the correctly numerically formatted variables - chk_formats <- chk_formats[which(!str_detect(chk_formats, - "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$"))] - if(length(chk_formats) > 0) { + format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" + chk_formats <- chk_formats[which(!str_detect(chk_formats, format_regex))] + if (length(chk_formats) > 0) { err_cnd <- c(err_cnd, glue("{fmt_fmts(names(chk_formats))} must have a valid format.")) } diff --git a/R/write.R b/R/write.R index b60d2c49..2bca7e39 100644 --- a/R/write.R +++ b/R/write.R @@ -10,11 +10,11 @@ #' @param label Dataset label. It must be<=40 characters. #' @details #' * Variable and dataset labels are stored in the "label" attribute. -#' +#' #' * SAS length are stored in the "SASlength" attribute. -#' +#' #' * SAS format are stored in the "SASformat" attribute. -#' +#' #' * SAS type are stored in the "SAStype" attribute. #' #' @return A data frame. `xportr_write()` returns the input data invisibly. diff --git a/R/xportr-package.R b/R/xportr-package.R index 6dae369c..dc5ada9c 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -20,7 +20,7 @@ #' @importFrom tm stemDocument #' @importFrom graphics stem #' @importFrom magrittr %>% extract2 -#' +#' "_PACKAGE" globalVariables(c("abbr_parsed", "abbr_stem", "adj_orig", "adj_parsed", "col_pos", "dict_varname", diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 264cc657..2e75053a 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -1,7 +1,7 @@ extract_format <- function(.x) { format_ <- character(length(.x)) - for (i in 1:length(.x)) { + for (i in seq_along(.x)) { format_[i] <- attr(.x[[i]], "format.sas") } format_ @@ -9,12 +9,12 @@ extract_format <- function(.x) { test_that("Variable label", { df <- data.frame(x = "a", y = "b") - varmeta <- data.frame(dataset = rep("df", 2), - variable = c("x", "y"), + varmeta <- data.frame(dataset = rep("df", 2), + variable = c("x", "y"), label = c("foo", "bar")) extract_varlabel <- function(.x) { - vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) + vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) } df <- xportr_label(df, varmeta) @@ -29,18 +29,18 @@ test_that("Variable label", { test_that("Dataset label", { df <- data.frame(x = "a", y = "b") - dfmeta <- data.frame(dataset = "df", - label = "Label") + dfmeta <- data.frame(dataset = "df", + label = "Label") - df <- xportr_df_label(df, dfmeta) - expect_equal(attr(df, "label"), "Label") + df <- xportr_df_label(df, dfmeta) + expect_equal(attr(df, "label"), "Label") expect_equal(dput(df), structure(list(x = "a", y = "b"), class = "data.frame", row.names = c(NA, -1L), label = "Label")) }) test_that("Expect error if any variable doesn't exist in var. metadata", { df <- data.frame(x = "a", y = "b") - varmeta <- data.frame(dataset = "df", + varmeta <- data.frame(dataset = "df", variable = "x", label = "foo") @@ -50,10 +50,10 @@ test_that("Expect error if any variable doesn't exist in var. metadata", { test_that("Expect error if any label exceeds 40 character", { df <- data.frame(x = "a", y = "b") - varmeta <- data.frame(dataset = rep("df", 2), - variable = c("x", "y"), + varmeta <- data.frame(dataset = rep("df", 2), + variable = c("x", "y"), label = c("foo", "Lorem ipsum dolor sit amet, consectetur adipiscing elit")) - dfmeta <- data.frame(dataset = "df", + dfmeta <- data.frame(dataset = "df", label = "Lorem ipsum dolor sit amet, consectetur adipiscing elit") expect_warning(xportr_label(df, varmeta), @@ -64,8 +64,8 @@ test_that("Expect error if any label exceeds 40 character", { test_that("xportr_format will set formats as expected", { df <- data.frame(x = 1, y = 2) - varmeta <- data.frame(dataset = rep("df", 2), - variable = c("x", "y"), + varmeta <- data.frame(dataset = rep("df", 2), + variable = c("x", "y"), format = c("date9.", "datetime20.")) @@ -80,8 +80,8 @@ test_that("xportr_format will set formats as expected", { test_that("xportr_format will handle NA values and won't error", { df <- data.frame(x = 1, y = 2, z = 3, a = 4) - varmeta <- data.frame(dataset = rep("df", 4), - variable = c("x", "y", "z", "abc"), + varmeta <- data.frame(dataset = rep("df", 4), + variable = c("x", "y", "z", "abc"), format = c("date9.", "datetime20.", NA, "text")) out <- xportr_format(df, varmeta) @@ -97,11 +97,11 @@ test_that("xportr_format will handle NA values and won't error", { test_that("Error ", { df1 <- data.frame(x = 1, y = 2) df2 <- data.frame(x = 3, y = 4) - expect_error(xportr_label(df1, df2, domain = 1), + expect_error(xportr_label(df1, df2, domain = 1), "`domain` must be a vector with type .") - expect_error(xportr_df_label(df1, df2, domain = mtcars), + expect_error(xportr_df_label(df1, df2, domain = mtcars), "`domain` must be a vector with type .") - expect_error(xportr_format(df1, df2, domain = 1L), + expect_error(xportr_format(df1, df2, domain = 1L), "`domain` must be a vector with type .") }) @@ -125,4 +125,4 @@ test_that("SAS length", { df <- cbind(df, z = 3) expect_error(xportr_length(df, varmeta, verbose = "stop"), "doesn't exist") -}) \ No newline at end of file +}) diff --git a/tests/testthat/test-options.R b/tests/testthat/test-options.R index c907aa41..9592f9f0 100644 --- a/tests/testthat/test-options.R +++ b/tests/testthat/test-options.R @@ -13,4 +13,3 @@ test_that("options are originally set as expected", { }) - diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index 92b31ed0..d249431d 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -1,13 +1,8 @@ -# library(dplyr) suppressWarnings({ library(haven) library(readxl) }) -# -# #context("xportr_seq correctly order dataset according to spec") -# - test_that("Variable are ordered correctly", { ADAE <- read_sas(system.file("extdata", "adae.sas7bdat", package = "xportr")) @@ -19,10 +14,10 @@ test_that("Variable are ordered correctly", { } ) - after_names <- c("STUDYID", "USUBJID", "AEDECOD", "AESOC", "AETERM", "AESER", - "ASTDT", "AENDT", "ATOXGR", "TRT01A", "TRT01AN", "SAFFL", "SUBJID", - "WEIGHTBL", "SEX", "AGE", "AGEU", "RACE", "SITEID", "RACEN", - "ASTTM", "ADURC", "AEACN", "AEOUT", "AEREL", "ATOXGRN", "AFTRTSTC", + after_names <- c("STUDYID", "USUBJID", "AEDECOD", "AESOC", "AETERM", "AESER", + "ASTDT", "AENDT", "ATOXGR", "TRT01A", "TRT01AN", "SAFFL", "SUBJID", + "WEIGHTBL", "SEX", "AGE", "AGEU", "RACE", "SITEID", "RACEN", + "ASTTM", "ADURC", "AEACN", "AEOUT", "AEREL", "ATOXGRN", "AFTRTSTC", "AEWDFL") expect_equal(names(ADAE_xportr), after_names) @@ -42,4 +37,3 @@ test_that("Domain not in character format", { }) - diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index b7a9124a..a162f2b1 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -28,5 +28,5 @@ test_that("variable types are coerced as expected and can raise messages", { expect_message(df4 <- xportr_type(df, meta_example, verbose = "message")) expect_equal(purrr::map_chr(df4, class), c(Subj = "numeric", Different = "character", - Val = "numeric", Param = "character"))}) - + Val = "numeric", Param = "character")) +}) diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index ad8d3776..b0c7119e 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -7,6 +7,6 @@ test_that("Get magrittr lhs side value", { get_pipe_call() } - expect_equal({mtcars %>% x("cyl")}, "mtcars") - expect_equal({mtcars %>% subset(cyl == 6) %>% x("cyl")}, "mtcars") + expect_equal(mtcars %>% x("cyl"), "mtcars") + expect_equal(mtcars %>% subset(cyl == 6) %>% x("cyl"), "mtcars") }) diff --git a/tests/testthat/test-var_checks.R b/tests/testthat/test-var_checks.R index 6ad4615b..80503365 100644 --- a/tests/testthat/test-var_checks.R +++ b/tests/testthat/test-var_checks.R @@ -1,5 +1,5 @@ # test_that("Variables have length <= 8", { -# +# # library(haven) # # path <- system.file("extdata", "adsl.sas7bdat", package = "xportr") diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index f97326c9..482227bf 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -7,7 +7,6 @@ test_that("SAS Transport file", { df <- data.frame(X = c(1, 2, NA), Y = c("a", "", "c"), Z = c(1, 2, 3)) - #SASxport::SASformat(df$x, "format") <- "date7." attr(df$X, "label") <- "foo" attr(df$Y, "label") <- "bar" attr(df$Z, "label") <- "baz" diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 8df23271..2c98eb41 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -21,7 +21,7 @@ library(DT) ```{r, include=FALSE} local({ - hook_output <- knitr::knit_hooks$get('output') + hook_output <- knitr::knit_hooks$get("output") knitr::knit_hooks$set(output = function(x, options) { if (!is.null(options$max.height)) options$attr.output <- c( options$attr.output, @@ -92,7 +92,7 @@ In order to make use of the functions within `xportr` you will need to create an var_spec <- readxl::read_xlsx( system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), sheet = "Variables") %>% dplyr::rename(type = "Data Type") %>% - rlang::set_names(tolower) + rlang::set_names(tolower) ``` @@ -130,7 +130,7 @@ Using `xport_type` and the supplied specification file, we can *coerce* the vari
```{r, warning=FALSE, message=FALSE, echo = TRUE, results='hide'} -adsl_type <- xportr_type(adsl, var_spec, domain = "ADSL", verbose = "message") +adsl_type <- xportr_type(adsl, var_spec, domain = "ADSL", verbose = "message") ```
@@ -181,7 +181,7 @@ Note the additional `attr(*, "width")=` after each variable with the width. The Please note that the order of the `ADSL` variables, see above, does not match specification file order column. We can quickly remedy this with a call to `xportr_order()`. Note that the variable `SITEID` has been moved as well as many others to match the specification file order column. ```{r, warning=FALSE, message=FALSE, echo = TRUE, results='hide'} -adsl_order <- xportr_order(adsl,var_spec, domain = "ADSL", verbose = "message") +adsl_order <- xportr_order(adsl, var_spec, domain = "ADSL", verbose = "message") ``` ```{r, echo = FALSE} @@ -250,8 +250,8 @@ adsl %>% xportr_type(var_spec, "ADSL", "message") %>% xportr_length(var_spec, "ADSL", "message") %>% xportr_label(var_spec, "ADSL", "message") %>% - xportr_order(var_spec, "ADSL", "message") %>% - xportr_format(var_spec, "ADSL", "message") %>% + xportr_order(var_spec, "ADSL", "message") %>% + xportr_format(var_spec, "ADSL", "message") %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` From 4e4e11a59b9d277152fa8461f38a3d197d7b5862 Mon Sep 17 00:00:00 2001 From: elimillera Date: Mon, 17 Apr 2023 16:09:15 +0000 Subject: [PATCH 007/337] change dev to devel --- .github/workflows/lint.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index c3690e45..ca69bc6c 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -4,7 +4,7 @@ on: push: branches: [main] pull_request: - branches: [main, dev] + branches: [main, devel] name: lint From a3c1e90c9311ec9d648acf2f402d88f3155a0f06 Mon Sep 17 00:00:00 2001 From: elimillera Date: Mon, 17 Apr 2023 17:34:03 +0000 Subject: [PATCH 008/337] push up new renv version and fix tests --- .Rbuildignore | 1 + renv.lock | 159 +++++++++++++++++++++-------- renv/.gitignore | 1 + renv/activate.R | 146 +++++++++++++++++++++----- renv/settings.json | 17 +++ tests/testthat/test-utils-xportr.R | 10 +- 6 files changed, 264 insertions(+), 70 deletions(-) create mode 100644 renv/settings.json diff --git a/.Rbuildignore b/.Rbuildignore index cc5cc94a..fa0fd94b 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -1,5 +1,6 @@ ^renv$ ^renv\.lock$ +.lintr ^xportr\.Rproj$ ^\.Rproj\.user$ ^LICENSE\.md$ diff --git a/renv.lock b/renv.lock index 486a5508..de585f70 100644 --- a/renv.lock +++ b/renv.lock @@ -1,6 +1,6 @@ { "R": { - "Version": "4.1.3", + "Version": "4.2.0", "Repositories": [ { "Name": "CRAN", @@ -95,6 +95,14 @@ "Hash": "50c838a310445e954bc13f26f26a6ecf", "Requirements": [] }, + "backports": { + "Package": "backports", + "Version": "1.4.1", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "c39fbec8a30d23e721980b8afb31984c", + "Requirements": [] + }, "base64enc": { "Package": "base64enc", "Version": "0.1-3", @@ -178,13 +186,11 @@ }, "cli": { "Package": "cli", - "Version": "3.2.0", + "Version": "3.6.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "1bdb126893e9ce6aae50ad1d6fc32faf", - "Requirements": [ - "glue" - ] + "Hash": "3177a5a16c243adc199ba33117bd9657", + "Requirements": [] }, "clipr": { "Package": "clipr", @@ -194,6 +200,14 @@ "Hash": "3f038e5ac7f41d4ac41ce658c85e3042", "Requirements": [] }, + "codetools": { + "Package": "codetools", + "Version": "0.2-18", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "019388fc48e48b3da0d3a76ff94608a8", + "Requirements": [] + }, "cpp11": { "Package": "cpp11", "Version": "0.4.2", @@ -231,6 +245,20 @@ "Hash": "022c42d49c28e95d69ca60446dbabf88", "Requirements": [] }, + "cyclocomp": { + "Package": "cyclocomp", + "Version": "1.1.0", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "53cbed70a2f7472d48fb6aef08442f25", + "Requirements": [ + "callr", + "crayon", + "desc", + "remotes", + "withr" + ] + }, "desc": { "Package": "desc", "Version": "1.4.1", @@ -281,12 +309,13 @@ }, "dplyr": { "Package": "dplyr", - "Version": "1.0.8", + "Version": "1.1.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "ef47665e64228a17609d6df877bf86f2", + "Hash": "eb5742d256a0d9306d85ea68756d8187", "Requirements": [ "R6", + "cli", "generics", "glue", "lifecycle", @@ -382,10 +411,10 @@ }, "haven": { "Package": "haven", - "Version": "2.5.0", + "Version": "2.5.2", "Source": "Repository", "Repository": "CRAN", - "Hash": "e3058e4ac77f4fa686f68a1838d5b715", + "Hash": "8b331e659e67d757db0fcc28e689c501", "Requirements": [ "cli", "cpp11", @@ -551,15 +580,36 @@ }, "lifecycle": { "Package": "lifecycle", - "Version": "1.0.1", + "Version": "1.0.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "a6b6d352e3ed897373ab19d8395c98d0", + "Hash": "001cecbeac1cff9301bdc3775ee46a86", "Requirements": [ + "cli", "glue", "rlang" ] }, + "lintr": { + "Package": "lintr", + "Version": "3.0.2", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "b21ebd652d940f099915221f3328ab7b", + "Requirements": [ + "backports", + "codetools", + "crayon", + "cyclocomp", + "digest", + "glue", + "jsonlite", + "knitr", + "rex", + "xml2", + "xmlparsedata" + ] + }, "lubridate": { "Package": "lubridate", "Version": "1.8.0", @@ -573,10 +623,10 @@ }, "magrittr": { "Package": "magrittr", - "Version": "2.0.2", + "Version": "2.0.3", "Source": "Repository", "Repository": "CRAN", - "Hash": "cdc87ecd81934679d1557633d8e1fe51", + "Hash": "7ce2733a9826b3aeb1775d56fd305472", "Requirements": [] }, "memoise": { @@ -610,14 +660,12 @@ }, "pillar": { "Package": "pillar", - "Version": "1.7.0", + "Version": "1.9.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "51dfc97e1b7069e9f7e6f83f3589c22e", + "Hash": "15da5a8412f317beeee6175fbc76f4bb", "Requirements": [ "cli", - "crayon", - "ellipsis", "fansi", "glue", "lifecycle", @@ -743,13 +791,16 @@ }, "purrr": { "Package": "purrr", - "Version": "0.3.4", + "Version": "1.0.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "97def703420c8ab10d8f0e6c72101e02", + "Hash": "d71c815267c640f17ddbf7f16144b4bb", "Requirements": [ + "cli", + "lifecycle", "magrittr", - "rlang" + "rlang", + "vctrs" ] }, "ragg": { @@ -822,20 +873,35 @@ "tibble" ] }, + "remotes": { + "Package": "remotes", + "Version": "2.4.2", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "227045be9aee47e6dda9bb38ac870d67", + "Requirements": [] + }, "renv": { "Package": "renv", - "Version": "0.15.5", + "Version": "0.17.3", + "Source": "Repository" + }, + "rex": { + "Package": "rex", + "Version": "1.2.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "6a38294e7d12f5d8e656b08c5bd8ae34", - "Requirements": [] + "Hash": "ae34cd56890607370665bee5bd17812f", + "Requirements": [ + "lazyeval" + ] }, "rlang": { "Package": "rlang", - "Version": "1.0.2", + "Version": "1.1.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "04884d9a75d778aca22c7154b8333ec9", + "Hash": "dc079ccd156cde8647360f473c1fa718", "Requirements": [] }, "rmarkdown": { @@ -916,14 +982,18 @@ }, "stringr": { "Package": "stringr", - "Version": "1.4.0", + "Version": "1.5.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "0759e6b6c0957edb1311028a49a35e76", + "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8", "Requirements": [ + "cli", "glue", + "lifecycle", "magrittr", - "stringi" + "rlang", + "stringi", + "vctrs" ] }, "sys": { @@ -985,12 +1055,11 @@ }, "tibble": { "Package": "tibble", - "Version": "3.1.6", + "Version": "3.2.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "8a8f02d1934dfd6431c671361510dd0b", + "Hash": "a84e2cc86d07289b3b6f5069df7a004c", "Requirements": [ - "ellipsis", "fansi", "lifecycle", "magrittr", @@ -1022,16 +1091,17 @@ }, "tidyselect": { "Package": "tidyselect", - "Version": "1.1.2", + "Version": "1.2.0", "Source": "Repository", "Repository": "CRAN", - "Hash": "17f6da8cfd7002760a859915ce7eef8f", + "Hash": "79540e5fcd9e0435af547d885f184fd5", "Requirements": [ - "ellipsis", + "cli", "glue", - "purrr", + "lifecycle", "rlang", - "vctrs" + "vctrs", + "withr" ] }, "tinytex": { @@ -1078,13 +1148,14 @@ }, "vctrs": { "Package": "vctrs", - "Version": "0.3.8", + "Version": "0.6.1", "Source": "Repository", "Repository": "CRAN", - "Hash": "ecf749a1b39ea72bd9b51b76292261f1", + "Hash": "06eceb3a5d716fd0654cc23ca3d71a99", "Requirements": [ - "ellipsis", + "cli", "glue", + "lifecycle", "rlang" ] }, @@ -1159,6 +1230,14 @@ "Hash": "40682ed6a969ea5abfd351eb67833adc", "Requirements": [] }, + "xmlparsedata": { + "Package": "xmlparsedata", + "Version": "1.0.5", + "Source": "Repository", + "Repository": "CRAN", + "Hash": "45e4bf3c46476896e821fc0a408fb4fc", + "Requirements": [] + }, "yaml": { "Package": "yaml", "Version": "2.3.5", diff --git a/renv/.gitignore b/renv/.gitignore index 275e4ca3..22a0d01d 100644 --- a/renv/.gitignore +++ b/renv/.gitignore @@ -1,3 +1,4 @@ +sandbox/ library/ local/ cellar/ diff --git a/renv/activate.R b/renv/activate.R index 72c0818a..a8fdc320 100644 --- a/renv/activate.R +++ b/renv/activate.R @@ -2,7 +2,7 @@ local({ # the requested version of renv - version <- "0.15.5" + version <- "0.17.3" # the project directory project <- getwd() @@ -63,6 +63,10 @@ local({ if (is.environment(x) || length(x)) x else y } + `%??%` <- function(x, y) { + if (is.null(x)) y else x + } + bootstrap <- function(version, library) { # attempt to download renv @@ -83,28 +87,39 @@ local({ renv_bootstrap_repos <- function() { + # get CRAN repository + cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") + # check for repos override repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) - if (!is.na(repos)) + if (!is.na(repos)) { + + # check for RSPM; if set, use a fallback repository for renv + rspm <- Sys.getenv("RSPM", unset = NA) + if (identical(rspm, repos)) + repos <- c(RSPM = rspm, CRAN = cran) + return(repos) + } + # check for lockfile repositories repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) if (!inherits(repos, "error") && length(repos)) return(repos) # if we're testing, re-use the test repositories - if (renv_bootstrap_tests_running()) - return(getOption("renv.tests.repos")) + if (renv_bootstrap_tests_running()) { + repos <- getOption("renv.tests.repos") + if (!is.null(repos)) + return(repos) + } # retrieve current repos repos <- getOption("repos") # ensure @CRAN@ entries are resolved - repos[repos == "@CRAN@"] <- getOption( - "renv.repos.cran", - "https://cloud.r-project.org" - ) + repos[repos == "@CRAN@"] <- cran # add in renv.bootstrap.repos if set default <- c(FALLBACK = "https://cloud.r-project.org") @@ -185,43 +200,80 @@ local({ if (fixup) mode <- "w+b" - utils::download.file( + args <- list( url = url, destfile = destfile, mode = mode, quiet = TRUE ) + if ("headers" %in% names(formals(utils::download.file))) + args$headers <- renv_bootstrap_download_custom_headers(url) + + do.call(utils::download.file, args) + + } + + renv_bootstrap_download_custom_headers <- function(url) { + + headers <- getOption("renv.download.headers") + if (is.null(headers)) + return(character()) + + if (!is.function(headers)) + stopf("'renv.download.headers' is not a function") + + headers <- headers(url) + if (length(headers) == 0L) + return(character()) + + if (is.list(headers)) + headers <- unlist(headers, recursive = FALSE, use.names = TRUE) + + ok <- + is.character(headers) && + is.character(names(headers)) && + all(nzchar(names(headers))) + + if (!ok) + stop("invocation of 'renv.download.headers' did not return a named character vector") + + headers + } renv_bootstrap_download_cran_latest <- function(version) { spec <- renv_bootstrap_download_cran_latest_find(version) + type <- spec$type + repos <- spec$repos message("* Downloading renv ", version, " ... ", appendLF = FALSE) - type <- spec$type - repos <- spec$repos + baseurl <- utils::contrib.url(repos = repos, type = type) + ext <- if (identical(type, "source")) + ".tar.gz" + else if (Sys.info()[["sysname"]] == "Windows") + ".zip" + else + ".tgz" + name <- sprintf("renv_%s%s", version, ext) + url <- paste(baseurl, name, sep = "/") - info <- tryCatch( - utils::download.packages( - pkgs = "renv", - destdir = tempdir(), - repos = repos, - type = type, - quiet = TRUE - ), + destfile <- file.path(tempdir(), name) + status <- tryCatch( + renv_bootstrap_download_impl(url, destfile), condition = identity ) - if (inherits(info, "condition")) { + if (inherits(status, "condition")) { message("FAILED") return(FALSE) } # report success and return message("OK (downloaded ", type, ")") - info[1, 2] + destfile } @@ -307,8 +359,7 @@ local({ return() # allow directories - info <- file.info(tarball, extra_cols = FALSE) - if (identical(info$isdir, TRUE)) { + if (dir.exists(tarball)) { name <- sprintf("renv_%s.tar.gz", version) tarball <- file.path(tarball, name) } @@ -622,8 +673,8 @@ local({ if (version == loadedversion) return(TRUE) - # assume four-component versions are from GitHub; three-component - # versions are from CRAN + # assume four-component versions are from GitHub; + # three-component versions are from CRAN components <- strsplit(loadedversion, "[.-]")[[1]] remote <- if (length(components) == 4L) paste("rstudio/renv", loadedversion, sep = "@") @@ -663,6 +714,12 @@ local({ # warn if the version of renv loaded does not match renv_bootstrap_validate_version(version) + # execute renv load hooks, if any + hooks <- getHook("renv::autoload") + for (hook in hooks) + if (is.function(hook)) + tryCatch(hook(), error = warning) + # load the project renv::load(project) @@ -678,7 +735,7 @@ local({ return(profile) # check for a profile file (nothing to do if it doesn't exist) - path <- renv_bootstrap_paths_renv("profile", profile = FALSE) + path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) if (!file.exists(path)) return(NULL) @@ -805,9 +862,41 @@ local({ renv_json_read <- function(file = NULL, text = NULL) { + jlerr <- NULL + + # if jsonlite is loaded, use that instead + if ("jsonlite" %in% loadedNamespaces()) { + + json <- catch(renv_json_read_jsonlite(file, text)) + if (!inherits(json, "error")) + return(json) + + jlerr <- json + + } + + # otherwise, fall back to the default JSON reader + json <- catch(renv_json_read_default(file, text)) + if (!inherits(json, "error")) + return(json) + + # report an error + if (!is.null(jlerr)) + stop(jlerr) + else + stop(json) + + } + + renv_json_read_jsonlite <- function(file = NULL, text = NULL) { text <- paste(text %||% read(file), collapse = "\n") + jsonlite::fromJSON(txt = text, simplifyVector = FALSE) + } + + renv_json_read_default <- function(file = NULL, text = NULL) { # find strings in the JSON + text <- paste(text %||% read(file), collapse = "\n") pattern <- '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' locs <- gregexpr(pattern, text, perl = TRUE)[[1]] @@ -838,8 +927,9 @@ local({ # transform the JSON into something the R parser understands transformed <- replaced - transformed <- gsub("[[{]", "list(", transformed) - transformed <- gsub("[]}]", ")", transformed) + transformed <- gsub("{}", "`names<-`(list(), character())", transformed, fixed = TRUE) + transformed <- gsub("[[{]", "list(", transformed, perl = TRUE) + transformed <- gsub("[]}]", ")", transformed, perl = TRUE) transformed <- gsub(":", "=", transformed, fixed = TRUE) text <- paste(transformed, collapse = "\n") diff --git a/renv/settings.json b/renv/settings.json new file mode 100644 index 00000000..3331ef25 --- /dev/null +++ b/renv/settings.json @@ -0,0 +1,17 @@ +{ + "bioconductor.version": [], + "external.libraries": [], + "ignored.packages": [], + "package.dependency.fields": [ + "Imports", + "Depends", + "LinkingTo" + ], + "r.version": [], + "snapshot.type": "implicit", + "use.cache": true, + "vcs.ignore.cellar": true, + "vcs.ignore.library": true, + "vcs.ignore.local": true, + "vcs.manage.ignores": true +} diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index b0c7119e..93de69db 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -7,6 +7,12 @@ test_that("Get magrittr lhs side value", { get_pipe_call() } - expect_equal(mtcars %>% x("cyl"), "mtcars") - expect_equal(mtcars %>% subset(cyl == 6) %>% x("cyl"), "mtcars") + expect_equal({ + mtcars %>% x("cyl") + }, + "mtcars") + expect_equal({ + mtcars %>% subset(cyl == 6) %>% x("cyl") + }, + "mtcars") }) From 22fb13e0aa8cfb37e2addb57607c9deae2ab1af3 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 18 Apr 2023 15:56:19 +0000 Subject: [PATCH 009/337] Update NEWS.md --- NEWS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS.md b/NEWS.md index 1525ffa5..f4fed78a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,6 @@ +# xportr 0.3.0 +* Fixed an issue where xportr_type would overwrite column labels, widths, and "sas.formats" + # xportr 0.2.0 * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! * Fixed an issue where xportr_format could pass invalid formats to haven::write_xpt. From d67cf2ca0c6a6bb620891a81165224155eef1f7b Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 18 Apr 2023 16:00:55 +0000 Subject: [PATCH 010/337] Update metadata variable name in test --- tests/testthat/test-type.R | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index f0930ab2..daaa4ac0 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -39,7 +39,7 @@ test_that("xportr_type() retains column attributes, besides class", { SEX = c("M", "F", "M") ) - metacore <- dplyr::tibble( + metadata <- dplyr::tibble( dataset = "adsl", variable = c("USUBJID", "SITEID", "ADATE", "AGE", "SEX"), label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), @@ -49,16 +49,16 @@ test_that("xportr_type() retains column attributes, besides class", { ) df_type_label <- adsl %>% - xportr_type(metacore) %>% - xportr_label(metacore) %>% - xportr_length(metacore) %>% - xportr_format(metacore) + xportr_type(metadata) %>% + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_format(metadata) df_label_type <- adsl %>% - xportr_label(metacore) %>% - xportr_length(metacore) %>% - xportr_format(metacore) %>% - xportr_type(metacore) + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_format(metadata) %>% + xportr_type(metadata) expect_equal(df_type_label, df_label_type) }) From 5a2680784ebdb47be8d8111f4ec5ba01c1260e60 Mon Sep 17 00:00:00 2001 From: vedhav Date: Wed, 19 Apr 2023 05:48:42 +0530 Subject: [PATCH 011/337] Adding test cases for label functions and fix existing test warnings --- DESCRIPTION | 1 + R/utils-xportr.R | 2 +- renv/.gitignore | 1 + tests/testthat/test-metadata.R | 118 +++++++++++++++++++++++++++------ 4 files changed, 101 insertions(+), 21 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 773c0df7..7895067b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -50,6 +50,7 @@ Roxygen: list(markdown = TRUE) RoxygenNote: 7.2.3 Suggests: testthat (>= 3.0.0), + metacore, withr, knitr, rmarkdown, diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 2c39698b..c024c52b 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -244,7 +244,7 @@ xpt_validate <- function(data) { #' @return The R Object at the top of a pipe stack #' @noRd get_pipe_call <- function() { - call_strs <- map_chr(sys.calls(), as_label) + call_strs <- map_chr(as.list(sys.calls()), as_label) top_call <- min(which(str_detect(call_strs, "%>%"))) call_str <- as_label(sys.calls()[[top_call]]) trimws(strsplit(call_str, "%>%", fixed = TRUE)[[1]][[1]]) diff --git a/renv/.gitignore b/renv/.gitignore index 275e4ca3..22a0d01d 100644 --- a/renv/.gitignore +++ b/renv/.gitignore @@ -1,3 +1,4 @@ +sandbox/ library/ local/ cellar/ diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 264cc657..5a89a1b0 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -1,3 +1,6 @@ +suppressWarnings({ + library(metacore) +}) extract_format <- function(.x) { format_ <- character(length(.x)) @@ -8,34 +11,110 @@ extract_format <- function(.x) { } test_that("Variable label", { - df <- data.frame(x = "a", y = "b") - varmeta <- data.frame(dataset = rep("df", 2), - variable = c("x", "y"), - label = c("foo", "bar")) + df <- data.frame(x = "a", y = "b", variable = "value") + df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) + metacore_meta <- suppressWarnings( + metacore( + var_spec = data.frame( + variable = c("x", "y"), + type = "text", + label = c("X Label", "Y Label"), + length = c(4, 4), + common = NA_character_, + format = NA_character_ + ) + ) + ) - extract_varlabel <- function(.x) { + extract_var_label <- function(.x) { vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) } - df <- xportr_label(df, varmeta) - df_dput <- dput(df) + df_labeled_df <- df %>% xportr_label(df_meta) + metacoes_labeled_df <- df_labeled_df %>% xportr_label(metacore_meta, domain = "DOMAIN") - expect_equal(extract_varlabel(df), c("foo", "bar")) - expect_equal(df_dput, - structure(list(x = structure("a", label = "foo"), - y = structure("b", label = "bar")), - row.names = c(NA, -1L), class = "data.frame")) + expect_equal(extract_var_label(df_labeled_df), c("foo", "bar", "")) + expect_equal(extract_var_label(metacoes_labeled_df), c("X Label", "Y Label", "")) + expect_equal( + dput(df_labeled_df), + structure( + list( + x = structure("a", label = "foo"), + y = structure("b", label = "bar"), + variable = structure("value", label = "") + ), + row.names = c(NA, -1L), + `_xportr.df_arg_` = "df", + class = "data.frame" + ) + ) + expect_equal( + dput(metacoes_labeled_df), + structure( + list( + x = structure("a", label = "X Label"), + y = structure("b", label = "Y Label"), + variable = structure("value", label = "") + ), + row.names = c(NA, -1L), + `_xportr.df_arg_` = "DOMAIN", + class = "data.frame" + ) + ) }) test_that("Dataset label", { df <- data.frame(x = "a", y = "b") - dfmeta <- data.frame(dataset = "df", - label = "Label") + renamed_dataset_df <- structure( + df, + `_xportr.df_arg_` = "CUSTOMNAME" + ) + + df_meta <- data.frame(dataset = "df", label = "Label") + metacore_meta <- suppressWarnings( + metacore( + ds_spec = data.frame( + dataset = c("df", "CUSTOMNAME", "DOMAINNAME"), + structure = "", + label = c("Label", "Custom Label", "Domain Label") + ) + ) + ) - df <- xportr_df_label(df, dfmeta) - expect_equal(attr(df, "label"), "Label") - expect_equal(dput(df), structure(list(x = "a", y = "b"), class = "data.frame", - row.names = c(NA, -1L), label = "Label")) + df_spec_labeled_df <- xportr_df_label(df, df_meta) + piped_spec_labeled_df <- df %>% xportr_df_label(df_meta) + renamed_spec_labeled_df <- xportr_df_label(renamed_dataset_df, metacore_meta) + domain_spec_labeled_df <- xportr_df_label(renamed_dataset_df, metacore_meta, domain = "DOMAINNAME") + + expect_equal(attr(df_spec_labeled_df, "label"), "Label") + expect_equal( + dput(df_spec_labeled_df), + structure(list(x = "a", y = "b"), class = "data.frame", row.names = c(NA, -1L), label = "Label") + ) + expect_equal(attr(piped_spec_labeled_df, "label"), "Label") + expect_equal( + dput(piped_spec_labeled_df), + structure( + list(x = "a", y = "b"), class = "data.frame", + row.names = c(NA, -1L), `_xportr.df_arg_` = "df", label = "Label" + ) + ) + expect_equal(attr(renamed_spec_labeled_df, "label"), "Custom Label") + expect_equal( + dput(renamed_spec_labeled_df), + structure( + list(x = "a", y = "b"), class = "data.frame", + row.names = c(NA, -1L), `_xportr.df_arg_` = "CUSTOMNAME", label = "Custom Label" + ) + ) + expect_equal(attr(domain_spec_labeled_df, "label"), "Domain Label") + expect_equal( + dput(domain_spec_labeled_df), + structure( + list(x = "a", y = "b"), class = "data.frame", + row.names = c(NA, -1L), label = "Domain Label", `_xportr.df_arg_` = "DOMAINNAME" + ) + ) }) test_that("Expect error if any variable doesn't exist in var. metadata", { @@ -44,8 +123,7 @@ test_that("Expect error if any variable doesn't exist in var. metadata", { variable = "x", label = "foo") - # expect_error(xportr_label(df, varmeta, verbose = "stop"), - # "present in `.df` but doesn't exist in `datadef`") + expect_error(xportr_label(df, varmeta, verbose = "stop")) }) test_that("Expect error if any label exceeds 40 character", { From 157b46f6c825ef0c3cfbf6bdbec1a4f45724774d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 19 Apr 2023 10:56:41 +0200 Subject: [PATCH 012/337] add tests for xportr_length --- DESCRIPTION | 3 +- tests/testthat/helper-length.R | 20 ++++ tests/testthat/test-length.R | 210 +++++++++++++++++++++++++++++++-- 3 files changed, 222 insertions(+), 11 deletions(-) create mode 100644 tests/testthat/helper-length.R diff --git a/DESCRIPTION b/DESCRIPTION index 773c0df7..c6f92af3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -61,6 +61,7 @@ Suggests: spelling, usethis, lintr, - styler + styler, + metacore Config/testthat/edition: 3 VignetteBuilder: knitr diff --git a/tests/testthat/helper-length.R b/tests/testthat/helper-length.R new file mode 100644 index 00000000..b6a3d7f4 --- /dev/null +++ b/tests/testthat/helper-length.R @@ -0,0 +1,20 @@ +# Re-usable data for sample ADSL table +minimal_adsl <- data.frame( + USUBJID = c(1001, 1002, 1003), + BRTHDT = c(1, 1, 2) +) + +# Re-usable data from sample metadata for ADSL +minimal_length_metadata <- data.frame( + dataset = c("adsl", "adsl"), + variable = c("USUBJID", "BRTHDT"), + length = c(20, 8) +) + +# Custom expect function to test result of xportr_length +expect_attr_width <- function(result, metadata_length) { + (purrr::map(result, attributes) %>% + purrr::pluck("width") %>% unlist() == metadata_length) %>% all() %>% + expect_true() + invisible(result) +} diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index b75b8ebf..89ea01fc 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -1,15 +1,205 @@ -suppressWarnings({ - library(haven) - library(readxl) +#' Test `xportr_length()` function +#' +#' Tests will check for: +#' * Errors +#' * Result of call will create `SASlength` attribute (`width` for each +#' variable) +#' +#' Helper functions / data (from ÂŽtest/testthat/helper-length.RÂŽ): +#' * \code{minimal_adsl} : minimal data frame with ADSL sample +#' * \code{minimal_length_metadata} : minimal metadata used in +#' `xport_length()`. It contains dataset (domain), variable names and length +#' * \code{expect_attr_width(result, metadata_length)} : support function to +#' test the data.frame modifications being done in `xportr_length()` + +test_that("Valid domain names", { + adsl <- minimal_adsl + metadata <- minimal_length_metadata + + # Setup temporary options with active verbose + withr::local_options(list(xportr.length_verbose = "message")) + + # Test minimal call with valid data and without domain + xportr_length(adsl, metadata) %>% + expect_silent() %>% + expect_attr_width(metadata$length) + + # Test minimal call with valid data with a valid domain + xportr_length(adsl, metadata, domain = "adsl") %>% + expect_silent() %>% + expect_attr_width(metadata$length) %>% + NROW() %>% + expect_equal(3) + + # Test minimal call without datasets + metadata_without_dataset <- metadata %>% dplyr::select(-"dataset") + + xportr_length(adsl, metadata_without_dataset) %>% + expect_silent() %>% + expect_attr_width(metadata_without_dataset$length) %>% + NROW() %>% + expect_equal(3) + + + # Test minimal call without datasets, but valid domain + xportr_length(adsl, metadata_without_dataset, domain = "adsl") %>% + expect_silent() %>% + expect_attr_width(metadata_without_dataset$length) %>% + NROW() %>% + expect_equal(3) +}) + +test_that("CDISC data frame is being piped after another xportr function", { + adsl <- minimal_adsl + metadata <- minimal_length_metadata %>% + dplyr::bind_cols(type = c("numeric", "numeric")) + + # Setup temporary options with active verbose + withr::local_options(list(xportr.length_verbose = "message")) + + adsl %>% + xportr_type(metadata, domain = "adsl", verbose = "message") %>% + xportr_length(metadata) %>% + expect_silent() %>% + expect_attr_width(metadata$length) %>% + attr("_xportr.df_arg_" ) %>% + expect_equal("adsl") +}) + +test_that("CDISC data frame is being piped", { + adsl <- minimal_adsl + metadata <- minimal_length_metadata %>% + dplyr::bind_cols(type = c("numeric", "numeric")) + + # Setup temporary options with `verbose = "message"` + withr::local_options(list(xportr.length_verbose = "message")) + + adsl %>% + xportr_length(metadata, domain = "adsl") %>% + expect_attr_width(metadata$length) %>% + attr("_xportr.df_arg_" ) %>% + expect_equal("adsl") + + # Prevent CLI messages + withr::local_options( + list(cli.default_handler = function(...) { }) + ) + + # Test message when dataset is set, but domain used in parameters + expect_message( + adsl %>% xportr_length(metadata), + regexp = "Variable\\(s\\) present in dataframe but doesn't exist in `.*`." + ) + + # Test results with piping + adsl %>% xportr_length(metadata) %>% + expect_attr_width(metadata$length) %>% + attr("_xportr.df_arg_" ) %>% + expect_equal("...") +}) + +test_that("Impute character lengths based on class", { + adsl <- minimal_adsl + metadata <- minimal_length_metadata + + # Setup temporary options with `verbose = "none"` + withr::local_options(list(xportr.length_verbose = "none")) + # Prevent CLI messages + withr::local_options(list(cli.default_handler = function(...) { })) + # Define controlled `charater_types` for this test + withr::local_options(list(xportr.character_types = c("character", "date"))) + + # Test length imputation of character and numeric (not valid character type) + adsl %>% + mutate( + USUBJID = as.numeric(.data$USUBJID), + BRTHDT = as.character(.data$BRTHDT) + ) %>% + xportr_length(metadata) %>% + expect_attr_width(c(8, 200)) %>% + attr("_xportr.df_arg_" ) %>% + expect_equal("...") + + # Test length imputation of two valid character types (both should have + # `widht = 200``) + adsl %>% + mutate( + USUBJID = as.character(.data$USUBJID), + BRTHDT = as.Date(.data$BRTHDT, origin = "1970-01-01") + ) %>% + xportr_length(metadata) %>% + expect_attr_width(c(200, 200)) %>% + attr("_xportr.df_arg_" ) %>% + expect_equal("...") +}) + +test_that("Variables not in metacore", { + adsl <- minimal_adsl + metadata <- minimal_length_metadata %>% + dplyr::filter(variable != "BRTHDT") + + # Prevent CLI messages + withr::local_options(list(cli.default_handler = function(...) { })) + # Setup temporary options with `verbose = "message"` + withr::local_options(list(xportr.length_verbose = "message")) + + # Test that message is given which indicates that variable is not present + xportr_length(adsl, metadata) %>% + expect_message(regexp = "Problem with `BRTHDT`") +}) + +test_that("Metacore instance can be used", { + adsl <- minimal_adsl + + # Build a minimal metacore object + metadata <- suppressMessages( + suppressWarnings( + metacore::metacore( + ds_spec = dplyr::tibble( + dataset = "ADSL" + ), + ds_vars = dplyr::tibble( + dataset = "ADSL", + variable = colnames(adsl) + ), + var_spec = dplyr::tibble( + variable = c("USUBJID", "BRTHDT"), + type = c("integer", "integer"), + length = c(20, 8), + label = c("Unique Subject Identifier "), + format = NA_character_, + common = NA + ) + ) + ) + ) + + # Test metacore parameter with `metacore` class instead of data.frame + xportr_length(adsl, metadata, domain = "adsl", verbose = "message") %>% + expect_silent() %>% + NROW() %>% + expect_equal(3) %>% + expect_attr_width(metadata$length) }) test_that("Domain not in character format", { - - ADAE <- read_sas(system.file("extdata", "adae.sas7bdat", package = "xportr")) - met <- read_excel(system.file("specs", "ADaM_spec.xlsx", package = "xportr"), 3) - + ADAE <- haven::read_sas(system.file("extdata", "adae.sas7bdat", package = "xportr")) + met <- readxl::read_excel(system.file("specs", "ADaM_spec.xlsx", package = "xportr"), 3) + expect_error( - xportr_length(ADAE, metacore = met, domain = ADAE, verbose = "none") - ) - + xportr_length(ADAE, metacore = met, domain = ADAE, verbose = "none") + ) + +}) + +test_that("Column length of known/unkown character types is 200/8 ", { + expect_equal(impute_length(123), 8) + expect_equal(impute_length(123L), 8) + expect_equal(impute_length("string"), 200) + expect_equal(impute_length(Sys.Date()), 200) + expect_equal(impute_length(Sys.time()), 200) + + withr::local_options(list(xportr.character_types = c("character", "date"))) + expect_equal(impute_length(Sys.time()), 8) + }) From b5f9522cb278ec37c8e1ac3362e367ca646e464d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 20 Apr 2023 00:04:19 +0200 Subject: [PATCH 013/337] use functions without :: to follow pkg convention --- tests/testthat/test-length.R | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 89ea01fc..45e33014 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -32,7 +32,7 @@ test_that("Valid domain names", { expect_equal(3) # Test minimal call without datasets - metadata_without_dataset <- metadata %>% dplyr::select(-"dataset") + metadata_without_dataset <- metadata %>% select(-"dataset") xportr_length(adsl, metadata_without_dataset) %>% expect_silent() %>% @@ -52,7 +52,7 @@ test_that("Valid domain names", { test_that("CDISC data frame is being piped after another xportr function", { adsl <- minimal_adsl metadata <- minimal_length_metadata %>% - dplyr::bind_cols(type = c("numeric", "numeric")) + bind_cols(type = c("numeric", "numeric")) # Setup temporary options with active verbose withr::local_options(list(xportr.length_verbose = "message")) @@ -69,7 +69,7 @@ test_that("CDISC data frame is being piped after another xportr function", { test_that("CDISC data frame is being piped", { adsl <- minimal_adsl metadata <- minimal_length_metadata %>% - dplyr::bind_cols(type = c("numeric", "numeric")) + bind_cols(type = c("numeric", "numeric")) # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) @@ -136,7 +136,7 @@ test_that("Impute character lengths based on class", { test_that("Variables not in metacore", { adsl <- minimal_adsl metadata <- minimal_length_metadata %>% - dplyr::filter(variable != "BRTHDT") + filter(variable != "BRTHDT") # Prevent CLI messages withr::local_options(list(cli.default_handler = function(...) { })) @@ -183,13 +183,17 @@ test_that("Metacore instance can be used", { }) test_that("Domain not in character format", { - ADAE <- haven::read_sas(system.file("extdata", "adae.sas7bdat", package = "xportr")) - met <- readxl::read_excel(system.file("specs", "ADaM_spec.xlsx", package = "xportr"), 3) + skip_if_not( + require(haven, quietly = TRUE) && require(readxl, quietly = TRUE), + message = "haven or readxl not installed" + ) + + ADAE <- read_sas(system.file("extdata", "adae.sas7bdat", package = "xportr")) + met <- read_excel(system.file("specs", "ADaM_spec.xlsx", package = "xportr"), 3) expect_error( xportr_length(ADAE, metacore = met, domain = ADAE, verbose = "none") ) - }) test_that("Column length of known/unkown character types is 200/8 ", { From 8a5b395ecacb5623c0ea29a5c69d35feb5e17347 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:30:52 +0200 Subject: [PATCH 014/337] improve on test names with prefix on function that's being tested --- tests/testthat/test-length.R | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 45e33014..56ba183e 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -12,7 +12,7 @@ #' * \code{expect_attr_width(result, metadata_length)} : support function to #' test the data.frame modifications being done in `xportr_length()` -test_that("Valid domain names", { +test_that("[xportr_length()] Accepts valid domain names in metadata/metacore", { adsl <- minimal_adsl metadata <- minimal_length_metadata @@ -40,16 +40,15 @@ test_that("Valid domain names", { NROW() %>% expect_equal(3) - - # Test minimal call without datasets, but valid domain - xportr_length(adsl, metadata_without_dataset, domain = "adsl") %>% + # Test minimal call without datasets and ignores domain + xportr_length(adsl, metadata_without_dataset, domain = "something_else") %>% expect_silent() %>% expect_attr_width(metadata_without_dataset$length) %>% NROW() %>% expect_equal(3) }) -test_that("CDISC data frame is being piped after another xportr function", { +test_that("[xportr_length()] CDISC data frame is being piped after another xportr function", { adsl <- minimal_adsl metadata <- minimal_length_metadata %>% bind_cols(type = c("numeric", "numeric")) @@ -66,7 +65,7 @@ test_that("CDISC data frame is being piped after another xportr function", { expect_equal("adsl") }) -test_that("CDISC data frame is being piped", { +test_that("[xportr_length()] CDISC data frame is being recognized as piped", { adsl <- minimal_adsl metadata <- minimal_length_metadata %>% bind_cols(type = c("numeric", "numeric")) @@ -98,7 +97,7 @@ test_that("CDISC data frame is being piped", { expect_equal("...") }) -test_that("Impute character lengths based on class", { +test_that("[xportr_length()] Impute character lengths based on class", { adsl <- minimal_adsl metadata <- minimal_length_metadata @@ -133,7 +132,7 @@ test_that("Impute character lengths based on class", { expect_equal("...") }) -test_that("Variables not in metacore", { +test_that("[xportr_length()] Throws message when variables not present in metadata", { adsl <- minimal_adsl metadata <- minimal_length_metadata %>% filter(variable != "BRTHDT") @@ -148,7 +147,7 @@ test_that("Variables not in metacore", { expect_message(regexp = "Problem with `BRTHDT`") }) -test_that("Metacore instance can be used", { +test_that("[xportr_length()] Metacore instance can be used", { adsl <- minimal_adsl # Build a minimal metacore object @@ -182,7 +181,7 @@ test_that("Metacore instance can be used", { expect_attr_width(metadata$length) }) -test_that("Domain not in character format", { +test_that("[xportr_length()] Domain not in character format", { skip_if_not( require(haven, quietly = TRUE) && require(readxl, quietly = TRUE), message = "haven or readxl not installed" @@ -196,7 +195,7 @@ test_that("Domain not in character format", { ) }) -test_that("Column length of known/unkown character types is 200/8 ", { +test_that("[xportr_length()] Column length of known/unkown character types is 200/8 ", { expect_equal(impute_length(123), 8) expect_equal(impute_length(123L), 8) expect_equal(impute_length("string"), 200) From 4936be98884b88b55306d39d6ecfe21126d963a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 20 Apr 2023 18:19:25 +0200 Subject: [PATCH 015/337] recode the 2 loops in favor of a single pass --- R/format.R | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/R/format.R b/R/format.R index 4a8c4c03..b091916a 100644 --- a/R/format.R +++ b/R/format.R @@ -73,14 +73,11 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo names(format) <- filtered_metadata[[variable_name]] - for (i in names(format)) { - attr(.df[[i]], "format.sas") <- format[[i]] - } - - # Convert NA formats to "" for haven for (i in seq_len(ncol(.df))) { - if (is.na(attr(.df[[i]], "format.sas")) || is.null(attr(.df[[i]], "format.sas"))) - attr(.df[[i]], "format.sas") <- "" + format_sas <- purrr::pluck(format, colnames(.df)[i]) + if (is.na(format_sas) || is.null(format_sas)) + format_sas <- "" + attr(.df[[i]], "format.sas") <- format_sas } .df From 5cd89f5890c43c9485916a10202c3249ce1e3932 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 20 Apr 2023 18:20:57 +0200 Subject: [PATCH 016/337] Change rstudio project options to reflect lint rules --- xportr.Rproj | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/xportr.Rproj b/xportr.Rproj index eaa6b818..7b4ebf08 100644 --- a/xportr.Rproj +++ b/xportr.Rproj @@ -12,7 +12,12 @@ Encoding: UTF-8 RnwWeave: Sweave LaTeX: pdfLaTeX +AutoAppendNewline: Yes +StripTrailingWhitespace: Yes + BuildType: Package PackageUseDevtools: Yes PackageInstallArgs: --no-multiarch --with-keep.source PackageRoxygenize: rd,collate,namespace + +UseNativePipeOperator: No From a29c27a40ee04ec8b7172776fa20d914804e01d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 21 Apr 2023 14:27:45 +0200 Subject: [PATCH 017/337] improves on tests with better understanding of pipe support --- DESCRIPTION | 3 +- NAMESPACE | 2 + R/length.R | 30 +++---- R/messages.R | 1 - R/xportr-package.R | 4 +- tests/testthat/helper-length.R | 18 +---- tests/testthat/test-length.R | 139 +++++++++++++++++---------------- 7 files changed, 96 insertions(+), 101 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c6f92af3..00a402ce 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -62,6 +62,7 @@ Suggests: usethis, lintr, styler, - metacore + metacore, + mockery Config/testthat/edition: 3 VignetteBuilder: knitr diff --git a/NAMESPACE b/NAMESPACE index cf77d50a..3a261d6b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -34,6 +34,7 @@ importFrom(dplyr,rename) importFrom(dplyr,rename_with) importFrom(dplyr,select) importFrom(dplyr,summarize) +importFrom(dplyr,tribble) importFrom(dplyr,ungroup) importFrom(glue,glue) importFrom(glue,glue_collapse) @@ -45,6 +46,7 @@ importFrom(purrr,map) importFrom(purrr,map2_chr) importFrom(purrr,map_chr) importFrom(purrr,map_dbl) +importFrom(purrr,pluck) importFrom(purrr,walk2) importFrom(readr,parse_number) importFrom(stringr,str_detect) diff --git a/R/length.R b/R/length.R index 2ed45027..285eb8ed 100644 --- a/R/length.R +++ b/R/length.R @@ -29,57 +29,57 @@ #' adsl <- xportr_length(adsl, metacore) xportr_length <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.length_verbose", "none")) { - + domain_name <- getOption("xportr.domain_name") variable_length <- getOption("xportr.length") variable_name <- getOption("xportr.variable_name") - + df_arg <- as_name(enexpr(.df)) - + if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") else if (identical(df_arg, ".")) { attr(.df, "_xportr.df_arg_") <- get_pipe_call() df_arg <- attr(.df, "_xportr.df_arg_") } - + if (!is.null(domain) && !is.character(domain)) { abort(c("`domain` must be a vector with type .", x = glue("Instead, it has type <{typeof(domain)}>.")) ) } - + df_arg <- domain %||% df_arg - + if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain - + if (inherits(metacore, "Metacore")) metacore <- metacore$var_spec - + if (domain_name %in% names(metacore)) { metadata <- metacore %>% - dplyr::filter(!!sym(domain_name) == df_arg) + filter(!!sym(domain_name) == df_arg) } else { metadata <- metacore } - + # Check any variables missed in metadata but present in input data --- miss_vars <- setdiff(names(.df), metadata[[variable_name]]) - + length_log(miss_vars, verbose) - + length <- metadata[[variable_length]] names(length) <- metadata[[variable_name]] - + for (i in names(.df)) { if (i %in% miss_vars) { attr(.df[[i]], "width") <- impute_length(.df[[i]]) } else { attr(.df[[i]], "width") <- length[[i]] } - + } - + .df } diff --git a/R/messages.R b/R/messages.R index 2dae3051..c716714c 100644 --- a/R/messages.R +++ b/R/messages.R @@ -10,7 +10,6 @@ #' @return Output to Console #' @export xportr_logger <- function(message, type = "none", ...) { - log_fun <- switch(type, stop = abort, warn = warn, diff --git a/R/xportr-package.R b/R/xportr-package.R index 6dae369c..5fbb793f 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -5,9 +5,9 @@ #' @keywords internal #' #' @import rlang haven -#' @importFrom purrr map_chr walk2 map map_dbl #' @importFrom dplyr left_join bind_cols filter select rename rename_with n #' everything arrange group_by summarize mutate ungroup case_when distinct +#' tribble #' @importFrom glue glue glue_collapse #' @importFrom cli cli_alert_info cli_h2 cli_alert_success cli_alert_info #' cli_div cli_alert_success cli_text cli_h2 @@ -15,7 +15,7 @@ #' @importFrom utils capture.output str tail packageVersion #' @importFrom stringr str_detect str_extract str_replace str_replace_all #' @importFrom readr parse_number -#' @importFrom purrr map_chr map2_chr +#' @importFrom purrr map_chr map2_chr walk2 map map_dbl pluck #' @importFrom janitor make_clean_names #' @importFrom tm stemDocument #' @importFrom graphics stem diff --git a/tests/testthat/helper-length.R b/tests/testthat/helper-length.R index b6a3d7f4..e33ce1ad 100644 --- a/tests/testthat/helper-length.R +++ b/tests/testthat/helper-length.R @@ -1,20 +1,8 @@ -# Re-usable data for sample ADSL table -minimal_adsl <- data.frame( - USUBJID = c(1001, 1002, 1003), - BRTHDT = c(1, 1, 2) -) - -# Re-usable data from sample metadata for ADSL -minimal_length_metadata <- data.frame( - dataset = c("adsl", "adsl"), - variable = c("USUBJID", "BRTHDT"), - length = c(20, 8) -) - # Custom expect function to test result of xportr_length expect_attr_width <- function(result, metadata_length) { - (purrr::map(result, attributes) %>% - purrr::pluck("width") %>% unlist() == metadata_length) %>% all() %>% + widths <- map(colnames(result), ~attributes(result[[.x]]) %>% pluck("width")) + (widths %>% + unlist() == metadata_length) %>% all() %>% expect_true() invisible(result) } diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 56ba183e..6ddf16b5 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -13,8 +13,8 @@ #' test the data.frame modifications being done in `xportr_length()` test_that("[xportr_length()] Accepts valid domain names in metadata/metacore", { - adsl <- minimal_adsl - metadata <- minimal_length_metadata + adsl <- minimal_table(30) + metadata <- minimal_metadata(dataset = TRUE, length = TRUE, var_names = colnames(adsl)) # Setup temporary options with active verbose withr::local_options(list(xportr.length_verbose = "message")) @@ -29,7 +29,7 @@ test_that("[xportr_length()] Accepts valid domain names in metadata/metacore", { expect_silent() %>% expect_attr_width(metadata$length) %>% NROW() %>% - expect_equal(3) + expect_equal(30) # Test minimal call without datasets metadata_without_dataset <- metadata %>% select(-"dataset") @@ -38,20 +38,21 @@ test_that("[xportr_length()] Accepts valid domain names in metadata/metacore", { expect_silent() %>% expect_attr_width(metadata_without_dataset$length) %>% NROW() %>% - expect_equal(3) + expect_equal(30) # Test minimal call without datasets and ignores domain xportr_length(adsl, metadata_without_dataset, domain = "something_else") %>% expect_silent() %>% expect_attr_width(metadata_without_dataset$length) %>% NROW() %>% - expect_equal(3) + expect_equal(30) }) test_that("[xportr_length()] CDISC data frame is being piped after another xportr function", { - adsl <- minimal_adsl - metadata <- minimal_length_metadata %>% - bind_cols(type = c("numeric", "numeric")) + adsl <- minimal_table(30) + metadata <- minimal_metadata( + dataset = TRUE, length = TRUE, type = TRUE, var_names = colnames(adsl) + ) # Setup temporary options with active verbose withr::local_options(list(xportr.length_verbose = "message")) @@ -65,90 +66,95 @@ test_that("[xportr_length()] CDISC data frame is being piped after another xport expect_equal("adsl") }) -test_that("[xportr_length()] CDISC data frame is being recognized as piped", { - adsl <- minimal_adsl - metadata <- minimal_length_metadata %>% - bind_cols(type = c("numeric", "numeric")) +test_that("[xportr_length()] CDISC data frame domain is being recognized from pipe", { + adsl <- minimal_table(30) + metadata <- minimal_metadata(dataset = TRUE, length = TRUE, var_names = colnames(adsl)) # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) + if (require(mockery, quietly = TRUE)) { + # Prevent CLI messages by using local xportr_logger instead + stub(xportr_length, "cli_h2", cli_mocked_fun, depth = 2) + stub(xportr_length, "cli_alert_success", cli_mocked_fun, depth = 2) + stub(xportr_length, "cli_alert_danger", cli_mocked_fun, depth = 2) + } + + # With domain manually set + not_adsl <- adsl + result <- not_adsl %>% + xportr_length(metadata) %>% + expect_message("Variable lengths missing from metadata") %>% + expect_message("lengths resolved") %>% + expect_message("Variable\\(s\\) present in dataframe but doesn't exist in `metadata`") - adsl %>% - xportr_length(metadata, domain = "adsl") %>% - expect_attr_width(metadata$length) %>% - attr("_xportr.df_arg_" ) %>% - expect_equal("adsl") - - # Prevent CLI messages - withr::local_options( - list(cli.default_handler = function(...) { }) - ) + suppressMessages({ + result <- not_adsl %>% + xportr_length(metadata, verbose = "none") + }) - # Test message when dataset is set, but domain used in parameters - expect_message( - adsl %>% xportr_length(metadata), - regexp = "Variable\\(s\\) present in dataframe but doesn't exist in `.*`." - ) + expect_no_match(attr(result, "_xportr.df_arg_" ), "^adsl$") # Test results with piping - adsl %>% xportr_length(metadata) %>% - expect_attr_width(metadata$length) %>% - attr("_xportr.df_arg_" ) %>% - expect_equal("...") + result <- adsl %>% + xportr_length(metadata) + + attr(result, "_xportr.df_arg_" ) %>% + expect_equal("adsl") }) test_that("[xportr_length()] Impute character lengths based on class", { - adsl <- minimal_adsl - metadata <- minimal_length_metadata + adsl <- minimal_table(30, cols = c("x", "b")) + metadata <- minimal_metadata( + dataset = TRUE, length = TRUE, var_names = colnames(adsl) + ) %>% + mutate(length = length - 1) # Setup temporary options with `verbose = "none"` withr::local_options(list(xportr.length_verbose = "none")) - # Prevent CLI messages - withr::local_options(list(cli.default_handler = function(...) { })) - # Define controlled `charater_types` for this test + # Define controlled `character_types` for this test withr::local_options(list(xportr.character_types = c("character", "date"))) + if (require(mockery, quietly = TRUE)) { + # Prevent CLI messages by using local xportr_logger instead + stub(xportr_length, "cli_h2", cli_mocked_fun, depth = 2) + stub(xportr_length, "cli_alert_success", cli_mocked_fun, depth = 2) + } # Test length imputation of character and numeric (not valid character type) adsl %>% - mutate( - USUBJID = as.numeric(.data$USUBJID), - BRTHDT = as.character(.data$BRTHDT) - ) %>% xportr_length(metadata) %>% - expect_attr_width(c(8, 200)) %>% - attr("_xportr.df_arg_" ) %>% - expect_equal("...") + expect_silent() %>% + expect_attr_width(c(7, 199)) # Test length imputation of two valid character types (both should have - # `widht = 200``) - adsl %>% + # `width = 200``) + adsl <- adsl %>% mutate( - USUBJID = as.character(.data$USUBJID), - BRTHDT = as.Date(.data$BRTHDT, origin = "1970-01-01") - ) %>% + new_date = as.Date(.data$x, origin = "1970-01-01"), + new_char = as.character(.data$b), + new_num = as.numeric(.data$x) + ) + + adsl %>% xportr_length(metadata) %>% - expect_attr_width(c(200, 200)) %>% - attr("_xportr.df_arg_" ) %>% - expect_equal("...") + expect_message("Variable lengths missing from metadata") %>% + expect_message("lengths resolved") %>% + expect_attr_width(c(7, 199, 200, 200, 8)) }) test_that("[xportr_length()] Throws message when variables not present in metadata", { - adsl <- minimal_adsl - metadata <- minimal_length_metadata %>% - filter(variable != "BRTHDT") + adsl <- minimal_table(30, cols = c("x", "y")) + metadata <- minimal_metadata(dataset = TRUE, length = TRUE, var_names = c("x")) - # Prevent CLI messages - withr::local_options(list(cli.default_handler = function(...) { })) # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) # Test that message is given which indicates that variable is not present xportr_length(adsl, metadata) %>% - expect_message(regexp = "Problem with `BRTHDT`") + expect_message(regexp = "Problem with `y`") }) test_that("[xportr_length()] Metacore instance can be used", { - adsl <- minimal_adsl + adsl <- minimal_table(30, cols = c("x", "b")) # Build a minimal metacore object metadata <- suppressMessages( @@ -161,13 +167,12 @@ test_that("[xportr_length()] Metacore instance can be used", { dataset = "ADSL", variable = colnames(adsl) ), - var_spec = dplyr::tibble( - variable = c("USUBJID", "BRTHDT"), - type = c("integer", "integer"), - length = c(20, 8), - label = c("Unique Subject Identifier "), - format = NA_character_, - common = NA + var_spec = minimal_metadata( + length = TRUE, + type = TRUE, + label = TRUE, + format = TRUE, + common = TRUE ) ) ) @@ -177,13 +182,13 @@ test_that("[xportr_length()] Metacore instance can be used", { xportr_length(adsl, metadata, domain = "adsl", verbose = "message") %>% expect_silent() %>% NROW() %>% - expect_equal(3) %>% + expect_equal(30) %>% expect_attr_width(metadata$length) }) test_that("[xportr_length()] Domain not in character format", { skip_if_not( - require(haven, quietly = TRUE) && require(readxl, quietly = TRUE), + require(haven, quietly = TRUE) && require(readxl, quietly = TRUE), message = "haven or readxl not installed" ) From 1f9c15d2fad9094fc1720357101a6ac7140373e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 21 Apr 2023 14:28:22 +0200 Subject: [PATCH 018/337] data helper attempt to be used across tests --- tests/testthat/helper-data.R | 55 +++++++++++++++++++++++++++ tests/testthat/helper-mock_bindings.R | 4 ++ 2 files changed, 59 insertions(+) create mode 100644 tests/testthat/helper-data.R create mode 100644 tests/testthat/helper-mock_bindings.R diff --git a/tests/testthat/helper-data.R b/tests/testthat/helper-data.R new file mode 100644 index 00000000..60dd4fa2 --- /dev/null +++ b/tests/testthat/helper-data.R @@ -0,0 +1,55 @@ +# Re-usable data for sample ADSL table +minimal_table <- function(n_rows = 3, cols = c("x", "y")) { + data.frame( + x = sample(1000 + seq(n_rows * 100), size = n_rows), + y = sample(c(0, 1, 2), size = n_rows, replace = TRUE), + z = 3, + a = 4, + b = sample( + c("Recusandae", "vero", "nihil", "velit", "omnis"), + size = n_rows, + replace = TRUE + ), + c = sample( + Sys.time() - 3600 * c(1, 10, 100, 1000), + size = n_rows, + replace = TRUE + ), + d = sample(Sys.Date() + c(1, -1, 10, -10), size = n_rows, replace = TRUE) + ) %>% + select(cols) +} + +# Re-usable data from sample metadata for ADSL +minimal_metadata <- function( + dataset = FALSE, + length = FALSE, + label = FALSE, + type = FALSE, + format = FALSE, + common = FALSE, + var_names = NULL +) { + cols_logical <- c(dataset, TRUE, label, length, type, format, common) + cols <- c( + "dataset", "variable", "label", "length", "type", "format", "common" + )[cols_logical] + + metadata <- tribble( + ~dataset, ~variable, ~label, ~length, ~type, ~format, ~common, + "adsl", "x", "Lorem", 8, "numeric", NA, NA, + "adsl", "y", "Ipsum", 200, "numeric", NA, NA, + "adsl", "z", "Dolor", 8, "numeric", NA, NA, + "adsl", "a", "Sit", 8, "numeric", NA, NA, + "adsl", "b", "Amet", 200, "character", NA, NA, + "adsl", "c", "Consectetur", 200, "character", "datetime20.", NA, + "adsl", "d", "Adipiscing", 200, "date", "date9.", NA + ) + + if (!is.null(var_names)) { + metadata <- metadata %>% + filter(.data$variable %in% var_names) + } + + metadata %>% select(cols) +} diff --git a/tests/testthat/helper-mock_bindings.R b/tests/testthat/helper-mock_bindings.R new file mode 100644 index 00000000..9d1de7cb --- /dev/null +++ b/tests/testthat/helper-mock_bindings.R @@ -0,0 +1,4 @@ +# function that can be used with mockery::stub to mock cli messages +cli_mocked_fun <- function(text, ...) { + xportr_logger(text, "message") +} From a0c08a82f09c59fc1ef4d65823134e6bbac20bb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 21 Apr 2023 15:28:10 +0200 Subject: [PATCH 019/337] avoids bug with depth > 1 being a permanent stub in env --- tests/testthat/test-length.R | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 6ddf16b5..59dd8fbe 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -72,11 +72,13 @@ test_that("[xportr_length()] CDISC data frame domain is being recognized from pi # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) + if (require(mockery, quietly = TRUE)) { # Prevent CLI messages by using local xportr_logger instead - stub(xportr_length, "cli_h2", cli_mocked_fun, depth = 2) - stub(xportr_length, "cli_alert_success", cli_mocked_fun, depth = 2) - stub(xportr_length, "cli_alert_danger", cli_mocked_fun, depth = 2) + stub(length_log, "cli_h2", cli_mocked_fun) + stub(length_log, "cli_alert_success", cli_mocked_fun) + stub(length_log, "cli_alert_danger", cli_mocked_fun) + stub(xportr_length, "length_log", length_log) } # With domain manually set @@ -113,10 +115,12 @@ test_that("[xportr_length()] Impute character lengths based on class", { withr::local_options(list(xportr.length_verbose = "none")) # Define controlled `character_types` for this test withr::local_options(list(xportr.character_types = c("character", "date"))) + if (require(mockery, quietly = TRUE)) { # Prevent CLI messages by using local xportr_logger instead - stub(xportr_length, "cli_h2", cli_mocked_fun, depth = 2) - stub(xportr_length, "cli_alert_success", cli_mocked_fun, depth = 2) + stub(length_log, "cli_h2", cli_mocked_fun) + stub(length_log, "cli_alert_success", cli_mocked_fun) + stub(xportr_length, "length_log", length_log) } # Test length imputation of character and numeric (not valid character type) @@ -148,8 +152,17 @@ test_that("[xportr_length()] Throws message when variables not present in metada # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) + if (require(mockery, quietly = TRUE)) { + # Prevent CLI messages by using local xportr_logger instead + stub(length_log, "cli_h2", cli_mocked_fun) + stub(length_log, "cli_alert_success", cli_mocked_fun) + stub(xportr_length, "length_log", length_log) + } + # Test that message is given which indicates that variable is not present xportr_length(adsl, metadata) %>% + expect_message("Variable lengths missing from metadata") %>% + expect_message("lengths resolved") %>% expect_message(regexp = "Problem with `y`") }) From b1d10bec7339129271ce1251a7a9a92f733f9fef Mon Sep 17 00:00:00 2001 From: bs832471 Date: Fri, 21 Apr 2023 18:14:47 +0000 Subject: [PATCH 020/337] chore: #83 Removing commented out code and fixing spacing --- tests/testthat/test-var_checks.R | 135 ------------------------------- tests/testthat/test-write.R | 24 ++---- 2 files changed, 8 insertions(+), 151 deletions(-) delete mode 100644 tests/testthat/test-var_checks.R diff --git a/tests/testthat/test-var_checks.R b/tests/testthat/test-var_checks.R deleted file mode 100644 index 80503365..00000000 --- a/tests/testthat/test-var_checks.R +++ /dev/null @@ -1,135 +0,0 @@ -# test_that("Variables have length <= 8", { -# -# library(haven) -# -# path <- system.file("extdata", "adsl.sas7bdat", package = "xportr") -# adsl <- haven::read_sas(path) -# adsl_renamed <- adsl %>% rename("STUDYIDSTUDYID" = STUDYID) -# -# test_var_len_exp <- data.frame( value = -# c("STUDYIDSTUDYID" -# ), -# var_length = -# c(14L -# )) -# expect_identical(xpt_check_var_length(adsl_renamed), test_var_len_exp) -# -# -# }) -# -# test_that("Variable with lower case are found", { -# -# library(haven) -# -# path <- system.file("extdata", "adsl.sas7bdat", package = "xportr") -# adsl <- haven::read_sas(path) -# adsl_lower <- adsl %>% rename_with(tolower) %>% select(studyid, sex, randdt) -# adsl_removed <- adsl %>% select(-STUDYID, -SEX, -RANDDT) -# adsl_cmb <- bind_cols(adsl_lower, adsl_removed) -# -# test_vars_exp <- data.frame( value = -# c("studyid", -# "sex", -# "randdt" -# ), -# -# flag = -# -# c(FALSE, -# FALSE, -# FALSE -# )) -# -# expect_identical(xpt_check_var_case(adsl_cmb), test_vars_exp) -# -# }) -# -# # Need a test for no issues found with variable case -# -# -# test_that("Found variable labels length that are too long!", { -# -# library(haven) -# -# path <- system.file("extdata", "adsl.sas7bdat", package = "xportr") -# adsl <- haven::read_sas(path) -# adsl_lbls <- adsl %>% add_labels( -# USUBJID = "Unique Subject ID's", -# AGE = "Age of Subject at Start of Study Age of Subject at Start of Study") -# -# test_lbls_exp <- data.frame( name = -# c("AGE" -# ), -# value = -# c("Age of Subject at Start of Study Age of Subject at Start of Study" -# ), -# label_length = -# c(65L)) -# -# expect_identical(xpt_check_label_length(adsl_lbls), test_lbls_exp) -# -# }) -# -# # Need a test for no issues found with variable case -# -# test_that("non-ASCII Characters found in Variable Names", { -# -# test_ascii_data <- data.frame( dum = -# c("Subj1", -# "Subj2", -# "Subj3" -# ), -# `Test` = -# c("Test1", -# "Test2", -# "Test3" -# )) -# -# colnames(test_ascii_data) <- c(stri_unescape_unicode('\\u00c0'), "Test") -# -# test_ascii_exp <- data.frame( value = -# c(stri_unescape_unicode('\\u00c0') -# ), -# flag = -# c(strtrim("non-ASCII Found", 15) -# )) -# -# expect_equal(xpt_check_ascii_vars(test_ascii_data), test_ascii_exp) -# -# }) -# -# -# test_that("non-ASCII Characters found in Variable Labels", { -# -# test_ascii_data <- data.frame(dum = -# c("Subj1", -# "Subj2", -# "Subj3" -# ), -# `Test` = -# c("Test1", -# "Test2", -# "Test3" -# )) -# -# test_ascii_data_lbls <- test_ascii_data %>% add_labels( -# dum = paste0("Unique Subject ", stri_unescape_unicode('\\u00c0'), "Ds"), -# `Team Members` = "Test") -# -# colnames(test_ascii_data_lbls) <- c(stri_unescape_unicode('\\u00c0'), "Test") -# -# -# -# test_ascii_lbl_exp <- data.frame( -# name = -# c(stri_unescape_unicode('\\u00c0')), -# value = -# c(paste0("Unique Subject ", stri_unescape_unicode('\\u00c0'), "Ds")), -# flag = -# c(strtrim("non-ASCII Found", 15))) -# -# -# expect_equivalent(xpt_check_ascii_lbls(test_ascii_data_lbls), test_ascii_lbl_exp) -# -# }) -# diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index 482227bf..c1e8291b 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -2,9 +2,9 @@ test_that("SAS Transport file", { tmpdir <- tempdir() tmp <- file.path(tmpdir, "xyz.xpt") - + on.exit(unlink(tmpdir)) - + df <- data.frame(X = c(1, 2, NA), Y = c("a", "", "c"), Z = c(1, 2, 3)) attr(df$X, "label") <- "foo" @@ -12,9 +12,6 @@ test_that("SAS Transport file", { attr(df$Z, "label") <- "baz" xportr_write(df, path = tmp) - #expect_output(str(read_xpt(tmp)), "$ X: labelled, format", fixed =TRUE) - # expect_output(str(read_xpt(tmp)), "$ Y: 'labelled' chr", fixed = TRUE) - # expect_output(str(SASxport::read.xport(tmp)), "$ Z: 'labelled' int", fixed = TRUE) xportr_write(df, path = tmp, label = "Lorem ipsum dolor sit amet") expect_output(str(read_xpt(tmp)), "Lorem ipsum dolor sit amet") @@ -25,14 +22,9 @@ test_that("SAS Transport file", { "must be 40 characters or less") expect_error(xportr_write(df, tmp, label = "Lorizzle ipsizzle dolizzl\xe7 pizzle")) - # df <- data.frame(loremipsum = "a", y_ = 1) - # attr(df$y_, "label") <- "var2" - # expect_warning( - # xportr_write(df, tmp), - # "Truncated 1 long names to 8 characters.") }) -test_that("Error message given if file name is greater than 8 characters",{ +test_that("Error message given if file name is greater than 8 characters", { tmpdir <- tempdir() tmp <- file.path(tmpdir, "abc.xpt") @@ -44,22 +36,22 @@ test_that("Error message given if file name is greater than 8 characters",{ c = c(1, 2, 3)) expect_error(xportr_write(df, path = tmp)) - + }) test_that("Format message given if unexpected formats", { tmpdir <- tempdir() tmp <- file.path(tmpdir, "xyz.xpt") - + on.exit(unlink(tmpdir)) - + df <- data.frame(USUBJID = c("1001", "1002", "10003"), AGE = c("M", "F", "M"), BIRTHDT = as.Date(c("2001-01-01", "1997-11-11", "1995-12-12"), "%Y-%m-%d")) - + # Forget the period in date9. attr(df$BIRTHDT, "format.sas") <- "date9" - + expect_error(xportr_write(df, tmp)) }) From 07441765ce52013efcb3e9d7febf5617a05453a0 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 25 Apr 2023 02:58:58 +0530 Subject: [PATCH 021/337] chore: fix lint errors --- tests/testthat/test-metadata.R | 159 ++++++++++++++++++++------------- 1 file changed, 98 insertions(+), 61 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index f77f22f7..e4f6861b 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -12,7 +12,7 @@ extract_format <- function(.x) { test_that("Variable label", { df <- data.frame(x = "a", y = "b", variable = "value") - df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) + df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) metacore_meta <- suppressWarnings( metacore( var_spec = data.frame( @@ -25,14 +25,14 @@ test_that("Variable label", { ) ) ) - + extract_var_label <- function(.x) { - vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) + vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) } - + df_labeled_df <- df %>% xportr_label(df_meta) metacoes_labeled_df <- df_labeled_df %>% xportr_label(metacore_meta, domain = "DOMAIN") - + expect_equal(extract_var_label(df_labeled_df), c("foo", "bar", "")) expect_equal(extract_var_label(metacoes_labeled_df), c("X Label", "Y Label", "")) expect_equal( @@ -70,48 +70,51 @@ test_that("Dataset label", { `_xportr.df_arg_` = "CUSTOMNAME" ) - df_meta <- data.frame(dataset = "df", label = "Label") + df_meta <- data.frame(dataset = "df", label = "Label") metacore_meta <- suppressWarnings( metacore( ds_spec = data.frame( - dataset = c("df", "CUSTOMNAME", "DOMAINNAME"), + dataset = c("df", "CUSTOMNAME", "DOMAINNAME"), structure = "", label = c("Label", "Custom Label", "Domain Label") ) ) ) - + df_spec_labeled_df <- xportr_df_label(df, df_meta) piped_spec_labeled_df <- df %>% xportr_df_label(df_meta) renamed_spec_labeled_df <- xportr_df_label(renamed_dataset_df, metacore_meta) domain_spec_labeled_df <- xportr_df_label(renamed_dataset_df, metacore_meta, domain = "DOMAINNAME") - expect_equal(attr(df_spec_labeled_df, "label"), "Label") + expect_equal(attr(df_spec_labeled_df, "label"), "Label") expect_equal( dput(df_spec_labeled_df), structure(list(x = "a", y = "b"), class = "data.frame", row.names = c(NA, -1L), label = "Label") ) - expect_equal(attr(piped_spec_labeled_df, "label"), "Label") + expect_equal(attr(piped_spec_labeled_df, "label"), "Label") expect_equal( dput(piped_spec_labeled_df), structure( - list(x = "a", y = "b"), class = "data.frame", + list(x = "a", y = "b"), + class = "data.frame", row.names = c(NA, -1L), `_xportr.df_arg_` = "df", label = "Label" ) ) - expect_equal(attr(renamed_spec_labeled_df, "label"), "Custom Label") + expect_equal(attr(renamed_spec_labeled_df, "label"), "Custom Label") expect_equal( dput(renamed_spec_labeled_df), structure( - list(x = "a", y = "b"), class = "data.frame", + list(x = "a", y = "b"), + class = "data.frame", row.names = c(NA, -1L), `_xportr.df_arg_` = "CUSTOMNAME", label = "Custom Label" ) ) - expect_equal(attr(domain_spec_labeled_df, "label"), "Domain Label") + expect_equal(attr(domain_spec_labeled_df, "label"), "Domain Label") expect_equal( dput(domain_spec_labeled_df), structure( - list(x = "a", y = "b"), class = "data.frame", + list(x = "a", y = "b"), + class = "data.frame", row.names = c(NA, -1L), label = "Domain Label", `_xportr.df_arg_` = "DOMAINNAME" ) ) @@ -119,76 +122,106 @@ test_that("Dataset label", { test_that("Expect error if any variable doesn't exist in var. metadata", { df <- data.frame(x = "a", y = "b") - varmeta <- data.frame(dataset = "df", - variable = "x", - label = "foo") - + varmeta <- data.frame( + dataset = "df", + variable = "x", + label = "foo" + ) + expect_error(xportr_label(df, varmeta, verbose = "stop")) }) test_that("Expect error if any label exceeds 40 character", { df <- data.frame(x = "a", y = "b") - varmeta <- data.frame(dataset = rep("df", 2), - variable = c("x", "y"), - label = c("foo", "Lorem ipsum dolor sit amet, consectetur adipiscing elit")) - dfmeta <- data.frame(dataset = "df", - label = "Lorem ipsum dolor sit amet, consectetur adipiscing elit") - - expect_warning(xportr_label(df, varmeta), - "variable label must be 40 characters or less") - expect_error(xportr_df_label(df, dfmeta), - "dataset label must be 40 characters or less") + varmeta <- data.frame( + dataset = rep("df", 2), + variable = c("x", "y"), + label = c("foo", "Lorem ipsum dolor sit amet, consectetur adipiscing elit") + ) + dfmeta <- data.frame( + dataset = "df", + label = "Lorem ipsum dolor sit amet, consectetur adipiscing elit" + ) + + expect_warning( + xportr_label(df, varmeta), + "variable label must be 40 characters or less" + ) + expect_error( + xportr_df_label(df, dfmeta), + "dataset label must be 40 characters or less" + ) }) test_that("xportr_format will set formats as expected", { df <- data.frame(x = 1, y = 2) - varmeta <- data.frame(dataset = rep("df", 2), - variable = c("x", "y"), - format = c("date9.", "datetime20.")) - + varmeta <- data.frame( + dataset = rep("df", 2), + variable = c("x", "y"), + format = c("date9.", "datetime20.") + ) + + - out <- xportr_format(df, varmeta) - + expect_equal(extract_format(out), c("DATE9.", "DATETIME20.")) - expect_equal(dput(out), structure(list(x = structure(1, format.sas = "DATE9."), - y = structure(2, format.sas = "DATETIME20.")), - row.names = c(NA, -1L), class = "data.frame")) + expect_equal(dput(out), structure( + list( + x = structure(1, format.sas = "DATE9."), + y = structure(2, format.sas = "DATETIME20.") + ), + row.names = c(NA, -1L), class = "data.frame" + )) }) test_that("xportr_format will handle NA values and won't error", { df <- data.frame(x = 1, y = 2, z = 3, a = 4) - varmeta <- data.frame(dataset = rep("df", 4), - variable = c("x", "y", "z", "abc"), - format = c("date9.", "datetime20.", NA, "text")) - + varmeta <- data.frame( + dataset = rep("df", 4), + variable = c("x", "y", "z", "abc"), + format = c("date9.", "datetime20.", NA, "text") + ) + out <- xportr_format(df, varmeta) - + expect_equal(extract_format(out), c("DATE9.", "DATETIME20.", "", "")) - expect_equal(dput(out), structure(list(x = structure(1, format.sas = "DATE9."), - y = structure(2, format.sas = "DATETIME20."), - z = structure(3, format.sas = ""), - a = structure(4, format.sas = "")), - row.names = c(NA, -1L), class = "data.frame")) + expect_equal(dput(out), structure( + list( + x = structure(1, format.sas = "DATE9."), + y = structure(2, format.sas = "DATETIME20."), + z = structure(3, format.sas = ""), + a = structure(4, format.sas = "") + ), + row.names = c(NA, -1L), class = "data.frame" + )) }) test_that("Error ", { df1 <- data.frame(x = 1, y = 2) df2 <- data.frame(x = 3, y = 4) - expect_error(xportr_label(df1, df2, domain = 1), - "`domain` must be a vector with type .") - expect_error(xportr_df_label(df1, df2, domain = mtcars), - "`domain` must be a vector with type .") - expect_error(xportr_format(df1, df2, domain = 1L), - "`domain` must be a vector with type .") + expect_error( + xportr_label(df1, df2, domain = 1), + "`domain` must be a vector with type ." + ) + expect_error( + xportr_df_label(df1, df2, domain = mtcars), + "`domain` must be a vector with type ." + ) + expect_error( + xportr_format(df1, df2, domain = 1L), + "`domain` must be a vector with type ." + ) }) test_that("SAS length", { df <- data.frame(x = "a", y = "b") - varmeta <- data.frame(dataset = rep("df", 2), - variable = c("x", "y"), - type = c("text", "text"), - length = c(1, 1)) + varmeta <- data.frame( + dataset = rep("df", 2), + variable = c("x", "y"), + type = c("text", "text"), + length = c(1, 1) + ) extract_length <- function(.x) { vapply(.x, function(.x) attr(.x, "width"), character(1), USE.NAMES = FALSE) @@ -197,9 +230,13 @@ test_that("SAS length", { out <- xportr_length(df, varmeta) expect_equal(c(x = 1, y = 1), map_dbl(out, attr, "width")) - expect_equal(dput(out), structure(list(x = structure("a", width = 1), - y = structure("b", width = 1)), - row.names = c(NA, -1L), class = "data.frame")) + expect_equal(dput(out), structure( + list( + x = structure("a", width = 1), + y = structure("b", width = 1) + ), + row.names = c(NA, -1L), class = "data.frame" + )) df <- cbind(df, z = 3) expect_error(xportr_length(df, varmeta, verbose = "stop"), "doesn't exist") From 40e84ebcb42003cbb6c08fc60474347d170c18ba Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 25 Apr 2023 04:37:10 +0530 Subject: [PATCH 022/337] split the `xportr_label` into smaller tests for easy debugging --- tests/testthat/test-metadata.R | 166 ++++++++++++++++++++++++++++----- 1 file changed, 143 insertions(+), 23 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index e4f6861b..a3626b0c 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -10,6 +10,10 @@ extract_format <- function(.x) { format_ } +extract_var_label <- function(.x) { + vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) +} + test_that("Variable label", { df <- data.frame(x = "a", y = "b", variable = "value") df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) @@ -26,10 +30,6 @@ test_that("Variable label", { ) ) - extract_var_label <- function(.x) { - vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) - } - df_labeled_df <- df %>% xportr_label(df_meta) metacoes_labeled_df <- df_labeled_df %>% xportr_label(metacore_meta, domain = "DOMAIN") @@ -63,6 +63,144 @@ test_that("Variable label", { ) }) + +test_that("xportr_label Test 1: correctly applies label for data.frame spec", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) + + df_labeled_df <- xportr_label(df, df_meta) + + expect_equal(extract_var_label(df_labeled_df), c("foo", "bar")) + expect_equal( + dput(df_labeled_df), + structure( + list( + x = structure("a", label = "foo"), + y = structure("b", label = "bar") + ), + row.names = c(NA, -1L), + class = "data.frame" + ) + ) +}) + +test_that("xportr_label Test 2: correctly applies label when the data is piped", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) + + df_labeled_df <- df %>% xportr_label(df_meta) + + expect_equal(extract_var_label(df_labeled_df), c("foo", "bar")) + expect_equal( + dput(df_labeled_df), + structure( + list( + x = structure("a", label = "foo"), + y = structure("b", label = "bar") + ), + row.names = c(NA, -1L), + `_xportr.df_arg_` = "df", + class = "data.frame" + ) + ) +}) + +test_that("xportr_label Test 3: correctly applies label for custom domain", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame(dataset = rep("DOMAIN_NAME", 2), variable = c("x", "y"), label = c("foo", "bar")) + + df_labeled_df <- xportr_label(df, df_meta, domain = "DOMAIN_NAME") + + expect_equal(extract_var_label(df_labeled_df), c("foo", "bar")) + expect_equal( + dput(df_labeled_df), + structure( + list( + x = structure("a", label = "foo"), + y = structure("b", label = "bar") + ), + row.names = c(NA, -1L), + `_xportr.df_arg_` = "DOMAIN_NAME", + class = "data.frame" + ) + ) +}) + +test_that("xportr_label Test 4: correctly applies label for metacore spec", { + df <- data.frame(x = "a", y = "b", variable = "value") + metacore_meta <- suppressWarnings( + metacore( + var_spec = data.frame( + variable = c("x", "y"), + type = "text", + label = c("X Label", "Y Label"), + length = c(4, 4), + common = NA_character_, + format = NA_character_ + ) + ) + ) + + metacoes_labeled_df <- xportr_label(df, metacore_meta) + + expect_equal(extract_var_label(metacoes_labeled_df), c("X Label", "Y Label", "")) + expect_equal( + dput(metacoes_labeled_df), + structure( + list( + x = structure("a", label = "X Label"), + y = structure("b", label = "Y Label"), + variable = structure("value", label = "") + ), + row.names = c(NA, -1L), + class = "data.frame" + ) + ) +}) + +test_that("xportr_label Test 5: Expect error if any variable doesn't exist in metadata", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame( + dataset = "df", + variable = "x", + label = "foo" + ) + + expect_error(xportr_label(df, df_meta, verbose = "stop")) +}) + +test_that("xportr_label Test 6: Expect error if label exceeds 40 character", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame( + dataset = "df", + variable = "x", + label = strrep("a", 41) + ) + + expect_warning( + xportr_label(df, df_meta), + "variable label must be 40 characters or less" + ) +}) + +test_that("xportr_label Test 7: Expect error if domain is not a character", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame( + dataset = "df", + variable = "x", + label = "foo" + ) + + expect_error( + xportr_label(df, df_meta, domain = 1), + "`domain` must be a vector with type ." + ) + expect_error( + xportr_label(df, df_meta, domain = NA), + "`domain` must be a vector with type ." + ) +}) + test_that("Dataset label", { df <- data.frame(x = "a", y = "b") renamed_dataset_df <- structure( @@ -120,17 +258,6 @@ test_that("Dataset label", { ) }) -test_that("Expect error if any variable doesn't exist in var. metadata", { - df <- data.frame(x = "a", y = "b") - varmeta <- data.frame( - dataset = "df", - variable = "x", - label = "foo" - ) - - expect_error(xportr_label(df, varmeta, verbose = "stop")) -}) - test_that("Expect error if any label exceeds 40 character", { df <- data.frame(x = "a", y = "b") varmeta <- data.frame( @@ -143,10 +270,6 @@ test_that("Expect error if any label exceeds 40 character", { label = "Lorem ipsum dolor sit amet, consectetur adipiscing elit" ) - expect_warning( - xportr_label(df, varmeta), - "variable label must be 40 characters or less" - ) expect_error( xportr_df_label(df, dfmeta), "dataset label must be 40 characters or less" @@ -200,10 +323,7 @@ test_that("xportr_format will handle NA values and won't error", { test_that("Error ", { df1 <- data.frame(x = 1, y = 2) df2 <- data.frame(x = 3, y = 4) - expect_error( - xportr_label(df1, df2, domain = 1), - "`domain` must be a vector with type ." - ) + expect_error( xportr_df_label(df1, df2, domain = mtcars), "`domain` must be a vector with type ." From 24bb12122446ec65bf44a5b4b08111e225721c24 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 25 Apr 2023 04:38:06 +0530 Subject: [PATCH 023/337] chore: remove older duplicate test --- tests/testthat/test-metadata.R | 50 ---------------------------------- 1 file changed, 50 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index a3626b0c..b3cd6587 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -14,56 +14,6 @@ extract_var_label <- function(.x) { vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) } -test_that("Variable label", { - df <- data.frame(x = "a", y = "b", variable = "value") - df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) - metacore_meta <- suppressWarnings( - metacore( - var_spec = data.frame( - variable = c("x", "y"), - type = "text", - label = c("X Label", "Y Label"), - length = c(4, 4), - common = NA_character_, - format = NA_character_ - ) - ) - ) - - df_labeled_df <- df %>% xportr_label(df_meta) - metacoes_labeled_df <- df_labeled_df %>% xportr_label(metacore_meta, domain = "DOMAIN") - - expect_equal(extract_var_label(df_labeled_df), c("foo", "bar", "")) - expect_equal(extract_var_label(metacoes_labeled_df), c("X Label", "Y Label", "")) - expect_equal( - dput(df_labeled_df), - structure( - list( - x = structure("a", label = "foo"), - y = structure("b", label = "bar"), - variable = structure("value", label = "") - ), - row.names = c(NA, -1L), - `_xportr.df_arg_` = "df", - class = "data.frame" - ) - ) - expect_equal( - dput(metacoes_labeled_df), - structure( - list( - x = structure("a", label = "X Label"), - y = structure("b", label = "Y Label"), - variable = structure("value", label = "") - ), - row.names = c(NA, -1L), - `_xportr.df_arg_` = "DOMAIN", - class = "data.frame" - ) - ) -}) - - test_that("xportr_label Test 1: correctly applies label for data.frame spec", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) From b3d228cd0805629546450737b826724ab756c811 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 25 Apr 2023 04:56:12 +0530 Subject: [PATCH 024/337] breakdown the `xportr_df_label` into smaller tests --- tests/testthat/test-metadata.R | 111 ++++++++++++++++++++------------- 1 file changed, 66 insertions(+), 45 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index b3cd6587..fec464bc 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -57,9 +57,9 @@ test_that("xportr_label Test 2: correctly applies label when the data is piped", test_that("xportr_label Test 3: correctly applies label for custom domain", { df <- data.frame(x = "a", y = "b") - df_meta <- data.frame(dataset = rep("DOMAIN_NAME", 2), variable = c("x", "y"), label = c("foo", "bar")) + df_meta <- data.frame(dataset = rep("DOMAIN", 2), variable = c("x", "y"), label = c("foo", "bar")) - df_labeled_df <- xportr_label(df, df_meta, domain = "DOMAIN_NAME") + df_labeled_df <- xportr_label(df, df_meta, domain = "DOMAIN") expect_equal(extract_var_label(df_labeled_df), c("foo", "bar")) expect_equal( @@ -70,7 +70,7 @@ test_that("xportr_label Test 3: correctly applies label for custom domain", { y = structure("b", label = "bar") ), row.names = c(NA, -1L), - `_xportr.df_arg_` = "DOMAIN_NAME", + `_xportr.df_arg_` = "DOMAIN", class = "data.frame" ) ) @@ -151,81 +151,106 @@ test_that("xportr_label Test 7: Expect error if domain is not a character", { ) }) -test_that("Dataset label", { +test_that("xportr_df_label Test 1: correctly applies label for data.frame spec", { df <- data.frame(x = "a", y = "b") - renamed_dataset_df <- structure( - df, - `_xportr.df_arg_` = "CUSTOMNAME" - ) - df_meta <- data.frame(dataset = "df", label = "Label") - metacore_meta <- suppressWarnings( - metacore( - ds_spec = data.frame( - dataset = c("df", "CUSTOMNAME", "DOMAINNAME"), - structure = "", - label = c("Label", "Custom Label", "Domain Label") - ) - ) - ) df_spec_labeled_df <- xportr_df_label(df, df_meta) - piped_spec_labeled_df <- df %>% xportr_df_label(df_meta) - renamed_spec_labeled_df <- xportr_df_label(renamed_dataset_df, metacore_meta) - domain_spec_labeled_df <- xportr_df_label(renamed_dataset_df, metacore_meta, domain = "DOMAINNAME") expect_equal(attr(df_spec_labeled_df, "label"), "Label") expect_equal( dput(df_spec_labeled_df), structure(list(x = "a", y = "b"), class = "data.frame", row.names = c(NA, -1L), label = "Label") ) - expect_equal(attr(piped_spec_labeled_df, "label"), "Label") +}) + +test_that("xportr_df_label Test 2: correctly applies label when the data is piped", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame(dataset = "df", label = "Label") + + df_spec_labeled_df <- df %>% xportr_df_label(df_meta) + + expect_equal(attr(df_spec_labeled_df, "label"), "Label") expect_equal( - dput(piped_spec_labeled_df), + dput(df_spec_labeled_df), structure( list(x = "a", y = "b"), - class = "data.frame", - row.names = c(NA, -1L), `_xportr.df_arg_` = "df", label = "Label" + class = "data.frame", row.names = c(NA, -1L), `_xportr.df_arg_` = "df", label = "Label" ) ) - expect_equal(attr(renamed_spec_labeled_df, "label"), "Custom Label") +}) + +test_that("xportr_df_label Test 3: correctly applies label for custom domain", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame(dataset = "DOMAIN", label = "Label") + + df_spec_labeled_df <- xportr_df_label(df, df_meta, domain = "DOMAIN") + + expect_equal(attr(df_spec_labeled_df, "label"), "Label") expect_equal( - dput(renamed_spec_labeled_df), + dput(df_spec_labeled_df), structure( list(x = "a", y = "b"), - class = "data.frame", - row.names = c(NA, -1L), `_xportr.df_arg_` = "CUSTOMNAME", label = "Custom Label" + class = "data.frame", row.names = c(NA, -1L), `_xportr.df_arg_` = "DOMAIN", label = "Label" ) ) - expect_equal(attr(domain_spec_labeled_df, "label"), "Domain Label") +}) + +test_that("xportr_df_label Test 4: correctly applies label for metacore spec", { + df <- data.frame(x = "a", y = "b") + metacore_meta <- suppressWarnings( + metacore( + ds_spec = data.frame( + dataset = c("df"), + structure = "", + label = c("Label") + ) + ) + ) + + metacore_spec_labeled_df <- xportr_df_label(df, metacore_meta) + + expect_equal(attr(metacore_spec_labeled_df, "label"), "Label") expect_equal( - dput(domain_spec_labeled_df), + dput(metacore_spec_labeled_df), structure( list(x = "a", y = "b"), class = "data.frame", - row.names = c(NA, -1L), label = "Domain Label", `_xportr.df_arg_` = "DOMAINNAME" + row.names = c(NA, -1L), label = "Label" ) ) }) -test_that("Expect error if any label exceeds 40 character", { +test_that("xportr_df_label Test 5: Expect error if label exceeds 40 character", { df <- data.frame(x = "a", y = "b") - varmeta <- data.frame( - dataset = rep("df", 2), - variable = c("x", "y"), - label = c("foo", "Lorem ipsum dolor sit amet, consectetur adipiscing elit") - ) - dfmeta <- data.frame( + df_meta <- data.frame( dataset = "df", - label = "Lorem ipsum dolor sit amet, consectetur adipiscing elit" + label = strrep("a", 41) ) expect_error( - xportr_df_label(df, dfmeta), + xportr_df_label(df, df_meta), "dataset label must be 40 characters or less" ) }) +test_that("xportr_df_label Test 6: Expect error if domain is not a character", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame( + dataset = "df", + label = "foo" + ) + + expect_error( + xportr_df_label(df, df_meta, domain = 1), + "`domain` must be a vector with type ." + ) + expect_error( + xportr_df_label(df, df_meta, domain = NA), + "`domain` must be a vector with type ." + ) +}) + test_that("xportr_format will set formats as expected", { df <- data.frame(x = 1, y = 2) varmeta <- data.frame( @@ -274,10 +299,6 @@ test_that("Error ", { df1 <- data.frame(x = 1, y = 2) df2 <- data.frame(x = 3, y = 4) - expect_error( - xportr_df_label(df1, df2, domain = mtcars), - "`domain` must be a vector with type ." - ) expect_error( xportr_format(df1, df2, domain = 1L), "`domain` must be a vector with type ." From efe45ce830f3016c2e8fb3c293e58a05aed1e103 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 25 Apr 2023 05:43:56 +0530 Subject: [PATCH 025/337] breakdown and add more tests for xportr_format() and xportr_length() --- tests/testthat/test-metadata.R | 249 +++++++++++++++++++++++++++++---- 1 file changed, 219 insertions(+), 30 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index fec464bc..fc118028 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -16,7 +16,7 @@ extract_var_label <- function(.x) { test_that("xportr_label Test 1: correctly applies label for data.frame spec", { df <- data.frame(x = "a", y = "b") - df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) + df_meta <- data.frame(dataset = "df", variable = c("x", "y"), label = c("foo", "bar")) df_labeled_df <- xportr_label(df, df_meta) @@ -36,7 +36,7 @@ test_that("xportr_label Test 1: correctly applies label for data.frame spec", { test_that("xportr_label Test 2: correctly applies label when the data is piped", { df <- data.frame(x = "a", y = "b") - df_meta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) + df_meta <- data.frame(dataset = "df", variable = c("x", "y"), label = c("foo", "bar")) df_labeled_df <- df %>% xportr_label(df_meta) @@ -251,20 +251,65 @@ test_that("xportr_df_label Test 6: Expect error if domain is not a character", { ) }) -test_that("xportr_format will set formats as expected", { +test_that("xportr_format Test 1: will set formats as expected", { df <- data.frame(x = 1, y = 2) - varmeta <- data.frame( - dataset = rep("df", 2), + df_meta <- data.frame( + dataset = "df", + variable = c("x", "y"), + format = c("date9.", "datetime20.") + ) + + formatted_df <- xportr_format(df, df_meta) + + expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.")) + expect_equal(dput(formatted_df), structure( + list( + x = structure(1, format.sas = "DATE9."), + y = structure(2, format.sas = "DATETIME20.") + ), + row.names = c(NA, -1L), class = "data.frame" + )) +}) + +test_that("xportr_format Test 2: will set formats as expected when data is piped", { + df <- data.frame(x = 1, y = 2) + df_meta <- data.frame( + dataset = "df", variable = c("x", "y"), format = c("date9.", "datetime20.") ) + formatted_df <- df %>% xportr_format(df_meta) + expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.")) + expect_equal(dput(formatted_df), structure( + list( + x = structure(1, format.sas = "DATE9."), + y = structure(2, format.sas = "DATETIME20.") + ), + row.names = c(NA, -1L), `_xportr.df_arg_` = "df", class = "data.frame" + )) +}) + +test_that("xportr_format Test 3: will set formats as expected for metacore spec", { + df <- data.frame(x = 1, y = 2) + metacore_meta <- suppressWarnings( + metacore( + var_spec = data.frame( + variable = c("x", "y"), + type = "text", + label = c("X Label", "Y Label"), + length = c(1, 2), + common = NA_character_, + format = c("date9.", "datetime20.") + ) + ) + ) - out <- xportr_format(df, varmeta) + formatted_df <- xportr_format(df, metacore_meta) - expect_equal(extract_format(out), c("DATE9.", "DATETIME20.")) - expect_equal(dput(out), structure( + expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.")) + expect_equal(dput(formatted_df), structure( list( x = structure(1, format.sas = "DATE9."), y = structure(2, format.sas = "DATETIME20.") @@ -273,18 +318,38 @@ test_that("xportr_format will set formats as expected", { )) }) -test_that("xportr_format will handle NA values and won't error", { +test_that("xportr_format Test 4: will set formats as expected for custom domain", { + df <- data.frame(x = 1, y = 2) + df_meta <- data.frame( + dataset = "DOMAIN", + variable = c("x", "y"), + format = c("date9.", "datetime20.") + ) + + formatted_df <- xportr_format(df, df_meta, domain = "DOMAIN") + + expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.")) + expect_equal(dput(formatted_df), structure( + list( + x = structure(1, format.sas = "DATE9."), + y = structure(2, format.sas = "DATETIME20.") + ), + row.names = c(NA, -1L), `_xportr.df_arg_` = "DOMAIN", class = "data.frame" + )) +}) + +test_that("xportr_format Test 5: will handle NA values and won't error", { df <- data.frame(x = 1, y = 2, z = 3, a = 4) - varmeta <- data.frame( + df_meta <- data.frame( dataset = rep("df", 4), variable = c("x", "y", "z", "abc"), format = c("date9.", "datetime20.", NA, "text") ) - out <- xportr_format(df, varmeta) + formatted_df <- xportr_format(df, df_meta) - expect_equal(extract_format(out), c("DATE9.", "DATETIME20.", "", "")) - expect_equal(dput(out), structure( + expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.", "", "")) + expect_equal(dput(formatted_df), structure( list( x = structure(1, format.sas = "DATE9."), y = structure(2, format.sas = "DATETIME20."), @@ -295,40 +360,164 @@ test_that("xportr_format will handle NA values and won't error", { )) }) -test_that("Error ", { - df1 <- data.frame(x = 1, y = 2) - df2 <- data.frame(x = 3, y = 4) +test_that("xportr_format Test 6: Expect error if domain is not a character", { + df <- data.frame(x = 1, y = 2, z = 3, a = 4) + df_meta <- data.frame( + dataset = "df", + variable = "x", + format = c("date9.") + ) expect_error( - xportr_format(df1, df2, domain = 1L), + xportr_format(df, df_meta, 1), + "`domain` must be a vector with type ." + ) + expect_error( + xportr_format(df, df_meta, NA), "`domain` must be a vector with type ." ) }) -test_that("SAS length", { +test_that("xportr_length Test 1: check if the width attribute is set properly", { df <- data.frame(x = "a", y = "b") - varmeta <- data.frame( - dataset = rep("df", 2), + df_meta <- data.frame( + dataset = "df", variable = c("x", "y"), type = c("text", "text"), - length = c(1, 1) + length = c(1, 2) ) - extract_length <- function(.x) { - vapply(.x, function(.x) attr(.x, "width"), character(1), USE.NAMES = FALSE) - } + df_with_width <- xportr_length(df, df_meta) + + expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) + expect_equal(dput(df_with_width), structure( + list( + x = structure("a", width = 1), + y = structure("b", width = 2) + ), + row.names = c(NA, -1L), class = "data.frame" + )) +}) + +test_that("xportr_length Test 2: check if the width attribute is set properly when data is piped", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame( + dataset = "df", + variable = c("x", "y"), + type = c("text", "text"), + length = c(1, 2) + ) + + df_with_width <- df %>% xportr_length(df_meta) + + expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) + expect_equal(dput(df_with_width), structure( + list( + x = structure("a", width = 1), + y = structure("b", width = 2) + ), + row.names = c(NA, -1L), `_xportr.df_arg_` = "df", class = "data.frame" + )) +}) + +test_that("xportr_length Test 3: check if the width attribute is set properly for metacore spec", { + df <- data.frame(x = "a", y = "b") + metacore_meta <- suppressWarnings( + metacore( + var_spec = data.frame( + variable = c("x", "y"), + type = "text", + label = c("X Label", "Y Label"), + length = c(1, 2), + common = NA_character_, + format = NA_character_ + ) + ) + ) - out <- xportr_length(df, varmeta) + df_with_width <- xportr_length(df, metacore_meta) - expect_equal(c(x = 1, y = 1), map_dbl(out, attr, "width")) - expect_equal(dput(out), structure( + expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) + expect_equal(dput(df_with_width), structure( list( x = structure("a", width = 1), - y = structure("b", width = 1) + y = structure("b", width = 2) ), row.names = c(NA, -1L), class = "data.frame" )) +}) + +test_that("xportr_length Test 4: check if the width attribute is set properly when custom domain is passed", { + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame( + dataset = rep("DOMAIN", 2), + variable = c("x", "y"), + type = c("text", "text"), + length = c(1, 2) + ) - df <- cbind(df, z = 3) - expect_error(xportr_length(df, varmeta, verbose = "stop"), "doesn't exist") + df_with_width <- xportr_length(df, df_meta, domain = "DOMAIN") + + expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) + expect_equal(dput(df_with_width), structure( + list( + x = structure("a", width = 1), + y = structure("b", width = 2) + ), + row.names = c(NA, -1L), `_xportr.df_arg_` = "DOMAIN", class = "data.frame" + )) +}) + +test_that("xportr_length Test 5: expect error when a variable is not present in metadata", { + df <- data.frame(x = "a", y = "b", z = "c") + df_meta <- data.frame( + dataset = "df", + variable = c("x", "y"), + type = c("text", "text"), + length = c(1, 2) + ) + + expect_error(xportr_length(df, df_meta, verbose = "stop"), "doesn't exist") +}) + +test_that("xportr_length Test 6: Check if the length gets imputed when a new variable is passed", { + df <- data.frame(x = "a", y = "b", z = 3) + df_meta <- data.frame( + dataset = "df", + variable = "x", + type = "text", + length = 1 + ) + + df_with_width <- xportr_length(df, df_meta) + + # 200 is the imputed length for character and 8 for other data types as in impute_length() + expect_equal(c(x = 1, y = 200, z = 8), map_dbl(df_with_width, attr, "width")) + expect_equal(dput(df_with_width), structure( + list( + x = structure("a", width = 1), + y = structure("b", width = 200), + z = structure(3, width = 8) + ), + row.names = c(NA, -1L), class = "data.frame" + )) +}) + +test_that("xportr_length Test 7: Expect error if domain is not a character", { + df <- data.frame(x = "a", y = "b", z = 3) + df_meta <- data.frame( + dataset = "df", + variable = "x", + type = "text", + length = 1 + ) + + expect_error( + xportr_length(df, df_meta, 1), + "`domain` must be a vector with type ." + ) + expect_error( + xportr_length(df, df_meta, NA), + "`domain` must be a vector with type ." + ) }) From 5be6863a1a3a2ba731e7dcd0a7109f3c92bcbfc9 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 25 Apr 2023 05:51:07 +0530 Subject: [PATCH 026/337] chore: fix test labels --- tests/testthat/test-metadata.R | 44 +++++++++++++++++----------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index fc118028..939cd5cd 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -14,7 +14,7 @@ extract_var_label <- function(.x) { vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) } -test_that("xportr_label Test 1: correctly applies label for data.frame spec", { +test_that("xportr_label Test 1: Correctly apply label for data.frame spec", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", variable = c("x", "y"), label = c("foo", "bar")) @@ -34,7 +34,7 @@ test_that("xportr_label Test 1: correctly applies label for data.frame spec", { ) }) -test_that("xportr_label Test 2: correctly applies label when the data is piped", { +test_that("xportr_label Test 2: Correctly apply label when data is piped", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", variable = c("x", "y"), label = c("foo", "bar")) @@ -55,7 +55,7 @@ test_that("xportr_label Test 2: correctly applies label when the data is piped", ) }) -test_that("xportr_label Test 3: correctly applies label for custom domain", { +test_that("xportr_label Test 3: Correctly apply label for custom domain", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = rep("DOMAIN", 2), variable = c("x", "y"), label = c("foo", "bar")) @@ -76,7 +76,7 @@ test_that("xportr_label Test 3: correctly applies label for custom domain", { ) }) -test_that("xportr_label Test 4: correctly applies label for metacore spec", { +test_that("xportr_label Test 4: Correctly apply label for metacore spec", { df <- data.frame(x = "a", y = "b", variable = "value") metacore_meta <- suppressWarnings( metacore( @@ -108,7 +108,7 @@ test_that("xportr_label Test 4: correctly applies label for metacore spec", { ) }) -test_that("xportr_label Test 5: Expect error if any variable doesn't exist in metadata", { +test_that("xportr_label Test 5: Expect error if any variable does not exist in metadata", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -119,7 +119,7 @@ test_that("xportr_label Test 5: Expect error if any variable doesn't exist in me expect_error(xportr_label(df, df_meta, verbose = "stop")) }) -test_that("xportr_label Test 6: Expect error if label exceeds 40 character", { +test_that("xportr_label Test 6: Expect error if label exceeds 40 characters", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -151,7 +151,7 @@ test_that("xportr_label Test 7: Expect error if domain is not a character", { ) }) -test_that("xportr_df_label Test 1: correctly applies label for data.frame spec", { +test_that("xportr_df_label Test 1: Correctly apply label for data.frame spec", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", label = "Label") @@ -164,7 +164,7 @@ test_that("xportr_df_label Test 1: correctly applies label for data.frame spec", ) }) -test_that("xportr_df_label Test 2: correctly applies label when the data is piped", { +test_that("xportr_df_label Test 2: Correctly apply label when data is piped", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", label = "Label") @@ -180,7 +180,7 @@ test_that("xportr_df_label Test 2: correctly applies label when the data is pipe ) }) -test_that("xportr_df_label Test 3: correctly applies label for custom domain", { +test_that("xportr_df_label Test 3: Correctly apply label for custom domain", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "DOMAIN", label = "Label") @@ -196,7 +196,7 @@ test_that("xportr_df_label Test 3: correctly applies label for custom domain", { ) }) -test_that("xportr_df_label Test 4: correctly applies label for metacore spec", { +test_that("xportr_df_label Test 4: Correctly apply label for metacore spec", { df <- data.frame(x = "a", y = "b") metacore_meta <- suppressWarnings( metacore( @@ -221,7 +221,7 @@ test_that("xportr_df_label Test 4: correctly applies label for metacore spec", { ) }) -test_that("xportr_df_label Test 5: Expect error if label exceeds 40 character", { +test_that("xportr_df_label Test 5: Expect error if label exceeds 40 characters", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -251,7 +251,7 @@ test_that("xportr_df_label Test 6: Expect error if domain is not a character", { ) }) -test_that("xportr_format Test 1: will set formats as expected", { +test_that("xportr_format Test 1: Set formats as expected", { df <- data.frame(x = 1, y = 2) df_meta <- data.frame( dataset = "df", @@ -271,7 +271,7 @@ test_that("xportr_format Test 1: will set formats as expected", { )) }) -test_that("xportr_format Test 2: will set formats as expected when data is piped", { +test_that("xportr_format Test 2: Set formats as expected when data is piped", { df <- data.frame(x = 1, y = 2) df_meta <- data.frame( dataset = "df", @@ -291,7 +291,7 @@ test_that("xportr_format Test 2: will set formats as expected when data is piped )) }) -test_that("xportr_format Test 3: will set formats as expected for metacore spec", { +test_that("xportr_format Test 3: Set formats as expected for metacore spec", { df <- data.frame(x = 1, y = 2) metacore_meta <- suppressWarnings( metacore( @@ -318,7 +318,7 @@ test_that("xportr_format Test 3: will set formats as expected for metacore spec" )) }) -test_that("xportr_format Test 4: will set formats as expected for custom domain", { +test_that("xportr_format Test 4: Set formats as expected for custom domain", { df <- data.frame(x = 1, y = 2) df_meta <- data.frame( dataset = "DOMAIN", @@ -338,7 +338,7 @@ test_that("xportr_format Test 4: will set formats as expected for custom domain" )) }) -test_that("xportr_format Test 5: will handle NA values and won't error", { +test_that("xportr_format Test 5: Handle NA values without raising an error", { df <- data.frame(x = 1, y = 2, z = 3, a = 4) df_meta <- data.frame( dataset = rep("df", 4), @@ -378,7 +378,7 @@ test_that("xportr_format Test 6: Expect error if domain is not a character", { ) }) -test_that("xportr_length Test 1: check if the width attribute is set properly", { +test_that("xportr_length Test 1: Check if width attribute is set properly", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -399,7 +399,7 @@ test_that("xportr_length Test 1: check if the width attribute is set properly", )) }) -test_that("xportr_length Test 2: check if the width attribute is set properly when data is piped", { +test_that("xportr_length Test 2: Check if width attribute is set properly when data is piped", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -420,7 +420,7 @@ test_that("xportr_length Test 2: check if the width attribute is set properly wh )) }) -test_that("xportr_length Test 3: check if the width attribute is set properly for metacore spec", { +test_that("xportr_length Test 3: Check if width attribute is set properly for metacore spec", { df <- data.frame(x = "a", y = "b") metacore_meta <- suppressWarnings( metacore( @@ -447,7 +447,7 @@ test_that("xportr_length Test 3: check if the width attribute is set properly fo )) }) -test_that("xportr_length Test 4: check if the width attribute is set properly when custom domain is passed", { +test_that("xportr_length Test 4: Check if width attribute is set properly when custom domain is passed", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = rep("DOMAIN", 2), @@ -468,7 +468,7 @@ test_that("xportr_length Test 4: check if the width attribute is set properly wh )) }) -test_that("xportr_length Test 5: expect error when a variable is not present in metadata", { +test_that("xportr_length Test 5: Expect error when a variable is not present in metadata", { df <- data.frame(x = "a", y = "b", z = "c") df_meta <- data.frame( dataset = "df", @@ -480,7 +480,7 @@ test_that("xportr_length Test 5: expect error when a variable is not present in expect_error(xportr_length(df, df_meta, verbose = "stop"), "doesn't exist") }) -test_that("xportr_length Test 6: Check if the length gets imputed when a new variable is passed", { +test_that("xportr_length Test 6: Check if length gets imputed when a new variable is passed", { df <- data.frame(x = "a", y = "b", z = 3) df_meta <- data.frame( dataset = "df", From 49d8bf3f7d958907f00d66d23467bb44dc7c2ddf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 17:22:11 +0200 Subject: [PATCH 027/337] correct lint and skip some tests if packages are not installed - metacore - haven - readxl --- tests/testthat/helper-length.R | 10 ++++++---- tests/testthat/test-length.R | 16 +++++++++------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/tests/testthat/helper-length.R b/tests/testthat/helper-length.R index e33ce1ad..cb2b4c8e 100644 --- a/tests/testthat/helper-length.R +++ b/tests/testthat/helper-length.R @@ -1,8 +1,10 @@ # Custom expect function to test result of xportr_length expect_attr_width <- function(result, metadata_length) { - widths <- map(colnames(result), ~attributes(result[[.x]]) %>% pluck("width")) - (widths %>% - unlist() == metadata_length) %>% all() %>% - expect_true() + test_widths <- map( + colnames(result), ~attributes(result[[.x]]) %>% pluck("width") + ) %>% + unlist() == metadata_length + + test_widths %>% all() %>% expect_true() invisible(result) } diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 59dd8fbe..ed95704c 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -62,7 +62,7 @@ test_that("[xportr_length()] CDISC data frame is being piped after another xport xportr_length(metadata) %>% expect_silent() %>% expect_attr_width(metadata$length) %>% - attr("_xportr.df_arg_" ) %>% + attr("_xportr.df_arg_") %>% expect_equal("adsl") }) @@ -94,13 +94,13 @@ test_that("[xportr_length()] CDISC data frame domain is being recognized from pi xportr_length(metadata, verbose = "none") }) - expect_no_match(attr(result, "_xportr.df_arg_" ), "^adsl$") + expect_no_match(attr(result, "_xportr.df_arg_"), "^adsl$") # Test results with piping result <- adsl %>% xportr_length(metadata) - attr(result, "_xportr.df_arg_" ) %>% + attr(result, "_xportr.df_arg_") %>% expect_equal("adsl") }) @@ -167,6 +167,7 @@ test_that("[xportr_length()] Throws message when variables not present in metada }) test_that("[xportr_length()] Metacore instance can be used", { + skip_if_not_installed("metacore") adsl <- minimal_table(30, cols = c("x", "b")) # Build a minimal metacore object @@ -200,10 +201,11 @@ test_that("[xportr_length()] Metacore instance can be used", { }) test_that("[xportr_length()] Domain not in character format", { - skip_if_not( - require(haven, quietly = TRUE) && require(readxl, quietly = TRUE), - message = "haven or readxl not installed" - ) + skip_if_not_installed("haven") + skip_if_not_installed("readxl") + + require(haven, quietly = TRUE) + require(readxl, quietly = TRUE) ADAE <- read_sas(system.file("extdata", "adae.sas7bdat", package = "xportr")) met <- read_excel(system.file("specs", "ADaM_spec.xlsx", package = "xportr"), 3) From 25e91ab677ccaad903297e07a036d689e10b9bc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 17:36:03 +0200 Subject: [PATCH 028/337] move functions to package as recommended --- R/test-support.R | 109 +++++++++++++++++++++++++++++++++ man/expect_attr_width.Rd | 20 ++++++ man/minimal_metadata.Rd | 49 +++++++++++++++ man/minimal_table.Rd | 26 ++++++++ tests/testthat/helper-data.R | 55 ----------------- tests/testthat/helper-length.R | 10 --- 6 files changed, 204 insertions(+), 65 deletions(-) create mode 100644 R/test-support.R create mode 100644 man/expect_attr_width.Rd create mode 100644 man/minimal_metadata.Rd create mode 100644 man/minimal_table.Rd delete mode 100644 tests/testthat/helper-data.R delete mode 100644 tests/testthat/helper-length.R diff --git a/R/test-support.R b/R/test-support.R new file mode 100644 index 00000000..6a31379f --- /dev/null +++ b/R/test-support.R @@ -0,0 +1,109 @@ +#' Custom expect function to test result of xportr_length +#' +#' @param result data.frame with `width` attribute on its columns. +#' @param metadata_length vector of numeric with expected lengths for each +#' column width. +#' +#' @return The first argument, invisibly. +expect_attr_width <- function(result, metadata_length) { + test_widths <- map( + colnames(result), ~attributes(result[[.x]]) %>% pluck("width") + ) %>% + unlist() == metadata_length + + test_widths %>% all() %>% expect_true() + invisible(result) +} + + +#' Minimal data frame mock of a valid ADaM dataset +#' +#' This function is only used in tests. +#' +#' @param n_rows Numeric value that indicates the number of rows of the data +#' frame +#' @param cols Vector of characters that indicates which columns to return. +#' By default only `x` and `y` are returned with numeric contents. +#' +#' @return A data.frame mimicking a valid ADaM dataset. +#' +#' @examples +#' minimal_table() +#' minimal_table(30) +#' minimal_table(15, cols = c("a", "b", "x")) +minimal_table <- function(n_rows = 3, cols = c("x", "y")) { + data.frame( + x = sample(1000 + seq(n_rows * 100), size = n_rows), + y = sample(c(0, 1, 2), size = n_rows, replace = TRUE), + z = 3, + a = 4, + b = sample( + c("Recusandae", "vero", "nihil", "velit", "omnis"), + size = n_rows, + replace = TRUE + ), + c = sample( + Sys.time() - 3600 * c(1, 10, 100, 1000), + size = n_rows, + replace = TRUE + ), + d = sample(Sys.Date() + c(1, -1, 10, -10), size = n_rows, replace = TRUE) + ) %>% + select(cols) +} + +#' Minimal metadata data frame mock for a ADaM dataset +#' +#' @param dataset Flag that indicates that the `dataset` column should +#' be included. +#' @param length Flag that indicates that the `length` column should +#' be included. +#' @param label Flag that indicates that the `label` column should +#' be included. +#' @param type Flag that indicates that the `type` column should +#' be included. +#' @param format Flag that indicates that the `format` column should +#' be included. +#' @param common Flag that indicates that the `common` column should +#' be included. +#' @param var_names Character vector that defines which variables (rows) +#' to keep +#' +#' @return A metadata data.frame +#' +#' @examples +#' minimal_metadata() +#' minimal_metadata(dataset = TRUE, length = TRUE, label = TRUE, common = TRUE) +#' minimal_metadata(dataset = TRUE, length = TRUE, var_names = c("x", "y")) +minimal_metadata <- function( + dataset = FALSE, + length = FALSE, + label = FALSE, + type = FALSE, + format = FALSE, + common = FALSE, + var_names = NULL +) { + cols_logical <- c(dataset, TRUE, label, length, type, format, common) + cols <- c( + "dataset", "variable", "label", "length", "type", "format", "common" + )[cols_logical] + + metadata <- tribble( + ~dataset, ~variable, ~label, ~length, ~type, ~format, ~common, + "adsl", "x", "Lorem", 8, "numeric", NA, NA, + "adsl", "y", "Ipsum", 200, "numeric", NA, NA, + "adsl", "z", "Dolor", 8, "numeric", NA, NA, + "adsl", "a", "Sit", 8, "numeric", NA, NA, + "adsl", "b", "Amet", 200, "character", NA, NA, + "adsl", "c", "Consectetur", 200, "character", "datetime20.", NA, + "adsl", "d", "Adipiscing", 200, "date", "date9.", NA + ) + + if (!is.null(var_names)) { + metadata <- metadata %>% + filter(.data$variable %in% var_names) + } + + metadata %>% select(cols) +} diff --git a/man/expect_attr_width.Rd b/man/expect_attr_width.Rd new file mode 100644 index 00000000..a9ccd016 --- /dev/null +++ b/man/expect_attr_width.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/test-support.R +\name{expect_attr_width} +\alias{expect_attr_width} +\title{Custom expect function to test result of xportr_length} +\usage{ +expect_attr_width(result, metadata_length) +} +\arguments{ +\item{result}{data.frame with \code{width} attribute on its columns.} + +\item{metadata_length}{vector of numeric with expected lengths for each +column width.} +} +\value{ +The first argument, invisibly. +} +\description{ +Custom expect function to test result of xportr_length +} diff --git a/man/minimal_metadata.Rd b/man/minimal_metadata.Rd new file mode 100644 index 00000000..79f2a70c --- /dev/null +++ b/man/minimal_metadata.Rd @@ -0,0 +1,49 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/test-support.R +\name{minimal_metadata} +\alias{minimal_metadata} +\title{Minimal metadata data frame mock for a ADaM dataset} +\usage{ +minimal_metadata( + dataset = FALSE, + length = FALSE, + label = FALSE, + type = FALSE, + format = FALSE, + common = FALSE, + var_names = NULL +) +} +\arguments{ +\item{dataset}{Flag that indicates that the \code{dataset} column should +be included.} + +\item{length}{Flag that indicates that the \code{length} column should +be included.} + +\item{label}{Flag that indicates that the \code{label} column should +be included.} + +\item{type}{Flag that indicates that the \code{type} column should +be included.} + +\item{format}{Flag that indicates that the \code{format} column should +be included.} + +\item{common}{Flag that indicates that the \code{common} column should +be included.} + +\item{var_names}{Character vector that defines which variables (rows) +to keep} +} +\value{ +A metadata data.frame +} +\description{ +Minimal metadata data frame mock for a ADaM dataset +} +\examples{ +minimal_metadata() +minimal_metadata(dataset = TRUE, length = TRUE, label = TRUE, common = TRUE) +minimal_metadata(dataset = TRUE, length = TRUE, var_names = c("x", "y")) +} diff --git a/man/minimal_table.Rd b/man/minimal_table.Rd new file mode 100644 index 00000000..1d09531b --- /dev/null +++ b/man/minimal_table.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/test-support.R +\name{minimal_table} +\alias{minimal_table} +\title{Minimal data frame mock of a valid ADaM dataset} +\usage{ +minimal_table(n_rows = 3, cols = c("x", "y")) +} +\arguments{ +\item{n_rows}{Numeric value that indicates the number of rows of the data +frame} + +\item{cols}{Vector of characters that indicates which columns to return. +By default only \code{x} and \code{y} are returned with numeric contents.} +} +\value{ +A data.frame mimicking a valid ADaM dataset. +} +\description{ +This function is only used in tests. +} +\examples{ +minimal_table() +minimal_table(30) +minimal_table(15, cols = c("a", "b", "x")) +} diff --git a/tests/testthat/helper-data.R b/tests/testthat/helper-data.R deleted file mode 100644 index 60dd4fa2..00000000 --- a/tests/testthat/helper-data.R +++ /dev/null @@ -1,55 +0,0 @@ -# Re-usable data for sample ADSL table -minimal_table <- function(n_rows = 3, cols = c("x", "y")) { - data.frame( - x = sample(1000 + seq(n_rows * 100), size = n_rows), - y = sample(c(0, 1, 2), size = n_rows, replace = TRUE), - z = 3, - a = 4, - b = sample( - c("Recusandae", "vero", "nihil", "velit", "omnis"), - size = n_rows, - replace = TRUE - ), - c = sample( - Sys.time() - 3600 * c(1, 10, 100, 1000), - size = n_rows, - replace = TRUE - ), - d = sample(Sys.Date() + c(1, -1, 10, -10), size = n_rows, replace = TRUE) - ) %>% - select(cols) -} - -# Re-usable data from sample metadata for ADSL -minimal_metadata <- function( - dataset = FALSE, - length = FALSE, - label = FALSE, - type = FALSE, - format = FALSE, - common = FALSE, - var_names = NULL -) { - cols_logical <- c(dataset, TRUE, label, length, type, format, common) - cols <- c( - "dataset", "variable", "label", "length", "type", "format", "common" - )[cols_logical] - - metadata <- tribble( - ~dataset, ~variable, ~label, ~length, ~type, ~format, ~common, - "adsl", "x", "Lorem", 8, "numeric", NA, NA, - "adsl", "y", "Ipsum", 200, "numeric", NA, NA, - "adsl", "z", "Dolor", 8, "numeric", NA, NA, - "adsl", "a", "Sit", 8, "numeric", NA, NA, - "adsl", "b", "Amet", 200, "character", NA, NA, - "adsl", "c", "Consectetur", 200, "character", "datetime20.", NA, - "adsl", "d", "Adipiscing", 200, "date", "date9.", NA - ) - - if (!is.null(var_names)) { - metadata <- metadata %>% - filter(.data$variable %in% var_names) - } - - metadata %>% select(cols) -} diff --git a/tests/testthat/helper-length.R b/tests/testthat/helper-length.R deleted file mode 100644 index cb2b4c8e..00000000 --- a/tests/testthat/helper-length.R +++ /dev/null @@ -1,10 +0,0 @@ -# Custom expect function to test result of xportr_length -expect_attr_width <- function(result, metadata_length) { - test_widths <- map( - colnames(result), ~attributes(result[[.x]]) %>% pluck("width") - ) %>% - unlist() == metadata_length - - test_widths %>% all() %>% expect_true() - invisible(result) -} From 8a4f95213a1b9b5bf85b678c685feb1f3a17c7ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 17:37:37 +0200 Subject: [PATCH 029/337] cleanup documentation for test --- tests/testthat/test-length.R | 8 -------- 1 file changed, 8 deletions(-) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index ed95704c..d9077f5a 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -4,14 +4,6 @@ #' * Errors #' * Result of call will create `SASlength` attribute (`width` for each #' variable) -#' -#' Helper functions / data (from ÂŽtest/testthat/helper-length.RÂŽ): -#' * \code{minimal_adsl} : minimal data frame with ADSL sample -#' * \code{minimal_length_metadata} : minimal metadata used in -#' `xport_length()`. It contains dataset (domain), variable names and length -#' * \code{expect_attr_width(result, metadata_length)} : support function to -#' test the data.frame modifications being done in `xportr_length()` - test_that("[xportr_length()] Accepts valid domain names in metadata/metacore", { adsl <- minimal_table(30) metadata <- minimal_metadata(dataset = TRUE, length = TRUE, var_names = colnames(adsl)) From 4245395de1bcc81c51a2225681fd194f554b0123 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 17:45:41 +0200 Subject: [PATCH 030/337] use testthat namespace --- R/test-support.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/test-support.R b/R/test-support.R index 6a31379f..103e1fc2 100644 --- a/R/test-support.R +++ b/R/test-support.R @@ -11,7 +11,7 @@ expect_attr_width <- function(result, metadata_length) { ) %>% unlist() == metadata_length - test_widths %>% all() %>% expect_true() + test_widths %>% all() %>% testthat::expect_true() invisible(result) } From 13515d2bc2914c493702e9e98f7ce81c5da13c85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 17:58:20 +0200 Subject: [PATCH 031/337] remove examples of non-exported functions --- R/test-support.R | 10 ---------- man/minimal_metadata.Rd | 5 ----- man/minimal_table.Rd | 5 ----- 3 files changed, 20 deletions(-) diff --git a/R/test-support.R b/R/test-support.R index 103e1fc2..3170ff70 100644 --- a/R/test-support.R +++ b/R/test-support.R @@ -26,11 +26,6 @@ expect_attr_width <- function(result, metadata_length) { #' By default only `x` and `y` are returned with numeric contents. #' #' @return A data.frame mimicking a valid ADaM dataset. -#' -#' @examples -#' minimal_table() -#' minimal_table(30) -#' minimal_table(15, cols = c("a", "b", "x")) minimal_table <- function(n_rows = 3, cols = c("x", "y")) { data.frame( x = sample(1000 + seq(n_rows * 100), size = n_rows), @@ -70,11 +65,6 @@ minimal_table <- function(n_rows = 3, cols = c("x", "y")) { #' to keep #' #' @return A metadata data.frame -#' -#' @examples -#' minimal_metadata() -#' minimal_metadata(dataset = TRUE, length = TRUE, label = TRUE, common = TRUE) -#' minimal_metadata(dataset = TRUE, length = TRUE, var_names = c("x", "y")) minimal_metadata <- function( dataset = FALSE, length = FALSE, diff --git a/man/minimal_metadata.Rd b/man/minimal_metadata.Rd index 79f2a70c..7b6eb8f5 100644 --- a/man/minimal_metadata.Rd +++ b/man/minimal_metadata.Rd @@ -42,8 +42,3 @@ A metadata data.frame \description{ Minimal metadata data frame mock for a ADaM dataset } -\examples{ -minimal_metadata() -minimal_metadata(dataset = TRUE, length = TRUE, label = TRUE, common = TRUE) -minimal_metadata(dataset = TRUE, length = TRUE, var_names = c("x", "y")) -} diff --git a/man/minimal_table.Rd b/man/minimal_table.Rd index 1d09531b..538e5d2a 100644 --- a/man/minimal_table.Rd +++ b/man/minimal_table.Rd @@ -19,8 +19,3 @@ A data.frame mimicking a valid ADaM dataset. \description{ This function is only used in tests. } -\examples{ -minimal_table() -minimal_table(30) -minimal_table(15, cols = c("a", "b", "x")) -} From 51b66bf449dfef6958e0a89eff8ba64b156b031d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:06:48 +0200 Subject: [PATCH 032/337] remove mockery in favor of cli theme, rename tests --- DESCRIPTION | 3 +- R/{test-support.R => support-test.R} | 7 ++++ man/cli_theme_tests.Rd | 16 ++++++++ man/expect_attr_width.Rd | 2 +- man/minimal_metadata.Rd | 2 +- man/minimal_table.Rd | 2 +- tests/testthat/helper-mock_bindings.R | 4 -- tests/testthat/test-length.R | 50 +++++++++++-------------- tests/testthat/test-support-for-tests.R | 32 ++++++++++++++++ 9 files changed, 81 insertions(+), 37 deletions(-) rename R/{test-support.R => support-test.R} (93%) create mode 100644 man/cli_theme_tests.Rd delete mode 100644 tests/testthat/helper-mock_bindings.R create mode 100644 tests/testthat/test-support-for-tests.R diff --git a/DESCRIPTION b/DESCRIPTION index 00a402ce..c6f92af3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -62,7 +62,6 @@ Suggests: usethis, lintr, styler, - metacore, - mockery + metacore Config/testthat/edition: 3 VignetteBuilder: knitr diff --git a/R/test-support.R b/R/support-test.R similarity index 93% rename from R/test-support.R rename to R/support-test.R index 3170ff70..93004bc9 100644 --- a/R/test-support.R +++ b/R/support-test.R @@ -97,3 +97,10 @@ minimal_metadata <- function( metadata %>% select(cols) } + +#' Theme for cli package messages when running inside tests +#' +#' It can be defined with starting an `cli::start_app(theme = cli_theme_tests)` +cli_theme_tests <- list( + h2 = list(`margin-top` = 0, `margin-bottom` = 0) +) diff --git a/man/cli_theme_tests.Rd b/man/cli_theme_tests.Rd new file mode 100644 index 00000000..83f9bb42 --- /dev/null +++ b/man/cli_theme_tests.Rd @@ -0,0 +1,16 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/support-test.R +\docType{data} +\name{cli_theme_tests} +\alias{cli_theme_tests} +\title{Theme for cli package messages when running inside tests} +\format{ +An object of class \code{list} of length 1. +} +\usage{ +cli_theme_tests +} +\description{ +It can be defined with starting an \code{cli::start_app(theme = cli_theme_tests)} +} +\keyword{datasets} diff --git a/man/expect_attr_width.Rd b/man/expect_attr_width.Rd index a9ccd016..9dae48da 100644 --- a/man/expect_attr_width.Rd +++ b/man/expect_attr_width.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/test-support.R +% Please edit documentation in R/support-test.R \name{expect_attr_width} \alias{expect_attr_width} \title{Custom expect function to test result of xportr_length} diff --git a/man/minimal_metadata.Rd b/man/minimal_metadata.Rd index 7b6eb8f5..d25dc446 100644 --- a/man/minimal_metadata.Rd +++ b/man/minimal_metadata.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/test-support.R +% Please edit documentation in R/support-test.R \name{minimal_metadata} \alias{minimal_metadata} \title{Minimal metadata data frame mock for a ADaM dataset} diff --git a/man/minimal_table.Rd b/man/minimal_table.Rd index 538e5d2a..9fd830f3 100644 --- a/man/minimal_table.Rd +++ b/man/minimal_table.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/test-support.R +% Please edit documentation in R/support-test.R \name{minimal_table} \alias{minimal_table} \title{Minimal data frame mock of a valid ADaM dataset} diff --git a/tests/testthat/helper-mock_bindings.R b/tests/testthat/helper-mock_bindings.R deleted file mode 100644 index 9d1de7cb..00000000 --- a/tests/testthat/helper-mock_bindings.R +++ /dev/null @@ -1,4 +0,0 @@ -# function that can be used with mockery::stub to mock cli messages -cli_mocked_fun <- function(text, ...) { - xportr_logger(text, "message") -} diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index d9077f5a..08fcc981 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -4,7 +4,9 @@ #' * Errors #' * Result of call will create `SASlength` attribute (`width` for each #' variable) -test_that("[xportr_length()] Accepts valid domain names in metadata/metacore", { + + +test_that("xportr_length: Accepts valid domain names in metadata/metacore", { adsl <- minimal_table(30) metadata <- minimal_metadata(dataset = TRUE, length = TRUE, var_names = colnames(adsl)) @@ -40,7 +42,7 @@ test_that("[xportr_length()] Accepts valid domain names in metadata/metacore", { expect_equal(30) }) -test_that("[xportr_length()] CDISC data frame is being piped after another xportr function", { +test_that("xportr_length: CDISC data frame is being piped after another xportr function", { adsl <- minimal_table(30) metadata <- minimal_metadata( dataset = TRUE, length = TRUE, type = TRUE, var_names = colnames(adsl) @@ -58,20 +60,17 @@ test_that("[xportr_length()] CDISC data frame is being piped after another xport expect_equal("adsl") }) -test_that("[xportr_length()] CDISC data frame domain is being recognized from pipe", { +test_that("xportr_length: CDISC data frame domain is being recognized from pipe", { adsl <- minimal_table(30) metadata <- minimal_metadata(dataset = TRUE, length = TRUE, var_names = colnames(adsl)) # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) - if (require(mockery, quietly = TRUE)) { - # Prevent CLI messages by using local xportr_logger instead - stub(length_log, "cli_h2", cli_mocked_fun) - stub(length_log, "cli_alert_success", cli_mocked_fun) - stub(length_log, "cli_alert_danger", cli_mocked_fun) - stub(xportr_length, "length_log", length_log) - } + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) # With domain manually set not_adsl <- adsl @@ -96,7 +95,7 @@ test_that("[xportr_length()] CDISC data frame domain is being recognized from pi expect_equal("adsl") }) -test_that("[xportr_length()] Impute character lengths based on class", { +test_that("xportr_length: Impute character lengths based on class", { adsl <- minimal_table(30, cols = c("x", "b")) metadata <- minimal_metadata( dataset = TRUE, length = TRUE, var_names = colnames(adsl) @@ -108,12 +107,10 @@ test_that("[xportr_length()] Impute character lengths based on class", { # Define controlled `character_types` for this test withr::local_options(list(xportr.character_types = c("character", "date"))) - if (require(mockery, quietly = TRUE)) { - # Prevent CLI messages by using local xportr_logger instead - stub(length_log, "cli_h2", cli_mocked_fun) - stub(length_log, "cli_alert_success", cli_mocked_fun) - stub(xportr_length, "length_log", length_log) - } + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) # Test length imputation of character and numeric (not valid character type) adsl %>% @@ -137,19 +134,16 @@ test_that("[xportr_length()] Impute character lengths based on class", { expect_attr_width(c(7, 199, 200, 200, 8)) }) -test_that("[xportr_length()] Throws message when variables not present in metadata", { +test_that("xportr_length: Throws message when variables not present in metadata", { adsl <- minimal_table(30, cols = c("x", "y")) metadata <- minimal_metadata(dataset = TRUE, length = TRUE, var_names = c("x")) # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) - - if (require(mockery, quietly = TRUE)) { - # Prevent CLI messages by using local xportr_logger instead - stub(length_log, "cli_h2", cli_mocked_fun) - stub(length_log, "cli_alert_success", cli_mocked_fun) - stub(xportr_length, "length_log", length_log) - } + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) # Test that message is given which indicates that variable is not present xportr_length(adsl, metadata) %>% @@ -158,7 +152,7 @@ test_that("[xportr_length()] Throws message when variables not present in metada expect_message(regexp = "Problem with `y`") }) -test_that("[xportr_length()] Metacore instance can be used", { +test_that("xportr_length: Metacore instance can be used", { skip_if_not_installed("metacore") adsl <- minimal_table(30, cols = c("x", "b")) @@ -192,7 +186,7 @@ test_that("[xportr_length()] Metacore instance can be used", { expect_attr_width(metadata$length) }) -test_that("[xportr_length()] Domain not in character format", { +test_that("xportr_length: Domain not in character format", { skip_if_not_installed("haven") skip_if_not_installed("readxl") @@ -207,7 +201,7 @@ test_that("[xportr_length()] Domain not in character format", { ) }) -test_that("[xportr_length()] Column length of known/unkown character types is 200/8 ", { +test_that("xportr_length: Column length of known/unkown character types is 200/8 ", { expect_equal(impute_length(123), 8) expect_equal(impute_length(123L), 8) expect_equal(impute_length("string"), 200) diff --git a/tests/testthat/test-support-for-tests.R b/tests/testthat/test-support-for-tests.R new file mode 100644 index 00000000..8b5d9308 --- /dev/null +++ b/tests/testthat/test-support-for-tests.R @@ -0,0 +1,32 @@ +test_that("minimal_table: builds minimal data frame with data", { + minimal_table(31) %>% + NROW() %>% + expect_equal(31) + + (minimal_table(31) %>% colnames() %in% c("x", "y")) %>% + all() %>% + expect_true() +}) + +test_that("minimal_metadata: builds minimal metadata data frame", { + sample_metadata <- minimal_metadata( + dataset = TRUE, + length = TRUE, + label = TRUE, + type = TRUE, + format = TRUE, + common = TRUE + ) + + (sample_metadata$variable %in% c("x", "y", "z", "a", "b", "c", "d")) %>% + all() %>% + expect_true() +}) + +test_that("minimal_metadata: columns in minimal_table are all in metadata", { + sample_data <- minimal_table(31, cols = c("x", "y", "z", "a", "b", "c", "d")) + sample_metadata <- minimal_metadata(dataset = TRUE) + (sample_metadata$variable %in% colnames(sample_data)) %>% + all() %>% + expect_true() +}) From 4bf5e6c1f55ba8dccef61e23b2630624effaea0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:10:57 +0200 Subject: [PATCH 033/337] corrects lint error --- tests/testthat/test-support-for-tests.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-support-for-tests.R b/tests/testthat/test-support-for-tests.R index 8b5d9308..8b54b006 100644 --- a/tests/testthat/test-support-for-tests.R +++ b/tests/testthat/test-support-for-tests.R @@ -3,7 +3,7 @@ test_that("minimal_table: builds minimal data frame with data", { NROW() %>% expect_equal(31) - (minimal_table(31) %>% colnames() %in% c("x", "y")) %>% + (colnames(minimal_table(31)) %in% c("x", "y")) %>% all() %>% expect_true() }) From c325550eb60b712b28b5e9a723ae03817017ad54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:12:13 +0200 Subject: [PATCH 034/337] reverts order on test --- tests/testthat/test-support-for-tests.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-support-for-tests.R b/tests/testthat/test-support-for-tests.R index 8b54b006..5d590688 100644 --- a/tests/testthat/test-support-for-tests.R +++ b/tests/testthat/test-support-for-tests.R @@ -26,7 +26,7 @@ test_that("minimal_metadata: builds minimal metadata data frame", { test_that("minimal_metadata: columns in minimal_table are all in metadata", { sample_data <- minimal_table(31, cols = c("x", "y", "z", "a", "b", "c", "d")) sample_metadata <- minimal_metadata(dataset = TRUE) - (sample_metadata$variable %in% colnames(sample_data)) %>% + (colnames(sample_data) %in% sample_metadata$variable) %>% all() %>% expect_true() }) From e6e081ac2190d96c2b0495d7a11e1f329c32f13f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 19:44:26 +0200 Subject: [PATCH 035/337] revert removal of empty line --- R/messages.R | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/R/messages.R b/R/messages.R index 6c6f93f3..ddec8c16 100644 --- a/R/messages.R +++ b/R/messages.R @@ -10,12 +10,13 @@ #' @return Output to Console #' @export xportr_logger <- function(message, type = "none", ...) { + log_fun <- switch(type, stop = abort, warn = warn, message = inform, return()) - + do.call(log_fun, list(message, ...)) } @@ -28,23 +29,23 @@ xportr_logger <- function(message, type = "none", ...) { #' @return Output to Console #' @export var_names_log <- function(tidy_names_df, verbose) { - - + + only_renames <- tidy_names_df %>% filter(original_varname != renamed_var) %>% mutate(renamed_msg = paste0("Var ", col_pos, ": '", original_varname, "' was renamed to '", renamed_var, "'")) - + # Message regarding number of variables that were renamed/ modified num_renamed <- nrow(only_renames) tot_num_vars <- nrow(tidy_names_df) message("\n") cli::cli_h2(paste0(num_renamed, " of ", tot_num_vars, " (", round(100 * (num_renamed / tot_num_vars), 1), "%) variables were renamed")) - + # Message stating any renamed variables each original variable and it's new name if (nrow(only_renames) > 0) message(paste0(paste(only_renames$renamed_msg, collapse = "\n"), "\n")) - + # Message checking for duplicate variable names after renamed (Pretty sure # this is impossible) but good to have a check none-the-less. dups <- tidy_names_df %>% filter(renamed_n > 1) @@ -65,9 +66,9 @@ var_names_log <- function(tidy_names_df, verbose) { #' @return Output to Console #' @export type_log <- function(meta_ordered, type_mismatch_ind, verbose) { - + if (length(type_mismatch_ind) > 0) { - + message <- glue( "Variable type(s) in dataframe don't match metadata: ", paste0(glue("{encode_vars(meta_ordered[type_mismatch_ind, 'variable'])}"), @@ -75,7 +76,7 @@ type_log <- function(meta_ordered, type_mismatch_ind, verbose) { ) xportr_logger(message, verbose) - + cli_h2("Variable type mismatches found.") cli_alert_success("{ length(type_mismatch_ind) } variables coerced") } @@ -89,12 +90,12 @@ type_log <- function(meta_ordered, type_mismatch_ind, verbose) { #' @return Output to Console #' @export length_log <- function(miss_vars, verbose) { - + if (length(miss_vars) > 0) { - + cli_h2("Variable lengths missing from metadata.") cli_alert_success("{ length(miss_vars) } lengths resolved") - + xportr_logger( c("Variable(s) present in dataframe but doesn't exist in `metadata`.", x = glue("Problem with {encode_vars(miss_vars)}")), @@ -112,10 +113,10 @@ length_log <- function(miss_vars, verbose) { #' @export label_log <- function(miss_vars, verbose) { if (length(miss_vars) > 0) { - + cli_h2("Variable labels missing from metadata.") cli_alert_success("{ length(miss_vars) } labels skipped") - + xportr_logger( c("Variable(s) present in dataframe but doesn't exist in `metadata`.", x = glue("Problem with {encode_vars(miss_vars)}")), @@ -133,7 +134,7 @@ label_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export var_ord_msg <- function(moved_vars, verbose) { - + if (moved_vars > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") message <- glue( From 7aa914b51991c32159c3483e0b59560c18e73ae0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 25 Apr 2023 23:50:49 +0200 Subject: [PATCH 036/337] replace common column with order in minimal metadata --- R/support-test.R | 38 +++++++++++++------------ man/minimal_metadata.Rd | 7 +++-- tests/testthat/test-length.R | 2 +- tests/testthat/test-support-for-tests.R | 2 +- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/R/support-test.R b/R/support-test.R index 93004bc9..4da5dbea 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -59,35 +59,37 @@ minimal_table <- function(n_rows = 3, cols = c("x", "y")) { #' be included. #' @param format Flag that indicates that the `format` column should #' be included. -#' @param common Flag that indicates that the `common` column should +#' @param order Flag that indicates that the `order` column should #' be included. +#' @param dataset_name String with name of domain. #' @param var_names Character vector that defines which variables (rows) #' to keep #' #' @return A metadata data.frame minimal_metadata <- function( - dataset = FALSE, - length = FALSE, - label = FALSE, - type = FALSE, - format = FALSE, - common = FALSE, - var_names = NULL + dataset = FALSE, + length = FALSE, + label = FALSE, + type = FALSE, + format = FALSE, + order = FALSE, + dataset_name = "adsl", + var_names = NULL ) { - cols_logical <- c(dataset, TRUE, label, length, type, format, common) + cols_logical <- c(dataset, TRUE, label, length, type, format, order) cols <- c( - "dataset", "variable", "label", "length", "type", "format", "common" + "dataset", "variable", "label", "length", "type", "format", "order" )[cols_logical] metadata <- tribble( - ~dataset, ~variable, ~label, ~length, ~type, ~format, ~common, - "adsl", "x", "Lorem", 8, "numeric", NA, NA, - "adsl", "y", "Ipsum", 200, "numeric", NA, NA, - "adsl", "z", "Dolor", 8, "numeric", NA, NA, - "adsl", "a", "Sit", 8, "numeric", NA, NA, - "adsl", "b", "Amet", 200, "character", NA, NA, - "adsl", "c", "Consectetur", 200, "character", "datetime20.", NA, - "adsl", "d", "Adipiscing", 200, "date", "date9.", NA + ~dataset, ~variable, ~label, ~length, ~type, ~format, ~order, + "adsl", "x", "Lorem", 8, "numeric", NA, 1, + "adsl", "y", "Ipsum", 200, "numeric", NA, 2, + "adsl", "z", "Dolor", 8, "numeric", NA, 3, + "adsl", "a", "Sit", 8, "numeric", NA, 4, + "adsl", "b", "Amet", 200, "character", NA, 5, + "adsl", "c", "Consectetur", 200, "character", "datetime20.", 6, + "adsl", "d", "Adipiscing", 200, "date", "date9.", 7 ) if (!is.null(var_names)) { diff --git a/man/minimal_metadata.Rd b/man/minimal_metadata.Rd index d25dc446..806a4bf8 100644 --- a/man/minimal_metadata.Rd +++ b/man/minimal_metadata.Rd @@ -10,7 +10,8 @@ minimal_metadata( label = FALSE, type = FALSE, format = FALSE, - common = FALSE, + order = FALSE, + dataset_name = "adsl", var_names = NULL ) } @@ -30,9 +31,11 @@ be included.} \item{format}{Flag that indicates that the \code{format} column should be included.} -\item{common}{Flag that indicates that the \code{common} column should +\item{order}{Flag that indicates that the \code{order} column should be included.} +\item{dataset_name}{String with name of domain.} + \item{var_names}{Character vector that defines which variables (rows) to keep} } diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 08fcc981..8b9b766f 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -172,7 +172,7 @@ test_that("xportr_length: Metacore instance can be used", { type = TRUE, label = TRUE, format = TRUE, - common = TRUE + order = TRUE ) ) ) diff --git a/tests/testthat/test-support-for-tests.R b/tests/testthat/test-support-for-tests.R index 5d590688..5e4136ce 100644 --- a/tests/testthat/test-support-for-tests.R +++ b/tests/testthat/test-support-for-tests.R @@ -15,7 +15,7 @@ test_that("minimal_metadata: builds minimal metadata data frame", { label = TRUE, type = TRUE, format = TRUE, - common = TRUE + order = TRUE ) (sample_metadata$variable %in% c("x", "y", "z", "a", "b", "c", "d")) %>% From 5d21225cbe6aed88377148dd2ab1b0b1300bd96b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 26 Apr 2023 00:20:57 +0200 Subject: [PATCH 037/337] Update tests/testthat/test-length.R Co-authored-by: Ben Straub --- tests/testthat/test-length.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 8b9b766f..4c98b696 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -6,7 +6,7 @@ #' variable) -test_that("xportr_length: Accepts valid domain names in metadata/metacore", { +test_that("xportr_length: Accepts valid domain names in metadata object", { adsl <- minimal_table(30) metadata <- minimal_metadata(dataset = TRUE, length = TRUE, var_names = colnames(adsl)) From fad37d8e68336bf9d5e19852f335545304d146cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 26 Apr 2023 00:54:23 +0200 Subject: [PATCH 038/337] get rid of note about select(cols) --- R/support-test.R | 4 ++-- R/xportr-package.R | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/R/support-test.R b/R/support-test.R index 4da5dbea..ce4c9387 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -44,7 +44,7 @@ minimal_table <- function(n_rows = 3, cols = c("x", "y")) { ), d = sample(Sys.Date() + c(1, -1, 10, -10), size = n_rows, replace = TRUE) ) %>% - select(cols) + select(all_of(cols)) } #' Minimal metadata data frame mock for a ADaM dataset @@ -97,7 +97,7 @@ minimal_metadata <- function( filter(.data$variable %in% var_names) } - metadata %>% select(cols) + metadata %>% select(all_of(cols)) } #' Theme for cli package messages when running inside tests diff --git a/R/xportr-package.R b/R/xportr-package.R index ef677962..b075d78c 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -7,7 +7,7 @@ #' @import rlang haven #' @importFrom dplyr left_join bind_cols filter select rename rename_with n #' everything arrange group_by summarize mutate ungroup case_when distinct -#' tribble +#' tribble all_of #' @importFrom glue glue glue_collapse #' @importFrom cli cli_alert_info cli_h2 cli_alert_success cli_alert_info #' cli_div cli_alert_success cli_text cli_h2 From 664d489a050142898f0eae1ffef7702da638d336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 19 Apr 2023 13:47:37 +0200 Subject: [PATCH 039/337] initial tests for logger and corrects bug in var_ord_msg --- R/messages.R | 9 +++---- tests/testthat/test-messages.R | 44 ++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 6 deletions(-) create mode 100644 tests/testthat/test-messages.R diff --git a/R/messages.R b/R/messages.R index ddec8c16..c3cc71e8 100644 --- a/R/messages.R +++ b/R/messages.R @@ -133,14 +133,11 @@ label_log <- function(miss_vars, verbose) { #' #' @return Output to Console #' @export -var_ord_msg <- function(moved_vars, verbose) { - - if (moved_vars > 0) { +var_ord_msg <- function(moved_vars, verbose){ + if (length(moved_vars) > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") message <- glue( - "Variable reordered in `.df`: ", - paste0(glue("{ encode_vars(moved_vars) }"), - collapse = "", sep = " ") + "Variable reordered in `.df`: { encode_vars(moved_vars) }" ) xportr_logger(message, verbose) } else { diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R new file mode 100644 index 00000000..df98c937 --- /dev/null +++ b/tests/testthat/test-messages.R @@ -0,0 +1,44 @@ +test_that("Type parameter will create correct messages", { + + xportr_logger("A message", type = "none") %>% + expect_silent() + + xportr_logger("A message", type = "message") %>% + expect_message("A message") + + xportr_logger("A message", type = "warn") %>% + expect_warning("A message") + + xportr_logger("A message", type = "stop") %>% + expect_error("A message") + + # Supports additional parameters to rlang::stop + xportr_logger("A message", type = "stop", footer = "A footer") %>% + expect_error("A message", class = "rlang_error") +}) + +test_that("Logs names of missed variables", { + + # Prevent CLI messages + withr::local_options(list(cli.default_handler = function(...) { })) + + expect_message( + label_log(c("var1", "var2", "var3"), "message"), + "Problem with `var1`.*`var2`.*`var3`" + ) +}) + +test_that("Variables reorderd message", { + moved_vars <- c("var1", "var2", "var3") + message_regexp <- "Variable reordered in.+`var1`.+`var2`.+`var3`$" + + expect_message( + var_ord_msg(moved_vars, "message"), + regexp = message_regexp + ) + + expect_error( + var_ord_msg(moved_vars, "stop"), + regexp = message_regexp + ) +}) From 0d2a5925d252adebaa89b5c9578faef7dc55cf25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 19 Apr 2023 15:11:38 +0200 Subject: [PATCH 040/337] catches cli messages and bug fixes in messages functions --- R/messages.R | 45 ++++++++++++++-------- tests/testthat/test-messages.R | 68 ++++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 16 deletions(-) diff --git a/R/messages.R b/R/messages.R index c3cc71e8..cdf26566 100644 --- a/R/messages.R +++ b/R/messages.R @@ -1,3 +1,4 @@ + #' Utility Logging Function #' #' Functions to output user messages, usually relating to differences @@ -29,31 +30,42 @@ xportr_logger <- function(message, type = "none", ...) { #' @return Output to Console #' @export var_names_log <- function(tidy_names_df, verbose) { - - only_renames <- tidy_names_df %>% filter(original_varname != renamed_var) %>% - mutate(renamed_msg = paste0("Var ", col_pos, ": '", original_varname, - "' was renamed to '", renamed_var, "'")) + mutate( + renamed_msg = glue::glue( + "Var {col_pos} : '{original_varname}' was renamed to 'renamed_var'" + ) + ) # Message regarding number of variables that were renamed/ modified num_renamed <- nrow(only_renames) tot_num_vars <- nrow(tidy_names_df) - message("\n") - cli::cli_h2(paste0(num_renamed, " of ", tot_num_vars, " (", - round(100 * (num_renamed / tot_num_vars), 1), "%) variables were renamed")) + + cli::cli_h2(glue::glue( + .sep = " ", + "{num_renamed} of {tot_num_vars}", + "({round(100*(num_renamed/tot_num_vars), 1)}%)", + "variables were renamed" + )) # Message stating any renamed variables each original variable and it's new name - if (nrow(only_renames) > 0) message(paste0(paste(only_renames$renamed_msg, collapse = "\n"), "\n")) + if (nrow(only_renames) > 0) { + purrr::walk(only_renames$renamed_msg, ~xportr_logger(.x, verbose)) + } # Message checking for duplicate variable names after renamed (Pretty sure # this is impossible) but good to have a check none-the-less. dups <- tidy_names_df %>% filter(renamed_n > 1) if (nrow(dups) != 0) { cli::cli_alert_danger( - paste("Duplicate renamed term(s) were created. Consider creating dictionary terms for:", - paste(unique(dups$renamed_var), collapse = ", ") - )) + glue::glue( + .sep = " ", + "Duplicate renamed term(s) were created.", + "Consider creating dictionary terms for:", + encode_vars(unique(dups$renamed_var)) + ) + ) } } @@ -71,8 +83,7 @@ type_log <- function(meta_ordered, type_mismatch_ind, verbose) { message <- glue( "Variable type(s) in dataframe don't match metadata: ", - paste0(glue("{encode_vars(meta_ordered[type_mismatch_ind, 'variable'])}"), - collapse = "", sep = " ") + "{encode_vars(meta_ordered[type_mismatch_ind, 'variable'])}" ) xportr_logger(message, verbose) @@ -97,8 +108,10 @@ length_log <- function(miss_vars, verbose) { cli_alert_success("{ length(miss_vars) } lengths resolved") xportr_logger( - c("Variable(s) present in dataframe but doesn't exist in `metadata`.", - x = glue("Problem with {encode_vars(miss_vars)}")), + glue::glue( + "Variable(s) present in dataframe but doesn't exist in `metadata`.", + "Problem with {encode_vars(miss_vars)}" + ), type = verbose ) } @@ -133,7 +146,7 @@ label_log <- function(miss_vars, verbose) { #' #' @return Output to Console #' @export -var_ord_msg <- function(moved_vars, verbose){ +var_ord_msg <- function(moved_vars, verbose) { if (length(moved_vars) > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") message <- glue( diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index df98c937..bce15506 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -1,3 +1,7 @@ +test_cli_theme <- list( + cli.user_theme = list(h2 = list(`margin-top` = 0, `margin-bottom` = 0)) +) + test_that("Type parameter will create correct messages", { xportr_logger("A message", type = "none") %>% @@ -17,7 +21,32 @@ test_that("Type parameter will create correct messages", { expect_error("A message", class = "rlang_error") }) +test_that("Length", { + # Prevent CLI messages + withr::local_options(cli.user_theme = test_cli_theme) + + # Catch CLI messages + length_log(c("var1", "var2", "var3"), "none") %>% + expect_message("Variable lengths missing from metadata.") %>% + expect_message("3 lengths resolved") + + # Prevent CLI messages + withr::local_options(list(cli.default_handler = function(...) { })) + + expect_message( + length_log(c("var1", "var2", "var3"), "message"), + "Problem with `var1`.*`var2`.*`var3`" + ) +}) + test_that("Logs names of missed variables", { + # Prevent CLI messages + withr::local_options(cli.user_theme = test_cli_theme) + + # Catch CLI messages + label_log(c("var1", "var2", "var3"), "none") %>% + expect_message("Variable labels missing from metadata.") %>% + expect_message("3 labels skipped") # Prevent CLI messages withr::local_options(list(cli.default_handler = function(...) { })) @@ -29,9 +58,22 @@ test_that("Logs names of missed variables", { }) test_that("Variables reorderd message", { + # Prevent CLI messages + withr::local_options(cli.user_theme = test_cli_theme) + + # Catch CLI messages moved_vars <- c("var1", "var2", "var3") message_regexp <- "Variable reordered in.+`var1`.+`var2`.+`var3`$" + var_ord_msg(moved_vars, "none") %>% + expect_message("3 variables not in spec and moved to end") + + var_ord_msg(c(), "none") %>% + expect_message("All variables in specification file are in dataset") + + # Prevent CLI messages + withr::local_options(list(cli.default_handler = function(...) { })) + expect_message( var_ord_msg(moved_vars, "message"), regexp = message_regexp @@ -42,3 +84,29 @@ test_that("Variables reorderd message", { regexp = message_regexp ) }) + +test_that("Tidy names rename messages", { + # Prevent CLI messages + withr::local_options(cli.user_theme = test_cli_theme) + + tidy_names_df <- dplyr::tibble( + original_varname = c("var1", "var2", "var3", "var4", "VAR5", "VAR6"), + renamed_var = c("VAR1", "VAR2", "VAR3", "VAR4", "VAR5", "VAR6"), + col_pos = seq(1, 6), + renamed_msg = glue::glue("renamed message {seq(1, 6)}"), + renamed_n = 0 + ) + + tidy_names_df %>% + dplyr::mutate( + renamed_n = c(2, sample(c(0, 1, 2), size = NROW(.data$renamed_n) - 1, replace = TRUE)) + ) %>% + var_names_log("message") %>% + expect_message(".*[0-9]+ of [0-9]+ \\([0-9]+(\\.[0-9]+)%\\) variables were renamed.*") %>% + expect_message("Var . : '.*' was renamed to '.*'") %>% + expect_message("Var . : '.*' was renamed to '.*'") %>% + expect_message("Var . : '.*' was renamed to '.*'") %>% + expect_message("Var . : '.*' was renamed to '.*'") %>% + expect_message("Duplicate renamed term\\(s\\) were created") +}) + From 9cf0aa5ac74b6de0a9a6cf168e134787eeb0f405 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 19 Apr 2023 15:19:43 +0200 Subject: [PATCH 041/337] consistency expect calls and reverts removing trailing whitespaces --- R/messages.R | 2 -- tests/testthat/test-messages.R | 33 +++++++++++++++------------------ 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/R/messages.R b/R/messages.R index cdf26566..c6ac9477 100644 --- a/R/messages.R +++ b/R/messages.R @@ -1,4 +1,3 @@ - #' Utility Logging Function #' #' Functions to output user messages, usually relating to differences @@ -78,7 +77,6 @@ var_names_log <- function(tidy_names_df, verbose) { #' @return Output to Console #' @export type_log <- function(meta_ordered, type_mismatch_ind, verbose) { - if (length(type_mismatch_ind) > 0) { message <- glue( diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index bce15506..5045e4c8 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -33,10 +33,8 @@ test_that("Length", { # Prevent CLI messages withr::local_options(list(cli.default_handler = function(...) { })) - expect_message( - length_log(c("var1", "var2", "var3"), "message"), - "Problem with `var1`.*`var2`.*`var3`" - ) + length_log(c("var1", "var2", "var3"), "message") %>% + expect_message("Problem with `var1`.*`var2`.*`var3`") }) test_that("Logs names of missed variables", { @@ -51,10 +49,8 @@ test_that("Logs names of missed variables", { # Prevent CLI messages withr::local_options(list(cli.default_handler = function(...) { })) - expect_message( - label_log(c("var1", "var2", "var3"), "message"), - "Problem with `var1`.*`var2`.*`var3`" - ) + label_log(c("var1", "var2", "var3"), "message") %>% + expect_message("Problem with `var1`.*`var2`.*`var3`") }) test_that("Variables reorderd message", { @@ -74,15 +70,11 @@ test_that("Variables reorderd message", { # Prevent CLI messages withr::local_options(list(cli.default_handler = function(...) { })) - expect_message( - var_ord_msg(moved_vars, "message"), - regexp = message_regexp - ) + var_ord_msg(moved_vars, "message") %>% + expect_message(message_regexp) - expect_error( - var_ord_msg(moved_vars, "stop"), - regexp = message_regexp - ) + var_ord_msg(moved_vars, "stop") %>% + expect_error(message_regexp) }) test_that("Tidy names rename messages", { @@ -99,10 +91,15 @@ test_that("Tidy names rename messages", { tidy_names_df %>% dplyr::mutate( - renamed_n = c(2, sample(c(0, 1, 2), size = NROW(.data$renamed_n) - 1, replace = TRUE)) + renamed_n = c( + 2, + sample(c(0, 1, 2), size = NROW(.data$renamed_n) - 1, replace = TRUE) + ) ) %>% var_names_log("message") %>% - expect_message(".*[0-9]+ of [0-9]+ \\([0-9]+(\\.[0-9]+)%\\) variables were renamed.*") %>% + expect_message( + ".*[0-9]+ of [0-9]+ \\([0-9]+(\\.[0-9]+)%\\) variables were renamed.*" + ) %>% expect_message("Var . : '.*' was renamed to '.*'") %>% expect_message("Var . : '.*' was renamed to '.*'") %>% expect_message("Var . : '.*' was renamed to '.*'") %>% From 17c3610de70ef798fd0fcda802bdcf35707567b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 19 Apr 2023 15:21:31 +0200 Subject: [PATCH 042/337] revert a couple more whitespaces --- R/messages.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/messages.R b/R/messages.R index c6ac9477..07a97a78 100644 --- a/R/messages.R +++ b/R/messages.R @@ -1,5 +1,5 @@ #' Utility Logging Function -#' +#' #' Functions to output user messages, usually relating to differences #' found between dataframe and the metacore/metadata object #' @@ -10,7 +10,7 @@ #' @return Output to Console #' @export xportr_logger <- function(message, type = "none", ...) { - + log_fun <- switch(type, stop = abort, warn = warn, @@ -18,7 +18,7 @@ xportr_logger <- function(message, type = "none", ...) { return()) do.call(log_fun, list(message, ...)) - + } #' Utility for Renaming Variables @@ -104,7 +104,7 @@ length_log <- function(miss_vars, verbose) { cli_h2("Variable lengths missing from metadata.") cli_alert_success("{ length(miss_vars) } lengths resolved") - + xportr_logger( glue::glue( "Variable(s) present in dataframe but doesn't exist in `metadata`.", From 074bbbcb4824ed6227a95388ee33eff9dde70a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 19 Apr 2023 17:19:20 +0200 Subject: [PATCH 043/337] Mock cli_* functions to create clean output in tests --- DESCRIPTION | 1 + R/messages.R | 4 +- tests/testthat/helper-mock_bindings.R | 4 ++ tests/testthat/test-messages.R | 75 +++++++++++---------------- 4 files changed, 38 insertions(+), 46 deletions(-) create mode 100644 tests/testthat/helper-mock_bindings.R diff --git a/DESCRIPTION b/DESCRIPTION index c6f92af3..587a4d4f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -63,5 +63,6 @@ Suggests: lintr, styler, metacore + mockery Config/testthat/edition: 3 VignetteBuilder: knitr diff --git a/R/messages.R b/R/messages.R index 07a97a78..b38ffaac 100644 --- a/R/messages.R +++ b/R/messages.R @@ -41,7 +41,7 @@ var_names_log <- function(tidy_names_df, verbose) { num_renamed <- nrow(only_renames) tot_num_vars <- nrow(tidy_names_df) - cli::cli_h2(glue::glue( + cli_h2(glue::glue( .sep = " ", "{num_renamed} of {tot_num_vars}", "({round(100*(num_renamed/tot_num_vars), 1)}%)", @@ -57,7 +57,7 @@ var_names_log <- function(tidy_names_df, verbose) { # this is impossible) but good to have a check none-the-less. dups <- tidy_names_df %>% filter(renamed_n > 1) if (nrow(dups) != 0) { - cli::cli_alert_danger( + cli_alert_danger( glue::glue( .sep = " ", "Duplicate renamed term(s) were created.", diff --git a/tests/testthat/helper-mock_bindings.R b/tests/testthat/helper-mock_bindings.R new file mode 100644 index 00000000..1f99c1a6 --- /dev/null +++ b/tests/testthat/helper-mock_bindings.R @@ -0,0 +1,4 @@ +# function that can be used with mockery::stub to mock cli messages +cli_mocked_fun <- function(text, ...) { + xportr_logger(text, "message") +} \ No newline at end of file diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index 5045e4c8..ddbb5b67 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -1,7 +1,8 @@ -test_cli_theme <- list( - cli.user_theme = list(h2 = list(`margin-top` = 0, `margin-bottom` = 0)) -) - +#' Test `R/messages.R` functions +#' +#' Helper functions / data (from ÂŽtest/testthat/helper-mock_bindings.RÂŽ): +#' * \code{cli_mocked_fun} : function to replace `cli_\*()` calls functions +#' to avoid styling from theme and unnecessary empty lines test_that("Type parameter will create correct messages", { xportr_logger("A message", type = "none") %>% @@ -21,65 +22,51 @@ test_that("Type parameter will create correct messages", { expect_error("A message", class = "rlang_error") }) -test_that("Length", { - # Prevent CLI messages - withr::local_options(cli.user_theme = test_cli_theme) - - # Catch CLI messages - length_log(c("var1", "var2", "var3"), "none") %>% - expect_message("Variable lengths missing from metadata.") %>% - expect_message("3 lengths resolved") - - # Prevent CLI messages - withr::local_options(list(cli.default_handler = function(...) { })) - +test_that("Length are missing messages using `lenght_log`", { + # Prevent CLI messages by using local xportr_logger instead + mockery::stub(length_log, "cli_h2", cli_mocked_fun) + mockery::stub(length_log, "cli_alert_success", cli_mocked_fun) + length_log(c("var1", "var2", "var3"), "message") %>% + expect_message("Variable lengths missing from metadata.") %>% + expect_message("lengths resolved") %>% expect_message("Problem with `var1`.*`var2`.*`var3`") }) test_that("Logs names of missed variables", { - # Prevent CLI messages - withr::local_options(cli.user_theme = test_cli_theme) - - # Catch CLI messages - label_log(c("var1", "var2", "var3"), "none") %>% - expect_message("Variable labels missing from metadata.") %>% - expect_message("3 labels skipped") - - # Prevent CLI messages - withr::local_options(list(cli.default_handler = function(...) { })) - + # Prevent CLI messages by using local xportr_logger instead + mockery::stub(label_log, "cli_h2", cli_mocked_fun) + mockery::stub(label_log, "cli_alert_success", cli_mocked_fun) + label_log(c("var1", "var2", "var3"), "message") %>% + # cli messages + expect_message("Variable labels missing from metadata.") %>% + expect_message("labels skipped") %>% + # xportr_logger messages expect_message("Problem with `var1`.*`var2`.*`var3`") }) test_that("Variables reorderd message", { - # Prevent CLI messages - withr::local_options(cli.user_theme = test_cli_theme) - - # Catch CLI messages + # Prevent CLI messages by using local xportr_logger instead + mockery::stub(var_ord_msg, "cli_h2", cli_mocked_fun) + mockery::stub(var_ord_msg, "cli_alert_success", cli_mocked_fun) + moved_vars <- c("var1", "var2", "var3") message_regexp <- "Variable reordered in.+`var1`.+`var2`.+`var3`$" - var_ord_msg(moved_vars, "none") %>% - expect_message("3 variables not in spec and moved to end") - - var_ord_msg(c(), "none") %>% - expect_message("All variables in specification file are in dataset") - - # Prevent CLI messages - withr::local_options(list(cli.default_handler = function(...) { })) - var_ord_msg(moved_vars, "message") %>% + expect_message("variables not in spec and moved to end") %>% expect_message(message_regexp) - var_ord_msg(moved_vars, "stop") %>% - expect_error(message_regexp) + var_ord_msg(c(), "message") %>% + expect_message("All variables in specification file are in dataset") }) test_that("Tidy names rename messages", { - # Prevent CLI messages - withr::local_options(cli.user_theme = test_cli_theme) + # Prevent CLI messages by using local xportr_logger instead + mockery::stub(var_names_log, "cli_h2", cli_mocked_fun) + mockery::stub(var_names_log, "cli_alert_success", cli_mocked_fun) + mockery::stub(var_names_log, "cli_alert_danger", cli_mocked_fun) tidy_names_df <- dplyr::tibble( original_varname = c("var1", "var2", "var3", "var4", "VAR5", "VAR6"), From e9669cb20f5db3739088db5b8bf3975533364b6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 19 Apr 2023 23:51:14 +0200 Subject: [PATCH 044/337] use function without package namespace to follow pkg convention --- NAMESPACE | 2 ++ R/messages.R | 10 ++++----- R/xportr-package.R | 6 +++--- tests/testthat/test-messages.R | 39 ++++++++++++++++++++-------------- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index 3a261d6b..9b83ed5f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -15,6 +15,7 @@ export(xportr_type) export(xportr_write) import(haven) import(rlang) +importFrom(cli,cli_alert_danger) importFrom(cli,cli_alert_info) importFrom(cli,cli_alert_success) importFrom(cli,cli_div) @@ -47,6 +48,7 @@ importFrom(purrr,map2_chr) importFrom(purrr,map_chr) importFrom(purrr,map_dbl) importFrom(purrr,pluck) +importFrom(purrr,walk) importFrom(purrr,walk2) importFrom(readr,parse_number) importFrom(stringr,str_detect) diff --git a/R/messages.R b/R/messages.R index b38ffaac..15f22e95 100644 --- a/R/messages.R +++ b/R/messages.R @@ -32,7 +32,7 @@ var_names_log <- function(tidy_names_df, verbose) { only_renames <- tidy_names_df %>% filter(original_varname != renamed_var) %>% mutate( - renamed_msg = glue::glue( + renamed_msg = glue( "Var {col_pos} : '{original_varname}' was renamed to 'renamed_var'" ) ) @@ -41,7 +41,7 @@ var_names_log <- function(tidy_names_df, verbose) { num_renamed <- nrow(only_renames) tot_num_vars <- nrow(tidy_names_df) - cli_h2(glue::glue( + cli_h2(glue( .sep = " ", "{num_renamed} of {tot_num_vars}", "({round(100*(num_renamed/tot_num_vars), 1)}%)", @@ -50,7 +50,7 @@ var_names_log <- function(tidy_names_df, verbose) { # Message stating any renamed variables each original variable and it's new name if (nrow(only_renames) > 0) { - purrr::walk(only_renames$renamed_msg, ~xportr_logger(.x, verbose)) + walk(only_renames$renamed_msg, ~xportr_logger(.x, verbose)) } # Message checking for duplicate variable names after renamed (Pretty sure @@ -58,7 +58,7 @@ var_names_log <- function(tidy_names_df, verbose) { dups <- tidy_names_df %>% filter(renamed_n > 1) if (nrow(dups) != 0) { cli_alert_danger( - glue::glue( + glue( .sep = " ", "Duplicate renamed term(s) were created.", "Consider creating dictionary terms for:", @@ -106,7 +106,7 @@ length_log <- function(miss_vars, verbose) { cli_alert_success("{ length(miss_vars) } lengths resolved") xportr_logger( - glue::glue( + glue( "Variable(s) present in dataframe but doesn't exist in `metadata`.", "Problem with {encode_vars(miss_vars)}" ), diff --git a/R/xportr-package.R b/R/xportr-package.R index b075d78c..de83e640 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -9,13 +9,13 @@ #' everything arrange group_by summarize mutate ungroup case_when distinct #' tribble all_of #' @importFrom glue glue glue_collapse -#' @importFrom cli cli_alert_info cli_h2 cli_alert_success cli_alert_info -#' cli_div cli_alert_success cli_text cli_h2 +#' @importFrom cli cli_alert_info cli_h2 cli_alert_success cli_div cli_text +#' cli_alert_danger #' @importFrom tidyselect all_of any_of #' @importFrom utils capture.output str tail packageVersion #' @importFrom stringr str_detect str_extract str_replace str_replace_all #' @importFrom readr parse_number -#' @importFrom purrr map_chr map2_chr walk2 map map_dbl pluck +#' @importFrom purrr map_chr map2_chr walk walk2 map map_dbl pluck #' @importFrom janitor make_clean_names #' @importFrom tm stemDocument #' @importFrom graphics stem diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index ddbb5b67..36c0170c 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -4,7 +4,6 @@ #' * \code{cli_mocked_fun} : function to replace `cli_\*()` calls functions #' to avoid styling from theme and unnecessary empty lines test_that("Type parameter will create correct messages", { - xportr_logger("A message", type = "none") %>% expect_silent() @@ -23,9 +22,11 @@ test_that("Type parameter will create correct messages", { }) test_that("Length are missing messages using `lenght_log`", { - # Prevent CLI messages by using local xportr_logger instead - mockery::stub(length_log, "cli_h2", cli_mocked_fun) - mockery::stub(length_log, "cli_alert_success", cli_mocked_fun) + if (require(mockery, quietly = TRUE)) { + # Prevent CLI messages by using local xportr_logger instead + stub(length_log, "cli_h2", cli_mocked_fun) + stub(length_log, "cli_alert_success", cli_mocked_fun) + } length_log(c("var1", "var2", "var3"), "message") %>% expect_message("Variable lengths missing from metadata.") %>% @@ -34,9 +35,11 @@ test_that("Length are missing messages using `lenght_log`", { }) test_that("Logs names of missed variables", { - # Prevent CLI messages by using local xportr_logger instead - mockery::stub(label_log, "cli_h2", cli_mocked_fun) - mockery::stub(label_log, "cli_alert_success", cli_mocked_fun) + if (require(mockery, quietly = TRUE)) { + # Prevent CLI messages by using local xportr_logger instead + stub(label_log, "cli_h2", cli_mocked_fun) + stub(label_log, "cli_alert_success", cli_mocked_fun) + } label_log(c("var1", "var2", "var3"), "message") %>% # cli messages @@ -47,9 +50,11 @@ test_that("Logs names of missed variables", { }) test_that("Variables reorderd message", { - # Prevent CLI messages by using local xportr_logger instead - mockery::stub(var_ord_msg, "cli_h2", cli_mocked_fun) - mockery::stub(var_ord_msg, "cli_alert_success", cli_mocked_fun) + if (require(mockery, quietly = TRUE)) { + # Prevent CLI messages by using local xportr_logger instead + stub(var_ord_msg, "cli_h2", cli_mocked_fun) + stub(var_ord_msg, "cli_alert_success", cli_mocked_fun) + } moved_vars <- c("var1", "var2", "var3") message_regexp <- "Variable reordered in.+`var1`.+`var2`.+`var3`$" @@ -63,21 +68,23 @@ test_that("Variables reorderd message", { }) test_that("Tidy names rename messages", { - # Prevent CLI messages by using local xportr_logger instead - mockery::stub(var_names_log, "cli_h2", cli_mocked_fun) - mockery::stub(var_names_log, "cli_alert_success", cli_mocked_fun) - mockery::stub(var_names_log, "cli_alert_danger", cli_mocked_fun) + if (require(mockery, quietly = TRUE)) { + # Prevent CLI messages by using local xportr_logger instead + stub(var_names_log, "cli_h2", cli_mocked_fun) + stub(var_names_log, "cli_alert_success", cli_mocked_fun) + stub(var_names_log, "cli_alert_danger", cli_mocked_fun) + } tidy_names_df <- dplyr::tibble( original_varname = c("var1", "var2", "var3", "var4", "VAR5", "VAR6"), renamed_var = c("VAR1", "VAR2", "VAR3", "VAR4", "VAR5", "VAR6"), col_pos = seq(1, 6), - renamed_msg = glue::glue("renamed message {seq(1, 6)}"), + renamed_msg = glue("renamed message {seq(1, 6)}"), renamed_n = 0 ) tidy_names_df %>% - dplyr::mutate( + mutate( renamed_n = c( 2, sample(c(0, 1, 2), size = NROW(.data$renamed_n) - 1, replace = TRUE) From ee8188d1d2f0d578ab9afc3caf0aea896da77efc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:34:34 +0200 Subject: [PATCH 045/337] improves on test names --- tests/testthat/test-messages.R | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index 36c0170c..5fdda2a5 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -3,7 +3,7 @@ #' Helper functions / data (from ÂŽtest/testthat/helper-mock_bindings.RÂŽ): #' * \code{cli_mocked_fun} : function to replace `cli_\*()` calls functions #' to avoid styling from theme and unnecessary empty lines -test_that("Type parameter will create correct messages", { +test_that("[xportr_logger()] Type parameter will create correct message type", { xportr_logger("A message", type = "none") %>% expect_silent() @@ -21,7 +21,7 @@ test_that("Type parameter will create correct messages", { expect_error("A message", class = "rlang_error") }) -test_that("Length are missing messages using `lenght_log`", { +test_that("[length_log()] Missing lengths messages are shown", { if (require(mockery, quietly = TRUE)) { # Prevent CLI messages by using local xportr_logger instead stub(length_log, "cli_h2", cli_mocked_fun) @@ -34,7 +34,7 @@ test_that("Length are missing messages using `lenght_log`", { expect_message("Problem with `var1`.*`var2`.*`var3`") }) -test_that("Logs names of missed variables", { +test_that("[length_log()] Missing variables messages are shown", { if (require(mockery, quietly = TRUE)) { # Prevent CLI messages by using local xportr_logger instead stub(label_log, "cli_h2", cli_mocked_fun) @@ -49,7 +49,7 @@ test_that("Logs names of missed variables", { expect_message("Problem with `var1`.*`var2`.*`var3`") }) -test_that("Variables reorderd message", { +test_that("[var_ord_msg()] Reordered variables messages are shown", { if (require(mockery, quietly = TRUE)) { # Prevent CLI messages by using local xportr_logger instead stub(var_ord_msg, "cli_h2", cli_mocked_fun) @@ -67,7 +67,7 @@ test_that("Variables reorderd message", { expect_message("All variables in specification file are in dataset") }) -test_that("Tidy names rename messages", { +test_that("[var_names_log()] Renamed variables messages are shown", { if (require(mockery, quietly = TRUE)) { # Prevent CLI messages by using local xportr_logger instead stub(var_names_log, "cli_h2", cli_mocked_fun) From 4f427f45c6abed89167af59ebca376bd9bcfb1a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 21 Apr 2023 11:31:52 +0200 Subject: [PATCH 046/337] replace dplyr::tibble with data.frame --- tests/testthat/test-messages.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index 5fdda2a5..38666ed1 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -75,7 +75,7 @@ test_that("[var_names_log()] Renamed variables messages are shown", { stub(var_names_log, "cli_alert_danger", cli_mocked_fun) } - tidy_names_df <- dplyr::tibble( + tidy_names_df <- data.frame( original_varname = c("var1", "var2", "var3", "var4", "VAR5", "VAR6"), renamed_var = c("VAR1", "VAR2", "VAR3", "VAR4", "VAR5", "VAR6"), col_pos = seq(1, 6), From ef33801259424b4720bbd0341deb652020bd0d0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 26 Apr 2023 00:34:15 +0200 Subject: [PATCH 047/337] corrects linter problems --- tests/testthat/helper-mock_bindings.R | 2 +- tests/testthat/test-messages.R | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/tests/testthat/helper-mock_bindings.R b/tests/testthat/helper-mock_bindings.R index 1f99c1a6..9d1de7cb 100644 --- a/tests/testthat/helper-mock_bindings.R +++ b/tests/testthat/helper-mock_bindings.R @@ -1,4 +1,4 @@ # function that can be used with mockery::stub to mock cli messages cli_mocked_fun <- function(text, ...) { xportr_logger(text, "message") -} \ No newline at end of file +} diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index 38666ed1..10c05bbe 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -1,5 +1,5 @@ #' Test `R/messages.R` functions -#' +#' #' Helper functions / data (from ÂŽtest/testthat/helper-mock_bindings.RÂŽ): #' * \code{cli_mocked_fun} : function to replace `cli_\*()` calls functions #' to avoid styling from theme and unnecessary empty lines @@ -27,10 +27,10 @@ test_that("[length_log()] Missing lengths messages are shown", { stub(length_log, "cli_h2", cli_mocked_fun) stub(length_log, "cli_alert_success", cli_mocked_fun) } - + length_log(c("var1", "var2", "var3"), "message") %>% expect_message("Variable lengths missing from metadata.") %>% - expect_message("lengths resolved") %>% + expect_message("lengths resolved") %>% expect_message("Problem with `var1`.*`var2`.*`var3`") }) @@ -40,11 +40,11 @@ test_that("[length_log()] Missing variables messages are shown", { stub(label_log, "cli_h2", cli_mocked_fun) stub(label_log, "cli_alert_success", cli_mocked_fun) } - + label_log(c("var1", "var2", "var3"), "message") %>% # cli messages expect_message("Variable labels missing from metadata.") %>% - expect_message("labels skipped") %>% + expect_message("labels skipped") %>% # xportr_logger messages expect_message("Problem with `var1`.*`var2`.*`var3`") }) @@ -55,12 +55,12 @@ test_that("[var_ord_msg()] Reordered variables messages are shown", { stub(var_ord_msg, "cli_h2", cli_mocked_fun) stub(var_ord_msg, "cli_alert_success", cli_mocked_fun) } - + moved_vars <- c("var1", "var2", "var3") message_regexp <- "Variable reordered in.+`var1`.+`var2`.+`var3`$" var_ord_msg(moved_vars, "message") %>% - expect_message("variables not in spec and moved to end") %>% + expect_message("variables not in spec and moved to end") %>% expect_message(message_regexp) var_ord_msg(c(), "message") %>% @@ -100,4 +100,3 @@ test_that("[var_names_log()] Renamed variables messages are shown", { expect_message("Var . : '.*' was renamed to '.*'") %>% expect_message("Duplicate renamed term\\(s\\) were created") }) - From be2d26313b01ef2df909b939b2d8e6b3d84747bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 26 Apr 2023 00:47:18 +0200 Subject: [PATCH 048/337] cleanup after rebase --- DESCRIPTION | 1 - R/messages.R | 14 ++++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 587a4d4f..c6f92af3 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -63,6 +63,5 @@ Suggests: lintr, styler, metacore - mockery Config/testthat/edition: 3 VignetteBuilder: knitr diff --git a/R/messages.R b/R/messages.R index 15f22e95..c5df0da4 100644 --- a/R/messages.R +++ b/R/messages.R @@ -1,5 +1,5 @@ #' Utility Logging Function -#' +#' #' Functions to output user messages, usually relating to differences #' found between dataframe and the metacore/metadata object #' @@ -10,7 +10,7 @@ #' @return Output to Console #' @export xportr_logger <- function(message, type = "none", ...) { - + log_fun <- switch(type, stop = abort, warn = warn, @@ -18,7 +18,7 @@ xportr_logger <- function(message, type = "none", ...) { return()) do.call(log_fun, list(message, ...)) - + } #' Utility for Renaming Variables @@ -29,6 +29,7 @@ xportr_logger <- function(message, type = "none", ...) { #' @return Output to Console #' @export var_names_log <- function(tidy_names_df, verbose) { + only_renames <- tidy_names_df %>% filter(original_varname != renamed_var) %>% mutate( @@ -77,6 +78,7 @@ var_names_log <- function(tidy_names_df, verbose) { #' @return Output to Console #' @export type_log <- function(meta_ordered, type_mismatch_ind, verbose) { + if (length(type_mismatch_ind) > 0) { message <- glue( @@ -104,7 +106,7 @@ length_log <- function(miss_vars, verbose) { cli_h2("Variable lengths missing from metadata.") cli_alert_success("{ length(miss_vars) } lengths resolved") - + xportr_logger( glue( "Variable(s) present in dataframe but doesn't exist in `metadata`.", @@ -123,6 +125,7 @@ length_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export label_log <- function(miss_vars, verbose) { + if (length(miss_vars) > 0) { cli_h2("Variable labels missing from metadata.") @@ -136,7 +139,6 @@ label_log <- function(miss_vars, verbose) { } } - #' Utility for Ordering #' #' @param moved_vars Variables moved in the dataset @@ -145,6 +147,7 @@ label_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export var_ord_msg <- function(moved_vars, verbose) { + if (length(moved_vars) > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") message <- glue( @@ -154,5 +157,4 @@ var_ord_msg <- function(moved_vars, verbose) { } else { cli_h2("All variables in specification file are in dataset") } - } From af72bf27538bd22b669d9a157461cf3e11a6e520 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 26 Apr 2023 00:50:40 +0200 Subject: [PATCH 049/337] remove mockery dependency and cleanup test names --- tests/testthat/helper-mock_bindings.R | 4 --- tests/testthat/test-messages.R | 52 ++++++++++++--------------- 2 files changed, 22 insertions(+), 34 deletions(-) delete mode 100644 tests/testthat/helper-mock_bindings.R diff --git a/tests/testthat/helper-mock_bindings.R b/tests/testthat/helper-mock_bindings.R deleted file mode 100644 index 9d1de7cb..00000000 --- a/tests/testthat/helper-mock_bindings.R +++ /dev/null @@ -1,4 +0,0 @@ -# function that can be used with mockery::stub to mock cli messages -cli_mocked_fun <- function(text, ...) { - xportr_logger(text, "message") -} diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index 10c05bbe..0a82f239 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -1,9 +1,6 @@ #' Test `R/messages.R` functions -#' -#' Helper functions / data (from ÂŽtest/testthat/helper-mock_bindings.RÂŽ): -#' * \code{cli_mocked_fun} : function to replace `cli_\*()` calls functions -#' to avoid styling from theme and unnecessary empty lines -test_that("[xportr_logger()] Type parameter will create correct message type", { + +test_that("xportr_logger: Type parameter will create correct message type", { xportr_logger("A message", type = "none") %>% expect_silent() @@ -21,12 +18,11 @@ test_that("[xportr_logger()] Type parameter will create correct message type", { expect_error("A message", class = "rlang_error") }) -test_that("[length_log()] Missing lengths messages are shown", { - if (require(mockery, quietly = TRUE)) { - # Prevent CLI messages by using local xportr_logger instead - stub(length_log, "cli_h2", cli_mocked_fun) - stub(length_log, "cli_alert_success", cli_mocked_fun) - } +test_that("length_log: Missing lengths messages are shown", { + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) length_log(c("var1", "var2", "var3"), "message") %>% expect_message("Variable lengths missing from metadata.") %>% @@ -34,12 +30,11 @@ test_that("[length_log()] Missing lengths messages are shown", { expect_message("Problem with `var1`.*`var2`.*`var3`") }) -test_that("[length_log()] Missing variables messages are shown", { - if (require(mockery, quietly = TRUE)) { - # Prevent CLI messages by using local xportr_logger instead - stub(label_log, "cli_h2", cli_mocked_fun) - stub(label_log, "cli_alert_success", cli_mocked_fun) - } +test_that("length_log: Missing variables messages are shown", { + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) label_log(c("var1", "var2", "var3"), "message") %>% # cli messages @@ -49,12 +44,11 @@ test_that("[length_log()] Missing variables messages are shown", { expect_message("Problem with `var1`.*`var2`.*`var3`") }) -test_that("[var_ord_msg()] Reordered variables messages are shown", { - if (require(mockery, quietly = TRUE)) { - # Prevent CLI messages by using local xportr_logger instead - stub(var_ord_msg, "cli_h2", cli_mocked_fun) - stub(var_ord_msg, "cli_alert_success", cli_mocked_fun) - } +test_that("var_ord_msg: Reordered variables messages are shown", { + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) moved_vars <- c("var1", "var2", "var3") message_regexp <- "Variable reordered in.+`var1`.+`var2`.+`var3`$" @@ -67,13 +61,11 @@ test_that("[var_ord_msg()] Reordered variables messages are shown", { expect_message("All variables in specification file are in dataset") }) -test_that("[var_names_log()] Renamed variables messages are shown", { - if (require(mockery, quietly = TRUE)) { - # Prevent CLI messages by using local xportr_logger instead - stub(var_names_log, "cli_h2", cli_mocked_fun) - stub(var_names_log, "cli_alert_success", cli_mocked_fun) - stub(var_names_log, "cli_alert_danger", cli_mocked_fun) - } +test_that("var_names_log: Renamed variables messages are shown", { + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) tidy_names_df <- data.frame( original_varname = c("var1", "var2", "var3", "var4", "VAR5", "VAR6"), From 26e549730f307650fe06676b9587c5fe1e237c9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 26 Apr 2023 01:14:47 +0200 Subject: [PATCH 050/337] change format according to tidyverse style --- R/messages.R | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/R/messages.R b/R/messages.R index c5df0da4..37d0b9a4 100644 --- a/R/messages.R +++ b/R/messages.R @@ -11,11 +11,13 @@ #' @export xportr_logger <- function(message, type = "none", ...) { - log_fun <- switch(type, - stop = abort, - warn = warn, - message = inform, - return()) + log_fun <- switch( + type, + stop = abort, + warn = warn, + message = inform, + return() + ) do.call(log_fun, list(message, ...)) From 411bd4e4bc39428b872b013fa8a085c59ab23962 Mon Sep 17 00:00:00 2001 From: vedhav Date: Wed, 26 Apr 2023 10:48:46 +0530 Subject: [PATCH 051/337] skipping metacore related tests if it is not installed --- tests/testthat/test-metadata.R | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 939cd5cd..1d07bc1b 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -1,7 +1,3 @@ -suppressWarnings({ - library(metacore) -}) - extract_format <- function(.x) { format_ <- character(length(.x)) for (i in seq_along(.x)) { @@ -77,9 +73,10 @@ test_that("xportr_label Test 3: Correctly apply label for custom domain", { }) test_that("xportr_label Test 4: Correctly apply label for metacore spec", { + skip_if_not_installed("metacore") df <- data.frame(x = "a", y = "b", variable = "value") metacore_meta <- suppressWarnings( - metacore( + metacore::metacore( var_spec = data.frame( variable = c("x", "y"), type = "text", @@ -197,9 +194,10 @@ test_that("xportr_df_label Test 3: Correctly apply label for custom domain", { }) test_that("xportr_df_label Test 4: Correctly apply label for metacore spec", { + skip_if_not_installed("metacore") df <- data.frame(x = "a", y = "b") metacore_meta <- suppressWarnings( - metacore( + metacore::metacore( ds_spec = data.frame( dataset = c("df"), structure = "", @@ -292,9 +290,10 @@ test_that("xportr_format Test 2: Set formats as expected when data is piped", { }) test_that("xportr_format Test 3: Set formats as expected for metacore spec", { + skip_if_not_installed("metacore") df <- data.frame(x = 1, y = 2) metacore_meta <- suppressWarnings( - metacore( + metacore::metacore( var_spec = data.frame( variable = c("x", "y"), type = "text", @@ -421,9 +420,10 @@ test_that("xportr_length Test 2: Check if width attribute is set properly when d }) test_that("xportr_length Test 3: Check if width attribute is set properly for metacore spec", { + skip_if_not_installed("metacore") df <- data.frame(x = "a", y = "b") metacore_meta <- suppressWarnings( - metacore( + metacore::metacore( var_spec = data.frame( variable = c("x", "y"), type = "text", From dacb1056e21ed416a0812773672def34a8191da0 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 27 Apr 2023 19:58:39 +0530 Subject: [PATCH 052/337] chore: fix test labels as per the contributing guidelines --- tests/testthat/test-metadata.R | 52 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 1d07bc1b..921ab2d8 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -10,7 +10,7 @@ extract_var_label <- function(.x) { vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) } -test_that("xportr_label Test 1: Correctly apply label for data.frame spec", { +test_that("xportr_label: Correctly applies label for data.frame spec", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", variable = c("x", "y"), label = c("foo", "bar")) @@ -30,7 +30,7 @@ test_that("xportr_label Test 1: Correctly apply label for data.frame spec", { ) }) -test_that("xportr_label Test 2: Correctly apply label when data is piped", { +test_that("xportr_label: Correctly applies label when data is piped", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", variable = c("x", "y"), label = c("foo", "bar")) @@ -51,7 +51,7 @@ test_that("xportr_label Test 2: Correctly apply label when data is piped", { ) }) -test_that("xportr_label Test 3: Correctly apply label for custom domain", { +test_that("xportr_label: Correctly applies label for custom domain", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = rep("DOMAIN", 2), variable = c("x", "y"), label = c("foo", "bar")) @@ -72,7 +72,7 @@ test_that("xportr_label Test 3: Correctly apply label for custom domain", { ) }) -test_that("xportr_label Test 4: Correctly apply label for metacore spec", { +test_that("xportr_label: Correctly applies label for metacore spec", { skip_if_not_installed("metacore") df <- data.frame(x = "a", y = "b", variable = "value") metacore_meta <- suppressWarnings( @@ -105,7 +105,7 @@ test_that("xportr_label Test 4: Correctly apply label for metacore spec", { ) }) -test_that("xportr_label Test 5: Expect error if any variable does not exist in metadata", { +test_that("xportr_label: Expect error if any variable does not exist in metadata", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -116,7 +116,7 @@ test_that("xportr_label Test 5: Expect error if any variable does not exist in m expect_error(xportr_label(df, df_meta, verbose = "stop")) }) -test_that("xportr_label Test 6: Expect error if label exceeds 40 characters", { +test_that("xportr_label: Expect error if label exceeds 40 characters", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -130,7 +130,7 @@ test_that("xportr_label Test 6: Expect error if label exceeds 40 characters", { ) }) -test_that("xportr_label Test 7: Expect error if domain is not a character", { +test_that("xportr_label: Expect error if domain is not a character", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -148,7 +148,7 @@ test_that("xportr_label Test 7: Expect error if domain is not a character", { ) }) -test_that("xportr_df_label Test 1: Correctly apply label for data.frame spec", { +test_that("xportr_df_label: Correctly applies label for data.frame spec", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", label = "Label") @@ -161,7 +161,7 @@ test_that("xportr_df_label Test 1: Correctly apply label for data.frame spec", { ) }) -test_that("xportr_df_label Test 2: Correctly apply label when data is piped", { +test_that("xportr_df_label: Correctly applies label when data is piped", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", label = "Label") @@ -177,7 +177,7 @@ test_that("xportr_df_label Test 2: Correctly apply label when data is piped", { ) }) -test_that("xportr_df_label Test 3: Correctly apply label for custom domain", { +test_that("xportr_df_label: Correctly applies label for custom domain", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "DOMAIN", label = "Label") @@ -193,7 +193,7 @@ test_that("xportr_df_label Test 3: Correctly apply label for custom domain", { ) }) -test_that("xportr_df_label Test 4: Correctly apply label for metacore spec", { +test_that("xportr_df_label: Correctly applies label for metacore spec", { skip_if_not_installed("metacore") df <- data.frame(x = "a", y = "b") metacore_meta <- suppressWarnings( @@ -219,7 +219,7 @@ test_that("xportr_df_label Test 4: Correctly apply label for metacore spec", { ) }) -test_that("xportr_df_label Test 5: Expect error if label exceeds 40 characters", { +test_that("xportr_df_label: Expect error if label exceeds 40 characters", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -232,7 +232,7 @@ test_that("xportr_df_label Test 5: Expect error if label exceeds 40 characters", ) }) -test_that("xportr_df_label Test 6: Expect error if domain is not a character", { +test_that("xportr_df_label: Expect error if domain is not a character", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -249,7 +249,7 @@ test_that("xportr_df_label Test 6: Expect error if domain is not a character", { ) }) -test_that("xportr_format Test 1: Set formats as expected", { +test_that("xportr_format: Set formats as expected", { df <- data.frame(x = 1, y = 2) df_meta <- data.frame( dataset = "df", @@ -269,7 +269,7 @@ test_that("xportr_format Test 1: Set formats as expected", { )) }) -test_that("xportr_format Test 2: Set formats as expected when data is piped", { +test_that("xportr_format: Set formats as expected when data is piped", { df <- data.frame(x = 1, y = 2) df_meta <- data.frame( dataset = "df", @@ -289,7 +289,7 @@ test_that("xportr_format Test 2: Set formats as expected when data is piped", { )) }) -test_that("xportr_format Test 3: Set formats as expected for metacore spec", { +test_that("xportr_format: Set formats as expected for metacore spec", { skip_if_not_installed("metacore") df <- data.frame(x = 1, y = 2) metacore_meta <- suppressWarnings( @@ -317,7 +317,7 @@ test_that("xportr_format Test 3: Set formats as expected for metacore spec", { )) }) -test_that("xportr_format Test 4: Set formats as expected for custom domain", { +test_that("xportr_format: Set formats as expected for custom domain", { df <- data.frame(x = 1, y = 2) df_meta <- data.frame( dataset = "DOMAIN", @@ -337,7 +337,7 @@ test_that("xportr_format Test 4: Set formats as expected for custom domain", { )) }) -test_that("xportr_format Test 5: Handle NA values without raising an error", { +test_that("xportr_format: Handle NA values without raising an error", { df <- data.frame(x = 1, y = 2, z = 3, a = 4) df_meta <- data.frame( dataset = rep("df", 4), @@ -359,7 +359,7 @@ test_that("xportr_format Test 5: Handle NA values without raising an error", { )) }) -test_that("xportr_format Test 6: Expect error if domain is not a character", { +test_that("xportr_format: Expect error if domain is not a character", { df <- data.frame(x = 1, y = 2, z = 3, a = 4) df_meta <- data.frame( dataset = "df", @@ -377,7 +377,7 @@ test_that("xportr_format Test 6: Expect error if domain is not a character", { ) }) -test_that("xportr_length Test 1: Check if width attribute is set properly", { +test_that("xportr_length: Check if width attribute is set properly", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -398,7 +398,7 @@ test_that("xportr_length Test 1: Check if width attribute is set properly", { )) }) -test_that("xportr_length Test 2: Check if width attribute is set properly when data is piped", { +test_that("xportr_length: Check if width attribute is set properly when data is piped", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = "df", @@ -419,7 +419,7 @@ test_that("xportr_length Test 2: Check if width attribute is set properly when d )) }) -test_that("xportr_length Test 3: Check if width attribute is set properly for metacore spec", { +test_that("xportr_length: Check if width attribute is set properly for metacore spec", { skip_if_not_installed("metacore") df <- data.frame(x = "a", y = "b") metacore_meta <- suppressWarnings( @@ -447,7 +447,7 @@ test_that("xportr_length Test 3: Check if width attribute is set properly for me )) }) -test_that("xportr_length Test 4: Check if width attribute is set properly when custom domain is passed", { +test_that("xportr_length: Check if width attribute is set properly when custom domain is passed", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame( dataset = rep("DOMAIN", 2), @@ -468,7 +468,7 @@ test_that("xportr_length Test 4: Check if width attribute is set properly when c )) }) -test_that("xportr_length Test 5: Expect error when a variable is not present in metadata", { +test_that("xportr_length: Expect error when a variable is not present in metadata", { df <- data.frame(x = "a", y = "b", z = "c") df_meta <- data.frame( dataset = "df", @@ -480,7 +480,7 @@ test_that("xportr_length Test 5: Expect error when a variable is not present in expect_error(xportr_length(df, df_meta, verbose = "stop"), "doesn't exist") }) -test_that("xportr_length Test 6: Check if length gets imputed when a new variable is passed", { +test_that("xportr_length: Check if length gets imputed when a new variable is passed", { df <- data.frame(x = "a", y = "b", z = 3) df_meta <- data.frame( dataset = "df", @@ -503,7 +503,7 @@ test_that("xportr_length Test 6: Check if length gets imputed when a new variabl )) }) -test_that("xportr_length Test 7: Expect error if domain is not a character", { +test_that("xportr_length: Expect error if domain is not a character", { df <- data.frame(x = "a", y = "b", z = 3) df_meta <- data.frame( dataset = "df", From 6276649a116551e25184947f279ce0846ff47af6 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 27 Apr 2023 20:42:04 +0530 Subject: [PATCH 053/337] feat: adding tests and example for xportr_order() --- R/order.R | 15 ++++++ tests/testthat/test-order.R | 101 ++++++++++++++++++++++++++++-------- 2 files changed, 93 insertions(+), 23 deletions(-) diff --git a/R/order.R b/R/order.R index 0b451258..eabc88dd 100644 --- a/R/order.R +++ b/R/order.R @@ -9,6 +9,21 @@ #' @export #' @return Dataframe that has been re-ordered according to spec #' +#' @examples +#' adsl <- data.frame( +#' BRTHDT = c(1, 1, 2), +#' STUDYID = c("mid987650", "mid987650", "mid987650"), +#' TRT01A = c("Active", "Active", "Placebo"), +#' USUBJID = c(1001, 1002, 1003) +#' ) +#' +#' metacore <- data.frame( +#' dataset = c("adsl", "adsl", "adsl", "adsl"), +#' variable = c("STUDYID", "USUBJID", "TRT01A", "BRTHDT"), +#' order = 1:4 +#' ) +#' +#' adsl <- xportr_order(adsl, metacore) xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.order_verbose", "none")) { domain_name <- getOption("xportr.domain_name") diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index d249431d..df60f54b 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -3,37 +3,92 @@ suppressWarnings({ library(readxl) }) -test_that("Variable are ordered correctly", { +test_that("xportr_order: Variable are ordered correctly for data.frame spec", { + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + df_meta <- data.frame( + dataset = "df", + variable = letters[1:4], + order = 1:4 + ) - ADAE <- read_sas(system.file("extdata", "adae.sas7bdat", package = "xportr")) - met <- read_excel(system.file("specs", "ADaM_spec.xlsx", package = "xportr"), 3) + ordered_df <- xportr_order(df, df_meta) + + expect_equal(names(ordered_df), df_meta$variable) +}) + +test_that("xportr_order: Variable are ordered correctly when data is piped", { + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + df_meta <- data.frame( + dataset = "df", + variable = letters[1:4], + order = 1:4 + ) + + ordered_df <- df %>% + xportr_order(df_meta) %>% + xportr_order(df_meta) + + expect_equal(names(ordered_df), df_meta$variable) +}) + +test_that("xportr_order: Variable are ordered correctly for custom domain", { + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + df_meta <- data.frame( + dataset = "DOMAIN", + variable = letters[1:4], + order = 1:4 + ) - withr::with_options( - list(xportr.order_name = "Order", xportr.variable_name = "Variable"), { - ADAE_xportr <- xportr_order(ADAE, metacore = met, "ADAE", verbose = "none") - } + ordered_df <- xportr_order(df, df_meta, domain = "DOMAIN") + + expect_equal(names(ordered_df), df_meta$variable) +}) + +test_that("xportr_order: Variable are ordered correctly for metacore spec", { + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + ordered_columns <- letters[1:4] + metacore_meta <- suppressWarnings( + metacore::metacore( + ds_vars = data.frame( + dataset = "df", + variable = ordered_columns, + keep = TRUE, + key_seq = NA, + order = 1:4, + core = NA_character_, + supp_flag = NA + ) + ) + ) + + ordered_df <- xportr_order(df, metacore_meta) + + expect_equal(names(ordered_df), ordered_columns) +}) + +test_that("xportr_order: Variable are ordered when custom domain_name is passed", { + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + df_meta <- data.frame( + custom_domain = "df", + variable = letters[1:4], + order = 1:4 ) - - after_names <- c("STUDYID", "USUBJID", "AEDECOD", "AESOC", "AETERM", "AESER", - "ASTDT", "AENDT", "ATOXGR", "TRT01A", "TRT01AN", "SAFFL", "SUBJID", - "WEIGHTBL", "SEX", "AGE", "AGEU", "RACE", "SITEID", "RACEN", - "ASTTM", "ADURC", "AEACN", "AEOUT", "AEREL", "ATOXGRN", "AFTRTSTC", - "AEWDFL") - - expect_equal(names(ADAE_xportr), after_names) + + ordered_df <- xportr_order(df, df_meta, domain = "df") + + expect_equal(names(ordered_df), df_meta$variable) }) test_that("Domain not in character format", { - ADAE <- read_sas(system.file("extdata", "adae.sas7bdat", package = "xportr")) met <- read_excel(system.file("specs", "ADaM_spec.xlsx", package = "xportr"), 3) - + expect_error( withr::with_options( - list(xportr.order_name = "Order", xportr.variable_name = "Variable"), { - ADAE_xportr <- xportr_order(ADAE, metacore = met, domain = ADAE, verbose = "none") - } - )) - - + list(xportr.order_name = "Order", xportr.variable_name = "Variable"), + { + ADAE_xportr <- xportr_order(ADAE, metacore = met, domain = ADAE, verbose = "none") + } + ) + ) }) From 31808bf94742ab4479e8f9a6cdb950b1e68db342 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 27 Apr 2023 20:46:10 +0530 Subject: [PATCH 054/337] docs: update document with example for xportr_order --- NAMESPACE | 1 + man/xportr_order.Rd | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/NAMESPACE b/NAMESPACE index 3a261d6b..90b9880b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -20,6 +20,7 @@ importFrom(cli,cli_alert_success) importFrom(cli,cli_div) importFrom(cli,cli_h2) importFrom(cli,cli_text) +importFrom(dplyr,all_of) importFrom(dplyr,arrange) importFrom(dplyr,bind_cols) importFrom(dplyr,case_when) diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index e0e9ceec..236862d6 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -27,3 +27,19 @@ Dataframe that has been re-ordered according to spec \description{ Order variables of a dataset according to Spec } +\examples{ +adsl <- data.frame( + BRTHDT = c(1, 1, 2), + STUDYID = c("mid987650", "mid987650", "mid987650"), + TRT01A = c("Active", "Active", "Placebo"), + USUBJID = c(1001, 1002, 1003) +) + +metacore <- data.frame( + dataset = c("adsl", "adsl", "adsl", "adsl"), + variable = c("STUDYID", "USUBJID", "TRT01A", "BRTHDT"), + order = 1:4 +) + +adsl <- xportr_order(adsl, metacore) +} From 547a32a42aa3c0272f193576cac43faea96bef2c Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 27 Apr 2023 20:51:42 +0530 Subject: [PATCH 055/337] chore: update test to be consistent --- tests/testthat/test-order.R | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index df60f54b..64a7d19b 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -79,16 +79,14 @@ test_that("xportr_order: Variable are ordered when custom domain_name is passed" expect_equal(names(ordered_df), df_meta$variable) }) -test_that("Domain not in character format", { - ADAE <- read_sas(system.file("extdata", "adae.sas7bdat", package = "xportr")) - met <- read_excel(system.file("specs", "ADaM_spec.xlsx", package = "xportr"), 3) - - expect_error( - withr::with_options( - list(xportr.order_name = "Order", xportr.variable_name = "Variable"), - { - ADAE_xportr <- xportr_order(ADAE, metacore = met, domain = ADAE, verbose = "none") - } - ) +test_that("xportr_order: Expect error if domain is not a character", { + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + df_meta <- data.frame( + custom_domain = "df", + variable = letters[1:4], + order = 1:4 ) + + expect_error(xportr_order(df, df_meta, domain = NA, verbose = "none")) + expect_error(xportr_order(df, df_meta, domain = 1, verbose = "none")) }) From 935c219cf80a344448df39612d52c447a5f26811 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 27 Apr 2023 22:13:03 +0530 Subject: [PATCH 056/337] fix: fix grammar errors in the test desc --- tests/testthat/test-metadata.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 921ab2d8..22fd0c47 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -10,7 +10,7 @@ extract_var_label <- function(.x) { vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) } -test_that("xportr_label: Correctly applies label for data.frame spec", { +test_that("xportr_label: Correctly applies label from data.frame spec", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", variable = c("x", "y"), label = c("foo", "bar")) @@ -72,7 +72,7 @@ test_that("xportr_label: Correctly applies label for custom domain", { ) }) -test_that("xportr_label: Correctly applies label for metacore spec", { +test_that("xportr_label: Correctly applies label from metacore spec", { skip_if_not_installed("metacore") df <- data.frame(x = "a", y = "b", variable = "value") metacore_meta <- suppressWarnings( @@ -148,7 +148,7 @@ test_that("xportr_label: Expect error if domain is not a character", { ) }) -test_that("xportr_df_label: Correctly applies label for data.frame spec", { +test_that("xportr_df_label: Correctly applies label from data.frame spec", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", label = "Label") @@ -193,7 +193,7 @@ test_that("xportr_df_label: Correctly applies label for custom domain", { ) }) -test_that("xportr_df_label: Correctly applies label for metacore spec", { +test_that("xportr_df_label: Correctly applies label from metacore spec", { skip_if_not_installed("metacore") df <- data.frame(x = "a", y = "b") metacore_meta <- suppressWarnings( From aa60e2a89acaaff8cde761046fb199eb31617d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 26 Apr 2023 11:41:07 +0200 Subject: [PATCH 057/337] adds test --- tests/testthat/test-pipe.R | 60 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 tests/testthat/test-pipe.R diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R new file mode 100644 index 00000000..ee214ce3 --- /dev/null +++ b/tests/testthat/test-pipe.R @@ -0,0 +1,60 @@ +test_that("xportr_*: Can use magrittr to pipe", { + adsl <- dplyr::tibble( + USUBJID = c(1001, 1002, 1003), + SITEID = c(001, 002, 003), + ADATE = readr::parse_date(c("2023-04-11", "2023-04-12", "2023-04-13")), + AGE = c(63, 35, 27), + SEX = c("M", "F", "M") + ) + + metadata <- dplyr::tibble( + dataset = "adsl", + variable = c("USUBJID", "SITEID", "ADATE", "AGE", "SEX"), + label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), + type = c("character", "character", "character", "numeric", "character"), + length = c(10, 10, 10, 8, 10), + format = c(NA, NA, "DATE9.", NA, NA) + ) + + result <- adsl %>% + xportr_type(metadata) %>% + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_format(metadata) + + attr(result, "_xportr.df_arg_") %>% + expect_equal("adsl") +}) + +test_that("xportr_*: Can use R native pipe (R>4.1)", { + skip_if( + compareVersion(glue("{R.version$major}.{R.version$minor}"), "4.1.0") < 0, + "R Version doesn't support native pipe (<4.1)" + ) + + adsl <- dplyr::tibble( + USUBJID = c(1001, 1002, 1003), + SITEID = c(001, 002, 003), + ADATE = readr::parse_date(c("2023-04-11", "2023-04-12", "2023-04-13")), + AGE = c(63, 35, 27), + SEX = c("M", "F", "M") + ) + + metadata <- dplyr::tibble( + dataset = "adsl", + variable = c("USUBJID", "SITEID", "ADATE", "AGE", "SEX"), + label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), + type = c("character", "character", "character", "numeric", "character"), + length = c(10, 10, 10, 8, 10), + format = c(NA, NA, "DATE9.", NA, NA) + ) + + result <- adsl |> + xportr_type(metadata) |> + xportr_label(metadata) |> + xportr_length(metadata) |> + xportr_format(metadata) + + attr(result, "_xportr.df_arg_") %>% + expect_equal("adsl") +}) From 1a351515beed8c99ac3bb6c738ac390153d1299b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 28 Apr 2023 15:27:53 +0200 Subject: [PATCH 058/337] corrects bug on #97 --- R/df_label.R | 42 ++++++----------- R/format.R | 41 ++++++---------- R/label.R | 44 +++++++----------- R/length.R | 22 +++------ R/order.R | 49 ++++++++------------ R/type.R | 40 ++++++---------- R/utils-xportr.R | 73 ++++++++++++++++++----------- tests/testthat/test-metadata.R | 85 +++++++++++++++++++++++----------- tests/testthat/test-pipe.R | 31 +++++++++---- 9 files changed, 211 insertions(+), 216 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index 6ae77d51..18899604 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -27,46 +27,34 @@ #' #' adsl <- xportr_df_label(adsl, metacore) xportr_df_label <- function(.df, metacore, domain = NULL) { - + domain_name <- getOption("xportr.df_domain_name") label_name <- getOption("xportr.df_label") - - - df_arg <- as_name(enexpr(.df)) - - if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") - else if (identical(df_arg, ".")) { - attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") - } - - if (!is.null(domain) && !is.character(domain)) { - abort(c("`domain` must be a vector with type .", - x = glue("Instead, it has type <{typeof(domain)}>.")) - ) - } - - df_arg <- domain %||% df_arg - + + ## Common section to detect domain from argument or pipes + + df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) + domain <- get_domain(.df, df_arg, domain) if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain - + + ## End of common section + if (inherits(metacore, "Metacore")) metacore <- metacore$ds_spec - + label <- metacore %>% - filter(!!sym(domain_name) == df_arg) %>% + filter(!!sym(domain_name) == domain) %>% select(!!sym(label_name)) %>% # If a dataframe is used this will also be a dataframe, change to character. as.character() - + label_len <- nchar(label) - + if (label_len > 40) { abort("Length of dataset label must be 40 characters or less.") } - - + attr(.df, "label") <- label - + .df } diff --git a/R/format.R b/R/format.R index b091916a..c874fe7e 100644 --- a/R/format.R +++ b/R/format.R @@ -28,57 +28,46 @@ #' #' adsl <- xportr_format(adsl, metacore) xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.format_verbose", "none")) { - + domain_name <- getOption("xportr.domain_name") format_name <- getOption("xportr.format_name") variable_name <- getOption("xportr.variable_name") - - - df_arg <- as_name(enexpr(.df)) - - if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") - else if (identical(df_arg, ".")) { - attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") - } - - if (!is.null(domain) && !is.character(domain)) { - abort(c("`domain` must be a vector with type .", - x = glue("Instead, it has type <{typeof(domain)}>.")) - ) - } - - df_arg <- domain %||% df_arg - + + ## Common section to detect domain from argument or pipes + + df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) + domain <- get_domain(.df, df_arg, domain) if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain - + + ## End of common section + if (inherits(metacore, "Metacore")) metacore <- metacore$var_spec - + if (domain_name %in% names(metacore)) { metadata <- metacore %>% - dplyr::filter(!!sym(domain_name) == df_arg & !is.na(!!sym(format_name))) + dplyr::filter(!!sym(domain_name) == domain & !is.na(!!sym(format_name))) } else { metadata <- metacore } - + filtered_metadata <- metadata %>% filter(!!sym(variable_name) %in% names(.df)) - + format <- filtered_metadata %>% select(!!sym(format_name)) %>% unlist() %>% toupper() names(format) <- filtered_metadata[[variable_name]] - + for (i in seq_len(ncol(.df))) { format_sas <- purrr::pluck(format, colnames(.df)[i]) if (is.na(format_sas) || is.null(format_sas)) format_sas <- "" attr(.df[[i]], "format.sas") <- format_sas } - + .df } diff --git a/R/label.R b/R/label.R index 01c07ecb..f125569e 100644 --- a/R/label.R +++ b/R/label.R @@ -31,63 +31,53 @@ #' adsl <- xportr_label(adsl, metacore) xportr_label <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.label_verbose", "none")) { - + domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") variable_label <- getOption("xportr.label") - - df_arg <- as_name(enexpr(.df)) - - if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") - else if (identical(df_arg, ".")) { - attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") - } - - if (!is.null(domain) && !is.character(domain)) { - abort(c("`domain` must be a vector with type .", - x = glue("Instead, it has type <{typeof(domain)}>.")) - ) - } - - df_arg <- domain %||% df_arg - + + ## Common section to detect domain from argument or pipes + + df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) + domain <- get_domain(.df, df_arg, domain) if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain - + + ## End of common section + if (inherits(metacore, "Metacore")) metacore <- metacore$var_spec - + if (domain_name %in% names(metacore)) { metadata <- metacore %>% - dplyr::filter(!!sym(domain_name) == df_arg) + dplyr::filter(!!sym(domain_name) == domain) } else { metadata <- metacore } - + # Check any variables missed in metadata but present in input data --- miss_vars <- setdiff(names(.df), metadata[[variable_name]]) label_log(miss_vars, verbose) - + label <- metadata[[variable_label]] names(label) <- metadata[[variable_name]] - + # Check any variable label have more than 40 characters --- label_len <- lapply(label, nchar) err_len <- which(label_len > 40) %>% names - + if (length(err_len) > 0) { warn( c("Length of variable label must be 40 characters or less.", x = glue("Problem with {encode_vars(err_len)}.")) ) } - + for (i in names(.df)) { if (i %in% miss_vars) attr(.df[[i]], "label") <- "" else attr(.df[[i]], "label") <- label[[i]] } - + .df } diff --git a/R/length.R b/R/length.R index 4167a27d..c6b48c28 100644 --- a/R/length.R +++ b/R/length.R @@ -34,30 +34,20 @@ xportr_length <- function(.df, metacore, domain = NULL, variable_length <- getOption("xportr.length") variable_name <- getOption("xportr.variable_name") - df_arg <- as_name(enexpr(.df)) - - if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") - else if (identical(df_arg, ".")) { - attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") - } - - if (!is.null(domain) && !is.character(domain)) { - abort(c("`domain` must be a vector with type .", - x = glue("Instead, it has type <{typeof(domain)}>.")) - ) - } - - df_arg <- domain %||% df_arg + ## Common section to detect domain from argument or pipes + df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) + domain <- get_domain(.df, df_arg, domain) if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain + ## End of common section + if (inherits(metacore, "Metacore")) metacore <- metacore$var_spec if (domain_name %in% names(metacore)) { metadata <- metacore %>% - filter(!!sym(domain_name) == df_arg) + dplyr::filter(!!sym(domain_name) == domain) } else { metadata <- metacore } diff --git a/R/order.R b/R/order.R index 0b451258..94e9cbed 100644 --- a/R/order.R +++ b/R/order.R @@ -10,63 +10,52 @@ #' @return Dataframe that has been re-ordered according to spec #' xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.order_verbose", "none")) { - + domain_name <- getOption("xportr.domain_name") order_name <- getOption("xportr.order_name") variable_name <- getOption("xportr.variable_name") - - - df_arg <- as_name(enexpr(.df)) - - if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") - else if (identical(df_arg, ".")) { - attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") - } - - if (!is.null(domain) && !is.character(domain)) { - abort(c("`domain` must be a vector with type .", - x = glue("Instead, it has type <{typeof(domain)}>.")) - ) - } - - df_arg <- domain %||% df_arg - + + ## Common section to detect domain from argument or pipes + + df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) + domain <- get_domain(.df, df_arg, domain) if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain - + + ## End of common section + if (inherits(metacore, "Metacore")) metacore <- metacore$ds_vars - + if (domain_name %in% names(metacore)) { metadata <- metacore %>% - dplyr::filter(!!sym(domain_name) == df_arg & !is.na(!!sym(order_name))) + dplyr::filter(!!sym(domain_name) == domain & !is.na(!!sym(order_name))) } else { metadata <- metacore %>% dplyr::filter(!is.na(!!sym(order_name))) } - + # Grabs vars from Spec and inputted dataset vars_in_spec_ds <- metadata[, c(variable_name, order_name)] %>% arrange(!!sym(order_name)) %>% extract2(variable_name) - + vars_in_spec_ds <- vars_in_spec_ds[!is.na(vars_in_spec_ds)] # Grabs all variables from Spec file and orders accordingly ord_vars <- .df %>% select(any_of(vars_in_spec_ds)) - + # Variables not in Spec file - will be moved to the end drop_vars <- .df %>% select(!any_of(vars_in_spec_ds)) - + # Used in warning message for how many vars have been moved moved_vars <- ncol(drop_vars) ordered_vars <- ncol(ord_vars) - + df_re_ord <- bind_cols(ord_vars, drop_vars) - + # Function is located in messages.R var_ord_msg(moved_vars, verbose) - - return(df_re_ord) + + df_re_ord } diff --git a/R/type.R b/R/type.R index d8017b50..2e465b1f 100644 --- a/R/type.R +++ b/R/type.R @@ -33,41 +33,31 @@ #' df2 <- xportr_type(.df, metacore, "test") xportr_type <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.type_verbose", "none")) { - + # Name of the columns for working with metadata domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") type_name <- getOption("xportr.type_name") characterTypes <- getOption("xportr.character_types") - - if (!is.null(domain) && !is.character(domain)) { - abort(c("`domain` must be a vector with type .", - x = glue("Instead, it has type <{typeof(domain)}>.")) - ) - } - - df_arg <- as_name(enexpr(.df)) - - if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") - else if (identical(df_arg, ".")) { - attr(.df, "_xportr.df_arg_") <- get_pipe_call() - df_arg <- attr(.df, "_xportr.df_arg_") - } - - domain <- domain %||% df_arg - + + ## Common section to detect domain from argument or pipes + + df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) + domain <- get_domain(.df, df_arg, domain) if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain - + + ## End of common section + ## Pull out correct metadata if ("Metacore" %in% class(metacore)) metacore <- metacore$var_spec - + if (domain_name %in% names(metacore)) { metacore <- metacore %>% filter(!!sym(domain_name) == domain) } metacore <- metacore %>% select(!!sym(variable_name), !!sym(type_name)) - + # Current class of table variables table_cols_types <- map(.df, first_class) @@ -77,15 +67,15 @@ xportr_type <- function(.df, metacore, domain = NULL, metacore, by = "variable" ) - + # It is possible that a variable exists in the table that isn't in the metadata # it will be silently ignored here. This may happen depending on what a user # passes and the options they choose. The check_core function is the place # where this should be caught. type_mismatch_ind <- which(meta_ordered$type.x != meta_ordered$type.y) type_log(meta_ordered, type_mismatch_ind, verbose) - - + + # Check if variable types match is_correct <- sapply(meta_ordered[["type.x"]] == meta_ordered[["type.y"]], isTRUE) # Use the original variable iff metadata is missing that variable @@ -104,6 +94,6 @@ xportr_type <- function(.df, metacore, domain = NULL, attributes(.df[[i]]) <<- orig_attributes } }, is_correct) - + .df } diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 5df65503..233a61e4 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -49,7 +49,7 @@ encode_vars <- function(x) { if (is.character(x)) { x <- encodeString(x, quote = "`") } - + fmt_comma(x) } @@ -64,7 +64,7 @@ encode_vals <- function(x) { if (is.character(x)) { x <- encodeString(x, quote = "'") } - + fmt_comma(x) } @@ -119,43 +119,43 @@ fmt_fmts <- function(x) { xpt_validate_var_names <- function(varnames, list_vars_first = TRUE, err_cnd = character()) { - + # 1.1 Check length -- chk_varlen <- varnames[nchar(varnames) > 8] - + if (length(chk_varlen) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, glue("{fmt_vars(chk_varlen)} must be 8 characters or less."), glue(" Must be 8 characters or less: {fmt_vars(chk_varlen)}."))) } - + # 1.2 Check first character -- chk_first_chr <- varnames[stringr::str_detect(stringr::str_sub(varnames, 1, 1), "[^[:alpha:]]")] - + if (length(chk_first_chr) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, glue("{fmt_vars(chk_first_chr)} must start with a letter."), glue(" Must start with a letter: {fmt_vars(chk_first_chr)}."))) } - + # 1.3 Check Non-ASCII and underscore characters -- chk_alnum <- varnames[stringr::str_detect(varnames, "[^a-zA-Z0-9]")] - + if (length(chk_alnum) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, glue("{fmt_vars(chk_alnum)} cannot contain any non-ASCII, symbol or underscore characters."), glue(" Cannot contain any non-ASCII, symbol or underscore characters: {fmt_vars(chk_alnum)}."))) } - + # 1.4 Check for any lowercase letters - or not all uppercase chk_lower <- varnames[!stringr::str_detect( stringr::str_replace_all(varnames, "[:digit:]", ""), "^[[:upper:]]+$")] - + if (length(chk_lower) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, glue("{fmt_vars(chk_lower)} cannot contain any lowercase characters."), @@ -172,50 +172,50 @@ xpt_validate_var_names <- function(varnames, #' @return xpt file #' @noRd xpt_validate <- function(data) { - + err_cnd <- character() - + # 1.0 VARIABLES ---- varnames <- names(data) err_cnd <- xpt_validate_var_names(varnames = varnames, err_cnd = err_cnd) - - + + # 2.0 LABELS ---- labels <- extract_attr(data, attr = "label") - + # 2.1 Check length -- chk_label_len <- labels[nchar(labels) > 40] - + if (length(chk_label_len) > 0) { err_cnd <- c(err_cnd, glue("{fmt_labs(chk_label_len)} must be 40 characters or less.")) } - + # 2.2 Check Non-ASCII and special characters chk_spl_chr <- labels[stringr::str_detect(labels, "[<>]|[^[:ascii:]]")] - + if (length(chk_spl_chr) > 0) { err_cnd <- c(err_cnd, glue("{fmt_labs(chk_spl_chr)} cannot contain any non-ASCII, symbol or special characters.")) } - + # 3.0 VARIABLE TYPES ---- types <- tolower(extract_attr(data, attr = "SAStype")) expected_types <- c("", "text", "integer", "float", "datetime", "date", "time", "partialdate", "partialtime", "partialdatetime", "incompletedatetime", "durationdatetime", "intervaldatetime") - + # 3.1 Invalid types -- chk_types <- types[which(!types %in% expected_types)] - + if (length(chk_types) > 0) { err_cnd <- c(err_cnd, glue("{fmt_vars(names(types))} must have a valid type.")) } - + # 4.0 Format Types ---- formats <- tolower(extract_attr(data, attr = "format.sas")) - + ## The usual expected formats in clinical trials: characters, dates expected_formats <- c(NA, "", @@ -226,9 +226,9 @@ xpt_validate <- function(data) { paste("yymmdd", 2:10, ".", sep = ""), paste("mmddyy", 2:10, ".", sep = ""), paste("ddmmyy", 2:10, ".", sep = "")) - + chk_formats <- formats[which(!formats %in% expected_formats)] - + ## Remove the correctly numerically formatted variables format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" chk_formats <- chk_formats[which(!str_detect(chk_formats, format_regex))] @@ -239,14 +239,33 @@ xpt_validate <- function(data) { return(err_cnd) } +#' Get the domain from argument or from magrittr's pipe (`%>%`) +#' +#' @return A string representing the domain +#' @noRd +get_domain <- function(.df, df_arg, domain) { + if (!is.null(domain) && !is.character(domain)) { + abort(c("`domain` must be a vector with type .", + x = glue("Instead, it has type <{typeof(domain)}>.")) + ) + } + + if (identical(df_arg, ".")) { + df_arg <- get_pipe_call() + } + + result <- domain %||% attr(.df, "_xportr.df_arg_") %||% df_arg + result +} + #' Get Origin Object of a Series of Pipes #' #' @return The R Object at the top of a pipe stack #' @noRd get_pipe_call <- function() { - call_strs <- map_chr(sys.calls(), as_label) + call_strs <- map_chr(sys.calls(), deparse1) top_call <- min(which(str_detect(call_strs, "%>%"))) - call_str <- as_label(sys.calls()[[top_call]]) + call_str <- call_strs[[top_call]] trimws(strsplit(call_str, "%>%", fixed = TRUE)[[1]][[1]]) } diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 2e75053a..2789d211 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -12,30 +12,42 @@ test_that("Variable label", { varmeta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), label = c("foo", "bar")) - + extract_varlabel <- function(.x) { vapply(.x, function(.x) attr(.x, "label"), character(1), USE.NAMES = FALSE) } - + df <- xportr_label(df, varmeta) df_dput <- dput(df) - + expect_equal(extract_varlabel(df), c("foo", "bar")) - expect_equal(df_dput, - structure(list(x = structure("a", label = "foo"), - y = structure("b", label = "bar")), - row.names = c(NA, -1L), class = "data.frame")) + expect_equal( + df_dput, + structure( + list( + x = structure("a", label = "foo"), + y = structure("b", label = "bar") + ), + row.names = c(NA, -1L), + class = "data.frame", + `_xportr.df_arg_` = "df" + )) }) test_that("Dataset label", { df <- data.frame(x = "a", y = "b") dfmeta <- data.frame(dataset = "df", label = "Label") - + df <- xportr_df_label(df, dfmeta) expect_equal(attr(df, "label"), "Label") - expect_equal(dput(df), structure(list(x = "a", y = "b"), class = "data.frame", - row.names = c(NA, -1L), label = "Label")) + expect_equal(dput(df), structure( + list(x = "a", y = "b"), + class = "data.frame", + row.names = c(NA, -1L), + label = "Label", + `_xportr.df_arg_` = "df" + )) }) test_that("Expect error if any variable doesn't exist in var. metadata", { @@ -43,7 +55,7 @@ test_that("Expect error if any variable doesn't exist in var. metadata", { varmeta <- data.frame(dataset = "df", variable = "x", label = "foo") - + # expect_error(xportr_label(df, varmeta, verbose = "stop"), # "present in `.df` but doesn't exist in `datadef`") }) @@ -55,7 +67,7 @@ test_that("Expect error if any label exceeds 40 character", { label = c("foo", "Lorem ipsum dolor sit amet, consectetur adipiscing elit")) dfmeta <- data.frame(dataset = "df", label = "Lorem ipsum dolor sit amet, consectetur adipiscing elit") - + expect_warning(xportr_label(df, varmeta), "variable label must be 40 characters or less") expect_error(xportr_df_label(df, dfmeta), @@ -67,15 +79,21 @@ test_that("xportr_format will set formats as expected", { varmeta <- data.frame(dataset = rep("df", 2), variable = c("x", "y"), format = c("date9.", "datetime20.")) - - + + out <- xportr_format(df, varmeta) - + expect_equal(extract_format(out), c("DATE9.", "DATETIME20.")) - expect_equal(dput(out), structure(list(x = structure(1, format.sas = "DATE9."), - y = structure(2, format.sas = "DATETIME20.")), - row.names = c(NA, -1L), class = "data.frame")) + expect_equal(dput(out), structure( + list( + x = structure(1, format.sas = "DATE9."), + y = structure(2, format.sas = "DATETIME20.") + ), + row.names = c(NA, -1L), + class = "data.frame", + `_xportr.df_arg_` = "df" + )) }) test_that("xportr_format will handle NA values and won't error", { @@ -83,15 +101,21 @@ test_that("xportr_format will handle NA values and won't error", { varmeta <- data.frame(dataset = rep("df", 4), variable = c("x", "y", "z", "abc"), format = c("date9.", "datetime20.", NA, "text")) - + out <- xportr_format(df, varmeta) - + expect_equal(extract_format(out), c("DATE9.", "DATETIME20.", "", "")) - expect_equal(dput(out), structure(list(x = structure(1, format.sas = "DATE9."), - y = structure(2, format.sas = "DATETIME20."), - z = structure(3, format.sas = ""), - a = structure(4, format.sas = "")), - row.names = c(NA, -1L), class = "data.frame")) + expect_equal(dput(out), structure( + list( + x = structure(1, format.sas = "DATE9."), + y = structure(2, format.sas = "DATETIME20."), + z = structure(3, format.sas = ""), + a = structure(4, format.sas = "") + ), + row.names = c(NA, -1L), + class = "data.frame", + `_xportr.df_arg_` = "df" + )) }) test_that("Error ", { @@ -119,9 +143,14 @@ test_that("SAS length", { out <- xportr_length(df, varmeta) expect_equal(c(x = 1, y = 1), map_dbl(out, attr, "width")) - expect_equal(dput(out), structure(list(x = structure("a", width = 1), - y = structure("b", width = 1)), - row.names = c(NA, -1L), class = "data.frame")) + expect_equal(dput(out), structure( + list( + x = structure("a", width = 1), + y = structure("b", width = 1)), + row.names = c(NA, -1L), + class = "data.frame", + `_xportr.df_arg_` = "df" + )) df <- cbind(df, z = 3) expect_error(xportr_length(df, varmeta, verbose = "stop"), "doesn't exist") diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R index ee214ce3..27f82821 100644 --- a/tests/testthat/test-pipe.R +++ b/tests/testthat/test-pipe.R @@ -1,4 +1,6 @@ test_that("xportr_*: Can use magrittr to pipe", { + withr::local_options(list(xportr.type_verbose = "message")) + adsl <- dplyr::tibble( USUBJID = c(1001, 1002, 1003), SITEID = c(001, 002, 003), @@ -13,25 +15,31 @@ test_that("xportr_*: Can use magrittr to pipe", { label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), type = c("character", "character", "character", "numeric", "character"), length = c(10, 10, 10, 8, 10), - format = c(NA, NA, "DATE9.", NA, NA) + format = c(NA, NA, "DATE9.", NA, NA), + order = c(1, 2, 3, 4, 5) ) - result <- adsl %>% + non_standard_name <- adsl + result <- non_standard_name %>% xportr_type(metadata) %>% xportr_label(metadata) %>% xportr_length(metadata) %>% - xportr_format(metadata) + xportr_order(metadata) %>% + xportr_format(metadata) %>% + xportr_df_label(metadata) - attr(result, "_xportr.df_arg_") %>% - expect_equal("adsl") + expect_equal(attr(result, "_xportr.df_arg_"), "non_standard_name") }) test_that("xportr_*: Can use R native pipe (R>4.1)", { + #skip("yada") skip_if( compareVersion(glue("{R.version$major}.{R.version$minor}"), "4.1.0") < 0, "R Version doesn't support native pipe (<4.1)" ) + withr::local_options(list(xportr.type_verbose = "message")) + adsl <- dplyr::tibble( USUBJID = c(1001, 1002, 1003), SITEID = c(001, 002, 003), @@ -46,15 +54,18 @@ test_that("xportr_*: Can use R native pipe (R>4.1)", { label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), type = c("character", "character", "character", "numeric", "character"), length = c(10, 10, 10, 8, 10), - format = c(NA, NA, "DATE9.", NA, NA) + format = c(NA, NA, "DATE9.", NA, NA), + order = c(1, 2, 3, 4, 5) ) - result <- adsl |> + non_standard_name_native <- adsl + result <- non_standard_name_native |> xportr_type(metadata) |> xportr_label(metadata) |> xportr_length(metadata) |> - xportr_format(metadata) + xportr_order(metadata) |> + xportr_format(metadata) |> + xportr_df_label(metadata) - attr(result, "_xportr.df_arg_") %>% - expect_equal("adsl") + expect_equal(attr(result, "_xportr.df_arg_"), "non_standard_name_native") }) From 0d2c02e82dffdd40674d08ba1b8ada197fd2f684 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 28 Apr 2023 15:33:50 +0200 Subject: [PATCH 059/337] revert to max --- R/utils-xportr.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 233a61e4..c7676043 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -264,7 +264,7 @@ get_domain <- function(.df, df_arg, domain) { #' @noRd get_pipe_call <- function() { call_strs <- map_chr(sys.calls(), deparse1) - top_call <- min(which(str_detect(call_strs, "%>%"))) + top_call <- max(which(str_detect(call_strs, "%>%"))) call_str <- call_strs[[top_call]] trimws(strsplit(call_str, "%>%", fixed = TRUE)[[1]][[1]]) } From f162c1f7194b475b94b1e32add688e88623a9af5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 28 Apr 2023 15:36:02 +0200 Subject: [PATCH 060/337] remove dplyr:: namespace according to guidelines --- R/length.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/length.R b/R/length.R index c6b48c28..5a9966d7 100644 --- a/R/length.R +++ b/R/length.R @@ -47,7 +47,7 @@ xportr_length <- function(.df, metacore, domain = NULL, if (domain_name %in% names(metacore)) { metadata <- metacore %>% - dplyr::filter(!!sym(domain_name) == domain) + filter(!!sym(domain_name) == domain) } else { metadata <- metacore } From 6a079b4632e8468c4476719bfb7eef676bb456a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 28 Apr 2023 15:42:25 +0200 Subject: [PATCH 061/337] break test into 2 expressions --- tests/testthat/test-length.R | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 4c98b696..52561888 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -113,10 +113,11 @@ test_that("xportr_length: Impute character lengths based on class", { withr::defer(cli::stop_app(app)) # Test length imputation of character and numeric (not valid character type) - adsl %>% + result <- adsl %>% xportr_length(metadata) %>% - expect_silent() %>% - expect_attr_width(c(7, 199)) + expect_silent() + + expect_attr_width(result, c(7, 199)) # Test length imputation of two valid character types (both should have # `width = 200``) From 80eaeb387b005db9e12710f4caf537d6af4239ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 28 Apr 2023 16:28:29 +0200 Subject: [PATCH 062/337] add test to see if domain is kept between calls --- R/utils-xportr.R | 1 - tests/testthat/test-pipe.R | 67 +++++++++++++++++++++++++++++++++++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index c7676043..dcce7bc7 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -253,7 +253,6 @@ get_domain <- function(.df, df_arg, domain) { if (identical(df_arg, ".")) { df_arg <- get_pipe_call() } - result <- domain %||% attr(.df, "_xportr.df_arg_") %||% df_arg result } diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R index 27f82821..cad91975 100644 --- a/tests/testthat/test-pipe.R +++ b/tests/testthat/test-pipe.R @@ -1,3 +1,47 @@ +test_that("xportr_*: Domain is kept in between calls", { + withr::local_options(list(xportr.type_verbose = "message")) + + adsl <- dplyr::tibble( + USUBJID = c(1001, 1002, 1003), + SITEID = c(001, 002, 003), + ADATE = readr::parse_date(c("2023-04-11", "2023-04-12", "2023-04-13")), + AGE = c(63, 35, 27), + SEX = c("M", "F", "M") + ) + + metadata <- dplyr::tibble( + dataset = "adsl", + variable = c("USUBJID", "SITEID", "ADATE", "AGE", "SEX"), + label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), + type = c("character", "character", "character", "numeric", "character"), + length = c(10, 10, 10, 8, 10), + format = c(NA, NA, "DATE9.", NA, NA), + order = c(1, 2, 3, 4, 5) + ) + + df2 <- adsl %>% + xportr_type(metadata) + + df3 <- df2 %>% + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_order(metadata) %>% + xportr_format(metadata) + + expect_equal(attr(df3, "_xportr.df_arg_"), "adsl") + + df4 <- adsl %>% + xportr_type(metadata) + + df5 <- df4 %>% + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_order(metadata) %>% + xportr_format(metadata) + + expect_equal(attr(df5, "_xportr.df_arg_"), "adsl") +}) + test_that("xportr_*: Can use magrittr to pipe", { withr::local_options(list(xportr.type_verbose = "message")) @@ -29,10 +73,20 @@ test_that("xportr_*: Can use magrittr to pipe", { xportr_df_label(metadata) expect_equal(attr(result, "_xportr.df_arg_"), "non_standard_name") + + # xportr_type in a different order + result2 <- non_standard_name %>% + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_order(metadata) %>% + xportr_df_label(metadata) %>% + xportr_type(metadata) %>% + xportr_format(metadata) + + expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name") }) test_that("xportr_*: Can use R native pipe (R>4.1)", { - #skip("yada") skip_if( compareVersion(glue("{R.version$major}.{R.version$minor}"), "4.1.0") < 0, "R Version doesn't support native pipe (<4.1)" @@ -68,4 +122,15 @@ test_that("xportr_*: Can use R native pipe (R>4.1)", { xportr_df_label(metadata) expect_equal(attr(result, "_xportr.df_arg_"), "non_standard_name_native") + + # xportr_type in a different order + result2 <- non_standard_name |> + xportr_label(metadata) |> + xportr_length(metadata) |> + xportr_order(metadata) |> + xportr_df_label(metadata) |> + xportr_type(metadata) |> + xportr_format(metadata) + + expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name") }) From 2102de2664b8a61ede8817cbfad747bd61811b20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 28 Apr 2023 16:34:50 +0200 Subject: [PATCH 063/337] use minimal data functions and expand on domain-based tests --- tests/testthat/test-pipe.R | 77 +++++++++++++++----------------------- 1 file changed, 30 insertions(+), 47 deletions(-) diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R index cad91975..0ea5e189 100644 --- a/tests/testthat/test-pipe.R +++ b/tests/testthat/test-pipe.R @@ -1,22 +1,27 @@ +test_that("xportr_*: Domain is obtained from a call without pipe", { + adsl <- minimal_table(30) + + metadata <- minimal_metadata( + dataset = TRUE, length = TRUE, label = TRUE, type = TRUE, format = TRUE, + order = TRUE + ) + + xportr_label(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") + xportr_length(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") + xportr_order(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") + xportr_format(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") + xportr_type(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") +}) + + test_that("xportr_*: Domain is kept in between calls", { withr::local_options(list(xportr.type_verbose = "message")) - adsl <- dplyr::tibble( - USUBJID = c(1001, 1002, 1003), - SITEID = c(001, 002, 003), - ADATE = readr::parse_date(c("2023-04-11", "2023-04-12", "2023-04-13")), - AGE = c(63, 35, 27), - SEX = c("M", "F", "M") - ) + adsl <- minimal_table(30) - metadata <- dplyr::tibble( - dataset = "adsl", - variable = c("USUBJID", "SITEID", "ADATE", "AGE", "SEX"), - label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), - type = c("character", "character", "character", "numeric", "character"), - length = c(10, 10, 10, 8, 10), - format = c(NA, NA, "DATE9.", NA, NA), - order = c(1, 2, 3, 4, 5) + metadata <- minimal_metadata( + dataset = TRUE, length = TRUE, label = TRUE, type = TRUE, format = TRUE, + order = TRUE ) df2 <- adsl %>% @@ -42,25 +47,14 @@ test_that("xportr_*: Domain is kept in between calls", { expect_equal(attr(df5, "_xportr.df_arg_"), "adsl") }) -test_that("xportr_*: Can use magrittr to pipe", { +test_that("xportr_*: Can use magrittr to pipe and aquire domain from call", { withr::local_options(list(xportr.type_verbose = "message")) - adsl <- dplyr::tibble( - USUBJID = c(1001, 1002, 1003), - SITEID = c(001, 002, 003), - ADATE = readr::parse_date(c("2023-04-11", "2023-04-12", "2023-04-13")), - AGE = c(63, 35, 27), - SEX = c("M", "F", "M") - ) + adsl <- minimal_table(30) - metadata <- dplyr::tibble( - dataset = "adsl", - variable = c("USUBJID", "SITEID", "ADATE", "AGE", "SEX"), - label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), - type = c("character", "character", "character", "numeric", "character"), - length = c(10, 10, 10, 8, 10), - format = c(NA, NA, "DATE9.", NA, NA), - order = c(1, 2, 3, 4, 5) + metadata <- minimal_metadata( + dataset = TRUE, length = TRUE, label = TRUE, type = TRUE, format = TRUE, + order = TRUE ) non_standard_name <- adsl @@ -86,7 +80,7 @@ test_that("xportr_*: Can use magrittr to pipe", { expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name") }) -test_that("xportr_*: Can use R native pipe (R>4.1)", { +test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call", { skip_if( compareVersion(glue("{R.version$major}.{R.version$minor}"), "4.1.0") < 0, "R Version doesn't support native pipe (<4.1)" @@ -94,22 +88,11 @@ test_that("xportr_*: Can use R native pipe (R>4.1)", { withr::local_options(list(xportr.type_verbose = "message")) - adsl <- dplyr::tibble( - USUBJID = c(1001, 1002, 1003), - SITEID = c(001, 002, 003), - ADATE = readr::parse_date(c("2023-04-11", "2023-04-12", "2023-04-13")), - AGE = c(63, 35, 27), - SEX = c("M", "F", "M") - ) + adsl <- minimal_table(30) - metadata <- dplyr::tibble( - dataset = "adsl", - variable = c("USUBJID", "SITEID", "ADATE", "AGE", "SEX"), - label = c("Unique Subject Identifier", "Study Site Identifier", "Study Dates", "Age", "Sex"), - type = c("character", "character", "character", "numeric", "character"), - length = c(10, 10, 10, 8, 10), - format = c(NA, NA, "DATE9.", NA, NA), - order = c(1, 2, 3, 4, 5) + metadata <- minimal_metadata( + dataset = TRUE, length = TRUE, label = TRUE, type = TRUE, format = TRUE, + order = TRUE ) non_standard_name_native <- adsl From 8a4b531107f71ee638e8f0d8753083294f0ac4ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 28 Apr 2023 16:43:38 +0200 Subject: [PATCH 064/337] avoid using pairlist --- R/utils-xportr.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index dcce7bc7..b22b69b0 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -262,7 +262,7 @@ get_domain <- function(.df, df_arg, domain) { #' @return The R Object at the top of a pipe stack #' @noRd get_pipe_call <- function() { - call_strs <- map_chr(sys.calls(), deparse1) + call_strs <- map(sys.calls(), deparse1) top_call <- max(which(str_detect(call_strs, "%>%"))) call_str <- call_strs[[top_call]] trimws(strsplit(call_str, "%>%", fixed = TRUE)[[1]][[1]]) From 50782019b80ea21a6ffe8117ddd164fa3156ac83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 28 Apr 2023 16:49:27 +0200 Subject: [PATCH 065/337] fix was not working, should be corrected in CI --- R/utils-xportr.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index b22b69b0..98969649 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -262,7 +262,7 @@ get_domain <- function(.df, df_arg, domain) { #' @return The R Object at the top of a pipe stack #' @noRd get_pipe_call <- function() { - call_strs <- map(sys.calls(), deparse1) + call_strs <- map(as.list(sys.calls()), ~deparse1(.x, nlines = 1)) top_call <- max(which(str_detect(call_strs, "%>%"))) call_str <- call_strs[[top_call]] trimws(strsplit(call_str, "%>%", fixed = TRUE)[[1]][[1]]) From c9a97ae87a5a603e201097c1f1a46b3f06ec8cd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Fri, 28 Apr 2023 16:58:40 +0200 Subject: [PATCH 066/337] corrects variable name and removes duplicate entry of all_of --- R/xportr-package.R | 2 +- tests/testthat/test-pipe.R | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/R/xportr-package.R b/R/xportr-package.R index b075d78c..ef677962 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -7,7 +7,7 @@ #' @import rlang haven #' @importFrom dplyr left_join bind_cols filter select rename rename_with n #' everything arrange group_by summarize mutate ungroup case_when distinct -#' tribble all_of +#' tribble #' @importFrom glue glue glue_collapse #' @importFrom cli cli_alert_info cli_h2 cli_alert_success cli_alert_info #' cli_div cli_alert_success cli_text cli_h2 diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R index 0ea5e189..4adb4bf0 100644 --- a/tests/testthat/test-pipe.R +++ b/tests/testthat/test-pipe.R @@ -68,7 +68,7 @@ test_that("xportr_*: Can use magrittr to pipe and aquire domain from call", { expect_equal(attr(result, "_xportr.df_arg_"), "non_standard_name") - # xportr_type in a different order + # Different sequence call by moving first and last around result2 <- non_standard_name %>% xportr_label(metadata) %>% xportr_length(metadata) %>% @@ -106,8 +106,8 @@ test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call", expect_equal(attr(result, "_xportr.df_arg_"), "non_standard_name_native") - # xportr_type in a different order - result2 <- non_standard_name |> + # Different sequence call by moving first and last around + result2 <- non_standard_name_native |> xportr_label(metadata) |> xportr_length(metadata) |> xportr_order(metadata) |> @@ -115,5 +115,5 @@ test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call", xportr_type(metadata) |> xportr_format(metadata) - expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name") + expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name_native") }) From 819bba9b0996a842fa7671b91c54ec69299a1541 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Mon, 1 May 2023 17:33:17 +0000 Subject: [PATCH 067/337] docs: #84 Example data and spec upload --- .../TDF_ADaM - Pilot 3 Team updated.xlsx | Bin 0 -> 88513 bytes example_data_specs/adadas.xpt | Bin 0 -> 4218880 bytes example_data_specs/adae.xpt | Bin 0 -> 726720 bytes example_data_specs/adlbc.xpt | Bin 0 -> 14488720 bytes example_data_specs/adtte.xpt | Bin 0 -> 73520 bytes example_data_specs/readme.md | 1 + 6 files changed, 1 insertion(+) create mode 100644 example_data_specs/TDF_ADaM - Pilot 3 Team updated.xlsx create mode 100644 example_data_specs/adadas.xpt create mode 100644 example_data_specs/adae.xpt create mode 100644 example_data_specs/adlbc.xpt create mode 100644 example_data_specs/adtte.xpt create mode 100644 example_data_specs/readme.md diff --git a/example_data_specs/TDF_ADaM - Pilot 3 Team updated.xlsx b/example_data_specs/TDF_ADaM - Pilot 3 Team updated.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..52be49104293d6c970bdaaed493f9ce502a6de14 GIT binary patch literal 88513 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 Gf$&Iw literal 0 HcmV?d00001 diff --git a/example_data_specs/adadas.xpt b/example_data_specs/adadas.xpt new file mode 100644 index 0000000000000000000000000000000000000000..de7b820ad763d4963c9615a68b5c1956094320c2 GIT binary patch literal 4218880 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πlkJUSJ;_*ONq{ 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℞$Xk?;vjy6QJO4gpEPq<6W zL0j*7_;w#>5JW_7BHD9Qoj*D&IZ6`6NHd7y97OFo`uTauQF68;NFstHqCH2|`J=Ov zqYV+QlC|fkI)5}WQM#=sXOdyZD@5cbqCH2|`J<7Ey0*SLe{_<0Pb|?NN>+j>X1^6b zz4E+WDim%kPl$M^g~3&L2%qv@(D6f+xz&A5B5DI)5}N(QC5;!}+7=59FCA z>!)~5I3xGS?ftbC_nZB-yIdSQe{@a$k-&enSj(4Jvpes~@;mN2ww#~H^5ZM=Lgp~$ znf%fnl>exIcNlTD&L6!b|28I3LO&7hI;zeejZC!mo~druc=4YKivHSJ_ktz584?}% zv8Tb9G5m6`=1hLqIDa%UQKGGv3LnJAs34G|q>r@XS~s5*Z%GEq85$=Qy1Cgc#2 zn~3%tRp*aJCQ9dMLqvt|=xEPTb^d5%qEqB3H`{U1=ctd!O+l+q`Uw3*wCm`WyWkw?C`UkqvUMI z=I1!8^G9bTM;jtK%1(J@℞$Xk?;vj*_z-(GNw0ej?g+RGmK>nJBHJ4H2C_N7ebG zk%`hdO3rq~j0Z&ICZat@)%l~5iPAaR5Yg##^a*!~IcV!$58pn26#9vX+(fkJs5*ai zR&ulD=Z~)X-?_&}d7#|u=G;72 z_0{>K$%$6xkN$=y$;}^4k)zf5qe+Rra{lP}c~6@E=z;x<{nfv4pGkjBBx3CT^+)C7 z3+9hb>OVT1Ke}#j>;1dKh_iM6s0_LHu#Y|T6Va}t+WgVjL|xTab#!=Meqm_1*p$z% zzjmK{!4mbC0ntGwm)*VL@Q*GJ|H#-==;JIu(d*UE!~cT&>sP;LN<#D%I(o1Knqm92 zLPjKd{WY1e*(%XcNAnF~TJPihOc#k(b+mRK{$crV_17}@f+c!ME>q^{f}9VY`u0s9 z{q{|pb>pM*6Qg~{Y;&Ar=P0eCu5u>#z7L% zuA|yK{MbZk9c_px@(5sBRanH0Z3^7Y*;Lq(k`qeHHWptD!>dE0& zOt_AYLe!$8+FFs=RZr_Exw2uzPF_Jj5$!svtrdw)l-ALPh=MSP+I93vcZoUB(N>9C z`lHWvktn01trE59sJ5OdcGXXzqulBnKQe+f%&2xmyN+t>nPL;2LPr}R3LQnX>*ybL zvFe%r=<)@MD99m4(I4G?K>o(wAAP=yL^&O8k*GySwKaFKtDe?Ta)lUj6cPG~XxGup zUCdGDIa5PKt7Ppu`lT)sWpuPvqL%*X*SbiQ(a~0kT69!f7dkUK%C2HODRti5+&pbv zXl$Z%f0QM<6cR0aPr-hnmgn_f?qbz5I@&5xi;jN1i$ob6Wr${byg^CD>LEjp^Lub&wmC0BzNKkW(n2>nE~>!`NAJ~mOh zKgtrlJ|sH0BkTwo25}AJu$HVplz_qpYij z@6qE~DD)H2uA`byNo=BYf3zW@Qv0K$T}PklV%0M`+A2{?e{`pdL>V1zm8eBWH7}jm zRZr{aa3KPqvm8eBW2VEq}=xD1%Ejs!{$B5E8>PDRHeos={qa*Ya(XOMK z-_y+KXhTH77DVkj`cFHSqx5}!t3)k2y4yvfjE<5-^UMJ#4>%8V)S{!Gch~C9NC~Z@ ztbwFeXsbjmI{HEvi84A$62;RH++Vv5zBmWjTvXNltJvL`yogz(@~ zZ++kwesk-py+8WL?gAYn%G}qpMDcVPL>E2Lm!7_%_|E!kgs4SFU+f}LMn_qqn5E;1 zLRX8|UQ5xZZ?NmA>YI1l;r@UA*A9DsRSYBc?7MvQ?1vxB`WG&qDc&a^ZE-?kMBhCB z?pzPwH&3TdU;N0(#VmZ~#zzu?fp@&qojitDi{&^iD=hR)i*CP zQCde?qCU?+w7jo>>pj=LPT6%-_03B`l+n>viCT12^&d?^l+n>viH7&}<8@T^&5KNw z*3pI>w4k4eb{$oH^CA~FxcXYJt zsOp=Sf+(Y-EKz@tjvPhLsE~Wxo)ER@sOmqOf+(Y-EYVEz5k%!|bQGc%9sS4dm*?QV zp7bOu^>j%nLO&7hI;#5SrO45V*4J0YM_Hn%dQY^xufI_U+jUg+%}YU)(^1Oht(v34 zadfonsOmqOf+(k>9MOq#)S{!RZ(d}gbbpj|&?=n@PD)-vKN0OZdf8p5J1rC4A8m-} zsNUt3T}M^lyvRA~h%!3bDp5;+RP`TCL6p(aR*714RQ1h^OqAA9)4; zQPnpua*onEiWv}A-@F~6hjpUpha%ehqg(ERbC9DA5glcxyt3!0>Pa>$IZC<{VdeuO zaud;>qpBxaWTJFi&k|kmRlg{4kV)Jvp1k(;MSEL+#a*CdRnN5bBvIiv+)WikeGFIM zSlW8kBR55kGHrdUL@jOocE@s*ZtF>RqT-h&OA(=;h;|)SJ;_q!C^Lr75`8%&TF4^A zUhxM`M{C!LKq2bqIIG@{DTp#U+A2|tj;bEHDTp#U+A2|tj;fwyk%`heTD8u}?>~F) z>?5Ce#iSDP(%GM1m1?gZp`VC$9aTNaA`_+iqa;zxcmP?PgQ&efDj(Gx^hZgeAX$we zQHzeM9=R!Ul+n>viCT12^(2c-l-AMVES(wgB#TUx)=`ousvY`?G5qi@H1vQN-yc=I z9a9ix`lGE9wdknok(+`jqoX8I{b&iV0C)!Q)zQAS5wC2G;p9ruxRr|Ml>&*&&i)aPWGqdsSM zgLR>n{;29n7CA?09cA5#PD+(yjvn+A(XOMaCs|~obbquVqQZA{wBOgO-i|4VGCJBS zQHzeM9=R!qGCJBSQHzeMo@9}U(mKkz6YZA@FMNc4BHDHIciaU#*48uqQI_b>zvj<= zaP`yg1<}E;KfHVJuYMuhUC4j?Q-A$`{()UbRd2`0IqF&_Mn_qq?|9FjUSnDkJ$Lh+ z5AWXA8w@cI|K?>OYSB^EBR2(6Mn_qqzPwAKi=qO9)Bo3}|C290_-pq2dexKc_9OkZ zo87U#niZlAITnBLYR!(VnB1-37<=@Mnc6yRu=!6ZH`!5$#0P^-Qxu z6ul?w%7(_<`mK4%QF2CZ@iUU6h{#PudycB}@Mk4Q$+>x0y@&{sh<2jtjNDlv+R!W= zkVLc-Rp;i-3ekq1*MlUYo#ht_)p;; zALUlQ*U#7Q?qAmVM*sN7UEDK<|H^$u?vsnZ_wZttp+N6FdhFDwY|HvBU!Z{RSYKzx@a5g% zF7))dbD3ofe^cIYb3J@@3_mi_s*c{fva*^DpN*DZ`L-Y^J}R+){BHN6A)<28(XsYf zsP7-tuelRR7&G>ig6N*AcSMKhAGzsY@rCAuM(LyitStKK4)sYKdL@wicFNQ`i6)i{}Am}ukM18f+$nZ$VBO?Z-^+W9noI(>YfcLh%!~*Dp5<-t2+!tCQ4U5`Me&vh=@B%MEgjI z`n*0eQM&3IB3dPDuX=TdffPiUs&AF3rRr5b{K!P7sCsTr$)aQ>#voAbi1w;i=afVy zIz`oUM6-}6?n1-$OyT$_Mt17&>s3Ge6hyhIZ;_~_>Q(pl$VBO?C+9t(B|=2CBigI} zvb$8r#-1ix*-#nHYlvu-ti7#Q-PRTmhse09GJTg(b>e;z@jgRK3bMqn- zrQ3RzD0)vIn@Qal-;rpqdev(@1yQEzS)!gGdPIoD1AB>Ds$O-*j!cxUdOQ`e&L3S8 za=DLa;}Pv`{g%7n9JKWf5f#3pqrK{{bde}i^(@g1p@$sJGdT};4zyIg>NP$qRnN|G ze!VB?BdQ(IUiIo6=g36qww@%KzZ?=BY{>cUO>SS2efFwXJ#teJWvZSeTKF9T3!kH? z{^I)oc=3hdA0cX~`fc}-bf;ya+j?>ye(`3>NkmjTqP^L3%EgI{r8<6p8@z3Sr}IY;TLpPjWLk%`i6eM3YgLwn^cTYJ?% zy|x;>vUb_8 zv@L4aE_aeBqoXX*>%yvsjt)-U_OJieCzk)Nz4xU0j~+SFUtM(nYJc_LxOnp1=?|W{ z|3bM^^V$n}TfJWKK6%BiU0%2AsDF2Ox@=v$EdRH1Ph03GqFqPzwaamd+I4hw+kJ>E z(UXz_m^Gefa$bzvciHy`>gPD?YnKxct?KCTy!^sO^M%aL?)6vyrDMPn^#nl_RUgh8 z4|NnjTd$+fxVJN|WlBJFA{{*<$<$wcuzjN8*c1A$c_wecx*9w#QCdgImA1lUbcB8) z+I3W44IY;$t)nDSK655oL6gCAw50 zir#y$E1N|}zv?bH2Rh0UtyI169UbfL>!G!ICO;SUM|H=7xH(GeXhW;P(IO$*`=h#J zL0qD=jy6OT*$JZd{;2L)kbo$oqpcFP=;(9qLzx2|ZI!5{KdO5`#Ldwubd*|Ok19t* zwIkYfRQG_0OLPhyZG>o*tX)TS4~PUrIUS{l<{21D#5r3qTUluA`T`n4_lEH>=z3zt9j-XHaN)pX8u#|{%5Vh;5 z?o*P0DAONhiTcqzaK(soNYtXEUw4<9gZ?N<6eO!LBx=!7-T5VMj?y}cIVD!-7vICL z_Uu8_uA^IB%u%L4+7QuduG)3;=ps?3KS~k>NkkAv zlpM9_sP3gRBRb0Zl)PQo6+S{g5$!svd+Ed_O7}-uqCXuH9lRvxyV)i8!mgvbmreqr zjE=HIy@w8Rbl0yL+5N@6L@he{P4`L6L4TAb`dSB|R}y`LobMj__5W}9_5a#+bh~3j z>Ha9|{PH?a)JNziqFqOIccKJU&-6zdA}V}GN4t(*?O2Y|Ed4qq^Ty+^VN_v>`7Y=qI9GM}NDEIm+lL zNwj*egmVzJ>!|Mc6gNj{9c`7UMMrnKn4^r2l0@Bqzvd9;sO7$1chHKPqqL3=XOe9` zeCEM3=P#bUa6Y^9Ls=EEU$vJnA3Jq?{{bxBLzN?fB%)nMAM0X{GCJB2(Q3NdbyRoI zikqXfj7bRLlsZR*ej?g+^mn?Lql}KSM0Y}>`KFu~vS7An*HPW&EpCp|_w_8%s}-Uf zp6JIV3Q>!WzUY2&4*H`kQJ<5j`aBbocz!QLEjp_C=G}VhZT;i-x__mAT&#@lJAMAb zLubyNJ%1)UdiKK)X8j8n&%iIQSe7?*=(bx9FXow?6l?kNYIf&cS$@Y|$CmRGS$=#) zUdWgwe(sL-^%M5~sDF2^hwq!GQ>QO}q%<+Byl~^Ai~G@&&$s10B0@hA?K-OY=EWxJ zs=nIRAKF8u6uK2b(LXMWg&QI&7abjIbMz(uDP$5u4~WmXZ@zlf$0kbWDCLYR!(VnB4-&1U& zbdEMeRQQgLb{*BcbYc^wb9DGrgSW%b5vVj zKQlQ>uC&cJBsUR}n~3%t)z;U?CQ9chOLQ|NTHZ4)xIJy3wCAX{b~!dtT1PQbVqLqu z+s~BVFC|&gp5d~WiwO75i(l$0xI!D>H zA~y@e!bgxqwCAX{LM%2>I!9TeFNZ{ne=g_C`~LAm&wT%(XY4t;?Jh6}I$E71p5K4= z+}TGy@ruzBnKiyYzbfR)5tAi3M{Xk8b5vV>Gc!5L5YkS&; zy9pJ4+kXo8_~>Uw_Ve|-``2qTa+46P&KgfnG@R{Ne9)7WhjcyUbBBpCGs#-Z(QEgy z79CY{^!6kDHQA=MfBe62pUs}xj%yb_<|aF4#UcN(y-#AWOR!@45nXom^$c;?Y-XHZk%FZA4RB|7opNMuH zRcGWzCQ9pQLqsL(Mn|c7i;jvK&4G@#O4OpG&$y4HV?-GpZI!4+N7Y&5k*l88(T3(Y zLq8GiI;zeZk4%)-(T0eQ6jWZ>byV9WI7#n`>5sNb)S{!$&Wnz=O4OpG>dJ=5RZr_E zI}bmT>dt+Hej?g+R9)E+nJBHJEYZb~XgS;QfPCMsquMUPGozy{QJd;R_yN;@>7$Xy<`=bpJ-6NsyrCmqAJTE%hDp8A$eyxi{ znf_?2L@he1uC$F@^>lv}Ga#%hZLdn5V|^3!6Va}tTV2diruW1W6#zXD9b`gy_qum} z>hYgE|BLp~JZ*3Andv>TM0bQBh+@P!|I8yFc*Dx~K5oAYRae^1O4XBVmviK(kEnJ; zd)2F}!6Or;dru@$$z9%~HG2F@8GMabAU9w~M^^A^^L}9*J63vA1?hS{3bb0v4 zuA|!C;4`D6B+!`Ljc#^7Tbd)9PbrWrUIZMa)s_Z(t<35UxwMr@XT3=+hm`QMy0M z5^cOcs_hM)q-A1slqI?(xrnNlv(eG6qpCYmtiD=hR)j=yVQMy0c z5YbU~$}78$YI}nxsd}bA$`VC?)aU3R6Oy}c-%HdoKDz6Eu{*sdm!pi1vP3;e?Aah3 zM@PGk{(i@Z(mKleJ>4qw3Ll}Lh;|)SUEXFzM_Hn`z3G$x@U>rf9z^rEe&M;(Z~EkR zp8xyb{{7=W<>!=Gp4V%8gU^hPvP8XJg6QC?1j=s>bs;707C3;&} z^?4@e`Fp?VzU(@x?P+^(@z(yT7)A6~WufyPm$%9Gw7vJ}u~RFhVbd#LVD{GW^%KON zw*K9@9=>m$EPL8+c!EAcKN0OZs=2()3{legMR<;mAc<%vs`)+53{lntV$EhTi{584wq1$dbyqITlGU*up9qa4FPA&f3 z;V#s=Q_H5jN30Kpej?g+R2{>QOth+__pYq0X0;AlUd;N(cN`Oz=%tV-YF7wvGTmj9=HqM?rFnS2WMJGE##3?w1C zM@Jpe;d%L0?$qMNtbhE!or-9s>V?(lXnz*^IrqzB#z!OPsC`a}*HQAxU7iU&MCd1? zT}Ra?cae$GI?58oh_fd<@aMY+gtT2pwVhg$R6V1ktrE59=(Fyl=uXv7KBuIjqb$)S z$;CViWAT8T+jUgisU>!f(mKjMuiy40eT04@+I3WYUOy{3+7MCUJ388RRNJW~c8JqS_Jd{ZVyp-t6co zN3`+#`ag71+_Ae*rau~SrxxUM{rIT1!$9n+r|;`qC2G-8ZKsylL}?wJof)~aqN5EF zbs{)Cpk=c6N41?=V&^E`A8nPWr9Z0eFpz{O(;sb>s6|J$omyfOrFE2@hrcLwj>$i$ zc0_xBRGo)ED>~W`QRpb5T}QQ@T4LuYt)nc_EX>jJ$=zG88M@wcN{Cu?RNJ#52~kEz zS)xlJQH*^S0a1&NYCE;WCQ9olX6aa0-)wrKK0-ec?K-;UF4(cV(1~^qe3f}mR-%_e zqR3Hx-qV#X5@qh|*&Ib%?{jppB!qX54Cj&Ud-SMXN3}g0VplzVU(XWV5Q3QPh?Z#( z%+0gtsJ8b_Y@)P|vTN@43DLqw=qI9GN7XfVv(g`BiM}x;I@po(-Jq=xy>y_p_47yn z$X%dgEfb@oEYY`xMDt9}^ZVS^H;3&ys_oejyXt8jWr^Mt5*=KU^KdsIi;ix)3v?$( zX&q%(+Wt@oHn*NhU1>WjI?582lq(-;>%tt(H{`r{ z$M+w4X86ahquQPgGozy zqEhqIJZIAOY>1tsw2rn))G|K0<35z`^q%PcXsbjmI;!n`6FWy~9UaajqxQa8kUGbm zCGO`D?f3PntH!M8C`lB$38EN#8n>q{ezyL;{^>4OJ#$~*Dp8A$YI`=su6kNWTP14I z(I+~VqqL5?5ocoWo5poi_0pLY9c_pxbQRHlU$5=ikfiDv9VLl^99oOz|eP@e{z4Pu7aiIv~Gi%5CboTw& zxbPoW{XXxvsxv25Pd(qteDlrfn5d_+yDPiqQ{U(NzM1*FPj>7+`c=2X$c{o8A7zQo z6^JIXonH-Z@zEFD4k9DU_$W)%6HI+{IQBf)&yQ;NzG;n*l3m_1+-==Q_$Q*>M`P=t z<&K${x+j+C8%2;Hnl;3br6x>Z6zC zx6(vnUZelgeRB#l%65KP6)LDD0ZBx=M$7s=wNj%j(ak*3G?DF*Yeg>0@1%*uyhh7< z=`=}{_R;=T5$29pI4_C_Z6ew=T6V{)CW+EM$`bWD15w2MnUcc!(aWOE)W0^b(Xu`z zO%k0zqg+>wSx?7DXcN({(Xu`zO%k0zqa0DMGn^Og%?ROq9lk}QWj!F8BuZB z8$|8LOl51AnFvUQs3N7>akmpoA)p-n`) zM$6XRwNj%b(d?Bx(d^G;d;Y(B({&5qf8;*9M$6VSHA$4#XhkaXSJWYfpB1j_IHCnb-q)DQ*Mp>dWd7^`JPY31u zc8!+R;WtT?)~K7|$6ANqBvD$UEYVr7(Sla9@39&!t8s3UD6LVp+7TpugnuI1eYC8` zxk;k5MoFTg#Nik}@X-fYjh5AqHc6D$C|OCCzT&gqM`#n#uFUm7kTb3yrNd&k-%wk2X#;Uq71tiYF?UJqKO1lSfaE>S)yBcq5~iGgv-u7jn=4M zKN^-Oth+^xiB6zViYUf*fW{79}P>C)+kx+2!elSfaE> zai+vrKbp>Yjrs^}BHA@7hYVBTqZJVqzQafRSg+TQwnU?3wPWUe6cO4)v};ta9}P>C z_EC~3&X9m;Z&mcU^Y%^m#IDh8_quqpp7v3)+Ohg;p?dvjOEk(7-EflXfNXD5ws#J@ zI|shku2H>yG%QhCqZ3v;VrCEjM6~;;UOyU^DD9&a5fz0FAMF~|>qo;9r8PQfwWA;N zp-n`)M)ms9utaH%vP2WnBeEWmKd#s7N5c}OHR@*gMExj;`Uq_z+BI6%$2nj36qYEh z(Ta$QVuz1*AN`zr@f6HQC#-e^LueDxu2H>yv?UrPiKYoyO2jsZ+BK@zkA@{m`zTxO z_*x;E`3RDTc8%)wqhX0UA1&68j#Kx<5`9CSD9-L>SO4@U9{qkdlXHx4&56pI#{(<{Ux=T_4 zxP0c+2iERi-_yY|N#sN8bh2f6cI5DlM`u(2?Rx7+{ky{%=lJVK0~0Ov(Y~(^z6K{W zKO&!9cS&w^ToF;(>F`m;`g|S!;JB*PN59}+JYqf?1JQ&1f@yrEm*l^jNex`5yY&0+ z8+8$Ne>YDwLpSYGqR+%gwCJP#?ZFqyyECz(KG9#TmFUXuU(VM(p-pd^xWC*n);I^& zsC_=_eUz-o6(+++%tI0F^HH_NIWSS$M@gdaL@>oRh}wPh3Ad{$@X@-6I=iv>=+|Q; z%J?Wr6xuAtyhbfPs@CBL&U)HM*{bnvVTnl@NFv&ORIS4gOqBM~iij4qYWLCKb-S1X zAFYe1*+-v^ktpM%brChsN7c0=fwP|WQF3JiW=n|hPei+qs%u386QzBWBnsaI(VoA` zoL?)FpFQDs%h%V-a^xxS(YlD5ee@gC;-hsDHT$T#o+)tFPvD~yt-e7f!#@%2KB}%~ z3QTkYAFYHad==3?AN^vCSzo+zH_rLd`E`zHBJ7}1#6gvg*+-v?ktj1CWr_N+9VCVC z@KH2sIj&dN+y%~h+DFM1VncTF4E~8|_tEoiN0HB-#<|W!5-n;I+aPN9(J!@u=r}%F z7g4j1eltd*jE|B;CD*Tf%xl!*qw2cQw)iN!ig8tFqPrVNBHDdaT^AadC_Nvoh-gu* zb|3w++ePFf(>Oj_7g4j1J|81d#z$GAzN`pY-^015nJ3+seLkwLT@IY}^n4UGCDyge z8{S8KgnuI1eRL~EjTVnW$C;0^LT|@Bipe-v2SXkAB}eN^oM(H0+N ziLT~}ripCld*tS4PdJBKe!c#Z+d*VmU!38OGaqG%ZU{kWbTA+FtHA6&`kfewGCoQY zMGu_;(aS=3{%Uz*_ffS^N#LxfeU$8~A^e7q@J~d$kE(r20u!a@qa@KZ8PeQ+mL|K8 z#e0KWd{o-=Pl1n;M1|j#kI<;yM=!gbMMjkI(YlD5>z>qJI)SsE_R)SN*~Y_b53Zd( zcY6J7a_0w=B4SZnlFlDLxpd%QDpDF`d73zB4enzDjoN)w?WGf#DD9&x(HS8LqJwkz z2j%h^3sh7xi1{JwZ+WC=b^!d@A+d*VR86PEy;`k@^B+E5w zxnBR-$cWND>drV5{hpBZKEgi{?LMmZduof1Rz%bZY|n$;N52x8MoUMgagOU*qKV)e zWWU!cUq8ANBT>djNut8jc)!pM|0yIA^VgZwo@9Zup7v3)gBFM)!aou1KC1R43rw^$ z>&LlXUlGwFS-X#Z)$Jm(*%LD#t&6C6KKeq8L>V8gi>UdyUhSI~IO}O2owUoF@Ad}& zM6~;;+BYvSQQAjYqHh-G%skP-xqMt*b{fqeg<_^vex2!SF=jpEqjeEA`{;LLBwFl5 zIL-{eE~2itW1$n_o4l?|I}t`nlo^>=qSxiKzBen|y=Q;xp!^)7EM(P%|PMRmoi%Y`$}tMXfEA~CN~y@OU*qO?XU>ZJp1 zBHA^ochCw;l=jhzh>Gflk9Hr`yAy>aN^7)#o#~-dXCF9s#o%7}hK%)x2FFJJ3^T@l zXcN({QN24+SfaE>Dtk=70ge6LAlw4n*dXk9HCZb)V=R3P!qt4-nB}!|QC0e;g^^OH$iP9RK zbnWu8lU4(boOw$8%7z2DDUmQ4K0=#_ zc8%&Q#KID#eY7H?U<;!5vHo$liz)EYN$c=uge6EK+BK@LzG;a@Dc8%&)<6()?8YPM1T$8A6xWWNM?LMkk?A8mKC4qW%-h!*Qd8z)+*AN{B& zSz13DTeTzYqqS*t_c+#aEmS3X@NjogTD*4`Uv!_%p8Cej`>0w!8ki`pQL@@` znBVdY+C;Q#RIMKkOqAAWMMOauMD0GR){h1zI)O&HYR5zvraposqFtkE{b*pK6KJ#& zqQZChXxFG(KN^@Qtffr-)@C5hr}4#;8~MC}??>qi3qi3&N8=z`s2_dM>zb<{Z9=1adOJ2xw4{D?Q;4RC#QgbDRij7x^`lZZ+Fkn3+#dGS zk6zh-^o0D8ko`yH-QkRL{Pm-Oi5AEDdlwc?Bz?^ezEJX&y-Pm3?vlich|11}kELUM zB0o=k%xhGwAB}4UN zBigh6d}KuF*||XPsc}$@rd@Zek(Gf^jOal-OLjmRFD78le=G+>|?#U`lc;e z&l24z5S^3l?AKjC{AGLAUvxW|f~;p(-&_`gsgKBZM0?h&>zQKE=s06NNpw)}1hQVU z*}I%Z-)qnMZTAtyqtQ|y9cQesi>P^q|9g=UrLWhM>zS}t84=lzXwQ0eg;-m%o+YY{ zOl2!=6DPw?>SKO}udWb_f#^6{&k|ksbY=^bGB1mK&E02dviqpqcR6vtGWgwm)<5ok7>`EjvA!;%=CS^%$cWNe zPp-L369-_RH)K1aJ?qs~jBUyKiiir|;iG+qudZT@f#^76eO*M&S^u>AIO6e9I_uq; z5@KEGjL&)>k?n}~tXJ2C#-P!0#(I`$k|#PihyQ?l-=6jAy3iPij+6B)QOxY2RZloW zXKZuUf5m+iQ;_u)tqVoABigfGU1=MGM#sr|k|@rQNRIbs_+GOhYR`IgrELsE$I1G- zh?=whtJ9M8>`L2fMV*(#Z(O=xt_+GV%qZXAuWMBkPtn!fC}aqekl@y_{U zM-Sh4;LvQg;eU3}$9sH~vgVFlUH+Q;W;`R4JFefeb~z5Bg|*ASXxAcRJD zMx7}csZn+9a$usgMkigxxGijp!)s?n^iP9Rah$u9RSUP(esZn*MZD69bM#(jI zAcqKTBHA^ot_uxJl-6iPM2lqY8dcYY1|~XzM!6MYi7-rkgf4RMk`v+1Z^VPHG1BCL?g~U1tv;slqKr39oj@3xxRknSg)?R z3rv*O=%lM}RwetPO+>p!)fHlaiP9QniOvbh)D!I`vc2h7`*3%j#tHy=f@DbWXv};sd*$|j0tI|3HzVKSuZ5~rsxwZ=IxQCg!F5iOFn`{?K0E~em^iLE4i zgD}i|gf#lqKrPfv9jCJ_=Ebk3Q>OJOw^lD^ZJ&s%u38 zYn1lUidHtjKN0Ods;(6YOqBM~iijfLLDcS}>K(6|AjFsJfmhFwqHolp=~VBp`}y5ViZLdJnNCh;lwk5e3O&%oDZv z=yPsYQ!pQ$U$2p<#YfdOcY!rZ`zX0W?A5dhjoN+me2f}pt}|6c6of(4?xSCdktpM% zwGy@X=r>~|%3Novm8iu>)pen5@zF_FG0sW8Bij+}KB}$@4NR1tkFrE(g=Ff9;{51N z?#_Xh>-ArDJB)1h#P}#n)RP2J;X8b^pC5fbMxu<5vP4k<0kShfGs|hz;-l)?<-l1_ z&qq-KVO_htDg;qe0{=v``>0%Ii7e}x`DjH%h41juJ|Dg4UK|-w#z$) zkJd`m;-l*N`nLEexf(oslVms|{1egcqw4zlz(nc!XhlSa4l2*=KC0e}u?eD#kFrGl z8WCu;=V$!A&;Q!#zq;?(wtYVO?P>8*mgsf)tnaPL_Rckz{@J_#@W=kG5ViQ|w%b8G zV?8||Wjhwk2|*k)!9Nl0KC1SBXd>&G`6x?ttYaq2as8#pH0nks#z$GA-Z!Dq@-rot z`RI3IB+AT3S)yZU)Z(LRpOU~?Py1*^T{YmJh;|=U`;-JGO3z0tA}Zrl@eZsOA64%c z+5}O?M{6Z&@zKlE;-j?^wfN}ckrAbRv|mZK@$lM%YiG}$UO$`M`N5=!*e}{k=Z~LU zI&d%*DY^gs-Us+6qTNT;UOG)=Ju@Gzh$!fSsQtM9X}61bj+yBBXstvoKH7_sC^H|e zm8iu>KN}fQ+DF|PXM4XVWH}h<=Xbw;$37ob?`hivQD#2M67_c$fJU)GEPel*cfa-vQHzg$cUpXuC3^Q*B?!~>*v;z?1+COOA^_>c`JmE%DZzj zd_O#$Jaz8F=wVij?)>QNfq@oR#m@0oP`>vR`?aU!CgBs2kPyhezQ zH6Q&4@}KUW_#5|x)u@*`hz@AwG+OXcye5&iVC$O~nkem~WCtx_GJM256wy8()%xaz zCQAEgMMS|CM9b!*_?>be)%xZ&LX`2*T8ZZ8qXTCs^--;FUL!;qAFY+B#YeTid7+8Y zKFW5`+L9bjeMGh++I>{(n-`iW?V~Kw?L1Lrbo!LL&)tUIN436rjSyvgv{s@PAJzKi zHA0l}(OQXGd{pb37n&&Tqx}kqhfbY+;N0Ng>Q$b|as46GG!L?TMzSCNiD>sxt#4jv zqO^~aM1^Cg1F}6&Hh+I6%W=KdH?I+*jE~kz)Z(LB-@HbMGCo=>QHzgiee*&Soxn$_ z4qC`|MEED7-ACm>>eXvXLKB_9M=K!;Uq!UfN436rjS%I0v__&9AJzKiHA0m0(HedQ8zL%K1vb=NkkAv zv|ne^`sOu4l=0D8iCTPA>zfyvDD9(@cFBN}CVlqI_1 zwYln}_tE@4Z7n{k_00=Sl=e}!gVsJFnfZu$D58Bns`bqaO_cUgmMChRJ<&ArT7BZf zfAEIC{*7ntKC1Q2YlJ8>A7zQ6%NvN!3DNA@*E}}={^dWh&quYsd5sWde3T_x$a>*9 ze6-I;x7~~58S7~uWjkoi2|ZlDhkqj4eN^k4*N8^PS{LdEY1HA9L@^?PX!?o}p1)4^ zZ}-tlk!h4ZKgtsIJ_@2BJpU#kWA{<5Z(buBWqgz*nu-)VAUarccS5vk_ff5HUTC7U zj~3fIrT3pcbNZ3TuBd*JeoqHdk)UAP^9cV$wEO69#+dbtk5)t!a6#1Wqgvm*&>E$E zv{s^)vQI;sKg?ggBM4YtunNz>%g^HG*4IuU}XKU30M zoPFW%_5TS`i;rr3^BU18GaqG%zE(7ud7_x%r#Ye)A65J29h~hh{+0Wy-KD?p;>f;v zKPPXH>YI0LW#taLkNS7#X83-1vh>Z{lsBCE2>(R1`>5JCFECM;^ zBBHX>;iF`IL8IOo(nNmG*pn;8zi$JJGhN6WNYv&w8~dSzw}c)>lLnS&wKR>(zcwF%TUm>+2$F&U&@WTVSGe z*7vW4QXRAsQDf>OvK`T$^=b#Lz(nb+XNeZZ?Lh^^K_P9=dbK-I3`EDt`nrgkvtI2< z7MSP+Szk%#7i2r4J?qtePl1U}ko6o<@1KKnPTmEw2iUAvd+EeLbiAymhzhq6oe0fY zuXfN1Oq9<0iu#lw+Y#+qf8Kpa@ti54v%Vst&@7^TtXDg~1lDLN(Q&fAE~4hFSNlB$ zCQ4^L+f`#()QGMc$aX|~)~mgA0uwFOX#br4;0u>8vcfrhmgs7pD8~G3RG*T($OLfi+5JJ-fbsSu|PQ3}5Z45twMHM#sr|l4$lyo@n-$vfaJ_4~Q5vI!@M;MAKwQbN5-A z>^@FXrK7H|kAdhoSx*ubepfz1qxP|0?Wz%&C_UDbYnRhRXd;3nqCM-?js<~<(qlbK zbT&_Pa5j&=UazhOkAdhoS>i@MFoU;tXF$L1SU#ny*pFViuLt@iPBk55`{J; z_p2D|)wRnp5FID$S)xAc2SoigMkf1MuXZd5Oq9-ga$P7!B1Dixw2$@bYVg2B>8!7a zD71=bKdx6-+QvY1oUA8_f*dqD80%5@WFG6)_4R>?(pk^0Vtk`8&3r_*BigfGUAr8Z zsLT2*dg+X@LX0K)`aIEIBHO)>{@S2v zcXywG-V2 z)sg)D>kHRH3&&acYoW2NT`nE#o7AXzWYV+#=I)}Lpz1EIxzBU?%&8Bo-M=n#U;ii{ zbf<%l>$an_eVuu~x%c+tCl_+Rp5MSY+g}a7LX1rE?r^>S)R{AhWi|MQymj<*Mg}9= zM<#tWcvzz4Bh!)LN04p{g3P1nE+y_86%m!44r4$09cyGd zDk!>(KXOl4qJ^xNoem$%j+yY&G?8bpIvMLfr3aOr8E43kJd^wKf{NP(?p)-eN^uO z5muwLk5;rA9R7)D_ffrLL0F>ne6%8>&>y0GKB}*;Z-6M{qqP#X_~^6l!-!}0MEhv1 zL@hq5chv~1QQAkz_4UYZMEED7-ADBv5MhbZK3WmcB3ZkS>KzLjAj)(V09^ zoXy+G)#h1_>-8QG4G`sglp|WusPG*=+I{pn_u{GWQI6YZQ05~b&(EYVpZiPelfzs=7_^*$vH5M_LnCF->aqQZCh zXrGTh?_N9w^HG-Qvd{z3!7C`(i%)k#6r6V85B$l87MTQL%4=A*R|wfLys z@2Mp|N_Kw1iUvgZC!*a)_3lJriPG~?mgrj~yFql2{r~a5{N?QZFKyXV5OVYLxa-cgDFLUEabHrRSq0QDiwZitW5cE%l>% zPqGGxGCoQY1<7K}6Sd4ocigU~z(+}<&?JarJ5SW&qk1R8uo|U(bi$rwAPSO*_W7vZ zH!mzv+D9uQS|n?qkLq3C8X(H}XstvoKKjD6_-L&}Ek64B$cWND%JwANCwZRv2>(R1 z`>5WDuz{>+j_X;XSLKQJ64~xO@!>ys!(ac#vvwbittXiqnHV2siQ?+A*C?)%WN-P@ z;XixLWApao`tQ1rWD4e^EYa7ACXw~Ht5Eia2P=PkKAAFF8!v9 z_nkVs{?OW)(`VO`#q~#%?)tg4Bs=2Y*w0Hma`?uhvuPq5HTTVvcjspKet3$zZ(d-c z#C-JK?sH>_uF9uAy33p8xL)m>*96hAd{p`>_50@iTKz-|^U+u2Qy}~1H9^#Ly?*KM zPDFH5=s=@5u1|BF2rWLU_RR}Sl$ei-kCGj<1_Wn>Eastz_W7vVH!mV8gm8iu>|D_Z6h#7uhqO^}z)IkgW ziD>sxwQpWvqO^~)M7P8*(`||H(VpM7`>5JCuL+`zkFrEPIS>`D!^hI&`d8%VN7cT0 zfr-*SS`kqY22s0@s(tgCAjpeIr93s@$=kA65J2H9?f|QI@Db`b5^_9DcsHqs2$nzIlO((mskR zo%s9a1tv-#*Rw>oeAdtT=v^S+<;_y}bkXf7va@-NkFrEpJ;^yA6N&ke$ub{R`{p&F zQN~AEqF$4@N-`Mh={_ZD-@L#?X&+@fXrarSkC=xd+UKKc-@L#?X&+^YUgxvi6YXuv z_Rj17=-j{h^IQJNeq68i&1-@vk^h9~;kPksKUe*Ugc+2^Bb-@GP>GCs-@ zy{4eiOP=W4e))gX&+@fXw3;hj7;!PM7xiwee;^oD05uT z67^XQqUo#<&Q3_Q`>2RK9*xrHM_Hn;-hcYc=|>*BqWVetJsp4+F{4L>e#5P7I`*HnO+>YYWC_Nu#iTaTU zT#@~GqL%rn+BdHWjWRx3D^ZJ&el9YN(mqOd&_b3YLYs*8`Ka1AuL+GZK1vcDWP2jd zdOq^=QMGSg6GWN$XstvoKKg?DXd)Y#7$2>bsKrOszIlN)O8Y3=LCg0dLkBJRC!*a) z)xLRwiPFdQEYa7Be}X8kGo^p~uYd1`5C6gI?DJ8zZ(b8b86Rbd;_9;3D(0i- zAKH)WzdJ2H$`ZwOB~KLh2JhuGYVlFEZ{CqZ-4i!E?A;T8>*Dg6Qy*Bne?4~vM^dNL z$>!x*z`l9@-MJaQAD-gwn-`eq_&)kk`RuwUWC2k{L?I2tG9Mju)VxQ2E0ZP#oo>2v zcXyxKH?IkzWBI7eq&wXcf8qXLEYVG&GP=uKVLp0UUQ^zukTMeV6>V zx+gZ=6PD;^<}ezZ5DZ(f@C*Z7#7lx@+d+BYvSQTu$<`{;xnw1mmGCo=>(foWgO+?9vc^_5#<^?87`)EZS zwBVnJ_TzfBZ(d-cw2xLqRMaGCo=>QHzhNee(hn zrG2zt0nw7ad4Y-2K3Wk`I4DLYyN{}U^O_*a_-L&}Ek3ID&1-@vJ z34E05poLjFBC;LPJ|9*4<^?7?fsax|;hP}ZOXNGFuGfz~KdSc4Yl0}}qcsw>_^8@9 zuL+`@kJd=k;-hNcyud_hA0<0z4X%CqD|qlvM7xikceWAPIsCEeo(k8QNTTAJw)IS- zeN^q67g(ciWMX`jBwExc2qVf2-{PZc-@GP>GCoQY1v!w#b*B7SZ}CyJZ(d-cw2!hK zw3dY_?idLFM6~;;+BYvSQF=bg5}nHv9ca{7@7Ry))xLR65M_LnC0fuZTmaGTqiWy0 zCWtaV$`Tz*qZS`k`{o5EO8Y1(Agq1!Rz;1N5y3wZ?LNBYb~pv|QI_a-o+$d2WZ9Fu zUr*S5^kR%e86T~csAWE?_RR~N^=_5JCuL+GZKFSi633&%Z(?keo`!5{7zW>keqnF$c;?XF5ev~CD0ER^8JkeWrd0x2P z?xSkoye2ft_-L&}E%Q;eZ(d-c^n8@;pe2eNKEgi{?LPXOZfB8YJ>#Pl5d~Wiwfm^r zH!rY8X&)tt;%W#;VmnXNa$J8oMvXE)N)iRhV$2h@_~_%25v6^!UrEOF&3iSHAZqu~ zPen$QzRpw;Q4j`EyN{}U^V;I0wGy@XsMub!VJg(KjzJ zQQAisxwQpWvqV#;UBBJn7M7xiwee;?i%J?Wt)ZfJt8XZ)U?fZMPFZBNjQHzhN zee;?i%J?WtbS9tmy=B?nx$ci|{hR(jA!_kat#97J14p|j9&vxAyLiCG`%ax*e`xK@ z>9cFe;`*aWcm3R2k{$7H>^%~1J35;rsL#0f_TwiPa&7kV8#r%%Y-MGI@KJepZierN zCrjVFO?ktqkMK`KyN`a{?eNuSPoas9@1q|R6x|bl>7KAeH)J;;iaPw>_vHJfKDsGC z%c#D2jSwBnNBxEN?&90r|Bof=>42!P8a|f#sDBODH?I+*WBKSU^534cx1*;snrOjC zz4xYxyoG$fC#`Q@Xri=_k{z_*;fU~0M7xh_ee*&SrG1no>U9R9h}i?8Kf8}=ee)V2 z%J?WrRJds?Z42|!O?g$hk7|AM8X?N~C`lBWLqoYJKw>AqwGy?=N436rp^4Hy+OL3U zN8h~AL}?$bh$#FMBa_`nwZ3_c5M_LnBwCy`VLMOM;-gyMyheyJK3XeLi;rr3^FkAy zz(=VLT4^GAjtFfc+UKKM-@MR7C-Biqhzj4~quocfzIlxh<$Sb8q81<3`sOu4l=IOV ziCTPA>zfyvDD9(U2Q7^4i11HDyN{lCmN5m_nOLHUcqWJ<^5;jjzImZF>P9BUM_Hmc zGw0)QOp<3ZGFg07>zmgIQN~AEqGM^);-gyMywF5xA7wjet%??_>-VJf%?nMGo{v^U zRQL`b?ekHsZ(bur86RbdF6TAc^M1NB<2qV6?iKZ_Vh{{mi*}36IyGZ}SJ|ETk<~2f;@lld! zwm(l4N2A#r7ry_<`>tEC&quf24&#|U(LTy{(DIs0eT07^+I>{(o7ad&$66O!sKaN8 zu8KxMv^Oi;J8!*b_v@tHM=wRDQTqHSNi=&UPc-{;*`DA2rQHMjOLiaC`sOvFQN~9} zqUpG^0yL`AWk4v5-) z^eMNCc*c6#M{6Z&Ij+APBT>djYb9zquGjkJh0c1~NBfmzOy4|QO-4kvBiemb>zfyv zDD9&pQTQf^4z7yO>zTB^d5sWdj_YeBYVlF6Z(bur86PEyLYs)tETVlr`q{`vCfY~c z8E1RnJdi|$eRr&RLt#4iBt`THNU&quYsd5sWd ze3T`MyIX?joF{y>)9B9#QHzhNee-U*se9tD++XP~o^o;d%&8Bo-M^meeJ5|D)5-3Y zXKdfRI|v_@cjspKet3$zZ(d-ceMMNPD#8Myi$NuHV^5-#*r>J;?$SrL(@G?nKCTM0?h&J;?$SrL(>w zqQiXOtI@(a{E=h5+LNpaqDxenGY)+OuBm_Y{~YJ=V{! zS3-31tXKOzH9?fi`WlH^vR>^@6qqQT^<p$ss zI0acx62;o(%o82-DS5;4pM2`@pS{MO^=hAzz#64z_$<*^@*3^U$@b2*uX$|#{mXx1 z&-!h*gLpJbkM-pGdUPy6M7AT^vtI40(S$~sbNCez6@?BT?OA^*GL6z%&l0^(=s}}9 z|6aCte!+Fs_>w*A)gBOmHA-haxf(o8gdifa9nqfkzv*@ukB`#F^%W5nzQad*)~h`r z0&A4c`dW!vj_cKq1%ZjuSzSAz%ED4q4>x=@^9MntwF+Oz(j$EZ=}xSk}6{07mUANxmk)tHf2 zm9M^0SAz%EC_Tfkm8d1_)wRokiPBlmu3}8Q-h4#1BigfGUAr8ZC_UD*L}h(hC-X!H zeVnhp>`>dsdUfq`6GV$^m;1gt_)53k|Fn}8YMg5$x_IaOv3w7R>}LNKq*Qd!S+kq2 z+}+(5B~fPf#1ehGr;|uTkKFYClWqI?QFZO|p#$ATS)$Wjlv}gkck1l=Lu+SFpIu9C zKmDNxlkWPtwd_6qjlEYQwRU-FWrbL~?B5-(E}uGcCb6tt-tZ)SgnuI1ee~mQha+bA zfr*Yk)^`O(ckz$h6PD?ZX@dwyor`{9M-*IziElxp;{e@!AWJ1J4JUR`M$n5ccM z_ZnqaF?xbH=LBsc+BK@Kv<*y@)@VgUMQy`JyGGS@p@E6g8m(x}9khvP*QmNKG%!(G zqZJVys#BiXHL9*+3`~^PD7iwcND$gYv};sd#Tb|UyTYL}?#oiO%JT;%GD*wfg3=e@!AWe_XGwz6nf}_EDTE ziGTG?V4}1}S)y}ZZ_5&K?rG;5*|z(rx>h7GQCg#99e#%Xqdvkv5$!&zt`!MPl-4Lq z^o^oLki`f!vJ>HDc}U%$cXqpJ&^!ZzNzm6s=yVZ{Q z6=K;t{ikq`k8(k|BXv)))#f>(#ro04i5BWdAMhkg>qny`I#&H?D2?uBN1+b?vJg!Z ziTQI+D$yge-4kzfuk4;!b8+OoZ+=ex$dSW09-U1S*|_)i<0lseX?x`p9Qhri>PP*% z!x?95{phN^N1Q2veNsdySISj-Z1GZ6ew=s@9JNCQ56xBBDjIc8#j_qk)Oi8m*|>5!ytwYgDZt4NR2Q zXhlS!QAE2&)%wxEL}`tZ)sC2FAVQmnc8#j_qk)Oi8YPKBiy+$b)sOj=w)y$!;5CUn z%a8SH{b*pK6KJ%OYDZ`j(XLUoel#%A2{c*>QRolR?xSk`XkenWM#*Z&!Ky`Hr2}mu z+BJIKeHbII+yy2|Ym_BACu#)Qfsc-;dxCz`M4sh+RIMKkOqA9rTkW_ZRIrK>+C;Q# zRIMKkOqA9rOLQ|&6k~omVqK`bqSHwed6w6xT0a_?D6LVPDY4d%`q>glLYs(ojcz&2 zQ{bZ&5f#-9AMInkT0hzrjgr-l@J~c&6Va|wwSF`(QQAjYqT8ZJ5JmlH_KqJs^i2Ps zU8AzYc(R`MQL@@GyIzPQLYs(ojjHvdZP6%8^uu|gnZK-){hOnIdj9C2ZrL@e){h1z zN^5k&YRBrvdbNHuFj3k^Nur|A{@l{fqIy2^=bqI1(ZED$jk48_mCr}j`q98dX^pZ( z6HzHNikQELnC1MaT0a_?D6LU9!?)LurXcDg#&|^gSg+QP1|~{tv?8LS*x{pntpA*Q z@f6HQE2?&cHWBR_RqIFFqS1xE(FBS<3JHLBK+1}5r! zbgcT(LfsQf)UU7wQOrlN_O7&k)c@)7uEVj_<~gEc)sKcGTBsl0@Ve&eN1M>-SoNc! zh+bJg3a?EQPxhq5F>9QU9O*7T?_SYe{A(9S_8+}Vb{?|-sJuIzakkcvdcEOn9{dy0 z?xTABXjr1-&qsahUwqCi(N&QEhz@*o#C0YdSEY%(Hh-PzGwz$C=A&VW+Q)jIK^0Xy zLYs(ojq3HIVTsZjt%#_oZn&DUY(6?#qk8>lSfaE>E2?&cHWBR_)$2#Y5~VfD65SG2 zrrQz+KI*sa8rADZ!xE)6I$^b=@Em44uTi~zG%QhCqZJV?lC^78uOAIdbOMc5Qtb$B zBHDdauOAIdbOMc5LKGTBv};ta9}P>C)+k%;Sow9P^X|ilXNFH}v?8L=CZb)Vdi`ii zG|E;x&I&tJ=fFP^?LMm4kA@{mYm_C5GbJE9Cxo+Kzi0Pr*{)H&el#pm+DCDw#9BYP z>^15mw25ff=$6~z6!<7hbTv;D$L!gNI(+<2n#gPO=brTX(UxeGt#;h-M16!d5$zh) z>qo;9rG1nodMQsdo%6c8rGIy(>o44H_t9;)gLtx@_EEChF}*AV5ur^)yGHf;(UxeG zB%0ljCz|b-?d(6evHm{0M)ms9utaH%lGTobQD#O+LYs(ojq3HIVTsZ{S`kslSfaE>-3;GeKMInFAc<)A zQN4aNEKypcBvEJ*M6nH`c8%)wqhX2C8m*|>5hM}q8rADZ!xE)6S`krb6-4bC)$2#Y z5~VfDRy$rT3^N}=649PHK8Pb|^b<%yyr;qd-UCH+Tl@vq_fj|Q&I zb416g9}P*gP(S(+Pn4`5Z9t=A)sKcEdS(46<^yTs$(rg%Z#sBWckvh9E4z!2y11u) zbaDMrcl-JzJK}fVl}Pp?eezs}SeqHG03;x+0cNFv&aYBeRTA&S|PwF08@td}8f3N*@IU4F%D z)JJF&(XLVLdVOm&N?r?1FL|Oqf+V7ysCIR^HAKlPcfxb{2$G0)qT034))1ZWIunka zKoZeTRJ(H58lvP?k)b-}8Au}9iE7uGT0^v=bNC>MXeX*&6=@Ao_KfpYqD|cK3M3Kj zME`}`VLY>^;yL^*y?bHt_#MNW5uv;r#)or_6%j4EKxq$%b^j@pp2Lrl=$>= z!~cROT6zvYN}_wt;m1KV-;*r6S%{{IC!0HmuM<7oUHTRG%I?y4T^xB1|2^_Y0``FL z?+!EepsSKAH8>B;Y8BEHahsiBIE3r1Vwl0&)gH1=vJO+ zn#gvxf49W>`1NwVK7TJpTtO-Cr6ZOwYGi7F=$@>1MEl!=uXNM@m;EK)?$TG?H&~(t zjmpl4kM;@(t*gdO2g4GzS3vlzZ_#z8ute#sXNe}FM@+^L^W8EnS^tFF;S^+jtwi%< zJ*cPt)5x!9()yINChOU2q1#SU9SnFF;}Pv+y?!mUC0Sn)QQs~wsSzjwr zOV(?hUs{v(ExKOclB_3*Vw6FiV;eqd&-y2)CF@C|AX$ugqL!@Jdg-(%>$#ee8DUw} zCWzX{dcCHkHCbN?(V|xES^q`1izyiE=hrEsAP9~2ykz+Uq5!sGt&-(LjSCMJ7xUylKvw0N}Et0io{g+}S%AC!sm8fN`*ZMuRChOVSyjf8t zE(jvq5$##8*XFfktY?WX=ZU6?Y-ib%yI)V(v;NC&2a)+Gll3f7PY@a%jP-AIT{TV$ zQA^fq9kg1L^|&fxtsh+#P2$=SvK`T$^;s@z{Hvn1ZpM zC7OVx#ME!+iCV_`$K8(NAxe++?0P0out*X_?PI;Zo~b2SUlCC!ussjXb~OcA z&l2^sr2)~>*^_0g|6F85>9M{=>q1*H)>lLnTII7|maa@e*4IkZlJ#2u(a<9ko%QTW z+iOIXI5PrmBHCy8v8`gH$9k4%k|&D0VPv<;_w8f-*W3#u%lbWQm&abkSR2vZj;@8Z z%eVPYp>*wXlth{HqbyN>oe5cwYoghk_iEJQqranR^rnN|#sAy=Qg`X7i+k2C-+uZ- z54r}VnP0Pu+=)B1?2tB!H_SsM6`xcK`aD z0u!~5^*)2hRgA)O_=qtc(LUCz9bE$xr8Qa+QLqJ38S5=Rs;&zSOqA9ryXJ1oXT6Ug ziD=iTx-K*@QCg!c(d|4@oO?>2dU5|pUfjQ7*QmORF)&eDqZO?XgEkTE8dbXv2PR5u zv?8LD`>49+E-=vvG)k>!N)w;;K0=#_c8#iQ?gA5?K%*SdnLJUUyTYL}`sqx>h6+mLQ2}*QmOl zDKJr5qb$+NeNp!)s+ox(I`nYdnHda`;lzVe{Ie^v1?SV!w*c9)+kxyEc}L#&?cf?qv|~y0u!Zu zlq8Dtp6Qwm;QMDud6VdLY>YZ8w6Qwm;5z)yts@9JNCQ56RtRzcc z7KVt>CZb)VYW-+nqE4g5&M*C1y}=g_7qh_~2BhwZC3-new3o>CuW!+Bnfd{V47xR9Zh8B~e@bXw4ek%??Z5lS=gPf$riroyxmQkGi;g=F|t) z?q46|;qDVjgH9(qCePUV(G|i+<=x?ov$cM7Ro*Zvap9kcb{|#meG`~ysgIU+%lxpQ z=q|n8JzpX0E}gEQ zXx>Lry_=Q#=riu^j5y=m1ktg4^pFUpyZBcV5nYwtAnRpo_*i;eKj&YQNX&N~R_`Vh zm?-U|WJPZ3sUX5X5$!&z);I?yO8Y2DR8-bqv+T+Ce9W(}xA>@fH=!noGCo=>QHzg$ zy|eo@1wL9U(ZYOm&OsaKI`5-u9e!Yq(mpzA)%dnhf`1~~eN?T(4@{KyQI@C_)eP=< zh5FH+Cv2aOs`qDVf+*voEYVHTChj5DOJsY;uW1&d79V}q?O+OglqEWrMlC+7t`!Na zQQAih7GQQAiP9Bc zM=Q~20jTfeZ1K_O+%6*1D06uH^D%0a@zIKi zmS??XKC0f8EwDyuAFY+B#Yg4R>=gKDtwb$8s;&zStWnxW*;R~*K(c#$hU_U?lynA(IM49<0OLQ!a zT6|PpyBs*{X&*(Ej&<#_*JkP?{1egcqjCy6GL16xQI_af8nyW7#Tc`m@llrOoC7ep zQk*8ToxdxaWj^{Xw}Z$u%J?WtbXf?diH}~hnJiH7XG$zSs;;kZi;uFa!CxyRGauof zh;|=U*VhLoO3z1GqF7(=i4N`;di76#;_)9n_cQkMqf&(#S=KW?$`XB3UZaEB(6@a5 zk@sD<@O}Gy^xJNSkr8EllqGs?p6H;asx zwFg97e6%8>qS)c1-A6A)rcwI*C`lB3o}kg4|0pzf?!WAw*nRXnF%o5blq3q0h{ALD zX!lXIPf6gcr+t*{sxf3I&)}bkb{|#ylmsS9&qpgF3c?_2_fhqJp-m8F=A*R|wH()9 zb|1GiY8ogYk!i2bU)bpH6sr2_}CbPrcS z5RvVOb{|!H=`@k`%=uB0D0~w{am>W8XL>p^jneZ`l4zO;QxHYu&yV(EB+AT3S)wy} zqOvu7w9iM?eouk3p7v39#@XKQ37SNNeJ)+p_x6?M>peHFWj`?X()T72}oF%o5blqI^aKs1r< z^!ZzNzmD4HqiWy0qer_Ze#8Bh?&6$_Bm3sPN8ZqFM`x1+*BS4<{rJg+K~u3SpFkJ= z`z{lG^ZdJWGkiZhoji5!!&m+p`Hnk3I(qJ@qN^{tn8ln zzZ{c_hzj4~W2uk&BUQ3*UK2#e@=@tj)#)zYSU=IckAgSZH?IkzWBI6WRNFlvO9^V# zXkk8zbE=83&G&m!`{o5EYCo>`K009sE$9yZiD>sxwQpWvqO^}zM6^iO?xSkoye5b; zK3XeLi;t>(^O_*a_-L&}Ek3ID%?nJF_EENj*0$t1dXm9E5$!&z_RR}Sl=jhzh{8t^ z?LMmZ&1-@v!ZKs;vas?RXyFm*e_F zSY?CkMudMN+I>{*n-`cU?V}YDEt0kSsM zsMuB|B(gwuA`(M6~(^8yp4eU$B>wJI#DyI!yM%?nJF z_EDDTa-L|<&qsGg-RBN-)_df&nVcNybkmi)yZh9>c});ye6&`g79Umn<~2c-@llrO zTtTCWZ124Fp53pLb{|#y<^?87`zR_PtbOx9)JKd+i1zvDmitJiU_Qzcg^z+PJo5Dp zjPFTS=$nV%DfQ8dF%o5blqI?<sp}*|3tL=sMo44HKdx8% z<~2c-@llp2>hL|$-mDPr{csoP@kEGPd{ph5*91|N7cT0fr--d(Ta!yEr{BE zRPCGB1X0FEYb9!#k6v~kN<6bC`nbMUqL%ASk4Hw7_R)SN8PhipS&oQoN3{E>+BdI> ztY_w<6%j3xwfm^rH?IkzjE~kz)Z(LR-@GP>GV{?|iCTR0v(w_E?u@g&ZyvH75&ns2 z_t8&BMwFh9Rz$Q&*6yQf-@GQWp7GIIiCTPgCq|7jK3XeLi;t>(^8#y>o{v`4K@0wg zX!lXIZ(d-cw2xLqbaEe6`{p%4l=0D8iCTR0g=z88T8UbGRPCD=SfjL$vK_R-_st7T zl=e}UD6TGhvZ!&+cX_kaJ$)_4tY>_bB|27@H;a#|ee;^oC^H{ri59XRV?Cn%I+NBn z@6b($yC)uY`|qCkf{P>j=KZ|9l_Q65JUW{uvSH|(cL(94^6uOW-w#hw_st7Ubo_Jp zx5&rUJs}I)D05vno zr8U~WD#G;A8Dx89KC1Q72~CvNXhlRtvBO8Zk7|8NLKB@pqmy+kNQ5H%6VdLYTAz~8 zL?_T_B}9knlxKF0YCRxA6Qwmut_Cj>gfS~+IvOF z?!51^dt%qC_UD*L^tw8(?qs2daT#hGquJ?$(0Sr zdPMjqqTNTe^-Q6O(i$a+iXuB55bb$C&EF;1a(+}>D-xP0?W1JXI7lKwn}~LeYHLM8 z6QwoE67{|bqKN!Ce60>YG*MckZie56I{eT?X^mDy6uyeAx6enl8t2eNX^mD??Ff>H zb|2MhoI?|(HA)hNZ$g{c22s04wffP}L}`t(m1Nfl%gjfRM6_#EyYF&nqE4g5b)o%Q zy}?(y=@As_o>-#3hYpBBqc|!}Ru=D^KbEf_&HQa3%kLK&TWy{rTC5*!oM^s&H1kbo z%KMZ=Np!6G(NG%Q%?`^klS=f^;qKCTmuTHPZgp{F{pbnFNw$8JxbL!mcR1sG>dcuW z?)uTdL`!|N@2i8abXz{N>=B9GJN}M)!V<-~r&ZYLUL`AT24NR2I z`ih8xEr`ktKR6KChJL}@J*1!cAlsu>(v_Pz#65qo~_7T z6_)6q2a<^PtXFHC0~4jQo+Y}OCz>X*o#p!BTe4oer)_Jpo+Y|11fkJ^M`pXtGM{{+ z^i0W|e@!AWKh~>N=AR&nZ4k9*y>`FQ){OP@>l9It zEXF)hOV+C^8v<*T&iab#@IeyMp7rP5hZEVzRJ|OEi%@2T{a)-IL|GUb`1#YsUIoiCVH= zU40W+qx4vht0LCbHHT_E38!;bActrbHudZhbOq3q$S)vM38N3>_Xx{5I{Q9A1@B3dMC&-$mQCF^S? zYRP(aU1(s9(pm4$l(b@9Xkemr){{ij1bHqI+wf6))@%1?YRx%(l4zdia4S#LlJ)9J z+rS#7vz}ZRI%Fu%KoZeD)~hRR0~4jQz9OO^45Id||Ek-?6wL5zC2Glfb?tIsjnY|9 zuC&F%T|{UT(Vq3{+U3AR>8xjoz9M-JqNzWppWVCZeqhgf?cO(yjP=E}%j48N)kbu8 zHF#m|@*(*Y%GWMONt8K1$`XC4pwVSd>$XkzL^Nvg(XzG6hi{%eJbU2A{^N}YW)B?g zF5c&M-d+5!T^zY~dBOckhg!RQY~>E(-Z%c;;p%dfYnNL|lwET-D-uY3#E67wADPP5 zg|?C?yPj#o6ZH`!5$#0F*4(v{D7jVywRngiiD)NUww|e_M5#J_kVFJYL_5*4wIZz~ zT2YNNNFv&ao_98qKMHLnQMP_`#`~y`Ac<%vT2|xSN}`xOS?fnDADOnMMWbZhQ}#B| zC?d3pXxC_2ZC)!i%GQ)5KI?r1Nklu*vbv{M60PWZJxC(jiI&xrw328=*Fr%O(N47N zdVMR2lGm9q4@Cq?L_5(>I~$pT*%NsVA0!b$646ey>^f5`HA=Nc;_Dmx!Omi8Y-x6FI|r;+QR6(!L<=kVho zS~!O<%?3N==kTK>y5}5z97OZy@X;eTO}s`=O6;a9cX#)xL~lCKUHlL373f2H->I|f z53QX!eReHbTz@p_uAf^=vLk-yM@;{jrr5qW`FWcQ^{Qp2LTU_z3?* zwEO7C9f1*JePE(RAH8>B;Y3n;`9i$YsT+Cnj4v# zAiBp#9nt>w;48iC|2uMptlxk1y!%G2MDsqHCjKqRsn9{~zGVF~?uU_SbdQfZqW$f` z7cQ)4?~?ykcj?F7lUj-9eKbwvPb22LynV*~Fdm}zniB7$?3Ft|2}8ESKN0Ods$RKk zBJ0Om4PNlkiinE(hL5E+C5imJ+(*kgy0+3sYb9#&(XTt)@npRl>lq&4tg8$|6sTGk`CNsYR! zXXc}|61Di~v+l#00v~0G&Ox0L(RDblQOkU^tm|--8l`=dtkTKztYYo5TBXw#AFYTe z2(R1`{-7T8fC86lSFYG52DxxQM->`jFBjFovBu$79agqj6|91^(0Yf zvl#OlwfJaRKm1nuD7)tFdSRLQ2$G0)A63`fwPila5`BA~D10=1=SN=L-~VU#(XxK{ zO=^^$kJd`m;-lYoAJG&X*Rw>i($;5v&z~>twth8;5k5)ufTy^+p z_t8s{X_WR+mgua|OA{Y`*5~ipVDZuKxE)P_kFrET(nsMsd=!mZe6;MI4NZ>qw2!uD zeSKSev?8KVCuaC|A1%9QLz5b%eY94h79YLrK9ni&(OQXGe6;K?7)@%F_R)SN*~Y_b z53Zd(cY6J7a_0w=B4WSBES*1oa_PW9EZswvBO==o?Z@?MSB(R1`)F((wCMRLOLQ|& z6n&qvTjl$9A1%96OOsvP276FUlM~ibgFys^0tN@GafN zN8MlOF8-e`j=c9xCU1tk_st4(?;Ck{s3f!Y&D)eWjK*B>Pei+qs(teU6CK}2e_2rA zb7qM?@;|sQ5WW1Bn|8nEdeV5{$4Y(llKkoN_4U$9b41oRL3Gc2^sa@IcO74NZ@P#! zZ`tqr|BkG`?Dx%^b>Co#Zp!XJRJMkXLNxEA+12v%^8TZ0-@GP>j^(3%FzznONpqIy zMxN-P?&*8-{Zb#D^RG!H=GTR)ee(hnCFY~zqhtrIL3QJd(1Cv<+I>{*n-`cU?V~JF zud^cAk?ZS6`l#ABuL+`zkJd`m;-g=8VvlTOVtkY(>a!ghmE0db+I>{*n-^H4w2!hK zw6=v_>LdIU(e9&a-@L#?X&u?N>lNbn5H_=WuNGYSGm_%^pI>L6Ad)e5JCuL+`zkCH^8&0@?GwfLyoH?IkzjE|B;p-B+McAjYA{OFwg zcA7}cAJ?mW^8yo{z(=_bTAm8%fFz>bN7Z}U1|~Xzk5)odR5yII`>5JCuL+`@k8(t3 zg&s7DtRJ8j8}gnuI1 zeRRw1a0=$5EYaCK(VpMlIVj(^`{>0Oi84OQ65Y%bO%vJ9-+|TQqiWy0z*+Ccdd5dt zqH{tJS>H=!d*`k9?0%iJ`>5JCFECNsN68La=_{V7kMK`KyN{}U^8yp4=c6Ri?5aG` zH1XU2v(xB(b{|#y<~2c-$$FA#`cj@~&lBzCh+2+9x7`lo8SCk+XZt+~fDW$LBij+} zS$`oiqIA}?M3)_a0nwh{=4VfrVkFAUo>-!*1)_7Zy>o*^@lng{N$r-|79VAaZWM^l zdZKUMOVr|{YL~abL}?!_HX};!KYix(BadBCtRvlt4y2Ntf^E+u{1egcqrd6)7SG5; z`)EZ(0T)E=vnRF7TVRbkqKuE$O4Q<`YPZZLh%)ohT8UbG^zq2Dp7zmx-4oO04Of*B zk?n|fA62`&HK9@F>M}_bz6qkZDw3~pF5D&9k80(s7-hj)WFr&fqqP#X_~_-xvfhnM zjE~kz)Z(LRm$$%KPy47lKWguwg=|NJe%%X->J$$n31B1{qCpNMuJRlB@3p;5+1Nut8D z(*e<5BH!WXqiUD8CWtcg(OQXGe00ZsB$3VV86T~csKrOsE^mP~O8Y3;?GCs-@y>4;0JJJ6LqP<^q-HB#*_I=?Sr{3_(pSI6O)h=&=HA>G%S)%*% z8pZ6Xck?^ncIU%8hwRsx)NYwg5M_LnC3;us?LMk?d20<(w)0CO5=eanNkltQt>05?h*s1C0wfXb zM77Q@ts&Y!KiZBS5G^8F$+}Qz6Va|wZ8dmnh_WlhD)-Uz&X`~QD6}<1*|j2b4nPN; zV4zJzyGFGYVyz*H*^_mx$d)JSBS<3JiOPIdRJ&f^8ln@P!xyeq zXjHp$*BYYi**u&d^>K2IYUl7n6Ln{t_ngDe(z_QHkKZvo8HiJaI30&`jTI4vRuPkx z#XIMZ(b?(RO7=q>#_wa9{!?xM8dxbM{2^@rBZoIbmjEUrJAbl1dMPQ@absfxtwG>-C~h@~Vii89q*~QT3`wV4}1}DEE(e_-qYl}uJB09N`YMrrLq*3Zx zCp!&qqd-o{v^U zv`E&jQLUqEYkZWwUY`iV)JJF&(XLVTdVS!mr!~qFoyikLMQ*;APT}0s$m4pgTV`uC ziZdnF3J9;w>NKiWK(s}pEYaD#MsaB%f6oSsMzv0at=>>7RC?P3Zv+MY_XwrI2>qLXV>>!s70`KX)W z+k5GNAR@+iMEh8;*5h5bY(hy>pGk()!W+qfrvwQ$N}~(cQX0%lT1_=)t42-6g3}?=Jm&r}jPdqqm>_(1Wgk zG<%OvgrgE~J#x6;17b!t#_s{KvSPm$>fasCI9uySafZZ4_$Q*>N45IV&_qjpwC}5f zFBo3-G5NT;iJq)^L6;?ru@9zN2R3v)sO2NA$o<69vT2m2B(HE$$zW6 z^oQ;VOEi()V8O)T%3bdMOnDz25S8+g!KyN;8h^&^FfyV=AMI}sz6SrDIYH4~`bGDI zCF-4NKs1rv?udpG3yy0Wr@xTIgm^f+0MQvQHWZ6^jY`9$VMi{M_Hnt;DD&l z{=7ylKB}!137z${k5;s@0se_-_tAeEqehG8N5?s?uZXDR`XuwwCu1ba_-L&}Ek62< z7>P1IS}ReDk810gTI8eD>YL(-1ph>|`>3{_DKt@fK03c%2~qecqJ2L4#Tc`m^U)fK zT72}m7>RN|S|d@5k7{e~LT5caAFXJG82l5_?xW{p)F?9_t%xZ66GZJk`lT3&GCo=> zQHzg$Ge)9}kCH?&dxAExo!6+vN40gKt?^NE6(dL@f+V8dN40gKp^4J-(Ta!`$=ZEX z+KfeZHjnYqT8UbG^m+H8L`IbH(OQXGd{kSz96Iai`6wzNtZSDmzs|H3qehweC`&XE z=foI~m_LVaxn6%UMxu<5vP26S6~4nq`*o&o#YmL#QI=>T^q@_|yhbfPs;#eYjgPXc z!QU!GGaoSzMYPXHwe|I(iPG~?mgw8^MAJmJ)7AfU+kf?sU;a<_`RMPt9Yi*JVtkY( z`gS1*jSd>d_FnmwxBM5qSL{Ce?HGwNKFSjHJs?07y&Zd>eB^!CEqwoDLe%1;+mR8a z=c8=Lg2Vynq&~tw5$!&z^?+!Nk5)uf_zoZKK6=T$cnW;9R-%^U`tQU@l=0D8iCTPA z>r)as>uDdYsH+D26VdLY+WnbA6Q$>)6%mDlf~eg`pNcW-nfYj~L@hpgIYy$4kJd`m z;-gwGozPiN`)I$CY~$gz2iMM?JH383x$}cb5wTxm=I#xC;2@UnAY#;rD58Bns@;LLH9lGq(aC-E ztC4BcjZBP>)=Jdkqc6lrl=0D8iCTR0^N|syeU$C;wk&y``Uw9-wEL*mH?K85$`W18 z6CKo)4EpBno?)@nJ$)@QjnY2K5}nHv?fE*WVJE^}q81=?l7%HoXFW@F zPO=+B%SWcdF;gP1DIe?go@5OWWwM?nTF|Jl8a~>`dcA{ISfX^+_pgOMbn5H_=dPU7 z=f5K}{6nY?AF`8Y$aX|~*6SU#!V;ykz9OO^45Ie2UhkmQ08u9EYb9zK>-Bz5VTn$V z^_6sffi@BCS+Dnd3QKf?tfz<~%W>vpFvB0!e>9O-m5=p$zo!O>a#>#^QA^hA-HE~y zrL%s*J|)m7vK`T$_2->{N39hJOO(!fl4$i=uXiVEfGCsowGy>tz1~YFEKxe^$*vk{ zA}U2hwj{+k(DQSQx zll3f7bkzXS4I#X9^pdXC`Y4_C#ih#W{in~Ie&n(IWxM{C ztX)2kij)NBo=0RmqCM;N9uQ%P(pg^-QNRUJ`&h5{fM|dyll8R{wPd~Cu^=o_I_oQ1 zy9{k2+OuBoSP+&do%IzFojmKGcDsmYKI(`vSzjwrOV;b_>%(f4&U$yIq#f()!xE*l zz9OQNXT83@z5$|4*4IkZlJ)v(@UTSbtgmQYD8_h1`&h591`kV=&iaaoPM-DpYVZb# zGFe|MQA^f;KC;;po%QT0#+OBvIQN8XN3>_XzIM3*jgEEChO>eKYwk#**;RR>>8xyL z*SZB_Kd>Ly>uZ-AAX@AJQF@o)P(&B+oIjRdyPUntQ4KlIV{ofXHOe~qPzHG?ny;NWv9c(G9SfH%WIs!;C?*n zOi2Soi$2=l9(jCAC*`16SCAt zpK(8qjObWCdW-zWx+lKxp0GpLew%J{fv8QJVa?9WmnqH2|KJ9gMT90eNqo>Z`#UAjopTjTsC`)uUpY?+p=hw^k z?LI0~&3K5?KFY3L-u6U&gnuI1eN4LYz5$|)kJd`m;-k;H zk0YL}r+u_mqL%rn-mxI8Mrj`9 z2>(R1`{?=3?$;FfXhlRFjy(_d`KaDiBdkVgA7zOy3%)e*(T`M_6ohqzsKrOW>2?&E zMw#nOEYTTH(i0t=AEkX%?^6<1qqL8*Js>tbQ6J%-h;|><`;>$wN*~v=L^tz92UnMW z=z5JOb|3w++hJr`&&)?_C2H}}=VK(w_$W(sHLp?lXfLNx%lT2g^Gn#Qr+pL^5Z2Bw zmpoA);h%_hAKi*kqs(zVOZ0M{=)gxm`N;dOTloIR>^^!iMxu<5vP8G@LSndq#qsPhZ59nqfk zdUv9*MCq)rh^Q#EGgwDw&w9N(Q3FJo*;B1VEwiWZOpA}!O4KrY()&Gy)hO+w{ko@( zhu0olJA3Z*`q|{p4<<##evO%Qc{_*^DNQ8L5#gVRb|2OIJ%uGo`)EZ(h41ju?xT9Y zrv`{JKFSiE&1)1#rTN~D79YLrb~pt`p)AoPPgJ&skM{ZKXWfhAAxitGJ3nggpp_;< z4-x)}X!p@iyB)?ul=e}U=vY~Asdm&mXtl&gS)y}!jY6yWe)tw2?Zv23=D40En&gSf z*6`8pqk2!Wuo|U(lOINA5~Y2#BBDce$}{_XRPRaF08wT>S}ReD zkM6jSBC@fb@zGj|T8``WE^lEqO8Y3;?+M37i11HDyN~K!-og^4eUv47Nc<8+(?qt@ zIf-^3)q9dPK$P)OmgrF-Hz2wy+c-BRL@hr0g4@9q_$W*C9eJX?P1)X=k!YWfs$Jf0 zIoMs4;;8P@misIBojSYz(At^PXV;R&^+%KL`nk0vJ0fo&yH(N7XKG zfr&aFEoObc`f>1;ZVLi51nVvxci*UpsO)_BSeEtK8}n}g^rg4s7u*j=WPJ=o`-BHy zFu3gB$bYN5^pD(=x`?_zocGZT*Z8?EZ%q&#Yd-oO5Pi)=L=)K!vcBiHcSfwf$$aOc z)cPMSuI_2}5PVZO4jZ>rA7M>(wrAfr-*S zO7?py0358k;eGVH+hyceMaH?#R1r}S22s0@s$Jd!YqWG^8plWLB5L+gwaZ%*L>V8g zi>P@%`dg7@J?*1xzo%KrbKHXw*^X$RkE&hXn$T!J%d^+X|McF4g%im*K3Wk`_$Z>? zN7XKGF%TWcM_Hnnk9w{45@ETMJ-Pe!gq+1HT)7*0yP-2@J~d$k8ZggPQiSXBq}^R9T4q#!aEPhPwYN=u?IVlz zy`K)c6Pf3uQpgyYMj0Pvi6)}O0a3r5zZPn_&ZKsEYm1MP{hqR`g(xEY6VdLYYL~ab zL`#oC$C;0^L{Y=!$>QF&S*|v(FnhvlN~;~!E^jdq9mhvmqL^EP=q0b&ckkXL_#@x5 z&qviRZ%q(oe3T{n=6u!<3Vt!eH_u16-45d!ndtc_+d)gFkApi|!#@%2K6)WCqO^~) zL|+n(!ap(QXYbri`WN@x=c8g9@o2P^=r}&g5|tz!Xml_?eahc$-8>&v`#rVAM_Hnq zd5z-AT@OUfKC1T33rv*u(PDe2^#0RlPCxRPjMaM{rQg#5^lcWN!$z zH*ZGr9AiAP9ntQiYTvxTL}?!-iNZHQ6k|Pqe)Q=Wv%c?}+1@L6fu2=i!#Xxi% zAFYe1*+*Y+AIcOQ*VjeV?4xSmyucczeU$B>b(Q2f?j;8QM6~;;+BYvSQRk!m`Df;5 z-mZSMKlTs4(oK(`&`XCTI@p~j+uM@e?;Lt%_v^2dmBl;fkLCL~XK(Ru;T|7lacxKX zJ;m0Oj2@X-qT8Mdh;GRC&QIOA`}I!y$fR~6Y(k^OW2SLNCYI=CfoM^q=8@^UZiiDa zGSx-YJThrnf79$u-NnCk*t<(|IIyP^;q9kC^q^}+n0Z&rZkLbz$l)80&ZdcM+?^6uO*lOOOcod|uFr#@mtLbQ)eS|`HLL`z4e(laF=k&mmp zbjCfYh^Xvz_$WS_ADN(ltaN13IuSNPbgbk0TR>F0+}27oUq1?>X(DgI);BLSQ9A1< z?VvRybdc?c_N>?X=7lCoXMIIPh3oLqp7mPayheyJSzjwrOV(>$-a-?lv!3nuv@Lo} zeMGh++OuBk@)nvXo%IzF9p<|{vuC~5<*gB-OxCkRH-#KD+Dl}6=NgGZ)ROgDPqNTN z>8$TxU2aEDvd~27tgncuD0B2ZZ80A$pW$mg$r>TbWPPnfEm^O1&J`W4+cvD>Tswvc3|cMY8s>UhAOM2vIKUYb0vPdad76Xrgr1SJe3h*^X$>`twfa zuYSfkG*LS1DrT`NQ6}qIqO(FTO?>ocp7ZPLEn~gbOD8l@I_q&&B>G-D zp^4I2&l2_5K(S^S-QKbjqFH;^Uvw{wZ1%)tJxg@XXS^;+kb&>E$)p6vl~ zozTmC#2AlgAL~Eqb{LsPil%C;NL{wBa$(6gO+%Bdd>uV)yIj+}wK!nyPo%Iv01}|!p&w8x~L};RP z)>lNdNY*~X*LpxSLX?@|*Gklq^;*Y*&_wC1cV|lM9SfjIL}WXneXReq+f`&E6EnlF zh-i_lJ?piO1)()c&+uy{YRP(8P!o?v>8!74r7f}@(Vq3%`uavR%4B^-L?_RBZGC+s zM47R^R-%@y*H(jvCQ4^LyNdB;QDy2QvK`T$_1bFi&_wAOK1meo>OpjHo{Q8G(IB?*nlDq$#`~QFL-aSZ;>pJtSot80nn!8&P0JC+}&V{1VzFt&ooFvB32;K610{zo}KAGEYEtzhTB}p z)=qdlJ$hI&CBYyiQ7=kD6}1+39b?n4@vfzq)r_RIy|3Zg8$0`o*sZ?jepP*w$vSnu z%Dj2AIuLa#0aT&ztM7dG=FNLfUcB$ZJI_3`1~to%p1l2JmgP^2Hg%$V_4TEG_=o*# zEBoOmNtE$XR-;Q{*5{c&{`N!1uY2ftX1^+;)-E4d?yo)N{+0gv54bqBcKIjd15vfh zw{o@1^67AO`SiJSS=zPBk%`Ve!}qDzU;i%mC9*^}MFOY>A9&3UXpMfrz2TG@ehNen z9Gn;;F0mDN3JPQnOLQwFDo2w?`G>>VQ{nF`l4tVw!mA=`HF#vA#Oz73zNWfR%$gAG zvnRE7IWkc?>uVx9QKvk!k4$Q%Z3;wZ$@->Cz%Ac=@_XTDu&XXr)GH%lcY~LbHhWtXC^-Qy@B9);B}c zob_rocx0k<*0Xh?nW!=M5!sGt&-zR54HsanCy5Hr(Y?Vv(SeWSk*T6vCOj9f3D=&~ zO54a9t@P1ZvYsSbrZd1;f3W9%WY%UmuUD(VBNL^wo~;Y@nuOkv?TGfQS8JCe6Rp(f zEMq-ObVIZVqT_3!vNfbpLY(pk^eg}zAi zh)P>zJEA@7)!OA0G&;*z&k}uMNEGwYK~TFK&PU60*l>owo0vxFtS5<%_dj{94z`8x z@CTke^*y8VW&2pKR)a^@D4q3eUFen&#GVplJEA@7)!OCAL@PBqOV+bQcSEA%8UAbb z_BuZJn0>5QD{WICI?Gs35-q%sLZf3B_*Z*d^RC;mXZ;oT6{RyDrL(@Kx=>_0qCM-? z+T|29I!o5qL{vPWT)S);>(xrz6o}4}^-U2q&+yf1@W@2ztgopq6xohw&w90XIWkdt ztgnga{8_J7+NMBsmaK1zs5$G^YVgQJ>8y7vCHC6o@fqcks1w}f#@t*PZ9-5L=Z-_&+yf1@W@2ztgopq6xohw&w90XIWkc?>uVwk zZGx!%yk4!eO@ZhvS>F^<^H{G|gGVMxXFXfR=xdWuqXcat+Oz)GoXpc%DREip9MP^T?!T{f#&GSHI=H$NriW=xv-keczdTFUZ{2Kgt)~>lJU7XKy&NJkr^+ z9L#zr>rplMDf`IeKOL^uTdTo0 zCVwy70in)EBNL^4w5Hl+_$Q*>N7efJ$V6!$Wr=#7A(Ih{`$d0tA5~{hZ4hOAlqKp{ znn6-HP9E((s;=g>L6q@Pk|@}L=)e=6y5c<5N7c?Rk%`hi%2tDK2~+GTfqx>}eN^pO z5Sb|Lqb$+gkSNYdieTT9Wj?C*(rJSzsxIVGL4;vAVM?V~jj6~#^-?ekH! zJ5d`%86RbdF8QqYnLNnkco^LK#^R%?t>!t6GCtZU(b8_msXnT9CyK1mIee7sSl~68 z`w0I;wEL*qRUKjrE+5aztm+sKrOseov7#O8Y3=1Hx-F_YwYyX!p@eBZVfX(P!*{nBh7TOLW5l z=;fJ@UbBU42=g5aEIz7s(2A^4H!?9kN)i>0TIUywkABv@$dtWnxW z*{&KZKHGhSesw5$!&@lcGkM`6x^Dssqr=L3T@y3%{4i zzCQYi6p1oE$`ai!5nc8~Z;@!fUjKRb!UgbAmgtI*gGR?ICC}ea)Z(LRm$$C?DA@x7 zd-4$BpNMuJRl5^KCQ6@$vP9vZo1)3FM(N#-UvO`<09nrx&4eU0I#`k8@H&$v>(wrA zku^%sp2!{$ShGh&wj1Y0 zwXEiS(S0Qg;G--AC1aPi=|$5SNAU0tpv>%lZ6YVlFE6Jg}6r+w6&*V}vPfFL4BBHDda?VuHzC_Nt~ ziDKUFsM_T%GEv$`S)xA@62;vxiog3OdtEi|vHPgnb+`?pjE}NJOBxlvlSd(H z@zJli7canklqLGyP@{t_IUc_3HG6$ZJ}yKpKC1Q~J$$&o{vWx2rN6%J;ytI&UwH7$ zxwGfbWVfAt+XGqu!o@SioBRj+af!Dax@pv%$gk!WYx&XD?Djjd{MI{;AI(o>`T8+= zB5Rg;CNH}6)QJ;zAN8Nk&G7y3bn^7Yw~t%Jl%BZt(d7g9Y`9{F2>(R1`>5KTs4GOt zjs^HO5kV5sPE_qv(iNg??eebV2ii!1B%+E(NkltQwRX8XM7esV z(v>@qM6?rCs~EdNl&owRk5Ha0NFv&aUUGt;GJEO@QFf2>reu75W4&70&=sPXJz4iS zFMFasLYs(ojqWUpM%nw^UGYSH1W80YQFXUtS2RlQ%`4C&*GG^c?(H? z@7Z%_-}Ro-8Pn)Q&h05Vkb6yvLMM+PiD)OP?kVXCQE~@F{bRj)b-615DnMx3u)ijtL}`QB+-4> zLen4`uHhGlMVoo%HF{Fwj2b<1u)p?7_X@^;=nB#9 ztl@WsD7%I)3md)MM~v}^_OV`F!|w{w?yTW=hiF&U@Vi2^J8Sq|A=;fa{H_qi?8&-@ zzbVtb`mTz|5I5yIQ&)(RYxp>yN5mM9XdmmvhQD^<-EJFxRveNf!L2i?HT={rhaZ_}*+<>I!AE^d#y{BJUHr75=&$a&Cp8h3H=R6I)-!F&pI2WCRqt-u2GM;! z>WCg3-4+`^*sz2PlKs^`aR0wXiH1Ikxoh>c&`-OMGi9Zu4Wj#e^x5xUf3paszk1(X zL^tJakoAKlIi7k~Hvf0>O#UvcPOgQ1!2M=AMD6uV-bdLhcc9}V{1egcqiXd{8ycOd z-&4s)Ya%MDn>^ZmRK2@p8$=l&Wr=1&58j9v-gnvJqn~kam`>Kav7Yf!mS`#KC+d`E zm35(bO(uUQ^ilQhmXS3|`zU+8ep{&IKEgi{?LMkrua8WWo{zFbcSE9iCdb7~B-(vc zy}M-_L>V7#l&Hl=A9G*D0{AFPbVsy^tjEZdKe=C{;d%Y|?_~0KLLXJ{ZW&plw2yXY zmri7&w2#(AR8-gNVPvxVsCswHHi$AlN)kl|gCveaq81COU_Y)ceiYVDCeUM61Di~=iHaF z5I))#*KK#f;>G>#2bVJmMefR^vK0gfZ z%2v8R)26(p`g*;3cgr@2GCs-@-3p1qM~i@{#Yffq+_gcJxz5xmQHzhNcejj8l=e~V zDX~`H)P7#S<3yj>ITJGDC46nQIPa;qE2}xL@hq5-Y+yVQQAkznmg3hBVuNcXg{x4Ywo&2l&rZc zUg5LcN03Cc6IE;OA`_)&_$*Q1=Luv7SA_8Jl|TEh|NWQ#-QTy5OqbmoBsSJFKFSjP z{!pWNCdc{PZvMTCzy9Y(>^{2d-XI;Kw2zW?p~7$Sh-^o+XT4e%+Lf%Yi742Ds6Fd{ zJ28#Y^U+3$TIQqb{X*N&DC47z61B`n)%%4;CQAG0Xa__Z_gz-2!6Or;XHPW|o!>`g z`jyUDPy1-2L@hq5-Y>KbjWRykC{c@#elW4Ip7v3RWbG@D=`m&HHu89`c?U(W@yEWqgz+`hpVCB{@bv zQu}qLk0?ZMyx~B9ZO#3q{@VZN;?#amefdC#Zo2-+a-PY--M1Y-Il0ven&M0%&QnJH zo=(|))PFkcfJnaIQ*5HM`{;ivUsr$as(Zo`U6HpL_tIIGX6{64Z(Hr*(`l|ew3+YtV>#zN9?l)MXnY`VYsHZi2qXYU4AzJcL|C;K4Pg;F_ zD@14V(OU#Xf9)T+CoEB~$uZFtdE4R5*FALnx`%G7^iltJ@=X42SYNO8dx}kz_EEO; z3yAuNc_^ZNKC1P5icOUE(VB>g>L!nNAJzJlv_h2e(ME|{d{nEiZ-pr1qm2?Ro!763 zhVx8f=%ZS{r`SYkA7wkgtO%9dNBAeA-AA>4PqB&8KFSis$mEIQynZ;X-_wSC3)S;c ztxriSL>V7#l&Hl=wfg#2h%!FP65SNNA?x!@j*Ej5?ekHs-&1U&w2zKQL6Kcxai~&{)uS!QLW!oY@&1cXe~s+7DVmm^;(~jR)}&w z+8|Mjk81Vxtq|pWlp>mEP^Cm1hZ?o`sMhZ(Hc{F~$<8mh#)Sxyh;|>n!`Uw9-wEO5UyRT>ge3T`+r`SYkAH@y`YriLCy^ruuM7xjfIF&DekFrF4 zwquM(499wlk6uoZC^H{riIy~4vQa<7x6DViy3p8J??xuZM_HmP!Vua-7x$yjyXyWx zMkb4o{&V-bbh4iIQL^6?dgvg+KN0Ods`YznMWZv-g_ib@)05@jnY0k+DX=pzIm~U(mq-f zQE|q3eDu*2v!3zMMu}Q{bdVxZ=Dfa9q81mbXZm!CS{(n-_azqUWO|(fpg@oP{TfetE-}Zv5%{Zu-vm+I{phDP}$6qbyOm z(AFCh-4?>b*Sz$ve*W=)aao93eDtd+5@mdpBnpyFxzqQZx%Wa)zK)MjtjM!l4&9VxII}C(@}sNS?RRAP zt#=$hnxDw>^<(lx-XqWCMO@!J|LNQe-w#hGPhWg{@bUH?NPYbQd^U8>LWF-J+I{pF z+Nh+bFequc&9_`4_NScq2j&1;jW{k-1$DBD2`n)DHRL$v#7Ro}ce ziPAnw5*2kB*GHe0S5^CHRo}eUi84M)5*?5EUZWt4X!p^ozIm+^WqhUh6~|A0>$*yPqxV?eo#9zIkmDrG0d?1A^(BH_2~#2EvGTAFb+}*CtWgM@gcn zu>)BggQ(p{tNP}(PL%P{Mu}Q{w5o4j>qHqJZIq~GK3df`uT7$J_$b#wYgzKWobAYZ zyN_1&&1;kB96rhs%|fE%eNW$i*WS-byN_1&&1;<~=c63al14E?Aqr88k5=`~Yn>?P zqa0DcLV~OxWWsV-JiPbwG5dV9s&8JKL}?#oJ7|?O3jaj3`{*V2l`Oz@rkaR~LMM-Q zAFb+}*QQ3@$i(<)qeLw}TGcnNb)t-qHcHeoAFb+}*CtWgN7)WqE0W=;w1s~n+I_UD zZ(f^3>G>#2bTcHHXL1}?gO~QSkMK`KyN~X;H(Y@EC`(iT^v1h% zG9eu9DY5wI?LqbyNR za7=X56AkWUZSm2nzIm+^Wqgz*itGka93$F&bk}_)>CB#JA0<0z6+bSTLGrNyg_04NjqqL8*L^B}=jgEaZ*hyyb(W<_AtrKPDqm2@^ zT(7U{o7W~$+DF}rbE1y+0Gy0xGZ9f6CcNVzVb^eY8=c z79XwZo7cKV86RzwsKrM=oR~&wA0<0zA zDZg)@k5=`~Yn>?Lqm2@^_-Iw%yw-^_KFSjHnnczkhGV_ON2~hgwMmrrQMQBDD7uwKuwW z&*}3Q9z1jI?D;d=?lEo!TXMIgXk@bl7tk-*zwLp}~`bLRbvR?0?6_+TT^`mQ{Ob4wz6Ez|t+Y#+q zuXoUjOO(#~nurSD$)i2%^$uDs5M{ESC0bg$ANb?pL7^%{Em^Pkdx}eRj;!Z8zbp$m z>?uLEBigfG@Anj!=p0$k5zRuPV~x_gbo72tEfD3hzCogvtk=5}#U)B-J=>=QKI$W~ z9nqfkmz?O+IcK7?z9ypL0h34jSg&^{imOpal*xLMDA-|LbnK(Su5nA&>%Da15~Z`A z?5Y8xh{$$Cd)Di{bm9`Fvz{cHZ-S*n9D}Gm>-AnbEf8h0o+aw%qu^Sem)d9edgqt8 zMCq)@btY@)m)d9eJMPO_fU%w>y6LmML^j-|W4T^`IYpvO*0V%cN<^3BxCqXfEMxsY zPmCy?^<>9_{Ao|rM~p~__OV{?Qxexl>9L+9T3j0v&7blbeY5M4`w9D4ulFfwfhd#p zB+;@)h3DkaKGyHL7pF5a(OFN{*B3t_^bnEli1w`4yK1zc(S3XKX5OX463s)RgB>{@ z3_o!A)L;GZe{RqED~V~8KCfqqE{8;iFO}orD}P`Q>1*s+ulIn6t5G`Z$!c)nH+e+1 zBigfG?*S2)C_UDbM6u=srZ@&sd)DhcAX*^GjP)c@kSxcLsAYz)cPxlYl+Jp#c6muy zmbD3@_N>=C7Q`h=XMIgX%UZQ(z232)1)@yWH%io!^?H4MT%vT=yOk1qeSKMz$aX|~ z*1zAqWjg0fbk>tZ^DJbFV-U4xy@|(@pF8fc1tIMa)oy(H0U5-t3=Bz*Z+#UCQ_19Ki zWQlIdw~hkdfuElazWvbg>mE9uRc8G=*uHL>|dkRF1JFoob?Cy*DkMk z1W!xsugaC8Mu~=5U;MED2$@7%?Q(3Q_Suuqda^Dw_f!y}H$?mFNvmCsO_a`hmMG3b zJy~RZSbbC4_cS%@wc6!Yh%#Bk3*}Bk7^qBjIY)7w)ONlN|=tHLaop(Vq2M?Q(3Qb7Vb7 z)Mq)ah9FM8Dl&D3uhlNMLX^vTj_7jF{eWcd35Q*WEm^PCF2^QHXFXXL3WA8pc0_yD zU+V4sJo^ra*hJ~9CyBcM{^%jk zqL!@JYL{aZrL!JaMXa^Uo1UnT$aX|~*6+ACT!68@CZfW3@@UWc%PA6NvYsU>lIo%N z!+1~0L7^%{Em^PCE_WvD$-2`d>*=qq9^omao^>L{#`r9_?AL)h@@@ zsGB`8S>Gs8OV;lurcrvVXX`?LT=e*C_Xf9T{X>ZnrDymg(fmqCba*Wm-n>{gEPZGsWTxfK7y(jv{2Osq(;UO=xuBeUx9r*J_tzYn0Axt%>5YErvbL($>=jR@%tX)3szXhsxxfPGi++xBl4fqgw59D?}L|Wr?a9eP-?Q^eV=x+U3JHFE1}2xc>0+;p-19-*C9U zE?--J{cpM_Q)`!RlfN6WcG-VATwPAGcDYTWGtcmGIk>-mjr$U7A}WHIJXWsZUnhT_ zXA<>F+ct^X$9k_(vWiidOdc`DBihIMs!H27iP9Rai742Ds9mE~b)jt%r8Uad+-(TM z+((c^v}?4gF0@Uev_@H?n<3Hh+LPbCW7lX^6=R!3X^qZVAy&?IUZYi2jBOI7HChwV zGFiJut7`7rBszyisd^?5M1(dG?LPWT?ybV>Ol=aKL!%T?_$G+r7)0$Ft*Q`flPIlG zvib%j5kV5suF*@2qS2a&mdV;R`p*(0N^6v@74g?V%h}Frw5pz|&8(+=lq3pGg6O~# z4yzbTYxq;o>#M47+9XPA6e}gx>YE*5n)?WCBHDda-e>{FdY0(bkm$HpWXgT+im4i{ zsuk&^M%jJ%uNI<(kI*KfU87aCB5e|-eUv5ogCWtuvK$Y7MxuSJ-*qocC+le+C3lVI z0-%QoZ6ew=T2i7yfG9si6MiM9kqfBi?@6PBpI z8UmuY-jqKnZ!cqgcn>l8laYKXeYEP{H~W3G6{64Z(HqA=v;3<3hl-C$?61GmJz8j<8ZGa`A03Z>@Lw-(mj76P{XcY18YLQD3mxk?laFBA z;~ZO~w2zWIa>sO*gbw@@(e9(#9_QFZX&+^YdYzTYhPBHU9~C!BEbAE`Wr=QxHpfI) z^EULE?Vwhupc*3&-9?i$DJ$w&An zqTNTeefY77(mu)(-4dN)m(IZJZumlX2i8mW`DoSsnL0TiWr=Q{36^Tuh_ED0kaMZ?n%Y3xzj#r)Z zQIcp`qaciEKd=A1d+7rBC`lCLKz87>pP!Fv^-Qs|ehwdFu56w3(ME|{eDsScYLr*@I@c0gEbmsdoS$a?rEqTNS#Qq(9j zA7zPN4T+AotkCkA*@pNMuJ z)#~eG6Q$>)EYVknM91~@|6t=!-*?k@o?}0+ueujwC(r9yqJ9TBG&;zH@ZjW4-}&D6 z9DR%ZI@6ck8!W(llqFiqdf_>Fw6BluCPtK=kFp&Le1`&bDu90?+I>{(0nr&BC5fVw zD~JyLF2~`WckTV$WB1W3iD}f0Ow4?gCAusbJ|_Boay<`jo^bO3z1YA}R{)^+43_qmQ_^NNo1R z_$WyfE6gB?V6?iGpM~hD0svqgpSW*jZ2e=x8U|);rHUaOV8Qvlq^1 zx4$(jBlb0B`O)Ji*AE;->E5%E1W~(>YQ1z~6QzB$CZZq=qIMsB)V;+5_$Wyfz6p{z z4vAWPbdVxZ#z#q_AX$zfQHzg$C^4e6kGd7-F7$iqjE~kt6j}{6YPnutbx+$)u8)#L z;hP|d%`WI2XJEk3ICB#WK(w2#)*K?@`i?ekHsCs}Nw^nA1? zqR=Xc+UKL6PBH75^Lmmfd=n&b91^wo=o2XtWqgz*3XjlEH z@DU^t?LMmY&FhShvPAvefkAY<@9BqLeER1{zwAExnZz{eMkdBbS)xA}YP4AL$7{<^ zJZJPvh+2H~t0@v?e3T{n{E+Ct6CDIZEk0V+H}A;dQ_?2UIW$@eQD_y>uFiWa~}S)u}h8+tm=k--} zp`FwySs{k=c|?pzi1x9*sxGumqO^~)L|43z?n)eNN*vxI(e9(W?uF@OJ?*1p^$o7n zAwrvoc8ylm+;vi;EYVD~2%=++uFCJ*HCk2A)Fx3{qvdV)`Mqb)oqgAPs@I+l9LTQ- zvGOCdiD=hoRXtOiL}?!-iDLcl!Wh&6{Q46HD|}UXz||{!M>;#Kpf+dEaHfd9C_>p{ec7b6Nk4{iFNNd~l(? zDD5O`lxVnrw0N(lE|)#W-3^}oF2Sv9w7h?`RgLa_n-(8cHG0Fr{_5|z@1(!_XD&|N zKl%pw`ffRNQN^Sc8#k0MT}~sJeeNGErKiS z)~-=?|7c{Qv_{$8j+rpbeS|g48qv@04VcRLo>2suP(6Va|w zb^mB&qO^~)M9~Anlf_Iw5AK3dTEm~}qr2`aN+;`SADwr%Vk>QCg$qZbwn(Sp-%{i7g=2yG(THLC6(jZBo*XiY@R zWbGPN_m4&S)~-=?|7c{Qv_{FjdAPp_BD9HU z*QmOGG%``A(enP$S@u1#M6ZY{L3FSr$AkB}``m3*?jOBV{tmf+v<;%={iCfDE$ttb zZ6m#c+dtX{(enP$R*6>ZADz1Pr0yR*a$|q(6;9>-wg1k=sryHdOF~fnM{hlK>Xh9_ z{inl%;qs zVE1mdkABp>c*^={8$`=KIyxTzU!S);U%k~?ytNksT3qTNT;JJ11lqKp(LZiZQ z@+d?tKKi*7i84OgC{fFNRIL?>ob|Mi)>PR5|3tL=s9Gx$nJDd}H4#O=gQ(p{A5Jmr zne+NaiCTR0^C=Q#e6&%b79UmXnIdQX96rib-(-^KxsS+pM7xiw^-Ph8&f%jRQGbpE zqT_R>gF@QwqaSxKT!8uL(F+_=uT2mYj+00GeDn+M#fcH+e3Tn;19F1t5MEbAE`Wr=QvB$3f!*I|o~eknzwjE}NJH%dgkuNG3E(37#= zG9Ojz>$~EkY&H1vglOR-{1egcqiTJ9WTNzZlq8yeGbB1#k>lYDk9_OW=$Cyy`rGae z7QjbIqJ`f94vpqARQJN!lf_5BoFY-iM_Hn!tQUn&9_>E5n;21gKFW41*b;iVkMK`K zyN^DU7*X0sS)v;u(LpB1!)qTpe%mNxm>zVUxWuRY(zjdQ2(J9F=aaZjtg zC-O0Rz2Yb2S;W41{?oY`z8{`Wp1%0@;N$H(aO<`{uecSDT$SQqw z*%KxE=Cwd{CLeu+{I~k6vV6u8-IBKfQ8}7CR{H3se@!OQ+BYvQQTu$<`zYB#YwV|f z)&&1VwEL*uH!m(x+DB_5Dyo}2+I>{-o7VzS#zz|^S~{Z5w!ycUQuK1vdW8j<}N znZh;v(tLDNUX^DOLm$=q=EWsS`)ExawBVnJb|2OI=EWsS`zT8kWBsn^ZM@rYTHm}) zug$xBl%`p|etzoC{xy2vycUQuKFSi^5i01LhpZp$%J19fqk7-G7Kk!F$`YMPqZS|4 z`{u-zj|MQ#r4{5w&%q#K|N46VdLYdf&XbL}?!-iRRga=H9bB z+k5QwK-4}T)%)hPK$P*(Mu}SHqk7-G7Kk!F+9*+rkLrE%;u4+1N4XAK{`@ER5!sGt z_ffrXURzZ3aiPZ{k&f9o7VzS#z#q_V27+9`{@1hCw3pz`{ucHrG1nox)~D13QE|WsI(8?zoyzp^}cy65M_LnCAv`}x-7?GcOuJt zRPUSD0#U|CS)yKVc_t*QHENlU>V5O#5~Y0V%J?WtbW6zLrkR*M4W8Uj)Z(Lh-@Le4@5Xw@M_HnNBpMUl z5R$_;Y`Z7+`KaDEFD_BqN7)WqFBF1>kMK`KyN~L9^WqYv=c6o9^d$2{2P;B&_`JXU zPd@k;U-%KbkLrE%S|G~!C`%N(#zEA(z~Iju(N_ymi;wDk^I9Ov_$Wy%+i!IszP zEB@eJKlP$xe_;2~UH1m*jPO}b5fk>|lSIcF z^<)Pa>*@LEmBcjaMkdBbNumX^9$Ni|d{IaHSKSl4kLrE%TF@xtqb$)^3PEK3ShK70 z`*t7I`{uh*#^`2+!eUg4p2XaYH!M5)a{)uS!QN3?oT%z=Rlq8C^ zdqBl8h>Aun>!W(#ycUQuK1vb=$#M*dTIQoy-CLzId!ouH_a#P@_EC~3d=q4G45D@))%)gk#79Y@AX$zfQHzi2 zee+r%%FIVeqInjw#BoT};-epOZ@2(H>Q*@I@Ni@%dAc!J{d-E(l`r*Wg((_TagVwSq>LW%Z zMEiX7R}&*j&qrCJSx9u8^}!xzi;sRfMWT$4vP8Xaj(3fF!o%X>y`PWS*GHd7ktj1C zWr=!%W1<+D0*zXHRPUP?cdVy#)vP7@-n)GDzOpf!PbsD`z zh+2G9>zjArrX&6JgYIAHum8s`PVJlbCiy^bII^5&aQnM&JAU%mGcNc{egm`WTTh)j zVfRu0>D&z84^Ni9dE4@Vv6Bq`iD>sxt#4jzqLmswG@+lNd06pULD64-i+fTNQF+tJ zW2Hu)l0VNgiD56D54hia_N4PqB&88m);aw2Elg=s$HYT>u{)T@~p@FP+Y4v?ij^ zCbHhHQLRr&Y@)P}9=$MM$AU~)f+V8dN3}jBv5C??S`$%d6w$8HUw1EE03Ri*!7*Dx zgftkmt6h#wl-4L#O02cZwQF?8eMRYvOteN>qPr!HZpm@+m#*K_J$4_}>OwoC zQL;h|e)(+C?xR{=Xl$aiMoFTmaCkPNc8!YY)5&_;N7?Ed-vPVuu}s#kQLW~#Ga6-y zqB6`A9e7`z+Ba|NSg+MH#U@H?l&ox!acJ^5zecrsrr1PjAFYWf*n+IxN3~j!*hFcK zlDo!15D_F1?LMm2io_;LYqTb!WwLgSYWwhG6QwokX887f_#lV~Z6ew=DmUOtXZA#E zv?iiuvUZJXdz?F?QFgcEk}#}qeN@}y9GfVu(VB=tqlk8mYWqiH6QzBW-AVR5VORJF z|3tL=sJ4GJHc_Y1ay`>5`<_^$FAIs{JimDTweR@aweNT`JGFNE(ObiP_{A~*n#%h# zrM5TE5iRc@ZJlUX&s6+po@nL$LX#v~-iO~R(Y<|vrTwE*&+Ap9hY$2u-|N1U{@Tqh zPTfDcE?-~F`!36;!;16ibLXfXpI7&B{;2!IDKq>wh?aeHbUgmauloOvWY_4v%dc_2(J0Z-NAt{ogi0TM%>7|v zM9V%pIv)Sz+y1|ENMe8W3+@R^)L&P^+YbDUKkVpQ^3hEG>D))-9_Pp!wa-Vr%d%CTy^}~ZgRft-ARJ-qT zD?}L|Wr=!{xsSqe@>qFZ@BeP@W9XymKK#fUrG2!fUE}aiM7xiw`|u+ZrG2y}q7!w> zGrNy!_g!u!>lq(yl&Hl=wfio&LX`1QmMG?w7fn#%XxiGL`9*KN4t+|_g!v-T#Ju>-o4=h zoYyx>)N)?0)-!d-N4rwb6qzVJA7$&A{MeqCvcCwqYlTu2N{_x zJ}Qfg3*n;;61DiKT5}gU>*@I@Ss}Jhj_xVup@{bR=q2|)iD{IXkJdyKghA9kAJy)= z+?n}kqeLw}s@-?F6{5^}JxLTZdT0~Jp++q}s@8>e#YfpHMy!@f3+NKH4Zzi;w*YSeKN0Ods@B&>CQAD#OLSMV z97J)>ls_`sh5xl{x9sy#?Y_&coP{zz$`V}(iH`5Udic_jZ(Ta_ZTo!m%kB*qz(-l4 zPlZHtPq=v9Ua82}t`(vdAKguiDD9(c#{$38Az}}RuJ|ZR^m@@Kh>q`ROJ8TYl9)!_ z$i(<4OVpDCQQR%Kn08;0%zq1&`|!2uDb)yK3Z_1J^^uJQUGBA65I5L?%klM@gc>vo|I>$mDmzyRuo%>$UqXx03aYk2Xrw za$bMceI*MpA0>(AnFBD^s2oim?LMmZ(uth)w2zKyP&NHEh2>(R1`>5JWCo)mm zM_HmvAyHfv;nznWb#Ith)-yiJ63s%Qax{6gpVw>mU2bJ$V&d6x5f zwck_Ztfzg{tvK8JJ>^+Q6#j{5_ffUqQ)HsFkFrE-_fhS>%dKQRd&qvjsWRbI;_EENj7Dgr?;h%_hA60vjMJ7u7XiY>X>Xc`qQOkL~ zcHiaB_$W&>6LPq-z<7oq+$GrJqffXuTmTBzuI4ayNmanK7ZlCGw05pKa<^d_H7Sj z{REyA}N1u{EXZz;0 zKy;?8e4qv#p?de;WDrZkm%iqcU-wnGHsduuDtWo>y$$L^w z{hpBRi1w`4yS%la(PvaK&XDyr5f$}K9_?ALcX?}pD3kS#5-pAOQ?p+0NfwtVo%L*Y zqFvD=8pR^p5$##8_auu;lpgDAB09-;d1lXgy(d`jrxdeN3>_X-b*JgQF^RriEf2Nu@jsg{0nY>0Z<1gs3Uhn)8SEF>+lQ6G`*i1w`CNl~NB8h%Ygh419i zp7obgB+6txOZ2MH!#x<0_4%*7>!)6H><@m%KEv1hlyoHP*^UKEo~Vz=c0_yD>wQY% z5~aubnurSD$)i2%^*$vn5M{ESCAu7HG|%L?cv7N0>v!D?)0sWdWBt7K^-l{yWILig z>mN#tD4q2z(N_w|!V?|-OF16i^`AUE`uUhW>#w9pl*xLQs3!@c!gKOy&w9NFL|h-G zv%aQkaAZ58J?r%z5OImpSzi;;i8|$(J?r%z5G@d8vYsWnEadXc$0dnVD{Z|~;5Fgi zJiTK$9laQJT6gstY?WL+r3ujAM5pM z@D_+NSI$k?n}~tk-Lo;}WH_o+bLakSKQP z4BnbuUd!L|0sDEqUc1}^(Q+@H12fb!HAZyp_M^9kwadjZ|1HQ?(H`_H=S)cwWqhhkGx=Q2y}@}_*?+(+mQ(e9&K?Q&;`vNd;0o~Vx?iD)OP)rEG3XifD@Ac<%v zs@2?ehA3GpA_|>6f+V7ys4VS0``S~7h;sYzYtMSER-`jT=iTF+iB6$SM7u^Wxi?w> zjk5bkw}oWxBS<3JiE4YCJEKv|o~-*vcRf)bK@!nUbjQ8n0%(-o_ap!!-b1W28fEvC zpeLD+&?cf?quRcw&JdmVdi}CwKS(0liE4XFIzyDb7Mcmk+((c^v=h~?*LQ~Kyw{m( z)9Cx%SF`{l6T61*wOOA=wd+is(I~r`_d`xny~0OiJEA@7wKe?MM9XXVMSkb8wc{ry zi-Fkufh9n!HP%E__)Z?PQ+q4U;r06Bg8vpOcj+Wabl)0&8bnKL_#gE|E7$OoB)V@6 zKMkVc8h&wDh~}9mds3oY714aYH!dqscsAGkPm4gZ9^Ikkqre(DsnhA*EEXQ3Tf z!;eeU`RG24-hJ%YYIbPfg_L|tzO%w##O$xW*Zl@dbX(pIS4Hwnj*DQoW2n*ms{EZi zlNj#E)w*RKJP?;Cah*vt+M%l=af#9zWr=#7Vd{Wb+%Nj8+*5K@{w&WVh8op+J9b8+ z9lFlc5sk7$y)C0#CiavJ{aTb=qgp4z&SgGxo+iZ|oY?`sQ^=qn)`H z+8K@3LKGTBv};uB^41xRvR9XvgdJv0SaU+OuRUFIZ#Zpzv?Cg=i72#*XxFILldLlu zWv|z73Ok&ILYs(ojq2CyJEBpRDCVOe>s_E&+G|+w@WXbE{)YRC(#d-IydEnh)*TQV zUZXxjn}~Le?j%N(KCfqqu7pGfUZcb3%kSGYs`Y#7jE|CgN(z6ri3n{X+BK^6dx}kz z)+kHVcN_%KfzSRS?W4O++za5N!lMr>*=wc-1j6rCy&r3qFtl%M7u`y zon#%+XiY?+QAE2&wLT@C@liL!C%S6Xu2Fq&UPm-q6H#ar(XLUgt43!u%IxDI2JdEjK=@CG6=&=I(GB^)xsUKqM7xiw zJs`S5l--+G`|L^W0nrtr>`t;>uTdYNO+>p!)gBOCAzIVECy+$66IFXabcbjyyL3Pj z(N0wD0nrtrwa&I(9C@VNkltQbx%oGh+_6+-2qWM z(H-{{Er3SZtIMx)0D6Uw&?cf?qw4kgu4r`LYoW_R79~mg^%GUEigbl2xtce=tL2rt zG^(!QMWr|f(4 z{HMcNsC5lrP8w_Mo2RbfMCE%Y<) z<4jp8X@lrKA9X}W$KxNgUM*JKC-3#w-r}CHM0e$Fpiwwg9%wZ5QGA3vlh=klAk;o3 zk%`hi%3itiR6qx3pNRIeQ1!}PWTLc>vP73fXCMlVhWqd>J}OhI#Im08(ME|{eDpE* z6(vTL@llp&7HU+ECXbc-N4LY*gg&bF(uth)w2yY@dVOS~w2!hxF~i>#-Hqp?{@6Yr z{g`{B#Im08QI@DDhZ6_kI(ZbL79ag=ibNS7ZIq~GKC1S6ik$VdkCMA|umcwn^H47n$fBK3WS=QR?K;?xPR87cank^ymeS=!(!o&A@o2 zB^}Sr$?p1mRNaRknJ7IU zWr=QvM8~tIpl_b#I@2do%zDO08zpM-(J!V*l=0C*@I@c0gFGZ+3mw z`-picqJ2KPlcGkM`DjfQUdbrMn)x5#3P!*yUAALMUqKuES zL_IkW6^@ff`+2?EBeyF)O4i)vnb1Roe`@?xSCFFHDChJ$qv7Lcb~GavzcHi1w^k>q5Jd^(4{a>5ypgZ{_&t z{oj7*_;nB6X3zTHc5jf5MxBo`v!_OhT4qmQPLU`xduo)ZDQ#l3g|e3T_x`|Rl}DH3ITlqH&p9&;b%X!0l;wfLxdhk?jh zPy6U--_zDR&pdGE{Kc~u&S$s3H7g_b6;b)o<0sb-97Lhnc;~~iP{ceG(LNtldq6}c zN}q+YM7=gac6`nh>?yHa6?w#cH4EUQjS{uYN3W(xl<`rPsLyt2)Zy6oVE0k=E*O!s zp7v3n%PyaIa2`DC47z61B`n)jPFB&U)HM$$n25kr3gZh;|=U`#nV_O8aO{ME51Udul(g z|5S=u&#aF&O4Q<`!xV`!KH4Zzi;sRdF`~4Ol0C@^KYK!ieN_Pv>U%et0^0`r_Ni4Wdd<-1_M9 zfpK^Yzs&*%eOqAAWO?^tBO+>p!)w>Br zCQ56RCAuwo#E#rSCdb2|`ldA2`@fU>82YH%`6V(@TBD<@A`hNEfB(hO(Ef}=8S8IE zrx)Qjd4x6*?HW}(zeFZVYqTb!U<;ylA62_*L?$|iM!EX>+Q)jet43s^b7+(!>b(%N zC&a0D3C3%D41HAXSP+>gtx>Xe8Ci~qY)7>F=q2}7Q?4^bCQ56xCZc7sb{|!%!6Or; zHOkh7`t{NJt~06C;E{>a8fA%Yh$=xe&*Zo$9^U);m|df4rEO%Qv_`Q~Vy(0VQ6J%- zh;|>{abL*-_$W(sQ#6Sl5aY3)K4(&^7`viTwn7XXY}kEt*S$eHSx@^YS$#9USA*DJ586buYgDbd>xxEMqF$3AJ6IBphIeYQ ztUamw@FNqYHCo zLZid`r0g zqEfp?7iQlRyOZpNLay);+C;Q#RNX(?hDOU>-bVYN#y_}iUs2lk#1i#)5&+ThI_aPN z?SJyYzxcwdEAJAFZFAh+E!!Yk-iO~h(QyB0ao+2?^6r+u>HaXCl@i)V8`J1sc395q zRiZ}@_1EO0et-Rh!$0*d!5i}R9lGiIBg=Uv2gO=`bTzyEjx4|Rj^ju36Is4~OrA(C zkDCnSoo zey}UQFJpbFzTVFd3eHE{AX@g((ed~P%^M22FK4g6p3gTuf{r z;~beN?V~jj6~2>4yN{}O32uWZKH3IR#zz|^YVlFERwOb}+DF-4 zzN{Jl=e}wvH|Bmi11HDyN{~1B9V#GKFShZ_9IjIJm^W*N7cIow?UNg(ME|{eDt%6 z;-f6ltfWz_E8V|eqZS`kYwjXzbPgZos&A0>KEgi{?LMm3GesskhmUeZp;1p1>!ZV< ztA=HLRJ}`Z8$>xD<%pIvD!D#+w6Bkq81-j>p~+FrG1pF5F1}j zuFXd;Ie{m3&cs}2s)^_%-{qP8yk5OaaAb|Tk%{rqMu}SHqw3w(+aSvLC`&XGEh77? z$9jv8saBNJN}x*|l;t*A`YJ~HjNH%u(+nHfGyGz*Ci{Bd}9OUp{hC*2z+MwH2V zmMDC5#ewKyURtcmu|4b6`ueV9Jy~gsyIUg8pY>{eePp8ae3T`6t!NQMhkq=`!+TtP z{Ym?L^s;+{1;~1q=pUAdzFdw6!IeA9SihSXQF^Q=YnO43ggAfJs~rovlJzXnOf(6i zh+(CzWvu`0#578;=CMSVOGG{4BFK8nS?Cv2B+AU5SfWcIQ8}7C+GkH{SB=P7Py6WT zdOdY_%ght?aeg0FyJ|!xO3$8HqR^-(I`GH*Inx#Q6(u%%Vpj85qAL!-_)gY&Cdc8( zWbx6*-5VrEl<`rP=u8^5%tzJEFOjpJ_EEQ*mqJ$!wew44qO^~)M17WH9*P)dy=6Z7 zNQzm{_$W(s#Q_-id&1h&(dS)te;~6bi;sTEy>0<~lqCuu^-=gv9_{l{wL4MdtfzgH z?NhQW^q|f8=c8(OqR2#PA7zPdghca9j>E3Q79V}oy+LAG&-iGgL@hr0-CoT=!X*{O8Y3=r{srz<2yfh_J6&n@Ns@0{nf;X(mu)(eeFAkH~#zA zT?eB1`s;u9Z~f6XuI93uH|kEb*L}j`qv~CP+ZdS`A7zOiy4@ii6a9ZiJg@xHO7ZGl zr#1V0^eZW9l<`rP=<6JS-k9i{pZn3zpML3f{;$9O;A3BZ@Jai8RPFM1^Qb$~QTMO* z*Zxlzr*qsXiLk*{6*j;~$2W%p6F8oUjn zHXnV@TtrJ*FMKDDb{|!{YD6YV`)EylO6K=bwL4K{qO_0JM0BD~d1m*~kGU64Ij?Vn zDC47z61AMytJUCb5M_LnCAuV9%rl7te;i&5wVcvVBUH#X+%?4E~8|_ffSwQDma@e6%K_7@-jD^HH@2L>ojI zA7zQIgc`+2#djxC>zUdh%J?WtGz*E2uQSp6N7Y_Bk%`hiiajOP?nIlOsE_bZM7xj5 zg{uXakFrF!L!x;m$6?l6t}|VBZ;%*K#z$GAn?f-6QH~~$GBR1_qiQ`<#Q| z61B`n)$T-*iPAnw_IoOxCwfGLekyf*rXQAKi6tkj_|7`zYH% z>uDi~o@DS(M7xhZlo(OkM@gdjR!DRxd(eBs(=XU-^G0-eyOJVN#z$GAyCtIkgB%b4 z?w{-ty~jQuRqL6$;-f6ll@iha*%Q5Y4=6Nh@lmzkQ)HsFkFp)KG9j4z2>(R1`>5LQ zDKb&oM_HoFA<^+_-a+|&`+QXGQ_==e#z$GAUYog(!g2Cw_tC5F#p%qR=<|A(=u8^5 z_^8_NDY8asA06!^OQUa|+V3ecQQAjqB09-;d1m*~M^nst#zz|^YB{eTq)3!GuWyv7 z#YfeCPm!~p_EERuO!Upe$mApDp@{bRsM_x-GEv$`S)wcAm)HR@o{t9CLM_*s)IKF` z5M_LnC0f#`@SQx`=c7aS;suzGvP3hX2aV2uykAB*HMTuoS==i$Ri(l#5zuC|0Ka(O+#z$GA*Z~2e8(y=|bsY&GvCl`p znj%rgM_Ho&eoV-EoHONzU*|+BL@hr0n<~-6{Z(lX(_edu`^)#7K7ZlCGw05pKa;Ip zcz4#naPdr59P(f7>m>$#^X|Uw_{n2?O(&n_2mgyv-@Fs{`KbSNZierNCrjVFP5HpN zkMK`KyN~L9^WqYneLnhtpy;oO%2=XXAyIt0Q|}VIEw3r=^6?iX_VZJB_OH?V=Cwd{ zrmXi_(O;G8!7R~Dp#hD`(d4l*>oflvAB&T6EJXD#Z*hszSwC;Tr`pa!^)7F5iPBkL z6H!sy_N>3;dc8YQ3q+Z$Cy9a_G&=uz{Xa`gqjc7@T{Zm52#6xv5$##8_tI%W zqcdF#Ev@0RL{~(mAd3A@;T>2@d-JyCHPx$mdM}+8h%#Bv63t3Py=KE*I+n3s@B9*% zD4q4VDq`*Y0-`=5+Y#+qFN;|VFxIm~x4cF{c0-Pf|68JctiSADm>5we>sg{JLN3q3 z$Y;IYr=%lU&vq>Edr7bZ0@;pe&w9O2NnE1z44)C zr=$gMN3>_X-UA{o zQF^Q=iQ;@7WN{3l_N>=?K(s)V$$F9~NS0$r)ROfdbZ?c8kJ4FB)-FFANf5PXz232) z1&uOeJxLT<4zf4~QG3?w9Sd3@%49uB6eP9L+9iYy0N9D}Gm>-GBj7Kk!gPZ9;matw)DvR>Y+ zQ9A2MqJ>mu_CPd$N(dL{_V*vPT(8$_ms=oOu3a9TLydp(UH@M$?SN>E=-TZ^Zw-4u z6f6EC$X3xF^ei=ZNfKpzlq8yeQ|OE}nt57F54#^3nJhl4)h^#~;81@}%5nSaZ*>3K z#<|n?ow@hIST%c36PD;!NOX|N@$iLvcWn69rOMfpr(eDA>7(uq zo_#g16{2My9UYH8YSrMeHA?#^S!s)NBt-ZpqTNTeYVg=ZX&+^Y zdYyqNVz}?AG#{Pnqgpk1D?}L|ZIr0RN2RID0{AFP)Q?2ara0r|v2s4TEq|V85g!``l=e}!c6nE*;8YC$iD>sxt-d}sQQAjYqTUlhbl^2R@TBeYQLVnd6{3ufvP4T7 z6~#^-g{Z|xKj&V&06xkRok^pX`KZ>hAht$nAFZhx9R7)D_fcu5m6%3n+5u5IuP2F? z$9NorsNF}kjs>wb>P9BUM@ga+#|)o^L@hr0`9<;3Mu}Q{ROG`6x@Yl=Z@M z@+d?tKC1Q7>5Pw(eM<7Dg&rdO6VdLYS}&d0MCth`Nwj!gNEChZ3VJ@O_0nmDDC46f z(XoGetq!(@@bD&A+3;q&kAB&`!2--jS)x}$jSf~k(U-by_#e0X=&pN%bcoXPQMU8T zvJgbJ!#@%2KB{#mY9;HL`6x?tB_xWK=VIEu!FS{})%);8^yz4nULR$NmNY7?CXaR> z{fc{WVnmtwC`)uj=ppN?HENlUYW<#KXFctsWG@{MM1+4L+I>{(_Y|8bJs+)!=p^6e znPk0XAHLS_sTHEke3T>#g3#z-Nq&dFUVqiS!2LFe{jFIUv9H?8j~+j{e&8TV_n=Kg_$Q*>N3{-Gv5C??S`$&Y0HWPTwGLXX z5M_L{QKFXXOoK)7(ME|{d{pa67F(mVkGd6Sdrva>CnEe4(e9&KPqNrVX&59C zt(B~2)<7m<%sKrOWx+p%%5`A%)^|)R?__o_gmf7c{YTvvY4)s@m-uU%et5F<&D)j_ocjp>M6~;;+BYvU z(b;|Uf}rTH{_pNdO+@8QCy$jr>YbtbdcE2=uMMIz`KWyIUVrU%%@Zy8D2Q@>^V%Rf z)Ajm8BBcJRlw>uk(b9Z0lYct*G3@uG_RWh-)IJ~eK1z1b5;l`Z_$Q*>N7cT0k%`hi zS`$&Q1yQ??s(tg?AjYR+I>{*o7VpIHzj|TCvM-<@{Re5 z5aFMQb{|#y=0zqthmUeZ;iKLgK{mX)T-t{})koF7d2JBoe6&HL79Umn=CwhT^HGjy zNt-fyPaZ3;GeOrrhU=qh-@M2~X&)s!XieD3Gx#T>-A6CEH=44iBr;LjM{6Pq!XRot zuUGr#wLz5e(ME|{d{ph5*9K9>M;j$-nUAV{^CAwIO*Pv2R{vqO^~)M7Khs zc_zojt0mffRPCGB22sXGS)!Xl4jLWL@Pp1T79Umn=CwhT@llp&DeHyrV7tiCz(M`KFKF1&TXe zzo&bIsKrOszIl&ti*XZEnP2c(6_Z)qT-AC2Fd2JA7e3T@LUJzrV-UWu&{ptHgOn=7i zqiWy0Hi$AlN)iQ0MDc*hqY$;6*YCO)r!#w^eU$B>g^|fe_$Q*>N7cT0ZD@3+y3o=- ze3B^ojE=izJ|+4rKL6O)AAIcVTXrA4l9)!_$i(<4NpyTZ?=?Eegy?WuALk|cJJt8E zSNrC*p;5+1S)!gKG%Bnnk9Hqb`{qR^O8aQJy;FYg*>h*#^`2+!ev*Dq2XaZy9@d%= z;h%_hA65J2MJ7tmM{6QFQKvk!`>5JCuMMJ%kCH?|5E{h{e`?>nsXltuy=6MHC;Gge zBnpy(^V%TF_$W(sS+tmEK4SJBXw>4PYTvxbL}?#o zJ7|HZkMK`KyN{}U^CAvP54I62&=F z9^949QqQFJ&1-`wmVN*nLlG-@G=6GCtZUQHzhNee-TS*k6^Rr~aBW z$J;n}`o1&wUI?z>$QRq|6+b4=ZaH*QmLY@gzU}zQW5Hh!5AgSH<@)Byr*kuWKRj9b z=52aS`Uw9-wEL*qH!m{L*?sgKf}+3n9QTAJx)l<|w;S%wv-qgmH?Iw%Gx?}=SQ+)r z>o-r-G9P`+eVi%Rnc5&alaJmk;_9#daq~n=KI-SJc_tqrtP559=0zq-%tysX$qrh= zWbz3AM6~;;+BYvUQQAjqA_}%3YCo@6`{uPll=0C%Vh07s`kxmgDB&p zjS{u^sM z4Het#*?m;)o7VYxSxM6~_*QKA+fRr}_(L6q^)Mu}Q{RPCD=nJDd}YzHk|h4T^F zj%fGMUtSa+C5gf}ah)FPqhS@J<$Ar^H!reA-N?lFXrn|eKKgiy8fAQxB${WUQfL%$ zYCRL2!oN1WUa$7ei>y)FN3l!C+Ba|66ZH}PiD>uH9ruO{FdwansPLUU+UKK}QzXjx zXrn|eKC1T3i=6dtWMX`jC7OvIu@8Sd)=%4qKh;OozIl;}(mu*|(0YLoEqsK3BHDda z?VA^wD1Bbf67_lm(ZPlg9=_=JZ~5!dFT0Pbee>EN%J^ubL@hq5_RVX9DC46n(dUL) zkNejTuX)b$6Qf_EQOkM#u6x6DW>2(_vK_QCA)5OL|3tL=sMGTDC47z61DiK+BYvUQQAkz4qB4)lSlX` zqTNT;zIl;}((}=ph=MJM+UKK>EQ*gdO4Q<`S5qX)_-LaGTDC47z61DiK+BYvUQQAk{ zinG0M9b{c1uG}#`$`bviXc8L5n4kabHIMw*HILk4 zzh1BR%{z=fYW=l0x_|wi)8{Wdc;?*M^JlW#&c5w|tbgI+nc_|I!HU;QWc%iwu>0to zUEa3k1Lr=%KN0Ods`t%{OVs)3Od35bDEe!Kd*aTS{D5!iM7R|a#e8(|r2M{Jqk2!W z1c)9uIB5o%@5q0(xJ4o|hb6jEBDyTc!ynvsPvjpi&7M}|@8p@paM!rri7+lvI_t@P zPh;O)5<19sM0?ijUEbmnrL&$SDja*```sby!|I!oMm_yJlUIit)jMb|qL!x@$ytqW^tY^Cu?FyCLM`SyqJ?r(JWO0eoSzi-T;X8S>kM(-Lrv!-3 zlJzXnZJ`H^4l+3&K3}4Jtk=7|#U)B-{pea~S2}3LB}!*KNffguQRHOIhmYE`Uhhtn z0MS{po+JvAIqUTfT5*ZeSzlA15@b7~J?k$ynNM4Bj!Trz`kII$>p|3>^?K)*1c=U(^-U2q zXT9F)EavemxY`;Ls+bJ?r&eI&q28S4GWQYLj%d&N9ruO{FxIm~w?m@P zDlTK$vtIA25m%#?J~~U*vqV=yqT{TmSMx5rH%v#Pbk?&S3o;>E_=s#rv}gUVBu2DS zqoeEh;~#8QC`#AsS)wlqi4L~pc=&>Ex+nIm-*vA`N28TQXUTe&=qnw79yAIc&1I`{ zPrgaZl{>xjOI#nNvwq(C`eh-DY)78!7*8XVb+2IB zI!o3!MbxFeWvth`YQ!Z7w zJL|8@<;Q*1;AG~tfc_s&U-*)`uG55);A5dLz>#0+xh>=M? z9j@1(K6fs&)GqJHXG8%nG8oZ5GU?Ueafw!sOot|41qzP}0om)X{V$FQOLRLViX9Mx zN4|FLJHB@9mSlZ6GUZ$Hnxb-K(rcGnAX*-oM#tly@!{7uWx}U(R1`=~6ICZ^G6tT@kbUSAW@iG#{B zyN~J}3*u_jjZBP>vP3f>2aRH-WU_|8x1wP2(a*a#OiZK9d3~cqEk3IEDT%AmIee7s zSb!P6kMK`KyN}9(RAL(Ce3T=)5@tPCzl-seyS=QptdHtFAmVCt4j<)+mNY7SCyz2R zS$y;h?!}2|l=IOBiCTPA@B9*1qqL8bJs|Q-^oR)mM6~(R1`>5XeB`#5VeY7T`!gum$_t8(f7blkW%y~UabVKMtqvNb! za=mmOw$Dc&Pmw6&qb$+QkfPRakHNGQS5-Q_R=X4g?}R2eRRit9f@T< zGas#q=tQ0J%os^%CeknzwjE}NJXBwF-KC1V7>WGiBonNk# z>@IwSe2*7Jn&(k3RL?*FALnx*fZZUP+NC52M(fiFV7r+9wPh`(e9&qPqG%Wo>?Ddi9(|w>s=sR&9nIEqwXt8 zEbAE`Wr>2Mj}FJa2fL3B+^Z8K%J?WtbS8~jd{pn77dPu^A9X9v_AYPZS(DFp_$Q*> zN8g{KMj0PviDr`GWwQLfC%q?GT#dRJKI5Y-QLjx96~2>4yN?dtixU6EbHCK#LP!oqMjr)>Tv9Pkdevaqk3=0xEiH>l5*I#U(kABs?L1IK1A7zR9ek90xjP-+8eb*bd?)&raviqpoiSVWy`fGPP z?ESS%E>7*6Cx5l~h9k?PrAY7k#ae!JHM{+eEWh=R<45xoS-yTup7|^~gLD656V&R&I%9~CeD>eF* z{CS>9H1;HmOqAB>yxoa>K0%v^c8#h%$s!Y_HOdn8I)g*ON5gZb(tLEPM%8{#k%`h8 zt*P@1w25ffsM_x-GErKiH4znOoIKinRPCh`nJBH%(N&QLPoKa4qD&v2{n1?uUA{42 znNZvR4BAArYgFx}6PYNj(VB>YE{NJSs`e>~Omq&7QXLCG5D_F1?HX14ltd;vhem55 zS|)4PsM-S}GErKiWHmSlB0`&pc8y+gZ?ypDOeE1f151fG22s04)%yCbXq2tA-S8xR z1W81@M%DWI$V6!$t%+!;*j~@BQMGnCGEv$`u~L$L?Q&$Iv_@+pI=@EMy3oi(X^pZK zVmsbPeT07^+I>{53yn;a)+kH#sgNknPK(!#?kY0+W%tot_lD`ro@kBES$%^_F=!Lf zu2Hq-t}7a?iKr-c@@UtnTF(@jD6P@*w)_0vv**sf>pjm{gpz&u2l6WuYWtr-n}~Le zs`X5fiPAnw5-sm?#4(84HLBK%L?%jWl-)JHBnmB)1W~(2)mo9rL}`uIM0CFc>^-+@ z^h53~7GSJ*GyG2M!|#elYa%+oM%6vek%`hi%IF2LYda}1*grb!eV5ly zonZEl%BRDMv-Q5qTk?U?oe2JkX!lWd|7cf;&bv1+6S5$QXeX-fcI*mKb|=}k*Qk#m ziD)OP?#=58(VF%>fh3}xsJfG^J4C5nI#_c;1W80YQFY%_SBSEEN|t@r`v{VVcA}Tu z8%|k!>IzYI2gHge>LW-Z+KH-rO1eT6vnT5gh#gPVN03Cc6O}hw0FAO&m!I}TeFRBF zJ5lv|eOEL}UJK1@C#qgu?h4U4uiVu))~nY-yF#?4>rBXYM0?h&SMIt(l)WmFc^~x= zBoXaI)qYQ1AZKzSg8ure+&gTXJAL1odoPUhaPNt{b+1<(m1l=; zy8g&=?tgpM9uVtX4+!~mI19C|;cvH zQ2d<4{`!mD6PD#Q|61Di~XHz7~_-Lative)Y|GWm#XN3{E>e!adUKFSi^6bHpF9n41u z-yYpT?4jeC-A8{b#jIz1lqFiysPLUU3Q>!XelA6#jE}NJH-+AGjaqzE?f29bA0>C` zV77z^|3tL=sJ=_5BR)zJMSg=Qd~|rf{E6L1A9gQXfca>nL@hr0`4ovVKH4Zzi;t>3 z$-3jCo!Oh$86V|{X5yFdQN(HYzL~y0`tcOAo|%sxz0e?0i;sRGMWURKazvL)8qMT* z>b-Ba{cG@dPs*`eXHxs-b;U=?9l63{@`!mTqJ2Jk$-P-(v!`;+-7MFcNTTpfFvT&5 z+UKL6NRcSxqa;y~EXRLyW*qlKKxA7nfnNBBHDda--q9k z`6x?tB_s;6{CxD2?hO+gnHV2siDn^DIhs7$*GC_BFHVdo4`+W3ribNS7Wr^Y}bXzD6 zHY5(;AirVv(J#3-NKB)QkFrF!gdp}Z!AA#A%J18KRPB-56(1#Q?ur)(IYjs;qTNUJ zn!Aq7M_Hn>`?Lq5c_xJO51jt_7mt3~ee}288zh$XjE^=-)N)?`gLMM-QAAQ8VcmaHrBno!8Vu!QPa3`5%K6*7pqKuC=O4KqRRr}$0 z#Yaaw$+q5k=7BTkFP^<{KD+&`SsAe}+LL=W9Lz;ZkmxvK9*St6k4kw}Vp-3ukJdyK zXhGEOqmR0`NQ@|RUf(EDi;oUcB+B?`qeLw}s@}7qD?aL0obC5)K$asS+Y#+Ps`t|A z$b6I}idhqg;uu8jKKiK?v!3x$k|;=)V@TBEqr()5GCoQYg(g81$01RRkA65YqV)PG z*+B~=5kV5s?xT7Kt&aF8Nfep{Q5=J)-A6y2m_{q_*)U6=l17PIeDsMFi84OgC{c@# zek3uXw2!h~-mZ~+FMLF{Biem5wGLWzpAweni$kLMhChDk#-G0Lrtf^O-A6x@m_}(I zC5h(W42h2SJq1K9KKj)Zi84M)62*0TWPP3q;s2kz_Ybn;y6*hupLkW3bvzU$QIa94 zDbbeXHN67}BteU!ryGx4BA6jYB4~0dwrW5T5@CUuAwgSG>`i9NUU`+o$cUD*+OpRf zThx!x5)4Q(MM{)}H)ItR+m&d`-pEx_61pVEhl`FYdn13_k8c|?t4y`pMC!yy!LNC{IqD);-lKLZw@Zp+*|$u_pkJp<#b@| zvv2-^e4wCj-lWgIxpQ@O)$XJI)43VGAD)h%IQxF|Fsny*eRN?zW=Y6$MEED7-AA>) zd9jI3?xP#>-Sw7#-o0Rn`on-|S;%3lw@7UAQTdZW+r@kR-wmE2ruEHBLiCFB`hz2- z;o^HG6$FF6d2)%DCAub5hD7H*rB_H4qM?uC?^aabyd*>?^3iw5f4R3@xfh)ht@)^* z50r&`1Y6&{*hFa`ow9=#d=>tQX!lXAZ(eMow2zWRMP+kyAlmm?AKqOK`{v<2%|5F2 z%}YX*@llc}NFst3qTNTezIjQAGCoQY1vwCH)~LltwZ3_=iPApGcF@`urlpVYPei+q zYJKx!6QzB$C8E$QqJ2K9_03B{l=0C{iCX5PTHm}RL>V9Ll&Hl=wZ3_=iPAngSOM|y zi8BwL9i3e@zmoI%gXJRfI*jm7M7xh_ee+@yrG2y|qTmanb|2OH<|QG@_-Lm@Ek3IC z%}YX*@zG9+T6|RNn-`nt6h6vz(DG-UnBgPa5$!%I7o@Jf+A%iKDSWgQqVQ2fyN_yp z^O6wde6&NN79Z96<|QG@`6x%U5H%v}5yM_O79Z96=EWvT`)ErYwBVnJb{{?GzM>iM zQIcrsH7ZISTqpJWAZqtft#4jzjk=ME@llqjAM1xi{eDQ);-gyMyd*>!A0>%`WIcvN zEk3IC&5KQx_EENj)|#*^eFRBFyN_yp^I{XF=c6pqm5}K08h-E$G0S}>t#4iuqKuES zL^ndB!`V|n)Z(LB-@GJ586Rbd`fNwm3*XUJ#(Im7YJKx!6Qz9=D;UqihE)^wRMW^H4%5^f~eo`zx(yOKl|)Hs`brFLX`1QlIUa_waiDi zGs}9~N68La<$`Dw5&ns2_ff5HUJ{KmKH3sd;XB&eee^=0Lsu+*l73J7OG(aA zdiz)KPei+q{<=HT49rJcA_~MHYWLBLITB^g>pLZCIj_HzBT>djNuoH9hc>YvYSc0x z{hiE+(mpy^NyhZe13^TPM6~;;);BNq$V6WsZHXwfifH#yt#4iuqKuDrO4Q<`THm}R zL>V9Ll&Hl=wZ3_=iPApmt~lHK=D|M^;h%_hAJzKi#U@JoXiG%lpNMuJ)%xZoA;U zqihE)bb0d;{)uS!QLS%YY@)P}vP54aSzmdg$ojI{eVEXbpSAm_);BK+QN~AEqCZ?C zihHBMDjkcDYJKyP5M_LnCAzOhbkXkzD{?J9s`kx0Fz7n`ZTGMAmj0cKm-WqCTK_=N zTR(fUsBZQjl$qU2plv+?U7_ zT@wkQa~piLdWHOc(>YV+bzK(ncfz%KpK!l9<}5TaQCg#9cOno(#2AlgAM4egWRZ!| z8YPK}%Cw$jp^uK&sM_x-GErKiZ0DCPVOshKZ6ew=s`h(|OqA9rOLQ|N+V@xU`WIi= z_s9$THtasC_R@(=l-B6ruE-wgr4yMbt?c8#iiN+J`TLZe*A0-xpWjrD4u zlE_4-&?rZ=@IG228(z(`jP<|i4mbnzQL-8w+C)UQBihIMbD0sPHQEwUQS4}I_ffUJ zK62L6KFU_wt_VGxg+iN%c8#j_^^u9v8fA$tghcy=?C%8q@GU;7)-FdTN^2BXO02cZ zi$V~+9-&P{yGFO%0rMG|XpOQ&H$tMg0$ClE-?#gyS{J%kG)h*8Rj(3qh|ngYU88DU zXk?e`bLYvHg%B=3`qDK7u5oU8Cyy(a1!dM(ce_2J4`PKWH8{Tx{gmJ+Van`X&$^ojal5 z)6%iScZPlQu%@K>Id{3O&2vQS>qnCl4cCw2%WQsLXqH5owRxRsbT>OJ*YKN&-g?Wz ztqc2a9Bgmgzp${sw@7d+{Cnl}iT9j*V11Z}yDwnu)sno5_}pdx>2SsQ#Oc$8 zW&P-;d|;Rf{1egcqfO6UPD!-UM+d$-{J|sssz(GxZ~4vcMN35Gprfsf^`VbqKG5u= zP0w9UPPFc$gZ<&p@VU!!)ok$G<@>rP8v1DI@1!*Q=u__Fgy;3iiB9CBw~CN@OaEv0 zL_;5iM$1Az0!FG{xq46U+NL$mDTxyEQE_>4MJ}iy!aou1KH9X#IVDlrM_Hn{E8_JA z{Z$7^|D`+~wp%86RbdZiO1{&&z&)`*NZdAAQ=raRz*p zCF;o`>xJWJD;l-(W*e zA7zQwG%AW6ZSC{XXWW}-z(-l46KT}qqfPZpDK$EUk8;&Fer(6tC;Su9?xRihOeu*@ z;iDW;WPOcnSkGj+KHBu$<>W*;ALWQ5>p|2LuEzB#*$|&?zCPOY+~wp%nd_s6*Eymf z>7%e3ZSC{XrkcByL}?!-E5t_Z+ARHC%Ml=62*uFve*Yv`+0rS zbC*+U)QwDxkCH?|vK~XCmh<|i=PoBF%J^ufL@o2trn=CSL}?#os~Fcrop@pkw25f< z(Wbi4ltk(IC`)uDB#NtfJ3&t}%Y5|n?tqz%OpK3qO4Q<`&*n&!@llrOVojrk?C)HE z@9xiW`+T&ib~$C%(>{t-I$72(rzA@IC`)wPYjn}aHHnoh{+_eXN6)(h%z%%QL@}mc zt-fA}T70zWxy#8l%J?Wr6y4oG6x}tde<)hD`)E^reM+LVkFwR^ST*h=G>d4TkA5`A ztY^;aTOumT9Bu7B+VtGzlp3Ya>q(-+<)~hx{Y{}6c7Cz=Xw!3-lM`iplqLF-5Ja7Q z-=9P6yheWC?xWl8jrolAw2zV<3s7x?2>(R1`)E@Sh~ye&e3T?w-6C29(dwY=A3lBg zIg{nQ{z7INrG1no>iu&_)YsmHT{SE|+VtGzzuXn+PuqR8 zsZU8tqO^~;)KvriiD>uHramPpiPGowBvIT~5~YrMj)SOuK6-Ihe6&-d79YKoBT>dj zNutnZJ%$>!+-GX)rIRx2X&)V|Bx9btd^M6FYWLBP<)~3+K1vd8-$$FCyPQ&^^nA2a zq81i3jVqqL8@E6(CH}=c6pq zg^(zGm9GnJdhT*^qRjnzmgsy)bhrW{sI;~CXw!3-lM`iplqFh(L}hQZwfpE3?#(lB zeU$B>g{=1x{)uS!(Wahc$u-K%M_HnaqDNfK8~SLlro?i6^h=p(l%9{WL|1A=3)!!N zC$L(4^tl{~GCtZVQOkLKQ{TLlSx?VL*$!I%NtNi_2LD8~`{+N-QKO8HvP9qNv)q%# zHT~)*9)9XO4?p!?`}NVL=PswzDD9&x(d+;4Wqo3 zUH0cAlRtO)ZsNJi{?oY`z8{_}ee<^E1LKYz{1egcqk7-GxI|sn*EM=slec2Hcuv0F zx!%zqaZFkwDtt%VCXH6t`EQ|+XzfWBm#BTL_Znrp6SaQMr1vC?OO)1VOGHQNlvj3* z>iwSL5~VfTQs)==C!*a)^?pxriP9QviRkni)qCm0B}!{_a94zR?(%T8_@c0cHWBR_ z)qCm0B}!|QC5n;B6CGZ095UnA}&!{qhvKWP8blOO+>p!&$%yU++C5lL}`t(M3MC?qRxIHF|2F|uaA!RQN6xC zE>T*eY^Cjn5JdlQXcN({QN6xCE>T*eEfE#Iqpkg%Nv~awOO)0qu9R47moIsZ`Uq_z z+BLf64mbloN)iP*REl9A(XLUwE_9D*l&laFg^so$iD=iTUKbjdDD9&y5d~WiwQF?S z9U`Bsr+t*HzNuakhKL}EXxFG-bGJt{+7eM{6w$6xy`Cv9QCg#9WkdVdp7eUAxI}3m zZHXwfiD=iTUMmupD6LU))%b7)*@7^He+|{l)+cm1MAB{_t)+oD@>^9M6fBv6*XV5pV;knDl{I_tgk8(qKPM*b>+uA%wv|i7Y zoM^aywE9&~Qf_pO7i(HW_Oh#My zC!*a))iutMiPApW5>c=PQPHTSE>wN)atfl1k9JDb;-g=7UrJ^p6XT-Xy?xzE%R(K=bXkE+jIj;v8PGBG~dDN&1$s?S|cL6q^) zPKjFPqiS7fWTLc>vQ><0lIOT{2meI0`>0wM8ks0PA7zOyghcy(e<$cVY`M?$d3V6f zMkdBbJ0)uI(Pwic%J^ufL@hq5)-FfRdfG>^0>WCmyy&yuNBAeA-AA`_)F?9_Wr?nZ zM9V_<`F{B4-2rC6M_HnaLJ+kgvNzhw4Bz6T>T{PPXT2Ni86WMGsKrOs`ufO3X&)u4 z!K>Gb9ueW6h;|=U>+2&ErRSq8(N~2;`-`&Q|Jye|@C$E#;Dh$_`rmU0m;oPUiM}Bu ziYlDy+P7bO@$J`s!S18#bC*+Sl<`rPXf5l7?`SJTEk3&K-kgs{X&)s!7C@7T@J~d$ zkE%T&QfQQ!kFrEJM2{d^7P4Q-TJ%9Z)9&hO%X$3;cYu5}N?#vkiM}KRheWqM(Qit$ z`>6Wd zqF@W6b{|!ryPSe3bA7Z^qL%aeOYTd_Y-D15v{Ry%`RMOtMwIr^!Ai0{^4#SVSXLWF1^fsi7e4Ak-)GA#JueHwcH zrG2y|qLTA-!%o6>AJzNjB_PW9C`q*Ro(PiIhejLcqy9b3KC1W4OF)$IQI@D5+lNH` zen`~fqk7-GxI}3mWjknX3rmdkAc<)AQN3?oT%xp(wnP+KMYQ{<-Zw7+QN~9*C2EV5MP5M_L{Q=%3h)%)hfB})6~U(6dMJDo`ygufQN3?o0-}tMl0-qW9z&uQAJzNjB_PW9Xs1LiKC1W4i%WD0 zALTk|6{614M`#n#?xT9&ytqWC@X=O?3g6Mz?xT9&yaYr!AMKE+#YgqNc?pPeKFSeY z5IvTKkN&(q>;Yl%QN3?oT%xp(k{z@#TSA0?BHDfQocn6>x#CRwXiG#zsiUpkNA3jaqzE@0%BwDD9(c2dxz$he})c zC!*a)^}cy=iPApG5?u?4LaSBq%mzz+z1}x30a3(R1`{DLJtaoEQDIuqKuESMCZe-N3ZezzyIyud&~R( z;MH~?-F64eC+le+Wjkp3k*K}%dcAL60*#vbl=yY{EK$s!Kz7k<*6-VW^g?DDrG2zh zq81<3`{pIkDC46n(GAfgvc4>2KkV&jIj`6I=EWsS`zYB#3j`4{4@I=kM}OUYCHag@ z^z~7as3>x74n+Hf{7!fc-*SEQqB}rlM49t?k|?e)m!9PCYTf}MYoCu^a&OFxDC46f zQQ@X()Z(Lh-@HBIql1-XOy9hrM(2es{1egcqaVvrqs)A?C8E$QqJ2L4g&c`8KFSg; zgk4>$W1ko5-_v}3RPUP?H|y!^qbyOM?I0?AM_c=Oz1}x3E>U_u>aIB3`{tEiZ;0?u zM7xjbee>cHrRSq95gn;hUfF&0i|&n?&7K$^?UbnHyk75{mq4S;e3T>#O_qhc>iZa; zGg;=NPq+i+qfy#NTk4<%|3tL=sNOd(fkv76XiG#zsngWg>wWVQ5M_LnBwG3`2TANh zqxSQ9y>DIuqKuD{L_xA1L!uTR)%)hfB})4!*+C1>w?hO;M7xjbee>cHrRSq8(btJO zL3Fsb$vd>5LzIh3VGCs-@eN&C-mfwHl(dXR(@|iu+=k+Yn)}M2y z_RTxAzqc%z(Oceh_%G|5x3vBN*EX-HZuVd8PfMiw=H0ovdbiz2{iky?d_O!{`sS_4 z2gaH__$Q*>M?c~YI7Xw9iQ0X1SxQ@3qMISnvXK4idbfV`xZOw9zIiE#nr2VS_c{hF zQQTc#6Oy>9SIxWCj!z0v%j`+*@)nsWo%L+Lr^1u;5!sGt&w91XTV$ei*0V%$#n}_> z`~98ZUZ~~nvfAY>1yLsJJ0)t#dbKB6WTJG|v)zgO{Im2C*^X$>dbKB6WTJG|vqU$& zk9wlW`u@ci_C4~#z76|Wul6KML6ph*PKjEwUhSY2nJAt0gL|P&2QAE&5RvVO_N-Ss zXhkMUXFW+&a(=K%$B*&I`tYuZWvo{_Xr&;^WPPVZEm^Pjdx}hSimc~4zj$pzqsVqd zd)BM{o+1;SBI{cr3Ku}MkM(N5rxZlFtmlXp!VVfm4A(tbvR>^@6qzWU^;7mKfhLjd zi1w^M=MFUkSMypTS|@AIdbK-IWQ{r>WwO3gqL!>zd+9_bN@qRWRipK>UhSn5nJ7Kh zvqTHYbBsuc;mBl};j6uLQV?abo+Jw21j)YFYBC;LPp7m;UELp$p4w%o#M341sef^>*>Laop(Vq2cSB(@JHLV)=t8`eR&?v|v>m_;T>{%}d z%txd2c|A*XGt_A5$%f}lmaJEMKt$Fko%K^zgA3PDMFXGpY7dCWMCq}+K_MuVx3}5Y75Sb{Q^)1ydgCwGTtXDf0L?%jSeM>~4RYZH%s~rnc z5M{EyQ=*o!UahZ>Oq9-gccsK$Uk@!JBHIz|S+CaDM8vM-BFo#$dbJun1yLsJJ0)t#dbM^r zGEq9~*(%0Yi#jVGk?n}~tXFH7BNL^wz9pi_enk6NuhuT7AX=|o9$YUS{*>EZRF6pP z`Rk*d5nVcV_|C9)xw^%F1X(IN2R--7)q8r^W=WLsQI;rbmwnckh0rSLyCQn+@}b_c z$f0-lkGOwr<@Aa7oP1z?sG8ju@-gP-sypP>%{Se6Xrc7KecxS2j^7dd^>7E{?egmC zD&eE@>2P=X#Oc$8rFPk0v&S7f=nc{Cqk8RfT%v@J{+as{TOulg7;Wu7`Wg4;ad$-$ z5Uu;@V1M|7o0gSSV$JpLmen6D(M_QTjUr#l?>~OzhR2T-LNxSI{GI0Bj!)%CbRr*p zo1o||%f+5fiPq+$EB;$3Bv!}$M{y&QUJV{sqqL7sTWLElRN$Y8b|2NN!Q&F8eUv0B z9NVlA)2qP~5M_L{Q=%3h{j&R#G8>r~AMKQ=#Ygq}`nVdUeUzR15(M6~P9BUM>{2I@zJm5s8QznXs1LiKC1UAiK|iCN68)# zW#J?>hlp%PwEL*urz9>>dOq3`QQ{-Q<8uv52o`nWPEk63S9EmdXQI_ahNVHj_79Z7n>Fg07CHs_A*9cKW_$Q*>M?adQMj0O^ ziIy*gMEiy8_n*CO_vet^NA+GhaWzVx*ONr6SB6A~T{W)zRre!AEk62ncfc8#kFrGl z3?EsKk*WXg*YE!96QUL$-Oh|CJs)K|zX*W2_SQY=-H8%pJ>#P!(aQTMh*tlbli1wh z|N4@9VfWDs?tPhMJu@FAiQ-%dMEfg3G`uTf@zHPONR*k6vP3TlK@cqq*{^~bzQsrN zeot|;p7v3)myYloZ7~l;w9iNNeot|U($_~xqButaQ|yDN-A6CFL(PDXc1qOZqnC0d z%J?Wr6xyuEP@@(f)jMd#&3f8L2P?@o9zFTc$unn9t)D55y|<_%_Emf3;UmYF_a8v% z-qlEgsNF|DmZL_Q`6x*gz6r9}2T{9^>K(M=YLq^&@06&;NBcQyl<`rLD70CRp++q} zs`n&|t5MoV-4*A((UUALQF=bw5>aS1)TrgTB6?4<1VowhdXgwcB9O#>NYvt^JMK`K z&F~o?C5eJ$J%&UrKKevvL}?!-J7`^vB#7GQqk5OO1X<6_M_VEa!XRp&kA5jLjnebc zPKjE4^tl{~GCtZVQHzi2ee>dGJ?*1x2d&oc*Xw=r;u59jqb$*h?k-#Aqk5OO1Vown zXs1LiKKlHu_$W)Xmh~9x5oN5m_^8@9@77y;OW$t|0^@05>F9g|4)&AXH8o992Bo8kN6${2InUAV{^HLCHe3T^$ZTct*9c}IB z^=jX|$V8{`QLcm5qR@k{!aou1KC1T3i%fJ1ALWR`M?KlT*Xqt|gtYyUHN_RWh-l=e}U=t@WwBUMGuN7cT0DTp#Y$`VBeL#qoyxH>A)?xSko zyc9$kA7zP7q*05Hs(te!6Qz9=D#P+(M?bC zlEnU^#GN4PE$8)W-@Ft=86RbddXmU`;W^sceRSKsIiIYjeRSFmT9AqkC^FUo%Pn43L)PBdznk6v&G$Va2JkFrF4H@6|tO;5CPL_cev zkE(t1QfQR%(N2k4&g<2_d69|IK3Z?@R6cO(^r^=_bj9i?>G!n1l;jjaUbcmQBHDda z?VA^wD1CjDBw7}i;T*igK8V_V^rAc94ESiLL@o2tOF0r{e3T_R?*I%pxP~8U)Z(LR z-@M3KPy6U#CD|V7n-`fV?V~Lbg;+z4TIQo_-@Ft=ne+NiiCTPA?VFc^DC47@61Di~ zCo>zFXdiV~ob7${FcKjm+Y#;a(T`_Fl=e}UXd%uCqKN!`Cbe%~imYdRv{RxMA65J2 zr69`qXs1LiKC1T3i%gXEQL=*;vK$fqiD>sxwQpWzqO^~)ME!jw5G}p0^6N*{zIiE# zGCtZVQHzg0=Z3n>u9Pr7N)nZkesImnpWpX=+<8#`#D1Si?VA@_qqL8*9kl$aM%+z? zeuN+7{l528yN_yp^Y$+s=pB`X(7mJoxBJ&F>zlW<{sGrEuc&VJALJiM zWc%jbZTC_C>D&z84^LV5&5KRc`RGI%y;Z)u-qAmIFIplh2OVu2HR|$b>(SPe+bVbzt%i&olp4e6v@)1I!pK-sL4^cYn*?v#Z zn~#_^A=+n8T9>yhG&*pB;ZM2gg;C4;mWay1M_YT=|1UlVp8YM9o>R^(2c;bc(F!I={3&!`J#f#U?sM*0(}ba(%S5XT8=-CkvvJWj#l9 zQRu-xQE7Yl<(J$a$hlfLdm4XUuXWIhO_a`hvQLTd9BnbiBihIMbM9c7pM_2`!*7Ww z*n+4%>$T1=u{GN0qmyJkNfg-*lGq;-HIMaLzo*zl>8xkFYOD#%(npX)v}e86OD8tb zMvYFA^(_&FRuS!4uk|U(g6Je!-xX1F)@$8~ViTpa9(P5IonMgMSBv(n-*WPvfw8_L zqV}xUx@yGMXrqr#lJ#8?HD~?#%rr`8J=w7UBM@Re`|Vk;^(o0hqmzvFBvH&iK@|HS zYtQ;^cc{#Lbds!Ri56ffvGn^xqUNmEI={r$D4q3eef>*9vhoom5$##8b=8PXv~gsb zBVG&WZnhw+V#r0TEt%f-{tbfA4XLy>j)Q-nClCf-HzmlJzXn1y99m zbmy;Rf9HWq?uASGA|yKgYTgC+zI=R?&U&^Qyl?=n=v2UGz19OF3yn^a^(_$%6vmiQ2){{iRt}NtL-^XEPgL$mix@yEGN@qP;yId{`Nkn8jqJ6CYm^)xTK1z@E zEfE#IqpdybKe-o(PLlOq5jAJM)&pYCWWBpmLe$s$*%R)8BHIz|S+CXC$0kZ=eM>|~ z`7W>QS^vbWWPMje%~`K?EQqa9daNhwLU9&~h-^o+XT4Sp9-Ang^(_&dKI^qg+boDq zGS+uR)SUHS%FIXUtY@nj-~7klz3^-A_@l~4WILig>$TeDBpSVBq zh}LVDC&~IwiH5by)z5g6vQ%^qdd`^W;93(3!S1``j-$mS*Pd9SZ++Qr+TT9Z=(Wdo zMO%~$zx0N`(|_sR_W5XTwablTeM*g*MAFRKQ>>(u)ma^>LF zJAESDB{5<(xc_vxUw`8C>B3SCz9ApD^br}1XdjtA;tn|G+EZkrjT#-B^-Hq6uqC3x zceJ%>5>Tmm?FUHOf{oZV5Tm zg+iN%c8#i)wvma_8fA%YhD7`Gvfsb>!oEjd*tcQVs9I?onJBGMvgS_sjkeGxqFtkE zU1(&Yv_@MZ3br6>*Qi<-8ky)68s#d)3Sn6K2$G0)jjC0Qk%>;B(N>5G-_h2tQMHOO zGErKiWIfY}oxFlJ5$zg1=MFRj=S(dT1z`}iYgDbd+bbGnt8W&CVS8&z)C#f4L}?#o zi54NzzTe-WdqAiaVv&i`K8htyF=wO zd!jW;5=D(Ch+-c^?HW~AjqeqWvg=3vow_^?D6P?!h(fD~c8#iQoFfyZ zeUx3B_i|xZ`3P+y+BK@K$c;?YX|%o~can8aEYWL1qQm?3_kZu)p~0`l6}h+g_uT7a zup(Do?U;gSeMN3^qO}#d>z-ueirg%T4hT-ZBG<3Y>rA7&3rNF`1sKK3!jnBNQPwzX zL=Wu0rFZmycJJsdExLHw`q3+&CbTREr`C@yudXsr6OvDdE6&#Sqigbk+v`NAtsjj| zw9!WgzB>FVw*^7+jwDIc}dlX)AJL6SdEtyeGA^eiXANMEmSXTag=^D4q2zQLjm4 zJL1@9gG0xSvnTD@H%W*xSM>iPBk5u5m64(IX^(Bq7RVeWye%S+A|bk4suiTwjgRB>!lp|>UZvv5aqJIL!y?f*D4!g6Q#4hrFHnwCZav-&pDZArqTLc zkx8!RkwkGGk8H<2h}yGWiqkVA%4B_~L@imb)r#zytY<45Rz#ictsm8DMPd`B$NH9t zBKr~TS^s(W))~n9PKjEwUaP)|txRmS%@kTk?n}~tk$SSj*hJ~9Z;7bz9c}Gnz4q*zBt)4Rey2n&W4%^s8=EMd^<-V>NR9Fe*^X$> zdacqnHc>k3Nup&DGQ~cK+Oz&k?tn8e*0V$xYDE2hNYs+`TJ3UdjnY}qRx!Rth*my= zB%(d*wc6#_MCq(&iM~E0ij@#}TD3jve?P~puh%Y5vhJxfqPx#$s?{#v?7xM^+T|>X zGP5U^=o@Pq-SYeXsaE!LCbf3?ZG&gu{D}KkdP^U4@v_?GE1!LHhkT%jwafm~;qJ1v zc6m`gFs?YmKN0Ods@5(?Cfe+yO;2U>C4{}D4>=|*(Up)WRy$&(YVy(QhvhwF?Q#mD z6J`B=`ET`>1T9N+F(fK`qiti>Z}|5V604wNfm*v9nW%mCDw~@F(Y`0U^Pv2RJ?qul#?nM6_qUTDu&X=oDGc5nYfx2hrgQh+t&0jP+{matfkc)^kLQ z8d1N`&+ygS<;XWTJG|vqa}ZqWwkL-|>X)W4&6t zoPsEm^(0Z@H@H&b3HE&quasEEdbM^rGEq9~$+}PwMMSnE+OuA*U5-qY&ia;!*2&tl zUaehDL6ph*PKjEwUaeh@Oq9-g+!e9bE*GN8(nn-FqCM-k+yQ4`tY?YNheU@n`~&j) z_N+gjBT**nS)vOeQCuG#ThFu+z9+nMr`9g-m8>W0LaR3m9Ykb1qCM-?+U3YZ>9L+A z`lgU5X88RlURw@+ZQHY6tzAw*l*xLQ=o@N8H)Vh46~BDf!ND&fY8mUd-2w6$ndq^e ztqX;Z`iN{tv}e6qyPQI!SJW;~uu7*TqN32z)}HkjGSjH@Q6}qIqH97APqIb~ySH1i zUaeh@tWi4aTdE61wj`j2Nul+OB=h}Oy4vtF%T-YZ#862;X!kiWL+poB7!8M zJ?qul<;Xp?C@A2OPSG$~oDC46n zQMo`ohpg|f39X$s9o_v|vd^B>+U1*W?HzsE{VTnt%Egt_C*E`Nf%V~Ydv{;R$C#U| z-X*VYKeRA-8nwUEaNk`=j^7dd^>7DsK=QfE^67AQ*;>22CLg%;5&ns2_ffTWIWo~^ zA8mT>^3Ms1-qQ8%1xs{O4g;cPA^TPEl;CiUGyX1FyPN~j0|UY1r$m}cZQC3&rz@iF z-wlb5uMm66eI;YAl%ya!k&oUgV(J}z$-Q8SZpdMvJ2+7IZ1CEAbl$(GkQlBhQLDit z6SdDry~~r8w!&nzg?}R2eN?Rmk4%*IQIaS$38vTw(Wdz*^xW*DYBhKcL?`jlu85j_ z^vmwcnE@Z|isAUcVUvP3s)L<`y9d4)u0qlINYDyMKW;G-+no zwuA`(M6~;;+OZ%qQQAjaA}YB)+S+|o?O2cl(Mf!?E28H4=riu?m;oQ{il})$s`h}0 ztkEfal&Y^E<+r?oeYEAfGqpstPS)tour4;JltCx+t0)YSdrD57(4f z=A&xom&h8WeH1Goteszw^*+Ks5$!&@m7_+P`6x>i8udi`^P<_|T@g3dhj&HB->*Nv z7l=;cqb$))A&4$-$o}d!`F&@jru$4^%aJHEA7zPd)QA?cU%f@5jP({DReR~|6(42$ zlz^a*@J~d$kE*?NA`_+Oqb$+adQEzw{WaO&dHE&x!ag5Wd+FprbP^wBiM~zUf6wf+r2LzqV#-}?fl|3i7_7jiD>sx zwL4J`SwG2nJxdg0J;*LPiOp62_}<;06}yj$$n()?`&cctWl z-ABLS4wxBHWnHKimWV=~ zAZqtfwck??L?`jlu82A#4X>1puV=dCzLXj8(XNP^?=$^QW<+Tp9jqkVc=Y5$C(oQc zwSJ~J_THk7SVrxlJbdK%^8N#*NXh;0FW(^B5$!&zcF@Wp>nHKimWYBbh}wNr?Vyzd z(Mf!?E23r}?Yl2!27I(DqGlgedy+-gDD9)}iu0c6NfwzXJs)j}==46S_9V-J=p;Vc z6;ZQ~?#zmhc16_eqiUD8$Qq@6w51MOm^C5V=c8(ux5z|kA8m=~^ggO~dCP(5BtF^| zQL~ReH!D8c6;ZQ~s(te!Yn1j;wu9D7lINw5@J~d$kE(t1A`_*3lq6bR8xk!SWxsl@ zyDRd$_VaqRZ(a^WC-G61=yf%so1W-R?#|s$%M~lj_0i|u0Wv$UuXiF$Np!WL6CqYj zGjqr>kpqied^4~Vrl&Y zMQ{D=$)dX1C(C^jV|F5xPv_2={D6P_#M$>tx?Z_;SDY92qqeTxln;!E5ed;gGO3*i zBNKHalS!jXZ*@#qqFW)+A?a_*@7wP#t6knA6D4L(qEWWrQ{jpF2yG(THL7-bi%gW( zXiG$e?`Uh+sM$dOqAAWOGHQNlvj3*s@;hq6Qwme zxX<+Pi8BwLy>fI9e@DjpgE%)Dt|0U4o}f)cyGGUSM3ITo8fA&j`>gjw`-SZ91XYZd z$_BObOJt%`XmqL`5STSVn}~Les-0gV6P-e%tq>K3j<$9mRl90LCQ56xrTThk6Va~G zbMEUHbEPCQQCg!UQDi$*iG2{YYgFx65Sb{gQMPuu5SFEnAc<(#sM@h0GErKiEYZb~ zD9Da|N-*XJ{#yvUx2x6Qk%`h8#g!6kHTae%>Lav?XxFG5Xa;R z&JBLqeN?Tq-76X;Ywn=Mt3|s;KkB}s8PF(6w7g2TgRotr+nEuieUz+c0=cV2yGGS2 z#>iPukM$%`+*i69QM*Rf3bDvUX^qwk8OjGvoj�hr$a_gFUHi*pG)2xfH!@QzvWJ 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℞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℞F-9gDwl4y0C zOQ|u@>So!lWNJv``ugeTN7eOAk%`hd+S1Afip5jL|u;7*E7vB?};TUv!;3=I)I*jQ%D!< zEBBwgH(bwDJ?1}!hkTR^%DsNM{$T$|ZgcY-(O1nMona7>1-uN^v=kQgcci!1wIpVUrzw&Jtr`~t@C#4Xm`!27pudmy6)W18NakkDM-I6zq z+2YVoM7xfv^G72SZPd|`u8zNO+O6^^`YV6SF=>gY@SQx$SRd*re%gFrkuSI(PdN%r zLG)ERdgmBuQSQkfREYz1ufHM&OPvx8brjc4n|1WL9EsL-bhJJGDz`n+|3qScMJBAX zL^otNsCrxr4V|$=9mVgKg}l}{$2oG2(mG1c$Q34&N9ZS_T}Rb9&XI}II@%IZumw@O zj;i-vPC=B>(N2k4bX2|Xatfl1j&@4aqND0O{K!OU9c5>Y??|0v);Ovi(XONFJp9N+ zX&q&WZiht2V|_3W-_no%w{C}rpdam&s6|KB`!1)*QAS5QC2G-8b*)HbqO^{(D;xaT zyY{X#scS_d6Qy;OC0ckL^<<%=;oLlnj(+K|=qO9HmZQRV@+cj?MMuAqBT+_2S)zr| zL)ACus6|KB^-PhgehwYwR^QZe6n!Y7y&qNAGesskhmLYYXUb8Fj;i-vPC=A8u0Ofi zAyJEts`p(^L6p-`j_6XTqve8Zhu)4B9aY!dMJ7t?D7!+ebsfFpK9bCiLhIM-XSvSA z5-q|UZ650_I;!4xIdYD=k%`e!mgrJQw7KdnI;!4xIR#NhM_Hn4HKK)VS5xNZO~1~h zt_zJ!l-5yp6{8=Ckeld35$*k`x-K*_QMw;xi7xpZ1zA5*oxFL^{lI>mNv?WlHZn0f z$`bVik)vhdK=!KfOtKr-wJkcT-gh}gjxsvhDN##5s;*s*OqAA9%z&`2U0#x$gn1nF z6Va}tJ8p-WRXx*>vP4n!p6s|E_3K6LI(jWfqKuBRM7JG)9&!}1dR)G5KR>G8cR6y^ zyRn|pQI_aTIcm{Sb$xwgqO^{(tHI;1ua8WW?nhaoGTXR^_4R`#srKPbH4_qu4@I>1qpAl)iX3J7QIaU`U=5m ziCsrUHuA|)`uu38L@melvMeAoqKuAqO4OpGs!vJes;70dC07mTC!$?PRiBc`MCpFC zC8DCDb)OQ;b*5+BE;6fnrXTH;s6|I*M9YjQqobV?wdknor4za8X&oKSBs(DYU5-qY z*3p)T&ab1-9u^(#l&D2V)%z}|$WcZ|J0)t-(a&X;qqL5?GtPFuCsa8i`cOoBKdSmY zrN~j{xV|N#b+Y#3`hS>Nj?%~VBvH&32T5!rNA2fFhdB~ubd)3tlJyu8wdknoNfx>4 zX&r6JK?@`i?K-M@l0_y;_oFQlMXrLVT}Q=SH?yNq=D5C7qLzO2`NN{4BvH&DLvCU_ z%u$Pus=j%VtDe@;c|FOz+Z#wC+I3X*&5KNw)=`$|>m)lXPZaZ>1}lrtf8XezT}Qv1 zW7RV{$`bv-kSM$$s<(gV$>&D@?EUBqITB_1QI;s&GJTGs!!N&g_0;WGPZdJcqNA#B z-d*qLue{k|@2`jj$G-b6uWWwQ-FCUC?(!e?nncz&kGSu$e|N6K_rsIrzRNrEhLM}l zPei+ps=j%Vi4r<`#W7)tZiht2I!gPLsJ?kAi0;$T2bRx1aBBJCas@VT)wcveCFdbW zzIlH<7tvad%FZW`O*&fP?k=)Sd3-kladcIE^HLC-DN{UJ9a& zj&@2kJg%Rvqrc;%V9J@26hs*v?UblRM}H+VqO^{(4qCeo!1#_=&`(6Wj;g+SDRR_y zo#~2W(h^bOJ9)Gp*Q>sHDTp#U+9^?sj;g+SDTp#U+9^?sj;g+Sk%`heI+_9T9sk5t#cVcZ_SxAK=LO&7hI;#5SMJ7u3qa;z`+3SJmppfqjgH?={epL0% zOF@*;QIhCuV3Jl&D2VRo}eGL}?wJ*FkGhDjoWXXxCBIH!m_#x*uhU z7D94*_hjiuRo}c6L>V1riEe~ML6$$RSAFwR5M^|!|9Rmx3sxqbyNrcE+=GaK?GC zyPv2b?uq26MMqWNyvS8g_oJkP7G{Yf zLO&7hI;#5SMJ7u3qa;zu$kDu~1$l<5=jT1CzIiE#GW{q?6eJNr7}4I3?zxv90v#oZ zf*go8=cq+TRo}eGIZEs3XeQYK@y&}&l-ALfh$3e(GTHl4)i*B%QAS5QC2Bc8s`}=o zAjniCT2@>CCF0*3mf~wA#~A)i*Cijxy&*S)zp~CWs=2vve%;o_;&C z9Hq~XvPAuPP>{qK=ab%x#C}}=e2zpJ9VLlMhHB@YEIO+C=0&c0T1Qz2EqIdoh&~k2 z-jAxjd69|I{U}THO_HURCpuV^?eJQtMMqWNyc9&4ev~Ep_K@iKzIVY42unZug4^LC zI6uk~6>p;+a&$aG9e?P?*TXV0S#(tO&Aa<(f8{3}_WsIc7x($*-FM*wPdMYe>b?G> zJ|mIx&AWGfo$<|+cjr2MKRj7{^S0#;V{RVw6Va}ts&8IoqO*5TdxE0B@^9S}mgt7; z21EyiY!9b(Pq@b4=<=re=A|GyQ}=YY{OPD1mgtu3W=s@U@Phl-TdMw--43VdXk?;9 z_as%%`aOAq&`(r5qP^->m$%47>8dA*N``73er>FuTJ@^STMD8~)ssY#n}{HcXdmlU zPqN5F>8fwZoe0&AXs>$JlPoe(y6Rb?+memtuEaqhaTv_avsAt6NtS{rQ}vw^wT$(u zgH~jsbk&cpg)$CWl97`~R6C-*>Qx7=$VBO?Z;2?_f@tIU(Wzs->Y$Z^C{y*F617yl z>h~0x=p0qgdFiy?;j4a6k%`Vx^{o&^)g#)gUiEuQL6oa{j%Xq5(BUJ7SMDrTueuXO zCQ4U5=~IGSM8t@MXdmmZxLxIQri8BgmWbBL+N)l5CyJb-jwn<0of5TF{jX-0qjc4? zt{R18W$7cT9noI(s+UfR9G&UP-JYPpIeeBVx+hO`;J1gzWcT)}SG{yn5M`>KCAuW! z$|8*XSpREoNBN9Qbk*akh}HRJ$&>UE)sASd`kl;((qlbKbTK44u6p{)-L)KvGF8tK zT?>hhJN$sCWvo|yN+RnhUG=16L4{d5KBC$Y?NzV(ltd;%yumQ>@R$x z`stT;>|?#^Q<8!xQ}ry-H%iqbSD~YWca3=d(r@1`L@iano0*Q%RZp(3ALrzfkVUm4 z+N)l5)ku+}Ooz`BZGEi2o>`94$Mr1H*2j9)10r&c(p5j_YH+Ff-uT|1eATNS5Rr+} zV|`0R>tyX?z3Ksxf+#cAcS_VU)~k*Mk%`h(-_qJ;R6C-5tp9Y5BNH>$w?uUQs#hHg zBIhVQ)^|$OQuUw9EJx|8cV|lM>+6w|h^Tf%d)2G!>r>aRX^vtP!I)4M0?e%tHC1^r91qVh}Oy4t6p6Vo`NV- z^_>#6RK2=(IWkeY>e*F{3zC(UkEnJ;d)2FJmm?E(RbTgj80GBv3ro4G+6pn2=#h}< z_znX%@3|io>nr!4yf<9CT;1be^N^1+t-04P*B|U3$!%RIt)nE-@mgh{qk|=(#IIsh zSA(a>QAS5eqLrGXH>$&;qiT-cb7%jwoapbLe$IV<`_?Y6Y<|=&T`sD-d;vTl@jWLN zivkt&$bF~IE|1Ih)lbk>uTpE5{ky}}<#QJ=7M8WkyYhyy`Ud)mXxCA7?Q&$Ivsb;` z>9p5hIqjIVL{#`r9vi!-o8{*fw{|%N(R$V2wJ)#BE&u2Iu*Cl9-*rzqB^p+Jb(8$p zWg)RTD^W%!b?tIwqW12|S3SEfbV+F7nkcFr(O&iH+U3YZ>8fXmu7yOQ>EYdkYO5Hh zR=v7*IR#Os>RF<-92LHkN6}GB)vIflBNL^oo?REZEA-kM>(#Z(k%`h(-xASDcFHsR zSg)>KPC=BZ`c8>js$N~Y9GNIx_2jzHvXERv#2AlgAM4e%%aMuFRo@a(;X8S>SG~G+ zIR#Os>RFRTZ?srUUk zYU%LRwaY1pa#i0UQOj7bu3e5yl&*SmT_}#{5mD`k_Nu?)l6%SuvB*T}s%MF|eq67v zT~0xisd|>^g6Ji36dt)lIqTZ9kM-)><;Xe%+Ya&zwjmZWv_a5?Q&$Ibk*akh;{Aqo+s)fsvXf@^*e5d znT_>KjQF>$|i3-n=M{Xg{20n&& zV6_~DUUNG-1XbTDQOi;2Ze~R3k%?TzSY2`edWfiYM0?d=&5S5r^(@i984?}OgSu(? z+fTjk)_d*!sJgyBg^n^~JxlbKkm&GH*&h1iefwCiuC$Fzl&<=gRxzU55$#p4uC$Fz zl&*S`DCQ4JW{$@EMR^9I_Nu?`c5n#BdXgwe)?-N2GS;grZ6oI>UG*)kVgyMeco2DTp#-JxLTK>oFv1srt{kUFD;rbk(~vCH9rJWg#pP zK@!nk_3BF76gfK6O53Jc;{?&AkSNH8-j0^z`e)q^^T|=CqfFJaIXV+jOVz6@Z6oI> zUG?ND#?l`fA)?w5?NzU?w2e%Z9_w2oDjG0(w2$@b`uY?^nX2!UsHN)Fm9~+I(pAr{ zx${SzRqg1LuX=T*ZDgXZ>gy|QXIan05%9m2*XP^N;=UZ~V{y_}|!dRCO#!L6p%^mZ+MeH`e=E zbW~eudvx&~{nejxS>8V*E2E~aw7p*ng1SraXr=ACT}S=9!_{T$O4}`Y!&n>%{Y12P zPufb`*hCw3bfl}}FDyK&{)V9Ful}KX(h^bG>EuzWK6ET7UzVR&jXJ8`B{&JueLDKc z^783ov_1YBTMWptNw2^9@7&+V65S9w$kD-qY!AM7_0;WGPZdo%it|&=YnNro{A(YD zCLvna(b4w!YwW7AB!7B;RhA91L~B(qJDofV(NIV67Ro|?&$f0sHc?tf$#tOnOX@c3bKkqYbJZ(XOM~YVg=ZX&q&W?u10g$MxTo@7r}$TMeFsD5ImD61C{47||R8 z9qp8;MMt&u^|5o5)=_fpvefqE5&DT}*HLYKeQct%j-Do-XKINk2!p6yM>P+K*g5J(CPqg)C2G;p-^(#and?lQ61C{4=Bg1pM`;~p z9SfGE&T(EI)sAS_QO#8&Hc`4CWr=QtM9V_9tH9;Wa=l)2)ks2=(NUJ@Vn}r0uh&nz z!vONR`Fj1=+zvAv>lq#Gl&D2VHJ_5$IZEp&WF@oLbj`0PJH*u=%2kGy_RFuGdju=-4=qSCkh=MJoDmhAAa$+Eg@>@M}I#@qKuAq zO4OpGnwQRj(NWT;qSISHZzzdfXn>!rcXCr9b?qb$*- zkf>};9_>2%4fo>Ah%!3L5?u_5qQei*lvs3B^LvV2^|X$*{2I(NWFiEq0F5I!Zcdq1q8q?TB_A)m+|U6Qy;uC8Bk*b{*B+ ziINaybhJ~V79D;5u;^%~L@he{`OJvYI?6g|y-w=9@)7!pXxCBAH!n%mGuN3|qHhd| zmK%Qi2PN8d^vmvrnOzlObd)7}vnS|tbWq6lU{|6Lwdm*z?uD5VW%^N;Xszmn8Py4>h)IyElYGw=paW23$i^7?rv$(QQbE$0nwRs zR8n(9^v^p6EYXdSsBBFh8+CNazow9A_05Y*)ZUMJ9c{@$3;Ky@*HPU!FD_A9M_VE) zS=Z} zi;n8Pc?pOzI?58ADMu|js{7`}B}(h)Xa>ZS=Po^dd2$5b{7jDP@5C%|$;ing^b^sp zqq=WiT%xp&wnP+cLDa6Jx^G?rqKuAqO4OpGx^G?rqKuAqO4OpGx^G@wqI2jd<)Bp- zQs;=Mc0{|5>b`k#iO!*;9MOf4==f~jwDn9&@|x!Jqq=Wi0-~Ibc1YBsqq=Wi0-~Ib zc1YBsqyNAq@U$y;af#A8+LD77^b^spqgOH`O6zD#L`5OzIX|lV=EcoXN0iagPKjD{ zRQJtGK$OwZPKjD{RQJt`OO)18)M%TFXnEjp_E=EWsS>nLVGSbg)5 zqdr1E5$!s<<35UfI(%A3S)z-Qi=`)uT%GDax+Je@KCZv!ewZ0iMn^j(YUxLH-@Le0 z?{bvU(N2k4bX51vi%XQ&QPM%H`XOJzK0-ec?K-Oa=EWsS>nKa~%^}gjmTV7i{?I>q znE~>*!Ut!+eO+I?57V3yESiMkNbodv+bYo+D94M@gd9Dx5{ z_jI(B;+&xK&!C@(b{*Ay^WqYvb+jd-Kn$XG9o2pF5)fr{v{RxM9o=&uN@im{(~ova z)Y6ZBHZ!8Mj*e!M9TeZZ1XVxN`uf_s(3XhKucNweUILma1{g*T@#|cAJu*H667eOqb(7Ijw0IoQQbE$0Z~RrJ0)t-(P3s) zKi_qx`KuneiD*Bre>yXwbU)gXgBJ7?(XOMqZ(f3`XLPhBqR34Uwd?3_XO^R`>KPsF zl&D2VpU;sf(~ova)Y6aYzIk!0p4L&)K?}b4h^Tf%yN>F!|LV zmw+gvqb$*vgdK7e$4=$XKXl`3O^8}_RQJtGK$Ou@mgrtc6uF6L??+YNyyHjvr)8Q% zf8{Oi|9SM>rOhYLU%YVXe6h0m(W1Y3`Fv5`C2yg6P$KJ_cZSeWd3TsecJAWEB5&Wk z$V6w?(f>j|yLo-{7G*bMmp8vX^*(p6`1Eer^~?1K`$xXuzB%QpND89+bo7Dc zvk#nFez;u0Ma@c#CVQ0}KaX7A1TCARTOm>CXf?$*uYwD#EK?r4Z3$7;H!lUznRN6g z1V#V!zjjYpqT4m1g=|-EaU;{&Mjc)Aufgx0m2DyV%Wfl|9Hn)1P6sXICi+lBdq1lB z=B3EdnU3pgI@%IZ$+pR3V?R1oM^)dv6hs*v?UZQPk51Q7)i*B%QAS5QC0aYKpQ@v( zZ(d}gw2rb4T02tVrH{~0M7xfvzIl;}()}n)bT=f55vqLV#oIpo;%!@Y9aVkvQV?Zy zv{RxM9aVkvQV?Zyv{RxM9aVkvA`_)`bTk8k@y#1o`GQnG^b^spqpELSWTLc=l0=1L zuLrUNPj(orT|ROAj-z)jR$E?kUy<0nE>!i+OF@*;QIaS~B7!iYj7%0CRekeP5M^|f zBnomMI%v#Mi;k+kd69|Ep`-ITXnB&*Pei+ps=j%ViO!*;tq?`dBHH^=)i*B%QBFrW zqD#UKRgV>7CvVYJB>D5s+w(Zw3kLbj`KN))0N9aVkvA`_)`v?T{E=qI9G zN3Xb#BA+wPw2rn!R5DZX&70bfs=j%VbJP)KbhJ~VmVQ+A%}YU)(a}zcT69$P&5KNw z)=|lqzoiPoxKcupSe{iy1j7dc019mNa?t8d$R=8ryX*U??KgF~RB ztb^8~5X8BA=qI9GM^)dv6gkT1C`+^miK2TN26LP(*XyrmmZS9fQI_aJji@I)3`QnP zKl+Uvi84CcDN)P$QPnpua@EuQXiE-S&`(6Wj;g+Sk%`jhM_VE)8ZggwCe=4D1yQCS z?UblRNB0hkj&@4aqNA#BUgR95b#ye7?11>@MJ7t?XiG%r*HP6sF9lIXM>{2I(NWbm zF9lJiAMKQ=MMqWNyvRgp9d&1%=XcOTABt%2M^)dv$V6!!ZHXv!6w!WuRQ1hEL6p(a zPKjD{RQ1hEL6p(aPKjD{RQ1h^OqAA9(m@NeauA`Ph;|)See)s{rFE1gT8LtTC}Mbb zOUwCD)i*B%QAS5eq8Ncda^TOGhAYG@I;#5Sr69`aC`l9~5kVNyew|76&5KNw)=|cHon1#aCAs>mQnxJ8EnnpuKKkw{ba|`w zqxc=tH!lIveLDKc^783ov_1ZUQD}7?M1@7CL_-}dx8=WXzJI;$o0ov-OgehP6J7aJ z_k<<7Cc7DXJNo<^22O;bj>;=Wz7d5ytBk&Raf#A8N;+tP4kG$cM0-D~`{u!7tGbsp0x}o^r49MepL6(i%XQ&(UyqT$=Y>P_svT{l+n>niCT12_svT{ zl+n>niCX$m-8U~T(K&RKa?nDRBSJqB?K-Oa=EWsChmKN2(Jg@}wn5acqq=Wi0-~Ib zc1YBsqq=Wi0-~Ibazq!Aof7M-86`(8I;#8T#U)DXXiE-SsCGoVj$Uye&9s%aaf#A8 z+7eM@EQs25RQJtGK$OwZPKjD{RQJtGK$OwZPKjD{RQJt`OO)18)b`k#iPAdC5?u<3mY(d?`J+>>GwHs035YT}$`W0x5%t|vB~z7qGBR0oRQJtGK$OwZ zPKjD{RQJt`OO)18%z&`^=J_f|wL?DhbWgO7vJP7Q7^!}ynb%R> zH!nes&g7d{n}^R5U6Y&y(Xx>3ss5u2{&yPZ;a_(@%qK_P$i(Pqr$jCNsP3DWAV(P; zWr;3HzKwGf`4@OQT69$R&5KKv*3p(6w4k4e_I_0N&5KKv?nhf9DjBQz<{^(8byWAw zOF)#-(N2k4bac;sD4C5+jE;6n)S{!G&5S6mqobK*2gNrpLDe(;XiG%r*HPU!F9A_T zM>{2I(NWzuF9A_TM>{2I(NWzuFD_A9N8K4`yKf$<91(peqP-veOlBh!-H(z)aXu78 zu??d3^P{?NUfdj|kLy{Yi(n}cN24K8i;fO+%uz;1J0)t-QQbE$ZjRDAN;+tT89F)o zM2^~ZRQJt`OO)2pmWYBdh}v~j_svT{l<7x1C2G-8-8U}*QAS5QC2G-8-8U~TQCdey z2QA!%4H4CjXxCBQH!m(xT1QEu)lI%@+VycuVs)=XyN-U@y)d)0d5n&-MEwj1h419iuA{1NUJ9a2KiVl#i;k+kc`1l8I?58oQK+x_aX)%Y@>Fuv zqNA#BUSy)Qj$#Hx{=RvUiPAdC5?z#BEPamR*r^I~w06Hx|GUlep02qaX4c^|I@&2w zi;k+kc`0&~(a}zcT69$P&5KNw)=|dOsJ_*R#r@3Qx!yKV>hjPuv}6*#1E*#Ys*i%gW((UyqLucOcASoMsKc1qNuqpELSiX3Hhv{RxM9aVkvA`_)`)SYp* z`{v;)2qOAWM0-E_nH;O0SErrNiCT12_03B`l+jU=C~^^1 zKk#Qt!a2?s9ep~ps;70dB?m3&C!$?PRo}c6Im+m0OGJ^gAZpi9)i*B%QKld5l&D2V zRo}c6L>V3Jl&D2VRo}eGL}?u*9kj|G$BD(Vkc~&~J9TzB zu-OYYkQb|*Z=Sq6*Wvr&DRbYvxI|~y(GSbV)juuE23expvK!3K!7)?l@>ZKa>Xo8- z{;2Momw@O@Ix0?8z5eO{+cD{sXsDy|8H|i9WtnmheL=rmf3SZ<_svT{bS53WNB*$> z>Ay7>(Jk4{I7bWF9^P`|yH`g4WMr!8C`L2?yH?-4xI~G5RCJVd(1L~|BHs}0{pjCu zAIY@tDK1f3M@gcRk-Z*>LPx`MPZk~3ee)6!WptDz3X+H*jM&tV;%Ch|s{7_8Aj;?{ zNfdNIv^hsDI;#8T#U)DXDC?kA2-DI>=qI9GM|I!4xI}3kWr^;DL`y&RpM3qx?gx#> z^?s~x?niasyaYrU9qp8;r61LO^AZqcbhJ~V79G`n^WqYvb#ycXg7M8O3s>AdMCd1? zT}S_}+ulqzo zi55Z*L}hF8Xg{vkee>cHokK?{2Q5@NBJ>l{uA{ndURezVqFqOI-@Ldv>P99;M>{2I(NWzuF9A_TM@gc{MO6L#I;#8T#U)DXDC?kw zqfj5ApNMuH)qV5g5~cgmmWU!}5$!sv`{pGe%IGLd6vy>GM+b$l99C}L(-(!PMMrht zyaYrU9c77nf^aMt>uBIuVChG7-@Ld)X&uF!602|Cb;-%nN9ZS_T}OA^4i7;;+7eOW zJ9)J0=(QY)GCIl<-4%MsQB?ilQ%}9`*5z-1%&w!lZ(iK0r_YbFL~B()$xeADL@he1 z`{u*pNMuH{gm6`A<$8l=q(}9a?Nl5z=a!MAGGVJ?wc1kN9p5w zmgtch(L%P%uf6-m*9p6h>b`jih%)^sNfh(%QS}2)bPy1==;*HdNb;$AT1Qz2El;rY z5&DT}*U_t)5v7moS)yAGz<374SV#Z0eBZ94(mdpoqqL5)MEyuq7M|>)#7dSR_v|{V z`{o@G9c76wd6GpKEBZQ*co z&$u5R0v#oZ;%W#;VjDSX*U`Nki8B3Yr$jCN=w~w{O6%xoCfPyp%{w4E+7eMze^~XF z^-RxZmZNk(+9^@Xbtc_6FF}qnI@&2wi;n8Pd2xx-I_l0i9}M5TxJ2oGv?Zd@QAGQ3 zz3!WrfGB;PY5p7qNkn@;I&?41tixw?w9_25=;+g#5v6sMbkM@g2SjvDi1y=pIcb$y zj?Uzp_hBha_>{Cn6xEJs*HPU!?||qiOSBMn$WdIc9|p5@Ed8kNo0otnqoXX*rI0Aj zl!SL`vFNDon-`ZTt)rxaR^@XP5&DT}*HPU!FD_BKA7zQYS#lIaQT2mh6{F?2UiZyQ zK$Pi6S)y;M5%t%d2Emm(i;lkFc9_{%&*&&i^tKw&CD|T)Q=*LZ79CZ6^X|U8e@1rR zKO^=AYZuSG|NLW{f%l#K#>l4YK6w_=H_yL2%p^N^@nT`|%`4;$mp(#25$!tqNw>o( zIU1Sh>^k~$f}(%sW%yYjou*O^q`yc9%d(ou0(>GjWuWmTs{ zLmeGc=X~>05S>X!-zACCKl4uaq*J0b9j)cH(KjzLQF}k?b#zV#E%|sRSCx4kRekd! z6Qy;uC8Bk*jmP!7@>|V1s`}=oAj;@yr$j9}s`}=oAj;@yr$j9}s`}!7tH z6xrrRL>*$pn zbCl^vTOwK~Yu8cLH!pIIx~gY%v{RxM9aVkvQV?Zyv{RxM9aVkvA`_)`ly%TrkUGcp zP3R}0T}M^lyvRi9ev~8%-2~C``O#qQa&6wzuDq)GI+N;~mx3sxqa;y~Lt38s_eAR`>!4K|>!F{Bb{$oH^HSs}(~q)5 zmn0uC)?sfU(D1CmEC0aND<2zY{Y}nyjj_Xz5yc9Xg=xC=zEjp_D z=0zq->nQ1%=w~t`O6zD#M4_XI_I_0L%}Y`BjE<5-K@P|B%~wS% zI;#5Sr69`aC`l9~5kVNyetuN-&5KNw)=|l{uA{1NUSy)QjV1riLQl2Woz;%L@he1`sSq|%Jie161C{4>YI1sp8o06 z?lbG3{v#J3J$GsI$@3R4TsmLeci{t16#dQ1=d1V1$BOu#6N^QGE47c@ck1kNV6zu) zpwd>?*U#8>)W18|;rrpq;+wZ6Z@lyo`iW@QQPnpuGSS&}^k)S{|MZ@F(h^bG>Ey9d zM>pi>&GYb8-@Ft=_vz>Z%V!@rwfu0og0!x_<^P=LB=%P%c1pCSqc8in(CC}@Ke!)G z=|>Y2ePnt0ba8AXA^5^Arz@Ea)9au9=k8DFim3a4L!#9!(}>C^of*-YMy8*TKdXQG zznY8ahU^A9I#`hH!S`-Vc05%`)z?NQ^aq9fuF;7wa*om?6X{8YQ4tX%5~6)%Qk@7R z6QxHclBi@^Z#?e_IU3FyudQs@@VWVrk7A$G>zC^f_K&DegeizJBU7hDLme$&_9Poe zray2$%uGl35uJHtB8j5f5rx&{Q3k}2==70E^>$2=qs+)e5(PUDZLWID$fSBZMkY#+ zOsvb>t}rcq#E67wADL8d$H+wKk*Ou3$XP`DF_Y@;n1bj&9i91@sZ*k%j!qw$UUVPE zAsCsuB5FQnQr$9B%*i6}-SjP>@B zNp;IiL6jMpIwfiunZ9{gMy9Ta{{P&)4Uiqzb?5hLQ@fSTt}7!_q9h8Enl|-eS+oWa z2!ggOPxm}9gfT;oBv907ZS8;}EMf%$LqX9;yp_z>#&)=IP$PzNq-^XOk+Q_4B?zD; z>f6E_GN!Ec2j$(hwB@Z06U)gaR;pO8B$e87Rq}Ap{l7Q2*?8xj|LeZ@&P=iTydK~+ zAAawg|2^G(@4w9>lj=X3B1f5#sVk!9kxBI*jZAcgk%@95#Mvhz^b^s3&Lo#lGV4dD zS{GWo&ora|D2O(n*ITaUss5vpbJUIX+{n~Qj$*7wl(F72GRb|g%yM)G(W$TIkvWRo zL=nOq~)9b#(I8yzk_gqs++E6;bm!lj@P1B1f5#sVk!9 zb0*azH!@LrWMbVi=S4{|j}RjgqJ3miJ#r%xrLX3(L>EG$81uvD*IP!W&u6ZqQ{QJ| ziLTX%`kbBUrSqJ;r)r!5@z32KX4XA1BNIz>LFl0BUy!5bkx6wOPEqyD$ix!GJUi%V zA%v^y@hd-%+2`h|uEUXu(jyb*k6K-aJ;BmPj7W&~k!jO?C7D${bI!yPU2_0>W#Qw3 z#7b^%^z8SUF1Q0^Ms$acPCYWQL_NW>a3Drx`H|@l+=22XI`!2&mMC--M7^F?zb=IB zSMyXK=g2zh`cYyYxv~gjn4^}fd8&_dWTN!Q#5%gZLP%CVVnjl;k4&nMb7Z3Q zITK6tMIq6_mh5l8=5PN}^`2)xVIP@PALkTAnURSkT3)UZecltj<^174KY#cK_WMkK z=nk+4MkbQz=$?_U`hg#*wy*gwzxk;*-RBpkh1W+%?`b>>Rh_X@ci|#ARS4XEl zXJUzZg2>U4j=ps#(NISx-)H)x%!y8Y&eRoA^VK}nYdl5OGb0mA^s-B-k&c!NvR@sL zC{=G6nN+Xw$VBOpsU_E8j7W&~kxBI$k4%(4XKIP4WM;1iqV|zV^%_q>lsRYWl&EE7 z`eXN{&XFiHGId4NJOe^?Z;xE{^vE=vhtIgTXfKuWO_Eo9Nj^5>XE4{qUMoF^}|n* zqs++E6;boZr264UCQ6S??#`Xv4<9;;h!F|VJ~F9(_>qay=S(EgvH(ko*auPjIg{## zpMvNP9i94W9!u0;%>!4=C<}>NMyBt&L+yccCYGr0mPSPV{)nh~WKy3nkRnH!k*O=9 z=8;K#!a!uA^vKkb*En($(LOTC^q$PBo;hbCiQ-)8s#WiD)G}*aeZoNG9Hq~hSfT}3 zN-X_8a#Y58%gFR6?m(I4=#H^|>T@QRXzL@B`pkwDIm(PoT@f{pOzJZmA`_)YCeppV z@;Qo#YDct>OzJZmA`_+0nOLI!*$f~$x)=I#(N+67llsht6hwFE=+x&-EYX(=xe?KI zzyA}L-3$B3^e^1|_Q1%*64i3le9ojk1tUd{G9wd96f<(Yo}xc3@0DDY9JS1V_>7XH z2M!FMf*~jW{bT>H`^yubf^k$n$f28WIy_$%vNP>dFmB_Xf+3&IorU@V-|`fU75R*K z_6whaa0Loue%gt&?rk(dXoEm4(DGM>S{c*hJ|Z zWgT6;h(Jt`n}~KD)ts?o6Qy&MCAubg2BNrMKk>OD&-wQh62lzTJaS_brE_$6FLZZ! zyumWbBL+H+KM(AqUQ$~wQ)u8<%%5$!pu zIcUWuO6w>~w2-XCn2$KovEVuX9{=93AJx2cViTox6jw^DUOKJk=%&NH2XvGry5RE- zWanjn@tVu-g6y0A`S%nO!?9jlX}fE5 zw51hd$W26hj%q7yV-uxwv?ZdFb>q7ub{*B$+{GqJ>*$PYMd~E^9DUdwY7dO{EfKAg zwdbg|`exVUsO#|Ut8Ydlk?-)4n}~KD)mGocCQ9pQOGJ^Qi1r-S=HbUCO6w>&e-z{p zk(-G29M$IG$0kbWXiG%vWbHYs&B%>Sl+ICdCRw>93=xr=i1r-SX5_{u>Tr8^gI3)hNNxB0(wmyf?Dv0tvfqknB~bMqY09W!#>%7)}b z!?hySf9^>(dOK!Gl$o2?S&m+r5@?y5rxLyOaDT}s_0rqiiyiYvm(G5;=$}1zvZxOE zug(A6i1SDN{}ET5Pn;337I@%IZ$-42@uA`5+H|LY1^?r0}9qp8; zMMp*7Gb76AXs1ML{pds;Rp;SHu6kNW*;(UTQsFoYg?=L1byS^)ADJlKkG4c~tf2DB zuA~3Vy)m<@XZq1jiCT2@D>)KnbhJ~V79CaBibSq@T1VNH4f9gnb>}QzM}IBH9A)}Z zmS_869Pb)^b$%j<+&0S#ddSgH_w;i4y}cj(dX7XH9c77Pj9(CfqvzZm+ey@-qw2cQ-J+xHDn{g} zkI+v@2Qae>h(Kw)N)?`dH2RW(2sUX)Y6ZBBS)f)jUDLZCmEEYkoSi7>(#Z(k*l8WM==A!x^{WP6ZH}LiD=i+O?SY|s-EdbS)u}9 z{B%p7qvf}Sw7nm_kRws1AMKQ=MMuAxBT+_2J0)uAN7eQ9yG2LI)!LWcXK4l=qO1P zbDKf5EQD;e@1dhN4*!#}-lC&h?g068Pjo*@Iu=yVdxAbfKN0OZs(L`|79C}YzB44c zEmJ~z+Y4`aeE9P@dp~+HvmA9J6QiRn(OQlQ-|^Odee_#75@mF>Q=%3fReee#S3Rwx zExBqyKN0OZs``{fCQA3CEfGb%gQ#6cFXdSEjE;6n)Y6Y$&XFjiqn#49=&0(Y6S?YX z9Uaaj+a1rZKMR6 zI$9l&-`o39?P=>ts-Dr&PKjD{RC_jf5~7Tbc1qNuqn~!ky$7z3k`7uJ+YzCkh;|+Q z^~{LUI!Y21wbaIXOF#O>9EmbIN)oNFx+x1`9IkAz=;%{95@mFhCF%*H>Jh^Z-=d?c zZ(ii?iS9>P2dx`@PWlM_M6~Ou>YEptD6OL`(btAVOXTdk{`~ym;eYmi^h@r5`Hc0B zD5Ik+(VJ>SH~l_65C7>Li84CM5`A5bD9)jN**&viMRL@lqndBto9BnVdFS2#74Bav zr%$~1o_0$j9pSD(}7&(>G5(o$K)Z@MQ7L+mMeAV=m|?qFqNd-@MpFUDelf zw9zf|#{~txXO^h1auCH>AI=}G<>>SNTPP%kbDT9#ve-n4v0ieNbSDxf<1KO%(VnB4 zCs}NwbdHilk&|GGeGqNb(TO>#`8~xZO6O=x&MzQ|XwOm2?I!9X~id;ps=cwkT z6PqZVqrXwT8}?qFBH zQWBdeouedC=q8wAA4KhAy|%tSHc>i9*_F2I!V)VRKoZfOquToV*hJ|ZZHXvy715rf z+S=vVMClyGl@jaP<%>Q?eMD{|+H-W%9dHlmC`_4!tTtW2owEx!EmLm&Q^r=Pd$sJ5OdHc>i9TUyzG z+(fkJsJ5OdHc?tfNuu!3k=h^5e_D}OAZpK1ZLLUbqI8auv&Ki=(p*RqMD01MJ$E@a zQ94IiqVqy>M7EIqa3-1M+LJa9KQ>W1M_q@%8|LB1CQ9chOVsOT>2njaA1j$y+q3KF zr(Kfofqs;o?FgbiLO&7hI;zca-ZeSe5>Zjn@z$QB+WgVjL}?vmXOg`}=v6)K%3+^`8z`oU?!K@|z`Xdc%7<{SK&2$b&hjnqO^{(Gjcr@(80KkXzxeWInI%Z z(mKi#otHcVQCx!x=RH|;^f7n9%&MNz(N2k4bX0rpa*~mW(a}zcT69#Mhab7>X&r58 z);RPN(XONFJp9N+X&r5esHp0AYwt(3=PoCydPYY(C2G;pujDu~F*@2QQHzeMYegbg zJ*}hc%7z80a6Cf{`iW@QQFX0IWTLc=wnTKSpz_MDquO(qca4sAO4OpGUv*zaW*t7G zqn#49=%~7$DRR}%prhRCn?kC)^bz`rXxCA7JyT?&Gw3Ks)ZbSE(ShIJp5U7|y8P96 zpGkY}@-EU*j;PN~5bf1|WMs1Fs9d+*6FSNfT@Zw25ynaDLgjB>?fR&?<}Py8(>gli z3Nc*8gMK2~b@aRgo>`98@7GUrpNS=k>!US24d>=ru8(TZUEVc1+9^?sj%v?cPC}IF zM_HoCO&_6=h%z!+`cZXV=x))`mR2!BKN0OZs;&!-OqA|NTOx|wM6{pRf8M<{vyq9p zKH4c!i;il~UEVc1$`W0ZY{Y7CoHGr6;GT0=*mYE0yBxXd>3$S5AgpVbH$71wp`VC$ z9hC!RR`pCj$`ZX85-khaudch|KKke9?K*nF9UwEJjE=HIFAKrZQ!eK{(Hopw=5Zlv z(NXQW%ezKLS)yAtqH})#(lh%WcxKiS=2>nE~>!|7hv0HSMBwD@5>*s=x&q`c;u_Uj(AHC=fum^OMCHlN4xgfFn zp~U`6|E_ys??<)gF7Fy0Wr^M(1X1By!c$I?B3g%z2_dLO&7h zI;#4VL?%l2qa;z`X?s4?IA7P24CfUxMO*u-TvGBG;J60LPl z!gIW}Umtzcy*VGEw2rzf&V=6+a@0rkp@{Z=^y8TkrTbBqXd(FspQq8)yx^{g<@%`h z+~p)A6QiRn(S?vG^t1|yT69!niCWIa@3-us&C$*gZ-tu9rph6i(TB|n|J%E_uW_Y z&z?J3z0H5M$0fe?@O)9=%eWpO^QLzIiE#?$A-^KRVnW z{gjveKSx#&^!m&Hf%^qZw3efC@bR`uNAVN_(l;*!(W!LwXXKyVUy|FoEYUSN46434 zM?)P2(Xx>D8h!I36Qy;ObkGte<1O?P(XOMaZ(d}gw2rn!6l_7Xu^*kNqpELS3ZjgT zc1kqtM^W|7I;#5Sr69`aXs1LiI;#5SMJ7t?DC?lLDRqvuBB*vmyN;^9d69|II@%IZ z=qRFHM^)dv6hs*vWr=QuIg0bQGFW|M(NWbmF9lIXM>{2I(NWbmFEUYDM~5>Y?muzn z-gBdqtE;>y7mpraonE~>*#rRs6Eh+ zwnVf})~=(U%aJIfqn#49=&0(O7rE-)SkLHar$j9}s`}!7tFb&l)u&`(6W zj;g+Sk%`j%XiG$)qlk7LRekeP5M^|fCAtviDDEzA%lsMtBx{R~s=j$Ch%!3bDN&1# zs=j%ViPAcX84y3+0Rq81%hee)s{rFE2b&_a&-2>nE~>!|9R7nvyC zkFrG9q{`tvGALv}ba}JrsOp=Sf+(Y-B+=^iA<@bcU7X;Xhx4oEc~7cuUJ9a2KS~nC z1YhJRMyT+awiX@Ta$iwCV?C{-tb^7|Bu6VBp`VC$9aVkvQsn4VJ|(qz_$1NtVn}o# zDc0M5({FzCfBVgk{;&4)dO2V|IqF6xMn_4a)hj}x<(l8$=iJ+G6rz@XRQ1hEk)w=` zl0-589#ubhPKa(-k6-zDOo&=^RQ1h^OqABq86C8QW3LDOM6~Ou>YEptDBX{?M6^!U zuA{1NUJ9a&j&@4aqNA7Hmy+4Y#OP?JL@he1`sPK>QCdfbGszg=JXAR%^b^spqYvkp zqf9^A645$YyN;^9d69FJ?ngT%YSB^EH!lTIMn^j(YSGb0Gpl-9N8J@?!Z&YD>b$-A zqaV+VDBX{;M2nCp$cA@CEZ0X>-@Fu6&-9}#(OQlQ-|^OdUa$J*r69`aXs1LiI;#5S zMJ7t?DCwXz&PI8KJ`~a3kE*_Tk%`heN)p92dyvIGh}!$nFSql}KS zME%TLR6Wj_%Hucx#gOUG3sH-Xs=j%*yt#i&mOA#2ecye56Mgf3PQKzpH{W!4zAR*C zTHn0o)zv%fI_f{2>+t>XWbw^glh25IpwLf5yN;^9d69`a9i1vie@amFkNuu|(GpQP z=y=7&t;EC-_d4~z{RMnlK4{ImMU{Y%f z=(3RahD1N>emP-eicFNQ`j-5jQ0<8Js#jg!A`_*nz9piPb>sW?_NrGMv~nOiP1Scr z)Rn!Z>Q&#o$VBO?XWfZ5Br7r75!H@puX@#!EHY8L>RF;&Ai3ib(P^r_E28GAS6$vB6Q!$ucrTQ3(2|TCZ&B@t_NrGMv?3FwtDYo^{u4~G52E(5 zUUetRf#@_<7MbV_RnIxU%nM6+_k$#&z3NrJr^rNSsCtfQ5fUBv zyUp9dQ`szIz3Qct1JUWKo+Dbz(R%gU&+AnOt;j^_s&C1s1l5jculn=uOUdU-30?Ih zQH<@#P3(iHeXLiVUn1vdBhhK9o+JvA^*ADG9_v-Vr^rOIus? z8Fo*Tui>liM3IToRgb$OR_7PwsE??2M0?e5y02spjP)#0pOZLe!dM?ZcR9?_vT)FP zh~d>d)m0;MjyCG(G*!Hh>Sq(-cd;{4vAq=+-`&hr_4v<9UUhznoTGHr zlk4lN>pejqQSFHKs#je#A`@-Q(P^rlB?_MsPjs*%gtxE#>1!|j^tDget6p_1$bslI zV?9Z<+zNAad(IR6nFqiB8xMZ}H|-t%MR$OFbd;|8mR5tK+7azluX;e_kfYO7eM>|o zLuZ+#^GIen+Nh(`RDD-O%^kk#su4Ly>8fvO?J}wz(O&hcV?ku1jX63^)we`+_Nsq$ zuT*_kM9o#NdO$?ZQM&5gm6BbtzCJQhy6RgZimFGnclhes_bLL{aS^YOi{ArELyGr>Xj`h?=WjU0)xWC|&jJD#mLh zD=Qz7n~3(RSJy5_ChDsG1)gM6tPo>~z9=M$xp{+k{rUOB!~crar8^gI3%zuzAM@|I z%SV~k-0PRC@91Bvu3b(+w7zzEnyT-VXy^e^{XI`orizX{OEV@qJnO{Nk-Lu^IaW+_ z7RnN>RlTqpZ|x&fZflnt$NH2xY95)isz12@aDPeMqx(z$i~H^-t_Jrv6{ywVx2>+O z+D9h;>2SaP#Oc#T)~mr|6Kx)u4!KNmo6&8Ie<-EdUy_!(C8Fbcmse8t;mCxi5>$;N zleTs_3DNqN&IVvNQMMuA!S=Bf8qm3PYO-D(hAX$$gQHzdh9uTo} zl-5ypHTb5mgrN*bBHDFSb1aBWl?it_26XdPvV)~a4IcD!x8QgT`TyeuS!{pf%1ewhzZT1Q)2Ul096wCkwm0gK)UKnNt48b`byd&k zC`l9~>oFv1(b2Exn4`>nrcQ}k`cchGCw7j~Iy$SXh99Ajn}~KD)tp~q6Q%pnmWbA? z->##YPe~G@jE;6n)S{!`*eg295-lVvF~%c?PY$%`sOC--J4b09#henWm(GGG>Lc_M z(XOL%340Ipqb$*tkmx8!UoOA5>*xjd#>|K^I?57Vs}U_^zY5MmEjs#5cYw@@GW{q^ zbU_G~KFZ#BYd^2o{GN7=j^i!Y8Bw|)WxaGZ9Dp9yra(Ut?K=8UW<+TnC5cvkg&2rpMp?BksO>s>F-M|| zj_@7n`9N)jy#2Vhk7gEiUTJ|@wwqnamK?6IEK(U#na zpr43#9n~DPViToxv?ZdFnX}A$()^y15M^|_JEFdO4M?FRC9TYoujml z4rh|Bf8gYOC(oQab@ohg=Pwp@#D3LYxp?&W^8N!@<%KFognlC0byV{ti%pc)QIaUm z<3SYrAZqVNpUAQ58672wf@D30L@hcx$dM>>eY8`e79G`m^I}&$t)uRWv)$$GYPpFV zwd?4|bIeg@-V;d_x(Tw_2T{9@YMx}VbJUGYjE;6n)S{!?Ip!#%qb$(^*(tH~`(ch+ zbX0R9jGd#jj<)1U29k(&9o2mEViTqNQIaTh6Pb#A5Vh;5=JJ+=D5ImD61C{)Q|`;z z1LyT5QRHSlhB<1{QO(;ic8=0IN_vu&&k9RKkVLfWsOCf%n<%ZLBvE)ef+(KJSiSZ` zue;|%ue;Z-qq%vK(fw$rL@he{^j^_Xmgrnq^>{j4_0lVkzPa?%lA{(K)tm?q9^Btw zzQO%p`^$go;>zh0?>%|X*^x`wl^61{dOaAQz4h??(4TQ$etq}tM~@!~{(88Bj%Ath z&GVnmb@+aGviRn$$Y(^gLq8GiI{KhH;DoV0GSTUE^h1K8zbq{^OLQ$Hif^}ivHZSK zNBw({K2_l8s`}=oAUah)Do$0s{_?loznvwzUL#t_e)ycbP)Fr&3=5L;%}YUas`L6= z=KyWpuPtq81%hee)vc=nOhKn}e3W`hjXkwCkwqn-`hr3_98h zQRpb5T}M^lyc9$^9qo{)MMqWNyc9$^9qo{)MMwXK%tj_!M_Y2xf_@^}b@Y5@L}?vu zi750FMD04N`sSsmdPYY{qB!dWN$iJ2Ejp_D=A|IY=qO1PB3))!|9Rmm)_Q9c78G z)QA?c&-bIBatGK0I$F1PD(^XU`qT$M`htm1;`g+_l;RY8JGSUU5$*k`>YJA$M;RS$ zi74QLsJ$Omee+TfWpuPtqLzO2vinl>!XikMwISHhcn4`iEmzts%Lbx zC8D$IsOp=Sf+(Y-of5U^=peJIr**Vbq81%hee)vcD6OOJinHA}4|7Nm(KR93`%%?5 zFEUa3`Y21Z5ak3>ME<;9_03B`l+jU^=zNW+C(NJMZ@UBTfqs-F>Iot@5yKp{=&0(O z7dc019c{@$3;Ky@*HJO~$Sg;hezYZ`q5-q4uUCEZBIhW5eUv1MDhEmIBS-DmM^)dv z6hxWpqa;y~tjCb3MMqWNyvRgp9VH#K;ERt4l8AO4Rekd!6Q%o6l4vz2*$JXpfm_{h z*Oi~+_UognZ(a(bOh3vJ^-ftMq8mauyenckuUCEZQV?Zylq6a{U&~S7@mDXG-%E~K zbX51vyQRPM*Y4>3WjVom*NHP{?>~9^)R~jT?Wf*%U(r8%?qu~g|JB|u@zBjT9iA@> z*_qZi?>5Re&wo1C;rrpq;+wZ7pAoZjpr43#9o2pF;u0lv^a00&CAtz49e7>co^x~a z9=Gf0XWaoOb@&O0PNkz41Vw*YtX5c}>mgC}qg6mO)KTO!>zkK=s7*%?Iwma9wUDUn zjkk6k)qV5g61DfEUPoJU(1Ly<+I3X-&5KKv*3p)TB0E9UuA{ndUILsC)Zrf!(smuyee)6!<#d!I>T_~Lv@u65I;#8T#U)DXXiE-S z&`(6Wj-GePozKWb_oFQlm0F)=-jnW|7dJ;8QAS5QC2BdZ|9Xx&%IIjPL@he1`{u>X zQCdey2Q7?9h|o_&yN>F^fr{6620>b`jih%!3bDN&1#>b`jih%!3L z5}m5Ux9F(un-`ZTt)rL$u?u|j;u58GlqHHBop()7Z=|DvCz<8?=mmG6%sPBVM_Hl^ zLK2QIxLz90$hGLG?wgk&M;RSuiTd0GQQr`l#-k zmw+gvqb$*>RyJ64bjy7u`BXivqpX9L0O*xILO&7hI;#8TCCE`mM_Ho2%0YB=SL9VL z)x67_MMp1YmZP+el0>WPg&c@t#aQKY)~=(vZ(f2NWptDzT5g0y2Zii!dwsR{qq=Wi zT%xp&w&b7%{Y13usP3B=mneN+-x5*D&{^&?U2=!WXRN1nv{Ry%^ZLs<5@mF>Q=*oB zRQJt`TlKV#4rh|>7T>(ML}?vuiRkP)s{7_8Aj(`H?UblRM|I!41VkAf?UblRM<2~> zWTJJ{U2)zWzIh39lsT^_i9$DVH)J$x{9gGJIcKt**XzD{35YT}N)iQ0L=Z-_pV#ZY zc?pOzI@&2wi;jNUeHrWL zqhE9f%qK_b^Lmn~@YGg_S^CkZawN*=Xs1LiI;#8T#jSc;M@a{*>N?3%MCd1?T}O4_ zytqW^^Lmmfp4bAS1G!DqPUwG*edq4X0 zUeQsKX!)EF9OdYS>~G&V#QEJ1zQ=x_smV9*mRslN=l9=q%l=z#+CM*ku)i#>eEsET z-T!TeZ{E_`4?EkuqB`V1*owr6zIp!BxenhCPZr<2E&0H>7YhAEwCiY-Z(d5G)9a`# z2krHj<)6S3-3*DMA02qojpy}q@}B1B*Ejj*B_}$Sj*7#|kf>ac?38G&9|ciarrbk5 z_si9H^sjx=;SM|esfhFp55mhhQH{RNHw8=LwB~g1n>UETK(88)4MC2Qy zT}PXI^HLI}b(AGKFZl?f(9!L{Be!;5kE*{*-dl;;OHZo4$u}=KQAS5uq6;BW*&A;g z`%w^W)X^s2yyQd~9qp8;<-EShH!meoT1Qz2tu3FUK0-ec?K;}zo0pO(t)ndw9oM_O zviGA+zIn-sGCJBRQAfyC(7t3OVoGkBch)0cCdEY zqN7c|c`1p`prf-nXnB&*Pei+pHu>hIBsznRazqz=)qA3)j}zC0;w-fByuQgdFF8?8 zM>(Q3lD*oG{k*=(H!nF+PDeW=YSGaq-@KGWX&r6JK@0kcXxGv6F3U5!hCkK3r`mlc zl4$8Q5yg&u5VfDzH~HqJ%uzQoF*@2QQA8Zc0{|5Hu>hIBue+AEfIyDBHDGd$u}=KQAS5QC2G;pCf~f|L>V3Jl&D2Vn|$+9 z5~Xz%Ga#(Kd6&J8`Uw3*wCm`mJK!GZM_HmU-Gcc~2MI0Wu@X=qO9{ zvJixWmh6qU_VfBC-@KGn@5XvYM>{2I(a|Q~yp%*~9c3M~3dzUHN9ZS_T}MCW4wzZh zGw1ar(a}77PjvewLU`Lx*0cAcO}=?4bCf=>Cy7?C6N1Q5oI6!7dCvWTT}PXI^O6%~ zbd)4o77knwM7O;c+4e77c7Gs5Ejqg8-j`3+(>h8zXjN}?0D6efPei+pHu>fy&rwE4 zS)%@_K_FVa+7rI*%G#Une$cL?7cx=B^sHS+n|$+<=P0A2 zEYWv{RbRcq@BjUsIcm|-Cf~f2L}?u*9kei891;47XxGsu-@KGW>Fc8{5tR%bZ|ypI z$-OzBv7XjZk|@|AM+Xb?o9%lg+I94@dt+uq8672wf+V7F9B+lFMMs-_^HNqlt)s)4 zWQ=bf?j|EbKN0OZ`f!dp%Jicw(Rs;75G@PYuf8qOuA@!9c`0+0)=`$Izj_R!!g0K{ z>u8g2UUH(0jnE~>u8g2UP_|0j;5nO<$vSi4&S`nPrdIxXPj4wja9EYE+6Qvhv$m|R~_!Y{pj%{#npdMY0Imt ztAviqr^8IL6Q@rX7T>&0PtZr`C!$?PHQ&70L&+L2PnSJYa z9o2mEk`SFrM`Z=U&^PZ-921skEk}j#c-yF>EAr=6qu13zo&T~ zzUG^kgeaqq)BUfFe2^UX^_l+jU^Xd&dvTCRo;T9$rP z^UX^_l+jU=C~^`+G1iAOaxFTl`R2tYI)jdK4qEd*M}35TBHDFS^UaG*bOs&eh@#p( z(Lo`ELvKgR{d&zeF9}gjM>`~H(NWDeF9}gjM>(QCCvgX7q@#hOt3^jO-@MpFX&s%> zK?@@j^b^spqvxG$WOfbTHVnQ7><+~<~Owdn6yN+tUd9jJo{U}RxUFsV| zvBIJH<-4x@tk`u_^UX^_l+jU^=vs}a&sqMwUh~aMLX^=_mgq{2Xd(L*?T4@V=EWvT z>nLVGSbg)>JW(H^pNMuH-E;@s1N|sVbR#5M7P4Oj=S-IK`U~y=nGt1lv{Ry%^LouU zFLu?tv7XUUmgtt`WVz9F=qI9GM>XHPBst1lA7zPN4vAv6 z&f=>V+#lF=^rCxTJ~>KXA0>%auLy}&FPHtrI|}#0uA`c7UXmPTbd)5DoGb-kuiS7T zdyAf|5Vh#2=9?FrD6ONcgVvl7#5H{AC!$?PHQ&70MCpE%C5qgvkqxirSowoJBt)5hlqHH85I#rCHBb1O%kG8!y#8tTzRbpY zMn_qqKk5k<5=+E;W#8V9e#X6V0?}Iz_K!(J&|iAL`^yu3^Nz{~Idt<)hv&;ecDnV= z^Pdhg$*jJ48}b=(#}4|5XxCBIH!m{L>2>r!6%_rY*Si-i(Up+s!1t%yui0>a(5R#S zJD@CCU32dq-BlhGvcDbNU9R<`{%nBs%}YVlq@%}v=ooaG zqn3VD_05Y+)ZUMJ9VH#KBqPUL=qI9GM^)dv$V6!!ZHXw@f~Z|bRo}c6L>V0=iQ=pi zB(Wb7wdknoo0ozpqoX8IkgUg$s6|IV=?=9A`cc+FYeQJJ*N>{cc`0&qs{2f}ev~D; z77`s4vLAL&wRuky`%%?5F9lIXM_Hm9LJ&DBd*f~6dHuwGRQ1hEL6p%^mgr_k6eCj^ zJd4qyqpELSWTJFGI-CK)_~wnXQC?w0LbUgzs&8IoqI5sn5>XHaQF}kC`sSq|%IIjP zL@oX3SKXJAPxs_niCT12_05Z%qci9z<)DQsM?|$F+I3X*&5KNQ1|4mMXq~KG zM^)dv6ht{4rHGYJB>D5s+oQIM?1kf=pRRo}eGL}?u*9ki}S5=8Af zdfpu}v$38zuP2G3%0U+UAZpi9)i*D4j=GVF(a}zcTKZAdH!lTIMn^j(YSB^EH!m_# zT1Qz2twQR(^bysLXxCBIH!m_#x*sKp3eTbcs3$t`G4vX@Tpv|^^HLCHbd)3tl8C+9 zkG&sNee+TfWptD!Ixh%86k~lAtPr#4sOp;+nJBHJm;qt+&GUCSFv}78iD=hRxrDt3 z`calBa@3O@6q2*sGMlPr??*4V17t>&(a}zcTKZAdH!pJ4)7M8kC2G-8)i*CPQCde? z2QAET_7VDtXxCBIH!m_#x*uhUVjjLHI+zn39lYWCzxtJLeCmQ-M^)dv6hs*v?UblR zM^)dv6hxVRv{RxM9o@=otfzI9bkM3^ELDyO{Y13u=tG$irFE1fT0S2V9r(VKpZ9bz zN1}|5vP3s(L@&$!_FE*{&+Ap+yxpRsEYZyxQAx4h_AT!Be?y2`bX4`ti%gW(QPM$6 zc#gNwPei+ps=j%ViPAdS5>c=PQF}kC`sSq|%IIjPL@oX3W%s3IcBO>rM>{2I(a}dT zBTDP&a3&e$n>QzQjw{Wmc0{|5KAag*T1QEu!qfPiyA^p?^SaO{awN*=Xs1LiI;#5S zr5KqQ9qp8;MMqWNyvRgp9d%cn2?wp#byW4ui%gW((UyopR}t;~sOp=Sf+(Y-of5U^ z=yr}H6QiS@61C{4>YEoiM`;};9kfv0i0DHR?ft0gn-`fVt)ndwt&_FusMzFWb{5L$ zXs1LiI;#5SrN~i6M>{2I(b3<^Y-FN!ly%U0k<@wRBlHu|uA{1NUWy!L=HZh>%dL>; zU|sgNfBdE^KX0__sOp=Sf+(Y-EYas{L<`v;e8WBG&ObTOqNA#BUJ9a&jqott0_skOYx(T8nUCll2ej0Oh(|-$v#Ok>JDCO!q`qyfnWU-0TIZC<{fgmDs z6VaZdnkQLoqI8b7L{zeEytU`3=JynvD4nCM^UIddLl=eIM6~Cq=JynvD4nA%5gliz zyt3!0=A{#xD4nCjyCS>8OD8r_I!9X~iX27N+jCU&DTz&Vh8(3F3oynbf+V6{M>U_4 z*hFW@(N>5eM-lBgs(C=fCQ9e%jH|)h%hB`h%eeX#=h#H)93_b&7eRC|C%*~TF4xZM zC!RBD>+53^rE`>BX}cl>+glf^t*?(wl+IC>=t4+zl%sydgI!0pwac-I(m9GNCDyge z>z=5O7~>J`W4%bi9?(&ir~v4dAX^CGYTrXgZyf$-&rxk%=&s38c7<5Pqy?qS{}doFMi~si$8DA(Jhzc`BXivqvYzF>J1J+4-xu_XxC9~&E2laQI_c8 zkZAdw-@oCmD?i8WIjXH^icOTx(Uw*=AU6^1IjXH^icOT((UyoxhW2_OYR}O}+#&XW zj?Or1yiO8C?K!Hg71=d8+7i(^S$mFZ^YCL6rFGPG`1X1DAc%&rxlTb8Mn?j*>)?lkMfGHh(lWQ94J-nPk;V zge4+!6VaZd+WgVjL|u;7=Z_BOL5+U!*q^F4?};V)vXCfdzm-35*Pe=Eb?MH<+d}`* z>P`MVcljs}XX*9byr5+hVw_O_j!_X+jDd_kTFqaZeC|OdZjun_nEXD zee=PC{pIW2chX;$S$z}dk1oj9_m)F959g20$xgTPNByV66=&;nm)GPoVzwjn6Va}t z+WgVjM5iC?WqNQA-!n@T*X}{qXTikzqj*mt--d1eXl$bPvEJt>IonZ~jJL>5M0<{E z^G9P7rE|0;qF@W6jps}gb5xr@8k;DcqwH+QO<`F22$G2Q9M$HJ#wJSVC`)uJB#P0r zy!6bz2cFrtZqHF|{%CBXbdHj<9Y+M`ge-Cs(VnB)vlwF&rE`=dDjYR0omxLSQAf4; zqp^w3kfYpe$HG^=kH}3#dyZ=JM`IJ6Ax9~qqa5`_2R=@mn>R5>wfUp5iPAYr&UP$4 zK}6&xqCH2?_pbb0{mxx%qI8b3ME!^aq65FbJ?Xh36LVCXKN_1Toulk*$Kpyxjh`lj z+(fkJs5XBzHc>i9S)vOLXs;~7Slui8_I^~GKN_1Toujx?Vx2#_;z|05+(fkJ=%zd1 z9?(&i=tf8s*YK;r8Qap2YV${TO^&j&9bYa)D<6@Yi1r-So+}cYD6OL`(H{$mV#RG0 zJfF#uqg(EP`BXivqvUMIvTy)KBNK8H(VnB){Lx*Lqb$*lkSOksEM9Zj{egX~*XEDL zCQ9dMOS2u3n~3%t)#i`JCQ9pQOGG7OmHDF+&zT-^hu8x;+R|)C*HLZ$Xl$Z% zjr#w+={%8`SQ_UZZMYLi5=)`j- zb^hqhxAd1@>b{fyl05eMT_?_*z5nFtQ)f;Vx1W07eMSH5xs%n~{MWWD@zBjT9iA@> z*_n3!=<@37s$EC@r^6Lz>-L%qLryZa|}O0;$je@(v3vXE$;;~Y6hX&ohJe(As`Kz86Qy;uC8EN0yp?;Q79IU(?#+8ZM>{2I(b2EuNR-jhPKjD{R9!0) zx$0>hC090-g-fXx=ai^xMIsZWb+jd-!gsv2>*(X|&3iycS)x;Q_!b@gYK}x19c76Y zl8>d2vNzr~&U;#uKQ9Z3;d#Bfo+)zG&!D3-t-cX93%IGLd6uIf6WafBl z??=^jp}R##*;R~dLJun%pr43#9aYzbMkY$1*SAD;oSpK@uA_3-dk^R+OLRTV(UFb@ zPhhp^=r`N}Gb76AXs1Li{iwQjIdaw0=k=HYVO_ht;d9hS=qI9GM>liKQKlbdi3)%o zY)w)1CEbr+$dM>>Ue6M}80IKujaRRcq?M7$qN6f_aS!Ndr$j9}s;;l!Ejr4s29LkK zJ~C0dA7zRDs8l^13owtgx>0^_??=Dj-k4d{Gdju=eN~OWKZSy>jvB@#Xyouyn61TuQY#e^m9- ziAEk`9|$6I?pI>?bIqoX8Iuqz9BHSlqw z*Z7+J-O~TvaQ>+3_Y}G6X&rS}ob7&3pn`}#6w%&~YR?OOb7Z2ljYEq2>S-NiUEW?J1S=n*pNMuH{qNiXGs{tC-V;mo^&wHr(kcJZ*Z%lp zORuNKNR-i0mgpO5L^1Y%|CZIi`tg7K5&L=l(>W4lbd)7JRgPM8RP)U{c<@kv zNp3;+mybI9JACt&&VJb0<`vZ;|5YE8Ncra7#`)&Sr*j>?AD)h%IQRaMiCOK1yFNO< zA7`88x_n?n=qI9GM>XHP*hHuAM?WGc`pbXYyMIyTr@GIy(Q`k|I{KLVvwU*Y z5oL6=Q=+x=`iVNK`Q|0bQAS5QC2G-8%{MPLQCde^a?pZ)BHDFS^UaG*l-5y}sMkc; zLk|ikgT3(DlcgV(u5J(LC`)up2!g2WjkorGRP)VClB0}{c1qNuqndACY@)P|4rf5z zf8xx&=W3_%FW8my`h(@dI1hKef_@^}byV}si%pc)(UypUE{HZ>AKj3@)!dJ2zIjQA zGW}?$L@oWO=9`yM>VAFgK2u9X>tyZysOFm&J4fm3qn#49=&0tKmxL&zqn#49 z=&0tK7n>-pqpXA0ywo{n=RiLZ?K-OY=EWvT_oFP)A|yJx&ve6GSALG$byV}sOG1?C zM>{2I(NWDeF9}gbM_Hn{7wW5j;B$7ndi=`IW0Ip59o2mEViTox6ti@!zImo4R;l+jU^=*1e*4cT9u-pqpX7#+=+ZdABt%2M?dBgcn|1kOGKrf$6I?ps`=){&QbcjzEh%> zepK_#OG1><(N2k4baX4Ts;707bkHiFmkLLOej?g+RHn1;0UafYVr3YJR@VvP>Y<(I zOqPCB+Of=tGW{q^)Dr|ztQo0((h+@JMkb4nYQA~9Mn_4a<#S=xRnOe7 zZ;5D~tX)T+$SgE_6Va}t znr~igqI5sn645$YyN+tUc}a*e{U}Kkv&2CX`^ZrtYSB^6H!lfMMn_4aAX$$gQHzdh zzIm~U(mKjIXcfY;^bsTx?K-OY=EWvT>u5_vh3|N4*HO(kF9}gbM>{2I(NWDeF9}gb zM@gc{#~^qP?9=oqHA(E+*Kaw zXyBU{c29W9VDoIp&$eDH{@_2iu3w1AR1PE zRrvS#sJpzSBuZEPtbR{(LJ3_HqP=@+a(PQhl&*S~DDuq{MUGB-X2ayFZ*qA{PL!#7 zlBi_naDBZe3LTwv&NR8|n>@)<5~ZuYC3hlJJEFbnn>@)<5~ZuYC8Ee##HJ2^a@99^ zk|ig~R6R>{Q`o_i3{^kalHWIV_>-%?$w4b6QM&4f_d*#5E$AmAsvXf@^-T_1DT&fm z&k`+sjQ;ss&DdpN=bBvs;8V^u&y2v)sASd`X;}pltgE! z`c{aJvr}H#$NDC}r{qMrs_&4f<-EShohT(yy6RiJ@R_!jYxqrGI?0JLRnHP#sS))ZfAw{iLzx4U{zxz+^Ro~;zFner{fqV?lDFOoz`BMThTWz54BA{iE&>d!WO2S4!;b>&rqI zBBI(6?N#5jzCL-5GGl#9M1}8oYai=>$Gth99HqzlPKjE^`li+3DRYz_>t|dSimXJn zBigIJX*GCCqV!l#62&!p5XC--+N-{4HF$EO%vj$kQA^b~tzAw@l&*Sm72{|I_)8^A zk(-G2s&87moRX-k`no6CG%LhdqOTN^AX~2a{p+u*zP9^=P0A2EKxN_ zudJZ7=%|{bx7^x4c8mMo`o~VVIC1UrqI|^>*Dm`{hr7!sPMQ+tRgXU<*Dj|ZTCe&;JJ&9+%Ri{vFR_2@ zeeMNIbVCk<93A*8CWA}Q?0evued|IrtoqS9=R)3VT)P~ZsJ(mgRZp%9Ej<-PR6C-* z>eaQ&k%`h(&l2@H38Ki+?E^jcW3PI3?Q#mDOx1Tv)Kc~8+U3YZ>8fYfg>FeMVqGYz z9noI(>e}VVMCqz;iKy@$Z|zmDu3b(+l&ShoiCU^&UAr8aC|&g}tqVo9BigH8UAr8a zC|&g|(ZcH}#(W~_Q zqKK$=M0?e%YnLMvouTSmAzCMEAM4e%%PEL*Ro@{|%UG|jU5-qYu6lM|Xl+D7wIkZA z{=7@`J#aOTB#J7ZJTir=81bIwv0h!f963jwjxtqG5(P;_&_cA2_3GN?$VBO?XV-8i(F5$oFJ4WFYvqS_JdRln&DxCh31mgwb>Xt^N!lN<}=Z}fW2WBmp9$C(jjs-7i! zQTSjLBW99Sui0>aV6S?0?ecD^dUjptnkVWbsvXf@_3GN?$VBO}o+WxYBs!Y+6kL0< zjP>f;LC*Rw=@)gwm-^Fny=*Pr^r z>)-z!zZ%?fHBVi;963kns&8psD5@RNUiIqQ<;Xe}VVMCqz;Xe}VVMCqz$i561lxZ;e+->+BKE~g;MR6R))x(SlF zK04{SBDgwT`fnqgk*lstPo>~79r8mwWkMfeCX(n58d9lcKK)hd$_gBDTp%HM_HmbhD0&emp486XZJt( zXJ_nJO4PN>DTp#U$`Vy`^o47eC!aHEYnS)W@9!V`BlkV_mpgwpH+!FlNha~ow7TpV$=!P6-@=Dv#17dW)v{6U3=PoB9xhl$QlTC7-<4U;3c?1xs`@Br1F3ZIg~dYn$hkJn7zi_4`aoh}LyC)_XdAxi5gyVBNEDSbpAifHdgwbkHBa0U~X zT69!fU!R01qobV?4X=+**3qxHZ()L zJ%zjq&+9c0h}bzggN{<`>q}1s5&DT}*HO&_A~w+(bd)1HCwT^<1HaGfsOABYgea$@ z9MP$+lvs51Ywj!B6FSNfEy5g?z46w5Uaz@o#LiJ#M_Y0%fPNy{b@aUZIx@>q=K3g0 zw2*wnnI&R)HP6zIYOWfwbJUGYjE<5-QQsgr8kr`nV#MEVzR&da9CMVpK1vb=9YhdD zwCkwmQxZEzX&q%fAXbE3=_B+L(XOMKPf2W|bU(@xT@Q(th3r?amuSB}s`->8AFgREC4EXT za}g2xiD=hR%}XaXQMw;xiEj8DUGuS!Slw{fm7n8w9o4*ak`QHdlqCw1J_^tAR)|`3 z^mpBxGaH#09c76w2t8E&ppgCTAV)3z=$1P`K1At$ly!djF(KIAdZvdmBTDNiOBBz! z^JE8WLU{W{ZavdcyN*ipkWY@%*GE~RwHy_mpszvbSX8Bs<@S)#8MdZ>D=7%E3= z?yjr=u;{4f_Y`}qr**U?FCFxui1vO|^LvU-l-ALfh@##>)UKnN-%}EzOh4KwQA^3D6e&^7PqjhpuCqngWG5~7TbvP9n) z5-khaFPG+@`n$vb>^l0iJ3wY56QiRn(OT6D&+%4>T69$P&3p5${iPpw|A+q4|K#Gz z=@aigdC%FAr`44g_z2aqygGFAO^4@8|LePNKYIK~@Yll~T%F*2^ZciC9ljr)j-NR9 z{_uY>-gDPS=lA3P2}3SK=qI9GM;~+qCgf;jqSNc>1M=PVm&ClLC8BcB@wQP%ea~8P zzIiE#PNk#burl<``>y-niCT12_05Y+l-AMV42b(roVoYh_zb@Jm7LcfEElAz zN8P&bh@hW{b{$oH^CA(r zLx*!peBKRw4Cjv$_UYSB^E zH!m_#T1RJf&{`LY&`(6Wj;g+Sk%`j%C`)urNaFd5sQSSVt~@UEXkph;)i*B%QKld5 zl&D2VRo}c6L>V1ri7wP~bYAwi-*DvttoJ`@*HP6sFEUYDM=__w>YKOeiTVirM6~Ou z9B2>pqb$*_kSMM}m6x8`_rNpz*6lia!5uI&qKuBRL~A)Je8*cMYSB^EH!pJ4yRn|p z(N2k4`cc(4FEUYDM_C80=Y7@t2>nE~>*&XFta|3Wo+WxYB#L?X6W24%$$OgTkE*_T zk#m$juV;xqS0n0a4gSI7SAITc*HP6sF9lIXM_Hn^su#ZFt-T-Ja&OLOtfzI9bkG{z zw_gy7&`(6Wjy{wbQTn{TC8EN0ytVhE7jq=a^rI}%XNBGVqGB!Q?0Ld)i-0arQ>eFY`hX`iW@QQPnpu zMUFE4XiG%L*(tB=I(jLy9HskFk|+owS4SQGy*r6o&g(DdNR;VENunT$2*QYV9epG- zqI5qxoJq#`=7Ag{^b^spqpEM-Zqd<}h}Oy4b@YkMa+KClk|?e)gCzEmqe9f8qk|lY zGCE2U1<860iCV6YKAIU(T1VX#XTmqn_n{b>KoZfeqaV+VD1Bbf5?zq&1W{D|#OI34 z$$OfwkE*_TDMlvdyq+cM>44~<5L(-nyFU7uT}M^lyc9$k9c76w2tg2S&QXhws=j%V ziPAdSl7klX6Va}ts&8IoqO^{-L{u_%ytVhEs&8HjqKuA`M8OW;j)N8XO}P5T(vLpn z4v^2)JeQ-4j*>({5)p(EB}Xkfs`}a##Tj5o^xf{Cz!LRe z%!ufm@EUwuqEvlNM+^D0N|q`2&=>T})pzu-RekeP5S>a#e@gyY{bT=!d%+Ujki&qe z?2WgLI$HSm_-ORai%gW(QPx4r=OnI>Am0$}{iy1j7nvxnqb(5~XQ#Ys>PPW+nsrq5 z%}YU)(a}zcT69$P%}YU)(NU5p@(oo#@G1~qDXE>;7xJ#s$52OA-@M2~X&q%9v^G5* zAEBR!b{$oH^CA!|9Rmx3sxqb$*lFh^1KgJ6Z2MMqWNyc9$k9c78u zs(zfE^2*+is=j%ViPAbcoB_f3=G6&8KN0OZs`}YEpt=nOhaIcSxI)Hx!m9nr3%s&8IoqBH1dD@29wcx%^D z)i*B%QBFrYBx=!7)i*B%QBFrYBx=!7)i*CPQCdey2d!~^%PZ(7qFqPNy8~r*S7fU7 zOzVOG_nBHE3c?_2*HP6sFLI8$k%`e!k|?g?fh6`rq81%hee+TfWptDz3X=6061C{4 z>YEptD6ONcgH|CdOCLcJ(XOMaZ(d}gbU)e>QQ$GadfERK2AiRekeP5M^|fCF(~YRQ+Jy z=V(CGqN7{x0Qrpdw2rb4T5CeE^bz`rXxCBIH!nqwGS^30qD4p)IvTD9x6H%8=nj}q zj?&jhS)vOyqJ`{l-*DHJpW}8NRekePI_j=C+kNv;<%sB-5bgb_>YJA$N15~bmWbBL+WS$}H!lTIMn^j(YSB^EH!lTI zMn^j(YSB^EH!m_#T1QC-EmS!o^b^spqpELSWTJFG+7i(^S-Xy^zIiE#GCJBRQHzc~ z<-U|Xa9-ajQHzeMzIl;zl-5zwL92XD>KqaJiD=hR)i*CPQCdeyqScE+qPV+Uy~N#J z{xiFds=j$Ch%!3L5`A%v=$ho4Es ze$f(9Irw-hIa;gwXZ=TLba_*K^HLD4SN%cY97fm!SNr9k)nEFqd%+Ujki(S7)j7Za z16TD$W7XsD7V>vPccM?YU*?mebk)!3_atn3BUeGb>Q$Gw6gkRNJxLTZaX}ROAZo9A z)#WV(QKsriq99q1A<^1cKe6gnPqN5F>8fYliME7g=_5!Y+Q)j;lPoe(daQ4WXgyc$ zRj+!Ir69^weWye%Rj)c|MJ7sD{qSBW$JK`Sy*y6Q=ysB#b;_zUucBndl5vPdUGU93rY6(O&hc-&16wGgN&mMC)Yj zW4-G4l!7Q%^%T*1wPPPSYOi|LohULX+TR&=q@!e<4SrOx3eQH)=#zWWV~1TNirKUiGR^ z$!@87*0JDPPtZqHJEFbnKjsd&2dbVWdR<6#RQ-SbsV}_#{oi?+z3Nq;lE^tqcla#P zm(++BvR^*-{_kA>SHJQVd)05b1LTvV^jOcXuYcYX^bysLXs>$JRU<`?GWY9QqLNa* z(i6p#S0{QvJS*QqbBBL1vmB+Xo+Y{&=ICHe_P6~rZtYdCdO$?ZQM&3|S`ChBN3>VH z>H!g%D1Bbv5>d&}@%$(ISbxbKBA=0ouKG@iTCV1)js=l(l&<=g)-I#k5$#p~aE>|3 zjP)eZvTy)K8|;Iqz3NrRg2*{aS3OB|gtGP`Bx(q4qshgzgw!FB{~-pmA&!S-r=jO!6Or;tDamJikw75 zwIkZAUR@0ynJ8WLEYTv&QIO@UUR@2If+%whpCpR<2FZa}fpE5?Wvo}%E=MLxS3SFm z(XR`wd_=V)+N)k&yBwLQtNOZ^&NM5;SfcP6_e4i`?)-kSx^(B_ZK1bg^|O-Mm8|yb zRWhx)*DqJ!(Z4pgb)mG5vP9vG4WcWa7Ci&vOYQ*qboh=aqoXWQHAkT8$d5}m&4pA;1R<-g}%v_w=6I^H&3DS1x*y!oz(e6C4VpMYq+>WBNI zpK`u5`Bm!Y4Cb{*B%*T*GF>u5_v$Mr6+?EUChc0<)q(~ovav{v;KbyQzppCCu; z9sV>r$`aj_T!gCzu8$73e2$uRRQG_0OO)18b~X6CC+Z{g6Va}tx?@3HqO^{-L{#{W zw{{)*&|q8~22cazs5rW7p3za3=z`EIi!hFI)U2br z^GjT!w2rbK5Nn>KkI+vEUC2@(;{U}RxJtR8no`UBtTXggr?tpthM>{2I=|^>+ zk_0)*=xA3&%{r=k>BJ>U>nLVGSe;+CeAW91{Y13u=w^;p&-9}#QRt{AI+z#2+pm&n zKd=90jzsHKKinVvX!D+C%u(Su-rD<7-T5VM)zkebo1+(n9_}+?tjE55leLlQIscwQ zVmR;Vg8OAYV?C{-q)$odsUSi>5$!svd+8*|QAS5uqH`{#M(6bdzrTGzes9;&-*s=y zCr2Brei|Jmi3+#gm}nutnYj9<_AP`}zvT{)IninE*ONrc!T}f&mA&!SuA{o&Q{1Yj zb(C~|sqPbch|o_&yN>GaL~)7I=k+YncZNi_uaW)j7v1sn4~PHRb@W^A0GU_)G&;%> z{ne0Y^=iNW%0JpcwAMXM)KT4?C_#?aJN#*MlqLH2L!yIC*&qCq554Z554~>9uA>*- z0rJUFT1QDQ9n5V;gnlC0byW9zN|2*WKiU#e$b9ff&$&Rj%-Yb7%*U>?aMC;wtH2o+^6eJNr z7*UAUs(w!Xv@9fsRsX2_Wo9{ACpwLevP3-<5FK56!i-$Aj_NLNyF^Fb6=%YeY(es@ zy?#{pB#TRw)=`$|N=Ovf@cDJ2+wOpwSN$|P+9^?sj(&PK5S>OxyCQ1VQQbE$Zq?KM zDCwYu5eX4}D5AX|{q-DklsT_&iKwXRcx&%RpURPFy?dHQM_HnU&_j;CpnF=qQuY=d z)m`4=R(<1@l4*3bE23r{{bFW0O6w@=ptWCewDJ-9iD=hR-8U~mj@EtirpZy3=%J8k ziT?D_#lO7%)$e+?(Kqi6{ymMpdAiG60;0^w#1i#09gw5w@XO+}Z~B|Je&h}Ik?HBo zs=iT2rx}@8q6cd^>aRhSC;spM=0E=2egDvYr9{kaiefS~9vU*}%9vrykcS-c%iB^v7JXsj1Yk{(fNaz=TsI#4-q30qJ3o2{6}LG zrAH=~=t@WwXQS1x%kS;yOq#c25~9q=#1fsa5%nWeJk%N}`oJsS@jZJihk!dz>M^6$X5~6)%(i~l5 z6P;mX;)r_PL~f$P4;>3E=S-SgW)h;@$kZXxP)8?U&HH^P8+&48>V~NKoJn&XPLiYC z$ixx#`iZJ{3ASTnKWEZhhhr0^M<&)S6FTZ6MkGZ0$aLO)ADLA>bDyatqC3*ly|kY* zY5t?JbF_X}yPp?GzdsS@)M5jb8BhzGnKU2g zBst2AOkEK*pEGGb&asKoBNOXC+WN?(xemuBN}n^eM0EC%Npo~fLUf0YPCYV_L_rYe zL8G(KN$cx=qJ^*nQAGY~p5}}lnqnW9i6y#F%h5TXqe0bM)-G#aVjo^D_I@Jk51Dc8=0l^GKrQ z^I?t-7G!_>B|q}f#rLdy&ptB!VU9VvW2~QgWFm=HFAIrcHF$OX%J&|=`7eINe$J%1 zw5ts|@~Qgz zSU>g1L=vrDECi9GaC#lhA2pvdX@2;-W@I9Xg5Zegf)Ebpk6K11%@02|QF>&mn+%ut zoH~8#gCCXdXUA4thxcPqx$qlrF(M(_M<&g^JvLE#WNL{h*n+6&sAXijQqV|#Li5#n*IcH*t7GNo{^!p)E%gFSsJ5au3{nR59OVpo* z3eWMg8%9LUBa`;bh9p(bj7(h-HIGb>W|pJ$$mH(a*`F|g+(blfBHBkL?Fj=(a+H}h zP7=jP1ftjnQTxcGxwj`F%8X1TQIM?1kf>#3`mQ_F9vGQOqPX`7qSzl1HIGc%Q!tX` zC^Is#L<_K#So-}DQS->8Jq05+QF>%z-P`9pNgqKH(LOSX)j?)e&x}kYQQrnPmR=Lew%c{fo@1zD{)Nk%=XW=hY)eFM7haxcE2R zz*K}pC%Y4A&lO2h^~}h`5`ASYM>qZcO%m-RllEMZ12-S+Fa3f$dVg8I$B9qDxI;e3 zp_^|yJYN>FGwo9_mRDC-iIGV@ojVKl1HR>%4IA7(==ArQ zJ|HOiOMm2Eute8GqBv(7h*?{&abzmwJ?v935)geshksDy?8+7sl`3)k8$Jc&Z*@;J z)X@?|#Vo7lHLgFiApy~;bo8erQTj`AX@bqs4LJ;|UiQY@Mjb8udwdL^WUW85Audr` zM_I4&+Bp;S6Va}t`ZF8i5~X#tC8Fc(lvj2g)t}jrfGDG*EKy&%xI%(Bx>DkVEifiPAbcocF}|;g9QEUO_(* z?K-Oa;m0LP>u5_vK^R2sI;#8OCm_n`Xs1LiI;y+3Cm_n`C`l9@J#rKKVUAjKRCjNW zOLPVurCf(W5)mX3?K&zKq%!NCrn+-iyFR*jwiTjvvUVNS-P_~ls2iC$9qo{)MMrh7 z@dQLU9qo{)MMrh7@wh~39c{@Y7y5~4*U|G%IQD>!wnP*Lc_M(XOMqGj@U;W%^N;=t4+z z;IHX#`&m179sPV}IZEp&OSG1w!gstCqLzMC_i;{;ql}KSMCWTcTFCzP>m>?Ni;n6( z&T)y-I*J((Rv+gzAy@hc{Y13u=%zbhJ|h!-eUv4-9uggOPjk+7_;I_AUdWLsb6(F9 zg^v0h9gR!@QHzd#Ge@F~j+mkoQPM55d{zh| zLO&7hI;y)4$0bVZC`q*PD;q!*US-ws-+1u*!~g6$s=E#+Aj;?{OZ25-j$&>}we-U~ zp8nw--xi`49o0Q@6A)!|lqLF-8qp2euYSg*=x+*9OFz2h4v zX&q&WJ})^r($T{2|39z0=R>c%=OcCBZ}N73OAe(BmvKYi_`x7c-5cXW+Ql-ALfoCwi}BHH^=-O)8JQCdeyqBxJ2 zS|58sfT&$Zbw}3(L>V3Jl&Ga2z3jf6e7Yx>qf9?a5=Cy-W0<3sepL4#jhmyijt*y% zG5(`vAuJI=649=s54!_qmZQvlrk02b-|^P2qfg{Wl+n>niCT12cgu`h^|X$5O4OpG zx?5&kqO^{>E6#SeOmt6(&`(6Wj_Piiaf#CXXiG%L3M#McI;y*6CLqe_C`+^ua>!9c ze%_Pr?U;Zl(~q)5=R%^gH{ROM>veC(xI}3kZOM}i`iW@QQQg}yE>T)XS)xUlqs>)c z^LF&_Y4$1kqB~$_9X_L@of5V5qq-Aef*fUZlqK4_j_OW?af#A8$~tJl<;_RvC!$?P zbtl5OL}?vmiC!-{T6v<-(Q-k4Z|_HSC&C0o869Pb?yC`wKQT11M#=amZ z`b+P3FIplh2OV!4tA0)XylQlL`>gxJtM{Wxh)z}YKP&&N{;|JyFFGY!yPCHy|Ld}l z7|wRoT;5_6rK_Ixd-7C32i1;fuX@epEjCfQ>RTczSvTI=t6pX`c8>js{WJi z>&Qn(>8dB)iN@I|uTbrX_Nv!B$&%zKGuD$tF#{K5u@9p5s@FWpk`QI8zEh%>s@EK} zViTpSet0jGanKr_$IrD@^_qiLY@+m7&k`+!WS#89`%G){p5_i;bI?jcl&N}_=t7O? zyzDPtbJ@LUJg=YF;cI?Rv5C%5^_25VJvT8TA=<}!&F?8T(HW|~6{3=%8fXaO8giPqNsL6d)1$JUr|2iOmx+=M5oHp+BN(& z$?N8^UUMgkouiH@Q}rxSKei)BOHa58o-1Ohdd*8GHc`6jSyv68Z&(eEYDctJz2>D8 znEpgeX(>EYTIAha4UFk!m~efUs1(=KKVn46fd`fmr)sv0| zxKEFWYDctJz2;LAnGOJ)sP`E~jt;hj=tNJlb@@AGAu*h#qj^BY&QZGR$<^Q^-JBCTsCGnq)oUIQv5C@S zJxkQ*S)FWn#o1Ezng>J@qRd#|DN)N#6RK2#oJ~mOh>fMzRVtqYw(??W0qP^<1_4Tod(pAqA zZN2KX_4P@JGF8tKt>vhw=Xh(sn)hk<=6ueX=&EPeg(63NM71N@t6p0To+L+^^ZJ&E zjVHwstu-Q8(7tJ;{bS zJNhX%q#Uc-3Ne=G8~x!tQLI_UeEec{>CVO5LJx>)zkknNKFYM_UcX#@NB`Q~)`imD z6HD}_8qpQmFX`)}+G_A5Im+lLOH|F#E7f7qQ8hL{+IHhbx)YnM|H-O-QUedNfoVz@v0!BmAxR$}$~OaEvl zqFX`_cb7q{4DN;2t~k%hdz$BuKI#5&!Z}k4qEqSUt@6+6FTKdU=rl)bI_im*g?xnY zK9jl{JTg&QM_XEHi#`<5-jAxQ!6Or;b(AGq%eR5w-wv)gTXgg>m$;c#J)@(Y61C{) zmvbb_=xC=zEjs$i%!txDI^)`9G-c3FM7xfv>+5%mj~-jAy5>r)VAbhJ~V z79IUcW>xRTdPYY(C2G-8)v+LQj?y~Ht_Clp!b=~apNMuHl}me>bx-x{qtl$%lSGB* z@R>KB=)lMAdwcH3uA{1BLF62*Umu&1qj(*jB6Pe{GqobV?wdkno z0TDSzXV6h@ef_*tH+(3epNMuHRXrdg6Q$4V7tc~eh38O5J=xKECR#^T4~P^*nSPWc zI?_=P^?JHpxu>l^)_A|(UrlMgKKix2qoY)gmY(1!M?I~H^YH!O!F$8&qpGV$9gZCvdq4WQ9EmbI+9^>>Kl=3?i8B3Yr$jCNsOnR) zTXdB5fLNCjFMWi5BHDFS^(l!=l9#iN3=TeU}im=;$|dB+B%oEYYnR z(FNJBf-5B!9aX(_c8iX(J|&kuQ6Hh7h;|+Qm^)x*RnO=sOZ54WD6T=_c};d5RlRf~ z=O}%ji6mOh)rc<0emF8&bW|Q@m06B5I!Y2PpRExE;a_$m(~7+x-Es%ahbY~TlFl!q zF@8h~0xD6OL{5d~Wi zwfCc!a;$nrM>{2I=|?Z;NR-jhPKjD{^pVVn(mFbvNw)rhllPrGbMDmHGsT_1Skw{w zReR;)(c{be4~#}6bo4%=+7azKsyb-x79Aytx`Y~TFk1)rnfUpmPh^&(^m%=!L@hcx z$dM?cqn#49=&0&R7P;za9d%cn2~V=tbyW2vi%gX6M@gdX>!|8UmVzkLkCH?&A|Zk> zqW!#nd#~syNfhKjw0W$z=;)_2BTDNi>!7tFOmPnseJG;6A5~r6QdB*2pNS@pnqKuA`M1|k5!}qy5@G(!d(~ova)S{!RZ(iga zrFE2b(0YwzY2_pI6Va}ts&8IoqI5sX65SUP9c;?}_RHS!xBl|2NA}xwRCRevL6p%^ zmS|BU3O)V)EvtX^( zrN4B}#dn=JbN2p|r%#8hXA?`clxpxP1b zRj<0dMJ7sDeM>}z>v-GPJx#27)#WV(QKsrUC0ZNnpA+I`Au+6a)srkTQM&3|awkHy zBigH8^(2c-l&<=gh)ULtxAv-6J;_oKWvaeYqL!*x9ke17rK^5;FZBKsXYM^W?p&K+ zxfu}i2S>j5evHR8d{jH4z3Np5t;j^_swat}zCjcnet3P<(&4KPS}BM!RZkKHNkkAv zw0HQb-&16wGgLk2{4y`>u<8cYj%crX)$b`X(HW|qBMKe$WCw*14&8|?Rj>Lzr69^x zJxA0NM2?PhG+1eC8S7PdqR2$)swaI)BqPULR6C-*>d(7_?SZR#EfED<5Vd#ssyk8S z9CbR%R6R+wKE`7|Bx8i(lCad$yrYGtnsvXf@^>Uy+ zFxIz3RQQg!_Obqgdvj()nX2!UsHN&vpOW2D^{ivT^Sq(;3 zwINY-QPuU%b@;dKRj>M#q#(*vJxO%rs^N2VPzd3HTV8*c_j|Hb{gyjGJ~~Q|_3Zlk z6(NWjxu|wTd(}Ub8Bx0GNut$tA<^nZvcLF}1^2>U^%vdy^2t&9yq+XlZaDy>S>wpn zi5?LDe|P7z+C&tE@jOC77ln2)3lUe+s$ju|xzn^z6K#nibR*SWwTlXF+~olLna6!~=y}AZO z3Zl$dUn^0|Sg)>F5Sb`#{fOD+a&MwX?bfR+7DOgWTVD~;GFiLz>WT#^h%(mKO4MTg zOaG>f&!;EadOuTQ&)1_TQDHl(-Fh`&pQ1;PcQV>e1mu zE!L}P@W@1I>&aXw&MTq9c2v9dY8pH;QF^Seh$wm#)o#6-22Vkhv7RIfa_G_ig#0AD z+R^8WYT1u!+2t#juD04+{yk~6C4G8qcKL?9eL;3P@3{GPw%pC!Vs~lY-OAj}1$iK| zmoAehaoOeKe}}Wn_ct~&OLlov{_X0%Lrlvq$0q7OJsq;XyKtwwv~bsTFm;@N5(K&A zh8nHToc{q!bR{I(&t!Wr?Y~2;=+V%6^zra-V14ah;NN3?5~3%vzA1lttNqPCV2PG` zR9^JpeyH_5`Mt}ehG#{z>~d_P_G6~PdNLO(Ob+fb%AndmJ!#qH*hFdTDkxpo2Yi{wd`_iqO|oa(e03^ z%Vaye#@S-MmR(Lll(D{6q8975>~d_PwDn{zR66qD9=4;}t=F>4v5C^wS40$SLDW9h zYuV)_L>cRAC2Fx=%Pz+zI)e37E)+e9irz%ETd!r8V-p?0dWtBH(Log3AZoW>%PuD& z%2{6{QH%9jb~!dt+Ilh)*?_lg_vONe^)vz4b zYuV)_L>cQ@qBA9;#rEL1>~gPoP9`;+&C{~Wv5C^wsg`&L6-?ZtWuQAC3X!VY8mUb?DBtOJ(&y5&kIRZ z*p6zqUdt}WCQ6U>EYYGjLA1Xng!{i=yu0w|^Q7H+ExVkAC}VxCL@m~D`?q9#Mkac! zXLF%5(v#SK!gf@<^;&j0Nslte^(@h|U-oWaL9{=0+200pe#L?}cI)4dS&!1k^(@h5 z*rS*!$%A7ii}hM|Id+fI)>o7Zh3%+z>$U81Y@+m7UlCF1*v9@~a#K%vfJ5 zQH%9jb~!dt+WLxep|Bm*ZoQUWj!l%do+OHq2)1JzMD5mV+2tfe8S6=+AX%;h8b~y=A#`;=`TCCTy%dv^l){mGA zE%zpR)NZ|&U5-tZww@%4<9QIpHi+7-*Rsn=h%(lbL_xA#L!uVzwd`_iqO|p7iqZWP zmZ%_!YPVj?F2^S7tuJSn|Mu+u4H1OADJYN-BZ=k{AyIt7cMtt+-cGi0@x1Z^T!07@CX(ne2yJMh(^5qz%uv?hJ-MIBsQ@lhQ!$U zFpjgTR;{Y;>h9WIwR`s6``q61&8@CJ^;lK)_o`K^R;@aV{4kn%vuH4xg+fQBhq7Phu^3GG9|KzpDKlId%r@Zjmooi2Bzmx0OqW&BENi<*4 z-hMyRP!aLGy$AO8_C9OxCG*8HJRgSM{La(w`H(k!4^VUCy*IAk&Jm!!fZY5?uPN>n zGFm=m?}7Pn5dkTJmidi4*Q*gkb!xPH7QMF$87-f=_bJQyGI$7xSw4B=8=k)I&7Xev z*Ij??&T4w7E{&EyL+`CZM$0SrUb>h85aH)PcIWA9k9&*T*RS1q0tSleC=01B`n!m~ zn%-N5FM-rA+xt{T%eaV^FCBjw)l(Gmx}XgDo2dJ3Ry0szq~+86(})-6zmI>iRP@TQ zgqD3O-YR5c^r?G)3TQcAh8m{qi!T zWn4syag=yn`7s(;(Ljk=zj%9}KJy2BkY?8&vl=8SM(dXmy|)UnUp|A;!m!I}G4=%2 ziXpEn-!ETpMFS;f{qmB%&zwh(@WSWUzcE|ciWn6`$wd4qdT$jXEuS^_PflVeaDMH* z*YA7?U~}u~$FJSFaq~&<Mc;Vq=2K7KzV6+*sj)wpq&dF!J{@X9XjYkR9z2pu|YaEB$ae<1&L3 za-Y795HU015?X$kinj_Gc3-;pxr~-247w7yi58IbKoBqcQC;+R5&sE#Zxu3H-nRED zKUzey1m>gbw{G6P15(4{`t2vY_ujni-Fg3YFSA0RYI#U?(Mu8kDSB@eA}yciM{&&f zOMLT#*MZB$*FSI_Buz$-`A2n8DiQx*>Ah8mc=>!z%OEVEWpML71}TEqmBa2!+-2{# z?R|kCg|I{qz3|3kY(~6x`$G?g*KY%75u-)z)N5dNQiO5K>)~1mh39l-^r~NXr)kEd!?X7(V%dn~#6s`cvNE+LMp1 zR*`vBmqyE{(tE2AY55XH%Vd1&4Q@X9zUv^dfIi57^5zquJ!GF#aO3u!_j@5s51^~c z{HQK^iSY+Mjow>@NXwgmmT)-tgDGe-Z-CGM1k7)|@5vkQh1v3{Ywy1CIAZ9rYqzdF zmIe{krP1=I=)F~lw7i+ovN&V1)KgDC4szU$C!rgzL1(P^QC*Y_;}5)y-dlx8%a;Nz zXOsC9X!(YxZ`=mFK*vmP-+UZ~>?!Z;=2N%Wu-*736oIK?2&pc5h4Ba2%GUmew0s%R z5)V%zZ}^lK-+1qJZ}EPnJp|-DX;|2o)AAYigg_3Y<;#HJX#PkOv>P%B@i@GYU`mGs^!Wc~8$y$AhhvSjOk$h~;dKVNphwtb*a9nTv^b_x{%6D^f;{z=#8YnUA zmk0LV&U8TuXvx%AL{D754J`PMT1pma%cvNwUk>TLRfx2-{K;Uz6n1Ukx#C-5y~7X# zY>&1o^3+gW8ZBQz@2x_lrOjxW12Gycpt)l*R-T4z-TFGva~(mrh`XXx{Q`q=OotprPaYcVT*hcZKzrvme6uc@2x_lrN?RM=4t8XX+gnQ zP(*bRff#=vp!ZfG($eR&^zyXy^0Z7DAEF=Cm5o0T(tE3r(ejGD{lU9hZP-Kg22VeA z=jIbPz6lo8?|S+=EC^a{Z+s1yU&)W^qCaE&ffIUf6=J^}@P29M`=zb=g^^2D%8=@! z7lM{^dT$d_87^Vb{`4e3n}p2Y(467*MZ41K9n8xhSq`Sdc(Q1<4_fV3`$72kK?wWP z$6+h!-8VBtQY(Y6!l!ra_d&&X1tSli!M<`Pc{W1nPR_&RPxCBc@^KMgJk3WFc zt~g{R`qODV9QcdjWbCo6Y%iLfFV3RG&sHa5xzw{L97l8Pv0M(SHyy$8) zUd+!g1+=EKVtr-&VgjO7@Q4Z(OCGSUeDz+);Kt@WNjKw6=z8;R*ma(p}_MVS;kF|18FRAqt27IjrFQ+3ai*6>}-kSQ%jI ziithyb-Ow!7l&56Cy~Syt6$sdAIcY}u=zKe495$wf*Ou9>`M~7;-Q8jh+G|7vnZM1 zyrVeQ3|7F5TM<<>5DZj|ZyA1N6Jn=poDh$3#GNL@T7l@S| zwO$WdOZ>%b2&{Sx!C)EtGcSlIgON7}1`e}J2nI7zYF_rQn*W~d8>-K)4$8%$)ob@v zoI$H~xKA$z{tQ4nNKJ^@>MO)*D1xZbp*5Y%=fhPKqWH#l2U@5@0oV|C8oiN&Ef5B4 z!RI5E8P_t3J-NZLOHIA*mWxBHbJ(L&kZZM%q^va`4aZ!(0t>^z60GS!<1+Ua!})v} zRm58jMG$#T&=P|68nV`gxt0zsYP}vZ!2 zSa5KP;eP+Y!3I~ghjAOOlA5UComj;5X0n;c?c^+v9Cm}*TV){_gb&DKG)hTw8mda&=RKfI;1Gh zpmhRD>r+@!Rr}ecrh43R@d>fj>ryFVg?QMe7d7Cbh9ZcX9M`HcA$okI_Oe{7a45?3 zTD=3KUP~BhzVi^yf|A0Zs;mWEYxFCez;N`tBK$ob0@r#CQckVcL)M01ISyer0uJkr z2WLWQ6-OuO?aEYB`Cp2%q|&HIs;?+Rc^#BXtPmxV5LyQv`Jx7;R1HNCxjMAQldFctikz(;WknO^H`=(Am&vuHLRuGYwlWGoYCzgPXJ*X`<% zx!4|JyMLtOd=IfDU(}#Vub~JcFVU0_m7rBPAr^M)mT;{GT7{!i@Ny&2GAJKB#kC5k zOTXF@X#EZ+7$!S$WQ9H~J!GUWr&I3BVm=*$!fygDEWl=9u<(ZClW4&0A<_-Zr!G#1 zd8od8E>j(pi%*FCPD{lZ*XkWgt|hBRlLr=^FSxx!@!op6A>z4)B8WVv39+T1a01L@YAr7i2jT-^WaYF%1ie;*+V?OKGFO5|IsmO6QckVcL)O1JbwZ$58Y|AVcF3qkleH>A>)AB4h^t!ZwKfbbGzSK*)kVs~ zs8l!@^f zA8ODX)KCPGo8wwiWonSM3Ma&EhSq0u1Sv%ZwO$Vy3XJ-i zJp;#vefC)KCPGtE)_v7;oTOo`TkHtPsDN6AWVf6e$lAd_(aDTJ$yCYiNl9 zBAW*!Yn#RR>jbSw30n9j5b*|D+XAf%9H8BSR$h$%5N|^8B(}u&Fl5RHyUB`Xv}Qsi zaLQv#P7|V7SGhy0-EJGT@xt2F+4A8n94X-lmG9xG&Euea5R{WRpogq`{255)etcSC zZyHjkq4f|ur)3oSsXn_pC>NKtx(C{cp8d9z>yzai4k1nEqbQEpZaG^U!cuq4HmI(` zYNNvWiyDd`a&>5_6{5lNAq6crF@Bq&H2?>M%NULp7wbsn$B7TA)RPl0j!Mq9id@v| zsa#rlMN!Jdp|#)E#Q4^}RGHSW0a!y3M6MIG?&9>pxYlk!>rH}dJtw5ZaD;q~WGw#z zThtsDt5b~E4(34URYtvi{r#}$U1;3@i(nCgeG8`#NMG4zGe|~^uUC7B1`$K$&y_ftDy)Yw_F=9v@rns4Fx!_nUqA-d&O_FD8|=^<-T&Xx)rR-%o_rJnh7 za6Me|qxy2WjCD{h&b7MwVX;n6p6C%uwv^|Pd+NGPleH?jZhHnt9%T@cM79}Pe}NMW zun|%s4VE4C$=>0lu?}Jb zd_n|grYg=(^mKbt8^2`}qNXxcMm2^NqL@~8XF_bCbuYM9DYOh?{Bc^=qAz)yxz<`@ zypf|cTr20qnV71+hgeD0y1Q%8T1(b4Y9n&cGHN5J*K@gybx;vw3KsigBX7+ z4Xx}tkt8n>mhK@Q8l51C^YgCGy^|RyFdXB}Yc!y050BpHA)|UQS)P_FJ+<~(rl$Jr z>Y!X4T5wy4inA4BN1b`C;W$nWMG$$qUaQjfw9sqm-CPhagI2d?gw~qc_~ZzomHdGS zznzD`wM4;Tf^R6ERz5`Mk>|&8G&?nZG@`L~sj1i9a&c&N`cl_`=MY;55^Jnj>kaAb zsMSyeHL@I9h81E)uVoy7ErFI)K3wA%GaA*f&NWKanXzE0jgosNHTAk(9h8ehtFIpx z>-3}na}Bttp$H;ZhgPKt@d5`ZtJli(Aw{+XTDDwk{xDcEmnuG~aV&(Pn0xbwC&1=P zkHM<+)az^jtJgufP}XW`mJdB;z+3|^YAAxp)uE*(L<844R?u=Zs@d>_Xv4Ma4$a%8 zre1f;#i7;S*@O9&xYpgv46W*uA>&3g83q%$YxxWe4UC612wHY^P%aLw-L==M1g+Ex zQE{yTZG8Fm^oF_CgntVl#tW~2VS;Zco)+V$=d070{Mz*~wZB zw5s24O>BTqh&y!sleW=Q$?~C)YZXB2a&Rr_V;(4SR@Ej7QBDf~x>p<=XfSPl!^lg)VE1mJd0OVjT8d>gGfbeLqgJ)<^Lhr>U?M zTIDOm4MPiMH_&Un0V$`}>mh4N4lE|$-j=DUKD#<77p@R{(wDce*E*CwAGYkUn9GFt zOd47QumY~NHPBj1jBi$m8&sKIG|)m$UBKfS zV`}Pkw_JQe+@b5ATqeY4)6m+53Gt8<3_Ruqq@0FW57}p8ciP4-HPz>q3s;D{bD~Gr zYgM_{{J02O#Jw_MndQTV#dzt0aV%n&nxN&Di$m*RUlZfo zN7ACX2ES`H6hVzFw|rQ=J)Q06ZJrPtXjMJxvk_<+^jaQ%818x-MeOS7`3m>(cB!d8w_KcS?YHC|b*Oyk z9mx|tHQ=I#BB+s0T??O$A#N60|5k9V;Ax~hjPVV{)5k6behe4gEa%`L zJL0$Xutt{tWFncZG%5UnK4_U(X0MWqPl)}#od3jx*p}YDYw*lnLlM+SU9Y8V;|;Rb zg@Trv5DPn}bcMKCXx$Rf`uG&>SRp=x1C;9Fvd8U!)y;=AZy|LvP01NX@XXl zp!HAq1KmAMM_rjVKAt=b=b=+yuV*^!Iyi&L2fS>>E2T09Na}UFIw%*1R!be0My}OS z9w=)#L|8)+L~c2>46>H^#hqm03gWFOt22*JF#=3eoOfXmY~V+&wMPAfe@A zz`VX*YolB%95v9A1Ha;-PRoZhq5)bpaILhJX?*j8+)J((;K`f4;1m(yw1=3Slh_`P1jI(4IJJ*1q5SPvPrjQct)LFQ+dn(A}Q#i7;F?X}uR(tx>!lU_9xL5CPEfdwv3WY@P> z{84>&bxRt*4?$Cb<|0zO!Imz!4{qLT5u)7Lw~{v3`hTs2>(MK!i0z}Z0tNR z8#M(v4OQb#WG!fYA`LAkG5#JyD;#|nZ$j|B*b@I^7_vRY99SCX-i}tLE-F(o5NpU< z4YabCwHV<`Y=DdLm;6eC7w{V=eucBGmGa>pLyHDW4_QlcT+65_$fY(ax~RTfE@K^( zi$klcPP7Wkhpu!uc?mXpo=-!I0Jg=@I{hRk7~F}pkaQX>J!H@tOqQo-?4i=nE;ZHX zmJ3y;tu~c{(CQpYZA9wG_glTi*<|Jqz-JBIweBTRI0RoKt9^{rPy~@zzCCT&Lp(-k zRp|RNd#%lKtp-~61X`M`rAz@0(0XRapf&m|PB5$xUyhWAqYi%v@D`}O;LYMai1Ee+ zVeV^^sZW4IfZHMSk3MLb%bZ;Nm2z>ewY%HXm7vwafnZaivNA205X(>WY?f;^&|2OL zm1!y0GT3WfC}^qAt^iu)Ml~CT)>}Biz_r9j5sm`>h77~VMxLMOSj{MOW z`~#{c7CfQTpsJ~f|G4GiT&t(fh6!1#ErqWdJQ&qbglwdyjjzPD?kZ?0u2svK&n2z84H9 zVA89%Diya&O(1d0#i6yY7KB3ipv+E(V>pGq7@l(bYcsb^H6im@LlM+SeS2DQEd#W! z5VY{%MTWL)WJ{oxpAgS@6M_U=l6KuT9Y@P#GA_1P&bAI>cB!e?-EyHA-#528gI#KZmRl|{A<9!0$hGmZzY#8)AF|EpVR$ zR}Kv)V{gv<91bSnl$=F%iL3^6()Z&eYfTlj@{B6;ri5#CT4sln@4^b+dDsHcyM>V; z_6H+xGV}ZsaJlb~JwJ)?0c-R)ASIEX038@s*?TJ7`^*Sx(}j1{=rYmIIpv_?NB!avVLfawcZFtuI}SqJB~ zj*Y7GTc|PPhEw%56hY)>ln+m75s9&Cp`^=Zq&&#p9=QFkM;j?V!nt7l2pr zg~=d?dfl!L%7uC@r6EOVb(HW`gGEdYMG(18(7KD?{_a5QgMw@Mf^urT9x|2#j<+Xc zuxyIP1C!Q4a3{OeRG(We4z2#aG|v*shnCbv)Zllmh9anux~x@+YaQ*wtLj4`@6YtoB#~Tx%JFEKn^2^}1ahl#4^F)zwyrosPWzX*hmpIXi!= zH=PXUu%7@v!k8H#EfHbz9ZZrbSxy%(7;7kk$Svnu29>F|>(HXs>mg%B5-d}HI2OFA zJg`em^||FjuBDJ9Cd5N&z+8jbLJdVwBb~TbYuBLlt%7UOg(=i}J><|D0ir;M#%?ud zDn|1!l@Nq2um?0wqEsJ0qnyfWu7h$R*HX%NgjTyPp;ZIRsi6oW*9lq|3R+B%H~h9l zul3^ut*=DN!x6p-L_9qq&X-{rjo~s^vqUZ$ZI_yQ-7Ob~R$E^ob`Io{u?AIo4MoUC zMpvU5d}(ZPcn<$5S?k1K!0cS~^PgE8THT}65!bUD?|VP@-4+Nfe6Z$4D#@!jfnoA@ zMff@%f;#kB{;(G&!hrdUFdn>8ykGwuVx?nWd2QGXE@~>{k~CJxwf3c<19GiyPx^AJ z0T(qCLFDROtCFXhV;qR=3b8=1RciUrX`n^YH16qD0_3HEmO+f4DrhOLw$0E&pWeW= zJfxgHEInkcG4AWA=87k~)Ks5aE)K2TJ$6xPqvr}iD{Tr`0IhOu{D!$!1Fd^;>_W4R zuLP|Nf>!z?E`Zk7Oo-@qH}nD&v5f9SK*k)N!U>paKfBb#wcK*ygs85X7AwRGT1Z8L+F>CTDq@8#bDKufF>sP%ft-~>B2VKj-CNhNH}7hqLW`A7BH z)gg1S>!0>p+VxMJBdMOR!TPv{B8XfaT55%8fY!5VuH~eB*zkmi_oaZW)k4at^?JxK zVl;Hffyij+kV{SV+0{Y0IM>=?U#3+qtrG);pdx5(^Mq(4YjJhvB%Cb4=r9;hW=V+( z2602FD<$>_B$TUK9h8ehtKXJPiY7$K#(1%8Z)d&?2Fry%j@T7;i{X5}4M$unO^99* z*V<-iy^|9RM_j)QDG!qwe;}2qyzU(IT1&XheCDMr06Z}L9V}qm`Xn0U^z-@D#pw`; z1d@C%Qyr8Gp{4sW?I|l$S@oQ69mz@~S*}$8t#WPrhM{F6YoV(TFk(Jst~pj2Y}utIuH}}CPlze=EL1-9 zd-B*tYFWDt4ktBeRZ^MW#pwf~l?52VPlQ`CAvVyu7rsnOp=ID&&!(ZJfhil^5@;Q8 zf?>5O79e5rU-CBr9Y!XG#_Ohl-Hx)?0#CRz zX4=pAEj#Q67XED8YF2CqpB*ZUy@(eCs|nGtLKI7Nw0qbEuGK)R2u4NkHUcdJ*ZSzL zajm=Fkc)0d|3 zC~NhUf30yeyUMn9=I8T8lsND#;KJ({LFDS%_)1)Bs-UG-h(+H(nSZU$hQ;^>T7{!i z@Ny&2GH|Wu6|@SdOTXF@St}2%kMJf01$r$ztAxh#AwAsuc`dGWk%kt@THCCAXrQ$# zdaW1I&?40C7PQJ`EpU=Myy}Bnt+R75fl&VYsGZpm6Y(som0(iVva5sG0GGA82hxT{ z$Xe=%YYj4Z4Mh;SPO{c<8d}7)vRy7>TRR~(&?+1+ZzIq$$XcIBL#vp??Shui35Gqy zmm}q2f^R5J))h>zb#;<}D@O2_Q0Zrvnm%Z^T%2pQ+ER^$T&vrcwt+R^qJ|=y;= z04*;KEhnyZcwjWDS?7o=IGjwrm=hQ#za_#64*^P3F zyL%sE729|ZzkSB9lwPXyEe0YBE%wFdeq~~O11$^qUOH$Q zWUZ7oJ_n}ki!FiHmvE*8a+Jp(j7MDU6a(Pj54=pyBREA-aKe2!}wS8uu0%?gpe1RYvxLNv%)VnDKD)fPi*y$P{_R!tM4mGS|l zEreJBw91tao8?*!v?>cqb$Y6Cae{QrXOq3G9=-rt+cF`>U&RRqF&@?O#uehspPxzp zZ3|{uXZn$l#1rzYrqnc7*wsO~aD~{_HhK=!nb$4z`Jh9qiZ=d2LCdHzErnLM)k&=o z^S(@rPES94#%^0H|It1mtPtbx;sl2AuZ!?!c?i&IA>}k!ddN!8Nl%2H!m4wrn~fgo zRF@SZ9b-qXMZC*~Yi$}@&j@Jwo&&U)Y0Y$4;_5pGEn{lxb+=rcYjqCgWw5rHjLX6MqwF;nBDr;>TT5EBwMvSjXjIS^uk}1mWaIL>WT)d|)^9@SDX7CqVsWFk23*?H{t7^g-LzLAf~BI%sQLtE(JN)^MLd4Mh;S zI@hY?U+ZHyKnz++*3vtj$4fSPHqEsfXu&nE8^5DRJL0OKWzcKAprBOgy_$pkBoXR4o zb^%(?610TtHfp^dGE6XR_=7W(b~XhayVO*lV=m@5zO}DGtJ{+=Y7mraD1sWPLrZN> z8@Sddc8zPHa9GV0ke@6(8;0Qdp~9q?(U3-u3_$z`zp5$hWge;5?dp)Z7_|C_a{fax zzSWY~x^CG{CXl%0LRqV;yAx6OoY!#O zeGNrWBXzD-X+lH~|6+T37bZkIXw4UKRo#OZgUruTS6ChbDyi2gmk!k8IOW0>VqfE0 zZ6$owfQuT6Aab3cg*RF5kn%y-Yf-QdiiwHspmcXKuiE5u{u zx72z)WZ#3GcVxTNRG(We4y{Y>fqAMX#NB|_e@f75t%lar2gPUQAM;0hTG{ysLCdZV z%Eh78ZA&$lu-DoZS*sG)I#$rSe6rT`44i9?PbV=CBCr=Q0RcQ5N8aLWHt`n~;7A~` ztAlbO*Xn8$Vy`6+i*5HtPbHP<#ifSUY!WWvb~;deR=A}J4%b9gn&AU5w%PfkeucS^Cy~&ys)KTIXmz@py;ip)C&U^qGpwNqB3D#12@$)l?nILBO{{jL902@vq5MbBU3?88K6~u#C4aTwVW-61AkVm zpwIC*V``c!+;Z^=v8@apaD~|E$|F8C?9$Xw1U1rWLY(dzv`E%^4j+sM^9OLjO;xcR zz8$O7)a!1!IJ6G-C6W+Y-Jaa&sR0)?6hV#Dp;bkU_dSGGg#jqrL)z0Dn3X->jYmMJYTuXRhrVmRGS!=@c`SffuE*7nF%{`m=aM?;V zLqKH;XjcbOiOPoqZ9?p*n^m@3Wm?6k#upOH&Ty^qXArb*<3~Y*rH2eTCvc(R>9W+k zT?5x*Xmm}ZrKbAq>Y!W*t)2$0w%X{aK~Sop2qIUX5Gz6JE)Gz3g{bu+Mz@1&B{pLG zWPCn2nJtSt0buuu|iZ>t3j1sLlH!t4y{UJ{1t>&A(*l+%b?XU zdteqG)?8JlBUHJDqd(?^hNDM#2x9!_BIVS2J!Hh^6a#iDQ)6nX&#n&2#i6yoJ8p7y zQ@{$IYRE|%DohP}t#T(w8-~_jAZVe`WmG=ohP_dl)}%760xb`}{p^HTpp7qAnQjoFdPGfK>zNDf+8qxoTV<_MXc;EN zX&PDtux*CcS`%WkLUddqmO{(msYXaYYbYP?@q}o_wHj#E4J`xLYNfdrPKU7f7R?fW zF^MOq!+{rFjm8UDu9vAy_gg73K7S>_nwQqaxStcoALN9F@f{w5h%P9nDMk-#khLla zYh*OgSM-Ka&cL!-PSB0`Yq{Ss|GhSH55VQ>Ki?k zEFY#gAZ#jB(8}~UMM}l^&2p^Ed#V# zI1s4Oa?)#U7FzL3Il%xeWL9=orbe*1fy6D>rGb_~Wjakmi@224M$axm%V?F514(1~ zK&)9;K2$n~c#($IrRQ1=v>a8YE-S>lX=v>L*BbpiCm1yQ$4Gf7-cXz@Sqo(?qxv+* zwT!9hgLccsC&aEU#IPcWsX1s_=(R}7!Y{J`TIKdy4YXp|V&_KD^Wh@$j9cI|R=dWvTx6|V z=?Rfo{uVkKKWv#}j#!-xS(Q7@Eh8FRzZH87t(E1L7 z7QP8YJT1n<1+L(`t(pT{V9Pu;_sF$`%L!Kei2vBtLAf~B>K|$DM0&gDy3HWQKU)N? z!d~4DZG8M5g4SOrXg$Fng1>=r|5@=KHhL=DLy&5!U1|b}TP_Z*gO+xpr=yNjZ5;_Cm|<%JKQb z5iIn|^jJFYqF%SFL+0A;Yt1V`%i~O7Z;c7@sAJ?>W30f*@*x4shp*xJ!x*pS2uElm z4-?|IW5MC*ll&pT+wAt}I0joGE~is)G?Nlr#7#ZYsaXau`P9YfFcX0!pKCGm2Mez_ zFXcipzN2}n=^e_ORb=+L=Z`~P+8ob)7wda7Ex||)MG(2=T+6UMeFX<-4WpU{S{Cr7 zvAQ(SGKldWL8}1v*;gei#9q5^i%>H zDaUXpXN8n37u9E12j${it8=9Jjqj=JpJov=EoE~dk!5XWT0;>;u0A0uXc;EN)~-Q| zEFS_?%kPEpukj`XZ^4$3->pX0dJ$!j zxm1|o`D#*`l4s_IYrTljQpyLzgm{btWRgL|m$4;cyvGS{pk?A$__vKf%fPj!YeTEo zNuB7)`!YSk3NpS-ZG1lb3eO)V-y%YE7Z1?F9Ur@67e<4Z#$Icz>&(i;_)6|X3T3SV z%ZE}^z+NwXB|+Z5)>joktLjD%Q!bxfULIg$eO>NI4C$9x}w_hP^q_b+e{01?a^Mq z9<(|Swp)j0mFWU2a5Ac4ZgQXC`NJ3;O@{IJ^EhxVF-l?lqx?YVFQNDy3q)fona31H#sZifa|fTDr>goD>FE`*!2 z`Po@rNlu*89M(_-HL`p{G$~5!Zvh zIUu z3x6CjRYVnc@v=!Z6hVzFSD6~1^(+p^N-@(2vf{rG%7 zgi}|+cmh|Z#j^9W4|b`k*WGe)XdUR#>Kw@lu?88uh9anuP7|U~K4d$&Ft#OJE5AZ) zpj9|tupC}{k+~XL2Cj9C-+D1|nYUXDE!2D!DId@-EQlwQ&>KYY3Khh|!N9DY$aDww zx?LTVi*v1>?iH}Nf0?+}l?Gabmt6N`d|1P=_c3XQLZwzbM?`<6UhyJ8MM?! zj{#bOYoY4FxK7*>Xd#dQTE_xHqu=2VzW7LdPrL`c)^I$ZB;zVu)2vhNQd6(H<>C`! z=jeb+5qpUH(ξ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�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�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∾W0U#5khR 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

g<1 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⪚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

lOB30@# zqYtUgGY!9#{pQz|9?O>=2g@{;9dW>cpv=3Le~vchA4+?m)hO&&P<7Avv6InKw9Que z1Q}6CDX+?}g?xB#Tu27mz$C~I>VZnlQL|?pn*A#M1ZKMM0p;G z7y6Z>|Gvz8^9Tl?OUDW9_Yy>baC=&rXCF$T^>?CqrB4*ceoyWSK~3H}w^Z~CAV!?t z*+hInKLtnYgBfQ{M^;q1QwV2&;jOMgp*=J^)ehS<=aSAvesJK&zq4N{-Q68yW8+Lh@289;T z?4S$l;FLvqxDm9)bdN}giR+RW-n6M_ue5beVd%}l&`-h9`X#K<_=L>MkbOFQ&M8VlT>&=`u zKmp=z4hqovDqTRVQTfio8WdW)P$2$-w}qaAzre$LB3LA|{z5qgPgrS7JcR*Sa+YwW zMsR_63Q=)M5oBavi#@e;jc2C?|I~PE?Rp&hY@bc;DOxiwe9jjEV3uYKf9@ z&@%6Z#d%jzQt^oQmwXV0gRVp_`NTdE_4uXHxz&5*d?d>wr$5+Ub2_(3kSou00fQKE zERwTx)}0AsfI`;|=eJ#2c!^U$14ef{*y2pSib9Qt-`myflU}IrgDq!Ylg6qk;J=Q) zb#&?VLQdgnFi^B#z#v8(3TFHT{kjl+7`IH!E94aH4VP^Ac>ff;ib7C@m9r}sA4A>0 zy!+9qbK=w#BuiYF6Ex>C-#gbk%qbvd zk<|S{@aZ4dPALpSz5hsjbN}@NY6|#YR=a^yxTv52Vg#aK!e7u&A*$r3qJ~ETIR$&0 zuNPGs+#jj>g=+8RO%Ivd4R!mx)4%x>iq#Y(%M)@jhd@d}_7|)a1B{VCj1Uw|`wQh1 zJRrW1kd>PF665zETb=U)aS~?txLi+D7eMiMk^?Q z7;z|=@Y)Pe!0ZX;6ztRh4N_C^jioQNqpxg}N;D`SXm*G%%u`SRG2&1#k&om_6pn~Z z!GynHfP#%hG99`=yV&MPWs&^a(--=bnxqvPx&ZkBykEGYpa5dT(FGIvNCqgBjYX3E z1s16Qe?cURWY%9Or{D?kh3;9Yr8^5GzRNU0;?*H0z4|GJ=*84y5Hcr46>Nh-t{%BmMOU@25qL5=Xlxkwog9&H4-F6ghNj`e_h?Y?_j>$S>w=Y>!eRvl5F-u+6Io#fD3qBl zY*$baP8UpgZ3Za#txDZ-we<$B3#c?*s1YnRe=rK6J*j)USL zKPV`G7;$vLguh^fLYa(_WPhQUVu1L9NMj_k{z5qgkMI|AvT_He53`01cCU;?f(zu8 z(5*`%@fWPjSkU-FJbN#}3Qb35EUcTA_}U)70{JxsU7`L%8n)Qz3+<#K(r|LuN7$XX zMY6#uTTumK#IZQ8c)fcf)DfF(04RWeL#akb0vjT1qBcz4h1v*f_@6{ z$Z}o4*+4}_p*DS?Zy<9pkfB^7mC=0FsBM)#L)#a{(^oAWoD6nR8SDkBAJNtBzO>o ze+8$&MwRk^v6X!lz9!rjA54GIGcq#P+RWuT#I8%qp|jdrMLg-nN!@T_q*bcUu9iot z5k9RSO?{&J>IlnbxxU3tsp=>8=Y59FlwN^rf{W=JTr2jUOS3PgqqjQc1~q*=4OicK zY2K*jwb83@40-*8-yTvWwCem_uPr<7*vB)9-GEsnhZqr7otw>^H$cJiqzs`Vr%=?d zQH3foA9<-LR1eDWY8vqnn%gD~Cw$UNgF>}j0-^g=-Y*PNP~c*OpXL(*iB3lJU>Te&HGv0yoO*(4XfNCMqa!F~U$VF;ev;3U7!_ z!Nf?_00nL;pkKIs7HOA)0v98UE|?f28KB@j>gQxUrM1H%ZR>GQ;OtzrMXGtvpS$n# zjYNe{XFXME<$NuR)HCSyZBOq7ixgq8Pz=yJb1~vja84xYt;}P9g3skyX*p{{I0dQB zS}Pgq6svk?>+E~#gdCcN-mN+6>z;>@28Dp5!{)uzD;Tf zXLJl1qL=>SiJ|eGds};#R{5V-x3k4ssfg121)R}8FY^X7+c-`l{}L&L{X6N*b|`x< zg|TB1f^)b=YRb;BckWYFBfrQ+Tl{`5e(RBn*f;f?R`Ih3q661vbHd3mBmN*N}r0w!iDE7!fUFfo&HiLx#PvTs0j zp(cCJZ61#=;AHrHBX;C<^w7EmpA2oVdIf$A_P8zhz0RiTKM@~Cs+~_S zC`of(Rf>s=A+`gads!E70gWT?!P{S`xvA@!{GwLmzvL~i)XA^KO<1H8rL}v0MZ4#h z;tpgFrR+DqLbK$nyOL~SDd3`<2+)G}&Yf9fFkRqcgs@0vb)lRB$%KI?*Q74E#tp3O zf#QAV&HM!^BP%P_nnZSCuy#(*&B+=(kZ6TVRZl5NE>a-{vAa@T76Z59= z-nlUo0=fWVgwO@Ey>moL#(*0wc#gpGKu_WW7TF@zJv%kxmGSrC`Y&{^SG8!Hz1p;A z!$K?P;}F{V3vdJ3P`ywS`#e-*+lmi*p|e485qYu2gP6{EZ_PLZNEW zl-9Akmvf5*E(}lrF+xx!1+AbEU z|3k}W3=dg>GX~T0w)SP??+g9@5riKDU3i*Wrc_*QROWN{RbPt^-&cR#nxV}DXpK!D<~Di3DA1B^ ze0GBR3p_(Ii8WeLK0ESR4rw<#$54X`4Vd2M`1Cd>@MB-d6H5nC<}abmKbS99c>a!E z$tm!J$s1%ydh$GyiQd`3UgsIm>af>2w!(Q|IA*gW*1fZEIQt-YZ6HP*T`=Jetu+@Y`Y&TUTK?;Qgi}rD~pY3Sjulvz~^6$gZzoH@Cj-)>4I}z6$ zG5+gsFBPEvbps~WDsDasMr=qEz3UKnfV1! zTUcGmGhnX#nuo|RmHeE-RUe`+bShRZXJ{uBTCh8D3cS23qX1&WpMJ;;m55ce? zxzsusL1%|lJoMTG^x;$O+OB%17`v^1CKk!>nd<}5zLDG_VOL$iAVvsXFgvGeVEqF3 z&LCx?2wYzE>cZdU*Ew{Yj#$I7??>`$3pz`Cg9F4OLCy>xsSa|bz@0!LD44ZKuoJPHxC!Ho7v)6lGbg^&1=Z+ zEJ0|j$O`9m;0P1c*q2(O=IHd+*2^y)n~(iSju`ntmyW%5XiQcDu}Ey0kr(e5>aiQZ zJQ9d;vq&CHL2IN6-_Qo5!P0Z{bZ1C5fY#;|c)#FI!Dm~epSCqRj!rawVdlC3q(K4J zX>kfM3JM@b911sD%M&+)em6?N^}1~Kl?~*nLh_bF7ZAG>k3mRW7kpwuUnW0@KKk*e zG$=s+Ag3^x-3W96#E3&dYb{SJ_LXdLuhBP@g2r_QDAb2m=em#p=kB`TE!&?O68ffc zNGeeW4GIv=<`iCFHv$SEMjQ%SYk9h}uVjncMBh*fuGh_Ee>Xq@TA%9zyAK&@xKnWJ z2Q(-I<W292OwsH!k`VyY#FX&!H0%IWFFJLRvDo4M- zSCRPNpO8m>96QeQeu6G4*-e6m(zE&Wqr6{${up!t#E8=`I1P<+Ezd3c3%V(QbHynX zC6_|MyPyAg@`DoR_1m=b=V(Xo?4&SBNdYFNfC7jShk~mgz}p0@x9z6>f^G^o>z%nS zaDSn<+ep<(VWN^kniqWm1>t&U4L?A-Wq-kQC`=NYf~y~3XJ19SWq(08g`3S_ICKGK zFrJL8(6;!?^%@rG`F#41<^94^_D=_05N-y;#Sf7DfWj^N3%V)5x;00?U;&BTYvUAr z$=Z<>?It3*SBS~Gu0dgZKK&@CaFX2!D1aDo`UO+|f^G_sPRc1b*6_Gf@E_arzvKs{ z6-KoW+Bi*v!Z;TSvcHhbps;)-5F-Qy^Zr6P1y6`C7+z@$>w7SwPp}tePqJe^$+6P* z+suvR=Ln9ZYdaGW?Jj;InK1701sD~9MdAxrgo*N)@)vYdfca>?%8FYg6@_?cbvm_* zwI~2b-Y>*5oInA@2w{g^-kpetocz{G8Iz1-JM@x`G0T z5r={)e?d2e5H||h>|8~m7yCVu9q4}kB^ngm;tP}62S67{{l06B%3BhUp9BaTHf<1gr^!21O_vX=Dn zQc-Ygbqxw`W288-`vqsGYjunlZ#BN4p91(=ymA$`vc^+Us0-_xH?d_T8Wh~J!iFd) zfEaOf!HmD4p8~XeOcRarNQkXO9L2H{ZEHK>@^wL&1!{;6W6Yi%r2y zd_g}2f7V!B7x?-Gl|^!^(59ga;2v{-;a3F(5F?H*nDH0%Qz)A;lI$zo?sB66{?IpW$}Y&5Nc>{4b&9yYBtwkG2+^ zO3Ujdpr7LlD!>1GHgOQVzmQ96bmJDOv#UkIAVwUEWMZUhfC5x4bWq4-B^Fc^+^Q97 zQ1G2B7j=u~6fzVPK#VvPOpH_wP$)B9cu_$?I9)I?QuQPXD+H(DG)a!VO>c2#+W>_! zvq<|C6oj)#Cj12h6w1sZomEf}&LWxc7YtCiLMjA*U8#+ucP_2AFdIAhp^p|$dZm>$ zOrv+URHvnqXzwih3xyN|^A|9P5u$fC>o1g3AZx**m=gZ));k-hEzCB}3&%EE+%^;k zd=oI4Y@Da6EsSNi;>T#Ts$$@-cEMpdoca$}&~uY~W;dGCht$CsLAKl5+&7$$R2wTS z5{MB(7fP*zaf|C03{c>eojHZtbn82dih^53XAKI2>C*qkoI)1`1rQ?+1?Lb+cYMJB z1y(`VH7O|y`EFZR8Rmh;!rT-wdt>RUS_%g zY39&73#SWayf*z5Qsk}f_N;g4LUnm-+Z{7ix)8~VMWXd979@<@azsNHGGlkYb#BpW zt_v#_x&UIt(FGIvNS)fJs zO&&~EQ<$>9>bf0A(UCSohb~@xK#Rh~!0QRo0h|I``tJo4K#VvPOpH_wP^c5qWMtDB zyBris+l$1qd1T{R2;O?ToZ2Ognk^nh#EK3d5ATz{H3{!Nf?_0EOC#dtWHY zN^?-C*KKS2R^CXh3%%=9IDAhh^yQXElJ=ZS)}RpFyVIqTBQ{Q9nt}p|5r=|_k*Wa- zW!5jOQcw`CUobI7GC(2ZcX?Chb`D)=yy3gu9sI0nT?iZX+vUj3=un4?vu$9Hs@V9GzxJEB2ghBWzvz6`#`d6R zDz~jxPrXN#?~D#J{%Mts-uU8jcE3Yj*!Svpc=z`gqZ37e{&z^o`cltdJ3fV87Tes?`eAP~2J`LuM$avryniu{~l`|0~ z8We`EUUTJ8_#93F3eo}v5F-u+Gya19{n~7iZO*m$s?b4U>b=*_?5b#2QSknVx@~Co z!nwPD-y5buAu};~RqBqboB|{)00j^u4h1v*f_@4e?M2sTG;8CaFd%+NK+P^{i{z8M zaQECt=b`!6Ha&8Bd@l_OLymmCsM6qMPT?iR7zxCPL&1!{pr1n5z=M6izc-9iKvMIC z4{rNGtqcB^pp?lDL|8WztMITHpxV z+&OkrWeaWlpwEu=k9c%+0Zyaq+_oUL+%24B&cDJw$t}_&aLTGw6|yrSbiuU0pnp%> zwXAs@6s&OWP9dND9(D>V)}X)(U%-0jZtMfhB1s@d913Rq1^pB@L#uOLXb9)-6edT? zOKqc3$=F)=7nS5|P*?-a4ivH#6hMqP6wHiN^;39GNnr;oxaKop$Hpf_{gK)*29jRF)-P*Lav6&GG;ba{o}nj;#zutTW} z2Nb#hV#J|f#$V8{3rmy~q|$UDPgaGe0?~m6{oX;#v@FtGC4~|N1rQ?;1rz>)ehP(d z6fAJ=-Y@7IBgy_kF})L5q(XLEAt;#k7s@HzuFQF-D(J2`ACZ=km6M)Y+6I!=h&b6r z;T4M`q9fxanEI5!aN~UT&`N#b2tyt0b7GhO-h#&HZ@G}?x7pacpwVng&wA(#tL#bc zir6Q(zW_z4K^H)b5V~NthNJ-sL!q@f1!zk(g;paEXPjG!F3CGp#e`{4cuYxQIGi%C z4aA5;!PLyQZe4(an+{#Dvc^+U@cyCe``g|ejG)uipwK}{VTOVNh!KZ^8Gk{)MJh82 z?+8x8gukGlLIynh+#)5wxvF32Uy1Y#pP(zW#PcQ%U2wBVUnnSm7;$vLjK83tLYe8p zc?AXGERvagB>fc1rgxV81=fSW7)hkw*|fh3(e#)J$qp*Q|nt^zreh<^kKwf z$ji*icqFa?zZE@3bc@7^jvD>cUzqr+{F*O4vqN4=WydeknlSl%)vyFXd|czljl)Z7 zFG3~TH%I+^v;+qq|EPDzN$XMZx(n8;tH`)cN~uQg#QlY43X23{#OW8DowM#Wo-muI zhXS-dr@)%dnc?Q3;MVFI6naUNBd3s~pa5dTpe@E~27sh}X7E|~EbJct4h`Y_*F zJPJ;eWH7#<$0Fs(W!Ac$Z5dCifr>u7tuFkfJD31XOrPUU8rw|Gh@~C&W zOM?P$cA(HhL4ku8X1_M)5J|V!W`IIz`!BdtaC`POC^Uy=2MW0g3Lr+DF_H|swYIlh3S9+((^SG$=wF6AS6b*DWkV(5(5d=d8#@G)wFl5w?UJf(H) zZq#+}%RBRikHW!GqnB@}Y(YKGoM`mHH`mEsEont^WfN|Zdb(O9E=C-SWM-tQpF%`_ zrLj-!%63qg9$axjg*-Kdz~JF|(?jN>_;v3cifOb@i^7um=MVkn*nc5UK>@^wL&3~Q zRX>HU8_sXLwD1zAfS4|LsdS;n!|&~C_DL_)_raF4uSsLo6!2fi-#WVVdLh?^*$N6E zMjQ%eMymQL#79;e6FMc1Q|NHKZ*GG{1!@Yx^WS;<^`wQU*ZGBmcbrL6Q;;n8M&I>E z*LygHbqWd~Mj#4KlcYDkKxUBi_6uc3;Y+b8nDH0%Q;0r{TPEg_3JlOYw~-g{_gD7| zK^0ccu3UT!b^r42N2kt-)6#{wq)E1J9k?!BR!{&j;^=}Ie?dQmo|VEz{@yv1Q$VXG zeO;?nJ+(!u<$wCewNnaFYWSq7giRjh&xFhuoQV}g`-W=gpY^nnHV86%y z%jgRo^|>-}>ymKnx1PSxfqCoe{`Q|yWZ`xjFhMY<%1`MG1_m)g=z`hx&Ync!34kIf z1?Lb+cYMJB1<(Pm3#{qL{?6{Y;P&im=)$8^jau;Dd6a?zh!IB@O!y0)L}7#A6r9SS z*IzI|A%Z@^;anH&rS%KGJLwDdceZQj!sE0DN#nY3L_q<>h@%T8`~^>Bo_=1V`3*EC)OLrECuh6}VEhZ^m@?pk; zu3wnK-b+*2vB(PNli@gv9kHeTyLm6){V6(M+~&EOcNbvG=sssc@1KhubWpa8AUDX=ytPn3#+veh*xbXHPGX19WfCx{V; zf^&$Z+g~t1;YHS1oI(-HF4ds$d6D8wr%Y*A1EF#=I=DuZ5s!ILQbAT|XP{(=DtW!5|Y zqo5#M?`$HzV1Po|SR~nBD4`gjcNWPane`XSDR_dvkdT%&B0DW5x3r9;gy=5a$;iG2 zGZwPHfX;22`Q@??$!3V!SUO*`JLA zx6V2?|J+WrD(P+OqknE9@rA&}mT4UxufY8U>}rv?7;$=M6aIpJ3fOna40eyA0>X|hbE2m(WLZqyd zfooM1e9m;uy#7peGyzZeZb-Fg4GKXGj|3fCF_%+V3q_WWk;xG8H87by3Adz&ztiPaN7kKky_ev~&WP{R9)6#|j@TCh(!a3ivimu?YdE`- zTcij$W$^{Ly*L)hX^?cs7YtB{gw}>;DuT9DQSf2j8~To}dp@8+!EL4O00jjQBMt>K z{(^p8C^HJ<#in4!U(inh3VCn_ZUl3xAVwStX8Z;H6eMVM-Y+D>xjO}K z+WHI7A=*oaYxE1PpxK!&L|82J94LSofhah;XWjmSehOt{k>rsoa-|@WMKbL#lvD74 z^$STkG`65sN|ibcN!@T_q?Ol1lKq7U|M1zlTZTLr;WL+ZyHbNU4*Z;qXY$?GB7%$Q zBaK7TeBb?a#8tFo!Q=-&on^rrb`>13S|j{k&zKtV%6RTCbflm2 zViw6EMwrSxPJ^V|Uob*p#H9cWXZ=Pr7$%h#abzvVX>D5W6#3)xf|fC3jI0tK`Ff?yPyHxF;xq&4|} z)9~iad!-D^${d&>SEr848fmr36^116$8YpETYN8y+ZNA8Wl|?*3XRoAB94FWQsWCH z?9R6MLG(?}$jDf$Ya9ZxzvGPld6_qeFW@+d_zhAByPC!q8nE|LJ-7q2BVJM+`2EB1 zd!KEMe%jXPI6Bezg_-LD5cclpf1doHLu0byPj4k73hssQ-WhJlbU^|!${CFRw-kn^ z(5Hz9-5m97S(FFICCC(DcSuU1H?%fPG4Q`RD2xCKVQXHzN`BDpS`A~@e3y)C7XJER z;ja&&SL%NKd-$K^wo>+o{^rD*I(`#H0P3}n7A0yUjFQA znF7A@n7k2B8+=sWJ7G*Q4ko+v?3mFD^Zo&@#ohd9MQ!xa!bz{RvWDSka#f$OOKAD7 zd%yXkt%cmxQeFOJ9~dJ^5K&+hxELWQlsZN#r%>wnsf@-*uFp7vXZ%(vWMpNfT9Ziq ze{1LT+?=ez1Bq6+)RUBwWTP!{^C0WOlc`TsUtKYrADKK-2P1$*`|%VS-I1evDRV4^N1{9vA zmMIncH~RhG&C@2JwU0$#Ir#c0>^JGV``X|AE?V_N{g=KzN&E$z9PsS}M;k|86!f!uX!HL)oLt|Et<@-lx^b!x`sRqDwEwguWaThTYDIF1YQo4Q?O! z&TxAnbis7*Y<#CM*ig+uA&R|o?566zr>)yLq2RiwZEvfT#BKl-H1})s&^cApy>mH* z+toX}#tp3Ofx;#1c(eF|fn6~8Y#yI4f*C2*jxY__$Q8-Eex7;3%KZs6l>TBO(S@e) z@WY&H3pi!HGk4b&u{ICY1+!5e1J%x-e8y|bwv+?7%efX`ElD|nHj%T>|FNqo|6AYw z?OMb?eNlS6H7vJ6Ag(@*Ojoo-s85Ce2A`-!s#M_%HRpf#ZEHLC+FH6&z#vAPe!+w; z7^v9BYe-@?UxcdBW4@}Ms(TGd-&p!WJNnAig-Zwpw;Gad6cjXTNP4m^nD7@&)WLwt zY>xE{s#;-g^^v?ENsB$|^9PUm5Q`L_PurdQ3;kUwNSf71Jd}dj-npEDC-}}h+SueQHNC>aHny~5x4Ia_BKc1opXHTy zlJ8p7)^VEwkR6v&xta>%$cQ1MU!awv*oI*!e3K3k4(qCxd%nEDalKB;# zJ~)l0g-I|yextwH;)|#xTj!DVD8)0uhUSqv_P(X8u+OQ8+n5#Bko}vbM(kK*fpbV* z;ZL|@9oy-xt(RXqHXr-0X!rbzb`#M#k`vZ?`BkC|!R(Wqf-)Zo#JK5#2UE}*sX}!x zTm1L*tCp67VInt=Q?Qmo!96!mO#vcNoI)%>VZO6=Zk`8I&|1IHmVG5#{GapV!Xky!HSoxmc27$GcDslIbL1)d?P@+CacU(mgN0dkZ0 zGLNEcH(h}B3rJqPAg^B_ix*NZEZu_n$o0v{3T=zOTu=Ok7vbSoX3ocT=}AncBLzwr zugz&_oU6`n*I9mrwQcFF`SRe@%NlalQtHsY(iv zbpg7-7jX%r3$A{Eoi@6cbj$vNZVF{)kyfyOx~LY(#ShT$FL(}xPsOHS%3sh;p%!Qx zO!O2L!a1MK;}(f5@FYLQh;_yZ8W!oLeEL!DJ2Ttq1-bxY#OW8bR-NDSNL4ol?k{i( z7HtZc`wP8c217kYn&?77_7`R{C~P+G&hi(^DR@GBLH9~qU-sJ5147(6?0mO)-3#R-9y%Zd+ z4;G0v9a(jr%-%UDxV5@QzW`H3j`%_$y#u4b#Rx&ce0-stf(Q5u`fI{~sgU5vG=S&= zjFos`0Ee+!FzB5o@+;i^oHz(>y>ml$D^V?y8Gk`P1+eCv0=BZoQ&DI<{Nw862W@FD zzmNt6SgynS1w|bU3B(9tkxa)I^iu$*mQyG~rBDc=5OUCrhvb(8DU;{Q^t_ zi`p-kiSp>D0Pd8-B7t2|^$T^uUszmIepxki!7Vp$zrrHjQC^#V3cTJ0=mgK%R#B)g z_szripk?&6LW6?aoa$Kx1zxsNn7H!|SCQN}b6(P4H!o8zoA+2YUP_DJg%!1;<&ZY1 z>gI*gvUy`r_x=^m{z%X57|RTs(~xyvUv@7@7&mx0tPYSjFC)?R6U6T zEC6Bsf_N01lXk;#edTBUMkLuv%~mPLrfJzF>etnf1-74RL=#QN57gUYy?9*)8ZFsp_ZD<&V$4378zln+a_so456{AXSCu zwye4>n)9*$+v~ozYfyNWZp+h#Q-Gy-V39zKI26o`RP|FRGhLXW7$bogaVVG>sp_YY zFme5|F$_QU5ICu+0fq8i_-7)YNMeGDL*_)DyOgDy6}#I0*Dcag3~1F z9;xc5P-Yg14UzarRXB@eA`?c^Pk~qd=awme^b$lnRJ!0^`Cr{TyH@@ulY8eBx}aV8 z--Dw(X8Z;H6gtUUpzdD5EfQkQrS6?ul8M(hzpjE_tT(4tRx68!MVc7;{UbrIZ=x1S z_7{pN2I!qZj1U&dw7*bJ!2|pS1N$%3uNBf{WYd{A?1R$}{h8CzUfTW(K1+iCwq3j* zU7X?dWi>^opr!uH=fqQ9RjdB4sta^?Sk=@;XN1XSm}b9aSB0x?49g4rAl0~G2` z>fPy5$q@&I=5#BIVqUe@u?vRxu@NixUfqLEFSgwC^pIi=3W4=MdgN@6!<+&Xu?LF; zV#J|f!e1~zp+4DYWK-9(oWk~f1I}aX6J9C`z7?|TlOJ?-@+k7Zd<_a!sb5!%Q<$mL z1tvxu3MTvo0~G3Ql8XxW=M?O<&MjKk28okG9QEeH?UYuBJq^~s)( zzujsSr|^Z60uv(+1rz>)Cs8O7oPu*wRc~b;0~E@pUy%I;h5>qK5F>;xnDrORDcrXB zf{A=21AA0uhur4h@WqC?C_~4h7t~7ZZooqUP z$Qj@HxaRz^Yctw*LI1Q%Sa*M$eBv*3IsWpG=SDax|39LzNFYWCU7-Gg(;(@t%wvE; z-h{jM_j`4hgF>Ho--lb`3=JQ^h!a)TE5F-u+GyZ~p3MtDz>_2U*g;OZ1_ExhW5}vZCEK*>*Q#;m; z9g6lQy?-x08m&R0*SrsKr+BurFo`dmS5N>k0#R^w&$|5uPoY5k1#e*~nD!USDR@GB zLH|CU(d?0xFgxOGIOl78pqvG6^=;-x@`ExhD_4X*aRN7;6qqt8us`bmbba!ZN=(p( zeELz|FC?)WG2dANG2&PxXXmUtAIZR;w(X$RfkIJf6dH%`tU`WJ&u^Di|M+6D28EqU z3b_gjAVwStX8Z;Hy6}XO0$-Rcx$A7}C3hz^myLp^Bsd`W}CF7{D6Mw0yn3%xUpkwAo?6-l zlGcbgdFK*|7qN?ujF$$}C)P_!Wk<)V!oKi(7`bBaf=06~J?o(}R40yL?|XClS30o^ zouFfvDggDZ2sa0*Dbp7tF^ObW<4QM!^c_Dhhq(Px!Fuz34RUAEGrVNYL!C z|3VKqWwnJtj5rj`cx`FADWpNGb6r4iuA=b%wl@cli$cH29`v`_8WiA@To>}#jX)Pb zj5rj`cx@g;VYb*5%y@13DU?~i@ScK#aQ%WAuT4LNGV2!(D<}xpFPQP#Jcz&*SW!G?pE4z=5F5yOw{BHs&8nd!W@Q_j58*O`(-C7V_S?Ir|{= z&LBpd-r39;iFs{$D0G?8hh!X0;}nWsqVoO( zr|`6b0*DcZf|)Ur2T_fapL~PyjLF=z^Isk_S=vQfvxl#z^`plv%%UNkKule!;{_TLWXHvY{Z) zY$J*R#z-PjxJ@(L|NAkL&=lyLs)?EHsFcji6l+vQUT#X}=nQLOPRg(mg9hfLj3E9) z5^)})q7sSMz$@5Nf5Dd-4nEuMsHd6$zi-BlxIL|}w-2R6z3VsT$7t@MAnI-mN+Wk| z!>;7Lb4xg7bE+UloZi_PYIAsFd>1ZT{P*;`QLoMQI%qQk6nK0YVh)%^$h@#Sg$TJc zVe=MfD62}MK>>oAoI-B}1rQ?+1ruJIehSu{T z*|~~BTRKa$0Lk+m#5>cV00DkZ;cEp25F-u+6aIn$3T4(WTv1REu3s?WFBqUuHWo=9 zsU}kl;4gp}A#}m4zfexW6IR+1Phmio>>Olj1Q&>>5EYjcK}Pm`%WD!}z_HKvne|2I z_Bg8Kr=o^O0#Tc<7gZYEAK}I@7CJ_Im#;9`W(1?sh#8L8^0(6dt5$lp7MIw+i<^JGTr zWV?z&E&tO$uANedQo|=*Z~wNJngYHuV|d8hvDuu$XxDxLgBWorm>H?+rx2I&k-VPJ zK_TjaiSc)}Q&R|z8ohi&Wee(g=0u|pzPYZZAX$9Joo@T<_ng8!1qBcz4h0kO1p^i- z;o$5}pZuHQpfEkS;(`i!YKv6;`*GW&pWBC?syMFaxu$+<3i$fR_jUekft6F(sGtC1 z1ft+HNqQ@J8lcd1!})EO7G82tSeS6`yM^&;U8wQ!d%K!_(hK!{u;uJ)(pU`&e;t48 z=+f(joWcy)1rQ?;1?M!K-j%i@UQy{dRCi>KCLUI)U9BVVJ$cJ=pKDKijAc z9rd{~aqE(B?6;o2(1CgD>;CqiQ6wkIExy2~m6*Q(V#KjXPJ^U7zF>d?v_7Z6j5*nV z!JUFzt7}krltmzTzwnfzUjQ-UP%z;y7@)x81<*_oJIhy52$(Cs<{`Gt^C=AqEtt2> zDJ)P>05RfFFySv4pul2i;anH&rCB6jwwW!W8w?M(YfyNc+O9NC;X?%l5F-!;@P1-9@zqIz~H!iW(G{4RcWVRzU&8h(p1IzhHm@EC=VhfU42nT1~;9 z?lj*7eM$GW?WIAXE$ipGE?iSk5N_4EiTHxYP>@Heg%kt$3nEc4>o1g3@Pzn6_pH>? zodx14bnjw|Ns5ad|ZWJtVuA(ry&zaEs=c3DL4g2+&utI}EXC;L~b|cUQ5F-u+6JDDE3T0-I z>ZGf!tsAAVo57KH^N zzqXv6%qi?pPyjIkQE<9#dNW}RQ1D&y!-s8N>&7YALo7>LU!0bpq7b}%UBJnP0ccyl z?NaFJQyLU}|M;*t`JaxQ!f^!!5F-u+6JsO;6#O5S_a6C$Q`k;>=cel3xyF|-;*c-D zMEeJKescC=iv|UsAs4z9&0Yr-A}m&l0r~|HBM=2=_pCP)#sGz?9p01oS>qH?;J#6( zudGBWU9fIjH9Ff8hJGC0f85yVNP~j+tcAsSSN^6H$jr76a-{%bgrH!0W?TPAwVZ;S zmckcRcI<7n_BNdflarM@FnyRcY_NMx9$A#tn$WFFBJmfPt?;5NZ9CB?)=P?IN50Zl zg0+HD0{cDo{YZXoL1$@<{{V(Hp{RuYo!s?d_Kx=pk#Ndpwn2;#xR!{&j;!rT-FX*RGR=N;jK@a6hL-H1%A9H^Jo_=PL9Aa!S-6IlW;<_Y;H*Ff;yhV7^CauZ; z<+r_3hGk_A%#dq4MW+u=v)ag#VW}(oSKR1tw)i4?k*)JcdX(bXXIiyv(k2{R*-6jn z81ltSf2qAT6aIn`3csHob@=Z~4hjw4IPh~ao~fp=Ch+^-iPh2GVN*Z7P;b5l1>YY7 zCO4{3g;Pjl-=9+eF~U%APO0k7gfT$D&(~+zyq6L<1-z}tJ%O|Hyi^owkDGex%9}gT zrasSI^j?>*LBW5^Z?n>J)^ZAv!~qnz7-1-w@Y+0y!ZL*}2uHz$*Jgl%@B1e+rbf(l z=t4hYRAN3->q5xU|8!mR{#vyD!nirlrUh!~LO}Jv*|}SWa9#LVL4k`AMi)$YZ3Zat zhZK6}+h>tZDkyLaHD>qg*-lDW26?X6Eac;4D6q!7{@S>US2o) zn=N)Pz04NNGN7a+_Nm9)gp(O-aAIzGjMTX|%xr6ok%HNsZLutlSX%W$oY6lo^9D29 zI8GwpQVL;rqchv}*n6oVI~E~0uLDPzug2c}{LhmgbZAUg{OPT2F!$n4Z*9H&(y{sE zu25-)TBP1qDTdvEQIJ54at6agDU=%JDW_1Xo_L}z3{9ba4-b7hDycF>$8ia=E(Ea0 zl~LF2IyI=mLnjLv*2>f+zF~DZ}I`08BcEtX%iX!lbi`BLPn<&ncj~05LPJA4OLB zKzre2c9i&eOS-DC2P$O0$L(mmVHH}-&dFV2UWDrc1S~)oK+GMY3*{6%Ko>@2r{v_y zGkV(EfV)#&sK%aOstbYaJ>OlMNB{9m_&@5Oe{=+!?x1PQmLo>4H|~d@*~lY_VU_H>K@SC8cMi=j8R5JqFF$Z7C)$hCH>r z#H^e-UqB<6dvGS*+bA0c)8fIsxVyuz#ZB0na+D?yjhOzd>jDl7N)S)$6e`hAv*kG&CAhCN^lILhPKB9 ze^=C(P{4y}1@4O6B6U$v05L*PFzdCIQy^=EZ_f;d35yhwk}=>$%g!S(Q3b11(?u8R z(4c@7hkkguH>payecyod*xJVnhtOw#0d7$9|JXYd_!_SLfv1bsE3eH;V!a^ku;(x+N-Eg)f6o)Dq32UN)-<+Zt&FJw5X*mX;BoF+Pl2I|Cw`s z=ibbniJCd`dH4LA`@Bx(X72oQ&v$;?S$=0zk4w|)NFFu!_m25<20Fc_F8&{0xihJ* zwd#bG=+>ag$^WhvkxV(~{OP#KNq5MPRo8L^Cv?W#w zC3~C)pxn44p3R=k$86VF$)$`!3;IEbR6&e56gc`+LyYgHnob)_PNPSAY~;Mlwx_bc zyw5&#OW9;QW0T}@x`(pwcB$FIouS#4008%?_EJ#*F+xz__0AO(T*5mW-!-q?_OxZw zR_Q!d-92qxbbNs~UogJ^f@A|rR7{VB7J9T-C4t728q)j$k@TW-7OP2*$i`t|1=ufi zrJrQ^LT@;w-q}Xa{uUOgg2H{XNF3hTM1|+Umrgt|d(1c~0dnVO*LLtev`brOyPkB- z^VsMbXjIzfxDWdVNp(pYu?Y?9csr-(!6P_Qy|Tu(ph|!*(}g}NT>vqE4_z=`;kkl> z62sePNZyape-m}{Xcg39QYh)wJ7A;cKT%W3)3YCWp-rT$Et0%Rk9H@tpOk#Y^He1$ znaXql5)hg%NFe5Kp$iohT){7xsLV5)nr|6KbqXzTJ{^ws>V-#!EPU~wPov+~`?UB_ zij_R*3;o&Y(I?K>vT%%4x?&s7+7jsvAa@2ae+ylxpx_F+z$U;LsE_3S@Z;6}ZvQGl zi3D5Em2;~UpDNO<{jWBA^ZG%dmC(YNT8|v;mM1w?WWau*`Wvsj^y1Pb%r7LB)&&W~ z{4I2$f`Uuvg7FnqGT47ugjpB_=gzCnJ?MA?I;;$9whWRyA(w_VpV%+7frlS@^M;nz z1sTNrJ#?Xhf(wkbnV7Tfaol}K^jFv9^LLK?=lVt@x6Tc2cyXL|U0a-R&RtykgDIlx_Di)$BAFSssU?jX^a#CV${0O-Z5vp zecMuN*P=4Vl4Wgn{kq%lLZhn^tqYCbOOA3VRYFti+M@5R8VMb^FKZ5li8-0XF&sDPpUV1Z6M;9zs@)4#B!|4rx0*Dbu7w)>ckQzOr3p&@Cpa7G% z7zNsNINo!n;ADYxDAZ9?n5LotV#J}Kx4IDK*n~zWlJ7<+l)eu7A52gvH(hv7ML{@S zxZCQ&=!vB$I82h1PrtGW3gzY(cB?1|=biPck*uU&DKvUL`GLkr4mWNew=}-4t$ZvJ zu3qSFA%80P1(7ULnR75ID6kqCnq0ya^992zs-WLNhFv%d=@ab6W{$~hU7PRPnRnLC z{1uIBo#9>i{8Y&gdNd}kY`*>3=?8GW@SK%C{7@^b5jk@MT>vrScxQ*9(WzeeSNVcr z3J{6fDL~Atp#XEZk-}g~?;;%v6Vw!*QBeRf;!x0uKxNnF$@V|~!4O5_LpqpJ6Sf47)Wp!92vU+3%8uRic}3#2m#LE7o-9>ccxG$|EI_Ee|iGF(csw6LBGc8P)M_qk1`6M(;EQ=5F-wS zyVb#nUO>JZjZ}k_IUMB0+D=M0OabQJ*>xe2HlEfmkZ!zxA*KETuDPH?;dv|hD5G$W z-Uujw7=b7_+%sF5%;vBEb-rMjLixlA(GwzEE0$jhk~P%PN#a|UyUyq zr63j4#$pr-E%aPNp#f0n)i)Z0IIctCDJ%IXqmV{#L@6*a;!xnq+Kf_Qy9_f5l7%*& zh63afXk_En@2`9NfDVP`R`O9sVLH7L=z=Fb6Nds<)@GCfdq^3DLJMs!4F$uxu$zn_>%8*rg)Plzp*KjZlpxhqPG5Ns zO|PXCO4@_-1(+|uEE0?~gLeio;#ee}NYyw6XnjV3wz-=d>zT4saB6iO3ef+@D2$-D z0tz5T911*i{y*#55|DTk#%kDbabHsG&_uVz7MC=I}4XP^F*pHL}9Pk6nMrLj8lO8 zz;2O(%FqQeSGfAqh!!oxmEAPnxuIGY&Z{VZ7;*dpPrhKB0;{LWVkBrTjbEruF`(J) z6qA&vL!n+N3QE2ZOU}VN>(*0s(V6qy`9cK+xBq>)`UMjdmO(`} zR>`vst#4tkRt4#n1n;9sUJnl)KVpwgB~KqxE~X2MRAWl}1qsB6;}= z6UIcH?J2m%dD}>vH1_(&ZcF#spxU{crrPp6`<2i z@+Z#<$;Z`5#x;8!?>=d-@T{(O4r0Xd3p|mk@tX6{`iug7j<9!jt~u}2>N*tC)pfQr zRDJ=(h(m!VQgtB;uZT^7CsH*|VbaRq@kXAZOczl9J!z?-|!#r^gE z`Ng>e9bL#)_K8k#XOSu_#RKmQV#Lt}o=DX=g>th<2gKF|j`0N(-Z@>_89QPV(*;{u zdyzy>Q#N9liuPVyoL0%LosKRfo$iSBXa&=SpHvh;j5xZ$lP?(81=tCOQ7H7NrCC8dw_jj7wbAby)D7{JiEmJHnhAy>joJJ?P>)?hijVqFC}+vv=O54(-r+ z|HD7$e~K%4O1_OgZE?Bx5oVFpJHmh%A#{Ove8B{TfL=S3yig3IQ1-q&QDa6n+vj8j6#V-2@H_PAAVz@>c)}_Y3B-s)fg@`(L81Qi!I@vxy~Zfm{ARrn7*NHk z*&WIKlE0MI^;h&=(3$xW|0&R+P^007Do-@p!YGVVd1nwK4h4>^%>;#Vvq-a46oj)# z99f$Q3gu>zR;efmXOTFvHWL)ser@2LZC;HBy;HMtzQ!VH_G{C4XQ%zz4yq{V?$_qZ zqyHTFf*A__&Bg}5w#)7p>XLGti5d#-TgEnheR3K)x&DL6IWb7jFU&gs(As}pu;&YT z1Owy?^{E&k`~q*jP(k6ojW6)z3&!^@9P-5S*PiuXAr1Xk?~n)ASGCocP^GrCi^`%jE3S%3uv;NZ5O+%sjZK>UDGK5 z3h{BLURZu7ic#pHq5xvVp}>q zJ?=Ub5|(v6x3{)8qmZeh0Aj?Uz>_Z+r!Zvv>z~EH9BQZF^==a&Kwsp&6J+*$J z`ixd{X1>%K?Yy*e>~{IM4u#%-y!KSvnFWl(hbjsnMj#3flf+gb%g@rU6#5tSR88zG z+&}Aw!Y0Rk?G&aCZ&!QLb{z_~4(Had{Sy6q!=bmgTHEPS2;6vlRH2noIHaNgV#J}q zlP?(8g@Je%m;5gr6oy8Rs8*-DmV$4@z76mAA4mI||CHU{Z<7v%IJ~pWoqd#oGQN;c zFhITlVuYZ;oi9{SaE0*&fMUa#JZ0bmQ2KTuL2#G&AD&W7tFg&3#s0ZEns6B+hj%aNP+&n3 zthA-mR9USs5F-u+o_xVLg#80R2M*uI23q#wvAJW zrj5n?!VXyLDLd;zJD@O>Eb=_7qYK}vDSV-#0Aj?Uz%d`mghc}L%_tNW)5g+w4SO73PYgP6X{X1(4&Sz7%@Si=!FdrzVX|U zsyY-{F=4uEUWj`Exf9J7WDp|+1@3&oxJ9ae)7Ik%rN> zV-#4GDy=RISn$&3;7aJC0%1%z|}3Lr)tUEmsDa1mWl#usb^1Na4z zbb&ixFs=*bW08cWz#Xa5tSxO6&KSmIWTv->YOEv(_E$*HZc>~@u1SqWh>|Z%CG(CJ z$P>uwL7Vhy)_ZtmvsDhG*T}EZqg4C*jn9_UTZ~G!ZwWhhvP7zR=F`4Uzq}q5ue)Zs zvkLb>%1LAkw*@R;fDr}I1rQ^SMRGW2vpw4`K_Q#s6O{sg&$dfY$P=3aPrl$n7HO^E z6dWeWaK7L|6xg5-?MD*MFYx3GE=1v~*t)=zFBqo)u@Q@rXw%`|Jm(n6DJIg1krHI3 zMuUySNJ^wyOzs8V8N>(?BXQ>o6%<@xK2lgxMn;k)EPYH)QpWgnOI&u+sL{hxvXe&R z{2?AE4`E?(ICqe%(nm zaO4XnD6lyf&`fNsO+%p$S<^ENC50(P!oqbZz$^_$VUCIdh!KYZN50@n6h0Q5g86*G z1O*s_w)+JOZ9I)G!25`*M5>N1w1sAexp{}-l==lW)EyepDa< zzuM~SrAcR{o^QprtkYqlt;y02pC6oIm70=#;DB_BID$l})~tvvgIXgr;K6^_JX?2# zRQp9`LFZXC*y~DBrCt~C#H#(aWw#E4^&91|oB@9%7aLhpwA9@;J4=KP`I7_#T!R1*jJtRQBeRf;!xnp7fk3v zm9K}4-8Fzwu$4ujR!5%=qkmeD`u(Ts=@XB4(xLF@t2^8J9}QyOd9I2=cPd643OxCO zaSDSgKmTg-u@XiB?Y_2rS=uqA(FOmKZU4LyI2&aoKj51mwo8Y?&#%|5+Nv<0QCO#< z0Ad89z>zN)r%-Nw;fRU?h!KYZ$M}K?ztHXJ&y&~u*UEIkb~I2auw&Ecg74N7FAmxG z5$e9JUgY4Ie623X?$espkJ-GG>B2P?1rQ?;1&4b!x_-d~h4_$>uPyZQW)x6aF;bn; zlaGCKBNq*6P;F|%+(0b_=}zzF|M>G|`+8>&nyAsZA?m5Z+Y zV}d-WC|`$ylSO({MFGT!LxCe}GeIGQ_< z!Uh!u5F-!;he>IOrGQ7@L^o5L4DS8X3iM}*La-0sCX59R7uq*yEY zD6>ev(;IGMu{wmp4(o4ggYO>)nT zUHI$nCdl`|xQn+|BD4Wk-qwH~Zojc7F0Xze0j*643f$P*CRLAkV8^pxy@m2)mp&0T zc>(U(_L(|4(=GKRvq-E&4DHzlF+%79ch9zQ3Lbe!mv0{Os+|I*5u~BuyY=-`3$E@& ztKvVjbo_Ob4uxu!cU~`UTZK_bqNri44aA5;fg@iqp$i^W=UPt8>(3~3ohnZ~eJI#X zOW~o2qG?IZ(ehpms~6(^7qq%i?bS!d*(!Br6kb$Qpklld8-fDVP~9^wC4a(EP>pyUfh zZu!4tK7}L#Du3VtaPSOKoKfed5XZLOA_dh9f=0 z-=!10A4`vt7a5aliGHNxn$G9=uF&_vEK&&lAoO6s?S;?KN=&`gEUmKqA4 zGMjQ$}`GRo@@W?VKUL&4)a<#h^uU8XLuWg|dg zvWfzT5r+a#zF?d}x#_|Z6$RmRfn$^>);NVw+E{j7KydEt7d-2c7dk;_QtDWwR?zIA z3pO~VeX1Zv99`ha+Kf|(gjNT?!0KRVED|izL?!fk9SY5$*?~eaoKgxPMjQ$}`GRo@ zVYIRAy5J7y8eRBVd0jyue%@d>W1>4%N+RFN<6+0QmvNn+?>xwuzcZZdIPEp zb}_VuYc__a*4)f?v+UF}5bSasHHBT;DGN`7 z=t-aO2ppo9{j#sLjp=LYOM15T)-M#(n}tTsB0u!$)-BRf`Z`2^FQpF|lW~{v1u06# ze~Ii*uO{OQ0rY3N5k1;_w(GT~DG*|LCQd>GwTSh08(`k8* zyE5#iC^eXf0hT*W1$7knJ$c`=Tc)buJAV6H|NrA--#=vCR0{)!2i$} zkF0rja;*}4*V1#g@#!=4gJ6+Bj1am&ymM)Lp9pQzgdRix(k~dMz;;sw3ij27&J>!G z@#X{QWS|Fb_eZA#E3&d$KK2LY>`}qLSGB(0uhh`zh9`J;0pOd z(kLbEk#N$Gnd4mdA15(Ucsi1W)xJ{vf>c5c2U`Qp@&zdo-UrJh1=4dwHWL0OouxyF zx(6%1YXd8}gjpo`0M!L1MjVU83r!6tG{IFDwOa zzfeKJ?LPU1()~k-K2U5g;J@lelGD=Dvd0WjMi_MGB*_s`5!izJ(7Td+A%jeu$dYnN z55=Csnq=#*1Qr9aYo&nazgPA}LcNAOc=`85xl%JaUlpY)y-8D+;k){-Q1%RK%=|)3 zXDkxOg=*K8DXgtnzVMcc z0*Dbp7kK?b1qD1l^*5DYvT3D0Ej*05RfF;PDHtq6;`*cw0q5BwgV43l$XZmtWw>7ebQKhu*EAYKVm0 zf<=be62vbAY`)p|lcI@IK(C!iUMQyPu;4rSdClF}PQp@Syi+0Gu2AxrRM%Q{!b)^@ z`TXPitGY=ZQDa6n+vj5mlH_}%u79(!_T7l8g8iaM58S% zUs$N30AhsD1zx{ULBSRBg^<+D^pw##DcPCnsyspQ2FfcWyn7V(3-#z@O8mmWmtI_& z|AnuV<{LM2;TK12n+L|cR#3$zb*A%=q~}Q9kSzH|?A!2;|8cah`A^yH{WeK8qv}hS z^9Q3d9bX<`8555ELR@vf+jsWS-I1^mnBWTI&LBnzUEu9UGC?8PU(P)5yTVSP`?LNZ zMrLa%)Og@OF;{2*3mtzkWag6(U(lftJ+4pVbyoWhlBx>N5{MCp0*_xXt_!K56N3&v zlFuk?KYYCJp1rNyG`djJr`FFqvUi~GpPkUYUfbh36e7m1O@5^P5#|>bsr&+n5rP7@ zU#Otq3i$%=LCR4kBt@o;a+;z_{Q}u4jLmLQ{DRCXFhGYxA)=2ko69Qirsq+P3!Ltt(*d#iQ zE`*Xte*hXkqw19(16t`&*k6hQ?nhdz(ghGB1O;xtP(k5-`GwN!)hzUZl8Wi^uhzAN zq^4(PrzMwFX4?{ivjuFyz3JVEUl>V$mWR=!edavVkt}%Mv(4Be=~q{x8*?H8=0pTa z9s?G9SU946neoat&ap^#G$~`n`c}X(xKIvE+oRahQbg9!#;HD8)eq^CLIb+x?rU@ z0$l(x;!xnRNYpPVv8wJ=n2?^`q&N$kS3@jPHtx3G)Z?-YN7{6_HwMZ|$*`@Fq50!NHwf�+0L{eK@MtJ> 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 z

m46zcupK+Dg5f)1^1 z@kh;xb^{7&3m;SS%Ww*7H55RML=*)2NaiV2nl9|rP>@a+MEXePDO8$w{#HXlI`1s9 zPSsN=kbP~}q@^IdPPK}H2js!%ojztvx~+FkQDOR+i8;0u_c|E8d#9))+dQqNIX9ESBX{i#4?m1xC~(SRXAmQgcNT~j zEKmR8MA&jked}und0L#E=a>cYkZcM6?4&5G3w&))6M zyt}*MT<#ZOWh(0?gwxiXlY{kNbCV2L;d z)^sG#w!1}gvp@zEt_^7WkH4R`a|#X(1rQ?-1%Z)m3ltJ-ewi_T?+{MGF??e3=N-@4 zbrkB~=l@Q@+0E#|f7d$k^}XE&bOKxP zMk~&{^k^|Wcorz6q}>xdu4p!=u)9Kw)HvbuU)KMH(i;tp34U~k0fpbYs;QN{CB#QHEmALyE`S&* zbV0Pfvjqyhpp}7wqaq4*Hq#e6w0LvVpZ+nyfWm!j)Rj}n(@+30@=y>MQ?)<=S|7ua zH67_Ax$A=4vu{8Fc71XRb2Sv;_VQ2=h!;GG!g|RmSdSMhP>5lT#dX0^kNO9@UKiTX z7y5!$7#?Jx3tgFK;kxj?h60F@M;8R*1q&2d&fq1Sf^+`B-6FwU9Qx(M`r|&VpJzaU zU6IKt{7XXt#7IQJdc0tPLbSGz>IG>ovwuO^$%>hG<+BKUHagg6aK!idzv!s#HSHn=pDK? z+ku1V$oEKGZ~WKiUweEIdUH^C*p^P@{q`Y$IBK0on;(29B7EF_GQZ$IZECJp)-moE zhA<(p1_Q)Mp$nq%f&~hGt4_QZxh$DeK;Fek%YNS%uA>mVc2mHQEd$W5VY`*kGp7wG z_+5RkEbZ@JoWghw1rQ?-1%Y_MlPEkdHwA%s!2*SVF0K15eksqin3&tHCURYPT|)uH$fFAaYql*=0Dr(Ku%`3U`vo^Y zU_im&>w&Yj7uItMA89Cn79OP^dHMuMz0u@sxrZFR3sn?uS-c>SnI|bf zw{S!@sWLyRU3?35wUgT`DLFBP#0xfNvg!On9Q$2ik*-%M9F^|c_c7$1bY?H~r}NLL zd^r`lYa4b2w@8U_%3@~_BZV%AR)p~+3J=Rop?pZy^!^1;qA*cz3L;UPd5hGSHI~yN z+2CAfk?7q1C+K&!-UaI|QaCg_?EPO1r_3UO7#?ibSF+?|5ocJ;Lb zou@Po8Bk~o%?=bkfm22S#K=QIBwjF2q0+qbX$=MGytB)`1hexC7W_ixSR^%Gm`5?d z?7vJFNjP3GuM1Ta)ZRSraF_32C=Z=YuSZJFr*jKMV{&s01BTROoYK>#)Mv&*jTfSP z7tsj>eq?_ku@4N1Mg^DAw{W8iQ)eAJ`54-;`Oyh`ix0Vg~HoE=FEy(#3?8~N4+x=4jWK7_K$vVzP%A`{&mX2$Fl;B zDAW&JP`G0>r?6B@0mMi{L12Et0)>FSG`X;o!hJOPmtAL(nk6qQEQxN7K0Z3P<@9l0 z1{D0Js!2hUIfacH3S5jl6v|DK+5OHIDAe)u9lLl=l9NK+gN~q_Y|dT#P&v$~#GB;{^*8 ze6Oeva0u50Jgn92wPLsH{eo>lwI(5lXQMY7PWWozVPv2S0mq0^C7z(VpvDUhih=i$ zK#U9&MB@d?C`3kvN3`h@-my(YhsemJob=%%GIBLz@l2h(ysr1R=r~rNFFGF4k1PGy zRS!g}+katjYhX+)>7rNs(#H$en_q}yE1}um|MHt+_7CvFIT=M`t~0-Y;}vp|62ktS zbbcX>{jRiPN9Q`#Ch&e+cErB463l#beA(g0auZHtzjfW7TGwqFx{z>YXP33t%2zpY zztD_b2(dGW(Z&m&OrhK$>7%x|68haJ1=r8PSez$Ofblz7DU^4S%I6p0NsW$U{Xa^< z^>caf#Cnh}XlqnSrwc|=TNl>K(Q!M^Vr`lP-w}n?=jbU8cV<3gw^U*-tG{s5I~V zk%oeF7RhLSVI5G2XA2!D1((lZ2m8AP3N6@`PF=9Uxw|g-?rQb@u2v_}sn*lyZ3;jJ zx&R}!&UnF2?*tYJ#7LnF6~+ry6e^4*JTYE)Bt1v16ULW^rK@Q@Q=M}SI6g^@7kKJ% zHS>Q0Jo`!PsEZd0*!!4gJAXB+q<8nAtyrxiNq*3#0A>H+n(AGL+382QUue!Q1YH0z zQs}}B*CX99UNB7|o;8+p4F-a9Zjm^J#?&HxkJh){J#NOqc?J~H?DSGj0cM(k0*H}^ zLb=nm5HFaf5Dl%)b-@AW?i3pN|1ymHpvA+szW+n)1Op0Lc6uqNFq+*6D1aDwC>X>6 z%1y@$rYR&ts{;jWgL8KZO(zfhVDi9yXv;Iz3QAwiGNACFonFc*6tf!v1rQ?-1=l#h z!M=)e)A5373Q)MkX_3l6qC16#Y8UDIU1 z)B_2e0@tcEcpr2ED;w0;YlxOQAG6hfLa?1)!gT@qra%G2$U~vrEm-KOdJct07)Dts z2=!D=Q}Bal9&}-k4?E}2y3-=Hr@F8KJ#+0%@>9(J?qZQb?DSHu3p3e`fC7k-M;DA% z&foNys%Z+aQ;PeAJ>C^i=tTX(0K^6^<{411X(@c7p#Wm!p&-;pGED(;VsHwjc@

(5%7mm=cOXLcbtB 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�Uc%{SLXKQ(@G+tmSi8Wd{w?^$#2{R26LkqW;6 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 z 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

^2PzC@us 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 *K*;$qbsiB1qf`>Lq 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

=SY|fl!CSv+(*K6-1GbK^_`!h(8_f| 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 z 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�ne-0)$E^MWa_Ehsvbq={fWxv~v583m`Ih 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

z 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

U@nXl6<^tOTB{+aUHWrYKwof0xfdKC}GTB zpl}um`AR(;X;!vuvwfk8=n1rdk3wKYg6?%%D7h3&N6v#Y2Awhn3KPWK(h59S`yMi_ zQqjn-w;~0P_(Pxo!-NP0voYJWP)ruKNP(t{pQ9#dt)A+u7ZDHjSS@0` z%_zkA`JW(#1kr(@fZc}%1@qCuP)`!;N@^7HfCA)6(aP#k=l7K-JYxG$wrn#BxE;fj zZBm>9b{`THEX1k4ua+D<;iu4Q6yT$*MGLq2@(#9*e?gw+k&;KLWHSm8v-vY`)Ixf3 z3fO&UP%s}Mxqy3bc2Q_G3UZw417cFCd+EO)tn=DxD%tD_#tiXX5GiDeKY(~7=sqMU zScuKTn)A?V6#l5@yi|jpQMgibK1k*NU^VAU>NS#usIdEDo}Kva$SD+Bje;DT7t^5q z{M*aiPIh-VT)62s7nN*Ap~tkp)%>nuCDcN;ZbgFbLqiMZx=bYjcu=~)UU_Kt{K`~hhv>F9D9x1%p0NsZMg&QayDWKCruy~}Bx-VFW!2r)Co|=bRFvMWQK@0}3 z%Kb^?LonD= z;!!}u^|oPm#*k#t0(2h|6fF4KD%S8mH|=k=ywGYCx`ozP#an{%?X635Ib51^Zes?eQdnp8~Bx z3+VBzO!ui@WC1T0c9cpsqcFI>gK$xsV<&R9t$n`t5Xj2cMX1h0|OIRt!y0o^--f?X|Gps*4$ zXOTulo=Tf;sMyww#mlgu88S8E*83kGxhn{TC?4>tp4TSs7Yd7MfxMz5=JDZEhqb)ta2`SMG@q|X*PSBH(U)^`m!`?AycOX=-v?&Y-_|gGDMYh>o&;sEYfI{$S;Tv;Bva1F2(Zcuy8(Y+ZAzBzKFeLGZ zdfl{&3}7=Yh*`(eR54K=ygYdvi7ObQJX@yl0O|huE%(e@m_j9+X~CV+ z^9f(KHn1;9b@QNmM^Lc4FIb42A9UiYn-)yULJG8e`9&YK_0cMv`_3azFEIdVQ~6@QVh!+)9i z-iib&+3YzI1iPRX^iT7kdq+^Ps|5=bynMM&Knej71nh@egb&bO{0Bp6#CHAy?|&c& zh1UF?8JZSyifaLeaRddsTCkA6FptlbOMw=(V60yF@PHFFZ+o7c%cwi3*YsTK*4u1f z=^8MJ*VzNGhdYta)+cTC#nJuj5O#il}6>eIa7PwV=x) z!3QFapkP}I<|(v;^&co;oT`z6zH%ouQn*sdQ|t@6XR0uaBPiI_f`yE#Dqo*o^V^Zp zUT8Hf$Qe~lZ|Pm;_s@6Hu=OW9E)TzhN;dPgRcOR}LM=eiDp8pSyLSWyyIQb7q2ly0 zi=OIo5T|Kd(>aN8$FhtyBpZ6)-#l$t9J#de&0fz=-yeiR^w+#6ZC^;^Digc27l+Z+ zkZhEw<+U|RyjJeowSMPId5sU`OZkYmN*AH-W=-oSB~XtrloaaicLW!kdI+y3KtRY!qDVWY8$rB%0e6o#NFl3Qb<~1XG z5;et;eNo9~TBzgaUBSM9w|{WI0Kc9}7O#eQ!dn1Cx%W^pZG_aUJL3(>;0PR>&cCs1fL3UbVL_+6E^=DyR1oUD+- z{+C82n^7pAKeu_OovV?8Uq=DD4-E?DqlL!}+*NkMtGg()8U;C8xbpZR)1JwAh@7i> zZgaVBlBi@e3f-Rmt$$ni*(8@#on(ZBnUf#sS$dr_G}C7bQeza9F=*DEjO z!0wEAP3o#fz@foMkY82#1n8;TAMLy)AFu7E+8HHA&C#0Z{gn{luf`SF_ zKg48XY&KFb#$aqHlfI$MU~-|TQk%cu6rgUs%~qroKVO580+z)PD-sM75)>@>og>!{ z-FBh*dI~L4F!-G-S5z98Yfs3op}V`s4k=9~n`t5ZRFf}O3_gSu@Ig1HfZc}%1@j)y zj$#v4phXG>k7vXd_4O_}$=96%D%ng6@TW*Y?{|joLxO?@Ut2_vcSk<<>o;C#H43uF zvs$w!HfL;qk-RnM(WWOV=TgZw){q2`r`Vmbdx=8xE55eoX`=?;KWxZY;roLB7oQN9 z>sr6_r3#<6FZB|CyV70!m9_KQu2n;F8x$Q40pYb6p-4 zww4ID^F%7yObazN3OvU%fkVK0s%~L9f`WZ5n594q#q=PBe2=gV6r>X)gHVX`^FP(J z0H(NKDCEDBvI}p}70I?1%zOW%#Pnc&JWUIE@N@M3S5XTvG?-7Gfq%O3sY_o3V54_*GSpCXP^MXID&#*EjTR( z@kn8>?_PMKWfD13 zZSPMxTUZ4Kz0IC%$2|38{QM&~GYb3~$Sg~}@ zAJ&jGQjls$h8GmqLeLtLH|UCF_ZrDU^}>5D|7-Msi?2~=H7!U{VdU2yxnEXUn@6T? ztUbbYe}Zf?ElgUvuU@McPofsYg{mv1OK-MWWA~w<1@p0atq-^S$Fj}e;xv&4y}Q41 z@)lzaNq5h}yjf4ClG(p?zWyX?F)s)wE)97f`V-=n2*i7Uo77W zw5SC`Y+kZ>AMuNpN;bQ9-YI^ATF3!YJk5jd9YMkNzF?k$ND6Zy1*L0IMA0Y`<3;&W+wr|kg*|rwUQy2lCeV~!= z0b7n!4LjKNpIcuUPQ)kN738dQxmK9y2($phgoYN($EnWb&m9&k&}#bv)&zh+B3k+T z4daTczd(xK-`xI(uZv`x?F)lr)vgxfz924C(Z2xQJA#63EtsbOwIh)N6}BHsCSbIf zTr)BVg%MgMPrfhc>TF}7P)AU(yDwOX7KQ>k3bd#NL$olgR76y<%Ak_Xw9p)uAh>si zr3+Rh=-v?&>}tURg)lL9NFhH#*aiv}`7_nVq&GkJr7ZP`_aPNV0bI*?zo4%z48u5r zf^99BuOZnve)3P9-@0Po7`hoEDh3yxpTW_=7 zxvO7HySPS@YDhx&j-X(7U$8&{N^Bwp&EGs5=sYc2xn^V#3Y|3yLJQ)y4X#v!R`R?- zpJ3SD7c$09$jlf#ahNB5^ysmp8m83YtAqA`X~|u>vrlbhF|*#}wyEUQ#_Z2mZA!-$ zwP461iK>{Fy3t9}-%ykjvw~wOskw z^S|OW5%-+5WxwuBFi?nIuxZ^uUn#PzbEUuSX`3B{Liy+BO@DmFOWM9r$XUZR5)9)A z3bwUiK9`3IT`16^77V#OVNf4QtTQeu*@k;(1%t$de*wC81O>bMLYjFBUOffs0lO8n zX`-cJ->I(yXstv6%7>)WFe**#|7hd;+HmTi_c67hYsdNM1cpvGWmsXbf^*u5ht*wums3Ndr} z+~G7SbzW9)ru~Xcp>FM0T^$ZDCg1m1KKR#${%ca;*GQ2bj!$U8i^J$@NH%Gz<+U|w zTC7fF%Gk*s-`EMmJW4a(hwECu^QDN?3t!6P{LQxV+S*;ShGe1m*Z5NE@^7wVUfbQG zX9ZeK3pL>9@BZ~^%O{P3h2HF2@2*T=jqD$b84*}Y&9*wM_G%UZw61cr$*d*|HC79QORZ$qWB?V ztx*f<#VKI-p+UiX%=X|4FKvBj*E$NVMnSG2*>(WOMb_mmO`H1eek$4Q3C8G7JO6R& zh1ZZmrj7!19}*NSL<`sKzI|{6=}e*3C>Ub4QzkuF|Gil9pE~`wog0u%!}K{!cOyiBQlFlffcL#3r&+3lds5*=3N`~ zx#I$rY(}9!gSj$y2U38I1)d{8_n|?-e1v3M@sU-aMGCkdU}Z?!9>1zL@Q9Ge&6?j7fOBL(YUP|0Q#;DH@d$kS1P z?n8ru`KYiy!sDqxt5IkzCQ+FpS{hwYVf0O_KOr0Zdo%8AmL=Pa!eH(!U5*qAbQGZb zkf2~b9*O#4mZ3!oG)??mfzx)hY9wNt_(irE1$bdY^H_AumpjxP49PxVM0O+7JO}PaR`YQT5Uy=eQlL0jCUn^?;_79Wze*L z_o0%_Jf5)=m#sR~{Q|B?)r;>7*u9=Y)5e;wt!d+H`O~iTJ71?Id?a6|4|uEe5CdDP zA$e_ITb}6I*Ga6e*U{HjTlB0zt5J}BZDIQ=(|wf{@>Q8?L)npSRI-^C@WUU}*9P5( z2nEx=woX6+S_1|2wN>X2FrFc+&mLH|_mNC0*^I(qKko{(Kt0?-UmJ8EA{0#f+Ta$K zLW>j(zP9R6H!nj>E|qLX0n~#O5{gs6?n8rud0$(!m@Le1)+l7d&tZ9|wJWJ7we2FS z_$ybo83l;DL<(ueDPZ>@LBWEr?fqF*m>11Yq17nBM;V{3(l)#@&llwB6Y3uvm2E~L zV)h%6k9?nu6f%ob!0tnXf_Y!ttK5gyheE4SkbP~Bz&&=v$)Epw`I81zve~_Jj(Eg` z6#RmMI9V9G4+#o4lCKSxGM#Q9&$6HtQ z)g4)yN;caU*7*5bkV2mL1BlIoVM2p~d0*RuVzRD(HIjgi0t^!x6wLeD#`9~QlM1w& z7Gz&r<=pE1rq{|PKhp4hVf6`>Y^H_oq9@csp^gG{9}*NS_}X&BWMQs9QZV@1JmP%> zGC8SaGYWdYv*hK;5q};U6wLeD+TS@d^`@5D6k3gf>}!kV6+d^9uDhSvK51MQm25`A zosr*T_pBn&f&w)c;2H_K4+#nud~F@L&weq5R-+*M+M>iwGvUXztw^Af&90G>#K#>e zKmaUIfbK(rf(2jOlVa`^Xpw@^*VeyO9{VC^Rwj;Z>5ZXoz0I`H#m~D!3Kap0@U=nr zAwj`{uPuB@zc;fkpQ6wr1w)Q!g+|pb2Fji!>-w!vOc=L|N;cC%l&ke|&(bwW0Us-g z$a&~KG$@$QF7$yGphXIX9MACT{6)Tk6-=_37Mj3^AAD^XNH4Si-G>AP^S(Ca%z>tD zru>+VtwuriwN+?%yybxLUz2$k2iJQ3L=2T|=4-3)Or_UKC)P$S;Dc^K0fy02XqKS) z+L|R?>rA$5{m$3vC63>hBJzclZsOBm$=8<35+nOwEypw8FM9TMTExG(j=r{R}nt2c*AHq(NX%i|Uu!@V;M;|K~@&GFm}6oB`2Jg+TIPl0;CmMMe{ ziaO1{$lgcBvi!oNAQW&3!t)mjc~3wAhH(T1`&uyV@r1NL1zLj^(Bmm(6JD3>!W(o& zvabcx6#BzwA1G)wVNeT5p$^}bmy&-!bK-o=l-wW`y86Y3AGJ_aTnjKvh-ksA-&ujn zdTdb(n%@~{Xce9RHKjNE+9lg;Ux?Kx@becEI0W?m!!VAZU|$QSDMX3MLJIlm!ZuJy z51h37pN%2XHy z=^9C2TNs9M1O>ZVun>dsSLQpH&}$_76oe97F6~+g7IZnwT(+4Ou4J8yeL-x`@Jtn8 zhlUo+N5Y80JjoPVZC{WhVFn9N8u`6!t+?Lt8>wWor+HHkbwB^{SCQ}pgTm4V6rg)Y zP_Vl%DCQ|lKC_|iihl=?LVj3vwLa1u!+C8z)sV0DdE{W-oN4pDIYB6l3d{%}vq(Fy zErM`e0R z=4{n!^(QBw7W`sy0}9Z+BPiI_f&~h-p6J{0Y|(zC(B`B2PgBnTm+`!|0~6NlzOaiN zd(nOCLn8}=QK-G8;mKb6wEKm$;#z=V96`ah7R*;*=)SQ3sOIVKQfM_TNawZDsP&J1 z^2+7eWZj0LA9qf=Alpm}19^Dax2T0|ofe>bM^Lb>1@jbAcW0j8RG5ww0t4RoNBjMy z0#v3D*`(XtDewD8ZbI}|{pK;hvz`j0aDPGkii4YyG%chT*8&XV2nx2fU_LevP7uM9 zL{JMD>W-(dX|=-IiwJtzW>=~|!-pSod2+xMULF|65fp4|!8`?UMIr@E_b^aMgnQ@S zC(`N+dY#qH6O&AU3Zw9YMnT*!h)Y$mJ1apwo;T=Sn{6$akC4QZ!l2c(Fi^}XRw<$K zNnw)BD74Wi@aIT*U5(-Y*mhps*rAfQBPh zB)j{91q$fpfoaN55R+%106*7!ZAJ?9VcOBx7T`8eaFUnDwie9CZ1;cE_3qZe1r%CM z3v$f1=hYuCdM^(oBT_x_6K{^8lFjbgey+0k+i#i&KnqgjJaiu#S};#xV695A_q5DF z3Z(9e^&jk+>o=U&R_&!HZ@>A#&1BTTV}DNqag`~?`s5ftod!9xDRJfQ^zTGWCuf8pT)Cu-jIJUN$9 zcTlhCx$?>8=FUo1fov#qZc2HiV?f?X|GpzwD+1xmo44Xt)w+s~W6NWQBcxs+9| z>IeS9AQY}tY~%L}k(s;)xJH6u96`aZ7A$0uL{xsENuNE{D72^rV;0HDk)`)8n@%>} z*RsXh*9&O{z0LN8$VV>?BOgu1eW8-TC@5g}j-X&y3l=Dd^V#a+GzIFY8G>Uo4HU|E zxM|zC&z6v!v=w)?pSCy%h4Nv^|9ffg7;Rt3E~W(v!#IM1Z7rD32vv957`8w6(Z}N3o$6KYR z_!~=kZGWOcB7q-J_wjN$$IGoCd(`9F&ax|2z0LLokLU@s zfJX$tiUi&3wNPRyn9k+t4HTd?P{3TC+B|)v56OQuBd2|<7%JI}LQg;M3MqI*$3OwP z4-pDxvq-3zIv2J`LCYe6$)r(mrY#YZE8C0$!~-CO1o1{e0lNQ=r0cW*-G>GR^D)~U>D=a>cIHxOH41X%eA7GBL-ERz zC*u}Y9ox)JC7V6Lm|63?h814gh+4?hQGo74f`Wx;;p+T}MFxddqaep@yZhF-dEc!a z$>;Aj?78byI+bijp&}1E_8|qojskQa8WhaOsrLWdFALjE@Kb0t3UUp}=;sGbE#K(B zWXqdlS($DFsRuhcV$119#0Az3+&F&eP~cHA0Y|F;0-nBA(Kk0Az7Klf^GO_ z47n%bE%w!lN;caUz7U^&)Iv^iEnxSdLBV`%-UDK?6lhTk%0T!zEblaIz~bqf5=)U| z>e+eEB+E9Vpun_4v~Zq|0(2i56wF73bzukEp4&EGfmWl?8YoN=EsdO0e%G`qv&l-b z)mP?ll58^yBiZhK$GsC#3k5m~(0xcyun>;~?qNKD87UZQND?urL>vs0fj&9383hQA zM+!wc3NTD)P%s|}(|4VB--B@h3av(=9z+Ek;M1N?J-0LG&xm$pIDIqkzJos5X1nv5 zAA0_)!T188fVY9LJ45#&LBT={h7V>NT8)AngAv(^zsQHYh-5C6Y(}A#=m{z4BVnNX zkf30}`#(!89165ZL5{&7mzu_`KDa%N953jx_4QK8vdvbc9)8{xQh*qYlrFuQ(+9f` z2?`ec&Jk)Z+OlpGTBKm`J6Bx&cJz_D(PZnO_m!H*j#9~HT8L2d<1V*D3X=C<3=%F_d7%PAwj{suTA;S-_*xHIoN6x zWRGV|+aVKYzr2b}d$-^1-<8=e&;_%t+YT0bd)dW6wCxkHb(syqBDFZ4;ZV-F&)UPH1_bmmL>lz(#_ zeQh;G&sYaZqhRp0{Xf)@Y<^=>kV$EC0x6QdRPhPx+4=v-I}`XQiuCUf9{)u_%uN!m z2?Pu%kZ?vosOkw4OakE!sE{B?K#p)IprC`GgiC{ho|z1#sBSu&iY3S)h3V2bVw?Kh^g6!cm$sy?#Jed~M zmogVj5nWhcSgz2*d3VCRDgGl+b(b)cCv?vxr{L3Psd5vA^X`Nx0Sf;(B3br3!?ljr zyrw=JkUu0Dvn4`h>F1D3C*~Ig7Xo{GKHql>j2y^ zFKAle89e_@)EyYn>t~x#n5?7V3-$7vfdVw+3JT6gB+Gj+3VC07D3qu^nkoLSctuH} zB$?(m8c zg;9Vp3`eAS;sZbdnsEgM=OdD33Z&r zW?VtR@rY!7KhpX93wffKwf#u-cs$!rgon31wUA0S(?VH3Rg&10z805 zFHcbrT?AE~|8K%oXd2l@`ue#XNI@2neSLLs`p`qer(B0Z&}0L{39 zg3}Sn289uP=R}T1LG*TpfkLbrYZ7)p=`rw%!)KS|nox-3>0%lJ1z)HT1FVst8COtn zJR(`&rb>_g-V{ZCYNULJR6e zRQ`p1a|G^fKK?za zNDFlopcz+Ca5^GgMihLZLJTk>xru_~5y^V|La%mJ>uf*frBI^!s2sl#-e5>()9!Q0 znoT=)73|zVC7X>%gDVZ1R;{`hM{iv19#gRf$Gq?=H9TSvhcn$K$%BNB#Nxq^b@5y^U7+dV)5N^L}v z2Wzji~N;bRrZxJ=&8mRzGu{RH@cLfEyI z01Bq(FI3d$NG^-wdb~59~Ct z3zDe1r8jh^lFimg1TKEKYbynluaU5NS7^cM8p#HQ646=MP3UhnP`F9N(Gu19%uZD` zp`f3gm1lGmpcz+CaJojaK_OpHLE9CUF8+?WYN=P)giE4%3lj=dd_sGUB*Y*_B$_YY zbOi;+Ba-#l|6aa(9$y?9MxoS3B)Ik|#{SnHJLQY7kLQws^&_S=$c>|t&7N$Z?%m{? zbC3Gru1$*lhw5EH!SRS>okH&hA6&V$U!T#{d+d8COtnIwIM~2{T7rvI>+qBFQ;nXwdp9nd_@$k<+C$J3L;gP`25{pXwLg zZh9^cRPPE3PDdmg6lUuw;QfM;!h*H+k6iNrIdxOLu4A?&novm7DDV+!g{W9)L4jsm zLBZ*WWP<`6TZCGmUeS3*3i9bldTlT*r1<$)wGk;_n8M2g&A5Vs(-Fx=ek44X2TB}~ z4Ed4db9p42t&z&k<>6~2eSRdv_ zsP)-Q8uQs_Wap4Bx6gYfh#Dz`4Ew!X(Y)7jjkJ5#xyziU!4&Z~uYfCBJ#L-xWDvATkJ z!9086fj7ZM4V3|S((OI|`PrF|*P~d*(on&_Vo(l$SC^Vrk!q2P1c_AcInBr+3 zG~)^i&b44QSC|sP`^tkQYJrMA^eA5OK5fHK7G6a_m9ovW07>Ri3-RKMFd{)SuAtyt z3r;DBuJd>tQQ&uNAvwG*7gBJn1?yR=s*8SCpwzUG2Y-i~FB-@F&57id#_B6xwwV_2 zQ8w(5B%%VK0M!SE793L$UB|TGgo4n5pV#F=3Qo1)AU_f$Fw(RD!#YM8QaL}8WHT+4 zRVcTUY zj6%42(C4-7wKYl1C zNEK8I)+sEyIU{IbS}_F*Wc~KF>@R*pex#A0nc!c)TJpO0TWX~6xH#2B(?S8)0#JZv z0zwNma>CRek}t{D z*4>(9TzlGt!tE^a+p-l~H7yjE*8()-3JQ+3U_B4U&0_dgphPX;3RTNSawE@1@(tuJd>tQ4sgeCA==UcXks6$6BzS zfnl`hcLhpK3;p5murJlghE#}DL}WwxJJ^&wJFeyD=0YCf{mzi7=bX>AGLtC7IhvZE^Q*> z-WH)}6m6!3TjAmdErpH zGGb7r$ox)QO(^_2w@%d-Mfuvi5YM#%PcWbvS5R=O1sjpJNsws)N=*xL)OlDt{vscK z6>@UgrWI7OnHJiKnotY6*_lH1uAtyl3(hHsv7Pyyolp?-LS}g_xQT*OE!c?hoG1ES zffBV~i17>_9#O=8Xi(xqwXdB1JC$spB77Wpa(amDc z6jnV<*7jSM5I=f5m25UIgnQZ_@-AA5^8#*95}A3RdRI_zJTGLA8k>`yHEyssZp4UD z!<(iyREOxYS9)^S9&GHWC9ZQ{a>q36eJsU09*-jmYJ>Xhg;>2SC^*)F^|-bq(eHS| z18Tt#;~7$yzsQ$7)^j11Y{s^Qs0p=D8%*&W37T;Q1;<*jP63`fAO-3booA%LcMGp3 zCE|S(3eChj+WmrfgaPvcG~)^iPPJeoqUsM81x07XD^O}$kfRHucMt#cg@M12#|Pat ztx-!qm25TyMK@!iS^Gzz7GQ%bP=M-PLBXjOtW)p>?`7MOcKwbNlzIi;t&3kQmE+oI z?G=;mOuI6JyihXw?WM;nn^35J>gZB-%@w6rlP5(Sp?|5?Uxa3rnPckD~Dkr(W?nk||2+6(!n?Lag`; zQVqhYMj=Lg0x1wM#Yz>b4+si2 zcFzAV&pNN5^MYc1&o-WA3#Fz7dFQ-zp0mlBw${&guAmfb>=yoCo@rZADOlg9I%Ue1 zeeM5_q)=*Fkar7v>u$<=<>PiVs9;dfwP%k|$!1UUvXZ)Y7;^j@oEKnXf%pZeJ|N}= zI1y&BH)ZI^tg-BwUN8LvJzt9YpiQYKCQkKf9?q#)A_c<^$tbZWk0ktgdPLC56;!fW zt>5^0wMZdfGy*GCn7RXlg7v+5;>OdXK&erX_vQtE-|dafFAO22qI0QaGYSyij}!`Y z6rlRRpkRMj7;M|pD9C&Bg<L7|fm-hAj=7?Gs?NKk!1P_VHF19Q$psZo&kV8}V=C7Z30%5u)DBa(Fff@#kA z3OXX$@cz#fSSJB1P{82rvPmcJgczflC)Jm6g=_TT|3*-Q(er`{^bJa;Qn(0l)(`oN%I z-Q)Sc^gCD35y^(HE#$=9>@fu~J}6NO249`90q)}rBV?M|Wy_b}_k&lE) zsbBL_>B8;&6`)C(0P3tIrQEy|Jkl}N;cIkToUz=Z4 zmX!KB|K$?;+TcDK@252i_;>gNy3WX!?R~4n42qX+HZNee!%8(s{FC9{8E@B}q;!?2eYlEl*1xf=2^tIKQd3w#v(*=ZYgn4=)m25^~h`3Zh3)HKl0M!SG z7A*VPibZEpD3Joq6n|H|@P1v$o0n~FGYW9IBZYYJL7@e#J}@X)_qBzK&cdg68ihRg zJB%~5KF@aEn> zuVd>wK39k%l3zywst*V)*zmQ*)NQ_`+U61prA9%@k3{|)lj@r^qkw$e>4C6LKSatl zqfm2J$#=VQKSByHq={_jSbbnnu~w5B~rloK+6e}nDuBR`yn}z?H1hs zdLfl;HZQ#4=T#wv0#PyCFF^HyLBYDOZ7@)PQlnt-wIy6VX5h6ylmC3Jrs&x~gY`C} z;Dc_5HBzCD0#qLu6s-H&GPv7jkOHMfLH4yp6i1J!wEPpY-oHEhx>ggYWHSm`{Dw{& zkxFzFp!$HIVBOb7p|h|=3I<;rczsBxSJlKB1sD&FHlt9M6NdX2g343C>H~vbXQZ;HTfEdL7<_FDUs?TZuO%eowqo**wpB8zWV1CAgft@s{fYC?Oh8bu;cJ^EE?EUiq+s;5 zO}yim*nd4mPGmP4(EH&PG)QkVEp+kos*pmB@>;;^1A>B$NZbFKuMGl8;c1?kudSj! z!AQ66YlHPAt}`_)v;&Q#i_&<4r2a%nriGSp@r#wJQb(r+XeJ=EVBOcI9N`(h4q&NK zkfRHuW)FEG{Ne2+H?RNuSLU-Fl6qT>F8obhKmCX!5tANh!TKcO_Ne*ZJD|BzNxFQMlDi{~w)J7xcAlfvGMjC7w5N34Lu1#lKmB zQlkK!sK6g+$mSb=+q2WSeOL-TkJ%HmE*8C|LHjr2z#f4HVGVR*&Zj zYeCp4VV&AVZ=jORC=BrPsz3|W%Pq`m3)Ke*1*^U`Jevwjq+sy1{TI%tV#83y9FZ;~ zUmMYB0bF_kp#>YhHaIW`PlVC5ASNI!)3ba6jBK+J$?~~86;%s1d~LT6>R0pS%JCFR zje_iJqx=Cg-SLFc~;WSdclZm_P(^*3xp3Vt00s6H?#SogJ!{l5u?SGT{3 zLa9-Zd~LMm%ul0+)ygJE8V&e)`6Cl#n^EY#qjJqA&ChcR22>vy6s-H&wu(zuff6Yg zd~HwioiG_RLPjqH+hH+G~83nz6ffk60!Q%UABnC6NZ{Z8jpM zi4h4Y=;PX;`hcKd!`D{*y<;VFT6ZZ zeLzsK?rZafv~H_DNy1X2Ap6?tq?|iG@7PfC(rx3S6WV7}$!5N`>I+%&$$dSM0tQ%d z3Ru0KLdzD~lkJu*%K6h$M~&xUZC<67xJEAYUQ*g!{6k4FA}T$_cWmX5OuJBA+ZK2* zoRrpuH*pDlZ8wO2vjU|?LH4x;tGNqnDdbBQ)yCXyRI-^C@ZvZ1wL$d(Lcy}H?NOir zrGWza+HT<~Bx}=imf6=;EaxrL|ZLG=Mb!LqLn(h3@~7iNl1#Ar1< zfu2lV(T4r_Wt&l`>*rrV3OG%OdBH4uVM0Y6k*xdLU@3#Xd(;9x2EzQDG;U*)Sxr3O21kR3XRrA7fRWqh_u=ZYOOG;FW` z?e_cY$~L1A^$o8HwU8+&z!MB;CNL;i&mlQRoFGY|)F{Zlwr*lyJlQj|_KD=@N~vVC z`-LIbs#R4+3OVJqfYk>C1v|dBBWeZ)FRdp^je_iJ3$F2D?=I(Nkndlq!~W-`lFcYY z6;2HqxnMR@@arf*^?^aby05L{;e*d_8+sLmQloGSzxEf=`}kejAR5x}sj+@GXu6YtYT2l(_%Qj>>_ zN{Cq^+iYI=6}lZ}=X@~58VRZo3<}nLZNo)pDNt$@48FF3*Z#CM`~z|l;@YJ1o*9J; z`r4rSz@T8=*EU9+2dqG;QRoD8=7^F;{ai?v9NI~Wmp439WujlU8HLRGEY#}NFdUJJ zby|Sx1A>ALUmFBIVE`0Tp!qX}+lF&I!yEG#`3!c%NH(KzGhbCLgb_*dwV6KIuAomaT;^-5pcHKQ+JdXj z^L{!1b_ykqNCsb9%O)W zn1!K43I<;rL=$P*&Lx}8&W&}mGage3PxGMqfS_RA*QWga-jh@QFLp1M8U@+cR^z^- z*@wFSMV|P0@Q<4wV)<0{HuJSb?cVkhJFyM5fXDQRH4-$Vr_idE=4)%!>O%gs3%!?= z@({1eS&p~DB>J7VZaZ`=_5=@(cpO;y;hc;W>=1*4Iu89kopy+QAe7F~$metu}) zcMDBCo;5^GObhBu0Vf@dNYG4xXu-0_GZ832sc}cYGkQFuIOj!V(#j_9j-LJzm2B4S zz+KJ9mpqnTGTc%J$O^dYtYof;4D%&$m zDCGG0S5XV&L`9$lXvP&3&UdD5S-kT<%?p%}!Z0?e?*vdBRc4hGD5`0cfB`C~Tr2?Polk@XoqHvdt(&_g53&*1|TFB8+fa+aAfiH~8{U7$p#jcTT#Qu+0 zlVg8Sh!kjD)tVYcWeTDj3&{74@~6!9<(p6#uI+^3T9~M#0L{39f>SNn*pF2I@GKvD zo=2fX?o{576mos7%`4u_Acvz<+5gh1WHT*PFPhOhW!rMpf?r1gs&@s2ax&n*VxL^B z7VJ=XwC`=lOZOs$ckfO(ouAjlW1tZH-Pn~oPH!g%p9#9^zF{RM6e4eUyXoQHd+^@* zemw=zj4LQO)`In2VfQ{FQlLaF;C+IYbH4c}?T&rY?l>7z zY3h#gt8b!`%~q=Bc`)EP5>)RB3XZj4okF^v0xbj^pKPoYHdPt0A2PAYiNTXMrkhZB z#m_&AT9_oh2o#_hS5R=Q1?xK`hltKnpwzS=?~n}6y>VVpp9bU?{)Brkm29R33f&IR zR10(zpn6wOaI6LE6o%<3X!p!Ag%EX{>W*CUyP6UvmPHrpsW1xdH45r~hB8@40h)0I z1;<*jzEAbPcK$-Kj)Lj=3zzBBJjYtFP60FXKsV7jEFS0DTl{!sD=@s%sK{EuQ$CF( z+Y1lOu9jP9atcNU3(Sf;u@&cq2Xz#nnSjuOjorfM^R?lujk|>*bw9}xSq$-{0JPZ< z1U^%|Untd4aFdtEsTOQdz&+d0O+{YOc~qv*ipTWaO>ob)M1@f(+q2E*1;3~W)<~v% zwlC8W$?3dcBR^92r_-C)ZZnBOiEAW0@r8cJdq0!bdg$jJwZeWP1454!U)|$?Y_ogk zv!2d(KQJH&v>@%-hU#50B01KA^_}xw;>Q2lrNJJgP}u3ZX=#;MRJpu!zQ(~H3TEWT zk-n#TzOeI8_5?#ug;Dr>bj<3MF>017u7xS(wLqa6S5R=O1sgl(DeNbMQquyAK(seR z7lx+r7unKZ%~MrMC7V$o(Cy-WLE1SF)w_a%Q!Ut_famf+Hx;ISq`nFb@e9&9JSG&% z&gJ1+n5NT$>A5@=bY8F#zc5R579N~~S}^7c)1Slh&*$=BLI$y07@7$PE!dziQ%|8N z2<+)l&J`sMy8Y?`_Ct;>OBmJ07imJFtDk=q=LM)3)<|Hvf`a3DA$!!=ob0S|gS~Mh zMvNM6*fN}++_eW=Q^GDfb+<4LYf!g+Dq81EMBsDY7#Gcu(io7>4>9%Ltydc?Z zUI-mK{`M*H;kZVsDewsjSiLJKIGz`*QwVvw-Mj$$_zMt(Hm;K`N5Kq0zW%$dTf zhsoN0>k{HwP8cJFa8LU~-bE`>3or%&1!%?<6dY^8dMwYa;*wRML@gL%c|!O;)zzd# ze4a`+QyAQ3qZVqH*8*1W3JQ+3V4XroJq2xEfKAp4+(Xk4xOe`Buc3-fC^Uy|hx-Kx zSBH54nsEgMr&_QPQT0dh&zW>ayaJ`Bg(pRy`f8N$Uug91;h(-R@E7viOwXOP6wuJ|~!CShATGLZ_=?LCL6v%<@{m>Rmy>sTQ155M9UOot;n+^FnDkEx3w;V=Y*Z zYn!ho1fG*lq13b>M^p{tv7nJOIBD0^Bmdb#C7VsaGrE4y4%G0X7IFkou~NnA149ee zDGZ-}BRh+B19nr<4QKZcpXFOfWeRD0Q7_|C;}Hj%+h6 zM9w)9H+%mTs0F{!0#JbJT|vR=ykLVuy_m-16CU4+6bkFGbYG3DWg6nzf;Nu7Y3`Jv zJsD)zjMW6uHyMlsaEm)^;E59k*fE0>ETpKaOwS|!I z*h<|AdBU^Od+ie*6AEKRtd%w|q?gwMG~)^iPPJeoqACckc_>i}hKMS02u2H{-biog zc9=>w(*hj5gIXxnX#uKt1qG*Ca85yV9ebvl4s8qxZ-v7Dr=*!#lsAMxO1jW2jJZaiG(1HT} zE+}C2fuRNK6fmw0D3C_at$TmxjDL=6Gfppwm=BSFvG8>$ZoE!d!t3L_766YjMz#I;2{rM?yr zz6T)jfC+^bq9$#PR8U?E(2Of6IMsrUh^pDVuRIErs0CwO8;k5ba?Jze)J^rej@gn( zgY-6=7t&w|f*4PITpLvH3JOlwNH!=ym;qAI?wt*BZR@LKuCJ0sPM6l~@OY&{6AGys z1-?cK6Vo%Sk)Rn@P;jaR8>b_Mghw`dI({>S618B6sEQi@<>8kf%phwr;^Wr0ETodn z=7sQSQ$~5RzruN;rVtsdk)V24P;jaR8x%roEp3spGX^P;pxpGue{734P>4P}tn%)~ z50kglBjo6pG@(ZU<$$C}~Jt{vuyO#s(vW z7UGkd76`XtUVvs?LBXjOY(!K=ywYJ3JLcR6rKW`^MW1SMZ4FM=uCl*Hds3|A&4_$E zn@Tnd8wsterg+v)kkrMsVfC({;8Y7XC_r2rcGH%61>UWTUo82@xHcmNeO#L_EVG;z z&J)+xx-71(b-6Ryl7|k-_9l%QI~dPiyU=?{DfjS(l2QeCrHizi~;qs)QF0{+P zv_5H$6qfQ|F5!7?FmND+qD<(0i2^yjW~TZ>Hnm=U{JX_0-dRtDQGjp2yr94tRU&=? zH{iR1!g)ue4L|`@_g{!Ego{<1oh1r#Os5G2ulP6O>>Mg=(1Ll4=jEw|^Ucl|KO$L< zYeUZ_l$!dG0>-t~?DOwQ?1#*}YHZQ!?0hQOOba9Z90QI>0s@|z2i3bm3*|>6^>?jL zE_y_=OaVM(=;1VI0VzcDA!!zw+WS-T*n~tA3Zpd&>OWmNDGZu%1qJ6Ll4S}v^9$Ic zQGojc9OdyiP8zKSo#!7S5AM7E$@*Wg%shH+ux=l#qu>h_cOEbzK{KwP;Cw`~99>u- zC{QR-eKZs3c;Wq8{G|C_B*WZh6kzDb5lKLR5echz1qD^gg?=sN{UR3CO5F7&Bad`>&NP_mg8%FZriiB-xH zdy1!dP`xWClpl@M-?2|FdPK5LAyo7(QovhY1BICPYmR=u<{0w$_3A5#8Y#eEa6}p} zDu&q^nsEgM$0L$;3NQ~Kg(B!n0|k`<`yms=i^Atn8%zsuhoOx~=^ph36rdSbP;fdT z*@(2o6C|NT^%){l8;E490IP9Oiz$ZygcunosLL0 zDCF{;6Wb|tQ;|5IGt)q!vG6O9>^4(Zw3)ihghIqI)dAE3MoLA{uKp*g%RSR=Vf3yw!5>+#N8T5>NBg;E=l7BUm3_t;zaRmjZBa)4%^Bd}@Vdr@iN^L}v zWB)^*tMOOTv44?ck9%(48JABbn~g{jj~z=J7Eu#NBmn`}NKm~iC^#LFY*4`1f9R&d z4m_Jh;XlUy8!6~x{}uf?p60Rtm*+~=>4;>90^5Kwrof9@C~O}2XL@pVlaqyOeAv6o zxf$g9SL(3;c}=tsr8{NY7n;XMBv>QW6V13n3yw!5>#_esBYVzV{K*~)r8XkT85p9& zu1u)ZG=}Ug*gNCzokGv-=G#0COOZlR z7~cu=lOY2`*l(Y=e&AphdA0JnS=Z&}n@|}1S-WpPFGVwWeh97mMO0ztaVpvDInpk_=ytek%NG^H z(>$o&6%-tgNY*Jd6P<+=Ft4hCLW9VxN7)Za+0=Ky$ob<;D17MWRpE#N@p|4*Pg!$uK(IYC7X>%T}6fr z9Fd9zPM`qQyMlt_5y?6QJnI~~339^x^I7Lc3es8U59uhFo^^hidORJENY*JxS`b~w zPK0ry1u-HCF}P3*PDdo`Ibmpt=yxn}MABwySm@(<&x9vI>Qo@xY(#?8csL@Jme&GS z9}pvw4GQ^s3Pl9$bW!4ogw!i+!b3cpw=kigpPd!`Dckwt>#m^SbVRa20WMj*ShZbY zGKF}c00}KjC_q#wtWyv2ElHWdg6pA02KJVKFrJx1nVIdyyJ3}+B zpx}5!vQD9QgAcCUTCfBu6ot;Lb#~s24F(Fex32qUTZb@mSEG*$6P})LLgCbyPoCU! z04eyw1O*t8pcz+Ca5^H{$d7b0-*dN!LaB{Na+a!~QuXy4;Scpz6;R1$BNFVX#}P?S z0jhTe1*apD4GNS~ScnwJLw~EU5<`}%&=me6TlyEX%t)ms6bM}WaI)|tIxRpmuAty_ zM7oS9_`<}h3PvP1QE)mU*~n7$U&|F%qr4U{36?9g;B-W?LE*oZD@>WCqhOvZtYYp* zvO(c7(OG!0QZLxkp`0s98nkEN;)kxgm7G}{-gGrhH_6zR;^!a5ySA`AVG92OG~)^_ zI31B3uJXhG|sRgGak_`$WPxo6h;oMQ| zrgx_))4u<>na4<>SpzK<3@}aHN0tRLp|5@mA}$29uiqTmb5FE=7#Gp?ZEctoVJj;^RXC_&}rlf3XVr4>lAKsa<=&w; z-jG8wvg5#U)1QBlOnIl@HQ!d*YeJ#M8ubLw-r9&H#x59Shs;Cl&kNH!AxOa)49M1tHRm@$}!-C4ckr{nGUAU1l>tzH(2$&)2<5e!r%xcmD5{O(_00px> z+m|Z^=UT9uD@?)sNKm2{w7hwB#U)Lf30J3j(8!B2!@$8fX-R7IL^Pw1CY7#=KxTOBHqxmYNpwM4xII z+p3E+RRk$WwvGay7YINRPqqQJD=0YDf@KOyu;?tLK%w&txx#8E^3$obGpvjhVC>S? zNPb>3%nQ(rD=0Xf7i{E5>K=Cg4{Qf8g;LW(yr6^eZB%5hx`VWz@o>UB>jud-(?WEA zHF-}RoEI`h1u!B(^{$}cR0}pJjNs=1=O6{_T|=(0SPtuc(qrHihtDp_#m^xXMj>*= zi7k)c(NNPuKF0tQpcz+CaI6LEnR$}bXFvZJOQF=XAZMwHSGzdwBzfr3ka;)Gzk^CP zdsr|-WadFFh{+iG7=;Qs-z|knRmA+Ih_}L)+yZeW^dmWYpWs!8dUep=O6Y+H)Q6C+}vZu*eeH-olmbx z?DwzACKP%<8lAbPH|A6Ig%p?90yN_a3XZj4JrBmS;*wRML@nTbg0fP)PbZ3)e^UBY zOpo;B4YJKvs`LG#+f8%AK=rPm;8+XRDNNH-*aDk;4HO2ci5EJ@lJ}4OuvS@~Z$e?B zMnODBDiKh`(>!R#6%-t6!FmRU;XnaOO$+_u?>VBRAp@`dX>0fgwvdy%R#iN4MjBWgWp;)H{ zs6H^XV4VWy!GLa}bNF+mf6jv;QDGGHc`$sTLFKhzmItGv-Y-~>I#+6nOBPGi0zTo^ z_F&|Q&k-?6=V4|yv>AoQe$nlq1u-CDmMUl_AhckELX@5Yo|9zk@HLYDyf$dY6%?GVk!(brcU$+{=Hp9_Qz$hp$g%&mn!L8P*#{YgF3)lo5Dcfv~)ZNcNidu*kUxd3hs6HUHV1vTr zqO*{KmLp825DfcN|ERpK)}nK&mq$m1QApD$2rZQGnt=i|;|dB+wO}L0GdS9S|4dMb=Uyhee~3t?Vv!@K~^xPpRHEm)7J@`apG z&*h21Qq#g@(Wk!XLjDVFu&2hoFQr~f){TxDb!>EjY_qNM;f+QvnA7!p)BacwPb*5cY)+*~epEqUmWY#!LAbQ9OYh2Bd_tIR)?l(w0dN>}lnRxKMR z##65_E;g<$jXjhMFI==1EJsv9 z%)cQI22vO+xX`+MZS(|TLRh@}{v6q6TFCPAkHWk_z1%|of>|DnW))TomMIX?SxBL% z0Bo5;ExJejA&*UHIU=m`0TT+t{rsyqFN9;`8H$3{;`7)*8Tnm;Xs!BxnV1{R0 zBWV#;K!eujPcV8D{@|2lBav*Tg$90J6>1?~R19}*CBkwA1?TgEWePCXA%&uJ(Om`# zk>c+JBw<3~MnC_EriC0~axLI(h$|>K)`InjDtOSKK&fe=K=is2D@t06hyGV5kMYQ= zJlSSiz#9ZuBN6dMSR+C8uAtyp3)U$>z!_4|{LV6kNO*=ifrqyxnoy_@-H!W_{M-f# z(2Of6IMsrUh^kzkTYfu*Qqw}b=u_M&NgInC#3Z}T)D>-}E|YDhg@|M7Erq&UnD0l* z6cxa{0M)yKf>SLxry#nH`P!UN5cdoDye=0~aI6LE5mk%SFsQU*3ZSNnh^VUXy`g*0%vBUhO$%~d zTktD8=KsdARy%(mM4{BQa0_1(Eu!~{J>4`krrE)jUni1hZ~4B_T^Wh8&9pG&*ua4wzND>@ z@^o5&>Rmy>u@ic9+wDUcgBsM`Vj)Iecd$9-{ws*+_(JoEYoWt&hKJpRjG zqf@lA&h>F^(2Of6IM#yoh$`vHHflkM5SOyDO_a2@x*MsjAb&+j$zaU&6 z9-J5Q%WDB2oV$X8V=Y*x&;oiJXi(@p1BLo5bz$|6yNIvt#2HnO95A790=gaVolCea z<^=_saRmj(TCg8c1tCwG7XB%sN{X;zS|GgFH7$sRD*6{pBdRXbC)9Qyf$_~I%q+PYlG?o zLkrd^OdYd0?)s2Iq(JudAJ=ecE-}QlHTgZ{i?NY^k_BBJUVnG+0TT)zG&nbU=A*^h zyb#Z|0nd@38COtnss$SnRmox;!Lv{`Eyxj7;f?u=e8%@;WKhXwTDVzVB57+R9O8fi zG~)^iPUi(16grE(Lkc8{+kQh_TlkCoMZO9-Ic?K(@g@|?W@moC5Sm$D3($-!C^*%E zjfkpTp#=p>)PiC-yRdejHajZ)OiF8Zc)Zekr)iMhW^1Hwe$nm1@2u$K+Ms$@P;jaR z8x$VXQ_%Jy87RmnNE#@lXcUAN3I!B#*9OhFf`U^m*obR`qaE?=LezpGqDnfe(B$kw z=>$oAT$|Ymk`;BIs&fiL86J}pBo7a(ynFG(Pa<>v)x#uXHtYQcI$l`nd0qX=y#(6v!dM_ze;U7y%-N;L&i};qkxVA2RFA&#OAZkuZ6_3m+NL*WmrC>Rh=WfAQ zfl?chB$-NOIN zJ=+y@Ua)cg!oYo#58iy}8w#bS1$m!p)S9uo;%`eMpA|Rz?3ESUsbn)PbXi}cV8E;I zpce9UT7c>ULkre-NQzq?j{+r9Fzk?od4h<nK3=0YSm~ek9y?ge6iyTWKab6Za_*zEo=7 zLbe$Ns@Fnkc?wuvU{J8W6Q=9Y7N0+t^%I3sqag1`syVy!#{Mk{x#Nm|*Z8T<3M$!b zcK&PCpe?6c7l0O|{YX%KKu~b72Lm=qXcP=PVdOm+dYe%w+k>G-ol84mO!r_^(3PqU z?|+^cI20(6f?*Fvuy~Pk?f!NBzCsq`skd3Tr}}wSs0IBV45&UZv|v4-YRJ?5)=W5e zltPIVjNbodF=q;^9wux1txJd>y`4tuZKj2APy0jOMJthl-un;L2L=V}erH?@L5UO$ z9?y_p)z?w7k5A9>RI-^C5@0%p{YZMhGgKcC6m0m~!p882a6TwC3bMzuUQ9LrE%Ww} zx3@jqZP}j(*y*b}Tg~KoCqH`_wNMwJ2#+T=qw}@3j@Nu`t>eq(iA)_eo~MxXDy>8% z7kV!#O?)URO^{Z4i0`ydjAsIk7skcrki7Mxd~Inr@>(yUudSi@XDU!?6wu29f1n|o zZ~Srdjr+(?H$9T~dIXVerUe{=;NCe%R17=kp?bX*Dl7%dzBX9p<7(ePVXWv(T8p34 zHj*#|%J#mMWt&mB$Im|sTA*HTp|1^^2@ncaeQgS4V#5+CXudY+OiDzjl0s3+HlqMF zAq5xo!0xT^t4;%J64JuV%zsWYEP{+@!LJCAwEHd+8^#MV_ zhOcb|KP4}RLa9-JOIh=^#qx(l_mdt2uQ+^mNiLOaRSPTB3`z}=LZ+YqJ0zj{z@T8= z*OnFi?B@Hnucc6G6l7mpM-~anI+?6pu_%4=JA0{Qv*pN$lx;5^UHURo$k9=N>H~s; z4PRTsLl6G(b=_hLrA9%{j}*#Ng`J>5U2jwWMw^?^ab zdQO<$*Z(we?mImxlo|#3#QE@kr*nUNdkcAO%#+bQLyDh^oM{t9x0hU^J$Ok|r;=pnpzNCCtJ_Y0=JwhDUhY~9y}Ifb!AEzoq(2>RNHu(jBK z$z~MFV*hzo+fwlbpkNyNUr{Mo_qBC@I=y-AHj^ln8U@+cR_mdkchm~|i3|umQharf z15~ov?0nYK`R)e>1c4SLUmH{(5F?TeUmN<=pwuYf-+S}eok5zP`MIXqDPM)KNL$bb z*o;Doc;<~1ApZ!gk)XPOpkTw-HbeBL0wq!~_}YTny?XBxSAIx-D@lB)_LaF*ve}4~ z?&nn@1--8gst*VX&SN~0g3;GzA;y#Yo$*08Un5~4Z(vZc?rTd0EkKDB48FFoB>p1D zz}F_(ObhT;)PmmE2Gs`y1slG$;Jqx_`L5r6P-+xpUt8@JlkQBrGK0KOGWzYM$179G zX1=!Sr;aXV&oGdJ-q(iB=zVPoWxlqA3&pNo=)I(r4*Wt&O1Y1hN^fypU3y>Jmg=JB zq?9=R%O&)+)e|-2$zU1<{5$+Xn~k?@?^`8iP`qq2Env5s`r4p6NedN~f@NP@PoMy$ zfdcy48t}E!-DKlm+v+q*VJArHZAKx(&#MA0P%pR8*9O%G2nDOYHd-J$3rnP6@U_(v zo3%*>d|t8{g|ZW2_+49kc?wv4U{J8^Yoo=`t59kb^2Fb9oT1fgj((s0kgOlnSBY#h z3Jsv!VMHQeiZv2c9}pC5_}c!Lac!+D=DeU-_qF{m%O-B^=n48ZIex*)F{ZlwwPyUUUS8FSCHZTlfQYgRR)!8 zHaj03H`(8RKpbd6^0h(r0YSlruMIq8=qb}E$iB9S+Ulzo`L1}u+WJQ-Q^{rb~$ zg5K8#%>)Dm8@{$YF^*jNxHedP!Mp&?1Ox>ezP2zPAG?l1iCQrD+G^EMnpf*Y$o4@y zdPEIm@e6vJX(5Ei?CwJ?)PiY3JV%1+1A~HfU)!yq1t^gM&b3Oqc%O!>QeUe{iMh>Y zXV^1?6zYf%;u=X<0YSmKuTA+;oCl1hMnU$qMRpuGZu;{tk}2=>yXM;}d#PkIUt5he zs;jLxQUJdWP=ID63W;UDw#0I=Yso{0Wb?o_rJI0vq4$zf7Vr-xrF_9l{EjVOTiQj% zwWZAFEnPxin{eKF6eu+cvacSD~Up>X(2-Fv7j^H z+@8K_VE>7&;@>;;^140Wnd~NlP%*`HC;H6M% z6y&(J;2IzH?s9Gh`TmtU?0;S=*^EL|;na|k3ufcI;MY-r>H~vdNB(i#I<2rr*&qF1fQ5YCE{?{%I_8^5k9R;X9Feq5}wWW*B!h2+- zV8|iahG%$gLWYb=h*|p1Rw~(ScK#B&9qt$M%TvJW1A~HfU)xZi0HsDj_O%6n-|daf zFAO22;`3Cp83nOj^gO3*L-m0{!Md;QDd8bgpwuWpLL=>b=a_F_e!nS9 ze4k1-qcG-uHCc2rj!4A<7i3_7>H~s;4PRRcT-#701)4AZj?d^QteFUh)~P_Y83oDj z45AVD3lypk3<}nLZM_?OaOKv5B@{}Hg6wOny>;C;+d71iyBd95nDF#`D%osyJ~if( zC-)pE1ufvsI8cD<1A>ALU)!zxzF-iAQllXI+QQcI7vZk9YbH?1W)#};_>vY#LGNpW z>H~s;4PVNrt3nF;xHhOhASl@IwFTv- zFaBd&BMK!_F!#F%78;9BAcfjsiVO@;eLzsK?rZafg|f#EbJDTYD9FCHx|3%e zIQhaBvf+-0js?H&r;@GakbH+f3_%JQV8tn5^*Rd8H~y=RbLz4PGN}@ zG+!HZCauro+Io{5(YdnCDButTT8J-C0jm!T3f6sXaFCkeytX{iiP*Q)D{L~Izj9^U zI3f}81@N^&GXX)thOg~ib_iRyU;GqGO$%@-V;lqR@Wr((74+w1F3*B=K(-l$(CND8 zNSWm+VD*7P!FpWV@aZ>RQML013Z+It_O+#PTGPmmgG+~A?MbAP&F&YnzHd9IU(FRb zFTl_RPcWeRfS_Q<*A~-we8S^fS@v>XY7}H&ThPYwH_e?glzg@Jr77dO5GvV>LiFtY zSFU;U08;Slv;fry1_kTBw!S->UH5dywG>K?f*jWt(dm)GYr|`ix4bue^ZJhMRI(X` z%yI3Xx@D{8@q~#5v;fry1_kTBwj^=MV(vktfb)TtL$diN?T&rY?l>7zY3h#gt8b!` z&E|!-#MO^l$SH~s;4PP6Dy?0P*6l7mpXbOLk zE&Ww*TPc-nMuEV^FP>mX=e0rg0YSlruWgp-I|WLlVDz<3yyKVHe?3J`WH%bn`{5Nd zNN=+dsf(Xig<8=2+MxP?pkTw-7W&-xZzV47PN75!247o^<*!HVZxlf`4|rFJJ$Qgh zHq%1rskcfp&)td?^u9KzJ}@X)_qF*z3s52jgRd?4TlMuF`JC?-$flCbw9r!2gcS6? zHmE)zC|LKkDc^*SduP~#r?J#1$iBAf&wc+bd3_#vuzR1?or{K3$!5N`n$^nh*~W*l z@Jtn&(NjohfpKlk6Ixs-PvnK(OG*vm_>)qF%hjQ;&Fk%}WQ`p>TwU$MOI%$Z&lcEL zl9cin|I;P(wKWiJV7@htLOu99{DB6m0af9@5jCpq;HE^`W?I0YPE%hSG!q~cEc@Cr zp|_zlP(WXsdS>2_n{OhYtxd1@%yk)5vJJB{^@@r?3s8N4P;iy6t)h-d)_rZTpj4nl zEzmr1DdX@?nX+2lWj&Jf~Vld9g^s{h9}!lePB?q?rXcd_~%SIqXmUhqagd*I*Zfw z$h)0ud{fjvmr6FfUl{V_6qZNeCe%Vsc`ab|0YSlruPyei6Mf$(o|Gl}Y{@%S5N{xc-Ym3TT zm_kEDVBOc2EjmkqQlrox{tm-C4OXMtCU+u7 z_&Luxvdt(E@eQO<0H)Y24Aln)1?zEb|HB-T?6F0Ke1c)!*M`m*EKv&vUmFk9Y2Jc# z6KCU5$!1z;tJgxQP76W83J5K9vhHi^G3nKpI_(4rP4&8t*^)?u^fnuj()@hXK`rQg zZBTtcP_W@^tKQ+Y+xxU%O`${z249dW=xXW?BfIyQJjalYb!v zy{`?b4-5+K^0igaHIfZq+vnb`i(lNAu0V-eP-I_Q#JM{={;_2Wx&J_~)b-;%RI*iH z+lXW9J3jXzYN4)fjRe(8T4-6eQf+x5f7*rKOG??xTS`jp%S+4vXe)>0h2z>_*_V{E zgST`EeQh_1&QhS%D9FCHFo>u+&XY){Q^{uYLbRV(1r+c=H}LX6^{$|Ro=z;WPl|Fx zUnQk{%75wArH3!MV^Xiwj!E8xCJAgz7CYzY@PYS^7&_7$H$>hWDQcvt3i}1)09h4j zN+VG-QYi9*EmH^;Hwfh5rq;`kf49(t0;Y8C!rMX@Do}uCTtVS{e&?c#)`De^XBX&o zD3Lp!WvHOXvmWy*tY|Zhyz=~%nx(_`Qpsj)`}=uSs0FX67$`vXuAqP#z!Ll9;d6)(JB7xJmXV>v3>tlNPbY9U^HQBc6@T|oggfF<_H#cRPb1sLnFn<(~r zrszbCLY%P41W}q$D2qDhT7WMA1!%?<6dY^8y7xaAdK*gQj!qiQ`(GQp|9+q#*-Q(# zG==?0M0^lNB&gmM6i@?LVxL^J7OYc%tRf0@6P~wYpiocUfsyzVd5XUlQX_@3U13}c z4RsWt8COtnss$T+F#d<RmwrHGn1d$;E2H1_j&| z2Ho`TM|b^3y?1zw6y#lDMhe=lF!i6052j#VFy9q+dCty`wP1Z$Snun9nmG5Jo)k*t zPUT%;;r&kM{`mG5^4gduqkD!FQ^{sp7}R)nqmF5ZabC#NX#uJa3@uov&@;RFHc!J+ zq)-_BK$V-L8W018u-`s!{lLL2@@nOCv#!g{H=!{2vv%KpUXqUU0wyyQ=e0pIuAtyp z3)c7M-6}3w1xnNcu28i+7%d@J*syCNHhg?#Wh&Wh2zpb@1gM4l@>;;^T|oio11zym zE_zna!R;``#jtPY#jRKz+;NK2UFrXP%P;jgT>pLW~ z#3idhiQE-=hh)&hZzWtkW+3?%c1TJ#(*k6vM=ccSv;ft+f&yv)OYD=2)`E2knR*IE zL0}sw^l9LIHI|I3^(74$ihjm$h5 zd~e<$%*;dQ@R%JxW_VF1iHn#<6i1J!wEPpY-oHEhx>hXbygpM88Yh) zfMxEN zK=rPmfEvIO`{ZKRNH%uPOB6IMIHAC`fQN32duKOMaJojav2z~MM^Pw|JC%3NOIfKd zNtUV#x<;}=frzUgDHKNWm5$#)A!L{O+D$e+*EBojt4I?Hz!BF-&CAaV6q<3xh~!iY zHsTkiiOy1>L@mhi3*=1KW$foPIau}fkMsUrDBEm0?&arI;k*Fx3#ncEsB<+`?+OYy zA7F`naR23wXpQjD|HRINN6AFF&{G+Ia7UGLQ0h)0I z1*ckYTNFvfykD?EA^i1&AHBJ!I>z!8Mt(Hm;K`N55X)2h@m*b84jM{!4c$HHIyNtu z#Pa-S%|}1{dkSg+6S#>r5;PMSTCg6=gXeWZiDRH4Z(hi+>gy=kCt?VxWS6^5gG`>a z#fSt?wxN1gP{8>BOYD=2ofp!rQ%Dk>h0mpn;PH=RmwrHGn1d$;E2H28EE;>Iot*V>i(O>d_<{Jq8MOQqCQpcWfwm>9%pv z3GK7ZC@fSXO$`&r3~jEN=mKHOQo~;POFxU6XU5@7=4mE_w0zhYEokSS6bf-i+%XzKfj`hth~+uTGDx;wepWi9@LQy8z5EG(N2s%_P|4_B($W9*ER$@ZI zE4~R@@P(vv8)j!{#uXIKJ1<Fnp*h*n~n^K2>#I^M&M;*8()-3JQ+3U_GKLR$RgI znYOe*|99Hr&gvaM9oHY1bh6E~P}?uM-88NZnsEgM$6ByX0mc!eP$X719s`BODug>D z$v30luQ~dCuL*@Hje^hum||XlW?VtRsTQ0^RB7`SD+#-a*6sM*2Zd9^3~_CJ)!@PtTgkx>>t6TC z&lx5Z#@vTzk%)Og%ziwWD>Rmy>sTOQdi0$!SRw(I$6bhqeKNuHV z#czyjOTG7=#+#zZj}33%a^j9W6ADrNy0K)R{k3_au>8CL&A5VsV=Y*Zs7mZO{>xsY zQz?|17H$D8+$VMulY?LVFqVG4mrPuBA|Fexq-wU8&YAiV!ry(=g< z)`E2koz6WvwOytMyNR65JM_%RUkH^b(2zG8_}E?-vUuh8pYHxP+l0c<#i0>*-n>xL zLUDO5Kr^nO;8+WmBdYKLG?u6ZB|==v$~IBb&%|9Dt^Nvm@xgUh$~Jps5u7i&9qyfl z=T{isARKyXLxvx z^Fo2B7@ny@^?{)U>l8-lDNrxi1`2bQo~Y6G5cz{KhJH%GWjb|YFfa3N^?Zt(x{&c$&y1mN%8WAXR1u}%Qn+O=6wE;1GP{LP{h+b zsNNM6F44T;fP&~cj|cZBDRwCEd*@KsQgEsT8xd6@qO%kzQ42I5{tm$)nun7;#!#PS z$Tri$&CuFA`w~;HNm_9 z&A5VsV=Y*ZYwHp>{?{%I_E0D_Eyxj7H4gqzFe5*X^gY${g`IyEQ^{uc&VP@NS)DRQ z%~GZM7Zm7sc$x>*yMlt#dBH|pTUy7c`(tOMB87MN^&i)8X|Bf*U07q`E32RFwS;8+ zwq(ebU$Tu9l%T7VE1l|g6|Rv&jCR7p0|LRmx= z*Me?#Hjk*PpuRR66yP)+>?R`OnmvZNwoq}HEm6JBHAfdxBL#8vj(T>Xm=`k3YXO=G z2rbx%sG2D>pg@UQkmK5D(Ct?jupe@4S;D9`zDU_-6G2zM=ysSFaNDZ5Ux4aeLBZ*~ zV1ok0tsw<;R2nD*tD&7Cr?j0g5*0=vO`{;RP$-}X3eb!zC^()MvPX^0$<7)#*c&%u z#HithqcGBwyY^uHRg3qJM?D3DhBc_$K62<(EKv)Fh^m^IXJXH6SVi6&m~`8-^-HN_ zvw0zO?D*TK#E0V=3HE`(>h5>&`YeuX?4#ghJQ@e-0)ejo0Rd;&NJ`(2Of6IM#yoh^iE!3k6Elf+3;`(v_1^ z@p&rQOks`1JE#SHTpLvH3JQ+3V4Z?bPXUtOc?=YSzg1t~k3OMGRNT&K zCxuBin-|JX3gi1!1q6Ji3e8AbsHhYy$MQhtM+Hg)1&rnK^0>BqlHaLa^!k~Vsbn(> zgZvyEj7ZeWEu;X|2M7hLQ6#iPbQYFK0k>Rhu{`x5x3D;fIGai~qtL+5tNMTBoe6vu zHTU=H_K1qmol=%wWGl+jvKB#1rUi<$P&NTYXc43!OIcJ@&0EZMWrJ0 zpaR|kBJO2TaY3r!!y-xn5!`s*Omfb&lNpei@PD5U_u7x?p|=U-dw)qLIp+i^B#4UP zd7)TX!9l@!`~vz~Kxt4Y5Z#7x4b&%WvH;>2B%4uyKS2sa`~s|zp!%So;KFmhJM+Y5 z?${Jcg93b%4bS;%;y8!2du(#z`Zotr$z~K{`|BR9aY!MvECsASI4C&xoWD=MK;**! zh0>rPd(QXL9p^h1kiFOEPnwaOPbHh}Ue?v&|^P7`I^XHIm;%!S)u678mClDcQN7>Rk&ynn=gBrBE6aWIxr| zmqSxWR(YK4*)!-w-3_5svKfV2{`$0fpSt}}3wb6APVrZHE<9l# z88bh=a(IA3X;6^;ks2Ql|8i{1Uu15V$!qTlJ4hv)&CVazJ2U$6M~h%~mi&>R`k-=#~SP#P3uPnhVM`l|-{u4wL>x<6N-lFcZH-_U(9Y&>D0`kXTCY&Ig5p8j(RW*-cwJ}4--Id@*X_pPM)-D!j%(fT&~ai|l-0 z6wBqAWJ4hix*cOYGr0{Epczk4P}hRv6VJ2lBOwJm@vH?}Sn~GYTjQ=zrIO9GFwif$ z9kk%%7M^(8?jv2aT5wF^HqlwQn}-iuc+#mMg$6vf^A@tLuRbK@+ED23=T)(Jf%{;X z^X5S_L81kx=gyi)iyVR_&I`u5vrkZ>H^I3xjE%C*v{0J8kniRth+l*e37YW)1@(Es zDFqr3orM$%VJp-^!6)8FGDT@a0TL7%TJZCC3JTbaCnzY-3(imf;Sm>eNgGqZ z=yseJ1V^9%&3J->suo=MV7xn3PX^|vP#Ri*Vcqb-xcSSgZ_0V`3-Tn-6>yMBHq%1H zG@e-xp4xCogAoa;_XGu1Ex4fYHBSv$j1<7bCDW2aGL;9L|4No_x#Fu+twU`ngl*RW zbvNb(F~a}_XvPy1l(pd86DBKm(MFbbkV0u_LH2}c5B^ANmOYm-as6&8*=#p&MCYw9 zAASB6)ItsnP&}dvtM>#2Wi2?TfSEjjLO|HWl0#C;+-XChG?S-zUI=gupap2g6BJan z;KCoNeq60a_a)|0C=D&h{z&1AtNopF;!1MjiICeriO;8!&9o3b>qPpn=<28izex*F zy(cKBYQY5saMwZ#fqLCHv~3witT`mjUSKv9O1;8_7K+Mh!PYCRobF&KYr(l!*r4f+ znO_*8P#Rhw+OIfbF3voz=?S^{{%*ksYQFGRJtJlBT8(|-OI z<9R{U1QehdPf$?Sf^!eaA<)}U8d{J&B*SuVm>t@?9{Fj++HXdz-AyH%X@QEGaE(*| zrpUkm)q8@1@*2rGg}coZC;?lhAZ6~fp-`I1lg|sL%siMV)Dskxwcy-OwX2@cf71*N zN<$0nfW`z-(#YH@+a^tzMwXC`Dc9^zl5M7iVf;Rgaj1nN@ry7bLG_-XpsWSw6#8%% zj6q0&&g6aRM-OZbDMS~=j<{s$XJoB^XZE!%$J1XvPy1RJGv3 zTNrn?p+qgv4A4ST&;oaJdG90E($LjXSDj3Jv%t z{W+rX5iHM!0*qmX781&60h`RzVn7bbth%&f z=-{4Ive~oqAJq>Z?^c)x^8&gNh!F{^_XGuHEjXue_kBwath{Fsb`!1g$8Y4$=QAxi zBzpf9s3X$_>e1<159z?=QBA zBI)cGAAXz{ii9b4Frb;B(1M#N63AW%=>>6Kutbr_*$X9`%?qX33;DbtMUjYRJV8Nq zjpUpHIrZ0DwO?4k#(B|Af!2FsYaMPe&q5(;*XX6UyqQDhbe?mj$5no6r4XYpWk>1J zg<_3VTt*Anj3+24uaTU`@|?|QyDjg-5DlK*Xv91EYdtygvHmKOZT9R8GQ#JDnxX>O z!3ZXw?F{D>+Cy(cH{r9hHKK~IrS2l%o|Qr~=yuQoL^uNlXeKDM;5?#A`&szfVTtpC zC3|7j8AD!-n!JtV=JkL7vixOKvROn`>@oe?+aFL1;93b3pczk4P@NZCQ24#*$4vTI z0#cwGZ@ru)~EHmd=ZimMt13B~YI*dZ%{k*`Ci=_W#55;ptua zo+GZ!FDgsv+?#)M0pr@@Ma>$Nh88fE2mXMD>({i^d5U~DUyrFeDBEmafb89%1^jmb z1*kqqC^(Mg!C4qe3k8hjsm4z_zadleR!3{w`cTPc6mrBz1u6IhUZ4Qg2MGnoQ6wdz zv+&d(DWJg2 zI)q9#qfi>l!y~FlSqgZ35fl_$c+QXDC!9GHN<$0qQAWQcT8I1UJwSR4y!6PQ3vy+f zQHWWlJJ&bB5h=4Q1*|?eC^+}ozJ==d#4n>z8Wd#D`4)N*$(I$$me)F84wx+ZA2D8m5+}63| z+1pl)M=j);C_weWLBY9)WR~bG4N9b7$syT6pPU=dAQOjOal^@FkyNtTys!yhf`W5@B#imT z5-C`6NY>$dsUMSj^m~O*ZlRLRC^R=~p~OVNHUq;&x{u@{hvcX$^rg)d3Z+4zq3Ct` z9pBN;r1h8bZ^*+Rp6oVcQkrbD+4(zu*Lf&tLGnj}>VrZHE_^ULai6<+6iS1F>{QkvJk%FFP+_^+BNp7bl+o z%X8<8R140}+LEhO9QM%f-_*tuwO~1GtN(2Ni;e4Kke#nQb>NjNc2mh_XKmq|pPBTp zI(twHrV~%B-lT=*2}TY{_HCK-wA7(PviXH=S~nr6bNwu(^NajVDQV)&4gD3|owc#; z;IrqD%ol%~l+MrcZ!V6rw(?5htmn=ffCBKofH@@L^af8nMLX>7LX{Iw?vE6n!RtE5 ziD!AGa8`e$e4y};T5x>gDXw1((V#R&B&2{Ro-sE*vW$I^d;Xl!uIJoLD%tF*?LNQg zcH111P`xKcBy}w~rhw!)0u1X&hc*(sek7aE3rl31X(9TA9#W-8RB=z3On}0*fYk?u7FKdAC!wZwve9Qpsk!c|-UHMnlwsn4Dpagw=b3g6h2Bf&ymp z1PYKtGQ^TYQp((EL!mU2r_h3!Szum(W;{VbRSPcsk?Q*Dckh|GfexmVcT4UXL%wzY^t zX=p+A3aj?{8)09B4MTt8<8stOo=FQ(y(cIrYr#2%f%_&N zYJK=yq!5@gB&o*4cL|j#R9!W8N5U=XmmYfa(r5nIO(mN>FF>9{)Iz?f7eIfY@M1?VQ@zBUVmtM_k-`XHAa=TU}v z)Jmb9q=k~QT7YIeK|xsy&iz!Ui2WfAN<#~>pK6Wo*N!f^?s-!3?%N%I{JMlnHq$~@ zRlTZtI4_9F8MOe_dxCf`-K{KA9psEEI-ooI#r9p{Wuy_lD-zwqB3!gADx}nXq(8L&#_`DznB-8>_ z?+FU3T5v(38q5pOO*k)DDBK`2fsx1g&MCpXdSxgi7!>%kbA*rEuttJrJV8NO3(m6_ zX6%@K%ZL9RPN6ikAp2}r-!t*u)Q3MNcT||z`)Fb$m2CFx{MY;c>hkGxKA0CIpKYk# z6BLxS;GDwn+b_HQ^Y9}`fmX}S3A;MNkDqnJbH3i{4|~7-=q57Zt&gAYkY3S-!uRdw z+_dG$=a38tD8ds4 zn(+h$<#{1{)YzQttZ{>V@gqiz8r~$Wfj&5tzA{p~_F$h{$Yhk9+CCk#7GjB7utbqa z*$Qp47dp-%dC|@b&M8FJyRKc#&_|F05wSf!3x(>Lf7JP7-3qdKV9G6v>Xz70h!}g{ z?UNFsj5U(j!hkgrG!qMpf`aP2;3A@`gXk;`x(T11trWOV-bzv|-fu$z?#nQ=Ahs}Ic7|p=K|yt1a1l`z z(?ECj>Yfaxp@nBeZzoq1-A)@!i646DuaA;Fho8G_@Q*RF%_6EICh?k33+9L_Y$l~s zkK~L_XHH^eC?!pJBx}jy z^W!S6t;0EUNQw_+NJ{6Qc@q~fuC0OiJ8MuHS^y7h9PMdD@#%JzANihq(Y)R3i%;gs zHk%iGeqI%50hhcmB0=@05vjaVC|y&E@32n_3q)U~bQXhcuP!~S z9mLOSo}ODb0T?>vW1k4mr3l<7K@jh}JfAzDWfFFM0kAwl#Vnm|Qj3+24Yr%0u6(-QZ z($GSl=yeUXQ0x8bqu;MShCESOe}z)X*4IelH*j7cV2WpF@CEP$1!XNbrvTR^AO&1t zQkg>SSxNh5CG973_-mdGg*bzP{?EXrFU-!+j3+3lYQaTB6-HA158~P`*5?Iv3gYt| z5@Os{1tGF>9Gh&j4}WQNA=kq7Wk)32=)&?!L0JpV5jQh876FZ(%&008#1DS)ca2^MkeItv_b^rwq@elFhV`d3E=peFv1F7GS9h zBN9{}99nQr;nscYciuKN7bygq{}w%_X_}wP6r!GZ?DaWyPLMb1XJ(!1U1CGw&c1IH zO_-wJzreN7$fN~m#uF5j=LP2xRl`MRX;7jTF#iQctI_T}dgN*H;=D5xTITkVZMIT< z($A|xE#!-e;i(O(_XGw0DJt_n?3437Ur2UNAx(4^QrP4J8=eyk3at+;y#K($2gumC z&mP@=^#U6TulxD0q88xq4iumnPf$?Sg7b)~e$eYsB6m%Ss3L#NeEwv$HV4TL5m6=E zObgJ_sD%Piaaz~j>|>=t^`4+mMh5&_?344>f^!PDnL1}iTB%3 zNEbgrEi^GvfMz^FL0JpVBdW4^R7hJ5O60CVte`eQbSAADQzLBB_877)aBxPY+<zaKVTK)q8@1vKE|Ez*{h&n<&P$$rP$(#;v{N&rI@7$lnE(zX`FS&{cPY z;kRJu{|qewq#<^;?QX%iSf3YML{x##D*CRX7HEd(L=AksXg_fu1L2n}M2?qj*6r}C zsD%;}1$2$|f+vis7F9SmN5+M7=ro@EUU4-xc?MRjDnlZnoL8^O>2OTh;nJ0kj~+ zwL$fsprEV;=W%V?f>$ae);ow40$Y#2v}EX)MhvGB*H-025!{*f%I|aA#b#P5XrZe< z{VICe^|(etw^gnM3e9+ef~po=L{v2w<2{Aa(1LU$3^_fXzsLf1`aJr5pKLQNq=}kP z3vkjbo)@rsPf$?Rf(r@+<^iBU-r(auvBb57@6ca6$%e&EvO9krV?%**|3EzhgZ|Q* z!89SX0L^%Uf~po=L{v={ouxsET9D(~h<+zhlk8OTinkg9P&C}q|A+C-5)gor;-pv{0a8b{VuU?UAL!qai{|agWu5SYh z(2OT2sA|E@?MRnbs#5jT?=)1Ds0B+zRrIX4*7Q%gg3Rwy{a>H7&!dvf=7lQHOrQMl z;zg*1>H;I2FF^I4prEP+7Zk$vduY!bMGB-r&kv@SjLNi7h;3Tyk3hvEWX)}FCMJyD zW_t<*0=gCJNAuCnzXu!FgO;d(l}Ml&A%3M3o3fC*SgwP!SC`+hwL>h<7%} zwL$fsprEV;=M*}cDNrBSZJ~sn3^|U?h5|k;!y2ijr~r2Jpczk4P}PE)h^mP2k#lEe zBu9$U(84pK6OFjG>n2V=_}hz{$hv+Hp9ov+r;^R$+M?F;1i3gbfP<@`fYp0~f~pqW zP=L5Lpg=d?dU?$3dqVy(uFXop9M`6`Dys$ixVC03jkvaEEi;B^-8p#RC{q`RDndfe z^|O@Dm+`lybbguMMLMp_?cXEg2D2NFjXV4L@wWVISGwaBAM_XktSF zm!@J~NRCM0H30?N=)!VJ;jHt*d27LOL={Y;8k80-j1^R9%&NyvuX_A#es2Q%B9C7_ws2*3z72(u z;#c8$AvuC@3_t;z@dO2REjW#+GBPy80&_`Dz> zz`TIfdxC!AlfWwcsM6s?J*{_2>@@rJ)5&T-(Grf5iuvll?Ev-ThI; z5E^E-nHFMxjjPq@KJ-Vz$3OAZhSdj!7Fh%JYKrh^mRauR=5^Q47ZY(pK?vdfUOb z8?)=q$>QhNZ+Z0I64_?Y3$KWG;uhpq&xVFBcvyj3j*s-usARNMa zGB&*GHy@{F+fXPnD2RC>z-`!5g=RcKL0JpVBdXwrFbzsW3;lskjwt1u!DO3h;U@7; z)Pfk0a8DJg_XGuHEjXtz6nY!Fsn7?uOd)JLJvIE0jlpW9HlS^UJ97lbxI3($-w zC@5>ec|_GB{!ARBL1}0KJ!IhG1X}x>m)|+^TTdEZDeHz0zt|z$ObZY40FxNhf`AYr zW@oJ46BLxS;G6>9*9H_e)$XUKT-sLHx(wpxSuad zBf2nAWG^Os*r~bBhJrb+E!mW3TeFR8yGWm%-NdyWZT`jLto^jBC=D$%6p=YbL{;?} zo!;)>f{=cfzE^F3+%hWJ?7{5s6@xaNZdCwUkmK4!^}(S9=W%V_-aNMP*9E^K1ycR) zPp39}J;ZWfTaCuAZ)y5rAJV^4i`jo@6Kp8_x$ot#m;7bi*B0sHY7!$7g=RcKL3Lhm z5m5yw1L6Rcwy)0y@TU3Rt}-C@9Yh&hKlBT7Br_ zfA6Y--9*N|-8^~M-SHL*HJ{kgwZ)*JWXI5*gRcEL#)d-Je^!0`{d?K7OZh?=KI;?2rD)(ltxtPeyUnc4gvR6Z6m76=~J7s7MxS)E;rOIF=Fd-857+06AN`fFYj&I_<5BGyP)y(cKBYQY7CsvU<%w&h$uE4{Bxh!L|Wn&R4er*`Vup3hhI|HGx>x$kSs7oW_O&d2yS z7cj0367*|O8d{L!+9G(Cl4gX5wS6~_N;aDas)@fNXaWCS@Vo%ko3v0~DafFVK7oXc zDQRN+xa@sxt@QiaMvHtbF79iCJB^S6#xG#>2Ycuh8B=QRXAUmu)OiRqo;jrLt&hs|0-(X5fcSy#uF6O zwct3S3bsD+b|lmS%@m!e`9w*ZLR{NCdz)#YhWH6;K}^o51!%?-6x6lglmaageTNiq zUa(Mz7w;qE&q@Jq{zNTI0VrZ;8=CP11!XNbkEn_P3Q!ta$b&zJWk0ODb0 zRSPaCEP)$efI^{&Yg=cDYlA;06C*Ca^ZsGmY$!zWgsbgvUYJ%^3ly611O;U+IFG2h zg+A7*^VVe)N<$0qd_W(A=fM_N>z!PYJYMhVxKS-bsbsVBg(-FRG>KiL-w0!KUmH~K z2@1+ua898Yck_A$DUh|>*0k;uO7MBWpl}o4!Dvbr4Vl~OxBGK!D2(Ufhigy^xh5?@ zGoGNJss$GjRsX}dwu^NiNu7fD05cy9mFPlU(%NGtEdcD`(1P=bs$MUhPJ6ZYdJ3g6 zFIa90BddOW?8@s&!MrB-PR>cCQD&RX3xnp4@7-Ya6r2~}fdke^P`xK8sLl&6q6<5o zdGwLCnIT9a@b!Jw=T?3&V7ad?Y){W!r{A4Mo*o_5XTpREHWbF_=~Pz`oEIK9X#tw? z1O?@J!FgO;d(l~ze5&xAVB8ee{3(7p70I5OPOtkihDtUYg4X$YRj7r0Q8DanLo=SB zpsWSw6zYr4LJFJU&>pjp7!+!({bt14Z$^?f5wEkawl);L@bjur3)4*$pczk4P}YL; zh^k>g0ZN<~iQOM%YcMEVtDl$=k>ODc>0*y#RM-KMI-!o#= z@Fr;uOjRa#Z%=y~C&bCA?bEUMu@qew5`v#>R}}O%(d8261us!h9g$qb@`Q?h$Dj|? z0_F@eVtK^je{-Uz=V7<9QORcA-UdGWFd~(hv;fTng%+Gsz|<{Bq0lcn&q4uDJjLeU zZ#EQ?4GLTfv&vGyW;{VbSqsi%c_5MsV|ffM{C|k3x>$EGT*S4FtQAO!PyY)k(3(xB zk9hP*j3uI~ey^rk6RLep9(wPlsD7i0Z6d1n-uG3n(Vg>frTT3g`-VK(DeUC#PjaYa zGcCj{44rXvyGv0EcnmF~NT7O8Xu-6&X9o6(cAg%RE+~BZ^3ms4H>!XX0<}UHw>mMS zkA*^b;#C6<9+^faw)=bM(LHT#D8#OcU9|DuZ8$H?Ejup|XvPy1l(pbIexZZtEWE+P z;4a56gmX`rm84j_pGr0xk(xrcLv*1ziUgYR1O;U+IHv%se58OG7%Z_oVIqoze8G1- zvTZ1|Fevcng=fJO(S^{ACn%_D!Fl|G_A`GLK8U5E1v!eO>Wm>TMor#Ea`XDXe_8%A zD%mWGB=(r@Q}YAP3*b%$I~dT6Cn%_D!3BkHBgU;C_RwjhuqkYJ=)m+HC6*|XDvS5- zA**MThr0J(*{N{24Tb8JxZ?oM3-e7{fM!e-nm03|NZ7Y!B1KY%4$0=( z()lg^rj*W`c&YUiztb)$fh`#lgmGb_NODAFDV2S3mz17?G%tTj;Y5)dz_d9Q$k+iO!-> zA_a7C)Sxrzb>JHl zHT9QIwiyLnn!?UD5f#Af4Aln(1s8s*c>e;F1_k&i_v|Y_=R3 zb1$xuIE73T1*kqKwBW)wuiiR6m)bxIr9naV%?r;Neeka4QHVZS zx5L#-Z^3yX$3y|D4-N{>ee(vg+~&O=O`%X46lCALm{IrtH2B8_C_weWLBY8{66D{+Je)`Y=L5qZDX#5_&)64fS1slGVOK>{$!7Dy zF46BuA+Ib2tUfp>lp}wnd=mvbf250bc7~ku3Z5{A7L@&w0wxM}o-h|H1s6UT@R7w_ z!brj5gW(gMO27k#N;VsjsCWmCNJU_ZNZWj21;vQu;`Begeboo*JeJ1p{^q4Yp&^_{ zf5&&SGikMXudZCwYXRwVY{8ICKV{1{qY!#U>LsVTU5*rrO%$N|prBBWPX95S{T!$N z7wd>ro=*S6%4z{q*9V6doM$f#(+~d#&ZJP{h-5i;j@j_!ck_;JCM$Za^tJhY9hGeT zsjb516UD8rfe}gagn{aVgM#xDPnc72Zbb^#6HmUI*NecUOT)}In-^Nahab+JBTZU> zW`cr(^Ru?(@Hu??#nPZ4pLoU{oizRHeGiZoYwjJtCAWx5HaqdG(pul(dk(b#ITysd zfYqBQBtXWtW{ncrw`I=LoMmiF%jdjP();sL>mu;G%h<-Y!1|u;+<6mZy-7)Xgg0>k z&)P7S2TFqip7OvS(6C)K=&l+X`RbZlgBniFlWnF2X=giBbO!8f+r{#fR|;p%Uihx~ zCn4|N?b~h3o3=7G&9O!kXzhf^M(s2C_fGoBcc)V1K4 z0(?l3LLm{IXJ`Q_VD`eEa|f*3{9~#Og-8ATSJ}Lvzmmf`zf=dfd&z&)P1WVL{ z<=h#wREe$*G4dmU&9va-y&i(k&Iw=&3NT9qi547FfQKujfN4-I6dLiB>8%8kjMz|+ z=Y<@O0Y)Tf#uF5j=LP4d|KQ-RL1}0qPkfY()BnavJaU0-=C1&iY^H^(W-Smfg%+TC zPf$>v7o1aoWj#_rKh=NC*k+}GuJSl9_&Em90yN_Z3aVOg;e#=P<(^^*s3??%7GPM% zGdEi20iN28^cZ;Qkv|vY$~MzN%rZTxTLYXIGRtZKtM>#2RV}!nfSxc&qnfxu5*<7Z z3XuHkiEj9PQP;LU#EJKwRyiCyXl8`D%p%e z*6PcuA3oj_=LLA+04+fEo}i$t1?LocW;fd!(x3z>1hi%gDs9|r&Da)s?2A?p9?BxG zRX8*K+T45_3WGmyyXTAI3_}Y=Wwij!c!Gkm7M%O$rSrZD(V#>v;0o37&ASoe7skCf z@63djxm2>*^Fo1NbUW;+=8KBqsST?41O;U+IH%A>bQV&;eIyHoHY{J;h_&C6d+QHm zU*l~ktn%}!3@sE3Q|w?sGoGNJtc7yqAt@HB7*S>CAz5CZ+LX26oWfB4i4D=9n~bwI zaflnD<%pltu)W>h*!bcQQUbP=M~{t2H;bPbS`hDq5eb?J4lOv(o0r8i#kbXCjLS$S1A|L4xHY~HD&{ouBXd$z#7N8kVP*BxEd5T~7=j??S>$9^9 z3bXhpHUz^wjD4hO@aIp8l7{XYIRD{mJCHxtL^WASGiazKhh%3zf2*N|fH1{V8#EIX zT5z7d5Ti%1#CbtIiUb{FI0dZU6BLx^1?RCm5jCD~-sh8A*i9tnT zEKj&tGm&rk99%>to9!bt6E)!)3Bwu0hy=}ef`YOZoKwJvD(EJ|XIswXDMe7(P$-S4 z63@hp@T|=?ilm%UII9*m3RKAZ0>-srZ$mes&$bcE z16c4mf^6E>m&F$**igVB2z|Em_}>}k1!yKnwBR_RDpl~+ptNXVtoS+g9j=tmzDRz@ zwy|p;uOQn@3xoXptuQZ8AGc5oP`xK8sB6J71@wf0ZZgglP$Nj8Hs7pkPF7~?9M;)T z7~tpqj`KozzA(k?Z0iYAPDiA(u941rUT_*wg&BFUL@ih%s$wDMyqK6msAMxOz?gerD3Y zD3pd4HWXrhjjPq@zEXcA69s6-6BLxS z;5?$Lclz>>c86K6a#0#uu*9`3-_ic)SJTOwOSWFI?GHbVGTTfG1CPG{;yj-ZwE#<9 z&;nHN2@0xfq-5t5dhUojzJFFOQV7)NH%j`cg+j%eAASD(@8q?8gBtI>fkhWuC=9+k zqu}_1>lg(-FGPfvofn`PPf$?Sg7b)~Ofhh1P@)zr5mlY)JjK3J$&+`_C{AGaFGx0f zc7EQ^t3oa0a|`!WGlk^|3d&k=P5~ltkisT$U=?DakRZB|3>f+J*tpMfZ76K?^S2mU z@Cj4wU_djTprEV;=MhzR^S%nvpft1~M^uHkyl>a=qsz&!x+FTqQ^{spxJlH6S||Wh zP=M+^K|xsy&M9P@DHvyMGKDZbs%>IN^0OZ5`Av=u1!7PT^MX(h>?1)lo}i$t1?Le} z|I4_xa=L?|tOaEX;`1C5Vu@>$q6ux{+DfAfg%*T1Knu3fh2@ljsur9_RH5etmN+jM zC!cU@Grbc|JQuF(rbiLVHk%h38Y2?-!6*S!%nRV4;fWDRRSPaCR1=+r6bi*B*c#U+ zqDivJ<9zpz*ie8~l(9z2snzaXPbHf@JOAE##zXOSFrTUv*9O&lf`YOZoKxuZ??uZWiik%FffbK_ z8P~ENvBb5-_SiG`w;P6$o?pLn-<+4$St)3t?cx?)vhFTJ3pr)9K%p5=P*Bx^i-@XZ zKHeu#C=D&h5mgZ)kt*TG&!YoWvY8gzaj))dcwWGRY}iMF>ODb0RSPaC;5-1`6c90j zA(ptd@E!VVC)u#LNp|P2V{9l;ehxIx&_aG$EkHA#prEP+g@~$Iyw5^V3)(+MRGA~J z*cz!cqDo&QVVYc+ouPV9P*Bx^3kr{k-q)a;3NygAP-y$wJx^Ws5jj?z^l;6~a^*NT z*6kU7{;Q}3aAX4t(2OT2sA|DQTwCbnm8w)d^*en*J$QkojGz|Lc?X zc~r9Xv$kiZPkwmuBAge{F@`@cVD+A$psEEI6v8Ub_I>sA?buBuG&f`Z?^}Hq3Ne>; zDw>+rn7q`ZUX{WP`8E`yXZ~w^;EJ0JErbeb2nx`QCnzXu!FfbgM;L*iL@ik3+J4br zN69`|Q-zytHXky@4&K7W;{DW00rol!Er@4n zm=~ZKPf$?Rf{Tc%h&R}U^T~6Pp)|B0$F|m{%P~N$ImeM(kzbPe6tOso4+IpvU>e*i3>OIQ~LzU9c8P^62j+D+KAoc>rwcQ~8 zof?#e7HY$v!ynLyWj8*u?8YhND2r-qwe+-Xmw7;de5zt{#&c(=-lT={O5vqRra0w+W;{VbT?WGro8h1yP_S?si7iZ}gw-w7a(}EQHFCd^6>>{cz z+BK4M3J}kxK{pi==yjPwwHFS)-FW(oWSSmiIC`561sJ;wEoAbVV0MOPfODb0b&cdAuB~-V-o4mOM5IgdS>oE_ zxo6C$WLW#k4=l+zZA0Oij;}E_5JL-jWwij!c!GlJ8p%aORozGX-tue7ZVIKL1xrNL zcVm}-aC#d#v@rDYdxsU%Ftg3H5L5r1CP!}Fg<230PzzAKCn%_D!3Bld(*}%U;XFto z5O?(X)r~4;TH@M5f2u`uZvLI@N!T~H)87R)6k_YWc}?Z|ZyQ?3FRKM;#uF5jwctFW zDi!7hC=D&##Qj>HqxV9d?eI^R4?jHTGqPaTr}zB$7mHso+e`~X6YCuszw0m5f`EWp zfa*O#L0JpVDI|ZBwkcyw1q$61NZrwY&lL>_l_`Yf|Leuc^G}ke{{3W&Q7gvVP#Cc> z?aNN}^9(H%l+^+>;|U7NT5ujwMR;F@Xi%aSG~C(PDt=BIPuCyYW{~dh-Ztr$zlX~< zTd5ur??f#K2>9#_)q8@1vKE|EXeIhigKjE>N!3CjUc8TVglA`o3Zrmbyu;8!fZOow z49$3gg0dEzM^wQLVR%!Rp@sgUPqiFTQt4(e*=7{r2m!SqAfOhY8Bb79)`D{icSCPO zH{k)SW}zTQ7hb)8OVkIsW z7SK;=CTJnzr%!*&uM$D>AKpGS`9La_Y)0Y1s`|2O0cxRG{31|*>ODb0SqsV(MAxyn zHWdm&3j%`&DX40}MMPDY=ywfD)BCP zP-ww91u8zVA=phA?`)v}yL*Ih7IiGJp&-o*CZBC=#uF5jwctFW3U3O7($In&*CyW- zCfV%Sx%8$meNPp!iV=z0-4u4Qo-cHCPT}tRmK<1l&min3TK(=%r#5@Nf+eo4Ue=uM z8``!c53Y&KYSV^!!kF)GV-$X<_3P`u)G_iSnR3okXeKDM;3A?bLyYDa-)v|>j%%wj zO@HN*pRamQ>tB>lC7V%bE}}wVjfCz5pap2g6BJa}NG>Q4GX?b7{>QjBD+MX8EmG7B z6rdSTP*9y0Ttrmm2?`pNs0B-0TbOu}Gi|S|yf2VLC7VqIX?|W6Y60TRVWkSydxCo#6jjt5bJ!(^{W@PCgmZ<@VVNL#br5c_Dn*@ot5)SECkc2)r;N zLG_-XpsEGu6v(G9>xXLc-NQrnqm25U5H4;BTE%?9`BN9~a z2@1+ua83d9=0P_V21MssD1`EL=qKa@eiAy*hC*xTcGN;Kw_$d+%bQnTpW0Nl;3A@` z+T@XXAXGAxh8E8y5y<++SitA(HT#a9#kXKA?cjnBv-+ zCmL~W%@fZRyLPUhrKGjsqDx8Z$xE#(FG5WBwViidTbI7RzGu?{#yO>=iNW^*#@> zD%p%eRWk)*q5#bV1qBzL^LQi71&?3IEK9*Ye&HgW7hL#k_tG7$JHA4pG_)Xl&fmmO zJe!h5L*};n?fx7p*=z@6Ja_(HgY!a;i2_s~6k2fMEsVEdKxt60_-sqJU`V%OFbbu& zVA#Yj*xiDWc#&$s#r+GtUOJujYVY+FN`r#zry6~8rA0GyW|6m=_+R>9$9O8)jKb|F z7N;Gd-=Y@s%vuo51cw$Jdq^h7g!10P5-G?Yl3JLbzmLXo56Smsn>{;M$>i@yO%<^` z`P>Rg?bI=q{Scc8hNre<_r7^|i%v5r{G)H4*;kLPkxG3q_=p6HEO=gk>VruOLq`tw z#osex)bJ*04fr-Q{x7+Ed)m{dVY=ni_UYP#o1W+we=>ljK>?rU&^NEzzIXa|cytXZ zUVYqmdPNeIY(}Av#%sb6sYqZ23eZeYP;lXoR3bWyLWvYC{zx(6eI!ks@l(lW6xu?! zLv$fjC@5g{!9l^fCrlrG^X{?c6iS0aL+EYHvmGZQa>-q7PL1pS$u26{Y#JVlnsj$sAMw=NhU2w8J?l~prGL5 z^nZrvI}J*tU_JexyQVJlMIxsf*6uoHQxXj|+iXNi_w%Yy3$Xx2oV7vqK|#U!xigJ! z)v(*#7dl~y6fEb?aks?Yk$U{UREjT{$ zY$p0$gVN9fo;%}-XBGXt^PVfo=xHB5_0y>sD%ng6_xpKOs0E*>7$`vXL81l66dH)m zLJEcXV9ON3H{S5W#vAq#e(L=B8XF3a`1!9g3PKB+!W6SJG~)>h>RNDo?i|JY%D6oh zwP2h(!z7E(WMpAY{bf9(q0O{_iz3*;NDvi+7N8kVP*9&298(B4Q!wJ%GU3mW0(2_j z!6egiWh(mY4Bd`e$l*3nfMz^FL0JpVPyeezZ$oKlAy1;vke~WjC+pklFLsld*=7{* zVHvbQL_m!J!4`nLJabCqFakUv-c|K;)1lmK>4^`gj!o8+rKA@Yy#!-Oq-? zW8YlIPK=BklHmnqwE)d{f`aP2;KCoNuCIRgo|!8sl!g{8{z$KW@bphNCXoZRcK(w8 z4vX!0Uq9*-I3ZwctE^ zVYe7PU12{mvE&xo`X@D*C@<#iAj9ZatH2Lt)5- zpP$Sgqx-1}Efkg20yN_Z3d&k=?3<^}6JrpTs0DmZ(3Xpz)3KkmJ@HxFU&()NUUcmX zQAx7Ro)>2NMYqGVbH4aRcxr=YJV8NuUT{tUdKoETLLCbQ|K^Gb>V1#y)eo;y>qP{kaQ zP`xK8C~Ltv1#lom3RHZcL;f*`q?JOcpQ_M8Nm(t}`l()|&(6up*$WLVv;&Py5G9Q+ ziXCyu($C0R|IX}dTQbjiv(2=S#r?~S9Fk&kMlIOpkSwPZl(pcTLKeScq%CIhq%(6~ z{POCX{FtLwLkd-6YJ^SN9z(VT4$i2Q8?d3!hx;9G!8KBZzz6dJG~1B=WC>hgfd#N_na@Mv$LueTzJkW^PwhzLTPA0_MDH{%wI&0Ij=rCKqZ@L zp`GwxMJ7eEs&nNWax(k+0k=+GW<#NipTE`6LO_^;0yN_Z3aVOg5k(TQ zc<)e&D!iFT6x1t-tN6J=g4}lFhxVsb z8oQ}*01Hj)^tLsJWR=Bx_mI`I$wS?Huk2Jf+=fE+N<8cwwP3n`L4#&Y6q+U&ac%6| zbLELV*UwVY68Q%vC2c=1wRG|Mag{^zoN;Z11)}DZw0iuT{||9(wMB~>h=YdnGq$J5 zck_2XFe?3^Y_oX*V(&l;cr*$l5(I8}g2Gv~um&jz-WM>gtv>WNbW>p{*fIqy-*Y$)7eP!L+k z;~0PfG~)>h>RNCbQALZyM;1%ef)Ur|gP&iwg1<<%z0I@$+;Cn<5N{L|uzF8WP}hP} z3V4YTb`#BkUd|My<^#J0WVOu)TcW}!;FbmY=81QL7T}@)Pf$?Sg7b)~vzw0LV}=yo|3c<_u+nk^cZ;Qkv|vY$~MzN z%rZUDqyf$gnW6%i7od7ij7X|la6tj%*`S*WA!^V#XMk{VIgZVSLTPlNSR)m43_t;z z@dO2BEjW*;x(o8=L1}0~j%({AG(+C)RPEcs{<&1L+4;f{Ju+)gL)1c!NefWDCnzXu z!8rvH$Cf~$n*wY3W{@?mjq=NEQ^|@7FmgtiA!&-?+y!yrirapczk4P}PE) zh^j~X-tue7ZdzBAh88RlRo{(W{=w;OObapf-)VB>)?KItzex*F zy(cKBYQY7C+S3M%+7WjgDFov5>)R@2TH@M5f2u`uZvLI@N!T~H)87R)6k_YWc}?Z| zZ!-#fUNC#YKr^18psWSw5mjBUZ1K>LN)0KLh8EXJ=@}6BLxS;5?%0F7c7opu~B>5>XY_Z{Fm$60abK>O93x z-BPJ!Gc9PMCe%U!n8F7Gs`ms1Wi2?TFw{)JcxINP3&VJD;SeI80zzykz(I~NFC_4q zK?~4~CnzXu!FfbgSN+n2O*1qo4K2uVZIQWEwoRHajVvJ>Q?A+1V*kxH)50+RbUhBW zP-M~qRPPB2%35$vp@Ycij}!`L^1dXNxVCT-Rp*lKggh0p+;{a;AvP4oil=Ks3#6&=nm&g(x7 zBtH8zm2CFxd}_>R&+Ix_0$M=4@azoLdxCu z8UE4(_(3WRC}oc_F8a7AQ312@0xOP>84^V#qMGAjh?Z z@6ca6$%e&EvO9krLnWJOp){gOzbQ<*5eBOF1O-(ss8bLuSgtS?3gX#0pVtK=l9wo` zYQaTB)&KBbp7MJ7uc`$X6!OHUA8$vZ@S(Lt7lw%!In(ya%KHL2Hn$_C`FT}1FMtOU zJUc@(o*0o-wcsM6Dr)tikJ;ung%allOGH)8Cw6pgF=!~+F?8pkYuUUY*=$}2`_HP6 zzkhEMu946&hVLU`^`4-hss$Gms%5=5xmQ6;>?U&C&+qizQ&?i5P%rQB;fhl}rJ?is zyb}4JpKK^Zz47{$@1ahocIW;{VbSqsi1sye`k1SM(#pMfMz^FK~)PbBC5XdZJGblz6=dYLkn_TTlASb+W)?35_#ZYue7!Ig;2?6ac$K{ zoLJj_@kgiyb6gu#?+FU3T2QATl)>((QlY?~7b3-223oMC(4r;Y*VeQ}%X8hycCMeL zbZ*7}(kY#f^HKxZxr%E`Ki7S2g~g(GQaU%_-(0}Bwz{Hb4N5}`7)1hqKtm5#%0FCb zG5O@shE_{|EtYLIBKbs3pamS-fC5x+)7ym-!eF5XzVBkOsg<>=h!I%(? zE+nT{J+6NdoxykWi)<(WH=GwB=X_e%-uiw9G~)>hXPp;{k-|S|!F5CxggjZafN^bd zM3rQ-jxLR;;y2Fw#9tY-U>i|&(P}}Jg6KLnFW`veh60}#!UMc64^mLqg42j9OaY7~ zYJp}79!P`M;GQtOh`7QqL$;X~8u&%GLo5#rZGr+;?}-sfeO^$dAo`x|sb-4rTu~5O zC=yV_4n~2f&Jz@rwctFWDinGfN<$0KZCV}ib6TbS_HlPq=|IFaZ8@^dv`|mH6W2%t zO!4dt)q8@1vKAaupaIcYctBYQorgn+K_QGWU?7MXn0ne!xE{J4V?2ww4I@%O{Lm8= zRJGtDq6#9Z{wHy57wH;For3ttvUwpveCH~XMpVnkA%7hK$$*Y(t=Uqw%g zM+$}4wO{;U;E_nneQm8-c5Rkon>_t~)XLRg25cxiG;;3Du6vX4**QW?$Up&_@dO1` zEx3rNs(XZAn@6EEv>?Z|g;%bzaoNB7kR!2a?7s{u*-Q&n3iVqMm!cN@CM`hqo}i$r z1s4>qd;8Ca^8PyqDFm9u{FRYf#d=>`=wqK$S-t6NvODSSyB98G*$d577=_pq`maVC zTJUiUpap2g6BLxS;5?$L$C-}LR(r1xh0@T%O?)1Bj^4|2M-HM<+b{XOb=0lo&H2Ly zeA2r>wi$&x=64U7xJ$o5lJ6tsnX~}adxC@(%8n+UpV-76T*weGh~~cwS{JgAqcdPFMd%_!0J6gL0JpVDa47+!fq-QT^VAb z5UoRKJcGnXuKFUsd%%u@=yyX4gx3rdpczk4P}YL;h^iq#0ZKy)mWZm{8)k?0u19_v zvG$u0Yj@Kyv(5IAsHh3&g#s|eJ`z;#2@1+ua83c^+Mt`LPjsF&x=@a5vrv%Z+F*bZ z6l~+#F4AXb7x%T{O<_s31`03N%@~cFU{D-$sO+Jun zL*c=y`r=lqK?-=-?GAb0@<+Z>YRbVO3t zg7b)~e*Fg|9Qbb^3ZBVc;fN_zve~oqu{Jkmzy6%Qo2SnU zcx)snVD-VF1?Ln-w9ESJOu;zpCK_6N>7wY@t6SpQ>R)!I-;>+Bkcsb3`Knw0@ir8S zZ*TR%bBBC}7V@}yfC4n*2@0xOa1l|}8N7d?G_)W`R7Ka+Up2^gMRV8G{kZ~_Y^DYA z8`-D@^C=Hh?+FU3Ya|yG#9eoHQRt=sPip>gzBR7xHvS^(cwSYOSIq=Es3oaaIjY!cIHlHYNbq&r7=D0Sf z-V+p5wcwlr*_%LGuRM{26auaH#MV08VxEOU#7oak2)*icGA-rG{rh|Mv7u0P=`+uq z`FfC{g@iI%z-Bx_L3Lipa2`b3-`$&;FW#$EhY^Kn%^uD&1tS@Y3gO5kC0*beYrBD;`hQFG`y&r+NTQO>w29-@D)8x1rG0&wmvtBu5krQ_Ks{j3+3l zk4R3V3$-xbS0PxU`Yh3fjUd~(j)Hwr$z~%`ZNKPt@WBup7`Uej&3J+Wjzm~upPc`Q zOn2wNQ5Q!$$5`Rjwxv2qO*_!p7K~IpwG4+-fyJ<-rqPP!4m?kk)WC2 z7?H{kg=FwR@*oA(5y?fQ?GkqT0`o7WP@?)!6Go(MOL0R0nHX{To%avhMkSk#NKrgm zv>lE}nL;!$B0=?@&;pJ`SYn@??}+4rLN0f@*oG9~9?wh*g+~0TZ63+K@sVXWKC;Ay zLi7pUsirxONH>@$Kr^18pt?qKK|#`j=sKIIbLq2hL!nd)`iCglbo!5wJwZWvL~raE-Z`FY=2J4PedPz1WSpjw%})QH;dhZ3(S&>WJhb>b%~%qs_lqJdi?(>a*OY8lE%y;9bqflVjmq+Ml{V zfl9XSk94wbhpU&~f@>tdX+(nRJ)s30iLk^zIo}b<1qENP&sKc0a0*fg+?9AbKd(`- zOo9A%$5k&c`S&{VLDx$UE|{ETL!m~Wl%j~`@i-zi5)?!ZNeaz)f`aOZa)iF ze>HgWpQ%;ItFw}{Udfp>(rhydSv?m$J@t+yI3nelMkJ`-6I#HL2utjf^B$3$Q|O$2 z;P8Mc+mJ$_>*!i5JCCtuV2F6)<|ody%posqKbbRNC%ZMzLgB8?udli>vIs{c_`8D^ zpczk4P#%$-Q|LBXPhSy03MAs&)L}cmwNi+>;g|ouJ!3K{xGD9w9gD`>P{@qdb6xBP z3dttlJPOTtf`alI$$18bE@I%&phWdqGB6~)%`;$-L0`2@pFLr?8%k4X^sm$En#i6p9QA`d?pb0;V|Sfo42G zL3u=SPNADbK|E_&vyt4$a*?ovBqUqVu%WQqL?JmcliOlm(4ZMlP*5I`oae#F1`1H3 z`mA{{-q`r!kcl11&w4VFZ*pju*=8SpB5J}lQURDk3sAi$DBwthCHBdAk4Vlb3=^HD zK{rt!*m6#o@T>Q4iTWUy9A`J3cdClwY$WCM*%?P7 zEU{0{dqi?hVOZn?-?M`O4RgbUy{7*`frUbq1Mk&8(PcjgJe#$%X6iO-r7-mFsVwK} z5gd^)If%ptG=>Fa*a!Ax3m6NfRj=Y$&ufDCmEEt+|N;G~)>hsw0vM3dN$ckb3_cX z4s%b*y)N4(E$9@IBSj6cn^!EV^8^Lu5y^RGp7i!rAE@(K8if+oXUWV{ZQiRZ7xh{| z`W#y@WYbUCRI(X`&?{0eIo0iQ7?Gs>NKm~eDCi%evM=nD^B$3$Q@|`$&`spn)3*`DHF@fp&gKPe#?&LZRiX z6Y0aEePq>_+j@_B1r)Radd|1+&f0+S>4ZSGsQ=&&*@aQU%p}f&%{(mH8j`$@z{*E+|mp`ADIg z0%8pmuuzET%wJ?vf1N{#4Fv*25JcK0nMNdN#uF4&M%QefqY6smG6ehY=jw){mt z`a1l#DI1pAP-rV^GDf6gjsZp_XvPy1R7WHiS*jirA6X4bRG&3hSlid`dFrx{$g$$2 zhihJzOGC{zn~pR5qT69aGUp0|>ODcB%wWX7#XdRT5y=IGS!N0}1MF!~J}F9Tt}qJ) zbFMJ$X7P(c3mP=z2@0wsk_!qmpts?}YIw|BDCnspuX>Q2YFNALm`zDGT1fZvs&GV# zBEl5AdC-g}D5#D|&U1y)DmTA=d+&BDu|)M*a)tReuDCxZG@g7vdf>zfvj~-Jwnhqj zazXJuzx|DCBuvO4_K~0&Pf$=Dkz7!SYW#A?-BcuZ(B9~%u$2FErW+`*!O3^ zLLs(ktv>=4kB~LDy_uLWdYcV}sE~Gtea|g7MkF!Az#0jf@dO3s5y^Spye@q74zc(n z!49bgvo($6>(Ecg@9=yf*=&uJAZo%92@~~*c>$X71O??0$vK5iW(r1rB$-0Qef&iZ zos|MQAi+}`WXgjz5;Wrp3d$pra|)P45 zqjI z-69r>^~@w3kxbbOv3gHXP#uw6P>AlrkN>fow6NWw1JieuSSZx%K7U+(N<;GT?pfDQ z9UWprAz~7{ZFOCDTqAV^Y4CX=8JkJz)FU~gQ(D)a35khK%jvnZ>WJimLevv_aA9kt zKnL7#X~j-&hgc}oy=G2_@Ie*G*2^Co(f`|c8w!zxvg=geH`YjEY!f3=GB#6|Li6TH zcsmmNwolf`Q6mNqA3AcdFKyI)zLZg82m7>^0_C}WmXa>k0V(OT`J2&u#8nQ-4qf{C z`krk>Dl8U%o0RlW{>=rDvSayO<|2xAE1bpDp;PN zpsoeS8Qa=`7NE3f0W-G6o?i9%=~dIoBe!lRv&JV;$z~Kr`*~HU1)r!Gv;ft6f`Ymh z98-X;PYt?>647~!(%D)6XJ`$?8$k=uj3+24Yr%PzDo7@!L1}0~tTRLK6HaT-N@DjS?I&~iYo2Vg zZjXa*2Q3g21*qN=6qL2#oI;f7ETn)7Oe#~r5osa6o62WHL0ThSZ=wLrc!Gke7F^^< z!Yox#8d^vII?#Po&Qc}WObex1s(AcDW?2dps`ms1RV}!nFe2y0FR#8S2fGP!h4nE` zK9NEl9_H`>=`rxqBY!T)m8mcaG0XJSJq>V;WX{Y3&3J->vKE|Y=IMIs)32hZ#ZxE^ zEr6#yeGGQ8Aihj(bGtej7pde?dlBh5WQkE*n2?G@DvQ(AV9Sl`1xX1}p=dF`{-zb_up)|Bm zi)-LH+JHq#vAt3nHZjg$@xkR}|4Vase^fCux-S8ro&BbH0jduQEvQov zUB}`VR4C|@#!E~<3tpn2tOe)UNbXwj(L_3~Errt10^zgqcsc>{tyaCa>)QXEm_>Fz zb?+Nd;}25FW?JZx|5CkY=3x8+E_HzdR398#a86hrB+`(^Fl&wn!2hCNLz|()AfX~hr z3e8#G1@=X4{EzKpSRr#w)7aA?6fg;8b-)CabO0#8QLko*lfVI(Sy z0ujH7^Fkt+f&w(-2?`fzUeHg_~FQA)@ z3=A@b=%UyWmn{8^to85AzP2TcYco?}6tehp-U8G@GZO{7Y$O-!yx=_Q98Y<$L@nTH zj}dha@lqslFcY!AREjJB_;}9I^|K-f(r^^qO*`fp-HII{^5NCKfqQN)0hfRs=aRMZDV2?7!Y1;G+597QFEh=__$kVCLt z6g-NGp(tIWpn~oGvoqiC0%CCGZ3Tx(^F2IH2&Tk%Ejil*Tytk zMKjMyL6@{fM8`k@hVcXi*Xu&|xQRL0gD0`A^B9Y*vp+MnM{hPk5Wl7GooURPBOkr7 zqYAdD1ygom&3T{oXf<>s`E2C&p;zyTql(S0NRi*J{%GGnWflnriHRrMFpMWCxLz0R zQ@|Wgn5JO!ML%pm(JNr0pyqg*DHwA+H7!&N)GEibtgZ{0_Ve0cvT)K+3!0kO7AgGD zWINnbDK=9W-kQRG0Ymk~t__9>4=vcIfLxoq|AzYKUtT9+`yBFW%_%$kZ6~VD zvI}GP@PH(|M}jmIK>@q>1O>P2f&&VbC-6g1ahkL$9|Rwa8k=XzYpauRP2h(4JIGsG zruTgD_rn$xVs6!sW&IiV3#lLtenm>gVM6oTl3KLld2KD5HfP^vjvjpbup#3NQy{wV z`Ofvbl#ILh+furVXh5yM_^Xa>lh`dok}&$EcJ0&2(6!M(7h`Ak@a3#|ZJX+g&QdZm z`8Ve=uMJY2@QiG!g}=(EQZlUAx=>U68$k>B-vw7BtBk6PmBL@Q3huRFo5BrZve0)g_s)1l zLJINwH#XkCu?d;^!Q;n%i3?az7$+&{!b^_I<2?ff7{(J6+-t#hMpZqa04-{PX2H+> zqNPK4M%Bv{E;Opmv`|~T6W0Y;7gM`-NoBu;?ma=ly%ua!fHf7TsW1m-JxjEjAM8xg zk`k~LDi-TPK7S`@0fzAe1=m`zpHT%{T+B+7TF4W#jh}GZhWiz^k|QJaSGH<13e^H) z+F@NFq644+!+3&%Yc1HPP*qG8QYg$4HU|4j3Qct9&imEL+oG(h6$O}fyhkeFHc)_J zJVC*&7F=XhLCTZVLXwzMjFhBmMwMbSEtF&}@WmH|PcdBl+;DEx55E+m8ZLN9I z$a=YNz`Qp2Ik_+T^4sqowN<6UD8%qhct_YfCr1^9Xo12o;h_cR8C8(-B(7!-}Q<`4W_wu+oQVYeQT7Y4~LJJNus_OY0^y-tfl0qxBV9Ka^W!r*d?c0(= z3ERKRe~X+%E(ST7d37LBZ|1;DAEIn(^fqUpfgX5OLyszA3LQ zdcoLX&#wBM{O9*3ThBZZw4%_n`}H5U`n%LZNvIZJ7*9}edynMc#Q7nWUYa*PVL63X zYC+AYio2HwO zaIFRV8CBq?#N*Xa3%E~^d2J1zz5CF!cONF*Hy>wTnN+dao$5BR5}+3HL$!e2dxC;% zE!d|3WsGo|3Jb*KnJCoKlM7G&i*$@nX*BA}SPKd}BnAFVH9CU#1bb%~#uF4=Yr%d- z)o_?~Xr&eg!OwFPi3j+5%u0boc&{6P^d2Kb8*S>jrz2)QtjoJ~}lu*TH zTIel$LM;@D4uAr5A0Aq8O+ic@(}EicLJLWuTJRDDw_0$JQPmVa^U$IeOc_;q;(g>> zk)?o7zR_k{XcQ3B4*rD_@duy<=sqm8;D7?gV8ApLichf5MB!mE`-DGE+F9O$LIX)b zXdzQT5fPH%6ocU)ukEGl@`rbrbecjdwV>v;wg1nDkGF5Qm27PAMgCQPFQSUg_Rh

XWByd;h_cld2P? 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%0Dvx1M;(-@=8v@qISn9%PvUqx@S6c*v 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 literal 0 HcmV?d00001 diff --git a/example_data_specs/adtte.xpt b/example_data_specs/adtte.xpt new file mode 100644 index 0000000000000000000000000000000000000000..039e2e1e43a8e951fdb77a3f4dacb4b96c82fe1e GIT binary patch literal 73520 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 literal 0 HcmV?d00001 diff --git a/example_data_specs/readme.md b/example_data_specs/readme.md new file mode 100644 index 00000000..f4b3e9ba --- /dev/null +++ b/example_data_specs/readme.md @@ -0,0 +1 @@ +Data taken from Pilot 3 Submission Study: https://github.com/RConsortium/submissions-pilot3-adam From 3132916c0e70a2c3695cbf553784620a83168323 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Mon, 1 May 2023 17:35:23 +0000 Subject: [PATCH 068/337] docs: #84 ignore folder data and specs stored to pass build --- .Rbuildignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.Rbuildignore b/.Rbuildignore index fa0fd94b..92480277 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -22,3 +22,4 @@ ^advs\.xpt$ ^advs_Define-Excel-Spec_match_admiral\.xlsx ^cran-comments\.md$ +^example_data_specs$ From 45692feff828636896db14648fed5c6298175c14 Mon Sep 17 00:00:00 2001 From: vedhav Date: Mon, 1 May 2023 23:53:38 +0530 Subject: [PATCH 069/337] feat: adding tests to increase the coverage --- tests/testthat/test-metadata.R | 4 +- tests/testthat/test-pkg-load.R | 10 +++++ tests/testthat/test-type.R | 33 ++++++++++++++ tests/testthat/test-utils-xportr.R | 28 +++++++++++- tests/testthat/test-write.R | 69 +++++++++++++++++++----------- 5 files changed, 116 insertions(+), 28 deletions(-) create mode 100644 tests/testthat/test-pkg-load.R diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 22fd0c47..850e4426 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -165,7 +165,9 @@ test_that("xportr_df_label: Correctly applies label when data is piped", { df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", label = "Label") - df_spec_labeled_df <- df %>% xportr_df_label(df_meta) + df_spec_labeled_df <- df %>% + xportr_df_label(df_meta) %>% + xportr_df_label(df_meta) expect_equal(attr(df_spec_labeled_df, "label"), "Label") expect_equal( diff --git a/tests/testthat/test-pkg-load.R b/tests/testthat/test-pkg-load.R new file mode 100644 index 00000000..2a1c0a19 --- /dev/null +++ b/tests/testthat/test-pkg-load.R @@ -0,0 +1,10 @@ +test_that(".onLoad: Unset options get initialised on package load with defaults", { + skip_if(getOption("testthat_interactive")) + withr::with_options( + list(xportr.df_domain_name = NULL), + { + expect_no_error(.onLoad()) + expect_equal(getOption("xportr.df_domain_name"), "dataset") + } + ) +}) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 88f2d770..df2d3fa1 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -63,3 +63,36 @@ test_that("xportr_type() retains column attributes, besides class", { expect_equal(df_type_label, df_label_type) }) + + +test_that("xportr_type: expect error when domain is not a character", { + df <- data.frame(x = 1, y = 2) + df_meta <- data.frame( + variable = c("x", "y"), + type = "text", + label = c("X Label", "Y Label"), + length = c(1, 2), + common = NA_character_, + format = c("date9.", "datetime20.") + ) + expect_error(xportr_type(df, df_meta, domain = 1)) + expect_error(xportr_type(df, df_meta, domain = NA)) +}) + +test_that("xportr_type: works fine from metacore spec", { + df <- data.frame(x = 1, y = 2) + metacore_meta <- suppressWarnings( + metacore::metacore( + var_spec = data.frame( + variable = c("x", "y"), + type = "text", + label = c("X Label", "Y Label"), + length = c(1, 2), + common = NA_character_, + format = c("date9.", "datetime20.") + ) + ) + ) + processed_df <- xportr_type(df, metacore_meta) + expect_equal(processed_df$x, "1") +}) diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 93de69db..64ae8237 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -2,11 +2,11 @@ test_that("Get magrittr lhs side value", { x <- function(df, var) { get_pipe_call() } - + y <- function(df) { get_pipe_call() } - + expect_equal({ mtcars %>% x("cyl") }, @@ -16,3 +16,27 @@ test_that("Get magrittr lhs side value", { }, "mtcars") }) + + +test_that("fmt_vars: the message returns properly formatted variables", { + expect_equal(fmt_vars(4), "Variable 4") + expect_equal(fmt_vars(4:6), "Variables 4, 5, and 6") +}) + +test_that("fmt_labs: the message returns properly formatted labels", { + expect_equal(fmt_labs(4), "Label '=4'") + expect_equal(fmt_labs(4:6), "Labels '=4', '=5', and '=6'") +}) + +test_that("xpt_validate_var_names: ", { + xpt_validate_var_names(c("A", "Bajskflas", "2klsd", "asdf_asdf")) + expect_equal(1, 1) +}) + +test_that("xpt_validate", { + df <- data.frame(A = 1, B = 2) + attr(df$A, "label") <- "asdfkajsdkj_fhaksjdfkajshdfkajsdfkjhk.xpt") on.exit(unlink(tmpdir)) - nameover8 <- data.frame(a = c(1, 2, NA), - b = c("a", "", "c"), - c = c(1, 2, 3)) + expect_error(xportr_write(data_to_save, tmp, label = "asdf")) +}) - expect_error(xportr_write(df, path = tmp)) +test_that("xportr_write: expect error when label contains non-ASCII symbols or special characters", { + tmpdir <- tempdir() + tmp <- file.path(tmpdir, "xyz.xpt") + on.exit(unlink(tmpdir)) + expect_error(xportr_write(data_to_save, tmp, label = "")) }) -test_that("Format message given if unexpected formats", { +test_that("xportr_write: expect error when label is over 40 characters", { tmpdir <- tempdir() tmp <- file.path(tmpdir, "xyz.xpt") on.exit(unlink(tmpdir)) - df <- data.frame(USUBJID = c("1001", "1002", "10003"), - AGE = c("M", "F", "M"), - BIRTHDT = as.Date(c("2001-01-01", "1997-11-11", "1995-12-12"), "%Y-%m-%d")) + expect_error(xportr_write(data_to_save, tmp, label = paste(rep("a", 41), collapse = ""))) +}) - # Forget the period in date9. - attr(df$BIRTHDT, "format.sas") <- "date9" +test_that("xportr_write: expect error when an xpt validation fails", { + tmpdir <- tempdir() + tmp <- file.path(tmpdir, "xyz.xpt") + attr(data_to_save$X, "format.sas") <- "foo" + + on.exit(unlink(tmpdir)) - expect_error(xportr_write(df, tmp)) + expect_error(xportr_write(data_to_save, tmp, label = "label")) }) From 77d521dde811c50f5c5367ac7feef455c6844330 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 2 May 2023 00:07:46 +0530 Subject: [PATCH 070/337] chore: lint the files using tidyverse styleguide --- tests/testthat/test-type.R | 34 ++++++++++++++++++------------ tests/testthat/test-utils-xportr.R | 22 ++++++++++++------- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index df2d3fa1..acab855a 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -1,4 +1,3 @@ - meta_example <- data.frame( dataset = "df", variable = c("Subj", "Param", "Val", "NotUsed"), @@ -6,29 +5,36 @@ meta_example <- data.frame( ) df <- data.frame( - Subj = as.character(123, 456, 789), - Different = c("a", "b", "c"), - Val = c("1", "2", "3"), - Param = c("param1", "param2", "param3") + Subj = as.character(123, 456, 789), + Different = c("a", "b", "c"), + Val = c("1", "2", "3"), + Param = c("param1", "param2", "param3") ) test_that("variable types are coerced as expected and can raise messages", { + expect_message( + df2 <- xportr_type(df, meta_example), + "-- Variable type mismatches found. --" + ) - expect_message(df2 <- xportr_type(df, meta_example), - "-- Variable type mismatches found. --") - - expect_equal(purrr::map_chr(df2, class), c(Subj = "numeric", Different = "character", - Val = "numeric", Param = "character")) + expect_equal(purrr::map_chr(df2, class), c( + Subj = "numeric", Different = "character", + Val = "numeric", Param = "character" + )) expect_error(xportr_type(df, meta_example, verbose = "stop")) expect_warning(df3 <- xportr_type(df, meta_example, verbose = "warn")) - expect_equal(purrr::map_chr(df3, class), c(Subj = "numeric", Different = "character", - Val = "numeric", Param = "character")) + expect_equal(purrr::map_chr(df3, class), c( + Subj = "numeric", Different = "character", + Val = "numeric", Param = "character" + )) expect_message(df4 <- xportr_type(df, meta_example, verbose = "message")) - expect_equal(purrr::map_chr(df4, class), c(Subj = "numeric", Different = "character", - Val = "numeric", Param = "character")) + expect_equal(purrr::map_chr(df4, class), c( + Subj = "numeric", Different = "character", + Val = "numeric", Param = "character" + )) }) test_that("xportr_type() retains column attributes, besides class", { diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 64ae8237..2e202156 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -7,14 +7,20 @@ test_that("Get magrittr lhs side value", { get_pipe_call() } - expect_equal({ - mtcars %>% x("cyl") - }, - "mtcars") - expect_equal({ - mtcars %>% subset(cyl == 6) %>% x("cyl") - }, - "mtcars") + expect_equal( + { + mtcars %>% x("cyl") + }, + "mtcars" + ) + expect_equal( + { + mtcars %>% + subset(cyl == 6) %>% + x("cyl") + }, + "mtcars" + ) }) From 80a46a636e0a396e796898857ec5967e9b98604f Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 2 May 2023 20:33:09 +0530 Subject: [PATCH 071/337] feat: add additional test case for .onLoad() --- tests/testthat/test-pkg-load.R | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/testthat/test-pkg-load.R b/tests/testthat/test-pkg-load.R index 2a1c0a19..82341de1 100644 --- a/tests/testthat/test-pkg-load.R +++ b/tests/testthat/test-pkg-load.R @@ -8,3 +8,14 @@ test_that(".onLoad: Unset options get initialised on package load with defaults" } ) }) + +test_that(".onLoad: Initialised options are retained and not overwritten", { + skip_if(getOption("testthat_interactive")) + withr::with_options( + list(xportr.df_domain_name = "custom_domain"), + { + expect_no_error(.onLoad()) + expect_equal(getOption("xportr.df_domain_name"), "custom_domain") + } + ) +}) From 019be6811509c8d6559b7d4e8dc076cc0cb55afd Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 2 May 2023 20:54:04 +0530 Subject: [PATCH 072/337] feat: add missed tests for the xportr utils --- tests/testthat/test-utils-xportr.R | 70 +++++++++++++++++++++++++++--- 1 file changed, 63 insertions(+), 7 deletions(-) diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 2e202156..527fda84 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -34,15 +34,71 @@ test_that("fmt_labs: the message returns properly formatted labels", { expect_equal(fmt_labs(4:6), "Labels '=4', '=5', and '=6'") }) -test_that("xpt_validate_var_names: ", { - xpt_validate_var_names(c("A", "Bajskflas", "2klsd", "asdf_asdf")) - expect_equal(1, 1) +test_that("xpt_validate_var_names: Get error message when the variable is over 8 characters", { + expect_equal( + xpt_validate_var_names(c("FOO", "BAR", "ABCDEFGHI")), + "Variable `ABCDEFGHI` must be 8 characters or less." + ) +}) + +test_that("xpt_validate_var_names: Get error message when the variable does not start with a letter", { + expect_equal( + xpt_validate_var_names(c("FOO", "2BAR")), + "Variable `2BAR` must start with a letter." + ) }) -test_that("xpt_validate", { +test_that("xpt_validate_var_names: Get error message when the variable contains non-ASCII characters or underscore", { + expect_equal( + xpt_validate_var_names(c("FOO", "BAR", "FOO-BAR")), + c( + "Variable `FOO-BAR` cannot contain any non-ASCII, symbol or underscore characters.", + "Variable `FOO-BAR` cannot contain any lowercase characters." + ) + ) + expect_equal( + xpt_validate_var_names(c("FOO", "BAR", "FOO_BAR")), + c( + "Variable `FOO_BAR` cannot contain any non-ASCII, symbol or underscore characters.", + "Variable `FOO_BAR` cannot contain any lowercase characters." + ) + ) +}) + +test_that("xpt_validate_var_names: Get error message when tje variable contains lowercase character", { + xpt_validate_var_names(c("FOO", "bar")) + expect_equal( + xpt_validate_var_names(c("FOO", "bar")), + "Variable `bar` cannot contain any lowercase characters." + ) +}) + +test_that("xpt_validate: Get error message when the label contains non-ASCII, symbol or special characters", { + df <- data.frame(A = 1, B = 2) + attr(df$A, "label") <- "foo Date: Tue, 2 May 2023 21:13:23 +0530 Subject: [PATCH 073/337] Update tests/testthat/test-type.R Co-authored-by: Ben Straub --- tests/testthat/test-type.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index acab855a..759f2060 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -11,7 +11,7 @@ df <- data.frame( Param = c("param1", "param2", "param3") ) -test_that("variable types are coerced as expected and can raise messages", { +test_that("xportr_type: Variable types are coerced as expected and can raise messages", { expect_message( df2 <- xportr_type(df, meta_example), "-- Variable type mismatches found. --" From 06203de63a1dd78b9135f6972f7fe443039429d5 Mon Sep 17 00:00:00 2001 From: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Date: Tue, 2 May 2023 21:13:30 +0530 Subject: [PATCH 074/337] Update tests/testthat/test-type.R Co-authored-by: Ben Straub --- tests/testthat/test-type.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 759f2060..f554f6bb 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -37,7 +37,7 @@ test_that("xportr_type: Variable types are coerced as expected and can raise mes )) }) -test_that("xportr_type() retains column attributes, besides class", { +test_that("xportr_type: Variables retain column attributes, besides class", { adsl <- dplyr::tibble( USUBJID = c(1001, 1002, 1003), SITEID = c(001, 002, 003), From 91285f07ec4a42142ded872a6d3fa7c25e53e820 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 2 May 2023 21:25:29 +0530 Subject: [PATCH 075/337] chore: fix lint errors --- tests/testthat/test-utils-xportr.R | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 527fda84..291a4d73 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -101,4 +101,3 @@ test_that("xpt_validate: Get error message when the variable type is invalid", { "Variables `A` and `B` must have a valid type." ) }) - From 38c0df156f4aba52d01bcf951545e7c0354cb504 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 2 May 2023 12:59:11 +0000 Subject: [PATCH 076/337] Change `metacore` variable to `metadata` in examples Add `set_metadata()` function for simplifying pipelines Metadata and domains must currently be repeated in each step of a pipeline. Adding them as attributes to the main object means they can carry through a whole pipeline without being repeated --- R/df_label.R | 17 +++-- R/format.R | 23 +++++-- R/label.R | 30 +++++--- R/length.R | 26 ++++--- R/messages.R | 26 +++---- R/order.R | 29 +++++++- R/set_metadata.R | 9 +++ R/support-test.R | 39 ++++++----- R/type.R | 53 ++++++++------ R/utils-xportr.R | 107 ++++++++++++++++++----------- R/write.R | 12 ++-- R/xportr-package.R | 8 ++- R/zzz.R | 2 +- README.Rmd | 20 ++++-- man/xportr_df_label.Rd | 4 +- man/xportr_format.Rd | 4 +- man/xportr_label.Rd | 4 +- man/xportr_length.Rd | 4 +- man/xportr_order.Rd | 16 +++++ man/xportr_type.Rd | 4 +- tests/testthat/test-length.R | 3 +- tests/testthat/test-messages.R | 94 +++++++++++++++++++++++++ tests/testthat/test-options.R | 4 +- tests/testthat/test-type.R | 62 +++++++++++++---- tests/testthat/test-utils-xportr.R | 26 ++++--- tests/testthat/test-write.R | 24 +++---- vignettes/xportr.Rmd | 15 ++-- 27 files changed, 467 insertions(+), 198 deletions(-) create mode 100644 R/set_metadata.R create mode 100644 tests/testthat/test-messages.R diff --git a/R/df_label.R b/R/df_label.R index 18899604..3e56d7bc 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -20,14 +20,13 @@ #' SEX = c("M", "F", "M") #' ) #' -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = c("adsl", "adae"), #' label = c("Subject-Level Analysis", "Adverse Events Analysis") #' ) #' -#' adsl <- xportr_df_label(adsl, metacore) +#' adsl <- xportr_df_label(adsl, metadata) xportr_df_label <- function(.df, metacore, domain = NULL) { - domain_name <- getOption("xportr.df_domain_name") label_name <- getOption("xportr.df_label") @@ -39,8 +38,18 @@ xportr_df_label <- function(.df, metacore, domain = NULL) { ## End of common section - if (inherits(metacore, "Metacore")) + ## Pull out correct metadata + if (is.null(metacore)) { + if (is.null(attr(.df, "metadata"))) { + stop("Metadata must be set with `metacore` or `set_metadata()`") + } else { + metacore <- attr(.df, "metadata") + } + } + + if (inherits(metacore, "Metacore")) { metacore <- metacore$ds_spec + } label <- metacore %>% filter(!!sym(domain_name) == domain) %>% diff --git a/R/format.R b/R/format.R index c874fe7e..36143ac1 100644 --- a/R/format.R +++ b/R/format.R @@ -20,15 +20,14 @@ #' BRTHDT = c(1, 1, 2) #' ) #' -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = c("adsl", "adsl"), #' variable = c("USUBJID", "BRTHDT"), #' format = c(NA, "DATE9.") #' ) #' -#' adsl <- xportr_format(adsl, metacore) -xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.format_verbose", "none")) { - +#' adsl <- xportr_format(adsl, metadata) +xportr_format <- function(.df, metacore = NULL, domain = NULL, verbose = getOption("xportr.format_verbose", "none")) { domain_name <- getOption("xportr.domain_name") format_name <- getOption("xportr.format_name") variable_name <- getOption("xportr.variable_name") @@ -41,8 +40,17 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo ## End of common section - if (inherits(metacore, "Metacore")) + if (is.null(metacore)) { + if (is.null(attr(.df, "metadata"))) { + stop("Metadata must be set with `metacore` or `set_metadata()`") + } else { + metacore <- attr(.df, "metadata") + } + } + + if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec + } if (domain_name %in% names(metacore)) { metadata <- metacore %>% @@ -56,7 +64,7 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo format <- filtered_metadata %>% - select(!!sym(format_name)) %>% + select(!!sym(format_name)) %>% unlist() %>% toupper() @@ -64,8 +72,9 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo for (i in seq_len(ncol(.df))) { format_sas <- purrr::pluck(format, colnames(.df)[i]) - if (is.na(format_sas) || is.null(format_sas)) + if (is.na(format_sas) || is.null(format_sas)) { format_sas <- "" + } attr(.df[[i]], "format.sas") <- format_sas } diff --git a/R/label.R b/R/label.R index f125569e..c9130d19 100644 --- a/R/label.R +++ b/R/label.R @@ -22,16 +22,15 @@ #' SEX = c("M", "F", "M") #' ) #' -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = "adsl", #' variable = c("USUBJID", "SITEID", "AGE", "SEX"), #' label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex") #' ) #' -#' adsl <- xportr_label(adsl, metacore) -xportr_label <- function(.df, metacore, domain = NULL, +#' adsl <- xportr_label(adsl, metadata) +xportr_label <- function(.df, metacore = NULL, domain = NULL, verbose = getOption("xportr.label_verbose", "none")) { - domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") variable_label <- getOption("xportr.label") @@ -44,8 +43,17 @@ xportr_label <- function(.df, metacore, domain = NULL, ## End of common section - if (inherits(metacore, "Metacore")) + if (is.null(metacore)) { + if (is.null(attr(.df, "metadata"))) { + stop("Metadata must be set with `metacore` or `set_metadata()`") + } else { + metacore <- attr(.df, "metadata") + } + } + + if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec + } if (domain_name %in% names(metacore)) { metadata <- metacore %>% @@ -65,18 +73,22 @@ xportr_label <- function(.df, metacore, domain = NULL, # Check any variable label have more than 40 characters --- label_len <- lapply(label, nchar) - err_len <- which(label_len > 40) %>% names + err_len <- which(label_len > 40) %>% names() if (length(err_len) > 0) { warn( c("Length of variable label must be 40 characters or less.", - x = glue("Problem with {encode_vars(err_len)}.")) + x = glue("Problem with {encode_vars(err_len)}.") + ) ) } for (i in names(.df)) { - if (i %in% miss_vars) attr(.df[[i]], "label") <- "" - else attr(.df[[i]], "label") <- label[[i]] + if (i %in% miss_vars) { + attr(.df[[i]], "label") <- "" + } else { + attr(.df[[i]], "label") <- label[[i]] + } } .df diff --git a/R/length.R b/R/length.R index 5a9966d7..edbeb93a 100644 --- a/R/length.R +++ b/R/length.R @@ -20,16 +20,15 @@ #' BRTHDT = c(1, 1, 2) #' ) #' -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = c("adsl", "adsl"), #' variable = c("USUBJID", "BRTHDT"), #' length = c(10, 8) #' ) #' -#' adsl <- xportr_length(adsl, metacore) -xportr_length <- function(.df, metacore, domain = NULL, +#' adsl <- xportr_length(adsl, metadata) +xportr_length <- function(.df, metacore = NULL, domain = NULL, verbose = getOption("xportr.length_verbose", "none")) { - domain_name <- getOption("xportr.domain_name") variable_length <- getOption("xportr.length") variable_name <- getOption("xportr.variable_name") @@ -42,8 +41,17 @@ xportr_length <- function(.df, metacore, domain = NULL, ## End of common section - if (inherits(metacore, "Metacore")) + if (is.null(metacore)) { + if (is.null(attr(.df, "metadata"))) { + stop("Metadata must be set with `metacore` or `set_metadata()`") + } else { + metacore <- attr(.df, "metadata") + } + } + + if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec + } if (domain_name %in% names(metacore)) { metadata <- metacore %>% @@ -67,7 +75,6 @@ xportr_length <- function(.df, metacore, domain = NULL, } else { attr(.df[[i]], "width") <- length[[i]] } - } .df @@ -76,6 +83,9 @@ xportr_length <- function(.df, metacore, domain = NULL, impute_length <- function(col) { characterTypes <- getOption("xportr.character_types") # first_class will collapse to character if it is the option - if (first_class(col) %in% "character") 200 - else 8 + if (first_class(col) %in% "character") { + 200 + } else { + 8 + } } diff --git a/R/messages.R b/R/messages.R index ddec8c16..562ddd00 100644 --- a/R/messages.R +++ b/R/messages.R @@ -12,13 +12,13 @@ xportr_logger <- function(message, type = "none", ...) { log_fun <- switch(type, - stop = abort, - warn = warn, - message = inform, - return()) + stop = abort, + warn = warn, + message = inform, + return() + ) do.call(log_fun, list(message, ...)) - } #' Utility for Renaming Variables @@ -30,7 +30,6 @@ xportr_logger <- function(message, type = "none", ...) { #' @export var_names_log <- function(tidy_names_df, verbose) { - only_renames <- tidy_names_df %>% filter(original_varname != renamed_var) %>% mutate(renamed_msg = paste0("Var ", col_pos, ": '", original_varname, @@ -44,7 +43,9 @@ var_names_log <- function(tidy_names_df, verbose) { round(100 * (num_renamed / tot_num_vars), 1), "%) variables were renamed")) # Message stating any renamed variables each original variable and it's new name - if (nrow(only_renames) > 0) message(paste0(paste(only_renames$renamed_msg, collapse = "\n"), "\n")) + if (nrow(only_renames) > 0) { + walk(only_renames$renamed_msg, ~ xportr_logger(.x, verbose)) + } # Message checking for duplicate variable names after renamed (Pretty sure # this is impossible) but good to have a check none-the-less. @@ -66,9 +67,7 @@ var_names_log <- function(tidy_names_df, verbose) { #' @return Output to Console #' @export type_log <- function(meta_ordered, type_mismatch_ind, verbose) { - if (length(type_mismatch_ind) > 0) { - message <- glue( "Variable type(s) in dataframe don't match metadata: ", paste0(glue("{encode_vars(meta_ordered[type_mismatch_ind, 'variable'])}"), @@ -90,9 +89,7 @@ type_log <- function(meta_ordered, type_mismatch_ind, verbose) { #' @return Output to Console #' @export length_log <- function(miss_vars, verbose) { - if (length(miss_vars) > 0) { - cli_h2("Variable lengths missing from metadata.") cli_alert_success("{ length(miss_vars) } lengths resolved") @@ -113,13 +110,13 @@ length_log <- function(miss_vars, verbose) { #' @export label_log <- function(miss_vars, verbose) { if (length(miss_vars) > 0) { - cli_h2("Variable labels missing from metadata.") cli_alert_success("{ length(miss_vars) } labels skipped") xportr_logger( c("Variable(s) present in dataframe but doesn't exist in `metadata`.", - x = glue("Problem with {encode_vars(miss_vars)}")), + x = glue("Problem with {encode_vars(miss_vars)}") + ), type = verbose ) } @@ -134,8 +131,7 @@ label_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export var_ord_msg <- function(moved_vars, verbose) { - - if (moved_vars > 0) { + if (length(moved_vars) > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") message <- glue( "Variable reordered in `.df`: ", diff --git a/R/order.R b/R/order.R index 94e9cbed..0b46829d 100644 --- a/R/order.R +++ b/R/order.R @@ -9,8 +9,22 @@ #' @export #' @return Dataframe that has been re-ordered according to spec #' -xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.order_verbose", "none")) { - +#' @examples +#' adsl <- data.frame( +#' BRTHDT = c(1, 1, 2), +#' STUDYID = c("mid987650", "mid987650", "mid987650"), +#' TRT01A = c("Active", "Active", "Placebo"), +#' USUBJID = c(1001, 1002, 1003) +#' ) +#' +#' metadata <- data.frame( +#' dataset = c("adsl", "adsl", "adsl", "adsl"), +#' variable = c("STUDYID", "USUBJID", "TRT01A", "BRTHDT"), +#' order = 1:4 +#' ) +#' +#' adsl <- xportr_order(adsl, metadata) +xportr_order <- function(.df, metacore = NULL, domain = NULL, verbose = getOption("xportr.order_verbose", "none")) { domain_name <- getOption("xportr.domain_name") order_name <- getOption("xportr.order_name") variable_name <- getOption("xportr.variable_name") @@ -24,7 +38,18 @@ xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xpor ## End of common section if (inherits(metacore, "Metacore")) + + if (is.null(metacore)) { + if (is.null(attr(.df, "metadata"))) { + stop("Metadata must be set with `metacore` or `set_metadata()`") + } else { + metacore <- attr(.df, "metadata") + } + } + + if (inherits(metacore, "Metacore")) { metacore <- metacore$ds_vars + } if (domain_name %in% names(metacore)) { metadata <- metacore %>% diff --git a/R/set_metadata.R b/R/set_metadata.R new file mode 100644 index 00000000..8e3080f9 --- /dev/null +++ b/R/set_metadata.R @@ -0,0 +1,9 @@ +set_metadata <- function(.df, metacore) { + stopifnot( + "`.df` must be a dataframe" = inherits(.df, "data.frame"), + "`metacore` must be a dataframe or metacore object" = + inherits(.df, "data.frame") || inherits(.df, "metacore") + ) + + structure(.df, metadata = metacore) +} diff --git a/R/support-test.R b/R/support-test.R index ce4c9387..deba9587 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -7,11 +7,13 @@ #' @return The first argument, invisibly. expect_attr_width <- function(result, metadata_length) { test_widths <- map( - colnames(result), ~attributes(result[[.x]]) %>% pluck("width") + colnames(result), ~ attributes(result[[.x]]) %>% pluck("width") ) %>% unlist() == metadata_length - test_widths %>% all() %>% testthat::expect_true() + test_widths %>% + all() %>% + testthat::expect_true() invisible(result) } @@ -67,29 +69,28 @@ minimal_table <- function(n_rows = 3, cols = c("x", "y")) { #' #' @return A metadata data.frame minimal_metadata <- function( - dataset = FALSE, - length = FALSE, - label = FALSE, - type = FALSE, - format = FALSE, - order = FALSE, - dataset_name = "adsl", - var_names = NULL -) { + dataset = FALSE, + length = FALSE, + label = FALSE, + type = FALSE, + format = FALSE, + order = FALSE, + dataset_name = "adsl", + var_names = NULL) { cols_logical <- c(dataset, TRUE, label, length, type, format, order) cols <- c( "dataset", "variable", "label", "length", "type", "format", "order" )[cols_logical] metadata <- tribble( - ~dataset, ~variable, ~label, ~length, ~type, ~format, ~order, - "adsl", "x", "Lorem", 8, "numeric", NA, 1, - "adsl", "y", "Ipsum", 200, "numeric", NA, 2, - "adsl", "z", "Dolor", 8, "numeric", NA, 3, - "adsl", "a", "Sit", 8, "numeric", NA, 4, - "adsl", "b", "Amet", 200, "character", NA, 5, - "adsl", "c", "Consectetur", 200, "character", "datetime20.", 6, - "adsl", "d", "Adipiscing", 200, "date", "date9.", 7 + ~dataset, ~variable, ~label, ~length, ~type, ~format, ~order, + "adsl", "x", "Lorem", 8, "numeric", NA, 1, + "adsl", "y", "Ipsum", 200, "numeric", NA, 2, + "adsl", "z", "Dolor", 8, "numeric", NA, 3, + "adsl", "a", "Sit", 8, "numeric", NA, 4, + "adsl", "b", "Amet", 200, "character", NA, 5, + "adsl", "c", "Consectetur", 200, "character", "datetime20.", 6, + "adsl", "d", "Adipiscing", 200, "date", "date9.", 7 ) if (!is.null(var_names)) { diff --git a/R/type.R b/R/type.R index 2e465b1f..774986d2 100644 --- a/R/type.R +++ b/R/type.R @@ -17,23 +17,22 @@ #' @export #' #' @examples -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = "test", #' variable = c("Subj", "Param", "Val", "NotUsed"), #' type = c("numeric", "character", "numeric", "character") #' ) #' #' .df <- data.frame( -#' Subj = as.character(123, 456, 789), -#' Different = c("a", "b", "c"), -#' Val = c("1", "2", "3"), -#' Param = c("param1", "param2", "param3") +#' Subj = as.character(123, 456, 789), +#' Different = c("a", "b", "c"), +#' Val = c("1", "2", "3"), +#' Param = c("param1", "param2", "param3") #' ) #' -#' df2 <- xportr_type(.df, metacore, "test") -xportr_type <- function(.df, metacore, domain = NULL, +#' df2 <- xportr_type(.df, metadata, "test") +xportr_type <- function(.df, metacore = NULL, domain = NULL, verbose = getOption("xportr.type_verbose", "none")) { - # Name of the columns for working with metadata domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") @@ -49,7 +48,17 @@ xportr_type <- function(.df, metacore, domain = NULL, ## End of common section ## Pull out correct metadata - if ("Metacore" %in% class(metacore)) metacore <- metacore$var_spec + if (is.null(metacore)) { + if (is.null(attr(.df, "metadata"))) { + stop("Metadata must be set with `metacore` or `set_metadata()`") + } else { + metacore <- attr(.df, "metadata") + } + } + + if (inherits(metacore, "Metacore")) { + metacore <- metacore$ds_spec + } if (domain_name %in% names(metacore)) { metacore <- metacore %>% @@ -83,17 +92,21 @@ xportr_type <- function(.df, metacore, domain = NULL, # Walk along the columns and coerce the variables. Modifying the columns # Directly instead of something like map_dfc to preserve any attributes. - walk2(correct_type, seq_along(correct_type), - function(x, i, is_correct) { - if (!is_correct[i]) { - orig_attributes <- attributes(.df[[i]]) - orig_attributes$class <- NULL - if (correct_type[i] %in% characterTypes) - .df[[i]] <<- as.character(.df[[i]]) - else .df[[i]] <<- as.numeric(.df[[i]]) - attributes(.df[[i]]) <<- orig_attributes - } - }, is_correct) + walk2( + correct_type, seq_along(correct_type), + function(x, i, is_correct) { + if (!is_correct[i]) { + orig_attributes <- attributes(.df[[i]]) + orig_attributes$class <- NULL + if (correct_type[i] %in% characterTypes) { + .df[[i]] <<- as.character(.df[[i]]) + } else { + .df[[i]] <<- as.numeric(.df[[i]]) + } + attributes(.df[[i]]) <<- orig_attributes + } + }, is_correct + ) .df } diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 98969649..f86da12f 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -9,8 +9,10 @@ extract_attr <- function(data, attr = c("label", "format.sas", "SAStype", "SASle attr <- match.arg(attr) out <- lapply(data, function(.x) attr(.x, attr)) out <- vapply(out, - function(.x) ifelse(is.null(.x), "", .x), - character(1L), USE.NAMES = FALSE) + function(.x) ifelse(is.null(.x), "", .x), + character(1L), + USE.NAMES = FALSE + ) names(out) <- names(data) out } @@ -119,26 +121,29 @@ fmt_fmts <- function(x) { xpt_validate_var_names <- function(varnames, list_vars_first = TRUE, err_cnd = character()) { - # 1.1 Check length -- chk_varlen <- varnames[nchar(varnames) > 8] if (length(chk_varlen) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, - glue("{fmt_vars(chk_varlen)} must be 8 characters or less."), - glue(" - Must be 8 characters or less: {fmt_vars(chk_varlen)}."))) + glue("{fmt_vars(chk_varlen)} must be 8 characters or less."), + glue(" + Must be 8 characters or less: {fmt_vars(chk_varlen)}.") + )) } # 1.2 Check first character -- - chk_first_chr <- varnames[stringr::str_detect(stringr::str_sub(varnames, 1, 1), - "[^[:alpha:]]")] + chk_first_chr <- varnames[stringr::str_detect( + stringr::str_sub(varnames, 1, 1), + "[^[:alpha:]]" + )] if (length(chk_first_chr) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, - glue("{fmt_vars(chk_first_chr)} must start with a letter."), - glue(" - Must start with a letter: {fmt_vars(chk_first_chr)}."))) + glue("{fmt_vars(chk_first_chr)} must start with a letter."), + glue(" + Must start with a letter: {fmt_vars(chk_first_chr)}.") + )) } # 1.3 Check Non-ASCII and underscore characters -- @@ -146,21 +151,24 @@ xpt_validate_var_names <- function(varnames, if (length(chk_alnum) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, - glue("{fmt_vars(chk_alnum)} cannot contain any non-ASCII, symbol or underscore characters."), - glue(" - Cannot contain any non-ASCII, symbol or underscore characters: {fmt_vars(chk_alnum)}."))) + glue("{fmt_vars(chk_alnum)} cannot contain any non-ASCII, symbol or underscore characters."), + glue(" + Cannot contain any non-ASCII, symbol or underscore characters: {fmt_vars(chk_alnum)}.") + )) } # 1.4 Check for any lowercase letters - or not all uppercase chk_lower <- varnames[!stringr::str_detect( - stringr::str_replace_all(varnames, "[:digit:]", ""), - "^[[:upper:]]+$")] + stringr::str_replace_all(varnames, "[:digit:]", ""), + "^[[:upper:]]+$" + )] if (length(chk_lower) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, - glue("{fmt_vars(chk_lower)} cannot contain any lowercase characters."), - glue(" - Cannot contain any lowercase characters {fmt_vars(chk_lower)}."))) + glue("{fmt_vars(chk_lower)} cannot contain any lowercase characters."), + glue(" + Cannot contain any lowercase characters {fmt_vars(chk_lower)}.") + )) } return(err_cnd) } @@ -172,7 +180,6 @@ xpt_validate_var_names <- function(varnames, #' @return xpt file #' @noRd xpt_validate <- function(data) { - err_cnd <- character() # 1.0 VARIABLES ---- @@ -187,45 +194,56 @@ xpt_validate <- function(data) { chk_label_len <- labels[nchar(labels) > 40] if (length(chk_label_len) > 0) { - err_cnd <- c(err_cnd, - glue("{fmt_labs(chk_label_len)} must be 40 characters or less.")) + err_cnd <- c( + err_cnd, + glue("{fmt_labs(chk_label_len)} must be 40 characters or less.") + ) } # 2.2 Check Non-ASCII and special characters chk_spl_chr <- labels[stringr::str_detect(labels, "[<>]|[^[:ascii:]]")] if (length(chk_spl_chr) > 0) { - err_cnd <- c(err_cnd, - glue("{fmt_labs(chk_spl_chr)} cannot contain any non-ASCII, symbol or special characters.")) + err_cnd <- c( + err_cnd, + glue("{fmt_labs(chk_spl_chr)} cannot contain any non-ASCII, symbol or special characters.") + ) } # 3.0 VARIABLE TYPES ---- types <- tolower(extract_attr(data, attr = "SAStype")) - expected_types <- c("", "text", "integer", "float", "datetime", "date", "time", - "partialdate", "partialtime", "partialdatetime", - "incompletedatetime", "durationdatetime", "intervaldatetime") + + expected_types <- c( + "", "text", "integer", "float", "datetime", "date", "time", + "partialdate", "partialtime", "partialdatetime", + "incompletedatetime", "durationdatetime", "intervaldatetime" + ) # 3.1 Invalid types -- chk_types <- types[which(!types %in% expected_types)] if (length(chk_types) > 0) { - err_cnd <- c(err_cnd, - glue("{fmt_vars(names(types))} must have a valid type.")) + err_cnd <- c( + err_cnd, + glue("{fmt_vars(names(types))} must have a valid type.") + ) } # 4.0 Format Types ---- formats <- tolower(extract_attr(data, attr = "format.sas")) ## The usual expected formats in clinical trials: characters, dates - expected_formats <- c(NA, - "", - paste("$", 1:200, ".", sep = ""), - paste("date", 5:11, ".", sep = ""), - paste("time", 2:20, ".", sep = ""), - paste("datetime", 7:40, ".", sep = ""), - paste("yymmdd", 2:10, ".", sep = ""), - paste("mmddyy", 2:10, ".", sep = ""), - paste("ddmmyy", 2:10, ".", sep = "")) + expected_formats <- c( + NA, + "", + paste("$", 1:200, ".", sep = ""), + paste("date", 5:11, ".", sep = ""), + paste("time", 2:20, ".", sep = ""), + paste("datetime", 7:40, ".", sep = ""), + paste("yymmdd", 2:10, ".", sep = ""), + paste("mmddyy", 2:10, ".", sep = ""), + paste("ddmmyy", 2:10, ".", sep = "") + ) chk_formats <- formats[which(!formats %in% expected_formats)] @@ -233,8 +251,10 @@ xpt_validate <- function(data) { format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" chk_formats <- chk_formats[which(!str_detect(chk_formats, format_regex))] if (length(chk_formats) > 0) { - err_cnd <- c(err_cnd, - glue("{fmt_fmts(names(chk_formats))} must have a valid format.")) + err_cnd <- c( + err_cnd, + glue("{fmt_fmts(names(chk_formats))} must have a valid format.") + ) } return(err_cnd) } @@ -277,6 +297,9 @@ get_pipe_call <- function() { first_class <- function(x) { characterTypes <- getOption("xportr.character_types") class_ <- tolower(class(x)[1]) - if (class_ %in% characterTypes) "character" - else class_ + if (class_ %in% characterTypes) { + "character" + } else { + class_ + } } diff --git a/R/write.R b/R/write.R index 2bca7e39..369db5c4 100644 --- a/R/write.R +++ b/R/write.R @@ -20,9 +20,8 @@ #' @return A data frame. `xportr_write()` returns the input data invisibly. #' @export xportr_write <- function(.df, path, label = NULL) { - path <- normalizePath(path, mustWork = FALSE) - + name <- tools::file_path_sans_ext(basename(path)) if (nchar(name) > 8) { @@ -34,16 +33,17 @@ xportr_write <- function(.df, path, label = NULL) { } if (!is.null(label)) { - - if (nchar(label) > 40) + if (nchar(label) > 40) { abort("`label` must be 40 characters or less.") + } - if (stringr::str_detect(label, "[<>]|[^[:ascii:]]")) + if (stringr::str_detect(label, "[<>]|[^[:ascii:]]")) { abort("`label` cannot contain any non-ASCII, symbol or special characters.") + } attr(.df, "label") <- label } - + checks <- xpt_validate(.df) if (length(checks) > 0) { diff --git a/R/xportr-package.R b/R/xportr-package.R index ef677962..91e03382 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -23,9 +23,11 @@ #' "_PACKAGE" -globalVariables(c("abbr_parsed", "abbr_stem", "adj_orig", "adj_parsed", "col_pos", "dict_varname", - "lower_original_varname", "my_minlength", "num_st_ind", "original_varname", - "renamed_n", "renamed_var", "use_bundle", "viable_start")) +globalVariables(c( + "abbr_parsed", "abbr_stem", "adj_orig", "adj_parsed", "col_pos", "dict_varname", + "lower_original_varname", "my_minlength", "num_st_ind", "original_varname", + "renamed_n", "renamed_var", "use_bundle", "viable_start" +)) # The following block is used by usethis to automatically manage # roxygen namespace tags. Modify with care! diff --git a/R/zzz.R b/R/zzz.R index 35eca269..4cb85dde 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -19,6 +19,6 @@ ) toset <- !(names(op.devtools) %in% names(op)) if (any(toset)) options(op.devtools[toset]) - + invisible() } diff --git a/README.Rmd b/README.Rmd index da78786c..6b7e1928 100644 --- a/README.Rmd +++ b/README.Rmd @@ -123,21 +123,31 @@ spec_path <- system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = " var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>% dplyr::rename(type = "Data Type") %>% rlang::set_names(tolower) - ``` Each `xportr_` function has been written in a way to take in a part of the specification file and apply that piece to the dataset. ```{r, message=FALSE, eval=FALSE} -adsl %>% +adsl %>% xportr_type(var_spec, "ADSL") %>% xportr_length(var_spec, "ADSL") %>% xportr_label(var_spec, "ADSL") %>% - xportr_order(var_spec, "ADSL") %>% - xportr_format(var_spec, "ADSL") %>% + xportr_order(var_spec, "ADSL") %>% + xportr_format(var_spec, "ADSL") %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` +```{r, message=FALSE, eval=FALSE} +# goal +adsl %>% + set_metadata(var_spec) %>% + xportr_type(domain = "ADSL") %>% + xportr_length(domain = "ADSL") %>% + xportr_label(domain = "ADSL") %>% + xportr_order(domain = "ADSL") %>% + xportr_format(domain = "ADSL") +``` + That's it! We now have a xpt file created in R with all appropriate types, lengths, labels, ordering and formats. Please check out the [Get Started](https://atorus-research.github.io/xportr/articles/xportr.html) for more information and detailed walk through of each `xportr_` function. We are in talks with other Pharma companies involved with the [`{pharmaverse}`](https://pharmaverse.org/) to enhance this package to play well with other downstream and upstream packages. @@ -146,4 +156,4 @@ We are in talks with other Pharma companies involved with the [`{pharmaverse}`](
-This package was developed jointly by [GSK](https://us.gsk.com/en-us/home/) and [Atorus](https://www.atorusresearch.com/). \ No newline at end of file +This package was developed jointly by [GSK](https://us.gsk.com/en-us/home/) and [Atorus](https://www.atorusresearch.com/). diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index 86316b64..54df405b 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -28,12 +28,12 @@ adsl <- data.frame( SEX = c("M", "F", "M") ) -metacore <- data.frame( +metadata <- data.frame( dataset = c("adsl", "adae"), label = c("Subject-Level Analysis", "Adverse Events Analysis") ) -adsl <- xportr_df_label(adsl, metacore) +adsl <- xportr_df_label(adsl, metadata) } \seealso{ \code{\link[=xportr_label]{xportr_label()}}, \code{\link[=xportr_format]{xportr_format()}} and \code{\link[=xportr_length]{xportr_length()}} diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index d62d1781..6ecbc501 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -34,13 +34,13 @@ adsl <- data.frame( BRTHDT = c(1, 1, 2) ) -metacore <- data.frame( +metadata <- data.frame( dataset = c("adsl", "adsl"), variable = c("USUBJID", "BRTHDT"), format = c(NA, "DATE9.") ) -adsl <- xportr_format(adsl, metacore) +adsl <- xportr_format(adsl, metadata) } \seealso{ \code{\link[=xportr_label]{xportr_label()}}, \code{\link[=xportr_df_label]{xportr_df_label()}} and \code{\link[=xportr_length]{xportr_length()}} diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index de39a76d..0eed2bbe 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -36,13 +36,13 @@ adsl <- data.frame( SEX = c("M", "F", "M") ) -metacore <- data.frame( +metadata <- data.frame( dataset = "adsl", variable = c("USUBJID", "SITEID", "AGE", "SEX"), label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex") ) -adsl <- xportr_label(adsl, metacore) +adsl <- xportr_label(adsl, metadata) } \seealso{ \code{\link[=xportr_df_label]{xportr_df_label()}}, \code{\link[=xportr_format]{xportr_format()}} and \code{\link[=xportr_length]{xportr_length()}} diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index 765c31d3..50a01a83 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -34,13 +34,13 @@ adsl <- data.frame( BRTHDT = c(1, 1, 2) ) -metacore <- data.frame( +metadata <- data.frame( dataset = c("adsl", "adsl"), variable = c("USUBJID", "BRTHDT"), length = c(10, 8) ) -adsl <- xportr_length(adsl, metacore) +adsl <- xportr_length(adsl, metadata) } \seealso{ \code{\link[=xportr_label]{xportr_label()}}, \code{\link[=xportr_df_label]{xportr_df_label()}} and \code{\link[=xportr_format]{xportr_format()}} diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index e0e9ceec..e1c38292 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -27,3 +27,19 @@ Dataframe that has been re-ordered according to spec \description{ Order variables of a dataset according to Spec } +\examples{ +adsl <- data.frame( + BRTHDT = c(1, 1, 2), + STUDYID = c("mid987650", "mid987650", "mid987650"), + TRT01A = c("Active", "Active", "Placebo"), + USUBJID = c(1001, 1002, 1003) +) + +metadata <- data.frame( + dataset = c("adsl", "adsl", "adsl", "adsl"), + variable = c("STUDYID", "USUBJID", "TRT01A", "BRTHDT"), + order = 1:4 +) + +adsl <- xportr_order(adsl, metadata) +} diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index 979028e3..f5975faf 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -33,7 +33,7 @@ Current assumptions: columns_meta is a data.frame with names "Variables", "Type" } \examples{ -metacore <- data.frame( +metadata <- data.frame( dataset = "test", variable = c("Subj", "Param", "Val", "NotUsed"), type = c("numeric", "character", "numeric", "character") @@ -46,5 +46,5 @@ metacore <- data.frame( Param = c("param1", "param2", "param3") ) -df2 <- xportr_type(.df, metacore, "test") +df2 <- xportr_type(.df, metadata, "test") } diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 52561888..062b2b59 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -124,7 +124,7 @@ test_that("xportr_length: Impute character lengths based on class", { adsl <- adsl %>% mutate( new_date = as.Date(.data$x, origin = "1970-01-01"), - new_char = as.character(.data$b), + new_char = as.character(.data$b), new_num = as.numeric(.data$x) ) @@ -211,5 +211,4 @@ test_that("xportr_length: Column length of known/unkown character types is 200/8 withr::local_options(list(xportr.character_types = c("character", "date"))) expect_equal(impute_length(Sys.time()), 8) - }) diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R new file mode 100644 index 00000000..36c35b32 --- /dev/null +++ b/tests/testthat/test-messages.R @@ -0,0 +1,94 @@ +#' Test `R/messages.R` functions + +test_that("xportr_logger: Type parameter will create correct message type", { + xportr_logger("A message", type = "none") %>% + expect_silent() + + xportr_logger("A message", type = "message") %>% + expect_message("A message") + + xportr_logger("A message", type = "warn") %>% + expect_warning("A message") + + xportr_logger("A message", type = "stop") %>% + expect_error("A message") + + # Supports additional parameters to rlang::stop + xportr_logger("A message", type = "stop", footer = "A footer") %>% + expect_error("A message", class = "rlang_error") +}) + +test_that("length_log: Missing lengths messages are shown", { + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) + + length_log(c("var1", "var2", "var3"), "message") %>% + expect_message("Variable lengths missing from metadata.") %>% + expect_message("lengths resolved") %>% + expect_message("Problem with `var1`.*`var2`.*`var3`") +}) + +test_that("length_log: Missing variables messages are shown", { + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) + + label_log(c("var1", "var2", "var3"), "message") %>% + # cli messages + expect_message("Variable labels missing from metadata.") %>% + expect_message("labels skipped") %>% + # xportr_logger messages + expect_message("Problem with `var1`.*`var2`.*`var3`") +}) + +test_that("var_ord_msg: Reordered variables messages are shown", { + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) + + moved_vars <- c("var1", "var2", "var3") + message_regexp <- "Variable reordered in.+`var1`.+`var2`.+`var3`$" + + var_ord_msg(moved_vars, "message") %>% + expect_message("variables not in spec and moved to end") %>% + expect_message(message_regexp) + + var_ord_msg(c(), "message") %>% + expect_message("All variables in specification file are in dataset") +}) + +test_that("var_names_log: Renamed variables messages are shown", { + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) + + tidy_names_df <- data.frame( + original_varname = c("var1", "var2", "var3", "var4", "VAR5", "VAR6"), + renamed_var = c("VAR1", "VAR2", "VAR3", "VAR4", "VAR5", "VAR6"), + col_pos = seq(1, 6), + renamed_msg = glue("renamed message {seq(1, 6)}"), + renamed_n = 0 + ) + + tidy_names_df %>% + mutate( + renamed_n = c( + 2, + sample(c(0, 1, 2), size = NROW(.data$renamed_n) - 1, replace = TRUE) + ) + ) %>% + var_names_log("message") %>% + expect_message( + ".*[0-9]+ of [0-9]+ \\([0-9]+(\\.[0-9]+)%\\) variables were renamed.*" + ) %>% + expect_message("Var . : '.*' was renamed to '.*'") %>% + expect_message("Var . : '.*' was renamed to '.*'") %>% + expect_message("Var . : '.*' was renamed to '.*'") %>% + expect_message("Var . : '.*' was renamed to '.*'") %>% + expect_message("Duplicate renamed term\\(s\\) were created") +}) diff --git a/tests/testthat/test-options.R b/tests/testthat/test-options.R index 9592f9f0..8a845c88 100644 --- a/tests/testthat/test-options.R +++ b/tests/testthat/test-options.R @@ -1,6 +1,6 @@ test_that("options are originally set as expected", { op <- options() - + expect_equal(op$xportr.df_domain_name, "dataset") expect_equal(op$xportr.df_label, "label") expect_equal(op$xportr.coerse, "none") @@ -10,6 +10,4 @@ test_that("options are originally set as expected", { expect_equal(op$xportr.label, "label") expect_equal(op$xportr.length, "length") expect_equal(op$xportr.format_name, "format") - - }) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 88f2d770..a33ee6be 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -1,4 +1,3 @@ - meta_example <- data.frame( dataset = "df", variable = c("Subj", "Param", "Val", "NotUsed"), @@ -6,29 +5,64 @@ meta_example <- data.frame( ) df <- data.frame( - Subj = as.character(123, 456, 789), - Different = c("a", "b", "c"), - Val = c("1", "2", "3"), - Param = c("param1", "param2", "param3") + Subj = as.character(123, 456, 789), + Different = c("a", "b", "c"), + Val = c("1", "2", "3"), + Param = c("param1", "param2", "param3") ) test_that("variable types are coerced as expected and can raise messages", { + expect_message( + df2 <- xportr_type(df, meta_example), + "-- Variable type mismatches found. --" + ) - expect_message(df2 <- xportr_type(df, meta_example), - "-- Variable type mismatches found. --") - - expect_equal(purrr::map_chr(df2, class), c(Subj = "numeric", Different = "character", - Val = "numeric", Param = "character")) + expect_equal(purrr::map_chr(df2, class), c( + Subj = "numeric", Different = "character", + Val = "numeric", Param = "character" + )) expect_error(xportr_type(df, meta_example, verbose = "stop")) expect_warning(df3 <- xportr_type(df, meta_example, verbose = "warn")) - expect_equal(purrr::map_chr(df3, class), c(Subj = "numeric", Different = "character", - Val = "numeric", Param = "character")) + expect_equal(purrr::map_chr(df3, class), c( + Subj = "numeric", Different = "character", + Val = "numeric", Param = "character" + )) expect_message(df4 <- xportr_type(df, meta_example, verbose = "message")) - expect_equal(purrr::map_chr(df4, class), c(Subj = "numeric", Different = "character", - Val = "numeric", Param = "character")) + expect_equal(purrr::map_chr(df4, class), c( + Subj = "numeric", Different = "character", + Val = "numeric", Param = "character" + )) +}) + +test_that("variable types are coerced as expected and can raise messages (metadata attribute)", { + expect_message( + df2 <- set_metadata(df, meta_example) %>% xportr_type(), + "-- Variable type mismatches found. --" + ) + + expect_equal(purrr::map_chr(df2, class), c( + Subj = "numeric", Different = "character", + Val = "numeric", Param = "character" + )) + + expect_error(xportr_type(set_metadata(df, meta_example), verbose = "stop")) + + expect_warning( + df3 <- xportr_type(set_metadata(df, meta_example), verbose = "warn") + ) + expect_equal(purrr::map_chr(df3, class), c( + Subj = "numeric", Different = "character", + Val = "numeric", Param = "character" + )) + + expect_message(df4 <- xportr_type(set_metadata(df, meta_example), verbose = "message")) + expect_equal(purrr::map_chr(df4, class), c( + Subj = "numeric", Different = "character", + Val = "numeric", Param = "character" + )) }) test_that("xportr_type() retains column attributes, besides class", { diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 93de69db..4bad46e1 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -2,17 +2,23 @@ test_that("Get magrittr lhs side value", { x <- function(df, var) { get_pipe_call() } - + y <- function(df) { get_pipe_call() } - - expect_equal({ - mtcars %>% x("cyl") - }, - "mtcars") - expect_equal({ - mtcars %>% subset(cyl == 6) %>% x("cyl") - }, - "mtcars") + + expect_equal( + { + mtcars %>% x("cyl") + }, + "mtcars" + ) + expect_equal( + { + mtcars %>% + subset(cyl == 6) %>% + x("cyl") + }, + "mtcars" + ) }) diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index c1e8291b..b0eb233b 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -1,5 +1,4 @@ test_that("SAS Transport file", { - tmpdir <- tempdir() tmp <- file.path(tmpdir, "xyz.xpt") @@ -19,25 +18,24 @@ test_that("SAS Transport file", { xportr_write(df, path = tmp, label = "Lorem ipsum dolor sit amet") expect_error( xportr_write(df, tmp, label = "Lorizzle ipsizzle dolizzle pizzle go to hizzle"), - "must be 40 characters or less") + "must be 40 characters or less" + ) expect_error(xportr_write(df, tmp, label = "Lorizzle ipsizzle dolizzl\xe7 pizzle")) - }) test_that("Error message given if file name is greater than 8 characters", { - tmpdir <- tempdir() tmp <- file.path(tmpdir, "abc.xpt") on.exit(unlink(tmpdir)) - nameover8 <- data.frame(a = c(1, 2, NA), - b = c("a", "", "c"), - c = c(1, 2, 3)) + nameover8 <- data.frame( + a = c(1, 2, NA), + b = c("a", "", "c"), + c = c(1, 2, 3) + ) expect_error(xportr_write(df, path = tmp)) - - }) test_that("Format message given if unexpected formats", { @@ -46,9 +44,11 @@ test_that("Format message given if unexpected formats", { on.exit(unlink(tmpdir)) - df <- data.frame(USUBJID = c("1001", "1002", "10003"), - AGE = c("M", "F", "M"), - BIRTHDT = as.Date(c("2001-01-01", "1997-11-11", "1995-12-12"), "%Y-%m-%d")) + df <- data.frame( + USUBJID = c("1001", "1002", "10003"), + AGE = c("M", "F", "M"), + BIRTHDT = as.Date(c("2001-01-01", "1997-11-11", "1995-12-12"), "%Y-%m-%d") + ) # Forget the period in date9. attr(df$BIRTHDT, "format.sas") <- "date9" diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 2c98eb41..001edc74 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -23,10 +23,12 @@ library(DT) local({ hook_output <- knitr::knit_hooks$get("output") knitr::knit_hooks$set(output = function(x, options) { - if (!is.null(options$max.height)) options$attr.output <- c( - options$attr.output, - sprintf('style="max-height: %s;"', options$max.height) - ) + if (!is.null(options$max.height)) { + options$attr.output <- c( + options$attr.output, + sprintf('style="max-height: %s;"', options$max.height) + ) + } hook_output(x, options) }) }) @@ -90,10 +92,11 @@ In order to make use of the functions within `xportr` you will need to create an ```{r} var_spec <- readxl::read_xlsx( - system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), sheet = "Variables") %>% + system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), + sheet = "Variables" +) %>% dplyr::rename(type = "Data Type") %>% rlang::set_names(tolower) - ```
From 5a4e1a2a2858e592266fb27c2bcb7dce85ac1d42 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 4 May 2023 20:33:41 +0530 Subject: [PATCH 077/337] chore: update namespace --- NAMESPACE | 1 - 1 file changed, 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index e7025ce5..9b83ed5f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -21,7 +21,6 @@ importFrom(cli,cli_alert_success) importFrom(cli,cli_div) importFrom(cli,cli_h2) importFrom(cli,cli_text) -importFrom(dplyr,all_of) importFrom(dplyr,arrange) importFrom(dplyr,bind_cols) importFrom(dplyr,case_when) From d74718cddf1764db54a94b1cc183fe50ab21171b Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 4 May 2023 15:24:24 +0000 Subject: [PATCH 078/337] Per #34, fix messaging for reorder messaging --- R/messages.R | 17 ++++++++++++--- R/order.R | 39 +++++++++++++++++----------------- man/var_ord_msg.Rd | 6 ++++-- tests/testthat/test-messages.R | 17 --------------- tests/testthat/test-order.R | 39 ++++++++++++++++++++++++++++++++++ 5 files changed, 76 insertions(+), 42 deletions(-) diff --git a/R/messages.R b/R/messages.R index 37d0b9a4..7cee4080 100644 --- a/R/messages.R +++ b/R/messages.R @@ -143,20 +143,31 @@ label_log <- function(miss_vars, verbose) { #' Utility for Ordering #' -#' @param moved_vars Variables moved in the dataset +#' @param reordered_vars Number of variables reordered +#' @param moved_vars Number of ariables moved in the dataset #' @param verbose Provides additional messaging for user #' #' @return Output to Console #' @export -var_ord_msg <- function(moved_vars, verbose) { +var_ord_msg <- function(reordered_vars, moved_vars, verbose) { if (length(moved_vars) > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") message <- glue( - "Variable reordered in `.df`: { encode_vars(moved_vars) }" + "Variable moved to end in `.df`: { encode_vars(moved_vars) }" ) xportr_logger(message, verbose) } else { cli_h2("All variables in specification file are in dataset") } + + if (length(reordered_vars) > 0) { + cli_h2("{ length(reordered_vars) } reordered in dataset") + message <- glue( + "Variable reordered in `.df`: { encode_vars(reordered_vars) }" + ) + xportr_logger(message, verbose) + } else { + cli_h2("All variables in dataset are ordered") + } } diff --git a/R/order.R b/R/order.R index eabc88dd..b35d512b 100644 --- a/R/order.R +++ b/R/order.R @@ -25,33 +25,33 @@ #' #' adsl <- xportr_order(adsl, metacore) xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.order_verbose", "none")) { - + domain_name <- getOption("xportr.domain_name") order_name <- getOption("xportr.order_name") variable_name <- getOption("xportr.variable_name") - - + + df_arg <- as_name(enexpr(.df)) - + if (!is.null(attr(.df, "_xportr.df_arg_"))) df_arg <- attr(.df, "_xportr.df_arg_") else if (identical(df_arg, ".")) { attr(.df, "_xportr.df_arg_") <- get_pipe_call() df_arg <- attr(.df, "_xportr.df_arg_") } - + if (!is.null(domain) && !is.character(domain)) { abort(c("`domain` must be a vector with type .", x = glue("Instead, it has type <{typeof(domain)}>.")) ) } - + df_arg <- domain %||% df_arg - + if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain - + if (inherits(metacore, "Metacore")) metacore <- metacore$ds_vars - + if (domain_name %in% names(metacore)) { metadata <- metacore %>% dplyr::filter(!!sym(domain_name) == df_arg & !is.na(!!sym(order_name))) @@ -59,29 +59,28 @@ xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xpor metadata <- metacore %>% dplyr::filter(!is.na(!!sym(order_name))) } - + # Grabs vars from Spec and inputted dataset vars_in_spec_ds <- metadata[, c(variable_name, order_name)] %>% arrange(!!sym(order_name)) %>% extract2(variable_name) - + vars_in_spec_ds <- vars_in_spec_ds[!is.na(vars_in_spec_ds)] # Grabs all variables from Spec file and orders accordingly ord_vars <- .df %>% select(any_of(vars_in_spec_ds)) - + # Variables not in Spec file - will be moved to the end drop_vars <- .df %>% select(!any_of(vars_in_spec_ds)) - - # Used in warning message for how many vars have been moved - moved_vars <- ncol(drop_vars) - ordered_vars <- ncol(ord_vars) - + df_re_ord <- bind_cols(ord_vars, drop_vars) - + + # Used in warning message for how many vars have been moved + reorder_vars <- names(df_re_ord)[names(df_re_ord) != names(.df)] + # Function is located in messages.R - var_ord_msg(moved_vars, verbose) - + var_ord_msg(reorder_vars, names(drop_vars), verbose) + return(df_re_ord) } diff --git a/man/var_ord_msg.Rd b/man/var_ord_msg.Rd index 1b92ab4e..0bd5979e 100644 --- a/man/var_ord_msg.Rd +++ b/man/var_ord_msg.Rd @@ -4,10 +4,12 @@ \alias{var_ord_msg} \title{Utility for Ordering} \usage{ -var_ord_msg(moved_vars, verbose) +var_ord_msg(reordered_vars, moved_vars, verbose) } \arguments{ -\item{moved_vars}{Variables moved in the dataset} +\item{reordered_vars}{Number of variables reordered} + +\item{moved_vars}{Number of ariables moved in the dataset} \item{verbose}{Provides additional messaging for user} } diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index 0a82f239..80c1f13b 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -44,23 +44,6 @@ test_that("length_log: Missing variables messages are shown", { expect_message("Problem with `var1`.*`var2`.*`var3`") }) -test_that("var_ord_msg: Reordered variables messages are shown", { - # Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests)) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) - - moved_vars <- c("var1", "var2", "var3") - message_regexp <- "Variable reordered in.+`var1`.+`var2`.+`var3`$" - - var_ord_msg(moved_vars, "message") %>% - expect_message("variables not in spec and moved to end") %>% - expect_message(message_regexp) - - var_ord_msg(c(), "message") %>% - expect_message("All variables in specification file are in dataset") -}) - test_that("var_names_log: Renamed variables messages are shown", { # Remove empty lines in cli theme withr::local_options(list(cli.user_theme = cli_theme_tests)) diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index 64a7d19b..1b519af7 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -90,3 +90,42 @@ test_that("xportr_order: Expect error if domain is not a character", { expect_error(xportr_order(df, df_meta, domain = NA, verbose = "none")) expect_error(xportr_order(df, df_meta, domain = 1, verbose = "none")) }) + +test_that("xportr_order: Variable ordering messaging is correct", { + output_file <- tempfile() + + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + df2 <- data.frame(a = "a", z = "z") + df_meta <- data.frame( + dataset = "df", + variable = letters[1:4], + order = 1:4 + ) + + capture.output(xportr_order(df, df_meta, verbose = "message"), file = output_file, type = "message") + + expect_equal( + readLines(output_file), + c( + "-- All variables in specification file are in dataset --", + "", + "-- 4 reordered in dataset --", + "", + "Variable reordered in `.df`: `a`, `b`, `c`, and `d`" + ) + ) + + capture.output(xportr_order(df2, df_meta, verbose = "message"), file = output_file, type = "message") + + expect_equal( + readLines(output_file), + c( + "-- 2 variables not in spec and moved to end --", + "", + "Variable moved to end in `.df`: `a` and `z`", + "-- All variables in dataset are ordered --", + "" + ) + ) + +}) From 8b47875c56f33048b9ca52b0543f9c885c46fdcd Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 4 May 2023 15:53:42 +0000 Subject: [PATCH 079/337] Per #78, Add argument to not error out if dataset validation fails. --- R/write.R | 13 +++++++++---- man/xportr_write.Rd | 5 ++++- tests/testthat/test-write.R | 10 ++++++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/R/write.R b/R/write.R index 2bca7e39..e5dd3039 100644 --- a/R/write.R +++ b/R/write.R @@ -8,6 +8,8 @@ #' @param path Path where transport file will be written. File name sans will be #' used as `xpt` name. #' @param label Dataset label. It must be<=40 characters. +#' @param no_fail If TRUE, xpt validation will report a warning instead of an +#' error on dataset validation. #' @details #' * Variable and dataset labels are stored in the "label" attribute. #' @@ -19,10 +21,10 @@ #' #' @return A data frame. `xportr_write()` returns the input data invisibly. #' @export -xportr_write <- function(.df, path, label = NULL) { +xportr_write <- function(.df, path, label = NULL, no_fail = FALSE) { path <- normalizePath(path, mustWork = FALSE) - + name <- tools::file_path_sans_ext(basename(path)) if (nchar(name) > 8) { @@ -43,11 +45,14 @@ xportr_write <- function(.df, path, label = NULL) { attr(.df, "label") <- label } - + checks <- xpt_validate(.df) if (length(checks) > 0) { - abort(c("The following validation failed:", checks)) + if (no_fail) + warn(c("The following validation failed:", checks)) + else + abort(c("The following validation failed:", checks)) } data <- as.data.frame(.df) diff --git a/man/xportr_write.Rd b/man/xportr_write.Rd index ee82ac64..9c166207 100644 --- a/man/xportr_write.Rd +++ b/man/xportr_write.Rd @@ -4,7 +4,7 @@ \alias{xportr_write} \title{Write xpt v5 transport file} \usage{ -xportr_write(.df, path, label = NULL) +xportr_write(.df, path, label = NULL, no_fail = FALSE) } \arguments{ \item{.df}{A data frame to write.} @@ -13,6 +13,9 @@ xportr_write(.df, path, label = NULL) used as \code{xpt} name.} \item{label}{Dataset label. It must be<=40 characters.} + +\item{no_fail}{If TRUE, xpt validation will report a warning instead of an +error on dataset validation.} } \value{ A data frame. \code{xportr_write()} returns the input data invisibly. diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index e9658b9a..0ac07fbd 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -74,3 +74,13 @@ test_that("xportr_write: expect error when an xpt validation fails", { expect_error(xportr_write(data_to_save, tmp, label = "label")) }) + +test_that("xportr_write: expect warning when an xpt validation fails with no_fail argument set", { + tmpdir <- tempdir() + tmp <- file.path(tmpdir, "xyz.xpt") + attr(data_to_save$X, "format.sas") <- "foo" + + on.exit(unlink(tmpdir)) + + expect_warning(xportr_write(data_to_save, tmp, label = "label", no_fail = TRUE)) +}) From 4215bf876c0a410d7dd6fe12d446388a792c4f80 Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 5 May 2023 13:27:12 +0000 Subject: [PATCH 080/337] Update character types --- R/type.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/type.R b/R/type.R index e09329d9..667e38b8 100644 --- a/R/type.R +++ b/R/type.R @@ -38,9 +38,9 @@ xportr_type <- function(.df, metacore, domain = NULL, domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") type_name <- getOption("xportr.type_name") - characterTypes <- getOption("xportr.character_types") - numericTypes <- getOption("xportr.numeric_types") - + characterTypes <- c(getOption("xportr.character_types"), "_character") + numericTypes <- c(getOption("xportr.numeric_types"), "_numeric") + ## Common section to detect domain from argument or pipes df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) @@ -78,7 +78,7 @@ xportr_type <- function(.df, metacore, domain = NULL, type.y = if_else(type.y %in% characterTypes, "_character", type.y), type.y = if_else(type.y %in% numericTypes, "_numeric", type.y) ) - + # It is possible that a variable exists in the table that isn't in the metadata # it will be silently ignored here. This may happen depending on what a user # passes and the options they choose. The check_core function is the place From f2e9f64ac0d83917b580897115589bacd869ff80 Mon Sep 17 00:00:00 2001 From: EeethB Date: Mon, 8 May 2023 21:43:06 +0000 Subject: [PATCH 081/337] Add `xportr_metadata()` function This function will essentially let a user set metadata/metacore & domain explicitly in a function at the beginning of a pipeline. This metadata is then used in the rest of the pipeline, saving a user from repeating the name of their metadata/domain in each step --- R/df_label.R | 4 +- R/format.R | 2 +- R/label.R | 2 +- R/length.R | 2 +- R/messages.R | 2 +- R/order.R | 4 +- R/set_metadata.R | 9 ----- R/type.R | 2 +- R/xportr_metadata.R | 11 ++++++ README.Rmd | 15 ++++---- man/xportr_format.Rd | 2 +- man/xportr_label.Rd | 2 +- man/xportr_length.Rd | 2 +- man/xportr_order.Rd | 2 +- man/xportr_type.Rd | 10 ++--- tests/testthat/test-pipe.R | 79 +++++++++++++++++++++++++++++++++++++- tests/testthat/test-type.R | 15 +++++--- 17 files changed, 124 insertions(+), 41 deletions(-) delete mode 100644 R/set_metadata.R create mode 100644 R/xportr_metadata.R diff --git a/R/df_label.R b/R/df_label.R index 3e56d7bc..a29c0814 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -26,7 +26,7 @@ #' ) #' #' adsl <- xportr_df_label(adsl, metadata) -xportr_df_label <- function(.df, metacore, domain = NULL) { +xportr_df_label <- function(.df, metacore = NULL, domain = NULL) { domain_name <- getOption("xportr.df_domain_name") label_name <- getOption("xportr.df_label") @@ -41,7 +41,7 @@ xportr_df_label <- function(.df, metacore, domain = NULL) { ## Pull out correct metadata if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `set_metadata()`") + stop("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/format.R b/R/format.R index 36143ac1..fc11a9c4 100644 --- a/R/format.R +++ b/R/format.R @@ -42,7 +42,7 @@ xportr_format <- function(.df, metacore = NULL, domain = NULL, verbose = getOpti if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `set_metadata()`") + stop("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/label.R b/R/label.R index c9130d19..1c34f8f9 100644 --- a/R/label.R +++ b/R/label.R @@ -45,7 +45,7 @@ xportr_label <- function(.df, metacore = NULL, domain = NULL, if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `set_metadata()`") + stop("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/length.R b/R/length.R index edbeb93a..fdd3b3fc 100644 --- a/R/length.R +++ b/R/length.R @@ -43,7 +43,7 @@ xportr_length <- function(.df, metacore = NULL, domain = NULL, if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `set_metadata()`") + stop("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/messages.R b/R/messages.R index 562ddd00..2da9561a 100644 --- a/R/messages.R +++ b/R/messages.R @@ -44,7 +44,7 @@ var_names_log <- function(tidy_names_df, verbose) { # Message stating any renamed variables each original variable and it's new name if (nrow(only_renames) > 0) { - walk(only_renames$renamed_msg, ~ xportr_logger(.x, verbose)) + purrr::walk(only_renames$renamed_msg, ~ xportr_logger(.x, verbose)) } # Message checking for duplicate variable names after renamed (Pretty sure diff --git a/R/order.R b/R/order.R index 0b46829d..e8c773af 100644 --- a/R/order.R +++ b/R/order.R @@ -37,11 +37,9 @@ xportr_order <- function(.df, metacore = NULL, domain = NULL, verbose = getOptio ## End of common section - if (inherits(metacore, "Metacore")) - if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `set_metadata()`") + stop("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/set_metadata.R b/R/set_metadata.R deleted file mode 100644 index 8e3080f9..00000000 --- a/R/set_metadata.R +++ /dev/null @@ -1,9 +0,0 @@ -set_metadata <- function(.df, metacore) { - stopifnot( - "`.df` must be a dataframe" = inherits(.df, "data.frame"), - "`metacore` must be a dataframe or metacore object" = - inherits(.df, "data.frame") || inherits(.df, "metacore") - ) - - structure(.df, metadata = metacore) -} diff --git a/R/type.R b/R/type.R index 774986d2..cc6ba8dc 100644 --- a/R/type.R +++ b/R/type.R @@ -50,7 +50,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, ## Pull out correct metadata if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `set_metadata()`") + stop("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/xportr_metadata.R b/R/xportr_metadata.R new file mode 100644 index 00000000..1c1b5718 --- /dev/null +++ b/R/xportr_metadata.R @@ -0,0 +1,11 @@ +xportr_metadata <- function(.df, metacore, domain = NULL) { + ## Common section to detect domain from argument or pipes + + df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) + domain <- get_domain(.df, df_arg, domain) + if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain + + ## End of common section + + structure(.df, metadata = metacore) +} diff --git a/README.Rmd b/README.Rmd index 6b7e1928..e80bf733 100644 --- a/README.Rmd +++ b/README.Rmd @@ -122,7 +122,8 @@ spec_path <- system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = " var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>% dplyr::rename(type = "Data Type") %>% - rlang::set_names(tolower) + rlang::set_names(tolower) %>% + mutate(type = tolower(type)) ``` Each `xportr_` function has been written in a way to take in a part of the specification file and apply that piece to the dataset. @@ -140,12 +141,12 @@ adsl %>% ```{r, message=FALSE, eval=FALSE} # goal adsl %>% - set_metadata(var_spec) %>% - xportr_type(domain = "ADSL") %>% - xportr_length(domain = "ADSL") %>% - xportr_label(domain = "ADSL") %>% - xportr_order(domain = "ADSL") %>% - xportr_format(domain = "ADSL") + xportr_metadata(var_spec, "ADSL") %>% + xportr_length() %>% + xportr_label() %>% + xportr_order() %>% + xportr_format() %>% + xportr_type() ``` That's it! We now have a xpt file created in R with all appropriate types, lengths, labels, ordering and formats. Please check out the [Get Started](https://atorus-research.github.io/xportr/articles/xportr.html) for more information and detailed walk through of each `xportr_` function. diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index 6ecbc501..00117e43 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -6,7 +6,7 @@ \usage{ xportr_format( .df, - metacore, + metacore = NULL, domain = NULL, verbose = getOption("xportr.format_verbose", "none") ) diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index 0eed2bbe..de021f48 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -6,7 +6,7 @@ \usage{ xportr_label( .df, - metacore, + metacore = NULL, domain = NULL, verbose = getOption("xportr.label_verbose", "none") ) diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index 50a01a83..feb799cf 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -6,7 +6,7 @@ \usage{ xportr_length( .df, - metacore, + metacore = NULL, domain = NULL, verbose = getOption("xportr.length_verbose", "none") ) diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index e1c38292..4ace8fe5 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -6,7 +6,7 @@ \usage{ xportr_order( .df, - metacore, + metacore = NULL, domain = NULL, verbose = getOption("xportr.order_verbose", "none") ) diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index f5975faf..a07661de 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -6,7 +6,7 @@ \usage{ xportr_type( .df, - metacore, + metacore = NULL, domain = NULL, verbose = getOption("xportr.type_verbose", "none") ) @@ -40,10 +40,10 @@ metadata <- data.frame( ) .df <- data.frame( - Subj = as.character(123, 456, 789), - Different = c("a", "b", "c"), - Val = c("1", "2", "3"), - Param = c("param1", "param2", "param3") + Subj = as.character(123, 456, 789), + Different = c("a", "b", "c"), + Val = c("1", "2", "3"), + Param = c("param1", "param2", "param3") ) df2 <- xportr_type(.df, metadata, "test") diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R index 4adb4bf0..b7c0e360 100644 --- a/tests/testthat/test-pipe.R +++ b/tests/testthat/test-pipe.R @@ -6,6 +6,7 @@ test_that("xportr_*: Domain is obtained from a call without pipe", { order = TRUE ) + xportr_metadata(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") xportr_label(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") xportr_length(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") xportr_order(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") @@ -47,7 +48,7 @@ test_that("xportr_*: Domain is kept in between calls", { expect_equal(attr(df5, "_xportr.df_arg_"), "adsl") }) -test_that("xportr_*: Can use magrittr to pipe and aquire domain from call", { +test_that("xportr_*: Can use magrittr pipe and aquire domain from call", { withr::local_options(list(xportr.type_verbose = "message")) adsl <- minimal_table(30) @@ -80,6 +81,41 @@ test_that("xportr_*: Can use magrittr to pipe and aquire domain from call", { expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name") }) +test_that("xportr_*: Can use magrittr pipe and aquire domain from call (metadata)", { + withr::local_options(list(xportr.type_verbose = "message")) + + adsl <- minimal_table(30) + + metadata <- minimal_metadata( + dataset = TRUE, length = TRUE, label = TRUE, type = TRUE, format = TRUE, + order = TRUE + ) + + non_standard_name <- adsl + result <- non_standard_name %>% + xportr_metadata(metadata) %>% + xportr_type() %>% + xportr_label() %>% + xportr_length() %>% + xportr_order() %>% + xportr_format() %>% + xportr_df_label() + + expect_equal(attr(result, "_xportr.df_arg_"), "non_standard_name") + + # Different sequence call by moving first and last around + result2 <- non_standard_name %>% + xportr_metadata(metadata) %>% + xportr_label() %>% + xportr_length() %>% + xportr_order() %>% + xportr_df_label() %>% + xportr_type() %>% + xportr_format() + + expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name") +}) + test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call", { skip_if( compareVersion(glue("{R.version$major}.{R.version$minor}"), "4.1.0") < 0, @@ -117,3 +153,44 @@ test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call", expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name_native") }) + +test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call (metadata)", { + skip_if( + compareVersion(glue("{R.version$major}.{R.version$minor}"), "4.1.0") < 0, + "R Version doesn't support native pipe (<4.1)" + ) + + withr::local_options(list(xportr.type_verbose = "message")) + + adsl <- minimal_table(30) + + metadata <- minimal_metadata( + dataset = TRUE, length = TRUE, label = TRUE, type = TRUE, format = TRUE, + order = TRUE + ) + + non_standard_name_native <- adsl + result <- non_standard_name_native |> + xportr_metadata(metadata) |> + xportr_type() |> + xportr_label() |> + xportr_length() |> + xportr_order() |> + xportr_format() |> + xportr_df_label() + + expect_equal(attr(result, "_xportr.df_arg_"), "non_standard_name_native") + + # Different sequence call by moving first and last around + result2 <- non_standard_name_native |> + xportr_metadata(metadata) |> + xportr_label() |> + xportr_length() |> + xportr_order() |> + xportr_df_label() |> + xportr_type() |> + xportr_format() + + expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name_native") +}) + diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index a33ee6be..59a73cae 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -37,9 +37,9 @@ test_that("variable types are coerced as expected and can raise messages", { )) }) -test_that("variable types are coerced as expected and can raise messages (metadata attribute)", { +test_that("var types coerced as expected and raise messages (metadata)", { expect_message( - df2 <- set_metadata(df, meta_example) %>% xportr_type(), + df2 <- xportr_metadata(df, meta_example) %>% xportr_type(), "-- Variable type mismatches found. --" ) @@ -48,17 +48,22 @@ test_that("variable types are coerced as expected and can raise messages (metada Val = "numeric", Param = "character" )) - expect_error(xportr_type(set_metadata(df, meta_example), verbose = "stop")) + expect_error( + xportr_metadata(df, meta_example) %>% xportr_type(verbose = "stop") + ) expect_warning( - df3 <- xportr_type(set_metadata(df, meta_example), verbose = "warn") + df3 <- xportr_metadata(df, meta_example) %>% xportr_type(verbose = "warn") ) expect_equal(purrr::map_chr(df3, class), c( Subj = "numeric", Different = "character", Val = "numeric", Param = "character" )) - expect_message(df4 <- xportr_type(set_metadata(df, meta_example), verbose = "message")) + expect_message( + df4 <- xportr_metadata(df, meta_example) %>% + xportr_type(verbose = "message") + ) expect_equal(purrr::map_chr(df4, class), c( Subj = "numeric", Different = "character", Val = "numeric", Param = "character" From 16e271bcfb66fcd90163a188fad4fdd144034e63 Mon Sep 17 00:00:00 2001 From: EeethB Date: Mon, 8 May 2023 22:05:17 +0000 Subject: [PATCH 082/337] Run document() --- man/xportr_df_label.Rd | 2 +- tests/testthat/test-type.R | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index 54df405b..79393a21 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -4,7 +4,7 @@ \alias{xportr_df_label} \title{Assign Dataset Label} \usage{ -xportr_df_label(.df, metacore, domain = NULL) +xportr_df_label(.df, metacore = NULL, domain = NULL) } \arguments{ \item{.df}{A data frame of CDISC standard.} diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 59a73cae..befe1844 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -37,7 +37,7 @@ test_that("variable types are coerced as expected and can raise messages", { )) }) -test_that("var types coerced as expected and raise messages (metadata)", { +test_that("xportr_metadata: var types coerced as expected and raise messages", { expect_message( df2 <- xportr_metadata(df, meta_example) %>% xportr_type(), "-- Variable type mismatches found. --" @@ -70,7 +70,7 @@ test_that("var types coerced as expected and raise messages (metadata)", { )) }) -test_that("xportr_type() retains column attributes, besides class", { +test_that("xportr_type(): retains column attributes, besides class", { adsl <- dplyr::tibble( USUBJID = c(1001, 1002, 1003), SITEID = c(001, 002, 003), From 40f285753ec4a4d96c2e85dc243f17974cf2710b Mon Sep 17 00:00:00 2001 From: EeethB Date: Mon, 8 May 2023 22:08:52 +0000 Subject: [PATCH 083/337] Clean up changes to README --- README.Rmd | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.Rmd b/README.Rmd index e80bf733..51df6c8d 100644 --- a/README.Rmd +++ b/README.Rmd @@ -122,8 +122,7 @@ spec_path <- system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = " var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>% dplyr::rename(type = "Data Type") %>% - rlang::set_names(tolower) %>% - mutate(type = tolower(type)) + rlang::set_names(tolower) ``` Each `xportr_` function has been written in a way to take in a part of the specification file and apply that piece to the dataset. @@ -138,15 +137,17 @@ adsl %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` +The `xportr_metadata()` function can reduce duplication by setting the variable specification and domain explicitly at the top of a pipeline. + ```{r, message=FALSE, eval=FALSE} -# goal adsl %>% xportr_metadata(var_spec, "ADSL") %>% + xportr_type() %>% xportr_length() %>% xportr_label() %>% xportr_order() %>% xportr_format() %>% - xportr_type() + xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` That's it! We now have a xpt file created in R with all appropriate types, lengths, labels, ordering and formats. Please check out the [Get Started](https://atorus-research.github.io/xportr/articles/xportr.html) for more information and detailed walk through of each `xportr_` function. From a2f43e701fbd7cefc001da9ffc8891083dab0ecb Mon Sep 17 00:00:00 2001 From: EeethB Date: Mon, 8 May 2023 22:14:37 +0000 Subject: [PATCH 084/337] Attempt (and fail) to build pkgdown site --- NAMESPACE | 1 + R/xportr_metadata.R | 28 ++++++++++++++++++++++++++++ _pkgdown.yml | 5 +++-- docs/404.html | 6 +++--- docs/LICENSE-text.html | 6 +++--- docs/LICENSE.html | 6 +++--- docs/authors.html | 20 ++++++++++++-------- docs/index.html | 30 ++++++++++++++---------------- docs/pkgdown.yml | 6 +++--- man/xportr_metadata.Rd | 41 +++++++++++++++++++++++++++++++++++++++++ 10 files changed, 111 insertions(+), 38 deletions(-) create mode 100644 man/xportr_metadata.Rd diff --git a/NAMESPACE b/NAMESPACE index 3a261d6b..cd0c9ed3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -10,6 +10,7 @@ export(xportr_format) export(xportr_label) export(xportr_length) export(xportr_logger) +export(xportr_metadata) export(xportr_order) export(xportr_type) export(xportr_write) diff --git a/R/xportr_metadata.R b/R/xportr_metadata.R index 1c1b5718..6b62c835 100644 --- a/R/xportr_metadata.R +++ b/R/xportr_metadata.R @@ -1,3 +1,31 @@ +#' Set variable specifications and domain +#' +#' @param .df An R object with columns that can be coerced +#' @param metacore Either a data.frame that has the names of all possible columns +#' and their types, or a `Metacore` object from the `Metacore` package. Required +#' column names are dataset, variables, type +#' @param domain Name of the dataset. Ex ADAE/DM. This will be used to subset +#' the metacore object. If none is passed it is assumed to be the name of the +#' dataset passed in `.df`. +#' +#' @return `.df` dataset with metadata and domain attributes set +#' @export +#' +#' @examples +#' metadata <- data.frame( +#' dataset = "test", +#' variable = c("Subj", "Param", "Val", "NotUsed"), +#' type = c("numeric", "character", "numeric", "character") +#' ) +#' +#' .df <- data.frame( +#' Subj = as.character(123, 456, 789), +#' Different = c("a", "b", "c"), +#' Val = c("1", "2", "3"), +#' Param = c("param1", "param2", "param3") +#' ) +#' +#' df2 <- xportr_metadata(.df, metadata, "test") xportr_metadata <- function(.df, metacore, domain = NULL) { ## Common section to detect domain from argument or pipes diff --git a/_pkgdown.yml b/_pkgdown.yml index f679d7a1..970fcb80 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -17,7 +17,7 @@ reference: - xportr_write - xportr_format - xportr_order - + - title: xportr helper functions - contents: - label_log @@ -27,9 +27,10 @@ reference: - var_ord_msg - xportr_logger - xportr_df_label + - xportr_metadata - title: xportr navbar: ~ - contents: + contents: - xportr diff --git a/docs/404.html b/docs/404.html index 398e0a4f..24748fd1 100644 --- a/docs/404.html +++ b/docs/404.html @@ -40,7 +40,7 @@
xportr - 0.1.0 + 0.2.0 @@ -94,12 +94,12 @@

Page not found (404)

-

Site built with pkgdown 2.0.3.

+

Site built with pkgdown 2.0.7.

diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index 771e868f..dfc2e028 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -17,7 +17,7 @@ xportr - 0.1.0 + 0.2.0 @@ -64,11 +64,11 @@

License

-

Site built with pkgdown 2.0.3.

+

Site built with pkgdown 2.0.7.

diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 11098502..ddfcde77 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -17,7 +17,7 @@ xportr - 0.1.0 + 0.2.0 @@ -68,11 +68,11 @@

MIT License

-

Site built with pkgdown 2.0.3.

+

Site built with pkgdown 2.0.7.

diff --git a/docs/authors.html b/docs/authors.html index 6680e2f9..32f1b425 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -17,7 +17,7 @@ xportr - 0.1.0 + 0.2.0 @@ -67,6 +67,10 @@

Authors

Ross Didenko. Author.

+
  • +

    Zelos Zhu. Author. +

    +
  • Atorus/GSK JPT. Copyright holder.

    @@ -80,15 +84,15 @@

    Citation

    -

    Miller E, Thanikachalam V, Straub B, Didenko R (2022). +

    Miller E, Thanikachalam V, Straub B, Didenko R, Zhu Z (2023). xportr: Utilities to Output CDISC SDTM/ADaM XPT Files. -R package version 0.1.0, https://github.com/atorus-research/xportr. +R package version 0.2.0, https://github.com/atorus-research/xportr.

    @Manual{,
       title = {xportr: Utilities to Output CDISC SDTM/ADaM XPT Files},
    -  author = {Eli Miller and Vignesh  Thanikachalam and Ben Straub and Ross Didenko},
    -  year = {2022},
    -  note = {R package version 0.1.0},
    +  author = {Eli Miller and Vignesh  Thanikachalam and Ben Straub and Ross Didenko and Zelos Zhu},
    +  year = {2023},
    +  note = {R package version 0.2.0},
       url = {https://github.com/atorus-research/xportr},
     }
    @@ -99,11 +103,11 @@

    Citation

    -

    Site built with pkgdown 2.0.3.

    +

    Site built with pkgdown 2.0.7.

    diff --git a/docs/index.html b/docs/index.html index 68476df5..a6bcdd61 100644 --- a/docs/index.html +++ b/docs/index.html @@ -41,7 +41,7 @@ xportr - 0.1.0 + 0.2.0 @@ -87,18 +87,14 @@

    Installation

    -
    -

    Development version: -

    +

    This package is available from CRAN and can be installed by running:

    -devtools::install_github("https://github.com/atorus-research/xportr.git", ref = "main")
    -
    +install.packages("xportr")
    -

    CRAN +

    Development version:

    -
      -
    • As this is an experimental package and under development we have not made it available on CRAN.
    • -
    +
    +devtools::install_github("https://github.com/atorus-research/xportr.git", ref = "devel")
    @@ -148,21 +144,21 @@

    Simple Example

    All of which can be done using a well-defined specification file and the xportr package!

    First we will start with our ADSL dataset created in R. This example ADSL dataset is taken from the {admiral} package. The script that generates this ADSL dataset can be created by using this command admiral::use_ad_template("adsl"). This ADSL dataset has 306 observations and 48 variables.

    -
    +
     

    We have created a dummy specification file called ADaM_admiral_spec.xlsx found in the specs folder of this package. You can use system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr") to access this file.

    -
    +
     spec_path <- system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr")
     
     var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>%
       dplyr::rename(type = "Data Type") %>%
       rlang::set_names(tolower)

    Each xportr_ function has been written in a way to take in a part of the specification file and apply that piece to the dataset.

    -
    +
     adsl %>% 
       xportr_type(var_spec, "ADSL") %>%
       xportr_length(var_spec, "ADSL") %>%
    @@ -187,6 +183,7 @@ 

    References

    Links

    @@ -215,6 +212,7 @@

    Developers

  • Vignesh Thanikachalam
    Author
  • Ben Straub
    Author
  • Ross Didenko
    Author
  • +
  • Zelos Zhu
    Author
  • More about authors...
  • @@ -236,12 +234,12 @@

    Dev status

    -

    Site built with pkgdown 2.0.3.

    +

    Site built with pkgdown 2.0.7.

    diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index d38c0354..00008071 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,7 +1,7 @@ -pandoc: 2.17.1.1 -pkgdown: 2.0.3 +pandoc: 2.19.2 +pkgdown: 2.0.7 pkgdown_sha: ~ articles: xportr: xportr.html -last_built: 2022-06-17T13:28Z +last_built: 2023-05-08T22:13Z diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd new file mode 100644 index 00000000..87e1e5ab --- /dev/null +++ b/man/xportr_metadata.Rd @@ -0,0 +1,41 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/xportr_metadata.R +\name{xportr_metadata} +\alias{xportr_metadata} +\title{Set variable specifications and domain} +\usage{ +xportr_metadata(.df, metacore, domain = NULL) +} +\arguments{ +\item{.df}{An R object with columns that can be coerced} + +\item{metacore}{Either a data.frame that has the names of all possible columns +and their types, or a \code{Metacore} object from the \code{Metacore} package. Required +column names are dataset, variables, type} + +\item{domain}{Name of the dataset. Ex ADAE/DM. This will be used to subset +the metacore object. If none is passed it is assumed to be the name of the +dataset passed in \code{.df}.} +} +\value{ +\code{.df} dataset with metadata and domain attributes set +} +\description{ +Set variable specifications and domain +} +\examples{ +metadata <- data.frame( + dataset = "test", + variable = c("Subj", "Param", "Val", "NotUsed"), + type = c("numeric", "character", "numeric", "character") +) + +.df <- data.frame( + Subj = as.character(123, 456, 789), + Different = c("a", "b", "c"), + Val = c("1", "2", "3"), + Param = c("param1", "param2", "param3") +) + +df2 <- xportr_metadata(.df, metadata, "test") +} From 0e69d5f45dca230eedccce5a98985155ae506e5a Mon Sep 17 00:00:00 2001 From: EeethB Date: Mon, 8 May 2023 22:23:49 +0000 Subject: [PATCH 085/337] Restore messages.R because somehow I broke it --- R/messages.R | 60 +++++++++++++++++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/R/messages.R b/R/messages.R index 2da9561a..37d0b9a4 100644 --- a/R/messages.R +++ b/R/messages.R @@ -11,7 +11,8 @@ #' @export xportr_logger <- function(message, type = "none", ...) { - log_fun <- switch(type, + log_fun <- switch( + type, stop = abort, warn = warn, message = inform, @@ -19,6 +20,7 @@ xportr_logger <- function(message, type = "none", ...) { ) do.call(log_fun, list(message, ...)) + } #' Utility for Renaming Variables @@ -32,29 +34,40 @@ var_names_log <- function(tidy_names_df, verbose) { only_renames <- tidy_names_df %>% filter(original_varname != renamed_var) %>% - mutate(renamed_msg = paste0("Var ", col_pos, ": '", original_varname, - "' was renamed to '", renamed_var, "'")) + mutate( + renamed_msg = glue( + "Var {col_pos} : '{original_varname}' was renamed to 'renamed_var'" + ) + ) # Message regarding number of variables that were renamed/ modified num_renamed <- nrow(only_renames) tot_num_vars <- nrow(tidy_names_df) - message("\n") - cli::cli_h2(paste0(num_renamed, " of ", tot_num_vars, " (", - round(100 * (num_renamed / tot_num_vars), 1), "%) variables were renamed")) + + cli_h2(glue( + .sep = " ", + "{num_renamed} of {tot_num_vars}", + "({round(100*(num_renamed/tot_num_vars), 1)}%)", + "variables were renamed" + )) # Message stating any renamed variables each original variable and it's new name if (nrow(only_renames) > 0) { - purrr::walk(only_renames$renamed_msg, ~ xportr_logger(.x, verbose)) + walk(only_renames$renamed_msg, ~xportr_logger(.x, verbose)) } # Message checking for duplicate variable names after renamed (Pretty sure # this is impossible) but good to have a check none-the-less. dups <- tidy_names_df %>% filter(renamed_n > 1) if (nrow(dups) != 0) { - cli::cli_alert_danger( - paste("Duplicate renamed term(s) were created. Consider creating dictionary terms for:", - paste(unique(dups$renamed_var), collapse = ", ") - )) + cli_alert_danger( + glue( + .sep = " ", + "Duplicate renamed term(s) were created.", + "Consider creating dictionary terms for:", + encode_vars(unique(dups$renamed_var)) + ) + ) } } @@ -67,11 +80,12 @@ var_names_log <- function(tidy_names_df, verbose) { #' @return Output to Console #' @export type_log <- function(meta_ordered, type_mismatch_ind, verbose) { + if (length(type_mismatch_ind) > 0) { + message <- glue( "Variable type(s) in dataframe don't match metadata: ", - paste0(glue("{encode_vars(meta_ordered[type_mismatch_ind, 'variable'])}"), - collapse = "", sep = " ") + "{encode_vars(meta_ordered[type_mismatch_ind, 'variable'])}" ) xportr_logger(message, verbose) @@ -89,13 +103,17 @@ type_log <- function(meta_ordered, type_mismatch_ind, verbose) { #' @return Output to Console #' @export length_log <- function(miss_vars, verbose) { + if (length(miss_vars) > 0) { + cli_h2("Variable lengths missing from metadata.") cli_alert_success("{ length(miss_vars) } lengths resolved") xportr_logger( - c("Variable(s) present in dataframe but doesn't exist in `metadata`.", - x = glue("Problem with {encode_vars(miss_vars)}")), + glue( + "Variable(s) present in dataframe but doesn't exist in `metadata`.", + "Problem with {encode_vars(miss_vars)}" + ), type = verbose ) } @@ -109,20 +127,20 @@ length_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export label_log <- function(miss_vars, verbose) { + if (length(miss_vars) > 0) { + cli_h2("Variable labels missing from metadata.") cli_alert_success("{ length(miss_vars) } labels skipped") xportr_logger( c("Variable(s) present in dataframe but doesn't exist in `metadata`.", - x = glue("Problem with {encode_vars(miss_vars)}") - ), + x = glue("Problem with {encode_vars(miss_vars)}")), type = verbose ) } } - #' Utility for Ordering #' #' @param moved_vars Variables moved in the dataset @@ -131,16 +149,14 @@ label_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export var_ord_msg <- function(moved_vars, verbose) { + if (length(moved_vars) > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") message <- glue( - "Variable reordered in `.df`: ", - paste0(glue("{ encode_vars(moved_vars) }"), - collapse = "", sep = " ") + "Variable reordered in `.df`: { encode_vars(moved_vars) }" ) xportr_logger(message, verbose) } else { cli_h2("All variables in specification file are in dataset") } - } From c15dd701555645f324b652442bdca751d94fddbe Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 9 May 2023 05:49:43 +0530 Subject: [PATCH 086/337] feat: adding CI for checking the style of the package --- .github/workflows/check-standard.yaml | 4 +-- .github/workflows/lint.yaml | 6 ++-- .github/workflows/pkgdown.yaml | 4 +-- .github/workflows/spellcheck.yml | 3 +- .github/workflows/style.yml | 45 +++++++++++++++++++++++++++ .github/workflows/test-coverage.yaml | 4 +-- 6 files changed, 55 insertions(+), 11 deletions(-) create mode 100644 .github/workflows/style.yml diff --git a/.github/workflows/check-standard.yaml b/.github/workflows/check-standard.yaml index 07026974..d9d55cb3 100644 --- a/.github/workflows/check-standard.yaml +++ b/.github/workflows/check-standard.yaml @@ -1,13 +1,13 @@ # Workflow derived from https://github.com/r-lib/actions/tree/master/examples # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +name: R-CMD-check 📩 + on: push: branches: [main, devel] pull_request: branches: [main, devel] -name: R-CMD-check - jobs: R-CMD-check: runs-on: ${{ matrix.config.os }} diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index ca69bc6c..cee715dc 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -1,13 +1,13 @@ # Workflow derived from https://github.com/r-lib/actions/tree/v2/examples # Need help debugging build failures? Start at https://github.com/r-lib/actions#where-to-find-help +name: Check Lint đŸ§č + on: push: branches: [main] pull_request: branches: [main, devel] -name: lint - jobs: lint: runs-on: ubuntu-latest @@ -29,4 +29,4 @@ jobs: run: lintr::lint_package() shell: Rscript {0} env: - LINTR_ERROR_ON_LINT: true \ No newline at end of file + LINTR_ERROR_ON_LINT: true diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 781a07e2..5162a56e 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -1,11 +1,11 @@ +name: Deploy pkgdown site 📜 + on: push: branches: - main - master -name: pkgdown - jobs: pkgdown: runs-on: macOS-latest diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index d738f97f..76c40c78 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -1,5 +1,4 @@ ---- -name: Spelling 🆎 +name: Check Spelling 🆎 on: workflow_dispatch: diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml new file mode 100644 index 00000000..e220e81a --- /dev/null +++ b/.github/workflows/style.yml @@ -0,0 +1,45 @@ +name: Check Style 🎹 + +on: + push: + branches: [main] + pull_request: + branches: [main, devel] + +concurrency: + group: style-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + style: + name: Check code style 🧑‍🎹 + runs-on: ubuntu-latest + if: > + !contains(github.event.commits[0].message, '[skip stylecheck]') + && github.event.pull_request.draft == false + + steps: + - uses: actions/checkout@v3 + with: + path: ${{ github.event.repository.name }} + fetch-depth: 0 + + - uses: r-lib/actions/setup-r@v2 + with: + use-public-rspm: true + + - name: Install styler đŸ–Œïž + run: install.packages(c("styler", "knitr"), repos = "https://cloud.r-project.org") + shell: Rscript {0} + + - name: Run styler đŸ–Œïž + run: | + detect <- styler::style_pkg(dry = "on") + if (TRUE %in% detect$changed) { + problems <- subset(detect$file, detect$changed == T) + cat(paste("Styling errors found in", length(problems), "files\n")) + cat("Please run `styler::style_pkg()` to fix the style\n") + quit(status = 1) + } + shell: Rscript {0} + working-directory: ${{ github.event.repository.name }} diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index 05aee9b4..21398d21 100644 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -1,3 +1,5 @@ +name: Check Test Coverage đŸ§Ș + on: push: branches: @@ -8,8 +10,6 @@ on: - main - master -name: test-coverage - jobs: test-coverage: runs-on: macOS-latest From 899ade3a6bdd199a5384a4e472aa9378197b5e6f Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 9 May 2023 05:56:27 +0530 Subject: [PATCH 087/337] fix style change --- R/df_label.R | 4 +- R/format.R | 9 +-- R/label.R | 16 +++-- R/length.R | 12 ++-- R/messages.R | 18 ++---- R/order.R | 4 +- R/support-test.R | 39 ++++++------ R/type.R | 35 ++++++----- R/utils-xportr.R | 112 ++++++++++++++++++++------------- R/write.R | 12 ++-- R/xportr-package.R | 8 ++- R/zzz.R | 2 +- README.Rmd | 9 ++- tests/testthat/test-length.R | 3 +- tests/testthat/test-messages.R | 2 +- tests/testthat/test-options.R | 4 +- tests/testthat/test-pipe.R | 20 ++++-- vignettes/xportr.Rmd | 15 +++-- 18 files changed, 179 insertions(+), 145 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index 18899604..3ecf3153 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -27,7 +27,6 @@ #' #' adsl <- xportr_df_label(adsl, metacore) xportr_df_label <- function(.df, metacore, domain = NULL) { - domain_name <- getOption("xportr.df_domain_name") label_name <- getOption("xportr.df_label") @@ -39,8 +38,9 @@ xportr_df_label <- function(.df, metacore, domain = NULL) { ## End of common section - if (inherits(metacore, "Metacore")) + if (inherits(metacore, "Metacore")) { metacore <- metacore$ds_spec + } label <- metacore %>% filter(!!sym(domain_name) == domain) %>% diff --git a/R/format.R b/R/format.R index c874fe7e..e55b7753 100644 --- a/R/format.R +++ b/R/format.R @@ -28,7 +28,6 @@ #' #' adsl <- xportr_format(adsl, metacore) xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.format_verbose", "none")) { - domain_name <- getOption("xportr.domain_name") format_name <- getOption("xportr.format_name") variable_name <- getOption("xportr.variable_name") @@ -41,8 +40,9 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo ## End of common section - if (inherits(metacore, "Metacore")) + if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec + } if (domain_name %in% names(metacore)) { metadata <- metacore %>% @@ -56,7 +56,7 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo format <- filtered_metadata %>% - select(!!sym(format_name)) %>% + select(!!sym(format_name)) %>% unlist() %>% toupper() @@ -64,8 +64,9 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo for (i in seq_len(ncol(.df))) { format_sas <- purrr::pluck(format, colnames(.df)[i]) - if (is.na(format_sas) || is.null(format_sas)) + if (is.na(format_sas) || is.null(format_sas)) { format_sas <- "" + } attr(.df[[i]], "format.sas") <- format_sas } diff --git a/R/label.R b/R/label.R index f125569e..add71703 100644 --- a/R/label.R +++ b/R/label.R @@ -31,7 +31,6 @@ #' adsl <- xportr_label(adsl, metacore) xportr_label <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.label_verbose", "none")) { - domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") variable_label <- getOption("xportr.label") @@ -44,8 +43,9 @@ xportr_label <- function(.df, metacore, domain = NULL, ## End of common section - if (inherits(metacore, "Metacore")) + if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec + } if (domain_name %in% names(metacore)) { metadata <- metacore %>% @@ -65,18 +65,22 @@ xportr_label <- function(.df, metacore, domain = NULL, # Check any variable label have more than 40 characters --- label_len <- lapply(label, nchar) - err_len <- which(label_len > 40) %>% names + err_len <- which(label_len > 40) %>% names() if (length(err_len) > 0) { warn( c("Length of variable label must be 40 characters or less.", - x = glue("Problem with {encode_vars(err_len)}.")) + x = glue("Problem with {encode_vars(err_len)}.") + ) ) } for (i in names(.df)) { - if (i %in% miss_vars) attr(.df[[i]], "label") <- "" - else attr(.df[[i]], "label") <- label[[i]] + if (i %in% miss_vars) { + attr(.df[[i]], "label") <- "" + } else { + attr(.df[[i]], "label") <- label[[i]] + } } .df diff --git a/R/length.R b/R/length.R index 5a9966d7..89c39a3f 100644 --- a/R/length.R +++ b/R/length.R @@ -29,7 +29,6 @@ #' adsl <- xportr_length(adsl, metacore) xportr_length <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.length_verbose", "none")) { - domain_name <- getOption("xportr.domain_name") variable_length <- getOption("xportr.length") variable_name <- getOption("xportr.variable_name") @@ -42,8 +41,9 @@ xportr_length <- function(.df, metacore, domain = NULL, ## End of common section - if (inherits(metacore, "Metacore")) + if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec + } if (domain_name %in% names(metacore)) { metadata <- metacore %>% @@ -67,7 +67,6 @@ xportr_length <- function(.df, metacore, domain = NULL, } else { attr(.df[[i]], "width") <- length[[i]] } - } .df @@ -76,6 +75,9 @@ xportr_length <- function(.df, metacore, domain = NULL, impute_length <- function(col) { characterTypes <- getOption("xportr.character_types") # first_class will collapse to character if it is the option - if (first_class(col) %in% "character") 200 - else 8 + if (first_class(col) %in% "character") { + 200 + } else { + 8 + } } diff --git a/R/messages.R b/R/messages.R index 37d0b9a4..b7b4d376 100644 --- a/R/messages.R +++ b/R/messages.R @@ -10,9 +10,7 @@ #' @return Output to Console #' @export xportr_logger <- function(message, type = "none", ...) { - - log_fun <- switch( - type, + log_fun <- switch(type, stop = abort, warn = warn, message = inform, @@ -20,7 +18,6 @@ xportr_logger <- function(message, type = "none", ...) { ) do.call(log_fun, list(message, ...)) - } #' Utility for Renaming Variables @@ -31,7 +28,6 @@ xportr_logger <- function(message, type = "none", ...) { #' @return Output to Console #' @export var_names_log <- function(tidy_names_df, verbose) { - only_renames <- tidy_names_df %>% filter(original_varname != renamed_var) %>% mutate( @@ -53,7 +49,7 @@ var_names_log <- function(tidy_names_df, verbose) { # Message stating any renamed variables each original variable and it's new name if (nrow(only_renames) > 0) { - walk(only_renames$renamed_msg, ~xportr_logger(.x, verbose)) + walk(only_renames$renamed_msg, ~ xportr_logger(.x, verbose)) } # Message checking for duplicate variable names after renamed (Pretty sure @@ -80,9 +76,7 @@ var_names_log <- function(tidy_names_df, verbose) { #' @return Output to Console #' @export type_log <- function(meta_ordered, type_mismatch_ind, verbose) { - if (length(type_mismatch_ind) > 0) { - message <- glue( "Variable type(s) in dataframe don't match metadata: ", "{encode_vars(meta_ordered[type_mismatch_ind, 'variable'])}" @@ -103,9 +97,7 @@ type_log <- function(meta_ordered, type_mismatch_ind, verbose) { #' @return Output to Console #' @export length_log <- function(miss_vars, verbose) { - if (length(miss_vars) > 0) { - cli_h2("Variable lengths missing from metadata.") cli_alert_success("{ length(miss_vars) } lengths resolved") @@ -127,15 +119,14 @@ length_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export label_log <- function(miss_vars, verbose) { - if (length(miss_vars) > 0) { - cli_h2("Variable labels missing from metadata.") cli_alert_success("{ length(miss_vars) } labels skipped") xportr_logger( c("Variable(s) present in dataframe but doesn't exist in `metadata`.", - x = glue("Problem with {encode_vars(miss_vars)}")), + x = glue("Problem with {encode_vars(miss_vars)}") + ), type = verbose ) } @@ -149,7 +140,6 @@ label_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export var_ord_msg <- function(moved_vars, verbose) { - if (length(moved_vars) > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") message <- glue( diff --git a/R/order.R b/R/order.R index a388e243..19303028 100644 --- a/R/order.R +++ b/R/order.R @@ -25,7 +25,6 @@ #' #' adsl <- xportr_order(adsl, metacore) xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.order_verbose", "none")) { - domain_name <- getOption("xportr.domain_name") order_name <- getOption("xportr.order_name") variable_name <- getOption("xportr.variable_name") @@ -38,8 +37,9 @@ xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xpor ## End of common section - if (inherits(metacore, "Metacore")) + if (inherits(metacore, "Metacore")) { metacore <- metacore$ds_vars + } if (domain_name %in% names(metacore)) { metadata <- metacore %>% diff --git a/R/support-test.R b/R/support-test.R index ce4c9387..deba9587 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -7,11 +7,13 @@ #' @return The first argument, invisibly. expect_attr_width <- function(result, metadata_length) { test_widths <- map( - colnames(result), ~attributes(result[[.x]]) %>% pluck("width") + colnames(result), ~ attributes(result[[.x]]) %>% pluck("width") ) %>% unlist() == metadata_length - test_widths %>% all() %>% testthat::expect_true() + test_widths %>% + all() %>% + testthat::expect_true() invisible(result) } @@ -67,29 +69,28 @@ minimal_table <- function(n_rows = 3, cols = c("x", "y")) { #' #' @return A metadata data.frame minimal_metadata <- function( - dataset = FALSE, - length = FALSE, - label = FALSE, - type = FALSE, - format = FALSE, - order = FALSE, - dataset_name = "adsl", - var_names = NULL -) { + dataset = FALSE, + length = FALSE, + label = FALSE, + type = FALSE, + format = FALSE, + order = FALSE, + dataset_name = "adsl", + var_names = NULL) { cols_logical <- c(dataset, TRUE, label, length, type, format, order) cols <- c( "dataset", "variable", "label", "length", "type", "format", "order" )[cols_logical] metadata <- tribble( - ~dataset, ~variable, ~label, ~length, ~type, ~format, ~order, - "adsl", "x", "Lorem", 8, "numeric", NA, 1, - "adsl", "y", "Ipsum", 200, "numeric", NA, 2, - "adsl", "z", "Dolor", 8, "numeric", NA, 3, - "adsl", "a", "Sit", 8, "numeric", NA, 4, - "adsl", "b", "Amet", 200, "character", NA, 5, - "adsl", "c", "Consectetur", 200, "character", "datetime20.", 6, - "adsl", "d", "Adipiscing", 200, "date", "date9.", 7 + ~dataset, ~variable, ~label, ~length, ~type, ~format, ~order, + "adsl", "x", "Lorem", 8, "numeric", NA, 1, + "adsl", "y", "Ipsum", 200, "numeric", NA, 2, + "adsl", "z", "Dolor", 8, "numeric", NA, 3, + "adsl", "a", "Sit", 8, "numeric", NA, 4, + "adsl", "b", "Amet", 200, "character", NA, 5, + "adsl", "c", "Consectetur", 200, "character", "datetime20.", 6, + "adsl", "d", "Adipiscing", 200, "date", "date9.", 7 ) if (!is.null(var_names)) { diff --git a/R/type.R b/R/type.R index 2e465b1f..f680700b 100644 --- a/R/type.R +++ b/R/type.R @@ -24,16 +24,15 @@ #' ) #' #' .df <- data.frame( -#' Subj = as.character(123, 456, 789), -#' Different = c("a", "b", "c"), -#' Val = c("1", "2", "3"), -#' Param = c("param1", "param2", "param3") +#' Subj = as.character(123, 456, 789), +#' Different = c("a", "b", "c"), +#' Val = c("1", "2", "3"), +#' Param = c("param1", "param2", "param3") #' ) #' #' df2 <- xportr_type(.df, metacore, "test") xportr_type <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.type_verbose", "none")) { - # Name of the columns for working with metadata domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") @@ -83,17 +82,21 @@ xportr_type <- function(.df, metacore, domain = NULL, # Walk along the columns and coerce the variables. Modifying the columns # Directly instead of something like map_dfc to preserve any attributes. - walk2(correct_type, seq_along(correct_type), - function(x, i, is_correct) { - if (!is_correct[i]) { - orig_attributes <- attributes(.df[[i]]) - orig_attributes$class <- NULL - if (correct_type[i] %in% characterTypes) - .df[[i]] <<- as.character(.df[[i]]) - else .df[[i]] <<- as.numeric(.df[[i]]) - attributes(.df[[i]]) <<- orig_attributes - } - }, is_correct) + walk2( + correct_type, seq_along(correct_type), + function(x, i, is_correct) { + if (!is_correct[i]) { + orig_attributes <- attributes(.df[[i]]) + orig_attributes$class <- NULL + if (correct_type[i] %in% characterTypes) { + .df[[i]] <<- as.character(.df[[i]]) + } else { + .df[[i]] <<- as.numeric(.df[[i]]) + } + attributes(.df[[i]]) <<- orig_attributes + } + }, is_correct + ) .df } diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 98969649..427a1414 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -9,8 +9,10 @@ extract_attr <- function(data, attr = c("label", "format.sas", "SAStype", "SASle attr <- match.arg(attr) out <- lapply(data, function(.x) attr(.x, attr)) out <- vapply(out, - function(.x) ifelse(is.null(.x), "", .x), - character(1L), USE.NAMES = FALSE) + function(.x) ifelse(is.null(.x), "", .x), + character(1L), + USE.NAMES = FALSE + ) names(out) <- names(data) out } @@ -119,26 +121,29 @@ fmt_fmts <- function(x) { xpt_validate_var_names <- function(varnames, list_vars_first = TRUE, err_cnd = character()) { - # 1.1 Check length -- chk_varlen <- varnames[nchar(varnames) > 8] if (length(chk_varlen) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, - glue("{fmt_vars(chk_varlen)} must be 8 characters or less."), - glue(" - Must be 8 characters or less: {fmt_vars(chk_varlen)}."))) + glue("{fmt_vars(chk_varlen)} must be 8 characters or less."), + glue(" + Must be 8 characters or less: {fmt_vars(chk_varlen)}.") + )) } # 1.2 Check first character -- - chk_first_chr <- varnames[stringr::str_detect(stringr::str_sub(varnames, 1, 1), - "[^[:alpha:]]")] + chk_first_chr <- varnames[stringr::str_detect( + stringr::str_sub(varnames, 1, 1), + "[^[:alpha:]]" + )] if (length(chk_first_chr) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, - glue("{fmt_vars(chk_first_chr)} must start with a letter."), - glue(" - Must start with a letter: {fmt_vars(chk_first_chr)}."))) + glue("{fmt_vars(chk_first_chr)} must start with a letter."), + glue(" + Must start with a letter: {fmt_vars(chk_first_chr)}.") + )) } # 1.3 Check Non-ASCII and underscore characters -- @@ -146,21 +151,24 @@ xpt_validate_var_names <- function(varnames, if (length(chk_alnum) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, - glue("{fmt_vars(chk_alnum)} cannot contain any non-ASCII, symbol or underscore characters."), - glue(" - Cannot contain any non-ASCII, symbol or underscore characters: {fmt_vars(chk_alnum)}."))) + glue("{fmt_vars(chk_alnum)} cannot contain any non-ASCII, symbol or underscore characters."), + glue(" + Cannot contain any non-ASCII, symbol or underscore characters: {fmt_vars(chk_alnum)}.") + )) } # 1.4 Check for any lowercase letters - or not all uppercase chk_lower <- varnames[!stringr::str_detect( - stringr::str_replace_all(varnames, "[:digit:]", ""), - "^[[:upper:]]+$")] + stringr::str_replace_all(varnames, "[:digit:]", ""), + "^[[:upper:]]+$" + )] if (length(chk_lower) > 0) { err_cnd <- c(err_cnd, ifelse(list_vars_first, - glue("{fmt_vars(chk_lower)} cannot contain any lowercase characters."), - glue(" - Cannot contain any lowercase characters {fmt_vars(chk_lower)}."))) + glue("{fmt_vars(chk_lower)} cannot contain any lowercase characters."), + glue(" + Cannot contain any lowercase characters {fmt_vars(chk_lower)}.") + )) } return(err_cnd) } @@ -172,7 +180,6 @@ xpt_validate_var_names <- function(varnames, #' @return xpt file #' @noRd xpt_validate <- function(data) { - err_cnd <- character() # 1.0 VARIABLES ---- @@ -187,45 +194,55 @@ xpt_validate <- function(data) { chk_label_len <- labels[nchar(labels) > 40] if (length(chk_label_len) > 0) { - err_cnd <- c(err_cnd, - glue("{fmt_labs(chk_label_len)} must be 40 characters or less.")) + err_cnd <- c( + err_cnd, + glue("{fmt_labs(chk_label_len)} must be 40 characters or less.") + ) } # 2.2 Check Non-ASCII and special characters chk_spl_chr <- labels[stringr::str_detect(labels, "[<>]|[^[:ascii:]]")] if (length(chk_spl_chr) > 0) { - err_cnd <- c(err_cnd, - glue("{fmt_labs(chk_spl_chr)} cannot contain any non-ASCII, symbol or special characters.")) + err_cnd <- c( + err_cnd, + glue("{fmt_labs(chk_spl_chr)} cannot contain any non-ASCII, symbol or special characters.") + ) } # 3.0 VARIABLE TYPES ---- types <- tolower(extract_attr(data, attr = "SAStype")) - expected_types <- c("", "text", "integer", "float", "datetime", "date", "time", - "partialdate", "partialtime", "partialdatetime", - "incompletedatetime", "durationdatetime", "intervaldatetime") + expected_types <- c( + "", "text", "integer", "float", "datetime", "date", "time", + "partialdate", "partialtime", "partialdatetime", + "incompletedatetime", "durationdatetime", "intervaldatetime" + ) # 3.1 Invalid types -- chk_types <- types[which(!types %in% expected_types)] if (length(chk_types) > 0) { - err_cnd <- c(err_cnd, - glue("{fmt_vars(names(types))} must have a valid type.")) + err_cnd <- c( + err_cnd, + glue("{fmt_vars(names(types))} must have a valid type.") + ) } # 4.0 Format Types ---- formats <- tolower(extract_attr(data, attr = "format.sas")) ## The usual expected formats in clinical trials: characters, dates - expected_formats <- c(NA, - "", - paste("$", 1:200, ".", sep = ""), - paste("date", 5:11, ".", sep = ""), - paste("time", 2:20, ".", sep = ""), - paste("datetime", 7:40, ".", sep = ""), - paste("yymmdd", 2:10, ".", sep = ""), - paste("mmddyy", 2:10, ".", sep = ""), - paste("ddmmyy", 2:10, ".", sep = "")) + expected_formats <- c( + NA, + "", + paste("$", 1:200, ".", sep = ""), + paste("date", 5:11, ".", sep = ""), + paste("time", 2:20, ".", sep = ""), + paste("datetime", 7:40, ".", sep = ""), + paste("yymmdd", 2:10, ".", sep = ""), + paste("mmddyy", 2:10, ".", sep = ""), + paste("ddmmyy", 2:10, ".", sep = "") + ) chk_formats <- formats[which(!formats %in% expected_formats)] @@ -233,8 +250,10 @@ xpt_validate <- function(data) { format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" chk_formats <- chk_formats[which(!str_detect(chk_formats, format_regex))] if (length(chk_formats) > 0) { - err_cnd <- c(err_cnd, - glue("{fmt_fmts(names(chk_formats))} must have a valid format.")) + err_cnd <- c( + err_cnd, + glue("{fmt_fmts(names(chk_formats))} must have a valid format.") + ) } return(err_cnd) } @@ -246,8 +265,8 @@ xpt_validate <- function(data) { get_domain <- function(.df, df_arg, domain) { if (!is.null(domain) && !is.character(domain)) { abort(c("`domain` must be a vector with type .", - x = glue("Instead, it has type <{typeof(domain)}>.")) - ) + x = glue("Instead, it has type <{typeof(domain)}>.") + )) } if (identical(df_arg, ".")) { @@ -262,7 +281,7 @@ get_domain <- function(.df, df_arg, domain) { #' @return The R Object at the top of a pipe stack #' @noRd get_pipe_call <- function() { - call_strs <- map(as.list(sys.calls()), ~deparse1(.x, nlines = 1)) + call_strs <- map(as.list(sys.calls()), ~ deparse1(.x, nlines = 1)) top_call <- max(which(str_detect(call_strs, "%>%"))) call_str <- call_strs[[top_call]] trimws(strsplit(call_str, "%>%", fixed = TRUE)[[1]][[1]]) @@ -277,6 +296,9 @@ get_pipe_call <- function() { first_class <- function(x) { characterTypes <- getOption("xportr.character_types") class_ <- tolower(class(x)[1]) - if (class_ %in% characterTypes) "character" - else class_ + if (class_ %in% characterTypes) { + "character" + } else { + class_ + } } diff --git a/R/write.R b/R/write.R index 2bca7e39..369db5c4 100644 --- a/R/write.R +++ b/R/write.R @@ -20,9 +20,8 @@ #' @return A data frame. `xportr_write()` returns the input data invisibly. #' @export xportr_write <- function(.df, path, label = NULL) { - path <- normalizePath(path, mustWork = FALSE) - + name <- tools::file_path_sans_ext(basename(path)) if (nchar(name) > 8) { @@ -34,16 +33,17 @@ xportr_write <- function(.df, path, label = NULL) { } if (!is.null(label)) { - - if (nchar(label) > 40) + if (nchar(label) > 40) { abort("`label` must be 40 characters or less.") + } - if (stringr::str_detect(label, "[<>]|[^[:ascii:]]")) + if (stringr::str_detect(label, "[<>]|[^[:ascii:]]")) { abort("`label` cannot contain any non-ASCII, symbol or special characters.") + } attr(.df, "label") <- label } - + checks <- xpt_validate(.df) if (length(checks) > 0) { diff --git a/R/xportr-package.R b/R/xportr-package.R index 5d86b2d4..09e63f42 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -23,9 +23,11 @@ #' "_PACKAGE" -globalVariables(c("abbr_parsed", "abbr_stem", "adj_orig", "adj_parsed", "col_pos", "dict_varname", - "lower_original_varname", "my_minlength", "num_st_ind", "original_varname", - "renamed_n", "renamed_var", "use_bundle", "viable_start")) +globalVariables(c( + "abbr_parsed", "abbr_stem", "adj_orig", "adj_parsed", "col_pos", "dict_varname", + "lower_original_varname", "my_minlength", "num_st_ind", "original_varname", + "renamed_n", "renamed_var", "use_bundle", "viable_start" +)) # The following block is used by usethis to automatically manage # roxygen namespace tags. Modify with care! diff --git a/R/zzz.R b/R/zzz.R index 35eca269..4cb85dde 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -19,6 +19,6 @@ ) toset <- !(names(op.devtools) %in% names(op)) if (any(toset)) options(op.devtools[toset]) - + invisible() } diff --git a/README.Rmd b/README.Rmd index da78786c..feef6bc7 100644 --- a/README.Rmd +++ b/README.Rmd @@ -123,18 +123,17 @@ spec_path <- system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = " var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>% dplyr::rename(type = "Data Type") %>% rlang::set_names(tolower) - ``` Each `xportr_` function has been written in a way to take in a part of the specification file and apply that piece to the dataset. ```{r, message=FALSE, eval=FALSE} -adsl %>% +adsl %>% xportr_type(var_spec, "ADSL") %>% xportr_length(var_spec, "ADSL") %>% xportr_label(var_spec, "ADSL") %>% - xportr_order(var_spec, "ADSL") %>% - xportr_format(var_spec, "ADSL") %>% + xportr_order(var_spec, "ADSL") %>% + xportr_format(var_spec, "ADSL") %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` @@ -146,4 +145,4 @@ We are in talks with other Pharma companies involved with the [`{pharmaverse}`](
    -This package was developed jointly by [GSK](https://us.gsk.com/en-us/home/) and [Atorus](https://www.atorusresearch.com/). \ No newline at end of file +This package was developed jointly by [GSK](https://us.gsk.com/en-us/home/) and [Atorus](https://www.atorusresearch.com/). diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 52561888..062b2b59 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -124,7 +124,7 @@ test_that("xportr_length: Impute character lengths based on class", { adsl <- adsl %>% mutate( new_date = as.Date(.data$x, origin = "1970-01-01"), - new_char = as.character(.data$b), + new_char = as.character(.data$b), new_num = as.numeric(.data$x) ) @@ -211,5 +211,4 @@ test_that("xportr_length: Column length of known/unkown character types is 200/8 withr::local_options(list(xportr.character_types = c("character", "date"))) expect_equal(impute_length(Sys.time()), 8) - }) diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index 0a82f239..36c35b32 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -85,7 +85,7 @@ test_that("var_names_log: Renamed variables messages are shown", { var_names_log("message") %>% expect_message( ".*[0-9]+ of [0-9]+ \\([0-9]+(\\.[0-9]+)%\\) variables were renamed.*" - ) %>% + ) %>% expect_message("Var . : '.*' was renamed to '.*'") %>% expect_message("Var . : '.*' was renamed to '.*'") %>% expect_message("Var . : '.*' was renamed to '.*'") %>% diff --git a/tests/testthat/test-options.R b/tests/testthat/test-options.R index 9592f9f0..8a845c88 100644 --- a/tests/testthat/test-options.R +++ b/tests/testthat/test-options.R @@ -1,6 +1,6 @@ test_that("options are originally set as expected", { op <- options() - + expect_equal(op$xportr.df_domain_name, "dataset") expect_equal(op$xportr.df_label, "label") expect_equal(op$xportr.coerse, "none") @@ -10,6 +10,4 @@ test_that("options are originally set as expected", { expect_equal(op$xportr.label, "label") expect_equal(op$xportr.length, "length") expect_equal(op$xportr.format_name, "format") - - }) diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R index 4adb4bf0..cc842266 100644 --- a/tests/testthat/test-pipe.R +++ b/tests/testthat/test-pipe.R @@ -6,11 +6,21 @@ test_that("xportr_*: Domain is obtained from a call without pipe", { order = TRUE ) - xportr_label(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") - xportr_length(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") - xportr_order(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") - xportr_format(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") - xportr_type(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") + xportr_label(adsl, metadata) %>% + attr("_xportr.df_arg_") %>% + expect_equal("adsl") + xportr_length(adsl, metadata) %>% + attr("_xportr.df_arg_") %>% + expect_equal("adsl") + xportr_order(adsl, metadata) %>% + attr("_xportr.df_arg_") %>% + expect_equal("adsl") + xportr_format(adsl, metadata) %>% + attr("_xportr.df_arg_") %>% + expect_equal("adsl") + xportr_type(adsl, metadata) %>% + attr("_xportr.df_arg_") %>% + expect_equal("adsl") }) diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 2c98eb41..001edc74 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -23,10 +23,12 @@ library(DT) local({ hook_output <- knitr::knit_hooks$get("output") knitr::knit_hooks$set(output = function(x, options) { - if (!is.null(options$max.height)) options$attr.output <- c( - options$attr.output, - sprintf('style="max-height: %s;"', options$max.height) - ) + if (!is.null(options$max.height)) { + options$attr.output <- c( + options$attr.output, + sprintf('style="max-height: %s;"', options$max.height) + ) + } hook_output(x, options) }) }) @@ -90,10 +92,11 @@ In order to make use of the functions within `xportr` you will need to create an ```{r} var_spec <- readxl::read_xlsx( - system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), sheet = "Variables") %>% + system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), + sheet = "Variables" +) %>% dplyr::rename(type = "Data Type") %>% rlang::set_names(tolower) - ```
    From 63e43941ad5cb4d6009bd66e26946f01dfc083f2 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 9 May 2023 00:28:43 +0000 Subject: [PATCH 088/337] Update NEWS.md --- NEWS.md | 1 + R/messages.R | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/NEWS.md b/NEWS.md index f4fed78a..84a12854 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ # xportr 0.3.0 * Fixed an issue where xportr_type would overwrite column labels, widths, and "sas.formats" +* Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline # xportr 0.2.0 * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! diff --git a/R/messages.R b/R/messages.R index 37d0b9a4..25005e25 100644 --- a/R/messages.R +++ b/R/messages.R @@ -53,14 +53,14 @@ var_names_log <- function(tidy_names_df, verbose) { # Message stating any renamed variables each original variable and it's new name if (nrow(only_renames) > 0) { - walk(only_renames$renamed_msg, ~xportr_logger(.x, verbose)) + purrr::walk(only_renames$renamed_msg, ~xportr_logger(.x, verbose)) } # Message checking for duplicate variable names after renamed (Pretty sure # this is impossible) but good to have a check none-the-less. dups <- tidy_names_df %>% filter(renamed_n > 1) if (nrow(dups) != 0) { - cli_alert_danger( + cli::cli_alert_danger( glue( .sep = " ", "Duplicate renamed term(s) were created.", From 2b456477291cb5062ac849b221d235c47f7d6412 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 9 May 2023 06:14:00 +0530 Subject: [PATCH 089/337] chore: update document --- man/xportr_type.Rd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index 979028e3..7c82ff13 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -40,10 +40,10 @@ metacore <- data.frame( ) .df <- data.frame( - Subj = as.character(123, 456, 789), - Different = c("a", "b", "c"), - Val = c("1", "2", "3"), - Param = c("param1", "param2", "param3") + Subj = as.character(123, 456, 789), + Different = c("a", "b", "c"), + Val = c("1", "2", "3"), + Param = c("param1", "param2", "param3") ) df2 <- xportr_type(.df, metacore, "test") From cde9b3b17544fed2622605967428700050e2566e Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 9 May 2023 10:41:22 +0530 Subject: [PATCH 090/337] fix: adding roxygen2 dependency to avoid styler warnings --- .github/workflows/style.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/style.yml b/.github/workflows/style.yml index e220e81a..fc779f37 100644 --- a/.github/workflows/style.yml +++ b/.github/workflows/style.yml @@ -29,7 +29,7 @@ jobs: use-public-rspm: true - name: Install styler đŸ–Œïž - run: install.packages(c("styler", "knitr"), repos = "https://cloud.r-project.org") + run: install.packages(c("styler", "knitr", "roxygen2"), repos = "https://cloud.r-project.org") shell: Rscript {0} - name: Run styler đŸ–Œïž From cdceb9c6a84d0934d64aba42c7caf95eebdb51fc Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 9 May 2023 12:04:20 +0530 Subject: [PATCH 091/337] fix: ignoring the functions that are intended for internal use --- _pkgdown.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/_pkgdown.yml b/_pkgdown.yml index f679d7a1..cac53b0e 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -33,3 +33,9 @@ reference: contents: - xportr +- title: internal + contents: + - cli_theme_tests + - expect_attr_width + - minimal_metadata + - minimal_table From 5714d70cf80e05203e39d2b39b66012296e7f96a Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Tue, 9 May 2023 08:17:09 -0500 Subject: [PATCH 092/337] Update R/type.R Co-authored-by: Ben Straub --- R/type.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/type.R b/R/type.R index 667e38b8..3c709e3f 100644 --- a/R/type.R +++ b/R/type.R @@ -71,7 +71,7 @@ xportr_type <- function(.df, metacore, domain = NULL, ) %>% mutate( # _character is used here as a mask of character, in case someone doesn't - # wants 'character' coersed to character + # want 'character' coerced to character type.x = if_else(type.x %in% characterTypes, "_character", type.x), type.x = if_else(type.x %in% numericTypes, "_numeric", type.x), type.y = tolower(type.y), From e2ade3d73ae56e8b346c7530d172f4008781869b Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Tue, 9 May 2023 08:17:15 -0500 Subject: [PATCH 093/337] Update tests/testthat/test-type.R Co-authored-by: Ben Straub --- tests/testthat/test-type.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index b3413de1..ce9a7514 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -11,7 +11,7 @@ df <- data.frame( Param = c("param1", "param2", "param3") ) -test_that("NAs are handled as expected", { +test_that("xportr_type: NAs are handled as expected", { # Namely that "" isn't converted to NA or vice versa # Numeric columns will become NA but that is the nature of as.numeric df <- data.frame( From 726f49a894981cb83dfcd12904bcf25659abf0f9 Mon Sep 17 00:00:00 2001 From: elimillera Date: Tue, 9 May 2023 13:19:04 +0000 Subject: [PATCH 094/337] Update news.md --- NEWS.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index f4fed78a..4b8cfe84 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,7 @@ # xportr 0.3.0 -* Fixed an issue where xportr_type would overwrite column labels, widths, and "sas.formats" +* Fixed an issue where `xportr_type` would overwrite column labels, widths, and "sas.formats" +* Fixed bug where character_types were case sensitive. They are now case insensitive. +* Updated `xportr_type` to make type coercion more explicit. # xportr 0.2.0 * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! From b9637f8a8ab25904e7a375385d4d76d0b1a3f885 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Tue, 9 May 2023 08:22:45 -0500 Subject: [PATCH 095/337] Update R/messages.R Co-authored-by: Ben Straub --- R/messages.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/messages.R b/R/messages.R index 7cee4080..17a076fa 100644 --- a/R/messages.R +++ b/R/messages.R @@ -144,7 +144,7 @@ label_log <- function(miss_vars, verbose) { #' Utility for Ordering #' #' @param reordered_vars Number of variables reordered -#' @param moved_vars Number of ariables moved in the dataset +#' @param moved_vars Number of variables moved in the dataset #' @param verbose Provides additional messaging for user #' #' @return Output to Console From d7629cf0dc95ff3bd974cb4b31a4c47ee8ada256 Mon Sep 17 00:00:00 2001 From: elimillera Date: Tue, 9 May 2023 13:24:12 +0000 Subject: [PATCH 096/337] Add news.md --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index f4fed78a..963d10e2 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ # xportr 0.3.0 * Fixed an issue where xportr_type would overwrite column labels, widths, and "sas.formats" +* Fixed messaging of `xportr_order`to give better visability of the number of variables being reordered. # xportr 0.2.0 * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! From 0b289306349176c2c3da0d65b7682884af1f6536 Mon Sep 17 00:00:00 2001 From: elimillera Date: Tue, 9 May 2023 13:36:38 +0000 Subject: [PATCH 097/337] Update no_fail argument to 'strict_checks'. Change defaults --- NEWS.md | 1 + R/write.R | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/NEWS.md b/NEWS.md index f4fed78a..b30ab1d0 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,6 @@ # xportr 0.3.0 * Fixed an issue where xportr_type would overwrite column labels, widths, and "sas.formats" +* Add new argument to `xportr_write` to allow users to specify how xpt validation checks are handled. # xportr 0.2.0 * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! diff --git a/R/write.R b/R/write.R index e5dd3039..db7bc5b0 100644 --- a/R/write.R +++ b/R/write.R @@ -8,8 +8,10 @@ #' @param path Path where transport file will be written. File name sans will be #' used as `xpt` name. #' @param label Dataset label. It must be<=40 characters. -#' @param no_fail If TRUE, xpt validation will report a warning instead of an -#' error on dataset validation. +#' @param strict_checks If TRUE, xpt validation will report errors and not +#' the dataset. If FALSE, xpt validation will report warnings and continue +#' with writing. Defaults to FALSE +#' #' @details #' * Variable and dataset labels are stored in the "label" attribute. #' @@ -21,7 +23,7 @@ #' #' @return A data frame. `xportr_write()` returns the input data invisibly. #' @export -xportr_write <- function(.df, path, label = NULL, no_fail = FALSE) { +xportr_write <- function(.df, path, label = NULL, strict_checks = FALSE) { path <- normalizePath(path, mustWork = FALSE) @@ -49,7 +51,7 @@ xportr_write <- function(.df, path, label = NULL, no_fail = FALSE) { checks <- xpt_validate(.df) if (length(checks) > 0) { - if (no_fail) + if (strict_checks) warn(c("The following validation failed:", checks)) else abort(c("The following validation failed:", checks)) From ae157939dd0c10efc774ab46ed0a76b1083530ca Mon Sep 17 00:00:00 2001 From: elimillera Date: Tue, 9 May 2023 14:39:54 +0000 Subject: [PATCH 098/337] flip argument default --- R/write.R | 2 +- man/xportr_write.Rd | 7 ++++--- tests/testthat/test-write.R | 8 ++++---- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/R/write.R b/R/write.R index db7bc5b0..6dc7f18c 100644 --- a/R/write.R +++ b/R/write.R @@ -51,7 +51,7 @@ xportr_write <- function(.df, path, label = NULL, strict_checks = FALSE) { checks <- xpt_validate(.df) if (length(checks) > 0) { - if (strict_checks) + if (!strict_checks) warn(c("The following validation failed:", checks)) else abort(c("The following validation failed:", checks)) diff --git a/man/xportr_write.Rd b/man/xportr_write.Rd index 9c166207..b22356f1 100644 --- a/man/xportr_write.Rd +++ b/man/xportr_write.Rd @@ -4,7 +4,7 @@ \alias{xportr_write} \title{Write xpt v5 transport file} \usage{ -xportr_write(.df, path, label = NULL, no_fail = FALSE) +xportr_write(.df, path, label = NULL, strict_checks = FALSE) } \arguments{ \item{.df}{A data frame to write.} @@ -14,8 +14,9 @@ used as \code{xpt} name.} \item{label}{Dataset label. It must be<=40 characters.} -\item{no_fail}{If TRUE, xpt validation will report a warning instead of an -error on dataset validation.} +\item{strict_checks}{If TRUE, xpt validation will report errors and not +the dataset. If FALSE, xpt validation will report warnings and continue +with writing. Defaults to FALSE} } \value{ A data frame. \code{xportr_write()} returns the input data invisibly. diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index 0ac07fbd..54afa72b 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -65,22 +65,22 @@ test_that("xportr_write: expect error when label is over 40 characters", { expect_error(xportr_write(data_to_save, tmp, label = paste(rep("a", 41), collapse = ""))) }) -test_that("xportr_write: expect error when an xpt validation fails", { +test_that("xportr_write: expect error when an xpt validation fails with strict_checks set to TRUE", { tmpdir <- tempdir() tmp <- file.path(tmpdir, "xyz.xpt") attr(data_to_save$X, "format.sas") <- "foo" on.exit(unlink(tmpdir)) - expect_error(xportr_write(data_to_save, tmp, label = "label")) + expect_error(xportr_write(data_to_save, tmp, label = "label", strict_checks = TRUE)) }) -test_that("xportr_write: expect warning when an xpt validation fails with no_fail argument set", { +test_that("xportr_write: expect warning when an xpt validation fails with strict_checks argument set", { tmpdir <- tempdir() tmp <- file.path(tmpdir, "xyz.xpt") attr(data_to_save$X, "format.sas") <- "foo" on.exit(unlink(tmpdir)) - expect_warning(xportr_write(data_to_save, tmp, label = "label", no_fail = TRUE)) + expect_warning(xportr_write(data_to_save, tmp, label = "label", strict_checks = FALSE)) }) From aafd9c4bd535306e7e50a9779e84aafd5a3afa84 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 9 May 2023 18:55:59 +0000 Subject: [PATCH 099/337] Correct metacore accessor in xportr_type() --- R/type.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/type.R b/R/type.R index cc6ba8dc..ffe6121a 100644 --- a/R/type.R +++ b/R/type.R @@ -57,7 +57,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, } if (inherits(metacore, "Metacore")) { - metacore <- metacore$ds_spec + metacore <- metacore$var_spec } if (domain_name %in% names(metacore)) { From b88e51554e149a7be46757fab20331827b6f8161 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 9 May 2023 19:02:21 +0000 Subject: [PATCH 100/337] Run lintr and styler --- R/messages.R | 3 +-- R/utils-xportr.R | 2 +- tests/testthat/test-pipe.R | 1 - tests/testthat/test-utils-xportr.R | 1 - tests/testthat/test-write.R | 1 - 5 files changed, 2 insertions(+), 6 deletions(-) diff --git a/R/messages.R b/R/messages.R index 8de9e489..5d0b8883 100644 --- a/R/messages.R +++ b/R/messages.R @@ -49,7 +49,7 @@ var_names_log <- function(tidy_names_df, verbose) { # Message stating any renamed variables each original variable and it's new name if (nrow(only_renames) > 0) { - purrr::walk(only_renames$renamed_msg, ~xportr_logger(.x, verbose)) + purrr::walk(only_renames$renamed_msg, ~ xportr_logger(.x, verbose)) } # Message checking for duplicate variable names after renamed (Pretty sure @@ -119,7 +119,6 @@ length_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export label_log <- function(miss_vars, verbose) { - if (length(miss_vars) > 0) { cli_h2("Variable labels missing from metadata.") cli_alert_success("{ length(miss_vars) } labels skipped") diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 3c0aaccb..0f8f8117 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -212,7 +212,7 @@ xpt_validate <- function(data) { # 3.0 VARIABLE TYPES ---- types <- tolower(extract_attr(data, attr = "SAStype")) - + expected_types <- c( "", "text", "integer", "float", "datetime", "date", "time", "partialdate", "partialtime", "partialdatetime", diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R index ce297ee1..f263413b 100644 --- a/tests/testthat/test-pipe.R +++ b/tests/testthat/test-pipe.R @@ -205,4 +205,3 @@ test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call ( expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name_native") }) - diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index b5780e00..291a4d73 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -21,7 +21,6 @@ test_that("Get magrittr lhs side value", { }, "mtcars" ) - }) diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index b7fe63c5..e9658b9a 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -1,7 +1,6 @@ data_to_save <- dplyr::tibble(X = c(1, 2, NA), Y = c("a", "", "c"), Z = c(1, 2, 3)) test_that("xportr_write: exported data can be saved to a file", { - tmpdir <- tempdir() tmp <- file.path(tmpdir, "xyz.xpt") From 974b6ae36d167e432712d9e5b37dfec4e7e4a848 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 11 May 2023 00:46:50 +0000 Subject: [PATCH 101/337] feat: #84 moving to site to bootswatch --- _pkgdown.yml | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index cac53b0e..77292f9d 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -1,12 +1,20 @@ -destination: docs +url: https://atorus-research.github.io/xportr template: + bootstrap: 5 params: - bootswatch: yeti - opengraph: - image: - src: man/figures/xportr_rev.png - alt: "xportr Hex Sticker" + bootswatch: sandstone +search: + exclude: ['news/index.html'] +repo: + url: + home: https://atorus-research.github.io/xportr + source: https://atorus-research.github.io/xportrblob/main/ + issue: https://atorus-research.github.io/xportr/issues/ + user: https://github.com/ +news: + cran_dates: true + reference: - title: The six core xportr functions @@ -17,7 +25,7 @@ reference: - xportr_write - xportr_format - xportr_order - + - title: xportr helper functions - contents: - label_log @@ -30,7 +38,7 @@ reference: - title: xportr navbar: ~ - contents: + contents: - xportr - title: internal @@ -39,3 +47,10 @@ reference: - expect_attr_width - minimal_metadata - minimal_table + + +articles: +- title: Use Cases + navbar: Use Cases + contents: + - deepdive From d5a2fcf2b082337084f29d7a97e974a0d6a9e681 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 11 May 2023 00:47:24 +0000 Subject: [PATCH 102/337] chore: #84 changed named of spec files. start on deepdive vignette --- example_data_specs/TDF_ADaM_Pilot3.xlsx | Bin 0 -> 88513 bytes vignettes/deepdive.Rmd | 95 ++++++++++++++++++++++++ 2 files changed, 95 insertions(+) create mode 100644 example_data_specs/TDF_ADaM_Pilot3.xlsx create mode 100644 vignettes/deepdive.Rmd diff --git a/example_data_specs/TDF_ADaM_Pilot3.xlsx b/example_data_specs/TDF_ADaM_Pilot3.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..52be49104293d6c970bdaaed493f9ce502a6de14 GIT binary patch literal 88513 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 Gf$&Iw literal 0 HcmV?d00001 diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd new file mode 100644 index 00000000..55f89111 --- /dev/null +++ b/vignettes/deepdive.Rmd @@ -0,0 +1,95 @@ +--- +title: "Deep Dive into xportr" +output: + rmarkdown::html_vignette: + toc: true + check_title: TRUE +vignette: > + %\VignetteIndexEntry{deepdive} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r, include = FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = " " +) + +library(DT) +``` + +# Introduction + +This vignette will walk you through applying specification attributes to multiple data sets through the xportr functions. + +The Get Started Page contains a simple walk through of applying `xportr` functions to an ADSL dataset given a specification file. + + +## Materials used + +* ADaM datasets from the Pilot 3 Submission to the FDA +* ADaM Specification Files from the Pilot 3 Submission to the FDA + +## Set up our Environment + +```{r} + +library(dplyr) +library(xportr) +``` + + +## You got Options + +As the Clinical Reporting landscape is so large we have found that a lot of companies have slight variations in how they construct their specification files. For example, some companies will use Data Type or Type for their Column Names. Something on character types. + +How can developers overcome this issue for an open-source package? The `xportr` package makes use of the `options()` function from base R to give your more control on naming conventions within in your specification file. + +The `xportr` functions have been coded in a way that they expect all column names to all be in lower-case. However, with `options()` you can override this assumption + +```{r} +options(xportr.variable_name = "Variable", + xportr.label = "Label", + xportr.type_name = "Data Type", + xportr.format = "Format") +``` + + + +## Load data + + +## Load specification file + +```{r} +spec_loc <- here::here("example_data_specs", "TDF_ADaM_Pilot3.xlsx") + +var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") %>% + filter(Variable != "TRTSDT" ) + +```` + + +```{r} + +var_spec_view <- var_spec %>% filter(dataset == "ADSL") + +DT::datatable(var_spec_view, options = list( + autoWidth = FALSE, scrollX = TRUE, pageLength = 5, + lengthMenu = c(5, 10, 15, 20) +)) + +``` + +## Contrived Examples for Error and Warning Messages + + +```{r} +adsl_loc <- here::here("example_data_specs", "adsl.xpt") + +adsl <- haven::read_xpt(adsl_loc) %>% + metatools::remove_labels() + +adsl_u <- xportr_label(adsl, var_spec, "ADSL", verbose = "warn") +``` From ea2d7440a0ca343c22d3423b216ea72e85f45edc Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 11 May 2023 01:58:34 +0000 Subject: [PATCH 103/337] feat: #84 Laying out Intro sections. --- vignettes/deepdive.Rmd | 48 +++++++++++++++++++++++++++++++++++++----- vignettes/xportr.Rmd | 2 +- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 55f89111..b562c627 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -21,10 +21,45 @@ library(DT) # Introduction -This vignette will walk you through applying specification attributes to multiple data sets through the xportr functions. +This vignette will take you on a thorough journey of all the possibilities of the `xportr` package for applying specification attributes to multiple data sets through the `xportr` functions. We will explore the following: -The Get Started Page contains a simple walk through of applying `xportr` functions to an ADSL dataset given a specification file. + * What goes in a Submission to a Health Authority? + * What is `{xportr}` validating? + * Breakdown of `{xportr}` and a ADaM dataset specification file + * Using `{xportr}` `options()` + * Understanding the warning and error messages for each `{xportr}` function + * Using `{xportr}` to bulk process multiple datasets and Validation Software (?) + * Future work +Before we begin, we encourage users to review the [Get Started Page](xportr.Rmd). This contains a simple walk through of applying `{xportr}` functions to an ADSL dataset given a specification file. It is way less verbose! + + +# What goes in a Submission to a Health Authority? + +## FDA + +A Submission is a large package of information on a clinical trial. + +Version 5 xpts are the ADaM datasets that are submitted through the eTcd portal + +* What is `{xportr}` validating? + +In `{xportr} v0.3.0` we give the users the ability to apply labels, formats, types, lengths to the R dataframe. xportr also has the ability to order the dataset according to the specification file as well as write out the R dataframe as a version 5 xpt file, which is the preferred data standard to submit to health authoritries like the FDA. + +Several of the xportr function have custom checks to validate. + +Example: `xportr_label()` while applying labels form the specification will make sure that the label is <40 characters. + + +`xportr_write()` under the hood calls the `xpt_validate()` function, which does several more checks to make sure minimum complicance checks are being done. + +* Name of dataframe must be 8 characters or less +* No non-ASCII, symbol or underscore characters +* Dataset label must be 40 characters or less and not have any non-ASCII, symbol or special characters. +* Variable Types must be "", "text", "integer", "float", "datetime", "date", "time", + "partialdate", "partialtime", "partialdatetime", + "incompletedatetime", "durationdatetime", "intervaldatetime" +* ## Materials used @@ -33,7 +68,7 @@ The Get Started Page contains a simple walk through of applying `xportr` functio ## Set up our Environment -```{r} +```{r, message=FALSE} library(dplyr) library(xportr) @@ -68,12 +103,12 @@ spec_loc <- here::here("example_data_specs", "TDF_ADaM_Pilot3.xlsx") var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") %>% filter(Variable != "TRTSDT" ) -```` +``` ```{r} -var_spec_view <- var_spec %>% filter(dataset == "ADSL") +var_spec_view <- var_spec %>% filter(Dataset == "ADSL") DT::datatable(var_spec_view, options = list( autoWidth = FALSE, scrollX = TRUE, pageLength = 5, @@ -93,3 +128,6 @@ adsl <- haven::read_xpt(adsl_loc) %>% adsl_u <- xportr_label(adsl, var_spec, "ADSL", verbose = "warn") ``` + + +## Warnings around label length diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 001edc74..9f4915e2 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -5,7 +5,7 @@ output: toc: true check_title: TRUE vignette: > - %\VignetteIndexEntry{Getting Started} + %\VignetteIndexEntry{xportr} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- From 7a07f5f2492ce92a86029b5aa4c76f080a23217e Mon Sep 17 00:00:00 2001 From: sadchla-codes Date: Thu, 11 May 2023 15:45:48 +0000 Subject: [PATCH 104/337] Update: Closes #98 removing symbols that are no longer illegal --- R/utils-xportr.R | 2 +- R/write.R | 2 +- tests/testthat/test-utils-xportr.R | 9 --------- 3 files changed, 2 insertions(+), 11 deletions(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 427a1414..9b334cbb 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -201,7 +201,7 @@ xpt_validate <- function(data) { } # 2.2 Check Non-ASCII and special characters - chk_spl_chr <- labels[stringr::str_detect(labels, "[<>]|[^[:ascii:]]")] + chk_spl_chr <- labels[stringr::str_detect(labels, "[^[:ascii:]]")] if (length(chk_spl_chr) > 0) { err_cnd <- c( diff --git a/R/write.R b/R/write.R index 369db5c4..4cfa9c1f 100644 --- a/R/write.R +++ b/R/write.R @@ -37,7 +37,7 @@ xportr_write <- function(.df, path, label = NULL) { abort("`label` must be 40 characters or less.") } - if (stringr::str_detect(label, "[<>]|[^[:ascii:]]")) { + if (stringr::str_detect(label, "[^[:ascii:]]")) { abort("`label` cannot contain any non-ASCII, symbol or special characters.") } diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 291a4d73..934ea342 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -73,15 +73,6 @@ test_that("xpt_validate_var_names: Get error message when tje variable contains ) }) -test_that("xpt_validate: Get error message when the label contains non-ASCII, symbol or special characters", { - df <- data.frame(A = 1, B = 2) - attr(df$A, "label") <- "foo Date: Fri, 12 May 2023 09:07:44 -0500 Subject: [PATCH 105/337] Update tests/testthat/test-write.R Co-authored-by: Ben Straub --- tests/testthat/test-write.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index 54afa72b..915aae5c 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -75,7 +75,7 @@ test_that("xportr_write: expect error when an xpt validation fails with strict_c expect_error(xportr_write(data_to_save, tmp, label = "label", strict_checks = TRUE)) }) -test_that("xportr_write: expect warning when an xpt validation fails with strict_checks argument set", { +test_that("xportr_write: expect warning when an xpt validation fails with strict_checks set to FALSE", { tmpdir <- tempdir() tmp <- file.path(tmpdir, "xyz.xpt") attr(data_to_save$X, "format.sas") <- "foo" From c3847808dfab50bd048da1c65b30aacb9960cb75 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 12 May 2023 09:08:00 -0500 Subject: [PATCH 106/337] Update R/write.R Co-authored-by: Ben Straub --- R/write.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/write.R b/R/write.R index 8a050106..621dedd7 100644 --- a/R/write.R +++ b/R/write.R @@ -53,9 +53,9 @@ xportr_write <- function(.df, path, label = NULL, strict_checks = FALSE) { if (length(checks) > 0) { if (!strict_checks) - warn(c("The following validation failed:", checks)) + warn(c("The following validation checks failed:", checks)) else - abort(c("The following validation failed:", checks)) + abort(c("The following validation checks failed:", checks)) } data <- as.data.frame(.df) From 551da6a820410c05504ba23812e9bc781bab56d9 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 12 May 2023 09:08:07 -0500 Subject: [PATCH 107/337] Update R/write.R Co-authored-by: Ben Straub --- R/write.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/write.R b/R/write.R index 621dedd7..b6643ab9 100644 --- a/R/write.R +++ b/R/write.R @@ -9,8 +9,8 @@ #' used as `xpt` name. #' @param label Dataset label. It must be<=40 characters. #' @param strict_checks If TRUE, xpt validation will report errors and not -#' the dataset. If FALSE, xpt validation will report warnings and continue -#' with writing. Defaults to FALSE +#' write out the dataset. If FALSE, xpt validation will report warnings and continue +#' with writing out the dataset. Defaults to FALSE #' #' @details #' * Variable and dataset labels are stored in the "label" attribute. From b5f5996cdac9d609dbbdb47590593c4fa93d5007 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 12 May 2023 09:08:13 -0500 Subject: [PATCH 108/337] Update R/write.R Co-authored-by: Ben Straub --- R/write.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/write.R b/R/write.R index b6643ab9..622dcfc8 100644 --- a/R/write.R +++ b/R/write.R @@ -7,7 +7,7 @@ #' @param .df A data frame to write. #' @param path Path where transport file will be written. File name sans will be #' used as `xpt` name. -#' @param label Dataset label. It must be<=40 characters. +#' @param label Dataset label. It must be <=40 characters. #' @param strict_checks If TRUE, xpt validation will report errors and not #' write out the dataset. If FALSE, xpt validation will report warnings and continue #' with writing out the dataset. Defaults to FALSE From 16dd86fbd3e892a07c049025208a5aa5b397626b Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 12 May 2023 14:11:02 +0000 Subject: [PATCH 109/337] Update for styling --- R/write.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/write.R b/R/write.R index 622dcfc8..ce16dfb5 100644 --- a/R/write.R +++ b/R/write.R @@ -24,7 +24,6 @@ #' @return A data frame. `xportr_write()` returns the input data invisibly. #' @export xportr_write <- function(.df, path, label = NULL, strict_checks = FALSE) { - path <- normalizePath(path, mustWork = FALSE) name <- tools::file_path_sans_ext(basename(path)) @@ -52,10 +51,11 @@ xportr_write <- function(.df, path, label = NULL, strict_checks = FALSE) { checks <- xpt_validate(.df) if (length(checks) > 0) { - if (!strict_checks) + if (!strict_checks) { warn(c("The following validation checks failed:", checks)) - else + } else { abort(c("The following validation checks failed:", checks)) + } } data <- as.data.frame(.df) From af9a9f7e4bc6b2530ad89eafd4cec17ce316bcb6 Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 12 May 2023 14:13:58 +0000 Subject: [PATCH 110/337] Update with style and other entries --- R/xportr-package.R | 8 +++++--- R/zzz.R | 10 ++++++++-- tests/testthat/test-type.R | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/R/xportr-package.R b/R/xportr-package.R index c9228fe3..fa8a788d 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -23,9 +23,11 @@ #' "_PACKAGE" -globalVariables(c("abbr_parsed", "abbr_stem", "adj_orig", "adj_parsed", "col_pos", "dict_varname", - "lower_original_varname", "my_minlength", "num_st_ind", "original_varname", - "renamed_n", "renamed_var", "use_bundle", "viable_start", "type.x", "type.y")) +globalVariables(c( + "abbr_parsed", "abbr_stem", "adj_orig", "adj_parsed", "col_pos", "dict_varname", + "lower_original_varname", "my_minlength", "num_st_ind", "original_varname", + "renamed_n", "renamed_var", "use_bundle", "viable_start", "type.x", "type.y" +)) # The following block is used by usethis to automatically manage # roxygen namespace tags. Modify with care! diff --git a/R/zzz.R b/R/zzz.R index 06a65651..ef71ea87 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -14,8 +14,14 @@ xportr.label_verbose = "none", xportr.length_verbose = "none", xportr.type_verbose = "none", - xportr.character_types = c("character", "char", "text", "date", "posixct", "posixt"), - xportr.numeric_types = c("integer", "numeric"), + xportr.character_types = c( + "character", "char", "text", "date", "posixct", + "posixt", "datetime", "time", "partialdate", + "partialtime", "partialdatetime", + "incompletedatetime", "durationdatetime", + "intervaldatetime" + ), + xportr.numeric_types = c("integer", "numeric", "num", "float"), xportr.order_name = "order" ) toset <- !(names(op.devtools) %in% names(op)) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index ce9a7514..68a9babd 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -34,7 +34,7 @@ test_that("xportr_type: NAs are handled as expected", { Subj = c(123, 456, 789, NA, NA, NA), Different = c("a", "b", "c", "", NA, NA), Val = c(1, 2, 3, NA, NA, NA), - Param = c("param1", "param2", "param3", "", NA, NA) + Param = c("param1", "param2", "param3", "", NA, NA) ), row.names = c(NA, -6L), `_xportr.df_arg_` = "df", From bd80920c63a63040c89e61d531c1d4a65b0c7dc9 Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 12 May 2023 14:15:13 +0000 Subject: [PATCH 111/337] Style updates --- R/messages.R | 1 - R/order.R | 2 +- tests/testthat/test-order.R | 3 +-- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/R/messages.R b/R/messages.R index bfd38c24..c2fe3309 100644 --- a/R/messages.R +++ b/R/messages.R @@ -141,7 +141,6 @@ label_log <- function(miss_vars, verbose) { #' @return Output to Console #' @export var_ord_msg <- function(reordered_vars, moved_vars, verbose) { - if (length(moved_vars) > 0) { cli_h2("{ length(moved_vars) } variables not in spec and moved to end") message <- glue( diff --git a/R/order.R b/R/order.R index dbd95954..38d50734 100644 --- a/R/order.R +++ b/R/order.R @@ -70,6 +70,6 @@ xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xpor # Function is located in messages.R var_ord_msg(reorder_vars, names(drop_vars), verbose) - + df_re_ord } diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index 1b519af7..0b988853 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -112,8 +112,8 @@ test_that("xportr_order: Variable ordering messaging is correct", { "-- 4 reordered in dataset --", "", "Variable reordered in `.df`: `a`, `b`, `c`, and `d`" - ) ) + ) capture.output(xportr_order(df2, df_meta, verbose = "message"), file = output_file, type = "message") @@ -127,5 +127,4 @@ test_that("xportr_order: Variable ordering messaging is correct", { "" ) ) - }) From 18ce510b05fce4b5e3c8291d7095126973ad6e45 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Sun, 14 May 2023 22:39:16 +0000 Subject: [PATCH 112/337] feat: #122 pkgdown theme switch, slack icon, news sections --- DESCRIPTION | 2 +- NEWS.md | 6 ++++++ _pkgdown.yml | 36 ++++++++++++++++++++++++++++-------- 3 files changed, 35 insertions(+), 9 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index c6f92af3..2ff4fac8 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: xportr Title: Utilities to Output CDISC SDTM/ADaM XPT Files -Version: 0.2.0 +Version: 0.3.0 Authors@R: c( person(given = "Eli", diff --git a/NEWS.md b/NEWS.md index d1f5f894..9d706b4e 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,11 +1,17 @@ # xportr 0.3.0 +## New Features and Bug Fixes + * Fixed an issue where `xportr_type` would overwrite column labels, widths, and "sas.formats" * Fixed messaging of `xportr_order`to give better visability of the number of variables being reordered. * Add new argument to `xportr_write` to allow users to specify how xpt validation checks are handled. * Fixed bug where character_types were case sensitive. They are now case insensitive. * Updated `xportr_type` to make type coercion more explicit. +## Documentation + +* Moved `{pkgdown}` site to bootswatch. Enabled search and linked slack icon (#122). + # xportr 0.2.0 * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! * Fixed an issue where xportr_format could pass invalid formats to haven::write_xpt. diff --git a/_pkgdown.yml b/_pkgdown.yml index cac53b0e..721e5708 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -1,12 +1,29 @@ -destination: docs +url: https://atorus-research.github.io/xportr template: + bootstrap: 5 params: - bootswatch: yeti - opengraph: - image: - src: man/figures/xportr_rev.png - alt: "xportr Hex Sticker" + bootswatch: sandstone +search: + exclude: ['news/index.html'] +repo: + url: + home: https://github.com/atorus-research/xportr + source: https://github.com/atorus-research/xportr/blob/main + issue: https://github.com/atorus-research/xportr/issues + user: https://github.com/ +news: + cran_dates: true + +navbar: + structure: + right: [slack, github] + components: + slack: + icon: fa-slack + href: https://pharmaverse.slack.com/archives/C030EB2M4GM + aria-label: slack + reference: - title: The six core xportr functions @@ -17,7 +34,7 @@ reference: - xportr_write - xportr_format - xportr_order - + - title: xportr helper functions - contents: - label_log @@ -30,7 +47,7 @@ reference: - title: xportr navbar: ~ - contents: + contents: - xportr - title: internal @@ -39,3 +56,6 @@ reference: - expect_attr_width - minimal_metadata - minimal_table + + + From 00234f46e2ed139ecc990c1ea427403255387647 Mon Sep 17 00:00:00 2001 From: vedhav Date: Mon, 15 May 2023 07:38:25 +0530 Subject: [PATCH 113/337] chore: remove `renv` to freeze package versions for development --- .Rprofile | 4 +- renv.lock | 1250 -------------------------------------------- renv/.gitignore | 7 - renv/activate.R | 1032 ------------------------------------ renv/settings.dcf | 10 - renv/settings.json | 17 - 6 files changed, 1 insertion(+), 2319 deletions(-) delete mode 100644 renv.lock delete mode 100644 renv/.gitignore delete mode 100644 renv/activate.R delete mode 100644 renv/settings.dcf delete mode 100644 renv/settings.json diff --git a/.Rprofile b/.Rprofile index 7b58783a..dc1176b9 100644 --- a/.Rprofile +++ b/.Rprofile @@ -1,5 +1,3 @@ -if (Sys.getenv("GITHUB_ACTIONS") == "") { - source("renv/activate.R") -} else { +if (Sys.getenv("GITHUB_ACTIONS") != "") { options(repos = c(CRAN = "https://cran.rstudio.com")) } diff --git a/renv.lock b/renv.lock deleted file mode 100644 index de585f70..00000000 --- a/renv.lock +++ /dev/null @@ -1,1250 +0,0 @@ -{ - "R": { - "Version": "4.2.0", - "Repositories": [ - { - "Name": "CRAN", - "URL": "https://cran.rstudio.com" - } - ] - }, - "Packages": { - "BH": { - "Package": "BH", - "Version": "1.78.0-0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "4e348572ffcaa2fb1e610e7a941f6f3a", - "Requirements": [] - }, - "DT": { - "Package": "DT", - "Version": "0.22", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "fc53164de9ee32692eef6fdd14115381", - "Requirements": [ - "crosstalk", - "htmltools", - "htmlwidgets", - "jquerylib", - "jsonlite", - "magrittr", - "promises" - ] - }, - "NLP": { - "Package": "NLP", - "Version": "0.2-1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "94b0a21c13933f61cf6272a192964624", - "Requirements": [] - }, - "R6": { - "Package": "R6", - "Version": "2.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "470851b6d5d0ac559e9d01bb352b4021", - "Requirements": [] - }, - "Rcpp": { - "Package": "Rcpp", - "Version": "1.0.8.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "32e79b908fda56ee57fe518a8d37b864", - "Requirements": [] - }, - "admiral": { - "Package": "admiral", - "Version": "0.7.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "677963ed23698fabf4b9577c89c55266", - "Requirements": [ - "assertthat", - "dplyr", - "hms", - "lifecycle", - "lubridate", - "magrittr", - "purrr", - "rlang", - "stringr", - "tidyr", - "tidyselect" - ] - }, - "askpass": { - "Package": "askpass", - "Version": "1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "e8a22846fff485f0be3770c2da758713", - "Requirements": [ - "sys" - ] - }, - "assertthat": { - "Package": "assertthat", - "Version": "0.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "50c838a310445e954bc13f26f26a6ecf", - "Requirements": [] - }, - "backports": { - "Package": "backports", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c39fbec8a30d23e721980b8afb31984c", - "Requirements": [] - }, - "base64enc": { - "Package": "base64enc", - "Version": "0.1-3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "543776ae6848fde2f48ff3816d0628bc", - "Requirements": [] - }, - "bit": { - "Package": "bit", - "Version": "4.0.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "f36715f14d94678eea9933af927bc15d", - "Requirements": [] - }, - "bit64": { - "Package": "bit64", - "Version": "4.0.5", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "9fe98599ca456d6552421db0d6772d8f", - "Requirements": [ - "bit" - ] - }, - "brio": { - "Package": "brio", - "Version": "1.1.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "976cf154dfb043c012d87cddd8bca363", - "Requirements": [] - }, - "bslib": { - "Package": "bslib", - "Version": "0.3.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "56ae7e1987b340186a8a5a157c2ec358", - "Requirements": [ - "htmltools", - "jquerylib", - "jsonlite", - "rlang", - "sass" - ] - }, - "cachem": { - "Package": "cachem", - "Version": "1.0.6", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "648c5b3d71e6a37e3043617489a0a0e9", - "Requirements": [ - "fastmap", - "rlang" - ] - }, - "callr": { - "Package": "callr", - "Version": "3.7.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "461aa75a11ce2400245190ef5d3995df", - "Requirements": [ - "R6", - "processx" - ] - }, - "cellranger": { - "Package": "cellranger", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "f61dbaec772ccd2e17705c1e872e9e7c", - "Requirements": [ - "rematch", - "tibble" - ] - }, - "cli": { - "Package": "cli", - "Version": "3.6.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "3177a5a16c243adc199ba33117bd9657", - "Requirements": [] - }, - "clipr": { - "Package": "clipr", - "Version": "0.8.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "3f038e5ac7f41d4ac41ce658c85e3042", - "Requirements": [] - }, - "codetools": { - "Package": "codetools", - "Version": "0.2-18", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "019388fc48e48b3da0d3a76ff94608a8", - "Requirements": [] - }, - "cpp11": { - "Package": "cpp11", - "Version": "0.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "fa53ce256cd280f468c080a58ea5ba8c", - "Requirements": [] - }, - "crayon": { - "Package": "crayon", - "Version": "1.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "8dc45fd8a1ee067a92b85ef274e66d6a", - "Requirements": [] - }, - "crosstalk": { - "Package": "crosstalk", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "6aa54f69598c32177e920eb3402e8293", - "Requirements": [ - "R6", - "htmltools", - "jsonlite", - "lazyeval" - ] - }, - "curl": { - "Package": "curl", - "Version": "4.3.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "022c42d49c28e95d69ca60446dbabf88", - "Requirements": [] - }, - "cyclocomp": { - "Package": "cyclocomp", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "53cbed70a2f7472d48fb6aef08442f25", - "Requirements": [ - "callr", - "crayon", - "desc", - "remotes", - "withr" - ] - }, - "desc": { - "Package": "desc", - "Version": "1.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "eebd27ee58fcc58714eedb7aa07d8ad1", - "Requirements": [ - "R6", - "cli", - "rprojroot" - ] - }, - "diffobj": { - "Package": "diffobj", - "Version": "0.3.5", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "bcaa8b95f8d7d01a5dedfd959ce88ab8", - "Requirements": [ - "crayon" - ] - }, - "digest": { - "Package": "digest", - "Version": "0.6.29", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "cf6b206a045a684728c3267ef7596190", - "Requirements": [] - }, - "downlit": { - "Package": "downlit", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ba63dc9ab5a31f3209892437e40c5f60", - "Requirements": [ - "brio", - "desc", - "digest", - "evaluate", - "fansi", - "memoise", - "rlang", - "vctrs", - "yaml" - ] - }, - "dplyr": { - "Package": "dplyr", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "eb5742d256a0d9306d85ea68756d8187", - "Requirements": [ - "R6", - "cli", - "generics", - "glue", - "lifecycle", - "magrittr", - "pillar", - "rlang", - "tibble", - "tidyselect", - "vctrs" - ] - }, - "ellipsis": { - "Package": "ellipsis", - "Version": "0.3.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "bb0eec2fe32e88d9e2836c2f73ea2077", - "Requirements": [ - "rlang" - ] - }, - "evaluate": { - "Package": "evaluate", - "Version": "0.15", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "699a7a93d08c962d9f8950b2d7a227f1", - "Requirements": [] - }, - "fansi": { - "Package": "fansi", - "Version": "1.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "83a8afdbe71839506baa9f90eebad7ec", - "Requirements": [] - }, - "fastmap": { - "Package": "fastmap", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "77bd60a6157420d4ffa93b27cf6a58b8", - "Requirements": [] - }, - "fontawesome": { - "Package": "fontawesome", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "55624ed409e46c5f358b2c060be87f67", - "Requirements": [ - "htmltools", - "rlang" - ] - }, - "forcats": { - "Package": "forcats", - "Version": "0.5.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "81c3244cab67468aac4c60550832655d", - "Requirements": [ - "ellipsis", - "magrittr", - "rlang", - "tibble" - ] - }, - "fs": { - "Package": "fs", - "Version": "1.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7c89603d81793f0d5486d91ab1fc6f1d", - "Requirements": [] - }, - "generics": { - "Package": "generics", - "Version": "0.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "177475892cf4a55865868527654a7741", - "Requirements": [] - }, - "glue": { - "Package": "glue", - "Version": "1.6.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "4f2596dfb05dac67b9dc558e5c6fba2e", - "Requirements": [] - }, - "haven": { - "Package": "haven", - "Version": "2.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "8b331e659e67d757db0fcc28e689c501", - "Requirements": [ - "cli", - "cpp11", - "forcats", - "hms", - "lifecycle", - "readr", - "rlang", - "tibble", - "tidyselect", - "vctrs" - ] - }, - "highr": { - "Package": "highr", - "Version": "0.9", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "8eb36c8125038e648e5d111c0d7b2ed4", - "Requirements": [ - "xfun" - ] - }, - "hms": { - "Package": "hms", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "5b8a2dd0fdbe2ab4f6081e6c7be6dfca", - "Requirements": [ - "ellipsis", - "lifecycle", - "pkgconfig", - "rlang", - "vctrs" - ] - }, - "htmltools": { - "Package": "htmltools", - "Version": "0.5.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "526c484233f42522278ab06fb185cb26", - "Requirements": [ - "base64enc", - "digest", - "fastmap", - "rlang" - ] - }, - "htmlwidgets": { - "Package": "htmlwidgets", - "Version": "1.5.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "76147821cd3fcd8c4b04e1ef0498e7fb", - "Requirements": [ - "htmltools", - "jsonlite", - "yaml" - ] - }, - "httr": { - "Package": "httr", - "Version": "1.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "a525aba14184fec243f9eaec62fbed43", - "Requirements": [ - "R6", - "curl", - "jsonlite", - "mime", - "openssl" - ] - }, - "janitor": { - "Package": "janitor", - "Version": "2.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "6de84a8c67fb247e721166049c84695f", - "Requirements": [ - "dplyr", - "lifecycle", - "lubridate", - "magrittr", - "purrr", - "rlang", - "snakecase", - "stringi", - "stringr", - "tidyr", - "tidyselect" - ] - }, - "jquerylib": { - "Package": "jquerylib", - "Version": "0.1.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "5aab57a3bd297eee1c1d862735972182", - "Requirements": [ - "htmltools" - ] - }, - "jsonlite": { - "Package": "jsonlite", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d07e729b27b372429d42d24d503613a0", - "Requirements": [] - }, - "knitr": { - "Package": "knitr", - "Version": "1.38", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "10b3dc3c6acb925910edda5d0543b3a2", - "Requirements": [ - "evaluate", - "highr", - "stringr", - "xfun", - "yaml" - ] - }, - "labelled": { - "Package": "labelled", - "Version": "2.9.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d3eb15eccdf131238f2184eed2a7fa9c", - "Requirements": [ - "dplyr", - "haven", - "lifecycle", - "rlang", - "stringr", - "tidyr", - "vctrs" - ] - }, - "later": { - "Package": "later", - "Version": "1.3.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7e7b457d7766bc47f2a5f21cc2984f8e", - "Requirements": [ - "Rcpp", - "rlang" - ] - }, - "lazyeval": { - "Package": "lazyeval", - "Version": "0.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d908914ae53b04d4c0c0fd72ecc35370", - "Requirements": [] - }, - "lifecycle": { - "Package": "lifecycle", - "Version": "1.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "001cecbeac1cff9301bdc3775ee46a86", - "Requirements": [ - "cli", - "glue", - "rlang" - ] - }, - "lintr": { - "Package": "lintr", - "Version": "3.0.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "b21ebd652d940f099915221f3328ab7b", - "Requirements": [ - "backports", - "codetools", - "crayon", - "cyclocomp", - "digest", - "glue", - "jsonlite", - "knitr", - "rex", - "xml2", - "xmlparsedata" - ] - }, - "lubridate": { - "Package": "lubridate", - "Version": "1.8.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "2ff5eedb6ee38fb1b81205c73be1be5a", - "Requirements": [ - "cpp11", - "generics" - ] - }, - "magrittr": { - "Package": "magrittr", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7ce2733a9826b3aeb1775d56fd305472", - "Requirements": [] - }, - "memoise": { - "Package": "memoise", - "Version": "2.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "e2817ccf4a065c5d9d7f2cfbe7c1d78c", - "Requirements": [ - "cachem", - "rlang" - ] - }, - "mime": { - "Package": "mime", - "Version": "0.12", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "18e9c28c1d3ca1560ce30658b22ce104", - "Requirements": [] - }, - "openssl": { - "Package": "openssl", - "Version": "2.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "cf4329aac12c2c44089974559c18e446", - "Requirements": [ - "askpass" - ] - }, - "pillar": { - "Package": "pillar", - "Version": "1.9.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "15da5a8412f317beeee6175fbc76f4bb", - "Requirements": [ - "cli", - "fansi", - "glue", - "lifecycle", - "rlang", - "utf8", - "vctrs" - ] - }, - "pkgconfig": { - "Package": "pkgconfig", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "01f28d4278f15c76cddbea05899c5d6f", - "Requirements": [] - }, - "pkgdown": { - "Package": "pkgdown", - "Version": "2.0.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ec3139021900fa27faae7a821b732bf8", - "Requirements": [ - "bslib", - "callr", - "crayon", - "desc", - "digest", - "downlit", - "fs", - "httr", - "jsonlite", - "magrittr", - "memoise", - "purrr", - "ragg", - "rlang", - "rmarkdown", - "tibble", - "whisker", - "withr", - "xml2", - "yaml" - ] - }, - "pkgload": { - "Package": "pkgload", - "Version": "1.2.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "7533cd805940821bf23eaf3c8d4c1735", - "Requirements": [ - "cli", - "crayon", - "desc", - "rlang", - "rprojroot", - "rstudioapi", - "withr" - ] - }, - "praise": { - "Package": "praise", - "Version": "1.0.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "a555924add98c99d2f411e37e7d25e9f", - "Requirements": [] - }, - "prettyunits": { - "Package": "prettyunits", - "Version": "1.1.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "95ef9167b75dde9d2ccc3c7528393e7e", - "Requirements": [] - }, - "processx": { - "Package": "processx", - "Version": "3.5.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "8bbae1a548d0d3fdf6647bdd9d35bf6d", - "Requirements": [ - "R6", - "ps" - ] - }, - "progress": { - "Package": "progress", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "14dc9f7a3c91ebb14ec5bb9208a07061", - "Requirements": [ - "R6", - "crayon", - "hms", - "prettyunits" - ] - }, - "promises": { - "Package": "promises", - "Version": "1.2.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "4ab2c43adb4d4699cf3690acd378d75d", - "Requirements": [ - "R6", - "Rcpp", - "later", - "magrittr", - "rlang" - ] - }, - "ps": { - "Package": "ps", - "Version": "1.6.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "32620e2001c1dce1af49c49dccbb9420", - "Requirements": [] - }, - "purrr": { - "Package": "purrr", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d71c815267c640f17ddbf7f16144b4bb", - "Requirements": [ - "cli", - "lifecycle", - "magrittr", - "rlang", - "vctrs" - ] - }, - "ragg": { - "Package": "ragg", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "14932bb6f2739c771ca4ceaba6b4248e", - "Requirements": [ - "systemfonts", - "textshaping" - ] - }, - "rappdirs": { - "Package": "rappdirs", - "Version": "0.3.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "5e3c5dc0b071b21fa128676560dbe94d", - "Requirements": [] - }, - "readr": { - "Package": "readr", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "9c59de1357dc209868b5feb5c9f0fe2f", - "Requirements": [ - "R6", - "cli", - "clipr", - "cpp11", - "crayon", - "hms", - "lifecycle", - "rlang", - "tibble", - "tzdb", - "vroom" - ] - }, - "readxl": { - "Package": "readxl", - "Version": "1.4.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "170c35f745563bb307e963bde0197e4f", - "Requirements": [ - "cellranger", - "cpp11", - "progress", - "tibble" - ] - }, - "rematch": { - "Package": "rematch", - "Version": "1.0.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c66b930d20bb6d858cd18e1cebcfae5c", - "Requirements": [] - }, - "rematch2": { - "Package": "rematch2", - "Version": "2.1.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "76c9e04c712a05848ae7a23d2f170a40", - "Requirements": [ - "tibble" - ] - }, - "remotes": { - "Package": "remotes", - "Version": "2.4.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "227045be9aee47e6dda9bb38ac870d67", - "Requirements": [] - }, - "renv": { - "Package": "renv", - "Version": "0.17.3", - "Source": "Repository" - }, - "rex": { - "Package": "rex", - "Version": "1.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ae34cd56890607370665bee5bd17812f", - "Requirements": [ - "lazyeval" - ] - }, - "rlang": { - "Package": "rlang", - "Version": "1.1.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "dc079ccd156cde8647360f473c1fa718", - "Requirements": [] - }, - "rmarkdown": { - "Package": "rmarkdown", - "Version": "2.13", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ac78f4d2e0289d4cba73b88af567b8b1", - "Requirements": [ - "bslib", - "evaluate", - "htmltools", - "jquerylib", - "jsonlite", - "knitr", - "stringr", - "tinytex", - "xfun", - "yaml" - ] - }, - "rprojroot": { - "Package": "rprojroot", - "Version": "2.0.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "249d8cd1e74a8f6a26194a91b47f21d1", - "Requirements": [] - }, - "rstudioapi": { - "Package": "rstudioapi", - "Version": "0.13", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "06c85365a03fdaf699966cc1d3cf53ea", - "Requirements": [] - }, - "sass": { - "Package": "sass", - "Version": "0.4.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "f37c0028d720bab3c513fd65d28c7234", - "Requirements": [ - "R6", - "fs", - "htmltools", - "rappdirs", - "rlang" - ] - }, - "slam": { - "Package": "slam", - "Version": "0.1-50", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "e25793551cbdb843154152e5ee88cbd6", - "Requirements": [] - }, - "snakecase": { - "Package": "snakecase", - "Version": "0.11.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "4079070fc210c7901c0832a3aeab894f", - "Requirements": [ - "stringi", - "stringr" - ] - }, - "stringi": { - "Package": "stringi", - "Version": "1.7.6", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "bba431031d30789535745a9627ac9271", - "Requirements": [] - }, - "stringr": { - "Package": "stringr", - "Version": "1.5.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "671a4d384ae9d32fc47a14e98bfa3dc8", - "Requirements": [ - "cli", - "glue", - "lifecycle", - "magrittr", - "rlang", - "stringi", - "vctrs" - ] - }, - "sys": { - "Package": "sys", - "Version": "3.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "b227d13e29222b4574486cfcbde077fa", - "Requirements": [] - }, - "systemfonts": { - "Package": "systemfonts", - "Version": "1.0.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "90b28393209827327de889f49935140a", - "Requirements": [ - "cpp11" - ] - }, - "testthat": { - "Package": "testthat", - "Version": "3.1.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "affcf9db2c99dd2c7e6459ef55ed3385", - "Requirements": [ - "R6", - "brio", - "callr", - "cli", - "crayon", - "desc", - "digest", - "ellipsis", - "evaluate", - "jsonlite", - "lifecycle", - "magrittr", - "pkgload", - "praise", - "processx", - "ps", - "rlang", - "waldo", - "withr" - ] - }, - "textshaping": { - "Package": "textshaping", - "Version": "0.3.6", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "1ab6223d3670fac7143202cb6a2d43d5", - "Requirements": [ - "cpp11", - "systemfonts" - ] - }, - "tibble": { - "Package": "tibble", - "Version": "3.2.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "a84e2cc86d07289b3b6f5069df7a004c", - "Requirements": [ - "fansi", - "lifecycle", - "magrittr", - "pillar", - "pkgconfig", - "rlang", - "vctrs" - ] - }, - "tidyr": { - "Package": "tidyr", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "d8b95b7fee945d7da6888cf7eb71a49c", - "Requirements": [ - "cpp11", - "dplyr", - "ellipsis", - "glue", - "lifecycle", - "magrittr", - "purrr", - "rlang", - "tibble", - "tidyselect", - "vctrs" - ] - }, - "tidyselect": { - "Package": "tidyselect", - "Version": "1.2.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "79540e5fcd9e0435af547d885f184fd5", - "Requirements": [ - "cli", - "glue", - "lifecycle", - "rlang", - "vctrs", - "withr" - ] - }, - "tinytex": { - "Package": "tinytex", - "Version": "0.38", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "759d047596ac173433985deddf313450", - "Requirements": [ - "xfun" - ] - }, - "tm": { - "Package": "tm", - "Version": "0.7-8", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "608413cbdf64d418b6a33e6c3d4d3b25", - "Requirements": [ - "BH", - "NLP", - "Rcpp", - "slam", - "xml2" - ] - }, - "tzdb": { - "Package": "tzdb", - "Version": "0.3.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "b2e1cbce7c903eaf23ec05c58e59fb5e", - "Requirements": [ - "cpp11" - ] - }, - "utf8": { - "Package": "utf8", - "Version": "1.2.2", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c9c462b759a5cc844ae25b5942654d13", - "Requirements": [] - }, - "vctrs": { - "Package": "vctrs", - "Version": "0.6.1", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "06eceb3a5d716fd0654cc23ca3d71a99", - "Requirements": [ - "cli", - "glue", - "lifecycle", - "rlang" - ] - }, - "vroom": { - "Package": "vroom", - "Version": "1.5.7", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "976507b5a105bc3bdf6a5a5f29e0684f", - "Requirements": [ - "bit64", - "cli", - "cpp11", - "crayon", - "glue", - "hms", - "lifecycle", - "progress", - "rlang", - "tibble", - "tidyselect", - "tzdb", - "vctrs", - "withr" - ] - }, - "waldo": { - "Package": "waldo", - "Version": "0.4.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "035fba89d0c86e2113120f93301b98ad", - "Requirements": [ - "cli", - "diffobj", - "fansi", - "glue", - "rematch2", - "rlang", - "tibble" - ] - }, - "whisker": { - "Package": "whisker", - "Version": "0.4", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "ca970b96d894e90397ed20637a0c1bbe", - "Requirements": [] - }, - "withr": { - "Package": "withr", - "Version": "2.5.0", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "c0e49a9760983e81e55cdd9be92e7182", - "Requirements": [] - }, - "xfun": { - "Package": "xfun", - "Version": "0.30", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "e83f48136b041845e50a6658feffb197", - "Requirements": [] - }, - "xml2": { - "Package": "xml2", - "Version": "1.3.3", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "40682ed6a969ea5abfd351eb67833adc", - "Requirements": [] - }, - "xmlparsedata": { - "Package": "xmlparsedata", - "Version": "1.0.5", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "45e4bf3c46476896e821fc0a408fb4fc", - "Requirements": [] - }, - "yaml": { - "Package": "yaml", - "Version": "2.3.5", - "Source": "Repository", - "Repository": "CRAN", - "Hash": "458bb38374d73bf83b1bb85e353da200", - "Requirements": [] - } - } -} diff --git a/renv/.gitignore b/renv/.gitignore deleted file mode 100644 index 22a0d01d..00000000 --- a/renv/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -sandbox/ -library/ -local/ -cellar/ -lock/ -python/ -staging/ diff --git a/renv/activate.R b/renv/activate.R deleted file mode 100644 index a8fdc320..00000000 --- a/renv/activate.R +++ /dev/null @@ -1,1032 +0,0 @@ - -local({ - - # the requested version of renv - version <- "0.17.3" - - # the project directory - project <- getwd() - - # figure out whether the autoloader is enabled - enabled <- local({ - - # first, check config option - override <- getOption("renv.config.autoloader.enabled") - if (!is.null(override)) - return(override) - - # next, check environment variables - # TODO: prefer using the configuration one in the future - envvars <- c( - "RENV_CONFIG_AUTOLOADER_ENABLED", - "RENV_AUTOLOADER_ENABLED", - "RENV_ACTIVATE_PROJECT" - ) - - for (envvar in envvars) { - envval <- Sys.getenv(envvar, unset = NA) - if (!is.na(envval)) - return(tolower(envval) %in% c("true", "t", "1")) - } - - # enable by default - TRUE - - }) - - if (!enabled) - return(FALSE) - - # avoid recursion - if (identical(getOption("renv.autoloader.running"), TRUE)) { - warning("ignoring recursive attempt to run renv autoloader") - return(invisible(TRUE)) - } - - # signal that we're loading renv during R startup - options(renv.autoloader.running = TRUE) - on.exit(options(renv.autoloader.running = NULL), add = TRUE) - - # signal that we've consented to use renv - options(renv.consent = TRUE) - - # load the 'utils' package eagerly -- this ensures that renv shims, which - # mask 'utils' packages, will come first on the search path - library(utils, lib.loc = .Library) - - # unload renv if it's already been loaded - if ("renv" %in% loadedNamespaces()) - unloadNamespace("renv") - - # load bootstrap tools - `%||%` <- function(x, y) { - if (is.environment(x) || length(x)) x else y - } - - `%??%` <- function(x, y) { - if (is.null(x)) y else x - } - - bootstrap <- function(version, library) { - - # attempt to download renv - tarball <- tryCatch(renv_bootstrap_download(version), error = identity) - if (inherits(tarball, "error")) - stop("failed to download renv ", version) - - # now attempt to install - status <- tryCatch(renv_bootstrap_install(version, tarball, library), error = identity) - if (inherits(status, "error")) - stop("failed to install renv ", version) - - } - - renv_bootstrap_tests_running <- function() { - getOption("renv.tests.running", default = FALSE) - } - - renv_bootstrap_repos <- function() { - - # get CRAN repository - cran <- getOption("renv.repos.cran", "https://cloud.r-project.org") - - # check for repos override - repos <- Sys.getenv("RENV_CONFIG_REPOS_OVERRIDE", unset = NA) - if (!is.na(repos)) { - - # check for RSPM; if set, use a fallback repository for renv - rspm <- Sys.getenv("RSPM", unset = NA) - if (identical(rspm, repos)) - repos <- c(RSPM = rspm, CRAN = cran) - - return(repos) - - } - - # check for lockfile repositories - repos <- tryCatch(renv_bootstrap_repos_lockfile(), error = identity) - if (!inherits(repos, "error") && length(repos)) - return(repos) - - # if we're testing, re-use the test repositories - if (renv_bootstrap_tests_running()) { - repos <- getOption("renv.tests.repos") - if (!is.null(repos)) - return(repos) - } - - # retrieve current repos - repos <- getOption("repos") - - # ensure @CRAN@ entries are resolved - repos[repos == "@CRAN@"] <- cran - - # add in renv.bootstrap.repos if set - default <- c(FALLBACK = "https://cloud.r-project.org") - extra <- getOption("renv.bootstrap.repos", default = default) - repos <- c(repos, extra) - - # remove duplicates that might've snuck in - dupes <- duplicated(repos) | duplicated(names(repos)) - repos[!dupes] - - } - - renv_bootstrap_repos_lockfile <- function() { - - lockpath <- Sys.getenv("RENV_PATHS_LOCKFILE", unset = "renv.lock") - if (!file.exists(lockpath)) - return(NULL) - - lockfile <- tryCatch(renv_json_read(lockpath), error = identity) - if (inherits(lockfile, "error")) { - warning(lockfile) - return(NULL) - } - - repos <- lockfile$R$Repositories - if (length(repos) == 0) - return(NULL) - - keys <- vapply(repos, `[[`, "Name", FUN.VALUE = character(1)) - vals <- vapply(repos, `[[`, "URL", FUN.VALUE = character(1)) - names(vals) <- keys - - return(vals) - - } - - renv_bootstrap_download <- function(version) { - - # if the renv version number has 4 components, assume it must - # be retrieved via github - nv <- numeric_version(version) - components <- unclass(nv)[[1]] - - # if this appears to be a development version of 'renv', we'll - # try to restore from github - dev <- length(components) == 4L - - # begin collecting different methods for finding renv - methods <- c( - renv_bootstrap_download_tarball, - if (dev) - renv_bootstrap_download_github - else c( - renv_bootstrap_download_cran_latest, - renv_bootstrap_download_cran_archive - ) - ) - - for (method in methods) { - path <- tryCatch(method(version), error = identity) - if (is.character(path) && file.exists(path)) - return(path) - } - - stop("failed to download renv ", version) - - } - - renv_bootstrap_download_impl <- function(url, destfile) { - - mode <- "wb" - - # https://bugs.r-project.org/bugzilla/show_bug.cgi?id=17715 - fixup <- - Sys.info()[["sysname"]] == "Windows" && - substring(url, 1L, 5L) == "file:" - - if (fixup) - mode <- "w+b" - - args <- list( - url = url, - destfile = destfile, - mode = mode, - quiet = TRUE - ) - - if ("headers" %in% names(formals(utils::download.file))) - args$headers <- renv_bootstrap_download_custom_headers(url) - - do.call(utils::download.file, args) - - } - - renv_bootstrap_download_custom_headers <- function(url) { - - headers <- getOption("renv.download.headers") - if (is.null(headers)) - return(character()) - - if (!is.function(headers)) - stopf("'renv.download.headers' is not a function") - - headers <- headers(url) - if (length(headers) == 0L) - return(character()) - - if (is.list(headers)) - headers <- unlist(headers, recursive = FALSE, use.names = TRUE) - - ok <- - is.character(headers) && - is.character(names(headers)) && - all(nzchar(names(headers))) - - if (!ok) - stop("invocation of 'renv.download.headers' did not return a named character vector") - - headers - - } - - renv_bootstrap_download_cran_latest <- function(version) { - - spec <- renv_bootstrap_download_cran_latest_find(version) - type <- spec$type - repos <- spec$repos - - message("* Downloading renv ", version, " ... ", appendLF = FALSE) - - baseurl <- utils::contrib.url(repos = repos, type = type) - ext <- if (identical(type, "source")) - ".tar.gz" - else if (Sys.info()[["sysname"]] == "Windows") - ".zip" - else - ".tgz" - name <- sprintf("renv_%s%s", version, ext) - url <- paste(baseurl, name, sep = "/") - - destfile <- file.path(tempdir(), name) - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (inherits(status, "condition")) { - message("FAILED") - return(FALSE) - } - - # report success and return - message("OK (downloaded ", type, ")") - destfile - - } - - renv_bootstrap_download_cran_latest_find <- function(version) { - - # check whether binaries are supported on this system - binary <- - getOption("renv.bootstrap.binary", default = TRUE) && - !identical(.Platform$pkgType, "source") && - !identical(getOption("pkgType"), "source") && - Sys.info()[["sysname"]] %in% c("Darwin", "Windows") - - types <- c(if (binary) "binary", "source") - - # iterate over types + repositories - for (type in types) { - for (repos in renv_bootstrap_repos()) { - - # retrieve package database - db <- tryCatch( - as.data.frame( - utils::available.packages(type = type, repos = repos), - stringsAsFactors = FALSE - ), - error = identity - ) - - if (inherits(db, "error")) - next - - # check for compatible entry - entry <- db[db$Package %in% "renv" & db$Version %in% version, ] - if (nrow(entry) == 0) - next - - # found it; return spec to caller - spec <- list(entry = entry, type = type, repos = repos) - return(spec) - - } - } - - # if we got here, we failed to find renv - fmt <- "renv %s is not available from your declared package repositories" - stop(sprintf(fmt, version)) - - } - - renv_bootstrap_download_cran_archive <- function(version) { - - name <- sprintf("renv_%s.tar.gz", version) - repos <- renv_bootstrap_repos() - urls <- file.path(repos, "src/contrib/Archive/renv", name) - destfile <- file.path(tempdir(), name) - - message("* Downloading renv ", version, " ... ", appendLF = FALSE) - - for (url in urls) { - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (identical(status, 0L)) { - message("OK") - return(destfile) - } - - } - - message("FAILED") - return(FALSE) - - } - - renv_bootstrap_download_tarball <- function(version) { - - # if the user has provided the path to a tarball via - # an environment variable, then use it - tarball <- Sys.getenv("RENV_BOOTSTRAP_TARBALL", unset = NA) - if (is.na(tarball)) - return() - - # allow directories - if (dir.exists(tarball)) { - name <- sprintf("renv_%s.tar.gz", version) - tarball <- file.path(tarball, name) - } - - # bail if it doesn't exist - if (!file.exists(tarball)) { - - # let the user know we weren't able to honour their request - fmt <- "* RENV_BOOTSTRAP_TARBALL is set (%s) but does not exist." - msg <- sprintf(fmt, tarball) - warning(msg) - - # bail - return() - - } - - fmt <- "* Bootstrapping with tarball at path '%s'." - msg <- sprintf(fmt, tarball) - message(msg) - - tarball - - } - - renv_bootstrap_download_github <- function(version) { - - enabled <- Sys.getenv("RENV_BOOTSTRAP_FROM_GITHUB", unset = "TRUE") - if (!identical(enabled, "TRUE")) - return(FALSE) - - # prepare download options - pat <- Sys.getenv("GITHUB_PAT") - if (nzchar(Sys.which("curl")) && nzchar(pat)) { - fmt <- "--location --fail --header \"Authorization: token %s\"" - extra <- sprintf(fmt, pat) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "curl", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } else if (nzchar(Sys.which("wget")) && nzchar(pat)) { - fmt <- "--header=\"Authorization: token %s\"" - extra <- sprintf(fmt, pat) - saved <- options("download.file.method", "download.file.extra") - options(download.file.method = "wget", download.file.extra = extra) - on.exit(do.call(base::options, saved), add = TRUE) - } - - message("* Downloading renv ", version, " from GitHub ... ", appendLF = FALSE) - - url <- file.path("https://api.github.com/repos/rstudio/renv/tarball", version) - name <- sprintf("renv_%s.tar.gz", version) - destfile <- file.path(tempdir(), name) - - status <- tryCatch( - renv_bootstrap_download_impl(url, destfile), - condition = identity - ) - - if (!identical(status, 0L)) { - message("FAILED") - return(FALSE) - } - - message("OK") - return(destfile) - - } - - renv_bootstrap_install <- function(version, tarball, library) { - - # attempt to install it into project library - message("* Installing renv ", version, " ... ", appendLF = FALSE) - dir.create(library, showWarnings = FALSE, recursive = TRUE) - - # invoke using system2 so we can capture and report output - bin <- R.home("bin") - exe <- if (Sys.info()[["sysname"]] == "Windows") "R.exe" else "R" - r <- file.path(bin, exe) - - args <- c( - "--vanilla", "CMD", "INSTALL", "--no-multiarch", - "-l", shQuote(path.expand(library)), - shQuote(path.expand(tarball)) - ) - - output <- system2(r, args, stdout = TRUE, stderr = TRUE) - message("Done!") - - # check for successful install - status <- attr(output, "status") - if (is.numeric(status) && !identical(status, 0L)) { - header <- "Error installing renv:" - lines <- paste(rep.int("=", nchar(header)), collapse = "") - text <- c(header, lines, output) - writeLines(text, con = stderr()) - } - - status - - } - - renv_bootstrap_platform_prefix <- function() { - - # construct version prefix - version <- paste(R.version$major, R.version$minor, sep = ".") - prefix <- paste("R", numeric_version(version)[1, 1:2], sep = "-") - - # include SVN revision for development versions of R - # (to avoid sharing platform-specific artefacts with released versions of R) - devel <- - identical(R.version[["status"]], "Under development (unstable)") || - identical(R.version[["nickname"]], "Unsuffered Consequences") - - if (devel) - prefix <- paste(prefix, R.version[["svn rev"]], sep = "-r") - - # build list of path components - components <- c(prefix, R.version$platform) - - # include prefix if provided by user - prefix <- renv_bootstrap_platform_prefix_impl() - if (!is.na(prefix) && nzchar(prefix)) - components <- c(prefix, components) - - # build prefix - paste(components, collapse = "/") - - } - - renv_bootstrap_platform_prefix_impl <- function() { - - # if an explicit prefix has been supplied, use it - prefix <- Sys.getenv("RENV_PATHS_PREFIX", unset = NA) - if (!is.na(prefix)) - return(prefix) - - # if the user has requested an automatic prefix, generate it - auto <- Sys.getenv("RENV_PATHS_PREFIX_AUTO", unset = NA) - if (auto %in% c("TRUE", "True", "true", "1")) - return(renv_bootstrap_platform_prefix_auto()) - - # empty string on failure - "" - - } - - renv_bootstrap_platform_prefix_auto <- function() { - - prefix <- tryCatch(renv_bootstrap_platform_os(), error = identity) - if (inherits(prefix, "error") || prefix %in% "unknown") { - - msg <- paste( - "failed to infer current operating system", - "please file a bug report at https://github.com/rstudio/renv/issues", - sep = "; " - ) - - warning(msg) - - } - - prefix - - } - - renv_bootstrap_platform_os <- function() { - - sysinfo <- Sys.info() - sysname <- sysinfo[["sysname"]] - - # handle Windows + macOS up front - if (sysname == "Windows") - return("windows") - else if (sysname == "Darwin") - return("macos") - - # check for os-release files - for (file in c("/etc/os-release", "/usr/lib/os-release")) - if (file.exists(file)) - return(renv_bootstrap_platform_os_via_os_release(file, sysinfo)) - - # check for redhat-release files - if (file.exists("/etc/redhat-release")) - return(renv_bootstrap_platform_os_via_redhat_release()) - - "unknown" - - } - - renv_bootstrap_platform_os_via_os_release <- function(file, sysinfo) { - - # read /etc/os-release - release <- utils::read.table( - file = file, - sep = "=", - quote = c("\"", "'"), - col.names = c("Key", "Value"), - comment.char = "#", - stringsAsFactors = FALSE - ) - - vars <- as.list(release$Value) - names(vars) <- release$Key - - # get os name - os <- tolower(sysinfo[["sysname"]]) - - # read id - id <- "unknown" - for (field in c("ID", "ID_LIKE")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - id <- vars[[field]] - break - } - } - - # read version - version <- "unknown" - for (field in c("UBUNTU_CODENAME", "VERSION_CODENAME", "VERSION_ID", "BUILD_ID")) { - if (field %in% names(vars) && nzchar(vars[[field]])) { - version <- vars[[field]] - break - } - } - - # join together - paste(c(os, id, version), collapse = "-") - - } - - renv_bootstrap_platform_os_via_redhat_release <- function() { - - # read /etc/redhat-release - contents <- readLines("/etc/redhat-release", warn = FALSE) - - # infer id - id <- if (grepl("centos", contents, ignore.case = TRUE)) - "centos" - else if (grepl("redhat", contents, ignore.case = TRUE)) - "redhat" - else - "unknown" - - # try to find a version component (very hacky) - version <- "unknown" - - parts <- strsplit(contents, "[[:space:]]")[[1L]] - for (part in parts) { - - nv <- tryCatch(numeric_version(part), error = identity) - if (inherits(nv, "error")) - next - - version <- nv[1, 1] - break - - } - - paste(c("linux", id, version), collapse = "-") - - } - - renv_bootstrap_library_root_name <- function(project) { - - # use project name as-is if requested - asis <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT_ASIS", unset = "FALSE") - if (asis) - return(basename(project)) - - # otherwise, disambiguate based on project's path - id <- substring(renv_bootstrap_hash_text(project), 1L, 8L) - paste(basename(project), id, sep = "-") - - } - - renv_bootstrap_library_root <- function(project) { - - prefix <- renv_bootstrap_profile_prefix() - - path <- Sys.getenv("RENV_PATHS_LIBRARY", unset = NA) - if (!is.na(path)) - return(paste(c(path, prefix), collapse = "/")) - - path <- renv_bootstrap_library_root_impl(project) - if (!is.null(path)) { - name <- renv_bootstrap_library_root_name(project) - return(paste(c(path, prefix, name), collapse = "/")) - } - - renv_bootstrap_paths_renv("library", project = project) - - } - - renv_bootstrap_library_root_impl <- function(project) { - - root <- Sys.getenv("RENV_PATHS_LIBRARY_ROOT", unset = NA) - if (!is.na(root)) - return(root) - - type <- renv_bootstrap_project_type(project) - if (identical(type, "package")) { - userdir <- renv_bootstrap_user_dir() - return(file.path(userdir, "library")) - } - - } - - renv_bootstrap_validate_version <- function(version) { - - loadedversion <- utils::packageDescription("renv", fields = "Version") - if (version == loadedversion) - return(TRUE) - - # assume four-component versions are from GitHub; - # three-component versions are from CRAN - components <- strsplit(loadedversion, "[.-]")[[1]] - remote <- if (length(components) == 4L) - paste("rstudio/renv", loadedversion, sep = "@") - else - paste("renv", loadedversion, sep = "@") - - fmt <- paste( - "renv %1$s was loaded from project library, but this project is configured to use renv %2$s.", - "Use `renv::record(\"%3$s\")` to record renv %1$s in the lockfile.", - "Use `renv::restore(packages = \"renv\")` to install renv %2$s into the project library.", - sep = "\n" - ) - - msg <- sprintf(fmt, loadedversion, version, remote) - warning(msg, call. = FALSE) - - FALSE - - } - - renv_bootstrap_hash_text <- function(text) { - - hashfile <- tempfile("renv-hash-") - on.exit(unlink(hashfile), add = TRUE) - - writeLines(text, con = hashfile) - tools::md5sum(hashfile) - - } - - renv_bootstrap_load <- function(project, libpath, version) { - - # try to load renv from the project library - if (!requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) - return(FALSE) - - # warn if the version of renv loaded does not match - renv_bootstrap_validate_version(version) - - # execute renv load hooks, if any - hooks <- getHook("renv::autoload") - for (hook in hooks) - if (is.function(hook)) - tryCatch(hook(), error = warning) - - # load the project - renv::load(project) - - TRUE - - } - - renv_bootstrap_profile_load <- function(project) { - - # if RENV_PROFILE is already set, just use that - profile <- Sys.getenv("RENV_PROFILE", unset = NA) - if (!is.na(profile) && nzchar(profile)) - return(profile) - - # check for a profile file (nothing to do if it doesn't exist) - path <- renv_bootstrap_paths_renv("profile", profile = FALSE, project = project) - if (!file.exists(path)) - return(NULL) - - # read the profile, and set it if it exists - contents <- readLines(path, warn = FALSE) - if (length(contents) == 0L) - return(NULL) - - # set RENV_PROFILE - profile <- contents[[1L]] - if (!profile %in% c("", "default")) - Sys.setenv(RENV_PROFILE = profile) - - profile - - } - - renv_bootstrap_profile_prefix <- function() { - profile <- renv_bootstrap_profile_get() - if (!is.null(profile)) - return(file.path("profiles", profile, "renv")) - } - - renv_bootstrap_profile_get <- function() { - profile <- Sys.getenv("RENV_PROFILE", unset = "") - renv_bootstrap_profile_normalize(profile) - } - - renv_bootstrap_profile_set <- function(profile) { - profile <- renv_bootstrap_profile_normalize(profile) - if (is.null(profile)) - Sys.unsetenv("RENV_PROFILE") - else - Sys.setenv(RENV_PROFILE = profile) - } - - renv_bootstrap_profile_normalize <- function(profile) { - - if (is.null(profile) || profile %in% c("", "default")) - return(NULL) - - profile - - } - - renv_bootstrap_path_absolute <- function(path) { - - substr(path, 1L, 1L) %in% c("~", "/", "\\") || ( - substr(path, 1L, 1L) %in% c(letters, LETTERS) && - substr(path, 2L, 3L) %in% c(":/", ":\\") - ) - - } - - renv_bootstrap_paths_renv <- function(..., profile = TRUE, project = NULL) { - renv <- Sys.getenv("RENV_PATHS_RENV", unset = "renv") - root <- if (renv_bootstrap_path_absolute(renv)) NULL else project - prefix <- if (profile) renv_bootstrap_profile_prefix() - components <- c(root, renv, prefix, ...) - paste(components, collapse = "/") - } - - renv_bootstrap_project_type <- function(path) { - - descpath <- file.path(path, "DESCRIPTION") - if (!file.exists(descpath)) - return("unknown") - - desc <- tryCatch( - read.dcf(descpath, all = TRUE), - error = identity - ) - - if (inherits(desc, "error")) - return("unknown") - - type <- desc$Type - if (!is.null(type)) - return(tolower(type)) - - package <- desc$Package - if (!is.null(package)) - return("package") - - "unknown" - - } - - renv_bootstrap_user_dir <- function() { - dir <- renv_bootstrap_user_dir_impl() - path.expand(chartr("\\", "/", dir)) - } - - renv_bootstrap_user_dir_impl <- function() { - - # use local override if set - override <- getOption("renv.userdir.override") - if (!is.null(override)) - return(override) - - # use R_user_dir if available - tools <- asNamespace("tools") - if (is.function(tools$R_user_dir)) - return(tools$R_user_dir("renv", "cache")) - - # try using our own backfill for older versions of R - envvars <- c("R_USER_CACHE_DIR", "XDG_CACHE_HOME") - for (envvar in envvars) { - root <- Sys.getenv(envvar, unset = NA) - if (!is.na(root)) - return(file.path(root, "R/renv")) - } - - # use platform-specific default fallbacks - if (Sys.info()[["sysname"]] == "Windows") - file.path(Sys.getenv("LOCALAPPDATA"), "R/cache/R/renv") - else if (Sys.info()[["sysname"]] == "Darwin") - "~/Library/Caches/org.R-project.R/R/renv" - else - "~/.cache/R/renv" - - } - - - renv_json_read <- function(file = NULL, text = NULL) { - - jlerr <- NULL - - # if jsonlite is loaded, use that instead - if ("jsonlite" %in% loadedNamespaces()) { - - json <- catch(renv_json_read_jsonlite(file, text)) - if (!inherits(json, "error")) - return(json) - - jlerr <- json - - } - - # otherwise, fall back to the default JSON reader - json <- catch(renv_json_read_default(file, text)) - if (!inherits(json, "error")) - return(json) - - # report an error - if (!is.null(jlerr)) - stop(jlerr) - else - stop(json) - - } - - renv_json_read_jsonlite <- function(file = NULL, text = NULL) { - text <- paste(text %||% read(file), collapse = "\n") - jsonlite::fromJSON(txt = text, simplifyVector = FALSE) - } - - renv_json_read_default <- function(file = NULL, text = NULL) { - - # find strings in the JSON - text <- paste(text %||% read(file), collapse = "\n") - pattern <- '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' - locs <- gregexpr(pattern, text, perl = TRUE)[[1]] - - # if any are found, replace them with placeholders - replaced <- text - strings <- character() - replacements <- character() - - if (!identical(c(locs), -1L)) { - - # get the string values - starts <- locs - ends <- locs + attr(locs, "match.length") - 1L - strings <- substring(text, starts, ends) - - # only keep those requiring escaping - strings <- grep("[[\\]{}:]", strings, perl = TRUE, value = TRUE) - - # compute replacements - replacements <- sprintf('"\032%i\032"', seq_along(strings)) - - # replace the strings - mapply(function(string, replacement) { - replaced <<- sub(string, replacement, replaced, fixed = TRUE) - }, strings, replacements) - - } - - # transform the JSON into something the R parser understands - transformed <- replaced - transformed <- gsub("{}", "`names<-`(list(), character())", transformed, fixed = TRUE) - transformed <- gsub("[[{]", "list(", transformed, perl = TRUE) - transformed <- gsub("[]}]", ")", transformed, perl = TRUE) - transformed <- gsub(":", "=", transformed, fixed = TRUE) - text <- paste(transformed, collapse = "\n") - - # parse it - json <- parse(text = text, keep.source = FALSE, srcfile = NULL)[[1L]] - - # construct map between source strings, replaced strings - map <- as.character(parse(text = strings)) - names(map) <- as.character(parse(text = replacements)) - - # convert to list - map <- as.list(map) - - # remap strings in object - remapped <- renv_json_remap(json, map) - - # evaluate - eval(remapped, envir = baseenv()) - - } - - renv_json_remap <- function(json, map) { - - # fix names - if (!is.null(names(json))) { - lhs <- match(names(json), names(map), nomatch = 0L) - rhs <- match(names(map), names(json), nomatch = 0L) - names(json)[rhs] <- map[lhs] - } - - # fix values - if (is.character(json)) - return(map[[json]] %||% json) - - # handle true, false, null - if (is.name(json)) { - text <- as.character(json) - if (text == "true") - return(TRUE) - else if (text == "false") - return(FALSE) - else if (text == "null") - return(NULL) - } - - # recurse - if (is.recursive(json)) { - for (i in seq_along(json)) { - json[i] <- list(renv_json_remap(json[[i]], map)) - } - } - - json - - } - - # load the renv profile, if any - renv_bootstrap_profile_load(project) - - # construct path to library root - root <- renv_bootstrap_library_root(project) - - # construct library prefix for platform - prefix <- renv_bootstrap_platform_prefix() - - # construct full libpath - libpath <- file.path(root, prefix) - - # attempt to load - if (renv_bootstrap_load(project, libpath, version)) - return(TRUE) - - # load failed; inform user we're about to bootstrap - prefix <- paste("# Bootstrapping renv", version) - postfix <- paste(rep.int("-", 77L - nchar(prefix)), collapse = "") - header <- paste(prefix, postfix) - message(header) - - # perform bootstrap - bootstrap(version, libpath) - - # exit early if we're just testing bootstrap - if (!is.na(Sys.getenv("RENV_BOOTSTRAP_INSTALL_ONLY", unset = NA))) - return(TRUE) - - # try again to load - if (requireNamespace("renv", lib.loc = libpath, quietly = TRUE)) { - message("* Successfully installed and loaded renv ", version, ".") - return(renv::load()) - } - - # failed to download or load renv; warn the user - msg <- c( - "Failed to find an renv installation: the project will not be loaded.", - "Use `renv::activate()` to re-initialize the project." - ) - - warning(paste(msg, collapse = "\n"), call. = FALSE) - -}) diff --git a/renv/settings.dcf b/renv/settings.dcf deleted file mode 100644 index 169d82f1..00000000 --- a/renv/settings.dcf +++ /dev/null @@ -1,10 +0,0 @@ -bioconductor.version: -external.libraries: -ignored.packages: -package.dependency.fields: Imports, Depends, LinkingTo -r.version: -snapshot.type: implicit -use.cache: TRUE -vcs.ignore.cellar: TRUE -vcs.ignore.library: TRUE -vcs.ignore.local: TRUE diff --git a/renv/settings.json b/renv/settings.json deleted file mode 100644 index 3331ef25..00000000 --- a/renv/settings.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "bioconductor.version": [], - "external.libraries": [], - "ignored.packages": [], - "package.dependency.fields": [ - "Imports", - "Depends", - "LinkingTo" - ], - "r.version": [], - "snapshot.type": "implicit", - "use.cache": true, - "vcs.ignore.cellar": true, - "vcs.ignore.library": true, - "vcs.ignore.local": true, - "vcs.manage.ignores": true -} From b43f92024b591675a54c6ae920c2cf75d6e8c087 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Mon, 15 May 2023 15:11:55 +0000 Subject: [PATCH 114/337] chore: #122 remove url from .yml file --- NAMESPACE | 1 - _pkgdown.yml | 6 ------ man/var_ord_msg.Rd | 2 +- man/xportr_write.Rd | 6 +++--- 4 files changed, 4 insertions(+), 11 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index cc9e76ff..9b83ed5f 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -28,7 +28,6 @@ importFrom(dplyr,distinct) importFrom(dplyr,everything) importFrom(dplyr,filter) importFrom(dplyr,group_by) -importFrom(dplyr,if_else) importFrom(dplyr,left_join) importFrom(dplyr,mutate) importFrom(dplyr,n) diff --git a/_pkgdown.yml b/_pkgdown.yml index 721e5708..5b175d36 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -6,12 +6,6 @@ template: bootswatch: sandstone search: exclude: ['news/index.html'] -repo: - url: - home: https://github.com/atorus-research/xportr - source: https://github.com/atorus-research/xportr/blob/main - issue: https://github.com/atorus-research/xportr/issues - user: https://github.com/ news: cran_dates: true diff --git a/man/var_ord_msg.Rd b/man/var_ord_msg.Rd index 0bd5979e..be7f79dd 100644 --- a/man/var_ord_msg.Rd +++ b/man/var_ord_msg.Rd @@ -9,7 +9,7 @@ var_ord_msg(reordered_vars, moved_vars, verbose) \arguments{ \item{reordered_vars}{Number of variables reordered} -\item{moved_vars}{Number of ariables moved in the dataset} +\item{moved_vars}{Number of variables moved in the dataset} \item{verbose}{Provides additional messaging for user} } diff --git a/man/xportr_write.Rd b/man/xportr_write.Rd index b22356f1..4fbcdfcd 100644 --- a/man/xportr_write.Rd +++ b/man/xportr_write.Rd @@ -12,11 +12,11 @@ xportr_write(.df, path, label = NULL, strict_checks = FALSE) \item{path}{Path where transport file will be written. File name sans will be used as \code{xpt} name.} -\item{label}{Dataset label. It must be<=40 characters.} +\item{label}{Dataset label. It must be <=40 characters.} \item{strict_checks}{If TRUE, xpt validation will report errors and not -the dataset. If FALSE, xpt validation will report warnings and continue -with writing. Defaults to FALSE} +write out the dataset. If FALSE, xpt validation will report warnings and continue +with writing out the dataset. Defaults to FALSE} } \value{ A data frame. \code{xportr_write()} returns the input data invisibly. From 51eec6be81ec54d19ed5c281b1c0dc1c45594fa0 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 16 May 2023 15:13:48 +0530 Subject: [PATCH 115/337] chore: adding if_else to namespace --- NAMESPACE | 1 + R/xportr-package.R | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index 9b83ed5f..cc9e76ff 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -28,6 +28,7 @@ importFrom(dplyr,distinct) importFrom(dplyr,everything) importFrom(dplyr,filter) importFrom(dplyr,group_by) +importFrom(dplyr,if_else) importFrom(dplyr,left_join) importFrom(dplyr,mutate) importFrom(dplyr,n) diff --git a/R/xportr-package.R b/R/xportr-package.R index fa8a788d..353d54ee 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -7,7 +7,7 @@ #' @import rlang haven #' @importFrom dplyr left_join bind_cols filter select rename rename_with n #' everything arrange group_by summarize mutate ungroup case_when distinct -#' tribble +#' tribble if_else #' @importFrom glue glue glue_collapse #' @importFrom cli cli_alert_info cli_h2 cli_alert_success cli_div cli_text #' cli_alert_danger From 86c425002fc6eb6e8afa42de2c6c92085aa2a159 Mon Sep 17 00:00:00 2001 From: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> Date: Tue, 16 May 2023 08:09:15 -0500 Subject: [PATCH 116/337] Update NEWS.md Co-authored-by: Ben Straub --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 84a12854..50c5b076 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,6 @@ # xportr 0.3.0 * Fixed an issue where xportr_type would overwrite column labels, widths, and "sas.formats" -* Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline +* Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline (#44) # xportr 0.2.0 * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! From f29546cc78cc509ceb281a1f90021af4f62c7aac Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 16 May 2023 13:36:57 +0000 Subject: [PATCH 117/337] Rename metadata.R to match convention --- R/{xportr_metadata.R => metadata.R} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename R/{xportr_metadata.R => metadata.R} (100%) diff --git a/R/xportr_metadata.R b/R/metadata.R similarity index 100% rename from R/xportr_metadata.R rename to R/metadata.R From 5c2f663b4bab4e11387ff94fc750af8da57c7390 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 16 May 2023 15:46:56 +0000 Subject: [PATCH 118/337] Add tests for new metadata error Note that `covr::report()` currently doesn't register the test for `xportr_order()` or `xportr_label()`. However, they are definitely there, they pass, and when I run them interactively I get the expected behavior :shrug: --- tests/testthat/test-df_label.R | 14 ++++++++++++++ tests/testthat/test-format.R | 11 +++++++++++ tests/testthat/test-label.R | 13 +++++++++++++ tests/testthat/test-length.R | 10 ++++++++++ tests/testthat/test-order.R | 10 ++++++++++ tests/testthat/test-type.R | 7 +++++++ 6 files changed, 65 insertions(+) create mode 100644 tests/testthat/test-df_label.R create mode 100644 tests/testthat/test-format.R create mode 100644 tests/testthat/test-label.R diff --git a/tests/testthat/test-df_label.R b/tests/testthat/test-df_label.R new file mode 100644 index 00000000..4c17a853 --- /dev/null +++ b/tests/testthat/test-df_label.R @@ -0,0 +1,14 @@ +test_that("xportr_df_label: error when metadata is not set", { + adsl <- data.frame( + USUBJID = c(1001, 1002, 1003), + SITEID = c(001, 002, 003), + AGE = c(63, 35, 27), + SEX = c("M", "F", "M") + ) + + + expect_error( + xportr_df_label(adsl), + regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" + ) +}) diff --git a/tests/testthat/test-format.R b/tests/testthat/test-format.R new file mode 100644 index 00000000..45514775 --- /dev/null +++ b/tests/testthat/test-format.R @@ -0,0 +1,11 @@ +test_that("xportr_format: error when metadata is not set", { + adsl <- data.frame( + USUBJID = c(1001, 1002, 1003), + BRTHDT = c(1, 1, 2) + ) + + expect_error( + xportr_format(adsl), + regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" + ) +}) diff --git a/tests/testthat/test-label.R b/tests/testthat/test-label.R new file mode 100644 index 00000000..e04bea0d --- /dev/null +++ b/tests/testthat/test-label.R @@ -0,0 +1,13 @@ +test_that("xportr_label: error when metadata is not set", { + df <- data.frame( + Subj = as.character(123, 456, 789), + Different = c("a", "b", "c"), + Val = c("1", "2", "3"), + Param = c("param1", "param2", "param3") + ) + + expect_error( + xportr_type(df), + regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" + ) +}) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 062b2b59..bca3a615 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -212,3 +212,13 @@ test_that("xportr_length: Column length of known/unkown character types is 200/8 withr::local_options(list(xportr.character_types = c("character", "date"))) expect_equal(impute_length(Sys.time()), 8) }) + +test_that("xportr_length: error when metadata is not set", { + adsl <- minimal_table(30) + + expect_error( + xportr_length(adsl), + regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" + ) +}) + diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index 64a7d19b..1759fe98 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -90,3 +90,13 @@ test_that("xportr_order: Expect error if domain is not a character", { expect_error(xportr_order(df, df_meta, domain = NA, verbose = "none")) expect_error(xportr_order(df, df_meta, domain = 1, verbose = "none")) }) + +test_that("xportr_order: error when metadata is not set", { + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + + expect_error( + xportr_type(df), + regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" + ) +}) + diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 9d70cf4e..2d1b6abf 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -135,3 +135,10 @@ test_that("xportr_type: works fine from metacore spec", { processed_df <- xportr_type(df, metacore_meta) expect_equal(processed_df$x, "1") }) + +test_that("xportr_type: error when metadata is not set", { + expect_error( + xportr_type(df), + regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" + ) +}) From a33fcc1a9ac78c6cfbdecf6e1eb8c558a1d48e01 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 16 May 2023 16:06:00 +0000 Subject: [PATCH 119/337] Knit README --- README.Rmd | 12 ------------ README.md | 53 +++++++++++++++++++++++++++-------------------------- 2 files changed, 27 insertions(+), 38 deletions(-) diff --git a/README.Rmd b/README.Rmd index 51df6c8d..b8e2aace 100644 --- a/README.Rmd +++ b/README.Rmd @@ -127,18 +127,6 @@ var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>% Each `xportr_` function has been written in a way to take in a part of the specification file and apply that piece to the dataset. -```{r, message=FALSE, eval=FALSE} -adsl %>% - xportr_type(var_spec, "ADSL") %>% - xportr_length(var_spec, "ADSL") %>% - xportr_label(var_spec, "ADSL") %>% - xportr_order(var_spec, "ADSL") %>% - xportr_format(var_spec, "ADSL") %>% - xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") -``` - -The `xportr_metadata()` function can reduce duplication by setting the variable specification and domain explicitly at the top of a pipeline. - ```{r, message=FALSE, eval=FALSE} adsl %>% xportr_metadata(var_spec, "ADSL") %>% diff --git a/README.md b/README.md index e4106681..21e81a17 100644 --- a/README.md +++ b/README.md @@ -67,19 +67,19 @@ to any validators or data reviewers.
    -- Variable names must start with a letter (not an underscore), be - comprised of only uppercase letters (A-Z), numerals (0-9) and be - free of non-ASCII characters, symbols, and underscores. -- Allotted length for each column containing character (text) data - should be set to the maximum length of the variable used across all - data sets (≀ 200) -- Coerces variables to only numeric or character types -- Display format support for numeric float and date/time values -- Variables names are ≀ 8 characters. -- Variable labels are ≀ 200 characters. -- Data set labels are ≀ 40 characters. -- Presence of non-ASCII characters in Variable Names, Labels or data - set labels. +- Variable names must start with a letter (not an underscore), be + comprised of only uppercase letters (A-Z), numerals (0-9) and be free + of non-ASCII characters, symbols, and underscores. +- Allotted length for each column containing character (text) data + should be set to the maximum length of the variable used across all + data sets (≀ 200) +- Coerces variables to only numeric or character types +- Display format support for numeric float and date/time values +- Variables names are ≀ 8 characters. +- Variable labels are ≀ 200 characters. +- Data set labels are ≀ 40 characters. +- Presence of non-ASCII characters in Variable Names, Labels or data set + labels. **NOTE:** Each check has associated messages and warning. @@ -90,13 +90,13 @@ developed using R. To do this we will need to do the following: -- Apply types -- Apply lengths -- Apply variable labels -- Apply formats -- Re-order the variables -- Apply a dataset label -- Write out a version 5 xpt file +- Apply types +- Apply lengths +- Apply variable labels +- Apply formats +- Re-order the variables +- Apply a dataset label +- Write out a version 5 xpt file All of which can be done using a well-defined specification file and the `xportr` package! @@ -134,12 +134,13 @@ Each `xportr_` function has been written in a way to take in a part of the specification file and apply that piece to the dataset. ``` r -adsl %>% - xportr_type(var_spec, "ADSL") %>% - xportr_length(var_spec, "ADSL") %>% - xportr_label(var_spec, "ADSL") %>% - xportr_order(var_spec, "ADSL") %>% - xportr_format(var_spec, "ADSL") %>% +adsl %>% + xportr_metadata(var_spec, "ADSL") %>% + xportr_type() %>% + xportr_length() %>% + xportr_label() %>% + xportr_order() %>% + xportr_format() %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` From 9ac03c0afa60f64618e04a2a589977dd4087ca65 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 16 May 2023 16:10:32 +0000 Subject: [PATCH 120/337] Update variable name in metadata example --- R/metadata.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/metadata.R b/R/metadata.R index 6b62c835..e83d59da 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -18,14 +18,14 @@ #' type = c("numeric", "character", "numeric", "character") #' ) #' -#' .df <- data.frame( +#' adlb <- data.frame( #' Subj = as.character(123, 456, 789), #' Different = c("a", "b", "c"), #' Val = c("1", "2", "3"), #' Param = c("param1", "param2", "param3") #' ) #' -#' df2 <- xportr_metadata(.df, metadata, "test") +#' xportr_metadata(adlb, metadata, "test") xportr_metadata <- function(.df, metacore, domain = NULL) { ## Common section to detect domain from argument or pipes From d4cf362ede95c587ba30314245e84c8bb812137f Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 16 May 2023 18:59:45 +0000 Subject: [PATCH 121/337] Align metadata docs to style guide --- R/metadata.R | 25 +++++++++++++++---------- man/xportr_metadata.Rd | 37 ++++++++++++++++++++++++------------- 2 files changed, 39 insertions(+), 23 deletions(-) diff --git a/R/metadata.R b/R/metadata.R index e83d59da..1fbb709f 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -1,12 +1,16 @@ #' Set variable specifications and domain #' -#' @param .df An R object with columns that can be coerced -#' @param metacore Either a data.frame that has the names of all possible columns -#' and their types, or a `Metacore` object from the `Metacore` package. Required -#' column names are dataset, variables, type -#' @param domain Name of the dataset. Ex ADAE/DM. This will be used to subset -#' the metacore object. If none is passed it is assumed to be the name of the -#' dataset passed in `.df`. +#' Sets metadata for a dataset in a way that can be accessed by other xportr +#' functions. If used at the start of an xportr pipeline, it removes the need to +#' set metadata and domain at each step individually +#' +#' @param .df A dataframe with columns that can be manipulated by other xportr +#' functions +#' @param metadata An appropriate metadata object that has available +#' column-level metadata appropriate for use in other xportr functions +#' @param domain Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +#' the metadata object. If none is passed, then name of the dataset passed .df +#' will be used. #' #' @return `.df` dataset with metadata and domain attributes set #' @export @@ -15,7 +19,8 @@ #' metadata <- data.frame( #' dataset = "test", #' variable = c("Subj", "Param", "Val", "NotUsed"), -#' type = c("numeric", "character", "numeric", "character") +#' type = c("numeric", "character", "numeric", "character"), +#' order = c(1, 3, 4, 2) #' ) #' #' adlb <- data.frame( @@ -26,7 +31,7 @@ #' ) #' #' xportr_metadata(adlb, metadata, "test") -xportr_metadata <- function(.df, metacore, domain = NULL) { +xportr_metadata <- function(.df, metadata, domain = NULL) { ## Common section to detect domain from argument or pipes df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) @@ -35,5 +40,5 @@ xportr_metadata <- function(.df, metacore, domain = NULL) { ## End of common section - structure(.df, metadata = metacore) + structure(.df, metadata = metadata) } diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index 87e1e5ab..1c924d82 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -1,41 +1,52 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/xportr_metadata.R +% Please edit documentation in R/metadata.R \name{xportr_metadata} \alias{xportr_metadata} \title{Set variable specifications and domain} \usage{ -xportr_metadata(.df, metacore, domain = NULL) +xportr_metadata(.df, metadata, domain = NULL) } \arguments{ -\item{.df}{An R object with columns that can be coerced} +\item{.df}{A dataframe with columns that can be manipulated by other xportr +functions} -\item{metacore}{Either a data.frame that has the names of all possible columns -and their types, or a \code{Metacore} object from the \code{Metacore} package. Required -column names are dataset, variables, type} +\item{metadata}{An appropriate metadata object that has available +column-level metadata appropriate for use in other xportr functions} -\item{domain}{Name of the dataset. Ex ADAE/DM. This will be used to subset -the metacore object. If none is passed it is assumed to be the name of the -dataset passed in \code{.df}.} +\item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +the metadata object. If none is passed, then name of the dataset passed .df +will be used.} } \value{ \code{.df} dataset with metadata and domain attributes set } \description{ -Set variable specifications and domain +Sets metadata for a dataset in a way that can be accessed by other xportr +functions. If used at the start of an xportr pipeline, it removes the need to +set metadata and domain at each step individually } \examples{ metadata <- data.frame( dataset = "test", variable = c("Subj", "Param", "Val", "NotUsed"), - type = c("numeric", "character", "numeric", "character") + type = c("numeric", "character", "numeric", "character"), + order = c(1, 3, 4, 2) ) -.df <- data.frame( +adlb <- data.frame( Subj = as.character(123, 456, 789), Different = c("a", "b", "c"), Val = c("1", "2", "3"), Param = c("param1", "param2", "param3") ) -df2 <- xportr_metadata(.df, metadata, "test") +# New pattern using `xportr_metadata()` is less repetitive than old pattern +adlb \%>\% + xportr_metadata(metadata, "test") \%>\% + xportr_type() \%>\% + xportr_order() + +adlb \%>\% + xportr_type(metadata, "test") \%>\% + xportr_order(metadata, "test") } From e6e98efccc05d71dc7bb12c964b5bcf7b5489346 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 16 May 2023 19:36:48 +0000 Subject: [PATCH 122/337] Add more metadata unit tests --- tests/testthat/test-metadata.R | 56 ++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 8daa5872..a926ecfb 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -532,3 +532,59 @@ test_that("xportr_length: Expect error if domain is not a character", { "`domain` must be a vector with type ." ) }) + +# many tests here are more like qualification/domain testing - this section adds +# tests for `xportr_metadata()` basic functionality +# start +adsl <- admiral::admiral_adsl + +var_spec <- readxl::read_xlsx(here::here("./inst/specs/ADaM_admiral_spec.xlsx"), + sheet = "Variables") %>% + dplyr::rename(type = "Data Type") %>% + rlang::set_names(tolower) + +test_that("xportr_metadata: Check metadata interaction with other functions", { + expect_equal( + structure(xportr_type(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_type() + ) + + expect_equal( + structure(xportr_length(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_length() + ) + + expect_equal( + structure(xportr_label(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_label() + ) + + expect_equal( + structure(xportr_order(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_order() + ) + + expect_equal( + structure(xportr_format(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_format() + ) +}) + +test_that("xportr_metadata: Correctly extract domain from var name", { + metadata <- data.frame( + dataset = "adlb", + variable = c("Subj", "Param", "Val", "NotUsed"), + type = c("numeric", "character", "numeric", "character"), + order = c(1, 3, 4, 2) + ) + + adlb <- data.frame( + Subj = as.character(123, 456, 789), + Different = c("a", "b", "c"), + Val = c("1", "2", "3"), + Param = c("param1", "param2", "param3") + ) + + expect_equal(attr(xportr_metadata(adlb, metadata), "_xportr.df_arg_"), "adlb") +}) +# end From 384f5aef78df636fa4481d40cea7ed272790ddb5 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 16 May 2023 19:44:30 +0000 Subject: [PATCH 123/337] Run styler --- tests/testthat/test-length.R | 1 - tests/testthat/test-metadata.R | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index bca3a615..80febc19 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -221,4 +221,3 @@ test_that("xportr_length: error when metadata is not set", { regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" ) }) - diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index a926ecfb..8e6a3806 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -539,7 +539,8 @@ test_that("xportr_length: Expect error if domain is not a character", { adsl <- admiral::admiral_adsl var_spec <- readxl::read_xlsx(here::here("./inst/specs/ADaM_admiral_spec.xlsx"), - sheet = "Variables") %>% + sheet = "Variables" +) %>% dplyr::rename(type = "Data Type") %>% rlang::set_names(tolower) From 953421d573e921738687a86bb21a114ba2181d1a Mon Sep 17 00:00:00 2001 From: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> Date: Tue, 16 May 2023 14:47:20 -0500 Subject: [PATCH 124/337] Update tests/testthat/test-label.R Co-authored-by: Vedha Viyash <49812166+vedhav@users.noreply.github.com> --- tests/testthat/test-label.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-label.R b/tests/testthat/test-label.R index e04bea0d..29835de4 100644 --- a/tests/testthat/test-label.R +++ b/tests/testthat/test-label.R @@ -7,7 +7,7 @@ test_that("xportr_label: error when metadata is not set", { ) expect_error( - xportr_type(df), + xportr_label(df), regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" ) }) From 93a031e3bf7e5bdb86803a89909726bc6e0ef782 Mon Sep 17 00:00:00 2001 From: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> Date: Tue, 16 May 2023 14:47:31 -0500 Subject: [PATCH 125/337] Update tests/testthat/test-order.R Co-authored-by: Vedha Viyash <49812166+vedhav@users.noreply.github.com> --- tests/testthat/test-order.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index 9d51f2b0..f098af93 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -95,7 +95,7 @@ test_that("xportr_order: error when metadata is not set", { df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) expect_error( - xportr_type(df), + xportr_order(df), regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" ) }) From 51024104e9a96833c18cfb41b054fca10ea76567 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 16 May 2023 20:04:35 +0000 Subject: [PATCH 126/337] Add checking for here package installation --- DESCRIPTION | 3 +- man/xportr_metadata.Rd | 10 +----- tests/testthat/test-metadata.R | 60 ++++++++++++++++++---------------- 3 files changed, 35 insertions(+), 38 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 2ff4fac8..5b8e4496 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -62,6 +62,7 @@ Suggests: usethis, lintr, styler, - metacore + metacore, + here Config/testthat/edition: 3 VignetteBuilder: knitr diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index 1c924d82..c05bae5b 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -40,13 +40,5 @@ adlb <- data.frame( Param = c("param1", "param2", "param3") ) -# New pattern using `xportr_metadata()` is less repetitive than old pattern -adlb \%>\% - xportr_metadata(metadata, "test") \%>\% - xportr_type() \%>\% - xportr_order() - -adlb \%>\% - xportr_type(metadata, "test") \%>\% - xportr_order(metadata, "test") +xportr_metadata(adlb, metadata, "test") } diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 8e6a3806..a01572fa 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -536,39 +536,43 @@ test_that("xportr_length: Expect error if domain is not a character", { # many tests here are more like qualification/domain testing - this section adds # tests for `xportr_metadata()` basic functionality # start -adsl <- admiral::admiral_adsl - -var_spec <- readxl::read_xlsx(here::here("./inst/specs/ADaM_admiral_spec.xlsx"), - sheet = "Variables" -) %>% - dplyr::rename(type = "Data Type") %>% - rlang::set_names(tolower) - test_that("xportr_metadata: Check metadata interaction with other functions", { - expect_equal( - structure(xportr_type(adsl, var_spec), metadata = var_spec), - xportr_metadata(adsl, var_spec) %>% xportr_type() - ) + if (rlang::is_installed("here")) { + adsl <- admiral::admiral_adsl + + var_spec <- + readxl::read_xlsx( + here::here("./inst/specs/ADaM_admiral_spec.xlsx"), + sheet = "Variables" + ) %>% + dplyr::rename(type = "Data Type") %>% + rlang::set_names(tolower) + + expect_equal( + structure(xportr_type(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_type() + ) - expect_equal( - structure(xportr_length(adsl, var_spec), metadata = var_spec), - xportr_metadata(adsl, var_spec) %>% xportr_length() - ) + expect_equal( + structure(xportr_length(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_length() + ) - expect_equal( - structure(xportr_label(adsl, var_spec), metadata = var_spec), - xportr_metadata(adsl, var_spec) %>% xportr_label() - ) + expect_equal( + structure(xportr_label(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_label() + ) - expect_equal( - structure(xportr_order(adsl, var_spec), metadata = var_spec), - xportr_metadata(adsl, var_spec) %>% xportr_order() - ) + expect_equal( + structure(xportr_order(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_order() + ) - expect_equal( - structure(xportr_format(adsl, var_spec), metadata = var_spec), - xportr_metadata(adsl, var_spec) %>% xportr_format() - ) + expect_equal( + structure(xportr_format(adsl, var_spec), metadata = var_spec), + xportr_metadata(adsl, var_spec) %>% xportr_format() + ) + } }) test_that("xportr_metadata: Correctly extract domain from var name", { From 55ea2f6d2dd937cdf411224e3d474361f9528764 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 18 May 2023 15:16:29 +0530 Subject: [PATCH 127/337] feat: adding CI for checking links + adding a broken link to test it --- .github/workflows/check-links.yml | 37 +++++++++++++++++++++++++++++++ README.md | 2 +- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/check-links.yml diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml new file mode 100644 index 00000000..d89833ba --- /dev/null +++ b/.github/workflows/check-links.yml @@ -0,0 +1,37 @@ +name: Check URLs 🔗 + +on: + push: + branches: [main] + pull_request: + branches: [main, devel] + +jobs: + links: + name: Validate Links đŸ•žïž + runs-on: ubuntu-latest + if: > + !contains(github.event.commits[0].message, '[skip links]') + steps: + - uses: actions/checkout@v3 + + - name: Check URLs in docs 📑 + uses: lycheeverse/lychee-action@v1.5.1 + with: + fail: true + jobSummary: true + format: markdown + output: links-results.md + args: >- + --exclude-private + --exclude "https://github.com.*.git|lycheeverse.*" + --verbose + --no-progress + ${{ inputs.additional_args }} + **/*.md + **/*.html + **/*.Rmd + **/*.yaml + **/*.yml + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index e4106681..8be88706 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ application or to a regulatory agency. This package has the functionality to associate metadata information to a local R data frame, perform data set level validation checks and convert into a [transport v5 -file(xpt)](https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/movefile/n1xbwdre0giahfn11c99yjkpi2yb.htm). +file(xpt)](http://somebrokenlink.com/). As always, we welcome your feedback. If you spot a bug, would like to see a new feature, or if any documentation is unclear - submit an issue From 29e9af6dc90f31b304d445859e626aab334acbf8 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 18 May 2023 15:20:10 +0530 Subject: [PATCH 128/337] fix: revert the broken link to check if the CI works as expected --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8be88706..e4106681 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ application or to a regulatory agency. This package has the functionality to associate metadata information to a local R data frame, perform data set level validation checks and convert into a [transport v5 -file(xpt)](http://somebrokenlink.com/). +file(xpt)](https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/movefile/n1xbwdre0giahfn11c99yjkpi2yb.htm). As always, we welcome your feedback. If you spot a bug, would like to see a new feature, or if any documentation is unclear - submit an issue From 55080111034f4e6e0246ab15940a34684d917b99 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 18 May 2023 18:29:08 +0530 Subject: [PATCH 129/337] chore: remove unused argument --- .github/workflows/check-links.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml index d89833ba..230e521b 100644 --- a/.github/workflows/check-links.yml +++ b/.github/workflows/check-links.yml @@ -27,7 +27,6 @@ jobs: --exclude "https://github.com.*.git|lycheeverse.*" --verbose --no-progress - ${{ inputs.additional_args }} **/*.md **/*.html **/*.Rmd From b0390d9658283a1f0523f1343d6351356f20030b Mon Sep 17 00:00:00 2001 From: EeethB Date: Thu, 18 May 2023 13:26:40 +0000 Subject: [PATCH 130/337] Use rlang for error messages --- R/df_label.R | 2 +- R/format.R | 2 +- R/label.R | 2 +- R/length.R | 2 +- R/order.R | 2 +- R/type.R | 17 +++-------------- 6 files changed, 8 insertions(+), 19 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index a29c0814..52477e3b 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -41,7 +41,7 @@ xportr_df_label <- function(.df, metacore = NULL, domain = NULL) { ## Pull out correct metadata if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `xportr_metadata()`") + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/format.R b/R/format.R index fc11a9c4..c6f40609 100644 --- a/R/format.R +++ b/R/format.R @@ -42,7 +42,7 @@ xportr_format <- function(.df, metacore = NULL, domain = NULL, verbose = getOpti if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `xportr_metadata()`") + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/label.R b/R/label.R index 1c34f8f9..7c54fe77 100644 --- a/R/label.R +++ b/R/label.R @@ -45,7 +45,7 @@ xportr_label <- function(.df, metacore = NULL, domain = NULL, if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `xportr_metadata()`") + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/length.R b/R/length.R index fdd3b3fc..8bd7fe0b 100644 --- a/R/length.R +++ b/R/length.R @@ -43,7 +43,7 @@ xportr_length <- function(.df, metacore = NULL, domain = NULL, if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `xportr_metadata()`") + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/order.R b/R/order.R index a3ca60e1..132c8368 100644 --- a/R/order.R +++ b/R/order.R @@ -39,7 +39,7 @@ xportr_order <- function(.df, metacore = NULL, domain = NULL, verbose = getOptio if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `xportr_metadata()`") + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } diff --git a/R/type.R b/R/type.R index d725e3ea..1253d35b 100644 --- a/R/type.R +++ b/R/type.R @@ -37,14 +37,12 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") type_name <- getOption("xportr.type_name") - characterTypes <- c(getOption("xportr.character_types"), "_character") - numericTypes <- c(getOption("xportr.numeric_types"), "_numeric") + characterTypes <- getOption("xportr.character_types") ## Common section to detect domain from argument or pipes df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) domain <- get_domain(.df, df_arg, domain) - if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain ## End of common section @@ -52,7 +50,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, ## Pull out correct metadata if (is.null(metacore)) { if (is.null(attr(.df, "metadata"))) { - stop("Metadata must be set with `metacore` or `xportr_metadata()`") + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { metacore <- attr(.df, "metadata") } @@ -77,16 +75,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, data.frame(variable = names(.df), type = unlist(table_cols_types)), metacore, by = "variable" - ) %>% - mutate( - # _character is used here as a mask of character, in case someone doesn't - # want 'character' coerced to character - type.x = if_else(type.x %in% characterTypes, "_character", type.x), - type.x = if_else(type.x %in% numericTypes, "_numeric", type.x), - type.y = tolower(type.y), - type.y = if_else(type.y %in% characterTypes, "_character", type.y), - type.y = if_else(type.y %in% numericTypes, "_numeric", type.y) - ) + ) # It is possible that a variable exists in the table that isn't in the metadata # it will be silently ignored here. This may happen depending on what a user From 147f808943dc7dd3d859c925658465e18b513a83 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 18 May 2023 21:16:50 +0530 Subject: [PATCH 131/337] chore: update the checkout action to v3 across all the workflows --- .github/workflows/check-standard.yaml | 2 +- .github/workflows/pkgdown.yaml | 2 +- .github/workflows/spellcheck.yml | 2 +- .github/workflows/test-coverage.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/check-standard.yaml b/.github/workflows/check-standard.yaml index d9d55cb3..c9239381 100644 --- a/.github/workflows/check-standard.yaml +++ b/.github/workflows/check-standard.yaml @@ -29,7 +29,7 @@ jobs: R_KEEP_PKG_SOURCE: yes steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: r-lib/actions/setup-pandoc@v2 diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 5162a56e..07dea56d 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -12,7 +12,7 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: r-lib/actions/setup-r@v1 diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index 76c40c78..e4b76558 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -26,7 +26,7 @@ jobs: && github.event.pull_request.draft == false steps: - name: Checkout repo 🛎 - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: persist-credentials: false fetch-depth: 0 diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index 21398d21..0a44f49a 100644 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -16,7 +16,7 @@ jobs: env: GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: r-lib/actions/setup-r@v1 From a633382abbec0ab05fdbe6c6bf7754203313ca3e Mon Sep 17 00:00:00 2001 From: bs832471 Date: Sat, 20 May 2023 15:30:49 +0000 Subject: [PATCH 132/337] feat: #84 developing deepdive overview section. fixed image in Readme --- README.md | 46 ++++++++++++++++++------------------ man/figures/design_flow.png | Bin 54033 -> 32284 bytes vignettes/deepdive.Rmd | 19 ++++++++------- vignettes/xportr.Rmd | 2 +- 4 files changed, 35 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index e4106681..5edaa4f6 100644 --- a/README.md +++ b/README.md @@ -67,19 +67,19 @@ to any validators or data reviewers.
    -- Variable names must start with a letter (not an underscore), be - comprised of only uppercase letters (A-Z), numerals (0-9) and be - free of non-ASCII characters, symbols, and underscores. -- Allotted length for each column containing character (text) data - should be set to the maximum length of the variable used across all - data sets (≀ 200) -- Coerces variables to only numeric or character types -- Display format support for numeric float and date/time values -- Variables names are ≀ 8 characters. -- Variable labels are ≀ 200 characters. -- Data set labels are ≀ 40 characters. -- Presence of non-ASCII characters in Variable Names, Labels or data - set labels. +- Variable names must start with a letter (not an underscore), be + comprised of only uppercase letters (A-Z), numerals (0-9) and be free + of non-ASCII characters, symbols, and underscores. +- Allotted length for each column containing character (text) data + should be set to the maximum length of the variable used across all + data sets (≀ 200) +- Coerces variables to only numeric or character types +- Display format support for numeric float and date/time values +- Variables names are ≀ 8 characters. +- Variable labels are ≀ 200 characters. +- Data set labels are ≀ 40 characters. +- Presence of non-ASCII characters in Variable Names, Labels or data set + labels. **NOTE:** Each check has associated messages and warning. @@ -90,13 +90,13 @@ developed using R. To do this we will need to do the following: -- Apply types -- Apply lengths -- Apply variable labels -- Apply formats -- Re-order the variables -- Apply a dataset label -- Write out a version 5 xpt file +- Apply types +- Apply lengths +- Apply variable labels +- Apply formats +- Re-order the variables +- Apply a dataset label +- Write out a version 5 xpt file All of which can be done using a well-defined specification file and the `xportr` package! @@ -134,12 +134,12 @@ Each `xportr_` function has been written in a way to take in a part of the specification file and apply that piece to the dataset. ``` r -adsl %>% +adsl %>% xportr_type(var_spec, "ADSL") %>% xportr_length(var_spec, "ADSL") %>% xportr_label(var_spec, "ADSL") %>% - xportr_order(var_spec, "ADSL") %>% - xportr_format(var_spec, "ADSL") %>% + xportr_order(var_spec, "ADSL") %>% + xportr_format(var_spec, "ADSL") %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` diff --git a/man/figures/design_flow.png b/man/figures/design_flow.png index beef0e5266212f6370b9e47350518a51dc354e36..543a8db3f689ce7567ef2d226ccb6d0b9d84b427 100644 GIT binary patch literal 32284 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 literal 54033 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 z zCSSGmx|m4ogRkxV{azAY(zdpW&07wuVlaLaBJf#q1P*iJTZZl@sklV0unRHJ(0i7a z)_-gGUv@4?_<`B}lT%aZmdhQBI?boJd{gJVI?#6(1|5?(-H-}ny@E@WKz zIA|&bN>qSIu8xv0Ey~9sy?6ci1zH%gvaF3d?B6KP^-$UMbfyy8E&RD!g8)+c+V@%~o# z^XJdo@4MmYyBNncE1l}Nyv%g)R@(oq~TkbpZ zRSHKJa5?UfvHcw5!uY8FUTe^r4?M3l8~V`Fva;m?VoL+HxHG60;iEtz!7t^uf8+H^ zqxa>?edxZjJ&{pM=z@r%cv?KIs7Q49jAQ?L<6ZIxz^srz06@^<%uJQ72#(VkGkGJU zs5x3QhW82q{>sYA=rZY(A~oAs+{VU+L6MV4Z;mnj@M|p&NZn+gOouzoc0a_tX3cpW z4|6A%-lah4J&tcjDtL|exj|-G8M#zR${q!RNeF9)L?Z9pdES!L2XJ4e0*CwRQ53^o z{n>K1BO@s(iS)Eg?qAS6KFQ{IzME*%#+i^EeR^RWx(9@ei@x;c;rLAuh>fpo&PKtH z<2|4R4QCZjD1j$db4uUPP$g39OR_5@c)M5CDO=2|JXc{}L417t{z+Y-%{tn+OCPPx z%3W@^{uHzi#-X0$HeZkjC+pFZcjPnqAD%D+47Sd!!r!T;n!|k_7|bj@1#SHh2@g56 ziuY^>&oIiQ3A}G&sJI5h6gg>!r3dXAMdy()DYC+fsK%^WwmIN8W`y4RTpFofxb-^&e$e`raX9;z+Z8DE}`#qgXKl{i7);SDiqw z$_JEGr=P!vheu7EHt12Uz9;Q=9RhLgsO3L$0e*}p^ge*#&@~t~QT{VULuJh>J5k{Y z%qtG0s{>FRSqX`95?l?SiJWDYPpz#rmwy7&W8ikvJ$e>g>I@6N{_Yb5QLrN>z%wDHjrh^lL-Fhu?rV2NCh13!@wOMZ*K-bkvX}!eo)fp=jRtB<9KyuSY+}G ofVu$xzhC_yL;R4v7V|@{N?|(l#e6I|mQkoFYboU^K79870CP>mtN;K2 diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 0af93ffe..9894cded 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -21,18 +21,21 @@ library(DT) # Introduction -This vignette will take you on a thorough journey of all the possibilities of the `{xportr}` package for applying information from a metadata object to multiple data sets through the core `{xportr}` functions. We will also explore the following: +This vignette will take explore in detail all the possibilities of the `{xportr}` package for applying information from a metadata object to multiple data sets using the core `{xportr}` functions. + +We will also explore the following: * What goes in a Submission to a Health Authority? * What is `{xportr}` validating behind the scenes? - * Using `options()` to enhance your `{xportr}` experience. * Breakdown of `{xportr}` and a ADaM dataset specification file. * Understanding the warning and error messages for each `{xportr}` function. * Using `{xportr}` to bulk process multiple datasets. - * Preparing xpt files for upload to a validation software + * Preparing xpt files for upload to a validation software. + * Using `options()` to enhance your `{xportr}` experience. * Future work -Before we begin, we encourage users to review the [Get Started Page](xportr.Rmd). This contains a simple walk through of applying `{xportr}` functions to an ADSL dataset given a specification file. It is way less verbose! + +**NOTE:** We use the phrase _metadata object_ through out this package. A _metadata object_ can either be a specification file read into R as a dataframe or a `{metacore}` object. The __metadata object__ created in `{metacore}` has additional features not covered here, but at its core is using a specification file. However, the intention of `{xportr}` is for it to work with either a dataframe or a `{metacore}` object. # What goes in a Submission to a Health Authority? @@ -56,13 +59,13 @@ In preparing the SDTM Data package, `{xportr}` can be used to apply information The key components of the ADaM package are very similar to SDTM package with a few additions: define.xml, Analysis Study Data Reviewer's Guide (adrg.pdf), Analysis Results Metadata (analysis-results-metadata.pdf) and datasets as Version 5 xpt format. -In preparing the SDTM Data package, `{xportr}` can be used to apply information from the data specification files to the dataset. The `xportr_write()` can then be used to write out the final dataset as an `xpt` file that can be submitted to a Health Authority. +In preparing the ADaM Data package, `{xportr}` can be used to apply information from the data specification files to the dataset. The `xportr_write()` can then be used to write out the final dataset as an `xpt` file that can be submitted to a Health Authority. -## What is `{xportr}` validating? +## What is `{xportr}` validating in these Data Packages? -The xpt Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your packages for submission the suite of `{xportr}` functions and `xprotr_write()`, help to check that your datasets are submission compliant. +The `xpt` Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your packages for submission the suite of `{xportr}` functions and `xprotr_write()`, help to check that your datasets are submission compliant. The package checks many of the latest rules laid out in the [Study Data Technical Conformance Guide](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/study-data-technical-conformance-guide-technical-specifications-document), but please note that it is not yet an exhaustive list of checks. We envision that users are also submitting their `xpts` to additional validation software. -In `{xportr} v0.3.0` we give the users the ability to apply labels, formats, types, lengths to the R dataframe. `{xportr}` also has the ability to order the dataset according to the specification file as well as write out the R dataframe as a xpt Version 5 file, which is the preferred data standard to submit to health authorities like the FDA. +In `{xportr} v0.3.0` we give the users the ability to apply labels, formats, types, lengths to the R dataframe. `{xportr}` also has the ability to order the dataset according to the specification file as well as write out the R dataframe as a `xpt` Version 5 file, which is the preferred data standard to submit to health authorities like the FDA. We have developed the `{xportr}` functions to allow users flexibility to use errors and warnings to let them know of issues in their datasets or in their specification files. For example, let's say an accident deletion of the **TRTSDT** variable label occurred in the specification file. Using `xportr_label()` to apply all the labels would immediately alert the user that **TRTSDT**, while in the data, does not have an appropriate label available to applied to it. diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 9f4915e2..aa212c77 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -45,7 +45,7 @@ The `ADSL` has the following features: * Data types other than character and numeric * Missing labels on variables * Missing label for data set -* Order of varibles not following specification file +* Order of variables not following specification file * Formats missing To create a fully compliant v5 xpt `ADSL` dataset, that was developed using R, we will need to apply the 6 main functions within the `xportr` package: From ef1f903b14072c24358b4e97eadb49334c13d8c3 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Sun, 21 May 2023 23:09:21 +0000 Subject: [PATCH 133/337] feat: #84 xportr apply all, new pictogram --- .Rbuildignore | 1 + vignettes/deepdive.Rmd | 259 ++++++++++++++++++++++++++++--------- vignettes/xportr.Rmd | 8 ++ vignettes/xpt_validate.png | Bin 0 -> 157485 bytes 4 files changed, 206 insertions(+), 62 deletions(-) create mode 100644 vignettes/xpt_validate.png diff --git a/.Rbuildignore b/.Rbuildignore index 92480277..9aa284bd 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -23,3 +23,4 @@ ^advs_Define-Excel-Spec_match_admiral\.xlsx ^cran-comments\.md$ ^example_data_specs$ +^deepdive.Rmd$ diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 9894cded..aa51e322 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -28,10 +28,10 @@ We will also explore the following: * What goes in a Submission to a Health Authority? * What is `{xportr}` validating behind the scenes? * Breakdown of `{xportr}` and a ADaM dataset specification file. + * Using `options()` and `xportr_metadata()` to enhance your `{xportr}` experience. * Understanding the warning and error messages for each `{xportr}` function. * Using `{xportr}` to bulk process multiple datasets. * Preparing xpt files for upload to a validation software. - * Using `options()` to enhance your `{xportr}` experience. * Future work @@ -65,120 +65,259 @@ In preparing the ADaM Data package, `{xportr}` can be used to apply information The `xpt` Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your packages for submission the suite of `{xportr}` functions and `xprotr_write()`, help to check that your datasets are submission compliant. The package checks many of the latest rules laid out in the [Study Data Technical Conformance Guide](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/study-data-technical-conformance-guide-technical-specifications-document), but please note that it is not yet an exhaustive list of checks. We envision that users are also submitting their `xpts` to additional validation software. -In `{xportr} v0.3.0` we give the users the ability to apply labels, formats, types, lengths to the R dataframe. `{xportr}` also has the ability to order the dataset according to the specification file as well as write out the R dataframe as a `xpt` Version 5 file, which is the preferred data standard to submit to health authorities like the FDA. +Each of the core functions for applying labels, types, formats, order and lengths provide feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called. This function calls `xpt_validate()`, which is a behind the scenes function not available to users that does a final check for compliance. At the time of `{xportr} v0.3` we are checking the following when a user writes out an `xpt` file.: -We have developed the `{xportr}` functions to allow users flexibility to use errors and warnings to let them know of issues in their datasets or in their specification files. For example, let's say an accident deletion of the **TRTSDT** variable label occurred in the specification file. Using `xportr_label()` to apply all the labels would immediately alert the user that **TRTSDT**, while in the data, does not have an appropriate label available to applied to it. +validate -```{r, message = FALSE, echo = FALSE} +# {xportr} in action + +We are going to explore the 5 core `{xportr}` functions using paying: + +* 5 ADaM datasets from the Pilot 3 Submission to the FDA +* ADaM Specification Files from the Pilot 3 Submission to the FDA + +We will focus on warning and error messaging with contrived examples from these functions by manipulating either the datasets or the specification files. + +**NOTE:** These datasets and specification are not available directly from the package. You can access them on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. This is to keep the package to a minimum size. + + +## Using `options()` and `xportr_metadata()` to enhance your experience. + +Before we dive into the functions, we want to point out some quality of life utilities to make your `xpt` generation life a little bit easier. + +Enter... + +* `options()` +* `xportr_metadata()` + +**NOTE:** As long as you have a well-defined _metadata object_ you do NOT need to use `options()` or `xportr_metadata()`, but we find these handy to use! + +## You got `options()` + +`{xportr}` is built with certain assumptions around specification columns names and information in those columns. We have found that each company specification file can differ slightly from our assumptions. The `options()` function allows users to control those assumptions inside `{xportr}` functions. + +Let's take a look at our example specification files names. We can see that all the columns start with an upper case letter and have spaces in several of them. We could convert all the column names to lower case and deal with the spacing using some `{dplyr}` functions or base R or we could just use `options()`! + +```{r, message = FALSE} library(dplyr) library(xportr) - -options(xportr.variable_name = "Variable", - xportr.label = "Label", - xportr.type_name = "Data Type", - xportr.format = "Format") +library(here) +library(readxl) spec_loc <- here::here("example_data_specs", "TDF_ADaM_Pilot3.xlsx") +var_spec <- read_xlsx(spec_loc, sheet = "Variables") + +colnames(var_spec) + +``` +By using `options()` we are telling `{xportr}` that the following are the valid Variable names as seen below. Before we set the options the package assumed every thing was in lowercase and there were no spaces in the names. + +```{r} +# options(xportr.variable_name = "Variable", +# xportr.label = "Label", +# xportr.type_name = "Data Type", +# xportr.format = "Format", +# xportr.length = "Length", +# xportr.order_name = "Order") +``` + +## Going meta + +Each of the core `{xportr}` functions require several inputs for it to work. A valid dataframe, a metadata object and a domain name along with optional messaging. For example, here is a simple call using all of the functions. A lot of information is repeated in each call. + +```{r, eval = FALSE} +adsl %>% + xportr_type(var_spec, "ADSL", "message") %>% + xportr_length(var_spec, "ADSL", "message") %>% + xportr_label(var_spec, "ADSL", "message") %>% + xportr_order(var_spec, "ADSL", "message") %>% + xportr_format(var_spec, "ADSL", "message") %>% + xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") +``` + +To help reduce these repetitive calls, we have created the `xportr_metadata()` function. A user can just **set** the _metadata object_ and the Domain name in the first call and this will be passed onto the other functions. Much cleaner! + +```{r, eval = FALSE} +adsl %>% + xportr_metadata(var_spec, "ADSL") %>% + xportr_type() %>% + xportr_length() %>% + xportr_label() %>% + xportr_order() %>% + xportr_format() %>% + xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") + +``` + + +## Warnings and Errors + +For the next six sections, we will either manipulate the ADaM dataset or specification file to help showcase the ability of the xportr functions to detect issues. + +```{r} +# options(xportr.variable_name = "variable", +# xportr.label = "label", +# xportr.type_name = "type", +# xportr.format = "format", +# xportr.length = "length", +# xportr.order_name = "order") +``` + +```{r} var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") %>% - filter(Variable != "TRTSDT") + dplyr::rename(type = "Data Type") %>% + rlang::set_names(tolower) adsl_loc <- here::here("example_data_specs", "adsl.xpt") +adsl <- haven::read_xpt(adsl_loc) +``` + +### `xportr_type()` + + +```{r, eval = FALSE} + +adsl_type <- xportr_type(adsl, var_spec, "ADSL", verbose = "warn") -adsl <- haven::read_xpt(adsl_loc) %>% - metatools::remove_labels() ``` +### `xportr_length()` + +TODO: There is no warning around the length in the metadata being greater than 200. +TODO: There is no message to users about how many lengths were applied to the dataframe. + + +```{r, eval = FALSE} + +var_spec_len <- var_spec %>% + mutate(length = if_else(variable == "STUDYID", "222", length )) + +adsl_len <- xportr_length(adsl, var_spec_len, "ADSL", verbose = "message") -```{r} -adsl_lbl <- xportr_label(adsl, var_spec, "ADSL", verbose = "warn") ``` +### `xportr_label()` + +TODO: Incorrect label applied, but label still applied along with 48 other lables. We should give user feedback on the labels still being applied. + +TODO: Incorrect label applied, none and message still give warning when I have asked it not to do that. + +TODO: Weird characters in outputs. + ```{r} -library(dplyr) -library(xportr) -options(xportr.variable_name = "Variable", - xportr.label = "Label", - xportr.type_name = "Data Type", - xportr.format = "Format") +var_spec_lbl <- var_spec %>% + mutate(label = if_else(variable == "TRTSDT", + "Length of variable label must be 40 characters or less", label)) -spec_loc <- here::here("example_data_specs", "TDF_ADaM_Pilot3.xlsx") +adsl_lbl <- xportr_label(adsl, var_spec_lbl, "ADSL", verbose = "warn") -var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") %>% - mutate(Label = if_else(Variable == "TRTSDT", - "Date of First Exposure to Treatment Date of First Exposure to Treatment", Label)) +``` -adsl_loc <- here::here("example_data_specs", "adsl.xpt") +### `xportr_order()` + +TODO: I think there is something wrong with `xportr_order` as it is reordering the entire dataframe to something I don't fully understand. + +TODO: What about a check on have a non-numeric value in the ordering column? I put an X in there and it did not care. + +```{r} + +var_spec_ord <- var_spec %>% + mutate(order = if_else(variable == "TRTSDT", "X", order)) + +adsl_ord <- xportr_order(adsl, var_spec, "ADSL", verbose = "warn") -adsl <- haven::read_xpt(adsl_loc) %>% - metatools::remove_labels() ``` +### `xportr_format()` + +TODO: No warning issue for incorrect format type. I put in a "DATA" format and it applied the format even though it is not a valid one. ```{r} -adsl_lbl <- xportr_label(adsl, var_spec, "ADSL", verbose = "warn") + +var_spec_fmt <- var_spec %>% + mutate(format = if_else(variable == "TRTSDT", "DATA", format)) + + +adsl_fmt <- xportr_format(adsl, var_spec_fmt, "ADSL", verbose = "warn") + ``` -Example: `xportr_label()` while applying labels form the specification will make sure that the label is <40 characters. +### `xportr_write()` +TODO: path must contain adsl.xpt in it, but does not say this in our documentation -`xportr_write()` under the hood calls the `xpt_validate()` function, which does several more checks to make sure minimum complicance checks are being done. +TODO: xpt_validate catches my DATA format, but `xportr_format()` does not catch it. -* Name of dataframe must be 8 characters or less -* No non-ASCII, symbol or underscore characters -* Dataset label must be 40 characters or less and not have any non-ASCII, symbol or special characters. -* Variable Types must be "", "text", "integer", "float", "datetime", "date", "time", - "partialdate", "partialtime", "partialdatetime", - "incompletedatetime", "durationdatetime", "intervaldatetime" -* +TODO: I don't think `xportr_write()` works in the README and Get Started -## Materials used +```{r} +var_spec_wrt <- var_spec %>% + mutate(format = if_else(variable == "TRTSDT", "DATA", format)) -* ADaM datasets from the Pilot 3 Submission to the FDA -* ADaM Specification Files from the Pilot 3 Submission to the FDA -## Set up our Environment +xportr_write(adsl, path = "/cloud/project/adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = FALSE) + +``` +` + + +# Using `{xportr}` to bulk process multiple datasets. ```{r, message=FALSE} library(dplyr) library(xportr) -``` +library(stringr) +spec_loc <- here::here("example_data_specs", "TDF_ADaM_Pilot3.xlsx") +data_loc <- str_remove(spec_loc, "/TDF_ADaM_Pilot3.xlsx") -## You got Options +var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") -As the Clinical Reporting landscape is so large we have found that a lot of companies have slight variations in how they construct their specification files. For example, some companies will use Data Type or Type for their Column Names. Something on character types. +path_of_xpt_files <- list.files(data_loc, pattern = ".xpt", full.names = TRUE) -How can developers overcome this issue for an open-source package? The `xportr` package makes use of the `options()` function from base R to give your more control on naming conventions within in your specification file. +``` -The `xportr` functions have been coded in a way that they expect all column names to all be in lower-case. However, with `options()` you can override this assumption +## Read in all 5 xpts files ```{r} -options(xportr.variable_name = "Variable", - xportr.label = "Label", - xportr.type_name = "Data Type", - xportr.format = "Format") -``` +filepaths <- path_of_xpt_files %>% + set_names(nm = basename(.) %>% + tools::file_path_sans_ext()) +files <- purrr::map(filepaths, read_xpt) +purrr::pmap(.l = list(.x = names(files), .y = files), .f = ~assign(.x, .y, envir = .GlobalEnv)) +``` -## Load data +## Apply specification file to all 5 xpts files +```{r} -## Load specification file +xportr_apply_all <- function(spec_file, domain_name, data, path_name, label){ + adsl %>% + xportr_metadata({{spec_file}}, {{domain_name}}) %>% + xportr_type() %>% + xportr_length() %>% + xportr_label() %>% + xportr_order() %>% + xportr_format() %>% + xportr_write(.df = {{data}}, path = {{path}}, label = {{label}}) +} + +xportr_apply_all(var_spec, "ADSL", adsl, + path = "/cloud/project/adsl.xpt", label = "Subject-Level Analysis Dataset") -```{r} -spec_loc <- here::here("example_data_specs", "TDF_ADaM_Pilot3.xlsx") -var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") %>% - filter(Variable != "TRTSDT" ) - ``` + + + ```{r} var_spec_view <- var_spec %>% filter(Dataset == "ADSL") @@ -193,11 +332,7 @@ DT::datatable(var_spec_view, options = list( ## Contrived Examples for Error and Warning Messages -```{r} -adsl_loc <- here::here("example_data_specs", "adsl.xpt") -adsl <- haven::read_xpt(adsl_loc) %>% - metatools::remove_labels() adsl_u <- xportr_label(adsl, var_spec, "ADSL", verbose = "warn") ``` diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index aa212c77..b1d557e8 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -17,6 +17,14 @@ knitr::opts_chunk$set( ) library(DT) + +options(xportr.variable_name = "variable", + xportr.label = "label", + xportr.type_name = "type", + xportr.format = "format", + xportr.length = "length", + xportr.order_name = "order") + ``` ```{r, include=FALSE} diff --git a/vignettes/xpt_validate.png b/vignettes/xpt_validate.png new file mode 100644 index 0000000000000000000000000000000000000000..8db728f63f7c40e5a42a478f58368e47608aaad3 GIT binary patch literal 157485 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 z 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

    -
    -
    - Content not found. Please use links in the navbar. -
    - - - +
    - -
    - diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index 771e868f..95226cee 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -1,81 +1,77 @@ -License ‱ xportrLicense ‱ xportr + + Skip to contents -
    -
    +
    +
    +
    -
    -
    YEAR: 2021
     COPYRIGHT HOLDER: Atorus/GSK JPT
     
    -
    +
    - +
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    + -
    +

    +pg(PiB4&^%bN}a2(@BJtl&X`&9>;K@@MObb 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 Y!UkzjzIzR%|Ne@_gro(F`L)0OA0HpSoB#j- literal 0 HcmV?d00001 From c4cd09c43ca2c82094cce85d99c98a1ea52cb494 Mon Sep 17 00:00:00 2001 From: Sadchla Mathieu Date: Tue, 23 May 2023 07:58:23 -0400 Subject: [PATCH 134/337] Adding test for non_ASCII --- tests/testthat/test-utils-xportr.R | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 934ea342..4ff352d8 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -92,3 +92,12 @@ test_that("xpt_validate: Get error message when the variable type is invalid", { "Variables `A` and `B` must have a valid type." ) }) + +test_that("xpt_validate: Get error message when the label contains non-ASCII, symbol or special characters", { + df <- data.frame(A = 1, B = 2) + attr(df$A, "label") <- "foo%bar" + expect_equal( + xpt_validate(df), + "Label 'A=foo%bar' cannot contain any non-ASCII, symbol or special characters." + ) +}) From 4384ec3c33474a42b5bc62078459891594f703a9 Mon Sep 17 00:00:00 2001 From: Sadchla Mathieu Date: Tue, 23 May 2023 08:17:52 -0400 Subject: [PATCH 135/337] Non-ASCII symbols check --- tests/testthat/test-utils-xportr.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 4ff352d8..da229356 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -95,9 +95,9 @@ test_that("xpt_validate: Get error message when the variable type is invalid", { test_that("xpt_validate: Get error message when the label contains non-ASCII, symbol or special characters", { df <- data.frame(A = 1, B = 2) - attr(df$A, "label") <- "foo%bar" + attr(df$A, "label") <- "foo¿bar" expect_equal( xpt_validate(df), - "Label 'A=foo%bar' cannot contain any non-ASCII, symbol or special characters." + "Label 'A=foo¿bar' cannot contain any non-ASCII, symbol or special characters." ) }) From a1cdb0ea30a91a93f657e6eafff0e388b59b854e Mon Sep 17 00:00:00 2001 From: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> Date: Tue, 23 May 2023 07:57:22 -0500 Subject: [PATCH 136/337] Update R/metadata.R Co-authored-by: Ben Straub --- R/metadata.R | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/R/metadata.R b/R/metadata.R index 1fbb709f..134a158b 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -30,7 +30,10 @@ #' Param = c("param1", "param2", "param3") #' ) #' -#' xportr_metadata(adlb, metadata, "test") +#' adlb %>% + xportr_metadata(metadata, "test") %>% + xportr_type() %>% + xportr_order() xportr_metadata <- function(.df, metadata, domain = NULL) { ## Common section to detect domain from argument or pipes From 821112fd172abf1a56efe46a857bad2a87684b91 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 12:59:33 +0000 Subject: [PATCH 137/337] Correct formatting in metadata example --- R/metadata.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/metadata.R b/R/metadata.R index 134a158b..e64fdbac 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -30,10 +30,10 @@ #' Param = c("param1", "param2", "param3") #' ) #' -#' adlb %>% - xportr_metadata(metadata, "test") %>% - xportr_type() %>% - xportr_order() +#' adlb %>% +#' xportr_metadata(metadata, "test") %>% +#' xportr_type() %>% +#' xportr_order() xportr_metadata <- function(.df, metadata, domain = NULL) { ## Common section to detect domain from argument or pipes From 8beca296cb6cd5fbd1a93855d2199f8a2eaa1d6b Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 13:06:38 +0000 Subject: [PATCH 138/337] Restore deleted meta_ordered calcs in type.R --- R/type.R | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/R/type.R b/R/type.R index 1253d35b..5fafde78 100644 --- a/R/type.R +++ b/R/type.R @@ -75,7 +75,16 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, data.frame(variable = names(.df), type = unlist(table_cols_types)), metacore, by = "variable" - ) + ) %>% + mutate( + # _character is used here as a mask of character, in case someone doesn't + # want 'character' coerced to character + type.x = if_else(type.x %in% characterTypes, "_character", type.x), + type.x = if_else(type.x %in% numericTypes, "_numeric", type.x), + type.y = tolower(type.y), + type.y = if_else(type.y %in% characterTypes, "_character", type.y), + type.y = if_else(type.y %in% numericTypes, "_numeric", type.y) + ) # It is possible that a variable exists in the table that isn't in the metadata # it will be silently ignored here. This may happen depending on what a user From f1dbec70c094f7d698ea4085b7bbec9fab00dde4 Mon Sep 17 00:00:00 2001 From: elimillera Date: Tue, 23 May 2023 13:25:35 +0000 Subject: [PATCH 139/337] Update per #76 to not fail with ISO formats --- R/utils-xportr.R | 14 ++++++++++---- tests/testthat/test-utils-xportr.R | 10 ++++++++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 427a1414..7c9c8f24 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -229,7 +229,7 @@ xpt_validate <- function(data) { } # 4.0 Format Types ---- - formats <- tolower(extract_attr(data, attr = "format.sas")) + formats <- extract_attr(data, attr = "format.sas") ## The usual expected formats in clinical trials: characters, dates expected_formats <- c( @@ -243,12 +243,18 @@ xpt_validate <- function(data) { paste("mmddyy", 2:10, ".", sep = ""), paste("ddmmyy", 2:10, ".", sep = "") ) + # From https://www.myintervals.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/ + iso_regex <- "^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$" + format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" + - chk_formats <- formats[which(!formats %in% expected_formats)] + # 3.1 Invalid types + is_valid <- formats %in% expected_formats | + purrr::map_lgl(formats, stringr::str_detect, iso_regex) | + purrr::map_lgl(formats, stringr::str_detect, format_regex) + chk_formats <- formats[!is_valid] ## Remove the correctly numerically formatted variables - format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" - chk_formats <- chk_formats[which(!str_detect(chk_formats, format_regex))] if (length(chk_formats) > 0) { err_cnd <- c( err_cnd, diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 291a4d73..a1baaff7 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -101,3 +101,13 @@ test_that("xpt_validate: Get error message when the variable type is invalid", { "Variables `A` and `B` must have a valid type." ) }) + +test_that("xpt_validate: Doesn't error out with iso8601 format", { + df <- data.frame(A = 1, B = 2) + attr(df$A, "format.sas") <- "2022-01-01T12:12:12" + attr(df$B, "format.sas") <- "2009-W21-2T01:22" + expect_equal( + xpt_validate(df), + character(0) + ) +}) From 7c58c951671497f94e53ec1171a01b7e6e9199fe Mon Sep 17 00:00:00 2001 From: elimillera Date: Tue, 23 May 2023 13:28:21 +0000 Subject: [PATCH 140/337] Update news --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index 9d706b4e..318a5abe 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,6 +7,7 @@ * Add new argument to `xportr_write` to allow users to specify how xpt validation checks are handled. * Fixed bug where character_types were case sensitive. They are now case insensitive. * Updated `xportr_type` to make type coercion more explicit. +* `xpt_validate` updated to accept iso8601 date formats. ## Documentation From fe250bbb303fae07f99d90120f772359b5d881c3 Mon Sep 17 00:00:00 2001 From: elimillera Date: Tue, 23 May 2023 13:41:29 +0000 Subject: [PATCH 141/337] Lint and style --- R/support-test.R | 17 ++++++++--------- R/utils-xportr.R | 2 +- tests/testthat/test-utils-xportr.R | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/R/support-test.R b/R/support-test.R index deba9587..fd8950c5 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -68,15 +68,14 @@ minimal_table <- function(n_rows = 3, cols = c("x", "y")) { #' to keep #' #' @return A metadata data.frame -minimal_metadata <- function( - dataset = FALSE, - length = FALSE, - label = FALSE, - type = FALSE, - format = FALSE, - order = FALSE, - dataset_name = "adsl", - var_names = NULL) { +minimal_metadata <- function(dataset = FALSE, + length = FALSE, + label = FALSE, + type = FALSE, + format = FALSE, + order = FALSE, + dataset_name = "adsl", + var_names = NULL) { cols_logical <- c(dataset, TRUE, label, length, type, format, order) cols <- c( "dataset", "variable", "label", "length", "type", "format", "order" diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 7c9c8f24..ae91bcc3 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -244,7 +244,7 @@ xpt_validate <- function(data) { paste("ddmmyy", 2:10, ".", sep = "") ) # From https://www.myintervals.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/ - iso_regex <- "^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$" + iso_regex <- "^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$" # nolint: object_name, line_len format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index a1baaff7..857c4c4e 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -109,5 +109,5 @@ test_that("xpt_validate: Doesn't error out with iso8601 format", { expect_equal( xpt_validate(df), character(0) - ) + ) }) From 3dd00601b0f4c3fdb6720949db31faa911294a79 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 14:48:54 +0000 Subject: [PATCH 142/337] Add numericTypes line in type.R --- R/type.R | 3 ++- man/xportr_metadata.Rd | 5 ++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/R/type.R b/R/type.R index 5fafde78..e85c3a71 100644 --- a/R/type.R +++ b/R/type.R @@ -37,7 +37,8 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") type_name <- getOption("xportr.type_name") - characterTypes <- getOption("xportr.character_types") + characterTypes <- c(getOption("xportr.character_types"), "_character") + numericTypes <- c(getOption("xportr.numeric_types"), "_numeric") ## Common section to detect domain from argument or pipes diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index c05bae5b..dfab1156 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -40,5 +40,8 @@ adlb <- data.frame( Param = c("param1", "param2", "param3") ) -xportr_metadata(adlb, metadata, "test") +adlb \%>\% + xportr_metadata(metadata, "test") \%>\% + xportr_type() \%>\% + xportr_order() } From 486f66d1a979d54506b98f2a2c26a9f12b74697b Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 23 May 2023 20:26:41 +0530 Subject: [PATCH 143/337] feat: rename the `metacore` with `metadata` across all the xportr functions --- R/WIKI.md | 71 ++++++++++++++++++++++++++++++++++++ R/df_label.R | 23 ++++++++---- R/format.R | 32 +++++++++++----- R/label.R | 33 ++++++++++++----- R/length.R | 33 ++++++++++++----- R/order.R | 32 +++++++++++----- R/type.R | 35 ++++++++++++------ TEST.R | 11 ++++++ tests/testthat/test-length.R | 2 +- 9 files changed, 215 insertions(+), 57 deletions(-) create mode 100644 R/WIKI.md create mode 100644 TEST.R diff --git a/R/WIKI.md b/R/WIKI.md new file mode 100644 index 00000000..ea4f5bf9 --- /dev/null +++ b/R/WIKI.md @@ -0,0 +1,71 @@ +As xportr is an evolving package, functions or arguments may need to be removed or replaced with more efficient options from one release to another. In such cases, the relevant function or argument must be marked as deprecated. This deprecation is done in three phases over our release cycles. + +Phase 1: The first release will issue a warning when using the depericated function or argument by using `lifecycle::deprecate_warn()`. +Phase 2: In the next release, an error will be thrown using `lifecycle::deprecate_stop()`. +Phase 3: Finally, in the 3rd release thereafter, the function will be removed from the package altogether. + +## Examples of depreciation + +### Deprecating a function + +#### Phase 1 + +1. Use `lifecycle::deprecate_warn` inside the function to throw a deprecation watning when it is called. If the function is replaced by a newer function, provide the new function as the `with` argument inside the `lifecycle::deprecate_warn` +2. Add `lifecycle::badge("deprecated")` in the function description using roxygen comments +3. Build the document using `devtools::document()` to make sure that the vignettes are updated + +```r +#' @description +#' `r lifecycle::badge("deprecated")` +#' +#' This function is *deprecated*. Please use the function `xportr_new_func()` instead +xportr_old_func <- function((.df, metadata, domain = NULL, verbose = "none") { + lifecycle::deprecate_warn( + when = "1.0.0", + what = "xportr_old_func()", + with = "xportr_new_func()", + details = "Optionally provide more context about this change" + ) + # Function logic +} +``` + +#### Phase 2 +1. Replace the `lifecycle::depricate_warn` with `lifecycle::deprecate_stop` +#### Phase 3 +1. Completely remove the deprecated function from the package + + +### Deprecating a function argument + +#### Phase 1 + +1. Still pass the deprecated argument in the function, but with a default value of `deprecated()` +2. If the deprecated function is used by the user, show a warning using `lifecycle::deprecate_warn`. If the argument is replaced with a new argument, reassign it here so the function works. +2. Add `lifecycle::badge("deprecated")` in the description of the function param using roxygen comments +3. Build the document using `devtools::document()` to make sure that the vignettes are updated + +```r +#' @param old_arg `r lifecycle::badge("deprecated")` description about the argument +#' @param new_arg description about the new argument +#' +#' This function is *deprecated*. Please use the function `xportr_new_func()` instead +xportr_old_func <- function((.df, metadata, new_arg, domain = NULL, verbose = "none", old_arg = deprecated()) { + if (!missing(old_arg)) { + lifecycle::deprecate_warn( + when = "1.0.0", + what = "xportr_old_func(old_arg = )", + with = "xportr_new_func(new_arg = )", + details = "Optionally provide more context about this change" + ) + nre_arg <- old_arg + } + # Function logic +} +``` + +#### Phase 2 +1. Replace the `lifecycle::depricate_warn` with `lifecycle::deprecate_stop` +#### Phase 3 +1. Completely remove the deprecated argument from the function + diff --git a/R/df_label.R b/R/df_label.R index 3ecf3153..8c978d0b 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -3,9 +3,10 @@ #' Assigns dataset label from a dataset level metadata to a given data frame. #' #' @param .df A data frame of CDISC standard. -#' @param metacore A data frame containing dataset level metadata. +#' @param metadata A data frame containing dataset level metadata. #' @param domain A character value to subset the `.df`. If `NULL`(default), uses #' `.df` value as a subset condition. +#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` #' #' @return Data frame with label attributes. #' @family metadata functions @@ -20,13 +21,21 @@ #' SEX = c("M", "F", "M") #' ) #' -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = c("adsl", "adae"), #' label = c("Subject-Level Analysis", "Adverse Events Analysis") #' ) #' -#' adsl <- xportr_df_label(adsl, metacore) -xportr_df_label <- function(.df, metacore, domain = NULL) { +#' adsl <- xportr_df_label(adsl, metadata) +xportr_df_label <- function(.df, metadata, domain = NULL, metacore = deprecated()) { + if (!missing(metacore)) { + lifecycle::deprecate_warn( + when = "0.0.3", + what = "xportr_format(metacore = )", + with = "xportr_format(metadata = )" + ) + metadata <- metacore + } domain_name <- getOption("xportr.df_domain_name") label_name <- getOption("xportr.df_label") @@ -38,11 +47,11 @@ xportr_df_label <- function(.df, metacore, domain = NULL) { ## End of common section - if (inherits(metacore, "Metacore")) { - metacore <- metacore$ds_spec + if (inherits(metadata, "Metacore")) { + metadata <- metadata$ds_spec } - label <- metacore %>% + label <- metadata %>% filter(!!sym(domain_name) == domain) %>% select(!!sym(label_name)) %>% # If a dataframe is used this will also be a dataframe, change to character. diff --git a/R/format.R b/R/format.R index e55b7753..9e11c20e 100644 --- a/R/format.R +++ b/R/format.R @@ -3,11 +3,12 @@ #' Assigns a SAS format from a variable level metadata to a given data frame. #' #' @param .df A data frame of CDISC standard. -#' @param metacore A data frame containing variable level metadata. +#' @param metadata A data frame containing variable level metadata. #' @param domain A character value to subset the `.df`. If `NULL`(default), uses #' `.df` value as a subset condition. #' @param verbose The action the function takes when a variable label isn't. #' found. Options are 'stop', 'warn', 'message', and 'none' +#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` #' #' @return Data frame with `SASformat` attributes for each variable. #' @family metadata functions @@ -20,14 +21,27 @@ #' BRTHDT = c(1, 1, 2) #' ) #' -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = c("adsl", "adsl"), #' variable = c("USUBJID", "BRTHDT"), #' format = c(NA, "DATE9.") #' ) #' -#' adsl <- xportr_format(adsl, metacore) -xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.format_verbose", "none")) { +#' adsl <- xportr_format(adsl, metadata) +xportr_format <- function( + .df, + metadata, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { + if (!missing(metacore)) { + lifecycle::deprecate_warn( + when = "0.0.3", + what = "xportr_format(metacore = )", + with = "xportr_format(metadata = )" + ) + metadata <- metacore + } domain_name <- getOption("xportr.domain_name") format_name <- getOption("xportr.format_name") variable_name <- getOption("xportr.variable_name") @@ -40,15 +54,15 @@ xportr_format <- function(.df, metacore, domain = NULL, verbose = getOption("xpo ## End of common section - if (inherits(metacore, "Metacore")) { - metacore <- metacore$var_spec + if (inherits(metadata, "Metacore")) { + metadata <- metadata$var_spec } - if (domain_name %in% names(metacore)) { - metadata <- metacore %>% + if (domain_name %in% names(metadata)) { + metadata <- metadata %>% dplyr::filter(!!sym(domain_name) == domain & !is.na(!!sym(format_name))) } else { - metadata <- metacore + metadata <- metadata } filtered_metadata <- metadata %>% diff --git a/R/label.R b/R/label.R index add71703..63f0cb13 100644 --- a/R/label.R +++ b/R/label.R @@ -3,11 +3,12 @@ #' Assigns variable label from a variable level metadata to a given data frame. #' #' @param .df A data frame of CDISC standard. -#' @param metacore A data frame containing variable level metadata. +#' @param metadata A data frame containing variable level metadata. #' @param domain A character value to subset the `.df`. If `NULL`(default), uses #' `.df` value as a subset condition. #' @param verbose The action the function takes when a variable length isn't #' Found. Options are 'stop', 'warn', 'message', and 'none' +#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` #' #' @return Data frame with label attributes for each variable. #' @family metadata functions @@ -22,15 +23,27 @@ #' SEX = c("M", "F", "M") #' ) #' -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = "adsl", #' variable = c("USUBJID", "SITEID", "AGE", "SEX"), #' label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex") #' ) #' -#' adsl <- xportr_label(adsl, metacore) -xportr_label <- function(.df, metacore, domain = NULL, - verbose = getOption("xportr.label_verbose", "none")) { +#' adsl <- xportr_label(adsl, metadata) +xportr_label <- function( + .df, + metadata, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { + if (!missing(metacore)) { + lifecycle::deprecate_warn( + when = "0.0.3", + what = "xportr_format(metacore = )", + with = "xportr_format(metadata = )" + ) + metadata <- metacore + } domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") variable_label <- getOption("xportr.label") @@ -43,15 +56,15 @@ xportr_label <- function(.df, metacore, domain = NULL, ## End of common section - if (inherits(metacore, "Metacore")) { - metacore <- metacore$var_spec + if (inherits(metadata, "Metacore")) { + metadata <- metadata$var_spec } - if (domain_name %in% names(metacore)) { - metadata <- metacore %>% + if (domain_name %in% names(metadata)) { + metadata <- metadata %>% dplyr::filter(!!sym(domain_name) == domain) } else { - metadata <- metacore + metadata <- metadata } diff --git a/R/length.R b/R/length.R index 89c39a3f..3915da16 100644 --- a/R/length.R +++ b/R/length.R @@ -3,11 +3,12 @@ #' Assigns SAS length from a variable level metadata to a given data frame. #' #' @param .df A data frame of CDISC standard. -#' @param metacore A data frame containing variable level metadata. +#' @param metadata A data frame containing variable level metadata. #' @param domain A character value to subset the `.df`. If `NULL`(default), uses #' `.df` value as a subset condition. #' @param verbose The action the function takes when a length isn't found in #' metadata. Options are 'stop', 'warn', 'message', and 'none' +#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` #' #' @return Data frame with `SASlength` attributes for each variable. #' @family metadata functions @@ -20,15 +21,27 @@ #' BRTHDT = c(1, 1, 2) #' ) #' -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = c("adsl", "adsl"), #' variable = c("USUBJID", "BRTHDT"), #' length = c(10, 8) #' ) #' -#' adsl <- xportr_length(adsl, metacore) -xportr_length <- function(.df, metacore, domain = NULL, - verbose = getOption("xportr.length_verbose", "none")) { +#' adsl <- xportr_length(adsl, metadata) +xportr_length <- function( + .df, + metadata, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { + if (!missing(metacore)) { + lifecycle::deprecate_warn( + when = "0.0.3", + what = "xportr_format(metacore = )", + with = "xportr_format(metadata = )" + ) + metadata <- metacore + } domain_name <- getOption("xportr.domain_name") variable_length <- getOption("xportr.length") variable_name <- getOption("xportr.variable_name") @@ -41,15 +54,15 @@ xportr_length <- function(.df, metacore, domain = NULL, ## End of common section - if (inherits(metacore, "Metacore")) { - metacore <- metacore$var_spec + if (inherits(metadata, "Metacore")) { + metadata <- metadata$var_spec } - if (domain_name %in% names(metacore)) { - metadata <- metacore %>% + if (domain_name %in% names(metadata)) { + metadata <- metadata %>% filter(!!sym(domain_name) == domain) } else { - metadata <- metacore + metadata <- metadata } diff --git a/R/order.R b/R/order.R index 38d50734..926bbae1 100644 --- a/R/order.R +++ b/R/order.R @@ -1,10 +1,11 @@ #' Order variables of a dataset according to Spec #' #' @param .df A data frame of CDISC standard. -#' @param metacore A data frame containing variable level metadata. +#' @param metadata A data frame containing variable level metadata. #' @param domain A character value to subset the `.df`. If `NULL`(default), uses #' `.df` value as a subset condition. #' @param verbose Option for messaging order results +#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` #' #' @export #' @return Dataframe that has been re-ordered according to spec @@ -17,14 +18,27 @@ #' USUBJID = c(1001, 1002, 1003) #' ) #' -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = c("adsl", "adsl", "adsl", "adsl"), #' variable = c("STUDYID", "USUBJID", "TRT01A", "BRTHDT"), #' order = 1:4 #' ) #' -#' adsl <- xportr_order(adsl, metacore) -xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xportr.order_verbose", "none")) { +#' adsl <- xportr_order(adsl, metadata) +xportr_order <- function( + .df, + metadata, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { + if (!missing(metacore)) { + lifecycle::deprecate_warn( + when = "0.0.3", + what = "xportr_format(metacore = )", + with = "xportr_format(metadata = )" + ) + metadata <- metacore + } domain_name <- getOption("xportr.domain_name") order_name <- getOption("xportr.order_name") variable_name <- getOption("xportr.variable_name") @@ -37,15 +51,15 @@ xportr_order <- function(.df, metacore, domain = NULL, verbose = getOption("xpor ## End of common section - if (inherits(metacore, "Metacore")) { - metacore <- metacore$ds_vars + if (inherits(metadata, "Metacore")) { + metadata <- metadata$ds_vars } - if (domain_name %in% names(metacore)) { - metadata <- metacore %>% + if (domain_name %in% names(metadata)) { + metadata <- metadata %>% dplyr::filter(!!sym(domain_name) == domain & !is.na(!!sym(order_name))) } else { - metadata <- metacore %>% + metadata <- metadata %>% dplyr::filter(!is.na(!!sym(order_name))) } diff --git a/R/type.R b/R/type.R index 137166a7..62fc3fce 100644 --- a/R/type.R +++ b/R/type.R @@ -4,20 +4,21 @@ #' columns_meta is a data.frame with names "Variables", "Type" #' #' @param .df An R object with columns that can be coerced -#' @param metacore Either a data.frame that has the names of all possible columns +#' @param metadata Either a data.frame that has the names of all possible columns #' and their types, or a `Metacore` object from the `Metacore` package. Required #' column names are dataset, variables, type #' @param domain Name of the dataset. Ex ADAE/DM. This will be used to subset -#' the metacore object. If none is passed it is assumed to be the name of the +#' the metadata object. If none is passed it is assumed to be the name of the #' dataset passed in `.df`. #' @param verbose The action the function takes when a variable isn't typed #' properly. Options are 'stop', 'warn', 'message', and 'none' +#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` #' #' @return Returns the modified table. #' @export #' #' @examples -#' metacore <- data.frame( +#' metadata <- data.frame( #' dataset = "test", #' variable = c("Subj", "Param", "Val", "NotUsed"), #' type = c("numeric", "character", "numeric", "character") @@ -30,9 +31,21 @@ #' Param = c("param1", "param2", "param3") #' ) #' -#' df2 <- xportr_type(.df, metacore, "test") -xportr_type <- function(.df, metacore, domain = NULL, - verbose = getOption("xportr.type_verbose", "none")) { +#' df2 <- xportr_type(.df, metadata, "test") +xportr_type <- function( + .df, + metadata, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { + if (!missing(metacore)) { + lifecycle::deprecate_warn( + when = "0.0.3", + what = "xportr_format(metacore = )", + with = "xportr_format(metadata = )" + ) + metadata <- metacore + } # Name of the columns for working with metadata domain_name <- getOption("xportr.domain_name") variable_name <- getOption("xportr.variable_name") @@ -50,13 +63,13 @@ xportr_type <- function(.df, metacore, domain = NULL, ## End of common section ## Pull out correct metadata - if ("Metacore" %in% class(metacore)) metacore <- metacore$var_spec + if ("Metacore" %in% class(metadata)) metadata <- metadata$var_spec - if (domain_name %in% names(metacore)) { - metacore <- metacore %>% + if (domain_name %in% names(metadata)) { + metadata <- metadata %>% filter(!!sym(domain_name) == domain) } - metacore <- metacore %>% + metadata <- metadata %>% select(!!sym(variable_name), !!sym(type_name)) # Current class of table variables @@ -65,7 +78,7 @@ xportr_type <- function(.df, metacore, domain = NULL, # Produces a data.frame with Variables, Type.x(Table), and Type.y(metadata) meta_ordered <- left_join( data.frame(variable = names(.df), type = unlist(table_cols_types)), - metacore, + metadata, by = "variable" ) %>% mutate( diff --git a/TEST.R b/TEST.R new file mode 100644 index 00000000..6c45706f --- /dev/null +++ b/TEST.R @@ -0,0 +1,11 @@ +devtools::load_all() + +df <- data.frame(x = 1, y = 2) +df_meta <- data.frame( + dataset = "df", + variable = c("x", "y"), + format = c("date9.", "datetime20.") +) + +# formatted_df <- xportr_format(df, metacore = df_meta) +formatted_df <- xportr_format(df, metacore = df_meta) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 062b2b59..7a38506b 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -198,7 +198,7 @@ test_that("xportr_length: Domain not in character format", { met <- read_excel(system.file("specs", "ADaM_spec.xlsx", package = "xportr"), 3) expect_error( - xportr_length(ADAE, metacore = met, domain = ADAE, verbose = "none") + xportr_length(ADAE, met, domain = ADAE, verbose = "none") ) }) From e43f5635422ac533e1f669ab9bfb17fd94ff90fe Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 23 May 2023 20:30:26 +0530 Subject: [PATCH 144/337] docs: update the document with deprecated badges --- DESCRIPTION | 3 ++- NAMESPACE | 1 + R/df_label.R | 2 +- R/format.R | 2 +- R/label.R | 2 +- R/length.R | 2 +- R/order.R | 2 +- R/type.R | 2 +- R/xportr-package.R | 1 + man/figures/lifecycle-archived.svg | 1 + man/figures/lifecycle-defunct.svg | 1 + man/figures/lifecycle-deprecated.svg | 1 + man/figures/lifecycle-experimental.svg | 1 + man/figures/lifecycle-maturing.svg | 1 + man/figures/lifecycle-questioning.svg | 1 + man/figures/lifecycle-stable.svg | 1 + man/figures/lifecycle-superseded.svg | 1 + man/xportr_df_label.Rd | 10 ++++++---- man/xportr_format.Rd | 13 ++++++++----- man/xportr_label.Rd | 13 ++++++++----- man/xportr_length.Rd | 13 ++++++++----- man/xportr_order.Rd | 13 ++++++++----- man/xportr_type.Rd | 15 +++++++++------ 23 files changed, 65 insertions(+), 37 deletions(-) create mode 100644 man/figures/lifecycle-archived.svg create mode 100644 man/figures/lifecycle-defunct.svg create mode 100644 man/figures/lifecycle-deprecated.svg create mode 100644 man/figures/lifecycle-experimental.svg create mode 100644 man/figures/lifecycle-maturing.svg create mode 100644 man/figures/lifecycle-questioning.svg create mode 100644 man/figures/lifecycle-stable.svg create mode 100644 man/figures/lifecycle-superseded.svg diff --git a/DESCRIPTION b/DESCRIPTION index 2ff4fac8..fae18d11 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -42,7 +42,8 @@ Imports: readr, janitor, tm, - haven (>= 2.5.0) + haven (>= 2.5.0), + lifecycle License: MIT + file LICENSE Encoding: UTF-8 LazyData: true diff --git a/NAMESPACE b/NAMESPACE index cc9e76ff..d0fc0ff8 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -42,6 +42,7 @@ importFrom(glue,glue) importFrom(glue,glue_collapse) importFrom(graphics,stem) importFrom(janitor,make_clean_names) +importFrom(lifecycle,deprecated) importFrom(magrittr,"%>%") importFrom(magrittr,extract2) importFrom(purrr,map) diff --git a/R/df_label.R b/R/df_label.R index 8c978d0b..2e0e7582 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -6,7 +6,7 @@ #' @param metadata A data frame containing dataset level metadata. #' @param domain A character value to subset the `.df`. If `NULL`(default), uses #' `.df` value as a subset condition. -#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` +#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` #' #' @return Data frame with label attributes. #' @family metadata functions diff --git a/R/format.R b/R/format.R index 9e11c20e..b6768165 100644 --- a/R/format.R +++ b/R/format.R @@ -8,7 +8,7 @@ #' `.df` value as a subset condition. #' @param verbose The action the function takes when a variable label isn't. #' found. Options are 'stop', 'warn', 'message', and 'none' -#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` +#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` #' #' @return Data frame with `SASformat` attributes for each variable. #' @family metadata functions diff --git a/R/label.R b/R/label.R index 63f0cb13..88b919aa 100644 --- a/R/label.R +++ b/R/label.R @@ -8,7 +8,7 @@ #' `.df` value as a subset condition. #' @param verbose The action the function takes when a variable length isn't #' Found. Options are 'stop', 'warn', 'message', and 'none' -#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` +#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` #' #' @return Data frame with label attributes for each variable. #' @family metadata functions diff --git a/R/length.R b/R/length.R index 3915da16..315446f4 100644 --- a/R/length.R +++ b/R/length.R @@ -8,7 +8,7 @@ #' `.df` value as a subset condition. #' @param verbose The action the function takes when a length isn't found in #' metadata. Options are 'stop', 'warn', 'message', and 'none' -#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` +#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` #' #' @return Data frame with `SASlength` attributes for each variable. #' @family metadata functions diff --git a/R/order.R b/R/order.R index 926bbae1..8b052e64 100644 --- a/R/order.R +++ b/R/order.R @@ -5,7 +5,7 @@ #' @param domain A character value to subset the `.df`. If `NULL`(default), uses #' `.df` value as a subset condition. #' @param verbose Option for messaging order results -#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` +#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` #' #' @export #' @return Dataframe that has been re-ordered according to spec diff --git a/R/type.R b/R/type.R index 62fc3fce..a174a26e 100644 --- a/R/type.R +++ b/R/type.R @@ -12,7 +12,7 @@ #' dataset passed in `.df`. #' @param verbose The action the function takes when a variable isn't typed #' properly. Options are 'stop', 'warn', 'message', and 'none' -#' @param metacore `r lifecycle::badge("deprecated")` previously used to pass metadata now renamed with `metadata` +#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` #' #' @return Returns the modified table. #' @export diff --git a/R/xportr-package.R b/R/xportr-package.R index 353d54ee..8efbbf5b 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -32,5 +32,6 @@ globalVariables(c( # The following block is used by usethis to automatically manage # roxygen namespace tags. Modify with care! ## usethis namespace: start +#' @importFrom lifecycle deprecated ## usethis namespace: end NULL diff --git a/man/figures/lifecycle-archived.svg b/man/figures/lifecycle-archived.svg new file mode 100644 index 00000000..48f72a6f --- /dev/null +++ b/man/figures/lifecycle-archived.svg @@ -0,0 +1 @@ + lifecyclelifecyclearchivedarchived \ No newline at end of file diff --git a/man/figures/lifecycle-defunct.svg b/man/figures/lifecycle-defunct.svg new file mode 100644 index 00000000..01452e5f --- /dev/null +++ b/man/figures/lifecycle-defunct.svg @@ -0,0 +1 @@ +lifecyclelifecycledefunctdefunct \ No newline at end of file diff --git a/man/figures/lifecycle-deprecated.svg b/man/figures/lifecycle-deprecated.svg new file mode 100644 index 00000000..4baaee01 --- /dev/null +++ b/man/figures/lifecycle-deprecated.svg @@ -0,0 +1 @@ +lifecyclelifecycledeprecateddeprecated \ No newline at end of file diff --git a/man/figures/lifecycle-experimental.svg b/man/figures/lifecycle-experimental.svg new file mode 100644 index 00000000..d1d060e9 --- /dev/null +++ b/man/figures/lifecycle-experimental.svg @@ -0,0 +1 @@ +lifecyclelifecycleexperimentalexperimental \ No newline at end of file diff --git a/man/figures/lifecycle-maturing.svg b/man/figures/lifecycle-maturing.svg new file mode 100644 index 00000000..df713101 --- /dev/null +++ b/man/figures/lifecycle-maturing.svg @@ -0,0 +1 @@ +lifecyclelifecyclematuringmaturing \ No newline at end of file diff --git a/man/figures/lifecycle-questioning.svg b/man/figures/lifecycle-questioning.svg new file mode 100644 index 00000000..08ee0c90 --- /dev/null +++ b/man/figures/lifecycle-questioning.svg @@ -0,0 +1 @@ +lifecyclelifecyclequestioningquestioning \ No newline at end of file diff --git a/man/figures/lifecycle-stable.svg b/man/figures/lifecycle-stable.svg new file mode 100644 index 00000000..e015dc81 --- /dev/null +++ b/man/figures/lifecycle-stable.svg @@ -0,0 +1 @@ +lifecyclelifecyclestablestable \ No newline at end of file diff --git a/man/figures/lifecycle-superseded.svg b/man/figures/lifecycle-superseded.svg new file mode 100644 index 00000000..75f24f55 --- /dev/null +++ b/man/figures/lifecycle-superseded.svg @@ -0,0 +1 @@ + lifecyclelifecyclesupersededsuperseded \ No newline at end of file diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index 86316b64..b08a29b8 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -4,15 +4,17 @@ \alias{xportr_df_label} \title{Assign Dataset Label} \usage{ -xportr_df_label(.df, metacore, domain = NULL) +xportr_df_label(.df, metadata, domain = NULL, metacore = deprecated()) } \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metacore}{A data frame containing dataset level metadata.} +\item{metadata}{A data frame containing dataset level metadata.} \item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses \code{.df} value as a subset condition.} + +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} } \value{ Data frame with label attributes. @@ -28,12 +30,12 @@ adsl <- data.frame( SEX = c("M", "F", "M") ) -metacore <- data.frame( +metadata <- data.frame( dataset = c("adsl", "adae"), label = c("Subject-Level Analysis", "Adverse Events Analysis") ) -adsl <- xportr_df_label(adsl, metacore) +adsl <- xportr_df_label(adsl, metadata) } \seealso{ \code{\link[=xportr_label]{xportr_label()}}, \code{\link[=xportr_format]{xportr_format()}} and \code{\link[=xportr_length]{xportr_length()}} diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index d62d1781..f9dc06be 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -6,21 +6,24 @@ \usage{ xportr_format( .df, - metacore, + metadata, domain = NULL, - verbose = getOption("xportr.format_verbose", "none") + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated() ) } \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metacore}{A data frame containing variable level metadata.} +\item{metadata}{A data frame containing variable level metadata.} \item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses \code{.df} value as a subset condition.} \item{verbose}{The action the function takes when a variable label isn't. found. Options are 'stop', 'warn', 'message', and 'none'} + +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} } \value{ Data frame with \code{SASformat} attributes for each variable. @@ -34,13 +37,13 @@ adsl <- data.frame( BRTHDT = c(1, 1, 2) ) -metacore <- data.frame( +metadata <- data.frame( dataset = c("adsl", "adsl"), variable = c("USUBJID", "BRTHDT"), format = c(NA, "DATE9.") ) -adsl <- xportr_format(adsl, metacore) +adsl <- xportr_format(adsl, metadata) } \seealso{ \code{\link[=xportr_label]{xportr_label()}}, \code{\link[=xportr_df_label]{xportr_df_label()}} and \code{\link[=xportr_length]{xportr_length()}} diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index de39a76d..29043ac6 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -6,21 +6,24 @@ \usage{ xportr_label( .df, - metacore, + metadata, domain = NULL, - verbose = getOption("xportr.label_verbose", "none") + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated() ) } \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metacore}{A data frame containing variable level metadata.} +\item{metadata}{A data frame containing variable level metadata.} \item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses \code{.df} value as a subset condition.} \item{verbose}{The action the function takes when a variable length isn't Found. Options are 'stop', 'warn', 'message', and 'none'} + +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} } \value{ Data frame with label attributes for each variable. @@ -36,13 +39,13 @@ adsl <- data.frame( SEX = c("M", "F", "M") ) -metacore <- data.frame( +metadata <- data.frame( dataset = "adsl", variable = c("USUBJID", "SITEID", "AGE", "SEX"), label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex") ) -adsl <- xportr_label(adsl, metacore) +adsl <- xportr_label(adsl, metadata) } \seealso{ \code{\link[=xportr_df_label]{xportr_df_label()}}, \code{\link[=xportr_format]{xportr_format()}} and \code{\link[=xportr_length]{xportr_length()}} diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index 765c31d3..c210a5cd 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -6,21 +6,24 @@ \usage{ xportr_length( .df, - metacore, + metadata, domain = NULL, - verbose = getOption("xportr.length_verbose", "none") + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated() ) } \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metacore}{A data frame containing variable level metadata.} +\item{metadata}{A data frame containing variable level metadata.} \item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses \code{.df} value as a subset condition.} \item{verbose}{The action the function takes when a length isn't found in metadata. Options are 'stop', 'warn', 'message', and 'none'} + +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} } \value{ Data frame with \code{SASlength} attributes for each variable. @@ -34,13 +37,13 @@ adsl <- data.frame( BRTHDT = c(1, 1, 2) ) -metacore <- data.frame( +metadata <- data.frame( dataset = c("adsl", "adsl"), variable = c("USUBJID", "BRTHDT"), length = c(10, 8) ) -adsl <- xportr_length(adsl, metacore) +adsl <- xportr_length(adsl, metadata) } \seealso{ \code{\link[=xportr_label]{xportr_label()}}, \code{\link[=xportr_df_label]{xportr_df_label()}} and \code{\link[=xportr_format]{xportr_format()}} diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index 236862d6..71b9d2b9 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -6,20 +6,23 @@ \usage{ xportr_order( .df, - metacore, + metadata, domain = NULL, - verbose = getOption("xportr.order_verbose", "none") + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated() ) } \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metacore}{A data frame containing variable level metadata.} +\item{metadata}{A data frame containing variable level metadata.} \item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses \code{.df} value as a subset condition.} \item{verbose}{Option for messaging order results} + +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} } \value{ Dataframe that has been re-ordered according to spec @@ -35,11 +38,11 @@ adsl <- data.frame( USUBJID = c(1001, 1002, 1003) ) -metacore <- data.frame( +metadata <- data.frame( dataset = c("adsl", "adsl", "adsl", "adsl"), variable = c("STUDYID", "USUBJID", "TRT01A", "BRTHDT"), order = 1:4 ) -adsl <- xportr_order(adsl, metacore) +adsl <- xportr_order(adsl, metadata) } diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index 7c82ff13..5b5de96d 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -6,24 +6,27 @@ \usage{ xportr_type( .df, - metacore, + metadata, domain = NULL, - verbose = getOption("xportr.type_verbose", "none") + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated() ) } \arguments{ \item{.df}{An R object with columns that can be coerced} -\item{metacore}{Either a data.frame that has the names of all possible columns +\item{metadata}{Either a data.frame that has the names of all possible columns and their types, or a \code{Metacore} object from the \code{Metacore} package. Required column names are dataset, variables, type} \item{domain}{Name of the dataset. Ex ADAE/DM. This will be used to subset -the metacore object. If none is passed it is assumed to be the name of the +the metadata object. If none is passed it is assumed to be the name of the dataset passed in \code{.df}.} \item{verbose}{The action the function takes when a variable isn't typed properly. Options are 'stop', 'warn', 'message', and 'none'} + +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} } \value{ Returns the modified table. @@ -33,7 +36,7 @@ Current assumptions: columns_meta is a data.frame with names "Variables", "Type" } \examples{ -metacore <- data.frame( +metadata <- data.frame( dataset = "test", variable = c("Subj", "Param", "Val", "NotUsed"), type = c("numeric", "character", "numeric", "character") @@ -46,5 +49,5 @@ metacore <- data.frame( Param = c("param1", "param2", "param3") ) -df2 <- xportr_type(.df, metacore, "test") +df2 <- xportr_type(.df, metadata, "test") } From c60a0db0ff71815bb880f5a06ed64de109342081 Mon Sep 17 00:00:00 2001 From: sadchla-codes Date: Tue, 23 May 2023 11:05:26 -0400 Subject: [PATCH 145/337] Added more non-ASCII symbols --- tests/testthat/test-utils-xportr.R | 4 ++-- tests/testthat/test-write.R | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index da229356..7f96904d 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -95,9 +95,9 @@ test_that("xpt_validate: Get error message when the variable type is invalid", { test_that("xpt_validate: Get error message when the label contains non-ASCII, symbol or special characters", { df <- data.frame(A = 1, B = 2) - attr(df$A, "label") <- "foo¿bar" + attr(df$A, "label") <- "fooçbar" expect_equal( xpt_validate(df), - "Label 'A=foo¿bar' cannot contain any non-ASCII, symbol or special characters." + "Label 'A=fooçbar' cannot contain any non-ASCII, symbol or special characters." ) }) diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index 915aae5c..9b3b2f32 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -53,7 +53,7 @@ test_that("xportr_write: expect error when label contains non-ASCII symbols or s on.exit(unlink(tmpdir)) - expect_error(xportr_write(data_to_save, tmp, label = "")) + expect_error(xportr_write(data_to_save, tmp, label = "çtestç")) }) test_that("xportr_write: expect error when label is over 40 characters", { From 530c77f319d23c689b860d03b8cfedf378ceaf7f Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 23 May 2023 20:41:09 +0530 Subject: [PATCH 146/337] docs: building the pkgdown site --- docs/404.html | 124 +++-- docs/LICENSE-text.html | 94 ++-- docs/LICENSE.html | 96 ++-- docs/articles/index.html | 89 ++-- docs/articles/xportr.html | 480 +++++++++--------- .../datatables-crosstalk.css | 9 + docs/authors.html | 124 ++--- docs/index.html | 173 +++---- docs/news/index.html | 119 +++-- docs/pkgdown.js | 172 ++++--- docs/pkgdown.yml | 9 +- docs/reference/index.html | 264 +++++----- docs/reference/xportr-package.html | 110 ++-- docs/reference/xportr_df_label.html | 163 +++--- docs/reference/xportr_format.html | 174 ++++--- docs/reference/xportr_label.html | 178 ++++--- docs/reference/xportr_length.html | 174 ++++--- docs/reference/xportr_order.html | 165 +++--- docs/reference/xportr_type.html | 180 ++++--- docs/reference/xportr_write.html | 139 ++--- 20 files changed, 1634 insertions(+), 1402 deletions(-) diff --git a/docs/404.html b/docs/404.html index 398e0a4f..b0467f75 100644 --- a/docs/404.html +++ b/docs/404.html @@ -4,110 +4,102 @@ - + Page not found (404) ‱ xportr - - - - - - - - - + + + + + + + + + - - - - + + - + + Skip to contents -

    - diff --git a/docs/LICENSE.html b/docs/LICENSE.html index 11098502..2b15d3f0 100644 --- a/docs/LICENSE.html +++ b/docs/LICENSE.html @@ -1,52 +1,56 @@ -MIT License ‱ xportrMIT License ‱ xportr + + Skip to contents -
    -
    -
    - +
    +
    +
    @@ -57,29 +61,21 @@

    MIT License

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -
    +
    - +
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    + -
    +
    - diff --git a/docs/articles/index.html b/docs/articles/index.html index 352bbcec..9cc4f795 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -1,52 +1,55 @@ -Articles ‱ xportrArticles ‱ xportr + + Skip to contents -
    -
    -
    - +
    +
    +
    @@ -56,23 +59,21 @@

    All vignettes

    Getting Started
    -
    -
    +
    -
    +
    - diff --git a/docs/articles/xportr.html b/docs/articles/xportr.html index 830db069..397fb842 100644 --- a/docs/articles/xportr.html +++ b/docs/articles/xportr.html @@ -4,7 +4,8 @@ - + + Getting Started ‱ xportr @@ -12,81 +13,82 @@ - - - + + + - - + - - + - + + Skip to contents -
    -
    - - - + + + + +
    -
    -

  • -# Loading packages
    -library(dplyr)
    -library(labelled)
    -library(xportr)
    -library(admiral)
    -
    -# Loading in our example data
    -adsl <- admiral::admiral_adsl
    +# Loading packages +library(dplyr) +library(labelled) +library(xportr) +library(admiral) + +# Loading in our example data +adsl <- admiral::admiral_adsl


    -
    -


    +
    +


    NOTE: Dataset can be created by using this command admiral::use_ad_template("adsl").

    @@ -149,19 +151,20 @@

    Preparing your Specification Filesxportr expects the specification sheets.


    -var_spec <- readxl::read_xlsx(
    -  system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), sheet = "Variables") %>%
    -  dplyr::rename(type = "Data Type") %>%
    -  rlang::set_names(tolower) 
    -  
    +var_spec <- readxl::read_xlsx( + system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), + sheet = "Variables" +) %>% + dplyr::rename(type = "Data Type") %>% + rlang::set_names(tolower)


    Below is a quick snapshot of the specification file pertaining to the ADSL data set, which we will make use of in the 6 xportr function calls below. Take note of the order, label, type, length and format columns.


    -
    -


    +
    +


    xportr_type() @@ -200,88 +203,94 @@

    xportr_type() 25 TRT01P Description of Planned Arm chr range: Placebo - Xanomeli~ 26 TRT01A Description of Actual Arm chr range: Placebo - Xanomeli~ 27 TRTSDTM — dttm range: 2012-07-09 - 2014-~ - 28 TRTEDTM — dttm range: 2012-08-28 23:59:5~ - 29 TRTSDT — date range: 2012-07-09 - 2014-~ - 30 TRTEDT — date range: 2012-08-28 - 2015-~ - 31 TRTDURD — dbl range: 1 - 212 - 32 SCRFDT — date range: 2012-08-13 - 2014-~ - 33 EOSDT — date range: 2012-09-01 - 2015-~ - 34 EOSSTT — chr range: COMPLETED - DISCON~ - 35 FRVDT — date range: 2013-02-18 - 2014-~ - 36 DTHDT — date range: 2013-01-14 - 2014-~ - 37 DTHDTF — chr range: - 38 DTHADY — dbl range: 12 - 175 - 39 LDDTHELD — dbl range: 0 - 2 - 40 LSTALVDT — date range: 2012-09-01 - 2015-~ - 41 AGEGR1 — fct <18 - 18-64 - >=65 - 42 SAFFL — chr range: Y - Y - 43 RACEGR1 — chr range: Non-white - White - 44 REGION1 — chr range: NA - NA - 45 LDDTHGR1 — chr range: <= 30 - <= 30 - 46 DTH30FL — chr range: Y - Y - 47 DTHA30FL — chr range: - 48 DTHB30FL — chr range: Y - Y

    + 28 TRTSTMF — chr range: H - H + 29 TRTEDTM — dttm range: 2012-08-28 23:59:5~ + 30 TRTETMF — chr range: H - H + 31 TRTSDT — date range: 2012-07-09 - 2014-~ + 32 TRTEDT — date range: 2012-08-28 - 2015-~ + 33 TRTDURD — dbl range: 1 - 212 + 34 SCRFDT — date range: 2012-08-13 - 2014-~ + 35 EOSDT — date range: 2012-09-01 - 2015-~ + 36 EOSSTT — chr range: COMPLETED - DISCON~ + 37 FRVDT — date range: 2013-02-18 - 2014-~ + 38 RANDDT — date range: 2012-07-09 - 2014-~ + 39 DTHDT — date range: 2013-01-14 - 2014-~ + 40 DTHADY — dbl range: 12 - 175 + 41 LDDTHELD — dbl range: 0 - 2 + 42 LSTALVDT — date range: 2012-09-01 - 2015-~ + 43 AGEGR1 — fct <18 + 18-64 + >=65 + 44 SAFFL — chr range: Y - Y + 45 RACEGR1 — chr range: Non-white - White + 46 REGION1 — chr range: NA - NA + 47 LDDTHGR1 — chr range: <= 30 - <= 30 + 48 DTH30FL — chr range: Y - Y + 49 DTHA30FL — chr range: + 50 DTHB30FL — chr range: Y - Y


    Using xport_type and the supplied specification file, we can coerce the variables in the ADSL set to be either numeric or character.


    -adsl_type <- xportr_type(adsl, var_spec, domain = "ADSL", verbose = "message") 
    +adsl_type <- xportr_type(adsl, var_spec, domain = "ADSL", verbose = "message")


    Now all appropriate types have been applied to the dataset as seen below.

    look_for(adsl_type, details = TRUE)
    -   pos variable label col_type values                                          
    -   1   STUDYID  —     chr      range: CDISCPILOT01 - CDISCPILOT01              
    -   2   USUBJID  —     chr      range: 01-701-1015 - 01-718-1427                
    -   3   SUBJID   —     chr      range: 1001 - 1448                              
    -   4   RFSTDTC  —     chr      range: 2012-07-09 - 2014-09-02                  
    -   5   RFENDTC  —     chr      range: 2012-09-01 - 2015-03-05                  
    -   6   RFXSTDTC —     chr      range: 2012-07-09 - 2014-09-02                  
    -   7   RFXENDTC —     chr      range: 2012-08-28 - 2015-03-05                  
    -   8   RFICDTC  —     chr      range:                                          
    -   9   RFPENDTC —     chr      range: 2012-08-13 - 2015-03-05T14:40            
    -   10  DTHDTC   —     chr      range: 2013-01-14 - 2014-11-01                  
    -   11  DTHFL    —     chr      range: Y - Y                                    
    -   12  SITEID   —     chr      range: 701 - 718                                
    -   13  AGE      —     dbl      range: 50 - 89                                  
    -   14  AGEU     —     chr      range: YEARS - YEARS                            
    -   15  SEX      —     chr      range: F - M                                    
    -   16  RACE     —     chr      range: AMERICAN INDIAN OR ALASKA NATIVE - WHITE 
    -   17  ETHNIC   —     chr      range: HISPANIC OR LATINO - NOT HISPANIC OR LAT~
    -   18  ARMCD    —     chr      range: Pbo - Xan_Lo                             
    -   19  ARM      —     chr      range: Placebo - Xanomeline Low Dose            
    -   20  ACTARMCD —     chr      range: Pbo - Xan_Lo                             
    -   21  ACTARM   —     chr      range: Placebo - Xanomeline Low Dose            
    -   22  COUNTRY  —     chr      range: USA - USA                                
    -   23  DMDTC    —     chr      range: 2012-07-06 - 2014-08-29                  
    -   24  DMDY     —     dbl      range: -37 - -2                                 
    -   25  TRT01P   —     chr      range: Placebo - Xanomeline Low Dose            
    -   26  TRT01A   —     chr      range: Placebo - Xanomeline Low Dose            
    -   27  TRTSDTM  —     dbl      range: 1341792000 - 1409616000                  
    -   28  TRTEDTM  —     dbl      range: 1346198399 - 1425599999                  
    -   29  TRTSDT   —     dbl      range: 15530 - 16315                            
    -   30  TRTEDT   —     dbl      range: 15580 - 16499                            
    -   31  TRTDURD  —     dbl      range: 1 - 212                                  
    -   32  SCRFDT   —     dbl      range: 15565 - 16181                            
    -   33  EOSDT    —     dbl      range: 15584 - 16499                            
    -   34  EOSSTT   —     chr      range: COMPLETED - DISCONTINUED                 
    -   35  FRVDT    —     dbl      range: 15754 - 16389                            
    -   36  DTHDT    —     dbl      range: 15719 - 16375                            
    -   37  DTHDTF   —     chr      range:                                          
    -   38  DTHADY   —     dbl      range: 12 - 175                                 
    -   39  LDDTHELD —     dbl      range: 0 - 2                                    
    -   40  LSTALVDT —     dbl      range: 15584 - 16499                            
    -   41  AGEGR1   —     chr      range: >=65 - 18-64                             
    -   42  SAFFL    —     chr      range: Y - Y                                    
    -   43  RACEGR1  —     chr      range: Non-white - White                        
    -   44  REGION1  —     chr      range: NA - NA                                  
    -   45  LDDTHGR1 —     chr      range: <= 30 - <= 30                            
    -   46  DTH30FL  —     chr      range: Y - Y                                    
    -   47  DTHA30FL —     chr      range:                                          
    -   48  DTHB30FL —     chr      range: Y - Y
    + pos variable label col_type values + 1 STUDYID Study Identifier chr range: CDISCPILOT01 - CDI~ + 2 USUBJID Unique Subject Identifier chr range: 01-701-1015 - 01-7~ + 3 SUBJID Subject Identifier for th~ chr range: 1001 - 1448 + 4 RFSTDTC Subject Reference Start D~ chr range: 2012-07-09 - 2014-~ + 5 RFENDTC Subject Reference End Dat~ chr range: 2012-09-01 - 2015-~ + 6 RFXSTDTC Date/Time of First Study ~ chr range: 2012-07-09 - 2014-~ + 7 RFXENDTC Date/Time of Last Study T~ chr range: 2012-08-28 - 2015-~ + 8 RFICDTC Date/Time of Informed Con~ chr range: + 9 RFPENDTC Date/Time of End of Parti~ chr range: 2012-08-13 - 2015-~ + 10 DTHDTC Date/Time of Death chr range: 2013-01-14 - 2014-~ + 11 DTHFL Subject Death Flag chr range: Y - Y + 12 SITEID Study Site Identifier chr range: 701 - 718 + 13 AGE Age dbl range: 50 - 89 + 14 AGEU Age Units chr range: YEARS - YEARS + 15 SEX Sex chr range: F - M + 16 RACE Race chr range: AMERICAN INDIAN OR~ + 17 ETHNIC Ethnicity chr range: HISPANIC OR LATINO~ + 18 ARMCD Planned Arm Code chr range: Pbo - Xan_Lo + 19 ARM Description of Planned Arm chr range: Placebo - Xanomeli~ + 20 ACTARMCD Actual Arm Code chr range: Pbo - Xan_Lo + 21 ACTARM Description of Actual Arm chr range: Placebo - Xanomeli~ + 22 COUNTRY Country chr range: USA - USA + 23 DMDTC Date/Time of Collection chr range: 2012-07-06 - 2014-~ + 24 DMDY Study Day of Collection dbl range: -37 - -2 + 25 TRT01P Description of Planned Arm chr range: Placebo - Xanomeli~ + 26 TRT01A Description of Actual Arm chr range: Placebo - Xanomeli~ + 27 TRTSDTM — dbl range: 1341792000 - 14096~ + 28 TRTSTMF — chr range: H - H + 29 TRTEDTM — dbl range: 1346198399 - 14255~ + 30 TRTETMF — chr range: H - H + 31 TRTSDT — dbl range: 15530 - 16315 + 32 TRTEDT — dbl range: 15580 - 16499 + 33 TRTDURD — dbl range: 1 - 212 + 34 SCRFDT — dbl range: 15565 - 16181 + 35 EOSDT — dbl range: 15584 - 16499 + 36 EOSSTT — chr range: COMPLETED - DISCON~ + 37 FRVDT — dbl range: 15754 - 16389 + 38 RANDDT — chr range: 2012-07-09 - 2014-~ + 39 DTHDT — dbl range: 15719 - 16375 + 40 DTHADY — dbl range: 12 - 175 + 41 LDDTHELD — dbl range: 0 - 2 + 42 LSTALVDT — dbl range: 15584 - 16499 + 43 AGEGR1 — chr <18 + 18-64 + >=65 + 44 SAFFL — chr range: Y - Y + 45 RACEGR1 — chr range: Non-white - White + 46 REGION1 — chr range: NA - NA + 47 LDDTHGR1 — chr range: <= 30 - <= 30 + 48 DTH30FL — chr range: Y - Y + 49 DTHA30FL — chr range: + 50 DTHB30FL — chr range: Y - Y

    xportr_length() @@ -295,8 +304,8 @@

    xportr_length()


    -str(adsl)
    -
      tibble [306 × 48] (S3: tbl_df/tbl/data.frame)
    +str(adsl)

    +
      tibble [306 × 50] (S3: tbl_df/tbl/data.frame)
        $ STUDYID : chr [1:306] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
         ..- attr(*, "label")= chr "Study Identifier"
        $ USUBJID : chr [1:306] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
    @@ -349,8 +358,10 @@ 

    xportr_length()xportr_length()xportr_length()attr part of each variables. Let’s now use xportr_length to apply our lengths from the specification file.

    -
    -adsl_length <- adsl %>% xportr_length(var_spec, domain = "ADSL", "message")
    +
    adsl_length <- adsl %>% xportr_length(var_spec, domain = "ADSL", "message")
    +  
    +  ── 
[1m
[1mVariable lengths missing from metadata.
[1m
[22m ──
    +  
    +  
[32m✔
[39m 3 lengths resolved
    +  Variable(s) present in dataframe but doesn't exist in `metadata`.Problem with
    +  `TRTSTMF`, `TRTETMF`, and `RANDDT`


    -str(adsl_length)
    -
      tibble [306 × 48] (S3: tbl_df/tbl/data.frame)
    +str(adsl_length)
    +
      tibble [306 × 50] (S3: tbl_df/tbl/data.frame)
        $ STUDYID : chr [1:306] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
         ..- attr(*, "label")= chr "Study Identifier"
         ..- attr(*, "width")= num 21
    @@ -460,8 +476,12 @@ 

    xportr_length()xportr_length()xportr_order()
    -adsl_order <- xportr_order(adsl,var_spec, domain = "ADSL", verbose = "message") 
    -
    - +adsl_order <- xportr_order(adsl, var_spec, domain = "ADSL", verbose = "message")

    +
    +

    xportr_format() @@ -523,17 +542,17 @@

    xportr_format()TRT variables, which have a NULL format.

    -attr(adsl$TRTSDT, "format.sas")
    -  NULL
    -attr(adsl$TRTEDT, "format.sas")
    -  NULL
    -attr(adsl$TRTSDTM, "format.sas")
    -  NULL
    -attr(adsl$TRTEDTM, "format.sas")
    -  NULL
    +attr(adsl$TRTSDT, "format.sas") + NULL +attr(adsl$TRTEDT, "format.sas") + NULL +attr(adsl$TRTSDTM, "format.sas") + NULL +attr(adsl$TRTEDTM, "format.sas") + NULL

    Using our xportr_format() we apply our formats.

    -adsl_fmt <- adsl %>% xportr_format(var_spec, domain = "ADSL", "message")
    +adsl_fmt <- adsl %>% xportr_format(var_spec, domain = "ADSL", "message")
    attr(adsl_fmt$TRTSDT, "format.sas")
       [1] "DATE9."
     attr(adsl_fmt$TRTEDT, "format.sas")
    @@ -580,35 +599,41 @@ 

    xportr_label() 25 TRT01P Description of Planned Arm 26 TRT01A Description of Actual Arm 27 TRTSDTM — - 28 TRTEDTM — - 29 TRTSDT — - 30 TRTEDT — - 31 TRTDURD — - 32 SCRFDT — - 33 EOSDT — - 34 EOSSTT — - 35 FRVDT — - 36 DTHDT — - 37 DTHDTF — - 38 DTHADY — - 39 LDDTHELD — - 40 LSTALVDT — - 41 AGEGR1 — - 42 SAFFL — - 43 RACEGR1 — - 44 REGION1 — - 45 LDDTHGR1 — - 46 DTH30FL — - 47 DTHA30FL — - 48 DTHB30FL —

    + 28 TRTSTMF — + 29 TRTEDTM — + 30 TRTETMF — + 31 TRTSDT — + 32 TRTEDT — + 33 TRTDURD — + 34 SCRFDT — + 35 EOSDT — + 36 EOSSTT — + 37 FRVDT — + 38 RANDDT — + 39 DTHDT — + 40 DTHADY — + 41 LDDTHELD — + 42 LSTALVDT — + 43 AGEGR1 — + 44 SAFFL — + 45 RACEGR1 — + 46 REGION1 — + 47 LDDTHGR1 — + 48 DTH30FL — + 49 DTHA30FL — + 50 DTHB30FL —


    Using the xport_label function we can take the specifications file and label all the variables available. xportr_label will produce a warning message if you the variable in the data set is not in the specification file.


    -
    -adsl_update <- adsl %>% xportr_label(var_spec, domain = "ADSL", "message")
    +
    adsl_update <- adsl %>% xportr_label(var_spec, domain = "ADSL", "message")
    +  ── 
[1m
[1mVariable labels missing from metadata.
[1m
[22m ──
    +  
    +  
[32m✔
[39m 3 labels skipped
    +  Variable(s) present in dataframe but doesn't exist in `metadata`.
    +  
[31m✖
[39m Problem with `TRTSTMF`, `TRTETMF`, and `RANDDT`
    look_for(adsl_update, details = FALSE)
        pos variable label                                  
         1  STUDYID  Study Identifier                       
    @@ -638,27 +663,29 @@ 

    xportr_label() 25 TRT01P Planned Treatment for Period 01 26 TRT01A Actual Treatment for Period 01 27 TRTSDTM Datetime of First Exposure to Treatment - 28 TRTEDTM Datetime of Last Exposure to Treatment - 29 TRTSDT Date of First Exposure to Treatment - 30 TRTEDT Date of Last Exposure to Treatment - 31 TRTDURD Total Duration of Trt (days) - 32 SCRFDT Screen Failure Date - 33 EOSDT End of Study Date - 34 EOSSTT End of Study Status - 35 FRVDT Final Retrievel Visit Date - 36 DTHDT Death Date - 37 DTHDTF Date of Death Imputation Flag - 38 DTHADY Relative Day of Death - 39 LDDTHELD Elapsed Days from Last Dose to Death - 40 LSTALVDT Date Last Known Alive - 41 AGEGR1 Pooled Age Group 1 - 42 SAFFL Safety Population Flag - 43 RACEGR1 Pooled Race Group 1 - 44 REGION1 Geographic Region 1 - 45 LDDTHGR1 Last Does to Death Group - 46 DTH30FL Under 30 Group - 47 DTHA30FL Over 30 Group - 48 DTHB30FL Over 30 plus 30 days Group

    + 28 TRTSTMF + 29 TRTEDTM Datetime of Last Exposure to Treatment + 30 TRTETMF + 31 TRTSDT Date of First Exposure to Treatment + 32 TRTEDT Date of Last Exposure to Treatment + 33 TRTDURD Total Duration of Trt (days) + 34 SCRFDT Screen Failure Date + 35 EOSDT End of Study Date + 36 EOSSTT End of Study Status + 37 FRVDT Final Retrievel Visit Date + 38 RANDDT + 39 DTHDT Death Date + 40 DTHADY Relative Day of Death + 41 LDDTHELD Elapsed Days from Last Dose to Death + 42 LSTALVDT Date Last Known Alive + 43 AGEGR1 Pooled Age Group 1 + 44 SAFFL Safety Population Flag + 45 RACEGR1 Pooled Race Group 1 + 46 REGION1 Geographic Region 1 + 47 LDDTHGR1 Last Does to Death Group + 48 DTH30FL Under 30 Group + 49 DTHA30FL Over 30 Group + 50 DTHB30FL Over 30 plus 30 days Group

    xportr_write() @@ -674,13 +701,13 @@

    xportr_write()
    -adsl %>%
    -  xportr_type(var_spec, "ADSL", "message") %>%
    -  xportr_length(var_spec, "ADSL", "message") %>%
    -  xportr_label(var_spec, "ADSL", "message") %>%
    -  xportr_order(var_spec, "ADSL", "message") %>% 
    -  xportr_format(var_spec, "ADSL", "message") %>% 
    -  xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset")

    +adsl %>% + xportr_type(var_spec, "ADSL", "message") %>% + xportr_length(var_spec, "ADSL", "message") %>% + xportr_label(var_spec, "ADSL", "message") %>% + xportr_order(var_spec, "ADSL", "message") %>% + xportr_format(var_spec, "ADSL", "message") %>% + xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset")

    That’s it! We now have a xpt file created in R with all appropriate types, lengths, labels, ordering and formats from our specification file.

    @@ -689,34 +716,27 @@

    xportr_write()xportr’s Github page.

    - - - - + -
    - diff --git a/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css b/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css index fb5bae84..bd1159c8 100644 --- a/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css +++ b/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css @@ -21,3 +21,12 @@ See https://github.com/DataTables/DataTablesSrc/issues/160 table.dataTable { display: table; } + + +/* +When DTOutput(fill = TRUE), it receives a .html-fill-item class (via htmltools::bindFillRole()), which effectively amounts to `flex: 1 1 auto`. That's mostly fine, but the case where `fillContainer=TRUE`+`height:auto`+`flex-basis:auto` and the container (e.g., a bslib::card()) doesn't have a defined height is a bit problematic since the table wants to fit the parent but the parent wants to fit the table, which results pretty small table height (maybe because there is a minimum height somewhere?). It seems better in this case to impose a 400px height default for the table, which we can do by setting `flex-basis` to 400px (the table is still allowed to grow/shrink when the container has an opinionated height). +*/ + +.html-fill-container > .html-fill-item.datatables { + flex-basis: 400px; +} diff --git a/docs/authors.html b/docs/authors.html index 6680e2f9..a9f22805 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -1,55 +1,59 @@ -Authors and Citation ‱ xportrAuthors and Citation ‱ xportr + + Skip to contents -
    -
    -
    -
    - + +
    +
    +
    +
    +
    +

    Authors

    • Eli Miller. Author, maintainer. @@ -67,50 +71,48 @@

      Authors

      Ross Didenko. Author.

    • +
    • +

      Zelos Zhu. Author. +

      +
    • Atorus/GSK JPT. Copyright holder.

    -
    -
    -

    Citation

    - Source: DESCRIPTION -
    -
    +
    +

    Citation

    +

    Source: DESCRIPTION

    -

    Miller E, Thanikachalam V, Straub B, Didenko R (2022). +

    Miller E, Thanikachalam V, Straub B, Didenko R, Zhu Z (2023). xportr: Utilities to Output CDISC SDTM/ADaM XPT Files. -R package version 0.1.0, https://github.com/atorus-research/xportr. +R package version 0.3.0, https://github.com/atorus-research/xportr.

    -
    @Manual{,
    +      
    @Manual{,
       title = {xportr: Utilities to Output CDISC SDTM/ADaM XPT Files},
    -  author = {Eli Miller and Vignesh  Thanikachalam and Ben Straub and Ross Didenko},
    -  year = {2022},
    -  note = {R package version 0.1.0},
    +  author = {Eli Miller and Vignesh  Thanikachalam and Ben Straub and Ross Didenko and Zelos Zhu},
    +  year = {2023},
    +  note = {R package version 0.3.0},
       url = {https://github.com/atorus-research/xportr},
     }
    - -
    - -
    - +
    +
    -
    +
    - diff --git a/docs/index.html b/docs/index.html index 68476df5..eb3a8d88 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,7 +4,8 @@ - + + Utilities to Output CDISC SDTM/ADaM XPT Files ‱ xportr @@ -12,74 +13,74 @@ - - - + + + - - + - - + - + + Skip to contents -
    -
    -
    - -
    -

    Welcome to xportr! We have designed xportr to help get your xpt files ready for transport either to a clinical data set validator application or to a regulatory agency. This package has the functionality to associate metadata information to a local R data frame, perform data set level validation checks and convert into a transport v5 file(xpt).

    @@ -87,18 +88,14 @@

    Installation

    -
    -

    Development version: -

    +

    This package is available from CRAN and can be installed by running:

    -devtools::install_github("https://github.com/atorus-research/xportr.git", ref = "main")
    -
    +install.packages("xportr")
    -

    CRAN +

    Development version:

    -
      -
    • As this is an experimental package and under development we have not made it available on CRAN.
    • -
    +
    +devtools::install_github("https://github.com/atorus-research/xportr.git", ref = "devel")
    @@ -148,29 +145,29 @@

    Simple Example

    All of which can be done using a well-defined specification file and the xportr package!

    First we will start with our ADSL dataset created in R. This example ADSL dataset is taken from the {admiral} package. The script that generates this ADSL dataset can be created by using this command admiral::use_ad_template("adsl"). This ADSL dataset has 306 observations and 48 variables.

    - -

    We have created a dummy specification file called ADaM_admiral_spec.xlsx found in the specs folder of this package. You can use system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr") to access this file.

    -spec_path <- system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr")
    -
    -var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>%
    -  dplyr::rename(type = "Data Type") %>%
    -  rlang::set_names(tolower)
    -

    Each xportr_ function has been written in a way to take in a part of the specification file and apply that piece to the dataset.

    +library(dplyr) +library(admiral) +library(xportr) + +adsl <- admiral::admiral_adsl

    +

    We have created a dummy specification file called ADaM_admiral_spec.xlsx found in the specs folder of this package. You can use system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr") to access this file.

    -adsl %>% 
    -  xportr_type(var_spec, "ADSL") %>%
    -  xportr_length(var_spec, "ADSL") %>%
    -  xportr_label(var_spec, "ADSL") %>%
    -  xportr_order(var_spec, "ADSL") %>% 
    -  xportr_format(var_spec, "ADSL") %>% 
    -  xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset")
    -

    That’s it! We now have a xpt file created in R with all appropriate types, lengths, labels, ordering and formats. Please check out the Get Started for more information and detailed walk through of each xportr_ function.

    +spec_path <- system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr") + +var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>% + dplyr::rename(type = "Data Type") %>% + rlang::set_names(tolower)
    +

    Each xportr_ function has been written in a way to take in a part of the specification file and apply that piece to the dataset.

    +
    +adsl %>% 
    +  xportr_type(var_spec, "ADSL") %>%
    +  xportr_length(var_spec, "ADSL") %>%
    +  xportr_label(var_spec, "ADSL") %>%
    +  xportr_order(var_spec, "ADSL") %>% 
    +  xportr_format(var_spec, "ADSL") %>% 
    +  xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset")
    +

    That’s it! We now have a xpt file created in R with all appropriate types, lengths, labels, ordering and formats. Please check out the Get Started for more information and detailed walk through of each xportr_ function.

    We are in talks with other Pharma companies involved with the {pharmaverse} to enhance this package to play well with other downstream and upstream packages.

    @@ -181,12 +178,10 @@

    ReferencesGSK and Atorus.

    - - - + -
    - diff --git a/docs/news/index.html b/docs/news/index.html index 689f43ec..20baebb8 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -1,90 +1,107 @@ -Changelog ‱ xportrChangelog ‱ xportr + + Skip to contents -
    -
    -
    - +
    +
    +
    - +

    xportr 0.3.0

    +
    +

    New Features and Bug Fixes

    +
    • Fixed an issue where xportr_type would overwrite column labels, widths, and “sas.formats”
    • +
    • Fixed messaging of xportr_orderto give better visability of the number of variables being reordered.
    • +
    • Add new argument to xportr_write to allow users to specify how xpt validation checks are handled.
    • +
    • Fixed bug where character_types were case sensitive. They are now case insensitive.
    • +
    • Updated xportr_type to make type coercion more explicit.
    • +
    +
    +

    Documentation

    +
    • Moved pkgdown site to bootswatch. Enabled search and linked slack icon (#122).
    • +
    +
    +
    +

    xportr 0.2.0

    CRAN release: 2023-02-23

    +
    • Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101!
    • +
    • Fixed an issue where xportr_format could pass invalid formats to haven::write_xpt.
    • +
    +
    +

    xportr 0.1.0

    CRAN release: 2022-06-21

    Beta release for xportr

    • Added exported functions xportr_varnames and xportr_tidy_rename into dev folder found on GitHub Repostiory. Intention to move into packages after CRAN release.
    • Fixed xportr_format() bug
    • Using admiral ADSL dataset in examples
    - +

    xportr 0.0.0.9000

    Initial alpha release of xportr

    • Development of 5 core functions
    • Package down site and documentation created
    -
    +
    - +
    - -
    +
    - diff --git a/docs/pkgdown.js b/docs/pkgdown.js index 6f0eee40..5fccd9c0 100644 --- a/docs/pkgdown.js +++ b/docs/pkgdown.js @@ -2,70 +2,30 @@ (function($) { $(function() { - $('.navbar-fixed-top').headroom(); + $('nav.navbar').headroom(); - $('body').css('padding-top', $('.navbar').height() + 10); - $(window).resize(function(){ - $('body').css('padding-top', $('.navbar').height() + 10); + Toc.init({ + $nav: $("#toc"), + $scope: $("main h2, main h3, main h4, main h5, main h6") }); - $('[data-toggle="tooltip"]').tooltip(); - - var cur_path = paths(location.pathname); - var links = $("#navbar ul li a"); - var max_length = -1; - var pos = -1; - for (var i = 0; i < links.length; i++) { - if (links[i].getAttribute("href") === "#") - continue; - // Ignore external links - if (links[i].host !== location.host) - continue; - - var nav_path = paths(links[i].pathname); - - var length = prefix_length(nav_path, cur_path); - if (length > max_length) { - max_length = length; - pos = i; - } - } - - // Add class to parent
  • , and enclosing
  • if in dropdown - if (pos >= 0) { - var menu_anchor = $(links[pos]); - menu_anchor.parent().addClass("active"); - menu_anchor.closest("li.dropdown").addClass("active"); - } - }); - - function paths(pathname) { - var pieces = pathname.split("/"); - pieces.shift(); // always starts with / - - var end = pieces[pieces.length - 1]; - if (end === "index.html" || end === "") - pieces.pop(); - return(pieces); - } - - // Returns -1 if not found - function prefix_length(needle, haystack) { - if (needle.length > haystack.length) - return(-1); - - // Special case for length-0 haystack, since for loop won't run - if (haystack.length === 0) { - return(needle.length === 0 ? 0 : -1); + if ($('#toc').length) { + $('body').scrollspy({ + target: '#toc', + offset: $("nav.navbar").outerHeight() + 1 + }); } - for (var i = 0; i < haystack.length; i++) { - if (needle[i] != haystack[i]) - return(i); - } + // Activate popovers + $('[data-bs-toggle="popover"]').popover({ + container: 'body', + html: true, + trigger: 'focus', + placement: "top", + sanitize: false, + }); - return(haystack.length); - } + $('[data-bs-toggle="tooltip"]').tooltip(); /* Clipboard --------------------------*/ @@ -78,7 +38,7 @@ if(ClipboardJS.isSupported()) { $(document).ready(function() { - var copyButton = ""; + var copyButton = ""; $("div.sourceCode").addClass("hasCopyButton"); @@ -89,20 +49,108 @@ $('.btn-copy-ex').tooltip({container: 'body'}); // Initialize clipboard: - var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { + var clipboard = new ClipboardJS('[data-clipboard-copy]', { text: function(trigger) { return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); } }); - clipboardBtnCopies.on('success', function(e) { + clipboard.on('success', function(e) { changeTooltipMessage(e.trigger, 'Copied!'); e.clearSelection(); }); - clipboardBtnCopies.on('error', function() { + clipboard.on('error', function() { changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); }); + }); } + + /* Search marking --------------------------*/ + var url = new URL(window.location.href); + var toMark = url.searchParams.get("q"); + var mark = new Mark("main#main"); + if (toMark) { + mark.mark(toMark, { + accuracy: { + value: "complementary", + limiters: [",", ".", ":", "/"], + } + }); + } + + /* Search --------------------------*/ + /* Adapted from https://github.com/rstudio/bookdown/blob/2d692ba4b61f1e466c92e78fd712b0ab08c11d31/inst/resources/bs4_book/bs4_book.js#L25 */ + // Initialise search index on focus + var fuse; + $("#search-input").focus(async function(e) { + if (fuse) { + return; + } + + $(e.target).addClass("loading"); + var response = await fetch($("#search-input").data("search-index")); + var data = await response.json(); + + var options = { + keys: ["what", "text", "code"], + ignoreLocation: true, + threshold: 0.1, + includeMatches: true, + includeScore: true, + }; + fuse = new Fuse(data, options); + + $(e.target).removeClass("loading"); + }); + + // Use algolia autocomplete + var options = { + autoselect: true, + debug: true, + hint: false, + minLength: 2, + }; + var q; +async function searchFuse(query, callback) { + await fuse; + + var items; + if (!fuse) { + items = []; + } else { + q = query; + var results = fuse.search(query, { limit: 20 }); + items = results + .filter((x) => x.score <= 0.75) + .map((x) => x.item); + if (items.length === 0) { + items = [{dir:"Sorry 😿",previous_headings:"",title:"No results found.",what:"No results found.",path:window.location.href}]; + } + } + callback(items); +} + $("#search-input").autocomplete(options, [ + { + name: "content", + source: searchFuse, + templates: { + suggestion: (s) => { + if (s.title == s.what) { + return `${s.dir} >
    ${s.title}
    `; + } else if (s.previous_headings == "") { + return `${s.dir} >
    ${s.title}
    > ${s.what}`; + } else { + return `${s.dir} >
    ${s.title}
    > ${s.previous_headings} > ${s.what}`; + } + }, + }, + }, + ]).on('autocomplete:selected', function(event, s) { + window.location.href = s.path + "?q=" + q + "#" + s.id; + }); + }); })(window.jQuery || window.$) + + diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index d38c0354..9d3e96c5 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -1,7 +1,10 @@ -pandoc: 2.17.1.1 -pkgdown: 2.0.3 +pandoc: 2.19.2 +pkgdown: 2.0.7 pkgdown_sha: ~ articles: xportr: xportr.html -last_built: 2022-06-17T13:28Z +last_built: 2023-05-23T15:10Z +urls: + reference: https://atorus-research.github.io/xportr/reference + article: https://atorus-research.github.io/xportr/articles diff --git a/docs/reference/index.html b/docs/reference/index.html index e0ff536b..47453e92 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -1,143 +1,177 @@ -Function reference ‱ xportrFunction reference ‱ xportr + + Skip to contents -
    -
    +
    +
    +
    + +
    +

    The six core xportr functions

    + -
    -
    - + +
    + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    The six core xportr functions

    -

    -
    -

    xportr_type()

    -

    Coerce variable type

    -

    xportr_length()

    -

    Assign SAS Length

    -

    xportr_label()

    -

    Assign Variable Label

    -

    xportr_write()

    -

    Write xpt v5 transport file

    -

    xportr_format()

    -

    Assign SAS Format

    -

    xportr_order()

    -

    Order variables of a dataset according to Spec

    -

    xportr helper functions

    -

    -
    -

    label_log()

    -

    Utility for Variable Labels

    -

    length_log()

    -

    Utility for Lengths

    -

    type_log()

    -

    Utility for Types

    -

    var_names_log()

    -

    Utility for Renaming Variables

    -

    var_ord_msg()

    -

    Utility for Ordering

    -

    xportr_logger()

    -

    Utility Logging Function

    -

    xportr_df_label()

    -

    Assign Dataset Label

    -

    xportr

    -

    -
    -

    xportr-package

    -

    The xportr package

    - - -
    +
    + + xportr_type() +
    +
    Coerce variable type
    +
    + + xportr_length() +
    +
    Assign SAS Length
    +
    + + xportr_label() +
    +
    Assign Variable Label
    +
    + + xportr_write() +
    +
    Write xpt v5 transport file
    +
    + + xportr_format() +
    +
    Assign SAS Format
    +
    + + xportr_order() +
    +
    Order variables of a dataset according to Spec
    +
    +

    xportr helper functions

    + + + + +
    + + + + +
    + + label_log() +
    +
    Utility for Variable Labels
    +
    + + length_log() +
    +
    Utility for Lengths
    +
    + + type_log() +
    +
    Utility for Types
    +
    + + var_names_log() +
    +
    Utility for Renaming Variables
    +
    + + var_ord_msg() +
    +
    Utility for Ordering
    +
    + + xportr_logger() +
    +
    Utility Logging Function
    +
    + + xportr_df_label() +
    +
    Assign Dataset Label
    +
    +

    xportr

    + + + +
    + + + + +
    + + xportr xportr-package +
    +
    The xportr package
    +
    +
  • -
    +
    - diff --git a/docs/reference/xportr-package.html b/docs/reference/xportr-package.html index 171d8460..0c0027cc 100644 --- a/docs/reference/xportr-package.html +++ b/docs/reference/xportr-package.html @@ -1,96 +1,96 @@ -The xportr package — xportr-package ‱ xportrThe xportr package — xportr-package ‱ xportr + + Skip to contents -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Package Info here

    -
    -

    See also

    + -
    -

    Author

    +
    +

    Author

    Maintainer: Eli Miller Eli.Miller@AtorusResearch.com (ORCID)

    Authors:

    Other contributors:

    • Atorus/GSK JPT [copyright holder]

    -
    - -
    +
    -
    +
    - diff --git a/docs/reference/xportr_df_label.html b/docs/reference/xportr_df_label.html index 452540a9..c29f6d68 100644 --- a/docs/reference/xportr_df_label.html +++ b/docs/reference/xportr_df_label.html @@ -1,80 +1,95 @@ -Assign Dataset Label — xportr_df_label ‱ xportrAssign Dataset Label — xportr_df_label ‱ xportr + + Skip to contents -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Assigns dataset label from a dataset level metadata to a given data frame.

    -
    -
    xportr_df_label(.df, metacore, domain = NULL)
    +
    +

    Usage

    +
    xportr_df_label(.df, metadata, domain = NULL, metacore = deprecated())
    -
    -

    Arguments

    +
    +

    Arguments

    .df

    A data frame of CDISC standard.

    -
    metacore
    + + +
    metadata

    A data frame containing dataset level metadata.

    + +
    domain

    A character value to subset the .df. If NULL(default), uses .df value as a subset condition.

    + + +
    metacore
    +

    [Deprecated] previously used to pass metadata now renamed with metadata

    +
    -
    -

    Value

    -

    Data frame with label attributes.

    +
    +

    Value

    + + +

    Data frame with label attributes.

    -
    -

    See also

    +
    +

    See also

    xportr_label(), xportr_format() and xportr_length()

    Other metadata functions: xportr_format(), @@ -82,43 +97,39 @@

    See also

    xportr_length()

    -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  SITEID = c(001, 002, 003),
    -  AGE = c(63, 35, 27),
    -  SEX = c("M", "F", "M")
    -)
    -
    -metacore <- data.frame(
    -  dataset = c("adsl", "adae"),
    -  label = c("Subject-Level Analysis", "Adverse Events Analysis")
    -)
    -
    -adsl <- xportr_df_label(adsl, metacore)
    +    
    +

    Examples

    +
    adsl <- data.frame(
    +  USUBJID = c(1001, 1002, 1003),
    +  SITEID = c(001, 002, 003),
    +  AGE = c(63, 35, 27),
    +  SEX = c("M", "F", "M")
    +)
    +
    +metadata <- data.frame(
    +  dataset = c("adsl", "adae"),
    +  label = c("Subject-Level Analysis", "Adverse Events Analysis")
    +)
    +
    +adsl <- xportr_df_label(adsl, metadata)
     
    -
    - -
    +
    -
    +
    - diff --git a/docs/reference/xportr_format.html b/docs/reference/xportr_format.html index 9b582f78..124af224 100644 --- a/docs/reference/xportr_format.html +++ b/docs/reference/xportr_format.html @@ -1,88 +1,106 @@ -Assign SAS Format — xportr_format ‱ xportrAssign SAS Format — xportr_format ‱ xportr + + Skip to contents -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Assigns a SAS format from a variable level metadata to a given data frame.

    -
    -
    xportr_format(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.format_verbose", "none")
    -)
    +
    +

    Usage

    +
    xportr_format(
    +  .df,
    +  metadata,
    +  domain = NULL,
    +  verbose = getOption("xportr.length_verbose", "none"),
    +  metacore = deprecated()
    +)
    -
    -

    Arguments

    +
    +

    Arguments

    .df

    A data frame of CDISC standard.

    -
    metacore
    + + +
    metadata

    A data frame containing variable level metadata.

    + +
    domain

    A character value to subset the .df. If NULL(default), uses .df value as a subset condition.

    + +
    verbose

    The action the function takes when a variable label isn't. found. Options are 'stop', 'warn', 'message', and 'none'

    + + +
    metacore
    +

    [Deprecated] previously used to pass metadata now renamed with metadata

    +
    -
    -

    Value

    -

    Data frame with SASformat attributes for each variable.

    +
    +

    Value

    + + +

    Data frame with SASformat attributes for each variable.

    -
    -

    See also

    +
    +

    See also

    xportr_label(), xportr_df_label() and xportr_length()

    Other metadata functions: xportr_df_label(), @@ -90,42 +108,38 @@

    See also

    xportr_length()

    -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  BRTHDT = c(1, 1, 2)
    -)
    -
    -metacore <- data.frame(
    -  dataset = c("adsl", "adsl"),
    -  variable = c("USUBJID", "BRTHDT"),
    -  format = c(NA, "DATE9.")
    -)
    -
    -adsl <- xportr_format(adsl, metacore)
    +    
    +

    Examples

    +
    adsl <- data.frame(
    +  USUBJID = c(1001, 1002, 1003),
    +  BRTHDT = c(1, 1, 2)
    +)
    +
    +metadata <- data.frame(
    +  dataset = c("adsl", "adsl"),
    +  variable = c("USUBJID", "BRTHDT"),
    +  format = c(NA, "DATE9.")
    +)
    +
    +adsl <- xportr_format(adsl, metadata)
     
    -
    - -
    +
    -
    +
    - diff --git a/docs/reference/xportr_label.html b/docs/reference/xportr_label.html index 9d3787e2..d7ac859d 100644 --- a/docs/reference/xportr_label.html +++ b/docs/reference/xportr_label.html @@ -1,88 +1,106 @@ -Assign Variable Label — xportr_label ‱ xportrAssign Variable Label — xportr_label ‱ xportr + + Skip to contents -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Assigns variable label from a variable level metadata to a given data frame.

    -
    -
    xportr_label(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.label_verbose", "none")
    -)
    +
    +

    Usage

    +
    xportr_label(
    +  .df,
    +  metadata,
    +  domain = NULL,
    +  verbose = getOption("xportr.length_verbose", "none"),
    +  metacore = deprecated()
    +)
    -
    -

    Arguments

    +
    +

    Arguments

    .df

    A data frame of CDISC standard.

    -
    metacore
    + + +
    metadata

    A data frame containing variable level metadata.

    + +
    domain

    A character value to subset the .df. If NULL(default), uses .df value as a subset condition.

    + +
    verbose

    The action the function takes when a variable length isn't Found. Options are 'stop', 'warn', 'message', and 'none'

    + + +
    metacore
    +

    [Deprecated] previously used to pass metadata now renamed with metadata

    +
    -
    -

    Value

    -

    Data frame with label attributes for each variable.

    +
    +

    Value

    + + +

    Data frame with label attributes for each variable.

    -
    -

    See also

    +
    +

    See also

    xportr_df_label(), xportr_format() and xportr_length()

    Other metadata functions: xportr_df_label(), @@ -90,44 +108,40 @@

    See also

    xportr_length()

    -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  SITEID = c(001, 002, 003),
    -  AGE = c(63, 35, 27),
    -  SEX = c("M", "F", "M")
    -)
    -
    -metacore <- data.frame(
    -  dataset = "adsl",
    -  variable = c("USUBJID", "SITEID", "AGE", "SEX"),
    -  label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex")
    -)
    -
    -adsl <- xportr_label(adsl, metacore)
    +    
    +

    Examples

    +
    adsl <- data.frame(
    +  USUBJID = c(1001, 1002, 1003),
    +  SITEID = c(001, 002, 003),
    +  AGE = c(63, 35, 27),
    +  SEX = c("M", "F", "M")
    +)
    +
    +metadata <- data.frame(
    +  dataset = "adsl",
    +  variable = c("USUBJID", "SITEID", "AGE", "SEX"),
    +  label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex")
    +)
    +
    +adsl <- xportr_label(adsl, metadata)
     
    -
    - -
    +
    -
    +
    - diff --git a/docs/reference/xportr_length.html b/docs/reference/xportr_length.html index 51a2aba4..161fa674 100644 --- a/docs/reference/xportr_length.html +++ b/docs/reference/xportr_length.html @@ -1,88 +1,106 @@ -Assign SAS Length — xportr_length ‱ xportrAssign SAS Length — xportr_length ‱ xportr + + Skip to contents -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Assigns SAS length from a variable level metadata to a given data frame.

    -
    -
    xportr_length(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.length_verbose", "none")
    -)
    +
    +

    Usage

    +
    xportr_length(
    +  .df,
    +  metadata,
    +  domain = NULL,
    +  verbose = getOption("xportr.length_verbose", "none"),
    +  metacore = deprecated()
    +)
    -
    -

    Arguments

    +
    +

    Arguments

    .df

    A data frame of CDISC standard.

    -
    metacore
    + + +
    metadata

    A data frame containing variable level metadata.

    + +
    domain

    A character value to subset the .df. If NULL(default), uses .df value as a subset condition.

    + +
    verbose

    The action the function takes when a length isn't found in metadata. Options are 'stop', 'warn', 'message', and 'none'

    + + +
    metacore
    +

    [Deprecated] previously used to pass metadata now renamed with metadata

    +
    -
    -

    Value

    -

    Data frame with SASlength attributes for each variable.

    +
    +

    Value

    + + +

    Data frame with SASlength attributes for each variable.

    -
    -

    See also

    +
    +

    See also

    xportr_label(), xportr_df_label() and xportr_format()

    Other metadata functions: xportr_df_label(), @@ -90,42 +108,38 @@

    See also

    xportr_label()

    -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  BRTHDT = c(1, 1, 2)
    -)
    -
    -metacore <- data.frame(
    -  dataset = c("adsl", "adsl"),
    -  variable = c("USUBJID", "BRTHDT"),
    -  length = c(10, 8)
    -)
    -
    -adsl <- xportr_length(adsl, metacore)
    +    
    +

    Examples

    +
    adsl <- data.frame(
    +  USUBJID = c(1001, 1002, 1003),
    +  BRTHDT = c(1, 1, 2)
    +)
    +
    +metadata <- data.frame(
    +  dataset = c("adsl", "adsl"),
    +  variable = c("USUBJID", "BRTHDT"),
    +  length = c(10, 8)
    +)
    +
    +adsl <- xportr_length(adsl, metadata)
     
    -
    - -
    +
    -
    +
    - diff --git a/docs/reference/xportr_order.html b/docs/reference/xportr_order.html index 5a75a97a..5d88f2e0 100644 --- a/docs/reference/xportr_order.html +++ b/docs/reference/xportr_order.html @@ -1,106 +1,143 @@ -Order variables of a dataset according to Spec — xportr_order ‱ xportrOrder variables of a dataset according to Spec — xportr_order ‱ xportr + + Skip to contents -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Order variables of a dataset according to Spec

    -
    -
    xportr_order(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.order_verbose", "none")
    -)
    +
    +

    Usage

    +
    xportr_order(
    +  .df,
    +  metadata,
    +  domain = NULL,
    +  verbose = getOption("xportr.length_verbose", "none"),
    +  metacore = deprecated()
    +)
    -
    -

    Arguments

    +
    +

    Arguments

    .df

    A data frame of CDISC standard.

    -
    metacore
    + + +
    metadata

    A data frame containing variable level metadata.

    + +
    domain

    A character value to subset the .df. If NULL(default), uses .df value as a subset condition.

    + +
    verbose

    Option for messaging order results

    + + +
    metacore
    +

    [Deprecated] previously used to pass metadata now renamed with metadata

    +
    -
    -

    Value

    -

    Dataframe that has been re-ordered according to spec

    +
    +

    Value

    + + +

    Dataframe that has been re-ordered according to spec

    -
    - -
    +
    +

    Examples

    +
    adsl <- data.frame(
    +  BRTHDT = c(1, 1, 2),
    +  STUDYID = c("mid987650", "mid987650", "mid987650"),
    +  TRT01A = c("Active", "Active", "Placebo"),
    +  USUBJID = c(1001, 1002, 1003)
    +)
    +
    +metadata <- data.frame(
    +  dataset = c("adsl", "adsl", "adsl", "adsl"),
    +  variable = c("STUDYID", "USUBJID", "TRT01A", "BRTHDT"),
    +  order = 1:4
    +)
    +
    +adsl <- xportr_order(adsl, metadata)
    +#> 
    +#> ── All variables in specification file are in dataset ──
    +#> 
    +#> ── 3 reordered in dataset ──
    +#> 
    +
    +
    +
    -
    +
    - diff --git a/docs/reference/xportr_type.html b/docs/reference/xportr_type.html index 0166b8cb..5aa38298 100644 --- a/docs/reference/xportr_type.html +++ b/docs/reference/xportr_type.html @@ -1,134 +1,148 @@ -Coerce variable type — xportr_type ‱ xportrCoerce variable type — xportr_type ‱ xportr + + Skip to contents -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Current assumptions: columns_meta is a data.frame with names "Variables", "Type"

    -
    -
    xportr_type(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.type_verbose", "none")
    -)
    +
    +

    Usage

    +
    xportr_type(
    +  .df,
    +  metadata,
    +  domain = NULL,
    +  verbose = getOption("xportr.length_verbose", "none"),
    +  metacore = deprecated()
    +)
    -
    -

    Arguments

    +
    +

    Arguments

    .df

    An R object with columns that can be coerced

    -
    metacore
    + + +
    metadata

    Either a data.frame that has the names of all possible columns and their types, or a Metacore object from the Metacore package. Required column names are dataset, variables, type

    + +
    domain

    Name of the dataset. Ex ADAE/DM. This will be used to subset -the metacore object. If none is passed it is assumed to be the name of the +the metadata object. If none is passed it is assumed to be the name of the dataset passed in .df.

    + +
    verbose

    The action the function takes when a variable isn't typed properly. Options are 'stop', 'warn', 'message', and 'none'

    + + +
    metacore
    +

    [Deprecated] previously used to pass metadata now renamed with metadata

    +
    -
    -

    Value

    -

    Returns the modified table.

    +
    +

    Value

    + + +

    Returns the modified table.

    -
    -

    Examples

    -
    metacore <- data.frame(
    -  dataset = "test",
    -  variable = c("Subj", "Param", "Val", "NotUsed"),
    -  type = c("numeric", "character", "numeric", "character")
    -)
    -
    -.df <- data.frame(
    - Subj = as.character(123, 456, 789),
    - Different = c("a", "b", "c"),
    - Val = c("1", "2", "3"),
    - Param = c("param1", "param2", "param3")
    -)
    -
    -df2 <- xportr_type(.df, metacore, "test")
    -#> 
    +    
    +

    Examples

    +
    metadata <- data.frame(
    +  dataset = "test",
    +  variable = c("Subj", "Param", "Val", "NotUsed"),
    +  type = c("numeric", "character", "numeric", "character")
    +)
    +
    +.df <- data.frame(
    +  Subj = as.character(123, 456, 789),
    +  Different = c("a", "b", "c"),
    +  Val = c("1", "2", "3"),
    +  Param = c("param1", "param2", "param3")
    +)
    +
    +df2 <- xportr_type(.df, metadata, "test")
     #> ── Variable type mismatches found. ──
     #> 
     #> ✔ 2 variables coerced
     
    -
    - -
    +
    -
    +
    - diff --git a/docs/reference/xportr_write.html b/docs/reference/xportr_write.html index 28348a6f..31ac92e3 100644 --- a/docs/reference/xportr_write.html +++ b/docs/reference/xportr_write.html @@ -1,84 +1,103 @@ -Write xpt v5 transport file — xportr_write ‱ xportr + + Skip to contents -
    -
    -
    - + + +
    +
    +
    +
    -
    +

    Writes a local data frame into SAS transport file of version 5. The SAS transport format is an open format, as is required for submission of the data to the FDA.

    -
    -
    xportr_write(.df, path, label = NULL)
    +
    +

    Usage

    +
    xportr_write(.df, path, label = NULL, strict_checks = FALSE)
    -
    -

    Arguments

    +
    +

    Arguments

    .df

    A data frame to write.

    + +
    path

    Path where transport file will be written. File name sans will be used as xpt name.

    + +
    label
    -

    Dataset label. It must be<=40 characters.

    +

    Dataset label. It must be <=40 characters.

    + + +
    strict_checks
    +

    If TRUE, xpt validation will report errors and not +write out the dataset. If FALSE, xpt validation will report warnings and continue +with writing out the dataset. Defaults to FALSE

    +
    -
    -

    Value

    -

    A data frame. xportr_write() returns the input data invisibly.

    +
    +

    Value

    + + +

    A data frame. xportr_write() returns the input data invisibly.

    -
    -

    Details

    +
    +

    Details

    • Variable and dataset labels are stored in the "label" attribute.

    • SAS length are stored in the "SASlength" attribute.

    • @@ -86,26 +105,22 @@

      Details

    • SAS type are stored in the "SAStype" attribute.

    -
    - -
    +
    -
    +
    - From aca1014700b5e647c0044a69be4d866a68d99729 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 15:16:23 +0000 Subject: [PATCH 147/337] Don't run metadata example on GHA --- R/metadata.R | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/R/metadata.R b/R/metadata.R index e64fdbac..a560b190 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -30,10 +30,14 @@ #' Param = c("param1", "param2", "param3") #' ) #' -#' adlb %>% -#' xportr_metadata(metadata, "test") %>% -#' xportr_type() %>% -#' xportr_order() +#' xportr_metadata(metadata, "test") +#' +#' \dontrun{ +#' adlb %>% +#' xportr_metadata(metadata, "test") %>% +#' xportr_type() %>% +#' xportr_order() +#' } xportr_metadata <- function(.df, metadata, domain = NULL) { ## Common section to detect domain from argument or pipes From 1d5fc953ca662dca6d44e42654600938e743f7b1 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 23 May 2023 20:47:29 +0530 Subject: [PATCH 148/337] docs: add the deprecation message to the NEWS.md --- NEWS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS.md b/NEWS.md index 9d706b4e..93424e5a 100644 --- a/NEWS.md +++ b/NEWS.md @@ -12,6 +12,9 @@ * Moved `{pkgdown}` site to bootswatch. Enabled search and linked slack icon (#122). +## Deprecation and Breaking Changes + +* The `metacore` argument has been renamed to `metadata` in the following six xportr functions: `xportr_df_label`, `xportr_format`, `xportr_label`, `xportr_length`, `xportr_order`, and `xportr_type`. Please update your code to use the new `metadata` argument in place of `metacore`. # xportr 0.2.0 * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! * Fixed an issue where xportr_format could pass invalid formats to haven::write_xpt. From f78268c7da7ef8a0d6f56d95b679164f9f086509 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 23 May 2023 20:48:28 +0530 Subject: [PATCH 149/337] chore: update the document --- docs/articles/xportr.html | 12 ++++++------ docs/news/index.html | 9 +++++---- docs/pkgdown.yml | 2 +- docs/reference/xportr_df_label.html | 2 +- docs/reference/xportr_format.html | 2 +- docs/reference/xportr_label.html | 2 +- docs/reference/xportr_length.html | 2 +- docs/reference/xportr_order.html | 2 +- docs/reference/xportr_type.html | 2 +- man/xportr_df_label.Rd | 2 +- man/xportr_format.Rd | 2 +- man/xportr_label.Rd | 2 +- man/xportr_length.Rd | 2 +- man/xportr_order.Rd | 2 +- man/xportr_type.Rd | 2 +- 15 files changed, 24 insertions(+), 23 deletions(-) diff --git a/docs/articles/xportr.html b/docs/articles/xportr.html index 397fb842..4775e936 100644 --- a/docs/articles/xportr.html +++ b/docs/articles/xportr.html @@ -132,8 +132,8 @@

    Getting Started with xportr# Loading in our example data adsl <- admiral::admiral_adsl


    -
    -


    +
    +


    NOTE: Dataset can be created by using this command admiral::use_ad_template("adsl").

    @@ -163,8 +163,8 @@

    Preparing your Specification Filesxportr function calls below. Take note of the order, label, type, length and format columns.


    -
    -


    +
    +


    xportr_type() @@ -529,8 +529,8 @@

    xportr_order()
     adsl_order <- xportr_order(adsl, var_spec, domain = "ADSL", verbose = "message")

    -
    - +
    +

    xportr_format() diff --git a/docs/news/index.html b/docs/news/index.html index 20baebb8..bb7c6734 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -67,12 +67,13 @@

    New Features and Bug FixesDocumentation

    • Moved pkgdown site to bootswatch. Enabled search and linked slack icon (#122).
    -
    -
    -

    xportr 0.2.0

    CRAN release: 2023-02-23

    -
    • Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101!
    • +
      +

      Deprecation and Breaking Changes

      +
      • The metacore argument has been renamed to metadata in the following six xportr functions: xportr_df_label, xportr_format, xportr_label, xportr_length, xportr_order, and xportr_type. Please update your code to use the new metadata argument in place of metacore. # xportr 0.2.0
      • +
      • Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101!
      • Fixed an issue where xportr_format could pass invalid formats to haven::write_xpt.
      +

    xportr 0.1.0

    CRAN release: 2022-06-21

    Beta release for xportr

    diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 9d3e96c5..179acd9d 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -3,7 +3,7 @@ pkgdown: 2.0.7 pkgdown_sha: ~ articles: xportr: xportr.html -last_built: 2023-05-23T15:10Z +last_built: 2023-05-23T15:18Z urls: reference: https://atorus-research.github.io/xportr/reference article: https://atorus-research.github.io/xportr/articles diff --git a/docs/reference/xportr_df_label.html b/docs/reference/xportr_df_label.html index c29f6d68..ad0b0607 100644 --- a/docs/reference/xportr_df_label.html +++ b/docs/reference/xportr_df_label.html @@ -79,7 +79,7 @@

    Arguments[Deprecated] previously used to pass metadata now renamed with metadata

    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

    +

    [Deprecated] Previously used to pass metadata now renamed with metadata

    diff --git a/docs/reference/xportr_format.html b/docs/reference/xportr_format.html index 124af224..b930607d 100644 --- a/docs/reference/xportr_format.html +++ b/docs/reference/xportr_format.html @@ -90,7 +90,7 @@

    Arguments[Deprecated] previously used to pass metadata now renamed with metadata

    +

    [Deprecated] Previously used to pass metadata now renamed with metadata

    diff --git a/docs/reference/xportr_label.html b/docs/reference/xportr_label.html index d7ac859d..5f86310c 100644 --- a/docs/reference/xportr_label.html +++ b/docs/reference/xportr_label.html @@ -90,7 +90,7 @@

    Arguments[Deprecated] previously used to pass metadata now renamed with metadata

    +

    [Deprecated] Previously used to pass metadata now renamed with metadata

    diff --git a/docs/reference/xportr_length.html b/docs/reference/xportr_length.html index 161fa674..4f78f61a 100644 --- a/docs/reference/xportr_length.html +++ b/docs/reference/xportr_length.html @@ -90,7 +90,7 @@

    Arguments[Deprecated] previously used to pass metadata now renamed with metadata

    +

    [Deprecated] Previously used to pass metadata now renamed with metadata

    diff --git a/docs/reference/xportr_order.html b/docs/reference/xportr_order.html index 5d88f2e0..2f60123e 100644 --- a/docs/reference/xportr_order.html +++ b/docs/reference/xportr_order.html @@ -89,7 +89,7 @@

    Arguments[Deprecated] previously used to pass metadata now renamed with metadata

    +

    [Deprecated] Previously used to pass metadata now renamed with metadata

    diff --git a/docs/reference/xportr_type.html b/docs/reference/xportr_type.html index 5aa38298..64f29a21 100644 --- a/docs/reference/xportr_type.html +++ b/docs/reference/xportr_type.html @@ -96,7 +96,7 @@

    Arguments[Deprecated] previously used to pass metadata now renamed with metadata

    +

    [Deprecated] Previously used to pass metadata now renamed with metadata

    diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index b08a29b8..ed2729cb 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -14,7 +14,7 @@ xportr_df_label(.df, metadata, domain = NULL, metacore = deprecated()) \item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses \code{.df} value as a subset condition.} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} } \value{ Data frame with label attributes. diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index f9dc06be..695c32c9 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -23,7 +23,7 @@ xportr_format( \item{verbose}{The action the function takes when a variable label isn't. found. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} } \value{ Data frame with \code{SASformat} attributes for each variable. diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index 29043ac6..f0138566 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -23,7 +23,7 @@ xportr_label( \item{verbose}{The action the function takes when a variable length isn't Found. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} } \value{ Data frame with label attributes for each variable. diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index c210a5cd..a9db65ff 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -23,7 +23,7 @@ xportr_length( \item{verbose}{The action the function takes when a length isn't found in metadata. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} } \value{ Data frame with \code{SASlength} attributes for each variable. diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index 71b9d2b9..6f48928c 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -22,7 +22,7 @@ xportr_order( \item{verbose}{Option for messaging order results} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} } \value{ Dataframe that has been re-ordered according to spec diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index 5b5de96d..efda5f87 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -26,7 +26,7 @@ dataset passed in \code{.df}.} \item{verbose}{The action the function takes when a variable isn't typed properly. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} } \value{ Returns the modified table. From d166b94399e8a2a1bc5abf17fa7b8081ed290564 Mon Sep 17 00:00:00 2001 From: sadchla-codes Date: Tue, 23 May 2023 11:19:28 -0400 Subject: [PATCH 150/337] Closes #111 #129 --- DESCRIPTION | 6 +++++- man/xportr-package.Rd | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 2ff4fac8..1fd087ea 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: xportr Title: Utilities to Output CDISC SDTM/ADaM XPT Files -Version: 0.3.0 +Version: 0.4.0 Authors@R: c( person(given = "Eli", @@ -24,6 +24,10 @@ Authors@R: family = "Zhu", email = "Zelos.Zhu@AtorusResearch.com", role = "aut"), + person(given = "Vedha", + family = "Viyash", + email = " ", + role = "aut"), person(given = "Atorus/GSK JPT", role = "cph") ) diff --git a/man/xportr-package.Rd b/man/xportr-package.Rd index 157e2099..4210e5ae 100644 --- a/man/xportr-package.Rd +++ b/man/xportr-package.Rd @@ -25,6 +25,7 @@ Authors: \item Ben Straub \email{ben.x.straub@gsk.com} \item Ross Didenko \email{Ross.Didenko@AtorusResearch.com} \item Zelos Zhu \email{Zelos.Zhu@AtorusResearch.com} + \item Vedha Viyash } Other contributors: From f126e11fd5098bebde8baf4759d608daefa18309 Mon Sep 17 00:00:00 2001 From: sadchla-codes Date: Tue, 23 May 2023 11:31:05 -0400 Subject: [PATCH 151/337] Closes #111 #120 Added @EeethB to the description file --- DESCRIPTION | 4 ++++ man/xportr-package.Rd | 1 + 2 files changed, 5 insertions(+) diff --git a/DESCRIPTION b/DESCRIPTION index 1fd087ea..46134cda 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -24,6 +24,10 @@ Authors@R: family = "Zhu", email = "Zelos.Zhu@AtorusResearch.com", role = "aut"), + person(given = "Ethan", + family = "Brockmann", + email = "Ethan.Brockmann@AtorusResearch.com", + role = "aut"), person(given = "Vedha", family = "Viyash", email = " ", diff --git a/man/xportr-package.Rd b/man/xportr-package.Rd index 4210e5ae..be3534ca 100644 --- a/man/xportr-package.Rd +++ b/man/xportr-package.Rd @@ -25,6 +25,7 @@ Authors: \item Ben Straub \email{ben.x.straub@gsk.com} \item Ross Didenko \email{Ross.Didenko@AtorusResearch.com} \item Zelos Zhu \email{Zelos.Zhu@AtorusResearch.com} + \item Ethan Brockmann \email{Ethan.Brockmann@AtorusResearch.com} \item Vedha Viyash } From a3df9e49b64a6a45a1bcbfd5a4a488ee978ea41d Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 23 May 2023 21:18:41 +0530 Subject: [PATCH 152/337] chore: remove local file --- R/WIKI.md | 71 ------------------------------------------------------- 1 file changed, 71 deletions(-) delete mode 100644 R/WIKI.md diff --git a/R/WIKI.md b/R/WIKI.md deleted file mode 100644 index ea4f5bf9..00000000 --- a/R/WIKI.md +++ /dev/null @@ -1,71 +0,0 @@ -As xportr is an evolving package, functions or arguments may need to be removed or replaced with more efficient options from one release to another. In such cases, the relevant function or argument must be marked as deprecated. This deprecation is done in three phases over our release cycles. - -Phase 1: The first release will issue a warning when using the depericated function or argument by using `lifecycle::deprecate_warn()`. -Phase 2: In the next release, an error will be thrown using `lifecycle::deprecate_stop()`. -Phase 3: Finally, in the 3rd release thereafter, the function will be removed from the package altogether. - -## Examples of depreciation - -### Deprecating a function - -#### Phase 1 - -1. Use `lifecycle::deprecate_warn` inside the function to throw a deprecation watning when it is called. If the function is replaced by a newer function, provide the new function as the `with` argument inside the `lifecycle::deprecate_warn` -2. Add `lifecycle::badge("deprecated")` in the function description using roxygen comments -3. Build the document using `devtools::document()` to make sure that the vignettes are updated - -```r -#' @description -#' `r lifecycle::badge("deprecated")` -#' -#' This function is *deprecated*. Please use the function `xportr_new_func()` instead -xportr_old_func <- function((.df, metadata, domain = NULL, verbose = "none") { - lifecycle::deprecate_warn( - when = "1.0.0", - what = "xportr_old_func()", - with = "xportr_new_func()", - details = "Optionally provide more context about this change" - ) - # Function logic -} -``` - -#### Phase 2 -1. Replace the `lifecycle::depricate_warn` with `lifecycle::deprecate_stop` -#### Phase 3 -1. Completely remove the deprecated function from the package - - -### Deprecating a function argument - -#### Phase 1 - -1. Still pass the deprecated argument in the function, but with a default value of `deprecated()` -2. If the deprecated function is used by the user, show a warning using `lifecycle::deprecate_warn`. If the argument is replaced with a new argument, reassign it here so the function works. -2. Add `lifecycle::badge("deprecated")` in the description of the function param using roxygen comments -3. Build the document using `devtools::document()` to make sure that the vignettes are updated - -```r -#' @param old_arg `r lifecycle::badge("deprecated")` description about the argument -#' @param new_arg description about the new argument -#' -#' This function is *deprecated*. Please use the function `xportr_new_func()` instead -xportr_old_func <- function((.df, metadata, new_arg, domain = NULL, verbose = "none", old_arg = deprecated()) { - if (!missing(old_arg)) { - lifecycle::deprecate_warn( - when = "1.0.0", - what = "xportr_old_func(old_arg = )", - with = "xportr_new_func(new_arg = )", - details = "Optionally provide more context about this change" - ) - nre_arg <- old_arg - } - # Function logic -} -``` - -#### Phase 2 -1. Replace the `lifecycle::depricate_warn` with `lifecycle::deprecate_stop` -#### Phase 3 -1. Completely remove the deprecated argument from the function - From 3c74c8838f59e5260574deba6e19d7209298a7cd Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 23 May 2023 21:20:03 +0530 Subject: [PATCH 153/337] chore: remove local file again :facepalm: --- TEST.R | 11 ----------- 1 file changed, 11 deletions(-) delete mode 100644 TEST.R diff --git a/TEST.R b/TEST.R deleted file mode 100644 index 6c45706f..00000000 --- a/TEST.R +++ /dev/null @@ -1,11 +0,0 @@ -devtools::load_all() - -df <- data.frame(x = 1, y = 2) -df_meta <- data.frame( - dataset = "df", - variable = c("x", "y"), - format = c("date9.", "datetime20.") -) - -# formatted_df <- xportr_format(df, metacore = df_meta) -formatted_df <- xportr_format(df, metacore = df_meta) From 817037d7b0c4d510acbd137567ab7ceb0a939a38 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 15:58:41 +0000 Subject: [PATCH 154/337] Update metadata example --- R/metadata.R | 5 ++++- R/support-test.R | 17 ++++++++--------- man/xportr_metadata.Rd | 13 +++++++++---- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/R/metadata.R b/R/metadata.R index a560b190..eb8be6cd 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -16,6 +16,7 @@ #' @export #' #' @examples +#' #' metadata <- data.frame( #' dataset = "test", #' variable = c("Subj", "Param", "Val", "NotUsed"), @@ -32,7 +33,9 @@ #' #' xportr_metadata(metadata, "test") #' -#' \dontrun{ +#' if (requireNamespace("magrittr", quietly = TRUE)) { +#' library(magrittr) +#' #' adlb %>% #' xportr_metadata(metadata, "test") %>% #' xportr_type() %>% diff --git a/R/support-test.R b/R/support-test.R index deba9587..fd8950c5 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -68,15 +68,14 @@ minimal_table <- function(n_rows = 3, cols = c("x", "y")) { #' to keep #' #' @return A metadata data.frame -minimal_metadata <- function( - dataset = FALSE, - length = FALSE, - label = FALSE, - type = FALSE, - format = FALSE, - order = FALSE, - dataset_name = "adsl", - var_names = NULL) { +minimal_metadata <- function(dataset = FALSE, + length = FALSE, + label = FALSE, + type = FALSE, + format = FALSE, + order = FALSE, + dataset_name = "adsl", + var_names = NULL) { cols_logical <- c(dataset, TRUE, label, length, type, format, order) cols <- c( "dataset", "variable", "label", "length", "type", "format", "order" diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index dfab1156..cd67a5f1 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -26,6 +26,7 @@ functions. If used at the start of an xportr pipeline, it removes the need to set metadata and domain at each step individually } \examples{ + metadata <- data.frame( dataset = "test", variable = c("Subj", "Param", "Val", "NotUsed"), @@ -40,8 +41,12 @@ adlb <- data.frame( Param = c("param1", "param2", "param3") ) -adlb \%>\% - xportr_metadata(metadata, "test") \%>\% - xportr_type() \%>\% - xportr_order() +xportr_metadata(metadata, "test") + +if (requireNamespace("magrittr", quietly = TRUE)) { + adlb \%>\% + xportr_metadata(metadata, "test") \%>\% + xportr_type() \%>\% + xportr_order() +} } From f2dacd422d8eee50c0994ea3ba5eceac751ef950 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 16:13:11 +0000 Subject: [PATCH 155/337] Correct metadata example --- R/metadata.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/metadata.R b/R/metadata.R index eb8be6cd..e0fa412a 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -31,7 +31,7 @@ #' Param = c("param1", "param2", "param3") #' ) #' -#' xportr_metadata(metadata, "test") +#' xportr_metadata(adlb, metadata, "test") #' #' if (requireNamespace("magrittr", quietly = TRUE)) { #' library(magrittr) From 6a4c77b4a7e4609be61981f9406e56055ae752d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 23 May 2023 18:18:17 +0200 Subject: [PATCH 156/337] docs: remove folder and cleanup gitignore --- .gitignore | 2 - docs/404.html | 114 - docs/LICENSE-text.html | 82 - docs/LICENSE.html | 86 - docs/apple-touch-icon-120x120.png | Bin 9993 -> 0 bytes docs/apple-touch-icon-152x152.png | Bin 13465 -> 0 bytes docs/apple-touch-icon-180x180.png | Bin 16814 -> 0 bytes docs/apple-touch-icon-60x60.png | Bin 4149 -> 0 bytes docs/apple-touch-icon-76x76.png | Bin 5334 -> 0 bytes docs/apple-touch-icon.png | Bin 16814 -> 0 bytes docs/articles/Vignette.html | 140 - .../empty-anchor.js | 15 - docs/articles/drilling.html | 131 - .../empty-anchor.js | 15 - docs/articles/getting_started.html | 141 - .../empty-anchor.js | 15 - docs/articles/index.html | 79 - docs/articles/metacore.html | 131 - .../empty-anchor.js | 15 - docs/articles/metadata.html | 135 - .../empty-anchor.js | 15 - docs/articles/moving.html | 131 - .../empty-anchor.js | 15 - docs/articles/readme.html | 216 - .../empty-anchor.js | 15 - docs/articles/xportr.html | 723 - .../empty-anchor.js | 15 - .../crosstalk-1.1.1/css/crosstalk.css | 27 - .../crosstalk-1.1.1/js/crosstalk.js | 1474 --- .../crosstalk-1.1.1/js/crosstalk.js.map | 37 - .../crosstalk-1.1.1/js/crosstalk.min.js | 2 - .../crosstalk-1.1.1/js/crosstalk.min.js.map | 1 - .../datatables-binding-0.17/datatables.js | 1422 -- .../datatables-binding-0.18/datatables.js | 1412 -- .../datatables-crosstalk.css | 23 - .../css/jquery.dataTables.extra.css | 28 - .../css/jquery.dataTables.min.css | 1 - .../js/jquery.dataTables.min.js | 180 - .../header-attrs-2.9/header-attrs.js | 12 - .../htmlwidgets-1.5.3/htmlwidgets.js | 903 -- .../jquery-3.5.1/jquery-AUTHORS.txt | 357 - .../xportr_files/jquery-3.5.1/jquery.js | 10872 ---------------- .../xportr_files/jquery-3.5.1/jquery.min.js | 2 - .../xportr_files/jquery-3.5.1/jquery.min.map | 1 - docs/authors.html | 117 - docs/bootstrap-toc.css | 60 - docs/bootstrap-toc.js | 159 - docs/docsearch.css | 148 - docs/docsearch.js | 85 - docs/favicon-16x16.png | Bin 1101 -> 0 bytes docs/favicon-32x32.png | Bin 1978 -> 0 bytes docs/favicon.ico | Bin 15086 -> 0 bytes docs/index.html | 256 - docs/link.svg | 12 - docs/logo.png | Bin 114626 -> 0 bytes docs/news/index.html | 91 - docs/pkgdown.css | 384 - docs/pkgdown.js | 108 - docs/pkgdown.yml | 7 - docs/reference/Rplot001.png | Bin 1011 -> 0 bytes docs/reference/df_label_view.html | 190 - docs/reference/figures/_logo.png | Bin 114626 -> 0 bytes docs/reference/figures/design_flow.png | Bin 54033 -> 0 bytes ...-icon-8fddca93e3a89fee152146540f9de78a.svg | 6 - ...-icon-9b00320707d42527dde67262afb33ded.svg | 6 - ...-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg | 6 - docs/reference/figures/logo.png | Bin 114626 -> 0 bytes docs/reference/figures/pressure-1.png | Bin 7331 -> 0 bytes docs/reference/figures/xportr_rev.png | Bin 127643 -> 0 bytes docs/reference/index.html | 144 - docs/reference/pipe.html | 166 - docs/reference/xportr-package.html | 97 - docs/reference/xportr_core.html | 235 - docs/reference/xportr_df_label.html | 125 - docs/reference/xportr_df_varnames.html | 392 - docs/reference/xportr_format.html | 132 - docs/reference/xportr_label.html | 134 - docs/reference/xportr_length.html | 132 - docs/reference/xportr_order.html | 107 - docs/reference/xportr_tidy_names.html | 415 - docs/reference/xportr_type.html | 135 - docs/reference/xportr_write.html | 112 - docs/reference/xpt_check_ascii_lbls.html | 189 - docs/reference/xpt_check_ascii_vars.html | 189 - docs/reference/xpt_check_label_length.html | 189 - 85 files changed, 23513 deletions(-) delete mode 100644 docs/404.html delete mode 100644 docs/LICENSE-text.html delete mode 100644 docs/LICENSE.html delete mode 100644 docs/apple-touch-icon-120x120.png delete mode 100644 docs/apple-touch-icon-152x152.png delete mode 100644 docs/apple-touch-icon-180x180.png delete mode 100644 docs/apple-touch-icon-60x60.png delete mode 100644 docs/apple-touch-icon-76x76.png delete mode 100644 docs/apple-touch-icon.png delete mode 100644 docs/articles/Vignette.html delete mode 100644 docs/articles/Vignette_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/drilling.html delete mode 100644 docs/articles/drilling_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/getting_started.html delete mode 100644 docs/articles/getting_started_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/index.html delete mode 100644 docs/articles/metacore.html delete mode 100644 docs/articles/metacore_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/metadata.html delete mode 100644 docs/articles/metadata_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/moving.html delete mode 100644 docs/articles/moving_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/readme.html delete mode 100644 docs/articles/readme_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/xportr.html delete mode 100644 docs/articles/xportr_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/css/crosstalk.css delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js.map delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js.map delete mode 100644 docs/articles/xportr_files/datatables-binding-0.17/datatables.js delete mode 100644 docs/articles/xportr_files/datatables-binding-0.18/datatables.js delete mode 100644 docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css delete mode 100644 docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.extra.css delete mode 100644 docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.min.css delete mode 100644 docs/articles/xportr_files/dt-core-1.10.20/js/jquery.dataTables.min.js delete mode 100644 docs/articles/xportr_files/header-attrs-2.9/header-attrs.js delete mode 100644 docs/articles/xportr_files/htmlwidgets-1.5.3/htmlwidgets.js delete mode 100644 docs/articles/xportr_files/jquery-3.5.1/jquery-AUTHORS.txt delete mode 100644 docs/articles/xportr_files/jquery-3.5.1/jquery.js delete mode 100644 docs/articles/xportr_files/jquery-3.5.1/jquery.min.js delete mode 100644 docs/articles/xportr_files/jquery-3.5.1/jquery.min.map delete mode 100644 docs/authors.html delete mode 100644 docs/bootstrap-toc.css delete mode 100644 docs/bootstrap-toc.js delete mode 100644 docs/docsearch.css delete mode 100644 docs/docsearch.js delete mode 100644 docs/favicon-16x16.png delete mode 100644 docs/favicon-32x32.png delete mode 100644 docs/favicon.ico delete mode 100644 docs/index.html delete mode 100644 docs/link.svg delete mode 100644 docs/logo.png delete mode 100644 docs/news/index.html delete mode 100644 docs/pkgdown.css delete mode 100644 docs/pkgdown.js delete mode 100644 docs/pkgdown.yml delete mode 100644 docs/reference/Rplot001.png delete mode 100644 docs/reference/df_label_view.html delete mode 100644 docs/reference/figures/_logo.png delete mode 100644 docs/reference/figures/design_flow.png delete mode 100644 docs/reference/figures/fa-icon-8fddca93e3a89fee152146540f9de78a.svg delete mode 100644 docs/reference/figures/fa-icon-9b00320707d42527dde67262afb33ded.svg delete mode 100644 docs/reference/figures/fa-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg delete mode 100644 docs/reference/figures/logo.png delete mode 100644 docs/reference/figures/pressure-1.png delete mode 100644 docs/reference/figures/xportr_rev.png delete mode 100644 docs/reference/index.html delete mode 100644 docs/reference/pipe.html delete mode 100644 docs/reference/xportr-package.html delete mode 100644 docs/reference/xportr_core.html delete mode 100644 docs/reference/xportr_df_label.html delete mode 100644 docs/reference/xportr_df_varnames.html delete mode 100644 docs/reference/xportr_format.html delete mode 100644 docs/reference/xportr_label.html delete mode 100644 docs/reference/xportr_length.html delete mode 100644 docs/reference/xportr_order.html delete mode 100644 docs/reference/xportr_tidy_names.html delete mode 100644 docs/reference/xportr_type.html delete mode 100644 docs/reference/xportr_write.html delete mode 100644 docs/reference/xpt_check_ascii_lbls.html delete mode 100644 docs/reference/xpt_check_ascii_vars.html delete mode 100644 docs/reference/xpt_check_label_length.html diff --git a/.gitignore b/.gitignore index 608d713f..8bcf3075 100644 --- a/.gitignore +++ b/.gitignore @@ -11,11 +11,9 @@ scratch_check.R inst/doc adsl.xpt demo.R -/doc/ /Meta/ docs xportr.Rcheck/ xportr*.tar.gz xportr*.tgz -docs/* local diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index 398e0a4f..00000000 --- a/docs/404.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Page not found (404) ‱ xportr - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - -Content not found. Please use links in the navbar. - -
    - - - -
    - - - -
    - -
    -

    -

    Site built with pkgdown 2.0.3.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html deleted file mode 100644 index 771e868f..00000000 --- a/docs/LICENSE-text.html +++ /dev/null @@ -1,82 +0,0 @@ - -License ‱ xportr - - -
    -
    - - - -
    -
    - - -
    YEAR: 2021
    -COPYRIGHT HOLDER: Atorus/GSK JPT
    -
    - -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/LICENSE.html b/docs/LICENSE.html deleted file mode 100644 index 11098502..00000000 --- a/docs/LICENSE.html +++ /dev/null @@ -1,86 +0,0 @@ - -MIT License ‱ xportr - - -
    -
    - - - -
    -
    - - -
    - -

    Copyright (c) 2021 Atorus/GSK JPT

    -

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -
    - -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/apple-touch-icon-120x120.png b/docs/apple-touch-icon-120x120.png deleted file mode 100644 index 3bbb7cdeec93ab198c1df35dc58fc31ba33456bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9993 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 Il{5|ie+Smp!~g&Q diff --git a/docs/apple-touch-icon-152x152.png b/docs/apple-touch-icon-152x152.png deleted file mode 100644 index f0807d53ad8c552889e0f078925ed32c692e1f42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13465 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 H7Lfk|0SJBi diff --git a/docs/apple-touch-icon-180x180.png b/docs/apple-touch-icon-180x180.png deleted file mode 100644 index 516fed4514b8f6f16d224ee3b559eab1b1d7b145..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16814 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 diff --git a/docs/apple-touch-icon-60x60.png b/docs/apple-touch-icon-60x60.png deleted file mode 100644 index 4fea33ccf7f1f840e91eb15051fad585c78eafe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4149 zcmZ`+cQhOB_l`}C)~3`5wWX*LL5w1(-F#>X6{9vW8=^64mD1KOL8Vk%dj++3?NL>; zR_!fnl=4mg{QdDe@B7~8+%003ar*V8s9q3XXwOHGoH ziz#0cP&#WGX#xNhujnt3R3u%%LC@R>00hrMb!59VcLMJf9qXSVKT`=kxDcuEOH_TIlO@uUJ7yBe z8EF&vk`<*xmpJG&qN%|})~+R>@s70`V$o35v(3A=ImGWBn7?wPYOEAhaQNM8aCZQs z_IGPiZ-1{1}?KPS_nVwyo^tZh*hYD5Y zn3^{UD$CxszQE##pw&v9$^wNB^_a}Z;>gMCd7g2tg_P)Z+bG34x~%&W(0Q~EO@HtN z*V@xEZi&lN_Xi+^Pc({Hu#|f@JwQCYq49N%!9G#R1bUQD&Kb;R8}=&+$IR`8apw;` zBRU&>dp^wbCmz;Zt48x9`%cJ)JvY?p<`t6eDQ8h*8cHU4V?LQ&b)>|lx78(;+u*dX zShr zQa%vzca3*O*Ibd=u=m|a*p#|;+Zi#Ey?-@eVB#5+)^yDhX~*sUBy zZ-G8j&sMl9rO($+2xA+1O%D^DxUTDqkXdHmo~<@)?D9Lc8C#_J9`@US);e))K$HQo zZoy#rI+2&YdeL3wPu*_#n&B437UOx0D9urmTnV>VooU@Axj1gTw?%xh=b2Drs)>UL zBte0Jl%Jlc0PO}m?#^$gDV&2#%ss26pNHeqfRLn6YyP8EjavJk@?bv#&e8f}c^A8js2{=+2mk91dLoHl z?4hUk;kON<$q60=JLN`IS*`eaDnnB2G1E?{@1AjcYKK^Lp2Ed&FP*V)({FB)rCWCn zYkHKjsOH>XdSGde*v>ab<5<9cinEo70cWV7^-R?Tc>JQFKn&f6zAB}-?k@>U@Rcgv z7rMlD1cEjnd2W9%<7otFi)&Mwar6;P2^1P^r(7k>W&#l}fG-nUG^P~OmcwZAYzE>f z%Xq1xiJY72zq&g|>1fqnnTI}Zk`6P(h<*y8|2sp#3ZUD=R|@GR)9#~x_Ns0@3{f9f z&7)MK_Tfy8So|0kfL=Gf znucT$_FrD7IwnUSv3Km%a-SF7cbeMCeM9)bcIQlxrl*vf2Ip(maPGrD6GF?;YUB*y znr&ijk&jE%s-6(**MgZD5#ta){Iwr3oHWNL8%Bt=yHTmU>9muvN*+)U1g2c0h&2!U z#BFr}nRp`igR=Ye4ldg1Rlqk>?wi6hqfw*Gcqx2qp`1LJDWsh8m8art9h_xHS?a1h z<1W*w9!nHi-d?zQ#>WZuR+ohAf4az6WKK+?y{A=a{3v7>=ag5Y3lk({#qK2lrFt}_ z=-)GPC5#(R18fSjH3?PpWnj{e+=$8=LM@$fGDis_Ya+6GD~R<0DfASKKJt{jQDk0_ z`x5hUl}lz_VU^PU`TD*=<&lir!f z+1#Ua080JPnPU22rKzpw=;t^MK_!Vt7`$C-?<^o{${j)F;8*kg&j_pjULRAeD|h@6(hyw;39k$b8krn#g{$?anT z8P7X7m)(3(Ryhluqv6(Dsl2ttd~ZLAAx&!?%w);K1ur8k4{(28F0qSAI9=$ zAnO=EdSeM2`mh^Rg2r_*?YwEU? zWF(7^6DpDY0tLk02WygJ=pfgf~768VwuR$RUBgimW5ygXP zfA}pv(z{HZY>Gr<=DUoA%Mt0^&LHG^w#{k5Xf%?Cnjn>hSd)iv;u4dG?4}fT-BXq$ zWW{nay%n{q7M#Mt04v}OG2k@{ZFupbKgUdfd$_@SDIR7`m|3wW1LUQi;@Z}8 zM`e%|3?6-5XSwtNXWsA5^jJnR$(cOFdZ8*fjNv-6y88~her+{t@P9Yj?j!*5v=UB# zYCUf&c~T>5tZ2$v>0YDb9;6x7fFqI(k@X<6g&uv{56zo>fkrAGbWhxJ`B`p7jTgrC zQgig+ z5-o&QgHBU9=g7e?vG5DR+4ArCz4;!VTS2)jDc|>tA+mN3@_|6J`+~QPuiUT_pVN#d z%1X}c*t(`3NXw3D0<@$#GJ>l`$GF}zJAGG>NVD+{-JY(f#~5CWxp*i%Aj56pbcqA3 z9}^iIM3Z90wC080^x^}G6>d>Gsx-J^Gu!kFWFcBHg5zVPnitN>8r9S={WM-x_VwgC zqoa}e8OQWmc0?i&-zqwVEA(sAO7RpTPuoiJ@_g^`lbkxx>mDpYdVq)AxR%iK0_KO^bi6}MDKFu8j%W)jT+sxH122>6K~0j?5T3^4KNm(n;62N z+%-NlYoc7zJNasT1n^7n8jeNAaU}+grQD87YE+VIgd0_;Nn@ML=}_s5z|f^uz)Co_ zkAn4X!FBdG8HEJHi`Vf?{9}`!85m7;dKgqc*&EKuCHC+kJ2bbh;x5$p`Jc-dBA@h+ zSF3G6J;c8jE@yW{QoN`edY(^F!i}y4+`a<}$oNLxC9!=gGN0a62^)IAyZG`E>V%d0 zNAxNiFITwRGTrwB3Jdbkfbeo;7IIMviQ&gRm8*8L2Zv#Pa5Y!L^&kh_qo30mTrE%A zmG>_KU548~eM62GpJr4)rQLn(EJB4IGlIk}^jb1XrqS;xPnOS(ko=*cKXfF=DgDyC=dP7D;ZaIst4pA;-^bN?e}<=7W{^0xh^xS zqFNpT2fUuclz6^mE)1)SBm4;a-9OQG-K&cNasyuR&#;x(_eJJnYlCUOa8{_{Z#WvRWc8s_kslXd9b8q zOE@M|V!zh?r~g;ug1?mIf>wP4wI6ZjyR@WixOXS+h>0)j5x1SC`ZoXS$Nr3)sTIDl zdm);59#Bg97-*gmcqtHZhTTD3Jfm5f5=N8R7#yrnbj%)Zr4PP1DN*p4!^mghdtlmj zZT@v+q5%nSXGvCd%`1bsGta~b+4 zE^nJyVE`e^ReL~kcmNFo79}&O?~~^+>x}qD;>W4`(%8HZwi#8@P<8m~o`tupb6}a` zVLMZ7A`zNXurQmvFkuqkeB?icGx2-MRbjx^CG$&Yt3(u@F)>Z~-suV5?4-)qgd$tH zyP=gs6G;J4C=&){&5 zY<-L(*EQA|TepYPl|FLBmG}bmroY9bxCWS-V#9GK|1I$6rLmA8n>O;WDdyXy@ z>_3=Z9@dE3Dij8kDOS3kj1JEmEEFprER&_@3VK&Notb?M8exfU6c16g(^}{Tvsr$w z?@HaoSntBmTLNk_raWI}SIA$eG%ylNin+r z(<)f>t!xYYI+kv_m?AZQ8&@H{G6?8l)8Ga={NQ_mxfM8m9?YR$eA?(Jc{DnqYoaWp zF|Vf8&LW?Wh*!T=;@k75cJOSD)SF|!EwmIGf2%>dmOzf%&kjQrdu_0t4%Z~YWvl1q z>d)pMy+NluAbEy+ty5nplBriutn?q*D>oGrajWod)r^qG*8oQ#~T zv@B^Wz-7S@1sRBpjHJvzxs)m^@P7!N-j1$Mg8qL(^4AwQ62USU{?OkX`BVVq>;1&l z!%4tD2<0T;it={=0MNMQLk3zO3o)@ill}qy6>|WE5Ix9&o>hqTeli;ctAKWxe1{{2 sP!(LDe{%e5=RhZKCry8t-a7*jV3U*C|4>UImE;1TuVbuTs%01PKb9)2X8-^I diff --git a/docs/apple-touch-icon-76x76.png b/docs/apple-touch-icon-76x76.png deleted file mode 100644 index 2384749d7ecbd6615e5901b5f4e23349da4aab66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5334 zcmZ`-cQ_o*(?8we5TbX{9ggVH4v8A&)QEOYJA%`R&XI_IPKlD}Bs!;r=)DVx5`qgN z5nV(}zJ8ZK-#^}GcW0iReP(v&^X$$%vxz1~Iv^@`DgXcg($m$35xC*MK}k-aBRQtx z1V-uxeFy~r8q=u%z{v=6UW6{}Apr1H2mpvi0{~Y9QS^5JAP@oo>^cGf%DDgl3#y>Q zRE4lW?qr~&4Y>K&in=N@2@;9`y@&THwyEhDWQch0F-QRbjKO-^Q1g(_`vsxtoSz~_ z)DO?3N2Vv&Z1z2Z1^G011^yh%us`d(~m-3dF21FK$p4Fuk|Q_0hab z#$4Aq%UY6 zpDb(mpH76mBxz`mi)h`tj`S@oFs)+QR{H6e$y4kRI~1V z^y&EAAKd=Ou#Zc8V?5qT4gKz==An2q@dR*vnUE zXvb`34+09VkFB)78`8J+Ur#Q`s!*amg3R`5$LKI8H|_14I@uMl(&c=>93{ugNR4K} zO9MoE#7`pT)f+5+hXWKhG$y#~{!tKrhXtq>mgNW+zlYx7F25w2rO4D-MFXpc%@WXp z?=1BXR1`-A)1E*UNIYr6t}3#tN~PO?-rcaH#B$B4Iz-$;xE7L|C3epFq7C@ZH3NOg zCP9bsoY0#?d-<_2OAh&cB2_KuJ3;*Wcc^QszRnq@p@0Ghiaa0psZ-4&At$d*esCwO zsoc1^N^iPN!uyoO`)MRg^MSp~#kv)ZOO)$#Wp*INT4>$IZ%78`MsYy|L8{V?3 z`o>>c7{3HH zp9FZMk2Q{#IDj5N&L>D2W6F+@6;h5)Ze@XSAA2g%&IP5nreG}tqgX?4eL_%*_D0hZ z`%#=Tnx{@}tT4Y$bCCSdx!fYuQv!U)E;#0B7gJ-I7X@udD8)Rz&g}yEie8ND ztT_&;-;5tU^U}$-^I*^a(T);zgy@%=Ym~Hd_t^F)jvT+ZkESQxW(eYs*>2aJsKCs? zam0M6ufXIFOO1+}`q&+O&V*tkYmkc3Mkv-_Yss4iU4-G`&mJ$bpl3kPkV9&rxL3`j+t*PT2*Pnf?P5iTre_s>ea=IF*o9I) z0xgfl2{fAL#ngQf_{niA`@V^2X?R*l1+8#KuN1TB4!QJjdR4V>u%r6e6}h={SL;vy zvOy`P#wX8uPx%dQ@seul;w<;VeuVB>|0%1itlt=uNEqTmeL(WZK)Jh8B1#I4u^N$)pSL^A>qWtJK{$T-WpeW!YMRQZredJNBQ0>&15Yjt zSK20M=SSr6PVw$Lpkx_GGp7Cd9JBit=Z!t9+**8>$X;IC4-BSl9$#f3a6`w zB!9@$jv&$09lzv+zSEs3@fY3kkMetKLI6zN>RLHyx#pJwqd$H?F4AA#>-s8Y9FkPmoqBDp8R|G5Q3r5;N-j z>OtNSgcrd4I$YCxy6|Mrx&YtJUFK!BsFo8_kv+Eo=zRU?u4~iq{aj0;WxIPz&2TQG zri3C}{!gp@v;TSTDu2V=n|)YPN5m&M^n^z)WeNvYe%3Xko|I__+nd2Wan}xIN|q#_Ch?H1-FZ&CV7T{CR?%n~29UUi}4#L=I$a_qBQ%4#R zz65mmdTaG85Y2J*-rwG*ebFsXuk7~c_HGiw*()Rja2A9V6nefYlATqT{D;N1BHmo4 zqXP!ygX&@rpF!Wk@Nc)Sd39nR`Y)O4lx6#CJ$D9mz}WCiY)aR=tsfMKOE#=Z!+A=W z{I-J3-T$(SGnX!PJ+u4yI+ZycWjc&HlA zPnBQ~r+#_!@Y_E&M)DdcshfkeR?XRK%|GE0vfJUbD=EcdE;6-VzxG2S2I+NZ+B=$3 zHA1-wQ7hNcBGOi^#%D+VsxycX&q%ka8VwWhYg&VIY*byUOUJB1U?{SP=hFfdiHe?c zRL=@eC4{veTdI1TbjX0xpS;_ICpwH)`iktdyoe}BmK(izl_n^hh^)|TsEjG^Lsw;)mv<0|4Z=IjpRCmm0ltIH6( zuT4d7p}&=}^?Wuj^?`{bd|7_ZH>GP)?#>8B9RWzf z&I=$p1+x7FGr55aDg z2M;+KH+_|*x|3I9B1qS6Gs?FI(}lhIOG2G3F(SpR^y{kn*WqVV)xI`j*i>@~X7<8k z55W(9uRp^lkrZl>!^ibZ+fMaw=Xy~A2Te7o5>n=p>5VKc;NU!$9&T|CQ0*Z?7yW&o z^Z}~TRGjhU=VCzz8VDU&op;X-W;fy=djzN?fn3lr(Do<@>drpADTzJofT9Xc_-OGEHA;@YfdBvEj~Sg`d2=tZed zz1~Es#~B26<(romJ9 zLbw}Uz&Xbi^=uXysmgf*zH%o1b=NkKWHd|jrbN~}c9tcS2wU>jM3B;K%p4r9e$wk( z%zzPex#<4-`r_grl9P=a{#MkHr?91>Gdwk!zLuHIQED?OPyq*a=xg?2wef)aQj~o~ zo$)V4iiB@Gd?30>=_Ef`SOrr9ZRW~X_O#y>*zc1|c=zz=hf6F=5VX#@J%k9XYG=Y2 zmsO45mb_T@N9}}>*#jvG@@ec|GX?_35ztJpdE(r#lKsp@;V1Z?feXoljq4B1bd^7XCK)p!_7q zwITIv2jOWO)jXKK5~Z5OgeY=*vWvEL?r;0;DIok*NFI0$G>jT)jVp+}F-y=<$kXd8 zsU+U@B-BRztOt|JPtw@UqDF!2X6v{>Arr^P1@OnKc(T=_Nm};9M=l|LNyRc_wWISX zgep~vVYN}S;a9+wZ9Wg#i%t@k)|G6<%Y~Plw^-yl9oXeMdv=begu4A&@M&SfYkO*6 z(ut?{pXdF|dG6_M^m0E1ipmF}A{F4y%hZWa_p)TUwr=>tWGK z$QO4XO0!17@4~MFa{Ji?ACakg(%VL@U7?25$0B{H%dK1WSbVls=gYA5%!Cnnwv%~! zWE#awQd<@v8k{$9pv$`jC(c4GQ=oNvx+k)dF$YZ7)dv*=~AQ0NHe{QxFh>E7hY$XeO8R|hX?!6&LVNxIH? zb`R^?{)3fDVKF~hpbU-9FDrZFC5O-h!!s+(Yo2=gisr-|wl6m#G%0PLR{O<(;-8YszbMkxGa^XqTBLMH|TM2tlH zA22S;xqq)=tXyVpyCPEXS{N))bZ+rSwY=9J2T9DJaDWqfoA;Ts|S3It4la!5XD%1I%^2ME|E#-TPYKL@kR-JkcMXSFyouNiO z{M#>EV<3K|^!C2m<(^Rwm8TR(}&YB-O#Zh1igYg89SpmzldMf0qD`E4f znhSNN+_#Mp6VA(oUpc{m`_=)@@BkNOgr5t60c0RD(h|~yE@v*Ss4NFjhDeJ;2o$3I zRT=w#6uf+#k*=Ztzk*y(tO!BD>Z!SP01O_?i}LevMLu!i4G2ZK@FGzG2mm0YVDp5A z($`W%WZZaSQg0guAh|;=iJ)e@!)TCsn}m^9J6d+YndDBhIq$^M$I-#bLC!&niD=y- beM!JB%dLPDO}Q+>7685bM%s0nj96Wm8h6-g+l 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 diff --git a/docs/articles/Vignette.html b/docs/articles/Vignette.html deleted file mode 100644 index b3e856bb..00000000 --- a/docs/articles/Vignette.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - -Variables' Core Categories ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -

    Three categories are specified in the “Core” column in the SDTM domain models:

    -
      -
    • A Required variable is any variable that is basic to the identification of a data record (i.e., essential key variables and a topic variable) or is necessary to make the record meaningful. Required variables must always be included in the dataset and cannot be null for any record.

    • -
    • An Expected variable is any variable necessary to make a record useful in the context of a specific domain. Expected variables may contain some null values, but in most cases will not contain null values for every record. When the study does not include the data item for an expected variable, however, a null column must still be included in the dataset, and a comment must be included in the Define-XML document to state that the study does not include the data item.

    • -
    • -

      A Permissible variable should be used in an SDTM dataset wherever appropriate. Although domain specification tables list only some of the Identifier, Timing, and general observation class variables listed in the SDTM, all are permissible unless specifically restricted in this implementation guide (see Section 2.7, SDTM Variables Not Allowed in SDTMIG) or by specific domain assumptions.

      -
        -
      • Domain assumptions that say a Permissible variable is “generally not used” do not prohibit use of the variable.
      • -
      • If a study includes a data item that would be represented in a Permissible variable, then that variable must be included in the SDTM dataset, even if null. Indicate no data were available for that variable in the Define-XML document.
      • -
      • If a study did not include a data item that would be represented in a Permissible variable, then that variable should not be included in the SDTM dataset and should not be declared in the Define-XML document.
      • -
      -
    • -
    -

    Conditionally required variables in ADaM (Cond) - must be included in the dataset in certain circumstances.

    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/Vignette_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/Vignette_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/Vignette_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/drilling.html b/docs/articles/drilling.html deleted file mode 100644 index 94f1b4fa..00000000 --- a/docs/articles/drilling.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -The nitty gritty on the xportr checks ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -

    Fancy stuff goes here

    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/drilling_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/drilling_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/drilling_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/getting_started.html b/docs/articles/getting_started.html deleted file mode 100644 index 766c33a2..00000000 --- a/docs/articles/getting_started.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -Getting Started ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -
    -adsl <- haven::read_sas("inst/extdata/adsl.sas7bdat")
    -
    -var_spec <- readxl::read_xlsx("inst/specs/ADaM_spec.xlsx", sheet = "Variables") %>%
    -  dplyr::rename(type = "Data Type") %>%
    -  rlang::set_names(tolower)
    -  
    -data_spec <- readxl::read_xlsx("inst/specs/ADaM_spec.xlsx", sheet = "Datasets") %>%
    -  rlang::set_names(tolower) %>%
    -  dplyr::rename(label = "description")
    -  
    -adsl %>%
    -  xportr_type(var_spec, "ADSL", "message") %>%
    -  xportr_length(var_spec, "ADSL", "message") %>%
    -  xportr_label(var_spec, "ADSL", "message") %>%
    -  xportr_df_label(data_spec, "ADSL") %>%
    -  xportr_write("adsl.xpt")
    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/getting_started_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/getting_started_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/getting_started_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/index.html b/docs/articles/index.html deleted file mode 100644 index 352bbcec..00000000 --- a/docs/articles/index.html +++ /dev/null @@ -1,79 +0,0 @@ - -Articles ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    All vignettes

    -

    - -
    Getting Started
    -
    -
    -
    -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/articles/metacore.html b/docs/articles/metacore.html deleted file mode 100644 index 9c3dadea..00000000 --- a/docs/articles/metacore.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -Interfacing with metacore Package ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -

    Fancy stuff goes here

    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/metacore_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/metacore_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/metacore_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/metadata.html b/docs/articles/metadata.html deleted file mode 100644 index 2b987086..00000000 --- a/docs/articles/metadata.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Applying and Checking Metadata ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - - -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/metadata_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/metadata_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/metadata_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/moving.html b/docs/articles/moving.html deleted file mode 100644 index f288b3fc..00000000 --- a/docs/articles/moving.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -Beyond the haven and SASxport packages ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -

    Fancy stuff goes here

    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/moving_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/moving_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/moving_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/readme.html b/docs/articles/readme.html deleted file mode 100644 index 18b88769..00000000 --- a/docs/articles/readme.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - -README ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -
    -

    -Tplyr Version 0.1.1

    -

    Welcome to Tplyr! This is the first full and stable release of our package. With this release comes a number of new enhancements, loads of new documentation, and our complete package qualification document.

    -

    If you’ve been keeping up, here are the things that we’ve added since the Beta release in July:

    -
      -
    • Bug Fixes/Enhancements -
        -
      • Count layers were re-factored to improve the execution efficiency
      • -
      • Auto-precision now works without a by variable
      • -
      • Several new assertions have been added to give clearer error messages
      • -
      • Treatment groups within the population data will produce columns in the resulting build, even if no records exist for that treatment group in the target dataset
      • -
      • Risk difference variable names will now populate properly when a cols argument is used
      • -
      • Data frame attributes are cleaned prior to processing to prevent any merge/bind warnings during processing
      • -
      • Total values within count layers are properly filled when the resulting count is 0 (largely impacts risk-difference calculations)
      • -
      -
    • -
    • Feature additions -
        -
      • Shift layers are here!
      • -
      • Flexibility when filling missing values has been enhanced for descriptive statistic layers
      • -
      • Layers can now be named, and those names can be used in get_numeric_data and the new function get_statistics_data to get risk difference raw numbers. Data may also be filtered directly from both functions.
      • -
      • Default formats can now be set via options or at the table level, which allows you to eliminate a great deal of redundant code
      • -
      -
    • -
    -

    As always, we welcome your feedback. If you spot a bug, would like to see a new feature, or if any documentation is unclear - submit an issue through GitHub right here.

    -
    -
    -

    -What is Tplyr?

    -

    dplyr from tidyverse is a grammar of data manipulation. So what does that allow you to do? It gives you, as a data analyst, the capability to easily and intuitively approach the problem of manipulating your data into an analysis ready form. dplyr conceptually breaks things down into verbs that allow you to focus on what you want to do more than how you have to do it.

    -

    Tplyr is designed around a similar concept, but its focus is on building summary tables within the clinical world. In the pharmaceutical industry, a great deal of the data presented in the outputs we create are very similar. For the most part, most of these tables can be broken down into a few categories:

    -
      -
    • Counting for event based variables or categories
    • -
    • Shifting, which is just counting a change in state with a ‘from’ and a ‘to’
    • -
    • Generating descriptive statistics around some continuous variable.
    • -
    -

    For many of the tables that go into a clinical submission, at least when considering safety outputs, the tables are made up of a combination of these approaches. Consider a demographics table - and let’s use an example from the PHUSE project Standard Analyses & Code Sharing - Analyses & Displays Associated with Demographics, Disposition, and Medications in Phase 2-4 Clinical Trials and Integrated Summary Documents.

    -
    -

    Demographics Table

    -
    -

    When you look at this table, you can begin breaking this output down into smaller, redundant, components. These components can be viewed as ‘layers’, and the table as a whole is constructed by stacking the layers. The boxes in the image above represent how you can begin to conceptualize this.

    -
      -
    • First we have Sex, which is made up of n (%) counts.
    • -
    • Next we have Age as a continuous variable, where we have a number of descriptive statistics, including n, mean, standard deviation, median, quartile 1, quartile 3, min, max, and missing values.
    • -
    • After that we have age, but broken into categories - so this is once again n (%) values.
    • -
    • Race - more counting,
    • -
    • Ethnicity - more counting
    • -
    • Weight - and we’re back to descriptive statistics.
    • -
    -

    So we have one table, with 6 summaries (7 including the next page, not shown) - but only 2 different approaches to summaries being performed. In the same way that dplyr is a grammar of data manipulation, Tplyr aims to be a grammar of data summary. The goal of Tplyr is to allow you to program a summary table like you see it on the page, by breaking a larger problem into smaller ‘layers’, and combining them together like you see on the page.

    -

    Enough talking - let’s see some code. In these examples, we will be using data from the PHUSE Test Data Factory based on the original pilot project submission package. Note: You can see our replication of the CDISC pilot using the PHUSE Test Data Factory data here.

    -
    -
    -tplyr_table(adsl, TRT01P, where = SAFFL == "Y") %>% 
    -  add_layer(
    -    group_desc(AGE, by = "Age (years)")
    -  ) %>% 
    -  add_layer(
    -    group_count(AGEGR1, by = "Age Categories n (%)")
    -  ) %>% 
    -  build()
    -
    -

    -The TL;DR

    -

    Here are some of the high level benefits of using Tplyr:

    -
      -
    • Easy construction of table data using an intuitive syntax
    • -
    • Smart string formatting for your numbers that’s easily specified by the user
    • -
    • A great deal of flexibility in what is performed and how it’s presented, without specifying hundreds of parameters
    • -
    • Extensibility (in the future
) - we’re going to open doors to allow you some level of customization.
    • -
    -
    -
    -

    -Where Next

    -

    -
    -
    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/readme_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/readme_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/readme_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/xportr.html b/docs/articles/xportr.html deleted file mode 100644 index 830db069..00000000 --- a/docs/articles/xportr.html +++ /dev/null @@ -1,723 +0,0 @@ - - - - - - - -Getting Started ‱ xportr - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - - - -
    -
    - - - - -
    -

    Getting Started with xportr -

    -

    The demo will make use of a small ADSL data set that is -apart of the {admiral} -package. The script that generates this ADSL dataset can be -created by using this command -admiral::use_ad_template("adsl").

    -

    The ADSL has the following features:

    -
      -
    • 306 observations
    • -
    • 48 variables
    • -
    • Data types other than character and numeric
    • -
    • Missing labels on variables
    • -
    • Missing label for data set
    • -
    • Order of varibles not following specification file
    • -
    • Formats missing
    • -
    -

    To create a fully compliant v5 xpt ADSL dataset, that -was developed using R, we will need to apply the 6 main functions within -the xportr package:

    - -
    -# Loading packages
    -library(dplyr)
    -library(labelled)
    -library(xportr)
    -library(admiral)
    -
    -# Loading in our example data
    -adsl <- admiral::admiral_adsl
    -


    -
    -


    -

    NOTE: Dataset can be created by using this command -admiral::use_ad_template("adsl").

    -
    -
    -

    Preparing your Specification Files -

    -


    -

    In order to make use of the functions within xportr you -will need to create an R data frame that contains your specification -file. You will most likely need to do some pre-processing of your spec -sheets after loading in the spec files for them to work appropriately -with the xportr functions. Please see our example spec -sheets in -system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr") -to see how xportr expects the specification sheets.

    -


    -
    -var_spec <- readxl::read_xlsx(
    -  system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), sheet = "Variables") %>%
    -  dplyr::rename(type = "Data Type") %>%
    -  rlang::set_names(tolower) 
    -  
    -


    -

    Below is a quick snapshot of the specification file pertaining to the -ADSL data set, which we will make use of in the 6 -xportr function calls below. Take note of the order, label, -type, length and format columns.

    -


    -
    -


    -
    -
    -

    xportr_type() -

    -


    -

    In order to be compliant with transport v5 specifications an -xpt file can only have two data types: character and -numeric/dbl. Currently the ADSL data set has chr, dbl, -time, factor and date.

    -
    look_for(adsl, details = TRUE)
    -   pos variable label                      col_type values                    
    -   1   STUDYID  Study Identifier           chr      range: CDISCPILOT01 - CDI~
    -   2   USUBJID  Unique Subject Identifier  chr      range: 01-701-1015 - 01-7~
    -   3   SUBJID   Subject Identifier for th~ chr      range: 1001 - 1448        
    -   4   RFSTDTC  Subject Reference Start D~ chr      range: 2012-07-09 - 2014-~
    -   5   RFENDTC  Subject Reference End Dat~ chr      range: 2012-09-01 - 2015-~
    -   6   RFXSTDTC Date/Time of First Study ~ chr      range: 2012-07-09 - 2014-~
    -   7   RFXENDTC Date/Time of Last Study T~ chr      range: 2012-08-28 - 2015-~
    -   8   RFICDTC  Date/Time of Informed Con~ chr      range:                    
    -   9   RFPENDTC Date/Time of End of Parti~ chr      range: 2012-08-13 - 2015-~
    -   10  DTHDTC   Date/Time of Death         chr      range: 2013-01-14 - 2014-~
    -   11  DTHFL    Subject Death Flag         chr      range: Y - Y              
    -   12  SITEID   Study Site Identifier      chr      range: 701 - 718          
    -   13  AGE      Age                        dbl      range: 50 - 89            
    -   14  AGEU     Age Units                  chr      range: YEARS - YEARS      
    -   15  SEX      Sex                        chr      range: F - M              
    -   16  RACE     Race                       chr      range: AMERICAN INDIAN OR~
    -   17  ETHNIC   Ethnicity                  chr      range: HISPANIC OR LATINO~
    -   18  ARMCD    Planned Arm Code           chr      range: Pbo - Xan_Lo       
    -   19  ARM      Description of Planned Arm chr      range: Placebo - Xanomeli~
    -   20  ACTARMCD Actual Arm Code            chr      range: Pbo - Xan_Lo       
    -   21  ACTARM   Description of Actual Arm  chr      range: Placebo - Xanomeli~
    -   22  COUNTRY  Country                    chr      range: USA - USA          
    -   23  DMDTC    Date/Time of Collection    chr      range: 2012-07-06 - 2014-~
    -   24  DMDY     Study Day of Collection    dbl      range: -37 - -2           
    -   25  TRT01P   Description of Planned Arm chr      range: Placebo - Xanomeli~
    -   26  TRT01A   Description of Actual Arm  chr      range: Placebo - Xanomeli~
    -   27  TRTSDTM  —                          dttm     range: 2012-07-09 - 2014-~
    -   28  TRTEDTM  —                          dttm     range: 2012-08-28 23:59:5~
    -   29  TRTSDT   —                          date     range: 2012-07-09 - 2014-~
    -   30  TRTEDT   —                          date     range: 2012-08-28 - 2015-~
    -   31  TRTDURD  —                          dbl      range: 1 - 212            
    -   32  SCRFDT   —                          date     range: 2012-08-13 - 2014-~
    -   33  EOSDT    —                          date     range: 2012-09-01 - 2015-~
    -   34  EOSSTT   —                          chr      range: COMPLETED - DISCON~
    -   35  FRVDT    —                          date     range: 2013-02-18 - 2014-~
    -   36  DTHDT    —                          date     range: 2013-01-14 - 2014-~
    -   37  DTHDTF   —                          chr      range:                    
    -   38  DTHADY   —                          dbl      range: 12 - 175           
    -   39  LDDTHELD —                          dbl      range: 0 - 2              
    -   40  LSTALVDT —                          date     range: 2012-09-01 - 2015-~
    -   41  AGEGR1   —                          fct      <18                       
    -                                                    18-64                     
    -                                                    >=65                      
    -   42  SAFFL    —                          chr      range: Y - Y              
    -   43  RACEGR1  —                          chr      range: Non-white - White  
    -   44  REGION1  —                          chr      range: NA - NA            
    -   45  LDDTHGR1 —                          chr      range: <= 30 - <= 30      
    -   46  DTH30FL  —                          chr      range: Y - Y              
    -   47  DTHA30FL —                          chr      range:                    
    -   48  DTHB30FL —                          chr      range: Y - Y
    -


    -

    Using xport_type and the supplied specification file, we -can coerce the variables in the ADSL set to be -either numeric or character.

    -


    -
    -adsl_type <- xportr_type(adsl, var_spec, domain = "ADSL", verbose = "message") 
    -


    Now all appropriate types have been applied to the dataset as -seen below.

    -
    look_for(adsl_type, details = TRUE)
    -   pos variable label col_type values                                          
    -   1   STUDYID  —     chr      range: CDISCPILOT01 - CDISCPILOT01              
    -   2   USUBJID  —     chr      range: 01-701-1015 - 01-718-1427                
    -   3   SUBJID   —     chr      range: 1001 - 1448                              
    -   4   RFSTDTC  —     chr      range: 2012-07-09 - 2014-09-02                  
    -   5   RFENDTC  —     chr      range: 2012-09-01 - 2015-03-05                  
    -   6   RFXSTDTC —     chr      range: 2012-07-09 - 2014-09-02                  
    -   7   RFXENDTC —     chr      range: 2012-08-28 - 2015-03-05                  
    -   8   RFICDTC  —     chr      range:                                          
    -   9   RFPENDTC —     chr      range: 2012-08-13 - 2015-03-05T14:40            
    -   10  DTHDTC   —     chr      range: 2013-01-14 - 2014-11-01                  
    -   11  DTHFL    —     chr      range: Y - Y                                    
    -   12  SITEID   —     chr      range: 701 - 718                                
    -   13  AGE      —     dbl      range: 50 - 89                                  
    -   14  AGEU     —     chr      range: YEARS - YEARS                            
    -   15  SEX      —     chr      range: F - M                                    
    -   16  RACE     —     chr      range: AMERICAN INDIAN OR ALASKA NATIVE - WHITE 
    -   17  ETHNIC   —     chr      range: HISPANIC OR LATINO - NOT HISPANIC OR LAT~
    -   18  ARMCD    —     chr      range: Pbo - Xan_Lo                             
    -   19  ARM      —     chr      range: Placebo - Xanomeline Low Dose            
    -   20  ACTARMCD —     chr      range: Pbo - Xan_Lo                             
    -   21  ACTARM   —     chr      range: Placebo - Xanomeline Low Dose            
    -   22  COUNTRY  —     chr      range: USA - USA                                
    -   23  DMDTC    —     chr      range: 2012-07-06 - 2014-08-29                  
    -   24  DMDY     —     dbl      range: -37 - -2                                 
    -   25  TRT01P   —     chr      range: Placebo - Xanomeline Low Dose            
    -   26  TRT01A   —     chr      range: Placebo - Xanomeline Low Dose            
    -   27  TRTSDTM  —     dbl      range: 1341792000 - 1409616000                  
    -   28  TRTEDTM  —     dbl      range: 1346198399 - 1425599999                  
    -   29  TRTSDT   —     dbl      range: 15530 - 16315                            
    -   30  TRTEDT   —     dbl      range: 15580 - 16499                            
    -   31  TRTDURD  —     dbl      range: 1 - 212                                  
    -   32  SCRFDT   —     dbl      range: 15565 - 16181                            
    -   33  EOSDT    —     dbl      range: 15584 - 16499                            
    -   34  EOSSTT   —     chr      range: COMPLETED - DISCONTINUED                 
    -   35  FRVDT    —     dbl      range: 15754 - 16389                            
    -   36  DTHDT    —     dbl      range: 15719 - 16375                            
    -   37  DTHDTF   —     chr      range:                                          
    -   38  DTHADY   —     dbl      range: 12 - 175                                 
    -   39  LDDTHELD —     dbl      range: 0 - 2                                    
    -   40  LSTALVDT —     dbl      range: 15584 - 16499                            
    -   41  AGEGR1   —     chr      range: >=65 - 18-64                             
    -   42  SAFFL    —     chr      range: Y - Y                                    
    -   43  RACEGR1  —     chr      range: Non-white - White                        
    -   44  REGION1  —     chr      range: NA - NA                                  
    -   45  LDDTHGR1 —     chr      range: <= 30 - <= 30                            
    -   46  DTH30FL  —     chr      range: Y - Y                                    
    -   47  DTHA30FL —     chr      range:                                          
    -   48  DTHB30FL —     chr      range: Y - Y
    -
    -
    -

    xportr_length() -

    -


    -

    Next we can apply the lengths from a variable level specification -file to the data frame. xportr_length will identify -variables that are missing from your specification file. The function -will also alert you to how many lengths have been applied successfully. -Before we apply the lengths lets verify that no lengths have been -applied to the original dataframe.

    -


    -
    -str(adsl)
    -
      tibble [306 × 48] (S3: tbl_df/tbl/data.frame)
    -   $ STUDYID : chr [1:306] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
    -    ..- attr(*, "label")= chr "Study Identifier"
    -   $ USUBJID : chr [1:306] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
    -    ..- attr(*, "label")= chr "Unique Subject Identifier"
    -   $ SUBJID  : chr [1:306] "1015" "1023" "1028" "1033" ...
    -    ..- attr(*, "label")= chr "Subject Identifier for the Study"
    -   $ RFSTDTC : chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
    -    ..- attr(*, "label")= chr "Subject Reference Start Date/Time"
    -   $ RFENDTC : chr [1:306] "2014-07-02" "2012-09-02" "2014-01-14" "2014-04-14" ...
    -    ..- attr(*, "label")= chr "Subject Reference End Date/Time"
    -   $ RFXSTDTC: chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
    -    ..- attr(*, "label")= chr "Date/Time of First Study Treatment"
    -   $ RFXENDTC: chr [1:306] "2014-07-02" "2012-09-01" "2014-01-14" "2014-03-31" ...
    -    ..- attr(*, "label")= chr "Date/Time of Last Study Treatment"
    -   $ RFICDTC : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Date/Time of Informed Consent"
    -   $ RFPENDTC: chr [1:306] "2014-07-02T11:45" "2013-02-18" "2014-01-14T11:10" "2014-09-15" ...
    -    ..- attr(*, "label")= chr "Date/Time of End of Participation"
    -   $ DTHDTC  : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Date/Time of Death"
    -   $ DTHFL   : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Subject Death Flag"
    -   $ SITEID  : chr [1:306] "701" "701" "701" "701" ...
    -    ..- attr(*, "label")= chr "Study Site Identifier"
    -   $ AGE     : num [1:306] 63 64 71 74 77 85 59 68 81 84 ...
    -    ..- attr(*, "label")= chr "Age"
    -   $ AGEU    : chr [1:306] "YEARS" "YEARS" "YEARS" "YEARS" ...
    -    ..- attr(*, "label")= chr "Age Units"
    -   $ SEX     : chr [1:306] "F" "M" "M" "M" ...
    -    ..- attr(*, "label")= chr "Sex"
    -   $ RACE    : chr [1:306] "WHITE" "WHITE" "WHITE" "WHITE" ...
    -    ..- attr(*, "label")= chr "Race"
    -   $ ETHNIC  : chr [1:306] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
    -    ..- attr(*, "label")= chr "Ethnicity"
    -   $ ARMCD   : chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
    -    ..- attr(*, "label")= chr "Planned Arm Code"
    -   $ ARM     : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Planned Arm"
    -   $ ACTARMCD: chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
    -    ..- attr(*, "label")= chr "Actual Arm Code"
    -   $ ACTARM  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Actual Arm"
    -   $ COUNTRY : chr [1:306] "USA" "USA" "USA" "USA" ...
    -    ..- attr(*, "label")= chr "Country"
    -   $ DMDTC   : chr [1:306] "2013-12-26" "2012-07-22" "2013-07-11" "2014-03-10" ...
    -    ..- attr(*, "label")= chr "Date/Time of Collection"
    -   $ DMDY    : num [1:306] -7 -14 -8 -8 -7 -21 NA -9 -13 -7 ...
    -    ..- attr(*, "label")= chr "Study Day of Collection"
    -   $ TRT01P  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Planned Arm"
    -   $ TRT01A  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Actual Arm"
    -   $ TRTSDTM : iso_dtm[1:306], format: "2014-01-02" "2012-08-05" ...
    -   $ TRTEDTM : iso_dtm[1:306], format: "2014-07-02 23:59:59" "2012-09-01 23:59:59" ...
    -   $ TRTSDT  : Date[1:306], format: "2014-01-02" "2012-08-05" ...
    -   $ TRTEDT  : Date[1:306], format: "2014-07-02" "2012-09-01" ...
    -   $ TRTDURD : num [1:306] 182 28 180 14 183 26 NA 190 10 55 ...
    -   $ SCRFDT  : Date[1:306], format: NA NA ...
    -   $ EOSDT   : Date[1:306], format: "2014-07-02" "2012-09-02" ...
    -   $ EOSSTT  : chr [1:306] "COMPLETED" "DISCONTINUED" "COMPLETED" "DISCONTINUED" ...
    -   $ FRVDT   : Date[1:306], format: NA "2013-02-18" ...
    -   $ DTHDT   : Date[1:306], format: NA NA ...
    -   $ DTHDTF  : chr [1:306] NA NA NA NA ...
    -   $ DTHADY  : num [1:306] NA NA NA NA NA NA NA NA NA NA ...
    -   $ LDDTHELD: num [1:306] NA NA NA NA NA NA NA NA NA NA ...
    -   $ LSTALVDT: Date[1:306], format: "2014-07-02" "2012-09-02" ...
    -   $ AGEGR1  : Factor w/ 3 levels "<18","18-64",..: 2 2 3 3 3 3 2 3 3 3 ...
    -   $ SAFFL   : chr [1:306] "Y" "Y" "Y" "Y" ...
    -   $ RACEGR1 : chr [1:306] "White" "White" "White" "White" ...
    -   $ REGION1 : chr [1:306] "NA" "NA" "NA" "NA" ...
    -   $ LDDTHGR1: chr [1:306] NA NA NA NA ...
    -   $ DTH30FL : chr [1:306] NA NA NA NA ...
    -   $ DTHA30FL: chr [1:306] NA NA NA NA ...
    -   $ DTHB30FL: chr [1:306] NA NA NA NA ...
    -


    -

    No lengths have been applied to the variables as seen in the printout -- the lengths would be in the attr part of each variables. -Let’s now use xportr_length to apply our lengths from the -specification file.

    -
    -adsl_length <- adsl %>% xportr_length(var_spec, domain = "ADSL", "message")
    -


    -
    -str(adsl_length)
    -
      tibble [306 × 48] (S3: tbl_df/tbl/data.frame)
    -   $ STUDYID : chr [1:306] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
    -    ..- attr(*, "label")= chr "Study Identifier"
    -    ..- attr(*, "width")= num 21
    -   $ USUBJID : chr [1:306] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
    -    ..- attr(*, "label")= chr "Unique Subject Identifier"
    -    ..- attr(*, "width")= num 30
    -   $ SUBJID  : chr [1:306] "1015" "1023" "1028" "1033" ...
    -    ..- attr(*, "label")= chr "Subject Identifier for the Study"
    -    ..- attr(*, "width")= num 8
    -   $ RFSTDTC : chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
    -    ..- attr(*, "label")= chr "Subject Reference Start Date/Time"
    -    ..- attr(*, "width")= num 19
    -   $ RFENDTC : chr [1:306] "2014-07-02" "2012-09-02" "2014-01-14" "2014-04-14" ...
    -    ..- attr(*, "label")= chr "Subject Reference End Date/Time"
    -    ..- attr(*, "width")= num 19
    -   $ RFXSTDTC: chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
    -    ..- attr(*, "label")= chr "Date/Time of First Study Treatment"
    -    ..- attr(*, "width")= num 19
    -   $ RFXENDTC: chr [1:306] "2014-07-02" "2012-09-01" "2014-01-14" "2014-03-31" ...
    -    ..- attr(*, "label")= chr "Date/Time of Last Study Treatment"
    -    ..- attr(*, "width")= num 19
    -   $ RFICDTC : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Date/Time of Informed Consent"
    -    ..- attr(*, "width")= num 19
    -   $ RFPENDTC: chr [1:306] "2014-07-02T11:45" "2013-02-18" "2014-01-14T11:10" "2014-09-15" ...
    -    ..- attr(*, "label")= chr "Date/Time of End of Participation"
    -    ..- attr(*, "width")= num 19
    -   $ DTHDTC  : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Date/Time of Death"
    -    ..- attr(*, "width")= num 19
    -   $ DTHFL   : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Subject Death Flag"
    -    ..- attr(*, "width")= num 2
    -   $ SITEID  : chr [1:306] "701" "701" "701" "701" ...
    -    ..- attr(*, "label")= chr "Study Site Identifier"
    -    ..- attr(*, "width")= num 5
    -   $ AGE     : num [1:306] 63 64 71 74 77 85 59 68 81 84 ...
    -    ..- attr(*, "label")= chr "Age"
    -    ..- attr(*, "width")= num 8
    -   $ AGEU    : chr [1:306] "YEARS" "YEARS" "YEARS" "YEARS" ...
    -    ..- attr(*, "label")= chr "Age Units"
    -    ..- attr(*, "width")= num 10
    -   $ SEX     : chr [1:306] "F" "M" "M" "M" ...
    -    ..- attr(*, "label")= chr "Sex"
    -    ..- attr(*, "width")= num 1
    -   $ RACE    : chr [1:306] "WHITE" "WHITE" "WHITE" "WHITE" ...
    -    ..- attr(*, "label")= chr "Race"
    -    ..- attr(*, "width")= num 60
    -   $ ETHNIC  : chr [1:306] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
    -    ..- attr(*, "label")= chr "Ethnicity"
    -    ..- attr(*, "width")= num 100
    -   $ ARMCD   : chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
    -    ..- attr(*, "label")= chr "Planned Arm Code"
    -    ..- attr(*, "width")= num 20
    -   $ ARM     : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Planned Arm"
    -    ..- attr(*, "width")= num 200
    -   $ ACTARMCD: chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
    -    ..- attr(*, "label")= chr "Actual Arm Code"
    -    ..- attr(*, "width")= num 20
    -   $ ACTARM  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Actual Arm"
    -    ..- attr(*, "width")= num 200
    -   $ COUNTRY : chr [1:306] "USA" "USA" "USA" "USA" ...
    -    ..- attr(*, "label")= chr "Country"
    -    ..- attr(*, "width")= num 3
    -   $ DMDTC   : chr [1:306] "2013-12-26" "2012-07-22" "2013-07-11" "2014-03-10" ...
    -    ..- attr(*, "label")= chr "Date/Time of Collection"
    -    ..- attr(*, "width")= num 19
    -   $ DMDY    : num [1:306] -7 -14 -8 -8 -7 -21 NA -9 -13 -7 ...
    -    ..- attr(*, "label")= chr "Study Day of Collection"
    -    ..- attr(*, "width")= num 8
    -   $ TRT01P  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Planned Arm"
    -    ..- attr(*, "width")= num 40
    -   $ TRT01A  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Actual Arm"
    -    ..- attr(*, "width")= num 40
    -   $ TRTSDTM : iso_dtm[1:306], format: "2014-01-02" "2012-08-05" ...
    -   $ TRTEDTM : iso_dtm[1:306], format: "2014-07-02 23:59:59" "2012-09-01 23:59:59" ...
    -   $ TRTSDT  : Date[1:306], format: "2014-01-02" "2012-08-05" ...
    -   $ TRTEDT  : Date[1:306], format: "2014-07-02" "2012-09-01" ...
    -   $ TRTDURD : num [1:306] 182 28 180 14 183 26 NA 190 10 55 ...
    -    ..- attr(*, "width")= num 8
    -   $ SCRFDT  : Date[1:306], format: NA NA ...
    -   $ EOSDT   : Date[1:306], format: "2014-07-02" "2012-09-02" ...
    -   $ EOSSTT  : chr [1:306] "COMPLETED" "DISCONTINUED" "COMPLETED" "DISCONTINUED" ...
    -    ..- attr(*, "width")= num 200
    -   $ FRVDT   : Date[1:306], format: NA "2013-02-18" ...
    -   $ DTHDT   : Date[1:306], format: NA NA ...
    -   $ DTHDTF  : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 2
    -   $ DTHADY  : num [1:306] NA NA NA NA NA NA NA NA NA NA ...
    -    ..- attr(*, "width")= num 8
    -   $ LDDTHELD: num [1:306] NA NA NA NA NA NA NA NA NA NA ...
    -    ..- attr(*, "width")= num 8
    -   $ LSTALVDT: Date[1:306], format: "2014-07-02" "2012-09-02" ...
    -   $ AGEGR1  : Factor w/ 3 levels "<18","18-64",..: 2 2 3 3 3 3 2 3 3 3 ...
    -    ..- attr(*, "width")= num 20
    -   $ SAFFL   : chr [1:306] "Y" "Y" "Y" "Y" ...
    -    ..- attr(*, "width")= num 2
    -   $ RACEGR1 : chr [1:306] "White" "White" "White" "White" ...
    -    ..- attr(*, "width")= num 200
    -   $ REGION1 : chr [1:306] "NA" "NA" "NA" "NA" ...
    -    ..- attr(*, "width")= num 80
    -   $ LDDTHGR1: chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 200
    -   $ DTH30FL : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 200
    -   $ DTHA30FL: chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 200
    -   $ DTHB30FL: chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 200
    -   - attr(*, "_xportr.df_arg_")= chr "ADSL"
    -

    Note the additional attr(*, "width")= after each -variable with the width. These have been directly applied from the -specification file that we loaded above!

    -
    -
    -

    xportr_order() -

    -

    Please note that the order of the ADSL variables, see -above, does not match specification file order column. We can quickly -remedy this with a call to xportr_order(). Note that the -variable SITEID has been moved as well as many others to -match the specification file order column.

    -
    -adsl_order <- xportr_order(adsl,var_spec, domain = "ADSL", verbose = "message") 
    -
    - -
    -
    -

    xportr_format() -

    -

    Now we apply formats to the dataset. These will typically be -DATE9., DATETIME20 or TIME5, but -many others can be used. Notice that 8 Date/Time variables are missing a -format in our ADSL dataset. Here we just take a peak at a -few TRT variables, which have a NULL -format.

    -
    -attr(adsl$TRTSDT, "format.sas")
    -  NULL
    -attr(adsl$TRTEDT, "format.sas")
    -  NULL
    -attr(adsl$TRTSDTM, "format.sas")
    -  NULL
    -attr(adsl$TRTEDTM, "format.sas")
    -  NULL
    -

    Using our xportr_format() we apply our formats.

    -
    -adsl_fmt <- adsl %>% xportr_format(var_spec, domain = "ADSL", "message")
    -
    attr(adsl_fmt$TRTSDT, "format.sas")
    -  [1] "DATE9."
    -attr(adsl_fmt$TRTEDT, "format.sas")
    -  [1] "DATE9."
    -attr(adsl_fmt$TRTSDTM, "format.sas")
    -  [1] "DATETIME20."
    -attr(adsl_fmt$TRTEDTM, "format.sas")
    -  [1] "DATETIME20."
    -
    -
    -

    xportr_label() -

    -


    -

    Please observe that our ADSL dataset is missing many -variable labels. Sometimes these labels can be lost while using R’s -function. However, A CDISC compliant data set needs to have each -variable with a variable label.

    -
    look_for(adsl, details = FALSE)
    -   pos variable label                             
    -    1  STUDYID  Study Identifier                  
    -    2  USUBJID  Unique Subject Identifier         
    -    3  SUBJID   Subject Identifier for the Study  
    -    4  RFSTDTC  Subject Reference Start Date/Time 
    -    5  RFENDTC  Subject Reference End Date/Time   
    -    6  RFXSTDTC Date/Time of First Study Treatment
    -    7  RFXENDTC Date/Time of Last Study Treatment 
    -    8  RFICDTC  Date/Time of Informed Consent     
    -    9  RFPENDTC Date/Time of End of Participation 
    -   10  DTHDTC   Date/Time of Death                
    -   11  DTHFL    Subject Death Flag                
    -   12  SITEID   Study Site Identifier             
    -   13  AGE      Age                               
    -   14  AGEU     Age Units                         
    -   15  SEX      Sex                               
    -   16  RACE     Race                              
    -   17  ETHNIC   Ethnicity                         
    -   18  ARMCD    Planned Arm Code                  
    -   19  ARM      Description of Planned Arm        
    -   20  ACTARMCD Actual Arm Code                   
    -   21  ACTARM   Description of Actual Arm         
    -   22  COUNTRY  Country                           
    -   23  DMDTC    Date/Time of Collection           
    -   24  DMDY     Study Day of Collection           
    -   25  TRT01P   Description of Planned Arm        
    -   26  TRT01A   Description of Actual Arm         
    -   27  TRTSDTM  —                                 
    -   28  TRTEDTM  —                                 
    -   29  TRTSDT   —                                 
    -   30  TRTEDT   —                                 
    -   31  TRTDURD  —                                 
    -   32  SCRFDT   —                                 
    -   33  EOSDT    —                                 
    -   34  EOSSTT   —                                 
    -   35  FRVDT    —                                 
    -   36  DTHDT    —                                 
    -   37  DTHDTF   —                                 
    -   38  DTHADY   —                                 
    -   39  LDDTHELD —                                 
    -   40  LSTALVDT —                                 
    -   41  AGEGR1   —                                 
    -   42  SAFFL    —                                 
    -   43  RACEGR1  —                                 
    -   44  REGION1  —                                 
    -   45  LDDTHGR1 —                                 
    -   46  DTH30FL  —                                 
    -   47  DTHA30FL —                                 
    -   48  DTHB30FL —
    -


    -

    Using the xport_label function we can take the -specifications file and label all the variables available. -xportr_label will produce a warning message if you the -variable in the data set is not in the specification file.

    -


    -
    -adsl_update <- adsl %>% xportr_label(var_spec, domain = "ADSL", "message")
    -
    look_for(adsl_update, details = FALSE)
    -   pos variable label                                  
    -    1  STUDYID  Study Identifier                       
    -    2  USUBJID  Unique Subject Identifier              
    -    3  SUBJID   Subject Identifier for the Study       
    -    4  RFSTDTC  Subject Reference Start Date/Time      
    -    5  RFENDTC  Subject Reference End Date/Time        
    -    6  RFXSTDTC Date/Time of First Study Treatment     
    -    7  RFXENDTC Date/Time of Last Study Treatment      
    -    8  RFICDTC  Date/Time of Informed Consent          
    -    9  RFPENDTC Date/Time of End of Participation      
    -   10  DTHDTC   Date / Time of Death                   
    -   11  DTHFL    Subject Death Flag                     
    -   12  SITEID   Study Site Identifier                  
    -   13  AGE      Age                                    
    -   14  AGEU     Age Units                              
    -   15  SEX      Sex                                    
    -   16  RACE     Race                                   
    -   17  ETHNIC   Ethnicity                              
    -   18  ARMCD    Planned Arm Code                       
    -   19  ARM      Description of Planned Arm             
    -   20  ACTARMCD Actual Arm Code                        
    -   21  ACTARM   Description of Actual Arm              
    -   22  COUNTRY  Country                                
    -   23  DMDTC    Date/Time of Collection                
    -   24  DMDY     Study Day of Collection                
    -   25  TRT01P   Planned Treatment for Period 01        
    -   26  TRT01A   Actual Treatment for Period 01         
    -   27  TRTSDTM  Datetime of First Exposure to Treatment
    -   28  TRTEDTM  Datetime of Last Exposure to Treatment 
    -   29  TRTSDT   Date of First Exposure to Treatment    
    -   30  TRTEDT   Date of Last Exposure to Treatment     
    -   31  TRTDURD  Total Duration of Trt  (days)          
    -   32  SCRFDT   Screen Failure Date                    
    -   33  EOSDT    End of Study Date                      
    -   34  EOSSTT   End of Study Status                    
    -   35  FRVDT    Final Retrievel Visit Date             
    -   36  DTHDT    Death Date                             
    -   37  DTHDTF   Date of Death Imputation Flag          
    -   38  DTHADY   Relative Day of Death                  
    -   39  LDDTHELD Elapsed Days from Last Dose to Death   
    -   40  LSTALVDT Date Last Known Alive                  
    -   41  AGEGR1   Pooled Age Group 1                     
    -   42  SAFFL    Safety Population Flag                 
    -   43  RACEGR1  Pooled Race Group 1                    
    -   44  REGION1  Geographic Region 1                    
    -   45  LDDTHGR1 Last Does to Death Group               
    -   46  DTH30FL  Under 30  Group                        
    -   47  DTHA30FL Over 30  Group                         
    -   48  DTHB30FL Over 30 plus 30 days Group
    -
    -
    -

    xportr_write() -

    -


    -

    Finally, we arrive at exporting the R data frame object as a xpt file -with the function xportr_write(). The xpt file will be -written directly to your current working directory. To make it more -interesting, we have put together all six functions with the magrittr -pipe, %>%. A user can now apply types, length, variable -labels, formats, data set label and write out their final xpt file in -one pipe! Appropriate warnings and messages will be supplied to a user -to the console for any potential issues before sending off to standard -clinical data set validator application or data reviewers.

    -
    -adsl %>%
    -  xportr_type(var_spec, "ADSL", "message") %>%
    -  xportr_length(var_spec, "ADSL", "message") %>%
    -  xportr_label(var_spec, "ADSL", "message") %>%
    -  xportr_order(var_spec, "ADSL", "message") %>% 
    -  xportr_format(var_spec, "ADSL", "message") %>% 
    -  xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset")
    -

    That’s it! We now have a xpt file created in R with all appropriate -types, lengths, labels, ordering and formats from our specification -file.

    -

    As always, we welcome your feedback. If you spot a bug, would like to -see a new feature, or if any documentation is unclear - submit an issue -on xportr’s -Github page.

    -
    -
    - - - -
    - - - -
    - -
    -

    -

    Site built with pkgdown 2.0.3.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/articles/xportr_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/xportr_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/xportr_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/xportr_files/crosstalk-1.1.1/css/crosstalk.css b/docs/articles/xportr_files/crosstalk-1.1.1/css/crosstalk.css deleted file mode 100644 index 46befd2e..00000000 --- a/docs/articles/xportr_files/crosstalk-1.1.1/css/crosstalk.css +++ /dev/null @@ -1,27 +0,0 @@ -/* Adjust margins outwards, so column contents line up with the edges of the - parent of container-fluid. */ -.container-fluid.crosstalk-bscols { - margin-left: -30px; - margin-right: -30px; - white-space: normal; -} - -/* But don't adjust the margins outwards if we're directly under the body, - i.e. we were the top-level of something at the console. */ -body > .container-fluid.crosstalk-bscols { - margin-left: auto; - margin-right: auto; -} - -.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { - display: inline-block; - padding-right: 12px; - vertical-align: top; -} - -@media only screen and (max-width:480px) { - .crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { - display: block; - padding-right: inherit; - } -} diff --git a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js b/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js deleted file mode 100644 index fd9eb53d..00000000 --- a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js +++ /dev/null @@ -1,1474 +0,0 @@ -(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o b) { - return 1; - } -} - -/** - * @private - */ - -var FilterSet = function () { - function FilterSet() { - _classCallCheck(this, FilterSet); - - this.reset(); - } - - _createClass(FilterSet, [{ - key: "reset", - value: function reset() { - // Key: handle ID, Value: array of selected keys, or null - this._handles = {}; - // Key: key string, Value: count of handles that include it - this._keys = {}; - this._value = null; - this._activeHandles = 0; - } - }, { - key: "update", - value: function update(handleId, keys) { - if (keys !== null) { - keys = keys.slice(0); // clone before sorting - keys.sort(naturalComparator); - } - - var _diffSortedLists = (0, _util.diffSortedLists)(this._handles[handleId], keys), - added = _diffSortedLists.added, - removed = _diffSortedLists.removed; - - this._handles[handleId] = keys; - - for (var i = 0; i < added.length; i++) { - this._keys[added[i]] = (this._keys[added[i]] || 0) + 1; - } - for (var _i = 0; _i < removed.length; _i++) { - this._keys[removed[_i]]--; - } - - this._updateValue(keys); - } - - /** - * @param {string[]} keys Sorted array of strings that indicate - * a superset of possible keys. - * @private - */ - - }, { - key: "_updateValue", - value: function _updateValue() { - var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._allKeys; - - var handleCount = Object.keys(this._handles).length; - if (handleCount === 0) { - this._value = null; - } else { - this._value = []; - for (var i = 0; i < keys.length; i++) { - var count = this._keys[keys[i]]; - if (count === handleCount) { - this._value.push(keys[i]); - } - } - } - } - }, { - key: "clear", - value: function clear(handleId) { - if (typeof this._handles[handleId] === "undefined") { - return; - } - - var keys = this._handles[handleId]; - if (!keys) { - keys = []; - } - - for (var i = 0; i < keys.length; i++) { - this._keys[keys[i]]--; - } - delete this._handles[handleId]; - - this._updateValue(); - } - }, { - key: "value", - get: function get() { - return this._value; - } - }, { - key: "_allKeys", - get: function get() { - var allKeys = Object.keys(this._keys); - allKeys.sort(naturalComparator); - return allKeys; - } - }]); - - return FilterSet; -}(); - -exports.default = FilterSet; - -},{"./util":11}],4:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.default = group; - -var _var2 = require("./var"); - -var _var3 = _interopRequireDefault(_var2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -// Use a global so that multiple copies of crosstalk.js can be loaded and still -// have groups behave as singletons across all copies. -global.__crosstalk_groups = global.__crosstalk_groups || {}; -var groups = global.__crosstalk_groups; - -function group(groupName) { - if (groupName && typeof groupName === "string") { - if (!groups.hasOwnProperty(groupName)) { - groups[groupName] = new Group(groupName); - } - return groups[groupName]; - } else if ((typeof groupName === "undefined" ? "undefined" : _typeof(groupName)) === "object" && groupName._vars && groupName.var) { - // Appears to already be a group object - return groupName; - } else if (Array.isArray(groupName) && groupName.length == 1 && typeof groupName[0] === "string") { - return group(groupName[0]); - } else { - throw new Error("Invalid groupName argument"); - } -} - -var Group = function () { - function Group(name) { - _classCallCheck(this, Group); - - this.name = name; - this._vars = {}; - } - - _createClass(Group, [{ - key: "var", - value: function _var(name) { - if (!name || typeof name !== "string") { - throw new Error("Invalid var name"); - } - - if (!this._vars.hasOwnProperty(name)) this._vars[name] = new _var3.default(this, name); - return this._vars[name]; - } - }, { - key: "has", - value: function has(name) { - if (!name || typeof name !== "string") { - throw new Error("Invalid var name"); - } - - return this._vars.hasOwnProperty(name); - } - }]); - - return Group; -}(); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./var":12}],5:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _group = require("./group"); - -var _group2 = _interopRequireDefault(_group); - -var _selection = require("./selection"); - -var _filter = require("./filter"); - -var _input = require("./input"); - -require("./input_selectize"); - -require("./input_checkboxgroup"); - -require("./input_slider"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var defaultGroup = (0, _group2.default)("default"); - -function var_(name) { - return defaultGroup.var(name); -} - -function has(name) { - return defaultGroup.has(name); -} - -if (global.Shiny) { - global.Shiny.addCustomMessageHandler("update-client-value", function (message) { - if (typeof message.group === "string") { - (0, _group2.default)(message.group).var(message.name).set(message.value); - } else { - var_(message.name).set(message.value); - } - }); -} - -var crosstalk = { - group: _group2.default, - var: var_, - has: has, - SelectionHandle: _selection.SelectionHandle, - FilterHandle: _filter.FilterHandle, - bind: _input.bind -}; - -/** - * @namespace crosstalk - */ -exports.default = crosstalk; - -global.crosstalk = crosstalk; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./group":4,"./input":6,"./input_checkboxgroup":7,"./input_selectize":8,"./input_slider":9,"./selection":10}],6:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.register = register; -exports.bind = bind; -var $ = global.jQuery; - -var bindings = {}; - -function register(reg) { - bindings[reg.className] = reg; - if (global.document && global.document.readyState !== "complete") { - $(function () { - bind(); - }); - } else if (global.document) { - setTimeout(bind, 100); - } -} - -function bind() { - Object.keys(bindings).forEach(function (className) { - var binding = bindings[className]; - $("." + binding.className).not(".crosstalk-input-bound").each(function (i, el) { - bindInstance(binding, el); - }); - }); -} - -// Escape jQuery identifier -function $escape(val) { - return val.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); -} - -function bindEl(el) { - var $el = $(el); - Object.keys(bindings).forEach(function (className) { - if ($el.hasClass(className) && !$el.hasClass("crosstalk-input-bound")) { - var binding = bindings[className]; - bindInstance(binding, el); - } - }); -} - -function bindInstance(binding, el) { - var jsonEl = $(el).find("script[type='application/json'][data-for='" + $escape(el.id) + "']"); - var data = JSON.parse(jsonEl[0].innerText); - - var instance = binding.factory(el, data); - $(el).data("crosstalk-instance", instance); - $(el).addClass("crosstalk-input-bound"); -} - -if (global.Shiny) { - var inputBinding = new global.Shiny.InputBinding(); - var _$ = global.jQuery; - _$.extend(inputBinding, { - find: function find(scope) { - return _$(scope).find(".crosstalk-input"); - }, - initialize: function initialize(el) { - if (!_$(el).hasClass("crosstalk-input-bound")) { - bindEl(el); - } - }, - getId: function getId(el) { - return el.id; - }, - getValue: function getValue(el) {}, - setValue: function setValue(el, value) {}, - receiveMessage: function receiveMessage(el, data) {}, - subscribe: function subscribe(el, callback) { - _$(el).data("crosstalk-instance").resume(); - }, - unsubscribe: function unsubscribe(el) { - _$(el).data("crosstalk-instance").suspend(); - } - }); - global.Shiny.inputBindings.register(inputBinding, "crosstalk.inputBinding"); -} - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],7:[function(require,module,exports){ -(function (global){ -"use strict"; - -var _input = require("./input"); - -var input = _interopRequireWildcard(_input); - -var _filter = require("./filter"); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var $ = global.jQuery; - -input.register({ - className: "crosstalk-input-checkboxgroup", - - factory: function factory(el, data) { - /* - * map: {"groupA": ["keyA", "keyB", ...], ...} - * group: "ct-groupname" - */ - var ctHandle = new _filter.FilterHandle(data.group); - - var lastKnownKeys = void 0; - var $el = $(el); - $el.on("change", "input[type='checkbox']", function () { - var checked = $el.find("input[type='checkbox']:checked"); - if (checked.length === 0) { - lastKnownKeys = null; - ctHandle.clear(); - } else { - var keys = {}; - checked.each(function () { - data.map[this.value].forEach(function (key) { - keys[key] = true; - }); - }); - var keyArray = Object.keys(keys); - keyArray.sort(); - lastKnownKeys = keyArray; - ctHandle.set(keyArray); - } - }); - - return { - suspend: function suspend() { - ctHandle.clear(); - }, - resume: function resume() { - if (lastKnownKeys) ctHandle.set(lastKnownKeys); - } - }; - } -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./input":6}],8:[function(require,module,exports){ -(function (global){ -"use strict"; - -var _input = require("./input"); - -var input = _interopRequireWildcard(_input); - -var _util = require("./util"); - -var util = _interopRequireWildcard(_util); - -var _filter = require("./filter"); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var $ = global.jQuery; - -input.register({ - className: "crosstalk-input-select", - - factory: function factory(el, data) { - /* - * items: {value: [...], label: [...]} - * map: {"groupA": ["keyA", "keyB", ...], ...} - * group: "ct-groupname" - */ - - var first = [{ value: "", label: "(All)" }]; - var items = util.dataframeToD3(data.items); - var opts = { - options: first.concat(items), - valueField: "value", - labelField: "label", - searchField: "label" - }; - - var select = $(el).find("select")[0]; - - var selectize = $(select).selectize(opts)[0].selectize; - - var ctHandle = new _filter.FilterHandle(data.group); - - var lastKnownKeys = void 0; - selectize.on("change", function () { - if (selectize.items.length === 0) { - lastKnownKeys = null; - ctHandle.clear(); - } else { - var keys = {}; - selectize.items.forEach(function (group) { - data.map[group].forEach(function (key) { - keys[key] = true; - }); - }); - var keyArray = Object.keys(keys); - keyArray.sort(); - lastKnownKeys = keyArray; - ctHandle.set(keyArray); - } - }); - - return { - suspend: function suspend() { - ctHandle.clear(); - }, - resume: function resume() { - if (lastKnownKeys) ctHandle.set(lastKnownKeys); - } - }; - } -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./input":6,"./util":11}],9:[function(require,module,exports){ -(function (global){ -"use strict"; - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _input = require("./input"); - -var input = _interopRequireWildcard(_input); - -var _filter = require("./filter"); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var $ = global.jQuery; -var strftime = global.strftime; - -input.register({ - className: "crosstalk-input-slider", - - factory: function factory(el, data) { - /* - * map: {"groupA": ["keyA", "keyB", ...], ...} - * group: "ct-groupname" - */ - var ctHandle = new _filter.FilterHandle(data.group); - - var opts = {}; - var $el = $(el).find("input"); - var dataType = $el.data("data-type"); - var timeFormat = $el.data("time-format"); - var round = $el.data("round"); - var timeFormatter = void 0; - - // Set up formatting functions - if (dataType === "date") { - timeFormatter = strftime.utc(); - opts.prettify = function (num) { - return timeFormatter(timeFormat, new Date(num)); - }; - } else if (dataType === "datetime") { - var timezone = $el.data("timezone"); - if (timezone) timeFormatter = strftime.timezone(timezone);else timeFormatter = strftime; - - opts.prettify = function (num) { - return timeFormatter(timeFormat, new Date(num)); - }; - } else if (dataType === "number") { - if (typeof round !== "undefined") opts.prettify = function (num) { - var factor = Math.pow(10, round); - return Math.round(num * factor) / factor; - }; - } - - $el.ionRangeSlider(opts); - - function getValue() { - var result = $el.data("ionRangeSlider").result; - - // Function for converting numeric value from slider to appropriate type. - var convert = void 0; - var dataType = $el.data("data-type"); - if (dataType === "date") { - convert = function convert(val) { - return formatDateUTC(new Date(+val)); - }; - } else if (dataType === "datetime") { - convert = function convert(val) { - // Convert ms to s - return +val / 1000; - }; - } else { - convert = function convert(val) { - return +val; - }; - } - - if ($el.data("ionRangeSlider").options.type === "double") { - return [convert(result.from), convert(result.to)]; - } else { - return convert(result.from); - } - } - - var lastKnownKeys = null; - - $el.on("change.crosstalkSliderInput", function (event) { - if (!$el.data("updating") && !$el.data("animating")) { - var _getValue = getValue(), - _getValue2 = _slicedToArray(_getValue, 2), - from = _getValue2[0], - to = _getValue2[1]; - - var keys = []; - for (var i = 0; i < data.values.length; i++) { - var val = data.values[i]; - if (val >= from && val <= to) { - keys.push(data.keys[i]); - } - } - keys.sort(); - ctHandle.set(keys); - lastKnownKeys = keys; - } - }); - - // let $el = $(el); - // $el.on("change", "input[type="checkbox"]", function() { - // let checked = $el.find("input[type="checkbox"]:checked"); - // if (checked.length === 0) { - // ctHandle.clear(); - // } else { - // let keys = {}; - // checked.each(function() { - // data.map[this.value].forEach(function(key) { - // keys[key] = true; - // }); - // }); - // let keyArray = Object.keys(keys); - // keyArray.sort(); - // ctHandle.set(keyArray); - // } - // }); - - return { - suspend: function suspend() { - ctHandle.clear(); - }, - resume: function resume() { - if (lastKnownKeys) ctHandle.set(lastKnownKeys); - } - }; - } -}); - -// Convert a number to a string with leading zeros -function padZeros(n, digits) { - var str = n.toString(); - while (str.length < digits) { - str = "0" + str; - }return str; -} - -// Given a Date object, return a string in yyyy-mm-dd format, using the -// UTC date. This may be a day off from the date in the local time zone. -function formatDateUTC(date) { - if (date instanceof Date) { - return date.getUTCFullYear() + "-" + padZeros(date.getUTCMonth() + 1, 2) + "-" + padZeros(date.getUTCDate(), 2); - } else { - return null; - } -} - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./input":6}],10:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.SelectionHandle = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _events = require("./events"); - -var _events2 = _interopRequireDefault(_events); - -var _group = require("./group"); - -var _group2 = _interopRequireDefault(_group); - -var _util = require("./util"); - -var util = _interopRequireWildcard(_util); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Use this class to read and write (and listen for changes to) the selection - * for a Crosstalk group. This is intended to be used for linked brushing. - * - * If two (or more) `SelectionHandle` instances in the same webpage share the - * same group name, they will share the same state. Setting the selection using - * one `SelectionHandle` instance will result in the `value` property instantly - * changing across the others, and `"change"` event listeners on all instances - * (including the one that initiated the sending) will fire. - * - * @param {string} [group] - The name of the Crosstalk group, or if none, - * null or undefined (or any other falsy value). This can be changed later - * via the [SelectionHandle#setGroup](#setGroup) method. - * @param {Object} [extraInfo] - An object whose properties will be copied to - * the event object whenever an event is emitted. - */ -var SelectionHandle = exports.SelectionHandle = function () { - function SelectionHandle() { - var group = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var extraInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - _classCallCheck(this, SelectionHandle); - - this._eventRelay = new _events2.default(); - this._emitter = new util.SubscriptionTracker(this._eventRelay); - - // Name of the group we're currently tracking, if any. Can change over time. - this._group = null; - // The Var we're currently tracking, if any. Can change over time. - this._var = null; - // The event handler subscription we currently have on var.on("change"). - this._varOnChangeSub = null; - - this._extraInfo = util.extend({ sender: this }, extraInfo); - - this.setGroup(group); - } - - /** - * Changes the Crosstalk group membership of this SelectionHandle. The group - * being switched away from (if any) will not have its selection value - * modified as a result of calling `setGroup`, even if this handle was the - * most recent handle to set the selection of the group. - * - * The group being switched to (if any) will also not have its selection value - * modified as a result of calling `setGroup`. If you want to set the - * selection value of the new group, call `set` explicitly. - * - * @param {string} group - The name of the Crosstalk group, or null (or - * undefined) to clear the group. - */ - - - _createClass(SelectionHandle, [{ - key: "setGroup", - value: function setGroup(group) { - var _this = this; - - // If group is unchanged, do nothing - if (this._group === group) return; - // Treat null, undefined, and other falsy values the same - if (!this._group && !group) return; - - if (this._var) { - this._var.off("change", this._varOnChangeSub); - this._var = null; - this._varOnChangeSub = null; - } - - this._group = group; - - if (group) { - this._var = (0, _group2.default)(group).var("selection"); - var sub = this._var.on("change", function (e) { - _this._eventRelay.trigger("change", e, _this); - }); - this._varOnChangeSub = sub; - } - } - - /** - * Retrieves the current selection for the group represented by this - * `SelectionHandle`. - * - * - If no selection is active, then this value will be falsy. - * - If a selection is active, but no data points are selected, then this - * value will be an empty array. - * - If a selection is active, and data points are selected, then the keys - * of the selected data points will be present in the array. - */ - - }, { - key: "_mergeExtraInfo", - - - /** - * Combines the given `extraInfo` (if any) with the handle's default - * `_extraInfo` (if any). - * @private - */ - value: function _mergeExtraInfo(extraInfo) { - // Important incidental effect: shallow clone is returned - return util.extend({}, this._extraInfo ? this._extraInfo : null, extraInfo ? extraInfo : null); - } - - /** - * Overwrites the current selection for the group, and raises the `"change"` - * event among all of the group's '`SelectionHandle` instances (including - * this one). - * - * @fires SelectionHandle#change - * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see - * {@link SelectionHandle#value}). - * @param {Object} [extraInfo] - Extra properties to be included on the event - * object that's passed to listeners (in addition to any options that were - * passed into the `SelectionHandle` constructor). - */ - - }, { - key: "set", - value: function set(selectedKeys, extraInfo) { - if (this._var) this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo)); - } - - /** - * Overwrites the current selection for the group, and raises the `"change"` - * event among all of the group's '`SelectionHandle` instances (including - * this one). - * - * @fires SelectionHandle#change - * @param {Object} [extraInfo] - Extra properties to be included on the event - * object that's passed to listeners (in addition to any that were passed - * into the `SelectionHandle` constructor). - */ - - }, { - key: "clear", - value: function clear(extraInfo) { - if (this._var) this.set(void 0, this._mergeExtraInfo(extraInfo)); - } - - /** - * Subscribes to events on this `SelectionHandle`. - * - * @param {string} eventType - Indicates the type of events to listen to. - * Currently, only `"change"` is supported. - * @param {SelectionHandle~listener} listener - The callback function that - * will be invoked when the event occurs. - * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel - * this subscription. - */ - - }, { - key: "on", - value: function on(eventType, listener) { - return this._emitter.on(eventType, listener); - } - - /** - * Cancels event subscriptions created by {@link SelectionHandle#on}. - * - * @param {string} eventType - The type of event to unsubscribe. - * @param {string|SelectionHandle~listener} listener - Either the callback - * function previously passed into {@link SelectionHandle#on}, or the - * string that was returned from {@link SelectionHandle#on}. - */ - - }, { - key: "off", - value: function off(eventType, listener) { - return this._emitter.off(eventType, listener); - } - - /** - * Shuts down the `SelectionHandle` object. - * - * Removes all event listeners that were added through this handle. - */ - - }, { - key: "close", - value: function close() { - this._emitter.removeAllListeners(); - this.setGroup(null); - } - }, { - key: "value", - get: function get() { - return this._var ? this._var.get() : null; - } - }]); - - return SelectionHandle; -}(); - -/** - * @callback SelectionHandle~listener - * @param {Object} event - An object containing details of the event. For - * `"change"` events, this includes the properties `value` (the new - * value of the selection, or `undefined` if no selection is active), - * `oldValue` (the previous value of the selection), and `sender` (the - * `SelectionHandle` instance that made the change). - */ - -/** - * @event SelectionHandle#change - * @type {object} - * @property {object} value - The new value of the selection, or `undefined` - * if no selection is active. - * @property {object} oldValue - The previous value of the selection. - * @property {SelectionHandle} sender - The `SelectionHandle` instance that - * changed the value. - */ - -},{"./events":1,"./group":4,"./util":11}],11:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.extend = extend; -exports.checkSorted = checkSorted; -exports.diffSortedLists = diffSortedLists; -exports.dataframeToD3 = dataframeToD3; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function extend(target) { - for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - sources[_key - 1] = arguments[_key]; - } - - for (var i = 0; i < sources.length; i++) { - var src = sources[i]; - if (typeof src === "undefined" || src === null) continue; - - for (var key in src) { - if (src.hasOwnProperty(key)) { - target[key] = src[key]; - } - } - } - return target; -} - -function checkSorted(list) { - for (var i = 1; i < list.length; i++) { - if (list[i] <= list[i - 1]) { - throw new Error("List is not sorted or contains duplicate"); - } - } -} - -function diffSortedLists(a, b) { - var i_a = 0; - var i_b = 0; - - if (!a) a = []; - if (!b) b = []; - - var a_only = []; - var b_only = []; - - checkSorted(a); - checkSorted(b); - - while (i_a < a.length && i_b < b.length) { - if (a[i_a] === b[i_b]) { - i_a++; - i_b++; - } else if (a[i_a] < b[i_b]) { - a_only.push(a[i_a++]); - } else { - b_only.push(b[i_b++]); - } - } - - if (i_a < a.length) a_only = a_only.concat(a.slice(i_a)); - if (i_b < b.length) b_only = b_only.concat(b.slice(i_b)); - return { - removed: a_only, - added: b_only - }; -} - -// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... } -// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ] -function dataframeToD3(df) { - var names = []; - var length = void 0; - 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 = void 0; - 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; -} - -/** - * Keeps track of all event listener additions/removals and lets all active - * listeners be removed with a single operation. - * - * @private - */ - -var SubscriptionTracker = exports.SubscriptionTracker = function () { - function SubscriptionTracker(emitter) { - _classCallCheck(this, SubscriptionTracker); - - this._emitter = emitter; - this._subs = {}; - } - - _createClass(SubscriptionTracker, [{ - key: "on", - value: function on(eventType, listener) { - var sub = this._emitter.on(eventType, listener); - this._subs[sub] = eventType; - return sub; - } - }, { - key: "off", - value: function off(eventType, listener) { - var sub = this._emitter.off(eventType, listener); - if (sub) { - delete this._subs[sub]; - } - return sub; - } - }, { - key: "removeAllListeners", - value: function removeAllListeners() { - var _this = this; - - var current_subs = this._subs; - this._subs = {}; - Object.keys(current_subs).forEach(function (sub) { - _this._emitter.off(current_subs[sub], sub); - }); - } - }]); - - return SubscriptionTracker; -}(); - -},{}],12:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _events = require("./events"); - -var _events2 = _interopRequireDefault(_events); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Var = function () { - function Var(group, name, /*optional*/value) { - _classCallCheck(this, Var); - - this._group = group; - this._name = name; - this._value = value; - this._events = new _events2.default(); - } - - _createClass(Var, [{ - key: "get", - value: function get() { - return this._value; - } - }, { - key: "set", - value: function set(value, /*optional*/event) { - if (this._value === value) { - // Do nothing; the value hasn't changed - return; - } - var oldValue = this._value; - this._value = value; - // Alert JavaScript listeners that the value has changed - var evt = {}; - if (event && (typeof event === "undefined" ? "undefined" : _typeof(event)) === "object") { - for (var k in event) { - if (event.hasOwnProperty(k)) evt[k] = event[k]; - } - } - evt.oldValue = oldValue; - evt.value = value; - this._events.trigger("change", evt, this); - - // TODO: Make this extensible, to let arbitrary back-ends know that - // something has changed - if (global.Shiny && global.Shiny.onInputChange) { - global.Shiny.onInputChange(".clientValue-" + (this._group.name !== null ? this._group.name + "-" : "") + this._name, typeof value === "undefined" ? null : value); - } - } - }, { - key: "on", - value: function on(eventType, listener) { - return this._events.on(eventType, listener); - } - }, { - key: "off", - value: function off(eventType, listener) { - return this._events.off(eventType, listener); - } - }]); - - return Var; -}(); - -exports.default = Var; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./events":1}]},{},[5]) -//# sourceMappingURL=crosstalk.js.map diff --git a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js.map b/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js.map deleted file mode 100644 index cff94f08..00000000 --- a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js.map +++ /dev/null @@ -1,37 +0,0 @@ -{ - "version": 3, - "sources": [ - "node_modules/browser-pack/_prelude.js", - "javascript/src/events.js", - "javascript/src/filter.js", - "javascript/src/filterset.js", - "javascript/src/group.js", - "javascript/src/index.js", - "javascript/src/input.js", - "javascript/src/input_checkboxgroup.js", - "javascript/src/input_selectize.js", - "javascript/src/input_slider.js", - "javascript/src/selection.js", - "javascript/src/util.js", - "javascript/src/var.js" - ], - "names": [], - "mappings": "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", - "file": "generated.js", - "sourceRoot": "", - "sourcesContent": [ - "(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n", - "import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n", - "import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n", - "import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n", - "let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n", - "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n", - "import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n", - "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n", - "import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n", - "export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n", - "import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n" - ] -} \ No newline at end of file diff --git a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js b/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js deleted file mode 100644 index b7ec0ac9..00000000 --- a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function o(u,a,l){function s(n,e){if(!a[n]){if(!u[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(f)return f(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[n]={exports:{}};u[n][0].call(i.exports,function(e){var t=u[n][1][e];return s(t||e)},i,i.exports,o,u,a,l)}return a[n].exports}for(var f="function"==typeof require&&require,e=0;e?@[\\\]^`{|}~])/g,"\\$1")+"']"),r=JSON.parse(n[0].innerText),i=e.factory(t,r);o(t).data("crosstalk-instance",i),o(t).addClass("crosstalk-input-bound")}if(t.Shiny){var e=new t.Shiny.InputBinding,u=t.jQuery;u.extend(e,{find:function(e){return u(e).find(".crosstalk-input")},initialize:function(e){var t,n;u(e).hasClass("crosstalk-input-bound")||(n=o(t=e),Object.keys(r).forEach(function(e){n.hasClass(e)&&!n.hasClass("crosstalk-input-bound")&&i(r[e],t)}))},getId:function(e){return e.id},getValue:function(e){},setValue:function(e,t){},receiveMessage:function(e,t){},subscribe:function(e,t){u(e).data("crosstalk-instance").resume()},unsubscribe:function(e){u(e).data("crosstalk-instance").suspend()}}),t.Shiny.inputBindings.register(e,"crosstalk.inputBinding")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(r,e,t){(function(e){"use strict";var t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(r("./input")),n=r("./filter");var a=e.jQuery;t.register({className:"crosstalk-input-checkboxgroup",factory:function(e,r){var i=new n.FilterHandle(r.group),o=void 0,u=a(e);return u.on("change","input[type='checkbox']",function(){var e=u.find("input[type='checkbox']:checked");if(0===e.length)o=null,i.clear();else{var t={};e.each(function(){r.map[this.value].forEach(function(e){t[e]=!0})});var n=Object.keys(t);n.sort(),o=n,i.set(n)}}),{suspend:function(){i.clear()},resume:function(){o&&i.set(o)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6}],8:[function(r,e,t){(function(e){"use strict";var t=n(r("./input")),l=n(r("./util")),s=r("./filter");function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var f=e.jQuery;t.register({className:"crosstalk-input-select",factory:function(e,n){var t=l.dataframeToD3(n.items),r={options:[{value:"",label:"(All)"}].concat(t),valueField:"value",labelField:"label",searchField:"label"},i=f(e).find("select")[0],o=f(i).selectize(r)[0].selectize,u=new s.FilterHandle(n.group),a=void 0;return o.on("change",function(){if(0===o.items.length)a=null,u.clear();else{var t={};o.items.forEach(function(e){n.map[e].forEach(function(e){t[e]=!0})});var e=Object.keys(t);e.sort(),a=e,u.set(e)}}),{suspend:function(){u.clear()},resume:function(){a&&u.set(a)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6,"./util":11}],9:[function(n,e,t){(function(e){"use strict";var d=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(n("./input")),a=n("./filter");var v=e.jQuery,p=e.strftime;function y(e,t){for(var n=e.toString();n.length {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n","import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n","import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n","import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n","let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n","import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n","export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n","import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n"]} \ No newline at end of file diff --git a/docs/articles/xportr_files/datatables-binding-0.17/datatables.js b/docs/articles/xportr_files/datatables-binding-0.17/datatables.js deleted file mode 100644 index 47909da2..00000000 --- a/docs/articles/xportr_files/datatables-binding-0.17/datatables.js +++ /dev/null @@ -1,1422 +0,0 @@ -(function() { - -// some helper functions: using a global object DTWidget so that it can be used -// in JS() code, e.g. datatable(options = list(foo = JS('code'))); unlike R's -// dynamic scoping, when 'code' is eval()'ed, JavaScript does not know objects -// from the "parent frame", e.g. JS('DTWidget') will not work unless it was made -// a global object -var DTWidget = {}; - -// 123456666.7890 -> 123,456,666.7890 -var markInterval = function(d, digits, interval, mark, decMark, precision) { - x = precision ? d.toPrecision(digits) : d.toFixed(digits); - if (!/^-?[\d.]+$/.test(x)) return x; - var xv = x.split('.'); - if (xv.length > 2) return x; // should have at most one decimal point - xv[0] = xv[0].replace(new RegExp('\\B(?=(\\d{' + interval + '})+(?!\\d))', 'g'), mark); - return xv.join(decMark); -}; - -DTWidget.formatCurrency = function(data, currency, digits, interval, mark, decMark, before) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - var res = markInterval(d, digits, interval, mark, decMark); - res = before ? (/^-/.test(res) ? '-' + currency + res.replace(/^-/, '') : currency + res) : - res + currency; - return res; -}; - -DTWidget.formatString = function(data, prefix, suffix) { - var d = data; - if (d === null) return ''; - return prefix + d + suffix; -}; - -DTWidget.formatPercentage = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d * 100, digits, interval, mark, decMark) + '%'; -}; - -DTWidget.formatRound = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d, digits, interval, mark, decMark); -}; - -DTWidget.formatSignif = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d, digits, interval, mark, decMark, true); -}; - -DTWidget.formatDate = function(data, method, params) { - var d = data; - if (d === null) return ''; - // (new Date('2015-10-28')).toDateString() may return 2015-10-27 because the - // actual time created could be like 'Tue Oct 27 2015 19:00:00 GMT-0500 (CDT)', - // i.e. the date-only string is treated as UTC time instead of local time - if ((method === 'toDateString' || method === 'toLocaleDateString') && /^\d{4,}\D\d{2}\D\d{2}$/.test(d)) { - d = d.split(/\D/); - d = new Date(d[0], d[1] - 1, d[2]); - } else { - d = new Date(d); - } - return d[method].apply(d, params); -}; - -window.DTWidget = DTWidget; - -var transposeArray2D = function(a) { - return a.length === 0 ? a : HTMLWidgets.transposeArray2D(a); -}; - -var crosstalkPluginsInstalled = false; - -function maybeInstallCrosstalkPlugins() { - if (crosstalkPluginsInstalled) - return; - crosstalkPluginsInstalled = true; - - $.fn.dataTable.ext.afnFiltering.push( - function(oSettings, aData, iDataIndex) { - var ctfilter = oSettings.nTable.ctfilter; - if (ctfilter && !ctfilter[iDataIndex]) - return false; - - var ctselect = oSettings.nTable.ctselect; - if (ctselect && !ctselect[iDataIndex]) - return false; - - return true; - } - ); -} - -HTMLWidgets.widget({ - name: "datatables", - type: "output", - renderOnNullValue: true, - initialize: function(el, width, height) { - $(el).html(' '); - return { - data: null, - ctfilterHandle: new crosstalk.FilterHandle(), - ctfilterSubscription: null, - ctselectHandle: new crosstalk.SelectionHandle(), - ctselectSubscription: null - }; - }, - renderValue: function(el, data, instance) { - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - instance.data = data; - return; - } - instance.data = null; - var $el = $(el); - $el.empty(); - - if (data === null) { - $el.append(' '); - // clear previous Shiny inputs (if any) - for (var i in instance.clearInputs) instance.clearInputs[i](); - instance.clearInputs = {}; - return; - } - - var crosstalkOptions = data.crosstalkOptions; - if (!crosstalkOptions) crosstalkOptions = { - 'key': null, 'group': null - }; - if (crosstalkOptions.group) { - maybeInstallCrosstalkPlugins(); - instance.ctfilterHandle.setGroup(crosstalkOptions.group); - instance.ctselectHandle.setGroup(crosstalkOptions.group); - } - - // If we are in a flexdashboard scroll layout then we: - // (a) Always want to use pagination (otherwise we'll have - // a "double scroll bar" effect on the phone); and - // (b) Never want to fill the container (we want the pagination - // level to determine the size of the container) - if (window.FlexDashboard && !window.FlexDashboard.isFillPage()) { - data.options.paging = true; - data.fillContainer = false; - } - - // if we are in the viewer then we always want to fillContainer and - // and autoHideNavigation (unless the user has explicitly set these) - if (window.HTMLWidgets.viewerMode) { - if (!data.hasOwnProperty("fillContainer")) - data.fillContainer = true; - if (!data.hasOwnProperty("autoHideNavigation")) - data.autoHideNavigation = true; - } - - // propagate fillContainer to instance (so we have it in resize) - instance.fillContainer = data.fillContainer; - - var cells = data.data; - - if (cells instanceof Array) cells = transposeArray2D(cells); - - $el.append(data.container); - var $table = $el.find('table'); - if (data.class) $table.addClass(data.class); - if (data.caption) $table.prepend(data.caption); - - if (!data.selection) data.selection = { - mode: 'none', selected: null, target: 'row', selectable: null - }; - if (HTMLWidgets.shinyMode && data.selection.mode !== 'none' && - data.selection.target === 'row+column') { - if ($table.children('tfoot').length === 0) { - $table.append($('')); - $table.find('thead tr').clone().appendTo($table.find('tfoot')); - } - } - - // column filters - var filterRow; - switch (data.filter) { - case 'top': - $table.children('thead').append(data.filterHTML); - filterRow = $table.find('thead tr:last td'); - break; - case 'bottom': - if ($table.children('tfoot').length === 0) { - $table.append($('')); - } - $table.children('tfoot').prepend(data.filterHTML); - filterRow = $table.find('tfoot tr:first td'); - break; - } - - var options = { searchDelay: 1000 }; - if (cells !== null) $.extend(options, { - data: cells - }); - - // options for fillContainer - var bootstrapActive = typeof($.fn.popover) != 'undefined'; - if (instance.fillContainer) { - - // force scrollX/scrollY and turn off autoWidth - options.scrollX = true; - options.scrollY = "100px"; // can be any value, we'll adjust below - - // if we aren't paginating then move around the info/filter controls - // to save space at the bottom and rephrase the info callback - if (data.options.paging === false) { - - // we know how to do this cleanly for bootstrap, not so much - // for other themes/layouts - if (bootstrapActive) { - options.dom = "<'row'<'col-sm-4'i><'col-sm-8'f>>" + - "<'row'<'col-sm-12'tr>>"; - } - - options.fnInfoCallback = function(oSettings, iStart, iEnd, - iMax, iTotal, sPre) { - return Number(iTotal).toLocaleString() + " records"; - }; - } - } - - // auto hide navigation if requested - // Note, this only works on client-side processing mode as on server-side, - // cells (data.data) is null; In addition, we require the pageLength option - // being provided explicitly to enable this. Despite we may be able to deduce - // the default value of pageLength, it may complicate things so we'd rather - // put this responsiblity to users and warn them on the R side. - if (data.autoHideNavigation === true && data.options.paging !== false) { - // strip all nav if length >= cells - if ((cells instanceof Array) && data.options.pageLength >= cells.length) - options.dom = bootstrapActive ? "<'row'<'col-sm-12'tr>>" : "t"; - // alternatively lean things out for flexdashboard mobile portrait - else if (bootstrapActive && window.FlexDashboard && window.FlexDashboard.isMobilePhone()) - options.dom = "<'row'<'col-sm-12'f>>" + - "<'row'<'col-sm-12'tr>>" + - "<'row'<'col-sm-12'p>>"; - } - - $.extend(true, options, data.options || {}); - - var searchCols = options.searchCols; - if (searchCols) { - searchCols = searchCols.map(function(x) { - return x === null ? '' : x.search; - }); - // FIXME: this means I don't respect the escapeRegex setting - delete options.searchCols; - } - - // server-side processing? - var server = options.serverSide === true; - - // use the dataSrc function to pre-process JSON data returned from R - var DT_rows_all = [], DT_rows_current = []; - if (server && HTMLWidgets.shinyMode && typeof options.ajax === 'object' && - /^session\/[\da-z]+\/dataobj/.test(options.ajax.url) && !options.ajax.dataSrc) { - options.ajax.dataSrc = function(json) { - DT_rows_all = $.makeArray(json.DT_rows_all); - DT_rows_current = $.makeArray(json.DT_rows_current); - var data = json.data; - if (!colReorderEnabled()) return data; - var table = $table.DataTable(), order = table.colReorder.order(), flag = true, i, j, row; - for (i = 0; i < order.length; ++i) if (order[i] !== i) flag = false; - if (flag) return data; - for (i = 0; i < data.length; ++i) { - row = data[i].slice(); - for (j = 0; j < order.length; ++j) data[i][j] = row[order[j]]; - } - return data; - }; - } - - var thiz = this; - if (instance.fillContainer) $table.on('init.dt', function(e) { - thiz.fillAvailableHeight(el, $(el).innerHeight()); - }); - // If the page contains serveral datatables and one of which enables colReorder, - // the table.colReorder.order() function will exist but throws error when called. - // So it seems like the only way to know if colReorder is enabled or not is to - // check the options. - var colReorderEnabled = function() { return "colReorder" in options; }; - var table = $table.DataTable(options); - $el.data('datatable', table); - - // Unregister previous Crosstalk event subscriptions, if they exist - if (instance.ctfilterSubscription) { - instance.ctfilterHandle.off("change", instance.ctfilterSubscription); - instance.ctfilterSubscription = null; - } - if (instance.ctselectSubscription) { - instance.ctselectHandle.off("change", instance.ctselectSubscription); - instance.ctselectSubscription = null; - } - - if (!crosstalkOptions.group) { - $table[0].ctfilter = null; - $table[0].ctselect = null; - } else { - var key = crosstalkOptions.key; - function keysToMatches(keys) { - if (!keys) { - return null; - } else { - var selectedKeys = {}; - for (var i = 0; i < keys.length; i++) { - selectedKeys[keys[i]] = true; - } - var matches = {}; - for (var j = 0; j < key.length; j++) { - if (selectedKeys[key[j]]) - matches[j] = true; - } - return matches; - } - } - - function applyCrosstalkFilter(e) { - $table[0].ctfilter = keysToMatches(e.value); - table.draw(); - } - instance.ctfilterSubscription = instance.ctfilterHandle.on("change", applyCrosstalkFilter); - applyCrosstalkFilter({value: instance.ctfilterHandle.filteredKeys}); - - function applyCrosstalkSelection(e) { - if (e.sender !== instance.ctselectHandle) { - table - .rows('.' + selClass, {search: 'applied'}) - .nodes() - .to$() - .removeClass(selClass); - if (selectedRows) - changeInput('rows_selected', selectedRows(), void 0, true); - } - - if (e.sender !== instance.ctselectHandle && e.value && e.value.length) { - var matches = keysToMatches(e.value); - - // persistent selection with plotly (& leaflet) - var ctOpts = crosstalk.var("plotlyCrosstalkOpts").get() || {}; - if (ctOpts.persistent === true) { - var matches = $.extend(matches, $table[0].ctselect); - } - - $table[0].ctselect = matches; - table.draw(); - } else { - if ($table[0].ctselect) { - $table[0].ctselect = null; - table.draw(); - } - } - } - instance.ctselectSubscription = instance.ctselectHandle.on("change", applyCrosstalkSelection); - // TODO: This next line doesn't seem to work when renderDataTable is used - applyCrosstalkSelection({value: instance.ctselectHandle.value}); - } - - var inArray = function(val, array) { - return $.inArray(val, $.makeArray(array)) > -1; - }; - - // encode + to %2B when searching in the table on server side, because - // shiny::parseQueryString() treats + as spaces, and DataTables does not - // encode + to %2B (or % to %25) when sending the request - var encode_plus = function(x) { - return server ? x.replace(/%/g, '%25').replace(/\+/g, '%2B') : x; - }; - - // search the i-th column - var searchColumn = function(i, value) { - var regex = false, ci = true; - if (options.search) { - regex = options.search.regex, - ci = options.search.caseInsensitive !== false; - } - return table.column(i).search(encode_plus(value), regex, !regex, ci); - }; - - if (data.filter !== 'none') { - - filterRow.each(function(i, td) { - - var $td = $(td), type = $td.data('type'), filter; - var $input = $td.children('div').first().children('input'); - $input.prop('disabled', !table.settings()[0].aoColumns[i].bSearchable || type === 'disabled'); - $input.on('input blur', function() { - $input.next('span').toggle(Boolean($input.val())); - }); - // Bootstrap sets pointer-events to none and we won't be able to click - // the clear button - $input.next('span').css('pointer-events', 'auto').hide().click(function() { - $(this).hide().prev('input').val('').trigger('input').focus(); - }); - var searchCol; // search string for this column - if (searchCols && searchCols[i]) { - searchCol = searchCols[i]; - $input.val(searchCol).trigger('input'); - } - var $x = $td.children('div').last(); - - // remove the overflow: hidden attribute of the scrollHead - // (otherwise the scrolling table body obscures the filters) - // The workaround and the discussion from - // https://github.com/rstudio/DT/issues/554#issuecomment-518007347 - // Otherwise the filter selection will not be anchored to the values - // when the columns number is many and scrollX is enabled. - var scrollHead = $(el).find('.dataTables_scrollHead,.dataTables_scrollFoot'); - var cssOverflowHead = scrollHead.css('overflow'); - var scrollBody = $(el).find('.dataTables_scrollBody'); - var cssOverflowBody = scrollBody.css('overflow'); - var scrollTable = $(el).find('.dataTables_scroll'); - var cssOverflowTable = scrollTable.css('overflow'); - if (cssOverflowHead === 'hidden') { - $x.on('show hide', function(e) { - if (e.type === 'show') { - scrollHead.css('overflow', 'visible'); - scrollBody.css('overflow', 'visible'); - scrollTable.css('overflow-x', 'scroll'); - } else { - scrollHead.css('overflow', cssOverflowHead); - scrollBody.css('overflow', cssOverflowBody); - scrollTable.css('overflow-x', cssOverflowTable); - } - }); - $x.css('z-index', 25); - } - - if (inArray(type, ['factor', 'logical'])) { - $input.on({ - click: function() { - $input.parent().hide(); $x.show().trigger('show'); filter[0].selectize.focus(); - }, - input: function() { - if ($input.val() === '') filter[0].selectize.setValue([]); - } - }); - var $input2 = $x.children('select'); - filter = $input2.selectize({ - options: $input2.data('options').map(function(v, i) { - return ({text: v, value: v}); - }), - plugins: ['remove_button'], - hideSelected: true, - onChange: function(value) { - if (value === null) value = []; // compatibility with jQuery 3.0 - $input.val(value.length ? JSON.stringify(value) : ''); - if (value.length) $input.trigger('input'); - $input.attr('title', $input.val()); - if (server) { - table.column(i).search(value.length ? encode_plus(JSON.stringify(value)) : '').draw(); - return; - } - // turn off filter if nothing selected - $td.data('filter', value.length > 0); - table.draw(); // redraw table, and filters will be applied - } - }); - if (searchCol) filter[0].selectize.setValue(JSON.parse(searchCol)); - filter[0].selectize.on('blur', function() { - $x.hide().trigger('hide'); $input.parent().show(); $input.trigger('blur'); - }); - filter.next('div').css('margin-bottom', 'auto'); - } else if (type === 'character') { - var fun = function() { - searchColumn(i, $input.val()).draw(); - }; - if (server) { - fun = $.fn.dataTable.util.throttle(fun, options.searchDelay); - } - $input.on('input', fun); - } else if (inArray(type, ['number', 'integer', 'date', 'time'])) { - var $x0 = $x; - $x = $x0.children('div').first(); - $x0.css({ - 'background-color': '#fff', - 'border': '1px #ddd solid', - 'border-radius': '4px', - 'padding': '20px 20px 10px 20px' - }); - var $spans = $x0.children('span').css({ - 'margin-top': '10px', - 'white-space': 'nowrap' - }); - var $span1 = $spans.first(), $span2 = $spans.last(); - var r1 = +$x.data('min'), r2 = +$x.data('max'); - // when the numbers are too small or have many decimal places, the - // slider may have numeric precision problems (#150) - var scale = Math.pow(10, Math.max(0, +$x.data('scale') || 0)); - r1 = Math.round(r1 * scale); r2 = Math.round(r2 * scale); - var scaleBack = function(x, scale) { - if (scale === 1) return x; - var d = Math.round(Math.log(scale) / Math.log(10)); - // to avoid problems like 3.423/100 -> 0.034230000000000003 - return (x / scale).toFixed(d); - }; - var slider_min = function() { - return filter.noUiSlider('options').range.min; - }; - var slider_max = function() { - return filter.noUiSlider('options').range.max; - }; - $input.on({ - focus: function() { - $x0.show().trigger('show'); - // first, make sure the slider div leaves at least 20px between - // the two (slider value) span's - $x0.width(Math.max(160, $span1.outerWidth() + $span2.outerWidth() + 20)); - // then, if the input is really wide, make the slider the same - // width as the input - if ($x0.outerWidth() < $input.outerWidth()) { - $x0.outerWidth($input.outerWidth()); - } - // make sure the slider div does not reach beyond the right margin - if ($(window).width() < $x0.offset().left + $x0.width()) { - $x0.offset({ - 'left': $input.offset().left + $input.outerWidth() - $x0.outerWidth() - }); - } - }, - blur: function() { - $x0.hide().trigger('hide'); - }, - input: function() { - if ($input.val() === '') filter.val([slider_min(), slider_max()]); - }, - change: function() { - var v = $input.val().replace(/\s/g, ''); - if (v === '') return; - v = v.split('...'); - if (v.length !== 2) { - $input.parent().addClass('has-error'); - return; - } - if (v[0] === '') v[0] = slider_min(); - if (v[1] === '') v[1] = slider_max(); - $input.parent().removeClass('has-error'); - // treat date as UTC time at midnight - var strTime = function(x) { - var s = type === 'date' ? 'T00:00:00Z' : ''; - var t = new Date(x + s).getTime(); - // add 10 minutes to date since it does not hurt the date, and - // it helps avoid the tricky floating point arithmetic problems, - // e.g. sometimes the date may be a few milliseconds earlier - // than the midnight due to precision problems in noUiSlider - return type === 'date' ? t + 3600000 : t; - }; - if (inArray(type, ['date', 'time'])) { - v[0] = strTime(v[0]); - v[1] = strTime(v[1]); - } - if (v[0] != slider_min()) v[0] *= scale; - if (v[1] != slider_max()) v[1] *= scale; - filter.val(v); - } - }); - var formatDate = function(d, isoFmt) { - d = scaleBack(d, scale); - if (type === 'number') return d; - if (type === 'integer') return parseInt(d); - var x = new Date(+d); - var fmt = ('filterDateFmt' in data) ? data.filterDateFmt[i] : undefined; - if (fmt !== undefined && isoFmt === false) return x[fmt.method].apply(x, fmt.params); - if (type === 'date') { - var pad0 = function(x) { - return ('0' + x).substr(-2, 2); - }; - return x.getUTCFullYear() + '-' + pad0(1 + x.getUTCMonth()) - + '-' + pad0(x.getUTCDate()); - } else { - return x.toISOString(); - } - }; - var opts = type === 'date' ? { step: 60 * 60 * 1000 } : - type === 'integer' ? { step: 1 } : {}; - filter = $x.noUiSlider($.extend({ - start: [r1, r2], - range: {min: r1, max: r2}, - connect: true - }, opts)); - if (scale > 1) (function() { - var t1 = r1, t2 = r2; - var val = filter.val(); - while (val[0] > r1 || val[1] < r2) { - if (val[0] > r1) { - t1 -= val[0] - r1; - } - if (val[1] < r2) { - t2 += r2 - val[1]; - } - filter = $x.noUiSlider($.extend({ - start: [t1, t2], - range: {min: t1, max: t2}, - connect: true - }, opts), true); - val = filter.val(); - } - r1 = t1; r2 = t2; - })(); - var updateSliderText = function(v1, v2) { - $span1.text(formatDate(v1, false)); $span2.text(formatDate(v2, false)); - }; - updateSliderText(r1, r2); - var updateSlider = function(e) { - var val = filter.val(); - // turn off filter if in full range - $td.data('filter', val[0] > slider_min() || val[1] < slider_max()); - var v1 = formatDate(val[0]), v2 = formatDate(val[1]), ival; - if ($td.data('filter')) { - ival = v1 + ' ... ' + v2; - $input.attr('title', ival).val(ival).trigger('input'); - } else { - $input.attr('title', '').val(''); - } - updateSliderText(val[0], val[1]); - if (e.type === 'slide') return; // no searching when sliding only - if (server) { - table.column(i).search($td.data('filter') ? ival : '').draw(); - return; - } - table.draw(); - }; - filter.on({ - set: updateSlider, - slide: updateSlider - }); - } - - // server-side processing will be handled by R (or whatever server - // language you use); the following code is only needed for client-side - // processing - if (server) { - // if a search string has been pre-set, search now - if (searchCol) searchColumn(i, searchCol).draw(); - return; - } - - var customFilter = function(settings, data, dataIndex) { - // there is no way to attach a search function to a specific table, - // and we need to make sure a global search function is not applied to - // all tables (i.e. a range filter in a previous table should not be - // applied to the current table); we use the settings object to - // determine if we want to perform searching on the current table, - // since settings.sTableId will be different to different tables - if (table.settings()[0] !== settings) return true; - // no filter on this column or no need to filter this column - if (typeof filter === 'undefined' || !$td.data('filter')) return true; - - var r = filter.val(), v, r0, r1; - var i_data = function(i) { - if (!colReorderEnabled()) return i; - var order = table.colReorder.order(), k; - for (k = 0; k < order.length; ++k) if (order[k] === i) return k; - return i; // in theory it will never be here... - } - v = data[i_data(i)]; - if (type === 'number' || type === 'integer') { - v = parseFloat(v); - // how to handle NaN? currently exclude these rows - if (isNaN(v)) return(false); - r0 = parseFloat(scaleBack(r[0], scale)) - r1 = parseFloat(scaleBack(r[1], scale)); - if (v >= r0 && v <= r1) return true; - } else if (type === 'date' || type === 'time') { - v = new Date(v); - r0 = new Date(r[0] / scale); r1 = new Date(r[1] / scale); - if (v >= r0 && v <= r1) return true; - } else if (type === 'factor') { - if (r.length === 0 || inArray(v, r)) return true; - } else if (type === 'logical') { - if (r.length === 0) return true; - if (inArray(v === '' ? 'na' : v, r)) return true; - } - return false; - }; - - $.fn.dataTable.ext.search.push(customFilter); - - // search for the preset search strings if it is non-empty - if (searchCol) { - if (inArray(type, ['factor', 'logical'])) { - filter[0].selectize.setValue(JSON.parse(searchCol)); - } else if (type === 'character') { - $input.trigger('input'); - } else if (inArray(type, ['number', 'integer', 'date', 'time'])) { - $input.trigger('change'); - } - } - - }); - - } - - // highlight search keywords - var highlight = function() { - var body = $(table.table().body()); - // removing the old highlighting first - body.unhighlight(); - - // don't highlight the "not found" row, so we get the rows using the api - if (table.rows({ filter: 'applied' }).data().length === 0) return; - // highlight global search keywords - body.highlight($.trim(table.search()).split(/\s+/)); - // then highlight keywords from individual column filters - if (filterRow) filterRow.each(function(i, td) { - var $td = $(td), type = $td.data('type'); - if (type !== 'character') return; - var $input = $td.children('div').first().children('input'); - var column = table.column(i).nodes().to$(), - val = $.trim($input.val()); - if (type !== 'character' || val === '') return; - column.highlight(val.split(/\s+/)); - }); - }; - - if (options.searchHighlight) { - table - .on('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth', highlight) - .on('destroy', function() { - // remove event handler - table.off('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth'); - }); - - // Set the option for escaping regex characters in our search string. This will be used - // for all future matching. - jQuery.fn.highlight.options.escapeRegex = (!options.search || !options.search.regex); - - // initial highlight for state saved conditions and initial states - highlight(); - } - - // run the callback function on the table instance - if (typeof data.callback === 'function') data.callback(table); - - // double click to edit the cell, row, column, or all cells - if (data.editable) table.on('dblclick.dt', 'tbody td', function(e) { - // only bring up the editor when the cell itself is dbclicked, and ignore - // other dbclick events bubbled up (e.g. from the ) - if (e.target !== this) return; - var target = [], immediate = false; - switch (data.editable.target) { - case 'cell': - target = [this]; - immediate = true; // edit will take effect immediately - break; - case 'row': - target = table.cells(table.cell(this).index().row, '*').nodes(); - break; - case 'column': - target = table.cells('*', table.cell(this).index().column).nodes(); - break; - case 'all': - target = table.cells().nodes(); - break; - default: - throw 'The editable parameter must be "cell", "row", "column", or "all"'; - } - var disableCols = data.editable.disable ? data.editable.disable.columns : null; - for (var i = 0; i < target.length; i++) { - (function(cell, current) { - var $cell = $(cell), html = $cell.html(); - var _cell = table.cell(cell), value = _cell.data(); - var $input = $(''), changed = false; - if (!immediate) { - $cell.data('input', $input).data('html', html); - $input.attr('title', 'Hit Ctrl+Enter to finish editing, or Esc to cancel'); - } - $input.val(value); - if (inArray(_cell.index().column, disableCols)) { - $input.attr('readonly', '').css('filter', 'invert(25%)'); - } - $cell.empty().append($input); - if (cell === current) $input.focus(); - $input.css('width', '100%'); - - if (immediate) $input.on('change', function() { - changed = true; - var valueNew = $input.val(); - if (valueNew != value) { - _cell.data(valueNew); - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', [cellInfo(cell)], 'DT.cellInfo', null, {priority: "event"}); - } - // for server-side processing, users have to call replaceData() to update the table - if (!server) table.draw(false); - } else { - $cell.html(html); - } - $input.remove(); - }).on('blur', function() { - if (!changed) $input.trigger('change'); - }).on('keyup', function(e) { - // hit Escape to cancel editing - if (e.keyCode === 27) $input.trigger('blur'); - }); - - // bulk edit (row, column, or all) - if (!immediate) $input.on('keyup', function(e) { - var removeInput = function($cell, restore) { - $cell.data('input').remove(); - if (restore) $cell.html($cell.data('html')); - } - if (e.keyCode === 27) { - for (var i = 0; i < target.length; i++) { - removeInput($(target[i]), true); - } - } else if (e.keyCode === 13 && e.ctrlKey) { - // Ctrl + Enter - var cell, $cell, _cell, cellData = []; - for (var i = 0; i < target.length; i++) { - cell = target[i]; $cell = $(cell); _cell = table.cell(cell); - _cell.data($cell.data('input').val()); - HTMLWidgets.shinyMode && cellData.push(cellInfo(cell)); - removeInput($cell, false); - } - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', cellData, 'DT.cellInfo', null, {priority: "event"}); - } - if (!server) table.draw(false); - } - }); - })(target[i], this); - } - }); - - // interaction with shiny - if (!HTMLWidgets.shinyMode && !crosstalkOptions.group) return; - - var methods = {}; - var shinyData = {}; - - methods.updateCaption = function(caption) { - if (!caption) return; - $table.children('caption').replaceWith(caption); - } - - // register clear functions to remove input values when the table is removed - instance.clearInputs = {}; - - var changeInput = function(id, value, type, noCrosstalk, opts) { - var event = id; - id = el.id + '_' + id; - if (type) id = id + ':' + type; - // do not update if the new value is the same as old value - if (event !== 'cell_edit' && !/_clicked$/.test(event) && shinyData.hasOwnProperty(id) && shinyData[id] === JSON.stringify(value)) - return; - shinyData[id] = JSON.stringify(value); - if (HTMLWidgets.shinyMode && Shiny.setInputValue) { - Shiny.setInputValue(id, value, opts); - if (!instance.clearInputs[id]) instance.clearInputs[id] = function() { - Shiny.setInputValue(id, null); - } - } - - // HACK - if (event === "rows_selected" && !noCrosstalk) { - if (crosstalkOptions.group) { - var keys = crosstalkOptions.key; - var selectedKeys = null; - if (value) { - selectedKeys = []; - for (var i = 0; i < value.length; i++) { - // The value array's contents use 1-based row numbers, so we must - // convert to 0-based before indexing into the keys array. - selectedKeys.push(keys[value[i] - 1]); - } - } - instance.ctselectHandle.set(selectedKeys); - } - } - }; - - var addOne = function(x) { - return x.map(function(i) { return 1 + i; }); - }; - - var unique = function(x) { - var ux = []; - $.each(x, function(i, el){ - if ($.inArray(el, ux) === -1) ux.push(el); - }); - return ux; - } - - // change the row index of a cell - var tweakCellIndex = function(cell) { - var info = cell.index(); - // some cell may not be valid. e.g, #759 - // when using the RowGroup extension, datatables will - // generate the row label and the cells are not part of - // the data thus contain no row/col info - if (info === undefined) - return {row: null, col: null}; - if (server) { - info.row = DT_rows_current[info.row]; - } else { - info.row += 1; - } - return {row: info.row, col: info.column}; - } - - var cleanSelectedValues = function() { - changeInput('rows_selected', []); - changeInput('columns_selected', []); - changeInput('cells_selected', transposeArray2D([]), 'shiny.matrix'); - } - // #828 we should clean the selection on the server-side when the table reloads - cleanSelectedValues(); - - // a flag to indicates if select extension is initialized or not - var flagSelectExt = table.settings()[0]._select !== undefined; - // the Select extension should only be used in the client mode and - // when the selection.mode is set to none - if (data.selection.mode === 'none' && !server && flagSelectExt) { - var updateRowsSelected = function() { - var rows = table.rows({selected: true}); - var selected = []; - $.each(rows.indexes().toArray(), function(i, v) { - selected.push(v + 1); - }); - changeInput('rows_selected', selected); - } - var updateColsSelected = function() { - var columns = table.columns({selected: true}); - changeInput('columns_selected', columns.indexes().toArray()); - } - var updateCellsSelected = function() { - var cells = table.cells({selected: true}); - var selected = []; - cells.every(function() { - var row = this.index().row; - var col = this.index().column; - selected = selected.concat([[row + 1, col]]); - }); - changeInput('cells_selected', transposeArray2D(selected), 'shiny.matrix'); - } - table.on('select deselect', function(e, dt, type, indexes) { - updateRowsSelected(); - updateColsSelected(); - updateCellsSelected(); - }) - } - - var selMode = data.selection.mode, selTarget = data.selection.target; - var selDisable = data.selection.selectable === false; - if (inArray(selMode, ['single', 'multiple'])) { - var selClass = inArray(data.style, ['bootstrap', 'bootstrap4']) ? 'active' : 'selected'; - // selected1: row indices; selected2: column indices - var initSel = function(x) { - if (x === null || typeof x === 'boolean' || selTarget === 'cell') { - return {rows: [], cols: []}; - } else if (selTarget === 'row') { - return {rows: $.makeArray(x), cols: []}; - } else if (selTarget === 'column') { - return {rows: [], cols: $.makeArray(x)}; - } else if (selTarget === 'row+column') { - return {rows: $.makeArray(x.rows), cols: $.makeArray(x.cols)}; - } - } - var selected = data.selection.selected; - var selected1 = initSel(selected).rows, selected2 = initSel(selected).cols; - // selectable should contain either all positive or all non-positive values, not both - // positive values indicate "selectable" while non-positive values means "nonselectable" - // the assertion is performed on R side. (only column indicides could be zero which indicates - // the row name) - var selectable = data.selection.selectable; - var selectable1 = initSel(selectable).rows, selectable2 = initSel(selectable).cols; - - // After users reorder the rows or filter the table, we cannot use the table index - // directly. Instead, we need this function to find out the rows between the two clicks. - // If user filter the table again between the start click and the end click, the behavior - // would be undefined, but it should not be a problem. - var shiftSelRowsIndex = function(start, end) { - var indexes = server ? DT_rows_all : table.rows({ search: 'applied' }).indexes().toArray(); - start = indexes.indexOf(start); end = indexes.indexOf(end); - // if start is larger than end, we need to swap - if (start > end) { - var tmp = end; end = start; start = tmp; - } - return indexes.slice(start, end + 1); - } - - var serverRowIndex = function(clientRowIndex) { - return server ? DT_rows_current[clientRowIndex] : clientRowIndex + 1; - } - - // row, column, or cell selection - var lastClickedRow; - if (inArray(selTarget, ['row', 'row+column'])) { - // Get the current selected rows. It will also - // update the selected1's value based on the current row selection state - // Note we can't put this function inside selectRows() directly, - // the reason is method.selectRows() will override selected1's value but this - // function will add rows to selected1 (keep the existing selection), which is - // inconsistent with column and cell selection. - var selectedRows = function() { - var rows = table.rows('.' + selClass); - var idx = rows.indexes().toArray(); - if (!server) { - selected1 = addOne(idx); - return selected1; - } - idx = idx.map(function(i) { - return DT_rows_current[i]; - }); - selected1 = selMode === 'multiple' ? unique(selected1.concat(idx)) : idx; - return selected1; - } - // Change selected1's value based on selectable1, then refresh the row state - var onlyKeepSelectableRows = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected1 = []; - return; - } - if (selectable1.length === 0) return; - var nonselectable = selectable1[0] <= 0; - if (nonselectable) { - // should make selectable1 positive - selected1 = $(selected1).not(selectable1.map(function(i) { return -i; })).get(); - } else { - selected1 = $(selected1).filter(selectable1).get(); - } - } - // Change selected1's value based on selectable1, then - // refresh the row selection state according to values in selected1 - var selectRows = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableRows(); - table.$('tr.' + selClass).removeClass(selClass); - if (selected1.length === 0) return; - if (server) { - table.rows({page: 'current'}).every(function() { - if (inArray(DT_rows_current[this.index()], selected1)) { - $(this.node()).addClass(selClass); - } - }); - } else { - var selected0 = selected1.map(function(i) { return i - 1; }); - $(table.rows(selected0).nodes()).addClass(selClass); - } - } - table.on('mousedown.dt', 'tbody tr', function(e) { - var $this = $(this), thisRow = table.row(this); - if (selMode === 'multiple') { - if (e.shiftKey && lastClickedRow !== undefined) { - // select or de-select depends on the last clicked row's status - var flagSel = !$this.hasClass(selClass); - var crtClickedRow = serverRowIndex(thisRow.index()); - if (server) { - var rowsIndex = shiftSelRowsIndex(lastClickedRow, crtClickedRow); - // update current page's selClass - rowsIndex.map(function(i) { - var rowIndex = DT_rows_current.indexOf(i); - if (rowIndex >= 0) { - var row = table.row(rowIndex).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - } - }); - // update selected1 - if (flagSel) { - selected1 = unique(selected1.concat(rowsIndex)); - } else { - selected1 = selected1.filter(function(index) { - return !inArray(index, rowsIndex); - }); - } - } else { - // js starts from 0 - shiftSelRowsIndex(lastClickedRow - 1, crtClickedRow - 1).map(function(value) { - var row = table.row(value).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - }); - } - e.preventDefault(); - } else { - $this.toggleClass(selClass); - } - } else { - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - } else { - table.$('tr.' + selClass).removeClass(selClass); - $this.addClass(selClass); - } - } - if (server && !$this.hasClass(selClass)) { - var id = DT_rows_current[thisRow.index()]; - // remove id from selected1 since its class .selected has been removed - if (inArray(id, selected1)) selected1.splice($.inArray(id, selected1), 1); - } - selectedRows(); // update selected1's value based on selClass - selectRows(false); // only keep the selectable rows - changeInput('rows_selected', selected1); - changeInput('row_last_clicked', serverRowIndex(thisRow.index()), null, null, {priority: 'event'}); - lastClickedRow = serverRowIndex(thisRow.index()); - }); - selectRows(false); // in case users have specified pre-selected rows - // restore selected rows after the table is redrawn (e.g. sort/search/page); - // client-side tables will preserve the selections automatically; for - // server-side tables, we have to *real* row indices are in `selected1` - changeInput('rows_selected', selected1); - if (server) table.on('draw.dt', function(e) { selectRows(false); }); - methods.selectRows = function(selected, ignoreSelectable) { - selected1 = $.makeArray(selected); - selectRows(ignoreSelectable); - changeInput('rows_selected', selected1); - } - } - - if (inArray(selTarget, ['column', 'row+column'])) { - if (selTarget === 'row+column') { - $(table.columns().footer()).css('cursor', 'pointer'); - } - // update selected2's value based on selectable2 - var onlyKeepSelectableCols = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected2 = []; - return; - } - if (selectable2.length === 0) return; - var nonselectable = selectable2[0] <= 0; - if (nonselectable) { - // need to make selectable2 positive - selected2 = $(selected2).not(selectable2.map(function(i) { return -i; })).get(); - } else { - selected2 = $(selected2).filter(selectable2).get(); - } - } - // update selected2 and then - // refresh the col selection state according to values in selected2 - var selectCols = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCols(); - // if selected2 is not a valide index (e.g., larger than the column number) - // table.columns(selected2) will fail and result in a blank table - // this is different from the table.rows(), where the out-of-range indexes - // doesn't affect at all - selected2 = $(selected2).filter(table.columns().indexes()).get(); - table.columns().nodes().flatten().to$().removeClass(selClass); - if (selected2.length > 0) - table.columns(selected2).nodes().flatten().to$().addClass(selClass); - } - var callback = function() { - var colIdx = selTarget === 'column' ? table.cell(this).index().column : - $.inArray(this, table.columns().footer()), - thisCol = $(table.column(colIdx).nodes()); - if (colIdx === -1) return; - if (thisCol.hasClass(selClass)) { - thisCol.removeClass(selClass); - selected2.splice($.inArray(colIdx, selected2), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - thisCol.addClass(selClass); - selected2 = selMode === 'single' ? [colIdx] : unique(selected2.concat([colIdx])); - } - selectCols(false); // update selected2 based on selectable - changeInput('columns_selected', selected2); - } - if (selTarget === 'column') { - $(table.table().body()).on('click.dt', 'td', callback); - } else { - $(table.table().footer()).on('click.dt', 'tr th', callback); - } - selectCols(false); // in case users have specified pre-selected columns - changeInput('columns_selected', selected2); - if (server) table.on('draw.dt', function(e) { selectCols(false); }); - methods.selectColumns = function(selected, ignoreSelectable) { - selected2 = $.makeArray(selected); - selectCols(ignoreSelectable); - changeInput('columns_selected', selected2); - } - } - - if (selTarget === 'cell') { - var selected3 = [], selectable3 = []; - if (selected !== null) selected3 = selected; - if (selectable !== null && typeof selectable !== 'boolean') selectable3 = selectable; - var findIndex = function(ij, sel) { - for (var i = 0; i < sel.length; i++) { - if (ij[0] === sel[i][0] && ij[1] === sel[i][1]) return i; - } - return -1; - } - // Change selected3's value based on selectable3, then refresh the cell state - var onlyKeepSelectableCells = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected3 = []; - return; - } - if (selectable3.length === 0) return; - var nonselectable = selectable3[0][0] <= 0; - var out = []; - if (nonselectable) { - selected3.map(function(ij) { - // should make selectable3 positive - if (findIndex([-ij[0], -ij[1]], selectable3) === -1) { out.push(ij); } - }); - } else { - selected3.map(function(ij) { - if (findIndex(ij, selectable3) > -1) { out.push(ij); } - }); - } - selected3 = out; - } - // Change selected3's value based on selectable3, then - // refresh the cell selection state according to values in selected3 - var selectCells = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCells(); - table.$('td.' + selClass).removeClass(selClass); - if (selected3.length === 0) return; - if (server) { - table.cells({page: 'current'}).every(function() { - var info = tweakCellIndex(this); - if (findIndex([info.row, info.col], selected3) > -1) - $(this.node()).addClass(selClass); - }); - } else { - selected3.map(function(ij) { - $(table.cell(ij[0] - 1, ij[1]).node()).addClass(selClass); - }); - } - }; - table.on('click.dt', 'tbody td', function() { - var $this = $(this), info = tweakCellIndex(table.cell(this)); - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - selected3.splice(findIndex([info.row, info.col], selected3), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - $this.addClass(selClass); - selected3 = selMode === 'single' ? [[info.row, info.col]] : - unique(selected3.concat([[info.row, info.col]])); - } - selectCells(false); // must call this to update selected3 based on selectable3 - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - }); - selectCells(false); // in case users have specified pre-selected columns - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - - if (server) table.on('draw.dt', function(e) { selectCells(false); }); - methods.selectCells = function(selected, ignoreSelectable) { - selected3 = selected ? selected : []; - selectCells(ignoreSelectable); - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - } - } - } - - // expose some table info to Shiny - var updateTableInfo = function(e, settings) { - // TODO: is anyone interested in the page info? - // changeInput('page_info', table.page.info()); - var updateRowInfo = function(id, modifier) { - var idx; - if (server) { - idx = modifier.page === 'current' ? DT_rows_current : DT_rows_all; - } else { - var rows = table.rows($.extend({ - search: 'applied', - page: 'all' - }, modifier)); - idx = addOne(rows.indexes().toArray()); - } - changeInput('rows' + '_' + id, idx); - }; - updateRowInfo('current', {page: 'current'}); - updateRowInfo('all', {}); - } - table.on('draw.dt', updateTableInfo); - updateTableInfo(); - - // state info - table.on('draw.dt column-visibility.dt', function() { - changeInput('state', table.state()); - }); - changeInput('state', table.state()); - - // search info - var updateSearchInfo = function() { - changeInput('search', table.search()); - if (filterRow) changeInput('search_columns', filterRow.toArray().map(function(td) { - return $(td).find('input').first().val(); - })); - } - table.on('draw.dt', updateSearchInfo); - updateSearchInfo(); - - var cellInfo = function(thiz) { - var info = tweakCellIndex(table.cell(thiz)); - info.value = table.cell(thiz).data(); - return info; - } - // the current cell clicked on - table.on('click.dt', 'tbody td', function() { - changeInput('cell_clicked', cellInfo(this), null, null, {priority: 'event'}); - }) - changeInput('cell_clicked', {}); - - // do not trigger table selection when clicking on links unless they have classes - table.on('click.dt', 'tbody td a', function(e) { - if (this.className === '') e.stopPropagation(); - }); - - methods.addRow = function(data, rowname, resetPaging) { - var n = table.columns().indexes().length, d = n - data.length; - if (d === 1) { - data = rowname.concat(data) - } else if (d !== 0) { - console.log(data); - console.log(table.columns().indexes()); - throw 'New data must be of the same length as current data (' + n + ')'; - }; - table.row.add(data).draw(resetPaging); - } - - methods.updateSearch = function(keywords) { - if (keywords.global !== null) - $(table.table().container()).find('input[type=search]').first() - .val(keywords.global).trigger('input'); - var columns = keywords.columns; - if (!filterRow || columns === null) return; - filterRow.toArray().map(function(td, i) { - var v = typeof columns === 'string' ? columns : columns[i]; - if (typeof v === 'undefined') { - console.log('The search keyword for column ' + i + ' is undefined') - return; - } - $(td).find('input').first().val(v); - searchColumn(i, v); - }); - table.draw(); - } - - methods.hideCols = function(hide, reset) { - if (reset) table.columns().visible(true, false); - table.columns(hide).visible(false); - } - - methods.showCols = function(show, reset) { - if (reset) table.columns().visible(false, false); - table.columns(show).visible(true); - } - - methods.colReorder = function(order, origOrder) { - table.colReorder.order(order, origOrder); - } - - methods.selectPage = function(page) { - if (table.page.info().pages < page || page < 1) { - throw 'Selected page is out of range'; - }; - table.page(page - 1).draw(false); - } - - methods.reloadData = function(resetPaging, clearSelection) { - // empty selections first if necessary - if (methods.selectRows && inArray('row', clearSelection)) methods.selectRows([]); - if (methods.selectColumns && inArray('column', clearSelection)) methods.selectColumns([]); - if (methods.selectCells && inArray('cell', clearSelection)) methods.selectCells([]); - table.ajax.reload(null, resetPaging); - } - - table.shinyMethods = methods; - }, - resize: function(el, width, height, instance) { - if (instance.data) this.renderValue(el, instance.data, instance); - - // dynamically adjust height if fillContainer = TRUE - if (instance.fillContainer) - this.fillAvailableHeight(el, height); - - this.adjustWidth(el); - }, - - // dynamically set the scroll body to fill available height - // (used with fillContainer = TRUE) - fillAvailableHeight: function(el, availableHeight) { - - // see how much of the table is occupied by header/footer elements - // and use that to compute a target scroll body height - var dtWrapper = $(el).find('div.dataTables_wrapper'); - var dtScrollBody = $(el).find($('div.dataTables_scrollBody')); - var framingHeight = dtWrapper.innerHeight() - dtScrollBody.innerHeight(); - var scrollBodyHeight = availableHeight - framingHeight; - - // set the height - dtScrollBody.height(scrollBodyHeight + 'px'); - }, - - // adjust the width of columns; remove the hard-coded widths on table and the - // scroll header when scrollX/Y are enabled - adjustWidth: function(el) { - var $el = $(el), table = $el.data('datatable'); - if (table) table.columns.adjust(); - $el.find('.dataTables_scrollHeadInner').css('width', '') - .children('table').css('margin-left', ''); - } -}); - - if (!HTMLWidgets.shinyMode) return; - - Shiny.addCustomMessageHandler('datatable-calls', function(data) { - var id = data.id; - var el = document.getElementById(id); - var table = el ? $(el).data('datatable') : null; - if (!table) { - console.log("Couldn't find table with id " + id); - return; - } - - var methods = table.shinyMethods, call = data.call; - if (methods[call.method]) { - methods[call.method].apply(table, call.args); - } else { - console.log("Unknown method " + call.method); - } - }); - -})(); diff --git a/docs/articles/xportr_files/datatables-binding-0.18/datatables.js b/docs/articles/xportr_files/datatables-binding-0.18/datatables.js deleted file mode 100644 index e4148252..00000000 --- a/docs/articles/xportr_files/datatables-binding-0.18/datatables.js +++ /dev/null @@ -1,1412 +0,0 @@ -(function() { - -// some helper functions: using a global object DTWidget so that it can be used -// in JS() code, e.g. datatable(options = list(foo = JS('code'))); unlike R's -// dynamic scoping, when 'code' is eval()'ed, JavaScript does not know objects -// from the "parent frame", e.g. JS('DTWidget') will not work unless it was made -// a global object -var DTWidget = {}; - -// 123456666.7890 -> 123,456,666.7890 -var markInterval = function(d, digits, interval, mark, decMark, precision) { - x = precision ? d.toPrecision(digits) : d.toFixed(digits); - if (!/^-?[\d.]+$/.test(x)) return x; - var xv = x.split('.'); - if (xv.length > 2) return x; // should have at most one decimal point - xv[0] = xv[0].replace(new RegExp('\\B(?=(\\d{' + interval + '})+(?!\\d))', 'g'), mark); - return xv.join(decMark); -}; - -DTWidget.formatCurrency = function(data, currency, digits, interval, mark, decMark, before) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - var res = markInterval(d, digits, interval, mark, decMark); - res = before ? (/^-/.test(res) ? '-' + currency + res.replace(/^-/, '') : currency + res) : - res + currency; - return res; -}; - -DTWidget.formatString = function(data, prefix, suffix) { - var d = data; - if (d === null) return ''; - return prefix + d + suffix; -}; - -DTWidget.formatPercentage = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d * 100, digits, interval, mark, decMark) + '%'; -}; - -DTWidget.formatRound = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d, digits, interval, mark, decMark); -}; - -DTWidget.formatSignif = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d, digits, interval, mark, decMark, true); -}; - -DTWidget.formatDate = function(data, method, params) { - var d = data; - if (d === null) return ''; - // (new Date('2015-10-28')).toDateString() may return 2015-10-27 because the - // actual time created could be like 'Tue Oct 27 2015 19:00:00 GMT-0500 (CDT)', - // i.e. the date-only string is treated as UTC time instead of local time - if ((method === 'toDateString' || method === 'toLocaleDateString') && /^\d{4,}\D\d{2}\D\d{2}$/.test(d)) { - d = d.split(/\D/); - d = new Date(d[0], d[1] - 1, d[2]); - } else { - d = new Date(d); - } - return d[method].apply(d, params); -}; - -window.DTWidget = DTWidget; - -var transposeArray2D = function(a) { - return a.length === 0 ? a : HTMLWidgets.transposeArray2D(a); -}; - -var crosstalkPluginsInstalled = false; - -function maybeInstallCrosstalkPlugins() { - if (crosstalkPluginsInstalled) - return; - crosstalkPluginsInstalled = true; - - $.fn.dataTable.ext.afnFiltering.push( - function(oSettings, aData, iDataIndex) { - var ctfilter = oSettings.nTable.ctfilter; - if (ctfilter && !ctfilter[iDataIndex]) - return false; - - var ctselect = oSettings.nTable.ctselect; - if (ctselect && !ctselect[iDataIndex]) - return false; - - return true; - } - ); -} - -HTMLWidgets.widget({ - name: "datatables", - type: "output", - renderOnNullValue: true, - initialize: function(el, width, height) { - $(el).html(' '); - return { - data: null, - ctfilterHandle: new crosstalk.FilterHandle(), - ctfilterSubscription: null, - ctselectHandle: new crosstalk.SelectionHandle(), - ctselectSubscription: null - }; - }, - renderValue: function(el, data, instance) { - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - instance.data = data; - return; - } - instance.data = null; - var $el = $(el); - $el.empty(); - - if (data === null) { - $el.append(' '); - // clear previous Shiny inputs (if any) - for (var i in instance.clearInputs) instance.clearInputs[i](); - instance.clearInputs = {}; - return; - } - - var crosstalkOptions = data.crosstalkOptions; - if (!crosstalkOptions) crosstalkOptions = { - 'key': null, 'group': null - }; - if (crosstalkOptions.group) { - maybeInstallCrosstalkPlugins(); - instance.ctfilterHandle.setGroup(crosstalkOptions.group); - instance.ctselectHandle.setGroup(crosstalkOptions.group); - } - - // if we are in the viewer then we always want to fillContainer and - // and autoHideNavigation (unless the user has explicitly set these) - if (window.HTMLWidgets.viewerMode) { - if (!data.hasOwnProperty("fillContainer")) - data.fillContainer = true; - if (!data.hasOwnProperty("autoHideNavigation")) - data.autoHideNavigation = true; - } - - // propagate fillContainer to instance (so we have it in resize) - instance.fillContainer = data.fillContainer; - - var cells = data.data; - - if (cells instanceof Array) cells = transposeArray2D(cells); - - $el.append(data.container); - var $table = $el.find('table'); - if (data.class) $table.addClass(data.class); - if (data.caption) $table.prepend(data.caption); - - if (!data.selection) data.selection = { - mode: 'none', selected: null, target: 'row', selectable: null - }; - if (HTMLWidgets.shinyMode && data.selection.mode !== 'none' && - data.selection.target === 'row+column') { - if ($table.children('tfoot').length === 0) { - $table.append($('')); - $table.find('thead tr').clone().appendTo($table.find('tfoot')); - } - } - - // column filters - var filterRow; - switch (data.filter) { - case 'top': - $table.children('thead').append(data.filterHTML); - filterRow = $table.find('thead tr:last td'); - break; - case 'bottom': - if ($table.children('tfoot').length === 0) { - $table.append($('')); - } - $table.children('tfoot').prepend(data.filterHTML); - filterRow = $table.find('tfoot tr:first td'); - break; - } - - var options = { searchDelay: 1000 }; - if (cells !== null) $.extend(options, { - data: cells - }); - - // options for fillContainer - var bootstrapActive = typeof($.fn.popover) != 'undefined'; - if (instance.fillContainer) { - - // force scrollX/scrollY and turn off autoWidth - options.scrollX = true; - options.scrollY = "100px"; // can be any value, we'll adjust below - - // if we aren't paginating then move around the info/filter controls - // to save space at the bottom and rephrase the info callback - if (data.options.paging === false) { - - // we know how to do this cleanly for bootstrap, not so much - // for other themes/layouts - if (bootstrapActive) { - options.dom = "<'row'<'col-sm-4'i><'col-sm-8'f>>" + - "<'row'<'col-sm-12'tr>>"; - } - - options.fnInfoCallback = function(oSettings, iStart, iEnd, - iMax, iTotal, sPre) { - return Number(iTotal).toLocaleString() + " records"; - }; - } - } - - // auto hide navigation if requested - // Note, this only works on client-side processing mode as on server-side, - // cells (data.data) is null; In addition, we require the pageLength option - // being provided explicitly to enable this. Despite we may be able to deduce - // the default value of pageLength, it may complicate things so we'd rather - // put this responsiblity to users and warn them on the R side. - if (data.autoHideNavigation === true && data.options.paging !== false) { - // strip all nav if length >= cells - if ((cells instanceof Array) && data.options.pageLength >= cells.length) - options.dom = bootstrapActive ? "<'row'<'col-sm-12'tr>>" : "t"; - // alternatively lean things out for flexdashboard mobile portrait - else if (bootstrapActive && window.FlexDashboard && window.FlexDashboard.isMobilePhone()) - options.dom = "<'row'<'col-sm-12'f>>" + - "<'row'<'col-sm-12'tr>>" + - "<'row'<'col-sm-12'p>>"; - } - - $.extend(true, options, data.options || {}); - - var searchCols = options.searchCols; - if (searchCols) { - searchCols = searchCols.map(function(x) { - return x === null ? '' : x.search; - }); - // FIXME: this means I don't respect the escapeRegex setting - delete options.searchCols; - } - - // server-side processing? - var server = options.serverSide === true; - - // use the dataSrc function to pre-process JSON data returned from R - var DT_rows_all = [], DT_rows_current = []; - if (server && HTMLWidgets.shinyMode && typeof options.ajax === 'object' && - /^session\/[\da-z]+\/dataobj/.test(options.ajax.url) && !options.ajax.dataSrc) { - options.ajax.dataSrc = function(json) { - DT_rows_all = $.makeArray(json.DT_rows_all); - DT_rows_current = $.makeArray(json.DT_rows_current); - var data = json.data; - if (!colReorderEnabled()) return data; - var table = $table.DataTable(), order = table.colReorder.order(), flag = true, i, j, row; - for (i = 0; i < order.length; ++i) if (order[i] !== i) flag = false; - if (flag) return data; - for (i = 0; i < data.length; ++i) { - row = data[i].slice(); - for (j = 0; j < order.length; ++j) data[i][j] = row[order[j]]; - } - return data; - }; - } - - var thiz = this; - if (instance.fillContainer) $table.on('init.dt', function(e) { - thiz.fillAvailableHeight(el, $(el).innerHeight()); - }); - // If the page contains serveral datatables and one of which enables colReorder, - // the table.colReorder.order() function will exist but throws error when called. - // So it seems like the only way to know if colReorder is enabled or not is to - // check the options. - var colReorderEnabled = function() { return "colReorder" in options; }; - var table = $table.DataTable(options); - $el.data('datatable', table); - - // Unregister previous Crosstalk event subscriptions, if they exist - if (instance.ctfilterSubscription) { - instance.ctfilterHandle.off("change", instance.ctfilterSubscription); - instance.ctfilterSubscription = null; - } - if (instance.ctselectSubscription) { - instance.ctselectHandle.off("change", instance.ctselectSubscription); - instance.ctselectSubscription = null; - } - - if (!crosstalkOptions.group) { - $table[0].ctfilter = null; - $table[0].ctselect = null; - } else { - var key = crosstalkOptions.key; - function keysToMatches(keys) { - if (!keys) { - return null; - } else { - var selectedKeys = {}; - for (var i = 0; i < keys.length; i++) { - selectedKeys[keys[i]] = true; - } - var matches = {}; - for (var j = 0; j < key.length; j++) { - if (selectedKeys[key[j]]) - matches[j] = true; - } - return matches; - } - } - - function applyCrosstalkFilter(e) { - $table[0].ctfilter = keysToMatches(e.value); - table.draw(); - } - instance.ctfilterSubscription = instance.ctfilterHandle.on("change", applyCrosstalkFilter); - applyCrosstalkFilter({value: instance.ctfilterHandle.filteredKeys}); - - function applyCrosstalkSelection(e) { - if (e.sender !== instance.ctselectHandle) { - table - .rows('.' + selClass, {search: 'applied'}) - .nodes() - .to$() - .removeClass(selClass); - if (selectedRows) - changeInput('rows_selected', selectedRows(), void 0, true); - } - - if (e.sender !== instance.ctselectHandle && e.value && e.value.length) { - var matches = keysToMatches(e.value); - - // persistent selection with plotly (& leaflet) - var ctOpts = crosstalk.var("plotlyCrosstalkOpts").get() || {}; - if (ctOpts.persistent === true) { - var matches = $.extend(matches, $table[0].ctselect); - } - - $table[0].ctselect = matches; - table.draw(); - } else { - if ($table[0].ctselect) { - $table[0].ctselect = null; - table.draw(); - } - } - } - instance.ctselectSubscription = instance.ctselectHandle.on("change", applyCrosstalkSelection); - // TODO: This next line doesn't seem to work when renderDataTable is used - applyCrosstalkSelection({value: instance.ctselectHandle.value}); - } - - var inArray = function(val, array) { - return $.inArray(val, $.makeArray(array)) > -1; - }; - - // encode + to %2B when searching in the table on server side, because - // shiny::parseQueryString() treats + as spaces, and DataTables does not - // encode + to %2B (or % to %25) when sending the request - var encode_plus = function(x) { - return server ? x.replace(/%/g, '%25').replace(/\+/g, '%2B') : x; - }; - - // search the i-th column - var searchColumn = function(i, value) { - var regex = false, ci = true; - if (options.search) { - regex = options.search.regex, - ci = options.search.caseInsensitive !== false; - } - return table.column(i).search(encode_plus(value), regex, !regex, ci); - }; - - if (data.filter !== 'none') { - - filterRow.each(function(i, td) { - - var $td = $(td), type = $td.data('type'), filter; - var $input = $td.children('div').first().children('input'); - $input.prop('disabled', !table.settings()[0].aoColumns[i].bSearchable || type === 'disabled'); - $input.on('input blur', function() { - $input.next('span').toggle(Boolean($input.val())); - }); - // Bootstrap sets pointer-events to none and we won't be able to click - // the clear button - $input.next('span').css('pointer-events', 'auto').hide().click(function() { - $(this).hide().prev('input').val('').trigger('input').focus(); - }); - var searchCol; // search string for this column - if (searchCols && searchCols[i]) { - searchCol = searchCols[i]; - $input.val(searchCol).trigger('input'); - } - var $x = $td.children('div').last(); - - // remove the overflow: hidden attribute of the scrollHead - // (otherwise the scrolling table body obscures the filters) - // The workaround and the discussion from - // https://github.com/rstudio/DT/issues/554#issuecomment-518007347 - // Otherwise the filter selection will not be anchored to the values - // when the columns number is many and scrollX is enabled. - var scrollHead = $(el).find('.dataTables_scrollHead,.dataTables_scrollFoot'); - var cssOverflowHead = scrollHead.css('overflow'); - var scrollBody = $(el).find('.dataTables_scrollBody'); - var cssOverflowBody = scrollBody.css('overflow'); - var scrollTable = $(el).find('.dataTables_scroll'); - var cssOverflowTable = scrollTable.css('overflow'); - if (cssOverflowHead === 'hidden') { - $x.on('show hide', function(e) { - if (e.type === 'show') { - scrollHead.css('overflow', 'visible'); - scrollBody.css('overflow', 'visible'); - scrollTable.css('overflow-x', 'scroll'); - } else { - scrollHead.css('overflow', cssOverflowHead); - scrollBody.css('overflow', cssOverflowBody); - scrollTable.css('overflow-x', cssOverflowTable); - } - }); - $x.css('z-index', 25); - } - - if (inArray(type, ['factor', 'logical'])) { - $input.on({ - click: function() { - $input.parent().hide(); $x.show().trigger('show'); filter[0].selectize.focus(); - }, - input: function() { - if ($input.val() === '') filter[0].selectize.setValue([]); - } - }); - var $input2 = $x.children('select'); - filter = $input2.selectize({ - options: $input2.data('options').map(function(v, i) { - return ({text: v, value: v}); - }), - plugins: ['remove_button'], - hideSelected: true, - onChange: function(value) { - if (value === null) value = []; // compatibility with jQuery 3.0 - $input.val(value.length ? JSON.stringify(value) : ''); - if (value.length) $input.trigger('input'); - $input.attr('title', $input.val()); - if (server) { - table.column(i).search(value.length ? encode_plus(JSON.stringify(value)) : '').draw(); - return; - } - // turn off filter if nothing selected - $td.data('filter', value.length > 0); - table.draw(); // redraw table, and filters will be applied - } - }); - if (searchCol) filter[0].selectize.setValue(JSON.parse(searchCol)); - filter[0].selectize.on('blur', function() { - $x.hide().trigger('hide'); $input.parent().show(); $input.trigger('blur'); - }); - filter.next('div').css('margin-bottom', 'auto'); - } else if (type === 'character') { - var fun = function() { - searchColumn(i, $input.val()).draw(); - }; - if (server) { - fun = $.fn.dataTable.util.throttle(fun, options.searchDelay); - } - $input.on('input', fun); - } else if (inArray(type, ['number', 'integer', 'date', 'time'])) { - var $x0 = $x; - $x = $x0.children('div').first(); - $x0.css({ - 'background-color': '#fff', - 'border': '1px #ddd solid', - 'border-radius': '4px', - 'padding': '20px 20px 10px 20px' - }); - var $spans = $x0.children('span').css({ - 'margin-top': '10px', - 'white-space': 'nowrap' - }); - var $span1 = $spans.first(), $span2 = $spans.last(); - var r1 = +$x.data('min'), r2 = +$x.data('max'); - // when the numbers are too small or have many decimal places, the - // slider may have numeric precision problems (#150) - var scale = Math.pow(10, Math.max(0, +$x.data('scale') || 0)); - r1 = Math.round(r1 * scale); r2 = Math.round(r2 * scale); - var scaleBack = function(x, scale) { - if (scale === 1) return x; - var d = Math.round(Math.log(scale) / Math.log(10)); - // to avoid problems like 3.423/100 -> 0.034230000000000003 - return (x / scale).toFixed(d); - }; - var slider_min = function() { - return filter.noUiSlider('options').range.min; - }; - var slider_max = function() { - return filter.noUiSlider('options').range.max; - }; - $input.on({ - focus: function() { - $x0.show().trigger('show'); - // first, make sure the slider div leaves at least 20px between - // the two (slider value) span's - $x0.width(Math.max(160, $span1.outerWidth() + $span2.outerWidth() + 20)); - // then, if the input is really wide, make the slider the same - // width as the input - if ($x0.outerWidth() < $input.outerWidth()) { - $x0.outerWidth($input.outerWidth()); - } - // make sure the slider div does not reach beyond the right margin - if ($(window).width() < $x0.offset().left + $x0.width()) { - $x0.offset({ - 'left': $input.offset().left + $input.outerWidth() - $x0.outerWidth() - }); - } - }, - blur: function() { - $x0.hide().trigger('hide'); - }, - input: function() { - if ($input.val() === '') filter.val([slider_min(), slider_max()]); - }, - change: function() { - var v = $input.val().replace(/\s/g, ''); - if (v === '') return; - v = v.split('...'); - if (v.length !== 2) { - $input.parent().addClass('has-error'); - return; - } - if (v[0] === '') v[0] = slider_min(); - if (v[1] === '') v[1] = slider_max(); - $input.parent().removeClass('has-error'); - // treat date as UTC time at midnight - var strTime = function(x) { - var s = type === 'date' ? 'T00:00:00Z' : ''; - var t = new Date(x + s).getTime(); - // add 10 minutes to date since it does not hurt the date, and - // it helps avoid the tricky floating point arithmetic problems, - // e.g. sometimes the date may be a few milliseconds earlier - // than the midnight due to precision problems in noUiSlider - return type === 'date' ? t + 3600000 : t; - }; - if (inArray(type, ['date', 'time'])) { - v[0] = strTime(v[0]); - v[1] = strTime(v[1]); - } - if (v[0] != slider_min()) v[0] *= scale; - if (v[1] != slider_max()) v[1] *= scale; - filter.val(v); - } - }); - var formatDate = function(d, isoFmt) { - d = scaleBack(d, scale); - if (type === 'number') return d; - if (type === 'integer') return parseInt(d); - var x = new Date(+d); - var fmt = ('filterDateFmt' in data) ? data.filterDateFmt[i] : undefined; - if (fmt !== undefined && isoFmt === false) return x[fmt.method].apply(x, fmt.params); - if (type === 'date') { - var pad0 = function(x) { - return ('0' + x).substr(-2, 2); - }; - return x.getUTCFullYear() + '-' + pad0(1 + x.getUTCMonth()) - + '-' + pad0(x.getUTCDate()); - } else { - return x.toISOString(); - } - }; - var opts = type === 'date' ? { step: 60 * 60 * 1000 } : - type === 'integer' ? { step: 1 } : {}; - filter = $x.noUiSlider($.extend({ - start: [r1, r2], - range: {min: r1, max: r2}, - connect: true - }, opts)); - if (scale > 1) (function() { - var t1 = r1, t2 = r2; - var val = filter.val(); - while (val[0] > r1 || val[1] < r2) { - if (val[0] > r1) { - t1 -= val[0] - r1; - } - if (val[1] < r2) { - t2 += r2 - val[1]; - } - filter = $x.noUiSlider($.extend({ - start: [t1, t2], - range: {min: t1, max: t2}, - connect: true - }, opts), true); - val = filter.val(); - } - r1 = t1; r2 = t2; - })(); - var updateSliderText = function(v1, v2) { - $span1.text(formatDate(v1, false)); $span2.text(formatDate(v2, false)); - }; - updateSliderText(r1, r2); - var updateSlider = function(e) { - var val = filter.val(); - // turn off filter if in full range - $td.data('filter', val[0] > slider_min() || val[1] < slider_max()); - var v1 = formatDate(val[0]), v2 = formatDate(val[1]), ival; - if ($td.data('filter')) { - ival = v1 + ' ... ' + v2; - $input.attr('title', ival).val(ival).trigger('input'); - } else { - $input.attr('title', '').val(''); - } - updateSliderText(val[0], val[1]); - if (e.type === 'slide') return; // no searching when sliding only - if (server) { - table.column(i).search($td.data('filter') ? ival : '').draw(); - return; - } - table.draw(); - }; - filter.on({ - set: updateSlider, - slide: updateSlider - }); - } - - // server-side processing will be handled by R (or whatever server - // language you use); the following code is only needed for client-side - // processing - if (server) { - // if a search string has been pre-set, search now - if (searchCol) searchColumn(i, searchCol).draw(); - return; - } - - var customFilter = function(settings, data, dataIndex) { - // there is no way to attach a search function to a specific table, - // and we need to make sure a global search function is not applied to - // all tables (i.e. a range filter in a previous table should not be - // applied to the current table); we use the settings object to - // determine if we want to perform searching on the current table, - // since settings.sTableId will be different to different tables - if (table.settings()[0] !== settings) return true; - // no filter on this column or no need to filter this column - if (typeof filter === 'undefined' || !$td.data('filter')) return true; - - var r = filter.val(), v, r0, r1; - var i_data = function(i) { - if (!colReorderEnabled()) return i; - var order = table.colReorder.order(), k; - for (k = 0; k < order.length; ++k) if (order[k] === i) return k; - return i; // in theory it will never be here... - } - v = data[i_data(i)]; - if (type === 'number' || type === 'integer') { - v = parseFloat(v); - // how to handle NaN? currently exclude these rows - if (isNaN(v)) return(false); - r0 = parseFloat(scaleBack(r[0], scale)) - r1 = parseFloat(scaleBack(r[1], scale)); - if (v >= r0 && v <= r1) return true; - } else if (type === 'date' || type === 'time') { - v = new Date(v); - r0 = new Date(r[0] / scale); r1 = new Date(r[1] / scale); - if (v >= r0 && v <= r1) return true; - } else if (type === 'factor') { - if (r.length === 0 || inArray(v, r)) return true; - } else if (type === 'logical') { - if (r.length === 0) return true; - if (inArray(v === '' ? 'na' : v, r)) return true; - } - return false; - }; - - $.fn.dataTable.ext.search.push(customFilter); - - // search for the preset search strings if it is non-empty - if (searchCol) { - if (inArray(type, ['factor', 'logical'])) { - filter[0].selectize.setValue(JSON.parse(searchCol)); - } else if (type === 'character') { - $input.trigger('input'); - } else if (inArray(type, ['number', 'integer', 'date', 'time'])) { - $input.trigger('change'); - } - } - - }); - - } - - // highlight search keywords - var highlight = function() { - var body = $(table.table().body()); - // removing the old highlighting first - body.unhighlight(); - - // don't highlight the "not found" row, so we get the rows using the api - if (table.rows({ filter: 'applied' }).data().length === 0) return; - // highlight global search keywords - body.highlight($.trim(table.search()).split(/\s+/)); - // then highlight keywords from individual column filters - if (filterRow) filterRow.each(function(i, td) { - var $td = $(td), type = $td.data('type'); - if (type !== 'character') return; - var $input = $td.children('div').first().children('input'); - var column = table.column(i).nodes().to$(), - val = $.trim($input.val()); - if (type !== 'character' || val === '') return; - column.highlight(val.split(/\s+/)); - }); - }; - - if (options.searchHighlight) { - table - .on('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth', highlight) - .on('destroy', function() { - // remove event handler - table.off('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth'); - }); - - // Set the option for escaping regex characters in our search string. This will be used - // for all future matching. - jQuery.fn.highlight.options.escapeRegex = (!options.search || !options.search.regex); - - // initial highlight for state saved conditions and initial states - highlight(); - } - - // run the callback function on the table instance - if (typeof data.callback === 'function') data.callback(table); - - // double click to edit the cell, row, column, or all cells - if (data.editable) table.on('dblclick.dt', 'tbody td', function(e) { - // only bring up the editor when the cell itself is dbclicked, and ignore - // other dbclick events bubbled up (e.g. from the ) - if (e.target !== this) return; - var target = [], immediate = false; - switch (data.editable.target) { - case 'cell': - target = [this]; - immediate = true; // edit will take effect immediately - break; - case 'row': - target = table.cells(table.cell(this).index().row, '*').nodes(); - break; - case 'column': - target = table.cells('*', table.cell(this).index().column).nodes(); - break; - case 'all': - target = table.cells().nodes(); - break; - default: - throw 'The editable parameter must be "cell", "row", "column", or "all"'; - } - var disableCols = data.editable.disable ? data.editable.disable.columns : null; - for (var i = 0; i < target.length; i++) { - (function(cell, current) { - var $cell = $(cell), html = $cell.html(); - var _cell = table.cell(cell), value = _cell.data(); - var $input = $(''), changed = false; - if (!immediate) { - $cell.data('input', $input).data('html', html); - $input.attr('title', 'Hit Ctrl+Enter to finish editing, or Esc to cancel'); - } - $input.val(value); - if (inArray(_cell.index().column, disableCols)) { - $input.attr('readonly', '').css('filter', 'invert(25%)'); - } - $cell.empty().append($input); - if (cell === current) $input.focus(); - $input.css('width', '100%'); - - if (immediate) $input.on('change', function() { - changed = true; - var valueNew = $input.val(); - if (valueNew != value) { - _cell.data(valueNew); - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', [cellInfo(cell)], 'DT.cellInfo', null, {priority: "event"}); - } - // for server-side processing, users have to call replaceData() to update the table - if (!server) table.draw(false); - } else { - $cell.html(html); - } - $input.remove(); - }).on('blur', function() { - if (!changed) $input.trigger('change'); - }).on('keyup', function(e) { - // hit Escape to cancel editing - if (e.keyCode === 27) $input.trigger('blur'); - }); - - // bulk edit (row, column, or all) - if (!immediate) $input.on('keyup', function(e) { - var removeInput = function($cell, restore) { - $cell.data('input').remove(); - if (restore) $cell.html($cell.data('html')); - } - if (e.keyCode === 27) { - for (var i = 0; i < target.length; i++) { - removeInput($(target[i]), true); - } - } else if (e.keyCode === 13 && e.ctrlKey) { - // Ctrl + Enter - var cell, $cell, _cell, cellData = []; - for (var i = 0; i < target.length; i++) { - cell = target[i]; $cell = $(cell); _cell = table.cell(cell); - _cell.data($cell.data('input').val()); - HTMLWidgets.shinyMode && cellData.push(cellInfo(cell)); - removeInput($cell, false); - } - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', cellData, 'DT.cellInfo', null, {priority: "event"}); - } - if (!server) table.draw(false); - } - }); - })(target[i], this); - } - }); - - // interaction with shiny - if (!HTMLWidgets.shinyMode && !crosstalkOptions.group) return; - - var methods = {}; - var shinyData = {}; - - methods.updateCaption = function(caption) { - if (!caption) return; - $table.children('caption').replaceWith(caption); - } - - // register clear functions to remove input values when the table is removed - instance.clearInputs = {}; - - var changeInput = function(id, value, type, noCrosstalk, opts) { - var event = id; - id = el.id + '_' + id; - if (type) id = id + ':' + type; - // do not update if the new value is the same as old value - if (event !== 'cell_edit' && !/_clicked$/.test(event) && shinyData.hasOwnProperty(id) && shinyData[id] === JSON.stringify(value)) - return; - shinyData[id] = JSON.stringify(value); - if (HTMLWidgets.shinyMode && Shiny.setInputValue) { - Shiny.setInputValue(id, value, opts); - if (!instance.clearInputs[id]) instance.clearInputs[id] = function() { - Shiny.setInputValue(id, null); - } - } - - // HACK - if (event === "rows_selected" && !noCrosstalk) { - if (crosstalkOptions.group) { - var keys = crosstalkOptions.key; - var selectedKeys = null; - if (value) { - selectedKeys = []; - for (var i = 0; i < value.length; i++) { - // The value array's contents use 1-based row numbers, so we must - // convert to 0-based before indexing into the keys array. - selectedKeys.push(keys[value[i] - 1]); - } - } - instance.ctselectHandle.set(selectedKeys); - } - } - }; - - var addOne = function(x) { - return x.map(function(i) { return 1 + i; }); - }; - - var unique = function(x) { - var ux = []; - $.each(x, function(i, el){ - if ($.inArray(el, ux) === -1) ux.push(el); - }); - return ux; - } - - // change the row index of a cell - var tweakCellIndex = function(cell) { - var info = cell.index(); - // some cell may not be valid. e.g, #759 - // when using the RowGroup extension, datatables will - // generate the row label and the cells are not part of - // the data thus contain no row/col info - if (info === undefined) - return {row: null, col: null}; - if (server) { - info.row = DT_rows_current[info.row]; - } else { - info.row += 1; - } - return {row: info.row, col: info.column}; - } - - var cleanSelectedValues = function() { - changeInput('rows_selected', []); - changeInput('columns_selected', []); - changeInput('cells_selected', transposeArray2D([]), 'shiny.matrix'); - } - // #828 we should clean the selection on the server-side when the table reloads - cleanSelectedValues(); - - // a flag to indicates if select extension is initialized or not - var flagSelectExt = table.settings()[0]._select !== undefined; - // the Select extension should only be used in the client mode and - // when the selection.mode is set to none - if (data.selection.mode === 'none' && !server && flagSelectExt) { - var updateRowsSelected = function() { - var rows = table.rows({selected: true}); - var selected = []; - $.each(rows.indexes().toArray(), function(i, v) { - selected.push(v + 1); - }); - changeInput('rows_selected', selected); - } - var updateColsSelected = function() { - var columns = table.columns({selected: true}); - changeInput('columns_selected', columns.indexes().toArray()); - } - var updateCellsSelected = function() { - var cells = table.cells({selected: true}); - var selected = []; - cells.every(function() { - var row = this.index().row; - var col = this.index().column; - selected = selected.concat([[row + 1, col]]); - }); - changeInput('cells_selected', transposeArray2D(selected), 'shiny.matrix'); - } - table.on('select deselect', function(e, dt, type, indexes) { - updateRowsSelected(); - updateColsSelected(); - updateCellsSelected(); - }) - } - - var selMode = data.selection.mode, selTarget = data.selection.target; - var selDisable = data.selection.selectable === false; - if (inArray(selMode, ['single', 'multiple'])) { - var selClass = inArray(data.style, ['bootstrap', 'bootstrap4']) ? 'active' : 'selected'; - // selected1: row indices; selected2: column indices - var initSel = function(x) { - if (x === null || typeof x === 'boolean' || selTarget === 'cell') { - return {rows: [], cols: []}; - } else if (selTarget === 'row') { - return {rows: $.makeArray(x), cols: []}; - } else if (selTarget === 'column') { - return {rows: [], cols: $.makeArray(x)}; - } else if (selTarget === 'row+column') { - return {rows: $.makeArray(x.rows), cols: $.makeArray(x.cols)}; - } - } - var selected = data.selection.selected; - var selected1 = initSel(selected).rows, selected2 = initSel(selected).cols; - // selectable should contain either all positive or all non-positive values, not both - // positive values indicate "selectable" while non-positive values means "nonselectable" - // the assertion is performed on R side. (only column indicides could be zero which indicates - // the row name) - var selectable = data.selection.selectable; - var selectable1 = initSel(selectable).rows, selectable2 = initSel(selectable).cols; - - // After users reorder the rows or filter the table, we cannot use the table index - // directly. Instead, we need this function to find out the rows between the two clicks. - // If user filter the table again between the start click and the end click, the behavior - // would be undefined, but it should not be a problem. - var shiftSelRowsIndex = function(start, end) { - var indexes = server ? DT_rows_all : table.rows({ search: 'applied' }).indexes().toArray(); - start = indexes.indexOf(start); end = indexes.indexOf(end); - // if start is larger than end, we need to swap - if (start > end) { - var tmp = end; end = start; start = tmp; - } - return indexes.slice(start, end + 1); - } - - var serverRowIndex = function(clientRowIndex) { - return server ? DT_rows_current[clientRowIndex] : clientRowIndex + 1; - } - - // row, column, or cell selection - var lastClickedRow; - if (inArray(selTarget, ['row', 'row+column'])) { - // Get the current selected rows. It will also - // update the selected1's value based on the current row selection state - // Note we can't put this function inside selectRows() directly, - // the reason is method.selectRows() will override selected1's value but this - // function will add rows to selected1 (keep the existing selection), which is - // inconsistent with column and cell selection. - var selectedRows = function() { - var rows = table.rows('.' + selClass); - var idx = rows.indexes().toArray(); - if (!server) { - selected1 = addOne(idx); - return selected1; - } - idx = idx.map(function(i) { - return DT_rows_current[i]; - }); - selected1 = selMode === 'multiple' ? unique(selected1.concat(idx)) : idx; - return selected1; - } - // Change selected1's value based on selectable1, then refresh the row state - var onlyKeepSelectableRows = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected1 = []; - return; - } - if (selectable1.length === 0) return; - var nonselectable = selectable1[0] <= 0; - if (nonselectable) { - // should make selectable1 positive - selected1 = $(selected1).not(selectable1.map(function(i) { return -i; })).get(); - } else { - selected1 = $(selected1).filter(selectable1).get(); - } - } - // Change selected1's value based on selectable1, then - // refresh the row selection state according to values in selected1 - var selectRows = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableRows(); - table.$('tr.' + selClass).removeClass(selClass); - if (selected1.length === 0) return; - if (server) { - table.rows({page: 'current'}).every(function() { - if (inArray(DT_rows_current[this.index()], selected1)) { - $(this.node()).addClass(selClass); - } - }); - } else { - var selected0 = selected1.map(function(i) { return i - 1; }); - $(table.rows(selected0).nodes()).addClass(selClass); - } - } - table.on('mousedown.dt', 'tbody tr', function(e) { - var $this = $(this), thisRow = table.row(this); - if (selMode === 'multiple') { - if (e.shiftKey && lastClickedRow !== undefined) { - // select or de-select depends on the last clicked row's status - var flagSel = !$this.hasClass(selClass); - var crtClickedRow = serverRowIndex(thisRow.index()); - if (server) { - var rowsIndex = shiftSelRowsIndex(lastClickedRow, crtClickedRow); - // update current page's selClass - rowsIndex.map(function(i) { - var rowIndex = DT_rows_current.indexOf(i); - if (rowIndex >= 0) { - var row = table.row(rowIndex).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - } - }); - // update selected1 - if (flagSel) { - selected1 = unique(selected1.concat(rowsIndex)); - } else { - selected1 = selected1.filter(function(index) { - return !inArray(index, rowsIndex); - }); - } - } else { - // js starts from 0 - shiftSelRowsIndex(lastClickedRow - 1, crtClickedRow - 1).map(function(value) { - var row = table.row(value).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - }); - } - e.preventDefault(); - } else { - $this.toggleClass(selClass); - } - } else { - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - } else { - table.$('tr.' + selClass).removeClass(selClass); - $this.addClass(selClass); - } - } - if (server && !$this.hasClass(selClass)) { - var id = DT_rows_current[thisRow.index()]; - // remove id from selected1 since its class .selected has been removed - if (inArray(id, selected1)) selected1.splice($.inArray(id, selected1), 1); - } - selectedRows(); // update selected1's value based on selClass - selectRows(false); // only keep the selectable rows - changeInput('rows_selected', selected1); - changeInput('row_last_clicked', serverRowIndex(thisRow.index()), null, null, {priority: 'event'}); - lastClickedRow = serverRowIndex(thisRow.index()); - }); - selectRows(false); // in case users have specified pre-selected rows - // restore selected rows after the table is redrawn (e.g. sort/search/page); - // client-side tables will preserve the selections automatically; for - // server-side tables, we have to *real* row indices are in `selected1` - changeInput('rows_selected', selected1); - if (server) table.on('draw.dt', function(e) { selectRows(false); }); - methods.selectRows = function(selected, ignoreSelectable) { - selected1 = $.makeArray(selected); - selectRows(ignoreSelectable); - changeInput('rows_selected', selected1); - } - } - - if (inArray(selTarget, ['column', 'row+column'])) { - if (selTarget === 'row+column') { - $(table.columns().footer()).css('cursor', 'pointer'); - } - // update selected2's value based on selectable2 - var onlyKeepSelectableCols = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected2 = []; - return; - } - if (selectable2.length === 0) return; - var nonselectable = selectable2[0] <= 0; - if (nonselectable) { - // need to make selectable2 positive - selected2 = $(selected2).not(selectable2.map(function(i) { return -i; })).get(); - } else { - selected2 = $(selected2).filter(selectable2).get(); - } - } - // update selected2 and then - // refresh the col selection state according to values in selected2 - var selectCols = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCols(); - // if selected2 is not a valide index (e.g., larger than the column number) - // table.columns(selected2) will fail and result in a blank table - // this is different from the table.rows(), where the out-of-range indexes - // doesn't affect at all - selected2 = $(selected2).filter(table.columns().indexes()).get(); - table.columns().nodes().flatten().to$().removeClass(selClass); - if (selected2.length > 0) - table.columns(selected2).nodes().flatten().to$().addClass(selClass); - } - var callback = function() { - var colIdx = selTarget === 'column' ? table.cell(this).index().column : - $.inArray(this, table.columns().footer()), - thisCol = $(table.column(colIdx).nodes()); - if (colIdx === -1) return; - if (thisCol.hasClass(selClass)) { - thisCol.removeClass(selClass); - selected2.splice($.inArray(colIdx, selected2), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - thisCol.addClass(selClass); - selected2 = selMode === 'single' ? [colIdx] : unique(selected2.concat([colIdx])); - } - selectCols(false); // update selected2 based on selectable - changeInput('columns_selected', selected2); - } - if (selTarget === 'column') { - $(table.table().body()).on('click.dt', 'td', callback); - } else { - $(table.table().footer()).on('click.dt', 'tr th', callback); - } - selectCols(false); // in case users have specified pre-selected columns - changeInput('columns_selected', selected2); - if (server) table.on('draw.dt', function(e) { selectCols(false); }); - methods.selectColumns = function(selected, ignoreSelectable) { - selected2 = $.makeArray(selected); - selectCols(ignoreSelectable); - changeInput('columns_selected', selected2); - } - } - - if (selTarget === 'cell') { - var selected3 = [], selectable3 = []; - if (selected !== null) selected3 = selected; - if (selectable !== null && typeof selectable !== 'boolean') selectable3 = selectable; - var findIndex = function(ij, sel) { - for (var i = 0; i < sel.length; i++) { - if (ij[0] === sel[i][0] && ij[1] === sel[i][1]) return i; - } - return -1; - } - // Change selected3's value based on selectable3, then refresh the cell state - var onlyKeepSelectableCells = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected3 = []; - return; - } - if (selectable3.length === 0) return; - var nonselectable = selectable3[0][0] <= 0; - var out = []; - if (nonselectable) { - selected3.map(function(ij) { - // should make selectable3 positive - if (findIndex([-ij[0], -ij[1]], selectable3) === -1) { out.push(ij); } - }); - } else { - selected3.map(function(ij) { - if (findIndex(ij, selectable3) > -1) { out.push(ij); } - }); - } - selected3 = out; - } - // Change selected3's value based on selectable3, then - // refresh the cell selection state according to values in selected3 - var selectCells = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCells(); - table.$('td.' + selClass).removeClass(selClass); - if (selected3.length === 0) return; - if (server) { - table.cells({page: 'current'}).every(function() { - var info = tweakCellIndex(this); - if (findIndex([info.row, info.col], selected3) > -1) - $(this.node()).addClass(selClass); - }); - } else { - selected3.map(function(ij) { - $(table.cell(ij[0] - 1, ij[1]).node()).addClass(selClass); - }); - } - }; - table.on('click.dt', 'tbody td', function() { - var $this = $(this), info = tweakCellIndex(table.cell(this)); - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - selected3.splice(findIndex([info.row, info.col], selected3), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - $this.addClass(selClass); - selected3 = selMode === 'single' ? [[info.row, info.col]] : - unique(selected3.concat([[info.row, info.col]])); - } - selectCells(false); // must call this to update selected3 based on selectable3 - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - }); - selectCells(false); // in case users have specified pre-selected columns - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - - if (server) table.on('draw.dt', function(e) { selectCells(false); }); - methods.selectCells = function(selected, ignoreSelectable) { - selected3 = selected ? selected : []; - selectCells(ignoreSelectable); - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - } - } - } - - // expose some table info to Shiny - var updateTableInfo = function(e, settings) { - // TODO: is anyone interested in the page info? - // changeInput('page_info', table.page.info()); - var updateRowInfo = function(id, modifier) { - var idx; - if (server) { - idx = modifier.page === 'current' ? DT_rows_current : DT_rows_all; - } else { - var rows = table.rows($.extend({ - search: 'applied', - page: 'all' - }, modifier)); - idx = addOne(rows.indexes().toArray()); - } - changeInput('rows' + '_' + id, idx); - }; - updateRowInfo('current', {page: 'current'}); - updateRowInfo('all', {}); - } - table.on('draw.dt', updateTableInfo); - updateTableInfo(); - - // state info - table.on('draw.dt column-visibility.dt', function() { - changeInput('state', table.state()); - }); - changeInput('state', table.state()); - - // search info - var updateSearchInfo = function() { - changeInput('search', table.search()); - if (filterRow) changeInput('search_columns', filterRow.toArray().map(function(td) { - return $(td).find('input').first().val(); - })); - } - table.on('draw.dt', updateSearchInfo); - updateSearchInfo(); - - var cellInfo = function(thiz) { - var info = tweakCellIndex(table.cell(thiz)); - info.value = table.cell(thiz).data(); - return info; - } - // the current cell clicked on - table.on('click.dt', 'tbody td', function() { - changeInput('cell_clicked', cellInfo(this), null, null, {priority: 'event'}); - }) - changeInput('cell_clicked', {}); - - // do not trigger table selection when clicking on links unless they have classes - table.on('click.dt', 'tbody td a', function(e) { - if (this.className === '') e.stopPropagation(); - }); - - methods.addRow = function(data, rowname, resetPaging) { - var n = table.columns().indexes().length, d = n - data.length; - if (d === 1) { - data = rowname.concat(data) - } else if (d !== 0) { - console.log(data); - console.log(table.columns().indexes()); - throw 'New data must be of the same length as current data (' + n + ')'; - }; - table.row.add(data).draw(resetPaging); - } - - methods.updateSearch = function(keywords) { - if (keywords.global !== null) - $(table.table().container()).find('input[type=search]').first() - .val(keywords.global).trigger('input'); - var columns = keywords.columns; - if (!filterRow || columns === null) return; - filterRow.toArray().map(function(td, i) { - var v = typeof columns === 'string' ? columns : columns[i]; - if (typeof v === 'undefined') { - console.log('The search keyword for column ' + i + ' is undefined') - return; - } - $(td).find('input').first().val(v); - searchColumn(i, v); - }); - table.draw(); - } - - methods.hideCols = function(hide, reset) { - if (reset) table.columns().visible(true, false); - table.columns(hide).visible(false); - } - - methods.showCols = function(show, reset) { - if (reset) table.columns().visible(false, false); - table.columns(show).visible(true); - } - - methods.colReorder = function(order, origOrder) { - table.colReorder.order(order, origOrder); - } - - methods.selectPage = function(page) { - if (table.page.info().pages < page || page < 1) { - throw 'Selected page is out of range'; - }; - table.page(page - 1).draw(false); - } - - methods.reloadData = function(resetPaging, clearSelection) { - // empty selections first if necessary - if (methods.selectRows && inArray('row', clearSelection)) methods.selectRows([]); - if (methods.selectColumns && inArray('column', clearSelection)) methods.selectColumns([]); - if (methods.selectCells && inArray('cell', clearSelection)) methods.selectCells([]); - table.ajax.reload(null, resetPaging); - } - - table.shinyMethods = methods; - }, - resize: function(el, width, height, instance) { - if (instance.data) this.renderValue(el, instance.data, instance); - - // dynamically adjust height if fillContainer = TRUE - if (instance.fillContainer) - this.fillAvailableHeight(el, height); - - this.adjustWidth(el); - }, - - // dynamically set the scroll body to fill available height - // (used with fillContainer = TRUE) - fillAvailableHeight: function(el, availableHeight) { - - // see how much of the table is occupied by header/footer elements - // and use that to compute a target scroll body height - var dtWrapper = $(el).find('div.dataTables_wrapper'); - var dtScrollBody = $(el).find($('div.dataTables_scrollBody')); - var framingHeight = dtWrapper.innerHeight() - dtScrollBody.innerHeight(); - var scrollBodyHeight = availableHeight - framingHeight; - - // set the height - dtScrollBody.height(scrollBodyHeight + 'px'); - }, - - // adjust the width of columns; remove the hard-coded widths on table and the - // scroll header when scrollX/Y are enabled - adjustWidth: function(el) { - var $el = $(el), table = $el.data('datatable'); - if (table) table.columns.adjust(); - $el.find('.dataTables_scrollHeadInner').css('width', '') - .children('table').css('margin-left', ''); - } -}); - - if (!HTMLWidgets.shinyMode) return; - - Shiny.addCustomMessageHandler('datatable-calls', function(data) { - var id = data.id; - var el = document.getElementById(id); - var table = el ? $(el).data('datatable') : null; - if (!table) { - console.log("Couldn't find table with id " + id); - return; - } - - var methods = table.shinyMethods, call = data.call; - if (methods[call.method]) { - methods[call.method].apply(table, call.args); - } else { - console.log("Unknown method " + call.method); - } - }); - -})(); diff --git a/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css b/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css deleted file mode 100644 index fb5bae84..00000000 --- a/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css +++ /dev/null @@ -1,23 +0,0 @@ -.dt-crosstalk-fade { - opacity: 0.2; -} - -html body div.DTS div.dataTables_scrollBody { - background: none; -} - - -/* -Fix https://github.com/rstudio/DT/issues/563 -If the `table.display` is set to "block" (e.g., pkgdown), the browser will display -datatable objects strangely. The search panel and the page buttons will still be -in full-width but the table body will be "compact" and shorter. -In therory, having this attributes will affect `dom="t"` -with `display: block` users. But in reality, there should be no one. -We may remove the below lines in the future if the upstream agree to have this there. -See https://github.com/DataTables/DataTablesSrc/issues/160 -*/ - -table.dataTable { - display: table; -} diff --git a/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.extra.css b/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.extra.css deleted file mode 100644 index b2dd141f..00000000 --- a/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.extra.css +++ /dev/null @@ -1,28 +0,0 @@ -/* Selected rows/cells */ -table.dataTable tr.selected td, table.dataTable td.selected { - background-color: #b0bed9 !important; -} -/* In case of scrollX/Y or FixedHeader */ -.dataTables_scrollBody .dataTables_sizing { - visibility: hidden; -} - -/* The datatables' theme CSS file doesn't define -the color but with white background. It leads to an issue that -when the HTML's body color is set to 'white', the user can't -see the text since the background is white. One case happens in the -RStudio's IDE when inline viewing the DT table inside an Rmd file, -if the IDE theme is set to "Cobalt". - -See https://github.com/rstudio/DT/issues/447 for more info - -This fixes should have little side-effects because all the other elements -of the default theme use the #333 font color. - -TODO: The upstream may use relative colors for both the table background -and the color. It means the table can display well without this patch -then. At that time, we need to remove the below CSS attributes. -*/ -div.datatables { - color: #333; -} diff --git a/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.min.css b/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.min.css deleted file mode 100644 index 71ae98a4..00000000 --- a/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.min.css +++ /dev/null @@ -1 +0,0 @@ -table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;*cursor:hand;background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC)}table.dataTable thead .sorting_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==)}table.dataTable thead .sorting_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII=)}table.dataTable thead .sorting_asc_disabled{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAW0lEQVQoz2NgoCm4w3Vnwh02wspK7/y6k01Ikdadx3f+37l9RxmfIsY7c4GKQHDiHUbcyhzvvIMq+3THBpci3jv7oIpAcMcdduzKEu/8vPMdDn/eiWQYBYMKAAC3ykIEuYQJUgAAAABJRU5ErkJggg==)}table.dataTable thead .sorting_desc_disabled{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAWUlEQVQoz2NgGAWDCtyJvPPzznc4/HknEbsy9js77vyHw313eHGZZ3PnE1TRuzuOuK1lvDMRqmzuHUZ87lO+cxuo6PEdLUIeyb7z604pYf+y3Zlwh4u2YQoAc7ZCBHH4jigAAAAASUVORK5CYII=)}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} diff --git a/docs/articles/xportr_files/dt-core-1.10.20/js/jquery.dataTables.min.js b/docs/articles/xportr_files/dt-core-1.10.20/js/jquery.dataTables.min.js deleted file mode 100644 index d297f256..00000000 --- a/docs/articles/xportr_files/dt-core-1.10.20/js/jquery.dataTables.min.js +++ /dev/null @@ -1,180 +0,0 @@ -/*! - Copyright 2008-2019 SpryMedia Ltd. - - This source file is free software, available under the following license: - MIT license - http://datatables.net/license - - This source file is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - - For details please refer to: http://www.datatables.net - DataTables 1.10.20 - ©2008-2019 SpryMedia Ltd - datatables.net/license -*/ -var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(f,z,y){f instanceof String&&(f=String(f));for(var p=f.length,H=0;H").css({position:"fixed",top:0,left:-1*f(z).scrollLeft(),height:1,width:1, -overflow:"hidden"}).append(f("
    ").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(f("
    ").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}f.extend(a.oBrowser,q.__browser);a.oScroll.iBarWidth=q.__browser.barWidth} -function mb(a,b,c,d,e,h){var g=!1;if(c!==p){var k=c;g=!0}for(;d!==e;)a.hasOwnProperty(d)&&(k=g?b(k,a[d],d,a):a[d],g=!0,d+=h);return k}function Ia(a,b){var c=q.defaults.column,d=a.aoColumns.length;c=f.extend({},q.models.oColumn,c,{nTh:b?b:y.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=f.extend({},q.models.oSearch,c[d]);ma(a,d,f(b).data())}function ma(a,b,c){b=a.aoColumns[b]; -var d=a.oClasses,e=f(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var h=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);h&&(b.sWidthOrig=h[1])}c!==p&&null!==c&&(kb(c),L(q.defaults.column,c,!0),c.mDataProp===p||c.mData||(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),f.extend(b,c),M(b,c,"sWidth","sWidthOrig"),c.iDataSort!==p&&(b.aDataSort=[c.iDataSort]),M(b,c,"aDataSort"));var g=b.mData,k=U(g), -l=b.mRender?U(b.mRender):null;c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=f.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=k(a,b,p,c);return l&&b?l(d,b,a,c):d};b.fnSetData=function(a,b,c){return Q(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==f.inArray("asc",b.asSorting);c=-1!==f.inArray("desc",b.asSorting);b.bSortable&&(a||c)?a&&!c?(b.sSortingClass= -d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI):(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI="")}function aa(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ja(a);for(var c=0,d=b.length;cn[m])d(k.length+ -n[m],l);else if("string"===typeof n[m]){var w=0;for(g=k.length;wb&&a[e]--; -1!=d&&c===p&&a.splice(d,1)}function ea(a,b,c,d){var e=a.aoData[b],h,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=I(a,b,d,"display")};if("dom"!==c&&(c&&"auto"!==c||"dom"!==e.src)){var k=e.anCells;if(k)if(d!==p)g(k[d],d);else for(c=0,h=k.length;c").appendTo(d));var l=0;for(b=k.length;ltr").attr("role","row");f(d).find(">tr>th, >tr>td").addClass(g.sHeaderTH);f(e).find(">tr>th, >tr>td").addClass(g.sFooterTH);if(null!==e)for(a=a.aoFooter[0],l=0,b=a.length;l=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);g=a._iDisplayStart;var n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,K(a,!1);else if(!k)a.iDraw++;else if(!a.bDestroying&&!qb(a))return;if(0!==l.length)for(h=k?a.aoData.length:n,k=k?0:g;k",{"class":e?d[0]:""}).append(f("",{valign:"top",colSpan:W(a),"class":a.oClasses.sRowEmpty}).html(c))[0];A(a,"aoHeaderCallback","header",[f(a.nTHead).children("tr")[0], -Oa(a),g,n,l]);A(a,"aoFooterCallback","footer",[f(a.nTFoot).children("tr")[0],Oa(a),g,n,l]);d=f(a.nTBody);d.children().detach();d.append(f(b));A(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function V(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&rb(a);d?ia(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;S(a);a._drawHold=!1}function sb(a){var b=a.oClasses,c=f(a.nTable);c=f("
    ").insertBefore(c);var d=a.oFeatures,e= -f("
    ",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var h=a.sDom.split(""),g,k,l,n,m,p,u=0;u")[0];n=h[u+1];if("'"==n||'"'==n){m="";for(p=2;h[u+p]!=n;)m+=h[u+p],p++;"H"==m?m=b.sJUIHeader:"F"==m&&(m=b.sJUIFooter);-1!=m.indexOf(".")?(n=m.split("."),l.id=n[0].substr(1,n[0].length-1),l.className=n[1]):"#"==m.charAt(0)?l.id=m.substr(1, -m.length-1):l.className=m;u+=p}e.append(l);e=f(l)}else if(">"==k)e=e.parent();else if("l"==k&&d.bPaginate&&d.bLengthChange)g=tb(a);else if("f"==k&&d.bFilter)g=ub(a);else if("r"==k&&d.bProcessing)g=vb(a);else if("t"==k)g=wb(a);else if("i"==k&&d.bInfo)g=xb(a);else if("p"==k&&d.bPaginate)g=yb(a);else if(0!==q.ext.feature.length)for(l=q.ext.feature,p=0,n=l.length;p',k=d.sSearch;k=k.match(/_INPUT_/)?k.replace("_INPUT_",g):k+g;b=f("
    ",{id:h.f?null:c+"_filter","class":b.sFilter}).append(f("
    ").addClass(b.sLength);a.aanFeatures.l||(l[0].id=c+"_length");l.children().append(a.oLanguage.sLengthMenu.replace("_MENU_", -e[0].outerHTML));f("select",l).val(a._iDisplayLength).on("change.DT",function(b){Va(a,f(this).val());S(a)});f(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&f("select",l).val(d)});return l[0]}function yb(a){var b=a.sPaginationType,c=q.ext.pager[b],d="function"===typeof c,e=function(a){S(a)};b=f("
    ").addClass(a.oClasses.sPaging+b)[0];var h=a.aanFeatures;d||c.fnInit(a,b,e);h.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,g=a._iDisplayLength, -f=a.fnRecordsDisplay(),m=-1===g;b=m?0:Math.ceil(b/g);g=m?1:Math.ceil(f/g);f=c(b,g);var p;m=0;for(p=h.p.length;mh&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e",{id:a.aanFeatures.r?null:a.sTableId+"_processing","class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function K(a,b){a.oFeatures.bProcessing&&f(a.aanFeatures.r).css("display",b?"block":"none");A(a,null,"processing",[a,b])}function wb(a){var b=f(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY, -h=a.oClasses,g=b.children("caption"),k=g.length?g[0]._captionSide:null,l=f(b[0].cloneNode(!1)),n=f(b[0].cloneNode(!1)),m=b.children("tfoot");m.length||(m=null);l=f("
    ",{"class":h.sScrollWrapper}).append(f("
    ",{"class":h.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?d?B(d):null:"100%"}).append(f("
    ",{"class":h.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===k?g:null).append(b.children("thead"))))).append(f("
    ", -{"class":h.sScrollBody}).css({position:"relative",overflow:"auto",width:d?B(d):null}).append(b));m&&l.append(f("
    ",{"class":h.sScrollFoot}).css({overflow:"hidden",border:0,width:d?d?B(d):null:"100%"}).append(f("
    ",{"class":h.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",0).append("bottom"===k?g:null).append(b.children("tfoot")))));b=l.children();var p=b[0];h=b[1];var u=m?b[2]:null;if(d)f(h).on("scroll.DT",function(a){a=this.scrollLeft;p.scrollLeft=a;m&&(u.scrollLeft=a)}); -f(h).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=p;a.nScrollBody=h;a.nScrollFoot=u;a.aoDrawCallback.push({fn:na,sName:"scrolling"});return l[0]}function na(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY;b=b.iBarWidth;var h=f(a.nScrollHead),g=h[0].style,k=h.children("div"),l=k[0].style,n=k.children("table");k=a.nScrollBody;var m=f(k),w=k.style,u=f(a.nScrollFoot).children("div"),q=u.children("table"),t=f(a.nTHead),r=f(a.nTable),v=r[0],za=v.style,T=a.nTFoot?f(a.nTFoot):null,A=a.oBrowser, -x=A.bScrollOversize,ac=J(a.aoColumns,"nTh"),Ya=[],y=[],z=[],C=[],G,H=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};var D=k.scrollHeight>k.clientHeight;if(a.scrollBarVis!==D&&a.scrollBarVis!==p)a.scrollBarVis=D,aa(a);else{a.scrollBarVis=D;r.children("thead, tfoot").remove();if(T){var E=T.clone().prependTo(r);var F=T.find("tr");E=E.find("tr")}var I=t.clone().prependTo(r);t=t.find("tr");D=I.find("tr");I.find("th, td").removeAttr("tabindex"); -c||(w.width="100%",h[0].style.width="100%");f.each(ua(a,I),function(b,c){G=ba(a,b);c.style.width=a.aoColumns[G].sWidth});T&&N(function(a){a.style.width=""},E);h=r.outerWidth();""===c?(za.width="100%",x&&(r.find("tbody").height()>k.offsetHeight||"scroll"==m.css("overflow-y"))&&(za.width=B(r.outerWidth()-b)),h=r.outerWidth()):""!==d&&(za.width=B(d),h=r.outerWidth());N(H,D);N(function(a){z.push(a.innerHTML);Ya.push(B(f(a).css("width")))},D);N(function(a,b){-1!==f.inArray(a,ac)&&(a.style.width=Ya[b])}, -t);f(D).height(0);T&&(N(H,E),N(function(a){C.push(a.innerHTML);y.push(B(f(a).css("width")))},E),N(function(a,b){a.style.width=y[b]},F),f(E).height(0));N(function(a,b){a.innerHTML='
    '+z[b]+"
    ";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=Ya[b]},D);T&&N(function(a,b){a.innerHTML='
    '+C[b]+"
    ";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=y[b]},E);r.outerWidth()< -h?(F=k.scrollHeight>k.offsetHeight||"scroll"==m.css("overflow-y")?h+b:h,x&&(k.scrollHeight>k.offsetHeight||"scroll"==m.css("overflow-y"))&&(za.width=B(F-b)),""!==c&&""===d||O(a,1,"Possible column misalignment",6)):F="100%";w.width=B(F);g.width=B(F);T&&(a.nScrollFoot.style.width=B(F));!e&&x&&(w.height=B(v.offsetHeight+b));c=r.outerWidth();n[0].style.width=B(c);l.width=B(c);d=r.height()>k.clientHeight||"scroll"==m.css("overflow-y");e="padding"+(A.bScrollbarLeft?"Left":"Right");l[e]=d?b+"px":"0px";T&& -(q[0].style.width=B(c),u[0].style.width=B(c),u[0].style[e]=d?b+"px":"0px");r.children("colgroup").insertBefore(r.children("thead"));m.trigger("scroll");!a.bSorted&&!a.bFiltered||a._drawHold||(k.scrollTop=0)}}function N(a,b,c){for(var d=0,e=0,h=b.length,g,k;e").appendTo(k.find("tbody"));k.find("thead, tfoot").remove(); -k.append(f(a.nTHead).clone()).append(f(a.nTFoot).clone());k.find("tfoot th, tfoot td").css("width","");n=ua(a,k.find("thead")[0]);for(q=0;q").css({width:r.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(q=0;q").css(h|| -e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(k).appendTo(p);h&&g?k.width(g):h?(k.css("width","auto"),k.removeAttr("width"),k.width()").css("width",B(a)).appendTo(b||y.body);b=a[0].offsetWidth;a.remove();return b}function Kb(a,b){var c=Lb(a,b);if(0>c)return null;var d=a.aoData[c];return d.nTr?d.anCells[b]:f("").html(I(a,c,b,"display"))[0]}function Lb(a,b){for(var c,d=-1,e=-1,h=0,g=a.aoData.length;hd&&(d=c.length,e=h);return e} -function B(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function Y(a){var b=[],c=a.aoColumns;var d=a.aaSortingFixed;var e=f.isPlainObject(d);var h=[];var g=function(a){a.length&&!f.isArray(a[0])?h.push(a):f.merge(h,a)};f.isArray(d)&&g(d);e&&d.pre&&g(d.pre);g(a.aaSorting);e&&d.post&&g(d.post);for(a=0;an?1:0; -if(0!==m)return"asc"===l.dir?m:-m}m=c[a];n=c[b];return mn?1:0}):g.sort(function(a,b){var h,g=k.length,f=e[a]._aSortData,l=e[b]._aSortData;for(h=0;hp?1:0})}a.bSorted=!0}function Nb(a){var b=a.aoColumns,c=Y(a);a=a.oLanguage.oAria;for(var d=0,e=b.length;d/g,"");var f=h.nTh;f.removeAttribute("aria-sort"); -h.bSortable&&(0e?e+1:3))}e=0;for(h=d.length;ee?e+1:3))}a.aLastSort=d}function Mb(a,b){var c=a.aoColumns[b],d=q.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ca(a,b)));for(var h,g=q.ext.type.order[c.sType+"-pre"],k=0,f=a.aoData.length;k=h.length?[0,c[1]]:c)}));b.search!==p&&f.extend(a.oPreviousSearch, -Gb(b.search));if(b.columns)for(d=0,e=b.columns.length;d=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Ra(a,b){a=a.renderer;var c=q.ext.renderer[b];return f.isPlainObject(a)&&a[b]?c[a[b]]||c._:"string"===typeof a?c[a]||c._:c._}function D(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ka(a,b){var c=Pb.numbers_length,d=Math.floor(c/2);b<=c?a=Z(0,b):a<=d?(a=Z(0,c-2),a.push("ellipsis"),a.push(b-1)):(a>=b-1-d?a=Z(b-(c-2),b):(a=Z(a-d+2,a+d-1),a.push("ellipsis"), -a.push(b-1)),a.splice(0,0,"ellipsis"),a.splice(0,0,0));a.DT_el="span";return a}function Ha(a){f.each({num:function(b){return Da(b,a)},"num-fmt":function(b){return Da(b,a,bb)},"html-num":function(b){return Da(b,a,Ea)},"html-num-fmt":function(b){return Da(b,a,Ea,bb)}},function(b,c){C.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(C.type.search[b+a]=C.type.search.html)})}function Qb(a){return function(){var b=[Ca(this[q.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return q.ext.internal[a].apply(this, -b)}}var q=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new v(Ca(this[C.iApiIndex])):new v(this)};this.fnAddData=function(a,b){var c=this.api(!0);a=f.isArray(a)&&(f.isArray(a[0])||f.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===p||b)&&c.draw();return a.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===p||a?b.draw(!1): -(""!==d.sX||""!==d.sY)&&na(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===p||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0);a=d.rows(a);var e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===p||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,f){e=this.api(!0);null===b||b===p? -e.search(a,c,d,f):e.column(b).search(a,c,d,f);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==p){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==p||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==p?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(), -[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){a=this.api(!0).page(a);(b===p||b)&&a.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===p||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Ca(this[C.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener= -function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===p||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===p||e)&&h.columns.adjust();(d===p||d)&&h.draw();return 0};this.fnVersionCheck=C.fnVersionCheck;var b=this,c=a===p,d=this.length;c&&(a={});this.oApi=this.internal=C.internal;for(var e in q.ext.internal)e&&(this[e]=Qb(e));this.each(function(){var e={},g=1").appendTo(w));r.nTHead=b[0];b=w.children("tbody");0===b.length&&(b=f("").appendTo(w));r.nTBody=b[0];b=w.children("tfoot");0===b.length&&0").appendTo(w));0===b.length||0===b.children().length?w.addClass(x.sNoFooter):0/g,cc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,dc=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,bb=/[',$£₏„%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,P=function(a){return a&&!0!==a&&"-"!==a?!1: -!0},Sb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Tb=function(a,b){cb[b]||(cb[b]=new RegExp(Ua(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(cb[b],"."):a},db=function(a,b,c){var d="string"===typeof a;if(P(a))return!0;b&&d&&(a=Tb(a,b));c&&d&&(a=a.replace(bb,""));return!isNaN(parseFloat(a))&&isFinite(a)},Ub=function(a,b,c){return P(a)?!0:P(a)||"string"===typeof a?db(a.replace(Ea,""),b,c)?!0:null:null},J=function(a,b,c){var d=[],e=0,h=a.length;if(c!== -p)for(;ea.length)){var b=a.slice().sort();for(var c=b[0],d=1, -e=b.length;d")[0],$b=ya.textContent!==p,bc=/<.*?>/g,Sa=q.util.throttle,Wb=[],G=Array.prototype,ec=function(a){var b,c=q.settings,d=f.map(c,function(a,b){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase()){var e=f.inArray(a,d);return-1!==e?[c[e]]:null}if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?b=f(a):a instanceof f&&(b=a)}else return[];if(b)return b.map(function(a){e=f.inArray(this, -d);return-1!==e?c[e]:null}).toArray()};var v=function(a,b){if(!(this instanceof v))return new v(a,b);var c=[],d=function(a){(a=ec(a))&&c.push.apply(c,a)};if(f.isArray(a))for(var e=0,h=a.length;ea?new v(b[a],this[a]):null},filter:function(a){var b=[];if(G.filter)b=G.filter.call(this,a,this);else for(var c=0,d=this.length;c").addClass(c),f("td",d).addClass(c).html(b)[0].colSpan=W(a),e.push(d[0]))};h(c,d);b._details&&b._details.detach();b._details=f(e);b._detailsShow&&b._details.insertAfter(b.nTr)},hb=function(a,b){var c=a.context;c.length&&(a=c[0].aoData[b!==p?b:a[0]])&&a._details&&(a._details.remove(),a._detailsShow=p,a._details=p)},Yb=function(a,b){var c=a.context;c.length&&a.length&&(a=c[0].aoData[a[0]],a._details&&((a._detailsShow=b)?a._details.insertAfter(a.nTr): -a._details.detach(),ic(c[0])))},ic=function(a){var b=new v(a),c=a.aoData;b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0g){var m=f.map(d,function(a,b){return a.bVisible?b:null});return[m[m.length+g]]}return[ba(a,g)];case "name":return f.map(e,function(a,b){return a===n[1]?b:null});default:return[]}if(b.nodeName&&b._DT_CellIndex)return[b._DT_CellIndex.column];g=f(h).filter(b).map(function(){return f.inArray(this, -h)}).toArray();if(g.length||!b.nodeName)return g;g=f(b).closest("*[data-dt-column]");return g.length?[g.data("dt-column")]:[]},a,c)};t("columns()",function(a,b){a===p?a="":f.isPlainObject(a)&&(b=a,a="");b=fb(b);var c=this.iterator("table",function(c){return kc(c,a,b)},1);c.selector.cols=a;c.selector.opts=b;return c});x("columns().header()","column().header()",function(a,b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});x("columns().footer()","column().footer()",function(a, -b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});x("columns().data()","column().data()",function(){return this.iterator("column-rows",Zb,1)});x("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});x("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return la(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});x("columns().nodes()", -"column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return la(a.aoData,e,"anCells",b)},1)});x("columns().visible()","column().visible()",function(a,b){var c=this,d=this.iterator("column",function(b,c){if(a===p)return b.aoColumns[c].bVisible;var d=b.aoColumns,e=d[c],h=b.aoData,n;if(a!==p&&e.bVisible!==a){if(a){var m=f.inArray(!0,J(d,"bVisible"),c+1);d=0;for(n=h.length;dd;return!0};q.isDataTable=q.fnIsDataTable=function(a){var b=f(a).get(0),c=!1;if(a instanceof -q.Api)return!0;f.each(q.settings,function(a,e){a=e.nScrollHead?f("table",e.nScrollHead)[0]:null;var d=e.nScrollFoot?f("table",e.nScrollFoot)[0]:null;if(e.nTable===b||a===b||d===b)c=!0});return c};q.tables=q.fnTables=function(a){var b=!1;f.isPlainObject(a)&&(b=a.api,a=a.visible);var c=f.map(q.settings,function(b){if(!a||a&&f(b.nTable).is(":visible"))return b.nTable});return b?new v(c):c};q.camelToHungarian=L;t("$()",function(a,b){b=this.rows(b).nodes();b=f(b);return f([].concat(b.filter(a).toArray(), -b.find(a).toArray()))});f.each(["on","one","off"],function(a,b){t(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0]=f.map(a[0].split(/\s/),function(a){return a.match(/\.dt\b/)?a:a+".dt"}).join(" ");var d=f(this.tables().nodes());d[b].apply(d,a);return this})});t("clear()",function(){return this.iterator("table",function(a){qa(a)})});t("settings()",function(){return new v(this.context,this.context)});t("init()",function(){var a=this.context;return a.length?a[0].oInit:null});t("data()", -function(){return this.iterator("table",function(a){return J(a.aoData,"_aData")}).flatten()});t("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,h=b.nTBody,g=b.nTHead,k=b.nTFoot,l=f(e);h=f(h);var n=f(b.nTableWrapper),m=f.map(b.aoData,function(a){return a.nTr}),p;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);a||(new v(b)).columns().visible(!0);n.off(".DT").find(":not(tbody *)").off(".DT");f(z).off(".DT-"+b.sInstance); -e!=g.parentNode&&(l.children("thead").detach(),l.append(g));k&&e!=k.parentNode&&(l.children("tfoot").detach(),l.append(k));b.aaSorting=[];b.aaSortingFixed=[];Aa(b);f(m).removeClass(b.asStripeClasses.join(" "));f("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);h.children().detach();h.append(m);g=a?"remove":"detach";l[g]();n[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),l.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&& -h.children().each(function(a){f(this).addClass(b.asDestroyStripes[a%p])}));c=f.inArray(b,q.settings);-1!==c&&q.settings.splice(c,1)})});f.each(["column","row","cell"],function(a,b){t(b+"s().every()",function(a){var c=this.selector.opts,e=this;return this.iterator(b,function(d,f,k,l,n){a.call(e[b](f,"cell"===b?k:c,"cell"===b?c:p),f,k,l,n)})})});t("i18n()",function(a,b,c){var d=this.context[0];a=U(a)(d.oLanguage);a===p&&(a=b);c!==p&&f.isPlainObject(a)&&(a=a[c]!==p?a[c]:a._);return a.replace("%d",c)}); -q.version="1.10.20";q.settings=[];q.models={};q.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};q.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};q.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null, -sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};q.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1, -bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}}, -fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last", -sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:f.extend({},q.models.oSearch),sAjaxDataProp:"data", -sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};H(q.defaults);q.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};H(q.defaults.column);q.models.oSettings= -{oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{}, -aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0, -aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:p,oAjaxData:p,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==D(this)?1*this._iRecordsTotal: -this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==D(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};q.ext=C={buttons:{}, -classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:q.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:q.version};f.extend(C,{afnFiltering:C.search,aTypes:C.type.detect,ofnSearch:C.type.search,oSort:C.type.order,afnSortData:C.order,aoFeatures:C.feature,oApi:C.internal,oStdClasses:C.classes,oPagination:C.pager}); -f.extend(q.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled", -sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"", -sJUIHeader:"",sJUIFooter:""});var Pb=q.ext.pager;f.extend(Pb,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[ka(a,b)]},simple_numbers:function(a,b){return["previous",ka(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ka(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ka(a,b),"last"]},_numbers:ka,numbers_length:7});f.extend(!0,q.ext.renderer,{pageButton:{_:function(a,b, -c,d,e,h){var g=a.oClasses,k=a.oLanguage.oPaginate,l=a.oLanguage.oAria.paginate||{},n,m,q=0,t=function(b,d){var p,r=g.sPageButtonDisabled,u=function(b){Xa(a,b.data.action,!0)};var w=0;for(p=d.length;w").appendTo(b);t(x,v)}else{n=null;m=v;x=a.iTabIndex;switch(v){case "ellipsis":b.append('');break;case "first":n=k.sFirst;0===e&&(x=-1,m+=" "+r);break;case "previous":n=k.sPrevious;0===e&&(x=-1,m+= -" "+r);break;case "next":n=k.sNext;e===h-1&&(x=-1,m+=" "+r);break;case "last":n=k.sLast;e===h-1&&(x=-1,m+=" "+r);break;default:n=v+1,m=e===v?g.sPageButtonActive:""}null!==n&&(x=f("",{"class":g.sPageButton+" "+m,"aria-controls":a.sTableId,"aria-label":l[v],"data-dt-idx":q,tabindex:x,id:0===c&&"string"===typeof v?a.sTableId+"_"+v:null}).html(n).appendTo(b),$a(x,{action:v},u),q++)}}};try{var v=f(b).find(y.activeElement).data("dt-idx")}catch(mc){}t(f(b).empty(),d);v!==p&&f(b).find("[data-dt-idx="+ -v+"]").focus()}}});f.extend(q.ext.type.detect,[function(a,b){b=b.oLanguage.sDecimal;return db(a,b)?"num"+b:null},function(a,b){if(a&&!(a instanceof Date)&&!cc.test(a))return null;b=Date.parse(a);return null!==b&&!isNaN(b)||P(a)?"date":null},function(a,b){b=b.oLanguage.sDecimal;return db(a,b,!0)?"num-fmt"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Ub(a,b)?"html-num"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Ub(a,b,!0)?"html-num-fmt"+b:null},function(a,b){return P(a)||"string"=== -typeof a&&-1!==a.indexOf("<")?"html":null}]);f.extend(q.ext.type.search,{html:function(a){return P(a)?a:"string"===typeof a?a.replace(Rb," ").replace(Ea,""):""},string:function(a){return P(a)?a:"string"===typeof a?a.replace(Rb," "):a}});var Da=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Tb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};f.extend(C.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return P(a)? -"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return P(a)?"":"string"===typeof a?a.toLowerCase():a.toString?a.toString():""},"string-asc":function(a,b){return ab?1:0},"string-desc":function(a,b){return ab?-1:0}});Ha("");f.extend(!0,q.ext.renderer,{header:{_:function(a,b,c,d){f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc: -c.sSortingClass))})},jqueryui:function(a,b,c,d){f("
    ").addClass(d.sSortJUIWrapper).append(b.contents()).append(f("").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:c.sSortingClass),b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass("asc"== -k[e]?d.sSortJUIAsc:"desc"==k[e]?d.sSortJUIDesc:c.sSortingClassJUI))})}}});var ib=function(a){return"string"===typeof a?a.replace(//g,">").replace(/"/g,"""):a};q.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return ib(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g, -a)+f+(e||"")}}},text:function(){return{display:ib,filter:ib}}};f.extend(q.ext.internal,{_fnExternApiFunc:Qb,_fnBuildAjax:va,_fnAjaxUpdate:qb,_fnAjaxParameters:zb,_fnAjaxUpdateDraw:Ab,_fnAjaxDataSrc:wa,_fnAddColumn:Ia,_fnColumnOptions:ma,_fnAdjustColumnSizing:aa,_fnVisibleToColumnIndex:ba,_fnColumnIndexToVisible:ca,_fnVisbleColumns:W,_fnGetColumns:oa,_fnColumnTypes:Ka,_fnApplyColumnDefs:nb,_fnHungarianMap:H,_fnCamelToHungarian:L,_fnLanguageCompat:Ga,_fnBrowserDetect:lb,_fnAddData:R,_fnAddTr:pa,_fnNodeToDataIndex:function(a, -b){return b._DT_RowIndex!==p?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return f.inArray(c,a.aoData[b].anCells)},_fnGetCellData:I,_fnSetCellData:ob,_fnSplitObjNotation:Na,_fnGetObjectDataFn:U,_fnSetObjectDataFn:Q,_fnGetDataMaster:Oa,_fnClearTable:qa,_fnDeleteIndex:ra,_fnInvalidate:ea,_fnGetRowElements:Ma,_fnCreateTr:La,_fnBuildHead:pb,_fnDrawHead:ha,_fnDraw:S,_fnReDraw:V,_fnAddOptionsHtml:sb,_fnDetectHeader:fa,_fnGetUniqueThs:ua,_fnFeatureHtmlFilter:ub,_fnFilterComplete:ia,_fnFilterCustom:Db, -_fnFilterColumn:Cb,_fnFilter:Bb,_fnFilterCreateSearch:Ta,_fnEscapeRegex:Ua,_fnFilterData:Eb,_fnFeatureHtmlInfo:xb,_fnUpdateInfo:Hb,_fnInfoMacros:Ib,_fnInitialise:ja,_fnInitComplete:xa,_fnLengthChange:Va,_fnFeatureHtmlLength:tb,_fnFeatureHtmlPaginate:yb,_fnPageChange:Xa,_fnFeatureHtmlProcessing:vb,_fnProcessingDisplay:K,_fnFeatureHtmlTable:wb,_fnScrollDraw:na,_fnApplyToChildren:N,_fnCalculateColumnWidths:Ja,_fnThrottle:Sa,_fnConvertToWidth:Jb,_fnGetWidestNode:Kb,_fnGetMaxLenString:Lb,_fnStringToCss:B, -_fnSortFlatten:Y,_fnSort:rb,_fnSortAria:Nb,_fnSortListener:Za,_fnSortAttachListener:Qa,_fnSortingClasses:Aa,_fnSortData:Mb,_fnSaveState:Ba,_fnLoadState:Ob,_fnSettingsFromNode:Ca,_fnLog:O,_fnMap:M,_fnBindAction:$a,_fnCallbackReg:E,_fnCallbackFire:A,_fnLengthOverflow:Wa,_fnRenderer:Ra,_fnDataSource:D,_fnRowAttributes:Pa,_fnExtend:ab,_fnCalculateEnd:function(){}});f.fn.dataTable=q;q.$=f;f.fn.dataTableSettings=q.settings;f.fn.dataTableExt=q.ext;f.fn.DataTable=function(a){return f(this).dataTable(a).api()}; -f.each(q,function(a,b){f.fn.DataTable[a]=b});return f.fn.dataTable}); diff --git a/docs/articles/xportr_files/header-attrs-2.9/header-attrs.js b/docs/articles/xportr_files/header-attrs-2.9/header-attrs.js deleted file mode 100644 index dd57d92e..00000000 --- a/docs/articles/xportr_files/header-attrs-2.9/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/xportr_files/htmlwidgets-1.5.3/htmlwidgets.js b/docs/articles/xportr_files/htmlwidgets-1.5.3/htmlwidgets.js deleted file mode 100644 index 3d227624..00000000 --- a/docs/articles/xportr_files/htmlwidgets-1.5.3/htmlwidgets.js +++ /dev/null @@ -1,903 +0,0 @@ -(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%"; - if (cel) { - 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.offsetWidth; }, - getHeight: function() { return cel.offsetHeight; } - }; - - } else { - el.style.width = px(sizing.width); - el.style.height = px(sizing.height); - - return { - getWidth: function() { return el.offsetWidth; }, - getHeight: function() { return el.offsetHeight; } - }; - } - } - - // 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 result = bindingDef.initialize(el, el.offsetWidth, - el.offsetHeight); - 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); - - if (hasClass(el, "html-widget-static-bound")) - return; - el.className = el.className + " html-widget-static-bound"; - - var initResult; - if (binding.initialize) { - initResult = binding.initialize(el, - sizeObj ? sizeObj.getWidth() : el.offsetWidth, - sizeObj ? sizeObj.getHeight() : el.offsetHeight - ); - elementData(el, "init_result", initResult); - } - - if (binding.resize) { - var lastSize = { - w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, - h: sizeObj ? sizeObj.getHeight() : el.offsetHeight - }; - var resizeHandler = function(e) { - var size = { - w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, - h: sizeObj ? sizeObj.getHeight() : el.offsetHeight - }; - 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/articles/xportr_files/jquery-3.5.1/jquery-AUTHORS.txt b/docs/articles/xportr_files/jquery-3.5.1/jquery-AUTHORS.txt deleted file mode 100644 index 06df1a53..00000000 --- a/docs/articles/xportr_files/jquery-3.5.1/jquery-AUTHORS.txt +++ /dev/null @@ -1,357 +0,0 @@ -Authors ordered by first contribution. - -John Resig -Gilles van den Hoven -Michael Geary -Stefan Petre -Yehuda Katz -Corey Jewett -Klaus Hartl -Franck Marcia -Jörn Zaefferer -Paul Bakaus -Brandon Aaron -Mike Alsup -Dave Methvin -Ed Engelhardt -Sean Catchpole -Paul Mclanahan -David Serduke -Richard D. Worth -Scott GonzĂĄlez -Ariel Flesler -Cheah Chu Yeow -Andrew Chalkley -Fabio Buffoni -Stefan Bauckmeier  -Jon Evans -TJ Holowaychuk -Riccardo De Agostini -Michael Bensoussan -Louis-RĂ©mi BabĂ© -Robert Katić -Damian Janowski -Anton Kovalyov -DuĆĄan B. Jovanovic -Earle Castledine -Rich Dougherty -Kim Dalsgaard -Andrea Giammarchi -Fabian Jakobs -Mark Gibson -Karl Swedberg -Justin Meyer -Ben Alman -James Padolsey -David Petersen -Batiste Bieler -Jake Archibald -Alexander Farkas -Filipe Fortes -Rick Waldron -Neeraj Singh -Paul Irish -IraĂȘ Carvalho -Matt Curry -Michael Monteleone -Noah Sloan -Tom Viner -J. Ryan Stinnett -Douglas Neiner -Adam J. Sontag -Heungsub Lee -Dave Reed -Carl FĂŒrstenberg -Jacob Wright -Ralph Whitbeck -unknown -temp01 -Colin Snover -Jared Grippe -Ryan W Tenney -Alex Sexton -Pinhook -Ron Otten -Jephte Clain -Anton Matzneller -Dan Heberden -Henri Wiechers -Russell Holbrook -Julian Aubourg -Gianni Alessandro Chiappetta -Scott Jehl -James Burke -Jonas Pfenniger -Xavi Ramirez -Sylvester Keil -Brandon Sterne -Mathias Bynens -Lee Carpenter -Timmy Willison <4timmywil@gmail.com> -Corey Frang -Digitalxero -David Murdoch -Josh Varner -Charles McNulty -Jordan Boesch -Jess Thrysoee -Michael Murray -Alexis Abril -Rob Morgan -John Firebaugh -Sam Bisbee -Gilmore Davidson -Brian Brennan -Xavier Montillet -Daniel Pihlstrom -Sahab Yazdani -avaly -Scott Hughes -Mike Sherov -Greg Hazel -Schalk Neethling -Denis Knauf -Timo Tijhof -Steen Nielsen -Anton Ryzhov -Shi Chuan -Matt Mueller -Berker Peksag -Toby Brain -Justin -Daniel Herman -Oleg Gaidarenko -Rock Hymas -Richard Gibson -RafaĂ«l Blais Masson -cmc3cn <59194618@qq.com> -Joe Presbrey -Sindre Sorhus -Arne de Bree -Vladislav Zarakovsky -Andrew E Monat -Oskari -Joao Henrique de Andrade Bruni -tsinha -Dominik D. Geyer -Matt Farmer -Trey Hunner -Jason Moon -Jeffery To -Kris Borchers -Vladimir Zhuravlev -Jacob Thornton -Chad Killingsworth -Vitya Muhachev -Nowres Rafid -David Benjamin -Alan Plum -Uri Gilad -Chris Faulkner -Marcel Greter -Elijah Manor -Daniel Chatfield -Daniel GĂĄlvez -Nikita Govorov -Wesley Walser -Mike Pennisi -Matthias JĂ€ggli -Devin Cooper -Markus Staab -Dave Riddle -Callum Macrae -Jonathan Sampson -Benjamin Truyman -Jay Merrifield -James Huston -Sai Lung Wong -Erick Ruiz de ChĂĄvez -David Bonner -Allen J Schmidt Jr -Akintayo Akinwunmi -MORGAN -Ismail Khair -Carl Danley -Mike Petrovich -Greg Lavallee -Tom H Fuertes -Roland Eckl -Yiming He -David Fox -Bennett Sorbo -Paul Ramos -Rod Vagg -Sebastian Burkhard -Zachary Adam Kaplan -Adam Coulombe -nanto_vi -nanto -Danil Somsikov -Ryunosuke SATO -Diego Tres -Jean Boussier -Andrew Plummer -Mark Raddatz -Pascal Borreli -Isaac Z. Schlueter -Karl Sieburg -Nguyen Phuc Lam -Dmitry Gusev -Steven Benner -Li Xudong -MichaƂ GoƂębiowski-Owczarek -Renato Oliveira dos Santos -Frederic Junod -Tom H Fuertes -Mitch Foley -ros3cin -Kyle Robinson Young -John Paul -Jason Bedard -Chris Talkington -Eddie Monge -Terry Jones -Jason Merino -Dan Burzo -Jeremy Dunck -Chris Price -Guy Bedford -njhamann -Goare Mao -Amey Sakhadeo -Mike Sidorov -Anthony Ryan -Lihan Li -George Kats -Dongseok Paeng -Ronny Springer -Ilya Kantor -Marian Sollmann -Chris Antaki -David Hong -Jakob Stoeck -Christopher Jones -Forbes Lindesay -S. Andrew Sheppard -Leonardo Balter -Rodrigo Rosenfeld Rosas -Daniel Husar -Philip JĂ€genstedt -John Hoven -Roman Reiß -Benjy Cui -Christian Kosmowski -David Corbacho -Liang Peng -TJ VanToll -Aurelio De Rosa -Senya Pugach -Dan Hart -Nazar Mokrynskyi -Benjamin Tan -Amit Merchant -Jason Bedard -Veaceslav Grimalschi -Richard McDaniel -Arthur Verschaeve -Shivaji Varma -Ben Toews -Bin Xin -Neftaly Hernandez -T.J. Crowder -Nicolas HENRY -Frederic Hemberger -Victor Homyakov -Aditya Raghavan -Anne-Gaelle Colom -Leonardo Braga -George Mauer -Stephen Edgar -Thomas Tortorini -Jörn Wagner -Jon Hester -Colin Frick -Winston Howes -Alexander O'Mara -Chris Rebert -Bastian Buchholz -Mu Haibao -Calvin Metcalf -Arthur Stolyar -Gabriel Schulhof -Gilad Peleg -Julian Alexander Murillo -Kevin Kirsche -Martin Naumann -Yongwoo Jeon -John-David Dalton -Marek Lewandowski -Bruno Pérel -Daniel Nill -Reed Loden -Sean Henderson -Gary Ye -Richard Kraaijenhagen -Connor Atherton -Christian Grete -Tom von Clef -Liza Ramo -Joelle Fleurantin -Steve Mao -Jon Dufresne -Jae Sung Park -Josh Soref -Saptak Sengupta -Henry Wong -Jun Sun -Martijn W. van der Lee -Devin Wilson -Damian Senn -Zack Hall -Vitaliy Terziev -Todor Prikumov -Bernhard M. Wiedemann -Jha Naman -Alexander Lisianoi -William Robinet -Joe Trumbull -Alexander K -Ralin Chimev -Felipe Sateler -Christophe Tafani-Dereeper -Manoj Kumar -David Broder-Rodgers -Alex Louden -Alex Padilla -karan-96 -ć—æŒ‚äž€ć’ -Erik Lax -Boom Lee -Andreas Solleder -Pierre Spring -Shashanka Nataraj -CDAGaming -Matan Kotler-Berkowitz <205matan@gmail.com> -Jordan Beland -Henry Zhu -Nilton Cesar -basil.belokon -Andrey Meshkov -tmybr11 -Luis Emilio Velasco Sanchez -Ed S -Bert Zhang -SĂ©bastien RĂšgne -wartmanm <3869625+wartmanm@users.noreply.github.com> -Siddharth Dungarwal -abnud1 -Andrei Fangli -Marja HölttĂ€ -buddh4 -Hoang -Wonseop Kim -Pat O'Callaghan -JuanMa Ruiz -Ahmed.S.ElAfifi -Sean Robinson -Christian Oliff diff --git a/docs/articles/xportr_files/jquery-3.5.1/jquery.js b/docs/articles/xportr_files/jquery-3.5.1/jquery.js deleted file mode 100644 index 50937333..00000000 --- a/docs/articles/xportr_files/jquery-3.5.1/jquery.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - -
    -
    - - - -
    -
    -
    - - - -
    • -

      Eli Miller. Author, maintainer. -

      -
    • -
    • -

      Vignesh Thanikachalam. Author. -

      -
    • -
    • -

      Ben Straub. Author. -

      -
    • -
    • -

      Ross Didenko. Author. -

      -
    • -
    • -

      Atorus/GSK JPT. Copyright holder. -

      -
    • -
    -
    -
    -

    Citation

    - Source: DESCRIPTION -
    -
    - - -

    Miller E, Thanikachalam V, Straub B, Didenko R (2022). -xportr: Utilities to Output CDISC SDTM/ADaM XPT Files. -R package version 0.1.0, https://github.com/atorus-research/xportr. -

    -
    @Manual{,
    -  title = {xportr: Utilities to Output CDISC SDTM/ADaM XPT Files},
    -  author = {Eli Miller and Vignesh  Thanikachalam and Ben Straub and Ross Didenko},
    -  year = {2022},
    -  note = {R package version 0.1.0},
    -  url = {https://github.com/atorus-research/xportr},
    -}
    - -
    - -
    - - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/bootstrap-toc.css b/docs/bootstrap-toc.css deleted file mode 100644 index 5a859415..00000000 --- a/docs/bootstrap-toc.css +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ - -/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ - -/* All levels of nav */ -nav[data-toggle='toc'] .nav > li > a { - display: block; - padding: 4px 20px; - font-size: 13px; - font-weight: 500; - color: #767676; -} -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 19px; - color: #563d7c; - text-decoration: none; - background-color: transparent; - border-left: 1px solid #563d7c; -} -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 18px; - font-weight: bold; - color: #563d7c; - background-color: transparent; - border-left: 2px solid #563d7c; -} - -/* Nav: second level (shown on .active) */ -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} -nav[data-toggle='toc'] .nav .nav > li > a { - padding-top: 1px; - padding-bottom: 1px; - padding-left: 30px; - font-size: 12px; - font-weight: normal; -} -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 29px; -} -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 28px; - font-weight: 500; -} - -/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ -nav[data-toggle='toc'] .nav > .active > ul { - display: block; -} diff --git a/docs/bootstrap-toc.js b/docs/bootstrap-toc.js deleted file mode 100644 index 1cdd573b..00000000 --- a/docs/bootstrap-toc.js +++ /dev/null @@ -1,159 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ -(function() { - 'use strict'; - - window.Toc = { - helpers: { - // return all matching elements in the set, or their descendants - findOrFilter: function($el, selector) { - // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ - // http://stackoverflow.com/a/12731439/358804 - var $descendants = $el.find(selector); - return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); - }, - - generateUniqueIdBase: function(el) { - var text = $(el).text(); - var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); - return anchor || el.tagName.toLowerCase(); - }, - - generateUniqueId: function(el) { - var anchorBase = this.generateUniqueIdBase(el); - for (var i = 0; ; i++) { - var anchor = anchorBase; - if (i > 0) { - // add suffix - anchor += '-' + i; - } - // check if ID already exists - if (!document.getElementById(anchor)) { - return anchor; - } - } - }, - - generateAnchor: function(el) { - if (el.id) { - return el.id; - } else { - var anchor = this.generateUniqueId(el); - el.id = anchor; - return anchor; - } - }, - - createNavList: function() { - return $(''); - }, - - createChildNavList: function($parent) { - var $childList = this.createNavList(); - $parent.append($childList); - return $childList; - }, - - generateNavEl: function(anchor, text) { - var $a = $(''); - $a.attr('href', '#' + anchor); - $a.text(text); - var $li = $('
  • '); - $li.append($a); - return $li; - }, - - generateNavItem: function(headingEl) { - var anchor = this.generateAnchor(headingEl); - var $heading = $(headingEl); - var text = $heading.data('toc-text') || $heading.text(); - return this.generateNavEl(anchor, text); - }, - - // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). - getTopLevel: function($scope) { - for (var i = 1; i <= 6; i++) { - var $headings = this.findOrFilter($scope, 'h' + i); - if ($headings.length > 1) { - return i; - } - } - - return 1; - }, - - // returns the elements for the top level, and the next below it - getHeadings: function($scope, topLevel) { - var topSelector = 'h' + topLevel; - - var secondaryLevel = topLevel + 1; - var secondarySelector = 'h' + secondaryLevel; - - return this.findOrFilter($scope, topSelector + ',' + secondarySelector); - }, - - getNavLevel: function(el) { - return parseInt(el.tagName.charAt(1), 10); - }, - - populateNav: function($topContext, topLevel, $headings) { - var $context = $topContext; - var $prevNav; - - var helpers = this; - $headings.each(function(i, el) { - var $newNav = helpers.generateNavItem(el); - var navLevel = helpers.getNavLevel(el); - - // determine the proper $context - if (navLevel === topLevel) { - // use top level - $context = $topContext; - } else if ($prevNav && $context === $topContext) { - // create a new level of the tree and switch to it - $context = helpers.createChildNavList($prevNav); - } // else use the current $context - - $context.append($newNav); - - $prevNav = $newNav; - }); - }, - - parseOps: function(arg) { - var opts; - if (arg.jquery) { - opts = { - $nav: arg - }; - } else { - opts = arg; - } - opts.$scope = opts.$scope || $(document.body); - return opts; - } - }, - - // accepts a jQuery object, or an options object - init: function(opts) { - opts = this.helpers.parseOps(opts); - - // ensure that the data attribute is in place for styling - opts.$nav.attr('data-toggle', 'toc'); - - var $topContext = this.helpers.createChildNavList(opts.$nav); - var topLevel = this.helpers.getTopLevel(opts.$scope); - var $headings = this.helpers.getHeadings(opts.$scope, topLevel); - this.helpers.populateNav($topContext, topLevel, $headings); - } - }; - - $(function() { - $('nav[data-toggle="toc"]').each(function(i, el) { - var $nav = $(el); - Toc.init($nav); - }); - }); -})(); diff --git a/docs/docsearch.css b/docs/docsearch.css deleted file mode 100644 index e5f1fe1d..00000000 --- a/docs/docsearch.css +++ /dev/null @@ -1,148 +0,0 @@ -/* Docsearch -------------------------------------------------------------- */ -/* - Source: https://github.com/algolia/docsearch/ - License: MIT -*/ - -.algolia-autocomplete { - display: block; - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1 -} - -.algolia-autocomplete .ds-dropdown-menu { - width: 100%; - min-width: none; - max-width: none; - padding: .75rem 0; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175); -} - -@media (min-width:768px) { - .algolia-autocomplete .ds-dropdown-menu { - width: 175% - } -} - -.algolia-autocomplete .ds-dropdown-menu::before { - display: none -} - -.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { - padding: 0; - background-color: rgb(255,255,255); - border: 0; - max-height: 80vh; -} - -.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { - margin-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion { - padding: 0; - overflow: visible -} - -.algolia-autocomplete .algolia-docsearch-suggestion--category-header { - padding: .125rem 1rem; - margin-top: 0; - font-size: 1.3em; - font-weight: 500; - color: #00008B; - border-bottom: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { - float: none; - padding-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { - float: none; - width: auto; - padding: 0; - text-align: left -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content { - float: none; - width: auto; - padding: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content::before { - display: none -} - -.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { - padding-top: .75rem; - margin-top: .75rem; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { - display: block; - padding: .1rem 1rem; - margin-bottom: 0.1; - font-size: 1.0em; - font-weight: 400 - /* display: none */ -} - -.algolia-autocomplete .algolia-docsearch-suggestion--title { - display: block; - padding: .25rem 1rem; - margin-bottom: 0; - font-size: 0.9em; - font-weight: 400 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--text { - padding: 0 1rem .5rem; - margin-top: -.25rem; - font-size: 0.8em; - font-weight: 400; - line-height: 1.25 -} - -.algolia-autocomplete .algolia-docsearch-footer { - width: 110px; - height: 20px; - z-index: 3; - margin-top: 10.66667px; - float: right; - font-size: 0; - line-height: 0; -} - -.algolia-autocomplete .algolia-docsearch-footer--logo { - background-image: url("data:image/svg+xml;utf8,"); - background-repeat: no-repeat; - background-position: 50%; - background-size: 100%; - overflow: hidden; - text-indent: -9000px; - width: 100%; - height: 100%; - display: block; - transform: translate(-8px); -} - -.algolia-autocomplete .algolia-docsearch-suggestion--highlight { - color: #FF8C00; - background: rgba(232, 189, 54, 0.1) -} - - -.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { - box-shadow: inset 0 -2px 0 0 rgba(105, 105, 105, .5) -} - -.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { - background-color: rgba(192, 192, 192, .15) -} diff --git a/docs/docsearch.js b/docs/docsearch.js deleted file mode 100644 index b35504cd..00000000 --- a/docs/docsearch.js +++ /dev/null @@ -1,85 +0,0 @@ -$(function() { - - // register a handler to move the focus to the search bar - // upon pressing shift + "/" (i.e. "?") - $(document).on('keydown', function(e) { - if (e.shiftKey && e.keyCode == 191) { - e.preventDefault(); - $("#search-input").focus(); - } - }); - - $(document).ready(function() { - // do keyword highlighting - /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ - var mark = function() { - - var referrer = document.URL ; - var paramKey = "q" ; - - if (referrer.indexOf("?") !== -1) { - var qs = referrer.substr(referrer.indexOf('?') + 1); - var qs_noanchor = qs.split('#')[0]; - var qsa = qs_noanchor.split('&'); - var keyword = ""; - - for (var i = 0; i < qsa.length; i++) { - var currentParam = qsa[i].split('='); - - if (currentParam.length !== 2) { - continue; - } - - if (currentParam[0] == paramKey) { - keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); - } - } - - if (keyword !== "") { - $(".contents").unmark({ - done: function() { - $(".contents").mark(keyword); - } - }); - } - } - }; - - mark(); - }); -}); - -/* Search term highlighting ------------------------------*/ - -function matchedWords(hit) { - var words = []; - - var hierarchy = hit._highlightResult.hierarchy; - // loop to fetch from lvl0, lvl1, etc. - for (var idx in hierarchy) { - words = words.concat(hierarchy[idx].matchedWords); - } - - var content = hit._highlightResult.content; - if (content) { - words = words.concat(content.matchedWords); - } - - // return unique words - var words_uniq = [...new Set(words)]; - return words_uniq; -} - -function updateHitURL(hit) { - - var words = matchedWords(hit); - var url = ""; - - if (hit.anchor) { - url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; - } else { - url = hit.url + '?q=' + escape(words.join(" ")); - } - - return url; -} diff --git a/docs/favicon-16x16.png b/docs/favicon-16x16.png deleted file mode 100644 index 5c2cb7d58bdf06634927366892793f124210ba34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1101 zcmZ`&ZA@EL7=F*aEw{9ket*&73Z>g4c7~`^_%xHpaQMP!!?2rEO%{k{e?|a_o zob$XVr+0gqm(NY(0s!Cd^8^_bu6GX3jHFpm$pGtRSE&o&(|34J>e!603HySj0EhGd zU55eIm{8Zx0Q)I`IuOX5>k`lNEP~V2&3ol zXg#WYmYuHPs6<#r9z?^4{uciuiuueC$c5D?_FxFJYr(05UxzTK9yVuzQ;&QW6v#zP z+NpX}ZbJ$Il;@$-^@yIq7YDJ!Ayk-+u5@B8USvs!RxhF#@zH%~PXQWjMg)t|0W5-p z6C5@tIf=`|*=)W{CeGA}HCmaD6lZAVdV?e*OOmNm7;;oOlq8EJk~v(dLasN;vyD=% zJ}uX#Fql)|+SgJCONZ}LwRK8M$u&0LOIE%Rs&L~<}ssno#Y<*fW90OS@xD2R}MERMJ ztpcMOl30KM*f{W$fu`xzz}ZubHg_agw*KJ%F?`EdM(@%w(W`TRH;FLs*xK5d7n4pU zWb#|H%Gq19%q(#E@#O$6ZoZ@K|D~VhzT)QJTj^%DK=mbFPhZa~2Raysi1#Rxuv0L@4^2k z{3YxDf+6fU6xtaH)*aBawzuqU+SjOw9BggWG_^*;0I!eSTS?)xRg>go`P8)keh_di z&l2WIw33n&Qe2|(bZxrYfNMVwX{PRcHxZwXZ-^69UB34N7Fbq@A}j9vlgts|FDmm~ IaMyPK1J$cX2><{9 diff --git a/docs/favicon-32x32.png b/docs/favicon-32x32.png deleted file mode 100644 index 91d483bfee8a20d18fc3f180fcd611e6f57526a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1978 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 aHW_oYLjGTQPxh+DW_x;~4s~fm+y4a~wZifM diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index 68476df5..00000000 --- a/docs/index.html +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - -Utilities to Output CDISC SDTM/ADaM XPT Files ‱ xportr - - - - - - - - - - - - - - - - - - - - -

    -
    - - - - -
    -
    - -
    - - - -

    Welcome to xportr! We have designed xportr to help get your xpt files ready for transport either to a clinical data set validator application or to a regulatory agency. This package has the functionality to associate metadata information to a local R data frame, perform data set level validation checks and convert into a transport v5 file(xpt).

    -

    As always, we welcome your feedback. If you spot a bug, would like to see a new feature, or if any documentation is unclear - submit an issue on xportr’s GitHub page.

    -
    -

    Installation -

    -
    -

    Development version: -

    -
    -devtools::install_github("https://github.com/atorus-research/xportr.git", ref = "main")
    -
    -
    -

    CRAN -

    -
      -
    • As this is an experimental package and under development we have not made it available on CRAN.
    • -
    -
    -
    -
    -
    -

    What is xportr? -

    -


    -

    xportr is designed for clinical programmers to create CDISC compliant xpt files- ADaM or SDTM. Essentially, this package has two big components to it

    -
      -
    1. Writing xpt files with well-defined metadata
    2. -
    3. Checking compliance of the data sets.
    4. -
    -

    The first set of tools are designed to allow a clinical programmer to build a CDISC compliant xpt file directly from R. The second set of tools are to perform checks on your data sets before you send them off to any validators or data reviewers.

    -


    -

    -


    -
    -
    -

    What are the checks? -

    -


    -
      -
    • Variable names must start with a letter (not an underscore), be comprised of only uppercase letters (A-Z), numerals (0-9) and be free of non-ASCII characters, symbols, and underscores.
    • -
    • Allotted length for each column containing character (text) data should be set to the maximum length of the variable used across all data sets (≀ 200)
    • -
    • Coerces variables to only numeric or character types
    • -
    • Display format support for numeric float and date/time values
    • -
    • Variables names are ≀ 8 characters.
    • -
    • Variable labels are ≀ 200 characters.
    • -
    • Data set labels are ≀ 40 characters.
    • -
    • Presence of non-ASCII characters in Variable Names, Labels or data set labels.
    • -
    -

    NOTE: Each check has associated messages and warning.

    -
    -

    Simple Example -

    -

    Objective: Create a fully compliant v5 xpt ADSL dataset that was developed using R.

    -

    To do this we will need to do the following:

    -
      -
    • Apply types
    • -
    • Apply lengths
      -
    • -
    • Apply variable labels
    • -
    • Apply formats
    • -
    • Re-order the variables
    • -
    • Apply a dataset label
    • -
    • Write out a version 5 xpt file
    • -
    -

    All of which can be done using a well-defined specification file and the xportr package!

    -

    First we will start with our ADSL dataset created in R. This example ADSL dataset is taken from the {admiral} package. The script that generates this ADSL dataset can be created by using this command admiral::use_ad_template("adsl"). This ADSL dataset has 306 observations and 48 variables.

    - -

    We have created a dummy specification file called ADaM_admiral_spec.xlsx found in the specs folder of this package. You can use system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr") to access this file.

    -
    -spec_path <- system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr")
    -
    -var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>%
    -  dplyr::rename(type = "Data Type") %>%
    -  rlang::set_names(tolower)
    -

    Each xportr_ function has been written in a way to take in a part of the specification file and apply that piece to the dataset.

    -
    -adsl %>% 
    -  xportr_type(var_spec, "ADSL") %>%
    -  xportr_length(var_spec, "ADSL") %>%
    -  xportr_label(var_spec, "ADSL") %>%
    -  xportr_order(var_spec, "ADSL") %>% 
    -  xportr_format(var_spec, "ADSL") %>% 
    -  xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset")
    -

    That’s it! We now have a xpt file created in R with all appropriate types, lengths, labels, ordering and formats. Please check out the Get Started for more information and detailed walk through of each xportr_ function.

    -

    We are in talks with other Pharma companies involved with the {pharmaverse} to enhance this package to play well with other downstream and upstream packages.

    -
    -
    -
    -

    References -

    -


    -

    This package was developed jointly by GSK and Atorus.

    -
    - -
    - - -
    - - -
    - -
    -

    -

    Site built with pkgdown 2.0.3.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/link.svg b/docs/link.svg deleted file mode 100644 index 88ad8276..00000000 --- a/docs/link.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/docs/logo.png b/docs/logo.png deleted file mode 100644 index b439544c208f92451fcc8533737ca14718fbbc82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114626 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

    mtXyJleTfse)|JeR+Hav2pO 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 $T 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 a=)A*jBvZpEQ*`kGi0|p@=d#Wzp$PzJ8c{6( diff --git a/docs/news/index.html b/docs/news/index.html deleted file mode 100644 index 689f43ec..00000000 --- a/docs/news/index.html +++ /dev/null @@ -1,91 +0,0 @@ - -Changelog ‱ xportr - - -

    -
    - - - -
    -
    - - -
    - -

    Beta release for xportr

    -
    • Added exported functions xportr_varnames and xportr_tidy_rename into dev folder found on GitHub Repostiory. Intention to move into packages after CRAN release.
    • -
    • Fixed xportr_format() bug
    • -
    • Using admiral ADSL dataset in examples
    • -
    -
    - -

    Initial alpha release of xportr

    -
    • Development of 5 core functions
    • -
    • Package down site and documentation created
    • -
    -
    - - - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/pkgdown.css b/docs/pkgdown.css deleted file mode 100644 index 80ea5b83..00000000 --- a/docs/pkgdown.css +++ /dev/null @@ -1,384 +0,0 @@ -/* Sticky footer */ - -/** - * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ - * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css - * - * .Site -> body > .container - * .Site-content -> body > .container .row - * .footer -> footer - * - * Key idea seems to be to ensure that .container and __all its parents__ - * have height set to 100% - * - */ - -html, body { - height: 100%; -} - -body { - position: relative; -} - -body > .container { - display: flex; - height: 100%; - flex-direction: column; -} - -body > .container .row { - flex: 1 0 auto; -} - -footer { - margin-top: 45px; - padding: 35px 0 36px; - border-top: 1px solid #e5e5e5; - color: #666; - display: flex; - flex-shrink: 0; -} -footer p { - margin-bottom: 0; -} -footer div { - flex: 1; -} -footer .pkgdown { - text-align: right; -} -footer p { - margin-bottom: 0; -} - -img.icon { - float: right; -} - -/* Ensure in-page images don't run outside their container */ -.contents img { - max-width: 100%; - height: auto; -} - -/* Fix bug in bootstrap (only seen in firefox) */ -summary { - display: list-item; -} - -/* Typographic tweaking ---------------------------------*/ - -.contents .page-header { - margin-top: calc(-60px + 1em); -} - -dd { - margin-left: 3em; -} - -/* Section anchors ---------------------------------*/ - -a.anchor { - display: none; - margin-left: 5px; - width: 20px; - height: 20px; - - background-image: url(./link.svg); - background-repeat: no-repeat; - background-size: 20px 20px; - background-position: center center; -} - -h1:hover .anchor, -h2:hover .anchor, -h3:hover .anchor, -h4:hover .anchor, -h5:hover .anchor, -h6:hover .anchor { - display: inline-block; -} - -/* Fixes for fixed navbar --------------------------*/ - -.contents h1, .contents h2, .contents h3, .contents h4 { - padding-top: 60px; - margin-top: -40px; -} - -/* Navbar submenu --------------------------*/ - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu>.dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover>.dropdown-menu { - display: block; -} - -.dropdown-submenu>a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} - -.dropdown-submenu:hover>a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left>.dropdown-menu { - left: -100%; - margin-left: 10px; - border-radius: 6px 0 6px 6px; -} - -/* Sidebar --------------------------*/ - -#pkgdown-sidebar { - margin-top: 30px; - position: -webkit-sticky; - position: sticky; - top: 70px; -} - -#pkgdown-sidebar h2 { - font-size: 1.5em; - margin-top: 1em; -} - -#pkgdown-sidebar h2:first-child { - margin-top: 0; -} - -#pkgdown-sidebar .list-unstyled li { - margin-bottom: 0.5em; -} - -/* bootstrap-toc tweaks ------------------------------------------------------*/ - -/* All levels of nav */ - -nav[data-toggle='toc'] .nav > li > a { - padding: 4px 20px 4px 6px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; -} - -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 5px; - color: inherit; - border-left: 1px solid #878787; -} - -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 5px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; - border-left: 2px solid #878787; -} - -/* Nav: second level (shown on .active) */ - -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} - -nav[data-toggle='toc'] .nav .nav > li > a { - padding-left: 16px; - font-size: 1.35rem; -} - -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 15px; -} - -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 15px; - font-weight: 500; - font-size: 1.35rem; -} - -/* orcid ------------------------------------------------------------------- */ - -.orcid { - font-size: 16px; - color: #A6CE39; - /* margins are required by official ORCID trademark and display guidelines */ - margin-left:4px; - margin-right:4px; - vertical-align: middle; -} - -/* Reference index & topics ----------------------------------------------- */ - -.ref-index th {font-weight: normal;} - -.ref-index td {vertical-align: top; min-width: 100px} -.ref-index .icon {width: 40px;} -.ref-index .alias {width: 40%;} -.ref-index-icons .alias {width: calc(40% - 40px);} -.ref-index .title {width: 60%;} - -.ref-arguments th {text-align: right; padding-right: 10px;} -.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} -.ref-arguments .name {width: 20%;} -.ref-arguments .desc {width: 80%;} - -/* Nice scrolling for wide elements --------------------------------------- */ - -table { - display: block; - overflow: auto; -} - -/* Syntax highlighting ---------------------------------------------------- */ - -pre, code, pre code { - background-color: #f8f8f8; - color: #333; -} -pre, pre code { - white-space: pre-wrap; - word-break: break-all; - overflow-wrap: break-word; -} - -pre { - border: 1px solid #eee; -} - -pre .img, pre .r-plt { - margin: 5px 0; -} - -pre .img img, pre .r-plt img { - background-color: #fff; -} - -code a, pre a { - color: #375f84; -} - -a.sourceLine:hover { - text-decoration: none; -} - -.fl {color: #1514b5;} -.fu {color: #000000;} /* function */ -.ch,.st {color: #036a07;} /* string */ -.kw {color: #264D66;} /* keyword */ -.co {color: #888888;} /* comment */ - -.error {font-weight: bolder;} -.warning {font-weight: bolder;} - -/* Clipboard --------------------------*/ - -.hasCopyButton { - position: relative; -} - -.btn-copy-ex { - position: absolute; - right: 0; - top: 0; - visibility: hidden; -} - -.hasCopyButton:hover button.btn-copy-ex { - visibility: visible; -} - -/* headroom.js ------------------------ */ - -.headroom { - will-change: transform; - transition: transform 200ms linear; -} -.headroom--pinned { - transform: translateY(0%); -} -.headroom--unpinned { - transform: translateY(-100%); -} - -/* mark.js ----------------------------*/ - -mark { - background-color: rgba(255, 255, 51, 0.5); - border-bottom: 2px solid rgba(255, 153, 51, 0.3); - padding: 1px; -} - -/* vertical spacing after htmlwidgets */ -.html-widget { - margin-bottom: 10px; -} - -/* fontawesome ------------------------ */ - -.fab { - font-family: "Font Awesome 5 Brands" !important; -} - -/* don't display links in code chunks when printing */ -/* source: https://stackoverflow.com/a/10781533 */ -@media print { - code a:link:after, code a:visited:after { - content: ""; - } -} - -/* Section anchors --------------------------------- - Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71 -*/ - -div.csl-bib-body { } -div.csl-entry { - clear: both; -} -.hanging-indent div.csl-entry { - margin-left:2em; - text-indent:-2em; -} -div.csl-left-margin { - min-width:2em; - float:left; -} -div.csl-right-inline { - margin-left:2em; - padding-left:1em; -} -div.csl-indent { - margin-left: 2em; -} diff --git a/docs/pkgdown.js b/docs/pkgdown.js deleted file mode 100644 index 6f0eee40..00000000 --- a/docs/pkgdown.js +++ /dev/null @@ -1,108 +0,0 @@ -/* http://gregfranko.com/blog/jquery-best-practices/ */ -(function($) { - $(function() { - - $('.navbar-fixed-top').headroom(); - - $('body').css('padding-top', $('.navbar').height() + 10); - $(window).resize(function(){ - $('body').css('padding-top', $('.navbar').height() + 10); - }); - - $('[data-toggle="tooltip"]').tooltip(); - - var cur_path = paths(location.pathname); - var links = $("#navbar ul li a"); - var max_length = -1; - var pos = -1; - for (var i = 0; i < links.length; i++) { - if (links[i].getAttribute("href") === "#") - continue; - // Ignore external links - if (links[i].host !== location.host) - continue; - - var nav_path = paths(links[i].pathname); - - var length = prefix_length(nav_path, cur_path); - if (length > max_length) { - max_length = length; - pos = i; - } - } - - // Add class to parent
  • , and enclosing
  • if in dropdown - if (pos >= 0) { - var menu_anchor = $(links[pos]); - menu_anchor.parent().addClass("active"); - menu_anchor.closest("li.dropdown").addClass("active"); - } - }); - - function paths(pathname) { - var pieces = pathname.split("/"); - pieces.shift(); // always starts with / - - var end = pieces[pieces.length - 1]; - if (end === "index.html" || end === "") - pieces.pop(); - return(pieces); - } - - // Returns -1 if not found - function prefix_length(needle, haystack) { - if (needle.length > haystack.length) - return(-1); - - // Special case for length-0 haystack, since for loop won't run - if (haystack.length === 0) { - return(needle.length === 0 ? 0 : -1); - } - - for (var i = 0; i < haystack.length; i++) { - if (needle[i] != haystack[i]) - return(i); - } - - return(haystack.length); - } - - /* Clipboard --------------------------*/ - - function changeTooltipMessage(element, msg) { - var tooltipOriginalTitle=element.getAttribute('data-original-title'); - element.setAttribute('data-original-title', msg); - $(element).tooltip('show'); - element.setAttribute('data-original-title', tooltipOriginalTitle); - } - - if(ClipboardJS.isSupported()) { - $(document).ready(function() { - var copyButton = ""; - - $("div.sourceCode").addClass("hasCopyButton"); - - // Insert copy buttons: - $(copyButton).prependTo(".hasCopyButton"); - - // Initialize tooltips: - $('.btn-copy-ex').tooltip({container: 'body'}); - - // Initialize clipboard: - var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { - text: function(trigger) { - return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); - } - }); - - clipboardBtnCopies.on('success', function(e) { - changeTooltipMessage(e.trigger, 'Copied!'); - e.clearSelection(); - }); - - clipboardBtnCopies.on('error', function() { - changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); - }); - }); - } -})(window.jQuery || window.$) diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml deleted file mode 100644 index d38c0354..00000000 --- a/docs/pkgdown.yml +++ /dev/null @@ -1,7 +0,0 @@ -pandoc: 2.17.1.1 -pkgdown: 2.0.3 -pkgdown_sha: ~ -articles: - xportr: xportr.html -last_built: 2022-06-17T13:28Z - diff --git a/docs/reference/Rplot001.png b/docs/reference/Rplot001.png deleted file mode 100644 index 17a358060aed2a86950757bbd25c6f92c08c458f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|=9Be?5+AI5}0x7m6Z+90U4Fo@(ch>_c&H|6f zVg?3oArNM~bhqvg0|WD9PZ!6KiaBo&GBN^{G%5UFpXcEKVvd5*5Eu=C0SJK)8A6*F U7`aXvEC5;V>FVdQ&MBb@00SN#Z2$lO diff --git a/docs/reference/df_label_view.html b/docs/reference/df_label_view.html deleted file mode 100644 index 6fa010d4..00000000 --- a/docs/reference/df_label_view.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - -View Label on a dataframe — df_label_view ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    View Label on a dataframe

    -
    - -
    df_label_view(.data)
    - -

    Arguments

    - - - - - - -
    .data
    - -

    Value

    - -

    Message with the Label or "No Label on dataframe"

    - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/figures/_logo.png b/docs/reference/figures/_logo.png deleted file mode 100644 index b439544c208f92451fcc8533737ca14718fbbc82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114626 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

    mtXyJleTfse)|JeR+Hav2pO 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 $T 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 a=)A*jBvZpEQ*`kGi0|p@=d#Wzp$PzJ8c{6( diff --git a/docs/reference/figures/design_flow.png b/docs/reference/figures/design_flow.png deleted file mode 100644 index beef0e5266212f6370b9e47350518a51dc354e36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54033 zcmeFZWmME*+b@bB2AH&@(hLI9N=tVRT?*0-4k;iiA|N1*Ae}RG3|)eVloCU?^w8bR zz6amuobzF?v-V!={j}G1>2hG|KX+W$ukHy}SCzX>KuLgugL7L!URo0e2R{u52RHc! zF8GZ>fW8^{?~0qIoFq=sZ|W8B!&R&2D$j9nN+Sr*UgCqFZ#v8CyW!y6X~q7#((aV^ z3J0e@M?v~I)YD{blJE`rU^2!Z_l8Mz!qshD8O3)YFVgQd8}v$QYdRN_#ik9F<%@H| z?S|>o()@>0-@UD!)Lb}dEpi~0>>EVByIDO(u#fv)G9OvUXt0|7@X_0hiCzDt(`R4r z@J??EPJftSu1~pp=KZ_-E3eh>Z(ldRMIZmp(uP7S^1`!^=cCnxJT~mLz*T}j=-x_) z@iC-bd|cd6nS~N2*OKjpO;n!p^~-zj+1zrzyz%yz`CGipThg?6)R#9N?oiBJ-oS}$ z$NBg0Pa@ZzUj9mAp1b+Vn+_{P%QQ$MH&s z^)aN9l9JtMSvE$ioTP+L!TI|C%4_~NUf%!wrEDMfSZz$yI6|=3%18S@`+VVv`c;m} zbzDu%*X~d!Bqa%(|NQ*!-MjvN&3JON&dyFK?*ncER$Hm{ttCU7G8ksPC>|jbn zx8ul3v2t>9LLiC!c0(hj=H+E&W##3A(N1IW34PBBO?`br>Cc9vfisa>FVXPZNsmG zXYzpM5Rx_Y^RZ#2GMn6IidiyYO$`l=CcpFWQ4a^zM81wdGh7W+B4vtQAW~aTZ+Qp1 z;NLPwTnRtnXJqE$azdlvXimgHwd+DBxB1WNQL%v>m9Cy1(Q9<2UYiYvs;Oe4qOwfN0x?hh7&zP`Srrm~C6cBvQLzl9+8{z~{yzE{7#44e9kI zMkvbcZRSn=#y4Kx-nF3>)*70cn(FE^^#3l8``XjQFW~Yf{7%<7iQJZwJ!;K5q$QnP}1&D*VEm-a;V5abJU2Qn$1y) zREA%pJWmMwrf|fkrOb%}%5%3+8oZ$*<5dW!H5dhIf^~irEQ?Q8EUbN_ntFbVHN(yrQ zR8e`Tt}4hcJE~*&Xe@$>iODhGaf%C&Vr++85lsYxTr)tomHj>qf%4FUoWfg4;qUE z7%Z7GRCYkrAV~#05j4UA!oohgi#?A08d_Ie-P~dwkfdcVzT?7BtImUc+6D#)#Q_s` z2*foy3c|^$bNeosl-RMlzai{Ktjznu9x<9>Lo&9m6CHNN4U3Z8@kXw}gxK0;Edf^K zGvCvLeGHR+auIZ+ze;tkK)>9mUQtJ9=mwo2GNg6^ZIv?>-}UE@uH2*yqPoERj43{G z(Ubwb@pJN(OLp+h`XpHy^l-5$M+jKC_s9`unN$}hwM~_HtEB6lFIzv-%$ZZ?>lAAC zd#ec1fO#>uH_(T;zOJjG|@8974rVYa&t`aOeE++&yYk#lBI?>*#Jc*ZY}59tgYJLumZ= z56?2Grntn6hPZ{@*VHcp8h!oz{E`pRv9l#FTXB;L*89isWX8a4uwb;I7#+K4tIe615>FTey+6hE0SR_z^KMGyJZPp#5B7_*K?gUKLYtt=z`Fex(b!XeMrQnAv0l!rV5yD*|& zhBg;NH6Iu$y)Ku1u|;2GmE!d?&fXejGj=PyjRT&qk_&+IpN876$Bwz;yX@d1X_A}32!Re z)R=Tnwisw_qqvbI3VZ?&Bl zbh*ljd~kO>Rs&m5y*V`v6@I>NsgT7uFmN>|Bo8_6i}0J5DGQvC8(5urAoL$ZFr#TavKC=uuZ@8i*=q}xcWa;l3LVk~cN4yvsDWvnLMSP8V z_hs3BbkY9uC?e)<^QKmT%yCdr)R|&-MFq-VTqDgM`|gw!py~HfIn~cfa=Vx!GF0Q6 z++eeTLWXeYK4L3`v5jETpI6Ebo z!^C!)M~E&;%6XrxQF0`||yXu}WcYZkS@klzzpCnE7$X_FNVz}u7MjmoI@I$IRC3y9mF;n=}oUQ-& zbt__GV>$Fnnq|xqXG}llswUThL5pSA#UfV>`&%3b`9CS5=i*nMDxN{E^7FXP%VXq? zJoA|PHnl$c|1t+#o)fyT5O3<9&fr9fZSuW({SXMmsCQ}3X>d(-XCQU@uVl|;Eo>EA zIO#bI0E3ci@Fj;6f_|`%dBMoeZr2re1fyc@$Wn-|_1N5?m&?sDtnk`h95(S;&yF`S zXz)g2+WAueoMQ5leEvcTz_X-f{)~Va(1t}i#gpP=V_|4ihm1kRC!fbh+1c4O>V@vU zFP3!bY7+_OQ?r;OOwihqNlB|=k3UmzXOxumwjdY(s7L9V`}s8rnk7U>m%nViM%V>9 zlWZ8J#ccCqEdv8IT@yPS+cxGS69Yr5-Fk;1mWI70aTu>GG_G?;J670__G94s7h>{~ zXxb0HF-h8){*I;QZ-v5&{+gkXZoKGs-s%CVetC2Ai-A`aGxC!9@}Ms;ybnbcLgG(8 z+K*LqFoirj>AYJorlQiF9SUz7Lw+)R`ctJ)IN)p*sZb63!B|Y-@AIn@@!m})j0fAN zl_)c%x_k2S68LPQlEyOHS^^0tQ4Gia*?-lDt)GooIeA>t8tTA8!>WzZ@}=EB;?s2= zn~lDwcc`B_Z_Rvf<>r*pJd@782~go@%$*yssi-skYTaTJP7-2I94m8;0761SL5H#V z%?F*Wcg5Ev)e*}(Y?ApGntU00yIXJ%j|xnirUDVC zz99;G?42wXeK#6*hJL^mAf-7zUfadk+}-4cgB|;EZ*Yi z>)|JK?rCVD&Z#oR1<5=?zy(qW+m3=LY+nu{v^hz5?MI%FD|Sy?rg$wrAY}CN4@vc( zX`P-r<6w#90rP@mjRUsh%?lR%1OS$FPjT@5{}kRyUC?LY;pO$;%cQH3?;dw*T9=fY z4Ph?=JMcQ)o8CZMReqhQJ*Lb&;(#QEsJr9ZU6?6ih1W}gsZBkec*F`*sej22jUiw` zUBpEzUZQVo&!z+rNZ<3dlrI9Hms)wVOSp}+)-W-dLj8P-p1T>3Rz9KA%J3#^I^`wR zS?7Fr5(9>VE*KzY13+s-QR)CxV&oNEmjX>+;IwR9QCK)+V?JXi#SoflJ;qkJx7V6+ zwji z{ZM*e%;|K*X$v_jD9NdDG|J^^M+ z&c&rP{9SIU-&kAp)H!w&rv-qL^HfnuY0!{L=(Y8XE|EZOI_K9=-KF2co3GPHRH#8k z=Zq=?qzn{~7i%M>yq4Y0(SJ2kokvPuf;nwkEvlQyLSNk|d^-1;*Jycp!gDU{A}Av7 z54=#-_jBvU9w9TCoLa z1<^jmAe@TdHs-v~uuXNl>WM*TpyrXV7aA(ACb}Pk34)BFzrVkpyVH6-TjN}>hy6Mx zR8pfDRg2rif#{Hc-EkcBNKsMoEGPxzVG?}gG_b{G7*t3JE~mNA{B5Qm zT#f^s(vvK#YrI-fQK6A3+t%PKK~tF+?wCM#u@!XD^n{$0G`oMCi-V)5t1C&sAu+UF z=*(lnB`B17MalFeim>f7jj&F`zj#T)WqjbhkxZ#v>- zp`g(d6@8>_>>@j?X7UnQ{^Bbp8_nhl*6l)gMMNX87iQL@+P? zu%7p6O|vmY3Q#zpI|{FpWRV{J*s-*hzvWCFYcr6O&6G`x%=5{Kxey*dm;Fpp3VsK0 zd#&ef3rovuQyu92gLSWvD`3H;aGQVZKW*3V9~dz8UdfhDZir-%yLR!SXliBV`}?_Y z=8;UHGf_q<&Wil(v?zkaO&EVTMAGf<)2 zea}6sz5tzKG1+5EAv<3HNHory(5U&;&fbo`<-W`yv@=jo(9NTO!D>`yH-C}FUPY7U z@laLcf+Th%5gWHHhpVKpwt1KXm_WJ3uvJy7}_G$MDLx}kGJdQ zqm;s3KUjc$+;qO~BQP`vCFhM)ksKJpi^Lw5zA{|R3 zfp9XlYnpwB3acHy%^Rt7FsyT52jY-HrTq#9^%(!L3ehd+nGt@V7wVT=>L>hDO0A9L zo;810gF3H`U1B}I_cNDQ{q~00TfFw7OXMF)Hd*K4@d*22B(8Ed2biM(95^d}*f8^s z(CAVXyZ0QtG{yde+n*ZsHCSc6Fd6p2^kG--NdEyEl$)DdS7)bD{o)YlzCbJ?x9Owj z;`;MXk?s3|bDiE2NGjmdgEoNJrwEFp6mE_KEr0(|b$;wJ-nt21^Iq zzrhvQ>x6(&1R9KzqM}i~Oz1PW#VrC->>Ga)!am%o>AVutkwy?f$qx|}^Z+=^QBxB@ zZBd_t$6)wP%qSaG@JVwztd2E zN&)c15j2g_G7HdG9s46YyShTnjLzf%;0N1n@hw0A9?*hcm8)N^$7|8YhJ<3o&N~@|BYAhe_sl$j{ikp z<^O=OvW9>yV3haqKaP^hJHc9w(3f}qW4A=BYiP_$^8d$YvL-qcbYy)Dzw4D1gX({? z)4@W9?Jzhvd2Z|DRcilyq%cQ4iGg+A8fd#@Ot&Vj*qf0S+NAtgeTvIRK9mtinYsOn z!s)Y=z4v1W9{%e0t+=j7TQ39G2a=dBo?Jdi0@?rfwzFq_aA`#cYNnDfd#{{riskaI z=Dw1E&v6{=bQHF!0@)_lp5k69Y|WVJB&oc-8%M%bAms%f;nc{xFvm~+X0H4cGxwAV z)G}eq1D2O13I~SEoR#n=2Y zzcj|A`N-n zy`&sCZ>#$e)t-Zsq-=l5{&_R^yx>#c|2?Jm)&In<`#)e={r~%s|Mvrewf4VNV~#N}i7H?k_mK(VN81pS?p)^!p# z4Den75C#B*Z1CQ9)k=b|t=VgT3dOn4=doc#(+4zSSC`bDBtg3&fI%PIwwm}2T>wvb z?)UBd{ZED@|CT79jfI7UK*jcmdBkW84h#kwII~)ci0k~XM^YbOSy}?$DKQK1fyMcG zBmeV#q1wqTh~VUFEnwN)^*@p#kI=7no*hd7nh`JxWm&Fr6yY@iNkL$e^{aTP%>hG- z-+x{FShSj$zKMw#Xu}y9^rz(x&2n_US$~R*>kOc-=0;hg00MLY7t#1?o-myHsf~>d zYzHrOp(}oMw|2FtJWu0yTU%R%=z-pggffrKDJe7AaB6^ux;>`6O4t~G2N*n z)LINF|9MBeyCP43Uw0b10hBju;w#byKwVw@lWGc_d+R>>q%z0JS^%$m03-%fRDdb6 zySux-zJ4%Yx9%z8$)(}WXAFiB!p2rJ`;iKj{gux~6F9F&DegELG4b(&mfZ=$8`YT= z70~wmYL~hH0$Y|Wu_-AgCMFy7c`cVle(!5A3tT|zn*S9^VCu7uME8q;*noi2+Wq&y zSJu``EtMnCfrONnVBEd44^1kgl9Oqw2c~G>bhb~a&{L#l3x20 zlYFBoBKA!~r{V+eB)XAuv%tPwgU|(Yi!C0F*4`h^kukZhZjorjFT+s9RZ>|Znx{W= z*q;EOl#u;;QubfA2LIO9I{qR#TCX1hTjCdU;($uWJ=Xtg3AF-t3;^mb_dWkb0Tj?% z%OSp4-QGkal5~!qloUurrc|39@1Aj!=`hE6g7u*&0Em84ku@-sqehKNuL8#haKR5P zfK|KlhG*@t29zFFE^EEy$j>&)&~r@8Q!`AC)5OhwUCs`vpeJqadfvbv+heJ(P|wl- z+9Ep)SwnCgE!~A47|JfF(C8dh;vyKA_D=~hAn#)$(70{Q=5&9dSf*Ywg!vkoE|l1q zkikLeY2f)$-KIEYwf(?aTzc{>iKdG;qz z%3zMY2)uUl0f*;=hEz(Z+Ik+A+`Ue%it40!bGQAKzol%Q&z|&sAf~hX*WwddS1s<6yZR9uA&f4={g0aV|JB338^yML$nIM zjt-f?1sfb1`C*tI@m1nH$mYAmxn9@ZH62592)_+JnLm?feU0DPNV7t--rwqDY6bx1 zK|$>$iEW#@lb@1=VY-3!l4~^qk#gIP;V`a+`YK^W&-%eKfi2-Wr8ZppP~5SP&S;|n z|HJotPTbqzbNKhK8F?_Qf68<2HfEDt1lYYJfM}zeKKJGvr*`GF#nv3MlP;9M`2Oy6 zv&nSaPU|z7#(u55?V2_}mS4%(Nw={=AOz$L57ja8#_nHj2T$3gA*U|D5JbCP@BaW_ zl#8G(+_~y*5p_8NMf&AAj0eP@o0UX?XO_kf@c!EE{#@O4AZ!BOfp;DYypE9)|1y;3M7E8?(x)D5b`|zx9Ae+F@=<98)9X zpuCRAFDkP}tB97wjVY8Fa@B81(zJB2_xkMpWQY(c1J=Z*Kjzf&XXKfaA973r*xXof zr_u-Ne3}|2Q>y13J|SNN*=A@D+`C%h?RixJVpe}rX#6PcqR#tY;I<0A)XGr?ahIAfnh~Fv^Zht8Qti69lS;Tjt0kN`;q$*SEvWVH>^;AEB=3UBOPM&? zUp4+E*Pv3^;;Qwhu)120rV{ij(D(XvPz^pFN-Mc5#LUWoKEJPIcMc6I1LS!i4q;~i zg+kYTse`|{{CsfoX0@>DG5YXQxDY|V0f8c4kn4ebbdW?InleUaQNWcf#4X$W%*|${ zE4T;<31eNs3(j)i(fAmAphVv>JYHxh==;-n7(JLjm}Sh!@80wiv~svkIsvvR+Sj5S zw2F12CQpFSlbf5%LRq@w_w8>3xsF^XkO7K7Ismnq_#Edlog?-3#0X#zYp_k z0YJmZ#H0~8`|(1rn%`atn7s?rLCOP^6WY$I;^^o&A!g+|TkvCwdiGpX;>`cia4i{^ z$r^oW-@U>y(_a8e=t&UA*7!fo#F`jTcJxccv}Zew$5pg6m19*a9v&1N!t&kB2b)QG`elpiqnn0@f?OZ zwDEC+F(8L#;|Pqm!Q}GmRzshJ&_l$P1*lwYy<|h!pMq|H_7v6Bn)ZhbIReCDn|*F& z=>xeFNU+F)1?ThqVRl0m-8)nQ_SHcD0NJQjj{J#m%LFO>u3x`;4{Y;ebGs9`&G(l3 z(22Dq+j%18R(~pqLJ&n`R)&m+!0R7*`_3UTPXz25Wj@w>ah-nOgkT6E4A^~07y43~ zES1Wuw1DLWH}Eiyami*6B8=zdJBIUNqM)vz`+dIVpLN>){SgeH*@M46vi2cs8kvX? zi8`TwV+S?vG;%|d3gm77Vu-lvo-a^i+T@2291P|lO>2YITeso~#)4~`yExq(o-O97 zR>-@5C~zrxsk|4>mrNEUkB~EdnypXeLzgAiP}1%*6Nnj1P@IFU3^Hk9Ix&gLUF|YN z1Dfa>eTlEukwE6Mpz>46sp8!HdV`>DwDj;J;){U}@jkqy>50iA(Jv#rVI%UJGGWXi zp+8vN`~#3egC#kvXw45tN_qI}4dn!OQjed%2>l^0$m!25%|Ayf_AP1TheS#U^Js+Z z>E!8TQ2$ZBpt^aYBU>T-s7k2Blw>Q4De6^2hR`sH(=L*97Tv#BO?+-45T`c5kUa+J z-`g^fZY$3wa>&uiC4k~;hYvrFtMC-?$H`^^ww6Oe0Ym{J$Q|E9if52K2oHFmd6+ z8x%lO%+tsO1`=4(mQD*-dquXsXkgzO=bqQZe{tmhPmuLr9mo0a$i)6Pzm$3t5MQx- zh@NeL9#9faA{P+AvrBM*8*2-S#A+EaTIhtGymrCCac0D7E67|RavS+2VuOyB3@Koo z0VgAeTNy;^EMYa+9!f9;Z!@ESu3y;+3|xMTf96?94Y*UH^#vGvXDDzjgP>oZyp(+T za`xLZH{fF+K?EiqS1wW9|00gV&?sx;$NBj?ovgu{8{ynxJJE5Adjk+0iFqt#$urkA zhQ*2jmcbv2T?eXUi zFE>Z20Vzy$B$f%Nj$k&fax^wENy#oF z#!CzoPEA~lVi;N9U$RO`%U7>hv&FQ3RqK0I6g5-vol%)R`!LK3X*z`JvX`q=nbL!} z1oWk^0d7+Eo(WI1Vvk*Ie;!W*gkab~?}f(?--&|wW>deWX4;4(+0m1(V!mL=gze99 zh7%~^-X^?y-yShpm{_E(Yp7%p7>9ggA4(J}(A@O3Q-8sQ_l<2IV}VE|Iiry!(^e&` zV*uWM6Nr)~6~!d-0B#cK;Fy+-hoe4?#m=Y)urM+XgRG4KFcQFZ%Vz^Zv{U`|Phik+ zHSG0+WesdRag_9aJZkqVP}V`4c%{ZNXv9Ifd1CO8 zkBjSfI`tyiy9#9NoAW>;Of*yT9L#0<#6c2c*5l)|4m@vl%E6{e575>PCbDnbv=7Y7 z1FSi>X}6#sGTu(>qwEG6V{uB!@FT&>cBFgP_eu?)-kxv`oAz)TyB-D5rV9k_c}&|3 z#+&*bgN6twbn4fya5fJhLIB8B5mAvQHu#O!cTYo!`b(#yN_HId+PWe~J`ZcySP7Yi zn1XHpRROJ0TSL%C(U$F~B88FrSy7&#b>E2_=~nExdz)0b{=jX2P!|{(ojQp3GFs4C zg7FDJ?|+ct;-sZRad6ZP-IHYBdOroE@Q_7aw><-NUT$=&6G&3DnUiQM?tglWka^4= z`jO2FM$(awy~d?RobosKcRG)*$8eju%zmX3$q)&7aF4db zRe>M2Qbr=!hzVOj)r*NRf&!t~L~;(&U!4Mq#unsvOABwzua%Y^R~bOV41UNU`mHmK zM1FQIs#N$=%Fiu16q7+00}e7R&Xe>RTs-n~7~xFol(COW2F>Q~%&yRmcQ+S79c^K= zD}Hdk;3pQsfW#8Am`dXlZd!~}JJiV(ZjoIBrn?JB=+ERGnG&;~*lu6EaEy5YR0&R^ zx>7Sh3_$#?Y4Y!^26VD-wA{+@^-6y>T9L^c?-LI&acY-Re9qXTfa9-E!%_FO$*{`t z^gr0RUPgy8kR3V)>bSEC3hckX!=G!9sIt}ra>yP4I!*?B&&KZ!%D#{) z5HMm40Fn%PcfD%5(i*8*;6*%QH^vHke_myN8Lq`DoyEy9#>gy-QpO4KM z*q997_5aL64QyGEma^sV;izJwge^VS z41%Ve08J2pMt*Y05x3GHtl4Zl1s9Mga5FkNxxr;lmXJl95Bh{Zw%KH8ahcaSo)`xw z>>Vg*%^+j1B+4C;gmzoWj;~ekzSNSY8hi{-~&i@^P7z>!L#wfy=S*kcDu z82^&g3JTc!T(#69Hgwa%(h~Vm%JuZ{WuQBuvj6=0rH&0WFsTj+UY1Wg}Y(lJ^DIQ=N_3ixk zvn6Wskd@x__k?Y%y8z;i^ECm@E1upxNdj|mZp;_}LPYS8pAmFUG)_&qDc*|t%P4p> zQFpSiVBcZ_)ZK2!!22I%>a_yPoRdT?qo*F&rbc;+9El$iYboo=G&CI8{BL82rv$Kz zQB6Nb0Wdbej>M5TFN;T@u5ZrbUI9q4>?#P3LgVeH>b(f^>6SO&Aa)NxibLddtsK<3 zyCPc>0BAP&@U`S9e=U1+>}seJJSdE8S_+NRyhA1E2x<%ay4P*9a&(-~_>eCRU_pg# zew6BJX!ByP*f{wa$A@Z1%%2zm^Vo-TdLQ{kV-3C0GMNXqR)v6D33G1UyQdaXhrAeb zhk&Y#`Z$Oh{0Op#j(4T*Yu6>wM4$Cy15F&HGjuz6AZLl~OxEh|ch3x+8Z0!LK*f0` zDmq#F{luuruR-N*x$+N3s+(Jw38~}H)X!W2lR=kb(TG1o!=w)n@V;T**Kbq4ntSNt z6+vmdA$GPzmXwd^JmN7x{&8 z31zd6FdVPI*<`)}tC@bfGn)Srn8U*x>ezgF+qp^@59&8I%?(=fS}fg5xf;W;b9sp4 zgE%hJ4asfBvF_$_s2%o`c6D``0?8DJr(^U)M_w_ELSQY^NLNB73aJ2`gMGqI)_YAk zYcRzi4hI|h-n6ZK$xscun=Fn?@6eU`|RXai@!C`;x z7R8L@w)H5mKsik6JwZw6d<7&%M_J`G|GfQLb%KgV;9NoP$E$t}=EzxkZQMgb5v&+N zVt!b-2C}RfFWH9PaCm}UT_X#mihEOYh&Zs$xyHBW+PO>{Cop!I)gV&BeTT~hWR}Wy zhTQ;pG-6H394%aoQsPulQ@b0H&YB-JGAB=5+OwCUY6jgA-mD*xL4Xo}B&Y&g#RP+_ zZ>ysP0jkM$OSfRqHcb={r}qiA@A6e(MM0rd0I#%z6hSrbD>fB}MFCyH*5>1_2W22h z4XYpYFaU{{{^bE$!56+PT*NSPhaw?M5b+TKiSfrlpeUO9Dsd1QN?B9^dVKVbkhAwO z>=>oC>#D;IrkDTCk+b0wP9K!@(RPM`;<=QQ6p1HDav~o&x)T70`sQW6(LqWYnZ8aS zlJnf_cZ#T?uaZ(`&rR@CgAObg6eP!<{fM=rY|UMyx#8>|{Ul!JnP%JT3?kqp15&g| zrTjdD8p<&?d9bFe@rXqwkymjDM_8bfhi+)?u+XT?%QegOeZ9%pi_MG3V^r92pisVG;$x zx!w+FmSH!Enf1m!jd4$-4j88%|yY8k1M zCp~Z~Yl#aMb5N|l(1IUV`=}7N$^5;!c4uMDBIBJ+NT8?ycS#q??KN_X)kSTMfQB9R zFhrXYF>6hZq2jo#OoLE`_Z_Q^?MkM$Nn6P3@-Kt_qP@+h;~CCnPcW7S<79#RHaE|b zGQVlr6J5NQ95qndCC?d?YBha=-?A>pRH_O0bR+_pmtF-ks*BBS15ho!O?*io0rmLb zCI^%QAUO>F7|$n^0vV^Gg3q_sQ%a$6 zoxjI8r+Bs$uxy~60ZRwaXBVw2d{=J2sT>Ze5Gq8q+2xa2nN!W)4jotP72F5D05~0I zZ3A7bX3^WHejFgDb%g%G4R#L=AtzCWzTynM!V1N31rywrdq0T|}37Y#{UcjGSr>!XfDe1>HS_@Jg*5dYdqv)Dx(k z{a?|i!W&R%<9jq79`*Lh(>{HL0G8A@{W&-=d76*FsA)fMv3so)&)L)2nJ5H9e|aPY z;Ph$^t^}SpP}=t3;m;+GD&Xw)$z`u)0kBpoeH*kj|HxPPN- z9p>VcU&iV*lPZ60tfb#P(~P^A-7F`mMx*yKnTL-MB0q>O*g+1PXCi>MfkT@YX{uq3d&2GOj>5- zhocoX(VWgezP~wS_v|S8N_)(FyFtbrVMn&B0-0*>6RR1aEET95v5aHR>g(@?v_#Km!%HoobM zVH2EimQql-d3Yz?G4?Xy{Q`R|?+#90O^w?U+Nc%;fUp@q1u;;>Cb4H`s?sMx6zSwK z1X9L|^AHA9T-S8SpvgibfQKjFp1gb~6ZU%$?HuR?18d^oVBBeS7vRRqJPk3$2eIQ{ z#LxG%$R%lBzGVmpNDP_^IOrfaU<6KI()z4%C*48aO&X~nxKz%HGh>Zf*XB&-LE++2KNr||YSYh1B~2~v_XeD(Jd!iADYe42slD?e zP$ocv$0D0=%KQ(B9_S89rJ>MLtNS({@{h$2^>U<>()QvW zN)Q)P#y+hd78#>1p6`ToH11kUfs|t5trO@-zH$@5xoTf|+GG%n#jKgZiKM?x2ly?( zx*}NRjSKRL(h8~T_+Y0;%;DyX_@Lty_uiqP>G?HVO=6_2N`<}li*XuAl&+FN{g`ER zeYeDJruh%yq|wL?aRu8955JQ4>=MKdMOmJjia+l7lW!;6la`1eIfb`iU%cDxJvkID zgPKT3{G&=&kXt9K#lS?KcJ1QeG%*Co8Z_o6ELxShxJ4N_Y_+fqDHh zo&ZpT`k-R}weC!{czW8N+eY{CIhpNraqu;3=6mVg1&F(bgje)u&*NXY=q7%^@US_0 zwb*&^YObn$8Z?=pmex?Idb{{jC0cqS->8X@vsxl`Og5A`9g$b5HI%Q*mE7vous`KpDz7n4!Zce1BzO(E!fQfQ)M+IA92}|8-zXL`6jbD0UpdX|WHqFx3^I03kP>c(31{q6!z{;aC7P zey>;RF23q@+SBsb@WC)D!QbGhEVvkVqCS$ovbbPUlXhGCbVay*vMYtKdx5B=0#qE! zfWg6@$u+%wbiu34a#~Vt?eq}XHU!jb4d!Ruap~*H(n!6X!4t%idd? z&mp`Ot71ipS&&BKf1xyXWo_sbdC`nxC><}0?q4-}l{>V>q`y;cl<+$hVDBoo0?uqG zt-rq>X_0LcU?l9r4eo_Sw_q*{q$7Uq_m{=T%bzuv>8-O_`QI5U6wuWysI89iI)Vsd z8T3g`@30X#`s=Ny&={q;60@>a=vG~6Fztv4a(<8EuOCy;(1@%`LtBBgDwbtq1Rn!Q zB_z=lP_;q>6j6b}nK8$y&Y&P1qGE$O1uD9_#fcsB1bgW%eiv{sn5?qBID@vv$|Wu2 zjwjNXJh+tQ3qGw6ui1|qDo`reb_fBDK_ZdoE7iAUJ61(Xq8K-i3Uo8C>zP(ef9lg_ zQwoculaxVCMe1Mr&$4oJucvsKv)DQ0ga&=6`fUoyv_;7t=i0FqcC|2zv~d~TbrF2d zCu89piP&LvBQG|~->vL&9r$?lp!#=PVv*a|P&)l3#R6sAuj47~u+Nonmp7-SmsV6uf$Vs$GQOZp6%SZ`7F>FYCpz=B&i|zV_ zo36x6$THbuMU(vw|9|2VgG<>HWS`|>4)=B(pH1R_f``l25NzB74u)R{XwWh70nxqsYIg%2$^5OOUPoDnBG$My@0 zJWeHvARDi3UP#uN--LU|@Vs&M#x*1t^G%T0u8;{iSvAT{sJ0V~&Fx_LLkVUxrrXpY zFxG9RfHCp!G-nrw__=9AKP7D-yoMdnDjJ~=$( znrfwDF)qOAOuKX?io~BnLbD$C7MI+<>6Dg}_l?=PUq?@CqMl*_-f~)wAI{(L=jMg^ zvtx_ksN=hWOj>`NS6W=Rir(3JoSTbklW&){yw{@0a2FA&AaTZ~f_(;RJ{+<;`-M)Q_~~8-Y^_oKPlVVPWS~ZIIgmDz-=T zdWFrv#AnY6lfub5Qm?)Y8H3_;YKe`8Lz9JKwoV6dB3r?)F`FN~Oe6FbPKmhK(LX&!QEygb6tGIp4;J+X5Gd#^JqN8sAL<3dT+=}3B2zJj2tw{s z^0B_5E6Z8#-T`e2oFR9wB|Nr{AZPOI2kur=@gLP>A$@I6Tv*xb6-|c%fzdW|%>q`9 z)&8PCJw5w=s3l8A?M&H(UzdmY5SltVIn0O_PjTs6x~fMMk)RdUs*A8yil#mALBn%_ zlLHg$+vW!{K4aCUcTwGjkS_p(6B$u|72sqoEQZNfjq=1)5}rJtemh0H2zGtuA3#PY zGia0hVYq@WYDbPHpLf6!gizJ4lcLvbIE>DF@$v3gw)*7g^!fHz>BN(XV9%E5#cHej z+32?j18oV_2b994Eh_0psYDUkyCuIxE_f^DlI}fq8GZld9EGobzDn4lXxB8fJ+k?9 z&5CVjHx*;#g???NF__Y5YX7`xi^*sQ!K;<4I`|Q*`(^~>8x8&hWMDA=@Px<3W&?!5 z$T^LwL7Lt_6QPmYJpf27u)ncK0mi!PHfp<6!jjJbbI#~N(fR|eymk5xhf@xJfsQ2TIFLDRO!mn*OMAWUVG-RvKmYtZO={Ck4&_*w5TKrr~t$f*tepbDog}FCGWNNtOb1tFYkN(It;L-!KONnHLM1Z*yM?$$zJzg_v`XQ?Z#YS|mV4hQ zuNlK1tHDa}GIqA$7zAP+fDaR|h1i2GWv(Sgw5=dG@&gXUR&W5j;mu6I^^ZU=Yx)!O z?HjdVog%Vb-e?d^yVt;ebdm4iBCMns2yN|7JEmfGMVw==4Q`}9TOYaUR&JMlU#;>Y zlEhdHJvQ997#@YzH$4xgWx}B*d_B4%Ddw(z)YKVqu~QbHZTMEUW?ntjR9lew0F{M< z(dR4zU|{6aN6{JOwGDxY#v3u^MZF}IMJh9qskH{>_;^rAJUw%)Z?01+5I2fHPcjlU zcCHWR4`antnA+a5ptz4+!EO3au_F7b`fnR$2b1JcPeE>PU2>m!KdyLAe%d0Svt7gN z?Ht|OP%!pO4k82L+g|=p6$5Km(G>tT&7JU2fNwfkbCQw59t^c)aUOT5T6tkYoGEd% zhhPxk;!=}C{+6!IP;sRTQgs$!J^{KWu+v(pI#mLTa*>~6pEYx)X^je5?101N)t@2+ zdIAyFp)pvUOo-SfGpb(bly&7X^##E&i9;x-v#|)XV_T6)gV07*y8NQb*mW%GJg zUrd8gM&sM4GY7e#nng%hf1Lt1{96pY6$qXH(p(k@YpFRu7~hYLJmV3BA=t@r!sguc(Mfa*pkbf(>7-tFn>Y>%^-KgW@cDT$?stX66<*N)MNdRK7H#V+j+o6^zt`GLfU(XSM zUMbLZK;s~j?mUkyHiD62#u>Fi{#Y;Vy}I%9{n3`!pAa{hDG8N-U_6`(={q>IWrMzS zZh^YEQa$*5IoSkh4}u*Sk%W2bS`fa(q@KR^>wC~HqseR083WXV>qV5Xdy9*U2u4nm z$sv#+GWmM-_oO1(A=x!1o%7Y#IlG?_V=7@*ASZIcgZgwbe=$DzImbFXz;LFeI7!oC zIbVMI0jD1$N0DM9_!13VC7WV>e%so{Ya4Z&Vo4kE-ZJ>I_i+D2Rx;nGjVrQYP)=?V zaSwNo%=}_Dj+e;p+jZ5T?wpK)lc^5GCiV-{x!45Zib$4hS?Icr(Nb#w-t}um46vUA zuo?_wLE%s(_KQ;bXgJ~D_+l0VuG6ZE1)uOr?B=Azo>&U;UJZXL1Dni{YF+iFIR~>C z#z`Uyk~+N$-w4(~1kYt~!6FpwD% z;6HdE^&5z*(q2E$UF(4%-xBmT1S_=|f`g<8U%|;YyFHvKZ^O%g3sEB7|=)`q~(SU7G#9_bDmsbh+ z(G*BuHS9)+fiF1m#zb!9vJ3dStr)i6A&aoo_R+MJ9!&XJ_yL^gD&KwEzsx8C;u2d5 z)!;0h6|L`rg_RY1sRLZ~tzt26(h$+ps@0Z?vUg@Ng=Bpl?!Z-bs}`kbFJV%OTOJ61 zN<%Ib{`%@llI~;;ONwVp|F1q%lWWT-ax7KN`w_qWT)0R?flOme=F^eq@yv>)3gnZq z<&nP@3KmdM)hFG%?mapBwFwn``-=PmJ_q)~!@&oV6ISn*&D6BBig7k+@_*)wa#$m+ z7KUrMj~V)-lw4z}hDy!ljC*b6>;@rkD`o05Rg_5W=EV5XF-WIrlcWbnjp~`59Ua># z%eh?mg&Nbrm4<^eNckDH6zpMRo^4JL8O*p)t|;)$_crY{h(~BltDIbeyZ=y>i$+X_ z7aM$LO1E6o&r~lbCRdQSo>CinFkzf*ib`~-l>?%%+1;IezrHkvAAYlo#cm5TYMUAg z74+oW8s0r+w_?jN!F7ol-NuXu(q@HynvgH^+id~#$1As%|43^HGUSXE@?I#%Oey84 z#b<;dbO*G&K9^*Zut!-~m!CnaE_~+)D|N#V^Ah|a@kvd0kS`{d9$l}Lv=X&rOw3jb zpUOb>mzNN{47DijBS3P2Zk#8~2P7V}n4_k_r=+l?#uxWUG z;cLZmcGoO+Gk#MgbwP#{@mIn)uDK7Jse0&y@w=U;*JKUO$(6BugZ>%)3%199f6^&6 z^47;2Qq_o7lSX2jE~9Ga5vd;Dhxm-EYDG~mCbtViU3^#s(hz(3tP)})_AS!W=ifu@ zZdBFi1yFOZtS#2x46wZu)wZMcb#C<72c2fwD&w1iI@~UuU@3UQh7UYfQ8-&mw) zPePQLV|tZ7kzRG@t&Vd|73i_Y)-^?BG)^=RtY52ERAq>xazYdi9G}ETiu74FWZU0BO5M+HUgluX$_s{s|=1y+OEen z&d6)qdl)j> zdVsP_@#$g6XuPZi@C4#PY0j12lU7W`zhp{#l2;^h4T{PmE|?Q&Q!YsA$zSyBW=oR& z^^=ou!LL>GtE_uNGGXfG)m;U5{r7Ay6AnH1_XfzftOq<^(#8w7Ka)0kIzl-n4&Ifq zYH$Z+fXFmmLOiG%KE){`vHqe3)LTRFwL_V9XigYu0}NRv4ykQB3k3GoL=e%L1u_b@ zA=z3*NKa5{`v&-yL5x~0yi)ajt-c{k+VSo?U0Je&>!)a^^G)If71yf+gDwu9*+Rn7 zxW)7S1+t!iu{LRBU}AExkRCxZ^f|-gqoQaz6toQpsfpoq?j;$fWB;nY0J&8&Jb&`+ z>He=Vga6l26VMYN?gEH~!E;$@Y4vaO-hk@;rIWVibaqd_`2{QXN?hzFt@!VL1gT_C2sczveR6e>0s_dI6=iS~}EhK2XxrPs#zuDv^OBhqXsrll=5xS*sNq($jJJc{ssp&?n?Rr(kucXF{ z^mST#-GK{UnE4UQqsrnhEH~OAK~+DMKZx5o?c2o~Jhc)=Gd_8p>A$@LuS1iyEhOKu!K<(BF%33?d(JwtyQ)Hy4R zFW!Cnl7S=FG)0bf65ZG6OVmaz;nkMeUlQ-YowJ#3EWC{(FT*L`6!`PDwe(%5tT zb+3W#H-A#<)T+y#_{3QTx}D$a-ybH1hf%8iw>sgb(%(GPDnLH3rOze&`(rN;Jb@QI zMxLKEKH9-W^>&;u%-*h@tl_70S=U^@aOOX%7=MG%o`_`#BS@Z0y&qTtsQ_@ECEV1* z5c9tjPJzBb%ArB_-C;VB_nE$9QxE7~9uQ!H)gy1|8vict0rlJerfGsc8gcL)7XaO1 zcgB)KvKQ2D@8CCKmq3lXm0vim6akc7%dAcQ`Q=ZYR{~s%D`g&h@9~Z1wisGJ!l+xi zoz-<`FHS0y?Tmo19|-Utj01=X?Y*vhb%!p8f}lU`_0MQz$AzNMV=s?4J6at|y}FTL zbmiqxBQ1N6Hg5k*IdJO8v}g%kcb%WcZ90(~7R(Gs?|@qs4vtkgGDCakGkE6=7z4DA zg2w)5N73%+|2PbsjCPp9Z(8CJ?M3@Qw-Y!$7^pQjF97@&Xw_lbwKUNh7X0U(N8p{m zXo-rn*FWH;|MRd(&?egJ%4X&3e}BLZ`KSGNK>O)Vhl0i*qV@g%yt2P*DgWCo`tOIW zgVxes|4b|uG5yp2i?m*S*XU>!49G42+m-$K=s#=r{^wz|*3w@8?dA*oY5xaW=RX9k zQlJB?l*ulYvQt}xE~dh#ADYTb)S$*RjwO8kgyVO=dPOG|-r);=$Q=}iFdTZ>1;MIU z`?h(U?QaX^&|Da{Od7)MNA%(_+zmM}g>ydZ8T3bk9v@8zC)0w810HUX4C z7;{z14(0wkbv-{<;&{PK2wrw> zA^eQc%|%?h98qzK6;|Rij~o}{=&7eux$cR1{O9J1KqOZH?g9o!zzqRAElZhMxC&N#e z?i0@+mq-H~$L4Y>+zJf+Kkub*4X1ZuYRTV~&RzxGlLhXK+f~|I3e0Zn-S?qEXd*-S zwFjWXAIn($NgGIr4hw5I7(>~n{P_s&*#F1$|D+i1sZhj-n3db6P zbRDm7Uro-Ay*#@6Ju&QN?hHZAEJxBodK+fqT~*Wcy$fUH?b4Ktsm@h#5T4|LLnaF9 zDB?kG>q1*jR!7P_f-FAIO+Wfkir5$Qa*`I1CgxvP@d0H)QJQkbJ>aIUj8ttEVW?#G zE?L_Xznj5U(zz+DB8cqBTErFi_^aEdeKx#uo|9GOFc);V;q9d7kZ=^W6#Zhqz}9Tc z7F*X>KK377{VnTpC+Yi3}=s z4w%58fcJlbS3O0l%jmo|pitO7MzKyfQsqn!*3r0Hoe~&cH4a9IZhE_lA-W14>ozh; z@*9(^sB(LhFKAeK=8Px~AP==GCK5&v%Y|@L7=g4^1d`nl85ygpJkT9eT=l^k3TyqM z(u=P9a;{dP3o>A3F+0O`|6yw>SJB?U^Lz@W0-l8ONp|b{SV7*S7v#tTEzPVDr&JBS zEE7Tpd`$%G7W|$I>Jtxn^GmjwOx8BsS3iFjAJGJps_JXaTjh7Deq5Hk55sKQELzT1 z_9BxgylPM5=@89y^lW{})ctreahsKD9Mtt@bw4gf;}T@A&wRD8wyGf`VZ1!BEs}M+ zONp%wkUUf|kT2n>{<(YGNe1K1)jz+Oc(X_OSPg|itp$@y2W`hatSsKjnb$nqh`R7o z9;69evQ4SACLgq9YeIu2YQ#ZR72J{<(2=HeOxT9BA&#*h$kLb>f{kz=OZaj>ZU?g* z-wJXjzNToJE{&tl8thRmzRB7oQ+H3#-m#HN$M(efn>2H5xvJy6N)LJ~ptc8EE|xhH zL}B%0$U40|r<{LG8SDzP>3qcsq03W)VlZNIk!n`U9|=j%c(~#KogE zI6du%IIYX>`iXK!#`RKva2!CiO|ZWzU!QGBBD)GOLWBH>uI88DzgNHcc!4x4L3<%oEE|jm>z;sbCaFyle$8ZFX7C zC$U+;^QN)LR{4h>W^^rRm3$TSyN2pCe26+cw zUX|_%iAO~$$?Q}F7}};Omuf<hp8qsdlQx#^;{q z#)ryL{R-LpT^xj2&zhso2d7rtX37n0yDb8(Y&|txhoF zv&B17O@q3Q9+P@pjaq&AU5v24mPDjh_GBd*B%!=&b|_-C=!C)DH(^lA%YlS06jxFi zwd1slPxu8MC=tT*q0*%3iA3=pcn(Wm+7jv^1d`S_`7kl{mimXv@L#eQ>+3v@ z<1(U6TdEZVzFUQLI0RcCrfu$v~6Sl;sQ#&Aqfuuw;gb02n_NiLy1nJK}i zH{SW6%Q1dJezmbM%pj2RssfL%8GkgO=%YIte!lasqKeLmPG-G{Q56p7*5Ck!fBZo<>t!G3#heG!u~vl zQba91$_m9pESJVntEw?thxF!PAa-yNv}WH2ZsCmD?A7$wg3I#LS(C4itW2c`XNMh6 zL#Ae)lD96lYgKQ+NWZ{BurMj-+{E)yMA$o~%R2+qpmj-34Yuy{oc98-5wLE@x)I%? zYT+h`$UUw0%3WNcC>;#L8~;r@Y=6^yna{m_9pP z-!*qizEfAy&)3u}aHsftoOyRuJFoL6*D@GB2=3lQ%BGe|`nj|FbamO-<$Cj5UXnXt zFS-D?^uRxNQD)(Hm_&Z6+YMNm7uJ~1O*LL?2Cn;QM!;W0uwl2i5C7Z4~(IoO&z z9(Vkfw()4#WY5du!AxoA_<% zps}nWLxRkXozoW;({fq#xHolauIadn)Z?1v^+FCxlQh*TsRI#u^73BaO$Iy^@jZp^ z)q&5X7SodOdQOi)Hf(vl6Gse@k#Rmw%Fv*48LkjtP}$|XF%R)Vj^3k9JZ2Q}4yo-a zsvhIp8pHh%MyScF;RiAM6)WA#-637WjSaJ|mxqXjGo3_?m|?G`)YhJBp{_xQToC$R z$DA}D(|bx=Vl>*}msxW@T9jBS5w*)%M+ zW;+B|122|i8I(_qk#fytqLND9#;l?ead?m2MGh^=>4@I(0AKQSpU}l|yM%k18bUav z@J`Q1={cN_OQ$64VBB(LKMqF44qi4T%Zd!R5s># zapz#UkO)dMJvY}o74dr7$Z(dY+>e;Bq&(k98M~3147O)C;no2>3{IFGzCY`>JrnnM zGR(LM4He_uXlmyd&9uT6W83OF$A!YcL(sg`zKF;USCDuVL}oFrqkR89hYh1`{gn zaklER6rElF)E1korT&zGZ-kY_asX_fwJWGqT{r&OA^^>ahFXQt{E`MA&aB*nWE#D5sKrzdc|{*%Sg$;qRXFoJYnYa)9l1s+Mv< zn{c-ajANBk)L;vBhg?Z%1aY+cni8usgkTP1dkfonI=k>a<)h23)XOywd{ze>!4itu zAL%MjrO3*=PJ}_$a(iylq2xwtDOKWf0rU8i%ev3VWyZN%v7=?no(%k0!xY}Z=x0Mr zq1?Ist7C=PKJwP>?D#5)gk->9M?LX&i5G579{lc7BTL=nToyS6r?1&BZk^CF0qe7B$od)hEngYBuejEar^CN$5dQx z|4l6j933L>Gnp_R_!0;^BwQ_j(FDI;1HFAo}kIa1y*i#5OXdp%p)G|A&#c*b0}O3cvZ7FfrQArpRLWT{_p!Y>4O0=Jjl zM!bKa5|!1#DpVx1HwAH~UvF7`{%F=nIiDGOYA;mD)O+8j30+!;S9!cF+yYkQ`?FEf zfsD17noZ~1*&p3D`t?@EZR8EV#Act;aKvp*;wUKaj5&vCclxL(p9_(Ps-*ChDd{3$ zD(%dusyhiuY~z&T)p1{P`U#ld_st@hv83b$S^RXkX@&h(uhux3q`X)W8|_zQwfH5< z6Rg7PZpy>l%sgwnLWBsHpA)i>(PXbkYS5X~ML%i;SK!`!L>ZAfV^dAJ&exJ;889}! z5_&TS1pNi0`;DPxC>!sQy+n=R;3G=vxB$Y~w>B;zNL$5f;19yjUX0Vk=18GzwvTL6 z+S_)EVT>;Gv9VN^q*26HwSLjjHGX5_82_qN@^6@c<5K~IPpfEy zesVlBr`raf7OBO9TKV|e?!rgfmH_v;=th8D4pp=yd@abUw~5-kaGXX)w@WigGLc++ zsx^}H!Dr25Gde`mc(XpYJzNVG6izvoj5<4{ilbO$bIImrI(=be9(UfiAzb&ZXp@0& zbp@p#UGx>&#FTTx$*pjyBpda8YG$d92oF7FovOdWUv@SO+yZC+O~Z4wGTd+to6%5n ztzY?nk;-_iZVcJfX?^M%53HYsl_`g`p{80*P##!y7_Hhx!iK>jFA7%8*Nxg zV7(Ukul&I3mVHe3H6F97@mRIYy7y_NO#JwJ(#x+HZYP8#!HP)f6+CXsil}Wb=%*^e z1Ur|1Bee)?NO5=V+2Bdq-tSBjj2s4g57XtDPsD-OOvep2fF)J!+LcV(hKYO5Rk&1T zg26pyL#NS@=t%W?Kx9U{uMP<$jAMu)FpA$04@w{`%cf;;bGwr#+au~hMHxDyi$L*e zOu6vkCKz)csh>VzsLuHe`XgJ5$x&8XeVqhS>L zu}An=dZMlT)eVNCOdq}C%~f~J_F(t;%EHRUd+Y>%ux*(*_<>vw`pQ~yk6aXb8fS92 zUmUog&Lb9u*DHlmJSVjhYZiFJ8L)F^UhA&hDFWnB*{$jB-Rp%l4K%~!qumO&a`3|b zbkp@9<8`nARD5df***fB2sHD-|Duo0#MS=n(8ZT5g>nYNQph9~!DF9J1B<`{N&%a= zVJ7ii%-Q*-lB`WeMo7KVq~*X7p=qh9O$=gfLx_baC%Lxrz1dPk945{TBo*{lozV8I7#(P~O^%GqjMbgux63m>%ntKul-55+cj8 zpTD72jquvB5MMilbSBXZ0I{a6kxv}_YgO}^DU|J^L~$-$;rPCxC3I(;6m(KWVr_56 zY~c}yw68=l{$+T7;!aoXMpL%sHm3)&9$2j~aN{P-+Fu_}DAZUED(Z5i3i#zosu9t{ z^AAoG?9YY+v(R%K9)ZaCio*}O`0(l&sYBak1fDBSG?~f|+eA$G ztx#I9<+5vFD_z)eECJx}x_|3U6x>}^VFBMrUbvj-(Yuh?JDOZfw#1l&Z496ZQ1n-@ zj-Jf+So|w!qQywivOZX5pNC)GQ=erueVK(1e7cFmGma2Pshq$i<80LgCPgIPPW>3g zUp!{=qWdJ1@6uLf85ORdUBn>>5m?tftJOp)Ek|D3y%AoAxgo@D4;>V+=kbwU&kotG z^(rA;IR!C#Cuv5Jh9ZCMwX7;78)TbLKe!9mB+q?^Q&GMhLp3e_jkWlOqRoB4PaZ=B z)S(eLq|$a#(|4gUClR5P)!~hv6v}zu%in$E_=Se%SyO@>n0|t>Dgq&_NN)U=U?LHu z&l69#BYknQgtYMKSh&|rvmsbOvu!&9oSRO@q!1-0M-C=B_ADFfmt^Oh)N(0XWi z$k7Rge6~Gc5Cxo;kd9G_I(!G}gZdFZ4GWt;!TRYW$>eu8 z4_78ac0wsnZ$&mO->3dPYz%McZ}>BkmBchDVPvxZ-n(pmk*ekhc>pHC#p%0h1xhun zsGr|gVOr9ZqpbIZ^-Jc9XogC>e^9sq4<~8)p1A1mx)iGJiBFi{`m7PE(u=>CmC2d< z6?ZQnvZJyP-VvQUdMm`1GMn;8?V4*YwvwdQ(J(EXJvkF^SDko1U4}pWyqjADLu2_G zO<3Uagz-A`m z0}h>+4xSGn^*LAg$46gat#Ij6*1etZM!b0gZaSu+(`LYM5F$)DAWFRMmxv`>Lt9U* zYVE~I4psZb^i-Jpm|S2&U) zSYs6Vs}~F1E6BsO&H`UB&bc)+_x6Qce4GTBWPBQ3c;dlcFWj(dE#&zwew?~Zg$#o5 z^X71bF6p{7@OL}|?i$em5#DY(6EYDa-XqS$#UKZ%uT`G9=v6OH$@L!MWJy_d@YIwi zO9yoqM-`IheV*S$qHL^8@(n=rZJ{p@E1ogX8t?2WC`DP0%Rk(GlQbo#UxYT#llP}%2P1JxEwNx zVU}|1^Br(0U&+PNWzCxHC4=m5g-6@AGGNsfCvG>qhC#EfL$+ryau4{OV|w<%6b|j3 z755@h#swHT4xAPnSRi~{rUE=>n@KYP-=ciXOf#MQt)vC4`x0wsi29USWR(MSZa9{s zQ*M1up7XA$`+C`+Wp$pF

    4$$tNl=lH;Iq-ECw!%wQ#eAMTuOV2(+L+4Fqs+5Ej_ zLa3>7?racX=U(c8C$W?X>LjJYw0~)Fi~ho+l{RdTw$CeGkl3E^;-*)$$pwok)b- zR(0$mxmQy{77o?Qv=?@BZ%QVRxF1WS%aCdM*;}UNa;nzS+dujedY86cbL#|5kUiJn zC`*`Gkv$kj8q$R`KYYhL^%LX8aS@(EzwXXP08g3y$cQbFJ^~JJ34}^Sl$N|KC|jTn z07|;@4k!eB4H$Ni=}@wz9^+}pHhLIoh6m5l^Q^DY+_WOrrGTV?h=d}atANdC>2XFU zT&`}5u4XHzh}}=b5VGr6ze$@s#mK&VZ)0`T8$TojnXH?^Rt#06`?Iw=XX6O9zat6M zb^6)QF;VG9)ruNvzLLWE}v+p9VO+k-(Z5JeYd?fDk3TRx(J5@%6?a#h~oiZhGOc49mvddli4!&(c zkg_EmJa|L2(gR6fs#=9hEeh!{p69j^F7xvGm!uT&Q2r1hIpQ>8U>Ote47Vl3;YGNj`s%I)>n8I z)xKD!$F8O9MbPuWw(?v9ky~XuLV9SOmh{jA5{_rQ)@ic`!e!~T|5;GBvwIp7_!~3c zf6-MbI|aCCa~CbEQoDw^%*G*4i{xt#vTTeKDjl_RJ>KnfEsf}CZfqd;o921UQ32liwu-w*n4kAWjy*rjR5ocec#doT=bu|U~ z{HA<`s52^elgkclV78=LEY)JSPJp_2Q-7oiIzOp?e3#8_wVgALelj~zOH7`a0NcxlIk!&#QJx=LsBBN zi0q1$I|3{=Khi!=hriRu*Z^>O()obV6! znkS54LX#3i5x}a|uV!kUjHEIx`*xBHsUL69Qx7x~i@w1~LqY@7L2BsHB5OdAK27*nJ?Y9O}(@if1a z6)|jy#v|~E6+f4!moo-`_Zx)|;KGkp(J zxNbwsJp#atoFr&B?)+hJIBj5qXi2rm{}62Nto7_=`X%hWzvf5qc+0v)E>@(qS z4k4_8`~;#Ll{Ahc7q0WjZ!|OJaZG;RjF6u&(eY3tteJPoR$vX$kwMLuP!-OQeOAmK z)^sh+OwMl^PELU(Ph_e`P{@cv-A`m8=fOfz&3}lK)z!bSM2G=EQp`*vC?eXUKd;)8>Dzpm0 zhVUzhL~bu&SHBhQ$dojkD3USv54Y2xmyq+vJa&|vCnYC!t!&5baEsMlm9AJ@BXr1_ z;)uVSEGy+W>l1#`g#>Plur6s=IK^kVP%l}^J+D(DcS>V?QJ+@ZC>92lD{oUe{Oi?` zAc7zb$L8854>(VX)8Enn`A3!lfvfVakj8Ug&(ljpn_`Mm;wB`a8hKws%%x=}w#5i$_39pGsPs}Dl zu5Gs=lF51CfJEx+0=w5m$Pa%LqH{a6f=43y&x05STNof{V{+z@v)QYxsZ@$Jh;#z-+7__4pxz$y49 zE1U4S4C9Hlc7*MZ7R5EgIxhUKT{V-uVgkCC_1UfKSE_93R4-{G7>4aT@i&mRcc2*b`yY>hL2P zMlJXl5H00xADlyhAAe%SAg3m)eI(nGQdBjDIt$crMFb$0=4FHdR>m6rK(}RjU`~1H z2H$)KbQNgH3b#NCOKS3Em=2a%`djyGL7Ph05?9waP5yu`)qcO`%4(xb=P%H@wc6?L zsO0#SYamW<_44m*oquGf(7nu>t(5acodLN*W?u=SAUQzsQr9Hy+Gx~fj{hRU3y!Qy zq^|u*>`8oO2m~O`05w%Qg+7nT4hZjy1^$$t_gL3ZC*aQYS-J9q8w6ffP&>Qdh>v^T#61mA&) zfz_0GV+ZHWhaGGT{7pxr_qTEdHb` z`cigxL#X7*wsGr}YQM)Jzjkp|&i!!#-tO*n3Lq`!5Z%XLYyHCnY(5itRaKlfYhba; z`5h(fE~v;i1zU7eulBCP>Fik#ZHOnf&@Ir*bZ4|>K*kiCG0?R6;mgVR!R6=o2nHs! zES8ph_+mV4X!?`O`z*&oFx=C?SfR5Eq{ortLDnF!8LGe|{;7sAhXbgV-=5&s0-a;J z?ma#^?DPW_sT!gdEgS9nEEnGEyI*A2F*=by5BH3^V;qpka)^H_MVC6*t0h13c3M@A zm99IQHVc0&0$X5^K4@TTHV4LqRBvrp+&{nGBxT1Hu1QM`1TLiBgBpnWQMxB8@64b< zpgROTZU9IKNETE){iiKJvc*Ms+puM4p8z%-CgoCS>lV3|o$A`v;y6E*+kl`kqvb$M z!YaRQkq}Yp^9TP@H2fn$LYpF6-qk{O;iem-5LXJEG?TQLoiYa61I{G}GL`;|#`gaQ zIj?_mmj2Ew+?bsMxJKzAr36-ILlYokD&h}xvVMa4;o!vOHM=&wd8spIM_)#0s)6O- z^UIU+WRV%6n-|e5beFl0OT5g|jQenajtDO_eDiyL-qzL@^{CA&35d(Q0t&80=BQm7 z|3Wvh28jE7`0xSbI-?}cxJ%(~E_vBk&sG1ml%Sa?r zdVHBvy@wStz+F{r00_c?rqf>mQ#SFVjRPPW``>-|?$jcvPX{t73LT5mO>ZC260dc1 zrmxYRF$N={ryJ$#>g|4nhW4;AC`N{Vtm4HtiBcyp8AfDe)Z}wt9)-4 zjIvcwa2rT#t{W;m?4_s$nVx+4oc7>=rB7HqaBm$XR|9O_uO=uBF)3szXWe$5mHv;s z4LHP(0#H^u0D%i+{HFD3R63~gf~pqXXRweecs?;O0H{MV2&hAvo%QeX{ngPiaNfN8 zea8;&m+_M)cibiw5({72@bZfbDevDBSD)+>6GUn0OM+W~y>`;*oy7*gu}@EEu-&3* z**aB^-;n__$}}#GQ>g`siUu`{OHGt`Gr-Y0dJ} z+xN7u9y#HlcSE)Rn+yPBY!2Bz^?on4+O42V`1E8oK;u-(+kVdS_u+3wGvq@m%aswo z+IG)7ra1(=G;4p0&3A4VwQ6$v!Z)F4U5IFu?c@9WVj#hqSO16!-@3+k;TSnG;#q-< zd4}59WvAF-PSuTK4eQ#e)n3h>^HjbXVYrQb7+ZwWM<1`J{9X<^rFAD{CczU6$hENb zAN1xmZ2)z3QzL;UjyEl*dNK>%9ldV&@`mI|nb_tFr^-#WD(7ku*z?C$Om%9KbSmJi z3guuTRZJFS+g3sYv?*~7)x{~7M*}RDxeR}k^c3OdX`Ty!rS&K^fFe>Fh#*nUfAfWP zDc}ny@&hgP2|#o#s+>OAVP557t*Y7z7+&>5w~~PfxzRIFVdxU>G+aCdP&vA+dXinB zq>~xozkSTZ?ZQlNDsz8Hbg9lQz3ez-0o?&k&5xxb0It>>4V1b0R%Go(kxv*VN)WRfvGsnI9RO1D#m&MlnhVGR<^%xpWzK@S{%c5|ftaj?Qmto+ zj!ZuKoocZ$F_|)=8yhWLL$MC#F(aAHmWHvR9(@LoA=?s!zDx9A;Y)&oG1d{trWPL^ zEeHG&8deH3WieM>&~IS`*wZ(YY0PJ{YOh5g=%Hf^dAe zp&rouRMiEA9OR}lei_%WUjASmlm21-tU){N{G+gE)4eyfQsjUXUg8-egwdDArWtL- ztzgWX*1mB4PlEm6E93Wk?^hNo&JKO@{PIUdeH+R4a9VeJv*Lt7+Rl?`DA7NpL*18{Qp=xL3UVUi$oIxjMm?D@wYA<=a`-74; zb%W*o@kSG9@d*9R=J7M!>#TBT^oLU(PSUaRBdJ7gz^eH6T0dy-_A}cV#Y88^4RrmD zJKQzqt(X>PZ;Qi9a6O8_my9p(FI0${9C^YhW*!}3WK>4dH*x-gSoP78z6}WcN8Nr z!a^1`Muz96Fjo7Er8a*knnd-~EE)24AGpAe;u8xGO5|TG>N;+);zu2e2Ihf0sIzvA z;?Rp=d8v_<$iuMt0s|kP-R6(%0#2fy0L4h}pv+&YzJCMg4CiSTy~%wtyRZd7Gv#(+ zByVm2a+qr7 zvMbjJV5$Oirwot(N)V-yk&5FS^?0g#p6~2@+tYm#X ze=H%&!4E92yR45Ce}W3o?B?`EL8ZgNQLi;$N=ZUseum5D#ZP~LVs!xr=gkQS9+9I> z)H}@Wxp5s-UumSMcJAu*^?4WxbcSgJi|N{)phig3L{*_*xG^0+v>=K^{=nGoxM+`{ zy{Qm$(j%JQf@T1Py^S+q;cAiz{O-|=P1(XzJB#C1xtj}$Kq_0DMUPzYa302u2K;Cc zqd=OArn)kRJKRrt4hpoKv@s@@Pv0E-^eR(5E-%Py&!|6L=oqV7L6)V$xt>9WR3AVB zOuM?~Xyx6p0YC%xYXBQPHr}hh(%E&x%iAgmd*gU>^7tfcW!s59Yh4KqLWYo(zN(kT zOxx;=4NummU_n!WXREcGU()&2;n-8}puA(F4Zs4ag8hKg6caP6>%1CTNCI@h?@BA; z&C@m+x6KUmZVkK(Z;Y}lI?X2XD20+=Q7QcZP1z|zebyRtbkW)j(0seprgkxPCog1@ zD=ybQiKduPErJJ#&M=xJPr@g*8bAy?cswzned37H5zD9J zNB(H6DA1s7<&N{i==iT9hQJh~^6By=b&JyjFFW&nHcJlKu`8U&**W&^hWtqp@t(L> zVtq)lv=4-|#%vitWNetYS!KFG~QO4_pnDNi6g`~rH4dr-eJF=Rn~ z_V*pIetMUAyYV_zSRXrn$vO9qxbzF4dF`MMz)HGCWGPXT_ObqHJ>Bp!t0-&Sbsym- zAWIORBWyVjSe8#LEL>(Z#NMB&+!st8#cu$~aR9y>I0=Mdm7O2k%Cj^2fe^LG2G}}i zCSy``@?@CgNyXy|=PS#EQZKMx^xkCQMGy}=Xac)KfM$0j%1Y|2B!7B&Bkp$f-d{3~ zWhFT`fB?N4x17#o8cu5{x7sHVFp>bia!H4)s@6alK(Jz!$SWS*!hpyH_y%1m@|Ht^ z00K{xBlUmj7LBdWt$u@0YV63@3f&zAwZ=RC(KE*G`lemE-9hE&jxS8>*OvYkf0FS) zsrM5=H#Yzir$*ijFfc4qfUGkz=Y-df(Z{s=xWUGR0Rl_$lC@MQ08 zc0c{V2dVXNRv`nUl+iS{q#u#rxDARdk}}HR&&@ms1cq#u9%*g%{XCCpQ2{1njoQ!I5^J9?y%! z%5%KOkJRdJST5L|r6%R)T{36PvpLLO_+l!hls?Go%$~6~ppoW4pGQiy6^=Z^;A&JrG*UJpg{u2k_HX!d7os<=4F zOkF;=3P89Xs6T=e$*oa5%TD{Cq;u)$SGzO!bx52;k{aASpPtnE%a`kIMDGJ=m-Vy6 zuP6DtXd1_|mlPeK!B<-&4zHeNkq&G~LZ3JL$+OS;L{qa90AkEC)W(q(bUi?Z>WqJc z%;tN+0I&TVhQG}3(UAT^Lasokfu^>tewN4{Ef^ZD;HjhwfvSy1u}GWn`nPaF^Xdg%!_NthhV~61OhclvYF6R5 z*0=k#_*0BF1AY(0R1E2HI;YxnFv-@JX=dnjO%1Z7E^h)tHxQgwIQ{sW<5pL{i7t%GdRHWR@Nz*!86F zi=St_Uk}6&i9gs3o^)fJ;N0juH+oe6J^ID`ulV$D&Oa)h{?do2?8Muh`2ki}!Mr*! zaQL-cpFAFM=8m2zwb4Y2IOitUMrpb z!#W$~`)!Jzt2O5HVAg8XL#rKAU`C4Vw(A3GsSE(855>fy=T<8R_0=V6eR*^9Pm1&I zu8Eklk9Y|bicCQIy+Y3f?IZvtj5oKSeuW;4znOi*N!;3XmXFf6k--P$yfi-Sg`S(s zhegcjU>yr-PuT5R&wKM)*^8KaifZ$+Hd`cT7h~Qe*qw;(&Dtv)*onQ@lXt{)iS?H0 z6^Fyen3Wp*^E}E6Y(m>ok4{(!y9={sGU-A5KBifd!?Sg|f(NZp!#4gR+To_60mS-_ z@KDp0O787FLelJ|!jo7H1MP$~w@GI--@CZboKqIB(r@de&Hav1)8h%9Fbd6j2x%MD zGOCpIBN}#GX>I+{d-T)c8P}-6;+dOUdrUgVNCIZdrz@UuGeoz1GA@eA>irO<($L>I zFdFl?U?l$(A3TwRS+4JRp5U3&u1RfAS@N~Sd6lzoYLuT=6?9=lsyJ2WkXpqD(=(&x zNFOh_oXhjnP(`2A=(%0w@j*D$bx#x3knk6IC?f=S?GJ#t-LCeFG=dU_Q0$y5g{A;cLMhXT|zp*kZXLC&^E`h zjn9Fy!^?llIJ>`{{*arUvU!Lufian;q4Cnj(R?L1izX)(4t%^qe=1WIgkN;k)PR8r zwnAW0b-qTIdgQ3f|3K1_6E>+S>HZQCvoB5Rj_{tW&SR4v-9{*%?l$SSU>(2 zvb}UCU$NYK`r6LJ#MIO7Uk>g9Ao_<7r{Fotkh~Low{HFH>>Pa8Pte@RX;S-sEhR9nghc$@6!9kqg)(wty;X7?{~c3_2|bOJtQIzoJn?%fo91P5DQma2yg*Z z`mOmcOMo8LH#DEkQvNJ;5zufs)W#x~bna<)wyL~{WEyuc(4aqD?!Z!~l-BHUU6s7Noqtp+nk~zjP9lreS)yfr z8&>8kZ2)Z>u)Q#qrQ8izkOQiTKp;mf!xe{iaoEaqTm!q}QHdrRz3R4+8<0q-@>k_> zWO@4=@C9{&03zV@An4t7dvf}Ok=GqCsg%u-XZ6m4X<;pbA1h70oH@3IyVu2d9+NQX&)@yw|0m`rN^d4Yd0M)CU zyPzv4U{oknY~x3VcL|RDxQmos!4}-XXvYlp`ZZ7o0k=j!q^h{M`&}~6d%O zGC@#QHmU9C6D=B!{4%qbDw&39dlY^F7??oJds--@?rswbdIiWw1I!~3*x{86rxyiM zQE>~=D1dBZElL};D1I93Fwt}r zYVx{Y0TlwCkz3q@(P;(gCxv`p~k$QRxei3#8E*3Fv;{p1%>by@i z)a%33<&Nf=Xd}3(J=rgP-QHp|Dhd!j`2Gxqy~eb~*edS6vl*eW*~bc;a|TA($n#P# z$Gf2kQCW^{0RF==XzOG@lnGi^y)@M z7Pb9xXrOi#m9a7WGizMV4eW9NXfK3|1qe>O2l${NJ9bA!c75jK)F*ur0c$-^KF*+_;?e8x2JB?9D`5`&koTGAF*OiwI%0{ zY2l@AiS%IX+bngXCz_tGEVnA@*l8xXKpJ6Ahu`O&q|^8y2nTx*nmQ#gMf%P|4FDc! ziJK8Dj5Li&5p7-I7;?6_N8EZZXP$PkW1taO{-$h7-r8TIqGoIit!J<4F9N8Y-6A4Y ztrRew#iesWZn^QC!3`EaU|(?9 z^y~_A=#cNjzP|$Uuft~W2ae^%Dkl#6gQ}FloR`R+EdIPui>AD0y+<2^*VLG?2bcLj zbo6G=W-S^#z+y%fV(vfF=<({wXMSg zX`cFx1##5MzT5{ZZNYssC+U`_z_P1+7@w!W+PNmRv=3JZ{rdKJ;24kwOh4_cdiHnB~u1> z7_$9Rr*0kd$z(JY)rJP3bcm0nhkR5jHAcOlCZ!6FL!1$_OMdaD!o}9`yZl-mrPeIn zrGt6!ix+lH!tF*BJ5^n6@9cpp7;LHMY$M%r?WjsKc28Vv#H+uOuvTbYyj;C3vj;&J)`6O8PT>+ z*~#_%aHN`k@Wi#jZ--e5k0M)|PTr3FehUWgxAb!k&n)>^+E(61s4%s5w^)Kr+T-me`^47dUt?`$d9lktgf{+zt1PI53V}hbB678q-5~3bN`S?^vznrvF03CTWcR|umwK6IER|AB)*u)yitcED>o zi@Sxovy)vO?m^`?{|ZZ2%-=1NEmUB0JT;;8U1fG7uG>eEFP zkJT7W6yz+@7`=N=!rmxx8{h3VmzHz$INMhb;G>+W2f6TvJ6cOm7pTA8D7w|;X~^e& z?u^kFmS!cZnp4gwlJ%2A<@>?RUt;(IeKvL3;6tC>0kBo#hLR+>tboX{f!iEI368Tp z2B=FLcHU}>*RCdH9uF4Tr z+Lh0sS8&oF2PLqu0JX|N<7cCiK@s!A@|gFPZJ4p@2y#h+_eAoeynmy*n^{ z5`xMCO2EuCh+z0&vE$u&e6`*z#2-kjac^ za428|08P`MW6Tn%$4|3m#2o0Fyw>V9ap?J`Bk%iv+I!EaCby_-6!oA-5LBx4BZ|^d zq!&>HX@a!SBPu;~Oz6!5N)u6v(hU$2dJ82q1rY%e>AefmoAi2D&Rgy~?s&(zR z7ej)OXYalCTyxE}W_O8}ZaO>qVV2>n$a6oxAsB=t%$cS;I|k(B)3C-gG4jk$kJ#P% z0paed1Md3P*9Wn;Px*}b+DC@2)bJkYXOZX1&Gh_0R(liq$7dw__0sse&5}mRG$gZg z`vg#hh(d&C(4wzToBY;aTDK)feT%7Xzh>g^jc$!Z7A`W6 z9doUHPp%^&O^u8UPmrz@u^@wyuyUf@SX+pMOINqzK)@RRfB5v>NVFw+s=Rk4c zvO549JLc~WJ~eMrACe<}7(dSyDXL>Y>e%qNX797C{8@-0#G;AdYhalWLxsFO@J1<+ z#Jjuh(S>R$HykaOC-^v+f@~Z|=@q^4nY*9>n^S z?P#eHI+eOtRR$lkJ#M2_#WD#QtGsb9G>O|)7)XQxb9m=#fV(P{YX1C??H086vr9-P zo-zUJ!AVu%5Gk1@PiU%b4`XGTa|mBz(uwAt<3V#~J8_!p6CEqZGGa*D$5lrEYfV>s zOr2*hkZs9MyiDfMPLjbCMXY@R)TD80^81Gy=H9bB9DZaYk_3|t_dfCz_XZ2JR!?ul z56%z?6`OD{E~x_ZhOFQ1X)2Wjm0TP`2J&Uc*B+cbr!^Z&MHuX#LS@ZO9Kqu&OcQX5 z=O|WTS7JIs)Cdig>8HnV6uE^1os|mr{pKuhfyxHURFBM>rd1-alDM{I{OEI47?J64tfrra& zk1@jSh@|R#F$}>0%!u8BOfHeUOS4^&HG{!@j(?iEOL)lV8l{6mG9ivs3_nrLaC-vB zg&G96iX!6;6(M7*zH-;e7{dnyCMQbwKR=_lM|sSC(^);}JdyP@LC>$N2@dc2hnc3- zQsqZrT7!NcdEt7Uf@SIx+|BA!`Q8g6JFcV5^X;@nd$neAPs;}%r_nu?$+3%>ThCa& zl9bON%*)FwB9a0Q4y~dxPe?K{x`3z5LOomW>CySM^s2FuhtX>l8~gzcLMMNn#n7?t zoTT?K=>n=t(z z96D%2W=E;RaE=ag8 zmv+azq~=MrXJ%9ztOS1N_VbgJOYE-`GKb|BxK)Z2p!ITh9^wTtBIc8FGRhi|_uFLJMNb0vLvvm|T`OL%KBaP>Oo7Rs>`vQ^r0zS`UE}9dhEORIBc?8q zdNM?mHs00if7pE;CMy@kjj4d@N!FN+2UlXi;SN)-coHG!4cOYhr&>r_%ApL+PP>$` z)_rcvv?fo>*wD;12=&0`8@YPY)W2s>r?$FIb}b$_VBLjY5o&Se1VYl@_Zy(fR<5c% zKTnW8X4?$e4ELuaW`DmlQ$x9b_C2m4a~PPJM_uY^n7YM7y&HB^YEW8XGZUgtqxXuV z`xFwRb~l!I3eCk|Iv*p}##XAn>ahw4T|IN*+NYqbA*k^@Z7q>=uGz6>j%*AF%8b|; zT|nhkZ<<(%f-$n+$wNVdTs}SA466olapF4vuOyEV;MSCoOKEYwY5JI_p;-n)Ox&Fo zXIHiq=+jL|s@x{1Id|N_f_iTSv0V zQSpDN*PO@o^cfi$G9O-KTfr445qdtZRJk#qipA+<=~#R3Zzvt&6(Inp4G14C^U@P< ziJ$f(RH(`g;D3#-btf0;e$2;o?*mJi&%bdv@m4i7)1%USa&PpghM8$ErWuUKGC9U0 z_Z& zndh;cq3I385%Rpz=6W8gc4B#+Rtb|pa*r&K5zA{`W}s;pvF86E(Rp}0W#;~MW;2(k zH;JeWW+5r>b=!?T$2^s=?1v^vc`s1jELqf|jJJr6hM|ucvyI13x%Y&?kpsuUxsL41 zSv;+--Z$mzkN!+mdcu9w7<2WLlismjl(X6Gkdr$1!2%P2& zLt6L1`M*1uW<7g#oZGqtBjkhsz?L(dE>#Vrg_+7e9WFpsVMGg2g*U>Bh^Y4S92%S{ zHDl{`4FzdN(s&kLo20Wst?dO*C+#|Mc5U9(-jl>zvZLOasc`MIWxP@$M*T9q8KY+q zs(-<+0^D30{l1r)!}dW0x#z8QF^87j&($hfAbXGMr8BjjzV)kNB;$DM>2}H&d04Z{ zo6p4Z@8g}<`o1?_$qt?%x*3#Oi}$?l=Pwz5S8M*PEi8SNp!2S^3(eymb*WR}2^fFrriJnI zsIE=iiF~_5ZCz5n7M^=qt3iDzCbVNuLqMGnBCM<2vdetmDouYU_LkL?cdr?~bsA9@ zR^#qlVZRSoy?42!rX-%KYrMBwMCFjwvCS6JU0Zi3)2^hE8ttTu5t9B+HHnC4`T&-E zj`1c*ID5v!=|$!|-l=na_RZ=I#Sx4#LT_&E6F(BORhtdy!GYyU{NvMfj3+S=ct-V} z%0K4!sLemd`!v=qivQ_J+^y~Mu!M>p&L2Vrchf8n8yK}l5~GWGer9U654n_fCs!Wt zXVqk2K7Bfew<;oZHyfFYG#z)|biZX6syo;DgHu8v&*flGQYp;-@f!Prz$XDjs!5hm zU^~zlPs=y>nkxqQBNDz+5fJ6&k==o1b1QtRPY!l`j%)0+$&CmuJ}Y+=bh=m{ohjO` zskRPw07E|-$xF;E%R-mNPdm-d_f z{d-;jEX&%>cr-dbmE?4QDO+O=MQ8MrB;ON7^vBZ4wxM_*U@pNrmxqT37#n@(s{#V{ zFln-N@4n+FknK%0%zbP6FK+j^=7Za}pVoYIUmCKje?m5f!OaK=E@?lj8FsLpENtW~ z<~wGh-U2l!Z!p|yb_8pjU4H#TwUbH|skA@_rml*Aa>UatKxtJ_L_|bT5bP?`y=6%S zKrNb((1Zl!QCAB@HI>mCKP3Cb*8J{|t_0@ZY99|~yIX}RKiF3VPIGL_>|^L$R`1dY z8(pGGr0Z?)=dVjGj*f{rI9eP&vPY;KHmt!nd+plT^s!G}pH9$@otFZE9QdH_7AL`Y{7o+Y9-+dzakknbkxOp=7o?K# zinN?^7ixCx^_S;$v$L|Z9gQim`CTUCEG$a1&1vd>5_Tw5k@4FH)cIpREer?}E~~d_ z7WKVN_t3Iph~|cY^4&54d4~WEjj)949Royr@C21~8p0ossm0;$_CE8Uv{rQ%4WUD% zW|ao!;&4=hW){eC?s_-(XLbI@qfeQ{rRk~N^(6#unDJX!@~1|xUnxFWt}1NugG7R*ud+Xu~mzCeX1m{1E}Yk$X3K^vk&F zpSp2JSwnrTFQK}(o~s{Y(~|i9b|>H!ouB@(!3l$;R+=gH*euodA1_+hTKL%)i)Vj? zd_`Q3&{5bn4{b7j)nxnLwz1^QV}vC-AMu;}^rEPVcBT&VeOtqh0b`>l2y1k7&z!)* z37IPbIfS}cr@HFYF=*9|Htq9cRPqAGNz7$ zr9wV$5-zE{);BO1u(?jI7D!2X9`1W3ObG$;0B$R3i)97B|Ii54o|mV2?qb3BJmGp3 z^$Xd`-SmfCCO7Jw&PYaxe^(ABq{KWanWuh8cR)M#5tI_in>B#>%001_m8Kz3wAVFa zL5KVt8p=`9d5oxYW3~EQLtEd>(kL4LI5!c@a*di`!~Kb2>gw&y{7%v-vjY5u!#a)D zI6ldBL0;t>7R4Wg-p%bGM)7xd^=O6JXNe-*ihgQ`w#dBgK*T#&4LE27C5@Tl*K%26 z^OU3Wycc6qLbDRrCk%qxtcUX$80X#62l9#TH+01er@};4YOKz_C5~FK46M@c1bVHJ};;m|K^o7 z-*c{r9%U2rR$bYc$0t5b@9Hpbyv0%3bkTJbp)$=Wv)l8Z;n__!TZ`mM-}S@Ju|3{d5aX4i&y;^sXeDU$<)@R`8(lsqzjZu|SE3Hw)8_;-7P4=)KTN z%n<91f3&B6IqebuZL8hZbl1Gri#xA5`PFyo-AzvO_cy%L%x55uV)->`I=fJX5!r!j zys7x^Z2V};+bJrpR~=o_<9Ka*V!4RH6uz=fSQjgfX#GR%W3`(TWdwha z=-b7DIkY8;g0%yw-z6BRbtM>`G+T|nWc}S(|1&l_2OagOC!*(lcph~>H!5&hhNz@7 z9}vga_v$N&*Gy@!PNK|65Ag~Y`x%?{?e}>hy1b}n{m@ad_zbsw6C*J*GlznTzXSRH zxw&!NQwlv1`Qz1W^c$qni(aaBV`ClHs7E^3x^@CGR6%l(Fs!Vr|5}&>Ykx_3k-NU( zodmCPFO6{WH(}#0YjM$GPh`JR249x-i+(Xl)bm1tt0{TPB@fXdb{oMV(t|0u#f*$- zJ*@ShxN!|#u!PaaMO%9YD?JRVHY{EEuds!`T9}AJ>VidS+^F2{$A%p`TCJ^|AA0P@ zXVf!a=*OW#rUz_Sw{)7*@Ieu|c3(}xV?#T>s0%*GKg~PNI>7f`O1}mrf~1y^`_)|1Wmu20b7BXFd8swplJ+ zitP`74qcN+xvLhJ#K&hZW>6mVG^zPrpjCc%bIG`@Ts1jrnJ=?B{Ks(vYpGy_;ss5; z$%997GG?kWl%Fn1Zr-^VxLWY1q*m~!m%Pj@&MGD59lf6~?kxSHSYpk&!r1Mw^fT^! z?{3(9mA*;3Y2Z_5dNYl&eM0zc7=i;yct3Nf-Cw8iD1>#)IKhw0gmG4bgm;u4X(G1ec_hn$8HKdkL{RKnN0r{ zMW7^t4K>E@Yq0jT?S%`BGlmkwW4_g5);f$#5hSgcEF#m7kw|P0_QIT4ZG-aUHF<}+ zk1>Au(;oFD_`HAD;-uGRjhTxPEeD4#joxYh(I!Jhv5`=_aGBec54^Y9_=c~U4k;gJ z85SPDiJj)lWK9)c6N-F&GE1yF#&OZ?GR8BC`>fJ=$Dg(wm)a*-G6=0Tyt!^aCI_`& zp6m`%Hs+cZ^wKY3T+jfxrSn#@ou2OYYYkF&@!%nHQ810=btzxsw#Pg01 zw?DHq@#;mmMx|@i4@(FQ*yQRmv-n#Z{^C3~Ha^C|{wb{xisea{z`yWD*g%<4ZywTK zXLfnn8LXtUvx}W&;YKu2INC490Te6gklW*TyFNERj~PzeFMj77_;PfaSeN3nBpnv~ z02Df(KYw0nDcSM&6|M(EK=Ia{yB;w;ot=~1A)xDN3Zl#M2HRL+Iy@f#lQJ>vjNvM1 zi7NeBtesJRGddiBaaV~eI9fZ@zR8@2Az?rIw?1{-kywkVajqty!=>g)_S-bpbi9+! z*nhf#wT{FT1 zL03#RYvc|eeaQc7@lZxrd71W`(|2emKv#7y<#7!`a{KHej@Cmkt9 z<1b{pxDRfh#ET{Lb}F)7Yw1=qb8}!N@GhwJ!Vghp&R0|*P>%l*IhPXNfI+!@3>+Bh z@3(t|$=U5!|9j_*9m~}jo%XS#vFB$2w`QHJ+8Xf@#%%XKl62@Bn>amq4uz_b@jlWAiU~Ca1{Ovy%@()Esip2k^OoNIF zh9Z*btW=d- zwt+GEP0DIOiJ^X;x$e+{8CsKIR}Rse`fTRmqKFfye19 z*C)PoP!_sVEkb+v5|Pw(QquWC@8@@!-|D9=xdOgERF4Q<_&U?K0ah^ti|!_K-_;W%lbE!EI?dPntJdu z;7nGqxj9{v=gpfJuiB>3RQv9%xws-TY_o{PgZ}x|)yP@t0Fj=~RFti)_Mn;XGkjl5 zoCu@=rdQ1v^Gds?0@S>ss5rka*6Q^%vHE05de58~i<&%kYUNvBM66Ty0{af^0aMb< z5Fv~$sY23uB&V3*`e*IEgrmtWg&(A=}E#shM|gpqZ+@> zFH}e4FS*_dUh)M-D8zD`s zppT7ZuN_o;i;CYY&b(|b3BS_{%$6Bm$~}@}u?kM6%SUX4jZu8~u(?Y5bvb85W7a!J zGd?CPKI0muvTLlu%*TfPmE*;7_IyvS=@$4{xuel%XlVx;B`38x;3w zCk?cwWY$~=_2m{J*=Q)u{WZhOfu~NO%`94E> z;<&)c)xsI7unaEQAw$HvsT;1t-$YVmN$asD7@ZA z*xz!%=6MX>Ze2d^m7g3xDzZ6W!#|@NJF8<;ozCdG+D^^oK(O>-*OS9EKrx`3QD=0( z{}=Z+=aQGLVl>W+$7d7VWxL8%T@MepYVEURUBW^o<}Z|5e15c3M=hds;tDp2$L93F z0kNnd0H@ZN;c}L4Fl0?lQtK;+7;Nl&-&<}omk2Tk8t;Wd2P$jO zs~&dSh7=gr&b~gpgRsh56_)7Mn?c!$?nwN1;l>q#A-9?{-<^UH)*bk5W?{ean*LY? zhd`xPiL4)SIi(d{QPCYj98jx|o^8IwU?=hnmeE(RI2sqE1}5Pd8d6dUTC<0id@| zRKchN9)C~h0uKKoJj%}D_C`q9@86Z)w&KAmX>`L2a%o!P{5rYB2StvVcoTdDDu$K7 zhHPOEl}N-@0eZr^;n)j*httY(E)E-vddB>EB{jNzCdjK&79q<9Bhnb%!tZY z-oI_6r+j1gvQ521W66P*Sa0+93R5o=Jt3=%iuCc~7$p@>alYypM4TH*RdFMWK6>ef zicd;&o5w$EB@TTjsO(+mx!Nb1Q|TB=&rlgXtzm1}3YoedpRE*=YRwyoiH^5n8-BsF zcgIZE()U?u{i~o$5@X6<(dOO8KEB9JTan?6i@C3PANtt}6~>x&zjb}~%6mk_%6?ol zLjo&=4dz2)jJviXiTyU`1UmEMPOF4<2t6kbHFpgG6^f1K?Vn`&bm{zZAqA%>lKz*R z%3LC<7)|OX=>Hy`!3z1&WM-eLWIad8fH;|yJiPFtd6mahBB^1x>cw19OLXFbuXD?Q za$rJKL0$cs+4(wjaRjp3jxfV5lK!A$DEwMYW zN)?=re=Ci%n<#H_H@Cmv9cdM0pGLfW!Y6CKoM>NrRwpS$rkm0uNm-1DW%PyVr~(1s zQC#swp@lN;vk6!w*C-{aDo2q5EY{(?)oZF=-5Pe9)0OtRMzgUOSucL269?pv-3iXX zGbK!&s;HCJDEMlNnrv>>Fsdg1ZGJlAti~7pk#6de_ZSTBn~;_tNQx+!UPcuUq|%vL zzIVfwxp^-}KThKjye$O2+ro3#YnP^iLOJTxb^H63PVsH1Y+i%=~J47qNeZi-KVhB^2819-owaQzcaX@#E)) zWB0E6DpOK$+ViY3#=L$_tGTt%Z&6$SID~@Yml%t=P9c{g#7kR4!`>uWk8Qz=*Th#( z(^7oWFBAQk-PERVG{kd^V&&Z8U|Bv6hs(_T4doiSVG5k!O|rTeUh14FV-yr}k3m;2 zC?Ej-KNkpPWo0CiiOOkO28uuj^0g*Q(oF>49uVOn+3CsVmO!JqN4*Sdr5d|$_weDv zrnfxs8HZ2DK|8rH`~U^TCk6~$z<}p_dU_iE``6ePb82e?;O_+!F2j?WF;@jGA3nSlw9Py$ z@Wy{Uqa&BQrKh6q7R7bBa0*rOQ%8Vttd3p18+eI9YI8eH z+=DF)%qh76arrE!*bsrhkl}5q#8idnDmHeY)G=YIUEk1u4{p;EJH55!y(Qp+k>dRA zOp-O+tq8JB;9#q2p5UnWd@k&1d#xa}0ta6|H|H z5(rFHUVm_+Lr`!77iQGH3YTAr_XY}rQH>ueOa8$Jkk;zH1~RSy7yAgGI*zCTM2pBI z7zBVke3os^w}h$Z1_BMIj=0()BW+Nlk4=eqQHP+>FAOy`qprhjOEw~m4BY@5MQ zz?AhhFHbmQdvNbrPaZOxl8udx(cl&>yVS#CZvRB^k-gKeZ{g)t(WAeJmZmezGXqJK z^Zr9m5TAD0mB#$(&UoAHmRpn?i%G_l#q|fXcu$ zBTJDFmDy(|e#w~j(`EJLWf=$lg~-b+HiudkLW>X#%kz9*=q!G8M(Ey-Fy`r(Qk1}RVTCq_5 zE@soA6yzy#8kVst_uDHCyUKvLNRmdcnlXl8)$cJo^@iOnj=>2a!@LcM<~{0q%1o_L zN4?R^B*ZB3-9S1^D})rJRra~FIT$fm?a_AvOV?%1+@wcbV_0}oV(av|l|NRcdVJ!v z{jG9ts+T(SJOj-nRnBHECqWBS2_NH)3Yjm;q1i141|A|ztq+uFG(5^B-tB%?UPB)b zY>FN63X_}UjlVf&WcNtI^jfpseFWC(4&{CB{zi6+PnXB(*(ri&mW20rszXDmh6i?z z#QXEtljOYIU{l1>LEKeFcbU;F@y4MOqO+4~^9uk=(Da1`m zgro7fxr?*2u2E+CM5iCr?yA>|B(vLd6%W3RKG3P&gW(qo3yFOJ5~xJ{y@+?V)eec} zs+_R*nwLt%a&vH_0Y}x!i)r$k{U2V5JHYzt)B{G(qKSei8rh8hA*CL&X;04?o6F8| zvObYb!r`abB)iVa<+rZik5Sy?4$Oe})Jte%=3Y$42viaw50Q zU#AO*N>iUrp~Sxd?!ZJU`VYi15) z-o%m;TlztJsV}Xn_>$>qYe$cbz`KguR-X2K%`pOweEDPl99vn5m<#{Yp&?SC{g0m! z6UPT6Z)AJ2lIUw`iom9N2+wztz32Ft<1No-VxhrttJ?iK$#wGU(hI-gw0~L>r>&VU z{#H2475}o-_^JU0LtHw=FCYLr+MeUV$|X(+#LWS)!k{hs_wQia{CtXQePe?|8qiA& zm;8MDn}Q7P&7=T|j2S4qp+A1QK-*#=`#-`QRdM9N^j_Vw>Xt>=K?Sxmkkbl@h?I#? zTecW`8XCgGi3vh{gW{?Xd&dSg@1H+@q%S29^&}MgtQCWNkftkcMF&u0(H`!wOc;)Ha)BCGIsP$dK>U=bA3Hg2BW@p5)OF* zt;lv8VptJx1GbG2@vKdihN=SZMm2Y-mIE~ft>TLbnmyNC!y?vgxpa=by7!I6rsS&& z-F4~6|9Xl+Fv0GgVMKz2W3$)&Z0d3-%8{G#+T|;-i;IiULF2Z1Z?-OyOJM|X2WH+N zZ0;+@#l@xN+bH5Z5}oBp8PLtWD|l!93U%eXBQSjy;y0OUZf-_rU)g{6wZV`B^G!(_ zhNP6-&GLYU59GvFWJIi>F|-!bA1=3Z-YHj|*!i8(EB5>E>#SG#^(HSjTTFgY4h}l< zKpfIv)hbuzwn4VP`x_HS&BH(w@cizF?k1)ml7U3k?Hg1gRV#{L2ab74UHKJ$<7AqA zh$TDu5_$=j5LIVPKdddrqZ%50hR@7T8=#jBkx0k5_bI+>A;QCGww!rs1&_o19n#0) ziYJ+jZy^{z_!H!TMnikd6!haeI5?Qe?FV=cJETZIx!aqM!C;zG9h!4aqA?hdEAsDw zcIhjO!tiUEpPx^IvehbRdO_`Hn}>YMKLyipOso(#)FzmCtpyJz(JWe7B}apo>{2eD zJiaN}IXM|Phw;-Pqq9dK;tbxWcu%zN&59xsR^)486VKRR3OJZI7x#lvBRS_Z!hONS zoAoLv<8*@4OFz0|AEmuTzW#OdHU>&vt#cjv38?_$TD8*Wp&D#wW0T3{PvyHa6*sV? zws{eNjUx)RmQ6TZn4R^4%fvB{>r>CQ(eZ%2!BN5I-@z|6jQ9C;s0QWA&xoV&8z%pK zF*F>+Qw27LY#uB{)m~*iv`*H+ma8h34Usat#S=N?#d?oUW)4+)+z;9o(dIpOu#LBk zLMx*})&x>J_9t}4lSSvP`vy`818D{oUZ>4XR2}~a^;#7kXl2zsy2=Y)3ZHo*%%&2% zl}p?oWh(2WeZdE@AWTWNx%EBM=?;&Q6RUH-6sW~so#P7XRCw*Vx9NCvLGhR}F|{-< zAxXQ@xP<9T-Hx@wfDC>FhLD)#Im_fWfKI(DfIqfefX&UvdznE z;e-UvL5eGCXy0q4^}#-9?|gl4Z;>9|@#{Z%Z9H?%$xd%KAd=hz0^SI&U4H9F4xYiH z2mMjZ6r3UUy?NbTT`q#&mw^+A6-LUa9sL2*R0_^3HQ0X#?fr`m|AmRSnt)yV_bXnn ze?cmI%@Y|H{_ooY-!@+T&+%&i>)T-Cl3%I6$W>_aD_RcXH~9rW`M)C4f4}*^|IYvW zpZ)(nv%n4mLqm_1vD?gE-_0uBb0JC7V?HYG4DOkBKM#-g;bnOIk%Y#@5ve-?0Y?k{ z#ocT}a+w@*p4##^K=}!m8tF3med^>?s}cF+Nihx>yi>I71q`0BX%KB)Jv~nSMGcT1 zQBdg7ot2^pSA=}yP!Q@6alygCFm?yV1GVvJ;);rjR5p_0ulqV=VzG+y#Sn)fu^Ab8 z0O<||#XWiQUSgO6B>dze`4`TO|Ib}E)@OLt+s6k25hD}jeiiw?->%KUthl*8}l-}wbqCSgBkibrR3b#?LP z*Z~)-VX5eCM4c7tqL)P&Cnfl{QUg}$_&V!)yw#Z(ymxVcR3j^;g9JCXYcDU@SZ zcp^wF;4zXvRc2Aq8j!7!Js1;F2oH}fkgV?R?!u+ws zxof=%J~Y~Gq3?Q-xMuSORLDL3vqxLCN8Qh;nFI^mN|;KQ{Ozs9+U6G*yD9WYUqjY- zGuNC!%D_%{m(RrD3Dlg-baWo^QMQ!Pqz9f%Si`p|fP8-=w{;_j1u`eYi#2#@`0$&b zAar~x-=`fbOdpisfKI~I|Ah4&ph936K3nPeR>kbH>)5BKaACnGuJo*PN+*^p=jPeo z)=~e=+KE0jI5f1tt#%RhJS;o}6|VlR|6#6m*8m6_c$LeVnTQ$DwmNCaA#{vFePdt0 z-W`5esoK$`)9toAB9Bp)k+(cxAzr&w8{%!`ASBAvHMD-MAVbtZ0+rmO8f4qRSP=ax zv?v05ra3mMQ)$Xn-_KsB?dwP9Oz}(2I3??IN{fgUJsXv?cC>8&eeDfpacu*rT0){6~ow}baXUDbDw2~ii zkWC`(0<+yOowjxs_+Q82o*ru*5%ofA@}L*tWNl>{8X7=WKnGI<639^HP}|gWUa=mX zpKwsPUsF>9WX7+clb6c-pF;C?g?8%0h!ZDHG)8jeXJ`Kr37J_~K>wkth^_Lh)2OAJ zfYxBtK17j4EvdIo1p{M>75IL6dHKAeTi0oB0^$b_#A(1W3WvKQdFi7Txy3Z>FK8^8 zR;*u$iXgQ-;JoN`*I#+l#nd#xX)i4}2pkxtnW?Jw*IG=PoqsM&4_EsbcFypr4ZsgU z%wi^9JwRWo^le3!yL=4$t7IcPE6dEXoaMg4K}pP*RgNsI9qu>;&Fy-SP)#YOwM*^a z4N+Y$e3f|Q(3Yp;kq#h68a+d9c2+o8*AtMaVs5n-NnYvT>eN<$^5hQ;SD9P>bca$w z zCSSGmx|m4ogRkxV{azAY(zdpW&07wuVlaLaBJf#q1P*iJTZZl@sklV0unRHJ(0i7a z)_-gGUv@4?_<`B}lT%aZmdhQBI?boJd{gJVI?#6(1|5?(-H-}ny@E@WKz zIA|&bN>qSIu8xv0Ey~9sy?6ci1zH%gvaF3d?B6KP^-$UMbfyy8E&RD!g8)+c+V@%~o# z^XJdo@4MmYyBNncE1l}Nyv%g)R@(oq~TkbpZ zRSHKJa5?UfvHcw5!uY8FUTe^r4?M3l8~V`Fva;m?VoL+HxHG60;iEtz!7t^uf8+H^ zqxa>?edxZjJ&{pM=z@r%cv?KIs7Q49jAQ?L<6ZIxz^srz06@^<%uJQ72#(VkGkGJU zs5x3QhW82q{>sYA=rZY(A~oAs+{VU+L6MV4Z;mnj@M|p&NZn+gOouzoc0a_tX3cpW z4|6A%-lah4J&tcjDtL|exj|-G8M#zR${q!RNeF9)L?Z9pdES!L2XJ4e0*CwRQ53^o z{n>K1BO@s(iS)Eg?qAS6KFQ{IzME*%#+i^EeR^RWx(9@ei@x;c;rLAuh>fpo&PKtH z<2|4R4QCZjD1j$db4uUPP$g39OR_5@c)M5CDO=2|JXc{}L417t{z+Y-%{tn+OCPPx z%3W@^{uHzi#-X0$HeZkjC+pFZcjPnqAD%D+47Sd!!r!T;n!|k_7|bj@1#SHh2@g56 ziuY^>&oIiQ3A}G&sJI5h6gg>!r3dXAMdy()DYC+fsK%^WwmIN8W`y4RTpFofxb-^&e$e`raX9;z+Z8DE}`#qgXKl{i7);SDiqw z$_JEGr=P!vheu7EHt12Uz9;Q=9RhLgsO3L$0e*}p^ge*#&@~t~QT{VULuJh>J5k{Y z%qtG0s{>FRSqX`95?l?SiJWDYPpz#rmwy7&W8ikvJ$e>g>I@6N{_Yb5QLrN>z%wDHjrh^lL-Fhu?rV2NCh13!@wOMZ*K-bkvX}!eo)fp=jRtB<9KyuSY+}G ofVu$xzhC_yL;R4v7V|@{N?|(l#e6I|mQkoFYboU^K79870CP>mtN;K2 diff --git a/docs/reference/figures/fa-icon-8fddca93e3a89fee152146540f9de78a.svg b/docs/reference/figures/fa-icon-8fddca93e3a89fee152146540f9de78a.svg deleted file mode 100644 index 291427c9..00000000 --- a/docs/reference/figures/fa-icon-8fddca93e3a89fee152146540f9de78a.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/reference/figures/fa-icon-9b00320707d42527dde67262afb33ded.svg b/docs/reference/figures/fa-icon-9b00320707d42527dde67262afb33ded.svg deleted file mode 100644 index 4c9b3ff4..00000000 --- a/docs/reference/figures/fa-icon-9b00320707d42527dde67262afb33ded.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/reference/figures/fa-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg b/docs/reference/figures/fa-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg deleted file mode 100644 index 906893ea..00000000 --- a/docs/reference/figures/fa-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/reference/figures/logo.png b/docs/reference/figures/logo.png deleted file mode 100644 index b439544c208f92451fcc8533737ca14718fbbc82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114626 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

    mtXyJleTfse)|JeR+Hav2pO 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 $T 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 a=)A*jBvZpEQ*`kGi0|p@=d#Wzp$PzJ8c{6( diff --git a/docs/reference/figures/pressure-1.png b/docs/reference/figures/pressure-1.png deleted file mode 100644 index 7507aa939493f478f99ed29ced685be57e0394bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7331 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 CKMmRd diff --git a/docs/reference/figures/xportr_rev.png b/docs/reference/figures/xportr_rev.png deleted file mode 100644 index abaf6ca1f8d2f02379a8f72816bb0f44a29b6811..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127643 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

    ap119qg^NJXF08J+fV;Kw~=FP0iRRd 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%0DDE=Aza(v9D z+V3>|T_5qg)UhGnk4Ig9yK$<68YX*q!!+~5}9m-#fPi`t0*+dE&dQ^CTc!`vdF0Ya1MqbtCxvP zfeJWjKM0Lz9|A=}5U1Vi5_X)#3m2@!s4p9w4z?rfr_gO!on9TRv#3UCEZS5qeq3@Q zC?g(r)Xxd8!H2joE{j4ao7>yl$Cli^UN*aYa}#Cf-G+PuV#t4*VfNqGG~)4=ETPX{ zX=^&Lq>{8}{sm{5VqZI<(`($$p_;=)6Dr^jKDx?r>?hV3Ug}^ZOxwa~Wd zRz0qwD-tibMx^U>`~LwBLGiw@@em8w-fQ6M`wUKV=wiq38%|{Bv_nIAS)!i8paBsP zk&mH_+wt#9yK}kQcl?1|O1RHW0l9=!I{toE?&vR3FF0Vxz-6xj-t-a+7hG>(SCOO6 z-DrJ(tE?L$3Ic-$L>@u_>Dd(Cngx_CegF~mBGUj;F^NoEVpUEclaNTqfowt`9hb-? zfJ_|7CV{=%cKm^KV(t~^Gs55LXGGMiUbNQ0%@+b^ULjGnd46}BTuOHfh?Xw~4QN?Q z$0SB_z`lb(U(%i9+pmlg_N659NnoEriCh90NCCODK+I^|3|NkXx+PGzo!M&55;aSp zZVS{L2ZgGDWxJJ}3sqoO5!f{Yj1~nR-RTxu8ZQdeSbmpQfOK3UVFIZbkdC|a?Nc#{ zRNS49Kag^(u$u;82no{wVg_1%HQ;_V4Zsv`;WyI&3QFCC@c&bP|r!nB!;u@T;bs? zFp?D*%19ixT4FdOFqn}T$w>@n1u`8Ae6^bY+bm`X#1cTdsgTqhzZ69Ybq?}W*}-Vh zz|I+o(V~IT8Hq=B3XIMGyJmkjR+1>y#j-EBWEwyw?xuOCViJx794Sz<0LzhZ;09tG z2w0Z;`>xTkwsD{FH0h9SpBJbHQ++YDpLZICzzSbbtq*19lYLI)k&!*y@ zvjsutihCwzmw)U_0jW4};jxX^o~b&30CI`ot_>F+Yvb}eO_b~Gq;`|7&jA-5ue%jQ z%M*hJ6e=NrxZ#dIX5zrAyg)i8kxsbZXA%OLxI{VujAYz2;LPr{VS#i)A{7I2NrBOkn(d%a0iK!=m?{BN6=1UL{+lWTlNEuf zGVs*6`@5+!B2AMN0!SDV*(8ul2xOCT_N#+@0@$n1&E&|<&HYXR`J_ND39QXa59N)8JMoj?w{Fx^!yBi4s#3u$L%Mv z@1Vr~L%@DRZZ^*PJTQ=zNSNLZIk4wBWwiN96rH-&2s&D}0|$U@3)m8nQow@5y1vG- z`}oer|CP!iEuFcaHI8}pdeP|g$`=1;&)1pzd4C$%Z_qtAo*b2!tjzvWSz}S{P|vAZ z5_MakP<1==Rm)9>pZj^$a;Me2`ACWHJS6bD=Np~$swGji1ZJv@@8|wc%?9e08-#TW z`n5i9Z#d7vi`MRLAwKZk`JUhNE42C4n1JQjyR-TRGQc0l+HIp%aNmDB=Nx749yGY; zX#*F2-M|4u6035+>YT*tJg_M5b)zi=KWtN0-GK; zP`7Nv+Xk=GxpqP<(kBF)$J%(EeAE*K)LFmE)7&I3CotKI|k~ugypz5 zleX-vDT{lNNuV820N{~=)gfb_`-SQ+OTxmi8cy4$g=*#hO7gSum&YB`uL3)CEea&5N5 zX-m{>pi*h*`T3-1Yp~(7RYPe>3i;zjc2~%Kcfw9z565wA3wu={QmC> zJg_ae?SJ-c8$&sPKRZa`leZe!vvb`!ldhe7y773Qq2MooH3xWhQsRIiw`~Uv2YcO_ zDGOxc?&Dn2ZU2+w0#A+ut@nq4gGU^^cpY%$T8Rz&059F!zfDK%CGq1&c)jc4VupZW0ETcs{tV&H^A(T~0AeO!2!XhX*%5uW09Y>R z762R0xT6&5xSIvgp8{6pfHirETynlQHQo+myOBr=TY9!w+nPME=g6Ja#7zfDLm*)~ z$Rypl`H7f7%yf`21d=9@h)X0*Z$NG#diQ7n9=hcc2S@MS`ga@u!@!f{t)^QAaqadGO6@n;{L^a9+m=?Z zvABJ5&Aq^d$GMLO(-ITq=#Kx@xkfejZBxN+cU|6nz4d*;cj~uI2^_t*+`SzGt%5X5 zv*|Gd2h66DAF|4=d>_<4+ExHo_qmVP=I6J69v?OE_$ct5-!y*qx+5I?=Q*vPKh*ZK zgmik#^)cLVzJr$^6x?e*UkL8Ch)_pC&r+}!csHsxlg6snD{g^EDU zF_aYd)*bQ7Ue)M|jTeEjQn10+bgcanWL1qT!)%*$uzsNNx0+^n+lrZuePGFG|K@bO z@wi+M_O&}4T1!%>H0~8l)18J^s0O?5iq+=t;{pC1GZhDOJEkwW_}3XoxBp!-#AB8g zPfFlD-!kx>i)Oalp1!Zi6_5cPs`O`>7}#kxefW?)xAqHGD2>H?*zgHm0fTn9>ZxAW4j z%J5b+yNa9ns_Et|J8E^l)iluK&bMKU&T{Gd$0a7p9R>XgEMp?n58gS9P zFlS9omz%%uOS$JnkP@Cd&{}}Cd8R9k$JwNS5Lj?co0qP4@QE|p|31-Mmx2{#stlZe zoq_xQdg*7$AIBuVvYDB)L<|~qf#IygKfGGvRfkC= z>~;nO3e~y!>h8SuZIc316^UY1z>=*$9E5O}f=d_@F%w9bZuRE7Kh*e8`rIABSkay8 zF_HxiUn4P+b&DORVn)KL2`mJKuT$ z`0y=8hdLDVzuWIm0dw86?E$BkM5F&NN8H z-5^EXlBoAkZItO+^Y?uzH?S5Y@9e6o)yNK5su?9KA|4Y+nQqWuZ#E1cd_9~V{ zu?mdM2#l5-jFn6XI5_JFcb{EzA8^$@z*tdWx@y2)&?HR%{VwHP(Le#z)#o=pkbeA# zz@s}`zfRJ0mw_C~IvAM?Dy)`Rl@nN%buf|>=uf%J*>zqjvUgdIM6oI{RR)SRfnsg; zxHlw{F^QNkV48pd3B!~y4IpmJW_kz-!vxZ%;CT{~iY4**E{XAyfzcUYv?wuN5*RB2 z<0Ucs&t0aiVo6kO1JycEciNBS?Kdd#s}H!p{LOZOPyb{wmDt-q$DOn6zW#Vw23ojs z{XpX)vST{9*NsZr=Tp8C;i@aDfz+ObIG>*huPvr>xLI~+n`tRKn`uy~%br@jWsgjQ zC8YSb6ZagO?E?0TG408U$ftnv%>4iV2?t2*-S6L?UJN3xG*6BT9Q8Sg2S2j7|Nr{0 z8u;Cxf^8E~uVT?kEB#L!`@@#5wv5MU(!lN@l z*#gQn_xbM61uAu*SOX@?b4x_carfIx)(M<-g!_}H$K7H^x=fbZ|E_8aY@Y_UPq%7c z^Uso|#J+>TKw4lREzzHL=T`Qo+{c4yVBaC&pg{)%*=YaXQeC200cNVe0VB;fO+WaZ zgWvBocF*-LR3xUW?rIH%DzIZppkfU{EzUYw~;k?8)))rVYdl_qA*z^bBo!>N2i#W(g)Xf+)(Cn3m1(%K&m5L>?Yepgy7fr<(zw}Gs`ws)V zW(-V}eNb0mZsIS8&c_ zA9I>I;$OVe#KX_GYHzTe0S7=XF7e@w4$gWZkWL6(aToB}+xfmJuHO|BPp9A8;L0`swUVjfxEqQX>!H!9R9R-2yQ^59V;FN0 zV?j63OHs3dozreL^L72fcMeCgjT1lUpus)^jmOVU_SVRv5bd*;Y8uxO-K#~l|A%&j zm}xNk(mJLGxXb;yf$&~Zs5An70FX}wf8HiM*%cSrWimcXup#8^?FHqW7$_r1))|31C({dXS{ zN{2DJn`<@o)QNb$s%rbRo2nh9N1ku~ek2RrKGm+%?zik>tNqq_UtWGEnvQ{}eCQMh zf4vb<+j!|oz@;ZSIO9vg6S!!o+5*+0z-Y1g=jR;NcwDMWy#8w@WI(C1F#*I)iBud& z#@uS^iI^L}=uZO&j{u*3P2>4D-Y;?e7J-^AP^FzT8EB>S5#{gNSqSbLU>d;s+36Hf zWElhIELcKkLB8dIzV2{1D&&mnqy1rxKuvN{U6~BBU+|P}{jQcg}pn>`sIbII_x>A{a z50ml5Eh*^7`+3%%3cmew?+XA-mV-S83QL@xu%^S@_h&gZfrwTZ1`RaIbSTR9)q9q9 zLzh;nQTK^)H^#knTHPYVL53Wc6fOMD5X?607p9 z|5m?_QakE$n9t8ddmOt(+8TnK*XuQ;F%u;w!dv!EeaC{#cv7>esv(U|)$B%KA{TI> z&ZOVU37QJ?2?6ZoDTevr_Hb8D$jz=`Fja~6`qU?JGw)gmVT!sCVph2knU45|6maK-7s`zt-zj@#xww97`%BkS z*Hd1usf$TdBImQ_c-TzkW-RFC&C5!KyW|3gds&%UT?Dun1= zZqc?S9(~^DKP*u$A$Kp&Iu&tXR}C73F+HKE9Fsw>3?pUpl)J$Wo#@5rPd1Lhpr`kF zGqx5IG*FM3cJ6v|5sjj*P;uIS4kmo2bP=s|3>s(@H^S{@rxHr0LC|;U0EU!Q+OdEu zmM?@lQX6C;rTI|nQp{BKeAtXCDYt{EE{NPj!0jUj*{A7Xez)sQEI%m zgDa#EV#;R1aA=_D=Hw~GD-e8D1+X1gzGVqL`=FU@aubWh^(P6FEt*$4(kkQcj z@XNZWhLC+WA1ChL{QZ+-;cl;A=>P_`B<_3-DVbkmA=JDn)f$ge@!$i-Wi|02r%P%{NXr*J&K%=nJppweX zbJ-`dx>&h*qy0fwK3<5pGK5(VA)~^Ny2PWYX)c^vuxco?JUhHzejP*gMtU)LGZ>EC z>`^rM%nlli> zDj`J61%n0}B|=`iLMqkDg;>5HbWNECK~I+Mz)^abMi`4_&%?N91Z#K&tf1f*aP!V( zU8oNAuL2js(@_QW*YdU9=20g zI)v#3+*}61Tie9%hGr>ruL=>L4enVX1VzeLIIAZlBFHrGb|{1Fn8kep(_z(UScrR{ z4gZ>{e$Ixm^st})v>T+DT*NhLKGao1f}GYe$D3&o=+qfc8h98Z_yr~FESH-9d*E%G zD(Kn^6g|IXnNuO(mlO3e1`RX{JJY~cN5M7Cw~sE) zF%5y_q$jK9@zLq9IdvDYe^cxDW z*qmQ-MAQX80pKO;o4^WYC#txna;iqg==rCpA?+uB%F41k}Q3-gL?+C1ZN_ z@pwsKe5UbtA2O_aOgUTzfVH{SH~-URXHkU^pD#3qWLHNVbjf)}wU)a2LpxI;6dGHI zYTZ3Q!kBxlX4?eW>6S{UAgq!lPmUX~m234OtApD=epxH2SoBeYPn^*>&+dCVoT8Xs zYW{F=i7W-}zr#<5WG8Tnm`#byWXGt_!tT8_lF z2#R-7xF$;N&y^ro2q9W-mTyn82ZWs->L|nD%etn45;TZ9(?FGp>+6(FC@J~FIc?2| zL^dg5wiza!T4aZNCW4XbcD$Je)sU+6dq)kUHeGT5u1pA-92L9qQI-iS(;%eXXFI^8 z()kOr5TfPNNj4*1B320Cur-bE9~+HkyUCcIsd+=0#{QiMY4rrvKqmP2(|gUx1h^ci zDy&1%Swtb1gbCylt#6H|OThA-=(%$E2UDYK2T`wK&_JVj*sCWfH;f|U8^kE7!I!9O z8mRg-))G*QsSPdjLWq6^zh)M>99F5O1`R~$^+r_Qpg}F9Q8x#`OikY{@62q0%7GBl zsMWdZL8g~Rbw;ao4MwuTz5lk)loZ2=_IkBCE0Ix_Gkanzn(gY!08@iMW2Nw~$$rKA z7OU*J7Nr9$5~seB2Zeo}kJ_JVLEf)3XOsGPF_AZs5Dz;v#SA)YTJ!@J6d!iF=n^3@Ot907@Y( z{Wc%dv-7XBNfG!5Pu&J;v*&&?z>FVtpfb!;O08=!6yS)l0hp{q%*FYFS1JCs|n+WnfQ>OmtUfM8j=*H8p6Ub9zEw#7p(5CY2HPcuXJ{!o2Zr;g@N!n3WR%V5aIx!;Ns+ zrKD$Wc`c+uhyXC-bF&n-x%Vb!2&6+eJ}a~JOtKp0>MxbLZ0bNNxMeAAzv&4PfBNq` z*!=wyqtP6Tx|UEIjGz#rDwi+<&ycD)jbI!Aqyju|o9cyxbSyfH7&P`P_Bg{#gJr=l z(;yXRrU6kq3>s(@5BcUcW;8B-wp_k%b)rkAC*;!M&3o=-yy#iBErjK_TJdK7Mv>@| z@wstb?7G}V?}%E2D=2s~j>4!SK1XMvP_^oKUkG!f%a(gE2HLSvGYvvKw?~!p*E9wC zeO3oq2+QaGH|hbkBlc?ijg}+v>|`_zXfr)MbZT%js*3x5OVKV?MY(3=0?ag!%CQ;N zspSN`V$5P!W1#L*_6eRRnQ1`O7S9fiVj|p#W=sj+`=zP&IyLs9Gt(ep3ZyiRYK?iS z0SB4l?8jR)s2brq=&dYfWC_?a*x)w>B4~*yGYzWx&X0l;m`31ERJVG|(vQC9h0n1k(y}o-`0%_2c#fQ=U66RtNv6lH?DpoYTgW&upO#o8vNuB(QQ}P)V$TX=tnH~9}fOC z)s;ztobTQAN+B+1O5`==vzp0Z2!S`E<$^&2jp8AX^dw^8PESxf>q$)&s)6Qt^hU&^ zXI@c`P^)$on&02yY(&!&JoEo*8mEUWg}2id<@>0PjE6Zj0cbAdm5n$nM%~AL70MTD zZnc;oudBssV;_YX7_E3RbP@rj)cbXsjF6|tsZ66ev+jw}$TqEQv^mTmQ#)a-px`Jy z`glmimBY$ZWTpYNV#($LpQ<2N-yvFV0!o6U#Yh?s!i?LPkeCbMTOm}av+PFO6Cp1j z>Dvyaqw3Dn)wqI!rYN;qeH{pPt#?07*(|l@!g0N%P!&)ow}jEDZO2`5(S5(lwQ#Qq zC8cwkO9HzhsOmmP4H|?IlyR?d0`UM3eRY3jLkuK&(`C~EbvSLO`M6d^Ig4W?BVj7R zoF~VlyGA=w&u2nDplp$a2;;g{w;TH}$SEyNMMgskM)c^%QO^;=y%*?90{v+>ARRXa z3;`I1d-Rw>!Y}|+xGQ_b3<*QHzpGdRrMg?Fw^SDxosp>21D^Fc&lkaEg*!17fzo zVu&NhRZq~sTVQmtET77tVT~HMvbL|eZpV(P2x}TRdV&U8G7Z8A8d#0}X9jp~sjnmg zUgco-HrVl7kc8>3PLxZyLDJPZ_i;YuuISRAa)SZ`X<(lLcY0!9QX-#jRin#q=X-xA zTRfHkB#KoB<(fdzasvs)n!s4m4d|9@?#f4{`t0|0fn75a<+?zz29#?O#k#;$8JH>q z6QxLHXcP;1R9vlDR1YCsTU7!PLEfk@lzLOBd3J)f zOalPeRT9Y0rl&@gX^>RbGb@FhS|6sFO7nz0)b2%NVZMW^4pQ&zK7YQfou{Onb&rt=WFxhYTdzeQv%~Z!LG6f{4LVv2- zZ1B(wa0GouS))FvDFdxktme*rGN2B<*-}`H)w{@UyGb=mZXCqG^Y^wBuNW z^W(!XT@kzIt>;6y`EJKjf^V^quL(1i#&MC2IDOiZz)ZzKE@hxEjLyy6^n?IE)zs+; zVFm34wG1SPkHiRo>sWn^xidDls!V&7xeFs96Tebq5v8 zK*e&uPL|zi6_vSwgXK=Ys95g3Re5&$MY%3fstHsqw+2L|E@lSC*@ofbc9-VeKGfL${VK6|@?+aK%A>8vXmg9aM8DgEJG z{7s|zrm!ADij`XFJ;)pNg;H+{b!QsroSrbIET*U*BEIqdTL$sW@QRX$np}7V-9j_UsgJ=ov4gj^hTSFzCvUX=@VQ!QzaJ1Knx`slCtMk!q>yP8W;j`DReFtRV zmETLsd9-J-yTy~r`w~`++i%IyUU24N5?B1W0|pGp&s;XdV8$Dem@}W_N3?kyo==#){#;pSE%#h{wWx|7_(hTF1TUTwo>>7f2Xx0m`7L*SJ`KQ@`d4eC9)}hQG)3 zgrEu``b3{&VfEBJys55HcjR=8Hix;=hSyZ3`M4ZNH%~)aDq9%{NSFbxVXusugf%@u zBHBp;7FhrQAOJ~3K~&Ggpd7YZ;;OgWNGGD}NR{dmr3z4({aUOWcz#BpSamQ{bqoF# zs_u#cQ)S@k3HR%C6{uLoJdTM@*U$EUYr+81Ngy4QNXI2s z=5!>B#`iIIS;c`2(4PeQGBVI?84AW5j|Beh=ek=#^TD8jMutzS!ICo#JlEeaG7ajU zKt#gSvmUm3Q)q@*C!(EcWtxW0ng*j0*Ay7eHg9h<;t|B4O?!d{eaUEwJF26>VF$g` z8#|pr0|3aSWT2zYYQeT3?+a(Dvr`@t;idC?1F)%pf=7N!E}9W#WgWan@vvw~4F!6` zSW>i|2~URCKpNOK72NB4ZyjO=0;vSAUW>vi$|-v=U@)9vIF5nI3Q(v3&rAR_)wyc_&HuJd2^4E?VAN{6t29@ah8tY2m4T_*)gGQ42Nsh~ zF9fhU>n=Gtkankmxd8?DXZsDhKkrMq^+EcQ5`8JZr6?%~Z{Hws#a+QnDWq^QXrPgh zekaJ%P9E>vekX)X1MiK4t`ssyxiQv~X;5u!G#B9rlh;_pnFhn2qFcS5Y2XbSxGQ0V ze?ZlgxxGOy7uZVExuPK(P~FFUNnkv{DJ`~gjSI52NxAL@3&O03U-Q%+2;LGPqtRL_{ zFP|8dc=Z(qN_F1CFNBo9^D_d^?{Tlv{&*I`tr0em2KF0r0}cIYpg-mQER&E(#oQo6 zIxdhh9VFuh(lH0Agn?w-K{_VTpN^(LbyTLy4xShjm@W&H>Jo{VK*E%WnLykSNW>hh z$s1TRkNPend4Y>hkodp9SU&q_x#AT^BjGbD?#QLx(Cv|F5W=gr*DDIu<_=a=StGVOLLPD-&elAYrztBZ z4PYX;*H*7_K?V&PnFitQFxzqG1lz)Y}gqMpo0{u+`CQr=2jC8}1~^;PI5_ zx;q$f(7-#jF=hrc4N-d1DT6NH2=w0S37= zf(HEo2MsDMrp^RWXwiF*BV_P-2fZ|~d(Kf37a#BcoTn!ooPUFXLdE}i)P1A`Y7(eb zfI`~=LE-u8r#UEL8bH!?Yd&NW0_nKBiqLSjIm5yG%5$@%EeF^+Bd~2sV!Sk;8Wjs8 zCGgd|fzO=P`uBZl1MfLm;$Lp>p_6t6V$eXNFh9`J@#ay}atKlB8P5k-E~0d9FE!&K z8H>IR-VgA6z-iYD@yPQIR^_7U4Zd)7V_!eIOZNQoR?kj0fA22482+(T@vK6UFv44f zq^@S=X!vY?PT9xq@}vQdjwsi-On{>X!&!+Pg>ZJaT|cmsVI|L4w^-;#@| zh=N9k?-kwBj;(|dFz;lqzUV%Oo}OrakM|!8cH7?1vZ0I!WThPM)B!^TpBbQQAY-BK z{VN;m`r5x|6-(lrs{|g{##?r3&31s2BT%ZV=jURs1L0k_uG?auT$i}~jjd1gzx*>G z9dmHmt-U<}wVd&t(WqQ+{|T8}V%6L|S5H{d%eCaqG)QWyO6w>?7CPo>dppZUSf!xn zVYJxT0f`WAn1n!6MuWQDUgfQ6&>z+G1kaFLn9GJXohuq{sMP>l(EGP(ImrOe!J?8$ zlum?qZr7~FIg~PjxnMhJzk)(6q~-HeLIjsJu~?3hM(elCagee~O^TUHxKRslO@p8_ z4N9Js7}D|H$@$l@1oJ{A4EP2N0N`Wa7kFS>?|;S;efJ@O$9J~>{dvdA*#QOWM!X7X zG#%iwNM7CuyB)!ji}46lWEYj z&;Q41jkIl|a9?IFY!6e>!lK|G*L0|01Ov(Ahleg5cuLf=G3%}e`5v&~$x z@%|NRA+HbsU|N|j5cKtd1x?L2!cAO~U3B^PyN8Z;hzr)5OJ8;{WuxR^8QnSULY zRk`NlX=kC$6MIO_21?45p{Ozqyz8uo88on!Qt~=74GQY&38`R@PxX2fGXk8RpcH+} zgg8B+s;qR74lvWeX*WF~g6q_gYxUp!shJi=L`%}D!KGrzK?4AoP^bL_oWWDxV|qd` zud5bf4Xf@%H{amqlM-KeqwSlCvwd3PUEl2efIN|EKBs$9Q-6Z|b@MfK*_#P*i8}91 zv$umEgqo*Vo35fm-B!~;XV9QI(;&Q?jgf5gAFURP>t$-TL73A7RC@#s(&2qrs;{i0 z_C`e+wd|GY2_>b|mklw~psMVflo?zv%CcJjd~T(VFde$O`53GE)bR<6t)v=6wPHw4 zN#UP~U+XGt5e!_beR`=I@CsQOgi+PXKgxrosPb@4MqHsmipUQ&l(i?c6;x z%nUFvL{U*t6fuh!fE7gnfn5xXm{)gQ)2`v$T`{byuCAXLFf1x!0K+Qsxr%8O46729 zATr|&!=&!%baPdm?~ilu)Tz_A&JBIeshaM3e!uz6z1`InPo40-&-*<8@@$IDqtOkr z+MxLBYYAp5=`=mX>O(gM%_|?D1`U#kv^Rf)g1<3o}5@GSl4zwg`5MaahGst_;Ieiyz{&FUm~=K?5%EIHp(#u_~Ous`3Q> z9rav2W0f6ash|w!JjBQOC(E~a>vt^N_Fy_iPq8}jjvFoMy5yB-P#iUp1`d*jv`2~& zOIn2x1x*73OoRB!6N2N$u@Dl22E-5rwi9MJ7lUbyng*g?!fFsg1b{hiQB%^G@#i60 znrYQEh*=1choe}fjAv7+EK}lz>`EHhCk<|KpLd9|!P%26m30fntrvoebJZC7XUdNc z`j6+3aB!)tahz`>)Nf@iD6DP?1+xHkf8+pZ+<5iA^Ur?m*4ush|I>kljg>toFMH%C2BYJ_7(^zhC#27GM3_pjv z_nU8XyfCc>!rd}Vm%<0xV?gg^+idvz;p6JcTSO+*q@s5q$I&50hXz%Mt7I|?fAuII zzkUP7*ih&3((@>u{~3bUe?4I*o+5 z9~{-{p3n@RGZTVZ`89ZwEUvBaK8ZMLa(S;X8-w-<6F+3v=o{#$hJ>=4C5>f>Z7@xP z;JD*O05fX#EebiR3ik1O15HoQJSa()i^DmJH$BaVELZobTM2I2o}iOXaS#@Ou_8s@ zA;>vCidllZLy^z0|3?cfDCv2uWY(k13f1-4=Y~t*`ab))2Y3{4Jqn)^xIXLuU7w&_ zCy>N>R~^22r-h3i>Ea1nJHHo)jS~FblYRWt|4RdDNkAGjh!HboebF8AZt@NHpNgD$l4Y%4n@YI$l3%Mn<8Vgxl7goG8T|= zfUM0vXB{S{UCI$S7DdJ;$T}2`1vnOgZ2?)^heZf%o4_V4VPnH*-z@^_12vDaNa`*{ z%_XS01oZ|*)umXdS*W=bH5X{O1Pza(=`jtKN`oz++0WP_yXjH5l%V0VeKtITrst#S z6ErrfOk77C7! zY=&_CF^%|N1Qk9mp8?^;j;3Clk4t zT9X&DTr_`taS~->k|+c71t-fUuc|;u*m7~-lAhzlfrWZ_v{kL}ABDLJuxX5a9#?Ed zD54!>i(4ejR$Lyz79MP$D&rBXw2SRm)q<%LmNU2HS;=1E(&&Ygqfyx6#C86%Cx|V!=rfje-j)w z0<`ZnAr!+oU^q{(X_N)9hjSFAT=01$Pq1;Al`@sGK8AAb{fm7o-|&0wcS*$mZFIVp zsQyY^aEk%OPM%WN52e&@(1hM9@HE zpMC7Q<;N5=;wHeib6wVcJj6hwnev42ca>tQO^@l;o*5U310JfDJ zra>teJvqtR1fRPE=sX{cx;MQn;!~_OWE_HVr==$|4xF^H+h2qO4@)&4<)(#7onod! zP;L6CGzqFrf?5+O*I6LF(xjLvGbU1{K~Z&qYJ;Ha0_8emiqx9y-FAIeg2Bo+TAzip z_{dKP&U=`LEt8$w@uLq1E_|eqYk!lr^EiBtZ7ip z1ozhUDH?vfo!Wd$Q=yb)tN_(iHCCDsU^N8|#L4%FA*R7B=fyo*u;7reXrW5b*2*dF zpn>S{vQiL*jtNmHDzcmF1TnCyiUiQ~qIaY-6MMwy@-b&V2KNM;qo|vp?G^>mE)yCz z%gYngj`wvp2paHqk}CoKT=Z!gBqLy;)BZR`3Y943EtK*Ah6#=W&^Z{@js4O6bG=F7 z0q}ha*JW&IyUU#5ZD;xT!My}~R#8dpp@uYM6C)VYKo7(Wl1J4)>V`f~_#8)_ zc8L>ns5NQq^<+z}g>S|o$ZL2eqI$N@G8@xa6taTD3TuO95NX>w^(fklQ_G5%=$APJ z$9>g-4jy9AK$Rt>tX|yK)CO`k?U?PJi=jNh^pH>x8ny|I8{NT9KJZaclpNr7mt=vh z6&)iX+G(#mBMlm)NWmkQAt+`DN;wN-Ll&ln$uhSc5hDc)SDup=D8z|0Xb>YB9&o?J zf@*4L@RviZJFIAsW371v9+x37wZIa=3o^zb#>hXXy$OhbJ}@7g!^TndlNFIRT{pq` zH3a_N0l+2=_pkGD!{1qLs~&i*>|WfRe?f89o_}(>o?70~H(?QVXB?vDSPe;ST27JJ zqKKy)i;h{N-#(z_a8l^H#wdtvl%=}X|b;7 z8S%EVHC@!LE;#cziYp!$%b`=GSao>D2?P_xGzb?L((;6uF;i(%fRt ziKC;In{nrF!xVcRi(c^-n@}V-g+)QcQb*9G6GTzbtj6qUyM)J&S$jjL{)ny;A-zF^ z@OM=rZmvwzK$B41*2(2R+qD?aB+r5x7m8jX3IeltTmQ8$)PU&{`>Z->P-_PFu$W!> zwGyw6Z%sw*f5I8o0LwsZ%f{YC~grblIvKB?gw%|Av z8JoiMfTnNZK!sgzr3o}V3$>=-67i#GcmxNkK)nfEe5#L!Z0OuCJo^(Cw$D;#?dV5Y z81~zz@Et?=ZwUc*yd!!db>Zg-MsgIxd0-?@Fx>h)oMSE;8%GI7vYlKsRwvGT81St- zC~mqt4IG$88Z?L*GF^kIp}{8`qB40?6NS9)2IuD(5F+b@kmX_wOoL)Bm{3(?c1{48 zcW*mjq=ji9Jm*zJG(foqcwR7}9noxm*hbwA2l;Z2zJ&&9y(5~m$9hJ_AxechO=zBp zZC@qC=b_38M)sU_1#XV+5H#2^7f*w;42$7q4cHxb!ZclFP@7%TMuKaB;>C))wrH?Y z+}(q_ySux)x3m<8;+mqRXrZ_ScL*N*%k$2BGxwj&WF~XxoU>>5l3mI+D3wl4oQ9WQ zWmtG=7!7e%wP=`4-k=!+8Uh|CLEwunfJ@A{cP;2~V3~+W;_I13nM#90aU*2;gP)>T z_&xcMMp4!r$9!nM4bEH+0g@xx9ejtL=o69I7M&1R)L;yqR=B{fxxpmCPHrpS0}71Z zMX$F)cu6k_?rS4~6RW?vRy-a{9x-;NLSv#5C&s>fzU;45-}4<}7hVZN4c90(ryo(! zlXaJ1QRT_Ez%F$TkCg9!EZN?kOfg&(DtYoSR+fuE<&kEjYa^%(gH8T%Y|{xBZZj=f zQYZ86subL+_T!9bm`e=75Hp=stT!Fzk9|$g0;8!pt0n$CVO8#6id8}`@>)EV(OQ*6 z4vnMzK;TN%^J|`zAD>KwcRCCL7ow*?4)Kk{fL~%;FcPe#mQzRB@`Fo&9PTT-^0Tht`&`mk%V5`%@=()RCo)u znkRpi4XKNDk0461-{JEjd!pT&6y6SLKk%-!n@>tqT^NW<#Ifk&1$a9mt^tg(LJw2*t5z7lt`Dj+?f`yBuzxpWHcoVuIxJA zoA^k7DjPU3V-U#xgj=XvHWPhV^v=V*Dhjwo81Rc9_$*Sg@0$k6An_GEpZ#zYtxz^F_t8RviUsF}8r3?E8uKQ{ z+K_(91f#UWQsPMN`2v(Nep<@#dsb*{60rAW!7~r$O@X&!xjEJx)V*oweNt!TfKuHB z-Ng@8I&fuJ@7)?4n&k&w(y0m+$&3*|7l_+h^Xn4j#lO2VyuVMh96+R9-~KnR&-E`H zD>1>YRC~7cCdA0on92=suM?j5BR>ompG4qCIBHWmM+Raa8p+mSq4vU^4>B7ECXE5% z@vm->jZmiM0*`JKf+Vo3={e7we35dZl8lex3}+*?Z<@)O2A0!2QEX8b0gQ4Y?7pb- zM~i9Six=fh$8CL+F*|I4@-^|D`W-r}vU>y9<0&VW?gkz8M^4cwNVzOMh`0GO{%b+k zFs&7N&394S)x(Z_4FxZiC~k|9*_q1)MpQ+mfk-Bwk5FWj&jS>k^XQKl@#No`O-&$8 zCVP?iQSu$pAXN${RuBP|;p(|VUxNUvZ|oVy5Bm!%AQ>aFtcb;5ep2;z-!l~R5(ie> z20g5{9Q7#ns(kLcw>qQkEEtk#K}r#jW>|3EaLDueuWv3{E?2)aL$9dUH~f}~U4K^* z>Gt#wB;|C$U?@~CN9w?69gtnXb!5Hv`{BlI(;Xp|>*u)UOa>X!^S(ULN@90U_cJ^7 zu>wZ!bPeKvx0>5j@4@6@q*sKGksocik;jc^xS|oN)Hqcx(v&y8%y%V=4UO&*v|svV zTbO)OMGe7lQ0Kh-!D5ug@Zfvy!MGb)m&W|K1iebWVm`63Xc##2Z6P*F6!^`{(lKW2 zjzBA#dd&xmDj}WE8ng9^G`gR9Nm640ZK0jVDI|pl@C%l}x+`+>D z%cM{o#H@h5@EJdxZ3^-11ueeloYK(^J`XhNyw7OkS1>)vYjY|}FDnKpu@a$)7#gL> z(yBBzlDrun72@kp&d(hN&&~KO&oDBgz#>jDfRGi>s#bZ=c2Qc!JHT0k8@!qgv+G~j zJ{;Xi#!N=S@@ig-t>LH^Bn+m_YMJ;fJ1id{1j+!W^l!!F&=2 zDrU5_<5=s%G&I-UnJE*~65cFRH_=;QavnC6T=Q9p35GcOQ==8#IHM%Ef7VRfip?(( z3#kZ=)!GK3N!YO*qz+$a$AX&ClPcX2)G7#9F1+RL82#+8Q!)q~g}KUaG-kOt$~nBw)^IXvZ6 zsdwT^1@+}}E=zU2*!3Fn2phfc%^s8{KoV@~NTWs4!Nf4R5Txc3{o3YKjT2AdoYJRU zivr)F0GhFi#YXf?HA3rG^8uSvI`n^>gRZv=rh|sbnvh?aP)?^nvg1*Z@ZvI#)K8#~2uxNl#!7f?#z ze+GjxosN1c&cP?iWc?b+N$cyjs!nLSwEza~<+&^YJBe54r-M)@LZ^sIn5d(SIWa9xr#df zUkmU<9u)Lx3C6(D{&QXey|dG2u7K$Ef)FBLicEDMOd;OMWjvNI<^PQ^6yDR-DS)5Rz=p?G#A>H?hVmtZ55Yp?uuD=63$B8oB4;c+!0dg zGf`cLrP-DK<?OXmzM|5hw8-Grc@^Mm@z4%^H^I?(=-TVRkIUHX?Z$0%9k8CkWwV) z83l)InUg2J?R2Ri*Edle1!1I;HV`W!=(L_g`HZXZ&82O9I)|N#YcuACAb78fL4kgM zW-CnRR=nR7zLH__S^4!@t^m%3NZPmDHiLqmy|L>1!YGxxV__4>#;Wx$zC1a@zmfXn zU6=H#eJ|{QCik$jm7p7+L%w*d-}x8y>Z6~^KVZwgD8vUcl9GN(vC3kmsD$IR#)QR5 zORqi~=14l`=s(|j>fa$I65q#_6r4+0lDWUds%?VyVv{u(ukyZeZVSnu@t|C#6Q!3R#3wlwPWe>p!Y2hob8s6OAOZm+vhg+r`OLpM!J<;w#bXK>p7Hu` zxZ*Vl())aA(R0cU+7}7xzKsL-I=8R=N_%zOzAvF|Kje)68l6&f1yl)4iBerJe_2a< zRNrCPR$)Ng-ZB`7J7ziaZ%zmaZVl`zI7e)K@gV1pCA6ESLDWm1yTYll>z7&d`g=)^ z5x3sP;>jDpL-?J(-~A1`f`+H1`wCfH$g6yg2BLCmUR#y#OZjuzc)tAGVHCIDe#%?v zfn?vtqka*2GJ70H*M4`Dh$O}4+bk}vz)`}9+L#*pkuqd3IGoQ@&SOg+C7LtLPnKK3 zKaM`ij9nTK+|EWmF#T?KL}8aN6s%0&%?lA3kgS} zX~d$9pV#8WMyA51Gb#koFDTD^KPm*ib36_iF~^F(ef?l|t%6m1POLTx zLtu9-qVru?0#YXYVgwMEHE@L2NQ1x;GU${Au8&Z>m+>2B(J{ama$wXx-_g3ySrf#c zNLCfWMdXj{tVL$jM8nE!&P`K?+s(hthkDyV*(h2kvzxZjb*YK3* z0jxF|4n&@u92EpV&kNmphaaPiOtLtBGq+yUH!ERAwO-mXc@7x5^C@>$`s=z9LHu&D z0$hJBJaB4NL8SIgj>!r67f1QghLyPZRX^T=^Q)j$^HZ*_=;X*q2r;tZH0;elY8F$C zH|<~|PT)ZYa8h)BL~Zg{D;b{4eQQ+7Q`Mcf>l|Rnu=s3yiHYFJtS#j(umtjWce{~{ zNfxhaitR|A@p{^JM(=xiGvCyqk9h^J=P>%y2P<9FXg?)T%z63CBt(Q5fzllQ@`)AU z?{yS6vNYjdCGC-%2#rY1myIsNf!xa2A`e&BnPQRl>3s)A7T}X89vQ{x3V>`xmSv>% z_o4*+d;0A7sf`?#PULTPN{wI6QECW_IT3Tj$k7=sPhVMt36o$YX|Yq!g=k5z@!o*q z6om-$MtQY5!V{BHz3Eo zY9#Tv58cIw=vhk0>q64|Uk`uu5tBdx_QV?5mf}D5M>2+XMV=-mVF&cWBfZR)>_A(P zx8yv87gnRCI&o1TwQXdV!+ZoE+^*i}s~iEi_F02|-Ov-faqWPQ{bJH@-$JC;l_!3@ z5(rNKq6OYY0jYdEuX}=4^h3`d4HWP#p|;&ifq8FR4kb$D6Zcro0zDod;Fb_xyUh#| znC~r9nD~Te2q%{>U!F?SBYxlmT|7x(@)k+R*|S(HLLgL>I%SpqwSamJt9!2+ zVE0ds_kR~Y%Pa`)K^m~iS&fZDre)`YqmLEK`bRYbjQPnjxG&?vuz>JF_^yv};#e?( zLvNS`2(3deZMfD$`q?55X!;ko=Zm*B?_EOL+DiD`6?2G#?RnULIL6 z8E-mjotRtlzy+(-ZJ>1Jh9?{~hL@~-01Gi)^bwwSwY!R6H`V+wTLBE9gm3CpJ}=rW zi5&v%3md|=;Gk+Q3o@S-s8xzvvog09-?8L4>EAT|8X-0}&hlv+j?RgHPNce4Pi7JdT`16ARMQtiG<|4j zdX5WnRMDLd^+^-{#5?*5a|+M+pe7nh3|l7P@zY9_rzLH&epDJ^K7VO`2W_S(r)^`*7ua~4MB~aFOd&$l=ta0 zs?h?G_`c$ydymjc6NIHsne{S=4Fv8yGu4TCpw2|7A+SZKS`fn@8Y&~sKz9lOtJ zJ+`#3G5O0Pd9bPE8`f=0Skildu4wYBeE;9?AA`pKp<9pDmP!r%azx3kMYub0LL<#~ zAkB5%5p-rH9cP0JTjGo3u*Bn%*=(UN1!2vqU*NY;_=*p;KOw)O)SW3tb_Wx4r$E#5 z_j&p}DudpEjnnvZvST8|Gr-K)gh0)piBCl9A+zWGfl+Zo`g7F2D6aZQJOn(VyfwW+ z2JlLOTpou~aNY5!AFT#cCO|Bv?k>iw*{f2$TjX75je*5(;oa|EN^I2IfkXSjc6-ME zShQBK9N8XV@>~{V04AqW*p{h=60S^JL`+?dc*X_N&^}kv%kxae3C@|9!OVn?+Xewt z*R;WWc0hiH?7z$KV8n#Ofl#!`qR2o?r$E`mzqHLj(!nl=$CBW6_>#JyRYuB`>5;`3n!d_Yk4taQXT_ZenG6jX|y+MO^n#Z=X*=6xA*~T zd?9p*92}TbzD!egIA%6rcF`_wOO#ygmeC>;=b%{cir%a|F6fw+?h~38*zkQy1mG7# zmqUw2^7vi|{?9Fy?KV3W+_t{=vnDBM`*{(3Pi$6KE^4srg z{_qlQ3Zg8=2A?;2_5@n?{Tc(Z9g+sGze2p0)7WQ)HBt9iE%WxDO7)2O)%Z=*JDHeo z6*ssEUS1%9uTtMw)dfW1dP&q~JJ|B^YPjsK)T*IQaYIv3K|2SXBs<2h`e(?uJ44t) zK~VSo_<>U=#ycd(H+N0P=yk!gLm4S)E|0|?`Vh$S#(^>a0ydxPCnEan1jV3OeQHeD zmK9Jz|NiP)^uHo;eUFQJcYD$9-mTXw=AULiPHCpUOMt) z4xLQA)&IDq{_F_xID(`T<>|{UO}I?-AH1dEJ|D~ay^?W|YQ1@J(O6VX?CVWwDg(2n zjB(t7Mep6JGdOlq@5lY3E}}KtCgiW!WA0gWE}4#YI;Uo(ZqN6(Bs>expHE*Nhq}$| ztG`SB)Z-Iry}~M%yh#-<+vL-}_ud2U*RWHtp*DE}vU#O2Wa`T&c%xGe)9YSgRZ&yV zn6QC@3cSE`Low02S>m(BcRh=>0f3y~;?mSI*tiT8RiD5E-Rq4|f57Ag^uYz+D5Rjc z*T*EoTD3lxQ|4oPUK5zmPI7*a_(w#KgHXZNYfpJVKV(20b^R`4QXn_v&XT%5#Qn}9 z2x1LE7LNzw()Jq`?`>zLocGorhoC)8EWpE~2Amos2z7sNFiSIZ^r=O1(|??$bd!Kz zEWGo$;!NMRok%$a)F?UQia}0Q0G%_Aue1R>tx)?by;;7}CmuqBUT+7AmI=`M?)zZe z=CC}zV{i>>t(9dV=Oi?_GK4oCxe+NL@Xef2e^-EkDild)K`8jab>5ALORUIvU?c=} zwI|0ZqtRexSptj^Y`sFH-?d9+hIlL+n0ZMY%_qU5%9CEfEO=pPRVi0SaSHjXPIy}4 zX73QeGLDTJPm@1{s?Srb)yfgaanzH9^lj| zDye1l@vOMtj@it;OxO;HF>Jf`vs6pNEdG1~Le4^g0gy1N0Qa z)DKrRf^6!SH1L>ai09a6K!z5UVXH&#x+p7*uzo+Hg^kv7&6H1K*2)p(gJXpgBNI}@ zkb?7yz`T*_5{X7Hg~K^yd&u4muoidW2m>ktm{wvb`phfHj8i0ggN-b?<+I>bsOYn>Gp9=k;++np=Eb zU?;D)cVC64q3FOTBkCx}Y5Bfee~4~KtD4UtII8dX4Zq#oPQ?O-^|gfS4km@Q6=?ZH7xX+9gTgAVWUZJq4a9Ho|H7X@1Xy~jH@}m>L)jR)d zpY!5kkz?j=un|4Ept9YjRPhBAQT*(vTV~Op!Jj#NsURACH{xM<1W!e9_N@N~A*YF5;A=mbEaJ9IIP%;0 z^QSNjynD3f6?Tesr~#Q%X-f%>Ce>J>raL#=SxfNxwcG(L*rCMan9>~=Y$PyRsi^?D z2YBU}H?BK@d)=RoNx>^6Zvr=fSWkYq+(LG%+~n9q&Du93V(#Im8&}L!xth&1Q1D3^ zt1{?Z<1TdAZI(#fS9?Fk_Z$d0G9>*MSPt*F6#Bb7B@W4ToF9Xw;G3M=_li`8#Y~1p ze#RBnU+y`)HdH2a9wF71=4A^0I$&oDI8E|_h|*!j@hSeM^Mt1&^=;FN@_^^9Fv%Ca zs*D?Cc4ddAJ<)~ZyYxkgwl@-g`3U$v^yXTu;x0ond z$4ghZie%~<-n*v#L>&lRi9nX>kpC}Ek+xZYPO$uMF$BvbE6r z#jkhpi|Q~^QRVC3j>$Tdcr0;6*VmIvr)XZHlJ?Lo`H@@K!YM*6dUAYtwUu(Ede&P) zy*l9eam$&6r4vrd(<3zDb}S<}x4+X9A20XTlm-U(CP9{8TOjvDKnC9(>v%kIE?7ay zs_aEm{UTHhb72IG67u>kB!sVyg3E`;gg&=gz5CGcN4^f1zFW9Wk=#Yv6&yow0Bqbx zFgV&+mn{+rizehwHP!C3=MP?~hrKtDj9W_}@{-^C%w&m`wuCvfAHwl@YRQ8pvXP|D zwmynUT9Q4{KJqGPHsJti+?^|Z~gObG7Q<1SKRyED8_(Ez1Q`R>7575 ze~23EK@!&b3s@>fBmkUSE_j!wIdSGRxYh$9MI_#wUzW!J;WJi$CxHQR54gptD1QB$ z`Py`^>u$)3FYGg3iV*Ju{mbSdQQJ%27G6MSiS1W;=y8$O*mA%QBP6jR=xImQe&m7(mcxoqn3Sd&~Hj|5BmwN<}!);t zTUgXE*ka_)K7LI+@>y7iPKCgizrg46uI68|Q+ynq1qY?bglIBTJW+-;(Y6feha9&M zeTikIT7*5atuGK)3r=X4Enlm<7`U>aAUYHP0E6aap5~j7DM=Qp*0dQXl4@YN09U$8O6wtW0=VwOiN!p=&>xN^0NOWt6afdmwS_%U z5;sNL2%5`>CKA*mcUOklLnR{;EzJ0**ym5OTgogDTXzRqL%XFxhD6Cj!8R*Oh854x zFu1tPd)W-W<7c)k-^dW;$FY=*h(a7AJX=?Eos=&MxtlysPew$>s-fSUNiWr+ z5bwone^R{k+uKb!Ev|gJEdrWc3CQLlt7AU@2TX*a(adh{e~Cfp#)Bjq17g~kf5apW z@*z66o)o)BH;W)}7uzg|vK|I{4ZN|Z6~pn$=hZ`)&$@o+(k;QW+JtIpMRFnW!R0t= z6|6uLUR1;8wO)7jMzkFr{;1^n-#>eya~nVnB~kXYr^2z|RCs)XidhJs=}n`SjnmIe z@t^wGPR6MQ5v6-=01@L4>c%yQS&T9j@~$wzADtGr(^sUB#er}HFTC#p`X5^Nnt01Q zSf^d})k-%FzYF9JqZeqhtvX3NYnQZ-ua8gP)H7ZHAGqQV?8lK~hC$7Pf+zH}ow}p)?^ErAr zeKL#YIT+&vdeF_qlU^$)f2c=*n^Rlwej%vQDecy~R)*i~!?)~-Hx$j znLt6}RJ(U8(ReG?Tg`q69P{rAPFEO-l94Uhv4sA_Y$IgLfZmTA`Cf1K7rA72#Ckp& zH`H&>Bfol^d^@E(_s%&#EvX7Qn{y?Q80>9|V(Uc;yyvaANXGz4p1?uUl#hYUkDnYH zQH>r@C`>!XhonDvo{c2uX_Ul%A4#3qS09rRA8}s`Y?3u8o_>Al^5h z0nQTzU)tlH1~j_FVff34i@&Vvy$k+8ic5im3xfpiJCOq$9Kyt%zj?$DZ-~x}Y={fM zUglELt&q&&>8e&7j}{}=&mnU}#u#Qs%>Friuw|S%d%Z~+uxeBUaBl|k&keF^O#>n||7L<$5HTe(; zXQq$^_Y^2h+Xs_=s&pR^g?p&DUnEvLI*QYX@87e!&THeYUu#j<`&z_S4+tS!3Vc`}mvB zqFDQ%74aEzXdAd=qklncZF0AX)(xE7tZrcx(KjYf*>RxPl`VGF(wSdnJpi1+z8pXL zdZI+SKmFlvtj0%3=Ss2G{F;8By*#9l3=q~yf&S>R$VSKKo*eBXfv_|ZRC3uP+ zU*8?O)^NTq<2Dk(!Kj!P7od`j-l{^!yPZoXgV_?Rh^`*Fk6hma9=cE0Vq@i!7i((+x2`-lPmo?IZQI<>^csA|;m)Pd`E&@R$Ic5*r zz;L{0TfgWVmpyu!ImF*W#WmRX`MgfQw8LpoA@Au1#&*S zyq{&o-_(G(I5$9NN;C?)F>L*{rXSQ}@;|w405A#CrWO9K68?A?o`|CwJ6?a@SVKl7 z4owlwp_v<|L^}Px9Z1gwhuwm953ab=!M%)Tv^t!h0Ok7tnsEnE2V8 zoHd+_f!~}^nTIN?d~_O@LTPj7dydrX7>~tU8MY>k(EqkL!Qz-AQ}znnF*$_KPs$eA zNB!M%T?I{rkSN#X*+bOHIv#6vJoAQf;A+50Bg+1j;G-Xhj1p^5gX7=8B*=@t#FtzW zUclYw#UB&8K~Ed6je1p|6rmpF2Nv)|i#=6~l6NRS{8%&aff%$e3KkcuzWN|{`=Lyvn7%#S3V&k(TE@`C zK|FIuvSsTL%@Ha@^t%|9E#DD9^wdG)GB_uKSp8^I$Ii8|?AN17Oy6HKK$F)`_p5uV zd_-I?<^M7&WaBOW%h3UKB+q~K4|*5%K2myyKW1;4kq^e*ie1_zE^q)80tdn}EEppk zUT1?_9;vth{H=mF*r8cnOtB$c&2~mCzB1YBq_^l(Hposq z#~kYSnqF+tjx;NQO@kXAtqK=NNNDqjFPaZERp<*f?Mt$F$lYI229)KS(AahafPXpE z;q}?-W3}%Qkk~l3xNe`b03S5N(?r>D$XIA#g*H}N1AfGgq`#Xl;{$*ENtNR_US{nv zoB!f8o)tv-od8DT3Rf$Cg@Vcsk&DshjH#(wApVJaXUI@dq?Fd+bItbJ^Ez2cNrMd* zBRts3H^9il;8d9SRCx=>G<1d<5QFh2sE zrjLSj>H4N6i)s!4sDr777#4E><)za)D@V}E<9|qQT4rV>Q z(URA#6pDepZ#&v`-}`L8(w}_+>0PI;C`P2=Qk65H8{M9i{pKx2^y%VVz3=~P0V=`W zWu@RlDb(%k$L#`cCHL%nzWg!1e3SOgTCG_G5Z0YS5}n8=?(}!uwlrqD*V|2+Tj8o# z@9cvqfUYz9@8A%xee-KClZ|HL4hvk%xVg>l@$h*vX=`{x6MncP=grPU;Z_j`!W~K- z%=E^^sb~)(vKSf*!X0+%r9_mG+q9O@LS?maKCprIx%q$6aa(?7qmq7P$=SQjP9?jI zZ-6>kx2@<F3zgEV>q3pyTY~C?%IpQ9K zIfbkujO}|vxOg9Qxli+7`?4-q zk+lFW@rbPV42TzeIKtF@Mt7SxWR@C;dD`tq@Oi#e+uQLYzuSb=%Gyt`*3JjCNi>w? z9D6CKhIUOEjo*oCPzwJq$7Vl%&sv(W$W2iEd}^W>z-2pWeu8O|=*D4IU1|fB9a4&@ zV2p@*c;>UeTjTm3$z?Otz?~CDGOC#tbVkCSOT5aZnb9)hj3Hi8;*xUSq4ZXN1M)!R z@m7pbN_|%1U$e<~WDDtjwNJ#26ujQoU0XNm!ykqdw|AdA>9>lcs^1KJV)}a zjq<)u?RoNbsvcQO0FaneG`*+!13Wi?!e>BwPwKZ@b=iKEqkH{;xmEsI_LdK`(^IaT zrod&$%4QA6v~TSfValy5_GmRB>@!dsG>ve_run4+udYoY!f+5pE zcfLO#Y@AYM+X&}yhZX?LuTd7#TJeu<@h8%*kOQ;D@)96 zeDu_{#31ZSlRctN2y_mqh*32G*s*~7*03Fea*|9v-*5n}$3~1@vTP2{R`3FkviU&` z%m3B*NURv-o;Ku>ed2;8)2{7|mU7c?hLr;nuw+$HrdF@MyMO3UGxC!voWuw%w3FD< z`gIcepResq2fI88TaRJ`Pi2GPCHS~x`<->Ap;YYSpNBeQA~EgFVg!V&`6~)4XvdPy z^+tzSFPk~BQVe$vy21by|BZJ##_JsC_~>rQu|}33_JJ%u4n#kh70d-=mSp{(o<*%B%MKNCOcRf&X>2r@hrg zr+4-(U$6tph%(w#;0UEQ>mH#X6Fo9-yshd#4AfcnKx>88(Ag-IFa^%)BCV*|6wHv< zlE)irK1_WIv>TIK2Q563HA4EUzrEAe$V8O9YRwZ0O$rlKH>TMfq&QX>HtjT1JE@k^ zGK=rIndj|5DEyZEEHb2904%nNgVP5@YDYME(gap&tQq`_hC6f#penhKiYhouFF6n? zk#t*rb78DxtlmWlXu6$Cr9bzi<$7bK^~SRMk}{qn;}Y>OCIqm4=~V5YmWU7OfxAym zeg<}Ze9egpxUH@A8a0soFZ~z&Z96v+5Ii8)!0Q$i|E%b6Y_%)0woHyqE(j1bXSWp( z$ya|gxSGU>3$?tNO9%*$?>l_k9T5H_%2Hf!l7Bj6oKNu0U`JC**WDmGP`ie%FV8WB=YTy#a@2J`1` zA+i66R826#@tyekSsT`sW%DDNUC;-85LFVR^|a3rEmmd-6^$n)ct9%) z5Bf@w9@#^XRM$*R*H^hh4ZUbOmQy9(%qc$F?&hq+DtSb49XQ3v=c-hTzy8e#XhQdH z8yb$D0Y&8Th9P~PrH!J@QFa(41t(+0q|Bx^Oi|xeJ0Wy?ND-uZ#xvuYRMX=sBlEC1 z(%HI>cS5eF+A{Qz?uc2b{{avm2LBP-Fo5t0Wjd?Glh@3pQ*aA{c9lSKPcB!5A8X^{ zpHEGU3Qc~7zsyl{w-3PE$+@@F?__JXN#yl&1DsD*rj{*j5ab#k$X*c^C@8PQD z*h4hlY=ipXo%eq}K_7rgVcdooA=C?$P=fQixX6@(-7 zcI4B!j!0-jFx?Uh->=gsafOt$2{>gNSC2?$9dvyfsxPe5%`IwqeeL$=Ox$|Db8*Fi{FrdHS%$uqVw(N9z{Ku^DW50jT-8X{DIylHqYdWPdAZO9=;M zWPywy|5#Ex&Lq2|RMIZ=GP1@J{O`m~s#9sUA0M7qlPlSItKoOOeaF#OBLtB`Z%~h@ z{lUf!QxYa8qEBFbm)gNZY46I?V4+ehC+xoZD~Gc}!Ash5>B|27`e62)7%l48KQ-@y z#E;I#_OH0^)05oA0u%3lr050>9og5SBfz1~?GC&gm#fVZ{3mFNgUe|nu~{xGiw;xi zcjpxrdo_5>pdWv~tX2VbpeDs4J6*h0rI7&4Y>4~A&LI$Z!c`qqJGDsgbHeml|F8}% zJW*=#k5Mb@&ouMT8=uS`9ijJfIQ-Mji_M?lpu44kBV}=?BU0aynMOGwlPl|#up&dQ zp}eaL7Jwx*++>OMjs0H*W5;HIkR$aiSrPl^Zc> z9^db*ic>jRC-ZuA$Oufe-h*GX~_s&l~mA+AQN*JabkV+LAbvFAL@kC&X)Z zzTfeSdf;c`;+%LtvWEle5}d{5rLfp0=QgkX0WodJFJa)Mc9{_fKQg}IBD&AIJ8*C^pK|;jRen?+8$Dw+Y zM$-_9sPdXoreHNC9JG>Z@~N*ZfF`0tn&>}-sBfe)d2sxHk`SgC>S!@-;53K3?nYX# z3|T25%hbcKFk%P)jXvdywKg(<`TZBxiDVOQW8RgRQ4SJ3W#V6J0T`V3;Za}n1H(O+ z)B3-0eqkdn$>b?KLRIjz9F?n6o~z^uD^&7fwAQ|Io{z8Z0OF9=2z*f$p-ufaCZtg* z>5H$IAcjpdypt$+7n-nc0tyH{V2|v^$zFSmA zmp+I6v{RZABUp)N^+`41w(ED!h^aB+c%gD~eR9r;A~ANTShh-rez6F{E8JJCM(C2% z`DRM}b6Y(!aR)I0Y)Y7ls%H)Y{&ag8=-NmqSuf$FT_FFi%A_PziZJMGFng#W)rpfoi^|kQKF{KoczA<3 z@d!M~sZuEOU(1d%&LXrwYjmAKz} zT98%pH}VW(JI;fqK|d@{)DU!HcFl>LmsDJbbVEPq3|;u)A)9y&Lr4lTI3g|P*V0iu zWt_+fN9B>(FCwdwi?7{wmo5w3{P$gu|Y?I1U+!e^b3|TDyl^uR2 z(RQ}I(l8Xz-|28^Bdsa|DQrW|+t)j?-+tHm+JtSqH(JM3Z`L(?&QscR)mlP9`6Adq zB0A|j<2vKRe^}%U_6%u4!!w^E9zvH zLCq@`zq1uab5ScjrG0lC<5T)VqksPWG|s8s{ortT>Bd19bc7LBgWSeY?Usg0{B4)! z+{Mw|b+@^|Et@jgHE$j;pfBgOzH~A`E?guv<(P|Jb$9cE^aZeXz6T! zC+NVITyNMH#3z;-7X-*8ks0FZOj4h<;R_nJEAL;cH;W_gV4Fd#3QI72I5*6r6$0^YL=!cPb)(Wkp(j z_c^I|KR+2qv(qqOHC%k3V=ry#e>YiBfJw!JxZ1O@xQT#(hi-*LAsZHOcPuntk%A7~ zAa7pVlAbRR(NSi`B8=#W2sZ`PQA^15GB*aFFviYDGjlq)cj~!u{Ol5ZrxPwZjFP6N zu4x8&c2D3`UsV_IL^(e9<$iiDqdFs2Q2%;1X8fO_qKvRSYWY9{EN! zrrc_z=C|?4+VDCY9ERyyiaD-}VO`yCgpylLK>58Uafqe4ENP%A;1dD1NsY{_3d5ve z{8qkV5KDnW@6mQm^@-J09FYUoMLmKBLTW{O15a_yk*GP?4L_E(TA- zA6#>OlGT7lR4oz(BrCthy0d!`fS@D&;sWjvVw@x`-{^t%Y$%Ihb99BmVK2$xW@&>S zo@)B%%ZCT_y;eyz7mX9s_>UCen&oj%bl|U%zh#`_a;^!=NFuMs^}850)m%`| ztJr<(kP;awjcQpd!zPN_l%RSj@FU?NfK_)6wrgyvRP^6q;{j=oX^bz7^NV)umZxcQ zqf+-D*R?fRjSt9ERB%1H$+n$~g&pD2y z*mqM19s;*Pbz{o}EhxfGuRumNsJx3JesrKSId=dl?;LB-cDJGdqs!$I4x&*=HMa%%NlrShN7BAqcX)?rcoZEU@BZAaJ zBUNZMmsu6I%0Ly3bs2p2UL4iA^Ksgig5~-@c@lss$>d}?U0unNT+70Wyx~<@)}a<) zOP;th0B@9=WLJ8&0+7wwngkmbc(@}wC`vquRsMcIG(r1K`N$F9+j?3 zQ&Hebu7S_HD?NL0{SL))h-&Ntf#bT1h4#I}1d<|n4O4J>zD$MNbO?MdvWGDyAmq?a zXsLv}Mtn4cJ+!BO9}qa;)Zh0)^N(8&{6EctBnQdWpTUByfR2@L_wwadXF*C7-H*?F zm|IegDjuiy6y-i$3YCcUk$CjdfJO@cpoc&w`{;urge%enT3Z_HgHH}>+N5I|iLJcE z^62DB9^?rBqF;c&Z!nhE8j}UJc%&udLd<=dt`1s&1(+^blI4i`RJz5bhUn^QJoRix ziuYIE0(_gExIF=Xz)?zgrS&s-#P*vSY3fM~+H_yC6JnS(zmO!3aDQMR`&!fD82mOG z*7Tq1S0l^3ZulB~&+wJ_nD|8$ja^G$%C79jrAmdH7Q?wd(=N3ow2A<3&wxw6!p45n zLVn4riE`tKdM7;fbXrjiZ3GP@7YXFj3H=XpWd1NDtz*$vBU(0cl7{4Ez2iQfa z%P2uKW1x0ojvuud=Y)Q?1abh<8 zOwZP$7FI|oD!u@p3e!$%5P1Z@X(?ZCIZ;ZiKDe=Rb7kHok+C1A8*tWXR3d_s-*x0~ z>H#dI;ZM&?R3H%gvX6izK#k>oPYUr*B~9cny2Lbr%ra(6c{DTW zM#MiG+d09%dCwrJbW8ueJ7RO#;S7J>T_FR8lT{NbfBLi4 zvl0Q&quwFRa7=xU?HPbm-sW_hdqZ45$UGZLh&1~qc2j*6;Pho)?c1M$9H!9|b8QK> zS&;fhuM8!AI4a|x&My<=mV@Km!HsKD9cR%$^E3t%4mAW}?Rqo)5poPD! zsdS0|QB_0?{LEy#qViI)-VPEs*s_e$Qn9GVPJW4Re=QklmMfRzm+STQ5>NssXS>3d z?A=jQM?3ClQr1BpaSXOJKQWA@VnyM;>rzD8etI|?)JMOh_r_>)+feuZ*)W8N!o4B(kcx3p7iG8bb6s=IOoEVr<; z(E-tS;f~$NPvy?ZxWxRCT@v2T!WZC$XWI$PuZzl;-F%Q}QGp0b3}2>suv@zY|rORDdk{vSJE&>{Y@ z!i8KwTC)1*TYM}Nq0zaTrGjOTo)Ms(LCp@1)!q#1F(#PJ7&NZtwUW6bFL~0i6;P?c zd!B@Ne{S&8TkP&?0#dd30srd149%z6Of9Fnd0muj6KvRF854Kn_53tN84A%-zA1Ka ziFjFiVlOXhIFOE}@Mgh9JIGvD0{)1yDt!qA7!SE&fSV7w1b0&Wzg!(k%Vd5T6~S1p zeIoBB&T6yKX#6zR+v4}4{Fq5~@Jm=twhcMTy(Wo$l7Mj$z&bpLMh+NSeCzdKTY&Xf z*~i1E3SKNCrSEAXK5O$gzyGY6MQz>zBu?B&@L6bXz{N;EV?7n21vV|v{LKX3JqFv* zPz5etI++gf%X$OpA_{-|tc%tfB0cB0me>clexJ3z^TW{kcUG^n%~43on>F z;#?1sLH+lvR9z9)+!}*el7yX{dm%q7-m*Yl_4_t~=P5u6$-*k>05aFDnm~|+v1}XG z`~fK-$hCrw~t&(80vMz|GEF6jg`1+8ArHRiV-!H%6)cNy!C4- z&dqe#6kpD=8bUTzU1wUg%oPoiAMqOj=0s3K6)9JVio}cLHL>@!XoPAFJW!Qdv^c0ntbxLS8h$%_>!*u^ zmu=;d+A1cT#r92a7uj}sQ=t!>$};^-b471KqA>+GFZJiRx8QuQWs(2O<)}!9sutiq z$Nc_(u3q4;ESY|}^6U(87I1Ey9Xm9%w*$v9(PzDfwJwx}2r*G>*&d62o`x#;jrris^oZ ze--#ohOXCEQ7OBL8#Vng!e>h4bvf5$zKP@PTpT>(I zc&MM+l~-E{+bW9_wgw!NY>08|bU(pRN(Ln_NA3u+k*fJ~^h%anwa}+xX0P@rer1+I z`HXxNt&xCNin#6E-nF-}J*&Bw7;%W9&ywS$Er=sA9$rQAxrgHQ?J?jtdP7>C(rR$j zaNJ@tn(&9eOrZ7;wFxOE!>Ri%eDOfkWut;2*1){1E+f1KPdnWRGEgaB@0dX+<95(C zZ?Mr7%SLM^@jRiO>svuXu&sO5;CZ&Tvdx{m3^OXK+Gf1eXLB^XWoOg>-wU8>Gjndp z4Hm5UjlEQKOiU!FdI*=-aWr3HF%qfCz#7&*Db(_ zvU8sQ+G_bP5bUgysUTgf()&9v(qXgqFi^s@H`|gprc=$PBD0f+g&|PpuOuywo6hDM zhzv0t_$^t=r4q)Y-L;p~N~c$Q8iz+-66=wP+5zKxNeC|G>hI8C=5*Xz#B1P%dL;fk zCBvsd5AjgJL0eqEvS_n)G3haCUv&8CqHn$=CF(E15^C#xO`%oxC0R5x&T7_L+huP) zcF$2*5r<_8wTqpqd0sLQ5y5 zvJb;1mREwWp+CbIrt!|+6J6sjNz)XCMa;4~_D@`){|%zF#F{FVKq3O$Dr5EX&O35j z6;-blr#O%o!Cq5aE zr1RmLlaBuMh#>n<(LT|HMz5x@jV`_KpEcSUv4|%K7(f;UyW|?FIky3eGilO$z7q~< z=V$Po2fedjKckXoxh(BZYMf-vMRKXe|D1JEHT8lf>Pgc5sKHuWZRLw-Z|SjfwG0Ei zkv7xPZwO6&f@UFO>6_-@UY6;+O=Q*4Lkb)ThX-FwaUR>82*Y#*mC33`eryy&K*43= zztQZsE_QC}zU1g|1PbZcks-x;qBEZ=m5MMF>v-Lpw3H?S%?Kn^r+kMF{_!P723&E+ zWVxm9EQ<9FDTzDSXAbaVUYzI{NMf)Sim;QVCNttOBmroz&Y#<_HW?R+hKnP`qveUB z`+wAw%ckUIZxKf`*)z7zCKJ+ILs1X*y>%9370(bQZ5c@&WSR` z?(8(~K1W^){}ky|hQ1V7`TC%!j+XS_9Ine2$ZSvcj@NdTMre#8!LlCV55Q79riI_j z4MuOd&GroM9NE~T9+?6IzIC|YYFl^Hf}PQx_{f}?+Cee}xp_I@?q#2IxQFgG{nUC7 z$^Q6PMT(`HcQPU7_MXwL^@U%Tpx9<`Cb1zxp9;lKF(z3luE_U|Dy)+4YvsgR3blfz zR5o&)vu{QHNM1plkM;jf$l$)%!lVC5gyKtl#=mX9^3gazmK>qgol%SkcDt?~!ZbP9 z`@N^VozYCG}sxvEEM7$nVeEa=)1gSaFo#iDWQ108uS-(#nwT$1#NA*QP-?8)KgE9d% z847@04@UAkviL7TIa&i4SOmqEW_AR`A(1NrA`%O*Sp@rPmT8*egU%{p#PEn^3R4SI zaUfkj%h~3|x$?!u^Sj#S`f~pww@|CmvQYnhaQ}rDrvN8eZS9HQiJ!2FK%lV)JyG?0 z){-0{e7l}y<@lzn&DAqS<>WfhJ`*I#*hN?AqT}%P{@FY(Y}8t84zHy2cfdiY6acPNS3p7uHn>PjO+W5i zJ*er;2HS3k%KfHHNoc`&L4D|8)IGWGAFvU?@bpK8*lviKZc>~3P=n&E&(BmHq{*@X zDmZWiHd;ngeQ_3QxbOwHm8r+gDhO}%<%DUpT}F=+mFFNJM47+=-Kv(B8l8WxG0T&X z!f#&}+v}$H69>EU*=2Z9|HJx5?vd zkgq0N)%7aPNVR`J%M|dpWX@2kkk>*usNq(} z?T|M5^Zr(hn_n`a6P?wl<3J6?5|Y@VHwZNZ<$Us(*gKLgpod`O2j0W2N&74vf38>N zVyVb1*zd8gFlf2Gz;p+Kg(sCGN*#vZ3JcX2AEfY{J8Dcf8sA#Ok~gx>dPA-Npo~nH zdDIN-!Z+p>4?B!3S1cG(P_lK)kb! zl$@cIM*U|pabn3$Ld%XqLbZDA!;Vf|D~p{^UA40|b|ROo0+I(E-B}h;7FNt(d_fl0 znM7`yD+#p_#f-qQ+TKMH>HH!gAK@_@^YWvECMpF1`!Fp<{jY+Ec^hNf8Z^}A1WKSb z4MFw38;ySfcbMok01O;Fi=q93*UQ&bH)S`ZCC!0s?QrAq&#O#K@au+{>wyR{`1ySF za@54|*dA7bqf$}B@MYC9(Y-z;QtDOS^5)MZ#LoKG*L-fr6#1S@ z6oB3Wd1ag4ctgUYl=fF<0!_GSCAlcDVpQ!%;974T7drU+0aq=Zsv=4}h z6JS-Gyfl#{N~&Qn-Osiz1g(7`4qhw_LcaPnE|8r*yv1M`{BU(i%7-j?8!^;k8Kyb& zM^t2%kDS4FeDQdEyQIoZnHsex7PRCrK>$b=N7FR8vJ#eHYyUfuJu5fMZV#Ce09zWsmP++@x6C6=Dj zwQDq&fVlMl@?6`gFWGUBaR-lNjvkUewXm1(6c{&qc0w7~)ISSzfvoFAQ| zRnn?$=HJoK#9n5%ZL`qNg@;2v9KnwT-XY1i03U z4b(AKSqPDmx%XDkb5cluSIc_~aeldP%DTny8x4FY7<619^3-T<7<;II(8B z(tv~?f+QwuYE@W?e-$pEIC6#8rKXCSsORKg1!U}@HJVTwFdj+@yaorrw1cU^DQZSi zz~E03=B*8W_#O%kU^n2NdIjApP|@}fuo$ex&LIoCV+W?E9PHMoc#P` zw8>js^zjre>#pRu{@VG=AB$sjwDrCdWCtUH%}B;a25i1)e`GqZKG}T6Zs-i~T_h>) zv+`|HK|7Y=)q1jvAs#UG%NOoX#L{LQqRpLy^NUa~a&UF*%IcCA-0* zk5WqskfI|QL8Yi+kj>{z>TJ0kE~f`;Gq*mhp8Q*^oRDY1C@8zb=@7E^^{e@p8dOQ! zrGM*p?OHzMiMPs0VAxwoHnT!4<&}=6FufbOuKtNThIpE0Ol~B-rL8dM&{iY+^YEp- zcLt7L6Gt}nzHhc?mMDclA(Z6kuS$mapk zB-GdW!R(`6jDl;Z>-O%GK#)iX<*jVz=Ok3Y8>gBBH*SNBKz(?FglN%nJzP61^lvjf z3!&54z%#(o=(lw;ohlnF8abk}vZekE$rL1;A2EOZSc}bu*F6>#Slq`?0aFf1lolxu zbx&7m!M7=QkL)Z$-*&CXloP7l3V&dJ)xS|~uYeYa1{v$%@mC_R46Bbd&p69ZPgU65 z)i89{hzslx>S)PS%ns=%7mYF}IqG29nWFsF3kw{e@|aZ)R~Z}{W4+k+#WsX$e8t4M zB*J0NNcI_~q{^v^J;eP8IsGOUC}L{c{8QxF1o;xoKoA1%|Y z%fvQopK`6ZF|bGOA|uBgU89rF;6)=0-~bD)ZV%?*etRk*6cM_f1Ax+*sC>NbfQLRb zG|2)E+P(AI=dXX#nY>;wE3qMAP!0HeNUf|7SZOfXf&-SvL0t@Ib^atDR<6nr`RV{b z!OB_U$wHusH?4pmH~>A}W~4}1;mU{F3puZn8h^R$<@(r;YH?fPfJ>(h&kE*Oj9dNM z7RfD;pzYad2n2!{?i^(napZ}%l;Sx@&X{rSRd+~*&l5iNWai*9=Ho(^B$pPgO&^j| z*&oU+;(%j|nf;z7_O%Hi>b?3W36$e}~&MQ+z zb&i<<4f1vwQL>@XTitY>K~lAtH z8a&AF|6)ChB;wRTUMnQN(*$3Gy*<&vS3b9Vl>m-H|ANF!;~)2GwsGO!#FmO{MQj!$ zLf;P3WumYciKL0I_z&jQze`0o9&BpcTHeBX=TOE#sXi`P@t3e=qS2#{l$Oqab-N-8 zZCPjh5|svI(#X(KDAizEzovHCvncaI^Vs%~rO z(W3=k!D{Cl{Is|7^Hs0f4g~X==CRvEAGKqUTuo$H#&gCp)=HVu#Xpa8j$NMqs)Ci6 zx9t`3I#2tu#Dvs% z8)mo?(@wI|Y#rs*$>n&Ftl@pn(na$8b7`thc_LnPN4g`BLOB0}-6$e=SKOk~!U@4E zE~=Jz%&W1cApH6X?l2%rcwAphWU*@EYbcrowRaYfogKBnKP23KZA_t&6G0j*wC|$y zTgxa5VK{}`sjKGSs}ZhC$c-hxKKGN906K^DrQ@rOjP@8TuE!_1d>93t32W8b^l*#G z8(vM$aiUAQzbCUV&4+M}B9EbrACI6&|^K1`pKP$(QI&JPelG}SqQF&V~oZE=R zq~YdF!#;NNTJdx_f4FHpq>a4ff9iWL-gS?M;yD7A9sE3(_T+D=N^Sj%T2SjRWkk}E zFywY2>)j`rv(sW#nYL*4@I&(HP~Oq`ZMpE`F(r3Xi9!4Ji@MdPG#} zu);i&iG!c?+_btE$i_ewx(0HKMN{3IC20ZKdCgdcmxW)HTs{Hg-FbSeop`i(LW2kxSB=iZ`L{eu;t3uNVZd8O>`6Oq`mTWQHz9#_1V4lGasHuD8i%Ffh;N!{-GTQD-3_ zf#kr{ARjGXl~NwYfhnhjGp5Q7GWe57SFLKX#pgf~I1}tm{W7_09zizhz9^+*b{C_< z^(@G&6j2pgkiFn7Qw;QDVL(}=0^j&>s5|<4OQt{R{LOWd=!;lTvvjKgC=iwtQ~k?B z=&Z;K{)(0|dl)%o@0g>q&Gq_|b<+hD0W8VVCX6jJ>${g@d4IPzt*B7qPc-!O7ytDe zH8Lm(6B#pEn%I-$x7gu1@A@V`MIbi|vxHUb$jk56rp?|Tay8Mm83y#W_qTpu6r}t9 z$b6#snP@g~GRw}GqAF}vb%~X(Xgx<5X@t2*eR_!=Ap}G)qjW|nW~x3@e!i>{b74aDlm>?1j>`@ z*?CNd!NpBN0K(K8wpm+PL6Qw}Bk)cWAfB5%sOHLxerJ^h=dUStCmGp)(NKKq&&+u}E4 zgSOGSy9H3)m?Cb)MXM0_n6{c@xFQOJ3qzh2q( zrBM3ILYKGXw?GU{=I{?+vs5RVx4>1GyJJnP4U}&%9TFhbq7_7c z76q4+RZ$=Uf6zmZL#u3r^@>!fxoP+D?om!`z6LHCiS9WT4IUqV-r^*#o)-P6h=}uv z9FN(<@91%0#B}Z#6~D@FaqhL8?O=OFj%xWlIdznc4olF;=9v(MyUr{6u+VnRF>*Rg z<6B;=^7h!JkofB+st*bHr-z~7^A`?P$4zrxINx=RpW(;C9SRoH_tvUoI-JF}m14h| zV*i2YysK#n+62#pcOFIf^0wR(<0k3tD|fiq(2I-_h-u>dv(0PFi>%djX-$c6t1T~-e1mo=kFNmMT+UegOSds!l{}n1ag%ZjwvS{V1 zEl_G&Fq{3p+|c+6Oj;+9*AkOm6m@q5UmTm-oPTzujLJ}7){630R@fdBtx27B-3lZ; zRgQRDH`?f+W<3$z$61G58I-`|*T7-Xb?@t&>9K7g8#=MEvh1>0CmI%k_}$=2v=IFF zLu=5PRGg4U#N{}?^Pe1SNai77jaF7g_meGgx)O+@68`hAFWY;&x}3f1ldR55Q*bZ; z0K`@u?lbR*6*X}28e1=)=BiW`wX$|LtDpobj1)7Fh_#9aC}cR+rjE1@NxDv6#R?@m z#|OVse#n^6S-dO(VE3ycjzO0?%;6`i4Cnr$E4H-x^07tgl%@|QABvclgT`-JM<$Z9 z9aj&+4@`))LPcvdy5}%6pFLRWyuy}QhKtjN?7x}UBi4B#=NJ`PrLiY84Czq_37N61 zt`uwK#Dz@=plfOx_JPtJD?T`=(4jz#oj9+5$IdobL~y#Cj!~rg z%}sk?ey@ZhujCeHdD8It2kZZoDxJ5znJs_BCW4J94RBnMs#S2il!K+~t>d4zPd2Yt zaBUfVH#voVEVv`XLSQI2HB4cSoT#MRXw6HyCR=z`195i&+mAMOSt^j9Q+eS6+ zt0@!r`S$E$+g?S7kz%H|S?}fsH!}g;pl?IoZ$QCjCHba){Di_*Ezm%G!Bxfd0^aL6 zRDm;EcxuSc6;BGdNVsFipNsL=*X>#-Rw~2d#GqT@!{%EV4GB1TLoV?DaBDM4C7xsfcMn61Ca~X@b6tK`BRK3W-bRxwH!;MA zG|oF2)F%}O{OE|V1|};O^Y+QRUNX4)W`F{GV8?Ue_MY)2Ya2XKGt!ht2Hz$`S1Np8 zGz>K<>B~Q^xXG-F!q<~Yd}qG_AU8{@OAFow)~l`;x~K+%h;VPw!xlxi8I;5!k(PvY z?QWP~)2Jxqa(A1JrsNU%;aJeMuMNQ=umFmqUR;)PSF(;AdHOI^m=lhukW6(&ov(k}1RRHqGXJdGb#YW$q5e_8$lc8|B@Xn>OA{HD2?tTW`if*D!tVHQF zgbF!T&alNpsgV*fhTrOGpaQ(OJ?8K41n6I>!6m=dSjaXhYt3s&$l@3gs>H<@zSBz1 zJVYC!nH7lSQ&+ADc9^sl+)AjmT)#a#tbF7}i%S@>I`S}__}WI5T(Vg#!JCCpcvOm!MvaeBU9oL=3A1CvR7_H|%b0eZX~U;wAmXL`l0 zYu5`tdPI95$t0R&xkuk6Z(AxKva)H;;4Kt+am127Rfjk^D=)d{WSx8Ys2|-Dlh1y< zTQM#~4$#1!lB z88{srLf=Z3i*?T-ay$&ljVyaL|FQC#dBF&?`XqSqY6@p^+5;YMBxy1#x`gUbnDYTR zX8Kx<>2BF=mmjU2dE^FcUbJrClNDV)bFZ#-7&%uo4TMjTHGW(JO~?w=1a~%vk}>=! zjbB;sx?uMIe=k5^_WZIm-$;UMRc zsOzokB*kj){lUe@A|IiX8N2UcFqNoH!|Llkm+#6~@HRR>ux; zM|VU!St!{GNN#0ix>&x3+M&l7OLxuz@;F=Ri5QfiH-&8?3vU<=p|mHsF5GmF-2E-} z@NDw#bNiTv_3t|%H=PepF+A=d+TE!1_24kuqeR~vBQ9<%*npV`kjwJV-uONjW%^q_ zgM|cAi*#!Sz`ZPNg5u_69MU3A5aQL})#z?mbc}!dtVoQxakv|#lDu*VVwWtYCPx1T z(P*+OUW9pt_lj>P0hZk_# zPVXeSY?F@dbuGkQzWj*&8bUu=7DRge%X0hWV^H*ZJmq=lnynO^X7 zg{!|}f8M+BFS82bk2U>HU*KZ1Hux)z;@__LNX<*4Kd)oXTNOn)lYU&E3R6nUxVI`{Lq`{K9ss*Z0Hmg>9KM2M4do z@^u9EL%xzf{w)4Uft6zYlI%vgiU-vNuy=pq=>EQ&?EWMQ(LLPm^7c3w1zp+5(J{dFaLTv(`ly@3f^_@bB6IBI#D zj!M6E2cFMs<6roHglP4N5fNGQX4l|!eQ_f|fHwZ{gGKxi20INmZm{z$aD{8k=bep> z<-u6sq|7t@^7h4gP#`chww?(f-));d`b)Ew;KN8u*Lo?1qLM0jIfU5v-X;{b(X2Mc zr?G6Xu+(Aau_keu_hEJ{#M_ncWltfu@H0kdwFmz4#mCg`NZi?npT_fwZ#ACaG^$3m zOE92vrnMue67JgsIm=e9wTNH1>kN2H3#RT@d+GJxOlZieC9WZ@T$xWf?3uD!od z3X@ft^u$)M0u_c!(~gd2Ar|ysXw8W6KMr+PFaPkfY`r+a(n2e8t|nQfdL^QcnkJq5 z$AWHJ*DiwtljGBbU>GTX>D^HJ!8j4o{^HZXl$3Q5l6Gr}@KU++_Y?oB`)18S$8|@9 zwElxG493@=<4Rb>Vt#CE&GhW!rv7S5kt3gYXmOx;OBq>jyYMvi9tg(sy>wthGwDko zB4=sfXYJ}Ne52P<{$#i&)AVXT>Z;a^wlvLhVl{FRdr+cJnJrz%3*S&Mr=rWYR~Ve% zUJ(>xjmv*yo=OhqJ9fZg{Cagim~a=cI5GaJoEGw*mG_>B`LcAoZEIE`-n>8*oXbG8 zJ=rlcTgrm;MI}xBr)a0gcNrV0SC*uoIkUI-rh7i0GgE9n2XA97fwf`*LT22wUxHHg z>_}WmZH)Gv&E(IS&hMT;17A!^dFPcwqBh+0_BHAi1(jgi!NwXoO(DRN_h18K{D}iFTXWjm+$ePNz^ZQ zJ8#?Kjrxv}&+Y{Vq_1`^D4G1cSAE`F|q5$2X!Q`qxt;O`ymgI zb)OaDYOK(SC}ZLgriWZ(vv#H{XiW|%U8c$LMjCMK?#~wZi(jY4b+dRpe?Co_h-?ir ziddDCSk8NL|;|>A!QjJ|SAK?Tlu@}u}V78cDaq0y){m5KDF=0MGBvRrvX$&#}E8|%(dFd z>>C7h&kgg~F}3?uhV^(b^lP9yYoKUI8P-R(ds6Immk6ODASu2wch#R_5#G2N`B5ZM*!geL|YQpmH>H6saSfSrXAcagR+napl_ zyPC6ht}E`(>xa`I=qGIPJiIbGT=oShC~ZC)+43?Ld{3Zb7y3q!xN*Qm0P>O>V_*w_ zX!t%ME@a9)MS=Zz9lk@H*T3WS#lLQ{f^(4@_CT%8SLP?zWV9w1z3Z-J2UTVMQrBTU zE1zJ~GSIq5?*Mmyj|>62#08h{Q;6ZW`89#C(}F|Oj|WPV{K(xwIO!7-i~e$@wy;c2FRu!qrvh%Z`&ar)v9` zpPJ0?!pXZ_u5_|+5xw91 zuw1poG=>>&)fs)6d-Iy(-kYW}exy?<6K={Fw3HaNrX`LU5jCr@!_~M-v2@GATkK}K zkiEY=AqVW%HaayU+PdtcWT_WK^ zcV~Or0z?8Xv(TJxD5+3OaNLNO{zpSfd-Vxzw%VrI`98@^sWG@=bAX=uS-21Lg*0-0T9r7@mHRfxg4AJ7=}s-BK<2FYrD zV3V*+BLcz2l9yVxP&LjSTZ*4~?t8=Y2tCz#`+2pLITqWgT-C%;M<+O_LO(dwb_M*1 z(wZA2=Fa$SHCK~5R$9M0L-KBa#9t3fHB*}CY?T+=BXW(@k4OWLj)zb89B{vW$@toO zrH;?raI~e-_wFCQVxn?Y#cA}qr$K*G zKD<(8kKK1$Jw!4H+PxewmnA@3h7uwG=duz(K4T%{ZoBL4<|h5t;q>p0R^mGuX=$pn zx{IRR^Q|)y4Q8JAa@JCa!a0h6iZ*s`Y-_C_2z(6^D`?Zd%B3Lm8GoyGZFdGbx&ko^ z(gTKH)m>=D?6d>h5wsvbKFEbRea8yy(NI!_rl}8Fq9LhTCXAq0^35-4sJnx6UaMNm z3{cKMQwK~VL~)yA`%`A&seH$sg*>;mM|@c2Uk(H2NpqFokc(SN(l$2I38{edqPFIf(DR>IEh4g!$Z|xb1uob-W5DHWnEb@+9nB5|sls6dO?1Z<_ za-Ijf!Yq?Ywm_)5(n4zoLx`TM(+p@5NW}^6l*E>VY7!ccv9E+SnH1HEOB?eGIwMVw z(}Hf~(?}~D#EIkjUUywOB4=_qTU=daXyyS&vF64W>pxn?Fa1+4Pora^8hPkQ+z(L) zso+ipA=njo_3~T=>F5&tX0A@K04NE{Ll2mTdYiMc)f#G2;y;3WkJoGV$>&n zM#%K?hhhEIsWshs^)w$Ow^JruEM~ZH@9Y5+crX9(=qVGIf{>P8fQ7fMPNClxK>PZB zf!F&I9oyJ_H$!A_c_p1? zksaHQ4yoUDzNw@$d*mnaB_oT%3QFO%+YY-9ofuzKzcdl}zGXC|%JL}kFojfx?N#Y=2kM-@LK>W98S)BKegcb(W_)rq1czPUXO}xr@%)!E&(MuK z18_wIseM9>fK_!F$Y@YC&ML8-@0uBg`}y$(V|GK2G^pr&<+cHNoKC`0h#+aw z$Y5x|0W!E^a5q?XSf2a_+zX*9Do1k09cKUl>z`OcwS$DH1n*f#C8Y=ypG~XkDw(xW zJ7QA(j4#>4GAdP`{LzazONQ&N+2hFeF}X!+8g%MNY%(>9n(3I1u1{d*$pfq~*Rp6d zc_Ji=q;fl~l@HukHLv5Vq)u&G@GWDQkBFCR7fCrpFPnn?0xV0#7S2G;l^C z)o<_}s^jaJ7U85B)R8Q#lKX#bZ*3vo4+WA8xI3RLphk~iMeWoQDB_^IqYi*?#)F7j zTXGEBk24PI(baibAU3Dmv&ZX{r$Ng|H}GN&q`%$D6jInnUR14$#%}1YHWREg`|L_v zP2miKw~XUkR!IklnRnD&{Ya9?;6+{Wzxhi^u~tTxu=r>9A8SpddTV&n+{fD#pJbKV z^@R&oo!2Nq-DW9x1~a!Zt7B6)__V08A zZxmP{Yy-vB7x>yC)Wdee+eULj3z$nJo!|}6(*6x+o%$=mjqv`?I3y!N znO5)yGBNGbQmL}ZTWe7AzI(i=synu7Zo$wgUDW~?Tep9;9&&t*xAxV+t7aMB{9nZ>nZ2JeP@uoI8)1O#= zbazraS4*d#vJuERhgaM?R;Z2`yUy^+u)^(wWo(0!pnQZl7G@E#R?Y=3)%`Dem3VOp zse>YucrI#cST2{R9BsIK==vOsI2>_YgzfdQJq2>aoWIOAZUaUe)dgKmhFO&{*0`0f z>lC6zbVLTm$8fe`H+;#1leqX406BI4RrFTz_qbe1c>Xqb1+H`{eb3F9q4fESGT}*=pXb(Ed z=V?8?rMve_7XTWH84(?xmXe1P)^?8oX91RvofgI5d!y%zKWo3Vn)x76)FNf*q(h-B z*ODatYR!5G&qI-|uc`P#xF zH8oWd@knWD^>7;9Uk(c_UiIDOANkdq%U|eC37o^bNLeUaaM1F@L=o!>iepD zO7BW}z0P~Bl1M9$p;%u(o?uE7+|4Z=OHOX7TSu>-4N`;PM=*#Af|VoLHA4=IKn! zsiIG4pFdnJISX3d3q(&1oNuQ{VaDX4yB1{7j@I{RK=ScEOA`7u*sRpf29?1-1NQ{Uj+O+H z{|xO~f`igMPZI8uhJale-EVCzJI|#{9#Ah*=D0Lc?t1|?Ad4)Uz&E-rv`zC1g|9V^ zTZA%*mY-sT6&SQf{iN&V*;!u8$}6ijD4~|RmkN?#D#bi$G%6@4r*0<1<%di#49g3|LV#d;>Ixz>sXtGYzs}Xn+|6cI`WyP8;$-;W~ z--vW)$Mf3%q95mHc>Vdbn)CVwz0>p9Ar2ees5q~wTH`HI7WUHvFG}AgrEq47<&zyT zlOTt3@?242IeZ!hPQAD?2h&1mzCoqH>zZ}7L_}e3xB~GIb{q6439dFj9P4{zSh9$K zaN#@qqm~K2Z|#Cd*x*ZC*x(1TM|xaz8f5pA>imx)T8ih%+0f{rTAvo79*R~AhSzsr z>Dq>GI&0)Dr4-wQ@zI}F>dw$bx1he~Q~o(YXgp1YL+QmBCMIAkIK6`#Gkd97{a!Hl zBcy=SaNwcY`t@-kl7RY*@8p8UWZX#3U)=KNOwFAQK7wlPxblE-@iGpRvw3}uU?oFd zIG1@t99$atjSXX_A$1}-*No)dHInR?M)0s#Fyl82`&(<;jo7o82;ME zg*~uZh1#AG*?j8u;O`p?P)X{G)#U9#$ZLjTQl8${VbsT9Lrg(PHz=X`e(H4jcQ`JF zNeLE;cK|`r$)>TB5sQr^Q%wg%MboKZGH!E1t9@kIttinz(u1-3(=0PCzvvm0Br z0#FQ;R*G=^Yld&t9Yn!DAlSrI6{*Vl{zob9yS=(&WmfHI;9qktem5+GZvXJ36UqGi zk1MVJL(^AA#nm+365J&~2<|R{Ft`(32A2ePCb+v>@Zjz;xCeIv1eZaAYjAhx4$phP zf2=iho$5Z_RduR%?S}Ka*y|y^Ca_b}evzUsRLQ?vC}#+j)JXnCTOuoSE)|X0os|URYheoL3LVTHQ>J=x3s8m_X=&&OH`;hS#(Xe{{VA{Bp_|w z8VC=ZF~Md=oIw|vWy(`G^%Uw;3_Txfld=#C1V6L+=Pb9KBS9Nvc=Qb>2LMKypN|F5 zLkp-e0J2jrMd*gZvq9uL(;u1o2#zs!8~k2RtPz{YN%P&8?~krq1OmvHsqGBp$IiIa z^9tC}_2ZVY8JUVkdlTC=@^xZh2~Nzbm6ptNjX#Ug%>Edbi%~0f7Kg>Ke`q|b_j!ze z^2u)FZ06-zDc{k5Y#C$?H(Nujom5^*uKXeQi&f=HW!sN~bMjLAB6Gnk0h+{%!IX70 zwZv3!Avw|S0l-*;-4CUIsW$5#*Fp;~L6uO4O=1(Ybe$XT-Svb?s`8TuxF&TDZG32U zezlyaFUil4>QifvGls=ZZX{%$rr4Wo^NIKubC0wD=?B8`Pte-)_ zhWBSs;=g0-QvA*;CMFYf#%jQpr1+-R9_CwuAXyJg#wBhL8M>vMPv z_m`=0Lru(6?gTNMgi%l4Y1#`!fI6KxwT7!;*l)k5W+9reWAT;HNOap$tr;<&FoAj8 z;oP80sI?CUh6(jIh^t=|8XAbEX0s2FE8X0XzJ^mqWa4inGG--yoxJ&GpGmJHF;qV$(l(g>y-KZLr{REc z+`lww1~Y(|3&XUS{zuH0XNsQ4CaDp4a5Orl1R2;6u~4u3DcEv2zq*uC9FJ1lIY7k0 zFYkmGP;mK#)aE`oix)lYzV($X_%~NV0JN6p|HniKsQp;Au+B}UsjlUNEv*@3lENA) z!#KHj3L37!S!#`k4O*#14F0!s_hYe5lbL^_o?JR=*M=hMSTV z8sp_DrX!*?aR#ZydjK;(D=M^#n$kEkgmH+cK z0%l3vIRd70lgC`L@p&-@IEv}b^6Zn_RtEpf?H@SBw!KC5>Y$_W9^LGh$~5C ztw;IWXqQKW<1EI?-=Ird0P~`^lP_Y;d-Ckm=a!=X^x5iZ_m`psqh;dlK42WJBM!_bqfIIk+9#O&np1V-`qUW=oB;QIZSe zg`MK4O)A+oesYUQj(<-J!o7=RW@K9}AVu<6kF!utWN~QoKK6U3cUQIciuHM#$CEmuYg1%|(8MWQs-58`U`m$4U>Y+l)ZB zBXwD}^12Kh8NLS90c|VUuYxj1SeQgXlh*1W&;6Fv9($ndUf>i8jzpU#NzH7Bj05~)Y<_{&j_hqGd=oM z$bB@44}lwv2o5l({gxwn9c-fOcN}RmEZ#Wn!y{JmNHe9uB3c$0BEz(D4iB8Sq`_9g zaUpk?3isqUOI|L{-SbIq{C@qF$bCtR`{g;y0L=S5fv$T$PVowCXr^KURYG}x z>e z+w@%G4bn($RWphnjN*Y$ygHpn6Tp!8&P^ zxk**3#kpTnx(H@g4rKMf`i<0A(1eMg5(I`(icns&)yiSPr2p%&ni1KnOetd`V%|p8B*RlOpEZsF=hy} zxOXz|@gL!OO9k_1DjQVvY;pdke)ySGX>PX81?5mM)oR=S>j>tS#1$W9+LWZ5s>?ox z7yps((B|)(guRt*P^oZs18#PI2}1k(12uRHb|tk$fi<{9HUjDZM77xSO1~AjvGO@w=fJuE;6^zNrS2-=f6$a77zEs6^3F&BU}O-)U8BHx*jLE`bBd z_?0{nVQRj376#0W#iEPsmFfSnQs1_D42Csv`B*G^*vIzp{^wwL^3&zEyiQr`DJ@%s zgxOI4H^eku^Fl8IjcG6Q=1u=?K4%@`3ONU3TyqFrAL%E|xrVFU! zQ_`+Ko+$E*Ftb=U&tSFFdd*X!?LJc_%W2xPnn_nQBWS1XG9%zkoexXDzqX0+4J=J! zpQZ>g8RpEVv%gdc1b2v}Z9SN!y!!-+30f9IUPsQ)v|y67+eimMd%e)H|7~6}`}8$i zD&0L}oe*C7t8U+H^%y#I={XAI6`6O^***zssJF@@PF<*i91m4*=3A)ji(Lk_HCUpx zi)gG)1gnZS`+Rm5fG4`ipXhe`s*$T0o#DqVpgCM`T#fI%+W{uoz=1$`u~|a4#RF6N z=i^J~y0WA+Dh(i{fVpHtxb(=Cr&AlMpzekCzC6mQ9AJ7~hAk7Zr$+~|=O$fH$w|cG{ajvrBr0ZftY+Ld zM-C+M9}?Jv>_FdhnnLw zzs5R7DheabjNmdEOQA*QJA?MnjuslRnFrjZ9P^{A8EQNG%||fXqQ3s$0gTNN)Dy9i zWn<};>y1Z&q?Xyw1x}lPl^sP;g#eHDDi=%6~-S4bt-^%3xJrMvDXVzenQLST2RVqtSo13=;PLh9eu-(J5ZdzUz< zjW;!m3y_7L#HhWt^OVkX`&svS=bGrg^84nbDNCgPbj}vVmnH(V2#$UGy87J2ShGCp znrw}l$-bqqPM=42&T3WV5p>_i5s^d`9k4 zu&q>3RnlWFj{-3GL;Sm5B%wB~-8?9Zok$T{3%rtno7(R$vU$_^C24&e_Z&l}k)afk z*JQQdWx}P#@9{3{pz(X>4kX<>9!uT{Z5l^{Nd3JhiW?AViMJs=R^@f?+uieKVtWjO zomu`}K{yf8XGbh1-Zf!rSei~$fr!a6j^nwB0R>%%ZDT2%ZlC3{lqBS?8; z8rL(TcdS6KZIsRW4a%3EtKXz>msnOt;bTm~gvy1HnaNi%7{K#05}OaFe{=E6^dl`% zBN~|{#Ze@gb9!6e@1_a4u=NmfE~E&rTbqbaEByBpa;qMzU;GyqcSc(l(92LjbXaeD zx{6{t*BFDmhnO}3RF%N%{h7S!!jjXQ!~sr`Xq#0iU;+hz$3XdzZw#Z%I+S%yI?>!- zL|c~49_qddFGCb8{#^sv%C;QgQSAW0?y;q}61|aCUzUj|r4A9@v;`yVqtN3Q=bQof zEF^`@6j4?|lf(t+hYWb4(-egu<>1TkUMnIRmvI}jDd8!uR_Cq&V&Ap?Nb(&_0Fkfv zryexn##*MoOPzA|ms70XD)M4aGv0tRY54y1Z$H%-bZUawdza8M+32RFtwvzi%1 zGBehRgz}DM_&6GsTrZdE^QQ1+&*4&R`JqxVQ;$=7G5dU{ChDR(xO~UEfazL=UOfFM zE&BE7B*}UJt#hJ^R^v$#nfz<*GUkI6q4R@dQ+1%SX=pDpxrX|kYL)BLT@Ur#c-qmU zP?V90XOYC&uryq?cSGdFvc!2{YzR`(r&Z(iimpU=|8#9(cj}&Bv82ncUC=6U*((ii zje>GLvhT}5&zgXb?|KebI`+MG_G(}QLe=y4K;0#qIOTkkG4GEPK1jShNqZU9BWOr} z^seD;C-L_fi=-kW0VPQ&Ea6T>FW*vdQC*5xxD4!l8&%NB-UgZTLo7BO$lDAA2a z8$)KQ$ECAI%HRyTv^0^a#2N>7liYaJ=W~bvfeOC{Ay6>tA7($d-9N8yn-OdyYNHb} zWOIO@U0r(z$_x25v>KD^w`OMR-=pMjKh6(i2BRpI1cL*g&tno}dXolKEhUv#P^mu%v>4S(kE$F^+HJCw0QJ^5?9Nb6qt|WC=dPDhlJ&DKj7_(uohE z2h38LI0fBW@Lkxw9>Aj)>%b6nOLtkU7pxIK-OH2n>9RO9A~tA+7))6^TtTvN^u(~T zeuJRBB)&OdnIH`|5%*$f!vo#^u60XTSJ7uJY@hs1o1(-%ACJ45bBFIRcA@E_>^3f= ze^5Dt@FG=IR z#`Ky`UW#!{Cgk}L@~P#|KJFFnx8KHKv3Itu{tn}(N@N&cL?dCWS;!}Il^=v&U;a8Z6$T`hO>iQlCt}3Y}-zr>sPr*zVh(~k;L(@OCaZIoy z)y{Wa++Et)Dm2HnmI&dy9&C^g!bU{@&2B8&$Zw$XeyUm^gxmv|rkF75sAS08y6$c+ zPDO^RjxWE#fxz?%T0zG{w$eT!AV3`h^Nhc;BA}IH|2~}LtA|dZ46zDAG%*$t@1YAk z4_Vaf^9w@Y=_^M+f&TU;i`e%>DYojiX(+=U@VpRB`qf79d>P2;0qyvdYCvG7{H6M2 zA?)qhd+yrFzh{YI@B2B0F0pPVs=Yh5g~@TUAP(^}0_uH@!)*B#6}_a@=mCmmiIj)$ zA~sf6of!lBR$tubgD5Kf$b#xg9BtHJ0oGI)rjkFGweUdpGy*{>JPOk>bv4L`*aF;1 zWFA^kSHbHp#davVgg zuvXk`!`LRA5Zl167L$FRrNor!FNux0{g`N}5i3i-*cd;K8@!Klf5i$8>sC3E2D1G^ z7d-re2yE;p-BDkd-26dUo5n=`nb{r`Ar=76zb|G*&cRDcCH@`m+KKp-5J80j)1Ajh zl-ew&rC2Cd=ou(slAUu@J_ksBk3t#42=i^n_GiM^6&Q}E;pF$=ck{j)t43+xNH(7x zaWEsqV++bXpvATEMI1jiw@eCRcy*0lX`;g8?JMeB5`^89`MpAw^(8-?@i6)aUE1iv zztiGB0^6k;Z zG-5@xJyRQps4-haDJZ_N5W!|Q;~ux6D`+MCB;}WG^c@zP8#tDzX2=qxr;E?XCaImq zbAN!schLbBYmmnYS-nK2#z1wA&i}!N6CNe9*6if|DB_g2PQU_w>fglxP!kEod^r!W zQxn`gMzn1gcv(%tOM%QOkiB_6Dx9t|F5^Nmt9t1KHhOBRScne0P>;GHvLpo8REp@T zx%s?qQzl4?@mU5=_*?$cgayx^wTW!wDWxP@0{P^Jp(0Rlj*7;(G!&l##7`7%yO(Jk zr}yRJJeGkQK^t_y`#pr$15zd`pxG$ICiRu1@)LwE6Rd#kJBOq_u{hi6hX!{q58Sd< zre%-7^)fd?XlG|d>kPdgvfzslyx#=~cf^KDVQ?n>ZU1(uO4VSx*z@R-a|jvnS?r^z zC=p6HFu!|$AZcV8DWlUl8HIeNNsoXQj( zfq8iUWi6xQ%q96NY8=lvI59;xiU&5PB6_tE`Q6Pp;>0NFAdiFn`>&ap`s7~|x{lt-{ zVRZIF11^L|E2MGXUb+lz7?R9>6 z;Y3L55CBz^|K1^W@<)ol%ngx5IlcCKE{r?w;zeRTTnTQ#AbYU|)5a}5|NW@OKWhF| zCkeKvgEl!R|EszP=_g4N>oPeZ{y1#IFXH4zXe>0$Ce;DBa!N9{%RWXT3&5aGMKl%P z*a=j*^h*)OsElk1M^pSx&%j&^%P)Dn5`)5INjRa<1n(^ZAtkC^=KF1XEGniSDM;>; zo@uZ?Bg;&+a_5a=Kjc0PQFyMI5nVpXB_6alf%1xb_IP}_<6m&`Pe##P#-Y|mhAIg4 zHnZ$={=3}tfMPKKtEdLhts(ZOikwRT9~&jfuSvTYhxwTa zN(~@dp)SiLnCyH342h2s%ygh_oanl(p#s*tA%Zvikk4V=Y93W+oIdy@=Ub#|P8om? zbgtz#o(*pZN2MLopE;Cb5l9;lTpM7Dz<0Hx0{47`4OpTA1|^NJpPG%~5#Z#BBiC{m ze^dXKs6Im)t~5$g>(6rrz)m%alp*w3pmy zIoa%5Bd(^As|X8lHVq2N3W`BwJcn{^>Wl2f2*+S9sS_W-G=&|lyw3-4;C#8>y-izu z9Hdgv_*W|62N8am<~N>V`a(YgNi!KReq^eYL$fgRF$}IB!dNm1T>*c-!iOh&m4*Wp zRXMgDyYwU`Nw)~gkNMUc`I00c=tV?OAbm{fwvhX3F!sCLK@W`le`C|Z2DI7bX1YOw zpAUvzi6p)Z$-R#j7T(s{E=?B8EEa2%9=wQ>&O-Ev2Hb_LSi_(4;kmI4tr@VwZIQ}| zCt8OO*$9y1S}Z&2C7&uSJAvJd!` zacSAz0s-nfk|_$oOr&Q~#C0M%DCDnlUhT(!e#6*L+1@;W!%$jLNrEn2_S^o#P>ON| z9Y8HGoCd7&6h8D$%irk~59Vd@mH$lS6_nW9y_j@j`!oTyH`GJc(!fD7pwiE}$k89d zTCx*Lc=u}dIRTRn5)DPlA0^CuANh3sXSUIxxiT;dklxE(fP1XSt!5TOjxy$(xFg=l zH%$E;erbmrQQ3BnmIC~sv)^*8UT^s;lwhNC>QJNu z`Cwb=p=satsY%fVpOsH!Zw#@DcfKEN8-J;L(JHGzPVe`;-n{JYzaB%21fC$)wr#zu z&Y|;~l!&RwFS3_#fcM}js<8U?T{Y-aB}vgNv!+O{EIHKfGxCrr+??IeD*YTNnvf() zq^VN4)MEJFP)1>coUhdn`KO1Bt=H# z4gBu&O0Z9lIj@y;Gi#~%FJY-=-+~8<>A#cGg??iKu1_7Nj0y!g%#<*B6-u1QhUtkd z!Lnyft~ux~hGBAS#g=Fph=!ieIY+afb>e!P6)DGzU|{HO(Rs@jyQn}T6p1ue<@ zu}(M~Ockw&(7!MQmz=Nz;&H+&EQG@5w%_LQ^OUTx+5L1N>?*@e_313zw0>Vu6Pn5G z#8m)}yiZv!FER{VKDIcdjpjcvvm)YUD<{;y=xvji!d{_-TQXYGA_THQxjqMGs4OJ} zk1IKbxrcZ1JC0s|RYfkv44oEF=>Cy`=b#OvqEyhXwpP_f#O<#~haEBX0N z7L-S9X05o5U)~Luk+iUhwhTF|(9O}IEE-QuG-&-z^n0 z!a;?=GbO(hXFylh{$Lnba~jwSSP&ee@E55+<;Sb63NVk&w^3u^LYZqF-CsIT1GJ6e zEFHiN&iT8NTY8-8=tY>v`uG*~y<{g=b=QtK8%0cYfwte$)fY!tgzmR$jAYK=&YG%M z4>oD%)50%53-FN+S+gyxn9FkMpX*7kHvPbu#ii(iJ5lS-2}_}!Z#!Lthrq~5R5=BP zCA}kA_MP+GB9*Ruznqf&CFx&1eUUZnE^D31)2f(*$D9KPjJlljim0%k)>+z?^0HeT zPiL*Ie?~CjoJJ(!%qYWdlyw4Wmz{k^uw=J3U5FTzSI4M}*1E`vKmOpN)`G7_VePM* z5uxZ1zz`cXL3u`gG?kSQFLa0wdXw#VO>|?%o$p=?miepHb5^R@Al}Oo^c(OQ?a5c- zIi#dAfwId?K?B-$nZGf}j}C3-=fDtr=p1T1?^avra!1s=-MHPU<6ICq=id7{vGwXY z0NZ2ZchKzsBbN$Owbkt;3J*jiPUNE@`G7CQ`0knnmyLlWjE|XtW76&2ypf+9qbQ?O zvhv3o(i`F>CtKx|z`*XjU_PZezrmZ+W;`}z2D5RmgAUgxAFo08^VQrAp;t=0O5y96 zEI#1F%Xt8woo+-;LO)6-%Smfrzg0NR9XZU+cxd&0bvD5=+>6)KtM7qd930qcj|{GcC9qDCT@RK8BH2$>l3D>9Yxce;Fm&x@`Ol+~kJlAY zs)_trC;pUOE;;9b@HRtiGN4*(5mR$fVPeNL%B5A?G zxm6x+no7THnJwX+@juj=3UuzSNG*(`WHX9|H}9n4z(O(yq}rszlGCYz!#y6D>uJ~A zxsm1Q#1oiy0F2Fu8_scBTbjjL!N;xGC)(bQ_3d z6HXWRWYfZRQjTYuf1s>k=?+92p#Y>i*|I+M34`Z@5ltI^X-NhNP zA$W9uBSP-m#nyrKO4^xqj$3YuSSLjtSvSN=IM67mA`tx;CGkRj%{g_*&~tem78~Kq z{g+qv#1!W;#!BjWjA1RM{&-}<{B`^1RqEjWtwfh>V@E&Xx-0?a0}cPKT)hF=+=TRC zSmlWIn2aRylNU@L`T697QNlFh0sm$F!O6ALX%pUbAH5 zTl5->qVbjtNQi}ZVQqL%>a>m+6ZVV zxi$?q&!m2`J!TAjzse@}5ZX_|a#g=#kv(XeBlEQ%zBkYy`S(?@P<_u~g%d>N#U~Ic zYiBc4a(&DIkcg~)0W64@RpI{oy}w)eJDcg^=k}jgpRUr~rznov#AF&k*#507f{PjR z)^;#hLRp@a5NDsI!>;Qa6CzWeq#*Y}!+Sp+k?gbcG@83AF@H3-L4m+=y}~=lVDoB3 z2tnW;;T4pOi^d-WAL{&TyBB~wz9zY$#9Q{ECq@4#-@2s+S!~EauL%Z%HpMphT~b1e zrJ$Vf=@zkrZ2TF>Vc(^8*Y!h_W|K~3@z0zk07{mFJ3)vBZ^820ho6D}3!q8%!H1j2 zRm0)jsg))xB?66dXc`|F*-M1z{d-<4v0=p* zP+b^<99{ln?1Ac{n7-_e?f%quX~n7d{&DqMGx6pK=#s%dZJ6-%c&WGSSN&>R@Giw7 z>|M9!Hx1;aV;OC6M@|-oztY@z*X?g}fpX~ph}K`c0-z*aq&7d*8X$(a*41j`M!9c4 zjBRg3UfjPjywgqjydli~P7uaYokC{*zn>`hxp75`U_|}XW#>kIe}{#3d;nn)>av;DXZeN0qxRc-oK{Y;NXIS)(NBqvOLufygs z=N`%{!HeMaDv;ePOq*HelWVKQ*pI(k7q4s3nZzEAPn3vbYKD{+WSIJ~1dFm8U?`*{11( z%rHA=mVO7O$gP-t-p3C0e_4tpI6>=t5G30uyxiZ9k~}xH!7v(;`I@i?w1%BxDxYv? z3CrDLBo$x_IK;lvLtVto!(HU#)rm?;Bck~QScLo5|HJ^gqDr@rkdpEsQfXt>wv zKnRk#YS>&4?PB>9+K;^kce}7iac>vbvOn=#`D<8ntPA+3!VS`wz>`|iRtm(4&SzO3 z8WbS=#KPvXeJYY_SqobdyYm`VM)MQ-+cd&ghd9)zGK^k7m@V&+b8jfpMDkAf;W@gi zNLS>yz-Zv<)a31*2};*ZrX3rpeTV-wY;fKdn0Opz*^b9L!|e#i&o3w@L~<&dAIbZb zY>r&|mUQuxn+T%MC+`mA5_-JRQ?I_;X5rpzSBVYAdx7rnDfy>Fd)Go?4%Xz{@j>jnLl2ZT>; zXIQo}(s6WIMhy_D7=P&xHI635{~f5Rj;$if&(b!MoaQxt8rz13Haa>!I({?pcrEug z%j=}W!rWrOE8A;0K7#!@%2QKPrJ(nR8jJB9Ya3#&%Pay=%n(nzyjzwFMajXcZ=mM- z;1sBXaB*;IJI@mVSJ3)^*y@t~zUQIs14gvTVef$JUzxd90sQdL*V*dB)f&6}&f1kT zcjdL8F-WR5%3ax>J_YTaJo0aEstjsaQR?l!~cG z?$u^fwdnZhA{~6%GzB7|EWOL@tsMR2&|8-S4Hni?`>~G(EAM->t;hw|PE)K6Mx0M~ ztIqUozxB%gV!LSNbM6HEv48A+*$3GPbI#rM@n-!SvU zVj53KUCl<-1vdcKR-kdz0?B{V`CQX8)zQfn9A!Fgl3g1qAeEU?3M%|NqxnK@38pBy zkT`ZRmZ;#7QGBUB80rrWOi{rJ#IBzjm?A#n|Bf>5)Npuyfv$bv54GDs=oP&xrQHQq zW?m_l%UlaYUoHBoCRKe>wjbCg#~JL|j&9mdVk%Hxwbon~hbxKuj-r}Q#%9&9JX z+(o*Fblj{D3%f%wj2W%*c%1WGG0gC|wfm|d<~~}74{c&%eS9+|ZMUs#D`j@pcFi_9 zl|_Bh)(`1X83$Jz;&v-~yNeR;C+;;b<1X&>OAJQGtz02}0t@;+)B@hZT<4)xAx3V! z*KRgMesnyYe}}d=!F)O83dGZZx_1;g!Uj@(cv%qIt?2A__Q?-Iy;i9Q{NNlRldGpA z1-LP5Pahk146ce;NVyh`od7}rq`__vG?|S6MO4wWrK&hT_uqmdwQ5hQwB%3@TXt#9Zdvrr&+3AR{4t5q4|23L}WtfAHR# zr_lStztrXe0|S#a5-(Q}WP9$?3!L6r$s)U-gltC4wS3_Be4McXPbBkc%s48}y*+&| z!7k$j#QyMZf0i$fWMH+CZMRTDM+;VFEBccV#$%8g%X`;8I2ahwo9}Q1=j5`LK3m%* z#}%q8SDp^8UM+;7>UU`WEFY)}MA}n3N1rX^S5Uu!g+(p2ve@Afp_-76N)}YOE(?0p zJH0TKcXa_18alQ<&7j|Q&O5`IZ-!_tU4hy_f1v*flUqsBp?6?2F>$fzQ*Dh+1dz8e zR9DFo#{RfSkB%Ahu?PGP`d^~+Q%%3W$M%#qiHJn*SW0&rl%|dQ{noM(^r4unoP-Ej z@asAK99u#=@tQVY$@KhyBlRZS(l15L8O13#i`%MXj!8WZM!VR%gztK3cFe0dc;Nt_p`DU;!|4^yH?e?G` z_t*pYO~&LmOma#|>Y*<|T(g>|K9Xt;1wR^G5cm_?)-IiIy{2Ax1wKe`$PY6e{$h>MFOvpw4Ceji)b%hjn!`crxbm^3Rr~Pik21&qsntyi}VXF zKe~9(hnn2wy~5YKheHP-{c&ciuGq}pI3#P_Z}I@rFEwa=>f9RxENC3|WqqKqPv;Hd zI(mCI4V7QQ`0$JO%#<~(t`|wVlB|MvC;*m}vknF1!bZ+VH)6xKeDUfZIf&dE6S_{E z5_I}r=bEC0b!7<1-;}XA+#`)D-2MVK$TCqUwy&?J&P!Sd%uE>f?S@2@T{&Ug`JRxc z-z3e%(?+fey;G!M_6{VWFwo<^UqQa|`moVrUtH6MK6CLeIA(U?Y!Ar`)>n zgJd4TmFJioCsiKkA>0$nY+M;Fr7*sFVgW5bO5y+V{`ocm(^LOE)h6u=;&d()aEi#T zxrOu>%SqG^$;4Uwb5INq%MAW4~Ur0{P-i z5!Nd9#n&7h3??Vf+p;TMnq)1VtXpLX2!WYfOr8Vk}B~0}~fS5}bq>o%CY{lI9oVxQvC1`HrZ8pv-kJee9OVVh2p_3|8 zklg4oo&EipTFuxT`s?H5R^8M01?L5oRjGzokzdp%WYSCRMzT))*7gEG*_u^j$J!hQ zi>{pD)qWs33p-QwM&z5!y)xHD!RyAM%Wu_We?Ex^xvr1k8`+=jwE%tO)p*(;6Ny%Q zLN!z>JV+&qS$_gs=CuU>JVWnI5P1H_3(oWDU9;NKGyxOoy;5aqLB;u3S+>2DHYwh> zULOQJ<%i4zN57uzUp)#{mdJ_B(d&NZ@Nx-&;6jQ_P7{I6OIDhO_8a<|SUFbn2#E3O z*j%lqIm@yC9gnSx4twJpb#oTm{$Yx0sMCq@?i~GZ2k{S-SvdH%K1_UNihkAhd@@mz zXUgy!g*Wjx6P`on^H_5-kjG4@ZOTG9tm5SsI6?Z@=TU4|0y4Ny&JFr+-pWqqqNP%P0{5EOy`Bz%{jcy(^*%*I@#Q^_q`{fvvV*a>F>77=mEjK{Z7uT z2;+;!HAwriTw>|Lx-bQYCQ zOJMeY)}wF*@f&Ha&4sI!M&<0Ynx&(w^AmzV?)7>dXGf23vQr7pD{hsTivu8uF2zHi>2Y9F*T1Vlt@ie;x7R2- zvS7ztt{!>Oac_1whrk*%nH%JJ?^Hl8c(UK9R%z_(8yK`8pQ)c?<-Ap%UAA?PMvdwX zR&z~aTO0vp_^P%Vy-zuz@3>BywQ~CS2oIImV1dvH`NOJeu+;TT+wnsHPCN+n=zc*; zOVHf;@HR6)?nvY(b6MtUs@2s%ij>`GT(bI3Q{F20_rbDI;glEeHQP|TuZ7Rx{x3d{ zN>r#of59am`BH}DCw{-#Z{W1Z7M#C?*hJ3u6Jr-weJGkunVWd$>9(o!16ixDi~A2L z-ebB)rL>_RF-{Mi&sR0+PgwA!qUy5zYiYt@-V_u)T=bJU;OI~2QjKijntVXU;194c z_q?FfUh#H>^z;lyMhysVm-0`2#<=wJnK<~JRk%|zbGGoA4gehuv)JYXQ3$;I0Chze z50TFAm3$8N>6M5O#2yfDvxACiEf76K{Bquxi;%2ff84Grn>(m-bJu}|jy(Pf3V;AJ zz_woP{WL$a5QQ-K<4_<%im7Z_o#nG@N(y?mYkApZyh{g9VbR}%mfv?n&Cp|;z_Yy{ zbYD6O3@rbfK6EOo)|87Jj?T`pk%)QQSq*-ELi&tee6g>SpjElIcq3WdauP-8A`aY@ zlj;jU70_4M26SsZ!zpNG5g^N~i-gP~AuZ;Ifvv+RS*q<@PkjmoMQ*OH501v)c318( zzH}BQscljj>lqz%lK8fVuB!7u>()_9=#`AX`UtZ-Hg+j~>t=`|eak~Pg+R`yxSQ4? zh=@KtJ9IbW;L4N8(ZxED{tX&>|-O()<>Dsh<$e#mM+_E|FJMn;>Zfc0s=YHCT?smRfmpcvo zS}uDFT1B;#HEBozfa{y^9LJ881?b*$bnDt3x~+tAJzxEcS?SsPOG;Ck$1Hk6ezPB0 z@p2UpZrb@ZzBKX?H2+RBHhWk7qpWb+rhZT~aBU29q~7@(D%D??l%uzdqJI)z)^ne; zs!4!YJcw;QW+>a+#N~K{)vsz~Kz?F8is2a$b+586kX4faFjoR+A;~BrkcMHU3;=CH zBHk=!mb#jJ1*E>|k`k~-W$U#Bv9XiaBDHk6?ztDRHLIMpvGZ!(B`qj(AMq6<;hp(D znmtXq#Cz|1v+HSNi>Cf|!1hENk9V&w{t*KKH-C_T^TLN_4J426K%sQ%>N*_rzPr%) zuYdU}6kK9=-3OQMmYE(5c~*O{7_Ah$h4jVp(7^rceUVk65`nzkSOVPy=YzAuh!5d!!TmqS zy++7hn91p!lw0lpfVW+CfEN>k+4FXdx0h~tOC`ncqE((l%5;59$HirxE3E<0hJO0B z3?Bd~cZwPSCatD!H4O(xK_4LMRd)#kCXU5w@Od4r-q@{H=;}}kpFI~STz$C$hh}$V z;pK@D;A0ialW}>jlW6%#i?rykM3Ir$xJ<7|t!Zv|g^A6iV3Hg-AFu_)EaZ9g{64mm zz3n6?BY9h@9=toCl7S`ud0ks$=kf8?zloJEppdMs{-#bP#i92zG@mX~nxdu4)A z2()chn6Ht1GJL0>Ep)P==;>c$+TYGMp%#)dvDH!|{m`d8Rjy=FJp$1wx5U$0|vQM)gTZdPwL)${Qcn$s9axw<VSyc}BZSQw7PA}to z6TY3@_^WLMO#!Sw?N907%QIHboYxYM=+L?>)ei(*nVGZ5On%sdr7it26m-^0*^u!r z)%@=K97-S`gepEH$_qu(tR=MK^B#AG0P+p`e8(Oy?!3bRu4Pw$2Yvq^dvE>^^&9<- zEANzq6cs{QL-u_qyF&IYB)hRQb|w)DP4;BVzVG{3Bm2J0Ox8)3F=OAEG2AcRkI(nM z|AhO8Zx26Ak8~~PI_G(wXPN7&jZg%}C(0PnnX`NNNLp$N1GAUmsT_1&486$Ly6Kh> zz#HZ<72`x)0hf|`LG1ju?|zJ{#LR#;)#KCliRM7pbBBYD=T7&u_#o^HV(_V!gEYqL zS4;M06R^as`j(HPxNG-^xbi_98VPoIiHw~V7Trctr)8}ZP22tMiudD0X?_6_g*D8j za!hjp==278I)bJ4st9WmFi2-F$%!}aq?mV^kpvpDayW-h^9>IE6*WD_J}PW#I#3^I zB=7J(ueWW-afs0{Wee$vHg1}A>hjixhCBxtRpLEh5Vf`St+I=dRs+Y+q(fppqmX>$ z+6toOhl2Vrz%h#>*{kOLkqQp)6J1ZUfROBlq!a!;_^CeJRP#FqGl5ar8HGOUw|npa z80rVvjJx;?yU?FuQ+dcW;me5mpL60gN(qg`2z@inv+o5qMn5g-IByuj99k;^4VCD60X4b?NX!=t=j_6_1Zn(fv?I89vH5shYC3&dV{z)p(`6Oh8Mt zNuk!;&QzkgO$+CALwCF<7PSIhIJeq+BFr1@cqqJ2w?;PpG0eIMfGrrQHpLK!;R`f6 zAd6#oE|OrFNj~r>6QzIO{PeJ(kHt1lXo=#sL#55g=cr? z>xAWJ0CZaARc`r)3lde->HGX95P!e-aT#KqWGEz=b$mO8oJy)UlnWl55)v|7n{Cl< zoJNigl{QsuYuqCLTK!2#X5q91E^@PwSLpav>HY1!I?>EazWD1X$II+VsyRsp(cxk@ z$7QcPIn;oZl+58%OIJWb4p|hmcHp4_LtENoesL^?<$+S=!qu}!S`0v{E(Z|KH*TV{2W`rO|SL(Xo zli&>xH9W~G2gFjXH~lU&lr`yrWY76ZpQR3u1oB;>ij5Uzsfq*md6Mr5#iN1ItH06m zqlybEhO;o)UVLm&rYubG^^x@8a5P3ms2(KzknI}(N2rCyET|ny7gNnOu1i<{PcHx; zq-Gpj(-#z6&vmddyCvoY*ps0m{*lNVBM5}DkSD}`^7z5Jg$*kkUsVD7@>FiZTfgfy z4XuMy{*<_qGWCwHOIc7aI*}#}YfYJ&Bwk8u=lnOOFjAP}&VFvrtkbILi>u5_9aG`v zUqOmHy;^Zv=h{A@KSRvS08A~Syd&z}`SlRF$5uU!++BsgG4d5T6qeVr;}e-Zj)>x= zvpq^RVMo|-W}C;KR?!Ln;h={9u1(lX6g>6?QC+BP3039 z1-7xiQiedn%ZzRDg?t9=+@IQft%tJC!fv)c$eLa?)Oo>EYPI$q#}@U%EmCbOk!X<`jB19;)O8!CK3>}}_% z!oD9-o7PvXoX0AwJi}FLrbIj9egG3BrLg3=5$lG@%3&722u94?>!P2*r!aAlUsFTU#Bg#@RT9}tAd4V5jOy;QVDt5cGwJL&cyCWT`5Y7 zUCdP&(jh(!*WS*skX}0MOR1&2bG$f+$>K0^u|OP#__igq4}VEB$;amJ_6SyVw9vgE z7B*8iWThJ*klFcvoYKzPJ48t5VxM=&0~-Fm;q^T)9E9UPNxPfc zsq@lihMeYti&Ke}LLG~-xJf8w73`fHhg^@~r&u0y7NFmq*FL6h>iskxvhUJspvVCL zWUH~ci}0F4u2{t|N&wB{`(1c${o~A}YIM*I3>tK0MYBn0ULU$yj#>%Qg5eb2;Asa( z+qKZ2ML)G5(!EYf9Y>`sc|yL;-p5Uct0X7xSc^p1sAc6EiG`6OF#MV4$3j152Sexw z15idLZhCzW+Wq6ng6>tcARh?acWsL|0WyImXDz6>EA9+??ix=xU@cAXjT2@rC*^l`JV5f$S)S@0a9%hn511%$I z*Tc0GO-uYXK-i8{NoK9y7dmerRhVuZc5`^9(Qghf=}xmv+epoYs3m$G4P)p|+Dh7`4I%yH-K$BgewQI9@$oa|(i74k7nt7QA(FZWSmdj5lg}eze*|tT4_@?ct_v{nVNk+l_&aH+(Z< z$v_*{+7h0wE@D>00p+z<@#(%Pq3z4pSyN z1q;I(;*Oc#)z8TnhRV<#tD{7ouhA2h914xl;ye{k*Z^`W@1t_)1zTN_pF258RDa8V zM2{&UZErVCYA+L*wCYX|3AVY)Q_DWK(yWJ*SNa9~35)t*S0)c21E#&W5z;V?A>3$Y zVq&1rzGm8kvN)OsvLR(VdAwdoS}prUdl8qP1(xvw+PJeN!<%j_|>sZoFAd6d7OzV1uX`gL2*2DW1iW^aK@D<^eYZ=7AYCd{R@?{=*BYbrs z)-!@V@NQbr|<@CDib~vEwOIEFXq%HN^mQqiQDy zS-ERSMxzWMhDiXsy}PS{nCNM3_N{1yxcO0dVIw-9kNzN!`?wM22`O}7t$o6LE4>%u z?A;CY-;aIx#%B)x0nf)f2MlMB1Oyzv!;JctgjO%UD8YxuDL_bI*jO^VKI}1h{~-yTe)6S>v5}$V$eX`)Kjx=C zcsl-c%C(mjDIq_-D%#0AvFQ|Uv~LIpK!*oYjLZn{ataIWg@ZK%f88of)2_i9ew#Vk zsnNhd`Disyf3vn>4E{)&2Ukt?;Kh|&3o5;gI50fB%fz}Utx~dd*WhTH`v5r?-FNvo zk$U1Euz$U9k!=JtjJ%;G)Sk5MKenEGL*>8--5|;XY#&x(PGY>UFOve_{jKPBkoG2N zDB&=dxV%EPX{oUQXfePOrt}QVvDO{#>WX6v!&v-uA${^3_&q$d8$i(A>bf84X|7L% z<>|jSPEMULeeH#6*`zm#p1w;x#6HHr`SLgqWCE@N_9qOjS@@^5Nl98r8GB(5L##z@8rTbmR#%wyzeQ(OkH8ou#AM>UyY~T8-gYn5 zmto4p{aPxx)CkCuZeucqrl6d^x5t2z9P7X7pe!m)G4y}-!l!uL=oa>q z3;n*fJL~+yTvCh#6?NyOYRP3e)V*`T!XAsxV=fuo;N0B&=3_mC3ZV1#!IGMcKH_AMWgb_!+^;M7z6(rBlq#e`R~reh zk8F;K=+T&*6q)S5OliMnZu-o;9SZ-L3j{;mxte0ItaByU-@WOP>VuOST!$i%{tVafO|qoTw4bA;M2{r?SbOzIf4M#YR|Hcl1}rGTv-^850t$gw3}Crh6Yt z{@g2IH$A*U&Xo2h3E!}fl;R@i*KDaD3EP^)FWp(6U3Yx%W9y$(SejWw=c|PkEZlYi%8-U`BgJf<~Edy`&c;B*uI2c^4}90}n$Kp-~5%?sf%vtYTHe znBHX}$~&@VSno6IOj)z<0nOdkjg5dm(_+Ed`ZC~tM^3s~0F}BKZ#nJBRFns7o4<6M zll|HJZ}dxmooJgQ^&7TQtYAdbEW+|F04}yuFxrWfx$SS6o$Mbb5NBMR3T9uqcu|`e zZ-iQ@C4(#Q7A_DLR6u^}xqLmxc}~AA>>C9+xZ8)2<6Qik1iQE`Su6X1B2q`YeLeau zXWGPa-+aa#d7b;cUn_Pz?5{fu0JqNzzcD$Md3^ZmMlqVN$vtr@Axm<^_?7$BNsR;E z_hyHiNF7v%J$4shj};+FR1W6y1mz-b@DVv7{@+NO%$f=AR}d_Y*S$zVM_H>gUCt2FQH7+(PZBU6w- z7`ae-FJOnui0P5dTGia-O%f^=bKfR|;jsz@!Ub|tL>tdZOso!+@lp)l^4qo_F3bhX zh;cWP{rM@A(Xf*hfKsm|C9mQH_?dajwu!deC>Vy1SuxM|pFvL^oj_adWp$z%M$!Mcb9!r;wtAK>5 z%DUsGxHAp)MJ`QG3hwJs$~9Tn2!lwGQ@^QC945A9D2fV0k_wxL^xP^->R}iWN0gcLf|$rbr+j=tPzH=b=z&RwAJqG3 zD#YS?SUZ~`%gy|DyAavFMY8pCKl>kwr*JO}szh0!Se5E0FoC?0*GfZb68>$d_X>kb zqxNxP|KA#cs!6x3l#&h61>jo2$we_dY)?en06ZfGJVPa?ePGB=Df6Y7JLjZhz|w0g z%7sm?=Wetu4NycL29h8H{LNA7dYDb6oUcJ`?gYa5r%cT@ISDhbfn5%?wo*%CSKEK|Ak4AEs)_Y89wl9scr8 z@G{qv;L>c`KX>*Zj|I}hC*B$2dRfap|^RI_^|QATEK1 zExH>B5iaY*TU`WVZniQrqxPlh2(MpZM^Fh46MJf7?hRJ%T)(RJGH|??-GYCYi@<)l*E>nsvoqHfwn`~9JA)HQGc9?#zBj`n*3zp-R( z0M^>;d}ft_y=Ud8^H7}4`O$~6a*QRLHbAO>dIDd42$aU6y(Tjf zGPLG;idEIcRXY!rGed;bO)cQ9OT-yHaX`yU>a4Y5ch^I>CFHGr;2+JFaU&53A#y0en>oD_|kZr=g zvM`F5my`ARBG|f?+0u2oCc}t{o&bG&mdFlPa5T_NHu=l3OdRXITQxn$G2+w)`(gd} z{znQl!A*K=->A@}<3~PGU7o|QXI%NW#Nt0bjuqjU_R?Sq%EPrSJFJ7_tCn6rFp`_^ zk-Sfl?V&>Yu}!Wlp-d#cE1TC)OW`hwgx1k&Ikh+k`VC?CaiwfJY2>Q0k(_?t$8Lvv z2p9es`-R=_xaGtLbnsvKvrYO54v!F1erj6A2+qwL2bjjm;hy>8>*EdS30zLi#nZ;a zDY6~BBX3BAGT287#7HIq%#YO90SQ~{{9qvAS0R`0n;PF>T?6I5E)d9FdFVeQ?JA1% zUG7VpMI;{m9GMg`JZa-AFOCah@z12*%Zp;V*ro@19?wD^2`L8+2F*-D~Q~^%kMgAQhD{*w@?$+++f zVsB%yHp~X9aQ4W&{Th)=fu%2y%vyo@cAxmwv{)^wtj6DX%06%$n-4lF#Lm=Q>TK zT(Xf~vOyhjo3t1uhl-j{xuX{7s0>j>p#=Vp3o9<=^nVe9EoZoU!8}Y2_sx8Q5{R-qoS=`6%%_%2(kjT=pIu0)5}2|vTW@X zwjbNz611&ywD`wgygZOc-%`w|!)BMg?~T!vJLi&3<;Q9M%BZ=Obb7g)oIxS%W?eMnAlI``qlujZ^?$e?C)*Q<=+c*Yg;D_E(}Oh!ab%98_5JkmMPg&cI2xfePIh`n{NUar~{%K1D2d z(T~y`buHtlN?ir`%AiJaqv`I%>tAoPq>g&Uxf-joPmT;tJef+?(>v-f$V^RkDK|84 zK&ut;r4MTOT)hQhZWmP^Oiu?d`OwR@ zs`uNn*^Aye=u-TqGS{u{l0QAQcD@RCZ=(K63M7#o6b+Y@T)?4me|7hx=VSZ4Iq+ie z_8ASvucw(Y@0|bJvlxx)C~ASF4js93 ziFwqL`SrVzoX(nrR4M$Jy{L^03@z6$UmI) zUZyVCOng`)@uO$ru3rk?_onkE1v(Sov)?ehZKF>gZe4tXI*jpT0Hwu}XKTg$?`RHWdV*Bl?gQ;wyuZy#$brrPPxQGP*M9W)RZZoG z)vI!HER!)3ujCZa^WLTg6AQo+(C1T5Y1azAw0s2S;`xg6^~D;#)i-?t=KiWdmag$m z*HOVQ#y!5>J+=GC1q4CMR;K6j;&!?YvwMx!?K09KlBJqY;Lu`J-!m(h(^{dUKF`lL z?G`*@vE7tFKRZ3p+mX{=7_}q%xMBIDjEx31@*o@^KF4y@?SGp^>jqVBPLZC+E3Qv; zG(G7WIa)n8GI7bqG|I6#R3GjWW!&_*CaCNHQ1i)}ctme3qBox{skpbl5GOOUoI0#m zv$yJ8vK&C~f@%tM6IFQ0l^GM4lc`S)=K4fSqg)Ow9_6a*p>Os3b=3tr$Kg@MA!poY z7Q>#8nZUv7gc_)`rvF#{Oy$Y+MW_lz#R#4Xhtzv(~n;yUbJ;`}I(3-}uUqqgVFN2Rb+ zl^%h@C=O-mH9S#Ou^8I4O*Ez8iD0)Bkih#v&YE6V=ee9oHNYXz7T>P|}ckB6M8{C2zrySbjkNRHin+m5-rILREzHx`98?|0Z1%t>njw(lRTT8mV zX{`@pu^2e=W$ebp?&Ab__EIJ0BYMWKR+3%c&1U|+y|7*=6B2uTK`}Z&J z^ZqRs&>h|X-H1%|g!BI&=Km?#D9^&Ksx|#1elt#3@E)Vaq3^od;N zO56V5IzZFU_A4nq38>sx`>%kD2E3N*N!~x8a@+u#sJ;R`kD4A<|IUok(7BX{X3nYV zJkxgn^UIYa>LKa}{qX5Q1EV2BBkt;VNq@;6a<;#X!?u5~{BDvp07ujxO*zm^gr=3g z{l%{=w!?JcCJ*t?&)@%i+x9jY@RO(Xq5-B-QJ~ULpz?`rh}yDM=~K^38q2EJBDJy! z<)(88?R@hn3c8}dGCq0}qf#ZnIA;qjm7q>ZkgZV)cePVJqMcA-D0A*dk8H5MS~fxf zfbn(eSFAZ*=05t3!K%f6J2ERNN%?%1Z&+y_4jBDDeKu>`2cCN)o&7zv)_}0&ZP0#P zaPMVGz5A9K)JV51K3JvL@5J1oY590R@Yo@s(D+rzbM_=KC4`}MHDaz@Z^7umK*l;5 zp%tPH&l>((1`3^Rv{Y`{&SOMLDJY|6L~Lo7{r3Zp5>cgvf5{%yzuS_0XaOQ}xcchA z_#O6p6P;XrOiF36Z*zg1-M+@zSHU^o(dDaw<}2#vn*u_(3eroN`;36^LD6- zOxZs()|+@C0y3T1>nnOYw`8)VcLGP6ifm^;DABRYAr>=2F_~9%F*JhU2fZY2#TOlf zk0o-c*{fm;1*eTKO^?oJqFiK*gCX9jwvgQ;-wVNCL!``h)xS4v`524u$ls{+pNmk@%q4DqKjgVXpLGSeaz&1j0>Z`wv> zxJ!cp-OY!znDAygWSfeVA6A74uOm7d1Ky4sPiRRwjF&@h;56^_wCF_B9BhEg*BR%}1}W_ngsoc5}8A4s6LLsH40zA;AKjnO}1s z>ayYFP1=ee8kfCGM*4e1K|JGdK!>bcQxUum<0E%`i)Oni*bqMrXeIo9rfW8x z$WI|`;1Lbh|Jc#R>q1zAQsy-Q0?BC2$q_AA{kiKRyq*Oy_!(v8VhVkg$l#lZvxH=v zPks@RZNpcqmh@pb8o?s4|E{Di2YA&d(7~+qqVKe|wX=OYa6LdWQ-U-a%rz!*N3uKV zWyc;OBBsYDkcOGTYr(v2^7)aB)9mO`rHKkD#{>G1IlG?7*+;<6i(Mb!L;1OjtH-{ytmg!!5JaY=e3{q%n9AUCIB-lg4V7Xh`8bL2*Qj4TI;`i?mTd?_v= zwdC8OuEm#>&!1G_JF}n_U%ru{y$|qJQ>iUQ`0)9wJ+}wX+8wH$4U*otWUSEofBd*V z1ml);f1eZ9`1;DvIG`D7GhYd%=4AN19-FXtT5Y===@uHO1e7)Ds3vb@bw&SZG%;rI z!H%rp@*)o}BXagcZn%QC9&D22_NBqE{2Gzwl_@3vNl#wzP9s@3zO2E@ybk!4T@pm# zF@PMZFP2WDBU9`a60FX6e7TIxGf!Z`0|(P5SSDa&15S-tjF7(UlA}S#rIlZ#H0eVq zx3PJ}TX3_JJ*47uN|y!ojX4UV89wLT;zzOg+2?R7!K{^Xc#+k_&R~nChU3B}G zlvhSeLP12x&T%WzaYRx}md07?jV%WQvdsE7*6Bv+knIo>0LbhgL9v_PZ^MUQ37vcb zn|cx~g(NTjKh6`jFG9=ISYJN_A}4aV2N2x4ufHa3O+Cvl zm(U1HWc2y^*%!rA8hnM11_`JkGlrT87gSpfT`rSlliHA5Td9fF%dO3^dhcWO=a@j_ zHoiyY@dTCCpyzsb^*TTm(_LBTIm+zN=ZnE&U^(or9fS2&;0~x~;e@k&cP<^e^w-0n z9aq3*8LS655`&%SQ3L1Q2h9w_-*(#|6G=4&Ag>C&_HPdQgbJJj!g>SXY(;BRsU>GN z1tn(U;@IcFnf?gAI@1UGdw(zWYj%pt*d<~PH%b@LS-Go?3mGYrD>age?=XVpP0Mor z5)j@R(mM$0gI2?N8AIO8{-NgkFO!`HvRw7|ELuu;v@81kO*%g;%@rMvharz_`XAnp zEjh7m9((SFGz6XTG?wlkH69pq7vsX9b-RPw@QryP1E2l9_<;~+sSefDfJ`r#;k<{N z#YS>8qkWL}1P_Uwz9`_#LF{dLgO_cL$G_wa|IeBmHrF7a=()={_=?2>RN{q!TU#!m zV&8)=0DOJc@~Nk6s;1-erH>1^c5ER&z25X?hGER3 zw%+voK`{<=JyH!irKRhAa3QfpZ`rCJ4e@XL8|}Gc{`JdC*1Er$9wn(~sW`$pSE_^X zhPAic_A`UlQ#trZ8tS^p@GI|w5qVCifwzgaxhMqA@5h=$O@Ofnr{pEpR6lF1xC&rGLaRLdk6!Uu!sY5%My+68qJ- z;RWgfRcV0lnNL4H2|Ruc)zj)X3qIe@$L_Vwe|dOmm;J!p%RKr9NvuJeka9HS0G-Z0 zA(UAN*fsom{a`x4*j}*`f|CZ3i_>BcEs8}FEOMyk?p*n$3m^iM=Pn958Yx5HjB;J< zFp1^3ItR;u5WpvmT&i&I1oET38j_QIzZk5Rx-|?ofA~DOyB+k!`m%*7Fz;2_8TTDE z-IHZ#GUxODfDXWx+X<^jw+$->U&;vT5GK5N+V-*}c#y`eef{%j6$eLzV^7D<#AL_f zJnx#t`t;Rdnm+*)(6Hv*(wFO*WddB*wvQ>dYfELtyInTLGI6gAtNXh?Xa;q``4Ecs zZb#_u?Sr@=xMo8c``0?fJsoEW&ISeuJZ|BoLBM+GNJSXubN!R$FM}a{xYX18L&;(- z6f-3Oc=Pgr)4fe!VfOTg*=^NYLlu?|MX}3S0X$l5Tufci%G5z+ zoj=*AUSh+484NhSG`M7_oaIB?)@y^v3{yZoTP74o{RyWzZuOqdu5J8-TCR(_p1Muf zRd^EwEBv=_z=v^VGw3lmK-b0`yI`(2clbI~O~|I7`Ia*J<@H4Vdh+W^DQ;eYNKQ%P zqQUBh8!)){A0mM3s`RcBfa5&~i>{GW9Vr{rzxbVCvNiRKCQuPrK)PUPmx4n$L;`|9^As!ew6nW>UCJA5y=6LYc90uY=< z;_$mX;-3*+QANXszYQ(5jAo03yk&jJ0Xhb@A?8SbH4KQ7UcdHG33yrk z-c!0(U) z3#O(9hCp7=&UU@pwy_({Sn=<$AmnbPH#2d(pWm4e+$LJsz$VL*mp4mnE~{t^_44fM zyG^z6t{zV1yw1%!#8aNnixA{|CnK{&sN(kA9psg$twRg!rg@EvK(YL({JK=z0ZeP(t*A~VFeJ5WzA<#~M*B1Wx+ftr86Cgi-H^jNIyP{xlgXwbvRLJ&$yy}z=rQN=NvzT|d7%aj3POpBA* z;JP(5=BB6iSd{vUhcavtbQu4W7X3K>Mtc7FugL)1d+Fd0A+`x@sSqLMpg7M8 z)$SMJ*kBSCF85bG`EERJYB~XH1_bX_LfnuGjnUP)^E`C-8eEWb!(2Q}kAG4@=E@m)_F}h18giv%g{y3&tTeO`M;BX`kWw+uf^)q2 zEn!iNX)gBoKh&tX#+NyUy;^o=L0$^-sHi(R+n?;c<+9!wmotQvyCF}C%#Q08pXYZ; za6;KoqYE&x<67(~LOR{;cbil@qKzFf+c6>b`?ZMhpGMUGy~(%*1;k7i@GEer$htHbU(3mpba@68%mQ^Y~Q?^U6kXfXK}bf9ZHY zl-I~`u>%>eSGiF+$_?C@o}S70G5*gv-pM*-c>D8}{&`&KpAG+!wjA{M)*@vP^j> zrYUP5qkk)my;@;doUEMF4&)g#k!76>s`vsgJvkzNd+*KL*K2`Q zUFYF}ndy&zPXkv@NXcWKk4!z7S_a$ypP`8Nw@*p7(U+A|JIeu^qzh@>bRQq^adcXF zn@XORH!pH<{2Iy?t~VrfKhZOFqSm0$4rmjQvGDD^(vsi*wB*@|7oU$4({=45QQ`J8 zpZ}uYal2~0PdlO{4_`o3BQf*m+7TXt6)(i)%n}v=5p^e=A4}Q&!yo!9{2^f@4kd2n zJUv7e+;wp3ZEvPj&F1o{Lx|JTg?j)30=qkm|6F=uZ>s+_q+^@I{}&EJYD%wdWBu_; z#?}91{B}#q_h;LSOPAYQsBNVm6|%RLtMA`hrVpa&f=zZh0pHKLfZyW?dmw)aCt+Zy zQ_>Lcmb^_V2V!QnULJoR)!!d3-=)rhwMZ7Xx%+tebIx6ADG#r}7mqR+I%E{k<3D&p zw#kul!s90^43Il3Z^X_m3Vg! ze<9T~T|M>(b=aO66&1xC`tS5=jz<*iW~Qr+8w*c(El7BnpI&=`c3}Xd^lz*GTZNCW5#la3ER{D2udY1M@#m;E%d%fX zq*XIiy-6ettsmrfSg4m*g~$pMpsOs*%(`L!EQv~#K49LjeA~@RQJpR`I`QuWRq&X@ zRNz<(*U}ruKb55$;~R&vqCys~+We7wsW;}yb)G$CX3ly2PqDrZ5Al8wDfHD}l-l_G z(rQ!Bm+w42m%eWg)I9>K`vj82*`|RrC-@inCs!>yWU!QXE zRHbYNzk#aE%{8+BCkSP4hp+tZMDhDtpH|H7QGv+{R%~o8w;SKDpEmv~Pb&pm)?~cl zf6Q5!RUoEKYj$a^&k>&I+dbGBViak)f!v!7+w|B=#n6+eXEB9F^ge?Fqk^xoU+Zgn zXPiFT-vMSt0f?kDHs|)Dvc>J=R#AIg5QsU4muI77$Z7z4%CsNa%RW6C_#d9hJO^() z%FP!hA)|RBNyB{f-zSIaW6A4lb^7L@S>IsP9#E|+7b88s@Nfr5jAoU(jZwZ&)F}ZZ z``PX4B)w4P{q5UaQU3-0LdkJ8aWQ9DyOeGwgY#eVB+O0fqrrI$j>P0Jv(|!t}i_cZ1+U(vjbto_zZy)EQVu z#~H7rfRd7u$JMTmkC0F7w`Hm*AK$HCR&voMwyJ*OGO2WEj^m$X*AD0R!2idbb7?oK zriySI0+&0^G~F243E8c@Y`n9etSyihC-8xkBcmu#6W=H$ zb@7gKY0AGowCz$LV)4$zgWjaO7BW|6qw|o%Su{^OHHL-Bj7W9hk$Gcd1Pj)F-%j;* zy3pV_dZHO%9m2DbEX<#|XKE`xNWdqSkRTqO-MJBau47&_)taZh)PGe zsb7N&^2lOM|7K0aMQnu#S6*U_PKLYM0Ly`uPu{xeGTwvfydDoO-wQgeu0RsM&t36e z0KHTA?V=`IE{~+coOI)7QgpbOfitH(z95X_-F$zb%OT;bQNJ^_`_3~%0r*(2b!Qah zm6YR36TVB;Lky~9`FfQ0(z|?b+F5Z5`?>q#63_JJKMb&tOkiH%mMpQ3>O{YNb=XcQ z^hV$5y#>&0Lr4*1>m^+4VTV5~6}%O6H)}EJ%K!BuJWb=$YbaSI}0<2r;FI|+;!M_d) z3WO*v?Av>zZOp+E!;U2FnhLkXdowFwf9=cK0+>DepDb*cHiqN{YW~QkvdBn5NB<|K ztFpEM@X-8lj~n6kX%}NLQBltpNlR}yqP1S2`j|c}KkU&s;nsyoWwQ-^ViX%y8f^`X zbMM;Y(u<0E$4;16R}=U6Q6U0`^6iY1kvab)EMnuC%qAU=Q~{F24J z`Ek;IOzA1+|LMiIb06mXybBesV)A_+FxGs325C<2Wfy^c%$!qH&EQ2XSddW(ibZ!r zCr+Uv3<2fS!dLb`xq}49tmxcOW3+8`E1;|aEWbE`y=at(==V(ud8{9SW2M~832>zp z8{bBDS}OxJyMBbKG3L8nzIX6Uwk!!8|2tP}baMAfEEXov%`gk!iyLj*?KD7`Q8X&i zZyf~$lbx)89vOwVLwV!_FcNnSOR>P}qwX1!1Z_6Kx zz4-0+vQh}Kmubm1xH?{93&}4flq7nqmUaf27zzIL_5gO$CF=@=0=pr(JDj(Pz8YBA zMYWN~tFEzd?ocmmd`Gt5KYIkIYnVWO9)Ls!u{IYo^#nfQ^WwO3t`%~f496n*&x;YC%)oza3FtyftsfbAGZPQd> zWqnfG`pQueyHe|Yc_)+@I_SLcW}(2nxY;uRGo z$+q+>R87t|zCr{DlDHNO``kS{h>tPN6k-EA2QFpr(b7ClrAAs@AgW1JcrnE zu+hSUjY0I5mNzg5VC<=8DdOW1b!gqdeX9*$@4_z&w5cg?h+Zb^oxqY~&AjC@<3HS= z_XFq`|Gh{Gh0!oC3TL$p?CT6KhkKOz55LU0#>;N7-93E)9$Wg=6REC59j>M(4*>8w zEYBPlRFr|Q+D^E*Tmi_aa4Rli8*E~9**gwdJZ|!^8{Rn(k`kH#9cMk=6kP!2k3~ip z9bP`ZNJC71C=fH+u;6(9;IMU-lE1L;f|T})M~_;Xus~Toz#sX#L|DCLx8nhlGd8;s z<#*;8RL=ni-zWOk@P*O5^o+RYYmEjNzVx`&Id{yOl6foTevID?3Dty^?Z`I@0C~L2 zi_I>c2L&Gc;C_RLvOezg1;Y^EfOgu}{TeMMDbrU2>g!;vjyE}HgIG$=GBSpC9FR;IX);S@b}zu^n6hmxZ5Oqj^`x`WZo!u8!3 zI%sGl`lHhOKswn@C`Ow}J3uynIZQ4nv%4f;^7+TwPNVW+u{Ykpi+a2Fm`cUf~ z-#Y;)--l%qZC$2(bF;56H_50rNT=bsOG&$~Ce@VdPzy*43wxTnWG_u_Ush#gm3Pq8 z7-WJKn=JS6?Adi9Hly^rRA3N55`IrDTX#dQiM{78Ri(bf<|gztK0eR7tf%@brL61% zzrhBHn-sp)sX-IVU^}j=bC-$`BLNQuFc)LW5*#u;8vICiiW#vq)4-rvio{r?9L>=R z5bR9(yzEE<##(OD>b(TZ#N{Z4%g@f(=bX&9SPdW`au*6LG9cI zl>@|N{b2ktYlh_W9L<}gE#xyol}g88BZY5WbD-v>Sja9{*s~h$dDMrfqL%9aLADM& z&u}VjiPwjTykB|``a^*glRf=4whbj@L2{AQ54MVUpK-$T9+ABb92V^U`VS_(nbKEn z`Pn#%N1rm|Qp-@I?oRwU3dQzLWn8O z?>FJUdAtmb?hj3qf70c@YMX%*?K~kc3P<=G$nyj767sLDRi#*Aem3BXUqIX{pAGuERK}6qa9(L$LBox5csdQ58M~CH)MOOP$1NrW0 ziCciRUf=UW=B0XqZolMROq4tR3f+|4G!il+i$-Qz=m?Yv=vZ*&wceNanbwd}Fn$gg z3>Bwx?o!D14dHg2p;AXS3-fJNjR{9JMuQ)q*poE3C5tmp{eZgU2b+);kH;QUO4FJqHR=5@tfx81=E-{krSx^$TS~>Z9ZWi?cs9haA$ji*ZuXtE!0lNh z405DKFK)3?(1!nd8up~J^-kt@$|V98bZQR1)r9@y3s(R+f2f*!tD*5BA5B%o0Dt&N zQR@ZZ{p9~+QZ;JabIOWU=9VN zGMT_4Ez*1gBCj&Ry~?DI9~lCYy&_47l0Mo`U;CEYlKoeQv+m}9?skQOx&0xV0_%iE zsc~2{9S{LrzZ4$tn);t!0BxKPIR`VA`sr6f3#uzIy$qC!Kf4SAv?-VR$PLfr{}|vQ z|LJM;opABn=XC?#br#PQ^KRzS36L^y?464pS=;qp?-V9?->{O8#lA3c2V|eKv^pyH zPJnu5tq1BmsxUeq$m|)N$tgf}r9HaRICLNBe-xYAcYkINLO=_;VK{s8wv2cyNAe|^ z)b7Oi4=Yo*6+8Gp%lQHfuyb+ekxjC;>fb*KC3-L7h%Cm1=bOMb16nd<;4NK!bK^sQ zO@)E~NYC%ddw0CR<$m9zExoA|l&ZwzCA<)8ZvnSXUzEMidn zHlicr;fz1kJNG^be*fTbP)#zXVXR$0Ltbf`CzXNIJvk-&bqcjphf7xd=luXRg& z-x94qrhBZf_j;eM%#lOB--L*++aGFtSCoFT@KtXdl;?_pYYlyRRsz6%oIgg`9F$j( zeH?9K0eoUX2`>-v1YpP&Ek`_cWr zkN0anpU>CpIFGZsgCpnKJ02SV8Zy;Z&XcsGLvn!{tthNL!HJd`DDymd&APBtMI*KR z)}yRC_O7uJObJty>Nb{#KG0Z{40RPpI~2WW8Wn8!>>p0l#Jb^fcwVp({73%}6Ri(f zL!&?Mq}{*v9efM8o_lp*to8u0Y54*mN37_UnFsgIbx;^`oLm=Uq`5|}{&*S7eEkEt zNZU$ZsbhN6b(BN$j_O5!)^K5hbDydTR>@_6S|QePWJi0jZ*C)a*6%%2#HP*(9!xxQ z*1+@Zr^kIzRIoaZ-%eaQh6mrEi9v&$)7v<(LX5KF4kDLsS7tjm3OO1$5@ zVqvvx;&=2GOWglu&l?&Z!c(!$P!YdaP4lGT1s+74k<}EpcH&hiUA+^zgHJo`c1g#pomj!IFN;cjZ;A(bIiLbW2?Q@J zL4?VO#EV~*Ur+UxjmOs&Mm%g8Lfw$Q?nq&7U|B;ftV$l1?Or%7iqUp9VTP}rh#1!v zJg8W_I8E2lEyVStckU>kt2|n-bqnrMQ$BSf1!lUMiX`fx+irJK-*Lt>GG>UWE~S%F z_}Wr*cd6VG!)#W7pgnm-ha(QSen(9^AWg+Ql$*-`xuw_Q8sl2s>hbf4EFuv56R88A z4}3I!^}Wg9OP7Adznwzs!cTIcf&L?$Dw|HvF+k?r-6wBH5WfmbZs#gNCQRj+P$h^2 zX!T|Bt%m177FRxho_rafHo}UXhH-m}&AorL(yAWdB%o!NTw)gi%tM*+f&x{`t!O;+ zF)D4CEeel(loQXCpaBZ1mEaC0ptm{$d`;{=-RlqOpJWw1%Dh#QhPr41%2nG3cGsWe z^sdZzPkc;IY#A5g-kb$Gj{d8Pj$h8DSg&)B_=E8`f?j@g_(W~3+;$~pEMTT^wYGAS zes}x$^2Sd)7SJY-lT8jb@$VTw4rtcD=l#Ac8FZ%c7=^Q%)yXR9?vvz-Y=pZncr2;; z%kD;<^J(oGPmtLY8^bEu?ITA`7$b!)?AkRu>|-+wrd-i;jp- zwlLBH*5ULarT+L#0Hs;6{Z4Cm&;z8wI$3hKwu2#L)Hy%CRSYVT93>i}{W+Nz?D7zGRQRPf_yvy7u82jNlf=B6eMd zy=LqLgnmY6jprf6w$wMR0YpqJbYxNN7#3Fgp>s`0)E&nMozX;V*kl*PnU%_ zs9!2mTTSJj#cN-G@*C@_N>8UFOck4}F@OxvMEI`%hwr|zYSLPvi_lq2m>QK~1DkZu zCLZt|?gI}19%ALCV`-amEp^I<&aYXd)*Fj9d!n-;b?p4=tj^bhEfKC9C-P$_1?usp z5N2KqfXsqI?C?m=#zNMPPtwPf%qWMeN4$%c;}fRe`I#Ineb}YUwNa=w5C%$ajX;9n z64rj*FylFpBVb5%jbthCDSJvfVN?@V4hqX<*?HG__W~#uwI_8?zpM^@aLtn45u9`r2w4qXue^0L_(5|UC~7J)T17=!vwZ}{Jgt-6`7 zk+!l`(_deZO5*3*m8-Q7sZAi&6WlgYKiKr-PUmT(ptw!XP!kde=@mRIDi$#}f7d_k zBjkhyrgB0DEBq!W7L3CJdllc8mMq)n&m62ZeI3r4bvxNy!Bu*);MU3fl}N7`3xlxd z``Mi38p*WkqV0IbaKR*}ft_E@#~%4jG9(u+c!=T91+;l>tbfp(56UTH2)TsuV>WkZ zv_QWW+o`k7A2J-!CK%b>eraS{g8E3~%a+c!w)g_=T zfJS7&Vk&xd|5nU-07D~!NmORBe`5SnlZ!UhRnc2}g`*ci?Lo-Gm zLYfKGgwH2IP33(Z!=j?yHTfrbbQTOKTx_FDB}3@W6x2T+(Y(w;&nhYa($V^u=>hIFWaH zfnq9jc^#AJ^oDGb5$#qnyhKiy*oB5uydTkAF1a?9?Od*1=O=I*B5-_Nn;5hH^?PMI zLvN1a`)_)`^t^UHPvfOv_3ww;_g$=}DS;qQ9i!kHgP z-Qcg`jJYhk!P8f?!QvMI?v)hI4ib(o<#t(0M`~{RL??cIs3}gS@~~B*G<31!U5yju z%PY%?drzwIn&A{q37Dp@Tx5T^{|1?bw%Ys2D4=WXmsX4ZrBKC;V^5Tg3gKfQnRGO<>I$3qX@^yE zFYncsB5v;kh%w88F9ujV5O8a*>PjM@frup}Dj+~=gTEkJm?V`<3E%S(Z>m#TxS0}I zV20P|oWe&JTviXd3i9pCRiRP7TY0bAxR|G?Abw>Y>ejDKZghS(T@QvrP2Oy=O2{b1 z0^tMv8Q_2#HO$Uwl6rkMaeP*b4V<#gb&)L zzv7E7UM$5pe7T#(EsX`fKt#)cwBVxx&3d!!r_mRSTu<|EMbJ)Dej6@r>F5BaMkHqm z|6PCP#8DjG{f1s=&%L? zPeitvW=aU2Xr;tCF}Sx3lGjP=e(0NO%em2{inQ}RPsn+Zv$R7#b9Aa1m=|yt8GN>4%opC`d1kBqV`|V-%F)c+D#hZ9|EoB$Ye~FVc zV-qM|`;zMY2H))r4!5q6LpT}W-au^u@L#+GYvFH@g}#; zVPTzjt!BVp!h+plSL}w-<(CV(O0>8y0&v1&y)9DWGzXH)Ic4)!pu@pxQ&+z84Xprv zT+q}2pGN=bf!Oo}Wn9uBJwtZ>{XjdzNg+7lL>2K~YUGuPmAuMCNeIL_5-2cnE14Q3&|k zYov&8g62q^)jjSr^m#)DwbvjQ?5>ouSu6JuPawt29qfvLDJ2n3;$Qxl`{X`E&=mQz zYv=PG5JS4beaYQpP?p7u%0vXme#WsU(^G`z)@?QX!n%|M$9why``Eb+-@1<5?T|p9 z7tY_hPw8~EEUzxl@`<(^SaT5n45wTY^UFEid&VJOVIfvYcnxD+L4BGPF9Q;* z5Z{NdoUi_1c`97@&C;qGOzXj)4{wmJ_=ndO*f)rU z1tdX1N2=Vf+#dS8x96azrd=2`u@9=w)V!#>t9+=9vupt=0q6Sv#cjY?$qS?$s8u+!I1bF-3*g59jS!?wU;PIwAEZalOv+^#OejlIMHgJNztBkIj`9 z8BN3p%smAtou6g4@X=VjSAP%k_jx!4cSs|9(`ywT@Dar=FpPFT29YAV=7p4=ykIGZ zBhvmp7~y|cDVHpXN+{=#u1^oh?7Aopsml+v2gn5U3TT~L4K}qO(D(;)oTa(^eni+u z8j0`o;ofbW_#l_smwLYrR*eU5ExSNg)KK(7oNmR~8~lMwWUbAz{&-DFFMB)ZqUz=TVNoYZ1N>k^5HU9nQBbEq>M7FHj9GQuA%l^0JBj zv`k6->kD8g%IAf48$n~tg3$h%S=z0oJAN)%1tBWJ5k@K($@0`04*rm>+i^(*|xv8qw$K! z$@HK1xySWB=?Bv1)-I+CMm-8@L%x2y=DY>pCJE>W%IWAX9CRHm=J|Zn< z(nqt#;`=J6woqWCk9$J`Cc(P*XP8jTiMt*l(y8rlln_t5olzVkp^0*;p*6q2L^Dt@>2)e+Km zO^I$7nl)t{LiN)mX;03Mi_OeDXJzk*|7N zF9Y)q6|XJ~D$2{vf#=oezdvE+ks1$xmSE2=?_uON$R!}8{T9g355foJzXzN&9b;OU z(zam>QSwn|tg6dLUw8WBl2#z~=f>`F-A+inGA7V*tKAMGBB_j?tg~o&u-XduO?j1C ztT5WQCk8ZKG#%@lbTL*HAUe31*S?_WEPnuDn-RsaSq+Z(q;xl%g#(xOe2paRUS~nd zF?EmqYQgh4sVZP52mTa_4S`5L)2Dc^G2qN⪻Gz*zY4zXBwiFy}BkSj@1>R~B zQcsm}eAmQ0W<0LDUypv^|3)e3w%GRqfc{Lf|EdO~0_AyXNGG)=}yRiOmvGrojySTf(vGJEKa%cG` z`cHIS>zK00xXk2!R}Itnul(N@EW-x6((e;qWjk4;vA&)N;PlrqDiTafUM@BV$0GG5 zXov_W`#!Z68smFA5YMHT(O(AJXfP2!Dqt5XDuhQDaQ%M`HV%5&W8U@^bh_V;1Ocx| znAnc&pxJR-AjSh*m@k*=1JnjdqVMFnlNDo0sEm+4u2JzSV~l&)TV{vR@;wY)Mm9+< z;VU*?q}`ar*Ok2k)G!R@9jTA=Mf!HjI{EouxDxohYJpYA12wmvvUiU!CpArL&4wVqsgwXR$)4L-xZu-odRnr`BL|BxXd0YrAm|h>`U-7;RN4H z*wiF=X=)@;tPdr<(-5nP7V}CtedQ_x=t4pf23kr?b)-Msod5+wm_(@X=TDiVXvuh~ zC~deEeSWkeW*_Pjxh5;mV&C{)VO7102l^sd>QtURJ;4*u`uWt^YjD}m0zV$Z6pue{ zr*ekgGLtB=`6u`R@zxwiZpqzX7k0NXtlOLKo;V3EiH(qU0>Ur#SA92&#HJF{4|Et3 zyPck%nTwlxRk*{}zU_RqlJXSzrc?J_+K}!(yR;*7ww^wcda=QU3aFG0Nv?le2KyhfO42RB)6 zf(#cUdP<#xa|W(*Ch##yxiGa8wB!WhnCGV<5GwgtBrdsZw=^>O+@F0Ad1ql_A|_VG z`|#j~tHx<1aH>8BSAs&btkX)6)J%*C_BAFd4xfQ>XcjPv7_?KmSh=$larh_>Ib&Mn&GY|)%yU4Kyie`ck`foxAA75;1<;v)c~--0N;e@4j|#yX3SJSn=l#b z;yqu$^q-*`(0^jZ&R^9}nD4&ILT3Le&%>;L5h$SsVm=}FDh#$akcEL!X{Wst;6>Ei zKJTAF9LsMaf(ef3Y@op#DZADxVAw<~jP$3~2m5W#X}WcSoZmgBRfV(&YqHB2FR!ZU z)D_xO09i%r^g`Vy5|lyb0Dn<`P2qU{74!>IA2+=-vS+HGP_S^B^AZu^T%e~)uE0Ya z4su0bwGon#5O@TY+Z0|`9T4!I9=_4mZ_=+NBDj2*Fo1PiyC5fF?mmjv;4u}YynNlw zfjHJ{Gg#}FQLJAjEbsqduOI-L9qsq;D(Hw;;4uJt*HJCA1pgudPC+93@EKQ1)8GQL zN4`!v2pkHq4oTMIO_TSD{;u&;T;>&MTz-Vq*QFYNOHSYeNI=ZsVm-8THgO9mn5&r{ z%`}kL#DoDnNk;Bokvx`L=A{}Ic2>D5a1A(!+P3wa<<8yc$Hh{#Z0B?p!BPKa`rs%8 zpdMZ|y!w34#c48un`y4mc&Lmj#`5GoL=b>6IH5$b(p{A)T$yNgS7A^GOi5%ef;!Oh z3j4>Qbr4)ht~U*rlXIr)yayX80C)!zo2PUcS+vs}WG-Ct5d>DTPa*rw=Lz^#LtnfA zb>QZobwGiN6xTK-{yr`!1w!gMU`9;3D=c)Fd$W312E|MUdQO5Y#rg!&Kr?Il5$+*| z&|84?z@k7Bko~*XAEurLy$=sy@!gjVp4wh$n>R(83um7Dr4~@fz0>VSFjuE&BWK!4LhnY$qWUo|Zjt2vj zz2pa;?dt52c}?Y{RkU*SrUY6;oAR+B>N6=;jMb9XP{r4{Wlmcth3lv9f!p73n@h$Y zyvG(9bHf)}x_4qB+FMH@|s-zs}A^F2fOm~^AGh9;i$-3*Jw6|gGmllcRA zljU$F>srHe$kSO>=C49<%DPW;2OIYT5Xk(*8~b$X;B8sP5SkR?0`o@|2lwiqThxnj zfSq_|jyJuO#zJ+ht|gSN8VI@DqwIDyg(jd390;G50Wl%a_?pYsU#TC=z_VBCKzve6 zT%J4{ZlolF03k<38K~%RMKvB%FN)C(#;?I7U=mupHTdz@z>1nS8ky*Q0_57d(FO?U zj}cPh6&82*@GoTB|7#Le*)kPtjEmEuzdF$|6FTboe^VIch7Jgug$&F)IqRZ|LVVK%?N%o2mf- zf_bipJ3T4`*o@b;fn3BjiMwWCAp{|yE!fLApV>eSDR|K0^C;n_Xfx%2$e z>I>HrJXbL|3G%8v%)2?iI2~r5-mfGWtfqFXOY1EUiGZZe!HoFWV^p>i3*HS!afrr( zL_$!YN%5U;rI`1WPBrj}CneZbG!D{NV03VMTR*@JJtl~S(E;xGncc!GNVzM;(g*^D z6tEtz-GK(hx@@lcD#ZZ(eeeF&8Vv?=*SP}3(IqY@F+z!2qI&$nsV)cSvl#|Q0W!h9 z5;$7|q)}PQ-$h{=QiQFOktIHopWgjtMO$dymIpNCg;DngfT=2D-1 zzvoJoT1L;r44wk$+fI0Hj>Tvqm=po3!rKj=-XN|AYH(FxYa4DuPW-G=pcW>>2N6@e z-g!iH727IgAxzgGntX*^$L)24bf7>y8Z9MdfJLVpAn;RU1n_Ik=Dc(`*TEV$f|y|rIItpqv_9MQWt;jG4hQLzSdsZXoG~Q-8WWcW zhCqBc4&`uXtvZCH732i%d~(1y~$ zZ5j$*+}~!`!W_$8J(USCAb64pc4pj3{nbvZK~dC{U-WttkgYwN--BX}HyJ{>DD_yl z1IsEHxED-{8+lX{!OUL7+*BnNZW<#Yymzo7m82&w3tqZSajdLQdd*0coXk>@TG+tA z^Cb3h%JBTfi(!qT4w-@LY>;PF5gS+_0&mtN`~eFPq(GEjs9$R?nR^pKLaG9Elghx! zH00Z)^lR?Q)FK8p;N>%f{8vvGgChKIIe+Ir^;iuW3m-p5*GR-muqp!&sm<9%R_O_$ z9O&xim&ldFFBuscAbl$U%#ld{L3k0%qiaTLoB+j|2!#5^WAX5slU@OIp!GF?_6c@s z3B2n((FzbZVf6@KzCk)jUHiI3421{)rTH}_+TIBXoOmqkAICI zs=pFnVzdgL4esN7IK%wYC(vQ-%@Gs%K?AP4~6c`i=<7Y;6bzg_*jHNGo@&ohGsn1t!A?2vMhanBbA=n?YopqGvp z1}li@CP>f<_PxQX?kN)flMst)0~J*?h#?gyYj#($SFm*FURFHcs6CowvC6Z@?U_|V z$H-Y)5|TjY751RtD)BuxcK3P&nh?vqwM>x9&zN5Sw#PK!?zdO_bApUlv@^ zib|J`n8CQG0gxXjvCzi%#ZxR?;sOZ1f|_y5tLs05@h6zB65_mzzbcW9^+f~a@v|rk z+=h+dI2}`g{KoG(5QCNA1z-W#WV8}2C-KWW!s4u9ya-biZZNFccla12V94p-o(B2^ zb>OZwLa#*%MJqZ&2n>rykdq<7!)W4yeH;I@46N?xo&YwhY^j7U13}lY!Jc`Y!(PLu z&1O|?QmGHniZmd92eJwZ(V#4@ya#V9d3ahrxpOVS`v4;b6!^c8@LBLiFS-gSM8JF) z&__A~%K!4=^@l0M;4#hy!ZY!ZGza3#DL@CB-$`EcQ^{~y;5Es)isA*q+V^m#jle*b z)kFVKy~bck3Br9I6ctm7m{J$$_il!Kj~LG?@C0kB7A88AZ^{h6!Sz-B z4T2rA&@mvenv=CXtl^$#$}{-^?BH^yhi&ck%L z;r~sCulEFqU?thppOyjl5}H6Kuz-+U_@xHy6oJlnHl;Hi7Co3Oys_{1bjG@G_E=xb zRt2^34erNX?XCBdJj!0g3cIjbtVIO0LZ6!#{$O$wgd|{@z_RmcAO9Y~6M+mgq#@IB zcTKhjbs+Yv^`kPN1}|V7qJCPnA8n>6uJ}JDn+2yVT$dfGKw8#VmP+GjftZE$U_k$T zwqwiD_MnJ!5^^!ne#yLqbq6LH!aN)%M5X(EPX+c!g57ID2PXRJxV>*6Mi3v5_76?oSYKQS7d!{Q zp9_MXj2pbu1;31$X&jHM$C=rIE8BXLw7!kigZ>KO+zLwoJomLvsj6s9{5_2RTNwL? z4~zN!9zh>*gI6O!71(=-$5C!nUmhURHUr+O9U%bGI@0$`#ykdtuo#*&gNy)OvakMu z0dzjFErpLR1F`T6NkAeXfZzT3A9VOa=2zGx;hLqkm+596j&q@v;IOSL6OK!gyXHGt zxj?b(X^-l?0+#`sh1)1*>b0_=scPGe_iJNFBHHVPAj+;oHK$wv!!;Sr1^%l9dl-N> z==MWeB%z;+YM&nn}*w?yt<79cn!CrYQ z@no%Yr|q#SNq&OL%ghp0u^>?#-LLNQH>FVG?JAefXnorMl2ptlSeT@mrD};`xhkii zQGW)1H-n6vj6{t7mSjz8-%T^IZlnRN+w(itRn>ydmC~=533P*3CD)yg@Y^cl&qeU= zwZ&MEI?ELX+)_Sha(Nkx3Dvkr3eICs>jCmc zZbLOWwS`$;>iV-1Y0U^};VKoS21-=BW{Q2C>;O09`t(+XPSq>+sD$k9WUX{MLqk;$ z;i%6qC0b~-iy<7gM_7=zhB+P!3xlTqYN(CtVvOkFNIB}$l*aNK3yWkHk(zv|x3VQs46}5NhNJfrR z&1f_-W(ZNaN)W^!%h5`ukaGAfjR`!@VpP2^r2(R|W4~xfv&qlgIuY#q$gOYv`;3^2Fs_Aj)&H_p@4 zQQi+-ybO)tCu6ueaoQg(ko+_+N^#58B>DU~f>K94bDzRHJOVEhYC!J{sd)V~i#fe6n`|awl(^HPLz-=s_E7tXX z>nk~=*BG;l#e(KMA4~b{$8pQ@lE<*H^N%28IpeRGTjWxz9+voi&eex(bbQZ3RRwOA z6+zJ?7UeRWYEpRRE0QV8$#Tl~?cAP>eV^nz19kZs5U?sAZ<_j0eX3pzF^KZB(Wy@x z)8u_){{g-c4Y(1J(x;+Hb@Rh9%6Xds))p?y4Ao_k4YH%f0obq@VUG0^t?>dXri@gx zeDoA7rje_QWimG&xh(LV73%zI0wvTD=4$beN)*shPn6ML_&%B&+gY9AnI0cBR_nz9 zxt?5V?NIFSm}P!_IL{e3%f}dLcEcKh`V?FYygTP`nGmw^d5c88e@3X*8g-w}5Zr?9 zsb+eahg@dnA)@8gFe9{S#6YFG9jPCBe@$n~(5R$CvTc|>XLdyO&gPc5p~dW5eu(c3 zxQeWbeBq2xFPJ@X&yYyc4)A+_aoP>CeQ;0i#j49Vu*bO2eu5jgjSRCF^&|**+ZF+` zyUW#DI$XKk2m;qQzi#khj>{Ff6*cPZVN037!}+Q*)8@)NCodZouV@W`&kG5qoVc}C zKlkDEBrA~}B4v5pTwP|?91)-mE<+7phT2@_q2ZnbXPI1&UamFC=bRU2_A?ILw;WXO zQX*j2Vm~!X1EH=kR?r!E8tzqv+o0*BvX>KKbd}$x1mC1Tqw?(zS^HsRiYEBV?8rxn z%@6D<#lM)BoeO&4NKLkXq|uNZV%K8e@oK*;S29huaWn`;vL7(u^Fbd($EE;?ju?uv z+{y8b)sx}NGKw`i0Z;B$XAO&ALLQN>JUau8XzY78v7D@DN>TiB0>NJITe$H;YHnts zc9I%C;i;Q|#JR5fWXfUZLzk!|MYN0Qp8b5e?3k(rK#S^|S=j+z$hDGqlwGHkTt>cs zP9aw*n6t-hZ`2ogp<%Vu0s{hh`&HN2(IYgOK||l=#{6qwjWxSv#UmwY)UH>!;m?=w z5!jE-d|q|j*W@*vweecK^gI+LgQ^o}M^IxzC*Hsv2~=td-HbQdPdq{`LP8eG7=z}v z*_97|33FR!!$oXYyphRTG-#c@Tz%qbzcg3Us5ofFGQ+a`^Xfq19-s8(r#~V#*w->A&ewjsY)dRv zr_>+A)w0e6y4HoqqQhFaZY0U~6(N27?j@z4_$(?XyS?ktnp(4vP#zha`1PEIeypJt zH8e98pBl@{(lYF07l|PWx?g!|kku10u@a6E**pEC^vqpj9Db|MmFrgH6@IRV8#s+2 zh@ee81`^e63J~V=m<|;4xz@o$7TKklX6kD{IUCEsa~Qz!b)~MqDrUf<_71&uXiDH> zoG5q=I(yiQJY%a;uv8Yq^(w2rNg}ulvf0h8$}^XaTY7&dOm($`wV|P0s|l)!1Lo*j zCdhrWb*?c&Bi|?+m?Mfu*}Uo92HC-a`2aK2l`Kj$pXc10e$(mKwE^bW&&0GwJMW%n zIsO3dGN=hct1Ra$(A}?O4RKPA!#Urd8~aU1`DoHGKPM;G8cNW_H{4R_aNh{!KenOh zw2uAw*l%meH!3mJvV;iK&<0R7H1Dre(lgJOuRGr~UkMCZ296!{e}WP$QkR*|lMd@u z$I!Kmke6_BR!*w;z^0sGnV_>mZ|db+X{$LBy1OVE^{u}NA_ms4of^D2{-WVktWt}g8;eDOmgH*8k_ z8t^>gybexciL(a<^nO+&!GV@2<`MIPRYztAmwvX zVKjI-*A+iOTn|`uL){$j=C{s|-ABQgN1sDpyilsU)0w5$Qjp)B0U84i_Q$Za7;BfL zn0#x4>lX%iy(x}{nzb}ll-H9M$)Gs`U{%NLx5#MaBjnbS~L*%?$CJ~B!L z|H!K8PV3F9sTI-;EFrxE2pP_;;FT9G$k@VZ_k7y{4ya25#K)$6`g3&$i3gXezFn5F zJ#BKJBP0$Bj?91xSf;$dA)YyQu{XrA4Nh5a3iH_}edglll)UR#;4_BcGblYm^Wu!A z+rw;v7sEuKKgiY23(2zRe%4_3ikcPT*DQg1eq2I!a8NMrZepfN>DCfAw^-_G35dU3 zl3!{@(44MqnwmPVSuppufaF1Wha}zT7iq!|;mEb~?B5zo^~qi18dB0SR^=L*cWO5b zdN7^NM$*0bBl)%ATAas~k#wCgWM+(Mo>G!I_ce*PbCve}88&(8Eh9KkX*oSFA;;v{ z73@!r0QxBSF0r#?y0zkvQ&NIL5I`lcW7V$YJEOYSN}O5rJAh{&Z+M!aI%4zY!gb(m zaSC>vf~Mu-)4u!+fHS{PRnEP3bnA*2*$MiDdhm;C!RXBIk7iB&30J{n4(_TF#jOBA z*6Pv*khV)f;1|o*8NxC<2fNV?j+W)cm#Rv~-uH?Y##j(YH`fzId6kO_*%MM4*5xTe zV~Z?L)$+<1!!t~$Z?+VJgc;Y2v{D~3_E%X+!Jjfr0p>C)|2&h1)N2U%cKN9~#<(T$ z$~X;yM)gg>l||JSEqdlD5FSP61r?WnoG}|&uL9w*d!IrCKh$N9OpNG34MK{OHTbH; zhxE~{{>=2da1~1cVe0CVWVM{d_|3i`hpPv`xqh=9%|+#dx$6y8Ghq|Z4zlpPK9k+#UaP=H6KA53i==e$-MuQK=ad|dexP{Z@PVc3Z8fW^XgMpFyIi95!lFh|tNcH40hYw_yP|>Wmvg z$5L>UtjE_+MCy313}n*{_&#d=QMIi;E&YS9LGf81KVBIzQ(w=v71+TXxDS2meEbCY zs)Jt|G`MEb>!7Ib3B{EbIhwTK=ZZiH_w|8OR_FeKw}inxFd+OFytQF$WXduKSx=Ku zWa4Q;$UJ*Qm|vDopJm%0M%p^84Z4qA6Yvdn%DA7}`9j)NS$(b{gfu5>^q9)>k3F-K z%{w4jFxj@|ZlG3uO#eW)5q?LLu^05KZK<&!et@7Ln@?{MSw4pC&m|elEF|k2pP9YU zOI?UpzwWYQ0lGCNLr8pj1v6==3a29HLqP+syuCQ!+$ZZrizLvT>Dy!Qsj-odvGW&I z{i6*0Ds_6CLC^Q*Syrr@Of}Ow4$fXJ@4y(3kdy@A=kLUC45izM{9Kl5X5VssfF9~n z;sC$r$Vj={c%_tiV*3i6_6_C+gxvM+&LZpIT*OmDy zft*qPyo=<;a7mBz?S`@1MD%piVBk?s%FA5MVAE0g9PqXg^S+ua?penVeK*cA!SLt) z1n3dLpM%4gXHJs#z4VLVTp4wR|M&8G(^;viqg0YjATa75>6^WInYuvE&sv=d^4?XJ zk;`S6jLo?P1;L zK^-&5v8^tYEev>&Hpp`yK-)p-pyPAQC+p0u_Y6NRhVXx`bwA9?^7P#sMBqT1w%{_v z#P3+t0(g3`f~!{Hu0NdSX&k3k7i?^ptN?-|_}BiXLdTwQ*6NUPt7t78=^qPc0I;QJ z0pJ)q76gxg69~6BAEV>PJ*>g|B>?Jg%j7JOv#Rzk3}~f8yLaOhRM(iMwK+8sV}x`B z#DW(LmZ<;C`|)ZxI-uAuwuqBJn_`Zr6xV9i;)q}wG%wm ze3`;=oJSuE91|JVz6zrsvXSl5MY4n@Nx*8SbvR^91@AS2(5NbO?aR(o(7Te z$qrm5A)3$O#hyv$phoc7Kl6UK@^GX**V@&BJtRD8tg!Q0k=wp4tUB$Q)U`i*eAmLnuUoAXs!nZln+ zO$Tjm##+CEEoj>dDx_M{uL>&6l5K9M1QW z@#_B0{r57}#jkdMT>=Qkb=4o_u4CZa!i!B$exCG8q?cPrra6cd!aVSEUX^VuCbsH= zYh5UhlTXjNtE>MdwNTef*dpgBwMrc;f&kpF1#rKpQu}_qi^A52@Rp(?(C9F4grLNE zNjucGcY6&VbOL&g;ym_UNaC<8BLaSX0788(@$c0C3*Xwmh+ViOkeaqWK>uyNbFT97 zz3insO*ieHMOL&u28dAOAa$$ayP0RzaYoy+Rt7fY$ONA=frsp;G8z7ESuu0iD?6n=-KHK`I zT=<`)HkPgDL}*&)t{8;~o>uyj_r-PYWXJls0Km_ova=vgHyQe)-nOo97}&(8)B%0w zndbMtUu_$3mwV2&z;|xW>NlnJp@?yTpbL@kHv;~lw?Vl%ly~>(2WTPJTo^=D%0EP{ z6Ogu7j7kki<82a-CF{J&1ccvoCpt7&$<=>?!ti2%;wb&ci>>pEWekyg6tBfqrRM~n zvatDs>I~WN!**%#%mv>qT{x(|`{*OtuN`*~_Q>stGiE2>?hY{52uRb|R{+ef((1Ze z4vK(Lb}UUm>W_TWsb)(+gP?oiW9E-hNiiE8sae?WL@fq%T{R`gmgXPXY1D_plKv301;OJ|KwXJH> zIa@~G=IjSpy$97F`>|&$AN`d3W@+&<_T5vaKgxicVEwSJpB+L*VT}*=tS}JCzC$$0ThepnU>*(eY{!f~F;-vgJuN3uwPj+hjc!9?W*@KVi6y9_4!L^F&g^B=lEpChH(6;u+{ox+iM6xN zRkbIV=3Nrj+2Rt~l;F)9w*HUlCixgSk_E3snrHb)J+%R9&0Hk>46$hmW)7a-Mo%qM zuh6B!7AZTDM)7Zl*j8)I^PS24ue$ZLr;=5pu%IYLzJCR@tS-2uL3|_3S5&W(1bD1+ zKKcmoOmF@kHL629V_UAcRQ4gc6#opLa9S<4tcD|{tG?0eCVAoCX7V=YLM+WmvrzY69J2;2sH=qQs z&vzB2`1H5xW4BTQ)E}XKZXNna{u1CLA9ybN^4QTZiALSP8%#pAZQ3t@3A4wPX03M)Z>9el{-gs;hB8 z>(kT*mCTV5+{IN%q(6_3@9Kc1VH?G7uv@xu@o1f8fO+s-rZ|y2kb$M{AFBhjtSpDHU2@Jb)lKK(!$p-@k?2?|=%$+5H>rzO&S;)iaFeRW1F< z78oA10%KiY?vr%1z~$*854qL=ksiYC2;9nA|5;@b+NKgL3`oD}fo>LncNzVxppt(* z2^26%*gx7-6eF4k%{%gvT5xL(EO3WE=I-uwqD+a=wh7*1Yf_ z2Z3~&;%KNEnkY+C`>-hpim9AJBlA0LxZ}~XZ*LHaG&xTKXy)qT3F4gC9u0Omt?6Ea zJQ01aSxy;s)4<70IOvN`s2i5`Zr0bd}D=fPZAh!gnL z)k1G@xNv?sZF)A?A}nMYmbiEdkvd=glDK;Bf5i3Zn-!;TEuX{m*gw0^c{x~_Mc;*6 zS94@FEG)DE_UBehV|KiWP40 zVWVVySv@m7Bce- zp<4D(F$(mDr0>{#yO6VWzNb`;Tm+88NIrd#x*y)uHaa`&K=2*)?edM@u&~X1oqw_K- zAFlpztDJjzHcv*$hZZ;Rm{vGYvdxnaNeLLAN z;ly#6hZWu1@f2B_NYC(Fue3pw7{gs=(*$eG{ss^I59fC&=5(om6#Z+8)8Or!=mF0x zg0QyjfQV5Lw6fT{FtYLF<;yIPybvELY!Ef3HwA~6ujE&Ua&-WMv|mB09CSSpI~l$& z>nF!QX$2%MA3Mh||Yc&NL|6dKeh!#S*Ba&xk|@8olIHwA?s|B+48bF1KcfrEra*ZKF>NB>B-M8fgStS z9exhWmp#L%BaxnwMw4L7W9Omu?bk>rd$(c1y*`8w9rIBNX^6|7aw?T`1eotVYaHIY zOK$@fl-7s<6@su863&A!lUn6iEicga5Ap^xzxt21Eh%hY{bu?p*F%kDpnxA&>ZPF8 zD=B_6U7+M0hC9EFtDd<|hdIwgWN@jX;vmq6UT6xc z!j*l0G=6(-$N2B@tqWtglW}|Sab+s1+*Tfv>e_a5pCwve=E4uX_XEBq~`Wz^#6Z$f?2y; zTIJDQ^S0Dr%#&`X8Zr6<-N7#>ubjF|9-(h)gT86d*Tq(R-$H9TFr?{`$qCG(K!H*8 z6x?4%;r`;9Ymmd7aZ6C{(T*fv8$y<6t?D2032okeBSr%M8{eF(0*;y2%LDH8EC)Z) zVmzZ>=^Gn_S|BvI4M8=8Ri@x15s?8EDypp`9nf+oo%RG9z<~7U=Mc@iepGvYa5y^N zAp#W($5p96EWqdW@pJw5YXhvZ8lloa2$;|x1xgeI!O@08^lx_9+fdZHkhU<991d#* z&bSMKRRW_slX2N1szrua>30d;Z5T5(-4yd_?G>ii+rG zPZoOX=ii+R#t0i+=hpKlHA^U*m)0hkr~3A?TpP zni>uX?edp)OXqRx%TcqKo66L2H8g`IJOswJ^&ZF!5WAVyW%GcmCxCctn>Ai zhshWF2PxnQn$06}5HSpJp>vFcYmAKPv0<=9u#Hvl*l}E8S)tMHoN@Uz5LVa(@MBdf z12@*!Q#NUsH%aj+sGe(W4&RJSp}gTDrlK&v$l1sz3%)jd`uA}C1e#x_Cf#v diff --git a/docs/reference/index.html b/docs/reference/index.html deleted file mode 100644 index e0ff536b..00000000 --- a/docs/reference/index.html +++ /dev/null @@ -1,144 +0,0 @@ - -Function reference ‱ xportr - - -

    -
    - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    The six core xportr functions

    -

    -
    -

    xportr_type()

    -

    Coerce variable type

    -

    xportr_length()

    -

    Assign SAS Length

    -

    xportr_label()

    -

    Assign Variable Label

    -

    xportr_write()

    -

    Write xpt v5 transport file

    -

    xportr_format()

    -

    Assign SAS Format

    -

    xportr_order()

    -

    Order variables of a dataset according to Spec

    -

    xportr helper functions

    -

    -
    -

    label_log()

    -

    Utility for Variable Labels

    -

    length_log()

    -

    Utility for Lengths

    -

    type_log()

    -

    Utility for Types

    -

    var_names_log()

    -

    Utility for Renaming Variables

    -

    var_ord_msg()

    -

    Utility for Ordering

    -

    xportr_logger()

    -

    Utility Logging Function

    -

    xportr_df_label()

    -

    Assign Dataset Label

    -

    xportr

    -

    -
    -

    xportr-package

    -

    The xportr package

    - - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/pipe.html b/docs/reference/pipe.html deleted file mode 100644 index 2aa9c355..00000000 --- a/docs/reference/pipe.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - -Pipe operator — %>% ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    See magrittr::%>% for details.

    -
    - -
    lhs %>% rhs
    - - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xportr-package.html b/docs/reference/xportr-package.html deleted file mode 100644 index 171d8460..00000000 --- a/docs/reference/xportr-package.html +++ /dev/null @@ -1,97 +0,0 @@ - -The xportr package — xportr-package ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Package Info here

    -
    - - - -
    -

    Author

    -

    Maintainer: Eli Miller Eli.Miller@AtorusResearch.com (ORCID)

    -

    Authors:

    Other contributors:

    • Atorus/GSK JPT [copyright holder]

    • -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_core.html b/docs/reference/xportr_core.html deleted file mode 100644 index bd37c738..00000000 --- a/docs/reference/xportr_core.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - -Check variables according to their 'Core' category value. — xportr_core ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Do checks on CDISC compliance for each variable of the dataset, depending on its 'Core' category value. Values of -'Core' category includes: Required, Expected, Permissible and Conditionally Required. Refer to https://www.cdisc.org/ -for more details. If checks passed - will run silent, otherwise - throw errors or warnings.

    -
    - -
    xportr_core(
    -  .df,
    -  datadef,
    -  ds_name. = "",
    -  var_categ. = c("req", "exp", "perm", "cond")
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - -
    .df

    Path do dataset, when var check is required.

    datadef

    A table-like object, containing actual SDTM or ADaM specification information.

    ds_name.

    Optional; by default takes name of the dataset without extension; useful when dataset filename -differs from actual name of dataset (i.e. if ADAE file is named 'adae_final.xpt' etc.)

    var_categ.

    Vector with names of 'Core' vategories to check; default: c("req", "exp", "perm", "cond").

    - -

    Value

    - -

    Nothing

    - -

    Examples

    -
    # Consider having specifications or spec metadata in place ("ADaM_datadefxlsx"). -# Let ADAE be dataset we want to check. - -#d <- load_spec("ADaM_datadefxlsx") %>% - #xportr_core("adae.xpt") - -# If filename is different for any reason (like dataset had to be split to -# meet size expectations). - -#d <- load_spec("analysis_metadata.xlsx") %>% - #xportr_core("mo1.xpt", ds_name = "MO") - -#d <- load_spec("tests/testthat/files/ADaM_datadefxlsx") %>% - #xportr_core("adae.xpt", ds_name = "ADAE") - -# Using 'datadef' tools: -#dd <- define_to_DataDef(path_to_xml_file) -#xportr_core(dd$ds_spec, "adae.xpt") - -
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xportr_df_label.html b/docs/reference/xportr_df_label.html deleted file mode 100644 index 452540a9..00000000 --- a/docs/reference/xportr_df_label.html +++ /dev/null @@ -1,125 +0,0 @@ - -Assign Dataset Label — xportr_df_label ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Assigns dataset label from a dataset level metadata to a given data frame.

    -
    - -
    -
    xportr_df_label(.df, metacore, domain = NULL)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing dataset level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    -
    -

    Value

    -

    Data frame with label attributes.

    -
    -
    -

    See also

    - -
    - -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  SITEID = c(001, 002, 003),
    -  AGE = c(63, 35, 27),
    -  SEX = c("M", "F", "M")
    -)
    -
    -metacore <- data.frame(
    -  dataset = c("adsl", "adae"),
    -  label = c("Subject-Level Analysis", "Adverse Events Analysis")
    -)
    -
    -adsl <- xportr_df_label(adsl, metacore)
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_df_varnames.html b/docs/reference/xportr_df_varnames.html deleted file mode 100644 index 46eb9c4f..00000000 --- a/docs/reference/xportr_df_varnames.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - - - -Rename terms for submission compliance from data — xportr_df_varnames ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Change the variable names in the .df (only) and return that object to the -user. This function simply calls xportr_tidy_names on -colnames(.df)

    -
    - -
    xportr_df_varnames(
    -  .df,
    -  verbose = getOption("xportr.type_verbose", "none"),
    -  relo_2_end = TRUE,
    -  letter_for_num_prefix = "x",
    -  sep = "",
    -  replace_vec = c(`'` = "", `"` = "", `%` = "_pct_", `#` = "_nmbr_"),
    -  dict_dat = data.frame(original_varname = character(), dict_varname = character())
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    .df

    An R object with columns that can be coerced

    verbose

    The action the function takes when a variable isn't typed -properly. Options are 'stop', 'warn', 'message', and 'none'

    relo_2_end

    logical, if TRUE: numerical prefix bundles will be -relocated to the end of the string. A prefix bundle is determined as a -number or "grouping of numbers separated by special characters and other -punctuation". See details section for more info on prefix bundles.

    letter_for_num_prefix

    character. Will be ignored if relo_2_end = TRUE. Per CDISC & regulatory body requirements, variable names cannot -start with a number, so if you want to leave the number of the left-hand -side, use this argument to insert a starting letter before the numeric -prefix.

    sep

    string of only one character long, intended to separate words from -one another. In general, only "" and "" are possible, but the user can -insert a letter if desired. Note that "" is discouraged because it is only -permissible for legacy studies started on or before Dec 17, 2016.

    replace_vec

    A named character vector where the name is replaced by the -value.

    dict_dat

    a data frame containing two variables: the original_varname -and the dict_varname to find and replace

    - -

    Value

    - -

    Returns the modified table.

    -

    Details

    - -

    Abbreviating variable names in the xportr pkg uses a step-by-step -process detailed below. Each original variable name will be renamed based -on the method performing the least amount of work to achieve the min -character length requirement (8 chars), thus maintaining maximum -originality. Therefore, the function only moves on to the next method on an -as-needed basis; namely, when the term is still greater than 8 characters, -even after lite modification.

    -

    (1) Blanks: Any columns that are missing a variable name (i.e., the header -was blank in the source file) will be renamed to 'V' + the column position. -So if the 2nd column is blank, it will receive a 'V2' rename.

    -

    (2) Use dictionary of controlled terminology: For example: 'Subject ID' may -better be suited as 'SUBJID' within your organization. Note, that -dictionary terms are expected to be submission compliant and will not be -further abbreviated. They will, however, undergo a check for non-compliance.

    -

    (3) Do nothing! Or at the very least, mimic what SAS does automatically -when cleaning up variable names during a PROC IMPORT. Namely, replace any -special characters with underscores (''), capitalize everything, and if -the value starts with a digit, add the '' prefix. If the 'SASified' name -is <= 8 chars, then the function will use that rename. However, if its -still too long, the function will try removing any extra special characters -or spaces to help reduce to 8 chars.

    -

    (4) Find the STEM or ROOT word of each original variable name. For example, -if the original contains the word 'resting', the 'ing' will be dropped and -only the root word 'rest' will be considered. If less than 8 chars, the -algorithm suggests that result. If its still too long, the function will, -again, remove any special characters or spaces from the stemmed word(s).

    -

    (5) Apply an abbreviation algorithm who's primary goal is readability, such -that the results remain unique. The methods described below are a bit more -'involved', but the results are very robust. First, you should know that -characters are always stripped from the end of the strings first (i.e. from -right to left). If an element of the variable name contains more than one -word (words are separated by spaces) then at least one letter from each -word will be retained.

    -

    Method: First spaces at the ends of the string are stripped. Then (if -necessary) any other spaces are stripped. Next, lower case vowels are -removed followed by lower case consonants. Finally if the abbreviation is -still longer than 8 chars, upper case letters and symbols are stripped.

    -

    When identifying 'words', the app performs some pre-processing steps in the -following order:

    * Certain symbols are replaced. Like the '%' symbol is replaced with 'PCT'. Ex: 'I_Ate_%' becomes 'I_Ate_PCT'
    -* Replace any symbols with a blank space. Ex: 'I_Ate' becomes 'I Ate'
    -* Find when there are two capital letters next to each other, followed by a lower case letter then adds a space between the two capital letters to separate the assumed 'words'. Ex: 'IAte' becomes 'I Ate'
    -* Insert a space between a number followed by a character. Ex: 'iAte1meal' becomes 'iAte1 meal'
    -* Insert a space between a character followed by a number. Ex: 'iAte1meal' becomes 'iAte 1meal'
    -
    - -

    What do we abbreviate when? If a stemmed word exists, the app will apply -the abbreviation algorithm described above on the stemmed version of the -variable name, else the original variable name.

    -

    Since submission guidelines indicate variables may not start with a number, -when found, the algorithm will either add and maintain a '_' "prefix -bundle" through any transformations detailed above, or it will relocate the -"prefix bundle" to the end of the term (the default behavior). What if a term -starts with non-standard numerical prefix? Currently, the function accounts -for the following types of prefix bundles, where 3 is used as an example -starting digit:

    * x = "3a. hey" will return "3a"
    -* x = "3_17a_hey" will return "3_17a"
    -* x = "3_17_hey" will return "3_17"
    -* x = "3_17hey" will return "3_17"
    -* x = "3hey" will return "3"
    -
    - -

    See also

    - -

    Other var_name functions: -xportr_tidy_names()

    - -

    Examples

    -
    vars <- c("", "STUDYID", "studyid", "subject id", "1c. ENT", "1b. Eyes", - "1d. Lungs", "1e. Heart", "year number", "1a. Skin_Desc") -adxx <- data.frame(matrix(0, ncol = 10, nrow = 3)) -colnames(adxx) <- vars - -my_dictionary <- data.frame(original_varname = "subject id", dict_varname = "subjid") - -metacore <- data.frame( - dataset = "adxx", # fix both here and in metacore? - variable = c(vars, "NotUsed") -) %>% -dplyr::union( - data.frame( dataset = "advs", variable = c("carrot", "cake")) -) - -xportr_df_varnames(adxx) # default -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #>
    #> -- 9 of 10 (90%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 3: 'studyid' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJECTD' -#> Var 5: '1c. ENT' was renamed to 'ENT1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS1D' -#> Var 8: '1e. Heart' was renamed to 'HEART1E' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> All renamed variables passed validation.
    #> V1 STUDYID STUDYID2 SUBJECTD ENT1C EYES1B LUNGS1D HEART1E YEARNUMB SKNDSC1A -#> 1 0 0 0 0 0 0 0 0 0 0 -#> 2 0 0 0 0 0 0 0 0 0 0 -#> 3 0 0 0 0 0 0 0 0 0 0
    xportr_df_varnames(adxx, relo_2_end = FALSE) # prefix numbers on left-hand side -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 9 of 10 (90%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 3: 'studyid' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJECTD' -#> Var 5: '1c. ENT' was renamed to 'X1CENT' -#> Var 6: '1b. Eyes' was renamed to 'X1BEYES' -#> Var 7: '1d. Lungs' was renamed to 'X1DLUNGS' -#> Var 8: '1e. Heart' was renamed to 'X1EHEART' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'X1SKNDSC'
    #> -#> All renamed variables passed validation.
    #> V1 STUDYID STUDYID2 SUBJECTD X1CENT X1BEYES X1DLUNGS X1EHEART YEARNUMB -#> 1 0 0 0 0 0 0 0 0 0 -#> 2 0 0 0 0 0 0 0 0 0 -#> 3 0 0 0 0 0 0 0 0 0 -#> X1SKNDSC -#> 1 0 -#> 2 0 -#> 3 0
    xportr_df_varnames(adxx, dict_dat = my_dictionary) # 'SUBJID' used -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 9 of 10 (90%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 3: 'studyid' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJID' -#> Var 5: '1c. ENT' was renamed to 'ENT1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS1D' -#> Var 8: '1e. Heart' was renamed to 'HEART1E' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> All renamed variables passed validation.
    #> V1 STUDYID STUDYID2 SUBJID ENT1C EYES1B LUNGS1D HEART1E YEARNUMB SKNDSC1A -#> 1 0 0 0 0 0 0 0 0 0 0 -#> 2 0 0 0 0 0 0 0 0 0 0 -#> 3 0 0 0 0 0 0 0 0 0 0
    xportr_df_varnames(adxx, sep = "_") # permissible for legacy studies -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 9 of 10 (90%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 3: 'studyid' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJCTID' -#> Var 5: '1c. ENT' was renamed to 'ENT_1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES_1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS_1D' -#> Var 8: '1e. Heart' was renamed to 'HEART_1E' -#> Var 9: 'year number' was renamed to 'YEARNMBR' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> The following variable name validation checks still failed: -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `ENT_1C`, `EYES_1B`, `LUNGS_1D`, and `HEART_1E`. -#> Cannot contain any lowercase characters Variables `ENT_1C`, `EYES_1B`, `LUNGS_1D`, and `HEART_1E`.
    #> V1 STUDYID STUDYID2 SUBJCTID ENT_1C EYES_1B LUNGS_1D HEART_1E YEARNMBR -#> 1 0 0 0 0 0 0 0 0 0 -#> 2 0 0 0 0 0 0 0 0 0 -#> 3 0 0 0 0 0 0 0 0 0 -#> SKNDSC1A -#> 1 0 -#> 2 0 -#> 3 0
    -
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xportr_format.html b/docs/reference/xportr_format.html deleted file mode 100644 index 9b582f78..00000000 --- a/docs/reference/xportr_format.html +++ /dev/null @@ -1,132 +0,0 @@ - -Assign SAS Format — xportr_format ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Assigns a SAS format from a variable level metadata to a given data frame.

    -
    - -
    -
    xportr_format(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.format_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing variable level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    verbose
    -

    The action the function takes when a variable label isn't. -found. Options are 'stop', 'warn', 'message', and 'none'

    -
    -
    -

    Value

    -

    Data frame with SASformat attributes for each variable.

    -
    -
    -

    See also

    - -
    - -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  BRTHDT = c(1, 1, 2)
    -)
    -
    -metacore <- data.frame(
    -  dataset = c("adsl", "adsl"),
    -  variable = c("USUBJID", "BRTHDT"),
    -  format = c(NA, "DATE9.")
    -)
    -
    -adsl <- xportr_format(adsl, metacore)
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_label.html b/docs/reference/xportr_label.html deleted file mode 100644 index 9d3787e2..00000000 --- a/docs/reference/xportr_label.html +++ /dev/null @@ -1,134 +0,0 @@ - -Assign Variable Label — xportr_label ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Assigns variable label from a variable level metadata to a given data frame.

    -
    - -
    -
    xportr_label(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.label_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing variable level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    verbose
    -

    The action the function takes when a variable length isn't -Found. Options are 'stop', 'warn', 'message', and 'none'

    -
    -
    -

    Value

    -

    Data frame with label attributes for each variable.

    -
    -
    -

    See also

    - -
    - -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  SITEID = c(001, 002, 003),
    -  AGE = c(63, 35, 27),
    -  SEX = c("M", "F", "M")
    -)
    -
    -metacore <- data.frame(
    -  dataset = "adsl",
    -  variable = c("USUBJID", "SITEID", "AGE", "SEX"),
    -  label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex")
    -)
    -
    -adsl <- xportr_label(adsl, metacore)
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_length.html b/docs/reference/xportr_length.html deleted file mode 100644 index 51a2aba4..00000000 --- a/docs/reference/xportr_length.html +++ /dev/null @@ -1,132 +0,0 @@ - -Assign SAS Length — xportr_length ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Assigns SAS length from a variable level metadata to a given data frame.

    -
    - -
    -
    xportr_length(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.length_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing variable level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    verbose
    -

    The action the function takes when a length isn't found in -metadata. Options are 'stop', 'warn', 'message', and 'none'

    -
    -
    -

    Value

    -

    Data frame with SASlength attributes for each variable.

    -
    -
    -

    See also

    - -
    - -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  BRTHDT = c(1, 1, 2)
    -)
    -
    -metacore <- data.frame(
    -  dataset = c("adsl", "adsl"),
    -  variable = c("USUBJID", "BRTHDT"),
    -  length = c(10, 8)
    -)
    -
    -adsl <- xportr_length(adsl, metacore)
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_order.html b/docs/reference/xportr_order.html deleted file mode 100644 index 5a75a97a..00000000 --- a/docs/reference/xportr_order.html +++ /dev/null @@ -1,107 +0,0 @@ - -Order variables of a dataset according to Spec — xportr_order ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Order variables of a dataset according to Spec

    -
    - -
    -
    xportr_order(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.order_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing variable level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    verbose
    -

    Option for messaging order results

    -
    -
    -

    Value

    -

    Dataframe that has been re-ordered according to spec

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_tidy_names.html b/docs/reference/xportr_tidy_names.html deleted file mode 100644 index ab5db080..00000000 --- a/docs/reference/xportr_tidy_names.html +++ /dev/null @@ -1,415 +0,0 @@ - - - - - - - - -Rename terms for submission compliance from vector — xportr_tidy_names ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    The function takes a single character vector as input and converts each -string to be submission compliant. This means the variable must be a maximum -of 8 characters, ASCII only, and should contain only uppercase letters, -numbers and must start with a letter. No other symbols or special characters -should be included in these names. However, legacy studies started on or -before December 17, 2016, may use the underscore character "_". This function -is slightly more flexible than the submission criteria would allow, so use -the arguments wisely. xportr_var_names performs the same logic, -but directly renames the columns of a data.frame plus enforces more strict -adherence to the regulatory guidelines mentioned above.

    -
    - -
    xportr_tidy_names(
    -  original_varname,
    -  char_len = 8,
    -  relo_2_end = TRUE,
    -  letter_for_num_prefix = "x",
    -  sep = "",
    -  replace_vec = c(`'` = "", `"` = "", `%` = "_pct_", `#` = "_nmbr_"),
    -  dict_dat = data.frame(original_varname = character(), dict_varname = character()),
    -  letter_case = "upper",
    -  case = "parsed",
    -  return_df = FALSE,
    -  verbose = getOption("xportr.type_verbose", "none")
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    original_varname

    a character vector needing renaming

    char_len

    integer, the max number of characters allowed in the renamed -strings

    relo_2_end

    logical, if TRUE: numerical prefix bundles will be -relocated to the end of the string. A prefix bundle is determined as a -number or "grouping of numbers separated by special characters and other -punctuation". See details section for more info on prefix bundles.

    letter_for_num_prefix

    character. Will be ignored if relo_2_end = TRUE. Per CDISC & regulatory body requirements, variable names cannot -start with a number, so if you want to leave the number of the left-hand -side, use this argument to insert a starting letter before the numeric -prefix.

    sep

    string of only one character long, intended to separate words from -one another. In general, only "" and "" are possible, but the user can -insert a letter if desired. Note that "" is discouraged because it is only -permissible for legacy studies started on or before Dec 17, 2016.

    replace_vec

    A named character vector where the name is replaced by the -value.

    dict_dat

    a data frame containing two variables: the original_varname -and the dict_varname to find and replace

    letter_case

    character, with choices c("upper", "lower", "asis") -allowing user to make the final renamed terms uppercase (the default), -lowercase, or leave them as-is, respectively. Note, lowercase is discourage -as it is not submission compliant.

    case

    character, see to_any_case for more info -on alternate cases but some popular choices are "snake", "lower_camel", or -"parsed" (the default). From the documentation, the "parsed" case parses -out substrings and surrounds them with an underscore. Underscores at the -start and end are trimmed. No lower or upper case pattern from the input -string are changed.

    return_df

    logical, defaults to TRUE where entire dataset is returned -from suggestion process, else just the suggestion column itself

    - -

    Details

    - -

    Abbreviating variable names in the xportr pkg uses a step-by-step -process detailed below. Each original variable name will be renamed based -on the method performing the least amount of work to achieve the min -character length requirement (8 chars), thus maintaining maximum -originality. Therefore, the function only moves on to the next method on an -as-needed basis; namely, when the term is still greater than 8 characters, -even after lite modification.

    -

    (1) Blanks: Any columns that are missing a variable name (i.e., the header -was blank in the source file) will be renamed to 'V' + the column position. -So if the 2nd column is blank, it will receive a 'V2' rename.

    -

    (2) Use dictionary of controlled terminology: For example: 'Subject ID' may -better be suited as 'SUBJID' within your organization. Note, that -dictionary terms are expected to be submission compliant and will not be -further abbreviated. They will, however, undergo a check for -non-compliance.

    -

    (3) Do nothing! Or at the very least, mimic what SAS does automatically -when cleaning up variable names during a PROC IMPORT. Namely, replace any -special characters with underscores (''), capitalize everything, and if -the value starts with a digit, add the '' prefix. If the 'SASified' name -is <= 8 chars, then the function will use that rename. However, if its -still too long, the function will try removing any extra special characters -or spaces to help reduce to 8 chars.

    -

    (4) Find the STEM or ROOT word of each original variable name. For example, -if the original contains the word 'resting', the 'ing' will be dropped and -only the root word 'rest' will be considered. If less than 8 chars, the -algorithm suggests that result. If its still too long, the function will, -again, remove any special characters or spaces from the stemmed word(s).

    -

    (5) Apply an abbreviation algorithm who's primary goal is readability, such -that the results remain unique. The methods described below are a bit more -'involved', but the results are very robust. First, you should know that -characters are always stripped from the end of the strings first (i.e. from -right to left). If an element of the variable name contains more than one -word (words are separated by spaces) then at least one letter from each -word will be retained.

    -

    Method: First spaces at the ends of the string are stripped. Then (if -necessary) any other spaces are stripped. Next, lower case vowels are -removed followed by lower case consonants. Finally if the abbreviation is -still longer than 8 chars, upper case letters and symbols are stripped.

    -

    When identifying 'words', the app performs some pre-processing steps in the -following order:

      -
    • Certain symbols are replaced. Like the '%' symbol is replaced with 'PCT'. -Ex: 'I_Ate_%' becomes 'I_Ate_PCT'

    • -
    • Replace any symbols with a blank space. Ex: 'I_Ate' becomes 'I Ate'

    • -
    • Find when there are two capital letters next to each other, followed by a -lower case letter then adds a space between the two capital letters to -separate the assumed 'words'. Ex: 'IAte' becomes 'I Ate'

    • -
    • Insert a space between a number followed by a character. Ex: iAte1meal' -becomes 'iAte1 meal'

    • -
    • Insert a space between a character followed by a number. Ex: 'iAte1meal' -becomes 'iAte 1meal'

    • -
    - -

    What do we abbreviate when? If a stemmed word exists, the app will apply -the abbreviation algorithm described above on the stemmed version of the -variable name, else the original variable name.

    -

    Since submission guidelines indicate variables may not start with a number, -when found, the algorithm will either add and maintain a '_' "prefix -bundle" through any transformations detailed above, or it will relocate the -"prefix bundle" to the end of the term (the default behavior). What if a -term starts with non-standard numerical prefix? Currently, the function -accounts for the following types of prefix bundles, where 3 is used as an -example starting digit:

      -
    • x = "3a. hey" will return "3a"

    • -
    • x = "3_17a_hey" will return "3_17a"

    • -
    • x = "3_17_hey" will return "3_17"

    • -
    • x = "3_17hey" will return "3_17"

    • -
    • x = "3hey" will return "3"

    • -
    - -

    See also

    - -

    Other var_name functions: -xportr_df_varnames()

    - -

    Examples

    -
    vars <- c("", "studyid", "STUDYID", "subject id", "1c. ENT", "1b. Eyes", - "1d. Lungs", "1e. Heart", "year number", "1a. Skin_Desc") - -# Default behavior -xportr_tidy_names(vars) -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 10 of 10 (100%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 2: 'studyid' was renamed to 'STUDYID' -#> Var 3: 'STUDYID' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJECTD' -#> Var 5: '1c. ENT' was renamed to 'ENT1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS1D' -#> Var 8: '1e. Heart' was renamed to 'HEART1E' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> All renamed variables passed validation.
    #> [1] "V1" "STUDYID" "STUDYID2" "SUBJECTD" "ENT1C" "EYES1B" -#> [7] "LUNGS1D" "HEART1E" "YEARNUMB" "SKNDSC1A"
    xportr_tidy_names(vars, letter_case = "asis") -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 8 of 10 (80%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 4: 'subject id' was renamed to 'subjectd' -#> Var 5: '1c. ENT' was renamed to 'ENT1c' -#> Var 6: '1b. Eyes' was renamed to 'Eyes1b' -#> Var 7: '1d. Lungs' was renamed to 'Lungs1d' -#> Var 8: '1e. Heart' was renamed to 'Heart1e' -#> Var 9: 'year number' was renamed to 'yearnumb' -#> Var 10: '1a. Skin_Desc' was renamed to 'SknDsc1a'
    #> -#> The following variable name validation checks still failed: -#> Cannot contain any lowercase characters Variables `studyid`, `subjectd`, `ENT1c`, `Eyes1b`, `Lungs1d`, `Heart1e`, `yearnumb`, and `SknDsc1a`.
    #> [1] "V1" "studyid" "STUDYID" "subjectd" "ENT1c" "Eyes1b" -#> [7] "Lungs1d" "Heart1e" "yearnumb" "SknDsc1a"
    -# Leave numerical prefix on left-hand side, but add a starting letter -xportr_tidy_names(vars, relo_2_end = FALSE, letter_for_num_prefix = "x") -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 10 of 10 (100%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 2: 'studyid' was renamed to 'STUDYID' -#> Var 3: 'STUDYID' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJECTD' -#> Var 5: '1c. ENT' was renamed to 'X1CENT' -#> Var 6: '1b. Eyes' was renamed to 'X1BEYES' -#> Var 7: '1d. Lungs' was renamed to 'X1DLUNGS' -#> Var 8: '1e. Heart' was renamed to 'X1EHEART' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'X1SKNDSC'
    #> -#> All renamed variables passed validation.
    #> [1] "V1" "STUDYID" "STUDYID2" "SUBJECTD" "X1CENT" "X1BEYES" -#> [7] "X1DLUNGS" "X1EHEART" "YEARNUMB" "X1SKNDSC"
    -# Add a dictionary and remove underscores -xportr_tidy_names(vars, sep = "", - dict_dat = data.frame(original_varname = "subject id", dict_varname = "subjid")) -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 10 of 10 (100%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 2: 'studyid' was renamed to 'STUDYID' -#> Var 3: 'STUDYID' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJID' -#> Var 5: '1c. ENT' was renamed to 'ENT1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS1D' -#> Var 8: '1e. Heart' was renamed to 'HEART1E' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> All renamed variables passed validation.
    #> [1] "V1" "STUDYID" "STUDYID2" "SUBJID" "ENT1C" "EYES1B" -#> [7] "LUNGS1D" "HEART1E" "YEARNUMB" "SKNDSC1A"
    -
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xportr_type.html b/docs/reference/xportr_type.html deleted file mode 100644 index 0166b8cb..00000000 --- a/docs/reference/xportr_type.html +++ /dev/null @@ -1,135 +0,0 @@ - -Coerce variable type — xportr_type ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Current assumptions: -columns_meta is a data.frame with names "Variables", "Type"

    -
    - -
    -
    xportr_type(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.type_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    An R object with columns that can be coerced

    -
    metacore
    -

    Either a data.frame that has the names of all possible columns -and their types, or a Metacore object from the Metacore package. Required -column names are dataset, variables, type

    -
    domain
    -

    Name of the dataset. Ex ADAE/DM. This will be used to subset -the metacore object. If none is passed it is assumed to be the name of the -dataset passed in .df.

    -
    verbose
    -

    The action the function takes when a variable isn't typed -properly. Options are 'stop', 'warn', 'message', and 'none'

    -
    -
    -

    Value

    -

    Returns the modified table.

    -
    - -
    -

    Examples

    -
    metacore <- data.frame(
    -  dataset = "test",
    -  variable = c("Subj", "Param", "Val", "NotUsed"),
    -  type = c("numeric", "character", "numeric", "character")
    -)
    -
    -.df <- data.frame(
    - Subj = as.character(123, 456, 789),
    - Different = c("a", "b", "c"),
    - Val = c("1", "2", "3"),
    - Param = c("param1", "param2", "param3")
    -)
    -
    -df2 <- xportr_type(.df, metacore, "test")
    -#> 
    -#> ── Variable type mismatches found. ──
    -#> 
    -#> ✔ 2 variables coerced
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_write.html b/docs/reference/xportr_write.html deleted file mode 100644 index 28348a6f..00000000 --- a/docs/reference/xportr_write.html +++ /dev/null @@ -1,112 +0,0 @@ - -Write xpt v5 transport file — xportr_write ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Writes a local data frame into SAS transport file of version 5. The SAS -transport format is an open format, as is required for submission of the data -to the FDA.

    -
    - -
    -
    xportr_write(.df, path, label = NULL)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame to write.

    -
    path
    -

    Path where transport file will be written. File name sans will be -used as xpt name.

    -
    label
    -

    Dataset label. It must be<=40 characters.

    -
    -
    -

    Value

    -

    A data frame. xportr_write() returns the input data invisibly.

    -
    -
    -

    Details

    - -
    • Variable and dataset labels are stored in the "label" attribute.

    • -
    • SAS length are stored in the "SASlength" attribute.

    • -
    • SAS format are stored in the "SASformat" attribute.

    • -
    • SAS type are stored in the "SAStype" attribute.

    • -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xpt_check_ascii_lbls.html b/docs/reference/xpt_check_ascii_lbls.html deleted file mode 100644 index ce04efc4..00000000 --- a/docs/reference/xpt_check_ascii_lbls.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - -ASCII Check on Variable Labels — xpt_check_ascii_lbls ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Check that only ASCII characters are being used in variable labels

    -
    - -
    xpt_check_ascii_lbls(.df)
    - -

    Arguments

    - - - - - - -
    .df

    Data frame

    - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xpt_check_ascii_vars.html b/docs/reference/xpt_check_ascii_vars.html deleted file mode 100644 index 2e172ff1..00000000 --- a/docs/reference/xpt_check_ascii_vars.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - -ASCII Check on Variable Names — xpt_check_ascii_vars ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Check that only ASCII characters are being used in variable names

    -
    - -
    xpt_check_ascii_vars(.df)
    - -

    Arguments

    - - - - - - -
    .df

    Data frame

    - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xpt_check_label_length.html b/docs/reference/xpt_check_label_length.html deleted file mode 100644 index 753bede2..00000000 --- a/docs/reference/xpt_check_label_length.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - -Variable Label Check — xpt_check_label_length ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Check for variable labels greater than 40 characters in length

    -
    - -
    xpt_check_label_length(.df)
    - -

    Arguments

    - - - - - - -
    .df

    Data set with labels to check

    - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - From 7db89db5edb91a33e6609fc3d2f67fd6ba357173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 23 May 2023 18:33:23 +0200 Subject: [PATCH 157/337] chore: cleanup .gitignore from file that is committed --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index 8bcf3075..20affc8f 100644 --- a/.gitignore +++ b/.gitignore @@ -2,9 +2,7 @@ .Rhistory .RData .Ruserdata -xportr.Rproj .gitattributes -xptr.Rproj /archive /.idea scratch_check.R From c9498d17efaa88f827d18b03607225325f4369ae Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 16:23:31 +0000 Subject: [PATCH 158/337] Correct metadata example by using rlang::is_installed --- R/metadata.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/metadata.R b/R/metadata.R index e0fa412a..81382a30 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -33,7 +33,7 @@ #' #' xportr_metadata(adlb, metadata, "test") #' -#' if (requireNamespace("magrittr", quietly = TRUE)) { +#' if (rlang::is_installed("magrittr")) { #' library(magrittr) #' #' adlb %>% From e7237768543efb58df55261764e3157115f2f79c Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 17:56:13 +0000 Subject: [PATCH 159/337] Remember to document() so that the example actually updates :facepalm: --- man/xportr_metadata.Rd | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index cd67a5f1..f92c62b1 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -41,9 +41,11 @@ adlb <- data.frame( Param = c("param1", "param2", "param3") ) -xportr_metadata(metadata, "test") +xportr_metadata(adlb, metadata, "test") + +if (rlang::is_installed("magrittr")) { + library(magrittr) -if (requireNamespace("magrittr", quietly = TRUE)) { adlb \%>\% xportr_metadata(metadata, "test") \%>\% xportr_type() \%>\% From 5eca6f84a857a57f14955f4b7533684160d5c88d Mon Sep 17 00:00:00 2001 From: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> Date: Tue, 23 May 2023 13:14:51 -0500 Subject: [PATCH 160/337] Update tests/testthat/test-metadata.R MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: AndrĂ© VerĂ­ssimo <211358+averissimo@users.noreply.github.com> --- tests/testthat/test-metadata.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index a01572fa..438b49dc 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -542,7 +542,7 @@ test_that("xportr_metadata: Check metadata interaction with other functions", { var_spec <- readxl::read_xlsx( - here::here("./inst/specs/ADaM_admiral_spec.xlsx"), + system.file("specs", "ADaM_admiral_spec.xlsx", package = "xportr"), sheet = "Variables" ) %>% dplyr::rename(type = "Data Type") %>% From 08a88a12a5ee2ea624a6dace47caab3f5642347a Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 18:17:33 +0000 Subject: [PATCH 161/337] Delete docs/ --- .gitignore | 3 +- DESCRIPTION | 3 +- docs/404.html | 114 - docs/LICENSE-text.html | 82 - docs/LICENSE.html | 86 - docs/apple-touch-icon-120x120.png | Bin 9993 -> 0 bytes docs/apple-touch-icon-152x152.png | Bin 13465 -> 0 bytes docs/apple-touch-icon-180x180.png | Bin 16814 -> 0 bytes docs/apple-touch-icon-60x60.png | Bin 4149 -> 0 bytes docs/apple-touch-icon-76x76.png | Bin 5334 -> 0 bytes docs/apple-touch-icon.png | Bin 16814 -> 0 bytes docs/articles/Vignette.html | 140 - .../empty-anchor.js | 15 - docs/articles/drilling.html | 131 - .../empty-anchor.js | 15 - docs/articles/getting_started.html | 141 - .../empty-anchor.js | 15 - docs/articles/index.html | 79 - docs/articles/metacore.html | 131 - .../empty-anchor.js | 15 - docs/articles/metadata.html | 135 - .../empty-anchor.js | 15 - docs/articles/moving.html | 131 - .../empty-anchor.js | 15 - docs/articles/readme.html | 216 - .../empty-anchor.js | 15 - docs/articles/xportr.html | 723 - .../empty-anchor.js | 15 - .../crosstalk-1.1.1/css/crosstalk.css | 27 - .../crosstalk-1.1.1/js/crosstalk.js | 1474 --- .../crosstalk-1.1.1/js/crosstalk.js.map | 37 - .../crosstalk-1.1.1/js/crosstalk.min.js | 2 - .../crosstalk-1.1.1/js/crosstalk.min.js.map | 1 - .../datatables-binding-0.17/datatables.js | 1422 -- .../datatables-binding-0.18/datatables.js | 1412 -- .../datatables-crosstalk.css | 23 - .../css/jquery.dataTables.extra.css | 28 - .../css/jquery.dataTables.min.css | 1 - .../js/jquery.dataTables.min.js | 180 - .../header-attrs-2.9/header-attrs.js | 12 - .../htmlwidgets-1.5.3/htmlwidgets.js | 903 -- .../jquery-3.5.1/jquery-AUTHORS.txt | 357 - .../xportr_files/jquery-3.5.1/jquery.js | 10872 ---------------- .../xportr_files/jquery-3.5.1/jquery.min.js | 2 - .../xportr_files/jquery-3.5.1/jquery.min.map | 1 - docs/authors.html | 121 - docs/bootstrap-toc.css | 60 - docs/bootstrap-toc.js | 159 - docs/docsearch.css | 148 - docs/docsearch.js | 85 - docs/favicon-16x16.png | Bin 1101 -> 0 bytes docs/favicon-32x32.png | Bin 1978 -> 0 bytes docs/favicon.ico | Bin 15086 -> 0 bytes docs/index.html | 254 - docs/link.svg | 12 - docs/logo.png | Bin 114626 -> 0 bytes docs/news/index.html | 91 - docs/pkgdown.css | 384 - docs/pkgdown.js | 108 - docs/pkgdown.yml | 7 - docs/reference/Rplot001.png | Bin 1011 -> 0 bytes docs/reference/df_label_view.html | 190 - docs/reference/figures/_logo.png | Bin 114626 -> 0 bytes docs/reference/figures/design_flow.png | Bin 54033 -> 0 bytes ...-icon-8fddca93e3a89fee152146540f9de78a.svg | 6 - ...-icon-9b00320707d42527dde67262afb33ded.svg | 6 - ...-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg | 6 - docs/reference/figures/logo.png | Bin 114626 -> 0 bytes docs/reference/figures/pressure-1.png | Bin 7331 -> 0 bytes docs/reference/figures/xportr_rev.png | Bin 127643 -> 0 bytes docs/reference/index.html | 144 - docs/reference/pipe.html | 166 - docs/reference/xportr-package.html | 97 - docs/reference/xportr_core.html | 235 - docs/reference/xportr_df_label.html | 125 - docs/reference/xportr_df_varnames.html | 392 - docs/reference/xportr_format.html | 132 - docs/reference/xportr_label.html | 134 - docs/reference/xportr_length.html | 132 - docs/reference/xportr_order.html | 107 - docs/reference/xportr_tidy_names.html | 415 - docs/reference/xportr_type.html | 135 - docs/reference/xportr_write.html | 112 - docs/reference/xpt_check_ascii_lbls.html | 189 - docs/reference/xpt_check_ascii_vars.html | 189 - docs/reference/xpt_check_label_length.html | 189 - 86 files changed, 2 insertions(+), 23517 deletions(-) delete mode 100644 docs/404.html delete mode 100644 docs/LICENSE-text.html delete mode 100644 docs/LICENSE.html delete mode 100644 docs/apple-touch-icon-120x120.png delete mode 100644 docs/apple-touch-icon-152x152.png delete mode 100644 docs/apple-touch-icon-180x180.png delete mode 100644 docs/apple-touch-icon-60x60.png delete mode 100644 docs/apple-touch-icon-76x76.png delete mode 100644 docs/apple-touch-icon.png delete mode 100644 docs/articles/Vignette.html delete mode 100644 docs/articles/Vignette_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/drilling.html delete mode 100644 docs/articles/drilling_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/getting_started.html delete mode 100644 docs/articles/getting_started_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/index.html delete mode 100644 docs/articles/metacore.html delete mode 100644 docs/articles/metacore_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/metadata.html delete mode 100644 docs/articles/metadata_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/moving.html delete mode 100644 docs/articles/moving_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/readme.html delete mode 100644 docs/articles/readme_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/xportr.html delete mode 100644 docs/articles/xportr_files/accessible-code-block-0.0.1/empty-anchor.js delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/css/crosstalk.css delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js.map delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js delete mode 100644 docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js.map delete mode 100644 docs/articles/xportr_files/datatables-binding-0.17/datatables.js delete mode 100644 docs/articles/xportr_files/datatables-binding-0.18/datatables.js delete mode 100644 docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css delete mode 100644 docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.extra.css delete mode 100644 docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.min.css delete mode 100644 docs/articles/xportr_files/dt-core-1.10.20/js/jquery.dataTables.min.js delete mode 100644 docs/articles/xportr_files/header-attrs-2.9/header-attrs.js delete mode 100644 docs/articles/xportr_files/htmlwidgets-1.5.3/htmlwidgets.js delete mode 100644 docs/articles/xportr_files/jquery-3.5.1/jquery-AUTHORS.txt delete mode 100644 docs/articles/xportr_files/jquery-3.5.1/jquery.js delete mode 100644 docs/articles/xportr_files/jquery-3.5.1/jquery.min.js delete mode 100644 docs/articles/xportr_files/jquery-3.5.1/jquery.min.map delete mode 100644 docs/authors.html delete mode 100644 docs/bootstrap-toc.css delete mode 100644 docs/bootstrap-toc.js delete mode 100644 docs/docsearch.css delete mode 100644 docs/docsearch.js delete mode 100644 docs/favicon-16x16.png delete mode 100644 docs/favicon-32x32.png delete mode 100644 docs/favicon.ico delete mode 100644 docs/index.html delete mode 100644 docs/link.svg delete mode 100644 docs/logo.png delete mode 100644 docs/news/index.html delete mode 100644 docs/pkgdown.css delete mode 100644 docs/pkgdown.js delete mode 100644 docs/pkgdown.yml delete mode 100644 docs/reference/Rplot001.png delete mode 100644 docs/reference/df_label_view.html delete mode 100644 docs/reference/figures/_logo.png delete mode 100644 docs/reference/figures/design_flow.png delete mode 100644 docs/reference/figures/fa-icon-8fddca93e3a89fee152146540f9de78a.svg delete mode 100644 docs/reference/figures/fa-icon-9b00320707d42527dde67262afb33ded.svg delete mode 100644 docs/reference/figures/fa-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg delete mode 100644 docs/reference/figures/logo.png delete mode 100644 docs/reference/figures/pressure-1.png delete mode 100644 docs/reference/figures/xportr_rev.png delete mode 100644 docs/reference/index.html delete mode 100644 docs/reference/pipe.html delete mode 100644 docs/reference/xportr-package.html delete mode 100644 docs/reference/xportr_core.html delete mode 100644 docs/reference/xportr_df_label.html delete mode 100644 docs/reference/xportr_df_varnames.html delete mode 100644 docs/reference/xportr_format.html delete mode 100644 docs/reference/xportr_label.html delete mode 100644 docs/reference/xportr_length.html delete mode 100644 docs/reference/xportr_order.html delete mode 100644 docs/reference/xportr_tidy_names.html delete mode 100644 docs/reference/xportr_type.html delete mode 100644 docs/reference/xportr_write.html delete mode 100644 docs/reference/xpt_check_ascii_lbls.html delete mode 100644 docs/reference/xpt_check_ascii_vars.html delete mode 100644 docs/reference/xpt_check_label_length.html diff --git a/.gitignore b/.gitignore index 608d713f..d00a3579 100644 --- a/.gitignore +++ b/.gitignore @@ -13,9 +13,8 @@ adsl.xpt demo.R /doc/ /Meta/ -docs +docs/ xportr.Rcheck/ xportr*.tar.gz xportr*.tgz -docs/* local diff --git a/DESCRIPTION b/DESCRIPTION index 5b8e4496..2ff4fac8 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -62,7 +62,6 @@ Suggests: usethis, lintr, styler, - metacore, - here + metacore Config/testthat/edition: 3 VignetteBuilder: knitr diff --git a/docs/404.html b/docs/404.html deleted file mode 100644 index 24748fd1..00000000 --- a/docs/404.html +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - - -Page not found (404) ‱ xportr - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - -Content not found. Please use links in the navbar. - -
    - - - -
    - - - -
    - -
    -

    -

    Site built with pkgdown 2.0.7.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html deleted file mode 100644 index dfc2e028..00000000 --- a/docs/LICENSE-text.html +++ /dev/null @@ -1,82 +0,0 @@ - -License ‱ xportr - - -
    -
    - - - -
    -
    - - -
    YEAR: 2021
    -COPYRIGHT HOLDER: Atorus/GSK JPT
    -
    - -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/LICENSE.html b/docs/LICENSE.html deleted file mode 100644 index ddfcde77..00000000 --- a/docs/LICENSE.html +++ /dev/null @@ -1,86 +0,0 @@ - -MIT License ‱ xportr - - -
    -
    - - - -
    -
    - - -
    - -

    Copyright (c) 2021 Atorus/GSK JPT

    -

    Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

    -

    The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

    -

    THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

    -
    - -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/apple-touch-icon-120x120.png b/docs/apple-touch-icon-120x120.png deleted file mode 100644 index 3bbb7cdeec93ab198c1df35dc58fc31ba33456bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9993 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 Il{5|ie+Smp!~g&Q diff --git a/docs/apple-touch-icon-152x152.png b/docs/apple-touch-icon-152x152.png deleted file mode 100644 index f0807d53ad8c552889e0f078925ed32c692e1f42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13465 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 H7Lfk|0SJBi diff --git a/docs/apple-touch-icon-180x180.png b/docs/apple-touch-icon-180x180.png deleted file mode 100644 index 516fed4514b8f6f16d224ee3b559eab1b1d7b145..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16814 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 diff --git a/docs/apple-touch-icon-60x60.png b/docs/apple-touch-icon-60x60.png deleted file mode 100644 index 4fea33ccf7f1f840e91eb15051fad585c78eafe8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4149 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 diff --git a/docs/apple-touch-icon-76x76.png b/docs/apple-touch-icon-76x76.png deleted file mode 100644 index 2384749d7ecbd6615e5901b5f4e23349da4aab66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5334 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 beM!JB%dLPDO}Q+>7685bM%s0nj96Wm8h6-g+l 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 diff --git a/docs/articles/Vignette.html b/docs/articles/Vignette.html deleted file mode 100644 index b3e856bb..00000000 --- a/docs/articles/Vignette.html +++ /dev/null @@ -1,140 +0,0 @@ - - - - - - - -Variables' Core Categories ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -

    Three categories are specified in the “Core” column in the SDTM domain models:

    -
      -
    • A Required variable is any variable that is basic to the identification of a data record (i.e., essential key variables and a topic variable) or is necessary to make the record meaningful. Required variables must always be included in the dataset and cannot be null for any record.

    • -
    • An Expected variable is any variable necessary to make a record useful in the context of a specific domain. Expected variables may contain some null values, but in most cases will not contain null values for every record. When the study does not include the data item for an expected variable, however, a null column must still be included in the dataset, and a comment must be included in the Define-XML document to state that the study does not include the data item.

    • -
    • -

      A Permissible variable should be used in an SDTM dataset wherever appropriate. Although domain specification tables list only some of the Identifier, Timing, and general observation class variables listed in the SDTM, all are permissible unless specifically restricted in this implementation guide (see Section 2.7, SDTM Variables Not Allowed in SDTMIG) or by specific domain assumptions.

      -
        -
      • Domain assumptions that say a Permissible variable is “generally not used” do not prohibit use of the variable.
      • -
      • If a study includes a data item that would be represented in a Permissible variable, then that variable must be included in the SDTM dataset, even if null. Indicate no data were available for that variable in the Define-XML document.
      • -
      • If a study did not include a data item that would be represented in a Permissible variable, then that variable should not be included in the SDTM dataset and should not be declared in the Define-XML document.
      • -
      -
    • -
    -

    Conditionally required variables in ADaM (Cond) - must be included in the dataset in certain circumstances.

    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/Vignette_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/Vignette_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/Vignette_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/drilling.html b/docs/articles/drilling.html deleted file mode 100644 index 94f1b4fa..00000000 --- a/docs/articles/drilling.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -The nitty gritty on the xportr checks ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -

    Fancy stuff goes here

    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/drilling_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/drilling_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/drilling_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/getting_started.html b/docs/articles/getting_started.html deleted file mode 100644 index 766c33a2..00000000 --- a/docs/articles/getting_started.html +++ /dev/null @@ -1,141 +0,0 @@ - - - - - - - -Getting Started ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -
    -adsl <- haven::read_sas("inst/extdata/adsl.sas7bdat")
    -
    -var_spec <- readxl::read_xlsx("inst/specs/ADaM_spec.xlsx", sheet = "Variables") %>%
    -  dplyr::rename(type = "Data Type") %>%
    -  rlang::set_names(tolower)
    -  
    -data_spec <- readxl::read_xlsx("inst/specs/ADaM_spec.xlsx", sheet = "Datasets") %>%
    -  rlang::set_names(tolower) %>%
    -  dplyr::rename(label = "description")
    -  
    -adsl %>%
    -  xportr_type(var_spec, "ADSL", "message") %>%
    -  xportr_length(var_spec, "ADSL", "message") %>%
    -  xportr_label(var_spec, "ADSL", "message") %>%
    -  xportr_df_label(data_spec, "ADSL") %>%
    -  xportr_write("adsl.xpt")
    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/getting_started_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/getting_started_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/getting_started_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/index.html b/docs/articles/index.html deleted file mode 100644 index 352bbcec..00000000 --- a/docs/articles/index.html +++ /dev/null @@ -1,79 +0,0 @@ - -Articles ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    All vignettes

    -

    - -
    Getting Started
    -
    -
    -
    -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/articles/metacore.html b/docs/articles/metacore.html deleted file mode 100644 index 9c3dadea..00000000 --- a/docs/articles/metacore.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -Interfacing with metacore Package ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -

    Fancy stuff goes here

    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/metacore_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/metacore_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/metacore_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/metadata.html b/docs/articles/metadata.html deleted file mode 100644 index 2b987086..00000000 --- a/docs/articles/metadata.html +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - -Applying and Checking Metadata ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - - -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/metadata_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/metadata_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/metadata_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/moving.html b/docs/articles/moving.html deleted file mode 100644 index f288b3fc..00000000 --- a/docs/articles/moving.html +++ /dev/null @@ -1,131 +0,0 @@ - - - - - - - -Beyond the haven and SASxport packages ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -

    Fancy stuff goes here

    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/moving_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/moving_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/moving_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/readme.html b/docs/articles/readme.html deleted file mode 100644 index 18b88769..00000000 --- a/docs/articles/readme.html +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - -README ‱ xportr - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    - - - - -
    -

    -Tplyr Version 0.1.1

    -

    Welcome to Tplyr! This is the first full and stable release of our package. With this release comes a number of new enhancements, loads of new documentation, and our complete package qualification document.

    -

    If you’ve been keeping up, here are the things that we’ve added since the Beta release in July:

    -
      -
    • Bug Fixes/Enhancements -
        -
      • Count layers were re-factored to improve the execution efficiency
      • -
      • Auto-precision now works without a by variable
      • -
      • Several new assertions have been added to give clearer error messages
      • -
      • Treatment groups within the population data will produce columns in the resulting build, even if no records exist for that treatment group in the target dataset
      • -
      • Risk difference variable names will now populate properly when a cols argument is used
      • -
      • Data frame attributes are cleaned prior to processing to prevent any merge/bind warnings during processing
      • -
      • Total values within count layers are properly filled when the resulting count is 0 (largely impacts risk-difference calculations)
      • -
      -
    • -
    • Feature additions -
        -
      • Shift layers are here!
      • -
      • Flexibility when filling missing values has been enhanced for descriptive statistic layers
      • -
      • Layers can now be named, and those names can be used in get_numeric_data and the new function get_statistics_data to get risk difference raw numbers. Data may also be filtered directly from both functions.
      • -
      • Default formats can now be set via options or at the table level, which allows you to eliminate a great deal of redundant code
      • -
      -
    • -
    -

    As always, we welcome your feedback. If you spot a bug, would like to see a new feature, or if any documentation is unclear - submit an issue through GitHub right here.

    -
    -
    -

    -What is Tplyr?

    -

    dplyr from tidyverse is a grammar of data manipulation. So what does that allow you to do? It gives you, as a data analyst, the capability to easily and intuitively approach the problem of manipulating your data into an analysis ready form. dplyr conceptually breaks things down into verbs that allow you to focus on what you want to do more than how you have to do it.

    -

    Tplyr is designed around a similar concept, but its focus is on building summary tables within the clinical world. In the pharmaceutical industry, a great deal of the data presented in the outputs we create are very similar. For the most part, most of these tables can be broken down into a few categories:

    -
      -
    • Counting for event based variables or categories
    • -
    • Shifting, which is just counting a change in state with a ‘from’ and a ‘to’
    • -
    • Generating descriptive statistics around some continuous variable.
    • -
    -

    For many of the tables that go into a clinical submission, at least when considering safety outputs, the tables are made up of a combination of these approaches. Consider a demographics table - and let’s use an example from the PHUSE project Standard Analyses & Code Sharing - Analyses & Displays Associated with Demographics, Disposition, and Medications in Phase 2-4 Clinical Trials and Integrated Summary Documents.

    -
    -

    Demographics Table

    -
    -

    When you look at this table, you can begin breaking this output down into smaller, redundant, components. These components can be viewed as ‘layers’, and the table as a whole is constructed by stacking the layers. The boxes in the image above represent how you can begin to conceptualize this.

    -
      -
    • First we have Sex, which is made up of n (%) counts.
    • -
    • Next we have Age as a continuous variable, where we have a number of descriptive statistics, including n, mean, standard deviation, median, quartile 1, quartile 3, min, max, and missing values.
    • -
    • After that we have age, but broken into categories - so this is once again n (%) values.
    • -
    • Race - more counting,
    • -
    • Ethnicity - more counting
    • -
    • Weight - and we’re back to descriptive statistics.
    • -
    -

    So we have one table, with 6 summaries (7 including the next page, not shown) - but only 2 different approaches to summaries being performed. In the same way that dplyr is a grammar of data manipulation, Tplyr aims to be a grammar of data summary. The goal of Tplyr is to allow you to program a summary table like you see it on the page, by breaking a larger problem into smaller ‘layers’, and combining them together like you see on the page.

    -

    Enough talking - let’s see some code. In these examples, we will be using data from the PHUSE Test Data Factory based on the original pilot project submission package. Note: You can see our replication of the CDISC pilot using the PHUSE Test Data Factory data here.

    -
    -
    -tplyr_table(adsl, TRT01P, where = SAFFL == "Y") %>% 
    -  add_layer(
    -    group_desc(AGE, by = "Age (years)")
    -  ) %>% 
    -  add_layer(
    -    group_count(AGEGR1, by = "Age Categories n (%)")
    -  ) %>% 
    -  build()
    -
    -

    -The TL;DR

    -

    Here are some of the high level benefits of using Tplyr:

    -
      -
    • Easy construction of table data using an intuitive syntax
    • -
    • Smart string formatting for your numbers that’s easily specified by the user
    • -
    • A great deal of flexibility in what is performed and how it’s presented, without specifying hundreds of parameters
    • -
    • Extensibility (in the future
) - we’re going to open doors to allow you some level of customization.
    • -
    -
    -
    -

    -Where Next

    -

    -
    -
    -
    - - - -
    - - - -
    - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - diff --git a/docs/articles/readme_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/readme_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/readme_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/xportr.html b/docs/articles/xportr.html deleted file mode 100644 index 830db069..00000000 --- a/docs/articles/xportr.html +++ /dev/null @@ -1,723 +0,0 @@ - - - - - - - -Getting Started ‱ xportr - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - - - -
    -
    - - - - -
    -

    Getting Started with xportr -

    -

    The demo will make use of a small ADSL data set that is -apart of the {admiral} -package. The script that generates this ADSL dataset can be -created by using this command -admiral::use_ad_template("adsl").

    -

    The ADSL has the following features:

    -
      -
    • 306 observations
    • -
    • 48 variables
    • -
    • Data types other than character and numeric
    • -
    • Missing labels on variables
    • -
    • Missing label for data set
    • -
    • Order of varibles not following specification file
    • -
    • Formats missing
    • -
    -

    To create a fully compliant v5 xpt ADSL dataset, that -was developed using R, we will need to apply the 6 main functions within -the xportr package:

    - -
    -# Loading packages
    -library(dplyr)
    -library(labelled)
    -library(xportr)
    -library(admiral)
    -
    -# Loading in our example data
    -adsl <- admiral::admiral_adsl
    -


    -
    -


    -

    NOTE: Dataset can be created by using this command -admiral::use_ad_template("adsl").

    -
    -
    -

    Preparing your Specification Files -

    -


    -

    In order to make use of the functions within xportr you -will need to create an R data frame that contains your specification -file. You will most likely need to do some pre-processing of your spec -sheets after loading in the spec files for them to work appropriately -with the xportr functions. Please see our example spec -sheets in -system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr") -to see how xportr expects the specification sheets.

    -


    -
    -var_spec <- readxl::read_xlsx(
    -  system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), sheet = "Variables") %>%
    -  dplyr::rename(type = "Data Type") %>%
    -  rlang::set_names(tolower) 
    -  
    -


    -

    Below is a quick snapshot of the specification file pertaining to the -ADSL data set, which we will make use of in the 6 -xportr function calls below. Take note of the order, label, -type, length and format columns.

    -


    -
    -


    -
    -
    -

    xportr_type() -

    -


    -

    In order to be compliant with transport v5 specifications an -xpt file can only have two data types: character and -numeric/dbl. Currently the ADSL data set has chr, dbl, -time, factor and date.

    -
    look_for(adsl, details = TRUE)
    -   pos variable label                      col_type values                    
    -   1   STUDYID  Study Identifier           chr      range: CDISCPILOT01 - CDI~
    -   2   USUBJID  Unique Subject Identifier  chr      range: 01-701-1015 - 01-7~
    -   3   SUBJID   Subject Identifier for th~ chr      range: 1001 - 1448        
    -   4   RFSTDTC  Subject Reference Start D~ chr      range: 2012-07-09 - 2014-~
    -   5   RFENDTC  Subject Reference End Dat~ chr      range: 2012-09-01 - 2015-~
    -   6   RFXSTDTC Date/Time of First Study ~ chr      range: 2012-07-09 - 2014-~
    -   7   RFXENDTC Date/Time of Last Study T~ chr      range: 2012-08-28 - 2015-~
    -   8   RFICDTC  Date/Time of Informed Con~ chr      range:                    
    -   9   RFPENDTC Date/Time of End of Parti~ chr      range: 2012-08-13 - 2015-~
    -   10  DTHDTC   Date/Time of Death         chr      range: 2013-01-14 - 2014-~
    -   11  DTHFL    Subject Death Flag         chr      range: Y - Y              
    -   12  SITEID   Study Site Identifier      chr      range: 701 - 718          
    -   13  AGE      Age                        dbl      range: 50 - 89            
    -   14  AGEU     Age Units                  chr      range: YEARS - YEARS      
    -   15  SEX      Sex                        chr      range: F - M              
    -   16  RACE     Race                       chr      range: AMERICAN INDIAN OR~
    -   17  ETHNIC   Ethnicity                  chr      range: HISPANIC OR LATINO~
    -   18  ARMCD    Planned Arm Code           chr      range: Pbo - Xan_Lo       
    -   19  ARM      Description of Planned Arm chr      range: Placebo - Xanomeli~
    -   20  ACTARMCD Actual Arm Code            chr      range: Pbo - Xan_Lo       
    -   21  ACTARM   Description of Actual Arm  chr      range: Placebo - Xanomeli~
    -   22  COUNTRY  Country                    chr      range: USA - USA          
    -   23  DMDTC    Date/Time of Collection    chr      range: 2012-07-06 - 2014-~
    -   24  DMDY     Study Day of Collection    dbl      range: -37 - -2           
    -   25  TRT01P   Description of Planned Arm chr      range: Placebo - Xanomeli~
    -   26  TRT01A   Description of Actual Arm  chr      range: Placebo - Xanomeli~
    -   27  TRTSDTM  —                          dttm     range: 2012-07-09 - 2014-~
    -   28  TRTEDTM  —                          dttm     range: 2012-08-28 23:59:5~
    -   29  TRTSDT   —                          date     range: 2012-07-09 - 2014-~
    -   30  TRTEDT   —                          date     range: 2012-08-28 - 2015-~
    -   31  TRTDURD  —                          dbl      range: 1 - 212            
    -   32  SCRFDT   —                          date     range: 2012-08-13 - 2014-~
    -   33  EOSDT    —                          date     range: 2012-09-01 - 2015-~
    -   34  EOSSTT   —                          chr      range: COMPLETED - DISCON~
    -   35  FRVDT    —                          date     range: 2013-02-18 - 2014-~
    -   36  DTHDT    —                          date     range: 2013-01-14 - 2014-~
    -   37  DTHDTF   —                          chr      range:                    
    -   38  DTHADY   —                          dbl      range: 12 - 175           
    -   39  LDDTHELD —                          dbl      range: 0 - 2              
    -   40  LSTALVDT —                          date     range: 2012-09-01 - 2015-~
    -   41  AGEGR1   —                          fct      <18                       
    -                                                    18-64                     
    -                                                    >=65                      
    -   42  SAFFL    —                          chr      range: Y - Y              
    -   43  RACEGR1  —                          chr      range: Non-white - White  
    -   44  REGION1  —                          chr      range: NA - NA            
    -   45  LDDTHGR1 —                          chr      range: <= 30 - <= 30      
    -   46  DTH30FL  —                          chr      range: Y - Y              
    -   47  DTHA30FL —                          chr      range:                    
    -   48  DTHB30FL —                          chr      range: Y - Y
    -


    -

    Using xport_type and the supplied specification file, we -can coerce the variables in the ADSL set to be -either numeric or character.

    -


    -
    -adsl_type <- xportr_type(adsl, var_spec, domain = "ADSL", verbose = "message") 
    -


    Now all appropriate types have been applied to the dataset as -seen below.

    -
    look_for(adsl_type, details = TRUE)
    -   pos variable label col_type values                                          
    -   1   STUDYID  —     chr      range: CDISCPILOT01 - CDISCPILOT01              
    -   2   USUBJID  —     chr      range: 01-701-1015 - 01-718-1427                
    -   3   SUBJID   —     chr      range: 1001 - 1448                              
    -   4   RFSTDTC  —     chr      range: 2012-07-09 - 2014-09-02                  
    -   5   RFENDTC  —     chr      range: 2012-09-01 - 2015-03-05                  
    -   6   RFXSTDTC —     chr      range: 2012-07-09 - 2014-09-02                  
    -   7   RFXENDTC —     chr      range: 2012-08-28 - 2015-03-05                  
    -   8   RFICDTC  —     chr      range:                                          
    -   9   RFPENDTC —     chr      range: 2012-08-13 - 2015-03-05T14:40            
    -   10  DTHDTC   —     chr      range: 2013-01-14 - 2014-11-01                  
    -   11  DTHFL    —     chr      range: Y - Y                                    
    -   12  SITEID   —     chr      range: 701 - 718                                
    -   13  AGE      —     dbl      range: 50 - 89                                  
    -   14  AGEU     —     chr      range: YEARS - YEARS                            
    -   15  SEX      —     chr      range: F - M                                    
    -   16  RACE     —     chr      range: AMERICAN INDIAN OR ALASKA NATIVE - WHITE 
    -   17  ETHNIC   —     chr      range: HISPANIC OR LATINO - NOT HISPANIC OR LAT~
    -   18  ARMCD    —     chr      range: Pbo - Xan_Lo                             
    -   19  ARM      —     chr      range: Placebo - Xanomeline Low Dose            
    -   20  ACTARMCD —     chr      range: Pbo - Xan_Lo                             
    -   21  ACTARM   —     chr      range: Placebo - Xanomeline Low Dose            
    -   22  COUNTRY  —     chr      range: USA - USA                                
    -   23  DMDTC    —     chr      range: 2012-07-06 - 2014-08-29                  
    -   24  DMDY     —     dbl      range: -37 - -2                                 
    -   25  TRT01P   —     chr      range: Placebo - Xanomeline Low Dose            
    -   26  TRT01A   —     chr      range: Placebo - Xanomeline Low Dose            
    -   27  TRTSDTM  —     dbl      range: 1341792000 - 1409616000                  
    -   28  TRTEDTM  —     dbl      range: 1346198399 - 1425599999                  
    -   29  TRTSDT   —     dbl      range: 15530 - 16315                            
    -   30  TRTEDT   —     dbl      range: 15580 - 16499                            
    -   31  TRTDURD  —     dbl      range: 1 - 212                                  
    -   32  SCRFDT   —     dbl      range: 15565 - 16181                            
    -   33  EOSDT    —     dbl      range: 15584 - 16499                            
    -   34  EOSSTT   —     chr      range: COMPLETED - DISCONTINUED                 
    -   35  FRVDT    —     dbl      range: 15754 - 16389                            
    -   36  DTHDT    —     dbl      range: 15719 - 16375                            
    -   37  DTHDTF   —     chr      range:                                          
    -   38  DTHADY   —     dbl      range: 12 - 175                                 
    -   39  LDDTHELD —     dbl      range: 0 - 2                                    
    -   40  LSTALVDT —     dbl      range: 15584 - 16499                            
    -   41  AGEGR1   —     chr      range: >=65 - 18-64                             
    -   42  SAFFL    —     chr      range: Y - Y                                    
    -   43  RACEGR1  —     chr      range: Non-white - White                        
    -   44  REGION1  —     chr      range: NA - NA                                  
    -   45  LDDTHGR1 —     chr      range: <= 30 - <= 30                            
    -   46  DTH30FL  —     chr      range: Y - Y                                    
    -   47  DTHA30FL —     chr      range:                                          
    -   48  DTHB30FL —     chr      range: Y - Y
    -
    -
    -

    xportr_length() -

    -


    -

    Next we can apply the lengths from a variable level specification -file to the data frame. xportr_length will identify -variables that are missing from your specification file. The function -will also alert you to how many lengths have been applied successfully. -Before we apply the lengths lets verify that no lengths have been -applied to the original dataframe.

    -


    -
    -str(adsl)
    -
      tibble [306 × 48] (S3: tbl_df/tbl/data.frame)
    -   $ STUDYID : chr [1:306] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
    -    ..- attr(*, "label")= chr "Study Identifier"
    -   $ USUBJID : chr [1:306] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
    -    ..- attr(*, "label")= chr "Unique Subject Identifier"
    -   $ SUBJID  : chr [1:306] "1015" "1023" "1028" "1033" ...
    -    ..- attr(*, "label")= chr "Subject Identifier for the Study"
    -   $ RFSTDTC : chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
    -    ..- attr(*, "label")= chr "Subject Reference Start Date/Time"
    -   $ RFENDTC : chr [1:306] "2014-07-02" "2012-09-02" "2014-01-14" "2014-04-14" ...
    -    ..- attr(*, "label")= chr "Subject Reference End Date/Time"
    -   $ RFXSTDTC: chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
    -    ..- attr(*, "label")= chr "Date/Time of First Study Treatment"
    -   $ RFXENDTC: chr [1:306] "2014-07-02" "2012-09-01" "2014-01-14" "2014-03-31" ...
    -    ..- attr(*, "label")= chr "Date/Time of Last Study Treatment"
    -   $ RFICDTC : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Date/Time of Informed Consent"
    -   $ RFPENDTC: chr [1:306] "2014-07-02T11:45" "2013-02-18" "2014-01-14T11:10" "2014-09-15" ...
    -    ..- attr(*, "label")= chr "Date/Time of End of Participation"
    -   $ DTHDTC  : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Date/Time of Death"
    -   $ DTHFL   : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Subject Death Flag"
    -   $ SITEID  : chr [1:306] "701" "701" "701" "701" ...
    -    ..- attr(*, "label")= chr "Study Site Identifier"
    -   $ AGE     : num [1:306] 63 64 71 74 77 85 59 68 81 84 ...
    -    ..- attr(*, "label")= chr "Age"
    -   $ AGEU    : chr [1:306] "YEARS" "YEARS" "YEARS" "YEARS" ...
    -    ..- attr(*, "label")= chr "Age Units"
    -   $ SEX     : chr [1:306] "F" "M" "M" "M" ...
    -    ..- attr(*, "label")= chr "Sex"
    -   $ RACE    : chr [1:306] "WHITE" "WHITE" "WHITE" "WHITE" ...
    -    ..- attr(*, "label")= chr "Race"
    -   $ ETHNIC  : chr [1:306] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
    -    ..- attr(*, "label")= chr "Ethnicity"
    -   $ ARMCD   : chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
    -    ..- attr(*, "label")= chr "Planned Arm Code"
    -   $ ARM     : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Planned Arm"
    -   $ ACTARMCD: chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
    -    ..- attr(*, "label")= chr "Actual Arm Code"
    -   $ ACTARM  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Actual Arm"
    -   $ COUNTRY : chr [1:306] "USA" "USA" "USA" "USA" ...
    -    ..- attr(*, "label")= chr "Country"
    -   $ DMDTC   : chr [1:306] "2013-12-26" "2012-07-22" "2013-07-11" "2014-03-10" ...
    -    ..- attr(*, "label")= chr "Date/Time of Collection"
    -   $ DMDY    : num [1:306] -7 -14 -8 -8 -7 -21 NA -9 -13 -7 ...
    -    ..- attr(*, "label")= chr "Study Day of Collection"
    -   $ TRT01P  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Planned Arm"
    -   $ TRT01A  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Actual Arm"
    -   $ TRTSDTM : iso_dtm[1:306], format: "2014-01-02" "2012-08-05" ...
    -   $ TRTEDTM : iso_dtm[1:306], format: "2014-07-02 23:59:59" "2012-09-01 23:59:59" ...
    -   $ TRTSDT  : Date[1:306], format: "2014-01-02" "2012-08-05" ...
    -   $ TRTEDT  : Date[1:306], format: "2014-07-02" "2012-09-01" ...
    -   $ TRTDURD : num [1:306] 182 28 180 14 183 26 NA 190 10 55 ...
    -   $ SCRFDT  : Date[1:306], format: NA NA ...
    -   $ EOSDT   : Date[1:306], format: "2014-07-02" "2012-09-02" ...
    -   $ EOSSTT  : chr [1:306] "COMPLETED" "DISCONTINUED" "COMPLETED" "DISCONTINUED" ...
    -   $ FRVDT   : Date[1:306], format: NA "2013-02-18" ...
    -   $ DTHDT   : Date[1:306], format: NA NA ...
    -   $ DTHDTF  : chr [1:306] NA NA NA NA ...
    -   $ DTHADY  : num [1:306] NA NA NA NA NA NA NA NA NA NA ...
    -   $ LDDTHELD: num [1:306] NA NA NA NA NA NA NA NA NA NA ...
    -   $ LSTALVDT: Date[1:306], format: "2014-07-02" "2012-09-02" ...
    -   $ AGEGR1  : Factor w/ 3 levels "<18","18-64",..: 2 2 3 3 3 3 2 3 3 3 ...
    -   $ SAFFL   : chr [1:306] "Y" "Y" "Y" "Y" ...
    -   $ RACEGR1 : chr [1:306] "White" "White" "White" "White" ...
    -   $ REGION1 : chr [1:306] "NA" "NA" "NA" "NA" ...
    -   $ LDDTHGR1: chr [1:306] NA NA NA NA ...
    -   $ DTH30FL : chr [1:306] NA NA NA NA ...
    -   $ DTHA30FL: chr [1:306] NA NA NA NA ...
    -   $ DTHB30FL: chr [1:306] NA NA NA NA ...
    -


    -

    No lengths have been applied to the variables as seen in the printout -- the lengths would be in the attr part of each variables. -Let’s now use xportr_length to apply our lengths from the -specification file.

    -
    -adsl_length <- adsl %>% xportr_length(var_spec, domain = "ADSL", "message")
    -


    -
    -str(adsl_length)
    -
      tibble [306 × 48] (S3: tbl_df/tbl/data.frame)
    -   $ STUDYID : chr [1:306] "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" "CDISCPILOT01" ...
    -    ..- attr(*, "label")= chr "Study Identifier"
    -    ..- attr(*, "width")= num 21
    -   $ USUBJID : chr [1:306] "01-701-1015" "01-701-1023" "01-701-1028" "01-701-1033" ...
    -    ..- attr(*, "label")= chr "Unique Subject Identifier"
    -    ..- attr(*, "width")= num 30
    -   $ SUBJID  : chr [1:306] "1015" "1023" "1028" "1033" ...
    -    ..- attr(*, "label")= chr "Subject Identifier for the Study"
    -    ..- attr(*, "width")= num 8
    -   $ RFSTDTC : chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
    -    ..- attr(*, "label")= chr "Subject Reference Start Date/Time"
    -    ..- attr(*, "width")= num 19
    -   $ RFENDTC : chr [1:306] "2014-07-02" "2012-09-02" "2014-01-14" "2014-04-14" ...
    -    ..- attr(*, "label")= chr "Subject Reference End Date/Time"
    -    ..- attr(*, "width")= num 19
    -   $ RFXSTDTC: chr [1:306] "2014-01-02" "2012-08-05" "2013-07-19" "2014-03-18" ...
    -    ..- attr(*, "label")= chr "Date/Time of First Study Treatment"
    -    ..- attr(*, "width")= num 19
    -   $ RFXENDTC: chr [1:306] "2014-07-02" "2012-09-01" "2014-01-14" "2014-03-31" ...
    -    ..- attr(*, "label")= chr "Date/Time of Last Study Treatment"
    -    ..- attr(*, "width")= num 19
    -   $ RFICDTC : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Date/Time of Informed Consent"
    -    ..- attr(*, "width")= num 19
    -   $ RFPENDTC: chr [1:306] "2014-07-02T11:45" "2013-02-18" "2014-01-14T11:10" "2014-09-15" ...
    -    ..- attr(*, "label")= chr "Date/Time of End of Participation"
    -    ..- attr(*, "width")= num 19
    -   $ DTHDTC  : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Date/Time of Death"
    -    ..- attr(*, "width")= num 19
    -   $ DTHFL   : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "label")= chr "Subject Death Flag"
    -    ..- attr(*, "width")= num 2
    -   $ SITEID  : chr [1:306] "701" "701" "701" "701" ...
    -    ..- attr(*, "label")= chr "Study Site Identifier"
    -    ..- attr(*, "width")= num 5
    -   $ AGE     : num [1:306] 63 64 71 74 77 85 59 68 81 84 ...
    -    ..- attr(*, "label")= chr "Age"
    -    ..- attr(*, "width")= num 8
    -   $ AGEU    : chr [1:306] "YEARS" "YEARS" "YEARS" "YEARS" ...
    -    ..- attr(*, "label")= chr "Age Units"
    -    ..- attr(*, "width")= num 10
    -   $ SEX     : chr [1:306] "F" "M" "M" "M" ...
    -    ..- attr(*, "label")= chr "Sex"
    -    ..- attr(*, "width")= num 1
    -   $ RACE    : chr [1:306] "WHITE" "WHITE" "WHITE" "WHITE" ...
    -    ..- attr(*, "label")= chr "Race"
    -    ..- attr(*, "width")= num 60
    -   $ ETHNIC  : chr [1:306] "HISPANIC OR LATINO" "HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" "NOT HISPANIC OR LATINO" ...
    -    ..- attr(*, "label")= chr "Ethnicity"
    -    ..- attr(*, "width")= num 100
    -   $ ARMCD   : chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
    -    ..- attr(*, "label")= chr "Planned Arm Code"
    -    ..- attr(*, "width")= num 20
    -   $ ARM     : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Planned Arm"
    -    ..- attr(*, "width")= num 200
    -   $ ACTARMCD: chr [1:306] "Pbo" "Pbo" "Xan_Hi" "Xan_Lo" ...
    -    ..- attr(*, "label")= chr "Actual Arm Code"
    -    ..- attr(*, "width")= num 20
    -   $ ACTARM  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Actual Arm"
    -    ..- attr(*, "width")= num 200
    -   $ COUNTRY : chr [1:306] "USA" "USA" "USA" "USA" ...
    -    ..- attr(*, "label")= chr "Country"
    -    ..- attr(*, "width")= num 3
    -   $ DMDTC   : chr [1:306] "2013-12-26" "2012-07-22" "2013-07-11" "2014-03-10" ...
    -    ..- attr(*, "label")= chr "Date/Time of Collection"
    -    ..- attr(*, "width")= num 19
    -   $ DMDY    : num [1:306] -7 -14 -8 -8 -7 -21 NA -9 -13 -7 ...
    -    ..- attr(*, "label")= chr "Study Day of Collection"
    -    ..- attr(*, "width")= num 8
    -   $ TRT01P  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Planned Arm"
    -    ..- attr(*, "width")= num 40
    -   $ TRT01A  : chr [1:306] "Placebo" "Placebo" "Xanomeline High Dose" "Xanomeline Low Dose" ...
    -    ..- attr(*, "label")= chr "Description of Actual Arm"
    -    ..- attr(*, "width")= num 40
    -   $ TRTSDTM : iso_dtm[1:306], format: "2014-01-02" "2012-08-05" ...
    -   $ TRTEDTM : iso_dtm[1:306], format: "2014-07-02 23:59:59" "2012-09-01 23:59:59" ...
    -   $ TRTSDT  : Date[1:306], format: "2014-01-02" "2012-08-05" ...
    -   $ TRTEDT  : Date[1:306], format: "2014-07-02" "2012-09-01" ...
    -   $ TRTDURD : num [1:306] 182 28 180 14 183 26 NA 190 10 55 ...
    -    ..- attr(*, "width")= num 8
    -   $ SCRFDT  : Date[1:306], format: NA NA ...
    -   $ EOSDT   : Date[1:306], format: "2014-07-02" "2012-09-02" ...
    -   $ EOSSTT  : chr [1:306] "COMPLETED" "DISCONTINUED" "COMPLETED" "DISCONTINUED" ...
    -    ..- attr(*, "width")= num 200
    -   $ FRVDT   : Date[1:306], format: NA "2013-02-18" ...
    -   $ DTHDT   : Date[1:306], format: NA NA ...
    -   $ DTHDTF  : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 2
    -   $ DTHADY  : num [1:306] NA NA NA NA NA NA NA NA NA NA ...
    -    ..- attr(*, "width")= num 8
    -   $ LDDTHELD: num [1:306] NA NA NA NA NA NA NA NA NA NA ...
    -    ..- attr(*, "width")= num 8
    -   $ LSTALVDT: Date[1:306], format: "2014-07-02" "2012-09-02" ...
    -   $ AGEGR1  : Factor w/ 3 levels "<18","18-64",..: 2 2 3 3 3 3 2 3 3 3 ...
    -    ..- attr(*, "width")= num 20
    -   $ SAFFL   : chr [1:306] "Y" "Y" "Y" "Y" ...
    -    ..- attr(*, "width")= num 2
    -   $ RACEGR1 : chr [1:306] "White" "White" "White" "White" ...
    -    ..- attr(*, "width")= num 200
    -   $ REGION1 : chr [1:306] "NA" "NA" "NA" "NA" ...
    -    ..- attr(*, "width")= num 80
    -   $ LDDTHGR1: chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 200
    -   $ DTH30FL : chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 200
    -   $ DTHA30FL: chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 200
    -   $ DTHB30FL: chr [1:306] NA NA NA NA ...
    -    ..- attr(*, "width")= num 200
    -   - attr(*, "_xportr.df_arg_")= chr "ADSL"
    -

    Note the additional attr(*, "width")= after each -variable with the width. These have been directly applied from the -specification file that we loaded above!

    -
    -
    -

    xportr_order() -

    -

    Please note that the order of the ADSL variables, see -above, does not match specification file order column. We can quickly -remedy this with a call to xportr_order(). Note that the -variable SITEID has been moved as well as many others to -match the specification file order column.

    -
    -adsl_order <- xportr_order(adsl,var_spec, domain = "ADSL", verbose = "message") 
    -
    - -
    -
    -

    xportr_format() -

    -

    Now we apply formats to the dataset. These will typically be -DATE9., DATETIME20 or TIME5, but -many others can be used. Notice that 8 Date/Time variables are missing a -format in our ADSL dataset. Here we just take a peak at a -few TRT variables, which have a NULL -format.

    -
    -attr(adsl$TRTSDT, "format.sas")
    -  NULL
    -attr(adsl$TRTEDT, "format.sas")
    -  NULL
    -attr(adsl$TRTSDTM, "format.sas")
    -  NULL
    -attr(adsl$TRTEDTM, "format.sas")
    -  NULL
    -

    Using our xportr_format() we apply our formats.

    -
    -adsl_fmt <- adsl %>% xportr_format(var_spec, domain = "ADSL", "message")
    -
    attr(adsl_fmt$TRTSDT, "format.sas")
    -  [1] "DATE9."
    -attr(adsl_fmt$TRTEDT, "format.sas")
    -  [1] "DATE9."
    -attr(adsl_fmt$TRTSDTM, "format.sas")
    -  [1] "DATETIME20."
    -attr(adsl_fmt$TRTEDTM, "format.sas")
    -  [1] "DATETIME20."
    -
    -
    -

    xportr_label() -

    -


    -

    Please observe that our ADSL dataset is missing many -variable labels. Sometimes these labels can be lost while using R’s -function. However, A CDISC compliant data set needs to have each -variable with a variable label.

    -
    look_for(adsl, details = FALSE)
    -   pos variable label                             
    -    1  STUDYID  Study Identifier                  
    -    2  USUBJID  Unique Subject Identifier         
    -    3  SUBJID   Subject Identifier for the Study  
    -    4  RFSTDTC  Subject Reference Start Date/Time 
    -    5  RFENDTC  Subject Reference End Date/Time   
    -    6  RFXSTDTC Date/Time of First Study Treatment
    -    7  RFXENDTC Date/Time of Last Study Treatment 
    -    8  RFICDTC  Date/Time of Informed Consent     
    -    9  RFPENDTC Date/Time of End of Participation 
    -   10  DTHDTC   Date/Time of Death                
    -   11  DTHFL    Subject Death Flag                
    -   12  SITEID   Study Site Identifier             
    -   13  AGE      Age                               
    -   14  AGEU     Age Units                         
    -   15  SEX      Sex                               
    -   16  RACE     Race                              
    -   17  ETHNIC   Ethnicity                         
    -   18  ARMCD    Planned Arm Code                  
    -   19  ARM      Description of Planned Arm        
    -   20  ACTARMCD Actual Arm Code                   
    -   21  ACTARM   Description of Actual Arm         
    -   22  COUNTRY  Country                           
    -   23  DMDTC    Date/Time of Collection           
    -   24  DMDY     Study Day of Collection           
    -   25  TRT01P   Description of Planned Arm        
    -   26  TRT01A   Description of Actual Arm         
    -   27  TRTSDTM  —                                 
    -   28  TRTEDTM  —                                 
    -   29  TRTSDT   —                                 
    -   30  TRTEDT   —                                 
    -   31  TRTDURD  —                                 
    -   32  SCRFDT   —                                 
    -   33  EOSDT    —                                 
    -   34  EOSSTT   —                                 
    -   35  FRVDT    —                                 
    -   36  DTHDT    —                                 
    -   37  DTHDTF   —                                 
    -   38  DTHADY   —                                 
    -   39  LDDTHELD —                                 
    -   40  LSTALVDT —                                 
    -   41  AGEGR1   —                                 
    -   42  SAFFL    —                                 
    -   43  RACEGR1  —                                 
    -   44  REGION1  —                                 
    -   45  LDDTHGR1 —                                 
    -   46  DTH30FL  —                                 
    -   47  DTHA30FL —                                 
    -   48  DTHB30FL —
    -


    -

    Using the xport_label function we can take the -specifications file and label all the variables available. -xportr_label will produce a warning message if you the -variable in the data set is not in the specification file.

    -


    -
    -adsl_update <- adsl %>% xportr_label(var_spec, domain = "ADSL", "message")
    -
    look_for(adsl_update, details = FALSE)
    -   pos variable label                                  
    -    1  STUDYID  Study Identifier                       
    -    2  USUBJID  Unique Subject Identifier              
    -    3  SUBJID   Subject Identifier for the Study       
    -    4  RFSTDTC  Subject Reference Start Date/Time      
    -    5  RFENDTC  Subject Reference End Date/Time        
    -    6  RFXSTDTC Date/Time of First Study Treatment     
    -    7  RFXENDTC Date/Time of Last Study Treatment      
    -    8  RFICDTC  Date/Time of Informed Consent          
    -    9  RFPENDTC Date/Time of End of Participation      
    -   10  DTHDTC   Date / Time of Death                   
    -   11  DTHFL    Subject Death Flag                     
    -   12  SITEID   Study Site Identifier                  
    -   13  AGE      Age                                    
    -   14  AGEU     Age Units                              
    -   15  SEX      Sex                                    
    -   16  RACE     Race                                   
    -   17  ETHNIC   Ethnicity                              
    -   18  ARMCD    Planned Arm Code                       
    -   19  ARM      Description of Planned Arm             
    -   20  ACTARMCD Actual Arm Code                        
    -   21  ACTARM   Description of Actual Arm              
    -   22  COUNTRY  Country                                
    -   23  DMDTC    Date/Time of Collection                
    -   24  DMDY     Study Day of Collection                
    -   25  TRT01P   Planned Treatment for Period 01        
    -   26  TRT01A   Actual Treatment for Period 01         
    -   27  TRTSDTM  Datetime of First Exposure to Treatment
    -   28  TRTEDTM  Datetime of Last Exposure to Treatment 
    -   29  TRTSDT   Date of First Exposure to Treatment    
    -   30  TRTEDT   Date of Last Exposure to Treatment     
    -   31  TRTDURD  Total Duration of Trt  (days)          
    -   32  SCRFDT   Screen Failure Date                    
    -   33  EOSDT    End of Study Date                      
    -   34  EOSSTT   End of Study Status                    
    -   35  FRVDT    Final Retrievel Visit Date             
    -   36  DTHDT    Death Date                             
    -   37  DTHDTF   Date of Death Imputation Flag          
    -   38  DTHADY   Relative Day of Death                  
    -   39  LDDTHELD Elapsed Days from Last Dose to Death   
    -   40  LSTALVDT Date Last Known Alive                  
    -   41  AGEGR1   Pooled Age Group 1                     
    -   42  SAFFL    Safety Population Flag                 
    -   43  RACEGR1  Pooled Race Group 1                    
    -   44  REGION1  Geographic Region 1                    
    -   45  LDDTHGR1 Last Does to Death Group               
    -   46  DTH30FL  Under 30  Group                        
    -   47  DTHA30FL Over 30  Group                         
    -   48  DTHB30FL Over 30 plus 30 days Group
    -
    -
    -

    xportr_write() -

    -


    -

    Finally, we arrive at exporting the R data frame object as a xpt file -with the function xportr_write(). The xpt file will be -written directly to your current working directory. To make it more -interesting, we have put together all six functions with the magrittr -pipe, %>%. A user can now apply types, length, variable -labels, formats, data set label and write out their final xpt file in -one pipe! Appropriate warnings and messages will be supplied to a user -to the console for any potential issues before sending off to standard -clinical data set validator application or data reviewers.

    -
    -adsl %>%
    -  xportr_type(var_spec, "ADSL", "message") %>%
    -  xportr_length(var_spec, "ADSL", "message") %>%
    -  xportr_label(var_spec, "ADSL", "message") %>%
    -  xportr_order(var_spec, "ADSL", "message") %>% 
    -  xportr_format(var_spec, "ADSL", "message") %>% 
    -  xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset")
    -

    That’s it! We now have a xpt file created in R with all appropriate -types, lengths, labels, ordering and formats from our specification -file.

    -

    As always, we welcome your feedback. If you spot a bug, would like to -see a new feature, or if any documentation is unclear - submit an issue -on xportr’s -Github page.

    -
    -
    - - - -
    - - - -
    - -
    -

    -

    Site built with pkgdown 2.0.3.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/articles/xportr_files/accessible-code-block-0.0.1/empty-anchor.js b/docs/articles/xportr_files/accessible-code-block-0.0.1/empty-anchor.js deleted file mode 100644 index ca349fd6..00000000 --- a/docs/articles/xportr_files/accessible-code-block-0.0.1/empty-anchor.js +++ /dev/null @@ -1,15 +0,0 @@ -// Hide empty tag within highlighted CodeBlock for screen reader accessibility (see https://github.com/jgm/pandoc/issues/6352#issuecomment-626106786) --> -// v0.0.1 -// Written by JooYoung Seo (jooyoung@psu.edu) and Atsushi Yasumoto on June 1st, 2020. - -document.addEventListener('DOMContentLoaded', function() { - const codeList = document.getElementsByClassName("sourceCode"); - for (var i = 0; i < codeList.length; i++) { - var linkList = codeList[i].getElementsByTagName('a'); - for (var j = 0; j < linkList.length; j++) { - if (linkList[j].innerHTML === "") { - linkList[j].setAttribute('aria-hidden', 'true'); - } - } - } -}); diff --git a/docs/articles/xportr_files/crosstalk-1.1.1/css/crosstalk.css b/docs/articles/xportr_files/crosstalk-1.1.1/css/crosstalk.css deleted file mode 100644 index 46befd2e..00000000 --- a/docs/articles/xportr_files/crosstalk-1.1.1/css/crosstalk.css +++ /dev/null @@ -1,27 +0,0 @@ -/* Adjust margins outwards, so column contents line up with the edges of the - parent of container-fluid. */ -.container-fluid.crosstalk-bscols { - margin-left: -30px; - margin-right: -30px; - white-space: normal; -} - -/* But don't adjust the margins outwards if we're directly under the body, - i.e. we were the top-level of something at the console. */ -body > .container-fluid.crosstalk-bscols { - margin-left: auto; - margin-right: auto; -} - -.crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { - display: inline-block; - padding-right: 12px; - vertical-align: top; -} - -@media only screen and (max-width:480px) { - .crosstalk-input-checkboxgroup .crosstalk-options-group .crosstalk-options-column { - display: block; - padding-right: inherit; - } -} diff --git a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js b/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js deleted file mode 100644 index fd9eb53d..00000000 --- a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js +++ /dev/null @@ -1,1474 +0,0 @@ -(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o b) { - return 1; - } -} - -/** - * @private - */ - -var FilterSet = function () { - function FilterSet() { - _classCallCheck(this, FilterSet); - - this.reset(); - } - - _createClass(FilterSet, [{ - key: "reset", - value: function reset() { - // Key: handle ID, Value: array of selected keys, or null - this._handles = {}; - // Key: key string, Value: count of handles that include it - this._keys = {}; - this._value = null; - this._activeHandles = 0; - } - }, { - key: "update", - value: function update(handleId, keys) { - if (keys !== null) { - keys = keys.slice(0); // clone before sorting - keys.sort(naturalComparator); - } - - var _diffSortedLists = (0, _util.diffSortedLists)(this._handles[handleId], keys), - added = _diffSortedLists.added, - removed = _diffSortedLists.removed; - - this._handles[handleId] = keys; - - for (var i = 0; i < added.length; i++) { - this._keys[added[i]] = (this._keys[added[i]] || 0) + 1; - } - for (var _i = 0; _i < removed.length; _i++) { - this._keys[removed[_i]]--; - } - - this._updateValue(keys); - } - - /** - * @param {string[]} keys Sorted array of strings that indicate - * a superset of possible keys. - * @private - */ - - }, { - key: "_updateValue", - value: function _updateValue() { - var keys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._allKeys; - - var handleCount = Object.keys(this._handles).length; - if (handleCount === 0) { - this._value = null; - } else { - this._value = []; - for (var i = 0; i < keys.length; i++) { - var count = this._keys[keys[i]]; - if (count === handleCount) { - this._value.push(keys[i]); - } - } - } - } - }, { - key: "clear", - value: function clear(handleId) { - if (typeof this._handles[handleId] === "undefined") { - return; - } - - var keys = this._handles[handleId]; - if (!keys) { - keys = []; - } - - for (var i = 0; i < keys.length; i++) { - this._keys[keys[i]]--; - } - delete this._handles[handleId]; - - this._updateValue(); - } - }, { - key: "value", - get: function get() { - return this._value; - } - }, { - key: "_allKeys", - get: function get() { - var allKeys = Object.keys(this._keys); - allKeys.sort(naturalComparator); - return allKeys; - } - }]); - - return FilterSet; -}(); - -exports.default = FilterSet; - -},{"./util":11}],4:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.default = group; - -var _var2 = require("./var"); - -var _var3 = _interopRequireDefault(_var2); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -// Use a global so that multiple copies of crosstalk.js can be loaded and still -// have groups behave as singletons across all copies. -global.__crosstalk_groups = global.__crosstalk_groups || {}; -var groups = global.__crosstalk_groups; - -function group(groupName) { - if (groupName && typeof groupName === "string") { - if (!groups.hasOwnProperty(groupName)) { - groups[groupName] = new Group(groupName); - } - return groups[groupName]; - } else if ((typeof groupName === "undefined" ? "undefined" : _typeof(groupName)) === "object" && groupName._vars && groupName.var) { - // Appears to already be a group object - return groupName; - } else if (Array.isArray(groupName) && groupName.length == 1 && typeof groupName[0] === "string") { - return group(groupName[0]); - } else { - throw new Error("Invalid groupName argument"); - } -} - -var Group = function () { - function Group(name) { - _classCallCheck(this, Group); - - this.name = name; - this._vars = {}; - } - - _createClass(Group, [{ - key: "var", - value: function _var(name) { - if (!name || typeof name !== "string") { - throw new Error("Invalid var name"); - } - - if (!this._vars.hasOwnProperty(name)) this._vars[name] = new _var3.default(this, name); - return this._vars[name]; - } - }, { - key: "has", - value: function has(name) { - if (!name || typeof name !== "string") { - throw new Error("Invalid var name"); - } - - return this._vars.hasOwnProperty(name); - } - }]); - - return Group; -}(); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./var":12}],5:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _group = require("./group"); - -var _group2 = _interopRequireDefault(_group); - -var _selection = require("./selection"); - -var _filter = require("./filter"); - -var _input = require("./input"); - -require("./input_selectize"); - -require("./input_checkboxgroup"); - -require("./input_slider"); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -var defaultGroup = (0, _group2.default)("default"); - -function var_(name) { - return defaultGroup.var(name); -} - -function has(name) { - return defaultGroup.has(name); -} - -if (global.Shiny) { - global.Shiny.addCustomMessageHandler("update-client-value", function (message) { - if (typeof message.group === "string") { - (0, _group2.default)(message.group).var(message.name).set(message.value); - } else { - var_(message.name).set(message.value); - } - }); -} - -var crosstalk = { - group: _group2.default, - var: var_, - has: has, - SelectionHandle: _selection.SelectionHandle, - FilterHandle: _filter.FilterHandle, - bind: _input.bind -}; - -/** - * @namespace crosstalk - */ -exports.default = crosstalk; - -global.crosstalk = crosstalk; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./group":4,"./input":6,"./input_checkboxgroup":7,"./input_selectize":8,"./input_slider":9,"./selection":10}],6:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.register = register; -exports.bind = bind; -var $ = global.jQuery; - -var bindings = {}; - -function register(reg) { - bindings[reg.className] = reg; - if (global.document && global.document.readyState !== "complete") { - $(function () { - bind(); - }); - } else if (global.document) { - setTimeout(bind, 100); - } -} - -function bind() { - Object.keys(bindings).forEach(function (className) { - var binding = bindings[className]; - $("." + binding.className).not(".crosstalk-input-bound").each(function (i, el) { - bindInstance(binding, el); - }); - }); -} - -// Escape jQuery identifier -function $escape(val) { - return val.replace(/([!"#$%&'()*+,./:;<=>?@[\\\]^`{|}~])/g, "\\$1"); -} - -function bindEl(el) { - var $el = $(el); - Object.keys(bindings).forEach(function (className) { - if ($el.hasClass(className) && !$el.hasClass("crosstalk-input-bound")) { - var binding = bindings[className]; - bindInstance(binding, el); - } - }); -} - -function bindInstance(binding, el) { - var jsonEl = $(el).find("script[type='application/json'][data-for='" + $escape(el.id) + "']"); - var data = JSON.parse(jsonEl[0].innerText); - - var instance = binding.factory(el, data); - $(el).data("crosstalk-instance", instance); - $(el).addClass("crosstalk-input-bound"); -} - -if (global.Shiny) { - var inputBinding = new global.Shiny.InputBinding(); - var _$ = global.jQuery; - _$.extend(inputBinding, { - find: function find(scope) { - return _$(scope).find(".crosstalk-input"); - }, - initialize: function initialize(el) { - if (!_$(el).hasClass("crosstalk-input-bound")) { - bindEl(el); - } - }, - getId: function getId(el) { - return el.id; - }, - getValue: function getValue(el) {}, - setValue: function setValue(el, value) {}, - receiveMessage: function receiveMessage(el, data) {}, - subscribe: function subscribe(el, callback) { - _$(el).data("crosstalk-instance").resume(); - }, - unsubscribe: function unsubscribe(el) { - _$(el).data("crosstalk-instance").suspend(); - } - }); - global.Shiny.inputBindings.register(inputBinding, "crosstalk.inputBinding"); -} - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],7:[function(require,module,exports){ -(function (global){ -"use strict"; - -var _input = require("./input"); - -var input = _interopRequireWildcard(_input); - -var _filter = require("./filter"); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var $ = global.jQuery; - -input.register({ - className: "crosstalk-input-checkboxgroup", - - factory: function factory(el, data) { - /* - * map: {"groupA": ["keyA", "keyB", ...], ...} - * group: "ct-groupname" - */ - var ctHandle = new _filter.FilterHandle(data.group); - - var lastKnownKeys = void 0; - var $el = $(el); - $el.on("change", "input[type='checkbox']", function () { - var checked = $el.find("input[type='checkbox']:checked"); - if (checked.length === 0) { - lastKnownKeys = null; - ctHandle.clear(); - } else { - var keys = {}; - checked.each(function () { - data.map[this.value].forEach(function (key) { - keys[key] = true; - }); - }); - var keyArray = Object.keys(keys); - keyArray.sort(); - lastKnownKeys = keyArray; - ctHandle.set(keyArray); - } - }); - - return { - suspend: function suspend() { - ctHandle.clear(); - }, - resume: function resume() { - if (lastKnownKeys) ctHandle.set(lastKnownKeys); - } - }; - } -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./input":6}],8:[function(require,module,exports){ -(function (global){ -"use strict"; - -var _input = require("./input"); - -var input = _interopRequireWildcard(_input); - -var _util = require("./util"); - -var util = _interopRequireWildcard(_util); - -var _filter = require("./filter"); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var $ = global.jQuery; - -input.register({ - className: "crosstalk-input-select", - - factory: function factory(el, data) { - /* - * items: {value: [...], label: [...]} - * map: {"groupA": ["keyA", "keyB", ...], ...} - * group: "ct-groupname" - */ - - var first = [{ value: "", label: "(All)" }]; - var items = util.dataframeToD3(data.items); - var opts = { - options: first.concat(items), - valueField: "value", - labelField: "label", - searchField: "label" - }; - - var select = $(el).find("select")[0]; - - var selectize = $(select).selectize(opts)[0].selectize; - - var ctHandle = new _filter.FilterHandle(data.group); - - var lastKnownKeys = void 0; - selectize.on("change", function () { - if (selectize.items.length === 0) { - lastKnownKeys = null; - ctHandle.clear(); - } else { - var keys = {}; - selectize.items.forEach(function (group) { - data.map[group].forEach(function (key) { - keys[key] = true; - }); - }); - var keyArray = Object.keys(keys); - keyArray.sort(); - lastKnownKeys = keyArray; - ctHandle.set(keyArray); - } - }); - - return { - suspend: function suspend() { - ctHandle.clear(); - }, - resume: function resume() { - if (lastKnownKeys) ctHandle.set(lastKnownKeys); - } - }; - } -}); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./input":6,"./util":11}],9:[function(require,module,exports){ -(function (global){ -"use strict"; - -var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _input = require("./input"); - -var input = _interopRequireWildcard(_input); - -var _filter = require("./filter"); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -var $ = global.jQuery; -var strftime = global.strftime; - -input.register({ - className: "crosstalk-input-slider", - - factory: function factory(el, data) { - /* - * map: {"groupA": ["keyA", "keyB", ...], ...} - * group: "ct-groupname" - */ - var ctHandle = new _filter.FilterHandle(data.group); - - var opts = {}; - var $el = $(el).find("input"); - var dataType = $el.data("data-type"); - var timeFormat = $el.data("time-format"); - var round = $el.data("round"); - var timeFormatter = void 0; - - // Set up formatting functions - if (dataType === "date") { - timeFormatter = strftime.utc(); - opts.prettify = function (num) { - return timeFormatter(timeFormat, new Date(num)); - }; - } else if (dataType === "datetime") { - var timezone = $el.data("timezone"); - if (timezone) timeFormatter = strftime.timezone(timezone);else timeFormatter = strftime; - - opts.prettify = function (num) { - return timeFormatter(timeFormat, new Date(num)); - }; - } else if (dataType === "number") { - if (typeof round !== "undefined") opts.prettify = function (num) { - var factor = Math.pow(10, round); - return Math.round(num * factor) / factor; - }; - } - - $el.ionRangeSlider(opts); - - function getValue() { - var result = $el.data("ionRangeSlider").result; - - // Function for converting numeric value from slider to appropriate type. - var convert = void 0; - var dataType = $el.data("data-type"); - if (dataType === "date") { - convert = function convert(val) { - return formatDateUTC(new Date(+val)); - }; - } else if (dataType === "datetime") { - convert = function convert(val) { - // Convert ms to s - return +val / 1000; - }; - } else { - convert = function convert(val) { - return +val; - }; - } - - if ($el.data("ionRangeSlider").options.type === "double") { - return [convert(result.from), convert(result.to)]; - } else { - return convert(result.from); - } - } - - var lastKnownKeys = null; - - $el.on("change.crosstalkSliderInput", function (event) { - if (!$el.data("updating") && !$el.data("animating")) { - var _getValue = getValue(), - _getValue2 = _slicedToArray(_getValue, 2), - from = _getValue2[0], - to = _getValue2[1]; - - var keys = []; - for (var i = 0; i < data.values.length; i++) { - var val = data.values[i]; - if (val >= from && val <= to) { - keys.push(data.keys[i]); - } - } - keys.sort(); - ctHandle.set(keys); - lastKnownKeys = keys; - } - }); - - // let $el = $(el); - // $el.on("change", "input[type="checkbox"]", function() { - // let checked = $el.find("input[type="checkbox"]:checked"); - // if (checked.length === 0) { - // ctHandle.clear(); - // } else { - // let keys = {}; - // checked.each(function() { - // data.map[this.value].forEach(function(key) { - // keys[key] = true; - // }); - // }); - // let keyArray = Object.keys(keys); - // keyArray.sort(); - // ctHandle.set(keyArray); - // } - // }); - - return { - suspend: function suspend() { - ctHandle.clear(); - }, - resume: function resume() { - if (lastKnownKeys) ctHandle.set(lastKnownKeys); - } - }; - } -}); - -// Convert a number to a string with leading zeros -function padZeros(n, digits) { - var str = n.toString(); - while (str.length < digits) { - str = "0" + str; - }return str; -} - -// Given a Date object, return a string in yyyy-mm-dd format, using the -// UTC date. This may be a day off from the date in the local time zone. -function formatDateUTC(date) { - if (date instanceof Date) { - return date.getUTCFullYear() + "-" + padZeros(date.getUTCMonth() + 1, 2) + "-" + padZeros(date.getUTCDate(), 2); - } else { - return null; - } -} - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./filter":2,"./input":6}],10:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.SelectionHandle = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _events = require("./events"); - -var _events2 = _interopRequireDefault(_events); - -var _group = require("./group"); - -var _group2 = _interopRequireDefault(_group); - -var _util = require("./util"); - -var util = _interopRequireWildcard(_util); - -function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -/** - * Use this class to read and write (and listen for changes to) the selection - * for a Crosstalk group. This is intended to be used for linked brushing. - * - * If two (or more) `SelectionHandle` instances in the same webpage share the - * same group name, they will share the same state. Setting the selection using - * one `SelectionHandle` instance will result in the `value` property instantly - * changing across the others, and `"change"` event listeners on all instances - * (including the one that initiated the sending) will fire. - * - * @param {string} [group] - The name of the Crosstalk group, or if none, - * null or undefined (or any other falsy value). This can be changed later - * via the [SelectionHandle#setGroup](#setGroup) method. - * @param {Object} [extraInfo] - An object whose properties will be copied to - * the event object whenever an event is emitted. - */ -var SelectionHandle = exports.SelectionHandle = function () { - function SelectionHandle() { - var group = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - var extraInfo = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; - - _classCallCheck(this, SelectionHandle); - - this._eventRelay = new _events2.default(); - this._emitter = new util.SubscriptionTracker(this._eventRelay); - - // Name of the group we're currently tracking, if any. Can change over time. - this._group = null; - // The Var we're currently tracking, if any. Can change over time. - this._var = null; - // The event handler subscription we currently have on var.on("change"). - this._varOnChangeSub = null; - - this._extraInfo = util.extend({ sender: this }, extraInfo); - - this.setGroup(group); - } - - /** - * Changes the Crosstalk group membership of this SelectionHandle. The group - * being switched away from (if any) will not have its selection value - * modified as a result of calling `setGroup`, even if this handle was the - * most recent handle to set the selection of the group. - * - * The group being switched to (if any) will also not have its selection value - * modified as a result of calling `setGroup`. If you want to set the - * selection value of the new group, call `set` explicitly. - * - * @param {string} group - The name of the Crosstalk group, or null (or - * undefined) to clear the group. - */ - - - _createClass(SelectionHandle, [{ - key: "setGroup", - value: function setGroup(group) { - var _this = this; - - // If group is unchanged, do nothing - if (this._group === group) return; - // Treat null, undefined, and other falsy values the same - if (!this._group && !group) return; - - if (this._var) { - this._var.off("change", this._varOnChangeSub); - this._var = null; - this._varOnChangeSub = null; - } - - this._group = group; - - if (group) { - this._var = (0, _group2.default)(group).var("selection"); - var sub = this._var.on("change", function (e) { - _this._eventRelay.trigger("change", e, _this); - }); - this._varOnChangeSub = sub; - } - } - - /** - * Retrieves the current selection for the group represented by this - * `SelectionHandle`. - * - * - If no selection is active, then this value will be falsy. - * - If a selection is active, but no data points are selected, then this - * value will be an empty array. - * - If a selection is active, and data points are selected, then the keys - * of the selected data points will be present in the array. - */ - - }, { - key: "_mergeExtraInfo", - - - /** - * Combines the given `extraInfo` (if any) with the handle's default - * `_extraInfo` (if any). - * @private - */ - value: function _mergeExtraInfo(extraInfo) { - // Important incidental effect: shallow clone is returned - return util.extend({}, this._extraInfo ? this._extraInfo : null, extraInfo ? extraInfo : null); - } - - /** - * Overwrites the current selection for the group, and raises the `"change"` - * event among all of the group's '`SelectionHandle` instances (including - * this one). - * - * @fires SelectionHandle#change - * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see - * {@link SelectionHandle#value}). - * @param {Object} [extraInfo] - Extra properties to be included on the event - * object that's passed to listeners (in addition to any options that were - * passed into the `SelectionHandle` constructor). - */ - - }, { - key: "set", - value: function set(selectedKeys, extraInfo) { - if (this._var) this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo)); - } - - /** - * Overwrites the current selection for the group, and raises the `"change"` - * event among all of the group's '`SelectionHandle` instances (including - * this one). - * - * @fires SelectionHandle#change - * @param {Object} [extraInfo] - Extra properties to be included on the event - * object that's passed to listeners (in addition to any that were passed - * into the `SelectionHandle` constructor). - */ - - }, { - key: "clear", - value: function clear(extraInfo) { - if (this._var) this.set(void 0, this._mergeExtraInfo(extraInfo)); - } - - /** - * Subscribes to events on this `SelectionHandle`. - * - * @param {string} eventType - Indicates the type of events to listen to. - * Currently, only `"change"` is supported. - * @param {SelectionHandle~listener} listener - The callback function that - * will be invoked when the event occurs. - * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel - * this subscription. - */ - - }, { - key: "on", - value: function on(eventType, listener) { - return this._emitter.on(eventType, listener); - } - - /** - * Cancels event subscriptions created by {@link SelectionHandle#on}. - * - * @param {string} eventType - The type of event to unsubscribe. - * @param {string|SelectionHandle~listener} listener - Either the callback - * function previously passed into {@link SelectionHandle#on}, or the - * string that was returned from {@link SelectionHandle#on}. - */ - - }, { - key: "off", - value: function off(eventType, listener) { - return this._emitter.off(eventType, listener); - } - - /** - * Shuts down the `SelectionHandle` object. - * - * Removes all event listeners that were added through this handle. - */ - - }, { - key: "close", - value: function close() { - this._emitter.removeAllListeners(); - this.setGroup(null); - } - }, { - key: "value", - get: function get() { - return this._var ? this._var.get() : null; - } - }]); - - return SelectionHandle; -}(); - -/** - * @callback SelectionHandle~listener - * @param {Object} event - An object containing details of the event. For - * `"change"` events, this includes the properties `value` (the new - * value of the selection, or `undefined` if no selection is active), - * `oldValue` (the previous value of the selection), and `sender` (the - * `SelectionHandle` instance that made the change). - */ - -/** - * @event SelectionHandle#change - * @type {object} - * @property {object} value - The new value of the selection, or `undefined` - * if no selection is active. - * @property {object} oldValue - The previous value of the selection. - * @property {SelectionHandle} sender - The `SelectionHandle` instance that - * changed the value. - */ - -},{"./events":1,"./group":4,"./util":11}],11:[function(require,module,exports){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -exports.extend = extend; -exports.checkSorted = checkSorted; -exports.diffSortedLists = diffSortedLists; -exports.dataframeToD3 = dataframeToD3; - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function extend(target) { - for (var _len = arguments.length, sources = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - sources[_key - 1] = arguments[_key]; - } - - for (var i = 0; i < sources.length; i++) { - var src = sources[i]; - if (typeof src === "undefined" || src === null) continue; - - for (var key in src) { - if (src.hasOwnProperty(key)) { - target[key] = src[key]; - } - } - } - return target; -} - -function checkSorted(list) { - for (var i = 1; i < list.length; i++) { - if (list[i] <= list[i - 1]) { - throw new Error("List is not sorted or contains duplicate"); - } - } -} - -function diffSortedLists(a, b) { - var i_a = 0; - var i_b = 0; - - if (!a) a = []; - if (!b) b = []; - - var a_only = []; - var b_only = []; - - checkSorted(a); - checkSorted(b); - - while (i_a < a.length && i_b < b.length) { - if (a[i_a] === b[i_b]) { - i_a++; - i_b++; - } else if (a[i_a] < b[i_b]) { - a_only.push(a[i_a++]); - } else { - b_only.push(b[i_b++]); - } - } - - if (i_a < a.length) a_only = a_only.concat(a.slice(i_a)); - if (i_b < b.length) b_only = b_only.concat(b.slice(i_b)); - return { - removed: a_only, - added: b_only - }; -} - -// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... } -// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ] -function dataframeToD3(df) { - var names = []; - var length = void 0; - 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 = void 0; - 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; -} - -/** - * Keeps track of all event listener additions/removals and lets all active - * listeners be removed with a single operation. - * - * @private - */ - -var SubscriptionTracker = exports.SubscriptionTracker = function () { - function SubscriptionTracker(emitter) { - _classCallCheck(this, SubscriptionTracker); - - this._emitter = emitter; - this._subs = {}; - } - - _createClass(SubscriptionTracker, [{ - key: "on", - value: function on(eventType, listener) { - var sub = this._emitter.on(eventType, listener); - this._subs[sub] = eventType; - return sub; - } - }, { - key: "off", - value: function off(eventType, listener) { - var sub = this._emitter.off(eventType, listener); - if (sub) { - delete this._subs[sub]; - } - return sub; - } - }, { - key: "removeAllListeners", - value: function removeAllListeners() { - var _this = this; - - var current_subs = this._subs; - this._subs = {}; - Object.keys(current_subs).forEach(function (sub) { - _this._emitter.off(current_subs[sub], sub); - }); - } - }]); - - return SubscriptionTracker; -}(); - -},{}],12:[function(require,module,exports){ -(function (global){ -"use strict"; - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _events = require("./events"); - -var _events2 = _interopRequireDefault(_events); - -function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Var = function () { - function Var(group, name, /*optional*/value) { - _classCallCheck(this, Var); - - this._group = group; - this._name = name; - this._value = value; - this._events = new _events2.default(); - } - - _createClass(Var, [{ - key: "get", - value: function get() { - return this._value; - } - }, { - key: "set", - value: function set(value, /*optional*/event) { - if (this._value === value) { - // Do nothing; the value hasn't changed - return; - } - var oldValue = this._value; - this._value = value; - // Alert JavaScript listeners that the value has changed - var evt = {}; - if (event && (typeof event === "undefined" ? "undefined" : _typeof(event)) === "object") { - for (var k in event) { - if (event.hasOwnProperty(k)) evt[k] = event[k]; - } - } - evt.oldValue = oldValue; - evt.value = value; - this._events.trigger("change", evt, this); - - // TODO: Make this extensible, to let arbitrary back-ends know that - // something has changed - if (global.Shiny && global.Shiny.onInputChange) { - global.Shiny.onInputChange(".clientValue-" + (this._group.name !== null ? this._group.name + "-" : "") + this._name, typeof value === "undefined" ? null : value); - } - } - }, { - key: "on", - value: function on(eventType, listener) { - return this._events.on(eventType, listener); - } - }, { - key: "off", - value: function off(eventType, listener) { - return this._events.off(eventType, listener); - } - }]); - - return Var; -}(); - -exports.default = Var; - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{"./events":1}]},{},[5]) -//# sourceMappingURL=crosstalk.js.map diff --git a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js.map b/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js.map deleted file mode 100644 index cff94f08..00000000 --- a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.js.map +++ /dev/null @@ -1,37 +0,0 @@ -{ - "version": 3, - "sources": [ - "node_modules/browser-pack/_prelude.js", - "javascript/src/events.js", - "javascript/src/filter.js", - "javascript/src/filterset.js", - "javascript/src/group.js", - "javascript/src/index.js", - "javascript/src/input.js", - "javascript/src/input_checkboxgroup.js", - "javascript/src/input_selectize.js", - "javascript/src/input_slider.js", - "javascript/src/selection.js", - "javascript/src/util.js", - "javascript/src/var.js" - ], - "names": [], - "mappings": "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", - "file": "generated.js", - "sourceRoot": "", - "sourcesContent": [ - "(function(){function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n", - "import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n", - "import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n", - "import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n", - "let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n", - "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n", - "import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n", - "import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n", - "import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n", - "export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n", - "import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n" - ] -} \ No newline at end of file diff --git a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js b/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js deleted file mode 100644 index b7ec0ac9..00000000 --- a/docs/articles/xportr_files/crosstalk-1.1.1/js/crosstalk.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function o(u,a,l){function s(n,e){if(!a[n]){if(!u[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(f)return f(n,!0);var r=new Error("Cannot find module '"+n+"'");throw r.code="MODULE_NOT_FOUND",r}var i=a[n]={exports:{}};u[n][0].call(i.exports,function(e){var t=u[n][1][e];return s(t||e)},i,i.exports,o,u,a,l)}return a[n].exports}for(var f="function"==typeof require&&require,e=0;e?@[\\\]^`{|}~])/g,"\\$1")+"']"),r=JSON.parse(n[0].innerText),i=e.factory(t,r);o(t).data("crosstalk-instance",i),o(t).addClass("crosstalk-input-bound")}if(t.Shiny){var e=new t.Shiny.InputBinding,u=t.jQuery;u.extend(e,{find:function(e){return u(e).find(".crosstalk-input")},initialize:function(e){var t,n;u(e).hasClass("crosstalk-input-bound")||(n=o(t=e),Object.keys(r).forEach(function(e){n.hasClass(e)&&!n.hasClass("crosstalk-input-bound")&&i(r[e],t)}))},getId:function(e){return e.id},getValue:function(e){},setValue:function(e,t){},receiveMessage:function(e,t){},subscribe:function(e,t){u(e).data("crosstalk-instance").resume()},unsubscribe:function(e){u(e).data("crosstalk-instance").suspend()}}),t.Shiny.inputBindings.register(e,"crosstalk.inputBinding")}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],7:[function(r,e,t){(function(e){"use strict";var t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(r("./input")),n=r("./filter");var a=e.jQuery;t.register({className:"crosstalk-input-checkboxgroup",factory:function(e,r){var i=new n.FilterHandle(r.group),o=void 0,u=a(e);return u.on("change","input[type='checkbox']",function(){var e=u.find("input[type='checkbox']:checked");if(0===e.length)o=null,i.clear();else{var t={};e.each(function(){r.map[this.value].forEach(function(e){t[e]=!0})});var n=Object.keys(t);n.sort(),o=n,i.set(n)}}),{suspend:function(){i.clear()},resume:function(){o&&i.set(o)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6}],8:[function(r,e,t){(function(e){"use strict";var t=n(r("./input")),l=n(r("./util")),s=r("./filter");function n(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}var f=e.jQuery;t.register({className:"crosstalk-input-select",factory:function(e,n){var t=l.dataframeToD3(n.items),r={options:[{value:"",label:"(All)"}].concat(t),valueField:"value",labelField:"label",searchField:"label"},i=f(e).find("select")[0],o=f(i).selectize(r)[0].selectize,u=new s.FilterHandle(n.group),a=void 0;return o.on("change",function(){if(0===o.items.length)a=null,u.clear();else{var t={};o.items.forEach(function(e){n.map[e].forEach(function(e){t[e]=!0})});var e=Object.keys(t);e.sort(),a=e,u.set(e)}}),{suspend:function(){u.clear()},resume:function(){a&&u.set(a)}}}})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./filter":2,"./input":6,"./util":11}],9:[function(n,e,t){(function(e){"use strict";var d=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var n=[],r=!0,i=!1,o=void 0;try{for(var u,a=e[Symbol.iterator]();!(r=(u=a.next()).done)&&(n.push(u.value),!t||n.length!==t);r=!0);}catch(e){i=!0,o=e}finally{try{!r&&a.return&&a.return()}finally{if(i)throw o}}return n}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},t=function(e){{if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t}}(n("./input")),a=n("./filter");var v=e.jQuery,p=e.strftime;function y(e,t){for(var n=e.toString();n.length {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Combine the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Close the handle. This clears this handle's contribution to the filter set,\n * and unsubscribes all event listeners.\n */\n close() {\n this._emitter.removeAllListeners();\n this.clear();\n this.setGroup(null);\n }\n\n /**\n * Clear this handle's contribution to the filter set.\n *\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n clear(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.clear(this._id);\n this._onChange(extraInfo);\n }\n\n /**\n * Set this handle's contribution to the filter set. This array should consist\n * of the keys of the rows that _should_ be displayed; any keys that are not\n * present in the array will be considered _filtered out_. Note that multiple\n * `FilterHandle` instances in the group may each contribute an array of keys,\n * and only those keys that appear in _all_ of the arrays make it through the\n * filter.\n *\n * @param {string[]} keys - Empty array, or array of keys. To clear the\n * filter, don't pass an empty array; instead, use the\n * {@link FilterHandle#clear} method.\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `FilterHandle` constructor).\n * \n * @fires FilterHandle#change\n */\n set(keys, extraInfo) {\n if (!this._filterSet)\n return;\n this._filterSet.update(this._id, keys);\n this._onChange(extraInfo);\n }\n\n /**\n * @return {string[]|null} - Either: 1) an array of keys that made it through\n * all of the `FilterHandle` instances, or, 2) `null`, which means no filter\n * is being applied (all data should be displayed).\n */\n get filteredKeys() {\n return this._filterSet ? this._filterSet.value : null;\n }\n\n /**\n * Subscribe to events on this `FilterHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {FilterHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link FilterHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancel event subscriptions created by {@link FilterHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|FilterHandle~listener} listener - Either the callback\n * function previously passed into {@link FilterHandle#on}, or the\n * string that was returned from {@link FilterHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n _onChange(extraInfo) {\n if (!this._filterSet)\n return;\n this._filterVar.set(this._filterSet.value, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * @callback FilterHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the filter set, or `null` if no filter set is active),\n * `oldValue` (the previous value of the filter set), and `sender` (the\n * `FilterHandle` instance that made the change).\n */\n\n}\n\n/**\n * @event FilterHandle#change\n * @type {object}\n * @property {object} value - The new value of the filter set, or `null`\n * if no filter set is active.\n * @property {object} oldValue - The previous value of the filter set.\n * @property {FilterHandle} sender - The `FilterHandle` instance that\n * changed the value.\n */\n","import { diffSortedLists } from \"./util\";\n\nfunction naturalComparator(a, b) {\n if (a === b) {\n return 0;\n } else if (a < b) {\n return -1;\n } else if (a > b) {\n return 1;\n }\n}\n\n/**\n * @private\n */\nexport default class FilterSet {\n constructor() {\n this.reset();\n }\n\n reset() {\n // Key: handle ID, Value: array of selected keys, or null\n this._handles = {};\n // Key: key string, Value: count of handles that include it\n this._keys = {};\n this._value = null;\n this._activeHandles = 0;\n }\n\n get value() {\n return this._value;\n }\n\n update(handleId, keys) {\n if (keys !== null) {\n keys = keys.slice(0); // clone before sorting\n keys.sort(naturalComparator);\n }\n\n let {added, removed} = diffSortedLists(this._handles[handleId], keys);\n this._handles[handleId] = keys;\n\n for (let i = 0; i < added.length; i++) {\n this._keys[added[i]] = (this._keys[added[i]] || 0) + 1;\n }\n for (let i = 0; i < removed.length; i++) {\n this._keys[removed[i]]--;\n }\n\n this._updateValue(keys);\n }\n\n /**\n * @param {string[]} keys Sorted array of strings that indicate\n * a superset of possible keys.\n * @private\n */\n _updateValue(keys = this._allKeys) {\n let handleCount = Object.keys(this._handles).length;\n if (handleCount === 0) {\n this._value = null;\n } else {\n this._value = [];\n for (let i = 0; i < keys.length; i++) {\n let count = this._keys[keys[i]];\n if (count === handleCount) {\n this._value.push(keys[i]);\n }\n }\n }\n }\n\n clear(handleId) {\n if (typeof(this._handles[handleId]) === \"undefined\") {\n return;\n }\n\n let keys = this._handles[handleId];\n if (!keys) {\n keys = [];\n }\n\n for (let i = 0; i < keys.length; i++) {\n this._keys[keys[i]]--;\n }\n delete this._handles[handleId];\n\n this._updateValue();\n }\n\n get _allKeys() {\n let allKeys = Object.keys(this._keys);\n allKeys.sort(naturalComparator);\n return allKeys;\n }\n}\n","import Var from \"./var\";\n\n// Use a global so that multiple copies of crosstalk.js can be loaded and still\n// have groups behave as singletons across all copies.\nglobal.__crosstalk_groups = global.__crosstalk_groups || {};\nlet groups = global.__crosstalk_groups;\n\nexport default function group(groupName) {\n if (groupName && typeof(groupName) === \"string\") {\n if (!groups.hasOwnProperty(groupName)) {\n groups[groupName] = new Group(groupName);\n }\n return groups[groupName];\n } else if (typeof(groupName) === \"object\" && groupName._vars && groupName.var) {\n // Appears to already be a group object\n return groupName;\n } else if (Array.isArray(groupName) &&\n groupName.length == 1 &&\n typeof(groupName[0]) === \"string\") {\n return group(groupName[0]);\n } else {\n throw new Error(\"Invalid groupName argument\");\n }\n}\n\nclass Group {\n constructor(name) {\n this.name = name;\n this._vars = {};\n }\n\n var(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n if (!this._vars.hasOwnProperty(name))\n this._vars[name] = new Var(this, name);\n return this._vars[name];\n }\n\n has(name) {\n if (!name || typeof(name) !== \"string\") {\n throw new Error(\"Invalid var name\");\n }\n\n return this._vars.hasOwnProperty(name);\n }\n}\n","import group from \"./group\";\nimport { SelectionHandle } from \"./selection\";\nimport { FilterHandle } from \"./filter\";\nimport { bind } from \"./input\";\nimport \"./input_selectize\";\nimport \"./input_checkboxgroup\";\nimport \"./input_slider\";\n\nconst defaultGroup = group(\"default\");\n\nfunction var_(name) {\n return defaultGroup.var(name);\n}\n\nfunction has(name) {\n return defaultGroup.has(name);\n}\n\nif (global.Shiny) {\n global.Shiny.addCustomMessageHandler(\"update-client-value\", function(message) {\n if (typeof(message.group) === \"string\") {\n group(message.group).var(message.name).set(message.value);\n } else {\n var_(message.name).set(message.value);\n }\n });\n}\n\nconst crosstalk = {\n group: group,\n var: var_,\n has: has,\n SelectionHandle: SelectionHandle,\n FilterHandle: FilterHandle,\n bind: bind\n};\n\n/**\n * @namespace crosstalk\n */\nexport default crosstalk;\nglobal.crosstalk = crosstalk;\n","let $ = global.jQuery;\n\nlet bindings = {};\n\nexport function register(reg) {\n bindings[reg.className] = reg;\n if (global.document && global.document.readyState !== \"complete\") {\n $(() => {\n bind();\n });\n } else if (global.document) {\n setTimeout(bind, 100);\n }\n}\n\nexport function bind() {\n Object.keys(bindings).forEach(function(className) {\n let binding = bindings[className];\n $(\".\" + binding.className).not(\".crosstalk-input-bound\").each(function(i, el) {\n bindInstance(binding, el);\n });\n });\n}\n\n// Escape jQuery identifier\nfunction $escape(val) {\n return val.replace(/([!\"#$%&'()*+,./:;<=>?@[\\\\\\]^`{|}~])/g, \"\\\\$1\");\n}\n\nfunction bindEl(el) {\n let $el = $(el);\n Object.keys(bindings).forEach(function(className) {\n if ($el.hasClass(className) && !$el.hasClass(\"crosstalk-input-bound\")) {\n let binding = bindings[className];\n bindInstance(binding, el);\n }\n });\n}\n\nfunction bindInstance(binding, el) {\n let jsonEl = $(el).find(\"script[type='application/json'][data-for='\" + $escape(el.id) + \"']\");\n let data = JSON.parse(jsonEl[0].innerText);\n\n let instance = binding.factory(el, data);\n $(el).data(\"crosstalk-instance\", instance);\n $(el).addClass(\"crosstalk-input-bound\");\n}\n\nif (global.Shiny) {\n let inputBinding = new global.Shiny.InputBinding();\n let $ = global.jQuery;\n $.extend(inputBinding, {\n find: function(scope) {\n return $(scope).find(\".crosstalk-input\");\n },\n initialize: function(el) {\n if (!$(el).hasClass(\"crosstalk-input-bound\")) {\n bindEl(el);\n }\n },\n getId: function(el) {\n return el.id;\n },\n getValue: function(el) {\n\n },\n setValue: function(el, value) {\n\n },\n receiveMessage: function(el, data) {\n\n },\n subscribe: function(el, callback) {\n $(el).data(\"crosstalk-instance\").resume();\n },\n unsubscribe: function(el) {\n $(el).data(\"crosstalk-instance\").suspend();\n }\n });\n global.Shiny.inputBindings.register(inputBinding, \"crosstalk.inputBinding\");\n}\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-checkboxgroup\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n let $el = $(el);\n $el.on(\"change\", \"input[type='checkbox']\", function() {\n let checked = $el.find(\"input[type='checkbox']:checked\");\n if (checked.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n checked.each(function() {\n data.map[this.value].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport * as util from \"./util\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\n\ninput.register({\n className: \"crosstalk-input-select\",\n\n factory: function(el, data) {\n /*\n * items: {value: [...], label: [...]}\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n\n let first = [{value: \"\", label: \"(All)\"}];\n let items = util.dataframeToD3(data.items);\n let opts = {\n options: first.concat(items),\n valueField: \"value\",\n labelField: \"label\",\n searchField: \"label\"\n };\n\n let select = $(el).find(\"select\")[0];\n\n let selectize = $(select).selectize(opts)[0].selectize;\n\n let ctHandle = new FilterHandle(data.group);\n\n let lastKnownKeys;\n selectize.on(\"change\", function() {\n if (selectize.items.length === 0) {\n lastKnownKeys = null;\n ctHandle.clear();\n } else {\n let keys = {};\n selectize.items.forEach(function(group) {\n data.map[group].forEach(function(key) {\n keys[key] = true;\n });\n });\n let keyArray = Object.keys(keys);\n keyArray.sort();\n lastKnownKeys = keyArray;\n ctHandle.set(keyArray);\n }\n });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n","import * as input from \"./input\";\nimport { FilterHandle } from \"./filter\";\n\nlet $ = global.jQuery;\nlet strftime = global.strftime;\n\ninput.register({\n className: \"crosstalk-input-slider\",\n\n factory: function(el, data) {\n /*\n * map: {\"groupA\": [\"keyA\", \"keyB\", ...], ...}\n * group: \"ct-groupname\"\n */\n let ctHandle = new FilterHandle(data.group);\n\n let opts = {};\n let $el = $(el).find(\"input\");\n let dataType = $el.data(\"data-type\");\n let timeFormat = $el.data(\"time-format\");\n let round = $el.data(\"round\");\n let timeFormatter;\n\n // Set up formatting functions\n if (dataType === \"date\") {\n timeFormatter = strftime.utc();\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n\n } else if (dataType === \"datetime\") {\n let timezone = $el.data(\"timezone\");\n if (timezone)\n timeFormatter = strftime.timezone(timezone);\n else\n timeFormatter = strftime;\n\n opts.prettify = function(num) {\n return timeFormatter(timeFormat, new Date(num));\n };\n } else if (dataType === \"number\") {\n if (typeof round !== \"undefined\")\n opts.prettify = function(num) {\n let factor = Math.pow(10, round);\n return Math.round(num * factor) / factor;\n };\n }\n\n $el.ionRangeSlider(opts);\n\n function getValue() {\n let result = $el.data(\"ionRangeSlider\").result;\n\n // Function for converting numeric value from slider to appropriate type.\n let convert;\n let dataType = $el.data(\"data-type\");\n if (dataType === \"date\") {\n convert = function(val) {\n return formatDateUTC(new Date(+val));\n };\n } else if (dataType === \"datetime\") {\n convert = function(val) {\n // Convert ms to s\n return +val / 1000;\n };\n } else {\n convert = function(val) { return +val; };\n }\n\n if ($el.data(\"ionRangeSlider\").options.type === \"double\") {\n return [convert(result.from), convert(result.to)];\n } else {\n return convert(result.from);\n }\n }\n\n let lastKnownKeys = null;\n\n $el.on(\"change.crosstalkSliderInput\", function(event) {\n if (!$el.data(\"updating\") && !$el.data(\"animating\")) {\n let [from, to] = getValue();\n let keys = [];\n for (let i = 0; i < data.values.length; i++) {\n let val = data.values[i];\n if (val >= from && val <= to) {\n keys.push(data.keys[i]);\n }\n }\n keys.sort();\n ctHandle.set(keys);\n lastKnownKeys = keys;\n }\n });\n\n\n // let $el = $(el);\n // $el.on(\"change\", \"input[type=\"checkbox\"]\", function() {\n // let checked = $el.find(\"input[type=\"checkbox\"]:checked\");\n // if (checked.length === 0) {\n // ctHandle.clear();\n // } else {\n // let keys = {};\n // checked.each(function() {\n // data.map[this.value].forEach(function(key) {\n // keys[key] = true;\n // });\n // });\n // let keyArray = Object.keys(keys);\n // keyArray.sort();\n // ctHandle.set(keyArray);\n // }\n // });\n\n return {\n suspend: function() {\n ctHandle.clear();\n },\n resume: function() {\n if (lastKnownKeys)\n ctHandle.set(lastKnownKeys);\n }\n };\n }\n});\n\n\n// Convert a number to a string with leading zeros\nfunction padZeros(n, digits) {\n let str = n.toString();\n while (str.length < digits)\n str = \"0\" + str;\n return str;\n}\n\n// Given a Date object, return a string in yyyy-mm-dd format, using the\n// UTC date. This may be a day off from the date in the local time zone.\nfunction formatDateUTC(date) {\n if (date instanceof Date) {\n return date.getUTCFullYear() + \"-\" +\n padZeros(date.getUTCMonth()+1, 2) + \"-\" +\n padZeros(date.getUTCDate(), 2);\n\n } else {\n return null;\n }\n}\n","import Events from \"./events\";\nimport grp from \"./group\";\nimport * as util from \"./util\";\n\n/**\n * Use this class to read and write (and listen for changes to) the selection\n * for a Crosstalk group. This is intended to be used for linked brushing.\n *\n * If two (or more) `SelectionHandle` instances in the same webpage share the\n * same group name, they will share the same state. Setting the selection using\n * one `SelectionHandle` instance will result in the `value` property instantly\n * changing across the others, and `\"change\"` event listeners on all instances\n * (including the one that initiated the sending) will fire.\n *\n * @param {string} [group] - The name of the Crosstalk group, or if none,\n * null or undefined (or any other falsy value). This can be changed later\n * via the [SelectionHandle#setGroup](#setGroup) method.\n * @param {Object} [extraInfo] - An object whose properties will be copied to\n * the event object whenever an event is emitted.\n */\nexport class SelectionHandle {\n\n constructor(group = null, extraInfo = null) {\n this._eventRelay = new Events();\n this._emitter = new util.SubscriptionTracker(this._eventRelay);\n\n // Name of the group we're currently tracking, if any. Can change over time.\n this._group = null;\n // The Var we're currently tracking, if any. Can change over time.\n this._var = null;\n // The event handler subscription we currently have on var.on(\"change\").\n this._varOnChangeSub = null;\n\n this._extraInfo = util.extend({ sender: this }, extraInfo);\n\n this.setGroup(group);\n }\n\n /**\n * Changes the Crosstalk group membership of this SelectionHandle. The group\n * being switched away from (if any) will not have its selection value\n * modified as a result of calling `setGroup`, even if this handle was the\n * most recent handle to set the selection of the group.\n *\n * The group being switched to (if any) will also not have its selection value\n * modified as a result of calling `setGroup`. If you want to set the\n * selection value of the new group, call `set` explicitly.\n *\n * @param {string} group - The name of the Crosstalk group, or null (or\n * undefined) to clear the group.\n */\n setGroup(group) {\n // If group is unchanged, do nothing\n if (this._group === group)\n return;\n // Treat null, undefined, and other falsy values the same\n if (!this._group && !group)\n return;\n\n if (this._var) {\n this._var.off(\"change\", this._varOnChangeSub);\n this._var = null;\n this._varOnChangeSub = null;\n }\n\n this._group = group;\n\n if (group) {\n this._var = grp(group).var(\"selection\");\n let sub = this._var.on(\"change\", (e) => {\n this._eventRelay.trigger(\"change\", e, this);\n });\n this._varOnChangeSub = sub;\n }\n }\n\n /**\n * Retrieves the current selection for the group represented by this\n * `SelectionHandle`.\n *\n * - If no selection is active, then this value will be falsy.\n * - If a selection is active, but no data points are selected, then this\n * value will be an empty array.\n * - If a selection is active, and data points are selected, then the keys\n * of the selected data points will be present in the array.\n */\n get value() {\n return this._var ? this._var.get() : null;\n }\n\n /**\n * Combines the given `extraInfo` (if any) with the handle's default\n * `_extraInfo` (if any).\n * @private\n */\n _mergeExtraInfo(extraInfo) {\n // Important incidental effect: shallow clone is returned\n return util.extend({},\n this._extraInfo ? this._extraInfo : null,\n extraInfo ? extraInfo : null);\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {string[]} selectedKeys - Falsy, empty array, or array of keys (see\n * {@link SelectionHandle#value}).\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any options that were\n * passed into the `SelectionHandle` constructor).\n */\n set(selectedKeys, extraInfo) {\n if (this._var)\n this._var.set(selectedKeys, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Overwrites the current selection for the group, and raises the `\"change\"`\n * event among all of the group's '`SelectionHandle` instances (including\n * this one).\n *\n * @fires SelectionHandle#change\n * @param {Object} [extraInfo] - Extra properties to be included on the event\n * object that's passed to listeners (in addition to any that were passed\n * into the `SelectionHandle` constructor).\n */\n clear(extraInfo) {\n if (this._var)\n this.set(void 0, this._mergeExtraInfo(extraInfo));\n }\n\n /**\n * Subscribes to events on this `SelectionHandle`.\n *\n * @param {string} eventType - Indicates the type of events to listen to.\n * Currently, only `\"change\"` is supported.\n * @param {SelectionHandle~listener} listener - The callback function that\n * will be invoked when the event occurs.\n * @return {string} - A token to pass to {@link SelectionHandle#off} to cancel\n * this subscription.\n */\n on(eventType, listener) {\n return this._emitter.on(eventType, listener);\n }\n\n /**\n * Cancels event subscriptions created by {@link SelectionHandle#on}.\n *\n * @param {string} eventType - The type of event to unsubscribe.\n * @param {string|SelectionHandle~listener} listener - Either the callback\n * function previously passed into {@link SelectionHandle#on}, or the\n * string that was returned from {@link SelectionHandle#on}.\n */\n off(eventType, listener) {\n return this._emitter.off(eventType, listener);\n }\n\n /**\n * Shuts down the `SelectionHandle` object.\n *\n * Removes all event listeners that were added through this handle.\n */\n close() {\n this._emitter.removeAllListeners();\n this.setGroup(null);\n }\n}\n\n/**\n * @callback SelectionHandle~listener\n * @param {Object} event - An object containing details of the event. For\n * `\"change\"` events, this includes the properties `value` (the new\n * value of the selection, or `undefined` if no selection is active),\n * `oldValue` (the previous value of the selection), and `sender` (the\n * `SelectionHandle` instance that made the change).\n */\n\n/**\n * @event SelectionHandle#change\n * @type {object}\n * @property {object} value - The new value of the selection, or `undefined`\n * if no selection is active.\n * @property {object} oldValue - The previous value of the selection.\n * @property {SelectionHandle} sender - The `SelectionHandle` instance that\n * changed the value.\n */\n","export function extend(target, ...sources) {\n for (let i = 0; i < sources.length; i++) {\n let src = sources[i];\n if (typeof(src) === \"undefined\" || src === null)\n continue;\n\n for (let key in src) {\n if (src.hasOwnProperty(key)) {\n target[key] = src[key];\n }\n }\n }\n return target;\n}\n\nexport function checkSorted(list) {\n for (let i = 1; i < list.length; i++) {\n if (list[i] <= list[i-1]) {\n throw new Error(\"List is not sorted or contains duplicate\");\n }\n }\n}\n\nexport function diffSortedLists(a, b) {\n let i_a = 0;\n let i_b = 0;\n\n if (!a) a = [];\n if (!b) b = [];\n\n let a_only = [];\n let b_only = [];\n\n checkSorted(a);\n checkSorted(b);\n\n while (i_a < a.length && i_b < b.length) {\n if (a[i_a] === b[i_b]) {\n i_a++;\n i_b++;\n } else if (a[i_a] < b[i_b]) {\n a_only.push(a[i_a++]);\n } else {\n b_only.push(b[i_b++]);\n }\n }\n\n if (i_a < a.length)\n a_only = a_only.concat(a.slice(i_a));\n if (i_b < b.length)\n b_only = b_only.concat(b.slice(i_b));\n return {\n removed: a_only,\n added: b_only\n };\n}\n\n// Convert from wide: { colA: [1,2,3], colB: [4,5,6], ... }\n// to long: [ {colA: 1, colB: 4}, {colA: 2, colB: 5}, ... ]\nexport function dataframeToD3(df) {\n let names = [];\n let length;\n for (let name in df) {\n if (df.hasOwnProperty(name))\n names.push(name);\n if (typeof(df[name]) !== \"object\" || typeof(df[name].length) === \"undefined\") {\n throw new Error(\"All fields must be arrays\");\n } else if (typeof(length) !== \"undefined\" && length !== df[name].length) {\n throw new Error(\"All fields must be arrays of the same length\");\n }\n length = df[name].length;\n }\n let results = [];\n let item;\n for (let row = 0; row < length; row++) {\n item = {};\n for (let col = 0; col < names.length; col++) {\n item[names[col]] = df[names[col]][row];\n }\n results.push(item);\n }\n return results;\n}\n\n/**\n * Keeps track of all event listener additions/removals and lets all active\n * listeners be removed with a single operation.\n *\n * @private\n */\nexport class SubscriptionTracker {\n constructor(emitter) {\n this._emitter = emitter;\n this._subs = {};\n }\n\n on(eventType, listener) {\n let sub = this._emitter.on(eventType, listener);\n this._subs[sub] = eventType;\n return sub;\n }\n\n off(eventType, listener) {\n let sub = this._emitter.off(eventType, listener);\n if (sub) {\n delete this._subs[sub];\n }\n return sub;\n }\n\n removeAllListeners() {\n let current_subs = this._subs;\n this._subs = {};\n Object.keys(current_subs).forEach((sub) => {\n this._emitter.off(current_subs[sub], sub);\n });\n }\n}\n","import Events from \"./events\";\n\nexport default class Var {\n constructor(group, name, /*optional*/ value) {\n this._group = group;\n this._name = name;\n this._value = value;\n this._events = new Events();\n }\n\n get() {\n return this._value;\n }\n\n set(value, /*optional*/ event) {\n if (this._value === value) {\n // Do nothing; the value hasn't changed\n return;\n }\n let oldValue = this._value;\n this._value = value;\n // Alert JavaScript listeners that the value has changed\n let evt = {};\n if (event && typeof(event) === \"object\") {\n for (let k in event) {\n if (event.hasOwnProperty(k))\n evt[k] = event[k];\n }\n }\n evt.oldValue = oldValue;\n evt.value = value;\n this._events.trigger(\"change\", evt, this);\n\n // TODO: Make this extensible, to let arbitrary back-ends know that\n // something has changed\n if (global.Shiny && global.Shiny.onInputChange) {\n global.Shiny.onInputChange(\n \".clientValue-\" +\n (this._group.name !== null ? this._group.name + \"-\" : \"\") +\n this._name,\n typeof(value) === \"undefined\" ? null : value\n );\n }\n }\n\n on(eventType, listener) {\n return this._events.on(eventType, listener);\n }\n\n off(eventType, listener) {\n return this._events.off(eventType, listener);\n }\n}\n"]} \ No newline at end of file diff --git a/docs/articles/xportr_files/datatables-binding-0.17/datatables.js b/docs/articles/xportr_files/datatables-binding-0.17/datatables.js deleted file mode 100644 index 47909da2..00000000 --- a/docs/articles/xportr_files/datatables-binding-0.17/datatables.js +++ /dev/null @@ -1,1422 +0,0 @@ -(function() { - -// some helper functions: using a global object DTWidget so that it can be used -// in JS() code, e.g. datatable(options = list(foo = JS('code'))); unlike R's -// dynamic scoping, when 'code' is eval()'ed, JavaScript does not know objects -// from the "parent frame", e.g. JS('DTWidget') will not work unless it was made -// a global object -var DTWidget = {}; - -// 123456666.7890 -> 123,456,666.7890 -var markInterval = function(d, digits, interval, mark, decMark, precision) { - x = precision ? d.toPrecision(digits) : d.toFixed(digits); - if (!/^-?[\d.]+$/.test(x)) return x; - var xv = x.split('.'); - if (xv.length > 2) return x; // should have at most one decimal point - xv[0] = xv[0].replace(new RegExp('\\B(?=(\\d{' + interval + '})+(?!\\d))', 'g'), mark); - return xv.join(decMark); -}; - -DTWidget.formatCurrency = function(data, currency, digits, interval, mark, decMark, before) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - var res = markInterval(d, digits, interval, mark, decMark); - res = before ? (/^-/.test(res) ? '-' + currency + res.replace(/^-/, '') : currency + res) : - res + currency; - return res; -}; - -DTWidget.formatString = function(data, prefix, suffix) { - var d = data; - if (d === null) return ''; - return prefix + d + suffix; -}; - -DTWidget.formatPercentage = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d * 100, digits, interval, mark, decMark) + '%'; -}; - -DTWidget.formatRound = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d, digits, interval, mark, decMark); -}; - -DTWidget.formatSignif = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d, digits, interval, mark, decMark, true); -}; - -DTWidget.formatDate = function(data, method, params) { - var d = data; - if (d === null) return ''; - // (new Date('2015-10-28')).toDateString() may return 2015-10-27 because the - // actual time created could be like 'Tue Oct 27 2015 19:00:00 GMT-0500 (CDT)', - // i.e. the date-only string is treated as UTC time instead of local time - if ((method === 'toDateString' || method === 'toLocaleDateString') && /^\d{4,}\D\d{2}\D\d{2}$/.test(d)) { - d = d.split(/\D/); - d = new Date(d[0], d[1] - 1, d[2]); - } else { - d = new Date(d); - } - return d[method].apply(d, params); -}; - -window.DTWidget = DTWidget; - -var transposeArray2D = function(a) { - return a.length === 0 ? a : HTMLWidgets.transposeArray2D(a); -}; - -var crosstalkPluginsInstalled = false; - -function maybeInstallCrosstalkPlugins() { - if (crosstalkPluginsInstalled) - return; - crosstalkPluginsInstalled = true; - - $.fn.dataTable.ext.afnFiltering.push( - function(oSettings, aData, iDataIndex) { - var ctfilter = oSettings.nTable.ctfilter; - if (ctfilter && !ctfilter[iDataIndex]) - return false; - - var ctselect = oSettings.nTable.ctselect; - if (ctselect && !ctselect[iDataIndex]) - return false; - - return true; - } - ); -} - -HTMLWidgets.widget({ - name: "datatables", - type: "output", - renderOnNullValue: true, - initialize: function(el, width, height) { - $(el).html(' '); - return { - data: null, - ctfilterHandle: new crosstalk.FilterHandle(), - ctfilterSubscription: null, - ctselectHandle: new crosstalk.SelectionHandle(), - ctselectSubscription: null - }; - }, - renderValue: function(el, data, instance) { - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - instance.data = data; - return; - } - instance.data = null; - var $el = $(el); - $el.empty(); - - if (data === null) { - $el.append(' '); - // clear previous Shiny inputs (if any) - for (var i in instance.clearInputs) instance.clearInputs[i](); - instance.clearInputs = {}; - return; - } - - var crosstalkOptions = data.crosstalkOptions; - if (!crosstalkOptions) crosstalkOptions = { - 'key': null, 'group': null - }; - if (crosstalkOptions.group) { - maybeInstallCrosstalkPlugins(); - instance.ctfilterHandle.setGroup(crosstalkOptions.group); - instance.ctselectHandle.setGroup(crosstalkOptions.group); - } - - // If we are in a flexdashboard scroll layout then we: - // (a) Always want to use pagination (otherwise we'll have - // a "double scroll bar" effect on the phone); and - // (b) Never want to fill the container (we want the pagination - // level to determine the size of the container) - if (window.FlexDashboard && !window.FlexDashboard.isFillPage()) { - data.options.paging = true; - data.fillContainer = false; - } - - // if we are in the viewer then we always want to fillContainer and - // and autoHideNavigation (unless the user has explicitly set these) - if (window.HTMLWidgets.viewerMode) { - if (!data.hasOwnProperty("fillContainer")) - data.fillContainer = true; - if (!data.hasOwnProperty("autoHideNavigation")) - data.autoHideNavigation = true; - } - - // propagate fillContainer to instance (so we have it in resize) - instance.fillContainer = data.fillContainer; - - var cells = data.data; - - if (cells instanceof Array) cells = transposeArray2D(cells); - - $el.append(data.container); - var $table = $el.find('table'); - if (data.class) $table.addClass(data.class); - if (data.caption) $table.prepend(data.caption); - - if (!data.selection) data.selection = { - mode: 'none', selected: null, target: 'row', selectable: null - }; - if (HTMLWidgets.shinyMode && data.selection.mode !== 'none' && - data.selection.target === 'row+column') { - if ($table.children('tfoot').length === 0) { - $table.append($('')); - $table.find('thead tr').clone().appendTo($table.find('tfoot')); - } - } - - // column filters - var filterRow; - switch (data.filter) { - case 'top': - $table.children('thead').append(data.filterHTML); - filterRow = $table.find('thead tr:last td'); - break; - case 'bottom': - if ($table.children('tfoot').length === 0) { - $table.append($('')); - } - $table.children('tfoot').prepend(data.filterHTML); - filterRow = $table.find('tfoot tr:first td'); - break; - } - - var options = { searchDelay: 1000 }; - if (cells !== null) $.extend(options, { - data: cells - }); - - // options for fillContainer - var bootstrapActive = typeof($.fn.popover) != 'undefined'; - if (instance.fillContainer) { - - // force scrollX/scrollY and turn off autoWidth - options.scrollX = true; - options.scrollY = "100px"; // can be any value, we'll adjust below - - // if we aren't paginating then move around the info/filter controls - // to save space at the bottom and rephrase the info callback - if (data.options.paging === false) { - - // we know how to do this cleanly for bootstrap, not so much - // for other themes/layouts - if (bootstrapActive) { - options.dom = "<'row'<'col-sm-4'i><'col-sm-8'f>>" + - "<'row'<'col-sm-12'tr>>"; - } - - options.fnInfoCallback = function(oSettings, iStart, iEnd, - iMax, iTotal, sPre) { - return Number(iTotal).toLocaleString() + " records"; - }; - } - } - - // auto hide navigation if requested - // Note, this only works on client-side processing mode as on server-side, - // cells (data.data) is null; In addition, we require the pageLength option - // being provided explicitly to enable this. Despite we may be able to deduce - // the default value of pageLength, it may complicate things so we'd rather - // put this responsiblity to users and warn them on the R side. - if (data.autoHideNavigation === true && data.options.paging !== false) { - // strip all nav if length >= cells - if ((cells instanceof Array) && data.options.pageLength >= cells.length) - options.dom = bootstrapActive ? "<'row'<'col-sm-12'tr>>" : "t"; - // alternatively lean things out for flexdashboard mobile portrait - else if (bootstrapActive && window.FlexDashboard && window.FlexDashboard.isMobilePhone()) - options.dom = "<'row'<'col-sm-12'f>>" + - "<'row'<'col-sm-12'tr>>" + - "<'row'<'col-sm-12'p>>"; - } - - $.extend(true, options, data.options || {}); - - var searchCols = options.searchCols; - if (searchCols) { - searchCols = searchCols.map(function(x) { - return x === null ? '' : x.search; - }); - // FIXME: this means I don't respect the escapeRegex setting - delete options.searchCols; - } - - // server-side processing? - var server = options.serverSide === true; - - // use the dataSrc function to pre-process JSON data returned from R - var DT_rows_all = [], DT_rows_current = []; - if (server && HTMLWidgets.shinyMode && typeof options.ajax === 'object' && - /^session\/[\da-z]+\/dataobj/.test(options.ajax.url) && !options.ajax.dataSrc) { - options.ajax.dataSrc = function(json) { - DT_rows_all = $.makeArray(json.DT_rows_all); - DT_rows_current = $.makeArray(json.DT_rows_current); - var data = json.data; - if (!colReorderEnabled()) return data; - var table = $table.DataTable(), order = table.colReorder.order(), flag = true, i, j, row; - for (i = 0; i < order.length; ++i) if (order[i] !== i) flag = false; - if (flag) return data; - for (i = 0; i < data.length; ++i) { - row = data[i].slice(); - for (j = 0; j < order.length; ++j) data[i][j] = row[order[j]]; - } - return data; - }; - } - - var thiz = this; - if (instance.fillContainer) $table.on('init.dt', function(e) { - thiz.fillAvailableHeight(el, $(el).innerHeight()); - }); - // If the page contains serveral datatables and one of which enables colReorder, - // the table.colReorder.order() function will exist but throws error when called. - // So it seems like the only way to know if colReorder is enabled or not is to - // check the options. - var colReorderEnabled = function() { return "colReorder" in options; }; - var table = $table.DataTable(options); - $el.data('datatable', table); - - // Unregister previous Crosstalk event subscriptions, if they exist - if (instance.ctfilterSubscription) { - instance.ctfilterHandle.off("change", instance.ctfilterSubscription); - instance.ctfilterSubscription = null; - } - if (instance.ctselectSubscription) { - instance.ctselectHandle.off("change", instance.ctselectSubscription); - instance.ctselectSubscription = null; - } - - if (!crosstalkOptions.group) { - $table[0].ctfilter = null; - $table[0].ctselect = null; - } else { - var key = crosstalkOptions.key; - function keysToMatches(keys) { - if (!keys) { - return null; - } else { - var selectedKeys = {}; - for (var i = 0; i < keys.length; i++) { - selectedKeys[keys[i]] = true; - } - var matches = {}; - for (var j = 0; j < key.length; j++) { - if (selectedKeys[key[j]]) - matches[j] = true; - } - return matches; - } - } - - function applyCrosstalkFilter(e) { - $table[0].ctfilter = keysToMatches(e.value); - table.draw(); - } - instance.ctfilterSubscription = instance.ctfilterHandle.on("change", applyCrosstalkFilter); - applyCrosstalkFilter({value: instance.ctfilterHandle.filteredKeys}); - - function applyCrosstalkSelection(e) { - if (e.sender !== instance.ctselectHandle) { - table - .rows('.' + selClass, {search: 'applied'}) - .nodes() - .to$() - .removeClass(selClass); - if (selectedRows) - changeInput('rows_selected', selectedRows(), void 0, true); - } - - if (e.sender !== instance.ctselectHandle && e.value && e.value.length) { - var matches = keysToMatches(e.value); - - // persistent selection with plotly (& leaflet) - var ctOpts = crosstalk.var("plotlyCrosstalkOpts").get() || {}; - if (ctOpts.persistent === true) { - var matches = $.extend(matches, $table[0].ctselect); - } - - $table[0].ctselect = matches; - table.draw(); - } else { - if ($table[0].ctselect) { - $table[0].ctselect = null; - table.draw(); - } - } - } - instance.ctselectSubscription = instance.ctselectHandle.on("change", applyCrosstalkSelection); - // TODO: This next line doesn't seem to work when renderDataTable is used - applyCrosstalkSelection({value: instance.ctselectHandle.value}); - } - - var inArray = function(val, array) { - return $.inArray(val, $.makeArray(array)) > -1; - }; - - // encode + to %2B when searching in the table on server side, because - // shiny::parseQueryString() treats + as spaces, and DataTables does not - // encode + to %2B (or % to %25) when sending the request - var encode_plus = function(x) { - return server ? x.replace(/%/g, '%25').replace(/\+/g, '%2B') : x; - }; - - // search the i-th column - var searchColumn = function(i, value) { - var regex = false, ci = true; - if (options.search) { - regex = options.search.regex, - ci = options.search.caseInsensitive !== false; - } - return table.column(i).search(encode_plus(value), regex, !regex, ci); - }; - - if (data.filter !== 'none') { - - filterRow.each(function(i, td) { - - var $td = $(td), type = $td.data('type'), filter; - var $input = $td.children('div').first().children('input'); - $input.prop('disabled', !table.settings()[0].aoColumns[i].bSearchable || type === 'disabled'); - $input.on('input blur', function() { - $input.next('span').toggle(Boolean($input.val())); - }); - // Bootstrap sets pointer-events to none and we won't be able to click - // the clear button - $input.next('span').css('pointer-events', 'auto').hide().click(function() { - $(this).hide().prev('input').val('').trigger('input').focus(); - }); - var searchCol; // search string for this column - if (searchCols && searchCols[i]) { - searchCol = searchCols[i]; - $input.val(searchCol).trigger('input'); - } - var $x = $td.children('div').last(); - - // remove the overflow: hidden attribute of the scrollHead - // (otherwise the scrolling table body obscures the filters) - // The workaround and the discussion from - // https://github.com/rstudio/DT/issues/554#issuecomment-518007347 - // Otherwise the filter selection will not be anchored to the values - // when the columns number is many and scrollX is enabled. - var scrollHead = $(el).find('.dataTables_scrollHead,.dataTables_scrollFoot'); - var cssOverflowHead = scrollHead.css('overflow'); - var scrollBody = $(el).find('.dataTables_scrollBody'); - var cssOverflowBody = scrollBody.css('overflow'); - var scrollTable = $(el).find('.dataTables_scroll'); - var cssOverflowTable = scrollTable.css('overflow'); - if (cssOverflowHead === 'hidden') { - $x.on('show hide', function(e) { - if (e.type === 'show') { - scrollHead.css('overflow', 'visible'); - scrollBody.css('overflow', 'visible'); - scrollTable.css('overflow-x', 'scroll'); - } else { - scrollHead.css('overflow', cssOverflowHead); - scrollBody.css('overflow', cssOverflowBody); - scrollTable.css('overflow-x', cssOverflowTable); - } - }); - $x.css('z-index', 25); - } - - if (inArray(type, ['factor', 'logical'])) { - $input.on({ - click: function() { - $input.parent().hide(); $x.show().trigger('show'); filter[0].selectize.focus(); - }, - input: function() { - if ($input.val() === '') filter[0].selectize.setValue([]); - } - }); - var $input2 = $x.children('select'); - filter = $input2.selectize({ - options: $input2.data('options').map(function(v, i) { - return ({text: v, value: v}); - }), - plugins: ['remove_button'], - hideSelected: true, - onChange: function(value) { - if (value === null) value = []; // compatibility with jQuery 3.0 - $input.val(value.length ? JSON.stringify(value) : ''); - if (value.length) $input.trigger('input'); - $input.attr('title', $input.val()); - if (server) { - table.column(i).search(value.length ? encode_plus(JSON.stringify(value)) : '').draw(); - return; - } - // turn off filter if nothing selected - $td.data('filter', value.length > 0); - table.draw(); // redraw table, and filters will be applied - } - }); - if (searchCol) filter[0].selectize.setValue(JSON.parse(searchCol)); - filter[0].selectize.on('blur', function() { - $x.hide().trigger('hide'); $input.parent().show(); $input.trigger('blur'); - }); - filter.next('div').css('margin-bottom', 'auto'); - } else if (type === 'character') { - var fun = function() { - searchColumn(i, $input.val()).draw(); - }; - if (server) { - fun = $.fn.dataTable.util.throttle(fun, options.searchDelay); - } - $input.on('input', fun); - } else if (inArray(type, ['number', 'integer', 'date', 'time'])) { - var $x0 = $x; - $x = $x0.children('div').first(); - $x0.css({ - 'background-color': '#fff', - 'border': '1px #ddd solid', - 'border-radius': '4px', - 'padding': '20px 20px 10px 20px' - }); - var $spans = $x0.children('span').css({ - 'margin-top': '10px', - 'white-space': 'nowrap' - }); - var $span1 = $spans.first(), $span2 = $spans.last(); - var r1 = +$x.data('min'), r2 = +$x.data('max'); - // when the numbers are too small or have many decimal places, the - // slider may have numeric precision problems (#150) - var scale = Math.pow(10, Math.max(0, +$x.data('scale') || 0)); - r1 = Math.round(r1 * scale); r2 = Math.round(r2 * scale); - var scaleBack = function(x, scale) { - if (scale === 1) return x; - var d = Math.round(Math.log(scale) / Math.log(10)); - // to avoid problems like 3.423/100 -> 0.034230000000000003 - return (x / scale).toFixed(d); - }; - var slider_min = function() { - return filter.noUiSlider('options').range.min; - }; - var slider_max = function() { - return filter.noUiSlider('options').range.max; - }; - $input.on({ - focus: function() { - $x0.show().trigger('show'); - // first, make sure the slider div leaves at least 20px between - // the two (slider value) span's - $x0.width(Math.max(160, $span1.outerWidth() + $span2.outerWidth() + 20)); - // then, if the input is really wide, make the slider the same - // width as the input - if ($x0.outerWidth() < $input.outerWidth()) { - $x0.outerWidth($input.outerWidth()); - } - // make sure the slider div does not reach beyond the right margin - if ($(window).width() < $x0.offset().left + $x0.width()) { - $x0.offset({ - 'left': $input.offset().left + $input.outerWidth() - $x0.outerWidth() - }); - } - }, - blur: function() { - $x0.hide().trigger('hide'); - }, - input: function() { - if ($input.val() === '') filter.val([slider_min(), slider_max()]); - }, - change: function() { - var v = $input.val().replace(/\s/g, ''); - if (v === '') return; - v = v.split('...'); - if (v.length !== 2) { - $input.parent().addClass('has-error'); - return; - } - if (v[0] === '') v[0] = slider_min(); - if (v[1] === '') v[1] = slider_max(); - $input.parent().removeClass('has-error'); - // treat date as UTC time at midnight - var strTime = function(x) { - var s = type === 'date' ? 'T00:00:00Z' : ''; - var t = new Date(x + s).getTime(); - // add 10 minutes to date since it does not hurt the date, and - // it helps avoid the tricky floating point arithmetic problems, - // e.g. sometimes the date may be a few milliseconds earlier - // than the midnight due to precision problems in noUiSlider - return type === 'date' ? t + 3600000 : t; - }; - if (inArray(type, ['date', 'time'])) { - v[0] = strTime(v[0]); - v[1] = strTime(v[1]); - } - if (v[0] != slider_min()) v[0] *= scale; - if (v[1] != slider_max()) v[1] *= scale; - filter.val(v); - } - }); - var formatDate = function(d, isoFmt) { - d = scaleBack(d, scale); - if (type === 'number') return d; - if (type === 'integer') return parseInt(d); - var x = new Date(+d); - var fmt = ('filterDateFmt' in data) ? data.filterDateFmt[i] : undefined; - if (fmt !== undefined && isoFmt === false) return x[fmt.method].apply(x, fmt.params); - if (type === 'date') { - var pad0 = function(x) { - return ('0' + x).substr(-2, 2); - }; - return x.getUTCFullYear() + '-' + pad0(1 + x.getUTCMonth()) - + '-' + pad0(x.getUTCDate()); - } else { - return x.toISOString(); - } - }; - var opts = type === 'date' ? { step: 60 * 60 * 1000 } : - type === 'integer' ? { step: 1 } : {}; - filter = $x.noUiSlider($.extend({ - start: [r1, r2], - range: {min: r1, max: r2}, - connect: true - }, opts)); - if (scale > 1) (function() { - var t1 = r1, t2 = r2; - var val = filter.val(); - while (val[0] > r1 || val[1] < r2) { - if (val[0] > r1) { - t1 -= val[0] - r1; - } - if (val[1] < r2) { - t2 += r2 - val[1]; - } - filter = $x.noUiSlider($.extend({ - start: [t1, t2], - range: {min: t1, max: t2}, - connect: true - }, opts), true); - val = filter.val(); - } - r1 = t1; r2 = t2; - })(); - var updateSliderText = function(v1, v2) { - $span1.text(formatDate(v1, false)); $span2.text(formatDate(v2, false)); - }; - updateSliderText(r1, r2); - var updateSlider = function(e) { - var val = filter.val(); - // turn off filter if in full range - $td.data('filter', val[0] > slider_min() || val[1] < slider_max()); - var v1 = formatDate(val[0]), v2 = formatDate(val[1]), ival; - if ($td.data('filter')) { - ival = v1 + ' ... ' + v2; - $input.attr('title', ival).val(ival).trigger('input'); - } else { - $input.attr('title', '').val(''); - } - updateSliderText(val[0], val[1]); - if (e.type === 'slide') return; // no searching when sliding only - if (server) { - table.column(i).search($td.data('filter') ? ival : '').draw(); - return; - } - table.draw(); - }; - filter.on({ - set: updateSlider, - slide: updateSlider - }); - } - - // server-side processing will be handled by R (or whatever server - // language you use); the following code is only needed for client-side - // processing - if (server) { - // if a search string has been pre-set, search now - if (searchCol) searchColumn(i, searchCol).draw(); - return; - } - - var customFilter = function(settings, data, dataIndex) { - // there is no way to attach a search function to a specific table, - // and we need to make sure a global search function is not applied to - // all tables (i.e. a range filter in a previous table should not be - // applied to the current table); we use the settings object to - // determine if we want to perform searching on the current table, - // since settings.sTableId will be different to different tables - if (table.settings()[0] !== settings) return true; - // no filter on this column or no need to filter this column - if (typeof filter === 'undefined' || !$td.data('filter')) return true; - - var r = filter.val(), v, r0, r1; - var i_data = function(i) { - if (!colReorderEnabled()) return i; - var order = table.colReorder.order(), k; - for (k = 0; k < order.length; ++k) if (order[k] === i) return k; - return i; // in theory it will never be here... - } - v = data[i_data(i)]; - if (type === 'number' || type === 'integer') { - v = parseFloat(v); - // how to handle NaN? currently exclude these rows - if (isNaN(v)) return(false); - r0 = parseFloat(scaleBack(r[0], scale)) - r1 = parseFloat(scaleBack(r[1], scale)); - if (v >= r0 && v <= r1) return true; - } else if (type === 'date' || type === 'time') { - v = new Date(v); - r0 = new Date(r[0] / scale); r1 = new Date(r[1] / scale); - if (v >= r0 && v <= r1) return true; - } else if (type === 'factor') { - if (r.length === 0 || inArray(v, r)) return true; - } else if (type === 'logical') { - if (r.length === 0) return true; - if (inArray(v === '' ? 'na' : v, r)) return true; - } - return false; - }; - - $.fn.dataTable.ext.search.push(customFilter); - - // search for the preset search strings if it is non-empty - if (searchCol) { - if (inArray(type, ['factor', 'logical'])) { - filter[0].selectize.setValue(JSON.parse(searchCol)); - } else if (type === 'character') { - $input.trigger('input'); - } else if (inArray(type, ['number', 'integer', 'date', 'time'])) { - $input.trigger('change'); - } - } - - }); - - } - - // highlight search keywords - var highlight = function() { - var body = $(table.table().body()); - // removing the old highlighting first - body.unhighlight(); - - // don't highlight the "not found" row, so we get the rows using the api - if (table.rows({ filter: 'applied' }).data().length === 0) return; - // highlight global search keywords - body.highlight($.trim(table.search()).split(/\s+/)); - // then highlight keywords from individual column filters - if (filterRow) filterRow.each(function(i, td) { - var $td = $(td), type = $td.data('type'); - if (type !== 'character') return; - var $input = $td.children('div').first().children('input'); - var column = table.column(i).nodes().to$(), - val = $.trim($input.val()); - if (type !== 'character' || val === '') return; - column.highlight(val.split(/\s+/)); - }); - }; - - if (options.searchHighlight) { - table - .on('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth', highlight) - .on('destroy', function() { - // remove event handler - table.off('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth'); - }); - - // Set the option for escaping regex characters in our search string. This will be used - // for all future matching. - jQuery.fn.highlight.options.escapeRegex = (!options.search || !options.search.regex); - - // initial highlight for state saved conditions and initial states - highlight(); - } - - // run the callback function on the table instance - if (typeof data.callback === 'function') data.callback(table); - - // double click to edit the cell, row, column, or all cells - if (data.editable) table.on('dblclick.dt', 'tbody td', function(e) { - // only bring up the editor when the cell itself is dbclicked, and ignore - // other dbclick events bubbled up (e.g. from the ) - if (e.target !== this) return; - var target = [], immediate = false; - switch (data.editable.target) { - case 'cell': - target = [this]; - immediate = true; // edit will take effect immediately - break; - case 'row': - target = table.cells(table.cell(this).index().row, '*').nodes(); - break; - case 'column': - target = table.cells('*', table.cell(this).index().column).nodes(); - break; - case 'all': - target = table.cells().nodes(); - break; - default: - throw 'The editable parameter must be "cell", "row", "column", or "all"'; - } - var disableCols = data.editable.disable ? data.editable.disable.columns : null; - for (var i = 0; i < target.length; i++) { - (function(cell, current) { - var $cell = $(cell), html = $cell.html(); - var _cell = table.cell(cell), value = _cell.data(); - var $input = $(''), changed = false; - if (!immediate) { - $cell.data('input', $input).data('html', html); - $input.attr('title', 'Hit Ctrl+Enter to finish editing, or Esc to cancel'); - } - $input.val(value); - if (inArray(_cell.index().column, disableCols)) { - $input.attr('readonly', '').css('filter', 'invert(25%)'); - } - $cell.empty().append($input); - if (cell === current) $input.focus(); - $input.css('width', '100%'); - - if (immediate) $input.on('change', function() { - changed = true; - var valueNew = $input.val(); - if (valueNew != value) { - _cell.data(valueNew); - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', [cellInfo(cell)], 'DT.cellInfo', null, {priority: "event"}); - } - // for server-side processing, users have to call replaceData() to update the table - if (!server) table.draw(false); - } else { - $cell.html(html); - } - $input.remove(); - }).on('blur', function() { - if (!changed) $input.trigger('change'); - }).on('keyup', function(e) { - // hit Escape to cancel editing - if (e.keyCode === 27) $input.trigger('blur'); - }); - - // bulk edit (row, column, or all) - if (!immediate) $input.on('keyup', function(e) { - var removeInput = function($cell, restore) { - $cell.data('input').remove(); - if (restore) $cell.html($cell.data('html')); - } - if (e.keyCode === 27) { - for (var i = 0; i < target.length; i++) { - removeInput($(target[i]), true); - } - } else if (e.keyCode === 13 && e.ctrlKey) { - // Ctrl + Enter - var cell, $cell, _cell, cellData = []; - for (var i = 0; i < target.length; i++) { - cell = target[i]; $cell = $(cell); _cell = table.cell(cell); - _cell.data($cell.data('input').val()); - HTMLWidgets.shinyMode && cellData.push(cellInfo(cell)); - removeInput($cell, false); - } - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', cellData, 'DT.cellInfo', null, {priority: "event"}); - } - if (!server) table.draw(false); - } - }); - })(target[i], this); - } - }); - - // interaction with shiny - if (!HTMLWidgets.shinyMode && !crosstalkOptions.group) return; - - var methods = {}; - var shinyData = {}; - - methods.updateCaption = function(caption) { - if (!caption) return; - $table.children('caption').replaceWith(caption); - } - - // register clear functions to remove input values when the table is removed - instance.clearInputs = {}; - - var changeInput = function(id, value, type, noCrosstalk, opts) { - var event = id; - id = el.id + '_' + id; - if (type) id = id + ':' + type; - // do not update if the new value is the same as old value - if (event !== 'cell_edit' && !/_clicked$/.test(event) && shinyData.hasOwnProperty(id) && shinyData[id] === JSON.stringify(value)) - return; - shinyData[id] = JSON.stringify(value); - if (HTMLWidgets.shinyMode && Shiny.setInputValue) { - Shiny.setInputValue(id, value, opts); - if (!instance.clearInputs[id]) instance.clearInputs[id] = function() { - Shiny.setInputValue(id, null); - } - } - - // HACK - if (event === "rows_selected" && !noCrosstalk) { - if (crosstalkOptions.group) { - var keys = crosstalkOptions.key; - var selectedKeys = null; - if (value) { - selectedKeys = []; - for (var i = 0; i < value.length; i++) { - // The value array's contents use 1-based row numbers, so we must - // convert to 0-based before indexing into the keys array. - selectedKeys.push(keys[value[i] - 1]); - } - } - instance.ctselectHandle.set(selectedKeys); - } - } - }; - - var addOne = function(x) { - return x.map(function(i) { return 1 + i; }); - }; - - var unique = function(x) { - var ux = []; - $.each(x, function(i, el){ - if ($.inArray(el, ux) === -1) ux.push(el); - }); - return ux; - } - - // change the row index of a cell - var tweakCellIndex = function(cell) { - var info = cell.index(); - // some cell may not be valid. e.g, #759 - // when using the RowGroup extension, datatables will - // generate the row label and the cells are not part of - // the data thus contain no row/col info - if (info === undefined) - return {row: null, col: null}; - if (server) { - info.row = DT_rows_current[info.row]; - } else { - info.row += 1; - } - return {row: info.row, col: info.column}; - } - - var cleanSelectedValues = function() { - changeInput('rows_selected', []); - changeInput('columns_selected', []); - changeInput('cells_selected', transposeArray2D([]), 'shiny.matrix'); - } - // #828 we should clean the selection on the server-side when the table reloads - cleanSelectedValues(); - - // a flag to indicates if select extension is initialized or not - var flagSelectExt = table.settings()[0]._select !== undefined; - // the Select extension should only be used in the client mode and - // when the selection.mode is set to none - if (data.selection.mode === 'none' && !server && flagSelectExt) { - var updateRowsSelected = function() { - var rows = table.rows({selected: true}); - var selected = []; - $.each(rows.indexes().toArray(), function(i, v) { - selected.push(v + 1); - }); - changeInput('rows_selected', selected); - } - var updateColsSelected = function() { - var columns = table.columns({selected: true}); - changeInput('columns_selected', columns.indexes().toArray()); - } - var updateCellsSelected = function() { - var cells = table.cells({selected: true}); - var selected = []; - cells.every(function() { - var row = this.index().row; - var col = this.index().column; - selected = selected.concat([[row + 1, col]]); - }); - changeInput('cells_selected', transposeArray2D(selected), 'shiny.matrix'); - } - table.on('select deselect', function(e, dt, type, indexes) { - updateRowsSelected(); - updateColsSelected(); - updateCellsSelected(); - }) - } - - var selMode = data.selection.mode, selTarget = data.selection.target; - var selDisable = data.selection.selectable === false; - if (inArray(selMode, ['single', 'multiple'])) { - var selClass = inArray(data.style, ['bootstrap', 'bootstrap4']) ? 'active' : 'selected'; - // selected1: row indices; selected2: column indices - var initSel = function(x) { - if (x === null || typeof x === 'boolean' || selTarget === 'cell') { - return {rows: [], cols: []}; - } else if (selTarget === 'row') { - return {rows: $.makeArray(x), cols: []}; - } else if (selTarget === 'column') { - return {rows: [], cols: $.makeArray(x)}; - } else if (selTarget === 'row+column') { - return {rows: $.makeArray(x.rows), cols: $.makeArray(x.cols)}; - } - } - var selected = data.selection.selected; - var selected1 = initSel(selected).rows, selected2 = initSel(selected).cols; - // selectable should contain either all positive or all non-positive values, not both - // positive values indicate "selectable" while non-positive values means "nonselectable" - // the assertion is performed on R side. (only column indicides could be zero which indicates - // the row name) - var selectable = data.selection.selectable; - var selectable1 = initSel(selectable).rows, selectable2 = initSel(selectable).cols; - - // After users reorder the rows or filter the table, we cannot use the table index - // directly. Instead, we need this function to find out the rows between the two clicks. - // If user filter the table again between the start click and the end click, the behavior - // would be undefined, but it should not be a problem. - var shiftSelRowsIndex = function(start, end) { - var indexes = server ? DT_rows_all : table.rows({ search: 'applied' }).indexes().toArray(); - start = indexes.indexOf(start); end = indexes.indexOf(end); - // if start is larger than end, we need to swap - if (start > end) { - var tmp = end; end = start; start = tmp; - } - return indexes.slice(start, end + 1); - } - - var serverRowIndex = function(clientRowIndex) { - return server ? DT_rows_current[clientRowIndex] : clientRowIndex + 1; - } - - // row, column, or cell selection - var lastClickedRow; - if (inArray(selTarget, ['row', 'row+column'])) { - // Get the current selected rows. It will also - // update the selected1's value based on the current row selection state - // Note we can't put this function inside selectRows() directly, - // the reason is method.selectRows() will override selected1's value but this - // function will add rows to selected1 (keep the existing selection), which is - // inconsistent with column and cell selection. - var selectedRows = function() { - var rows = table.rows('.' + selClass); - var idx = rows.indexes().toArray(); - if (!server) { - selected1 = addOne(idx); - return selected1; - } - idx = idx.map(function(i) { - return DT_rows_current[i]; - }); - selected1 = selMode === 'multiple' ? unique(selected1.concat(idx)) : idx; - return selected1; - } - // Change selected1's value based on selectable1, then refresh the row state - var onlyKeepSelectableRows = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected1 = []; - return; - } - if (selectable1.length === 0) return; - var nonselectable = selectable1[0] <= 0; - if (nonselectable) { - // should make selectable1 positive - selected1 = $(selected1).not(selectable1.map(function(i) { return -i; })).get(); - } else { - selected1 = $(selected1).filter(selectable1).get(); - } - } - // Change selected1's value based on selectable1, then - // refresh the row selection state according to values in selected1 - var selectRows = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableRows(); - table.$('tr.' + selClass).removeClass(selClass); - if (selected1.length === 0) return; - if (server) { - table.rows({page: 'current'}).every(function() { - if (inArray(DT_rows_current[this.index()], selected1)) { - $(this.node()).addClass(selClass); - } - }); - } else { - var selected0 = selected1.map(function(i) { return i - 1; }); - $(table.rows(selected0).nodes()).addClass(selClass); - } - } - table.on('mousedown.dt', 'tbody tr', function(e) { - var $this = $(this), thisRow = table.row(this); - if (selMode === 'multiple') { - if (e.shiftKey && lastClickedRow !== undefined) { - // select or de-select depends on the last clicked row's status - var flagSel = !$this.hasClass(selClass); - var crtClickedRow = serverRowIndex(thisRow.index()); - if (server) { - var rowsIndex = shiftSelRowsIndex(lastClickedRow, crtClickedRow); - // update current page's selClass - rowsIndex.map(function(i) { - var rowIndex = DT_rows_current.indexOf(i); - if (rowIndex >= 0) { - var row = table.row(rowIndex).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - } - }); - // update selected1 - if (flagSel) { - selected1 = unique(selected1.concat(rowsIndex)); - } else { - selected1 = selected1.filter(function(index) { - return !inArray(index, rowsIndex); - }); - } - } else { - // js starts from 0 - shiftSelRowsIndex(lastClickedRow - 1, crtClickedRow - 1).map(function(value) { - var row = table.row(value).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - }); - } - e.preventDefault(); - } else { - $this.toggleClass(selClass); - } - } else { - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - } else { - table.$('tr.' + selClass).removeClass(selClass); - $this.addClass(selClass); - } - } - if (server && !$this.hasClass(selClass)) { - var id = DT_rows_current[thisRow.index()]; - // remove id from selected1 since its class .selected has been removed - if (inArray(id, selected1)) selected1.splice($.inArray(id, selected1), 1); - } - selectedRows(); // update selected1's value based on selClass - selectRows(false); // only keep the selectable rows - changeInput('rows_selected', selected1); - changeInput('row_last_clicked', serverRowIndex(thisRow.index()), null, null, {priority: 'event'}); - lastClickedRow = serverRowIndex(thisRow.index()); - }); - selectRows(false); // in case users have specified pre-selected rows - // restore selected rows after the table is redrawn (e.g. sort/search/page); - // client-side tables will preserve the selections automatically; for - // server-side tables, we have to *real* row indices are in `selected1` - changeInput('rows_selected', selected1); - if (server) table.on('draw.dt', function(e) { selectRows(false); }); - methods.selectRows = function(selected, ignoreSelectable) { - selected1 = $.makeArray(selected); - selectRows(ignoreSelectable); - changeInput('rows_selected', selected1); - } - } - - if (inArray(selTarget, ['column', 'row+column'])) { - if (selTarget === 'row+column') { - $(table.columns().footer()).css('cursor', 'pointer'); - } - // update selected2's value based on selectable2 - var onlyKeepSelectableCols = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected2 = []; - return; - } - if (selectable2.length === 0) return; - var nonselectable = selectable2[0] <= 0; - if (nonselectable) { - // need to make selectable2 positive - selected2 = $(selected2).not(selectable2.map(function(i) { return -i; })).get(); - } else { - selected2 = $(selected2).filter(selectable2).get(); - } - } - // update selected2 and then - // refresh the col selection state according to values in selected2 - var selectCols = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCols(); - // if selected2 is not a valide index (e.g., larger than the column number) - // table.columns(selected2) will fail and result in a blank table - // this is different from the table.rows(), where the out-of-range indexes - // doesn't affect at all - selected2 = $(selected2).filter(table.columns().indexes()).get(); - table.columns().nodes().flatten().to$().removeClass(selClass); - if (selected2.length > 0) - table.columns(selected2).nodes().flatten().to$().addClass(selClass); - } - var callback = function() { - var colIdx = selTarget === 'column' ? table.cell(this).index().column : - $.inArray(this, table.columns().footer()), - thisCol = $(table.column(colIdx).nodes()); - if (colIdx === -1) return; - if (thisCol.hasClass(selClass)) { - thisCol.removeClass(selClass); - selected2.splice($.inArray(colIdx, selected2), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - thisCol.addClass(selClass); - selected2 = selMode === 'single' ? [colIdx] : unique(selected2.concat([colIdx])); - } - selectCols(false); // update selected2 based on selectable - changeInput('columns_selected', selected2); - } - if (selTarget === 'column') { - $(table.table().body()).on('click.dt', 'td', callback); - } else { - $(table.table().footer()).on('click.dt', 'tr th', callback); - } - selectCols(false); // in case users have specified pre-selected columns - changeInput('columns_selected', selected2); - if (server) table.on('draw.dt', function(e) { selectCols(false); }); - methods.selectColumns = function(selected, ignoreSelectable) { - selected2 = $.makeArray(selected); - selectCols(ignoreSelectable); - changeInput('columns_selected', selected2); - } - } - - if (selTarget === 'cell') { - var selected3 = [], selectable3 = []; - if (selected !== null) selected3 = selected; - if (selectable !== null && typeof selectable !== 'boolean') selectable3 = selectable; - var findIndex = function(ij, sel) { - for (var i = 0; i < sel.length; i++) { - if (ij[0] === sel[i][0] && ij[1] === sel[i][1]) return i; - } - return -1; - } - // Change selected3's value based on selectable3, then refresh the cell state - var onlyKeepSelectableCells = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected3 = []; - return; - } - if (selectable3.length === 0) return; - var nonselectable = selectable3[0][0] <= 0; - var out = []; - if (nonselectable) { - selected3.map(function(ij) { - // should make selectable3 positive - if (findIndex([-ij[0], -ij[1]], selectable3) === -1) { out.push(ij); } - }); - } else { - selected3.map(function(ij) { - if (findIndex(ij, selectable3) > -1) { out.push(ij); } - }); - } - selected3 = out; - } - // Change selected3's value based on selectable3, then - // refresh the cell selection state according to values in selected3 - var selectCells = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCells(); - table.$('td.' + selClass).removeClass(selClass); - if (selected3.length === 0) return; - if (server) { - table.cells({page: 'current'}).every(function() { - var info = tweakCellIndex(this); - if (findIndex([info.row, info.col], selected3) > -1) - $(this.node()).addClass(selClass); - }); - } else { - selected3.map(function(ij) { - $(table.cell(ij[0] - 1, ij[1]).node()).addClass(selClass); - }); - } - }; - table.on('click.dt', 'tbody td', function() { - var $this = $(this), info = tweakCellIndex(table.cell(this)); - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - selected3.splice(findIndex([info.row, info.col], selected3), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - $this.addClass(selClass); - selected3 = selMode === 'single' ? [[info.row, info.col]] : - unique(selected3.concat([[info.row, info.col]])); - } - selectCells(false); // must call this to update selected3 based on selectable3 - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - }); - selectCells(false); // in case users have specified pre-selected columns - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - - if (server) table.on('draw.dt', function(e) { selectCells(false); }); - methods.selectCells = function(selected, ignoreSelectable) { - selected3 = selected ? selected : []; - selectCells(ignoreSelectable); - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - } - } - } - - // expose some table info to Shiny - var updateTableInfo = function(e, settings) { - // TODO: is anyone interested in the page info? - // changeInput('page_info', table.page.info()); - var updateRowInfo = function(id, modifier) { - var idx; - if (server) { - idx = modifier.page === 'current' ? DT_rows_current : DT_rows_all; - } else { - var rows = table.rows($.extend({ - search: 'applied', - page: 'all' - }, modifier)); - idx = addOne(rows.indexes().toArray()); - } - changeInput('rows' + '_' + id, idx); - }; - updateRowInfo('current', {page: 'current'}); - updateRowInfo('all', {}); - } - table.on('draw.dt', updateTableInfo); - updateTableInfo(); - - // state info - table.on('draw.dt column-visibility.dt', function() { - changeInput('state', table.state()); - }); - changeInput('state', table.state()); - - // search info - var updateSearchInfo = function() { - changeInput('search', table.search()); - if (filterRow) changeInput('search_columns', filterRow.toArray().map(function(td) { - return $(td).find('input').first().val(); - })); - } - table.on('draw.dt', updateSearchInfo); - updateSearchInfo(); - - var cellInfo = function(thiz) { - var info = tweakCellIndex(table.cell(thiz)); - info.value = table.cell(thiz).data(); - return info; - } - // the current cell clicked on - table.on('click.dt', 'tbody td', function() { - changeInput('cell_clicked', cellInfo(this), null, null, {priority: 'event'}); - }) - changeInput('cell_clicked', {}); - - // do not trigger table selection when clicking on links unless they have classes - table.on('click.dt', 'tbody td a', function(e) { - if (this.className === '') e.stopPropagation(); - }); - - methods.addRow = function(data, rowname, resetPaging) { - var n = table.columns().indexes().length, d = n - data.length; - if (d === 1) { - data = rowname.concat(data) - } else if (d !== 0) { - console.log(data); - console.log(table.columns().indexes()); - throw 'New data must be of the same length as current data (' + n + ')'; - }; - table.row.add(data).draw(resetPaging); - } - - methods.updateSearch = function(keywords) { - if (keywords.global !== null) - $(table.table().container()).find('input[type=search]').first() - .val(keywords.global).trigger('input'); - var columns = keywords.columns; - if (!filterRow || columns === null) return; - filterRow.toArray().map(function(td, i) { - var v = typeof columns === 'string' ? columns : columns[i]; - if (typeof v === 'undefined') { - console.log('The search keyword for column ' + i + ' is undefined') - return; - } - $(td).find('input').first().val(v); - searchColumn(i, v); - }); - table.draw(); - } - - methods.hideCols = function(hide, reset) { - if (reset) table.columns().visible(true, false); - table.columns(hide).visible(false); - } - - methods.showCols = function(show, reset) { - if (reset) table.columns().visible(false, false); - table.columns(show).visible(true); - } - - methods.colReorder = function(order, origOrder) { - table.colReorder.order(order, origOrder); - } - - methods.selectPage = function(page) { - if (table.page.info().pages < page || page < 1) { - throw 'Selected page is out of range'; - }; - table.page(page - 1).draw(false); - } - - methods.reloadData = function(resetPaging, clearSelection) { - // empty selections first if necessary - if (methods.selectRows && inArray('row', clearSelection)) methods.selectRows([]); - if (methods.selectColumns && inArray('column', clearSelection)) methods.selectColumns([]); - if (methods.selectCells && inArray('cell', clearSelection)) methods.selectCells([]); - table.ajax.reload(null, resetPaging); - } - - table.shinyMethods = methods; - }, - resize: function(el, width, height, instance) { - if (instance.data) this.renderValue(el, instance.data, instance); - - // dynamically adjust height if fillContainer = TRUE - if (instance.fillContainer) - this.fillAvailableHeight(el, height); - - this.adjustWidth(el); - }, - - // dynamically set the scroll body to fill available height - // (used with fillContainer = TRUE) - fillAvailableHeight: function(el, availableHeight) { - - // see how much of the table is occupied by header/footer elements - // and use that to compute a target scroll body height - var dtWrapper = $(el).find('div.dataTables_wrapper'); - var dtScrollBody = $(el).find($('div.dataTables_scrollBody')); - var framingHeight = dtWrapper.innerHeight() - dtScrollBody.innerHeight(); - var scrollBodyHeight = availableHeight - framingHeight; - - // set the height - dtScrollBody.height(scrollBodyHeight + 'px'); - }, - - // adjust the width of columns; remove the hard-coded widths on table and the - // scroll header when scrollX/Y are enabled - adjustWidth: function(el) { - var $el = $(el), table = $el.data('datatable'); - if (table) table.columns.adjust(); - $el.find('.dataTables_scrollHeadInner').css('width', '') - .children('table').css('margin-left', ''); - } -}); - - if (!HTMLWidgets.shinyMode) return; - - Shiny.addCustomMessageHandler('datatable-calls', function(data) { - var id = data.id; - var el = document.getElementById(id); - var table = el ? $(el).data('datatable') : null; - if (!table) { - console.log("Couldn't find table with id " + id); - return; - } - - var methods = table.shinyMethods, call = data.call; - if (methods[call.method]) { - methods[call.method].apply(table, call.args); - } else { - console.log("Unknown method " + call.method); - } - }); - -})(); diff --git a/docs/articles/xportr_files/datatables-binding-0.18/datatables.js b/docs/articles/xportr_files/datatables-binding-0.18/datatables.js deleted file mode 100644 index e4148252..00000000 --- a/docs/articles/xportr_files/datatables-binding-0.18/datatables.js +++ /dev/null @@ -1,1412 +0,0 @@ -(function() { - -// some helper functions: using a global object DTWidget so that it can be used -// in JS() code, e.g. datatable(options = list(foo = JS('code'))); unlike R's -// dynamic scoping, when 'code' is eval()'ed, JavaScript does not know objects -// from the "parent frame", e.g. JS('DTWidget') will not work unless it was made -// a global object -var DTWidget = {}; - -// 123456666.7890 -> 123,456,666.7890 -var markInterval = function(d, digits, interval, mark, decMark, precision) { - x = precision ? d.toPrecision(digits) : d.toFixed(digits); - if (!/^-?[\d.]+$/.test(x)) return x; - var xv = x.split('.'); - if (xv.length > 2) return x; // should have at most one decimal point - xv[0] = xv[0].replace(new RegExp('\\B(?=(\\d{' + interval + '})+(?!\\d))', 'g'), mark); - return xv.join(decMark); -}; - -DTWidget.formatCurrency = function(data, currency, digits, interval, mark, decMark, before) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - var res = markInterval(d, digits, interval, mark, decMark); - res = before ? (/^-/.test(res) ? '-' + currency + res.replace(/^-/, '') : currency + res) : - res + currency; - return res; -}; - -DTWidget.formatString = function(data, prefix, suffix) { - var d = data; - if (d === null) return ''; - return prefix + d + suffix; -}; - -DTWidget.formatPercentage = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d * 100, digits, interval, mark, decMark) + '%'; -}; - -DTWidget.formatRound = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d, digits, interval, mark, decMark); -}; - -DTWidget.formatSignif = function(data, digits, interval, mark, decMark) { - var d = parseFloat(data); - if (isNaN(d)) return ''; - return markInterval(d, digits, interval, mark, decMark, true); -}; - -DTWidget.formatDate = function(data, method, params) { - var d = data; - if (d === null) return ''; - // (new Date('2015-10-28')).toDateString() may return 2015-10-27 because the - // actual time created could be like 'Tue Oct 27 2015 19:00:00 GMT-0500 (CDT)', - // i.e. the date-only string is treated as UTC time instead of local time - if ((method === 'toDateString' || method === 'toLocaleDateString') && /^\d{4,}\D\d{2}\D\d{2}$/.test(d)) { - d = d.split(/\D/); - d = new Date(d[0], d[1] - 1, d[2]); - } else { - d = new Date(d); - } - return d[method].apply(d, params); -}; - -window.DTWidget = DTWidget; - -var transposeArray2D = function(a) { - return a.length === 0 ? a : HTMLWidgets.transposeArray2D(a); -}; - -var crosstalkPluginsInstalled = false; - -function maybeInstallCrosstalkPlugins() { - if (crosstalkPluginsInstalled) - return; - crosstalkPluginsInstalled = true; - - $.fn.dataTable.ext.afnFiltering.push( - function(oSettings, aData, iDataIndex) { - var ctfilter = oSettings.nTable.ctfilter; - if (ctfilter && !ctfilter[iDataIndex]) - return false; - - var ctselect = oSettings.nTable.ctselect; - if (ctselect && !ctselect[iDataIndex]) - return false; - - return true; - } - ); -} - -HTMLWidgets.widget({ - name: "datatables", - type: "output", - renderOnNullValue: true, - initialize: function(el, width, height) { - $(el).html(' '); - return { - data: null, - ctfilterHandle: new crosstalk.FilterHandle(), - ctfilterSubscription: null, - ctselectHandle: new crosstalk.SelectionHandle(), - ctselectSubscription: null - }; - }, - renderValue: function(el, data, instance) { - if (el.offsetWidth === 0 || el.offsetHeight === 0) { - instance.data = data; - return; - } - instance.data = null; - var $el = $(el); - $el.empty(); - - if (data === null) { - $el.append(' '); - // clear previous Shiny inputs (if any) - for (var i in instance.clearInputs) instance.clearInputs[i](); - instance.clearInputs = {}; - return; - } - - var crosstalkOptions = data.crosstalkOptions; - if (!crosstalkOptions) crosstalkOptions = { - 'key': null, 'group': null - }; - if (crosstalkOptions.group) { - maybeInstallCrosstalkPlugins(); - instance.ctfilterHandle.setGroup(crosstalkOptions.group); - instance.ctselectHandle.setGroup(crosstalkOptions.group); - } - - // if we are in the viewer then we always want to fillContainer and - // and autoHideNavigation (unless the user has explicitly set these) - if (window.HTMLWidgets.viewerMode) { - if (!data.hasOwnProperty("fillContainer")) - data.fillContainer = true; - if (!data.hasOwnProperty("autoHideNavigation")) - data.autoHideNavigation = true; - } - - // propagate fillContainer to instance (so we have it in resize) - instance.fillContainer = data.fillContainer; - - var cells = data.data; - - if (cells instanceof Array) cells = transposeArray2D(cells); - - $el.append(data.container); - var $table = $el.find('table'); - if (data.class) $table.addClass(data.class); - if (data.caption) $table.prepend(data.caption); - - if (!data.selection) data.selection = { - mode: 'none', selected: null, target: 'row', selectable: null - }; - if (HTMLWidgets.shinyMode && data.selection.mode !== 'none' && - data.selection.target === 'row+column') { - if ($table.children('tfoot').length === 0) { - $table.append($('')); - $table.find('thead tr').clone().appendTo($table.find('tfoot')); - } - } - - // column filters - var filterRow; - switch (data.filter) { - case 'top': - $table.children('thead').append(data.filterHTML); - filterRow = $table.find('thead tr:last td'); - break; - case 'bottom': - if ($table.children('tfoot').length === 0) { - $table.append($('')); - } - $table.children('tfoot').prepend(data.filterHTML); - filterRow = $table.find('tfoot tr:first td'); - break; - } - - var options = { searchDelay: 1000 }; - if (cells !== null) $.extend(options, { - data: cells - }); - - // options for fillContainer - var bootstrapActive = typeof($.fn.popover) != 'undefined'; - if (instance.fillContainer) { - - // force scrollX/scrollY and turn off autoWidth - options.scrollX = true; - options.scrollY = "100px"; // can be any value, we'll adjust below - - // if we aren't paginating then move around the info/filter controls - // to save space at the bottom and rephrase the info callback - if (data.options.paging === false) { - - // we know how to do this cleanly for bootstrap, not so much - // for other themes/layouts - if (bootstrapActive) { - options.dom = "<'row'<'col-sm-4'i><'col-sm-8'f>>" + - "<'row'<'col-sm-12'tr>>"; - } - - options.fnInfoCallback = function(oSettings, iStart, iEnd, - iMax, iTotal, sPre) { - return Number(iTotal).toLocaleString() + " records"; - }; - } - } - - // auto hide navigation if requested - // Note, this only works on client-side processing mode as on server-side, - // cells (data.data) is null; In addition, we require the pageLength option - // being provided explicitly to enable this. Despite we may be able to deduce - // the default value of pageLength, it may complicate things so we'd rather - // put this responsiblity to users and warn them on the R side. - if (data.autoHideNavigation === true && data.options.paging !== false) { - // strip all nav if length >= cells - if ((cells instanceof Array) && data.options.pageLength >= cells.length) - options.dom = bootstrapActive ? "<'row'<'col-sm-12'tr>>" : "t"; - // alternatively lean things out for flexdashboard mobile portrait - else if (bootstrapActive && window.FlexDashboard && window.FlexDashboard.isMobilePhone()) - options.dom = "<'row'<'col-sm-12'f>>" + - "<'row'<'col-sm-12'tr>>" + - "<'row'<'col-sm-12'p>>"; - } - - $.extend(true, options, data.options || {}); - - var searchCols = options.searchCols; - if (searchCols) { - searchCols = searchCols.map(function(x) { - return x === null ? '' : x.search; - }); - // FIXME: this means I don't respect the escapeRegex setting - delete options.searchCols; - } - - // server-side processing? - var server = options.serverSide === true; - - // use the dataSrc function to pre-process JSON data returned from R - var DT_rows_all = [], DT_rows_current = []; - if (server && HTMLWidgets.shinyMode && typeof options.ajax === 'object' && - /^session\/[\da-z]+\/dataobj/.test(options.ajax.url) && !options.ajax.dataSrc) { - options.ajax.dataSrc = function(json) { - DT_rows_all = $.makeArray(json.DT_rows_all); - DT_rows_current = $.makeArray(json.DT_rows_current); - var data = json.data; - if (!colReorderEnabled()) return data; - var table = $table.DataTable(), order = table.colReorder.order(), flag = true, i, j, row; - for (i = 0; i < order.length; ++i) if (order[i] !== i) flag = false; - if (flag) return data; - for (i = 0; i < data.length; ++i) { - row = data[i].slice(); - for (j = 0; j < order.length; ++j) data[i][j] = row[order[j]]; - } - return data; - }; - } - - var thiz = this; - if (instance.fillContainer) $table.on('init.dt', function(e) { - thiz.fillAvailableHeight(el, $(el).innerHeight()); - }); - // If the page contains serveral datatables and one of which enables colReorder, - // the table.colReorder.order() function will exist but throws error when called. - // So it seems like the only way to know if colReorder is enabled or not is to - // check the options. - var colReorderEnabled = function() { return "colReorder" in options; }; - var table = $table.DataTable(options); - $el.data('datatable', table); - - // Unregister previous Crosstalk event subscriptions, if they exist - if (instance.ctfilterSubscription) { - instance.ctfilterHandle.off("change", instance.ctfilterSubscription); - instance.ctfilterSubscription = null; - } - if (instance.ctselectSubscription) { - instance.ctselectHandle.off("change", instance.ctselectSubscription); - instance.ctselectSubscription = null; - } - - if (!crosstalkOptions.group) { - $table[0].ctfilter = null; - $table[0].ctselect = null; - } else { - var key = crosstalkOptions.key; - function keysToMatches(keys) { - if (!keys) { - return null; - } else { - var selectedKeys = {}; - for (var i = 0; i < keys.length; i++) { - selectedKeys[keys[i]] = true; - } - var matches = {}; - for (var j = 0; j < key.length; j++) { - if (selectedKeys[key[j]]) - matches[j] = true; - } - return matches; - } - } - - function applyCrosstalkFilter(e) { - $table[0].ctfilter = keysToMatches(e.value); - table.draw(); - } - instance.ctfilterSubscription = instance.ctfilterHandle.on("change", applyCrosstalkFilter); - applyCrosstalkFilter({value: instance.ctfilterHandle.filteredKeys}); - - function applyCrosstalkSelection(e) { - if (e.sender !== instance.ctselectHandle) { - table - .rows('.' + selClass, {search: 'applied'}) - .nodes() - .to$() - .removeClass(selClass); - if (selectedRows) - changeInput('rows_selected', selectedRows(), void 0, true); - } - - if (e.sender !== instance.ctselectHandle && e.value && e.value.length) { - var matches = keysToMatches(e.value); - - // persistent selection with plotly (& leaflet) - var ctOpts = crosstalk.var("plotlyCrosstalkOpts").get() || {}; - if (ctOpts.persistent === true) { - var matches = $.extend(matches, $table[0].ctselect); - } - - $table[0].ctselect = matches; - table.draw(); - } else { - if ($table[0].ctselect) { - $table[0].ctselect = null; - table.draw(); - } - } - } - instance.ctselectSubscription = instance.ctselectHandle.on("change", applyCrosstalkSelection); - // TODO: This next line doesn't seem to work when renderDataTable is used - applyCrosstalkSelection({value: instance.ctselectHandle.value}); - } - - var inArray = function(val, array) { - return $.inArray(val, $.makeArray(array)) > -1; - }; - - // encode + to %2B when searching in the table on server side, because - // shiny::parseQueryString() treats + as spaces, and DataTables does not - // encode + to %2B (or % to %25) when sending the request - var encode_plus = function(x) { - return server ? x.replace(/%/g, '%25').replace(/\+/g, '%2B') : x; - }; - - // search the i-th column - var searchColumn = function(i, value) { - var regex = false, ci = true; - if (options.search) { - regex = options.search.regex, - ci = options.search.caseInsensitive !== false; - } - return table.column(i).search(encode_plus(value), regex, !regex, ci); - }; - - if (data.filter !== 'none') { - - filterRow.each(function(i, td) { - - var $td = $(td), type = $td.data('type'), filter; - var $input = $td.children('div').first().children('input'); - $input.prop('disabled', !table.settings()[0].aoColumns[i].bSearchable || type === 'disabled'); - $input.on('input blur', function() { - $input.next('span').toggle(Boolean($input.val())); - }); - // Bootstrap sets pointer-events to none and we won't be able to click - // the clear button - $input.next('span').css('pointer-events', 'auto').hide().click(function() { - $(this).hide().prev('input').val('').trigger('input').focus(); - }); - var searchCol; // search string for this column - if (searchCols && searchCols[i]) { - searchCol = searchCols[i]; - $input.val(searchCol).trigger('input'); - } - var $x = $td.children('div').last(); - - // remove the overflow: hidden attribute of the scrollHead - // (otherwise the scrolling table body obscures the filters) - // The workaround and the discussion from - // https://github.com/rstudio/DT/issues/554#issuecomment-518007347 - // Otherwise the filter selection will not be anchored to the values - // when the columns number is many and scrollX is enabled. - var scrollHead = $(el).find('.dataTables_scrollHead,.dataTables_scrollFoot'); - var cssOverflowHead = scrollHead.css('overflow'); - var scrollBody = $(el).find('.dataTables_scrollBody'); - var cssOverflowBody = scrollBody.css('overflow'); - var scrollTable = $(el).find('.dataTables_scroll'); - var cssOverflowTable = scrollTable.css('overflow'); - if (cssOverflowHead === 'hidden') { - $x.on('show hide', function(e) { - if (e.type === 'show') { - scrollHead.css('overflow', 'visible'); - scrollBody.css('overflow', 'visible'); - scrollTable.css('overflow-x', 'scroll'); - } else { - scrollHead.css('overflow', cssOverflowHead); - scrollBody.css('overflow', cssOverflowBody); - scrollTable.css('overflow-x', cssOverflowTable); - } - }); - $x.css('z-index', 25); - } - - if (inArray(type, ['factor', 'logical'])) { - $input.on({ - click: function() { - $input.parent().hide(); $x.show().trigger('show'); filter[0].selectize.focus(); - }, - input: function() { - if ($input.val() === '') filter[0].selectize.setValue([]); - } - }); - var $input2 = $x.children('select'); - filter = $input2.selectize({ - options: $input2.data('options').map(function(v, i) { - return ({text: v, value: v}); - }), - plugins: ['remove_button'], - hideSelected: true, - onChange: function(value) { - if (value === null) value = []; // compatibility with jQuery 3.0 - $input.val(value.length ? JSON.stringify(value) : ''); - if (value.length) $input.trigger('input'); - $input.attr('title', $input.val()); - if (server) { - table.column(i).search(value.length ? encode_plus(JSON.stringify(value)) : '').draw(); - return; - } - // turn off filter if nothing selected - $td.data('filter', value.length > 0); - table.draw(); // redraw table, and filters will be applied - } - }); - if (searchCol) filter[0].selectize.setValue(JSON.parse(searchCol)); - filter[0].selectize.on('blur', function() { - $x.hide().trigger('hide'); $input.parent().show(); $input.trigger('blur'); - }); - filter.next('div').css('margin-bottom', 'auto'); - } else if (type === 'character') { - var fun = function() { - searchColumn(i, $input.val()).draw(); - }; - if (server) { - fun = $.fn.dataTable.util.throttle(fun, options.searchDelay); - } - $input.on('input', fun); - } else if (inArray(type, ['number', 'integer', 'date', 'time'])) { - var $x0 = $x; - $x = $x0.children('div').first(); - $x0.css({ - 'background-color': '#fff', - 'border': '1px #ddd solid', - 'border-radius': '4px', - 'padding': '20px 20px 10px 20px' - }); - var $spans = $x0.children('span').css({ - 'margin-top': '10px', - 'white-space': 'nowrap' - }); - var $span1 = $spans.first(), $span2 = $spans.last(); - var r1 = +$x.data('min'), r2 = +$x.data('max'); - // when the numbers are too small or have many decimal places, the - // slider may have numeric precision problems (#150) - var scale = Math.pow(10, Math.max(0, +$x.data('scale') || 0)); - r1 = Math.round(r1 * scale); r2 = Math.round(r2 * scale); - var scaleBack = function(x, scale) { - if (scale === 1) return x; - var d = Math.round(Math.log(scale) / Math.log(10)); - // to avoid problems like 3.423/100 -> 0.034230000000000003 - return (x / scale).toFixed(d); - }; - var slider_min = function() { - return filter.noUiSlider('options').range.min; - }; - var slider_max = function() { - return filter.noUiSlider('options').range.max; - }; - $input.on({ - focus: function() { - $x0.show().trigger('show'); - // first, make sure the slider div leaves at least 20px between - // the two (slider value) span's - $x0.width(Math.max(160, $span1.outerWidth() + $span2.outerWidth() + 20)); - // then, if the input is really wide, make the slider the same - // width as the input - if ($x0.outerWidth() < $input.outerWidth()) { - $x0.outerWidth($input.outerWidth()); - } - // make sure the slider div does not reach beyond the right margin - if ($(window).width() < $x0.offset().left + $x0.width()) { - $x0.offset({ - 'left': $input.offset().left + $input.outerWidth() - $x0.outerWidth() - }); - } - }, - blur: function() { - $x0.hide().trigger('hide'); - }, - input: function() { - if ($input.val() === '') filter.val([slider_min(), slider_max()]); - }, - change: function() { - var v = $input.val().replace(/\s/g, ''); - if (v === '') return; - v = v.split('...'); - if (v.length !== 2) { - $input.parent().addClass('has-error'); - return; - } - if (v[0] === '') v[0] = slider_min(); - if (v[1] === '') v[1] = slider_max(); - $input.parent().removeClass('has-error'); - // treat date as UTC time at midnight - var strTime = function(x) { - var s = type === 'date' ? 'T00:00:00Z' : ''; - var t = new Date(x + s).getTime(); - // add 10 minutes to date since it does not hurt the date, and - // it helps avoid the tricky floating point arithmetic problems, - // e.g. sometimes the date may be a few milliseconds earlier - // than the midnight due to precision problems in noUiSlider - return type === 'date' ? t + 3600000 : t; - }; - if (inArray(type, ['date', 'time'])) { - v[0] = strTime(v[0]); - v[1] = strTime(v[1]); - } - if (v[0] != slider_min()) v[0] *= scale; - if (v[1] != slider_max()) v[1] *= scale; - filter.val(v); - } - }); - var formatDate = function(d, isoFmt) { - d = scaleBack(d, scale); - if (type === 'number') return d; - if (type === 'integer') return parseInt(d); - var x = new Date(+d); - var fmt = ('filterDateFmt' in data) ? data.filterDateFmt[i] : undefined; - if (fmt !== undefined && isoFmt === false) return x[fmt.method].apply(x, fmt.params); - if (type === 'date') { - var pad0 = function(x) { - return ('0' + x).substr(-2, 2); - }; - return x.getUTCFullYear() + '-' + pad0(1 + x.getUTCMonth()) - + '-' + pad0(x.getUTCDate()); - } else { - return x.toISOString(); - } - }; - var opts = type === 'date' ? { step: 60 * 60 * 1000 } : - type === 'integer' ? { step: 1 } : {}; - filter = $x.noUiSlider($.extend({ - start: [r1, r2], - range: {min: r1, max: r2}, - connect: true - }, opts)); - if (scale > 1) (function() { - var t1 = r1, t2 = r2; - var val = filter.val(); - while (val[0] > r1 || val[1] < r2) { - if (val[0] > r1) { - t1 -= val[0] - r1; - } - if (val[1] < r2) { - t2 += r2 - val[1]; - } - filter = $x.noUiSlider($.extend({ - start: [t1, t2], - range: {min: t1, max: t2}, - connect: true - }, opts), true); - val = filter.val(); - } - r1 = t1; r2 = t2; - })(); - var updateSliderText = function(v1, v2) { - $span1.text(formatDate(v1, false)); $span2.text(formatDate(v2, false)); - }; - updateSliderText(r1, r2); - var updateSlider = function(e) { - var val = filter.val(); - // turn off filter if in full range - $td.data('filter', val[0] > slider_min() || val[1] < slider_max()); - var v1 = formatDate(val[0]), v2 = formatDate(val[1]), ival; - if ($td.data('filter')) { - ival = v1 + ' ... ' + v2; - $input.attr('title', ival).val(ival).trigger('input'); - } else { - $input.attr('title', '').val(''); - } - updateSliderText(val[0], val[1]); - if (e.type === 'slide') return; // no searching when sliding only - if (server) { - table.column(i).search($td.data('filter') ? ival : '').draw(); - return; - } - table.draw(); - }; - filter.on({ - set: updateSlider, - slide: updateSlider - }); - } - - // server-side processing will be handled by R (or whatever server - // language you use); the following code is only needed for client-side - // processing - if (server) { - // if a search string has been pre-set, search now - if (searchCol) searchColumn(i, searchCol).draw(); - return; - } - - var customFilter = function(settings, data, dataIndex) { - // there is no way to attach a search function to a specific table, - // and we need to make sure a global search function is not applied to - // all tables (i.e. a range filter in a previous table should not be - // applied to the current table); we use the settings object to - // determine if we want to perform searching on the current table, - // since settings.sTableId will be different to different tables - if (table.settings()[0] !== settings) return true; - // no filter on this column or no need to filter this column - if (typeof filter === 'undefined' || !$td.data('filter')) return true; - - var r = filter.val(), v, r0, r1; - var i_data = function(i) { - if (!colReorderEnabled()) return i; - var order = table.colReorder.order(), k; - for (k = 0; k < order.length; ++k) if (order[k] === i) return k; - return i; // in theory it will never be here... - } - v = data[i_data(i)]; - if (type === 'number' || type === 'integer') { - v = parseFloat(v); - // how to handle NaN? currently exclude these rows - if (isNaN(v)) return(false); - r0 = parseFloat(scaleBack(r[0], scale)) - r1 = parseFloat(scaleBack(r[1], scale)); - if (v >= r0 && v <= r1) return true; - } else if (type === 'date' || type === 'time') { - v = new Date(v); - r0 = new Date(r[0] / scale); r1 = new Date(r[1] / scale); - if (v >= r0 && v <= r1) return true; - } else if (type === 'factor') { - if (r.length === 0 || inArray(v, r)) return true; - } else if (type === 'logical') { - if (r.length === 0) return true; - if (inArray(v === '' ? 'na' : v, r)) return true; - } - return false; - }; - - $.fn.dataTable.ext.search.push(customFilter); - - // search for the preset search strings if it is non-empty - if (searchCol) { - if (inArray(type, ['factor', 'logical'])) { - filter[0].selectize.setValue(JSON.parse(searchCol)); - } else if (type === 'character') { - $input.trigger('input'); - } else if (inArray(type, ['number', 'integer', 'date', 'time'])) { - $input.trigger('change'); - } - } - - }); - - } - - // highlight search keywords - var highlight = function() { - var body = $(table.table().body()); - // removing the old highlighting first - body.unhighlight(); - - // don't highlight the "not found" row, so we get the rows using the api - if (table.rows({ filter: 'applied' }).data().length === 0) return; - // highlight global search keywords - body.highlight($.trim(table.search()).split(/\s+/)); - // then highlight keywords from individual column filters - if (filterRow) filterRow.each(function(i, td) { - var $td = $(td), type = $td.data('type'); - if (type !== 'character') return; - var $input = $td.children('div').first().children('input'); - var column = table.column(i).nodes().to$(), - val = $.trim($input.val()); - if (type !== 'character' || val === '') return; - column.highlight(val.split(/\s+/)); - }); - }; - - if (options.searchHighlight) { - table - .on('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth', highlight) - .on('destroy', function() { - // remove event handler - table.off('draw.dt.dth column-visibility.dt.dth column-reorder.dt.dth'); - }); - - // Set the option for escaping regex characters in our search string. This will be used - // for all future matching. - jQuery.fn.highlight.options.escapeRegex = (!options.search || !options.search.regex); - - // initial highlight for state saved conditions and initial states - highlight(); - } - - // run the callback function on the table instance - if (typeof data.callback === 'function') data.callback(table); - - // double click to edit the cell, row, column, or all cells - if (data.editable) table.on('dblclick.dt', 'tbody td', function(e) { - // only bring up the editor when the cell itself is dbclicked, and ignore - // other dbclick events bubbled up (e.g. from the ) - if (e.target !== this) return; - var target = [], immediate = false; - switch (data.editable.target) { - case 'cell': - target = [this]; - immediate = true; // edit will take effect immediately - break; - case 'row': - target = table.cells(table.cell(this).index().row, '*').nodes(); - break; - case 'column': - target = table.cells('*', table.cell(this).index().column).nodes(); - break; - case 'all': - target = table.cells().nodes(); - break; - default: - throw 'The editable parameter must be "cell", "row", "column", or "all"'; - } - var disableCols = data.editable.disable ? data.editable.disable.columns : null; - for (var i = 0; i < target.length; i++) { - (function(cell, current) { - var $cell = $(cell), html = $cell.html(); - var _cell = table.cell(cell), value = _cell.data(); - var $input = $(''), changed = false; - if (!immediate) { - $cell.data('input', $input).data('html', html); - $input.attr('title', 'Hit Ctrl+Enter to finish editing, or Esc to cancel'); - } - $input.val(value); - if (inArray(_cell.index().column, disableCols)) { - $input.attr('readonly', '').css('filter', 'invert(25%)'); - } - $cell.empty().append($input); - if (cell === current) $input.focus(); - $input.css('width', '100%'); - - if (immediate) $input.on('change', function() { - changed = true; - var valueNew = $input.val(); - if (valueNew != value) { - _cell.data(valueNew); - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', [cellInfo(cell)], 'DT.cellInfo', null, {priority: "event"}); - } - // for server-side processing, users have to call replaceData() to update the table - if (!server) table.draw(false); - } else { - $cell.html(html); - } - $input.remove(); - }).on('blur', function() { - if (!changed) $input.trigger('change'); - }).on('keyup', function(e) { - // hit Escape to cancel editing - if (e.keyCode === 27) $input.trigger('blur'); - }); - - // bulk edit (row, column, or all) - if (!immediate) $input.on('keyup', function(e) { - var removeInput = function($cell, restore) { - $cell.data('input').remove(); - if (restore) $cell.html($cell.data('html')); - } - if (e.keyCode === 27) { - for (var i = 0; i < target.length; i++) { - removeInput($(target[i]), true); - } - } else if (e.keyCode === 13 && e.ctrlKey) { - // Ctrl + Enter - var cell, $cell, _cell, cellData = []; - for (var i = 0; i < target.length; i++) { - cell = target[i]; $cell = $(cell); _cell = table.cell(cell); - _cell.data($cell.data('input').val()); - HTMLWidgets.shinyMode && cellData.push(cellInfo(cell)); - removeInput($cell, false); - } - if (HTMLWidgets.shinyMode) { - changeInput('cell_edit', cellData, 'DT.cellInfo', null, {priority: "event"}); - } - if (!server) table.draw(false); - } - }); - })(target[i], this); - } - }); - - // interaction with shiny - if (!HTMLWidgets.shinyMode && !crosstalkOptions.group) return; - - var methods = {}; - var shinyData = {}; - - methods.updateCaption = function(caption) { - if (!caption) return; - $table.children('caption').replaceWith(caption); - } - - // register clear functions to remove input values when the table is removed - instance.clearInputs = {}; - - var changeInput = function(id, value, type, noCrosstalk, opts) { - var event = id; - id = el.id + '_' + id; - if (type) id = id + ':' + type; - // do not update if the new value is the same as old value - if (event !== 'cell_edit' && !/_clicked$/.test(event) && shinyData.hasOwnProperty(id) && shinyData[id] === JSON.stringify(value)) - return; - shinyData[id] = JSON.stringify(value); - if (HTMLWidgets.shinyMode && Shiny.setInputValue) { - Shiny.setInputValue(id, value, opts); - if (!instance.clearInputs[id]) instance.clearInputs[id] = function() { - Shiny.setInputValue(id, null); - } - } - - // HACK - if (event === "rows_selected" && !noCrosstalk) { - if (crosstalkOptions.group) { - var keys = crosstalkOptions.key; - var selectedKeys = null; - if (value) { - selectedKeys = []; - for (var i = 0; i < value.length; i++) { - // The value array's contents use 1-based row numbers, so we must - // convert to 0-based before indexing into the keys array. - selectedKeys.push(keys[value[i] - 1]); - } - } - instance.ctselectHandle.set(selectedKeys); - } - } - }; - - var addOne = function(x) { - return x.map(function(i) { return 1 + i; }); - }; - - var unique = function(x) { - var ux = []; - $.each(x, function(i, el){ - if ($.inArray(el, ux) === -1) ux.push(el); - }); - return ux; - } - - // change the row index of a cell - var tweakCellIndex = function(cell) { - var info = cell.index(); - // some cell may not be valid. e.g, #759 - // when using the RowGroup extension, datatables will - // generate the row label and the cells are not part of - // the data thus contain no row/col info - if (info === undefined) - return {row: null, col: null}; - if (server) { - info.row = DT_rows_current[info.row]; - } else { - info.row += 1; - } - return {row: info.row, col: info.column}; - } - - var cleanSelectedValues = function() { - changeInput('rows_selected', []); - changeInput('columns_selected', []); - changeInput('cells_selected', transposeArray2D([]), 'shiny.matrix'); - } - // #828 we should clean the selection on the server-side when the table reloads - cleanSelectedValues(); - - // a flag to indicates if select extension is initialized or not - var flagSelectExt = table.settings()[0]._select !== undefined; - // the Select extension should only be used in the client mode and - // when the selection.mode is set to none - if (data.selection.mode === 'none' && !server && flagSelectExt) { - var updateRowsSelected = function() { - var rows = table.rows({selected: true}); - var selected = []; - $.each(rows.indexes().toArray(), function(i, v) { - selected.push(v + 1); - }); - changeInput('rows_selected', selected); - } - var updateColsSelected = function() { - var columns = table.columns({selected: true}); - changeInput('columns_selected', columns.indexes().toArray()); - } - var updateCellsSelected = function() { - var cells = table.cells({selected: true}); - var selected = []; - cells.every(function() { - var row = this.index().row; - var col = this.index().column; - selected = selected.concat([[row + 1, col]]); - }); - changeInput('cells_selected', transposeArray2D(selected), 'shiny.matrix'); - } - table.on('select deselect', function(e, dt, type, indexes) { - updateRowsSelected(); - updateColsSelected(); - updateCellsSelected(); - }) - } - - var selMode = data.selection.mode, selTarget = data.selection.target; - var selDisable = data.selection.selectable === false; - if (inArray(selMode, ['single', 'multiple'])) { - var selClass = inArray(data.style, ['bootstrap', 'bootstrap4']) ? 'active' : 'selected'; - // selected1: row indices; selected2: column indices - var initSel = function(x) { - if (x === null || typeof x === 'boolean' || selTarget === 'cell') { - return {rows: [], cols: []}; - } else if (selTarget === 'row') { - return {rows: $.makeArray(x), cols: []}; - } else if (selTarget === 'column') { - return {rows: [], cols: $.makeArray(x)}; - } else if (selTarget === 'row+column') { - return {rows: $.makeArray(x.rows), cols: $.makeArray(x.cols)}; - } - } - var selected = data.selection.selected; - var selected1 = initSel(selected).rows, selected2 = initSel(selected).cols; - // selectable should contain either all positive or all non-positive values, not both - // positive values indicate "selectable" while non-positive values means "nonselectable" - // the assertion is performed on R side. (only column indicides could be zero which indicates - // the row name) - var selectable = data.selection.selectable; - var selectable1 = initSel(selectable).rows, selectable2 = initSel(selectable).cols; - - // After users reorder the rows or filter the table, we cannot use the table index - // directly. Instead, we need this function to find out the rows between the two clicks. - // If user filter the table again between the start click and the end click, the behavior - // would be undefined, but it should not be a problem. - var shiftSelRowsIndex = function(start, end) { - var indexes = server ? DT_rows_all : table.rows({ search: 'applied' }).indexes().toArray(); - start = indexes.indexOf(start); end = indexes.indexOf(end); - // if start is larger than end, we need to swap - if (start > end) { - var tmp = end; end = start; start = tmp; - } - return indexes.slice(start, end + 1); - } - - var serverRowIndex = function(clientRowIndex) { - return server ? DT_rows_current[clientRowIndex] : clientRowIndex + 1; - } - - // row, column, or cell selection - var lastClickedRow; - if (inArray(selTarget, ['row', 'row+column'])) { - // Get the current selected rows. It will also - // update the selected1's value based on the current row selection state - // Note we can't put this function inside selectRows() directly, - // the reason is method.selectRows() will override selected1's value but this - // function will add rows to selected1 (keep the existing selection), which is - // inconsistent with column and cell selection. - var selectedRows = function() { - var rows = table.rows('.' + selClass); - var idx = rows.indexes().toArray(); - if (!server) { - selected1 = addOne(idx); - return selected1; - } - idx = idx.map(function(i) { - return DT_rows_current[i]; - }); - selected1 = selMode === 'multiple' ? unique(selected1.concat(idx)) : idx; - return selected1; - } - // Change selected1's value based on selectable1, then refresh the row state - var onlyKeepSelectableRows = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected1 = []; - return; - } - if (selectable1.length === 0) return; - var nonselectable = selectable1[0] <= 0; - if (nonselectable) { - // should make selectable1 positive - selected1 = $(selected1).not(selectable1.map(function(i) { return -i; })).get(); - } else { - selected1 = $(selected1).filter(selectable1).get(); - } - } - // Change selected1's value based on selectable1, then - // refresh the row selection state according to values in selected1 - var selectRows = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableRows(); - table.$('tr.' + selClass).removeClass(selClass); - if (selected1.length === 0) return; - if (server) { - table.rows({page: 'current'}).every(function() { - if (inArray(DT_rows_current[this.index()], selected1)) { - $(this.node()).addClass(selClass); - } - }); - } else { - var selected0 = selected1.map(function(i) { return i - 1; }); - $(table.rows(selected0).nodes()).addClass(selClass); - } - } - table.on('mousedown.dt', 'tbody tr', function(e) { - var $this = $(this), thisRow = table.row(this); - if (selMode === 'multiple') { - if (e.shiftKey && lastClickedRow !== undefined) { - // select or de-select depends on the last clicked row's status - var flagSel = !$this.hasClass(selClass); - var crtClickedRow = serverRowIndex(thisRow.index()); - if (server) { - var rowsIndex = shiftSelRowsIndex(lastClickedRow, crtClickedRow); - // update current page's selClass - rowsIndex.map(function(i) { - var rowIndex = DT_rows_current.indexOf(i); - if (rowIndex >= 0) { - var row = table.row(rowIndex).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - } - }); - // update selected1 - if (flagSel) { - selected1 = unique(selected1.concat(rowsIndex)); - } else { - selected1 = selected1.filter(function(index) { - return !inArray(index, rowsIndex); - }); - } - } else { - // js starts from 0 - shiftSelRowsIndex(lastClickedRow - 1, crtClickedRow - 1).map(function(value) { - var row = table.row(value).nodes().to$(); - var flagRowSel = !row.hasClass(selClass); - if (flagSel === flagRowSel) row.toggleClass(selClass); - }); - } - e.preventDefault(); - } else { - $this.toggleClass(selClass); - } - } else { - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - } else { - table.$('tr.' + selClass).removeClass(selClass); - $this.addClass(selClass); - } - } - if (server && !$this.hasClass(selClass)) { - var id = DT_rows_current[thisRow.index()]; - // remove id from selected1 since its class .selected has been removed - if (inArray(id, selected1)) selected1.splice($.inArray(id, selected1), 1); - } - selectedRows(); // update selected1's value based on selClass - selectRows(false); // only keep the selectable rows - changeInput('rows_selected', selected1); - changeInput('row_last_clicked', serverRowIndex(thisRow.index()), null, null, {priority: 'event'}); - lastClickedRow = serverRowIndex(thisRow.index()); - }); - selectRows(false); // in case users have specified pre-selected rows - // restore selected rows after the table is redrawn (e.g. sort/search/page); - // client-side tables will preserve the selections automatically; for - // server-side tables, we have to *real* row indices are in `selected1` - changeInput('rows_selected', selected1); - if (server) table.on('draw.dt', function(e) { selectRows(false); }); - methods.selectRows = function(selected, ignoreSelectable) { - selected1 = $.makeArray(selected); - selectRows(ignoreSelectable); - changeInput('rows_selected', selected1); - } - } - - if (inArray(selTarget, ['column', 'row+column'])) { - if (selTarget === 'row+column') { - $(table.columns().footer()).css('cursor', 'pointer'); - } - // update selected2's value based on selectable2 - var onlyKeepSelectableCols = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected2 = []; - return; - } - if (selectable2.length === 0) return; - var nonselectable = selectable2[0] <= 0; - if (nonselectable) { - // need to make selectable2 positive - selected2 = $(selected2).not(selectable2.map(function(i) { return -i; })).get(); - } else { - selected2 = $(selected2).filter(selectable2).get(); - } - } - // update selected2 and then - // refresh the col selection state according to values in selected2 - var selectCols = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCols(); - // if selected2 is not a valide index (e.g., larger than the column number) - // table.columns(selected2) will fail and result in a blank table - // this is different from the table.rows(), where the out-of-range indexes - // doesn't affect at all - selected2 = $(selected2).filter(table.columns().indexes()).get(); - table.columns().nodes().flatten().to$().removeClass(selClass); - if (selected2.length > 0) - table.columns(selected2).nodes().flatten().to$().addClass(selClass); - } - var callback = function() { - var colIdx = selTarget === 'column' ? table.cell(this).index().column : - $.inArray(this, table.columns().footer()), - thisCol = $(table.column(colIdx).nodes()); - if (colIdx === -1) return; - if (thisCol.hasClass(selClass)) { - thisCol.removeClass(selClass); - selected2.splice($.inArray(colIdx, selected2), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - thisCol.addClass(selClass); - selected2 = selMode === 'single' ? [colIdx] : unique(selected2.concat([colIdx])); - } - selectCols(false); // update selected2 based on selectable - changeInput('columns_selected', selected2); - } - if (selTarget === 'column') { - $(table.table().body()).on('click.dt', 'td', callback); - } else { - $(table.table().footer()).on('click.dt', 'tr th', callback); - } - selectCols(false); // in case users have specified pre-selected columns - changeInput('columns_selected', selected2); - if (server) table.on('draw.dt', function(e) { selectCols(false); }); - methods.selectColumns = function(selected, ignoreSelectable) { - selected2 = $.makeArray(selected); - selectCols(ignoreSelectable); - changeInput('columns_selected', selected2); - } - } - - if (selTarget === 'cell') { - var selected3 = [], selectable3 = []; - if (selected !== null) selected3 = selected; - if (selectable !== null && typeof selectable !== 'boolean') selectable3 = selectable; - var findIndex = function(ij, sel) { - for (var i = 0; i < sel.length; i++) { - if (ij[0] === sel[i][0] && ij[1] === sel[i][1]) return i; - } - return -1; - } - // Change selected3's value based on selectable3, then refresh the cell state - var onlyKeepSelectableCells = function() { - if (selDisable) { // users can't select; useful when only want backend select - selected3 = []; - return; - } - if (selectable3.length === 0) return; - var nonselectable = selectable3[0][0] <= 0; - var out = []; - if (nonselectable) { - selected3.map(function(ij) { - // should make selectable3 positive - if (findIndex([-ij[0], -ij[1]], selectable3) === -1) { out.push(ij); } - }); - } else { - selected3.map(function(ij) { - if (findIndex(ij, selectable3) > -1) { out.push(ij); } - }); - } - selected3 = out; - } - // Change selected3's value based on selectable3, then - // refresh the cell selection state according to values in selected3 - var selectCells = function(ignoreSelectable) { - if (!ignoreSelectable) onlyKeepSelectableCells(); - table.$('td.' + selClass).removeClass(selClass); - if (selected3.length === 0) return; - if (server) { - table.cells({page: 'current'}).every(function() { - var info = tweakCellIndex(this); - if (findIndex([info.row, info.col], selected3) > -1) - $(this.node()).addClass(selClass); - }); - } else { - selected3.map(function(ij) { - $(table.cell(ij[0] - 1, ij[1]).node()).addClass(selClass); - }); - } - }; - table.on('click.dt', 'tbody td', function() { - var $this = $(this), info = tweakCellIndex(table.cell(this)); - if ($this.hasClass(selClass)) { - $this.removeClass(selClass); - selected3.splice(findIndex([info.row, info.col], selected3), 1); - } else { - if (selMode === 'single') $(table.cells().nodes()).removeClass(selClass); - $this.addClass(selClass); - selected3 = selMode === 'single' ? [[info.row, info.col]] : - unique(selected3.concat([[info.row, info.col]])); - } - selectCells(false); // must call this to update selected3 based on selectable3 - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - }); - selectCells(false); // in case users have specified pre-selected columns - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - - if (server) table.on('draw.dt', function(e) { selectCells(false); }); - methods.selectCells = function(selected, ignoreSelectable) { - selected3 = selected ? selected : []; - selectCells(ignoreSelectable); - changeInput('cells_selected', transposeArray2D(selected3), 'shiny.matrix'); - } - } - } - - // expose some table info to Shiny - var updateTableInfo = function(e, settings) { - // TODO: is anyone interested in the page info? - // changeInput('page_info', table.page.info()); - var updateRowInfo = function(id, modifier) { - var idx; - if (server) { - idx = modifier.page === 'current' ? DT_rows_current : DT_rows_all; - } else { - var rows = table.rows($.extend({ - search: 'applied', - page: 'all' - }, modifier)); - idx = addOne(rows.indexes().toArray()); - } - changeInput('rows' + '_' + id, idx); - }; - updateRowInfo('current', {page: 'current'}); - updateRowInfo('all', {}); - } - table.on('draw.dt', updateTableInfo); - updateTableInfo(); - - // state info - table.on('draw.dt column-visibility.dt', function() { - changeInput('state', table.state()); - }); - changeInput('state', table.state()); - - // search info - var updateSearchInfo = function() { - changeInput('search', table.search()); - if (filterRow) changeInput('search_columns', filterRow.toArray().map(function(td) { - return $(td).find('input').first().val(); - })); - } - table.on('draw.dt', updateSearchInfo); - updateSearchInfo(); - - var cellInfo = function(thiz) { - var info = tweakCellIndex(table.cell(thiz)); - info.value = table.cell(thiz).data(); - return info; - } - // the current cell clicked on - table.on('click.dt', 'tbody td', function() { - changeInput('cell_clicked', cellInfo(this), null, null, {priority: 'event'}); - }) - changeInput('cell_clicked', {}); - - // do not trigger table selection when clicking on links unless they have classes - table.on('click.dt', 'tbody td a', function(e) { - if (this.className === '') e.stopPropagation(); - }); - - methods.addRow = function(data, rowname, resetPaging) { - var n = table.columns().indexes().length, d = n - data.length; - if (d === 1) { - data = rowname.concat(data) - } else if (d !== 0) { - console.log(data); - console.log(table.columns().indexes()); - throw 'New data must be of the same length as current data (' + n + ')'; - }; - table.row.add(data).draw(resetPaging); - } - - methods.updateSearch = function(keywords) { - if (keywords.global !== null) - $(table.table().container()).find('input[type=search]').first() - .val(keywords.global).trigger('input'); - var columns = keywords.columns; - if (!filterRow || columns === null) return; - filterRow.toArray().map(function(td, i) { - var v = typeof columns === 'string' ? columns : columns[i]; - if (typeof v === 'undefined') { - console.log('The search keyword for column ' + i + ' is undefined') - return; - } - $(td).find('input').first().val(v); - searchColumn(i, v); - }); - table.draw(); - } - - methods.hideCols = function(hide, reset) { - if (reset) table.columns().visible(true, false); - table.columns(hide).visible(false); - } - - methods.showCols = function(show, reset) { - if (reset) table.columns().visible(false, false); - table.columns(show).visible(true); - } - - methods.colReorder = function(order, origOrder) { - table.colReorder.order(order, origOrder); - } - - methods.selectPage = function(page) { - if (table.page.info().pages < page || page < 1) { - throw 'Selected page is out of range'; - }; - table.page(page - 1).draw(false); - } - - methods.reloadData = function(resetPaging, clearSelection) { - // empty selections first if necessary - if (methods.selectRows && inArray('row', clearSelection)) methods.selectRows([]); - if (methods.selectColumns && inArray('column', clearSelection)) methods.selectColumns([]); - if (methods.selectCells && inArray('cell', clearSelection)) methods.selectCells([]); - table.ajax.reload(null, resetPaging); - } - - table.shinyMethods = methods; - }, - resize: function(el, width, height, instance) { - if (instance.data) this.renderValue(el, instance.data, instance); - - // dynamically adjust height if fillContainer = TRUE - if (instance.fillContainer) - this.fillAvailableHeight(el, height); - - this.adjustWidth(el); - }, - - // dynamically set the scroll body to fill available height - // (used with fillContainer = TRUE) - fillAvailableHeight: function(el, availableHeight) { - - // see how much of the table is occupied by header/footer elements - // and use that to compute a target scroll body height - var dtWrapper = $(el).find('div.dataTables_wrapper'); - var dtScrollBody = $(el).find($('div.dataTables_scrollBody')); - var framingHeight = dtWrapper.innerHeight() - dtScrollBody.innerHeight(); - var scrollBodyHeight = availableHeight - framingHeight; - - // set the height - dtScrollBody.height(scrollBodyHeight + 'px'); - }, - - // adjust the width of columns; remove the hard-coded widths on table and the - // scroll header when scrollX/Y are enabled - adjustWidth: function(el) { - var $el = $(el), table = $el.data('datatable'); - if (table) table.columns.adjust(); - $el.find('.dataTables_scrollHeadInner').css('width', '') - .children('table').css('margin-left', ''); - } -}); - - if (!HTMLWidgets.shinyMode) return; - - Shiny.addCustomMessageHandler('datatable-calls', function(data) { - var id = data.id; - var el = document.getElementById(id); - var table = el ? $(el).data('datatable') : null; - if (!table) { - console.log("Couldn't find table with id " + id); - return; - } - - var methods = table.shinyMethods, call = data.call; - if (methods[call.method]) { - methods[call.method].apply(table, call.args); - } else { - console.log("Unknown method " + call.method); - } - }); - -})(); diff --git a/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css b/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css deleted file mode 100644 index fb5bae84..00000000 --- a/docs/articles/xportr_files/datatables-css-0.0.0/datatables-crosstalk.css +++ /dev/null @@ -1,23 +0,0 @@ -.dt-crosstalk-fade { - opacity: 0.2; -} - -html body div.DTS div.dataTables_scrollBody { - background: none; -} - - -/* -Fix https://github.com/rstudio/DT/issues/563 -If the `table.display` is set to "block" (e.g., pkgdown), the browser will display -datatable objects strangely. The search panel and the page buttons will still be -in full-width but the table body will be "compact" and shorter. -In therory, having this attributes will affect `dom="t"` -with `display: block` users. But in reality, there should be no one. -We may remove the below lines in the future if the upstream agree to have this there. -See https://github.com/DataTables/DataTablesSrc/issues/160 -*/ - -table.dataTable { - display: table; -} diff --git a/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.extra.css b/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.extra.css deleted file mode 100644 index b2dd141f..00000000 --- a/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.extra.css +++ /dev/null @@ -1,28 +0,0 @@ -/* Selected rows/cells */ -table.dataTable tr.selected td, table.dataTable td.selected { - background-color: #b0bed9 !important; -} -/* In case of scrollX/Y or FixedHeader */ -.dataTables_scrollBody .dataTables_sizing { - visibility: hidden; -} - -/* The datatables' theme CSS file doesn't define -the color but with white background. It leads to an issue that -when the HTML's body color is set to 'white', the user can't -see the text since the background is white. One case happens in the -RStudio's IDE when inline viewing the DT table inside an Rmd file, -if the IDE theme is set to "Cobalt". - -See https://github.com/rstudio/DT/issues/447 for more info - -This fixes should have little side-effects because all the other elements -of the default theme use the #333 font color. - -TODO: The upstream may use relative colors for both the table background -and the color. It means the table can display well without this patch -then. At that time, we need to remove the below CSS attributes. -*/ -div.datatables { - color: #333; -} diff --git a/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.min.css b/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.min.css deleted file mode 100644 index 71ae98a4..00000000 --- a/docs/articles/xportr_files/dt-core-1.10.20/css/jquery.dataTables.min.css +++ /dev/null @@ -1 +0,0 @@ -table.dataTable{width:100%;margin:0 auto;clear:both;border-collapse:separate;border-spacing:0}table.dataTable thead th,table.dataTable tfoot th{font-weight:bold}table.dataTable thead th,table.dataTable thead td{padding:10px 18px;border-bottom:1px solid #111}table.dataTable thead th:active,table.dataTable thead td:active{outline:none}table.dataTable tfoot th,table.dataTable tfoot td{padding:10px 18px 6px 18px;border-top:1px solid #111}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc_disabled{cursor:pointer;*cursor:hand;background-repeat:no-repeat;background-position:center right}table.dataTable thead .sorting{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC)}table.dataTable thead .sorting_asc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg==)}table.dataTable thead .sorting_desc{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII=)}table.dataTable thead .sorting_asc_disabled{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAW0lEQVQoz2NgoCm4w3Vnwh02wspK7/y6k01Ikdadx3f+37l9RxmfIsY7c4GKQHDiHUbcyhzvvIMq+3THBpci3jv7oIpAcMcdduzKEu/8vPMdDn/eiWQYBYMKAAC3ykIEuYQJUgAAAABJRU5ErkJggg==)}table.dataTable thead .sorting_desc_disabled{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAWUlEQVQoz2NgGAWDCtyJvPPzznc4/HknEbsy9js77vyHw313eHGZZ3PnE1TRuzuOuK1lvDMRqmzuHUZ87lO+cxuo6PEdLUIeyb7z604pYf+y3Zlwh4u2YQoAc7ZCBHH4jigAAAAASUVORK5CYII=)}table.dataTable tbody tr{background-color:#ffffff}table.dataTable tbody tr.selected{background-color:#B0BED9}table.dataTable tbody th,table.dataTable tbody td{padding:8px 10px}table.dataTable.row-border tbody th,table.dataTable.row-border tbody td,table.dataTable.display tbody th,table.dataTable.display tbody td{border-top:1px solid #ddd}table.dataTable.row-border tbody tr:first-child th,table.dataTable.row-border tbody tr:first-child td,table.dataTable.display tbody tr:first-child th,table.dataTable.display tbody tr:first-child td{border-top:none}table.dataTable.cell-border tbody th,table.dataTable.cell-border tbody td{border-top:1px solid #ddd;border-right:1px solid #ddd}table.dataTable.cell-border tbody tr th:first-child,table.dataTable.cell-border tbody tr td:first-child{border-left:1px solid #ddd}table.dataTable.cell-border tbody tr:first-child th,table.dataTable.cell-border tbody tr:first-child td{border-top:none}table.dataTable.stripe tbody tr.odd,table.dataTable.display tbody tr.odd{background-color:#f9f9f9}table.dataTable.stripe tbody tr.odd.selected,table.dataTable.display tbody tr.odd.selected{background-color:#acbad4}table.dataTable.hover tbody tr:hover,table.dataTable.display tbody tr:hover{background-color:#f6f6f6}table.dataTable.hover tbody tr:hover.selected,table.dataTable.display tbody tr:hover.selected{background-color:#aab7d1}table.dataTable.order-column tbody tr>.sorting_1,table.dataTable.order-column tbody tr>.sorting_2,table.dataTable.order-column tbody tr>.sorting_3,table.dataTable.display tbody tr>.sorting_1,table.dataTable.display tbody tr>.sorting_2,table.dataTable.display tbody tr>.sorting_3{background-color:#fafafa}table.dataTable.order-column tbody tr.selected>.sorting_1,table.dataTable.order-column tbody tr.selected>.sorting_2,table.dataTable.order-column tbody tr.selected>.sorting_3,table.dataTable.display tbody tr.selected>.sorting_1,table.dataTable.display tbody tr.selected>.sorting_2,table.dataTable.display tbody tr.selected>.sorting_3{background-color:#acbad5}table.dataTable.display tbody tr.odd>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd>.sorting_1{background-color:#f1f1f1}table.dataTable.display tbody tr.odd>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd>.sorting_2{background-color:#f3f3f3}table.dataTable.display tbody tr.odd>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd>.sorting_3{background-color:whitesmoke}table.dataTable.display tbody tr.odd.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_1{background-color:#a6b4cd}table.dataTable.display tbody tr.odd.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_2{background-color:#a8b5cf}table.dataTable.display tbody tr.odd.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.odd.selected>.sorting_3{background-color:#a9b7d1}table.dataTable.display tbody tr.even>.sorting_1,table.dataTable.order-column.stripe tbody tr.even>.sorting_1{background-color:#fafafa}table.dataTable.display tbody tr.even>.sorting_2,table.dataTable.order-column.stripe tbody tr.even>.sorting_2{background-color:#fcfcfc}table.dataTable.display tbody tr.even>.sorting_3,table.dataTable.order-column.stripe tbody tr.even>.sorting_3{background-color:#fefefe}table.dataTable.display tbody tr.even.selected>.sorting_1,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_1{background-color:#acbad5}table.dataTable.display tbody tr.even.selected>.sorting_2,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_2{background-color:#aebcd6}table.dataTable.display tbody tr.even.selected>.sorting_3,table.dataTable.order-column.stripe tbody tr.even.selected>.sorting_3{background-color:#afbdd8}table.dataTable.display tbody tr:hover>.sorting_1,table.dataTable.order-column.hover tbody tr:hover>.sorting_1{background-color:#eaeaea}table.dataTable.display tbody tr:hover>.sorting_2,table.dataTable.order-column.hover tbody tr:hover>.sorting_2{background-color:#ececec}table.dataTable.display tbody tr:hover>.sorting_3,table.dataTable.order-column.hover tbody tr:hover>.sorting_3{background-color:#efefef}table.dataTable.display tbody tr:hover.selected>.sorting_1,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_1{background-color:#a2aec7}table.dataTable.display tbody tr:hover.selected>.sorting_2,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_2{background-color:#a3b0c9}table.dataTable.display tbody tr:hover.selected>.sorting_3,table.dataTable.order-column.hover tbody tr:hover.selected>.sorting_3{background-color:#a5b2cb}table.dataTable.no-footer{border-bottom:1px solid #111}table.dataTable.nowrap th,table.dataTable.nowrap td{white-space:nowrap}table.dataTable.compact thead th,table.dataTable.compact thead td{padding:4px 17px 4px 4px}table.dataTable.compact tfoot th,table.dataTable.compact tfoot td{padding:4px}table.dataTable.compact tbody th,table.dataTable.compact tbody td{padding:4px}table.dataTable th.dt-left,table.dataTable td.dt-left{text-align:left}table.dataTable th.dt-center,table.dataTable td.dt-center,table.dataTable td.dataTables_empty{text-align:center}table.dataTable th.dt-right,table.dataTable td.dt-right{text-align:right}table.dataTable th.dt-justify,table.dataTable td.dt-justify{text-align:justify}table.dataTable th.dt-nowrap,table.dataTable td.dt-nowrap{white-space:nowrap}table.dataTable thead th.dt-head-left,table.dataTable thead td.dt-head-left,table.dataTable tfoot th.dt-head-left,table.dataTable tfoot td.dt-head-left{text-align:left}table.dataTable thead th.dt-head-center,table.dataTable thead td.dt-head-center,table.dataTable tfoot th.dt-head-center,table.dataTable tfoot td.dt-head-center{text-align:center}table.dataTable thead th.dt-head-right,table.dataTable thead td.dt-head-right,table.dataTable tfoot th.dt-head-right,table.dataTable tfoot td.dt-head-right{text-align:right}table.dataTable thead th.dt-head-justify,table.dataTable thead td.dt-head-justify,table.dataTable tfoot th.dt-head-justify,table.dataTable tfoot td.dt-head-justify{text-align:justify}table.dataTable thead th.dt-head-nowrap,table.dataTable thead td.dt-head-nowrap,table.dataTable tfoot th.dt-head-nowrap,table.dataTable tfoot td.dt-head-nowrap{white-space:nowrap}table.dataTable tbody th.dt-body-left,table.dataTable tbody td.dt-body-left{text-align:left}table.dataTable tbody th.dt-body-center,table.dataTable tbody td.dt-body-center{text-align:center}table.dataTable tbody th.dt-body-right,table.dataTable tbody td.dt-body-right{text-align:right}table.dataTable tbody th.dt-body-justify,table.dataTable tbody td.dt-body-justify{text-align:justify}table.dataTable tbody th.dt-body-nowrap,table.dataTable tbody td.dt-body-nowrap{white-space:nowrap}table.dataTable,table.dataTable th,table.dataTable td{box-sizing:content-box}.dataTables_wrapper{position:relative;clear:both;*zoom:1;zoom:1}.dataTables_wrapper .dataTables_length{float:left}.dataTables_wrapper .dataTables_filter{float:right;text-align:right}.dataTables_wrapper .dataTables_filter input{margin-left:0.5em}.dataTables_wrapper .dataTables_info{clear:both;float:left;padding-top:0.755em}.dataTables_wrapper .dataTables_paginate{float:right;text-align:right;padding-top:0.25em}.dataTables_wrapper .dataTables_paginate .paginate_button{box-sizing:border-box;display:inline-block;min-width:1.5em;padding:0.5em 1em;margin-left:2px;text-align:center;text-decoration:none !important;cursor:pointer;*cursor:hand;color:#333 !important;border:1px solid transparent;border-radius:2px}.dataTables_wrapper .dataTables_paginate .paginate_button.current,.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover{color:#333 !important;border:1px solid #979797;background-color:white;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #fff), color-stop(100%, #dcdcdc));background:-webkit-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-moz-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-ms-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:-o-linear-gradient(top, #fff 0%, #dcdcdc 100%);background:linear-gradient(to bottom, #fff 0%, #dcdcdc 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button.disabled,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:hover,.dataTables_wrapper .dataTables_paginate .paginate_button.disabled:active{cursor:default;color:#666 !important;border:1px solid transparent;background:transparent;box-shadow:none}.dataTables_wrapper .dataTables_paginate .paginate_button:hover{color:white !important;border:1px solid #111;background-color:#585858;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #585858), color-stop(100%, #111));background:-webkit-linear-gradient(top, #585858 0%, #111 100%);background:-moz-linear-gradient(top, #585858 0%, #111 100%);background:-ms-linear-gradient(top, #585858 0%, #111 100%);background:-o-linear-gradient(top, #585858 0%, #111 100%);background:linear-gradient(to bottom, #585858 0%, #111 100%)}.dataTables_wrapper .dataTables_paginate .paginate_button:active{outline:none;background-color:#2b2b2b;background:-webkit-gradient(linear, left top, left bottom, color-stop(0%, #2b2b2b), color-stop(100%, #0c0c0c));background:-webkit-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-moz-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-ms-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:-o-linear-gradient(top, #2b2b2b 0%, #0c0c0c 100%);background:linear-gradient(to bottom, #2b2b2b 0%, #0c0c0c 100%);box-shadow:inset 0 0 3px #111}.dataTables_wrapper .dataTables_paginate .ellipsis{padding:0 1em}.dataTables_wrapper .dataTables_processing{position:absolute;top:50%;left:50%;width:100%;height:40px;margin-left:-50%;margin-top:-25px;padding-top:20px;text-align:center;font-size:1.2em;background-color:white;background:-webkit-gradient(linear, left top, right top, color-stop(0%, rgba(255,255,255,0)), color-stop(25%, rgba(255,255,255,0.9)), color-stop(75%, rgba(255,255,255,0.9)), color-stop(100%, rgba(255,255,255,0)));background:-webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-moz-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:-o-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%);background:linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,0.9) 25%, rgba(255,255,255,0.9) 75%, rgba(255,255,255,0) 100%)}.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter,.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_processing,.dataTables_wrapper .dataTables_paginate{color:#333}.dataTables_wrapper .dataTables_scroll{clear:both}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody{*margin-top:-1px;-webkit-overflow-scrolling:touch}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td{vertical-align:middle}.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>thead>tr>td>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>th>div.dataTables_sizing,.dataTables_wrapper .dataTables_scroll div.dataTables_scrollBody>table>tbody>tr>td>div.dataTables_sizing{height:0;overflow:hidden;margin:0 !important;padding:0 !important}.dataTables_wrapper.no-footer .dataTables_scrollBody{border-bottom:1px solid #111}.dataTables_wrapper.no-footer div.dataTables_scrollHead table.dataTable,.dataTables_wrapper.no-footer div.dataTables_scrollBody>table{border-bottom:none}.dataTables_wrapper:after{visibility:hidden;display:block;content:"";clear:both;height:0}@media screen and (max-width: 767px){.dataTables_wrapper .dataTables_info,.dataTables_wrapper .dataTables_paginate{float:none;text-align:center}.dataTables_wrapper .dataTables_paginate{margin-top:0.5em}}@media screen and (max-width: 640px){.dataTables_wrapper .dataTables_length,.dataTables_wrapper .dataTables_filter{float:none;text-align:center}.dataTables_wrapper .dataTables_filter{margin-top:0.5em}} diff --git a/docs/articles/xportr_files/dt-core-1.10.20/js/jquery.dataTables.min.js b/docs/articles/xportr_files/dt-core-1.10.20/js/jquery.dataTables.min.js deleted file mode 100644 index d297f256..00000000 --- a/docs/articles/xportr_files/dt-core-1.10.20/js/jquery.dataTables.min.js +++ /dev/null @@ -1,180 +0,0 @@ -/*! - Copyright 2008-2019 SpryMedia Ltd. - - This source file is free software, available under the following license: - MIT license - http://datatables.net/license - - This source file is distributed in the hope that it will be useful, but - WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - - For details please refer to: http://www.datatables.net - DataTables 1.10.20 - ©2008-2019 SpryMedia Ltd - datatables.net/license -*/ -var $jscomp=$jscomp||{};$jscomp.scope={};$jscomp.findInternal=function(f,z,y){f instanceof String&&(f=String(f));for(var p=f.length,H=0;H").css({position:"fixed",top:0,left:-1*f(z).scrollLeft(),height:1,width:1, -overflow:"hidden"}).append(f("
    ").css({position:"absolute",top:1,left:1,width:100,overflow:"scroll"}).append(f("
    ").css({width:"100%",height:10}))).appendTo("body"),d=c.children(),e=d.children();b.barWidth=d[0].offsetWidth-d[0].clientWidth;b.bScrollOversize=100===e[0].offsetWidth&&100!==d[0].clientWidth;b.bScrollbarLeft=1!==Math.round(e.offset().left);b.bBounding=c[0].getBoundingClientRect().width?!0:!1;c.remove()}f.extend(a.oBrowser,q.__browser);a.oScroll.iBarWidth=q.__browser.barWidth} -function mb(a,b,c,d,e,h){var g=!1;if(c!==p){var k=c;g=!0}for(;d!==e;)a.hasOwnProperty(d)&&(k=g?b(k,a[d],d,a):a[d],g=!0,d+=h);return k}function Ia(a,b){var c=q.defaults.column,d=a.aoColumns.length;c=f.extend({},q.models.oColumn,c,{nTh:b?b:y.createElement("th"),sTitle:c.sTitle?c.sTitle:b?b.innerHTML:"",aDataSort:c.aDataSort?c.aDataSort:[d],mData:c.mData?c.mData:d,idx:d});a.aoColumns.push(c);c=a.aoPreSearchCols;c[d]=f.extend({},q.models.oSearch,c[d]);ma(a,d,f(b).data())}function ma(a,b,c){b=a.aoColumns[b]; -var d=a.oClasses,e=f(b.nTh);if(!b.sWidthOrig){b.sWidthOrig=e.attr("width")||null;var h=(e.attr("style")||"").match(/width:\s*(\d+[pxem%]+)/);h&&(b.sWidthOrig=h[1])}c!==p&&null!==c&&(kb(c),L(q.defaults.column,c,!0),c.mDataProp===p||c.mData||(c.mData=c.mDataProp),c.sType&&(b._sManualType=c.sType),c.className&&!c.sClass&&(c.sClass=c.className),c.sClass&&e.addClass(c.sClass),f.extend(b,c),M(b,c,"sWidth","sWidthOrig"),c.iDataSort!==p&&(b.aDataSort=[c.iDataSort]),M(b,c,"aDataSort"));var g=b.mData,k=U(g), -l=b.mRender?U(b.mRender):null;c=function(a){return"string"===typeof a&&-1!==a.indexOf("@")};b._bAttrSrc=f.isPlainObject(g)&&(c(g.sort)||c(g.type)||c(g.filter));b._setter=null;b.fnGetData=function(a,b,c){var d=k(a,b,p,c);return l&&b?l(d,b,a,c):d};b.fnSetData=function(a,b,c){return Q(g)(a,b,c)};"number"!==typeof g&&(a._rowReadObject=!0);a.oFeatures.bSort||(b.bSortable=!1,e.addClass(d.sSortableNone));a=-1!==f.inArray("asc",b.asSorting);c=-1!==f.inArray("desc",b.asSorting);b.bSortable&&(a||c)?a&&!c?(b.sSortingClass= -d.sSortableAsc,b.sSortingClassJUI=d.sSortJUIAscAllowed):!a&&c?(b.sSortingClass=d.sSortableDesc,b.sSortingClassJUI=d.sSortJUIDescAllowed):(b.sSortingClass=d.sSortable,b.sSortingClassJUI=d.sSortJUI):(b.sSortingClass=d.sSortableNone,b.sSortingClassJUI="")}function aa(a){if(!1!==a.oFeatures.bAutoWidth){var b=a.aoColumns;Ja(a);for(var c=0,d=b.length;cn[m])d(k.length+ -n[m],l);else if("string"===typeof n[m]){var w=0;for(g=k.length;wb&&a[e]--; -1!=d&&c===p&&a.splice(d,1)}function ea(a,b,c,d){var e=a.aoData[b],h,g=function(c,d){for(;c.childNodes.length;)c.removeChild(c.firstChild);c.innerHTML=I(a,b,d,"display")};if("dom"!==c&&(c&&"auto"!==c||"dom"!==e.src)){var k=e.anCells;if(k)if(d!==p)g(k[d],d);else for(c=0,h=k.length;c").appendTo(d));var l=0;for(b=k.length;ltr").attr("role","row");f(d).find(">tr>th, >tr>td").addClass(g.sHeaderTH);f(e).find(">tr>th, >tr>td").addClass(g.sFooterTH);if(null!==e)for(a=a.aoFooter[0],l=0,b=a.length;l=a.fnRecordsDisplay()?0:g,a.iInitDisplayStart=-1);g=a._iDisplayStart;var n=a.fnDisplayEnd();if(a.bDeferLoading)a.bDeferLoading=!1,a.iDraw++,K(a,!1);else if(!k)a.iDraw++;else if(!a.bDestroying&&!qb(a))return;if(0!==l.length)for(h=k?a.aoData.length:n,k=k?0:g;k",{"class":e?d[0]:""}).append(f("",{valign:"top",colSpan:W(a),"class":a.oClasses.sRowEmpty}).html(c))[0];A(a,"aoHeaderCallback","header",[f(a.nTHead).children("tr")[0], -Oa(a),g,n,l]);A(a,"aoFooterCallback","footer",[f(a.nTFoot).children("tr")[0],Oa(a),g,n,l]);d=f(a.nTBody);d.children().detach();d.append(f(b));A(a,"aoDrawCallback","draw",[a]);a.bSorted=!1;a.bFiltered=!1;a.bDrawing=!1}}function V(a,b){var c=a.oFeatures,d=c.bFilter;c.bSort&&rb(a);d?ia(a,a.oPreviousSearch):a.aiDisplay=a.aiDisplayMaster.slice();!0!==b&&(a._iDisplayStart=0);a._drawHold=b;S(a);a._drawHold=!1}function sb(a){var b=a.oClasses,c=f(a.nTable);c=f("
    ").insertBefore(c);var d=a.oFeatures,e= -f("
    ",{id:a.sTableId+"_wrapper","class":b.sWrapper+(a.nTFoot?"":" "+b.sNoFooter)});a.nHolding=c[0];a.nTableWrapper=e[0];a.nTableReinsertBefore=a.nTable.nextSibling;for(var h=a.sDom.split(""),g,k,l,n,m,p,u=0;u")[0];n=h[u+1];if("'"==n||'"'==n){m="";for(p=2;h[u+p]!=n;)m+=h[u+p],p++;"H"==m?m=b.sJUIHeader:"F"==m&&(m=b.sJUIFooter);-1!=m.indexOf(".")?(n=m.split("."),l.id=n[0].substr(1,n[0].length-1),l.className=n[1]):"#"==m.charAt(0)?l.id=m.substr(1, -m.length-1):l.className=m;u+=p}e.append(l);e=f(l)}else if(">"==k)e=e.parent();else if("l"==k&&d.bPaginate&&d.bLengthChange)g=tb(a);else if("f"==k&&d.bFilter)g=ub(a);else if("r"==k&&d.bProcessing)g=vb(a);else if("t"==k)g=wb(a);else if("i"==k&&d.bInfo)g=xb(a);else if("p"==k&&d.bPaginate)g=yb(a);else if(0!==q.ext.feature.length)for(l=q.ext.feature,p=0,n=l.length;p',k=d.sSearch;k=k.match(/_INPUT_/)?k.replace("_INPUT_",g):k+g;b=f("
    ",{id:h.f?null:c+"_filter","class":b.sFilter}).append(f("
    ").addClass(b.sLength);a.aanFeatures.l||(l[0].id=c+"_length");l.children().append(a.oLanguage.sLengthMenu.replace("_MENU_", -e[0].outerHTML));f("select",l).val(a._iDisplayLength).on("change.DT",function(b){Va(a,f(this).val());S(a)});f(a.nTable).on("length.dt.DT",function(b,c,d){a===c&&f("select",l).val(d)});return l[0]}function yb(a){var b=a.sPaginationType,c=q.ext.pager[b],d="function"===typeof c,e=function(a){S(a)};b=f("
    ").addClass(a.oClasses.sPaging+b)[0];var h=a.aanFeatures;d||c.fnInit(a,b,e);h.p||(b.id=a.sTableId+"_paginate",a.aoDrawCallback.push({fn:function(a){if(d){var b=a._iDisplayStart,g=a._iDisplayLength, -f=a.fnRecordsDisplay(),m=-1===g;b=m?0:Math.ceil(b/g);g=m?1:Math.ceil(f/g);f=c(b,g);var p;m=0;for(p=h.p.length;mh&&(d=0)):"first"==b?d=0:"previous"==b?(d=0<=e?d-e:0,0>d&&(d=0)):"next"==b?d+e",{id:a.aanFeatures.r?null:a.sTableId+"_processing","class":a.oClasses.sProcessing}).html(a.oLanguage.sProcessing).insertBefore(a.nTable)[0]}function K(a,b){a.oFeatures.bProcessing&&f(a.aanFeatures.r).css("display",b?"block":"none");A(a,null,"processing",[a,b])}function wb(a){var b=f(a.nTable);b.attr("role","grid");var c=a.oScroll;if(""===c.sX&&""===c.sY)return a.nTable;var d=c.sX,e=c.sY, -h=a.oClasses,g=b.children("caption"),k=g.length?g[0]._captionSide:null,l=f(b[0].cloneNode(!1)),n=f(b[0].cloneNode(!1)),m=b.children("tfoot");m.length||(m=null);l=f("
    ",{"class":h.sScrollWrapper}).append(f("
    ",{"class":h.sScrollHead}).css({overflow:"hidden",position:"relative",border:0,width:d?d?B(d):null:"100%"}).append(f("
    ",{"class":h.sScrollHeadInner}).css({"box-sizing":"content-box",width:c.sXInner||"100%"}).append(l.removeAttr("id").css("margin-left",0).append("top"===k?g:null).append(b.children("thead"))))).append(f("
    ", -{"class":h.sScrollBody}).css({position:"relative",overflow:"auto",width:d?B(d):null}).append(b));m&&l.append(f("
    ",{"class":h.sScrollFoot}).css({overflow:"hidden",border:0,width:d?d?B(d):null:"100%"}).append(f("
    ",{"class":h.sScrollFootInner}).append(n.removeAttr("id").css("margin-left",0).append("bottom"===k?g:null).append(b.children("tfoot")))));b=l.children();var p=b[0];h=b[1];var u=m?b[2]:null;if(d)f(h).on("scroll.DT",function(a){a=this.scrollLeft;p.scrollLeft=a;m&&(u.scrollLeft=a)}); -f(h).css(e&&c.bCollapse?"max-height":"height",e);a.nScrollHead=p;a.nScrollBody=h;a.nScrollFoot=u;a.aoDrawCallback.push({fn:na,sName:"scrolling"});return l[0]}function na(a){var b=a.oScroll,c=b.sX,d=b.sXInner,e=b.sY;b=b.iBarWidth;var h=f(a.nScrollHead),g=h[0].style,k=h.children("div"),l=k[0].style,n=k.children("table");k=a.nScrollBody;var m=f(k),w=k.style,u=f(a.nScrollFoot).children("div"),q=u.children("table"),t=f(a.nTHead),r=f(a.nTable),v=r[0],za=v.style,T=a.nTFoot?f(a.nTFoot):null,A=a.oBrowser, -x=A.bScrollOversize,ac=J(a.aoColumns,"nTh"),Ya=[],y=[],z=[],C=[],G,H=function(a){a=a.style;a.paddingTop="0";a.paddingBottom="0";a.borderTopWidth="0";a.borderBottomWidth="0";a.height=0};var D=k.scrollHeight>k.clientHeight;if(a.scrollBarVis!==D&&a.scrollBarVis!==p)a.scrollBarVis=D,aa(a);else{a.scrollBarVis=D;r.children("thead, tfoot").remove();if(T){var E=T.clone().prependTo(r);var F=T.find("tr");E=E.find("tr")}var I=t.clone().prependTo(r);t=t.find("tr");D=I.find("tr");I.find("th, td").removeAttr("tabindex"); -c||(w.width="100%",h[0].style.width="100%");f.each(ua(a,I),function(b,c){G=ba(a,b);c.style.width=a.aoColumns[G].sWidth});T&&N(function(a){a.style.width=""},E);h=r.outerWidth();""===c?(za.width="100%",x&&(r.find("tbody").height()>k.offsetHeight||"scroll"==m.css("overflow-y"))&&(za.width=B(r.outerWidth()-b)),h=r.outerWidth()):""!==d&&(za.width=B(d),h=r.outerWidth());N(H,D);N(function(a){z.push(a.innerHTML);Ya.push(B(f(a).css("width")))},D);N(function(a,b){-1!==f.inArray(a,ac)&&(a.style.width=Ya[b])}, -t);f(D).height(0);T&&(N(H,E),N(function(a){C.push(a.innerHTML);y.push(B(f(a).css("width")))},E),N(function(a,b){a.style.width=y[b]},F),f(E).height(0));N(function(a,b){a.innerHTML='
    '+z[b]+"
    ";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=Ya[b]},D);T&&N(function(a,b){a.innerHTML='
    '+C[b]+"
    ";a.childNodes[0].style.height="0";a.childNodes[0].style.overflow="hidden";a.style.width=y[b]},E);r.outerWidth()< -h?(F=k.scrollHeight>k.offsetHeight||"scroll"==m.css("overflow-y")?h+b:h,x&&(k.scrollHeight>k.offsetHeight||"scroll"==m.css("overflow-y"))&&(za.width=B(F-b)),""!==c&&""===d||O(a,1,"Possible column misalignment",6)):F="100%";w.width=B(F);g.width=B(F);T&&(a.nScrollFoot.style.width=B(F));!e&&x&&(w.height=B(v.offsetHeight+b));c=r.outerWidth();n[0].style.width=B(c);l.width=B(c);d=r.height()>k.clientHeight||"scroll"==m.css("overflow-y");e="padding"+(A.bScrollbarLeft?"Left":"Right");l[e]=d?b+"px":"0px";T&& -(q[0].style.width=B(c),u[0].style.width=B(c),u[0].style[e]=d?b+"px":"0px");r.children("colgroup").insertBefore(r.children("thead"));m.trigger("scroll");!a.bSorted&&!a.bFiltered||a._drawHold||(k.scrollTop=0)}}function N(a,b,c){for(var d=0,e=0,h=b.length,g,k;e").appendTo(k.find("tbody"));k.find("thead, tfoot").remove(); -k.append(f(a.nTHead).clone()).append(f(a.nTFoot).clone());k.find("tfoot th, tfoot td").css("width","");n=ua(a,k.find("thead")[0]);for(q=0;q").css({width:r.sWidthOrig,margin:0,padding:0,border:0,height:1}));if(a.aoData.length)for(q=0;q").css(h|| -e?{position:"absolute",top:0,left:0,height:1,right:0,overflow:"hidden"}:{}).append(k).appendTo(p);h&&g?k.width(g):h?(k.css("width","auto"),k.removeAttr("width"),k.width()").css("width",B(a)).appendTo(b||y.body);b=a[0].offsetWidth;a.remove();return b}function Kb(a,b){var c=Lb(a,b);if(0>c)return null;var d=a.aoData[c];return d.nTr?d.anCells[b]:f("").html(I(a,c,b,"display"))[0]}function Lb(a,b){for(var c,d=-1,e=-1,h=0,g=a.aoData.length;hd&&(d=c.length,e=h);return e} -function B(a){return null===a?"0px":"number"==typeof a?0>a?"0px":a+"px":a.match(/\d$/)?a+"px":a}function Y(a){var b=[],c=a.aoColumns;var d=a.aaSortingFixed;var e=f.isPlainObject(d);var h=[];var g=function(a){a.length&&!f.isArray(a[0])?h.push(a):f.merge(h,a)};f.isArray(d)&&g(d);e&&d.pre&&g(d.pre);g(a.aaSorting);e&&d.post&&g(d.post);for(a=0;an?1:0; -if(0!==m)return"asc"===l.dir?m:-m}m=c[a];n=c[b];return mn?1:0}):g.sort(function(a,b){var h,g=k.length,f=e[a]._aSortData,l=e[b]._aSortData;for(h=0;hp?1:0})}a.bSorted=!0}function Nb(a){var b=a.aoColumns,c=Y(a);a=a.oLanguage.oAria;for(var d=0,e=b.length;d/g,"");var f=h.nTh;f.removeAttribute("aria-sort"); -h.bSortable&&(0e?e+1:3))}e=0;for(h=d.length;ee?e+1:3))}a.aLastSort=d}function Mb(a,b){var c=a.aoColumns[b],d=q.ext.order[c.sSortDataType],e;d&&(e=d.call(a.oInstance,a,b,ca(a,b)));for(var h,g=q.ext.type.order[c.sType+"-pre"],k=0,f=a.aoData.length;k=h.length?[0,c[1]]:c)}));b.search!==p&&f.extend(a.oPreviousSearch, -Gb(b.search));if(b.columns)for(d=0,e=b.columns.length;d=c&&(b=c-d);b-=b%d;if(-1===d||0>b)b=0;a._iDisplayStart=b}function Ra(a,b){a=a.renderer;var c=q.ext.renderer[b];return f.isPlainObject(a)&&a[b]?c[a[b]]||c._:"string"===typeof a?c[a]||c._:c._}function D(a){return a.oFeatures.bServerSide?"ssp":a.ajax||a.sAjaxSource?"ajax":"dom"}function ka(a,b){var c=Pb.numbers_length,d=Math.floor(c/2);b<=c?a=Z(0,b):a<=d?(a=Z(0,c-2),a.push("ellipsis"),a.push(b-1)):(a>=b-1-d?a=Z(b-(c-2),b):(a=Z(a-d+2,a+d-1),a.push("ellipsis"), -a.push(b-1)),a.splice(0,0,"ellipsis"),a.splice(0,0,0));a.DT_el="span";return a}function Ha(a){f.each({num:function(b){return Da(b,a)},"num-fmt":function(b){return Da(b,a,bb)},"html-num":function(b){return Da(b,a,Ea)},"html-num-fmt":function(b){return Da(b,a,Ea,bb)}},function(b,c){C.type.order[b+a+"-pre"]=c;b.match(/^html\-/)&&(C.type.search[b+a]=C.type.search.html)})}function Qb(a){return function(){var b=[Ca(this[q.ext.iApiIndex])].concat(Array.prototype.slice.call(arguments));return q.ext.internal[a].apply(this, -b)}}var q=function(a){this.$=function(a,b){return this.api(!0).$(a,b)};this._=function(a,b){return this.api(!0).rows(a,b).data()};this.api=function(a){return a?new v(Ca(this[C.iApiIndex])):new v(this)};this.fnAddData=function(a,b){var c=this.api(!0);a=f.isArray(a)&&(f.isArray(a[0])||f.isPlainObject(a[0]))?c.rows.add(a):c.row.add(a);(b===p||b)&&c.draw();return a.flatten().toArray()};this.fnAdjustColumnSizing=function(a){var b=this.api(!0).columns.adjust(),c=b.settings()[0],d=c.oScroll;a===p||a?b.draw(!1): -(""!==d.sX||""!==d.sY)&&na(c)};this.fnClearTable=function(a){var b=this.api(!0).clear();(a===p||a)&&b.draw()};this.fnClose=function(a){this.api(!0).row(a).child.hide()};this.fnDeleteRow=function(a,b,c){var d=this.api(!0);a=d.rows(a);var e=a.settings()[0],h=e.aoData[a[0][0]];a.remove();b&&b.call(this,e,h);(c===p||c)&&d.draw();return h};this.fnDestroy=function(a){this.api(!0).destroy(a)};this.fnDraw=function(a){this.api(!0).draw(a)};this.fnFilter=function(a,b,c,d,e,f){e=this.api(!0);null===b||b===p? -e.search(a,c,d,f):e.column(b).search(a,c,d,f);e.draw()};this.fnGetData=function(a,b){var c=this.api(!0);if(a!==p){var d=a.nodeName?a.nodeName.toLowerCase():"";return b!==p||"td"==d||"th"==d?c.cell(a,b).data():c.row(a).data()||null}return c.data().toArray()};this.fnGetNodes=function(a){var b=this.api(!0);return a!==p?b.row(a).node():b.rows().nodes().flatten().toArray()};this.fnGetPosition=function(a){var b=this.api(!0),c=a.nodeName.toUpperCase();return"TR"==c?b.row(a).index():"TD"==c||"TH"==c?(a=b.cell(a).index(), -[a.row,a.columnVisible,a.column]):null};this.fnIsOpen=function(a){return this.api(!0).row(a).child.isShown()};this.fnOpen=function(a,b,c){return this.api(!0).row(a).child(b,c).show().child()[0]};this.fnPageChange=function(a,b){a=this.api(!0).page(a);(b===p||b)&&a.draw(!1)};this.fnSetColumnVis=function(a,b,c){a=this.api(!0).column(a).visible(b);(c===p||c)&&a.columns.adjust().draw()};this.fnSettings=function(){return Ca(this[C.iApiIndex])};this.fnSort=function(a){this.api(!0).order(a).draw()};this.fnSortListener= -function(a,b,c){this.api(!0).order.listener(a,b,c)};this.fnUpdate=function(a,b,c,d,e){var h=this.api(!0);c===p||null===c?h.row(b).data(a):h.cell(b,c).data(a);(e===p||e)&&h.columns.adjust();(d===p||d)&&h.draw();return 0};this.fnVersionCheck=C.fnVersionCheck;var b=this,c=a===p,d=this.length;c&&(a={});this.oApi=this.internal=C.internal;for(var e in q.ext.internal)e&&(this[e]=Qb(e));this.each(function(){var e={},g=1").appendTo(w));r.nTHead=b[0];b=w.children("tbody");0===b.length&&(b=f("").appendTo(w));r.nTBody=b[0];b=w.children("tfoot");0===b.length&&0").appendTo(w));0===b.length||0===b.children().length?w.addClass(x.sNoFooter):0/g,cc=/^\d{2,4}[\.\/\-]\d{1,2}[\.\/\-]\d{1,2}([T ]{1}\d{1,2}[:\.]\d{2}([\.:]\d{2})?)?$/,dc=/(\/|\.|\*|\+|\?|\||\(|\)|\[|\]|\{|\}|\\|\$|\^|\-)/g,bb=/[',$£₏„%\u2009\u202F\u20BD\u20a9\u20BArfkɃΞ]/gi,P=function(a){return a&&!0!==a&&"-"!==a?!1: -!0},Sb=function(a){var b=parseInt(a,10);return!isNaN(b)&&isFinite(a)?b:null},Tb=function(a,b){cb[b]||(cb[b]=new RegExp(Ua(b),"g"));return"string"===typeof a&&"."!==b?a.replace(/\./g,"").replace(cb[b],"."):a},db=function(a,b,c){var d="string"===typeof a;if(P(a))return!0;b&&d&&(a=Tb(a,b));c&&d&&(a=a.replace(bb,""));return!isNaN(parseFloat(a))&&isFinite(a)},Ub=function(a,b,c){return P(a)?!0:P(a)||"string"===typeof a?db(a.replace(Ea,""),b,c)?!0:null:null},J=function(a,b,c){var d=[],e=0,h=a.length;if(c!== -p)for(;ea.length)){var b=a.slice().sort();for(var c=b[0],d=1, -e=b.length;d")[0],$b=ya.textContent!==p,bc=/<.*?>/g,Sa=q.util.throttle,Wb=[],G=Array.prototype,ec=function(a){var b,c=q.settings,d=f.map(c,function(a,b){return a.nTable});if(a){if(a.nTable&&a.oApi)return[a];if(a.nodeName&&"table"===a.nodeName.toLowerCase()){var e=f.inArray(a,d);return-1!==e?[c[e]]:null}if(a&&"function"===typeof a.settings)return a.settings().toArray();"string"===typeof a?b=f(a):a instanceof f&&(b=a)}else return[];if(b)return b.map(function(a){e=f.inArray(this, -d);return-1!==e?c[e]:null}).toArray()};var v=function(a,b){if(!(this instanceof v))return new v(a,b);var c=[],d=function(a){(a=ec(a))&&c.push.apply(c,a)};if(f.isArray(a))for(var e=0,h=a.length;ea?new v(b[a],this[a]):null},filter:function(a){var b=[];if(G.filter)b=G.filter.call(this,a,this);else for(var c=0,d=this.length;c").addClass(c),f("td",d).addClass(c).html(b)[0].colSpan=W(a),e.push(d[0]))};h(c,d);b._details&&b._details.detach();b._details=f(e);b._detailsShow&&b._details.insertAfter(b.nTr)},hb=function(a,b){var c=a.context;c.length&&(a=c[0].aoData[b!==p?b:a[0]])&&a._details&&(a._details.remove(),a._detailsShow=p,a._details=p)},Yb=function(a,b){var c=a.context;c.length&&a.length&&(a=c[0].aoData[a[0]],a._details&&((a._detailsShow=b)?a._details.insertAfter(a.nTr): -a._details.detach(),ic(c[0])))},ic=function(a){var b=new v(a),c=a.aoData;b.off("draw.dt.DT_details column-visibility.dt.DT_details destroy.dt.DT_details");0g){var m=f.map(d,function(a,b){return a.bVisible?b:null});return[m[m.length+g]]}return[ba(a,g)];case "name":return f.map(e,function(a,b){return a===n[1]?b:null});default:return[]}if(b.nodeName&&b._DT_CellIndex)return[b._DT_CellIndex.column];g=f(h).filter(b).map(function(){return f.inArray(this, -h)}).toArray();if(g.length||!b.nodeName)return g;g=f(b).closest("*[data-dt-column]");return g.length?[g.data("dt-column")]:[]},a,c)};t("columns()",function(a,b){a===p?a="":f.isPlainObject(a)&&(b=a,a="");b=fb(b);var c=this.iterator("table",function(c){return kc(c,a,b)},1);c.selector.cols=a;c.selector.opts=b;return c});x("columns().header()","column().header()",function(a,b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTh},1)});x("columns().footer()","column().footer()",function(a, -b){return this.iterator("column",function(a,b){return a.aoColumns[b].nTf},1)});x("columns().data()","column().data()",function(){return this.iterator("column-rows",Zb,1)});x("columns().dataSrc()","column().dataSrc()",function(){return this.iterator("column",function(a,b){return a.aoColumns[b].mData},1)});x("columns().cache()","column().cache()",function(a){return this.iterator("column-rows",function(b,c,d,e,f){return la(b.aoData,f,"search"===a?"_aFilterData":"_aSortData",c)},1)});x("columns().nodes()", -"column().nodes()",function(){return this.iterator("column-rows",function(a,b,c,d,e){return la(a.aoData,e,"anCells",b)},1)});x("columns().visible()","column().visible()",function(a,b){var c=this,d=this.iterator("column",function(b,c){if(a===p)return b.aoColumns[c].bVisible;var d=b.aoColumns,e=d[c],h=b.aoData,n;if(a!==p&&e.bVisible!==a){if(a){var m=f.inArray(!0,J(d,"bVisible"),c+1);d=0;for(n=h.length;dd;return!0};q.isDataTable=q.fnIsDataTable=function(a){var b=f(a).get(0),c=!1;if(a instanceof -q.Api)return!0;f.each(q.settings,function(a,e){a=e.nScrollHead?f("table",e.nScrollHead)[0]:null;var d=e.nScrollFoot?f("table",e.nScrollFoot)[0]:null;if(e.nTable===b||a===b||d===b)c=!0});return c};q.tables=q.fnTables=function(a){var b=!1;f.isPlainObject(a)&&(b=a.api,a=a.visible);var c=f.map(q.settings,function(b){if(!a||a&&f(b.nTable).is(":visible"))return b.nTable});return b?new v(c):c};q.camelToHungarian=L;t("$()",function(a,b){b=this.rows(b).nodes();b=f(b);return f([].concat(b.filter(a).toArray(), -b.find(a).toArray()))});f.each(["on","one","off"],function(a,b){t(b+"()",function(){var a=Array.prototype.slice.call(arguments);a[0]=f.map(a[0].split(/\s/),function(a){return a.match(/\.dt\b/)?a:a+".dt"}).join(" ");var d=f(this.tables().nodes());d[b].apply(d,a);return this})});t("clear()",function(){return this.iterator("table",function(a){qa(a)})});t("settings()",function(){return new v(this.context,this.context)});t("init()",function(){var a=this.context;return a.length?a[0].oInit:null});t("data()", -function(){return this.iterator("table",function(a){return J(a.aoData,"_aData")}).flatten()});t("destroy()",function(a){a=a||!1;return this.iterator("table",function(b){var c=b.nTableWrapper.parentNode,d=b.oClasses,e=b.nTable,h=b.nTBody,g=b.nTHead,k=b.nTFoot,l=f(e);h=f(h);var n=f(b.nTableWrapper),m=f.map(b.aoData,function(a){return a.nTr}),p;b.bDestroying=!0;A(b,"aoDestroyCallback","destroy",[b]);a||(new v(b)).columns().visible(!0);n.off(".DT").find(":not(tbody *)").off(".DT");f(z).off(".DT-"+b.sInstance); -e!=g.parentNode&&(l.children("thead").detach(),l.append(g));k&&e!=k.parentNode&&(l.children("tfoot").detach(),l.append(k));b.aaSorting=[];b.aaSortingFixed=[];Aa(b);f(m).removeClass(b.asStripeClasses.join(" "));f("th, td",g).removeClass(d.sSortable+" "+d.sSortableAsc+" "+d.sSortableDesc+" "+d.sSortableNone);h.children().detach();h.append(m);g=a?"remove":"detach";l[g]();n[g]();!a&&c&&(c.insertBefore(e,b.nTableReinsertBefore),l.css("width",b.sDestroyWidth).removeClass(d.sTable),(p=b.asDestroyStripes.length)&& -h.children().each(function(a){f(this).addClass(b.asDestroyStripes[a%p])}));c=f.inArray(b,q.settings);-1!==c&&q.settings.splice(c,1)})});f.each(["column","row","cell"],function(a,b){t(b+"s().every()",function(a){var c=this.selector.opts,e=this;return this.iterator(b,function(d,f,k,l,n){a.call(e[b](f,"cell"===b?k:c,"cell"===b?c:p),f,k,l,n)})})});t("i18n()",function(a,b,c){var d=this.context[0];a=U(a)(d.oLanguage);a===p&&(a=b);c!==p&&f.isPlainObject(a)&&(a=a[c]!==p?a[c]:a._);return a.replace("%d",c)}); -q.version="1.10.20";q.settings=[];q.models={};q.models.oSearch={bCaseInsensitive:!0,sSearch:"",bRegex:!1,bSmart:!0};q.models.oRow={nTr:null,anCells:null,_aData:[],_aSortData:null,_aFilterData:null,_sFilterRow:null,_sRowStripe:"",src:null,idx:-1};q.models.oColumn={idx:null,aDataSort:null,asSorting:null,bSearchable:null,bSortable:null,bVisible:null,_sManualType:null,_bAttrSrc:!1,fnCreatedCell:null,fnGetData:null,fnSetData:null,mData:null,mRender:null,nTh:null,nTf:null,sClass:null,sContentPadding:null, -sDefaultContent:null,sName:null,sSortDataType:"std",sSortingClass:null,sSortingClassJUI:null,sTitle:null,sType:null,sWidth:null,sWidthOrig:null};q.defaults={aaData:null,aaSorting:[[0,"asc"]],aaSortingFixed:[],ajax:null,aLengthMenu:[10,25,50,100],aoColumns:null,aoColumnDefs:null,aoSearchCols:[],asStripeClasses:null,bAutoWidth:!0,bDeferRender:!1,bDestroy:!1,bFilter:!0,bInfo:!0,bLengthChange:!0,bPaginate:!0,bProcessing:!1,bRetrieve:!1,bScrollCollapse:!1,bServerSide:!1,bSort:!0,bSortMulti:!0,bSortCellsTop:!1, -bSortClasses:!0,bStateSave:!1,fnCreatedRow:null,fnDrawCallback:null,fnFooterCallback:null,fnFormatNumber:function(a){return a.toString().replace(/\B(?=(\d{3})+(?!\d))/g,this.oLanguage.sThousands)},fnHeaderCallback:null,fnInfoCallback:null,fnInitComplete:null,fnPreDrawCallback:null,fnRowCallback:null,fnServerData:null,fnServerParams:null,fnStateLoadCallback:function(a){try{return JSON.parse((-1===a.iStateDuration?sessionStorage:localStorage).getItem("DataTables_"+a.sInstance+"_"+location.pathname))}catch(b){}}, -fnStateLoadParams:null,fnStateLoaded:null,fnStateSaveCallback:function(a,b){try{(-1===a.iStateDuration?sessionStorage:localStorage).setItem("DataTables_"+a.sInstance+"_"+location.pathname,JSON.stringify(b))}catch(c){}},fnStateSaveParams:null,iStateDuration:7200,iDeferLoading:null,iDisplayLength:10,iDisplayStart:0,iTabIndex:0,oClasses:{},oLanguage:{oAria:{sSortAscending:": activate to sort column ascending",sSortDescending:": activate to sort column descending"},oPaginate:{sFirst:"First",sLast:"Last", -sNext:"Next",sPrevious:"Previous"},sEmptyTable:"No data available in table",sInfo:"Showing _START_ to _END_ of _TOTAL_ entries",sInfoEmpty:"Showing 0 to 0 of 0 entries",sInfoFiltered:"(filtered from _MAX_ total entries)",sInfoPostFix:"",sDecimal:"",sThousands:",",sLengthMenu:"Show _MENU_ entries",sLoadingRecords:"Loading...",sProcessing:"Processing...",sSearch:"Search:",sSearchPlaceholder:"",sUrl:"",sZeroRecords:"No matching records found"},oSearch:f.extend({},q.models.oSearch),sAjaxDataProp:"data", -sAjaxSource:null,sDom:"lfrtip",searchDelay:null,sPaginationType:"simple_numbers",sScrollX:"",sScrollXInner:"",sScrollY:"",sServerMethod:"GET",renderer:null,rowId:"DT_RowId"};H(q.defaults);q.defaults.column={aDataSort:null,iDataSort:-1,asSorting:["asc","desc"],bSearchable:!0,bSortable:!0,bVisible:!0,fnCreatedCell:null,mData:null,mRender:null,sCellType:"td",sClass:"",sContentPadding:"",sDefaultContent:null,sName:"",sSortDataType:"std",sTitle:null,sType:null,sWidth:null};H(q.defaults.column);q.models.oSettings= -{oFeatures:{bAutoWidth:null,bDeferRender:null,bFilter:null,bInfo:null,bLengthChange:null,bPaginate:null,bProcessing:null,bServerSide:null,bSort:null,bSortMulti:null,bSortClasses:null,bStateSave:null},oScroll:{bCollapse:null,iBarWidth:0,sX:null,sXInner:null,sY:null},oLanguage:{fnInfoCallback:null},oBrowser:{bScrollOversize:!1,bScrollbarLeft:!1,bBounding:!1,barWidth:0},ajax:null,aanFeatures:[],aoData:[],aiDisplay:[],aiDisplayMaster:[],aIds:{},aoColumns:[],aoHeader:[],aoFooter:[],oPreviousSearch:{}, -aoPreSearchCols:[],aaSorting:null,aaSortingFixed:[],asStripeClasses:null,asDestroyStripes:[],sDestroyWidth:0,aoRowCallback:[],aoHeaderCallback:[],aoFooterCallback:[],aoDrawCallback:[],aoRowCreatedCallback:[],aoPreDrawCallback:[],aoInitComplete:[],aoStateSaveParams:[],aoStateLoadParams:[],aoStateLoaded:[],sTableId:"",nTable:null,nTHead:null,nTFoot:null,nTBody:null,nTableWrapper:null,bDeferLoading:!1,bInitialised:!1,aoOpenRows:[],sDom:null,searchDelay:null,sPaginationType:"two_button",iStateDuration:0, -aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:p,oAjaxData:p,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==D(this)?1*this._iRecordsTotal: -this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==D(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};q.ext=C={buttons:{}, -classes:{},builder:"-source-",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:q.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:q.version};f.extend(C,{afnFiltering:C.search,aTypes:C.type.detect,ofnSearch:C.type.search,oSort:C.type.order,afnSortData:C.order,aoFeatures:C.feature,oApi:C.internal,oStdClasses:C.classes,oPagination:C.pager}); -f.extend(q.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled", -sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"", -sJUIHeader:"",sJUIFooter:""});var Pb=q.ext.pager;f.extend(Pb,{simple:function(a,b){return["previous","next"]},full:function(a,b){return["first","previous","next","last"]},numbers:function(a,b){return[ka(a,b)]},simple_numbers:function(a,b){return["previous",ka(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ka(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ka(a,b),"last"]},_numbers:ka,numbers_length:7});f.extend(!0,q.ext.renderer,{pageButton:{_:function(a,b, -c,d,e,h){var g=a.oClasses,k=a.oLanguage.oPaginate,l=a.oLanguage.oAria.paginate||{},n,m,q=0,t=function(b,d){var p,r=g.sPageButtonDisabled,u=function(b){Xa(a,b.data.action,!0)};var w=0;for(p=d.length;w").appendTo(b);t(x,v)}else{n=null;m=v;x=a.iTabIndex;switch(v){case "ellipsis":b.append('');break;case "first":n=k.sFirst;0===e&&(x=-1,m+=" "+r);break;case "previous":n=k.sPrevious;0===e&&(x=-1,m+= -" "+r);break;case "next":n=k.sNext;e===h-1&&(x=-1,m+=" "+r);break;case "last":n=k.sLast;e===h-1&&(x=-1,m+=" "+r);break;default:n=v+1,m=e===v?g.sPageButtonActive:""}null!==n&&(x=f("",{"class":g.sPageButton+" "+m,"aria-controls":a.sTableId,"aria-label":l[v],"data-dt-idx":q,tabindex:x,id:0===c&&"string"===typeof v?a.sTableId+"_"+v:null}).html(n).appendTo(b),$a(x,{action:v},u),q++)}}};try{var v=f(b).find(y.activeElement).data("dt-idx")}catch(mc){}t(f(b).empty(),d);v!==p&&f(b).find("[data-dt-idx="+ -v+"]").focus()}}});f.extend(q.ext.type.detect,[function(a,b){b=b.oLanguage.sDecimal;return db(a,b)?"num"+b:null},function(a,b){if(a&&!(a instanceof Date)&&!cc.test(a))return null;b=Date.parse(a);return null!==b&&!isNaN(b)||P(a)?"date":null},function(a,b){b=b.oLanguage.sDecimal;return db(a,b,!0)?"num-fmt"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Ub(a,b)?"html-num"+b:null},function(a,b){b=b.oLanguage.sDecimal;return Ub(a,b,!0)?"html-num-fmt"+b:null},function(a,b){return P(a)||"string"=== -typeof a&&-1!==a.indexOf("<")?"html":null}]);f.extend(q.ext.type.search,{html:function(a){return P(a)?a:"string"===typeof a?a.replace(Rb," ").replace(Ea,""):""},string:function(a){return P(a)?a:"string"===typeof a?a.replace(Rb," "):a}});var Da=function(a,b,c,d){if(0!==a&&(!a||"-"===a))return-Infinity;b&&(a=Tb(a,b));a.replace&&(c&&(a=a.replace(c,"")),d&&(a=a.replace(d,"")));return 1*a};f.extend(C.type.order,{"date-pre":function(a){a=Date.parse(a);return isNaN(a)?-Infinity:a},"html-pre":function(a){return P(a)? -"":a.replace?a.replace(/<.*?>/g,"").toLowerCase():a+""},"string-pre":function(a){return P(a)?"":"string"===typeof a?a.toLowerCase():a.toString?a.toString():""},"string-asc":function(a,b){return ab?1:0},"string-desc":function(a,b){return ab?-1:0}});Ha("");f.extend(!0,q.ext.renderer,{header:{_:function(a,b,c,d){f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(c.sSortingClass+" "+d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc: -c.sSortingClass))})},jqueryui:function(a,b,c,d){f("
    ").addClass(d.sSortJUIWrapper).append(b.contents()).append(f("").addClass(d.sSortIcon+" "+c.sSortingClassJUI)).appendTo(b);f(a.nTable).on("order.dt.DT",function(e,f,g,k){a===f&&(e=c.idx,b.removeClass(d.sSortAsc+" "+d.sSortDesc).addClass("asc"==k[e]?d.sSortAsc:"desc"==k[e]?d.sSortDesc:c.sSortingClass),b.find("span."+d.sSortIcon).removeClass(d.sSortJUIAsc+" "+d.sSortJUIDesc+" "+d.sSortJUI+" "+d.sSortJUIAscAllowed+" "+d.sSortJUIDescAllowed).addClass("asc"== -k[e]?d.sSortJUIAsc:"desc"==k[e]?d.sSortJUIDesc:c.sSortingClassJUI))})}}});var ib=function(a){return"string"===typeof a?a.replace(//g,">").replace(/"/g,"""):a};q.render={number:function(a,b,c,d,e){return{display:function(f){if("number"!==typeof f&&"string"!==typeof f)return f;var g=0>f?"-":"",h=parseFloat(f);if(isNaN(h))return ib(f);h=h.toFixed(c);f=Math.abs(h);h=parseInt(f,10);f=c?b+(f-h).toFixed(c).substring(2):"";return g+(d||"")+h.toString().replace(/\B(?=(\d{3})+(?!\d))/g, -a)+f+(e||"")}}},text:function(){return{display:ib,filter:ib}}};f.extend(q.ext.internal,{_fnExternApiFunc:Qb,_fnBuildAjax:va,_fnAjaxUpdate:qb,_fnAjaxParameters:zb,_fnAjaxUpdateDraw:Ab,_fnAjaxDataSrc:wa,_fnAddColumn:Ia,_fnColumnOptions:ma,_fnAdjustColumnSizing:aa,_fnVisibleToColumnIndex:ba,_fnColumnIndexToVisible:ca,_fnVisbleColumns:W,_fnGetColumns:oa,_fnColumnTypes:Ka,_fnApplyColumnDefs:nb,_fnHungarianMap:H,_fnCamelToHungarian:L,_fnLanguageCompat:Ga,_fnBrowserDetect:lb,_fnAddData:R,_fnAddTr:pa,_fnNodeToDataIndex:function(a, -b){return b._DT_RowIndex!==p?b._DT_RowIndex:null},_fnNodeToColumnIndex:function(a,b,c){return f.inArray(c,a.aoData[b].anCells)},_fnGetCellData:I,_fnSetCellData:ob,_fnSplitObjNotation:Na,_fnGetObjectDataFn:U,_fnSetObjectDataFn:Q,_fnGetDataMaster:Oa,_fnClearTable:qa,_fnDeleteIndex:ra,_fnInvalidate:ea,_fnGetRowElements:Ma,_fnCreateTr:La,_fnBuildHead:pb,_fnDrawHead:ha,_fnDraw:S,_fnReDraw:V,_fnAddOptionsHtml:sb,_fnDetectHeader:fa,_fnGetUniqueThs:ua,_fnFeatureHtmlFilter:ub,_fnFilterComplete:ia,_fnFilterCustom:Db, -_fnFilterColumn:Cb,_fnFilter:Bb,_fnFilterCreateSearch:Ta,_fnEscapeRegex:Ua,_fnFilterData:Eb,_fnFeatureHtmlInfo:xb,_fnUpdateInfo:Hb,_fnInfoMacros:Ib,_fnInitialise:ja,_fnInitComplete:xa,_fnLengthChange:Va,_fnFeatureHtmlLength:tb,_fnFeatureHtmlPaginate:yb,_fnPageChange:Xa,_fnFeatureHtmlProcessing:vb,_fnProcessingDisplay:K,_fnFeatureHtmlTable:wb,_fnScrollDraw:na,_fnApplyToChildren:N,_fnCalculateColumnWidths:Ja,_fnThrottle:Sa,_fnConvertToWidth:Jb,_fnGetWidestNode:Kb,_fnGetMaxLenString:Lb,_fnStringToCss:B, -_fnSortFlatten:Y,_fnSort:rb,_fnSortAria:Nb,_fnSortListener:Za,_fnSortAttachListener:Qa,_fnSortingClasses:Aa,_fnSortData:Mb,_fnSaveState:Ba,_fnLoadState:Ob,_fnSettingsFromNode:Ca,_fnLog:O,_fnMap:M,_fnBindAction:$a,_fnCallbackReg:E,_fnCallbackFire:A,_fnLengthOverflow:Wa,_fnRenderer:Ra,_fnDataSource:D,_fnRowAttributes:Pa,_fnExtend:ab,_fnCalculateEnd:function(){}});f.fn.dataTable=q;q.$=f;f.fn.dataTableSettings=q.settings;f.fn.dataTableExt=q.ext;f.fn.DataTable=function(a){return f(this).dataTable(a).api()}; -f.each(q,function(a,b){f.fn.DataTable[a]=b});return f.fn.dataTable}); diff --git a/docs/articles/xportr_files/header-attrs-2.9/header-attrs.js b/docs/articles/xportr_files/header-attrs-2.9/header-attrs.js deleted file mode 100644 index dd57d92e..00000000 --- a/docs/articles/xportr_files/header-attrs-2.9/header-attrs.js +++ /dev/null @@ -1,12 +0,0 @@ -// Pandoc 2.9 adds attributes on both header and div. We remove the former (to -// be compatible with the behavior of Pandoc < 2.8). -document.addEventListener('DOMContentLoaded', function(e) { - var hs = document.querySelectorAll("div.section[class*='level'] > :first-child"); - var i, h, a; - for (i = 0; i < hs.length; i++) { - h = hs[i]; - if (!/^h[1-6]$/i.test(h.tagName)) continue; // it should be a header h1-h6 - a = h.attributes; - while (a.length > 0) h.removeAttribute(a[0].name); - } -}); diff --git a/docs/articles/xportr_files/htmlwidgets-1.5.3/htmlwidgets.js b/docs/articles/xportr_files/htmlwidgets-1.5.3/htmlwidgets.js deleted file mode 100644 index 3d227624..00000000 --- a/docs/articles/xportr_files/htmlwidgets-1.5.3/htmlwidgets.js +++ /dev/null @@ -1,903 +0,0 @@ -(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%"; - if (cel) { - 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.offsetWidth; }, - getHeight: function() { return cel.offsetHeight; } - }; - - } else { - el.style.width = px(sizing.width); - el.style.height = px(sizing.height); - - return { - getWidth: function() { return el.offsetWidth; }, - getHeight: function() { return el.offsetHeight; } - }; - } - } - - // 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 result = bindingDef.initialize(el, el.offsetWidth, - el.offsetHeight); - 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); - - if (hasClass(el, "html-widget-static-bound")) - return; - el.className = el.className + " html-widget-static-bound"; - - var initResult; - if (binding.initialize) { - initResult = binding.initialize(el, - sizeObj ? sizeObj.getWidth() : el.offsetWidth, - sizeObj ? sizeObj.getHeight() : el.offsetHeight - ); - elementData(el, "init_result", initResult); - } - - if (binding.resize) { - var lastSize = { - w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, - h: sizeObj ? sizeObj.getHeight() : el.offsetHeight - }; - var resizeHandler = function(e) { - var size = { - w: sizeObj ? sizeObj.getWidth() : el.offsetWidth, - h: sizeObj ? sizeObj.getHeight() : el.offsetHeight - }; - 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/articles/xportr_files/jquery-3.5.1/jquery-AUTHORS.txt b/docs/articles/xportr_files/jquery-3.5.1/jquery-AUTHORS.txt deleted file mode 100644 index 06df1a53..00000000 --- a/docs/articles/xportr_files/jquery-3.5.1/jquery-AUTHORS.txt +++ /dev/null @@ -1,357 +0,0 @@ -Authors ordered by first contribution. - -John Resig -Gilles van den Hoven -Michael Geary -Stefan Petre -Yehuda Katz -Corey Jewett -Klaus Hartl -Franck Marcia -Jörn Zaefferer -Paul Bakaus -Brandon Aaron -Mike Alsup -Dave Methvin -Ed Engelhardt -Sean Catchpole -Paul Mclanahan -David Serduke -Richard D. Worth -Scott GonzĂĄlez -Ariel Flesler -Cheah Chu Yeow -Andrew Chalkley -Fabio Buffoni -Stefan Bauckmeier  -Jon Evans -TJ Holowaychuk -Riccardo De Agostini -Michael Bensoussan -Louis-RĂ©mi BabĂ© -Robert Katić -Damian Janowski -Anton Kovalyov -DuĆĄan B. Jovanovic -Earle Castledine -Rich Dougherty -Kim Dalsgaard -Andrea Giammarchi -Fabian Jakobs -Mark Gibson -Karl Swedberg -Justin Meyer -Ben Alman -James Padolsey -David Petersen -Batiste Bieler -Jake Archibald -Alexander Farkas -Filipe Fortes -Rick Waldron -Neeraj Singh -Paul Irish -IraĂȘ Carvalho -Matt Curry -Michael Monteleone -Noah Sloan -Tom Viner -J. Ryan Stinnett -Douglas Neiner -Adam J. Sontag -Heungsub Lee -Dave Reed -Carl FĂŒrstenberg -Jacob Wright -Ralph Whitbeck -unknown -temp01 -Colin Snover -Jared Grippe -Ryan W Tenney -Alex Sexton -Pinhook -Ron Otten -Jephte Clain -Anton Matzneller -Dan Heberden -Henri Wiechers -Russell Holbrook -Julian Aubourg -Gianni Alessandro Chiappetta -Scott Jehl -James Burke -Jonas Pfenniger -Xavi Ramirez -Sylvester Keil -Brandon Sterne -Mathias Bynens -Lee Carpenter -Timmy Willison <4timmywil@gmail.com> -Corey Frang -Digitalxero -David Murdoch -Josh Varner -Charles McNulty -Jordan Boesch -Jess Thrysoee -Michael Murray -Alexis Abril -Rob Morgan -John Firebaugh -Sam Bisbee -Gilmore Davidson -Brian Brennan -Xavier Montillet -Daniel Pihlstrom -Sahab Yazdani -avaly -Scott Hughes -Mike Sherov -Greg Hazel -Schalk Neethling -Denis Knauf -Timo Tijhof -Steen Nielsen -Anton Ryzhov -Shi Chuan -Matt Mueller -Berker Peksag -Toby Brain -Justin -Daniel Herman -Oleg Gaidarenko -Rock Hymas -Richard Gibson -RafaĂ«l Blais Masson -cmc3cn <59194618@qq.com> -Joe Presbrey -Sindre Sorhus -Arne de Bree -Vladislav Zarakovsky -Andrew E Monat -Oskari -Joao Henrique de Andrade Bruni -tsinha -Dominik D. Geyer -Matt Farmer -Trey Hunner -Jason Moon -Jeffery To -Kris Borchers -Vladimir Zhuravlev -Jacob Thornton -Chad Killingsworth -Vitya Muhachev -Nowres Rafid -David Benjamin -Alan Plum -Uri Gilad -Chris Faulkner -Marcel Greter -Elijah Manor -Daniel Chatfield -Daniel GĂĄlvez -Nikita Govorov -Wesley Walser -Mike Pennisi -Matthias JĂ€ggli -Devin Cooper -Markus Staab -Dave Riddle -Callum Macrae -Jonathan Sampson -Benjamin Truyman -Jay Merrifield -James Huston -Sai Lung Wong -Erick Ruiz de ChĂĄvez -David Bonner -Allen J Schmidt Jr -Akintayo Akinwunmi -MORGAN -Ismail Khair -Carl Danley -Mike Petrovich -Greg Lavallee -Tom H Fuertes -Roland Eckl -Yiming He -David Fox -Bennett Sorbo -Paul Ramos -Rod Vagg -Sebastian Burkhard -Zachary Adam Kaplan -Adam Coulombe -nanto_vi -nanto -Danil Somsikov -Ryunosuke SATO -Diego Tres -Jean Boussier -Andrew Plummer -Mark Raddatz -Pascal Borreli -Isaac Z. Schlueter -Karl Sieburg -Nguyen Phuc Lam -Dmitry Gusev -Steven Benner -Li Xudong -MichaƂ GoƂębiowski-Owczarek -Renato Oliveira dos Santos -Frederic Junod -Tom H Fuertes -Mitch Foley -ros3cin -Kyle Robinson Young -John Paul -Jason Bedard -Chris Talkington -Eddie Monge -Terry Jones -Jason Merino -Dan Burzo -Jeremy Dunck -Chris Price -Guy Bedford -njhamann -Goare Mao -Amey Sakhadeo -Mike Sidorov -Anthony Ryan -Lihan Li -George Kats -Dongseok Paeng -Ronny Springer -Ilya Kantor -Marian Sollmann -Chris Antaki -David Hong -Jakob Stoeck -Christopher Jones -Forbes Lindesay -S. Andrew Sheppard -Leonardo Balter -Rodrigo Rosenfeld Rosas -Daniel Husar -Philip JĂ€genstedt -John Hoven -Roman Reiß -Benjy Cui -Christian Kosmowski -David Corbacho -Liang Peng -TJ VanToll -Aurelio De Rosa -Senya Pugach -Dan Hart -Nazar Mokrynskyi -Benjamin Tan -Amit Merchant -Jason Bedard -Veaceslav Grimalschi -Richard McDaniel -Arthur Verschaeve -Shivaji Varma -Ben Toews -Bin Xin -Neftaly Hernandez -T.J. Crowder -Nicolas HENRY -Frederic Hemberger -Victor Homyakov -Aditya Raghavan -Anne-Gaelle Colom -Leonardo Braga -George Mauer -Stephen Edgar -Thomas Tortorini -Jörn Wagner -Jon Hester -Colin Frick -Winston Howes -Alexander O'Mara -Chris Rebert -Bastian Buchholz -Mu Haibao -Calvin Metcalf -Arthur Stolyar -Gabriel Schulhof -Gilad Peleg -Julian Alexander Murillo -Kevin Kirsche -Martin Naumann -Yongwoo Jeon -John-David Dalton -Marek Lewandowski -Bruno Pérel -Daniel Nill -Reed Loden -Sean Henderson -Gary Ye -Richard Kraaijenhagen -Connor Atherton -Christian Grete -Tom von Clef -Liza Ramo -Joelle Fleurantin -Steve Mao -Jon Dufresne -Jae Sung Park -Josh Soref -Saptak Sengupta -Henry Wong -Jun Sun -Martijn W. van der Lee -Devin Wilson -Damian Senn -Zack Hall -Vitaliy Terziev -Todor Prikumov -Bernhard M. Wiedemann -Jha Naman -Alexander Lisianoi -William Robinet -Joe Trumbull -Alexander K -Ralin Chimev -Felipe Sateler -Christophe Tafani-Dereeper -Manoj Kumar -David Broder-Rodgers -Alex Louden -Alex Padilla -karan-96 -ć—æŒ‚äž€ć’ -Erik Lax -Boom Lee -Andreas Solleder -Pierre Spring -Shashanka Nataraj -CDAGaming -Matan Kotler-Berkowitz <205matan@gmail.com> -Jordan Beland -Henry Zhu -Nilton Cesar -basil.belokon -Andrey Meshkov -tmybr11 -Luis Emilio Velasco Sanchez -Ed S -Bert Zhang -SĂ©bastien RĂšgne -wartmanm <3869625+wartmanm@users.noreply.github.com> -Siddharth Dungarwal -abnud1 -Andrei Fangli -Marja HölttĂ€ -buddh4 -Hoang -Wonseop Kim -Pat O'Callaghan -JuanMa Ruiz -Ahmed.S.ElAfifi -Sean Robinson -Christian Oliff diff --git a/docs/articles/xportr_files/jquery-3.5.1/jquery.js b/docs/articles/xportr_files/jquery-3.5.1/jquery.js deleted file mode 100644 index 50937333..00000000 --- a/docs/articles/xportr_files/jquery-3.5.1/jquery.js +++ /dev/null @@ -1,10872 +0,0 @@ -/*! - * jQuery JavaScript Library v3.5.1 - * https://jquery.com/ - * - * Includes Sizzle.js - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://jquery.org/license - * - * Date: 2020-05-04T22:49Z - */ -( function( global, factory ) { - - "use strict"; - - if ( typeof module === "object" && typeof module.exports === "object" ) { - - // For CommonJS and CommonJS-like environments where a proper `window` - // is present, execute the factory and get jQuery. - // For environments that do not have a `window` with a `document` - // (such as Node.js), expose a factory as module.exports. - // This accentuates the need for the creation of a real `window`. - // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 -// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode -// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common -// enough that all such attempts are guarded in a try block. -"use strict"; - -var arr = []; - -var getProto = Object.getPrototypeOf; - -var slice = arr.slice; - -var flat = arr.flat ? function( array ) { - return arr.flat.call( array ); -} : function( array ) { - return arr.concat.apply( [], array ); -}; - - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var fnToString = hasOwn.toString; - -var ObjectFunctionString = fnToString.call( Object ); - -var support = {}; - -var isFunction = function isFunction( obj ) { - - // Support: Chrome <=57, Firefox <=52 - // In some browsers, typeof returns "function" for HTML elements - // (i.e., `typeof document.createElement( "object" ) === "function"`). - // We don't want to classify *any* DOM node as a function. - return typeof obj === "function" && typeof obj.nodeType !== "number"; - }; - - -var isWindow = function isWindow( obj ) { - return obj != null && obj === obj.window; - }; - - -var document = window.document; - - - - var preservedScriptAttributes = { - type: true, - src: true, - nonce: true, - noModule: true - }; - - function DOMEval( code, node, doc ) { - doc = doc || document; - - var i, val, - script = doc.createElement( "script" ); - - script.text = code; - if ( node ) { - for ( i in preservedScriptAttributes ) { - - // Support: Firefox 64+, Edge 18+ - // Some browsers don't support the "nonce" property on scripts. - // On the other hand, just using `getAttribute` is not enough as - // the `nonce` attribute is reset to an empty string whenever it - // becomes browsing-context connected. - // See https://github.com/whatwg/html/issues/2369 - // See https://html.spec.whatwg.org/#nonce-attributes - // The `node.getAttribute` check was added for the sake of - // `jQuery.globalEval` so that it can fake a nonce-containing node - // via an object. - val = node[ i ] || node.getAttribute && node.getAttribute( i ); - if ( val ) { - script.setAttribute( i, val ); - } - } - } - doc.head.appendChild( script ).parentNode.removeChild( script ); - } - - -function toType( obj ) { - if ( obj == null ) { - return obj + ""; - } - - // Support: Android <=2.3 only (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call( obj ) ] || "object" : - typeof obj; -} -/* global Symbol */ -// Defining this global in .eslintrc.json would create a danger of using the global -// unguarded in another place, it seems safer to define global only for this module - - - -var - version = "3.5.1", - - // Define a local copy of jQuery - jQuery = function( selector, context ) { - - // The jQuery object is actually just the init constructor 'enhanced' - // Need init if jQuery is called (just allow error to be thrown if not included) - return new jQuery.fn.init( selector, context ); - }; - -jQuery.fn = jQuery.prototype = { - - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - - // Return all the elements in a clean array - if ( num == null ) { - return slice.call( this ); - } - - // Return just the one element from the set - return num < 0 ? this[ num + this.length ] : this[ num ]; - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - - // Return the newly-formed element set - return ret; - }, - - // Execute a callback for every element in the matched set. - each: function( callback ) { - return jQuery.each( this, callback ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map( this, function( elem, i ) { - return callback.call( elem, i, elem ); - } ) ); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - even: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return ( i + 1 ) % 2; - } ) ); - }, - - odd: function() { - return this.pushStack( jQuery.grep( this, function( _elem, i ) { - return i % 2; - } ) ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[ 0 ] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !isFunction( target ) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - - // Only deal with non-null/undefined values - if ( ( options = arguments[ i ] ) != null ) { - - // Extend the base object - for ( name in options ) { - copy = options[ name ]; - - // Prevent Object.prototype pollution - // Prevent never-ending loop - if ( name === "__proto__" || target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject( copy ) || - ( copyIsArray = Array.isArray( copy ) ) ) ) { - src = target[ name ]; - - // Ensure proper type for the source value - if ( copyIsArray && !Array.isArray( src ) ) { - clone = []; - } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { - clone = {}; - } else { - clone = src; - } - copyIsArray = false; - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend( { - - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isPlainObject: function( obj ) { - var proto, Ctor; - - // Detect obvious negatives - // Use toString instead of jQuery.type to catch host objects - if ( !obj || toString.call( obj ) !== "[object Object]" ) { - return false; - } - - proto = getProto( obj ); - - // Objects with no prototype (e.g., `Object.create( null )`) are plain - if ( !proto ) { - return true; - } - - // Objects with prototype are plain iff they were constructed by a global Object function - Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; - return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; - }, - - isEmptyObject: function( obj ) { - var name; - - for ( name in obj ) { - return false; - } - return true; - }, - - // Evaluates a script in a provided context; falls back to the global one - // if not specified. - globalEval: function( code, options, doc ) { - DOMEval( code, { nonce: options && options.nonce }, doc ); - }, - - each: function( obj, callback ) { - var length, i = 0; - - if ( isArrayLike( obj ) ) { - length = obj.length; - for ( ; i < length; i++ ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } else { - for ( i in obj ) { - if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { - break; - } - } - } - - return obj; - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArrayLike( Object( arr ) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var length, value, - i = 0, - ret = []; - - // Go through the array, translating each of the items to their new values - if ( isArrayLike( elems ) ) { - length = elems.length; - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return flat( ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -} ); - -if ( typeof Symbol === "function" ) { - jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; -} - -// Populate the class2type map -jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), -function( _i, name ) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -} ); - -function isArrayLike( obj ) { - - // Support: real iOS 8.2 only (not reproducible in simulator) - // `in` check used to prevent JIT error (gh-2145) - // hasOwn isn't used here due to false negatives - // regarding Nodelist length in IE - var length = !!obj && "length" in obj && obj.length, - type = toType( obj ); - - if ( isFunction( obj ) || isWindow( obj ) ) { - return false; - } - - return type === "array" || length === 0 || - typeof length === "number" && length > 0 && ( length - 1 ) in obj; -} -var Sizzle = -/*! - * Sizzle CSS Selector Engine v2.3.5 - * https://sizzlejs.com/ - * - * Copyright JS Foundation and other contributors - * Released under the MIT license - * https://js.foundation/ - * - * Date: 2020-03-14 - */ -( function( window ) { -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - nonnativeSelectorCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // Instance methods - hasOwn = ( {} ).hasOwnProperty, - arr = [], - pop = arr.pop, - pushNative = arr.push, - push = arr.push, - slice = arr.slice, - - // Use a stripped-down indexOf as it's faster than native - // https://jsperf.com/thor-indexof-vs-for/5 - indexOf = function( list, elem ) { - var i = 0, - len = list.length; - for ( ; i < len; i++ ) { - if ( list[ i ] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + - "ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // http://www.w3.org/TR/css3-selectors/#whitespace - whitespace = "[\\x20\\t\\r\\n\\f]", - - // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram - identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + - "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + - - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - - // "Attribute values must be CSS identifiers [capture 5] - // or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + - whitespace + "*\\]", - - pseudos = ":(" + identifier + ")(?:\\((" + - - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter - rwhitespace = new RegExp( whitespace + "+", "g" ), - rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + - whitespace + "+$", "g" ), - - rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + - "*" ), - rdescend = new RegExp( whitespace + "|>" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + identifier + ")" ), - "CLASS": new RegExp( "^\\.(" + identifier + ")" ), - "TAG": new RegExp( "^(" + identifier + "|[*])" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + - whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + - whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + - "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + - "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rhtml = /HTML$/i, - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - - // CSS escapes - // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), - funescape = function( escape, nonHex ) { - var high = "0x" + escape.slice( 1 ) - 0x10000; - - return nonHex ? - - // Strip the backslash prefix from a non-hex escape sequence - nonHex : - - // Replace a hexadecimal escape sequence with the encoded Unicode code point - // Support: IE <=11+ - // For values outside the Basic Multilingual Plane (BMP), manually construct a - // surrogate pair - high < 0 ? - String.fromCharCode( high + 0x10000 ) : - String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); - }, - - // CSS string/identifier serialization - // https://drafts.csswg.org/cssom/#common-serializing-idioms - rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, - fcssescape = function( ch, asCodePoint ) { - if ( asCodePoint ) { - - // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER - if ( ch === "\0" ) { - return "\uFFFD"; - } - - // Control characters and (dependent upon position) numbers get escaped as code points - return ch.slice( 0, -1 ) + "\\" + - ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; - } - - // Other potentially-special ASCII characters get backslash-escaped - return "\\" + ch; - }, - - // Used for iframes - // See setDocument() - // Removing the function wrapper causes a "Permission Denied" - // error in IE - unloadHandler = function() { - setDocument(); - }, - - inDisabledFieldset = addCombinator( - function( elem ) { - return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; - }, - { dir: "parentNode", next: "legend" } - ); - -// Optimize for push.apply( _, NodeList ) -try { - push.apply( - ( arr = slice.call( preferredDoc.childNodes ) ), - preferredDoc.childNodes - ); - - // Support: Android<4.0 - // Detect silently failing push.apply - // eslint-disable-next-line no-unused-expressions - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - pushNative.apply( target, slice.call( els ) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - - // Can't trust NodeList.length - while ( ( target[ j++ ] = els[ i++ ] ) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var m, i, elem, nid, match, groups, newSelector, - newContext = context && context.ownerDocument, - - // nodeType defaults to 9, since context defaults to document - nodeType = context ? context.nodeType : 9; - - results = results || []; - - // Return early from calls with invalid selector or context - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - // Try to shortcut find operations (as opposed to filters) in HTML documents - if ( !seed ) { - setDocument( context ); - context = context || document; - - if ( documentIsHTML ) { - - // If the selector is sufficiently simple, try using a "get*By*" DOM method - // (excepting DocumentFragment context, where the methods don't exist) - if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { - - // ID selector - if ( ( m = match[ 1 ] ) ) { - - // Document context - if ( nodeType === 9 ) { - if ( ( elem = context.getElementById( m ) ) ) { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( elem.id === m ) { - results.push( elem ); - return results; - } - } else { - return results; - } - - // Element context - } else { - - // Support: IE, Opera, Webkit - // TODO: identify versions - // getElementById can match elements by name instead of ID - if ( newContext && ( elem = newContext.getElementById( m ) ) && - contains( context, elem ) && - elem.id === m ) { - - results.push( elem ); - return results; - } - } - - // Type selector - } else if ( match[ 2 ] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Class selector - } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && - context.getElementsByClassName ) { - - push.apply( results, context.getElementsByClassName( m ) ); - return results; - } - } - - // Take advantage of querySelectorAll - if ( support.qsa && - !nonnativeSelectorCache[ selector + " " ] && - ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && - - // Support: IE 8 only - // Exclude object elements - ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { - - newSelector = selector; - newContext = context; - - // qSA considers elements outside a scoping root when evaluating child or - // descendant combinators, which is not what we want. - // In such cases, we work around the behavior by prefixing every selector in the - // list with an ID selector referencing the scope context. - // The technique has to be used as well when a leading combinator is used - // as such selectors are not recognized by querySelectorAll. - // Thanks to Andrew Dupont for this technique. - if ( nodeType === 1 && - ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { - - // Expand context for sibling selectors - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || - context; - - // We can use :scope instead of the ID hack if the browser - // supports it & if we're not changing the context. - if ( newContext !== context || !support.scope ) { - - // Capture the context ID, setting it first if necessary - if ( ( nid = context.getAttribute( "id" ) ) ) { - nid = nid.replace( rcssescape, fcssescape ); - } else { - context.setAttribute( "id", ( nid = expando ) ); - } - } - - // Prefix every selector in the list - groups = tokenize( selector ); - i = groups.length; - while ( i-- ) { - groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + - toSelector( groups[ i ] ); - } - newSelector = groups.join( "," ); - } - - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch ( qsaError ) { - nonnativeSelectorCache( selector, true ); - } finally { - if ( nid === expando ) { - context.removeAttribute( "id" ); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @returns {function(string, object)} Returns the Object data after storing it on itself with - * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) - * deleting the oldest entry - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return ( cache[ key + " " ] = value ); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created element and returns a boolean result - */ -function assert( fn ) { - var el = document.createElement( "fieldset" ); - - try { - return !!fn( el ); - } catch ( e ) { - return false; - } finally { - - // Remove from its parent by default - if ( el.parentNode ) { - el.parentNode.removeChild( el ); - } - - // release memory in IE - el = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split( "|" ), - i = arr.length; - - while ( i-- ) { - Expr.attrHandle[ arr[ i ] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - a.sourceIndex - b.sourceIndex; - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( ( cur = cur.nextSibling ) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return ( name === "input" || name === "button" ) && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for :enabled/:disabled - * @param {Boolean} disabled true for :disabled; false for :enabled - */ -function createDisabledPseudo( disabled ) { - - // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable - return function( elem ) { - - // Only certain elements can match :enabled or :disabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled - // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled - if ( "form" in elem ) { - - // Check for inherited disabledness on relevant non-disabled elements: - // * listed form-associated elements in a disabled fieldset - // https://html.spec.whatwg.org/multipage/forms.html#category-listed - // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled - // * option elements in a disabled optgroup - // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled - // All such elements have a "form" property. - if ( elem.parentNode && elem.disabled === false ) { - - // Option elements defer to a parent optgroup if present - if ( "label" in elem ) { - if ( "label" in elem.parentNode ) { - return elem.parentNode.disabled === disabled; - } else { - return elem.disabled === disabled; - } - } - - // Support: IE 6 - 11 - // Use the isDisabled shortcut property to check for disabled fieldset ancestors - return elem.isDisabled === disabled || - - // Where there is no isDisabled, check manually - /* jshint -W018 */ - elem.isDisabled !== !disabled && - inDisabledFieldset( elem ) === disabled; - } - - return elem.disabled === disabled; - - // Try to winnow out elements that can't be disabled before trusting the disabled property. - // Some victims get caught in our net (label, legend, menu, track), but it shouldn't - // even exist on them, let alone have a boolean value. - } else if ( "label" in elem ) { - return elem.disabled === disabled; - } - - // Remaining elements are neither :enabled nor :disabled - return false; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction( function( argument ) { - argument = +argument; - return markFunction( function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ ( j = matchIndexes[ i ] ) ] ) { - seed[ j ] = !( matches[ j ] = seed[ j ] ); - } - } - } ); - } ); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - var namespace = elem.namespaceURI, - docElem = ( elem.ownerDocument || elem ).documentElement; - - // Support: IE <=8 - // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes - // https://bugs.jquery.com/ticket/4833 - return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, subWindow, - doc = node ? node.ownerDocument || node : preferredDoc; - - // Return early if doc is invalid or already selected - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Update global variables - document = doc; - docElem = document.documentElement; - documentIsHTML = !isXML( document ); - - // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && - ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { - - // Support: IE 11, Edge - if ( subWindow.addEventListener ) { - subWindow.addEventListener( "unload", unloadHandler, false ); - - // Support: IE 9 - 10 only - } else if ( subWindow.attachEvent ) { - subWindow.attachEvent( "onunload", unloadHandler ); - } - } - - // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, - // Safari 4 - 5 only, Opera <=11.6 - 12.x only - // IE/Edge & older browsers don't support the :scope pseudo-class. - // Support: Safari 6.0 only - // Safari 6.0 supports :scope but it's an alias of :root there. - support.scope = assert( function( el ) { - docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); - return typeof el.querySelectorAll !== "undefined" && - !el.querySelectorAll( ":scope fieldset div" ).length; - } ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert( function( el ) { - el.className = "i"; - return !el.getAttribute( "className" ); - } ); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert( function( el ) { - el.appendChild( document.createComment( "" ) ); - return !el.getElementsByTagName( "*" ).length; - } ); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( document.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programmatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert( function( el ) { - docElem.appendChild( el ).id = expando; - return !document.getElementsByName || !document.getElementsByName( expando ).length; - } ); - - // ID filter and find - if ( support.getById ) { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute( "id" ) === attrId; - }; - }; - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var elem = context.getElementById( id ); - return elem ? [ elem ] : []; - } - }; - } else { - Expr.filter[ "ID" ] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && - elem.getAttributeNode( "id" ); - return node && node.value === attrId; - }; - }; - - // Support: IE 6 - 7 only - // getElementById is not reliable as a find shortcut - Expr.find[ "ID" ] = function( id, context ) { - if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { - var node, i, elems, - elem = context.getElementById( id ); - - if ( elem ) { - - // Verify the id attribute - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - - // Fall back on getElementsByName - elems = context.getElementsByName( id ); - i = 0; - while ( ( elem = elems[ i++ ] ) ) { - node = elem.getAttributeNode( "id" ); - if ( node && node.value === id ) { - return [ elem ]; - } - } - } - - return []; - } - }; - } - - // Tag - Expr.find[ "TAG" ] = support.getElementsByTagName ? - function( tag, context ) { - if ( typeof context.getElementsByTagName !== "undefined" ) { - return context.getElementsByTagName( tag ); - - // DocumentFragment nodes don't have gEBTN - } else if ( support.qsa ) { - return context.querySelectorAll( tag ); - } - } : - - function( tag, context ) { - var elem, - tmp = [], - i = 0, - - // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too - results = context.getElementsByTagName( tag ); - - // Filter out possible comments - if ( tag === "*" ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See https://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { - - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert( function( el ) { - - var input; - - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // https://bugs.jquery.com/ticket/12359 - docElem.appendChild( el ).innerHTML = "" + - ""; - - // Support: IE8, Opera 11-12.16 - // Nothing should be selected when empty strings follow ^= or $= or *= - // The test attribute must be unknown in Opera but "safe" for WinRT - // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !el.querySelectorAll( "[selected]" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ - if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { - rbuggyQSA.push( "~=" ); - } - - // Support: IE 11+, Edge 15 - 18+ - // IE 11/Edge don't find elements on a `[name='']` query in some cases. - // Adding a temporary attribute to the document before the selection works - // around the issue. - // Interestingly, IE 10 & older don't seem to have the issue. - input = document.createElement( "input" ); - input.setAttribute( "name", "" ); - el.appendChild( input ); - if ( !el.querySelectorAll( "[name='']" ).length ) { - rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + - whitespace + "*(?:''|\"\")" ); - } - - // Webkit/Opera - :checked should return selected option elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - // IE8 throws error here and will not see later tests - if ( !el.querySelectorAll( ":checked" ).length ) { - rbuggyQSA.push( ":checked" ); - } - - // Support: Safari 8+, iOS 8+ - // https://bugs.webkit.org/show_bug.cgi?id=136851 - // In-page `selector#id sibling-combinator selector` fails - if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { - rbuggyQSA.push( ".#.+[+~]" ); - } - - // Support: Firefox <=3.6 - 5 only - // Old Firefox doesn't throw on a badly-escaped identifier. - el.querySelectorAll( "\\\f" ); - rbuggyQSA.push( "[\\r\\n\\f]" ); - } ); - - assert( function( el ) { - el.innerHTML = "" + - ""; - - // Support: Windows 8 Native Apps - // The type and name attributes are restricted during .innerHTML assignment - var input = document.createElement( "input" ); - input.setAttribute( "type", "hidden" ); - el.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( el.querySelectorAll( "[name=d]" ).length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: IE9-11+ - // IE's :disabled selector does not pick up the children of disabled fieldsets - docElem.appendChild( el ).disabled = true; - if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Support: Opera 10 - 11 only - // Opera 10-11 does not throw on post-comma invalid pseudos - el.querySelectorAll( "*,:x" ); - rbuggyQSA.push( ",.*:" ); - } ); - } - - if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector ) ) ) ) { - - assert( function( el ) { - - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( el, "*" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( el, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - } ); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully self-exclusive - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - ) ); - } : - function( a, b ) { - if ( b ) { - while ( ( b = b.parentNode ) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { - - // Choose the first element that is related to our preferred document - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( a == document || a.ownerDocument == preferredDoc && - contains( preferredDoc, a ) ) { - return -1; - } - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( b == document || b.ownerDocument == preferredDoc && - contains( preferredDoc, b ) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - return a == document ? -1 : - b == document ? 1 : - /* eslint-enable eqeqeq */ - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( ( cur = cur.parentNode ) ) { - ap.unshift( cur ); - } - cur = b; - while ( ( cur = cur.parentNode ) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[ i ] === bp[ i ] ) { - i++; - } - - return i ? - - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[ i ], bp[ i ] ) : - - // Otherwise nodes in our document sort first - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - /* eslint-disable eqeqeq */ - ap[ i ] == preferredDoc ? -1 : - bp[ i ] == preferredDoc ? 1 : - /* eslint-enable eqeqeq */ - 0; - }; - - return document; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - setDocument( elem ); - - if ( support.matchesSelector && documentIsHTML && - !nonnativeSelectorCache[ expr + " " ] && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch ( e ) { - nonnativeSelectorCache( expr, true ); - } - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( context.ownerDocument || context ) != document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - - // Set document vars if needed - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( ( elem.ownerDocument || elem ) != document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; -}; - -Sizzle.escape = function( sel ) { - return ( sel + "" ).replace( rcssescape, fcssescape ); -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( ( elem = results[ i++ ] ) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - - // If no nodeType, this is expected to be an array - while ( ( node = elem[ i++ ] ) ) { - - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[ 1 ] = match[ 1 ].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[ 3 ] = ( match[ 3 ] || match[ 4 ] || - match[ 5 ] || "" ).replace( runescape, funescape ); - - if ( match[ 2 ] === "~=" ) { - match[ 3 ] = " " + match[ 3 ] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[ 1 ] = match[ 1 ].toLowerCase(); - - if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { - - // nth-* requires argument - if ( !match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[ 4 ] = +( match[ 4 ] ? - match[ 5 ] + ( match[ 6 ] || 1 ) : - 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); - match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); - - // other types prohibit arguments - } else if ( match[ 3 ] ) { - Sizzle.error( match[ 0 ] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[ 6 ] && match[ 2 ]; - - if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[ 3 ] ) { - match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - - // Get excess from tokenize (recursively) - ( excess = tokenize( unquoted, true ) ) && - - // advance to the next closing parenthesis - ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { - - // excess is a negative index - match[ 0 ] = match[ 0 ].slice( 0, excess ); - match[ 2 ] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { - return true; - } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - ( pattern = new RegExp( "(^|" + whitespace + - ")" + className + "(" + whitespace + "|$)" ) ) && classCache( - className, function( elem ) { - return pattern.test( - typeof elem.className === "string" && elem.className || - typeof elem.getAttribute !== "undefined" && - elem.getAttribute( "class" ) || - "" - ); - } ); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - /* eslint-disable max-len */ - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - /* eslint-enable max-len */ - - }; - }, - - "CHILD": function( type, what, _argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, _context, xml ) { - var cache, uniqueCache, outerCache, node, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType, - diff = false; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( ( node = node[ dir ] ) ) { - if ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) { - - return false; - } - } - - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // non-xml :nth-child(...) stores cache data on `parent` - if ( forward && useCache ) { - - // Seek `elem` from a previously-cached index - - // ...in a gzip-friendly way - node = parent; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex && cache[ 2 ]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( ( node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; - break; - } - } - - } else { - - // Use previously-cached element index if available - if ( useCache ) { - - // ...in a gzip-friendly way - node = elem; - outerCache = node[ expando ] || ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - cache = uniqueCache[ type ] || []; - nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; - diff = nodeIndex; - } - - // xml :nth-child(...) - // or :nth-last-child(...) or :nth(-last)?-of-type(...) - if ( diff === false ) { - - // Use the same loop as above to seek `elem` from the start - while ( ( node = ++nodeIndex && node && node[ dir ] || - ( diff = nodeIndex = 0 ) || start.pop() ) ) { - - if ( ( ofType ? - node.nodeName.toLowerCase() === name : - node.nodeType === 1 ) && - ++diff ) { - - // Cache the index of each encountered element - if ( useCache ) { - outerCache = node[ expando ] || - ( node[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ node.uniqueID ] || - ( outerCache[ node.uniqueID ] = {} ); - - uniqueCache[ type ] = [ dirruns, diff ]; - } - - if ( node === elem ) { - break; - } - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction( function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[ i ] ); - seed[ idx ] = !( matches[ idx ] = matched[ i ] ); - } - } ) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - - // Potentially complex pseudos - "not": markFunction( function( selector ) { - - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction( function( seed, matches, _context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( ( elem = unmatched[ i ] ) ) { - seed[ i ] = !( matches[ i ] = elem ); - } - } - } ) : - function( elem, _context, xml ) { - input[ 0 ] = elem; - matcher( input, null, xml, results ); - - // Don't keep the element (issue #299) - input[ 0 ] = null; - return !results.pop(); - }; - } ), - - "has": markFunction( function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - } ), - - "contains": markFunction( function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; - }; - } ), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - - // lang value must be a valid identifier - if ( !ridentifier.test( lang || "" ) ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( ( elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); - return false; - }; - } ), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && - ( !document.hasFocus || document.hasFocus() ) && - !!( elem.type || elem.href || ~elem.tabIndex ); - }, - - // Boolean properties - "enabled": createDisabledPseudo( false ), - "disabled": createDisabledPseudo( true ), - - "checked": function( elem ) { - - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return ( nodeName === "input" && !!elem.checked ) || - ( nodeName === "option" && !!elem.selected ); - }, - - "selected": function( elem ) { - - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - // eslint-disable-next-line no-unused-expressions - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos[ "empty" ]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( ( attr = elem.getAttribute( "type" ) ) == null || - attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo( function() { - return [ 0 ]; - } ), - - "last": createPositionalPseudo( function( _matchIndexes, length ) { - return [ length - 1 ]; - } ), - - "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - } ), - - "even": createPositionalPseudo( function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "odd": createPositionalPseudo( function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? - argument + length : - argument > length ? - length : - argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ), - - "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - } ) - } -}; - -Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || ( match = rcomma.exec( soFar ) ) ) { - if ( match ) { - - // Don't consume trailing commas as valid - soFar = soFar.slice( match[ 0 ].length ) || soFar; - } - groups.push( ( tokens = [] ) ); - } - - matched = false; - - // Combinators - if ( ( match = rcombinators.exec( soFar ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - - // Cast descendant combinators to space - type: match[ 0 ].replace( rtrim, " " ) - } ); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || - ( match = preFilters[ type ]( match ) ) ) ) { - matched = match.shift(); - tokens.push( { - value: matched, - type: type, - matches: match - } ); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[ i ].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - skip = combinator.next, - key = skip || dir, - checkNonElements = base && key === "parentNode", - doneName = done++; - - return combinator.first ? - - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - return false; - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, uniqueCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching - if ( xml ) { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( ( elem = elem[ dir ] ) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || ( elem[ expando ] = {} ); - - // Support: IE <9 only - // Defend against cloned attroperties (jQuery gh-1709) - uniqueCache = outerCache[ elem.uniqueID ] || - ( outerCache[ elem.uniqueID ] = {} ); - - if ( skip && skip === elem.nodeName.toLowerCase() ) { - elem = elem[ dir ] || elem; - } else if ( ( oldCache = uniqueCache[ key ] ) && - oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { - - // Assign to newCache so results back-propagate to previous elements - return ( newCache[ 2 ] = oldCache[ 2 ] ); - } else { - - // Reuse newcache so results back-propagate to previous elements - uniqueCache[ key ] = newCache; - - // A match means we're done; a fail means we have to keep checking - if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { - return true; - } - } - } - } - } - return false; - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[ i ]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[ 0 ]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[ i ], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( ( elem = unmatched[ i ] ) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction( function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( - selector || "*", - context.nodeType ? [ context ] : context, - [] - ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( ( elem = temp[ i ] ) ) { - matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) ) { - - // Restore matcherIn since elem is not yet a final match - temp.push( ( matcherIn[ i ] = elem ) ); - } - } - postFinder( null, ( matcherOut = [] ), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( ( elem = matcherOut[ i ] ) && - ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { - - seed[ temp ] = !( results[ temp ] = elem ); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - } ); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[ 0 ].type ], - implicitRelative = leadingRelative || Expr.relative[ " " ], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( - ( checkContext = context ).nodeType ? - matchContext( elem, context, xml ) : - matchAnyContext( elem, context, xml ) ); - - // Avoid hanging onto element (issue #299) - checkContext = null; - return ret; - } ]; - - for ( ; i < len; i++ ) { - if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { - matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; - } else { - matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[ j ].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens - .slice( 0, i - 1 ) - .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), - - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), - len = elems.length; - - if ( outermost ) { - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - outermostContext = context == document || context || outermost; - } - - // Add elements passing elementMatchers directly to results - // Support: IE<9, Safari - // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id - for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( !context && elem.ownerDocument != document ) { - setDocument( elem ); - xml = !documentIsHTML; - } - while ( ( matcher = elementMatchers[ j++ ] ) ) { - if ( matcher( elem, context || document, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - - // They will have gone through all possible matchers - if ( ( elem = !matcher && elem ) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // `i` is now the count of elements visited above, and adding it to `matchedCount` - // makes the latter nonnegative. - matchedCount += i; - - // Apply set filters to unmatched elements - // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` - // equals `i`), unless we didn't visit _any_ elements in the above loop because we have - // no element matchers and no seed. - // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that - // case, which will result in a "00" `matchedCount` that differs from `i` but is also - // numerically zero. - if ( bySet && i !== matchedCount ) { - j = 0; - while ( ( matcher = setMatchers[ j++ ] ) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !( unmatched[ i ] || setMatched[ i ] ) ) { - setMatched[ i ] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[ i ] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( - selector, - matcherFromGroupMatchers( elementMatchers, setMatchers ) - ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( ( selector = compiled.selector || selector ) ); - - results = results || []; - - // Try to minimize operations if there is only one selector in the list and no seed - // (the latter of which guarantees us context) - if ( match.length === 1 ) { - - // Reduce context if the leading compound selector is an ID - tokens = match[ 0 ] = match[ 0 ].slice( 0 ); - if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && - context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { - - context = ( Expr.find[ "ID" ]( token.matches[ 0 ] - .replace( runescape, funescape ), context ) || [] )[ 0 ]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[ i ]; - - // Abort if we hit a combinator - if ( Expr.relative[ ( type = token.type ) ] ) { - break; - } - if ( ( find = Expr.find[ type ] ) ) { - - // Search, expanding context for leading sibling combinators - if ( ( seed = find( - token.matches[ 0 ].replace( runescape, funescape ), - rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || - context - ) ) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - !context || rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert( function( el ) { - - // Should return 1, but returns 4 (following) - return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; -} ); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert( function( el ) { - el.innerHTML = ""; - return el.firstChild.getAttribute( "href" ) === "#"; -} ) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - } ); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert( function( el ) { - el.innerHTML = ""; - el.firstChild.setAttribute( "value", "" ); - return el.firstChild.getAttribute( "value" ) === ""; -} ) ) { - addHandle( "value", function( elem, _name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - } ); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert( function( el ) { - return el.getAttribute( "disabled" ) == null; -} ) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - ( val = elem.getAttributeNode( name ) ) && val.specified ? - val.value : - null; - } - } ); -} - -return Sizzle; - -} )( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; - -// Deprecated -jQuery.expr[ ":" ] = jQuery.expr.pseudos; -jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; -jQuery.escapeSelector = Sizzle.escape; - - - - -var dir = function( elem, dir, until ) { - var matched = [], - truncate = until !== undefined; - - while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { - if ( elem.nodeType === 1 ) { - if ( truncate && jQuery( elem ).is( until ) ) { - break; - } - matched.push( elem ); - } - } - return matched; -}; - - -var siblings = function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; -}; - - -var rneedsContext = jQuery.expr.match.needsContext; - - - -function nodeName( elem, name ) { - - return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); - -}; -var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); - - - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( isFunction( qualifier ) ) { - return jQuery.grep( elements, function( elem, i ) { - return !!qualifier.call( elem, i, elem ) !== not; - } ); - } - - // Single element - if ( qualifier.nodeType ) { - return jQuery.grep( elements, function( elem ) { - return ( elem === qualifier ) !== not; - } ); - } - - // Arraylike of elements (jQuery, arguments, Array) - if ( typeof qualifier !== "string" ) { - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) > -1 ) !== not; - } ); - } - - // Filtered directly for both simple and complex selectors - return jQuery.filter( qualifier, elements, not ); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - if ( elems.length === 1 && elem.nodeType === 1 ) { - return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; - } - - return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - } ) ); -}; - -jQuery.fn.extend( { - find: function( selector ) { - var i, ret, - len = this.length, - self = this; - - if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter( function() { - for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( self[ i ], this ) ) { - return true; - } - } - } ) ); - } - - ret = this.pushStack( [] ); - - for ( i = 0; i < len; i++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - return len > 1 ? jQuery.uniqueSort( ret ) : ret; - }, - filter: function( selector ) { - return this.pushStack( winnow( this, selector || [], false ) ); - }, - not: function( selector ) { - return this.pushStack( winnow( this, selector || [], true ) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -} ); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over to avoid XSS via location.hash (#9521) - // Strict HTML recognition (#11290: must start with <) - // Shortcut simple #id case for speed - rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, - - init = jQuery.fn.init = function( selector, context, root ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Method init() accepts an alternate rootjQuery - // so migrate can support jQuery.sub (gh-2101) - root = root || rootjQuery; - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[ 0 ] === "<" && - selector[ selector.length - 1 ] === ">" && - selector.length >= 3 ) { - - // Assume that strings that start and end with <> are HTML and skip the regex check - match = [ null, selector, null ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && ( match[ 1 ] || !context ) ) { - - // HANDLE: $(html) -> $(array) - if ( match[ 1 ] ) { - context = context instanceof jQuery ? context[ 0 ] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[ 1 ], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { - for ( match in context ) { - - // Properties of context are called as methods if possible - if ( isFunction( this[ match ] ) ) { - this[ match ]( context[ match ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[ 2 ] ); - - if ( elem ) { - - // Inject the element directly into the jQuery object - this[ 0 ] = elem; - this.length = 1; - } - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || root ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - this[ 0 ] = selector; - this.length = 1; - return this; - - // HANDLE: $(function) - // Shortcut for document ready - } else if ( isFunction( selector ) ) { - return root.ready !== undefined ? - root.ready( selector ) : - - // Execute immediately if ready is not present - selector( jQuery ); - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -rootjQuery = jQuery( document ); - - -var rparentsprev = /^(?:parents|prev(?:Until|All))/, - - // Methods guaranteed to produce a unique set when starting from a unique set - guaranteedUnique = { - children: true, - contents: true, - next: true, - prev: true - }; - -jQuery.fn.extend( { - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter( function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[ i ] ) ) { - return true; - } - } - } ); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - targets = typeof selectors !== "string" && jQuery( selectors ); - - // Positional selectors never match, since there's no _selection_ context - if ( !rneedsContext.test( selectors ) ) { - for ( ; i < l; i++ ) { - for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { - - // Always skip document fragments - if ( cur.nodeType < 11 && ( targets ? - targets.index( cur ) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector( cur, selectors ) ) ) { - - matched.push( cur ); - break; - } - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.uniqueSort( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter( selector ) - ); - } -} ); - -function sibling( cur, dir ) { - while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each( { - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, _i, until ) { - return dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, _i, until ) { - return dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, _i, until ) { - return dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return siblings( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return siblings( elem.firstChild ); - }, - contents: function( elem ) { - if ( elem.contentDocument != null && - - // Support: IE 11+ - // elements with no `data` attribute has an object - // `contentDocument` with a `null` prototype. - getProto( elem.contentDocument ) ) { - - return elem.contentDocument; - } - - // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only - // Treat the template element as a regular one in browsers that - // don't support it. - if ( nodeName( elem, "template" ) ) { - elem = elem.content || elem; - } - - return jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.uniqueSort( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -} ); -var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); - - - -// Convert String-formatted options into Object-formatted ones -function createOptions( options ) { - var object = {}; - jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { - object[ flag ] = true; - } ); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -jQuery.Callbacks = function( options ) { - - // Convert options from String-formatted to Object-formatted if needed - // (we check in cache first) - options = typeof options === "string" ? - createOptions( options ) : - jQuery.extend( {}, options ); - - var // Flag to know if list is currently firing - firing, - - // Last fire value for non-forgettable lists - memory, - - // Flag to know if list was already fired - fired, - - // Flag to prevent firing - locked, - - // Actual callback list - list = [], - - // Queue of execution data for repeatable lists - queue = [], - - // Index of currently firing callback (modified by add/remove as needed) - firingIndex = -1, - - // Fire callbacks - fire = function() { - - // Enforce single-firing - locked = locked || options.once; - - // Execute callbacks for all pending executions, - // respecting firingIndex overrides and runtime changes - fired = firing = true; - for ( ; queue.length; firingIndex = -1 ) { - memory = queue.shift(); - while ( ++firingIndex < list.length ) { - - // Run callback and check for early termination - if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && - options.stopOnFalse ) { - - // Jump to end and forget the data so .add doesn't re-fire - firingIndex = list.length; - memory = false; - } - } - } - - // Forget the data if we're done with it - if ( !options.memory ) { - memory = false; - } - - firing = false; - - // Clean up if we're done firing for good - if ( locked ) { - - // Keep an empty list if we have data for future add calls - if ( memory ) { - list = []; - - // Otherwise, this object is spent - } else { - list = ""; - } - } - }, - - // Actual Callbacks object - self = { - - // Add a callback or a collection of callbacks to the list - add: function() { - if ( list ) { - - // If we have memory from a past run, we should fire after adding - if ( memory && !firing ) { - firingIndex = list.length - 1; - queue.push( memory ); - } - - ( function add( args ) { - jQuery.each( args, function( _, arg ) { - if ( isFunction( arg ) ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && toType( arg ) !== "string" ) { - - // Inspect recursively - add( arg ); - } - } ); - } )( arguments ); - - if ( memory && !firing ) { - fire(); - } - } - return this; - }, - - // Remove a callback from the list - remove: function() { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - - // Handle firing indexes - if ( index <= firingIndex ) { - firingIndex--; - } - } - } ); - return this; - }, - - // Check if a given callback is in the list. - // If no argument is given, return whether or not list has callbacks attached. - has: function( fn ) { - return fn ? - jQuery.inArray( fn, list ) > -1 : - list.length > 0; - }, - - // Remove all callbacks from the list - empty: function() { - if ( list ) { - list = []; - } - return this; - }, - - // Disable .fire and .add - // Abort any current/pending executions - // Clear all callbacks and values - disable: function() { - locked = queue = []; - list = memory = ""; - return this; - }, - disabled: function() { - return !list; - }, - - // Disable .fire - // Also disable .add unless we have memory (since it would have no effect) - // Abort any pending executions - lock: function() { - locked = queue = []; - if ( !memory && !firing ) { - list = memory = ""; - } - return this; - }, - locked: function() { - return !!locked; - }, - - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( !locked ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - queue.push( args ); - if ( !firing ) { - fire(); - } - } - return this; - }, - - // Call all the callbacks with the given arguments - fire: function() { - self.fireWith( this, arguments ); - return this; - }, - - // To know if the callbacks have already been called at least once - fired: function() { - return !!fired; - } - }; - - return self; -}; - - -function Identity( v ) { - return v; -} -function Thrower( ex ) { - throw ex; -} - -function adoptValue( value, resolve, reject, noValue ) { - var method; - - try { - - // Check for promise aspect first to privilege synchronous behavior - if ( value && isFunction( ( method = value.promise ) ) ) { - method.call( value ).done( resolve ).fail( reject ); - - // Other thenables - } else if ( value && isFunction( ( method = value.then ) ) ) { - method.call( value, resolve, reject ); - - // Other non-thenables - } else { - - // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: - // * false: [ value ].slice( 0 ) => resolve( value ) - // * true: [ value ].slice( 1 ) => resolve() - resolve.apply( undefined, [ value ].slice( noValue ) ); - } - - // For Promises/A+, convert exceptions into rejections - // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in - // Deferred#then to conditionally suppress rejection. - } catch ( value ) { - - // Support: Android 4.0 only - // Strict mode functions invoked without .call/.apply get global-object context - reject.apply( undefined, [ value ] ); - } -} - -jQuery.extend( { - - Deferred: function( func ) { - var tuples = [ - - // action, add listener, callbacks, - // ... .then handlers, argument index, [final state] - [ "notify", "progress", jQuery.Callbacks( "memory" ), - jQuery.Callbacks( "memory" ), 2 ], - [ "resolve", "done", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 0, "resolved" ], - [ "reject", "fail", jQuery.Callbacks( "once memory" ), - jQuery.Callbacks( "once memory" ), 1, "rejected" ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - "catch": function( fn ) { - return promise.then( null, fn ); - }, - - // Keep pipe for back-compat - pipe: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - - return jQuery.Deferred( function( newDefer ) { - jQuery.each( tuples, function( _i, tuple ) { - - // Map tuples (progress, done, fail) to arguments (done, fail, progress) - var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; - - // deferred.progress(function() { bind to newDefer or newDefer.notify }) - // deferred.done(function() { bind to newDefer or newDefer.resolve }) - // deferred.fail(function() { bind to newDefer or newDefer.reject }) - deferred[ tuple[ 1 ] ]( function() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && isFunction( returned.promise ) ) { - returned.promise() - .progress( newDefer.notify ) - .done( newDefer.resolve ) - .fail( newDefer.reject ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( - this, - fn ? [ returned ] : arguments - ); - } - } ); - } ); - fns = null; - } ).promise(); - }, - then: function( onFulfilled, onRejected, onProgress ) { - var maxDepth = 0; - function resolve( depth, deferred, handler, special ) { - return function() { - var that = this, - args = arguments, - mightThrow = function() { - var returned, then; - - // Support: Promises/A+ section 2.3.3.3.3 - // https://promisesaplus.com/#point-59 - // Ignore double-resolution attempts - if ( depth < maxDepth ) { - return; - } - - returned = handler.apply( that, args ); - - // Support: Promises/A+ section 2.3.1 - // https://promisesaplus.com/#point-48 - if ( returned === deferred.promise() ) { - throw new TypeError( "Thenable self-resolution" ); - } - - // Support: Promises/A+ sections 2.3.3.1, 3.5 - // https://promisesaplus.com/#point-54 - // https://promisesaplus.com/#point-75 - // Retrieve `then` only once - then = returned && - - // Support: Promises/A+ section 2.3.4 - // https://promisesaplus.com/#point-64 - // Only check objects and functions for thenability - ( typeof returned === "object" || - typeof returned === "function" ) && - returned.then; - - // Handle a returned thenable - if ( isFunction( then ) ) { - - // Special processors (notify) just wait for resolution - if ( special ) { - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ) - ); - - // Normal processors (resolve) also hook into progress - } else { - - // ...and disregard older resolution values - maxDepth++; - - then.call( - returned, - resolve( maxDepth, deferred, Identity, special ), - resolve( maxDepth, deferred, Thrower, special ), - resolve( maxDepth, deferred, Identity, - deferred.notifyWith ) - ); - } - - // Handle all other returned values - } else { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Identity ) { - that = undefined; - args = [ returned ]; - } - - // Process the value(s) - // Default process is resolve - ( special || deferred.resolveWith )( that, args ); - } - }, - - // Only normal processors (resolve) catch and reject exceptions - process = special ? - mightThrow : - function() { - try { - mightThrow(); - } catch ( e ) { - - if ( jQuery.Deferred.exceptionHook ) { - jQuery.Deferred.exceptionHook( e, - process.stackTrace ); - } - - // Support: Promises/A+ section 2.3.3.3.4.1 - // https://promisesaplus.com/#point-61 - // Ignore post-resolution exceptions - if ( depth + 1 >= maxDepth ) { - - // Only substitute handlers pass on context - // and multiple values (non-spec behavior) - if ( handler !== Thrower ) { - that = undefined; - args = [ e ]; - } - - deferred.rejectWith( that, args ); - } - } - }; - - // Support: Promises/A+ section 2.3.3.3.1 - // https://promisesaplus.com/#point-57 - // Re-resolve promises immediately to dodge false rejection from - // subsequent errors - if ( depth ) { - process(); - } else { - - // Call an optional hook to record the stack, in case of exception - // since it's otherwise lost when execution goes async - if ( jQuery.Deferred.getStackHook ) { - process.stackTrace = jQuery.Deferred.getStackHook(); - } - window.setTimeout( process ); - } - }; - } - - return jQuery.Deferred( function( newDefer ) { - - // progress_handlers.add( ... ) - tuples[ 0 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onProgress ) ? - onProgress : - Identity, - newDefer.notifyWith - ) - ); - - // fulfilled_handlers.add( ... ) - tuples[ 1 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onFulfilled ) ? - onFulfilled : - Identity - ) - ); - - // rejected_handlers.add( ... ) - tuples[ 2 ][ 3 ].add( - resolve( - 0, - newDefer, - isFunction( onRejected ) ? - onRejected : - Thrower - ) - ); - } ).promise(); - }, - - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 5 ]; - - // promise.progress = list.add - // promise.done = list.add - // promise.fail = list.add - promise[ tuple[ 1 ] ] = list.add; - - // Handle state - if ( stateString ) { - list.add( - function() { - - // state = "resolved" (i.e., fulfilled) - // state = "rejected" - state = stateString; - }, - - // rejected_callbacks.disable - // fulfilled_callbacks.disable - tuples[ 3 - i ][ 2 ].disable, - - // rejected_handlers.disable - // fulfilled_handlers.disable - tuples[ 3 - i ][ 3 ].disable, - - // progress_callbacks.lock - tuples[ 0 ][ 2 ].lock, - - // progress_handlers.lock - tuples[ 0 ][ 3 ].lock - ); - } - - // progress_handlers.fire - // fulfilled_handlers.fire - // rejected_handlers.fire - list.add( tuple[ 3 ].fire ); - - // deferred.notify = function() { deferred.notifyWith(...) } - // deferred.resolve = function() { deferred.resolveWith(...) } - // deferred.reject = function() { deferred.rejectWith(...) } - deferred[ tuple[ 0 ] ] = function() { - deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); - return this; - }; - - // deferred.notifyWith = list.fireWith - // deferred.resolveWith = list.fireWith - // deferred.rejectWith = list.fireWith - deferred[ tuple[ 0 ] + "With" ] = list.fireWith; - } ); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( singleValue ) { - var - - // count of uncompleted subordinates - remaining = arguments.length, - - // count of unprocessed arguments - i = remaining, - - // subordinate fulfillment data - resolveContexts = Array( i ), - resolveValues = slice.call( arguments ), - - // the master Deferred - master = jQuery.Deferred(), - - // subordinate callback factory - updateFunc = function( i ) { - return function( value ) { - resolveContexts[ i ] = this; - resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( !( --remaining ) ) { - master.resolveWith( resolveContexts, resolveValues ); - } - }; - }; - - // Single- and empty arguments are adopted like Promise.resolve - if ( remaining <= 1 ) { - adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, - !remaining ); - - // Use .then() to unwrap secondary thenables (cf. gh-3000) - if ( master.state() === "pending" || - isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { - - return master.then(); - } - } - - // Multiple arguments are aggregated like Promise.all array elements - while ( i-- ) { - adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); - } - - return master.promise(); - } -} ); - - -// These usually indicate a programmer mistake during development, -// warn about them ASAP rather than swallowing them by default. -var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; - -jQuery.Deferred.exceptionHook = function( error, stack ) { - - // Support: IE 8 - 9 only - // Console exists when dev tools are open, which can happen at any time - if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { - window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); - } -}; - - - - -jQuery.readyException = function( error ) { - window.setTimeout( function() { - throw error; - } ); -}; - - - - -// The deferred used on DOM ready -var readyList = jQuery.Deferred(); - -jQuery.fn.ready = function( fn ) { - - readyList - .then( fn ) - - // Wrap jQuery.readyException in a function so that the lookup - // happens at the time of error handling instead of callback - // registration. - .catch( function( error ) { - jQuery.readyException( error ); - } ); - - return this; -}; - -jQuery.extend( { - - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - } -} ); - -jQuery.ready.then = readyList.then; - -// The ready event handler and self cleanup method -function completed() { - document.removeEventListener( "DOMContentLoaded", completed ); - window.removeEventListener( "load", completed ); - jQuery.ready(); -} - -// Catch cases where $(document).ready() is called -// after the browser event has already occurred. -// Support: IE <=9 - 10 only -// Older IE sometimes signals "interactive" too soon -if ( document.readyState === "complete" || - ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { - - // Handle it asynchronously to allow scripts the opportunity to delay ready - window.setTimeout( jQuery.ready ); - -} else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed ); -} - - - - -// Multifunctional method to get and set values of a collection -// The value/s can optionally be executed if it's a function -var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { - var i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( toType( key ) === "object" ) { - chainable = true; - for ( i in key ) { - access( elems, fn, i, key[ i ], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, _key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( - elems[ i ], key, raw ? - value : - value.call( elems[ i ], i, fn( elems[ i ], key ) ) - ); - } - } - } - - if ( chainable ) { - return elems; - } - - // Gets - if ( bulk ) { - return fn.call( elems ); - } - - return len ? fn( elems[ 0 ], key ) : emptyGet; -}; - - -// Matches dashed string for camelizing -var rmsPrefix = /^-ms-/, - rdashAlpha = /-([a-z])/g; - -// Used by camelCase as callback to replace() -function fcamelCase( _all, letter ) { - return letter.toUpperCase(); -} - -// Convert dashed to camelCase; used by the css and data modules -// Support: IE <=9 - 11, Edge 12 - 15 -// Microsoft forgot to hump their vendor prefix (#9572) -function camelCase( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); -} -var acceptData = function( owner ) { - - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - - - -function Data() { - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; - -Data.prototype = { - - cache: function( owner ) { - - // Check if the owner object already has a cache - var value = owner[ this.expando ]; - - // If not, create one - if ( !value ) { - value = {}; - - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return an empty object. - if ( acceptData( owner ) ) { - - // If it is a node unlikely to be stringify-ed or looped over - // use plain assignment - if ( owner.nodeType ) { - owner[ this.expando ] = value; - - // Otherwise secure it in a non-enumerable property - // configurable must be true to allow the property to be - // deleted when data is removed - } else { - Object.defineProperty( owner, this.expando, { - value: value, - configurable: true - } ); - } - } - } - - return value; - }, - set: function( owner, data, value ) { - var prop, - cache = this.cache( owner ); - - // Handle: [ owner, key, value ] args - // Always use camelCase key (gh-2257) - if ( typeof data === "string" ) { - cache[ camelCase( data ) ] = value; - - // Handle: [ owner, { properties } ] args - } else { - - // Copy the properties one-by-one to the cache object - for ( prop in data ) { - cache[ camelCase( prop ) ] = data[ prop ]; - } - } - return cache; - }, - get: function( owner, key ) { - return key === undefined ? - this.cache( owner ) : - - // Always use camelCase key (gh-2257) - owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; - }, - access: function( owner, key, value ) { - - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ( ( key && typeof key === "string" ) && value === undefined ) ) { - - return this.get( owner, key ); - } - - // When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, - cache = owner[ this.expando ]; - - if ( cache === undefined ) { - return; - } - - if ( key !== undefined ) { - - // Support array or space separated string of keys - if ( Array.isArray( key ) ) { - - // If key is an array of keys... - // We always set camelCase keys, so remove that. - key = key.map( camelCase ); - } else { - key = camelCase( key ); - - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - key = key in cache ? - [ key ] : - ( key.match( rnothtmlwhite ) || [] ); - } - - i = key.length; - - while ( i-- ) { - delete cache[ key[ i ] ]; - } - } - - // Remove the expando if there's no more data - if ( key === undefined || jQuery.isEmptyObject( cache ) ) { - - // Support: Chrome <=35 - 45 - // Webkit & Blink performance suffers when deleting properties - // from DOM nodes, so set to undefined instead - // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) - if ( owner.nodeType ) { - owner[ this.expando ] = undefined; - } else { - delete owner[ this.expando ]; - } - } - }, - hasData: function( owner ) { - var cache = owner[ this.expando ]; - return cache !== undefined && !jQuery.isEmptyObject( cache ); - } -}; -var dataPriv = new Data(); - -var dataUser = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /[A-Z]/g; - -function getData( data ) { - if ( data === "true" ) { - return true; - } - - if ( data === "false" ) { - return false; - } - - if ( data === "null" ) { - return null; - } - - // Only convert to a number if it doesn't change the string - if ( data === +data + "" ) { - return +data; - } - - if ( rbrace.test( data ) ) { - return JSON.parse( data ); - } - - return data; -} - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - data = getData( data ); - } catch ( e ) {} - - // Make sure we set the data so it isn't changed later - dataUser.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend( { - hasData: function( elem ) { - return dataUser.hasData( elem ) || dataPriv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return dataUser.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - dataUser.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to dataPriv methods, these can be deprecated. - _data: function( elem, name, data ) { - return dataPriv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - dataPriv.remove( elem, name ); - } -} ); - -jQuery.fn.extend( { - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = dataUser.get( elem ); - - if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE 11 only - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = camelCase( name.slice( 5 ) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - dataPriv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each( function() { - dataUser.set( this, key ); - } ); - } - - return access( this, function( value ) { - var data; - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - - // Attempt to get data from the cache - // The key will always be camelCased in Data - data = dataUser.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, key ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each( function() { - - // We always store the camelCased key - dataUser.set( this, key, value ); - } ); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each( function() { - dataUser.remove( this, key ); - } ); - } -} ); - - -jQuery.extend( { - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = dataPriv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || Array.isArray( data ) ) { - queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { - empty: jQuery.Callbacks( "once memory" ).add( function() { - dataPriv.remove( elem, [ type + "queue", key ] ); - } ) - } ); - } -} ); - -jQuery.fn.extend( { - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[ 0 ], type ); - } - - return data === undefined ? - this : - this.each( function() { - var queue = jQuery.queue( this, type, data ); - - // Ensure a hooks for this queue - jQuery._queueHooks( this, type ); - - if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { - jQuery.dequeue( this, type ); - } - } ); - }, - dequeue: function( type ) { - return this.each( function() { - jQuery.dequeue( this, type ); - } ); - }, - clearQueue: function( type ) { - return this.queue( type || "fx", [] ); - }, - - // Get a promise resolved when queues of a certain type - // are emptied (fx is the type by default) - promise: function( type, obj ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -} ); -var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; - -var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); - - -var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; - -var documentElement = document.documentElement; - - - - var isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ); - }, - composed = { composed: true }; - - // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only - // Check attachment across shadow DOM boundaries when possible (gh-3504) - // Support: iOS 10.0-10.2 only - // Early iOS 10 versions support `attachShadow` but not `getRootNode`, - // leading to errors. We need to check for `getRootNode`. - if ( documentElement.getRootNode ) { - isAttached = function( elem ) { - return jQuery.contains( elem.ownerDocument, elem ) || - elem.getRootNode( composed ) === elem.ownerDocument; - }; - } -var isHiddenWithinTree = function( elem, el ) { - - // isHiddenWithinTree might be called from jQuery#filter function; - // in that case, element will be second argument - elem = el || elem; - - // Inline style trumps all - return elem.style.display === "none" || - elem.style.display === "" && - - // Otherwise, check computed style - // Support: Firefox <=43 - 45 - // Disconnected elements can have computed display: none, so first confirm that elem is - // in the document. - isAttached( elem ) && - - jQuery.css( elem, "display" ) === "none"; - }; - - - -function adjustCSS( elem, prop, valueParts, tween ) { - var adjusted, scale, - maxIterations = 20, - currentValue = tween ? - function() { - return tween.cur(); - } : - function() { - return jQuery.css( elem, prop, "" ); - }, - initial = currentValue(), - unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - initialInUnit = elem.nodeType && - ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && - rcssNum.exec( jQuery.css( elem, prop ) ); - - if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { - - // Support: Firefox <=54 - // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) - initial = initial / 2; - - // Trust units reported by jQuery.css - unit = unit || initialInUnit[ 3 ]; - - // Iteratively approximate from a nonzero starting point - initialInUnit = +initial || 1; - - while ( maxIterations-- ) { - - // Evaluate and update our best guess (doubling guesses that zero out). - // Finish if the scale equals or crosses 1 (making the old*new product non-positive). - jQuery.style( elem, prop, initialInUnit + unit ); - if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { - maxIterations = 0; - } - initialInUnit = initialInUnit / scale; - - } - - initialInUnit = initialInUnit * 2; - jQuery.style( elem, prop, initialInUnit + unit ); - - // Make sure we update the tween properties later on - valueParts = valueParts || []; - } - - if ( valueParts ) { - initialInUnit = +initialInUnit || +initial || 0; - - // Apply relative offset (+=/-=) if specified - adjusted = valueParts[ 1 ] ? - initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : - +valueParts[ 2 ]; - if ( tween ) { - tween.unit = unit; - tween.start = initialInUnit; - tween.end = adjusted; - } - } - return adjusted; -} - - -var defaultDisplayMap = {}; - -function getDefaultDisplay( elem ) { - var temp, - doc = elem.ownerDocument, - nodeName = elem.nodeName, - display = defaultDisplayMap[ nodeName ]; - - if ( display ) { - return display; - } - - temp = doc.body.appendChild( doc.createElement( nodeName ) ); - display = jQuery.css( temp, "display" ); - - temp.parentNode.removeChild( temp ); - - if ( display === "none" ) { - display = "block"; - } - defaultDisplayMap[ nodeName ] = display; - - return display; -} - -function showHide( elements, show ) { - var display, elem, - values = [], - index = 0, - length = elements.length; - - // Determine new display value for elements that need to change - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - display = elem.style.display; - if ( show ) { - - // Since we force visibility upon cascade-hidden elements, an immediate (and slow) - // check is required in this first loop unless we have a nonempty display value (either - // inline or about-to-be-restored) - if ( display === "none" ) { - values[ index ] = dataPriv.get( elem, "display" ) || null; - if ( !values[ index ] ) { - elem.style.display = ""; - } - } - if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { - values[ index ] = getDefaultDisplay( elem ); - } - } else { - if ( display !== "none" ) { - values[ index ] = "none"; - - // Remember what we're overwriting - dataPriv.set( elem, "display", display ); - } - } - } - - // Set the display of the elements in a second loop to avoid constant reflow - for ( index = 0; index < length; index++ ) { - if ( values[ index ] != null ) { - elements[ index ].style.display = values[ index ]; - } - } - - return elements; -} - -jQuery.fn.extend( { - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each( function() { - if ( isHiddenWithinTree( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - } ); - } -} ); -var rcheckableType = ( /^(?:checkbox|radio)$/i ); - -var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); - -var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); - - - -( function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Android 4.0 - 4.3 only - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Android <=4.1 only - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE <=11 only - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = ""; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; - - // Support: IE <=9 only - // IE <=9 replaces "; - support.option = !!div.lastChild; -} )(); - - -// We have to close these tags to support XHTML (#13200) -var wrapMap = { - - // XHTML parsers do not magically insert elements in the - // same way that tag soup parsers do. So we cannot shorten - // this by omitting or other required elements. - thead: [ 1, "", "
    " ], - col: [ 2, "", "
    " ], - tr: [ 2, "", "
    " ], - td: [ 3, "", "
    " ], - - _default: [ 0, "", "" ] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <=9 only -if ( !support.option ) { - wrapMap.optgroup = wrapMap.option = [ 1, "" ]; -} - - -function getAll( context, tag ) { - - // Support: IE <=9 - 11 only - // Use typeof to avoid zero-argument method invocation on host objects (#15151) - var ret; - - if ( typeof context.getElementsByTagName !== "undefined" ) { - ret = context.getElementsByTagName( tag || "*" ); - - } else if ( typeof context.querySelectorAll !== "undefined" ) { - ret = context.querySelectorAll( tag || "*" ); - - } else { - ret = []; - } - - if ( tag === undefined || tag && nodeName( context, tag ) ) { - return jQuery.merge( [ context ], ret ); - } - - return ret; -} - - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - dataPriv.set( - elems[ i ], - "globalEval", - !refElements || dataPriv.get( refElements[ i ], "globalEval" ) - ); - } -} - - -var rhtml = /<|&#?\w+;/; - -function buildFragment( elems, context, scripts, selection, ignored ) { - var elem, tmp, tag, wrap, attached, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( toType( elem ) === "object" ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); - - // Deserialize a standard representation - tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - i = 0; - while ( ( elem = nodes[ i++ ] ) ) { - - // Skip elements already in the context collection (trac-4087) - if ( selection && jQuery.inArray( elem, selection ) > -1 ) { - if ( ignored ) { - ignored.push( elem ); - } - continue; - } - - attached = isAttached( elem ); - - // Append to fragment - tmp = getAll( fragment.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( attached ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( ( elem = tmp[ j++ ] ) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - return fragment; -} - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -// Support: IE <=9 - 11+ -// focus() and blur() are asynchronous, except when they are no-op. -// So expect focus to be synchronous when the element is already active, -// and blur to be synchronous when the element is not already active. -// (focus and blur are always synchronous in other supported browsers, -// this just defines when we can count on it). -function expectSync( elem, type ) { - return ( elem === safeActiveElement() ) === ( type === "focus" ); -} - -// Support: IE <=9 only -// Accessing document.activeElement can throw unexpectedly -// https://bugs.jquery.com/ticket/13393 -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -function on( elem, types, selector, data, fn, one ) { - var origFn, type; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - on( elem, type, selector, data, types[ type ], one ); - } - return elem; - } - - if ( data == null && fn == null ) { - - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return elem; - } - - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return elem.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - } ); -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.get( elem ); - - // Only attach events to objects that accept data - if ( !acceptData( elem ) ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Ensure that invalid selectors throw exceptions at attach time - // Evaluate against documentElement in case elem is a non-element node (e.g., document) - if ( selector ) { - jQuery.find.matchesSelector( documentElement, selector ); - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !( events = elemData.events ) ) { - events = elemData.events = Object.create( null ); - } - if ( !( eventHandle = elemData.handle ) ) { - eventHandle = elemData.handle = function( e ) { - - // Discard the second event of a jQuery.event.trigger() and - // when an event is called after a page has unloaded - return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // There *must* be a type, no attaching namespace-only handlers - if ( !type ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend( { - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join( "." ) - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !( handlers = events[ type ] ) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || - special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); - - if ( !elemData || !( events = elemData.events ) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - tmp = rtypenamespace.exec( types[ t ] ) || []; - type = origType = tmp[ 1 ]; - namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); - - // Unbind all events (on this namespace, if provided) for the element - if ( !type ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[ 2 ] && - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || - selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // Remove generic event handler if we removed something and no more handlers exist - // (avoids potential for endless recursion during removal of special event handlers) - if ( origCount && !handlers.length ) { - if ( !special.teardown || - special.teardown.call( elem, namespaces, elemData.handle ) === false ) { - - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove data and the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - dataPriv.remove( elem, "handle events" ); - } - }, - - dispatch: function( nativeEvent ) { - - var i, j, ret, matched, handleObj, handlerQueue, - args = new Array( arguments.length ), - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( nativeEvent ), - - handlers = ( - dataPriv.get( this, "events" ) || Object.create( null ) - )[ event.type ] || [], - special = jQuery.event.special[ event.type ] || {}; - - // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[ 0 ] = event; - - for ( i = 1; i < arguments.length; i++ ) { - args[ i ] = arguments[ i ]; - } - - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - while ( ( handleObj = matched.handlers[ j++ ] ) && - !event.isImmediatePropagationStopped() ) { - - // If the event is namespaced, then each handler is only invoked if it is - // specially universal or its namespaces are a superset of the event's. - if ( !event.rnamespace || handleObj.namespace === false || - event.rnamespace.test( handleObj.namespace ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || - handleObj.handler ).apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( ( event.result = ret ) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, handleObj, sel, matchedHandlers, matchedSelectors, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - if ( delegateCount && - - // Support: IE <=9 - // Black-hole SVG instance trees (trac-13180) - cur.nodeType && - - // Support: Firefox <=42 - // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) - // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click - // Support: IE 11 only - // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) - !( event.type === "click" && event.button >= 1 ) ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't check non-elements (#13208) - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { - matchedHandlers = []; - matchedSelectors = {}; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matchedSelectors[ sel ] === undefined ) { - matchedSelectors[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) > -1 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matchedSelectors[ sel ] ) { - matchedHandlers.push( handleObj ); - } - } - if ( matchedHandlers.length ) { - handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); - } - } - } - } - - // Add the remaining (directly-bound) handlers - cur = this; - if ( delegateCount < handlers.length ) { - handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); - } - - return handlerQueue; - }, - - addProp: function( name, hook ) { - Object.defineProperty( jQuery.Event.prototype, name, { - enumerable: true, - configurable: true, - - get: isFunction( hook ) ? - function() { - if ( this.originalEvent ) { - return hook( this.originalEvent ); - } - } : - function() { - if ( this.originalEvent ) { - return this.originalEvent[ name ]; - } - }, - - set: function( value ) { - Object.defineProperty( this, name, { - enumerable: true, - configurable: true, - writable: true, - value: value - } ); - } - } ); - }, - - fix: function( originalEvent ) { - return originalEvent[ jQuery.expando ] ? - originalEvent : - new jQuery.Event( originalEvent ); - }, - - special: { - load: { - - // Prevent triggered image.load events from bubbling to window.load - noBubble: true - }, - click: { - - // Utilize native event to ensure correct state for checkable inputs - setup: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Claim the first handler - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - // dataPriv.set( el, "click", ... ) - leverageNative( el, "click", returnTrue ); - } - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function( data ) { - - // For mutual compressibility with _default, replace `this` access with a local var. - // `|| data` is dead code meant only to preserve the variable through minification. - var el = this || data; - - // Force setup before triggering a click - if ( rcheckableType.test( el.type ) && - el.click && nodeName( el, "input" ) ) { - - leverageNative( el, "click" ); - } - - // Return non-false to allow normal event-path propagation - return true; - }, - - // For cross-browser consistency, suppress native .click() on links - // Also prevent it if we're currently inside a leveraged native-event stack - _default: function( event ) { - var target = event.target; - return rcheckableType.test( target.type ) && - target.click && nodeName( target, "input" ) && - dataPriv.get( target, "click" ) || - nodeName( target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - } -}; - -// Ensure the presence of an event listener that handles manually-triggered -// synthetic events by interrupting progress until reinvoked in response to -// *native* events that it fires directly, ensuring that state changes have -// already occurred before other listeners are invoked. -function leverageNative( el, type, expectSync ) { - - // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add - if ( !expectSync ) { - if ( dataPriv.get( el, type ) === undefined ) { - jQuery.event.add( el, type, returnTrue ); - } - return; - } - - // Register the controller as a special universal handler for all event namespaces - dataPriv.set( el, type, false ); - jQuery.event.add( el, type, { - namespace: false, - handler: function( event ) { - var notAsync, result, - saved = dataPriv.get( this, type ); - - if ( ( event.isTrigger & 1 ) && this[ type ] ) { - - // Interrupt processing of the outer synthetic .trigger()ed event - // Saved data should be false in such cases, but might be a leftover capture object - // from an async native handler (gh-4350) - if ( !saved.length ) { - - // Store arguments for use when handling the inner native event - // There will always be at least one argument (an event object), so this array - // will not be confused with a leftover capture object. - saved = slice.call( arguments ); - dataPriv.set( this, type, saved ); - - // Trigger the native event and capture its result - // Support: IE <=9 - 11+ - // focus() and blur() are asynchronous - notAsync = expectSync( this, type ); - this[ type ](); - result = dataPriv.get( this, type ); - if ( saved !== result || notAsync ) { - dataPriv.set( this, type, false ); - } else { - result = {}; - } - if ( saved !== result ) { - - // Cancel the outer synthetic event - event.stopImmediatePropagation(); - event.preventDefault(); - return result.value; - } - - // If this is an inner synthetic event for an event with a bubbling surrogate - // (focus or blur), assume that the surrogate already propagated from triggering the - // native event and prevent that from happening again here. - // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the - // bubbling surrogate propagates *after* the non-bubbling base), but that seems - // less bad than duplication. - } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { - event.stopPropagation(); - } - - // If this is a native event triggered above, everything is now in order - // Fire an inner synthetic event with the original arguments - } else if ( saved.length ) { - - // ...and capture the result - dataPriv.set( this, type, { - value: jQuery.event.trigger( - - // Support: IE <=9 - 11+ - // Extend with the prototype to reset the above stopImmediatePropagation() - jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), - saved.slice( 1 ), - this - ) - } ); - - // Abort handling of the native event - event.stopImmediatePropagation(); - } - } - } ); -} - -jQuery.removeEvent = function( elem, type, handle ) { - - // This "if" is needed for plain objects - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle ); - } -}; - -jQuery.Event = function( src, props ) { - - // Allow instantiation without the 'new' keyword - if ( !( this instanceof jQuery.Event ) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - - // Support: Android <=2.3 only - src.returnValue === false ? - returnTrue : - returnFalse; - - // Create target properties - // Support: Safari <=6 - 7 only - // Target should not be a text node (#504, #13143) - this.target = ( src.target && src.target.nodeType === 3 ) ? - src.target.parentNode : - src.target; - - this.currentTarget = src.currentTarget; - this.relatedTarget = src.relatedTarget; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || Date.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding -// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html -jQuery.Event.prototype = { - constructor: jQuery.Event, - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - isSimulated: false, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && !this.isSimulated ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && !this.isSimulated ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Includes all common event props including KeyEvent and MouseEvent specific props -jQuery.each( { - altKey: true, - bubbles: true, - cancelable: true, - changedTouches: true, - ctrlKey: true, - detail: true, - eventPhase: true, - metaKey: true, - pageX: true, - pageY: true, - shiftKey: true, - view: true, - "char": true, - code: true, - charCode: true, - key: true, - keyCode: true, - button: true, - buttons: true, - clientX: true, - clientY: true, - offsetX: true, - offsetY: true, - pointerId: true, - pointerType: true, - screenX: true, - screenY: true, - targetTouches: true, - toElement: true, - touches: true, - - which: function( event ) { - var button = event.button; - - // Add which for key events - if ( event.which == null && rkeyEvent.test( event.type ) ) { - return event.charCode != null ? event.charCode : event.keyCode; - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { - if ( button & 1 ) { - return 1; - } - - if ( button & 2 ) { - return 3; - } - - if ( button & 4 ) { - return 2; - } - - return 0; - } - - return event.which; - } -}, jQuery.event.addProp ); - -jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { - jQuery.event.special[ type ] = { - - // Utilize native event if possible so blur/focus sequence is correct - setup: function() { - - // Claim the first handler - // dataPriv.set( this, "focus", ... ) - // dataPriv.set( this, "blur", ... ) - leverageNative( this, type, expectSync ); - - // Return false to allow normal processing in the caller - return false; - }, - trigger: function() { - - // Force setup before trigger - leverageNative( this, type ); - - // Return non-false to allow normal event-path propagation - return true; - }, - - delegateType: delegateType - }; -} ); - -// Create mouseenter/leave events using mouseover/out and event-time checks -// so that event delegation works in jQuery. -// Do the same for pointerenter/pointerleave and pointerover/pointerout -// -// Support: Safari 7 only -// Safari sends mouseenter too often; see: -// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 -// for the description of the bug (it existed in older Chrome versions as well). -jQuery.each( { - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mouseenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -} ); - -jQuery.fn.extend( { - - on: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn ); - }, - one: function( types, selector, data, fn ) { - return on( this, types, selector, data, fn, 1 ); - }, - off: function( types, selector, fn ) { - var handleObj, type; - if ( types && types.preventDefault && types.handleObj ) { - - // ( event ) dispatched jQuery.Event - handleObj = types.handleObj; - jQuery( types.delegateTarget ).off( - handleObj.namespace ? - handleObj.origType + "." + handleObj.namespace : - handleObj.origType, - handleObj.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each( function() { - jQuery.event.remove( this, types, fn, selector ); - } ); - } -} ); - - -var - - // Support: IE <=10 - 11, Edge 12 - 13 only - // In IE/Edge using regex groups here causes severe slowdowns. - // See https://connect.microsoft.com/IE/feedback/details/1736512/ - rnoInnerhtml = /\s*$/g; - -// Prefer a tbody over its parent table for containing new rows -function manipulationTarget( elem, content ) { - if ( nodeName( elem, "table" ) && - nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { - - return jQuery( elem ).children( "tbody" )[ 0 ] || elem; - } - - return elem; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { - elem.type = elem.type.slice( 5 ); - } else { - elem.removeAttribute( "type" ); - } - - return elem; -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( dataPriv.hasData( src ) ) { - pdataOld = dataPriv.get( src ); - events = pdataOld.events; - - if ( events ) { - dataPriv.remove( dest, "handle events" ); - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( dataUser.hasData( src ) ) { - udataOld = dataUser.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - dataUser.set( dest, udataCur ); - } -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -function domManip( collection, args, callback, ignored ) { - - // Flatten any nested arrays - args = flat( args ); - - var fragment, first, scripts, hasScripts, node, doc, - i = 0, - l = collection.length, - iNoClone = l - 1, - value = args[ 0 ], - valueIsFunction = isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( valueIsFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return collection.each( function( index ) { - var self = collection.eq( index ); - if ( valueIsFunction ) { - args[ 0 ] = value.call( this, index, self.html() ); - } - domManip( self, args, callback, ignored ); - } ); - } - - if ( l ) { - fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - // Require either new content or an interest in ignored elements to invoke the callback - if ( first || ignored ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item - // instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - - // Support: Android <=4.0 only, PhantomJS 1 only - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( collection[ i ], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !dataPriv.access( node, "globalEval" ) && - jQuery.contains( doc, node ) ) { - - if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { - - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl && !node.noModule ) { - jQuery._evalUrl( node.src, { - nonce: node.nonce || node.getAttribute( "nonce" ) - }, doc ); - } - } else { - DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); - } - } - } - } - } - } - - return collection; -} - -function remove( elem, selector, keepData ) { - var node, - nodes = selector ? jQuery.filter( selector, elem ) : elem, - i = 0; - - for ( ; ( node = nodes[ i ] ) != null; i++ ) { - if ( !keepData && node.nodeType === 1 ) { - jQuery.cleanData( getAll( node ) ); - } - - if ( node.parentNode ) { - if ( keepData && isAttached( node ) ) { - setGlobalEval( getAll( node, "script" ) ); - } - node.parentNode.removeChild( node ); - } - } - - return elem; -} - -jQuery.extend( { - htmlPrefilter: function( html ) { - return html; - }, - - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = isAttached( elem ); - - // Fix IE cloning issues - if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && - !jQuery.isXMLDoc( elem ) ) { - - // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 - destElements = getAll( clone ); - srcElements = getAll( elem ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - cleanData: function( elems ) { - var data, elem, type, - special = jQuery.event.special, - i = 0; - - for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { - if ( acceptData( elem ) ) { - if ( ( data = elem[ dataPriv.expando ] ) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataPriv.expando ] = undefined; - } - if ( elem[ dataUser.expando ] ) { - - // Support: Chrome <=35 - 45+ - // Assign undefined instead of using delete, see Data#remove - elem[ dataUser.expando ] = undefined; - } - } - } - } -} ); - -jQuery.fn.extend( { - detach: function( selector ) { - return remove( this, selector, true ); - }, - - remove: function( selector ) { - return remove( this, selector ); - }, - - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each( function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - } ); - }, null, value, arguments.length ); - }, - - append: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.appendChild( elem ); - } - } ); - }, - - prepend: function() { - return domManip( this, arguments, function( elem ) { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - var target = manipulationTarget( this, elem ); - target.insertBefore( elem, target.firstChild ); - } - } ); - }, - - before: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - } ); - }, - - after: function() { - return domManip( this, arguments, function( elem ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this.nextSibling ); - } - } ); - }, - - empty: function() { - var elem, - i = 0; - - for ( ; ( elem = this[ i ] ) != null; i++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map( function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - } ); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = jQuery.htmlPrefilter( value ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch ( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - replaceWith: function() { - var ignored = []; - - // Make the changes, replacing each non-ignored context element with the new content - return domManip( this, arguments, function( elem ) { - var parent = this.parentNode; - - if ( jQuery.inArray( this, ignored ) < 0 ) { - jQuery.cleanData( getAll( this ) ); - if ( parent ) { - parent.replaceChild( elem, this ); - } - } - - // Force callback invocation - }, ignored ); - } -} ); - -jQuery.each( { - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: Android <=4.0 only, PhantomJS 1 only - // .get() because push.apply(_, arraylike) throws on ancient WebKit - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -} ); -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - - // Support: IE <=11 only, Firefox <=30 (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - var view = elem.ownerDocument.defaultView; - - if ( !view || !view.opener ) { - view = window; - } - - return view.getComputedStyle( elem ); - }; - -var swap = function( elem, options, callback ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.call( elem ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); - - - -( function() { - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computeStyleTests() { - - // This is a singleton, we need to execute it only once - if ( !div ) { - return; - } - - container.style.cssText = "position:absolute;left:-11111px;width:60px;" + - "margin-top:1px;padding:0;border:0"; - div.style.cssText = - "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + - "margin:auto;border:1px;padding:1px;" + - "width:60%;top:1%"; - documentElement.appendChild( container ).appendChild( div ); - - var divStyle = window.getComputedStyle( div ); - pixelPositionVal = divStyle.top !== "1%"; - - // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 - reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; - - // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 - // Some styles come back with percentage values, even though they shouldn't - div.style.right = "60%"; - pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; - - // Support: IE 9 - 11 only - // Detect misreporting of content dimensions for box-sizing:border-box elements - boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; - - // Support: IE 9 only - // Detect overflow:scroll screwiness (gh-3699) - // Support: Chrome <=64 - // Don't get tricked when zoom affects offsetWidth (gh-4029) - div.style.position = "absolute"; - scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; - - documentElement.removeChild( container ); - - // Nullify the div so it wouldn't be stored in the memory and - // it will also be a sign that checks already performed - div = null; - } - - function roundPixelMeasures( measure ) { - return Math.round( parseFloat( measure ) ); - } - - var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, - reliableTrDimensionsVal, reliableMarginLeftVal, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - // Finish early in limited (non-browser) environments - if ( !div.style ) { - return; - } - - // Support: IE <=9 - 11 only - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - jQuery.extend( support, { - boxSizingReliable: function() { - computeStyleTests(); - return boxSizingReliableVal; - }, - pixelBoxStyles: function() { - computeStyleTests(); - return pixelBoxStylesVal; - }, - pixelPosition: function() { - computeStyleTests(); - return pixelPositionVal; - }, - reliableMarginLeft: function() { - computeStyleTests(); - return reliableMarginLeftVal; - }, - scrollboxSize: function() { - computeStyleTests(); - return scrollboxSizeVal; - }, - - // Support: IE 9 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Behavior in IE 9 is more subtle than in newer versions & it passes - // some versions of this test; make sure not to make it pass there! - reliableTrDimensions: function() { - var table, tr, trChild, trStyle; - if ( reliableTrDimensionsVal == null ) { - table = document.createElement( "table" ); - tr = document.createElement( "tr" ); - trChild = document.createElement( "div" ); - - table.style.cssText = "position:absolute;left:-11111px"; - tr.style.height = "1px"; - trChild.style.height = "9px"; - - documentElement - .appendChild( table ) - .appendChild( tr ) - .appendChild( trChild ); - - trStyle = window.getComputedStyle( tr ); - reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; - - documentElement.removeChild( table ); - } - return reliableTrDimensionsVal; - } - } ); -} )(); - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - - // Support: Firefox 51+ - // Retrieving style before computed somehow - // fixes an issue with getting wrong values - // on detached elements - style = elem.style; - - computed = computed || getStyles( elem ); - - // getPropertyValue is needed for: - // .css('filter') (IE 9 only, #12537) - // .css('--customProperty) (#3144) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - - if ( ret === "" && !isAttached( elem ) ) { - ret = jQuery.style( elem, name ); - } - - // A tribute to the "awesome hack by Dean Edwards" - // Android Browser returns percentage for some values, - // but width seems to be reliably pixels. - // This is against the CSSOM draft spec: - // https://drafts.csswg.org/cssom/#resolved-values - if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - - // Support: IE <=9 - 11 only - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return ( this.get = hookFn ).apply( this, arguments ); - } - }; -} - - -var cssPrefixes = [ "Webkit", "Moz", "ms" ], - emptyStyle = document.createElement( "div" ).style, - vendorProps = {}; - -// Return a vendor-prefixed property or undefined -function vendorPropName( name ) { - - // Check for vendor prefixed names - var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in emptyStyle ) { - return name; - } - } -} - -// Return a potentially-mapped jQuery.cssProps or vendor prefixed property -function finalPropName( name ) { - var final = jQuery.cssProps[ name ] || vendorProps[ name ]; - - if ( final ) { - return final; - } - if ( name in emptyStyle ) { - return name; - } - return vendorProps[ name ] = vendorPropName( name ) || name; -} - - -var - - // Swappable if display is none or starts with table - // except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rcustomProp = /^--/, - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }; - -function setPositiveNumber( _elem, value, subtract ) { - - // Any relative (+/-) values have already been - // normalized at this point - var matches = rcssNum.exec( value ); - return matches ? - - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : - value; -} - -function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { - var i = dimension === "width" ? 1 : 0, - extra = 0, - delta = 0; - - // Adjustment may not be necessary - if ( box === ( isBorderBox ? "border" : "content" ) ) { - return 0; - } - - for ( ; i < 4; i += 2 ) { - - // Both box models exclude margin - if ( box === "margin" ) { - delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); - } - - // If we get here with a content-box, we're seeking "padding" or "border" or "margin" - if ( !isBorderBox ) { - - // Add padding - delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // For "border" or "margin", add border - if ( box !== "padding" ) { - delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - - // But still keep track of it otherwise - } else { - extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - - // If we get here with a border-box (content + padding + border), we're seeking "content" or - // "padding" or "margin" - } else { - - // For "content", subtract padding - if ( box === "content" ) { - delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // For "content" or "padding", subtract border - if ( box !== "margin" ) { - delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - // Account for positive content-box scroll gutter when requested by providing computedVal - if ( !isBorderBox && computedVal >= 0 ) { - - // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border - // Assuming integer scroll gutter, subtract the rest and round down - delta += Math.max( 0, Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - computedVal - - delta - - extra - - 0.5 - - // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter - // Use an explicit zero to avoid NaN (gh-3964) - ) ) || 0; - } - - return delta; -} - -function getWidthOrHeight( elem, dimension, extra ) { - - // Start with computed style - var styles = getStyles( elem ), - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). - // Fake content-box until we know it's needed to know the true value. - boxSizingNeeded = !support.boxSizingReliable() || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - valueIsBorderBox = isBorderBox, - - val = curCSS( elem, dimension, styles ), - offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); - - // Support: Firefox <=54 - // Return a confounding non-pixel value or feign ignorance, as appropriate. - if ( rnumnonpx.test( val ) ) { - if ( !extra ) { - return val; - } - val = "auto"; - } - - - // Support: IE 9 - 11 only - // Use offsetWidth/offsetHeight for when box sizing is unreliable. - // In those cases, the computed value can be trusted to be border-box. - if ( ( !support.boxSizingReliable() && isBorderBox || - - // Support: IE 10 - 11+, Edge 15 - 18+ - // IE/Edge misreport `getComputedStyle` of table rows with width/height - // set in CSS while `offset*` properties report correct values. - // Interestingly, in some cases IE 9 doesn't suffer from this issue. - !support.reliableTrDimensions() && nodeName( elem, "tr" ) || - - // Fall back to offsetWidth/offsetHeight when value is "auto" - // This happens for inline elements with no explicit setting (gh-3571) - val === "auto" || - - // Support: Android <=4.1 - 4.3 only - // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) - !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && - - // Make sure the element is visible & connected - elem.getClientRects().length ) { - - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Where available, offsetWidth/offsetHeight approximate border box dimensions. - // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the - // retrieved value as a content box dimension. - valueIsBorderBox = offsetProp in elem; - if ( valueIsBorderBox ) { - val = elem[ offsetProp ]; - } - } - - // Normalize "" and auto - val = parseFloat( val ) || 0; - - // Adjust for the element's box model - return ( val + - boxModelAdjustment( - elem, - dimension, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles, - - // Provide the current computed size to request scroll gutter calculation (gh-3589) - val - ) - ) + "px"; -} - -jQuery.extend( { - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "animationIterationCount": true, - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "gridArea": true, - "gridColumn": true, - "gridColumnEnd": true, - "gridColumnStart": true, - "gridRow": true, - "gridRowEnd": true, - "gridRowStart": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: {}, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ), - style = elem.style; - - // Make sure that we're working with the right name. We don't - // want to query the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { - value = adjustCSS( elem, name, ret ); - - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number was passed in, add the unit (except for certain CSS properties) - // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append - // "px" to a few hardcoded values. - if ( type === "number" && !isCustomProp ) { - value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); - } - - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !( "set" in hooks ) || - ( value = hooks.set( elem, value, extra ) ) !== undefined ) { - - if ( isCustomProp ) { - style.setProperty( name, value ); - } else { - style[ name ] = value; - } - } - - } else { - - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && - ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { - - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = camelCase( name ), - isCustomProp = rcustomProp.test( name ); - - // Make sure that we're working with the right name. We don't - // want to modify the value if it is a CSS custom property - // since they are user-defined. - if ( !isCustomProp ) { - name = finalPropName( origName ); - } - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || isFinite( num ) ? num || 0 : val; - } - - return val; - } -} ); - -jQuery.each( [ "height", "width" ], function( _i, dimension ) { - jQuery.cssHooks[ dimension ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && - - // Support: Safari 8+ - // Table columns in Safari have non-zero offsetWidth & zero - // getBoundingClientRect().width unless display is changed. - // Support: IE <=11 only - // Running getBoundingClientRect on a disconnected node - // in IE throws an error. - ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? - swap( elem, cssShow, function() { - return getWidthOrHeight( elem, dimension, extra ); - } ) : - getWidthOrHeight( elem, dimension, extra ); - } - }, - - set: function( elem, value, extra ) { - var matches, - styles = getStyles( elem ), - - // Only read styles.position if the test has a chance to fail - // to avoid forcing a reflow. - scrollboxSizeBuggy = !support.scrollboxSize() && - styles.position === "absolute", - - // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) - boxSizingNeeded = scrollboxSizeBuggy || extra, - isBorderBox = boxSizingNeeded && - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - subtract = extra ? - boxModelAdjustment( - elem, - dimension, - extra, - isBorderBox, - styles - ) : - 0; - - // Account for unreliable border-box dimensions by comparing offset* to computed and - // faking a content-box to get border and padding (gh-3699) - if ( isBorderBox && scrollboxSizeBuggy ) { - subtract -= Math.ceil( - elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - - parseFloat( styles[ dimension ] ) - - boxModelAdjustment( elem, dimension, "border", false, styles ) - - 0.5 - ); - } - - // Convert to pixels if value adjustment is needed - if ( subtract && ( matches = rcssNum.exec( value ) ) && - ( matches[ 3 ] || "px" ) !== "px" ) { - - elem.style[ dimension ] = value; - value = jQuery.css( elem, dimension ); - } - - return setPositiveNumber( elem, value, subtract ); - } - }; -} ); - -jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, - function( elem, computed ) { - if ( computed ) { - return ( parseFloat( curCSS( elem, "marginLeft" ) ) || - elem.getBoundingClientRect().left - - swap( elem, { marginLeft: 0 }, function() { - return elem.getBoundingClientRect().left; - } ) - ) + "px"; - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each( { - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split( " " ) : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( prefix !== "margin" ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -} ); - -jQuery.fn.extend( { - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( Array.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - } -} ); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || jQuery.easing._default; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - // Use a property on the element directly when it is not a DOM element, - // or when there is no matching style property that exists. - if ( tween.elem.nodeType !== 1 || - tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.nodeType === 1 && ( - jQuery.cssHooks[ tween.prop ] || - tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE <=9 only -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - }, - _default: "swing" -}; - -jQuery.fx = Tween.prototype.init; - -// Back compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, inProgress, - rfxtypes = /^(?:toggle|show|hide)$/, - rrun = /queueHooks$/; - -function schedule() { - if ( inProgress ) { - if ( document.hidden === false && window.requestAnimationFrame ) { - window.requestAnimationFrame( schedule ); - } else { - window.setTimeout( schedule, jQuery.fx.interval ); - } - - jQuery.fx.tick(); - } -} - -// Animations created synchronously will run synchronously -function createFxNow() { - window.setTimeout( function() { - fxNow = undefined; - } ); - return ( fxNow = Date.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, - isBox = "width" in props || "height" in props, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHiddenWithinTree( elem ), - dataShow = dataPriv.get( elem, "fxshow" ); - - // Queue-skipping animations hijack the fx hooks - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always( function() { - - // Ensure the complete handler is called before this completes - anim.always( function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - } ); - } ); - } - - // Detect show/hide animations - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.test( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // Pretend to be hidden if this is a "show" and - // there is still data from a stopped show/hide - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - - // Ignore all other no-op show/hide data - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - } - } - - // Bail out if this is a no-op like .hide().hide() - propTween = !jQuery.isEmptyObject( props ); - if ( !propTween && jQuery.isEmptyObject( orig ) ) { - return; - } - - // Restrict "overflow" and "display" styles during box animations - if ( isBox && elem.nodeType === 1 ) { - - // Support: IE <=9 - 11, Edge 12 - 15 - // Record all 3 overflow attributes because IE does not infer the shorthand - // from identically-valued overflowX and overflowY and Edge just mirrors - // the overflowX value there. - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Identify a display type, preferring old show/hide data over the CSS cascade - restoreDisplay = dataShow && dataShow.display; - if ( restoreDisplay == null ) { - restoreDisplay = dataPriv.get( elem, "display" ); - } - display = jQuery.css( elem, "display" ); - if ( display === "none" ) { - if ( restoreDisplay ) { - display = restoreDisplay; - } else { - - // Get nonempty value(s) by temporarily forcing visibility - showHide( [ elem ], true ); - restoreDisplay = elem.style.display || restoreDisplay; - display = jQuery.css( elem, "display" ); - showHide( [ elem ] ); - } - } - - // Animate inline elements as inline-block - if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { - if ( jQuery.css( elem, "float" ) === "none" ) { - - // Restore the original display value at the end of pure show/hide animations - if ( !propTween ) { - anim.done( function() { - style.display = restoreDisplay; - } ); - if ( restoreDisplay == null ) { - display = style.display; - restoreDisplay = display === "none" ? "" : display; - } - } - style.display = "inline-block"; - } - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always( function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - } ); - } - - // Implement show/hide animations - propTween = false; - for ( prop in orig ) { - - // General show/hide setup for this element animation - if ( !propTween ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); - } - - // Store hidden/visible for toggle so `.stop().toggle()` "reverses" - if ( toggle ) { - dataShow.hidden = !hidden; - } - - // Show elements before animating them - if ( hidden ) { - showHide( [ elem ], true ); - } - - /* eslint-disable no-loop-func */ - - anim.done( function() { - - /* eslint-enable no-loop-func */ - - // The final step of a "hide" animation is actually hiding the element - if ( !hidden ) { - showHide( [ elem ] ); - } - dataPriv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - } ); - } - - // Per-property setup - propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = propTween.start; - if ( hidden ) { - propTween.end = propTween.start; - propTween.start = 0; - } - } - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( Array.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = Animation.prefilters.length, - deferred = jQuery.Deferred().always( function() { - - // Don't match elem in the :animated selector - delete tick.elem; - } ), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - - // Support: Android 2.3 only - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ] ); - - // If there's more to do, yield - if ( percent < 1 && length ) { - return remaining; - } - - // If this was an empty animation, synthesize a final progress notification - if ( !length ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - } - - // Resolve the animation and report its conclusion - deferred.resolveWith( elem, [ animation ] ); - return false; - }, - animation = deferred.promise( { - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { - specialEasing: {}, - easing: jQuery.easing._default - }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.notifyWith( elem, [ animation, 1, 0 ] ); - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - } ), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length; index++ ) { - result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - if ( isFunction( result.stop ) ) { - jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = - result.stop.bind( result ); - } - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - // Attach callbacks from options - animation - .progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - } ) - ); - - return animation; -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweeners: { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ); - adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); - return tween; - } ] - }, - - tweener: function( props, callback ) { - if ( isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.match( rnothtmlwhite ); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length; index++ ) { - prop = props[ index ]; - Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; - Animation.tweeners[ prop ].unshift( callback ); - } - }, - - prefilters: [ defaultPrefilter ], - - prefilter: function( callback, prepend ) { - if ( prepend ) { - Animation.prefilters.unshift( callback ); - } else { - Animation.prefilters.push( callback ); - } - } -} ); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !isFunction( easing ) && easing - }; - - // Go to the end state if fx are off - if ( jQuery.fx.off ) { - opt.duration = 0; - - } else { - if ( typeof opt.duration !== "number" ) { - if ( opt.duration in jQuery.fx.speeds ) { - opt.duration = jQuery.fx.speeds[ opt.duration ]; - - } else { - opt.duration = jQuery.fx.speeds._default; - } - } - } - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend( { - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate( { opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || dataPriv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue ) { - this.queue( type || "fx", [] ); - } - - return this.each( function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = dataPriv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && - ( type == null || timers[ index ].queue === type ) ) { - - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - } ); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each( function() { - var index, - data = dataPriv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - } ); - } -} ); - -jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -} ); - -// Generate shortcuts for custom animations -jQuery.each( { - slideDown: genFx( "show" ), - slideUp: genFx( "hide" ), - slideToggle: genFx( "toggle" ), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -} ); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = Date.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - - // Run the timer and safely remove it when done (allowing for external removal) - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - jQuery.fx.start(); -}; - -jQuery.fx.interval = 13; -jQuery.fx.start = function() { - if ( inProgress ) { - return; - } - - inProgress = true; - schedule(); -}; - -jQuery.fx.stop = function() { - inProgress = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = window.setTimeout( next, time ); - hooks.stop = function() { - window.clearTimeout( timeout ); - }; - } ); -}; - - -( function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: Android <=4.3 only - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE <=11 only - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: IE <=11 only - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -} )(); - - -var boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend( { - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each( function() { - jQuery.removeAttr( this, name ); - } ); - } -} ); - -jQuery.extend( { - attr: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set attributes on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === "undefined" ) { - return jQuery.prop( elem, name, value ); - } - - // Attribute hooks are determined by the lowercase version - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - hooks = jQuery.attrHooks[ name.toLowerCase() ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); - } - - if ( value !== undefined ) { - if ( value === null ) { - jQuery.removeAttr( elem, name ); - return; - } - - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - elem.setAttribute( name, value + "" ); - return value; - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? undefined : ret; - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - }, - - removeAttr: function( elem, value ) { - var name, - i = 0, - - // Attribute names can contain non-HTML whitespace characters - // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 - attrNames = value && value.match( rnothtmlwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( ( name = attrNames[ i++ ] ) ) { - elem.removeAttribute( name ); - } - } - } -} ); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; - -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle, - lowercaseName = name.toLowerCase(); - - if ( !isXML ) { - - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ lowercaseName ]; - attrHandle[ lowercaseName ] = ret; - ret = getter( elem, name, isXML ) != null ? - lowercaseName : - null; - attrHandle[ lowercaseName ] = handle; - } - return ret; - }; -} ); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i, - rclickable = /^(?:a|area)$/i; - -jQuery.fn.extend( { - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each( function() { - delete this[ jQuery.propFix[ name ] || name ]; - } ); - } -} ); - -jQuery.extend( { - prop: function( elem, name, value ) { - var ret, hooks, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - if ( hooks && "set" in hooks && - ( ret = hooks.set( elem, value, name ) ) !== undefined ) { - return ret; - } - - return ( elem[ name ] = value ); - } - - if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { - return ret; - } - - return elem[ name ]; - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - - // Support: IE <=9 - 11 only - // elem.tabIndex doesn't always return the - // correct value when it hasn't been explicitly set - // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ - // Use proper attribute retrieval(#12072) - var tabindex = jQuery.find.attr( elem, "tabindex" ); - - if ( tabindex ) { - return parseInt( tabindex, 10 ); - } - - if ( - rfocusable.test( elem.nodeName ) || - rclickable.test( elem.nodeName ) && - elem.href - ) { - return 0; - } - - return -1; - } - } - }, - - propFix: { - "for": "htmlFor", - "class": "className" - } -} ); - -// Support: IE <=11 only -// Accessing the selectedIndex property -// forces the browser to respect setting selected -// on the option -// The getter ensures a default option is selected -// when in an optgroup -// eslint rule "no-unused-expressions" is disabled for this code -// since it considers such accessions noop -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - }, - set: function( elem ) { - - /* eslint no-unused-expressions: "off" */ - - var parent = elem.parentNode; - if ( parent ) { - parent.selectedIndex; - - if ( parent.parentNode ) { - parent.parentNode.selectedIndex; - } - } - } - }; -} - -jQuery.each( [ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -} ); - - - - - // Strip and collapse whitespace according to HTML spec - // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace - function stripAndCollapse( value ) { - var tokens = value.match( rnothtmlwhite ) || []; - return tokens.join( " " ); - } - - -function getClass( elem ) { - return elem.getAttribute && elem.getAttribute( "class" ) || ""; -} - -function classesToArray( value ) { - if ( Array.isArray( value ) ) { - return value; - } - if ( typeof value === "string" ) { - return value.match( rnothtmlwhite ) || []; - } - return []; -} - -jQuery.fn.extend( { - addClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, curValue, clazz, j, finalValue, - i = 0; - - if ( isFunction( value ) ) { - return this.each( function( j ) { - jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); - } ); - } - - if ( !arguments.length ) { - return this.attr( "class", "" ); - } - - classes = classesToArray( value ); - - if ( classes.length ) { - while ( ( elem = this[ i++ ] ) ) { - curValue = getClass( elem ); - - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); - - if ( cur ) { - j = 0; - while ( ( clazz = classes[ j++ ] ) ) { - - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) > -1 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = stripAndCollapse( cur ); - if ( curValue !== finalValue ) { - elem.setAttribute( "class", finalValue ); - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value, - isValidValue = type === "string" || Array.isArray( value ); - - if ( typeof stateVal === "boolean" && isValidValue ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( isFunction( value ) ) { - return this.each( function( i ) { - jQuery( this ).toggleClass( - value.call( this, i, getClass( this ), stateVal ), - stateVal - ); - } ); - } - - return this.each( function() { - var className, i, self, classNames; - - if ( isValidValue ) { - - // Toggle individual class names - i = 0; - self = jQuery( this ); - classNames = classesToArray( value ); - - while ( ( className = classNames[ i++ ] ) ) { - - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( value === undefined || type === "boolean" ) { - className = getClass( this ); - if ( className ) { - - // Store className if set - dataPriv.set( this, "__className__", className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - if ( this.setAttribute ) { - this.setAttribute( "class", - className || value === false ? - "" : - dataPriv.get( this, "__className__" ) || "" - ); - } - } - } ); - }, - - hasClass: function( selector ) { - var className, elem, - i = 0; - - className = " " + selector + " "; - while ( ( elem = this[ i++ ] ) ) { - if ( elem.nodeType === 1 && - ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { - return true; - } - } - - return false; - } -} ); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend( { - val: function( value ) { - var hooks, ret, valueIsFunction, - elem = this[ 0 ]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || - jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && - "get" in hooks && - ( ret = hooks.get( elem, "value" ) ) !== undefined - ) { - return ret; - } - - ret = elem.value; - - // Handle most common string cases - if ( typeof ret === "string" ) { - return ret.replace( rreturn, "" ); - } - - // Handle cases where value is null/undef or number - return ret == null ? "" : ret; - } - - return; - } - - valueIsFunction = isFunction( value ); - - return this.each( function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( valueIsFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( Array.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - } ); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - } ); - } -} ); - -jQuery.extend( { - valHooks: { - option: { - get: function( elem ) { - - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - - // Support: IE <=10 - 11 only - // option.text throws exceptions (#14686, #14858) - // Strip and collapse whitespace - // https://html.spec.whatwg.org/#strip-and-collapse-whitespace - stripAndCollapse( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, i, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one", - values = one ? null : [], - max = one ? index + 1 : options.length; - - if ( index < 0 ) { - i = max; - - } else { - i = one ? index : 0; - } - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // Support: IE <=9 only - // IE8-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - - // Don't return options that are disabled or in a disabled optgroup - !option.disabled && - ( !option.parentNode.disabled || - !nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - - /* eslint-disable no-cond-assign */ - - if ( option.selected = - jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 - ) { - optionSet = true; - } - - /* eslint-enable no-cond-assign */ - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -} ); - -// Radios and checkboxes getter/setter -jQuery.each( [ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( Array.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute( "value" ) === null ? "on" : elem.value; - }; - } -} ); - - - - -// Return jQuery for attributes-only inclusion - - -support.focusin = "onfocusin" in window; - - -var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - stopPropagationCallback = function( e ) { - e.stopPropagation(); - }; - -jQuery.extend( jQuery.event, { - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; - - cur = lastElement = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf( "." ) > -1 ) { - - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split( "." ); - type = namespaces.shift(); - namespaces.sort(); - } - ontype = type.indexOf( ":" ) < 0 && "on" + type; - - // Caller can pass in a jQuery.Event object, Object, or just an event type string - event = event[ jQuery.expando ] ? - event : - new jQuery.Event( type, typeof event === "object" && event ); - - // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) - event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join( "." ); - event.rnamespace = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === ( elem.ownerDocument || document ) ) { - eventPath.push( tmp.defaultView || tmp.parentWindow || window ); - } - } - - // Fire handlers on the event path - i = 0; - while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { - lastElement = cur; - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( - dataPriv.get( cur, "events" ) || Object.create( null ) - )[ event.type ] && - dataPriv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // If nobody prevented the default action, do it now - if ( !onlyHandlers && !event.isDefaultPrevented() ) { - - if ( ( !special._default || - special._default.apply( eventPath.pop(), data ) === false ) && - acceptData( elem ) ) { - - // Call a native DOM method on the target with the same name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - - if ( event.isPropagationStopped() ) { - lastElement.addEventListener( type, stopPropagationCallback ); - } - - elem[ type ](); - - if ( event.isPropagationStopped() ) { - lastElement.removeEventListener( type, stopPropagationCallback ); - } - - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - // Piggyback on a donor event to simulate a different one - // Used only for `focus(in | out)` events - simulate: function( type, elem, event ) { - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true - } - ); - - jQuery.event.trigger( e, null, elem ); - } - -} ); - -jQuery.fn.extend( { - - trigger: function( type, data ) { - return this.each( function() { - jQuery.event.trigger( type, data, this ); - } ); - }, - triggerHandler: function( type, data ) { - var elem = this[ 0 ]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -} ); - - -// Support: Firefox <=44 -// Firefox doesn't have focus(in | out) events -// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 -// -// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 -// focus(in | out) events fire after focus & blur events, -// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order -// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 -if ( !support.focusin ) { - jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { - - // Attach a single capturing handler on the document while someone wants focusin/focusout - var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); - }; - - jQuery.event.special[ fix ] = { - setup: function() { - - // Handle: regular nodes (via `this.ownerDocument`), window - // (via `this.document`) & document (via `this`). - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this.document || this, - attaches = dataPriv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - dataPriv.remove( doc, fix ); - - } else { - dataPriv.access( doc, fix, attaches ); - } - } - }; - } ); -} -var location = window.location; - -var nonce = { guid: Date.now() }; - -var rquery = ( /\?/ ); - - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE 9 - 11 only - // IE throws on parseFromString with invalid input. - try { - xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( Array.isArray( obj ) ) { - - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - - // Item is non-scalar (array or object), encode its numeric index. - buildParams( - prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", - v, - traditional, - add - ); - } - } ); - - } else if ( !traditional && toType( obj ) === "object" ) { - - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, valueOrFunction ) { - - // If value is a function, invoke it and use its return value - var value = isFunction( valueOrFunction ) ? - valueOrFunction() : - valueOrFunction; - - s[ s.length ] = encodeURIComponent( key ) + "=" + - encodeURIComponent( value == null ? "" : value ); - }; - - if ( a == null ) { - return ""; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - } ); - - } else { - - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ); -}; - -jQuery.fn.extend( { - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map( function() { - - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - } ) - .filter( function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - } ) - .map( function( _i, elem ) { - var val = jQuery( this ).val(); - - if ( val == null ) { - return null; - } - - if ( Array.isArray( val ) ) { - return jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ); - } - - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - } ).get(); - } -} ); - - -var - r20 = /%20/g, - rhash = /#.*$/, - rantiCache = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Anchor tag for parsing the document origin - originAnchor = document.createElement( "a" ); - originAnchor.href = location.href; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; - - if ( isFunction( func ) ) { - - // For each dataType in the dataTypeExpression - while ( ( dataType = dataTypes[ i++ ] ) ) { - - // Prepend if requested - if ( dataType[ 0 ] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); - - // Otherwise append - } else { - ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && - !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - } ); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s.throws ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { - state: "parsererror", - error: conv ? e : "No conversion from " + prev + " to " + current - }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend( { - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: location.href, - type: "GET", - isLocal: rlocalProtocol.test( location.protocol ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /\bxml\b/, - html: /\bhtml/, - json: /\bjson\b/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": JSON.parse, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - - // URL without anti-cache param - cacheURL, - - // Response headers - responseHeadersString, - responseHeaders, - - // timeout handle - timeoutTimer, - - // Url cleanup var - urlAnchor, - - // Request state (becomes false upon send and true upon completion) - completed, - - // To know if global events are to be dispatched - fireGlobals, - - // Loop variable - i, - - // uncached part of the url - uncached, - - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - - // Callbacks context - callbackContext = s.context || s, - - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && - ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks( "once memory" ), - - // Status-dependent callbacks - statusCode = s.statusCode || {}, - - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - - // Default abort message - strAbort = "canceled", - - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( completed ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( ( match = rheaders.exec( responseHeadersString ) ) ) { - responseHeaders[ match[ 1 ].toLowerCase() + " " ] = - ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) - .concat( match[ 2 ] ); - } - } - match = responseHeaders[ key.toLowerCase() + " " ]; - } - return match == null ? null : match.join( ", " ); - }, - - // Raw string - getAllResponseHeaders: function() { - return completed ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - if ( completed == null ) { - name = requestHeadersNames[ name.toLowerCase() ] = - requestHeadersNames[ name.toLowerCase() ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( completed == null ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( completed ) { - - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } else { - - // Lazy-add the new callbacks in a way that preserves old ones - for ( code in map ) { - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ); - - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || location.href ) + "" ) - .replace( rprotocol, location.protocol + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; - - // A cross-domain request is in order when the origin doesn't match the current origin. - if ( s.crossDomain == null ) { - urlAnchor = document.createElement( "a" ); - - // Support: IE <=8 - 11, Edge 12 - 15 - // IE throws exception on accessing the href property if url is malformed, - // e.g. http://example.com:80x/ - try { - urlAnchor.href = s.url; - - // Support: IE <=8 - 11 only - // Anchor's host property isn't correctly set when s.url is relative - urlAnchor.href = urlAnchor.href; - s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== - urlAnchor.protocol + "//" + urlAnchor.host; - } catch ( e ) { - - // If there is an error parsing the URL, assume it is crossDomain, - // it can be rejected by the transport if it is invalid - s.crossDomain = true; - } - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( completed ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger( "ajaxStart" ); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - // Remove hash to simplify url manipulation - cacheURL = s.url.replace( rhash, "" ); - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // Remember the hash so we can put it back - uncached = s.url.slice( cacheURL.length ); - - // If data is available and should be processed, append data to url - if ( s.data && ( s.processData || typeof s.data === "string" ) ) { - cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; - - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add or update anti-cache param if needed - if ( s.cache === false ) { - cacheURL = cacheURL.replace( rantiCache, "$1" ); - uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + - uncached; - } - - // Put hash and anti-cache on the URL that will be requested (gh-1732) - s.url = cacheURL + uncached; - - // Change '%20' to '+' if this is encoded form body content (gh-2658) - } else if ( s.data && s.processData && - ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { - s.data = s.data.replace( r20, "+" ); - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? - s.accepts[ s.dataTypes[ 0 ] ] + - ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && - ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { - - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - completeDeferred.add( s.complete ); - jqXHR.done( s.success ); - jqXHR.fail( s.error ); - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - - // If request was aborted inside ajaxSend, stop there - if ( completed ) { - return jqXHR; - } - - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = window.setTimeout( function() { - jqXHR.abort( "timeout" ); - }, s.timeout ); - } - - try { - completed = false; - transport.send( requestHeaders, done ); - } catch ( e ) { - - // Rethrow post-completion exceptions - if ( completed ) { - throw e; - } - - // Propagate others as results - done( -1, e ); - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Ignore repeat invocations - if ( completed ) { - return; - } - - completed = true; - - // Clear timeout if it exists - if ( timeoutTimer ) { - window.clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Use a noop converter for missing script - if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { - s.converters[ "text script" ] = function() {}; - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader( "Last-Modified" ); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader( "etag" ); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger( "ajaxStop" ); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -} ); - -jQuery.each( [ "get", "post" ], function( _i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - - // Shift arguments if data argument was omitted - if ( isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - // The url can be an options object (which then must have .url) - return jQuery.ajax( jQuery.extend( { - url: url, - type: method, - dataType: type, - data: data, - success: callback - }, jQuery.isPlainObject( url ) && url ) ); - }; -} ); - -jQuery.ajaxPrefilter( function( s ) { - var i; - for ( i in s.headers ) { - if ( i.toLowerCase() === "content-type" ) { - s.contentType = s.headers[ i ] || ""; - } - } -} ); - - -jQuery._evalUrl = function( url, options, doc ) { - return jQuery.ajax( { - url: url, - - // Make this explicit, since user can override this through ajaxSetup (#11264) - type: "GET", - dataType: "script", - cache: true, - async: false, - global: false, - - // Only evaluate the response if it is successful (gh-4126) - // dataFilter is not invoked for failure responses, so using it instead - // of the default converter is kludgy but it works. - converters: { - "text script": function() {} - }, - dataFilter: function( response ) { - jQuery.globalEval( response, options, doc ); - } - } ); -}; - - -jQuery.fn.extend( { - wrapAll: function( html ) { - var wrap; - - if ( this[ 0 ] ) { - if ( isFunction( html ) ) { - html = html.call( this[ 0 ] ); - } - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map( function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - } ).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( isFunction( html ) ) { - return this.each( function( i ) { - jQuery( this ).wrapInner( html.call( this, i ) ); - } ); - } - - return this.each( function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - } ); - }, - - wrap: function( html ) { - var htmlIsFunction = isFunction( html ); - - return this.each( function( i ) { - jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); - } ); - }, - - unwrap: function( selector ) { - this.parent( selector ).not( "body" ).each( function() { - jQuery( this ).replaceWith( this.childNodes ); - } ); - return this; - } -} ); - - -jQuery.expr.pseudos.hidden = function( elem ) { - return !jQuery.expr.pseudos.visible( elem ); -}; -jQuery.expr.pseudos.visible = function( elem ) { - return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); -}; - - - - -jQuery.ajaxSettings.xhr = function() { - try { - return new window.XMLHttpRequest(); - } catch ( e ) {} -}; - -var xhrSuccessStatus = { - - // File protocol always yields status code 0, assume 200 - 0: 200, - - // Support: IE <=9 only - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport( function( options ) { - var callback, errorCallback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(); - - xhr.open( - options.type, - options.url, - options.async, - options.username, - options.password - ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { - headers[ "X-Requested-With" ] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - callback = errorCallback = xhr.onload = - xhr.onerror = xhr.onabort = xhr.ontimeout = - xhr.onreadystatechange = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - - // Support: IE <=9 only - // On a manual native abort, IE9 throws - // errors on any property access that is not readyState - if ( typeof xhr.status !== "number" ) { - complete( 0, "error" ); - } else { - complete( - - // File: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - - // Support: IE <=9 only - // IE9 has no XHR2 but throws on binary (trac-11426) - // For XHR2 non-text, let the caller handle it (gh-2498) - ( xhr.responseType || "text" ) !== "text" || - typeof xhr.responseText !== "string" ? - { binary: xhr.response } : - { text: xhr.responseText }, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); - - // Support: IE 9 only - // Use onreadystatechange to replace onabort - // to handle uncaught aborts - if ( xhr.onabort !== undefined ) { - xhr.onabort = errorCallback; - } else { - xhr.onreadystatechange = function() { - - // Check readyState before timeout as it changes - if ( xhr.readyState === 4 ) { - - // Allow onerror to be called first, - // but that will not handle a native abort - // Also, save errorCallback to a variable - // as xhr.onerror cannot be accessed - window.setTimeout( function() { - if ( callback ) { - errorCallback(); - } - } ); - } - }; - } - - // Create the abort callback - callback = callback( "abort" ); - - try { - - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -} ); - - - - -// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) -jQuery.ajaxPrefilter( function( s ) { - if ( s.crossDomain ) { - s.contents.script = false; - } -} ); - -// Install script dataType -jQuery.ajaxSetup( { - accepts: { - script: "text/javascript, application/javascript, " + - "application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /\b(?:java|ecma)script\b/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -} ); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -} ); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - - // This transport only deals with cross domain or forced-by-attrs requests - if ( s.crossDomain || s.scriptAttrs ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery( " - - -
    -
    - - - -
    -
    -
    - - - -
    • -

      Eli Miller. Author, maintainer. -

      -
    • -
    • -

      Vignesh Thanikachalam. Author. -

      -
    • -
    • -

      Ben Straub. Author. -

      -
    • -
    • -

      Ross Didenko. Author. -

      -
    • -
    • -

      Zelos Zhu. Author. -

      -
    • -
    • -

      Atorus/GSK JPT. Copyright holder. -

      -
    • -
    -
    -
    -

    Citation

    - Source: DESCRIPTION -
    -
    - - -

    Miller E, Thanikachalam V, Straub B, Didenko R, Zhu Z (2023). -xportr: Utilities to Output CDISC SDTM/ADaM XPT Files. -R package version 0.2.0, https://github.com/atorus-research/xportr. -

    -
    @Manual{,
    -  title = {xportr: Utilities to Output CDISC SDTM/ADaM XPT Files},
    -  author = {Eli Miller and Vignesh  Thanikachalam and Ben Straub and Ross Didenko and Zelos Zhu},
    -  year = {2023},
    -  note = {R package version 0.2.0},
    -  url = {https://github.com/atorus-research/xportr},
    -}
    - -
    - -
    - - - -
    - -
    -

    Site built with pkgdown 2.0.7.

    -
    - -
    - - - - - - - - diff --git a/docs/bootstrap-toc.css b/docs/bootstrap-toc.css deleted file mode 100644 index 5a859415..00000000 --- a/docs/bootstrap-toc.css +++ /dev/null @@ -1,60 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ - -/* modified from https://github.com/twbs/bootstrap/blob/94b4076dd2efba9af71f0b18d4ee4b163aa9e0dd/docs/assets/css/src/docs.css#L548-L601 */ - -/* All levels of nav */ -nav[data-toggle='toc'] .nav > li > a { - display: block; - padding: 4px 20px; - font-size: 13px; - font-weight: 500; - color: #767676; -} -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 19px; - color: #563d7c; - text-decoration: none; - background-color: transparent; - border-left: 1px solid #563d7c; -} -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 18px; - font-weight: bold; - color: #563d7c; - background-color: transparent; - border-left: 2px solid #563d7c; -} - -/* Nav: second level (shown on .active) */ -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} -nav[data-toggle='toc'] .nav .nav > li > a { - padding-top: 1px; - padding-bottom: 1px; - padding-left: 30px; - font-size: 12px; - font-weight: normal; -} -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 29px; -} -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 28px; - font-weight: 500; -} - -/* from https://github.com/twbs/bootstrap/blob/e38f066d8c203c3e032da0ff23cd2d6098ee2dd6/docs/assets/css/src/docs.css#L631-L634 */ -nav[data-toggle='toc'] .nav > .active > ul { - display: block; -} diff --git a/docs/bootstrap-toc.js b/docs/bootstrap-toc.js deleted file mode 100644 index 1cdd573b..00000000 --- a/docs/bootstrap-toc.js +++ /dev/null @@ -1,159 +0,0 @@ -/*! - * Bootstrap Table of Contents v0.4.1 (http://afeld.github.io/bootstrap-toc/) - * Copyright 2015 Aidan Feldman - * Licensed under MIT (https://github.com/afeld/bootstrap-toc/blob/gh-pages/LICENSE.md) */ -(function() { - 'use strict'; - - window.Toc = { - helpers: { - // return all matching elements in the set, or their descendants - findOrFilter: function($el, selector) { - // http://danielnouri.org/notes/2011/03/14/a-jquery-find-that-also-finds-the-root-element/ - // http://stackoverflow.com/a/12731439/358804 - var $descendants = $el.find(selector); - return $el.filter(selector).add($descendants).filter(':not([data-toc-skip])'); - }, - - generateUniqueIdBase: function(el) { - var text = $(el).text(); - var anchor = text.trim().toLowerCase().replace(/[^A-Za-z0-9]+/g, '-'); - return anchor || el.tagName.toLowerCase(); - }, - - generateUniqueId: function(el) { - var anchorBase = this.generateUniqueIdBase(el); - for (var i = 0; ; i++) { - var anchor = anchorBase; - if (i > 0) { - // add suffix - anchor += '-' + i; - } - // check if ID already exists - if (!document.getElementById(anchor)) { - return anchor; - } - } - }, - - generateAnchor: function(el) { - if (el.id) { - return el.id; - } else { - var anchor = this.generateUniqueId(el); - el.id = anchor; - return anchor; - } - }, - - createNavList: function() { - return $(''); - }, - - createChildNavList: function($parent) { - var $childList = this.createNavList(); - $parent.append($childList); - return $childList; - }, - - generateNavEl: function(anchor, text) { - var $a = $(''); - $a.attr('href', '#' + anchor); - $a.text(text); - var $li = $('
  • '); - $li.append($a); - return $li; - }, - - generateNavItem: function(headingEl) { - var anchor = this.generateAnchor(headingEl); - var $heading = $(headingEl); - var text = $heading.data('toc-text') || $heading.text(); - return this.generateNavEl(anchor, text); - }, - - // Find the first heading level (`

    `, then `

    `, etc.) that has more than one element. Defaults to 1 (for `

    `). - getTopLevel: function($scope) { - for (var i = 1; i <= 6; i++) { - var $headings = this.findOrFilter($scope, 'h' + i); - if ($headings.length > 1) { - return i; - } - } - - return 1; - }, - - // returns the elements for the top level, and the next below it - getHeadings: function($scope, topLevel) { - var topSelector = 'h' + topLevel; - - var secondaryLevel = topLevel + 1; - var secondarySelector = 'h' + secondaryLevel; - - return this.findOrFilter($scope, topSelector + ',' + secondarySelector); - }, - - getNavLevel: function(el) { - return parseInt(el.tagName.charAt(1), 10); - }, - - populateNav: function($topContext, topLevel, $headings) { - var $context = $topContext; - var $prevNav; - - var helpers = this; - $headings.each(function(i, el) { - var $newNav = helpers.generateNavItem(el); - var navLevel = helpers.getNavLevel(el); - - // determine the proper $context - if (navLevel === topLevel) { - // use top level - $context = $topContext; - } else if ($prevNav && $context === $topContext) { - // create a new level of the tree and switch to it - $context = helpers.createChildNavList($prevNav); - } // else use the current $context - - $context.append($newNav); - - $prevNav = $newNav; - }); - }, - - parseOps: function(arg) { - var opts; - if (arg.jquery) { - opts = { - $nav: arg - }; - } else { - opts = arg; - } - opts.$scope = opts.$scope || $(document.body); - return opts; - } - }, - - // accepts a jQuery object, or an options object - init: function(opts) { - opts = this.helpers.parseOps(opts); - - // ensure that the data attribute is in place for styling - opts.$nav.attr('data-toggle', 'toc'); - - var $topContext = this.helpers.createChildNavList(opts.$nav); - var topLevel = this.helpers.getTopLevel(opts.$scope); - var $headings = this.helpers.getHeadings(opts.$scope, topLevel); - this.helpers.populateNav($topContext, topLevel, $headings); - } - }; - - $(function() { - $('nav[data-toggle="toc"]').each(function(i, el) { - var $nav = $(el); - Toc.init($nav); - }); - }); -})(); diff --git a/docs/docsearch.css b/docs/docsearch.css deleted file mode 100644 index e5f1fe1d..00000000 --- a/docs/docsearch.css +++ /dev/null @@ -1,148 +0,0 @@ -/* Docsearch -------------------------------------------------------------- */ -/* - Source: https://github.com/algolia/docsearch/ - License: MIT -*/ - -.algolia-autocomplete { - display: block; - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1 -} - -.algolia-autocomplete .ds-dropdown-menu { - width: 100%; - min-width: none; - max-width: none; - padding: .75rem 0; - background-color: #fff; - background-clip: padding-box; - border: 1px solid rgba(0, 0, 0, .1); - box-shadow: 0 .5rem 1rem rgba(0, 0, 0, .175); -} - -@media (min-width:768px) { - .algolia-autocomplete .ds-dropdown-menu { - width: 175% - } -} - -.algolia-autocomplete .ds-dropdown-menu::before { - display: none -} - -.algolia-autocomplete .ds-dropdown-menu [class^=ds-dataset-] { - padding: 0; - background-color: rgb(255,255,255); - border: 0; - max-height: 80vh; -} - -.algolia-autocomplete .ds-dropdown-menu .ds-suggestions { - margin-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion { - padding: 0; - overflow: visible -} - -.algolia-autocomplete .algolia-docsearch-suggestion--category-header { - padding: .125rem 1rem; - margin-top: 0; - font-size: 1.3em; - font-weight: 500; - color: #00008B; - border-bottom: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--wrapper { - float: none; - padding-top: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--subcategory-column { - float: none; - width: auto; - padding: 0; - text-align: left -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content { - float: none; - width: auto; - padding: 0 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--content::before { - display: none -} - -.algolia-autocomplete .ds-suggestion:not(:first-child) .algolia-docsearch-suggestion--category-header { - padding-top: .75rem; - margin-top: .75rem; - border-top: 1px solid rgba(0, 0, 0, .1) -} - -.algolia-autocomplete .ds-suggestion .algolia-docsearch-suggestion--subcategory-column { - display: block; - padding: .1rem 1rem; - margin-bottom: 0.1; - font-size: 1.0em; - font-weight: 400 - /* display: none */ -} - -.algolia-autocomplete .algolia-docsearch-suggestion--title { - display: block; - padding: .25rem 1rem; - margin-bottom: 0; - font-size: 0.9em; - font-weight: 400 -} - -.algolia-autocomplete .algolia-docsearch-suggestion--text { - padding: 0 1rem .5rem; - margin-top: -.25rem; - font-size: 0.8em; - font-weight: 400; - line-height: 1.25 -} - -.algolia-autocomplete .algolia-docsearch-footer { - width: 110px; - height: 20px; - z-index: 3; - margin-top: 10.66667px; - float: right; - font-size: 0; - line-height: 0; -} - -.algolia-autocomplete .algolia-docsearch-footer--logo { - background-image: url("data:image/svg+xml;utf8,"); - background-repeat: no-repeat; - background-position: 50%; - background-size: 100%; - overflow: hidden; - text-indent: -9000px; - width: 100%; - height: 100%; - display: block; - transform: translate(-8px); -} - -.algolia-autocomplete .algolia-docsearch-suggestion--highlight { - color: #FF8C00; - background: rgba(232, 189, 54, 0.1) -} - - -.algolia-autocomplete .algolia-docsearch-suggestion--text .algolia-docsearch-suggestion--highlight { - box-shadow: inset 0 -2px 0 0 rgba(105, 105, 105, .5) -} - -.algolia-autocomplete .ds-suggestion.ds-cursor .algolia-docsearch-suggestion--content { - background-color: rgba(192, 192, 192, .15) -} diff --git a/docs/docsearch.js b/docs/docsearch.js deleted file mode 100644 index b35504cd..00000000 --- a/docs/docsearch.js +++ /dev/null @@ -1,85 +0,0 @@ -$(function() { - - // register a handler to move the focus to the search bar - // upon pressing shift + "/" (i.e. "?") - $(document).on('keydown', function(e) { - if (e.shiftKey && e.keyCode == 191) { - e.preventDefault(); - $("#search-input").focus(); - } - }); - - $(document).ready(function() { - // do keyword highlighting - /* modified from https://jsfiddle.net/julmot/bL6bb5oo/ */ - var mark = function() { - - var referrer = document.URL ; - var paramKey = "q" ; - - if (referrer.indexOf("?") !== -1) { - var qs = referrer.substr(referrer.indexOf('?') + 1); - var qs_noanchor = qs.split('#')[0]; - var qsa = qs_noanchor.split('&'); - var keyword = ""; - - for (var i = 0; i < qsa.length; i++) { - var currentParam = qsa[i].split('='); - - if (currentParam.length !== 2) { - continue; - } - - if (currentParam[0] == paramKey) { - keyword = decodeURIComponent(currentParam[1].replace(/\+/g, "%20")); - } - } - - if (keyword !== "") { - $(".contents").unmark({ - done: function() { - $(".contents").mark(keyword); - } - }); - } - } - }; - - mark(); - }); -}); - -/* Search term highlighting ------------------------------*/ - -function matchedWords(hit) { - var words = []; - - var hierarchy = hit._highlightResult.hierarchy; - // loop to fetch from lvl0, lvl1, etc. - for (var idx in hierarchy) { - words = words.concat(hierarchy[idx].matchedWords); - } - - var content = hit._highlightResult.content; - if (content) { - words = words.concat(content.matchedWords); - } - - // return unique words - var words_uniq = [...new Set(words)]; - return words_uniq; -} - -function updateHitURL(hit) { - - var words = matchedWords(hit); - var url = ""; - - if (hit.anchor) { - url = hit.url_without_anchor + '?q=' + escape(words.join(" ")) + '#' + hit.anchor; - } else { - url = hit.url + '?q=' + escape(words.join(" ")); - } - - return url; -} diff --git a/docs/favicon-16x16.png b/docs/favicon-16x16.png deleted file mode 100644 index 5c2cb7d58bdf06634927366892793f124210ba34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1101 zcmZ`&ZA@EL7=F*aEw{9ket*&73Z>g4c7~`^_%xHpaQMP!!?2rEO%{k{e?|a_o zob$XVr+0gqm(NY(0s!Cd^8^_bu6GX3jHFpm$pGtRSE&o&(|34J>e!603HySj0EhGd zU55eIm{8Zx0Q)I`IuOX5>k`lNEP~V2&3ol zXg#WYmYuHPs6<#r9z?^4{uciuiuueC$c5D?_FxFJYr(05UxzTK9yVuzQ;&QW6v#zP z+NpX}ZbJ$Il;@$-^@yIq7YDJ!Ayk-+u5@B8USvs!RxhF#@zH%~PXQWjMg)t|0W5-p z6C5@tIf=`|*=)W{CeGA}HCmaD6lZAVdV?e*OOmNm7;;oOlq8EJk~v(dLasN;vyD=% zJ}uX#Fql)|+SgJCONZ}LwRK8M$u&0LOIE%Rs&L~<}ssno#Y<*fW90OS@xD2R}MERMJ ztpcMOl30KM*f{W$fu`xzz}ZubHg_agw*KJ%F?`EdM(@%w(W`TRH;FLs*xK5d7n4pU zWb#|H%Gq19%q(#E@#O$6ZoZ@K|D~VhzT)QJTj^%DK=mbFPhZa~2Raysi1#Rxuv0L@4^2k z{3YxDf+6fU6xtaH)*aBawzuqU+SjOw9BggWG_^*;0I!eSTS?)xRg>go`P8)keh_di z&l2WIw33n&Qe2|(bZxrYfNMVwX{PRcHxZwXZ-^69UB34N7Fbq@A}j9vlgts|FDmm~ IaMyPK1J$cX2><{9 diff --git a/docs/favicon-32x32.png b/docs/favicon-32x32.png deleted file mode 100644 index 91d483bfee8a20d18fc3f180fcd611e6f57526a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1978 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 aHW_oYLjGTQPxh+DW_x;~4s~fm+y4a~wZifM diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index a6bcdd61..00000000 --- a/docs/index.html +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - -Utilities to Output CDISC SDTM/ADaM XPT Files ‱ xportr - - - - - - - - - - - - - - - - - - - - -

    -
    - - - - -
    -
    - -
    - - - -

    Welcome to xportr! We have designed xportr to help get your xpt files ready for transport either to a clinical data set validator application or to a regulatory agency. This package has the functionality to associate metadata information to a local R data frame, perform data set level validation checks and convert into a transport v5 file(xpt).

    -

    As always, we welcome your feedback. If you spot a bug, would like to see a new feature, or if any documentation is unclear - submit an issue on xportr’s GitHub page.

    -
    -

    Installation -

    -

    This package is available from CRAN and can be installed by running:

    -
    -install.packages("xportr")
    -
    -

    Development version: -

    -
    -devtools::install_github("https://github.com/atorus-research/xportr.git", ref = "devel")
    -
    -
    -
    -
    -

    What is xportr? -

    -


    -

    xportr is designed for clinical programmers to create CDISC compliant xpt files- ADaM or SDTM. Essentially, this package has two big components to it

    -
      -
    1. Writing xpt files with well-defined metadata
    2. -
    3. Checking compliance of the data sets.
    4. -
    -

    The first set of tools are designed to allow a clinical programmer to build a CDISC compliant xpt file directly from R. The second set of tools are to perform checks on your data sets before you send them off to any validators or data reviewers.

    -


    -

    -


    -
    -
    -

    What are the checks? -

    -


    -
      -
    • Variable names must start with a letter (not an underscore), be comprised of only uppercase letters (A-Z), numerals (0-9) and be free of non-ASCII characters, symbols, and underscores.
    • -
    • Allotted length for each column containing character (text) data should be set to the maximum length of the variable used across all data sets (≀ 200)
    • -
    • Coerces variables to only numeric or character types
    • -
    • Display format support for numeric float and date/time values
    • -
    • Variables names are ≀ 8 characters.
    • -
    • Variable labels are ≀ 200 characters.
    • -
    • Data set labels are ≀ 40 characters.
    • -
    • Presence of non-ASCII characters in Variable Names, Labels or data set labels.
    • -
    -

    NOTE: Each check has associated messages and warning.

    -
    -

    Simple Example -

    -

    Objective: Create a fully compliant v5 xpt ADSL dataset that was developed using R.

    -

    To do this we will need to do the following:

    -
      -
    • Apply types
    • -
    • Apply lengths
      -
    • -
    • Apply variable labels
    • -
    • Apply formats
    • -
    • Re-order the variables
    • -
    • Apply a dataset label
    • -
    • Write out a version 5 xpt file
    • -
    -

    All of which can be done using a well-defined specification file and the xportr package!

    -

    First we will start with our ADSL dataset created in R. This example ADSL dataset is taken from the {admiral} package. The script that generates this ADSL dataset can be created by using this command admiral::use_ad_template("adsl"). This ADSL dataset has 306 observations and 48 variables.

    - -

    We have created a dummy specification file called ADaM_admiral_spec.xlsx found in the specs folder of this package. You can use system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr") to access this file.

    -
    -spec_path <- system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr")
    -
    -var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>%
    -  dplyr::rename(type = "Data Type") %>%
    -  rlang::set_names(tolower)
    -

    Each xportr_ function has been written in a way to take in a part of the specification file and apply that piece to the dataset.

    -
    -adsl %>% 
    -  xportr_type(var_spec, "ADSL") %>%
    -  xportr_length(var_spec, "ADSL") %>%
    -  xportr_label(var_spec, "ADSL") %>%
    -  xportr_order(var_spec, "ADSL") %>% 
    -  xportr_format(var_spec, "ADSL") %>% 
    -  xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset")
    -

    That’s it! We now have a xpt file created in R with all appropriate types, lengths, labels, ordering and formats. Please check out the Get Started for more information and detailed walk through of each xportr_ function.

    -

    We are in talks with other Pharma companies involved with the {pharmaverse} to enhance this package to play well with other downstream and upstream packages.

    -
    -
    -
    -

    References -

    -


    -

    This package was developed jointly by GSK and Atorus.

    -
    - -
    - - -
    - - -
    - -
    -

    -

    Site built with pkgdown 2.0.7.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/link.svg b/docs/link.svg deleted file mode 100644 index 88ad8276..00000000 --- a/docs/link.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - diff --git a/docs/logo.png b/docs/logo.png deleted file mode 100644 index b439544c208f92451fcc8533737ca14718fbbc82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114626 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

    mtXyJleTfse)|JeR+Hav2pO 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 $T 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 a=)A*jBvZpEQ*`kGi0|p@=d#Wzp$PzJ8c{6( diff --git a/docs/news/index.html b/docs/news/index.html deleted file mode 100644 index 689f43ec..00000000 --- a/docs/news/index.html +++ /dev/null @@ -1,91 +0,0 @@ - -Changelog ‱ xportr - - -

    -
    - - - -
    -
    - - -
    - -

    Beta release for xportr

    -
    • Added exported functions xportr_varnames and xportr_tidy_rename into dev folder found on GitHub Repostiory. Intention to move into packages after CRAN release.
    • -
    • Fixed xportr_format() bug
    • -
    • Using admiral ADSL dataset in examples
    • -
    -
    - -

    Initial alpha release of xportr

    -
    • Development of 5 core functions
    • -
    • Package down site and documentation created
    • -
    -
    - - - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/pkgdown.css b/docs/pkgdown.css deleted file mode 100644 index 80ea5b83..00000000 --- a/docs/pkgdown.css +++ /dev/null @@ -1,384 +0,0 @@ -/* Sticky footer */ - -/** - * Basic idea: https://philipwalton.github.io/solved-by-flexbox/demos/sticky-footer/ - * Details: https://github.com/philipwalton/solved-by-flexbox/blob/master/assets/css/components/site.css - * - * .Site -> body > .container - * .Site-content -> body > .container .row - * .footer -> footer - * - * Key idea seems to be to ensure that .container and __all its parents__ - * have height set to 100% - * - */ - -html, body { - height: 100%; -} - -body { - position: relative; -} - -body > .container { - display: flex; - height: 100%; - flex-direction: column; -} - -body > .container .row { - flex: 1 0 auto; -} - -footer { - margin-top: 45px; - padding: 35px 0 36px; - border-top: 1px solid #e5e5e5; - color: #666; - display: flex; - flex-shrink: 0; -} -footer p { - margin-bottom: 0; -} -footer div { - flex: 1; -} -footer .pkgdown { - text-align: right; -} -footer p { - margin-bottom: 0; -} - -img.icon { - float: right; -} - -/* Ensure in-page images don't run outside their container */ -.contents img { - max-width: 100%; - height: auto; -} - -/* Fix bug in bootstrap (only seen in firefox) */ -summary { - display: list-item; -} - -/* Typographic tweaking ---------------------------------*/ - -.contents .page-header { - margin-top: calc(-60px + 1em); -} - -dd { - margin-left: 3em; -} - -/* Section anchors ---------------------------------*/ - -a.anchor { - display: none; - margin-left: 5px; - width: 20px; - height: 20px; - - background-image: url(./link.svg); - background-repeat: no-repeat; - background-size: 20px 20px; - background-position: center center; -} - -h1:hover .anchor, -h2:hover .anchor, -h3:hover .anchor, -h4:hover .anchor, -h5:hover .anchor, -h6:hover .anchor { - display: inline-block; -} - -/* Fixes for fixed navbar --------------------------*/ - -.contents h1, .contents h2, .contents h3, .contents h4 { - padding-top: 60px; - margin-top: -40px; -} - -/* Navbar submenu --------------------------*/ - -.dropdown-submenu { - position: relative; -} - -.dropdown-submenu>.dropdown-menu { - top: 0; - left: 100%; - margin-top: -6px; - margin-left: -1px; - border-radius: 0 6px 6px 6px; -} - -.dropdown-submenu:hover>.dropdown-menu { - display: block; -} - -.dropdown-submenu>a:after { - display: block; - content: " "; - float: right; - width: 0; - height: 0; - border-color: transparent; - border-style: solid; - border-width: 5px 0 5px 5px; - border-left-color: #cccccc; - margin-top: 5px; - margin-right: -10px; -} - -.dropdown-submenu:hover>a:after { - border-left-color: #ffffff; -} - -.dropdown-submenu.pull-left { - float: none; -} - -.dropdown-submenu.pull-left>.dropdown-menu { - left: -100%; - margin-left: 10px; - border-radius: 6px 0 6px 6px; -} - -/* Sidebar --------------------------*/ - -#pkgdown-sidebar { - margin-top: 30px; - position: -webkit-sticky; - position: sticky; - top: 70px; -} - -#pkgdown-sidebar h2 { - font-size: 1.5em; - margin-top: 1em; -} - -#pkgdown-sidebar h2:first-child { - margin-top: 0; -} - -#pkgdown-sidebar .list-unstyled li { - margin-bottom: 0.5em; -} - -/* bootstrap-toc tweaks ------------------------------------------------------*/ - -/* All levels of nav */ - -nav[data-toggle='toc'] .nav > li > a { - padding: 4px 20px 4px 6px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; -} - -nav[data-toggle='toc'] .nav > li > a:hover, -nav[data-toggle='toc'] .nav > li > a:focus { - padding-left: 5px; - color: inherit; - border-left: 1px solid #878787; -} - -nav[data-toggle='toc'] .nav > .active > a, -nav[data-toggle='toc'] .nav > .active:hover > a, -nav[data-toggle='toc'] .nav > .active:focus > a { - padding-left: 5px; - font-size: 1.5rem; - font-weight: 400; - color: inherit; - border-left: 2px solid #878787; -} - -/* Nav: second level (shown on .active) */ - -nav[data-toggle='toc'] .nav .nav { - display: none; /* Hide by default, but at >768px, show it */ - padding-bottom: 10px; -} - -nav[data-toggle='toc'] .nav .nav > li > a { - padding-left: 16px; - font-size: 1.35rem; -} - -nav[data-toggle='toc'] .nav .nav > li > a:hover, -nav[data-toggle='toc'] .nav .nav > li > a:focus { - padding-left: 15px; -} - -nav[data-toggle='toc'] .nav .nav > .active > a, -nav[data-toggle='toc'] .nav .nav > .active:hover > a, -nav[data-toggle='toc'] .nav .nav > .active:focus > a { - padding-left: 15px; - font-weight: 500; - font-size: 1.35rem; -} - -/* orcid ------------------------------------------------------------------- */ - -.orcid { - font-size: 16px; - color: #A6CE39; - /* margins are required by official ORCID trademark and display guidelines */ - margin-left:4px; - margin-right:4px; - vertical-align: middle; -} - -/* Reference index & topics ----------------------------------------------- */ - -.ref-index th {font-weight: normal;} - -.ref-index td {vertical-align: top; min-width: 100px} -.ref-index .icon {width: 40px;} -.ref-index .alias {width: 40%;} -.ref-index-icons .alias {width: calc(40% - 40px);} -.ref-index .title {width: 60%;} - -.ref-arguments th {text-align: right; padding-right: 10px;} -.ref-arguments th, .ref-arguments td {vertical-align: top; min-width: 100px} -.ref-arguments .name {width: 20%;} -.ref-arguments .desc {width: 80%;} - -/* Nice scrolling for wide elements --------------------------------------- */ - -table { - display: block; - overflow: auto; -} - -/* Syntax highlighting ---------------------------------------------------- */ - -pre, code, pre code { - background-color: #f8f8f8; - color: #333; -} -pre, pre code { - white-space: pre-wrap; - word-break: break-all; - overflow-wrap: break-word; -} - -pre { - border: 1px solid #eee; -} - -pre .img, pre .r-plt { - margin: 5px 0; -} - -pre .img img, pre .r-plt img { - background-color: #fff; -} - -code a, pre a { - color: #375f84; -} - -a.sourceLine:hover { - text-decoration: none; -} - -.fl {color: #1514b5;} -.fu {color: #000000;} /* function */ -.ch,.st {color: #036a07;} /* string */ -.kw {color: #264D66;} /* keyword */ -.co {color: #888888;} /* comment */ - -.error {font-weight: bolder;} -.warning {font-weight: bolder;} - -/* Clipboard --------------------------*/ - -.hasCopyButton { - position: relative; -} - -.btn-copy-ex { - position: absolute; - right: 0; - top: 0; - visibility: hidden; -} - -.hasCopyButton:hover button.btn-copy-ex { - visibility: visible; -} - -/* headroom.js ------------------------ */ - -.headroom { - will-change: transform; - transition: transform 200ms linear; -} -.headroom--pinned { - transform: translateY(0%); -} -.headroom--unpinned { - transform: translateY(-100%); -} - -/* mark.js ----------------------------*/ - -mark { - background-color: rgba(255, 255, 51, 0.5); - border-bottom: 2px solid rgba(255, 153, 51, 0.3); - padding: 1px; -} - -/* vertical spacing after htmlwidgets */ -.html-widget { - margin-bottom: 10px; -} - -/* fontawesome ------------------------ */ - -.fab { - font-family: "Font Awesome 5 Brands" !important; -} - -/* don't display links in code chunks when printing */ -/* source: https://stackoverflow.com/a/10781533 */ -@media print { - code a:link:after, code a:visited:after { - content: ""; - } -} - -/* Section anchors --------------------------------- - Added in pandoc 2.11: https://github.com/jgm/pandoc-templates/commit/9904bf71 -*/ - -div.csl-bib-body { } -div.csl-entry { - clear: both; -} -.hanging-indent div.csl-entry { - margin-left:2em; - text-indent:-2em; -} -div.csl-left-margin { - min-width:2em; - float:left; -} -div.csl-right-inline { - margin-left:2em; - padding-left:1em; -} -div.csl-indent { - margin-left: 2em; -} diff --git a/docs/pkgdown.js b/docs/pkgdown.js deleted file mode 100644 index 6f0eee40..00000000 --- a/docs/pkgdown.js +++ /dev/null @@ -1,108 +0,0 @@ -/* http://gregfranko.com/blog/jquery-best-practices/ */ -(function($) { - $(function() { - - $('.navbar-fixed-top').headroom(); - - $('body').css('padding-top', $('.navbar').height() + 10); - $(window).resize(function(){ - $('body').css('padding-top', $('.navbar').height() + 10); - }); - - $('[data-toggle="tooltip"]').tooltip(); - - var cur_path = paths(location.pathname); - var links = $("#navbar ul li a"); - var max_length = -1; - var pos = -1; - for (var i = 0; i < links.length; i++) { - if (links[i].getAttribute("href") === "#") - continue; - // Ignore external links - if (links[i].host !== location.host) - continue; - - var nav_path = paths(links[i].pathname); - - var length = prefix_length(nav_path, cur_path); - if (length > max_length) { - max_length = length; - pos = i; - } - } - - // Add class to parent
  • , and enclosing
  • if in dropdown - if (pos >= 0) { - var menu_anchor = $(links[pos]); - menu_anchor.parent().addClass("active"); - menu_anchor.closest("li.dropdown").addClass("active"); - } - }); - - function paths(pathname) { - var pieces = pathname.split("/"); - pieces.shift(); // always starts with / - - var end = pieces[pieces.length - 1]; - if (end === "index.html" || end === "") - pieces.pop(); - return(pieces); - } - - // Returns -1 if not found - function prefix_length(needle, haystack) { - if (needle.length > haystack.length) - return(-1); - - // Special case for length-0 haystack, since for loop won't run - if (haystack.length === 0) { - return(needle.length === 0 ? 0 : -1); - } - - for (var i = 0; i < haystack.length; i++) { - if (needle[i] != haystack[i]) - return(i); - } - - return(haystack.length); - } - - /* Clipboard --------------------------*/ - - function changeTooltipMessage(element, msg) { - var tooltipOriginalTitle=element.getAttribute('data-original-title'); - element.setAttribute('data-original-title', msg); - $(element).tooltip('show'); - element.setAttribute('data-original-title', tooltipOriginalTitle); - } - - if(ClipboardJS.isSupported()) { - $(document).ready(function() { - var copyButton = ""; - - $("div.sourceCode").addClass("hasCopyButton"); - - // Insert copy buttons: - $(copyButton).prependTo(".hasCopyButton"); - - // Initialize tooltips: - $('.btn-copy-ex').tooltip({container: 'body'}); - - // Initialize clipboard: - var clipboardBtnCopies = new ClipboardJS('[data-clipboard-copy]', { - text: function(trigger) { - return trigger.parentNode.textContent.replace(/\n#>[^\n]*/g, ""); - } - }); - - clipboardBtnCopies.on('success', function(e) { - changeTooltipMessage(e.trigger, 'Copied!'); - e.clearSelection(); - }); - - clipboardBtnCopies.on('error', function() { - changeTooltipMessage(e.trigger,'Press Ctrl+C or Command+C to copy'); - }); - }); - } -})(window.jQuery || window.$) diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml deleted file mode 100644 index 00008071..00000000 --- a/docs/pkgdown.yml +++ /dev/null @@ -1,7 +0,0 @@ -pandoc: 2.19.2 -pkgdown: 2.0.7 -pkgdown_sha: ~ -articles: - xportr: xportr.html -last_built: 2023-05-08T22:13Z - diff --git a/docs/reference/Rplot001.png b/docs/reference/Rplot001.png deleted file mode 100644 index 17a358060aed2a86950757bbd25c6f92c08c458f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1011 zcmeAS@N?(olHy`uVBq!ia0y~yV0-|=9Be?5+AI5}0x7m6Z+90U4Fo@(ch>_c&H|6f zVg?3oArNM~bhqvg0|WD9PZ!6KiaBo&GBN^{G%5UFpXcEKVvd5*5Eu=C0SJK)8A6*F U7`aXvEC5;V>FVdQ&MBb@00SN#Z2$lO diff --git a/docs/reference/df_label_view.html b/docs/reference/df_label_view.html deleted file mode 100644 index 6fa010d4..00000000 --- a/docs/reference/df_label_view.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - - - -View Label on a dataframe — df_label_view ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    View Label on a dataframe

    -
    - -
    df_label_view(.data)
    - -

    Arguments

    - - - - - - -
    .data
    - -

    Value

    - -

    Message with the Label or "No Label on dataframe"

    - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/figures/_logo.png b/docs/reference/figures/_logo.png deleted file mode 100644 index b439544c208f92451fcc8533737ca14718fbbc82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114626 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

    mtXyJleTfse)|JeR+Hav2pO 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 $T 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 a=)A*jBvZpEQ*`kGi0|p@=d#Wzp$PzJ8c{6( diff --git a/docs/reference/figures/design_flow.png b/docs/reference/figures/design_flow.png deleted file mode 100644 index beef0e5266212f6370b9e47350518a51dc354e36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54033 zcmeFZWmME*+b@bB2AH&@(hLI9N=tVRT?*0-4k;iiA|N1*Ae}RG3|)eVloCU?^w8bR zz6amuobzF?v-V!={j}G1>2hG|KX+W$ukHy}SCzX>KuLgugL7L!URo0e2R{u52RHc! zF8GZ>fW8^{?~0qIoFq=sZ|W8B!&R&2D$j9nN+Sr*UgCqFZ#v8CyW!y6X~q7#((aV^ z3J0e@M?v~I)YD{blJE`rU^2!Z_l8Mz!qshD8O3)YFVgQd8}v$QYdRN_#ik9F<%@H| z?S|>o()@>0-@UD!)Lb}dEpi~0>>EVByIDO(u#fv)G9OvUXt0|7@X_0hiCzDt(`R4r z@J??EPJftSu1~pp=KZ_-E3eh>Z(ldRMIZmp(uP7S^1`!^=cCnxJT~mLz*T}j=-x_) z@iC-bd|cd6nS~N2*OKjpO;n!p^~-zj+1zrzyz%yz`CGipThg?6)R#9N?oiBJ-oS}$ z$NBg0Pa@ZzUj9mAp1b+Vn+_{P%QQ$MH&s z^)aN9l9JtMSvE$ioTP+L!TI|C%4_~NUf%!wrEDMfSZz$yI6|=3%18S@`+VVv`c;m} zbzDu%*X~d!Bqa%(|NQ*!-MjvN&3JON&dyFK?*ncER$Hm{ttCU7G8ksPC>|jbn zx8ul3v2t>9LLiC!c0(hj=H+E&W##3A(N1IW34PBBO?`br>Cc9vfisa>FVXPZNsmG zXYzpM5Rx_Y^RZ#2GMn6IidiyYO$`l=CcpFWQ4a^zM81wdGh7W+B4vtQAW~aTZ+Qp1 z;NLPwTnRtnXJqE$azdlvXimgHwd+DBxB1WNQL%v>m9Cy1(Q9<2UYiYvs;Oe4qOwfN0x?hh7&zP`Srrm~C6cBvQLzl9+8{z~{yzE{7#44e9kI zMkvbcZRSn=#y4Kx-nF3>)*70cn(FE^^#3l8``XjQFW~Yf{7%<7iQJZwJ!;K5q$QnP}1&D*VEm-a;V5abJU2Qn$1y) zREA%pJWmMwrf|fkrOb%}%5%3+8oZ$*<5dW!H5dhIf^~irEQ?Q8EUbN_ntFbVHN(yrQ zR8e`Tt}4hcJE~*&Xe@$>iODhGaf%C&Vr++85lsYxTr)tomHj>qf%4FUoWfg4;qUE z7%Z7GRCYkrAV~#05j4UA!oohgi#?A08d_Ie-P~dwkfdcVzT?7BtImUc+6D#)#Q_s` z2*foy3c|^$bNeosl-RMlzai{Ktjznu9x<9>Lo&9m6CHNN4U3Z8@kXw}gxK0;Edf^K zGvCvLeGHR+auIZ+ze;tkK)>9mUQtJ9=mwo2GNg6^ZIv?>-}UE@uH2*yqPoERj43{G z(Ubwb@pJN(OLp+h`XpHy^l-5$M+jKC_s9`unN$}hwM~_HtEB6lFIzv-%$ZZ?>lAAC zd#ec1fO#>uH_(T;zOJjG|@8974rVYa&t`aOeE++&yYk#lBI?>*#Jc*ZY}59tgYJLumZ= z56?2Grntn6hPZ{@*VHcp8h!oz{E`pRv9l#FTXB;L*89isWX8a4uwb;I7#+K4tIe615>FTey+6hE0SR_z^KMGyJZPp#5B7_*K?gUKLYtt=z`Fex(b!XeMrQnAv0l!rV5yD*|& zhBg;NH6Iu$y)Ku1u|;2GmE!d?&fXejGj=PyjRT&qk_&+IpN876$Bwz;yX@d1X_A}32!Re z)R=Tnwisw_qqvbI3VZ?&Bl zbh*ljd~kO>Rs&m5y*V`v6@I>NsgT7uFmN>|Bo8_6i}0J5DGQvC8(5urAoL$ZFr#TavKC=uuZ@8i*=q}xcWa;l3LVk~cN4yvsDWvnLMSP8V z_hs3BbkY9uC?e)<^QKmT%yCdr)R|&-MFq-VTqDgM`|gw!py~HfIn~cfa=Vx!GF0Q6 z++eeTLWXeYK4L3`v5jETpI6Ebo z!^C!)M~E&;%6XrxQF0`||yXu}WcYZkS@klzzpCnE7$X_FNVz}u7MjmoI@I$IRC3y9mF;n=}oUQ-& zbt__GV>$Fnnq|xqXG}llswUThL5pSA#UfV>`&%3b`9CS5=i*nMDxN{E^7FXP%VXq? zJoA|PHnl$c|1t+#o)fyT5O3<9&fr9fZSuW({SXMmsCQ}3X>d(-XCQU@uVl|;Eo>EA zIO#bI0E3ci@Fj;6f_|`%dBMoeZr2re1fyc@$Wn-|_1N5?m&?sDtnk`h95(S;&yF`S zXz)g2+WAueoMQ5leEvcTz_X-f{)~Va(1t}i#gpP=V_|4ihm1kRC!fbh+1c4O>V@vU zFP3!bY7+_OQ?r;OOwihqNlB|=k3UmzXOxumwjdY(s7L9V`}s8rnk7U>m%nViM%V>9 zlWZ8J#ccCqEdv8IT@yPS+cxGS69Yr5-Fk;1mWI70aTu>GG_G?;J670__G94s7h>{~ zXxb0HF-h8){*I;QZ-v5&{+gkXZoKGs-s%CVetC2Ai-A`aGxC!9@}Ms;ybnbcLgG(8 z+K*LqFoirj>AYJorlQiF9SUz7Lw+)R`ctJ)IN)p*sZb63!B|Y-@AIn@@!m})j0fAN zl_)c%x_k2S68LPQlEyOHS^^0tQ4Gia*?-lDt)GooIeA>t8tTA8!>WzZ@}=EB;?s2= zn~lDwcc`B_Z_Rvf<>r*pJd@782~go@%$*yssi-skYTaTJP7-2I94m8;0761SL5H#V z%?F*Wcg5Ev)e*}(Y?ApGntU00yIXJ%j|xnirUDVC zz99;G?42wXeK#6*hJL^mAf-7zUfadk+}-4cgB|;EZ*Yi z>)|JK?rCVD&Z#oR1<5=?zy(qW+m3=LY+nu{v^hz5?MI%FD|Sy?rg$wrAY}CN4@vc( zX`P-r<6w#90rP@mjRUsh%?lR%1OS$FPjT@5{}kRyUC?LY;pO$;%cQH3?;dw*T9=fY z4Ph?=JMcQ)o8CZMReqhQJ*Lb&;(#QEsJr9ZU6?6ih1W}gsZBkec*F`*sej22jUiw` zUBpEzUZQVo&!z+rNZ<3dlrI9Hms)wVOSp}+)-W-dLj8P-p1T>3Rz9KA%J3#^I^`wR zS?7Fr5(9>VE*KzY13+s-QR)CxV&oNEmjX>+;IwR9QCK)+V?JXi#SoflJ;qkJx7V6+ zwji z{ZM*e%;|K*X$v_jD9NdDG|J^^M+ z&c&rP{9SIU-&kAp)H!w&rv-qL^HfnuY0!{L=(Y8XE|EZOI_K9=-KF2co3GPHRH#8k z=Zq=?qzn{~7i%M>yq4Y0(SJ2kokvPuf;nwkEvlQyLSNk|d^-1;*Jycp!gDU{A}Av7 z54=#-_jBvU9w9TCoLa z1<^jmAe@TdHs-v~uuXNl>WM*TpyrXV7aA(ACb}Pk34)BFzrVkpyVH6-TjN}>hy6Mx zR8pfDRg2rif#{Hc-EkcBNKsMoEGPxzVG?}gG_b{G7*t3JE~mNA{B5Qm zT#f^s(vvK#YrI-fQK6A3+t%PKK~tF+?wCM#u@!XD^n{$0G`oMCi-V)5t1C&sAu+UF z=*(lnB`B17MalFeim>f7jj&F`zj#T)WqjbhkxZ#v>- zp`g(d6@8>_>>@j?X7UnQ{^Bbp8_nhl*6l)gMMNX87iQL@+P? zu%7p6O|vmY3Q#zpI|{FpWRV{J*s-*hzvWCFYcr6O&6G`x%=5{Kxey*dm;Fpp3VsK0 zd#&ef3rovuQyu92gLSWvD`3H;aGQVZKW*3V9~dz8UdfhDZir-%yLR!SXliBV`}?_Y z=8;UHGf_q<&Wil(v?zkaO&EVTMAGf<)2 zea}6sz5tzKG1+5EAv<3HNHory(5U&;&fbo`<-W`yv@=jo(9NTO!D>`yH-C}FUPY7U z@laLcf+Th%5gWHHhpVKpwt1KXm_WJ3uvJy7}_G$MDLx}kGJdQ zqm;s3KUjc$+;qO~BQP`vCFhM)ksKJpi^Lw5zA{|R3 zfp9XlYnpwB3acHy%^Rt7FsyT52jY-HrTq#9^%(!L3ehd+nGt@V7wVT=>L>hDO0A9L zo;810gF3H`U1B}I_cNDQ{q~00TfFw7OXMF)Hd*K4@d*22B(8Ed2biM(95^d}*f8^s z(CAVXyZ0QtG{yde+n*ZsHCSc6Fd6p2^kG--NdEyEl$)DdS7)bD{o)YlzCbJ?x9Owj z;`;MXk?s3|bDiE2NGjmdgEoNJrwEFp6mE_KEr0(|b$;wJ-nt21^Iq zzrhvQ>x6(&1R9KzqM}i~Oz1PW#VrC->>Ga)!am%o>AVutkwy?f$qx|}^Z+=^QBxB@ zZBd_t$6)wP%qSaG@JVwztd2E zN&)c15j2g_G7HdG9s46YyShTnjLzf%;0N1n@hw0A9?*hcm8)N^$7|8YhJ<3o&N~@|BYAhe_sl$j{ikp z<^O=OvW9>yV3haqKaP^hJHc9w(3f}qW4A=BYiP_$^8d$YvL-qcbYy)Dzw4D1gX({? z)4@W9?Jzhvd2Z|DRcilyq%cQ4iGg+A8fd#@Ot&Vj*qf0S+NAtgeTvIRK9mtinYsOn z!s)Y=z4v1W9{%e0t+=j7TQ39G2a=dBo?Jdi0@?rfwzFq_aA`#cYNnDfd#{{riskaI z=Dw1E&v6{=bQHF!0@)_lp5k69Y|WVJB&oc-8%M%bAms%f;nc{xFvm~+X0H4cGxwAV z)G}eq1D2O13I~SEoR#n=2Y zzcj|A`N-n zy`&sCZ>#$e)t-Zsq-=l5{&_R^yx>#c|2?Jm)&In<`#)e={r~%s|Mvrewf4VNV~#N}i7H?k_mK(VN81pS?p)^!p# z4Den75C#B*Z1CQ9)k=b|t=VgT3dOn4=doc#(+4zSSC`bDBtg3&fI%PIwwm}2T>wvb z?)UBd{ZED@|CT79jfI7UK*jcmdBkW84h#kwII~)ci0k~XM^YbOSy}?$DKQK1fyMcG zBmeV#q1wqTh~VUFEnwN)^*@p#kI=7no*hd7nh`JxWm&Fr6yY@iNkL$e^{aTP%>hG- z-+x{FShSj$zKMw#Xu}y9^rz(x&2n_US$~R*>kOc-=0;hg00MLY7t#1?o-myHsf~>d zYzHrOp(}oMw|2FtJWu0yTU%R%=z-pggffrKDJe7AaB6^ux;>`6O4t~G2N*n z)LINF|9MBeyCP43Uw0b10hBju;w#byKwVw@lWGc_d+R>>q%z0JS^%$m03-%fRDdb6 zySux-zJ4%Yx9%z8$)(}WXAFiB!p2rJ`;iKj{gux~6F9F&DegELG4b(&mfZ=$8`YT= z70~wmYL~hH0$Y|Wu_-AgCMFy7c`cVle(!5A3tT|zn*S9^VCu7uME8q;*noi2+Wq&y zSJu``EtMnCfrONnVBEd44^1kgl9Oqw2c~G>bhb~a&{L#l3x20 zlYFBoBKA!~r{V+eB)XAuv%tPwgU|(Yi!C0F*4`h^kukZhZjorjFT+s9RZ>|Znx{W= z*q;EOl#u;;QubfA2LIO9I{qR#TCX1hTjCdU;($uWJ=Xtg3AF-t3;^mb_dWkb0Tj?% z%OSp4-QGkal5~!qloUurrc|39@1Aj!=`hE6g7u*&0Em84ku@-sqehKNuL8#haKR5P zfK|KlhG*@t29zFFE^EEy$j>&)&~r@8Q!`AC)5OhwUCs`vpeJqadfvbv+heJ(P|wl- z+9Ep)SwnCgE!~A47|JfF(C8dh;vyKA_D=~hAn#)$(70{Q=5&9dSf*Ywg!vkoE|l1q zkikLeY2f)$-KIEYwf(?aTzc{>iKdG;qz z%3zMY2)uUl0f*;=hEz(Z+Ik+A+`Ue%it40!bGQAKzol%Q&z|&sAf~hX*WwddS1s<6yZR9uA&f4={g0aV|JB338^yML$nIM zjt-f?1sfb1`C*tI@m1nH$mYAmxn9@ZH62592)_+JnLm?feU0DPNV7t--rwqDY6bx1 zK|$>$iEW#@lb@1=VY-3!l4~^qk#gIP;V`a+`YK^W&-%eKfi2-Wr8ZppP~5SP&S;|n z|HJotPTbqzbNKhK8F?_Qf68<2HfEDt1lYYJfM}zeKKJGvr*`GF#nv3MlP;9M`2Oy6 zv&nSaPU|z7#(u55?V2_}mS4%(Nw={=AOz$L57ja8#_nHj2T$3gA*U|D5JbCP@BaW_ zl#8G(+_~y*5p_8NMf&AAj0eP@o0UX?XO_kf@c!EE{#@O4AZ!BOfp;DYypE9)|1y;3M7E8?(x)D5b`|zx9Ae+F@=<98)9X zpuCRAFDkP}tB97wjVY8Fa@B81(zJB2_xkMpWQY(c1J=Z*Kjzf&XXKfaA973r*xXof zr_u-Ne3}|2Q>y13J|SNN*=A@D+`C%h?RixJVpe}rX#6PcqR#tY;I<0A)XGr?ahIAfnh~Fv^Zht8Qti69lS;Tjt0kN`;q$*SEvWVH>^;AEB=3UBOPM&? zUp4+E*Pv3^;;Qwhu)120rV{ij(D(XvPz^pFN-Mc5#LUWoKEJPIcMc6I1LS!i4q;~i zg+kYTse`|{{CsfoX0@>DG5YXQxDY|V0f8c4kn4ebbdW?InleUaQNWcf#4X$W%*|${ zE4T;<31eNs3(j)i(fAmAphVv>JYHxh==;-n7(JLjm}Sh!@80wiv~svkIsvvR+Sj5S zw2F12CQpFSlbf5%LRq@w_w8>3xsF^XkO7K7Ismnq_#Edlog?-3#0X#zYp_k z0YJmZ#H0~8`|(1rn%`atn7s?rLCOP^6WY$I;^^o&A!g+|TkvCwdiGpX;>`cia4i{^ z$r^oW-@U>y(_a8e=t&UA*7!fo#F`jTcJxccv}Zew$5pg6m19*a9v&1N!t&kB2b)QG`elpiqnn0@f?OZ zwDEC+F(8L#;|Pqm!Q}GmRzshJ&_l$P1*lwYy<|h!pMq|H_7v6Bn)ZhbIReCDn|*F& z=>xeFNU+F)1?ThqVRl0m-8)nQ_SHcD0NJQjj{J#m%LFO>u3x`;4{Y;ebGs9`&G(l3 z(22Dq+j%18R(~pqLJ&n`R)&m+!0R7*`_3UTPXz25Wj@w>ah-nOgkT6E4A^~07y43~ zES1Wuw1DLWH}Eiyami*6B8=zdJBIUNqM)vz`+dIVpLN>){SgeH*@M46vi2cs8kvX? zi8`TwV+S?vG;%|d3gm77Vu-lvo-a^i+T@2291P|lO>2YITeso~#)4~`yExq(o-O97 zR>-@5C~zrxsk|4>mrNEUkB~EdnypXeLzgAiP}1%*6Nnj1P@IFU3^Hk9Ix&gLUF|YN z1Dfa>eTlEukwE6Mpz>46sp8!HdV`>DwDj;J;){U}@jkqy>50iA(Jv#rVI%UJGGWXi zp+8vN`~#3egC#kvXw45tN_qI}4dn!OQjed%2>l^0$m!25%|Ayf_AP1TheS#U^Js+Z z>E!8TQ2$ZBpt^aYBU>T-s7k2Blw>Q4De6^2hR`sH(=L*97Tv#BO?+-45T`c5kUa+J z-`g^fZY$3wa>&uiC4k~;hYvrFtMC-?$H`^^ww6Oe0Ym{J$Q|E9if52K2oHFmd6+ z8x%lO%+tsO1`=4(mQD*-dquXsXkgzO=bqQZe{tmhPmuLr9mo0a$i)6Pzm$3t5MQx- zh@NeL9#9faA{P+AvrBM*8*2-S#A+EaTIhtGymrCCac0D7E67|RavS+2VuOyB3@Koo z0VgAeTNy;^EMYa+9!f9;Z!@ESu3y;+3|xMTf96?94Y*UH^#vGvXDDzjgP>oZyp(+T za`xLZH{fF+K?EiqS1wW9|00gV&?sx;$NBj?ovgu{8{ynxJJE5Adjk+0iFqt#$urkA zhQ*2jmcbv2T?eXUi zFE>Z20Vzy$B$f%Nj$k&fax^wENy#oF z#!CzoPEA~lVi;N9U$RO`%U7>hv&FQ3RqK0I6g5-vol%)R`!LK3X*z`JvX`q=nbL!} z1oWk^0d7+Eo(WI1Vvk*Ie;!W*gkab~?}f(?--&|wW>deWX4;4(+0m1(V!mL=gze99 zh7%~^-X^?y-yShpm{_E(Yp7%p7>9ggA4(J}(A@O3Q-8sQ_l<2IV}VE|Iiry!(^e&` zV*uWM6Nr)~6~!d-0B#cK;Fy+-hoe4?#m=Y)urM+XgRG4KFcQFZ%Vz^Zv{U`|Phik+ zHSG0+WesdRag_9aJZkqVP}V`4c%{ZNXv9Ifd1CO8 zkBjSfI`tyiy9#9NoAW>;Of*yT9L#0<#6c2c*5l)|4m@vl%E6{e575>PCbDnbv=7Y7 z1FSi>X}6#sGTu(>qwEG6V{uB!@FT&>cBFgP_eu?)-kxv`oAz)TyB-D5rV9k_c}&|3 z#+&*bgN6twbn4fya5fJhLIB8B5mAvQHu#O!cTYo!`b(#yN_HId+PWe~J`ZcySP7Yi zn1XHpRROJ0TSL%C(U$F~B88FrSy7&#b>E2_=~nExdz)0b{=jX2P!|{(ojQp3GFs4C zg7FDJ?|+ct;-sZRad6ZP-IHYBdOroE@Q_7aw><-NUT$=&6G&3DnUiQM?tglWka^4= z`jO2FM$(awy~d?RobosKcRG)*$8eju%zmX3$q)&7aF4db zRe>M2Qbr=!hzVOj)r*NRf&!t~L~;(&U!4Mq#unsvOABwzua%Y^R~bOV41UNU`mHmK zM1FQIs#N$=%Fiu16q7+00}e7R&Xe>RTs-n~7~xFol(COW2F>Q~%&yRmcQ+S79c^K= zD}Hdk;3pQsfW#8Am`dXlZd!~}JJiV(ZjoIBrn?JB=+ERGnG&;~*lu6EaEy5YR0&R^ zx>7Sh3_$#?Y4Y!^26VD-wA{+@^-6y>T9L^c?-LI&acY-Re9qXTfa9-E!%_FO$*{`t z^gr0RUPgy8kR3V)>bSEC3hckX!=G!9sIt}ra>yP4I!*?B&&KZ!%D#{) z5HMm40Fn%PcfD%5(i*8*;6*%QH^vHke_myN8Lq`DoyEy9#>gy-QpO4KM z*q997_5aL64QyGEma^sV;izJwge^VS z41%Ve08J2pMt*Y05x3GHtl4Zl1s9Mga5FkNxxr;lmXJl95Bh{Zw%KH8ahcaSo)`xw z>>Vg*%^+j1B+4C;gmzoWj;~ekzSNSY8hi{-~&i@^P7z>!L#wfy=S*kcDu z82^&g3JTc!T(#69Hgwa%(h~Vm%JuZ{WuQBuvj6=0rH&0WFsTj+UY1Wg}Y(lJ^DIQ=N_3ixk zvn6Wskd@x__k?Y%y8z;i^ECm@E1upxNdj|mZp;_}LPYS8pAmFUG)_&qDc*|t%P4p> zQFpSiVBcZ_)ZK2!!22I%>a_yPoRdT?qo*F&rbc;+9El$iYboo=G&CI8{BL82rv$Kz zQB6Nb0Wdbej>M5TFN;T@u5ZrbUI9q4>?#P3LgVeH>b(f^>6SO&Aa)NxibLddtsK<3 zyCPc>0BAP&@U`S9e=U1+>}seJJSdE8S_+NRyhA1E2x<%ay4P*9a&(-~_>eCRU_pg# zew6BJX!ByP*f{wa$A@Z1%%2zm^Vo-TdLQ{kV-3C0GMNXqR)v6D33G1UyQdaXhrAeb zhk&Y#`Z$Oh{0Op#j(4T*Yu6>wM4$Cy15F&HGjuz6AZLl~OxEh|ch3x+8Z0!LK*f0` zDmq#F{luuruR-N*x$+N3s+(Jw38~}H)X!W2lR=kb(TG1o!=w)n@V;T**Kbq4ntSNt z6+vmdA$GPzmXwd^JmN7x{&8 z31zd6FdVPI*<`)}tC@bfGn)Srn8U*x>ezgF+qp^@59&8I%?(=fS}fg5xf;W;b9sp4 zgE%hJ4asfBvF_$_s2%o`c6D``0?8DJr(^U)M_w_ELSQY^NLNB73aJ2`gMGqI)_YAk zYcRzi4hI|h-n6ZK$xscun=Fn?@6eU`|RXai@!C`;x z7R8L@w)H5mKsik6JwZw6d<7&%M_J`G|GfQLb%KgV;9NoP$E$t}=EzxkZQMgb5v&+N zVt!b-2C}RfFWH9PaCm}UT_X#mihEOYh&Zs$xyHBW+PO>{Cop!I)gV&BeTT~hWR}Wy zhTQ;pG-6H394%aoQsPulQ@b0H&YB-JGAB=5+OwCUY6jgA-mD*xL4Xo}B&Y&g#RP+_ zZ>ysP0jkM$OSfRqHcb={r}qiA@A6e(MM0rd0I#%z6hSrbD>fB}MFCyH*5>1_2W22h z4XYpYFaU{{{^bE$!56+PT*NSPhaw?M5b+TKiSfrlpeUO9Dsd1QN?B9^dVKVbkhAwO z>=>oC>#D;IrkDTCk+b0wP9K!@(RPM`;<=QQ6p1HDav~o&x)T70`sQW6(LqWYnZ8aS zlJnf_cZ#T?uaZ(`&rR@CgAObg6eP!<{fM=rY|UMyx#8>|{Ul!JnP%JT3?kqp15&g| zrTjdD8p<&?d9bFe@rXqwkymjDM_8bfhi+)?u+XT?%QegOeZ9%pi_MG3V^r92pisVG;$x zx!w+FmSH!Enf1m!jd4$-4j88%|yY8k1M zCp~Z~Yl#aMb5N|l(1IUV`=}7N$^5;!c4uMDBIBJ+NT8?ycS#q??KN_X)kSTMfQB9R zFhrXYF>6hZq2jo#OoLE`_Z_Q^?MkM$Nn6P3@-Kt_qP@+h;~CCnPcW7S<79#RHaE|b zGQVlr6J5NQ95qndCC?d?YBha=-?A>pRH_O0bR+_pmtF-ks*BBS15ho!O?*io0rmLb zCI^%QAUO>F7|$n^0vV^Gg3q_sQ%a$6 zoxjI8r+Bs$uxy~60ZRwaXBVw2d{=J2sT>Ze5Gq8q+2xa2nN!W)4jotP72F5D05~0I zZ3A7bX3^WHejFgDb%g%G4R#L=AtzCWzTynM!V1N31rywrdq0T|}37Y#{UcjGSr>!XfDe1>HS_@Jg*5dYdqv)Dx(k z{a?|i!W&R%<9jq79`*Lh(>{HL0G8A@{W&-=d76*FsA)fMv3so)&)L)2nJ5H9e|aPY z;Ph$^t^}SpP}=t3;m;+GD&Xw)$z`u)0kBpoeH*kj|HxPPN- z9p>VcU&iV*lPZ60tfb#P(~P^A-7F`mMx*yKnTL-MB0q>O*g+1PXCi>MfkT@YX{uq3d&2GOj>5- zhocoX(VWgezP~wS_v|S8N_)(FyFtbrVMn&B0-0*>6RR1aEET95v5aHR>g(@?v_#Km!%HoobM zVH2EimQql-d3Yz?G4?Xy{Q`R|?+#90O^w?U+Nc%;fUp@q1u;;>Cb4H`s?sMx6zSwK z1X9L|^AHA9T-S8SpvgibfQKjFp1gb~6ZU%$?HuR?18d^oVBBeS7vRRqJPk3$2eIQ{ z#LxG%$R%lBzGVmpNDP_^IOrfaU<6KI()z4%C*48aO&X~nxKz%HGh>Zf*XB&-LE++2KNr||YSYh1B~2~v_XeD(Jd!iADYe42slD?e zP$ocv$0D0=%KQ(B9_S89rJ>MLtNS({@{h$2^>U<>()QvW zN)Q)P#y+hd78#>1p6`ToH11kUfs|t5trO@-zH$@5xoTf|+GG%n#jKgZiKM?x2ly?( zx*}NRjSKRL(h8~T_+Y0;%;DyX_@Lty_uiqP>G?HVO=6_2N`<}li*XuAl&+FN{g`ER zeYeDJruh%yq|wL?aRu8955JQ4>=MKdMOmJjia+l7lW!;6la`1eIfb`iU%cDxJvkID zgPKT3{G&=&kXt9K#lS?KcJ1QeG%*Co8Z_o6ELxShxJ4N_Y_+fqDHh zo&ZpT`k-R}weC!{czW8N+eY{CIhpNraqu;3=6mVg1&F(bgje)u&*NXY=q7%^@US_0 zwb*&^YObn$8Z?=pmex?Idb{{jC0cqS->8X@vsxl`Og5A`9g$b5HI%Q*mE7vous`KpDz7n4!Zce1BzO(E!fQfQ)M+IA92}|8-zXL`6jbD0UpdX|WHqFx3^I03kP>c(31{q6!z{;aC7P zey>;RF23q@+SBsb@WC)D!QbGhEVvkVqCS$ovbbPUlXhGCbVay*vMYtKdx5B=0#qE! zfWg6@$u+%wbiu34a#~Vt?eq}XHU!jb4d!Ruap~*H(n!6X!4t%idd? z&mp`Ot71ipS&&BKf1xyXWo_sbdC`nxC><}0?q4-}l{>V>q`y;cl<+$hVDBoo0?uqG zt-rq>X_0LcU?l9r4eo_Sw_q*{q$7Uq_m{=T%bzuv>8-O_`QI5U6wuWysI89iI)Vsd z8T3g`@30X#`s=Ny&={q;60@>a=vG~6Fztv4a(<8EuOCy;(1@%`LtBBgDwbtq1Rn!Q zB_z=lP_;q>6j6b}nK8$y&Y&P1qGE$O1uD9_#fcsB1bgW%eiv{sn5?qBID@vv$|Wu2 zjwjNXJh+tQ3qGw6ui1|qDo`reb_fBDK_ZdoE7iAUJ61(Xq8K-i3Uo8C>zP(ef9lg_ zQwoculaxVCMe1Mr&$4oJucvsKv)DQ0ga&=6`fUoyv_;7t=i0FqcC|2zv~d~TbrF2d zCu89piP&LvBQG|~->vL&9r$?lp!#=PVv*a|P&)l3#R6sAuj47~u+Nonmp7-SmsV6uf$Vs$GQOZp6%SZ`7F>FYCpz=B&i|zV_ zo36x6$THbuMU(vw|9|2VgG<>HWS`|>4)=B(pH1R_f``l25NzB74u)R{XwWh70nxqsYIg%2$^5OOUPoDnBG$My@0 zJWeHvARDi3UP#uN--LU|@Vs&M#x*1t^G%T0u8;{iSvAT{sJ0V~&Fx_LLkVUxrrXpY zFxG9RfHCp!G-nrw__=9AKP7D-yoMdnDjJ~=$( znrfwDF)qOAOuKX?io~BnLbD$C7MI+<>6Dg}_l?=PUq?@CqMl*_-f~)wAI{(L=jMg^ zvtx_ksN=hWOj>`NS6W=Rir(3JoSTbklW&){yw{@0a2FA&AaTZ~f_(;RJ{+<;`-M)Q_~~8-Y^_oKPlVVPWS~ZIIgmDz-=T zdWFrv#AnY6lfub5Qm?)Y8H3_;YKe`8Lz9JKwoV6dB3r?)F`FN~Oe6FbPKmhK(LX&!QEygb6tGIp4;J+X5Gd#^JqN8sAL<3dT+=}3B2zJj2tw{s z^0B_5E6Z8#-T`e2oFR9wB|Nr{AZPOI2kur=@gLP>A$@I6Tv*xb6-|c%fzdW|%>q`9 z)&8PCJw5w=s3l8A?M&H(UzdmY5SltVIn0O_PjTs6x~fMMk)RdUs*A8yil#mALBn%_ zlLHg$+vW!{K4aCUcTwGjkS_p(6B$u|72sqoEQZNfjq=1)5}rJtemh0H2zGtuA3#PY zGia0hVYq@WYDbPHpLf6!gizJ4lcLvbIE>DF@$v3gw)*7g^!fHz>BN(XV9%E5#cHej z+32?j18oV_2b994Eh_0psYDUkyCuIxE_f^DlI}fq8GZld9EGobzDn4lXxB8fJ+k?9 z&5CVjHx*;#g???NF__Y5YX7`xi^*sQ!K;<4I`|Q*`(^~>8x8&hWMDA=@Px<3W&?!5 z$T^LwL7Lt_6QPmYJpf27u)ncK0mi!PHfp<6!jjJbbI#~N(fR|eymk5xhf@xJfsQ2TIFLDRO!mn*OMAWUVG-RvKmYtZO={Ck4&_*w5TKrr~t$f*tepbDog}FCGWNNtOb1tFYkN(It;L-!KONnHLM1Z*yM?$$zJzg_v`XQ?Z#YS|mV4hQ zuNlK1tHDa}GIqA$7zAP+fDaR|h1i2GWv(Sgw5=dG@&gXUR&W5j;mu6I^^ZU=Yx)!O z?HjdVog%Vb-e?d^yVt;ebdm4iBCMns2yN|7JEmfGMVw==4Q`}9TOYaUR&JMlU#;>Y zlEhdHJvQ997#@YzH$4xgWx}B*d_B4%Ddw(z)YKVqu~QbHZTMEUW?ntjR9lew0F{M< z(dR4zU|{6aN6{JOwGDxY#v3u^MZF}IMJh9qskH{>_;^rAJUw%)Z?01+5I2fHPcjlU zcCHWR4`antnA+a5ptz4+!EO3au_F7b`fnR$2b1JcPeE>PU2>m!KdyLAe%d0Svt7gN z?Ht|OP%!pO4k82L+g|=p6$5Km(G>tT&7JU2fNwfkbCQw59t^c)aUOT5T6tkYoGEd% zhhPxk;!=}C{+6!IP;sRTQgs$!J^{KWu+v(pI#mLTa*>~6pEYx)X^je5?101N)t@2+ zdIAyFp)pvUOo-SfGpb(bly&7X^##E&i9;x-v#|)XV_T6)gV07*y8NQb*mW%GJg zUrd8gM&sM4GY7e#nng%hf1Lt1{96pY6$qXH(p(k@YpFRu7~hYLJmV3BA=t@r!sguc(Mfa*pkbf(>7-tFn>Y>%^-KgW@cDT$?stX66<*N)MNdRK7H#V+j+o6^zt`GLfU(XSM zUMbLZK;s~j?mUkyHiD62#u>Fi{#Y;Vy}I%9{n3`!pAa{hDG8N-U_6`(={q>IWrMzS zZh^YEQa$*5IoSkh4}u*Sk%W2bS`fa(q@KR^>wC~HqseR083WXV>qV5Xdy9*U2u4nm z$sv#+GWmM-_oO1(A=x!1o%7Y#IlG?_V=7@*ASZIcgZgwbe=$DzImbFXz;LFeI7!oC zIbVMI0jD1$N0DM9_!13VC7WV>e%so{Ya4Z&Vo4kE-ZJ>I_i+D2Rx;nGjVrQYP)=?V zaSwNo%=}_Dj+e;p+jZ5T?wpK)lc^5GCiV-{x!45Zib$4hS?Icr(Nb#w-t}um46vUA zuo?_wLE%s(_KQ;bXgJ~D_+l0VuG6ZE1)uOr?B=Azo>&U;UJZXL1Dni{YF+iFIR~>C z#z`Uyk~+N$-w4(~1kYt~!6FpwD% z;6HdE^&5z*(q2E$UF(4%-xBmT1S_=|f`g<8U%|;YyFHvKZ^O%g3sEB7|=)`q~(SU7G#9_bDmsbh+ z(G*BuHS9)+fiF1m#zb!9vJ3dStr)i6A&aoo_R+MJ9!&XJ_yL^gD&KwEzsx8C;u2d5 z)!;0h6|L`rg_RY1sRLZ~tzt26(h$+ps@0Z?vUg@Ng=Bpl?!Z-bs}`kbFJV%OTOJ61 zN<%Ib{`%@llI~;;ONwVp|F1q%lWWT-ax7KN`w_qWT)0R?flOme=F^eq@yv>)3gnZq z<&nP@3KmdM)hFG%?mapBwFwn``-=PmJ_q)~!@&oV6ISn*&D6BBig7k+@_*)wa#$m+ z7KUrMj~V)-lw4z}hDy!ljC*b6>;@rkD`o05Rg_5W=EV5XF-WIrlcWbnjp~`59Ua># z%eh?mg&Nbrm4<^eNckDH6zpMRo^4JL8O*p)t|;)$_crY{h(~BltDIbeyZ=y>i$+X_ z7aM$LO1E6o&r~lbCRdQSo>CinFkzf*ib`~-l>?%%+1;IezrHkvAAYlo#cm5TYMUAg z74+oW8s0r+w_?jN!F7ol-NuXu(q@HynvgH^+id~#$1As%|43^HGUSXE@?I#%Oey84 z#b<;dbO*G&K9^*Zut!-~m!CnaE_~+)D|N#V^Ah|a@kvd0kS`{d9$l}Lv=X&rOw3jb zpUOb>mzNN{47DijBS3P2Zk#8~2P7V}n4_k_r=+l?#uxWUG z;cLZmcGoO+Gk#MgbwP#{@mIn)uDK7Jse0&y@w=U;*JKUO$(6BugZ>%)3%199f6^&6 z^47;2Qq_o7lSX2jE~9Ga5vd;Dhxm-EYDG~mCbtViU3^#s(hz(3tP)})_AS!W=ifu@ zZdBFi1yFOZtS#2x46wZu)wZMcb#C<72c2fwD&w1iI@~UuU@3UQh7UYfQ8-&mw) zPePQLV|tZ7kzRG@t&Vd|73i_Y)-^?BG)^=RtY52ERAq>xazYdi9G}ETiu74FWZU0BO5M+HUgluX$_s{s|=1y+OEen z&d6)qdl)j> zdVsP_@#$g6XuPZi@C4#PY0j12lU7W`zhp{#l2;^h4T{PmE|?Q&Q!YsA$zSyBW=oR& z^^=ou!LL>GtE_uNGGXfG)m;U5{r7Ay6AnH1_XfzftOq<^(#8w7Ka)0kIzl-n4&Ifq zYH$Z+fXFmmLOiG%KE){`vHqe3)LTRFwL_V9XigYu0}NRv4ykQB3k3GoL=e%L1u_b@ zA=z3*NKa5{`v&-yL5x~0yi)ajt-c{k+VSo?U0Je&>!)a^^G)If71yf+gDwu9*+Rn7 zxW)7S1+t!iu{LRBU}AExkRCxZ^f|-gqoQaz6toQpsfpoq?j;$fWB;nY0J&8&Jb&`+ z>He=Vga6l26VMYN?gEH~!E;$@Y4vaO-hk@;rIWVibaqd_`2{QXN?hzFt@!VL1gT_C2sczveR6e>0s_dI6=iS~}EhK2XxrPs#zuDv^OBhqXsrll=5xS*sNq($jJJc{ssp&?n?Rr(kucXF{ z^mST#-GK{UnE4UQqsrnhEH~OAK~+DMKZx5o?c2o~Jhc)=Gd_8p>A$@LuS1iyEhOKu!K<(BF%33?d(JwtyQ)Hy4R zFW!Cnl7S=FG)0bf65ZG6OVmaz;nkMeUlQ-YowJ#3EWC{(FT*L`6!`PDwe(%5tT zb+3W#H-A#<)T+y#_{3QTx}D$a-ybH1hf%8iw>sgb(%(GPDnLH3rOze&`(rN;Jb@QI zMxLKEKH9-W^>&;u%-*h@tl_70S=U^@aOOX%7=MG%o`_`#BS@Z0y&qTtsQ_@ECEV1* z5c9tjPJzBb%ArB_-C;VB_nE$9QxE7~9uQ!H)gy1|8vict0rlJerfGsc8gcL)7XaO1 zcgB)KvKQ2D@8CCKmq3lXm0vim6akc7%dAcQ`Q=ZYR{~s%D`g&h@9~Z1wisGJ!l+xi zoz-<`FHS0y?Tmo19|-Utj01=X?Y*vhb%!p8f}lU`_0MQz$AzNMV=s?4J6at|y}FTL zbmiqxBQ1N6Hg5k*IdJO8v}g%kcb%WcZ90(~7R(Gs?|@qs4vtkgGDCakGkE6=7z4DA zg2w)5N73%+|2PbsjCPp9Z(8CJ?M3@Qw-Y!$7^pQjF97@&Xw_lbwKUNh7X0U(N8p{m zXo-rn*FWH;|MRd(&?egJ%4X&3e}BLZ`KSGNK>O)Vhl0i*qV@g%yt2P*DgWCo`tOIW zgVxes|4b|uG5yp2i?m*S*XU>!49G42+m-$K=s#=r{^wz|*3w@8?dA*oY5xaW=RX9k zQlJB?l*ulYvQt}xE~dh#ADYTb)S$*RjwO8kgyVO=dPOG|-r);=$Q=}iFdTZ>1;MIU z`?h(U?QaX^&|Da{Od7)MNA%(_+zmM}g>ydZ8T3bk9v@8zC)0w810HUX4C z7;{z14(0wkbv-{<;&{PK2wrw> zA^eQc%|%?h98qzK6;|Rij~o}{=&7eux$cR1{O9J1KqOZH?g9o!zzqRAElZhMxC&N#e z?i0@+mq-H~$L4Y>+zJf+Kkub*4X1ZuYRTV~&RzxGlLhXK+f~|I3e0Zn-S?qEXd*-S zwFjWXAIn($NgGIr4hw5I7(>~n{P_s&*#F1$|D+i1sZhj-n3db6P zbRDm7Uro-Ay*#@6Ju&QN?hHZAEJxBodK+fqT~*Wcy$fUH?b4Ktsm@h#5T4|LLnaF9 zDB?kG>q1*jR!7P_f-FAIO+Wfkir5$Qa*`I1CgxvP@d0H)QJQkbJ>aIUj8ttEVW?#G zE?L_Xznj5U(zz+DB8cqBTErFi_^aEdeKx#uo|9GOFc);V;q9d7kZ=^W6#Zhqz}9Tc z7F*X>KK377{VnTpC+Yi3}=s z4w%58fcJlbS3O0l%jmo|pitO7MzKyfQsqn!*3r0Hoe~&cH4a9IZhE_lA-W14>ozh; z@*9(^sB(LhFKAeK=8Px~AP==GCK5&v%Y|@L7=g4^1d`nl85ygpJkT9eT=l^k3TyqM z(u=P9a;{dP3o>A3F+0O`|6yw>SJB?U^Lz@W0-l8ONp|b{SV7*S7v#tTEzPVDr&JBS zEE7Tpd`$%G7W|$I>Jtxn^GmjwOx8BsS3iFjAJGJps_JXaTjh7Deq5Hk55sKQELzT1 z_9BxgylPM5=@89y^lW{})ctreahsKD9Mtt@bw4gf;}T@A&wRD8wyGf`VZ1!BEs}M+ zONp%wkUUf|kT2n>{<(YGNe1K1)jz+Oc(X_OSPg|itp$@y2W`hatSsKjnb$nqh`R7o z9;69evQ4SACLgq9YeIu2YQ#ZR72J{<(2=HeOxT9BA&#*h$kLb>f{kz=OZaj>ZU?g* z-wJXjzNToJE{&tl8thRmzRB7oQ+H3#-m#HN$M(efn>2H5xvJy6N)LJ~ptc8EE|xhH zL}B%0$U40|r<{LG8SDzP>3qcsq03W)VlZNIk!n`U9|=j%c(~#KogE zI6du%IIYX>`iXK!#`RKva2!CiO|ZWzU!QGBBD)GOLWBH>uI88DzgNHcc!4x4L3<%oEE|jm>z;sbCaFyle$8ZFX7C zC$U+;^QN)LR{4h>W^^rRm3$TSyN2pCe26+cw zUX|_%iAO~$$?Q}F7}};Omuf<hp8qsdlQx#^;{q z#)ryL{R-LpT^xj2&zhso2d7rtX37n0yDb8(Y&|txhoF zv&B17O@q3Q9+P@pjaq&AU5v24mPDjh_GBd*B%!=&b|_-C=!C)DH(^lA%YlS06jxFi zwd1slPxu8MC=tT*q0*%3iA3=pcn(Wm+7jv^1d`S_`7kl{mimXv@L#eQ>+3v@ z<1(U6TdEZVzFUQLI0RcCrfu$v~6Sl;sQ#&Aqfuuw;gb02n_NiLy1nJK}i zH{SW6%Q1dJezmbM%pj2RssfL%8GkgO=%YIte!lasqKeLmPG-G{Q56p7*5Ck!fBZo<>t!G3#heG!u~vl zQba91$_m9pESJVntEw?thxF!PAa-yNv}WH2ZsCmD?A7$wg3I#LS(C4itW2c`XNMh6 zL#Ae)lD96lYgKQ+NWZ{BurMj-+{E)yMA$o~%R2+qpmj-34Yuy{oc98-5wLE@x)I%? zYT+h`$UUw0%3WNcC>;#L8~;r@Y=6^yna{m_9pP z-!*qizEfAy&)3u}aHsftoOyRuJFoL6*D@GB2=3lQ%BGe|`nj|FbamO-<$Cj5UXnXt zFS-D?^uRxNQD)(Hm_&Z6+YMNm7uJ~1O*LL?2Cn;QM!;W0uwl2i5C7Z4~(IoO&z z9(Vkfw()4#WY5du!AxoA_<% zps}nWLxRkXozoW;({fq#xHolauIadn)Z?1v^+FCxlQh*TsRI#u^73BaO$Iy^@jZp^ z)q&5X7SodOdQOi)Hf(vl6Gse@k#Rmw%Fv*48LkjtP}$|XF%R)Vj^3k9JZ2Q}4yo-a zsvhIp8pHh%MyScF;RiAM6)WA#-637WjSaJ|mxqXjGo3_?m|?G`)YhJBp{_xQToC$R z$DA}D(|bx=Vl>*}msxW@T9jBS5w*)%M+ zW;+B|122|i8I(_qk#fytqLND9#;l?ead?m2MGh^=>4@I(0AKQSpU}l|yM%k18bUav z@J`Q1={cN_OQ$64VBB(LKMqF44qi4T%Zd!R5s># zapz#UkO)dMJvY}o74dr7$Z(dY+>e;Bq&(k98M~3147O)C;no2>3{IFGzCY`>JrnnM zGR(LM4He_uXlmyd&9uT6W83OF$A!YcL(sg`zKF;USCDuVL}oFrqkR89hYh1`{gn zaklER6rElF)E1korT&zGZ-kY_asX_fwJWGqT{r&OA^^>ahFXQt{E`MA&aB*nWE#D5sKrzdc|{*%Sg$;qRXFoJYnYa)9l1s+Mv< zn{c-ajANBk)L;vBhg?Z%1aY+cni8usgkTP1dkfonI=k>a<)h23)XOywd{ze>!4itu zAL%MjrO3*=PJ}_$a(iylq2xwtDOKWf0rU8i%ev3VWyZN%v7=?no(%k0!xY}Z=x0Mr zq1?Ist7C=PKJwP>?D#5)gk->9M?LX&i5G579{lc7BTL=nToyS6r?1&BZk^CF0qe7B$od)hEngYBuejEar^CN$5dQx z|4l6j933L>Gnp_R_!0;^BwQ_j(FDI;1HFAo}kIa1y*i#5OXdp%p)G|A&#c*b0}O3cvZ7FfrQArpRLWT{_p!Y>4O0=Jjl zM!bKa5|!1#DpVx1HwAH~UvF7`{%F=nIiDGOYA;mD)O+8j30+!;S9!cF+yYkQ`?FEf zfsD17noZ~1*&p3D`t?@EZR8EV#Act;aKvp*;wUKaj5&vCclxL(p9_(Ps-*ChDd{3$ zD(%dusyhiuY~z&T)p1{P`U#ld_st@hv83b$S^RXkX@&h(uhux3q`X)W8|_zQwfH5< z6Rg7PZpy>l%sgwnLWBsHpA)i>(PXbkYS5X~ML%i;SK!`!L>ZAfV^dAJ&exJ;889}! z5_&TS1pNi0`;DPxC>!sQy+n=R;3G=vxB$Y~w>B;zNL$5f;19yjUX0Vk=18GzwvTL6 z+S_)EVT>;Gv9VN^q*26HwSLjjHGX5_82_qN@^6@c<5K~IPpfEy zesVlBr`raf7OBO9TKV|e?!rgfmH_v;=th8D4pp=yd@abUw~5-kaGXX)w@WigGLc++ zsx^}H!Dr25Gde`mc(XpYJzNVG6izvoj5<4{ilbO$bIImrI(=be9(UfiAzb&ZXp@0& zbp@p#UGx>&#FTTx$*pjyBpda8YG$d92oF7FovOdWUv@SO+yZC+O~Z4wGTd+to6%5n ztzY?nk;-_iZVcJfX?^M%53HYsl_`g`p{80*P##!y7_Hhx!iK>jFA7%8*Nxg zV7(Ukul&I3mVHe3H6F97@mRIYy7y_NO#JwJ(#x+HZYP8#!HP)f6+CXsil}Wb=%*^e z1Ur|1Bee)?NO5=V+2Bdq-tSBjj2s4g57XtDPsD-OOvep2fF)J!+LcV(hKYO5Rk&1T zg26pyL#NS@=t%W?Kx9U{uMP<$jAMu)FpA$04@w{`%cf;;bGwr#+au~hMHxDyi$L*e zOu6vkCKz)csh>VzsLuHe`XgJ5$x&8XeVqhS>L zu}An=dZMlT)eVNCOdq}C%~f~J_F(t;%EHRUd+Y>%ux*(*_<>vw`pQ~yk6aXb8fS92 zUmUog&Lb9u*DHlmJSVjhYZiFJ8L)F^UhA&hDFWnB*{$jB-Rp%l4K%~!qumO&a`3|b zbkp@9<8`nARD5df***fB2sHD-|Duo0#MS=n(8ZT5g>nYNQph9~!DF9J1B<`{N&%a= zVJ7ii%-Q*-lB`WeMo7KVq~*X7p=qh9O$=gfLx_baC%Lxrz1dPk945{TBo*{lozV8I7#(P~O^%GqjMbgux63m>%ntKul-55+cj8 zpTD72jquvB5MMilbSBXZ0I{a6kxv}_YgO}^DU|J^L~$-$;rPCxC3I(;6m(KWVr_56 zY~c}yw68=l{$+T7;!aoXMpL%sHm3)&9$2j~aN{P-+Fu_}DAZUED(Z5i3i#zosu9t{ z^AAoG?9YY+v(R%K9)ZaCio*}O`0(l&sYBak1fDBSG?~f|+eA$G ztx#I9<+5vFD_z)eECJx}x_|3U6x>}^VFBMrUbvj-(Yuh?JDOZfw#1l&Z496ZQ1n-@ zj-Jf+So|w!qQywivOZX5pNC)GQ=erueVK(1e7cFmGma2Pshq$i<80LgCPgIPPW>3g zUp!{=qWdJ1@6uLf85ORdUBn>>5m?tftJOp)Ek|D3y%AoAxgo@D4;>V+=kbwU&kotG z^(rA;IR!C#Cuv5Jh9ZCMwX7;78)TbLKe!9mB+q?^Q&GMhLp3e_jkWlOqRoB4PaZ=B z)S(eLq|$a#(|4gUClR5P)!~hv6v}zu%in$E_=Se%SyO@>n0|t>Dgq&_NN)U=U?LHu z&l69#BYknQgtYMKSh&|rvmsbOvu!&9oSRO@q!1-0M-C=B_ADFfmt^Oh)N(0XWi z$k7Rge6~Gc5Cxo;kd9G_I(!G}gZdFZ4GWt;!TRYW$>eu8 z4_78ac0wsnZ$&mO->3dPYz%McZ}>BkmBchDVPvxZ-n(pmk*ekhc>pHC#p%0h1xhun zsGr|gVOr9ZqpbIZ^-Jc9XogC>e^9sq4<~8)p1A1mx)iGJiBFi{`m7PE(u=>CmC2d< z6?ZQnvZJyP-VvQUdMm`1GMn;8?V4*YwvwdQ(J(EXJvkF^SDko1U4}pWyqjADLu2_G zO<3Uagz-A`m z0}h>+4xSGn^*LAg$46gat#Ij6*1etZM!b0gZaSu+(`LYM5F$)DAWFRMmxv`>Lt9U* zYVE~I4psZb^i-Jpm|S2&U) zSYs6Vs}~F1E6BsO&H`UB&bc)+_x6Qce4GTBWPBQ3c;dlcFWj(dE#&zwew?~Zg$#o5 z^X71bF6p{7@OL}|?i$em5#DY(6EYDa-XqS$#UKZ%uT`G9=v6OH$@L!MWJy_d@YIwi zO9yoqM-`IheV*S$qHL^8@(n=rZJ{p@E1ogX8t?2WC`DP0%Rk(GlQbo#UxYT#llP}%2P1JxEwNx zVU}|1^Br(0U&+PNWzCxHC4=m5g-6@AGGNsfCvG>qhC#EfL$+ryau4{OV|w<%6b|j3 z755@h#swHT4xAPnSRi~{rUE=>n@KYP-=ciXOf#MQt)vC4`x0wsi29USWR(MSZa9{s zQ*M1up7XA$`+C`+Wp$pF

    4$$tNl=lH;Iq-ECw!%wQ#eAMTuOV2(+L+4Fqs+5Ej_ zLa3>7?racX=U(c8C$W?X>LjJYw0~)Fi~ho+l{RdTw$CeGkl3E^;-*)$$pwok)b- zR(0$mxmQy{77o?Qv=?@BZ%QVRxF1WS%aCdM*;}UNa;nzS+dujedY86cbL#|5kUiJn zC`*`Gkv$kj8q$R`KYYhL^%LX8aS@(EzwXXP08g3y$cQbFJ^~JJ34}^Sl$N|KC|jTn z07|;@4k!eB4H$Ni=}@wz9^+}pHhLIoh6m5l^Q^DY+_WOrrGTV?h=d}atANdC>2XFU zT&`}5u4XHzh}}=b5VGr6ze$@s#mK&VZ)0`T8$TojnXH?^Rt#06`?Iw=XX6O9zat6M zb^6)QF;VG9)ruNvzLLWE}v+p9VO+k-(Z5JeYd?fDk3TRx(J5@%6?a#h~oiZhGOc49mvddli4!&(c zkg_EmJa|L2(gR6fs#=9hEeh!{p69j^F7xvGm!uT&Q2r1hIpQ>8U>Ote47Vl3;YGNj`s%I)>n8I z)xKD!$F8O9MbPuWw(?v9ky~XuLV9SOmh{jA5{_rQ)@ic`!e!~T|5;GBvwIp7_!~3c zf6-MbI|aCCa~CbEQoDw^%*G*4i{xt#vTTeKDjl_RJ>KnfEsf}CZfqd;o921UQ32liwu-w*n4kAWjy*rjR5ocec#doT=bu|U~ z{HA<`s52^elgkclV78=LEY)JSPJp_2Q-7oiIzOp?e3#8_wVgALelj~zOH7`a0NcxlIk!&#QJx=LsBBN zi0q1$I|3{=Khi!=hriRu*Z^>O()obV6! znkS54LX#3i5x}a|uV!kUjHEIx`*xBHsUL69Qx7x~i@w1~LqY@7L2BsHB5OdAK27*nJ?Y9O}(@if1a z6)|jy#v|~E6+f4!moo-`_Zx)|;KGkp(J zxNbwsJp#atoFr&B?)+hJIBj5qXi2rm{}62Nto7_=`X%hWzvf5qc+0v)E>@(qS z4k4_8`~;#Ll{Ahc7q0WjZ!|OJaZG;RjF6u&(eY3tteJPoR$vX$kwMLuP!-OQeOAmK z)^sh+OwMl^PELU(Ph_e`P{@cv-A`m8=fOfz&3}lK)z!bSM2G=EQp`*vC?eXUKd;)8>Dzpm0 zhVUzhL~bu&SHBhQ$dojkD3USv54Y2xmyq+vJa&|vCnYC!t!&5baEsMlm9AJ@BXr1_ z;)uVSEGy+W>l1#`g#>Plur6s=IK^kVP%l}^J+D(DcS>V?QJ+@ZC>92lD{oUe{Oi?` zAc7zb$L8854>(VX)8Enn`A3!lfvfVakj8Ug&(ljpn_`Mm;wB`a8hKws%%x=}w#5i$_39pGsPs}Dl zu5Gs=lF51CfJEx+0=w5m$Pa%LqH{a6f=43y&x05STNof{V{+z@v)QYxsZ@$Jh;#z-+7__4pxz$y49 zE1U4S4C9Hlc7*MZ7R5EgIxhUKT{V-uVgkCC_1UfKSE_93R4-{G7>4aT@i&mRcc2*b`yY>hL2P zMlJXl5H00xADlyhAAe%SAg3m)eI(nGQdBjDIt$crMFb$0=4FHdR>m6rK(}RjU`~1H z2H$)KbQNgH3b#NCOKS3Em=2a%`djyGL7Ph05?9waP5yu`)qcO`%4(xb=P%H@wc6?L zsO0#SYamW<_44m*oquGf(7nu>t(5acodLN*W?u=SAUQzsQr9Hy+Gx~fj{hRU3y!Qy zq^|u*>`8oO2m~O`05w%Qg+7nT4hZjy1^$$t_gL3ZC*aQYS-J9q8w6ffP&>Qdh>v^T#61mA&) zfz_0GV+ZHWhaGGT{7pxr_qTEdHb` z`cigxL#X7*wsGr}YQM)Jzjkp|&i!!#-tO*n3Lq`!5Z%XLYyHCnY(5itRaKlfYhba; z`5h(fE~v;i1zU7eulBCP>Fik#ZHOnf&@Ir*bZ4|>K*kiCG0?R6;mgVR!R6=o2nHs! zES8ph_+mV4X!?`O`z*&oFx=C?SfR5Eq{ortLDnF!8LGe|{;7sAhXbgV-=5&s0-a;J z?ma#^?DPW_sT!gdEgS9nEEnGEyI*A2F*=by5BH3^V;qpka)^H_MVC6*t0h13c3M@A zm99IQHVc0&0$X5^K4@TTHV4LqRBvrp+&{nGBxT1Hu1QM`1TLiBgBpnWQMxB8@64b< zpgROTZU9IKNETE){iiKJvc*Ms+puM4p8z%-CgoCS>lV3|o$A`v;y6E*+kl`kqvb$M z!YaRQkq}Yp^9TP@H2fn$LYpF6-qk{O;iem-5LXJEG?TQLoiYa61I{G}GL`;|#`gaQ zIj?_mmj2Ew+?bsMxJKzAr36-ILlYokD&h}xvVMa4;o!vOHM=&wd8spIM_)#0s)6O- z^UIU+WRV%6n-|e5beFl0OT5g|jQenajtDO_eDiyL-qzL@^{CA&35d(Q0t&80=BQm7 z|3Wvh28jE7`0xSbI-?}cxJ%(~E_vBk&sG1ml%Sa?r zdVHBvy@wStz+F{r00_c?rqf>mQ#SFVjRPPW``>-|?$jcvPX{t73LT5mO>ZC260dc1 zrmxYRF$N={ryJ$#>g|4nhW4;AC`N{Vtm4HtiBcyp8AfDe)Z}wt9)-4 zjIvcwa2rT#t{W;m?4_s$nVx+4oc7>=rB7HqaBm$XR|9O_uO=uBF)3szXWe$5mHv;s z4LHP(0#H^u0D%i+{HFD3R63~gf~pqXXRweecs?;O0H{MV2&hAvo%QeX{ngPiaNfN8 zea8;&m+_M)cibiw5({72@bZfbDevDBSD)+>6GUn0OM+W~y>`;*oy7*gu}@EEu-&3* z**aB^-;n__$}}#GQ>g`siUu`{OHGt`Gr-Y0dJ} z+xN7u9y#HlcSE)Rn+yPBY!2Bz^?on4+O42V`1E8oK;u-(+kVdS_u+3wGvq@m%aswo z+IG)7ra1(=G;4p0&3A4VwQ6$v!Z)F4U5IFu?c@9WVj#hqSO16!-@3+k;TSnG;#q-< zd4}59WvAF-PSuTK4eQ#e)n3h>^HjbXVYrQb7+ZwWM<1`J{9X<^rFAD{CczU6$hENb zAN1xmZ2)z3QzL;UjyEl*dNK>%9ldV&@`mI|nb_tFr^-#WD(7ku*z?C$Om%9KbSmJi z3guuTRZJFS+g3sYv?*~7)x{~7M*}RDxeR}k^c3OdX`Ty!rS&K^fFe>Fh#*nUfAfWP zDc}ny@&hgP2|#o#s+>OAVP557t*Y7z7+&>5w~~PfxzRIFVdxU>G+aCdP&vA+dXinB zq>~xozkSTZ?ZQlNDsz8Hbg9lQz3ez-0o?&k&5xxb0It>>4V1b0R%Go(kxv*VN)WRfvGsnI9RO1D#m&MlnhVGR<^%xpWzK@S{%c5|ftaj?Qmto+ zj!ZuKoocZ$F_|)=8yhWLL$MC#F(aAHmWHvR9(@LoA=?s!zDx9A;Y)&oG1d{trWPL^ zEeHG&8deH3WieM>&~IS`*wZ(YY0PJ{YOh5g=%Hf^dAe zp&rouRMiEA9OR}lei_%WUjASmlm21-tU){N{G+gE)4eyfQsjUXUg8-egwdDArWtL- ztzgWX*1mB4PlEm6E93Wk?^hNo&JKO@{PIUdeH+R4a9VeJv*Lt7+Rl?`DA7NpL*18{Qp=xL3UVUi$oIxjMm?D@wYA<=a`-74; zb%W*o@kSG9@d*9R=J7M!>#TBT^oLU(PSUaRBdJ7gz^eH6T0dy-_A}cV#Y88^4RrmD zJKQzqt(X>PZ;Qi9a6O8_my9p(FI0${9C^YhW*!}3WK>4dH*x-gSoP78z6}WcN8Nr z!a^1`Muz96Fjo7Er8a*knnd-~EE)24AGpAe;u8xGO5|TG>N;+);zu2e2Ihf0sIzvA z;?Rp=d8v_<$iuMt0s|kP-R6(%0#2fy0L4h}pv+&YzJCMg4CiSTy~%wtyRZd7Gv#(+ zByVm2a+qr7 zvMbjJV5$Oirwot(N)V-yk&5FS^?0g#p6~2@+tYm#X ze=H%&!4E92yR45Ce}W3o?B?`EL8ZgNQLi;$N=ZUseum5D#ZP~LVs!xr=gkQS9+9I> z)H}@Wxp5s-UumSMcJAu*^?4WxbcSgJi|N{)phig3L{*_*xG^0+v>=K^{=nGoxM+`{ zy{Qm$(j%JQf@T1Py^S+q;cAiz{O-|=P1(XzJB#C1xtj}$Kq_0DMUPzYa302u2K;Cc zqd=OArn)kRJKRrt4hpoKv@s@@Pv0E-^eR(5E-%Py&!|6L=oqV7L6)V$xt>9WR3AVB zOuM?~Xyx6p0YC%xYXBQPHr}hh(%E&x%iAgmd*gU>^7tfcW!s59Yh4KqLWYo(zN(kT zOxx;=4NummU_n!WXREcGU()&2;n-8}puA(F4Zs4ag8hKg6caP6>%1CTNCI@h?@BA; z&C@m+x6KUmZVkK(Z;Y}lI?X2XD20+=Q7QcZP1z|zebyRtbkW)j(0seprgkxPCog1@ zD=ybQiKduPErJJ#&M=xJPr@g*8bAy?cswzned37H5zD9J zNB(H6DA1s7<&N{i==iT9hQJh~^6By=b&JyjFFW&nHcJlKu`8U&**W&^hWtqp@t(L> zVtq)lv=4-|#%vitWNetYS!KFG~QO4_pnDNi6g`~rH4dr-eJF=Rn~ z_V*pIetMUAyYV_zSRXrn$vO9qxbzF4dF`MMz)HGCWGPXT_ObqHJ>Bp!t0-&Sbsym- zAWIORBWyVjSe8#LEL>(Z#NMB&+!st8#cu$~aR9y>I0=Mdm7O2k%Cj^2fe^LG2G}}i zCSy``@?@CgNyXy|=PS#EQZKMx^xkCQMGy}=Xac)KfM$0j%1Y|2B!7B&Bkp$f-d{3~ zWhFT`fB?N4x17#o8cu5{x7sHVFp>bia!H4)s@6alK(Jz!$SWS*!hpyH_y%1m@|Ht^ z00K{xBlUmj7LBdWt$u@0YV63@3f&zAwZ=RC(KE*G`lemE-9hE&jxS8>*OvYkf0FS) zsrM5=H#Yzir$*ijFfc4qfUGkz=Y-df(Z{s=xWUGR0Rl_$lC@MQ08 zc0c{V2dVXNRv`nUl+iS{q#u#rxDARdk}}HR&&@ms1cq#u9%*g%{XCCpQ2{1njoQ!I5^J9?y%! z%5%KOkJRdJST5L|r6%R)T{36PvpLLO_+l!hls?Go%$~6~ppoW4pGQiy6^=Z^;A&JrG*UJpg{u2k_HX!d7os<=4F zOkF;=3P89Xs6T=e$*oa5%TD{Cq;u)$SGzO!bx52;k{aASpPtnE%a`kIMDGJ=m-Vy6 zuP6DtXd1_|mlPeK!B<-&4zHeNkq&G~LZ3JL$+OS;L{qa90AkEC)W(q(bUi?Z>WqJc z%;tN+0I&TVhQG}3(UAT^Lasokfu^>tewN4{Ef^ZD;HjhwfvSy1u}GWn`nPaF^Xdg%!_NthhV~61OhclvYF6R5 z*0=k#_*0BF1AY(0R1E2HI;YxnFv-@JX=dnjO%1Z7E^h)tHxQgwIQ{sW<5pL{i7t%GdRHWR@Nz*!86F zi=St_Uk}6&i9gs3o^)fJ;N0juH+oe6J^ID`ulV$D&Oa)h{?do2?8Muh`2ki}!Mr*! zaQL-cpFAFM=8m2zwb4Y2IOitUMrpb z!#W$~`)!Jzt2O5HVAg8XL#rKAU`C4Vw(A3GsSE(855>fy=T<8R_0=V6eR*^9Pm1&I zu8Eklk9Y|bicCQIy+Y3f?IZvtj5oKSeuW;4znOi*N!;3XmXFf6k--P$yfi-Sg`S(s zhegcjU>yr-PuT5R&wKM)*^8KaifZ$+Hd`cT7h~Qe*qw;(&Dtv)*onQ@lXt{)iS?H0 z6^Fyen3Wp*^E}E6Y(m>ok4{(!y9={sGU-A5KBifd!?Sg|f(NZp!#4gR+To_60mS-_ z@KDp0O787FLelJ|!jo7H1MP$~w@GI--@CZboKqIB(r@de&Hav1)8h%9Fbd6j2x%MD zGOCpIBN}#GX>I+{d-T)c8P}-6;+dOUdrUgVNCIZdrz@UuGeoz1GA@eA>irO<($L>I zFdFl?U?l$(A3TwRS+4JRp5U3&u1RfAS@N~Sd6lzoYLuT=6?9=lsyJ2WkXpqD(=(&x zNFOh_oXhjnP(`2A=(%0w@j*D$bx#x3knk6IC?f=S?GJ#t-LCeFG=dU_Q0$y5g{A;cLMhXT|zp*kZXLC&^E`h zjn9Fy!^?llIJ>`{{*arUvU!Lufian;q4Cnj(R?L1izX)(4t%^qe=1WIgkN;k)PR8r zwnAW0b-qTIdgQ3f|3K1_6E>+S>HZQCvoB5Rj_{tW&SR4v-9{*%?l$SSU>(2 zvb}UCU$NYK`r6LJ#MIO7Uk>g9Ao_<7r{Fotkh~Low{HFH>>Pa8Pte@RX;S-sEhR9nghc$@6!9kqg)(wty;X7?{~c3_2|bOJtQIzoJn?%fo91P5DQma2yg*Z z`mOmcOMo8LH#DEkQvNJ;5zufs)W#x~bna<)wyL~{WEyuc(4aqD?!Z!~l-BHUU6s7Noqtp+nk~zjP9lreS)yfr z8&>8kZ2)Z>u)Q#qrQ8izkOQiTKp;mf!xe{iaoEaqTm!q}QHdrRz3R4+8<0q-@>k_> zWO@4=@C9{&03zV@An4t7dvf}Ok=GqCsg%u-XZ6m4X<;pbA1h70oH@3IyVu2d9+NQX&)@yw|0m`rN^d4Yd0M)CU zyPzv4U{oknY~x3VcL|RDxQmos!4}-XXvYlp`ZZ7o0k=j!q^h{M`&}~6d%O zGC@#QHmU9C6D=B!{4%qbDw&39dlY^F7??oJds--@?rswbdIiWw1I!~3*x{86rxyiM zQE>~=D1dBZElL};D1I93Fwt}r zYVx{Y0TlwCkz3q@(P;(gCxv`p~k$QRxei3#8E*3Fv;{p1%>by@i z)a%33<&Nf=Xd}3(J=rgP-QHp|Dhd!j`2Gxqy~eb~*edS6vl*eW*~bc;a|TA($n#P# z$Gf2kQCW^{0RF==XzOG@lnGi^y)@M z7Pb9xXrOi#m9a7WGizMV4eW9NXfK3|1qe>O2l${NJ9bA!c75jK)F*ur0c$-^KF*+_;?e8x2JB?9D`5`&koTGAF*OiwI%0{ zY2l@AiS%IX+bngXCz_tGEVnA@*l8xXKpJ6Ahu`O&q|^8y2nTx*nmQ#gMf%P|4FDc! ziJK8Dj5Li&5p7-I7;?6_N8EZZXP$PkW1taO{-$h7-r8TIqGoIit!J<4F9N8Y-6A4Y ztrRew#iesWZn^QC!3`EaU|(?9 z^y~_A=#cNjzP|$Uuft~W2ae^%Dkl#6gQ}FloR`R+EdIPui>AD0y+<2^*VLG?2bcLj zbo6G=W-S^#z+y%fV(vfF=<({wXMSg zX`cFx1##5MzT5{ZZNYssC+U`_z_P1+7@w!W+PNmRv=3JZ{rdKJ;24kwOh4_cdiHnB~u1> z7_$9Rr*0kd$z(JY)rJP3bcm0nhkR5jHAcOlCZ!6FL!1$_OMdaD!o}9`yZl-mrPeIn zrGt6!ix+lH!tF*BJ5^n6@9cpp7;LHMY$M%r?WjsKc28Vv#H+uOuvTbYyj;C3vj;&J)`6O8PT>+ z*~#_%aHN`k@Wi#jZ--e5k0M)|PTr3FehUWgxAb!k&n)>^+E(61s4%s5w^)Kr+T-me`^47dUt?`$d9lktgf{+zt1PI53V}hbB678q-5~3bN`S?^vznrvF03CTWcR|umwK6IER|AB)*u)yitcED>o zi@Sxovy)vO?m^`?{|ZZ2%-=1NEmUB0JT;;8U1fG7uG>eEFP zkJT7W6yz+@7`=N=!rmxx8{h3VmzHz$INMhb;G>+W2f6TvJ6cOm7pTA8D7w|;X~^e& z?u^kFmS!cZnp4gwlJ%2A<@>?RUt;(IeKvL3;6tC>0kBo#hLR+>tboX{f!iEI368Tp z2B=FLcHU}>*RCdH9uF4Tr z+Lh0sS8&oF2PLqu0JX|N<7cCiK@s!A@|gFPZJ4p@2y#h+_eAoeynmy*n^{ z5`xMCO2EuCh+z0&vE$u&e6`*z#2-kjac^ za428|08P`MW6Tn%$4|3m#2o0Fyw>V9ap?J`Bk%iv+I!EaCby_-6!oA-5LBx4BZ|^d zq!&>HX@a!SBPu;~Oz6!5N)u6v(hU$2dJ82q1rY%e>AefmoAi2D&Rgy~?s&(zR z7ej)OXYalCTyxE}W_O8}ZaO>qVV2>n$a6oxAsB=t%$cS;I|k(B)3C-gG4jk$kJ#P% z0paed1Md3P*9Wn;Px*}b+DC@2)bJkYXOZX1&Gh_0R(liq$7dw__0sse&5}mRG$gZg z`vg#hh(d&C(4wzToBY;aTDK)feT%7Xzh>g^jc$!Z7A`W6 z9doUHPp%^&O^u8UPmrz@u^@wyuyUf@SX+pMOINqzK)@RRfB5v>NVFw+s=Rk4c zvO549JLc~WJ~eMrACe<}7(dSyDXL>Y>e%qNX797C{8@-0#G;AdYhalWLxsFO@J1<+ z#Jjuh(S>R$HykaOC-^v+f@~Z|=@q^4nY*9>n^S z?P#eHI+eOtRR$lkJ#M2_#WD#QtGsb9G>O|)7)XQxb9m=#fV(P{YX1C??H086vr9-P zo-zUJ!AVu%5Gk1@PiU%b4`XGTa|mBz(uwAt<3V#~J8_!p6CEqZGGa*D$5lrEYfV>s zOr2*hkZs9MyiDfMPLjbCMXY@R)TD80^81Gy=H9bB9DZaYk_3|t_dfCz_XZ2JR!?ul z56%z?6`OD{E~x_ZhOFQ1X)2Wjm0TP`2J&Uc*B+cbr!^Z&MHuX#LS@ZO9Kqu&OcQX5 z=O|WTS7JIs)Cdig>8HnV6uE^1os|mr{pKuhfyxHURFBM>rd1-alDM{I{OEI47?J64tfrra& zk1@jSh@|R#F$}>0%!u8BOfHeUOS4^&HG{!@j(?iEOL)lV8l{6mG9ivs3_nrLaC-vB zg&G96iX!6;6(M7*zH-;e7{dnyCMQbwKR=_lM|sSC(^);}JdyP@LC>$N2@dc2hnc3- zQsqZrT7!NcdEt7Uf@SIx+|BA!`Q8g6JFcV5^X;@nd$neAPs;}%r_nu?$+3%>ThCa& zl9bON%*)FwB9a0Q4y~dxPe?K{x`3z5LOomW>CySM^s2FuhtX>l8~gzcLMMNn#n7?t zoTT?K=>n=t(z z96D%2W=E;RaE=ag8 zmv+azq~=MrXJ%9ztOS1N_VbgJOYE-`GKb|BxK)Z2p!ITh9^wTtBIc8FGRhi|_uFLJMNb0vLvvm|T`OL%KBaP>Oo7Rs>`vQ^r0zS`UE}9dhEORIBc?8q zdNM?mHs00if7pE;CMy@kjj4d@N!FN+2UlXi;SN)-coHG!4cOYhr&>r_%ApL+PP>$` z)_rcvv?fo>*wD;12=&0`8@YPY)W2s>r?$FIb}b$_VBLjY5o&Se1VYl@_Zy(fR<5c% zKTnW8X4?$e4ELuaW`DmlQ$x9b_C2m4a~PPJM_uY^n7YM7y&HB^YEW8XGZUgtqxXuV z`xFwRb~l!I3eCk|Iv*p}##XAn>ahw4T|IN*+NYqbA*k^@Z7q>=uGz6>j%*AF%8b|; zT|nhkZ<<(%f-$n+$wNVdTs}SA466olapF4vuOyEV;MSCoOKEYwY5JI_p;-n)Ox&Fo zXIHiq=+jL|s@x{1Id|N_f_iTSv0V zQSpDN*PO@o^cfi$G9O-KTfr445qdtZRJk#qipA+<=~#R3Zzvt&6(Inp4G14C^U@P< ziJ$f(RH(`g;D3#-btf0;e$2;o?*mJi&%bdv@m4i7)1%USa&PpghM8$ErWuUKGC9U0 z_Z& zndh;cq3I385%Rpz=6W8gc4B#+Rtb|pa*r&K5zA{`W}s;pvF86E(Rp}0W#;~MW;2(k zH;JeWW+5r>b=!?T$2^s=?1v^vc`s1jELqf|jJJr6hM|ucvyI13x%Y&?kpsuUxsL41 zSv;+--Z$mzkN!+mdcu9w7<2WLlismjl(X6Gkdr$1!2%P2& zLt6L1`M*1uW<7g#oZGqtBjkhsz?L(dE>#Vrg_+7e9WFpsVMGg2g*U>Bh^Y4S92%S{ zHDl{`4FzdN(s&kLo20Wst?dO*C+#|Mc5U9(-jl>zvZLOasc`MIWxP@$M*T9q8KY+q zs(-<+0^D30{l1r)!}dW0x#z8QF^87j&($hfAbXGMr8BjjzV)kNB;$DM>2}H&d04Z{ zo6p4Z@8g}<`o1?_$qt?%x*3#Oi}$?l=Pwz5S8M*PEi8SNp!2S^3(eymb*WR}2^fFrriJnI zsIE=iiF~_5ZCz5n7M^=qt3iDzCbVNuLqMGnBCM<2vdetmDouYU_LkL?cdr?~bsA9@ zR^#qlVZRSoy?42!rX-%KYrMBwMCFjwvCS6JU0Zi3)2^hE8ttTu5t9B+HHnC4`T&-E zj`1c*ID5v!=|$!|-l=na_RZ=I#Sx4#LT_&E6F(BORhtdy!GYyU{NvMfj3+S=ct-V} z%0K4!sLemd`!v=qivQ_J+^y~Mu!M>p&L2Vrchf8n8yK}l5~GWGer9U654n_fCs!Wt zXVqk2K7Bfew<;oZHyfFYG#z)|biZX6syo;DgHu8v&*flGQYp;-@f!Prz$XDjs!5hm zU^~zlPs=y>nkxqQBNDz+5fJ6&k==o1b1QtRPY!l`j%)0+$&CmuJ}Y+=bh=m{ohjO` zskRPw07E|-$xF;E%R-mNPdm-d_f z{d-;jEX&%>cr-dbmE?4QDO+O=MQ8MrB;ON7^vBZ4wxM_*U@pNrmxqT37#n@(s{#V{ zFln-N@4n+FknK%0%zbP6FK+j^=7Za}pVoYIUmCKje?m5f!OaK=E@?lj8FsLpENtW~ z<~wGh-U2l!Z!p|yb_8pjU4H#TwUbH|skA@_rml*Aa>UatKxtJ_L_|bT5bP?`y=6%S zKrNb((1Zl!QCAB@HI>mCKP3Cb*8J{|t_0@ZY99|~yIX}RKiF3VPIGL_>|^L$R`1dY z8(pGGr0Z?)=dVjGj*f{rI9eP&vPY;KHmt!nd+plT^s!G}pH9$@otFZE9QdH_7AL`Y{7o+Y9-+dzakknbkxOp=7o?K# zinN?^7ixCx^_S;$v$L|Z9gQim`CTUCEG$a1&1vd>5_Tw5k@4FH)cIpREer?}E~~d_ z7WKVN_t3Iph~|cY^4&54d4~WEjj)949Royr@C21~8p0ossm0;$_CE8Uv{rQ%4WUD% zW|ao!;&4=hW){eC?s_-(XLbI@qfeQ{rRk~N^(6#unDJX!@~1|xUnxFWt}1NugG7R*ud+Xu~mzCeX1m{1E}Yk$X3K^vk&F zpSp2JSwnrTFQK}(o~s{Y(~|i9b|>H!ouB@(!3l$;R+=gH*euodA1_+hTKL%)i)Vj? zd_`Q3&{5bn4{b7j)nxnLwz1^QV}vC-AMu;}^rEPVcBT&VeOtqh0b`>l2y1k7&z!)* z37IPbIfS}cr@HFYF=*9|Htq9cRPqAGNz7$ zr9wV$5-zE{);BO1u(?jI7D!2X9`1W3ObG$;0B$R3i)97B|Ii54o|mV2?qb3BJmGp3 z^$Xd`-SmfCCO7Jw&PYaxe^(ABq{KWanWuh8cR)M#5tI_in>B#>%001_m8Kz3wAVFa zL5KVt8p=`9d5oxYW3~EQLtEd>(kL4LI5!c@a*di`!~Kb2>gw&y{7%v-vjY5u!#a)D zI6ldBL0;t>7R4Wg-p%bGM)7xd^=O6JXNe-*ihgQ`w#dBgK*T#&4LE27C5@Tl*K%26 z^OU3Wycc6qLbDRrCk%qxtcUX$80X#62l9#TH+01er@};4YOKz_C5~FK46M@c1bVHJ};;m|K^o7 z-*c{r9%U2rR$bYc$0t5b@9Hpbyv0%3bkTJbp)$=Wv)l8Z;n__!TZ`mM-}S@Ju|3{d5aX4i&y;^sXeDU$<)@R`8(lsqzjZu|SE3Hw)8_;-7P4=)KTN z%n<91f3&B6IqebuZL8hZbl1Gri#xA5`PFyo-AzvO_cy%L%x55uV)->`I=fJX5!r!j zys7x^Z2V};+bJrpR~=o_<9Ka*V!4RH6uz=fSQjgfX#GR%W3`(TWdwha z=-b7DIkY8;g0%yw-z6BRbtM>`G+T|nWc}S(|1&l_2OagOC!*(lcph~>H!5&hhNz@7 z9}vga_v$N&*Gy@!PNK|65Ag~Y`x%?{?e}>hy1b}n{m@ad_zbsw6C*J*GlznTzXSRH zxw&!NQwlv1`Qz1W^c$qni(aaBV`ClHs7E^3x^@CGR6%l(Fs!Vr|5}&>Ykx_3k-NU( zodmCPFO6{WH(}#0YjM$GPh`JR249x-i+(Xl)bm1tt0{TPB@fXdb{oMV(t|0u#f*$- zJ*@ShxN!|#u!PaaMO%9YD?JRVHY{EEuds!`T9}AJ>VidS+^F2{$A%p`TCJ^|AA0P@ zXVf!a=*OW#rUz_Sw{)7*@Ieu|c3(}xV?#T>s0%*GKg~PNI>7f`O1}mrf~1y^`_)|1Wmu20b7BXFd8swplJ+ zitP`74qcN+xvLhJ#K&hZW>6mVG^zPrpjCc%bIG`@Ts1jrnJ=?B{Ks(vYpGy_;ss5; z$%997GG?kWl%Fn1Zr-^VxLWY1q*m~!m%Pj@&MGD59lf6~?kxSHSYpk&!r1Mw^fT^! z?{3(9mA*;3Y2Z_5dNYl&eM0zc7=i;yct3Nf-Cw8iD1>#)IKhw0gmG4bgm;u4X(G1ec_hn$8HKdkL{RKnN0r{ zMW7^t4K>E@Yq0jT?S%`BGlmkwW4_g5);f$#5hSgcEF#m7kw|P0_QIT4ZG-aUHF<}+ zk1>Au(;oFD_`HAD;-uGRjhTxPEeD4#joxYh(I!Jhv5`=_aGBec54^Y9_=c~U4k;gJ z85SPDiJj)lWK9)c6N-F&GE1yF#&OZ?GR8BC`>fJ=$Dg(wm)a*-G6=0Tyt!^aCI_`& zp6m`%Hs+cZ^wKY3T+jfxrSn#@ou2OYYYkF&@!%nHQ810=btzxsw#Pg01 zw?DHq@#;mmMx|@i4@(FQ*yQRmv-n#Z{^C3~Ha^C|{wb{xisea{z`yWD*g%<4ZywTK zXLfnn8LXtUvx}W&;YKu2INC490Te6gklW*TyFNERj~PzeFMj77_;PfaSeN3nBpnv~ z02Df(KYw0nDcSM&6|M(EK=Ia{yB;w;ot=~1A)xDN3Zl#M2HRL+Iy@f#lQJ>vjNvM1 zi7NeBtesJRGddiBaaV~eI9fZ@zR8@2Az?rIw?1{-kywkVajqty!=>g)_S-bpbi9+! z*nhf#wT{FT1 zL03#RYvc|eeaQc7@lZxrd71W`(|2emKv#7y<#7!`a{KHej@Cmkt9 z<1b{pxDRfh#ET{Lb}F)7Yw1=qb8}!N@GhwJ!Vghp&R0|*P>%l*IhPXNfI+!@3>+Bh z@3(t|$=U5!|9j_*9m~}jo%XS#vFB$2w`QHJ+8Xf@#%%XKl62@Bn>amq4uz_b@jlWAiU~Ca1{Ovy%@()Esip2k^OoNIF zh9Z*btW=d- zwt+GEP0DIOiJ^X;x$e+{8CsKIR}Rse`fTRmqKFfye19 z*C)PoP!_sVEkb+v5|Pw(QquWC@8@@!-|D9=xdOgERF4Q<_&U?K0ah^ti|!_K-_;W%lbE!EI?dPntJdu z;7nGqxj9{v=gpfJuiB>3RQv9%xws-TY_o{PgZ}x|)yP@t0Fj=~RFti)_Mn;XGkjl5 zoCu@=rdQ1v^Gds?0@S>ss5rka*6Q^%vHE05de58~i<&%kYUNvBM66Ty0{af^0aMb< z5Fv~$sY23uB&V3*`e*IEgrmtWg&(A=}E#shM|gpqZ+@> zFH}e4FS*_dUh)M-D8zD`s zppT7ZuN_o;i;CYY&b(|b3BS_{%$6Bm$~}@}u?kM6%SUX4jZu8~u(?Y5bvb85W7a!J zGd?CPKI0muvTLlu%*TfPmE*;7_IyvS=@$4{xuel%XlVx;B`38x;3w zCk?cwWY$~=_2m{J*=Q)u{WZhOfu~NO%`94E> z;<&)c)xsI7unaEQAw$HvsT;1t-$YVmN$asD7@ZA z*xz!%=6MX>Ze2d^m7g3xDzZ6W!#|@NJF8<;ozCdG+D^^oK(O>-*OS9EKrx`3QD=0( z{}=Z+=aQGLVl>W+$7d7VWxL8%T@MepYVEURUBW^o<}Z|5e15c3M=hds;tDp2$L93F z0kNnd0H@ZN;c}L4Fl0?lQtK;+7;Nl&-&<}omk2Tk8t;Wd2P$jO zs~&dSh7=gr&b~gpgRsh56_)7Mn?c!$?nwN1;l>q#A-9?{-<^UH)*bk5W?{ean*LY? zhd`xPiL4)SIi(d{QPCYj98jx|o^8IwU?=hnmeE(RI2sqE1}5Pd8d6dUTC<0id@| zRKchN9)C~h0uKKoJj%}D_C`q9@86Z)w&KAmX>`L2a%o!P{5rYB2StvVcoTdDDu$K7 zhHPOEl}N-@0eZr^;n)j*httY(E)E-vddB>EB{jNzCdjK&79q<9Bhnb%!tZY z-oI_6r+j1gvQ521W66P*Sa0+93R5o=Jt3=%iuCc~7$p@>alYypM4TH*RdFMWK6>ef zicd;&o5w$EB@TTjsO(+mx!Nb1Q|TB=&rlgXtzm1}3YoedpRE*=YRwyoiH^5n8-BsF zcgIZE()U?u{i~o$5@X6<(dOO8KEB9JTan?6i@C3PANtt}6~>x&zjb}~%6mk_%6?ol zLjo&=4dz2)jJviXiTyU`1UmEMPOF4<2t6kbHFpgG6^f1K?Vn`&bm{zZAqA%>lKz*R z%3LC<7)|OX=>Hy`!3z1&WM-eLWIad8fH;|yJiPFtd6mahBB^1x>cw19OLXFbuXD?Q za$rJKL0$cs+4(wjaRjp3jxfV5lK!A$DEwMYW zN)?=re=Ci%n<#H_H@Cmv9cdM0pGLfW!Y6CKoM>NrRwpS$rkm0uNm-1DW%PyVr~(1s zQC#swp@lN;vk6!w*C-{aDo2q5EY{(?)oZF=-5Pe9)0OtRMzgUOSucL269?pv-3iXX zGbK!&s;HCJDEMlNnrv>>Fsdg1ZGJlAti~7pk#6de_ZSTBn~;_tNQx+!UPcuUq|%vL zzIVfwxp^-}KThKjye$O2+ro3#YnP^iLOJTxb^H63PVsH1Y+i%=~J47qNeZi-KVhB^2819-owaQzcaX@#E)) zWB0E6DpOK$+ViY3#=L$_tGTt%Z&6$SID~@Yml%t=P9c{g#7kR4!`>uWk8Qz=*Th#( z(^7oWFBAQk-PERVG{kd^V&&Z8U|Bv6hs(_T4doiSVG5k!O|rTeUh14FV-yr}k3m;2 zC?Ej-KNkpPWo0CiiOOkO28uuj^0g*Q(oF>49uVOn+3CsVmO!JqN4*Sdr5d|$_weDv zrnfxs8HZ2DK|8rH`~U^TCk6~$z<}p_dU_iE``6ePb82e?;O_+!F2j?WF;@jGA3nSlw9Py$ z@Wy{Uqa&BQrKh6q7R7bBa0*rOQ%8Vttd3p18+eI9YI8eH z+=DF)%qh76arrE!*bsrhkl}5q#8idnDmHeY)G=YIUEk1u4{p;EJH55!y(Qp+k>dRA zOp-O+tq8JB;9#q2p5UnWd@k&1d#xa}0ta6|H|H z5(rFHUVm_+Lr`!77iQGH3YTAr_XY}rQH>ueOa8$Jkk;zH1~RSy7yAgGI*zCTM2pBI z7zBVke3os^w}h$Z1_BMIj=0()BW+Nlk4=eqQHP+>FAOy`qprhjOEw~m4BY@5MQ zz?AhhFHbmQdvNbrPaZOxl8udx(cl&>yVS#CZvRB^k-gKeZ{g)t(WAeJmZmezGXqJK z^Zr9m5TAD0mB#$(&UoAHmRpn?i%G_l#q|fXcu$ zBTJDFmDy(|e#w~j(`EJLWf=$lg~-b+HiudkLW>X#%kz9*=q!G8M(Ey-Fy`r(Qk1}RVTCq_5 zE@soA6yzy#8kVst_uDHCyUKvLNRmdcnlXl8)$cJo^@iOnj=>2a!@LcM<~{0q%1o_L zN4?R^B*ZB3-9S1^D})rJRra~FIT$fm?a_AvOV?%1+@wcbV_0}oV(av|l|NRcdVJ!v z{jG9ts+T(SJOj-nRnBHECqWBS2_NH)3Yjm;q1i141|A|ztq+uFG(5^B-tB%?UPB)b zY>FN63X_}UjlVf&WcNtI^jfpseFWC(4&{CB{zi6+PnXB(*(ri&mW20rszXDmh6i?z z#QXEtljOYIU{l1>LEKeFcbU;F@y4MOqO+4~^9uk=(Da1`m zgro7fxr?*2u2E+CM5iCr?yA>|B(vLd6%W3RKG3P&gW(qo3yFOJ5~xJ{y@+?V)eec} zs+_R*nwLt%a&vH_0Y}x!i)r$k{U2V5JHYzt)B{G(qKSei8rh8hA*CL&X;04?o6F8| zvObYb!r`abB)iVa<+rZik5Sy?4$Oe})Jte%=3Y$42viaw50Q zU#AO*N>iUrp~Sxd?!ZJU`VYi15) z-o%m;TlztJsV}Xn_>$>qYe$cbz`KguR-X2K%`pOweEDPl99vn5m<#{Yp&?SC{g0m! z6UPT6Z)AJ2lIUw`iom9N2+wztz32Ft<1No-VxhrttJ?iK$#wGU(hI-gw0~L>r>&VU z{#H2475}o-_^JU0LtHw=FCYLr+MeUV$|X(+#LWS)!k{hs_wQia{CtXQePe?|8qiA& zm;8MDn}Q7P&7=T|j2S4qp+A1QK-*#=`#-`QRdM9N^j_Vw>Xt>=K?Sxmkkbl@h?I#? zTecW`8XCgGi3vh{gW{?Xd&dSg@1H+@q%S29^&}MgtQCWNkftkcMF&u0(H`!wOc;)Ha)BCGIsP$dK>U=bA3Hg2BW@p5)OF* zt;lv8VptJx1GbG2@vKdihN=SZMm2Y-mIE~ft>TLbnmyNC!y?vgxpa=by7!I6rsS&& z-F4~6|9Xl+Fv0GgVMKz2W3$)&Z0d3-%8{G#+T|;-i;IiULF2Z1Z?-OyOJM|X2WH+N zZ0;+@#l@xN+bH5Z5}oBp8PLtWD|l!93U%eXBQSjy;y0OUZf-_rU)g{6wZV`B^G!(_ zhNP6-&GLYU59GvFWJIi>F|-!bA1=3Z-YHj|*!i8(EB5>E>#SG#^(HSjTTFgY4h}l< zKpfIv)hbuzwn4VP`x_HS&BH(w@cizF?k1)ml7U3k?Hg1gRV#{L2ab74UHKJ$<7AqA zh$TDu5_$=j5LIVPKdddrqZ%50hR@7T8=#jBkx0k5_bI+>A;QCGww!rs1&_o19n#0) ziYJ+jZy^{z_!H!TMnikd6!haeI5?Qe?FV=cJETZIx!aqM!C;zG9h!4aqA?hdEAsDw zcIhjO!tiUEpPx^IvehbRdO_`Hn}>YMKLyipOso(#)FzmCtpyJz(JWe7B}apo>{2eD zJiaN}IXM|Phw;-Pqq9dK;tbxWcu%zN&59xsR^)486VKRR3OJZI7x#lvBRS_Z!hONS zoAoLv<8*@4OFz0|AEmuTzW#OdHU>&vt#cjv38?_$TD8*Wp&D#wW0T3{PvyHa6*sV? zws{eNjUx)RmQ6TZn4R^4%fvB{>r>CQ(eZ%2!BN5I-@z|6jQ9C;s0QWA&xoV&8z%pK zF*F>+Qw27LY#uB{)m~*iv`*H+ma8h34Usat#S=N?#d?oUW)4+)+z;9o(dIpOu#LBk zLMx*})&x>J_9t}4lSSvP`vy`818D{oUZ>4XR2}~a^;#7kXl2zsy2=Y)3ZHo*%%&2% zl}p?oWh(2WeZdE@AWTWNx%EBM=?;&Q6RUH-6sW~so#P7XRCw*Vx9NCvLGhR}F|{-< zAxXQ@xP<9T-Hx@wfDC>FhLD)#Im_fWfKI(DfIqfefX&UvdznE z;e-UvL5eGCXy0q4^}#-9?|gl4Z;>9|@#{Z%Z9H?%$xd%KAd=hz0^SI&U4H9F4xYiH z2mMjZ6r3UUy?NbTT`q#&mw^+A6-LUa9sL2*R0_^3HQ0X#?fr`m|AmRSnt)yV_bXnn ze?cmI%@Y|H{_ooY-!@+T&+%&i>)T-Cl3%I6$W>_aD_RcXH~9rW`M)C4f4}*^|IYvW zpZ)(nv%n4mLqm_1vD?gE-_0uBb0JC7V?HYG4DOkBKM#-g;bnOIk%Y#@5ve-?0Y?k{ z#ocT}a+w@*p4##^K=}!m8tF3med^>?s}cF+Nihx>yi>I71q`0BX%KB)Jv~nSMGcT1 zQBdg7ot2^pSA=}yP!Q@6alygCFm?yV1GVvJ;);rjR5p_0ulqV=VzG+y#Sn)fu^Ab8 z0O<||#XWiQUSgO6B>dze`4`TO|Ib}E)@OLt+s6k25hD}jeiiw?->%KUthl*8}l-}wbqCSgBkibrR3b#?LP z*Z~)-VX5eCM4c7tqL)P&Cnfl{QUg}$_&V!)yw#Z(ymxVcR3j^;g9JCXYcDU@SZ zcp^wF;4zXvRc2Aq8j!7!Js1;F2oH}fkgV?R?!u+ws zxof=%J~Y~Gq3?Q-xMuSORLDL3vqxLCN8Qh;nFI^mN|;KQ{Ozs9+U6G*yD9WYUqjY- zGuNC!%D_%{m(RrD3Dlg-baWo^QMQ!Pqz9f%Si`p|fP8-=w{;_j1u`eYi#2#@`0$&b zAar~x-=`fbOdpisfKI~I|Ah4&ph936K3nPeR>kbH>)5BKaACnGuJo*PN+*^p=jPeo z)=~e=+KE0jI5f1tt#%RhJS;o}6|VlR|6#6m*8m6_c$LeVnTQ$DwmNCaA#{vFePdt0 z-W`5esoK$`)9toAB9Bp)k+(cxAzr&w8{%!`ASBAvHMD-MAVbtZ0+rmO8f4qRSP=ax zv?v05ra3mMQ)$Xn-_KsB?dwP9Oz}(2I3??IN{fgUJsXv?cC>8&eeDfpacu*rT0){6~ow}baXUDbDw2~ii zkWC`(0<+yOowjxs_+Q82o*ru*5%ofA@}L*tWNl>{8X7=WKnGI<639^HP}|gWUa=mX zpKwsPUsF>9WX7+clb6c-pF;C?g?8%0h!ZDHG)8jeXJ`Kr37J_~K>wkth^_Lh)2OAJ zfYxBtK17j4EvdIo1p{M>75IL6dHKAeTi0oB0^$b_#A(1W3WvKQdFi7Txy3Z>FK8^8 zR;*u$iXgQ-;JoN`*I#+l#nd#xX)i4}2pkxtnW?Jw*IG=PoqsM&4_EsbcFypr4ZsgU z%wi^9JwRWo^le3!yL=4$t7IcPE6dEXoaMg4K}pP*RgNsI9qu>;&Fy-SP)#YOwM*^a z4N+Y$e3f|Q(3Yp;kq#h68a+d9c2+o8*AtMaVs5n-NnYvT>eN<$^5hQ;SD9P>bca$w z zCSSGmx|m4ogRkxV{azAY(zdpW&07wuVlaLaBJf#q1P*iJTZZl@sklV0unRHJ(0i7a z)_-gGUv@4?_<`B}lT%aZmdhQBI?boJd{gJVI?#6(1|5?(-H-}ny@E@WKz zIA|&bN>qSIu8xv0Ey~9sy?6ci1zH%gvaF3d?B6KP^-$UMbfyy8E&RD!g8)+c+V@%~o# z^XJdo@4MmYyBNncE1l}Nyv%g)R@(oq~TkbpZ zRSHKJa5?UfvHcw5!uY8FUTe^r4?M3l8~V`Fva;m?VoL+HxHG60;iEtz!7t^uf8+H^ zqxa>?edxZjJ&{pM=z@r%cv?KIs7Q49jAQ?L<6ZIxz^srz06@^<%uJQ72#(VkGkGJU zs5x3QhW82q{>sYA=rZY(A~oAs+{VU+L6MV4Z;mnj@M|p&NZn+gOouzoc0a_tX3cpW z4|6A%-lah4J&tcjDtL|exj|-G8M#zR${q!RNeF9)L?Z9pdES!L2XJ4e0*CwRQ53^o z{n>K1BO@s(iS)Eg?qAS6KFQ{IzME*%#+i^EeR^RWx(9@ei@x;c;rLAuh>fpo&PKtH z<2|4R4QCZjD1j$db4uUPP$g39OR_5@c)M5CDO=2|JXc{}L417t{z+Y-%{tn+OCPPx z%3W@^{uHzi#-X0$HeZkjC+pFZcjPnqAD%D+47Sd!!r!T;n!|k_7|bj@1#SHh2@g56 ziuY^>&oIiQ3A}G&sJI5h6gg>!r3dXAMdy()DYC+fsK%^WwmIN8W`y4RTpFofxb-^&e$e`raX9;z+Z8DE}`#qgXKl{i7);SDiqw z$_JEGr=P!vheu7EHt12Uz9;Q=9RhLgsO3L$0e*}p^ge*#&@~t~QT{VULuJh>J5k{Y z%qtG0s{>FRSqX`95?l?SiJWDYPpz#rmwy7&W8ikvJ$e>g>I@6N{_Yb5QLrN>z%wDHjrh^lL-Fhu?rV2NCh13!@wOMZ*K-bkvX}!eo)fp=jRtB<9KyuSY+}G ofVu$xzhC_yL;R4v7V|@{N?|(l#e6I|mQkoFYboU^K79870CP>mtN;K2 diff --git a/docs/reference/figures/fa-icon-8fddca93e3a89fee152146540f9de78a.svg b/docs/reference/figures/fa-icon-8fddca93e3a89fee152146540f9de78a.svg deleted file mode 100644 index 291427c9..00000000 --- a/docs/reference/figures/fa-icon-8fddca93e3a89fee152146540f9de78a.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/reference/figures/fa-icon-9b00320707d42527dde67262afb33ded.svg b/docs/reference/figures/fa-icon-9b00320707d42527dde67262afb33ded.svg deleted file mode 100644 index 4c9b3ff4..00000000 --- a/docs/reference/figures/fa-icon-9b00320707d42527dde67262afb33ded.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/reference/figures/fa-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg b/docs/reference/figures/fa-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg deleted file mode 100644 index 906893ea..00000000 --- a/docs/reference/figures/fa-icon-fb6dbd8383fef2a17a1d7c77a9b4b828.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/docs/reference/figures/logo.png b/docs/reference/figures/logo.png deleted file mode 100644 index b439544c208f92451fcc8533737ca14718fbbc82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114626 zcmaG|1z45a(ne6ar3FDi5$W!bMoL6QrAxX~K|;C(6p$1_P*Fmo+R0s%MmGD ze7DjIqkEDU+tJ?1EX5D>Z{eK~S`y%5n>}|RGp^yh>}_UAu}TAMbv0pV`_i*>2yk==|h9!qMkpLrC<`FClF* zVM!Sonfih1c%HY~o3g%+b{uG&R*4m27iX~}w?7yv&B=i!Sn}yUK|u-_g^pO#Mg^4m zdJ4O_McyYU8w1luyA52S7m0|X+Plo?=;?cW7I*oX9xCy68ju8f(RMvw8&M6MoQH*H zrLi4=Ph!;Kr3wlPazaU5nCrV5aSbiTCx>>mZLu*vd5oB&c%ZP*Fa`YF_@x{gc&1A` zjpd_+OTl}|wI4ojnh3le!rS{XU+=_WS&J8yV}~~fK$g|6`H%Un-JZ? zwEc0i(|T=77JQy)I66H&{gSdY4H|uz_sB}L_5|ZpRI$SClAC6w3@q*o8rbeu=f#0*1LEeK%S0Ssw@Q9^PFIv`N-&;4s z>JYv2%U~~2_uq7b`^*U9>*H#{E=DOZNYgqF@y!jx7XPsLNEe5O0X&2@33)d9!mNnV zz)7=+x|(xkU1BS(0}FOT$7pLKOk=gjT|&^VrjU0I;uoXwS8Q>hYatz(S_rWx3}#~d+u%%0xqW8T;^Gs($p(8zV$>!oUOR%=)Wr#JF*DPd;y@iCpS&`;4)(2k-al#ynkQ)zQ(7&+1% zFYIEY+>#H<;h-J*!tVs`NJ0J`WS1!l%LmO_^qt?I>rs@y6WnbmBToIckXT7v4tAW8 z-VNQOL)hYnbXP~}4wPodEV46%d0{hda(iyue$bBQuOn?z$d#L3*qUwuISTltWwxY& zJ?k}xL=|f2CNrv#Cg};Fikp^`S#}jlA}YVy>ht(PC47G9Vzs9ak;xH$-I94H>9x(A z$@wm3aK@#FeYRL&8zFZZh{dU2kDzV8>tZwSvvJD&CX#!!6G)9OPHAz2o?Vc~s^7qF z^%dD(_}&d&0?4C!E}wd@Y(?ztK4Mvc*N$Rc%uZ_2v!mYTEQTph=c`UO41B|%kT!p) zinQ*>$Rj9qREyg!_R(~ta|#2uXqrc z-t6ygZ#_W-a8QYrQzurZuLdNltcYcrDT!D>X6QkW{b7Ww(Vcc5WGw|o)AV499s1CGj z%#rAsH5K@`r>4EJ=?B8IDcBn<4C2q8E;tpX{TNS^ZWP$2ZQJhR0{7N*3;EGRgZn5W zN;`5f-ihAI5``zT)|?0f(qs*!J7H{{uyR6WO>BbW1sw$K`udq3~~{@D1C5z2nq_)e73~-R_GG z9w!W4xU5CjQ(os9x+1sE+P2vd39NVBc38T9S?BGVjWSvU&Pa^$hU)u=OW!1x+!knb zR()Q|tZw0ieP9S16{|0%4xphZnb}yQ&(0u(Je4sN>CT7AnI>fumk*@EeA2X{7bVW` z95sH>S)jJU*V!m}>g=1C!z)L?ck68zUn_M=$3xM4D_k`{8*unmDkQv~SkK;pv%SdX zJAB*4rZ{Y{RRC`fOcqF#>Sq*5r){S(*M6$HZ7W2rr*UTz;r=W}Q>p|4dD(5fI)F}t zKT>303e3KJT`NdOUe46IqU-ws`0cUdTr>lZ(+m5d8Y)wheI6#1A1lpOx>Ws}WdTM` zFEhZ=T_DGg!f#u+ZoU4V%9P*EV=jep$faS)G6^HqX|i^f%;WYuAquf?@!Z3LIZAU0 zcWuiCUao(v_kBzHva?EL_ z#m1XCDEo2w94IALP!{_i7)b3=cv3>3!FV1ze@_}O>*S~RjmvdQA-{sQPb8N=fZhC( zubR&uDN(8rgOlP73_Zogu^Y6oOKC=6X~b3J(kqMFlDSg-bB`T!FogY=71t;4$5;34 z&EwD@KJ0?1-Fwx{Je{U=N6?*Xd9e3twe|S-!kAfc@Bk!SN4a$ThGEoa(mRX;W#r2q zjSs6wnH$qABR=OOkB=P>?DoZlEhkI&XFP4_$lSTC;YNoJUBca|xzoJdDm)hE}=+8aV7 zNQ^BqgKYnHHiD0>BfRmDef%W|-0jPLO$$kb^2xqzX_g_S3Gz-tstJeR6j{p??L@05i)GIoB9pJ z(>!p!Fm-^>IPiu{+|vZxkcT(g9+ii10xi)3f*RpVlOQ(7uC+6#_UP;XxRag=}KJ}-;<*LV+q zuBY$SqvvN;YR4%>Q{r=HX4AC5$?@Z$)ZALx+~mHq`xBom4({*zgxseq4P+DZD2I7zdJt8s9=hM=P<0 zSlYw!N1`*zPlj@mvq3EvwbuV8^`!N6dHr6)OxM+( zSa#8iGxy|@9Pi9U-({m1TXMRd;yLW*ln@XUM9uTM+TbEc@dl1GBjt_V#`@e{d|>mM zRO5ZL!r3Wc>ol^)x49bQH#p>05K{da7J!_ca(Rd`MQtMywvf{GlexJKFI2+q7tsds0JjIw*jI$!ot!KJG|# zBh7s)yT?bh1Jz7U;l_1=`}Ln0!rLTbkA@gw{V!$2^EFAm@JE2nmo&EZ@PNa<=l#Y- zw?0RfWQ(E>GDK%3wuWZo;XX&25@TopKKIN$Dqr-|IDIFSqAq?}MGxHhM`V;`uL|Ev z6#dxz8f_C7n7%)(XQ0jVt;J-2j}pbxQeBiw zuZcq{5QO&{5+G?G7}5B$7Q5G0QBQBE{#vIg zcOmtz3tO%~bmfyswj1$dd3s7KA^o8w--~(2nN)YQ%s$xR`ZO?j3hpJV_H0hoC7N=^ z@8aX|X9tKOwQ8RuC^2R1B7w1Crr^5yPx5dVqnw+m0G<-I>vbXp+xkT=966U1`lw#D z+mdbmHX#?u4v@8K{&DZuY;1yrv=~uhB|Hp0E(A<{Fo_ePr_k) zZtUJP#hjO@a&=GXPbr44yUDMNB4;P-8^72eA~Op~U|3CIaFBx85V@lq`5_s4JWAu>EbVp&0PolQjS@n3!hRi2eh$n^rl`83XD z+3iOzZ@hrVRBYE(Sth@W6bgJK)gN@2Ym+=tt`v?HN13byWmT*a^Xc#Yq-oLsBi)f^ zKQa4L`258NY0BlMj*=gs_sUbek`9@OZR@A>eCEm88ORRt-|GRIoS>jJ3Re>1qEA@i z3<;~@Kb({`wW!*t2XRUtxRMHooYgdyqMY#_PxH|`GPQ+=vPRIku{e4K0)W>Q^Y?du zw!Bgf51*He1a{+J@k{s)-|>3qh?5~Gi%u#XCUj!BDb5bi^;($Fo=0WN4Q6DV+Clqv zy8TxTrMOMwCkwJ^5xj1ui;rGDS5tt(tBh;gFkM3t+?$u*-2Qq#o24}5trQRm7LE@P zhKEjSv+d4Gl`z@|e(x0Kp>-Lx!q#Ev*@w?zILcGSrNkT!ae*i;Rhzrlp$GB6mi$*o zn#|zbr0!(uqe-EUQ4!wSP?T1qYb+S?&n*Qzp-5v;Zm@(C5Mb&=|0K*~T_#amal{jT zepe>L7m^)%;7@4Ysa(E?Xh)AA08zSNQ)(2xF&?A(DIF&Rjk%+4F0HvklS-^2AV+bF z48C|+>{ixs4IfIT)=Gc?Dv0!zW=s(mxLsN82FQwERO@v({NdqJB`A=>6$JN|Ip?tv z32Acd*g7%Ip3>U!x5Xo}q~gH2hoGXd2cM61q9JNPOkWRBASkEYs@g~pA6A+2!WF+T zb5F)&I}GF$YL9oao<`Ln{ZQSmumHt(PsHLQsfS7=BgXJ8$t++l-C^wB`+|{2H@yPs z);$C8Ja;O6HNHy6Wej2rmt`q=4Ao|LZ%6@T3j#?z%BA*{{P`c~pg#kd_z(G;%T1HL z;vGdZ{esp)0BgB162R28IunGL|fwT3cfx;)Fg^!he&x53?sCFEjI|0Y;#KG4?@#e{q*!_4xL1 zJKizxDzMqX_s=}qt{=E29MT9W7>_-gDC~8)h6neAvBmQbAL$~=-+ai#D~JMFltx~3xY})vpWd>|chDNAZ}F@h zlx*xo^QGcD21dI6Yuy)t*(}gwACYvnYvzkUJFl!!9`g@#VDXm_^9mS40x$Lk8&Zl)aDwWuzCx#p$FJeH1ueohn#lne5w< zW+^kZvh@>PK*v1nvc*f8G|Olq(Zm8b!vTsEOeiIKA^lx$QTuDz1&5*lJ(BXP!6KhL z`(AJ5ZOCcNQ4uLRKK6oeNC z7f<=$-q8Z*JMo!$34mfz41893T&@{hd1?Tg4@OG+l@JNy{i`kjqoN{IA;Z%F{ud+v zU9i9h0o5zTmu&P9qPrOv7lu)z-rh^_?UoK_ZU{$|Lrh?xBQq9~x}-HP6Gcfv2z9;- ziqz1_M@a>s&KCNHda~wdI%+Yyga(eDQM4&?JhFi=r=vf`?KyhxM{a(--#XVJw-ZPw z@)^M6rzk8QG(J=h9`PN5vdX8CIpxo;y4JXWAzGWPGIQ3@Px6=oDlm;cW*LlVeFn?t z1BO$OhZK@2iXUa(y8b!c9W&YlPS_(cQ|~@=TEE-qCEw)DQ;_Gf%7aQ(rdeQiyKTea zqO)*Sqo;>?L*dFlRS@KY+Y-*bBjQsHTz+vF$5njN!?dcGI53AO$_P-v-4ZYU>aDBk z?z5oQ#?^Hx`G8C;fVU5dK!&%@Fkn8RCi;#_O9064)qubh2aEecBBNM34D@Nqx6ygz zC`e~7#qNp7dbJPdc4}^D0}dFqePe^;0?vu3A=RrWq@ony%Mt;-F78zGCo$*PuO( z4jujHPmIrV_4Ji58NA%V)QR~>WMm^w%kkwFHpHYtf+3?fd^;11fxixTVIDuLa@=8n zkNQIXTE((}ACt?OLuoO^eKbr;A?gdexbgi^6cpGB`A}wyerwM~o8Lm_t#kRG{7*(W zp5zqkwS#m<tz~TO;Y;4FP&uP-D6gxRM%M6$ zkBm(Bo@NmOPbGSynMGW>PjB?q4p9p6KWmqQ57YPjF*>@iI03{!by|y_x%M50;D?nc zf=mFSW>AMu{CI4OHnx2Lm7rhwe6q&5cMI_mC;a+`YjW{94(02)Gn#2i;NuxL;%q@M z7#wiJ+snRt-}AFk+}OjULd@YXhB0G<893T{rSHD!Ku;sFUg7B3%1bToS)dGc~|FBehAlQ5laf7s) z(8hhCaN&L}nZef=+w}J_(;XDJh9maX@KWPx+cuzcM-&;B-UyMyZNB~6{ zNwSX8b(RNCIJfbP_dS-*1bb#ET^(?PM4DSKSmX*NQg4x+rAS+eJ@jpeLJ8dgkeXrk zzx4W>Uf*xf_gpJ~DfN9e{8F{q<{U8)krHkAKc9*z-EuM^0l-h0vBQ;=*!d?P{a1w+ z1N<@g7}oG9mkLTJYZY3s%biXB!6t}Z9iZ7qHAJnoeGGDP`e%hUKjMgU4AH+J1(?(F z2hJMq$=B7 zQN4-WY!7&ZF85-<;g9+R$ZB4YBw;LvxC0jeZ9|ER0knBvCFoXHBc9wS^uIU8l^?b}3#w;NU^j!Ct~` z@tWpI&kUh-La`I~Nc6KQX*h(e+|L}@>6eBs?Q|8n$C*|B3Q?<3EWYgIm6Kb5_y&<= zx4bb7;+nOTTT!n0iPGiA#grOJ{_v_lXm%h~peVY8*y(_ZgQ{9{NcI!K4DAy-V}2m~ zH-DldI0Tw?t(BRhuB-GIpFE+6TU7GoLkVad$zTbvDQBTUgaH0+5h~>Qfho&

    mtXyJleTfse)|JeR+Hav2pO zEC;O&sjseqikcLVOs_tdz`K2E5>P*TQBok&4{|^s{}V_^6D^CE^Eg0^7r3N@TII<- zS_{AuyddV6OFvnFWPal;Z0nac?p0m}t~LlsmOU0OY-yjahS+e=K7FGBT$RJd-<%~0 zcKoJB8c5JP0#>UPvouL}E|)X<7my=z#B?Ty&~?L85-&#Ghp1CTLMQzo7oEV@;g$3I zkoe`uF}!E7=B$^e#qX3cOeM8=U7@}@pZ9rKQ%D<6HbkOL**XeHq zRH4|lw&Wn=?-5N&R_b>VcK3kp8)^G=XZX2_7P6Lgw;MHwVpanUFxU{h%fd1qMko1J zP>-=m5kw4i)UVDkRw))h6sA_a;)daS@QF}I304)EFw*~@J**GVZpoJY0 z2+pqfy)<4;>t*(Z8ais#x_v6E%iVYMdi*Ikr0nIy|38KG$tM#qyVB_lqqosj4BNZ};k$7}!s70kE zVz6wHb!-lEb^=E?mOPc~h3n@=7=Z8oqsR6IVnc`FXAL&xRII8K!r`5ZrW225B^^P* zMHJlpyzlR!Z`@aSI zrx(cP-+-WXl7u>I`PXxrghc+E2GW1d8e6mLebs!AoJxIWrDf@_-daReyWU%wj4jYw zV{IE43DBWDCBTKGa27m>Fv$$UVQM~4&bn&?yShr$YRe)Kp8?cP{Q$a5&$+YST2e52 zGN?75n6oHr%^z-F5W4^baT;Grk3DUp?f$Ts4Zw!}YOu`-Nk-vIru!&}%=~`^8_2`k zr&JKZ!BhV7KdB(3EGdY5&wJ?=5oF;L3AMzLOz?NG5@D_QamRDjzZV?KYajc3U_`dp z=s|i3m_=cz<$$o4N6l}fsg}r`IBRh}oK(x2G!65GPAEG@~l!8diyZ{Nk z!!9HRDp9MT+n{nET~W>Dt^F+FbXu{2?x75%1^zDCn3@+4W8LyQGOvP)uMi(Ny)69K z?2S$>Gn8LXGfkv0hBFIDp$~sR_^xT&II%;SMs3FBS#|j;0_0bRO<;JEd}O@_ zv_OB5ryB8D1Oy8_$F0VIx&ktdTkGIN`tr zysv{qW2)=Vyv0@X1es_Q4!E3NsB0K_O!)y?mEiM^7sm4ymhL4?$SegsHYBLO_rnKf zs!$$`mQ6i=n}G`@ISxNlU9{!Nfxj1)_fQ|Ec2f1qQA~?L-HOKe#NVSNNMR^MruWOR zoons|RZwCZpIq79**a6~LC4$tA7O1*Zf+j zgenhefnOe*QvTq2$^`+&ScHSc~q9UW@Vuo_2oxcaVB} zLY_K^v6J%`6Qq~V{zq%=F2@8Q!sU7NPN#E0U@GX7Q4pyE4i_!)851;m*ZY1W44O?y z{#~wBUR_P466cbL1p-fy6K|89KcP9fi$`M2r>hCGK&wAlKKe_m2l=dzT@(k1zrWjR zY(;L5I&V+`WOX8W?TG+$JO59y2E0Xq-Z$h*bCMU=Q(E%!YxgcTCm};r&P$ZJrx_f) zFbzs7%bv7$7Jv^O;Mc!(R$Y2DtB*`7L|D_iIh+RZzvcSGJRsL|u|)>p6Pb5Ht9>A` zepIYv{J%>zdisZJY1N!1^`(nRi#0lS9xA~He!AZQ&kI#>e|ePctw1!OA-^&sm~bu( z%>mrG=mC}ThseDmU0rZzQ_pb!rB>TiyF&k20a%;mpB=RYoA?ds->Ebx(b&@J(Xv<%?1Z z%VhijZK*wPBnz}U_k&!zB;#R4H)twVW)d(#(>Uq8|ESjfi1j2aAg<-j`iZ|{lZ~L> zMSCr-xmzZnKNu39rHkw>(=T=8)j{q4Z^*tk+Vb$}q{iG6r6>jT$^>Y2w<7dC*))ec;K)0r0jp#BjHR)Li3FH|<1Kbnh*Xv;W3nB9cIW1UoBk z_3bXjuZCJ4uP|ZfjfxZ zPUUHc=2BMiJlnY-2}0CET-W#&2@q8LK$R<;aT=iGYC_(U+62)ts(`vTwOe~nckSBLZL*9}KCzne8au?|L9 z-n!-Ck!!ntYmO|+i20xK9-xY|0fWr{H;E>42@%J6M4z9p27u ze)#%$@dgV1xwc8wwN3HO70FgdH0`d7q(D?>- z7mi0VzhRGe-369Vb7`U-j%W0E8RVr>sK~d(GGSA9iV^BZONQoC>;dhY5Z%T&qInK3P9gf=$ExP`)XfFJ z^6rg?G9u_xa<31PCC9+YU6%btXzgQjU9tBU1V9##YUnAtcsL~SuZ=ZxJSx15_y5sV zTlMmq|Mtnjr4mVgWHJQt{tDLC_`S}cXNJ`Ypl2FH9UgY_F}SjXCRAwP?fd45kH2!M z*2Ll3XJoX}FEu>LsyqA|q=p9?|2O#E<_Ooqk6>TKoWfc#Ku<5^Yahm(Zn;3h`Qh_U zSitIMBUQpBkl8Yd{vWBH8kFgGNY0A13rSFoH|m?`maK8`9@$odZttM)ADy+orFtQ4 zDm=yws@Sy;EskIu8`zD}piqA12w490hN}CK5hIODJ0delEMB=RYhk~c&2Cg zLS41DJ!WLTXx~^hs>c1s!|hk6N2eK*^$kmiYL-_6NB>Cqz(QS=N3UraINS;-vWz2s z@jgcuJE(tbyX04voxGn#(+}wjpb2oBxUQdrGc%m?t2@+NLPPZZ4%S1laP(+qD6xob z`%}CY$8kNmQo6zfuP=i8K)rA9wXSBT!DxMNC$i@koZXVo?91g@|&wS0m>NV*ekYPC2J}Y zH2pKS``Kkw94V{F$UM@hK}>)lmuz<4x9v47U;YeL(WuRMiDev_fsR^iK?Pm~_o@5| zv=L1zNKt@P;r(6ERO2>m2?XV(gYQaFd?mwYwbalEWJn9pej6Exx`$C{EMZGY8g zskwiRR6%Q_Wyw>p_+AmwiZFxuN3yUL7hw`L2^&%2S4xlWWsZGQT>GIdU&3zBOBs*r zga;z^6?*Ab;F+8f6vP;cdn16NpvGczo)VZ%HEdvyZOt%IMQM)0oR*iWMcp2j5IZAh z=*a~5U&cq-@FR`Qf9mx_%Ev&i-=ht0yH%}!xgT{F>MH#iua`j5sGydEg+D`8 z`xP7|Sz?;;T@@i&(pd^F#z(OG5k5<8f;_YL(e8uS5jqfwNuW=WT8ykrp_zzOLDCsb zxun#2qo#8~c$Y2MgPFDtt_?}S6x^urg!BISR!DSZB_4=W&-KcbSmkQ2skJ}89$8m&hr24eV{jzK-A z(PEQaRy6STW6bWYX(O$^0Q{)p^zJt_7Vi<2*Wurvd$Bty5xYJ(`ov@OuHcC&GMj>t zvEAEx@mdDjE~?vOU%;?N<1?vTi(}$)*++WYUZ~S~OMk!1qL}gw4~zg>b(ui;0LnC| zrIyPpE=mXRNxGIB+4vp+Y2{I*oUcpmuc3PUE*>Dje6E;?;Dh_B3Fk+!6GG-vJe|}? z%;kORf(P`Uzu$m~NRjiU??+Bl?dpy*0R4yBETBA9Xy@?9lUd1MTc3>iC;tn{HR5>J{bS~F5zJFT2+?Ezcbzs(`KL}})M@rg z5-wf}6=EPC5dAHpe0JrxKIQ9R?f3q*79>=fI^%77XosCnare23WIr_rm z+d_?{)7f%k%3gFLC>8BxpMQ_jgSWMOasRcSCN@KDh3uz+M|kD_qou~2MBcHewU_VD zm!>ggYtGve1SZM{-+~E^&Hx)lVv$e7<6xl6+(YCPo`N!fK!5DD4Hr?4{`m7`OzU29 z1ykqZB6}Vys{)~njO6Xx>N12}Z0O@#q<5cVz7LwBGms_h(mYSH#dmbK7KI+0Uh!OA z9G$uSg;(0JQ*r4v- z88}Z{Lyj+zesEWG#g$RUXK(d`xp{z1?H#G>+KeoAhpgrmJ!6-jw& zMR9?>#upI_6BK+%PI&$%^xat5)a7l2uP?ZBJs_oYtXsK_lY)Ker$bF!L;%8-6Ni)- z&qIGo?nq&I-PYHjY%Kp9gC*+826@E7@=S}Cr@Zv9=lHP-zpd>TueCd@!wr~m<=vX7 z)ev^U$psYG)>+(hqR!guh68qE+e|U`q=3g`6_N;Nm?Ceyxn?hu3 zO=ykWRxTxaS+vxx@Zx$tg3adjtvnzj?l@^RJ9n)*)JCbF{ru_$l=88)Z-{y4+Om>z zw?&g0hAY3GQqO`v>OXOb*7Qf&2lvu*C|{B$L`27RN8M3d5=PJzcyD9YVEGW`B%?+s zp%fm_sEHMap=pk`t`!6dX|J=LUN2qH1$jw~2#NTKBnC=igPQc$vEfPij^%1jp3M|y z=;?&ScqCk#VhAy1$6PenvM1~gK`;98jxDw3a9vdU9t|GycEJUE_R?U$MUy7{d?`1t z?TDcKkf=-Qtx&5^_muDX_`;0tb=``gX@`ElcLBp;go*I7XDl$apf1h22=OmV(c+G0d5HTj1;Z$vE=Uzl~#9nzaMgl-v8 z&T5{U+W_tomg$qdJXyMT4j;B9LUp#88JsA()jd~kk7>Jr2Q4dRnI>YUi-##ONvZoZ z3M`UuZ=&Ijdb?V5<)E!zt1K6OK)*pHC_rb46-5uN>zj&#E+q|wQ%shmSh&(Y$cD>fTXOUx3%1W_39x&(O zw*6}Fmt%Fit)$n5VMhXf;nT|XIFcZSFQ_1+>x+B zNS>Rq-cz23?UJC;tV`}nsp;Y9aX?ZA!mcxf=i4p0s~f|nv^`OEOVMczUWiHcZK zyj@vUDlLPvS%9tp@&y<-yar1@3IZBdG>?r)Y6%bThHGP}XAnVlJ&Mk5Fby}0_A4Rw zE{)1FidEv-#o=X*B(0+e*{f{KRAHV37!?UFG=keuD)_;^8Y(ZCQ<`jKcJsiV_{?O= zUotM1j$aRWb-Qz#6ln5nB z-5=wBS-qpxM+8mt)3?=T>%$1+M^>DN*UidjnN+2f%6j>>8lPrbm11@0WhY-4XGI~Z zL41G>-W=~4a~wWq+#~yKbmhQi?^g$09!CtgVpvcnAma3>vW#&Tt2kdgR@b7h8;YLf z8$SHT3pY&fg8pl8FAOnYT$Kan?CLnhR+D~~m!8M#70P?}5*P{2kKkTu0N6P#+dL3g zp=y6T54PyAsFYbqWlo zh2Mt8yn5bg90Ydt_PK!VOqUWg6f0C%laAJK;=onABmBpi?Ks^?@({OSNtu@pkq6Ur z0wbMkpDP4=p8Rz&4=9|Py$d4r1t;{;t3GUWpF>gO><~*|kU1P#k$fzr5sEG?U_d_e z#S&%Pv&QIkL`CYf;6XoiF5bbPfM~2Yj>lkUGSiOU?q%X*l zjySLyfxSQXa-QqbXeDmxBtVK~5E{Lc+~ef26Q0i9vw2M``W_eY_)kdkB_AE!z<@uN zY{?aTT(6|%jbno-oh{4!O8nb*=^mdms>K*^Sbo)aqygV zT00lr9cK7vPwHWfZv8p*#kMzIm&Om=p9~L7I*b>?gxGiSV7GhzutYjcQr4yOP@0@O z^2i-dJ$I;!e*7*cW-TdBerqb3vizJ9pINq`-6u_05{s8!gZ(lab*Js>A4Y{)k26}$ z(?BZEvsnENnIjt_(b~mwmt=6C*h{{smYDt` z&7bV=tpY$8*3uSbKU!k^?Xr)8eO(P8f_RDSfTp!D9>vDVcX_XhNiyM`SHs(Le^F+o zAVtbVn2+r*%KU}>44IzOJ(fHr&5Hz_g|deck00?rM?~kaEq5#umxkl_y)fg1ICEIp z7eQH>R}v+Gbd>Y_C4tdJ4->B&&`~-hw)1d-vyL>UKNQppFpVzH$QC8 zxwtl{jUNBXjB{JeX)s}%uX*h%N?jRs7fYWNI=tc)qMH0YzR&OTyy!G=Cp*M1Uf2eY zXhkWtpkMSf+B4-N6m&LwLEUFJ$a&nXW@%wPy61!N1HU98#5#EQe#h^f#I;Hq|shkW_;p#h+?~{1L4&{_NC)j(H}1{Vm6kxAd5{Kiu8*zjsq@ zKV1F=E!T#54%C_@Ka*QurNTWX#CmK#>w~~W=XG{yQqsb%zOW;%R(;`DitlFi*!1!Y zs}^YgTsJ5dmmC;JTdwIKa~|YCG;wE?hCN#2U#xt(wrM269ZiJj{uUe?mPZ4^P z;5^R74*mCnAHo{0tBTf9@HTj7l3sh6kmGAk#oK_=%gd>PVTAjX?zS78m$NEQrx%Y? z$M^nl&IMHcFj7ys-Z%4)CioKYGf9ipBC>DxZq|1$G+95Lc#x1o?iJk1_hNmsh_{Y3 zPX5P~v8#i|_l1(Dp9SwX>GQ!%m08rjZb@ngBqj(5#`?F`7hI0_o#*7M_224MOAQzW9On(Ev2I%ij zE>{R6YQc}rCzewJniJjSM8kBnr+&B>oolevKmc8+pLzMWwb9+WS8h|83mFlLgdOz? zRDuhd)DoUSh>%yf7)w1)o)|FuBtiS|Y*?cVET5U=i;O3)eSZQp$4_>YThnc0CO2 zj&8U+ILD-o$b5yhzb){hb(ilIiZsGaNkX~nezz;}o?gG3Q$}!=nDcp>)REYC_(eY^ zyMF(L@|N((dqI8ouiaZ4R?fmn#%Z*E&8rP#{xoTaA5ni|9U5oYN#KQwlD8cdn0FlP zMM4m;ZYel>p__wH=K5uheH#)FUhHbBw6|Gub?yu=&E#P{)~_lt4rsiv`^4Aj-WPv& z59qJf>wU3$!K=Mi*RVV(cQ+_?u{kW9`SkiU@gb za|SB)yBNlr$-T+@LUH4hpq#KUQIO2n>~Oj3VG8o5PxyK;1BsUAq)Mx3Cf+I#hRGZq z^A*!4nMn(F2f(dMFi<`T&b|1oYc&1Ef6;G^Ybxd<@V9eiQ|H$|Fs`@SD_aeFdsv|E z854u=;#WII=(l)Kf!kurrDMt%1?{lkFt%-+#B2nA-6Y*1U#LsxlBp=K(*Yh`tAi0? z;!~kI(cI^3p!L{36=#{G*iPh5f93S@5eZ>#IWlX5I;Mj@SMIHKY!Pt#+p=D zBdI;^+U{d6qYgG}9+d|JxK?R82IgTqI;(iBLo1SV2?42|>zL*>N*M*&tW?G@c@W*6 zy{qvF2IGwtm)RvwI?Q1Vg9G7au4)q}IX0U)ZfI|H#DFVz+;UqScAk-EbQKMT$4+sF|@*E=19hSQ_pSHl430D&)`&*>2(~ z&~s+Jh%mX5Mt99vPJUe2Wg@e$czlrmlQvn7HF+Bo>yI++C#ee$?36FLh-)hFMamF` zH4!c?%W@LS(oxBBQc2ShOMj}s@G&FtQ7~AiU0C+HjCtKt^RenxM}Fk=iPx|jz`K5QE&)h z#UN)=^XO?itCC(T$iy1DVI|<-%Hpb1T7043*=O>Wi$NmZGMTJMzwD<9a(9opxpjM8 z&pGkR?N0fS>@ob(wmKU3J98{H9AOAmn{4|}YDc?$>pvv+8YiYQ3&nfPYnl6Jrki_H8ZiC^T@HNFJ*5Zbv!fJGwoHay zzhC9k6VMureV>njM}*h6XAp%ocd;{z)D~I)*b@!Ao#tUS-ZZ;V`AE9-GoDD*!R^iE zLYAklqom10>}b6f_b2%HGR z-Q8ncPp08rmpHds4QleESj6`$HS~0%fn0uu_A=$=L`#cuogo4wn#ARVOFwTGW?vc^ zTA6cw$rgSY^R4B8LrsGj)!Sqp0Gk~@O|S9WK7Y+_Y%>*lqGmOC8*bLZ6r*4>>Zff% z{rJYbH4bNUSJ6=fh%~86TlI;PQSr@{Vy4NeXD_)p3Gy5UCT}@ZA9{%=lcgm3w^qFl zw0zj~YR2P<6pP{Gp3;T-+}hSzgG?T~Poh@6te@^D#(q&wG&!iLlHzsSqV;M>a9@e$ zKQ4#SHh+0Wa2^GufOp|q1Ps*75-9)$?(>5f5o2*VhXO82slg~Xe!lSA+E=@Xe7uG3 zl3w;ZO4#jAA6cos!DMX=aXXKXW7lKtv@l%UU=?<&^QLNh7lEHEsuLGHcl@-skh<1~ z5N9zdtvji_ZbJP$-qwl|L-mLmMnF6Dz_~D>WO-bVH6;}NWB@nG^%6`kHB0#Xm_9De z5WDnBh)!3I5f6FG{!%7oIZ9@&D0u)lpG>(R%0{85#zZl5QA~ zE&&1Q?gr_UE-C5mMx;{^knTF#cjhIjqF_txSM)-Y?$y=V44``cd}Oth;DBk>RM zGd|U&lDFhn__2TK^$ihqmvS=X1TOEEHOiYI>`#aJ)=$gSlCHmh)^@r!WeabcFux3` z?IfIflt11+TeI{>__e*)j#LRl?zF)CUR5b!*QKMezLMoy;SLlpb;;&#u-b=FHUaD% zO54}l{qxmI^d`wQBt!|;DOu3DNQveneec3=_s(;u8QDHiAO7P2>&0uNDc=r2vcB zC7PSYF!q+S{?%zbFua_mXM^Hxd(IQct3m)7PShcTktF+B7!4b{=W)BlrQ@N>^}O>P zr|yN)SKCj&R;ZE2#RJ#z&Z2}J9=A?O#{@=CY>@y6<9?GyXuPj)f6k8w%tQ)5Mg@*^ zU#YW19POb3`-Ce?h&NyG6>#4ljYas-IJ3I2Q}lG6=Zowgkls8!yXE)yq`vd`>U-;Y zRX*4FnA*(J_pXJ;#ak|?#l`XUhl9B~wyxkj4!s?Mw&j5rZy}Mxm-0L_BW??jjIZ97JdLF+zul=RveZCOr-w)x)yx0Hw zBgDF4sH*UPXB);-!1OGT5tE9LZe%#y9o+>y=q1M7qMN0sV$_XhxECdOBeJDG78(j* z>r%jH8WpN+&om8OO?O%r*+C z>YE#^Pkz|yEGYab!AYa!{M_jLIo1Oqlw3a=zpXCYlTKYdrWzM^?%lggHn*_pS?un_ zRhMBigd)3+`Ekzg4;0Zz1Q;^WsKI^*F}=6U^Cu!R`RV0H+`XQnui_@WPF5xOjQV^( z8sRvgML6yeiBhFQ%}O3%0mtECI8Dam`^?r)O=iYpWp7{UEF%#Zq7Tez>e16AYHxyz zQKn#|PBXol=VLebuVtpX^az0_O?jNKUv&7!i-`4kJ7yp%ijrUGD*%8l2GRCu+-(E= z*G+`)-}JpJXBD1>hZE;-j$kI|pJ??)qI|7qru5DFE;_W<#JX}@IL$LQ`cGmO`~BLbvTL0RL32d657T_(f8ubr|*zw2yJ%3IbyZL{0+o)ghm z*D>pBQ$Smuw>Fjg@TI|EDY7X>nVn#L+|#rpT&~-k>B)XVPH;j)jHs4%y|1tlb|bkb2YMq?@k#JI?Mn9^V!t7>>R_NilzP4Vw;(8 zdv_{s)zhVtjr(6|(~yw33?kNY(&!j`b?k`!Ue}eNa!_|Wb`Tq^=fw-do4`W*>^Uq^*e zfkxSKNs!^==wRJ+0<3M^kT5(i&rgPCQv;abt`T$eaZbzBdDvw4`yU*{07Qv?xI5l9 zdES^Jn?JZoiZVz1aY+$k)Z6?@f{vhH*w_6@-6hVGE!2?7Uy;&Zk;z~DCBAFZokZ-M zN9>%NY1uj_FQ)Uc&*io0*N`|U6c~cPed^B|dhop%q>5E?cNV<5_~^i-(u8d?dx5Xq zpAjCVApGr-C@OFIEOqdm|K{yMvt7=!#7|T6LJy}f*U#{DwNM+^c!Z3h7~F_^cFGAA zN(i$%B2VuLABPlJJ{)?!;v3oed=TmPw<71+d-*9N$IG+Q2pi|_M$m0z^=2uI+Uq3h zdu5x^!tCl<+f#h@5WQ{VZC^lsNd5LpZqzY99C?t`;aZP$wLPc%>Ni_v zu^cBFa^)sDCtm9_30%xx=r2zD23o()%a)_a}m_&#^q>&Ku}w!)Xa zz<9$PWpTBfiRLE)(q@yV$L+Yrn#WoowoeI;FK1MzqI45q9R&P=@kucc93~Ml9P|D> z{`R-}QgX4>sK)48`n1$5J5eh`4CTOJKOJ@9kdXmJ53{q@T>~WoaKj-bKVKdX17V3j z^W;KpQfisUg6v?C%D_k2V}iJSO9-mma?d>X)2Uf`-g4HPt2PWNI;95n-Go6){e59` z36FrKZiQ-{t99eA1q=_kJqOh^PPub#D7C$ISO41j{1=0`^0#d12 zP<)@TqJ^I#Hp@ady`Psczix?}mgIFJl<~Gb5b{lAAWOe1C}>+)V*x-HOugDTm2@t0 z!o_;H?B!pRn6qdsx#jI;pZnl`Uli9F}i8FW+ROzz#q2Nn8FcAfyn4^)R4s5-StaUTvB z(Nd2p>e^*n<+>YCOfA(cG&pkiG+9R=r%f1HQsV^)jC}5tYD%^cfrvYc<%we8($5&q z7%y+ekmty3+zCG-XXL!h{$Wiwj$@|y%&QOwaz%q~~L zIU&0B*`Or z??sD2daeLZN!K5%ZX}p1CsTd1^7PLI`=9i)N~_P^j6Zuz&KRg$i7nrnWjMchbE_H^ zwmJrCFhd8#aPNN)e-1@aoCu@X12(>X$p*49K^0baqqP1 zo$@Tm-SQGy(N#GP`y}AR3N6U*TSxjDs#RCs;k)U5Hea5$=`zUVo3(50yN)DB^`n@` z4KA6*ZT%*TupV$i*F>M>VZu$Qnjd8E6FZ1jT(PQ7|}b`RdKDWy7*K|yqtI?lG*zj9sVugIHQ^pfw?7m9M=Yy)0!lksZ7Nw z5O7eMnnOcPq_1I83gO5<2RqPutzPWX*1vr;}Z5l8C9RPxUT;Uc`&ddUSivM`|foyDEv= zpE~!c41E5fC&ziB8JINnvQS1Eg6of7r`B?qg3RxYF@Zti6^O0rS*_gb=v3y_RK0si zyyM}7{uOMklCdsXm@##7=8`-eW0M5Kv9HN1KS`(-?Q|EY@H|C>;Js~ugqVM!ylB2Kt|DkCoZz|0#SJCpjAwQ*^aA)a!SPaz*Vs40;^iz zjY9F%+>Ec`1Fp@E(GJ?>o?CotJbE$q4TB(f3s|EZLAj{{xg9HWsQa7~`$T*G(x~y} zrBw|k=x!NgE|y>65H(U1ugvM(Gp#{Blk5kH#a_O;m!A}Lp;$FPHDv-8Y$73+5}wb%_xx4?A;3aj+qv%p zsJMKzq7XZP*(r!w>E49!Na8Sd$k z{h}xolzVH#l9C5Rq1s@5`{!frE?0wf8nDNudd9XcM!KnZrRHw zPe1TrZd3H=8o`#R5t$>I5Mg3gwjJ7!GtcdDsE(5-s)JNz)Nq1JX|v+wrCpBdnmpaF zej$DFrI<3bdGa*tKljFuuXd7@VxfOGC2~c8(+V@q?J`xuYczczmNSQne|q$xo7##y zOZGJ8A*R6jzgAP8@X7{*Iodpe=i3a}WNZ`0$v{Ij9a@%ZEK^Gu+4k4!&auCK(aY1O zUHX+x_Vgj=_wMcf36@54vpUG@9uoSZRO~k;$P64bPSSUJBH|RPu9gD>O?CL={J(Tq z%ygS2CH*yUk8E$|$(DyTP<8&eY@wo6FtpN9MF8w1hO|k5e>o;VvM>oJ+n%N3%ZgFG z&Qk8P(W#NUtG1aCISR@fJ!|X2QjryVb;k!!nw0f_E%H145X_@vg};%_ z_kDKB-Ru{NmX;8(oEC4)0$f-YI}gzoj8Sp;j-ci z&1}W8J};IENk+Ri{M0+SU~D`=@E`feM0rF+)!H)EEbO;BxD_l4s2{cADwD9+lPn;o zdRv2zUxv_v3709vjQhVh0;nl#Jn6-?hPGp)(I}{u-N6=-C3$Y-?L$~~x>!UCa&FI3 z@u8*2HX7nYV(m_33<$L6qP#-FDRwp9G0sSeB>?8x-Hyci{`H}eZ|Q{#i_(~90^`2riD>Ad%^RtKD-^^zE+t^6V)S-4-OSVnCL(awod*qWQQU>P?Wv) zK{6C^BJ;nEA!7~Zguq&O!Wmd?fwGwQEFq`I zIZj?q!-ZNgNyNkq!qGzSvpu<&T>6MQ|Wl8-`ox zK;`&&6q@<3cnwwMi4>m>F!=tCNE z(rIhvc!u@jg+_g^M_d3#X80JjuNSljIMAf%>i3sP6OUs{^7{Ny`GI#UBZRaHHKVIN z&bsP1LE)@^^CQaTWwYsV9N=`aBD>+<9o8a>&|oR+QM^#}1Kx{w#zAx|p`J<)rzk6c z`|?zdIU?R7*RqMWpD-9L_*XXQAQU-`H<8wKXT{RAQZD+4P6+rzk_L?9)fv*iIzh| zK~T*QZo|+;5FiU9|0;AD8&z**wWL1CYTmN^zs@AvDjO&n3F##vnP(nM_wR~IUT9jv zF_(mZ1>_e8q9Yiy52jAQSl|&W58IJ#b7kG?%W&nJpnwM2m!EXz3hrh>boCYqmiIJ^ zvm)C)sER+e^`=lKP{z~#qlpe5EOysNqz;n;fyUNTgKs`y$uLl< zrdle-vFF!Wpi?RJv0EGbD)E9Bh0(r+*0NozLynQPlhpF%8MU_)8aFs}RA+3}6QFaL zpx@y4+ROX0#6Gq)pS*W#j+4j~GU;UA;i*VD4V#b05Hpzj7N2o~7<{0{%Yrh|N>R5$ zL!TFa?I=1ar_5KnkHvduX|FVHXsSdw7&EkM*m#_46>LV}y0LQ58|zt($Am>yrI7t% zt<)*dFb1`$9{Kq+riQL)+vy4LR z_soOE+Q(HNEQ2-Gh(pq{bhAFC??^{5ax&)|eS9qEkAM2mGlnCIL=(qwaAuuM>%L{F z7|_hZLDel2vmVa!@Fvlq_!cuXG>z71u=2cMJh*n;|C40sXX}N7KlY7#H&0}u5S4X< zS3KV`Jtadcxo!sA+`sqfNu(jW)VysG;e<8Rdm04B7r`kmwkY7IDJj9uI;L_PJaZSu zMYwqlIKbix2zPU8uPGv>#I;J4(Adjp@a$J)5f~X8#zMB5-DjP_IgE9c-TH14gORTo z$0>1sGNhu^o%)9^96Cu9`pYUH$YzuHnr4n9qf?1rz!Wh|et$-gH32l-KA6Q^orPv@PzJovMSZ zaK&?*1Vpb-i%P~}QeoR@$1eK3UZyFu#aE~mOg`ijxdgIPkjOqrs3dmyuWz>J%7Dxs zgkuXx&ZyKl7KaAfzN9j>6hvY8J#cav=Ufz=eDI7Z!CAvyL)(VCHGod5ZZjPHD&+>h zemC|tiGS8`=ZKlnr=NAb7Gp-cmnyC@xhFuo`QKd~xcF??2y*q2=rkhRo)SreHc@9R ztzbv*y+PWJ1E+s8i==@UzTV>LmoYPbI$`~WxddOKG;;U@odG$CeVSFJw?hSG$^$0L z%Tjg=xm%jl@dyc$p#arW5Cy%QECTX zRqhAA=@eTzn@oYzg_HpV1Zv_g0LMjF(&4 z#MUoPJBbj80%v5I0&9sxQRuv9F`(5|`55!Ca& z3}63~W49~*$mBfd=Ix))X}V7Eu0mKvn#REQ1?Y-HF|RpemU<9LIZ^m?SkYg3Y|-=$ zS5=P+T;Oj0aMI$r6DZdmOPHzr^3_6vmZ05{wa1f?VsawPL5II9jJuX~nP9!%6{sMf zq)f2|9c$Aw< zbkfAeNsRb?qL4-5N6<|l>Nu7{p!Tehf;P@yfa~&#OQO1eSA3EUiSz{EX}N%rJ`n}F zKK|tZs^k2#J#A;MG%D=^sIiIUOTbMcP{BilGVDj*ujZ@SdCcFaSHq~@3BBUaVN9`X zh}L7-O~dP<8P73fiWWbmylOv}`={-d7uok^H5XnA?Q7SQ>J6jk4FgBjhYM$3N??}z z+Re1T6IFfx4;36nXzYj^q!sy}0y}RQvJjL4J|PWRgaVhGztmie%r2vacq}T4p7*QF z#s1rkt}Q99NxkthHcmC*?d8Sr!8hzgQIvEOXL7Ff37P=c&|^Ke$#_;$O#Rmbm{yY2 z3PM^3U=W?ll2-Y$v)ba2qvxwhK`@?joG6DvB!uv|p7xdCDSCT1IUa6gp8z4m3_DWN zvBzw7V>ajIEx_IShP)qfPJhV=O69CmA2xFpP>i#}aBuHYiCR}G3Dn0`>;4IVOtnxpUb!NCYtr4+% z2{&4VQ5a^X!=YluI0^_zC3$sx@q2HGhW?&5p?v8w^FOe9lyd?;oyiEz25d)=O1 zPyJEJ;)aoSv+SxdcH8z_jsC)+dU_P(^sqmq>dC)I%!z95&ik8c@MQq`C@=8L95$^j zA-U-`M1#MIxh7#pyW5S(7E@(fbh8WJG5enR2R^m znM?dt6=CX2K$1B=av9e!u0X1H(hzQo#V=G-1rqnb zI0k?^3+s+`dV=%=kMOH4xgju;K9+vH?jJ!Wg|jY1Y|z?zc?1 z=iUrsL&3x38%?C9=9Ixg#$YDjv_-9>{yoz!_wBW5%Ws+*z(|t7ObNV7jnnp^UH3M! zx$HVJJJIzxDz@UHCbQRlkWM5o{#iLI-1pKzjqGT_7&9cyc<1p2n2oR_dK$GuRLXnd! zkHVuMJ`ix1?Xi^I{97}o{cL0gTrjyg6jp*wX`D*AM zlNnls!K_U9duxu3W!gR5DG({sLZ}V9FG`7 z6DgpLIT$PmzewCq9V7PPRyAkhI!Vf{6%b_;Q(eY4sXTJM4LLX&kB-`KGq@)ObjKUI zJc3~7{16ntS(dqtWyKaCy7!Gd(h${?F33U0>#iDTi>W{YH1RObxp>mP_?8t(Upf{*^ zQQgGGdds2Lf7bX`8c+Rlf?Q$*;kB~qd%6O}1CdbOw)EIki7DWNJts32u1`zB z_2M$`7X2NFzKN3nlIeIfv;0O={pziuk+o-3>H%4640nHV)OGjnOKi4*;TO$CX?c-t>U&-7+Y=gn^uLqFcyDbYeh z6FB<6<2|O~9G`R!9r}e^u$L7=`|BNNkqr6{6$Ex1O~t8MY&cOCN4{NEuvMSC7*Hw0 z@2+KbkL@xvJ(+$8VZXY7J|5hDKR0M^aV{e}oOh)4zWC7IS0(h|xcb-?dMD>R)Y#J^ zYUvRW!(}UbBd>tF`koa`RHkGVq}ejhP(TYDP1`l@5eX4Ih|rI# z#!gAl+T_`|qk3uK61(^bHcg@X1He?D*OyJpl!|H8-&+Jkr4ZEVV0>xX)R+lLL z-gu~Dh}Eq-(AB8!j6<+y61>!|qMTL)XA(+)gf{WsNQlDR6j8uI)ouBp)_5PK*!^I7 zw^cP9Vc_yivGt;yQet^*IP1&I&>NNGQJmAX&#?+%ch&5UR$MT=Sa?;^Af2E(TH3LK zSp+gbR5FMo{PH+>!n)tk(ySdOIc)o715%02vks?)`h5t}*Y&uWC;0wt|EcpO ztk7U>T3$cT>TFH!HczN~!v^cj-o4haR_SVj92)^^ir2`jEP`XOuKB1VbB}ZZcCta< zkLmDlAF`2+3DLEDI@EyA<)izzPL$pvvO8zrEwfsme7w3g8ISSq z>b3|~2O^0CG#C!%k8Qb9PDRIWL#7r+01I;v|3=-W>EL>ag9=6wnH>9>Qn(+cE$vhOs5AN?Mhj zpuI`z4c$hgkj_S~WHvn@y3okp{kYg$@*B?+dOKlVwqt#R=oblj5~5NIMXnwjlnuPI3PJ^$vlj^9 zspMG30(J@ER~{5lcj|aYeR;uTvmO|$AQ&)Vt3K=Xj-i!63mh2EhTe{&YWThskH7|s z{+JSI@dA`4y5L*QVC+1<(`uFqfuJjFJ)e!FIZV-_QhikdUUgqxr zU>CB42WiePZ2Lx0nnMx0j4bu>>dB!4!0OVAh0T%+O9Va%yDa#W-4(|C|a3#6nUZW5Dnd+n-R;N=qVz`x%rr~ z1(O!W#OKlqzp$%w3925?dDc;Rr;nYO>?>1cOJ8h{uCKTIk6r8xcV%2=ag*v!rxR&7 zYGg5zNGM!O*~BvOKAY8dWTC71Ek5hr&#KR_Hm2Ulqb z*c&kQW3tmG^GdUeC9Vz@2-L@F?Wx_#a{>DH&D>@nqxFg3_Bu)|-iR(*`-CB4H!Af4 zU`&*3s6gn{B$ZThzf{JwHASKO_YJd>us_YSq#t{PrO77^$Y@q74TU|L0k`6G1R(4p_ic9c{xO~)%u{f++o}lLB031|$)GxV_qEjvw zO>k5={&t8!clmt{ij-=&U7~xmM}&lm=c1s;xKM!vi4dn?7EP}T_YIqn1r?VHEe)IC zmf6<$xNW9_62`mh<+f;P)>7{->b*VTpNcqPUcRRBi^L%96){p zvkUbr#!HA8u!=*AJ-hyjL;#u*VGB~!;g3{A1(aMWJh6s~*PiFslEr5)vX8>Lvv6*t z4ZVKRmR&BS4!_Pa`ClD*zcHr)b7ldcmO`)r3Gm^X^F?|0UIL~!s5*_{X^mWA^Dlw3 z9?r9c&6q#eVpOO&VC~c;ciW=-(EMr6S>-*;wKD8Hw<1ZA)Wq9r90Pjj0QcQg;%Cz{ zgpaoz;2vWc2?P+}Sf?Tilfk_e*KJ-vo#5XbpNuLhM{A?gExi>~C87x5Mw8^h{4?W5 zBFTv<(%A*52y1H161f-lOv$c;g-zC9hpe6JI>=-O=>2Qnep+V>UX93$QM|q$#3;0; z^?2b*v2_{!l>SxZZMeHVS-?3@zywb~HP1$C1SGQepCdWE7dx~sb`OB7(IW36H@1Y) z1r2YTcsO)Oo5@Lm5o@-_aNEg@y|a$Fpx89O;T1C z5Otbh?DNtUnUqG zo~rP#OPe0*=9=a+z*|{k5y}ipR10*Dd8iyR#S>~f1Ik&Kt!=hzo?_S@Hcm8ctg3g5 zt`n*4Q$!LG1$@$OMT*~dr$YaDw9rR<8T>pr!k<*C2G)2U&>pY*Lccipp7Bx{h1b>2 z@Ss$NC`g%jpo7>LFDw6)$hJ$~7M1G2n{$2G+*4@GpXHbApY8hk!DdbVhA@T-gb{Di zcai9;M0Xl}ckjP>m$)s=hVdk${iNgAibwZ1~t$%9iO{8t-sE>(Y)W&vLweg6-D&ahTcUyHOS0zeqGxUttYO{A{#+!ZNyS5*bWr#Jr{U~2Y`9)jHahob$U^~gW z_)Tda)m><|96KA7Kcp)PD7Dc*dUSsyh>G(C$TX=AezAo9ectlh95i^YTKxu*LvIYK zWt%P|q^x1lwrZxmop+kx7i8Ad9jvWcc_0QQ)!nC8er#n=+=gGl3_VRCq))-OC8Vx5 zVx%xfy90)$US1md36Yk{5_fxs$pifMYlfkgjrhpVyYQEQ(dB-jphnJINKY+0H@BiJ za^@QY*zltnt^RDdwLj=D-#w2)3=mcs66(+X5`A2M!;hIK{jXg)+BO#w8?!+ZIKHW9 z4Ik_VO%2b4Px^N3Rj*h600xr zM{i&wR*Q>2Zd$3+Qe*cWDPltCXrA$&Hjemy*36Pq%H)dPw;d7B(PNmDB_y+}WRn->dz>zy(gO}oE4~rQ1^&1`^~&bc=5zov|bk3M50F9PmFuLvg95X%c0`5prZ9 z{-q~qGCI%d0BX5X0HNpQPpG9PqNpX(!YqP_6n}fF=GWGgI8hig^ywR%?w`x>^hP5@ ztL^cv%@G{gAV+h}hjk2@MLaO`0KtbEBQs8X;ltD&(+81RBsUCZoW{d07aNCJiI!hv z4?a8j^qWMBKi=r*yAym9&-=Z?M#O|F{*CQ_J)^|I$uW|2n1Y5PQ&Gef;?A=YEWB`w zOtJ?U2@j+fgKup(W7@LZGA2oSU0yGF^&9c&jh2D`9w+h3 zl{#!?BE1{*Jztc}9*a@$cQWIT zZvycf_j3<=6EFI8y%j7#N+ zd0c|!nxwJL;-MXeE`)%1#HVA~P!=0qj ziu)8%5JP5ZKhjS(!^vNCJFh&%q?$Itjt?v*^2;eFS$BWsi}a{h^m-lZdUTa9T)ozj zWG5WIy;zc?V~aiZiqi<1=3`&$kNx?gv%S&P;IwqF_U!D}Zk6-^YUFoVRZAK1IFjVK ze|WK%nGgZ&#z6QliByHDq(TGd{xPdP%Q+>$(?Sx|sfh_B1HQS#PgK4k`oCmR9^l=$HzEL}20sXhGdPe`(u$!67HJXY8Rf|AsMIe)Yw3 z-pPsSv)h_OtlkU}VL|Zcm?7MrX|g1rjzc9q1;(kZDu4k55t`FPDGIEI75SUUuLvm2 zzW1(IebH0>+g$aP16(Qq{#;l0eJN@6tMUj;3e25c!L8HN9Nc}r?kqW;8b^Z^8yhB&?awg44ipa+@A4OPEPgP;DPKJ$D0;AfDgxsNZBYZvlq$J zg#Xic%wcmggK&0;E6nw2JvY07yXEgTZxlU(p1<^=jr1!!`u15$NuF|X7yytOfy`K6 zKa?bt9kAq69KN58Af|+~NLQyD2J)UMH4LA>8#=v4_qR;gCLzi3K<9t+8TA$4ad~>k z{GDKk$!Mz^7Xjl02kcajgd*4`3qwUU;4bEo+o4N*@Ph(^d#xDDOj@{LU2FcrN72%G zwTQHRAoKN~-X^l%sMspDZuZ)7KV3-*ds?8%C>zZjDIJ+Fd zzP87<9+5I3K||*oR^*%F7C~jpdkoOs)mD(AM6;3H)VKY<%-$Fg&1%I16%Vm6jY6&Y zmE$ukqbX+v;1d0mq5UglFI5#Z)#ochE!Pd>8|x&MSyQRkHSbgt+eQ=3*}6wDvE%_d zwClO4MNQX1h$ew(HtgUy8!AIVxEU>k}l zk-t&P09_Z7jeJ47mEfnMHA^+UjN4-4M$bP*4me$nXp&1A?3Lx{*c;Ie%J^e3>xW>9 z0%`bB>S_~G(y<3lq7^nldodOu5a8^aUH1EJX^?T93WROCPd@nKHT$elS?IKUUYI>S zi*{3JY<-DRNl6SvCnjUpoj6G`B(`K5wPH1U+ zpFkkMi%skDxDOdF0(?HIuB7iFpGRf2@7?sca1k;Rqp?8if1@jgCd|X#vXP(luW zJ~yVcrkQ?Xp@#0~LKGD_D3t9Q_x>wpG9Ofh)xQzx536S@-PMOiWSOp+%dcJ(M}4lf zHKN<<>v!6+usmKe+qw_*R-bBLm%2RNsPJf8{7X6z`(&#vo#I|%0SGg5a%fK#)}&pU z*Y`6odhtU7DKJ~7cTRPb-185~zQ>?lD2U=>v?_;ZpP8esQXN|F{WOI?jx<=dJgvvv z0#GZ9wFh#s*?jmL;CLvNxM-r{Q4Zze7RQ1bJrp3j^P`1HppJ<-(cveQZ)A;C(aEWy z*x?0e>4pE{{Rj%67&-#+xbo_N<-H;Q zaHxV(=vk?_A%kkwbCLz1vV`GoIAj>KMp~OeVcb@h7r7|#Ln#)3uD`zB#T*Efu@!Y?qwx zJO-vUKeGo=ka~8$J20Q5M&X_n>4pC)EIMbr|=L8FXu^1U&}5N=Z8#a#k=Js^Y zLSNr7*mY&uGzM{ycfIi1T9X+E=!eI(^X*d_?fSmK)1U9fq2?g~X)oewp*Yx3&sGu_ zoR*Ep6Nzl+uoJ-Jcrm2J!$3q~-X|%*YtA*D;E}c?9^vMva(AB4{uoy4SoD47!0J0L zY{E^{QYBh1mz=h&k1!dc6sa}a$M6-`w#s1?gbP(2ckA ze>?1HxJHL+F)5FqiKfPa;uRtn#jlSJU+(C*1ujiTpB9gQ3d`SLepfjm@$>-OdA`88 zuQjQ0`3Y59ut(pmuC8(ZS`GvVIc9rc%!eSetaE<4zu@(nPOwsabY(|S>KV&$o)AL-6B3|k0&f~w}` zZs);|!zm$_rtmTC8anB{NU&y({P6Qd{sI`A*7+=E_nlcWSZVB|P`m7+W?_`Ci_K+b+3O@3b}l^0f7INBtN6 zY}!;)IrSQ6RS5JvCTOKY(GLA=^Gk5WZT;Orx?W6MJ;6<7)9@Hj9p=j{~F#F0d11lPvjRh z4-*<;#`-Hf>ZzDRC)wm^(~`RQT5{nJ{$-g#cb34poh%9v0Wh9IDqM_sAabQvDbkZN zfhMOrG}QFN2Zx)2T{|-(CMRHzpV8xe8Taw4q-)I#H-vqCes`i(ecWdM-wB~(w)f93 ztl;4X$&+~9zs6i5bBc7}V76hp!~Q))ZHxEx%w{Uu=HI@Z6^Q5z?XfIJfaw#}Waho7 z5o=fnkNNGvFVC^men*-$HiwrJSrxm10Qr3 zT|`FlK2%Yi<KL*)F<#lTmW%99Mj z;Y?)APp&c?VBNuShZl3%(FuH3t|3aj!D_mdFJ5Vuxu!o=SAQutq*{`5-s(@{A(du+ zhk}-*av3T(K7gpD@6$tYQCwSGP7TghsBSh#9&$<>e4D95OgiCEHrpbSji+>UepxS_ z9Yi!dq$(I))bpcE?qdACZH|(o%8PLoU?!gNganDPXG9vcz4{Z zua?CtI(6lfR`E$UV#VP4-80Irm_NjSdeEro5N`9JNz8l_{M=v8%kwxy@|)MX@=n*v z9nvneADTX995bHf-`akqHhlg5aAqxMHw!on#zF4k+EUPaA{S{u`?G=to}8n>HDlN<-3LK=Q+It4 z;NSu_XxZVlhulxh{Ybg}&T_#U2~Shhv^a{l^){83tJ=||M?iozUOwfw(-byKhb&_mu|exa_cn1byy;t1qWzjJ%)-ot>3ru$zPL~lRA_#P2q!~5IIXe z3MrI1_hA^hQVp>wu1PY1y(pgJo?B(Vy}aP06PXX=YIp0dAGm1g>BF#Xzywir)3f^H zMbLYw(5DWe?}KHlzkCYe_^~qz;nsdI`u<2V1c8<@>btwBVtPqle)wY5%H@Qq__evX zA`xdF2O&jZ)#GDMQgyrUU0iy1cJyPnS^S0{;O0c^U-l-%LGY3KdqW`z%f;$Jg7Y>K z8M_p??IO>_y^Y84`S;ar)mVr5^BZss>|j)_BPy-N@H((!{zZWE$qAly2>78kx}Aol zs(x)bHN*MZ%lBkBn{=^=ohSQ4hcSW4!7Kia;=^!m72X6%b5o+UIHUZpA#AmOsQ|DN z_l6jF4RwFr2(wD3Vm5K-QdTFxbtF@drysKh&5aX0^qP=q7#EoSa6pF3jI4&k5B8k= zcFe`KoM57Q-OnGTN`hv$(OT#@20M+oNXmAcKoTe_RO=NCy}BqhJH9O_KLp#3WW4Xw zGni&SG&fz}6pVJbSsZ^LI$Vsr-6~054BD{WOK)dJ7Sf&neFv|`0T#ITS>&bE3P)Dw zC5y^_UtEE3DeU-V`#w9%wHgoX&i-Zm>A)WRnha!q+DZnTa{aoiWQbS5X*!tbc=`8P zwYN5c0n7sK$o$gNRoAq!5;{?7XLCvKmgqo6#)=x$1^k36WFdo6f8O}w|5Cw6N{d^^ zv3^>5A~2a;LK=vCW#TaUK`I85f}d|=Opd7koAq-&=u78x*;0G;W($Uxsx$B7MNfAu z@oS{DvC|=23x2Rn0E9jq*+cF-H*OB}%~knkgg+fpoC!Jf2efA{__)!3`N)pTf)6Z( z?JU3#1{scCzI1-Pd0cW;Uf(phLw5x0Ya3ps3hp3U{5PaKxnp$b%t~ z{TRcdp~{d>OF0qBd)*+P@kiv?ajG1Yi@UC< zq-RiiAq5u<#G4e5DJ?2r5DPt;<%CV%oA73dH3ZrTd#N)ME)xcZ!}tF_h|yhfJ4TI1 z{9V$<=_Iw&&>+d7XE7#~VB9B;+Ud3b%gtoS6@%TY%7?LXb^BK3$9C(lv(AK< znx%e=Q{*MLb!G3Jz8u@@Wn+llX$P=w0bZ;EB=4<-${)Ou20hpI)cP6N0q=LmS@v`( zX3ffE<6Pn!($=H?y;SyL*XC;i=3*~b?Vw|<=g&#sRbQCiIBtX0mSf2Ts$D)Rkdg8K z+bpI2+MnO!d3$TaNAF@=S@+jwxw_cqUrhT+_M&UxY& z4|yq6)&SpGN^7K$mP?3!!)(X*O2Xkr#^Vv*?Q9>n&S69o_zR5vK6#?sMcnMi(@-X3 zLo@8%)eIkHHotaul3fFaS8)B*o@7SR&Pn*S;?}M`79+hO(#da9D~K`60duhr{A^zz zxr)HdRS38QD8zrq=KgtoA9v&l+BBQn9;fezyD&ZWUB1O>z%>h8x2SK-?0$?KEa}$N zx}$w^7=gxCPJJMlTII|o{uMrJdzwICS*l!0e6-U=Gg##~@4TW#)WBWW_nOXpEuVJ_%WWLu363GBj)C zIX{jIQbb_JrPuVKh*LLDs;|0juC+RTC24-WzOI1s-x)TO6&UtU{w5M*kXKLmL**ri zQ*Ni{o9M{q3oBsTdL>M=4b5AY-`>T@&<92h3&+^{U(&KkiD<@N!kOrhbhqal&VB3F z#%v<>!4*T!4C?&Hk27`)RZ=JIP14#oqFh$)7+|}T8slW5#ytO#?60K(yVr@I+ zLrl#j?%P>U2E3p$oRVn14=q2p1<(K1(8Y0E6GZGB%PcF~5^;Cd&s$XyoPe&r`?JNs z6o>S4`t$iNPM94+-Ydfd@cIl?kd?V4o3A}1tG%WuP_AC_x!}Fi-IM{>j?b~8`ZBW~ z4o1VtYd)LJ?y@8zV$DX#wZ@HovduIJeeEv?`}KH|C+yb813C7zTn$d@NpiM$4yAe# zP~#Cwl>Z>9+81aCMj(-jB0xqcnLnA+I?h*Ssab4K>+#;!(!At)<~sg9Xg|-uO^Bp% z!#^Lp`V!(-=@|64QqQ0a4~@e(USf^ZY2=AH!o&Ttn}k&zZHvlE8-#2sV@T)0XcTe& zw1dh{T}BdDr+aChA*+|B83T7KT7PW&DE{14kc;$hlIALGc}ymwDfUkqkWm=PrL`P_ zH{Kn6ygYW@;`~0gl0foY)>Grn*CmT7&-R*zP^7An0BE(yvjq!s`50egfBl_zt6pWw z0%SPeRzH?0v2%!-w$~LH<+Eo-EC;SonGNp!-`5WQm3M&-CcXjgCyqvs9gG0oTgksF zbZzdEx7pn1!<+5kgK>-YJ=T$d4vi)LK65}|XI!OGOr-xyx<$eno)LWU4ovXYw`Rg? z<8kwiYA_hYWZBw1v)QF^dZ%?911v!K=&qAMZSQ_J2rT&veL; zgmiCfnz>35s@8(9HR_^&@eby4pNje7Xp>(wu^Sdm`b_ea7P#<=$oVDrld{j0!Yt@m z&P;T!=BxC!hg58(6s24_&YW!x)nhiJX6^MpZ?#BVWs#Te&Eu7hVY_QvAcG2uLf~y^ zRg@Wm5tTSkCOw{rBKSt!n$}JO2{1kvyq8iWYuu55CJA79JynL89~EDkrR$H&vOu#( zBUUd9OjK#%`M)u5D_1HWqv6x;S83KE*uMmWMMnk90}dUO zrk%pqUtUIED4L#~t)*{95MR!51rmsqdvrUoZU!0BsT4$?{`*rVZSbymh2&VNxN8jL zP~2*b4bzv*?Ti3d_vr~qNI}1-G7kl526zKyz+q>$4^!I-sSS|`{_gXJNX0aJ!s9n z^o4nQGcH55`CIq4TH52ZjTY26a&|6RdtMR}x|h4TtdegDaGVZX9TqkP{pm6@3%-k#)CIMSsol1 zRLxYZXG~JQ6 zS-)f*_I8=JQ|f-GnId`3SgYX}b|a~UjJ1xjL*(~2Wo-j{bYkROt2J6v)iM-GVjRo? z<-^TDWF8f8&q=sw+1vF5TtX=ND0(8LJ~Guff3WFCJcl_KvzABD|eW>N|B+)a7v99)zH+S-7Or65!v7T^`|(ow}gzO z9M!p^*sLt-K4bC4>5{23+*OTf(dXB;u(nW*>n^#^b=7N*wWPtyHvN-MZnN)eIu_ds z-rsDZ1Ztl-pjuy4%+m&390H5Rn_md|`FugpyNw&FShI?7^8EpIULR7Hh!XL>figzn z{$n8f^L@9>=^lxvhV^1<+OvdWySCkg_`-SjI{h?k&UU$g8`-z;bC)}An(svL z03)Od6o!V_4@#@+eie%oK=F^^c3NsKXPBPh`n!?McdS&+=Db6lUoK9Z2&^K9M3EhL zE3+ZQZL!r0ihDK+2JYL#Kla^-ZB%8ZND9x+PrN}qMlg}O=1%PQ!sbNrY(~Vwhbckd z_X-k=_{PTA6k$DmhLS!xcSzvS}jlUt-1e!3+OCc=!c^ki*SsOt&;nSp1! z@S@c*5{oQzwWhfqKZheA5wBe2f-rQc{U)9tkU`qrtt8#7pP$H_56-*V>;khpsxF;p|S?kqVV z5neU#n@a}X2{@6wQMX}W$?6=Dp6l%ezvKxEiToH$7`dz#$c5Em)~Ggo{WFWm8AVgk z4y_ixOuwg+4~}ikTZvdheAnhG&=%SyAbGK%RAQP(UGynygu;Fnuu^fE`f}w2IpMXZ zBOFNcZgElh^agP2)Q!w!uDbmGh4h^m6HXv@2$_IEVm$+9IF8}I=t+}@2<#NzPf&+R zzB?r|zrfk{H{p&5V6KN5pWqucNEY`UTZGM4<-9y|Bi+DOcB6yCe;UYRD*8orFw=Z< zsAVe>iVc(dheE%UG~oUElw|UhG9^N)Zs!KnWyAQ@LnpGs_wW8<3KJdXBz;^M^QOSn zfR-Gq-4f3k4Vm16V1fYSh}zFM&i?pTmB~kgU4;P|rMtb6c93hQgYM!TvluQhTD#D< zze8s%;fxreVeRGAuZHnYqqc*3Ki(&|U^k|@BrdsUGnH*QrOuS@xC}pgFF%DB-XmOC zVEw6GY`=UA=TwfP!fU$Pc4cxOvj8e4Dmw?75C7u=(3U)JaO3KpH(KgAEhZM+&z&8q z#qLKTRJ;G2e-+@Om`XbL3p_M{MXOa>X&+71^tkd_LgG8z%F=nO(wO^XYIL&I+7AmNIt1jJ+8EjKTi+5|7W$QX&iq9UMr+J|Yaw5YUUYOIzaeV{ghj&qsciP|-AdshoMlENfft zI1{t2ul)v*Gf_18G!$Y8B511!aDMYVn0q^-by-+{3}F*-s3m{C*=~^mmZIA9nyb_T zn~1_XgGst%m`uJ(P^=_A|9)#X^^Ol?pwW|K63wuQ=QHE(YJf8qsD9=CaJVo*N${8FVX>RYMAII>HgyhoSte+%(ejv*EE6-{&9MA0{n#g#^&%P2~mNN>W4%^Dqv ztlFPu-8cUx5aA|Z$!#n8bl@B|e9!xDNr&OO<#?ff(yX)32X^?QVWt3lt(Dk0X4z z&$s#RL_8qAD_=URwFpl|a@FRu+-2=YI>vu?(hk?MORvaOjh?BY9M_2@u~Zx9%J&_W zFQ2L2knYo6Q%mvq8%=tn?)8Y3Ur8n9DO@}c0|qjU zeKq#x(tV*}4R#zOOu`x2R$a-=e^Gkhw{ECRi^kT9>i(^Q&8@F*o%L{PI+(XsUeDoz zB6p7UmR`Y^J>4r}jSQG(zZ!FoliWV22cCS5J%w)f4DuhnBagk^t+T<_QpU(q%{e1% zRta%ePI>-VyrRRo0-D$Iz6f8@F$DV!B}9E)Vb3PRy>IO85^vEz*8g~|23(X@u1G+T z%9`VV^#;CoCuxd!dZV9cM|GM&vJ{?5gsZ6DdR|VoI{Epz#w1)8 z&_=XAs&A&1mvUM5(0DUg zr32&@@ih}AvHMt$?l--)Eo-P?fgdNpd20`2l$+w5ltk*vvgZ-kz4;^vxK;NO&{BwyYh{FiP8V?Dx*e2dy*=9Tiy9;^ zH(<>MI2X!E2@S{Vor&r^{$|2&CI}A~z07p6`=36|T#O_sU$5CJm))#b(?N`beLOXu zHIgqXmsMiPiQIN4>yA4r6Os#!_u23~g@TH}P46~IMWYsF%8&Ut#v9=x)UAIXauBg@ zueDifS=0+8eP3xmcKf4Z5h=63y8N~Z+1``+t#8o*b<*s&(vxwhtVL3-3H}a8O63+j zNPMc)T8ajx+A-eS>g6evJ*f1xT6f3AxJz@rE@osezNt0fJ|_spwbZOcxy$s%4#{!_ zdPx`Kh*O+r`h7+&ecddPudTv@!2La92!+@7`A#`xad;vO%r%PPJr9p>UhbDppk`x~ zY}G!%)+G&6mU-h-UL#CuL}<=GK`OR>x2{asF6@UM?JbkW$DpB4fT zO>SsqfakRlN`Jn+q9An7vsiL^SV7)Tl^#-8@Y;5x4z zTtJC{%SbHG5mO?^n@ZiRpOcu(=)Sq&T<;qb4(BHyk$t7c8m&@ZDv%(tQl?P#^jM%B zYZ;-o|62E*(;WMgmxqE`w6B@l`un|Jy1=T|oW-H=JVED3=qG9$oWvZZLk}HSw~z{g zTxpySVtkSf7i{TyaXNK#C0Y&Un77nN>#o8 zjglfVgUHgKu{z({Cg37OlD{=vwB2jR!zS=Gl~T;us-S=+AQ%CUImROEbFR=Zq*QK{ zS&zf;paBV_J<0mq15}i#r8N9XniELp-H+5;96j~M1;Oi{c5%)vG7EN}rdscWcW?1a z$9}k%Y4m!zK3BqeM|x8cK~4t^gNwGsvpQ6u2m}D|7I=VRIo*4=>h)%Ym)3biz|y?Y zOIt&iIJN$|5U&@z!uOuXQfL(MP=OqTf{xrjj{s$h+dvOdI_+!X=DTRjJ<;8&jH0sdyB&bq1=yIuFftl#0)GC9hQf z4J|sB*FTI^%GB2^&$=ENF_gNWww4^$;+z#I=6GLMrc2ZqBfWr^ zf3v4fYcN}wNcm@L1PK&+X`aInH8bm37zO(PfG#)D1DDm|;g&j=iiG-EKsrwT>Zf>T z&6FFl1f?%oNKtrA>Tdjbk|zi>)%*bemY zv#OQy(1FgI=9rKD& zfT74NH=tQQox`{`k3L&ehi|_kbe({mjM>Vp|E6Qiq;#0EH`Q6?p$nuZqN8FLt&J{1 zj+lua(2!dgaK7m{CJ`)}Z+SdONh?`M{j*Volv;jBK2^J>QRH-xkqCqJ<|;u#Cax2h zl+iN_q?%)^HcV}D;eP#$<&U+)IYR?!JGo!Bj7dY&q!CBW7gpvxOtV_PBj7}GR)r18 zPD{iZf1nU6{!_Rp7~DMu6r>=*W3^Hjc|Eges!<1gP}nok<_|rJ*Gj#$??S%yH7uzU zJ@%WDi9LMkAeus1D<8Kqy~y`Biy8qjTSluhH?_>gB$hKU z7WItIMVL*)<{g45E!l1ANfy8w<$9^b}wDD#|=J?s@o} za;UYFvT_7}DQU^xIzK=gKk9GAe6NI4g)}Fa4s`M1 zW-Z1F5w!}hU8`MH!@Y~yWzaU1W2qvK@H@k$Lv}+PI3)p8VawYfYCSl!9rG~(CQd|O z5AMV)hDTLIYF_DY(470WC&8hosU~7>C+7Q+d7UWX-{D>hw5BU2NY!#$3_-$EYu#Nu zYd)010r%WmK2@+{Z@1Tc`q*)bGmmJ#1Yj#18*5gf80vr24I*>tAYlYs-Mr_Vv6#4@ zGIe?Y-%F!_A}DaR3>v%F2TM+T-?+!WGiO89!Pw;6o&fJ>M9f*0BQ|VO+>a<*>$!d@#dgC8tg@HJ~UT04KAk z3fhD7&C20-SpdMQ78Y1qS7wshMV!VvJmi(%1%M6krdlUCi2rigUsCCIiRNO5N?wCN zA~=wq8VA{M(bSM@ADj~FxPTr9a1|ne+%6U-fRhf`iAr{`@^=mZ{p!e(HN!t<8jy5j zTLvRD+tYyRVk1cPI$&5%&vS%*ZoM4rm`^kq{LOzH8HA@U^;v3;_TL~)zqf#{R&^^? z(Og_V1~^4O7Cy}7+6JxA0Z5vDM2NI3XD!B<#_fw`;7v_cYpdBh8{2Q11-YcFxCrwY z!0T{Kv+<5;^BF+!Hlk2~PJ!NOYua;{P13~k9d&s9sY6gyW2;CZ1Key^JXHx=qiJ%K z&OeLaI?acdV zJ+*e8td$;HZ6>?BC9l0~f<n|=NcPP&CfJ^0*_b8_P!>U=1A~b(4Kw$D~6yO{pz(ToqbSF9MF%XBvZq;~C3Yae0cn>O^tecr9BVz}pP#nni|}P^o|_`7 zewZ7K#4opi?W~KSz8qGGdwbk`r4Z8vSqP^~v2bOr`a!%3HhO>wG+)X8R5mePL4`Pv zGOFAwSqHgiHx?ywLtbo*6fcWPsVmos5rXFo24$TgX0)Fn>RK632F_pI#AXWF^YQ?+ zE&QsrkI%#zH5^Hw2>gni9i1`1Rbuc7IMae~c~qjuc3l5qu<&+T2<}iOOXajXp$gNB zb*^*HOy|R9T|d*;ZEtxawq!{&p)p)BZ#zrurR?&^)`r;A-r>kCSkAOB4-*-rDD z*Umm1C9$W)MMMxdc_JNlBGTo0D|%XjTwsU7i*e%{tjC+wQpA2ULUz)4ng6)kC5tBR zOo!OgBf-*?@kr~~NK%`n>fg0-F`@e(zAz!=@S9o(x0 zrASB;Z!(2Kv=b;TC-&oUMQsghW)JT++3sNkp|wea7IO=8$hmMTxxu=7%Tu;rRVuX$0^lN*I{z-6o1|osEDHe{X5?CON{GcJ_`c zYOUI}sU>#pAXZ ze#{Jr%6!%n)fTA*5i(N$EslL%-$>Zm;@-55Ve14g)#_?}n` z@>=Rl6f2w&|5MjLgjX?KtN_0{K!GkT+^zfPS51TO#k@ik|30sA09k_>TaexR(u8jk zDSkPJ$`1z@Etd`Z_qa6mAn>oYo)PZze8MckMpI`^qUX$ZB$+4F&%AD0e6GEpV&`A3 zHG208PXH-^$#DmwZQ>LvDZi?P_lh$3pf5X&HLzWNcKXE%h8xidlrlv7TJGh0k`BDL zAzY7)5vnDgcT)r>ffF)z?Au*HX7G~kmf1mO@)9@D#S3Goj1>(*lss(U&P~=K3t04| zaI>`UnUV>-|17dpEEz7?7J%I&VM#hcLIs;B-Pb}jWVsBv&i7%b@Y;m6s0 z85`AT@EhZPl{DY;y9rlXCcNkg`sEs|8E+3R>Yryb6f*@qM*7A{3ubE6lew0cEgufA z0blfw_bK)a4qOj-(-DWj(KE7b){lh>jzMMV_<28dEakcn+dLx4d=9TAdEo72Jv+@0 zeMuH$7qQF+u=;Cp}4$WS-xWW*d< z_>oo6%YcF@Ub7jg0HE_$#m|o4%vL(TjX*QYh`ioKze}km+GyQIzG0H@!zq2s5$f#% zB%jEfNX4@))T?)2M={Z<{mG&zEcBt6Qf9uGi)FD)8-JGa2RTuyOPOdy$HKXz%kqnlwoxdE^ zF}I|z4dY25Ged+(``-MM&-I?)U1rz0eKcW&Y_J!9oc5YB6XlS@L|5iP2kE2wDkNsY zsr=#I@}BToclMjR7z)3@1nd(r2?kpt6`;1#^3f~OevbXg1bd7 z&Pw0-BRz3d6TtAyd2uv$#>k?(4=oDBTgV-SVboZHSkCi>0 zUcDT+%Gi+gE~wSYtL0BLZ|T0o7*MLP3J6I5SDBk&noKJs5RU5qI^j@?tR%NsxR``5 zWFq$E$lMpqv<%6@?{N8@SstarS{q+;Zb1>@y6iT5smCQ&n5*{HTinP!g{eXg#%`R% z;hR7BQO?SpLzj?`dt-UGzislFxy=tt~^nD~#($t+91a6NEa5Ppfkz zfE_a7_U~W)?Ax~P&He1n4*P6c|E(^o5|99%FZEG0;fDqb?W=fDanoA}vQM;;q2e&M zFGL($)<1O`rFEoyagSQXzrC4Rf9c#9NR$qTp+J|lF%Y40AxOpY%bhzXG8L7RJt7`VPA^5PFjEhLwYu{*| zjMb4M=4uz9k|U%ijXLD*R?laI@@?FfgMrf~S{b}I z(gO#i^^G51A2~cfYJz+{8I%32vJZXfj zTX=0oNMyTRfPD(iC7MLCAfUIx_d%XPOykBx?_(0Bn|I8LT>R=&&S6+dw=pEo1j+SK zXIw&hD-38t#*V?Dy0=WZ0PjsGSai<@PGu6Am&R7ty%^y&(2vMg(t87fixac--r1Ly z#H2W<;CgK%Z71(|83yrF?2lP&9u$4yN7({^+hq3(Je8SZMH+Q*>0c`NyRt7lTo=G- z-yS9cLx!ks1VK%BUf939a1k)!-yss{SO67k?}H36qSOdk(sy!Rj^O{MGG*b-)?p-! zt*sBuAosYq!m)WYm)$Q^4zR5d95_uNn@T2&klk7}Uur7v~sq^`w!=z80&1zP{6zS6-KfYJo2@B#|j$=opSgkNTbcN z^@ba6&^^1CbXdI)c_2`@m!^GItNZTfZA>bbx#E=iQ zcK*P%XPQ7D9Q)UlUGo^*d%*kYWr_km5e*iOIDp=Cp9I*y3}|5GD2TgLtV^BYK~HRQ z6$ThiUp$__AkTBzq&|1clmpxq{M49;2-cTHkJ9@*CWFabq!8uVV53$X1o1*m*A5^L1XEhTHZvvfy9fON| z^1)YY3a(|hi<}yZpPh$KXpt)c!qyf`VNIIFf)^#y-59qiL#DDNJHde@>YojS3 zaJll|J;&e`7Oe5^<0jy5u*#;r@HASe2a$avoXv(w`AvR@SrgT{5Z~g9P>`rId@(@R z&J|iPlyvEhp(f{JUiWH~@-T zS^AZc6Ete=HqW*UUWvndf8X)F(Zp=C=Hp78AY$Olt;N~mvU>T^+udY8L9S3iE_h~a zaZ+psn%N?8fXDR4V>>Cl_WJY`{-rdb7l|=ziCMsiDtMn|*HPe3tjJfzISvq@6;cJ) zoSl7QCfY*sZeB+lLCS@Zwe$)d1_qAQr^TR|Nx*FUYg?HQJR+U|b~)HX-E35R_pGJ2x)N z{0XhO|LnB9uVBp6rCnySot_eL>lr#C4#eG;yAMyZHelD<-Oa?{0bBA`wp&6`(PoNf zln=1PkRzA1gOuT-Hyr@fNw)Muwn$c}e$NcjN{p`kgz|hCSMlA^*%3-nAEvY~<||i2 zGl?zOgNvbn0)GnT9ij&)(Q>)br&=aN~T>!3!(KrApkd7?}UYuasEm0@SoKYvMfo`WlX3M{q`KhJJSBk^NQrY~mZ20RGTSkazTXO2c*7 z&OVsaieTAk@;rff@CZfNKBelyFl7Yxo07iMe8NzcTb$ynP_VdjM^%a=dz|aC$KvJV z&n(+3b;HVh6NV7MuW7?L>U}`y!9{Xh4gb~`%2kT;#*el!5F7BM?K1KoV-qg1(u506 z0B6)V{Jj1Wn?5SxL{%BMKpVFAyu$zUN&(fJ|DqJ?aFlBJ7NANlO2YK!Wr$R*7lFI; zrgN8yg`Y$djTFxk;DrKspAq@Lsc`Kkbigg}>nVrbP`r7`o1Xb0(`*?7i_Zt^smqMF zH(cESYaUTD*Lzrs!nu4}|BCh4EyNJA0T4Gkx>deYxi6$(9?=KOYfe`DQC5uO+H;o< z0@Jq)LZeZXg;bZILuWly`9JN$I7<45&#(+P%2}%9k4`q8yG95Xa$pfH0{`DGQwX&@U=iy5I{!I)4 zlr5ka7Gi^YcHulWrm*=Ta`*h0fS!_^a!}9P;{?FL7Pg)<#ADSB(=Jsaiw7Xs(wyb-sa7w6Z0t(IkIH zkI-9RMmtSyM|_5aezZEz1?5%ul^82*9coBqN9Lar!bw>cu|cciN?RrP$Uo|S?b&)%HVR(uwHO`+u2uC}8Fn@)b`1e~uqUA;lXn$hy~z>5u_BM7TDeMKC(nWIxl%7?QFF zkfx;t{I6y-K%lUcA9#z3tJiHvkch`gx`asPVmkpmu51spv*wjpW6UI;Vf8CoP$^>J za)vLD&KC168ob#g4i!VTYye}R7_gF8j~Od<9{)NxmW(eZf5ESh^Lk^MfQA;RfQ&@mxnn(u2LM+Z zFd@mFZ*Suqc$-1;qn8d*zrQVRwS6q_PKr%>Y4!iL_(-LKKWVJrX3VZ+Da1o6Y1DXoR z)21V*&!YFU2LHzeXdsONe#B;+SkS0?29X!>jhuk??P5oN2is8kR}wqrtevJc?sI&+ zudTZ^Jvr6!d13bWd=z@ERyA8$uYy{=YrnTEXBl-8A{2BWf&!hIi`9Ebg-iFGl-TP< zb;NeH&kbD6cVve@`61T6<+x;Hkj7^9!&Q1Ilm#<_D_|1^M4CH+`Ii)4$5CWQLIhLG z)_z$!fz7d{{vejr&|h_&Kf@Z1QVNj-;@+DgFJl-6w`+y$*ZHrp7Sw&d=0vPZYCPYa zOKi+VIduF%46fLw`9DE{A#P+#%(2eM(*5om;~+MWIH$SjeW(h^>uQ%(W7(72VfxGv zMHsDT9?(@-blU@WM5sK5l!ek+BADXORH?`TYYTIQ^+R0D&CQPv%laAke~<#jCmt%! zR5m6_ZA7S=1ubxJK|}hB*n$G;v?Iay2s} z!BM0IY2kogXyj|433hg}aLsHCx!m0?9tZB;=>yRZ)Z!nBqY{0@iwgHQY{4&Y1&%IG z=sh2dje4kUT%w@HcTY{9GahsVdrC8&CN;i`DAxCS*p?go8SLo?cMEEi{)Po%?q73`lP9(7su}UR8+}$8A zm$_Gid^Yz;ll3M2L|gLgX^AZYY9EI+eKPo?g>v0r<8sBQpR7Zh$hw>D5nJg!jTeT| zPs3EMx!w%Pqc#xgdU_V(7&b8p3CkTGbhbEO%x~5;Q>0xIn?GEd%`Z)J#p~W8iW{g< z96L)O@Uicg7;D@0rQf=LGzum!Q4kjj!4cW!jRn2$flP z+FZIkg<=DT9j@arWs;LtBv^Df;eEwaEJbGan+NPScg>X*yYPb7KIX%l-imbbM7SUp zhM}ITgSwFVh5J~}>VwUo)d63Ivz&!@71fZC*bs)Q{lZri#mi-g~^#*Uyi zfRS)nbdSufAaFB=^dlmM3OsM2&dAc)y>C{Gb0%?%Els3rQ*e`Db;+-TfWPpS?#HP4 z>Hy|!a(&F+2Yz|%hQ5OY@m=?Iz|#J1q_Mt6E9&g-4q%hy5%#u~3_~k}z!MI0lQxSC zy=gvw2h(1#$*z-7w*^wxgRs1#^$F@1MZrHF(^t_ASU_n@J#qjHx@bGfdP_EdH7;Uj z^kuNW{-id{UWOyCSCYI;(Fnx;vw0-J4#HG_tAC@30IJq5b*Q8#2ik_3tUZ#yUc2YQ z{f4gioQMQx#kNBEEN07|lO*U$&=&VJd_7=VjZc*Qv4I0JT+2@1v@|%SaGO=AAUbh92-;2#0w>M=S zFZ<_C)OXF4k49#NYhrgr43m7&TfGi*DOQS7UFL0R00Bom6Pe3Lq&tG8Gy>(TVn+9A=u7R*0HZd0w^j5*gz^S;{7q? zjStNRZqn?D(|&GC*t?7LGJU3rDhQSvu)1NuGTnM00nA~b;atqkg5EbS#_Pbh=alR= zO~UNB+#L<;%Y_ia{?mr#kt`TC%l*-}xTzxc80^MLPd!4RK)DC(NH^$xw!9}JjpCu& zTa2PNw%CHfI}58C#{XwlEcwQnLN*UVzDQ+q~nD1DD>| z0H0wcHEp((X^@NMjYd6uYsI_W5xfRUUfPzl1`LeSkAdnqHc$TJo(U#-x+lYYF6;#~ zrv*mOvZ4dIllFSF2~Muir(zMk#Xr_vil4gzpPk_&G~H3UE6>WwIsPI^GPFdgqC`eS zOn-l%0Ss*Z>DhiYfOC_0!eKRZJ_P6ikA{ow_=GR%OMuv8{%bLME} zgVk9|>-8&yw49!otszS!6tr5Siy4P26toe>G`vDXr@Y7)IL9-zbOvN{^ zN;8+Pepfv=+Bf%M`<$4dv{$;6@_yncul*DMifr6c>nn!tBAyqnFXpa?W*EL}Ez%W1 zKU0@jQG=IJ^6in3~{v;LG^53P)eR zBVjlVXi`dFI)#FXUI}3RloDJ{P?K0n*}NamS8GFZ9&{&Bo@TnzvW^1#WUO2`D0{AI zs~KTuA%Qw>G5Bxua`W5pKJWX!0DvU^XXxET5x-@& zzX634YoPbh_GH;qBmR%q0GJqzkS&bS4?^eJ}~g@WNJi_AM(9+g21l zXJU6e8Kp&JmA1YgE9sxqT3Me!1h4{B(tk0~m11MTC1h9m)HdqmaI?S!V#DJdW3~y> ze^Z7SqrH-;aHGmOLQp8$V-gJIGhL7MKbO{NVKvxyTW9@Fp1s}=yry;b&7-d?XR6Vb zifio8G?64K-zdK#gCOW8`tte%^KT@Cl0K!hzpwaU4D1oI?kNu~B>h?0PAbQ6N2^}9}bq_7Mrs$y5}{_-~41W_akz# zTSt74{u*IiH5oN*!x8j%7OAO=68ZOsMk?73^IY#+&Kx(X^i80Qx=I?MQ8mX^5IGP< zXe)6QKIcW}XnA6Ja@#U03|97*MXtPBh#OO>2D3WMqo!1DJG(;!1cqKPUQ$uC?DfVt|Co50g%dVoh9NvNj^GJ6u;JJ(9H9nway4gu%>J8$q)G|{oYm} zTXqu`Hh;2J#LwSOFQO0eTRTKQhFR%QN4G}oy$vTk{3%zqd&mg_P2i59m=dUKJYb;8 zS=1X}-|NUJaS+Se;4fHr0i*O1a$}J>HVN$)Bdn%GV7l#V6lky#?%Aiv57t8!B=Z(o zP+HA~?d{N!zTQBh|Dq5(>Q@YEKFq^rMj36uUI;MU1e8G1oLl6~b7Ju8Lr`tzAX{>v zU)e)%SVVb;ZejL1rRBJKoZS;3STLjrSEN0;mRGs@@M`_-xtGEe>&?U#iUEe!aL>u>h2I7%c}7GuP2oG+5DXke&T}3CV07@iX6Xq0{NKBMZ+55)y}(oi8hy z7c2CQfFUGFKJi5ObZass(Xw{`TQR9GW~JT-4z&i@$z8SakGJFqUOfsq-oOfdH*8a_ zk*W5t9b05i24`nnO}%3$>p7h4hL?d6U?-~*WwJcb4UI?yr(FKIFqM0o7y3RtQ>n>hfQz4!a#= zopfTqycj~5R1XL4d}L2f9phEGJw*B0L$%tqL-`o|vWz*4&Qm^&hLy(9k-S@gF6ueV zLJ|eABrs(b-84G6jNGT}#jv`$4fdN}WPoL^4D1nP|#Lgr-${ zQ^*p@ZZw|Es)Ca6&tjnX8wd;c{S$uCh_zs@F4_T0Za_Yi*xl7hm>!XS%1*f3ii5?I=&d3LKlR&9%dt z=8Niz9mcacSzHp(tC`RJ_ilq7eXz87$gOCAWy$k^tjOaC`UW=88;E}J#aCdcT!Oi# z@%Fa@jV(83aD#{RBq@@6fk@I}moF!l6VkL>*G7=7z|%Kd=i%p6sFSD8Ky%%GcY)s5 za3?J_p)E2lsdP)kEuo;E^e%tWu6&Yt{PKQ{}&ukm}B&+sInR)5y&&{sehC3#Y{Q}lVV~de5NYo^Bqy? zo_)nXknPy5}JmuKz66Y z&`+LOqhLyp;(z z;N1V|M9us=9P>SnA+Sj5igF_TX6hg1N%{arg=5_xB`=FnW?KwUbD9G~g0YjQ#lP1R zZ3BiH=CNfD;?YyCfZ9tm_5FUb0xhI08Onz2=#Zea|MX_2`Y}5Ny7Hr_+NE@wJQWWf zp^;Sd!-UsZb+eqc&wB83R`j1+D3~lNGd~8QTu#}aY|aS6#O-elxE-i)Jx!(Q0YJM& zHA5U;Cqi7R+NnL=(#T}w5F z3c-&q<%JyZ;iguEJchfO-UJK?=`E2`ILZz(c`SmAt#5%uoz#~@rL|R~NV*Ns?hP3z zj_6c5y07yV|1NPBOS%MQ@gaDHr;9ceI04h!o5XgEKC!L^w6(FK3bTP%u*DEKmsYk) zg6}hz_`NeHygq(!hl0vbMXGEeRjQb})Jp+baf<=3LgLJT6?|W5-h30yM`bkb&%i2R zQMt}c1yImaRxbhQLAD*nW^8j{GQ#>{iWNQ^m29QGO*XRcJA&oAStyp7DQ6t3Ue><| zPV-z1GO-J{*POzxUE0PAu~f>F&V#$zhx-Fa+Epec{Ww;yf1e4A#fvF3{p3IQqxy@Z zP@`r1A0@tWod;#I=>1tU>DQ4tMAc2qnV7VgKa#na0JB;DwBDK^Rp?&WMt0U1-;cE7 zUf|tpa{j{_Z$M6f(0g9uX^14C>YvYhfCxgawl`C>JjQV#3Qx4pY{wuYT^$`PMer)# zJ4~xPh45Lgvuh?R4W8UCKiMW%kzAc-1Reux^D#G%-9HdsmGDKLeKXfj058)(#pDHa zs`0oW3@?uR|tI*MRgSdD{_U0)d6NSP7e4VGdP+*NX?1=b3_Q=mh>~N#amRiBlx}Ovd}Z~ zONf(B@1gSCn#$Gv^(O?z;F;}MO@DMoXEy63$RvdTYGoq^$D!=$DHy|f z#w6hI9OpsMm~ut|)B(G@@!Yt*&pQ?e9(z#DwBU$0Sb)<5Wp5o^zTcwMw{Ol~NLNrx zBtau!z|s`&brP1dg`de*NUhXE5_EykGXqz@RD z)LWaf_K+C^CAM8rg#MkJFys9Mi~6T^qhxeuypE98`pW7kGW_zBzV))@pRMc`l5Fm7 z#w)z&iG+=Q`n>mg`SwcyYGYU|^U*X`1(}ry;Hr-r`7Gd_gdU&y-KjFzzyshDqptvT zr~?3G=!AdpM{c6fXPhp{_LGW+CSeb%dY}v@#a(^!!H9-euE-H)y5Fxb< zhAKl~X#Ja4g1hMh#3 zk;RKyBlg7l4PL+lX443FK=q73DyCObb^WP#Kne_Ut_B#pK%e^Q?vimep1`sqI_*U-q6ReZML zi@dyDl)moA|Qy3B$or2 zqk#3gD5X8nB_joktaJ-1`a7jf#L3^!(lQ$zKgJUk0x2PF%@~yTXzfnG-Axspj8q8u zD>5+QZ}iaiZn_M%t5sMh9b*(6xCs;c8$Y#H={t)2{@eJ5em=zXy%WDwAr@q>c5WRA<_g1QX?{B zzhpeRvRW8^!pMGELDGA|q=fAo=8jBSwLt%>-I@?Sqs+YCKLYrYu}9O%eBgnh3M)=a zYEDE-=DyDKd3x4g#!>hYsetnF?mk#pWE_*=?zbdGI!!P)a;{Qpn{^K6+Q5+n%h#R7 zLz!8fFE2cQO9kF=@13$@qv9ghU2cW4#OCRiXi0WKVoXjCD`p`!$vJ5O1w~kgaqeh7wB>J)f6Or)Bt;Fwo-`c-L)#C zozegT6+O&OGQ@1sE^XwDD-8Fm&v>+a7Spf1eW-!gZLc;kpF5nlZx86e1O$#cPWgPs zl=D|kn72!R+Nf0WWtc8;0MD8vaZSX;7-YkP&Yj{D)lbUL=A}-FPLVR62FnJR75RIF z$USQ%Qv`p^KS4K>L4q(0-h@FwG&5_qi$PA2E3`cD{wq2<`8YQU5ShPj;sHH0@z3uL5h2EcQ3`=-L1i; zxVsj&;_hA?3KWVJm*V!m{_nlagvr2=Nxtviy=Tv!J&W*=^K@J(`jxx$j-J%e?LD?G z*N3IZw&NIIAFUqn&&f77*N&HYeucLBM&^azL?Q_e3y4!{dMQM22fWALbyv~&B%f>F z-Tr&X5d+n+*CZC=c@KG)m)U*B$;z#Iaa>Mr`QuW{_6^DV~u= z4g&+v@Z;_l<^%nk%&WbqaUv(asyMJJ3sAff%wZXi+P#AJG+==zOPRO9ccKP=_!^iX zEjD6`mBS16J?#qK78cr;Llv{u{MTo(E&NUe@d;=!ZJj!tGkhGVEBei%z=O10JJWh2 zU~qd>{Tv2VFc_*H?i^(q>nJ=J^$pTlfYh4w``?Tuz=R5SvW|24<&c1EMc|*>;%so^ z1!nSs?@Tguxdi;$sH8x#^me5!h8Iqz>iMQKHWnwlD`AN1gy;nBRw1~U`X}3nQx-b8GN9L! z+#C-v)QNW`Dn*4qX75T-zY#wd|9!NZLXV9xI?x~&Y2pujIbSIZ4Dt`tUu@VvwJL7A zpaRWcy2~xLy39?fv$?q7sdY!R>-(*=xL&WCKVAMFjVy%U$Nl}BJ`e1@lI|tnxa+hn zgKacVn&$&@Z}}+wIQ-L^*WY7fHGwS4b312k;^Dc+zoxH@uezc^I+2Kjg&Iziei@JNoANtbMsO$aUvK${Lf!J*mhs zC8CP^#G`ZWn%*M6X}D~CF)a2qsn_qy*SfrXgAqsQQiQ;7ioco0t`$G6Ryly5>m2f1 zOXsdut#R8udGTTz+UQ}!gdwkv`Y_YS5!!qv5iy_8B6XNHyxIHCJyz$FL%OqdX2 z^bHJD?-HqyRcbcj#NXwFi?ZSm0oE#R4V9VFlqqrtc3~z6GbeP(t6cJ)K@(FmY|dOw z?Jo)guKy&c{}Rdl^fsUX_~{t!rN}i*5by*Eqpa#gnRT!FIa3TX%>Ko}2C!Jv)KCR8 z`oXu7vK;cs@l$(P$3Gt0t;-{r7}i6JX{Xg*$xwskm2>Iqo-^}BM+)=GQ7`Jy)z!(& zIi^jDY790MCJQG-n1z3KC;o&>ta|u6&z+R{`zyC0ut5y}Oel6S5& z_zTB7p}%YPi>{;%K*z28X=nH+P~~!6c>X*$Cl9iGy#8vlip9-qIAZ~h@4F9FUFsB^ zANa~dKy~-*f7F)hE(8F9QRBNsa_$y-63P+{PtraiJ)HA6|O ze*p0xyl&q7*OI;7Y*6uCkb^%2T-_nQ*YDE=h{r<O{=wE&K3V85QepteIpA<%6E($v9CFYfZntJQPF4Ar~OYBH(SH5*y6Q+w`WQczXl#rhkg6O z%Cq5JUvo>SZ4Gk#R^>rl9dNA{thU9Q-%<=IaI!S%~(bYdEBGnHa;s*Z`#9; z8n{|$h(|88z@4e0Lzet}|65A!)PlnkwNPsAksyozl?u-m+8e>&$!3-<7BqfH1#H9* z{_el7#VU1~?rVPE>YhmIPPu$sT}fWJy^Z<|i21_*WO7t*`U2|W?Og{z`zd&TIy+p1 z4V21hm(hVzdD_e;+O#Orpu`C>4tDep6)e`FkUbq%(U^P9%6`LSzs}8^z6jy(JkIe2 zA3RD$H%4z{foWAOH>-vNb~OGo4KfTw?qVJ)eZjj<-|Nu|q9Z_H%x0-@($ybhw{rWl zKuekCz&nQBcS>^G23LQ(^w-?29J=+))Q9B5B4;v_jxq(N&W|iQ&hYgup)E3_{(`Yb zOBQ{BjwLV0hJY^RAC5flF52Vu0<(br&5r5Dq|Cp6>C5_xiQIO+dj0=e012|tKA4OA z;Pn?D2psD|Gf~>H2{eTb zVQFpvzK^btkjXB$J2|C)7mfUD>Xy!ixdPaD4*CKH^3;rBRR{>LWe zRN*&IL!^U|U7f)Po`?aN3h;1O-E;ZGcw6yy+9%t< zx?6Gvm*{iGu>?OGE|)~`Rdss+jeTp=_k`cwkrahBcem;(Cl zyQDr6@QAQ-Fzg<6yn_?iGx=430pu|K0pccVFieC%V@U}zVg1Llu=w+Qq3N;VVXi?L zF5Mq9-AmKMzT`K-J_Z|_q-JHQ%jba%NJ37TcOPcd@MM^Ek5+_Ttbj7f%VK>mgarOh(sNX<76=4dOY~P{$A1#Udz{WfKF52+Az>j zONKMaSO0RnRUZSCr2S7RnTVVzv!P+4%;FrB`~k!if5g?TBQUA#aP^!h__Kw z&Po1pUSiA-+&$Vuc6Zt05PGD0_U%*Gy88P&accB6+%Ag&;1bbRELc0vqIi~;3m{$` zoGhEQT<34i1bv5^i|vZ?lbjBclWd?o3NhmeElT{r&(C2_*(MHtL-8wqNRk z6)%Rb2>ga;E0DwiKI+}3#_l^@%(Xs2fb(JyUvU}FjFc)7oLzkwWKfG8=(WVGx18VQ zQgvS%(bJ$qscJWhw-ko4LD^zd{lLzE>BgSwa<$2(Ou1Cgpdnh{VPp}1*qLN7F<1ne z^AW%~K!FkFGSgCA(L&7C@zi?f@z58;mE!-fTwuG=SMuW8Qly%vJ&M!7JBoWFaQQa1 z{YjMnIhcVz3)#}`8*y}i!L#>E(cacJ-$~i`^-+@D-yG}b8!b#y`CZR{os)Wvny}Ml ze6&@3QZ9fFKpVd%nZ(8Svks6r4a?@&(}e?i=ykQJx>z;HR8B`w!o8ae&#n3%iXOrB z+0V?e8f9Yki5Ki7^sMcl&;}!_QvTMonUa7E0LK+mBy0&yEi&9vx^ie zloc~kOR^`Q-rj7qOV(> z0p-gXO!QZy#^jaQuhLIHWYhX9(MJ4e5J&uNKUTgyPPje#M$ca($g=)BI-K_=%Z$0u z9fxyshr>~Hv+Bdo23}wp*j?$p0NzqV%~KZ*-ifgo@<8~1CC&8xV%D};}3usfknOR7Q@CS3bXluBjZvh^=6h3cSu6njhh?B-!VX6DE#4#T&D-VAAI z&4YHbp*Im%*G<#$A&vdbf2Vt^uZ|$xN!Rw<_gybQbJXjT4kNlBV!>S1KQCxSe7SYf9m~2U#~iR#=v6Eg(NKsxI5x4 z7J*(99|tc))#%dp|LXIM(|wZLFvW0QK6Z=Tfr;D);Y4nv!AG7jnxry>OG+2g4$-zD zH_je!&j4Ppz6|S*zFj>YS@5B6;$Rnvi~}c3bgvPUyjabjiA;#j^DP#_%_YOi?d<;m z3vlsNr^Xr3Ll@jWw3r+HpXq=}i$3r%c%JNEdV^DP_L@yx;`@{3-|$u2ME`@~%IAP~ zcvyTGYV^wT`0Bzem|!djvn(+XQ;6YbmOPF5UdK4p!IUc@zOu~#@JA+0p_vYo@I;6t zMn; zv|}T&_9a?OK)V{_xW>!g^-CXGS7)D_P@czIKqZeezT#}itvFSp;8PMfCH_wf7H5*A z!^3AWk=)3;9bK_rkO54I8&g2U#;+gHAf$VV&W(2VX1H6=6@c4CgcomXEh8=1_P~AZ z0Fu|tHk$8@oLLHYu?Q#kVt%8O4==wb9e}B{h7TUzXvEUm=L&YL60Twdm`@N)%^RG{KIfaVR4wJUlv7{h!Novk@h|N!P2xhS23df~MHawaZ4^1l2z?uK1@+PSW z5Iub^rb0@}AEOnv+&~yWPZs7eX5Ra8l6)QiP^>O!o>NW9fJS%4u{D3Myq^;`qYsg{k#%$ zAh#__#>VJCmXJ2KnPKcYhCj&}C*gl>v3Hhgd@5123lw7v1g)e`|2 zrdh}-c=oc~c6v*D@E7A(PFm$3cxuk zG&h^l0I3uTVyJ=JLdkm-d+) zh#PC(s^h;&-H(|>b)&gl@!LoWPVSly+{#e&W>w6Lr^&<`d5_LYV^8mWO$#W_&G1Ck z{LV5w%~`d_zgr_o@S1niob=MCgQ4`yX}%|_u!?XM;2b@voL6p`e-Xs98?i`gU{s}Wdrcp~EmPxq*`#l5v+q9Pa^ zsO0oQ+o6uA>LOrGv2EJ<5|&RLOA=xM~hH z$OTj3i$b?4Xa_jJi39UKcFohyY1x)Wz}&k_!E1_S8f5wgtKBJ_=qdFV2=20*^4voN zQ1^=OG1}>B%d7rc5HEgx9&ZI4suM1@SxM*duFRnmA@a=TPimv*)sKPzpd`? z?BXgD+&FN^EnUrvCZ(J|@VxlL^HQlevp4Q+d@?2qOROS<4l8|N(v|dWw>qtoBw1|8 z4K&^=cKb;Fl{V!oOh>4^eU@&u|0#o-)556xB1AaiH8?SpTEd-UgsIB^-FfPqoBZvE zbSZhndfLUD$ZzJxnsVLICbi+;EOWI=?9VQcHkU0EaP5fb%V8xd{9{aWR{jWS>d0&h z-eDXp?#_3>4!X{ari6)Z8fptb{!;M2+B^;K^qkV9;oyd(KchFlA{i z8ja`R6X0Jn(4QQM<-eG3l|%&y=ZK)J*S->-L)vORqIqjLiJV|`yU0@XX+n}XIEoki ziBeNsMR~+ZVQp$t$bJhZ2_vIk{h@{vlcy%o$bJVb`zfa=q}9V3Ef1A=mt{taFnJJWYRYq4PZs z3t`I$kzn+qOf6bYvxHBQY=xLRubL({15#I}%fvi4S*)Bk)qf`8ui?)eIHZ$8hZly~ zOV>-fl(bj}QfO$cAuzq{T)lKSxFqj>a|m2xmbf_n0o2tqNWw=x*u*e^9zb4MJ;2Oj za;vm-38P{W3+YgpTmVeEBVfu*`aI3VZEPTQ3|TU)tUD8@I)|&kf&`dM;awJ#z#XBiSZ|X&Uvjff0lB)6vh$%4Qd&r zU{IP=LcT)7lYwFZYDxI_Gi983U`p{_8VE}SQ8^7{=Zs2@Fj6-9O&y7?N-h`|10t@c zhsGF^s!N<^iCJ;lteiN2C?Ta0jf+)XVPZ}MXROOCIVj#Q2b!P_p{0;jBub4=n#@67 zE=N{KSK51T>?ulVMN@SD;I4=5Gm_)*@bqh^?A}t#G@$HLj-Zxm-J>!g%lcZ1JvgHQi-lyCa@qH9VZ2 zw}_E>2m0MeTMVqaI-xXORdCSslp*W#?xR|gcLA;Hx;4;f%crQkNV-`qFt1L#(W$=F zl88X@;}$Q$l|Vr}qIn-KlC&xUakIJ}6})edk2_PRA~!9(ebKCh9}L?;%oBxGML3ZU z=vHbQ2V;XnQOOVPJR1yd%ANt=U}52>jZX)C?)f&W$)&5jV8Wn^&Wy<9FW1fT9oFOAe#N7kW|6{+-2EOhdaOg`;Xv^ z7JScPiEU8IZYkD9t4!by%BXO|%vb`&!gKNF1ya1|Z+vxhPKt+#emO+_wP2{>by_{Y z$l=HHIknHDYuu%F&03W_f3p3#!_$?_mOGt@+^Qdb=MFV98)7f+Y1HwpW4`|vJ+_A< z1wEbKD^09tC*eG=sD6HImF7Gtzh6PK5{kv5@Q%vpdLtzMArI4agwpNUvG5z!&k5Jv zip5R~Ii^@O>N>H|y0;S1;o6e8#IxZXOWGis>hR_*3e2_Y9GtI(8~?Pj~kzA1jq{^|6>fW^o%jJ23! zhLkVw7_@mXW=T6as(u$*=O(~5tI)T{8DRI{+bEvHzg|#GkINy(8Yj>=Az1D5`ZM(y zvHDz!t2x%g7A&+^4le+=katg#vwQifCez*8N-um+&RJmxFGqG>Z#be% z%UmOl+YODo-$Z;wayea&oOvt6`8uBIOo>m$CD|gXmMx`s^>a^-j6Rp9=q)+|zkk)t znEzVD*kJdvkOyk|`nLzk6*HYLaB9bE!A}|71HR}L0-oHZFi7yfWx?esWAfx2Dc1U> zYyD+$Fk}d~I$-L{j|8yAObde!?SjTz`8)fBsKom?qi&2jeWVC0l#(N|Ty-d`^2un# znRRuI7)@X7J6XSs>+;pnW_!&ww>W6JVriu%XHcD6Z>Rj*kgSg*s`^ZfU;*(vcRR_z zW=t$1+_Gr_krC}?<~7>Uk-Ye?BBmJw0o_eS6rp|~|MZxyylL}<>_gm2^o(4g;2;nr zaB%wJGGa=of921{W~S!GM?2+nk%y$ypVT%!^2-Z`1n(Ymf!^g>|2{197kOuG*zl1y zMf`Vua>O!yJ!z*$g47R82SOp`*H#4XY&ut+D~bC@y9bqjA!8Y$X(00O$LznDS?ZhY zwbNT7RMNmfvvC+W#ZWaS%>G`bgbHikbk_uu$_CF~F5}%E@)I79*eE<@^OPasHXZaw zhld5~sIYkcF|P2ej$A;3ps_W~M6Ebb(k=Rew@2L|?A^Pzo7|v`9$~ny_J`J*b7cYP zWVTNSqUd*f(ZklukT=n}@F_G(tpMmnEc2bVDEeDAVyBGz%&Q@xRS>$M%;)43TI4LT z0F^SH7Cz_0alK(BL=Iu0M>q6F&y`e8oI1)4oZp3g_b%P8Dur41l9#`0M-HE(lNOJb z9>Wm_pc3RdnA?6N2?m@1*E*c-1|b)fO4G6FRbTB!R31FDQO0mgDmZ=i+G~&LRFCcR z9ie{7phags4W^-#=0}`|=0vzs+xUlL{l(9F2OCH+v7*m+eF$q0)CKQ3Mfh7@X*U{tKZODBWhrqp={l^Xkq z;Gm*JV5Xaxi%yfRcS&ng&I_Z9U$OQ{=e}8Ex?7*fews{xxq*LPy|_UXar`jbXz&7QXU(B{ zwcV5O*(mHjGLpC23GvYZ{>0mg8P^umAEjKpA@gv=-v$5 zR6-0T;rqS)kS%+)QSY= zZw90!W`eBONcbXZ7p;1t2yQdCQRy~T!}O&ue43zEaU85)(gSVV+MyHZXb{@Ps>spu zGw&buak&F#h;X+*Tpnexj`dw}Md#@8Gf~nA$aREdDHfegGAoM5)%CH7A~i~A^3?{@ zK}6E;XN4JxSWuU(#5C4c{vQ13h$dBUFTbA8QB`B>HzI?}DY>@$T&GhDzbmgMX3G)E zs7M>jIBIUDkNDBxF9l3^ms!!`_LNCRepzr9A}*b* zA)(Meo%@1HUc7>xBu@K6ePsf%U}_vM6@@|kHz@5oU(*Pk6^0k&#Tk@jCpmP(8Ig<2 z7y?-YSpjoUB93c)BpE_HCvIIv_+c(4^PALuQ5X#9JE$oZS$mZhCklH_ak^40Gfj2^ zY#VM2G}TV7pVY6!#>;^jmVUEnpk_45QJ0?jzkeX%zU< zI4^)D8RHDrE6s+7JJNpeE*MP29FQ;u@J_FSs%q0a&wn8i?L#?vZ3zCG5s!q4y;dIah@50N840k1tTXq;a zLvG2}!+;O6{BUev+tf18%^Djtdtf@$rnqFe*Z1*-^`wjzfoq zt;TS+m}*j1^Pf-r*pq2!O*yUKD6=doML4mi(1@=qW2Rc>N2bnuI$of}^x4Szc!6`s}3HsW^p^OYzK^oMsO zk+IRAyNr-0B88n#Vk&{WQiq_7_;0i>v8>a5rsEsQwFlbmR)jRF!Q`UI8t1EsVA7YZ zK?avs=m9Hoiuo@6xgsEy3J{6?X0i=nC3fJu%c7`Mr&Z~&8!6p$S=4)hWI7}fO`#aQ zgYa_6|te;XG$YkuXVVQf145i65TYyft!q9KGGS!OCBubpv z-?;}4@z5d)=C?tIo9<)tqN*&(4ir8FA#AX1nOoc-X=@|Liv(jXms?1rh5fddx=Wv# z6%YYdb;PR~2xa_DRFiLvxZRjW>CXO1~Z>MdeLwZ zvS`uc!bnw`3N86OT|i#J(HTR%GKRxWV}Ut!fmBqVS6~w=NMiNVMzoR8Z-3`Bedsfcv^g%7&_0vGCxn*9 z0H*UsJ$1YfcmtTukrABN(By?586HA&s-E&TeyeXbtLIVKiSlywpFFR*X&o$~rnX=p zvY`&^sZf@W`j!`!EH31*W$Vt!4@v#el47MuP5AEuYZsa?CsA4BijL>XAy$gQW)|kZ zY&X#Mwp6!&Vd%_`=K4rXXKYaztdnfuc8NdICL%G148+~s0QfPSM5Z@iXYAP0zwH`x zfCH$mr_>eHUV*@g?vCOB#sb7&KMb-l_as~o2GM(o;Ia=6LQWj|y-B+k8QQgSCE_iO zyvW5lIKW8qW-3gx-NVU|GFD?J5C)RdIfji>_R5|7?43^u64sugR!;)Z2+4*1l{D4b zTmNcn!L?l%|EB9qC}0dqr2qhvDLm~W=W1O7 z4peD<4ZlTDTl-cX$c<+tF6S&*6o)hU6!Uga@(3Hm>2Vk6UbwK5*Mn5zBY!0k-{xXTBk_?v};C*8-d7@7$guh$;D%dQGKr zh!T#%$^`9fbip7|fH0YWmP)Hk3v=jmPDWZuQ^LjDbVs|QpMnV1Uh6cF)6GIUs!iHc^80Eds)vpKO~tLb|7~SvjIbJrA8m_4tCYqnpCqn_*58d&9zu zhS%mMzQ$c`YOQy@tcKqH2qFJX^=oO2`d9hs?&scyS3Ku2UnuHa3r6f$Ckx}Th`s>H z65g>W1z-aVL}1?{h<8L0e{-n|^Ui?JkBC`X4lq?9Kx&NPMCB0ER2K&>NSOGzW1Gra z;nS+Dr#YaE!_}DYg`Ap17=Yl#%^<030zIer&NsXeEF$<(iiDBEaVTruPJRM#W4pRn z$nwP*6{TuLQ^R3xx7Ct2Ar{?a`z$Tc&*oi># zBXK-`kaZE<)=6o}XZe6(QP>~u=deN^A$QLDb9QsrpxuiQi}~15ce^3Y<}!1f;ksA) zU$Tt4hmlJs)&>5o4>_!K<;ebOL5C>aOHb%p%~@DU6fn9~R7F;6m8qMRapgIS(VIYM z?P;Oy!DJDze@N&(0(_U*eJL{FT)u?{DYRms`k4J84K&#fEN{9rP}8;v1nJRFl}3+3 z$8$x6$|9GshQ8c8D0U5}cN?7{gwVb?unF7iFO)Duz74Q-;x3_C|Ujx_KpL~ zz?5A4(;ALAo~Yc=4$9T3av=IXKBl`{iUyGUJqw67P~Wx;RI0s@>~>tdo8L>a(^}kj z#F}=0+`xH52p69gEdD15ScyBze=w|P9pkl^ItyxWXFZbWQOP5)TS&P-NSr0&)ikOc zM<>pIYl-`PqA1EH9+}UYn!pk`(#RCEP-v#Ij)ivzp|eU!n}?){gFd}3Ka547qmUfh2~wbQV?WJ*t;@yX>x z){DxT#&mH=Wxgw?uAfuw2$p?%{}Hg3u24^BY)r;bOTg5ZY(9nk$l9pJJi|>#?;|JKYBGN$=DIy`_aslId*+x$A{8(c#M|5@k zJyGH5ia;OoebLRBhADaf-yEu;w-&$w6ZhfI%?c;jDhr^6YnG0*I82>_X zo}w{TdpoLD>wF~xJ)Hh<&@?L0#&+5@Wwc@VRz2r*c<%y9MhL);N>;9De+v!x&{Rrt zsw>*{JX{awN-d2PZjj#VCg%p3(qBQvRSvV`hF`gsFF;}63GtVbRki1r6L(M+wiy*! z`Iz)8`ab5X6k+BQ;n?S7aDqjt%AOk&V}9Gyo{ZB)PYp)_=L82F`(qfN<89hrIdKR) zA{Ktv!-0s%m2h|LM&~W^*Jnp&u8ADH8Au~JzG$IKV!GxKu$wHGHN20Y!aG@m+i2aY z>fwxmfl+g4kW^=d433Ix6Of@A?J2%&oy}+#Yh&c3ctl8%%`_RstnklB@n!ZYT}tZr zdUQZA@`R_E1y0(>Nfp3S^08lC?(*{8WhvJ`20lLXcZBSlW(|LQk(#RY!Zrk-;Jg=}u-5kyKh9ap@?2bm>iJ`Z z|L-TxKG>(*y8gK|pqXf$t}3!~k|i1p5_I>KN0d!isAphl{cS5WPpI*QGQT(&tDW=8 zdcanDSz5aab4#P_IPbl7b)eQbnq8VV*5@&eIcOq^jgH-WHV7)#b`eCmiDIAk2%S7%07MoM!81| zBXZqt#HaMtOmp0-d))JIHkCCd@L3BKLIFy)t<6jU`3fn1t4J?})Lz}D;5|09rqBYo z&oxxJr3NlrQw2U?kk77s!1x_Q z)-JeUK>9OG;reMaQ$<2CaeQw`o_?ufEz_F3F&811{OQ9o>GurQU#_)jlll_|M5v;L zA$_2D_9eeKa5d!MPc7}NN~oNZYOc2^E6N%UkkxsacGE8tFo!qHTOX|9GM?hjzc(T(h&nL{*kU7=$EN;p%u|jc#D;EFPE^AZL*YbGz9_J+Q#qQLAaNf!e96!zrM+F1_q{^nFjp^|jA9rEqnhEF^I~*Sn0{?Q7N{>0RZ9Q> zpX2m7W5a1?JU7s*f&~jfq}HDXzRPe)=SuDV?V_wkd-9J?Ok;#ow)9X;4qA)ctMm;X z|70^sbn&D+EFFeHM3|D>1?JKU8!2M=)Y6RxeNdcY;;Ygd*VK1ZS)B_mcKMiAh3Pe zY}8Q9r15bmX04y0_PBz0-hc9gioC`$0jU_U(YZWVi5nv*|U74gg`a zNG4&ws#Lm9KQ1Rvgk{NM%=pt#q$H$v$PFNmp1}Xfwv3Z%%DBD=8H}QCw7_@$=FO6E zb@Z7nmgA(zJ#MW%RJo6$C^sY%Ujjvd6R(Opd<($SVJdBr_zV`m)aE$g;M~iZ6o=WK zCp}mJG3ei~joAX)oM3UegW!k;djU?UxRuLv_Yvv?uc^vS$h0-9Q7?(Asqm!z^#u|l z8adaj#g2NDYke8f+kjiwD+)A|;?L8wN`WfjVC)Wce}kKA zcH3AuW9J>a$@&H*;{7~t=1XH0JMUx?8B;6n`4^zME`2{!(Rb)o%PgnKzUJnI`F5%1 z7x$dpr-ND$tbi(Q<$ESBzHc#0p%fBI>t!6DNjzaNPSvuP+ zff^anhfGQ3CUX_D4MJv$fcJttpDHT6{^-r-`o4TtYqrf4TCKUh^263b`t z676grK}Z2ltIbMapXEz&vFa9J(`bD2uA&!E6?)yM`Wk%8@DMKxO9K(f98-+#&Sg{a zI#F_ff8ybVMbjydq9o`G%OeT{1I<8WjMOeb5Z*-WD;eX&KDE?YD;ve9{_Du zJhZ2%)ZP=>i+G09-SKai1^V^1?f%AL7o(?!qwmtG-cCsQCfn`;>K`{Wlw!x?zPAhQ*3vjaxW*gJez!x{^;bMlcQ4SZRuuKAJ z5U9&vQ{n&#oOngUkB~wGB>aBWi;1|;fT9Iw-MSD~eo5W@&)YbDq1BdSLrApWUD0S- zSb8#76c+vp3~i~p`i1}k8o`aSNp1v2yoI7D3wfnx}O!#>1A*F z8~qJ3+^{xMPFekZzo#GVUUlSJU#Fn*DVA!Lj}^LAS6&kE}*Vn zC4sa90~nin)L99NK+{TIa}4wg}k5V&)r=MjKTzjXmD5YyxTgQx$uDu}JzeI(aydq$5L2 z6u4IinFu)cUr!j}M_VtbX+6v0Vt~Nux!=r~)S5Y??j!AriZu80mDQ%Z)d43;=5n#% zVh~Z1SrK7m>1M9aM5-z!#rj%ck?l)BC`g!zeegY^>a6mDx zzMOF}d=x-0B14vtTvKN#wx49NOtA10rIMzaJ?QE+esmU#AXr{wLs7}i0I%oDTz71% z6s5-oI~O(!;eP;(x>SGTxqLOzz3iuY65VVcZ^N~$mVEH>mGvSTx>Y-~bEFQ$jkH6&aGAb-UA!?84f&0l zeCwkgFNpGaZYh`1(Xt%Ki>Yps;WMA|Utj;%w(LUbsNg7IsJ6(HG$WvTXVR zd>p!Oi>xqg`*vJN?u4y(*<9fHUiby$(a9 zWQAEYEk!F$>UkS>mZegQHw}K*W%=fi`g#_@T8n5y`cu(A#>H`X8tc}2#z%i@MrUe6 zjUBA=+wILjuN>ki6~Jz?D!QtR+q=WjZnTiJy*%n)eZV3(r&B9@56zoC@LVMvH6;>^ zZBd^O3|?eTZ!}OA$E5ysLrI7{SEb3FR~)GRJ|Rb{R@fAdf)KfTPa(QndrZvxOBeI1 z3dIrs1h2~*{|^5#>Q8$p%AFgjGxa)mUe!!q>1dH_@XN+!PdW3bWhd6s3Dz|CuC4@B z(qSg?WFjCF6#PiMxWW~bOse@)%0X4*S zvkc2uKT0~@h^hMzP9nyN**R9MxSqNW#q9*g(v7GbKa?3WZi=>m{odHibB;FI4DK5G zRp~cTNC!|z@K=jyW?z3KK|?|~d+`i)6iPD^ah0)Nc=~Asz+Q}0q8hNplTOn41E_3ne1=6xrs7+&!mAi10 z_NS@QP@DQ*UvS7?Pb~{n$xnCgmN?K=Bb1NHY%SR ziobr7>tzq0l*+OA592_a+69BZ+CZU!Yq$=5#5i=ouDXM^L5ob6sb+~dj%i`#iLvpk zll7XoK=XIMI&B{dmcL!UF3z^sjGOz6%X0d4Nn*}CtzXOo2e8u5xNi;Kkn~}ZMpEfg ztP3f82WITO#LT$t3&D}xV_^Da=T`~zN^nHa<;!xrkhld^`6~K9z7m^SvmV#p|8M|B zLTDsW4ss0~F=EAhqY{RI+1TjegA581X2m@BWhE^2ZCCKiaO1g}F%LAVx#sB+UX$bemTVXb6}RTV_ZWHjBLy|)aBog!u5>wOP*{9+<@q!HY85*6+R)@=(XE>2)xxDk#h1x}KKtXzULq z07TTep)>-OL`TT9xBi--$bjD!&UNb^V0Vz|iQw zqm{`k+sCWlgG##mo%w#d>*uJ)w4&h+)%^|eb9-Vhl8_g8Qxuiso=>$aWUDp+yE`Yp z{Z`@RxMt~~6KH?1M-$3c2nvL2w{6Rak)h$twtQE7*@)gd4m0VK~h&2HO9U@9}0p+qJpcR;5_BGn6P;_(RjA $T z8^6D(+FZd(t32L>C<{dT#qT$Za7N!lUV{l@6SIC)=2o)B>;tk1w{^VI`z`Ui4$|A7 zcDDkg-xFFksDUb#zn-kyBHTDcNH{lFCQ>&C0*(}|o|OxfJ?@aMR-Zy$iQ!Zn_e zme^?4h$ClRP`>c-=Y&$R`l5U$xwOTGzwmch0>G#~aN9@xq=7nW7P86WTl1)Y$gCq# z@RamLbzKu*-*pfLaE-nrhhd61@NlV_SEc?ud8tU{O-Qwr|Ju~W8qd4S11Nb>x4wBB z{*UVdq#g+ZxD@{$G8`x6GVKB8d{Q_Wv&0wy_ty@w;qo$Z%C~>a=Q&=CAMc=@-Rwt?5%V|95{M z4p;u(QIevCOsaFoOglf3D(aup2qC}=J=$rmHMNQ=3)?PzjqQ?kla?auuQ z^X8s*Wn2-630kQ!yosN#V(X|;)|6zvZ(c?ciz}FHQ#&`GP$r~N$^dg3Pf#<=ko2_K zX*oRnF}z9tj121Yr|AK`Na#bHSsUIdt+M5xJQ&rSbRm=e)mp2!ip4`eg)gfL7GpKe zxpyRXVMN0FjnW&R@?|%xEo@cszJv70;KBPl%z^fbck6a@lE`%km0tIM*!%Bzs^33; z96u#0BQ4ofRz*ZsX0o!Aot3QY#IaW>$%<^*dmVcnGeVL*jvOPKgJV0K<2b+TczxfW z-{0Rqzqi|`+s)00=XG6=d4H_y30^m4%+a2&a5ZLE|AhosfnN#MKV_RBL`RJppxJSn zd}p{hz}qW8F76umxE10p0t;$937EI3!6|<+zd$W!wQ4Pk-^o1jMG#=^(z2_pciwF$ zo|j@hG2xRK8@uEox$WHy9Q3xgJ^aqJc&qM{B=IXF(f4+Q6hx)aMnl7=n@@#@fAdKxD^K$(`%^OH zl;4{6lG~5q%GzJVc+KtAuX8nlwKFf*@A5n0*+nIsuN<}C*u{3EI7g&deONR$rJw_Q z4byX>ZmSc~H!y=gXUYZyd;>Rk`I}uupoh^#puLlowUsqr z3ak3_0s#?42$6Scv2UZd_@zr>ub!VpRZTkz5N!|Uo3p`SnBv#I4V z2vY<&8IaGT&}zE#2Mwt(7>i z)c)zoW9>RtPxQxC@zbpU_9W2<{~1G})Qi+nSPz{wlZ{tZzZZvIaGDL??tBO$n7+-R zGB^vEi|EZ6`p@b;5VQF8xgg33>nRN3{hRX>G;+;9aI+6<&?wXDmvalddqY9?%z74f zrKNP)vd&uDN)eiERuW5_8K>8HD*Xd=kJR5;Z>0EgP&bP_yJv%RTz-H-R|8KL|eSn<~b{gLp^GWopsZZxNEEU~#N_bkUU*SBX8tZ7(-9~b@{~zCvNi|ui zFPwm+B?8bgk66a{A+(hOe&_3O=c8(@r&;w+&~_6|M=SN|>pb`5%J{7pwnqjO)WhCD z+J^jFnR=ytSt({bLO+n4vFC=pX$2*0x6*<-NC3=Z(7#zP3)|_Cb^jN8F+I4`DhhX; zhO#Y5c|zl2l9)KS==bv>CJVQdokjK#o9c4su*5X%;BkJJuhH4VzECG{evJm59=8qs z3<40{Od%5<|MVLG^eY_dl zhWZmYpp)%cV#VB;0UB0To#*fW;&!CL=%1KS$2SqIrUuxE=gPXret8qi%nTi=T~bkH zp|lhO%~liPq13MzLG3SojO3#EDV`^9%9qW@krvVhdN&X87c(rQItH6u^cL$JqT1b< zud~P=_cJH%&CA6)@G2eAoe70DA80dMtg-hUT=)>c3OcGa+CSg>21NVE_&{tb%5=+vWG(tLAtm{@LKKMW2)q@fB95@Zm(}WTGR)0F^uPFXO;GeP?H`|c=UDR z$sl-#*me-ZV?F_` z6GDj+dk@C(f;3||Wk%@t601J`qawyZ^ToGgzF>OponEX6O5#7#Wqky#26r{-1mC{V z^~ci_KO*Ve&wVoT4O(si6zSNoP6x_*y`w)JSt;ZdK_6z4|2?#%-HIP$-4<}RpP5Xq zwB(IDFKz%Id81~2kNS=w51nf#vB1h_vdVh2<9u-b3tZ{CddrrxD~p6`6=_aP zV`bLP%9-i>efy8#?W&5aZ*J6{e8ap!kKm6qH4TMOca?rQja>2V7o%NiKD={<-m3{6 z@Z-a#;ZA3S9=n^#8HXq>2Kr=8oQn&PCnixn*_nBPNn~nM^X{e{0V=TZDeIqom^b78 zEMvwSgK6KwJ`n0}ZAOXRB6XPTl*|JGju}eUyE5kLJC7bGC`{+C6!5P;v85dM!Ejhfi(Gr^uzkBshp}23r4P)i zzN;iUSRu-C04u%oSBO>wEBYUy3o!HxI(4O~r>UWAnR&r7BGp$e%+#ol)&5_ zoAyfeBI<154~Q6((AAHdVs!7l^yHra^(52vJt(}>eWs$nC4ecAREDn4P}!+5Q3!E> z?xE7xS1D$F3?9FQKtj@``pdP@)8$u+TTXATTd95=SP#qvMyhMQ#`5j+WIHv$Qb3WZN{yqWm*HutAG7fakqfR{2aGzZG*OD@Lq}u)?)P} z18#2!9~)=t7wAdw?MmFcLEI}xPq0l`mJ}LR^b@(DK0Lh^E`THkf?+dpkIjJa(VY9^ z=XjSrj5H+G$LmkCucJt9*%6IlJa0R(6PZvJ@hL*Cc5)ENrRbX}(tBb#hDHN@_a6w` z|7U;-t#DsV=^x$Bq!YYN1s-+CZ!8leGQbiVfUrBd+nC*;D-?8WICd!5qD2T}E9LWHN|)1D_CxtH@zE%Glj_)b z`?e1bhQPyWOtkpiFH**^OI$hA9c}*kWpC$+)u1YW#Hk?7lZXTC8@ zo72!i)ME8>0kU53!=JW{b8EM@k00SHyqyo+_k=KvUVRVYL1bWP_TOq4?5A1wK!AP4 zDofbxdM7+-gt+^A)Aj0@y)zOGD}`i7ePk2iL)FH}?-6aCJdjr-5Wy+m>X%*lAS;Af z7qa3RS4}E`8`r+#|2KSD^dx+z+@@s6_Lq)k)NMRrpXGbL}wD?pp*_{GDGjrx8=mki1+Qx8rbM?G`@3l1^C#){{1w__%MWl~1OME=A|- ztY2mF?`qG0+Y`G{jR@@tnN5UnAK6klhZr*HYXnZ$$r-TjChU< z5U#0Hh<$%a0aE$adzP@M6wD{*6Vfvie+(3Q9;jygz1F>+8W(}}6y6(TNjY{a{v zU&G{ZWec%t?h9SNU~jrpd@lP7tlnE=A6&IMDpluoa(K)hq(~%!92mE?+^6#-k8IvZ zzZL~X$A-|q%-__iY``=jI{?qll@Mm*3f z&Jhs>6~M}M#5wSO$j@VNi@0Rt&}u;cG-GJxTd6KF1PVzLBukBCJ|8Ajk#N8|($ZN} zCf$)%(<8={!7Co-60O^LWU}*F+rAIUn=XFW0 z&xc%e>P}Ql2l}HmZ4H`-+5-`$&zsZ(*fYUB4x*bCE73YH68}B_u$wAgjztbs0041a zii{|}Li{not<5{vKyG)jjP3 z@xf7NIYBiogc;YHqX_r*=#+dr0#RQ%wp!02K2#>+Zb3IcxR`|cvDy7FuW;2}ipG%boCGo(WEA{@2>^(?I|bEMT@;xc8X4vLPpQ%R+%WLJhtE-J+GP%?ad5-8IoY;~{SW7o2JZCdZweYcWR zD!Y9D5TRM$`-?}!r;NH1qghRiRAd%x+8n(OuB6ylaIXLzJwjnjMHLg9qG+)Lx5e3M zf0e0jb^-DrGK*v|#LUXl#JphQa}mt9)45G?ur`HCgU9Y}8d8aK5)UlouwZ)1y73qF z@Tcry3E_sceWFwvu`J%x+Tncon)1)ll1KJtK7U(fJE_3h1HTe9lO6?7Fj2!D@i=zzjZPjcG;5l9#q2WE2{RP z3hj@r9YNHQT*Qxzb4iW_Q%3&HSI_ zz+JFg%^P4ApAF1WCBir^0~!6}za;(XdmR`~9&;dC)Av`h^yxFvd^d%;m+lHn0(0+82`)eU=1C4b3O+MP_zY#Uk_yE%xU#fHI8mq@doP6&I zoY`OC)2s*AhC#(+N;g6S*$BZm%50_Iaoh-sjMQnRcVo$t1IATpZ?aJK(ems703+Q6 z=qj(@7Jod=vgX{en+=|;g0C-$QL}uCRHPnOmF|7$82bN|FT(W{nC(_YiB9rf!|tn^ zA3fBna?W+K=4c#<*k6yF7<`J#^vst9hz{EDqQyLAZiVg3#UKD%&ZUD%^acv^bpIQD z+Ak};qUgga`#1oCVw3GpLKIOEm;0eN4f*?qe=(6LHnC}9Op=$lW)2>G_dMpuOygG= z?f}g7)#3?i0Spq=tH#Gf0tfm4WZ+sFx2(cJ#br!n{fFLcK&3-Uh3C#dXsTSyyFZla=2$(XtY@2B>9p%cX`HxOk-kr7IGR15j`TOB)|`$B#Od?Ls&mJvZ+5? z`OyKq$JDAb+4)li)*vFKVg>+IKbK&{>>>>|3xL_R*b@muOoigi@guMA@7^Eb%A8tn z0e7YJ_B;B^m*6x-3wD5VIDjMNHj##20wt%L&_+pd#+7EN%ViPtUji`y;)VN9p1F#j zvJ-tNXd`f#s0ZCx_Y6d7*R9mUiapqfDw3OqW>Yi=@aV^~Yu6M8T)yyA=R%`Af`x8x zwd$9R=FOcWdX1LwPJ%Zxanc99qq{Lfk8$}N-j#7KH#X*@%aG?k=OScO>oLn8kKN4e zN#4I!9X%MyNPtSdBHykJ?n+A zE)5Oon+T!TxKomMyZ9SAVRp2&>jgOdYvzST%B!Ao3U3AjUjE+iMt4lC%)BU-1mW=g ziPnY-z0!DyVz?xA5bPx3&dP!3R3ZW8GI5H08S60pC-5Z)@=fK}O?=;=>$b|& z60w7+_mHo$_I?Rq@te;m>yK>v81+M~C_RemB|gMN0eQJErAO7$N+8M$^O#>vw~6q% zkaT{QCl49)^4oO$ARH7cnHE2o>or4ouY&tki*(UIlPY*124;Xg?q($oAdNa;nO z&C?Hm?yU~`2P{hw^HZnGF4NuGV&%Se&j#28t^<*OPfWx&uA~M!cBhAbLwkv$q;|+C z-A-G`IY1f#4XTKWRN$07I%`Dj z_v!gD2ikfIeN~Z&DXvziVcd$YS;t1YYeeXCqP$p^ra#dUdYhqV(?eE*-|^-lEJ_9` zoaHzQ(NhSirzXAQ{1{||7ipf97j2OW1|{ZL#&7Ptv4kk7CD$u@FdYV_sBXHnUg@R; zIh(Wt|MQnt8EB)Q1C*z1C~Zv!U;BKOTW5>AlQ^+<*uA9*cV@04CrWtoB_J3T38vZH zugiCfHFoyw2G)2z^rsdcQMS&h8{^QkF9V&n;OF8hZ0Vn0_eytj8&&g0;0xD{h*QN+ z?>j7iqh@Obk-9{60u0Z6xY2%*HudA{08Im;K;`8CktNPM4L0rF0W^RcC1Q3*;E{IV zMx(agG8qtc4%hgD%zxs}qU^SI7w?-1RJqjKAr7x|+YYS{hoDk-hZZfU1D=Nw!8Y~O z7cejZ3>I$GY5Vk}wZQAAfCZz$0BjR2>w<}gieB5lw!_k+`A`0!Nn;SSp)?1#`I z9F&!x++Q7k3*^>BoL!0Bj=dQZoR+QLu~Rq2=z@5C8<=pMG!OnC^UtCi|9<;a}!5bPn%w;o{H_qs0V-5^%GP3l_MRm_b`X(Xa7KTf< zAe#kR3l?kbL#O72-z~2IpWYfcyTJdSGmfP@YlnBGhEuZS*%8Vd8#%4qFDS(it&djF zz56Q-r4hRjFs!!Dzw(g_Oqe*q56if+5s9lcl#qXAozmT&5_g?}MXcWKuD%aaE#W9P zMRnd?WUZp-c}WLm&*QhAZ=I^eHr`c(jQS>y8bpwC8zTU+?BIjyGVNWIrn_r*fQ|Zikaoc7sob>Tk&_% z=GQ~pfo+N-_R^jRZw}UKNRRod`_FTzwyb@bD0N}KOzI#`?9ClSm3Qcjbi|S)-GACd zwFXf0JxRH5PNY6(l~~m~RL8*TWZm*pdMjyyD9EbhHkbmUQNnjkok=OjLC8&E;x9F~ z{zJ-~kOwb)gScXEP2@m=8Fbj=G)+cK_@~3e$W0#B7r#xn`^7MGz+eST@JOltmwwHOvagv>41>wF?(qil z7`{PoLC5|@JdTR`>xK(-Z+$A0;s)=Y13xRR(g9Lf2n0PsdAJh&Ww4OE~{qyvR9^!#VvZ zU*7^DzJ>_;1c#w_;{i;$`vqo@FZ*aW@}lO{<_lxo)`>5Tm8#Fv$FD&_vJ*g}PMSv( zk5;%&m^iB1fW0ER+75;EYknnQtS@Uiy8HERgq~dLiOANl&VdBu3O*RLrNO)9Ey#dz za){fS_~e9!vw(!*2axoQV)-0hC;b_COo5H2IB(4Bjt%-x%xCGBtZ4qzCHL1g;&0Gv z04pxyMJhJ3-37OX>p&hay#APFk*01~DA1RK@oee|xyzwhmyW@*gUYYO>JDh40PD3;>;5iijApwEnA$jjjFsSL_H>epLLHpde<+y4>nFt!4t7D7akj zC|yLJiY^#P{x-M{<|DHh2nbeFTZH>lLcuz_chsq?p$R{7rxelqdqW_r>9Puu+)tn$Vr9dwp3 z3vP|dBX&S$%8xK-SAs=-D?o}}GLOalHmrn_-OIp|hteFG7vSom|D9mT@*^;%H!bz^64y6Q~(>0Vq*o=aX{l&yOgL zDb}5d!F5OZsOWsTX+qUHZwJVVLYY&3*#k0k=^u=7fpllv5Ut5I7gLZ*U2ffF1s?a3 z5RWYpgvSb2j(y4IYdVi7xP`*-`O{nbu7P<8Dr6q6lW6?9MRq2a)A+FmCtg&?X8J zW&ZBVZ=jJ%Vdmh{D^|C97#?7FQL8oxgcBZdxGEA!#T_e30a%8|!ofdlaGaUcHs$G%4!a3sJOy8bv)KR-O_k&%#QojbGJ z-A}Ww3Ft|3kO&T!cOrp~1SQ=~_pQ(o z7H@U;w$}?M21h5@-fS{T(5N7aHmx&133CGR7t=%wu*2R`Rx6))Wfej0xe84UIvVKr zjO2R2)m^{!#dUc)hLyJdt+tx7Kyhu{F!`RqCt%vjeD@bogObz0U562%m(X>y@i4zI z5jX#>2)PG>mVjQ)jPA=^>tZIi|8>V;X4*h;NoHSFi=MU#PhUw+eh}f*MV+|UE@zCh zeW*4e>R$^O%W(r>x}kW#ZO%znPu0i5Hun6q}E*yn27sKsY{k%|S_Q#eV z(0d^kb@yIQ3orCsOxjeo`S9^-p;96kivn#IMM&=`Gfg?-fx2w{M=O9U7Vb}v(15kP zkbDiv@LYkxNx*;uZL2S#rvK}_XT_~0g+D!m!4_j3!uMnN(PpLouXmM z3B33I()F_;no;%*WHn2#v?n#-kTx_O)Lb9QhXX;mCqpbf|jY{El{a|q&!w}NeAW19~&#_Py0@X>mxT|_qtQ8Qv+HS`V|R# zd_kbYD6H?(7Hd5X2zfY+X#cH?!#e&I!>DO(j1GHn`bS-1mzlYf!3!vI zHm!tJn{JCWLav|g`5<_Aua*9bVkFx8zKM41q4yXKje#`lSCwG0x6vj{?nz{({wWfC z_^%akuPy24%^23$kfN(rE$Oibr6+P~Pt6ddHyQoBQ=g3mLHXup!+VaQ5 z`!+vD{LBXRl-nCf;Ip>@w`}@HF$d_`Zo4h5escItx!{#fc8xEcDFf0eJt&lznQZ6e zEUqW`I?a-@ZW#s3%R60U=j1IrC%490YT;Q%!qG1TG)pa@C{bwCx*pf~N4ik$qv(Qy z5>GW9wfgp7S0JCWav!%2nX^Ueg_sx?`y6Y$s(I%($U)j3);(rEknXUL;|cs+U?Y|8 z_kk1ZF;9|wynK^+FRD9`m-LccNygKPz`)UV9fwIWWA)YCyyBepNYw7`!TC5j%O&^_ zr;Wn5BS!U)6@`R6g~Ev%2SntnLcFE#UpZS_a4Rh$B~ojzX4I9b5$zNDb8?7(eD>c| z%}Q}nW!0Qu`lMIsK^&mg7tg()wXY!zy&CM*Z@cz0dM}OIe4CwG#aQ_t!K|A0jaZ7$ z2`Bs`g9zx$}SHiO*@eS!mfr>vSHhKhlBIE>i<4_&HDyZUCr>mDGB3DD{>#+qqZ9TS+Ge8V`8 zVUe8t$D&?D3Et$mGPekJPcN&D~E7C0^$ATHo`Y&Q>U3Wi#Uux6Rhg-Wm^gMT>FO22IqeImSZ#wo zPrk@H$e^XZ5~~6MoNR(m!>oNxwH)E<;KMO! z%i|3TAIdV^BBIH|e)CzV2@mgr=Q=^a#P(cg@@z_C-RZh*%dKMkD;`ch7CkeiLRB7^ zzJ$r+@8WrZ^VdCh&U@~RA{IJ13TJ6={tD});p2rJo1lbDnx2vhnHD?fy%@V`>{S=dHa%z0|@VeI-d4^Ep7 zeaAgb?T{rHDTmZ`ZSNWQZ1J9uK@!zu8DZum+0G!}mjRSTHMV96by!E%tFMB|+7zzQ zWtb%FXF4XMx6n`5N%3Wo=I2u9{4Tj|;79!?D_$?7iuU^XkDbu-VS&(d@_lwq z?dNH3(&V>CC3~WG=C5~-vxpqPwclPt-u|gi8|)!u_S|K%@H}KUliyH@jSv$We9Py+ za?ldeeS@sbJ~s2 z*LSbMX|}cQw8Mw4@3i0bOw-%Cd6SQ&%rinsl1ead*^Zxn;Fm{5vT)&S{^|PtTYO)` z4ZKSTN$0g(HsGdv^MIpv1A0|jGCiD@sB#^rxZ16@=T{)VvfE=`I(Tot_Qf7a2l0}= z6_DbGKnCRsAD$L*eB}P~Rzf3}`M0+I@GH{X+y}N}%DK#9g&Eb_A9G8!wI`K#hF{j8 z$_vR2YhD5|${BqV;3sfjIw|%5UxQ?QHCuM<^$gg-WN9voZ%W54e62;wEv6&9Yx$F- zJ_DTJD*ayeplo}dS9sXsBRw=LP_SlA@p+4B1nRWG?ZR_g<0$<;#C&Jx1$M}@?2Kx` z)$0(h6VscJfLq;&WR9>Jg|HxA_Lt!+_jUDi0%Kmr)$(aI)yt7`6i(BVD=TYPDtXh~ z1W7e4p((Fkj$>2&p6*p(P9Ck+k=%}oA4ttEjGCf#r4P9Aj0AX9h4Pj%IeA-(&Rt6t z0r5nBfvysfS8q0X@5{@7p}Cpo_A<0n=f%saM>amwZ*prk-+)bX(VAO?v*$)~o3ju6 zniy?(nZJ)}Li-cGW1H*Hn3zRRA%8)k?s52@4ckhouWz4s3C>Rh>q}2RP~r}QIFslc*gQHJJ{e7bu_gYU>3C)Msk3;1Kb0O+P@qz4?S|Mvu zyFxO0=S#}0#Lcw0WS^6gub-zF`1!K6?8cu_Y)deDng;cUA z3afE4zE`xuW3+!t9`gG>((-mJ&b#<{T*G#}(FumUe*N=pBJCiM`$EXeNHK8@Lw~$O z0b6t5qX15Grt8H2fjkczJo^mEkq5m%#DBwg1^@fP<{HD<7Xj60+k`-#0@XeH$?b># zJs0xzR_3|0pZwp){9oGqU%B~zqYU#hv_NwL;%z3W(u5t5)xy#|(OA>vmAu=KHp1(i z|F5Z4XAm#Z5d7d*m~?w=6DE*dIsUR+IL10BZfSV;{aOeIxF=XeMVHjrrnk%Y{MDO8 z10tMd&S-;!DTq7X*&NhC{T(WB2pxrK+Zx`DyQRFOGhC!>qa%+(lyKA-)m)?q~@fhzC_d-hmICKfABEo6^(L5Vs+ljS6UpUu&=s$ zN-hZozODLLzY0OS=>5(pU1?qlEVI0Z^9MnD>TDACuVnV-+T%qndW=fLnso-v!qdyS zQaSI^A;IT}{Df}Qe-yN^&c1_>s6{r-A?kS5@h=-k)7{Z#C?CXI%a8lZ2wkl_6+U0H zgXwl7ZDvP)jmiAFp@G`yL$pJ+p+;drhO+}QKF4p&WVU7c4_Vox zfrDzAHK;8&-b_0C2F9U)_bw?Fo-lnm&BQP#eNd51fhDhHtUI z|J$0k^637Qhuv2m!8a%J@XU<+T&Ar3_LH7|bx}i5#e9X{#or|PjLb6w_}Q?o)ft&r z0yCSe(~@Po2Yu)3_Js3s7a(dfz_-vRimAX4o)qs9xhi2uT-fMi_^qZ~5j^ca2C^46x z>Q{K5hght3_2{PeIoqw%ua$LsK5$%ovFX!@O;9k5ZKz3Y)`nZW@gNDx#7E4uPL5bA zF7rJqD27%DdVL*IM0hd?{R%#`&Zr2F{n4dBpqiT9S)og!E7W z#!5zSuQfcHY|DOsm?I5_kJGf#9Hd$5Zj(|VJQ*0V+6;tUIGB?pyEMO~i#gty&VU#}$9CTq*rJUuR(-QzS~ zdfV@aU%%?=xr`r8tk$SVZq`5t#{_wnmDsK*M|=`}7qX3~v=}kNhqFlb=GR^;P!8ksi-ir`e%ce4?Jj~vyyg2^ zcqxKrFK3Th1dDl+CVZa?o{WXQeJCk4xjKJG;o~*KJB5Zx`>RO`v{&4yyV~u`N^`x{ zg&%w-HNK4M092+SQkg@^l)*W@Z1(}6vU@x)J%bOmRhzH^*XFveqUAF&JS$pD=>5`E zM>yyAx7s(O`!{C{RR&D{6{akBU2mwB)m!Tflcbv9JWAKo>v~R0#Sh0&E0iV=xqg%~ z&I#$iqyY)tuh)QN1q195bK$R4;3lp;n#(wE%qo z^QxrgjMd|{V+u)!I?utl5~rt5K(mu;X{-{d)|~eLc+Ro@9imIAjpK~4XW7bqvLJQt zGXs%bm5urO&8KmO@2>9Uw6biG9?G43VTs0uv{9jc8|* zYKDK|O85HDA?-PhZ?*}3Y_5w}|2weR#Lb=ac?GvmFV-%#}Gv%TkUEROlgnMN~>ai4pgo$kblPsc1r;x63&a#x`71|-Y!@a5XD z(s;v&*SL&=hQEanR5zXi`8lS2^wLGdofBHAH$vVvZg#)r>IBx(v?{A8WIW^c$0XL) zk9B)>Rk(lW2J_Y2kDrWvZdjdAyZL6crun@vX%@z6Se8wKs<}t6eW33NYQ*x!TJ&Sd znw}2wt=`_;CA%CQnwL6vYrZM2zbPz&}bp^|U`* zHN2md{0Tw%kq(vq8)I?9>!t>3NxZ(;pt11d;o-40({=hn!;6LP*4ad>H#<{ciWx;z z*=+YKuw98k`|wLhj~v{$od5pc9t=CfR<)UyH`S)wF zzfE;_{9noCl*c*Vrd3|c=E&7lVIS_kS3G^M><{K?hbQt&gdMnNW#5DVV%+a zaf8Mh;g>gLgM@SnTZ=WX|NoCz{qCdd4>n!*^o{ZRtWSQet`+L0pL|_vx4lXG++VWa z#SbflI@dVF)giMw{r7E~u$q&IxgScZf%kPoW>K)vDLzajZOsea#d5ctHQtHA(qdU{s?_;KEbz)Ym+5EB*Vs*VI z_0Agbb#@JJ)6L>6vAu<*-x*{B`w|wek$`7?-u6tr9Dq=MIcv8$=}+BPw|X zmsB}JWz~L|amr~XKU%4db!)9n8XMtv7kSe>^3h~bl_ApGq{eF}?49JMi$Szcd#|pZ zq@zyiA3w>Ls8eZ7;TUTOBeVGJy(=Dw!{LSydSkqtW0|j+5q8h1@&;W=(N|udQPhz8 zd#x&`+>5i-UMD2Q#gPJHp0Ago?pwE0T?&Q{G(y&`n{<(HvQr{$CUMoeUYp#-jrq^{ z{DzJ+S>6HvHON#BT<78sQbP5s`u5VzL*v}NE4`<36VqNw)=aBzQ%SwuU{aN ze~*rSosFn_rI~iTqj2TD={g$%b|gPiyP0wlIyQqi!Y(-gEz4v}=9}Vz^bxVy;*a66 z;V1Ne@Y1*!*)7wRdK#KCwikkWtAm62QvJ%xc8fN~zB$p14f8K(Y2@v#nQj?UHBQ^= zeA1#IUns00d!OqjD4Un3TE+0bs%(qaI-I>LMU zkNog85uBLgGuuq1MOuI(T%H0*mSrs~>( zH)m>T`3ftFZFKz!3X&1G5-IP^&zGv4^#7iY`1p9p6&&77k+`;?Ro2+|Tt^4@)#TLt z*2ewVeu-b3qO87r(?}3$sg3Er;eHXjXQo_TF(@y$XDJ5VO2f;qJFmiZQ@D1><*UGJUeQ2#| zPZ|)HNW=Q{)_ZBm@mF1r5UouQgdX0xHW$~(>eY*4E&Ir}?{RpexPsm>-*XYBV9b2W zzhvNZkN~4)xkubSQXJo=Kxe-ilvG%%@!0t%@0>C6b}GS}qek~)dj#+q4?w!%_JB!> zBXpqHk@Y6Un?f6M=WhRIJ|_EW2im$?y^~%P^3oPT(z;NP(}H!7uxkpiG}MU|lOw&6 z-kkqWo^&`=dSJt2Man|R-!q>4cTDJ(fu!UZex_Sut(wPV#mEaP#yoWIA5g&SKmjkc z>1gQp87+>x?kqCwxhQ0cs|=gO@%x*4S0m~;ZF5TFZ)9IX@KC! zy1;bTVRhS2!9isTso^z%l4cFrTUk5_DUFA@Ir)#G|2FnFR06YPdn>Q`b{!Eea4r&X zBmv8XP09?;Wm_kiJ0~3xwOf-%2->b(aVEukJjSWXFRxh=@KdN4lE8du{)TVbgHq4^TwH? z<2|XEkrw0k(?Gm2WtoJCR>7!NVEKa>qGs5cM*Gz|Sjnzn))!{n zhP`!r1@!rDr?dEW+tw`fU*Y&TjBaihkvHpqxpq8|MR2caAll;xL~)qNmwqlHxqc{9 z=~fyT;gGosm(O;}y@oL;z32XbTQDA``xYTEF<3d4L}fUWUx#ZjPut(49G9>6Ru+U+ z#4?QWuSsIOFnza;dg3n5Rw^raaF50Z0U{;@P((IkQU$jFrUBsX6-`4;p9SV)K3n~AXXET|&jYNn7uSlu`gvsX8UMx*awX9xUdcs)T zkgpdua$)wd(xl(swyI_#x*kWq8wRNUn@Dvzpu5oYGNH)gMpJ>&)if;$8ZrA;%sAy* zByINJA@!97)<9TWUw75imW;2sjlHT;=BS-k-JY+o_`zdF`Sd;Iv}GOlx&CQ4jg>)zK|=&C5Jjm)tyquDR`37K$A##%` zEdaB2*E5p3UpjPEDE{Th2c!JCdZQJiBw-OaCW8Y6YyXiU)4$2;;CJxG^?oi>`c2_+EFD=ue35>yGe_adA)jBAR5S z;9^O9$?v~&BzrbwsXrba%`0NOXBr$v@)+wskv*nWQkpGw(6GY5V~lwS``?x!X!-M=vVFc#)Im3fCeK0y)JtfSjlwlO<8m?3Ldw^#D{ zNGLvshW-L;D$=U#ieB+rxWf7WQT2j^?@jYm}clzX&;Q z3Ol^9uFVoeSNT6AzhfAyggbOLt??Zw%^A6J z$!`o}^h)!ZE9u|4nIwl3{KL;mT|3>G4U`RT&HZMHX`pT(brlGp939)VbD$809im`F46=7|-Ge-(_(9kOR8p62TeU`7 z%&_tDem(X2j<6R)F#ZnKw2V5s_L#&2i4?&bHXNHKKa3zN8M(1>w~8(5Oh z0U%=UjrwE4=TF=%wS8Kl%+xpKlpk8#YRc1-LN$*KhuUR>+#(STS@b0-=O9nbiF^G; z^D}3M%geyjV{@1-c}tKKk>71L&%huEz4ja-&xRBX0x!1$6a81*)c((IVM}sRoFCr-8_!*_lc^oGPqp!6Xg>k)tGP{2&Np z)Q=2Ky(}7??nj8;o0n`8!$PUyfqyn8dz&4!WCM7sOy8oB9)zP1UmK%}7^Qm_|%{K!&g{id^gQ{CMtsY>E* zmHcvi2!RCC5Lf=w*G=azS-ZA5uB{w$+JgW|q|~~Cr|^Z~WqviY#=f|NhY$8_5NVDg znPT_*UQJaCn+~|MTFr{gvxymXtJ1r)lM?l&x-?bSf zX?egbF4%Yw({B%868W3qE5<>vcC|Wz!f&!~*_9qIi!?tLcW^}YG=!zHF)_Gq-Hxky zZ-@J94{nEsR5KAzcpd12$jM}B$0=|oX?j}BNo6Z4BI@8Z*G2-PAU)ULC!6grmw%5) zD)hjLAikvx7Hjp;S$tM~I$Twd&*lHe+*e0cm9}rAC>9|I(jg(z-6$>ji>`^;j`ozf+lBHY%p2{{iJ2Db~dJwx5g9K{Zn>{O<-2ZUO37MC2o zruVPjCN1<)$(cSI7~0o;z%#b8v#3{c5{(@&2zs85&Gr(if4jk;dq?r1IRVCtTXaBx z!2o%8iP4Gqtw4o^K>_dj89jHgqY8n2e340m&1bkRl8XNgsP)i$odw2N}d|7UEcwfWWLYNMWg4wQs{Xh3n z9f_D*9eaJOc{35YBVe)ll}}l_?a}b2t!!6ZvenerpANkfugj&^ghOaFsz2ugciX~b(U^!g zF)r6|p`Y!BWQ_Gkm3QwmEqlZWi}hw}M1^>RHwxdZoEtAxv^H%B$R5tmK(s$u z*~-WaiH&XU1wq#$4YA$c_yWX8jwNOI7cWG=TV+t?!5+tlX9bT-bVhC|tKDK!=v(nl zR~{*-*qoa%)acdW8BK{bhh(51>MP62hb3KK#cz}~@*UemA7}$~GjmtNjKU!Tz_VuB z-7Y+gPm5s_q;{r@{o5VE8Oa?jONT%~+&Gy(&d&$+td88XaHqffvviG`i^@yH4$~tz zrIu{zM$%F*oopI&;)Mys$sQ-X^vE$`J0n+9jXzqn6ZM^vr){wki7m?2a>qEH<~Diy+KhgwM}&`(1~pIPRwla>YkL1`%aWjgl3~d02!wHh z%<%yxhDx183C4T$^ zkB+++Y9ohIFAYtSrn1h6*kMT8Le)sf9x86mWd%pBfrv%hl6ev(*Nz464xSIm*<-U> zthe6D`6c??C5aK`^r*hw5!mg~zLCpaBN+scm!aLJtS&%)E3Ql%abY?JkKpeDHhcMNw`ji*bVtbgb6-qocRG$d`yve5N*m*{wj}v?h(-FFt|l`_?)A#9 zi?%DZ8fna-cGAU;?Mc?-DewaZ!hjLm#ATp5#`a)V$7Te^=hW^j?}BRMZXy@*rgtX zWn@sL5pmt&?w`?n{%}P|tRyWanG^MTY31itFMEbm#(pCTV_q|BQ~YuumQ}_+-x`xL0Y<{g zh6u(2=Agn`!C>Y9Xr{@8MZo^f{dRjC#~I4ByW>r(J*!u!a)whss7zQ63B?*EdOGk5 zJKi;!H%%Bw)~OKI-JiLT_MF%>p~t{q*8ALuJ=d_yV(+a$_c1lSjzT|bgSA>$t#a-y zhsL^iw*c|-e$*Shbny>#Y!BJl9y}>9FCcs;o8+D9tt?W&wUAfRo8pIPtJ)wgJtJug zO;ok|zd$fB*0y0S>!e`cQN!NMv=Jzk#VP5Td!agAN2T%!cwA28lqzxFEQ#+tvdQxG z4J(?cD3h-3@CjS%$!a^KH!s}JR?`mAic#DG^Oi%8*^_+@4f(1Q3B4@;wO;mG@ACrp z`{nlQGT~K&>R&4A{WN4iW$X)0U53kFQS(UQw@6D@rk0(XEXr7Mq1%m{4tv@qmsaXg z74=2hY(C^@p)l*@fyX}H&UK8axAT`U-W%xqkZwV(Kh3Gy?Q_gen}yU;Fca=*bKOdo zqfZK6EsTmv_@4Bc=Hz8{d0e92#7bH@bJbi1pIHuKY4wCGXywyxS4 zCGoSKn#o!*C!8_Ou2BVosLL1_I5z;6U=_~K>axb<{t$MxS9Bqf1MpurZP=5CrPI4s zOUc>Es{3t}m4@t>OM_b3blHv;I4TV1Pa5}@LwI#6+Y;MPVZ>&CGW`1EAAOP zNBHZLz5&gRSDExb3g$H$Ci)JA`?EX@wnjuUn4?T+2n@l06eM$_m@zQ6&^KQ4<3WOw z#n`ZWp5*>C&m_rpw-#Fsy<^n)@nNl+-`UsI>2=+c0{f&DaUWf)9th7UySFE66+5q8 zNxLDi7gZ&SlFOYw7D#_Rq4fA_NV8XNsq_U5ngfV$UI`o;0h*4oWbM!) z6b0_bD6p|QwM+9q7YU`QAU_TsUc)$ZF@t-nB=$@r#}AqVk|! zVka{pg4=~yDS8O$=TrE)kwv?ui$AO+x;8Tq2Uj%ijxL$4efgM{I`Qg9H$M1(TSDX| z8T=`2iUE>)4Q7+aPR2}O8DZ=${w`-QoVeWX&XP z^?GTM#42Y3Wl`fJvB)oSGWs{QC`E2WEAtt#%LVurudkufN$-We&jfSY7uN3I7p-~W z1_g+*V2y*jiQ{22NQd;yT}{CgwsSAS0ztj!wwk>SKiIT4Gc!wO@UmmKyHmise_OAA z&DIs@U#}k6FE;n)#XZ0&?jMktC|sBBysPyncA@e3P*`u(^%{cDvT~QJ;JD`V1@l`D z=`y?B39E@K2W%Z$>WrS57w1RUKK0dI`>={jc}fhw8y{qLGu$o4t3DYaOe>NemvuFJ zz4>ln%%xw%;zrE1pfSP)?d*rbi|%QdSvyIrDq&-1?%_ z^UK@i%>yPLMNw3*D5;s#lB%i<3l4}X;iJUul9-DJBP<#c)QdjH6L1V;S+pNX3bT}c!CfMJ<9-T1*^ZaQn63P;J`{PHMx55ehxzD_~$s=FyqIJ-_zj;4x z;zW;E{2V4m4bVek(Xv%ZOJYoYaYpMvCXB2+ugiTz7W3d)NtI#Cl~0+5)151W}K=(@<=IX@(Fj3=MyP$?TQ>NIJa<|JXTI(YF>8f~fvUc#|h zVvLK7jy<=j8f`(w-j9RsX5dGvE7iNAk=Xxi&pv*0`Bm>~ZDsK-jAylFnoh%|w)XFu zWPq>9l$9f#%6$Z&Uk3ejdla+9M4$0udv||K(j!W>n9%+^swT+$su5&otG-BSt21S! zzc=K_iOP}OH+;Fd<(j7KanCPKI&L!w>LL8PLFt#LyOqWgGx+%y`eYY|z&~A|-R4Ud zhriro_Lcvkp8DOuPTf?lVbnllf+NU~J*-lX-i^NjC~hAoZrGUEC2iIZXgqh-Js_gG zcSceia&^9cUC=#eo7geeyZo_JtLgO@ugyt?`P#^bfHl?xdS6Am&;Eb4duF7+#wy$5 z7B;>R+$Mb%a-F?!22gfP9RA^X(2;&ao>Mma2bp)V2Ac~AlU7*T{6?-50{Uwh_XYsZ zS@dxk&d{_Bj0>K>1SY$RCA~dcwE@GSGgH{;zm)$_mmdj|098di%g*`Ura1ZbZ3SUF zj|9A|EyVB{IG2Vp`tQ-u)t&D~-G;9|`eCvg3%}XGa&D#^ypJQ4*D|7uJlsY2F-TYR z-~0-7_wmZ^9-_OX1<9)*VB;*D13Xg&m{R`)aNo3A=V-@f}=K$Cd1>8x?IR@{6(gXfn zEr03epX|Se=;H_&CcL1l_!V3oq`^t_>iqUJ7;s-HJ#_@Hn~kt{>nHeAQCs9&gnvxa zN)uf*BQy6mN}O1+;LWe<0;Mg$qv;DbK0+OR=9%`JN!K4?0UmGk%kZ43N~iYsP}0p#h(Of;s{;}$07gyZp6?6WwW(jbJhUC@d|8|qCL ze8d6g*PZ0*Pl&?-QrS$IAPFtFTpAUSU0Sll>o!ZIF>;OGjR+w|e(jClCFs6`jklsgopNO;)}o_d^3`jl!t7Mp)6*9z1h zmz9Q!HDhar(r0AY&q~}ME$lA4uR$!wjGbNs-!+Xz%+sf7CJ%w%r9c;=Ve62o-Qg{r zB1R4}{bbZf$R6|@mic!Lw{M@oD6Xt__H%Xk2e)P)_75Pkl!{89ed>eI!8z#I7k2wQ z@9S}PfT7~HW;e}*44!(!(G}s7+gJDxXWT0mblu@hE2k6{Tlp;%zhfBPYcY z59uP?zRx-Pie#)gyX;$Bl_gr-K0=}4cRM@`?bZ@BBv>z%qD|?Nw)s8Ry9Xy@u{Lo_ zgRr!k#Ag|n&o6g$rzi6wqJX+DW&Zj3G8=rjImxZ^{(X6eil=rx&(iurZ)>7c$QXCH zD2ScH9I-B$5J8OK!`bh2JRUMgna2sQZ*SoqEW4lG>rD5|E+DZmv!ThyNkVo&+=OpU zm!*Y009rrBh4WnVi7(+m&^6U00LMo$rlmDs-*xzq_M?1Vuii|Ey;NRTbWxWfO^x1L zSU(aN8=rm3+Nrwo>;6Nqm-Klpi&f&-!6tq*m7P{!)*F8kqVdc*JKX{!2c@*U5IJZO zMEO2LfA&>Dcj8WZrt7HbllpKx=<1!(76qw@0*0cDtpYYX!J; zn?mRhokKIVv&%^>?|6X}fV{LdZ7G|}LD~_kW*;Tq(lE4cFSHc89)@^BX_kHzoY=l6 zoaGnSFXOTQu1`!YouHi@yloBqsYy?~2h5trn=}cZUIA1Yhpf!$_n+sa6=Ld`Ys>O> z_-xm@(O%SD2WM{H+57Oc-gQ2=A^p+et1VpU@Q)>&aN$o?U42#D3mVr!6l80&C6Kp# zIa+MHr9OMG`4Xr6f#B^5{eJ(@*6fd_#_7PqQHluaYmIIvJY9n}kR!Kh#gyuQR`rVKBcrJApAW>K zu;mLRv7>VFjajjw85AzvrqcJ&bGk3+hd>teunPXlWFCgPSD7i|amO^e z+)V=_6X$f%Rg)%0`hYBe(y*7O_gylB?2mpFhkJLGWe*S0mx@CvBC=j>SD!+j*pfTk zKIe4hrDIQ87e3uhH{`%MO@$ZqTjL63F8N(AMZ9ub%BWZl6cp^A9q@p!RTLy%TVN@M za=BnzLskb%SKh5TE%D^TX)ZhIwV-POjqI|HEHN&>u*pZ2(JR0UN;*%cb+VL;?<|JW zUbwaZ)Wanh5xed}%#AcNhJs6_vHPvMH+6SH`o1}2nBOvtgPw!r2Juef#IinO9to$^ z293=#tPwSw%Y9v%PuNrA&}8VhvPTLv$Q-yTqLF}?zE`#azK7x`@}9}87yAMOfMuSK_ohp1C+4%Xo;tz$fmI`p&VL=apG>v@NVe>gxtvV5cE7BKX ze9x?ja=}pad3tEzmC~@+<@{r&t@LRoww|Zm>C=;eN8QCwV(k}+z(ZIM*t~Ze`jVcC zHX(v*sFM|X3iW0Z%HtV9`{%)S5>#$>>S*Z4!L)SgAD_hK8q0uF) zeo%8}B(DXI>iKBal>A?W%Y+mTal-6(hv>Bs}BoD-hOs8C>CZqGC=So!&E2c~@{u*~;#GpqDTA3+NLHy6g$UTCXFV z-K7=SY96ejPtjs;te3FpLvFWv6|4lE*_wn09!qwgm|w9oYDQUrN71!BT<`bcgF)N( zk7g!~8*y3zk;Yp`Qy*EN?0#{$Frr)P9+6T}i0)BzVi7-&t_X;!ZFsWZ9EfrQ$FIe# zdHT;yFsD(z%2bM($^^^DkcHj8pCqn+XV^+!l7>(PkNQqPktjUjiKNQ^jsdWkNx!T!+fs2*QyPzsk4>v zTVgO4nJ$<*DOv+-ws9ukY!Ge=12rd{?Tb(UC$K#%mYO~b5f0vozp@>;D(e;2w^oY4 zZ_l7}3~>QZEVYM4ej9L=cYm}o+a%Wc{%#qOtAVAfa8(<`nAwoymNK(_8gfhk@>yl=;%TWuG**BOONrhiCAjND*weFQ3FTdnR3bDxLBC zd9X^>N3&FAVDlXyP6xR5ORn%~hX9{H}dy43mOmJ)*V9W0AjaUQtrSuVqNKP8? ziRuHx(0t}?xK@JvX}%v8E07(W=DS~%B7^{F$422%U*M0ZO40N^wpc#avE>HGc z^yF=BPrfMXY0b^vm?;{zO6f9k4*L(!c5q9>_IEX$m&DRqP7Df)@36N(;X$JS&?WR(YxOrJ2uJchL2!)LgZaWLSkkRHcBMY{=mgE@m|(qN%_OlWudf796G;~T~c06 zn?68v@OSevdC@lj-b~%xE+c*o!2}F|ofkJ&HPc@8jh_!<4Gcl z9g{2aHT+Bf4etk;ULNbJA32FBdhH0=YwB(>Wlh|fpo%wJA2w*GOsbgP)2N>8UkIU+C;Yp>xgs% zAwd8ZwRBI=W)fVKnuMa1Av}y#bT@=&HKjckGu{k(c@`}30XFJ9PZn1*2QTYn95asI z^Vw_i4L=(?*}QK}o;U}$7$GfJhy(2PGjGRrik0xLdb;!rw)Be(2_gcZce3~reon#3sh?=gWpvkY=cSt%LSEcV zKv<1Dy6D62W4m$0NllyS*oAozvX5{pYiO$&)S5)%_1}7fBhyW+_qp?S-M(~el zp53ZKtQ=CM@QtH+0@`}^o-H4ejR}ddYaJnUGS%~T$I?C znn+Cg{dhVZhg#jV7@s)%r(#Je=%+TuB3q4$uMbHJpo)AgXhNzS=oOt~BXSpZNbFb4cejx9?#@+up`YP{&7kkqpXLd-KBYenl z+bfXCkPK&7QeTW1X8i^Cum#+>wU0W7AdiON2Zz_0=A_j&Qbapkpp=UebsgMyn@GH2D0sJ|@DlV+Jy>D{ z4C{xqzt9A?vjd)PuqID^w8G6t#zfDg8}bFnaL$@&*Sx{+67^A`Kb)w|(zE+Q9vv>= z^J~osTSRUP4TL;bd)tBg>wj#-*Ga(Cah_Y)HB*ujLaz~EKRIn@rn!kG?(XVk1Z3xy;JtW zJ>JD;sDOG!Z;{ohMrf3*6b{`uY<<2P-?Dr(!pgfVhaRjuYmz@Bow-aD;p-}saQl_H zn{Ot=!6#W-)%=A=>@C&D+W6YM)qQ?&l`8E2oBrX(lo(Y$)C!ttj1UnxHP4%ei3 zg&@JXxGO^q6;(cNn`dGWI^@&VdDMO>rR$^Q(j$0s0YlXJ`)B4sikI)=-sgC?*S7fU z{@+eySHmqztW7^vJw5lhiX89TkfY^<^%4#x9d!WQ^K8%k4w{x>*Vfk{;*6HzM$HNB zA|k&sln~6cc12~&YL57=MX}5?RU&Bj(We#?2mzRw2 zWxX>NjB4!lhAvH)&h*Cf>fYB86BVST(8XbiR@ju!dNoKqu|STdoqr%DFPdO3>LS(9 z*wtfv4@O43G1RDf%{lg{hT~qj?*mj7?^i^vLZ9xtjutd@L@Ww2dTWI z-lQj0)R+@|7$+)3yYgTos8^o z`$Hxe=G;Xec+`jDym68G$_clT!w;3im8^M5Bd`&;-~=B6tPYf;Lpv6;(I53OnV|Jt zzfr&RoXm~D&6E^Fgv-#V@SC4G|2|o^j0x{88w(b|iOdPTWowh*F$OHd5Mt z?f39_ospE{oo^{hmvw_QS?cjbC<0R)sFn3mBtn%0M>kXhV`BVB$?mF9wi`haOIAzQ zAy~i?lU(sD-U6$x$vvsRm~bdnOK@_jEiSu}(U5tFq!cy`pYovpF}S7$6TwP^M;_=( zR)Kh18pd-t`mo`-rDR5NnyoW~i=$`i^`7`w)u8SZl-?BZ92mXU}kcuwwSSppd)XM;&Kd~ z1$cfU{l)L|SPgc_?CnrtuKkvXWHyKKUP?9S4Nt0H#oaEqrumYrzv*OfDye>_J?&^S zVQmh=ebSisYSi@{$xtA58bG)?nJ+sjh0%sD%NVTufBkoTxCka zdk9NZBtHGEk#x9>0l!>1V(0oc@6i??Z<- zTz17>6;P`3mucB)8Eik{L3m_ikm1Z^{Z3VXOjQu`d($HKDnw_82Bc4$>EZKQEONdd z^(Gad#M*rgIG8pUEm{@a#OB$f<|S*K=*{<4)_%58orw(vZMt)HWePQx9FDIfBmhTX`b@rz6S>kad_m{5 zK+Cw?A11n~XW&m|nwZeZS3)ZKuHhPw`XMvIkNyK3v#Es~)j3KLP**~Uq5>PX<4`lI zu2gFqxX8{5UE2h6{$iyqlFPzNrJoIyXAw@zj%QQe8n^io{`7Hh%)Lf3>hE5k>7%@% zTpgKTo$yL+(RV*FJjFmvhT+)Urf{;kXc7P-u0MWrXRTF%p-j3#X0p?m=5D$*Q=Fe@ z0mk8{PPUS7xGemFJRVEDE5CYT-LuEk5!L}*Q?I0UWqvGj#@*w8E#b|MtWmotF&QNJ zJ5|ppT>_a_DV=Tnk5nbhWv861Zwa`hNk-WNu$yyTt7W@?Q|2W~T5tJ;mlUBHcwGh0 z^ms276Ul4_8%+%2+G+~3#0@;T00o=Pv%fOc*$b4Y6d{MO?Z7#m^FH9-pY#~hG<*xZ z6K$??f7;3dL~88ljDpU};oeav`fEO_7uf}IX4PS?>|Gt#FlqQ5XE@i`jv8{s5dMT0 z0ESWmn~tzw!Z}3)vb-OOTg&TjRdr^2dDw7o=n))z zQy}7aZHb%;`bq7^1QYi&Zg|mq%eIOfMGkf?=HUAZUwiJB5NYWOs_9Y_E0R00Ez6>21;y!+4yyfeY2x;k+lF z0Zv5qOa`DcT5UfW%}Y^pZTPwZAox;-F<0w=uuX!k~ zO#>?KpAAZD64U$_eaKR8Ar!^8b*7fSJT}Pi-4`oEOfl)5nOr-8 z(Sl*8T@%KB-7CNI1tR^8JRNRCy)8YU?G?A@?4J54Fk4R zriTL+U?4(M$(=@U|~dgK(|=+FdLyTG6rPdQ})c%ou=0(A&-s z9mk+1~4V9aQ4q?lY{gu^x{;K-kGT`2$qhKq1i5TEwc<1&soi{23Ox!BV@l|^vIsykmRlWOoi zEP#2?1aD`U;Kvo+0;%c;mi~rP!`#YHbe4DC5vowgk67C;Ne4*i*l&5g6Rr$QS7t4H z84gO{p_up25A@3sB83U!b{QoTm+1FhN5(EZuAXiWVvMfMIPFWr;lDGLgi;=A3+1MU z6CM6-nYb~uLGR$0Oc!;iKbbXE8WUKtbTWZp^%%nH0mJO$pmq`HZJ$EptskHIT8{_> zREmMa3tFN@`4SnnuqRwkW1DD(-$7a}0TNu=Rplhrf*X7@Gazkxs*Ym&|@hL7|^^o$?W zNOX}@j<+&~1x~(;*MW%#dY!y|bLb}Shp??O&L_9U+4uS{An>wU3c=^Yx7Hg2{+4el zpAfy+88z2F?JN^t2w4NLRDasDCG(nfSx6GS$Bho|@msCQ|H0K!ejUAYiP_lX=DlI$ zDciWZK?CmJSHxnbM6ez;RD-481!ayfpuR4eGP3Q$f%dP4$}jj_z#EPHWeckrr4^mN z-7$L2-qcd9`Cz8#8M6~3!oM-+Q9v^lJA{y@g&Cx!^y*&T*CTnS`xx(Ufyfkb$2##suz(3HFWXoUL6)-PZ z1l{-mc7cT5?-Z3;^TlrVA+fDA*j%9kWW~^5D3WcB_Jg7sNYTP%P#QBRPikcQ$@+x- zX(y|$RJr$oKz%e$f!^sE)I-7X6v zqTy>ET|K)G>Y~Abd$C7G-pr-B>|;zJu-&r7?UauXiR!&r`~w-FW{Oi}VxT_s11vm9 zD&b|LN1hx0n5qiGua?j=5a1stH*y8N$-_g27zY~g*qijRCIlxyZJJJ00Q6A|e;< z4hm%4I-nW>wTT`H$3#*@g(X*+QVpD$13V{*;R>GkkJf|Kyg5m9SvASp-|=eFBp-NW z4wF4eoZOC1$-U;Rx&9DEh@_X_&&rjtI?YgCI8LVsC@yUW-(&ymrOS8F$WKLV6xGiJ z5YTGLP=0RnQmr9MTp20KOXlkeD+@=OSiCVjqb?~7PQX!#*#{udhBF!hG1>n@es7LV z&%Zdb6uoLRUE%piC|F-GdCX%&~9H5^VZk5al+bJFG9SA#QOHS1V30d<=(ePp@$3zKN&9B`_Nw4cy3mD+oevkTmOXo67KNC`?) zH3~&6%ku4@{Uw-yo{@NXcclV7#S$y4Ovg@3-QEdx9k~sDsU?FUGS|a0A{6zC zr|Y9WczlmWF862%Ryk_TK`??4^FJ7xk#fpz;L8DPPDG%L3jh-IAM3rN4VcOXveQ7a z=GiCkSd?reuTT&I#q&YjDe|*|kl*O{yBXG^C98skuLJQ-IzXz>OG4Q1dYzr%-0R=D z+M8)3-r3IqIx*+|mX}Tze`dv?FQBJi-Te$0LjooRprQ}%`>CTCLmQR)WGj|45P}Rw zEQ@UmHh%UfrI%d?xRD_36!`g&k6k;$Fvj?spLyR1x(arUz_3HASzEPB;W5Sg%OKpT zCtfaqHd;xAF0RMJ+12%<$ojA10PhNauRnT3FtAw?iw9~@u zLE^{QfZnydto`}5Bj&tWj3*l!{|v`u=tpqXcS5+oX3$9i;T$2PbG!1S>z| zxFas?uuK@>pikB*1}ehA$FrriSp&qNb|XC-x?psi+){XJ^+YOFg>GT%3IR}Ls-W!6fcy;tGs7M%MA08jyj zJnLH{pbAh5!(rmWpiZ3sj7EOy7u;1qPkib_L>?U}VNbT>1*x7)RG0@}{muOGi3w|d zlxNktN)3@56M{z?`0z$~Gf3s{fqWdY0pAWEeV>7%RUG3Al|z{LB!wxO>8KW$BD}~s zPE*wt@bzLhmASdiT{1lgP zPSX5mHNnZZ?@#^#FsL=MnQ#mEbNRlJM zDL}h~(Q-QxZ8a`5=Ws*aJcHMfH^%EtgYC`Lg<;UkB)9hC~%Le|I=w%#ZbevBOEhrSCsUD;6y1A&_iN(gCX3D z+%_A0tpCW{T22cUBpU5Tva>W#IKlN(825EMK63gl2po~l;)p!Dyo0YG%AwvOA-eiK zBN^RQEsTCL-P563tK*RhpZW2fg>_wrJGA^7*z`aNu<6S(|AVBhvICCh`!9|rGPUG& z%F$rMfnd|@>lc|!wm)As;_u`E;rh2oKUM(Hz@5bZ#nB|`yW4@1W0JDXnwZW&)OPL^ z{vA$QfYy>X8Gyd?yU$S{@jBQ9T_iz?!NruH#$DSKAK17Jw(XKMwCI5c9p_b|zhIu& zfOs8!(s!l3wIO;Z3SAy4N_h6GL7xAZV>lrg{ga~6K4CZ^l7|h$0P3}JsG=5R12WP9 zUUiM#-y98j_)mtmW#ntgOg>V|j{x+`6OM_$=P_RKu3cB;&h%IWF5(I(GqW-G@|vAC zwJ7bu%9{vDL-4qOSdEH7IjCbqam_yCUXx0rAqS5=2;95xA%~*8AQx@a9OqlFDy74H zb)#XMxuhMmW_uXU5n}*k&tDYH|AIVgY<~iQ*v|*B<8YV<$yH=_RG3vfQXAvg`!4`U zWgCT12=?_ohj_}QK>g%CHj`J2x!&D=#;~!kEugT{mt3CgQ-GbdX|V52$>iG+d3g*e zwr&{LMOXfo>4$^=Nzk^Uo(LG#8*2LC;v;8(7D7wi)bE4R&gF=j;jBY9mE&BT zqf`9X5Kihk?K-`UtbddAdy1A}9fMZs@xd2Va9}gO=6c^qQyWdI{{sN3`u~fdC0OV<7Lw7#CTPps*nK%IWL7q~%Hb?HL8FjpbP`fHNz<*j3yy!8SW>274 zHc* zQ+0)&oAocvlji~oABae7W#6|$(b8Y0GCtBiZ`Z;ZJC3mundJYnJH(SR_IZ<@G^p9b?@5B6Y3EH~-B{757`2E~{Tq zPyjHtzo6i6#%3e>54Bzb!@TCxhvxcxaVlXTaS=n;p8Ypt8@gC@@=a^692b;Wrt8St zdsp?_i~PsOfFRT7&&8O>@aS2d3Dj7Zfii)A$*`fyDyRTnfSVw*yV#ZW$Ql&rUyLoV zzRu{jh0`}DMsF~uAe#1JxURgY@`mavD{VFXKCLcn*eBWf^#lF_jEx&WQ!xpcL>fg8 zhbr}qLvd?Euf*y-Pv`&khPTz;Vil+BQ$tn`D4v+SG!^kpF1TLr3OtjlGV4y<$pIdC z*>eQ9=`FV*Pg@WJie@7Lj-RKf>ht~70W&}Vbg)Zj)TFS%Z4obp~BvN z(xFHuL12SQwK(#4|MJ`%$9y>^J~ENZ^Lh01*1bY&)td-Ks&;XI7jCvSQAkn|qNP2F zfliRPEHA|KLjzL-YA%cdLTXfYkH*L#IE5i@yWlf-9eWQ3!WPWEwY%36-6!;QK-?m$ z?tpxu*FJ48uHVZ+smgygS)CF+tloa%0#u~)m5*F%X3_%8IQTz()B7>}ms0QRI}@}U zu7-~vcc-*OkC!X~3q=XymeOT%JWdEqzO^8-*?m(uak5n2KeaYs1RsqF?N z={vC?{Cpdca>r@u01S2gqH8?>i`e|Z*WR$v+T52b1B?ExdsBmtFr$cDZ&*ZY~l#BLG{Ms2MU%5|Of)jxCjP?9ERZHZ2$ldsvP2fN2nr~yy$1X|OTe)dfabhPh z`kwl$w*aMnAy*YP^IW)s1N0XE;*VF^wcKJF#4C3Mk0H%s<^i*p=3{&$-PA7-NcBAg z0)Z0et_%p-y%X`#hPIntdLYoM_6Lv_0s`m3tyerX1kL5yfEO-M_Nbu!>iRuYLo4-V ze=7Ce?suTM_s|6IKK*_O8HRn7t&z#9W2L&4Ai^J@D4=7(-j4r6sUM!X&*5-<=ng6q zvT$qYC1;lCR30Xf7NE&DuFv%RSVIp9Xvi~;P;Fj@|8KT7vnw1=Xz0%gwU#x_HK(q8>k z0R*%Eq9_PbxQcoz?*X#|M>KvZJ%_-qiW!CSib!Av5M^Le-C*%&dD)co3{@Wb*jhsE zrKqOrxH(n#hwI1Ha#*6|=HjKIM;892jc5TdXX5G5B?J9kMd-QGLjku={ZFmlLSVGy zFRec4-l+sAJc^1%U6?qV{a2c5Y5;K&ia9V-(~{AWXO6n`*G!GG;Kpo8739^}i+hd3 zKO4x4wS5VQfM*22`_GG$PnCKYy$OgK-$P1~a4Yw)`!SQ@UY1RDlo}P^Tb)~-iiE%< zH{Zc%+oyyspru{$*dQ5;N@dpvF5MU?RB#LHDX_ zvzazzv9=E#e!Ok84h#G)LQL962O0}hqcEqpf7>+x1wRY6jrQ(GkghUG2_leQKhT+? z=eh7YB7FP`5Qgd&T8zjGe$)#w0^Jr2z@Ms!@~Abf06awNP2WXaPD?A>m+#x569S-M z-Jj`-9<0?p{cEaL9I|Qm%)IyJnI+?)bfiC3Rs4~2NRabudPVftzmoSMpha4l1>-F1* z10c>OF3j_p=K{OO*Id)STS3i13e1OKGbARNbA(gInY9I=#5&mo ztBrj(A0_~I7_{=L=VPJh)JBRAdlSo_Q#D_i94O>${Qo^z`>xhbDPd<%eG$yXWO@Fc zs_Ai&{h`&v-YV8ioQ1(I2cPEawRf0?S% zbe;eR|3(6IRphqm--NAv8`EL+H(v_`eFyl9049-~e%c<`x`KJ&{7(>8rRAoU&Ld$;n&rEfiwD@f4JMQ7u*~ztA{WF(X=CZK<40^vU94e z_~vUui#}_XKKJUDQr}AtAwaoSvKP)9&FZ(iv;lEsMkb~U4`eyJ1jk;uM_`sxnKDY< zJ6R4N`8DVy^9GRfd4aOxuygRT2dp~xr8K}l`}`3(HG4adr>b%7+5cARVKWIpQlV9ST*xuye;>T7;>T%z@)T4%835BG za?18N^`6du^HTvZ&L4>3a%Lp=$;4+8rR=sEV}Ng2CFrC; zSYpnwr}-58g@EjifOd^G+l4f;Kg{?#;A+t7r^@b)UETNqIW-6a!PI-$X1aGAY}+v2 zXvK-7>s*sS!bzbFEb$`x{%IAruyY4Ng8m+-i7u4q(IMW**tjjwe@^u+-faacn$Ygs zTZ_SHtsWF*n+%EH%WynC%Zg#tkPw(q=vY~{nEQnf znIlx+_{t!mPOduhi>tLeyo7le?H%es_LL&X_GscFeSx%q2z-bdiq$h=odg}X$U9=8 zZersKfG55Qi~O?G0VFVAnGxvDyKyZ* zlBNhoVJlz}xXo?;;izK5{Xgg#EwB@T6c;I+))Q>fPSExN)<>~P%`CybmKX^OTwU7r zHC@-6y&AB;=4peIR-zRLj%3me;M#(3D#0spkcBz6T+-9GzSQn100gA1?>Ix6VxQEL zFMtSWyz3yv)JpOM8vRaXRUQ&w-&2f~<9`i`D)J}6Ng;#+YmM-iN#2tgtT>!Gf_BYJ zVsz_yJ6^v?hI8i!`Un39N23>l>T=^rwyk(YZcGA`;58hy|FIwg_#g9D3;@+>dWuff zBa7)7FjPY;fX{wS)ofufdM)$`Ci4Fnto^0cmxrC(-DCnowWp1Ykp71yVHz;qS=r{8u`%~F>hd6^o_>hn zBxWRn{$w8=0BS8)$v`~&|f{9Mk`d;t~d?iQ_S~BcA^*y?Y z(b5J1e+kIobx{L8rz;!ey)-?{#$KWQ4}((1$^ zFepz{0rTVKY6ee#P@aMrPmPa%;67Cf^lo$Y6^C@(iPgsV53L?a{|8G8ccq-Y)?EKH z1)?gd4=+#Z-UIjlJ5gO;s6ny1dX-gsu2*aYE!E3*7SN4am2geUCFn!$??^F6C?weUVn(`E=JuK9u>I=sevP2oM*8&~8t(h`dX~ zM#igJ^tv5S54UWfRVuvo#k!au7>dA94cJpW+$9ii@{>Any@uC)J8-ap>(TtDjI8|O z(aN+5Ho!i#bx@M~=KoUaMX7fYf2FBmQl9>E6q!)0(k*XNI{)=6IP$yd$jFnRK}N$b zj$DA3`{q+$@^ArJ{&e~;oAS#_2nUqltvs4$)meQu-N|ReYPW)MvWfR!b$VZ!g9HFs zVXp>-;vNmPcM;lJo)w1Jc^{Og8-Bp}c$*7wwBJ5@JR|CQvA>M;AWak9pdv?m`+tzM z#s;ok!U#>OHSb?Kz3^yZUEq{A7{-kL5_z+&Ey)<=dd*mTUk%DGwQ8wA$*IuhElCz>MlNdw@OoIxPmI&od zOo=m&6K%<1>W0+((h@2lNlDNbxBd^M{_`WMjZrbbz$fBWihQrbEwU@u|vWOBhD-n$si^@p1ZFm?*> zpO!4(V1d6e;HQqJiBrAatwyMqtTdU^?jHycZ%&=(z}?UsIBLO!7MTDBOCZ_De+l;I zMlU0vaj0HlHE{J8klPJb-!;G@lJ*~|G}&Cn2LMucc2s3pB=$KG#p(U$LzPCR>%af- zCFq&R31q2X+xunKu!-0WJJuhf0)h(AgV4|YPKt@_zA9ZT-mkIRA98&Y_a6)`<4-pg zm?#!_RpEf7brtac4C#*C^5699|Lj<4hP0b zkakxB{Deff%kV%ef)v26$l>qhW8fDL7TEv&H!mRIhF?J~%|!DwRaY;FlLFB1$#(BV zey%c3$i;87Z0Ude<^{;-$U-oH2Irvs#nFT$KT%H={pEaQ4@%(;OMJX}Prtbj{;nM| z=TIBj8|sv|8uqj+M?-@`i0t_0>$oh;j}hGEd13u8i9RTS2l1XOtLCqfn#miZkN_iP z^rG*fx4Y~=hid*r?XxlQW`V6hp&zxGe!CImF+aJxkbmIyNS$yO28H@&&`CQ41>sTQ z$*;=}j=q|JJRS15cs~OMfsG8P80b)) zsTu;F`t~6d{9nFDekUKw|M{yIU}d0x13h$PRs7$+$DJ0vs)hRkf*j9rb=TwnoTmY& zM%V+M;@jZg@qBEPQgp!fc;!#qqubU0w`C6zy)^NE+=oFsl!8E$ z9TQcwTgpp;^a9Kg`oGz8RsAj6qi;WZ{|2$^Wl8S8bBjMnfg6VP$ zsl2b80t|Ro;F=F$1K1F~w+0=nuix_jKWz7lx*)^1-5(w1^gjP4d;A`#yHbZm{aiMX zO=_`^-~8@R=bD1p{BmPo|AX&hM}>{2{;>j10t0n}tMj5cdwwd+-6h|ZXS7@jykG14 ztVCdD+-I9`Db(%!xrN=IZas=9y?O18v)OEAn}v?RGQtkDC=1wMicGd;R_f0?3|y-5 z=l#3MYmqj%fRctaSXC}?_uc$n9bmcyj>orx)*7Es|F-IhKDc_j#SKw&LN+^YlGM-t z+q2CT!=@I>9IyZX{LBo&rn%NX+C+0>M7p@cb5#UbPR`x2Db~oi+(AD{%lV8-RG?Ph zvmZ{E7ESNfyVH@YG|}whAy-$G9YIY8Z|@a%+?e*vrapX<;}5IvcF)iKt-JQ!=6rd% zo_*gLe$Oi1Qvc~c4&NzzdiBxnD~b#ZU!?3NvM?-YKJ#R1R^h+*0{16uiNCb>im&Rm zNh_!MAHB*0JmO=?!RbI!<;o8y?Od~(HW+Ez=kGInFQkHo&$Nc#6&59(#2L zhA9rOms~q8p!Otc_AXW3{|B3{e{%dgYZvgG5d+{cE&)<@>n=ph%QgOfUPagU?qyH4 z*z)Zcy|!A+-^I!RT(*1>xW{=?rtH;6kB)BeUpLEBf62Q{?d!2K`JNkp6u!N%KIl16 z!T%)SLB9)@yi(tC%E&rtQ+d$#Ese9koXzQ}p4OA01#-%d`W~Qjr`(BG|7{l0AzZX~ z=C0Jd8|ObIr7vAIKWIA84EJP^8Qec4zna^IJpC1L>CqM2^Dq3(rPuO^#m_z&d>p9e zI9N^h9lO;vWokX%QWK{veOKx9{Z5IE*vAKx1n+vv0{6VmlUWShdK`G5715Z`g>8}3dc-I50LJq8AO{LZCHy8U)eyMsjt$k)ms9bhssQt1$pl0Cl$3WZk zoeq=bwC_3nb>5N-4_~LN z%-tk#9B9qE4|jo{@s$9cqcS7?)$*-+6=go3wp$f1uGjxOcdFvwdozCnH?S`UMSubS z&eOA&Z_+ig*Liu>EVlUUnX;$ON0*w-1s(z-1oCf!-0WXo`d{z!zW2VRo%v8k_O{XW z<@)?b7Hbpjiz@uSDe>;C%@)8&jsk`L zmkGa8?%!5C!s(ek@0q3X{xvVQ?pYOoYYI@xs{`a=xyO%RW$SX^j+L6a<&&ZP|Ffyd z%!iM*`fXukXedeqMUVSWVD#ABR{7qm7OniVX!4>n`MYjkT~Se(;1Pc2$;xQZo@Wqn a=)A*jBvZpEQ*`kGi0|p@=d#Wzp$PzJ8c{6( diff --git a/docs/reference/figures/pressure-1.png b/docs/reference/figures/pressure-1.png deleted file mode 100644 index 7507aa939493f478f99ed29ced685be57e0394bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7331 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 CKMmRd diff --git a/docs/reference/figures/xportr_rev.png b/docs/reference/figures/xportr_rev.png deleted file mode 100644 index abaf6ca1f8d2f02379a8f72816bb0f44a29b6811..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127643 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

    ap119qg^NJXF08J+fV;Kw~=FP0iRRd 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%0DDE=Aza(v9D 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⪻Gz*zY4zXBwiFy}BkSj@1>R~B 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 diff --git a/docs/reference/index.html b/docs/reference/index.html deleted file mode 100644 index e0ff536b..00000000 --- a/docs/reference/index.html +++ /dev/null @@ -1,144 +0,0 @@ - -Function reference ‱ xportr - - -

    -
    - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -

    The six core xportr functions

    -

    -
    -

    xportr_type()

    -

    Coerce variable type

    -

    xportr_length()

    -

    Assign SAS Length

    -

    xportr_label()

    -

    Assign Variable Label

    -

    xportr_write()

    -

    Write xpt v5 transport file

    -

    xportr_format()

    -

    Assign SAS Format

    -

    xportr_order()

    -

    Order variables of a dataset according to Spec

    -

    xportr helper functions

    -

    -
    -

    label_log()

    -

    Utility for Variable Labels

    -

    length_log()

    -

    Utility for Lengths

    -

    type_log()

    -

    Utility for Types

    -

    var_names_log()

    -

    Utility for Renaming Variables

    -

    var_ord_msg()

    -

    Utility for Ordering

    -

    xportr_logger()

    -

    Utility Logging Function

    -

    xportr_df_label()

    -

    Assign Dataset Label

    -

    xportr

    -

    -
    -

    xportr-package

    -

    The xportr package

    - - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/pipe.html b/docs/reference/pipe.html deleted file mode 100644 index 2aa9c355..00000000 --- a/docs/reference/pipe.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - -Pipe operator — %>% ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    See magrittr::%>% for details.

    -
    - -
    lhs %>% rhs
    - - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xportr-package.html b/docs/reference/xportr-package.html deleted file mode 100644 index 171d8460..00000000 --- a/docs/reference/xportr-package.html +++ /dev/null @@ -1,97 +0,0 @@ - -The xportr package — xportr-package ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Package Info here

    -
    - - - -
    -

    Author

    -

    Maintainer: Eli Miller Eli.Miller@AtorusResearch.com (ORCID)

    -

    Authors:

    Other contributors:

    • Atorus/GSK JPT [copyright holder]

    • -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_core.html b/docs/reference/xportr_core.html deleted file mode 100644 index bd37c738..00000000 --- a/docs/reference/xportr_core.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - -Check variables according to their 'Core' category value. — xportr_core ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Do checks on CDISC compliance for each variable of the dataset, depending on its 'Core' category value. Values of -'Core' category includes: Required, Expected, Permissible and Conditionally Required. Refer to https://www.cdisc.org/ -for more details. If checks passed - will run silent, otherwise - throw errors or warnings.

    -
    - -
    xportr_core(
    -  .df,
    -  datadef,
    -  ds_name. = "",
    -  var_categ. = c("req", "exp", "perm", "cond")
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - -
    .df

    Path do dataset, when var check is required.

    datadef

    A table-like object, containing actual SDTM or ADaM specification information.

    ds_name.

    Optional; by default takes name of the dataset without extension; useful when dataset filename -differs from actual name of dataset (i.e. if ADAE file is named 'adae_final.xpt' etc.)

    var_categ.

    Vector with names of 'Core' vategories to check; default: c("req", "exp", "perm", "cond").

    - -

    Value

    - -

    Nothing

    - -

    Examples

    -
    # Consider having specifications or spec metadata in place ("ADaM_datadefxlsx"). -# Let ADAE be dataset we want to check. - -#d <- load_spec("ADaM_datadefxlsx") %>% - #xportr_core("adae.xpt") - -# If filename is different for any reason (like dataset had to be split to -# meet size expectations). - -#d <- load_spec("analysis_metadata.xlsx") %>% - #xportr_core("mo1.xpt", ds_name = "MO") - -#d <- load_spec("tests/testthat/files/ADaM_datadefxlsx") %>% - #xportr_core("adae.xpt", ds_name = "ADAE") - -# Using 'datadef' tools: -#dd <- define_to_DataDef(path_to_xml_file) -#xportr_core(dd$ds_spec, "adae.xpt") - -
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xportr_df_label.html b/docs/reference/xportr_df_label.html deleted file mode 100644 index 452540a9..00000000 --- a/docs/reference/xportr_df_label.html +++ /dev/null @@ -1,125 +0,0 @@ - -Assign Dataset Label — xportr_df_label ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Assigns dataset label from a dataset level metadata to a given data frame.

    -
    - -
    -
    xportr_df_label(.df, metacore, domain = NULL)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing dataset level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    -
    -

    Value

    -

    Data frame with label attributes.

    -
    -
    -

    See also

    - -
    - -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  SITEID = c(001, 002, 003),
    -  AGE = c(63, 35, 27),
    -  SEX = c("M", "F", "M")
    -)
    -
    -metacore <- data.frame(
    -  dataset = c("adsl", "adae"),
    -  label = c("Subject-Level Analysis", "Adverse Events Analysis")
    -)
    -
    -adsl <- xportr_df_label(adsl, metacore)
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_df_varnames.html b/docs/reference/xportr_df_varnames.html deleted file mode 100644 index 46eb9c4f..00000000 --- a/docs/reference/xportr_df_varnames.html +++ /dev/null @@ -1,392 +0,0 @@ - - - - - - - - -Rename terms for submission compliance from data — xportr_df_varnames ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Change the variable names in the .df (only) and return that object to the -user. This function simply calls xportr_tidy_names on -colnames(.df)

    -
    - -
    xportr_df_varnames(
    -  .df,
    -  verbose = getOption("xportr.type_verbose", "none"),
    -  relo_2_end = TRUE,
    -  letter_for_num_prefix = "x",
    -  sep = "",
    -  replace_vec = c(`'` = "", `"` = "", `%` = "_pct_", `#` = "_nmbr_"),
    -  dict_dat = data.frame(original_varname = character(), dict_varname = character())
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    .df

    An R object with columns that can be coerced

    verbose

    The action the function takes when a variable isn't typed -properly. Options are 'stop', 'warn', 'message', and 'none'

    relo_2_end

    logical, if TRUE: numerical prefix bundles will be -relocated to the end of the string. A prefix bundle is determined as a -number or "grouping of numbers separated by special characters and other -punctuation". See details section for more info on prefix bundles.

    letter_for_num_prefix

    character. Will be ignored if relo_2_end = TRUE. Per CDISC & regulatory body requirements, variable names cannot -start with a number, so if you want to leave the number of the left-hand -side, use this argument to insert a starting letter before the numeric -prefix.

    sep

    string of only one character long, intended to separate words from -one another. In general, only "" and "" are possible, but the user can -insert a letter if desired. Note that "" is discouraged because it is only -permissible for legacy studies started on or before Dec 17, 2016.

    replace_vec

    A named character vector where the name is replaced by the -value.

    dict_dat

    a data frame containing two variables: the original_varname -and the dict_varname to find and replace

    - -

    Value

    - -

    Returns the modified table.

    -

    Details

    - -

    Abbreviating variable names in the xportr pkg uses a step-by-step -process detailed below. Each original variable name will be renamed based -on the method performing the least amount of work to achieve the min -character length requirement (8 chars), thus maintaining maximum -originality. Therefore, the function only moves on to the next method on an -as-needed basis; namely, when the term is still greater than 8 characters, -even after lite modification.

    -

    (1) Blanks: Any columns that are missing a variable name (i.e., the header -was blank in the source file) will be renamed to 'V' + the column position. -So if the 2nd column is blank, it will receive a 'V2' rename.

    -

    (2) Use dictionary of controlled terminology: For example: 'Subject ID' may -better be suited as 'SUBJID' within your organization. Note, that -dictionary terms are expected to be submission compliant and will not be -further abbreviated. They will, however, undergo a check for non-compliance.

    -

    (3) Do nothing! Or at the very least, mimic what SAS does automatically -when cleaning up variable names during a PROC IMPORT. Namely, replace any -special characters with underscores (''), capitalize everything, and if -the value starts with a digit, add the '' prefix. If the 'SASified' name -is <= 8 chars, then the function will use that rename. However, if its -still too long, the function will try removing any extra special characters -or spaces to help reduce to 8 chars.

    -

    (4) Find the STEM or ROOT word of each original variable name. For example, -if the original contains the word 'resting', the 'ing' will be dropped and -only the root word 'rest' will be considered. If less than 8 chars, the -algorithm suggests that result. If its still too long, the function will, -again, remove any special characters or spaces from the stemmed word(s).

    -

    (5) Apply an abbreviation algorithm who's primary goal is readability, such -that the results remain unique. The methods described below are a bit more -'involved', but the results are very robust. First, you should know that -characters are always stripped from the end of the strings first (i.e. from -right to left). If an element of the variable name contains more than one -word (words are separated by spaces) then at least one letter from each -word will be retained.

    -

    Method: First spaces at the ends of the string are stripped. Then (if -necessary) any other spaces are stripped. Next, lower case vowels are -removed followed by lower case consonants. Finally if the abbreviation is -still longer than 8 chars, upper case letters and symbols are stripped.

    -

    When identifying 'words', the app performs some pre-processing steps in the -following order:

    * Certain symbols are replaced. Like the '%' symbol is replaced with 'PCT'. Ex: 'I_Ate_%' becomes 'I_Ate_PCT'
    -* Replace any symbols with a blank space. Ex: 'I_Ate' becomes 'I Ate'
    -* Find when there are two capital letters next to each other, followed by a lower case letter then adds a space between the two capital letters to separate the assumed 'words'. Ex: 'IAte' becomes 'I Ate'
    -* Insert a space between a number followed by a character. Ex: 'iAte1meal' becomes 'iAte1 meal'
    -* Insert a space between a character followed by a number. Ex: 'iAte1meal' becomes 'iAte 1meal'
    -
    - -

    What do we abbreviate when? If a stemmed word exists, the app will apply -the abbreviation algorithm described above on the stemmed version of the -variable name, else the original variable name.

    -

    Since submission guidelines indicate variables may not start with a number, -when found, the algorithm will either add and maintain a '_' "prefix -bundle" through any transformations detailed above, or it will relocate the -"prefix bundle" to the end of the term (the default behavior). What if a term -starts with non-standard numerical prefix? Currently, the function accounts -for the following types of prefix bundles, where 3 is used as an example -starting digit:

    * x = "3a. hey" will return "3a"
    -* x = "3_17a_hey" will return "3_17a"
    -* x = "3_17_hey" will return "3_17"
    -* x = "3_17hey" will return "3_17"
    -* x = "3hey" will return "3"
    -
    - -

    See also

    - -

    Other var_name functions: -xportr_tidy_names()

    - -

    Examples

    -
    vars <- c("", "STUDYID", "studyid", "subject id", "1c. ENT", "1b. Eyes", - "1d. Lungs", "1e. Heart", "year number", "1a. Skin_Desc") -adxx <- data.frame(matrix(0, ncol = 10, nrow = 3)) -colnames(adxx) <- vars - -my_dictionary <- data.frame(original_varname = "subject id", dict_varname = "subjid") - -metacore <- data.frame( - dataset = "adxx", # fix both here and in metacore? - variable = c(vars, "NotUsed") -) %>% -dplyr::union( - data.frame( dataset = "advs", variable = c("carrot", "cake")) -) - -xportr_df_varnames(adxx) # default -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #>
    #> -- 9 of 10 (90%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 3: 'studyid' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJECTD' -#> Var 5: '1c. ENT' was renamed to 'ENT1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS1D' -#> Var 8: '1e. Heart' was renamed to 'HEART1E' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> All renamed variables passed validation.
    #> V1 STUDYID STUDYID2 SUBJECTD ENT1C EYES1B LUNGS1D HEART1E YEARNUMB SKNDSC1A -#> 1 0 0 0 0 0 0 0 0 0 0 -#> 2 0 0 0 0 0 0 0 0 0 0 -#> 3 0 0 0 0 0 0 0 0 0 0
    xportr_df_varnames(adxx, relo_2_end = FALSE) # prefix numbers on left-hand side -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 9 of 10 (90%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 3: 'studyid' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJECTD' -#> Var 5: '1c. ENT' was renamed to 'X1CENT' -#> Var 6: '1b. Eyes' was renamed to 'X1BEYES' -#> Var 7: '1d. Lungs' was renamed to 'X1DLUNGS' -#> Var 8: '1e. Heart' was renamed to 'X1EHEART' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'X1SKNDSC'
    #> -#> All renamed variables passed validation.
    #> V1 STUDYID STUDYID2 SUBJECTD X1CENT X1BEYES X1DLUNGS X1EHEART YEARNUMB -#> 1 0 0 0 0 0 0 0 0 0 -#> 2 0 0 0 0 0 0 0 0 0 -#> 3 0 0 0 0 0 0 0 0 0 -#> X1SKNDSC -#> 1 0 -#> 2 0 -#> 3 0
    xportr_df_varnames(adxx, dict_dat = my_dictionary) # 'SUBJID' used -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 9 of 10 (90%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 3: 'studyid' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJID' -#> Var 5: '1c. ENT' was renamed to 'ENT1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS1D' -#> Var 8: '1e. Heart' was renamed to 'HEART1E' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> All renamed variables passed validation.
    #> V1 STUDYID STUDYID2 SUBJID ENT1C EYES1B LUNGS1D HEART1E YEARNUMB SKNDSC1A -#> 1 0 0 0 0 0 0 0 0 0 0 -#> 2 0 0 0 0 0 0 0 0 0 0 -#> 3 0 0 0 0 0 0 0 0 0 0
    xportr_df_varnames(adxx, sep = "_") # permissible for legacy studies -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 9 of 10 (90%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 3: 'studyid' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJCTID' -#> Var 5: '1c. ENT' was renamed to 'ENT_1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES_1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS_1D' -#> Var 8: '1e. Heart' was renamed to 'HEART_1E' -#> Var 9: 'year number' was renamed to 'YEARNMBR' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> The following variable name validation checks still failed: -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `ENT_1C`, `EYES_1B`, `LUNGS_1D`, and `HEART_1E`. -#> Cannot contain any lowercase characters Variables `ENT_1C`, `EYES_1B`, `LUNGS_1D`, and `HEART_1E`.
    #> V1 STUDYID STUDYID2 SUBJCTID ENT_1C EYES_1B LUNGS_1D HEART_1E YEARNMBR -#> 1 0 0 0 0 0 0 0 0 0 -#> 2 0 0 0 0 0 0 0 0 0 -#> 3 0 0 0 0 0 0 0 0 0 -#> SKNDSC1A -#> 1 0 -#> 2 0 -#> 3 0
    -
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xportr_format.html b/docs/reference/xportr_format.html deleted file mode 100644 index 9b582f78..00000000 --- a/docs/reference/xportr_format.html +++ /dev/null @@ -1,132 +0,0 @@ - -Assign SAS Format — xportr_format ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Assigns a SAS format from a variable level metadata to a given data frame.

    -
    - -
    -
    xportr_format(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.format_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing variable level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    verbose
    -

    The action the function takes when a variable label isn't. -found. Options are 'stop', 'warn', 'message', and 'none'

    -
    -
    -

    Value

    -

    Data frame with SASformat attributes for each variable.

    -
    -
    -

    See also

    - -
    - -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  BRTHDT = c(1, 1, 2)
    -)
    -
    -metacore <- data.frame(
    -  dataset = c("adsl", "adsl"),
    -  variable = c("USUBJID", "BRTHDT"),
    -  format = c(NA, "DATE9.")
    -)
    -
    -adsl <- xportr_format(adsl, metacore)
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_label.html b/docs/reference/xportr_label.html deleted file mode 100644 index 9d3787e2..00000000 --- a/docs/reference/xportr_label.html +++ /dev/null @@ -1,134 +0,0 @@ - -Assign Variable Label — xportr_label ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Assigns variable label from a variable level metadata to a given data frame.

    -
    - -
    -
    xportr_label(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.label_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing variable level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    verbose
    -

    The action the function takes when a variable length isn't -Found. Options are 'stop', 'warn', 'message', and 'none'

    -
    -
    -

    Value

    -

    Data frame with label attributes for each variable.

    -
    -
    -

    See also

    - -
    - -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  SITEID = c(001, 002, 003),
    -  AGE = c(63, 35, 27),
    -  SEX = c("M", "F", "M")
    -)
    -
    -metacore <- data.frame(
    -  dataset = "adsl",
    -  variable = c("USUBJID", "SITEID", "AGE", "SEX"),
    -  label = c("Unique Subject Identifier", "Study Site Identifier", "Age", "Sex")
    -)
    -
    -adsl <- xportr_label(adsl, metacore)
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_length.html b/docs/reference/xportr_length.html deleted file mode 100644 index 51a2aba4..00000000 --- a/docs/reference/xportr_length.html +++ /dev/null @@ -1,132 +0,0 @@ - -Assign SAS Length — xportr_length ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Assigns SAS length from a variable level metadata to a given data frame.

    -
    - -
    -
    xportr_length(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.length_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing variable level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    verbose
    -

    The action the function takes when a length isn't found in -metadata. Options are 'stop', 'warn', 'message', and 'none'

    -
    -
    -

    Value

    -

    Data frame with SASlength attributes for each variable.

    -
    -
    -

    See also

    - -
    - -
    -

    Examples

    -
    adsl <- data.frame(
    -  USUBJID = c(1001, 1002, 1003),
    -  BRTHDT = c(1, 1, 2)
    -)
    -
    -metacore <- data.frame(
    -  dataset = c("adsl", "adsl"),
    -  variable = c("USUBJID", "BRTHDT"),
    -  length = c(10, 8)
    -)
    -
    -adsl <- xportr_length(adsl, metacore)
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_order.html b/docs/reference/xportr_order.html deleted file mode 100644 index 5a75a97a..00000000 --- a/docs/reference/xportr_order.html +++ /dev/null @@ -1,107 +0,0 @@ - -Order variables of a dataset according to Spec — xportr_order ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Order variables of a dataset according to Spec

    -
    - -
    -
    xportr_order(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.order_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame of CDISC standard.

    -
    metacore
    -

    A data frame containing variable level metadata.

    -
    domain
    -

    A character value to subset the .df. If NULL(default), uses -.df value as a subset condition.

    -
    verbose
    -

    Option for messaging order results

    -
    -
    -

    Value

    -

    Dataframe that has been re-ordered according to spec

    -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_tidy_names.html b/docs/reference/xportr_tidy_names.html deleted file mode 100644 index ab5db080..00000000 --- a/docs/reference/xportr_tidy_names.html +++ /dev/null @@ -1,415 +0,0 @@ - - - - - - - - -Rename terms for submission compliance from vector — xportr_tidy_names ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    The function takes a single character vector as input and converts each -string to be submission compliant. This means the variable must be a maximum -of 8 characters, ASCII only, and should contain only uppercase letters, -numbers and must start with a letter. No other symbols or special characters -should be included in these names. However, legacy studies started on or -before December 17, 2016, may use the underscore character "_". This function -is slightly more flexible than the submission criteria would allow, so use -the arguments wisely. xportr_var_names performs the same logic, -but directly renames the columns of a data.frame plus enforces more strict -adherence to the regulatory guidelines mentioned above.

    -
    - -
    xportr_tidy_names(
    -  original_varname,
    -  char_len = 8,
    -  relo_2_end = TRUE,
    -  letter_for_num_prefix = "x",
    -  sep = "",
    -  replace_vec = c(`'` = "", `"` = "", `%` = "_pct_", `#` = "_nmbr_"),
    -  dict_dat = data.frame(original_varname = character(), dict_varname = character()),
    -  letter_case = "upper",
    -  case = "parsed",
    -  return_df = FALSE,
    -  verbose = getOption("xportr.type_verbose", "none")
    -)
    - -

    Arguments

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    original_varname

    a character vector needing renaming

    char_len

    integer, the max number of characters allowed in the renamed -strings

    relo_2_end

    logical, if TRUE: numerical prefix bundles will be -relocated to the end of the string. A prefix bundle is determined as a -number or "grouping of numbers separated by special characters and other -punctuation". See details section for more info on prefix bundles.

    letter_for_num_prefix

    character. Will be ignored if relo_2_end = TRUE. Per CDISC & regulatory body requirements, variable names cannot -start with a number, so if you want to leave the number of the left-hand -side, use this argument to insert a starting letter before the numeric -prefix.

    sep

    string of only one character long, intended to separate words from -one another. In general, only "" and "" are possible, but the user can -insert a letter if desired. Note that "" is discouraged because it is only -permissible for legacy studies started on or before Dec 17, 2016.

    replace_vec

    A named character vector where the name is replaced by the -value.

    dict_dat

    a data frame containing two variables: the original_varname -and the dict_varname to find and replace

    letter_case

    character, with choices c("upper", "lower", "asis") -allowing user to make the final renamed terms uppercase (the default), -lowercase, or leave them as-is, respectively. Note, lowercase is discourage -as it is not submission compliant.

    case

    character, see to_any_case for more info -on alternate cases but some popular choices are "snake", "lower_camel", or -"parsed" (the default). From the documentation, the "parsed" case parses -out substrings and surrounds them with an underscore. Underscores at the -start and end are trimmed. No lower or upper case pattern from the input -string are changed.

    return_df

    logical, defaults to TRUE where entire dataset is returned -from suggestion process, else just the suggestion column itself

    - -

    Details

    - -

    Abbreviating variable names in the xportr pkg uses a step-by-step -process detailed below. Each original variable name will be renamed based -on the method performing the least amount of work to achieve the min -character length requirement (8 chars), thus maintaining maximum -originality. Therefore, the function only moves on to the next method on an -as-needed basis; namely, when the term is still greater than 8 characters, -even after lite modification.

    -

    (1) Blanks: Any columns that are missing a variable name (i.e., the header -was blank in the source file) will be renamed to 'V' + the column position. -So if the 2nd column is blank, it will receive a 'V2' rename.

    -

    (2) Use dictionary of controlled terminology: For example: 'Subject ID' may -better be suited as 'SUBJID' within your organization. Note, that -dictionary terms are expected to be submission compliant and will not be -further abbreviated. They will, however, undergo a check for -non-compliance.

    -

    (3) Do nothing! Or at the very least, mimic what SAS does automatically -when cleaning up variable names during a PROC IMPORT. Namely, replace any -special characters with underscores (''), capitalize everything, and if -the value starts with a digit, add the '' prefix. If the 'SASified' name -is <= 8 chars, then the function will use that rename. However, if its -still too long, the function will try removing any extra special characters -or spaces to help reduce to 8 chars.

    -

    (4) Find the STEM or ROOT word of each original variable name. For example, -if the original contains the word 'resting', the 'ing' will be dropped and -only the root word 'rest' will be considered. If less than 8 chars, the -algorithm suggests that result. If its still too long, the function will, -again, remove any special characters or spaces from the stemmed word(s).

    -

    (5) Apply an abbreviation algorithm who's primary goal is readability, such -that the results remain unique. The methods described below are a bit more -'involved', but the results are very robust. First, you should know that -characters are always stripped from the end of the strings first (i.e. from -right to left). If an element of the variable name contains more than one -word (words are separated by spaces) then at least one letter from each -word will be retained.

    -

    Method: First spaces at the ends of the string are stripped. Then (if -necessary) any other spaces are stripped. Next, lower case vowels are -removed followed by lower case consonants. Finally if the abbreviation is -still longer than 8 chars, upper case letters and symbols are stripped.

    -

    When identifying 'words', the app performs some pre-processing steps in the -following order:

      -
    • Certain symbols are replaced. Like the '%' symbol is replaced with 'PCT'. -Ex: 'I_Ate_%' becomes 'I_Ate_PCT'

    • -
    • Replace any symbols with a blank space. Ex: 'I_Ate' becomes 'I Ate'

    • -
    • Find when there are two capital letters next to each other, followed by a -lower case letter then adds a space between the two capital letters to -separate the assumed 'words'. Ex: 'IAte' becomes 'I Ate'

    • -
    • Insert a space between a number followed by a character. Ex: iAte1meal' -becomes 'iAte1 meal'

    • -
    • Insert a space between a character followed by a number. Ex: 'iAte1meal' -becomes 'iAte 1meal'

    • -
    - -

    What do we abbreviate when? If a stemmed word exists, the app will apply -the abbreviation algorithm described above on the stemmed version of the -variable name, else the original variable name.

    -

    Since submission guidelines indicate variables may not start with a number, -when found, the algorithm will either add and maintain a '_' "prefix -bundle" through any transformations detailed above, or it will relocate the -"prefix bundle" to the end of the term (the default behavior). What if a -term starts with non-standard numerical prefix? Currently, the function -accounts for the following types of prefix bundles, where 3 is used as an -example starting digit:

      -
    • x = "3a. hey" will return "3a"

    • -
    • x = "3_17a_hey" will return "3_17a"

    • -
    • x = "3_17_hey" will return "3_17"

    • -
    • x = "3_17hey" will return "3_17"

    • -
    • x = "3hey" will return "3"

    • -
    - -

    See also

    - -

    Other var_name functions: -xportr_df_varnames()

    - -

    Examples

    -
    vars <- c("", "studyid", "STUDYID", "subject id", "1c. ENT", "1b. Eyes", - "1d. Lungs", "1e. Heart", "year number", "1a. Skin_Desc") - -# Default behavior -xportr_tidy_names(vars) -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 10 of 10 (100%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 2: 'studyid' was renamed to 'STUDYID' -#> Var 3: 'STUDYID' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJECTD' -#> Var 5: '1c. ENT' was renamed to 'ENT1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS1D' -#> Var 8: '1e. Heart' was renamed to 'HEART1E' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> All renamed variables passed validation.
    #> [1] "V1" "STUDYID" "STUDYID2" "SUBJECTD" "ENT1C" "EYES1B" -#> [7] "LUNGS1D" "HEART1E" "YEARNUMB" "SKNDSC1A"
    xportr_tidy_names(vars, letter_case = "asis") -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 8 of 10 (80%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 4: 'subject id' was renamed to 'subjectd' -#> Var 5: '1c. ENT' was renamed to 'ENT1c' -#> Var 6: '1b. Eyes' was renamed to 'Eyes1b' -#> Var 7: '1d. Lungs' was renamed to 'Lungs1d' -#> Var 8: '1e. Heart' was renamed to 'Heart1e' -#> Var 9: 'year number' was renamed to 'yearnumb' -#> Var 10: '1a. Skin_Desc' was renamed to 'SknDsc1a'
    #> -#> The following variable name validation checks still failed: -#> Cannot contain any lowercase characters Variables `studyid`, `subjectd`, `ENT1c`, `Eyes1b`, `Lungs1d`, `Heart1e`, `yearnumb`, and `SknDsc1a`.
    #> [1] "V1" "studyid" "STUDYID" "subjectd" "ENT1c" "Eyes1b" -#> [7] "Lungs1d" "Heart1e" "yearnumb" "SknDsc1a"
    -# Leave numerical prefix on left-hand side, but add a starting letter -xportr_tidy_names(vars, relo_2_end = FALSE, letter_for_num_prefix = "x") -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 10 of 10 (100%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 2: 'studyid' was renamed to 'STUDYID' -#> Var 3: 'STUDYID' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJECTD' -#> Var 5: '1c. ENT' was renamed to 'X1CENT' -#> Var 6: '1b. Eyes' was renamed to 'X1BEYES' -#> Var 7: '1d. Lungs' was renamed to 'X1DLUNGS' -#> Var 8: '1e. Heart' was renamed to 'X1EHEART' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'X1SKNDSC'
    #> -#> All renamed variables passed validation.
    #> [1] "V1" "STUDYID" "STUDYID2" "SUBJECTD" "X1CENT" "X1BEYES" -#> [7] "X1DLUNGS" "X1EHEART" "YEARNUMB" "X1SKNDSC"
    -# Add a dictionary and remove underscores -xportr_tidy_names(vars, sep = "", - dict_dat = data.frame(original_varname = "subject id", dict_varname = "subjid")) -
    #> -#> The following variable name validation checks failed: -#> Must be 8 characters or less: Variables `subject id`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Must start with a letter: Variables `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, and `1a. Skin_Desc`. -#> Cannot contain any non-ASCII, symbol or underscore characters: Variables `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`. -#> Cannot contain any lowercase characters Variables ``, `studyid`, `subject id`, `1c. ENT`, `1b. Eyes`, `1d. Lungs`, `1e. Heart`, `year number`, and `1a. Skin_Desc`.
    #>
    #> -- 10 of 10 (100%) variables were renamed --
    #>
    #> Var 1: '' was renamed to 'V1' -#> Var 2: 'studyid' was renamed to 'STUDYID' -#> Var 3: 'STUDYID' was renamed to 'STUDYID2' -#> Var 4: 'subject id' was renamed to 'SUBJID' -#> Var 5: '1c. ENT' was renamed to 'ENT1C' -#> Var 6: '1b. Eyes' was renamed to 'EYES1B' -#> Var 7: '1d. Lungs' was renamed to 'LUNGS1D' -#> Var 8: '1e. Heart' was renamed to 'HEART1E' -#> Var 9: 'year number' was renamed to 'YEARNUMB' -#> Var 10: '1a. Skin_Desc' was renamed to 'SKNDSC1A'
    #> -#> All renamed variables passed validation.
    #> [1] "V1" "STUDYID" "STUDYID2" "SUBJID" "ENT1C" "EYES1B" -#> [7] "LUNGS1D" "HEART1E" "YEARNUMB" "SKNDSC1A"
    -
    -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xportr_type.html b/docs/reference/xportr_type.html deleted file mode 100644 index 0166b8cb..00000000 --- a/docs/reference/xportr_type.html +++ /dev/null @@ -1,135 +0,0 @@ - -Coerce variable type — xportr_type ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Current assumptions: -columns_meta is a data.frame with names "Variables", "Type"

    -
    - -
    -
    xportr_type(
    -  .df,
    -  metacore,
    -  domain = NULL,
    -  verbose = getOption("xportr.type_verbose", "none")
    -)
    -
    - -
    -

    Arguments

    -
    .df
    -

    An R object with columns that can be coerced

    -
    metacore
    -

    Either a data.frame that has the names of all possible columns -and their types, or a Metacore object from the Metacore package. Required -column names are dataset, variables, type

    -
    domain
    -

    Name of the dataset. Ex ADAE/DM. This will be used to subset -the metacore object. If none is passed it is assumed to be the name of the -dataset passed in .df.

    -
    verbose
    -

    The action the function takes when a variable isn't typed -properly. Options are 'stop', 'warn', 'message', and 'none'

    -
    -
    -

    Value

    -

    Returns the modified table.

    -
    - -
    -

    Examples

    -
    metacore <- data.frame(
    -  dataset = "test",
    -  variable = c("Subj", "Param", "Val", "NotUsed"),
    -  type = c("numeric", "character", "numeric", "character")
    -)
    -
    -.df <- data.frame(
    - Subj = as.character(123, 456, 789),
    - Different = c("a", "b", "c"),
    - Val = c("1", "2", "3"),
    - Param = c("param1", "param2", "param3")
    -)
    -
    -df2 <- xportr_type(.df, metacore, "test")
    -#> 
    -#> ── Variable type mismatches found. ──
    -#> 
    -#> ✔ 2 variables coerced
    -
    -
    -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xportr_write.html b/docs/reference/xportr_write.html deleted file mode 100644 index 28348a6f..00000000 --- a/docs/reference/xportr_write.html +++ /dev/null @@ -1,112 +0,0 @@ - -Write xpt v5 transport file — xportr_write ‱ xportr - - -
    -
    - - - -
    -
    - - -
    -

    Writes a local data frame into SAS transport file of version 5. The SAS -transport format is an open format, as is required for submission of the data -to the FDA.

    -
    - -
    -
    xportr_write(.df, path, label = NULL)
    -
    - -
    -

    Arguments

    -
    .df
    -

    A data frame to write.

    -
    path
    -

    Path where transport file will be written. File name sans will be -used as xpt name.

    -
    label
    -

    Dataset label. It must be<=40 characters.

    -
    -
    -

    Value

    -

    A data frame. xportr_write() returns the input data invisibly.

    -
    -
    -

    Details

    - -
    • Variable and dataset labels are stored in the "label" attribute.

    • -
    • SAS length are stored in the "SASlength" attribute.

    • -
    • SAS format are stored in the "SASformat" attribute.

    • -
    • SAS type are stored in the "SAStype" attribute.

    • -
    - -
    - -
    - - -
    - -
    -

    Site built with pkgdown 2.0.3.

    -
    - -
    - - - - - - - - diff --git a/docs/reference/xpt_check_ascii_lbls.html b/docs/reference/xpt_check_ascii_lbls.html deleted file mode 100644 index ce04efc4..00000000 --- a/docs/reference/xpt_check_ascii_lbls.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - -ASCII Check on Variable Labels — xpt_check_ascii_lbls ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Check that only ASCII characters are being used in variable labels

    -
    - -
    xpt_check_ascii_lbls(.df)
    - -

    Arguments

    - - - - - - -
    .df

    Data frame

    - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xpt_check_ascii_vars.html b/docs/reference/xpt_check_ascii_vars.html deleted file mode 100644 index 2e172ff1..00000000 --- a/docs/reference/xpt_check_ascii_vars.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - -ASCII Check on Variable Names — xpt_check_ascii_vars ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Check that only ASCII characters are being used in variable names

    -
    - -
    xpt_check_ascii_vars(.df)
    - -

    Arguments

    - - - - - - -
    .df

    Data frame

    - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - diff --git a/docs/reference/xpt_check_label_length.html b/docs/reference/xpt_check_label_length.html deleted file mode 100644 index 753bede2..00000000 --- a/docs/reference/xpt_check_label_length.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - - - -Variable Label Check — xpt_check_label_length ‱ xportr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    - -
    -
    - - -
    -

    Check for variable labels greater than 40 characters in length

    -
    - -
    xpt_check_label_length(.df)
    - -

    Arguments

    - - - - - - -
    .df

    Data set with labels to check

    - - -
    - -
    - - -
    - - -
    -

    Site built with pkgdown 1.6.1.

    -
    - -
    -
    - - - - - - - - From 6a37d8d576d5558b7f0b8486bc629f48d386d885 Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 18:40:52 +0000 Subject: [PATCH 162/337] Update metadata attribute --- R/df_label.R | 4 ++-- R/format.R | 4 ++-- R/label.R | 4 ++-- R/length.R | 4 ++-- R/metadata.R | 2 +- R/order.R | 4 ++-- R/type.R | 4 ++-- tests/testthat/test-metadata.R | 10 +++++----- 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index 52477e3b..019ad08a 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -40,10 +40,10 @@ xportr_df_label <- function(.df, metacore = NULL, domain = NULL) { ## Pull out correct metadata if (is.null(metacore)) { - if (is.null(attr(.df, "metadata"))) { + if (is.null(attr(.df, "_xportr.df_metadata_"))) { rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { - metacore <- attr(.df, "metadata") + metacore <- attr(.df, "_xportr.df_metadata_") } } diff --git a/R/format.R b/R/format.R index c6f40609..35e4c9d2 100644 --- a/R/format.R +++ b/R/format.R @@ -41,10 +41,10 @@ xportr_format <- function(.df, metacore = NULL, domain = NULL, verbose = getOpti ## End of common section if (is.null(metacore)) { - if (is.null(attr(.df, "metadata"))) { + if (is.null(attr(.df, "_xportr.df_metadata_"))) { rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { - metacore <- attr(.df, "metadata") + metacore <- attr(.df, "_xportr.df_metadata_") } } diff --git a/R/label.R b/R/label.R index 7c54fe77..c5f4b3c5 100644 --- a/R/label.R +++ b/R/label.R @@ -44,10 +44,10 @@ xportr_label <- function(.df, metacore = NULL, domain = NULL, ## End of common section if (is.null(metacore)) { - if (is.null(attr(.df, "metadata"))) { + if (is.null(attr(.df, "_xportr.df_metadata_"))) { rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { - metacore <- attr(.df, "metadata") + metacore <- attr(.df, "_xportr.df_metadata_") } } diff --git a/R/length.R b/R/length.R index 8bd7fe0b..c943195c 100644 --- a/R/length.R +++ b/R/length.R @@ -42,10 +42,10 @@ xportr_length <- function(.df, metacore = NULL, domain = NULL, ## End of common section if (is.null(metacore)) { - if (is.null(attr(.df, "metadata"))) { + if (is.null(attr(.df, "_xportr.df_metadata_"))) { rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { - metacore <- attr(.df, "metadata") + metacore <- attr(.df, "_xportr.df_metadata_") } } diff --git a/R/metadata.R b/R/metadata.R index 81382a30..6c4f14c0 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -50,5 +50,5 @@ xportr_metadata <- function(.df, metadata, domain = NULL) { ## End of common section - structure(.df, metadata = metadata) + structure(.df, `_xportr.df_metadata_` = metadata) } diff --git a/R/order.R b/R/order.R index 132c8368..3103b8f4 100644 --- a/R/order.R +++ b/R/order.R @@ -38,10 +38,10 @@ xportr_order <- function(.df, metacore = NULL, domain = NULL, verbose = getOptio ## End of common section if (is.null(metacore)) { - if (is.null(attr(.df, "metadata"))) { + if (is.null(attr(.df, "_xportr.df_metadata_"))) { rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { - metacore <- attr(.df, "metadata") + metacore <- attr(.df, "_xportr.df_metadata_") } } diff --git a/R/type.R b/R/type.R index e85c3a71..a9144d1a 100644 --- a/R/type.R +++ b/R/type.R @@ -50,10 +50,10 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, ## Pull out correct metadata if (is.null(metacore)) { - if (is.null(attr(.df, "metadata"))) { + if (is.null(attr(.df, "_xportr.df_metadata_"))) { rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") } else { - metacore <- attr(.df, "metadata") + metacore <- attr(.df, "_xportr.df_metadata_") } } diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 438b49dc..d7113c60 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -549,27 +549,27 @@ test_that("xportr_metadata: Check metadata interaction with other functions", { rlang::set_names(tolower) expect_equal( - structure(xportr_type(adsl, var_spec), metadata = var_spec), + structure(xportr_type(adsl, var_spec), `_xportr.df_metadata_` = var_spec), xportr_metadata(adsl, var_spec) %>% xportr_type() ) expect_equal( - structure(xportr_length(adsl, var_spec), metadata = var_spec), + structure(xportr_length(adsl, var_spec), `_xportr.df_metadata_` = var_spec), xportr_metadata(adsl, var_spec) %>% xportr_length() ) expect_equal( - structure(xportr_label(adsl, var_spec), metadata = var_spec), + structure(xportr_label(adsl, var_spec), `_xportr.df_metadata_` = var_spec), xportr_metadata(adsl, var_spec) %>% xportr_label() ) expect_equal( - structure(xportr_order(adsl, var_spec), metadata = var_spec), + structure(xportr_order(adsl, var_spec), `_xportr.df_metadata_` = var_spec), xportr_metadata(adsl, var_spec) %>% xportr_order() ) expect_equal( - structure(xportr_format(adsl, var_spec), metadata = var_spec), + structure(xportr_format(adsl, var_spec), `_xportr.df_metadata_` = var_spec), xportr_metadata(adsl, var_spec) %>% xportr_format() ) } From 64691bcd46ba2a661d042b260b4c9b9fa6857a0c Mon Sep 17 00:00:00 2001 From: EeethB Date: Tue, 23 May 2023 19:06:49 +0000 Subject: [PATCH 163/337] Update null checks to use rlang coalesce pipe --- R/df_label.R | 10 +++------- R/format.R | 10 +++------- R/label.R | 10 +++------- R/length.R | 10 +++------- R/order.R | 10 +++------- R/type.R | 10 +++------- 6 files changed, 18 insertions(+), 42 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index 019ad08a..af0999a7 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -39,13 +39,9 @@ xportr_df_label <- function(.df, metacore = NULL, domain = NULL) { ## End of common section ## Pull out correct metadata - if (is.null(metacore)) { - if (is.null(attr(.df, "_xportr.df_metadata_"))) { - rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") - } else { - metacore <- attr(.df, "_xportr.df_metadata_") - } - } + metacore <- metacore %||% + attr(.df, "_xportr.df_metadata_") %||% + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") if (inherits(metacore, "Metacore")) { metacore <- metacore$ds_spec diff --git a/R/format.R b/R/format.R index 35e4c9d2..485900e6 100644 --- a/R/format.R +++ b/R/format.R @@ -40,13 +40,9 @@ xportr_format <- function(.df, metacore = NULL, domain = NULL, verbose = getOpti ## End of common section - if (is.null(metacore)) { - if (is.null(attr(.df, "_xportr.df_metadata_"))) { - rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") - } else { - metacore <- attr(.df, "_xportr.df_metadata_") - } - } + metacore <- metacore %||% + attr(.df, "_xportr.df_metadata_") %||% + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec diff --git a/R/label.R b/R/label.R index c5f4b3c5..cba7f1d7 100644 --- a/R/label.R +++ b/R/label.R @@ -43,13 +43,9 @@ xportr_label <- function(.df, metacore = NULL, domain = NULL, ## End of common section - if (is.null(metacore)) { - if (is.null(attr(.df, "_xportr.df_metadata_"))) { - rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") - } else { - metacore <- attr(.df, "_xportr.df_metadata_") - } - } + metacore <- metacore %||% + attr(.df, "_xportr.df_metadata_") %||% + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec diff --git a/R/length.R b/R/length.R index c943195c..b24e0408 100644 --- a/R/length.R +++ b/R/length.R @@ -41,13 +41,9 @@ xportr_length <- function(.df, metacore = NULL, domain = NULL, ## End of common section - if (is.null(metacore)) { - if (is.null(attr(.df, "_xportr.df_metadata_"))) { - rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") - } else { - metacore <- attr(.df, "_xportr.df_metadata_") - } - } + metacore <- metacore %||% + attr(.df, "_xportr.df_metadata_") %||% + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec diff --git a/R/order.R b/R/order.R index 3103b8f4..c4e99d4c 100644 --- a/R/order.R +++ b/R/order.R @@ -37,13 +37,9 @@ xportr_order <- function(.df, metacore = NULL, domain = NULL, verbose = getOptio ## End of common section - if (is.null(metacore)) { - if (is.null(attr(.df, "_xportr.df_metadata_"))) { - rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") - } else { - metacore <- attr(.df, "_xportr.df_metadata_") - } - } + metacore <- metacore %||% + attr(.df, "_xportr.df_metadata_") %||% + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") if (inherits(metacore, "Metacore")) { metacore <- metacore$ds_vars diff --git a/R/type.R b/R/type.R index a9144d1a..fa07c3f5 100644 --- a/R/type.R +++ b/R/type.R @@ -49,13 +49,9 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, ## End of common section ## Pull out correct metadata - if (is.null(metacore)) { - if (is.null(attr(.df, "_xportr.df_metadata_"))) { - rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") - } else { - metacore <- attr(.df, "_xportr.df_metadata_") - } - } + metacore <- metacore %||% + attr(.df, "_xportr.df_metadata_") %||% + rlang::abort("Metadata must be set with `metacore` or `xportr_metadata()`") if (inherits(metacore, "Metacore")) { metacore <- metacore$var_spec From b4459c55a21c30ec1a9ecc2131c5a08c0c60b950 Mon Sep 17 00:00:00 2001 From: sadchla-codes Date: Wed, 24 May 2023 08:07:20 -0400 Subject: [PATCH 164/337] Updating to add more contributors and correcting the version number --- DESCRIPTION | 18 +++++++++++++++++- man/xportr-package.Rd | 4 ++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 46134cda..d3d68351 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: xportr Title: Utilities to Output CDISC SDTM/ADaM XPT Files -Version: 0.4.0 +Version: 0.3.0 Authors@R: c( person(given = "Eli", @@ -32,6 +32,22 @@ Authors@R: family = "Viyash", email = " ", role = "aut"), + person(given = "Andre", + family = "Verissimo", + email = "", + role = "aut"), + person(given = "Sophie", + family = "Shapcott", + email = "", + role = "aut"), + person(given = "Celine", + family = "Piraux", + email = "", + role = "aut"), + person(given = "Adrian", + family = "Chan", + email = "adrian.chan@roche.com", + role = "aut"), person(given = "Atorus/GSK JPT", role = "cph") ) diff --git a/man/xportr-package.Rd b/man/xportr-package.Rd index be3534ca..fc446477 100644 --- a/man/xportr-package.Rd +++ b/man/xportr-package.Rd @@ -27,6 +27,10 @@ Authors: \item Zelos Zhu \email{Zelos.Zhu@AtorusResearch.com} \item Ethan Brockmann \email{Ethan.Brockmann@AtorusResearch.com} \item Vedha Viyash + \item Andre Verissimo + \item Sophie Shapcott + \item Celine Piraux + \item Adrian Chan \email{adrian.chan@roche.com} } Other contributors: From 38d19933f8505ae3727249fe75a5367b666576d0 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Wed, 24 May 2023 20:50:44 +0000 Subject: [PATCH 165/337] feat: #84 explanding type section --- vignettes/deepdive.Rmd | 70 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 60 insertions(+), 10 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 7f123e68..31762b1d 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -16,9 +16,12 @@ knitr::opts_chunk$set( comment = " " ) +options(cli.num_colors = 1) + library(DT) library(rlang) library(haven) + ``` # Introduction @@ -55,22 +58,22 @@ The Study Data Standardization Plan (SDSP) establishes and documents a plan for __SDTM:__ The primary pieces of the SDTM package are the SDTM annotated case report forms (acrf.pdf), the data definitions document (define.xml), the Study Data Reviewer's Guide (sdrg.pdf) and the datasets in xpt Version 5 format. The Version 5 xpt file is the **required** submission format for all datasets going to the Health Authorities. -_ADaM:_ The key components of the ADaM package are very similar to SDTM package with a few additions: define.xml, Analysis Study Data Reviewer's Guide (adrg.pdf), Analysis Results Metadata (analysis-results-metadata.pdf) and datasets as Version 5 xpt format. +__ADaM:__ The key components of the ADaM package are very similar to SDTM package with a few additions: define.xml, Analysis Study Data Reviewer's Guide (adrg.pdf), Analysis Results Metadata (analysis-results-metadata.pdf) and datasets as Version 5 xpt format. As both Data Packages need compliant `xpt` files, we feel that `{xportr}` can play a pivotal role here. The core functions in `{xportr}` can be used to apply information from the _metadata object_ to the datasets giving users feedback on the quality of the metadata and data. The `xportr_write()` can then be used to write out the final dataset as an `xpt` file that can be submitted to a Health Authority. ## What is `{xportr}` validating in these Data Packages? -The `xpt` Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your packages for submission the suite of `{xportr}` functions and `xprotr_write()`, help to check that your datasets are submission compliant. The package checks many of the latest rules laid out in the [Study Data Technical Conformance Guide](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/study-data-technical-conformance-guide-technical-specifications-document), but please note that it is not yet an exhaustive list of checks. We envision that users are also submitting their `xpts` to additional validation software. +The `xpt` Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your packages for submission the suite of `{xportr}` functions and `xprotr_write()` help to check that your datasets are submission compliant. The package checks many of the latest rules laid out in the [Study Data Technical Conformance Guide](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/study-data-technical-conformance-guide-technical-specifications-document), but please note that it is not yet an exhaustive list of checks. We envision that users are also submitting their `xpts` and metadata to additional validation software. -Each of the core functions for applying labels, types, formats, order and lengths provide feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called. This function calls `xpt_validate()`, which is a behind the scenes function not available to users that does a final check for compliance. At the time of `{xportr} v0.3` we are checking the following when a user writes out an `xpt` file.: +Each of the core functions for applying labels, types, formats, order and lengths provide feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called. This function calls `xpt_validate()`, which is a behind the scenes/non-exported function not available to users that does a final check for compliance. At the time of `{xportr} v0.3` we are checking the following when a user writes out an `xpt` file.: validate # {xportr} in action -We are going to explore the 5 core `{xportr}` functions using paying: +We are going to explore the 5 core `{xportr}` functions using: * 5 ADaM datasets from the Pilot 3 Submission to the FDA * ADaM Specification Files from the Pilot 3 Submission to the FDA @@ -123,7 +126,7 @@ By using `options()` we are telling `{xportr}` that the following are the valid ## Going meta -Each of the core `{xportr}` functions require several inputs for it to work. A valid dataframe, a metadata object and a domain name along with optional messaging. For example, here is a simple call using all of the functions. A lot of information is repeated in each call. +Each of the core `{xportr}` functions require several inputs for it to work. A valid dataframe, a metadata object and a domain name along with optional messaging. For example, here is a simple call using all of the functions. As you can see a lot of information is repeated in each call, which is redundant! ```{r, eval = FALSE} adsl %>% @@ -152,7 +155,10 @@ adsl %>% ## Warnings and Errors -For the next six sections, we will either manipulate the ADaM dataset or specification file to help showcase the ability of the xportr functions to detect issues. +For the next six sections, we are going to explore the Warnings and Errors messages generated by `{xportr}` functions. To better explore these, we will either manipulate the ADaM dataset or specification file to help showcase the ability of the `{xportr}` functions to detect issues. + +**NOTE:** These datasets and specification are not available directly from the package. You can access them on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. This is to keep the package to a minimum size. + ```{r} # options(xportr.variable_name = "variable", @@ -163,22 +169,66 @@ For the next six sections, we will either manipulate the ADaM dataset or specifi # xportr.order_name = "order") ``` +### Setting up our metadata object + +First, lets read in the specification file and call it `var_spec`. We will also do some slight manipulation to the columns names by doing all lower case and changing `Data Type` to `type. + ```{r} var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") %>% dplyr::rename(type = "Data Type") %>% rlang::set_names(tolower) +``` -adsl_loc <- here::here("example_data_specs", "adsl.xpt") -adsl <- haven::read_xpt(adsl_loc) +```{r} +columns2hide <- c("significant digits", "mandatory", "assigned value", "codelist", "common", "origin", "pages", "method", "predecessor", "role", "comment", "developer notes") + +datatable( + var_spec, rownames = FALSE, + extensions = 'Buttons', options = list( + dom = 'Bfrtip', + columnDefs = list(list(visible = FALSE, targets = columns2hide ))) + ) ``` ### `xportr_type()` +We are going to explore the type column in the metadata object. A submission to a Health Authority should only have character and numeric types in the data. In the `ADSL` data we will have several columns that are in the Data type: `TRTSDT`, `TRTEDT`, `DISONSDT`, `VISIT1DT` and `RFENDT` and we will change one variable type to a factor variable. -```{r, eval = FALSE} +```{r} +adsl_loc <- here::here("example_data_specs", "adsl.xpt") +adsl <- haven::read_xpt(adsl_loc) %>% + mutate(STUDYID = as_factor(STUDYID)) +``` + +```{r, echo = FALSE} +adsl_glimpse <- adsl %>% + select(STUDYID, TRTSDT, TRTEDT, DISONSDT, VISIT1DT, RFENDT) +``` + +```{r, echo = TRUE} +glimpse(adsl_glimpse) +``` + +```{r, echo = TRUE} adsl_type <- xportr_type(adsl, var_spec, "ADSL", verbose = "warn") +``` +```{r, echo = FALSE} +adsl_type_glimpse <- adsl_type %>% + select(STUDYID, TRTSDT, TRTEDT, DISONSDT, VISIT1DT, RFENDT) +``` + +Success! As we can see below the `xportr_type()` function applied the types from the metadata object to the below columns converting them all to the proper type. + +```{r, echo = TRUE} +glimpse(adsl_type_glimpse) +``` + +Note that the `xportr_type(verbpse = "warn")` was set so the function has provided feedback, which would show up in the console, on which variables were converted as a warning message. However, you can set `verbose = 'stop'` so that the types are not applied as the data does not match what is in the specification file. + +```{r, echo = TRUE, error = TRUE} +adsl_type <- xportr_type(adsl, var_spec, "ADSL", verbose = "stop") ``` ### `xportr_length()` @@ -204,7 +254,7 @@ TODO: Incorrect label applied, none and message still give warning when I have a TODO: Weird characters in outputs. -```{r} +```{r, echo = TRUE} var_spec_lbl <- var_spec %>% mutate(label = if_else(variable == "TRTSDT", From d967bd7741327aa084f683844fb8aaebf403c88c Mon Sep 17 00:00:00 2001 From: bs832471 Date: Wed, 24 May 2023 20:53:02 +0000 Subject: [PATCH 166/337] chore: #84 news file updated --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index 96d4712f..57e2563c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -12,6 +12,7 @@ ## Documentation * Moved `{pkgdown}` site to bootswatch. Enabled search and linked slack icon (#122). +* Additional vignette showcasing functions and quality of life utilities for processing `xpts` created (#84) # xportr 0.2.0 From 9d390bb4be8651587a5eba801f8b969f5d10d601 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Wed, 24 May 2023 20:57:28 +0000 Subject: [PATCH 167/337] chore: fix for index --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 31762b1d..ef3876f0 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -5,7 +5,7 @@ output: toc: true check_title: TRUE vignette: > - %\VignetteIndexEntry{deepdive} + %\VignetteIndexEntry{Deep Dive into xportr} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- From 310703a5ddb29c8eb1db8ce4c1e4c1dc12888cad Mon Sep 17 00:00:00 2001 From: sadchla-codes Date: Thu, 25 May 2023 11:25:43 -0400 Subject: [PATCH 168/337] Added additional contributors --- DESCRIPTION | 13 +++---------- man/xportr-package.Rd | 13 +++++++------ 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index d3d68351..92c8d84c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -11,42 +11,35 @@ Authors@R: person(given = "Vignesh ", family = "Thanikachalam", role = c("aut"), - email = "vignesh.x.thanikachalam@gsk.com"), person(given = "Ben", family = "Straub", - email = "ben.x.straub@gsk.com", role = "aut"), person(given = "Ross", family = "Didenko", - email = "Ross.Didenko@AtorusResearch.com", role = "aut"), person(given = "Zelos", family = "Zhu", - email = "Zelos.Zhu@AtorusResearch.com", role = "aut"), person(given = "Ethan", family = "Brockmann", - email = "Ethan.Brockmann@AtorusResearch.com", role = "aut"), person(given = "Vedha", family = "Viyash", - email = " ", role = "aut"), person(given = "Andre", family = "Verissimo", - email = "", role = "aut"), person(given = "Sophie", family = "Shapcott", - email = "", role = "aut"), person(given = "Celine", family = "Piraux", - email = "", role = "aut"), person(given = "Adrian", family = "Chan", - email = "adrian.chan@roche.com", + role = "aut"), + person(given = "Sadchla", + family = "Mascary", role = "aut"), person(given = "Atorus/GSK JPT", role = "cph") diff --git a/man/xportr-package.Rd b/man/xportr-package.Rd index fc446477..5fd18f2e 100644 --- a/man/xportr-package.Rd +++ b/man/xportr-package.Rd @@ -21,16 +21,17 @@ Useful links: Authors: \itemize{ - \item Vignesh Thanikachalam \email{vignesh.x.thanikachalam@gsk.com} - \item Ben Straub \email{ben.x.straub@gsk.com} - \item Ross Didenko \email{Ross.Didenko@AtorusResearch.com} - \item Zelos Zhu \email{Zelos.Zhu@AtorusResearch.com} - \item Ethan Brockmann \email{Ethan.Brockmann@AtorusResearch.com} + \item Vignesh Thanikachalam + \item Ben Straub + \item Ross Didenko + \item Zelos Zhu + \item Ethan Brockmann \item Vedha Viyash \item Andre Verissimo \item Sophie Shapcott \item Celine Piraux - \item Adrian Chan \email{adrian.chan@roche.com} + \item Adrian Chan + \item Sadchla Mascary } Other contributors: From f973d9fc9d78a6de35bbaaa3fe2c7abfdf54655a Mon Sep 17 00:00:00 2001 From: sadchla-codes Date: Thu, 25 May 2023 11:30:46 -0400 Subject: [PATCH 169/337] Lint fix --- DESCRIPTION | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 92c8d84c..31fd4bdf 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -10,40 +10,39 @@ Authors@R: comment = c(ORCID = "0000-0002-2127-9456")), person(given = "Vignesh ", family = "Thanikachalam", - role = c("aut"), + role = c("aut")), person(given = "Ben", family = "Straub", - role = "aut"), + role = ("aut")), person(given = "Ross", family = "Didenko", - role = "aut"), + role = ("aut")), person(given = "Zelos", family = "Zhu", - role = "aut"), + role = ("aut")), person(given = "Ethan", family = "Brockmann", - role = "aut"), + role = ("aut")), person(given = "Vedha", family = "Viyash", - role = "aut"), + role = ("aut")), person(given = "Andre", family = "Verissimo", - role = "aut"), + role = ("aut")), person(given = "Sophie", family = "Shapcott", - role = "aut"), + role = ("aut")), person(given = "Celine", family = "Piraux", - role = "aut"), + role = ("aut")), person(given = "Adrian", family = "Chan", - role = "aut"), + role = ("aut")), person(given = "Sadchla", family = "Mascary", - role = "aut"), + role = ("aut")), person(given = "Atorus/GSK JPT", - role = "cph") - ) + role = "cph")) Description: Tools to build CDISC compliant data sets and check for CDISC compliance. URL: https://github.com/atorus-research/xportr BugReports: https://github.com/atorus-research/xportr/issues From 4c83cf2e8143c980aa1e09970b1cd88e40c001fc Mon Sep 17 00:00:00 2001 From: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Date: Thu, 25 May 2023 21:09:43 +0530 Subject: [PATCH 170/337] Update R/df_label.R Co-authored-by: Ben Straub --- R/df_label.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/df_label.R b/R/df_label.R index 2e0e7582..2f637ace 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -30,7 +30,7 @@ xportr_df_label <- function(.df, metadata, domain = NULL, metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( - when = "0.0.3", + when = "0.3.0", what = "xportr_format(metacore = )", with = "xportr_format(metadata = )" ) From b1ea174605e651fd2663b17f7bc35b2f950e944a Mon Sep 17 00:00:00 2001 From: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Date: Thu, 25 May 2023 21:09:53 +0530 Subject: [PATCH 171/337] Update NEWS.md Co-authored-by: Ben Straub --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 93424e5a..a4107d83 100644 --- a/NEWS.md +++ b/NEWS.md @@ -14,7 +14,7 @@ ## Deprecation and Breaking Changes -* The `metacore` argument has been renamed to `metadata` in the following six xportr functions: `xportr_df_label`, `xportr_format`, `xportr_label`, `xportr_length`, `xportr_order`, and `xportr_type`. Please update your code to use the new `metadata` argument in place of `metacore`. +* The `metacore` argument has been renamed to `metadata` in the following six xportr functions: `xportr_df_label()`, `xportr_format()`, `xportr_label()`, `xportr_length()`, `xportr_order()`, and `xportr_type()`. Please update your code to use the new `metadata` argument in place of `metacore`. # xportr 0.2.0 * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! * Fixed an issue where xportr_format could pass invalid formats to haven::write_xpt. From 08fe5b51c89db3c57a71c9b31fe71ee3c588de6d Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 25 May 2023 21:14:31 +0530 Subject: [PATCH 172/337] chore: update the proper version number --- R/format.R | 2 +- R/label.R | 2 +- R/length.R | 2 +- R/order.R | 2 +- R/type.R | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/R/format.R b/R/format.R index b6768165..e3208c31 100644 --- a/R/format.R +++ b/R/format.R @@ -36,7 +36,7 @@ xportr_format <- function( metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( - when = "0.0.3", + when = "0.3.0", what = "xportr_format(metacore = )", with = "xportr_format(metadata = )" ) diff --git a/R/label.R b/R/label.R index 88b919aa..1336937a 100644 --- a/R/label.R +++ b/R/label.R @@ -38,7 +38,7 @@ xportr_label <- function( metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( - when = "0.0.3", + when = "0.3.0", what = "xportr_format(metacore = )", with = "xportr_format(metadata = )" ) diff --git a/R/length.R b/R/length.R index 315446f4..4d9ab00b 100644 --- a/R/length.R +++ b/R/length.R @@ -36,7 +36,7 @@ xportr_length <- function( metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( - when = "0.0.3", + when = "0.3.0", what = "xportr_format(metacore = )", with = "xportr_format(metadata = )" ) diff --git a/R/order.R b/R/order.R index 8b052e64..521e794a 100644 --- a/R/order.R +++ b/R/order.R @@ -33,7 +33,7 @@ xportr_order <- function( metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( - when = "0.0.3", + when = "0.3.0", what = "xportr_format(metacore = )", with = "xportr_format(metadata = )" ) diff --git a/R/type.R b/R/type.R index a174a26e..129b6ba4 100644 --- a/R/type.R +++ b/R/type.R @@ -40,7 +40,7 @@ xportr_type <- function( metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( - when = "0.0.3", + when = "0.3.0", what = "xportr_format(metacore = )", with = "xportr_format(metadata = )" ) From 890d4ebf52a23e8b686a88c073d0fca1ef745b96 Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 26 May 2023 20:32:09 +0000 Subject: [PATCH 173/337] Updates for SAS formats --- R/utils-xportr.R | 15 +++++++++++---- tests/testthat/test-utils-xportr.R | 4 ++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index ae91bcc3..9f077def 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -241,16 +241,23 @@ xpt_validate <- function(data) { paste("datetime", 7:40, ".", sep = ""), paste("yymmdd", 2:10, ".", sep = ""), paste("mmddyy", 2:10, ".", sep = ""), - paste("ddmmyy", 2:10, ".", sep = "") + paste("ddmmyy", 2:10, ".", sep = ""), + "E8601DAw.", + "E8601DNw.", + "E8601TMw.d", + "E8601TZw.d", + "E8601LZw.d", + "E8601TXw.", + "E8601DTw.d", + "E8601DZw.d", + "E8601LXw.", + "E8601DXw." ) - # From https://www.myintervals.com/blog/2009/05/20/iso-8601-date-validation-that-doesnt-suck/ - iso_regex <- "^([\\+-]?\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))([T\\s]((([01]\\d|2[0-3])((:?)[0-5]\\d)?|24\\:?00)([\\.,]\\d+(?!:))?)?(\\17[0-5]\\d([\\.,]\\d+)?)?([zZ]|([\\+-])([01]\\d|2[0-3]):?([0-5]\\d)?)?)?)?$" # nolint: object_name, line_len format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" # 3.1 Invalid types is_valid <- formats %in% expected_formats | - purrr::map_lgl(formats, stringr::str_detect, iso_regex) | purrr::map_lgl(formats, stringr::str_detect, format_regex) chk_formats <- formats[!is_valid] diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index 857c4c4e..4b24704e 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -104,8 +104,8 @@ test_that("xpt_validate: Get error message when the variable type is invalid", { test_that("xpt_validate: Doesn't error out with iso8601 format", { df <- data.frame(A = 1, B = 2) - attr(df$A, "format.sas") <- "2022-01-01T12:12:12" - attr(df$B, "format.sas") <- "2009-W21-2T01:22" + attr(df$A, "format.sas") <- "E8601LXw." + attr(df$B, "format.sas") <- "E8601DXw." expect_equal( xpt_validate(df), character(0) From 354d25ef718e9c9e85ecdba76894eacb491c55de Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 26 May 2023 20:45:49 +0000 Subject: [PATCH 174/337] style fixes --- tests/testthat/test-utils-xportr.R | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index a94793ff..b3fb1cfc 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -101,14 +101,13 @@ test_that("xpt_validate: Doesn't error out with iso8601 format", { xpt_validate(df), character(0) ) - }) - +}) + test_that("xpt_validate: Get error message when the label contains non-ASCII, symbol or special characters", { df <- data.frame(A = 1, B = 2) attr(df$A, "label") <- "fooçbar" expect_equal( xpt_validate(df), "Label 'A=fooçbar' cannot contain any non-ASCII, symbol or special characters." - ) }) From 20cc00b12d7d875ae4ccca9bac73e3487d685145 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 30 May 2023 14:51:51 +0530 Subject: [PATCH 175/337] feat: adding tests to check if the deprecated `metacore` argument still works --- tests/testthat/test-depreciation.R | 103 +++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 tests/testthat/test-depreciation.R diff --git a/tests/testthat/test-depreciation.R b/tests/testthat/test-depreciation.R new file mode 100644 index 00000000..e2167849 --- /dev/null +++ b/tests/testthat/test-depreciation.R @@ -0,0 +1,103 @@ +test_that("xportr_df_label: deprecated metacore argument still works and gives warning", { + withr::local_options(lifecycle_verbosity = "quiet") + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame(dataset = "df", label = "Label") + + df_spec_labeled_df <- xportr_df_label(df, metacore = df_meta) + + expect_equal(attr(df_spec_labeled_df, "label"), "Label") + lifecycle::expect_deprecated( + xportr_df_label(df, metacore = df_meta), + "Please use the `metadata` argument instead." + ) +}) + +test_that("xportr_format: deprecated metacore argument still works and gives warning", { + withr::local_options(lifecycle_verbosity = "quiet") + df <- data.frame(x = 1, y = 2) + df_meta <- data.frame( + dataset = "df", + variable = "x", + format = "date9." + ) + + formatted_df <- xportr_format(df, metacore = df_meta) + + expect_equal(attr(formatted_df$x, "format.sas"), "DATE9.") + lifecycle::expect_deprecated( + xportr_format(df, metacore = df_meta), + "Please use the `metadata` argument instead." + ) +}) + +test_that("xportr_label: deprecated metacore argument still works and gives warning", { + withr::local_options(lifecycle_verbosity = "quiet") + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame(dataset = "df", variable = "x", label = "foo") + + df_labeled_df <- xportr_label(df, metacore = df_meta) + + expect_equal(attr(df_labeled_df$x, "label"), "foo") + lifecycle::expect_deprecated( + xportr_label(df, metacore = df_meta), + "Please use the `metadata` argument instead." + ) +}) + +test_that("xportr_length: deprecated metacore argument still works and gives warning", { + withr::local_options(lifecycle_verbosity = "quiet") + df <- data.frame(x = "a", y = "b") + df_meta <- data.frame( + dataset = "df", + variable = c("x", "y"), + type = c("text", "text"), + length = c(1, 2) + ) + + df_with_width <- xportr_length(df, metacore = df_meta) + + expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) + lifecycle::expect_deprecated( + xportr_length(df, metacore = df_meta), + "Please use the `metadata` argument instead." + ) +}) + +test_that("xportr_order: deprecated metacore argument still works and gives warning", { + withr::local_options(lifecycle_verbosity = "quiet") + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + df_meta <- data.frame( + dataset = "DOMAIN", + variable = letters[1:4], + order = 1:4 + ) + + ordered_df <- xportr_order(df, metacore = df_meta, domain = "DOMAIN") + + expect_equal(names(ordered_df), df_meta$variable) + lifecycle::expect_deprecated( + xportr_order(df, metacore = df_meta), + "Please use the `metadata` argument instead." + ) +}) + +test_that("xportr_type: deprecated metacore argument still works and gives warning", { + withr::local_options(lifecycle_verbosity = "quiet") + df <- data.frame( + Subj = as.character(c(123, 456, 789, "", NA, NA_integer_)), + Different = c("a", "b", "c", "", NA, NA_character_), + Val = c("1", "2", "3", "", NA, NA_character_), + Param = c("param1", "param2", "param3", "", NA, NA_character_) + ) + df_meta <- data.frame( + dataset = "df", + variable = c("Subj", "Param", "Val", "NotUsed"), + type = c("numeric", "character", "numeric", "character") + ) + + df2 <- xportr_type(df, metacore = df_meta) + lifecycle::expect_deprecated( + xportr_type(df, metacore = df_meta), + "Please use the `metadata` argument instead." + ) +}) From 8639af5176d9b43d2d4da3d7e21e89675b215323 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 30 May 2023 14:55:28 +0530 Subject: [PATCH 176/337] docs: update the documentation --- man/xportr_df_label.Rd | 2 +- man/xportr_format.Rd | 2 +- man/xportr_label.Rd | 2 +- man/xportr_length.Rd | 2 +- man/xportr_order.Rd | 2 +- man/xportr_type.Rd | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index ed2729cb..4b7dfa08 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -4,7 +4,7 @@ \alias{xportr_df_label} \title{Assign Dataset Label} \usage{ -xportr_df_label(.df, metadata, domain = NULL, metacore = deprecated()) +xportr_df_label(.df, metadata = NULL, domain = NULL, metacore = deprecated()) } \arguments{ \item{.df}{A data frame of CDISC standard.} diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index 695c32c9..94a07980 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -6,7 +6,7 @@ \usage{ xportr_format( .df, - metadata, + metadata = NULL, domain = NULL, verbose = getOption("xportr.length_verbose", "none"), metacore = deprecated() diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index f0138566..fdf357a2 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -6,7 +6,7 @@ \usage{ xportr_label( .df, - metadata, + metadata = NULL, domain = NULL, verbose = getOption("xportr.length_verbose", "none"), metacore = deprecated() diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index a9db65ff..b7c54d5b 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -6,7 +6,7 @@ \usage{ xportr_length( .df, - metadata, + metadata = NULL, domain = NULL, verbose = getOption("xportr.length_verbose", "none"), metacore = deprecated() diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index 6f48928c..dc566325 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -6,7 +6,7 @@ \usage{ xportr_order( .df, - metadata, + metadata = NULL, domain = NULL, verbose = getOption("xportr.length_verbose", "none"), metacore = deprecated() diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index efda5f87..ce22475c 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -6,7 +6,7 @@ \usage{ xportr_type( .df, - metadata, + metadata = NULL, domain = NULL, verbose = getOption("xportr.length_verbose", "none"), metacore = deprecated() From ebdc5795862641f850ed48377f086be441eeaaa3 Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 31 May 2023 00:52:13 +0000 Subject: [PATCH 177/337] Move adsl to data/ Styling linting --- DESCRIPTION | 2 + R/data.R | 57 ++++++++++++++++++ data/adsl.rda | Bin 0 -> 11859 bytes man/adsl.Rd | 69 +++++++++++++++++++++ man/xportr_metadata.Rd | 38 +++++++++++- vignettes/deepdive.Rmd | 134 ++++++++++++++++++++--------------------- vignettes/xportr.Rmd | 15 ++--- 7 files changed, 238 insertions(+), 77 deletions(-) create mode 100644 R/data.R create mode 100644 data/adsl.rda create mode 100644 man/adsl.Rd diff --git a/DESCRIPTION b/DESCRIPTION index 31fd4bdf..b4e3406e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -81,3 +81,5 @@ Suggests: metacore Config/testthat/edition: 3 VignetteBuilder: knitr +Depends: + R (>= 2.10) diff --git a/R/data.R b/R/data.R new file mode 100644 index 00000000..15e04f29 --- /dev/null +++ b/R/data.R @@ -0,0 +1,57 @@ +#' Analysis Dataset Subject Level +#' +#' An example dataset containing subject level data +#' +#' @format ## `adsl` +#' A data frame with 254 rows and 48 columns: +#' \describe{ +#' \item{STUDYID}{Study Identifier} +#' \item{USUBJID}{Unique Subject Identifier} +#' \item{SUBJID}{Subject Identifier for the Study} +#' \item{SITEID}{Study Site Identifier} +#' \item{SITEGR1}{Pooled Site Group 1} +#' \item{ARM}{Description of Planned Arm} +#' \item{TRT01P}{Planned Treatment for Period 01} +#' \item{TRT01PN}{Planned Treatment for Period 01 (N)} +#' \item{TRT01A}{Actual Treatment for Period 01} +#' \item{TRT01AN}{Actual Treatment for Period 01 (N)} +#' \item{TRTSDT}{Date of First Exposure to Treatment} +#' \item{TRTEDT}{Date of Last Exposure to Treatment} +#' \item{TRTDUR}{Duration of Treatment (days)} +#' \item{AVGDD}{Avg Daily Dose (as planned)} +#' \item{CUMDOSE}{Cumulative Dose (as planned)} +#' \item{AGE}{Age} +#' \item{AGEGR1}{Pooled Age Group 1} +#' \item{AGEGR1N}{Pooled Age Group 1 (N)} +#' \item{AGEU}{Age Units} +#' \item{RACE}{Race} +#' \item{RACEN}{Race (N)} +#' \item{SEX}{Sex} +#' \item{ETHNIC}{Ethnicity} +#' \item{SAFFL}{Safety Population Flag} +#' \item{ITTFL}{Intent-To-Treat Population Flag} +#' \item{EFFFL}{Efficacy Population Flag} +#' \item{COMP8FL}{Completers of Week 8 Population Flag} +#' \item{COMP16FL}{Completers of Week 16 Population Flag} +#' \item{COMP24FL}{Completers of Week 24 Population Flag} +#' \item{DISCONFL}{Did the Subject Discontinue the Study} +#' \item{DSRAEFL}{Discontinued due to AE} +#' \item{DTHFL}{Subject Died} +#' \item{BMIBL}{Baseline BMI (kg/m^2)} +#' \item{BMIBLGR1}{Pooled Baseline BMI Group 1} +#' \item{HEIGHTBL}{Baseline Height (cm)} +#' \item{WEIGHTBL}{Baseline Weight (kg)} +#' \item{EDUCLVL}{Years of Education} +#' \item{DISONSDT}{Date of Onset of Disease} +#' \item{DURDIS}{Duration of Disease (Months)} +#' \item{DURDSGR1}{Pooled Disease Duration Group 1} +#' \item{VISIT1DT}{Date of Visit 1} +#' \item{RFSTDTC}{Subject Reference Start Date/Time} +#' \item{RFENDTC}{Subject Reference End Date/Time} +#' \item{VISNUMEN}{End of Trt Visit (Vis 12 or Early Term.)} +#' \item{RFENDT}{Date of Discontinuation/Completion} +#' \item{DCDECOD}{Standardized Disposition Term} +#' \item{DCREASCD}{Reason for Discontinuation} +#' \item{MMSETOT}{MMSE Total} +#' } +"adsl" diff --git a/data/adsl.rda b/data/adsl.rda new file mode 100644 index 0000000000000000000000000000000000000000..21ae127f23e7acf15c02a18b64907c05c132961b GIT binary patch literal 11859 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\% + xportr_metadata(metadata, "test") \%>\% + xportr_type() \%>\% + xportr_order() +} metadata <- data.frame( dataset = "test", variable = c("Subj", "Param", "Val", "NotUsed"), diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index ef3876f0..f78d9ab8 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -21,7 +21,6 @@ options(cli.num_colors = 1) library(DT) library(rlang) library(haven) - ``` # Introduction @@ -30,14 +29,14 @@ This vignette will take explore in detail all the possibilities of the `{xportr} We will also explore the following: - * What goes in a Submission to a Health Authority? - * What is `{xportr}` validating behind the scenes? - * Breakdown of `{xportr}` and a ADaM dataset specification file. - * Using `options()` and `xportr_metadata()` to enhance your `{xportr}` experience. - * Understanding the warning and error messages for each `{xportr}` function. - * Using `{xportr}` to bulk process multiple datasets. - * Preparing xpt files for upload to a validation software. - * Future work +* What goes in a Submission to a Health Authority? +* What is `{xportr}` validating behind the scenes? +* Breakdown of `{xportr}` and a ADaM dataset specification file. +* Using `options()` and `xportr_metadata()` to enhance your `{xportr}` experience. +* Understanding the warning and error messages for each `{xportr}` function. +* Using `{xportr}` to bulk process multiple datasets. +* Preparing xpt files for upload to a validation software. +* Future work **NOTE:** We use the phrase _metadata object_ through out this package. A _metadata object_ can either be a specification file read into R as a dataframe or a `{metacore}` object. The _metadata object_ created in `{metacore}` has additional features not covered here, but at its core is using a specification file. However, the intention of `{xportr}` is for it to work with either a dataframe or a `{metacore}` object. @@ -105,23 +104,24 @@ library(dplyr) library(xportr) library(here) library(readxl) - +data("adsl", package = "xportr") spec_loc <- here::here("example_data_specs", "TDF_ADaM_Pilot3.xlsx") var_spec <- read_xlsx(spec_loc, sheet = "Variables") colnames(var_spec) - ``` By using `options()` we are telling `{xportr}` that the following are the valid Variable names as seen below. Before we set the options the package assumed every thing was in lowercase and there were no spaces in the names. ```{r} -# options(xportr.variable_name = "Variable", -# xportr.label = "Label", -# xportr.type_name = "Data Type", -# xportr.format = "Format", -# xportr.length = "Length", -# xportr.order_name = "Order") +options( + xportr.variable_name = "Variable", + xportr.label = "Label", + xportr.type_name = "Data Type", + xportr.format = "Format", + xportr.length = "Length", + xportr.order_name = "Order" +) ``` ## Going meta @@ -149,7 +149,6 @@ adsl %>% xportr_order() %>% xportr_format() %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") - ``` @@ -161,12 +160,14 @@ For the next six sections, we are going to explore the Warnings and Errors messa ```{r} -# options(xportr.variable_name = "variable", -# xportr.label = "label", -# xportr.type_name = "type", -# xportr.format = "format", -# xportr.length = "length", -# xportr.order_name = "order") +options( + xportr.variable_name = "variable", + xportr.label = "label", + xportr.type_name = "type", + xportr.format = "format", + xportr.length = "length", + xportr.order_name = "order" +) ``` ### Setting up our metadata object @@ -174,20 +175,26 @@ For the next six sections, we are going to explore the Warnings and Errors messa First, lets read in the specification file and call it `var_spec`. We will also do some slight manipulation to the columns names by doing all lower case and changing `Data Type` to `type. ```{r} -var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") %>% +var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") %>% dplyr::rename(type = "Data Type") %>% rlang::set_names(tolower) ``` ```{r} -columns2hide <- c("significant digits", "mandatory", "assigned value", "codelist", "common", "origin", "pages", "method", "predecessor", "role", "comment", "developer notes") +columns2hide <- c( + "significant digits", "mandatory", "assigned value", "codelist", "common", + "origin", "pages", "method", "predecessor", "role", "comment", + "developer notes" +) datatable( - var_spec, rownames = FALSE, - extensions = 'Buttons', options = list( - dom = 'Bfrtip', - columnDefs = list(list(visible = FALSE, targets = columns2hide ))) + var_spec, + rownames = FALSE, + extensions = "Buttons", options = list( + dom = "Bfrtip", + columnDefs = list(list(visible = FALSE, targets = columns2hide)) ) +) ``` ### `xportr_type()` @@ -195,14 +202,12 @@ datatable( We are going to explore the type column in the metadata object. A submission to a Health Authority should only have character and numeric types in the data. In the `ADSL` data we will have several columns that are in the Data type: `TRTSDT`, `TRTEDT`, `DISONSDT`, `VISIT1DT` and `RFENDT` and we will change one variable type to a factor variable. ```{r} -adsl_loc <- here::here("example_data_specs", "adsl.xpt") - -adsl <- haven::read_xpt(adsl_loc) %>% - mutate(STUDYID = as_factor(STUDYID)) +adsl <- adsl %>% + mutate(STUDYID = as_factor(STUDYID)) ``` ```{r, echo = FALSE} -adsl_glimpse <- adsl %>% +adsl_glimpse <- adsl %>% select(STUDYID, TRTSDT, TRTEDT, DISONSDT, VISIT1DT, RFENDT) ``` @@ -215,7 +220,7 @@ adsl_type <- xportr_type(adsl, var_spec, "ADSL", verbose = "warn") ``` ```{r, echo = FALSE} -adsl_type_glimpse <- adsl_type %>% +adsl_type_glimpse <- adsl_type %>% select(STUDYID, TRTSDT, TRTEDT, DISONSDT, VISIT1DT, RFENDT) ``` @@ -239,11 +244,10 @@ TODO: There is no message to users about how many lengths were applied to the da ```{r, eval = FALSE} -var_spec_len <- var_spec %>% - mutate(length = if_else(variable == "STUDYID", "222", length )) +var_spec_len <- var_spec %>% + mutate(length = if_else(variable == "STUDYID", "222", length)) adsl_len <- xportr_length(adsl, var_spec_len, "ADSL", verbose = "message") - ``` ### `xportr_label()` @@ -256,12 +260,12 @@ TODO: Weird characters in outputs. ```{r, echo = TRUE} -var_spec_lbl <- var_spec %>% - mutate(label = if_else(variable == "TRTSDT", - "Length of variable label must be 40 characters or less", label)) +var_spec_lbl <- var_spec %>% + mutate(label = if_else(variable == "TRTSDT", + "Length of variable label must be 40 characters or less", label + )) adsl_lbl <- xportr_label(adsl, var_spec_lbl, "ADSL", verbose = "warn") - ``` ### `xportr_order()` @@ -272,11 +276,10 @@ TODO: What about a check on have a non-numeric value in the ordering column? I p ```{r} -var_spec_ord <- var_spec %>% +var_spec_ord <- var_spec %>% mutate(order = if_else(variable == "TRTSDT", "X", order)) adsl_ord <- xportr_order(adsl, var_spec, "ADSL", verbose = "warn") - ``` ### `xportr_format()` @@ -285,12 +288,11 @@ TODO: No warning issue for incorrect format type. I put in a "DATA" format and ```{r} -var_spec_fmt <- var_spec %>% +var_spec_fmt <- var_spec %>% mutate(format = if_else(variable == "TRTSDT", "DATA", format)) adsl_fmt <- xportr_format(adsl, var_spec_fmt, "ADSL", verbose = "warn") - ``` ### `xportr_write()` @@ -301,13 +303,12 @@ TODO: xpt_validate catches my DATA format, but `xportr_format()` does not catch TODO: I don't think `xportr_write()` works in the README and Get Started -```{r} -var_spec_wrt <- var_spec %>% +```{r, eval=FALSE} +var_spec_wrt <- var_spec %>% mutate(format = if_else(variable == "TRTSDT", "DATA", format)) xportr_write(adsl, path = "/cloud/project/adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = FALSE) - ``` ` @@ -326,40 +327,38 @@ data_loc <- str_remove(spec_loc, "/TDF_ADaM_Pilot3.xlsx") var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") path_of_xpt_files <- list.files(data_loc, pattern = ".xpt", full.names = TRUE) - ``` ## Read in all 5 xpts files ```{r} -filepaths <- path_of_xpt_files %>% - set_names(nm = basename(.) %>% - tools::file_path_sans_ext()) +filepaths <- path_of_xpt_files %>% + set_names(nm = basename(.) %>% + tools::file_path_sans_ext()) files <- purrr::map(filepaths, read_xpt) -purrr::pmap(.l = list(.x = names(files), .y = files), .f = ~assign(.x, .y, envir = .GlobalEnv)) +purrr::pmap(.l = list(.x = names(files), .y = files), .f = ~ assign(.x, .y, envir = .GlobalEnv)) ``` ## Apply specification file to all 5 xpts files ```{r, eval = FALSE} -xportr_apply_all <- function(spec_file, domain_name, data, path_name, label){ +xportr_apply_all <- function(spec_file, domain_name, data, path_name, label) { adsl %>% - xportr_metadata({{spec_file}}, {{domain_name}}) %>% - xportr_type() %>% - xportr_length() %>% - xportr_label() %>% - xportr_order() %>% - xportr_format() %>% - xportr_write(.df = {{data}}, path = {{path}}, label = {{label}}) + xportr_metadata({{ spec_file }}, {{ domain_name }}) %>% + xportr_type() %>% + xportr_length() %>% + xportr_label() %>% + xportr_order() %>% + xportr_format() %>% + xportr_write(.df = {{ data }}, path = {{ path }}, label = {{ label }}) } -xportr_apply_all(var_spec, "ADSL", adsl, - path = "/cloud/project/adsl.xpt", label = "Subject-Level Analysis Dataset") - - +xportr_apply_all(var_spec, "ADSL", adsl, + path = "/cloud/project/adsl.xpt", label = "Subject-Level Analysis Dataset" +) ``` @@ -374,7 +373,6 @@ DT::datatable(var_spec_view, options = list( autoWidth = FALSE, scrollX = TRUE, pageLength = 5, lengthMenu = c(5, 10, 15, 20) )) - ``` ## Contrived Examples for Error and Warning Messages diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index b1d557e8..361b2988 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -18,13 +18,14 @@ knitr::opts_chunk$set( library(DT) -options(xportr.variable_name = "variable", - xportr.label = "label", - xportr.type_name = "type", - xportr.format = "format", - xportr.length = "length", - xportr.order_name = "order") - +options( + xportr.variable_name = "variable", + xportr.label = "label", + xportr.type_name = "type", + xportr.format = "format", + xportr.length = "length", + xportr.order_name = "order" +) ``` ```{r, include=FALSE} From 6beb2727f51c603f4c5f20325c2d9e66879684df Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 31 May 2023 01:19:04 +0000 Subject: [PATCH 178/337] Change is null logic --- R/type.R | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/R/type.R b/R/type.R index bac6bb9b..fad80c71 100644 --- a/R/type.R +++ b/R/type.R @@ -63,7 +63,9 @@ xportr_type <- function( ## Pull out correct metadata metadata <- metadata %||% - attr(.df, "_xportr.df_metadata_") %||% + attr(.df, "_xportr.df_metadata_") + + if (is.null(metadata)) rlang::abort("Metadata must be set with `metadata` or `xportr_metadata()`") if (inherits(metadata, "Metacore")) { From 36f188ad818e6d48f922d6edf6eef78dd4b942e9 Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 31 May 2023 01:24:05 +0000 Subject: [PATCH 179/337] remove here --- data/var_spec.rda | Bin 0 -> 4214 bytes vignettes/deepdive.Rmd | 8 -------- 2 files changed, 8 deletions(-) create mode 100644 data/var_spec.rda diff --git a/data/var_spec.rda b/data/var_spec.rda new file mode 100644 index 0000000000000000000000000000000000000000..759f9a1f46b6cad174cdba04823ec7c2a1bf089f GIT binary patch literal 4214 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 Date: Wed, 31 May 2023 01:31:59 +0000 Subject: [PATCH 180/337] fix var_spec --- R/data.R | 27 +++++++++++++++++++++++++++ vignettes/deepdive.Rmd | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/R/data.R b/R/data.R index 15e04f29..c7248d44 100644 --- a/R/data.R +++ b/R/data.R @@ -55,3 +55,30 @@ #' \item{MMSETOT}{MMSE Total} #' } "adsl" + +#' Example Dataset Specification +#' +#' @format ## `var_spec` +#' A data frame with 216 rows and 19 columns: +#' \describe:{ +#' \item{Order} +#' \item{Dataset} +#' \item{Variable} +#' \item{Label} +#' \item{Data Type} +#' \item{Length} +#' \item{Significant Digits} +#' \item{Format} +#' \item{Mandatory} +#' \item{Assigned Value} +#' \item{Codelist} +#' \item{Common} +#' \item{Origin} +#' \item{Pages} +#' \item{Method} +#' \item{Predecessor} +#' \item{Role} +#' \item{Comment} +#' \item{Developer Notes} +#' } +"var_spec" diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index eef9f3b8..0200c991 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -167,7 +167,7 @@ options( First, lets read in the specification file and call it `var_spec`. We will also do some slight manipulation to the columns names by doing all lower case and changing `Data Type` to `type. ```{r} -var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") %>% +var_spec <- var_spec %>% dplyr::rename(type = "Data Type") %>% rlang::set_names(tolower) ``` From 5a63b2c3d7938906b2fb0b4ef25eacd29eab2778 Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 31 May 2023 01:38:34 +0000 Subject: [PATCH 181/337] set eval to false --- vignettes/deepdive.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 0200c991..eb784ed3 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -307,7 +307,7 @@ xportr_write(adsl, path = "/cloud/project/adsl.xpt", label = "Subject-Level Anal # Using `{xportr}` to bulk process multiple datasets. -```{r, message=FALSE} +```{r, message=FALSE,eval=FALSE} library(dplyr) library(xportr) @@ -323,7 +323,7 @@ path_of_xpt_files <- list.files(data_loc, pattern = ".xpt", full.names = TRUE) ## Read in all 5 xpts files -```{r} +```{r,eval=FALSE} filepaths <- path_of_xpt_files %>% set_names(nm = basename(.) %>% tools::file_path_sans_ext()) From c83e7786454a6e4ff3c9979946dbe2f40df98a51 Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 31 May 2023 01:43:33 +0000 Subject: [PATCH 182/337] Move bulk processing out to issue --- vignettes/deepdive.Rmd | 64 ------------------------------------------ 1 file changed, 64 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index eb784ed3..efd7517f 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -302,70 +302,6 @@ var_spec_wrt <- var_spec %>% xportr_write(adsl, path = "/cloud/project/adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = FALSE) ``` -` - - -# Using `{xportr}` to bulk process multiple datasets. - -```{r, message=FALSE,eval=FALSE} - -library(dplyr) -library(xportr) -library(stringr) - -spec_loc <- here::here("example_data_specs", "TDF_ADaM_Pilot3.xlsx") -data_loc <- str_remove(spec_loc, "/TDF_ADaM_Pilot3.xlsx") - -var_spec <- readxl::read_xlsx(spec_loc, sheet = "Variables") - -path_of_xpt_files <- list.files(data_loc, pattern = ".xpt", full.names = TRUE) -``` - -## Read in all 5 xpts files - -```{r,eval=FALSE} -filepaths <- path_of_xpt_files %>% - set_names(nm = basename(.) %>% - tools::file_path_sans_ext()) - -files <- purrr::map(filepaths, read_xpt) - -purrr::pmap(.l = list(.x = names(files), .y = files), .f = ~ assign(.x, .y, envir = .GlobalEnv)) -``` - -## Apply specification file to all 5 xpts files - -```{r, eval = FALSE} - -xportr_apply_all <- function(spec_file, domain_name, data, path_name, label) { - adsl %>% - xportr_metadata({{ spec_file }}, {{ domain_name }}) %>% - xportr_type() %>% - xportr_length() %>% - xportr_label() %>% - xportr_order() %>% - xportr_format() %>% - xportr_write(.df = {{ data }}, path = {{ path }}, label = {{ label }}) -} - -xportr_apply_all(var_spec, "ADSL", adsl, - path = "/cloud/project/adsl.xpt", label = "Subject-Level Analysis Dataset" -) -``` - - - - - -```{r} - -var_spec_view <- var_spec %>% filter(Dataset == "ADSL") - -DT::datatable(var_spec_view, options = list( - autoWidth = FALSE, scrollX = TRUE, pageLength = 5, - lengthMenu = c(5, 10, 15, 20) -)) -``` ## Contrived Examples for Error and Warning Messages From 750f694a2e41f4b7f9953b3cec70b8a8731e7df2 Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 31 May 2023 01:47:59 +0000 Subject: [PATCH 183/337] Update flow diagram --- man/figures/design_flow.png | Bin 54033 -> 182410 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/man/figures/design_flow.png b/man/figures/design_flow.png index beef0e5266212f6370b9e47350518a51dc354e36..63ae8d1aafbbbaec978e389bb2f8d8216778791d 100644 GIT binary patch literal 182410 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

    uiHam9(Y->uwY3 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 literal 54033 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 z zCSSGmx|m4ogRkxV{azAY(zdpW&07wuVlaLaBJf#q1P*iJTZZl@sklV0unRHJ(0i7a z)_-gGUv@4?_<`B}lT%aZmdhQBI?boJd{gJVI?#6(1|5?(-H-}ny@E@WKz zIA|&bN>qSIu8xv0Ey~9sy?6ci1zH%gvaF3d?B6KP^-$UMbfyy8E&RD!g8)+c+V@%~o# z^XJdo@4MmYyBNncE1l}Nyv%g)R@(oq~TkbpZ zRSHKJa5?UfvHcw5!uY8FUTe^r4?M3l8~V`Fva;m?VoL+HxHG60;iEtz!7t^uf8+H^ zqxa>?edxZjJ&{pM=z@r%cv?KIs7Q49jAQ?L<6ZIxz^srz06@^<%uJQ72#(VkGkGJU zs5x3QhW82q{>sYA=rZY(A~oAs+{VU+L6MV4Z;mnj@M|p&NZn+gOouzoc0a_tX3cpW z4|6A%-lah4J&tcjDtL|exj|-G8M#zR${q!RNeF9)L?Z9pdES!L2XJ4e0*CwRQ53^o z{n>K1BO@s(iS)Eg?qAS6KFQ{IzME*%#+i^EeR^RWx(9@ei@x;c;rLAuh>fpo&PKtH z<2|4R4QCZjD1j$db4uUPP$g39OR_5@c)M5CDO=2|JXc{}L417t{z+Y-%{tn+OCPPx z%3W@^{uHzi#-X0$HeZkjC+pFZcjPnqAD%D+47Sd!!r!T;n!|k_7|bj@1#SHh2@g56 ziuY^>&oIiQ3A}G&sJI5h6gg>!r3dXAMdy()DYC+fsK%^WwmIN8W`y4RTpFofxb-^&e$e`raX9;z+Z8DE}`#qgXKl{i7);SDiqw z$_JEGr=P!vheu7EHt12Uz9;Q=9RhLgsO3L$0e*}p^ge*#&@~t~QT{VULuJh>J5k{Y z%qtG0s{>FRSqX`95?l?SiJWDYPpz#rmwy7&W8ikvJ$e>g>I@6N{_Yb5QLrN>z%wDHjrh^lL-Fhu?rV2NCh13!@wOMZ*K-bkvX}!eo)fp=jRtB<9KyuSY+}G ofVu$xzhC_yL;R4v7V|@{N?|(l#e6I|mQkoFYboU^K79870CP>mtN;K2 From 4796cb48976f39cb444df35f10397c3f00736c7f Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 31 May 2023 01:57:04 +0000 Subject: [PATCH 184/337] Add var_spec documentation. Remove extra metadata file --- R/data.R | 40 ++++++++++++++++++++-------------------- R/xportr_metadata.R | 39 --------------------------------------- man/var_spec.Rd | 40 ++++++++++++++++++++++++++++++++++++++++ man/xportr_metadata.Rd | 37 ++++++++----------------------------- 4 files changed, 68 insertions(+), 88 deletions(-) delete mode 100644 R/xportr_metadata.R create mode 100644 man/var_spec.Rd diff --git a/R/data.R b/R/data.R index c7248d44..96e24de2 100644 --- a/R/data.R +++ b/R/data.R @@ -60,25 +60,25 @@ #' #' @format ## `var_spec` #' A data frame with 216 rows and 19 columns: -#' \describe:{ -#' \item{Order} -#' \item{Dataset} -#' \item{Variable} -#' \item{Label} -#' \item{Data Type} -#' \item{Length} -#' \item{Significant Digits} -#' \item{Format} -#' \item{Mandatory} -#' \item{Assigned Value} -#' \item{Codelist} -#' \item{Common} -#' \item{Origin} -#' \item{Pages} -#' \item{Method} -#' \item{Predecessor} -#' \item{Role} -#' \item{Comment} -#' \item{Developer Notes} +#' \describe{ +#' \item{Order}{Order of variable} +#' \item{Dataset}{Dataset} +#' \item{Variable}{Variable} +#' \item{Label}{Variable Label} +#' \item{Data Type}{Data Type} +#' \item{Length}{Variable Length} +#' \item{Significant Digits}{Significant Digits} +#' \item{Format}{Variable Format} +#' \item{Mandatory}{Mandatory Variable Flag} +#' \item{Assigned Value}{Variable Assigned Value} +#' \item{Codelist}{Variable Codelist} +#' \item{Common}{Common Variable Flag} +#' \item{Origin}{Variable Origin} +#' \item{Pages}{Pages} +#' \item{Method}{Variable Method} +#' \item{Predecessor}{Variable Predecessor} +#' \item{Role}{Variable Role} +#' \item{Comment}{Comment} +#' \item{Developer Notes}{Developer Notes} #' } "var_spec" diff --git a/R/xportr_metadata.R b/R/xportr_metadata.R deleted file mode 100644 index 6b62c835..00000000 --- a/R/xportr_metadata.R +++ /dev/null @@ -1,39 +0,0 @@ -#' Set variable specifications and domain -#' -#' @param .df An R object with columns that can be coerced -#' @param metacore Either a data.frame that has the names of all possible columns -#' and their types, or a `Metacore` object from the `Metacore` package. Required -#' column names are dataset, variables, type -#' @param domain Name of the dataset. Ex ADAE/DM. This will be used to subset -#' the metacore object. If none is passed it is assumed to be the name of the -#' dataset passed in `.df`. -#' -#' @return `.df` dataset with metadata and domain attributes set -#' @export -#' -#' @examples -#' metadata <- data.frame( -#' dataset = "test", -#' variable = c("Subj", "Param", "Val", "NotUsed"), -#' type = c("numeric", "character", "numeric", "character") -#' ) -#' -#' .df <- data.frame( -#' Subj = as.character(123, 456, 789), -#' Different = c("a", "b", "c"), -#' Val = c("1", "2", "3"), -#' Param = c("param1", "param2", "param3") -#' ) -#' -#' df2 <- xportr_metadata(.df, metadata, "test") -xportr_metadata <- function(.df, metacore, domain = NULL) { - ## Common section to detect domain from argument or pipes - - df_arg <- tryCatch(as_name(enexpr(.df)), error = function(err) NULL) - domain <- get_domain(.df, df_arg, domain) - if (!is.null(domain)) attr(.df, "_xportr.df_arg_") <- domain - - ## End of common section - - structure(.df, metadata = metacore) -} diff --git a/man/var_spec.Rd b/man/var_spec.Rd new file mode 100644 index 00000000..1b688c9c --- /dev/null +++ b/man/var_spec.Rd @@ -0,0 +1,40 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data.R +\docType{data} +\name{var_spec} +\alias{var_spec} +\title{Example Dataset Specification} +\format{ +\subsection{\code{var_spec}}{ + +A data frame with 216 rows and 19 columns: +\describe{ +\item{Order}{Order of variable} +\item{Dataset}{Dataset} +\item{Variable}{Variable} +\item{Label}{Variable Label} +\item{Data Type}{Data Type} +\item{Length}{Variable Length} +\item{Significant Digits}{Significant Digits} +\item{Format}{Variable Format} +\item{Mandatory}{Mandatory Variable Flag} +\item{Assigned Value}{Variable Assigned Value} +\item{Codelist}{Variable Codelist} +\item{Common}{Common Variable Flag} +\item{Origin}{Variable Origin} +\item{Pages}{Pages} +\item{Method}{Variable Method} +\item{Predecessor}{Variable Predecessor} +\item{Role}{Variable Role} +\item{Comment}{Comment} +\item{Developer Notes}{Developer Notes} +} +} +} +\usage{ +var_spec +} +\description{ +Example Dataset Specification +} +\keyword{datasets} diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index 18ea5fe8..f92c62b1 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -1,30 +1,23 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/metadata.R, R/xportr_metadata.R +% Please edit documentation in R/metadata.R \name{xportr_metadata} \alias{xportr_metadata} \title{Set variable specifications and domain} \usage{ -xportr_metadata(.df, metacore, domain = NULL) - -xportr_metadata(.df, metacore, domain = NULL) +xportr_metadata(.df, metadata, domain = NULL) } \arguments{ -\item{.df}{An R object with columns that can be coerced} - -\item{metacore}{Either a data.frame that has the names of all possible columns -and their types, or a \code{Metacore} object from the \code{Metacore} package. Required -column names are dataset, variables, type} - -\item{domain}{Name of the dataset. Ex ADAE/DM. This will be used to subset -the metacore object. If none is passed it is assumed to be the name of the -dataset passed in \code{.df}.} +\item{.df}{A dataframe with columns that can be manipulated by other xportr +functions} \item{metadata}{An appropriate metadata object that has available column-level metadata appropriate for use in other xportr functions} + +\item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +the metadata object. If none is passed, then name of the dataset passed .df +will be used.} } \value{ -\code{.df} dataset with metadata and domain attributes set - \code{.df} dataset with metadata and domain attributes set } \description{ @@ -58,18 +51,4 @@ if (rlang::is_installed("magrittr")) { xportr_type() \%>\% xportr_order() } -metadata <- data.frame( - dataset = "test", - variable = c("Subj", "Param", "Val", "NotUsed"), - type = c("numeric", "character", "numeric", "character") -) - -.df <- data.frame( - Subj = as.character(123, 456, 789), - Different = c("a", "b", "c"), - Val = c("1", "2", "3"), - Param = c("param1", "param2", "param3") -) - -df2 <- xportr_metadata(.df, metadata, "test") } From b25cb4ecf0a876fd9092f99cbb666c03fee7bfc8 Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 31 May 2023 01:58:37 +0000 Subject: [PATCH 185/337] Add package style --- R/format.R | 11 +++++------ R/label.R | 11 +++++------ R/length.R | 11 +++++------ R/order.R | 11 +++++------ R/type.R | 14 +++++++------- 5 files changed, 27 insertions(+), 31 deletions(-) diff --git a/R/format.R b/R/format.R index 9c8fd527..bfc6bd40 100644 --- a/R/format.R +++ b/R/format.R @@ -28,12 +28,11 @@ #' ) #' #' adsl <- xportr_format(adsl, metadata) -xportr_format <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_format <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/label.R b/R/label.R index 738a5d50..e627c85c 100644 --- a/R/label.R +++ b/R/label.R @@ -30,12 +30,11 @@ #' ) #' #' adsl <- xportr_label(adsl, metadata) -xportr_label <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_label <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/length.R b/R/length.R index dd6842dd..46f6b26c 100644 --- a/R/length.R +++ b/R/length.R @@ -28,12 +28,11 @@ #' ) #' #' adsl <- xportr_length(adsl, metadata) -xportr_length <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_length <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/order.R b/R/order.R index a49a560f..769a24a1 100644 --- a/R/order.R +++ b/R/order.R @@ -25,12 +25,11 @@ #' ) #' #' adsl <- xportr_order(adsl, metadata) -xportr_order <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_order <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/type.R b/R/type.R index fad80c71..34d15fce 100644 --- a/R/type.R +++ b/R/type.R @@ -32,12 +32,11 @@ #' ) #' #' df2 <- xportr_type(.df, metadata, "test") -xportr_type <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_type <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", @@ -65,8 +64,9 @@ xportr_type <- function( metadata <- metadata %||% attr(.df, "_xportr.df_metadata_") - if (is.null(metadata)) + if (is.null(metadata)) { rlang::abort("Metadata must be set with `metadata` or `xportr_metadata()`") + } if (inherits(metadata, "Metacore")) { metadata <- metadata$var_spec From c0f84b0506404edc08353aa6c3019c0abc5a85c2 Mon Sep 17 00:00:00 2001 From: "Chan, Adrian {MDBT~Mississauga}" Date: Wed, 31 May 2023 05:38:33 +0200 Subject: [PATCH 186/337] updated to account for DT, DTM, TM variables --- R/type.R | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/R/type.R b/R/type.R index fa07c3f5..6fdb3e33 100644 --- a/R/type.R +++ b/R/type.R @@ -39,6 +39,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, type_name <- getOption("xportr.type_name") characterTypes <- c(getOption("xportr.character_types"), "_character") numericTypes <- c(getOption("xportr.numeric_types"), "_numeric") + formats <- metacore[['var_spec']] ## Common section to detect domain from argument or pipes @@ -103,13 +104,18 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, function(x, i, is_correct) { if (!is_correct[i]) { orig_attributes <- attributes(.df[[i]]) - orig_attributes$class <- NULL if (correct_type[i] %in% characterTypes) { .df[[i]] <<- as.character(.df[[i]]) } else { - .df[[i]] <<- as.numeric(.df[[i]]) + .df[[i]] <<- as.numeric(.df[[i]]) } + + if (grepl('DT$|DTM$|TM$', colnames(df[i])) & + !is.na(formats[as.vector(formats$variable) == colnames(df[i]), 'format'][['format']])) { attributes(.df[[i]]) <<- orig_attributes + } else { + attributes(.df[[i]]) <- NULL + } } }, is_correct ) From 12fd07bf50db0a05c74a7fa04cc771a141d84b5b Mon Sep 17 00:00:00 2001 From: "Chan, Adrian {MDBT~Mississauga}" Date: Thu, 1 Jun 2023 19:07:41 +0200 Subject: [PATCH 187/337] updates --- R/type.R | 22 ++++++++++------------ tests/testthat/test-type.R | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/R/type.R b/R/type.R index 6fdb3e33..911259d2 100644 --- a/R/type.R +++ b/R/type.R @@ -39,7 +39,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, type_name <- getOption("xportr.type_name") characterTypes <- c(getOption("xportr.character_types"), "_character") numericTypes <- c(getOption("xportr.numeric_types"), "_numeric") - formats <- metacore[['var_spec']] + format_name <- getOption("xportr.format_name") ## Common section to detect domain from argument or pipes @@ -63,7 +63,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, filter(!!sym(domain_name) == domain) } metacore <- metacore %>% - select(!!sym(variable_name), !!sym(type_name)) + select(!!sym(variable_name), !!sym(type_name), !!sym(type_name), !!sym(format_name)) # Current class of table variables table_cols_types <- map(.df, first_class) @@ -105,16 +105,14 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, if (!is_correct[i]) { orig_attributes <- attributes(.df[[i]]) if (correct_type[i] %in% characterTypes) { - .df[[i]] <<- as.character(.df[[i]]) - } else { - .df[[i]] <<- as.numeric(.df[[i]]) - } - - if (grepl('DT$|DTM$|TM$', colnames(df[i])) & - !is.na(formats[as.vector(formats$variable) == colnames(df[i]), 'format'][['format']])) { - attributes(.df[[i]]) <<- orig_attributes - } else { - attributes(.df[[i]]) <- NULL + .df[[i]] <<- as.character(..df[[i]]) + attributes(.df[[i]]) <<- NULL + } else if (grepl('DT$|DTM$|TM$', colnames(.df[i])) & + !is.na(metacore[as.vector(metacore$variable) == colnames(.df[i]), 'format'][['format']])) { + attributes(.df[[i]]) <<- orig_attributes + } else { + .df[[i]] <<- as.numeric(.df[[i]]) + attributes(.df[[i]]) <<- NULL } } }, is_correct diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 8db5e686..59f7492d 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -175,3 +175,23 @@ test_that("xportr_type: error when metadata is not set", { regexp = "Metadata must be set with `metacore` or `xportr_metadata\\(\\)`" ) }) + +test_that("xportr_type: date variables are not converted to numeric", { + df <- data.frame(RFICDT = as.Date('2017-03-30'), RFICDTM = as.POSIXct('2017-03-30')) + metacore_meta <- suppressWarnings( + metacore::metacore( + var_spec = data.frame( + variable = c("RFICDT", "RFICDTM"), + type = "integer", + label = c("RFICDT Label", "RFICDTM Label"), + length = c(1, 2), + common = NA_character_, + format = c("date9.", "datetime20.") + ) + ) + ) + processed_df <- xportr_type(df, metacore_meta) + expect_equal(lapply(df, class), lapply(processed_df, class)) + expect_equal(df$RFICDT, processed_df$RFICDT) + expect_equal(df$RFICDTM, processed_df$RFICDTM) +}) From 2f0e783ab24e53f7930af699b751a34f7b811fad Mon Sep 17 00:00:00 2001 From: "Chan, Adrian {MDBT~Mississauga}" Date: Thu, 1 Jun 2023 19:14:38 +0200 Subject: [PATCH 188/337] fixed --- R/type.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/type.R b/R/type.R index 911259d2..20ead5ab 100644 --- a/R/type.R +++ b/R/type.R @@ -105,7 +105,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, if (!is_correct[i]) { orig_attributes <- attributes(.df[[i]]) if (correct_type[i] %in% characterTypes) { - .df[[i]] <<- as.character(..df[[i]]) + .df[[i]] <<- as.character(.df[[i]]) attributes(.df[[i]]) <<- NULL } else if (grepl('DT$|DTM$|TM$', colnames(.df[i])) & !is.na(metacore[as.vector(metacore$variable) == colnames(.df[i]), 'format'][['format']])) { From 713f3d3b98750c6aa2110470db955c97fe181c2d Mon Sep 17 00:00:00 2001 From: "Chan, Adrian {MDBT~Mississauga}" Date: Thu, 1 Jun 2023 19:16:53 +0200 Subject: [PATCH 189/337] fixed --- R/type.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/type.R b/R/type.R index 20ead5ab..92acd91d 100644 --- a/R/type.R +++ b/R/type.R @@ -63,7 +63,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, filter(!!sym(domain_name) == domain) } metacore <- metacore %>% - select(!!sym(variable_name), !!sym(type_name), !!sym(type_name), !!sym(format_name)) + select(!!sym(variable_name), !!sym(type_name), !!sym(format_name)) # Current class of table variables table_cols_types <- map(.df, first_class) From f6a1512366790a7f26eeb8d7ba956ea654485ee8 Mon Sep 17 00:00:00 2001 From: elimillera Date: Tue, 6 Jun 2023 13:12:08 +0000 Subject: [PATCH 190/337] Updates with new formats --- R/utils-xportr.R | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 283934fe..b7ca00e3 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -252,7 +252,23 @@ xpt_validate <- function(data) { "E8601DTw.d", "E8601DZw.d", "E8601LXw.", - "E8601DXw." + "E8601DXw.", + "IS8601DT", + "E8601DT", + "B8601DT", + "IS8601DA", + "E8601DT", + "B8601DA", + "weekdate", + "mmddyy", + "ddmmyy", + "yymmdd", + "date", + "time", + "hhmm", + "IS8601TM", + "E8601TM", + "B8601TM" ) format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" From 1f25b30314659a22b472b2615bdbc9444e63e57b Mon Sep 17 00:00:00 2001 From: bs832471 Date: Tue, 6 Jun 2023 20:43:13 +0000 Subject: [PATCH 191/337] chore: #84 lintr fix --- vignettes/deepdive.Rmd | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 2b95930f..4498edde 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -241,7 +241,7 @@ adsl_type <- xportr_type(.df = adsl, metadata = var_spec, domain = "ADSL", verbo Next we will use `xportr_length()` to apply the length column of the _metadata object_ to `ADSL` dataset. ```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} -str(adsl) +str(adsl) ``` TODO: There is no warning around the length in the metadata being greater than 200. @@ -252,7 +252,7 @@ adsl_length <- xportr_length(.df = adsl, metadata = var_spec, domain = "ADSL", v ``` ```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} -str(adsl_length) +str(adsl_length) ``` @@ -326,7 +326,7 @@ TODO: I don't think `xportr_write()` works in the README and Get Started ```{r, echo = TRUE, error = TRUE} - adsl %>% + adsl %>% xportr_metadata(var_spec, "ADSL") %>% xportr_type() %>% xportr_length() %>% @@ -337,7 +337,7 @@ TODO: I don't think `xportr_write()` works in the README and Get Started ``` ```{r, echo = TRUE, error = TRUE} - adsl %>% + adsl %>% xportr_metadata(var_spec, "ADSL") %>% xportr_type() %>% xportr_length() %>% From 0fa5e682117128e6af917962c284cd6a16d6916b Mon Sep 17 00:00:00 2001 From: "Chan, Adrian {MDBT~Mississauga}" Date: Tue, 6 Jun 2023 22:47:33 +0200 Subject: [PATCH 192/337] updates --- R/type.R | 12 ++++-------- tests/testthat/test-type.R | 6 ++++-- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/R/type.R b/R/type.R index 92acd91d..c4d886a8 100644 --- a/R/type.R +++ b/R/type.R @@ -78,7 +78,7 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, # _character is used here as a mask of character, in case someone doesn't # want 'character' coerced to character type.x = if_else(type.x %in% characterTypes, "_character", type.x), - type.x = if_else(type.x %in% numericTypes, "_numeric", type.x), + type.x = if_else(type.x %in% numericTypes | (grepl('DT$|DTM$|TM$', variable) & !is.na(format)), "_numeric", type.x), type.y = tolower(type.y), type.y = if_else(type.y %in% characterTypes, "_character", type.y), type.y = if_else(type.y %in% numericTypes, "_numeric", type.y) @@ -104,19 +104,15 @@ xportr_type <- function(.df, metacore = NULL, domain = NULL, function(x, i, is_correct) { if (!is_correct[i]) { orig_attributes <- attributes(.df[[i]]) + orig_attributes$class <- NULL if (correct_type[i] %in% characterTypes) { .df[[i]] <<- as.character(.df[[i]]) - attributes(.df[[i]]) <<- NULL - } else if (grepl('DT$|DTM$|TM$', colnames(.df[i])) & - !is.na(metacore[as.vector(metacore$variable) == colnames(.df[i]), 'format'][['format']])) { - attributes(.df[[i]]) <<- orig_attributes - } else { + } else { .df[[i]] <<- as.numeric(.df[[i]]) - attributes(.df[[i]]) <<- NULL } + attributes(.df[[i]]) <<- orig_attributes } }, is_correct ) - .df } diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 59f7492d..527cf931 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -1,7 +1,8 @@ meta_example <- data.frame( dataset = "df", variable = c("Subj", "Param", "Val", "NotUsed"), - type = c("numeric", "character", "numeric", "character") + type = c("numeric", "character", "numeric", "character"), + format = NA ) df <- data.frame( @@ -23,7 +24,8 @@ test_that("xportr_type: NAs are handled as expected", { meta_example <- data.frame( dataset = "df", variable = c("Subj", "Param", "Val", "NotUsed"), - type = c("numeric", "character", "numeric", "character") + type = c("numeric", "character", "numeric", "character"), + format = NA ) df2 <- xportr_type(df, meta_example) From e03ca10c676750ab38de61936df206458547d8d7 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Tue, 6 Jun 2023 20:51:12 +0000 Subject: [PATCH 193/337] chore: #84 style files --- vignettes/deepdive.Rmd | 32 +++++++++++++++----------------- vignettes/xportr.Rmd | 2 -- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 4498edde..79256d10 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -270,7 +270,6 @@ TODO: Incorrect label applied, none and message still give warning when I have a TODO: Weird characters in outputs. ```{r, echo = TRUE} - var_spec_lbl <- var_spec %>% mutate(label = if_else(variable == "TRTSDT", "Length of variable label must be 40 characters or less", label @@ -307,7 +306,6 @@ glimpse(adsl_ord) TODO: No warning issue for incorrect format type. I put in a "DATA" format and it applied the format even though it is not a valid one. ```{r} - var_spec_fmt <- var_spec %>% mutate(format = if_else(variable == "TRTSDT", "DATA", format)) @@ -326,24 +324,24 @@ TODO: I don't think `xportr_write()` works in the README and Get Started ```{r, echo = TRUE, error = TRUE} - adsl %>% - xportr_metadata(var_spec, "ADSL") %>% - xportr_type() %>% - xportr_length() %>% - xportr_label() %>% - xportr_order() %>% - xportr_format() %>% - xportr_write(path = "adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = FALSE) +adsl %>% + xportr_metadata(var_spec, "ADSL") %>% + xportr_type() %>% + xportr_length() %>% + xportr_label() %>% + xportr_order() %>% + xportr_format() %>% + xportr_write(path = "adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = FALSE) ``` ```{r, echo = TRUE, error = TRUE} - adsl %>% - xportr_metadata(var_spec, "ADSL") %>% - xportr_type() %>% - xportr_length() %>% - xportr_label() %>% - xportr_order() %>% - xportr_write(path = "adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = TRUE) +adsl %>% + xportr_metadata(var_spec, "ADSL") %>% + xportr_type() %>% + xportr_length() %>% + xportr_label() %>% + xportr_order() %>% + xportr_write(path = "adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = TRUE) ``` diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 2f6546f7..1e54a400 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -28,8 +28,6 @@ options( xportr.length = "length", xportr.order_name = "order" ) - - ``` ```{r, include=FALSE} From e41fe461c5cba275b1bc0edfa9b236fc443e94bc Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 7 Jun 2023 03:28:14 +0000 Subject: [PATCH 194/337] #7 Update documentation to inheritParams where possible --- R/df_label.R | 25 ++++++++++++++++++------- R/format.R | 14 ++++---------- R/label.R | 11 ++--------- R/length.R | 11 ++--------- R/metadata.R | 8 +------- R/order.R | 7 +------ R/type.R | 11 +---------- man/xportr_df_label.Rd | 32 ++++++++++++++++++-------------- man/xportr_format.Rd | 25 ++++++++++--------------- man/xportr_label.Rd | 25 ++++++++++--------------- man/xportr_length.Rd | 25 ++++++++++--------------- man/xportr_metadata.Rd | 11 +++++------ man/xportr_order.Rd | 15 ++++++++++----- man/xportr_type.Rd | 21 +++++++++++---------- 14 files changed, 103 insertions(+), 138 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index f7f4accc..eb4df887 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -3,14 +3,19 @@ #' Assigns dataset label from a dataset level metadata to a given data frame. #' #' @param .df A data frame of CDISC standard. -#' @param metadata A data frame containing dataset level metadata. -#' @param domain A character value to subset the `.df`. If `NULL`(default), uses -#' `.df` value as a subset condition. -#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` +#' @param metadata A data frame containing dataset/variable level metadata. See +#' 'Metadata' section for details. +#' @param domain Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +#' the metadata object. If none is passed, then name of the dataset passed as +#' .df will be used. +#' @param verbose The action the function takes when an action is taken on the +#' dataset or function validation finds an issue. See 'Messaging' section for +#' details. Options are 'stop', 'warn', 'message', and 'none' +#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass +#' metadata now renamed with `metadata` #' #' @return Data frame with label attributes. -#' @family metadata functions -#' @seealso [xportr_label()], [xportr_format()] and [xportr_length()] +#' #' @export #' #' @examples @@ -27,7 +32,13 @@ #' ) #' #' adsl <- xportr_df_label(adsl, metadata) -xportr_df_label <- function(.df, metadata = NULL, domain = NULL, metacore = deprecated()) { +xportr_df_label <- function( + .df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated() +) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/format.R b/R/format.R index 9c8fd527..bd1d4be8 100644 --- a/R/format.R +++ b/R/format.R @@ -2,17 +2,10 @@ #' #' Assigns a SAS format from a variable level metadata to a given data frame. #' -#' @param .df A data frame of CDISC standard. -#' @param metadata A data frame containing variable level metadata. -#' @param domain A character value to subset the `.df`. If `NULL`(default), uses -#' `.df` value as a subset condition. -#' @param verbose The action the function takes when a variable label isn't. -#' found. Options are 'stop', 'warn', 'message', and 'none' -#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` +#' @inheritParams xportr_df_label #' #' @return Data frame with `SASformat` attributes for each variable. -#' @family metadata functions -#' @seealso [xportr_label()], [xportr_df_label()] and [xportr_length()] +#' #' @export #' #' @examples @@ -33,7 +26,8 @@ xportr_format <- function( metadata = NULL, domain = NULL, verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { + metacore = deprecated() +) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/label.R b/R/label.R index 738a5d50..53a9e272 100644 --- a/R/label.R +++ b/R/label.R @@ -2,17 +2,10 @@ #' #' Assigns variable label from a variable level metadata to a given data frame. #' -#' @param .df A data frame of CDISC standard. -#' @param metadata A data frame containing variable level metadata. -#' @param domain A character value to subset the `.df`. If `NULL`(default), uses -#' `.df` value as a subset condition. -#' @param verbose The action the function takes when a variable length isn't -#' Found. Options are 'stop', 'warn', 'message', and 'none' -#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` +#' @inheritParams xportr_df_label #' #' @return Data frame with label attributes for each variable. -#' @family metadata functions -#' @seealso [xportr_df_label()], [xportr_format()] and [xportr_length()] +#' #' @export #' #' @examples diff --git a/R/length.R b/R/length.R index dd6842dd..e254e437 100644 --- a/R/length.R +++ b/R/length.R @@ -2,17 +2,10 @@ #' #' Assigns SAS length from a variable level metadata to a given data frame. #' -#' @param .df A data frame of CDISC standard. -#' @param metadata A data frame containing variable level metadata. -#' @param domain A character value to subset the `.df`. If `NULL`(default), uses -#' `.df` value as a subset condition. -#' @param verbose The action the function takes when a length isn't found in -#' metadata. Options are 'stop', 'warn', 'message', and 'none' -#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` +#' @inheritParams xportr_df_label #' #' @return Data frame with `SASlength` attributes for each variable. -#' @family metadata functions -#' @seealso [xportr_label()], [xportr_df_label()] and [xportr_format()] +#' #' @export #' #' @examples diff --git a/R/metadata.R b/R/metadata.R index 6c4f14c0..ac94213f 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -4,13 +4,7 @@ #' functions. If used at the start of an xportr pipeline, it removes the need to #' set metadata and domain at each step individually #' -#' @param .df A dataframe with columns that can be manipulated by other xportr -#' functions -#' @param metadata An appropriate metadata object that has available -#' column-level metadata appropriate for use in other xportr functions -#' @param domain Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset -#' the metadata object. If none is passed, then name of the dataset passed .df -#' will be used. +#' @inheritParams xportr_df_label #' #' @return `.df` dataset with metadata and domain attributes set #' @export diff --git a/R/order.R b/R/order.R index a49a560f..ae30f47e 100644 --- a/R/order.R +++ b/R/order.R @@ -1,11 +1,6 @@ #' Order variables of a dataset according to Spec #' -#' @param .df A data frame of CDISC standard. -#' @param metadata A data frame containing variable level metadata. -#' @param domain A character value to subset the `.df`. If `NULL`(default), uses -#' `.df` value as a subset condition. -#' @param verbose Option for messaging order results -#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` +#' @inheritParams xportr_df_label #' #' @export #' @return Dataframe that has been re-ordered according to spec diff --git a/R/type.R b/R/type.R index bac6bb9b..121df29c 100644 --- a/R/type.R +++ b/R/type.R @@ -3,16 +3,7 @@ #' Current assumptions: #' columns_meta is a data.frame with names "Variables", "Type" #' -#' @param .df An R object with columns that can be coerced -#' @param metadata Either a data.frame that has the names of all possible columns -#' and their types, or a `Metacore` object from the `Metacore` package. Required -#' column names are dataset, variables, type -#' @param domain Name of the dataset. Ex ADAE/DM. This will be used to subset -#' the metadata object. If none is passed it is assumed to be the name of the -#' dataset passed in `.df`. -#' @param verbose The action the function takes when a variable isn't typed -#' properly. Options are 'stop', 'warn', 'message', and 'none' -#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass metadata now renamed with `metadata` +#' @inheritParams xportr_df_label #' #' @return Returns the modified table. #' @export diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index 4b7dfa08..7422fd13 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -4,17 +4,30 @@ \alias{xportr_df_label} \title{Assign Dataset Label} \usage{ -xportr_df_label(.df, metadata = NULL, domain = NULL, metacore = deprecated()) +xportr_df_label( + .df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated() +) } \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing dataset level metadata.} +\item{metadata}{A data frame containing dataset/variable level metadata. See +'Metadata' section for details.} + +\item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +the metadata object. If none is passed, then name of the dataset passed as +.df will be used.} -\item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses -\code{.df} value as a subset condition.} +\item{verbose}{The action the function takes when an action is taken on the +dataset or function validation finds an issue. See 'Messaging' section for +details. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass +metadata now renamed with \code{metadata}} } \value{ Data frame with label attributes. @@ -37,12 +50,3 @@ metadata <- data.frame( adsl <- xportr_df_label(adsl, metadata) } -\seealso{ -\code{\link[=xportr_label]{xportr_label()}}, \code{\link[=xportr_format]{xportr_format()}} and \code{\link[=xportr_length]{xportr_length()}} - -Other metadata functions: -\code{\link{xportr_format}()}, -\code{\link{xportr_label}()}, -\code{\link{xportr_length}()} -} -\concept{metadata functions} diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index 94a07980..3f251e12 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -15,15 +15,19 @@ xportr_format( \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing variable level metadata.} +\item{metadata}{A data frame containing dataset/variable level metadata. See +'Metadata' section for details.} -\item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses -\code{.df} value as a subset condition.} +\item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +the metadata object. If none is passed, then name of the dataset passed as +.df will be used.} -\item{verbose}{The action the function takes when a variable label isn't. -found. Options are 'stop', 'warn', 'message', and 'none'} +\item{verbose}{The action the function takes when an action is taken on the +dataset or function validation finds an issue. See 'Messaging' section for +details. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass +metadata now renamed with \code{metadata}} } \value{ Data frame with \code{SASformat} attributes for each variable. @@ -45,12 +49,3 @@ metadata <- data.frame( adsl <- xportr_format(adsl, metadata) } -\seealso{ -\code{\link[=xportr_label]{xportr_label()}}, \code{\link[=xportr_df_label]{xportr_df_label()}} and \code{\link[=xportr_length]{xportr_length()}} - -Other metadata functions: -\code{\link{xportr_df_label}()}, -\code{\link{xportr_label}()}, -\code{\link{xportr_length}()} -} -\concept{metadata functions} diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index fdf357a2..097a0322 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -15,15 +15,19 @@ xportr_label( \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing variable level metadata.} +\item{metadata}{A data frame containing dataset/variable level metadata. See +'Metadata' section for details.} -\item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses -\code{.df} value as a subset condition.} +\item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +the metadata object. If none is passed, then name of the dataset passed as +.df will be used.} -\item{verbose}{The action the function takes when a variable length isn't -Found. Options are 'stop', 'warn', 'message', and 'none'} +\item{verbose}{The action the function takes when an action is taken on the +dataset or function validation finds an issue. See 'Messaging' section for +details. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass +metadata now renamed with \code{metadata}} } \value{ Data frame with label attributes for each variable. @@ -47,12 +51,3 @@ metadata <- data.frame( adsl <- xportr_label(adsl, metadata) } -\seealso{ -\code{\link[=xportr_df_label]{xportr_df_label()}}, \code{\link[=xportr_format]{xportr_format()}} and \code{\link[=xportr_length]{xportr_length()}} - -Other metadata functions: -\code{\link{xportr_df_label}()}, -\code{\link{xportr_format}()}, -\code{\link{xportr_length}()} -} -\concept{metadata functions} diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index b7c54d5b..04b86133 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -15,15 +15,19 @@ xportr_length( \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing variable level metadata.} +\item{metadata}{A data frame containing dataset/variable level metadata. See +'Metadata' section for details.} -\item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses -\code{.df} value as a subset condition.} +\item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +the metadata object. If none is passed, then name of the dataset passed as +.df will be used.} -\item{verbose}{The action the function takes when a length isn't found in -metadata. Options are 'stop', 'warn', 'message', and 'none'} +\item{verbose}{The action the function takes when an action is taken on the +dataset or function validation finds an issue. See 'Messaging' section for +details. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass +metadata now renamed with \code{metadata}} } \value{ Data frame with \code{SASlength} attributes for each variable. @@ -45,12 +49,3 @@ metadata <- data.frame( adsl <- xportr_length(adsl, metadata) } -\seealso{ -\code{\link[=xportr_label]{xportr_label()}}, \code{\link[=xportr_df_label]{xportr_df_label()}} and \code{\link[=xportr_format]{xportr_format()}} - -Other metadata functions: -\code{\link{xportr_df_label}()}, -\code{\link{xportr_format}()}, -\code{\link{xportr_label}()} -} -\concept{metadata functions} diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index f92c62b1..9b458cd7 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -7,15 +7,14 @@ xportr_metadata(.df, metadata, domain = NULL) } \arguments{ -\item{.df}{A dataframe with columns that can be manipulated by other xportr -functions} +\item{.df}{A data frame of CDISC standard.} -\item{metadata}{An appropriate metadata object that has available -column-level metadata appropriate for use in other xportr functions} +\item{metadata}{A data frame containing dataset/variable level metadata. See +'Metadata' section for details.} \item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset -the metadata object. If none is passed, then name of the dataset passed .df -will be used.} +the metadata object. If none is passed, then name of the dataset passed as +.df will be used.} } \value{ \code{.df} dataset with metadata and domain attributes set diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index dc566325..48f6765b 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -15,14 +15,19 @@ xportr_order( \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing variable level metadata.} +\item{metadata}{A data frame containing dataset/variable level metadata. See +'Metadata' section for details.} -\item{domain}{A character value to subset the \code{.df}. If \code{NULL}(default), uses -\code{.df} value as a subset condition.} +\item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +the metadata object. If none is passed, then name of the dataset passed as +.df will be used.} -\item{verbose}{Option for messaging order results} +\item{verbose}{The action the function takes when an action is taken on the +dataset or function validation finds an issue. See 'Messaging' section for +details. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass +metadata now renamed with \code{metadata}} } \value{ Dataframe that has been re-ordered according to spec diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index ce22475c..12a445dc 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -13,20 +13,21 @@ xportr_type( ) } \arguments{ -\item{.df}{An R object with columns that can be coerced} +\item{.df}{A data frame of CDISC standard.} -\item{metadata}{Either a data.frame that has the names of all possible columns -and their types, or a \code{Metacore} object from the \code{Metacore} package. Required -column names are dataset, variables, type} +\item{metadata}{A data frame containing dataset/variable level metadata. See +'Metadata' section for details.} -\item{domain}{Name of the dataset. Ex ADAE/DM. This will be used to subset -the metadata object. If none is passed it is assumed to be the name of the -dataset passed in \code{.df}.} +\item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +the metadata object. If none is passed, then name of the dataset passed as +.df will be used.} -\item{verbose}{The action the function takes when a variable isn't typed -properly. Options are 'stop', 'warn', 'message', and 'none'} +\item{verbose}{The action the function takes when an action is taken on the +dataset or function validation finds an issue. See 'Messaging' section for +details. Options are 'stop', 'warn', 'message', and 'none'} -\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} +\item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass +metadata now renamed with \code{metadata}} } \value{ Returns the modified table. From 6c373e7b2a9a1a6462ccd90b7d45171cc3a03155 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Wed, 7 Jun 2023 16:15:05 +0000 Subject: [PATCH 195/337] docs: #84 finsihing core function examples --- vignettes/deepdive.Rmd | 74 ++++++++++++++++++++++++++++++++---------- 1 file changed, 56 insertions(+), 18 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 79256d10..863e06bc 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -42,11 +42,11 @@ local({ # Introduction -This vignette will explore in detail all the possibilities of the `{xportr}` package for applying information from a metadata object to a data sets using the core `{xportr}` functions. +This vignette will explore in detail all the possibilities of the `{xportr}` package for applying information from a metadata object to an R created dataset using the core `{xportr}` functions. We will also explore the following: -* What goes in a Submission to a Health Authority? +* What goes in a Submission to a Health Authority and the role `{xportr}` plays in that Submission? * What is `{xportr}` validating behind the scenes? * Breakdown of `{xportr}` and a ADaM dataset specification file. * Using `options()` and `xportr_metadata()` to enhance your `{xportr}` experience. @@ -78,9 +78,9 @@ As both Data Packages need compliant `xpt` files, we feel that `{xportr}` can pl ## What is `{xportr}` validating in these Data Packages? -The `xpt` Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your packages for submission the suite of `{xportr}` functions and `xprotr_write()` help to check that your datasets are submission compliant. The package checks many of the latest rules laid out in the [Study Data Technical Conformance Guide](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/study-data-technical-conformance-guide-technical-specifications-document), but please note that it is not yet an exhaustive list of checks. We envision that users are also submitting their `xpts` and metadata to additional validation software. +The `xpt` Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your data packages for submission the suite of `{xportr}` functions and `xprotr_write()` help to check that your datasets are submission compliant. The package checks many of the latest rules laid out in the [Study Data Technical Conformance Guide](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/study-data-technical-conformance-guide-technical-specifications-document), but please note that it is not yet an exhaustive list of checks. We envision that users are also submitting their `xpts` and metadata to additional validation software. -Each of the core `{xportr}` functions for applying labels, types, formats, order and lengths provide feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called to create the `xpt`. `xportr_write()` calls [`xpt_validate()`](https://github.com/atorus-research/xportr/blob/231e959b84aa0f1e71113c85332de33a827e650a/R/utils-xportr.R#L174), which is a behind the scenes/non-exported function not available to users that does a final check for compliance. At the time of `{xportr} v0.3` we are checking the following when a user writes out an `xpt` file.: +Each of the core `{xportr}` functions for applying labels, types, formats, order and lengths provide feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called to create the `xpt`. `xportr_write()` calls [`xpt_validate()`](https://github.com/atorus-research/xportr/blob/231e959b84aa0f1e71113c85332de33a827e650a/R/utils-xportr.R#L174), which is a behind the scenes/non-exported function not available to users that does a final check for compliance. At the time of `{xportr} v0.3.0` we are checking the following when a user writes out an `xpt` file.: validate @@ -168,11 +168,11 @@ adsl %>% For the next six sections, we are going to explore the Warnings and Errors messages generated by the `{xportr}` core functions. To better explore these, we will either manipulate the ADaM dataset or specification file to help showcase the ability of the `{xportr}` functions to detect issues. -**NOTE:** We have made the ADSL, `adsl` and Spec, `var_spec` available in this package. Users can find additionl datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. This is to keep the package to a minimum size. +**NOTE:** We have made the ADSL, `adsl`, and Specificaion File, `var_spec` available in this package. Users can find additionl datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. This is to keep the package to a minimum size. ### Setting up our metadata object -First, lets read in the specification file and call it `var_spec`. We will also do some slight manipulation to the columns names by doing all lower case and changing `Data Type` to `type`. You can also use `options()` for this step as well. The `var_spec` object has five dataset specification files in in stack ontop of each other. We will make use of the `ADSL` section. +First, lets read in the specification file and call it `var_spec`. Note that we are not using `options()` here. We will do some slight manipulation to the columns names by doing all lower case and changing `Data Type` to `type`. You can also use `options()` for this step as well. The `var_spec` object has five dataset specification files in in stack ontop of each other. We will make use of the `ADSL` section. You can make use of the Search field above the dataset column to subset the specification file for `ADSL` ```{r} var_spec <- var_spec %>% @@ -190,7 +190,8 @@ columns2hide <- c( datatable( var_spec, rownames = FALSE, - extensions = "Buttons", options = list( + filter = 'top', + options = list( dom = "Bfrtip", columnDefs = list(list(visible = FALSE, targets = columns2hide)) ) @@ -199,7 +200,7 @@ datatable( ## `xportr_type()` -We are going to explore the type column in the metadata object. A submission to a Health Authority should only have character and numeric types in the data. In the `ADSL` data we will have several columns that are in the Date type: `TRTSDT`, `TRTEDT`, `DISONSDT`, `VISIT1DT` and `RFENDT` and we will change one variable type to a factor variable for educational purposes. +We are going to explore the type column in the metadata object. A submission to a Health Authority should only have character and numeric types in the data. In the `ADSL` data we have several columns that are in the Date type: `TRTSDT`, `TRTEDT`, `DISONSDT`, `VISIT1DT` and `RFENDT`. We will change one variable type to a [factor variable](https://forcats.tidyverse.org/), which is a common data structure in R. ```{r} adsl_fct <- adsl %>% @@ -224,13 +225,13 @@ adsl_type_glimpse <- adsl_type %>% select(STUDYID, TRTSDT, TRTEDT, DISONSDT, VISIT1DT, RFENDT) ``` -Success! As we can see below the `xportr_type()` function applied the types from the metadata object to the below columns converting them all to the proper type. +Success! As we can see below the `xportr_type()` function applied the types from the metadata object to the below columns converting them all to the proper type. The functions in `{xportr}` also display this coercion to the user in the console, which is seen above. ```{r, echo = TRUE} glimpse(adsl_type_glimpse) ``` -Note that the `xportr_type(verbpse = "warn")` was set so the function has provided feedback, which would show up in the console, on which variables were converted as a warning message. However, you can set `verbose = 'stop'` so that the types are not applied as the data does not match what is in the specification file. +Note that the `xportr_type(verbpse = "warn")` was set so the function has provided feedback, which would show up in the console, on which variables were converted as a warning message. However, you can set `verbose = 'stop'` so that the types are not applied as the data does not match what is in the specification file. Using `verbose = 'stop'` will instantly stop the processing of this function and not create the object. ```{r, echo = TRUE, error = TRUE} adsl_type <- xportr_type(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "stop") @@ -238,7 +239,7 @@ adsl_type <- xportr_type(.df = adsl, metadata = var_spec, domain = "ADSL", verbo ## `xportr_length()` -Next we will use `xportr_length()` to apply the length column of the _metadata object_ to `ADSL` dataset. +Next we will use `xportr_length()` to apply the length column of the _metadata object_ to the `ADSL` dataset. Using the `str()` function we have displayed al the variables with their attributes. You can see that each variable has a label, but there is no information on the lengths of the variable. ```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} str(adsl) @@ -251,10 +252,16 @@ TODO: There is no message to users about how many lengths were applied to the da adsl_length <- xportr_length(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "warn") ``` +Using the `xportr_length()` function with `verbose = 'warn'` we can apply the length column to all the columns in the dataset. The function detects that two variables, `TRTDUR` and `DCREASCD` are missing from the metadata file. Note that the variables have slight misspellings differences in the dataset and metadata, which is a great catch! + +Using the `str()` function, you can see below that the `xportr_length()` function successfully applied all the lengths of the variable to the variables in the dataset. + + ```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} str(adsl_length) ``` +Just like we did for `xportr_type()`, setting `verbose = 'stop'` immediately stops R from processing the lengths. Here the function detects the missing variables and will not apply any lengths to the dataset until corrective action is applied. ```{r, echo = TRUE, error = TRUE} adsl_length <- xportr_length(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "stop") @@ -263,11 +270,14 @@ adsl_length <- xportr_length(.df = adsl, metadata = var_spec, domain = "ADSL", v ## `xportr_label()` -TODO: Incorrect label applied, but label still applied along with 48 other labels. We should give user feedback on the labels still being applied. +As you are creating your dataset in R you will often find that R removes the label of your variable. Using `xportr_label()` you can easily re-apply all your labels to your variables in one quick action. + +For this example, we are going to manipulate both the metadata and the `ADSL` dataset: -TODO: Incorrect label applied, none and message still give warning when I have asked it not to do that. +* The metatdata will have the variable `TRTSDT` label be greater than 40 characters. +* The `ADSL` dataset will have all its labels stripped from it. -TODO: Weird characters in outputs. +Remember in the length example, the labels were on the original dataset as seen in the `str()` output. ```{r, echo = TRUE} var_spec_lbl <- var_spec %>% @@ -275,14 +285,38 @@ var_spec_lbl <- var_spec %>% "Length of variable label must be 40 characters or less", label )) -adsl_lbl <- xportr_label(adsl, var_spec_lbl, "ADSL", verbose = "warn") +adsl_lbl <- adsl + +adsl_lbl[] <- lapply(adsl_lbl, function(x) { attributes(x) <- NULL; x }) ``` -## `xportr_order()` +We have successfully removed all the labels. -TODO: I think there is something wrong with `xportr_order` as it is reordering the entire dataframe to something I don't fully understand. +```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} +str(adsl_lbl) +``` + +Using `xportr_label()` we will apply all the labels from our metadata to the dataset. Please note again that we are using `verbose = 'warn'` and the same two issues for `TRTDUR` and `DCREASCD` are reported as missing from the metadata file. An additional message is sent around the `TRTSDT` label having a length of greater than 40. + +```{r} +adsl_lbl <- xportr_label(.df = adsl_lbl, metadata = var_spec_lbl, domain = "ADSL", verbose = "warn") +``` + +Success! All labels have been applied that are present in the both the metadata and the dataset. However, please note that the `TRTSDT` variable has the label with characters greater than 40. + +```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} +str(adsl_lbl) +``` + +Just like we did for the other functions, setting `verbose = 'stop'` immediately stops R from processing the labels Here the function detects the missing variables and labels greater than 40 and will not apply any labels to the dataset until corrective action is applied. + +```{r, echo = TRUE, error = TRUE} +adsl_label <- xportr_label(.df = adsl_lbl, metadata = var_spec_lbl, domain = "ADSL", verbose = "stop") +``` + + +## `xportr_order()` -TODO: What about a check on have a non-numeric value in the ordering column? I put an X in there and it did not care. ```{r} library(dplyr) @@ -301,6 +335,10 @@ adsl_ord <- xportr_order(.df = adsl, metadata = var_spec, domain = "ADSL", verbo glimpse(adsl_ord) ``` +TODO: I think there is something wrong with `xportr_order` as it is reordering the entire dataframe to something I don't fully understand. + +TODO: What about a check on have a non-numeric value in the ordering column? I put an X in there and it did not care. + ## `xportr_format()` TODO: No warning issue for incorrect format type. I put in a "DATA" format and it applied the format even though it is not a valid one. From 6d004b8d528c8224d817b6d77eeed8fcdcad16b8 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Wed, 7 Jun 2023 18:49:11 +0000 Subject: [PATCH 196/337] docs: #84 final touches on functions --- vignettes/deepdive.Rmd | 106 ++++++++++++++++++++++++++--------------- 1 file changed, 67 insertions(+), 39 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 863e06bc..49f0cfaa 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -168,16 +168,18 @@ adsl %>% For the next six sections, we are going to explore the Warnings and Errors messages generated by the `{xportr}` core functions. To better explore these, we will either manipulate the ADaM dataset or specification file to help showcase the ability of the `{xportr}` functions to detect issues. -**NOTE:** We have made the ADSL, `adsl`, and Specificaion File, `var_spec` available in this package. Users can find additionl datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. This is to keep the package to a minimum size. +**NOTE:** We have made the ADSL, `adsl`, and Specificaion File, `var_spec`, available in this package. Users can find additionl datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. We have not included these in our package to help keep the package to a minimum size. ### Setting up our metadata object -First, lets read in the specification file and call it `var_spec`. Note that we are not using `options()` here. We will do some slight manipulation to the columns names by doing all lower case and changing `Data Type` to `type`. You can also use `options()` for this step as well. The `var_spec` object has five dataset specification files in in stack ontop of each other. We will make use of the `ADSL` section. You can make use of the Search field above the dataset column to subset the specification file for `ADSL` +First, lets read in the specification file and call it `var_spec`. Note that we are not using `options()` here. We will do some slight manipulation to the columns names by doing all lower case and changing `Data Type` to `type` and make the Order column numeric. You can also use `options()` for this step as well. The `var_spec` object has five dataset specification files in in stack on top of each other. We will make use of the `ADSL` subset of `var_spec`. You can make use of the Search field above the dataset column to subset the specification file for `ADSL` ```{r} var_spec <- var_spec %>% dplyr::rename(type = "Data Type") %>% - rlang::set_names(tolower) + rlang::set_names(tolower) %>% + dplyr::mutate(order = as.numeric(order)) + ``` ```{r, echo = FALSE} @@ -200,7 +202,7 @@ datatable( ## `xportr_type()` -We are going to explore the type column in the metadata object. A submission to a Health Authority should only have character and numeric types in the data. In the `ADSL` data we have several columns that are in the Date type: `TRTSDT`, `TRTEDT`, `DISONSDT`, `VISIT1DT` and `RFENDT`. We will change one variable type to a [factor variable](https://forcats.tidyverse.org/), which is a common data structure in R. +We are going to explore the type column in the metadata object. A submission to a Health Authority should only have character and numeric types in the data. In the `ADSL` data we have several columns that are in the Date type: `TRTSDT`, `TRTEDT`, `DISONSDT`, `VISIT1DT` and `RFENDT`. We will change one variable type to a [factor variable](https://forcats.tidyverse.org/), which is a common data structure in R, to give us some educational opportunities. ```{r} adsl_fct <- adsl %>% @@ -231,7 +233,7 @@ Success! As we can see below the `xportr_type()` function applied the types from glimpse(adsl_type_glimpse) ``` -Note that the `xportr_type(verbpse = "warn")` was set so the function has provided feedback, which would show up in the console, on which variables were converted as a warning message. However, you can set `verbose = 'stop'` so that the types are not applied as the data does not match what is in the specification file. Using `verbose = 'stop'` will instantly stop the processing of this function and not create the object. +Note that the `xportr_type(verbpse = "warn")` was set so the function has provided feedback, which would show up in the console, on which variables were converted as a warning message. However, you can set `verbose = 'stop'` so that the types are not applied as the data does not match what is in the specification file. Using `verbose = 'stop'` will instantly stop the processing of this function and not create the object. A user will need to alter the variables in their R script before using `xportr_type()` ```{r, echo = TRUE, error = TRUE} adsl_type <- xportr_type(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "stop") @@ -245,14 +247,14 @@ Next we will use `xportr_length()` to apply the length column of the _metadata o str(adsl) ``` -TODO: There is no warning around the length in the metadata being greater than 200. +TODO: There is no warning around the length in the metadata being greater than 200. TODO: There is no message to users about how many lengths were applied to the dataframe. ```{r, echo = TRUE} adsl_length <- xportr_length(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "warn") ``` -Using the `xportr_length()` function with `verbose = 'warn'` we can apply the length column to all the columns in the dataset. The function detects that two variables, `TRTDUR` and `DCREASCD` are missing from the metadata file. Note that the variables have slight misspellings differences in the dataset and metadata, which is a great catch! +Using the `xportr_length()` function with `verbose = 'warn'` we can apply the length column to all the columns in the dataset. The function detects that two variables, `TRTDUR` and `DCREASCD` are missing from the metadata file. Note that the variables have slight misspellings differences in the dataset and metadata, which is a great catch! However, lengths are still applied with TRTDUR being give a length of 8 and DCREASCD a length of 200. Using the `str()` function, you can see below that the `xportr_length()` function successfully applied all the lengths of the variable to the variables in the dataset. @@ -302,64 +304,73 @@ Using `xportr_label()` we will apply all the labels from our metadata to the dat adsl_lbl <- xportr_label(.df = adsl_lbl, metadata = var_spec_lbl, domain = "ADSL", verbose = "warn") ``` -Success! All labels have been applied that are present in the both the metadata and the dataset. However, please note that the `TRTSDT` variable has the label with characters greater than 40. +Success! All labels have been applied that are present in the both the metadata and the dataset. However, please note that the `TRTSDT` variable has had the label with characters greater than 40 **applied** to the dataset and the `TRTDUR` and `DCREASCD` have empty variable labels. ```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} str(adsl_lbl) ``` -Just like we did for the other functions, setting `verbose = 'stop'` immediately stops R from processing the labels Here the function detects the missing variables and labels greater than 40 and will not apply any labels to the dataset until corrective action is applied. +Just like we did for the other functions, setting `verbose = 'stop'` immediately stops R from processing the labels. Here the function detects the mismatches between the variables and labels as well as the label that is greater than 40 characters. As this stops the process, none of the labels will be applied to the dataset until corrective action is applied. ```{r, echo = TRUE, error = TRUE} adsl_label <- xportr_label(.df = adsl_lbl, metadata = var_spec_lbl, domain = "ADSL", verbose = "stop") ``` - ## `xportr_order()` +The order of the dataset can greatly increase readability of the dataset for downstream stakeholders. For example, having all the treatment related variables or analysis variables grouped together can help with inspection and understanding of the dataset. `xportr_order()` can take the order information from the metadata and apply it to your dataset. ```{r} -library(dplyr) +adsl_ord <- xportr_order(adsl, var_spec, "ADSL", verbose = "warn") +``` -var_spec_ord <- var_spec %>% - mutate(order = as.numeric(order)) +Readers are encouraged to inspect the dataset and metadata to see the past order and updated order after calling the function. Note the messaging from `xportr_order()`: + +* Variables not in the metadata are moved to the end +* Variables not in order are re-ordered and a message is printed out on which ones were re-rordered. -adsl_ord <- xportr_order(adsl, var_spec_ord, "ADSL", verbose = "warn") -``` ```{r, echo = TRUE, error = TRUE} adsl_ord <- xportr_order(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "stop") ``` -```{r} -glimpse(adsl_ord) -``` - -TODO: I think there is something wrong with `xportr_order` as it is reordering the entire dataframe to something I don't fully understand. - -TODO: What about a check on have a non-numeric value in the ordering column? I put an X in there and it did not care. +Just like we did for the other functions, setting `verbose = 'stop'` immediately stops R from processing the order. For this function if variables or metadata are missing from either, then the function will not process until corrective action is performed. ## `xportr_format()` -TODO: No warning issue for incorrect format type. I put in a "DATA" format and it applied the format even though it is not a valid one. +Formats play an important role in the SAS language and have a column in specification files. Being able to easily apply formats into your `xpt` file will allow downstream users of SAS to quickly format the data appropriately when reading into a SAS-based system. `xportr_format()` can take these formats and apply them. Please reference `xportr_length()` or `xportr_label()` to note that the the missing `attr()` for formats in our `ADSL` dataset. -```{r} -var_spec_fmt <- var_spec %>% - mutate(format = if_else(variable == "TRTSDT", "DATA", format)) +This example is slightly different from previous examples. You will need to use `xportr_type()` to coerce R Date variables and others types to character or numeric. Only then can you use `xportr_format()` to apply the format column to the dataset. +```{r, echo = TRUE} +adsl_fmt <- adsl %>% + xportr_type(metadata = var_spec, domain = "ADSL", verbose = "warn") %>% + xportr_format(metadata = var_spec, domain = "ADSL", verbose = "warn") +``` + +Success! We have taken the metadata formats and applied them to the dataset. Please inspect variables like `TRTSDT` or `DISONSDT` to see the `DATE9.` format being applied. -adsl_fmt <- xportr_format(adsl, var_spec_fmt, "ADSL", verbose = "warn") +```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} +str(adsl_fmt) ``` -## `xportr_write()` -Finally, we want to +```{r, echo = TRUE, error = TRUE} +var_spec_fmt <- var_spec %>% + mutate(format = if_else(variable == "TRTSDT", + "NARNAR", format + )) -TODO: xpt_validate catches my DATA format, but `xportr_format()` does not catch it. -TODO: I don't think `xportr_write()` works in the README and Get Started +adsl_fmt <- xportr_format(.df = adsl, metadata = var_spec_fmt, domain = "ADSL", verbose = "stop") +``` +TODO: No information on bad formats or how many formats are applied to a dataset. +## `xportr_write()` +Finally, we want to write out an `xpt` dataset with all our metadata applied. + +We will make use of our `xportr_metadata()` function to allow us to reduce repetitive calls to the metadata object and Domain. We will use default option for verbose, which is just `message` and so not set anything for `verbose`. In the `xportr_write()` function we will specify the path, which will just be our current working directory, set the dataset label and toggle the `strict_checks` to be `FALSE`. ```{r, echo = TRUE, error = TRUE} adsl %>% @@ -372,20 +383,37 @@ adsl %>% xportr_write(path = "adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = FALSE) ``` +Success! We have applied types, lengths, labels, ordering and formats to our dataset. Note the messages written out to the console. Remember the `TRTDUR` and `DCREASCD` and how these are not present in the metadata, but in the dataset. This impacts the messaging for legnths and labels where `{xportr}` is printing out some feedback to us on the two issues. 5 types are also coerced as well as 36 variables re-ordered. Note that `strict_check` was set to `FALSE`. + +The next two examples showcase the `strict_checks = TRUE` option in `xportr_write()` where we will look at formats and labels. + +```{r, echo = TRUE, error = TRUE} +adsl %>% + xportr_write(path = "adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = TRUE) +``` + + +As there at several `---DT` type variables, `xportr_write()` detects the lack of formats being applied. To correct this remember you can use `xportr_type()` and `xportr_format()` to apply formats to your xpt dataset. + +Below we have manipulated the labels to again be greater than 40 characters for `TRTSDT`. We have turned off `xportr_label()` verbose options to only produce a message. However, the `xportr_write()` function wtih `strict_checks = TRUE` will error out as this is one of the many `xpt_validate()` checks going one behind the scenes. + ```{r, echo = TRUE, error = TRUE} + +var_spec_lbl <- var_spec %>% + mutate(label = if_else(variable == "TRTSDT", + "Length of variable label must be 40 characters or less", label + )) + + adsl %>% - xportr_metadata(var_spec, "ADSL") %>% - xportr_type() %>% - xportr_length() %>% + xportr_metadata(var_spec_lbl, "ADSL") %>% xportr_label() %>% - xportr_order() %>% + xportr_type() %>% + xportr_format() %>% xportr_write(path = "adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = TRUE) ``` -## Warnings around label length - ## Future Work -* Using `{xportr}` to bulk process multiple datasets. -* Preparing xpt files for upload to a validation software. +`{xportr}` is still undergoing development. We hope to produce more vignettes and functions that will allow users to bulk process multiple datasets as well have examples of piping `xpt` files and related documenation to a validation software service. As always, please let us know of any feature requests, documenation updates or bugs on our GitHub repo. From cb115aca70922321038b1b32b171679ee1c21fe7 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Wed, 7 Jun 2023 19:49:11 +0000 Subject: [PATCH 197/337] chore: #84 stler and lintr --- NEWS.md | 3 ++- vignettes/deepdive.Rmd | 15 ++++++++------- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/NEWS.md b/NEWS.md index d5160f62..3f731014 100644 --- a/NEWS.md +++ b/NEWS.md @@ -15,7 +15,8 @@ * Additional vignette showcasing functions and quality of life utilities for processing `xpts` created (#84) -## Deprecation and Breaking Changes +## Deprecation +and Breaking Changes * The `metacore` argument has been renamed to `metadata` in the following six xportr functions: `xportr_df_label()`, `xportr_format()`, `xportr_label()`, `xportr_length()`, `xportr_order()`, and `xportr_type()`. Please update your code to use the new `metadata` argument in place of `metacore`. # xportr 0.2.0 diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 49f0cfaa..ee60df85 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -177,9 +177,8 @@ First, lets read in the specification file and call it `var_spec`. Note that we ```{r} var_spec <- var_spec %>% dplyr::rename(type = "Data Type") %>% - rlang::set_names(tolower) %>% + rlang::set_names(tolower) %>% dplyr::mutate(order = as.numeric(order)) - ``` ```{r, echo = FALSE} @@ -192,7 +191,7 @@ columns2hide <- c( datatable( var_spec, rownames = FALSE, - filter = 'top', + filter = "top", options = list( dom = "Bfrtip", columnDefs = list(list(visible = FALSE, targets = columns2hide)) @@ -289,7 +288,10 @@ var_spec_lbl <- var_spec %>% adsl_lbl <- adsl -adsl_lbl[] <- lapply(adsl_lbl, function(x) { attributes(x) <- NULL; x }) +adsl_lbl[] <- lapply(adsl_lbl, function(x) { + attributes(x) <- NULL + x +}) ``` We have successfully removed all the labels. @@ -343,8 +345,8 @@ Formats play an important role in the SAS language and have a column in specific This example is slightly different from previous examples. You will need to use `xportr_type()` to coerce R Date variables and others types to character or numeric. Only then can you use `xportr_format()` to apply the format column to the dataset. ```{r, echo = TRUE} -adsl_fmt <- adsl %>% - xportr_type(metadata = var_spec, domain = "ADSL", verbose = "warn") %>% +adsl_fmt <- adsl %>% + xportr_type(metadata = var_spec, domain = "ADSL", verbose = "warn") %>% xportr_format(metadata = var_spec, domain = "ADSL", verbose = "warn") ``` @@ -398,7 +400,6 @@ As there at several `---DT` type variables, `xportr_write()` detects the lack of Below we have manipulated the labels to again be greater than 40 characters for `TRTSDT`. We have turned off `xportr_label()` verbose options to only produce a message. However, the `xportr_write()` function wtih `strict_checks = TRUE` will error out as this is one of the many `xpt_validate()` checks going one behind the scenes. ```{r, echo = TRUE, error = TRUE} - var_spec_lbl <- var_spec %>% mutate(label = if_else(variable == "TRTSDT", "Length of variable label must be 40 characters or less", label From 1af8a61e21ed8eddb2f379102585c6e0021c008e Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:55:22 -0400 Subject: [PATCH 198/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index ee60df85..54c3cc0c 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -46,7 +46,7 @@ This vignette will explore in detail all the possibilities of the `{xportr}` pac We will also explore the following: -* What goes in a Submission to a Health Authority and the role `{xportr}` plays in that Submission? +* What goes in a Submission to a Health Authority, and what role does `{xportr}` play in that Submission? * What is `{xportr}` validating behind the scenes? * Breakdown of `{xportr}` and a ADaM dataset specification file. * Using `options()` and `xportr_metadata()` to enhance your `{xportr}` experience. From e675ca1f693d5c075aa60af672466ddcfc9f7e44 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:55:35 -0400 Subject: [PATCH 199/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 54c3cc0c..3e06fea1 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -51,7 +51,7 @@ We will also explore the following: * Breakdown of `{xportr}` and a ADaM dataset specification file. * Using `options()` and `xportr_metadata()` to enhance your `{xportr}` experience. * Understanding the warning and error messages for each `{xportr}` function. -* A brief discussion on future work +* A brief discussion on future work. **NOTE:** We use the phrase _metadata object_ through out this package. A _metadata object_ can either be a specification file read into R as a dataframe or a `{metacore}` object. The _metadata object_ created via the `{metacore}` pacakge has additional features not covered here, but at its core is using a specification file. However, the intention of `{xportr}` is for it to work with either a dataframe or a `{metacore}` object. From 353bb621c485087a8be2e27d7a8f086b05cf934c Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:55:54 -0400 Subject: [PATCH 200/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 3e06fea1..7d78c434 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -54,7 +54,7 @@ We will also explore the following: * A brief discussion on future work. -**NOTE:** We use the phrase _metadata object_ through out this package. A _metadata object_ can either be a specification file read into R as a dataframe or a `{metacore}` object. The _metadata object_ created via the `{metacore}` pacakge has additional features not covered here, but at its core is using a specification file. However, the intention of `{xportr}` is for it to work with either a dataframe or a `{metacore}` object. +**NOTE:** We use the phrase _metadata object_ throughout this package. A _metadata object_ can either be a specification file read into R as a dataframe or a `{metacore}` object. The _metadata object_ created via the `{metacore}` package has additional features not covered here, but at its core is using a specification file. However, `{xportr}` will work with either a dataframe or a `{metacore}` object. # What goes in a Submission to a Health Authority? From 8c051a5fcdd2a4ea3c16f680fc1875b0dc64565f Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:56:17 -0400 Subject: [PATCH 201/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 7d78c434..b1b20a0d 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -74,7 +74,7 @@ __SDTM:__ The primary pieces of the SDTM package are the SDTM annotated case rep __ADaM:__ The key components of the ADaM package are very similar to SDTM package with a few additions: define.xml, Analysis Study Data Reviewer's Guide (adrg.pdf), Analysis Results Metadata (analysis-results-metadata.pdf) and datasets as Version 5 xpt format. -As both Data Packages need compliant `xpt` files, we feel that `{xportr}` can play a pivotal role here. The core functions in `{xportr}` can be used to apply information from the _metadata object_ to the datasets giving users feedback on the quality of the metadata and data. The `xportr_write()` can then be used to write out the final dataset as an `xpt` file that can be submitted to a Health Authority. +As both Data Packages need compliant `xpt` files, we feel that `{xportr}` can play a pivotal role here. The core functions in `{xportr}` can be used to apply information from the _metadata object_ to the datasets giving users feedback on the quality of the metadata and data. `xportr_write()` can then be used to write out the final dataset as an `xpt` file, which can be submitted to a Health Authority. ## What is `{xportr}` validating in these Data Packages? From 77577a9a91a0f8aece4dda20eb2d92c7a28bf137 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:57:05 -0400 Subject: [PATCH 202/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index b1b20a0d..328cbacc 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -340,7 +340,7 @@ Just like we did for the other functions, setting `verbose = 'stop'` immediately ## `xportr_format()` -Formats play an important role in the SAS language and have a column in specification files. Being able to easily apply formats into your `xpt` file will allow downstream users of SAS to quickly format the data appropriately when reading into a SAS-based system. `xportr_format()` can take these formats and apply them. Please reference `xportr_length()` or `xportr_label()` to note that the the missing `attr()` for formats in our `ADSL` dataset. +Formats play an important role in the SAS language and have a column in specification files. Being able to easily apply formats into your `xpt` file will allow downstream users of SAS to quickly format the data appropriately when reading into a SAS-based system. `xportr_format()` can take these formats and apply them. Please reference `xportr_length()` or `xportr_label()` to note the missing `attr()` for formats in our `ADSL` dataset. This example is slightly different from previous examples. You will need to use `xportr_type()` to coerce R Date variables and others types to character or numeric. Only then can you use `xportr_format()` to apply the format column to the dataset. From cda1fd21fb4e1ec4c13bef3cf71e8fe0c501ae06 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:57:42 -0400 Subject: [PATCH 203/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 328cbacc..68fdd801 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -78,7 +78,7 @@ As both Data Packages need compliant `xpt` files, we feel that `{xportr}` can pl ## What is `{xportr}` validating in these Data Packages? -The `xpt` Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your data packages for submission the suite of `{xportr}` functions and `xprotr_write()` help to check that your datasets are submission compliant. The package checks many of the latest rules laid out in the [Study Data Technical Conformance Guide](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/study-data-technical-conformance-guide-technical-specifications-document), but please note that it is not yet an exhaustive list of checks. We envision that users are also submitting their `xpts` and metadata to additional validation software. +The `xpt` Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your data packages for submission the suite of core `{xportr}` functions, plus `xportr_write()`, helps to check that your datasets are submission compliant. The package checks many of the latest rules laid out in the [Study Data Technical Conformance Guide](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/study-data-technical-conformance-guide-technical-specifications-document), but please note that it is not yet an exhaustive list of checks. We envision that users are also submitting their `xpts` and metadata to additional validation software. Each of the core `{xportr}` functions for applying labels, types, formats, order and lengths provide feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called to create the `xpt`. `xportr_write()` calls [`xpt_validate()`](https://github.com/atorus-research/xportr/blob/231e959b84aa0f1e71113c85332de33a827e650a/R/utils-xportr.R#L174), which is a behind the scenes/non-exported function not available to users that does a final check for compliance. At the time of `{xportr} v0.3.0` we are checking the following when a user writes out an `xpt` file.: From efe84029a3010b8728bc05007a1c4867ee1c46c5 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:58:17 -0400 Subject: [PATCH 204/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 68fdd801..45c09354 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -80,7 +80,7 @@ As both Data Packages need compliant `xpt` files, we feel that `{xportr}` can pl The `xpt` Version 5 files form the backbone of any successful Submission and are govern by quite a lot of rules and suggested guidelines. As you are preparing your data packages for submission the suite of core `{xportr}` functions, plus `xportr_write()`, helps to check that your datasets are submission compliant. The package checks many of the latest rules laid out in the [Study Data Technical Conformance Guide](https://www.fda.gov/regulatory-information/search-fda-guidance-documents/study-data-technical-conformance-guide-technical-specifications-document), but please note that it is not yet an exhaustive list of checks. We envision that users are also submitting their `xpts` and metadata to additional validation software. -Each of the core `{xportr}` functions for applying labels, types, formats, order and lengths provide feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called to create the `xpt`. `xportr_write()` calls [`xpt_validate()`](https://github.com/atorus-research/xportr/blob/231e959b84aa0f1e71113c85332de33a827e650a/R/utils-xportr.R#L174), which is a behind the scenes/non-exported function not available to users that does a final check for compliance. At the time of `{xportr} v0.3.0` we are checking the following when a user writes out an `xpt` file.: +Each of the core `{xportr}` functions for applying labels, types, formats, order and lengths provides feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called to create the `xpt`. `xportr_write()` calls [`xpt_validate()`](https://github.com/atorus-research/xportr/blob/231e959b84aa0f1e71113c85332de33a827e650a/R/utils-xportr.R#L174), which is a behind the scenes/non-exported function that does a final check for compliance. At the time of `{xportr} v0.3.0` we are checking the following when a user writes out an `xpt` file.: validate From a49ac37d2419dee1dfef4678f0f8f1a5b2bf6229 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:58:34 -0400 Subject: [PATCH 205/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 45c09354..b9d0e9f2 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -89,7 +89,7 @@ Each of the core `{xportr}` functions for applying labels, types, formats, order In this section, we are going to explore the 5 core `{xportr}` functions using: -* An ADSL ADaM datasets from the Pilot 3 Submission to the FDA +* An ADSL ADaM dataset from the Pilot 3 Submission to the FDA * The ADSL ADaM Specification File from the Pilot 3 Submission to the FDA We will focus on warning and error messaging with contrived examples from these functions by manipulating either the datasets or the specification files. From 611cc17639cd0175b74ec9d347f2d1a59037d3b5 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:59:11 -0400 Subject: [PATCH 206/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index b9d0e9f2..c14e5756 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -108,7 +108,7 @@ Before we dive into the functions, we want to point out some quality of life uti ## You got `options()` -`{xportr}` is built with certain assumptions around specification columns names and information in those columns. We have found that each company specification file can differ slightly from our assumptions. For example, one company might call a column Variables, another Variable and another variables. Rather than trying to regex ourselves out of this situation we have introduced `options()`. The `options()` function allows users to control those assumptions inside `{xportr}` functions based on their needs. +`{xportr}` is built with certain assumptions around specification column names and information in those columns. We have found that each company specification file can differ slightly from our assumptions. For example, one company might call a column `Variables`, another `Variable` and another `variables`. Rather than trying to regex ourselves out of this situation, we have introduced `options()`. `options()` allows users to control those assumptions inside `{xportr}` functions based on their needs. Let's take a look at our example specification files names avaiable in this package. We can see that all the columns start with an upper case letter and have spaces in several of them. We could convert all the column names to lower case and deal with the spacing using some `{dplyr}` functions or base R or we could just use `options()`! From 3383d9103f317395cfc1e39b1e041598e21c3b53 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 12:59:45 -0400 Subject: [PATCH 207/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index c14e5756..9959b13a 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -372,7 +372,7 @@ TODO: No information on bad formats or how many formats are applied to a dataset Finally, we want to write out an `xpt` dataset with all our metadata applied. -We will make use of our `xportr_metadata()` function to allow us to reduce repetitive calls to the metadata object and Domain. We will use default option for verbose, which is just `message` and so not set anything for `verbose`. In the `xportr_write()` function we will specify the path, which will just be our current working directory, set the dataset label and toggle the `strict_checks` to be `FALSE`. +We will make use of `xportr_metadata()` to reduce repetitive metadata and domain specifications. We will use default option for verbose, which is just `message` and so not set anything for `verbose`. In `xportr_write()` we will specify the path, which will just be our current working directory, set the dataset label and toggle the `strict_checks` to be `FALSE`. ```{r, echo = TRUE, error = TRUE} adsl %>% From 092120ffc35535259e82361f4a34ce97b37e159d Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:00:00 -0400 Subject: [PATCH 208/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 9959b13a..c03ce23c 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -385,7 +385,7 @@ adsl %>% xportr_write(path = "adsl.xpt", label = "Subject-Level Analysis Dataset", strict_checks = FALSE) ``` -Success! We have applied types, lengths, labels, ordering and formats to our dataset. Note the messages written out to the console. Remember the `TRTDUR` and `DCREASCD` and how these are not present in the metadata, but in the dataset. This impacts the messaging for legnths and labels where `{xportr}` is printing out some feedback to us on the two issues. 5 types are also coerced as well as 36 variables re-ordered. Note that `strict_check` was set to `FALSE`. +Success! We have applied types, lengths, labels, ordering and formats to our dataset. Note the messages written out to the console. Remember the `TRTDUR` and `DCREASCD` and how these are not present in the metadata, but in the dataset. This impacts the messaging for lengths and labels where `{xportr}` is printing out some feedback to us on the two issues. 5 types are coerced, as well as 36 variables re-ordered. Note that `strict_checks` was set to `FALSE`. The next two examples showcase the `strict_checks = TRUE` option in `xportr_write()` where we will look at formats and labels. From 1d23013f62115513fe2eff13760f5f0fe9bd3c6d Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:00:15 -0400 Subject: [PATCH 209/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index c03ce23c..da74729d 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -397,7 +397,7 @@ adsl %>% As there at several `---DT` type variables, `xportr_write()` detects the lack of formats being applied. To correct this remember you can use `xportr_type()` and `xportr_format()` to apply formats to your xpt dataset. -Below we have manipulated the labels to again be greater than 40 characters for `TRTSDT`. We have turned off `xportr_label()` verbose options to only produce a message. However, the `xportr_write()` function wtih `strict_checks = TRUE` will error out as this is one of the many `xpt_validate()` checks going one behind the scenes. +Below we have manipulated the labels to again be greater than 40 characters for `TRTSDT`. We have turned off `xportr_label()` verbose options to only produce a message. However, `xportr_write()` with `strict_checks = TRUE` will error out as this is one of the many `xpt_validate()` checks going on behind the scenes. ```{r, echo = TRUE, error = TRUE} var_spec_lbl <- var_spec %>% From b5566c1252ae6ec5f23996d1c26b489ddbb939b8 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:00:32 -0400 Subject: [PATCH 210/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index da74729d..6d76dc5f 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -417,4 +417,4 @@ adsl %>% ## Future Work -`{xportr}` is still undergoing development. We hope to produce more vignettes and functions that will allow users to bulk process multiple datasets as well have examples of piping `xpt` files and related documenation to a validation software service. As always, please let us know of any feature requests, documenation updates or bugs on our GitHub repo. +`{xportr}` is still undergoing development. We hope to produce more vignettes and functions that will allow users to bulk process multiple datasets as well as have examples of piping `xpt` files and related documenation to a validation software service. As always, please let us know of any feature requests, documentation updates or bugs on [our GitHub repo](https://github.com/Atorus-Research/xportr/issues). From dc3238468e98401d2d3ce958b1fe0f91f2ef5f79 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:01:14 -0400 Subject: [PATCH 211/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 6d76dc5f..35f60c7c 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -110,7 +110,7 @@ Before we dive into the functions, we want to point out some quality of life uti `{xportr}` is built with certain assumptions around specification column names and information in those columns. We have found that each company specification file can differ slightly from our assumptions. For example, one company might call a column `Variables`, another `Variable` and another `variables`. Rather than trying to regex ourselves out of this situation, we have introduced `options()`. `options()` allows users to control those assumptions inside `{xportr}` functions based on their needs. -Let's take a look at our example specification files names avaiable in this package. We can see that all the columns start with an upper case letter and have spaces in several of them. We could convert all the column names to lower case and deal with the spacing using some `{dplyr}` functions or base R or we could just use `options()`! +Let's take a look at our example specification file names available in this package. We can see that all the columns start with an upper case letter and have spaces in several of them. We could convert all the column names to lower case and deal with the spacing using some `{dplyr}` functions or base R, or we could just use `options()`! ```{r, message = FALSE} library(xportr) From 6f0957d5dd7962a21d4a35e267966faac8b7799c Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:01:35 -0400 Subject: [PATCH 212/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 35f60c7c..9d321914 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -119,7 +119,7 @@ library(dplyr) colnames(var_spec) ``` -By using `options()` at the beginning of your script we can tell `{xportr}` that the following are the valid names as seen below. Please note, that before we set the options the package assumed every thing was in lowercase and there were no spaces in the names. Now with this setup, `{xportr}` sees the column `Variable` as the valid name rather than `variable`. You can inspect the [`zzz.R`](https://github.com/atorus-research/xportr/blob/main/R/zzz.R) to look at additional options. +By using `options()` at the beginning of our script we can tell `{xportr}` what the valid names are (see chunk below). Please note that before we set the options the package assumed every thing was in lowercase and there were no spaces in the names. After running `options()`, `{xportr}` sees the column `Variable` as the valid name rather than `variable`. You can inspect [`zzz.R`](https://github.com/atorus-research/xportr/blob/main/R/zzz.R) to look at additional options. TODO: Can xportr.variable_name = "Variable" be xportr.variable_name = c("Variable", variable) From 92ec2c054664c2e4389eb96443166e19ab21d3c8 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:02:04 -0400 Subject: [PATCH 213/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 9d321914..ee0f03a8 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -136,7 +136,7 @@ options( ## Going meta -Each of the core `{xportr}` functions require several inputs for it to work. A valid dataframe, a metadata object and a domain name along with optional messaging. For example, here is a simple call using all of the functions. As you can see a lot of information is repeated in each call. +Each of the core `{xportr}` functions requires several inputs: A valid dataframe, a metadata object and a domain name, along with optional messaging. For example, here is a simple call using all of the functions. As you can see, a lot of information is repeated in each call. ```{r, eval = FALSE} adsl %>% From b99a874bde9dcbc5618a913ee6777c262a006c3d Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:02:52 -0400 Subject: [PATCH 214/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index ee0f03a8..b6678474 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -148,7 +148,7 @@ adsl %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` -To help reduce these repetitive calls, we have created the `xportr_metadata()` function. A user can just **set** the _metadata object_ and the Domain name in the first call and this will be passed onto the other functions. Much cleaner! +To help reduce these repetitive calls, we have created `xportr_metadata()`. A user can just **set** the _metadata object_ and the Domain name in the first call, and this will be passed on to the other functions. Much cleaner! TODO: Be able to set `verbose` in `xportr_metadata` From 88ede73f2ba2ec95653c00f9e9df79851a5d8793 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:08:01 -0400 Subject: [PATCH 215/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index b6678474..72861af6 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -168,7 +168,7 @@ adsl %>% For the next six sections, we are going to explore the Warnings and Errors messages generated by the `{xportr}` core functions. To better explore these, we will either manipulate the ADaM dataset or specification file to help showcase the ability of the `{xportr}` functions to detect issues. -**NOTE:** We have made the ADSL, `adsl`, and Specificaion File, `var_spec`, available in this package. Users can find additionl datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. We have not included these in our package to help keep the package to a minimum size. +**NOTE:** We have made the ADSL, `adsl`, and Specificaion File, `var_spec`, available in this package. Users can find additional datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. We have not included these in our package to help keep the package to a minimum size. ### Setting up our metadata object From caf20a043311469d406a374cc4c414fb44445c57 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:08:40 -0400 Subject: [PATCH 216/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 72861af6..d4532237 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -172,7 +172,7 @@ For the next six sections, we are going to explore the Warnings and Errors messa ### Setting up our metadata object -First, lets read in the specification file and call it `var_spec`. Note that we are not using `options()` here. We will do some slight manipulation to the columns names by doing all lower case and changing `Data Type` to `type` and make the Order column numeric. You can also use `options()` for this step as well. The `var_spec` object has five dataset specification files in in stack on top of each other. We will make use of the `ADSL` subset of `var_spec`. You can make use of the Search field above the dataset column to subset the specification file for `ADSL` +First, let's read in the specification file and call it `var_spec`. Note that we are not using `options()` here. We will do some slight manipulation to the column names by doing all lower case, and changing `Data Type` to `type` and making the Order column numeric. You can also use `options()` for this step as well. The `var_spec` object has five dataset specification files stacked on top of each other. We will make use of the `ADSL` subset of `var_spec`. You can make use of the Search field above the dataset column to subset the specification file for `ADSL` ```{r} var_spec <- var_spec %>% From 91f2b654b7b931a31dac057f8e887db7599eb89d Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:09:08 -0400 Subject: [PATCH 217/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index d4532237..1f40e778 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -226,7 +226,7 @@ adsl_type_glimpse <- adsl_type %>% select(STUDYID, TRTSDT, TRTEDT, DISONSDT, VISIT1DT, RFENDT) ``` -Success! As we can see below the `xportr_type()` function applied the types from the metadata object to the below columns converting them all to the proper type. The functions in `{xportr}` also display this coercion to the user in the console, which is seen above. +Success! As we can see below, `xportr_type()` applied the types from the metadata object to the below columns converting them all to the proper type. The functions in `{xportr}` also display this coercion to the user in the console, which is seen above. ```{r, echo = TRUE} glimpse(adsl_type_glimpse) From 2117b9bdc295208cc31c45b2816cd3c321b5d605 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:09:38 -0400 Subject: [PATCH 218/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 1f40e778..a34a71a4 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -232,7 +232,7 @@ Success! As we can see below, `xportr_type()` applied the types from the metadat glimpse(adsl_type_glimpse) ``` -Note that the `xportr_type(verbpse = "warn")` was set so the function has provided feedback, which would show up in the console, on which variables were converted as a warning message. However, you can set `verbose = 'stop'` so that the types are not applied as the data does not match what is in the specification file. Using `verbose = 'stop'` will instantly stop the processing of this function and not create the object. A user will need to alter the variables in their R script before using `xportr_type()` +Note that `xportr_type(verbose = "warn")` was set so the function has provided feedback, which would show up in the console, on which variables were converted as a warning message. However, you can set `verbose = "stop"` so that the types are not applied if the data does not match what is in the specification file. Using `verbose = "stop"` will instantly stop the processing of this function and not create the object. A user will need to alter the variables in their R script before using `xportr_type()` ```{r, echo = TRUE, error = TRUE} adsl_type <- xportr_type(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "stop") From 76d22ba9075910be599459f2dde030edc9b15059 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:09:55 -0400 Subject: [PATCH 219/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index a34a71a4..d21fe636 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -240,7 +240,7 @@ adsl_type <- xportr_type(.df = adsl, metadata = var_spec, domain = "ADSL", verbo ## `xportr_length()` -Next we will use `xportr_length()` to apply the length column of the _metadata object_ to the `ADSL` dataset. Using the `str()` function we have displayed al the variables with their attributes. You can see that each variable has a label, but there is no information on the lengths of the variable. +Next we will use `xportr_length()` to apply the length column of the _metadata object_ to the `ADSL` dataset. Using the `str()` function we have displayed all the variables with their attributes. You can see that each variable has a label, but there is no information on the lengths of the variable. ```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} str(adsl) From c95a6902c5b89a0ecc1fbd04a02bb4c6309debbe Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:10:17 -0400 Subject: [PATCH 220/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index d21fe636..c6bd147f 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -253,7 +253,7 @@ TODO: There is no message to users about how many lengths were applied to the da adsl_length <- xportr_length(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "warn") ``` -Using the `xportr_length()` function with `verbose = 'warn'` we can apply the length column to all the columns in the dataset. The function detects that two variables, `TRTDUR` and `DCREASCD` are missing from the metadata file. Note that the variables have slight misspellings differences in the dataset and metadata, which is a great catch! However, lengths are still applied with TRTDUR being give a length of 8 and DCREASCD a length of 200. +Using `xportr_length()` with `verbose = "warn"` we can apply the length column to all the columns in the dataset. The function detects that two variables, `TRTDUR` and `DCREASCD` are missing from the metadata file. Note that the variables have slight misspellings in the dataset and metadata, which is a great catch! However, lengths are still applied with TRTDUR being give a length of 8 and DCREASCD a length of 200. Using the `str()` function, you can see below that the `xportr_length()` function successfully applied all the lengths of the variable to the variables in the dataset. From e12b51b786bfe0d334806f6ba7881df9aa1fd0e3 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:10:34 -0400 Subject: [PATCH 221/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index c6bd147f..2ab8e045 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -255,7 +255,7 @@ adsl_length <- xportr_length(.df = adsl, metadata = var_spec, domain = "ADSL", v Using `xportr_length()` with `verbose = "warn"` we can apply the length column to all the columns in the dataset. The function detects that two variables, `TRTDUR` and `DCREASCD` are missing from the metadata file. Note that the variables have slight misspellings in the dataset and metadata, which is a great catch! However, lengths are still applied with TRTDUR being give a length of 8 and DCREASCD a length of 200. -Using the `str()` function, you can see below that the `xportr_length()` function successfully applied all the lengths of the variable to the variables in the dataset. +Using the `str()` function, you can see below that `xportr_length()` successfully applied all the lengths of the variable to the variables in the dataset. ```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} From 433accb2f674f756d6074c6197e64e9187b0177b Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:11:03 -0400 Subject: [PATCH 222/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 2ab8e045..4b794085 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -336,7 +336,7 @@ Readers are encouraged to inspect the dataset and metadata to see the past order adsl_ord <- xportr_order(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "stop") ``` -Just like we did for the other functions, setting `verbose = 'stop'` immediately stops R from processing the order. For this function if variables or metadata are missing from either, then the function will not process until corrective action is performed. +Just like we did for the other functions, setting `verbose = "stop"` immediately stops R from processing the order. If variables or metadata are missing from either, the re-ordering will not process until corrective action is performed. ## `xportr_format()` From 848ba3b05d22eae0123d74122c8c07572496c921 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:11:32 -0400 Subject: [PATCH 223/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 4b794085..a85548a7 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -262,7 +262,7 @@ Using the `str()` function, you can see below that `xportr_length()` successfull str(adsl_length) ``` -Just like we did for `xportr_type()`, setting `verbose = 'stop'` immediately stops R from processing the lengths. Here the function detects the missing variables and will not apply any lengths to the dataset until corrective action is applied. +Just like we did for `xportr_type()`, setting `verbose = "stop"` immediately stops R from processing the lengths. Here the function detects the missing variables and will not apply any lengths to the dataset until corrective action is applied. ```{r, echo = TRUE, error = TRUE} adsl_length <- xportr_length(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "stop") From 1ab4323236d5fdfd12629317be666c67c6a17caa Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:11:55 -0400 Subject: [PATCH 224/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index a85548a7..2c555f44 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -300,7 +300,7 @@ We have successfully removed all the labels. str(adsl_lbl) ``` -Using `xportr_label()` we will apply all the labels from our metadata to the dataset. Please note again that we are using `verbose = 'warn'` and the same two issues for `TRTDUR` and `DCREASCD` are reported as missing from the metadata file. An additional message is sent around the `TRTSDT` label having a length of greater than 40. +Using `xportr_label()` we will apply all the labels from our metadata to the dataset. Please note again that we are using `verbose = "warn"` and the same two issues for `TRTDUR` and `DCREASCD` are reported as missing from the metadata file. An additional message is sent around the `TRTSDT` label having a length of greater than 40. ```{r} adsl_lbl <- xportr_label(.df = adsl_lbl, metadata = var_spec_lbl, domain = "ADSL", verbose = "warn") From 8ab0912faa85c4201d7dfc019a7b3a857aa5f827 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Thu, 8 Jun 2023 13:12:11 -0400 Subject: [PATCH 225/337] Update vignettes/deepdive.Rmd Co-authored-by: Ethan Brockmann <59264453+EeethB@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 2c555f44..92ab689d 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -312,7 +312,7 @@ Success! All labels have been applied that are present in the both the metadata str(adsl_lbl) ``` -Just like we did for the other functions, setting `verbose = 'stop'` immediately stops R from processing the labels. Here the function detects the mismatches between the variables and labels as well as the label that is greater than 40 characters. As this stops the process, none of the labels will be applied to the dataset until corrective action is applied. +Just like we did for the other functions, setting `verbose = "stop"` immediately stops R from processing the labels. Here the function detects the mismatches between the variables and labels as well as the label that is greater than 40 characters. As this stops the process, none of the labels will be applied to the dataset until corrective action is applied. ```{r, echo = TRUE, error = TRUE} adsl_label <- xportr_label(.df = adsl_lbl, metadata = var_spec_lbl, domain = "ADSL", verbose = "stop") From f9193b951454de63edb86a9fc173066d7cd2f966 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 8 Jun 2023 17:24:36 +0000 Subject: [PATCH 226/337] docs: #84 removed TODOs. moved library() calls --- vignettes/deepdive.Rmd | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 92ab689d..ea5c3ff5 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -19,8 +19,6 @@ knitr::opts_chunk$set( options(cli.num_colors = 1) library(DT) -library(rlang) -library(haven) ``` ```{r, include=FALSE} @@ -113,6 +111,7 @@ Before we dive into the functions, we want to point out some quality of life uti Let's take a look at our example specification file names available in this package. We can see that all the columns start with an upper case letter and have spaces in several of them. We could convert all the column names to lower case and deal with the spacing using some `{dplyr}` functions or base R, or we could just use `options()`! ```{r, message = FALSE} +library(rlang) library(xportr) library(dplyr) @@ -121,8 +120,6 @@ colnames(var_spec) By using `options()` at the beginning of our script we can tell `{xportr}` what the valid names are (see chunk below). Please note that before we set the options the package assumed every thing was in lowercase and there were no spaces in the names. After running `options()`, `{xportr}` sees the column `Variable` as the valid name rather than `variable`. You can inspect [`zzz.R`](https://github.com/atorus-research/xportr/blob/main/R/zzz.R) to look at additional options. -TODO: Can xportr.variable_name = "Variable" be xportr.variable_name = c("Variable", variable) - ```{r, eval = FALSE} options( xportr.variable_name = "Variable", @@ -150,7 +147,6 @@ adsl %>% To help reduce these repetitive calls, we have created `xportr_metadata()`. A user can just **set** the _metadata object_ and the Domain name in the first call, and this will be passed on to the other functions. Much cleaner! -TODO: Be able to set `verbose` in `xportr_metadata` ```{r, eval = FALSE} adsl %>% @@ -176,9 +172,9 @@ First, let's read in the specification file and call it `var_spec`. Note that w ```{r} var_spec <- var_spec %>% - dplyr::rename(type = "Data Type") %>% - rlang::set_names(tolower) %>% - dplyr::mutate(order = as.numeric(order)) + rename(type = "Data Type") %>% + set_names(tolower) %>% + mutate(order = as.numeric(order)) ``` ```{r, echo = FALSE} @@ -246,9 +242,6 @@ Next we will use `xportr_length()` to apply the length column of the _metadata o str(adsl) ``` -TODO: There is no warning around the length in the metadata being greater than 200. -TODO: There is no message to users about how many lengths were applied to the dataframe. - ```{r, echo = TRUE} adsl_length <- xportr_length(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "warn") ``` @@ -356,17 +349,7 @@ Success! We have taken the metadata formats and applied them to the dataset. Ple str(adsl_fmt) ``` - -```{r, echo = TRUE, error = TRUE} -var_spec_fmt <- var_spec %>% - mutate(format = if_else(variable == "TRTSDT", - "NARNAR", format - )) - -adsl_fmt <- xportr_format(.df = adsl, metadata = var_spec_fmt, domain = "ADSL", verbose = "stop") -``` - -TODO: No information on bad formats or how many formats are applied to a dataset. +At the time of `{xportr} v0.3.0` we have not impleneted any warnings or error messaging for this function. However, `xportr_write()` through `xpt_validate()` will check that formats have been applied for Date-Time variables. ## `xportr_write()` From dfb66b1ee5e56b9521db43b99af965ab3a117b38 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 8 Jun 2023 17:25:31 +0000 Subject: [PATCH 227/337] docs: #84 news tweak --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index 3f731014..f5cbf089 100644 --- a/NEWS.md +++ b/NEWS.md @@ -19,7 +19,9 @@ and Breaking Changes * The `metacore` argument has been renamed to `metadata` in the following six xportr functions: `xportr_df_label()`, `xportr_format()`, `xportr_label()`, `xportr_length()`, `xportr_order()`, and `xportr_type()`. Please update your code to use the new `metadata` argument in place of `metacore`. + # xportr 0.2.0 + * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! * Fixed an issue where xportr_format could pass invalid formats to haven::write_xpt. From b309c8471568ae2eac4907f0141e2bc0cf4c1392 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 8 Jun 2023 17:33:18 +0000 Subject: [PATCH 228/337] docs: #150 removing br --- vignettes/xportr.Rmd | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 1e54a400..0413a2d6 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -75,6 +75,8 @@ library(dplyr) library(labelled) library(xportr) library(admiral) +library(rlang) +library(readxl) # Loading in our example data adsl <- admiral::admiral_adsl @@ -110,14 +112,13 @@ var_spec <- readxl::read_xlsx( rlang::set_names(tolower) ``` -
    Below is a quick snapshot of the specification file pertaining to the `ADSL` data set, which we will make use of in the 6 `xportr` function calls below. Take note of the order, label, type, length and format columns. -
    ```{r, echo = FALSE, eval = TRUE} -var_spec_view <- var_spec %>% filter(dataset == "ADSL") +var_spec_view <- var_spec %>% + filter(dataset == "ADSL") DT::datatable(var_spec_view, options = list( autoWidth = FALSE, scrollX = TRUE, pageLength = 5, @@ -125,23 +126,16 @@ DT::datatable(var_spec_view, options = list( )) ``` -
    - # xportr_type() -
    - In order to be compliant with transport v5 specifications an `xpt` file can only have two data types: character and numeric/dbl. Currently the `ADSL` data set has chr, dbl, time, factor and date. -```{r, eval = TRUE} -look_for(adsl, details = TRUE) +```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} +glimpse(adsl, details = TRUE) ``` -
    - Using `xport_type` and the supplied specification file, we can *coerce* the variables in the `ADSL` set to be either numeric or character. -
    ```{r, warning=FALSE, message=FALSE, echo = TRUE, results='hide'} adsl_type <- xportr_type(adsl, var_spec, domain = "ADSL", verbose = "message") From a51bbbe777b42bb6020fad85e784bdcafbbe7f87 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 8 Jun 2023 17:36:19 +0000 Subject: [PATCH 229/337] chore: #84 missing package --- vignettes/deepdive.Rmd | 1 + 1 file changed, 1 insertion(+) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index ea5c3ff5..4861091a 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -114,6 +114,7 @@ Let's take a look at our example specification file names available in this pack library(rlang) library(xportr) library(dplyr) +library(haven) colnames(var_spec) ``` From 93b481d815ab82d3261cb73b2e82211b504c15ee Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 8 Jun 2023 18:13:24 +0000 Subject: [PATCH 230/337] chore: #150 lint --- vignettes/xportr.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 19dce466..964ec535 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -103,7 +103,7 @@ var_spec <- read_xlsx( Below is a quick snapshot of the specification file pertaining to the `ADSL` data set, which we will make use of in the 6 `{xportr}` function calls below. Take note of the order, label, type, length and format columns. ```{r, echo = FALSE, eval = TRUE} -var_spec_view <- var_spec %>% +var_spec_view <- var_spec %>% filter(dataset == "ADSL") DT::datatable(var_spec_view, options = list( From ba7e540e10c34c701d6b1a8486502377dd7ffc83 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 8 Jun 2023 18:24:23 +0000 Subject: [PATCH 231/337] chore: #150 style --- vignettes/xportr.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 964ec535..cf472fe0 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -19,7 +19,6 @@ knitr::opts_chunk$set( library(DT) options(cli.num_colors = 1) - ``` ```{r, include=FALSE} @@ -95,7 +94,8 @@ In order to make use of the functions within `{xportr}` you will need to create ```{r} var_spec <- read_xlsx( system.file(paste0("specs/", "ADaM_admiral_spec.xlsx"), package = "xportr"), - sheet = "Variables") %>% + sheet = "Variables" +) %>% rename(type = "Data Type") %>% set_names(tolower) ``` From 3583b24651b50ccd0f0acc3e75bf0c130ee94348 Mon Sep 17 00:00:00 2001 From: "Chan, Adrian {MDBT~Mississauga}" Date: Thu, 8 Jun 2023 21:14:30 +0200 Subject: [PATCH 232/337] updates --- R/type.R | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/R/type.R b/R/type.R index 68795c86..704cfa92 100644 --- a/R/type.R +++ b/R/type.R @@ -76,7 +76,7 @@ xportr_type <- function( filter(!!sym(domain_name) == domain) } - metacore <- metacore %>% + metacore <- metadata %>% select(!!sym(variable_name), !!sym(type_name), !!sym(format_name)) # Current class of table variables @@ -93,8 +93,10 @@ xportr_type <- function( # want 'character' coerced to character type.x = if_else(type.x %in% characterTypes, "_character", type.x), type.x = if_else(type.x %in% numericTypes | (grepl('DT$|DTM$|TM$', variable) & !is.na(format)), "_numeric", type.x), + type.x = if_else(grepl('DTC$', variable) & type.x == '_character', 'Date', type.x), + type.y = if_else(is.na(type.y), type.x, type.y), type.y = tolower(type.y), - type.y = if_else(type.y %in% characterTypes, "_character", type.y), + type.y = if_else(type.y %in% characterTypes | (grepl('DTC$', variable) & is.na(format)), "_character", type.y), type.y = if_else(type.y %in% numericTypes, "_numeric", type.y) ) @@ -105,7 +107,6 @@ xportr_type <- function( type_mismatch_ind <- which(meta_ordered$type.x != meta_ordered$type.y) type_log(meta_ordered, type_mismatch_ind, verbose) - # Check if variable types match is_correct <- sapply(meta_ordered[["type.x"]] == meta_ordered[["type.y"]], isTRUE) # Use the original variable iff metadata is missing that variable From 21f857e1ee752fa56950d86b3382205daaabe408 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 8 Jun 2023 17:45:36 -0500 Subject: [PATCH 233/337] Update NEWS.md Co-authored-by: Ben Straub --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index e31b5c42..2eb5d483 100644 --- a/NEWS.md +++ b/NEWS.md @@ -7,7 +7,7 @@ * Add new argument to `xportr_write` to allow users to specify how xpt validation checks are handled. * Fixed bug where character_types were case sensitive. They are now case insensitive. * Updated `xportr_type` to make type coercion more explicit. -* `xpt_validate` updated to accept iso8601 date formats. +* `xpt_validate` updated to accept iso8601 date formats. (#76) * Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline (#44) ## Documentation From be2f7e4a290c54e1d1ea1f802fd40bf39e55dfe8 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 8 Jun 2023 17:46:11 -0500 Subject: [PATCH 234/337] Update R/utils-xportr.R Co-authored-by: cpiraux <69685640+cpiraux@users.noreply.github.com> --- R/utils-xportr.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index b7ca00e3..5f9d10b7 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -257,7 +257,7 @@ xpt_validate <- function(data) { "E8601DT", "B8601DT", "IS8601DA", - "E8601DT", + "E8601DA", "B8601DA", "weekdate", "mmddyy", From 0ead01d32de276ec34104946ca6b83571251d203 Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 9 Jun 2023 02:43:56 +0000 Subject: [PATCH 235/337] Capture haven errors. Add dots to format list --- R/format.R | 11 +++++------ R/label.R | 11 +++++------ R/length.R | 11 +++++------ R/order.R | 11 +++++------ R/type.R | 11 +++++------ R/utils-xportr.R | 31 +++++++++++++++---------------- R/write.R | 12 +++++++++++- tests/testthat/test-write.R | 23 +++++++++++++++++++++++ 8 files changed, 74 insertions(+), 47 deletions(-) diff --git a/R/format.R b/R/format.R index 9c8fd527..bfc6bd40 100644 --- a/R/format.R +++ b/R/format.R @@ -28,12 +28,11 @@ #' ) #' #' adsl <- xportr_format(adsl, metadata) -xportr_format <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_format <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/label.R b/R/label.R index 738a5d50..e627c85c 100644 --- a/R/label.R +++ b/R/label.R @@ -30,12 +30,11 @@ #' ) #' #' adsl <- xportr_label(adsl, metadata) -xportr_label <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_label <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/length.R b/R/length.R index dd6842dd..46f6b26c 100644 --- a/R/length.R +++ b/R/length.R @@ -28,12 +28,11 @@ #' ) #' #' adsl <- xportr_length(adsl, metadata) -xportr_length <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_length <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/order.R b/R/order.R index a49a560f..769a24a1 100644 --- a/R/order.R +++ b/R/order.R @@ -25,12 +25,11 @@ #' ) #' #' adsl <- xportr_order(adsl, metadata) -xportr_order <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_order <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/type.R b/R/type.R index bac6bb9b..9c28a06b 100644 --- a/R/type.R +++ b/R/type.R @@ -32,12 +32,11 @@ #' ) #' #' df2 <- xportr_type(.df, metadata, "test") -xportr_type <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_type <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/utils-xportr.R b/R/utils-xportr.R index b7ca00e3..e7870714 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -253,22 +253,21 @@ xpt_validate <- function(data) { "E8601DZw.d", "E8601LXw.", "E8601DXw.", - "IS8601DT", - "E8601DT", - "B8601DT", - "IS8601DA", - "E8601DT", - "B8601DA", - "weekdate", - "mmddyy", - "ddmmyy", - "yymmdd", - "date", - "time", - "hhmm", - "IS8601TM", - "E8601TM", - "B8601TM" + "IS8601DT.", + "E8601DT.", + "B8601DT.", + "IS8601DA.", + "B8601DA.", + "weekdate.", + "mmddyy.", + "ddmmyy.", + "yymmdd.", + "date.", + "time.", + "hhmm.", + "IS8601TM.", + "E8601TM.", + "B8601TM." ) format_regex <- "^([1-9]|[12][0-9]|3[0-2])\\.$|^([1-9]|[12][0-9]|3[0-2])\\.([1-9]|[12][0-9]|3[0-1])$" diff --git a/R/write.R b/R/write.R index e030dfa4..eb1e1775 100644 --- a/R/write.R +++ b/R/write.R @@ -60,7 +60,17 @@ xportr_write <- function(.df, path, label = NULL, strict_checks = FALSE) { data <- as.data.frame(.df) - write_xpt(data, path = path, version = 5, name = name) + tryCatch( + write_xpt(data, path = path, version = 5, name = name), + error = function(err) { + rlang::abort( + paste0( + "Error reported by haven::write_xpt, error was: \n", + err + ) + ) + } + ) invisible(data) } diff --git a/tests/testthat/test-write.R b/tests/testthat/test-write.R index 9b3b2f32..ba165e3c 100644 --- a/tests/testthat/test-write.R +++ b/tests/testthat/test-write.R @@ -84,3 +84,26 @@ test_that("xportr_write: expect warning when an xpt validation fails with strict expect_warning(xportr_write(data_to_save, tmp, label = "label", strict_checks = FALSE)) }) + +test_that("xportr_write: expect warning when an xpt validation fails with strict_checks set to FALSE", { + tmpdir <- tempdir() + tmp <- file.path(tmpdir, "xyz.xpt") + attr(data_to_save$X, "format.sas") <- "foo" + + on.exit(unlink(tmpdir)) + + expect_warning(xportr_write(data_to_save, tmp, label = "label", strict_checks = FALSE)) +}) + +test_that("xportr_write: Capture errors by haven and report them as such", { + tmpdir <- tempdir() + tmp <- file.path(tmpdir, "xyz.xpt") + attr(data_to_save$X, "format.sas") <- "E8601LXw.asdf" + + on.exit(unlink(tmpdir)) + + expect_error( + suppressWarnings(xportr_write(data_to_save, tmp, label = "label", strict_checks = FALSE)), + "Error reported by haven" + ) +}) From 7230cb25beade42e2497cc3ff98a7a1a55f7d80e Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 9 Jun 2023 02:51:30 +0000 Subject: [PATCH 236/337] add missing format --- R/utils-xportr.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index c65b5168..e7870714 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -252,6 +252,7 @@ xpt_validate <- function(data) { "E8601DTw.d", "E8601DZw.d", "E8601LXw.", + "E8601DXw.", "IS8601DT.", "E8601DT.", "B8601DT.", From 0d13895cd18e684da1375c4a4ee6ca8d9f6bd4ec Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 9 Jun 2023 03:09:50 +0000 Subject: [PATCH 237/337] #149 - Coerse metadata order to numeric --- NEWS.md | 1 + R/format.R | 11 +++++------ R/label.R | 11 +++++------ R/length.R | 11 +++++------ R/order.R | 12 ++++++------ R/type.R | 11 +++++------ tests/testthat/test-order.R | 13 +++++++++++++ 7 files changed, 40 insertions(+), 30 deletions(-) diff --git a/NEWS.md b/NEWS.md index f42c3fe0..48030221 100644 --- a/NEWS.md +++ b/NEWS.md @@ -8,6 +8,7 @@ * Fixed bug where character_types were case sensitive. They are now case insensitive. * Updated `xportr_type` to make type coercion more explicit. * Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline (#44) +* Metadata order columns are now coersed to numeric by default in `xportr_order` to prevent character sorting (#149) ## Documentation diff --git a/R/format.R b/R/format.R index 9c8fd527..bfc6bd40 100644 --- a/R/format.R +++ b/R/format.R @@ -28,12 +28,11 @@ #' ) #' #' adsl <- xportr_format(adsl, metadata) -xportr_format <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_format <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/label.R b/R/label.R index 738a5d50..e627c85c 100644 --- a/R/label.R +++ b/R/label.R @@ -30,12 +30,11 @@ #' ) #' #' adsl <- xportr_label(adsl, metadata) -xportr_label <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_label <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/length.R b/R/length.R index dd6842dd..46f6b26c 100644 --- a/R/length.R +++ b/R/length.R @@ -28,12 +28,11 @@ #' ) #' #' adsl <- xportr_length(adsl, metadata) -xportr_length <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_length <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/order.R b/R/order.R index a49a560f..7ecce6d8 100644 --- a/R/order.R +++ b/R/order.R @@ -25,12 +25,11 @@ #' ) #' #' adsl <- xportr_order(adsl, metadata) -xportr_order <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_order <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", @@ -69,6 +68,7 @@ xportr_order <- function( # Grabs vars from Spec and inputted dataset vars_in_spec_ds <- metadata[, c(variable_name, order_name)] %>% + mutate(!!sym(order_name) := as.numeric(!!sym(order_name))) %>% arrange(!!sym(order_name)) %>% extract2(variable_name) diff --git a/R/type.R b/R/type.R index bac6bb9b..9c28a06b 100644 --- a/R/type.R +++ b/R/type.R @@ -32,12 +32,11 @@ #' ) #' #' df2 <- xportr_type(.df, metadata, "test") -xportr_type <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_type <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index 11cde5f7..6f087841 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -137,3 +137,16 @@ test_that("xportr_order: Variable ordering messaging is correct", { ) ) }) + +test_that("xportr_order: Metadata order columns are coersed to numeric", { + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) + df_meta <- data.frame( + dataset = "df", + variable = letters[1:4], + order = c("1", "2", "11", "90") + ) + + ordered_df <- xportr_order(df, df_meta) + + expect_equal(names(ordered_df), df_meta$variable) +}) From 27c495e3a4f24ddd548ec2c1a171450f0834454b Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 9 Jun 2023 04:23:19 +0000 Subject: [PATCH 238/337] Update docs to add messaging --- R/df_label.R | 27 +++++++-------------------- R/format.R | 13 +++++-------- R/label.R | 27 ++++++++++++++++++--------- R/length.R | 37 ++++++++++++++++++++++++++++--------- R/messages.R | 6 +++--- R/metadata.R | 2 +- R/order.R | 34 +++++++++++++++++++++++++--------- R/type.R | 24 +++++++++++++++--------- man/xportr_df_label.Rd | 12 +----------- man/xportr_format.Rd | 12 +----------- man/xportr_label.Rd | 16 ++++++++++++++-- man/xportr_length.Rd | 14 +++++++++++++- man/xportr_order.Rd | 22 ++++++++++++++++++++-- man/xportr_type.Rd | 13 +++++++++++-- 14 files changed, 162 insertions(+), 97 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index eb4df887..a3ab8087 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -2,17 +2,7 @@ #' #' Assigns dataset label from a dataset level metadata to a given data frame. #' -#' @param .df A data frame of CDISC standard. -#' @param metadata A data frame containing dataset/variable level metadata. See -#' 'Metadata' section for details. -#' @param domain Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset -#' the metadata object. If none is passed, then name of the dataset passed as -#' .df will be used. -#' @param verbose The action the function takes when an action is taken on the -#' dataset or function validation finds an issue. See 'Messaging' section for -#' details. Options are 'stop', 'warn', 'message', and 'none' -#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass -#' metadata now renamed with `metadata` +#' @inheritParams xportr_length #' #' @return Data frame with label attributes. #' @@ -32,18 +22,15 @@ #' ) #' #' adsl <- xportr_df_label(adsl, metadata) -xportr_df_label <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated() -) { +xportr_df_label <- function(.df, + metadata = NULL, + domain = NULL, + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", - what = "xportr_format(metacore = )", - with = "xportr_format(metadata = )" + what = "xportr_df_label(metacore = )", + with = "xportr_df_label(metadata = )" ) metadata <- metacore } diff --git a/R/format.R b/R/format.R index bd1d4be8..f8b90af9 100644 --- a/R/format.R +++ b/R/format.R @@ -2,7 +2,7 @@ #' #' Assigns a SAS format from a variable level metadata to a given data frame. #' -#' @inheritParams xportr_df_label +#' @inheritParams xportr_length #' #' @return Data frame with `SASformat` attributes for each variable. #' @@ -21,13 +21,10 @@ #' ) #' #' adsl <- xportr_format(adsl, metadata) -xportr_format <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated() -) { +xportr_format <- function(.df, + metadata = NULL, + domain = NULL, + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/label.R b/R/label.R index 53a9e272..0e44c6de 100644 --- a/R/label.R +++ b/R/label.R @@ -2,7 +2,17 @@ #' #' Assigns variable label from a variable level metadata to a given data frame. #' -#' @inheritParams xportr_df_label +#' @inheritParams xportr_length +#' +#' @section Messaging: +#' `label_log` is the primary messaging tool for `xportr_label`. If there are +#' any columns present in the '.df' that are not noted in the metadata, they +#' cannot be assigned a label and a message will be generated noting the number +#' or variables that have not been assigned a label. +#' +#' If variables were not found in the metadata and the value passed to the +#' 'verbose' argument is 'stop', 'warn', or 'message', a message will be +#' generated detailing the variables that were missing in metadata. #' #' @return Data frame with label attributes for each variable. #' @@ -23,17 +33,16 @@ #' ) #' #' adsl <- xportr_label(adsl, metadata) -xportr_label <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_label <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.label_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", - what = "xportr_format(metacore = )", - with = "xportr_format(metadata = )" + what = "xportr_label(metacore = )", + with = "xportr_label(metadata = )" ) metadata <- metacore } diff --git a/R/length.R b/R/length.R index e254e437..2e2aa177 100644 --- a/R/length.R +++ b/R/length.R @@ -2,7 +2,27 @@ #' #' Assigns SAS length from a variable level metadata to a given data frame. #' -#' @inheritParams xportr_df_label +#' @param .df A data frame of CDISC standard. +#' @param metadata A data frame containing dataset/variable level metadata. See +#' 'Metadata' section for details. +#' @param domain Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset +#' the metadata object. If none is passed, then name of the dataset passed as +#' .df will be used. +#' @param verbose The action this function takes when an action is taken on the +#' dataset or function validation finds an issue. See 'Messaging' section for +#' details. Options are 'stop', 'warn', 'message', and 'none' +#' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass +#' metadata now renamed with `metadata` +#' +#' @section Messaging: +#' `length_log` is the primary messaging tool for `xportr_length`. If there are +#' any columns present in the '.df' that are not noted in the metadata, they +#' cannot be assigned a length and a message will be generated noting the number +#' or variables that have not been assigned a length. +#' +#' If variables were not found in the metadata and the value passed to the +#' 'verbose' argument is 'stop', 'warn', or 'message', a message will be +#' generated detailing the variables that were missing in metadata. #' #' @return Data frame with `SASlength` attributes for each variable. #' @@ -21,17 +41,16 @@ #' ) #' #' adsl <- xportr_length(adsl, metadata) -xportr_length <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_length <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", - what = "xportr_format(metacore = )", - with = "xportr_format(metadata = )" + what = "xportr_length(metacore = )", + with = "xportr_length(metadata = )" ) metadata <- metacore } diff --git a/R/messages.R b/R/messages.R index 8f77a157..dca3a951 100644 --- a/R/messages.R +++ b/R/messages.R @@ -77,15 +77,15 @@ var_names_log <- function(tidy_names_df, verbose) { #' @export type_log <- function(meta_ordered, type_mismatch_ind, verbose) { if (length(type_mismatch_ind) > 0) { + cli_h2("Variable type mismatches found.") + cli_alert_success("{ length(type_mismatch_ind) } variables coerced") + message <- glue( "Variable type(s) in dataframe don't match metadata: ", "{encode_vars(meta_ordered[type_mismatch_ind, 'variable'])}" ) xportr_logger(message, verbose) - - cli_h2("Variable type mismatches found.") - cli_alert_success("{ length(type_mismatch_ind) } variables coerced") } } diff --git a/R/metadata.R b/R/metadata.R index ac94213f..10aad1cb 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -4,7 +4,7 @@ #' functions. If used at the start of an xportr pipeline, it removes the need to #' set metadata and domain at each step individually #' -#' @inheritParams xportr_df_label +#' @inheritParams xportr_length #' #' @return `.df` dataset with metadata and domain attributes set #' @export diff --git a/R/order.R b/R/order.R index ae30f47e..56c39499 100644 --- a/R/order.R +++ b/R/order.R @@ -1,8 +1,25 @@ #' Order variables of a dataset according to Spec #' -#' @inheritParams xportr_df_label +#' @inheritParams xportr_length #' #' @export +#' +#' @section Messaging: +#' `var_ord_msg` is the primary messaging tool for `xportr_order`. There are two +#' primary messages that are output from `var_ord_msg`. The first is the "moved" +#' variables. These are the variables that were not found in the metadata file +#' and moved to the end of the dataset. A message will be generated noting the +#' number, if any, of variables that were moved to the end of the dataset. If +#' any variables were moved, and the 'verbose' argument is 'stop', 'warn', or +#' 'message', a message will be generated detailing the variables that were +#' moved. +#' +#' The second primary message is the number of variables that were in the +#' dataset, but not in the correct order. A message will be generated noting the +#' number, if any, of variables that have been reordered. If any variables were +#' reordered, and the 'verbose' argument is 'stop', 'warn', or 'message', a +#' message will be generated detailing the variables that were reordered. +#' #' @return Dataframe that has been re-ordered according to spec #' #' @examples @@ -20,17 +37,16 @@ #' ) #' #' adsl <- xportr_order(adsl, metadata) -xportr_order <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_order <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.order_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", - what = "xportr_format(metacore = )", - with = "xportr_format(metadata = )" + what = "xportr_order(metacore = )", + with = "xportr_order(metadata = )" ) metadata <- metacore } diff --git a/R/type.R b/R/type.R index 121df29c..812afb0e 100644 --- a/R/type.R +++ b/R/type.R @@ -3,7 +3,14 @@ #' Current assumptions: #' columns_meta is a data.frame with names "Variables", "Type" #' -#' @inheritParams xportr_df_label +#' @inheritParams xportr_length +#' +#' @section Messaging: +#' `type_log` is the primary messaging tool for `xportr_type`. The number of +#' column types that mismatch the reported type in the metadata, if any, is +#' reported by by `xportr_type`. If there are any type mismatches, and the +#' 'verbose' argument is 'stop', 'warn', or 'message', the type mismatches will +#' be detailed the actual type and the type reported in the metadata. #' #' @return Returns the modified table. #' @export @@ -23,17 +30,16 @@ #' ) #' #' df2 <- xportr_type(.df, metadata, "test") -xportr_type <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_type <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.type_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", - what = "xportr_format(metacore = )", - with = "xportr_format(metadata = )" + what = "xportr_type(metacore = )", + with = "xportr_type(metadata = )" ) metadata <- metacore } diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index 7422fd13..cb566f36 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -4,13 +4,7 @@ \alias{xportr_df_label} \title{Assign Dataset Label} \usage{ -xportr_df_label( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated() -) +xportr_df_label(.df, metadata = NULL, domain = NULL, metacore = deprecated()) } \arguments{ \item{.df}{A data frame of CDISC standard.} @@ -22,10 +16,6 @@ xportr_df_label( the metadata object. If none is passed, then name of the dataset passed as .df will be used.} -\item{verbose}{The action the function takes when an action is taken on the -dataset or function validation finds an issue. See 'Messaging' section for -details. Options are 'stop', 'warn', 'message', and 'none'} - \item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} } diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index 3f251e12..7d4e3ea5 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -4,13 +4,7 @@ \alias{xportr_format} \title{Assign SAS Format} \usage{ -xportr_format( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated() -) +xportr_format(.df, metadata = NULL, domain = NULL, metacore = deprecated()) } \arguments{ \item{.df}{A data frame of CDISC standard.} @@ -22,10 +16,6 @@ xportr_format( the metadata object. If none is passed, then name of the dataset passed as .df will be used.} -\item{verbose}{The action the function takes when an action is taken on the -dataset or function validation finds an issue. See 'Messaging' section for -details. Options are 'stop', 'warn', 'message', and 'none'} - \item{metacore}{\ifelse{html}{\href{https://lifecycle.r-lib.org/articles/stages.html#deprecated}{\figure{lifecycle-deprecated.svg}{options: alt='[Deprecated]'}}}{\strong{[Deprecated]}} Previously used to pass metadata now renamed with \code{metadata}} } diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index 097a0322..59ed1151 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -8,7 +8,7 @@ xportr_label( .df, metadata = NULL, domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), + verbose = getOption("xportr.label_verbose", "none"), metacore = deprecated() ) } @@ -22,7 +22,7 @@ xportr_label( the metadata object. If none is passed, then name of the dataset passed as .df will be used.} -\item{verbose}{The action the function takes when an action is taken on the +\item{verbose}{The action this function takes when an action is taken on the dataset or function validation finds an issue. See 'Messaging' section for details. Options are 'stop', 'warn', 'message', and 'none'} @@ -35,6 +35,18 @@ Data frame with label attributes for each variable. \description{ Assigns variable label from a variable level metadata to a given data frame. } +\section{Messaging}{ + +\code{label_log} is the primary messaging tool for \code{xportr_label}. If there are +any columns present in the '.df' that are not noted in the metadata, they +cannot be assigned a label and a message will be generated noting the number +or variables that have not been assigned a label. + +If variables were not found in the metadata and the value passed to the +'verbose' argument is 'stop', 'warn', or 'message', a message will be +generated detailing the variables that were missing in metadata. +} + \examples{ adsl <- data.frame( USUBJID = c(1001, 1002, 1003), diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index 04b86133..74796524 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -22,7 +22,7 @@ xportr_length( the metadata object. If none is passed, then name of the dataset passed as .df will be used.} -\item{verbose}{The action the function takes when an action is taken on the +\item{verbose}{The action this function takes when an action is taken on the dataset or function validation finds an issue. See 'Messaging' section for details. Options are 'stop', 'warn', 'message', and 'none'} @@ -35,6 +35,18 @@ Data frame with \code{SASlength} attributes for each variable. \description{ Assigns SAS length from a variable level metadata to a given data frame. } +\section{Messaging}{ + +\code{length_log} is the primary messaging tool for \code{xportr_length}. If there are +any columns present in the '.df' that are not noted in the metadata, they +cannot be assigned a length and a message will be generated noting the number +or variables that have not been assigned a length. + +If variables were not found in the metadata and the value passed to the +'verbose' argument is 'stop', 'warn', or 'message', a message will be +generated detailing the variables that were missing in metadata. +} + \examples{ adsl <- data.frame( USUBJID = c(1001, 1002, 1003), diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index 48f6765b..0bf08220 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -8,7 +8,7 @@ xportr_order( .df, metadata = NULL, domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), + verbose = getOption("xportr.order_verbose", "none"), metacore = deprecated() ) } @@ -22,7 +22,7 @@ xportr_order( the metadata object. If none is passed, then name of the dataset passed as .df will be used.} -\item{verbose}{The action the function takes when an action is taken on the +\item{verbose}{The action this function takes when an action is taken on the dataset or function validation finds an issue. See 'Messaging' section for details. Options are 'stop', 'warn', 'message', and 'none'} @@ -35,6 +35,24 @@ Dataframe that has been re-ordered according to spec \description{ Order variables of a dataset according to Spec } +\section{Messaging}{ + +\code{var_ord_msg} is the primary messaging tool for \code{xportr_order}. There are two +primary messages that are output from \code{var_ord_msg}. The first is the "moved" +variables. These are the variables that were not found in the metadata file +and moved to the end of the dataset. A message will be generated noting the +number, if any, of variables that were moved to the end of the dataset. If +any variables were moved, and the 'verbose' argument is 'stop', 'warn', or +'message', a message will be generated detailing the variables that were +moved. + +The second primary message is the number of variables that were in the +dataset, but not in the correct order. A message will be generated noting the +number, if any, of variables that have been reordered. If any variables were +reordered, and the 'verbose' argument is 'stop', 'warn', or 'message', a +message will be generated detailing the variables that were reordered. +} + \examples{ adsl <- data.frame( BRTHDT = c(1, 1, 2), diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index 12a445dc..d2942022 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -8,7 +8,7 @@ xportr_type( .df, metadata = NULL, domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), + verbose = getOption("xportr.type_verbose", "none"), metacore = deprecated() ) } @@ -22,7 +22,7 @@ xportr_type( the metadata object. If none is passed, then name of the dataset passed as .df will be used.} -\item{verbose}{The action the function takes when an action is taken on the +\item{verbose}{The action this function takes when an action is taken on the dataset or function validation finds an issue. See 'Messaging' section for details. Options are 'stop', 'warn', 'message', and 'none'} @@ -36,6 +36,15 @@ Returns the modified table. Current assumptions: columns_meta is a data.frame with names "Variables", "Type" } +\section{Messaging}{ + +\code{type_log} is the primary messaging tool for \code{xportr_type}. The number of +column types that mismatch the reported type in the metadata, if any, is +reported by by \code{xportr_type}. If there are any type mismatches, and the +'verbose' argument is 'stop', 'warn', or 'message', the type mismatches will +be detailed the actual type and the type reported in the metadata. +} + \examples{ metadata <- data.frame( dataset = "test", From e412b82e9a038478003b38f37981281b9e55b191 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Sun, 11 Jun 2023 14:52:33 -0400 Subject: [PATCH 239/337] Update NEWS.md --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 48030221..d94262d3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -8,7 +8,7 @@ * Fixed bug where character_types were case sensitive. They are now case insensitive. * Updated `xportr_type` to make type coercion more explicit. * Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline (#44) -* Metadata order columns are now coersed to numeric by default in `xportr_order` to prevent character sorting (#149) +* Metadata order columns are now coerced to numeric by default in `xportr_order()` to prevent character sorting (#149) ## Documentation From 6fffb8f04a11b88004fea83a6c19777c0acee807 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Sun, 11 Jun 2023 19:06:30 +0000 Subject: [PATCH 240/337] fix: #84 order update brought in Merge remote-tracking branch 'origin/devel' into 84_xportr_deep_dive_vignette --- vignettes/deepdive.Rmd | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 4861091a..c6fd8df8 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -174,8 +174,7 @@ First, let's read in the specification file and call it `var_spec`. Note that w ```{r} var_spec <- var_spec %>% rename(type = "Data Type") %>% - set_names(tolower) %>% - mutate(order = as.numeric(order)) + set_names(tolower) ``` ```{r, echo = FALSE} @@ -317,7 +316,7 @@ adsl_label <- xportr_label(.df = adsl_lbl, metadata = var_spec_lbl, domain = "AD The order of the dataset can greatly increase readability of the dataset for downstream stakeholders. For example, having all the treatment related variables or analysis variables grouped together can help with inspection and understanding of the dataset. `xportr_order()` can take the order information from the metadata and apply it to your dataset. ```{r} -adsl_ord <- xportr_order(adsl, var_spec, "ADSL", verbose = "warn") +adsl_ord <- xportr_order(.df = adsl, metadata = var_spec, domain = "ADSL", verbose = "warn") ``` Readers are encouraged to inspect the dataset and metadata to see the past order and updated order after calling the function. Note the messaging from `xportr_order()`: From 0203d281a5f25370e29ecdf701426fc7bc463fce Mon Sep 17 00:00:00 2001 From: bs832471 Date: Sun, 11 Jun 2023 20:14:26 +0000 Subject: [PATCH 241/337] chore: #84 fixing style and lint --- vignettes/deepdive.Rmd | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index c6fd8df8..d69d4cc4 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -174,7 +174,7 @@ First, let's read in the specification file and call it `var_spec`. Note that w ```{r} var_spec <- var_spec %>% rename(type = "Data Type") %>% - set_names(tolower) + set_names(tolower) ``` ```{r, echo = FALSE} @@ -192,7 +192,8 @@ datatable( dom = "Bfrtip", columnDefs = list(list(visible = FALSE, targets = columns2hide)) ) -) +) %>% + formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%") ``` ## `xportr_type()` From cf2aaafff0e35f17b8f7e9686a79ff081d59f605 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 6 Jun 2023 17:21:15 +0200 Subject: [PATCH 242/337] feat: add check for existence of repeated variables from domains --- R/format.R | 3 ++- R/label.R | 3 ++- R/length.R | 3 ++- R/order.R | 2 ++ R/type.R | 3 +++ R/utils-xportr.R | 27 +++++++++++++++++++++++++++ 6 files changed, 38 insertions(+), 3 deletions(-) diff --git a/R/format.R b/R/format.R index bfc6bd40..bab1adf2 100644 --- a/R/format.R +++ b/R/format.R @@ -65,7 +65,8 @@ xportr_format <- function(.df, metadata <- metadata %>% dplyr::filter(!!sym(domain_name) == domain & !is.na(!!sym(format_name))) } else { - metadata <- metadata + # Common check for multiple variables name + check_multiple_var_specs(metadata, variable_name) } filtered_metadata <- metadata %>% diff --git a/R/label.R b/R/label.R index e627c85c..24416e0e 100644 --- a/R/label.R +++ b/R/label.R @@ -67,7 +67,8 @@ xportr_label <- function(.df, metadata <- metadata %>% dplyr::filter(!!sym(domain_name) == domain) } else { - metadata <- metadata + # Common check for multiple variables name + check_multiple_var_specs(metadata, variable_name) } diff --git a/R/length.R b/R/length.R index 46f6b26c..3e981b0a 100644 --- a/R/length.R +++ b/R/length.R @@ -65,7 +65,8 @@ xportr_length <- function(.df, metadata <- metadata %>% filter(!!sym(domain_name) == domain) } else { - metadata <- metadata + # Common check for multiple variables name + check_multiple_var_specs(metadata, variable_name) } diff --git a/R/order.R b/R/order.R index 7ecce6d8..6a4fb7aa 100644 --- a/R/order.R +++ b/R/order.R @@ -64,6 +64,8 @@ xportr_order <- function(.df, } else { metadata <- metadata %>% dplyr::filter(!is.na(!!sym(order_name))) + # Common check for multiple variables name + check_multiple_var_specs(metadata, variable_name) } # Grabs vars from Spec and inputted dataset diff --git a/R/type.R b/R/type.R index 9c28a06b..889b3864 100644 --- a/R/type.R +++ b/R/type.R @@ -76,6 +76,9 @@ xportr_type <- function(.df, metadata <- metadata %>% select(!!sym(variable_name), !!sym(type_name)) + # Common check for multiple variables name + check_multiple_var_specs(metacore, variable_name) + # Current class of table variables table_cols_types <- map(.df, first_class) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 208ee7b3..2edf79f6 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -303,3 +303,30 @@ first_class <- function(x) { class_ } } + +#' Check for multiple var name specs +#' +#' Detects cases where the domain name is not correctly defined and the full +#' specification is used. +#' This can lead to multiple warnings for the same variable. For instance, in +#' the FDA pilot 3 submission the column has variable name with uppercase +#' `Variable`, where the defaults for xportr is for lowercase `variable`. +#' +#' @param metadata A data frame containing variable level metadata. +#' @param variable_name string with `getOption('xportr.variable_name')` +#' @noRd +check_multiple_var_specs <- function( + metadata, variable_name = getOption('xportr.variable_name') +) { + variable_len <- pluck(metadata, variable_name) %||% c() + if (NROW(variable_len) != NROW(unique(variable_len))) { + cli_alert_info( + glue( + .sep = " ", + "There are multiple specs for the same variable name.", + "Check the metadata and variable name option", + "`getOption('xportr.variable_name')`" + ) + ) + } +} From d007bee88f0521d8342ce30d3c6c05f8ae3655b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 6 Jun 2023 17:55:14 +0200 Subject: [PATCH 243/337] tests: adds tests to multiple function affected --- R/support-test.R | 19 +++++++++++++++++++ tests/testthat/test-length.R | 4 ++++ tests/testthat/test-order.R | 4 ++++ tests/testthat/test-type.R | 4 ++++ 4 files changed, 31 insertions(+) diff --git a/R/support-test.R b/R/support-test.R index fd8950c5..43009e10 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -106,3 +106,22 @@ minimal_metadata <- function(dataset = FALSE, cli_theme_tests <- list( h2 = list(`margin-top` = 0, `margin-bottom` = 0) ) + +#' Test if multiple vars in spec will result in warning message +multiple_vars_in_spec_helper <- function(FUN) { + adsl <- minimal_table(30) + metadata <- minimal_metadata( + dataset = TRUE, order = TRUE, length = TRUE, type = TRUE, var_names = colnames(adsl) + ) + + metadata <- metadata %>% + mutate(dataset = "adtte") %>% + dplyr::bind_rows(metadata) + + # Setup temporary options with active verbose + withr::local_options(list(xportr.length_verbose = "message", xportr.domain_name = "Dataset")) + + adsl %>% + FUN(metadata) %>% + expect_message("There are multiple specs for the same variable name") +} diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index db2316f1..5e1b269b 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -221,3 +221,7 @@ test_that("xportr_length: error when metadata is not set", { regexp = "Metadata must be set with `metadata` or `xportr_metadata\\(\\)`" ) }) + +test_that("xportr_length: Gets warning when metadata has multiple rows with same variable", { + multiple_vars_in_spec_helper(xportr_length) +}) diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index 6f087841..fc0eaadc 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -150,3 +150,7 @@ test_that("xportr_order: Metadata order columns are coersed to numeric", { expect_equal(names(ordered_df), df_meta$variable) }) + +test_that("xportr_order: Gets warning when metadata has multiple rows with same variable", { + multiple_vars_in_spec_helper(xportr_order) +}) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index d05f8ff6..a617e55e 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -175,3 +175,7 @@ test_that("xportr_type: error when metadata is not set", { regexp = "Metadata must be set with `metadata` or `xportr_metadata\\(\\)`" ) }) + +test_that("xportr_type: Gets warning when metadata has multiple rows with same variable", { + multiple_vars_in_spec_helper(xportr_type) +}) From bfb0c43d50c5bbe0e3d8fd40ac027f4a0fb2fb20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Mon, 12 Jun 2023 14:38:05 +0200 Subject: [PATCH 244/337] fix: uses metadata instead of deprecated metacore --- R/type.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/type.R b/R/type.R index 889b3864..4146ee64 100644 --- a/R/type.R +++ b/R/type.R @@ -77,7 +77,7 @@ xportr_type <- function(.df, select(!!sym(variable_name), !!sym(type_name)) # Common check for multiple variables name - check_multiple_var_specs(metacore, variable_name) + check_multiple_var_specs(metadata, variable_name) # Current class of table variables table_cols_types <- map(.df, first_class) From d8c8a50031cef7ad5653bb8804493f8a9f56a70b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Mon, 12 Jun 2023 14:48:23 +0200 Subject: [PATCH 245/337] lint: double quotes --- R/utils-xportr.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 2edf79f6..454ab946 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -316,7 +316,7 @@ first_class <- function(x) { #' @param variable_name string with `getOption('xportr.variable_name')` #' @noRd check_multiple_var_specs <- function( - metadata, variable_name = getOption('xportr.variable_name') + metadata, variable_name = getOption("xportr.variable_name") ) { variable_len <- pluck(metadata, variable_name) %||% c() if (NROW(variable_len) != NROW(unique(variable_len))) { From cd1ab9192b1f430e5365a93e6b8a662154c87659 Mon Sep 17 00:00:00 2001 From: elimillera Date: Mon, 12 Jun 2023 15:36:15 +0000 Subject: [PATCH 246/337] updates with new formats --- R/utils-xportr.R | 34 +++++++++++++++++++----------- tests/testthat/test-utils-xportr.R | 4 ++-- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index e7870714..19789f80 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -233,6 +233,7 @@ xpt_validate <- function(data) { formats <- extract_attr(data, attr = "format.sas") ## The usual expected formats in clinical trials: characters, dates + # Formats: https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/leforinforref/n0zwce550r32van1fdd5yoixrk4d.htm expected_formats <- c( NA, "", @@ -243,22 +244,31 @@ xpt_validate <- function(data) { paste("yymmdd", 2:10, ".", sep = ""), paste("mmddyy", 2:10, ".", sep = ""), paste("ddmmyy", 2:10, ".", sep = ""), - "E8601DAw.", - "E8601DNw.", - "E8601TMw.d", - "E8601TZw.d", - "E8601LZw.d", - "E8601TXw.", - "E8601DTw.d", - "E8601DZw.d", - "E8601LXw.", - "E8601DXw.", - "IS8601DT.", + "E8601DA.", + "E8601DA10.", + "E8601DN.", + "E8601DN10.", + "E8601TM.", + paste0("E8601TM", 8:15, ".", 0:6), + "E8601TZ.", + paste("E8601TZ", 9:20, ".", 0:6), + "E8601TX.", + paste0("E8601TX", 9:20, "."), "E8601DT.", + paste0("E8601DT", 16:26, ".", 0:6), + "E8601LX.", + paste0("E8601LX", 20:35, "."), + "E8601LZ.", + paste0("E8601LZ", 9:20, "."), + "E8601DX.", + paste0("E8601DX", 20:35, "."), "B8601DT.", + paste0("B8601DT", 15:26, ".", 0:6), "IS8601DA.", "B8601DA.", + paste0("B8601DA", 8:10, "."), "weekdate.", + paste0("weekdate", 3:37, "."), "mmddyy.", "ddmmyy.", "yymmdd.", @@ -273,7 +283,7 @@ xpt_validate <- function(data) { # 3.1 Invalid types - is_valid <- formats %in% expected_formats | + is_valid <- toupper(formats) %in% toupper(expected_formats) | purrr::map_lgl(formats, stringr::str_detect, format_regex) chk_formats <- formats[!is_valid] diff --git a/tests/testthat/test-utils-xportr.R b/tests/testthat/test-utils-xportr.R index b3fb1cfc..4167b698 100644 --- a/tests/testthat/test-utils-xportr.R +++ b/tests/testthat/test-utils-xportr.R @@ -95,8 +95,8 @@ test_that("xpt_validate: Get error message when the variable type is invalid", { test_that("xpt_validate: Doesn't error out with iso8601 format", { df <- data.frame(A = 1, B = 2) - attr(df$A, "format.sas") <- "E8601LXw." - attr(df$B, "format.sas") <- "E8601DXw." + attr(df$A, "format.sas") <- "E8601LX." + attr(df$B, "format.sas") <- "E8601DX20." expect_equal( xpt_validate(df), character(0) From 267c22c3a6433a187fd28ec07a1e08b1c3a72fb1 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 13 Jun 2023 17:57:13 +0530 Subject: [PATCH 247/337] chore: remove styler from the package suggests --- DESCRIPTION | 1 - 1 file changed, 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 4685102c..17bcb5ca 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -78,7 +78,6 @@ Suggests: spelling, usethis, lintr, - styler, metacore Config/testthat/edition: 3 VignetteBuilder: knitr From 016ccfdce2cf61ca674467a5e36d8ab8ee54ca24 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 13 Jun 2023 18:15:10 +0530 Subject: [PATCH 248/337] chore: remove `.Rmd` files from spellcheck excluded files --- .github/workflows/spellcheck.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index e4b76558..353b9682 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -61,5 +61,5 @@ jobs: - name: Run Spellcheck 👟 uses: insightsengineering/r-spellcheck-action@v3 with: - exclude: data/*,**/*.Rd,**/*.Rmd,**/*.md,*.md + exclude: data/*,**/*.Rd,**/*.md,*.md additional_options: "" From d558f5f34668b5f4ebac3998158a11d4bc95b24a Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Tue, 13 Jun 2023 09:23:30 -0500 Subject: [PATCH 249/337] Update R/utils-xportr.R Co-authored-by: cpiraux <69685640+cpiraux@users.noreply.github.com> --- R/utils-xportr.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 19789f80..bf2fc77e 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -251,6 +251,7 @@ xpt_validate <- function(data) { "E8601TM.", paste0("E8601TM", 8:15, ".", 0:6), "E8601TZ.", + paste("E8601TZ", 9:20, "."), paste("E8601TZ", 9:20, ".", 0:6), "E8601TX.", paste0("E8601TX", 9:20, "."), From 6d6e1882f3a4dbdfed3dfa01a30684a2b061dc5e Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Tue, 13 Jun 2023 09:24:51 -0500 Subject: [PATCH 250/337] Update R/utils-xportr.R Co-authored-by: cpiraux <69685640+cpiraux@users.noreply.github.com> --- R/utils-xportr.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index bf2fc77e..66c04997 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -249,6 +249,7 @@ xpt_validate <- function(data) { "E8601DN.", "E8601DN10.", "E8601TM.", + paste0("E8601TM", 8:15, "."), paste0("E8601TM", 8:15, ".", 0:6), "E8601TZ.", paste("E8601TZ", 9:20, "."), From 7e0f328686bdc36e09b928eec22a2d021b34b840 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Tue, 13 Jun 2023 09:24:58 -0500 Subject: [PATCH 251/337] Update R/utils-xportr.R Co-authored-by: cpiraux <69685640+cpiraux@users.noreply.github.com> --- R/utils-xportr.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 66c04997..7ea9de19 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -257,6 +257,7 @@ xpt_validate <- function(data) { "E8601TX.", paste0("E8601TX", 9:20, "."), "E8601DT.", + paste0("E8601DT", 16:26, "."), paste0("E8601DT", 16:26, ".", 0:6), "E8601LX.", paste0("E8601LX", 20:35, "."), From 70d43d21938f3073ad24034b5c0223295f6d36ec Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Tue, 13 Jun 2023 09:25:12 -0500 Subject: [PATCH 252/337] Update R/utils-xportr.R Co-authored-by: cpiraux <69685640+cpiraux@users.noreply.github.com> --- R/utils-xportr.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 7ea9de19..fc8af791 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -266,6 +266,7 @@ xpt_validate <- function(data) { "E8601DX.", paste0("E8601DX", 20:35, "."), "B8601DT.", + paste0("B8601DT", 15:26, "."), paste0("B8601DT", 15:26, ".", 0:6), "IS8601DA.", "B8601DA.", From a772092bee84b06eef17c6973340a2e838118cec Mon Sep 17 00:00:00 2001 From: elimillera Date: Tue, 13 Jun 2023 14:50:45 +0000 Subject: [PATCH 253/337] Passing R CMD Check, linting, styling --- R/format.R | 11 +++++------ R/label.R | 11 +++++------ R/length.R | 11 +++++------ R/metadata.R | 1 + R/order.R | 11 +++++------ R/type.R | 23 +++++++++++++---------- R/xportr-package.R | 3 ++- man/xportr_metadata.Rd | 1 + man/xportr_type.Rd | 3 ++- tests/testthat/test-depreciation.R | 3 ++- tests/testthat/test-length.R | 2 +- tests/testthat/test-type.R | 2 +- 12 files changed, 43 insertions(+), 39 deletions(-) diff --git a/R/format.R b/R/format.R index 9c8fd527..bfc6bd40 100644 --- a/R/format.R +++ b/R/format.R @@ -28,12 +28,11 @@ #' ) #' #' adsl <- xportr_format(adsl, metadata) -xportr_format <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_format <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/label.R b/R/label.R index 738a5d50..e627c85c 100644 --- a/R/label.R +++ b/R/label.R @@ -30,12 +30,11 @@ #' ) #' #' adsl <- xportr_label(adsl, metadata) -xportr_label <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_label <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/length.R b/R/length.R index dd6842dd..46f6b26c 100644 --- a/R/length.R +++ b/R/length.R @@ -28,12 +28,11 @@ #' ) #' #' adsl <- xportr_length(adsl, metadata) -xportr_length <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_length <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/metadata.R b/R/metadata.R index 6c4f14c0..1dc9d603 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -21,6 +21,7 @@ #' dataset = "test", #' variable = c("Subj", "Param", "Val", "NotUsed"), #' type = c("numeric", "character", "numeric", "character"), +#' format = NA, #' order = c(1, 3, 4, 2) #' ) #' diff --git a/R/order.R b/R/order.R index a49a560f..769a24a1 100644 --- a/R/order.R +++ b/R/order.R @@ -25,12 +25,11 @@ #' ) #' #' adsl <- xportr_order(adsl, metadata) -xportr_order <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_order <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", diff --git a/R/type.R b/R/type.R index 704cfa92..02ceeb46 100644 --- a/R/type.R +++ b/R/type.R @@ -21,7 +21,8 @@ #' metadata <- data.frame( #' dataset = "test", #' variable = c("Subj", "Param", "Val", "NotUsed"), -#' type = c("numeric", "character", "numeric", "character") +#' type = c("numeric", "character", "numeric", "character"), +#' format = NA #' ) #' #' .df <- data.frame( @@ -32,12 +33,11 @@ #' ) #' #' df2 <- xportr_type(.df, metadata, "test") -xportr_type <- function( - .df, - metadata = NULL, - domain = NULL, - verbose = getOption("xportr.length_verbose", "none"), - metacore = deprecated()) { +xportr_type <- function(.df, + metadata = NULL, + domain = NULL, + verbose = getOption("xportr.length_verbose", "none"), + metacore = deprecated()) { if (!missing(metacore)) { lifecycle::deprecate_warn( when = "0.3.0", @@ -92,11 +92,14 @@ xportr_type <- function( # _character is used here as a mask of character, in case someone doesn't # want 'character' coerced to character type.x = if_else(type.x %in% characterTypes, "_character", type.x), - type.x = if_else(type.x %in% numericTypes | (grepl('DT$|DTM$|TM$', variable) & !is.na(format)), "_numeric", type.x), - type.x = if_else(grepl('DTC$', variable) & type.x == '_character', 'Date', type.x), + type.x = if_else(type.x %in% numericTypes | (grepl("DT$|DTM$|TM$", variable) & !is.na(format)), + "_numeric", + type.x + ), + type.x = if_else(grepl("DTC$", variable) & type.x == "_character", "Date", type.x), type.y = if_else(is.na(type.y), type.x, type.y), type.y = tolower(type.y), - type.y = if_else(type.y %in% characterTypes | (grepl('DTC$', variable) & is.na(format)), "_character", type.y), + type.y = if_else(type.y %in% characterTypes | (grepl("DTC$", variable) & is.na(format)), "_character", type.y), type.y = if_else(type.y %in% numericTypes, "_numeric", type.y) ) diff --git a/R/xportr-package.R b/R/xportr-package.R index 8efbbf5b..c65382cd 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -26,7 +26,8 @@ globalVariables(c( "abbr_parsed", "abbr_stem", "adj_orig", "adj_parsed", "col_pos", "dict_varname", "lower_original_varname", "my_minlength", "num_st_ind", "original_varname", - "renamed_n", "renamed_var", "use_bundle", "viable_start", "type.x", "type.y" + "renamed_n", "renamed_var", "use_bundle", "viable_start", "type.x", "type.y", + "variable" )) # The following block is used by usethis to automatically manage diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index f92c62b1..ca3ce819 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -31,6 +31,7 @@ metadata <- data.frame( dataset = "test", variable = c("Subj", "Param", "Val", "NotUsed"), type = c("numeric", "character", "numeric", "character"), + format = NA, order = c(1, 3, 4, 2) ) diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index ce22475c..f6b99be0 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -39,7 +39,8 @@ columns_meta is a data.frame with names "Variables", "Type" metadata <- data.frame( dataset = "test", variable = c("Subj", "Param", "Val", "NotUsed"), - type = c("numeric", "character", "numeric", "character") + type = c("numeric", "character", "numeric", "character"), + format = NA ) .df <- data.frame( diff --git a/tests/testthat/test-depreciation.R b/tests/testthat/test-depreciation.R index e2167849..b3295295 100644 --- a/tests/testthat/test-depreciation.R +++ b/tests/testthat/test-depreciation.R @@ -92,7 +92,8 @@ test_that("xportr_type: deprecated metacore argument still works and gives warni df_meta <- data.frame( dataset = "df", variable = c("Subj", "Param", "Val", "NotUsed"), - type = c("numeric", "character", "numeric", "character") + type = c("numeric", "character", "numeric", "character"), + format = NA ) df2 <- xportr_type(df, metacore = df_meta) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index db2316f1..1c13cbc4 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -45,7 +45,7 @@ test_that("xportr_length: Accepts valid domain names in metadata object", { test_that("xportr_length: CDISC data frame is being piped after another xportr function", { adsl <- minimal_table(30) metadata <- minimal_metadata( - dataset = TRUE, length = TRUE, type = TRUE, var_names = colnames(adsl) + dataset = TRUE, length = TRUE, type = TRUE, format = TRUE, var_names = colnames(adsl) ) # Setup temporary options with active verbose diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 51cce8a6..e4ce9d1b 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -179,7 +179,7 @@ test_that("xportr_type: error when metadata is not set", { }) test_that("xportr_type: date variables are not converted to numeric", { - df <- data.frame(RFICDT = as.Date('2017-03-30'), RFICDTM = as.POSIXct('2017-03-30')) + df <- data.frame(RFICDT = as.Date("2017-03-30"), RFICDTM = as.POSIXct("2017-03-30")) metacore_meta <- suppressWarnings( metacore::metacore( var_spec = data.frame( From 1f2d93f76610bddf7965f5bc138da963ab0a2340 Mon Sep 17 00:00:00 2001 From: vedhav Date: Tue, 13 Jun 2023 20:59:31 +0530 Subject: [PATCH 254/337] fix: correct the spelling mistakes --- inst/WORDLIST | 106 ++++++++++--------------------------------- vignettes/xportr.Rmd | 4 +- 2 files changed, 26 insertions(+), 84 deletions(-) diff --git a/inst/WORDLIST b/inst/WORDLIST index 03ab611d..b4551288 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -1,92 +1,34 @@ -ADaM ADAE -ADCM -ADDV -ADEC -ADEG -ADEX -ADLB -ADMH ADSL -ADVS -AE -analytics -ATC +ADaM Atorus -Bazett -Bazett's -BDS -Biologics -BMI -Biologics CDISC -Changelog -censorings -codebase -CRF -CQ -cyclomatic -datepart -datetime -developers’ -dtc -DTC -DuBois -durations -EMA -FACM -Fridericia -Fridericia's -Fujimoto -functions’ -funder -Gehan -GitHub -GlaxoSmithKline -groupwise +CDSIC +DM GSK -Guillain -GUILLAIN -GxP -Hoffmann -https -IG -knitr +JPT Lifecycle -linter -LLC -MedDRA -metacore -metatools -mmHg -modularized -Mosteller -msec -OCCDS -optionality +ORCID Pharma -pharmaverse -PHUSE -quosure -quosures -README -RStudio -Sagie -Sagie's +Repostiory +SASformat +SASlength +SAStype SDTM -SDQ -SMQ -SMQs -stylesheet -summarization -Takahira -tidyverse -timepart -timepoint -ungrouped -unmerged +Vignesh +XPT +bootswatch +chr +cli +df +magrittr +metacore +metatdata +pre +sas validator -validator's -xpt +validators +visability xportr's -YAML +xportr’s +xpt diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 001edc74..469b652e 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -45,7 +45,7 @@ The `ADSL` has the following features: * Data types other than character and numeric * Missing labels on variables * Missing label for data set -* Order of varibles not following specification file +* Order of variables not following specification file * Formats missing To create a fully compliant v5 xpt `ADSL` dataset, that was developed using R, we will need to apply the 6 main functions within the `xportr` package: @@ -262,5 +262,5 @@ That's it! We now have a xpt file created in R with all appropriate types, leng As always, we welcome your feedback. If you spot a bug, would like to see a new feature, or if any documentation is unclear - submit an issue -on [xportr's Github page](https://github.com/atorus-research/xportr/issues). +on [xportr's GitHub page](https://github.com/atorus-research/xportr/issues). From d2ee389e1f6a9fa2bb388fc062b469e60c39d6fd Mon Sep 17 00:00:00 2001 From: bs832471 Date: Tue, 13 Jun 2023 20:46:21 +0000 Subject: [PATCH 255/337] docs: #84 formatting DT --- vignettes/xportr.Rmd | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index cf472fe0..028f41fb 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -82,7 +82,8 @@ adsl <- admiral::admiral_adsl DT::datatable(adsl, options = list( autoWidth = FALSE, scrollX = TRUE, pageLength = 5, lengthMenu = c(5, 10, 15, 20) -)) +)) %>% + formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%") ``` **NOTE:** The `ADSL` dataset can be created by using this command `admiral::use_ad_template("adsl")`. @@ -109,7 +110,8 @@ var_spec_view <- var_spec %>% DT::datatable(var_spec_view, options = list( autoWidth = FALSE, scrollX = TRUE, pageLength = 5, lengthMenu = c(5, 10, 15, 20) -)) +)) %>% + formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%") ``` # xportr_type() @@ -168,7 +170,8 @@ adsl_order <- xportr_order(adsl, var_spec, domain = "ADSL", verbose = "message") DT::datatable(adsl_order, options = list( autoWidth = FALSE, scrollX = TRUE, pageLength = 5, lengthMenu = c(5, 10, 15, 20) -)) +)) %>% + formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%") ``` # xportr_format() From 58fddba9bea63b765cca966d900bad9434eecf04 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Tue, 13 Jun 2023 16:54:23 -0400 Subject: [PATCH 256/337] Update vignettes/deepdive.Rmd Co-authored-by: Vedha Viyash <49812166+vedhav@users.noreply.github.com> --- vignettes/deepdive.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index d69d4cc4..456aa282 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -87,8 +87,8 @@ Each of the core `{xportr}` functions for applying labels, types, formats, order In this section, we are going to explore the 5 core `{xportr}` functions using: -* An ADSL ADaM dataset from the Pilot 3 Submission to the FDA -* The ADSL ADaM Specification File from the Pilot 3 Submission to the FDA +* `xportr::adsl` - An ADSL ADaM dataset from the Pilot 3 Submission to the FDA +* `xportr::var_spec` - The ADSL ADaM Specification File from the Pilot 3 Submission to the FDA We will focus on warning and error messaging with contrived examples from these functions by manipulating either the datasets or the specification files. From 62b5fbe52a3b324f7163564836ab8076c73612f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 13 Jun 2023 23:37:17 +0200 Subject: [PATCH 257/337] tests: adds scenario for successful run and improves doc --- R/format.R | 1 - R/support-test.R | 59 +++++++++++++++++++++++++++++++++--- tests/testthat/test-format.R | 12 ++++++++ tests/testthat/test-label.R | 12 ++++++++ tests/testthat/test-length.R | 8 +++++ tests/testthat/test-order.R | 15 ++++++++- tests/testthat/test-type.R | 8 +++++ 7 files changed, 108 insertions(+), 7 deletions(-) diff --git a/R/format.R b/R/format.R index bab1adf2..acd1c3bd 100644 --- a/R/format.R +++ b/R/format.R @@ -72,7 +72,6 @@ xportr_format <- function(.df, filtered_metadata <- metadata %>% filter(!!sym(variable_name) %in% names(.df)) - format <- filtered_metadata %>% select(!!sym(format_name)) %>% unlist() %>% diff --git a/R/support-test.R b/R/support-test.R index 43009e10..d56fa47a 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -108,20 +108,69 @@ cli_theme_tests <- list( ) #' Test if multiple vars in spec will result in warning message +#' @noRd +#' @examples +#' multiple_vars_in_spec_helper(xportr_order) multiple_vars_in_spec_helper <- function(FUN) { adsl <- minimal_table(30) metadata <- minimal_metadata( - dataset = TRUE, order = TRUE, length = TRUE, type = TRUE, var_names = colnames(adsl) + dataset = TRUE, + order = TRUE, + length = TRUE, + type = TRUE, + format = TRUE, + label = TRUE, + var_names = colnames(adsl) ) metadata <- metadata %>% mutate(dataset = "adtte") %>% - dplyr::bind_rows(metadata) + dplyr::bind_rows(metadata) %>% + dplyr::rename(Dataset = "dataset") - # Setup temporary options with active verbose - withr::local_options(list(xportr.length_verbose = "message", xportr.domain_name = "Dataset")) + # Setup temporary options with active verbose and Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests, xportr.length_verbose = "message")) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) adsl %>% FUN(metadata) %>% - expect_message("There are multiple specs for the same variable name") + testthat::expect_message("There are multiple specs for the same variable name") +} + +#' Test if multiple vars in spec with appropriate +#' @noRd +#' @examples +#' multiple_vars_in_spec_helper2(xportr_order) +#' +multiple_vars_in_spec_helper2 <- function(FUN) { + adsl <- minimal_table(30) + metadata <- minimal_metadata( + dataset = TRUE, + order = TRUE, + length = TRUE, + type = TRUE, + format = TRUE, + label = TRUE, + var_names = colnames(adsl) + ) + + metadata <- metadata %>% + mutate(dataset = "adtte") %>% + dplyr::bind_rows(metadata) %>% + dplyr::rename(Dataset = "dataset") + + # Setup temporary options with active verbose and Remove empty lines in cli theme + withr::local_options(list( + cli.user_theme = cli_theme_tests, + xportr.length_verbose = "message", + xportr.domain_name = "Dataset" + )) + + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) + + adsl %>% + FUN(metadata) %>% + testthat::expect_no_message(message = "There are multiple specs for the same variable name") } diff --git a/tests/testthat/test-format.R b/tests/testthat/test-format.R index d24fa3ac..365c334f 100644 --- a/tests/testthat/test-format.R +++ b/tests/testthat/test-format.R @@ -9,3 +9,15 @@ test_that("xportr_format: error when metadata is not set", { regexp = "Metadata must be set with `metadata` or `xportr_metadata\\(\\)`" ) }) + +test_that("xportr_format: Gets warning when metadata has multiple rows with same variable", { + # This test uses the 2 functions below to reduce code duplication + # All `expect_*` are being perform inside the function calls + # + # The only parameter is the function that is being tested. + # + # Checks that message appears when xportr.domain_name is invalid + multiple_vars_in_spec_helper(xportr_format) + # Checks that message doesn't appear when xportr.domain_name is valid + multiple_vars_in_spec_helper2(xportr_format) +}) diff --git a/tests/testthat/test-label.R b/tests/testthat/test-label.R index f4e48ee7..9cb38994 100644 --- a/tests/testthat/test-label.R +++ b/tests/testthat/test-label.R @@ -11,3 +11,15 @@ test_that("xportr_label: error when metadata is not set", { regexp = "Metadata must be set with `metadata` or `xportr_metadata\\(\\)`" ) }) + +test_that("xportr_label: Gets warning when metadata has multiple rows with same variable", { + # This test uses the 2 functions below to reduce code duplication + # All `expect_*` are being perform inside the function calls + # + # The only parameter is the function that is being tested. + # + # Checks that message appears when xportr.domain_name is invalid + multiple_vars_in_spec_helper(xportr_label) + # Checks that message doesn't appear when xportr.domain_name is valid + multiple_vars_in_spec_helper2(xportr_label) +}) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 5e1b269b..4f444a5f 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -223,5 +223,13 @@ test_that("xportr_length: error when metadata is not set", { }) test_that("xportr_length: Gets warning when metadata has multiple rows with same variable", { + # This test uses the 2 functions below to reduce code duplication + # All `expect_*` are being perform inside the function calls + # + # The only parameter is the function that is being tested. + # + # Checks that message appears when xportr.domain_name is invalid multiple_vars_in_spec_helper(xportr_length) + # Checks that message doesn't appear when xportr.domain_name is valid + multiple_vars_in_spec_helper2(xportr_length) }) diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index fc0eaadc..c453725f 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -152,5 +152,18 @@ test_that("xportr_order: Metadata order columns are coersed to numeric", { }) test_that("xportr_order: Gets warning when metadata has multiple rows with same variable", { - multiple_vars_in_spec_helper(xportr_order) + # This test uses the 2 functions below to reduce code duplication + # All `expect_*` are being perform inside the function calls + # + # The only parameter is the function that is being tested. + # + # Checks that message appears when xportr.domain_name is invalid + multiple_vars_in_spec_helper(xportr_order) %>% + expect_message("All variables in specification file are in dataset") %>% + expect_message("All variables in dataset are ordered") + + # Checks that message doesn't appear when xportr.domain_name is valid + multiple_vars_in_spec_helper2(xportr_order) %>% + expect_message("All variables in specification file are in dataset") %>% + expect_message("All variables in dataset are ordered") }) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index a617e55e..718d52d8 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -177,5 +177,13 @@ test_that("xportr_type: error when metadata is not set", { }) test_that("xportr_type: Gets warning when metadata has multiple rows with same variable", { + # This test uses the 2 functions below to reduce code duplication + # All `expect_*` are being perform inside the function calls + # + # The only parameter is the function that is being tested. + # + # Checks that message appears when xportr.domain_name is invalid multiple_vars_in_spec_helper(xportr_type) + # Checks that message doesn't appear when xportr.domain_name is valid + multiple_vars_in_spec_helper2(xportr_type) }) From 71e58e9641c9bb775e79c2ffa1c7a42256a4e7f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 13 Jun 2023 23:41:42 +0200 Subject: [PATCH 258/337] chore: corrects styler error --- R/utils-xportr.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 2621353d..1d3a60d8 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -358,8 +358,8 @@ first_class <- function(x) { #' @param variable_name string with `getOption('xportr.variable_name')` #' @noRd check_multiple_var_specs <- function( - metadata, variable_name = getOption("xportr.variable_name") -) { + metadata, + variable_name = getOption("xportr.variable_name")) { variable_len <- pluck(metadata, variable_name) %||% c() if (NROW(variable_len) != NROW(unique(variable_len))) { cli_alert_info( From 0b3983df5d3308db12c58529502c7988cedde7f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 13 Jun 2023 23:46:27 +0200 Subject: [PATCH 259/337] chore: improve on comments --- tests/testthat/test-format.R | 6 ++---- tests/testthat/test-label.R | 6 ++---- tests/testthat/test-length.R | 6 ++---- tests/testthat/test-order.R | 8 ++++---- tests/testthat/test-type.R | 6 ++---- 5 files changed, 12 insertions(+), 20 deletions(-) diff --git a/tests/testthat/test-format.R b/tests/testthat/test-format.R index 365c334f..76b65e1d 100644 --- a/tests/testthat/test-format.R +++ b/tests/testthat/test-format.R @@ -11,10 +11,8 @@ test_that("xportr_format: error when metadata is not set", { }) test_that("xportr_format: Gets warning when metadata has multiple rows with same variable", { - # This test uses the 2 functions below to reduce code duplication - # All `expect_*` are being perform inside the function calls - # - # The only parameter is the function that is being tested. + # This test uses the (2) functions below to reduce code duplication + # All `expect_*` are being called inside the functions # # Checks that message appears when xportr.domain_name is invalid multiple_vars_in_spec_helper(xportr_format) diff --git a/tests/testthat/test-label.R b/tests/testthat/test-label.R index 9cb38994..8030a826 100644 --- a/tests/testthat/test-label.R +++ b/tests/testthat/test-label.R @@ -13,10 +13,8 @@ test_that("xportr_label: error when metadata is not set", { }) test_that("xportr_label: Gets warning when metadata has multiple rows with same variable", { - # This test uses the 2 functions below to reduce code duplication - # All `expect_*` are being perform inside the function calls - # - # The only parameter is the function that is being tested. + # This test uses the (2) functions below to reduce code duplication + # All `expect_*` are being called inside the functions # # Checks that message appears when xportr.domain_name is invalid multiple_vars_in_spec_helper(xportr_label) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 4f444a5f..2e4fdf62 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -223,10 +223,8 @@ test_that("xportr_length: error when metadata is not set", { }) test_that("xportr_length: Gets warning when metadata has multiple rows with same variable", { - # This test uses the 2 functions below to reduce code duplication - # All `expect_*` are being perform inside the function calls - # - # The only parameter is the function that is being tested. + # This test uses the (2) functions below to reduce code duplication + # All `expect_*` are being called inside the functions # # Checks that message appears when xportr.domain_name is invalid multiple_vars_in_spec_helper(xportr_length) diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index c453725f..9599384f 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -152,18 +152,18 @@ test_that("xportr_order: Metadata order columns are coersed to numeric", { }) test_that("xportr_order: Gets warning when metadata has multiple rows with same variable", { - # This test uses the 2 functions below to reduce code duplication - # All `expect_*` are being perform inside the function calls - # - # The only parameter is the function that is being tested. + # This test uses the (2) functions below to reduce code duplication + # All `expect_*` are being called inside the functions # # Checks that message appears when xportr.domain_name is invalid multiple_vars_in_spec_helper(xportr_order) %>% + # expect_message() are being caught to provide clean test without output expect_message("All variables in specification file are in dataset") %>% expect_message("All variables in dataset are ordered") # Checks that message doesn't appear when xportr.domain_name is valid multiple_vars_in_spec_helper2(xportr_order) %>% + # expect_message() are being caught to provide clean test without output expect_message("All variables in specification file are in dataset") %>% expect_message("All variables in dataset are ordered") }) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 718d52d8..b99034d4 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -177,10 +177,8 @@ test_that("xportr_type: error when metadata is not set", { }) test_that("xportr_type: Gets warning when metadata has multiple rows with same variable", { - # This test uses the 2 functions below to reduce code duplication - # All `expect_*` are being perform inside the function calls - # - # The only parameter is the function that is being tested. + # This test uses the (2) functions below to reduce code duplication + # All `expect_*` are being called inside the functions # # Checks that message appears when xportr.domain_name is invalid multiple_vars_in_spec_helper(xportr_type) From 0710e5ae6324d58aaf3207eb664f3f3a077e0d49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Tue, 13 Jun 2023 23:57:17 +0200 Subject: [PATCH 260/337] chore: update NEWS.md --- NEWS.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/NEWS.md b/NEWS.md index 9b608ef5..423f40d3 100644 --- a/NEWS.md +++ b/NEWS.md @@ -10,6 +10,7 @@ * `xpt_validate` updated to accept iso8601 date formats. (#76) * Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline (#44) * Metadata order columns are now coerced to numeric by default in `xportr_order()` to prevent character sorting (#149) +* Message is shown on `xportr_*` functions when the metadata being used has multiple variables with the same name in the same domain (#128) ## Documentation @@ -18,7 +19,9 @@ ## Deprecation and Breaking Changes * The `metacore` argument has been renamed to `metadata` in the following six xportr functions: `xportr_df_label()`, `xportr_format()`, `xportr_label()`, `xportr_length()`, `xportr_order()`, and `xportr_type()`. Please update your code to use the new `metadata` argument in place of `metacore`. + # xportr 0.2.0 + * Added a new validation test that errors when users pass invalid formats (#60 #64). Thanks to @zdz2101! * Fixed an issue where xportr_format could pass invalid formats to haven::write_xpt. From b9ea9e7dfae483300f56b2e92bb267217d2d761d Mon Sep 17 00:00:00 2001 From: "Chan, Adrian {MDBT~Mississauga}" Date: Wed, 14 Jun 2023 04:47:50 +0200 Subject: [PATCH 261/337] updated test --- inst/extdata/dfdates.xpt | Bin 0 -> 1120 bytes tests/testthat/dfdates.xpt | Bin 0 -> 1120 bytes tests/testthat/test-type.R | 8 ++++++++ 3 files changed, 8 insertions(+) create mode 100644 inst/extdata/dfdates.xpt create mode 100644 tests/testthat/dfdates.xpt diff --git a/inst/extdata/dfdates.xpt b/inst/extdata/dfdates.xpt new file mode 100644 index 0000000000000000000000000000000000000000..d52737bda37096f8bc2fb577a4fb9195aa2e41a7 GIT binary patch literal 1120 zcmd5*yApyh5DZp+#@SjhfRTbOkT~EN9{~$X9kj8;&*CHH2r4kB87sFSxg>YDyCkt- zTqsZ?+9*ENSS6ui>Hu+jZ=&IR1VGACK(xlH9Dr{-KCYjNoZ24FhT+oXe(lWyhX&LS z=Cgi0oMpb+(bVXbLWY$GW_n%!;ebn>UQSbwr;*xb%BYJPXe_~m07)KwQ_v>mR+*r?VO{JoTcoq z{o61pl3#kAhR`YiAOk|khz!&+3V3S%9}80io-VQp)@a1#VvmpJGSpn8F&XTgMpBd= lD=x1X)%AdB^RD|G`}z$w_6*-I-`z{L;q~t0#FWRUa}UI?vHk!6 literal 0 HcmV?d00001 diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 51cce8a6..0942d280 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -196,4 +196,12 @@ test_that("xportr_type: date variables are not converted to numeric", { expect_equal(lapply(df, class), lapply(processed_df, class)) expect_equal(df$RFICDT, processed_df$RFICDT) expect_equal(df$RFICDTM, processed_df$RFICDTM) + + xportr_write(processed_df, file.path(system.file("extdata", package="xportr"), "dfdates.xpt")) + df_xpt <- read_xpt(file.path(system.file("extdata", package="xportr"), "dfdates.xpt")) + + expect_equal(lapply(df, class), lapply(df_xpt, class)) + expect_equal(df$RFICDT, df_xpt$RFICDT, ignore_attr = TRUE) + expect_equal(df$RFICDTM, df_xpt$RFICDTM, ignore_attr = TRUE) + }) From 839bffe2924347d3a42ec11909cfa359a807d517 Mon Sep 17 00:00:00 2001 From: "Chan, Adrian {MDBT~Mississauga}" Date: Wed, 14 Jun 2023 12:16:27 +0200 Subject: [PATCH 262/337] updates --- inst/extdata/dfdates.xpt | Bin 1120 -> 1120 bytes tests/testthat/test-type.R | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/extdata/dfdates.xpt b/inst/extdata/dfdates.xpt index d52737bda37096f8bc2fb577a4fb9195aa2e41a7..320011a419ce23f97b9c52f1af828b9f22d93691 100644 GIT binary patch delta 70 ucmaFB@qlB(3<*OcD??K&V*^7IuTVcDV=EYc;zs+4?_c7R-mK4L$OHi81{4hd delta 70 ucmaFB@qlB(3<(1hD-$y-Q)5FDuTVcDV=EYc;zs+4?_c7R-mK4L$OHiDauhWH diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 38e57d53..ac253c87 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -202,6 +202,6 @@ test_that("xportr_type: date variables are not converted to numeric", { expect_equal(lapply(df, class), lapply(df_xpt, class)) expect_equal(df$RFICDT, df_xpt$RFICDT, ignore_attr = TRUE) - expect_equal(df$RFICDTM, df_xpt$RFICDTM, ignore_attr = TRUE) + expect_equal(as.character(df$RFICDTM), as.character(df_xpt$RFICDTM), ignore_attr = TRUE) }) From 00dcfe7a307dcf6a919549580c628ddff4a80619 Mon Sep 17 00:00:00 2001 From: "Chan, Adrian {MDBT~Mississauga}" Date: Wed, 14 Jun 2023 16:48:17 +0200 Subject: [PATCH 263/337] updates --- R/type.R | 2 +- inst/extdata/dfdates.xpt | Bin 1120 -> 1120 bytes inst/extdata/dfdates2.xpt | Bin 0 -> 1280 bytes tests/testthat/test-type.R | 26 +++++++++++++++++++++++++- 4 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 inst/extdata/dfdates2.xpt diff --git a/R/type.R b/R/type.R index 02ceeb46..ef52eac4 100644 --- a/R/type.R +++ b/R/type.R @@ -96,7 +96,7 @@ xportr_type <- function(.df, "_numeric", type.x ), - type.x = if_else(grepl("DTC$", variable) & type.x == "_character", "Date", type.x), + # type.x = if_else(grepl("DTC$", variable) & type.x == "_character", "Date", type.x), type.y = if_else(is.na(type.y), type.x, type.y), type.y = tolower(type.y), type.y = if_else(type.y %in% characterTypes | (grepl("DTC$", variable) & is.na(format)), "_character", type.y), diff --git a/inst/extdata/dfdates.xpt b/inst/extdata/dfdates.xpt index 320011a419ce23f97b9c52f1af828b9f22d93691..f35fabf9dfff9ef85ca9a9ffbc0d468d25fd70c0 100644 GIT binary patch delta 68 ucmaFB@qlB(OmQ)kODjVv`*4uvn(JYAPnf z!8o(;vCKvwF`SexFBXdk2BWdaMsPE;$MP2wG9QB_c(`Yy?|<8r_KtAY?Dewnosvrq TfPI_|g~8X~=Tav;qk~evSAD+T literal 0 HcmV?d00001 diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index ac253c87..f9525f7c 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -192,7 +192,7 @@ test_that("xportr_type: date variables are not converted to numeric", { ) ) ) - processed_df <- xportr_type(df, metacore_meta) + expect_message(processed_df <- xportr_type(df, metacore_meta), NA) expect_equal(lapply(df, class), lapply(processed_df, class)) expect_equal(df$RFICDT, processed_df$RFICDT) expect_equal(df$RFICDTM, processed_df$RFICDTM) @@ -204,4 +204,28 @@ test_that("xportr_type: date variables are not converted to numeric", { expect_equal(df$RFICDT, df_xpt$RFICDT, ignore_attr = TRUE) expect_equal(as.character(df$RFICDTM), as.character(df_xpt$RFICDTM), ignore_attr = TRUE) + metadata <- data.frame( + dataset = c("adsl", "adsl", "adsl", "adsl"), + variable = c("USUBJID", "DMDTC", "RFICDT", "RFICDTM"), + type = c("text", "date", "integer", "integer"), + format = c(NA, NA, "date9.", "datetime15.") + ) + + adsl_original <- tibble::tribble( + ~USUBJID, ~DMDTC, ~RFICDT, ~RFICDTM, + "test1", "2017-03-30", "2017-03-30", "2017-03-30", + "test2", "2017-01-08", "2017-01-08", "2017-01-08" + ) + + + adsl_original$RFICDT <- as.Date(adsl_original$RFICDT) + adsl_original$RFICDTM <- as.POSIXct(adsl_original$RFICDTM) + + expect_message(adsl_xpt2 <- adsl_original %>% + xportr_type(metadata), NA) + + attr(adsl_original, "_xportr.df_arg_") <- "adsl_original" + + expect_equal(adsl_original, adsl_xpt2) + }) From acc4b8d162a64cb585ed9765908708127063bb56 Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 14 Jun 2023 15:02:17 +0000 Subject: [PATCH 264/337] add metadata section --- R/df_label.R | 14 ++++++++++++++ R/format.R | 16 ++++++++++++++++ R/label.R | 17 +++++++++++++++++ R/length.R | 17 +++++++++++++++++ R/metadata.R | 3 ++- R/order.R | 17 +++++++++++++++++ R/type.R | 30 ++++++++++++++++++++++++++++++ R/write.R | 6 +++--- man/xportr_df_label.Rd | 17 +++++++++++++++++ man/xportr_format.Rd | 19 +++++++++++++++++++ man/xportr_label.Rd | 19 +++++++++++++++++++ man/xportr_length.Rd | 19 +++++++++++++++++++ man/xportr_metadata.Rd | 3 ++- man/xportr_order.Rd | 20 ++++++++++++++++++++ man/xportr_type.Rd | 28 ++++++++++++++++++++++++++++ man/xportr_write.Rd | 4 ++-- 16 files changed, 242 insertions(+), 7 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index a3ab8087..410069af 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -6,6 +6,20 @@ #' #' @return Data frame with label attributes. #' +#' @section Metadata: +#' The argument passed in the 'metadata' argument can either be a metacore +#' object, or a data.frame containing the data listed below. If metacore is +#' used, no changes to options are required. +#' +#' For data.frame 'metadata' arguments two columns must be present: +#' +#' 1) Domain Name - passed as the 'xportr.df_domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. +#' 2) Label Name - passed as the 'xportr.df_label' option. Default: +#' "format". Character values to update the 'format.sas' attribute of the +#' dataframe This is passed to `haven::write` to note the label. +#' #' @export #' #' @examples diff --git a/R/format.R b/R/format.R index f8b90af9..37838356 100644 --- a/R/format.R +++ b/R/format.R @@ -6,6 +6,22 @@ #' #' @return Data frame with `SASformat` attributes for each variable. #' +#' @section Metadata: +#' The argument passed in the 'metadata' argument can either be a metacore +#' object, or a data.frame containing the data listed below. If metacore is +#' used, no changes to options are required. +#' +#' For data.frame 'metadata' arguments three columns must be present: +#' +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. +#' 2) Format Name - passed as the 'xportr.format_name' option. Default: +#' "format". Character values to update the 'format.sas' attribute of the +#' column. This is passed to `haven::write` to note the format. +#' 3) Variable Name - passed as the 'xportr.variable_name' option. Default: +#' "variable". This is used to match columns in '.df' argument and the metadata. +#' #' @export #' #' @examples diff --git a/R/label.R b/R/label.R index 0e44c6de..2c4167c7 100644 --- a/R/label.R +++ b/R/label.R @@ -14,6 +14,23 @@ #' 'verbose' argument is 'stop', 'warn', or 'message', a message will be #' generated detailing the variables that were missing in metadata. #' +#' @section Metadata: +#' The argument passed in the 'metadata' argument can either be a metacore +#' object, or a data.frame containing the data listed below. If metacore is +#' used, no changes to options are required. +#' +#' For data.frame 'metadata' arguments three columns must be present: +#' +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. +#' 2) Variable Name - passed as the 'xportr.variable_name' option. Default: +#' "variable". This is used to match columns in '.df' argument and the metadata. +#' 3) Variable Label - passed as the 'xportr.label' option. Default: "label". +#' These character values to update the 'label' attribute of the column. This is +#' passed to `haven::write` to note the label. +#' +#' #' @return Data frame with label attributes for each variable. #' #' @export diff --git a/R/length.R b/R/length.R index 2e2aa177..73be5db6 100644 --- a/R/length.R +++ b/R/length.R @@ -24,6 +24,23 @@ #' 'verbose' argument is 'stop', 'warn', or 'message', a message will be #' generated detailing the variables that were missing in metadata. #' +#' @section Metadata: +#' The argument passed in the 'metadata' argument can either be a metacore +#' object, or a data.frame containing the data listed below. If metacore is +#' used, no changes to options are required. +#' +#' For data.frame 'metadata' arguments three columns must be present: +#' +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. +#' 2) Variable Name - passed as the 'xportr.variable_name' option. Default: +#' "variable". This is used to match columns in '.df' argument and the metadata. +#' 3) Variable Label - passed as the 'xportr.length' option. Default: "length". +#' These numeric values to update the 'width' attribute of the column. This is +#' passed to `haven::write` to note the variable length. +#' +#' #' @return Data frame with `SASlength` attributes for each variable. #' #' @export diff --git a/R/metadata.R b/R/metadata.R index 10aad1cb..df6f1285 100644 --- a/R/metadata.R +++ b/R/metadata.R @@ -2,7 +2,8 @@ #' #' Sets metadata for a dataset in a way that can be accessed by other xportr #' functions. If used at the start of an xportr pipeline, it removes the need to -#' set metadata and domain at each step individually +#' set metadata and domain at each step individually. For details on the format +#' of the metadata, see the 'Metadata' section for each function in question. #' #' @inheritParams xportr_length #' diff --git a/R/order.R b/R/order.R index 56c39499..e4c1b817 100644 --- a/R/order.R +++ b/R/order.R @@ -20,6 +20,23 @@ #' reordered, and the 'verbose' argument is 'stop', 'warn', or 'message', a #' message will be generated detailing the variables that were reordered. #' +#' @section Metadata: +#' The argument passed in the 'metadata' argument can either be a metacore +#' object, or a data.frame containing the data listed below. If metacore is +#' used, no changes to options are required. +#' +#' For data.frame 'metadata' arguments three columns must be present: +#' +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. +#' 2) Variable Name - passed as the 'xportr.variable_name' option. Default: +#' "variable". This is used to match columns in '.df' argument and the metadata. +#' 3) Variable Order - passed as the 'xportr.order_name' option. Default: "order". +#' These values used to arrange the order of the variables. If the values of +#' order metadata are not numeric, they will be corsersed to prevent +#' alphabetical sorting of numberic values. +#' #' @return Dataframe that has been re-ordered according to spec #' #' @examples diff --git a/R/type.R b/R/type.R index 812afb0e..7502e5bc 100644 --- a/R/type.R +++ b/R/type.R @@ -12,6 +12,36 @@ #' 'verbose' argument is 'stop', 'warn', or 'message', the type mismatches will #' be detailed the actual type and the type reported in the metadata. #' +#' @section Metadata: +#' The argument passed in the 'metadata' argument can either be a metacore +#' object, or a data.frame containing the data listed below. If metacore is +#' used, no changes to options are required. +#' +#' For data.frame 'metadata' arguments three columns must be present: +#' +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. +#' +#' 2) Format Name - passed as the 'xportr.format_name' option. Default: +#' "format". Character values to update the 'format.sas' attribute of the +#' column. This is passed to `haven::write` to note the format. +#' +#' 3) Variable Name - passed as the 'xportr.variable_name' option. Default: +#' "variable". This is used to match columns in '.df' argument and the metadata. +#' +#' 4) Variable Type - passed as the 'xportr.type_name'. Default: "type". This is +#' used to note the XPT variable "type" options are numeric or character. +#' +#' 5) Character Types - The list of classes that should be explicitly coerced to +#' a XPT Character type. Default: c( "character", "char", "text", "date", +#' "posixct", "posixt", "datetime", "time", "partialdate", "partialtime", +#' "partialdatetime", "incompletedatetime", "durationdatetime", +#' "intervaldatetime") +#' +#' 6) Numeric Types - The list of classes that should be explicitly coerced to a +#' XPT numeric type. Default: c("integer", "numeric", "num", "float") +#' #' @return Returns the modified table. #' @export #' diff --git a/R/write.R b/R/write.R index e030dfa4..7a37f580 100644 --- a/R/write.R +++ b/R/write.R @@ -8,9 +8,9 @@ #' @param path Path where transport file will be written. File name sans will be #' used as `xpt` name. #' @param label Dataset label. It must be <=40 characters. -#' @param strict_checks If TRUE, xpt validation will report errors and not -#' write out the dataset. If FALSE, xpt validation will report warnings and continue -#' with writing out the dataset. Defaults to FALSE +#' @param strict_checks If TRUE, xpt validation will report errors and not write +#' out the dataset. If FALSE, xpt validation will report warnings and continue +#' with writing out the dataset. Defaults to FALSE #' #' @details #' * Variable and dataset labels are stored in the "label" attribute. diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index cb566f36..7419cec4 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -25,6 +25,23 @@ Data frame with label attributes. \description{ Assigns dataset label from a dataset level metadata to a given data frame. } +\section{Metadata}{ + +The argument passed in the 'metadata' argument can either be a metacore +object, or a data.frame containing the data listed below. If metacore is +used, no changes to options are required. + +For data.frame 'metadata' arguments two columns must be present: +\enumerate{ +\item Domain Name - passed as the 'xportr.df_domain_name' option. Default: +"dataset". This is the column subset by the 'domain' argument in the +function. +\item Label Name - passed as the 'xportr.df_label' option. Default: +"format". Character values to update the 'format.sas' attribute of the +dataframe This is passed to \code{haven::write} to note the label. +} +} + \examples{ adsl <- data.frame( USUBJID = c(1001, 1002, 1003), diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index 7d4e3ea5..eed66d2b 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -25,6 +25,25 @@ Data frame with \code{SASformat} attributes for each variable. \description{ Assigns a SAS format from a variable level metadata to a given data frame. } +\section{Metadata}{ + +The argument passed in the 'metadata' argument can either be a metacore +object, or a data.frame containing the data listed below. If metacore is +used, no changes to options are required. + +For data.frame 'metadata' arguments three columns must be present: +\enumerate{ +\item Domain Name - passed as the 'xportr.domain_name' option. Default: +"dataset". This is the column subset by the 'domain' argument in the +function. +\item Format Name - passed as the 'xportr.format_name' option. Default: +"format". Character values to update the 'format.sas' attribute of the +column. This is passed to \code{haven::write} to note the format. +\item Variable Name - passed as the 'xportr.variable_name' option. Default: +"variable". This is used to match columns in '.df' argument and the metadata. +} +} + \examples{ adsl <- data.frame( USUBJID = c(1001, 1002, 1003), diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index 59ed1151..e6c4fc2e 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -47,6 +47,25 @@ If variables were not found in the metadata and the value passed to the generated detailing the variables that were missing in metadata. } +\section{Metadata}{ + +The argument passed in the 'metadata' argument can either be a metacore +object, or a data.frame containing the data listed below. If metacore is +used, no changes to options are required. + +For data.frame 'metadata' arguments three columns must be present: +\enumerate{ +\item Domain Name - passed as the 'xportr.domain_name' option. Default: +"dataset". This is the column subset by the 'domain' argument in the +function. +\item Variable Name - passed as the 'xportr.variable_name' option. Default: +"variable". This is used to match columns in '.df' argument and the metadata. +\item Variable Label - passed as the 'xportr.label' option. Default: "label". +These character values to update the 'label' attribute of the column. This is +passed to \code{haven::write} to note the label. +} +} + \examples{ adsl <- data.frame( USUBJID = c(1001, 1002, 1003), diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index 74796524..5e1b5d1b 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -47,6 +47,25 @@ If variables were not found in the metadata and the value passed to the generated detailing the variables that were missing in metadata. } +\section{Metadata}{ + +The argument passed in the 'metadata' argument can either be a metacore +object, or a data.frame containing the data listed below. If metacore is +used, no changes to options are required. + +For data.frame 'metadata' arguments three columns must be present: +\enumerate{ +\item Domain Name - passed as the 'xportr.domain_name' option. Default: +"dataset". This is the column subset by the 'domain' argument in the +function. +\item Variable Name - passed as the 'xportr.variable_name' option. Default: +"variable". This is used to match columns in '.df' argument and the metadata. +\item Variable Label - passed as the 'xportr.length' option. Default: "length". +These numeric values to update the 'width' attribute of the column. This is +passed to \code{haven::write} to note the variable length. +} +} + \examples{ adsl <- data.frame( USUBJID = c(1001, 1002, 1003), diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index 9b458cd7..f610f366 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -22,7 +22,8 @@ the metadata object. If none is passed, then name of the dataset passed as \description{ Sets metadata for a dataset in a way that can be accessed by other xportr functions. If used at the start of an xportr pipeline, it removes the need to -set metadata and domain at each step individually +set metadata and domain at each step individually. For details on the format +of the metadata, see the 'Metadata' section for each function in question. } \examples{ diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index 0bf08220..042b675b 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -53,6 +53,26 @@ reordered, and the 'verbose' argument is 'stop', 'warn', or 'message', a message will be generated detailing the variables that were reordered. } +\section{Metadata}{ + +The argument passed in the 'metadata' argument can either be a metacore +object, or a data.frame containing the data listed below. If metacore is +used, no changes to options are required. + +For data.frame 'metadata' arguments three columns must be present: +\enumerate{ +\item Domain Name - passed as the 'xportr.domain_name' option. Default: +"dataset". This is the column subset by the 'domain' argument in the +function. +\item Variable Name - passed as the 'xportr.variable_name' option. Default: +"variable". This is used to match columns in '.df' argument and the metadata. +\item Variable Order - passed as the 'xportr.order_name' option. Default: "order". +These values used to arrange the order of the variables. If the values of +order metadata are not numeric, they will be corsersed to prevent +alphabetical sorting of numberic values. +} +} + \examples{ adsl <- data.frame( BRTHDT = c(1, 1, 2), diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index d2942022..ac9befe1 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -45,6 +45,34 @@ reported by by \code{xportr_type}. If there are any type mismatches, and the be detailed the actual type and the type reported in the metadata. } +\section{Metadata}{ + +The argument passed in the 'metadata' argument can either be a metacore +object, or a data.frame containing the data listed below. If metacore is +used, no changes to options are required. + +For data.frame 'metadata' arguments three columns must be present: +\enumerate{ +\item Domain Name - passed as the 'xportr.domain_name' option. Default: +"dataset". This is the column subset by the 'domain' argument in the +function. +\item Format Name - passed as the 'xportr.format_name' option. Default: +"format". Character values to update the 'format.sas' attribute of the +column. This is passed to \code{haven::write} to note the format. +\item Variable Name - passed as the 'xportr.variable_name' option. Default: +"variable". This is used to match columns in '.df' argument and the metadata. +\item Variable Type - passed as the 'xportr.type_name'. Default: "type". This is +used to note the XPT variable "type" options are numeric or character. +\item Character Types - The list of classes that should be explicitly coerced to +a XPT Character type. Default: c( "character", "char", "text", "date", +"posixct", "posixt", "datetime", "time", "partialdate", "partialtime", +"partialdatetime", "incompletedatetime", "durationdatetime", +"intervaldatetime") +\item Numeric Types - The list of classes that should be explicitly coerced to a +XPT numeric type. Default: c("integer", "numeric", "num", "float") +} +} + \examples{ metadata <- data.frame( dataset = "test", diff --git a/man/xportr_write.Rd b/man/xportr_write.Rd index 4fbcdfcd..3399ab18 100644 --- a/man/xportr_write.Rd +++ b/man/xportr_write.Rd @@ -14,8 +14,8 @@ used as \code{xpt} name.} \item{label}{Dataset label. It must be <=40 characters.} -\item{strict_checks}{If TRUE, xpt validation will report errors and not -write out the dataset. If FALSE, xpt validation will report warnings and continue +\item{strict_checks}{If TRUE, xpt validation will report errors and not write +out the dataset. If FALSE, xpt validation will report warnings and continue with writing out the dataset. Defaults to FALSE} } \value{ From c66f7529ad38010d18973c9a4cf22435bab8a276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 11:55:07 +0200 Subject: [PATCH 265/337] chore: cleans output in test-order --- tests/testthat/test-length.R | 2 + tests/testthat/test-messages.R | 3 ++ tests/testthat/test-order.R | 97 ++++++++++++++++++---------------- 3 files changed, 56 insertions(+), 46 deletions(-) diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 2e4fdf62..488fcacb 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -108,6 +108,7 @@ test_that("xportr_length: Impute character lengths based on class", { withr::local_options(list(xportr.character_types = c("character", "date"))) # Remove empty lines in cli theme + withr::local_envvar(list(NO_COLOR = "yes")) withr::local_options(list(cli.user_theme = cli_theme_tests)) app <- cli::start_app(output = "message", .auto_close = FALSE) withr::defer(cli::stop_app(app)) @@ -142,6 +143,7 @@ test_that("xportr_length: Throws message when variables not present in metadata" # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) # Remove empty lines in cli theme + withr::local_envvar(list(NO_COLOR = "yes")) withr::local_options(list(cli.user_theme = cli_theme_tests)) app <- cli::start_app(output = "message", .auto_close = FALSE) withr::defer(cli::stop_app(app)) diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index 13e966af..1f766fd9 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -21,6 +21,7 @@ test_that("xportr_logger: Type parameter will create correct message type", { test_that("length_log: Missing lengths messages are shown", { # Remove empty lines in cli theme withr::local_options(list(cli.user_theme = cli_theme_tests)) + withr::local_envvar(list(NO_COLOR = "yes")) app <- cli::start_app(output = "message", .auto_close = FALSE) withr::defer(cli::stop_app(app)) @@ -33,6 +34,7 @@ test_that("length_log: Missing lengths messages are shown", { test_that("length_log: Missing variables messages are shown", { # Remove empty lines in cli theme withr::local_options(list(cli.user_theme = cli_theme_tests)) + withr::local_envvar(list(NO_COLOR = "yes")) app <- cli::start_app(output = "message", .auto_close = FALSE) withr::defer(cli::stop_app(app)) @@ -47,6 +49,7 @@ test_that("length_log: Missing variables messages are shown", { test_that("var_names_log: Renamed variables messages are shown", { # Remove empty lines in cli theme withr::local_options(list(cli.user_theme = cli_theme_tests)) + withr::local_envvar(list(NO_COLOR = "yes")) app <- cli::start_app(output = "message", .auto_close = FALSE) withr::defer(cli::stop_app(app)) diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index 9599384f..3c7f052f 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -1,8 +1,3 @@ -suppressWarnings({ - library(haven) - library(readxl) -}) - test_that("xportr_order: Variable are ordered correctly for data.frame spec", { df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) df_meta <- data.frame( @@ -11,7 +6,7 @@ test_that("xportr_order: Variable are ordered correctly for data.frame spec", { order = 1:4 ) - ordered_df <- xportr_order(df, df_meta) + ordered_df <- suppressMessages(xportr_order(df, df_meta)) expect_equal(names(ordered_df), df_meta$variable) }) @@ -24,9 +19,11 @@ test_that("xportr_order: Variable are ordered correctly when data is piped", { order = 1:4 ) - ordered_df <- df %>% - xportr_order(df_meta) %>% - xportr_order(df_meta) + ordered_df <- suppressMessages( + df %>% + xportr_order(df_meta) %>% + xportr_order(df_meta) + ) expect_equal(names(ordered_df), df_meta$variable) }) @@ -39,29 +36,40 @@ test_that("xportr_order: Variable are ordered correctly for custom domain", { order = 1:4 ) - ordered_df <- xportr_order(df, df_meta, domain = "DOMAIN") + ordered_df <- suppressMessages( + xportr_order(df, df_meta, domain = "DOMAIN") + ) expect_equal(names(ordered_df), df_meta$variable) }) test_that("xportr_order: Variable are ordered correctly for metacore spec", { + skip_if_not_installed("metacore") + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) ordered_columns <- letters[1:4] - metacore_meta <- suppressWarnings( - metacore::metacore( - ds_vars = data.frame( - dataset = "df", - variable = ordered_columns, - keep = TRUE, - key_seq = NA, - order = 1:4, - core = NA_character_, - supp_flag = NA + metacore_meta <- suppressMessages( + suppressWarnings( + metacore::metacore( + ds_vars = data.frame( + dataset = "df", + variable = ordered_columns, + keep = TRUE, + key_seq = NA, + order = 1:4, + core = NA_character_, + supp_flag = NA + ), + ds_spec = dplyr::tibble( + dataset = "df" + ) ) ) ) - ordered_df <- xportr_order(df, metacore_meta) + ordered_df <- suppressMessages( + xportr_order(df, metacore_meta) + ) expect_equal(names(ordered_df), ordered_columns) }) @@ -74,7 +82,9 @@ test_that("xportr_order: Variable are ordered when custom domain_name is passed" order = 1:4 ) - ordered_df <- xportr_order(df, df_meta, domain = "df") + ordered_df <- suppressMessages( + xportr_order(df, df_meta, domain = "df") + ) expect_equal(names(ordered_df), df_meta$variable) }) @@ -101,7 +111,11 @@ test_that("xportr_order: error when metadata is not set", { }) test_that("xportr_order: Variable ordering messaging is correct", { - output_file <- tempfile() + skip_if_not_installed("haven") + skip_if_not_installed("readxl") + + require(haven, quietly = TRUE) + require(readxl, quietly = TRUE) df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) df2 <- data.frame(a = "a", z = "z") @@ -111,31 +125,22 @@ test_that("xportr_order: Variable ordering messaging is correct", { order = 1:4 ) - capture.output(xportr_order(df, df_meta, verbose = "message"), file = output_file, type = "message") + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + withr::local_envvar(list(NO_COLOR = "yes")) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) - expect_equal( - readLines(output_file), - c( - "-- All variables in specification file are in dataset --", - "", - "-- 4 reordered in dataset --", - "", - "Variable reordered in `.df`: `a`, `b`, `c`, and `d`" - ) - ) + xportr_order(df, df_meta, verbose = "message") %>% + expect_message("All variables in specification file are in dataset") %>% + expect_condition("4 reordered in dataset") %>% + expect_message("Variable reordered in `.df`: `a`, `b`, `c`, and `d`") - capture.output(xportr_order(df2, df_meta, verbose = "message"), file = output_file, type = "message") + xportr_order(df2, df_meta, verbose = "message") %>% + expect_message("2 variables not in spec and moved to end") %>% + expect_message("Variable moved to end in `.df`: `a` and `z`") %>% + expect_message("All variables in dataset are ordered") - expect_equal( - readLines(output_file), - c( - "-- 2 variables not in spec and moved to end --", - "", - "Variable moved to end in `.df`: `a` and `z`", - "-- All variables in dataset are ordered --", - "" - ) - ) }) test_that("xportr_order: Metadata order columns are coersed to numeric", { @@ -146,7 +151,7 @@ test_that("xportr_order: Metadata order columns are coersed to numeric", { order = c("1", "2", "11", "90") ) - ordered_df <- xportr_order(df, df_meta) + ordered_df <- suppressMessages(xportr_order(df, df_meta)) expect_equal(names(ordered_df), df_meta$variable) }) From 6aaacee931bcce0d8cf699794cfa9a837d1ea556 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 12:15:15 +0200 Subject: [PATCH 266/337] chore: cleans output in test-metadata fix unused test --- tests/testthat/test-metadata.R | 145 ++++++++++++++++++++------------- 1 file changed, 88 insertions(+), 57 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index d7113c60..74041e71 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -17,8 +17,9 @@ test_that("xportr_label: Correctly applies label from data.frame spec", { df_labeled_df <- xportr_label(df, df_meta) expect_equal(extract_var_label(df_labeled_df), c("foo", "bar")) + expect_equal( - dput(df_labeled_df), + df_labeled_df, structure( list( x = structure("a", label = "foo"), @@ -39,7 +40,7 @@ test_that("xportr_label: Correctly applies label when data is piped", { expect_equal(extract_var_label(df_labeled_df), c("foo", "bar")) expect_equal( - dput(df_labeled_df), + df_labeled_df, structure( list( x = structure("a", label = "foo"), @@ -60,7 +61,7 @@ test_that("xportr_label: Correctly applies label for custom domain", { expect_equal(extract_var_label(df_labeled_df), c("foo", "bar")) expect_equal( - dput(df_labeled_df), + df_labeled_df, structure( list( x = structure("a", label = "foo"), @@ -75,8 +76,9 @@ test_that("xportr_label: Correctly applies label for custom domain", { test_that("xportr_label: Correctly applies label from metacore spec", { skip_if_not_installed("metacore") + df <- data.frame(x = "a", y = "b", variable = "value") - metacore_meta <- suppressWarnings( + metacore_meta <- suppressMessages(suppressWarnings( metacore::metacore( var_spec = data.frame( variable = c("x", "y"), @@ -85,15 +87,20 @@ test_that("xportr_label: Correctly applies label from metacore spec", { length = c(4, 4), common = NA_character_, format = NA_character_ + ), + ds_spec = dplyr::tibble( + dataset = c() ) ) - ) + )) - metacoes_labeled_df <- xportr_label(df, metacore_meta) + metacoes_labeled_df <- suppressMessages( + xportr_label(df, metacore_meta) + ) expect_equal(extract_var_label(metacoes_labeled_df), c("X Label", "Y Label", "")) expect_equal( - dput(metacoes_labeled_df), + metacoes_labeled_df, structure( list( x = structure("a", label = "X Label"), @@ -114,8 +121,8 @@ test_that("xportr_label: Expect error if any variable does not exist in metadata variable = "x", label = "foo" ) - - expect_error(xportr_label(df, df_meta, verbose = "stop")) + suppressMessages(xportr_label(df, df_meta, verbose = "stop")) %>% + expect_error() }) test_that("xportr_label: Expect error if label exceeds 40 characters", { @@ -126,10 +133,8 @@ test_that("xportr_label: Expect error if label exceeds 40 characters", { label = strrep("a", 41) ) - expect_warning( - xportr_label(df, df_meta), - "variable label must be 40 characters or less" - ) + suppressMessages(xportr_label(df, df_meta)) %>% + expect_warning("variable label must be 40 characters or less") }) test_that("xportr_label: Expect error if domain is not a character", { @@ -158,7 +163,7 @@ test_that("xportr_df_label: Correctly applies label from data.frame spec", { expect_equal(attr(df_spec_labeled_df, "label"), "Label") expect_equal( - dput(df_spec_labeled_df), + df_spec_labeled_df, structure( list(x = "a", y = "b"), class = "data.frame", @@ -179,7 +184,7 @@ test_that("xportr_df_label: Correctly applies label when data is piped", { expect_equal(attr(df_spec_labeled_df, "label"), "Label") expect_equal( - dput(df_spec_labeled_df), + df_spec_labeled_df, structure( list(x = "a", y = "b"), class = "data.frame", row.names = c(NA, -1L), `_xportr.df_arg_` = "df", label = "Label" @@ -195,7 +200,7 @@ test_that("xportr_df_label: Correctly applies label for custom domain", { expect_equal(attr(df_spec_labeled_df, "label"), "Label") expect_equal( - dput(df_spec_labeled_df), + df_spec_labeled_df, structure( list(x = "a", y = "b"), class = "data.frame", row.names = c(NA, -1L), `_xportr.df_arg_` = "DOMAIN", label = "Label" @@ -205,8 +210,9 @@ test_that("xportr_df_label: Correctly applies label for custom domain", { test_that("xportr_df_label: Correctly applies label from metacore spec", { skip_if_not_installed("metacore") + df <- data.frame(x = "a", y = "b") - metacore_meta <- suppressWarnings( + metacore_meta <- suppressMessages(suppressWarnings( metacore::metacore( ds_spec = data.frame( dataset = c("df"), @@ -214,13 +220,13 @@ test_that("xportr_df_label: Correctly applies label from metacore spec", { label = c("Label") ) ) - ) + )) metacore_spec_labeled_df <- xportr_df_label(df, metacore_meta) expect_equal(attr(metacore_spec_labeled_df, "label"), "Label") expect_equal( - dput(metacore_spec_labeled_df), + metacore_spec_labeled_df, structure( list(x = "a", y = "b"), class = "data.frame", @@ -271,7 +277,7 @@ test_that("xportr_format: Set formats as expected", { formatted_df <- xportr_format(df, df_meta) expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.")) - expect_equal(dput(formatted_df), structure( + expect_equal(formatted_df, structure( list( x = structure(1, format.sas = "DATE9."), y = structure(2, format.sas = "DATETIME20.") @@ -291,7 +297,7 @@ test_that("xportr_format: Set formats as expected when data is piped", { formatted_df <- df %>% xportr_format(df_meta) expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.")) - expect_equal(dput(formatted_df), structure( + expect_equal(formatted_df, structure( list( x = structure(1, format.sas = "DATE9."), y = structure(2, format.sas = "DATETIME20.") @@ -303,7 +309,7 @@ test_that("xportr_format: Set formats as expected when data is piped", { test_that("xportr_format: Set formats as expected for metacore spec", { skip_if_not_installed("metacore") df <- data.frame(x = 1, y = 2) - metacore_meta <- suppressWarnings( + metacore_meta <- suppressMessages(suppressWarnings( metacore::metacore( var_spec = data.frame( variable = c("x", "y"), @@ -314,12 +320,12 @@ test_that("xportr_format: Set formats as expected for metacore spec", { format = c("date9.", "datetime20.") ) ) - ) + )) formatted_df <- xportr_format(df, metacore_meta) expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.")) - expect_equal(dput(formatted_df), structure( + expect_equal(formatted_df, structure( list( x = structure(1, format.sas = "DATE9."), y = structure(2, format.sas = "DATETIME20.") @@ -339,7 +345,7 @@ test_that("xportr_format: Set formats as expected for custom domain", { formatted_df <- xportr_format(df, df_meta, domain = "DOMAIN") expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.")) - expect_equal(dput(formatted_df), structure( + expect_equal(formatted_df, structure( list( x = structure(1, format.sas = "DATE9."), y = structure(2, format.sas = "DATETIME20.") @@ -359,7 +365,7 @@ test_that("xportr_format: Handle NA values without raising an error", { formatted_df <- xportr_format(df, df_meta) expect_equal(extract_format(formatted_df), c("DATE9.", "DATETIME20.", "", "")) - expect_equal(dput(formatted_df), structure( + expect_equal(formatted_df, structure( list( x = structure(1, format.sas = "DATE9."), y = structure(2, format.sas = "DATETIME20."), @@ -400,7 +406,7 @@ test_that("xportr_length: Check if width attribute is set properly", { df_with_width <- xportr_length(df, df_meta) expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) - expect_equal(dput(df_with_width), structure( + expect_equal(df_with_width, structure( list( x = structure("a", width = 1), y = structure("b", width = 2) @@ -421,7 +427,7 @@ test_that("xportr_length: Check if width attribute is set properly when data is df_with_width <- df %>% xportr_length(df_meta) expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) - expect_equal(dput(df_with_width), structure( + expect_equal(df_with_width, structure( list( x = structure("a", width = 1), y = structure("b", width = 2) @@ -433,7 +439,7 @@ test_that("xportr_length: Check if width attribute is set properly when data is test_that("xportr_length: Check if width attribute is set properly for metacore spec", { skip_if_not_installed("metacore") df <- data.frame(x = "a", y = "b") - metacore_meta <- suppressWarnings( + metacore_meta <- suppressMessages(suppressWarnings( metacore::metacore( var_spec = data.frame( variable = c("x", "y"), @@ -444,12 +450,12 @@ test_that("xportr_length: Check if width attribute is set properly for metacore format = NA_character_ ) ) - ) + )) df_with_width <- xportr_length(df, metacore_meta) expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) - expect_equal(dput(df_with_width), structure( + expect_equal(df_with_width, structure( list( x = structure("a", width = 1), y = structure("b", width = 2) @@ -470,7 +476,7 @@ test_that("xportr_length: Check if width attribute is set properly when custom d df_with_width <- xportr_length(df, df_meta, domain = "DOMAIN") expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) - expect_equal(dput(df_with_width), structure( + expect_equal(df_with_width, structure( list( x = structure("a", width = 1), y = structure("b", width = 2) @@ -488,7 +494,10 @@ test_that("xportr_length: Expect error when a variable is not present in metadat length = c(1, 2) ) - expect_error(xportr_length(df, df_meta, verbose = "stop"), "doesn't exist") + suppressMessages( + xportr_length(df, df_meta, verbose = "stop") + ) %>% + expect_error("doesn't exist") }) test_that("xportr_length: Check if length gets imputed when a new variable is passed", { @@ -500,11 +509,13 @@ test_that("xportr_length: Check if length gets imputed when a new variable is pa length = 1 ) - df_with_width <- xportr_length(df, df_meta) + df_with_width <- suppressMessages( + xportr_length(df, df_meta) + ) # 200 is the imputed length for character and 8 for other data types as in impute_length() expect_equal(c(x = 1, y = 200, z = 8), map_dbl(df_with_width, attr, "width")) - expect_equal(dput(df_with_width), structure( + expect_equal(df_with_width, structure( list( x = structure("a", width = 1), y = structure("b", width = 200), @@ -537,42 +548,62 @@ test_that("xportr_length: Expect error if domain is not a character", { # tests for `xportr_metadata()` basic functionality # start test_that("xportr_metadata: Check metadata interaction with other functions", { - if (rlang::is_installed("here")) { - adsl <- admiral::admiral_adsl - - var_spec <- - readxl::read_xlsx( - system.file("specs", "ADaM_admiral_spec.xlsx", package = "xportr"), - sheet = "Variables" - ) %>% - dplyr::rename(type = "Data Type") %>% - rlang::set_names(tolower) - - expect_equal( - structure(xportr_type(adsl, var_spec), `_xportr.df_metadata_` = var_spec), + adsl <- admiral::admiral_adsl + + var_spec <- + readxl::read_xlsx( + system.file("specs", "ADaM_admiral_spec.xlsx", package = "xportr"), + sheet = "Variables" + ) %>% + dplyr::rename(type = "Data Type") %>% + rlang::set_names(tolower) + + expect_equal( + structure(xportr_type(adsl, var_spec), `_xportr.df_metadata_` = var_spec), + suppressMessages( xportr_metadata(adsl, var_spec) %>% xportr_type() ) + ) - expect_equal( - structure(xportr_length(adsl, var_spec), `_xportr.df_metadata_` = var_spec), + expect_equal( + structure( + suppressMessages(xportr_length(adsl, var_spec)), + `_xportr.df_metadata_` = var_spec + ), + suppressMessages( xportr_metadata(adsl, var_spec) %>% xportr_length() ) + ) - expect_equal( - structure(xportr_label(adsl, var_spec), `_xportr.df_metadata_` = var_spec), + expect_equal( + structure( + suppressMessages(xportr_label(adsl, var_spec)), + `_xportr.df_metadata_` = var_spec + ), + suppressMessages( xportr_metadata(adsl, var_spec) %>% xportr_label() ) + ) - expect_equal( - structure(xportr_order(adsl, var_spec), `_xportr.df_metadata_` = var_spec), + expect_equal( + structure( + suppressMessages(xportr_order(adsl, var_spec)), + `_xportr.df_metadata_` = var_spec + ), + suppressMessages( xportr_metadata(adsl, var_spec) %>% xportr_order() ) + ) - expect_equal( - structure(xportr_format(adsl, var_spec), `_xportr.df_metadata_` = var_spec), + expect_equal( + structure( + suppressMessages(xportr_format(adsl, var_spec)), + `_xportr.df_metadata_` = var_spec + ), + suppressMessages( xportr_metadata(adsl, var_spec) %>% xportr_format() ) - } + ) }) test_that("xportr_metadata: Correctly extract domain from var name", { From 2ad0e68e52fcf1b4ea9c0f3e3f7df92c9dfc0013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 12:32:43 +0200 Subject: [PATCH 267/337] chore: cleans output in test-type --- tests/testthat/test-type.R | 107 ++++++++++++++++++++++++++----------- 1 file changed, 76 insertions(+), 31 deletions(-) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index b99034d4..a7409f74 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -26,7 +26,10 @@ test_that("xportr_type: NAs are handled as expected", { type = c("numeric", "character", "numeric", "character") ) - df2 <- xportr_type(df, meta_example) + df2 <- suppressMessages( + xportr_type(df, meta_example) + ) + expect_equal( df2, structure( @@ -45,10 +48,15 @@ test_that("xportr_type: NAs are handled as expected", { test_that("xportr_type: Variable types are coerced as expected and can raise messages", { - expect_message( - df2 <- xportr_type(df, meta_example), - "-- Variable type mismatches found. --" - ) + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + withr::local_envvar(list(NO_COLOR = "yes")) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) + + (df2 <- xportr_type(df, meta_example)) %>% + expect_message("Variable type mismatches found.") %>% + expect_message("[0-9+] variables coerced") expect_equal(purrr::map_chr(df2, class), c( Subj = "numeric", Different = "character", @@ -57,13 +65,20 @@ test_that("xportr_type: Variable types are coerced as expected and can raise mes expect_error(xportr_type(df, meta_example, verbose = "stop")) - expect_warning(df3 <- xportr_type(df, meta_example, verbose = "warn")) + expect_warning( + df3 <- suppressMessages(xportr_type(df, meta_example, verbose = "warn")) + ) + expect_equal(purrr::map_chr(df3, class), c( Subj = "numeric", Different = "character", Val = "numeric", Param = "character" )) - expect_message(df4 <- xportr_type(df, meta_example, verbose = "message")) + (df4 <- xportr_type(df, meta_example, verbose = "message")) %>% + expect_message("Variable type\\(s\\) in dataframe don't match metadata") %>% + expect_message("Variable type mismatches found") %>% + expect_message("[0-9]+ variables coerced") + expect_equal(purrr::map_chr(df4, class), c( Subj = "numeric", Different = "character", Val = "numeric", Param = "character" @@ -71,32 +86,48 @@ test_that("xportr_type: Variable types are coerced as expected and can raise mes }) test_that("xportr_metadata: Var types coerced as expected and raise messages", { - expect_message( - df2 <- xportr_metadata(df, meta_example) %>% xportr_type(), - "-- Variable type mismatches found. --" - ) + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + withr::local_envvar(list(NO_COLOR = "yes")) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) + + ( + df2 <- xportr_metadata(df, meta_example) %>% + xportr_type() + ) %>% + expect_message("Variable type mismatches found.") %>% + expect_message("[0-9+] variables coerced") expect_equal(purrr::map_chr(df2, class), c( Subj = "numeric", Different = "character", Val = "numeric", Param = "character" )) - expect_error( + suppressMessages( xportr_metadata(df, meta_example) %>% xportr_type(verbose = "stop") - ) + ) %>% + expect_error() - expect_warning( + suppressMessages( df3 <- xportr_metadata(df, meta_example) %>% xportr_type(verbose = "warn") - ) + ) %>% + expect_warning() + expect_equal(purrr::map_chr(df3, class), c( Subj = "numeric", Different = "character", Val = "numeric", Param = "character" )) - expect_message( - df4 <- xportr_metadata(df, meta_example) %>% - xportr_type(verbose = "message") - ) + ( + df4 <- xportr_metadata(df, meta_example) + %>% xportr_type(verbose = "message") + ) %>% + expect_message("Variable type\\(s\\) in dataframe don't match metadata: `Subj` and `Val`") %>% + expect_message("Variable type mismatches found") %>% + expect_message("[0-9]+ variables coerced") + + expect_equal(purrr::map_chr(df4, class), c( Subj = "numeric", Different = "character", Val = "numeric", Param = "character" @@ -121,17 +152,27 @@ test_that("xportr_type: Variables retain column attributes, besides class", { format = c(NA, NA, "DATE9.", NA, NA) ) - df_type_label <- adsl %>% - xportr_type(metadata) %>% - xportr_label(metadata) %>% - xportr_length(metadata) %>% - xportr_format(metadata) + # Remove empty lines in cli theme + withr::local_options(list(cli.user_theme = cli_theme_tests)) + withr::local_envvar(list(NO_COLOR = "yes")) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app)) + + df_type_label <- suppressMessages( + adsl %>% + xportr_type(metadata) %>% + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_format(metadata) + ) - df_label_type <- adsl %>% - xportr_label(metadata) %>% - xportr_length(metadata) %>% - xportr_format(metadata) %>% - xportr_type(metadata) + df_label_type <- suppressMessages( + adsl %>% + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_format(metadata) %>% + xportr_type(metadata) + ) expect_equal(df_type_label, df_label_type) }) @@ -152,8 +193,10 @@ test_that("xportr_type: expect error when domain is not a character", { }) test_that("xportr_type: works fine from metacore spec", { + skip_if_not_installed("metacore") + df <- data.frame(x = 1, y = 2) - metacore_meta <- suppressWarnings( + metacore_meta <- suppressMessages(suppressWarnings( metacore::metacore( var_spec = data.frame( variable = c("x", "y"), @@ -164,8 +207,10 @@ test_that("xportr_type: works fine from metacore spec", { format = c("date9.", "datetime20.") ) ) + )) + processed_df <- suppressMessages( + xportr_type(df, metacore_meta) ) - processed_df <- xportr_type(df, metacore_meta) expect_equal(processed_df$x, "1") }) From 606ecfacd87ad0c09950717e645ada6484fe9a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 12:33:06 +0200 Subject: [PATCH 268/337] chore: code cleanup on tests --- tests/testthat/test-metadata.R | 3 --- tests/testthat/test-order.R | 31 +++++++++++++++---------------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 74041e71..37ecf742 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -87,9 +87,6 @@ test_that("xportr_label: Correctly applies label from metacore spec", { length = c(4, 4), common = NA_character_, format = NA_character_ - ), - ds_spec = dplyr::tibble( - dataset = c() ) ) )) diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index 3c7f052f..fb446d99 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -48,24 +48,23 @@ test_that("xportr_order: Variable are ordered correctly for metacore spec", { df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) ordered_columns <- letters[1:4] - metacore_meta <- suppressMessages( - suppressWarnings( - metacore::metacore( - ds_vars = data.frame( - dataset = "df", - variable = ordered_columns, - keep = TRUE, - key_seq = NA, - order = 1:4, - core = NA_character_, - supp_flag = NA - ), - ds_spec = dplyr::tibble( - dataset = "df" - ) + metacore_meta <- suppressMessages(suppressWarnings( + metacore::metacore( + ds_vars = data.frame( + dataset = "df", + variable = ordered_columns, + keep = TRUE, + key_seq = NA, + order = 1:4, + core = NA_character_, + supp_flag = NA + ), + # ds_spec required to avoid empty line output + ds_spec = dplyr::tibble( + dataset = "df" ) ) - ) + )) ordered_df <- suppressMessages( xportr_order(df, metacore_meta) From 45dcc20efe7c9546dc1188cd767b201ecf0188c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 12:49:13 +0200 Subject: [PATCH 269/337] chore: cleans output in test-depreciation --- tests/testthat/test-depreciation.R | 58 +++++++++++++++++------------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/tests/testthat/test-depreciation.R b/tests/testthat/test-depreciation.R index e2167849..b6629e97 100644 --- a/tests/testthat/test-depreciation.R +++ b/tests/testthat/test-depreciation.R @@ -6,10 +6,8 @@ test_that("xportr_df_label: deprecated metacore argument still works and gives w df_spec_labeled_df <- xportr_df_label(df, metacore = df_meta) expect_equal(attr(df_spec_labeled_df, "label"), "Label") - lifecycle::expect_deprecated( - xportr_df_label(df, metacore = df_meta), - "Please use the `metadata` argument instead." - ) + xportr_df_label(df, metacore = df_meta) %>% + lifecycle::expect_deprecated("Please use the `metadata` argument instead.") }) test_that("xportr_format: deprecated metacore argument still works and gives warning", { @@ -24,23 +22,26 @@ test_that("xportr_format: deprecated metacore argument still works and gives war formatted_df <- xportr_format(df, metacore = df_meta) expect_equal(attr(formatted_df$x, "format.sas"), "DATE9.") - lifecycle::expect_deprecated( - xportr_format(df, metacore = df_meta), - "Please use the `metadata` argument instead." - ) + xportr_format(df, metacore = df_meta) %>% + lifecycle::expect_deprecated("Please use the `metadata` argument instead.") }) test_that("xportr_label: deprecated metacore argument still works and gives warning", { withr::local_options(lifecycle_verbosity = "quiet") + df <- data.frame(x = "a", y = "b") df_meta <- data.frame(dataset = "df", variable = "x", label = "foo") - df_labeled_df <- xportr_label(df, metacore = df_meta) + df_labeled_df <- suppressMessages( + xportr_label(df, metacore = df_meta) + ) expect_equal(attr(df_labeled_df$x, "label"), "foo") - lifecycle::expect_deprecated( - xportr_label(df, metacore = df_meta), - "Please use the `metadata` argument instead." + + # Note that only the deprecated message should be caught (others are ignored) + suppressMessages( + xportr_label(df, metacore = df_meta) %>% + lifecycle::expect_deprecated("Please use the `metadata` argument instead.") ) }) @@ -57,14 +58,14 @@ test_that("xportr_length: deprecated metacore argument still works and gives war df_with_width <- xportr_length(df, metacore = df_meta) expect_equal(c(x = 1, y = 2), map_dbl(df_with_width, attr, "width")) - lifecycle::expect_deprecated( - xportr_length(df, metacore = df_meta), - "Please use the `metadata` argument instead." - ) + + xportr_length(df, metacore = df_meta) %>% + lifecycle::expect_deprecated("Please use the `metadata` argument instead.") }) test_that("xportr_order: deprecated metacore argument still works and gives warning", { withr::local_options(lifecycle_verbosity = "quiet") + df <- data.frame(c = 1:5, a = "a", d = 5:1, b = LETTERS[1:5]) df_meta <- data.frame( dataset = "DOMAIN", @@ -72,12 +73,16 @@ test_that("xportr_order: deprecated metacore argument still works and gives warn order = 1:4 ) - ordered_df <- xportr_order(df, metacore = df_meta, domain = "DOMAIN") + ordered_df <- suppressMessages( + xportr_order(df, metacore = df_meta, domain = "DOMAIN") + ) expect_equal(names(ordered_df), df_meta$variable) - lifecycle::expect_deprecated( - xportr_order(df, metacore = df_meta), - "Please use the `metadata` argument instead." + + # Note that only the deprecated message should be caught (others are ignored) + suppressMessages( + xportr_order(df, metacore = df_meta) %>% + lifecycle::expect_deprecated("Please use the `metadata` argument instead.") ) }) @@ -95,9 +100,14 @@ test_that("xportr_type: deprecated metacore argument still works and gives warni type = c("numeric", "character", "numeric", "character") ) - df2 <- xportr_type(df, metacore = df_meta) - lifecycle::expect_deprecated( - xportr_type(df, metacore = df_meta), - "Please use the `metadata` argument instead." + df2 <- suppressMessages( + xportr_type(df, metacore = df_meta) + ) + + # Note that only the deprecated message should be caught (others are ignored) + suppressMessages( + xportr_type(df, metacore = df_meta) %>% + lifecycle::expect_deprecated("Please use the `metadata` argument instead.") ) }) + From bcbad4cb789fcf9de5e7d708a11f67e484d23934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 12:50:52 +0200 Subject: [PATCH 270/337] chore: avoids suppressMessage around many expressions --- tests/testthat/test-pipe.R | 31 ++++++++++++++++++++++++++----- tests/testthat/test-type.R | 31 ++++++++++++++++--------------- 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R index f263413b..bc4d98a4 100644 --- a/tests/testthat/test-pipe.R +++ b/tests/testthat/test-pipe.R @@ -6,6 +6,11 @@ test_that("xportr_*: Domain is obtained from a call without pipe", { order = TRUE ) + # Divert all messages to tempfile, instead of printing them + # note: be aware as this should only be used in tests that don't track + # messages + withr::local_message_sink(tempfile()) + xportr_metadata(adsl, metadata) %>% attr("_xportr.df_arg_") %>% expect_equal("adsl") @@ -28,7 +33,10 @@ test_that("xportr_*: Domain is obtained from a call without pipe", { test_that("xportr_*: Domain is kept in between calls", { - withr::local_options(list(xportr.type_verbose = "message")) + # Divert all messages to tempfile, instead of printing them + # note: be aware as this should only be used in tests that don't track + # messages + withr::local_message_sink(tempfile()) adsl <- minimal_table(30) @@ -61,7 +69,10 @@ test_that("xportr_*: Domain is kept in between calls", { }) test_that("xportr_*: Can use magrittr pipe and aquire domain from call", { - withr::local_options(list(xportr.type_verbose = "message")) + # Divert all messages to tempfile, instead of printing them + # note: be aware as this should only be used in tests that don't track + # messages + withr::local_message_sink(tempfile()) adsl <- minimal_table(30) @@ -94,7 +105,10 @@ test_that("xportr_*: Can use magrittr pipe and aquire domain from call", { }) test_that("xportr_*: Can use magrittr pipe and aquire domain from call (metadata)", { - withr::local_options(list(xportr.type_verbose = "message")) + # Divert all messages to tempfile, instead of printing them + # note: be aware as this should only be used in tests that don't track + # messages + withr::local_message_sink(tempfile()) adsl <- minimal_table(30) @@ -134,7 +148,10 @@ test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call", "R Version doesn't support native pipe (<4.1)" ) - withr::local_options(list(xportr.type_verbose = "message")) + # Divert all messages to tempfile, instead of printing them + # note: be aware as this should only be used in tests that don't track + # messages + withr::local_message_sink(tempfile()) adsl <- minimal_table(30) @@ -172,7 +189,10 @@ test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call ( "R Version doesn't support native pipe (<4.1)" ) - withr::local_options(list(xportr.type_verbose = "message")) + # Divert all messages to tempfile, instead of printing them + # note: be aware as this should only be used in tests that don't track + # messages + withr::local_message_sink(tempfile()) adsl <- minimal_table(30) @@ -205,3 +225,4 @@ test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call ( expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name_native") }) + diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index a7409f74..495b7737 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -158,21 +158,22 @@ test_that("xportr_type: Variables retain column attributes, besides class", { app <- cli::start_app(output = "message", .auto_close = FALSE) withr::defer(cli::stop_app(app)) - df_type_label <- suppressMessages( - adsl %>% - xportr_type(metadata) %>% - xportr_label(metadata) %>% - xportr_length(metadata) %>% - xportr_format(metadata) - ) - - df_label_type <- suppressMessages( - adsl %>% - xportr_label(metadata) %>% - xportr_length(metadata) %>% - xportr_format(metadata) %>% - xportr_type(metadata) - ) + # Divert all messages to tempfile, instead of printing them + # note: be aware as this should only be used in tests that don't track + # messages + withr::local_message_sink(tempfile()) + + df_type_label <- adsl %>% + xportr_type(metadata) %>% + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_format(metadata) + + df_label_type <- adsl %>% + xportr_label(metadata) %>% + xportr_length(metadata) %>% + xportr_format(metadata) %>% + xportr_type(metadata) expect_equal(df_type_label, df_label_type) }) From 5e6d9759e442cafb3af329090e1f5cc21bd0621a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 12:58:25 +0200 Subject: [PATCH 271/337] chore: style corrections --- tests/testthat/test-depreciation.R | 1 - tests/testthat/test-order.R | 1 - tests/testthat/test-pipe.R | 1 - tests/testthat/test-type.R | 4 ++-- 4 files changed, 2 insertions(+), 5 deletions(-) diff --git a/tests/testthat/test-depreciation.R b/tests/testthat/test-depreciation.R index b6629e97..5013fac4 100644 --- a/tests/testthat/test-depreciation.R +++ b/tests/testthat/test-depreciation.R @@ -110,4 +110,3 @@ test_that("xportr_type: deprecated metacore argument still works and gives warni lifecycle::expect_deprecated("Please use the `metadata` argument instead.") ) }) - diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index fb446d99..ffcd4be4 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -139,7 +139,6 @@ test_that("xportr_order: Variable ordering messaging is correct", { expect_message("2 variables not in spec and moved to end") %>% expect_message("Variable moved to end in `.df`: `a` and `z`") %>% expect_message("All variables in dataset are ordered") - }) test_that("xportr_order: Metadata order columns are coersed to numeric", { diff --git a/tests/testthat/test-pipe.R b/tests/testthat/test-pipe.R index bc4d98a4..c4d18d83 100644 --- a/tests/testthat/test-pipe.R +++ b/tests/testthat/test-pipe.R @@ -225,4 +225,3 @@ test_that("xportr_*: Can use R native pipe (R>4.1) and aquire domain from call ( expect_equal(attr(result2, "_xportr.df_arg_"), "non_standard_name_native") }) - diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 495b7737..8599a5de 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -55,7 +55,7 @@ test_that("xportr_type: Variable types are coerced as expected and can raise mes withr::defer(cli::stop_app(app)) (df2 <- xportr_type(df, meta_example)) %>% - expect_message("Variable type mismatches found.") %>% + expect_message("Variable type mismatches found.") %>% expect_message("[0-9+] variables coerced") expect_equal(purrr::map_chr(df2, class), c( @@ -112,7 +112,7 @@ test_that("xportr_metadata: Var types coerced as expected and raise messages", { suppressMessages( df3 <- xportr_metadata(df, meta_example) %>% xportr_type(verbose = "warn") ) %>% - expect_warning() + expect_warning() expect_equal(purrr::map_chr(df3, class), c( Subj = "numeric", Different = "character", From 10c71be3ce05d54ff43d66d7d86d3292e6c37bbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 13:06:37 +0200 Subject: [PATCH 272/337] chore: cleanup of code to be consistent --- tests/testthat/test-metadata.R | 4 +++- tests/testthat/test-order.R | 4 +++- tests/testthat/test-type.R | 29 ++++++++++++++--------------- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/tests/testthat/test-metadata.R b/tests/testthat/test-metadata.R index 37ecf742..b232ea2d 100644 --- a/tests/testthat/test-metadata.R +++ b/tests/testthat/test-metadata.R @@ -118,7 +118,9 @@ test_that("xportr_label: Expect error if any variable does not exist in metadata variable = "x", label = "foo" ) - suppressMessages(xportr_label(df, df_meta, verbose = "stop")) %>% + suppressMessages( + xportr_label(df, df_meta, verbose = "stop") + ) %>% expect_error() }) diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index ffcd4be4..aba9e783 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -149,7 +149,9 @@ test_that("xportr_order: Metadata order columns are coersed to numeric", { order = c("1", "2", "11", "90") ) - ordered_df <- suppressMessages(xportr_order(df, df_meta)) + ordered_df <- suppressMessages( + xportr_order(df, df_meta) + ) expect_equal(names(ordered_df), df_meta$variable) }) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 8599a5de..a1dbf642 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -65,19 +65,19 @@ test_that("xportr_type: Variable types are coerced as expected and can raise mes expect_error(xportr_type(df, meta_example, verbose = "stop")) - expect_warning( - df3 <- suppressMessages(xportr_type(df, meta_example, verbose = "warn")) - ) + (df3 <- suppressMessages(xportr_type(df, meta_example, verbose = "warn"))) %>% + expect_warning() expect_equal(purrr::map_chr(df3, class), c( Subj = "numeric", Different = "character", Val = "numeric", Param = "character" )) - (df4 <- xportr_type(df, meta_example, verbose = "message")) %>% - expect_message("Variable type\\(s\\) in dataframe don't match metadata") %>% - expect_message("Variable type mismatches found") %>% - expect_message("[0-9]+ variables coerced") + # Ignore other messages + suppressMessages( + (df4 <- xportr_type(df, meta_example, verbose = "message")) %>% + expect_message("Variable type\\(s\\) in dataframe don't match metadata") + ) expect_equal(purrr::map_chr(df4, class), c( Subj = "numeric", Different = "character", @@ -119,14 +119,13 @@ test_that("xportr_metadata: Var types coerced as expected and raise messages", { Val = "numeric", Param = "character" )) - ( - df4 <- xportr_metadata(df, meta_example) - %>% xportr_type(verbose = "message") - ) %>% - expect_message("Variable type\\(s\\) in dataframe don't match metadata: `Subj` and `Val`") %>% - expect_message("Variable type mismatches found") %>% - expect_message("[0-9]+ variables coerced") - + suppressMessages({ + ( + df4 <- xportr_metadata(df, meta_example) + %>% xportr_type(verbose = "message") + ) %>% + expect_message("Variable type\\(s\\) in dataframe don't match metadata: `Subj` and `Val`") + }) expect_equal(purrr::map_chr(df4, class), c( Subj = "numeric", Different = "character", From 503638596cf17bf7a4a807144635f46129b915f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 14:12:23 +0200 Subject: [PATCH 273/337] feat: replace repetitive code chunk that mocks cli with function --- R/support-test.R | 45 ++++++++++++++++++++++------------ _pkgdown.yml | 10 -------- man/cli_theme_tests.Rd | 16 ------------ man/expect_attr_width.Rd | 1 + man/local_cli.Rd | 17 +++++++++++++ man/minimal_metadata.Rd | 1 + man/minimal_table.Rd | 1 + tests/testthat/test-length.R | 14 +++-------- tests/testthat/test-messages.R | 15 +++--------- tests/testthat/test-order.R | 5 +--- tests/testthat/test-type.R | 15 +++--------- 11 files changed, 59 insertions(+), 81 deletions(-) delete mode 100644 man/cli_theme_tests.Rd create mode 100644 man/local_cli.Rd diff --git a/R/support-test.R b/R/support-test.R index d56fa47a..7e575a09 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -5,6 +5,7 @@ #' column width. #' #' @return The first argument, invisibly. +#' @keywords internal expect_attr_width <- function(result, metadata_length) { test_widths <- map( colnames(result), ~ attributes(result[[.x]]) %>% pluck("width") @@ -28,6 +29,7 @@ expect_attr_width <- function(result, metadata_length) { #' By default only `x` and `y` are returned with numeric contents. #' #' @return A data.frame mimicking a valid ADaM dataset. +#' @keywords internal minimal_table <- function(n_rows = 3, cols = c("x", "y")) { data.frame( x = sample(1000 + seq(n_rows * 100), size = n_rows), @@ -68,6 +70,7 @@ minimal_table <- function(n_rows = 3, cols = c("x", "y")) { #' to keep #' #' @return A metadata data.frame +#' @keywords internal minimal_metadata <- function(dataset = FALSE, length = FALSE, label = FALSE, @@ -100,12 +103,29 @@ minimal_metadata <- function(dataset = FALSE, metadata %>% select(all_of(cols)) } -#' Theme for cli package messages when running inside tests + +#' Local function to remove extra spaces and format by cli +#' +#' Groups together multiple calls instead of being spread out in code #' -#' It can be defined with starting an `cli::start_app(theme = cli_theme_tests)` -cli_theme_tests <- list( - h2 = list(`margin-top` = 0, `margin-bottom` = 0) -) +#' @param `[environment(1)]`\cr Attach exit handlers to this environment. Typically, this should +#' be either the current environment or a parent frame +#' (accessed through parent.frame()). +#' @keywords internal +local_cli <- function(.local_envir = parent.frame()) { + cli_theme_tests <- list( + h2 = list(`margin-top` = 0, `margin-bottom` = 0, fmt = function(x) x), + h1 = list(`margin-top` = 0, `margin-bottom` = 0, fmt = function(x) x), + `.alert` = list(before = NULL), + `.alert-danger` = list(before = NULL), + `.alert-success` = list(before = NULL) + ) + + withr::local_options(list(cli.user_theme = cli_theme_tests), .local_envir = .local_envir) + withr::local_envvar(list(NO_COLOR = "yes"), .local_envir = .local_envir) + app <- cli::start_app(output = "message", .auto_close = FALSE) + withr::defer(cli::stop_app(app), envir = .local_envir) +} #' Test if multiple vars in spec will result in warning message #' @noRd @@ -128,10 +148,9 @@ multiple_vars_in_spec_helper <- function(FUN) { dplyr::bind_rows(metadata) %>% dplyr::rename(Dataset = "dataset") + withr::local_options(list(xportr.length_verbose = "message")) # Setup temporary options with active verbose and Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests, xportr.length_verbose = "message")) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() adsl %>% FUN(metadata) %>% @@ -160,15 +179,9 @@ multiple_vars_in_spec_helper2 <- function(FUN) { dplyr::bind_rows(metadata) %>% dplyr::rename(Dataset = "dataset") + withr::local_options(list(xportr.length_verbose = "message", xportr.domain_name = "Dataset")) # Setup temporary options with active verbose and Remove empty lines in cli theme - withr::local_options(list( - cli.user_theme = cli_theme_tests, - xportr.length_verbose = "message", - xportr.domain_name = "Dataset" - )) - - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() adsl %>% FUN(metadata) %>% diff --git a/_pkgdown.yml b/_pkgdown.yml index d14bec51..6babeae6 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -44,13 +44,3 @@ reference: navbar: ~ contents: - xportr - -- title: internal - contents: - - cli_theme_tests - - expect_attr_width - - minimal_metadata - - minimal_table - - - diff --git a/man/cli_theme_tests.Rd b/man/cli_theme_tests.Rd deleted file mode 100644 index 83f9bb42..00000000 --- a/man/cli_theme_tests.Rd +++ /dev/null @@ -1,16 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/support-test.R -\docType{data} -\name{cli_theme_tests} -\alias{cli_theme_tests} -\title{Theme for cli package messages when running inside tests} -\format{ -An object of class \code{list} of length 1. -} -\usage{ -cli_theme_tests -} -\description{ -It can be defined with starting an \code{cli::start_app(theme = cli_theme_tests)} -} -\keyword{datasets} diff --git a/man/expect_attr_width.Rd b/man/expect_attr_width.Rd index 9dae48da..7070291a 100644 --- a/man/expect_attr_width.Rd +++ b/man/expect_attr_width.Rd @@ -18,3 +18,4 @@ The first argument, invisibly. \description{ Custom expect function to test result of xportr_length } +\keyword{internal} diff --git a/man/local_cli.Rd b/man/local_cli.Rd new file mode 100644 index 00000000..0e45a8bb --- /dev/null +++ b/man/local_cli.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/support-test.R +\name{local_cli} +\alias{local_cli} +\title{Local function to remove extra spaces and format by cli} +\usage{ +local_cli(.local_envir = parent.frame()) +} +\arguments{ +\item{`[environment(1)]`\cr}{Attach exit handlers to this environment. Typically, this should +be either the current environment or a parent frame +(accessed through parent.frame()).} +} +\description{ +Groups together multiple calls instead of being spread out in code +} +\keyword{internal} diff --git a/man/minimal_metadata.Rd b/man/minimal_metadata.Rd index 806a4bf8..0fc416d4 100644 --- a/man/minimal_metadata.Rd +++ b/man/minimal_metadata.Rd @@ -45,3 +45,4 @@ A metadata data.frame \description{ Minimal metadata data frame mock for a ADaM dataset } +\keyword{internal} diff --git a/man/minimal_table.Rd b/man/minimal_table.Rd index 9fd830f3..35bb62d5 100644 --- a/man/minimal_table.Rd +++ b/man/minimal_table.Rd @@ -19,3 +19,4 @@ A data.frame mimicking a valid ADaM dataset. \description{ This function is only used in tests. } +\keyword{internal} diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 488fcacb..b044bc18 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -68,9 +68,7 @@ test_that("xportr_length: CDISC data frame domain is being recognized from pipe" withr::local_options(list(xportr.length_verbose = "message")) # Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests)) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() # With domain manually set not_adsl <- adsl @@ -108,10 +106,7 @@ test_that("xportr_length: Impute character lengths based on class", { withr::local_options(list(xportr.character_types = c("character", "date"))) # Remove empty lines in cli theme - withr::local_envvar(list(NO_COLOR = "yes")) - withr::local_options(list(cli.user_theme = cli_theme_tests)) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() # Test length imputation of character and numeric (not valid character type) result <- adsl %>% @@ -143,10 +138,7 @@ test_that("xportr_length: Throws message when variables not present in metadata" # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) # Remove empty lines in cli theme - withr::local_envvar(list(NO_COLOR = "yes")) - withr::local_options(list(cli.user_theme = cli_theme_tests)) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() # Test that message is given which indicates that variable is not present xportr_length(adsl, metadata) %>% diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index 1f766fd9..a9b59f4e 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -20,10 +20,7 @@ test_that("xportr_logger: Type parameter will create correct message type", { test_that("length_log: Missing lengths messages are shown", { # Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests)) - withr::local_envvar(list(NO_COLOR = "yes")) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() length_log(c("var1", "var2", "var3"), "message") %>% expect_message("Variable lengths missing from metadata.") %>% @@ -33,10 +30,7 @@ test_that("length_log: Missing lengths messages are shown", { test_that("length_log: Missing variables messages are shown", { # Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests)) - withr::local_envvar(list(NO_COLOR = "yes")) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() label_log(c("var1", "var2", "var3"), "message") %>% # cli messages @@ -48,10 +42,7 @@ test_that("length_log: Missing variables messages are shown", { test_that("var_names_log: Renamed variables messages are shown", { # Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests)) - withr::local_envvar(list(NO_COLOR = "yes")) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() tidy_names_df <- data.frame( original_varname = c("var1", "var2", "var3", "var4", "VAR5", "VAR6"), diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index aba9e783..c3204081 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -125,10 +125,7 @@ test_that("xportr_order: Variable ordering messaging is correct", { ) # Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests)) - withr::local_envvar(list(NO_COLOR = "yes")) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() xportr_order(df, df_meta, verbose = "message") %>% expect_message("All variables in specification file are in dataset") %>% diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index a1dbf642..3cf3ca4c 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -49,10 +49,7 @@ test_that("xportr_type: NAs are handled as expected", { test_that("xportr_type: Variable types are coerced as expected and can raise messages", { # Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests)) - withr::local_envvar(list(NO_COLOR = "yes")) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() (df2 <- xportr_type(df, meta_example)) %>% expect_message("Variable type mismatches found.") %>% @@ -87,10 +84,7 @@ test_that("xportr_type: Variable types are coerced as expected and can raise mes test_that("xportr_metadata: Var types coerced as expected and raise messages", { # Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests)) - withr::local_envvar(list(NO_COLOR = "yes")) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() ( df2 <- xportr_metadata(df, meta_example) %>% @@ -152,10 +146,7 @@ test_that("xportr_type: Variables retain column attributes, besides class", { ) # Remove empty lines in cli theme - withr::local_options(list(cli.user_theme = cli_theme_tests)) - withr::local_envvar(list(NO_COLOR = "yes")) - app <- cli::start_app(output = "message", .auto_close = FALSE) - withr::defer(cli::stop_app(app)) + local_cli() # Divert all messages to tempfile, instead of printing them # note: be aware as this should only be used in tests that don't track From df33398c9104e0b470181103185080a26f031feb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 16:03:14 +0200 Subject: [PATCH 274/337] chore: rename of function --- R/support-test.R | 2 +- man/local_cli.Rd | 17 ----------------- tests/testthat/test-length.R | 6 +++--- tests/testthat/test-messages.R | 6 +++--- tests/testthat/test-order.R | 2 +- tests/testthat/test-type.R | 6 +++--- 6 files changed, 11 insertions(+), 28 deletions(-) delete mode 100644 man/local_cli.Rd diff --git a/R/support-test.R b/R/support-test.R index 7e575a09..07596639 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -112,7 +112,7 @@ minimal_metadata <- function(dataset = FALSE, #' be either the current environment or a parent frame #' (accessed through parent.frame()). #' @keywords internal -local_cli <- function(.local_envir = parent.frame()) { +local_cli_theme <- function(.local_envir = parent.frame()) { cli_theme_tests <- list( h2 = list(`margin-top` = 0, `margin-bottom` = 0, fmt = function(x) x), h1 = list(`margin-top` = 0, `margin-bottom` = 0, fmt = function(x) x), diff --git a/man/local_cli.Rd b/man/local_cli.Rd deleted file mode 100644 index 0e45a8bb..00000000 --- a/man/local_cli.Rd +++ /dev/null @@ -1,17 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/support-test.R -\name{local_cli} -\alias{local_cli} -\title{Local function to remove extra spaces and format by cli} -\usage{ -local_cli(.local_envir = parent.frame()) -} -\arguments{ -\item{`[environment(1)]`\cr}{Attach exit handlers to this environment. Typically, this should -be either the current environment or a parent frame -(accessed through parent.frame()).} -} -\description{ -Groups together multiple calls instead of being spread out in code -} -\keyword{internal} diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index b044bc18..60147400 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -68,7 +68,7 @@ test_that("xportr_length: CDISC data frame domain is being recognized from pipe" withr::local_options(list(xportr.length_verbose = "message")) # Remove empty lines in cli theme - local_cli() + local_cli_theme() # With domain manually set not_adsl <- adsl @@ -106,7 +106,7 @@ test_that("xportr_length: Impute character lengths based on class", { withr::local_options(list(xportr.character_types = c("character", "date"))) # Remove empty lines in cli theme - local_cli() + local_cli_theme() # Test length imputation of character and numeric (not valid character type) result <- adsl %>% @@ -138,7 +138,7 @@ test_that("xportr_length: Throws message when variables not present in metadata" # Setup temporary options with `verbose = "message"` withr::local_options(list(xportr.length_verbose = "message")) # Remove empty lines in cli theme - local_cli() + local_cli_theme() # Test that message is given which indicates that variable is not present xportr_length(adsl, metadata) %>% diff --git a/tests/testthat/test-messages.R b/tests/testthat/test-messages.R index a9b59f4e..2055914e 100644 --- a/tests/testthat/test-messages.R +++ b/tests/testthat/test-messages.R @@ -20,7 +20,7 @@ test_that("xportr_logger: Type parameter will create correct message type", { test_that("length_log: Missing lengths messages are shown", { # Remove empty lines in cli theme - local_cli() + local_cli_theme() length_log(c("var1", "var2", "var3"), "message") %>% expect_message("Variable lengths missing from metadata.") %>% @@ -30,7 +30,7 @@ test_that("length_log: Missing lengths messages are shown", { test_that("length_log: Missing variables messages are shown", { # Remove empty lines in cli theme - local_cli() + local_cli_theme() label_log(c("var1", "var2", "var3"), "message") %>% # cli messages @@ -42,7 +42,7 @@ test_that("length_log: Missing variables messages are shown", { test_that("var_names_log: Renamed variables messages are shown", { # Remove empty lines in cli theme - local_cli() + local_cli_theme() tidy_names_df <- data.frame( original_varname = c("var1", "var2", "var3", "var4", "VAR5", "VAR6"), diff --git a/tests/testthat/test-order.R b/tests/testthat/test-order.R index c3204081..801108c4 100644 --- a/tests/testthat/test-order.R +++ b/tests/testthat/test-order.R @@ -125,7 +125,7 @@ test_that("xportr_order: Variable ordering messaging is correct", { ) # Remove empty lines in cli theme - local_cli() + local_cli_theme() xportr_order(df, df_meta, verbose = "message") %>% expect_message("All variables in specification file are in dataset") %>% diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 3cf3ca4c..43710bb7 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -49,7 +49,7 @@ test_that("xportr_type: NAs are handled as expected", { test_that("xportr_type: Variable types are coerced as expected and can raise messages", { # Remove empty lines in cli theme - local_cli() + local_cli_theme() (df2 <- xportr_type(df, meta_example)) %>% expect_message("Variable type mismatches found.") %>% @@ -84,7 +84,7 @@ test_that("xportr_type: Variable types are coerced as expected and can raise mes test_that("xportr_metadata: Var types coerced as expected and raise messages", { # Remove empty lines in cli theme - local_cli() + local_cli_theme() ( df2 <- xportr_metadata(df, meta_example) %>% @@ -146,7 +146,7 @@ test_that("xportr_type: Variables retain column attributes, besides class", { ) # Remove empty lines in cli theme - local_cli() + local_cli_theme() # Divert all messages to tempfile, instead of printing them # note: be aware as this should only be used in tests that don't track From b2d5455ea8b8e3a2b692564933731d8e6c44d52b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 16:04:51 +0200 Subject: [PATCH 275/337] fix: mising file and cleans extra lines --- man/local_cli_theme.Rd | 17 +++++++++++++++++ tests/testthat/test-length.R | 1 - tests/testthat/test-type.R | 2 -- 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 man/local_cli_theme.Rd diff --git a/man/local_cli_theme.Rd b/man/local_cli_theme.Rd new file mode 100644 index 00000000..959204d1 --- /dev/null +++ b/man/local_cli_theme.Rd @@ -0,0 +1,17 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/support-test.R +\name{local_cli_theme} +\alias{local_cli_theme} +\title{Local function to remove extra spaces and format by cli} +\usage{ +local_cli_theme(.local_envir = parent.frame()) +} +\arguments{ +\item{`[environment(1)]`\cr}{Attach exit handlers to this environment. Typically, this should +be either the current environment or a parent frame +(accessed through parent.frame()).} +} +\description{ +Groups together multiple calls instead of being spread out in code +} +\keyword{internal} diff --git a/tests/testthat/test-length.R b/tests/testthat/test-length.R index 60147400..858477df 100644 --- a/tests/testthat/test-length.R +++ b/tests/testthat/test-length.R @@ -5,7 +5,6 @@ #' * Result of call will create `SASlength` attribute (`width` for each #' variable) - test_that("xportr_length: Accepts valid domain names in metadata object", { adsl <- minimal_table(30) metadata <- minimal_metadata(dataset = TRUE, length = TRUE, var_names = colnames(adsl)) diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index 43710bb7..6ed1e97f 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -46,7 +46,6 @@ test_that("xportr_type: NAs are handled as expected", { ) }) - test_that("xportr_type: Variable types are coerced as expected and can raise messages", { # Remove empty lines in cli theme local_cli_theme() @@ -168,7 +167,6 @@ test_that("xportr_type: Variables retain column attributes, besides class", { expect_equal(df_type_label, df_label_type) }) - test_that("xportr_type: expect error when domain is not a character", { df <- data.frame(x = 1, y = 2) df_meta <- data.frame( From 659afd3d86cc1ad899448b94338761772f644743 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Wed, 14 Jun 2023 18:13:38 +0200 Subject: [PATCH 276/337] fix: bugs with rebasing --- R/support-test.R | 9 ++++----- man/multiple_vars_in_spec_helper.Rd | 15 +++++++++++++++ man/multiple_vars_in_spec_helper2.Rd | 15 +++++++++++++++ 3 files changed, 34 insertions(+), 5 deletions(-) create mode 100644 man/multiple_vars_in_spec_helper.Rd create mode 100644 man/multiple_vars_in_spec_helper2.Rd diff --git a/R/support-test.R b/R/support-test.R index 07596639..0e615900 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -128,7 +128,7 @@ local_cli_theme <- function(.local_envir = parent.frame()) { } #' Test if multiple vars in spec will result in warning message -#' @noRd +#' @keywords internal #' @examples #' multiple_vars_in_spec_helper(xportr_order) multiple_vars_in_spec_helper <- function(FUN) { @@ -150,7 +150,7 @@ multiple_vars_in_spec_helper <- function(FUN) { withr::local_options(list(xportr.length_verbose = "message")) # Setup temporary options with active verbose and Remove empty lines in cli theme - local_cli() + local_cli_theme() adsl %>% FUN(metadata) %>% @@ -158,10 +158,9 @@ multiple_vars_in_spec_helper <- function(FUN) { } #' Test if multiple vars in spec with appropriate -#' @noRd +#' @keywords internal #' @examples #' multiple_vars_in_spec_helper2(xportr_order) -#' multiple_vars_in_spec_helper2 <- function(FUN) { adsl <- minimal_table(30) metadata <- minimal_metadata( @@ -181,7 +180,7 @@ multiple_vars_in_spec_helper2 <- function(FUN) { withr::local_options(list(xportr.length_verbose = "message", xportr.domain_name = "Dataset")) # Setup temporary options with active verbose and Remove empty lines in cli theme - local_cli() + local_cli_theme() adsl %>% FUN(metadata) %>% diff --git a/man/multiple_vars_in_spec_helper.Rd b/man/multiple_vars_in_spec_helper.Rd new file mode 100644 index 00000000..aaae58bc --- /dev/null +++ b/man/multiple_vars_in_spec_helper.Rd @@ -0,0 +1,15 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/support-test.R +\name{multiple_vars_in_spec_helper} +\alias{multiple_vars_in_spec_helper} +\title{Test if multiple vars in spec will result in warning message} +\usage{ +multiple_vars_in_spec_helper(FUN) +} +\description{ +Test if multiple vars in spec will result in warning message +} +\examples{ +multiple_vars_in_spec_helper(xportr_order) +} +\keyword{internal} diff --git a/man/multiple_vars_in_spec_helper2.Rd b/man/multiple_vars_in_spec_helper2.Rd new file mode 100644 index 00000000..082e5e5d --- /dev/null +++ b/man/multiple_vars_in_spec_helper2.Rd @@ -0,0 +1,15 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/support-test.R +\name{multiple_vars_in_spec_helper2} +\alias{multiple_vars_in_spec_helper2} +\title{Test if multiple vars in spec with appropriate} +\usage{ +multiple_vars_in_spec_helper2(FUN) +} +\description{ +Test if multiple vars in spec with appropriate +} +\examples{ +multiple_vars_in_spec_helper2(xportr_order) +} +\keyword{internal} From fcd53372a698cb0f95859af4597cf4e69b1cbd33 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Wed, 14 Jun 2023 17:32:03 +0000 Subject: [PATCH 277/337] chore: #84 spelling updates across package --- .Rbuildignore | 2 +- NEWS.md | 2 +- R/messages.R | 2 +- inst/WORDLIST | 22 ++++++++++++++++++---- vignettes/deepdive.Rmd | 12 ++++++------ vignettes/xportr.Rmd | 4 ++-- 6 files changed, 29 insertions(+), 15 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index 9aa284bd..eb76063e 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -23,4 +23,4 @@ ^advs_Define-Excel-Spec_match_admiral\.xlsx ^cran-comments\.md$ ^example_data_specs$ -^deepdive.Rmd$ + diff --git a/NEWS.md b/NEWS.md index 8f6f4b8f..203387c4 100644 --- a/NEWS.md +++ b/NEWS.md @@ -3,7 +3,7 @@ ## New Features and Bug Fixes * Fixed an issue where `xportr_type()` would overwrite column labels, widths, and "sas.formats" -* Fixed messaging of `xportr_order()`to give better visability of the number of variables being reordered. +* Fixed messaging of `xportr_order()`to give better visibility of the number of variables being reordered. * Add new argument to `xportr_write()` to allow users to specify how xpt validation checks are handled. * Fixed bug where character_types were case sensitive. They are now case insensitive. * Updated `xportr_type()` to make type coercion more explicit. diff --git a/R/messages.R b/R/messages.R index 8f77a157..ed41a376 100644 --- a/R/messages.R +++ b/R/messages.R @@ -91,7 +91,7 @@ type_log <- function(meta_ordered, type_mismatch_ind, verbose) { #' Utility for Lengths #' -#' @param miss_vars Variables missing from metatdata +#' @param miss_vars Variables missing from metadata #' @param verbose Provides additional messaging for user #' #' @return Output to Console diff --git a/inst/WORDLIST b/inst/WORDLIST index b4551288..494ba288 100644 --- a/inst/WORDLIST +++ b/inst/WORDLIST @@ -1,34 +1,48 @@ ADAE ADSL ADaM +AE Atorus +BMI CDISC CDSIC +Codelist +Completers +DCREASCD DM GSK JPT Lifecycle +MMSE ORCID +PHUSE Pharma Repostiory SASformat SASlength SAStype +SDSP SDTM +Standardisation +TRTDUR +Trt Vignesh +Vis XPT +acrf +adrg bootswatch chr cli +deliverables df +iso magrittr metacore -metatdata pre -sas +repo +sdrg validator validators -visability xportr's -xportr’s xpt diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 456aa282..ec3725c5 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -92,7 +92,7 @@ In this section, we are going to explore the 5 core `{xportr}` functions using: We will focus on warning and error messaging with contrived examples from these functions by manipulating either the datasets or the specification files. -**NOTE:** We have made the ADSL and Spec available in this package. Users can find additionl datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. This is to keep the package to a minimum size. +**NOTE:** We have made the ADSL and Spec available in this package. Users can find additional datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. This is to keep the package to a minimum size. ## Using `options()` and `xportr_metadata()` to enhance your experience. @@ -165,7 +165,7 @@ adsl %>% For the next six sections, we are going to explore the Warnings and Errors messages generated by the `{xportr}` core functions. To better explore these, we will either manipulate the ADaM dataset or specification file to help showcase the ability of the `{xportr}` functions to detect issues. -**NOTE:** We have made the ADSL, `adsl`, and Specificaion File, `var_spec`, available in this package. Users can find additional datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. We have not included these in our package to help keep the package to a minimum size. +**NOTE:** We have made the ADSL, `adsl`, and Specification File, `var_spec`, available in this package. Users can find additional datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. We have not included these in our package to help keep the package to a minimum size. ### Setting up our metadata object @@ -269,7 +269,7 @@ As you are creating your dataset in R you will often find that R removes the lab For this example, we are going to manipulate both the metadata and the `ADSL` dataset: -* The metatdata will have the variable `TRTSDT` label be greater than 40 characters. +* The metadata will have the variable `TRTSDT` label be greater than 40 characters. * The `ADSL` dataset will have all its labels stripped from it. Remember in the length example, the labels were on the original dataset as seen in the `str()` output. @@ -323,7 +323,7 @@ adsl_ord <- xportr_order(.df = adsl, metadata = var_spec, domain = "ADSL", verbo Readers are encouraged to inspect the dataset and metadata to see the past order and updated order after calling the function. Note the messaging from `xportr_order()`: * Variables not in the metadata are moved to the end -* Variables not in order are re-ordered and a message is printed out on which ones were re-rordered. +* Variables not in order are re-ordered and a message is printed out on which ones were re-ordered. ```{r, echo = TRUE, error = TRUE} @@ -350,7 +350,7 @@ Success! We have taken the metadata formats and applied them to the dataset. Ple str(adsl_fmt) ``` -At the time of `{xportr} v0.3.0` we have not impleneted any warnings or error messaging for this function. However, `xportr_write()` through `xpt_validate()` will check that formats have been applied for Date-Time variables. +At the time of `{xportr} v0.3.0` we have not implemented any warnings or error messaging for this function. However, `xportr_write()` through `xpt_validate()` will check that formats have been applied for Date-Time variables. ## `xportr_write()` @@ -401,4 +401,4 @@ adsl %>% ## Future Work -`{xportr}` is still undergoing development. We hope to produce more vignettes and functions that will allow users to bulk process multiple datasets as well as have examples of piping `xpt` files and related documenation to a validation software service. As always, please let us know of any feature requests, documentation updates or bugs on [our GitHub repo](https://github.com/Atorus-Research/xportr/issues). +`{xportr}` is still undergoing development. We hope to produce more vignettes and functions that will allow users to bulk process multiple datasets as well as have examples of piping `xpt` files and related documentation to a validation software service. As always, please let us know of any feature requests, documentation updates or bugs on [our GitHub repo](https://github.com/Atorus-Research/xportr/issues). diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 80c9355d..263df4d4 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -176,7 +176,7 @@ DT::datatable(adsl_order, options = list( # xportr_format() -Now we apply formats to the dataset. These will typically be `DATE9.`, `DATETIME20` or `TIME5`, but many others can be used. Notice that in the `ADSL` dataset there are 8 Date/Time variables and they are missing formts. Here we just take a peak at a few `TRT` variables, which have a `NULL` format. +Now we apply formats to the dataset. These will typically be `DATE9.`, `DATETIME20` or `TIME5`, but many others can be used. Notice that in the `ADSL` dataset there are 8 Date/Time variables and they are missing formats. Here we just take a peak at a few `TRT` variables, which have a `NULL` format. ```{r} attr(adsl$TRTSDT, "format.sas") @@ -185,7 +185,7 @@ attr(adsl$TRTSDTM, "format.sas") attr(adsl$TRTEDTM, "format.sas") ``` -Using our `xportr_format()` we can cpply our formats to the dataset. +Using our `xportr_format()` we can apply our formats to the dataset. ```{r} adsl_fmt <- adsl %>% xportr_format(var_spec, domain = "ADSL", "message") From 93800fca9f9fca91bb5875dbe1486f6ea825bea0 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Wed, 14 Jun 2023 13:40:59 -0400 Subject: [PATCH 278/337] Update vignettes/deepdive.Rmd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: AndrĂ© VerĂ­ssimo <211358+averissimo@users.noreply.github.com> --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index ec3725c5..63e8aa49 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -80,7 +80,7 @@ The `xpt` Version 5 files form the backbone of any successful Submission and are Each of the core `{xportr}` functions for applying labels, types, formats, order and lengths provides feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called to create the `xpt`. `xportr_write()` calls [`xpt_validate()`](https://github.com/atorus-research/xportr/blob/231e959b84aa0f1e71113c85332de33a827e650a/R/utils-xportr.R#L174), which is a behind the scenes/non-exported function that does a final check for compliance. At the time of `{xportr} v0.3.0` we are checking the following when a user writes out an `xpt` file.: -validate +validate # {xportr} in action From a81cf50243ff28d5314c9c87d1f83c5bedfb41ee Mon Sep 17 00:00:00 2001 From: bs832471 Date: Wed, 14 Jun 2023 17:41:46 +0000 Subject: [PATCH 279/337] review: #84 comments from PR review --- DESCRIPTION | 2 +- man/length_log.Rd | 2 +- vignettes/deepdive.Rmd | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index ae112e4e..75421e2d 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -82,4 +82,4 @@ Suggests: Config/testthat/edition: 3 VignetteBuilder: knitr Depends: - R (>= 2.10) + R (>= 3.5) diff --git a/man/length_log.Rd b/man/length_log.Rd index 8bbc1d63..8b550292 100644 --- a/man/length_log.Rd +++ b/man/length_log.Rd @@ -7,7 +7,7 @@ length_log(miss_vars, verbose) } \arguments{ -\item{miss_vars}{Variables missing from metatdata} +\item{miss_vars}{Variables missing from metadata} \item{verbose}{Provides additional messaging for user} } diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index ec3725c5..d2fd6fe4 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -165,7 +165,7 @@ adsl %>% For the next six sections, we are going to explore the Warnings and Errors messages generated by the `{xportr}` core functions. To better explore these, we will either manipulate the ADaM dataset or specification file to help showcase the ability of the `{xportr}` functions to detect issues. -**NOTE:** We have made the ADSL, `adsl`, and Specification File, `var_spec`, available in this package. Users can find additional datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. We have not included these in our package to help keep the package to a minimum size. +**NOTE:** We have made the ADSL, `xportr::adsl`, and Specification File, `xportr::var_spec`, available in this package. Users can find additional datasets and specification files on our [repo](https://github.com/atorus-research/xportr) in the `example_data_specs` folder. ### Setting up our metadata object From f9f441b4dcb695708081eed9f1549ecd59acd1eb Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Wed, 14 Jun 2023 13:43:05 -0400 Subject: [PATCH 280/337] Update vignettes/deepdive.Rmd MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: AndrĂ© VerĂ­ssimo <211358+averissimo@users.noreply.github.com> --- vignettes/deepdive.Rmd | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 63e8aa49..1f98882b 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -185,15 +185,20 @@ columns2hide <- c( ) datatable( - var_spec, + var_spec %>% select(-all_of(columns2hide)), rownames = FALSE, filter = "top", options = list( dom = "Bfrtip", - columnDefs = list(list(visible = FALSE, targets = columns2hide)) + columnDefs = list( + list(width = "10px", targets = c("order", "length", "format", "type", "dataset", "variable")), + list(className = "text-left", targets = c("label")) + ), + searching = FALSE, + autoWidth = TRUE ) ) %>% - formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%") + formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%", textAlign = "center") ``` ## `xportr_type()` From b157bebb978eece28ddec6fccc7ce48101d03f92 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Wed, 14 Jun 2023 17:43:33 +0000 Subject: [PATCH 281/337] docs: #84 css update for DT --- vignettes/deepdive.Rmd | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index cccc70dd..d68518ae 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -38,6 +38,14 @@ local({ }) ``` +```{css, echo=FALSE} +# Used to control DT outputs + +.text-left { + text-align: left; +} +``` + # Introduction This vignette will explore in detail all the possibilities of the `{xportr}` package for applying information from a metadata object to an R created dataset using the core `{xportr}` functions. From 3625e5f7ff345e7f85f8dd963e69714b24d94b3e Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 14 Jun 2023 20:03:46 +0000 Subject: [PATCH 282/337] Update package options documentation --- R/xportr-package.R | 92 +++++++++++++++++++++++++++++++++++++++++++++- R/zzz.R | 1 - 2 files changed, 91 insertions(+), 2 deletions(-) diff --git a/R/xportr-package.R b/R/xportr-package.R index 8efbbf5b..a60955cb 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -1,6 +1,96 @@ #' The `xportr` package #' -#' Package Info here +#' `xportr` is designed to be a clinical workflow friendly method for outputting +#' CDISC complaint data sets in R, to XPT version 5 files. It was designed with +#' options in mind to allow for flexible setting of options while allowing +#' projects and system administrators to set sensible defaults for their +#' orginziations workflows. Below are a list of options that can be set to +#' customize how `xportr` works in your environment. +#' +#' @section xportr options: +#' +#' \itemize{ +#' \item{ +#' xportr.df_domain_name - The name of the domain "name" column in dataset +#' metadata. Default: "dataset" +#' } +#' \item { +#' xportr.df_label - The column noting the dataset label in dataset metadata. +#' Default: "label" +#' } +#' \item{ +#' xportr.domain_name - The name of the domain "name" column in variable +#' metadata. Default: "dataset" +#' } +#' \item{ +#' xportr.variable_name - The name of the variable "name" in variable +#' metadata. Default: "variable" +#' } +#' \item{ +#' xportr.type_name - The name of the variable type column in variable +#' metadata. Default: "type" +#' } +#' \item{ +#' xportr.label - The name of the variable label column in variable metadata. +#' Default: "label" +#' } +#' \item{ +#' xportr.length - The name of the variable length column in variable +#' metadata. Default: "length" +#' } +#' \item{ +#' xportr.format_name - The name of the variable format column in variable +#' metadata. Default: "format" +#' } +#' \item{ +#' xportr.order_name - The name of the variable order column in variable +#' metadata. Default: "order" +#' } +#' \item{ +#' xportr.format_verbose - The default argument for the 'verbose' argument for +#' `xportr_format`. Default: "none" +#' } +#' \item{ +#' xportr.label_verbose - The default argument for the 'verbose' argument for +#' `xportr_label`. Default: "none" +#' } +#' \item{ +#' xportr.length_verbose - The default argument for the 'verbose' argument for +#' `xportr_length`. Default: "none" +#' } +#' \item{ +#' xportr.type_verbose - The default argument for the 'verbose' argument for +#' `xportr_type`. Default: "none" +#' } +#' \item{ +#' xportr.character_types - The default character vector used to explicitly +#' coerce R classes to character XPT types. Default: c("character", "char", +#' "text", "date", "posixct", "posixt", "datetime", "time", "partialdate", +#' "partialtime", "partialdatetime", "incompletedatetime", "durationdatetime", +#' "intervaldatetime") +#' } +#' \item{ +#' xportr.numeric_types - The default character vector used to explicitly +#' coerce R classes to numeric XPT types. Default: c("integer", "numeric", +#' "num", "float") +#' } +#' } +#' +#' @section Updating Options: +#' \itemize{ +#' \item{For a single session, an option can be changed by +#' `option( = )`} +#' \item{To change an option for a single projects across sessions in that +#' projects, place the options update in the `.Rprofile` in that project +#' directory.} +#' \item{To change an option for a user across all sessions, place the options +#' update in the `.Rprofile` file in the users home directory.} +#' \item{To change an option for all users in an R environment, place the +#' options update in the `.Rprofile.site` file in the R home directory.} +#' } +#' +#' See [Managing R with .Rprofile, .Renviron, Rprofile.site, Renviron.site, rsession.conf, and repos.conf](https://support.posit.co/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-conf) +#' #' #' @keywords internal #' diff --git a/R/zzz.R b/R/zzz.R index ef71ea87..88b877b5 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -3,7 +3,6 @@ op.devtools <- list( xportr.df_domain_name = "dataset", xportr.df_label = "label", - xportr.coerse = "none", xportr.domain_name = "dataset", xportr.variable_name = "variable", xportr.type_name = "type", From 4dd07c92d351bc2a32dea8df555bb97271c2b598 Mon Sep 17 00:00:00 2001 From: elimillera Date: Wed, 14 Jun 2023 20:42:31 +0000 Subject: [PATCH 283/337] Update function docs and passing R cmd check --- R/df_label.R | 21 ++++---- R/format.R | 29 +++++------ R/label.R | 44 ++++++++-------- R/length.R | 51 ++++++++++--------- R/order.R | 57 ++++++++++----------- R/type.R | 65 +++++++++++++----------- R/xportr-package.R | 2 +- man/xportr-package.Rd | 95 ++++++++++++++++++++++++++++++++++- man/xportr_df_label.Rd | 13 +++-- man/xportr_format.Rd | 23 +++++---- man/xportr_label.Rd | 32 ++++++------ man/xportr_length.Rd | 33 ++++++------ man/xportr_order.Rd | 49 +++++++++--------- man/xportr_type.Rd | 49 ++++++++++-------- tests/testthat/test-options.R | 1 - vignettes/xportr.Rmd | 2 +- 16 files changed, 337 insertions(+), 229 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index 410069af..8b81cc9c 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -1,24 +1,23 @@ #' Assign Dataset Label #' #' Assigns dataset label from a dataset level metadata to a given data frame. +#' This is stored in the 'label' attribute of the dataframe. #' #' @inheritParams xportr_length #' #' @return Data frame with label attributes. #' -#' @section Metadata: -#' The argument passed in the 'metadata' argument can either be a metacore -#' object, or a data.frame containing the data listed below. If metacore is -#' used, no changes to options are required. +#' @section Metadata: The argument passed in the 'metadata' argument can either +#' be a metacore object, or a data.frame containing the data listed below. If +#' metacore is used, no changes to options are required. #' -#' For data.frame 'metadata' arguments two columns must be present: +#' For data.frame 'metadata' arguments two columns must be present: #' -#' 1) Domain Name - passed as the 'xportr.df_domain_name' option. Default: -#' "dataset". This is the column subset by the 'domain' argument in the -#' function. -#' 2) Label Name - passed as the 'xportr.df_label' option. Default: -#' "format". Character values to update the 'format.sas' attribute of the -#' dataframe This is passed to `haven::write` to note the label. +#' 1) Domain Name - passed as the 'xportr.df_domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. 2) Label Name - passed as the 'xportr.df_label' option. Default: +#' "format". Character values to update the 'format.sas' attribute of the +#' dataframe This is passed to `haven::write_xpt` to note the label. #' #' @export #' diff --git a/R/format.R b/R/format.R index 37838356..e8390ab1 100644 --- a/R/format.R +++ b/R/format.R @@ -1,26 +1,27 @@ #' Assign SAS Format #' -#' Assigns a SAS format from a variable level metadata to a given data frame. +#' Assigns a SAS format from a variable level metadata to a given data frame. If +#' no format is found for a given variable, it is set as an empty character +#' vector. This is stored in the format.sas attribute. #' #' @inheritParams xportr_length #' #' @return Data frame with `SASformat` attributes for each variable. #' -#' @section Metadata: -#' The argument passed in the 'metadata' argument can either be a metacore -#' object, or a data.frame containing the data listed below. If metacore is -#' used, no changes to options are required. +#' @section Metadata: The argument passed in the 'metadata' argument can either +#' be a metacore object, or a data.frame containing the data listed below. If +#' metacore is used, no changes to options are required. #' -#' For data.frame 'metadata' arguments three columns must be present: +#' For data.frame 'metadata' arguments three columns must be present: #' -#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: -#' "dataset". This is the column subset by the 'domain' argument in the -#' function. -#' 2) Format Name - passed as the 'xportr.format_name' option. Default: -#' "format". Character values to update the 'format.sas' attribute of the -#' column. This is passed to `haven::write` to note the format. -#' 3) Variable Name - passed as the 'xportr.variable_name' option. Default: -#' "variable". This is used to match columns in '.df' argument and the metadata. +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. 2) Format Name - passed as the 'xportr.format_name' option. +#' Default: "format". Character values to update the 'format.sas' attribute of +#' the column. This is passed to `haven::write` to note the format. 3) +#' Variable Name - passed as the 'xportr.variable_name' option. Default: +#' "variable". This is used to match columns in '.df' argument and the +#' metadata. #' #' @export #' diff --git a/R/label.R b/R/label.R index 2c4167c7..612c6947 100644 --- a/R/label.R +++ b/R/label.R @@ -1,34 +1,36 @@ #' Assign Variable Label #' #' Assigns variable label from a variable level metadata to a given data frame. +#' This function will give an error if a label is presented that is greater than +#' 40 characters which isn't allowed in XPT v5. If labels aren't present for the +#' variable it will be assigned an empty character value. Labels are stored in +#' the 'label' attribute of the column. #' #' @inheritParams xportr_length #' -#' @section Messaging: -#' `label_log` is the primary messaging tool for `xportr_label`. If there are -#' any columns present in the '.df' that are not noted in the metadata, they -#' cannot be assigned a label and a message will be generated noting the number -#' or variables that have not been assigned a label. +#' @section Messaging: `label_log` is the primary messaging tool for +#' `xportr_label`. If there are any columns present in the '.df' that are not +#' noted in the metadata, they cannot be assigned a label and a message will +#' be generated noting the number or variables that have not been assigned a +#' label. #' -#' If variables were not found in the metadata and the value passed to the -#' 'verbose' argument is 'stop', 'warn', or 'message', a message will be -#' generated detailing the variables that were missing in metadata. +#' If variables were not found in the metadata and the value passed to the +#' 'verbose' argument is 'stop', 'warn', or 'message', a message will be +#' generated detailing the variables that were missing in metadata. #' -#' @section Metadata: -#' The argument passed in the 'metadata' argument can either be a metacore -#' object, or a data.frame containing the data listed below. If metacore is -#' used, no changes to options are required. +#' @section Metadata: The argument passed in the 'metadata' argument can either +#' be a metacore object, or a data.frame containing the data listed below. If +#' metacore is used, no changes to options are required. #' -#' For data.frame 'metadata' arguments three columns must be present: +#' For data.frame 'metadata' arguments three columns must be present: #' -#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: -#' "dataset". This is the column subset by the 'domain' argument in the -#' function. -#' 2) Variable Name - passed as the 'xportr.variable_name' option. Default: -#' "variable". This is used to match columns in '.df' argument and the metadata. -#' 3) Variable Label - passed as the 'xportr.label' option. Default: "label". -#' These character values to update the 'label' attribute of the column. This is -#' passed to `haven::write` to note the label. +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. 2) Variable Name - passed as the 'xportr.variable_name' option. +#' Default: "variable". This is used to match columns in '.df' argument and +#' the metadata. 3) Variable Label - passed as the 'xportr.label' option. +#' Default: "label". These character values to update the 'label' attribute of +#' the column. This is passed to `haven::write` to note the label. #' #' #' @return Data frame with label attributes for each variable. diff --git a/R/length.R b/R/length.R index 73be5db6..eeedaa78 100644 --- a/R/length.R +++ b/R/length.R @@ -1,44 +1,45 @@ #' Assign SAS Length #' -#' Assigns SAS length from a variable level metadata to a given data frame. +#' Assigns SAS length from a variable level metadata to a given data frame. If a +#' length isn't present for a variable the length value is set to 200 for +#' character columns, and 8 for non-character columns. This value is stored in +#' the 'width' attribute of the column. #' #' @param .df A data frame of CDISC standard. #' @param metadata A data frame containing dataset/variable level metadata. See -#' 'Metadata' section for details. +#' 'Metadata' section for details. #' @param domain Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset #' the metadata object. If none is passed, then name of the dataset passed as -#' .df will be used. +#' .df will be used. #' @param verbose The action this function takes when an action is taken on the #' dataset or function validation finds an issue. See 'Messaging' section for #' details. Options are 'stop', 'warn', 'message', and 'none' #' @param metacore `r lifecycle::badge("deprecated")` Previously used to pass -#' metadata now renamed with `metadata` +#' metadata now renamed with `metadata` #' -#' @section Messaging: -#' `length_log` is the primary messaging tool for `xportr_length`. If there are -#' any columns present in the '.df' that are not noted in the metadata, they -#' cannot be assigned a length and a message will be generated noting the number -#' or variables that have not been assigned a length. +#' @section Messaging: `length_log` is the primary messaging tool for +#' `xportr_length`. If there are any columns present in the '.df' that are not +#' noted in the metadata, they cannot be assigned a length and a message will +#' be generated noting the number or variables that have not been assigned a +#' length. #' -#' If variables were not found in the metadata and the value passed to the -#' 'verbose' argument is 'stop', 'warn', or 'message', a message will be -#' generated detailing the variables that were missing in metadata. +#' If variables were not found in the metadata and the value passed to the +#' 'verbose' argument is 'stop', 'warn', or 'message', a message will be +#' generated detailing the variables that were missing in metadata. #' -#' @section Metadata: -#' The argument passed in the 'metadata' argument can either be a metacore -#' object, or a data.frame containing the data listed below. If metacore is -#' used, no changes to options are required. +#' @section Metadata: The argument passed in the 'metadata' argument can either +#' be a metacore object, or a data.frame containing the data listed below. If +#' metacore is used, no changes to options are required. #' -#' For data.frame 'metadata' arguments three columns must be present: +#' For data.frame 'metadata' arguments three columns must be present: #' -#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: -#' "dataset". This is the column subset by the 'domain' argument in the -#' function. -#' 2) Variable Name - passed as the 'xportr.variable_name' option. Default: -#' "variable". This is used to match columns in '.df' argument and the metadata. -#' 3) Variable Label - passed as the 'xportr.length' option. Default: "length". -#' These numeric values to update the 'width' attribute of the column. This is -#' passed to `haven::write` to note the variable length. +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. 2) Variable Name - passed as the 'xportr.variable_name' option. +#' Default: "variable". This is used to match columns in '.df' argument and +#' the metadata. 3) Variable Label - passed as the 'xportr.length' option. +#' Default: "length". These numeric values to update the 'width' attribute of +#' the column. This is passed to `haven::write` to note the variable length. #' #' #' @return Data frame with `SASlength` attributes for each variable. diff --git a/R/order.R b/R/order.R index e4c1b817..e52d4b84 100644 --- a/R/order.R +++ b/R/order.R @@ -1,41 +1,42 @@ #' Order variables of a dataset according to Spec #' +#' The `dplyr::arange` function is used to order the columns of the dataframe. +#' Any variables that are missing an order value are appended to the dataframe +#' after all of the variables that have an order. +#' #' @inheritParams xportr_length #' #' @export #' -#' @section Messaging: -#' `var_ord_msg` is the primary messaging tool for `xportr_order`. There are two -#' primary messages that are output from `var_ord_msg`. The first is the "moved" -#' variables. These are the variables that were not found in the metadata file -#' and moved to the end of the dataset. A message will be generated noting the -#' number, if any, of variables that were moved to the end of the dataset. If -#' any variables were moved, and the 'verbose' argument is 'stop', 'warn', or -#' 'message', a message will be generated detailing the variables that were -#' moved. +#' @section Messaging: `var_ord_msg` is the primary messaging tool for +#' `xportr_order`. There are two primary messages that are output from +#' `var_ord_msg`. The first is the "moved" variables. These are the variables +#' that were not found in the metadata file and moved to the end of the +#' dataset. A message will be generated noting the number, if any, of +#' variables that were moved to the end of the dataset. If any variables were +#' moved, and the 'verbose' argument is 'stop', 'warn', or 'message', a +#' message will be generated detailing the variables that were moved. #' -#' The second primary message is the number of variables that were in the -#' dataset, but not in the correct order. A message will be generated noting the -#' number, if any, of variables that have been reordered. If any variables were -#' reordered, and the 'verbose' argument is 'stop', 'warn', or 'message', a -#' message will be generated detailing the variables that were reordered. +#' The second primary message is the number of variables that were in the +#' dataset, but not in the correct order. A message will be generated noting +#' the number, if any, of variables that have been reordered. If any variables +#' were reordered, and the 'verbose' argument is 'stop', 'warn', or 'message', +#' a message will be generated detailing the variables that were reordered. #' -#' @section Metadata: -#' The argument passed in the 'metadata' argument can either be a metacore -#' object, or a data.frame containing the data listed below. If metacore is -#' used, no changes to options are required. +#' @section Metadata: The argument passed in the 'metadata' argument can either +#' be a metacore object, or a data.frame containing the data listed below. If +#' metacore is used, no changes to options are required. #' -#' For data.frame 'metadata' arguments three columns must be present: +#' For data.frame 'metadata' arguments three columns must be present: #' -#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: -#' "dataset". This is the column subset by the 'domain' argument in the -#' function. -#' 2) Variable Name - passed as the 'xportr.variable_name' option. Default: -#' "variable". This is used to match columns in '.df' argument and the metadata. -#' 3) Variable Order - passed as the 'xportr.order_name' option. Default: "order". -#' These values used to arrange the order of the variables. If the values of -#' order metadata are not numeric, they will be corsersed to prevent -#' alphabetical sorting of numberic values. +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. 2) Variable Name - passed as the 'xportr.variable_name' option. +#' Default: "variable". This is used to match columns in '.df' argument and +#' the metadata. 3) Variable Order - passed as the 'xportr.order_name' option. +#' Default: "order". These values used to arrange the order of the variables. +#' If the values of order metadata are not numeric, they will be corsersed to +#' prevent alphabetical sorting of numberic values. #' #' @return Dataframe that has been re-ordered according to spec #' diff --git a/R/type.R b/R/type.R index 7502e5bc..7ce6ffbe 100644 --- a/R/type.R +++ b/R/type.R @@ -1,46 +1,51 @@ #' Coerce variable type #' -#' Current assumptions: -#' columns_meta is a data.frame with names "Variables", "Type" +#' XPT v5 datasets only have data types of character and numeric. `xportr_type` +#' attempts to collapse R classes to those two XPT types. The +#' 'xportr.character_types' option is used to explicitly collapse the class of a +#' column to character using `as.character`. Similarly, 'xportr.numeric_types' +#' will collapse a column to a numeric type. If no type is passed for a +#' variable, it is assumed to be numeric and coerced with `as.numeric`. #' #' @inheritParams xportr_length #' -#' @section Messaging: -#' `type_log` is the primary messaging tool for `xportr_type`. The number of -#' column types that mismatch the reported type in the metadata, if any, is -#' reported by by `xportr_type`. If there are any type mismatches, and the -#' 'verbose' argument is 'stop', 'warn', or 'message', the type mismatches will -#' be detailed the actual type and the type reported in the metadata. +#' @section Messaging: `type_log` is the primary messaging tool for +#' `xportr_type`. The number of column types that mismatch the reported type +#' in the metadata, if any, is reported by by `xportr_type`. If there are any +#' type mismatches, and the 'verbose' argument is 'stop', 'warn', or +#' 'message', the type mismatches will be detailed the actual type and the +#' type reported in the metadata. #' -#' @section Metadata: -#' The argument passed in the 'metadata' argument can either be a metacore -#' object, or a data.frame containing the data listed below. If metacore is -#' used, no changes to options are required. +#' @section Metadata: The argument passed in the 'metadata' argument can either +#' be a metacore object, or a data.frame containing the data listed below. If +#' metacore is used, no changes to options are required. #' -#' For data.frame 'metadata' arguments three columns must be present: +#' For data.frame 'metadata' arguments three columns must be present: #' -#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: -#' "dataset". This is the column subset by the 'domain' argument in the -#' function. +#' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: +#' "dataset". This is the column subset by the 'domain' argument in the +#' function. #' -#' 2) Format Name - passed as the 'xportr.format_name' option. Default: -#' "format". Character values to update the 'format.sas' attribute of the -#' column. This is passed to `haven::write` to note the format. +#' 2) Format Name - passed as the 'xportr.format_name' option. Default: +#' "format". Character values to update the 'format.sas' attribute of the +#' column. This is passed to `haven::write` to note the format. #' -#' 3) Variable Name - passed as the 'xportr.variable_name' option. Default: -#' "variable". This is used to match columns in '.df' argument and the metadata. +#' 3) Variable Name - passed as the 'xportr.variable_name' option. Default: +#' "variable". This is used to match columns in '.df' argument and the +#' metadata. #' -#' 4) Variable Type - passed as the 'xportr.type_name'. Default: "type". This is -#' used to note the XPT variable "type" options are numeric or character. +#' 4) Variable Type - passed as the 'xportr.type_name'. Default: "type". This +#' is used to note the XPT variable "type" options are numeric or character. #' -#' 5) Character Types - The list of classes that should be explicitly coerced to -#' a XPT Character type. Default: c( "character", "char", "text", "date", -#' "posixct", "posixt", "datetime", "time", "partialdate", "partialtime", -#' "partialdatetime", "incompletedatetime", "durationdatetime", -#' "intervaldatetime") +#' 5) (Option only) Character Types - The list of classes that should be +#' explicitly coerced to a XPT Character type. Default: c( "character", +#' "char", "text", "date", "posixct", "posixt", "datetime", "time", +#' "partialdate", "partialtime", "partialdatetime", "incompletedatetime", +#' "durationdatetime", "intervaldatetime") #' -#' 6) Numeric Types - The list of classes that should be explicitly coerced to a -#' XPT numeric type. Default: c("integer", "numeric", "num", "float") +#' 6) (Option only) Numeric Types - The list of classes that should be +#' explicitly coerced to a XPT numeric type. Default: c("integer", "numeric", +#' "num", "float") #' #' @return Returns the modified table. #' @export diff --git a/R/xportr-package.R b/R/xportr-package.R index a60955cb..250c4683 100644 --- a/R/xportr-package.R +++ b/R/xportr-package.R @@ -89,7 +89,7 @@ #' options update in the `.Rprofile.site` file in the R home directory.} #' } #' -#' See [Managing R with .Rprofile, .Renviron, Rprofile.site, Renviron.site, rsession.conf, and repos.conf](https://support.posit.co/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-conf) +#' See [Managing R with .Rprofile, .Renviron, Rprofile.site, Renviron.site, rsession.conf, and repos.conf](https://support.posit.co/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-conf) # nolint #' #' #' @keywords internal diff --git a/man/xportr-package.Rd b/man/xportr-package.Rd index 5fd18f2e..cf9ff450 100644 --- a/man/xportr-package.Rd +++ b/man/xportr-package.Rd @@ -6,8 +6,101 @@ \alias{xportr-package} \title{The \code{xportr} package} \description{ -Package Info here +\code{xportr} is designed to be a clinical workflow friendly method for outputting +CDISC complaint data sets in R, to XPT version 5 files. It was designed with +options in mind to allow for flexible setting of options while allowing +projects and system administrators to set sensible defaults for their +orginziations workflows. Below are a list of options that can be set to +customize how \code{xportr} works in your environment. } +\section{xportr options}{ + + +\itemize{ +\item{ +xportr.df_domain_name - The name of the domain "name" column in dataset +metadata. Default: "dataset" +} +\item { +xportr.df_label - The column noting the dataset label in dataset metadata. +Default: "label" +} +\item{ +xportr.domain_name - The name of the domain "name" column in variable +metadata. Default: "dataset" +} +\item{ +xportr.variable_name - The name of the variable "name" in variable +metadata. Default: "variable" +} +\item{ +xportr.type_name - The name of the variable type column in variable +metadata. Default: "type" +} +\item{ +xportr.label - The name of the variable label column in variable metadata. +Default: "label" +} +\item{ +xportr.length - The name of the variable length column in variable +metadata. Default: "length" +} +\item{ +xportr.format_name - The name of the variable format column in variable +metadata. Default: "format" +} +\item{ +xportr.order_name - The name of the variable order column in variable +metadata. Default: "order" +} +\item{ +xportr.format_verbose - The default argument for the 'verbose' argument for +\code{xportr_format}. Default: "none" +} +\item{ +xportr.label_verbose - The default argument for the 'verbose' argument for +\code{xportr_label}. Default: "none" +} +\item{ +xportr.length_verbose - The default argument for the 'verbose' argument for +\code{xportr_length}. Default: "none" +} +\item{ +xportr.type_verbose - The default argument for the 'verbose' argument for +\code{xportr_type}. Default: "none" +} +\item{ +xportr.character_types - The default character vector used to explicitly +coerce R classes to character XPT types. Default: c("character", "char", +"text", "date", "posixct", "posixt", "datetime", "time", "partialdate", +"partialtime", "partialdatetime", "incompletedatetime", "durationdatetime", +"intervaldatetime") +} +\item{ +xportr.numeric_types - The default character vector used to explicitly +coerce R classes to numeric XPT types. Default: c("integer", "numeric", +"num", "float") +} +} +} + +\section{Updating Options}{ + +\itemize{ +\item{For a single session, an option can be changed by +\verb{option( = )}} +\item{To change an option for a single projects across sessions in that +projects, place the options update in the \code{.Rprofile} in that project +directory.} +\item{To change an option for a user across all sessions, place the options +update in the \code{.Rprofile} file in the users home directory.} +\item{To change an option for all users in an R environment, place the +options update in the \code{.Rprofile.site} file in the R home directory.} +} + +See \href{https://support.posit.co/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-conf}{Managing R with .Rprofile, .Renviron, Rprofile.site, Renviron.site, rsession.conf, and repos.conf} # nolint +} + \seealso{ Useful links: \itemize{ diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index 7419cec4..f5e724b6 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -24,21 +24,20 @@ Data frame with label attributes. } \description{ Assigns dataset label from a dataset level metadata to a given data frame. +This is stored in the 'label' attribute of the dataframe. } \section{Metadata}{ - -The argument passed in the 'metadata' argument can either be a metacore -object, or a data.frame containing the data listed below. If metacore is -used, no changes to options are required. + The argument passed in the 'metadata' argument can either +be a metacore object, or a data.frame containing the data listed below. If +metacore is used, no changes to options are required. For data.frame 'metadata' arguments two columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.df_domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. -\item Label Name - passed as the 'xportr.df_label' option. Default: +function. 2) Label Name - passed as the 'xportr.df_label' option. Default: "format". Character values to update the 'format.sas' attribute of the -dataframe This is passed to \code{haven::write} to note the label. +dataframe This is passed to \code{haven::write_xpt} to note the label. } } diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index eed66d2b..2cae79f6 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -23,24 +23,25 @@ metadata now renamed with \code{metadata}} Data frame with \code{SASformat} attributes for each variable. } \description{ -Assigns a SAS format from a variable level metadata to a given data frame. +Assigns a SAS format from a variable level metadata to a given data frame. If +no format is found for a given variable, it is set as an empty character +vector. This is stored in the format.sas attribute. } \section{Metadata}{ - -The argument passed in the 'metadata' argument can either be a metacore -object, or a data.frame containing the data listed below. If metacore is -used, no changes to options are required. + The argument passed in the 'metadata' argument can either +be a metacore object, or a data.frame containing the data listed below. If +metacore is used, no changes to options are required. For data.frame 'metadata' arguments three columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. -\item Format Name - passed as the 'xportr.format_name' option. Default: -"format". Character values to update the 'format.sas' attribute of the -column. This is passed to \code{haven::write} to note the format. -\item Variable Name - passed as the 'xportr.variable_name' option. Default: -"variable". This is used to match columns in '.df' argument and the metadata. +function. 2) Format Name - passed as the 'xportr.format_name' option. +Default: "format". Character values to update the 'format.sas' attribute of +the column. This is passed to \code{haven::write} to note the format. 3) +Variable Name - passed as the 'xportr.variable_name' option. Default: +"variable". This is used to match columns in '.df' argument and the +metadata. } } diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index e6c4fc2e..c24b44cb 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -34,13 +34,17 @@ Data frame with label attributes for each variable. } \description{ Assigns variable label from a variable level metadata to a given data frame. +This function will give an error if a label is presented that is greater than +40 characters which isn't allowed in XPT v5. If labels aren't present for the +variable it will be assigned an empty character value. Labels are stored in +the 'label' attribute of the column. } \section{Messaging}{ - -\code{label_log} is the primary messaging tool for \code{xportr_label}. If there are -any columns present in the '.df' that are not noted in the metadata, they -cannot be assigned a label and a message will be generated noting the number -or variables that have not been assigned a label. + \code{label_log} is the primary messaging tool for +\code{xportr_label}. If there are any columns present in the '.df' that are not +noted in the metadata, they cannot be assigned a label and a message will +be generated noting the number or variables that have not been assigned a +label. If variables were not found in the metadata and the value passed to the 'verbose' argument is 'stop', 'warn', or 'message', a message will be @@ -48,21 +52,19 @@ generated detailing the variables that were missing in metadata. } \section{Metadata}{ - -The argument passed in the 'metadata' argument can either be a metacore -object, or a data.frame containing the data listed below. If metacore is -used, no changes to options are required. + The argument passed in the 'metadata' argument can either +be a metacore object, or a data.frame containing the data listed below. If +metacore is used, no changes to options are required. For data.frame 'metadata' arguments three columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. -\item Variable Name - passed as the 'xportr.variable_name' option. Default: -"variable". This is used to match columns in '.df' argument and the metadata. -\item Variable Label - passed as the 'xportr.label' option. Default: "label". -These character values to update the 'label' attribute of the column. This is -passed to \code{haven::write} to note the label. +function. 2) Variable Name - passed as the 'xportr.variable_name' option. +Default: "variable". This is used to match columns in '.df' argument and +the metadata. 3) Variable Label - passed as the 'xportr.label' option. +Default: "label". These character values to update the 'label' attribute of +the column. This is passed to \code{haven::write} to note the label. } } diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index 5e1b5d1b..ca4c7d8d 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -33,14 +33,17 @@ metadata now renamed with \code{metadata}} Data frame with \code{SASlength} attributes for each variable. } \description{ -Assigns SAS length from a variable level metadata to a given data frame. +Assigns SAS length from a variable level metadata to a given data frame. If a +length isn't present for a variable the length value is set to 200 for +character columns, and 8 for non-character columns. This value is stored in +the 'width' attribute of the column. } \section{Messaging}{ - -\code{length_log} is the primary messaging tool for \code{xportr_length}. If there are -any columns present in the '.df' that are not noted in the metadata, they -cannot be assigned a length and a message will be generated noting the number -or variables that have not been assigned a length. + \code{length_log} is the primary messaging tool for +\code{xportr_length}. If there are any columns present in the '.df' that are not +noted in the metadata, they cannot be assigned a length and a message will +be generated noting the number or variables that have not been assigned a +length. If variables were not found in the metadata and the value passed to the 'verbose' argument is 'stop', 'warn', or 'message', a message will be @@ -48,21 +51,19 @@ generated detailing the variables that were missing in metadata. } \section{Metadata}{ - -The argument passed in the 'metadata' argument can either be a metacore -object, or a data.frame containing the data listed below. If metacore is -used, no changes to options are required. + The argument passed in the 'metadata' argument can either +be a metacore object, or a data.frame containing the data listed below. If +metacore is used, no changes to options are required. For data.frame 'metadata' arguments three columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. -\item Variable Name - passed as the 'xportr.variable_name' option. Default: -"variable". This is used to match columns in '.df' argument and the metadata. -\item Variable Label - passed as the 'xportr.length' option. Default: "length". -These numeric values to update the 'width' attribute of the column. This is -passed to \code{haven::write} to note the variable length. +function. 2) Variable Name - passed as the 'xportr.variable_name' option. +Default: "variable". This is used to match columns in '.df' argument and +the metadata. 3) Variable Label - passed as the 'xportr.length' option. +Default: "length". These numeric values to update the 'width' attribute of +the column. This is passed to \code{haven::write} to note the variable length. } } diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index 042b675b..1c1f9899 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -33,43 +33,42 @@ metadata now renamed with \code{metadata}} Dataframe that has been re-ordered according to spec } \description{ -Order variables of a dataset according to Spec +The \code{dplyr::arange} function is used to order the columns of the dataframe. +Any variables that are missing an order value are appended to the dataframe +after all of the variables that have an order. } \section{Messaging}{ - -\code{var_ord_msg} is the primary messaging tool for \code{xportr_order}. There are two -primary messages that are output from \code{var_ord_msg}. The first is the "moved" -variables. These are the variables that were not found in the metadata file -and moved to the end of the dataset. A message will be generated noting the -number, if any, of variables that were moved to the end of the dataset. If -any variables were moved, and the 'verbose' argument is 'stop', 'warn', or -'message', a message will be generated detailing the variables that were -moved. + \code{var_ord_msg} is the primary messaging tool for +\code{xportr_order}. There are two primary messages that are output from +\code{var_ord_msg}. The first is the "moved" variables. These are the variables +that were not found in the metadata file and moved to the end of the +dataset. A message will be generated noting the number, if any, of +variables that were moved to the end of the dataset. If any variables were +moved, and the 'verbose' argument is 'stop', 'warn', or 'message', a +message will be generated detailing the variables that were moved. The second primary message is the number of variables that were in the -dataset, but not in the correct order. A message will be generated noting the -number, if any, of variables that have been reordered. If any variables were -reordered, and the 'verbose' argument is 'stop', 'warn', or 'message', a -message will be generated detailing the variables that were reordered. +dataset, but not in the correct order. A message will be generated noting +the number, if any, of variables that have been reordered. If any variables +were reordered, and the 'verbose' argument is 'stop', 'warn', or 'message', +a message will be generated detailing the variables that were reordered. } \section{Metadata}{ - -The argument passed in the 'metadata' argument can either be a metacore -object, or a data.frame containing the data listed below. If metacore is -used, no changes to options are required. + The argument passed in the 'metadata' argument can either +be a metacore object, or a data.frame containing the data listed below. If +metacore is used, no changes to options are required. For data.frame 'metadata' arguments three columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. -\item Variable Name - passed as the 'xportr.variable_name' option. Default: -"variable". This is used to match columns in '.df' argument and the metadata. -\item Variable Order - passed as the 'xportr.order_name' option. Default: "order". -These values used to arrange the order of the variables. If the values of -order metadata are not numeric, they will be corsersed to prevent -alphabetical sorting of numberic values. +function. 2) Variable Name - passed as the 'xportr.variable_name' option. +Default: "variable". This is used to match columns in '.df' argument and +the metadata. 3) Variable Order - passed as the 'xportr.order_name' option. +Default: "order". These values used to arrange the order of the variables. +If the values of order metadata are not numeric, they will be corsersed to +prevent alphabetical sorting of numberic values. } } diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index ac9befe1..d1d5b595 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -33,23 +33,26 @@ metadata now renamed with \code{metadata}} Returns the modified table. } \description{ -Current assumptions: -columns_meta is a data.frame with names "Variables", "Type" +XPT v5 datasets only have data types of character and numeric. \code{xportr_type} +attempts to collapse R classes to those two XPT types. The +'xportr.character_types' option is used to explicitly collapse the class of a +column to character using \code{as.character}. Similarly, 'xportr.numeric_types' +will collapse a column to a numeric type. If no type is passed for a +variable, it is assumed to be numeric and coerced with \code{as.numeric}. } \section{Messaging}{ - -\code{type_log} is the primary messaging tool for \code{xportr_type}. The number of -column types that mismatch the reported type in the metadata, if any, is -reported by by \code{xportr_type}. If there are any type mismatches, and the -'verbose' argument is 'stop', 'warn', or 'message', the type mismatches will -be detailed the actual type and the type reported in the metadata. + \code{type_log} is the primary messaging tool for +\code{xportr_type}. The number of column types that mismatch the reported type +in the metadata, if any, is reported by by \code{xportr_type}. If there are any +type mismatches, and the 'verbose' argument is 'stop', 'warn', or +'message', the type mismatches will be detailed the actual type and the +type reported in the metadata. } \section{Metadata}{ - -The argument passed in the 'metadata' argument can either be a metacore -object, or a data.frame containing the data listed below. If metacore is -used, no changes to options are required. + The argument passed in the 'metadata' argument can either +be a metacore object, or a data.frame containing the data listed below. If +metacore is used, no changes to options are required. For data.frame 'metadata' arguments three columns must be present: \enumerate{ @@ -60,16 +63,18 @@ function. "format". Character values to update the 'format.sas' attribute of the column. This is passed to \code{haven::write} to note the format. \item Variable Name - passed as the 'xportr.variable_name' option. Default: -"variable". This is used to match columns in '.df' argument and the metadata. -\item Variable Type - passed as the 'xportr.type_name'. Default: "type". This is -used to note the XPT variable "type" options are numeric or character. -\item Character Types - The list of classes that should be explicitly coerced to -a XPT Character type. Default: c( "character", "char", "text", "date", -"posixct", "posixt", "datetime", "time", "partialdate", "partialtime", -"partialdatetime", "incompletedatetime", "durationdatetime", -"intervaldatetime") -\item Numeric Types - The list of classes that should be explicitly coerced to a -XPT numeric type. Default: c("integer", "numeric", "num", "float") +"variable". This is used to match columns in '.df' argument and the +metadata. +\item Variable Type - passed as the 'xportr.type_name'. Default: "type". This +is used to note the XPT variable "type" options are numeric or character. +\item (Option only) Character Types - The list of classes that should be +explicitly coerced to a XPT Character type. Default: c( "character", +"char", "text", "date", "posixct", "posixt", "datetime", "time", +"partialdate", "partialtime", "partialdatetime", "incompletedatetime", +"durationdatetime", "intervaldatetime") +\item (Option only) Numeric Types - The list of classes that should be +explicitly coerced to a XPT numeric type. Default: c("integer", "numeric", +"num", "float") } } diff --git a/tests/testthat/test-options.R b/tests/testthat/test-options.R index 8a845c88..1a13ff23 100644 --- a/tests/testthat/test-options.R +++ b/tests/testthat/test-options.R @@ -3,7 +3,6 @@ test_that("options are originally set as expected", { expect_equal(op$xportr.df_domain_name, "dataset") expect_equal(op$xportr.df_label, "label") - expect_equal(op$xportr.coerse, "none") expect_equal(op$xportr.domain_name, "dataset") expect_equal(op$xportr.variable_name, "variable") expect_equal(op$xportr.type_name, "type") diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 001edc74..4bdf256d 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -208,7 +208,7 @@ attr(adsl$TRTEDTM, "format.sas") Using our `xportr_format()` we apply our formats. ```{r} -adsl_fmt <- adsl %>% xportr_format(var_spec, domain = "ADSL", "message") +adsl_fmt <- adsl %>% xportr_format(var_spec, domain = "ADSL") ``` ```{r} From 4d616c2061c9260f556ca6c90d8ac3d6df30b74f Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 15 Jun 2023 03:36:52 +0530 Subject: [PATCH 284/337] chore: lint the pkgdown yaml configuration --- _pkgdown.yml | 74 +++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 38 deletions(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index 1cc5ceb5..26faad2e 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -5,7 +5,7 @@ template: params: bootswatch: sandstone search: - exclude: ['news/index.html'] + exclude: ["news/index.html"] news: cran_dates: true @@ -19,42 +19,40 @@ navbar: aria-label: slack reference: -- title: The six core xportr functions -- contents: - - xportr_type - - xportr_length - - xportr_label - - xportr_write - - xportr_format - - xportr_order - -- title: xportr helper functions -- contents: - - label_log - - length_log - - type_log - - var_names_log - - var_ord_msg - - xportr_logger - - xportr_df_label - - xportr_metadata - -- title: xportr example datasets and specification files -- contents: - - adsl - - var_spec - -- title: internal - contents: - - cli_theme_tests - - expect_attr_width - - minimal_metadata - - minimal_table - + - title: The six core xportr functions + - contents: + - xportr_type + - xportr_length + - xportr_label + - xportr_write + - xportr_format + - xportr_order + + - title: xportr helper functions + - contents: + - label_log + - length_log + - type_log + - var_names_log + - var_ord_msg + - xportr_logger + - xportr_df_label + - xportr_metadata + + - title: xportr example datasets and specification files + - contents: + - adsl + - var_spec + + - title: internal + contents: + - cli_theme_tests + - expect_attr_width + - minimal_metadata + - minimal_table articles: -- title: ~ - navbar: ~ - contents: - - deepdive - + - title: ~ + navbar: ~ + contents: + - deepdive From aeac63726c865e5c0640ca1dea4625f5fa25e69c Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 15 Jun 2023 01:20:42 +0000 Subject: [PATCH 285/337] docs: #84 scrollable checks, moved png --- {vignettes => man/figures}/xpt_validate.png | Bin vignettes/deepdive.Rmd | 8 +-- vignettes/xportr.Rmd | 69 +++++++++++++++----- 3 files changed, 54 insertions(+), 23 deletions(-) rename {vignettes => man/figures}/xpt_validate.png (100%) diff --git a/vignettes/xpt_validate.png b/man/figures/xpt_validate.png similarity index 100% rename from vignettes/xpt_validate.png rename to man/figures/xpt_validate.png diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index ce8f8915..f521a5cf 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -88,8 +88,7 @@ The `xpt` Version 5 files form the backbone of any successful Submission and are Each of the core `{xportr}` functions for applying labels, types, formats, order and lengths provides feedback to users on submission compliance. However, a final check is implemented when `xportr_write()` is called to create the `xpt`. `xportr_write()` calls [`xpt_validate()`](https://github.com/atorus-research/xportr/blob/231e959b84aa0f1e71113c85332de33a827e650a/R/utils-xportr.R#L174), which is a behind the scenes/non-exported function that does a final check for compliance. At the time of `{xportr} v0.3.0` we are checking the following when a user writes out an `xpt` file.: -validate - +validate # {xportr} in action @@ -295,10 +294,7 @@ var_spec_lbl <- var_spec %>% adsl_lbl <- adsl -adsl_lbl[] <- lapply(adsl_lbl, function(x) { - attributes(x) <- NULL - x -}) +adsl_lbl <- haven::zap_label(adsl) ``` We have successfully removed all the labels. diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 263df4d4..1fab926b 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -22,6 +22,7 @@ options(cli.num_colors = 1) ``` ```{r, include=FALSE} +options(width = 60) local({ hook_output <- knitr::knit_hooks$get("output") knitr::knit_hooks$set(output = function(x, options) { @@ -36,6 +37,24 @@ local({ }) ``` + +```{r, include=FALSE} + +knitr::knit_hooks$set(output = function(x, options){ + if(!is.null(options$max_height)){ + paste('

    ', 
    +          x, "
    ", + sep = "") + } else{ + x + } + +}) + +``` + # Getting Started with xportr The demo will make use of a small `ADSL` data set that is apart of the [`{admiral}`](https://pharmaverse.github.io/admiral/index.html) package. @@ -118,7 +137,7 @@ DT::datatable(var_spec_view, options = list( In order to be compliant with transport v5 specifications an `xpt` file can only have two data types: character and numeric/dbl. Currently the `ADSL` data set has chr, dbl, time, factor and date. -```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} +```{r, max_height = "200px", echo = FALSE} str(adsl) ``` @@ -133,7 +152,7 @@ adsl_type <- xportr_type(adsl, var_spec, domain = "ADSL", verbose = "message") Now all appropriate types have been applied to the dataset as seen below. -```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} +```{r, max_height = "200px", echo = FALSE} str(adsl_type) ``` @@ -141,7 +160,7 @@ str(adsl_type) Next we can apply the lengths from a variable level specification file to the data frame. `xportr_length()` will identify variables that are missing from your specification file. The function will also alert you to how many lengths have been applied successfully. Before we apply the lengths lets verify that no lengths have been applied to the original dataframe. -```{r, max.height='300px', attr.output='.numberLines', echo = FALSE} +```{r, max_height = "200px", echo = FALSE} str(adsl) ``` @@ -152,7 +171,7 @@ adsl_length <- adsl %>% xportr_length(var_spec, domain = "ADSL", "message") ``` -```{r, max.height='300px', attr.output='.numberLines', echo = TRUE} +```{r, max_height = "200px", echo = FALSE} str(adsl_length) ``` @@ -178,11 +197,18 @@ DT::datatable(adsl_order, options = list( Now we apply formats to the dataset. These will typically be `DATE9.`, `DATETIME20` or `TIME5`, but many others can be used. Notice that in the `ADSL` dataset there are 8 Date/Time variables and they are missing formats. Here we just take a peak at a few `TRT` variables, which have a `NULL` format. -```{r} -attr(adsl$TRTSDT, "format.sas") -attr(adsl$TRTEDT, "format.sas") -attr(adsl$TRTSDTM, "format.sas") -attr(adsl$TRTEDTM, "format.sas") +```{r, max_height = "200px", echo = FALSE} +adsl_fmt_pre <- adsl %>% + select(TRTSDT, TRTEDT, TRTSDTM, TRTEDTM) + +tribble( + ~Variable, ~Format, + "TRTSDT", attr(adsl_fmt_pre$TRTSDT, which = "format"), + "TRTEDT", attr(adsl_fmt_pre$TRTEDT, which = "format"), + "TRTSDTM", attr(adsl_fmt_pre$TRTSDTM, which = "format"), + "TRTEDTM", attr(adsl_fmt_pre$TRTEDTM, which = "format") + ) + ``` Using our `xportr_format()` we can apply our formats to the dataset. @@ -191,19 +217,28 @@ Using our `xportr_format()` we can apply our formats to the dataset. adsl_fmt <- adsl %>% xportr_format(var_spec, domain = "ADSL", "message") ``` -```{r} -attr(adsl_fmt$TRTSDT, "format.sas") -attr(adsl_fmt$TRTEDT, "format.sas") -attr(adsl_fmt$TRTSDTM, "format.sas") -attr(adsl_fmt$TRTEDTM, "format.sas") +```{r, max_height = "200px", echo = FALSE} +adsl_fmt_post <- adsl_fmt %>% + select(TRTSDT, TRTEDT, TRTSDTM, TRTEDTM) + +tribble( + ~Variable, ~Format, + "TRTSDT", attr(adsl_fmt_post$TRTSDT, which = "format"), + "TRTEDT", attr(adsl_fmt_post$TRTEDT, which = "format"), + "TRTSDTM", attr(adsl_fmt_post$TRTSDTM, which = "format"), + "TRTEDTM", attr(adsl_fmt_post$TRTEDTM, which = "format") + ) + ``` # xportr_label() Please observe that our `ADSL` dataset is missing many variable labels. Sometimes these labels can be lost while using R's function. However, a CDISC compliant data set needs to have each variable with a label. -```{r, max.height='300px', attr.output='.numberLines', echo = TRUE} -str(adsl) +```{r, max_height = "200px", echo = FALSE} +adsl_no_lbls <- haven::zap_label(adsl) + +str(adsl_no_lbls) ``` Using the `xport_label` function we can take the specifications file and label all the variables available. `xportr_label` will produce a warning message if you the variable in the data set is not in the specification file. @@ -212,7 +247,7 @@ Using the `xport_label` function we can take the specifications file and label a adsl_lbl <- adsl %>% xportr_label(var_spec, domain = "ADSL", "message") ``` -```{r, max.height='300px', attr.output='.numberLines', echo = TRUE} +```{r, max_height = "200px"} str(adsl_lbl) ``` From 0a0253eecdc4a8b4119f9966be9ae7be26aa5ada Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 15 Jun 2023 01:30:18 +0000 Subject: [PATCH 286/337] chore: #84 lint and style --- vignettes/deepdive.Rmd | 5 ++++- vignettes/xportr.Rmd | 34 +++++++++++++++------------------- 2 files changed, 19 insertions(+), 20 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index f521a5cf..a382be53 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -205,7 +205,10 @@ datatable( autoWidth = TRUE ) ) %>% - formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%", textAlign = "center") + formatStyle(0, + target = "row", color = "black", backgroundColor = "white", + fontWeight = "bold", lineHeight = "70%", textAlign = "center" + ) ``` ## `xportr_type()` diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 1fab926b..5dd083ec 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -39,20 +39,18 @@ local({ ```{r, include=FALSE} - -knitr::knit_hooks$set(output = function(x, options){ - if(!is.null(options$max_height)){ - paste('
    ', 
    -          x, "
    ", - sep = "") - } else{ +knitr::knit_hooks$set(output = function(x, options) { + if (!is.null(options$max_height)) { + paste('
    ',
    +      x, "
    ", + sep = "" + ) + } else { x } - }) - ``` # Getting Started with xportr @@ -198,7 +196,7 @@ DT::datatable(adsl_order, options = list( Now we apply formats to the dataset. These will typically be `DATE9.`, `DATETIME20` or `TIME5`, but many others can be used. Notice that in the `ADSL` dataset there are 8 Date/Time variables and they are missing formats. Here we just take a peak at a few `TRT` variables, which have a `NULL` format. ```{r, max_height = "200px", echo = FALSE} -adsl_fmt_pre <- adsl %>% +adsl_fmt_pre <- adsl %>% select(TRTSDT, TRTEDT, TRTSDTM, TRTEDTM) tribble( @@ -206,9 +204,8 @@ tribble( "TRTSDT", attr(adsl_fmt_pre$TRTSDT, which = "format"), "TRTEDT", attr(adsl_fmt_pre$TRTEDT, which = "format"), "TRTSDTM", attr(adsl_fmt_pre$TRTSDTM, which = "format"), - "TRTEDTM", attr(adsl_fmt_pre$TRTEDTM, which = "format") - ) - + "TRTEDTM", attr(adsl_fmt_pre$TRTEDTM, which = "format") +) ``` Using our `xportr_format()` we can apply our formats to the dataset. @@ -218,7 +215,7 @@ adsl_fmt <- adsl %>% xportr_format(var_spec, domain = "ADSL", "message") ``` ```{r, max_height = "200px", echo = FALSE} -adsl_fmt_post <- adsl_fmt %>% +adsl_fmt_post <- adsl_fmt %>% select(TRTSDT, TRTEDT, TRTSDTM, TRTEDTM) tribble( @@ -226,9 +223,8 @@ tribble( "TRTSDT", attr(adsl_fmt_post$TRTSDT, which = "format"), "TRTEDT", attr(adsl_fmt_post$TRTEDT, which = "format"), "TRTSDTM", attr(adsl_fmt_post$TRTSDTM, which = "format"), - "TRTEDTM", attr(adsl_fmt_post$TRTEDTM, which = "format") - ) - + "TRTEDTM", attr(adsl_fmt_post$TRTEDTM, which = "format") +) ``` # xportr_label() From ead17a851f1c267f80bd632867b8647ff7fa0d23 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 15 Jun 2023 01:48:43 +0000 Subject: [PATCH 287/337] docs: #84 options verbose section --- vignettes/deepdive.Rmd | 22 ++++++++++++++++++++++ vignettes/xportr.Rmd | 13 ++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index a382be53..01b54af8 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -139,6 +139,28 @@ options( ) ``` +## Are we being too verbose? + +One final note on `options()`. 4 of the core `{xportr}` functions have the ability to set messaging as `"none", "message", "warn", "stop"`. Setting each of these in all your calls can be a bit repetitive. You can use `options()` to set these at a higher level and avoid this repitition. + +```{r, eval = FALSE} +# Default +options( + xportr.format_verbose = "none", + xportr.label_verbose = "none", + xportr.length_verbose = "none", + xportr.type_verbose = "none", +) + +# Will send Warning Message to Console +options( + xportr.format_verbose = "warn", + xportr.label_verbose = "warn", + xportr.length_verbose = "warn", + xportr.type_verbose = "warn", +) +``` + ## Going meta Each of the core `{xportr}` functions requires several inputs: A valid dataframe, a metadata object and a domain name, along with optional messaging. For example, here is a simple call using all of the functions. As you can see, a lot of information is repeated in each call. diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 5dd083ec..7a29730f 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -100,7 +100,7 @@ DT::datatable(adsl, options = list( autoWidth = FALSE, scrollX = TRUE, pageLength = 5, lengthMenu = c(5, 10, 15, 20) )) %>% - formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%") + formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold") ``` **NOTE:** The `ADSL` dataset can be created by using this command `admiral::use_ad_template("adsl")`. @@ -128,11 +128,15 @@ DT::datatable(var_spec_view, options = list( autoWidth = FALSE, scrollX = TRUE, pageLength = 5, lengthMenu = c(5, 10, 15, 20) )) %>% - formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%") + formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold") ``` # xportr_type() +**NOTE:** We make use of `str()` to expose the attributes (length, labels, formats, type) +of the datasets. We have suppressed these calls for the sake of brevity. + + In order to be compliant with transport v5 specifications an `xpt` file can only have two data types: character and numeric/dbl. Currently the `ADSL` data set has chr, dbl, time, factor and date. ```{r, max_height = "200px", echo = FALSE} @@ -188,7 +192,7 @@ DT::datatable(adsl_order, options = list( autoWidth = FALSE, scrollX = TRUE, pageLength = 5, lengthMenu = c(5, 10, 15, 20) )) %>% - formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold", lineHeight = "70%") + formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold") ``` # xportr_format() @@ -227,6 +231,9 @@ tribble( ) ``` +**NOTE:** You can use `attr(data$variable, which = "format")` to inspect formats applied +to a dataframe. The above output has these individual calls bound together for easier viewing. + # xportr_label() Please observe that our `ADSL` dataset is missing many variable labels. Sometimes these labels can be lost while using R's function. However, a CDISC compliant data set needs to have each variable with a label. From f966dd2883125677997fc6a03a3d2dffa4d7ed0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 15 Jun 2023 09:51:51 +0200 Subject: [PATCH 288/337] fix: removes example --- R/support-test.R | 4 ---- man/multiple_vars_in_spec_helper.Rd | 3 --- man/multiple_vars_in_spec_helper2.Rd | 3 --- 3 files changed, 10 deletions(-) diff --git a/R/support-test.R b/R/support-test.R index 0e615900..fa6e1c4f 100644 --- a/R/support-test.R +++ b/R/support-test.R @@ -129,8 +129,6 @@ local_cli_theme <- function(.local_envir = parent.frame()) { #' Test if multiple vars in spec will result in warning message #' @keywords internal -#' @examples -#' multiple_vars_in_spec_helper(xportr_order) multiple_vars_in_spec_helper <- function(FUN) { adsl <- minimal_table(30) metadata <- minimal_metadata( @@ -159,8 +157,6 @@ multiple_vars_in_spec_helper <- function(FUN) { #' Test if multiple vars in spec with appropriate #' @keywords internal -#' @examples -#' multiple_vars_in_spec_helper2(xportr_order) multiple_vars_in_spec_helper2 <- function(FUN) { adsl <- minimal_table(30) metadata <- minimal_metadata( diff --git a/man/multiple_vars_in_spec_helper.Rd b/man/multiple_vars_in_spec_helper.Rd index aaae58bc..d3cefce6 100644 --- a/man/multiple_vars_in_spec_helper.Rd +++ b/man/multiple_vars_in_spec_helper.Rd @@ -9,7 +9,4 @@ multiple_vars_in_spec_helper(FUN) \description{ Test if multiple vars in spec will result in warning message } -\examples{ -multiple_vars_in_spec_helper(xportr_order) -} \keyword{internal} diff --git a/man/multiple_vars_in_spec_helper2.Rd b/man/multiple_vars_in_spec_helper2.Rd index 082e5e5d..f3e09957 100644 --- a/man/multiple_vars_in_spec_helper2.Rd +++ b/man/multiple_vars_in_spec_helper2.Rd @@ -9,7 +9,4 @@ multiple_vars_in_spec_helper2(FUN) \description{ Test if multiple vars in spec with appropriate } -\examples{ -multiple_vars_in_spec_helper2(xportr_order) -} \keyword{internal} From c0c9dcb2cca31796d36f530c4147576b19202b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 15 Jun 2023 10:39:36 +0200 Subject: [PATCH 289/337] bundles all suggestions for datatables in xportr and deepdive --- vignettes/deepdive.Rmd | 21 +++++++++++++++------ vignettes/xportr.Rmd | 43 +++++++++++++++++++++++++++--------------- 2 files changed, 43 insertions(+), 21 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 01b54af8..95a7d048 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -39,8 +39,7 @@ local({ ``` ```{css, echo=FALSE} -# Used to control DT outputs - +/* Used to control DT outputs */ .text-left { text-align: left; } @@ -220,16 +219,26 @@ datatable( options = list( dom = "Bfrtip", columnDefs = list( - list(width = "10px", targets = c("order", "length", "format", "type", "dataset", "variable")), - list(className = "text-left", targets = c("label")) + list( + width = "10px", + targets = c("order", "length", "format", "type", "dataset", "variable")), + list( + className = "text-left", + targets = c("label") + ) ), searching = FALSE, autoWidth = TRUE ) ) %>% formatStyle(0, - target = "row", color = "black", backgroundColor = "white", - fontWeight = "bold", lineHeight = "70%", textAlign = "center" + target = "row", + color = "black", + backgroundColor = "white", + fontWeight = "500", + lineHeight = "85%", + textAlign = "center", + fontSize = ".875em" # same as code ) ``` diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 7a29730f..4646a47e 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -53,6 +53,31 @@ knitr::knit_hooks$set(output = function(x, options) { }) ``` +```{r, include=FALSE} +datatable_template <- function(input_data) { + datatable( + input_data, + rownames = FALSE, + options = list( + autoWidth = FALSE, + scrollX = TRUE, + pageLength = 5, + lengthMenu = c(5, 10, 15, 20) + ) + ) %>% + formatStyle( + 0, + target = "row", + color = "black", + backgroundColor = "white", + fontWeight = "500", + lineHeight = "85%", + fontSize = ".875em" # same as code + ) +} +``` + + # Getting Started with xportr The demo will make use of a small `ADSL` data set that is apart of the [`{admiral}`](https://pharmaverse.github.io/admiral/index.html) package. @@ -96,11 +121,7 @@ adsl <- admiral::admiral_adsl ```{r, echo = FALSE} -DT::datatable(adsl, options = list( - autoWidth = FALSE, scrollX = TRUE, pageLength = 5, - lengthMenu = c(5, 10, 15, 20) -)) %>% - formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold") +datatable_template(adsl) ``` **NOTE:** The `ADSL` dataset can be created by using this command `admiral::use_ad_template("adsl")`. @@ -124,11 +145,7 @@ Below is a quick snapshot of the specification file pertaining to the `ADSL` dat var_spec_view <- var_spec %>% filter(dataset == "ADSL") -DT::datatable(var_spec_view, options = list( - autoWidth = FALSE, scrollX = TRUE, pageLength = 5, - lengthMenu = c(5, 10, 15, 20) -)) %>% - formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold") +datatable_template(var_spec_view) ``` # xportr_type() @@ -188,11 +205,7 @@ adsl_order <- xportr_order(adsl, var_spec, domain = "ADSL", verbose = "message") ``` ```{r, echo = FALSE} -DT::datatable(adsl_order, options = list( - autoWidth = FALSE, scrollX = TRUE, pageLength = 5, - lengthMenu = c(5, 10, 15, 20) -)) %>% - formatStyle(0, target = "row", color = "black", backgroundColor = "white", fontWeight = "bold") +datatable_template(adsl_order) ``` # xportr_format() From f59f106625d5f2176ac80977b35aa2bdcdc0be93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 15 Jun 2023 10:58:42 +0200 Subject: [PATCH 290/337] fix: styler problems --- vignettes/deepdive.Rmd | 29 +++++++++++++++-------------- vignettes/xportr.Rmd | 16 ++++++++-------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 95a7d048..82ee1401 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -145,18 +145,18 @@ One final note on `options()`. 4 of the core `{xportr}` functions have the abil ```{r, eval = FALSE} # Default options( - xportr.format_verbose = "none", - xportr.label_verbose = "none", - xportr.length_verbose = "none", - xportr.type_verbose = "none", + xportr.format_verbose = "none", + xportr.label_verbose = "none", + xportr.length_verbose = "none", + xportr.type_verbose = "none", ) # Will send Warning Message to Console options( - xportr.format_verbose = "warn", - xportr.label_verbose = "warn", - xportr.length_verbose = "warn", - xportr.type_verbose = "warn", + xportr.format_verbose = "warn", + xportr.label_verbose = "warn", + xportr.length_verbose = "warn", + xportr.type_verbose = "warn", ) ``` @@ -220,10 +220,11 @@ datatable( dom = "Bfrtip", columnDefs = list( list( - width = "10px", - targets = c("order", "length", "format", "type", "dataset", "variable")), + width = "10px", + targets = c("order", "length", "format", "type", "dataset", "variable") + ), list( - className = "text-left", + className = "text-left", targets = c("label") ) ), @@ -232,11 +233,11 @@ datatable( ) ) %>% formatStyle(0, - target = "row", - color = "black", + target = "row", + color = "black", backgroundColor = "white", fontWeight = "500", - lineHeight = "85%", + lineHeight = "85%", textAlign = "center", fontSize = ".875em" # same as code ) diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 4646a47e..6b42b32b 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -56,20 +56,20 @@ knitr::knit_hooks$set(output = function(x, options) { ```{r, include=FALSE} datatable_template <- function(input_data) { datatable( - input_data, - rownames = FALSE, + input_data, + rownames = FALSE, options = list( - autoWidth = FALSE, - scrollX = TRUE, + autoWidth = FALSE, + scrollX = TRUE, pageLength = 5, lengthMenu = c(5, 10, 15, 20) ) ) %>% formatStyle( - 0, - target = "row", - color = "black", - backgroundColor = "white", + 0, + target = "row", + color = "black", + backgroundColor = "white", fontWeight = "500", lineHeight = "85%", fontSize = ".875em" # same as code From 4ac17583d528e21b52e9564fddc9b32e0574696e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Ver=C3=ADssimo?= <211358+averissimo@users.noreply.github.com> Date: Thu, 15 Jun 2023 11:00:15 +0200 Subject: [PATCH 291/337] fix: typo --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 82ee1401..dcc8f6d9 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -140,7 +140,7 @@ options( ## Are we being too verbose? -One final note on `options()`. 4 of the core `{xportr}` functions have the ability to set messaging as `"none", "message", "warn", "stop"`. Setting each of these in all your calls can be a bit repetitive. You can use `options()` to set these at a higher level and avoid this repitition. +One final note on `options()`. 4 of the core `{xportr}` functions have the ability to set messaging as `"none", "message", "warn", "stop"`. Setting each of these in all your calls can be a bit repetitive. You can use `options()` to set these at a higher level and avoid this repetition. ```{r, eval = FALSE} # Default From 0efc1b0e1e7b497764cc7a9c2c5ba75bc6fc6731 Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 15 Jun 2023 13:14:53 +0000 Subject: [PATCH 292/337] clean up files, remove tibble dependancy on tests --- inst/extdata/dfdates.xpt | Bin 1120 -> 0 bytes inst/extdata/dfdates2.xpt | Bin 1280 -> 0 bytes tests/testthat/dfdates.xpt | Bin 1120 -> 0 bytes tests/testthat/test-type.R | 17 +++++++++-------- 4 files changed, 9 insertions(+), 8 deletions(-) delete mode 100644 inst/extdata/dfdates.xpt delete mode 100644 inst/extdata/dfdates2.xpt delete mode 100644 tests/testthat/dfdates.xpt diff --git a/inst/extdata/dfdates.xpt b/inst/extdata/dfdates.xpt deleted file mode 100644 index f35fabf9dfff9ef85ca9a9ffbc0d468d25fd70c0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1120 zcmd5*yApyh5DZp+#@SjpfQSxVAaTGkpaBa@9kj93&*CHH2tHs?GgNLta!KxPcS%A{ z8J8e=kVrOGSVz93au4DA-blgx3V@WRfOs3rasckcbaDN7&7Fyjvu;?)kODjVv`*4uvn(JYAPnf z!8o(;vCKvwF`SexFBXdk2BWdaMsPE;$MP2wG9QB_c(`Yy?|<8r_KtAY?Dewnosvrq TfPI_|g~8X~=Tav;qk~evSAD+T diff --git a/tests/testthat/dfdates.xpt b/tests/testthat/dfdates.xpt deleted file mode 100644 index 6ff4612535dce5af545753329f80ddcfef90d326..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1120 zcmd5*u?~VT5Uoyr#<@Bez)B)pp*3KvXu-izgD#HvS$?D(MFoP|F!=`BYkPO^J=#z( zE)*yc#EMTe){(E6IzU+88*5l!0g$i+5Vf%=2jEUE7uQdDMyC$Wx?$7Re&ftMi+Z!U zM;Gn5JIj2vp{ddYJPXe_~m07)KwQ_v>mR+*r?VO{JoTcoq z{o61pl3#kAhR`YiAOk|khz!&+3V3S%9}80io-VQp)@a1#VvmpJGSpn8F&XTgMpBd= lD=x1X)%AdB^RD|G`}z$w_6*-I-`z{L;q~t0#FWRUa}UI?vHk!6 diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index b9a2388b..a3f1aacf 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -192,13 +192,13 @@ test_that("xportr_type: date variables are not converted to numeric", { ) ) ) - expect_message(processed_df <- xportr_type(df, metacore_meta), NA) + expect_message({processed_df <- xportr_type(df, metacore_meta)}, NA) expect_equal(lapply(df, class), lapply(processed_df, class)) expect_equal(df$RFICDT, processed_df$RFICDT) expect_equal(df$RFICDTM, processed_df$RFICDTM) - xportr_write(processed_df, file.path(system.file("extdata", package="xportr"), "dfdates.xpt")) - df_xpt <- read_xpt(file.path(system.file("extdata", package="xportr"), "dfdates.xpt")) + xportr_write(processed_df, file.path(tempdir(), "dfdates.xpt")) + df_xpt <- read_xpt(file.path(tempdir(), "dfdates.xpt")) expect_equal(lapply(df, class), lapply(df_xpt, class)) expect_equal(df$RFICDT, df_xpt$RFICDT, ignore_attr = TRUE) @@ -211,10 +211,11 @@ test_that("xportr_type: date variables are not converted to numeric", { format = c(NA, NA, "date9.", "datetime15.") ) - adsl_original <- tibble::tribble( - ~USUBJID, ~DMDTC, ~RFICDT, ~RFICDTM, - "test1", "2017-03-30", "2017-03-30", "2017-03-30", - "test2", "2017-01-08", "2017-01-08", "2017-01-08" + adsl_original <- data.frame( + USUBJID = c("test1", "test2"), + DMDTC = c("2017-03-30", "2017-01-08"), + RFICDT = c("2017-03-30", "2017-01-08"), + RFICDTM = c("2017-03-30", "2017-01-08") ) @@ -227,7 +228,7 @@ test_that("xportr_type: date variables are not converted to numeric", { attr(adsl_original, "_xportr.df_arg_") <- "adsl_original" expect_equal(adsl_original, adsl_xpt2) - + }) test_that("xportr_type: Gets warning when metadata has multiple rows with same variable", { From 412c75de5dbef63cccae93f35b21217125259750 Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 15 Jun 2023 13:17:29 +0000 Subject: [PATCH 293/337] Lint and style --- R/type.R | 1 - R/utils-xportr.R | 5 ++--- tests/testthat/test-type.R | 8 ++++++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/R/type.R b/R/type.R index d69297f7..8fc44875 100644 --- a/R/type.R +++ b/R/type.R @@ -99,7 +99,6 @@ xportr_type <- function(.df, "_numeric", type.x ), - # type.x = if_else(grepl("DTC$", variable) & type.x == "_character", "Date", type.x), type.y = if_else(is.na(type.y), type.x, type.y), type.y = tolower(type.y), type.y = if_else(type.y %in% characterTypes | (grepl("DTC$", variable) & is.na(format)), "_character", type.y), diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 1d3a60d8..91f2cb15 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -357,9 +357,8 @@ first_class <- function(x) { #' @param metadata A data frame containing variable level metadata. #' @param variable_name string with `getOption('xportr.variable_name')` #' @noRd -check_multiple_var_specs <- function( - metadata, - variable_name = getOption("xportr.variable_name")) { +check_multiple_var_specs <- function(metadata, + variable_name = getOption("xportr.variable_name")) { variable_len <- pluck(metadata, variable_name) %||% c() if (NROW(variable_len) != NROW(unique(variable_len))) { cli_alert_info( diff --git a/tests/testthat/test-type.R b/tests/testthat/test-type.R index a3f1aacf..541c14bb 100644 --- a/tests/testthat/test-type.R +++ b/tests/testthat/test-type.R @@ -192,7 +192,12 @@ test_that("xportr_type: date variables are not converted to numeric", { ) ) ) - expect_message({processed_df <- xportr_type(df, metacore_meta)}, NA) + expect_message( + { + processed_df <- xportr_type(df, metacore_meta) + }, + NA + ) expect_equal(lapply(df, class), lapply(processed_df, class)) expect_equal(df$RFICDT, processed_df$RFICDT) expect_equal(df$RFICDTM, processed_df$RFICDTM) @@ -228,7 +233,6 @@ test_that("xportr_type: date variables are not converted to numeric", { attr(adsl_original, "_xportr.df_arg_") <- "adsl_original" expect_equal(adsl_original, adsl_xpt2) - }) test_that("xportr_type: Gets warning when metadata has multiple rows with same variable", { From fb7ad19917b8dea8f55ad074d2bdb41c857f46cd Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 15 Jun 2023 14:12:12 +0000 Subject: [PATCH 294/337] docs: #84 readme update, revert type back --- R/type.R | 5 +---- README.Rmd | 21 ++++++++++----------- README.md | 23 ++++++++++++++++++++--- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/R/type.R b/R/type.R index 14342066..4146ee64 100644 --- a/R/type.R +++ b/R/type.R @@ -62,11 +62,8 @@ xportr_type <- function(.df, ## Pull out correct metadata metadata <- metadata %||% - attr(.df, "_xportr.df_metadata_") - - if (is.null(metadata)) { + attr(.df, "_xportr.df_metadata_") %||% rlang::abort("Metadata must be set with `metadata` or `xportr_metadata()`") - } if (inherits(metadata, "Metacore")) { metadata <- metadata$var_spec diff --git a/README.Rmd b/README.Rmd index 45069fa2..201566fa 100644 --- a/README.Rmd +++ b/README.Rmd @@ -82,7 +82,7 @@ data sets (≀ 200) - Coerces variables to only numeric or character types - Display format support for numeric float and date/time values - Variables names are ≀ 8 characters. -- Variable labels are ≀ 200 characters. +- Variable labels are ≀ 40 characters. - Data set labels are ≀ 40 characters. - Presence of non-ASCII characters in Variable Names, Labels or data set labels. @@ -103,7 +103,7 @@ To do this we will need to do the following: - Apply a dataset label - Write out a version 5 xpt file -All of which can be done using a well-defined specification file and the `xportr` package! +All of which can be done using a well-defined specification file and the `{xportr}` package! First we will start with our `ADSL` dataset created in R. This example `ADSL` dataset is taken from the [`{admiral}`](https://pharmaverse.github.io/admiral/index.html) package. The script that generates this `ADSL` dataset can be created by using this command `admiral::use_ad_template("adsl")`. This `ADSL` dataset has 306 observations and 48 variables. @@ -125,20 +125,19 @@ var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>% rlang::set_names(tolower) ``` -Each `xportr_` function has been written in a way to take in a part of the specification file and apply that piece to the dataset. +Each `xportr_` function has been written in a way to take in a part of the specification file and apply that piece to the dataset. Setting `verbose = "warn"` will send appropriate warning message to the console. We have suppressed the warning for the sake of brevity. -```{r, message=FALSE, eval=FALSE} +```{r, warning = FALSE, message=FALSE, eval=TRUE} adsl %>% - xportr_metadata(var_spec, "ADSL") %>% - xportr_type() %>% - xportr_length() %>% - xportr_label() %>% - xportr_order() %>% - xportr_format() %>% + xportr_type(var_spec, "ADSL", verbose = "warn") %>% + xportr_length(var_spec, "ADSL", verbose = "warn") %>% + xportr_label(var_spec, "ADSL", verbose = "warn") %>% + xportr_order(var_spec, "ADSL", verbose = "warn") %>% + xportr_format(var_spec, "ADSL", verbose = "warn") %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` -The `xportr_metadata()` function can reduce duplication by setting the variable specification and domain explicitly at the top of a pipeline. +The `xportr_metadata()` function can reduce duplication by setting the variable specification and domain explicitly at the top of a pipeline. If you would like to use the `verbose` argument, you will need to set in each function call. ```{r, message=FALSE, eval=FALSE} adsl %>% diff --git a/README.md b/README.md index 21e81a17..03e9cf00 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ to any validators or data reviewers. - Coerces variables to only numeric or character types - Display format support for numeric float and date/time values - Variables names are ≀ 8 characters. -- Variable labels are ≀ 200 characters. +- Variable labels are ≀ 40 characters. - Data set labels are ≀ 40 characters. - Presence of non-ASCII characters in Variable Names, Labels or data set labels. @@ -99,7 +99,7 @@ To do this we will need to do the following: - Write out a version 5 xpt file All of which can be done using a well-defined specification file and the -`xportr` package! +`{xportr}` package! First we will start with our `ADSL` dataset created in R. This example `ADSL` dataset is taken from the @@ -131,7 +131,24 @@ var_spec <- readxl::read_xlsx(spec_path, sheet = "Variables") %>% ``` Each `xportr_` function has been written in a way to take in a part of -the specification file and apply that piece to the dataset. +the specification file and apply that piece to the dataset. Setting +`verbose = "warn"` will send appropriate warning message to the console. +We have suppressed the warning for the sake of brevity. + +``` r +adsl %>% + xportr_type(var_spec, "ADSL", verbose = "warn") %>% + xportr_length(var_spec, "ADSL", verbose = "warn") %>% + xportr_label(var_spec, "ADSL", verbose = "warn") %>% + xportr_order(var_spec, "ADSL", verbose = "warn") %>% + xportr_format(var_spec, "ADSL", verbose = "warn") %>% + xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") +``` + +The `xportr_metadata()` function can reduce duplication by setting the +variable specification and domain explicitly at the top of a pipeline. +If you would like to use the `verbose` argument, you will need to set in +each function call. ``` r adsl %>% From c67671177c6c8c9827f282de0bc48ef99db91df7 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 15 Jun 2023 09:28:16 -0500 Subject: [PATCH 295/337] Update R/length.R Co-authored-by: Ben Straub --- R/length.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/length.R b/R/length.R index 0d3195b5..01b8a984 100644 --- a/R/length.R +++ b/R/length.R @@ -25,7 +25,7 @@ #' #' If variables were not found in the metadata and the value passed to the #' 'verbose' argument is 'stop', 'warn', or 'message', a message will be -#' generated detailing the variables that were missing in metadata. +#' generated detailing the variables that were missing in the metadata. #' #' @section Metadata: The argument passed in the 'metadata' argument can either #' be a metacore object, or a data.frame containing the data listed below. If From 334d2f64eaa29846b0986a99faacb86c7413d80f Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 15 Jun 2023 09:28:24 -0500 Subject: [PATCH 296/337] Update R/length.R Co-authored-by: Ben Straub --- R/length.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/length.R b/R/length.R index 01b8a984..8536d583 100644 --- a/R/length.R +++ b/R/length.R @@ -28,7 +28,7 @@ #' generated detailing the variables that were missing in the metadata. #' #' @section Metadata: The argument passed in the 'metadata' argument can either -#' be a metacore object, or a data.frame containing the data listed below. If +#' be a `{metacore}` object, or a data.frame containing the data listed below. If #' metacore is used, no changes to options are required. #' #' For data.frame 'metadata' arguments three columns must be present: From 7a168d64e5f05bbb6fcc3f61fbf59fcbdd3a656d Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 15 Jun 2023 09:28:43 -0500 Subject: [PATCH 297/337] Update R/type.R Co-authored-by: Ben Straub --- R/type.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/type.R b/R/type.R index 3c4c8b4c..eb6f0c04 100644 --- a/R/type.R +++ b/R/type.R @@ -9,9 +9,9 @@ #' #' @inheritParams xportr_length #' -#' @section Messaging: `type_log` is the primary messaging tool for -#' `xportr_type`. The number of column types that mismatch the reported type -#' in the metadata, if any, is reported by by `xportr_type`. If there are any +#' @section Messaging: `type_log()` is the primary messaging tool for +#' `xportr_type()`. The number of column types that mismatch the reported type +#' in the metadata, if any, is reported by by `xportr_type()`. If there are any #' type mismatches, and the 'verbose' argument is 'stop', 'warn', or #' 'message', the type mismatches will be detailed the actual type and the #' type reported in the metadata. From 0e82d9248e756d47c3b480eca0911b6e848b8200 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 15 Jun 2023 09:29:40 -0500 Subject: [PATCH 298/337] Update R/length.R Co-authored-by: Ben Straub --- R/length.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/length.R b/R/length.R index 8536d583..c869768b 100644 --- a/R/length.R +++ b/R/length.R @@ -1,6 +1,6 @@ #' Assign SAS Length #' -#' Assigns SAS length from a variable level metadata to a given data frame. If a +#' Assigns SAS length from a metadata object to a given data frame. If a #' length isn't present for a variable the length value is set to 200 for #' character columns, and 8 for non-character columns. This value is stored in #' the 'width' attribute of the column. From 3417232c37335d66607faa2598a4a039580ef212 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 15 Jun 2023 09:30:23 -0500 Subject: [PATCH 299/337] Update R/label.R Co-authored-by: Ben Straub --- R/label.R | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/R/label.R b/R/label.R index 4393c5f6..35877d44 100644 --- a/R/label.R +++ b/R/label.R @@ -8,8 +8,8 @@ #' #' @inheritParams xportr_length #' -#' @section Messaging: `label_log` is the primary messaging tool for -#' `xportr_label`. If there are any columns present in the '.df' that are not +#' @section Messaging: `label_log()` is the primary messaging tool for +#' `xportr_label()`. If there are any columns present in the '.df' that are not #' noted in the metadata, they cannot be assigned a label and a message will #' be generated noting the number or variables that have not been assigned a #' label. From 7ad340b7a6b1093c3c28209af4cc64fdf8e5a6b3 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 15 Jun 2023 09:30:33 -0500 Subject: [PATCH 300/337] Update R/order.R Co-authored-by: Ben Straub --- R/order.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/order.R b/R/order.R index 6df56b56..2991f765 100644 --- a/R/order.R +++ b/R/order.R @@ -1,6 +1,6 @@ #' Order variables of a dataset according to Spec #' -#' The `dplyr::arange` function is used to order the columns of the dataframe. +#' The `dplyr::arrange()` function is used to order the columns of the dataframe. #' Any variables that are missing an order value are appended to the dataframe #' after all of the variables that have an order. #' From b7aaa9f4491c3306573368ae963c788e09a49cd0 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 15 Jun 2023 09:30:42 -0500 Subject: [PATCH 301/337] Update R/order.R Co-authored-by: Ben Straub --- R/order.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/order.R b/R/order.R index 2991f765..23b2c331 100644 --- a/R/order.R +++ b/R/order.R @@ -8,9 +8,9 @@ #' #' @export #' -#' @section Messaging: `var_ord_msg` is the primary messaging tool for -#' `xportr_order`. There are two primary messages that are output from -#' `var_ord_msg`. The first is the "moved" variables. These are the variables +#' @section Messaging: `var_ord_msg()` is the primary messaging tool for +#' `xportr_order()`. There are two primary messages that are output from +#' `var_ord_msg()`. The first is the "moved" variables. These are the variables #' that were not found in the metadata file and moved to the end of the #' dataset. A message will be generated noting the number, if any, of #' variables that were moved to the end of the dataset. If any variables were From 55a3e20480d9a380dddbd3207330bef511fe322d Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 15 Jun 2023 09:31:22 -0500 Subject: [PATCH 302/337] Update R/order.R Co-authored-by: Ben Straub --- R/order.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/order.R b/R/order.R index 23b2c331..bb264eb6 100644 --- a/R/order.R +++ b/R/order.R @@ -1,7 +1,7 @@ #' Order variables of a dataset according to Spec #' #' The `dplyr::arrange()` function is used to order the columns of the dataframe. -#' Any variables that are missing an order value are appended to the dataframe +#' Any variables that are missing an order value are appended to the end of the dataframe #' after all of the variables that have an order. #' #' @inheritParams xportr_length From 0014120bd8911e949b3897e762490313e8abcb56 Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 15 Jun 2023 14:34:49 +0000 Subject: [PATCH 303/337] Fix metadata numbering --- R/df_label.R | 4 +++- R/format.R | 9 ++++++--- R/label.R | 8 ++++++-- R/length.R | 8 ++++++-- R/order.R | 8 ++++++-- man/xportr_df_label.Rd | 3 ++- man/xportr_format.Rd | 7 ++++--- man/xportr_label.Rd | 6 ++++-- man/xportr_length.Rd | 6 ++++-- man/xportr_order.Rd | 6 ++++-- 10 files changed, 45 insertions(+), 20 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index 8b81cc9c..3c986c02 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -15,7 +15,9 @@ #' #' 1) Domain Name - passed as the 'xportr.df_domain_name' option. Default: #' "dataset". This is the column subset by the 'domain' argument in the -#' function. 2) Label Name - passed as the 'xportr.df_label' option. Default: +#' function. +#' +#' 2) Label Name - passed as the 'xportr.df_label' option. Default: #' "format". Character values to update the 'format.sas' attribute of the #' dataframe This is passed to `haven::write_xpt` to note the label. #' diff --git a/R/format.R b/R/format.R index 06c31f31..17e15183 100644 --- a/R/format.R +++ b/R/format.R @@ -16,10 +16,13 @@ #' #' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: #' "dataset". This is the column subset by the 'domain' argument in the -#' function. 2) Format Name - passed as the 'xportr.format_name' option. +#' function. +#' +#' 2) Format Name - passed as the 'xportr.format_name' option. #' Default: "format". Character values to update the 'format.sas' attribute of -#' the column. This is passed to `haven::write` to note the format. 3) -#' Variable Name - passed as the 'xportr.variable_name' option. Default: +#' the column. This is passed to `haven::write` to note the format. +#' +#' 3) Variable Name - passed as the 'xportr.variable_name' option. Default: #' "variable". This is used to match columns in '.df' argument and the #' metadata. #' diff --git a/R/label.R b/R/label.R index 4393c5f6..456d746b 100644 --- a/R/label.R +++ b/R/label.R @@ -26,9 +26,13 @@ #' #' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: #' "dataset". This is the column subset by the 'domain' argument in the -#' function. 2) Variable Name - passed as the 'xportr.variable_name' option. +#' function. +#' +#' 2) Variable Name - passed as the 'xportr.variable_name' option. #' Default: "variable". This is used to match columns in '.df' argument and -#' the metadata. 3) Variable Label - passed as the 'xportr.label' option. +#' the metadata. +#' +#' 3) Variable Label - passed as the 'xportr.label' option. #' Default: "label". These character values to update the 'label' attribute of #' the column. This is passed to `haven::write` to note the label. #' diff --git a/R/length.R b/R/length.R index 0d3195b5..f3f1045c 100644 --- a/R/length.R +++ b/R/length.R @@ -35,9 +35,13 @@ #' #' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: #' "dataset". This is the column subset by the 'domain' argument in the -#' function. 2) Variable Name - passed as the 'xportr.variable_name' option. +#' function. +#' +#' 2) Variable Name - passed as the 'xportr.variable_name' option. #' Default: "variable". This is used to match columns in '.df' argument and -#' the metadata. 3) Variable Label - passed as the 'xportr.length' option. +#' the metadata. +#' +#' 3) Variable Label - passed as the 'xportr.length' option. #' Default: "length". These numeric values to update the 'width' attribute of #' the column. This is passed to `haven::write` to note the variable length. #' diff --git a/R/order.R b/R/order.R index 6df56b56..603aa7c1 100644 --- a/R/order.R +++ b/R/order.R @@ -31,9 +31,13 @@ #' #' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: #' "dataset". This is the column subset by the 'domain' argument in the -#' function. 2) Variable Name - passed as the 'xportr.variable_name' option. +#' function. +#' +#' 2) Variable Name - passed as the 'xportr.variable_name' option. #' Default: "variable". This is used to match columns in '.df' argument and -#' the metadata. 3) Variable Order - passed as the 'xportr.order_name' option. +#' the metadata. +#' +#' 3) Variable Order - passed as the 'xportr.order_name' option. #' Default: "order". These values used to arrange the order of the variables. #' If the values of order metadata are not numeric, they will be corsersed to #' prevent alphabetical sorting of numberic values. diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index f5e724b6..88db94ee 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -35,7 +35,8 @@ For data.frame 'metadata' arguments two columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.df_domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. 2) Label Name - passed as the 'xportr.df_label' option. Default: +function. +\item Label Name - passed as the 'xportr.df_label' option. Default: "format". Character values to update the 'format.sas' attribute of the dataframe This is passed to \code{haven::write_xpt} to note the label. } diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index 2cae79f6..9f9043d3 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -36,10 +36,11 @@ For data.frame 'metadata' arguments three columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. 2) Format Name - passed as the 'xportr.format_name' option. +function. +\item Format Name - passed as the 'xportr.format_name' option. Default: "format". Character values to update the 'format.sas' attribute of -the column. This is passed to \code{haven::write} to note the format. 3) -Variable Name - passed as the 'xportr.variable_name' option. Default: +the column. This is passed to \code{haven::write} to note the format. +\item Variable Name - passed as the 'xportr.variable_name' option. Default: "variable". This is used to match columns in '.df' argument and the metadata. } diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index c24b44cb..ff52c3e2 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -60,9 +60,11 @@ For data.frame 'metadata' arguments three columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. 2) Variable Name - passed as the 'xportr.variable_name' option. +function. +\item Variable Name - passed as the 'xportr.variable_name' option. Default: "variable". This is used to match columns in '.df' argument and -the metadata. 3) Variable Label - passed as the 'xportr.label' option. +the metadata. +\item Variable Label - passed as the 'xportr.label' option. Default: "label". These character values to update the 'label' attribute of the column. This is passed to \code{haven::write} to note the label. } diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index ca4c7d8d..409678e2 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -59,9 +59,11 @@ For data.frame 'metadata' arguments three columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. 2) Variable Name - passed as the 'xportr.variable_name' option. +function. +\item Variable Name - passed as the 'xportr.variable_name' option. Default: "variable". This is used to match columns in '.df' argument and -the metadata. 3) Variable Label - passed as the 'xportr.length' option. +the metadata. +\item Variable Label - passed as the 'xportr.length' option. Default: "length". These numeric values to update the 'width' attribute of the column. This is passed to \code{haven::write} to note the variable length. } diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index 1c1f9899..b1018557 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -63,9 +63,11 @@ For data.frame 'metadata' arguments three columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the -function. 2) Variable Name - passed as the 'xportr.variable_name' option. +function. +\item Variable Name - passed as the 'xportr.variable_name' option. Default: "variable". This is used to match columns in '.df' argument and -the metadata. 3) Variable Order - passed as the 'xportr.order_name' option. +the metadata. +\item Variable Order - passed as the 'xportr.order_name' option. Default: "order". These values used to arrange the order of the variables. If the values of order metadata are not numeric, they will be corsersed to prevent alphabetical sorting of numberic values. From af7f6d29408339f5b551e9e515312a9f06968b35 Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 15 Jun 2023 14:35:24 +0000 Subject: [PATCH 304/337] Styling --- R/utils-xportr.R | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/R/utils-xportr.R b/R/utils-xportr.R index 1d3a60d8..91f2cb15 100644 --- a/R/utils-xportr.R +++ b/R/utils-xportr.R @@ -357,9 +357,8 @@ first_class <- function(x) { #' @param metadata A data frame containing variable level metadata. #' @param variable_name string with `getOption('xportr.variable_name')` #' @noRd -check_multiple_var_specs <- function( - metadata, - variable_name = getOption("xportr.variable_name")) { +check_multiple_var_specs <- function(metadata, + variable_name = getOption("xportr.variable_name")) { variable_len <- pluck(metadata, variable_name) %||% c() if (NROW(variable_len) != NROW(unique(variable_len))) { cli_alert_info( From d8e563c3a0e0820c11654c877f570ea13cfe1d36 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Thu, 15 Jun 2023 09:38:20 -0500 Subject: [PATCH 305/337] Update R/label.R Co-authored-by: Ben Straub --- R/label.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/label.R b/R/label.R index cd743adc..e412e9fc 100644 --- a/R/label.R +++ b/R/label.R @@ -1,7 +1,7 @@ #' Assign Variable Label #' #' Assigns variable label from a variable level metadata to a given data frame. -#' This function will give an error if a label is presented that is greater than +#' This function will give detect if a label is greater than #' 40 characters which isn't allowed in XPT v5. If labels aren't present for the #' variable it will be assigned an empty character value. Labels are stored in #' the 'label' attribute of the column. From 0987a2f97ff9b0ee25be2759ba70e5cbc0a29b98 Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 15 Jun 2023 14:40:49 +0000 Subject: [PATCH 306/337] Rework type docs --- R/type.R | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/R/type.R b/R/type.R index eb6f0c04..c0cad173 100644 --- a/R/type.R +++ b/R/type.R @@ -13,14 +13,14 @@ #' `xportr_type()`. The number of column types that mismatch the reported type #' in the metadata, if any, is reported by by `xportr_type()`. If there are any #' type mismatches, and the 'verbose' argument is 'stop', 'warn', or -#' 'message', the type mismatches will be detailed the actual type and the -#' type reported in the metadata. +#' 'message', each mismatch will be detailed with the actual type in the data +#' and the type noted in the metadata. #' #' @section Metadata: The argument passed in the 'metadata' argument can either #' be a metacore object, or a data.frame containing the data listed below. If #' metacore is used, no changes to options are required. #' -#' For data.frame 'metadata' arguments three columns must be present: +#' For data.frame 'metadata' arguments four columns must be present: #' #' 1) Domain Name - passed as the 'xportr.domain_name' option. Default: #' "dataset". This is the column subset by the 'domain' argument in the From 88e5370bba3e2c811b79b16ede466b08dd57f9f5 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 11 May 2023 03:58:33 +0530 Subject: [PATCH 307/337] feat: adding the issue templates --- .github/ISSUE_TEMPLATE/01_bug_report.yml | 33 +++++++++++++++ .github/ISSUE_TEMPLATE/02_feature_request.yml | 41 +++++++++++++++++++ 2 files changed, 74 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/01_bug_report.yml create mode 100644 .github/ISSUE_TEMPLATE/02_feature_request.yml diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml new file mode 100644 index 00000000..bb70b4ab --- /dev/null +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -0,0 +1,33 @@ +name: Bug Report +description: Something is not working correctly or is not working at all! +title: "Bug: " +labels: ["bug", "programming"] +body: + - type: markdown + attributes: + value: | + **Example:** Bug: xportr_format() does not assign SAS format for `DATE9.` variable level metadata + - type: textarea + id: what-happened + attributes: + label: What happened? + description: Also tell us what were you expecting to happen before the bug? + placeholder: "A bug happened!" + validations: + required: true + - type: textarea + id: session-info + attributes: + label: Session Information + description: Use `sessionInfo()` in the R console to gather all the details of your environment when the bug happened. + placeholder: "Place the console output here" + validations: + required: false + - type: textarea + id: logs + attributes: + label: Reproducible Example + description: We love code that can reproduce the example. Check out [reprex](https://reprex.tidyverse.org/articles/reprex-dos-and-donts.html) + placeholder: "Please give us as many details as you can! The faster we can recreate the bug, the faster we can get a fix in the works. Warning, Error Messages and Screenshots are also great." + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml new file mode 100644 index 00000000..cf7ea559 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -0,0 +1,41 @@ +name: Feature Request +description: Enchancement to xportr functionality +title: "Feature Request: " +labels: ["enhancement", "programming"] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this feature request! We love keeping xportr fresh! + - type: textarea + id: feature + attributes: + label: Feature Idea + description: Tell us your idea in as few words as possible + placeholder: "`xportr_validate` should do x, y and z" + validations: + required: true + - type: textarea + id: input + attributes: + label: Relevant Input + description: Can you provide what the inputs should look like? + placeholder: "What should the input look like? REMINDER: no patient level data or company sensitive information should be shared via this open public issue" + validations: + required: false + - type: textarea + id: output + attributes: + label: Relevant Output + description: Can you provide what the final output should look like? + placeholder: "What should the output look like? REMINDER: no patient level data or company sensitive information should be shared via this open public issue" + validations: + required: false + - type: textarea + id: code + attributes: + label: Reproducible Example/Pseudo Code + description: Can you provide a working example or a sketch of how the code should work? + placeholder: "We love example code and it will speed up the process! REMINDER: no patient level data or company sensitive information should be shared via this open public issue" + validations: + required: false From f291e9aae288da53634a7e78e966e2ed471a871c Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 11 May 2023 00:51:41 +0000 Subject: [PATCH 308/337] feat: #94 branch off main and implement PR templates --- .github/PULL_REQUEST_TEMPLATE/release.md | 22 +++++++++++++++++ .github/pull_request_template.md | 30 ++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE/release.md create mode 100644 .github/pull_request_template.md diff --git a/.github/PULL_REQUEST_TEMPLATE/release.md b/.github/PULL_REQUEST_TEMPLATE/release.md new file mode 100644 index 00000000..d15938a3 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE/release.md @@ -0,0 +1,22 @@ +# Release Description + + +## Milestone + + +Milestone: + +# Release Checklist + + +- [ ] DESCRIPTION File version number has been updated +- [ ] DESCRIPTION file updated with New Developers (if applicable) +- [ ] NEWS.md has been updated and issues numbers linked +- [ ] README.md has been updated (if applicable) +- [ ] Vignettes have been updated (if applicable) +- [ ] Ensure all unit tests are passing +- [ ] Review https://r-pkgs.org/release.html for additional checks and guidance +- [ ] Use `rhub::check_for_cran()` for checking CRAN flavors before submission +- [ ] Use `usethis::use_revdep()` to check for any reverse dependencies +- [ ] GitHub actions on this PR are all passing +- [ ] Draft GitHub release created using automatic template and updated with additional details. Remember to click "release" after PR is merged. \ No newline at end of file diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..a4786bff --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,30 @@ +### Thank you for your Pull Request! + +We have developed a Pull Request template to aid you and our reviewers. Completing the below tasks helps to ensure our reviewers can maximize their time on your code as well as making sure the xportr codebase remains robust and consistent. + +### The scope of `{xportr}` + +`{xportr}`'s scope is to enable R users to write out submission compliant `xpt` files that can be delivered to a Health Authority or to downstream validation software programs. We see labels, lengths, types, ordering and formats from a dataset specification object (SDTM and ADaM) as being our primary focus. We also see messaging and warnings to users around applying information from the specification file as a primary focus. Please make sure your Pull Request meets this **scope of {xportr}**. If your Pull Request moves beyond this scope, please get in touch with the `{xportr}` team on [slack](https://pharmaverse.slack.com/archives/C030EB2M4GM) or create an issue to discuss. + +Please check off each task box as an acknowledgment that you completed the task. This checklist is part of the Github Action workflows and the Pull Request will not be merged into the `devel` branch until you have checked off each task. + +### Changes Description + +_(descriptions of changes)_ + +### Task List + +- [ ] The spirit of xportr is met in your Pull Request +- [ ] Place Closes # into the beginning of your Pull Request Title (Use Edit button in top-right if you need to update) +- [ ] Summary of changes filled out in the above Changes Description. Can be removed or left blank if changes are minor/self-explanatory. +- [ ] Check that your Pull Request is targeting the `devel` branch, Pull Requests to `main` should use the [Release Pull Request Template](https://github.com/atorus-research/xportr/tree/94_pr_template/.github/PULL_REQUEST_TEMPLATE) +- [ ] Code is formatted according to the [tidyverse style guide](https://style.tidyverse.org/). Use `styler` package and functions to style files accordingly. +- [ ] Updated relevant unit tests or have written new unit tests. See our [Wiki](https://github.com/atorus-research/xportr/wiki/Style-Guide-for-Unit-Tests) for conventions used in this package. +- [ ] Creation/updated relevant roxygen headers and examples. See our [Wiki](https://github.com/atorus-research/xportr/wiki/Style-Guide-for-Roxygen-Headers) for conventions used in this package. +- [ ] Run `devtools::document()` so all `.Rd` files in the `man` folder and the `NAMESPACE` file in the project root are updated appropriately +- [ ] Run `pkgdown::build_site()` and check that all affected examples are displayed correctly and that all new/updated functions occur on the "Reference" page. +- [ ] Update NEWS.md if the changes pertain to a user-facing function (i.e. it has an @export tag) or documentation aimed at users (rather than developers) +- [ ] Address any updates needed for vignettes and/or templates +- [ ] Link the issue Development Panel so that it closes after successful merging. +- [ ] Fix merge conflicts +- [ ] Pat yourself on the back for a job well done! Much love to your accomplishment! From 495037d08505561360a167f400ee9c93c0d5d7a7 Mon Sep 17 00:00:00 2001 From: Ben Straub Date: Wed, 10 May 2023 20:55:22 -0400 Subject: [PATCH 309/337] fix: Update test-coverage.yaml to address failing CI --- .github/workflows/test-coverage.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-coverage.yaml b/.github/workflows/test-coverage.yaml index 0a44f49a..dadf5abe 100644 --- a/.github/workflows/test-coverage.yaml +++ b/.github/workflows/test-coverage.yaml @@ -18,7 +18,7 @@ jobs: steps: - uses: actions/checkout@v3 - - uses: r-lib/actions/setup-r@v1 + - uses: r-lib/actions/setup-r@v2 - uses: r-lib/actions/setup-pandoc@v1 From 50d109dbad8956813a52225c45309785eae1856d Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 11 May 2023 16:30:04 +0530 Subject: [PATCH 310/337] fix: update the r setup action to fix CI --- .github/workflows/pkgdown.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pkgdown.yaml b/.github/workflows/pkgdown.yaml index 07dea56d..16404107 100644 --- a/.github/workflows/pkgdown.yaml +++ b/.github/workflows/pkgdown.yaml @@ -14,7 +14,7 @@ jobs: steps: - uses: actions/checkout@v3 - - uses: r-lib/actions/setup-r@v1 + - uses: r-lib/actions/setup-r@v2 - uses: r-lib/actions/setup-pandoc@v1 From b19838da78101c5cff68390954b523820d840149 Mon Sep 17 00:00:00 2001 From: vedhav Date: Thu, 11 May 2023 16:33:26 +0530 Subject: [PATCH 311/337] fix: update the setup in spellcheck CI as well --- .github/workflows/spellcheck.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/spellcheck.yml b/.github/workflows/spellcheck.yml index 353b9682..42c7e327 100644 --- a/.github/workflows/spellcheck.yml +++ b/.github/workflows/spellcheck.yml @@ -32,7 +32,7 @@ jobs: fetch-depth: 0 - name: Setup R 📊 - uses: r-lib/actions/setup-r@v1 + uses: r-lib/actions/setup-r@v2 with: r-version: 4.1.3 From f20899236c16065911ffea863b47d44456b97b82 Mon Sep 17 00:00:00 2001 From: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Date: Thu, 11 May 2023 19:46:32 +0530 Subject: [PATCH 312/337] Update .github/ISSUE_TEMPLATE/01_bug_report.yml Co-authored-by: Ben Straub --- .github/ISSUE_TEMPLATE/01_bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml index bb70b4ab..10800caf 100644 --- a/.github/ISSUE_TEMPLATE/01_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - **Example:** Bug: xportr_format() does not assign SAS format for `DATE9.` variable level metadata + **Example:** Bug: xportr_format() does not assign SAS format for `DATE9.` metadata - type: textarea id: what-happened attributes: From 1f9d2d297cd540483582f10d14673bb02c6a1bb1 Mon Sep 17 00:00:00 2001 From: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Date: Thu, 11 May 2023 19:46:38 +0530 Subject: [PATCH 313/337] Update .github/ISSUE_TEMPLATE/01_bug_report.yml Co-authored-by: Ben Straub --- .github/ISSUE_TEMPLATE/01_bug_report.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/01_bug_report.yml b/.github/ISSUE_TEMPLATE/01_bug_report.yml index 10800caf..c89cc92d 100644 --- a/.github/ISSUE_TEMPLATE/01_bug_report.yml +++ b/.github/ISSUE_TEMPLATE/01_bug_report.yml @@ -27,7 +27,7 @@ body: id: logs attributes: label: Reproducible Example - description: We love code that can reproduce the example. Check out [reprex](https://reprex.tidyverse.org/articles/reprex-dos-and-donts.html) + description: We love code that can reproduce the bug. Check out [reprex](https://reprex.tidyverse.org/articles/reprex-dos-and-donts.html) placeholder: "Please give us as many details as you can! The faster we can recreate the bug, the faster we can get a fix in the works. Warning, Error Messages and Screenshots are also great." validations: required: false From 08aac591fa90fa33ea4d32e0028443d9d06f21ae Mon Sep 17 00:00:00 2001 From: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Date: Thu, 11 May 2023 19:47:03 +0530 Subject: [PATCH 314/337] Update .github/ISSUE_TEMPLATE/02_feature_request.yml Co-authored-by: Ben Straub --- .github/ISSUE_TEMPLATE/02_feature_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml index cf7ea559..927c80bd 100644 --- a/.github/ISSUE_TEMPLATE/02_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -20,7 +20,7 @@ body: attributes: label: Relevant Input description: Can you provide what the inputs should look like? - placeholder: "What should the input look like? REMINDER: no patient level data or company sensitive information should be shared via this open public issue" + placeholder: "What should the input look like? REMINDER: No patient level data or company sensitive information should be shared via this open public issue" validations: required: false - type: textarea From fa52c8806a9eac8c20e41636515f7b789c2f0f59 Mon Sep 17 00:00:00 2001 From: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Date: Thu, 11 May 2023 19:47:11 +0530 Subject: [PATCH 315/337] Update .github/ISSUE_TEMPLATE/02_feature_request.yml Co-authored-by: Ben Straub --- .github/ISSUE_TEMPLATE/02_feature_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml index 927c80bd..6a647481 100644 --- a/.github/ISSUE_TEMPLATE/02_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -28,7 +28,7 @@ body: attributes: label: Relevant Output description: Can you provide what the final output should look like? - placeholder: "What should the output look like? REMINDER: no patient level data or company sensitive information should be shared via this open public issue" + placeholder: "What should the output look like? REMINDER: No patient level data or company sensitive information should be shared via this open public issue" validations: required: false - type: textarea From 0635ab1890d77ee9c0d5c66e76ec821799f543a5 Mon Sep 17 00:00:00 2001 From: Vedha Viyash <49812166+vedhav@users.noreply.github.com> Date: Thu, 11 May 2023 19:47:18 +0530 Subject: [PATCH 316/337] Update .github/ISSUE_TEMPLATE/02_feature_request.yml Co-authored-by: Ben Straub --- .github/ISSUE_TEMPLATE/02_feature_request.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/02_feature_request.yml b/.github/ISSUE_TEMPLATE/02_feature_request.yml index 6a647481..e0b2597d 100644 --- a/.github/ISSUE_TEMPLATE/02_feature_request.yml +++ b/.github/ISSUE_TEMPLATE/02_feature_request.yml @@ -36,6 +36,6 @@ body: attributes: label: Reproducible Example/Pseudo Code description: Can you provide a working example or a sketch of how the code should work? - placeholder: "We love example code and it will speed up the process! REMINDER: no patient level data or company sensitive information should be shared via this open public issue" + placeholder: "We love example code and it will speed up the process! REMINDER: No patient level data or company sensitive information should be shared via this open public issue" validations: required: false From ce911751327f2dcce3bd0f4edc1e8179a58a8af9 Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 15 Jun 2023 15:59:32 +0000 Subject: [PATCH 317/337] Describe metadata type for df_label as dataset metadata --- R/df_label.R | 2 ++ R/length.R | 2 +- man/xportr_df_label.Rd | 4 ++-- man/xportr_format.Rd | 2 +- man/xportr_label.Rd | 8 ++++---- man/xportr_length.Rd | 8 ++++---- man/xportr_metadata.Rd | 2 +- man/xportr_order.Rd | 12 ++++++------ man/xportr_type.Rd | 14 +++++++------- 9 files changed, 28 insertions(+), 26 deletions(-) diff --git a/R/df_label.R b/R/df_label.R index 3c986c02..0b3b7194 100644 --- a/R/df_label.R +++ b/R/df_label.R @@ -3,6 +3,8 @@ #' Assigns dataset label from a dataset level metadata to a given data frame. #' This is stored in the 'label' attribute of the dataframe. #' +#' @param metadata A data frame containing dataset. See 'Metadata' section for +#' details. #' @inheritParams xportr_length #' #' @return Data frame with label attributes. diff --git a/R/length.R b/R/length.R index bb74ee02..17627268 100644 --- a/R/length.R +++ b/R/length.R @@ -6,7 +6,7 @@ #' the 'width' attribute of the column. #' #' @param .df A data frame of CDISC standard. -#' @param metadata A data frame containing dataset/variable level metadata. See +#' @param metadata A data frame containing variable level metadata. See #' 'Metadata' section for details. #' @param domain Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset #' the metadata object. If none is passed, then name of the dataset passed as diff --git a/man/xportr_df_label.Rd b/man/xportr_df_label.Rd index 88db94ee..e0a461fd 100644 --- a/man/xportr_df_label.Rd +++ b/man/xportr_df_label.Rd @@ -9,8 +9,8 @@ xportr_df_label(.df, metadata = NULL, domain = NULL, metacore = deprecated()) \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing dataset/variable level metadata. See -'Metadata' section for details.} +\item{metadata}{A data frame containing dataset. See 'Metadata' section for +details.} \item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset the metadata object. If none is passed, then name of the dataset passed as diff --git a/man/xportr_format.Rd b/man/xportr_format.Rd index 9f9043d3..a4f06222 100644 --- a/man/xportr_format.Rd +++ b/man/xportr_format.Rd @@ -9,7 +9,7 @@ xportr_format(.df, metadata = NULL, domain = NULL, metacore = deprecated()) \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing dataset/variable level metadata. See +\item{metadata}{A data frame containing variable level metadata. See 'Metadata' section for details.} \item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset diff --git a/man/xportr_label.Rd b/man/xportr_label.Rd index ff52c3e2..a74137ed 100644 --- a/man/xportr_label.Rd +++ b/man/xportr_label.Rd @@ -15,7 +15,7 @@ xportr_label( \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing dataset/variable level metadata. See +\item{metadata}{A data frame containing variable level metadata. See 'Metadata' section for details.} \item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset @@ -34,14 +34,14 @@ Data frame with label attributes for each variable. } \description{ Assigns variable label from a variable level metadata to a given data frame. -This function will give an error if a label is presented that is greater than +This function will give detect if a label is greater than 40 characters which isn't allowed in XPT v5. If labels aren't present for the variable it will be assigned an empty character value. Labels are stored in the 'label' attribute of the column. } \section{Messaging}{ - \code{label_log} is the primary messaging tool for -\code{xportr_label}. If there are any columns present in the '.df' that are not + \code{label_log()} is the primary messaging tool for +\code{xportr_label()}. If there are any columns present in the '.df' that are not noted in the metadata, they cannot be assigned a label and a message will be generated noting the number or variables that have not been assigned a label. diff --git a/man/xportr_length.Rd b/man/xportr_length.Rd index 409678e2..89fb5703 100644 --- a/man/xportr_length.Rd +++ b/man/xportr_length.Rd @@ -15,7 +15,7 @@ xportr_length( \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing dataset/variable level metadata. See +\item{metadata}{A data frame containing variable level metadata. See 'Metadata' section for details.} \item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset @@ -33,7 +33,7 @@ metadata now renamed with \code{metadata}} Data frame with \code{SASlength} attributes for each variable. } \description{ -Assigns SAS length from a variable level metadata to a given data frame. If a +Assigns SAS length from a metadata object to a given data frame. If a length isn't present for a variable the length value is set to 200 for character columns, and 8 for non-character columns. This value is stored in the 'width' attribute of the column. @@ -47,12 +47,12 @@ length. If variables were not found in the metadata and the value passed to the 'verbose' argument is 'stop', 'warn', or 'message', a message will be -generated detailing the variables that were missing in metadata. +generated detailing the variables that were missing in the metadata. } \section{Metadata}{ The argument passed in the 'metadata' argument can either -be a metacore object, or a data.frame containing the data listed below. If +be a \code{{metacore}} object, or a data.frame containing the data listed below. If metacore is used, no changes to options are required. For data.frame 'metadata' arguments three columns must be present: diff --git a/man/xportr_metadata.Rd b/man/xportr_metadata.Rd index f610f366..75f3005b 100644 --- a/man/xportr_metadata.Rd +++ b/man/xportr_metadata.Rd @@ -9,7 +9,7 @@ xportr_metadata(.df, metadata, domain = NULL) \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing dataset/variable level metadata. See +\item{metadata}{A data frame containing variable level metadata. See 'Metadata' section for details.} \item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset diff --git a/man/xportr_order.Rd b/man/xportr_order.Rd index b1018557..e8ea269c 100644 --- a/man/xportr_order.Rd +++ b/man/xportr_order.Rd @@ -15,7 +15,7 @@ xportr_order( \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing dataset/variable level metadata. See +\item{metadata}{A data frame containing variable level metadata. See 'Metadata' section for details.} \item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset @@ -33,14 +33,14 @@ metadata now renamed with \code{metadata}} Dataframe that has been re-ordered according to spec } \description{ -The \code{dplyr::arange} function is used to order the columns of the dataframe. -Any variables that are missing an order value are appended to the dataframe +The \code{dplyr::arrange()} function is used to order the columns of the dataframe. +Any variables that are missing an order value are appended to the end of the dataframe after all of the variables that have an order. } \section{Messaging}{ - \code{var_ord_msg} is the primary messaging tool for -\code{xportr_order}. There are two primary messages that are output from -\code{var_ord_msg}. The first is the "moved" variables. These are the variables + \code{var_ord_msg()} is the primary messaging tool for +\code{xportr_order()}. There are two primary messages that are output from +\code{var_ord_msg()}. The first is the "moved" variables. These are the variables that were not found in the metadata file and moved to the end of the dataset. A message will be generated noting the number, if any, of variables that were moved to the end of the dataset. If any variables were diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index d1d5b595..9c5896d6 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -15,7 +15,7 @@ xportr_type( \arguments{ \item{.df}{A data frame of CDISC standard.} -\item{metadata}{A data frame containing dataset/variable level metadata. See +\item{metadata}{A data frame containing variable level metadata. See 'Metadata' section for details.} \item{domain}{Appropriate CDSIC dataset name, e.g. ADAE, DM. Used to subset @@ -41,12 +41,12 @@ will collapse a column to a numeric type. If no type is passed for a variable, it is assumed to be numeric and coerced with \code{as.numeric}. } \section{Messaging}{ - \code{type_log} is the primary messaging tool for -\code{xportr_type}. The number of column types that mismatch the reported type -in the metadata, if any, is reported by by \code{xportr_type}. If there are any + \code{type_log()} is the primary messaging tool for +\code{xportr_type()}. The number of column types that mismatch the reported type +in the metadata, if any, is reported by by \code{xportr_type()}. If there are any type mismatches, and the 'verbose' argument is 'stop', 'warn', or -'message', the type mismatches will be detailed the actual type and the -type reported in the metadata. +'message', each mismatch will be detailed with the actual type in the data +and the type noted in the metadata. } \section{Metadata}{ @@ -54,7 +54,7 @@ type reported in the metadata. be a metacore object, or a data.frame containing the data listed below. If metacore is used, no changes to options are required. -For data.frame 'metadata' arguments three columns must be present: +For data.frame 'metadata' arguments four columns must be present: \enumerate{ \item Domain Name - passed as the 'xportr.domain_name' option. Default: "dataset". This is the column subset by the 'domain' argument in the From ddc813b7a7823cb6f52c8c2170ff37bfc544d4e2 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 15 Jun 2023 16:59:19 +0000 Subject: [PATCH 318/337] chore: #142 news update --- NEWS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/NEWS.md b/NEWS.md index 423f40d3..59badb87 100644 --- a/NEWS.md +++ b/NEWS.md @@ -11,6 +11,7 @@ * Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline (#44) * Metadata order columns are now coerced to numeric by default in `xportr_order()` to prevent character sorting (#149) * Message is shown on `xportr_*` functions when the metadata being used has multiple variables with the same name in the same domain (#128) +* Fixed an issue with `xport_type()` where `DT`, `DTM` variables with a format specified in the metadata (e.g. date9., datetime20.) were being converted to numeric, which will cause a 10 year difference when reading it back by `read_xpt()`. SAS's uniform start date is 1960 whereas Linux's uniform start date is 1970. ## Documentation From cf60609f9d039a38e401c063dc072589e982ffe0 Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 15 Jun 2023 17:08:07 +0000 Subject: [PATCH 319/337] review: #84 format update --- vignettes/deepdive.Rmd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index dcc8f6d9..63e182cb 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -394,7 +394,7 @@ Success! We have taken the metadata formats and applied them to the dataset. Ple str(adsl_fmt) ``` -At the time of `{xportr} v0.3.0` we have not implemented any warnings or error messaging for this function. However, `xportr_write()` through `xpt_validate()` will check that formats have been applied for Date-Time variables. +At the time of `{xportr} v0.3.0` we have not implemented any warnings or error messaging for this function. However, `xportr_write()` through `xpt_validate()` will check that formats applied are valid SAS formats. ## `xportr_write()` From 67b6925d2a9e4c1f1de8f585b240bf054496898d Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 15 Jun 2023 17:17:06 +0000 Subject: [PATCH 320/337] docs: #84 adjusted type discussion --- vignettes/deepdive.Rmd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 63e182cb..5f087a59 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -245,7 +245,7 @@ datatable( ## `xportr_type()` -We are going to explore the type column in the metadata object. A submission to a Health Authority should only have character and numeric types in the data. In the `ADSL` data we have several columns that are in the Date type: `TRTSDT`, `TRTEDT`, `DISONSDT`, `VISIT1DT` and `RFENDT`. We will change one variable type to a [factor variable](https://forcats.tidyverse.org/), which is a common data structure in R, to give us some educational opportunities. +We are going to explore the type column in the metadata object. A submission to a Health Authority should only have character and numeric types in the data. In the `ADSL` data we have several columns that are in the Date type: `TRTSDT`, `TRTEDT`, `DISONSDT`, `VISIT1DT` and `RFENDT` - under the hood these are actually numeric values and will be left as is. We will change one variable type to a [factor variable](https://forcats.tidyverse.org/), which is a common data structure in R, to give us some educational opportunities to see `xportr_type()` in action. ```{r} adsl_fct <- adsl %>% @@ -270,7 +270,7 @@ adsl_type_glimpse <- adsl_type %>% select(STUDYID, TRTSDT, TRTEDT, DISONSDT, VISIT1DT, RFENDT) ``` -Success! As we can see below, `xportr_type()` applied the types from the metadata object to the below columns converting them all to the proper type. The functions in `{xportr}` also display this coercion to the user in the console, which is seen above. +Success! As we can see below, `xportr_type()` applied the types from the metadata object to the `STUDYID` variables converting to the proper type. The functions in `{xportr}` also display this coercion to the user in the console, which is seen above. ```{r, echo = TRUE} glimpse(adsl_type_glimpse) From 3fca4a53059377b1e62c9be963b01b0098a12603 Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 15 Jun 2023 17:33:41 +0000 Subject: [PATCH 321/337] Push up extra type docs --- R/type.R | 12 +++++++++++- man/xportr_type.Rd | 13 ++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/R/type.R b/R/type.R index 605e7868..0114309c 100644 --- a/R/type.R +++ b/R/type.R @@ -5,7 +5,17 @@ #' 'xportr.character_types' option is used to explicitly collapse the class of a #' column to character using `as.character`. Similarly, 'xportr.numeric_types' #' will collapse a column to a numeric type. If no type is passed for a -#' variable, it is assumed to be numeric and coerced with `as.numeric`. +#' variable and it isn't identifed as a timing variable, it is assumed to be numeric and coerced with `as.numeric`. +#' +#' Certain care should be taken when using timing variables. R serializes dates +#' based on a reference date of 01/01/1970 where XPT uses 01/01/1960. This can +#' result in dates being 10 years off when outputting from R to XPT if you're +#' using a date class. For this reason, `xportr` will try to determine what +#' should happen with variables that appear to be used to denote time. +#' +#' For variables that end in DT, DTM, or, TM, if they are not explicitly noted +#' in 'xportr.numeric_types' or 'xportr.character_types', they are coerced to +#' numeric results. #' #' @inheritParams xportr_length #' diff --git a/man/xportr_type.Rd b/man/xportr_type.Rd index c0380401..abfa41d8 100644 --- a/man/xportr_type.Rd +++ b/man/xportr_type.Rd @@ -38,7 +38,18 @@ attempts to collapse R classes to those two XPT types. The 'xportr.character_types' option is used to explicitly collapse the class of a column to character using \code{as.character}. Similarly, 'xportr.numeric_types' will collapse a column to a numeric type. If no type is passed for a -variable, it is assumed to be numeric and coerced with \code{as.numeric}. +variable and it isn't identifed as a timing variable, it is assumed to be numeric and coerced with \code{as.numeric}. +} +\details{ +Certain care should be taken when using timing variables. R serializes dates +based on a reference date of 01/01/1970 where XPT uses 01/01/1960. This can +result in dates being 10 years off when outputting from R to XPT if you're +using a date class. For this reason, \code{xportr} will try to determine what +should happen with variables that appear to be used to denote time. + +For variables that end in DT, DTM, or, TM, if they are not explicitly noted +in 'xportr.numeric_types' or 'xportr.character_types', they are coerced to +numeric results. } \section{Messaging}{ \code{type_log()} is the primary messaging tool for From d8055defeef6d2aa3814a3bf3753b7e60542f01c Mon Sep 17 00:00:00 2001 From: bs832471 Date: Thu, 15 Jun 2023 17:35:23 +0000 Subject: [PATCH 322/337] #fix #157 removing internal after merge mistake --- _pkgdown.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index 6b196556..8e4bdb40 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -44,13 +44,6 @@ reference: - adsl - var_spec - - title: internal - contents: - - cli_theme_tests - - expect_attr_width - - minimal_metadata - - minimal_table - articles: - title: ~ navbar: ~ From 3d7bd4271dcdd10d234a40d1fa7f603af5b5eacd Mon Sep 17 00:00:00 2001 From: elimillera Date: Thu, 15 Jun 2023 17:39:21 +0000 Subject: [PATCH 323/337] Update vignettes to remove removed functions --- vignettes/deepdive.Rmd | 2 +- vignettes/xportr.Rmd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index 5f087a59..b364fc68 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -385,7 +385,7 @@ This example is slightly different from previous examples. You will need to use ```{r, echo = TRUE} adsl_fmt <- adsl %>% xportr_type(metadata = var_spec, domain = "ADSL", verbose = "warn") %>% - xportr_format(metadata = var_spec, domain = "ADSL", verbose = "warn") + xportr_format(metadata = var_spec, domain = "ADSL") ``` Success! We have taken the metadata formats and applied them to the dataset. Please inspect variables like `TRTSDT` or `DISONSDT` to see the `DATE9.` format being applied. diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 1d62ba6f..46a2b929 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -277,7 +277,7 @@ adsl %>% xportr_length(var_spec, "ADSL", "message") %>% xportr_label(var_spec, "ADSL", "message") %>% xportr_order(var_spec, "ADSL", "message") %>% - xportr_format(var_spec, "ADSL", "message") %>% + xportr_format(var_spec, "ADSL") %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` From 8ca853b0b99b3dd2e4dc8e065fcdf42e6cfd6295 Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 16 Jun 2023 14:51:28 +0000 Subject: [PATCH 324/337] Update cran comments and remove azure pipeline --- azure_pipeline.yaml | 15 --------------- cran-comments.md | 21 ++++++++------------- 2 files changed, 8 insertions(+), 28 deletions(-) delete mode 100644 azure_pipeline.yaml diff --git a/azure_pipeline.yaml b/azure_pipeline.yaml deleted file mode 100644 index 8488a471..00000000 --- a/azure_pipeline.yaml +++ /dev/null @@ -1,15 +0,0 @@ -trigger: none - -pool: - vmImage: 'ubuntu-latest' - -container: 'rocker/tidyverse:latest' - -steps: - -- script: sudo Rscript -e 'devtools::check(cran = FALSE)' - displayName: 'Package Check' - continueOnError: true - -- script: Rscript -e 'sessionInfo()' - displayName: 'R Version' diff --git a/cran-comments.md b/cran-comments.md index 55ff521f..72663610 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,22 +1,17 @@ -## xportr 0.1.0 Submission 2 - -Per comments from Gregor Seyer, the optoins setting in the xportr.Rmd was removed. A grep was also run to check for other instances. - +## xportr 0.3.0 Check Results: - No Errors or warnings + 1 NOTE ### Notes: - - New Submission - - Possibly misspelled words in DESCRIPTION. - -All words in description are common accronyms in industry: +Found the following (possibly) invalid URLs: + URL: https://support.posit.co/hc/en-us/articles/360047157094-Managing-R-with-Rprofile-Renviron-Rprofile-site-Renviron-site-rsession-conf-and-repos-conf + From: man/xportr-package.Rd + Status: 403 + Message: Forbidden - - ADaM - Analysis Dataset Model - - CDISC - Clinical Data Interchange Standards Consortium - - SDTM - Standard Data Tabulation Model - - XPT - SAS Transport File +This is a valid URL that is failing due to the website not allowing the site to be scraped by pipelines/robots. ### Tested on: From 47d0a9a13e5d0f28d0f40dfe339755152f2a0f00 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 16 Jun 2023 09:51:48 -0500 Subject: [PATCH 325/337] Update NEWS.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: AndrĂ© VerĂ­ssimo <211358+averissimo@users.noreply.github.com> --- NEWS.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 262e0907..9d2a4c47 100644 --- a/NEWS.md +++ b/NEWS.md @@ -11,7 +11,9 @@ * Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline (#44) * Metadata order columns are now coerced to numeric by default in `xportr_order()` to prevent character sorting (#149) * Message is shown on `xportr_*` functions when the metadata being used has multiple variables with the same name in the same domain (#128) -* Fixed an issue with `xport_type()` where `DT`, `DTM` variables with a format specified in the metadata (e.g. date9., datetime20.) were being converted to numeric, which will cause a 10 year difference when reading it back by `read_xpt()`. SAS's uniform start date is 1960 whereas Linux's uniform start date is 1970. +* Fixed an issue with `xport_type()` where `DT`, `DTM` variables with a format specified in the metadata (e.g. date9., datetime20.) were being converted to numeric, which will cause a 10 year difference when reading it back by `read_xpt()`. SAS's uniform start date is 1960 whereas Linux's uniform start date is 1970 (#142). +* Fixed an issue with R's pipe `|>` that was causing functions to abort (#97) +* Removed `<` and `>` as illegal characters in variable and dataset labels (#98) ## Documentation From e5b06013b6ee786abd2346130ede39683e0d1210 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 16 Jun 2023 09:51:54 -0500 Subject: [PATCH 326/337] Update NEWS.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: AndrĂ© VerĂ­ssimo <211358+averissimo@users.noreply.github.com> --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index 9d2a4c47..ab51adbe 100644 --- a/NEWS.md +++ b/NEWS.md @@ -20,7 +20,7 @@ * Moved `{pkgdown}` site to bootswatch. Enabled search and linked slack icon (#122). * Additional Deep Dive vignette showcasing functions and quality of life utilities for processing `xpts` created (#84) * Get Started vignette spruced up. Messages are now displayed and link to Deep Dive vignette (#150) - +* Increase test coverage to 100% (#82) ## Deprecation and Breaking Changes From 906c185195ee2efaa4030a853324f7d04bb902ac Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 16 Jun 2023 09:52:01 -0500 Subject: [PATCH 327/337] Update NEWS.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: AndrĂ© VerĂ­ssimo <211358+averissimo@users.noreply.github.com> --- NEWS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/NEWS.md b/NEWS.md index ab51adbe..e17ac06b 100644 --- a/NEWS.md +++ b/NEWS.md @@ -5,7 +5,7 @@ * Fixed an issue where `xportr_type()` would overwrite column labels, widths, and "sas.formats" * Fixed messaging of `xportr_order()`to give better visibility of the number of variables being reordered. * Add new argument to `xportr_write()` to allow users to specify how xpt validation checks are handled. -* Fixed bug where character_types were case sensitive. They are now case insensitive. +* Fixed bug where character_types were case sensitive. They are now case insensitive (#77). * Updated `xportr_type()` to make type coercion more explicit. * `xpt_validate` updated to accept iso8601 date formats. (#76) * Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline (#44) From e188f502a5fbc836fe57394947ad347e64263deb Mon Sep 17 00:00:00 2001 From: bs832471 Date: Fri, 16 Jun 2023 15:50:35 +0000 Subject: [PATCH 328/337] #docs: example and ref blurb --- R/write.R | 11 +++++++++++ _pkgdown.yml | 8 +++++--- man/xportr_write.Rd | 11 +++++++++++ 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/R/write.R b/R/write.R index 371bc9b9..ff9db274 100644 --- a/R/write.R +++ b/R/write.R @@ -23,6 +23,17 @@ #' #' @return A data frame. `xportr_write()` returns the input data invisibly. #' @export +#' +#' @examples +#' adsl <- data.frame( +#' Subj = as.character(123, 456, 789), +#' Different = c("a", "b", "c"), +#' Val = c("1", "2", "3"), +#' Param = c("param1", "param2", "param3") +#' ) +#' +#' xportr_write(adsl, path = "adsl.xpt", label = "Subject-Level Analysis", strict_checks = FALSE) +#' xportr_write <- function(.df, path, label = NULL, strict_checks = FALSE) { path <- normalizePath(path, mustWork = FALSE) diff --git a/_pkgdown.yml b/_pkgdown.yml index 8e4bdb40..aa15825a 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -19,7 +19,7 @@ navbar: aria-label: slack reference: - - title: The six core xportr functions + - title: Core xportr functions - contents: - xportr_type - xportr_length @@ -27,8 +27,11 @@ reference: - xportr_write - xportr_format - xportr_order + - xportr_df_label + - xportr_metadata - title: xportr helper functions + desc: Utility functions called within core xportr functions - contents: - label_log - length_log @@ -36,8 +39,7 @@ reference: - var_names_log - var_ord_msg - xportr_logger - - xportr_df_label - - xportr_metadata + - title: xportr example datasets and specification files - contents: diff --git a/man/xportr_write.Rd b/man/xportr_write.Rd index 3399ab18..b68f9643 100644 --- a/man/xportr_write.Rd +++ b/man/xportr_write.Rd @@ -34,3 +34,14 @@ to the FDA. \item SAS type are stored in the "SAStype" attribute. } } +\examples{ +adsl <- data.frame( + Subj = as.character(123, 456, 789), + Different = c("a", "b", "c"), + Val = c("1", "2", "3"), + Param = c("param1", "param2", "param3") +) + +xportr_write(adsl, path = "adsl.xpt", label = "Subject-Level Analysis", strict_checks = FALSE) + +} From e2149a3da09292e4e5f66757dcc7eec4baacbcb3 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 16 Jun 2023 13:24:06 -0500 Subject: [PATCH 329/337] Create devcontainer.json --- .devcontainer/devcontainer.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .devcontainer/devcontainer.json diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..d17145d3 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,6 @@ +{ + "image": "mcr.microsoft.com/devcontainers/universal:2", +"features": { + "ghcr.io/rocker-org/devcontainer-features/renv-cache:0": {} + } +} From 3788959b97b076aec21602ec7efd54343da902ab Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 16 Jun 2023 13:28:53 -0500 Subject: [PATCH 330/337] Update devcontainer.json --- .devcontainer/devcontainer.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index d17145d3..61af8bee 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,6 +1,9 @@ { "image": "mcr.microsoft.com/devcontainers/universal:2", "features": { - "ghcr.io/rocker-org/devcontainer-features/renv-cache:0": {} + "ghcr.io/rocker-org/devcontainer-features/renv-cache:0": {}, + "ghcr.io/rocker-org/devcontainer-features/r-packages:1": { + "packages": "github::atorus-research/xportr" + } } } From fd0d4eca599190e4d979ae417e898972f8af196c Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 16 Jun 2023 13:35:34 -0500 Subject: [PATCH 331/337] Update devcontainer.json add new packages --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 61af8bee..29db87f2 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -3,7 +3,7 @@ "features": { "ghcr.io/rocker-org/devcontainer-features/renv-cache:0": {}, "ghcr.io/rocker-org/devcontainer-features/r-packages:1": { - "packages": "github::atorus-research/xportr" + "packages": "dplyr,purrr,stringr,magrittr,glue,rlang,cli,tidyselect,readr,janitor,tm,haven,lifecycle,testthat,withr,knitr,rmarkdown,readxl, DT,labelled,admiral,devtools,spelling,usethis,lintr,metacore" } } } From 227eeac53321c472fdce769c3e0db2c5b727a8c5 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 16 Jun 2023 13:38:20 -0500 Subject: [PATCH 332/337] Update devcontainer.json --- .devcontainer/devcontainer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 29db87f2..2e6be42b 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,7 @@ { "image": "mcr.microsoft.com/devcontainers/universal:2", "features": { - "ghcr.io/rocker-org/devcontainer-features/renv-cache:0": {}, + "ghcr.io/rocker-org/devcontainer-features/r-rig:1": {}, "ghcr.io/rocker-org/devcontainer-features/r-packages:1": { "packages": "dplyr,purrr,stringr,magrittr,glue,rlang,cli,tidyselect,readr,janitor,tm,haven,lifecycle,testthat,withr,knitr,rmarkdown,readxl, DT,labelled,admiral,devtools,spelling,usethis,lintr,metacore" } From 5d1d8f7468edb2f80be6fb5dfa9a41083e91e6d4 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 16 Jun 2023 13:41:39 -0500 Subject: [PATCH 333/337] Update and rename devcontainer.json to devcontainer.jso --- .devcontainer/{devcontainer.json => devcontainer.jso} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .devcontainer/{devcontainer.json => devcontainer.jso} (80%) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.jso similarity index 80% rename from .devcontainer/devcontainer.json rename to .devcontainer/devcontainer.jso index 2e6be42b..98a41b90 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.jso @@ -3,7 +3,7 @@ "features": { "ghcr.io/rocker-org/devcontainer-features/r-rig:1": {}, "ghcr.io/rocker-org/devcontainer-features/r-packages:1": { - "packages": "dplyr,purrr,stringr,magrittr,glue,rlang,cli,tidyselect,readr,janitor,tm,haven,lifecycle,testthat,withr,knitr,rmarkdown,readxl, DT,labelled,admiral,devtools,spelling,usethis,lintr,metacore" + "packages": "dplyr,purrr,stringr,magrittr,glue,rlang,cli,tidyselect,readr,janitor,tm,haven,lifecycle,testthat,withr,knitr,rmarkdown,readxl,DT,labelled,admiral,devtools,spelling,usethis,lintr,metacore" } } } From 97b31f541fb7095bd9a605e9697e1a113c8c0554 Mon Sep 17 00:00:00 2001 From: Eli Miller Date: Fri, 16 Jun 2023 13:41:52 -0500 Subject: [PATCH 334/337] Rename devcontainer.jso to devcontainer.json --- .devcontainer/{devcontainer.jso => devcontainer.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .devcontainer/{devcontainer.jso => devcontainer.json} (100%) diff --git a/.devcontainer/devcontainer.jso b/.devcontainer/devcontainer.json similarity index 100% rename from .devcontainer/devcontainer.jso rename to .devcontainer/devcontainer.json From 0405024fd490fc4360c65a0dd2ae161fa4bce8f0 Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 16 Jun 2023 18:59:30 +0000 Subject: [PATCH 335/337] Passing R CMD CHeck --- .Rbuildignore | 1 + R/write.R | 5 ++++- man/xportr_write.Rd | 5 ++++- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.Rbuildignore b/.Rbuildignore index eb76063e..ac3ba4ae 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -24,3 +24,4 @@ ^cran-comments\.md$ ^example_data_specs$ +^\.devcontainer$ diff --git a/R/write.R b/R/write.R index ff9db274..63a19ac4 100644 --- a/R/write.R +++ b/R/write.R @@ -32,7 +32,10 @@ #' Param = c("param1", "param2", "param3") #' ) #' -#' xportr_write(adsl, path = "adsl.xpt", label = "Subject-Level Analysis", strict_checks = FALSE) +#' xportr_write(adsl, +#' path = paste0(tempdir(),"/adsl.xpt"), +#' label = "Subject-Level Analysis", +#' strict_checks = FALSE) #' xportr_write <- function(.df, path, label = NULL, strict_checks = FALSE) { path <- normalizePath(path, mustWork = FALSE) diff --git a/man/xportr_write.Rd b/man/xportr_write.Rd index b68f9643..31c1ed1a 100644 --- a/man/xportr_write.Rd +++ b/man/xportr_write.Rd @@ -42,6 +42,9 @@ adsl <- data.frame( Param = c("param1", "param2", "param3") ) -xportr_write(adsl, path = "adsl.xpt", label = "Subject-Level Analysis", strict_checks = FALSE) +xportr_write(adsl, + path = paste0(tempdir(),"/adsl.xpt"), + label = "Subject-Level Analysis", + strict_checks = FALSE) } From 7dcf325f485931a6d6b73d2500aa6efd0bb297e3 Mon Sep 17 00:00:00 2001 From: elimillera Date: Fri, 16 Jun 2023 19:08:41 +0000 Subject: [PATCH 336/337] fix style --- R/write.R | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/R/write.R b/R/write.R index 63a19ac4..57367fc2 100644 --- a/R/write.R +++ b/R/write.R @@ -33,9 +33,10 @@ #' ) #' #' xportr_write(adsl, -#' path = paste0(tempdir(),"/adsl.xpt"), -#' label = "Subject-Level Analysis", -#' strict_checks = FALSE) +#' path = paste0(tempdir(), "/adsl.xpt"), +#' label = "Subject-Level Analysis", +#' strict_checks = FALSE +#' ) #' xportr_write <- function(.df, path, label = NULL, strict_checks = FALSE) { path <- normalizePath(path, mustWork = FALSE) From 852ca17cf5dab61efb197bb56dfa699feeee0c67 Mon Sep 17 00:00:00 2001 From: vedhav Date: Mon, 19 Jun 2023 08:49:45 +0530 Subject: [PATCH 337/337] docs: make some minor document related changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Remove the argument verbose from the xportr_format() function calls in examples * Removes the warning when trying to build the pkgdown site by having consistent VignetteIndexEntry name for “Getting Started” * Minor format changes to the NEWS.md * Lint the _pkgdown configuration --- NEWS.md | 9 ++++----- README.Rmd | 2 +- _pkgdown.yml | 4 +--- man/xportr_write.Rd | 7 ++++--- vignettes/deepdive.Rmd | 2 +- vignettes/xportr.Rmd | 2 +- 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/NEWS.md b/NEWS.md index e17ac06b..c066e5e7 100644 --- a/NEWS.md +++ b/NEWS.md @@ -6,7 +6,7 @@ * Fixed messaging of `xportr_order()`to give better visibility of the number of variables being reordered. * Add new argument to `xportr_write()` to allow users to specify how xpt validation checks are handled. * Fixed bug where character_types were case sensitive. They are now case insensitive (#77). -* Updated `xportr_type()` to make type coercion more explicit. +* Updated `xportr_type()` to make type coercion more explicit. * `xpt_validate` updated to accept iso8601 date formats. (#76) * Added function `xportr_metadata()` to explicitly set metadata at the start of a pipeline (#44) * Metadata order columns are now coerced to numeric by default in `xportr_order()` to prevent character sorting (#149) @@ -22,8 +22,7 @@ * Get Started vignette spruced up. Messages are now displayed and link to Deep Dive vignette (#150) * Increase test coverage to 100% (#82) -## Deprecation -and Breaking Changes +## Deprecation and Breaking Changes * The `metacore` argument has been renamed to `metadata` in the following six xportr functions: `xportr_df_label()`, `xportr_format()`, `xportr_label()`, `xportr_length()`, `xportr_order()`, and `xportr_type()`. Please update your code to use the new `metadata` argument in place of `metacore`. @@ -34,9 +33,9 @@ and Breaking Changes # xportr 0.1.0 -Beta release for xportr +Beta release for xportr -* Added exported functions `xportr_varnames` and `xportr_tidy_rename` into `dev` folder found on GitHub Repostiory. Intention to move into packages after CRAN release. +* Added exported functions `xportr_varnames` and `xportr_tidy_rename` into `dev` folder found on GitHub Repostiory. Intention to move into packages after CRAN release. * Fixed xportr_format() bug * Using admiral ADSL dataset in examples diff --git a/README.Rmd b/README.Rmd index 201566fa..d7d92e30 100644 --- a/README.Rmd +++ b/README.Rmd @@ -133,7 +133,7 @@ adsl %>% xportr_length(var_spec, "ADSL", verbose = "warn") %>% xportr_label(var_spec, "ADSL", verbose = "warn") %>% xportr_order(var_spec, "ADSL", verbose = "warn") %>% - xportr_format(var_spec, "ADSL", verbose = "warn") %>% + xportr_format(var_spec, "ADSL") %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` diff --git a/_pkgdown.yml b/_pkgdown.yml index aa15825a..6c035b09 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -19,7 +19,7 @@ navbar: aria-label: slack reference: - - title: Core xportr functions + - title: Core xportr functions - contents: - xportr_type - xportr_length @@ -40,7 +40,6 @@ reference: - var_ord_msg - xportr_logger - - title: xportr example datasets and specification files - contents: - adsl @@ -51,4 +50,3 @@ articles: navbar: ~ contents: - deepdive - diff --git a/man/xportr_write.Rd b/man/xportr_write.Rd index 31c1ed1a..f1b89fc9 100644 --- a/man/xportr_write.Rd +++ b/man/xportr_write.Rd @@ -43,8 +43,9 @@ adsl <- data.frame( ) xportr_write(adsl, - path = paste0(tempdir(),"/adsl.xpt"), - label = "Subject-Level Analysis", - strict_checks = FALSE) + path = paste0(tempdir(), "/adsl.xpt"), + label = "Subject-Level Analysis", + strict_checks = FALSE +) } diff --git a/vignettes/deepdive.Rmd b/vignettes/deepdive.Rmd index b364fc68..8f1ccac0 100644 --- a/vignettes/deepdive.Rmd +++ b/vignettes/deepdive.Rmd @@ -170,7 +170,7 @@ adsl %>% xportr_length(var_spec, "ADSL", "message") %>% xportr_label(var_spec, "ADSL", "message") %>% xportr_order(var_spec, "ADSL", "message") %>% - xportr_format(var_spec, "ADSL", "message") %>% + xportr_format(var_spec, "ADSL") %>% xportr_write("adsl.xpt", label = "Subject-Level Analysis Dataset") ``` diff --git a/vignettes/xportr.Rmd b/vignettes/xportr.Rmd index 46a2b929..1c6acdb0 100644 --- a/vignettes/xportr.Rmd +++ b/vignettes/xportr.Rmd @@ -5,7 +5,7 @@ output: toc: true check_title: TRUE vignette: > - %\VignetteIndexEntry{xportr} + %\VignetteIndexEntry{Getting Started} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} ---