Fase 1 [Descripciones Multivariantes]

1.1 Objetivos:

esta primera etapa de estudio mostrará cálculos, visualizaciones e interpretaciones con base en un conjunto de datos cualitativos y cuantitativos. Con base a los conocimientos previos provenientes de las clases del curso de Gestión de Datos dictado por el docente Giancarlo Libreros Londoño para el aprendizaje significativo, en modalidad presencial (cohorte 2023-4) de la Universidad del Valle (sede Zarzal-Valle); utilizando el siguiente software para obtener el conjunto de datos: https://www.kaggle.com/datasets?tags=12127-Software. El trabajo hecho en gestion de datos que puede ser consultado temporalmente a través de: https://rpubs.com/DFVV00/1222963. Por último, este trabajo fue procesado con R versión 4.4.1 (2024-06-15 ucrt) mediado por RStudio 2024.09.0+375 en una plataforma x86_64-w64-mingw32.

1.2 descripción de los datos:

Descripcion del conjunto de datos:

El conjunto de datos contiene 13 campos y 374 registros. Uno de los campos es simplemente un identificador numérico secuencial de los registros , otro de naturaleza bicotomica , tres de naturaleza politomica y el resto son numéricos estrictamente positivos. La lista siguiente los describe en el mismo orden, de izquierdda a derecha, como aparecen en el rango de datos que los contiene y se establece para cada campo, excepto el campo “Identificacion de persona”, el tipo de variable y su escala de medición con base en la nomenclatura (tipo_de_variable::escala_de_medición[ordenamiento]):

Estructura del conjunto de datos original

str(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_original)
## tibble [5,000 × 20] (S3: tbl_df/tbl/data.frame)
##  $ Employee_ID                      : chr [1:5000] "EMP0001" "EMP0002" "EMP0003" "EMP0004" ...
##  $ Age                              : num [1:5000] 32 40 59 27 49 59 31 42 56 30 ...
##  $ Gender                           : chr [1:5000] "Non-binary" "Female" "Non-binary" "Male" ...
##  $ Job_Role                         : chr [1:5000] "HR" "Data Scientist" "Software Engineer" "Software Engineer" ...
##  $ Industry                         : chr [1:5000] "Healthcare" "IT" "Education" "Finance" ...
##  $ Years_of_Experience              : num [1:5000] 13 3 22 20 32 31 24 6 9 28 ...
##  $ Work_Location                    : chr [1:5000] "Hybrid" "Remote" "Hybrid" "Onsite" ...
##  $ Hours_Worked_Per_Week            : num [1:5000] 47 52 46 32 35 39 51 54 24 57 ...
##  $ Number_of_Virtual_Meetings       : num [1:5000] 7 4 11 8 12 3 7 7 4 6 ...
##  $ Work_Life_Balance_Rating         : num [1:5000] 2 1 5 4 2 4 3 3 2 1 ...
##  $ Stress_Level                     : chr [1:5000] "Medium" "Medium" "Medium" "High" ...
##  $ Mental_Health_Condition          : chr [1:5000] "Depression" "Anxiety" "Anxiety" "Depression" ...
##  $ Access_to_Mental_Health_Resources: chr [1:5000] "No" "No" "No" "Yes" ...
##  $ Productivity_Change              : chr [1:5000] "Decrease" "Increase" "No Change" "Increase" ...
##  $ Social_Isolation_Rating          : num [1:5000] 1 3 4 3 3 5 5 5 2 2 ...
##  $ Satisfaction_with_Remote_Work    : chr [1:5000] "Unsatisfied" "Satisfied" "Unsatisfied" "Unsatisfied" ...
##  $ Company_Support_for_Remote_Work  : num [1:5000] 1 2 5 3 3 1 3 4 4 1 ...
##  $ Physical_Activity                : chr [1:5000] "Weekly" "Weekly" "None" "None" ...
##  $ Sleep_Quality                    : chr [1:5000] "Good" "Good" "Poor" "Poor" ...
##  $ Region                           : chr [1:5000] "Europe" "Asia" "North America" "Europe" ...

Conjunto de datos inicial

(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_original)
## # A tibble: 5,000 × 20
##    Employee_ID   Age Gender  Job_Role Industry Years_of_Experience Work_Location
##    <chr>       <dbl> <chr>   <chr>    <chr>                  <dbl> <chr>        
##  1 EMP0001        32 Non-bi… HR       Healthc…                  13 Hybrid       
##  2 EMP0002        40 Female  Data Sc… IT                         3 Remote       
##  3 EMP0003        59 Non-bi… Softwar… Educati…                  22 Hybrid       
##  4 EMP0004        27 Male    Softwar… Finance                   20 Onsite       
##  5 EMP0005        49 Male    Sales    Consult…                  32 Onsite       
##  6 EMP0006        59 Non-bi… Sales    IT                        31 Hybrid       
##  7 EMP0007        31 Prefer… Sales    IT                        24 Remote       
##  8 EMP0008        42 Non-bi… Data Sc… Manufac…                   6 Onsite       
##  9 EMP0009        56 Prefer… Data Sc… Healthc…                   9 Hybrid       
## 10 EMP0010        30 Female  HR       IT                        28 Hybrid       
## # ℹ 4,990 more rows
## # ℹ 13 more variables: Hours_Worked_Per_Week <dbl>,
## #   Number_of_Virtual_Meetings <dbl>, Work_Life_Balance_Rating <dbl>,
## #   Stress_Level <chr>, Mental_Health_Condition <chr>,
## #   Access_to_Mental_Health_Resources <chr>, Productivity_Change <chr>,
## #   Social_Isolation_Rating <dbl>, Satisfaction_with_Remote_Work <chr>,
## #   Company_Support_for_Remote_Work <dbl>, Physical_Activity <chr>, …

Estructura del Conjunto de Datos Reescrito

str(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado)
## tibble [5,000 × 11] (S3: tbl_df/tbl/data.frame)
##  $ Employee_ID                      : chr [1:5000] "EMP0001" "EMP0002" "EMP0003" "EMP0004" ...
##  $ Age                              : num [1:5000] 32 40 59 27 49 59 31 42 56 30 ...
##  $ Gender                           : chr [1:5000] "Non-binary" "Female" "Non-binary" "Male" ...
##  $ Job_Role                         : chr [1:5000] "HR" "Data Scientist" "Software Engineer" "Software Engineer" ...
##  $ Years_of_Experience              : num [1:5000] 13 3 22 20 32 31 24 6 9 28 ...
##  $ Work_Location                    : chr [1:5000] "Hybrid" "Remote" "Hybrid" "Onsite" ...
##  $ Hours_Worked_Per_Week            : num [1:5000] 47 52 46 32 35 39 51 54 24 57 ...
##  $ Number_of_Virtual_Meetings       : num [1:5000] 7 4 11 8 12 3 7 7 4 6 ...
##  $ Access_to_Mental_Health_Resources: chr [1:5000] "No" "No" "No" "Yes" ...
##  $ Productivity_Change              : chr [1:5000] "Decrease" "Increase" "No Change" "Increase" ...
##  $ Sleep_Quality                    : chr [1:5000] "Good" "Good" "Poor" "Poor" ...

Conjunto de Datos Reescrito

(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado)
## # A tibble: 5,000 × 11
##    Employee_ID   Age Gender           Job_Role Years_of_Experience Work_Location
##    <chr>       <dbl> <chr>            <chr>                  <dbl> <chr>        
##  1 EMP0001        32 Non-binary       HR                        13 Hybrid       
##  2 EMP0002        40 Female           Data Sc…                   3 Remote       
##  3 EMP0003        59 Non-binary       Softwar…                  22 Hybrid       
##  4 EMP0004        27 Male             Softwar…                  20 Onsite       
##  5 EMP0005        49 Male             Sales                     32 Onsite       
##  6 EMP0006        59 Non-binary       Sales                     31 Hybrid       
##  7 EMP0007        31 Prefer not to s… Sales                     24 Remote       
##  8 EMP0008        42 Non-binary       Data Sc…                   6 Onsite       
##  9 EMP0009        56 Prefer not to s… Data Sc…                   9 Hybrid       
## 10 EMP0010        30 Female           HR                        28 Hybrid       
## # ℹ 4,990 more rows
## # ℹ 5 more variables: Hours_Worked_Per_Week <dbl>,
## #   Number_of_Virtual_Meetings <dbl>, Access_to_Mental_Health_Resources <chr>,
## #   Productivity_Change <chr>, Sleep_Quality <chr>
  • employee_ID: (identificador) Registra un número secuenciado a partir de 1 para identificar el registro de cada persona consignado en la base datos de forma única.

  • Age: (cuantitativa::razon) Registra la edad medida en años de la persona.

  • Gender: (cualitativa::nominal) Registra el sexo del estudiante del cual se registraron los datos , en el caso de este campo toma cuatro posibles valores, masculino, femenino, no binario y prefieren no decir.

  • Job_role: (cualitativa::nominal) Registra la ocupacion, trabajo u oficio de cada persona.

  • Work_location: (cualitativa::nominal) agrupa a los empleados en categorías, En este caso, la variable describe el entorno laboral en el que los empleados realizan sus actividades profesionales entregando tres valores remoto; hibrido y presencial.

  • Hours_worked_per_week: (cuantitativa::razon) esta variable mide la cantidad total de horas que un empleado trabaja en una semana.

  • Work_life_balance_rating: (cuantitativa::ordinal) Esta variable mide la percepción de los empleados sobre su equilibrio entre la vida laboral y personal, utilizando una escala de calificación del uno al cinco que permite evaluar su satisfacción en este aspecto

  • Stress_level: (cualitativa::ordinal) Esta variable mide la percepción de los empleados sobre su nivel de estrés en el trabajo, utilizando categorías que reflejan diferentes grados de estrés mediante tres valores bajo, medio y alto.

  • Access_to_mental_health_resources: (cualitativo::nominal) Esta variable mide si los empleados tienen acceso a recursos de salud mental proporcionados por la empresa, lo cual puede incluir servicios como terapia, asesoramiento, programas de bienestar mental y otros recursos relacionados,tiene respuesta dicotómica obteniendo solo dos valores sí o no.

  • satisfaction_with_remote_work: (cualitativa::ordinal) Esta variable mide el nivel de satisfacción de los empleados respecto a su experiencia de trabajo remoto, utilizando categorías que reflejan diferentes grados de satisfacción como insatisfecho, neutral y satisfecho.

  • Company_support_for_remote_work: (cuantitativa::ordinal) Esta variable mide el nivel de apoyo que los empleados perciben recibir de su empresa en relación con el trabajo remoto, utilizando una escala de calificación del uno al cinco que refleja diferentes grados de apoyo.

1.3 estimaciones multivariadas

Vector de Medias y Bloxplot

apply(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[,-c(1,3,4,6,9,10,11)], 2, mean)
##                        Age        Years_of_Experience 
##                    40.9950                    17.8102 
##      Hours_Worked_Per_Week Number_of_Virtual_Meetings 
##                    39.6146                     7.5590
cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado = cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[,-c(1,3,4,6,9,10,11)]
par(mfrow = c(1, ncol(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado)))
invisible(lapply(1:ncol(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado), function(i) boxplot(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado[, i])))

#### Matriz de varianzas y covarianzas

round(cov(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[,-c(1,3,4,6,9,10,11)]),2)
##                               Age Years_of_Experience Hours_Worked_Per_Week
## Age                        127.60               -0.51                 -0.18
## Years_of_Experience         -0.51              100.41                 -2.20
## Hours_Worked_Per_Week       -0.18               -2.20                140.66
## Number_of_Virtual_Meetings   0.19                0.88                 -0.25
##                            Number_of_Virtual_Meetings
## Age                                              0.19
## Years_of_Experience                              0.88
## Hours_Worked_Per_Week                           -0.25
## Number_of_Virtual_Meetings                      21.49

Matriz de Correlaciones

round(cor(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[,-c(1,3,4,6,9,10,11)]),3)
##                               Age Years_of_Experience Hours_Worked_Per_Week
## Age                         1.000              -0.004                -0.001
## Years_of_Experience        -0.004               1.000                -0.019
## Hours_Worked_Per_Week      -0.001              -0.019                 1.000
## Number_of_Virtual_Meetings  0.004               0.019                -0.005
##                            Number_of_Virtual_Meetings
## Age                                             0.004
## Years_of_Experience                             0.019
## Hours_Worked_Per_Week                          -0.005
## Number_of_Virtual_Meetings                      1.000

1.4 gráficas multivariadas

Diagrama Conjuto de Dispersión, Distribución y Correlaciones

set.seed(780728)
cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado = cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[sample(1:nrow(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado),400),-c(1,3,4,6,9,10,11)]
ggpairs(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado)

#### Diagrama de estrellas

set.seed(780720)
cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado = cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[sample(1:nrow(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado),20),-c(1,3,4,6,9,10,11)]
stars(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado, len = 0.5, cex = 0.5, key.loc = c(3,4,5,6), draw.segments = TRUE)

#### Caras de Chernoff

set.seed(780728)
cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado = cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[sample(1:nrow(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado),23),-c(1,3,4,6,9,10,11)]
faces(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_muestreado)

## effect of variables:
##  modified item       Var                         
##  "height of face   " "Age"                       
##  "width of face    " "Years_of_Experience"       
##  "structure of face" "Hours_Worked_Per_Week"     
##  "height of mouth  " "Number_of_Virtual_Meetings"
##  "width of mouth   " "Age"                       
##  "smiling          " "Years_of_Experience"       
##  "height of eyes   " "Hours_Worked_Per_Week"     
##  "width of eyes    " "Number_of_Virtual_Meetings"
##  "height of hair   " "Age"                       
##  "width of hair   "  "Years_of_Experience"       
##  "style of hair   "  "Hours_Worked_Per_Week"     
##  "height of nose  "  "Number_of_Virtual_Meetings"
##  "width of nose   "  "Age"                       
##  "width of ear    "  "Years_of_Experience"       
##  "height of ear   "  "Hours_Worked_Per_Week"

1.5 normalidad multivariada

PNM Mardia

mvn(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[,-c(1,3,4,6,9,10,11)], mvnTest="mardia")
## $multivariateNormality
##              Test         Statistic           p value Result
## 1 Mardia Skewness  8.87403201942417 0.984320855901219    YES
## 2 Mardia Kurtosis -24.4508232183314                 0     NO
## 3             MVN              <NA>              <NA>     NO
## 
## $univariateNormality
##               Test                   Variable Statistic   p value Normality
## 1 Anderson-Darling            Age               58.3829  <0.001      NO    
## 2 Anderson-Darling    Years_of_Experience       59.3035  <0.001      NO    
## 3 Anderson-Darling   Hours_Worked_Per_Week      58.3981  <0.001      NO    
## 4 Anderson-Darling Number_of_Virtual_Meetings   66.5611  <0.001      NO    
## 
## $Descriptives
##                               n    Mean   Std.Dev Median Min Max 25th 75th
## Age                        5000 40.9950 11.296021     41  22  60   31   51
## Years_of_Experience        5000 17.8102 10.020412     18   1  35    9   26
## Hours_Worked_Per_Week      5000 39.6146 11.860194     40  20  60   29   50
## Number_of_Virtual_Meetings 5000  7.5590  4.636121      8   0  15    4   12
##                                    Skew  Kurtosis
## Age                        -0.020564124 -1.204454
## Years_of_Experience         0.007743975 -1.207130
## Hours_Worked_Per_Week       0.032296538 -1.204903
## Number_of_Virtual_Meetings -0.015113999 -1.203879

PNM Henze-Zirkler

mvn(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[,-c(1,3,4,6,9,10,11)], mvnTest="hz")
## $multivariateNormality
##            Test       HZ p value MVN
## 1 Henze-Zirkler 10.08074       0  NO
## 
## $univariateNormality
##               Test                   Variable Statistic   p value Normality
## 1 Anderson-Darling            Age               58.3829  <0.001      NO    
## 2 Anderson-Darling    Years_of_Experience       59.3035  <0.001      NO    
## 3 Anderson-Darling   Hours_Worked_Per_Week      58.3981  <0.001      NO    
## 4 Anderson-Darling Number_of_Virtual_Meetings   66.5611  <0.001      NO    
## 
## $Descriptives
##                               n    Mean   Std.Dev Median Min Max 25th 75th
## Age                        5000 40.9950 11.296021     41  22  60   31   51
## Years_of_Experience        5000 17.8102 10.020412     18   1  35    9   26
## Hours_Worked_Per_Week      5000 39.6146 11.860194     40  20  60   29   50
## Number_of_Virtual_Meetings 5000  7.5590  4.636121      8   0  15    4   12
##                                    Skew  Kurtosis
## Age                        -0.020564124 -1.204454
## Years_of_Experience         0.007743975 -1.207130
## Hours_Worked_Per_Week       0.032296538 -1.204903
## Number_of_Virtual_Meetings -0.015113999 -1.203879

PNM Doornik-Hansen

mvn(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[,-c(1,3,4,6,9,10,11)], mvnTest="dh")
## $multivariateNormality
##             Test        E df p value MVN
## 1 Doornik-Hansen 1761.553  8       0  NO
## 
## $univariateNormality
##               Test                   Variable Statistic   p value Normality
## 1 Anderson-Darling            Age               58.3829  <0.001      NO    
## 2 Anderson-Darling    Years_of_Experience       59.3035  <0.001      NO    
## 3 Anderson-Darling   Hours_Worked_Per_Week      58.3981  <0.001      NO    
## 4 Anderson-Darling Number_of_Virtual_Meetings   66.5611  <0.001      NO    
## 
## $Descriptives
##                               n    Mean   Std.Dev Median Min Max 25th 75th
## Age                        5000 40.9950 11.296021     41  22  60   31   51
## Years_of_Experience        5000 17.8102 10.020412     18   1  35    9   26
## Hours_Worked_Per_Week      5000 39.6146 11.860194     40  20  60   29   50
## Number_of_Virtual_Meetings 5000  7.5590  4.636121      8   0  15    4   12
##                                    Skew  Kurtosis
## Age                        -0.020564124 -1.204454
## Years_of_Experience         0.007743975 -1.207130
## Hours_Worked_Per_Week       0.032296538 -1.204903
## Number_of_Virtual_Meetings -0.015113999 -1.203879

PNM Royston

subset_data <- cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[sample(nrow(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado), 400), -c(1,3,4,6,9,10,11)]
mvn(subset_data, mvnTest="royston")
## $multivariateNormality
##      Test        H      p value MVN
## 1 Royston 163.4475 2.663488e-34  NO
## 
## $univariateNormality
##               Test                   Variable Statistic   p value Normality
## 1 Anderson-Darling            Age                3.4968  <0.001      NO    
## 2 Anderson-Darling    Years_of_Experience        5.4696  <0.001      NO    
## 3 Anderson-Darling   Hours_Worked_Per_Week       5.5836  <0.001      NO    
## 4 Anderson-Darling Number_of_Virtual_Meetings    6.2630  <0.001      NO    
## 
## $Descriptives
##                              n    Mean   Std.Dev Median Min Max 25th 75th
## Age                        400 40.8000 10.972282     41  22  60   32   50
## Years_of_Experience        400 18.2350  9.837006     18   1  35   10   27
## Hours_Worked_Per_Week      400 39.9275 12.177972     40  20  60   29   51
## Number_of_Virtual_Meetings 400  7.6300  4.749156      8   0  15    3   12
##                                   Skew  Kurtosis
## Age                        -0.04642292 -1.104395
## Years_of_Experience         0.05249222 -1.244883
## Hours_Worked_Per_Week       0.06970159 -1.251568
## Number_of_Virtual_Meetings -0.05145374 -1.239707

Fase 2 [componentes principales]

2.1 objetivos

2.2 selección de componentes

Matriz ACP

get_eigenvalue(PCA(cdd_Impact_of_Remote_Work_on_Mental_Health_G11_depurado[,-c(1,3,4,6,9,10,11)], ncp = 6, scale.unit = TRUE, graph = F))
##       eigenvalue variance.percent cumulative.variance.percent
## Dim.1  1.0289855         25.72464                    25.72464
## Dim.2  1.0016178         25.04044                    50.76508
## Dim.3  0.9950404         24.87601                    75.64109
## Dim.4  0.9743564         24.35891                   100.00000

2.3 calidad de representacion

1.1 contribuciones

Fase 3 [Correspondencias]

3.1 objetivos

3.2 correspondencias simples

3.3 correspondencias multiples

Fase4 [Conglomerados]

4.1 objetivos

4.2 agrupación jerárquica

4.3 agrupación no-jerárquica

Fase 5 [Análisis de regresión]

5.1 objetivos

5.2 regresión lineal simple

5.3 regresión lineal multiple

5.4 regresión logística simple

6. Conclusiones

7. Bibliografía

LS0tDQp0aXRsZTogIioqUk1EX0cxMSoqIg0Kc3VidGl0bGU6ICJFc3R1ZGlvIGRlIEFuw6FsaXNpcyBjb24gYmFzZSBlbiB1biBjb25qdW50byBkZSBkYXRvcyBzb2JyZSBlbCB0cmFiYWpvIHJlbW90byB5IGxhIHNhbHVkIG1lbnRhbCINCmF1dGhvcjogImRhbmllbC52YWxlbmNpYS52ZWxlejo6Y2FybG9zLmFyY2luaWVnYXM6OkBjb3JyZW91bml2YWxsZS5lZHUuY28iDQpkYXRlOiAiRXN0dWRpbyBoZWNobyBkdXJhbnRlIGVsIHBlcmlvZG8gYWNhZMOpbWljbyBhZ29zdG8tZGljaWVtYnJlIGRlIDIwMjQiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBUUlVFDQogICAgdG9jX2Zsb2F0OiBUUlVFDQogICAgY29kZV9kb3dubG9hZDogVFJVRQ0KICAgIHRoZW1lOiBsdW1lbg0KYmlibGlvZ3JhcGh5OiBiaWJsaW9ncmFmaWFfTUUuYmliDQpjc2w6IGFwYS5jc2wNCmxpbmstY2l0YXRpb25zOiB5ZXMNCi0tLQ0KDQo8IS0tIENvbmZpZ3VyYWNpw7NuIEdsb2JhbCBkZSBSIC0tPg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShjb3JycGxvdCkNCmxpYnJhcnkoR0dhbGx5KQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShhbmRyZXdzKQ0KbGlicmFyeSh0Y2x0aykNCmxpYnJhcnkoYXBscGFjaykNCmxpYnJhcnkoZ3JhcGhpY3MpDQpsaWJyYXJ5KE1WTikNCmxpYnJhcnkocmVzaGFwZTIpDQpsaWJyYXJ5KEZhY3RvTWluZVIpDQpsaWJyYXJ5KGZhY3RvZXh0cmEpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShGYWN0b0NsYXNzKQ0KbGlicmFyeShjbHVzdGVyKQ0KbGlicmFyeShkZW5kZXh0ZW5kKQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkoTmJDbHVzdCkNCg0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG89VFJVRSkNCg0KDQpjZGRfSW1wYWN0X29mX1JlbW90ZV9Xb3JrX29uX01lbnRhbF9IZWFsdGhfRzExX29yaWdpbmFsIDwtIHJlYWRfZXhjZWwoIkltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9vcmlnaW5hbC54bHN4IikNClZpZXcoY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9vcmlnaW5hbCkNCg0KY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9kZXB1cmFkbyA8LSByZWFkX2V4Y2VsKCJJbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG8ueGxzeCIpDQpWaWV3KGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG8pDQoNCmBgYA0KDQojIyAqKkZhc2UgMSBbRGVzY3JpcGNpb25lcyBNdWx0aXZhcmlhbnRlc10qKg0KDQojIyMgKioxLjEgT2JqZXRpdm9zOioqDQoNCmVzdGEgcHJpbWVyYSBldGFwYSBkZSBlc3R1ZGlvIG1vc3RyYXLDoSBjw6FsY3Vsb3MsIHZpc3VhbGl6YWNpb25lcyBlIGludGVycHJldGFjaW9uZXMgY29uIGJhc2UgZW4gdW4gY29uanVudG8gZGUgZGF0b3MgY3VhbGl0YXRpdm9zIHkgY3VhbnRpdGF0aXZvcy4NCkNvbiBiYXNlIGEgbG9zIGNvbm9jaW1pZW50b3MgcHJldmlvcyBwcm92ZW5pZW50ZXMgZGUgbGFzIGNsYXNlcyBkZWwgY3Vyc28gZGUgR2VzdGnDs24gZGUgRGF0b3MgZGljdGFkbyBwb3IgZWwgZG9jZW50ZSBHaWFuY2FybG8gTGlicmVyb3MgTG9uZG/DsW8gcGFyYSBlbCBhcHJlbmRpemFqZSBzaWduaWZpY2F0aXZvLCBlbiBtb2RhbGlkYWQgcHJlc2VuY2lhbCAoY29ob3J0ZSAyMDIzLTQpIGRlIGxhIFVuaXZlcnNpZGFkIGRlbCBWYWxsZSAoc2VkZSBaYXJ6YWwtVmFsbGUpOyB1dGlsaXphbmRvIGVsIHNpZ3VpZW50ZSBzb2Z0d2FyZSBwYXJhIG9idGVuZXIgZWwgY29uanVudG8gZGUgZGF0b3M6IDxodHRwczovL3d3dy5rYWdnbGUuY29tL2RhdGFzZXRzP3RhZ3M9MTIxMjctU29mdHdhcmU+LiAgRWwgdHJhYmFqbyBoZWNobyBlbiBnZXN0aW9uIGRlIGRhdG9zIHF1ZSBwdWVkZSBzZXIgY29uc3VsdGFkbyB0ZW1wb3JhbG1lbnRlIGEgdHJhdsOpcyBkZTogPGh0dHBzOi8vcnB1YnMuY29tL0RGVlYwMC8xMjIyOTYzPi4NClBvciDDumx0aW1vLCBlc3RlIHRyYWJham8gZnVlIHByb2Nlc2FkbyBjb24gUiB2ZXJzacOzbiA0LjQuMSAoMjAyNC0wNi0xNSB1Y3J0KSBtZWRpYWRvIHBvciBSU3R1ZGlvIDIwMjQuMDkuMCszNzUgZW4gdW5hIHBsYXRhZm9ybWEgeDg2XzY0LXc2NC1taW5ndzMyLg0KDQojIyMgKioxLjIgZGVzY3JpcGNpw7NuIGRlIGxvcyBkYXRvczoqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQoqRGVzY3JpcGNpb24gZGVsIGNvbmp1bnRvIGRlIGRhdG9zOioNCg0KRWwgY29uanVudG8gZGUgZGF0b3MgY29udGllbmUgMTMgY2FtcG9zIHkgMzc0IHJlZ2lzdHJvcy4gVW5vIGRlIGxvcyBjYW1wb3MgZXMgc2ltcGxlbWVudGUgdW4gaWRlbnRpZmljYWRvciBudW3DqXJpY28gc2VjdWVuY2lhbCBkZSBsb3MgcmVnaXN0cm9zICwgb3RybyBkZSBuYXR1cmFsZXphIGJpY290b21pY2EgLCB0cmVzIGRlIG5hdHVyYWxlemEgcG9saXRvbWljYSB5IGVsIHJlc3RvIHNvbiBudW3DqXJpY29zIGVzdHJpY3RhbWVudGUgcG9zaXRpdm9zLiBMYSBsaXN0YSBzaWd1aWVudGUgbG9zIGRlc2NyaWJlIGVuIGVsIG1pc21vIG9yZGVuLCBkZSBpenF1aWVyZGRhIGEgZGVyZWNoYSwgY29tbyBhcGFyZWNlbiBlbiBlbCByYW5nbyBkZSBkYXRvcyBxdWUgbG9zIGNvbnRpZW5lIHkgc2UgZXN0YWJsZWNlIHBhcmEgY2FkYSBjYW1wbywgZXhjZXB0byBlbCBjYW1wbyDigJxJZGVudGlmaWNhY2lvbiBkZSBwZXJzb25h4oCdLCBlbCB0aXBvIGRlIHZhcmlhYmxlIHkgc3UgZXNjYWxhIGRlIG1lZGljacOzbiBjb24gYmFzZSBlbiBsYSBub21lbmNsYXR1cmEgKHRpcG9fZGVfdmFyaWFibGU6OmVzY2FsYV9kZV9tZWRpY2nDs25bb3JkZW5hbWllbnRvXSk6DQoNCiMjIyMgRXN0cnVjdHVyYSBkZWwgY29uanVudG8gZGUgZGF0b3Mgb3JpZ2luYWwNCmBgYHtyIEVzdHJ1Y3R1cmFfZGVsX2Nvbmp1bnRvX2RlX2RhdG9zX29yaWdpbmFsfSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpzdHIoY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9vcmlnaW5hbCkNCg0KYGBgDQojIyMjIENvbmp1bnRvIGRlIGRhdG9zIGluaWNpYWwNCmBgYHtyIENvbmp1bnRvX2RlX2RhdG9zX2luaWNpYWx9LCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCihjZGRfSW1wYWN0X29mX1JlbW90ZV9Xb3JrX29uX01lbnRhbF9IZWFsdGhfRzExX29yaWdpbmFsKQ0KDQpgYGANCiMjIyMgRXN0cnVjdHVyYSBkZWwgQ29uanVudG8gZGUgRGF0b3MgUmVlc2NyaXRvDQpgYGB7ciBFc3RydWN0dXJhX2RlbF9Db25qdW50b19kZV9EYXRvc19SZWVzY3JpdG8sIGZpZy5hbGlnbj0nY2VudGVyJ30NCnN0cihjZGRfSW1wYWN0X29mX1JlbW90ZV9Xb3JrX29uX01lbnRhbF9IZWFsdGhfRzExX2RlcHVyYWRvKQ0KDQpgYGANCiMjIyMgQ29uanVudG8gZGUgRGF0b3MgUmVlc2NyaXRvDQpgYGB7ciBDb25qdW50b19kZV9EYXRvc19SZWVzY3JpdG8sIGZpZy5hbGlnbj0nY2VudGVyJ30NCihjZGRfSW1wYWN0X29mX1JlbW90ZV9Xb3JrX29uX01lbnRhbF9IZWFsdGhfRzExX2RlcHVyYWRvKQ0KDQpgYGANCg0KLSAqKmVtcGxveWVlX0lEOioqIChpZGVudGlmaWNhZG9yKSBSZWdpc3RyYSB1biBuw7ptZXJvIHNlY3VlbmNpYWRvIGEgcGFydGlyIGRlIDEgcGFyYSBpZGVudGlmaWNhciBlbCByZWdpc3RybyBkZSBjYWRhIHBlcnNvbmEgY29uc2lnbmFkbyBlbiBsYSBiYXNlIGRhdG9zIGRlIGZvcm1hIMO6bmljYS4NCg0KLSAqKkFnZToqKiAoY3VhbnRpdGF0aXZhOjpyYXpvbikgUmVnaXN0cmEgbGEgZWRhZCBtZWRpZGEgZW4gYcOxb3MgZGUgbGEgcGVyc29uYS4NCg0KLSAqKkdlbmRlcjoqKiAoY3VhbGl0YXRpdmE6Om5vbWluYWwpIFJlZ2lzdHJhIGVsIHNleG8gZGVsIGVzdHVkaWFudGUgZGVsIGN1YWwgc2UgcmVnaXN0cmFyb24gbG9zIGRhdG9zICwgZW4gZWwgY2FzbyBkZSBlc3RlIGNhbXBvIHRvbWEgY3VhdHJvIHBvc2libGVzIHZhbG9yZXMsIG1hc2N1bGlubywgZmVtZW5pbm8sIG5vIGJpbmFyaW8geSBwcmVmaWVyZW4gbm8gZGVjaXIuDQoNCi0gKipKb2Jfcm9sZToqKiAoY3VhbGl0YXRpdmE6Om5vbWluYWwpIFJlZ2lzdHJhIGxhIG9jdXBhY2lvbiwgdHJhYmFqbyB1IG9maWNpbyBkZSBjYWRhIHBlcnNvbmEuDQoNCi0gKipXb3JrX2xvY2F0aW9uOioqIChjdWFsaXRhdGl2YTo6bm9taW5hbCkgYWdydXBhIGEgbG9zIGVtcGxlYWRvcyBlbiBjYXRlZ29yw61hcywgRW4gZXN0ZSBjYXNvLCBsYSB2YXJpYWJsZSBkZXNjcmliZSBlbCBlbnRvcm5vIGxhYm9yYWwgZW4gZWwgcXVlIGxvcyBlbXBsZWFkb3MgcmVhbGl6YW4gc3VzIGFjdGl2aWRhZGVzIHByb2Zlc2lvbmFsZXMgZW50cmVnYW5kbyB0cmVzIHZhbG9yZXMgcmVtb3RvOyBoaWJyaWRvIHkgcHJlc2VuY2lhbC4NCg0KLSAqKkhvdXJzX3dvcmtlZF9wZXJfd2VlazoqKiAoY3VhbnRpdGF0aXZhOjpyYXpvbikgZXN0YSB2YXJpYWJsZSBtaWRlIGxhIGNhbnRpZGFkIHRvdGFsIGRlIGhvcmFzIHF1ZSB1biBlbXBsZWFkbyB0cmFiYWphIGVuIHVuYSBzZW1hbmEuDQoNCi0gKipXb3JrX2xpZmVfYmFsYW5jZV9yYXRpbmc6KiogKGN1YW50aXRhdGl2YTo6b3JkaW5hbCkgRXN0YSB2YXJpYWJsZSBtaWRlIGxhIHBlcmNlcGNpw7NuIGRlIGxvcyBlbXBsZWFkb3Mgc29icmUgc3UgZXF1aWxpYnJpbyBlbnRyZSBsYSB2aWRhIGxhYm9yYWwgeSBwZXJzb25hbCwgdXRpbGl6YW5kbyB1bmEgZXNjYWxhIGRlIGNhbGlmaWNhY2nDs24gZGVsIHVubyBhbCBjaW5jbyBxdWUgcGVybWl0ZSBldmFsdWFyIHN1IHNhdGlzZmFjY2nDs24gZW4gZXN0ZSBhc3BlY3RvDQoNCi0gKipTdHJlc3NfbGV2ZWw6KiogKGN1YWxpdGF0aXZhOjpvcmRpbmFsKSBFc3RhIHZhcmlhYmxlIG1pZGUgbGEgcGVyY2VwY2nDs24gZGUgbG9zIGVtcGxlYWRvcyBzb2JyZSBzdSBuaXZlbCBkZSBlc3Ryw6lzIGVuIGVsIHRyYWJham8sIHV0aWxpemFuZG8gY2F0ZWdvcsOtYXMgcXVlIHJlZmxlamFuIGRpZmVyZW50ZXMgZ3JhZG9zIGRlIGVzdHLDqXMgbWVkaWFudGUgdHJlcyB2YWxvcmVzIGJham8sIG1lZGlvIHkgYWx0by4NCg0KLSAqKkFjY2Vzc190b19tZW50YWxfaGVhbHRoX3Jlc291cmNlczoqKiAoY3VhbGl0YXRpdm86Om5vbWluYWwpIEVzdGEgdmFyaWFibGUgbWlkZSBzaSBsb3MgZW1wbGVhZG9zIHRpZW5lbiBhY2Nlc28gYSByZWN1cnNvcyBkZSBzYWx1ZCBtZW50YWwgcHJvcG9yY2lvbmFkb3MgcG9yIGxhIGVtcHJlc2EsIGxvIGN1YWwgcHVlZGUgaW5jbHVpciBzZXJ2aWNpb3MgY29tbyB0ZXJhcGlhLCBhc2Vzb3JhbWllbnRvLCBwcm9ncmFtYXMgZGUgYmllbmVzdGFyIG1lbnRhbCB5IG90cm9zIHJlY3Vyc29zIHJlbGFjaW9uYWRvcyx0aWVuZSByZXNwdWVzdGEgZGljb3TDs21pY2Egb2J0ZW5pZW5kbyBzb2xvIGRvcyB2YWxvcmVzIHPDrSBvIG5vLg0KDQotICoqc2F0aXNmYWN0aW9uX3dpdGhfcmVtb3RlX3dvcms6KiogKGN1YWxpdGF0aXZhOjpvcmRpbmFsKSBFc3RhIHZhcmlhYmxlIG1pZGUgZWwgbml2ZWwgZGUgc2F0aXNmYWNjacOzbiBkZSBsb3MgZW1wbGVhZG9zIHJlc3BlY3RvIGEgc3UgZXhwZXJpZW5jaWEgZGUgdHJhYmFqbyByZW1vdG8sIHV0aWxpemFuZG8gY2F0ZWdvcsOtYXMgcXVlIHJlZmxlamFuIGRpZmVyZW50ZXMgZ3JhZG9zIGRlIHNhdGlzZmFjY2nDs24gY29tbyBpbnNhdGlzZmVjaG8sIG5ldXRyYWwgeSBzYXRpc2ZlY2hvLg0KDQotICoqQ29tcGFueV9zdXBwb3J0X2Zvcl9yZW1vdGVfd29yazoqKiAoY3VhbnRpdGF0aXZhOjpvcmRpbmFsKSBFc3RhIHZhcmlhYmxlIG1pZGUgZWwgbml2ZWwgZGUgYXBveW8gcXVlIGxvcyBlbXBsZWFkb3MgcGVyY2liZW4gcmVjaWJpciBkZSBzdSBlbXByZXNhIGVuIHJlbGFjacOzbiBjb24gZWwgdHJhYmFqbyByZW1vdG8sIHV0aWxpemFuZG8gdW5hIGVzY2FsYSBkZSBjYWxpZmljYWNpw7NuIGRlbCB1bm8gYWwgY2luY28gcXVlIHJlZmxlamEgZGlmZXJlbnRlcyBncmFkb3MgZGUgYXBveW8uDQoNCiMjIyAqKjEuMyBlc3RpbWFjaW9uZXMgbXVsdGl2YXJpYWRhcyoqey50YWJzZXQgLnRhYnNldC1waWxsc30NCiMjIyMgVmVjdG9yIGRlIE1lZGlhcyB5IEJsb3hwbG90DQpgYGB7ciBWZWN0b3JfZGVfTWVkaWFzX3lfQm94cGxvdCwgZmlnLmFsaWduPSdjZW50ZXInfQ0KYXBwbHkoY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9kZXB1cmFkb1ssLWMoMSwzLDQsNiw5LDEwLDExKV0sIDIsIG1lYW4pDQoNCmNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfbXVlc3RyZWFkbyA9IGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG9bLC1jKDEsMyw0LDYsOSwxMCwxMSldDQpwYXIobWZyb3cgPSBjKDEsIG5jb2woY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9tdWVzdHJlYWRvKSkpDQppbnZpc2libGUobGFwcGx5KDE6bmNvbChjZGRfSW1wYWN0X29mX1JlbW90ZV9Xb3JrX29uX01lbnRhbF9IZWFsdGhfRzExX211ZXN0cmVhZG8pLCBmdW5jdGlvbihpKSBib3hwbG90KGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfbXVlc3RyZWFkb1ssIGldKSkpDQoNCg0KYGBgDQojIyMjIE1hdHJpeiBkZSB2YXJpYW56YXMgeSBjb3Zhcmlhbnphcw0KYGBge3IgTWF0cml6X2RlX3Zhcmlhbnphc19jb3ZhcmlhbnphcywgZmlnLmFsaWduPSdjZW50ZXInfQ0Kcm91bmQoY292KGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG9bLC1jKDEsMyw0LDYsOSwxMCwxMSldKSwyKQ0KDQpgYGANCiMjIyMgTWF0cml6IGRlIENvcnJlbGFjaW9uZXMNCmBgYHtyIE1hdHJpel9kZV9Db3JyZWxhY2lvbmVzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpyb3VuZChjb3IoY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9kZXB1cmFkb1ssLWMoMSwzLDQsNiw5LDEwLDExKV0pLDMpDQoNCmBgYA0KDQojIyMgKioxLjQgZ3LDoWZpY2FzIG11bHRpdmFyaWFkYXMqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KIyMjIyBEaWFncmFtYSBDb25qdXRvIGRlIERpc3BlcnNpw7NuLCBEaXN0cmlidWNpw7NuIHkgQ29ycmVsYWNpb25lcw0KYGBge3IgRGlhZ3JhbWFfQ29uanV0b19kZV9EaXNwZXJzacOzbl9EaXN0cmlidWNpw7NuX3lfQ29ycmVsYWNpb25lcywgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc2V0LnNlZWQoNzgwNzI4KQ0KY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9tdWVzdHJlYWRvID0gY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9kZXB1cmFkb1tzYW1wbGUoMTpucm93KGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG8pLDQwMCksLWMoMSwzLDQsNiw5LDEwLDExKV0NCmdncGFpcnMoY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9tdWVzdHJlYWRvKQ0KDQoNCmBgYA0KIyMjIyBEaWFncmFtYSBkZSBlc3RyZWxsYXMNCmBgYHtyIERpYWdyYW1hX2RlX2VzdHJlbGxhcywgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc2V0LnNlZWQoNzgwNzIwKQ0KY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9tdWVzdHJlYWRvID0gY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9kZXB1cmFkb1tzYW1wbGUoMTpucm93KGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG8pLDIwKSwtYygxLDMsNCw2LDksMTAsMTEpXQ0Kc3RhcnMoY2RkX0ltcGFjdF9vZl9SZW1vdGVfV29ya19vbl9NZW50YWxfSGVhbHRoX0cxMV9tdWVzdHJlYWRvLCBsZW4gPSAwLjUsIGNleCA9IDAuNSwga2V5LmxvYyA9IGMoMyw0LDUsNiksIGRyYXcuc2VnbWVudHMgPSBUUlVFKQ0KDQoNCmBgYA0KIyMjIyBDYXJhcyBkZSBDaGVybm9mZg0KYGBge3IgQ2FyYXNfZGVfQ2hlcm5vZmYsIGZpZy5hbGlnbj0nY2VudGVyJ30NCnNldC5zZWVkKDc4MDcyOCkNCmNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfbXVlc3RyZWFkbyA9IGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG9bc2FtcGxlKDE6bnJvdyhjZGRfSW1wYWN0X29mX1JlbW90ZV9Xb3JrX29uX01lbnRhbF9IZWFsdGhfRzExX2RlcHVyYWRvKSwyMyksLWMoMSwzLDQsNiw5LDEwLDExKV0NCmZhY2VzKGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfbXVlc3RyZWFkbykNCg0KDQpgYGANCg0KIyMjICoqMS41IG5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhKiogey50YWJzZXQgLnRhYnNldC1waWxsc30NCiMjIyMgUE5NIE1hcmRpYQ0KYGBge3IgUE5NX01hcmRpYSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KbXZuKGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG9bLC1jKDEsMyw0LDYsOSwxMCwxMSldLCBtdm5UZXN0PSJtYXJkaWEiKQ0KYGBgDQojIyMjIFBOTSBIZW56ZS1aaXJrbGVyDQpgYGB7ciBQTk1fSGVuemUtWmlya2xlciwgZmlnLmFsaWduPSdjZW50ZXInfQ0KbXZuKGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG9bLC1jKDEsMyw0LDYsOSwxMCwxMSldLCBtdm5UZXN0PSJoeiIpDQpgYGANCiMjIyMgUE5NIERvb3JuaWstSGFuc2VuDQpgYGB7ciBQTk1fRG9vcm5pay1IYW5zZW4sIGZpZy5hbGlnbj0nY2VudGVyJ30NCm12bihjZGRfSW1wYWN0X29mX1JlbW90ZV9Xb3JrX29uX01lbnRhbF9IZWFsdGhfRzExX2RlcHVyYWRvWywtYygxLDMsNCw2LDksMTAsMTEpXSwgbXZuVGVzdD0iZGgiKQ0KDQpgYGANCiMjIyMgUE5NIFJveXN0b24NCmBgYHtyIFBOTV9Sb3lzdG9uLCBmaWcuYWxpZ249J2NlbnRlcid9DQpzdWJzZXRfZGF0YSA8LSBjZGRfSW1wYWN0X29mX1JlbW90ZV9Xb3JrX29uX01lbnRhbF9IZWFsdGhfRzExX2RlcHVyYWRvW3NhbXBsZShucm93KGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG8pLCA0MDApLCAtYygxLDMsNCw2LDksMTAsMTEpXQ0KbXZuKHN1YnNldF9kYXRhLCBtdm5UZXN0PSJyb3lzdG9uIikNCg0KDQpgYGANCg0KDQojIyAqKkZhc2UgMiBbY29tcG9uZW50ZXMgcHJpbmNpcGFsZXNdKioNCg0KIyMjICoqMi4xIG9iamV0aXZvcyoqDQojIyMgKioyLjIgc2VsZWNjacOzbiBkZSBjb21wb25lbnRlcyoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyMgTWF0cml6IEFDUA0KYGBge3IgTWF0cml6X0FDUCwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZ2V0X2VpZ2VudmFsdWUoUENBKGNkZF9JbXBhY3Rfb2ZfUmVtb3RlX1dvcmtfb25fTWVudGFsX0hlYWx0aF9HMTFfZGVwdXJhZG9bLC1jKDEsMyw0LDYsOSwxMCwxMSldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSkNCg0KYGBgDQoNCg0KIyMjICoqMi4zIGNhbGlkYWQgZGUgcmVwcmVzZW50YWNpb24qKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KIyMjICoqMS4xIGNvbnRyaWJ1Y2lvbmVzKiogey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KDQoNCiMjICoqRmFzZSAzIFtDb3JyZXNwb25kZW5jaWFzXSoqDQoNCiMjIyAqKjMuMSBvYmpldGl2b3MqKg0KIyMjICoqMy4yIGNvcnJlc3BvbmRlbmNpYXMgc2ltcGxlcyoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQojIyMgKiozLjMgY29ycmVzcG9uZGVuY2lhcyBtdWx0aXBsZXMqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQoNCiMjICoqRmFzZTQgW0Nvbmdsb21lcmFkb3NdKioNCg0KIyMjICoqNC4xIG9iamV0aXZvcyoqDQojIyMgKio0LjIgYWdydXBhY2nDs24gamVyw6FycXVpY2EqKiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KIyMjICoqNC4zIGFncnVwYWNpw7NuIG5vLWplcsOhcnF1aWNhKiogey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KDQojIyAqKkZhc2UgNSBbQW7DoWxpc2lzIGRlIHJlZ3Jlc2nDs25dKioNCg0KIyMjICoqNS4xIG9iamV0aXZvcyoqDQojIyMgKio1LjIgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlKiogey50YWJzZXQgLnRhYnNldC1waWxsc30NCiMjIyAqKjUuMyByZWdyZXNpw7NuIGxpbmVhbCBtdWx0aXBsZSoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQojIyMgKio1LjQgcmVncmVzacOzbiBsb2fDrXN0aWNhIHNpbXBsZSoqIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjICoqNi4gQ29uY2x1c2lvbmVzKioNCg0KIyMgKio3LiBCaWJsaW9ncmFmw61hKioNCg==