Presentación

Luego de la exploración, organización y limpieza de los datos obtenidos por el #MenstruScrapper (en otro script), en el presente documento de trabajo se encuentra el cálculo del costo de menstruar en Argentina, estimación realizada desde la campaña #MenstruAccion y EcoFeminitas.

En el archivo README de la carpeta Fuentes se encuentran aclaradas todas las fuentes adicionales a las que se recurrió para realizar el cálculo.

Preparando el entorno de trabajo

Comenzamos levantando las librerías necesarias, y cargando los datos que se encuentran en formato .RDS. Aprovechamos para tener una vista previa de los datos.

library(tidyverse)
library(readxl)
library(DT)
datos <- readRDS("Fuentes/precios-gestion-menstrual-2020-09-06-limpio.RDS")

head(datos)

A su vez, se carga la estimación, por cada provincia, de personas que menstrúan. Como está aclarado en la carpeta de fuentes, esto sale de las proyecciones poblacionales del INDEC para 2020, teniendo en cuenta que la menarca se estima en los 13 años y la menopausia en 49 años. Estos datos se van a utilizar para ponderar el precio promedio de cada provincia a la hora de agregar en un indicador nacional. Como se encuentran en un archivo .xls, usamos la función read_excel(). Obtenemos también una vista previa de la estructura de estos datos.

menstruan <- read_excel("Fuentes/poblaciones.xls")

head(menstruan)

A continuación, calculamos el total a nivel nacional de personas que menstrúan, sumando los datos de todas las provincias. Y, dividiendo los datos de cada provincia por dicho total, obtenemos las proporciones que nos van a servir para ponderar los promedios de precio según el peso de cada una de las provincias. Como guardo estas modificaciones bajo el mismo nombre, la información será pisada en la misma tabla menstruan, de la que se vuelve a presentar una vista previa.

menstruan <- menstruan %>% 
  mutate(total = sum(Menstruan),
         pond = Menstruan/total) %>% 
  select(Provincia, pond)

head(menstruan)

Además, considerando que hay outliers (valores atípicos) en los precios unitarios, a la hora de calcular los promedios de precios provinciales se remueven “las colas” de la distribución, utilizando una media alfa podada:

  • alfa = 2.5%

Cálculo y Resultados

A continuación ya procedemos a calcular los precios promedio de toallitas y tampones. Para el caso del total nacional, primero habrá que calcular los precios promedio (por unidad) de cada provincia, para luego agregarlos en un promedio general. Una vez que tenemos precios representativos de toallitas y tampones, podremos estimar un costo anual por persona de acuerdo a las estimaciones de cuántos ciclos por año presentan las personas que menstrúan, y cuántos productos utilizan por ciclo.

Total Nacional

Toallitas

Promedio del precio por unidad

Para calcular el precio promedio de cada provincia tomamos los datos, los filtramos para quedarnos únicamente con las toallitas, agrupando las observaciones según la variable Provincia. Con summarise() podemos definir indicadores que agregan la información para cada grupo, así que definimos el promedio provincial como una media podada. Es en el parámetro trim que se aclara la proporción de los datos que se podan. Finalmente, anexamos en una nueva columna los ponderadores de cada provincia, así toda la información necesaria para el cálculo del promedio nacional se encuentra en la misma tabla.

toallitas <- datos %>% 
  filter(Categoría == "toallitas") %>%
  group_by(Provincia) %>% 
  summarise(prom = mean(precio_unidad, trim = 0.025)) %>% 
  left_join(., menstruan, by = "Provincia")

head(toallitas)

Luego, el valor promedio para el total nacional se calcula como una media ponderada. La función weighted.mean() nos permite aclarar la variable a promediar, y la variable que funciona como ponderador.

valor_toallitas <- weighted.mean(toallitas$prom, toallitas$pond)

print(paste("Toallitas: El precio promedio por unidad es de $", round(valor_toallitas, 2)),)
[1] "Toallitas: El precio promedio por unidad es de $ 10.46"
Gasto por año por persona

El gasto anual por persona se calcula teniendo en cuenta:

  • ciclos por año: 13
  • productos utilizados por ciclo: 22

(Ambos datos se encuentran aclarados en las Fuentes)

ciclos_por_anio <- 13
productos_por_ciclo <- 22
productos_por_anio <- ciclos_por_anio * productos_por_ciclo

gasto_por_anio_toallitas <- valor_toallitas * productos_por_anio

print(paste("Toallitas: El gasto promedio por año por persona es de $", round(gasto_por_anio_toallitas, 2)))
[1] "Toallitas: El gasto promedio por año por persona es de $ 2991.83"

Tampones

Se realiza un procedimiento semejante para el caso de los tampones.

Promedio del precio por unidad
tampones <- datos %>% 
  filter(Categoría == "tampones") %>%
  group_by(Provincia) %>% 
  summarise(prom = mean(precio_unidad, trim = 0.025)) %>% 
  left_join(., menstruan, by = "Provincia")

valor_tampones <- weighted.mean(tampones$prom, tampones$pond)

print(paste("Tampones: El precio promedio por unidad es de $", round(valor_tampones, 2)))
[1] "Tampones: El precio promedio por unidad es de $ 13.72"
Gasto por año por persona

El gasto anual por persona se calcula teniendo en cuenta:

  • ciclos por año: 13
  • productos utilizados por ciclo: 22
gasto_por_anio_tampones <- valor_tampones * productos_por_anio

print(paste("Tampones: El gasto promedio por año por persona es de $", round(gasto_por_anio_tampones, 2)))
[1] "Tampones: El gasto promedio por año por persona es de $ 3924.88"

Por provincia

Para obtener los datos de cada provincia el procedimiento es aún más sencillo. En la variable gasto_por_anio, cada precio promedio se multiplica por la cantidad de productos que se utilizan anualmente. Por una cuestión de exposición, se quitan de la tabla las columnas con aquellos precios promedios por unidad, y los ponderadores provinciales.

Toallitas

Gasto por año por persona
toallitas <- toallitas %>% 
  mutate(gasto_por_anio = round(prom * productos_por_anio, 2)) %>% 
  select(-prom, -pond) %>% 
  arrange(gasto_por_anio)

toallitas %>%
    datatable(
    extensions = 'Buttons', 
    options = list(dom = 'Bfrtip', 
                   buttons = c('copy', 'csv', 'excel', 'pdf', 'print')))

Tampones

Gasto por año por persona
tampones <- tampones %>% 
  mutate(gasto_por_anio = round(prom * productos_por_anio, 2)) %>% 
  select(-prom, -pond) %>% 
  arrange(gasto_por_anio)

tampones %>% 
    datatable(
    extensions = 'Buttons', 
    options = list(dom = 'Bfrtip', 
                   buttons = c('copy', 'csv', 'excel', 'pdf', 'print')))

Aumentos

Como esta es la cuarta vez que realizamos este ejercicio de estimación semestral, podemos ver cómo evolucionaron los precios de toallitas y tampones en el último año. También, con los datos del Índice de Precios al Consumidor (IPC - INDEC), se puede realizar una comparación entre la evolución de estos productos de gestión menstrual y el nivel general de precios, el rubro alimentos y bebidas no alcohólicas, y el de Salud. Ambas series se levantan desde archivos de extensión .xlsx en las tablas serie_inflacion y precios_pgm.

serie_inflacion <- read_excel("Fuentes/serie_inflacion.xlsx")
precios_pgm <- read_excel("Fuentes/serie_precios_pgm.xlsx")
head(serie_inflacion)
head(precios_pgm)

Asegurándonos de que los datos se encuentran ordenados por fecha, podemos transformar ambas series para que se encuentren expresadas con el mes de marzo 2019 = 100. De esta forma podremos comparar la evolución de ambas. Esto lo hacemos modificando las series con las que contamos dividiendo todos los valores por el primero de ellos (y multiplicando por 100). La selección del primer elemento de la serie se realizó con la función first().

base100 <- serie_inflacion %>% 
  mutate(`Nivel General` = `Nivel General`/first(`Nivel General`) * 100,
         `Alimentos y bebidas no alcohólicas` = `Alimentos y bebidas no alcohólicas`/
           first(`Alimentos y bebidas no alcohólicas`) * 100,
         Salud = Salud/first(Salud) * 100)

head(base100)
pgm_100 <- precios_pgm %>% 
  mutate(Toallitas = Toallitas/first(Toallitas) * 100,
         Tampones = Tampones/first(Tampones) * 100)

head(pgm_100)

Podemos anexar la evolución de los precios de los productos de gestión menstrual a la serie de inflación, por más que esta última tenga valores mensuales y nuestros datos se hayan recolectado cada seis meses, utilizando Mes como variable de link. Luego reordenamos la información para que todas las variables, excepto Mes, se presenten en una variable Categoría (con valores “Nivel General”, “Salud”, “Toallitas”, etc.), y los valores de cada serie se agrupen en la variable Indice. No habrá datos en diversos meses para toallitas y tampones, así que filtramos esas filas vacías, y finalmente creamos la variable Grupo para identificar como “IPC” a las categorías del índice de precios al consumidor, y como “PGM” a los productos de gestión menstrual.

# Esto se puede correr "de a poco" para ver cómo cambian las cosas en cada paso
base100 <- base100 %>% 
  left_join(., pgm_100, by = "Mes") %>% 
  pivot_longer(-Mes, names_to = "Categoria", values_to = "Indice") %>% 
  filter(!is.na(Indice)) %>% 
  mutate(Grupo = case_when(Categoria %in% c("Nivel General", "Alimentos y bebidas no alcohólicas", "Salud") ~ "IPC",
                           Categoria %in% c("Toallitas", "Tampones") ~ "PGM"))

head(base100)

A fines de graficar esta información, por esta vez se prescinde de la serie de “Alimentos y bedidas no alcohólicas” porque no agrega tanta información en la comparabilidad, y sí ocupa espacio visual que puede obstruir la comparación de las demás series.

base100bis <- base100 %>% 
  filter(Categoria != "Alimentos y bebidas no alcohólicas")

Para el gráfico puedo definir un vector de colores que sirva para distinguir las series de IPC (en la gama de azules) y las de productos de gestión menstrual (en la gama del rojo).

colorcitos <- c('royalblue4', 'royalblue', 
                'violetred', 'red')

Finalmente, definimos nuestro gráfico. Tomando la tabla base100bis,

ggplot(base100bis, aes(x = Mes, y = Indice, group = Categoria, color = Categoria)) +
  geom_line(data = base100bis %>% filter(Grupo == "PGM"), size = 1, alpha = 1) +
  geom_line(data = base100bis %>% filter(Grupo == "IPC"), alpha = 1, size = 1) +
  geom_point(data = base100bis %>% filter(Grupo == "PGM"), size = 2) +
  theme_minimal() +
  theme(legend.position = "none") +
  scale_color_manual(values = colorcitos) +
  expand_limits(x = as.POSIXct(c("2019-03-01", "2020-11-01"))) + 
  geom_text(data = base100bis %>% filter(Mes == max(Mes)), aes(label = Categoria), 
                   hjust = -0.1) +
  labs(title = "Inflación de Toallitas y Tampones vs. Salud y Nivel General del IPC-INDEC",
       subtitle = "Marzo 2019 - Septiembre 2020",
       x = "",
       y = "Indice de precios",
       caption = "Fuente: #MenstruAcción y #EcoFemiData (Economía Feminita)") +
  scale_x_datetime(breaks = seq(as.POSIXct('2019-03-01'), by='6 months', length = 4),
                   labels = c("03-2019", "09-2019", "03-2020", "09-2020"))

LS0tCnRpdGxlOiAiQ8OhbGN1bG86IMK/Q3XDoW50byBjdWVzdGEgbWVuc3RydWFyPyIKc3VidGl0bGU6ICIjTWVuc3RydUFjY2nDs24gLSBEYXRvcyBkZSBTZXB0aWVtYnJlIDIwMjAiCmF1dGhvcjogIk5hdHN1bWkgU2hva2lkYSBwYXJhIEVjb0ZlbWlEYXRhIgpkYXRlOiAiU2VwdGllbWJyZSBkZSAyMDIwIgpvdXRwdXQ6CiAgaHRtbF9ub3RlYm9vazoKICAgIHRvYzogdHJ1ZQogICAgdG9jX2Zsb2F0OiB0cnVlCiAgICB0b2NfZGVwdGg6IDUKLS0tCgojIyBQcmVzZW50YWNpw7NuCgpMdWVnbyBkZSBsYSBleHBsb3JhY2nDs24sIG9yZ2FuaXphY2nDs24geSBsaW1waWV6YSBkZSBsb3MgZGF0b3Mgb2J0ZW5pZG9zIHBvciBlbCAjTWVuc3RydVNjcmFwcGVyIChlbiBvdHJvIHNjcmlwdCksIGVuIGVsIHByZXNlbnRlIGRvY3VtZW50byBkZSB0cmFiYWpvIHNlIGVuY3VlbnRyYSBlbCBjw6FsY3VsbyBkZWwgY29zdG8gZGUgbWVuc3RydWFyIGVuIEFyZ2VudGluYSwgZXN0aW1hY2nDs24gcmVhbGl6YWRhIGRlc2RlIGxhIGNhbXBhw7FhICNNZW5zdHJ1QWNjaW9uIHkgRWNvRmVtaW5pdGFzLgo8YnI+PGJyPgpFbiBlbCBhcmNoaXZvIGBSRUFETUVgIGRlIGxhIGNhcnBldGEgYEZ1ZW50ZXNgIHNlIGVuY3VlbnRyYW4gYWNsYXJhZGFzIHRvZGFzIGxhcyBmdWVudGVzIGFkaWNpb25hbGVzIGEgbGFzIHF1ZSBzZSByZWN1cnJpw7MgcGFyYSByZWFsaXphciBlbCBjw6FsY3Vsby4KCiMjIFByZXBhcmFuZG8gZWwgZW50b3JubyBkZSB0cmFiYWpvCgpDb21lbnphbW9zIGxldmFudGFuZG8gbGFzIGxpYnJlcsOtYXMgbmVjZXNhcmlhcywgeSBjYXJnYW5kbyBsb3MgZGF0b3MgcXVlIHNlIGVuY3VlbnRyYW4gZW4gZm9ybWF0byAuUkRTLiBBcHJvdmVjaGFtb3MgcGFyYSB0ZW5lciB1bmEgdmlzdGEgcHJldmlhIGRlIGxvcyBkYXRvcy4KCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkocmVhZHhsKQpsaWJyYXJ5KERUKQpgYGAKCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KZGF0b3MgPC0gcmVhZFJEUygiRnVlbnRlcy9wcmVjaW9zLWdlc3Rpb24tbWVuc3RydWFsLTIwMjAtMDktMDYtbGltcGlvLlJEUyIpCgpoZWFkKGRhdG9zKQpgYGAKCkEgc3UgdmV6LCBzZSBjYXJnYSBsYSBlc3RpbWFjacOzbiwgcG9yIGNhZGEgcHJvdmluY2lhLCBkZSBwZXJzb25hcyBxdWUgbWVuc3Ryw7phbi4gQ29tbyBlc3TDoSBhY2xhcmFkbyBlbiBsYSBjYXJwZXRhIGRlIGZ1ZW50ZXMsIGVzdG8gc2FsZSBkZSBsYXMgcHJveWVjY2lvbmVzIHBvYmxhY2lvbmFsZXMgZGVsIElOREVDIHBhcmEgMjAyMCwgdGVuaWVuZG8gZW4gY3VlbnRhIHF1ZSBsYSBtZW5hcmNhIHNlIGVzdGltYSBlbiBsb3MgMTMgYcOxb3MgeSBsYSBtZW5vcGF1c2lhIGVuIDQ5IGHDsW9zLiBFc3RvcyBkYXRvcyBzZSB2YW4gYSB1dGlsaXphciBwYXJhIHBvbmRlcmFyIGVsIHByZWNpbyBwcm9tZWRpbyBkZSBjYWRhIHByb3ZpbmNpYSBhIGxhIGhvcmEgZGUgYWdyZWdhciBlbiB1biBpbmRpY2Fkb3IgbmFjaW9uYWwuIENvbW8gc2UgZW5jdWVudHJhbiBlbiB1biBhcmNoaXZvIGAueGxzYCwgdXNhbW9zIGxhIGZ1bmNpw7NuIGByZWFkX2V4Y2VsKClgLiBPYnRlbmVtb3MgdGFtYmnDqW4gdW5hIHZpc3RhIHByZXZpYSBkZSBsYSBlc3RydWN0dXJhIGRlIGVzdG9zIGRhdG9zLgoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQptZW5zdHJ1YW4gPC0gcmVhZF9leGNlbCgiRnVlbnRlcy9wb2JsYWNpb25lcy54bHMiKQoKaGVhZChtZW5zdHJ1YW4pCmBgYAoKQSBjb250aW51YWNpw7NuLCBjYWxjdWxhbW9zIGVsIHRvdGFsIGEgbml2ZWwgbmFjaW9uYWwgZGUgcGVyc29uYXMgcXVlIG1lbnN0csO6YW4sIHN1bWFuZG8gbG9zIGRhdG9zIGRlIHRvZGFzIGxhcyBwcm92aW5jaWFzLiBZLCBkaXZpZGllbmRvIGxvcyBkYXRvcyBkZSBjYWRhIHByb3ZpbmNpYSBwb3IgZGljaG8gdG90YWwsIG9idGVuZW1vcyBsYXMgcHJvcG9yY2lvbmVzIHF1ZSBub3MgdmFuIGEgc2VydmlyIHBhcmEgcG9uZGVyYXIgbG9zIHByb21lZGlvcyBkZSBwcmVjaW8gc2Vnw7puIGVsIHBlc28gZGUgY2FkYSB1bmEgZGUgbGFzIHByb3ZpbmNpYXMuIENvbW8gZ3VhcmRvIGVzdGFzIG1vZGlmaWNhY2lvbmVzIGJham8gZWwgbWlzbW8gbm9tYnJlLCBsYSBpbmZvcm1hY2nDs24gc2Vyw6EgcGlzYWRhIGVuIGxhIG1pc21hIHRhYmxhIGBtZW5zdHJ1YW5gLCBkZSBsYSBxdWUgc2UgdnVlbHZlIGEgcHJlc2VudGFyIHVuYSB2aXN0YSBwcmV2aWEuCgpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9Cm1lbnN0cnVhbiA8LSBtZW5zdHJ1YW4gJT4lIAogIG11dGF0ZSh0b3RhbCA9IHN1bShNZW5zdHJ1YW4pLAogICAgICAgICBwb25kID0gTWVuc3RydWFuL3RvdGFsKSAlPiUgCiAgc2VsZWN0KFByb3ZpbmNpYSwgcG9uZCkKCmhlYWQobWVuc3RydWFuKQpgYGAKCkFkZW3DoXMsIGNvbnNpZGVyYW5kbyBxdWUgaGF5IG91dGxpZXJzICh2YWxvcmVzIGF0w61waWNvcykgZW4gbG9zIHByZWNpb3MgdW5pdGFyaW9zLCBhIGxhIGhvcmEgZGUgY2FsY3VsYXIgbG9zIHByb21lZGlvcyBkZSBwcmVjaW9zIHByb3ZpbmNpYWxlcyBzZSByZW11ZXZlbiAibGFzIGNvbGFzIiBkZSBsYSBkaXN0cmlidWNpw7NuLCB1dGlsaXphbmRvIHVuYSBtZWRpYSBhbGZhIHBvZGFkYTogICAgIAoKLSBhbGZhID0gMi41JQoKIVtdKGltZy9wcmVfcmVzdWx0YWRvcy5wbmcpICAgCgojIyBDw6FsY3VsbyB5IFJlc3VsdGFkb3MKCkEgY29udGludWFjacOzbiB5YSBwcm9jZWRlbW9zIGEgY2FsY3VsYXIgbG9zIHByZWNpb3MgcHJvbWVkaW8gZGUgdG9hbGxpdGFzIHkgdGFtcG9uZXMuIFBhcmEgZWwgY2FzbyBkZWwgdG90YWwgbmFjaW9uYWwsIHByaW1lcm8gaGFicsOhIHF1ZSBjYWxjdWxhciBsb3MgcHJlY2lvcyBwcm9tZWRpbyAocG9yIHVuaWRhZCkgZGUgY2FkYSBwcm92aW5jaWEsIHBhcmEgbHVlZ28gYWdyZWdhcmxvcyBlbiB1biBwcm9tZWRpbyBnZW5lcmFsLiBVbmEgdmV6IHF1ZSB0ZW5lbW9zIHByZWNpb3MgcmVwcmVzZW50YXRpdm9zIGRlIHRvYWxsaXRhcyB5IHRhbXBvbmVzLCBwb2RyZW1vcyBlc3RpbWFyIHVuIGNvc3RvIGFudWFsIHBvciBwZXJzb25hIGRlIGFjdWVyZG8gYSBsYXMgZXN0aW1hY2lvbmVzIGRlIGN1w6FudG9zIGNpY2xvcyBwb3IgYcOxbyBwcmVzZW50YW4gbGFzIHBlcnNvbmFzIHF1ZSBtZW5zdHLDumFuLCB5IGN1w6FudG9zIHByb2R1Y3RvcyB1dGlsaXphbiBwb3IgY2ljbG8uCgojIyMgVG90YWwgTmFjaW9uYWwKCiMjIyMgVG9hbGxpdGFzCgojIyMjIyBQcm9tZWRpbyBkZWwgcHJlY2lvIHBvciB1bmlkYWQKClBhcmEgY2FsY3VsYXIgZWwgcHJlY2lvIHByb21lZGlvIGRlIGNhZGEgcHJvdmluY2lhIHRvbWFtb3MgbG9zIGRhdG9zLCBsb3MgZmlsdHJhbW9zIHBhcmEgcXVlZGFybm9zIMO6bmljYW1lbnRlIGNvbiBsYXMgdG9hbGxpdGFzLCBhZ3J1cGFuZG8gbGFzIG9ic2VydmFjaW9uZXMgc2Vnw7puIGxhIHZhcmlhYmxlIGBQcm92aW5jaWFgLiBDb24gYHN1bW1hcmlzZSgpYCBwb2RlbW9zIGRlZmluaXIgaW5kaWNhZG9yZXMgcXVlIGFncmVnYW4gbGEgaW5mb3JtYWNpw7NuIHBhcmEgY2FkYSBncnVwbywgYXPDrSBxdWUgZGVmaW5pbW9zIGVsIHByb21lZGlvIHByb3ZpbmNpYWwgY29tbyB1bmEgbWVkaWEgcG9kYWRhLiBFcyBlbiBlbCBwYXLDoW1ldHJvIGB0cmltYCBxdWUgc2UgYWNsYXJhIGxhIHByb3BvcmNpw7NuIGRlIGxvcyBkYXRvcyBxdWUgc2UgcG9kYW4uIEZpbmFsbWVudGUsIGFuZXhhbW9zIGVuIHVuYSBudWV2YSBjb2x1bW5hIGxvcyBwb25kZXJhZG9yZXMgZGUgY2FkYSBwcm92aW5jaWEsIGFzw60gdG9kYSBsYSBpbmZvcm1hY2nDs24gbmVjZXNhcmlhIHBhcmEgZWwgY8OhbGN1bG8gZGVsIHByb21lZGlvIG5hY2lvbmFsIHNlIGVuY3VlbnRyYSBlbiBsYSBtaXNtYSB0YWJsYS4KCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KdG9hbGxpdGFzIDwtIGRhdG9zICU+JSAKICBmaWx0ZXIoQ2F0ZWdvcsOtYSA9PSAidG9hbGxpdGFzIikgJT4lCiAgZ3JvdXBfYnkoUHJvdmluY2lhKSAlPiUgCiAgc3VtbWFyaXNlKHByb20gPSBtZWFuKHByZWNpb191bmlkYWQsIHRyaW0gPSAwLjAyNSkpICU+JSAKICBsZWZ0X2pvaW4oLiwgbWVuc3RydWFuLCBieSA9ICJQcm92aW5jaWEiKQoKaGVhZCh0b2FsbGl0YXMpCmBgYAoKTHVlZ28sIGVsIHZhbG9yIHByb21lZGlvIHBhcmEgZWwgdG90YWwgbmFjaW9uYWwgc2UgY2FsY3VsYSBjb21vIHVuYSBtZWRpYSBwb25kZXJhZGEuIExhIGZ1bmNpw7NuIGB3ZWlnaHRlZC5tZWFuKClgIG5vcyBwZXJtaXRlIGFjbGFyYXIgbGEgdmFyaWFibGUgYSBwcm9tZWRpYXIsIHkgbGEgdmFyaWFibGUgcXVlIGZ1bmNpb25hIGNvbW8gcG9uZGVyYWRvci4KCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KdmFsb3JfdG9hbGxpdGFzIDwtIHdlaWdodGVkLm1lYW4odG9hbGxpdGFzJHByb20sIHRvYWxsaXRhcyRwb25kKQoKcHJpbnQocGFzdGUoIlRvYWxsaXRhczogRWwgcHJlY2lvIHByb21lZGlvIHBvciB1bmlkYWQgZXMgZGUgJCIsIHJvdW5kKHZhbG9yX3RvYWxsaXRhcywgMikpLCkKYGBgCgojIyMjIyBHYXN0byBwb3IgYcOxbyBwb3IgcGVyc29uYQoKRWwgZ2FzdG8gYW51YWwgcG9yIHBlcnNvbmEgc2UgY2FsY3VsYSB0ZW5pZW5kbyBlbiBjdWVudGE6CgotIGNpY2xvcyBwb3IgYcOxbzogMTMKLSBwcm9kdWN0b3MgdXRpbGl6YWRvcyBwb3IgY2ljbG86IDIyCgooQW1ib3MgZGF0b3Mgc2UgZW5jdWVudHJhbiBhY2xhcmFkb3MgZW4gbGFzIGBGdWVudGVzYCkKCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KY2ljbG9zX3Bvcl9hbmlvIDwtIDEzCnByb2R1Y3Rvc19wb3JfY2ljbG8gPC0gMjIKcHJvZHVjdG9zX3Bvcl9hbmlvIDwtIGNpY2xvc19wb3JfYW5pbyAqIHByb2R1Y3Rvc19wb3JfY2ljbG8KCmdhc3RvX3Bvcl9hbmlvX3RvYWxsaXRhcyA8LSB2YWxvcl90b2FsbGl0YXMgKiBwcm9kdWN0b3NfcG9yX2FuaW8KCnByaW50KHBhc3RlKCJUb2FsbGl0YXM6IEVsIGdhc3RvIHByb21lZGlvIHBvciBhw7FvIHBvciBwZXJzb25hIGVzIGRlICQiLCByb3VuZChnYXN0b19wb3JfYW5pb190b2FsbGl0YXMsIDIpKSkKYGBgCgojIyMjIFRhbXBvbmVzCgpTZSByZWFsaXphIHVuIHByb2NlZGltaWVudG8gc2VtZWphbnRlIHBhcmEgZWwgY2FzbyBkZSBsb3MgdGFtcG9uZXMuCgojIyMjIyBQcm9tZWRpbyBkZWwgcHJlY2lvIHBvciB1bmlkYWQKCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KdGFtcG9uZXMgPC0gZGF0b3MgJT4lIAogIGZpbHRlcihDYXRlZ29yw61hID09ICJ0YW1wb25lcyIpICU+JQogIGdyb3VwX2J5KFByb3ZpbmNpYSkgJT4lIAogIHN1bW1hcmlzZShwcm9tID0gbWVhbihwcmVjaW9fdW5pZGFkLCB0cmltID0gMC4wMjUpKSAlPiUgCiAgbGVmdF9qb2luKC4sIG1lbnN0cnVhbiwgYnkgPSAiUHJvdmluY2lhIikKCnZhbG9yX3RhbXBvbmVzIDwtIHdlaWdodGVkLm1lYW4odGFtcG9uZXMkcHJvbSwgdGFtcG9uZXMkcG9uZCkKCnByaW50KHBhc3RlKCJUYW1wb25lczogRWwgcHJlY2lvIHByb21lZGlvIHBvciB1bmlkYWQgZXMgZGUgJCIsIHJvdW5kKHZhbG9yX3RhbXBvbmVzLCAyKSkpCmBgYAoKIyMjIyMgR2FzdG8gcG9yIGHDsW8gcG9yIHBlcnNvbmEKCkVsIGdhc3RvIGFudWFsIHBvciBwZXJzb25hIHNlIGNhbGN1bGEgdGVuaWVuZG8gZW4gY3VlbnRhOgoKLSBjaWNsb3MgcG9yIGHDsW86IDEzCi0gcHJvZHVjdG9zIHV0aWxpemFkb3MgcG9yIGNpY2xvOiAyMgoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpnYXN0b19wb3JfYW5pb190YW1wb25lcyA8LSB2YWxvcl90YW1wb25lcyAqIHByb2R1Y3Rvc19wb3JfYW5pbwoKcHJpbnQocGFzdGUoIlRhbXBvbmVzOiBFbCBnYXN0byBwcm9tZWRpbyBwb3IgYcOxbyBwb3IgcGVyc29uYSBlcyBkZSAkIiwgcm91bmQoZ2FzdG9fcG9yX2FuaW9fdGFtcG9uZXMsIDIpKSkKYGBgCgojIyMgUG9yIHByb3ZpbmNpYQoKUGFyYSBvYnRlbmVyIGxvcyBkYXRvcyBkZSBjYWRhIHByb3ZpbmNpYSBlbCBwcm9jZWRpbWllbnRvIGVzIGHDum4gbcOhcyBzZW5jaWxsby4gRW4gbGEgdmFyaWFibGUgYGdhc3RvX3Bvcl9hbmlvYCwgY2FkYSBwcmVjaW8gcHJvbWVkaW8gc2UgbXVsdGlwbGljYSBwb3IgbGEgY2FudGlkYWQgZGUgcHJvZHVjdG9zIHF1ZSBzZSB1dGlsaXphbiBhbnVhbG1lbnRlLiBQb3IgdW5hIGN1ZXN0acOzbiBkZSBleHBvc2ljacOzbiwgc2UgcXVpdGFuIGRlIGxhIHRhYmxhIGxhcyBjb2x1bW5hcyBjb24gYXF1ZWxsb3MgcHJlY2lvcyBwcm9tZWRpb3MgcG9yIHVuaWRhZCwgeSBsb3MgcG9uZGVyYWRvcmVzIHByb3ZpbmNpYWxlcy4KCiMjIyMgVG9hbGxpdGFzCgojIyMjIyBHYXN0byBwb3IgYcOxbyBwb3IgcGVyc29uYQoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQp0b2FsbGl0YXMgPC0gdG9hbGxpdGFzICU+JSAKICBtdXRhdGUoZ2FzdG9fcG9yX2FuaW8gPSByb3VuZChwcm9tICogcHJvZHVjdG9zX3Bvcl9hbmlvLCAyKSkgJT4lIAogIHNlbGVjdCgtcHJvbSwgLXBvbmQpICU+JSAKICBhcnJhbmdlKGdhc3RvX3Bvcl9hbmlvKQoKdG9hbGxpdGFzICU+JQogICAgZGF0YXRhYmxlKAogICAgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywgCiAgICBvcHRpb25zID0gbGlzdChkb20gPSAnQmZydGlwJywgCiAgICAgICAgICAgICAgICAgICBidXR0b25zID0gYygnY29weScsICdjc3YnLCAnZXhjZWwnLCAncGRmJywgJ3ByaW50JykpKQpgYGAKCiMjIyMgVGFtcG9uZXMKCiMjIyMjIEdhc3RvIHBvciBhw7FvIHBvciBwZXJzb25hCgpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnRhbXBvbmVzIDwtIHRhbXBvbmVzICU+JSAKICBtdXRhdGUoZ2FzdG9fcG9yX2FuaW8gPSByb3VuZChwcm9tICogcHJvZHVjdG9zX3Bvcl9hbmlvLCAyKSkgJT4lIAogIHNlbGVjdCgtcHJvbSwgLXBvbmQpICU+JSAKICBhcnJhbmdlKGdhc3RvX3Bvcl9hbmlvKQoKdGFtcG9uZXMgJT4lIAogICAgZGF0YXRhYmxlKAogICAgZXh0ZW5zaW9ucyA9ICdCdXR0b25zJywgCiAgICBvcHRpb25zID0gbGlzdChkb20gPSAnQmZydGlwJywgCiAgICAgICAgICAgICAgICAgICBidXR0b25zID0gYygnY29weScsICdjc3YnLCAnZXhjZWwnLCAncGRmJywgJ3ByaW50JykpKQpgYGAKCiMjIyBBdW1lbnRvcwoKQ29tbyBlc3RhIGVzIGxhIGN1YXJ0YSB2ZXogcXVlIHJlYWxpemFtb3MgZXN0ZSBlamVyY2ljaW8gZGUgZXN0aW1hY2nDs24gc2VtZXN0cmFsLCBwb2RlbW9zIHZlciBjw7NtbyBldm9sdWNpb25hcm9uIGxvcyBwcmVjaW9zIGRlIHRvYWxsaXRhcyB5IHRhbXBvbmVzIGVuIGVsIMO6bHRpbW8gYcOxby4gVGFtYmnDqW4sIGNvbiBsb3MgZGF0b3MgZGVsIMONbmRpY2UgZGUgUHJlY2lvcyBhbCBDb25zdW1pZG9yIChJUEMgLSBJTkRFQyksIHNlIHB1ZWRlIHJlYWxpemFyIHVuYSBjb21wYXJhY2nDs24gZW50cmUgbGEgZXZvbHVjacOzbiBkZSBlc3RvcyBwcm9kdWN0b3MgZGUgZ2VzdGnDs24gbWVuc3RydWFsIHkgZWwgbml2ZWwgZ2VuZXJhbCBkZSBwcmVjaW9zLCBlbCBydWJybyBhbGltZW50b3MgeSBiZWJpZGFzIG5vIGFsY29ow7NsaWNhcywgeSBlbCBkZSBTYWx1ZC4gQW1iYXMgc2VyaWVzIHNlIGxldmFudGFuIGRlc2RlIGFyY2hpdm9zIGRlIGV4dGVuc2nDs24gLnhsc3ggZW4gbGFzIHRhYmxhcyBgc2VyaWVfaW5mbGFjaW9uYCB5IGBwcmVjaW9zX3BnbWAuCgpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CnNlcmllX2luZmxhY2lvbiA8LSByZWFkX2V4Y2VsKCJGdWVudGVzL3NlcmllX2luZmxhY2lvbi54bHN4IikKcHJlY2lvc19wZ20gPC0gcmVhZF9leGNlbCgiRnVlbnRlcy9zZXJpZV9wcmVjaW9zX3BnbS54bHN4IikKYGBgCgpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmhlYWQoc2VyaWVfaW5mbGFjaW9uKQpgYGAKCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KaGVhZChwcmVjaW9zX3BnbSkKYGBgCgpBc2VndXLDoW5kb25vcyBkZSBxdWUgbG9zIGRhdG9zIHNlIGVuY3VlbnRyYW4gb3JkZW5hZG9zIHBvciBmZWNoYSwgcG9kZW1vcyB0cmFuc2Zvcm1hciBhbWJhcyBzZXJpZXMgcGFyYSBxdWUgc2UgZW5jdWVudHJlbiBleHByZXNhZGFzIGNvbiBlbCBtZXMgZGUgbWFyem8gMjAxOSA9IDEwMC4gRGUgZXN0YSBmb3JtYSBwb2RyZW1vcyBjb21wYXJhciBsYSBldm9sdWNpw7NuIGRlIGFtYmFzLiBFc3RvIGxvIGhhY2Vtb3MgbW9kaWZpY2FuZG8gbGFzIHNlcmllcyBjb24gbGFzIHF1ZSBjb250YW1vcyBkaXZpZGllbmRvIHRvZG9zIGxvcyB2YWxvcmVzIHBvciBlbCBwcmltZXJvIGRlIGVsbG9zICh5IG11bHRpcGxpY2FuZG8gcG9yIDEwMCkuIExhIHNlbGVjY2nDs24gZGVsIHByaW1lciBlbGVtZW50byBkZSBsYSBzZXJpZSBzZSByZWFsaXrDsyBjb24gbGEgZnVuY2nDs24gYGZpcnN0KClgLgoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpiYXNlMTAwIDwtIHNlcmllX2luZmxhY2lvbiAlPiUgCiAgbXV0YXRlKGBOaXZlbCBHZW5lcmFsYCA9IGBOaXZlbCBHZW5lcmFsYC9maXJzdChgTml2ZWwgR2VuZXJhbGApICogMTAwLAogICAgICAgICBgQWxpbWVudG9zIHkgYmViaWRhcyBubyBhbGNvaMOzbGljYXNgID0gYEFsaW1lbnRvcyB5IGJlYmlkYXMgbm8gYWxjb2jDs2xpY2FzYC8KICAgICAgICAgICBmaXJzdChgQWxpbWVudG9zIHkgYmViaWRhcyBubyBhbGNvaMOzbGljYXNgKSAqIDEwMCwKICAgICAgICAgU2FsdWQgPSBTYWx1ZC9maXJzdChTYWx1ZCkgKiAxMDApCgpoZWFkKGJhc2UxMDApCmBgYAoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpwZ21fMTAwIDwtIHByZWNpb3NfcGdtICU+JSAKICBtdXRhdGUoVG9hbGxpdGFzID0gVG9hbGxpdGFzL2ZpcnN0KFRvYWxsaXRhcykgKiAxMDAsCiAgICAgICAgIFRhbXBvbmVzID0gVGFtcG9uZXMvZmlyc3QoVGFtcG9uZXMpICogMTAwKQoKaGVhZChwZ21fMTAwKQpgYGAKClBvZGVtb3MgYW5leGFyIGxhIGV2b2x1Y2nDs24gZGUgbG9zIHByZWNpb3MgZGUgbG9zIHByb2R1Y3RvcyBkZSBnZXN0acOzbiBtZW5zdHJ1YWwgYSBsYSBzZXJpZSBkZSBpbmZsYWNpw7NuLCBwb3IgbcOhcyBxdWUgZXN0YSDDumx0aW1hIHRlbmdhIHZhbG9yZXMgbWVuc3VhbGVzIHkgbnVlc3Ryb3MgZGF0b3Mgc2UgaGF5YW4gcmVjb2xlY3RhZG8gY2FkYSBzZWlzIG1lc2VzLCB1dGlsaXphbmRvIGBNZXNgIGNvbW8gdmFyaWFibGUgZGUgbGluay4gTHVlZ28gcmVvcmRlbmFtb3MgbGEgaW5mb3JtYWNpw7NuIHBhcmEgcXVlIHRvZGFzIGxhcyB2YXJpYWJsZXMsIGV4Y2VwdG8gYE1lc2AsIHNlIHByZXNlbnRlbiBlbiB1bmEgdmFyaWFibGUgYENhdGVnb3LDrWFgIChjb24gdmFsb3JlcyAiTml2ZWwgR2VuZXJhbCIsICJTYWx1ZCIsICJUb2FsbGl0YXMiLCBldGMuKSwgeSBsb3MgdmFsb3JlcyBkZSBjYWRhIHNlcmllIHNlIGFncnVwZW4gZW4gbGEgdmFyaWFibGUgYEluZGljZWAuIE5vIGhhYnLDoSBkYXRvcyBlbiBkaXZlcnNvcyBtZXNlcyBwYXJhIHRvYWxsaXRhcyB5IHRhbXBvbmVzLCBhc8OtIHF1ZSBmaWx0cmFtb3MgZXNhcyBmaWxhcyB2YWPDrWFzLCB5IGZpbmFsbWVudGUgY3JlYW1vcyBsYSB2YXJpYWJsZSBgR3J1cG9gIHBhcmEgaWRlbnRpZmljYXIgY29tbyAiSVBDIiBhIGxhcyBjYXRlZ29yw61hcyBkZWwgw61uZGljZSBkZSBwcmVjaW9zIGFsIGNvbnN1bWlkb3IsIHkgY29tbyAiUEdNIiBhIGxvcyBwcm9kdWN0b3MgZGUgZ2VzdGnDs24gbWVuc3RydWFsLgoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQojIEVzdG8gc2UgcHVlZGUgY29ycmVyICJkZSBhIHBvY28iIHBhcmEgdmVyIGPDs21vIGNhbWJpYW4gbGFzIGNvc2FzIGVuIGNhZGEgcGFzbwpiYXNlMTAwIDwtIGJhc2UxMDAgJT4lIAogIGxlZnRfam9pbiguLCBwZ21fMTAwLCBieSA9ICJNZXMiKSAlPiUgCiAgcGl2b3RfbG9uZ2VyKC1NZXMsIG5hbWVzX3RvID0gIkNhdGVnb3JpYSIsIHZhbHVlc190byA9ICJJbmRpY2UiKSAlPiUgCiAgZmlsdGVyKCFpcy5uYShJbmRpY2UpKSAlPiUgCiAgbXV0YXRlKEdydXBvID0gY2FzZV93aGVuKENhdGVnb3JpYSAlaW4lIGMoIk5pdmVsIEdlbmVyYWwiLCAiQWxpbWVudG9zIHkgYmViaWRhcyBubyBhbGNvaMOzbGljYXMiLCAiU2FsdWQiKSB+ICJJUEMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICBDYXRlZ29yaWEgJWluJSBjKCJUb2FsbGl0YXMiLCAiVGFtcG9uZXMiKSB+ICJQR00iKSkKCmhlYWQoYmFzZTEwMCkKYGBgCgpBIGZpbmVzIGRlIGdyYWZpY2FyIGVzdGEgaW5mb3JtYWNpw7NuLCBwb3IgZXN0YSB2ZXogc2UgcHJlc2NpbmRlIGRlIGxhIHNlcmllIGRlICJBbGltZW50b3MgeSBiZWRpZGFzIG5vIGFsY29ow7NsaWNhcyIgcG9ycXVlIG5vIGFncmVnYSB0YW50YSBpbmZvcm1hY2nDs24gZW4gbGEgY29tcGFyYWJpbGlkYWQsIHkgc8OtIG9jdXBhIGVzcGFjaW8gdmlzdWFsIHF1ZSBwdWVkZSBvYnN0cnVpciBsYSBjb21wYXJhY2nDs24gZGUgbGFzIGRlbcOhcyBzZXJpZXMuCgpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmJhc2UxMDBiaXMgPC0gYmFzZTEwMCAlPiUgCiAgZmlsdGVyKENhdGVnb3JpYSAhPSAiQWxpbWVudG9zIHkgYmViaWRhcyBubyBhbGNvaMOzbGljYXMiKQpgYGAKClBhcmEgZWwgZ3LDoWZpY28gcHVlZG8gZGVmaW5pciB1biB2ZWN0b3IgZGUgY29sb3JlcyBxdWUgc2lydmEgcGFyYSBkaXN0aW5ndWlyIGxhcyBzZXJpZXMgZGUgSVBDIChlbiBsYSBnYW1hIGRlIGF6dWxlcykgeSBsYXMgZGUgcHJvZHVjdG9zIGRlIGdlc3Rpw7NuIG1lbnN0cnVhbCAoZW4gbGEgZ2FtYSBkZWwgcm9qbykuCgpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CmNvbG9yY2l0b3MgPC0gYygncm95YWxibHVlNCcsICdyb3lhbGJsdWUnLCAKICAgICAgICAgICAgICAgICd2aW9sZXRyZWQnLCAncmVkJykKYGBgCgpGaW5hbG1lbnRlLCBkZWZpbmltb3MgbnVlc3RybyBncsOhZmljby4gVG9tYW5kbyBsYSB0YWJsYSBgYmFzZTEwMGJpc2AsIAoKYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQpnZ3Bsb3QoYmFzZTEwMGJpcywgYWVzKHggPSBNZXMsIHkgPSBJbmRpY2UsIGdyb3VwID0gQ2F0ZWdvcmlhLCBjb2xvciA9IENhdGVnb3JpYSkpICsKICBnZW9tX2xpbmUoZGF0YSA9IGJhc2UxMDBiaXMgJT4lIGZpbHRlcihHcnVwbyA9PSAiUEdNIiksIHNpemUgPSAxLCBhbHBoYSA9IDEpICsKICBnZW9tX2xpbmUoZGF0YSA9IGJhc2UxMDBiaXMgJT4lIGZpbHRlcihHcnVwbyA9PSAiSVBDIiksIGFscGhhID0gMSwgc2l6ZSA9IDEpICsKICBnZW9tX3BvaW50KGRhdGEgPSBiYXNlMTAwYmlzICU+JSBmaWx0ZXIoR3J1cG8gPT0gIlBHTSIpLCBzaXplID0gMikgKwogIHRoZW1lX21pbmltYWwoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArCiAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGNvbG9yY2l0b3MpICsKICBleHBhbmRfbGltaXRzKHggPSBhcy5QT1NJWGN0KGMoIjIwMTktMDMtMDEiLCAiMjAyMC0xMS0wMSIpKSkgKyAKICBnZW9tX3RleHQoZGF0YSA9IGJhc2UxMDBiaXMgJT4lIGZpbHRlcihNZXMgPT0gbWF4KE1lcykpLCBhZXMobGFiZWwgPSBDYXRlZ29yaWEpLCAKICAgICAgICAgICAgICAgICAgIGhqdXN0ID0gLTAuMSkgKwogIGxhYnModGl0bGUgPSAiSW5mbGFjacOzbiBkZSBUb2FsbGl0YXMgeSBUYW1wb25lcyB2cy4gU2FsdWQgeSBOaXZlbCBHZW5lcmFsIGRlbCBJUEMtSU5ERUMiLAogICAgICAgc3VidGl0bGUgPSAiTWFyem8gMjAxOSAtIFNlcHRpZW1icmUgMjAyMCIsCiAgICAgICB4ID0gIiIsCiAgICAgICB5ID0gIkluZGljZSBkZSBwcmVjaW9zIiwKICAgICAgIGNhcHRpb24gPSAiRnVlbnRlOiAjTWVuc3RydUFjY2nDs24geSAjRWNvRmVtaURhdGEgKEVjb25vbcOtYSBGZW1pbml0YSkiKSArCiAgc2NhbGVfeF9kYXRldGltZShicmVha3MgPSBzZXEoYXMuUE9TSVhjdCgnMjAxOS0wMy0wMScpLCBieT0nNiBtb250aHMnLCBsZW5ndGggPSA0KSwKICAgICAgICAgICAgICAgICAgIGxhYmVscyA9IGMoIjAzLTIwMTkiLCAiMDktMjAxOSIsICIwMy0yMDIwIiwgIjA5LTIwMjAiKSkKYGBgCgoKCgoKCgoKCgoKCgoKCgo=