Fase 1 [Descripciones Multivariantes]

En esta primera etapa del estudio, se realizará un conjunto de cálculos, visualizaciones y análisis exploratorios sobre los datos relacionados con la deserción de empleados en la empresa IBM, los cuales se describen detalladamente en la sección 1.2. El análisis se abordará desde la perspectiva de la estadística descriptiva multivariante, lo que permitirá obtener no solo una visión general del comportamiento del personal dentro de la organización, sino también una comprensión más profunda de las relaciones entre las diversas variables asociadas a la permanencia o renuncia de los empleados.

Este enfoque contribuirá a identificar patrones clave, tendencias relevantes y posibles factores asociados al abandono laboral, tales como el nivel de satisfacción, las condiciones laborales, la experiencia o la edad.Las visualizaciones ocuparán un papel fundamental, pues facilitarán la representación gráfica de estas relaciones y permitirán explorar los datos de forma clara, intuitiva y accesible.

Todo el proceso se desarrollará utilizando las herramientas R y RStudio, que posibilitan una ejecución eficiente de los cálculos, el manejo adecuado del conjunto de datos y la creación de gráficos dinámicos que enriquecen la interpretación de los resultados obtenidos.

1.1. Objetivos

El objetivo de este proyecto es aplicar técnicas de análisis de datos para estudiar el conjunto de datos IBM HR Analytics Employee Attrition & Performance, con el fin de identificar patrones relacionados con la deserción y el rendimiento de los empleados. A través de este análisis, se busca fortalecer las habilidades en la gestión y exploración de información, contribuyendo a la comprensión de los factores que influyen en la productividad y la toma de decisiones dentro de una organización. Este trabajo se enmarca dentro del curso de Gestión de Datos durante el periodo academico 2025-2.

1.2. Descripción de los datos

El conjunto de datos fue obtenido en su totalidad de Kaggle: (https://www.kaggle.com/uniabhi). Kaggle es una plataforma en línea de ciencia de datos y aprendizaje automático, propiedad de Google LLC. Esta facilita la participación en competencias donde las empresas publican conjuntos de datos y problemas, permitiendo a los usuarios desarrollar modelos predictivos y competir. La plataforma también ofrece notebooks para compartir y colaborar en proyectos utilizando Python y R, así como una amplia colección de conjuntos de datos de acceso público. Además, Kaggle Learn, una sección de la plataforma dedicada a la educación y el aprendizaje en ciencia de datos y aprendizaje automático, proporciona tutoriales y cursos interactivos en temas como Python, SQL, visualización de datos y aprendizaje automático, dirigidos a principiantes y usuarios avanzados.

Este conjunto de datos sobre la desercion y rendimiento de empleados, fue creado por la empresa IBM con el objetivo de analizar las causas por las que los trabajadores dejan una empresa y los factores que influyen en su rendimiento. Es un conjunto muy usado en estudios de recursos humanos y análisis de datos por la cantidad y variedad de información que contiene.

Este conjunto de datos se relaciona con las áreas: 3. Engineering Economic Analysis(Analisis de Ingenieria Economica), 6. Ergonomics & Human Factors(Ergonomia y Factores Humanos), 7. Operations Engineering & Management(Ingenieria de Operaciones y Gestión) y 9. Engineering Management(Gestión de Ingeniria) del IISE Body of Knowledge. Debido a que permite analizar factores económicos, humanos y organizacionales que influyen en la rotación y desempeño de los empleados. Su estudio ayuda a tomar decisiones estratégicas para mejorar la productividad, el bienestar del personal y la eficiencia en la gestión del talento dentro de la empresa.

El conjunto de datos Consta de 1470 registros de empleados y 35 variables relacionadas con aspectos personales, laborales y de satisfacción. Algunas variables describen la edad, el salario, el área de trabajo, los años en la empresa, el nivel educativo y si el empleado ha dejado o no la organización. Algunos campos son de naturaleza cualitativa nominal o ordinal, como Department, EducationField o JobRole, mientras que otros son cuantitativos continuos o discretos, como Age, MonthlyIncome o YearsAtCompany. La variable Attrition (Sí/No) es de tipo dicotómica nominal, utilizada como variable objetivo en la mayoría de los análisis predictivos que se realizan con este conjunto.La lista siguiente describe las variables principales del conjunto de datos en el mismo orden en que aparecen y se establece para cada campo el tipo de variable y su escala de medición con base en la nomenclatura (tipo_de_variable::escala_de_medición[ordenamiento]):

  • Age (cuantitativa::razón): Indica la edad del empleado en años completos.

  • Attrition (cualitativa::nominal): Muestra si el empleado dejó la empresa (Yes) o continúa en ella (No).

  • Department (cualitativa::nominal): Señala el área donde trabaja el empleado, como Sales, Research & Development o Human Resources.

  • DistanceFromHome (cuantitativa::razón): Indica la distancia, en kilómetros, entre la casa del empleado y la oficina.

  • Education (cualitativa::ordinal): Representa el nivel educativo alcanzado, codificado en una escala del 1 al 5, donde 1 corresponde a “Below College” y 5 a “Doctor”.

  • EducationField (cualitativa::nominal): Indica el campo de formación académica del empleado, como Life Sciences, Medical o Marketing.

  • EmployeeNumber (cuantitativa::nominal): Asigna un código único a cada empleado dentro de la organización, usado como identificador.

  • Gender (cualitativa::nominal): Registra el género del empleado, clasificado como Male o Female.

  • EnvironmentSatisfaction (cualitativa::ordinal): Mide el nivel de satisfacción del empleado con su entorno laboral (escala del 1 al 4).

  • JobLevel (cualitativa::ordinal): Representa el nivel jerárquico dentro de la empresa, con valores del 1 al 5, donde 1 corresponde a puestos más bajos y 5 a cargos directivos.

  • JobRole (cualitativa::nominal): Describe el cargo o función que desempeña el empleado dentro de la organización.

  • JobSatisfaction (cualitativa::ordinal): Evalúa el nivel de satisfacción con el trabajo, en una escala del 1 al 4, donde 1 es “Low” y 4 es “Very High”.

  • MaritalStatus (cualitativa::nominal): Indica el estado civil del empleado (Single, Married o Divorced).

  • MonthlyIncome (cuantitativa::razón): Representa el salario mensual del empleado en dólares.

  • OverTime (cualitativa::nominal): Indica si el empleado trabaja horas extra (Yes/No).

  • PerformanceRating (cualitativa::ordinal): Mide el desempeño del empleado según la empresa, en una escala del 1 al 4 (de “Low” a “Outstanding”).

  • TotalWorkingYears (cuantitativa::razón): Muestra el total de años de experiencia laboral que tiene el empleado.

  • YearsAtCompany (cuantitativa::razón): Registra los años que el empleado ha trabajado en la empresa actual.

  • WorkLifeBalance (cualitativa::ordinal): Evalúa el equilibrio entre la vida personal y laboral del empleado, en una escala de 1 a 4.

  • YearsSinceLastPromotion (cuantitativa::razón): Indica el número de años desde el último ascenso del empleado.

Estructura del Conjunto de Datos Original

str(desercion_empleados_IBM_original)
## tibble [1,470 × 35] (S3: tbl_df/tbl/data.frame)
##  $ Age                     : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
##  $ Attrition               : chr [1:1470] "Yes" "No" "Yes" "No" ...
##  $ BusinessTravel          : chr [1:1470] "Travel_Rarely" "Travel_Frequently" "Travel_Rarely" "Travel_Frequently" ...
##  $ DailyRate               : num [1:1470] 1102 279 1373 1392 591 ...
##  $ Department              : chr [1:1470] "Sales" "Research & Development" "Research & Development" "Research & Development" ...
##  $ DistanceFromHome        : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
##  $ Education               : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
##  $ EducationField          : chr [1:1470] "Life Sciences" "Life Sciences" "Other" "Life Sciences" ...
##  $ EmployeeCount           : num [1:1470] 1 1 1 1 1 1 1 1 1 1 ...
##  $ EmployeeNumber          : num [1:1470] 1 2 4 5 7 8 10 11 12 13 ...
##  $ EnvironmentSatisfaction : num [1:1470] 2 3 4 4 1 4 3 4 4 3 ...
##  $ Gender                  : chr [1:1470] "Female" "Male" "Male" "Female" ...
##  $ HourlyRate              : num [1:1470] 94 61 92 56 40 79 81 67 44 94 ...
##  $ JobInvolvement          : num [1:1470] 3 2 2 3 3 3 4 3 2 3 ...
##  $ JobLevel                : num [1:1470] 2 2 1 1 1 1 1 1 3 2 ...
##  $ JobRole                 : chr [1:1470] "Sales Executive" "Research Scientist" "Laboratory Technician" "Research Scientist" ...
##  $ JobSatisfaction         : num [1:1470] 4 2 3 3 2 4 1 3 3 3 ...
##  $ MaritalStatus           : chr [1:1470] "Single" "Married" "Single" "Married" ...
##  $ MonthlyIncome           : num [1:1470] 5993 5130 2090 2909 3468 ...
##  $ MonthlyRate             : num [1:1470] 19479 24907 2396 23159 16632 ...
##  $ NumCompaniesWorked      : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
##  $ Over18                  : chr [1:1470] "Y" "Y" "Y" "Y" ...
##  $ OverTime                : chr [1:1470] "Yes" "No" "Yes" "Yes" ...
##  $ PercentSalaryHike       : num [1:1470] 11 23 15 11 12 13 20 22 21 13 ...
##  $ PerformanceRating       : num [1:1470] 3 4 3 3 3 3 4 4 4 3 ...
##  $ RelationshipSatisfaction: num [1:1470] 1 4 2 3 4 3 1 2 2 2 ...
##  $ StandardHours           : num [1:1470] 80 80 80 80 80 80 80 80 80 80 ...
##  $ StockOptionLevel        : num [1:1470] 0 1 0 0 1 0 3 1 0 2 ...
##  $ TotalWorkingYears       : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
##  $ TrainingTimesLastYear   : num [1:1470] 0 3 3 3 3 2 3 2 2 3 ...
##  $ WorkLifeBalance         : num [1:1470] 1 3 3 3 3 2 2 3 3 2 ...
##  $ YearsAtCompany          : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
##  $ YearsInCurrentRole      : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
##  $ YearsSinceLastPromotion : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
##  $ YearsWithCurrManager    : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...

Estructura del Conjunto de Datos ETL

str(desercion_empleados_IBM_ETL)
## tibble [1,470 × 33] (S3: tbl_df/tbl/data.frame)
##  $ Age                     : num [1:1470] 41 49 37 33 27 32 59 30 38 36 ...
##  $ Attrition               : chr [1:1470] "Yes" "No" "Yes" "No" ...
##  $ BusinessTravel          : chr [1:1470] "Travel_Rarely" "Travel_Frequently" "Travel_Rarely" "Travel_Frequently" ...
##  $ DailyRate               : num [1:1470] 1102 279 1373 1392 591 ...
##  $ Department              : chr [1:1470] "Sales" "Research & Development" "Research & Development" "Research & Development" ...
##  $ DistanceFromHome        : num [1:1470] 1 8 2 3 2 2 3 24 23 27 ...
##  $ Education               : num [1:1470] 2 1 2 4 1 2 3 1 3 3 ...
##  $ EducationField          : chr [1:1470] "Life Sciences" "Life Sciences" "Other" "Life Sciences" ...
##  $ EmployeeNumber          : num [1:1470] 1 2 4 5 7 8 10 11 12 13 ...
##  $ Gender                  : chr [1:1470] "Female" "Male" "Male" "Female" ...
##  $ HourlyRate              : num [1:1470] 94 61 92 56 40 79 81 67 44 94 ...
##  $ JobInvolvement          : num [1:1470] 3 2 2 3 3 3 4 3 2 3 ...
##  $ JobLevel                : num [1:1470] 2 2 1 1 1 1 1 1 3 2 ...
##  $ JobRole                 : chr [1:1470] "Sales Executive" "Research Scientist" "Laboratory Technician" "Research Scientist" ...
##  $ JobSatisfaction         : num [1:1470] 4 2 3 3 2 4 1 3 3 3 ...
##  $ MaritalStatus           : chr [1:1470] "Single" "Married" "Single" "Married" ...
##  $ MonthlyIncome           : num [1:1470] 5993 5130 2090 2909 3468 ...
##  $ MonthlyRate             : num [1:1470] 19479 24907 2396 23159 16632 ...
##  $ NumCompaniesWorked      : num [1:1470] 8 1 6 1 9 0 4 1 0 6 ...
##  $ Over18                  : chr [1:1470] "Yes" "Yes" "Yes" "Yes" ...
##  $ OverTime                : chr [1:1470] "Yes" "No" "Yes" "Yes" ...
##  $ PercentSalaryHike       : num [1:1470] 11 23 15 11 12 13 20 22 21 13 ...
##  $ PerformanceRating       : num [1:1470] 3 4 3 3 3 3 4 4 4 3 ...
##  $ RelationshipSatisfaction: num [1:1470] 1 4 2 3 4 3 1 2 2 2 ...
##  $ StandardHours           : num [1:1470] 80 80 80 80 80 80 80 80 80 80 ...
##  $ StockOptionLevel        : num [1:1470] 0 1 0 0 1 0 3 1 0 2 ...
##  $ TotalWorkingYears       : num [1:1470] 8 10 7 8 6 8 12 1 10 17 ...
##  $ TrainingTimesLastYear   : num [1:1470] 0 3 3 3 3 2 3 2 2 3 ...
##  $ WorkLifeBalance         : num [1:1470] 1 3 3 3 3 2 2 3 3 2 ...
##  $ YearsAtCompany          : num [1:1470] 6 10 0 8 2 7 1 1 9 7 ...
##  $ YearsInCurrentRole      : num [1:1470] 4 7 0 7 2 7 0 0 7 7 ...
##  $ YearsSinceLastPromotion : num [1:1470] 0 1 0 3 2 3 0 0 1 7 ...
##  $ YearsWithCurrManager    : num [1:1470] 5 7 0 0 2 6 0 0 8 7 ...

1.3. Estimaciones multivariadas

El vector de medias y la matriz de varianzas-covarianzas conforman un conjunto de herramientas fundamentales para describir el comportamiento posicional, dispersivo y correlacional de las variables aleatorias en un conjunto de datos. Estas medidas son esenciales en el análisis multivariado, porque permiten capturar tanto la tendencia central como las interdependencias entre las variables.

El vector de medias refleja el valor esperado o punto medio de cada variable, sintetizando la información de todos los registros disponibles en el conjunto de datos. Por su parte, la matriz de varianzas-covarianzas describe la variabilidad y las relaciones entre las variables. En su diagonal principal, estima las dispersiones individuales de cada variable respecto a su media, mientras que los elementos por encima o por debajo de esta diagonal representan las covarianzas entre pares de variables, mostrando las relaciones lineales existentes entre ellas.

Vector de Promedios y Boxplots

apply(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33)], 2, mean)
##              Age        DailyRate DistanceFromHome   EmployeeNumber 
##        36.923810       802.485714         9.192517      1024.865306 
##    MonthlyIncome 
##      6502.931293
desercion_empleados_IBM_ETL_Reducido = desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33)]
nombres_boxplots <- c("Age", "DailyRate","DistanceFromHome", "EmployeeNumber", "MonthlyIncome")
par(mfrow = c(1, ncol(desercion_empleados_IBM_ETL_Reducido)))
invisible(lapply(1:ncol(desercion_empleados_IBM_ETL_Reducido), function(i) {
  boxplot(desercion_empleados_IBM_ETL_Reducido[, i],
          main = nombres_boxplots[i])}))

apply(desercion_empleados_IBM_ETL[,-c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], 2, mean)
##        MonthlyRate NumCompaniesWorked  PercentSalaryHike  TotalWorkingYears 
##       14313.103401           2.693197          15.209524          11.279592 
##     YearsAtCompany 
##           7.008163
desercion_empleados_IBM_ETL_Reducido = desercion_empleados_IBM_ETL[,-c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]
nombres_boxplots <- c("MonthlyRate", "NumCompaniesWorked", "PercentSalaryHike", "TotalWorkingYears", "YearsAtCompany")
par(mfrow = c(1, ncol(desercion_empleados_IBM_ETL_Reducido)))
invisible(lapply(1:ncol(desercion_empleados_IBM_ETL_Reducido), function(i) {
  boxplot(desercion_empleados_IBM_ETL_Reducido[, i],
          main = nombres_boxplots[i])}))

Matriz de Varianzas-Covarianzas

round(cov(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]),2)
##                         Age DailyRate DistanceFromHome EmployeeNumber
## Age                   83.46     39.30            -0.12         -55.80
## DailyRate             39.30 162819.59           -16.31      -12386.71
## DistanceFromHome      -0.12    -16.31            65.72         160.65
## EmployeeNumber       -55.80 -12386.71           160.65      362433.30
## MonthlyIncome      21412.20  14641.13          -649.39      -42028.53
## MonthlyRate         1823.99 -92428.50          1585.26       54198.68
## NumCompaniesWorked     6.84     38.46            -0.59          -1.88
## PercentSalaryHike      0.12     33.53             1.19         -28.52
## TotalWorkingYears     48.36     45.57             0.29         -67.29
## YearsAtCompany        17.42    -84.19             0.47         -41.46
##                    MonthlyIncome MonthlyRate NumCompaniesWorked
## Age                     21412.20     1823.99               6.84
## DailyRate               14641.13   -92428.50              38.46
## DistanceFromHome         -649.39     1585.26              -0.59
## EmployeeNumber         -42028.53    54198.68              -1.88
## MonthlyIncome        22164857.07  1166612.59            1758.38
## MonthlyRate           1166612.59 50662878.17             311.53
## NumCompaniesWorked       1758.38      311.53               6.24
## PercentSalaryHike        -469.86     -167.49              -0.09
## TotalWorkingYears       28312.30     1464.44               4.62
## YearsAtCompany          14833.73    -1031.54              -1.81
##                    PercentSalaryHike TotalWorkingYears YearsAtCompany
## Age                             0.12             48.36          17.42
## DailyRate                      33.53             45.57         -84.19
## DistanceFromHome                1.19              0.29           0.47
## EmployeeNumber                -28.52            -67.29         -41.46
## MonthlyIncome                -469.86          28312.30       14833.73
## MonthlyRate                  -167.49           1464.44       -1031.54
## NumCompaniesWorked             -0.09              4.62          -1.81
## PercentSalaryHike              13.40             -0.59          -0.81
## TotalWorkingYears              -0.59             60.54          29.94
## YearsAtCompany                 -0.81             29.94          37.53

Matriz de Correlaciones

round(cor(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]),3)
##                       Age DailyRate DistanceFromHome EmployeeNumber
## Age                 1.000     0.011           -0.002         -0.010
## DailyRate           0.011     1.000           -0.005         -0.051
## DistanceFromHome   -0.002    -0.005            1.000          0.033
## EmployeeNumber     -0.010    -0.051            0.033          1.000
## MonthlyIncome       0.498     0.008           -0.017         -0.015
## MonthlyRate         0.028    -0.032            0.027          0.013
## NumCompaniesWorked  0.300     0.038           -0.029         -0.001
## PercentSalaryHike   0.004     0.023            0.040         -0.013
## TotalWorkingYears   0.680     0.015            0.005         -0.014
## YearsAtCompany      0.311    -0.034            0.010         -0.011
##                    MonthlyIncome MonthlyRate NumCompaniesWorked
## Age                        0.498       0.028              0.300
## DailyRate                  0.008      -0.032              0.038
## DistanceFromHome          -0.017       0.027             -0.029
## EmployeeNumber            -0.015       0.013             -0.001
## MonthlyIncome              1.000       0.035              0.150
## MonthlyRate                0.035       1.000              0.018
## NumCompaniesWorked         0.150       0.018              1.000
## PercentSalaryHike         -0.027      -0.006             -0.010
## TotalWorkingYears          0.773       0.026              0.238
## YearsAtCompany             0.514      -0.024             -0.118
##                    PercentSalaryHike TotalWorkingYears YearsAtCompany
## Age                            0.004             0.680          0.311
## DailyRate                      0.023             0.015         -0.034
## DistanceFromHome               0.040             0.005          0.010
## EmployeeNumber                -0.013            -0.014         -0.011
## MonthlyIncome                 -0.027             0.773          0.514
## MonthlyRate                   -0.006             0.026         -0.024
## NumCompaniesWorked            -0.010             0.238         -0.118
## PercentSalaryHike              1.000            -0.021         -0.036
## TotalWorkingYears             -0.021             1.000          0.628
## YearsAtCompany                -0.036             0.628          1.000

Con base en los resultados obtenidos, es posible interpretar de manera conjunta la estructura interna del conjunto de datos. El vector de medias ofrece una referencia clara del nivel promedio de cada variable, mientras que la matriz de varianzas-covarianzas evidencia cuáles variables presentan mayor dispersión y cuáles tienden a variar en conjunto. Los boxplots permiten confirmar visualmente estas variaciones e identificar la presencia de asimetrías o valores atípicos que pueden influir en el análisis. Por último, la matriz de correlaciones revela la intensidad de las relaciones entre las variables, destacando aquellas con asociaciones fuertes que podrían tener un impacto significativo en estudios posteriores.

1.4. Gráficas multivariadas

En el análisis multivariado, las representaciones gráficas desempeñan un papel fundamental para comprender simultáneamente la estructura y el comportamiento de varias variables. Estas visualizaciones permiten identificar patrones, relaciones y agrupamientos que no son evidentes mediante tablas numéricas. Entre las herramientas más utilizadas se encuentran los diagramas conjuntos de dispersión, las distribuciones multivariadas, los gráficos de correlación, los diagramas de estrellas y las caras de Chernoff.

Diagrama Conjunto de Dispersión, Distribución y Correlaciones [SA]

ggpairs(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)])

Diagrama Conjunto de Dispersión, Distribución y Correlaciones [CA:EF]

desercion_empleados_IBM_ETL$Gender <- factor(desercion_empleados_IBM_ETL$Gender)
levels= c (0,1)
labels= c ( "Female" , "Male")
ggpairs(desercion_empleados_IBM_ETL, column = c(1, 4, 6, 9), aes(color = Gender, alpha = 0.5), upper = list(continuous = wrap("cor", size = 2.5)))

Diagrama de estrellas

set.seed(120522)
desercion_empleados_IBM_ETL_Muestreado = desercion_empleados_IBM_ETL[sample(1:nrow(desercion_empleados_IBM_ETL),23),-c(2, 3, 5, 7, 8, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]
stars(desercion_empleados_IBM_ETL_Muestreado, len = 1, cex = 0.4, key.loc = c(10, 2), draw.segments = TRUE)

Caras de chernoff

set.seed(120522)
desercion_empleados_IBM_ETL_Muestreado = desercion_empleados_IBM_ETL [sample(1:nrow(desercion_empleados_IBM_ETL),23),-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]
faces(desercion_empleados_IBM_ETL_Muestreado)

## effect of variables:
##  modified item       Var                 
##  "height of face   " "Age"               
##  "width of face    " "DailyRate"         
##  "structure of face" "DistanceFromHome"  
##  "height of mouth  " "EmployeeNumber"    
##  "width of mouth   " "MonthlyIncome"     
##  "smiling          " "MonthlyRate"       
##  "height of eyes   " "NumCompaniesWorked"
##  "width of eyes    " "PercentSalaryHike" 
##  "height of hair   " "TotalWorkingYears" 
##  "width of hair   "  "YearsAtCompany"    
##  "style of hair   "  "Age"               
##  "height of nose  "  "DailyRate"         
##  "width of nose   "  "DistanceFromHome"  
##  "width of ear    "  "EmployeeNumber"    
##  "height of ear   "  "MonthlyIncome"

A partir de las gráficas multivariadas generadas, se logra obtener una comprensión más completa de la estructura interna del conjunto de datos. El diagrama conjunto de dispersión permitió identificar relaciones claras entre ciertas variables, así como posibles concentraciones o patrones de agrupamiento. Las gráficas de distribución ayudaron a caracterizar el comportamiento individual de cada variable, mostrando diferencias en su dispersión y posibles desviaciones respecto a una distribución simétrica. Por otro lado, el análisis mediante correlaciones visuales facilitó la detección de asociaciones fuertes que podrían ser relevantes para estudios posteriores. Los diagramas de estrellas y las caras de Chernoff ofrecieron una perspectiva complementaria al permitir comparar observaciones completas de forma simultánea, resaltando similitudes y diferencias generales entre los perfiles analizados.

1.5. Normalidad multivariada

PNM Mardia

mardia(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)])
## $mv.test
##           Test Statistic p-value Result
## 1     Skewness 3734.3782       0     NO
## 2     Kurtosis    9.9032       0     NO
## 3 MV Normality      <NA>    <NA>     NO
## 
## $uv.shapiro
##                    W      p-value UV.Normality
## Age                0.9774 0       No          
## DailyRate          0.9544 0       No          
## DistanceFromHome   0.8616 0       No          
## EmployeeNumber     0.9525 0       No          
## MonthlyIncome      0.8279 0       No          
## MonthlyRate        0.9545 0       No          
## NumCompaniesWorked 0.8488 0       No          
## PercentSalaryHike  0.9006 0       No          
## TotalWorkingYears  0.9074 0       No          
## YearsAtCompany     0.839  0       No

PNM Henze-Zirkler

mhz(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)])
## $mv.test
## Statistic   p-value    Result 
##    2.0712         0        NO 
## 
## $uv.shapiro
##                    W      p-value UV.Normality
## Age                0.9774 0       No          
## DailyRate          0.9544 0       No          
## DistanceFromHome   0.8616 0       No          
## EmployeeNumber     0.9525 0       No          
## MonthlyIncome      0.8279 0       No          
## MonthlyRate        0.9545 0       No          
## NumCompaniesWorked 0.8488 0       No          
## PercentSalaryHike  0.9006 0       No          
## TotalWorkingYears  0.9074 0       No          
## YearsAtCompany     0.839  0       No

PNM Rotational Robust Shapiro-Wilk

faTest((desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]), 10)
## $mv.test
## Statistic   p-value    Result 
##    0.1786         0        NO 
## 
## $uv.shapiro
##                    W      p-value UV.Normality
## Age                0.9774 0       No          
## DailyRate          0.9544 0       No          
## DistanceFromHome   0.8616 0       No          
## EmployeeNumber     0.9525 0       No          
## MonthlyIncome      0.8279 0       No          
## MonthlyRate        0.9545 0       No          
## NumCompaniesWorked 0.8488 0       No          
## PercentSalaryHike  0.9006 0       No          
## TotalWorkingYears  0.9074 0       No          
## YearsAtCompany     0.839  0       No

PNM Bowman and Shenton

msk((desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]), 10)
## $mv.test
## Statistic   p-value    Result 
## 3832.4519         0        NO 
## 
## $uv.shapiro
##                    W      p-value UV.Normality
## Age                0.9774 0       No          
## DailyRate          0.9544 0       No          
## DistanceFromHome   0.8616 0       No          
## EmployeeNumber     0.9525 0       No          
## MonthlyIncome      0.8279 0       No          
## MonthlyRate        0.9545 0       No          
## NumCompaniesWorked 0.8488 0       No          
## PercentSalaryHike  0.9006 0       No          
## TotalWorkingYears  0.9074 0       No          
## YearsAtCompany     0.839  0       No

Fase 2 [Componentes Principales]

En esta segunda fase del estudio se presentan los cálculos, visualizaciones e interpretaciones correspondientes al Análisis de Componentes Principales (ACP), aplicados a las variables cuantitativas del conjunto de datos analizado en la fase 1 (#sec1).

El propósito de esta etapa es identificar las combinaciones lineales que mejor resumen la variabilidad de los datos, examinando aspectos como la selección de componentes relevantes, la calidad de representación, las contribuciones de las variables originales y la interpretación de los componentes resultantes dentro del contexto del problema estudiado.

2.1. Objetivos

El Análisis de Componentes Principales (ACP) tiene como objetivo transformar un conjunto de variables originales correlacionadas en un nuevo conjunto de variables no correlacionadas denominadas componentes principales, que retienen la mayor parte de la información original. A través de este proceso, se busca reducir la dimensionalidad del espacio de los datos, eliminar redundancias y facilitar la interpretación de las estructuras subyacentes en el conjunto de observaciones.

Para una comprensión más profunda del procedimiento, los detalles del conjunto de datos se encuentran en la Sección 1.2 (#sec1.2), mientras que los fundamentos teóricos del análisis se desarrollan en la Fase 1. La revisión de dichas secciones permitirá una apreciación integral del enfoque metodológico implementado.

2.2. Selección de Componentes

En el Análisis de Componentes Principales (ACP), la selección de componentes permite reducir la dimensionalidad del conjunto de datos conservando la mayor parte de la variabilidad original. Para ello se utilizan herramientas como la matriz del ACP, la matriz de correlaciones y los valores y vectores propios. La matriz de correlaciones estandariza las variables y muestra sus relaciones iniciales, mientras que los valores propios indican la cantidad de varianza explicada por cada componente. Por su parte, los vectores propios determinan las combinaciones lineales que generan las nuevas componentes y describen el peso o contribución de cada variable en ellas. Este proceso permite identificar cuáles componentes son relevantes y cuántas deben retenerse para representar adecuadamente la estructura de los datos.

Matriz ACP

get_eigenvalue(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 6, scale.unit = TRUE, graph = F))
##        eigenvalue variance.percent cumulative.variance.percent
## Dim.1   2.7818978        27.818978                    27.81898
## Dim.2   1.1697362        11.697362                    39.51634
## Dim.3   1.0768477        10.768477                    50.28482
## Dim.4   1.0452657        10.452657                    60.73747
## Dim.5   0.9845549         9.845549                    70.58302
## Dim.6   0.9535769         9.535769                    80.11879
## Dim.7   0.9182050         9.182050                    89.30084
## Dim.8   0.5078936         5.078936                    94.37978
## Dim.9   0.4123738         4.123738                    98.50352
## Dim.10  0.1496485         1.496485                   100.00000

Matriz de Correlaciones

round(cor(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]),2)
##                      Age DailyRate DistanceFromHome EmployeeNumber
## Age                 1.00      0.01             0.00          -0.01
## DailyRate           0.01      1.00             0.00          -0.05
## DistanceFromHome    0.00      0.00             1.00           0.03
## EmployeeNumber     -0.01     -0.05             0.03           1.00
## MonthlyIncome       0.50      0.01            -0.02          -0.01
## MonthlyRate         0.03     -0.03             0.03           0.01
## NumCompaniesWorked  0.30      0.04            -0.03           0.00
## PercentSalaryHike   0.00      0.02             0.04          -0.01
## TotalWorkingYears   0.68      0.01             0.00          -0.01
## YearsAtCompany      0.31     -0.03             0.01          -0.01
##                    MonthlyIncome MonthlyRate NumCompaniesWorked
## Age                         0.50        0.03               0.30
## DailyRate                   0.01       -0.03               0.04
## DistanceFromHome           -0.02        0.03              -0.03
## EmployeeNumber             -0.01        0.01               0.00
## MonthlyIncome               1.00        0.03               0.15
## MonthlyRate                 0.03        1.00               0.02
## NumCompaniesWorked          0.15        0.02               1.00
## PercentSalaryHike          -0.03       -0.01              -0.01
## TotalWorkingYears           0.77        0.03               0.24
## YearsAtCompany              0.51       -0.02              -0.12
##                    PercentSalaryHike TotalWorkingYears YearsAtCompany
## Age                             0.00              0.68           0.31
## DailyRate                       0.02              0.01          -0.03
## DistanceFromHome                0.04              0.00           0.01
## EmployeeNumber                 -0.01             -0.01          -0.01
## MonthlyIncome                  -0.03              0.77           0.51
## MonthlyRate                    -0.01              0.03          -0.02
## NumCompaniesWorked             -0.01              0.24          -0.12
## PercentSalaryHike               1.00             -0.02          -0.04
## TotalWorkingYears              -0.02              1.00           0.63
## YearsAtCompany                 -0.04              0.63           1.00

Valores y Vectores Propios

princomp(desercion_empleados_IBM_ETL_Muestreado[,], cor = TRUE)$sdev^2
##     Comp.1     Comp.2     Comp.3     Comp.4     Comp.5     Comp.6     Comp.7 
## 3.51554311 1.68802405 1.28572770 1.01528731 0.86272019 0.72616546 0.45260470 
##     Comp.8     Comp.9    Comp.10 
## 0.28389834 0.14027025 0.02975891
princomp(desercion_empleados_IBM_ETL_Muestreado[,], cor = TRUE)$loadings[ ,1:5]
##                         Comp.1      Comp.2      Comp.3      Comp.4
## Age                 0.39045775  0.30934515  0.11528292  0.20046660
## DailyRate          -0.21997801  0.54874398  0.29178636  0.05820373
## DistanceFromHome   -0.13195668 -0.46971520  0.32923515 -0.01406989
## EmployeeNumber     -0.22141815  0.02528925 -0.33467654  0.34211345
## MonthlyIncome       0.49643148 -0.09959794  0.12573980 -0.01697499
## MonthlyRate        -0.16888423  0.13986193  0.71050204 -0.28867045
## NumCompaniesWorked  0.20197397  0.55846567 -0.11491038 -0.04680741
## PercentSalaryHike  -0.07628139 -0.05313237  0.33055355  0.85931225
## TotalWorkingYears   0.50054073 -0.05000336  0.03515381  0.11633385
## YearsAtCompany      0.40074232 -0.18768407  0.19192946 -0.03775011
##                           Comp.5
## Age                 0.0007722585
## DailyRate          -0.2952365609
## DistanceFromHome   -0.1864833882
## EmployeeNumber     -0.7845845397
## MonthlyIncome      -0.2714636239
## MonthlyRate        -0.1501968586
## NumCompaniesWorked  0.0836676009
## PercentSalaryHike   0.2761921502
## TotalWorkingYears  -0.0776418706
## YearsAtCompany     -0.2773510337
fviz_pca_var(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], scale.unit = T, graph = F),col.var="#3B83BD", repel = T, col.circle = "#CDCDCD", ggtheme = theme_bw())
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## ℹ The deprecated feature was likely used in the ggpubr package.
##   Please report the issue at <https://github.com/kassambara/ggpubr/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## ℹ The deprecated feature was likely used in the factoextra package.
##   Please report the issue at <https://github.com/kassambara/factoextra/issues>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

2.3. Calidad de Representación

En el análisis de componentes principales, la calidad de representación permite evaluar qué tan bien cada variable y cada individuo queda proyectado en los nuevos ejes principales. El círculo de correlaciones muestra cómo se relacionan las variables originales con los componentes, indicando cuáles están mejor representadas en el plano factorial. La matriz de representación y los índices de calidad de representación (cos²) cuantifican qué porcentaje de la información de cada variable o individuo es capturado por los componentes seleccionados. Finalmente, las coordenadas individuales permiten ubicar cada observación en el espacio reducido, facilitando la identificación de patrones, similitudes o agrupamientos.

Circulo de correlaciones

fviz_pca_var(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], scale.unit = T, graph = F),col.var="#3B83BD", repel = T, col.circle = "#CDCDCD", ggtheme = theme_bw())

Matriz de Representación

(get_pca_var(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 5, scale.unit = TRUE, graph = F)))$cos2
##                           Dim.1        Dim.2        Dim.3        Dim.4
## Age                5.918913e-01 0.0674301364 6.238305e-03 5.999882e-04
## DailyRate          6.892638e-05 0.1110007453 2.408200e-01 8.770044e-02
## DistanceFromHome   6.528062e-05 0.0263907467 1.318982e-01 4.053947e-01
## EmployeeNumber     5.544640e-04 0.0125872183 3.474826e-01 7.203470e-03
## MonthlyIncome      7.257092e-01 0.0066595737 5.320516e-04 1.951714e-06
## MonthlyRate        1.299168e-03 0.0060241971 2.910606e-01 1.080539e-03
## NumCompaniesWorked 7.943876e-02 0.6754444783 3.838852e-02 7.273199e-03
## PercentSalaryHike  1.453985e-03 0.0081135290 2.468711e-03 5.351833e-01
## TotalWorkingYears  8.973925e-01 0.0002892877 1.438805e-05 4.969409e-04
## YearsAtCompany     4.840242e-01 0.2557962902 1.794434e-02 3.312545e-04
##                           Dim.5
## Age                1.930170e-03
## DailyRate          7.566337e-05
## DistanceFromHome   2.144007e-03
## EmployeeNumber     3.880558e-01
## MonthlyIncome      5.865329e-04
## MonthlyRate        5.696113e-01
## NumCompaniesWorked 1.600633e-02
## PercentSalaryHike  5.739645e-03
## TotalWorkingYears  8.434921e-05
## YearsAtCompany     3.210093e-04

Calidad de Representación

fviz_pca_var(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 5, scale.unit = TRUE, graph = F), col.var="cos2", gradient.cols=c("#00AFBB","#E7B800","#FC4E07"), repel = TRUE)

Coordenadas Individuales

head((PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 5, scale.unit = TRUE, graph = F))$ind$coord, n = 23L)
##          Dim.1      Dim.2      Dim.3      Dim.4       Dim.5
## 1   0.27612321  2.3271579 -0.7783981 -1.2517336 -1.45637770
## 2   0.45845914 -0.3187750  0.1854987  1.3387796 -2.08630331
## 3  -1.04069354  2.2427806 -2.3898201 -0.2383880  0.38325206
## 4  -0.78665194  0.1042774 -1.3828867 -0.6541659 -2.21388201
## 5  -1.07777226  2.1975708 -0.2954737 -1.4465856 -1.12456640
## 6  -1.00673417 -0.4984299 -1.8846099 -0.6413899 -1.02954818
## 7   0.42172473  2.2499691 -1.7900208  0.9557929 -0.30592167
## 8  -2.06120392  0.3125982 -1.1653780  2.9935039 -0.80882753
## 9   0.19771002 -1.4423586 -0.4020514  1.9812215 -0.43364100
## 10  0.49678114  1.1874115 -0.3280470  1.3461509 -1.05258655
## 11 -1.20404659 -0.6161622 -0.6362351  0.3103685 -1.41887960
## 12 -0.76363169 -1.6594164 -0.3182923 -0.4438316 -1.09811357
## 13 -1.39550961 -0.6367666 -0.1470738  1.7082763 -1.11086561
## 14 -1.65865074 -0.1806836 -1.6152379  0.4801124 -0.60292697
## 15 -1.36114700  0.1028904  0.6131661  0.4089077 -0.75813375
## 16  0.01041904 -0.7402495 -1.6449348  0.6651293 -0.76839878
## 17 -1.11734626 -0.9846158 -0.6895683 -1.0814285 -1.37449793
## 18 -2.39941072 -0.2001905 -1.6142120  0.4000779 -0.43381887
## 19  4.45035587 -0.6251771 -1.5407962  0.2443245 -1.91827120
## 20 -0.70738693  0.8675555 -1.1431211 -1.6929386  0.02882653
## 21 -1.78402858 -0.8350144 -1.4270230  0.7324009 -0.51196542
## 22 -0.36369066  2.0881616 -1.6991578  1.7569246  0.14867933
## 23  0.79905708 -1.4749011 -0.3809076 -0.9980602 -2.08769964

El círculo de correlaciones muestra que las variables YearsAtCompany, MonthlyIncome, TotalWorkingYears y Age están fuertemente asociadas con el primer componente (Dim1), indicando que este eje captura un patrón relacionado con la experiencia laboral y el crecimiento profesional dentro de la empresa. Estas variables se proyectan cerca de la circunferencia, lo que indica una buena representación y una alta correlación con este componente. Por otro lado, NumCompaniesWorked está más asociada al segundo componente (Dim2), reflejando un comportamiento diferente al de las variables de estabilidad laboral. En contraste, variables como EmployeeNumber, DailyRate, PercentSalaryHike, DistanceFromHome y MonthlyRate aparecen cerca del centro del círculo, lo que indica que no están bien explicadas por los dos primeros componentes y tienen menor aporte a la variabilidad capturada en el plano factorial.

2.4. Contribuciones y Biplots

En el análisis de componentes principales, las contribuciones permiten identificar qué variables influyen con mayor peso en la formación de cada componente. La matriz de contribuciones resume el porcentaje de aportación de cada variable a cada dimensión, mientras que los gráficos de contribución muestran visualmente cuáles variables superan el umbral esperado (línea roja) y, por lo tanto, son relevantes en la interpretación de cada componente. Los biplots complementan este análisis al representar simultáneamente las variables y a los individuos en el espacio de los componentes, permitiendo visualizar cómo se relacionan ambos elementos con las nuevas dimensiones generadas. En conjunto, estas herramientas ayudan a comprender la estructura interna de los datos y el papel específico que desempeña cada variable en la reducción dimensional.

Matriz de Contribuciones

(get_pca_var(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 5, scale.unit = TRUE, graph = F)))$contrib
##                           Dim.1       Dim.2        Dim.3        Dim.4
## Age                21.276529186  5.76455924  0.579311736 5.740055e-02
## DailyRate           0.002477675  9.48938273 22.363421654 8.390253e+00
## DistanceFromHome    0.002346622  2.25612806 12.248546727 3.878389e+01
## EmployeeNumber      0.019931143  1.07607324 32.268499904 6.891520e-01
## MonthlyIncome      26.086837755  0.56932270  0.049408245 1.867194e-04
## MonthlyRate         0.046700775  0.51500476 27.028947990 1.033746e-01
## NumCompaniesWorked  2.855560168 57.74331655  3.564897574 6.958230e-01
## PercentSalaryHike   0.052265921  0.69362041  0.229253518 5.120069e+01
## TotalWorkingYears  32.258286233  0.02473102  0.001336127 4.754206e-02
## YearsAtCompany     17.399064523 21.86786129  1.666376526 3.169093e-02
##                           Dim.5
## Age                 0.196044930
## DailyRate           0.007685034
## DistanceFromHome    0.217764071
## EmployeeNumber     39.414342326
## MonthlyIncome       0.059573406
## MonthlyRate        57.854707090
## NumCompaniesWorked  1.625742862
## PercentSalaryHike   0.582968529
## TotalWorkingYears   0.008567243
## YearsAtCompany      0.032604511

Contribuciones a D1

fviz_contrib(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 1, top = 10)

Contribuciones a D2

fviz_contrib(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 2, top = 10)

Contribuciones a D3

fviz_contrib(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 3, top = 10)

Contribuciones a D4

fviz_contrib(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 4, top = 10)

Contribuciones a D5

fviz_contrib(PCA(desercion_empleados_IBM_ETL[,-c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 6, scale.unit = TRUE, graph = F), choice = "var", axes = 5, top = 10)

Biplot de Variables y Registros [filtro:JobInvolvement]

desercion_empleados_IBM_ETL <- read_excel("E:/Proyecto_GDD_2025-2/desercion_empleados_IBM_ETL.xlsx")

# misma muestra que ya usas
desercion_empleados_IBM_ETL <- desercion_empleados_IBM_ETL[
  sample(1:nrow(desercion_empleados_IBM_ETL), 100),
  -c(2, 3, 5, 7, 8, 10, 11, 13, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33)
]

# 1) Asegura que JobRole sea factor fuera de la matriz
desercion_empleados_IBM_ETL$JobRole <- factor(
  desercion_empleados_IBM_ETL$JobRole,
  levels = c(1, 2, 3, 4, 5, 6, 7, 8, 9),
  labels = c("Healthcare Representative", "Human Resources", "Laboratory Technician",
             "Manager", "Manufacturing Director", "Research Director",
             "Research Scientist", "Sales Executive", "Sales Representative")
)

# 2) Crea un objeto solo con las variables numéricas para la PCA
datos_pca <- desercion_empleados_IBM_ETL[, sapply(desercion_empleados_IBM_ETL, is.numeric)]

# 3) Ejecuta la PCA y el biplot
res_pca <- PCA(datos_pca, ncp = 9, scale.unit = TRUE, graph = FALSE)
fviz_pca_biplot(res_pca, axes = c(1, 2),
                repel = TRUE,
                habillage = desercion_empleados_IBM_ETL$JobRole)
## Warning: Removed 100 rows containing missing values or values outside the scale range
## (`geom_point()`).
## Warning: Removed 1 row containing missing values or values outside the scale range
## (`geom_point()`).

Biplot de Variables y Registros [filtro:Education]

desercion_empleados_IBM_ETL <- read_excel("E:/Proyecto_GDD_2025-2/desercion_empleados_IBM_ETL.xlsx")

set.seed(780729)
desercion_empleados_IBM_ETL_Muestreado = desercion_empleados_IBM_ETL[sample(1:nrow(desercion_empleados_IBM_ETL),200),-c(2, 3, 5, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]
desercion_empleados_IBM_ETL_Muestreado$Education <- factor(desercion_empleados_IBM_ETL_Muestreado$Education, levels = c(1, 2, 3, 4, 5), labels = c("poco", "masomenos", "aceptable", "mucho", "demasiado"))
desercion_empleados_IBM_ETL_Muestreado$Education <- as.factor(desercion_empleados_IBM_ETL_Muestreado$Education)
fviz_pca_biplot(PCA(desercion_empleados_IBM_ETL[, -c(2, 3, 5, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)], ncp = 5, scale.unit = TRUE, graph = F, quali.sup = "Education"), axes = c(1, 2), repel = TRUE, habillage = "Education")

Biplot de Variables y Registros [filtro:N.of Major Vessels]

desercion_empleados_IBM_ETL <- read_excel("E:/Proyecto_GDD_2025-2/desercion_empleados_IBM_ETL.xlsx")
set.seed(780729)
desercion_empleados_IBM_ETL_Muestreado <- desercion_empleados_IBM_ETL[ sample(1:nrow(desercion_empleados_IBM_ETL), 150), -c(2, 3, 5, 7, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 24, 25, 26, 28, 29, 31, 32, 33)]

desercion_empleados_IBM_ETL$PerformanceRating <- factor(
desercion_empleados_IBM_ETL$PerformanceRating,
levels = c(3, 4),
labels = c("Insatisfecho", "PocoSatisfecho"))

pca_result <- PCA(
  desercion_empleados_IBM_ETL_Muestreado[, -which(names(desercion_empleados_IBM_ETL_Muestreado) == "PerformanceRating")], 
  ncp = 5, 
  scale.unit = TRUE, 
  graph = FALSE,
  quali.sup = which(names(desercion_empleados_IBM_ETL_Muestreado) == "PerformanceRating")
)

fviz_pca_biplot(PCA(desercion_empleados_IBM_ETL_Muestreado[,], ncp = 5, scale.unit = TRUE, graph = F, quali.sup = which(names(desercion_empleados_IBM_ETL_Muestreado) == "PerformanceRating")), axes = c(1, 2), repel = TRUE, habillage = "PerformanceRating")

Las contribuciones muestran que cada componente del PCA está determinado por grupos específicos de variables, lo que evidencia que la variabilidad del conjunto de datos se organiza en diferentes dimensiones. El primer componente está fuertemente influido por variables relacionadas con la experiencia laboral, mientras que los componentes posteriores reflejan información más operativa y de movilidad. Los biplots confirman estas relaciones al mostrar cómo las variables más influyentes orientan la posición de los individuos en los planos factoriales, permitiendo distinguir perfiles y patrones generales dentro de los datos. Estos resultados ofrecen una visión clara de qué variables son clave en cada dimensión y cómo estructuran la distribución de las observaciones.

Fase 3 [Correspondencias]

La tercera fase del estudio aborda el Análisis de Correspondencias, una técnica exploratoria destinada a representar gráficamente las relaciones entre categorías de variables cualitativas. A través de esta metodología, se busca identificar patrones de asociación y estructuras de similitud entre filas y columnas de tablas de contingencia, permitiendo una comprensión visual y estadística de las relaciones entre las modalidades observadas.

Esta fase constituye un puente entre los métodos aplicados a variables cuantitativas y aquellos orientados a la interpretación de datos categóricos.

3.1. Objetivos

En esta tercera fase, se presentan los cálculos, representaciones gráficas e interpretaciones derivadas del conjunto de datos previamente trabajado en las Fases 1 y 2. El objetivo es aplicar análisis de correspondencias simples y múltiples sobre las variables cualitativas, construyendo tablas de contingencia y tablas disyuntivas completas. Además, se evaluarán las calidades de representación, las contribuciones de las categorías y la interpretación de los ejes factoriales obtenidos, con el fin de comprender las relaciones entre las modalidades de las variables.

3.2. Correspondencias Simples

En este apartado se desarrolla el análisis de correspondencia simple como una técnica exploratoria que permite estudiar la relación entre dos variables cualitativas a partir de tablas de contingencia. A través del cálculo de probabilidades, frecuencias relativas por filas y columnas, perfiles y pruebas de hipótesis, se busca identificar asociaciones significativas entre las variables analizadas. Además, se emplea la representación gráfica del análisis de correspondencia simple, considerando una dimensión unidimensional, con el fin de facilitar la interpretación de los resultados y comprender mejor la estructura de los datos.

AC Parejas Totales

Contingencias
addmargins(table(desercion_empleados_IBM_ETL$Education, desercion_empleados_IBM_ETL$RelationshipSatisfaction))
##      
##          1    2    3    4  Sum
##   1     35   31   50   54  170
##   2     57   46   84   95  282
##   3    113  119  187  153  572
##   4     62   95  123  118  398
##   5      9   12   15   12   48
##   Sum  276  303  459  432 1470
addmargins(table(desercion_empleados_IBM_ETL$JobLevel, desercion_empleados_IBM_ETL$RelationshipSatisfaction))
##      
##          1    2    3    4  Sum
##   1     96  114  178  155  543
##   2    114  107  152  161  534
##   3     42   44   72   60  218
##   4     12   25   38   31  106
##   5     12   13   19   25   69
##   Sum  276  303  459  432 1470
addmargins(table(desercion_empleados_IBM_ETL$StockOptionLevel, desercion_empleados_IBM_ETL$WorkLifeBalance))
##      
##          1    2    3    4  Sum
##   0     37  134  392   68  631
##   1     37  147  352   60  596
##   2      6   42   92   18  158
##   3      0   21   57    7   85
##   Sum   80  344  893  153 1470
Probabilidades
addmargins(prop.table(table(desercion_empleados_IBM_ETL$Education, desercion_empleados_IBM_ETL$RelationshipSatisfaction))*100)
##      
##                 1           2           3           4         Sum
##   1     2.3809524   2.1088435   3.4013605   3.6734694  11.5646259
##   2     3.8775510   3.1292517   5.7142857   6.4625850  19.1836735
##   3     7.6870748   8.0952381  12.7210884  10.4081633  38.9115646
##   4     4.2176871   6.4625850   8.3673469   8.0272109  27.0748299
##   5     0.6122449   0.8163265   1.0204082   0.8163265   3.2653061
##   Sum  18.7755102  20.6122449  31.2244898  29.3877551 100.0000000
addmargins(prop.table(table(desercion_empleados_IBM_ETL$JobLevel, desercion_empleados_IBM_ETL$RelationshipSatisfaction))*100)
##      
##                 1           2           3           4         Sum
##   1     6.5306122   7.7551020  12.1088435  10.5442177  36.9387755
##   2     7.7551020   7.2789116  10.3401361  10.9523810  36.3265306
##   3     2.8571429   2.9931973   4.8979592   4.0816327  14.8299320
##   4     0.8163265   1.7006803   2.5850340   2.1088435   7.2108844
##   5     0.8163265   0.8843537   1.2925170   1.7006803   4.6938776
##   Sum  18.7755102  20.6122449  31.2244898  29.3877551 100.0000000
addmargins(prop.table(table(desercion_empleados_IBM_ETL$StockOptionLevel, desercion_empleados_IBM_ETL$WorkLifeBalance))*100)
##      
##                 1           2           3           4         Sum
##   0     2.5170068   9.1156463  26.6666667   4.6258503  42.9251701
##   1     2.5170068  10.0000000  23.9455782   4.0816327  40.5442177
##   2     0.4081633   2.8571429   6.2585034   1.2244898  10.7482993
##   3     0.0000000   1.4285714   3.8775510   0.4761905   5.7823129
##   Sum   5.4421769  23.4013605  60.7482993  10.4081633 100.0000000
Frecuencias [CPF y CPC]
round(addmargins(prop.table(table(desercion_empleados_IBM_ETL$Education, desercion_empleados_IBM_ETL$RelationshipSatisfaction), 1)*100, 2), 2)
##    
##          1      2      3      4    Sum
##   1  20.59  18.24  29.41  31.76 100.00
##   2  20.21  16.31  29.79  33.69 100.00
##   3  19.76  20.80  32.69  26.75 100.00
##   4  15.58  23.87  30.90  29.65 100.00
##   5  18.75  25.00  31.25  25.00 100.00
round(addmargins(prop.table(table(desercion_empleados_IBM_ETL$Education, desercion_empleados_IBM_ETL$RelationshipSatisfaction), 2)*100, 1), 2)
##      
##            1      2      3      4
##   1    12.68  10.23  10.89  12.50
##   2    20.65  15.18  18.30  21.99
##   3    40.94  39.27  40.74  35.42
##   4    22.46  31.35  26.80  27.31
##   5     3.26   3.96   3.27   2.78
##   Sum 100.00 100.00 100.00 100.00
round(addmargins(prop.table(table(desercion_empleados_IBM_ETL$JobLevel, desercion_empleados_IBM_ETL$RelationshipSatisfaction), 1)*100, 2), 2)
##    
##          1      2      3      4    Sum
##   1  17.68  20.99  32.78  28.55 100.00
##   2  21.35  20.04  28.46  30.15 100.00
##   3  19.27  20.18  33.03  27.52 100.00
##   4  11.32  23.58  35.85  29.25 100.00
##   5  17.39  18.84  27.54  36.23 100.00
round(addmargins(prop.table(table(desercion_empleados_IBM_ETL$JobLevel, desercion_empleados_IBM_ETL$RelationshipSatisfaction), 2)*100, 1), 2)
##      
##            1      2      3      4
##   1    34.78  37.62  38.78  35.88
##   2    41.30  35.31  33.12  37.27
##   3    15.22  14.52  15.69  13.89
##   4     4.35   8.25   8.28   7.18
##   5     4.35   4.29   4.14   5.79
##   Sum 100.00 100.00 100.00 100.00
round(addmargins(prop.table(table(desercion_empleados_IBM_ETL$StockOptionLevel, desercion_empleados_IBM_ETL$WorkLifeBalance), 1)*100, 2), 2)
##    
##          1      2      3      4    Sum
##   0   5.86  21.24  62.12  10.78 100.00
##   1   6.21  24.66  59.06  10.07 100.00
##   2   3.80  26.58  58.23  11.39 100.00
##   3   0.00  24.71  67.06   8.24 100.00
round(addmargins(prop.table(table(desercion_empleados_IBM_ETL$StockOptionLevel, desercion_empleados_IBM_ETL$WorkLifeBalance), 2)*100, 1), 2)
##      
##            1      2      3      4
##   0    46.25  38.95  43.90  44.44
##   1    46.25  42.73  39.42  39.22
##   2     7.50  12.21  10.30  11.76
##   3     0.00   6.10   6.38   4.58
##   Sum 100.00 100.00 100.00 100.00
Perfiles [CPF y CPC]
plotct(table(desercion_empleados_IBM_ETL$Education, desercion_empleados_IBM_ETL$RelationshipSatisfaction),"row")

plotct(table(desercion_empleados_IBM_ETL$Education, desercion_empleados_IBM_ETL$RelationshipSatisfaction),"col")

plotct(table(desercion_empleados_IBM_ETL$JobLevel, desercion_empleados_IBM_ETL$RelationshipSatisfaction),"row")

plotct(table(desercion_empleados_IBM_ETL$JobLevel, desercion_empleados_IBM_ETL$RelationshipSatisfaction),"col")

plotct(table(desercion_empleados_IBM_ETL$StockOptionLevel, desercion_empleados_IBM_ETL$WorkLifeBalance),"row")

plotct(table(desercion_empleados_IBM_ETL$StockOptionLevel, desercion_empleados_IBM_ETL$WorkLifeBalance),"col")

Pruebas de Hipótesis
chisq.test(table(desercion_empleados_IBM_ETL$Education, desercion_empleados_IBM_ETL$RelationshipSatisfaction))
## 
##  Pearson's Chi-squared test
## 
## data:  table(desercion_empleados_IBM_ETL$Education, desercion_empleados_IBM_ETL$RelationshipSatisfaction)
## X-squared = 13.125, df = 12, p-value = 0.36
chisq.test(table(desercion_empleados_IBM_ETL$JobLevel, desercion_empleados_IBM_ETL$RelationshipSatisfaction))
## 
##  Pearson's Chi-squared test
## 
## data:  table(desercion_empleados_IBM_ETL$JobLevel, desercion_empleados_IBM_ETL$RelationshipSatisfaction)
## X-squared = 10.742, df = 12, p-value = 0.5512
chisq.test(table(desercion_empleados_IBM_ETL$TotalWorkingYears, desercion_empleados_IBM_ETL$WorkLifeBalance))
## Warning in chisq.test(table(desercion_empleados_IBM_ETL$TotalWorkingYears, :
## Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  table(desercion_empleados_IBM_ETL$TotalWorkingYears, desercion_empleados_IBM_ETL$WorkLifeBalance)
## X-squared = 103.63, df = 117, p-value = 0.8067

AC Pareja Única

Contingencias y Residuales [T-CP]
chisq.test(table(desercion_empleados_IBM_ETL$RelationshipSatisfaction,desercion_empleados_IBM_ETL$StockOptionLevel))$observed
##    
##       0   1   2   3
##   1 111 114  35  16
##   2 120 134  34  15
##   3 193 191  41  34
##   4 207 157  48  20
chisq.test(table(desercion_empleados_IBM_ETL$RelationshipSatisfaction,desercion_empleados_IBM_ETL$StockOptionLevel))$expected 
##    
##            0       1        2        3
##   1 118.4735 111.902 29.66531 15.95918
##   2 130.0633 122.849 32.56735 17.52041
##   3 197.0265 186.098 49.33469 26.54082
##   4 185.4367 175.151 46.43265 24.97959
chisq.test(table(desercion_empleados_IBM_ETL$RelationshipSatisfaction,desercion_empleados_IBM_ETL$StockOptionLevel))$residuals
##    
##               0           1           2           3
##   1 -0.68661250  0.19832526  0.97945635  0.01021712
##   2 -0.88239207  1.00607147  0.25104400 -0.60214179
##   3 -0.28685911  0.35934046 -1.18662484  1.44788531
##   4  1.58349480 -1.37149652  0.23001353 -0.99632511
chisq.test(table(desercion_empleados_IBM_ETL$RelationshipSatisfaction,desercion_empleados_IBM_ETL$StockOptionLevel))$stdres
##    
##               0           1           2           3
##   1 -1.00843033  0.28538917  1.15035886  0.01167936
##   2 -1.31087875  1.46438417  0.29823927 -0.69623490
##   3 -0.45785654  0.56194286 -1.51456625  1.79866810
##   4  2.49433234 -2.11669191  0.28973778 -1.22150387
Contribuciones [T-CP]
chisq.test(table(desercion_empleados_IBM_ETL$RelationshipSatisfaction,desercion_empleados_IBM_ETL$StockOptionLevel))$residuals^2/chisq.test(table(desercion_empleados_IBM_ETL$RelationshipSatisfaction,desercion_empleados_IBM_ETL$StockOptionLevel))$statistic*100
##    
##                0            1            2            3
##   1  3.672628228  0.306414714  7.473494630  0.000813225
##   2  6.065641614  7.885172932  0.490968058  2.824561858
##   3  0.641048451  1.005925437 10.969338126 16.331342265
##   4 19.533804460 14.653554132  0.412154775  7.733137094
Correspondencia Simple Unidimensional [R-UR]
CA(table(desercion_empleados_IBM_ETL$RelationshipSatisfaction,desercion_empleados_IBM_ETL$StockOptionLevel), graph = FALSE)$eig
##         eigenvalue percentage of variance cumulative percentage of variance
## dim 1 0.0053437935              61.195651                          61.19565
## dim 2 0.0029135402              33.365060                          94.56071
## dim 3 0.0004749756               5.439289                         100.00000
CA(table(desercion_empleados_IBM_ETL$RelationshipSatisfaction,desercion_empleados_IBM_ETL$StockOptionLevel), graph = FALSE)$col
## $coord
##         Dim 1       Dim 2        Dim 3
## 0 -0.07115604  0.03169045 -0.004217638
## 1  0.06625604 -0.02294854 -0.014848700
## 2 -0.04299241 -0.10979225  0.042598975
## 3  0.14357255  0.12973912  0.056241379
## 
## $contrib
##       Dim 1     Dim 2     Dim 3
## 0 40.671101 14.796124  1.607605
## 1 33.306589  7.328547 18.820647
## 2  3.717695 44.469484 41.064522
## 3 22.304615 33.405846 38.507226
## 
## $cos2
##       Dim 1     Dim 2       Dim 3
## 0 0.8320410 0.1650358 0.002923209
## 1 0.8545607 0.1025184 0.042920907
## 2 0.1175991 0.7669443 0.115456597
## 3 0.5076061 0.4145013 0.077892554
## 
## $inertia
## [1] 0.002612106 0.002082749 0.001689349 0.002348105
CA(table(desercion_empleados_IBM_ETL$RelationshipSatisfaction,desercion_empleados_IBM_ETL$StockOptionLevel), graph = FALSE)$row
## $coord
##         Dim 1       Dim 2         Dim 3
## 1  0.02216965 -0.05808914  0.0382230539
## 2  0.04656636 -0.06475649 -0.0308707065
## 3  0.06081529  0.06630472  0.0008655914
## 4 -0.11144132  0.01208323 -0.0036876048
## 
## $contrib
##       Dim 1    Dim 2       Dim 3
## 1  1.726871 21.74506 57.75255957
## 2  8.364118 29.66682 41.35682154
## 3 21.610820 47.11544  0.04925496
## 4 68.298191  1.47269  0.84136393
## 
## $cos2
##       Dim 1      Dim 2        Dim 3
## 1 0.0922673 0.63346110 0.2742715997
## 2 0.2964424 0.57327426 0.1302833504
## 3 0.4568550 0.54305241 0.0000925505
## 4 0.9873117 0.01160721 0.0010810620
## 
## $inertia
## [1] 0.001000142 0.001507751 0.002527799 0.003696618

El análisis de correspondencia simple permitió identificar patrones de asociación entre las variables cualitativas estudiadas, evidenciando qué categorías presentan mayor relación entre sí. El uso de perfiles, contribuciones y representaciones gráficas facilitó la interpretación de los resultados, permitiendo visualizar de manera clara las distancias y similitudes entre categorías. En general, esta técnica resultó útil para resumir la información contenida en la tabla de contingencia y aportar una visión más clara del comportamiento de las variables analizadas.

3.3. Correspondencias Múltiples

En esta sección se aplica el análisis de correspondencia múltiple (ACM), el cual permite estudiar de manera conjunta varias variables cualitativas. Esta técnica facilita la reducción de la dimensionalidad de los datos y la identificación de relaciones entre categorías, utilizando herramientas como el biplot del ACM, la calidad de representación y las contribuciones de cada variable. El objetivo principal es obtener una representación gráfica que sintetice la información y facilite su interpretación.

ACM

desercion_empleados_IBM_ETL <- read_excel("E:/Proyecto_GDD_2025-2/desercion_empleados_IBM_ETL.xlsx")


set.seed(780729)
desercion_empleados_IBM_ETL.active <-desercion_empleados_IBM_ETL[sample(1:nrow(desercion_empleados_IBM_ETL), 10), 7:12]

desercion_empleados_IBM_ETL.active[] <-lapply(desercion_empleados_IBM_ETL.active, factor)

res.acm <- tryCatch(
MCA(desercion_empleados_IBM_ETL.active, graph = FALSE, ncp = 5),
error = function(e) {
message("Error en MCA: ", e$message)
return(NULL)})

if (!is.null(res.acm)) {suppressWarnings(round(res.acm$eig, 3))}
##       eigenvalue percentage of variance cumulative percentage of variance
## dim 1      0.717                 16.542                            16.542
## dim 2      0.680                 15.698                            32.239
## dim 3      0.557                 12.843                            45.083
## dim 4      0.520                 12.007                            57.090
## dim 5      0.462                 10.671                            67.761
## dim 6      0.397                  9.162                            76.923
## dim 7      0.333                  7.692                            84.615
## dim 8      0.333                  7.692                            92.308
## dim 9      0.333                  7.692                           100.000

Biplot ACM

desercion_empleados_IBM_ETL <- read_excel("E:/Proyecto_GDD_2025-2/desercion_empleados_IBM_ETL.xlsx")


set.seed(780729)
desercion_empleados_IBM_ETL.active <-desercion_empleados_IBM_ETL[sample(1:nrow(desercion_empleados_IBM_ETL), 30), 7:12]

desercion_empleados_IBM_ETL.active[] <-lapply(desercion_empleados_IBM_ETL.active, factor)
res.mca <- MCA(desercion_empleados_IBM_ETL.active, graph = FALSE)

fviz_mca_biplot(res.mca, repel = TRUE, col.var = "#E7B800", addEllipses = TRUE, ellipse.level = 0.95)

Calidad de Representación

desercion_empleados_IBM_ETL <- read_excel("E:/Proyecto_GDD_2025-2/desercion_empleados_IBM_ETL.xlsx")


set.seed(780729)
desercion_empleados_IBM_ETL.active <-desercion_empleados_IBM_ETL[sample(1:nrow(desercion_empleados_IBM_ETL), 30), 7:12]

desercion_empleados_IBM_ETL.active[] <-lapply(desercion_empleados_IBM_ETL.active, factor)

res.mca <- MCA(desercion_empleados_IBM_ETL.active, graph = FALSE)


fviz_mca_var(res.mca, col.var ="cos2", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

res.mca$var$cos2
##                         Dim 1        Dim 2        Dim 3        Dim 4
## Education_1      3.056619e-02 3.345706e-01 1.301190e-01 9.200531e-02
## Education_2      5.634659e-01 2.181960e-02 2.081272e-02 3.422938e-02
## Education_3      9.055220e-02 5.441395e-01 3.127613e-02 2.641544e-02
## Education_4      1.050740e-01 8.714192e-02 1.232561e-01 8.201615e-02
## Education_5      2.686497e-02 1.139284e-01 3.458678e-01 1.923393e-01
## Human Resources  3.238256e-02 2.442415e-01 1.040038e-01 8.564681e-02
## Life Sciences    4.020181e-01 1.612871e-01 7.267344e-02 8.366534e-02
## Marketing        3.447925e-01 1.058153e-03 2.756102e-01 1.777533e-02
## Medical          8.387349e-03 4.043636e-01 1.587977e-04 1.423403e-01
## Other            5.619845e-02 1.479485e-01 2.224343e-01 3.331370e-02
## Technical Degree 1.110167e-01 3.368497e-03 4.362338e-02 3.613819e-02
## 81               1.788638e-03 9.278709e-03 1.141874e-02 7.363410e-04
## 86               1.362755e-02 5.327771e-03 1.363043e-02 1.358476e-02
## 169              6.644651e-03 3.727879e-02 1.750940e-02 5.739341e-02
## 267              1.461588e-02 3.430130e-02 3.311703e-03 5.317104e-03
## 439              2.987325e-03 9.472536e-03 3.848891e-02 1.578281e-01
## 476              1.362755e-02 5.327771e-03 1.363043e-02 1.358476e-02
## 505              2.273761e-05 1.656643e-03 4.166248e-02 4.910555e-03
## 555              4.307242e-01 1.030562e-02 5.710590e-02 8.093453e-06
## 621              1.647860e-02 1.528719e-04 2.864257e-02 5.151332e-02
## 675              4.223658e-04 1.361585e-01 3.233779e-03 2.356491e-03
## 760              3.705641e-03 1.376068e-01 6.319783e-02 1.608828e-01
## 783              1.496229e-01 1.076407e-02 1.481770e-03 6.464339e-02
## 830              7.997377e-03 1.922580e-02 5.286726e-03 5.254504e-03
## 1115             3.352277e-02 9.872649e-05 9.676530e-04 1.261822e-02
## 1260             1.362755e-02 5.327771e-03 1.363043e-02 1.358476e-02
## 1346             1.246868e-02 7.747518e-03 1.114860e-02 1.098294e-02
## 1387             2.521713e-02 1.699140e-02 5.103428e-03 4.178879e-02
## 1446             2.549567e-02 2.152670e-02 2.406499e-01 3.538702e-02
## 1497             2.521713e-02 1.699140e-02 5.103428e-03 4.178879e-02
## 1499             5.373710e-04 6.404970e-03 5.990857e-03 2.349574e-02
## 1544             1.190395e-01 7.137814e-02 1.724514e-01 3.008865e-02
## 1602             2.107996e-02 2.017712e-03 2.562971e-02 2.722852e-02
## 1665             4.636521e-03 1.038912e-01 1.067199e-01 1.775130e-01
## 1722             3.579274e-02 9.973322e-02 3.871230e-02 3.109164e-05
## 1837             1.657496e-02 1.272421e-02 8.704301e-05 2.307406e-03
## 1863             7.836406e-03 3.471695e-02 3.177151e-02 3.101575e-02
## 1865             5.610015e-03 7.082575e-02 6.184841e-03 1.273266e-02
## 1871             2.432191e-04 7.146866e-02 5.765353e-02 6.427647e-03
## 1971             1.362755e-02 5.327771e-03 1.363043e-02 1.358476e-02
## 2027             1.169031e-02 7.045349e-02 4.471744e-04 1.589345e-02
## Female           1.620451e-01 9.411649e-03 1.292089e-03 2.375408e-01
## Male             1.620451e-01 9.411649e-03 1.292089e-03 2.375408e-01
## 30               1.362755e-02 5.327771e-03 1.363043e-02 1.358476e-02
## 33               4.307242e-01 1.030562e-02 5.710590e-02 8.093453e-06
## 36               1.169031e-02 7.045349e-02 4.471744e-04 1.589345e-02
## 39               1.190395e-01 7.137814e-02 1.724514e-01 3.008865e-02
## 40               3.352277e-02 9.872649e-05 9.676530e-04 1.261822e-02
## 41               2.432191e-04 7.146866e-02 5.765353e-02 6.427647e-03
## 44               3.705641e-03 1.376068e-01 6.319783e-02 1.608828e-01
## 45               7.836406e-03 3.471695e-02 3.177151e-02 3.101575e-02
## 46               6.847453e-02 1.749088e-02 7.839033e-04 8.600769e-02
## 48               2.521713e-02 1.699140e-02 5.103428e-03 4.178879e-02
## 56               2.107996e-02 2.017712e-03 2.562971e-02 2.722852e-02
## 57               1.362755e-02 5.327771e-03 1.363043e-02 1.358476e-02
## 59               1.362755e-02 5.327771e-03 1.363043e-02 1.358476e-02
## 60               3.579274e-02 9.973322e-02 3.871230e-02 3.109164e-05
## 65               1.461588e-02 3.430130e-02 3.311703e-03 5.317104e-03
## 69               4.223658e-04 1.361585e-01 3.233779e-03 2.356491e-03
## 74               1.734733e-02 3.738245e-03 6.915306e-02 2.017971e-01
## 77               2.521713e-02 1.699140e-02 5.103428e-03 4.178879e-02
## 82               1.362755e-02 5.327771e-03 1.363043e-02 1.358476e-02
## 87               2.147595e-02 7.435912e-02 4.007866e-03 1.340247e-02
## 91               4.636521e-03 1.038912e-01 1.067199e-01 1.775130e-01
## 97               1.242631e-02 5.820610e-03 2.499038e-01 3.452136e-02
## 98               2.094096e-02 2.660880e-02 1.646255e-02 1.627669e-02
## 99               1.788638e-03 9.278709e-03 1.141874e-02 7.363410e-04
## 100              6.644651e-03 3.727879e-02 1.750940e-02 5.739341e-02
## JobInvolvement_1 6.937499e-01 1.797665e-02 4.722967e-02 5.036193e-02
## JobInvolvement_2 1.026019e-01 3.526613e-03 2.598670e-03 1.158023e-01
## JobInvolvement_3 4.836700e-02 1.502354e-01 2.240392e-01 1.221905e-02
## JobInvolvement_4 1.809040e-02 9.936999e-02 2.065386e-01 4.172435e-01
##                         Dim 5
## Education_1      0.0952990066
## Education_2      0.2085024891
## Education_3      0.1784357342
## Education_4      0.3675737652
## Education_5      0.0471779533
## Human Resources  0.2092791455
## Life Sciences    0.0260526650
## Marketing        0.0555314286
## Medical          0.0008674927
## Other            0.0314824580
## Technical Degree 0.0100286450
## 81               0.0232057521
## 86               0.0054649230
## 169              0.0119655479
## 267              0.0053163049
## 439              0.0558494242
## 476              0.0054649230
## 505              0.0145710630
## 555              0.1420594179
## 621              0.0880901880
## 675              0.0288153045
## 760              0.0976324245
## 783              0.0663681001
## 830              0.0038461256
## 1115             0.0733183564
## 1260             0.0054649230
## 1346             0.0049371977
## 1387             0.0004020831
## 1446             0.0024446147
## 1497             0.0004020831
## 1499             0.0007826252
## 1544             0.0835616982
## 1602             0.1047393626
## 1665             0.0636999326
## 1722             0.1044883537
## 1837             0.0137871631
## 1863             0.0003660363
## 1865             0.0002688235
## 1871             0.0018068106
## 1971             0.0054649230
## 2027             0.0198982735
## Female           0.0475391164
## Male             0.0475391164
## 30               0.0054649230
## 33               0.1420594179
## 36               0.0198982735
## 39               0.0835616982
## 40               0.0733183564
## 41               0.0018068106
## 44               0.0976324245
## 45               0.0003660363
## 46               0.0422389115
## 48               0.0004020831
## 56               0.1047393626
## 57               0.0054649230
## 59               0.0054649230
## 60               0.1044883537
## 65               0.0053163049
## 69               0.0288153045
## 74               0.1471863869
## 77               0.0004020831
## 82               0.0054649230
## 87               0.0052850579
## 91               0.0636999326
## 97               0.0149931463
## 98               0.0090617833
## 99               0.0232057521
## 100              0.0119655479
## JobInvolvement_1 0.0001375601
## JobInvolvement_2 0.0125372384
## JobInvolvement_3 0.1023265745
## JobInvolvement_4 0.0815487730

Contribuciones

desercion_empleados_IBM_ETL <- read_excel("E:/Proyecto_GDD_2025-2/desercion_empleados_IBM_ETL.xlsx")


set.seed(780729)
desercion_empleados_IBM_ETL.active <-desercion_empleados_IBM_ETL[sample(1:nrow(desercion_empleados_IBM_ETL), 30), 7:12]

desercion_empleados_IBM_ETL.active[] <-lapply(desercion_empleados_IBM_ETL.active, factor)

res.mca <- MCA(desercion_empleados_IBM_ETL.active, graph = FALSE)

fviz_contrib(res.mca, choice = "var", axes = 1, top = 15)

fviz_contrib(res.mca, choice = "var", axes = 2, top = 15)

fviz_contrib(res.mca, choice = "var", axes = 3, top = 15)

fviz_contrib(res.mca, choice = "var", axes = 4, top = 15)

fviz_contrib(res.mca, choice = "var", axes = 5, top = 15)

Biplot con Contribuciones

desercion_empleados_IBM_ETL <- read_excel("E:/Proyecto_GDD_2025-2/desercion_empleados_IBM_ETL.xlsx")


set.seed(780729)
desercion_empleados_IBM_ETL.active <-desercion_empleados_IBM_ETL[sample(1:nrow(desercion_empleados_IBM_ETL), 30), 7:12]

desercion_empleados_IBM_ETL.active[] <-lapply(desercion_empleados_IBM_ETL.active, factor)

res.mca <- MCA(desercion_empleados_IBM_ETL.active, graph = FALSE)

fviz_mca_var(res.mca, col.var ="contrib", gradient.cols = c("#00AFBB", "#E7B800", "#FC4E07"), repel = TRUE)

El análisis de correspondencia múltiple permitió identificar asociaciones relevantes entre las diferentes variables cualitativas consideradas, así como visualizar patrones comunes dentro de los datos. Los biplots y el análisis de las contribuciones facilitaron la interpretación de la influencia de cada variable en la construcción de las dimensiones principales. En conjunto, el ACM resultó una herramienta eficaz para explorar y resumir la información categórica de la base de datos.

Fase 4 [Conglomerados]

En esta cuarta fase del estudio, se presentan los cálculos, visualizaciones e interpretaciones obtenidas a partir del conjunto de datos procesado en las fases 1, 2 y 3. El enfoque principal corresponde al Análisis de Conglomerados, tanto en su versión jerárquica, representada mediante dendrogramas, como en su modalidad no jerárquica, implementada mediante el algoritmo de K-medias. El objetivo general es determinar la existencia de agrupaciones naturales dentro de los datos, analizar su consistencia interna y describir las características de cada grupo identificado.

4.1. Objetivos

La cuarta fase del estudio se centra en el Análisis de Conglomerados, una técnica de clasificación cuyo propósito es agrupar individuos u observaciones en función de su similitud respecto a un conjunto de variables. Mediante el uso de algoritmos jerárquicos y no jerárquicos, se busca identificar estructuras naturales en los datos, permitiendo definir grupos homogéneos internamente y heterogéneos entre sí.

Esta etapa complementa las fases anteriores al facilitar la segmentación y caracterización de los individuos o unidades de análisis.

4.2. Agrupación Jerárquica

En este apartado se desarrolla la técnica de agrupación jerárquica, la cual permite clasificar a los empleados en grupos homogéneos a partir de medidas de disimilaridad. Se analiza el campo clasificador y se aplican distintos métodos de enlace, como unión simple, completa y promedio, junto con la optimización de Mojena. El proceso se apoya en la construcción e interpretación de dendrogramas optimizados, con el fin de identificar la estructura jerárquica de los datos.

Campo Clasificador

desercion_empleados_IBM_ETL <- read_excel("E:/Proyecto_GDD_2025-2/desercion_empleados_IBM_ETL.xlsx")
head(as.data.frame(desercion_empleados_IBM_ETL))
##   Age Attrition    BusinessTravel DailyRate             Department
## 1  41       Yes     Travel_Rarely      1102                  Sales
## 2  49        No Travel_Frequently       279 Research & Development
## 3  37       Yes     Travel_Rarely      1373 Research & Development
## 4  33        No Travel_Frequently      1392 Research & Development
## 5  27        No     Travel_Rarely       591 Research & Development
## 6  32        No Travel_Frequently      1005 Research & Development
##   DistanceFromHome Education EducationField EmployeeNumber Gender HourlyRate
## 1                1         2  Life Sciences              1 Female         94
## 2                8         1  Life Sciences              2   Male         61
## 3                2         2          Other              4   Male         92
## 4                3         4  Life Sciences              5 Female         56
## 5                2         1        Medical              7   Male         40
## 6                2         2  Life Sciences              8   Male         79
##   JobInvolvement JobLevel               JobRole JobSatisfaction MaritalStatus
## 1              3        2       Sales Executive               4        Single
## 2              2        2    Research Scientist               2       Married
## 3              2        1 Laboratory Technician               3        Single
## 4              3        1    Research Scientist               3       Married
## 5              3        1 Laboratory Technician               2       Married
## 6              3        1 Laboratory Technician               4        Single
##   MonthlyIncome MonthlyRate NumCompaniesWorked Over18 OverTime
## 1          5993       19479                  8    Yes      Yes
## 2          5130       24907                  1    Yes       No
## 3          2090        2396                  6    Yes      Yes
## 4          2909       23159                  1    Yes      Yes
## 5          3468       16632                  9    Yes       No
## 6          3068       11864                  0    Yes       No
##   PercentSalaryHike PerformanceRating RelationshipSatisfaction StandardHours
## 1                11                 3                        1            80
## 2                23                 4                        4            80
## 3                15                 3                        2            80
## 4                11                 3                        3            80
## 5                12                 3                        4            80
## 6                13                 3                        3            80
##   StockOptionLevel TotalWorkingYears TrainingTimesLastYear WorkLifeBalance
## 1                0                 8                     0               1
## 2                1                10                     3               3
## 3                0                 7                     3               3
## 4                0                 8                     3               3
## 5                1                 6                     3               3
## 6                0                 8                     2               2
##   YearsAtCompany YearsInCurrentRole YearsSinceLastPromotion
## 1              6                  4                       0
## 2             10                  7                       1
## 3              0                  0                       0
## 4              8                  7                       3
## 5              2                  2                       2
## 6              7                  7                       3
##   YearsWithCurrManager
## 1                    5
## 2                    7
## 3                    0
## 4                    0
## 5                    2
## 6                    6

Disimilaridad

data_ = as.data.frame(desercion_empleados_IBM_ETL_Muestreado)[, -c(2, 3, 5, 8, 10, 11, 12, 13, 14, 15, 16, 20, 21, 23, 24, 25, 26, 28, 29, 31, 32, 33)]
rownames(data_) = unclass(desercion_empleados_IBM_ETL_Muestreado$Gender)
## Warning: Unknown or uninitialised column: `Gender`.
fviz_dist(get_dist(data_, stand = T, method = "euclidean"), gradient = list(low = "#00AFBB", mid = "white", high = "#FC4E07"))

Optimización de Mojena
Unión Simple
hc_single = hclust(get_dist(data_, stand = T, method = "euclidean"), method = "single")

mojena = function(hc){
  n_hd = length(hc$height)
  alp_g = 0 ; alpha = hc$height[n_hd:1]
  for(i in 1:(n_hd-1)){
    alp_g[i] = mean(alpha[(n_hd-i+1):1])+1.25*sd(alpha[(n_hd-i+1):1])
  }
  nog = sum(alp_g<= alpha[-n_hd]) + 1
  plot(alpha[-n_hd], pch=20, col=(alp_g>alpha[-n_hd])+1, main = paste("Optimal number of groups =",nog),
       ylab = expression(alpha[g]), xlab="Nodes")}
mojena(hc_single)

Unión Completa
hc_complete = hclust(get_dist(data_, stand = T, method = "euclidean"), method = "complete")

mojena = function(hc){
  n_hd = length(hc$height)
  alp_g = 0 ; alpha = hc$height[n_hd:1]
  for(i in 1:(n_hd-1)){
    alp_g[i] = mean(alpha[(n_hd-i+1):1])+1.25*sd(alpha[(n_hd-i+1):1])
  }
  nog = sum(alp_g<= alpha[-n_hd]) + 1
  plot(alpha[-n_hd], pch=20, col=(alp_g>alpha[-n_hd])+1, main = paste("Optimal number of groups =",nog),
       ylab = expression(alpha[g]), xlab="Nodes")}

mojena(hc_complete)

Unión Promedio
hc_average = hclust(get_dist(data_, stand = T, method = "euclidean"), method = "average")

mojena = function(hc){
  n_hd = length(hc$height)
  alp_g = 0 ; alpha = hc$height[n_hd:1]
  for(i in 1:(n_hd-1)){
    alp_g[i] = mean(alpha[(n_hd-i+1):1])+1.25*sd(alpha[(n_hd-i+1):1])
  }
  nog = sum(alp_g<= alpha[-n_hd]) + 1
  plot(alpha[-n_hd], pch=20, col=(alp_g>alpha[-n_hd])+1, main = paste("Optimal number of groups =",nog),
       ylab = expression(alpha[g]), xlab="Nodes")}

mojena(hc_average)

Dendogramas Optimizados

Enlace Simple
suppressWarnings(fviz_dend(hc_single, k = 3, cex = 0.5, k_colors = "npg", color_labels_by_k = T, rect = T))

Enlace Completo
fviz_dend(hc_complete, k = 3, cex = 0.5, k_colors = "npg", color_labels_by_k = T, rect = T)

Enlace Promedio
fviz_dend(hc_average, k = 3, cex = 0.5, k_colors = "npg", color_labels_by_k = T, rect = T)

La agrupación jerárquica permitió identificar grupos de empleados con características similares, facilitando la comprensión de la estructura interna de los datos. Los diferentes métodos de enlace y la optimización de Mojena contribuyeron a seleccionar una partición adecuada, mientras que los dendrogramas facilitaron la visualización de los resultados. En general, esta técnica resultó útil para el análisis exploratorio y la clasificación de los individuos según su nivel de similitud.

4.3. Agrupación No-Jerárquica

En esta sección se aplica la técnica de agrupación no jerárquica, específicamente el método K-means, con el objetivo de segmentar a los empleados en un número determinado de grupos. Para la selección del número óptimo de clústeres se utilizan criterios como el método del codo (elbow), silhouette, gap statistic y majority rule. Posteriormente, se analizan los resultados obtenidos y se representan gráficamente los grupos formados.

K-Óptimo

Elbow
fviz_nbclust(data_, kmeans, method = "wss") + geom_vline(xintercept = 3, linetype = 2)

Silhouette
fviz_nbclust(data_, kmeans, method = "silhouette")

Gap Statistic
fviz_nbclust(data_, kmeans, method = "gap_stat")

Majority Rule
suppressWarnings(NbClust(data_, diss = NULL, distance = "euclidean", min.nc = 2, max.nc = 10, method = "kmeans")$Best.nc)

## *** : The Hubert index is a graphical method of determining the number of clusters.
##                 In the plot of Hubert index, we seek a significant knee that corresponds to a 
##                 significant increase of the value of the measure i.e the significant peak in Hubert
##                 index second differences plot. 
## 

## *** : The D index is a graphical method of determining the number of clusters. 
##                 In the plot of D index, we seek a significant knee (the significant peak in Dindex
##                 second differences plot) that corresponds to a significant increase of the value of
##                 the measure. 
##  
## ******************************************************************* 
## * Among all indices:                                                
## * 5 proposed 2 as the best number of clusters 
## * 9 proposed 3 as the best number of clusters 
## * 1 proposed 4 as the best number of clusters 
## * 1 proposed 5 as the best number of clusters 
## * 1 proposed 6 as the best number of clusters 
## * 2 proposed 8 as the best number of clusters 
## * 5 proposed 9 as the best number of clusters 
## 
##                    ***** Conclusion *****                            
##  
## * According to the majority rule, the best number of clusters is  3 
##  
##  
## *******************************************************************
##                     KL       CH Hartigan     CCC    Scott    Marriot
## Number_clusters 9.0000   9.0000   3.0000  2.0000   3.0000 8.0000e+00
## Value_Index     8.9584 920.0315  78.1444 20.7476 127.8523 8.6761e+24
##                       TrCovW    TraceW Friedman    Rubin Cindex     DB
## Number_clusters 3.000000e+00         3   8.0000   9.0000 5.0000 2.0000
## Value_Index     5.067763e+17 653557647 124.0682 -28.4654 0.3306 0.5771
##                 Silhouette   Duda PseudoT2   Beale Ratkowsky      Ball
## Number_clusters     2.0000 3.0000   3.0000  3.0000    4.0000         3
## Value_Index         0.6174 1.3167 -17.8008 -0.7345    0.1564 630999172
##                 PtBiserial  Frey McClain  Dunn Hubert SDindex Dindex   SDbw
## Number_clusters     2.0000 6.000  2.0000 9.000      0   3e+00      0 9.0000
## Value_Index         0.7122 1.432  0.3472 0.097      0   5e-04      0 0.0692

Resultados K-Means

K-Óptimo [El_Ma-Rul 3]
set.seed(121124)
print(kmeans(data_, 3, nstart = 25))
## K-means clustering with 3 clusters of sizes 56, 42, 52
## 
## Cluster means:
##        Age EmployeeNumber MonthlyRate NumCompaniesWorked PerformanceRating
## 1 38.44643      1080.7321   22455.161           2.803571          3.125000
## 2 38.50000       986.7857    6277.024           2.761905          3.166667
## 3 36.78846      1033.6346   13452.769           2.019231          3.115385
## 
## Clustering vector:
##   [1] 3 1 2 1 1 1 2 1 1 3 1 3 1 1 1 1 1 1 3 1 2 2 3 2 2 3 1 3 1 1 2 1 3 1 2 2 3
##  [38] 2 3 2 1 2 1 3 3 2 2 2 3 2 3 2 3 3 3 3 1 3 2 2 1 3 3 3 3 2 2 2 1 1 3 1 1 2
##  [75] 2 2 3 2 2 3 3 3 3 3 3 1 3 3 2 2 1 1 3 2 3 1 1 2 1 2 1 3 1 1 3 1 1 1 2 3 2
## [112] 1 1 3 3 2 2 3 1 3 1 1 2 1 1 3 1 2 3 1 3 1 3 1 2 1 3 1 2 1 3 1 1 2 1 3 3 2
## [149] 3 3
## 
## Within cluster sum of squares by cluster:
## [1] 352711939 198106902 283049366
##  (between_SS / total_SS =  88.5 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"
K-Óptimo [sil 4]
set.seed(121124)
print(kmeans(data_, 4, nstart = 25))
## K-means clustering with 4 clusters of sizes 41, 41, 33, 35
## 
## Cluster means:
##        Age EmployeeNumber MonthlyRate NumCompaniesWorked PerformanceRating
## 1 39.53659      1132.9268   23600.293           2.926829          3.097561
## 2 36.63415       883.8537   11580.390           2.536585          3.195122
## 3 35.78788      1130.8788   17551.000           2.121212          3.151515
## 4 39.40000      1020.2286    5687.914           2.400000          3.085714
## 
## Clustering vector:
##   [1] 3 3 4 1 3 3 4 3 1 2 3 2 1 1 1 3 1 1 3 1 4 4 2 4 4 2 3 3 1 1 4 1 2 1 4 4 2
##  [38] 4 3 4 1 4 3 2 2 4 2 4 2 4 2 2 2 2 2 3 3 2 4 4 1 2 2 3 2 4 2 4 3 1 3 1 1 4
##  [75] 4 2 3 4 2 2 2 3 3 3 2 1 3 3 4 2 1 1 2 4 2 1 1 4 1 4 1 3 1 3 2 1 3 1 4 2 4
## [112] 1 3 2 3 4 4 2 1 2 1 1 4 1 1 2 1 4 2 1 2 1 2 1 2 3 3 1 4 1 2 1 3 4 1 2 3 4
## [149] 2 3
## 
## Within cluster sum of squares by cluster:
## [1] 139321484 122118909 120408315 121534872
##  (between_SS / total_SS =  93.1 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

Gráficos K-Means

K-Óptimo [Elb_Ma-Rul 3]
fviz_cluster(kmeans(data_, 3, nstart = 25), data = data_, palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#E7B801"), ellipse.type = "euclid", star.plot = TRUE, repel = TRUE, ggtheme = theme_minimal()
)

K-Óptimo [sil 4]
fviz_cluster(kmeans(data_, 2, nstart = 25), data = data_, palette = c("#2E9FDF", "#00AFBB", "#E7B800", "#E7B801"), ellipse.type = "euclid", star.plot = TRUE, repel = TRUE, ggtheme = theme_minimal()
)

La agrupación no jerárquica permitió clasificar a los empleados en clústeres bien definidos, facilitando la identificación de patrones y similitudes dentro de la base de datos. Los distintos criterios de selección del número óptimo de grupos aportaron mayor confiabilidad a los resultados obtenidos. Los gráficos de K-means permitieron una interpretación visual clara de la segmentación realizada, confirmando la utilidad de esta técnica en el análisis de datos.

Fase 5 [Análisis de Regresión]

La regresión multiple se centra sobre la dependencia de una variable respuesta respecto a un conjunto de variables regresoras o predictoras. Mediante un modelo de regresión se mide el efecto de cada una de las variables regresoras sobre la respuesta. Uno de los objetivos es la estimación para la predicción del valor medio de la variable dependiente, con base en el conocimiento de las variables independientes o predictoras.

5.1. Objetivos

El propósito de esta fase es establecer relaciones estadísticas entre dos o más variables mediante el uso de modelos de regresión que describen cómo una variable dependiente puede explicarse a partir de una o varias variables independientes. Dichas relaciones son de tipo probabilístico, lo que permite realizar conclusiones y predicciones sobre los fenómenos analizados.

Se calcularán medidas que expresen la intensidad y dirección de las asociaciones, aplicando modelos derivados del modelo lineal generalizado, entre ellos la Regresión Lineal Simple, la Regresión Lineal Múltiple y la Regresión Logística. Cada modelo será descrito teóricamente en su respectiva subsección y aplicado al conjunto de datos.

5.2. Regresión Lineal Simple

En este apartado se desarrolla el modelo de regresión lineal simple con el objetivo de analizar la relación entre el ingreso mensual (MonthlyIncome) y el total de años trabajados (TotalWorkingYears). Para ello, se realizan análisis descriptivos, diagramas de dispersión y la formulación del modelo estadístico. Además, se evalúan los coeficientes, el resumen estadístico, la tabla ANOVA, los intervalos de confianza y las predicciones, con el fin de interpretar adecuadamente el comportamiento de las variables.

Resumen MonthlyIncome

boxplot_MonthlyIncome <- function(data, variable, main_title = "Diagrama de caja MonthlyIncome", color = "orange", ylim = NULL) {
  if (is.vector(data)) { 
  
    boxplot(data, 
            main = main_title, 
            col = color, 
            ylim = ylim)
  } else {
    
    boxplot(data[[variable]], 
            main = main_title, 
            col = color, 
            ylim = ylim)
  }
}
summary(desercion_empleados_IBM_ETL$MonthlyIncome)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1009    2911    4919    6503    8379   19999
boxplot_MonthlyIncome(
  data = desercion_empleados_IBM_ETL, 
  variable = "MonthlyIncome", 
  main_title = "Diagrama de caja MonthlyIncome", 
  color = "orange", 
  ylim = c(1000,20000) )

Resumen de Total de años trabajados

boxplot_TotalWorkingYears <- function(data, variable, main_title = "Diagrama de caja TotalWorkingYears", color = "blue", ylim = NULL) {
  if (is.vector(data)) { 
  
    boxplot(data, 
            main = main_title, 
            col = color, 
            ylim = ylim)
  } else {
    
    boxplot(data[[variable]], 
            main = main_title, 
            col = color, 
            ylim = ylim)
  }
}
summary(desercion_empleados_IBM_ETL$TotalWorkingYears)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    6.00   10.00   11.28   15.00   40.00
boxplot_TotalWorkingYears(
  data = desercion_empleados_IBM_ETL, 
  variable = "TotalWorkingYears", 
  main_title = "Diagrama de caja TotalWorkingYears", 
  color = "blue", 
  ylim = c(0, 42) )

Diagrama de Dispersión: MonthlyIncome y TotalWorkingYearsl

plot(desercion_empleados_IBM_ETL$TotalWorkingYears, desercion_empleados_IBM_ETL$MonthlyIncome, main = "Diagrama de Dispersión")

Diagramas Totales de Dispersión

pairs(~MonthlyIncome + TotalWorkingYears + DistanceFromHome + YearsAtCompany + Age, data = desercion_empleados_IBM_ETL)

Formulación del modelo de RLS

Coeficientes del Modelo RLS
modelo_RL_Simple = lm(desercion_empleados_IBM_ETL$MonthlyIncome~desercion_empleados_IBM_ETL$TotalWorkingYears)
coef(modelo_RL_Simple)
##                                   (Intercept) 
##                                     1227.9353 
## desercion_empleados_IBM_ETL$TotalWorkingYears 
##                                      467.6584
Resumen Estadístico del Modelo RLS
summary(modelo_RL_Simple)
## 
## Call:
## lm(formula = desercion_empleados_IBM_ETL$MonthlyIncome ~ desercion_empleados_IBM_ETL$TotalWorkingYears)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11271.3  -1750.8    -87.5   1398.6  11539.5 
## 
## Coefficients:
##                                               Estimate Std. Error t value
## (Intercept)                                    1227.94     137.30   8.944
## desercion_empleados_IBM_ETL$TotalWorkingYears   467.66      10.02  46.669
##                                               Pr(>|t|)    
## (Intercept)                                     <2e-16 ***
## desercion_empleados_IBM_ETL$TotalWorkingYears   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2988 on 1468 degrees of freedom
## Multiple R-squared:  0.5974, Adjusted R-squared:  0.5971 
## F-statistic:  2178 on 1 and 1468 DF,  p-value: < 2.2e-16
Tabla ANOVA para el Modelo RLS
anova(modelo_RL_Simple)
## Analysis of Variance Table
## 
## Response: desercion_empleados_IBM_ETL$MonthlyIncome
##                                                 Df    Sum Sq    Mean Sq F value
## desercion_empleados_IBM_ETL$TotalWorkingYears    1 1.945e+10 1.9450e+10    2178
## Residuals                                     1468 1.311e+10 8.9304e+06        
##                                                  Pr(>F)    
## desercion_empleados_IBM_ETL$TotalWorkingYears < 2.2e-16 ***
## Residuals                                                  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Análisis del modelo RLS.

Intervalo de Confianza para B1
confint(modelo_RL_Simple, level = 0.95)
##                                                  2.5 %   97.5 %
## (Intercept)                                   958.6119 1497.259
## desercion_empleados_IBM_ETL$TotalWorkingYears 448.0018  487.315
Predicciones y sus Intervalos de Predicción
predict(modelo_RL_Simple, data.frame(seq(1,1470)), interval='prediction', level = 0.95)
##            fit        lwr       upr
## 1     4969.203  -895.1068 10833.512
## 2     5904.519    40.5104 11768.528
## 3     4501.544 -1363.0143 10366.103
## 4     4969.203  -895.1068 10833.512
## 5     4033.886 -1830.9876  9898.759
## 6     4969.203  -895.1068 10833.512
## 7     6839.836   975.8641 12703.808
## 8     1695.594 -4171.8417  7563.029
## 9     5904.519    40.5104 11768.528
## 10    9178.128  3313.0952 15043.161
## 11    4033.886 -1830.9876  9898.759
## 12    5904.519    40.5104 11768.528
## 13    3566.227 -2299.0267  9431.481
## 14    2630.911 -3235.3026  8497.124
## 15    4033.886 -1830.9876  9898.759
## 16    5904.519    40.5104 11768.528
## 17    4501.544 -1363.0143 10366.103
## 18    1695.594 -4171.8417  7563.029
## 19   15725.346  9848.5926 21602.099
## 20    4033.886 -1830.9876  9898.759
## 21    3566.227 -2299.0267  9431.481
## 22    5904.519    40.5104 11768.528
## 23    7307.495  1443.4421 13171.547
## 24    1227.935 -4640.2099  7096.080
## 25    4969.203  -895.1068 10833.512
## 26   13387.054  7515.9643 19258.144
## 27    5904.519    40.5104 11768.528
## 28    5904.519    40.5104 11768.528
## 29   12451.737  6582.4537 18321.021
## 30   11516.420  5648.6802 17384.161
## 31    4501.544 -1363.0143 10366.103
## 32    5436.861  -427.2653 11300.987
## 33    5904.519    40.5104 11768.528
## 34   10113.445  4247.5267 15979.364
## 35    4033.886 -1830.9876  9898.759
## 36    4033.886 -1830.9876  9898.759
## 37    2630.911 -3235.3026  8497.124
## 38    2163.252 -3703.5392  8030.043
## 39    4033.886 -1830.9876  9898.759
## 40    5904.519    40.5104 11768.528
## 41    1695.594 -4171.8417  7563.029
## 42    1695.594 -4171.8417  7563.029
## 43    1695.594 -4171.8417  7563.029
## 44    5436.861  -427.2653 11300.987
## 45    6839.836   975.8641 12703.808
## 46   11984.079  6115.5998 17852.558
## 47    5904.519    40.5104 11768.528
## 48    4969.203  -895.1068 10833.512
## 49    7775.153  1910.9542 13639.352
## 50    1695.594 -4171.8417  7563.029
## 51   11984.079  6115.5998 17852.558
## 52    2163.252 -3703.5392  8030.043
## 53    5436.861  -427.2653 11300.987
## 54    5904.519    40.5104 11768.528
## 55    3566.227 -2299.0267  9431.481
## 56    8242.811  2378.4004 14107.223
## 57    5436.861  -427.2653 11300.987
## 58    3098.569 -2767.1317  8964.270
## 59    5904.519    40.5104 11768.528
## 60    4501.544 -1363.0143 10366.103
## 61    5436.861  -427.2653 11300.987
## 62    5904.519    40.5104 11768.528
## 63   14790.029  8915.7379 20664.321
## 64   14322.371  8449.2123 20195.529
## 65    9178.128  3313.0952 15043.161
## 66   11048.762  5181.6948 16915.829
## 67    4033.886 -1830.9876  9898.759
## 68   12919.396  7049.2418 18789.549
## 69    3566.227 -2299.0267  9431.481
## 70    2163.252 -3703.5392  8030.043
## 71   10581.104  4714.6436 16447.563
## 72    4033.886 -1830.9876  9898.759
## 73    1695.594 -4171.8417  7563.029
## 74    5904.519    40.5104 11768.528
## 75    3566.227 -2299.0267  9431.481
## 76    6372.178   508.2202 12236.135
## 77    8710.470  2845.7808 14575.159
## 78    9178.128  3313.0952 15043.161
## 79    8710.470  2845.7808 14575.159
## 80    8710.470  2845.7808 14575.159
## 81    5904.519    40.5104 11768.528
## 82    4033.886 -1830.9876  9898.759
## 83   12451.737  6582.4537 18321.021
## 84    9178.128  3313.0952 15043.161
## 85    3566.227 -2299.0267  9431.481
## 86   18531.297 12645.5870 24417.006
## 87    2630.911 -3235.3026  8497.124
## 88    5904.519    40.5104 11768.528
## 89    6372.178   508.2202 12236.135
## 90    5436.861  -427.2653 11300.987
## 91   11516.420  5648.6802 17384.161
## 92    6372.178   508.2202 12236.135
## 93    6372.178   508.2202 12236.135
## 94   11048.762  5181.6948 16915.829
## 95    6839.836   975.8641 12703.808
## 96    8710.470  2845.7808 14575.159
## 97    3098.569 -2767.1317  8964.270
## 98    3566.227 -2299.0267  9431.481
## 99   18998.955 13111.5244 24886.385
## 100   9178.128  3313.0952 15043.161
## 101   4501.544 -1363.0143 10366.103
## 102   1695.594 -4171.8417  7563.029
## 103   1695.594 -4171.8417  7563.029
## 104   8710.470  2845.7808 14575.159
## 105   9178.128  3313.0952 15043.161
## 106  15257.688  9382.1980 21133.177
## 107  14322.371  8449.2123 20195.529
## 108   4033.886 -1830.9876  9898.759
## 109   2163.252 -3703.5392  8030.043
## 110   1695.594 -4171.8417  7563.029
## 111  11984.079  6115.5998 17852.558
## 112   5436.861  -427.2653 11300.987
## 113  11984.079  6115.5998 17852.558
## 114   4033.886 -1830.9876  9898.759
## 115   6839.836   975.8641 12703.808
## 116   6839.836   975.8641 12703.808
## 117   7775.153  1910.9542 13639.352
## 118   5904.519    40.5104 11768.528
## 119   4501.544 -1363.0143 10366.103
## 120  12919.396  7049.2418 18789.549
## 121   5904.519    40.5104 11768.528
## 122   4969.203  -895.1068 10833.512
## 123   4501.544 -1363.0143 10366.103
## 124  11984.079  6115.5998 17852.558
## 125   6839.836   975.8641 12703.808
## 126   3566.227 -2299.0267  9431.481
## 127  19934.272 14043.2038 25825.340
## 128   1227.935 -4640.2099  7096.080
## 129   2630.911 -3235.3026  8497.124
## 130   8710.470  2845.7808 14575.159
## 131   9645.787  3780.3439 15511.230
## 132   8710.470  2845.7808 14575.159
## 133   3098.569 -2767.1317  8964.270
## 134   6839.836   975.8641 12703.808
## 135   4969.203  -895.1068 10833.512
## 136   4501.544 -1363.0143 10366.103
## 137   9645.787  3780.3439 15511.230
## 138   9178.128  3313.0952 15043.161
## 139   4033.886 -1830.9876  9898.759
## 140   6839.836   975.8641 12703.808
## 141   5904.519    40.5104 11768.528
## 142   5436.861  -427.2653 11300.987
## 143  10113.445  4247.5267 15979.364
## 144   3566.227 -2299.0267  9431.481
## 145   5436.861  -427.2653 11300.987
## 146   4969.203  -895.1068 10833.512
## 147   4033.886 -1830.9876  9898.759
## 148  11048.762  5181.6948 16915.829
## 149   4501.544 -1363.0143 10366.103
## 150   1695.594 -4171.8417  7563.029
## 151  10581.104  4714.6436 16447.563
## 152   5904.519    40.5104 11768.528
## 153   7307.495  1443.4421 13171.547
## 154  10581.104  4714.6436 16447.563
## 155   5436.861  -427.2653 11300.987
## 156   5904.519    40.5104 11768.528
## 157   5904.519    40.5104 11768.528
## 158   5436.861  -427.2653 11300.987
## 159   8242.811  2378.4004 14107.223
## 160   4033.886 -1830.9876  9898.759
## 161   2163.252 -3703.5392  8030.043
## 162   4033.886 -1830.9876  9898.759
## 163   3566.227 -2299.0267  9431.481
## 164   6839.836   975.8641 12703.808
## 165   1695.594 -4171.8417  7563.029
## 166  11048.762  5181.6948 16915.829
## 167   7307.495  1443.4421 13171.547
## 168   6839.836   975.8641 12703.808
## 169   6839.836   975.8641 12703.808
## 170   4969.203  -895.1068 10833.512
## 171   4033.886 -1830.9876  9898.759
## 172   1695.594 -4171.8417  7563.029
## 173   7307.495  1443.4421 13171.547
## 174   6839.836   975.8641 12703.808
## 175   5436.861  -427.2653 11300.987
## 176  10113.445  4247.5267 15979.364
## 177   3098.569 -2767.1317  8964.270
## 178   1695.594 -4171.8417  7563.029
## 179  12451.737  6582.4537 18321.021
## 180   2163.252 -3703.5392  8030.043
## 181   4501.544 -1363.0143 10366.103
## 182   5436.861  -427.2653 11300.987
## 183   3098.569 -2767.1317  8964.270
## 184   3566.227 -2299.0267  9431.481
## 185   3566.227 -2299.0267  9431.481
## 186   4969.203  -895.1068 10833.512
## 187  11048.762  5181.6948 16915.829
## 188  18063.638 12179.5845 23947.692
## 189   5904.519    40.5104 11768.528
## 190  11048.762  5181.6948 16915.829
## 191  17128.321 11247.3838 23009.259
## 192   4501.544 -1363.0143 10366.103
## 193   4969.203  -895.1068 10833.512
## 194   4501.544 -1363.0143 10366.103
## 195  11516.420  5648.6802 17384.161
## 196   4969.203  -895.1068 10833.512
## 197   5904.519    40.5104 11768.528
## 198   6372.178   508.2202 12236.135
## 199   7775.153  1910.9542 13639.352
## 200   5436.861  -427.2653 11300.987
## 201   4033.886 -1830.9876  9898.759
## 202   4501.544 -1363.0143 10366.103
## 203   3566.227 -2299.0267  9431.481
## 204   8242.811  2378.4004 14107.223
## 205   9178.128  3313.0952 15043.161
## 206   5904.519    40.5104 11768.528
## 207   3098.569 -2767.1317  8964.270
## 208   4969.203  -895.1068 10833.512
## 209   3566.227 -2299.0267  9431.481
## 210   9178.128  3313.0952 15043.161
## 211   7775.153  1910.9542 13639.352
## 212   6839.836   975.8641 12703.808
## 213   4501.544 -1363.0143 10366.103
## 214   8710.470  2845.7808 14575.159
## 215   4969.203  -895.1068 10833.512
## 216   8710.470  2845.7808 14575.159
## 217   5436.861  -427.2653 11300.987
## 218   4501.544 -1363.0143 10366.103
## 219  11984.079  6115.5998 17852.558
## 220   8710.470  2845.7808 14575.159
## 221   8710.470  2845.7808 14575.159
## 222   4501.544 -1363.0143 10366.103
## 223   5904.519    40.5104 11768.528
## 224   9178.128  3313.0952 15043.161
## 225   4033.886 -1830.9876  9898.759
## 226   4501.544 -1363.0143 10366.103
## 227   7307.495  1443.4421 13171.547
## 228   6372.178   508.2202 12236.135
## 229   5904.519    40.5104 11768.528
## 230   3098.569 -2767.1317  8964.270
## 231   4033.886 -1830.9876  9898.759
## 232  11516.420  5648.6802 17384.161
## 233   4501.544 -1363.0143 10366.103
## 234  16193.004 10314.9217 22071.087
## 235   4969.203  -895.1068 10833.512
## 236  11516.420  5648.6802 17384.161
## 237   7307.495  1443.4421 13171.547
## 238  16660.663 10781.1854 22540.140
## 239   4033.886 -1830.9876  9898.759
## 240   3098.569 -2767.1317  8964.270
## 241   4501.544 -1363.0143 10366.103
## 242   3098.569 -2767.1317  8964.270
## 243   9178.128  3313.0952 15043.161
## 244   5436.861  -427.2653 11300.987
## 245  12919.396  7049.2418 18789.549
## 246   5436.861  -427.2653 11300.987
## 247   2163.252 -3703.5392  8030.043
## 248   7307.495  1443.4421 13171.547
## 249   9178.128  3313.0952 15043.161
## 250   5436.861  -427.2653 11300.987
## 251   9178.128  3313.0952 15043.161
## 252  10581.104  4714.6436 16447.563
## 253   4033.886 -1830.9876  9898.759
## 254   5904.519    40.5104 11768.528
## 255   5904.519    40.5104 11768.528
## 256   3566.227 -2299.0267  9431.481
## 257   5904.519    40.5104 11768.528
## 258  11516.420  5648.6802 17384.161
## 259   1695.594 -4171.8417  7563.029
## 260   4033.886 -1830.9876  9898.759
## 261   3566.227 -2299.0267  9431.481
## 262   7307.495  1443.4421 13171.547
## 263   5436.861  -427.2653 11300.987
## 264  14322.371  8449.2123 20195.529
## 265   3566.227 -2299.0267  9431.481
## 266   5904.519    40.5104 11768.528
## 267   5904.519    40.5104 11768.528
## 268   4033.886 -1830.9876  9898.759
## 269  11048.762  5181.6948 16915.829
## 270   8710.470  2845.7808 14575.159
## 271  18531.297 12645.5870 24417.006
## 272   5904.519    40.5104 11768.528
## 273   3566.227 -2299.0267  9431.481
## 274   4501.544 -1363.0143 10366.103
## 275   2630.911 -3235.3026  8497.124
## 276   8242.811  2378.4004 14107.223
## 277   5904.519    40.5104 11768.528
## 278   4969.203  -895.1068 10833.512
## 279   4033.886 -1830.9876  9898.759
## 280  14322.371  8449.2123 20195.529
## 281  11048.762  5181.6948 16915.829
## 282  10581.104  4714.6436 16447.563
## 283   5904.519    40.5104 11768.528
## 284   6839.836   975.8641 12703.808
## 285   3566.227 -2299.0267  9431.481
## 286   9178.128  3313.0952 15043.161
## 287  10113.445  4247.5267 15979.364
## 288   5904.519    40.5104 11768.528
## 289   3566.227 -2299.0267  9431.481
## 290   3566.227 -2299.0267  9431.481
## 291  11516.420  5648.6802 17384.161
## 292   5904.519    40.5104 11768.528
## 293   2163.252 -3703.5392  8030.043
## 294   4969.203  -895.1068 10833.512
## 295   3098.569 -2767.1317  8964.270
## 296  11984.079  6115.5998 17852.558
## 297   1227.935 -4640.2099  7096.080
## 298   6839.836   975.8641 12703.808
## 299   3098.569 -2767.1317  8964.270
## 300   7307.495  1443.4421 13171.547
## 301  11516.420  5648.6802 17384.161
## 302   1227.935 -4640.2099  7096.080
## 303   5436.861  -427.2653 11300.987
## 304   5904.519    40.5104 11768.528
## 305  10113.445  4247.5267 15979.364
## 306   6372.178   508.2202 12236.135
## 307   7307.495  1443.4421 13171.547
## 308  10113.445  4247.5267 15979.364
## 309   6839.836   975.8641 12703.808
## 310   4033.886 -1830.9876  9898.759
## 311   5436.861  -427.2653 11300.987
## 312  12451.737  6582.4537 18321.021
## 313   2630.911 -3235.3026  8497.124
## 314   6839.836   975.8641 12703.808
## 315  11048.762  5181.6948 16915.829
## 316   5436.861  -427.2653 11300.987
## 317  12919.396  7049.2418 18789.549
## 318   6372.178   508.2202 12236.135
## 319   3098.569 -2767.1317  8964.270
## 320   7307.495  1443.4421 13171.547
## 321   3566.227 -2299.0267  9431.481
## 322   7307.495  1443.4421 13171.547
## 323   5904.519    40.5104 11768.528
## 324   3566.227 -2299.0267  9431.481
## 325   6372.178   508.2202 12236.135
## 326   5904.519    40.5104 11768.528
## 327  11048.762  5181.6948 16915.829
## 328   6839.836   975.8641 12703.808
## 329   5436.861  -427.2653 11300.987
## 330  11048.762  5181.6948 16915.829
## 331   5436.861  -427.2653 11300.987
## 332   4033.886 -1830.9876  9898.759
## 333  10581.104  4714.6436 16447.563
## 334   5904.519    40.5104 11768.528
## 335   6839.836   975.8641 12703.808
## 336   4033.886 -1830.9876  9898.759
## 337   4501.544 -1363.0143 10366.103
## 338   3098.569 -2767.1317  8964.270
## 339   5904.519    40.5104 11768.528
## 340   4969.203  -895.1068 10833.512
## 341   4969.203  -895.1068 10833.512
## 342   6839.836   975.8641 12703.808
## 343   6372.178   508.2202 12236.135
## 344   4501.544 -1363.0143 10366.103
## 345   9178.128  3313.0952 15043.161
## 346   3098.569 -2767.1317  8964.270
## 347   4969.203  -895.1068 10833.512
## 348   3566.227 -2299.0267  9431.481
## 349   8710.470  2845.7808 14575.159
## 350   3098.569 -2767.1317  8964.270
## 351   3098.569 -2767.1317  8964.270
## 352   4969.203  -895.1068 10833.512
## 353   8242.811  2378.4004 14107.223
## 354   7307.495  1443.4421 13171.547
## 355   3098.569 -2767.1317  8964.270
## 356   4969.203  -895.1068 10833.512
## 357   7775.153  1910.9542 13639.352
## 358   2630.911 -3235.3026  8497.124
## 359   4501.544 -1363.0143 10366.103
## 360   8710.470  2845.7808 14575.159
## 361   8242.811  2378.4004 14107.223
## 362   5904.519    40.5104 11768.528
## 363   2630.911 -3235.3026  8497.124
## 364   1695.594 -4171.8417  7563.029
## 365   9178.128  3313.0952 15043.161
## 366   4501.544 -1363.0143 10366.103
## 367   4969.203  -895.1068 10833.512
## 368  10581.104  4714.6436 16447.563
## 369   4969.203  -895.1068 10833.512
## 370   2630.911 -3235.3026  8497.124
## 371   1695.594 -4171.8417  7563.029
## 372   4033.886 -1830.9876  9898.759
## 373   5904.519    40.5104 11768.528
## 374   3566.227 -2299.0267  9431.481
## 375   4501.544 -1363.0143 10366.103
## 376  13387.054  7515.9643 19258.144
## 377   9645.787  3780.3439 15511.230
## 378   4033.886 -1830.9876  9898.759
## 379   5436.861  -427.2653 11300.987
## 380  15257.688  9382.1980 21133.177
## 381   3566.227 -2299.0267  9431.481
## 382   1695.594 -4171.8417  7563.029
## 383   4501.544 -1363.0143 10366.103
## 384   2163.252 -3703.5392  8030.043
## 385   5904.519    40.5104 11768.528
## 386   2630.911 -3235.3026  8497.124
## 387   9645.787  3780.3439 15511.230
## 388   4969.203  -895.1068 10833.512
## 389   4969.203  -895.1068 10833.512
## 390   9645.787  3780.3439 15511.230
## 391  12919.396  7049.2418 18789.549
## 392  10581.104  4714.6436 16447.563
## 393  12451.737  6582.4537 18321.021
## 394   4033.886 -1830.9876  9898.759
## 395   7307.495  1443.4421 13171.547
## 396   4969.203  -895.1068 10833.512
## 397   4969.203  -895.1068 10833.512
## 398   3566.227 -2299.0267  9431.481
## 399   8242.811  2378.4004 14107.223
## 400   3098.569 -2767.1317  8964.270
## 401  11048.762  5181.6948 16915.829
## 402  18063.638 12179.5845 23947.692
## 403   4033.886 -1830.9876  9898.759
## 404   5904.519    40.5104 11768.528
## 405   5904.519    40.5104 11768.528
## 406   4033.886 -1830.9876  9898.759
## 407  14322.371  8449.2123 20195.529
## 408   4969.203  -895.1068 10833.512
## 409  15725.346  9848.5926 21602.099
## 410  10113.445  4247.5267 15979.364
## 411   6372.178   508.2202 12236.135
## 412  16660.663 10781.1854 22540.140
## 413  10113.445  4247.5267 15979.364
## 414   4501.544 -1363.0143 10366.103
## 415   4033.886 -1830.9876  9898.759
## 416   2630.911 -3235.3026  8497.124
## 417   1695.594 -4171.8417  7563.029
## 418  11048.762  5181.6948 16915.829
## 419   2630.911 -3235.3026  8497.124
## 420   5436.861  -427.2653 11300.987
## 421   5904.519    40.5104 11768.528
## 422   4033.886 -1830.9876  9898.759
## 423   1695.594 -4171.8417  7563.029
## 424   5904.519    40.5104 11768.528
## 425  16193.004 10314.9217 22071.087
## 426  14322.371  8449.2123 20195.529
## 427   6839.836   975.8641 12703.808
## 428  11516.420  5648.6802 17384.161
## 429  10581.104  4714.6436 16447.563
## 430  13387.054  7515.9643 19258.144
## 431   4033.886 -1830.9876  9898.759
## 432  10113.445  4247.5267 15979.364
## 433   7775.153  1910.9542 13639.352
## 434   8242.811  2378.4004 14107.223
## 435   7307.495  1443.4421 13171.547
## 436   8242.811  2378.4004 14107.223
## 437   4969.203  -895.1068 10833.512
## 438   3098.569 -2767.1317  8964.270
## 439   5904.519    40.5104 11768.528
## 440   6839.836   975.8641 12703.808
## 441   6372.178   508.2202 12236.135
## 442   4969.203  -895.1068 10833.512
## 443   5904.519    40.5104 11768.528
## 444   3098.569 -2767.1317  8964.270
## 445   7775.153  1910.9542 13639.352
## 446  18531.297 12645.5870 24417.006
## 447   8710.470  2845.7808 14575.159
## 448   8242.811  2378.4004 14107.223
## 449  11516.420  5648.6802 17384.161
## 450   4969.203  -895.1068 10833.512
## 451   5904.519    40.5104 11768.528
## 452   5904.519    40.5104 11768.528
## 453   5436.861  -427.2653 11300.987
## 454   4969.203  -895.1068 10833.512
## 455   4969.203  -895.1068 10833.512
## 456   5904.519    40.5104 11768.528
## 457   5904.519    40.5104 11768.528
## 458   1227.935 -4640.2099  7096.080
## 459  10581.104  4714.6436 16447.563
## 460   5904.519    40.5104 11768.528
## 461   4969.203  -895.1068 10833.512
## 462   3566.227 -2299.0267  9431.481
## 463   5904.519    40.5104 11768.528
## 464   1695.594 -4171.8417  7563.029
## 465   6839.836   975.8641 12703.808
## 466  14322.371  8449.2123 20195.529
## 467  11516.420  5648.6802 17384.161
## 468   5436.861  -427.2653 11300.987
## 469   9645.787  3780.3439 15511.230
## 470   4033.886 -1830.9876  9898.759
## 471   2630.911 -3235.3026  8497.124
## 472   9645.787  3780.3439 15511.230
## 473   4969.203  -895.1068 10833.512
## 474  15725.346  9848.5926 21602.099
## 475   4033.886 -1830.9876  9898.759
## 476   4033.886 -1830.9876  9898.759
## 477   1695.594 -4171.8417  7563.029
## 478  16193.004 10314.9217 22071.087
## 479   4501.544 -1363.0143 10366.103
## 480   4033.886 -1830.9876  9898.759
## 481   1695.594 -4171.8417  7563.029
## 482   4033.886 -1830.9876  9898.759
## 483   5436.861  -427.2653 11300.987
## 484   5436.861  -427.2653 11300.987
## 485   7307.495  1443.4421 13171.547
## 486   4033.886 -1830.9876  9898.759
## 487   9178.128  3313.0952 15043.161
## 488   1695.594 -4171.8417  7563.029
## 489   5904.519    40.5104 11768.528
## 490  11048.762  5181.6948 16915.829
## 491   4969.203  -895.1068 10833.512
## 492   5904.519    40.5104 11768.528
## 493  11048.762  5181.6948 16915.829
## 494   5904.519    40.5104 11768.528
## 495   4969.203  -895.1068 10833.512
## 496   3566.227 -2299.0267  9431.481
## 497   2630.911 -3235.3026  8497.124
## 498  13387.054  7515.9643 19258.144
## 499   2630.911 -3235.3026  8497.124
## 500   4033.886 -1830.9876  9898.759
## 501   4033.886 -1830.9876  9898.759
## 502   1695.594 -4171.8417  7563.029
## 503   9645.787  3780.3439 15511.230
## 504   5904.519    40.5104 11768.528
## 505   3566.227 -2299.0267  9431.481
## 506   2630.911 -3235.3026  8497.124
## 507   5904.519    40.5104 11768.528
## 508   4033.886 -1830.9876  9898.759
## 509   9178.128  3313.0952 15043.161
## 510   8242.811  2378.4004 14107.223
## 511   8710.470  2845.7808 14575.159
## 512   7307.495  1443.4421 13171.547
## 513   3566.227 -2299.0267  9431.481
## 514   1695.594 -4171.8417  7563.029
## 515   5904.519    40.5104 11768.528
## 516   1695.594 -4171.8417  7563.029
## 517   3566.227 -2299.0267  9431.481
## 518   3098.569 -2767.1317  8964.270
## 519   4969.203  -895.1068 10833.512
## 520   5904.519    40.5104 11768.528
## 521   6839.836   975.8641 12703.808
## 522   4033.886 -1830.9876  9898.759
## 523   3098.569 -2767.1317  8964.270
## 524  10581.104  4714.6436 16447.563
## 525   5436.861  -427.2653 11300.987
## 526   3098.569 -2767.1317  8964.270
## 527  10581.104  4714.6436 16447.563
## 528   5904.519    40.5104 11768.528
## 529   9645.787  3780.3439 15511.230
## 530   5904.519    40.5104 11768.528
## 531   5436.861  -427.2653 11300.987
## 532   5904.519    40.5104 11768.528
## 533  10581.104  4714.6436 16447.563
## 534  10581.104  4714.6436 16447.563
## 535  16193.004 10314.9217 22071.087
## 536  11984.079  6115.5998 17852.558
## 537   5904.519    40.5104 11768.528
## 538   5436.861  -427.2653 11300.987
## 539  11516.420  5648.6802 17384.161
## 540   3098.569 -2767.1317  8964.270
## 541   5904.519    40.5104 11768.528
## 542   5904.519    40.5104 11768.528
## 543   5904.519    40.5104 11768.528
## 544   5436.861  -427.2653 11300.987
## 545  14322.371  8449.2123 20195.529
## 546   5904.519    40.5104 11768.528
## 547   1695.594 -4171.8417  7563.029
## 548   4501.544 -1363.0143 10366.103
## 549   4501.544 -1363.0143 10366.103
## 550   5904.519    40.5104 11768.528
## 551   3566.227 -2299.0267  9431.481
## 552   6839.836   975.8641 12703.808
## 553  15257.688  9382.1980 21133.177
## 554   3566.227 -2299.0267  9431.481
## 555   5436.861  -427.2653 11300.987
## 556   2163.252 -3703.5392  8030.043
## 557  10113.445  4247.5267 15979.364
## 558   8710.470  2845.7808 14575.159
## 559   5904.519    40.5104 11768.528
## 560   4033.886 -1830.9876  9898.759
## 561   4501.544 -1363.0143 10366.103
## 562  17128.321 11247.3838 23009.259
## 563   5904.519    40.5104 11768.528
## 564   4033.886 -1830.9876  9898.759
## 565   5436.861  -427.2653 11300.987
## 566   2163.252 -3703.5392  8030.043
## 567   4969.203  -895.1068 10833.512
## 568   4033.886 -1830.9876  9898.759
## 569  12451.737  6582.4537 18321.021
## 570   5904.519    40.5104 11768.528
## 571   3566.227 -2299.0267  9431.481
## 572   3566.227 -2299.0267  9431.481
## 573   6372.178   508.2202 12236.135
## 574   4033.886 -1830.9876  9898.759
## 575   5904.519    40.5104 11768.528
## 576   5436.861  -427.2653 11300.987
## 577   3566.227 -2299.0267  9431.481
## 578   4033.886 -1830.9876  9898.759
## 579   9178.128  3313.0952 15043.161
## 580   4033.886 -1830.9876  9898.759
## 581   2630.911 -3235.3026  8497.124
## 582   4501.544 -1363.0143 10366.103
## 583   4969.203  -895.1068 10833.512
## 584   4033.886 -1830.9876  9898.759
## 585  12451.737  6582.4537 18321.021
## 586   1695.594 -4171.8417  7563.029
## 587   1695.594 -4171.8417  7563.029
## 588   5436.861  -427.2653 11300.987
## 589  15257.688  9382.1980 21133.177
## 590   1695.594 -4171.8417  7563.029
## 591   7775.153  1910.9542 13639.352
## 592   4033.886 -1830.9876  9898.759
## 593  13387.054  7515.9643 19258.144
## 594   5904.519    40.5104 11768.528
## 595   5904.519    40.5104 11768.528
## 596  19934.272 14043.2038 25825.340
## 597   4501.544 -1363.0143 10366.103
## 598   4969.203  -895.1068 10833.512
## 599   3566.227 -2299.0267  9431.481
## 600   4969.203  -895.1068 10833.512
## 601   7775.153  1910.9542 13639.352
## 602   5904.519    40.5104 11768.528
## 603   6839.836   975.8641 12703.808
## 604   1695.594 -4171.8417  7563.029
## 605   5904.519    40.5104 11768.528
## 606   7307.495  1443.4421 13171.547
## 607   4033.886 -1830.9876  9898.759
## 608   5436.861  -427.2653 11300.987
## 609   6839.836   975.8641 12703.808
## 610  11516.420  5648.6802 17384.161
## 611   5436.861  -427.2653 11300.987
## 612   9178.128  3313.0952 15043.161
## 613   4969.203  -895.1068 10833.512
## 614   3098.569 -2767.1317  8964.270
## 615   4969.203  -895.1068 10833.512
## 616   1227.935 -4640.2099  7096.080
## 617  14790.029  8915.7379 20664.321
## 618   5904.519    40.5104 11768.528
## 619   4033.886 -1830.9876  9898.759
## 620   5436.861  -427.2653 11300.987
## 621   4033.886 -1830.9876  9898.759
## 622   9645.787  3780.3439 15511.230
## 623   4969.203  -895.1068 10833.512
## 624   5904.519    40.5104 11768.528
## 625  17595.980 11713.5168 23478.443
## 626   9645.787  3780.3439 15511.230
## 627   5436.861  -427.2653 11300.987
## 628  15725.346  9848.5926 21602.099
## 629   5436.861  -427.2653 11300.987
## 630   4033.886 -1830.9876  9898.759
## 631   3098.569 -2767.1317  8964.270
## 632   5904.519    40.5104 11768.528
## 633   4969.203  -895.1068 10833.512
## 634   4033.886 -1830.9876  9898.759
## 635   3566.227 -2299.0267  9431.481
## 636   9178.128  3313.0952 15043.161
## 637   5904.519    40.5104 11768.528
## 638   3098.569 -2767.1317  8964.270
## 639   3566.227 -2299.0267  9431.481
## 640   4501.544 -1363.0143 10366.103
## 641   4033.886 -1830.9876  9898.759
## 642   5904.519    40.5104 11768.528
## 643   2630.911 -3235.3026  8497.124
## 644   9178.128  3313.0952 15043.161
## 645   4969.203  -895.1068 10833.512
## 646   3566.227 -2299.0267  9431.481
## 647  14322.371  8449.2123 20195.529
## 648   8710.470  2845.7808 14575.159
## 649   5904.519    40.5104 11768.528
## 650  16660.663 10781.1854 22540.140
## 651   6839.836   975.8641 12703.808
## 652   4969.203  -895.1068 10833.512
## 653   5904.519    40.5104 11768.528
## 654  15725.346  9848.5926 21602.099
## 655   7307.495  1443.4421 13171.547
## 656   4501.544 -1363.0143 10366.103
## 657   1695.594 -4171.8417  7563.029
## 658   4969.203  -895.1068 10833.512
## 659   4969.203  -895.1068 10833.512
## 660   3098.569 -2767.1317  8964.270
## 661   2630.911 -3235.3026  8497.124
## 662   3098.569 -2767.1317  8964.270
## 663   2163.252 -3703.5392  8030.043
## 664   1695.594 -4171.8417  7563.029
## 665   9178.128  3313.0952 15043.161
## 666   2630.911 -3235.3026  8497.124
## 667   3098.569 -2767.1317  8964.270
## 668   5904.519    40.5104 11768.528
## 669   4033.886 -1830.9876  9898.759
## 670   4969.203  -895.1068 10833.512
## 671   1695.594 -4171.8417  7563.029
## 672   1695.594 -4171.8417  7563.029
## 673   5904.519    40.5104 11768.528
## 674   4033.886 -1830.9876  9898.759
## 675  12451.737  6582.4537 18321.021
## 676   7307.495  1443.4421 13171.547
## 677   5904.519    40.5104 11768.528
## 678  14790.029  8915.7379 20664.321
## 679   7307.495  1443.4421 13171.547
## 680   5436.861  -427.2653 11300.987
## 681   4969.203  -895.1068 10833.512
## 682   8242.811  2378.4004 14107.223
## 683   3566.227 -2299.0267  9431.481
## 684   1695.594 -4171.8417  7563.029
## 685   6372.178   508.2202 12236.135
## 686   4501.544 -1363.0143 10366.103
## 687  10581.104  4714.6436 16447.563
## 688   8710.470  2845.7808 14575.159
## 689   1695.594 -4171.8417  7563.029
## 690   1695.594 -4171.8417  7563.029
## 691   5904.519    40.5104 11768.528
## 692   2630.911 -3235.3026  8497.124
## 693   4969.203  -895.1068 10833.512
## 694   8710.470  2845.7808 14575.159
## 695   4033.886 -1830.9876  9898.759
## 696   9178.128  3313.0952 15043.161
## 697   5436.861  -427.2653 11300.987
## 698   2630.911 -3235.3026  8497.124
## 699   3566.227 -2299.0267  9431.481
## 700  13387.054  7515.9643 19258.144
## 701   4501.544 -1363.0143 10366.103
## 702  11516.420  5648.6802 17384.161
## 703   5904.519    40.5104 11768.528
## 704   4033.886 -1830.9876  9898.759
## 705   6839.836   975.8641 12703.808
## 706   5436.861  -427.2653 11300.987
## 707  11516.420  5648.6802 17384.161
## 708  10581.104  4714.6436 16447.563
## 709   6839.836   975.8641 12703.808
## 710   3098.569 -2767.1317  8964.270
## 711   5904.519    40.5104 11768.528
## 712   2630.911 -3235.3026  8497.124
## 713   3566.227 -2299.0267  9431.481
## 714   4969.203  -895.1068 10833.512
## 715  16193.004 10314.9217 22071.087
## 716   4033.886 -1830.9876  9898.759
## 717  11048.762  5181.6948 16915.829
## 718   3098.569 -2767.1317  8964.270
## 719   5436.861  -427.2653 11300.987
## 720   5436.861  -427.2653 11300.987
## 721   4501.544 -1363.0143 10366.103
## 722  11516.420  5648.6802 17384.161
## 723   2630.911 -3235.3026  8497.124
## 724   7307.495  1443.4421 13171.547
## 725   3566.227 -2299.0267  9431.481
## 726   3566.227 -2299.0267  9431.481
## 727   3098.569 -2767.1317  8964.270
## 728   1227.935 -4640.2099  7096.080
## 729  11516.420  5648.6802 17384.161
## 730   8710.470  2845.7808 14575.159
## 731   5436.861  -427.2653 11300.987
## 732   1695.594 -4171.8417  7563.029
## 733   3098.569 -2767.1317  8964.270
## 734   4969.203  -895.1068 10833.512
## 735   3098.569 -2767.1317  8964.270
## 736  10113.445  4247.5267 15979.364
## 737  13854.712  7982.6211 19726.804
## 738   4969.203  -895.1068 10833.512
## 739  11048.762  5181.6948 16915.829
## 740   3098.569 -2767.1317  8964.270
## 741   2630.911 -3235.3026  8497.124
## 742  11048.762  5181.6948 16915.829
## 743   4969.203  -895.1068 10833.512
## 744  15257.688  9382.1980 21133.177
## 745   8242.811  2378.4004 14107.223
## 746   9178.128  3313.0952 15043.161
## 747  11048.762  5181.6948 16915.829
## 748  10113.445  4247.5267 15979.364
## 749   4501.544 -1363.0143 10366.103
## 750  16660.663 10781.1854 22540.140
## 751  11984.079  6115.5998 17852.558
## 752  10113.445  4247.5267 15979.364
## 753   9645.787  3780.3439 15511.230
## 754  11048.762  5181.6948 16915.829
## 755   2630.911 -3235.3026  8497.124
## 756  13387.054  7515.9643 19258.144
## 757   5904.519    40.5104 11768.528
## 758   8710.470  2845.7808 14575.159
## 759   7775.153  1910.9542 13639.352
## 760   4033.886 -1830.9876  9898.759
## 761  15257.688  9382.1980 21133.177
## 762   5436.861  -427.2653 11300.987
## 763   4033.886 -1830.9876  9898.759
## 764   1695.594 -4171.8417  7563.029
## 765   1695.594 -4171.8417  7563.029
## 766   4969.203  -895.1068 10833.512
## 767  14790.029  8915.7379 20664.321
## 768   4969.203  -895.1068 10833.512
## 769   4969.203  -895.1068 10833.512
## 770   3566.227 -2299.0267  9431.481
## 771  11984.079  6115.5998 17852.558
## 772   7307.495  1443.4421 13171.547
## 773   9645.787  3780.3439 15511.230
## 774   8242.811  2378.4004 14107.223
## 775  15725.346  9848.5926 21602.099
## 776   9645.787  3780.3439 15511.230
## 777   2163.252 -3703.5392  8030.043
## 778   1695.594 -4171.8417  7563.029
## 779  10113.445  4247.5267 15979.364
## 780   9645.787  3780.3439 15511.230
## 781   5904.519    40.5104 11768.528
## 782   4033.886 -1830.9876  9898.759
## 783   4501.544 -1363.0143 10366.103
## 784   5904.519    40.5104 11768.528
## 785  10581.104  4714.6436 16447.563
## 786   7775.153  1910.9542 13639.352
## 787   2630.911 -3235.3026  8497.124
## 788  11984.079  6115.5998 17852.558
## 789   5904.519    40.5104 11768.528
## 790  12451.737  6582.4537 18321.021
## 791   5436.861  -427.2653 11300.987
## 792   5436.861  -427.2653 11300.987
## 793   7775.153  1910.9542 13639.352
## 794   3098.569 -2767.1317  8964.270
## 795   4501.544 -1363.0143 10366.103
## 796   4969.203  -895.1068 10833.512
## 797   4501.544 -1363.0143 10366.103
## 798   1695.594 -4171.8417  7563.029
## 799   3566.227 -2299.0267  9431.481
## 800  11984.079  6115.5998 17852.558
## 801   1695.594 -4171.8417  7563.029
## 802   3566.227 -2299.0267  9431.481
## 803   3098.569 -2767.1317  8964.270
## 804   4033.886 -1830.9876  9898.759
## 805  13854.712  7982.6211 19726.804
## 806   8242.811  2378.4004 14107.223
## 807   9645.787  3780.3439 15511.230
## 808   5436.861  -427.2653 11300.987
## 809   6372.178   508.2202 12236.135
## 810   5904.519    40.5104 11768.528
## 811  11984.079  6115.5998 17852.558
## 812   5904.519    40.5104 11768.528
## 813   9645.787  3780.3439 15511.230
## 814  11048.762  5181.6948 16915.829
## 815  11048.762  5181.6948 16915.829
## 816   2163.252 -3703.5392  8030.043
## 817   5436.861  -427.2653 11300.987
## 818   9645.787  3780.3439 15511.230
## 819   2630.911 -3235.3026  8497.124
## 820   4033.886 -1830.9876  9898.759
## 821   3566.227 -2299.0267  9431.481
## 822  11516.420  5648.6802 17384.161
## 823   3566.227 -2299.0267  9431.481
## 824   4969.203  -895.1068 10833.512
## 825   8710.470  2845.7808 14575.159
## 826   5904.519    40.5104 11768.528
## 827   4501.544 -1363.0143 10366.103
## 828   2630.911 -3235.3026  8497.124
## 829   1227.935 -4640.2099  7096.080
## 830   4033.886 -1830.9876  9898.759
## 831   4033.886 -1830.9876  9898.759
## 832   2163.252 -3703.5392  8030.043
## 833   5436.861  -427.2653 11300.987
## 834   3098.569 -2767.1317  8964.270
## 835   4033.886 -1830.9876  9898.759
## 836   4033.886 -1830.9876  9898.759
## 837   6372.178   508.2202 12236.135
## 838  10581.104  4714.6436 16447.563
## 839  11516.420  5648.6802 17384.161
## 840   5436.861  -427.2653 11300.987
## 841   5904.519    40.5104 11768.528
## 842   4033.886 -1830.9876  9898.759
## 843   1695.594 -4171.8417  7563.029
## 844   4969.203  -895.1068 10833.512
## 845   5904.519    40.5104 11768.528
## 846   8710.470  2845.7808 14575.159
## 847   8242.811  2378.4004 14107.223
## 848   7775.153  1910.9542 13639.352
## 849   2163.252 -3703.5392  8030.043
## 850   4501.544 -1363.0143 10366.103
## 851   1695.594 -4171.8417  7563.029
## 852  14322.371  8449.2123 20195.529
## 853   5904.519    40.5104 11768.528
## 854   1695.594 -4171.8417  7563.029
## 855   4501.544 -1363.0143 10366.103
## 856   7775.153  1910.9542 13639.352
## 857   2163.252 -3703.5392  8030.043
## 858   4033.886 -1830.9876  9898.759
## 859  13387.054  7515.9643 19258.144
## 860   4033.886 -1830.9876  9898.759
## 861   1695.594 -4171.8417  7563.029
## 862  14322.371  8449.2123 20195.529
## 863   4033.886 -1830.9876  9898.759
## 864   3566.227 -2299.0267  9431.481
## 865   3566.227 -2299.0267  9431.481
## 866   4969.203  -895.1068 10833.512
## 867   3566.227 -2299.0267  9431.481
## 868  16193.004 10314.9217 22071.087
## 869   4033.886 -1830.9876  9898.759
## 870  12919.396  7049.2418 18789.549
## 871   8242.811  2378.4004 14107.223
## 872   1695.594 -4171.8417  7563.029
## 873   5904.519    40.5104 11768.528
## 874   4501.544 -1363.0143 10366.103
## 875   5904.519    40.5104 11768.528
## 876  10581.104  4714.6436 16447.563
## 877   2163.252 -3703.5392  8030.043
## 878   6839.836   975.8641 12703.808
## 879   5904.519    40.5104 11768.528
## 880   6839.836   975.8641 12703.808
## 881   2163.252 -3703.5392  8030.043
## 882   5904.519    40.5104 11768.528
## 883   9178.128  3313.0952 15043.161
## 884   8242.811  2378.4004 14107.223
## 885   4501.544 -1363.0143 10366.103
## 886   3566.227 -2299.0267  9431.481
## 887   6839.836   975.8641 12703.808
## 888  10581.104  4714.6436 16447.563
## 889   8710.470  2845.7808 14575.159
## 890   5436.861  -427.2653 11300.987
## 891  16660.663 10781.1854 22540.140
## 892   5904.519    40.5104 11768.528
## 893   1695.594 -4171.8417  7563.029
## 894   2630.911 -3235.3026  8497.124
## 895  18063.638 12179.5845 23947.692
## 896   4033.886 -1830.9876  9898.759
## 897   5904.519    40.5104 11768.528
## 898   7307.495  1443.4421 13171.547
## 899  12919.396  7049.2418 18789.549
## 900  11984.079  6115.5998 17852.558
## 901   6839.836   975.8641 12703.808
## 902   4501.544 -1363.0143 10366.103
## 903   3566.227 -2299.0267  9431.481
## 904   4033.886 -1830.9876  9898.759
## 905  12919.396  7049.2418 18789.549
## 906   5436.861  -427.2653 11300.987
## 907   2163.252 -3703.5392  8030.043
## 908  13387.054  7515.9643 19258.144
## 909   5904.519    40.5104 11768.528
## 910   1695.594 -4171.8417  7563.029
## 911   1695.594 -4171.8417  7563.029
## 912   1695.594 -4171.8417  7563.029
## 913   4969.203  -895.1068 10833.512
## 914  13387.054  7515.9643 19258.144
## 915  17128.321 11247.3838 23009.259
## 916   2163.252 -3703.5392  8030.043
## 917  13387.054  7515.9643 19258.144
## 918   3098.569 -2767.1317  8964.270
## 919  15725.346  9848.5926 21602.099
## 920  12919.396  7049.2418 18789.549
## 921   8242.811  2378.4004 14107.223
## 922   3566.227 -2299.0267  9431.481
## 923  13387.054  7515.9643 19258.144
## 924   7775.153  1910.9542 13639.352
## 925   3098.569 -2767.1317  8964.270
## 926   9645.787  3780.3439 15511.230
## 927  11984.079  6115.5998 17852.558
## 928   9645.787  3780.3439 15511.230
## 929   5904.519    40.5104 11768.528
## 930   2163.252 -3703.5392  8030.043
## 931   4969.203  -895.1068 10833.512
## 932   5904.519    40.5104 11768.528
## 933   5904.519    40.5104 11768.528
## 934   3566.227 -2299.0267  9431.481
## 935   2163.252 -3703.5392  8030.043
## 936   5904.519    40.5104 11768.528
## 937  11516.420  5648.6802 17384.161
## 938  11048.762  5181.6948 16915.829
## 939   2163.252 -3703.5392  8030.043
## 940   5904.519    40.5104 11768.528
## 941   4033.886 -1830.9876  9898.759
## 942   5904.519    40.5104 11768.528
## 943   5904.519    40.5104 11768.528
## 944   5904.519    40.5104 11768.528
## 945   5904.519    40.5104 11768.528
## 946  12919.396  7049.2418 18789.549
## 947   5436.861  -427.2653 11300.987
## 948   5904.519    40.5104 11768.528
## 949   5436.861  -427.2653 11300.987
## 950   5436.861  -427.2653 11300.987
## 951   5904.519    40.5104 11768.528
## 952  10113.445  4247.5267 15979.364
## 953   2630.911 -3235.3026  8497.124
## 954   5904.519    40.5104 11768.528
## 955  11048.762  5181.6948 16915.829
## 956  11984.079  6115.5998 17852.558
## 957  18063.638 12179.5845 23947.692
## 958   4033.886 -1830.9876  9898.759
## 959   5904.519    40.5104 11768.528
## 960   5436.861  -427.2653 11300.987
## 961   5904.519    40.5104 11768.528
## 962   5436.861  -427.2653 11300.987
## 963  16660.663 10781.1854 22540.140
## 964   6372.178   508.2202 12236.135
## 965   5904.519    40.5104 11768.528
## 966   4501.544 -1363.0143 10366.103
## 967  15725.346  9848.5926 21602.099
## 968   4501.544 -1363.0143 10366.103
## 969   9178.128  3313.0952 15043.161
## 970   6372.178   508.2202 12236.135
## 971   3566.227 -2299.0267  9431.481
## 972  14790.029  8915.7379 20664.321
## 973   1227.935 -4640.2099  7096.080
## 974   5904.519    40.5104 11768.528
## 975   4969.203  -895.1068 10833.512
## 976  12451.737  6582.4537 18321.021
## 977  16660.663 10781.1854 22540.140
## 978   3566.227 -2299.0267  9431.481
## 979   8242.811  2378.4004 14107.223
## 980   5904.519    40.5104 11768.528
## 981   2630.911 -3235.3026  8497.124
## 982   3566.227 -2299.0267  9431.481
## 983   3098.569 -2767.1317  8964.270
## 984   7775.153  1910.9542 13639.352
## 985   3566.227 -2299.0267  9431.481
## 986   5904.519    40.5104 11768.528
## 987   4969.203  -895.1068 10833.512
## 988   7775.153  1910.9542 13639.352
## 989   6839.836   975.8641 12703.808
## 990   4969.203  -895.1068 10833.512
## 991   4969.203  -895.1068 10833.512
## 992   3098.569 -2767.1317  8964.270
## 993   7307.495  1443.4421 13171.547
## 994   4033.886 -1830.9876  9898.759
## 995  12451.737  6582.4537 18321.021
## 996  10581.104  4714.6436 16447.563
## 997   4033.886 -1830.9876  9898.759
## 998   4969.203  -895.1068 10833.512
## 999   3566.227 -2299.0267  9431.481
## 1000 11048.762  5181.6948 16915.829
## 1001  6839.836   975.8641 12703.808
## 1002  4969.203  -895.1068 10833.512
## 1003  5904.519    40.5104 11768.528
## 1004  4501.544 -1363.0143 10366.103
## 1005  4969.203  -895.1068 10833.512
## 1006  5904.519    40.5104 11768.528
## 1007 10581.104  4714.6436 16447.563
## 1008  5436.861  -427.2653 11300.987
## 1009 14790.029  8915.7379 20664.321
## 1010 16193.004 10314.9217 22071.087
## 1011 15725.346  9848.5926 21602.099
## 1012  8242.811  2378.4004 14107.223
## 1013  1695.594 -4171.8417  7563.029
## 1014  4969.203  -895.1068 10833.512
## 1015  5436.861  -427.2653 11300.987
## 1016  5904.519    40.5104 11768.528
## 1017  1695.594 -4171.8417  7563.029
## 1018  4033.886 -1830.9876  9898.759
## 1019  5904.519    40.5104 11768.528
## 1020  6372.178   508.2202 12236.135
## 1021  9178.128  3313.0952 15043.161
## 1022  4033.886 -1830.9876  9898.759
## 1023  4501.544 -1363.0143 10366.103
## 1024  3566.227 -2299.0267  9431.481
## 1025 13387.054  7515.9643 19258.144
## 1026  3566.227 -2299.0267  9431.481
## 1027  4501.544 -1363.0143 10366.103
## 1028  4501.544 -1363.0143 10366.103
## 1029  4501.544 -1363.0143 10366.103
## 1030  6372.178   508.2202 12236.135
## 1031  7307.495  1443.4421 13171.547
## 1032 14322.371  8449.2123 20195.529
## 1033  6372.178   508.2202 12236.135
## 1034  5904.519    40.5104 11768.528
## 1035 12451.737  6582.4537 18321.021
## 1036  4969.203  -895.1068 10833.512
## 1037  4501.544 -1363.0143 10366.103
## 1038  5904.519    40.5104 11768.528
## 1039  8242.811  2378.4004 14107.223
## 1040  2163.252 -3703.5392  8030.043
## 1041  8710.470  2845.7808 14575.159
## 1042  4033.886 -1830.9876  9898.759
## 1043  4501.544 -1363.0143 10366.103
## 1044 17595.980 11713.5168 23478.443
## 1045 10581.104  4714.6436 16447.563
## 1046  4969.203  -895.1068 10833.512
## 1047  4033.886 -1830.9876  9898.759
## 1048  3566.227 -2299.0267  9431.481
## 1049  8242.811  2378.4004 14107.223
## 1050  3098.569 -2767.1317  8964.270
## 1051  6839.836   975.8641 12703.808
## 1052  6372.178   508.2202 12236.135
## 1053  1695.594 -4171.8417  7563.029
## 1054  7307.495  1443.4421 13171.547
## 1055 14790.029  8915.7379 20664.321
## 1056  8710.470  2845.7808 14575.159
## 1057  3566.227 -2299.0267  9431.481
## 1058  4501.544 -1363.0143 10366.103
## 1059  8710.470  2845.7808 14575.159
## 1060  1695.594 -4171.8417  7563.029
## 1061  3098.569 -2767.1317  8964.270
## 1062  1695.594 -4171.8417  7563.029
## 1063  8710.470  2845.7808 14575.159
## 1064  5904.519    40.5104 11768.528
## 1065  4033.886 -1830.9876  9898.759
## 1066  3098.569 -2767.1317  8964.270
## 1067  4969.203  -895.1068 10833.512
## 1068  6372.178   508.2202 12236.135
## 1069  4969.203  -895.1068 10833.512
## 1070  1695.594 -4171.8417  7563.029
## 1071  3566.227 -2299.0267  9431.481
## 1072  5904.519    40.5104 11768.528
## 1073  3098.569 -2767.1317  8964.270
## 1074  4969.203  -895.1068 10833.512
## 1075  7775.153  1910.9542 13639.352
## 1076  5904.519    40.5104 11768.528
## 1077 13387.054  7515.9643 19258.144
## 1078  6372.178   508.2202 12236.135
## 1079 12451.737  6582.4537 18321.021
## 1080  5436.861  -427.2653 11300.987
## 1081 11984.079  6115.5998 17852.558
## 1082  6372.178   508.2202 12236.135
## 1083  3566.227 -2299.0267  9431.481
## 1084  8242.811  2378.4004 14107.223
## 1085  5904.519    40.5104 11768.528
## 1086  4501.544 -1363.0143 10366.103
## 1087 16193.004 10314.9217 22071.087
## 1088  6839.836   975.8641 12703.808
## 1089  3098.569 -2767.1317  8964.270
## 1090  5904.519    40.5104 11768.528
## 1091  5436.861  -427.2653 11300.987
## 1092  3566.227 -2299.0267  9431.481
## 1093  4969.203  -895.1068 10833.512
## 1094 12451.737  6582.4537 18321.021
## 1095  5436.861  -427.2653 11300.987
## 1096  8242.811  2378.4004 14107.223
## 1097 11048.762  5181.6948 16915.829
## 1098  2163.252 -3703.5392  8030.043
## 1099  4969.203  -895.1068 10833.512
## 1100  5904.519    40.5104 11768.528
## 1101  4033.886 -1830.9876  9898.759
## 1102  6839.836   975.8641 12703.808
## 1103  4501.544 -1363.0143 10366.103
## 1104  9645.787  3780.3439 15511.230
## 1105  3566.227 -2299.0267  9431.481
## 1106  4969.203  -895.1068 10833.512
## 1107  5904.519    40.5104 11768.528
## 1108  5904.519    40.5104 11768.528
## 1109  2630.911 -3235.3026  8497.124
## 1110  5436.861  -427.2653 11300.987
## 1111  1695.594 -4171.8417  7563.029
## 1112 17128.321 11247.3838 23009.259
## 1113  4501.544 -1363.0143 10366.103
## 1114  5436.861  -427.2653 11300.987
## 1115  5904.519    40.5104 11768.528
## 1116  1695.594 -4171.8417  7563.029
## 1117 18063.638 12179.5845 23947.692
## 1118  5436.861  -427.2653 11300.987
## 1119  1695.594 -4171.8417  7563.029
## 1120  5904.519    40.5104 11768.528
## 1121  4969.203  -895.1068 10833.512
## 1122  8242.811  2378.4004 14107.223
## 1123  5904.519    40.5104 11768.528
## 1124  5904.519    40.5104 11768.528
## 1125  6372.178   508.2202 12236.135
## 1126  4033.886 -1830.9876  9898.759
## 1127 13854.712  7982.6211 19726.804
## 1128  3098.569 -2767.1317  8964.270
## 1129  5436.861  -427.2653 11300.987
## 1130 12451.737  6582.4537 18321.021
## 1131  5904.519    40.5104 11768.528
## 1132  4969.203  -895.1068 10833.512
## 1133  3566.227 -2299.0267  9431.481
## 1134  4969.203  -895.1068 10833.512
## 1135  1695.594 -4171.8417  7563.029
## 1136 13854.712  7982.6211 19726.804
## 1137  1695.594 -4171.8417  7563.029
## 1138  3098.569 -2767.1317  8964.270
## 1139 16193.004 10314.9217 22071.087
## 1140  4033.886 -1830.9876  9898.759
## 1141 11984.079  6115.5998 17852.558
## 1142  4033.886 -1830.9876  9898.759
## 1143  5904.519    40.5104 11768.528
## 1144  5904.519    40.5104 11768.528
## 1145  5904.519    40.5104 11768.528
## 1146  4501.544 -1363.0143 10366.103
## 1147  5436.861  -427.2653 11300.987
## 1148  5904.519    40.5104 11768.528
## 1149  5904.519    40.5104 11768.528
## 1150  4501.544 -1363.0143 10366.103
## 1151  8710.470  2845.7808 14575.159
## 1152  4033.886 -1830.9876  9898.759
## 1153  2630.911 -3235.3026  8497.124
## 1154  1227.935 -4640.2099  7096.080
## 1155 13854.712  7982.6211 19726.804
## 1156  6372.178   508.2202 12236.135
## 1157  9645.787  3780.3439 15511.230
## 1158  8242.811  2378.4004 14107.223
## 1159  5436.861  -427.2653 11300.987
## 1160  5904.519    40.5104 11768.528
## 1161  5904.519    40.5104 11768.528
## 1162  5904.519    40.5104 11768.528
## 1163  8242.811  2378.4004 14107.223
## 1164  4969.203  -895.1068 10833.512
## 1165  9645.787  3780.3439 15511.230
## 1166  7775.153  1910.9542 13639.352
## 1167 11984.079  6115.5998 17852.558
## 1168  4501.544 -1363.0143 10366.103
## 1169  4033.886 -1830.9876  9898.759
## 1170  3566.227 -2299.0267  9431.481
## 1171  4033.886 -1830.9876  9898.759
## 1172  5904.519    40.5104 11768.528
## 1173  4969.203  -895.1068 10833.512
## 1174  5436.861  -427.2653 11300.987
## 1175  4501.544 -1363.0143 10366.103
## 1176  4501.544 -1363.0143 10366.103
## 1177 13854.712  7982.6211 19726.804
## 1178 10113.445  4247.5267 15979.364
## 1179  2163.252 -3703.5392  8030.043
## 1180  6372.178   508.2202 12236.135
## 1181  8242.811  2378.4004 14107.223
## 1182 15257.688  9382.1980 21133.177
## 1183  3098.569 -2767.1317  8964.270
## 1184  7307.495  1443.4421 13171.547
## 1185 18063.638 12179.5845 23947.692
## 1186  7775.153  1910.9542 13639.352
## 1187  7307.495  1443.4421 13171.547
## 1188 10113.445  4247.5267 15979.364
## 1189  5904.519    40.5104 11768.528
## 1190  4033.886 -1830.9876  9898.759
## 1191  5904.519    40.5104 11768.528
## 1192  5904.519    40.5104 11768.528
## 1193  9178.128  3313.0952 15043.161
## 1194  3098.569 -2767.1317  8964.270
## 1195 14790.029  8915.7379 20664.321
## 1196 11984.079  6115.5998 17852.558
## 1197 11048.762  5181.6948 16915.829
## 1198  2163.252 -3703.5392  8030.043
## 1199  4501.544 -1363.0143 10366.103
## 1200  5904.519    40.5104 11768.528
## 1201  4969.203  -895.1068 10833.512
## 1202  3566.227 -2299.0267  9431.481
## 1203  4501.544 -1363.0143 10366.103
## 1204  6372.178   508.2202 12236.135
## 1205 10113.445  4247.5267 15979.364
## 1206  1695.594 -4171.8417  7563.029
## 1207  4501.544 -1363.0143 10366.103
## 1208  4969.203  -895.1068 10833.512
## 1209  8242.811  2378.4004 14107.223
## 1210 10113.445  4247.5267 15979.364
## 1211  7775.153  1910.9542 13639.352
## 1212  4033.886 -1830.9876  9898.759
## 1213  5904.519    40.5104 11768.528
## 1214  2630.911 -3235.3026  8497.124
## 1215  5436.861  -427.2653 11300.987
## 1216  4033.886 -1830.9876  9898.759
## 1217  5904.519    40.5104 11768.528
## 1218  3566.227 -2299.0267  9431.481
## 1219  5904.519    40.5104 11768.528
## 1220  5436.861  -427.2653 11300.987
## 1221  9178.128  3313.0952 15043.161
## 1222 12919.396  7049.2418 18789.549
## 1223  1695.594 -4171.8417  7563.029
## 1224 12919.396  7049.2418 18789.549
## 1225  2630.911 -3235.3026  8497.124
## 1226 11048.762  5181.6948 16915.829
## 1227  5904.519    40.5104 11768.528
## 1228  4033.886 -1830.9876  9898.759
## 1229  5904.519    40.5104 11768.528
## 1230  9645.787  3780.3439 15511.230
## 1231  4033.886 -1830.9876  9898.759
## 1232 10113.445  4247.5267 15979.364
## 1233  9178.128  3313.0952 15043.161
## 1234  5904.519    40.5104 11768.528
## 1235  3098.569 -2767.1317  8964.270
## 1236  7307.495  1443.4421 13171.547
## 1237  8710.470  2845.7808 14575.159
## 1238  5904.519    40.5104 11768.528
## 1239  2630.911 -3235.3026  8497.124
## 1240  5436.861  -427.2653 11300.987
## 1241  5436.861  -427.2653 11300.987
## 1242  5904.519    40.5104 11768.528
## 1243 11048.762  5181.6948 16915.829
## 1244  5436.861  -427.2653 11300.987
## 1245  5904.519    40.5104 11768.528
## 1246  2630.911 -3235.3026  8497.124
## 1247  4033.886 -1830.9876  9898.759
## 1248  4033.886 -1830.9876  9898.759
## 1249  4033.886 -1830.9876  9898.759
## 1250  2163.252 -3703.5392  8030.043
## 1251  5904.519    40.5104 11768.528
## 1252  6839.836   975.8641 12703.808
## 1253  4033.886 -1830.9876  9898.759
## 1254  7307.495  1443.4421 13171.547
## 1255  4969.203  -895.1068 10833.512
## 1256  6372.178   508.2202 12236.135
## 1257  5436.861  -427.2653 11300.987
## 1258  5904.519    40.5104 11768.528
## 1259  1695.594 -4171.8417  7563.029
## 1260  5904.519    40.5104 11768.528
## 1261  6839.836   975.8641 12703.808
## 1262  8242.811  2378.4004 14107.223
## 1263  4033.886 -1830.9876  9898.759
## 1264  4501.544 -1363.0143 10366.103
## 1265 17128.321 11247.3838 23009.259
## 1266  6372.178   508.2202 12236.135
## 1267  3566.227 -2299.0267  9431.481
## 1268  8242.811  2378.4004 14107.223
## 1269 13854.712  7982.6211 19726.804
## 1270  5904.519    40.5104 11768.528
## 1271  4033.886 -1830.9876  9898.759
## 1272  1695.594 -4171.8417  7563.029
## 1273  3566.227 -2299.0267  9431.481
## 1274  1695.594 -4171.8417  7563.029
## 1275  7307.495  1443.4421 13171.547
## 1276  8242.811  2378.4004 14107.223
## 1277  3566.227 -2299.0267  9431.481
## 1278 12451.737  6582.4537 18321.021
## 1279  8242.811  2378.4004 14107.223
## 1280  4033.886 -1830.9876  9898.759
## 1281 10113.445  4247.5267 15979.364
## 1282  5904.519    40.5104 11768.528
## 1283  7775.153  1910.9542 13639.352
## 1284  3566.227 -2299.0267  9431.481
## 1285  5436.861  -427.2653 11300.987
## 1286  4033.886 -1830.9876  9898.759
## 1287  4501.544 -1363.0143 10366.103
## 1288  5904.519    40.5104 11768.528
## 1289  8242.811  2378.4004 14107.223
## 1290  7307.495  1443.4421 13171.547
## 1291  6372.178   508.2202 12236.135
## 1292  5904.519    40.5104 11768.528
## 1293  4501.544 -1363.0143 10366.103
## 1294  4501.544 -1363.0143 10366.103
## 1295  6372.178   508.2202 12236.135
## 1296 11984.079  6115.5998 17852.558
## 1297  5436.861  -427.2653 11300.987
## 1298  4033.886 -1830.9876  9898.759
## 1299  7307.495  1443.4421 13171.547
## 1300  6839.836   975.8641 12703.808
## 1301  5904.519    40.5104 11768.528
## 1302 18531.297 12645.5870 24417.006
## 1303  4033.886 -1830.9876  9898.759
## 1304 14322.371  8449.2123 20195.529
## 1305  8242.811  2378.4004 14107.223
## 1306  7775.153  1910.9542 13639.352
## 1307  5436.861  -427.2653 11300.987
## 1308  2630.911 -3235.3026  8497.124
## 1309 10581.104  4714.6436 16447.563
## 1310  3566.227 -2299.0267  9431.481
## 1311 11984.079  6115.5998 17852.558
## 1312  1227.935 -4640.2099  7096.080
## 1313  2163.252 -3703.5392  8030.043
## 1314  3098.569 -2767.1317  8964.270
## 1315  5904.519    40.5104 11768.528
## 1316  8242.811  2378.4004 14107.223
## 1317  4501.544 -1363.0143 10366.103
## 1318  4033.886 -1830.9876  9898.759
## 1319  6372.178   508.2202 12236.135
## 1320  3098.569 -2767.1317  8964.270
## 1321  5904.519    40.5104 11768.528
## 1322  4501.544 -1363.0143 10366.103
## 1323  6839.836   975.8641 12703.808
## 1324  2630.911 -3235.3026  8497.124
## 1325  6372.178   508.2202 12236.135
## 1326  4969.203  -895.1068 10833.512
## 1327  4501.544 -1363.0143 10366.103
## 1328 12919.396  7049.2418 18789.549
## 1329  5436.861  -427.2653 11300.987
## 1330  1695.594 -4171.8417  7563.029
## 1331 11048.762  5181.6948 16915.829
## 1332 14790.029  8915.7379 20664.321
## 1333  1695.594 -4171.8417  7563.029
## 1334  7775.153  1910.9542 13639.352
## 1335  4969.203  -895.1068 10833.512
## 1336  4501.544 -1363.0143 10366.103
## 1337 10113.445  4247.5267 15979.364
## 1338  1695.594 -4171.8417  7563.029
## 1339  1695.594 -4171.8417  7563.029
## 1340  1695.594 -4171.8417  7563.029
## 1341  5904.519    40.5104 11768.528
## 1342  5904.519    40.5104 11768.528
## 1343  5436.861  -427.2653 11300.987
## 1344  6372.178   508.2202 12236.135
## 1345  8710.470  2845.7808 14575.159
## 1346  3098.569 -2767.1317  8964.270
## 1347  5904.519    40.5104 11768.528
## 1348  5904.519    40.5104 11768.528
## 1349 11516.420  5648.6802 17384.161
## 1350  1695.594 -4171.8417  7563.029
## 1351  5436.861  -427.2653 11300.987
## 1352 12451.737  6582.4537 18321.021
## 1353  5904.519    40.5104 11768.528
## 1354  3566.227 -2299.0267  9431.481
## 1355  3566.227 -2299.0267  9431.481
## 1356  6839.836   975.8641 12703.808
## 1357  7775.153  1910.9542 13639.352
## 1358  9645.787  3780.3439 15511.230
## 1359  4969.203  -895.1068 10833.512
## 1360  5436.861  -427.2653 11300.987
## 1361  3098.569 -2767.1317  8964.270
## 1362  4969.203  -895.1068 10833.512
## 1363  6839.836   975.8641 12703.808
## 1364  5904.519    40.5104 11768.528
## 1365  4501.544 -1363.0143 10366.103
## 1366  1695.594 -4171.8417  7563.029
## 1367  5904.519    40.5104 11768.528
## 1368  4033.886 -1830.9876  9898.759
## 1369  8710.470  2845.7808 14575.159
## 1370  4033.886 -1830.9876  9898.759
## 1371  8710.470  2845.7808 14575.159
## 1372  4033.886 -1830.9876  9898.759
## 1373  5904.519    40.5104 11768.528
## 1374 10581.104  4714.6436 16447.563
## 1375 14790.029  8915.7379 20664.321
## 1376  4969.203  -895.1068 10833.512
## 1377  5904.519    40.5104 11768.528
## 1378 14322.371  8449.2123 20195.529
## 1379  7775.153  1910.9542 13639.352
## 1380  1695.594 -4171.8417  7563.029
## 1381  4033.886 -1830.9876  9898.759
## 1382  3566.227 -2299.0267  9431.481
## 1383  3098.569 -2767.1317  8964.270
## 1384  3566.227 -2299.0267  9431.481
## 1385  7775.153  1910.9542 13639.352
## 1386  5436.861  -427.2653 11300.987
## 1387  4969.203  -895.1068 10833.512
## 1388  4033.886 -1830.9876  9898.759
## 1389  5436.861  -427.2653 11300.987
## 1390  5904.519    40.5104 11768.528
## 1391  4033.886 -1830.9876  9898.759
## 1392 10581.104  4714.6436 16447.563
## 1393  5904.519    40.5104 11768.528
## 1394  4501.544 -1363.0143 10366.103
## 1395  4969.203  -895.1068 10833.512
## 1396  5904.519    40.5104 11768.528
## 1397  8242.811  2378.4004 14107.223
## 1398  5436.861  -427.2653 11300.987
## 1399  5436.861  -427.2653 11300.987
## 1400  5904.519    40.5104 11768.528
## 1401  4501.544 -1363.0143 10366.103
## 1402 17595.980 11713.5168 23478.443
## 1403  1695.594 -4171.8417  7563.029
## 1404 11048.762  5181.6948 16915.829
## 1405 10581.104  4714.6436 16447.563
## 1406  7307.495  1443.4421 13171.547
## 1407  5436.861  -427.2653 11300.987
## 1408  3098.569 -2767.1317  8964.270
## 1409  3566.227 -2299.0267  9431.481
## 1410  5904.519    40.5104 11768.528
## 1411  8242.811  2378.4004 14107.223
## 1412  4033.886 -1830.9876  9898.759
## 1413  6839.836   975.8641 12703.808
## 1414  4501.544 -1363.0143 10366.103
## 1415 12919.396  7049.2418 18789.549
## 1416  1695.594 -4171.8417  7563.029
## 1417  8710.470  2845.7808 14575.159
## 1418  2630.911 -3235.3026  8497.124
## 1419  5904.519    40.5104 11768.528
## 1420  5436.861  -427.2653 11300.987
## 1421  6839.836   975.8641 12703.808
## 1422  7775.153  1910.9542 13639.352
## 1423  3566.227 -2299.0267  9431.481
## 1424  3098.569 -2767.1317  8964.270
## 1425  5904.519    40.5104 11768.528
## 1426  5904.519    40.5104 11768.528
## 1427  4033.886 -1830.9876  9898.759
## 1428  4969.203  -895.1068 10833.512
## 1429  2630.911 -3235.3026  8497.124
## 1430  9645.787  3780.3439 15511.230
## 1431 10581.104  4714.6436 16447.563
## 1432  7775.153  1910.9542 13639.352
## 1433  8710.470  2845.7808 14575.159
## 1434  4033.886 -1830.9876  9898.759
## 1435  8710.470  2845.7808 14575.159
## 1436  4033.886 -1830.9876  9898.759
## 1437  2163.252 -3703.5392  8030.043
## 1438 11048.762  5181.6948 16915.829
## 1439  1695.594 -4171.8417  7563.029
## 1440  5904.519    40.5104 11768.528
## 1441  9645.787  3780.3439 15511.230
## 1442  7307.495  1443.4421 13171.547
## 1443  3098.569 -2767.1317  8964.270
## 1444 12451.737  6582.4537 18321.021
## 1445  7775.153  1910.9542 13639.352
## 1446 11048.762  5181.6948 16915.829
## 1447  4969.203  -895.1068 10833.512
## 1448  8242.811  2378.4004 14107.223
## 1449  7775.153  1910.9542 13639.352
## 1450  3098.569 -2767.1317  8964.270
## 1451  5436.861  -427.2653 11300.987
## 1452  5904.519    40.5104 11768.528
## 1453  6839.836   975.8641 12703.808
## 1454  4969.203  -895.1068 10833.512
## 1455  4969.203  -895.1068 10833.512
## 1456  4969.203  -895.1068 10833.512
## 1457  5904.519    40.5104 11768.528
## 1458 10581.104  4714.6436 16447.563
## 1459  3098.569 -2767.1317  8964.270
## 1460  5904.519    40.5104 11768.528
## 1461  3566.227 -2299.0267  9431.481
## 1462 10581.104  4714.6436 16447.563
## 1463 11048.762  5181.6948 16915.829
## 1464  5904.519    40.5104 11768.528
## 1465  3566.227 -2299.0267  9431.481
## 1466  9178.128  3313.0952 15043.161
## 1467  5436.861  -427.2653 11300.987
## 1468  4033.886 -1830.9876  9898.759
## 1469  9178.128  3313.0952 15043.161
## 1470  4033.886 -1830.9876  9898.759
Predicciones y sus Intervalos de Confianza
predict(modelo_RL_Simple, data.frame(seq(1,1470)), interval='confidence', level = 0.95)
##            fit        lwr       upr
## 1     4969.203  4803.2757  5135.129
## 2     5904.519  5749.5724  6059.466
## 3     4501.544  4327.0378  4676.051
## 4     4969.203  4803.2757  5135.129
## 5     4033.886  3849.0995  4218.672
## 6     4969.203  4803.2757  5135.129
## 7     6839.836  6686.2900  6993.382
## 8     1695.594  1442.2067  1948.981
## 9     5904.519  5749.5724  6059.466
## 10    9178.128  8988.3401  9367.916
## 11    4033.886  3849.0995  4218.672
## 12    5904.519  5749.5724  6059.466
## 13    3566.227  3369.7274  3762.727
## 14    2630.911  2407.6101  2854.211
## 15    4033.886  3849.0995  4218.672
## 16    5904.519  5749.5724  6059.466
## 17    4501.544  4327.0378  4676.051
## 18    1695.594  1442.2067  1948.981
## 19   15725.346 15308.6471 16142.045
## 20    4033.886  3849.0995  4218.672
## 21    3566.227  3369.7274  3762.727
## 22    5904.519  5749.5724  6059.466
## 23    7307.495  7150.9075  7464.082
## 24    1227.935   958.6119  1497.259
## 25    4969.203  4803.2757  5135.129
## 26   13387.054 13059.7906 13714.317
## 27    5904.519  5749.5724  6059.466
## 28    5904.519  5749.5724  6059.466
## 29   12451.737 12158.6569 12744.817
## 30   11516.420 11256.0710 11776.770
## 31    4501.544  4327.0378  4676.051
## 32    5436.861  5277.5382  5596.184
## 33    5904.519  5749.5724  6059.466
## 34   10113.445  9898.0243 10328.866
## 35    4033.886  3849.0995  4218.672
## 36    4033.886  3849.0995  4218.672
## 37    2630.911  2407.6101  2854.211
## 38    2163.252  1925.2445  2401.260
## 39    4033.886  3849.0995  4218.672
## 40    5904.519  5749.5724  6059.466
## 41    1695.594  1442.2067  1948.981
## 42    1695.594  1442.2067  1948.981
## 43    1695.594  1442.2067  1948.981
## 44    5436.861  5277.5382  5596.184
## 45    6839.836  6686.2900  6993.382
## 46   11984.079 11707.5783 12260.579
## 47    5904.519  5749.5724  6059.466
## 48    4969.203  4803.2757  5135.129
## 49    7775.153  7613.1796  7937.126
## 50    1695.594  1442.2067  1948.981
## 51   11984.079 11707.5783 12260.579
## 52    2163.252  1925.2445  2401.260
## 53    5436.861  5277.5382  5596.184
## 54    5904.519  5749.5724  6059.466
## 55    3566.227  3369.7274  3762.727
## 56    8242.811  8073.3299  8412.293
## 57    5436.861  5277.5382  5596.184
## 58    3098.569  2889.1620  3307.976
## 59    5904.519  5749.5724  6059.466
## 60    4501.544  4327.0378  4676.051
## 61    5436.861  5277.5382  5596.184
## 62    5904.519  5749.5724  6059.466
## 63   14790.029 14409.6281 15170.430
## 64   14322.371 13959.8826 14684.859
## 65    9178.128  8988.3401  9367.916
## 66   11048.762 10804.0503 11293.474
## 67    4033.886  3849.0995  4218.672
## 68   12919.396 12609.3757 13229.415
## 69    3566.227  3369.7274  3762.727
## 70    2163.252  1925.2445  2401.260
## 71   10581.104 10351.4112 10810.796
## 72    4033.886  3849.0995  4218.672
## 73    1695.594  1442.2067  1948.981
## 74    5904.519  5749.5724  6059.466
## 75    3566.227  3369.7274  3762.727
## 76    6372.178  6219.1872  6525.168
## 77    8710.470  8531.6253  8889.314
## 78    9178.128  8988.3401  9367.916
## 79    8710.470  8531.6253  8889.314
## 80    8710.470  8531.6253  8889.314
## 81    5904.519  5749.5724  6059.466
## 82    4033.886  3849.0995  4218.672
## 83   12451.737 12158.6569 12744.817
## 84    9178.128  8988.3401  9367.916
## 85    3566.227  3369.7274  3762.727
## 86   18531.297 18003.1078 19059.485
## 87    2630.911  2407.6101  2854.211
## 88    5904.519  5749.5724  6059.466
## 89    6372.178  6219.1872  6525.168
## 90    5436.861  5277.5382  5596.184
## 91   11516.420 11256.0710 11776.770
## 92    6372.178  6219.1872  6525.168
## 93    6372.178  6219.1872  6525.168
## 94   11048.762 10804.0503 11293.474
## 95    6839.836  6686.2900  6993.382
## 96    8710.470  8531.6253  8889.314
## 97    3098.569  2889.1620  3307.976
## 98    3566.227  3369.7274  3762.727
## 99   18998.955 18451.9216 19545.988
## 100   9178.128  8988.3401  9367.916
## 101   4501.544  4327.0378  4676.051
## 102   1695.594  1442.2067  1948.981
## 103   1695.594  1442.2067  1948.981
## 104   8710.470  8531.6253  8889.314
## 105   9178.128  8988.3401  9367.916
## 106  15257.688 14859.2091 15656.166
## 107  14322.371 13959.8826 14684.859
## 108   4033.886  3849.0995  4218.672
## 109   2163.252  1925.2445  2401.260
## 110   1695.594  1442.2067  1948.981
## 111  11984.079 11707.5783 12260.579
## 112   5436.861  5277.5382  5596.184
## 113  11984.079 11707.5783 12260.579
## 114   4033.886  3849.0995  4218.672
## 115   6839.836  6686.2900  6993.382
## 116   6839.836  6686.2900  6993.382
## 117   7775.153  7613.1796  7937.126
## 118   5904.519  5749.5724  6059.466
## 119   4501.544  4327.0378  4676.051
## 120  12919.396 12609.3757 13229.415
## 121   5904.519  5749.5724  6059.466
## 122   4969.203  4803.2757  5135.129
## 123   4501.544  4327.0378  4676.051
## 124  11984.079 11707.5783 12260.579
## 125   6839.836  6686.2900  6993.382
## 126   3566.227  3369.7274  3762.727
## 127  19934.272 19349.3886 20519.155
## 128   1227.935   958.6119  1497.259
## 129   2630.911  2407.6101  2854.211
## 130   8710.470  8531.6253  8889.314
## 131   9645.787  9443.7311  9847.842
## 132   8710.470  8531.6253  8889.314
## 133   3098.569  2889.1620  3307.976
## 134   6839.836  6686.2900  6993.382
## 135   4969.203  4803.2757  5135.129
## 136   4501.544  4327.0378  4676.051
## 137   9645.787  9443.7311  9847.842
## 138   9178.128  8988.3401  9367.916
## 139   4033.886  3849.0995  4218.672
## 140   6839.836  6686.2900  6993.382
## 141   5904.519  5749.5724  6059.466
## 142   5436.861  5277.5382  5596.184
## 143  10113.445  9898.0243 10328.866
## 144   3566.227  3369.7274  3762.727
## 145   5436.861  5277.5382  5596.184
## 146   4969.203  4803.2757  5135.129
## 147   4033.886  3849.0995  4218.672
## 148  11048.762 10804.0503 11293.474
## 149   4501.544  4327.0378  4676.051
## 150   1695.594  1442.2067  1948.981
## 151  10581.104 10351.4112 10810.796
## 152   5904.519  5749.5724  6059.466
## 153   7307.495  7150.9075  7464.082
## 154  10581.104 10351.4112 10810.796
## 155   5436.861  5277.5382  5596.184
## 156   5904.519  5749.5724  6059.466
## 157   5904.519  5749.5724  6059.466
## 158   5436.861  5277.5382  5596.184
## 159   8242.811  8073.3299  8412.293
## 160   4033.886  3849.0995  4218.672
## 161   2163.252  1925.2445  2401.260
## 162   4033.886  3849.0995  4218.672
## 163   3566.227  3369.7274  3762.727
## 164   6839.836  6686.2900  6993.382
## 165   1695.594  1442.2067  1948.981
## 166  11048.762 10804.0503 11293.474
## 167   7307.495  7150.9075  7464.082
## 168   6839.836  6686.2900  6993.382
## 169   6839.836  6686.2900  6993.382
## 170   4969.203  4803.2757  5135.129
## 171   4033.886  3849.0995  4218.672
## 172   1695.594  1442.2067  1948.981
## 173   7307.495  7150.9075  7464.082
## 174   6839.836  6686.2900  6993.382
## 175   5436.861  5277.5382  5596.184
## 176  10113.445  9898.0243 10328.866
## 177   3098.569  2889.1620  3307.976
## 178   1695.594  1442.2067  1948.981
## 179  12451.737 12158.6569 12744.817
## 180   2163.252  1925.2445  2401.260
## 181   4501.544  4327.0378  4676.051
## 182   5436.861  5277.5382  5596.184
## 183   3098.569  2889.1620  3307.976
## 184   3566.227  3369.7274  3762.727
## 185   3566.227  3369.7274  3762.727
## 186   4969.203  4803.2757  5135.129
## 187  11048.762 10804.0503 11293.474
## 188  18063.638 17554.2327 18573.043
## 189   5904.519  5749.5724  6059.466
## 190  11048.762 10804.0503 11293.474
## 191  17128.321 16656.2692 17600.373
## 192   4501.544  4327.0378  4676.051
## 193   4969.203  4803.2757  5135.129
## 194   4501.544  4327.0378  4676.051
## 195  11516.420 11256.0710 11776.770
## 196   4969.203  4803.2757  5135.129
## 197   5904.519  5749.5724  6059.466
## 198   6372.178  6219.1872  6525.168
## 199   7775.153  7613.1796  7937.126
## 200   5436.861  5277.5382  5596.184
## 201   4033.886  3849.0995  4218.672
## 202   4501.544  4327.0378  4676.051
## 203   3566.227  3369.7274  3762.727
## 204   8242.811  8073.3299  8412.293
## 205   9178.128  8988.3401  9367.916
## 206   5904.519  5749.5724  6059.466
## 207   3098.569  2889.1620  3307.976
## 208   4969.203  4803.2757  5135.129
## 209   3566.227  3369.7274  3762.727
## 210   9178.128  8988.3401  9367.916
## 211   7775.153  7613.1796  7937.126
## 212   6839.836  6686.2900  6993.382
## 213   4501.544  4327.0378  4676.051
## 214   8710.470  8531.6253  8889.314
## 215   4969.203  4803.2757  5135.129
## 216   8710.470  8531.6253  8889.314
## 217   5436.861  5277.5382  5596.184
## 218   4501.544  4327.0378  4676.051
## 219  11984.079 11707.5783 12260.579
## 220   8710.470  8531.6253  8889.314
## 221   8710.470  8531.6253  8889.314
## 222   4501.544  4327.0378  4676.051
## 223   5904.519  5749.5724  6059.466
## 224   9178.128  8988.3401  9367.916
## 225   4033.886  3849.0995  4218.672
## 226   4501.544  4327.0378  4676.051
## 227   7307.495  7150.9075  7464.082
## 228   6372.178  6219.1872  6525.168
## 229   5904.519  5749.5724  6059.466
## 230   3098.569  2889.1620  3307.976
## 231   4033.886  3849.0995  4218.672
## 232  11516.420 11256.0710 11776.770
## 233   4501.544  4327.0378  4676.051
## 234  16193.004 15757.9600 16628.049
## 235   4969.203  4803.2757  5135.129
## 236  11516.420 11256.0710 11776.770
## 237   7307.495  7150.9075  7464.082
## 238  16660.663 16207.1631 17114.163
## 239   4033.886  3849.0995  4218.672
## 240   3098.569  2889.1620  3307.976
## 241   4501.544  4327.0378  4676.051
## 242   3098.569  2889.1620  3307.976
## 243   9178.128  8988.3401  9367.916
## 244   5436.861  5277.5382  5596.184
## 245  12919.396 12609.3757 13229.415
## 246   5436.861  5277.5382  5596.184
## 247   2163.252  1925.2445  2401.260
## 248   7307.495  7150.9075  7464.082
## 249   9178.128  8988.3401  9367.916
## 250   5436.861  5277.5382  5596.184
## 251   9178.128  8988.3401  9367.916
## 252  10581.104 10351.4112 10810.796
## 253   4033.886  3849.0995  4218.672
## 254   5904.519  5749.5724  6059.466
## 255   5904.519  5749.5724  6059.466
## 256   3566.227  3369.7274  3762.727
## 257   5904.519  5749.5724  6059.466
## 258  11516.420 11256.0710 11776.770
## 259   1695.594  1442.2067  1948.981
## 260   4033.886  3849.0995  4218.672
## 261   3566.227  3369.7274  3762.727
## 262   7307.495  7150.9075  7464.082
## 263   5436.861  5277.5382  5596.184
## 264  14322.371 13959.8826 14684.859
## 265   3566.227  3369.7274  3762.727
## 266   5904.519  5749.5724  6059.466
## 267   5904.519  5749.5724  6059.466
## 268   4033.886  3849.0995  4218.672
## 269  11048.762 10804.0503 11293.474
## 270   8710.470  8531.6253  8889.314
## 271  18531.297 18003.1078 19059.485
## 272   5904.519  5749.5724  6059.466
## 273   3566.227  3369.7274  3762.727
## 274   4501.544  4327.0378  4676.051
## 275   2630.911  2407.6101  2854.211
## 276   8242.811  8073.3299  8412.293
## 277   5904.519  5749.5724  6059.466
## 278   4969.203  4803.2757  5135.129
## 279   4033.886  3849.0995  4218.672
## 280  14322.371 13959.8826 14684.859
## 281  11048.762 10804.0503 11293.474
## 282  10581.104 10351.4112 10810.796
## 283   5904.519  5749.5724  6059.466
## 284   6839.836  6686.2900  6993.382
## 285   3566.227  3369.7274  3762.727
## 286   9178.128  8988.3401  9367.916
## 287  10113.445  9898.0243 10328.866
## 288   5904.519  5749.5724  6059.466
## 289   3566.227  3369.7274  3762.727
## 290   3566.227  3369.7274  3762.727
## 291  11516.420 11256.0710 11776.770
## 292   5904.519  5749.5724  6059.466
## 293   2163.252  1925.2445  2401.260
## 294   4969.203  4803.2757  5135.129
## 295   3098.569  2889.1620  3307.976
## 296  11984.079 11707.5783 12260.579
## 297   1227.935   958.6119  1497.259
## 298   6839.836  6686.2900  6993.382
## 299   3098.569  2889.1620  3307.976
## 300   7307.495  7150.9075  7464.082
## 301  11516.420 11256.0710 11776.770
## 302   1227.935   958.6119  1497.259
## 303   5436.861  5277.5382  5596.184
## 304   5904.519  5749.5724  6059.466
## 305  10113.445  9898.0243 10328.866
## 306   6372.178  6219.1872  6525.168
## 307   7307.495  7150.9075  7464.082
## 308  10113.445  9898.0243 10328.866
## 309   6839.836  6686.2900  6993.382
## 310   4033.886  3849.0995  4218.672
## 311   5436.861  5277.5382  5596.184
## 312  12451.737 12158.6569 12744.817
## 313   2630.911  2407.6101  2854.211
## 314   6839.836  6686.2900  6993.382
## 315  11048.762 10804.0503 11293.474
## 316   5436.861  5277.5382  5596.184
## 317  12919.396 12609.3757 13229.415
## 318   6372.178  6219.1872  6525.168
## 319   3098.569  2889.1620  3307.976
## 320   7307.495  7150.9075  7464.082
## 321   3566.227  3369.7274  3762.727
## 322   7307.495  7150.9075  7464.082
## 323   5904.519  5749.5724  6059.466
## 324   3566.227  3369.7274  3762.727
## 325   6372.178  6219.1872  6525.168
## 326   5904.519  5749.5724  6059.466
## 327  11048.762 10804.0503 11293.474
## 328   6839.836  6686.2900  6993.382
## 329   5436.861  5277.5382  5596.184
## 330  11048.762 10804.0503 11293.474
## 331   5436.861  5277.5382  5596.184
## 332   4033.886  3849.0995  4218.672
## 333  10581.104 10351.4112 10810.796
## 334   5904.519  5749.5724  6059.466
## 335   6839.836  6686.2900  6993.382
## 336   4033.886  3849.0995  4218.672
## 337   4501.544  4327.0378  4676.051
## 338   3098.569  2889.1620  3307.976
## 339   5904.519  5749.5724  6059.466
## 340   4969.203  4803.2757  5135.129
## 341   4969.203  4803.2757  5135.129
## 342   6839.836  6686.2900  6993.382
## 343   6372.178  6219.1872  6525.168
## 344   4501.544  4327.0378  4676.051
## 345   9178.128  8988.3401  9367.916
## 346   3098.569  2889.1620  3307.976
## 347   4969.203  4803.2757  5135.129
## 348   3566.227  3369.7274  3762.727
## 349   8710.470  8531.6253  8889.314
## 350   3098.569  2889.1620  3307.976
## 351   3098.569  2889.1620  3307.976
## 352   4969.203  4803.2757  5135.129
## 353   8242.811  8073.3299  8412.293
## 354   7307.495  7150.9075  7464.082
## 355   3098.569  2889.1620  3307.976
## 356   4969.203  4803.2757  5135.129
## 357   7775.153  7613.1796  7937.126
## 358   2630.911  2407.6101  2854.211
## 359   4501.544  4327.0378  4676.051
## 360   8710.470  8531.6253  8889.314
## 361   8242.811  8073.3299  8412.293
## 362   5904.519  5749.5724  6059.466
## 363   2630.911  2407.6101  2854.211
## 364   1695.594  1442.2067  1948.981
## 365   9178.128  8988.3401  9367.916
## 366   4501.544  4327.0378  4676.051
## 367   4969.203  4803.2757  5135.129
## 368  10581.104 10351.4112 10810.796
## 369   4969.203  4803.2757  5135.129
## 370   2630.911  2407.6101  2854.211
## 371   1695.594  1442.2067  1948.981
## 372   4033.886  3849.0995  4218.672
## 373   5904.519  5749.5724  6059.466
## 374   3566.227  3369.7274  3762.727
## 375   4501.544  4327.0378  4676.051
## 376  13387.054 13059.7906 13714.317
## 377   9645.787  9443.7311  9847.842
## 378   4033.886  3849.0995  4218.672
## 379   5436.861  5277.5382  5596.184
## 380  15257.688 14859.2091 15656.166
## 381   3566.227  3369.7274  3762.727
## 382   1695.594  1442.2067  1948.981
## 383   4501.544  4327.0378  4676.051
## 384   2163.252  1925.2445  2401.260
## 385   5904.519  5749.5724  6059.466
## 386   2630.911  2407.6101  2854.211
## 387   9645.787  9443.7311  9847.842
## 388   4969.203  4803.2757  5135.129
## 389   4969.203  4803.2757  5135.129
## 390   9645.787  9443.7311  9847.842
## 391  12919.396 12609.3757 13229.415
## 392  10581.104 10351.4112 10810.796
## 393  12451.737 12158.6569 12744.817
## 394   4033.886  3849.0995  4218.672
## 395   7307.495  7150.9075  7464.082
## 396   4969.203  4803.2757  5135.129
## 397   4969.203  4803.2757  5135.129
## 398   3566.227  3369.7274  3762.727
## 399   8242.811  8073.3299  8412.293
## 400   3098.569  2889.1620  3307.976
## 401  11048.762 10804.0503 11293.474
## 402  18063.638 17554.2327 18573.043
## 403   4033.886  3849.0995  4218.672
## 404   5904.519  5749.5724  6059.466
## 405   5904.519  5749.5724  6059.466
## 406   4033.886  3849.0995  4218.672
## 407  14322.371 13959.8826 14684.859
## 408   4969.203  4803.2757  5135.129
## 409  15725.346 15308.6471 16142.045
## 410  10113.445  9898.0243 10328.866
## 411   6372.178  6219.1872  6525.168
## 412  16660.663 16207.1631 17114.163
## 413  10113.445  9898.0243 10328.866
## 414   4501.544  4327.0378  4676.051
## 415   4033.886  3849.0995  4218.672
## 416   2630.911  2407.6101  2854.211
## 417   1695.594  1442.2067  1948.981
## 418  11048.762 10804.0503 11293.474
## 419   2630.911  2407.6101  2854.211
## 420   5436.861  5277.5382  5596.184
## 421   5904.519  5749.5724  6059.466
## 422   4033.886  3849.0995  4218.672
## 423   1695.594  1442.2067  1948.981
## 424   5904.519  5749.5724  6059.466
## 425  16193.004 15757.9600 16628.049
## 426  14322.371 13959.8826 14684.859
## 427   6839.836  6686.2900  6993.382
## 428  11516.420 11256.0710 11776.770
## 429  10581.104 10351.4112 10810.796
## 430  13387.054 13059.7906 13714.317
## 431   4033.886  3849.0995  4218.672
## 432  10113.445  9898.0243 10328.866
## 433   7775.153  7613.1796  7937.126
## 434   8242.811  8073.3299  8412.293
## 435   7307.495  7150.9075  7464.082
## 436   8242.811  8073.3299  8412.293
## 437   4969.203  4803.2757  5135.129
## 438   3098.569  2889.1620  3307.976
## 439   5904.519  5749.5724  6059.466
## 440   6839.836  6686.2900  6993.382
## 441   6372.178  6219.1872  6525.168
## 442   4969.203  4803.2757  5135.129
## 443   5904.519  5749.5724  6059.466
## 444   3098.569  2889.1620  3307.976
## 445   7775.153  7613.1796  7937.126
## 446  18531.297 18003.1078 19059.485
## 447   8710.470  8531.6253  8889.314
## 448   8242.811  8073.3299  8412.293
## 449  11516.420 11256.0710 11776.770
## 450   4969.203  4803.2757  5135.129
## 451   5904.519  5749.5724  6059.466
## 452   5904.519  5749.5724  6059.466
## 453   5436.861  5277.5382  5596.184
## 454   4969.203  4803.2757  5135.129
## 455   4969.203  4803.2757  5135.129
## 456   5904.519  5749.5724  6059.466
## 457   5904.519  5749.5724  6059.466
## 458   1227.935   958.6119  1497.259
## 459  10581.104 10351.4112 10810.796
## 460   5904.519  5749.5724  6059.466
## 461   4969.203  4803.2757  5135.129
## 462   3566.227  3369.7274  3762.727
## 463   5904.519  5749.5724  6059.466
## 464   1695.594  1442.2067  1948.981
## 465   6839.836  6686.2900  6993.382
## 466  14322.371 13959.8826 14684.859
## 467  11516.420 11256.0710 11776.770
## 468   5436.861  5277.5382  5596.184
## 469   9645.787  9443.7311  9847.842
## 470   4033.886  3849.0995  4218.672
## 471   2630.911  2407.6101  2854.211
## 472   9645.787  9443.7311  9847.842
## 473   4969.203  4803.2757  5135.129
## 474  15725.346 15308.6471 16142.045
## 475   4033.886  3849.0995  4218.672
## 476   4033.886  3849.0995  4218.672
## 477   1695.594  1442.2067  1948.981
## 478  16193.004 15757.9600 16628.049
## 479   4501.544  4327.0378  4676.051
## 480   4033.886  3849.0995  4218.672
## 481   1695.594  1442.2067  1948.981
## 482   4033.886  3849.0995  4218.672
## 483   5436.861  5277.5382  5596.184
## 484   5436.861  5277.5382  5596.184
## 485   7307.495  7150.9075  7464.082
## 486   4033.886  3849.0995  4218.672
## 487   9178.128  8988.3401  9367.916
## 488   1695.594  1442.2067  1948.981
## 489   5904.519  5749.5724  6059.466
## 490  11048.762 10804.0503 11293.474
## 491   4969.203  4803.2757  5135.129
## 492   5904.519  5749.5724  6059.466
## 493  11048.762 10804.0503 11293.474
## 494   5904.519  5749.5724  6059.466
## 495   4969.203  4803.2757  5135.129
## 496   3566.227  3369.7274  3762.727
## 497   2630.911  2407.6101  2854.211
## 498  13387.054 13059.7906 13714.317
## 499   2630.911  2407.6101  2854.211
## 500   4033.886  3849.0995  4218.672
## 501   4033.886  3849.0995  4218.672
## 502   1695.594  1442.2067  1948.981
## 503   9645.787  9443.7311  9847.842
## 504   5904.519  5749.5724  6059.466
## 505   3566.227  3369.7274  3762.727
## 506   2630.911  2407.6101  2854.211
## 507   5904.519  5749.5724  6059.466
## 508   4033.886  3849.0995  4218.672
## 509   9178.128  8988.3401  9367.916
## 510   8242.811  8073.3299  8412.293
## 511   8710.470  8531.6253  8889.314
## 512   7307.495  7150.9075  7464.082
## 513   3566.227  3369.7274  3762.727
## 514   1695.594  1442.2067  1948.981
## 515   5904.519  5749.5724  6059.466
## 516   1695.594  1442.2067  1948.981
## 517   3566.227  3369.7274  3762.727
## 518   3098.569  2889.1620  3307.976
## 519   4969.203  4803.2757  5135.129
## 520   5904.519  5749.5724  6059.466
## 521   6839.836  6686.2900  6993.382
## 522   4033.886  3849.0995  4218.672
## 523   3098.569  2889.1620  3307.976
## 524  10581.104 10351.4112 10810.796
## 525   5436.861  5277.5382  5596.184
## 526   3098.569  2889.1620  3307.976
## 527  10581.104 10351.4112 10810.796
## 528   5904.519  5749.5724  6059.466
## 529   9645.787  9443.7311  9847.842
## 530   5904.519  5749.5724  6059.466
## 531   5436.861  5277.5382  5596.184
## 532   5904.519  5749.5724  6059.466
## 533  10581.104 10351.4112 10810.796
## 534  10581.104 10351.4112 10810.796
## 535  16193.004 15757.9600 16628.049
## 536  11984.079 11707.5783 12260.579
## 537   5904.519  5749.5724  6059.466
## 538   5436.861  5277.5382  5596.184
## 539  11516.420 11256.0710 11776.770
## 540   3098.569  2889.1620  3307.976
## 541   5904.519  5749.5724  6059.466
## 542   5904.519  5749.5724  6059.466
## 543   5904.519  5749.5724  6059.466
## 544   5436.861  5277.5382  5596.184
## 545  14322.371 13959.8826 14684.859
## 546   5904.519  5749.5724  6059.466
## 547   1695.594  1442.2067  1948.981
## 548   4501.544  4327.0378  4676.051
## 549   4501.544  4327.0378  4676.051
## 550   5904.519  5749.5724  6059.466
## 551   3566.227  3369.7274  3762.727
## 552   6839.836  6686.2900  6993.382
## 553  15257.688 14859.2091 15656.166
## 554   3566.227  3369.7274  3762.727
## 555   5436.861  5277.5382  5596.184
## 556   2163.252  1925.2445  2401.260
## 557  10113.445  9898.0243 10328.866
## 558   8710.470  8531.6253  8889.314
## 559   5904.519  5749.5724  6059.466
## 560   4033.886  3849.0995  4218.672
## 561   4501.544  4327.0378  4676.051
## 562  17128.321 16656.2692 17600.373
## 563   5904.519  5749.5724  6059.466
## 564   4033.886  3849.0995  4218.672
## 565   5436.861  5277.5382  5596.184
## 566   2163.252  1925.2445  2401.260
## 567   4969.203  4803.2757  5135.129
## 568   4033.886  3849.0995  4218.672
## 569  12451.737 12158.6569 12744.817
## 570   5904.519  5749.5724  6059.466
## 571   3566.227  3369.7274  3762.727
## 572   3566.227  3369.7274  3762.727
## 573   6372.178  6219.1872  6525.168
## 574   4033.886  3849.0995  4218.672
## 575   5904.519  5749.5724  6059.466
## 576   5436.861  5277.5382  5596.184
## 577   3566.227  3369.7274  3762.727
## 578   4033.886  3849.0995  4218.672
## 579   9178.128  8988.3401  9367.916
## 580   4033.886  3849.0995  4218.672
## 581   2630.911  2407.6101  2854.211
## 582   4501.544  4327.0378  4676.051
## 583   4969.203  4803.2757  5135.129
## 584   4033.886  3849.0995  4218.672
## 585  12451.737 12158.6569 12744.817
## 586   1695.594  1442.2067  1948.981
## 587   1695.594  1442.2067  1948.981
## 588   5436.861  5277.5382  5596.184
## 589  15257.688 14859.2091 15656.166
## 590   1695.594  1442.2067  1948.981
## 591   7775.153  7613.1796  7937.126
## 592   4033.886  3849.0995  4218.672
## 593  13387.054 13059.7906 13714.317
## 594   5904.519  5749.5724  6059.466
## 595   5904.519  5749.5724  6059.466
## 596  19934.272 19349.3886 20519.155
## 597   4501.544  4327.0378  4676.051
## 598   4969.203  4803.2757  5135.129
## 599   3566.227  3369.7274  3762.727
## 600   4969.203  4803.2757  5135.129
## 601   7775.153  7613.1796  7937.126
## 602   5904.519  5749.5724  6059.466
## 603   6839.836  6686.2900  6993.382
## 604   1695.594  1442.2067  1948.981
## 605   5904.519  5749.5724  6059.466
## 606   7307.495  7150.9075  7464.082
## 607   4033.886  3849.0995  4218.672
## 608   5436.861  5277.5382  5596.184
## 609   6839.836  6686.2900  6993.382
## 610  11516.420 11256.0710 11776.770
## 611   5436.861  5277.5382  5596.184
## 612   9178.128  8988.3401  9367.916
## 613   4969.203  4803.2757  5135.129
## 614   3098.569  2889.1620  3307.976
## 615   4969.203  4803.2757  5135.129
## 616   1227.935   958.6119  1497.259
## 617  14790.029 14409.6281 15170.430
## 618   5904.519  5749.5724  6059.466
## 619   4033.886  3849.0995  4218.672
## 620   5436.861  5277.5382  5596.184
## 621   4033.886  3849.0995  4218.672
## 622   9645.787  9443.7311  9847.842
## 623   4969.203  4803.2757  5135.129
## 624   5904.519  5749.5724  6059.466
## 625  17595.980 17105.2892 18086.670
## 626   9645.787  9443.7311  9847.842
## 627   5436.861  5277.5382  5596.184
## 628  15725.346 15308.6471 16142.045
## 629   5436.861  5277.5382  5596.184
## 630   4033.886  3849.0995  4218.672
## 631   3098.569  2889.1620  3307.976
## 632   5904.519  5749.5724  6059.466
## 633   4969.203  4803.2757  5135.129
## 634   4033.886  3849.0995  4218.672
## 635   3566.227  3369.7274  3762.727
## 636   9178.128  8988.3401  9367.916
## 637   5904.519  5749.5724  6059.466
## 638   3098.569  2889.1620  3307.976
## 639   3566.227  3369.7274  3762.727
## 640   4501.544  4327.0378  4676.051
## 641   4033.886  3849.0995  4218.672
## 642   5904.519  5749.5724  6059.466
## 643   2630.911  2407.6101  2854.211
## 644   9178.128  8988.3401  9367.916
## 645   4969.203  4803.2757  5135.129
## 646   3566.227  3369.7274  3762.727
## 647  14322.371 13959.8826 14684.859
## 648   8710.470  8531.6253  8889.314
## 649   5904.519  5749.5724  6059.466
## 650  16660.663 16207.1631 17114.163
## 651   6839.836  6686.2900  6993.382
## 652   4969.203  4803.2757  5135.129
## 653   5904.519  5749.5724  6059.466
## 654  15725.346 15308.6471 16142.045
## 655   7307.495  7150.9075  7464.082
## 656   4501.544  4327.0378  4676.051
## 657   1695.594  1442.2067  1948.981
## 658   4969.203  4803.2757  5135.129
## 659   4969.203  4803.2757  5135.129
## 660   3098.569  2889.1620  3307.976
## 661   2630.911  2407.6101  2854.211
## 662   3098.569  2889.1620  3307.976
## 663   2163.252  1925.2445  2401.260
## 664   1695.594  1442.2067  1948.981
## 665   9178.128  8988.3401  9367.916
## 666   2630.911  2407.6101  2854.211
## 667   3098.569  2889.1620  3307.976
## 668   5904.519  5749.5724  6059.466
## 669   4033.886  3849.0995  4218.672
## 670   4969.203  4803.2757  5135.129
## 671   1695.594  1442.2067  1948.981
## 672   1695.594  1442.2067  1948.981
## 673   5904.519  5749.5724  6059.466
## 674   4033.886  3849.0995  4218.672
## 675  12451.737 12158.6569 12744.817
## 676   7307.495  7150.9075  7464.082
## 677   5904.519  5749.5724  6059.466
## 678  14790.029 14409.6281 15170.430
## 679   7307.495  7150.9075  7464.082
## 680   5436.861  5277.5382  5596.184
## 681   4969.203  4803.2757  5135.129
## 682   8242.811  8073.3299  8412.293
## 683   3566.227  3369.7274  3762.727
## 684   1695.594  1442.2067  1948.981
## 685   6372.178  6219.1872  6525.168
## 686   4501.544  4327.0378  4676.051
## 687  10581.104 10351.4112 10810.796
## 688   8710.470  8531.6253  8889.314
## 689   1695.594  1442.2067  1948.981
## 690   1695.594  1442.2067  1948.981
## 691   5904.519  5749.5724  6059.466
## 692   2630.911  2407.6101  2854.211
## 693   4969.203  4803.2757  5135.129
## 694   8710.470  8531.6253  8889.314
## 695   4033.886  3849.0995  4218.672
## 696   9178.128  8988.3401  9367.916
## 697   5436.861  5277.5382  5596.184
## 698   2630.911  2407.6101  2854.211
## 699   3566.227  3369.7274  3762.727
## 700  13387.054 13059.7906 13714.317
## 701   4501.544  4327.0378  4676.051
## 702  11516.420 11256.0710 11776.770
## 703   5904.519  5749.5724  6059.466
## 704   4033.886  3849.0995  4218.672
## 705   6839.836  6686.2900  6993.382
## 706   5436.861  5277.5382  5596.184
## 707  11516.420 11256.0710 11776.770
## 708  10581.104 10351.4112 10810.796
## 709   6839.836  6686.2900  6993.382
## 710   3098.569  2889.1620  3307.976
## 711   5904.519  5749.5724  6059.466
## 712   2630.911  2407.6101  2854.211
## 713   3566.227  3369.7274  3762.727
## 714   4969.203  4803.2757  5135.129
## 715  16193.004 15757.9600 16628.049
## 716   4033.886  3849.0995  4218.672
## 717  11048.762 10804.0503 11293.474
## 718   3098.569  2889.1620  3307.976
## 719   5436.861  5277.5382  5596.184
## 720   5436.861  5277.5382  5596.184
## 721   4501.544  4327.0378  4676.051
## 722  11516.420 11256.0710 11776.770
## 723   2630.911  2407.6101  2854.211
## 724   7307.495  7150.9075  7464.082
## 725   3566.227  3369.7274  3762.727
## 726   3566.227  3369.7274  3762.727
## 727   3098.569  2889.1620  3307.976
## 728   1227.935   958.6119  1497.259
## 729  11516.420 11256.0710 11776.770
## 730   8710.470  8531.6253  8889.314
## 731   5436.861  5277.5382  5596.184
## 732   1695.594  1442.2067  1948.981
## 733   3098.569  2889.1620  3307.976
## 734   4969.203  4803.2757  5135.129
## 735   3098.569  2889.1620  3307.976
## 736  10113.445  9898.0243 10328.866
## 737  13854.712 13509.9471 14199.478
## 738   4969.203  4803.2757  5135.129
## 739  11048.762 10804.0503 11293.474
## 740   3098.569  2889.1620  3307.976
## 741   2630.911  2407.6101  2854.211
## 742  11048.762 10804.0503 11293.474
## 743   4969.203  4803.2757  5135.129
## 744  15257.688 14859.2091 15656.166
## 745   8242.811  8073.3299  8412.293
## 746   9178.128  8988.3401  9367.916
## 747  11048.762 10804.0503 11293.474
## 748  10113.445  9898.0243 10328.866
## 749   4501.544  4327.0378  4676.051
## 750  16660.663 16207.1631 17114.163
## 751  11984.079 11707.5783 12260.579
## 752  10113.445  9898.0243 10328.866
## 753   9645.787  9443.7311  9847.842
## 754  11048.762 10804.0503 11293.474
## 755   2630.911  2407.6101  2854.211
## 756  13387.054 13059.7906 13714.317
## 757   5904.519  5749.5724  6059.466
## 758   8710.470  8531.6253  8889.314
## 759   7775.153  7613.1796  7937.126
## 760   4033.886  3849.0995  4218.672
## 761  15257.688 14859.2091 15656.166
## 762   5436.861  5277.5382  5596.184
## 763   4033.886  3849.0995  4218.672
## 764   1695.594  1442.2067  1948.981
## 765   1695.594  1442.2067  1948.981
## 766   4969.203  4803.2757  5135.129
## 767  14790.029 14409.6281 15170.430
## 768   4969.203  4803.2757  5135.129
## 769   4969.203  4803.2757  5135.129
## 770   3566.227  3369.7274  3762.727
## 771  11984.079 11707.5783 12260.579
## 772   7307.495  7150.9075  7464.082
## 773   9645.787  9443.7311  9847.842
## 774   8242.811  8073.3299  8412.293
## 775  15725.346 15308.6471 16142.045
## 776   9645.787  9443.7311  9847.842
## 777   2163.252  1925.2445  2401.260
## 778   1695.594  1442.2067  1948.981
## 779  10113.445  9898.0243 10328.866
## 780   9645.787  9443.7311  9847.842
## 781   5904.519  5749.5724  6059.466
## 782   4033.886  3849.0995  4218.672
## 783   4501.544  4327.0378  4676.051
## 784   5904.519  5749.5724  6059.466
## 785  10581.104 10351.4112 10810.796
## 786   7775.153  7613.1796  7937.126
## 787   2630.911  2407.6101  2854.211
## 788  11984.079 11707.5783 12260.579
## 789   5904.519  5749.5724  6059.466
## 790  12451.737 12158.6569 12744.817
## 791   5436.861  5277.5382  5596.184
## 792   5436.861  5277.5382  5596.184
## 793   7775.153  7613.1796  7937.126
## 794   3098.569  2889.1620  3307.976
## 795   4501.544  4327.0378  4676.051
## 796   4969.203  4803.2757  5135.129
## 797   4501.544  4327.0378  4676.051
## 798   1695.594  1442.2067  1948.981
## 799   3566.227  3369.7274  3762.727
## 800  11984.079 11707.5783 12260.579
## 801   1695.594  1442.2067  1948.981
## 802   3566.227  3369.7274  3762.727
## 803   3098.569  2889.1620  3307.976
## 804   4033.886  3849.0995  4218.672
## 805  13854.712 13509.9471 14199.478
## 806   8242.811  8073.3299  8412.293
## 807   9645.787  9443.7311  9847.842
## 808   5436.861  5277.5382  5596.184
## 809   6372.178  6219.1872  6525.168
## 810   5904.519  5749.5724  6059.466
## 811  11984.079 11707.5783 12260.579
## 812   5904.519  5749.5724  6059.466
## 813   9645.787  9443.7311  9847.842
## 814  11048.762 10804.0503 11293.474
## 815  11048.762 10804.0503 11293.474
## 816   2163.252  1925.2445  2401.260
## 817   5436.861  5277.5382  5596.184
## 818   9645.787  9443.7311  9847.842
## 819   2630.911  2407.6101  2854.211
## 820   4033.886  3849.0995  4218.672
## 821   3566.227  3369.7274  3762.727
## 822  11516.420 11256.0710 11776.770
## 823   3566.227  3369.7274  3762.727
## 824   4969.203  4803.2757  5135.129
## 825   8710.470  8531.6253  8889.314
## 826   5904.519  5749.5724  6059.466
## 827   4501.544  4327.0378  4676.051
## 828   2630.911  2407.6101  2854.211
## 829   1227.935   958.6119  1497.259
## 830   4033.886  3849.0995  4218.672
## 831   4033.886  3849.0995  4218.672
## 832   2163.252  1925.2445  2401.260
## 833   5436.861  5277.5382  5596.184
## 834   3098.569  2889.1620  3307.976
## 835   4033.886  3849.0995  4218.672
## 836   4033.886  3849.0995  4218.672
## 837   6372.178  6219.1872  6525.168
## 838  10581.104 10351.4112 10810.796
## 839  11516.420 11256.0710 11776.770
## 840   5436.861  5277.5382  5596.184
## 841   5904.519  5749.5724  6059.466
## 842   4033.886  3849.0995  4218.672
## 843   1695.594  1442.2067  1948.981
## 844   4969.203  4803.2757  5135.129
## 845   5904.519  5749.5724  6059.466
## 846   8710.470  8531.6253  8889.314
## 847   8242.811  8073.3299  8412.293
## 848   7775.153  7613.1796  7937.126
## 849   2163.252  1925.2445  2401.260
## 850   4501.544  4327.0378  4676.051
## 851   1695.594  1442.2067  1948.981
## 852  14322.371 13959.8826 14684.859
## 853   5904.519  5749.5724  6059.466
## 854   1695.594  1442.2067  1948.981
## 855   4501.544  4327.0378  4676.051
## 856   7775.153  7613.1796  7937.126
## 857   2163.252  1925.2445  2401.260
## 858   4033.886  3849.0995  4218.672
## 859  13387.054 13059.7906 13714.317
## 860   4033.886  3849.0995  4218.672
## 861   1695.594  1442.2067  1948.981
## 862  14322.371 13959.8826 14684.859
## 863   4033.886  3849.0995  4218.672
## 864   3566.227  3369.7274  3762.727
## 865   3566.227  3369.7274  3762.727
## 866   4969.203  4803.2757  5135.129
## 867   3566.227  3369.7274  3762.727
## 868  16193.004 15757.9600 16628.049
## 869   4033.886  3849.0995  4218.672
## 870  12919.396 12609.3757 13229.415
## 871   8242.811  8073.3299  8412.293
## 872   1695.594  1442.2067  1948.981
## 873   5904.519  5749.5724  6059.466
## 874   4501.544  4327.0378  4676.051
## 875   5904.519  5749.5724  6059.466
## 876  10581.104 10351.4112 10810.796
## 877   2163.252  1925.2445  2401.260
## 878   6839.836  6686.2900  6993.382
## 879   5904.519  5749.5724  6059.466
## 880   6839.836  6686.2900  6993.382
## 881   2163.252  1925.2445  2401.260
## 882   5904.519  5749.5724  6059.466
## 883   9178.128  8988.3401  9367.916
## 884   8242.811  8073.3299  8412.293
## 885   4501.544  4327.0378  4676.051
## 886   3566.227  3369.7274  3762.727
## 887   6839.836  6686.2900  6993.382
## 888  10581.104 10351.4112 10810.796
## 889   8710.470  8531.6253  8889.314
## 890   5436.861  5277.5382  5596.184
## 891  16660.663 16207.1631 17114.163
## 892   5904.519  5749.5724  6059.466
## 893   1695.594  1442.2067  1948.981
## 894   2630.911  2407.6101  2854.211
## 895  18063.638 17554.2327 18573.043
## 896   4033.886  3849.0995  4218.672
## 897   5904.519  5749.5724  6059.466
## 898   7307.495  7150.9075  7464.082
## 899  12919.396 12609.3757 13229.415
## 900  11984.079 11707.5783 12260.579
## 901   6839.836  6686.2900  6993.382
## 902   4501.544  4327.0378  4676.051
## 903   3566.227  3369.7274  3762.727
## 904   4033.886  3849.0995  4218.672
## 905  12919.396 12609.3757 13229.415
## 906   5436.861  5277.5382  5596.184
## 907   2163.252  1925.2445  2401.260
## 908  13387.054 13059.7906 13714.317
## 909   5904.519  5749.5724  6059.466
## 910   1695.594  1442.2067  1948.981
## 911   1695.594  1442.2067  1948.981
## 912   1695.594  1442.2067  1948.981
## 913   4969.203  4803.2757  5135.129
## 914  13387.054 13059.7906 13714.317
## 915  17128.321 16656.2692 17600.373
## 916   2163.252  1925.2445  2401.260
## 917  13387.054 13059.7906 13714.317
## 918   3098.569  2889.1620  3307.976
## 919  15725.346 15308.6471 16142.045
## 920  12919.396 12609.3757 13229.415
## 921   8242.811  8073.3299  8412.293
## 922   3566.227  3369.7274  3762.727
## 923  13387.054 13059.7906 13714.317
## 924   7775.153  7613.1796  7937.126
## 925   3098.569  2889.1620  3307.976
## 926   9645.787  9443.7311  9847.842
## 927  11984.079 11707.5783 12260.579
## 928   9645.787  9443.7311  9847.842
## 929   5904.519  5749.5724  6059.466
## 930   2163.252  1925.2445  2401.260
## 931   4969.203  4803.2757  5135.129
## 932   5904.519  5749.5724  6059.466
## 933   5904.519  5749.5724  6059.466
## 934   3566.227  3369.7274  3762.727
## 935   2163.252  1925.2445  2401.260
## 936   5904.519  5749.5724  6059.466
## 937  11516.420 11256.0710 11776.770
## 938  11048.762 10804.0503 11293.474
## 939   2163.252  1925.2445  2401.260
## 940   5904.519  5749.5724  6059.466
## 941   4033.886  3849.0995  4218.672
## 942   5904.519  5749.5724  6059.466
## 943   5904.519  5749.5724  6059.466
## 944   5904.519  5749.5724  6059.466
## 945   5904.519  5749.5724  6059.466
## 946  12919.396 12609.3757 13229.415
## 947   5436.861  5277.5382  5596.184
## 948   5904.519  5749.5724  6059.466
## 949   5436.861  5277.5382  5596.184
## 950   5436.861  5277.5382  5596.184
## 951   5904.519  5749.5724  6059.466
## 952  10113.445  9898.0243 10328.866
## 953   2630.911  2407.6101  2854.211
## 954   5904.519  5749.5724  6059.466
## 955  11048.762 10804.0503 11293.474
## 956  11984.079 11707.5783 12260.579
## 957  18063.638 17554.2327 18573.043
## 958   4033.886  3849.0995  4218.672
## 959   5904.519  5749.5724  6059.466
## 960   5436.861  5277.5382  5596.184
## 961   5904.519  5749.5724  6059.466
## 962   5436.861  5277.5382  5596.184
## 963  16660.663 16207.1631 17114.163
## 964   6372.178  6219.1872  6525.168
## 965   5904.519  5749.5724  6059.466
## 966   4501.544  4327.0378  4676.051
## 967  15725.346 15308.6471 16142.045
## 968   4501.544  4327.0378  4676.051
## 969   9178.128  8988.3401  9367.916
## 970   6372.178  6219.1872  6525.168
## 971   3566.227  3369.7274  3762.727
## 972  14790.029 14409.6281 15170.430
## 973   1227.935   958.6119  1497.259
## 974   5904.519  5749.5724  6059.466
## 975   4969.203  4803.2757  5135.129
## 976  12451.737 12158.6569 12744.817
## 977  16660.663 16207.1631 17114.163
## 978   3566.227  3369.7274  3762.727
## 979   8242.811  8073.3299  8412.293
## 980   5904.519  5749.5724  6059.466
## 981   2630.911  2407.6101  2854.211
## 982   3566.227  3369.7274  3762.727
## 983   3098.569  2889.1620  3307.976
## 984   7775.153  7613.1796  7937.126
## 985   3566.227  3369.7274  3762.727
## 986   5904.519  5749.5724  6059.466
## 987   4969.203  4803.2757  5135.129
## 988   7775.153  7613.1796  7937.126
## 989   6839.836  6686.2900  6993.382
## 990   4969.203  4803.2757  5135.129
## 991   4969.203  4803.2757  5135.129
## 992   3098.569  2889.1620  3307.976
## 993   7307.495  7150.9075  7464.082
## 994   4033.886  3849.0995  4218.672
## 995  12451.737 12158.6569 12744.817
## 996  10581.104 10351.4112 10810.796
## 997   4033.886  3849.0995  4218.672
## 998   4969.203  4803.2757  5135.129
## 999   3566.227  3369.7274  3762.727
## 1000 11048.762 10804.0503 11293.474
## 1001  6839.836  6686.2900  6993.382
## 1002  4969.203  4803.2757  5135.129
## 1003  5904.519  5749.5724  6059.466
## 1004  4501.544  4327.0378  4676.051
## 1005  4969.203  4803.2757  5135.129
## 1006  5904.519  5749.5724  6059.466
## 1007 10581.104 10351.4112 10810.796
## 1008  5436.861  5277.5382  5596.184
## 1009 14790.029 14409.6281 15170.430
## 1010 16193.004 15757.9600 16628.049
## 1011 15725.346 15308.6471 16142.045
## 1012  8242.811  8073.3299  8412.293
## 1013  1695.594  1442.2067  1948.981
## 1014  4969.203  4803.2757  5135.129
## 1015  5436.861  5277.5382  5596.184
## 1016  5904.519  5749.5724  6059.466
## 1017  1695.594  1442.2067  1948.981
## 1018  4033.886  3849.0995  4218.672
## 1019  5904.519  5749.5724  6059.466
## 1020  6372.178  6219.1872  6525.168
## 1021  9178.128  8988.3401  9367.916
## 1022  4033.886  3849.0995  4218.672
## 1023  4501.544  4327.0378  4676.051
## 1024  3566.227  3369.7274  3762.727
## 1025 13387.054 13059.7906 13714.317
## 1026  3566.227  3369.7274  3762.727
## 1027  4501.544  4327.0378  4676.051
## 1028  4501.544  4327.0378  4676.051
## 1029  4501.544  4327.0378  4676.051
## 1030  6372.178  6219.1872  6525.168
## 1031  7307.495  7150.9075  7464.082
## 1032 14322.371 13959.8826 14684.859
## 1033  6372.178  6219.1872  6525.168
## 1034  5904.519  5749.5724  6059.466
## 1035 12451.737 12158.6569 12744.817
## 1036  4969.203  4803.2757  5135.129
## 1037  4501.544  4327.0378  4676.051
## 1038  5904.519  5749.5724  6059.466
## 1039  8242.811  8073.3299  8412.293
## 1040  2163.252  1925.2445  2401.260
## 1041  8710.470  8531.6253  8889.314
## 1042  4033.886  3849.0995  4218.672
## 1043  4501.544  4327.0378  4676.051
## 1044 17595.980 17105.2892 18086.670
## 1045 10581.104 10351.4112 10810.796
## 1046  4969.203  4803.2757  5135.129
## 1047  4033.886  3849.0995  4218.672
## 1048  3566.227  3369.7274  3762.727
## 1049  8242.811  8073.3299  8412.293
## 1050  3098.569  2889.1620  3307.976
## 1051  6839.836  6686.2900  6993.382
## 1052  6372.178  6219.1872  6525.168
## 1053  1695.594  1442.2067  1948.981
## 1054  7307.495  7150.9075  7464.082
## 1055 14790.029 14409.6281 15170.430
## 1056  8710.470  8531.6253  8889.314
## 1057  3566.227  3369.7274  3762.727
## 1058  4501.544  4327.0378  4676.051
## 1059  8710.470  8531.6253  8889.314
## 1060  1695.594  1442.2067  1948.981
## 1061  3098.569  2889.1620  3307.976
## 1062  1695.594  1442.2067  1948.981
## 1063  8710.470  8531.6253  8889.314
## 1064  5904.519  5749.5724  6059.466
## 1065  4033.886  3849.0995  4218.672
## 1066  3098.569  2889.1620  3307.976
## 1067  4969.203  4803.2757  5135.129
## 1068  6372.178  6219.1872  6525.168
## 1069  4969.203  4803.2757  5135.129
## 1070  1695.594  1442.2067  1948.981
## 1071  3566.227  3369.7274  3762.727
## 1072  5904.519  5749.5724  6059.466
## 1073  3098.569  2889.1620  3307.976
## 1074  4969.203  4803.2757  5135.129
## 1075  7775.153  7613.1796  7937.126
## 1076  5904.519  5749.5724  6059.466
## 1077 13387.054 13059.7906 13714.317
## 1078  6372.178  6219.1872  6525.168
## 1079 12451.737 12158.6569 12744.817
## 1080  5436.861  5277.5382  5596.184
## 1081 11984.079 11707.5783 12260.579
## 1082  6372.178  6219.1872  6525.168
## 1083  3566.227  3369.7274  3762.727
## 1084  8242.811  8073.3299  8412.293
## 1085  5904.519  5749.5724  6059.466
## 1086  4501.544  4327.0378  4676.051
## 1087 16193.004 15757.9600 16628.049
## 1088  6839.836  6686.2900  6993.382
## 1089  3098.569  2889.1620  3307.976
## 1090  5904.519  5749.5724  6059.466
## 1091  5436.861  5277.5382  5596.184
## 1092  3566.227  3369.7274  3762.727
## 1093  4969.203  4803.2757  5135.129
## 1094 12451.737 12158.6569 12744.817
## 1095  5436.861  5277.5382  5596.184
## 1096  8242.811  8073.3299  8412.293
## 1097 11048.762 10804.0503 11293.474
## 1098  2163.252  1925.2445  2401.260
## 1099  4969.203  4803.2757  5135.129
## 1100  5904.519  5749.5724  6059.466
## 1101  4033.886  3849.0995  4218.672
## 1102  6839.836  6686.2900  6993.382
## 1103  4501.544  4327.0378  4676.051
## 1104  9645.787  9443.7311  9847.842
## 1105  3566.227  3369.7274  3762.727
## 1106  4969.203  4803.2757  5135.129
## 1107  5904.519  5749.5724  6059.466
## 1108  5904.519  5749.5724  6059.466
## 1109  2630.911  2407.6101  2854.211
## 1110  5436.861  5277.5382  5596.184
## 1111  1695.594  1442.2067  1948.981
## 1112 17128.321 16656.2692 17600.373
## 1113  4501.544  4327.0378  4676.051
## 1114  5436.861  5277.5382  5596.184
## 1115  5904.519  5749.5724  6059.466
## 1116  1695.594  1442.2067  1948.981
## 1117 18063.638 17554.2327 18573.043
## 1118  5436.861  5277.5382  5596.184
## 1119  1695.594  1442.2067  1948.981
## 1120  5904.519  5749.5724  6059.466
## 1121  4969.203  4803.2757  5135.129
## 1122  8242.811  8073.3299  8412.293
## 1123  5904.519  5749.5724  6059.466
## 1124  5904.519  5749.5724  6059.466
## 1125  6372.178  6219.1872  6525.168
## 1126  4033.886  3849.0995  4218.672
## 1127 13854.712 13509.9471 14199.478
## 1128  3098.569  2889.1620  3307.976
## 1129  5436.861  5277.5382  5596.184
## 1130 12451.737 12158.6569 12744.817
## 1131  5904.519  5749.5724  6059.466
## 1132  4969.203  4803.2757  5135.129
## 1133  3566.227  3369.7274  3762.727
## 1134  4969.203  4803.2757  5135.129
## 1135  1695.594  1442.2067  1948.981
## 1136 13854.712 13509.9471 14199.478
## 1137  1695.594  1442.2067  1948.981
## 1138  3098.569  2889.1620  3307.976
## 1139 16193.004 15757.9600 16628.049
## 1140  4033.886  3849.0995  4218.672
## 1141 11984.079 11707.5783 12260.579
## 1142  4033.886  3849.0995  4218.672
## 1143  5904.519  5749.5724  6059.466
## 1144  5904.519  5749.5724  6059.466
## 1145  5904.519  5749.5724  6059.466
## 1146  4501.544  4327.0378  4676.051
## 1147  5436.861  5277.5382  5596.184
## 1148  5904.519  5749.5724  6059.466
## 1149  5904.519  5749.5724  6059.466
## 1150  4501.544  4327.0378  4676.051
## 1151  8710.470  8531.6253  8889.314
## 1152  4033.886  3849.0995  4218.672
## 1153  2630.911  2407.6101  2854.211
## 1154  1227.935   958.6119  1497.259
## 1155 13854.712 13509.9471 14199.478
## 1156  6372.178  6219.1872  6525.168
## 1157  9645.787  9443.7311  9847.842
## 1158  8242.811  8073.3299  8412.293
## 1159  5436.861  5277.5382  5596.184
## 1160  5904.519  5749.5724  6059.466
## 1161  5904.519  5749.5724  6059.466
## 1162  5904.519  5749.5724  6059.466
## 1163  8242.811  8073.3299  8412.293
## 1164  4969.203  4803.2757  5135.129
## 1165  9645.787  9443.7311  9847.842
## 1166  7775.153  7613.1796  7937.126
## 1167 11984.079 11707.5783 12260.579
## 1168  4501.544  4327.0378  4676.051
## 1169  4033.886  3849.0995  4218.672
## 1170  3566.227  3369.7274  3762.727
## 1171  4033.886  3849.0995  4218.672
## 1172  5904.519  5749.5724  6059.466
## 1173  4969.203  4803.2757  5135.129
## 1174  5436.861  5277.5382  5596.184
## 1175  4501.544  4327.0378  4676.051
## 1176  4501.544  4327.0378  4676.051
## 1177 13854.712 13509.9471 14199.478
## 1178 10113.445  9898.0243 10328.866
## 1179  2163.252  1925.2445  2401.260
## 1180  6372.178  6219.1872  6525.168
## 1181  8242.811  8073.3299  8412.293
## 1182 15257.688 14859.2091 15656.166
## 1183  3098.569  2889.1620  3307.976
## 1184  7307.495  7150.9075  7464.082
## 1185 18063.638 17554.2327 18573.043
## 1186  7775.153  7613.1796  7937.126
## 1187  7307.495  7150.9075  7464.082
## 1188 10113.445  9898.0243 10328.866
## 1189  5904.519  5749.5724  6059.466
## 1190  4033.886  3849.0995  4218.672
## 1191  5904.519  5749.5724  6059.466
## 1192  5904.519  5749.5724  6059.466
## 1193  9178.128  8988.3401  9367.916
## 1194  3098.569  2889.1620  3307.976
## 1195 14790.029 14409.6281 15170.430
## 1196 11984.079 11707.5783 12260.579
## 1197 11048.762 10804.0503 11293.474
## 1198  2163.252  1925.2445  2401.260
## 1199  4501.544  4327.0378  4676.051
## 1200  5904.519  5749.5724  6059.466
## 1201  4969.203  4803.2757  5135.129
## 1202  3566.227  3369.7274  3762.727
## 1203  4501.544  4327.0378  4676.051
## 1204  6372.178  6219.1872  6525.168
## 1205 10113.445  9898.0243 10328.866
## 1206  1695.594  1442.2067  1948.981
## 1207  4501.544  4327.0378  4676.051
## 1208  4969.203  4803.2757  5135.129
## 1209  8242.811  8073.3299  8412.293
## 1210 10113.445  9898.0243 10328.866
## 1211  7775.153  7613.1796  7937.126
## 1212  4033.886  3849.0995  4218.672
## 1213  5904.519  5749.5724  6059.466
## 1214  2630.911  2407.6101  2854.211
## 1215  5436.861  5277.5382  5596.184
## 1216  4033.886  3849.0995  4218.672
## 1217  5904.519  5749.5724  6059.466
## 1218  3566.227  3369.7274  3762.727
## 1219  5904.519  5749.5724  6059.466
## 1220  5436.861  5277.5382  5596.184
## 1221  9178.128  8988.3401  9367.916
## 1222 12919.396 12609.3757 13229.415
## 1223  1695.594  1442.2067  1948.981
## 1224 12919.396 12609.3757 13229.415
## 1225  2630.911  2407.6101  2854.211
## 1226 11048.762 10804.0503 11293.474
## 1227  5904.519  5749.5724  6059.466
## 1228  4033.886  3849.0995  4218.672
## 1229  5904.519  5749.5724  6059.466
## 1230  9645.787  9443.7311  9847.842
## 1231  4033.886  3849.0995  4218.672
## 1232 10113.445  9898.0243 10328.866
## 1233  9178.128  8988.3401  9367.916
## 1234  5904.519  5749.5724  6059.466
## 1235  3098.569  2889.1620  3307.976
## 1236  7307.495  7150.9075  7464.082
## 1237  8710.470  8531.6253  8889.314
## 1238  5904.519  5749.5724  6059.466
## 1239  2630.911  2407.6101  2854.211
## 1240  5436.861  5277.5382  5596.184
## 1241  5436.861  5277.5382  5596.184
## 1242  5904.519  5749.5724  6059.466
## 1243 11048.762 10804.0503 11293.474
## 1244  5436.861  5277.5382  5596.184
## 1245  5904.519  5749.5724  6059.466
## 1246  2630.911  2407.6101  2854.211
## 1247  4033.886  3849.0995  4218.672
## 1248  4033.886  3849.0995  4218.672
## 1249  4033.886  3849.0995  4218.672
## 1250  2163.252  1925.2445  2401.260
## 1251  5904.519  5749.5724  6059.466
## 1252  6839.836  6686.2900  6993.382
## 1253  4033.886  3849.0995  4218.672
## 1254  7307.495  7150.9075  7464.082
## 1255  4969.203  4803.2757  5135.129
## 1256  6372.178  6219.1872  6525.168
## 1257  5436.861  5277.5382  5596.184
## 1258  5904.519  5749.5724  6059.466
## 1259  1695.594  1442.2067  1948.981
## 1260  5904.519  5749.5724  6059.466
## 1261  6839.836  6686.2900  6993.382
## 1262  8242.811  8073.3299  8412.293
## 1263  4033.886  3849.0995  4218.672
## 1264  4501.544  4327.0378  4676.051
## 1265 17128.321 16656.2692 17600.373
## 1266  6372.178  6219.1872  6525.168
## 1267  3566.227  3369.7274  3762.727
## 1268  8242.811  8073.3299  8412.293
## 1269 13854.712 13509.9471 14199.478
## 1270  5904.519  5749.5724  6059.466
## 1271  4033.886  3849.0995  4218.672
## 1272  1695.594  1442.2067  1948.981
## 1273  3566.227  3369.7274  3762.727
## 1274  1695.594  1442.2067  1948.981
## 1275  7307.495  7150.9075  7464.082
## 1276  8242.811  8073.3299  8412.293
## 1277  3566.227  3369.7274  3762.727
## 1278 12451.737 12158.6569 12744.817
## 1279  8242.811  8073.3299  8412.293
## 1280  4033.886  3849.0995  4218.672
## 1281 10113.445  9898.0243 10328.866
## 1282  5904.519  5749.5724  6059.466
## 1283  7775.153  7613.1796  7937.126
## 1284  3566.227  3369.7274  3762.727
## 1285  5436.861  5277.5382  5596.184
## 1286  4033.886  3849.0995  4218.672
## 1287  4501.544  4327.0378  4676.051
## 1288  5904.519  5749.5724  6059.466
## 1289  8242.811  8073.3299  8412.293
## 1290  7307.495  7150.9075  7464.082
## 1291  6372.178  6219.1872  6525.168
## 1292  5904.519  5749.5724  6059.466
## 1293  4501.544  4327.0378  4676.051
## 1294  4501.544  4327.0378  4676.051
## 1295  6372.178  6219.1872  6525.168
## 1296 11984.079 11707.5783 12260.579
## 1297  5436.861  5277.5382  5596.184
## 1298  4033.886  3849.0995  4218.672
## 1299  7307.495  7150.9075  7464.082
## 1300  6839.836  6686.2900  6993.382
## 1301  5904.519  5749.5724  6059.466
## 1302 18531.297 18003.1078 19059.485
## 1303  4033.886  3849.0995  4218.672
## 1304 14322.371 13959.8826 14684.859
## 1305  8242.811  8073.3299  8412.293
## 1306  7775.153  7613.1796  7937.126
## 1307  5436.861  5277.5382  5596.184
## 1308  2630.911  2407.6101  2854.211
## 1309 10581.104 10351.4112 10810.796
## 1310  3566.227  3369.7274  3762.727
## 1311 11984.079 11707.5783 12260.579
## 1312  1227.935   958.6119  1497.259
## 1313  2163.252  1925.2445  2401.260
## 1314  3098.569  2889.1620  3307.976
## 1315  5904.519  5749.5724  6059.466
## 1316  8242.811  8073.3299  8412.293
## 1317  4501.544  4327.0378  4676.051
## 1318  4033.886  3849.0995  4218.672
## 1319  6372.178  6219.1872  6525.168
## 1320  3098.569  2889.1620  3307.976
## 1321  5904.519  5749.5724  6059.466
## 1322  4501.544  4327.0378  4676.051
## 1323  6839.836  6686.2900  6993.382
## 1324  2630.911  2407.6101  2854.211
## 1325  6372.178  6219.1872  6525.168
## 1326  4969.203  4803.2757  5135.129
## 1327  4501.544  4327.0378  4676.051
## 1328 12919.396 12609.3757 13229.415
## 1329  5436.861  5277.5382  5596.184
## 1330  1695.594  1442.2067  1948.981
## 1331 11048.762 10804.0503 11293.474
## 1332 14790.029 14409.6281 15170.430
## 1333  1695.594  1442.2067  1948.981
## 1334  7775.153  7613.1796  7937.126
## 1335  4969.203  4803.2757  5135.129
## 1336  4501.544  4327.0378  4676.051
## 1337 10113.445  9898.0243 10328.866
## 1338  1695.594  1442.2067  1948.981
## 1339  1695.594  1442.2067  1948.981
## 1340  1695.594  1442.2067  1948.981
## 1341  5904.519  5749.5724  6059.466
## 1342  5904.519  5749.5724  6059.466
## 1343  5436.861  5277.5382  5596.184
## 1344  6372.178  6219.1872  6525.168
## 1345  8710.470  8531.6253  8889.314
## 1346  3098.569  2889.1620  3307.976
## 1347  5904.519  5749.5724  6059.466
## 1348  5904.519  5749.5724  6059.466
## 1349 11516.420 11256.0710 11776.770
## 1350  1695.594  1442.2067  1948.981
## 1351  5436.861  5277.5382  5596.184
## 1352 12451.737 12158.6569 12744.817
## 1353  5904.519  5749.5724  6059.466
## 1354  3566.227  3369.7274  3762.727
## 1355  3566.227  3369.7274  3762.727
## 1356  6839.836  6686.2900  6993.382
## 1357  7775.153  7613.1796  7937.126
## 1358  9645.787  9443.7311  9847.842
## 1359  4969.203  4803.2757  5135.129
## 1360  5436.861  5277.5382  5596.184
## 1361  3098.569  2889.1620  3307.976
## 1362  4969.203  4803.2757  5135.129
## 1363  6839.836  6686.2900  6993.382
## 1364  5904.519  5749.5724  6059.466
## 1365  4501.544  4327.0378  4676.051
## 1366  1695.594  1442.2067  1948.981
## 1367  5904.519  5749.5724  6059.466
## 1368  4033.886  3849.0995  4218.672
## 1369  8710.470  8531.6253  8889.314
## 1370  4033.886  3849.0995  4218.672
## 1371  8710.470  8531.6253  8889.314
## 1372  4033.886  3849.0995  4218.672
## 1373  5904.519  5749.5724  6059.466
## 1374 10581.104 10351.4112 10810.796
## 1375 14790.029 14409.6281 15170.430
## 1376  4969.203  4803.2757  5135.129
## 1377  5904.519  5749.5724  6059.466
## 1378 14322.371 13959.8826 14684.859
## 1379  7775.153  7613.1796  7937.126
## 1380  1695.594  1442.2067  1948.981
## 1381  4033.886  3849.0995  4218.672
## 1382  3566.227  3369.7274  3762.727
## 1383  3098.569  2889.1620  3307.976
## 1384  3566.227  3369.7274  3762.727
## 1385  7775.153  7613.1796  7937.126
## 1386  5436.861  5277.5382  5596.184
## 1387  4969.203  4803.2757  5135.129
## 1388  4033.886  3849.0995  4218.672
## 1389  5436.861  5277.5382  5596.184
## 1390  5904.519  5749.5724  6059.466
## 1391  4033.886  3849.0995  4218.672
## 1392 10581.104 10351.4112 10810.796
## 1393  5904.519  5749.5724  6059.466
## 1394  4501.544  4327.0378  4676.051
## 1395  4969.203  4803.2757  5135.129
## 1396  5904.519  5749.5724  6059.466
## 1397  8242.811  8073.3299  8412.293
## 1398  5436.861  5277.5382  5596.184
## 1399  5436.861  5277.5382  5596.184
## 1400  5904.519  5749.5724  6059.466
## 1401  4501.544  4327.0378  4676.051
## 1402 17595.980 17105.2892 18086.670
## 1403  1695.594  1442.2067  1948.981
## 1404 11048.762 10804.0503 11293.474
## 1405 10581.104 10351.4112 10810.796
## 1406  7307.495  7150.9075  7464.082
## 1407  5436.861  5277.5382  5596.184
## 1408  3098.569  2889.1620  3307.976
## 1409  3566.227  3369.7274  3762.727
## 1410  5904.519  5749.5724  6059.466
## 1411  8242.811  8073.3299  8412.293
## 1412  4033.886  3849.0995  4218.672
## 1413  6839.836  6686.2900  6993.382
## 1414  4501.544  4327.0378  4676.051
## 1415 12919.396 12609.3757 13229.415
## 1416  1695.594  1442.2067  1948.981
## 1417  8710.470  8531.6253  8889.314
## 1418  2630.911  2407.6101  2854.211
## 1419  5904.519  5749.5724  6059.466
## 1420  5436.861  5277.5382  5596.184
## 1421  6839.836  6686.2900  6993.382
## 1422  7775.153  7613.1796  7937.126
## 1423  3566.227  3369.7274  3762.727
## 1424  3098.569  2889.1620  3307.976
## 1425  5904.519  5749.5724  6059.466
## 1426  5904.519  5749.5724  6059.466
## 1427  4033.886  3849.0995  4218.672
## 1428  4969.203  4803.2757  5135.129
## 1429  2630.911  2407.6101  2854.211
## 1430  9645.787  9443.7311  9847.842
## 1431 10581.104 10351.4112 10810.796
## 1432  7775.153  7613.1796  7937.126
## 1433  8710.470  8531.6253  8889.314
## 1434  4033.886  3849.0995  4218.672
## 1435  8710.470  8531.6253  8889.314
## 1436  4033.886  3849.0995  4218.672
## 1437  2163.252  1925.2445  2401.260
## 1438 11048.762 10804.0503 11293.474
## 1439  1695.594  1442.2067  1948.981
## 1440  5904.519  5749.5724  6059.466
## 1441  9645.787  9443.7311  9847.842
## 1442  7307.495  7150.9075  7464.082
## 1443  3098.569  2889.1620  3307.976
## 1444 12451.737 12158.6569 12744.817
## 1445  7775.153  7613.1796  7937.126
## 1446 11048.762 10804.0503 11293.474
## 1447  4969.203  4803.2757  5135.129
## 1448  8242.811  8073.3299  8412.293
## 1449  7775.153  7613.1796  7937.126
## 1450  3098.569  2889.1620  3307.976
## 1451  5436.861  5277.5382  5596.184
## 1452  5904.519  5749.5724  6059.466
## 1453  6839.836  6686.2900  6993.382
## 1454  4969.203  4803.2757  5135.129
## 1455  4969.203  4803.2757  5135.129
## 1456  4969.203  4803.2757  5135.129
## 1457  5904.519  5749.5724  6059.466
## 1458 10581.104 10351.4112 10810.796
## 1459  3098.569  2889.1620  3307.976
## 1460  5904.519  5749.5724  6059.466
## 1461  3566.227  3369.7274  3762.727
## 1462 10581.104 10351.4112 10810.796
## 1463 11048.762 10804.0503 11293.474
## 1464  5904.519  5749.5724  6059.466
## 1465  3566.227  3369.7274  3762.727
## 1466  9178.128  8988.3401  9367.916
## 1467  5436.861  5277.5382  5596.184
## 1468  4033.886  3849.0995  4218.672
## 1469  9178.128  8988.3401  9367.916
## 1470  4033.886  3849.0995  4218.672

El modelo de regresión lineal simple permitió evidenciar la relación existente entre el ingreso mensual y los años de experiencia laboral. El análisis estadístico y gráfico confirmó la utilidad del modelo para describir y predecir el comportamiento de la variable respuesta. Los intervalos de confianza y de predicción aportaron información adicional sobre la precisión de las estimaciones, reforzando la validez del modelo planteado.

5.3. Regresión Lineal Múltiple

En esta sección se desarrolla el análisis de regresión lineal múltiple, considerando tanto variables cuantitativas como cualitativas. Inicialmente se realiza un análisis descriptivo de las variables y diagramas de dispersión para las variables cuantitativas. Posteriormente, se formula el modelo de regresión lineal múltiple, evaluando el modelo total y un modelo reducido mediante el análisis de varianza y el estudio de los coeficientes.

Resumen Variables Cuantitativas

summary(desercion_empleados_IBM_ETL$Age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   18.00   30.00   36.00   36.92   43.00   60.00
summary(desercion_empleados_IBM_ETL$MonthlyIncome)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1009    2911    4919    6503    8379   19999
summary(desercion_empleados_IBM_ETL$DistanceFromHome)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   1.000   2.000   7.000   9.193  14.000  29.000
summary(desercion_empleados_IBM_ETL$TotalWorkingYears)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    6.00   10.00   11.28   15.00   40.00
summary(desercion_empleados_IBM_ETL$YearsAtCompany)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   3.000   5.000   7.008   9.000  40.000
summary(desercion_empleados_IBM_ETL$YearsSinceLastPromotion)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   0.000   0.000   1.000   2.188   3.000  15.000

Resumen Variables Cualitativas

table(desercion_empleados_IBM_ETL$WorkLifeBalance)
## 
##   1   2   3   4 
##  80 344 893 153
prop.table(table(desercion_empleados_IBM_ETL$WorkLifeBalancet))
## Warning: Unknown or uninitialised column: `WorkLifeBalancet`.
## numeric(0)
barplot(table(desercion_empleados_IBM_ETL$WorkLifeBalance))

table(desercion_empleados_IBM_ETL$BusinessTravel)
## 
##        Non-Travel Travel_Frequently     Travel_Rarely 
##               150               277              1043
prop.table(table(desercion_empleados_IBM_ETL$BusinessTravel))
## 
##        Non-Travel Travel_Frequently     Travel_Rarely 
##         0.1020408         0.1884354         0.7095238
barplot(table(desercion_empleados_IBM_ETL$BusinessTravel))

table(desercion_empleados_IBM_ETL$EducationField)
## 
##  Human Resources    Life Sciences        Marketing          Medical 
##               27              606              159              464 
##            Other Technical Degree 
##               82              132
prop.table(table(desercion_empleados_IBM_ETL$EducationField))
## 
##  Human Resources    Life Sciences        Marketing          Medical 
##       0.01836735       0.41224490       0.10816327       0.31564626 
##            Other Technical Degree 
##       0.05578231       0.08979592
barplot(table(desercion_empleados_IBM_ETL$EducationField))

table(desercion_empleados_IBM_ETL$JobRole)
## 
## Healthcare Representative           Human Resources     Laboratory Technician 
##                       131                        52                       259 
##                   Manager    Manufacturing Director         Research Director 
##                       102                       145                        80 
##        Research Scientist           Sales Executive      Sales Representative 
##                       292                       326                        83
prop.table(table(desercion_empleados_IBM_ETL$JobRole))
## 
## Healthcare Representative           Human Resources     Laboratory Technician 
##                0.08911565                0.03537415                0.17619048 
##                   Manager    Manufacturing Director         Research Director 
##                0.06938776                0.09863946                0.05442177 
##        Research Scientist           Sales Executive      Sales Representative 
##                0.19863946                0.22176871                0.05646259
barplot(table(desercion_empleados_IBM_ETL$JobRole))

table(desercion_empleados_IBM_ETL$MaritalStatus)
## 
## Divorced  Married   Single 
##      327      673      470
prop.table(table(desercion_empleados_IBM_ETL$MaritalStatus))
## 
##  Divorced   Married    Single 
## 0.2224490 0.4578231 0.3197279
barplot(table(desercion_empleados_IBM_ETL$MaritalStatus))

table(desercion_empleados_IBM_ETL$OverTime)
## 
##   No  Yes 
## 1054  416
prop.table(table(desercion_empleados_IBM_ETL$OverTime))
## 
##        No       Yes 
## 0.7170068 0.2829932
barplot(table(desercion_empleados_IBM_ETL$OverTime))

table(desercion_empleados_IBM_ETL$Gender)
## 
## Female   Male 
##    588    882
prop.table(table(desercion_empleados_IBM_ETL$Gender))
## 
## Female   Male 
##    0.4    0.6
barplot(table(desercion_empleados_IBM_ETL$Gender))

table(desercion_empleados_IBM_ETL$JobLevel)
## 
##   1   2   3   4   5 
## 543 534 218 106  69
prop.table(table(desercion_empleados_IBM_ETL$JobLevel))
## 
##          1          2          3          4          5 
## 0.36938776 0.36326531 0.14829932 0.07210884 0.04693878
barplot(table(desercion_empleados_IBM_ETL$JobLevel))

Diagramas de Dispersión Variables Cuantitativas

pairs(~MonthlyIncome + TotalWorkingYears + DistanceFromHome + YearsAtCompany + Age, data = desercion_empleados_IBM_ETL)

Formulación del modelo de RLM entre las variables de estudio.

Resumen y ANOVA del Modelo RLM Total
summary(lm(desercion_empleados_IBM_ETL$MonthlyIncome~desercion_empleados_IBM_ETL$Age+desercion_empleados_IBM_ETL$DistanceFromHome+desercion_empleados_IBM_ETL$TotalWorkingYears+desercion_empleados_IBM_ETL$YearsAtCompany+as.factor(desercion_empleados_IBM_ETL$Gender)+as.factor(desercion_empleados_IBM_ETL$Department)+as.factor(desercion_empleados_IBM_ETL$JobRole)+as.factor(desercion_empleados_IBM_ETL$MaritalStatus)+as.factor(desercion_empleados_IBM_ETL$OverTime)+as.factor(desercion_empleados_IBM_ETL$Attrition)))
## 
## Call:
## lm(formula = desercion_empleados_IBM_ETL$MonthlyIncome ~ desercion_empleados_IBM_ETL$Age + 
##     desercion_empleados_IBM_ETL$DistanceFromHome + desercion_empleados_IBM_ETL$TotalWorkingYears + 
##     desercion_empleados_IBM_ETL$YearsAtCompany + as.factor(desercion_empleados_IBM_ETL$Gender) + 
##     as.factor(desercion_empleados_IBM_ETL$Department) + as.factor(desercion_empleados_IBM_ETL$JobRole) + 
##     as.factor(desercion_empleados_IBM_ETL$MaritalStatus) + as.factor(desercion_empleados_IBM_ETL$OverTime) + 
##     as.factor(desercion_empleados_IBM_ETL$Attrition))
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5488.0 -1114.6   -95.4   965.9  5567.3 
## 
## Coefficients:
##                                                                           Estimate
## (Intercept)                                                              4760.7127
## desercion_empleados_IBM_ETL$Age                                            -6.5757
## desercion_empleados_IBM_ETL$DistanceFromHome                               -0.1109
## desercion_empleados_IBM_ETL$TotalWorkingYears                             195.5898
## desercion_empleados_IBM_ETL$YearsAtCompany                                 19.0682
## as.factor(desercion_empleados_IBM_ETL$Gender)Male                         167.1945
## as.factor(desercion_empleados_IBM_ETL$Department)Research & Development   -61.7069
## as.factor(desercion_empleados_IBM_ETL$Department)Sales                   -678.2870
## as.factor(desercion_empleados_IBM_ETL$JobRole)Human Resources           -2203.1571
## as.factor(desercion_empleados_IBM_ETL$JobRole)Laboratory Technician     -3041.0926
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manager                    7762.6672
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manufacturing Director       40.3063
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Director          7059.6536
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Scientist        -3037.5758
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Executive             576.6225
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Representative      -2442.3279
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Married                71.8608
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Single                 58.3186
## as.factor(desercion_empleados_IBM_ETL$OverTime)Yes                         75.6673
## as.factor(desercion_empleados_IBM_ETL$Attrition)Yes                       120.5454
##                                                                         Std. Error
## (Intercept)                                                               628.1286
## desercion_empleados_IBM_ETL$Age                                             6.6571
## desercion_empleados_IBM_ETL$DistanceFromHome                                5.3709
## desercion_empleados_IBM_ETL$TotalWorkingYears                              10.6928
## desercion_empleados_IBM_ETL$YearsAtCompany                                  9.3310
## as.factor(desercion_empleados_IBM_ETL$Gender)Male                          88.9531
## as.factor(desercion_empleados_IBM_ETL$Department)Research & Development   549.5399
## as.factor(desercion_empleados_IBM_ETL$Department)Sales                    569.4099
## as.factor(desercion_empleados_IBM_ETL$JobRole)Human Resources             617.9647
## as.factor(desercion_empleados_IBM_ETL$JobRole)Laboratory Technician       184.9092
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manager                     277.1406
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manufacturing Director      200.1163
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Director           241.9007
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Scientist          180.7885
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Executive             394.9429
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Representative        433.7515
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Married               111.9668
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Single                121.7650
## as.factor(desercion_empleados_IBM_ETL$OverTime)Yes                         99.9225
## as.factor(desercion_empleados_IBM_ETL$Attrition)Yes                       128.1752
##                                                                         t value
## (Intercept)                                                               7.579
## desercion_empleados_IBM_ETL$Age                                          -0.988
## desercion_empleados_IBM_ETL$DistanceFromHome                             -0.021
## desercion_empleados_IBM_ETL$TotalWorkingYears                            18.292
## desercion_empleados_IBM_ETL$YearsAtCompany                                2.044
## as.factor(desercion_empleados_IBM_ETL$Gender)Male                         1.880
## as.factor(desercion_empleados_IBM_ETL$Department)Research & Development  -0.112
## as.factor(desercion_empleados_IBM_ETL$Department)Sales                   -1.191
## as.factor(desercion_empleados_IBM_ETL$JobRole)Human Resources            -3.565
## as.factor(desercion_empleados_IBM_ETL$JobRole)Laboratory Technician     -16.446
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manager                    28.010
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manufacturing Director      0.201
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Director          29.184
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Scientist        -16.802
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Executive             1.460
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Representative       -5.631
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Married               0.642
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Single                0.479
## as.factor(desercion_empleados_IBM_ETL$OverTime)Yes                        0.757
## as.factor(desercion_empleados_IBM_ETL$Attrition)Yes                       0.940
##                                                                         Pr(>|t|)
## (Intercept)                                                             6.17e-14
## desercion_empleados_IBM_ETL$Age                                         0.323429
## desercion_empleados_IBM_ETL$DistanceFromHome                            0.983525
## desercion_empleados_IBM_ETL$TotalWorkingYears                            < 2e-16
## desercion_empleados_IBM_ETL$YearsAtCompany                              0.041181
## as.factor(desercion_empleados_IBM_ETL$Gender)Male                       0.060366
## as.factor(desercion_empleados_IBM_ETL$Department)Research & Development 0.910610
## as.factor(desercion_empleados_IBM_ETL$Department)Sales                  0.233766
## as.factor(desercion_empleados_IBM_ETL$JobRole)Human Resources           0.000375
## as.factor(desercion_empleados_IBM_ETL$JobRole)Laboratory Technician      < 2e-16
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manager                    < 2e-16
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manufacturing Director    0.840403
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Director          < 2e-16
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Scientist         < 2e-16
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Executive           0.144503
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Representative      2.15e-08
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Married             0.521101
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Single              0.632051
## as.factor(desercion_empleados_IBM_ETL$OverTime)Yes                      0.449017
## as.factor(desercion_empleados_IBM_ETL$Attrition)Yes                     0.347131
##                                                                            
## (Intercept)                                                             ***
## desercion_empleados_IBM_ETL$Age                                            
## desercion_empleados_IBM_ETL$DistanceFromHome                               
## desercion_empleados_IBM_ETL$TotalWorkingYears                           ***
## desercion_empleados_IBM_ETL$YearsAtCompany                              *  
## as.factor(desercion_empleados_IBM_ETL$Gender)Male                       .  
## as.factor(desercion_empleados_IBM_ETL$Department)Research & Development    
## as.factor(desercion_empleados_IBM_ETL$Department)Sales                     
## as.factor(desercion_empleados_IBM_ETL$JobRole)Human Resources           ***
## as.factor(desercion_empleados_IBM_ETL$JobRole)Laboratory Technician     ***
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manager                   ***
## as.factor(desercion_empleados_IBM_ETL$JobRole)Manufacturing Director       
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Director         ***
## as.factor(desercion_empleados_IBM_ETL$JobRole)Research Scientist        ***
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Executive              
## as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Representative      ***
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Married                
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Single                 
## as.factor(desercion_empleados_IBM_ETL$OverTime)Yes                         
## as.factor(desercion_empleados_IBM_ETL$Attrition)Yes                        
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1656 on 1450 degrees of freedom
## Multiple R-squared:  0.8779, Adjusted R-squared:  0.8763 
## F-statistic: 548.6 on 19 and 1450 DF,  p-value: < 2.2e-16
anova(lm(desercion_empleados_IBM_ETL$MonthlyIncome~desercion_empleados_IBM_ETL$Age+desercion_empleados_IBM_ETL$DistanceFromHome+desercion_empleados_IBM_ETL$TotalWorkingYears+desercion_empleados_IBM_ETL$YearsAtCompany+as.factor(desercion_empleados_IBM_ETL$Gender)+as.factor(desercion_empleados_IBM_ETL$Department)+as.factor(desercion_empleados_IBM_ETL$JobRole)+as.factor(desercion_empleados_IBM_ETL$MaritalStatus)+as.factor(desercion_empleados_IBM_ETL$OverTime)+as.factor(desercion_empleados_IBM_ETL$Attrition)))
## Analysis of Variance Table
## 
## Response: desercion_empleados_IBM_ETL$MonthlyIncome
##                                                        Df     Sum Sq    Mean Sq
## desercion_empleados_IBM_ETL$Age                         1 8.0703e+09 8.0703e+09
## desercion_empleados_IBM_ETL$DistanceFromHome            1 8.5188e+06 8.5188e+06
## desercion_empleados_IBM_ETL$TotalWorkingYears           1 1.1433e+10 1.1433e+10
## desercion_empleados_IBM_ETL$YearsAtCompany              1 2.9342e+07 2.9342e+07
## as.factor(desercion_empleados_IBM_ETL$Gender)           1 5.6459e+05 5.6459e+05
## as.factor(desercion_empleados_IBM_ETL$Department)       2 1.8106e+08 9.0528e+07
## as.factor(desercion_empleados_IBM_ETL$JobRole)          8 8.8544e+09 1.1068e+09
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)    2 1.3055e+06 6.5275e+05
## as.factor(desercion_empleados_IBM_ETL$OverTime)         1 2.9902e+06 2.9902e+06
## as.factor(desercion_empleados_IBM_ETL$Attrition)        1 2.4254e+06 2.4254e+06
## Residuals                                            1450 3.9761e+09 2.7421e+06
##                                                        F value    Pr(>F)    
## desercion_empleados_IBM_ETL$Age                      2943.1031 < 2.2e-16 ***
## desercion_empleados_IBM_ETL$DistanceFromHome            3.1066  0.078184 .  
## desercion_empleados_IBM_ETL$TotalWorkingYears        4169.4472 < 2.2e-16 ***
## desercion_empleados_IBM_ETL$YearsAtCompany             10.7004  0.001096 ** 
## as.factor(desercion_empleados_IBM_ETL$Gender)           0.2059  0.650071    
## as.factor(desercion_empleados_IBM_ETL$Department)      33.0138 9.531e-15 ***
## as.factor(desercion_empleados_IBM_ETL$JobRole)        403.6315 < 2.2e-16 ***
## as.factor(desercion_empleados_IBM_ETL$MaritalStatus)    0.2380  0.788196    
## as.factor(desercion_empleados_IBM_ETL$OverTime)         1.0905  0.296540    
## as.factor(desercion_empleados_IBM_ETL$Attrition)        0.8845  0.347131    
## Residuals                                                                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Coeficientes del Modelo RLM Total
coefficients(lm(desercion_empleados_IBM_ETL$MonthlyIncome~desercion_empleados_IBM_ETL$Age+desercion_empleados_IBM_ETL$DistanceFromHome+desercion_empleados_IBM_ETL$TotalWorkingYears+desercion_empleados_IBM_ETL$YearsAtCompany+as.factor(desercion_empleados_IBM_ETL$Gender)+as.factor(desercion_empleados_IBM_ETL$Department)+as.factor(desercion_empleados_IBM_ETL$JobRole)+as.factor(desercion_empleados_IBM_ETL$MaritalStatus)+as.factor(desercion_empleados_IBM_ETL$OverTime)+as.factor(desercion_empleados_IBM_ETL$Attrition)))
##                                                             (Intercept) 
##                                                            4760.7126741 
##                                         desercion_empleados_IBM_ETL$Age 
##                                                              -6.5757276 
##                            desercion_empleados_IBM_ETL$DistanceFromHome 
##                                                              -0.1109269 
##                           desercion_empleados_IBM_ETL$TotalWorkingYears 
##                                                             195.5897707 
##                              desercion_empleados_IBM_ETL$YearsAtCompany 
##                                                              19.0681717 
##                       as.factor(desercion_empleados_IBM_ETL$Gender)Male 
##                                                             167.1945466 
## as.factor(desercion_empleados_IBM_ETL$Department)Research & Development 
##                                                             -61.7069286 
##                  as.factor(desercion_empleados_IBM_ETL$Department)Sales 
##                                                            -678.2870175 
##           as.factor(desercion_empleados_IBM_ETL$JobRole)Human Resources 
##                                                           -2203.1571390 
##     as.factor(desercion_empleados_IBM_ETL$JobRole)Laboratory Technician 
##                                                           -3041.0925971 
##                   as.factor(desercion_empleados_IBM_ETL$JobRole)Manager 
##                                                            7762.6672295 
##    as.factor(desercion_empleados_IBM_ETL$JobRole)Manufacturing Director 
##                                                              40.3062649 
##         as.factor(desercion_empleados_IBM_ETL$JobRole)Research Director 
##                                                            7059.6536500 
##        as.factor(desercion_empleados_IBM_ETL$JobRole)Research Scientist 
##                                                           -3037.5757772 
##           as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Executive 
##                                                             576.6225055 
##      as.factor(desercion_empleados_IBM_ETL$JobRole)Sales Representative 
##                                                           -2442.3278666 
##             as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Married 
##                                                              71.8608351 
##              as.factor(desercion_empleados_IBM_ETL$MaritalStatus)Single 
##                                                              58.3186283 
##                      as.factor(desercion_empleados_IBM_ETL$OverTime)Yes 
##                                                              75.6672676 
##                     as.factor(desercion_empleados_IBM_ETL$Attrition)Yes 
##                                                             120.5454382
Coeficientes del Modelo RLM Reducido
coefficients(lm(desercion_empleados_IBM_ETL$MonthlyIncome~desercion_empleados_IBM_ETL$Age+desercion_empleados_IBM_ETL$TotalWorkingYears+as.factor (desercion_empleados_IBM_ETL$Gender)+as.factor(desercion_empleados_IBM_ETL$Department)+as.factor(desercion_empleados_IBM_ETL$Attrition)))
##                                                             (Intercept) 
##                                                              2109.66229 
##                                         desercion_empleados_IBM_ETL$Age 
##                                                               -27.25187 
##                           desercion_empleados_IBM_ETL$TotalWorkingYears 
##                                                               486.38641 
##                       as.factor(desercion_empleados_IBM_ETL$Gender)Male 
##                                                                68.06153 
## as.factor(desercion_empleados_IBM_ETL$Department)Research & Development 
##                                                              -310.28897 
##                  as.factor(desercion_empleados_IBM_ETL$Department)Sales 
##                                                               503.93966 
##                     as.factor(desercion_empleados_IBM_ETL$Attrition)Yes 
##                                                              -481.39273

La regresión lineal múltiple permitió analizar de manera conjunta el efecto de varias variables explicativas sobre la variable respuesta. El análisis de los coeficientes y la comparación entre el modelo total y el reducido facilitaron la identificación de las variables más relevantes. En general, este modelo aportó una visión más completa del fenómeno estudiado, en comparación con la regresión lineal simple.

5.4. Regresión Logística Simple

En este apartado se desarrolla el análisis de regresión logística simple, orientado al estudio de una variable respuesta categórica. Se realizan análisis descriptivos mediante resúmenes estadísticos, boxplots, histogramas y diagramas de barras, con el fin de comprender el comportamiento de las variables involucradas. Posteriormente, se formula el modelo de regresión logística y se analizan sus coeficientes y resumen estadístico.

Resumen y Boxplot Total de años trabajados

summary(desercion_empleados_IBM_ETL$TotalWorkingYears)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    6.00   10.00   11.28   15.00   40.00
boxplot(desercion_empleados_IBM_ETL$TotalWorkingYears, main = "Diagrama de Caja de Total de años trabajados", col = c("orange"))

Histograma de años trabajados

summary(desercion_empleados_IBM_ETL$TotalWorkingYears)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    0.00    6.00   10.00   11.28   15.00   40.00
hist(desercion_empleados_IBM_ETL$TotalWorkingYears, main = "Histograma de Total de años trabajados", col = c("Purple"))

Resumen y Diagrama de Barras de Target

table(desercion_empleados_IBM_ETL$Attrition)
## 
##   No  Yes 
## 1233  237
prop.table(table(desercion_empleados_IBM_ETL$Attrition))
## 
##        No       Yes 
## 0.8387755 0.1612245
barplot(table(desercion_empleados_IBM_ETL$Attrition), main = "Renuncia", col = c("violet"))

Resumen y Diagrama de Cajas Conjunto

tapply(desercion_empleados_IBM_ETL_1$MonthlyIncome, desercion_empleados_IBM_ETL_1$Attrition, mean)
##        0        1 
## 6832.740 4787.093
tapply(desercion_empleados_IBM_ETL_1$MonthlyIncome, desercion_empleados_IBM_ETL_1$Attrition, median)
##    0    1 
## 5204 3202
boxplot(desercion_empleados_IBM_ETL_1$MonthlyIncome~ desercion_empleados_IBM_ETL_1$Attrition, main = "Boxplot Conjunto: Ingreso mensual-TotalWorkingYears" , col = c("purple", "blue"))

Formulación del modelo de RLogS entre las variables de estudio

Coeficientes del Modelo RLogS
desercion_empleados_IBM_ETL$Attrition_bin <-
  ifelse(desercion_empleados_IBM_ETL$Attrition == "Yes", 1, 0)

modelo_RLog_Simple_S <- glm(Attrition_bin ~ MonthlyIncome,
                          family = "binomial",
                          data   = desercion_empleados_IBM_ETL)
coef(modelo_RLog_Simple_S)
##   (Intercept) MonthlyIncome 
## -0.9291087486 -0.0001271042
Resumen Estadístico del Modelo RLogS
desercion_empleados_IBM_ETL$Attrition_bin <-
ifelse(desercion_empleados_IBM_ETL$Attrition == "Yes", 1, 0)

names(desercion_empleados_IBM_ETL)[1:20]
##  [1] "Age"                "Attrition"          "BusinessTravel"    
##  [4] "DailyRate"          "Department"         "DistanceFromHome"  
##  [7] "Education"          "EducationField"     "EmployeeNumber"    
## [10] "Gender"             "HourlyRate"         "JobInvolvement"    
## [13] "JobLevel"           "JobRole"            "JobSatisfaction"   
## [16] "MaritalStatus"      "MonthlyIncome"      "MonthlyRate"       
## [19] "NumCompaniesWorked" "Over18"
table(desercion_empleados_IBM_ETL$Attrition_bin)
## 
##    0    1 
## 1233  237
Attrition_bin ~ MonthlyIncome
## Attrition_bin ~ MonthlyIncome
modelo_RLog_Simple_S <- glm(
Attrition_bin ~ MonthlyIncome,
family = binomial,
data = desercion_empleados_IBM_ETL
)

summary(modelo_RLog_Simple_S)
## 
## Call:
## glm(formula = Attrition_bin ~ MonthlyIncome, family = binomial, 
##     data = desercion_empleados_IBM_ETL)
## 
## Coefficients:
##                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -9.291e-01  1.292e-01  -7.191 6.43e-13 ***
## MonthlyIncome -1.271e-04  2.162e-05  -5.879 4.12e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1298.6  on 1469  degrees of freedom
## Residual deviance: 1253.1  on 1468  degrees of freedom
## AIC: 1257.1
## 
## Number of Fisher Scoring iterations: 5

Análisis del modelo RLogS

Variable Predictora igual a Cero
coef(modelo_RLog_Simple_S)
##   (Intercept) MonthlyIncome 
## -0.9291087486 -0.0001271042
round(exp(coef(modelo_RLog_Simple_S)),6)
##   (Intercept) MonthlyIncome 
##      0.394906      0.999873
Probabilidades Estimadas
predict(modelo_RLog_Simple_S)
##         1         2         3         4         5         6         7         8 
## -1.690844 -1.581153 -1.194756 -1.298855 -1.369906 -1.319064 -1.268477 -1.271400 
##         9        10        11        12        13        14        15        16 
## -2.139903 -1.594753 -1.237463 -1.462057 -1.299109 -1.267333 -1.186876 -2.197608 
##        17        18        19        20        21        22        23        24 
## -1.348298 -1.302159 -2.889945 -1.430408 -1.438924 -1.362153 -2.453596 -1.085701 
##        25        26        27        28        29        30        31        32 
## -1.305337 -3.356036 -1.427230 -1.796595 -2.231672 -3.337351 -1.246361 -1.750837 
##        33        34        35        36        37        38        39        40 
## -1.209501 -1.194248 -1.220559 -1.265299 -1.270129 -1.185097 -1.363678 -1.612421 
##        41        42        43        44        45        46        47        48 
## -1.177089 -1.226660 -1.220559 -2.038220 -1.438924 -3.413360 -1.509721 -1.313218 
##        49        50        51        52        53        54        55        56 
## -1.662754 -1.217508 -1.613056 -1.366474 -1.622335 -2.185406 -1.457481 -2.639677 
##        57        58        59        60        61        62        63        64 
## -2.081816 -1.439305 -1.680930 -1.690844 -1.712325 -1.234921 -3.311041 -1.899803 
##        65        66        67        68        69        70        71        72 
## -2.212352 -2.804658 -1.755159 -2.165070 -1.207975 -1.359738 -1.624750 -1.272671 
##        73        74        75        76        77        78        79        80 
## -1.246996 -1.719697 -1.315251 -1.491418 -1.477182 -2.612603 -2.665860 -1.567299 
##        81        82        83        84        85        86        87        88 
## -1.580645 -1.292500 -2.230528 -1.606447 -1.478834 -1.851885 -1.224245 -1.192850 
##        89        90        91        92        93        94        95        96 
## -1.456845 -2.151724 -2.645396 -1.620683 -1.591194 -2.285692 -1.565901 -2.651243 
##        97        98        99       100       101       102       103       104 
## -1.564502 -1.465615 -2.692298 -1.188655 -1.192596 -1.304829 -1.301016 -1.540353 
##       105       106       107       108       109       110       111       112 
## -1.585348 -3.324260 -3.238846 -1.659195 -1.296313 -1.294025 -1.880356 -1.701139 
##       113       114       115       116       117       118       119       120 
## -3.131570 -1.281696 -1.501713 -1.873239 -2.407457 -2.166849 -1.289449 -3.084668 
##       121       122       123       124       125       126       127       128 
## -1.261232 -1.710291 -1.559927 -3.412343 -1.713596 -1.230091 -2.239807 -1.142008 
##       129       130       131       132       133       134       135       136 
## -1.249793 -1.763802 -1.531455 -2.099484 -1.508577 -1.969965 -1.303049 -1.557130 
##       137       138       139       140       141       142       143       144 
## -2.282768 -1.679278 -2.027162 -1.735839 -1.462946 -1.367872 -1.477817 -1.263647 
##       145       146       147       148       149       150       151       152 
## -1.522431 -1.336351 -1.274832 -3.112885 -1.213568 -1.117604 -1.641528 -1.856334 
##       153       154       155       156       157       158       159       160 
## -1.222211 -1.227549 -2.072792 -1.478072 -1.708512 -1.354399 -2.308824 -1.212678 
##       161       162       163       164       165       166       167       168 
## -1.224372 -1.186368 -1.273942 -2.128845 -1.255258 -3.461786 -1.240641 -2.126303 
##       169       170       171       172       173       174       175       176 
## -2.033136 -1.315251 -1.317793 -1.224626 -1.194502 -1.319573 -1.565392 -1.470191 
##       177       178       179       180       181       182       183       184 
## -1.246869 -1.069178 -2.257729 -1.219923 -1.428501 -1.222846 -1.328216 -1.398123 
##       185       186       187       188       189       190       191       192 
## -1.494722 -1.279408 -3.348282 -3.308753 -2.142572 -2.674757 -3.471065 -1.218779 
##       193       194       195       196       197       198       199       200 
## -1.681057 -1.194629 -3.063442 -1.382108 -1.491545 -1.598312 -1.762022 -1.724908 
##       201       202       203       204       205       206       207       208 
## -1.475402 -1.793926 -1.414011 -1.277501 -1.777275 -1.900057 -1.225007 -1.202764 
##       209       210       211       212       213       214       215       216 
## -1.548869 -2.123380 -2.250992 -2.006189 -2.197735 -2.516640 -1.266825 -2.656581 
##       217       218       219       220       221       222       223       224 
## -1.780198 -1.190689 -2.055887 -1.684108 -1.680803 -1.262376 -2.477873 -2.277557 
##       225       226       227       228       229       230       231       232 
## -1.481376 -1.205815 -1.284111 -1.935520 -2.046227 -1.232761 -1.337367 -3.373576 
##       233       234       235       236       237       238       239       240 
## -1.217254 -3.409801 -1.238735 -2.970910 -1.273180 -3.352731 -1.428755 -1.403207 
##       241       242       243       244       245       246       247       248 
## -1.212805 -1.496629 -1.319573 -1.350967 -3.369763 -2.667258 -1.299109 -1.686268 
##       249       250       251       252       253       254       255       256 
## -1.427357 -1.746897 -2.206251 -2.319374 -1.226533 -1.761006 -1.810068 -1.551665 
##       257       258       259       260       261       262       263       264 
## -1.258690 -3.399505 -1.275213 -1.371304 -1.284238 -1.596279 -1.205687 -3.073610 
##       265       266       267       268       269       270       271       272 
## -1.372067 -1.773589 -1.638604 -1.437525 -2.644507 -1.337113 -3.349808 -2.435166 
##       273       274       275       276       277       278       279       280 
## -1.192214 -1.755540 -1.339655 -2.658107 -2.453850 -1.641528 -1.742194 -3.362391 
##       281       282       283       284       285       286       287       288 
## -3.164108 -1.552809 -1.507941 -1.617378 -1.531710 -1.197934 -1.330885 -1.659322 
##       289       290       291       292       293       294       295       296 
## -1.230727 -1.349824 -3.301508 -1.499171 -1.283602 -1.669872 -1.224753 -2.648193 
##       297       298       299       300       301       302       303       304 
## -1.109597 -1.948484 -1.397869 -1.625894 -2.964682 -1.081634 -1.648645 -1.809814 
##       305       306       307       308       309       310       311       312 
## -2.150961 -1.650298 -1.626148 -2.462112 -1.648518 -1.541878 -1.743846 -1.591321 
##       313       314       315       316       317       318       319       320 
## -1.271654 -2.438852 -3.098523 -1.241149 -2.703991 -1.557130 -1.244073 -1.593609 
##       321       322       323       324       325       326       327       328 
## -1.498281 -1.888364 -1.571620 -1.369398 -1.663135 -2.065801 -3.378660 -1.594880 
##       329       330       331       332       333       334       335       336 
## -1.524210 -3.255115 -1.597295 -1.736093 -1.547979 -2.198244 -1.399013 -1.876925 
##       337       338       339       340       341       342       343       344 
## -1.198442 -1.435365 -1.706732 -1.718934 -1.735839 -2.392078 -1.837014 -1.980006 
##       345       346       347       348       349       350       351       352 
## -1.958017 -1.298219 -1.695801 -1.307371 -2.961759 -1.520016 -1.271782 -1.230346 
##       353       354       355       356       357       358       359       360 
## -2.518419 -1.688429 -1.531074 -1.602252 -1.791002 -1.205433 -1.774733 -2.161892 
##       361       362       363       364       365       366       367       368 
## -1.787697 -1.210390 -1.260851 -1.291483 -1.367872 -1.597422 -2.118168 -2.263194 
##       369       370       371       372       373       374       375       376 
## -1.740033 -1.266825 -1.274324 -1.208865 -1.760370 -1.414138 -1.596787 -2.322806 
##       377       378       379       380       381       382       383       384 
## -1.556495 -1.252335 -1.603269 -3.046537 -1.470573 -1.243819 -1.323386 -1.214331 
##       385       386       387       388       389       390       391       392 
## -1.894592 -1.219542 -1.314743 -1.655509 -1.256529 -1.462565 -2.751274 -1.367364 
##       393       394       395       396       397       398       399       400 
## -3.395692 -1.760116 -1.476419 -1.216110 -1.503874 -1.499425 -1.494595 -1.211026 
##       401       402       403       404       405       406       407       408 
## -3.369127 -2.608409 -1.765073 -1.995767 -1.508450 -1.441466 -1.942002 -1.266443 
##       409       410       411       412       413       414       415       416 
## -3.033318 -1.508195 -1.703300 -3.416029 -1.540480 -1.504001 -1.336096 -1.227931 
##       417       418       419       420       421       422       423       424 
## -1.145440 -3.222195 -1.295931 -1.195646 -2.446097 -1.252716 -1.255004 -1.998309 
##       425       426       427       428       429       430       431       432 
## -2.723565 -3.095726 -1.255004 -2.233960 -1.573527 -3.199316 -1.466759 -1.409563 
##       433       434       435       436       437       438       439       440 
## -1.280933 -2.082071 -2.282514 -2.658996 -1.362280 -1.308260 -1.899168 -2.177780 
##       441       442       443       444       445       446       447       448 
## -2.193795 -1.195138 -2.197608 -1.424052 -1.444008 -3.068907 -1.720968 -1.528659 
##       449       450       451       452       453       454       455       456 
## -2.611587 -1.406385 -1.765708 -1.870442 -1.539844 -1.277501 -1.470827 -2.986163 
##       457       458       459       460       461       462       463       464 
## -2.398052 -1.167810 -2.318612 -1.794815 -1.476419 -1.546708 -1.607464 -1.226533 
##       465       466       467       468       469       470       471       472 
## -1.881246 -2.267134 -3.038402 -2.051947 -1.637969 -1.527388 -1.234159 -2.177780 
##       473       474       475       476       477       478       479       480 
## -1.748549 -3.407894 -1.275468 -1.726306 -1.199459 -3.242405 -1.195519 -1.295931 
##       481       482       483       484       485       486       487       488 
## -1.187512 -1.389480 -1.467141 -1.396979 -1.623098 -1.207086 -2.149563 -1.289576 
##       489       490       491       492       493       494       495       496 
## -1.448838 -3.042470 -1.261995 -1.650933 -2.886767 -1.689827 -1.256910 -1.315633 
##       497       498       499       500       501       502       503       504 
## -1.367237 -3.409292 -1.281569 -1.832057 -1.732661 -1.193867 -1.994369 -1.271146 
##       505       506       507       508       509       510       511       512 
## -1.473877 -1.267079 -2.128209 -1.635935 -1.773843 -1.910988 -2.292301 -2.053599 
##       513       514       515       516       517       518       519       520 
## -1.189037 -1.057357 -1.354654 -1.091929 -1.287415 -1.545691 -1.441084 -1.274832 
##       521       522       523       524       525       526       527       528 
## -1.961195 -1.519762 -1.523956 -1.338511 -2.024874 -1.510865 -1.507814 -1.614963 
##       529       530       531       532       533       534       535       536 
## -1.792909 -1.898278 -1.871205 -2.347464 -1.559545 -2.260525 -2.812030 -3.362010 
##       537       538       539       540       541       542       543       544 
## -1.616107 -2.046736 -3.368111 -1.421637 -1.210772 -2.417880 -1.928275 -1.400411 
##       545       546       547       548       549       550       551       552 
## -2.679333 -1.603269 -1.264918 -1.279789 -1.793926 -1.709783 -1.246869 -1.741177 
##       553       554       555       556       557       558       559       560 
## -2.340346 -1.226787 -1.794815 -1.221067 -1.240514 -1.576450 -1.603905 -1.317666 
##       561       562       563       564       565       566       567       568 
## -1.580009 -3.071577 -1.270511 -1.714613 -1.772064 -1.374609 -1.742194 -1.726560 
##       569       570       571       572       573       574       575       576 
## -3.453270 -1.893448 -1.470318 -1.483791 -1.480105 -1.606066 -1.346010 -1.626275 
##       577       578       579       580       581       582       583       584 
## -1.480995 -1.282713 -1.689192 -1.485952 -1.256021 -1.416299 -1.468539 -1.755286 
##       585       586       587       588       589       590       591       592 
## -3.271639 -1.132603 -1.271527 -1.329360 -3.171099 -1.223863 -2.415084 -1.605811 
##       593       594       595       596       597       598       599       600 
## -3.058358 -1.593609 -1.272290 -3.375356 -1.247632 -1.699614 -1.486079 -1.201493 
##       601       602       603       604       605       606       607       608 
## -1.712325 -1.576577 -1.803204 -1.218144 -1.492689 -1.728340 -1.253606 -1.901964 
##       609       610       611       612       613       614       615       616 
## -1.584966 -3.110089 -2.557059 -2.228240 -1.536540 -1.404097 -1.229837 -1.145948 
##       617       618       619       620       621       622       623       624 
## -3.001796 -1.683218 -1.364313 -1.442228 -1.254368 -1.717282 -1.488748 -1.407148 
##       625       626       627       628       629       630       631       632 
## -2.318866 -2.296877 -1.586873 -2.686451 -1.734187 -1.556495 -1.536031 -1.287288 
##       633       634       635       636       637       638       639       640 
## -1.248776 -1.226787 -1.462184 -2.287217 -1.186113 -1.223228 -1.470064 -1.384142 
##       641       642       643       644       645       646       647       648 
## -1.331012 -1.758336 -1.297584 -1.593991 -1.228566 -1.285000 -2.433514 -2.314925 
##       649       650       651       652       653       654       655       656 
## -1.306989 -2.743521 -1.636062 -1.505780 -1.900439 -3.207324 -1.590559 -1.218525 
##       657       658       659       660       661       662       663       664 
## -1.284365 -1.250937 -1.254368 -1.552936 -1.231617 -1.534760 -1.188910 -1.271400 
##       665       666       667       668       669       670       671       672 
## -1.766217 -1.347790 -1.459260 -1.282204 -1.231235 -1.234667 -1.223736 -1.184334 
##       673       674       675       676       677       678       679       680 
## -1.722747 -1.284873 -2.270312 -1.225134 -1.439305 -1.870061 -1.216237 -1.810195 
##       681       682       683       684       685       686       687       688 
## -1.523702 -2.655438 -1.225516 -1.235811 -2.162655 -1.474894 -1.529168 -1.249284 
##       689       690       691       692       693       694       695       696 
## -1.198697 -1.306989 -1.673304 -1.388845 -1.783884 -2.241459 -1.812356 -2.277557 
##       697       698       699       700       701       702       703       704 
## -1.494341 -1.203272 -1.513915 -3.102463 -1.244200 -2.816860 -1.852393 -1.649281 
##       705       706       707       708       709       710       711       712 
## -1.923445 -1.930690 -2.606121 -1.573146 -1.574671 -1.224118 -3.146314 -1.234667 
##       713       714       715       716       717       718       719       720 
## -1.367872 -1.217635 -3.140594 -1.626656 -3.397345 -1.286399 -1.390878 -1.458243 
##       721       722       723       724       725       726       727       728 
## -1.200095 -2.705135 -1.270256 -2.307553 -1.485444 -1.404860 -1.456337 -1.062695 
##       729       730       731       732       733       734       735       736 
## -2.294080 -2.249467 -2.380130 -1.259580 -1.236955 -1.624623 -1.240641 -1.468030 
##       737       738       739       740       741       742       743       744 
## -2.327127 -1.565011 -2.548670 -1.466378 -1.426976 -3.255496 -1.231617 -2.673741 
##       745       746       747       748       749       750       751       752 
## -1.536285 -1.740669 -3.467760 -1.801170 -1.560689 -3.451491 -2.622136 -1.735839 
##       753       754       755       756       757       758       759       760 
## -1.277755 -2.312002 -1.226787 -3.172497 -1.440703 -2.165197 -2.442157 -1.205815 
##       761       762       763       764       765       766       767       768 
## -1.885568 -1.543530 -1.188655 -1.211280 -1.062822 -1.287670 -3.374212 -1.451126 
##       769       770       771       772       773       774       775       776 
## -1.996275 -1.184207 -3.423782 -2.287344 -1.303049 -2.054997 -3.058866 -2.301580 
##       777       778       779       780       781       782       783       784 
## -1.224372 -1.109088 -1.515694 -1.241912 -2.037711 -1.431806 -2.194685 -1.358212 
##       785       786       787       788       789       790       791       792 
## -2.050549 -2.241078 -1.516457 -2.324204 -1.394310 -2.261415 -1.833963 -2.147021 
##       793       794       795       796       797       798       799       800 
## -1.502094 -1.209628 -1.914929 -1.779944 -1.398250 -1.231235 -1.223101 -3.174404 
##       801       802       803       804       805       806       807       808 
## -1.259071 -1.530057 -1.475911 -1.307752 -3.075263 -1.640002 -2.256712 -2.039999 
##       809       810       811       812       813       814       815       816 
## -1.248649 -1.902091 -3.148983 -1.863451 -2.304376 -2.475839 -3.423655 -1.192214 
##       817       818       819       820       821       822       823       824 
## -1.791129 -1.917852 -1.283856 -1.335969 -1.560562 -2.596715 -1.441720 -1.347409 
##       825       826       827       828       829       830       831       832 
## -1.472098 -1.571747 -1.290593 -1.272671 -1.171115 -1.974413 -1.534887 -1.260851 
##       833       834       835       836       837       838       839       840 
## -1.657543 -1.251826 -1.655382 -1.478580 -1.861545 -2.644888 -2.677808 -1.584331 
##       841       842       843       844       845       846       847       848 
## -1.216110 -1.386302 -1.248776 -1.490909 -1.765200 -1.491163 -2.234977 -1.608226 
##       849       850       851       852       853       854       855       856 
## -1.231108 -1.608608 -1.288432 -3.463947 -1.327072 -1.253479 -1.498154 -1.751981 
##       857       858       859       860       861       862       863       864 
## -1.314616 -1.302287 -3.294009 -1.204671 -1.291737 -3.095981 -1.220177 -1.386684 
##       865       866       867       868       869       870       871       872 
## -1.196917 -1.452142 -1.479088 -3.198681 -1.335334 -3.354383 -2.068725 -1.210009 
##       873       874       875       876       877       878       879       880 
## -1.506035 -1.277501 -1.372829 -1.506289 -1.269494 -1.867010 -1.726306 -1.592593 
##       881       882       883       884       885       886       887       888 
## -1.277755 -1.564375 -2.232181 -1.282585 -1.800027 -1.558274 -1.384015 -2.605740 
##       889       890       891       892       893       894       895       896 
## -2.248069 -1.213187 -2.263957 -1.184715 -1.165395 -1.407020 -3.188894 -1.797612 
##       897       898       899       900       901       902       903       904 
## -1.794942 -1.586364 -3.438145 -3.307355 -1.398377 -1.254368 -1.249030 -1.770920 
##       905       906       907       908       909       910       911       912 
## -3.250666 -2.978536 -1.257673 -3.244057 -1.994242 -1.309659 -1.084557 -1.071211 
##       913       914       915       916       917       918       919       920 
## -1.294533 -3.321718 -2.654802 -1.262757 -3.317269 -1.505907 -3.451745 -2.265228 
##       921       922       923       924       925       926       927       928 
## -1.493960 -1.202891 -3.368238 -1.499806 -1.374736 -1.230600 -2.229511 -1.616742 
##       929       930       931       932       933       934       935       936 
## -1.943146 -1.420621 -1.289830 -1.525863 -1.353510 -1.193485 -1.195519 -1.718299 
##       937       938       939       940       941       942       943       944 
## -3.224737 -3.105513 -1.230600 -1.549758 -1.425323 -1.517220 -1.830786 -1.364186 
##       945       946       947       948       949       950       951       952 
## -1.777402 -3.074627 -2.084994 -2.002631 -2.443682 -1.505399 -2.181339 -1.710926 
##       953       954       955       956       957       958       959       960 
## -1.221703 -1.229329 -3.199316 -3.367856 -3.435222 -1.379566 -2.009494 -1.521541 
##       961       962       963       964       965       966       967       968 
## -1.450617 -1.469174 -2.711872 -1.805238 -1.707622 -1.395454 -2.201167 -1.232506 
##       969       970       971       972       973       974       975       976 
## -1.518745 -1.932977 -1.251191 -2.599512 -1.133874 -1.610768 -1.573654 -2.669800 
##       977       978       979       980       981       982       983       984 
## -2.632559 -1.187003 -1.739652 -1.619157 -1.283094 -1.515567 -1.260851 -1.779054 
##       985       986       987       988       989       990       991       992 
## -1.529549 -1.714485 -1.706986 -2.275905 -1.623987 -1.309913 -2.199896 -1.447440 
##       993       994       995       996       997       998       999      1000 
## -2.317086 -1.721222 -2.612858 -1.447821 -1.662373 -1.233396 -1.425323 -3.064332 
##      1001      1002      1003      1004      1005      1006      1007      1008 
## -1.304066 -1.390370 -2.119058 -1.339528 -1.383887 -1.944417 -1.473623 -1.889127 
##      1009      1010      1011      1012      1013      1014      1015      1016 
## -3.131570 -3.433188 -2.801607 -2.108381 -1.101843 -1.536540 -3.016413 -1.309913 
##      1017      1018      1019      1020      1021      1022      1023      1024 
## -1.089387 -1.195900 -1.667584 -1.646866 -1.363805 -1.488367 -1.373973 -1.191706 
##      1025      1026      1027      1028      1029      1030      1031      1032 
## -3.111360 -1.458116 -2.098976 -1.347790 -1.199459 -1.434348 -2.300944 -2.212352 
##      1033      1034      1035      1036      1037      1038      1039      1040 
## -1.392531 -1.875526 -2.308316 -1.197171 -1.402190 -2.121346 -1.626402 -1.277628 
##      1041      1042      1043      1044      1045      1046      1047      1048 
## -2.677681 -2.004791 -1.331012 -3.038784 -1.774479 -1.227168 -1.363805 -1.484935 
##      1049      1050      1051      1052      1053      1054      1055      1056 
## -1.533997 -1.602888 -1.395962 -1.535141 -1.091039 -1.551919 -2.259381 -3.090769 
##      1057      1058      1059      1060      1061      1062      1063      1064 
## -1.298855 -1.661864 -1.513661 -1.234667 -1.332283 -1.187512 -2.226715 -2.024747 
##      1065      1066      1067      1068      1069      1070      1071      1072 
## -1.191452 -1.441974 -1.416935 -1.512644 -1.254623 -1.127773 -1.551665 -1.537811 
##      1073      1074      1075      1076      1077      1078      1079      1080 
## -1.333300 -1.761514 -1.741050 -2.358268 -2.966843 -1.229329 -3.004466 -1.993733 
##      1081      1082      1083      1084      1085      1086      1087      1088 
## -3.039801 -2.022967 -1.217889 -1.185605 -1.829388 -1.448202 -2.760807 -1.222465 
##      1089      1090      1091      1092      1093      1094      1095      1096 
## -1.544420 -1.473750 -2.163926 -1.478199 -1.200095 -2.215911 -1.624750 -1.590940 
##      1097      1098      1099      1100      1101      1102      1103      1104 
## -3.018320 -1.220940 -1.446296 -1.874891 -1.237972 -1.676227 -1.265172 -1.747532 
##      1105      1106      1107      1108      1109      1110      1111      1112 
## -1.240641 -1.741559 -2.163799 -1.701521 -1.240514 -2.104822 -1.192723 -2.221631 
##      1113      1114      1115      1116      1117      1118      1119      1120 
## -1.546199 -1.448583 -1.229964 -1.306862 -3.418571 -1.626148 -1.191070 -2.190491 
##      1121      1122      1123      1124      1125      1126      1127      1128 
## -1.462692 -1.795324 -1.529422 -1.709783 -1.976066 -2.054362 -3.386159 -1.192596 
##      1129      1130      1131      1132      1133      1134      1135      1136 
## -1.636062 -3.422003 -1.362153 -1.572637 -1.518745 -1.548869 -1.271019 -3.161948 
##      1137      1138      1139      1140      1141      1142      1143      1144 
## -1.235176 -1.286780 -2.358395 -1.350078 -3.350316 -1.201239 -1.662373 -1.486461 
##      1145      1146      1147      1148      1149      1150      1151      1152 
## -1.606828 -1.521795 -1.529549 -1.337240 -1.612548 -1.445914 -1.591067 -1.548996 
##      1153      1154      1155      1156      1157      1158      1159      1160 
## -1.325292 -1.128535 -3.427722 -1.319191 -2.255441 -1.456337 -1.662246 -1.569968 
##      1161      1162      1163      1164      1165      1166      1167      1168 
## -1.662500 -1.914929 -2.239044 -1.429391 -1.938951 -1.659068 -2.861346 -1.620555 
##      1169      1170      1171      1172      1173      1174      1175      1176 
## -1.407020 -1.376134 -1.257038 -1.204416 -1.675083 -1.946959 -1.590813 -1.602125 
##      1177      1178      1179      1180      1181      1182      1183      1184 
## -3.015269 -2.615654 -1.282840 -1.619666 -1.184969 -2.704246 -1.485062 -1.798755 
##      1185      1186      1187      1188      1189      1190      1191      1192 
## -3.144026 -3.166523 -1.511373 -1.530947 -1.461294 -1.628817 -1.624369 -1.625131 
##      1193      1194      1195      1196      1197      1198      1199      1200 
## -1.257927 -1.239243 -2.959217 -2.883844 -1.829260 -1.275849 -1.611404 -1.608735 
##      1201      1202      1203      1204      1205      1206      1207      1208 
## -1.335207 -1.436127 -1.349315 -1.819473 -1.266570 -1.106165 -1.255766 -1.378676 
##      1209      1210      1211      1212      1213      1214      1215      1216 
## -1.435746 -2.312383 -1.186876 -2.139776 -1.301397 -1.218271 -1.930562 -1.555732 
##      1217      1218      1219      1220      1221      1222      1223      1224 
## -1.926495 -1.488494 -2.103678 -1.307117 -1.501332 -2.295224 -1.126756 -2.573328 
##      1225      1226      1227      1228      1229      1230      1231      1232 
## -1.222084 -3.052257 -1.365457 -1.371050 -1.746389 -1.757320 -1.425705 -1.636062 
##      1233      1234      1235      1236      1237      1238      1239      1240 
## -1.803967 -1.292881 -1.561833 -2.246925 -1.708766 -1.785155 -1.347917 -1.594880 
##      1241      1242      1243      1244      1245      1246      1247      1248 
## -1.751727 -2.150580 -3.449966 -2.169137 -1.560562 -1.201747 -1.206196 -1.989920 
##      1249      1250      1251      1252      1253      1254      1255      1256 
## -1.366983 -1.279916 -1.729102 -1.836633 -1.301778 -1.583314 -1.501967 -2.017629 
##      1257      1258      1259      1260      1261      1262      1263      1264 
## -1.242802 -1.966406 -1.197171 -1.601998 -1.274578 -1.667711 -1.238862 -1.280679 
##      1265      1266      1267      1268      1269      1270      1271      1272 
## -3.348918 -1.317412 -1.220050 -1.437653 -2.577014 -1.378930 -1.695420 -1.269621 
##      1273      1274      1275      1276      1277      1278      1279      1280 
## -1.399648 -1.233905 -1.624114 -2.596207 -1.461548 -3.385778 -1.986743 -1.226787 
##      1281      1282      1283      1284      1285      1286      1287      1288 
## -1.446550 -1.667965 -1.328597 -1.188910 -2.640439 -1.944798 -1.358340 -1.633012 
##      1289      1290      1291      1292      1293      1294      1295      1296 
## -1.661483 -1.258563 -1.608608 -1.464599 -1.453668 -1.238989 -1.802314 -2.256966 
##      1297      1298      1299      1300      1301      1302      1303      1304 
## -2.157825 -1.202129 -2.063641 -1.756938 -1.793290 -2.999763 -1.272926 -2.242476 
##      1305      1306      1307      1308      1309      1310      1311      1312 
## -1.494468 -1.800281 -2.154012 -1.385540 -1.616107 -1.524465 -2.935702 -1.121544 
##      1313      1314      1315      1316      1317      1318      1319      1320 
## -1.304829 -1.225897 -1.584204 -1.814008 -1.650425 -1.231490 -1.413630 -1.519889 
##      1321      1322      1323      1324      1325      1326      1327      1328 
## -1.302287 -1.196663 -2.019408 -1.273053 -1.740542 -1.433458 -2.188330 -2.610061 
##      1329      1330      1331      1332      1333      1334      1335      1336 
## -1.379058 -1.285509 -3.393913 -3.428612 -1.239116 -1.858749 -1.535904 -1.425069 
##      1337      1338      1339      1340      1341      1342      1343      1344 
## -1.267460 -1.292118 -1.066508 -1.243310 -1.650171 -1.462565 -2.163672 -1.191198 
##      1345      1346      1347      1348      1349      1350      1351      1352 
## -1.473623 -1.537684 -1.679786 -1.423036 -3.067382 -1.301905 -1.755286 -3.111996 
##      1353      1354      1355      1356      1357      1358      1359      1360 
## -1.568824 -1.222338 -1.257927 -1.629071 -1.487477 -2.625695 -1.765835 -1.959034 
##      1361      1362      1363      1364      1365      1366      1367      1368 
## -1.434729 -1.252462 -1.615344 -1.626529 -1.797739 -1.067779 -1.658178 -1.212043 
##      1369      1370      1371      1372      1373      1374      1375      1376 
## -1.659576 -2.181593 -1.623987 -1.612929 -1.583822 -1.200222 -3.201096 -1.238226 
##      1377      1378      1379      1380      1381      1382      1383      1384 
## -1.535523 -3.364552 -1.575688 -1.293008 -1.635935 -1.201620 -1.318683 -1.286271 
##      1385      1386      1387      1388      1389      1390      1391      1392 
## -2.185915 -2.025764 -1.293516 -1.612039 -1.776512 -1.565011 -1.229964 -1.292372 
##      1393      1394      1395      1396      1397      1398      1399      1400 
## -1.590559 -1.450871 -2.159350 -1.643053 -2.257093 -1.297330 -1.687666 -1.883661 
##      1401      1402      1403      1404      1405      1406      1407      1408 
## -1.309277 -3.424926 -1.072609 -2.624805 -1.479724 -2.331195 -1.493451 -1.515949 
##      1409      1410      1411      1412      1413      1414      1415      1416 
## -1.265553 -1.732788 -1.650679 -1.207086 -1.405495 -1.434602 -2.026399 -1.184334 
##      1417      1418      1419      1420      1421      1422      1423      1424 
## -1.493451 -1.318937 -1.605430 -1.616742 -1.282713 -2.448893 -1.267206 -1.358085 
##      1425      1426      1427      1428      1429      1430      1431      1432 
## -1.577086 -1.549123 -1.289703 -1.234921 -1.217508 -1.451253 -2.607646 -2.253788 
##      1433      1434      1435      1436      1437      1438      1439      1440 
## -2.676028 -1.552809 -1.371685 -1.238735 -1.231617 -3.398870 -1.156625 -1.900693 
##      1441      1442      1443      1444      1445      1446      1447      1448 
## -1.581280 -1.730628 -1.537556 -3.328835 -1.226405 -2.653912 -1.782232 -1.616234 
##      1449      1450      1451      1452      1453      1454      1455      1456 
## -2.065166 -1.239116 -2.052328 -1.608226 -1.784266 -1.774606 -1.545564 -1.286144 
##      1457      1458      1459      1460      1461      1462      1463      1464 
## -1.652204 -1.183444 -1.307498 -1.440703 -1.410198 -2.308697 -2.458299 -2.192016 
##      1465      1466      1467      1468      1469      1470 
## -1.306100 -1.255894 -2.199006 -1.709783 -1.614200 -1.488876
Gráfica del Modelo RLogS
desercion_empleados_IBM_ETL$Attrition_bin <-
ifelse(desercion_empleados_IBM_ETL$Attrition == "Yes", 1, 0)
target <- desercion_empleados_IBM_ETL$Attrition_bin
MonthlyIncome <- desercion_empleados_IBM_ETL$MonthlyIncome
dataPlot <- data.frame(MonthlyIncome, target)
plot(target~MonthlyIncome, data = dataPlot, main = "Modelo RLogS: MonthlyIncome-Attrition_bin", xlab = "MonthlyIncome", ylab = "Attrition_bin = 0 | Attrition_bin = 1", col = "gold", pch = "I")
curve(predict(glm(target~MonthlyIncome, family = "binomial", data = dataPlot), data.frame(MonthlyIncome = x), type = "response"), col = "violet", lwd = 3, add = TRUE)

La regresión logística simple permitió estimar la probabilidad de ocurrencia de la variable respuesta en función de la variable predictora analizada. El estudio de los coeficientes y las probabilidades estimadas facilitó la interpretación del modelo, mientras que la representación gráfica ayudó a visualizar su comportamiento. Esta técnica resultó adecuada para el análisis de variables categóricas dentro de la base de datos.

5.5. Ajuste de Varianza

El análisis de varianza (ANOVA) es una técnica estadística que permite comparar los ingresos mensuales promedio entre diferentes roles de trabajo. A través de este análisis, se busca identificar si existen diferencias significativas en los salarios segun el cargo desempeñado, lo que contribuye a comprender laa estructura salarial dentro de la organización y a respaldar el análisis con datos objetivos.

ANOVA de ingresos mensuales según el rol de trabajo

anova_ingresos <- aov(MonthlyIncome ~ JobRole,
                      data = desercion_empleados_IBM_ETL)

summary(anova_ingresos)
##               Df    Sum Sq   Mean Sq F value Pr(>F)    
## JobRole        8 2.657e+10 3.321e+09   810.2 <2e-16 ***
## Residuals   1461 5.989e+09 4.099e+06                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
boxplot(MonthlyIncome ~ JobRole,
        data = desercion_empleados_IBM_ETL,
        las = 2,
        main = "Distribucion de MonthlyIncome por JobRole",
        ylab = "MonthlyIncome")

La figura correspondiente al boxplot de MonthlyIncome por JobRole confirma visualmente estas diferencias, observándose salarios considerablemente más altos en cargos de dirección y ejecutivos frente a roles operativos como representantes de ventas o personal de recursos humanos.

TukeyHSD

TukeyHSD(anova_ingresos)
##   Tukey multiple comparisons of means
##     95% family-wise confidence level
## 
## Fit: aov(formula = MonthlyIncome ~ JobRole, data = desercion_empleados_IBM_ETL)
## 
## $JobRole
##                                                           diff         lwr
## Human Resources-Healthcare Representative         -3293.013359  -4323.8896
## Laboratory Technician-Healthcare Representative   -4291.593475  -4965.9120
## Manager-Healthcare Representative                  9652.913112   8822.3732
## Manufacturing Director-Healthcare Representative   -233.625428   -991.7720
## Research Director-Healthcare Representative        8504.786641   7612.3470
## Research Scientist-Healthcare Representative      -4288.790756  -4950.1865
## Sales Executive-Healthcare Representative          -604.484218  -1255.1110
## Sales Representative-Healthcare Representative    -4902.763359  -5785.1328
## Laboratory Technician-Human Resources              -998.580116  -1954.3359
## Manager-Human Resources                           12945.926471  11874.2174
## Manufacturing Director-Human Resources             3059.387931   2042.7514
## Research Director-Human Resources                 11797.800000  10677.4374
## Research Scientist-Human Resources                 -995.777397  -1942.4600
## Sales Executive-Human Resources                    2688.529141   1749.3386
## Sales Representative-Human Resources              -1609.750000  -2722.1077
## Manager-Laboratory Technician                     13944.506586  13209.2788
## Manufacturing Director-Laboratory Technician       4057.968047   3405.6264
## Research Director-Laboratory Technician           12796.380116  11991.8853
## Research Scientist-Laboratory Technician              2.802719   -534.0471
## Sales Executive-Laboratory Technician              3687.109257   3163.5841
## Sales Representative-Laboratory Technician         -611.169884  -1404.4789
## Manufacturing Director-Manager                    -9886.538540 -10699.3366
## Research Director-Manager                         -1148.126471  -2087.4364
## Research Scientist-Manager                       -13941.703868 -14665.0978
## Sales Executive-Manager                          -10257.397329 -10970.9586
## Sales Representative-Manager                     -14555.676471 -15485.4240
## Research Director-Manufacturing Director           8738.412069   7862.4596
## Research Scientist-Manufacturing Director         -4055.165328  -4694.1399
## Sales Executive-Manufacturing Director             -370.858790   -998.6799
## Sales Representative-Manufacturing Director       -4669.137931  -5534.8285
## Research Scientist-Research Director             -12793.577397 -13587.2718
## Sales Executive-Research Director                 -9109.270859  -9894.0140
## Sales Representative-Research Director           -13407.550000 -14392.9852
## Sales Executive-Research Scientist                 3684.306538   3177.5349
## Sales Representative-Research Scientist            -613.972603  -1396.3269
## Sales Representative-Sales Executive              -4298.279141  -5071.5508
##                                                           upr     p adj
## Human Resources-Healthcare Representative         -2262.13715 0.0000000
## Laboratory Technician-Healthcare Representative   -3617.27499 0.0000000
## Manager-Healthcare Representative                 10483.45304 0.0000000
## Manufacturing Director-Healthcare Representative    524.52116 0.9894290
## Research Director-Healthcare Representative        9397.22633 0.0000000
## Research Scientist-Healthcare Representative      -3627.39500 0.0000000
## Sales Executive-Healthcare Representative            46.14257 0.0928541
## Sales Representative-Healthcare Representative    -4020.39387 0.0000000
## Laboratory Technician-Human Resources               -42.82434 0.0327038
## Manager-Human Resources                           14017.63551 0.0000000
## Manufacturing Director-Human Resources             4076.02451 0.0000000
## Research Director-Human Resources                 12918.16257 0.0000000
## Research Scientist-Human Resources                  -49.09475 0.0305199
## Sales Executive-Human Resources                    3627.71970 0.0000000
## Sales Representative-Human Resources               -497.39232 0.0002571
## Manager-Laboratory Technician                     14679.73439 0.0000000
## Manufacturing Director-Laboratory Technician       4710.30967 0.0000000
## Research Director-Laboratory Technician           13600.87496 0.0000000
## Research Scientist-Laboratory Technician            539.65250 1.0000000
## Sales Executive-Laboratory Technician              4210.63440 0.0000000
## Sales Representative-Laboratory Technician          182.13918 0.2883145
## Manufacturing Director-Manager                    -9073.74044 0.0000000
## Research Director-Manager                          -208.81656 0.0047993
## Research Scientist-Manager                       -13218.30989 0.0000000
## Sales Executive-Manager                           -9543.83603 0.0000000
## Sales Representative-Manager                     -13625.92896 0.0000000
## Research Director-Manufacturing Director           9614.36457 0.0000000
## Research Scientist-Manufacturing Director         -3416.19075 0.0000000
## Sales Executive-Manufacturing Director              256.96236 0.6587161
## Sales Representative-Manufacturing Director       -3803.44740 0.0000000
## Research Scientist-Research Director             -11999.88295 0.0000000
## Sales Executive-Research Director                 -8324.52774 0.0000000
## Sales Representative-Research Director           -12422.11484 0.0000000
## Sales Executive-Research Scientist                 4191.07818 0.0000000
## Sales Representative-Research Scientist             168.38166 0.2641555
## Sales Representative-Sales Executive              -3525.00747 0.0000000

Se realizó una prueba post‑hoc de Tukey para identificar qué pares de roles difieren en el ingreso mensual promedio.

6. Conclusiones

Se puede concluir, que es posible modelar de manera adecuada la deserción de empleados de IBM a partir de información histórica limpia, transformada y analizada con R. El proceso ETL y la exploración multivariante permitieron comprender la estructura del conjunto de datos y detectar relaciones iniciales entre variables demográficas, laborales y la variable de deserción.

El ajuste del modelo de regresión logística binaria evidenció que factores cuantitativos como el ingreso mensual (MonthlyIncome) y otras características laborales tienen un efecto estadísticamente significativo sobre la probabilidad de deserción, ofreciendo una herramienta útil para estimar el riesgo de abandono de cada empleado. Las probabilidades estimadas permiten priorizar acciones de retención sobre grupos con mayor propensión a renunciar, lo que aporta valor práctico a la gestión de talento humano.

El análisis de varianza (ANOVA) de los ingresos mensuales según el rol de trabajo mostró diferencias salariales muy significativas entre cargos, lo que revela una estructura salarial estratificada dentro de la organización. La prueba post‑hoc de Tukey y los boxplots confirmaron que los puestos directivos y ejecutivos presentan niveles de ingreso sustancialmente superiores a los de cargos operativos y administrativos, información clave para interpretar desigualdades internas y su posible vínculo con la deserción

7. Bibliografía

Tucker (1973), Porras C. (2016), Devore, Jay L. (2008), Cramer, Harald (1953), Díaz Morales & Morales Rivera (2012), Hair et al. (1999), Aldás & Uriel (2017), Doornik & Hansen (2008), Aristizábal R. (2017),

Aldás, J., & Uriel, E. (2017). Análisis multivariante aplicado con R (2nd ed.). ALFACENTAURO.
Aristizábal R., W. D. (2017). Análisis multivariado unidad 1 estadística descriptiva multivariada. In Fundación Universitaria Los Libertadores.
Cramer, Harald. (1953). Métodos matemáticos de estadística (1st ed.). AGUILAR.
Devore, Jay L. (2008). Probabilidad y estadı́stica para ingenierı́a y ciencias (7th ed.). CENGAGE LEARNING.
Díaz Morales, L. G., & Morales Rivera, M. A. (2012). Análisis estadístico de datos multivariados (1st ed.). UNAL.
Doornik, J. A., & Hansen, H. (2008). An omnibus test for univariate and multivariate normality. Oxford Bulletin of Economics and Statistics. https://doi.org/10.1111/j.1468-0084.2008.00537.x
Hair, J. F., Anderson, R. E., Tatham, R. L., & Black, W. C. (1999). Análisis multivariante (5th ed.). PRENTICE HALL.
Porras C., J. C. (2016). Comparison test mutivariate normal. Anales Científicos. https://dialnet.unirioja.es/descarga/articulo/6171231.pdf
Tucker, H. G. (1973). Introducción a la teoría matemática de las probabilidades y a la estadítica (1st ed.). VICENS-VIVES.
LS0tDQp0aXRsZTogIioqVEZDX0dERF8yMDI1XzJfR1JVUE9fMSoqIg0Kc3VidGl0bGU6ICJFc3R1ZGlvIGRlIEFuw6FsaXNpcyBNdWx0aXZhcmlhZG8gY29uIGJhc2UgZW4gdW4gY29uanVudG8gZGUgZGF0b3Mgc29icmUgbGEgZGVzZXJjacOzbiB5IHJlbmRpbWllbnRvIGRlIGVtcGxlYWRvcyBlbiBsYSBlbXByZXNhIElCTS4iDQphdXRob3I6ICJQb3I6DQpOaWNvbGUgTWFudWVsYSBBY29zdGEgQ29yZG9iYSAobmljb2xlLmFjb3N0YUBjb3JyZW91bml2YWxsZS5lZHUuY28pLA0KQ2hlaWxhIEFsZWphbmRyYSBSZWFzY29zIE1vbnRlbmVncm8gKGNoZWlsYS5yZWFzY29zQGNvcnJlb3VuaXZhbGxlLmVkdS5jbyksDQpNYWlyYSBBbGVqYW5kcmEgUm9kcmlndWV6IFNlcm5hIChtYWlyYS5zZXJuYUBjb3JyZW91bml2YWxsZS5lZHUuY28pLA0KR2VyYXJkbyBWYXJlbGEgQ2FyZG9uYSAoZ2VyYXJkby52YXJlbGFAY29ycmVvdW5pdmFsbGUuZWR1LmNvKSINCg0KZGF0ZTogIlRyYWJham8gZWxhYm9yYWRvIGVuIGVsIHBlcmlvZG8gYWNhZMOpbWljbyAyMDI1LTIsIHBhcmEgZWwgY3Vyc28gR2VzdGnDs24gZGUgRGF0b3MgcGFyYSBJbmdlbmllcsOtYSBJbmR1c3RyaWFsLiINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IGx1bWVuDQpiaWJsaW9ncmFwaHk6IGJpYmxpb2dyYWZpYV9NRS5iaWINCmNzbDogYXBhLmNzbA0KbGluay1jaXRhdGlvbnM6IHllcw0KLS0tDQo8IS0tIENvbmZpZ3VyYWNpw7NuIEdsb2JhbCBkZSBSIC0tPg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoY29ycnBsb3QpDQpsaWJyYXJ5KEdHYWxseSkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoYW5kcmV3cykNCmxpYnJhcnkodGNsdGspDQpsaWJyYXJ5KGFwbHBhY2spDQpsaWJyYXJ5KGdyYXBoaWNzKQ0KbGlicmFyeShyZXNoYXBlMikNCmxpYnJhcnkoRmFjdG9NaW5lUikNCmxpYnJhcnkoZmFjdG9leHRyYSkNCmxpYnJhcnkocHN5Y2gpDQpsaWJyYXJ5KEZhY3RvQ2xhc3MpDQpsaWJyYXJ5KGNsdXN0ZXIpDQpsaWJyYXJ5KGRlbmRleHRlbmQpDQpsaWJyYXJ5KG1hZ3JpdHRyKQ0KbGlicmFyeShOYkNsdXN0KQ0KbGlicmFyeShzdGFyZ2F6ZXIpDQoNCmxpYnJhcnkobXZub3JtYWxUZXN0KQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KDQpsaWJyYXJ5KHJlYWR4bCkNCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX29yaWdpbmFsIDwtIHJlYWRfZXhjZWwoIkU6L1Byb3llY3RvX0dERF8yMDI1LTIvZGVzZXJjaW9uX2VtcGxlYWRvc19JQk0ueGxzeCIpDQoNCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCA8LSByZWFkX2V4Y2VsKCJFOi9Qcm95ZWN0b19HRERfMjAyNS0yL2Rlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC54bHN4IikNCg0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMXzEgPC0gcmVhZF9leGNlbCgiRTovUHJveWVjdG9fR0REXzIwMjUtMi9kZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfMS54bHN4IikNCg0KYGBgDQoNCiMjICoqRmFzZSAxIFtEZXNjcmlwY2lvbmVzIE11bHRpdmFyaWFudGVzXSoqDQoNCkVuIGVzdGEgKipwcmltZXJhIGV0YXBhKiogZGVsIGVzdHVkaW8sIHNlIHJlYWxpemFyw6EgdW4gY29uanVudG8gZGUgY8OhbGN1bG9zLCB2aXN1YWxpemFjaW9uZXMgeSBhbsOhbGlzaXMgZXhwbG9yYXRvcmlvcyBzb2JyZSBsb3MgZGF0b3MgcmVsYWNpb25hZG9zIGNvbiBsYSBkZXNlcmNpw7NuIGRlIGVtcGxlYWRvcyBlbiBsYSBlbXByZXNhIElCTSwgbG9zIGN1YWxlcyBzZSBkZXNjcmliZW4gZGV0YWxsYWRhbWVudGUgZW4gbGEgc2VjY2nDs24gMS4yLiBFbCBhbsOhbGlzaXMgc2UgYWJvcmRhcsOhIGRlc2RlIGxhIHBlcnNwZWN0aXZhIGRlIGxhIGVzdGFkw61zdGljYSBkZXNjcmlwdGl2YSBtdWx0aXZhcmlhbnRlLCBsbyBxdWUgcGVybWl0aXLDoSBvYnRlbmVyIG5vIHNvbG8gdW5hIHZpc2nDs24gZ2VuZXJhbCBkZWwgY29tcG9ydGFtaWVudG8gZGVsIHBlcnNvbmFsIGRlbnRybyBkZSBsYSBvcmdhbml6YWNpw7NuLCBzaW5vIHRhbWJpw6luIHVuYSBjb21wcmVuc2nDs24gbcOhcyBwcm9mdW5kYSBkZSBsYXMgcmVsYWNpb25lcyBlbnRyZSBsYXMgZGl2ZXJzYXMgdmFyaWFibGVzIGFzb2NpYWRhcyBhIGxhIHBlcm1hbmVuY2lhIG8gcmVudW5jaWEgZGUgbG9zIGVtcGxlYWRvcy4NCg0KRXN0ZSBlbmZvcXVlIGNvbnRyaWJ1aXLDoSBhIGlkZW50aWZpY2FyIHBhdHJvbmVzIGNsYXZlLCB0ZW5kZW5jaWFzIHJlbGV2YW50ZXMgeSBwb3NpYmxlcyBmYWN0b3JlcyBhc29jaWFkb3MgYWwgYWJhbmRvbm8gbGFib3JhbCwgdGFsZXMgY29tbyBlbCBuaXZlbCBkZSBzYXRpc2ZhY2Npw7NuLCBsYXMgY29uZGljaW9uZXMgbGFib3JhbGVzLCBsYSBleHBlcmllbmNpYSBvIGxhIGVkYWQuTGFzIHZpc3VhbGl6YWNpb25lcyBvY3VwYXLDoW4gdW4gcGFwZWwgZnVuZGFtZW50YWwsIHB1ZXMgZmFjaWxpdGFyw6FuIGxhIHJlcHJlc2VudGFjacOzbiBncsOhZmljYSBkZSBlc3RhcyByZWxhY2lvbmVzIHkgcGVybWl0aXLDoW4gZXhwbG9yYXIgbG9zIGRhdG9zIGRlIGZvcm1hIGNsYXJhLCBpbnR1aXRpdmEgeSBhY2Nlc2libGUuDQoNClRvZG8gZWwgcHJvY2VzbyBzZSBkZXNhcnJvbGxhcsOhIHV0aWxpemFuZG8gbGFzIGhlcnJhbWllbnRhcyBSIHkgUlN0dWRpbywgcXVlIHBvc2liaWxpdGFuIHVuYSBlamVjdWNpw7NuIGVmaWNpZW50ZSBkZSBsb3MgY8OhbGN1bG9zLCBlbCBtYW5lam8gYWRlY3VhZG8gZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHkgbGEgY3JlYWNpw7NuIGRlIGdyw6FmaWNvcyBkaW7DoW1pY29zIHF1ZSBlbnJpcXVlY2VuIGxhIGludGVycHJldGFjacOzbiBkZSBsb3MgcmVzdWx0YWRvcyBvYnRlbmlkb3MuDQoNCiMjIyAxLjEuIE9iamV0aXZvcw0KDQpFbCBvYmpldGl2byBkZSBlc3RlIHByb3llY3RvIGVzIGFwbGljYXIgdMOpY25pY2FzIGRlIGFuw6FsaXNpcyBkZSBkYXRvcyBwYXJhIGVzdHVkaWFyIGVsIGNvbmp1bnRvIGRlIGRhdG9zICoqSUJNIEhSIEFuYWx5dGljcyBFbXBsb3llZSBBdHRyaXRpb24gJiBQZXJmb3JtYW5jZSoqLCBjb24gZWwgZmluIGRlIGlkZW50aWZpY2FyIHBhdHJvbmVzIHJlbGFjaW9uYWRvcyBjb24gbGEgZGVzZXJjacOzbiAgeSBlbCByZW5kaW1pZW50byBkZSBsb3MgZW1wbGVhZG9zLiBBIHRyYXbDqXMgZGUgZXN0ZSBhbsOhbGlzaXMsIHNlIGJ1c2NhIGZvcnRhbGVjZXIgbGFzIGhhYmlsaWRhZGVzIGVuIGxhIGdlc3Rpw7NuIHkgZXhwbG9yYWNpw7NuIGRlIGluZm9ybWFjacOzbiwgY29udHJpYnV5ZW5kbyBhIGxhIGNvbXByZW5zacOzbiBkZSBsb3MgZmFjdG9yZXMgcXVlIGluZmx1eWVuIGVuIGxhIHByb2R1Y3RpdmlkYWQgeSBsYSB0b21hIGRlIGRlY2lzaW9uZXMgZGVudHJvIGRlIHVuYSBvcmdhbml6YWNpw7NuLiBFc3RlIHRyYWJham8gc2UgZW5tYXJjYSBkZW50cm8gZGVsIGN1cnNvIGRlICoqR2VzdGnDs24gZGUgRGF0b3MqKiBkdXJhbnRlIGVsIHBlcmlvZG8gYWNhZGVtaWNvIDIwMjUtMi4NCg0KIyMjIDEuMi4gRGVzY3JpcGNpw7NuIGRlIGxvcyBkYXRvcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KRWwgY29uanVudG8gZGUgZGF0b3MgZnVlIG9idGVuaWRvIGVuIHN1IHRvdGFsaWRhZCBkZSAqKkthZ2dsZSoqOiAoaHR0cHM6Ly93d3cua2FnZ2xlLmNvbS91bmlhYmhpKS4gS2FnZ2xlIGVzIHVuYSBwbGF0YWZvcm1hIGVuIGzDrW5lYSBkZSBjaWVuY2lhIGRlIGRhdG9zIHkgYXByZW5kaXphamUgYXV0b23DoXRpY28sIHByb3BpZWRhZCBkZSBHb29nbGUgTExDLiBFc3RhIGZhY2lsaXRhIGxhIHBhcnRpY2lwYWNpw7NuIGVuIGNvbXBldGVuY2lhcyBkb25kZSBsYXMgZW1wcmVzYXMgcHVibGljYW4gY29uanVudG9zIGRlIGRhdG9zIHkgcHJvYmxlbWFzLCBwZXJtaXRpZW5kbyBhIGxvcyB1c3VhcmlvcyBkZXNhcnJvbGxhciBtb2RlbG9zIHByZWRpY3Rpdm9zIHkgY29tcGV0aXIuIExhIHBsYXRhZm9ybWEgdGFtYmnDqW4gb2ZyZWNlIG5vdGVib29rcyBwYXJhIGNvbXBhcnRpciB5IGNvbGFib3JhciBlbiBwcm95ZWN0b3MgdXRpbGl6YW5kbyBQeXRob24geSBSLCBhc8OtIGNvbW8gdW5hIGFtcGxpYSBjb2xlY2Npw7NuIGRlIGNvbmp1bnRvcyBkZSBkYXRvcyBkZSBhY2Nlc28gcMO6YmxpY28uIEFkZW3DoXMsIEthZ2dsZSBMZWFybiwgdW5hIHNlY2Npw7NuIGRlIGxhIHBsYXRhZm9ybWEgZGVkaWNhZGEgYSBsYSBlZHVjYWNpw7NuIHkgZWwgYXByZW5kaXphamUgZW4gY2llbmNpYSBkZSBkYXRvcyB5IGFwcmVuZGl6YWplIGF1dG9tw6F0aWNvLCBwcm9wb3JjaW9uYSB0dXRvcmlhbGVzIHkgY3Vyc29zIGludGVyYWN0aXZvcyBlbiB0ZW1hcyBjb21vIFB5dGhvbiwgU1FMLCB2aXN1YWxpemFjacOzbiBkZSBkYXRvcyB5IGFwcmVuZGl6YWplIGF1dG9tw6F0aWNvLCBkaXJpZ2lkb3MgYSBwcmluY2lwaWFudGVzIHkgdXN1YXJpb3MgYXZhbnphZG9zLg0KDQpFc3RlICoqY29uanVudG8gZGUgZGF0b3Mgc29icmUgbGEgZGVzZXJjaW9uIHkgcmVuZGltaWVudG8gZGUgZW1wbGVhZG9zKiosIGZ1ZSBjcmVhZG8gcG9yIGxhIGVtcHJlc2EgSUJNIGNvbiBlbCBvYmpldGl2byBkZSBhbmFsaXphciBsYXMgY2F1c2FzIHBvciBsYXMgcXVlIGxvcyB0cmFiYWphZG9yZXMgZGVqYW4gdW5hIGVtcHJlc2EgeSBsb3MgZmFjdG9yZXMgcXVlIGluZmx1eWVuIGVuIHN1IHJlbmRpbWllbnRvLiBFcyB1biBjb25qdW50byBtdXkgdXNhZG8gZW4gZXN0dWRpb3MgZGUgcmVjdXJzb3MgaHVtYW5vcyB5IGFuw6FsaXNpcyBkZSBkYXRvcyBwb3IgbGEgY2FudGlkYWQgeSB2YXJpZWRhZCBkZSBpbmZvcm1hY2nDs24gcXVlIGNvbnRpZW5lLg0KDQpFc3RlIGNvbmp1bnRvIGRlIGRhdG9zIHNlIHJlbGFjaW9uYSBjb24gbGFzIMOhcmVhczogKiozLiBFbmdpbmVlcmluZyBFY29ub21pYyBBbmFseXNpcyoqKEFuYWxpc2lzIGRlIEluZ2VuaWVyaWEgRWNvbm9taWNhKSwgKio2LiBFcmdvbm9taWNzICYgSHVtYW4gRmFjdG9ycyoqKEVyZ29ub21pYSB5IEZhY3RvcmVzIEh1bWFub3MpLCAqKjcuIE9wZXJhdGlvbnMgRW5naW5lZXJpbmcgJiBNYW5hZ2VtZW50KiooSW5nZW5pZXJpYSBkZSBPcGVyYWNpb25lcyB5IEdlc3Rpw7NuKSAgeSAqKjkuIEVuZ2luZWVyaW5nIE1hbmFnZW1lbnQqKihHZXN0acOzbiBkZSBJbmdlbmlyaWEpIGRlbCAqKklJU0UgQm9keSBvZiBLbm93bGVkZ2UqKi4gRGViaWRvIGEgcXVlIHBlcm1pdGUgYW5hbGl6YXIgZmFjdG9yZXMgZWNvbsOzbWljb3MsIGh1bWFub3MgeSBvcmdhbml6YWNpb25hbGVzIHF1ZSBpbmZsdXllbiBlbiBsYSByb3RhY2nDs24geSBkZXNlbXBlw7FvIGRlIGxvcyBlbXBsZWFkb3MuIFN1IGVzdHVkaW8gYXl1ZGEgYSB0b21hciBkZWNpc2lvbmVzIGVzdHJhdMOpZ2ljYXMgcGFyYSBtZWpvcmFyIGxhIHByb2R1Y3RpdmlkYWQsIGVsIGJpZW5lc3RhciBkZWwgcGVyc29uYWwgeSBsYSBlZmljaWVuY2lhIGVuIGxhIGdlc3Rpw7NuIGRlbCB0YWxlbnRvIGRlbnRybyBkZSBsYSBlbXByZXNhLg0KDQpFbCBjb25qdW50byBkZSBkYXRvcyBDb25zdGEgZGUgMTQ3MCByZWdpc3Ryb3MgZGUgZW1wbGVhZG9zIHkgMzUgdmFyaWFibGVzIHJlbGFjaW9uYWRhcyBjb24gYXNwZWN0b3MgcGVyc29uYWxlcywgbGFib3JhbGVzIHkgZGUgc2F0aXNmYWNjacOzbi4gQWxndW5hcyB2YXJpYWJsZXMgZGVzY3JpYmVuIGxhIGVkYWQsIGVsIHNhbGFyaW8sIGVsIMOhcmVhIGRlIHRyYWJham8sIGxvcyBhw7FvcyBlbiBsYSBlbXByZXNhLCBlbCBuaXZlbCBlZHVjYXRpdm8geSBzaSBlbCBlbXBsZWFkbyBoYSBkZWphZG8gbyBubyBsYSBvcmdhbml6YWNpw7NuLiBBbGd1bm9zIGNhbXBvcyBzb24gZGUgbmF0dXJhbGV6YSBjdWFsaXRhdGl2YSBub21pbmFsIG8gb3JkaW5hbCwgY29tbyBEZXBhcnRtZW50LCBFZHVjYXRpb25GaWVsZCBvIEpvYlJvbGUsIG1pZW50cmFzIHF1ZSBvdHJvcyBzb24gY3VhbnRpdGF0aXZvcyBjb250aW51b3MgbyBkaXNjcmV0b3MsIGNvbW8gQWdlLCBNb250aGx5SW5jb21lIG8gWWVhcnNBdENvbXBhbnkuIExhIHZhcmlhYmxlIEF0dHJpdGlvbiAoU8OtL05vKSBlcyBkZSB0aXBvIGRpY290w7NtaWNhIG5vbWluYWwsIHV0aWxpemFkYSBjb21vIHZhcmlhYmxlIG9iamV0aXZvIGVuIGxhIG1heW9yw61hIGRlIGxvcyBhbsOhbGlzaXMgcHJlZGljdGl2b3MgcXVlIHNlIHJlYWxpemFuIGNvbiBlc3RlIGNvbmp1bnRvLkxhIGxpc3RhIHNpZ3VpZW50ZSBkZXNjcmliZSBsYXMgdmFyaWFibGVzIHByaW5jaXBhbGVzIGRlbCBjb25qdW50byBkZSBkYXRvcyBlbiBlbCBtaXNtbyBvcmRlbiBlbiBxdWUgYXBhcmVjZW4geSBzZSBlc3RhYmxlY2UgcGFyYSBjYWRhIGNhbXBvIGVsIHRpcG8gZGUgdmFyaWFibGUgeSBzdSBlc2NhbGEgZGUgbWVkaWNpw7NuIGNvbiBiYXNlIGVuIGxhIG5vbWVuY2xhdHVyYSAodGlwb19kZV92YXJpYWJsZTo6ZXNjYWxhX2RlX21lZGljacOzbltvcmRlbmFtaWVudG9dKToNCg0KLSAqKkFnZSoqIChjdWFudGl0YXRpdmE6OnJhesOzbik6IEluZGljYSBsYSBlZGFkIGRlbCBlbXBsZWFkbyBlbiBhw7FvcyBjb21wbGV0b3MuDQoNCi0gKipBdHRyaXRpb24qKiAoY3VhbGl0YXRpdmE6Om5vbWluYWwpOiBNdWVzdHJhIHNpIGVsIGVtcGxlYWRvIGRlasOzIGxhIGVtcHJlc2EgKFllcykgbyBjb250aW7DumEgZW4gZWxsYSAoTm8pLg0KDQotICoqRGVwYXJ0bWVudCoqIChjdWFsaXRhdGl2YTo6bm9taW5hbCk6IFNlw7FhbGEgZWwgw6FyZWEgZG9uZGUgdHJhYmFqYSBlbCBlbXBsZWFkbywgY29tbyBTYWxlcywgUmVzZWFyY2ggJiBEZXZlbG9wbWVudCBvIEh1bWFuIFJlc291cmNlcy4NCg0KLSAqKkRpc3RhbmNlRnJvbUhvbWUqKiAoY3VhbnRpdGF0aXZhOjpyYXrDs24pOiBJbmRpY2EgbGEgZGlzdGFuY2lhLCBlbiBraWzDs21ldHJvcywgZW50cmUgbGEgY2FzYSBkZWwgZW1wbGVhZG8geSBsYSBvZmljaW5hLg0KDQotICoqRWR1Y2F0aW9uKiogKGN1YWxpdGF0aXZhOjpvcmRpbmFsKTogUmVwcmVzZW50YSBlbCBuaXZlbCBlZHVjYXRpdm8gYWxjYW56YWRvLCBjb2RpZmljYWRvIGVuIHVuYSBlc2NhbGEgZGVsIDEgYWwgNSwgZG9uZGUgMSBjb3JyZXNwb25kZSBhIOKAnEJlbG93IENvbGxlZ2XigJ0geSA1IGEg4oCcRG9jdG9y4oCdLg0KDQotICoqRWR1Y2F0aW9uRmllbGQqKiAoY3VhbGl0YXRpdmE6Om5vbWluYWwpOiBJbmRpY2EgZWwgY2FtcG8gZGUgZm9ybWFjacOzbiBhY2Fkw6ltaWNhIGRlbCBlbXBsZWFkbywgY29tbyBMaWZlIFNjaWVuY2VzLCBNZWRpY2FsIG8gTWFya2V0aW5nLg0KDQotICoqRW1wbG95ZWVOdW1iZXIqKiAoY3VhbnRpdGF0aXZhOjpub21pbmFsKTogQXNpZ25hIHVuIGPDs2RpZ28gw7puaWNvIGEgY2FkYSBlbXBsZWFkbyBkZW50cm8gZGUgbGEgb3JnYW5pemFjacOzbiwgdXNhZG8gY29tbyBpZGVudGlmaWNhZG9yLg0KDQotICoqR2VuZGVyKiogKGN1YWxpdGF0aXZhOjpub21pbmFsKTogUmVnaXN0cmEgZWwgZ8OpbmVybyBkZWwgZW1wbGVhZG8sIGNsYXNpZmljYWRvIGNvbW8gTWFsZSBvIEZlbWFsZS4NCg0KLSAqKkVudmlyb25tZW50U2F0aXNmYWN0aW9uKiogKGN1YWxpdGF0aXZhOjpvcmRpbmFsKTogTWlkZSBlbCBuaXZlbCBkZSBzYXRpc2ZhY2Npw7NuIGRlbCBlbXBsZWFkbyBjb24gc3UgZW50b3JubyBsYWJvcmFsIChlc2NhbGEgZGVsIDEgYWwgNCkuDQoNCi0gKipKb2JMZXZlbCoqIChjdWFsaXRhdGl2YTo6b3JkaW5hbCk6IFJlcHJlc2VudGEgZWwgbml2ZWwgamVyw6FycXVpY28gZGVudHJvIGRlIGxhIGVtcHJlc2EsIGNvbiB2YWxvcmVzIGRlbCAxIGFsIDUsIGRvbmRlIDEgY29ycmVzcG9uZGUgYSBwdWVzdG9zIG3DoXMgYmFqb3MgeSA1IGEgY2FyZ29zIGRpcmVjdGl2b3MuDQoNCi0gKipKb2JSb2xlKiogKGN1YWxpdGF0aXZhOjpub21pbmFsKTogRGVzY3JpYmUgZWwgY2FyZ28gbyBmdW5jacOzbiBxdWUgZGVzZW1wZcOxYSBlbCBlbXBsZWFkbyBkZW50cm8gZGUgbGEgb3JnYW5pemFjacOzbi4NCg0KLSAqKkpvYlNhdGlzZmFjdGlvbioqIChjdWFsaXRhdGl2YTo6b3JkaW5hbCk6IEV2YWzDumEgZWwgbml2ZWwgZGUgc2F0aXNmYWNjacOzbiBjb24gZWwgdHJhYmFqbywgZW4gdW5hIGVzY2FsYSBkZWwgMSBhbCA0LCBkb25kZSAxIGVzIOKAnExvd+KAnSB5IDQgZXMg4oCcVmVyeSBIaWdo4oCdLg0KDQotICoqTWFyaXRhbFN0YXR1cyoqIChjdWFsaXRhdGl2YTo6bm9taW5hbCk6IEluZGljYSBlbCBlc3RhZG8gY2l2aWwgZGVsIGVtcGxlYWRvIChTaW5nbGUsIE1hcnJpZWQgbyBEaXZvcmNlZCkuDQoNCi0gKipNb250aGx5SW5jb21lKiogKGN1YW50aXRhdGl2YTo6cmF6w7NuKTogUmVwcmVzZW50YSBlbCBzYWxhcmlvIG1lbnN1YWwgZGVsIGVtcGxlYWRvIGVuIGTDs2xhcmVzLg0KDQotICoqT3ZlclRpbWUqKiAoY3VhbGl0YXRpdmE6Om5vbWluYWwpOiBJbmRpY2Egc2kgZWwgZW1wbGVhZG8gdHJhYmFqYSBob3JhcyBleHRyYSAoWWVzL05vKS4NCg0KLSAqKlBlcmZvcm1hbmNlUmF0aW5nKiogKGN1YWxpdGF0aXZhOjpvcmRpbmFsKTogTWlkZSBlbCBkZXNlbXBlw7FvIGRlbCBlbXBsZWFkbyBzZWfDum4gbGEgZW1wcmVzYSwgZW4gdW5hIGVzY2FsYSBkZWwgMSBhbCA0IChkZSDigJxMb3figJ0gYSDigJxPdXRzdGFuZGluZ+KAnSkuDQoNCi0gKipUb3RhbFdvcmtpbmdZZWFycyoqIChjdWFudGl0YXRpdmE6OnJhesOzbik6IE11ZXN0cmEgZWwgdG90YWwgZGUgYcOxb3MgZGUgZXhwZXJpZW5jaWEgbGFib3JhbCBxdWUgdGllbmUgZWwgZW1wbGVhZG8uDQoNCi0gKipZZWFyc0F0Q29tcGFueSoqIChjdWFudGl0YXRpdmE6OnJhesOzbik6IFJlZ2lzdHJhIGxvcyBhw7FvcyBxdWUgZWwgZW1wbGVhZG8gaGEgdHJhYmFqYWRvIGVuIGxhIGVtcHJlc2EgYWN0dWFsLg0KDQotICoqV29ya0xpZmVCYWxhbmNlKiogKGN1YWxpdGF0aXZhOjpvcmRpbmFsKTogRXZhbMO6YSBlbCBlcXVpbGlicmlvIGVudHJlIGxhIHZpZGEgcGVyc29uYWwgeSBsYWJvcmFsIGRlbCBlbXBsZWFkbywgZW4gdW5hIGVzY2FsYSBkZSAxIGEgNC4NCg0KLSAqKlllYXJzU2luY2VMYXN0UHJvbW90aW9uKiogKGN1YW50aXRhdGl2YTo6cmF6w7NuKTogSW5kaWNhIGVsIG7Dum1lcm8gZGUgYcOxb3MgZGVzZGUgZWwgw7psdGltbyBhc2NlbnNvIGRlbCBlbXBsZWFkby4NCg0KIyMjIyBFc3RydWN0dXJhIGRlbCBDb25qdW50byBkZSBEYXRvcyBPcmlnaW5hbA0KDQpgYGB7ciBFc3RydWN0dXJhX2RlbF9Db25qdW50b19kZV9EYXRvc19PcmlnaW5hbCwgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3RyKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX29yaWdpbmFsKQ0KYGBgDQoNCiMjIyMgRXN0cnVjdHVyYSBkZWwgQ29uanVudG8gZGUgRGF0b3MgRVRMDQoNCmBgYHtyIEVzdHJ1Y3R1cmFfZGVsX0Nvbmp1bnRvX2RlX0RhdG9zX0VUTCwgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3RyKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCkNCmBgYA0KDQojIyMgMS4zLiBFc3RpbWFjaW9uZXMgbXVsdGl2YXJpYWRhc3sudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkVsICoqdmVjdG9yIGRlIG1lZGlhcyoqIHkgbGEgKiptYXRyaXogZGUgdmFyaWFuemFzLWNvdmFyaWFuemFzKiogY29uZm9ybWFuIHVuIGNvbmp1bnRvIGRlIGhlcnJhbWllbnRhcyBmdW5kYW1lbnRhbGVzIHBhcmEgZGVzY3JpYmlyIGVsIGNvbXBvcnRhbWllbnRvIHBvc2ljaW9uYWwsIGRpc3BlcnNpdm8geSBjb3JyZWxhY2lvbmFsIGRlIGxhcyB2YXJpYWJsZXMgYWxlYXRvcmlhcyBlbiB1biBjb25qdW50byBkZSBkYXRvcy4gRXN0YXMgbWVkaWRhcyBzb24gZXNlbmNpYWxlcyBlbiBlbCBhbsOhbGlzaXMgbXVsdGl2YXJpYWRvLCBwb3JxdWUgcGVybWl0ZW4gY2FwdHVyYXIgdGFudG8gbGEgdGVuZGVuY2lhIGNlbnRyYWwgY29tbyBsYXMgaW50ZXJkZXBlbmRlbmNpYXMgZW50cmUgbGFzIHZhcmlhYmxlcy4NCg0KRWwgdmVjdG9yIGRlIG1lZGlhcyByZWZsZWphIGVsIHZhbG9yIGVzcGVyYWRvIG8gcHVudG8gbWVkaW8gZGUgY2FkYSB2YXJpYWJsZSwgc2ludGV0aXphbmRvIGxhIGluZm9ybWFjacOzbiBkZSB0b2RvcyBsb3MgcmVnaXN0cm9zIGRpc3BvbmlibGVzIGVuIGVsIGNvbmp1bnRvIGRlIGRhdG9zLiBQb3Igc3UgcGFydGUsIGxhIG1hdHJpeiBkZSB2YXJpYW56YXMtY292YXJpYW56YXMgZGVzY3JpYmUgbGEgdmFyaWFiaWxpZGFkIHkgbGFzIHJlbGFjaW9uZXMgZW50cmUgbGFzIHZhcmlhYmxlcy4gRW4gc3UgZGlhZ29uYWwgcHJpbmNpcGFsLCBlc3RpbWEgbGFzIGRpc3BlcnNpb25lcyBpbmRpdmlkdWFsZXMgZGUgY2FkYSB2YXJpYWJsZSByZXNwZWN0byBhIHN1IG1lZGlhLCBtaWVudHJhcyBxdWUgbG9zIGVsZW1lbnRvcyBwb3IgZW5jaW1hIG8gcG9yIGRlYmFqbyBkZSBlc3RhIGRpYWdvbmFsIHJlcHJlc2VudGFuIGxhcyBjb3ZhcmlhbnphcyBlbnRyZSBwYXJlcyBkZSB2YXJpYWJsZXMsIG1vc3RyYW5kbyBsYXMgcmVsYWNpb25lcyBsaW5lYWxlcyBleGlzdGVudGVzIGVudHJlIGVsbGFzLg0KDQojIyMjIFZlY3RvciBkZSBQcm9tZWRpb3MgeSBCb3hwbG90cw0KDQpgYGB7ciBWZWN0b3JfZGVfUHJvbWVkaW9zX3lfQm94cGxvdHNfMSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQphcHBseShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMyldLCAyLCBtZWFuKQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMX1JlZHVjaWRvID0gZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMWywtYygyLCAzLCA1LCA3LCA4LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMpXQ0Kbm9tYnJlc19ib3hwbG90cyA8LSBjKCJBZ2UiLCAiRGFpbHlSYXRlIiwiRGlzdGFuY2VGcm9tSG9tZSIsICJFbXBsb3llZU51bWJlciIsICJNb250aGx5SW5jb21lIikNCnBhcihtZnJvdyA9IGMoMSwgbmNvbChkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfUmVkdWNpZG8pKSkNCmludmlzaWJsZShsYXBwbHkoMTpuY29sKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTF9SZWR1Y2lkbyksIGZ1bmN0aW9uKGkpIHsNCiAgYm94cGxvdChkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfUmVkdWNpZG9bLCBpXSwNCiAgICAgICAgICBtYWluID0gbm9tYnJlc19ib3hwbG90c1tpXSl9KSkNCmBgYA0KDQpgYGB7ciBWZWN0b3JfZGVfUHJvbWVkaW9zX3lfQm94cGxvdHNfMiwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQphcHBseShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMjAsIDIxLCAyMywgMjQsIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzIsIDMzKV0sIDIsIG1lYW4pDQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfUmVkdWNpZG8gPSBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMjAsIDIxLCAyMywgMjQsIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzIsIDMzKV0NCm5vbWJyZXNfYm94cGxvdHMgPC0gYygiTW9udGhseVJhdGUiLCAiTnVtQ29tcGFuaWVzV29ya2VkIiwgIlBlcmNlbnRTYWxhcnlIaWtlIiwgIlRvdGFsV29ya2luZ1llYXJzIiwgIlllYXJzQXRDb21wYW55IikNCnBhcihtZnJvdyA9IGMoMSwgbmNvbChkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfUmVkdWNpZG8pKSkNCmludmlzaWJsZShsYXBwbHkoMTpuY29sKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTF9SZWR1Y2lkbyksIGZ1bmN0aW9uKGkpIHsNCiAgYm94cGxvdChkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfUmVkdWNpZG9bLCBpXSwNCiAgICAgICAgICBtYWluID0gbm9tYnJlc19ib3hwbG90c1tpXSl9KSkNCmBgYA0KDQojIyMjIE1hdHJpeiBkZSBWYXJpYW56YXMtQ292YXJpYW56YXMNCg0KYGBge3IgTWF0cml6X2RlX1Zhcmlhbnphc19Db3ZhcmlhbnphcywgZmlnLmFsaWduPSdjZW50ZXInfQ0Kcm91bmQoY292KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFssLWMoMiwgMywgNSwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMyLCAzMyldKSwyKQ0KYGBgDQoNCiMjIyMgTWF0cml6IGRlIENvcnJlbGFjaW9uZXMNCmBgYHtyIE1hdHJpel9kZV9Db3JyZWxhY2lvbmVzLCBmaWcuYWxpZ249J2NlbnRlcid9DQpyb3VuZChjb3IoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMWywtYygyLCAzLCA1LCA3LCA4LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMjAsIDIxLCAyMywgMjQsIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzIsIDMzKV0pLDMpDQpgYGANCg0KIyMgDQoNCkNvbiBiYXNlIGVuIGxvcyByZXN1bHRhZG9zIG9idGVuaWRvcywgZXMgcG9zaWJsZSBpbnRlcnByZXRhciBkZSBtYW5lcmEgY29uanVudGEgbGEgZXN0cnVjdHVyYSBpbnRlcm5hIGRlbCBjb25qdW50byBkZSBkYXRvcy4gRWwgdmVjdG9yIGRlIG1lZGlhcyBvZnJlY2UgdW5hIHJlZmVyZW5jaWEgY2xhcmEgZGVsIG5pdmVsIHByb21lZGlvIGRlIGNhZGEgdmFyaWFibGUsIG1pZW50cmFzIHF1ZSBsYSBtYXRyaXogZGUgdmFyaWFuemFzLWNvdmFyaWFuemFzIGV2aWRlbmNpYSBjdcOhbGVzIHZhcmlhYmxlcyBwcmVzZW50YW4gbWF5b3IgZGlzcGVyc2nDs24geSBjdcOhbGVzIHRpZW5kZW4gYSB2YXJpYXIgZW4gY29uanVudG8uIExvcyBib3hwbG90cyBwZXJtaXRlbiBjb25maXJtYXIgdmlzdWFsbWVudGUgZXN0YXMgdmFyaWFjaW9uZXMgZSBpZGVudGlmaWNhciBsYSBwcmVzZW5jaWEgZGUgYXNpbWV0csOtYXMgbyB2YWxvcmVzIGF0w61waWNvcyBxdWUgcHVlZGVuIGluZmx1aXIgZW4gZWwgYW7DoWxpc2lzLiBQb3Igw7psdGltbywgbGEgbWF0cml6IGRlIGNvcnJlbGFjaW9uZXMgcmV2ZWxhIGxhIGludGVuc2lkYWQgZGUgbGFzIHJlbGFjaW9uZXMgZW50cmUgbGFzIHZhcmlhYmxlcywgZGVzdGFjYW5kbyBhcXVlbGxhcyBjb24gYXNvY2lhY2lvbmVzIGZ1ZXJ0ZXMgcXVlIHBvZHLDrWFuIHRlbmVyIHVuIGltcGFjdG8gc2lnbmlmaWNhdGl2byBlbiBlc3R1ZGlvcyBwb3N0ZXJpb3Jlcy4NCg0KIyMjIDEuNC4gR3LDoWZpY2FzIG11bHRpdmFyaWFkYXN7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpFbiBlbCBhbsOhbGlzaXMgbXVsdGl2YXJpYWRvLCBsYXMgcmVwcmVzZW50YWNpb25lcyBncsOhZmljYXMgZGVzZW1wZcOxYW4gdW4gcGFwZWwgZnVuZGFtZW50YWwgcGFyYSBjb21wcmVuZGVyIHNpbXVsdMOhbmVhbWVudGUgbGEgZXN0cnVjdHVyYSB5IGVsIGNvbXBvcnRhbWllbnRvIGRlIHZhcmlhcyB2YXJpYWJsZXMuIEVzdGFzIHZpc3VhbGl6YWNpb25lcyBwZXJtaXRlbiBpZGVudGlmaWNhciBwYXRyb25lcywgcmVsYWNpb25lcyB5IGFncnVwYW1pZW50b3MgcXVlIG5vIHNvbiBldmlkZW50ZXMgbWVkaWFudGUgdGFibGFzIG51bcOpcmljYXMuIEVudHJlIGxhcyBoZXJyYW1pZW50YXMgbcOhcyB1dGlsaXphZGFzIHNlIGVuY3VlbnRyYW4gbG9zIGRpYWdyYW1hcyBjb25qdW50b3MgZGUgZGlzcGVyc2nDs24sIGxhcyBkaXN0cmlidWNpb25lcyBtdWx0aXZhcmlhZGFzLCBsb3MgZ3LDoWZpY29zIGRlIGNvcnJlbGFjacOzbiwgbG9zIGRpYWdyYW1hcyBkZSBlc3RyZWxsYXMgeSBsYXMgY2FyYXMgZGUgQ2hlcm5vZmYuDQoNCiMjIyMgRGlhZ3JhbWEgQ29uanVudG8gZGUgRGlzcGVyc2nDs24sIERpc3RyaWJ1Y2nDs24geSBDb3JyZWxhY2lvbmVzIFtTQV0NCg0KYGBge3IgRGlhZ3JhbWFfQ29uanVudG9fZGVfRGlzcGVyc2lvbl9EaXN0cmlidWNpb25feV9Db3JyZWxhY2lvbmVzX1tTQV0sIGZpZy5hbGlnbj0nY2VudGVyJ30NCmdncGFpcnMoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMWywtYygyLCAzLCA1LCA3LCA4LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMjAsIDIxLCAyMywgMjQsIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzIsIDMzKV0pDQpgYGANCg0KIyMjIyBEaWFncmFtYSBDb25qdW50byBkZSBEaXNwZXJzacOzbiwgRGlzdHJpYnVjacOzbiB5IENvcnJlbGFjaW9uZXMgW0NBOkVGXQ0KDQpgYGB7ciBEaWFncmFtYV9kaXNwZXJzaW9uX0dlbmRlciwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEdlbmRlciA8LSBmYWN0b3IoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEdlbmRlcikNCmxldmVscz0gYyAoMCwxKQ0KbGFiZWxzPSBjICggIkZlbWFsZSIgLCAiTWFsZSIpDQpnZ3BhaXJzKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCwgY29sdW1uID0gYygxLCA0LCA2LCA5KSwgYWVzKGNvbG9yID0gR2VuZGVyLCBhbHBoYSA9IDAuNSksIHVwcGVyID0gbGlzdChjb250aW51b3VzID0gd3JhcCgiY29yIiwgc2l6ZSA9IDIuNSkpKQ0KYGBgDQoNCiMjIyMgRGlhZ3JhbWEgZGUgZXN0cmVsbGFzDQoNCmBgYHtyIERpYWdyYW1hX2RlX2VzdHJlbGxhcywgZmlnLmFsaWduPSdjZW50ZXInfQ0KDQpzZXQuc2VlZCgxMjA1MjIpDQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfTXVlc3RyZWFkbyA9IGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFtzYW1wbGUoMTpucm93KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCksMjMpLC1jKDIsIDMsIDUsIDcsIDgsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMyLCAzMyldDQpzdGFycyhkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfTXVlc3RyZWFkbywgbGVuID0gMSwgY2V4ID0gMC40LCBrZXkubG9jID0gYygxMCwgMiksIGRyYXcuc2VnbWVudHMgPSBUUlVFKQ0KYGBgDQoNCiMjIyMgQ2FyYXMgZGUgY2hlcm5vZmYNCg0KYGBge3IgQ2FyYXNfZGVfY2hlcm5vZmYsIGZpZy5hbGlnbj0nY2VudGVyJ30NCg0Kc2V0LnNlZWQoMTIwNTIyKQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMX011ZXN0cmVhZG8gPSBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwgW3NhbXBsZSgxOm5yb3coZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMKSwyMyksLWMoMiwgMywgNSwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMyLCAzMyldDQpmYWNlcyhkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfTXVlc3RyZWFkbykNCmBgYA0KDQojIw0KDQpBIHBhcnRpciBkZSBsYXMgZ3LDoWZpY2FzIG11bHRpdmFyaWFkYXMgZ2VuZXJhZGFzLCBzZSBsb2dyYSBvYnRlbmVyIHVuYSBjb21wcmVuc2nDs24gbcOhcyBjb21wbGV0YSBkZSBsYSBlc3RydWN0dXJhIGludGVybmEgZGVsIGNvbmp1bnRvIGRlIGRhdG9zLiBFbCBkaWFncmFtYSBjb25qdW50byBkZSBkaXNwZXJzacOzbiBwZXJtaXRpw7MgaWRlbnRpZmljYXIgcmVsYWNpb25lcyBjbGFyYXMgZW50cmUgY2llcnRhcyB2YXJpYWJsZXMsIGFzw60gY29tbyBwb3NpYmxlcyBjb25jZW50cmFjaW9uZXMgbyBwYXRyb25lcyBkZSBhZ3J1cGFtaWVudG8uIExhcyBncsOhZmljYXMgZGUgZGlzdHJpYnVjacOzbiBheXVkYXJvbiBhIGNhcmFjdGVyaXphciBlbCBjb21wb3J0YW1pZW50byBpbmRpdmlkdWFsIGRlIGNhZGEgdmFyaWFibGUsIG1vc3RyYW5kbyBkaWZlcmVuY2lhcyBlbiBzdSBkaXNwZXJzacOzbiB5IHBvc2libGVzIGRlc3ZpYWNpb25lcyByZXNwZWN0byBhIHVuYSBkaXN0cmlidWNpw7NuIHNpbcOpdHJpY2EuIFBvciBvdHJvIGxhZG8sIGVsIGFuw6FsaXNpcyBtZWRpYW50ZSBjb3JyZWxhY2lvbmVzIHZpc3VhbGVzIGZhY2lsaXTDsyBsYSBkZXRlY2Npw7NuIGRlIGFzb2NpYWNpb25lcyBmdWVydGVzIHF1ZSBwb2Ryw61hbiBzZXIgcmVsZXZhbnRlcyBwYXJhIGVzdHVkaW9zIHBvc3RlcmlvcmVzLg0KTG9zIGRpYWdyYW1hcyBkZSBlc3RyZWxsYXMgeSBsYXMgY2FyYXMgZGUgQ2hlcm5vZmYgb2ZyZWNpZXJvbiB1bmEgcGVyc3BlY3RpdmEgY29tcGxlbWVudGFyaWEgYWwgcGVybWl0aXIgY29tcGFyYXIgb2JzZXJ2YWNpb25lcyBjb21wbGV0YXMgZGUgZm9ybWEgc2ltdWx0w6FuZWEsIHJlc2FsdGFuZG8gc2ltaWxpdHVkZXMgeSBkaWZlcmVuY2lhcyBnZW5lcmFsZXMgZW50cmUgbG9zIHBlcmZpbGVzIGFuYWxpemFkb3MuDQoNCiMjIyAxLjUuIE5vcm1hbGlkYWQgbXVsdGl2YXJpYWRhIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyMgUE5NIE1hcmRpYQ0KDQpgYGB7ciBQTk1fTWFyZGlhLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCg0KbWFyZGlhKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFssLWMoMiwgMywgNSwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMyLCAzMyldKQ0KYGBgDQoNCiMjIyMgUE5NIEhlbnplLVppcmtsZXINCg0KYGBge3IgUE5NX0hlbnplX1ppcmtsZXIsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KDQoNCm1oeihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSkNCmBgYA0KDQojIyMjIFBOTSBSb3RhdGlvbmFsIFJvYnVzdCBTaGFwaXJvLVdpbGsNCg0KYGBge3IgUE5NX1JvdGF0aW9uYWxfUm9idXN0X1NoYXBpcm8tV2lsaywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQoNCmZhVGVzdCgoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMWywtYygyLCAzLCA1LCA3LCA4LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMjAsIDIxLCAyMywgMjQsIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzIsIDMzKV0pLCAxMCkNCmBgYA0KDQojIyMjIFBOTSBCb3dtYW4gYW5kIFNoZW50b24NCg0KYGBge3IgUE5NX0Jvd21hbl9TaGVudG9uLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCg0KbXNrKChkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSksIDEwKQ0KYGBgDQoNCg0KIyMgKipGYXNlIDIgW0NvbXBvbmVudGVzIFByaW5jaXBhbGVzXSoqIA0KDQpFbiBlc3RhICoqc2VndW5kYSBmYXNlKiogZGVsIGVzdHVkaW8gc2UgcHJlc2VudGFuIGxvcyBjw6FsY3Vsb3MsIHZpc3VhbGl6YWNpb25lcyBlIGludGVycHJldGFjaW9uZXMgY29ycmVzcG9uZGllbnRlcyBhbCBBbsOhbGlzaXMgZGUgQ29tcG9uZW50ZXMgUHJpbmNpcGFsZXMgKEFDUCksIGFwbGljYWRvcyBhIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyBkZWwgY29uanVudG8gZGUgZGF0b3MgYW5hbGl6YWRvIGVuIGxhIGZhc2UgMSAoI3NlYzEpLg0KDQpFbCBwcm9ww7NzaXRvIGRlIGVzdGEgZXRhcGEgZXMgaWRlbnRpZmljYXIgbGFzIGNvbWJpbmFjaW9uZXMgbGluZWFsZXMgcXVlIG1lam9yIHJlc3VtZW4gbGEgdmFyaWFiaWxpZGFkIGRlIGxvcyBkYXRvcywgZXhhbWluYW5kbyBhc3BlY3RvcyBjb21vIGxhIHNlbGVjY2nDs24gZGUgY29tcG9uZW50ZXMgcmVsZXZhbnRlcywgbGEgY2FsaWRhZCBkZSByZXByZXNlbnRhY2nDs24sIGxhcyBjb250cmlidWNpb25lcyBkZSBsYXMgdmFyaWFibGVzIG9yaWdpbmFsZXMgeSBsYSBpbnRlcnByZXRhY2nDs24gZGUgbG9zIGNvbXBvbmVudGVzIHJlc3VsdGFudGVzIGRlbnRybyBkZWwgY29udGV4dG8gZGVsIHByb2JsZW1hIGVzdHVkaWFkby4NCg0KIyMjIDIuMS4gT2JqZXRpdm9zDQoNCkVsICoqQW7DoWxpc2lzIGRlIENvbXBvbmVudGVzIFByaW5jaXBhbGVzIChBQ1ApKiogdGllbmUgY29tbyBvYmpldGl2byB0cmFuc2Zvcm1hciB1biBjb25qdW50byBkZSB2YXJpYWJsZXMgb3JpZ2luYWxlcyBjb3JyZWxhY2lvbmFkYXMgZW4gdW4gbnVldm8gY29uanVudG8gZGUgdmFyaWFibGVzIG5vIGNvcnJlbGFjaW9uYWRhcyBkZW5vbWluYWRhcyBjb21wb25lbnRlcyBwcmluY2lwYWxlcywgcXVlIHJldGllbmVuIGxhIG1heW9yIHBhcnRlIGRlIGxhIGluZm9ybWFjacOzbiBvcmlnaW5hbC4gQSB0cmF2w6lzIGRlIGVzdGUgcHJvY2Vzbywgc2UgYnVzY2EgcmVkdWNpciBsYSBkaW1lbnNpb25hbGlkYWQgZGVsIGVzcGFjaW8gZGUgbG9zIGRhdG9zLCBlbGltaW5hciByZWR1bmRhbmNpYXMgeSBmYWNpbGl0YXIgbGEgaW50ZXJwcmV0YWNpw7NuIGRlIGxhcyBlc3RydWN0dXJhcyBzdWJ5YWNlbnRlcyBlbiBlbCBjb25qdW50byBkZSBvYnNlcnZhY2lvbmVzLg0KDQpQYXJhIHVuYSBjb21wcmVuc2nDs24gbcOhcyBwcm9mdW5kYSBkZWwgcHJvY2VkaW1pZW50bywgbG9zIGRldGFsbGVzIGRlbCBjb25qdW50byBkZSBkYXRvcyBzZSBlbmN1ZW50cmFuIGVuIGxhIFNlY2Npw7NuIDEuMiAoI3NlYzEuMiksIG1pZW50cmFzIHF1ZSBsb3MgZnVuZGFtZW50b3MgdGXDs3JpY29zIGRlbCBhbsOhbGlzaXMgc2UgZGVzYXJyb2xsYW4gZW4gbGEgRmFzZSAxLiBMYSByZXZpc2nDs24gZGUgZGljaGFzIHNlY2Npb25lcyBwZXJtaXRpcsOhIHVuYSBhcHJlY2lhY2nDs24gaW50ZWdyYWwgZGVsIGVuZm9xdWUgbWV0b2RvbMOzZ2ljbyBpbXBsZW1lbnRhZG8uDQoNCiMjIyAyLjIuIFNlbGVjY2nDs24gZGUgQ29tcG9uZW50ZXMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRW4gZWwgQW7DoWxpc2lzIGRlIENvbXBvbmVudGVzIFByaW5jaXBhbGVzIChBQ1ApLCBsYSBzZWxlY2Npw7NuIGRlIGNvbXBvbmVudGVzIHBlcm1pdGUgcmVkdWNpciBsYSBkaW1lbnNpb25hbGlkYWQgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIGNvbnNlcnZhbmRvIGxhIG1heW9yIHBhcnRlIGRlIGxhIHZhcmlhYmlsaWRhZCBvcmlnaW5hbC4gUGFyYSBlbGxvIHNlIHV0aWxpemFuIGhlcnJhbWllbnRhcyBjb21vIGxhIG1hdHJpeiBkZWwgQUNQLCBsYSBtYXRyaXogZGUgY29ycmVsYWNpb25lcyB5IGxvcyB2YWxvcmVzIHkgdmVjdG9yZXMgcHJvcGlvcy4gTGEgbWF0cml6IGRlIGNvcnJlbGFjaW9uZXMgZXN0YW5kYXJpemEgbGFzIHZhcmlhYmxlcyB5IG11ZXN0cmEgc3VzIHJlbGFjaW9uZXMgaW5pY2lhbGVzLCBtaWVudHJhcyBxdWUgbG9zIHZhbG9yZXMgcHJvcGlvcyBpbmRpY2FuIGxhIGNhbnRpZGFkIGRlIHZhcmlhbnphIGV4cGxpY2FkYSBwb3IgY2FkYSBjb21wb25lbnRlLiBQb3Igc3UgcGFydGUsIGxvcyB2ZWN0b3JlcyBwcm9waW9zIGRldGVybWluYW4gbGFzIGNvbWJpbmFjaW9uZXMgbGluZWFsZXMgcXVlIGdlbmVyYW4gbGFzIG51ZXZhcyBjb21wb25lbnRlcyB5IGRlc2NyaWJlbiBlbCBwZXNvIG8gY29udHJpYnVjacOzbiBkZSBjYWRhIHZhcmlhYmxlIGVuIGVsbGFzLiBFc3RlIHByb2Nlc28gcGVybWl0ZSBpZGVudGlmaWNhciBjdcOhbGVzIGNvbXBvbmVudGVzIHNvbiByZWxldmFudGVzIHkgY3XDoW50YXMgZGViZW4gcmV0ZW5lcnNlIHBhcmEgcmVwcmVzZW50YXIgYWRlY3VhZGFtZW50ZSBsYSBlc3RydWN0dXJhIGRlIGxvcyBkYXRvcy4NCg0KIyMjIyBNYXRyaXogQUNQDQoNCmBgYHtyIE1hdHJpel9BQ1AsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZ2V0X2VpZ2VudmFsdWUoUENBKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFssLWMoMiwgMywgNSwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMyLCAzMyldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSkNCmBgYA0KDQojIyMjIE1hdHJpeiBkZSBDb3JyZWxhY2lvbmVzDQoNCmBgYHtyIE1hdHJpel9kZV9Db3JyZWxhY2lvbmVzX0FDUH0NCnJvdW5kKGNvcihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSksMikNCmBgYA0KDQojIyMjIFZhbG9yZXMgeSBWZWN0b3JlcyBQcm9waW9zDQoNCmBgYHtyIFZhbG9yZXNfeV9WZWN0b3Jlc19Qcm9waW9zLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCg0KDQoNCg0KcHJpbmNvbXAoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMX011ZXN0cmVhZG9bLF0sIGNvciA9IFRSVUUpJHNkZXZeMg0KcHJpbmNvbXAoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMX011ZXN0cmVhZG9bLF0sIGNvciA9IFRSVUUpJGxvYWRpbmdzWyAsMTo1XQ0KYGBgDQoNCmBgYHtyIENpcmN1bG9fZGVfQ29ycmVsYWNpb25lc19BQ1AsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZnZpel9wY2FfdmFyKFBDQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSwgc2NhbGUudW5pdCA9IFQsIGdyYXBoID0gRiksY29sLnZhcj0iIzNCODNCRCIsIHJlcGVsID0gVCwgY29sLmNpcmNsZSA9ICIjQ0RDRENEIiwgZ2d0aGVtZSA9IHRoZW1lX2J3KCkpDQpgYGANCg0KIyMjIDIuMy4gQ2FsaWRhZCBkZSBSZXByZXNlbnRhY2nDs24gIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkVuIGVsIGFuw6FsaXNpcyBkZSBjb21wb25lbnRlcyBwcmluY2lwYWxlcywgbGEgY2FsaWRhZCBkZSByZXByZXNlbnRhY2nDs24gcGVybWl0ZSBldmFsdWFyIHF1w6kgdGFuIGJpZW4gY2FkYSB2YXJpYWJsZSB5IGNhZGEgaW5kaXZpZHVvIHF1ZWRhIHByb3llY3RhZG8gZW4gbG9zIG51ZXZvcyBlamVzIHByaW5jaXBhbGVzLiBFbCBjw61yY3VsbyBkZSBjb3JyZWxhY2lvbmVzIG11ZXN0cmEgY8OzbW8gc2UgcmVsYWNpb25hbiBsYXMgdmFyaWFibGVzIG9yaWdpbmFsZXMgY29uIGxvcyBjb21wb25lbnRlcywgaW5kaWNhbmRvIGN1w6FsZXMgZXN0w6FuIG1lam9yIHJlcHJlc2VudGFkYXMgZW4gZWwgcGxhbm8gZmFjdG9yaWFsLiBMYSBtYXRyaXogZGUgcmVwcmVzZW50YWNpw7NuIHkgbG9zIMOtbmRpY2VzIGRlIGNhbGlkYWQgZGUgcmVwcmVzZW50YWNpw7NuIChjb3PCsikgY3VhbnRpZmljYW4gcXXDqSBwb3JjZW50YWplIGRlIGxhIGluZm9ybWFjacOzbiBkZSBjYWRhIHZhcmlhYmxlIG8gaW5kaXZpZHVvIGVzIGNhcHR1cmFkbyBwb3IgbG9zIGNvbXBvbmVudGVzIHNlbGVjY2lvbmFkb3MuIEZpbmFsbWVudGUsIGxhcyBjb29yZGVuYWRhcyBpbmRpdmlkdWFsZXMgcGVybWl0ZW4gdWJpY2FyIGNhZGEgb2JzZXJ2YWNpw7NuIGVuIGVsIGVzcGFjaW8gcmVkdWNpZG8sIGZhY2lsaXRhbmRvIGxhIGlkZW50aWZpY2FjacOzbiBkZSBwYXRyb25lcywgc2ltaWxpdHVkZXMgbyBhZ3J1cGFtaWVudG9zLg0KDQojIyMjIENpcmN1bG8gZGUgY29ycmVsYWNpb25lcw0KDQpgYGB7ciBDaXJjdWxvX2RlX0NvcnJlbGFjaW9uZXMsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZnZpel9wY2FfdmFyKFBDQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSwgc2NhbGUudW5pdCA9IFQsIGdyYXBoID0gRiksY29sLnZhcj0iIzNCODNCRCIsIHJlcGVsID0gVCwgY29sLmNpcmNsZSA9ICIjQ0RDRENEIiwgZ2d0aGVtZSA9IHRoZW1lX2J3KCkpDQpgYGANCg0KIyMjIyBNYXRyaXogZGUgUmVwcmVzZW50YWNpw7NuDQoNCmBgYHtyIE1hdHJpel9kZV9SZXByZXNzZW50YWNpb25fQ09TMiwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQooZ2V0X3BjYV92YXIoUENBKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFssLWMoMiwgMywgNSwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMyLCAzMyldLCBuY3AgPSA1LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSkpJGNvczINCmBgYA0KDQojIyMjIENhbGlkYWQgZGUgUmVwcmVzZW50YWNpw7NuDQoNCmBgYHtyIENhbGlkYWRfZGVfbGFfUmVwcmVzZW50YWNpb24sIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZnZpel9wY2FfdmFyKFBDQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSwgbmNwID0gNSwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiksIGNvbC52YXI9ImNvczIiLCBncmFkaWVudC5jb2xzPWMoIiMwMEFGQkIiLCIjRTdCODAwIiwiI0ZDNEUwNyIpLCByZXBlbCA9IFRSVUUpDQpgYGANCg0KIyMjIyBDb29yZGVuYWRhcyBJbmRpdmlkdWFsZXMNCg0KYGBge3IgQ29vcmRlbmFkYXNfUmVnaXN0cm9zLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmhlYWQoKFBDQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSwgbmNwID0gNSwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRikpJGluZCRjb29yZCwgbiA9IDIzTCkNCmBgYA0KDQojIw0KDQpFbCBjw61yY3VsbyBkZSBjb3JyZWxhY2lvbmVzIG11ZXN0cmEgcXVlIGxhcyB2YXJpYWJsZXMgWWVhcnNBdENvbXBhbnksIE1vbnRobHlJbmNvbWUsIFRvdGFsV29ya2luZ1llYXJzIHkgQWdlIGVzdMOhbiBmdWVydGVtZW50ZSBhc29jaWFkYXMgY29uIGVsIHByaW1lciBjb21wb25lbnRlIChEaW0xKSwgaW5kaWNhbmRvIHF1ZSBlc3RlIGVqZSBjYXB0dXJhIHVuIHBhdHLDs24gcmVsYWNpb25hZG8gY29uIGxhIGV4cGVyaWVuY2lhIGxhYm9yYWwgeSBlbCBjcmVjaW1pZW50byBwcm9mZXNpb25hbCBkZW50cm8gZGUgbGEgZW1wcmVzYS4gRXN0YXMgdmFyaWFibGVzIHNlIHByb3llY3RhbiBjZXJjYSBkZSBsYSBjaXJjdW5mZXJlbmNpYSwgbG8gcXVlIGluZGljYSB1bmEgYnVlbmEgcmVwcmVzZW50YWNpw7NuIHkgdW5hIGFsdGEgY29ycmVsYWNpw7NuIGNvbiBlc3RlIGNvbXBvbmVudGUuDQpQb3Igb3RybyBsYWRvLCBOdW1Db21wYW5pZXNXb3JrZWQgZXN0w6EgbcOhcyBhc29jaWFkYSBhbCBzZWd1bmRvIGNvbXBvbmVudGUgKERpbTIpLCByZWZsZWphbmRvIHVuIGNvbXBvcnRhbWllbnRvIGRpZmVyZW50ZSBhbCBkZSBsYXMgdmFyaWFibGVzIGRlIGVzdGFiaWxpZGFkIGxhYm9yYWwuIEVuIGNvbnRyYXN0ZSwgdmFyaWFibGVzIGNvbW8gRW1wbG95ZWVOdW1iZXIsIERhaWx5UmF0ZSwgUGVyY2VudFNhbGFyeUhpa2UsIERpc3RhbmNlRnJvbUhvbWUgeSBNb250aGx5UmF0ZSBhcGFyZWNlbiBjZXJjYSBkZWwgY2VudHJvIGRlbCBjw61yY3VsbywgbG8gcXVlIGluZGljYSBxdWUgbm8gZXN0w6FuIGJpZW4gZXhwbGljYWRhcyBwb3IgbG9zIGRvcyBwcmltZXJvcyBjb21wb25lbnRlcyB5IHRpZW5lbiBtZW5vciBhcG9ydGUgYSBsYSB2YXJpYWJpbGlkYWQgY2FwdHVyYWRhIGVuIGVsIHBsYW5vIGZhY3RvcmlhbC4NCg0KIyMjIDIuNC4gQ29udHJpYnVjaW9uZXMgeSBCaXBsb3RzIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkVuIGVsIGFuw6FsaXNpcyBkZSBjb21wb25lbnRlcyBwcmluY2lwYWxlcywgbGFzIGNvbnRyaWJ1Y2lvbmVzIHBlcm1pdGVuIGlkZW50aWZpY2FyIHF1w6kgdmFyaWFibGVzIGluZmx1eWVuIGNvbiBtYXlvciBwZXNvIGVuIGxhIGZvcm1hY2nDs24gZGUgY2FkYSBjb21wb25lbnRlLiBMYSBtYXRyaXogZGUgY29udHJpYnVjaW9uZXMgcmVzdW1lIGVsIHBvcmNlbnRhamUgZGUgYXBvcnRhY2nDs24gZGUgY2FkYSB2YXJpYWJsZSBhIGNhZGEgZGltZW5zacOzbiwgbWllbnRyYXMgcXVlIGxvcyBncsOhZmljb3MgZGUgY29udHJpYnVjacOzbiBtdWVzdHJhbiB2aXN1YWxtZW50ZSBjdcOhbGVzIHZhcmlhYmxlcyBzdXBlcmFuIGVsIHVtYnJhbCBlc3BlcmFkbyAobMOtbmVhIHJvamEpIHksIHBvciBsbyB0YW50bywgc29uIHJlbGV2YW50ZXMgZW4gbGEgaW50ZXJwcmV0YWNpw7NuIGRlIGNhZGEgY29tcG9uZW50ZS4gTG9zIGJpcGxvdHMgY29tcGxlbWVudGFuIGVzdGUgYW7DoWxpc2lzIGFsIHJlcHJlc2VudGFyIHNpbXVsdMOhbmVhbWVudGUgbGFzIHZhcmlhYmxlcyB5IGEgbG9zIGluZGl2aWR1b3MgZW4gZWwgZXNwYWNpbyBkZSBsb3MgY29tcG9uZW50ZXMsIHBlcm1pdGllbmRvIHZpc3VhbGl6YXIgY8OzbW8gc2UgcmVsYWNpb25hbiBhbWJvcyBlbGVtZW50b3MgY29uIGxhcyBudWV2YXMgZGltZW5zaW9uZXMgZ2VuZXJhZGFzLiBFbiBjb25qdW50bywgZXN0YXMgaGVycmFtaWVudGFzIGF5dWRhbiBhIGNvbXByZW5kZXIgbGEgZXN0cnVjdHVyYSBpbnRlcm5hIGRlIGxvcyBkYXRvcyB5IGVsIHBhcGVsIGVzcGVjw61maWNvIHF1ZSBkZXNlbXBlw7FhIGNhZGEgdmFyaWFibGUgZW4gbGEgcmVkdWNjacOzbiBkaW1lbnNpb25hbC4NCg0KIyMjIyBNYXRyaXogZGUgQ29udHJpYnVjaW9uZXMNCg0KYGBge3IgTWF0cml6X2RlX0NvbnRyaWJ1Y2lvbmVzLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCihnZXRfcGNhX3ZhcihQQ0EoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMWywtYygyLCAzLCA1LCA3LCA4LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMjAsIDIxLCAyMywgMjQsIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzIsIDMzKV0sIG5jcCA9IDUsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpKSkkY29udHJpYg0KYGBgDQoNCiMjIyMgQ29udHJpYnVjaW9uZXMgYSBEMQ0KDQpgYGB7ciBDb250cmlidWNpb25lc19ESU1fMSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpmdml6X2NvbnRyaWIoUENBKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFssLWMoMiwgMywgNSwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMyLCAzMyldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSAxLCB0b3AgPSAxMCkNCmBgYA0KDQojIyMjIENvbnRyaWJ1Y2lvbmVzIGEgRDINCg0KYGBge3IgQ29udHJpYnVjaW9uZXNfRElNXzIsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZnZpel9jb250cmliKFBDQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiksIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gMiwgdG9wID0gMTApDQpgYGANCg0KIyMjIyBDb250cmlidWNpb25lcyBhIEQzDQoNCmBgYHtyIENvbnRyaWJ1Y2lvbmVzX0RJTV8zLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmZ2aXpfY29udHJpYihQQ0EoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMWywtYygyLCAzLCA1LCA3LCA4LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMjAsIDIxLCAyMywgMjQsIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzIsIDMzKV0sIG5jcCA9IDYsIHNjYWxlLnVuaXQgPSBUUlVFLCBncmFwaCA9IEYpLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDMsIHRvcCA9IDEwKQ0KYGBgDQoNCiMjIyMgQ29udHJpYnVjaW9uZXMgYSBENA0KDQpgYGB7ciBDb250cmlidWNpb25lc19ESU1fNCwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpmdml6X2NvbnRyaWIoUENBKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFssLWMoMiwgMywgNSwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMyLCAzMyldLCBuY3AgPSA2LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGKSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSA0LCB0b3AgPSAxMCkNCmBgYA0KDQojIyMjIENvbnRyaWJ1Y2lvbmVzIGEgRDUNCg0KYGBge3IgQ29udHJpYnVjaW9uZXNfRElNXzUsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZnZpel9jb250cmliKFBDQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLC1jKDIsIDMsIDUsIDcsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSwgbmNwID0gNiwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiksIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gNSwgdG9wID0gMTApDQpgYGANCg0KIyMjIyBCaXBsb3QgZGUgVmFyaWFibGVzIHkgUmVnaXN0cm9zIFtmaWx0cm86Sm9iSW52b2x2ZW1lbnRdDQoNCmBgYHtyfQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMIDwtIHJlYWRfZXhjZWwoIkU6L1Byb3llY3RvX0dERF8yMDI1LTIvZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLnhsc3giKQ0KDQojIG1pc21hIG11ZXN0cmEgcXVlIHlhIHVzYXMNCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCA8LSBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbDQogIHNhbXBsZSgxOm5yb3coZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMKSwgMTAwKSwNCiAgLWMoMiwgMywgNSwgNywgOCwgMTAsIDExLCAxMywgMTUsIDE2LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgMjUsIDI2LCAyNywgMjgsIDI5LCAzMCwgMzEsIDMyLCAzMykNCl0NCg0KIyAxKSBBc2VndXJhIHF1ZSBKb2JSb2xlIHNlYSBmYWN0b3IgZnVlcmEgZGUgbGEgbWF0cml6DQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkSm9iUm9sZSA8LSBmYWN0b3IoDQogIGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRKb2JSb2xlLA0KICBsZXZlbHMgPSBjKDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkpLA0KICBsYWJlbHMgPSBjKCJIZWFsdGhjYXJlIFJlcHJlc2VudGF0aXZlIiwgIkh1bWFuIFJlc291cmNlcyIsICJMYWJvcmF0b3J5IFRlY2huaWNpYW4iLA0KICAgICAgICAgICAgICJNYW5hZ2VyIiwgIk1hbnVmYWN0dXJpbmcgRGlyZWN0b3IiLCAiUmVzZWFyY2ggRGlyZWN0b3IiLA0KICAgICAgICAgICAgICJSZXNlYXJjaCBTY2llbnRpc3QiLCAiU2FsZXMgRXhlY3V0aXZlIiwgIlNhbGVzIFJlcHJlc2VudGF0aXZlIikNCikNCg0KIyAyKSBDcmVhIHVuIG9iamV0byBzb2xvIGNvbiBsYXMgdmFyaWFibGVzIG51bcOpcmljYXMgcGFyYSBsYSBQQ0ENCmRhdG9zX3BjYSA8LSBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbLCBzYXBwbHkoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLCBpcy5udW1lcmljKV0NCg0KIyAzKSBFamVjdXRhIGxhIFBDQSB5IGVsIGJpcGxvdA0KcmVzX3BjYSA8LSBQQ0EoZGF0b3NfcGNhLCBuY3AgPSA5LCBzY2FsZS51bml0ID0gVFJVRSwgZ3JhcGggPSBGQUxTRSkNCmZ2aXpfcGNhX2JpcGxvdChyZXNfcGNhLCBheGVzID0gYygxLCAyKSwNCiAgICAgICAgICAgICAgICByZXBlbCA9IFRSVUUsDQogICAgICAgICAgICAgICAgaGFiaWxsYWdlID0gZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEpvYlJvbGUpDQoNCmBgYA0KDQojIyMjIEJpcGxvdCBkZSBWYXJpYWJsZXMgeSBSZWdpc3Ryb3MgW2ZpbHRybzpFZHVjYXRpb25dDQoNCmBgYHtyIEJpcGxvdF9kZV9WYXJpYWJsZXNfeV9SZWdpc3Ryb3NfZmlsdHJvX0VkdWNhdGlvbn0NCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCA8LSByZWFkX2V4Y2VsKCJFOi9Qcm95ZWN0b19HRERfMjAyNS0yL2Rlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC54bHN4IikNCg0Kc2V0LnNlZWQoNzgwNzI5KQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMX011ZXN0cmVhZG8gPSBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbc2FtcGxlKDE6bnJvdyhkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwpLDIwMCksLWMoMiwgMywgNSwgOCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjMsIDI0LCAyNSwgMjYsIDI4LCAyOSwgMzEsIDMyLCAzMyldDQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfTXVlc3RyZWFkbyRFZHVjYXRpb24gPC0gZmFjdG9yKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTF9NdWVzdHJlYWRvJEVkdWNhdGlvbiwgbGV2ZWxzID0gYygxLCAyLCAzLCA0LCA1KSwgbGFiZWxzID0gYygicG9jbyIsICJtYXNvbWVub3MiLCAiYWNlcHRhYmxlIiwgIm11Y2hvIiwgImRlbWFzaWFkbyIpKQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMX011ZXN0cmVhZG8kRWR1Y2F0aW9uIDwtIGFzLmZhY3RvcihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfTXVlc3RyZWFkbyRFZHVjYXRpb24pDQpmdml6X3BjYV9iaXBsb3QoUENBKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFssIC1jKDIsIDMsIDUsIDgsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAyMCwgMjEsIDIzLCAyNCwgMjUsIDI2LCAyOCwgMjksIDMxLCAzMiwgMzMpXSwgbmNwID0gNSwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiwgcXVhbGkuc3VwID0gIkVkdWNhdGlvbiIpLCBheGVzID0gYygxLCAyKSwgcmVwZWwgPSBUUlVFLCBoYWJpbGxhZ2UgPSAiRWR1Y2F0aW9uIikNCg0KYGBgDQoNCiMjIyMgQmlwbG90IGRlIFZhcmlhYmxlcyB5IFJlZ2lzdHJvcyBbZmlsdHJvOk4ub2YgTWFqb3IgVmVzc2Vsc10NCg0KYGBge3IgQmlwbG90X2RlX1ZhcmlhYmxlc195X1JlZ2lzdHJvc19maWx0cm9fcmVzdGluZ2VsZWN0cm99DQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwgPC0gcmVhZF9leGNlbCgiRTovUHJveWVjdG9fR0REXzIwMjUtMi9kZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwueGxzeCIpDQpzZXQuc2VlZCg3ODA3MjkpDQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfTXVlc3RyZWFkbyA8LSBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbIHNhbXBsZSgxOm5yb3coZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMKSwgMTUwKSwgLWMoMiwgMywgNSwgNywgOCwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDIwLCAyMSwgMjQsIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzIsIDMzKV0NCg0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFBlcmZvcm1hbmNlUmF0aW5nIDwtIGZhY3RvcigNCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRQZXJmb3JtYW5jZVJhdGluZywNCmxldmVscyA9IGMoMywgNCksDQpsYWJlbHMgPSBjKCJJbnNhdGlzZmVjaG8iLCAiUG9jb1NhdGlzZmVjaG8iKSkNCg0KcGNhX3Jlc3VsdCA8LSBQQ0EoDQogIGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTF9NdWVzdHJlYWRvWywgLXdoaWNoKG5hbWVzKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTF9NdWVzdHJlYWRvKSA9PSAiUGVyZm9ybWFuY2VSYXRpbmciKV0sIA0KICBuY3AgPSA1LCANCiAgc2NhbGUudW5pdCA9IFRSVUUsIA0KICBncmFwaCA9IEZBTFNFLA0KICBxdWFsaS5zdXAgPSB3aGljaChuYW1lcyhkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfTXVlc3RyZWFkbykgPT0gIlBlcmZvcm1hbmNlUmF0aW5nIikNCikNCg0KZnZpel9wY2FfYmlwbG90KFBDQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfTXVlc3RyZWFkb1ssXSwgbmNwID0gNSwgc2NhbGUudW5pdCA9IFRSVUUsIGdyYXBoID0gRiwgcXVhbGkuc3VwID0gd2hpY2gobmFtZXMoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMX011ZXN0cmVhZG8pID09ICJQZXJmb3JtYW5jZVJhdGluZyIpKSwgYXhlcyA9IGMoMSwgMiksIHJlcGVsID0gVFJVRSwgaGFiaWxsYWdlID0gIlBlcmZvcm1hbmNlUmF0aW5nIikNCg0KYGBgDQoNCiMjDQoNCkxhcyBjb250cmlidWNpb25lcyBtdWVzdHJhbiBxdWUgY2FkYSBjb21wb25lbnRlIGRlbCBQQ0EgZXN0w6EgZGV0ZXJtaW5hZG8gcG9yIGdydXBvcyBlc3BlY8OtZmljb3MgZGUgdmFyaWFibGVzLCBsbyBxdWUgZXZpZGVuY2lhIHF1ZSBsYSB2YXJpYWJpbGlkYWQgZGVsIGNvbmp1bnRvIGRlIGRhdG9zIHNlIG9yZ2FuaXphIGVuIGRpZmVyZW50ZXMgZGltZW5zaW9uZXMuIEVsIHByaW1lciBjb21wb25lbnRlIGVzdMOhIGZ1ZXJ0ZW1lbnRlIGluZmx1aWRvIHBvciB2YXJpYWJsZXMgcmVsYWNpb25hZGFzIGNvbiBsYSBleHBlcmllbmNpYSBsYWJvcmFsLCBtaWVudHJhcyBxdWUgbG9zIGNvbXBvbmVudGVzIHBvc3RlcmlvcmVzIHJlZmxlamFuIGluZm9ybWFjacOzbiBtw6FzIG9wZXJhdGl2YSB5IGRlIG1vdmlsaWRhZC4gTG9zIGJpcGxvdHMgY29uZmlybWFuIGVzdGFzIHJlbGFjaW9uZXMgYWwgbW9zdHJhciBjw7NtbyBsYXMgdmFyaWFibGVzIG3DoXMgaW5mbHV5ZW50ZXMgb3JpZW50YW4gbGEgcG9zaWNpw7NuIGRlIGxvcyBpbmRpdmlkdW9zIGVuIGxvcyBwbGFub3MgZmFjdG9yaWFsZXMsIHBlcm1pdGllbmRvIGRpc3Rpbmd1aXIgcGVyZmlsZXMgeSBwYXRyb25lcyBnZW5lcmFsZXMgZGVudHJvIGRlIGxvcyBkYXRvcy4gRXN0b3MgcmVzdWx0YWRvcyBvZnJlY2VuIHVuYSB2aXNpw7NuIGNsYXJhIGRlIHF1w6kgdmFyaWFibGVzIHNvbiBjbGF2ZSBlbiBjYWRhIGRpbWVuc2nDs24geSBjw7NtbyBlc3RydWN0dXJhbiBsYSBkaXN0cmlidWNpw7NuIGRlIGxhcyBvYnNlcnZhY2lvbmVzLg0KDQojIyAqKkZhc2UgMyBbQ29ycmVzcG9uZGVuY2lhc10qKg0KDQpMYSAqKnRlcmNlcmEgZmFzZSoqIGRlbCBlc3R1ZGlvIGFib3JkYSBlbCBBbsOhbGlzaXMgZGUgQ29ycmVzcG9uZGVuY2lhcywgdW5hIHTDqWNuaWNhIGV4cGxvcmF0b3JpYSBkZXN0aW5hZGEgYSByZXByZXNlbnRhciBncsOhZmljYW1lbnRlIGxhcyByZWxhY2lvbmVzIGVudHJlIGNhdGVnb3LDrWFzIGRlIHZhcmlhYmxlcyBjdWFsaXRhdGl2YXMuIEEgdHJhdsOpcyBkZSBlc3RhIG1ldG9kb2xvZ8OtYSwgc2UgYnVzY2EgaWRlbnRpZmljYXIgcGF0cm9uZXMgZGUgYXNvY2lhY2nDs24geSBlc3RydWN0dXJhcyBkZSBzaW1pbGl0dWQgZW50cmUgZmlsYXMgeSBjb2x1bW5hcyBkZSB0YWJsYXMgZGUgY29udGluZ2VuY2lhLCBwZXJtaXRpZW5kbyB1bmEgY29tcHJlbnNpw7NuIHZpc3VhbCB5IGVzdGFkw61zdGljYSBkZSBsYXMgcmVsYWNpb25lcyBlbnRyZSBsYXMgbW9kYWxpZGFkZXMgb2JzZXJ2YWRhcy4NCg0KRXN0YSBmYXNlIGNvbnN0aXR1eWUgdW4gcHVlbnRlIGVudHJlIGxvcyBtw6l0b2RvcyBhcGxpY2Fkb3MgYSB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcyB5IGFxdWVsbG9zIG9yaWVudGFkb3MgYSBsYSBpbnRlcnByZXRhY2nDs24gZGUgZGF0b3MgY2F0ZWfDs3JpY29zLg0KDQojIyMgMy4xLiBPYmpldGl2b3MNCg0KRW4gZXN0YSAqKnRlcmNlcmEgZmFzZSoqLCBzZSBwcmVzZW50YW4gbG9zIGPDoWxjdWxvcywgcmVwcmVzZW50YWNpb25lcyBncsOhZmljYXMgZSBpbnRlcnByZXRhY2lvbmVzIGRlcml2YWRhcyBkZWwgY29uanVudG8gZGUgZGF0b3MgcHJldmlhbWVudGUgdHJhYmFqYWRvIGVuIGxhcyBGYXNlcyAxIHkgMi4gRWwgb2JqZXRpdm8gZXMgYXBsaWNhciBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhcyBzaW1wbGVzIHkgbcO6bHRpcGxlcyBzb2JyZSBsYXMgdmFyaWFibGVzIGN1YWxpdGF0aXZhcywgY29uc3RydXllbmRvIHRhYmxhcyBkZSBjb250aW5nZW5jaWEgeSB0YWJsYXMgZGlzeXVudGl2YXMgY29tcGxldGFzLiBBZGVtw6FzLCBzZSBldmFsdWFyw6FuIGxhcyBjYWxpZGFkZXMgZGUgcmVwcmVzZW50YWNpw7NuLCBsYXMgY29udHJpYnVjaW9uZXMgZGUgbGFzIGNhdGVnb3LDrWFzIHkgbGEgaW50ZXJwcmV0YWNpw7NuIGRlIGxvcyBlamVzIGZhY3RvcmlhbGVzIG9idGVuaWRvcywgY29uIGVsIGZpbiBkZSBjb21wcmVuZGVyIGxhcyByZWxhY2lvbmVzIGVudHJlIGxhcyBtb2RhbGlkYWRlcyBkZSBsYXMgdmFyaWFibGVzLg0KDQojIyMgMy4yLiBDb3JyZXNwb25kZW5jaWFzIFNpbXBsZXMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRW4gZXN0ZSBhcGFydGFkbyBzZSBkZXNhcnJvbGxhIGVsIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWEgc2ltcGxlIGNvbW8gdW5hIHTDqWNuaWNhIGV4cGxvcmF0b3JpYSBxdWUgcGVybWl0ZSBlc3R1ZGlhciBsYSByZWxhY2nDs24gZW50cmUgZG9zIHZhcmlhYmxlcyBjdWFsaXRhdGl2YXMgYSBwYXJ0aXIgZGUgdGFibGFzIGRlIGNvbnRpbmdlbmNpYS4gQSB0cmF2w6lzIGRlbCBjw6FsY3VsbyBkZSBwcm9iYWJpbGlkYWRlcywgZnJlY3VlbmNpYXMgcmVsYXRpdmFzIHBvciBmaWxhcyB5IGNvbHVtbmFzLCBwZXJmaWxlcyB5IHBydWViYXMgZGUgaGlww7N0ZXNpcywgc2UgYnVzY2EgaWRlbnRpZmljYXIgYXNvY2lhY2lvbmVzIHNpZ25pZmljYXRpdmFzIGVudHJlIGxhcyB2YXJpYWJsZXMgYW5hbGl6YWRhcy4gQWRlbcOhcywgc2UgZW1wbGVhIGxhIHJlcHJlc2VudGFjacOzbiBncsOhZmljYSBkZWwgYW7DoWxpc2lzIGRlIGNvcnJlc3BvbmRlbmNpYSBzaW1wbGUsIGNvbnNpZGVyYW5kbyB1bmEgZGltZW5zacOzbiB1bmlkaW1lbnNpb25hbCwgY29uIGVsIGZpbiBkZSBmYWNpbGl0YXIgbGEgaW50ZXJwcmV0YWNpw7NuIGRlIGxvcyByZXN1bHRhZG9zIHkgY29tcHJlbmRlciBtZWpvciBsYSBlc3RydWN0dXJhIGRlIGxvcyBkYXRvcy4NCg0KIyMjIyBBQyBQYXJlamFzIFRvdGFsZXMgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KIyMjIyMgQ29udGluZ2VuY2lhcw0KDQpgYGB7ciBUYWJsYXNfZGVfQ29udGluZ2VuY2lhLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmFkZG1hcmdpbnModGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEVkdWNhdGlvbiwgZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFJlbGF0aW9uc2hpcFNhdGlzZmFjdGlvbikpDQphZGRtYXJnaW5zKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRKb2JMZXZlbCwgZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFJlbGF0aW9uc2hpcFNhdGlzZmFjdGlvbikpDQphZGRtYXJnaW5zKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRTdG9ja09wdGlvbkxldmVsLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkV29ya0xpZmVCYWxhbmNlKSkNCmBgYA0KDQojIyMjIyBQcm9iYWJpbGlkYWRlcw0KDQpgYGB7ciBUYWJsYXNfZGVfUHJvYmFiaWxpZGFkZXMsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRFZHVjYXRpb24sIGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRSZWxhdGlvbnNoaXBTYXRpc2ZhY3Rpb24pKSoxMDApDQphZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEpvYkxldmVsLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uKSkqMTAwKQ0KYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRTdG9ja09wdGlvbkxldmVsLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkV29ya0xpZmVCYWxhbmNlKSkqMTAwKQ0KYGBgDQoNCiMjIyMjIEZyZWN1ZW5jaWFzIFtDUEYgeSBDUENdDQoNCmBgYHtyIFRhYmxhc19kZV9GcmVjdWVuY2lhc19Db25kaWNpb25hZGFzLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnJvdW5kKGFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkRWR1Y2F0aW9uLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uKSwgMSkqMTAwLCAyKSwgMikNCnJvdW5kKGFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkRWR1Y2F0aW9uLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uKSwgMikqMTAwLCAxKSwgMikNCg0Kcm91bmQoYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRKb2JMZXZlbCwgZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFJlbGF0aW9uc2hpcFNhdGlzZmFjdGlvbiksIDEpKjEwMCwgMiksIDIpDQpyb3VuZChhZGRtYXJnaW5zKHByb3AudGFibGUodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEpvYkxldmVsLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uKSwgMikqMTAwLCAxKSwgMikNCg0Kcm91bmQoYWRkbWFyZ2lucyhwcm9wLnRhYmxlKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRTdG9ja09wdGlvbkxldmVsLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkV29ya0xpZmVCYWxhbmNlKSwgMSkqMTAwLCAyKSwgMikNCnJvdW5kKGFkZG1hcmdpbnMocHJvcC50YWJsZSh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkU3RvY2tPcHRpb25MZXZlbCwgZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFdvcmtMaWZlQmFsYW5jZSksIDIpKjEwMCwgMSksIDIpDQpgYGANCg0KIyMjIyMgUGVyZmlsZXMgW0NQRiB5IENQQ10NCg0KYGBge3IgR3JhZmljb3NfZGVfUGVyZmlsZXMsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KcGxvdGN0KHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRFZHVjYXRpb24sIGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRSZWxhdGlvbnNoaXBTYXRpc2ZhY3Rpb24pLCJyb3ciKQ0KcGxvdGN0KHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRFZHVjYXRpb24sIGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRSZWxhdGlvbnNoaXBTYXRpc2ZhY3Rpb24pLCJjb2wiKQ0KDQpwbG90Y3QodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEpvYkxldmVsLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uKSwicm93IikNCnBsb3RjdCh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkSm9iTGV2ZWwsIGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRSZWxhdGlvbnNoaXBTYXRpc2ZhY3Rpb24pLCJjb2wiKQ0KDQpwbG90Y3QodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFN0b2NrT3B0aW9uTGV2ZWwsIGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRXb3JrTGlmZUJhbGFuY2UpLCJyb3ciKQ0KcGxvdGN0KHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRTdG9ja09wdGlvbkxldmVsLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkV29ya0xpZmVCYWxhbmNlKSwiY29sIikNCmBgYA0KDQojIyMjIyBQcnVlYmFzIGRlIEhpcMOzdGVzaXMNCg0KYGBge3IgUHJ1ZWJhc19kZV9Db3JyZXNwb25kZW5jaWEsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KY2hpc3EudGVzdCh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkRWR1Y2F0aW9uLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uKSkNCmNoaXNxLnRlc3QodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEpvYkxldmVsLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uKSkNCmNoaXNxLnRlc3QodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFRvdGFsV29ya2luZ1llYXJzLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkV29ya0xpZmVCYWxhbmNlKSkNCmBgYA0KDQojIyMjIEFDIFBhcmVqYSDDmm5pY2Egey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KIyMjIyMgQ29udGluZ2VuY2lhcyB5IFJlc2lkdWFsZXMgW1QtQ1BdDQoNCmBgYHtyIENvbnRpbmdlbmNpYXNfeV9SZXNpZHVhbGVzLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmNoaXNxLnRlc3QodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFJlbGF0aW9uc2hpcFNhdGlzZmFjdGlvbixkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkU3RvY2tPcHRpb25MZXZlbCkpJG9ic2VydmVkDQpjaGlzcS50ZXN0KHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRSZWxhdGlvbnNoaXBTYXRpc2ZhY3Rpb24sZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFN0b2NrT3B0aW9uTGV2ZWwpKSRleHBlY3RlZCANCmNoaXNxLnRlc3QodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFJlbGF0aW9uc2hpcFNhdGlzZmFjdGlvbixkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkU3RvY2tPcHRpb25MZXZlbCkpJHJlc2lkdWFscw0KY2hpc3EudGVzdCh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uLGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRTdG9ja09wdGlvbkxldmVsKSkkc3RkcmVzDQpgYGANCg0KIyMjIyMgQ29udHJpYnVjaW9uZXMgW1QtQ1BdDQoNCmBgYHtyIENvbnRyaWJ1Y2lvbmVzX1ItVVIsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KY2hpc3EudGVzdCh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uLGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRTdG9ja09wdGlvbkxldmVsKSkkcmVzaWR1YWxzXjIvY2hpc3EudGVzdCh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkUmVsYXRpb25zaGlwU2F0aXNmYWN0aW9uLGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRTdG9ja09wdGlvbkxldmVsKSkkc3RhdGlzdGljKjEwMA0KYGBgDQoNCiMjIyMjIENvcnJlc3BvbmRlbmNpYSBTaW1wbGUgVW5pZGltZW5zaW9uYWwgW1ItVVJdDQoNCmBgYHtyIEJpcGxvdF9Db3JyZXNwb25kZW5jaWFfU2ltcGxlX1ItVVIsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KQ0EodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFJlbGF0aW9uc2hpcFNhdGlzZmFjdGlvbixkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkU3RvY2tPcHRpb25MZXZlbCksIGdyYXBoID0gRkFMU0UpJGVpZw0KQ0EodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFJlbGF0aW9uc2hpcFNhdGlzZmFjdGlvbixkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkU3RvY2tPcHRpb25MZXZlbCksIGdyYXBoID0gRkFMU0UpJGNvbA0KQ0EodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFJlbGF0aW9uc2hpcFNhdGlzZmFjdGlvbixkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkU3RvY2tPcHRpb25MZXZlbCksIGdyYXBoID0gRkFMU0UpJHJvdw0KYGBgDQoNCiMjDQoNCkVsIGFuw6FsaXNpcyBkZSBjb3JyZXNwb25kZW5jaWEgc2ltcGxlIHBlcm1pdGnDsyBpZGVudGlmaWNhciBwYXRyb25lcyBkZSBhc29jaWFjacOzbiBlbnRyZSBsYXMgdmFyaWFibGVzIGN1YWxpdGF0aXZhcyBlc3R1ZGlhZGFzLCBldmlkZW5jaWFuZG8gcXXDqSBjYXRlZ29yw61hcyBwcmVzZW50YW4gbWF5b3IgcmVsYWNpw7NuIGVudHJlIHPDrS4gRWwgdXNvIGRlIHBlcmZpbGVzLCBjb250cmlidWNpb25lcyB5IHJlcHJlc2VudGFjaW9uZXMgZ3LDoWZpY2FzIGZhY2lsaXTDsyBsYSBpbnRlcnByZXRhY2nDs24gZGUgbG9zIHJlc3VsdGFkb3MsIHBlcm1pdGllbmRvIHZpc3VhbGl6YXIgZGUgbWFuZXJhIGNsYXJhIGxhcyBkaXN0YW5jaWFzIHkgc2ltaWxpdHVkZXMgZW50cmUgY2F0ZWdvcsOtYXMuIEVuIGdlbmVyYWwsIGVzdGEgdMOpY25pY2EgcmVzdWx0w7Mgw7p0aWwgcGFyYSByZXN1bWlyIGxhIGluZm9ybWFjacOzbiBjb250ZW5pZGEgZW4gbGEgdGFibGEgZGUgY29udGluZ2VuY2lhIHkgYXBvcnRhciB1bmEgdmlzacOzbiBtw6FzIGNsYXJhIGRlbCBjb21wb3J0YW1pZW50byBkZSBsYXMgdmFyaWFibGVzIGFuYWxpemFkYXMuDQoNCiMjIyAzLjMuIENvcnJlc3BvbmRlbmNpYXMgTcO6bHRpcGxlcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpFbiBlc3RhIHNlY2Npw7NuIHNlIGFwbGljYSBlbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhIG3Dumx0aXBsZSAoQUNNKSwgZWwgY3VhbCBwZXJtaXRlIGVzdHVkaWFyIGRlIG1hbmVyYSBjb25qdW50YSB2YXJpYXMgdmFyaWFibGVzIGN1YWxpdGF0aXZhcy4gRXN0YSB0w6ljbmljYSBmYWNpbGl0YSBsYSByZWR1Y2Npw7NuIGRlIGxhIGRpbWVuc2lvbmFsaWRhZCBkZSBsb3MgZGF0b3MgeSBsYSBpZGVudGlmaWNhY2nDs24gZGUgcmVsYWNpb25lcyBlbnRyZSBjYXRlZ29yw61hcywgdXRpbGl6YW5kbyBoZXJyYW1pZW50YXMgY29tbyBlbCBiaXBsb3QgZGVsIEFDTSwgbGEgY2FsaWRhZCBkZSByZXByZXNlbnRhY2nDs24geSBsYXMgY29udHJpYnVjaW9uZXMgZGUgY2FkYSB2YXJpYWJsZS4gRWwgb2JqZXRpdm8gcHJpbmNpcGFsIGVzIG9idGVuZXIgdW5hIHJlcHJlc2VudGFjacOzbiBncsOhZmljYSBxdWUgc2ludGV0aWNlIGxhIGluZm9ybWFjacOzbiB5IGZhY2lsaXRlIHN1IGludGVycHJldGFjacOzbi4NCg0KIyMjIyBBQ00NCg0KYGBge3J9DQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwgPC0gcmVhZF9leGNlbCgiRTovUHJveWVjdG9fR0REXzIwMjUtMi9kZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwueGxzeCIpDQoNCg0Kc2V0LnNlZWQoNzgwNzI5KQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLmFjdGl2ZSA8LWRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFtzYW1wbGUoMTpucm93KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCksIDEwKSwgNzoxMl0NCg0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLmFjdGl2ZVtdIDwtbGFwcGx5KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC5hY3RpdmUsIGZhY3RvcikNCg0KcmVzLmFjbSA8LSB0cnlDYXRjaCgNCk1DQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwuYWN0aXZlLCBncmFwaCA9IEZBTFNFLCBuY3AgPSA1KSwNCmVycm9yID0gZnVuY3Rpb24oZSkgew0KbWVzc2FnZSgiRXJyb3IgZW4gTUNBOiAiLCBlJG1lc3NhZ2UpDQpyZXR1cm4oTlVMTCl9KQ0KDQppZiAoIWlzLm51bGwocmVzLmFjbSkpIHtzdXBwcmVzc1dhcm5pbmdzKHJvdW5kKHJlcy5hY20kZWlnLCAzKSl9DQpgYGANCg0KIyMjIyBCaXBsb3QgQUNNDQoNCmBgYHtyIEJpcGxvdF9BQ00sIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMIDwtIHJlYWRfZXhjZWwoIkU6L1Byb3llY3RvX0dERF8yMDI1LTIvZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLnhsc3giKQ0KDQoNCnNldC5zZWVkKDc4MDcyOSkNCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC5hY3RpdmUgPC1kZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbc2FtcGxlKDE6bnJvdyhkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwpLCAzMCksIDc6MTJdDQoNCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC5hY3RpdmVbXSA8LWxhcHBseShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwuYWN0aXZlLCBmYWN0b3IpDQpyZXMubWNhIDwtIE1DQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwuYWN0aXZlLCBncmFwaCA9IEZBTFNFKQ0KDQpmdml6X21jYV9iaXBsb3QocmVzLm1jYSwgcmVwZWwgPSBUUlVFLCBjb2wudmFyID0gIiNFN0I4MDAiLCBhZGRFbGxpcHNlcyA9IFRSVUUsIGVsbGlwc2UubGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCiMjIyMgQ2FsaWRhZCBkZSBSZXByZXNlbnRhY2nDs24NCg0KYGBge3IgQ2FsaWRhZF9kZV9SZXByZXNlbnRhY2lvbl9BQ00sIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMIDwtIHJlYWRfZXhjZWwoIkU6L1Byb3llY3RvX0dERF8yMDI1LTIvZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLnhsc3giKQ0KDQoNCnNldC5zZWVkKDc4MDcyOSkNCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC5hY3RpdmUgPC1kZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExbc2FtcGxlKDE6bnJvdyhkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwpLCAzMCksIDc6MTJdDQoNCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC5hY3RpdmVbXSA8LWxhcHBseShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwuYWN0aXZlLCBmYWN0b3IpDQoNCnJlcy5tY2EgPC0gTUNBKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC5hY3RpdmUsIGdyYXBoID0gRkFMU0UpDQoNCg0KZnZpel9tY2FfdmFyKHJlcy5tY2EsIGNvbC52YXIgPSJjb3MyIiwgZ3JhZGllbnQuY29scyA9IGMoIiMwMEFGQkIiLCAiI0U3QjgwMCIsICIjRkM0RTA3IiksIHJlcGVsID0gVFJVRSkNCg0KcmVzLm1jYSR2YXIkY29zMg0KYGBgDQoNCiMjIyMgQ29udHJpYnVjaW9uZXMNCg0KYGBge3IgQ29udHJpYnVjaW9uZXNfQUNNLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCA8LSByZWFkX2V4Y2VsKCJFOi9Qcm95ZWN0b19HRERfMjAyNS0yL2Rlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC54bHN4IikNCg0KDQpzZXQuc2VlZCg3ODA3MjkpDQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwuYWN0aXZlIDwtZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMW3NhbXBsZSgxOm5yb3coZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMKSwgMzApLCA3OjEyXQ0KDQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwuYWN0aXZlW10gPC1sYXBwbHkoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLmFjdGl2ZSwgZmFjdG9yKQ0KDQpyZXMubWNhIDwtIE1DQShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwuYWN0aXZlLCBncmFwaCA9IEZBTFNFKQ0KDQpmdml6X2NvbnRyaWIocmVzLm1jYSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSAxLCB0b3AgPSAxNSkNCmZ2aXpfY29udHJpYihyZXMubWNhLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDIsIHRvcCA9IDE1KQ0KZnZpel9jb250cmliKHJlcy5tY2EsIGNob2ljZSA9ICJ2YXIiLCBheGVzID0gMywgdG9wID0gMTUpDQpmdml6X2NvbnRyaWIocmVzLm1jYSwgY2hvaWNlID0gInZhciIsIGF4ZXMgPSA0LCB0b3AgPSAxNSkNCmZ2aXpfY29udHJpYihyZXMubWNhLCBjaG9pY2UgPSAidmFyIiwgYXhlcyA9IDUsIHRvcCA9IDE1KQ0KYGBgDQoNCiMjIyMgQmlwbG90IGNvbiBDb250cmlidWNpb25lcw0KDQpgYGB7ciBCaXBsb3RfY29uX0NvbnRyaWJ1Y2lvbmVzX0FDTSwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwgPC0gcmVhZF9leGNlbCgiRTovUHJveWVjdG9fR0REXzIwMjUtMi9kZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwueGxzeCIpDQoNCg0Kc2V0LnNlZWQoNzgwNzI5KQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLmFjdGl2ZSA8LWRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTFtzYW1wbGUoMTpucm93KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCksIDMwKSwgNzoxMl0NCg0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLmFjdGl2ZVtdIDwtbGFwcGx5KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTC5hY3RpdmUsIGZhY3RvcikNCg0KcmVzLm1jYSA8LSBNQ0EoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLmFjdGl2ZSwgZ3JhcGggPSBGQUxTRSkNCg0KZnZpel9tY2FfdmFyKHJlcy5tY2EsIGNvbC52YXIgPSJjb250cmliIiwgZ3JhZGllbnQuY29scyA9IGMoIiMwMEFGQkIiLCAiI0U3QjgwMCIsICIjRkM0RTA3IiksIHJlcGVsID0gVFJVRSkNCmBgYA0KDQojIw0KDQpFbCBhbsOhbGlzaXMgZGUgY29ycmVzcG9uZGVuY2lhIG3Dumx0aXBsZSBwZXJtaXRpw7MgaWRlbnRpZmljYXIgYXNvY2lhY2lvbmVzIHJlbGV2YW50ZXMgZW50cmUgbGFzIGRpZmVyZW50ZXMgdmFyaWFibGVzIGN1YWxpdGF0aXZhcyBjb25zaWRlcmFkYXMsIGFzw60gY29tbyB2aXN1YWxpemFyIHBhdHJvbmVzIGNvbXVuZXMgZGVudHJvIGRlIGxvcyBkYXRvcy4gTG9zIGJpcGxvdHMgeSBlbCBhbsOhbGlzaXMgZGUgbGFzIGNvbnRyaWJ1Y2lvbmVzIGZhY2lsaXRhcm9uIGxhIGludGVycHJldGFjacOzbiBkZSBsYSBpbmZsdWVuY2lhIGRlIGNhZGEgdmFyaWFibGUgZW4gbGEgY29uc3RydWNjacOzbiBkZSBsYXMgZGltZW5zaW9uZXMgcHJpbmNpcGFsZXMuIEVuIGNvbmp1bnRvLCBlbCBBQ00gcmVzdWx0w7MgdW5hIGhlcnJhbWllbnRhIGVmaWNheiBwYXJhIGV4cGxvcmFyIHkgcmVzdW1pciBsYSBpbmZvcm1hY2nDs24gY2F0ZWfDs3JpY2EgZGUgbGEgYmFzZSBkZSBkYXRvcy4NCg0KIyMgKipGYXNlIDQgW0Nvbmdsb21lcmFkb3NdKioNCg0KRW4gZXN0YSAqKmN1YXJ0YSBmYXNlKiogZGVsIGVzdHVkaW8sIHNlIHByZXNlbnRhbiBsb3MgY8OhbGN1bG9zLCB2aXN1YWxpemFjaW9uZXMgZSBpbnRlcnByZXRhY2lvbmVzIG9idGVuaWRhcyBhIHBhcnRpciBkZWwgY29uanVudG8gZGUgZGF0b3MgcHJvY2VzYWRvIGVuIGxhcyBmYXNlcyAxLCAyIHkgMy4NCkVsIGVuZm9xdWUgcHJpbmNpcGFsIGNvcnJlc3BvbmRlIGFsIEFuw6FsaXNpcyBkZSBDb25nbG9tZXJhZG9zLCB0YW50byBlbiBzdSB2ZXJzacOzbiBqZXLDoXJxdWljYSwgcmVwcmVzZW50YWRhIG1lZGlhbnRlIGRlbmRyb2dyYW1hcywgY29tbyBlbiBzdSBtb2RhbGlkYWQgbm8gamVyw6FycXVpY2EsIGltcGxlbWVudGFkYSBtZWRpYW50ZSBlbCBhbGdvcml0bW8gZGUgSy1tZWRpYXMuDQpFbCBvYmpldGl2byBnZW5lcmFsIGVzIGRldGVybWluYXIgbGEgZXhpc3RlbmNpYSBkZSBhZ3J1cGFjaW9uZXMgbmF0dXJhbGVzIGRlbnRybyBkZSBsb3MgZGF0b3MsIGFuYWxpemFyIHN1IGNvbnNpc3RlbmNpYSBpbnRlcm5hIHkgZGVzY3JpYmlyIGxhcyBjYXJhY3RlcsOtc3RpY2FzIGRlIGNhZGEgZ3J1cG8gaWRlbnRpZmljYWRvLg0KDQoNCiMjIyA0LjEuIE9iamV0aXZvcw0KDQpMYSAqKmN1YXJ0YSBmYXNlKiogZGVsIGVzdHVkaW8gc2UgY2VudHJhIGVuIGVsICoqQW7DoWxpc2lzIGRlIENvbmdsb21lcmFkb3MqKiwgdW5hIHTDqWNuaWNhIGRlIGNsYXNpZmljYWNpw7NuIGN1eW8gcHJvcMOzc2l0byBlcyBhZ3J1cGFyIGluZGl2aWR1b3MgdSBvYnNlcnZhY2lvbmVzIGVuIGZ1bmNpw7NuIGRlIHN1IHNpbWlsaXR1ZCByZXNwZWN0byBhIHVuIGNvbmp1bnRvIGRlIHZhcmlhYmxlcy4gTWVkaWFudGUgZWwgdXNvIGRlIGFsZ29yaXRtb3MgamVyw6FycXVpY29zIHkgbm8gamVyw6FycXVpY29zLCBzZSBidXNjYSBpZGVudGlmaWNhciBlc3RydWN0dXJhcyBuYXR1cmFsZXMgZW4gbG9zIGRhdG9zLCBwZXJtaXRpZW5kbyBkZWZpbmlyIGdydXBvcyBob21vZ8OpbmVvcyBpbnRlcm5hbWVudGUgeSBoZXRlcm9nw6luZW9zIGVudHJlIHPDrS4NCg0KRXN0YSBldGFwYSBjb21wbGVtZW50YSBsYXMgZmFzZXMgYW50ZXJpb3JlcyBhbCBmYWNpbGl0YXIgbGEgc2VnbWVudGFjacOzbiB5IGNhcmFjdGVyaXphY2nDs24gZGUgbG9zIGluZGl2aWR1b3MgbyB1bmlkYWRlcyBkZSBhbsOhbGlzaXMuDQoNCiMjIyA0LjIuIEFncnVwYWNpw7NuIEplcsOhcnF1aWNhIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkVuIGVzdGUgYXBhcnRhZG8gc2UgZGVzYXJyb2xsYSBsYSB0w6ljbmljYSBkZSBhZ3J1cGFjacOzbiBqZXLDoXJxdWljYSwgbGEgY3VhbCBwZXJtaXRlIGNsYXNpZmljYXIgYSBsb3MgZW1wbGVhZG9zIGVuIGdydXBvcyBob21vZ8OpbmVvcyBhIHBhcnRpciBkZSBtZWRpZGFzIGRlIGRpc2ltaWxhcmlkYWQuIFNlIGFuYWxpemEgZWwgY2FtcG8gY2xhc2lmaWNhZG9yIHkgc2UgYXBsaWNhbiBkaXN0aW50b3MgbcOpdG9kb3MgZGUgZW5sYWNlLCBjb21vIHVuacOzbiBzaW1wbGUsIGNvbXBsZXRhIHkgcHJvbWVkaW8sIGp1bnRvIGNvbiBsYSBvcHRpbWl6YWNpw7NuIGRlIE1vamVuYS4gRWwgcHJvY2VzbyBzZSBhcG95YSBlbiBsYSBjb25zdHJ1Y2Npw7NuIGUgaW50ZXJwcmV0YWNpw7NuIGRlIGRlbmRyb2dyYW1hcyBvcHRpbWl6YWRvcywgY29uIGVsIGZpbiBkZSBpZGVudGlmaWNhciBsYSBlc3RydWN0dXJhIGplcsOhcnF1aWNhIGRlIGxvcyBkYXRvcy4NCg0KIyMjIyBDYW1wbyBDbGFzaWZpY2Fkb3INCmBgYHtyIENhbXBvX0NsYXNpZmljYWRvciwgZmlnLmFsaWduPSdjZW50ZXInfQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMIDwtIHJlYWRfZXhjZWwoIkU6L1Byb3llY3RvX0dERF8yMDI1LTIvZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLnhsc3giKQ0KaGVhZChhcy5kYXRhLmZyYW1lKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCkpDQpgYGANCg0KIyMjIyBEaXNpbWlsYXJpZGFkIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCmBgYHtyIERpc2ltaWxhcmlkYWQsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmRhdGFfID0gYXMuZGF0YS5mcmFtZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfTXVlc3RyZWFkbylbLCAtYygyLCAzLCA1LCA4LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAxNiwgMjAsIDIxLCAyMywgMjQsIDI1LCAyNiwgMjgsIDI5LCAzMSwgMzIsIDMzKV0NCnJvd25hbWVzKGRhdGFfKSA9IHVuY2xhc3MoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMX011ZXN0cmVhZG8kR2VuZGVyKQ0KZnZpel9kaXN0KGdldF9kaXN0KGRhdGFfLCBzdGFuZCA9IFQsIG1ldGhvZCA9ICJldWNsaWRlYW4iKSwgZ3JhZGllbnQgPSBsaXN0KGxvdyA9ICIjMDBBRkJCIiwgbWlkID0gIndoaXRlIiwgaGlnaCA9ICIjRkM0RTA3IikpDQpgYGANCg0KIyMjIyMgT3B0aW1pemFjacOzbiBkZSBNb2plbmEgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KIyMjIyMjIFVuacOzbiBTaW1wbGUNCmBgYHtyIFVuaW9uX3NpbXBsZSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KaGNfc2luZ2xlID0gaGNsdXN0KGdldF9kaXN0KGRhdGFfLCBzdGFuZCA9IFQsIG1ldGhvZCA9ICJldWNsaWRlYW4iKSwgbWV0aG9kID0gInNpbmdsZSIpDQoNCm1vamVuYSA9IGZ1bmN0aW9uKGhjKXsNCiAgbl9oZCA9IGxlbmd0aChoYyRoZWlnaHQpDQogIGFscF9nID0gMCA7IGFscGhhID0gaGMkaGVpZ2h0W25faGQ6MV0NCiAgZm9yKGkgaW4gMToobl9oZC0xKSl7DQogICAgYWxwX2dbaV0gPSBtZWFuKGFscGhhWyhuX2hkLWkrMSk6MV0pKzEuMjUqc2QoYWxwaGFbKG5faGQtaSsxKToxXSkNCiAgfQ0KICBub2cgPSBzdW0oYWxwX2c8PSBhbHBoYVstbl9oZF0pICsgMQ0KICBwbG90KGFscGhhWy1uX2hkXSwgcGNoPTIwLCBjb2w9KGFscF9nPmFscGhhWy1uX2hkXSkrMSwgbWFpbiA9IHBhc3RlKCJPcHRpbWFsIG51bWJlciBvZiBncm91cHMgPSIsbm9nKSwNCiAgICAgICB5bGFiID0gZXhwcmVzc2lvbihhbHBoYVtnXSksIHhsYWI9Ik5vZGVzIil9DQptb2plbmEoaGNfc2luZ2xlKQ0KDQpgYGANCg0KDQojIyMjIyMgVW5pw7NuIENvbXBsZXRhDQpgYGB7ciBVbmlvbl9Db21wbGV0YSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KaGNfY29tcGxldGUgPSBoY2x1c3QoZ2V0X2Rpc3QoZGF0YV8sIHN0YW5kID0gVCwgbWV0aG9kID0gImV1Y2xpZGVhbiIpLCBtZXRob2QgPSAiY29tcGxldGUiKQ0KDQptb2plbmEgPSBmdW5jdGlvbihoYyl7DQogIG5faGQgPSBsZW5ndGgoaGMkaGVpZ2h0KQ0KICBhbHBfZyA9IDAgOyBhbHBoYSA9IGhjJGhlaWdodFtuX2hkOjFdDQogIGZvcihpIGluIDE6KG5faGQtMSkpew0KICAgIGFscF9nW2ldID0gbWVhbihhbHBoYVsobl9oZC1pKzEpOjFdKSsxLjI1KnNkKGFscGhhWyhuX2hkLWkrMSk6MV0pDQogIH0NCiAgbm9nID0gc3VtKGFscF9nPD0gYWxwaGFbLW5faGRdKSArIDENCiAgcGxvdChhbHBoYVstbl9oZF0sIHBjaD0yMCwgY29sPShhbHBfZz5hbHBoYVstbl9oZF0pKzEsIG1haW4gPSBwYXN0ZSgiT3B0aW1hbCBudW1iZXIgb2YgZ3JvdXBzID0iLG5vZyksDQogICAgICAgeWxhYiA9IGV4cHJlc3Npb24oYWxwaGFbZ10pLCB4bGFiPSJOb2RlcyIpfQ0KDQptb2plbmEoaGNfY29tcGxldGUpDQoNCmBgYA0KDQoNCiMjIyMjIyBVbmnDs24gUHJvbWVkaW8NCmBgYHtyIFVuaW9uX1Byb21lZGlvLCBmaWcuYWxpZ249J2NlbnRlcid9DQpoY19hdmVyYWdlID0gaGNsdXN0KGdldF9kaXN0KGRhdGFfLCBzdGFuZCA9IFQsIG1ldGhvZCA9ICJldWNsaWRlYW4iKSwgbWV0aG9kID0gImF2ZXJhZ2UiKQ0KDQptb2plbmEgPSBmdW5jdGlvbihoYyl7DQogIG5faGQgPSBsZW5ndGgoaGMkaGVpZ2h0KQ0KICBhbHBfZyA9IDAgOyBhbHBoYSA9IGhjJGhlaWdodFtuX2hkOjFdDQogIGZvcihpIGluIDE6KG5faGQtMSkpew0KICAgIGFscF9nW2ldID0gbWVhbihhbHBoYVsobl9oZC1pKzEpOjFdKSsxLjI1KnNkKGFscGhhWyhuX2hkLWkrMSk6MV0pDQogIH0NCiAgbm9nID0gc3VtKGFscF9nPD0gYWxwaGFbLW5faGRdKSArIDENCiAgcGxvdChhbHBoYVstbl9oZF0sIHBjaD0yMCwgY29sPShhbHBfZz5hbHBoYVstbl9oZF0pKzEsIG1haW4gPSBwYXN0ZSgiT3B0aW1hbCBudW1iZXIgb2YgZ3JvdXBzID0iLG5vZyksDQogICAgICAgeWxhYiA9IGV4cHJlc3Npb24oYWxwaGFbZ10pLCB4bGFiPSJOb2RlcyIpfQ0KDQptb2plbmEoaGNfYXZlcmFnZSkNCg0KYGBgDQoNCg0KIyMjIyBEZW5kb2dyYW1hcyBPcHRpbWl6YWRvcyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQojIyMjIyBFbmxhY2UgU2ltcGxlDQpgYGB7ciBFbmxhY2VfU2ltcGxlLCBmaWcuYWxpZ249J2NlbnRlcid9DQpzdXBwcmVzc1dhcm5pbmdzKGZ2aXpfZGVuZChoY19zaW5nbGUsIGsgPSAzLCBjZXggPSAwLjUsIGtfY29sb3JzID0gIm5wZyIsIGNvbG9yX2xhYmVsc19ieV9rID0gVCwgcmVjdCA9IFQpKQ0KYGBgDQoNCiMjIyMjIEVubGFjZSBDb21wbGV0bw0KYGBge3IgRW5sYWNlX0NvbXBsZXRvLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2RlbmQoaGNfY29tcGxldGUsIGsgPSAzLCBjZXggPSAwLjUsIGtfY29sb3JzID0gIm5wZyIsIGNvbG9yX2xhYmVsc19ieV9rID0gVCwgcmVjdCA9IFQpDQoNCmBgYA0KDQojIyMjIyBFbmxhY2UgUHJvbWVkaW8NCmBgYHtyIEVubGFjZV9Qcm9tZWRpbywgZmlnLmFsaWduPSdjZW50ZXInfQ0KZnZpel9kZW5kKGhjX2F2ZXJhZ2UsIGsgPSAzLCBjZXggPSAwLjUsIGtfY29sb3JzID0gIm5wZyIsIGNvbG9yX2xhYmVsc19ieV9rID0gVCwgcmVjdCA9IFQpDQoNCmBgYA0KDQojIw0KDQpMYSBhZ3J1cGFjacOzbiBqZXLDoXJxdWljYSBwZXJtaXRpw7MgaWRlbnRpZmljYXIgZ3J1cG9zIGRlIGVtcGxlYWRvcyBjb24gY2FyYWN0ZXLDrXN0aWNhcyBzaW1pbGFyZXMsIGZhY2lsaXRhbmRvIGxhIGNvbXByZW5zacOzbiBkZSBsYSBlc3RydWN0dXJhIGludGVybmEgZGUgbG9zIGRhdG9zLiBMb3MgZGlmZXJlbnRlcyBtw6l0b2RvcyBkZSBlbmxhY2UgeSBsYSBvcHRpbWl6YWNpw7NuIGRlIE1vamVuYSBjb250cmlidXllcm9uIGEgc2VsZWNjaW9uYXIgdW5hIHBhcnRpY2nDs24gYWRlY3VhZGEsIG1pZW50cmFzIHF1ZSBsb3MgZGVuZHJvZ3JhbWFzIGZhY2lsaXRhcm9uIGxhIHZpc3VhbGl6YWNpw7NuIGRlIGxvcyByZXN1bHRhZG9zLiBFbiBnZW5lcmFsLCBlc3RhIHTDqWNuaWNhIHJlc3VsdMOzIMO6dGlsIHBhcmEgZWwgYW7DoWxpc2lzIGV4cGxvcmF0b3JpbyB5IGxhIGNsYXNpZmljYWNpw7NuIGRlIGxvcyBpbmRpdmlkdW9zIHNlZ8O6biBzdSBuaXZlbCBkZSBzaW1pbGl0dWQuDQoNCiMjIyA0LjMuIEFncnVwYWNpw7NuIE5vLUplcsOhcnF1aWNhey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRW4gZXN0YSBzZWNjacOzbiBzZSBhcGxpY2EgbGEgdMOpY25pY2EgZGUgYWdydXBhY2nDs24gbm8gamVyw6FycXVpY2EsIGVzcGVjw61maWNhbWVudGUgZWwgbcOpdG9kbyBLLW1lYW5zLCBjb24gZWwgb2JqZXRpdm8gZGUgc2VnbWVudGFyIGEgbG9zIGVtcGxlYWRvcyBlbiB1biBuw7ptZXJvIGRldGVybWluYWRvIGRlIGdydXBvcy4gUGFyYSBsYSBzZWxlY2Npw7NuIGRlbCBuw7ptZXJvIMOzcHRpbW8gZGUgY2zDunN0ZXJlcyBzZSB1dGlsaXphbiBjcml0ZXJpb3MgY29tbyBlbCBtw6l0b2RvIGRlbCBjb2RvIChlbGJvdyksIHNpbGhvdWV0dGUsIGdhcCBzdGF0aXN0aWMgeSBtYWpvcml0eSBydWxlLiBQb3N0ZXJpb3JtZW50ZSwgc2UgYW5hbGl6YW4gbG9zIHJlc3VsdGFkb3Mgb2J0ZW5pZG9zIHkgc2UgcmVwcmVzZW50YW4gZ3LDoWZpY2FtZW50ZSBsb3MgZ3J1cG9zIGZvcm1hZG9zLg0KDQojIyMjIEstw5NwdGltbyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQojIyMjIyBFbGJvdw0KYGBge3IgRWxib3csIGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfbmJjbHVzdChkYXRhXywga21lYW5zLCBtZXRob2QgPSAid3NzIikgKyBnZW9tX3ZsaW5lKHhpbnRlcmNlcHQgPSAzLCBsaW5ldHlwZSA9IDIpDQpgYGANCg0KDQojIyMjIyBTaWxob3VldHRlDQpgYGB7ciBTaWxob3VldHRlLGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfbmJjbHVzdChkYXRhXywga21lYW5zLCBtZXRob2QgPSAic2lsaG91ZXR0ZSIpDQpgYGANCg0KDQojIyMjIyBHYXAgU3RhdGlzdGljDQpgYGB7ciBHYXBfU3RhdGlzdGljLGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfbmJjbHVzdChkYXRhXywga21lYW5zLCBtZXRob2QgPSAiZ2FwX3N0YXQiKQ0KYGBgDQoNCg0KIyMjIyMgTWFqb3JpdHkgUnVsZQ0KYGBge3IgTWFqb3JpdHlfUnVsZSwgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc3VwcHJlc3NXYXJuaW5ncyhOYkNsdXN0KGRhdGFfLCBkaXNzID0gTlVMTCwgZGlzdGFuY2UgPSAiZXVjbGlkZWFuIiwgbWluLm5jID0gMiwgbWF4Lm5jID0gMTAsIG1ldGhvZCA9ICJrbWVhbnMiKSRCZXN0Lm5jKQ0KYGBgDQoNCiMjIyMgUmVzdWx0YWRvcyBLLU1lYW5zey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KIyMjIyMgSy3Dk3B0aW1vIFtFbF9NYS1SdWwgM10NCmBgYHtyIGstb3B0aW1vcywgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc2V0LnNlZWQoMTIxMTI0KQ0KcHJpbnQoa21lYW5zKGRhdGFfLCAzLCBuc3RhcnQgPSAyNSkpDQpgYGANCg0KIyMjIyMgSy3Dk3B0aW1vIFtzaWwgNF0NCmBgYHtyIGstb3B0aW1vX3NpbCwgZmlnLmFsaWduPSdjZW50ZXInfQ0Kc2V0LnNlZWQoMTIxMTI0KQ0KcHJpbnQoa21lYW5zKGRhdGFfLCA0LCBuc3RhcnQgPSAyNSkpDQpgYGANCg0KIyMjIyBHcsOhZmljb3MgSy1NZWFuc3sudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCiMjIyMjIEstw5NwdGltbyBbRWxiX01hLVJ1bCAzXQ0KYGBge3IgR3JhZl9FbGJfTWEtUnVsLCBmaWcuYWxpZ249J2NlbnRlcid9DQpmdml6X2NsdXN0ZXIoa21lYW5zKGRhdGFfLCAzLCBuc3RhcnQgPSAyNSksIGRhdGEgPSBkYXRhXywgcGFsZXR0ZSA9IGMoIiMyRTlGREYiLCAiIzAwQUZCQiIsICIjRTdCODAwIiwgIiNFN0I4MDEiKSwgZWxsaXBzZS50eXBlID0gImV1Y2xpZCIsIHN0YXIucGxvdCA9IFRSVUUsIHJlcGVsID0gVFJVRSwgZ2d0aGVtZSA9IHRoZW1lX21pbmltYWwoKQ0KKQ0KYGBgDQoNCiMjIyMjIEstw5NwdGltbyAgW3NpbCA0XQ0KYGBge3IgR3JhZl9zaWwsIGZpZy5hbGlnbj0nY2VudGVyJ30NCmZ2aXpfY2x1c3RlcihrbWVhbnMoZGF0YV8sIDIsIG5zdGFydCA9IDI1KSwgZGF0YSA9IGRhdGFfLCBwYWxldHRlID0gYygiIzJFOUZERiIsICIjMDBBRkJCIiwgIiNFN0I4MDAiLCAiI0U3QjgwMSIpLCBlbGxpcHNlLnR5cGUgPSAiZXVjbGlkIiwgc3Rhci5wbG90ID0gVFJVRSwgcmVwZWwgPSBUUlVFLCBnZ3RoZW1lID0gdGhlbWVfbWluaW1hbCgpDQopDQoNCmBgYA0KDQo8YSBuYW1lPSJzZWM1Ij48L2E+DQoNCiMjDQoNCkxhIGFncnVwYWNpw7NuIG5vIGplcsOhcnF1aWNhIHBlcm1pdGnDsyBjbGFzaWZpY2FyIGEgbG9zIGVtcGxlYWRvcyBlbiBjbMO6c3RlcmVzIGJpZW4gZGVmaW5pZG9zLCBmYWNpbGl0YW5kbyBsYSBpZGVudGlmaWNhY2nDs24gZGUgcGF0cm9uZXMgeSBzaW1pbGl0dWRlcyBkZW50cm8gZGUgbGEgYmFzZSBkZSBkYXRvcy4gTG9zIGRpc3RpbnRvcyBjcml0ZXJpb3MgZGUgc2VsZWNjacOzbiBkZWwgbsO6bWVybyDDs3B0aW1vIGRlIGdydXBvcyBhcG9ydGFyb24gbWF5b3IgY29uZmlhYmlsaWRhZCBhIGxvcyByZXN1bHRhZG9zIG9idGVuaWRvcy4gTG9zIGdyw6FmaWNvcyBkZSBLLW1lYW5zIHBlcm1pdGllcm9uIHVuYSBpbnRlcnByZXRhY2nDs24gdmlzdWFsIGNsYXJhIGRlIGxhIHNlZ21lbnRhY2nDs24gcmVhbGl6YWRhLCBjb25maXJtYW5kbyBsYSB1dGlsaWRhZCBkZSBlc3RhIHTDqWNuaWNhIGVuIGVsIGFuw6FsaXNpcyBkZSBkYXRvcy4NCg0KIyMgKipGYXNlIDUgW0Fuw6FsaXNpcyBkZSBSZWdyZXNpw7NuXSoqDQoNCkxhIHJlZ3Jlc2nDs24gbXVsdGlwbGUgc2UgY2VudHJhIHNvYnJlIGxhIGRlcGVuZGVuY2lhIGRlIHVuYSB2YXJpYWJsZSByZXNwdWVzdGEgcmVzcGVjdG8gYSB1biBjb25qdW50byBkZSB2YXJpYWJsZXMgKipyZWdyZXNvcmFzIG8gcHJlZGljdG9yYXMqKi4gTWVkaWFudGUgdW4gbW9kZWxvIGRlIHJlZ3Jlc2nDs24gc2UgbWlkZSBlbCBlZmVjdG8gZGUgY2FkYSB1bmEgZGUgbGFzIHZhcmlhYmxlcyByZWdyZXNvcmFzIHNvYnJlIGxhIHJlc3B1ZXN0YS4gVW5vIGRlIGxvcyBvYmpldGl2b3MgZXMgbGEgZXN0aW1hY2nDs24gcGFyYSBsYSBwcmVkaWNjacOzbiBkZWwgdmFsb3IgbWVkaW8gZGUgbGEgdmFyaWFibGUgZGVwZW5kaWVudGUsIGNvbiBiYXNlIGVuIGVsIGNvbm9jaW1pZW50byBkZSBsYXMgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIG8gcHJlZGljdG9yYXMuDQoNCiMjIyA1LjEuIE9iamV0aXZvcw0KDQpFbCBwcm9ww7NzaXRvIGRlIGVzdGEgZmFzZSBlcyBlc3RhYmxlY2VyICoqcmVsYWNpb25lcyBlc3RhZMOtc3RpY2FzIGVudHJlIGRvcyBvIG3DoXMgdmFyaWFibGVzKiogbWVkaWFudGUgZWwgdXNvIGRlIG1vZGVsb3MgZGUgcmVncmVzacOzbiBxdWUgZGVzY3JpYmVuIGPDs21vIHVuYSB2YXJpYWJsZSBkZXBlbmRpZW50ZSBwdWVkZSBleHBsaWNhcnNlIGEgcGFydGlyIGRlIHVuYSBvIHZhcmlhcyB2YXJpYWJsZXMgaW5kZXBlbmRpZW50ZXMuIERpY2hhcyByZWxhY2lvbmVzIHNvbiBkZSB0aXBvIHByb2JhYmlsw61zdGljbywgbG8gcXVlIHBlcm1pdGUgcmVhbGl6YXIgY29uY2x1c2lvbmVzIHkgcHJlZGljY2lvbmVzIHNvYnJlIGxvcyBmZW7Ds21lbm9zIGFuYWxpemFkb3MuDQoNClNlIGNhbGN1bGFyw6FuIG1lZGlkYXMgcXVlIGV4cHJlc2VuIGxhIGludGVuc2lkYWQgeSBkaXJlY2Npw7NuIGRlIGxhcyBhc29jaWFjaW9uZXMsIGFwbGljYW5kbyBtb2RlbG9zIGRlcml2YWRvcyBkZWwgbW9kZWxvIGxpbmVhbCBnZW5lcmFsaXphZG8sIGVudHJlIGVsbG9zIGxhICoqUmVncmVzacOzbiBMaW5lYWwgU2ltcGxlKiosIGxhICoqUmVncmVzacOzbiBMaW5lYWwgTcO6bHRpcGxlKiogeSBsYSAqKlJlZ3Jlc2nDs24gTG9nw61zdGljYSoqLiBDYWRhIG1vZGVsbyBzZXLDoSBkZXNjcml0byB0ZcOzcmljYW1lbnRlIGVuIHN1IHJlc3BlY3RpdmEgc3Vic2VjY2nDs24geSBhcGxpY2FkbyBhbCBjb25qdW50byBkZSBkYXRvcy4NCg0KDQojIyMgNS4yLiBSZWdyZXNpw7NuIExpbmVhbCBTaW1wbGUgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRW4gZXN0ZSBhcGFydGFkbyBzZSBkZXNhcnJvbGxhIGVsIG1vZGVsbyBkZSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUgY29uIGVsIG9iamV0aXZvIGRlIGFuYWxpemFyIGxhIHJlbGFjacOzbiBlbnRyZSBlbCBpbmdyZXNvIG1lbnN1YWwgKE1vbnRobHlJbmNvbWUpIHkgZWwgdG90YWwgZGUgYcOxb3MgdHJhYmFqYWRvcyAoVG90YWxXb3JraW5nWWVhcnMpLiBQYXJhIGVsbG8sIHNlIHJlYWxpemFuIGFuw6FsaXNpcyBkZXNjcmlwdGl2b3MsIGRpYWdyYW1hcyBkZSBkaXNwZXJzacOzbiB5IGxhIGZvcm11bGFjacOzbiBkZWwgbW9kZWxvIGVzdGFkw61zdGljby4gQWRlbcOhcywgc2UgZXZhbMO6YW4gbG9zIGNvZWZpY2llbnRlcywgZWwgcmVzdW1lbiBlc3RhZMOtc3RpY28sIGxhIHRhYmxhIEFOT1ZBLCBsb3MgaW50ZXJ2YWxvcyBkZSBjb25maWFuemEgeSBsYXMgcHJlZGljY2lvbmVzLCBjb24gZWwgZmluIGRlIGludGVycHJldGFyIGFkZWN1YWRhbWVudGUgZWwgY29tcG9ydGFtaWVudG8gZGUgbGFzIHZhcmlhYmxlcy4NCg0KIyMjIyBSZXN1bWVuIE1vbnRobHlJbmNvbWUNCmBgYHtyIFJlc3VtZW5fTUl9DQoNCmJveHBsb3RfTW9udGhseUluY29tZSA8LSBmdW5jdGlvbihkYXRhLCB2YXJpYWJsZSwgbWFpbl90aXRsZSA9ICJEaWFncmFtYSBkZSBjYWphIE1vbnRobHlJbmNvbWUiLCBjb2xvciA9ICJvcmFuZ2UiLCB5bGltID0gTlVMTCkgew0KICBpZiAoaXMudmVjdG9yKGRhdGEpKSB7IA0KICANCiAgICBib3hwbG90KGRhdGEsIA0KICAgICAgICAgICAgbWFpbiA9IG1haW5fdGl0bGUsIA0KICAgICAgICAgICAgY29sID0gY29sb3IsIA0KICAgICAgICAgICAgeWxpbSA9IHlsaW0pDQogIH0gZWxzZSB7DQogICAgDQogICAgYm94cGxvdChkYXRhW1t2YXJpYWJsZV1dLCANCiAgICAgICAgICAgIG1haW4gPSBtYWluX3RpdGxlLCANCiAgICAgICAgICAgIGNvbCA9IGNvbG9yLCANCiAgICAgICAgICAgIHlsaW0gPSB5bGltKQ0KICB9DQp9DQpzdW1tYXJ5KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRNb250aGx5SW5jb21lKQ0KDQpib3hwbG90X01vbnRobHlJbmNvbWUoDQogIGRhdGEgPSBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwsIA0KICB2YXJpYWJsZSA9ICJNb250aGx5SW5jb21lIiwgDQogIG1haW5fdGl0bGUgPSAiRGlhZ3JhbWEgZGUgY2FqYSBNb250aGx5SW5jb21lIiwgDQogIGNvbG9yID0gIm9yYW5nZSIsIA0KICB5bGltID0gYygxMDAwLDIwMDAwKSApDQoNCmBgYA0KDQojIyMjIFJlc3VtZW4gZGUgVG90YWwgZGUgYcOxb3MgdHJhYmFqYWRvcw0KYGBge3IgUmVzdW1lbl9TZXJ1bUN9DQoNCmJveHBsb3RfVG90YWxXb3JraW5nWWVhcnMgPC0gZnVuY3Rpb24oZGF0YSwgdmFyaWFibGUsIG1haW5fdGl0bGUgPSAiRGlhZ3JhbWEgZGUgY2FqYSBUb3RhbFdvcmtpbmdZZWFycyIsIGNvbG9yID0gImJsdWUiLCB5bGltID0gTlVMTCkgew0KICBpZiAoaXMudmVjdG9yKGRhdGEpKSB7IA0KICANCiAgICBib3hwbG90KGRhdGEsIA0KICAgICAgICAgICAgbWFpbiA9IG1haW5fdGl0bGUsIA0KICAgICAgICAgICAgY29sID0gY29sb3IsIA0KICAgICAgICAgICAgeWxpbSA9IHlsaW0pDQogIH0gZWxzZSB7DQogICAgDQogICAgYm94cGxvdChkYXRhW1t2YXJpYWJsZV1dLCANCiAgICAgICAgICAgIG1haW4gPSBtYWluX3RpdGxlLCANCiAgICAgICAgICAgIGNvbCA9IGNvbG9yLCANCiAgICAgICAgICAgIHlsaW0gPSB5bGltKQ0KICB9DQp9DQpzdW1tYXJ5KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRUb3RhbFdvcmtpbmdZZWFycykNCg0KYm94cGxvdF9Ub3RhbFdvcmtpbmdZZWFycygNCiAgZGF0YSA9IGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCwgDQogIHZhcmlhYmxlID0gIlRvdGFsV29ya2luZ1llYXJzIiwgDQogIG1haW5fdGl0bGUgPSAiRGlhZ3JhbWEgZGUgY2FqYSBUb3RhbFdvcmtpbmdZZWFycyIsIA0KICBjb2xvciA9ICJibHVlIiwgDQogIHlsaW0gPSBjKDAsIDQyKSApDQoNCmBgYA0KDQojIyMjIERpYWdyYW1hIGRlIERpc3BlcnNpw7NuOiBNb250aGx5SW5jb21lIHkgVG90YWxXb3JraW5nWWVhcnNsDQpgYGB7ciBEaWFncmFtYV9kZV9EaXNwZXJzacOzbl9mY3NjLGZpZy5hbGlnbj0nY2VudGVyJ30NCnBsb3QoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFRvdGFsV29ya2luZ1llYXJzLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkTW9udGhseUluY29tZSwgbWFpbiA9ICJEaWFncmFtYSBkZSBEaXNwZXJzacOzbiIpDQpgYGANCg0KIyMjIyBEaWFncmFtYXMgVG90YWxlcyBkZSBEaXNwZXJzacOzbg0KYGBge3IgRGlhZ3JhbWFzX1RvdGFsZXNfRH0NCnBhaXJzKH5Nb250aGx5SW5jb21lICsgVG90YWxXb3JraW5nWWVhcnMgKyBEaXN0YW5jZUZyb21Ib21lICsgWWVhcnNBdENvbXBhbnkgKyBBZ2UsIGRhdGEgPSBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwpDQpgYGANCg0KIyMjIyAgRm9ybXVsYWNpw7NuIGRlbCBtb2RlbG8gZGUgUkxTIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQojIyMjIyBDb2VmaWNpZW50ZXMgZGVsIE1vZGVsbyBSTFMNCmBgYHtyIENvZWZpY2llbnRlc19Nb2RlbG9fUkxTLCBmaWcuYWxpZ249J2NlbnRlcid9DQptb2RlbG9fUkxfU2ltcGxlID0gbG0oZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJE1vbnRobHlJbmNvbWV+ZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFRvdGFsV29ya2luZ1llYXJzKQ0KY29lZihtb2RlbG9fUkxfU2ltcGxlKQ0KYGBgDQoNCiMjIyMjIFJlc3VtZW4gRXN0YWTDrXN0aWNvIGRlbCBNb2RlbG8gUkxTDQpgYGB7ciBSZXN1bWVuIEVzdGFkw61zdGljb19kZWxfTW9kZWxvX1JMUyxmaWcuYWxpZ249J2NlbnRlcid9DQpzdW1tYXJ5KG1vZGVsb19STF9TaW1wbGUpDQpgYGANCg0KIyMjIyMgVGFibGEgQU5PVkEgcGFyYSBlbCBNb2RlbG8gUkxTDQpgYGB7ciBUYWJsYV9BTk9WQV9wYXJhX2VsX01vZGVsb19STFMsZmlnLmFsaWduPSdjZW50ZXInfQ0KYW5vdmEobW9kZWxvX1JMX1NpbXBsZSkNCg0KYGBgDQoNCiMjIyMgQW7DoWxpc2lzIGRlbCBtb2RlbG8gUkxTLiB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KIyMjIyMgSW50ZXJ2YWxvIGRlIENvbmZpYW56YSBwYXJhIEIxIA0KYGBge3IgSW50ZXJ2YWxvX2RlX0NvbmZpYW56YV9wYXJhX0IxLGZpZy5hbGlnbj0nY2VudGVyJ30NCmNvbmZpbnQobW9kZWxvX1JMX1NpbXBsZSwgbGV2ZWwgPSAwLjk1KQ0KYGBgDQoNCiMjIyMjIFByZWRpY2Npb25lcyB5IHN1cyBJbnRlcnZhbG9zIGRlIFByZWRpY2Npw7NuDQpgYGB7ciBQcmVkaWNjaW9uZXNfeV9zdXNfSW50ZXJ2YWxvc19kZV9QcmVkaWNjacOzbiwgZmlnLmFsaWduPSdjZW50ZXInfQ0KcHJlZGljdChtb2RlbG9fUkxfU2ltcGxlLCBkYXRhLmZyYW1lKHNlcSgxLDE0NzApKSwgaW50ZXJ2YWw9J3ByZWRpY3Rpb24nLCBsZXZlbCA9IDAuOTUpDQoNCmBgYA0KDQojIyMjIyBQcmVkaWNjaW9uZXMgeSBzdXMgSW50ZXJ2YWxvcyBkZSBDb25maWFuemENCmBgYHtyIFByZWRpY2Npb25lc195X3N1c19JbnRlcnZhbG9zX2RlX0NvbmZpYW56YSwgZmlnLmFsaWduPSdjZW50ZXInfQ0KcHJlZGljdChtb2RlbG9fUkxfU2ltcGxlLCBkYXRhLmZyYW1lKHNlcSgxLDE0NzApKSwgaW50ZXJ2YWw9J2NvbmZpZGVuY2UnLCBsZXZlbCA9IDAuOTUpDQoNCmBgYA0KDQojIw0KDQpFbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsaW5lYWwgc2ltcGxlIHBlcm1pdGnDsyBldmlkZW5jaWFyIGxhIHJlbGFjacOzbiBleGlzdGVudGUgZW50cmUgZWwgaW5ncmVzbyBtZW5zdWFsIHkgbG9zIGHDsW9zIGRlIGV4cGVyaWVuY2lhIGxhYm9yYWwuIEVsIGFuw6FsaXNpcyBlc3RhZMOtc3RpY28geSBncsOhZmljbyBjb25maXJtw7MgbGEgdXRpbGlkYWQgZGVsIG1vZGVsbyBwYXJhIGRlc2NyaWJpciB5IHByZWRlY2lyIGVsIGNvbXBvcnRhbWllbnRvIGRlIGxhIHZhcmlhYmxlIHJlc3B1ZXN0YS4gTG9zIGludGVydmFsb3MgZGUgY29uZmlhbnphIHkgZGUgcHJlZGljY2nDs24gYXBvcnRhcm9uIGluZm9ybWFjacOzbiBhZGljaW9uYWwgc29icmUgbGEgcHJlY2lzacOzbiBkZSBsYXMgZXN0aW1hY2lvbmVzLCByZWZvcnphbmRvIGxhIHZhbGlkZXogZGVsIG1vZGVsbyBwbGFudGVhZG8uDQoNCiMjIyA1LjMuIFJlZ3Jlc2nDs24gTGluZWFsIE3Dumx0aXBsZSB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQpFbiBlc3RhIHNlY2Npw7NuIHNlIGRlc2Fycm9sbGEgZWwgYW7DoWxpc2lzIGRlIHJlZ3Jlc2nDs24gbGluZWFsIG3Dumx0aXBsZSwgY29uc2lkZXJhbmRvIHRhbnRvIHZhcmlhYmxlcyBjdWFudGl0YXRpdmFzIGNvbW8gY3VhbGl0YXRpdmFzLiBJbmljaWFsbWVudGUgc2UgcmVhbGl6YSB1biBhbsOhbGlzaXMgZGVzY3JpcHRpdm8gZGUgbGFzIHZhcmlhYmxlcyB5IGRpYWdyYW1hcyBkZSBkaXNwZXJzacOzbiBwYXJhIGxhcyB2YXJpYWJsZXMgY3VhbnRpdGF0aXZhcy4gUG9zdGVyaW9ybWVudGUsIHNlIGZvcm11bGEgZWwgbW9kZWxvIGRlIHJlZ3Jlc2nDs24gbGluZWFsIG3Dumx0aXBsZSwgZXZhbHVhbmRvIGVsIG1vZGVsbyB0b3RhbCB5IHVuIG1vZGVsbyByZWR1Y2lkbyBtZWRpYW50ZSBlbCBhbsOhbGlzaXMgZGUgdmFyaWFuemEgeSBlbCBlc3R1ZGlvIGRlIGxvcyBjb2VmaWNpZW50ZXMuDQoNCiMjIyMgUmVzdW1lbiBWYXJpYWJsZXMgQ3VhbnRpdGF0aXZhcw0KYGBge3IgUmVzdW1lbl9WYXJpYWJsZXNfQ3VhbnRpdGF0aXZhcyxmaWcuYWxpZ249J2NlbnRlcid9DQpzdW1tYXJ5KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRBZ2UpDQpzdW1tYXJ5KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRNb250aGx5SW5jb21lKQ0Kc3VtbWFyeShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkRGlzdGFuY2VGcm9tSG9tZSkNCnN1bW1hcnkoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFRvdGFsV29ya2luZ1llYXJzKQ0Kc3VtbWFyeShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkWWVhcnNBdENvbXBhbnkpDQpzdW1tYXJ5KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRZZWFyc1NpbmNlTGFzdFByb21vdGlvbikNCmBgYA0KDQojIyMjIFJlc3VtZW4gVmFyaWFibGVzIEN1YWxpdGF0aXZhcw0KYGBge3IgUmVzdW1lbl9WYXJpYWJsZXNfQ3VhbGl0YXRpdmFzLGZpZy5hbGlnbj0nY2VudGVyJ30NCg0KdGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFdvcmtMaWZlQmFsYW5jZSkNCnByb3AudGFibGUodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFdvcmtMaWZlQmFsYW5jZXQpKQ0KYmFycGxvdCh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkV29ya0xpZmVCYWxhbmNlKSkNCg0KdGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEJ1c2luZXNzVHJhdmVsKQ0KcHJvcC50YWJsZSh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkQnVzaW5lc3NUcmF2ZWwpKQ0KYmFycGxvdCh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkQnVzaW5lc3NUcmF2ZWwpKQ0KDQp0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkRWR1Y2F0aW9uRmllbGQpDQpwcm9wLnRhYmxlKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRFZHVjYXRpb25GaWVsZCkpDQpiYXJwbG90KHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRFZHVjYXRpb25GaWVsZCkpDQoNCnRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRKb2JSb2xlKQ0KcHJvcC50YWJsZSh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkSm9iUm9sZSkpDQpiYXJwbG90KHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRKb2JSb2xlKSkNCg0KdGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJE1hcml0YWxTdGF0dXMpDQpwcm9wLnRhYmxlKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRNYXJpdGFsU3RhdHVzKSkNCmJhcnBsb3QodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJE1hcml0YWxTdGF0dXMpKQ0KDQp0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkT3ZlclRpbWUpDQpwcm9wLnRhYmxlKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRPdmVyVGltZSkpDQpiYXJwbG90KHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRPdmVyVGltZSkpDQoNCnRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRHZW5kZXIpDQpwcm9wLnRhYmxlKHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRHZW5kZXIpKQ0KYmFycGxvdCh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkR2VuZGVyKSkNCg0KdGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEpvYkxldmVsKQ0KcHJvcC50YWJsZSh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkSm9iTGV2ZWwpKQ0KYmFycGxvdCh0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkSm9iTGV2ZWwpKQ0KYGBgDQoNCiMjIyMgRGlhZ3JhbWFzIGRlIERpc3BlcnNpw7NuIFZhcmlhYmxlcyBDdWFudGl0YXRpdmFzDQpgYGB7ciBEaWFncmFtYXNfVG90YWxlc19kZV9EaXNwZXJzaW9ufQ0KcGFpcnMofk1vbnRobHlJbmNvbWUgKyBUb3RhbFdvcmtpbmdZZWFycyArIERpc3RhbmNlRnJvbUhvbWUgKyBZZWFyc0F0Q29tcGFueSArIEFnZSwgZGF0YSA9IGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCkNCmBgYA0KDQoNCiMjIyMgRm9ybXVsYWNpw7NuIGRlbCBtb2RlbG8gZGUgUkxNIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpby4gey50YWJzZXQgLnRhYnNldC1waWxsc30NCiMjIyMjIFJlc3VtZW4geSBBTk9WQSBkZWwgTW9kZWxvIFJMTSBUb3RhbA0KYGBge3IsIHJlc3VtZW5feV9BTk9WQV9STE1fVG90YWwsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0Kc3VtbWFyeShsbShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkTW9udGhseUluY29tZX5kZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkQWdlK2Rlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCREaXN0YW5jZUZyb21Ib21lK2Rlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRUb3RhbFdvcmtpbmdZZWFycytkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkWWVhcnNBdENvbXBhbnkrYXMuZmFjdG9yKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRHZW5kZXIpK2FzLmZhY3RvcihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkRGVwYXJ0bWVudCkrYXMuZmFjdG9yKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRKb2JSb2xlKSthcy5mYWN0b3IoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJE1hcml0YWxTdGF0dXMpK2FzLmZhY3RvcihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkT3ZlclRpbWUpK2FzLmZhY3RvcihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkQXR0cml0aW9uKSkpDQoNCmFub3ZhKGxtKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRNb250aGx5SW5jb21lfmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRBZ2UrZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJERpc3RhbmNlRnJvbUhvbWUrZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFRvdGFsV29ya2luZ1llYXJzK2Rlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRZZWFyc0F0Q29tcGFueSthcy5mYWN0b3IoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEdlbmRlcikrYXMuZmFjdG9yKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCREZXBhcnRtZW50KSthcy5mYWN0b3IoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEpvYlJvbGUpK2FzLmZhY3RvcihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkTWFyaXRhbFN0YXR1cykrYXMuZmFjdG9yKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRPdmVyVGltZSkrYXMuZmFjdG9yKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRBdHRyaXRpb24pKSkNCmBgYA0KIyMjIyMgQ29lZmljaWVudGVzIGRlbCBNb2RlbG8gUkxNIFRvdGFsDQpgYGB7ciwgY29lZmljaWVudGVzX1JMTV9Ub3RhbCwgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpjb2VmZmljaWVudHMobG0oZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJE1vbnRobHlJbmNvbWV+ZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEFnZStkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkRGlzdGFuY2VGcm9tSG9tZStkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkVG90YWxXb3JraW5nWWVhcnMrZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFllYXJzQXRDb21wYW55K2FzLmZhY3RvcihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkR2VuZGVyKSthcy5mYWN0b3IoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJERlcGFydG1lbnQpK2FzLmZhY3RvcihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkSm9iUm9sZSkrYXMuZmFjdG9yKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRNYXJpdGFsU3RhdHVzKSthcy5mYWN0b3IoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJE92ZXJUaW1lKSthcy5mYWN0b3IoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEF0dHJpdGlvbikpKQ0KYGBgDQoNCg0KIyMjIyMgQ29lZmljaWVudGVzIGRlbCBNb2RlbG8gUkxNIFJlZHVjaWRvDQpgYGB7ciBjb2VmaWNpZW50ZXNfUkxNX1JlZHVjaWRvLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCmNvZWZmaWNpZW50cyhsbShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkTW9udGhseUluY29tZX5kZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkQWdlK2Rlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRUb3RhbFdvcmtpbmdZZWFycythcy5mYWN0b3IgKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRHZW5kZXIpK2FzLmZhY3RvcihkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkRGVwYXJ0bWVudCkrYXMuZmFjdG9yKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRBdHRyaXRpb24pKSkNCmBgYA0KDQojIw0KDQpMYSByZWdyZXNpw7NuIGxpbmVhbCBtw7psdGlwbGUgcGVybWl0acOzIGFuYWxpemFyIGRlIG1hbmVyYSBjb25qdW50YSBlbCBlZmVjdG8gZGUgdmFyaWFzIHZhcmlhYmxlcyBleHBsaWNhdGl2YXMgc29icmUgbGEgdmFyaWFibGUgcmVzcHVlc3RhLiBFbCBhbsOhbGlzaXMgZGUgbG9zIGNvZWZpY2llbnRlcyB5IGxhIGNvbXBhcmFjacOzbiBlbnRyZSBlbCBtb2RlbG8gdG90YWwgeSBlbCByZWR1Y2lkbyBmYWNpbGl0YXJvbiBsYSBpZGVudGlmaWNhY2nDs24gZGUgbGFzIHZhcmlhYmxlcyBtw6FzIHJlbGV2YW50ZXMuIEVuIGdlbmVyYWwsIGVzdGUgbW9kZWxvIGFwb3J0w7MgdW5hIHZpc2nDs24gbcOhcyBjb21wbGV0YSBkZWwgZmVuw7NtZW5vIGVzdHVkaWFkbywgZW4gY29tcGFyYWNpw7NuIGNvbiBsYSByZWdyZXNpw7NuIGxpbmVhbCBzaW1wbGUuDQoNCiMjIyA1LjQuIFJlZ3Jlc2nDs24gTG9nw61zdGljYSBTaW1wbGUgey50YWJzZXQgLnRhYnNldC1waWxsc30NCg0KRW4gZXN0ZSBhcGFydGFkbyBzZSBkZXNhcnJvbGxhIGVsIGFuw6FsaXNpcyBkZSByZWdyZXNpw7NuIGxvZ8Otc3RpY2Egc2ltcGxlLCBvcmllbnRhZG8gYWwgZXN0dWRpbyBkZSB1bmEgdmFyaWFibGUgcmVzcHVlc3RhIGNhdGVnw7NyaWNhLiBTZSByZWFsaXphbiBhbsOhbGlzaXMgZGVzY3JpcHRpdm9zIG1lZGlhbnRlIHJlc8O6bWVuZXMgZXN0YWTDrXN0aWNvcywgYm94cGxvdHMsIGhpc3RvZ3JhbWFzIHkgZGlhZ3JhbWFzIGRlIGJhcnJhcywgY29uIGVsIGZpbiBkZSBjb21wcmVuZGVyIGVsIGNvbXBvcnRhbWllbnRvIGRlIGxhcyB2YXJpYWJsZXMgaW52b2x1Y3JhZGFzLiBQb3N0ZXJpb3JtZW50ZSwgc2UgZm9ybXVsYSBlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsb2fDrXN0aWNhIHkgc2UgYW5hbGl6YW4gc3VzIGNvZWZpY2llbnRlcyB5IHJlc3VtZW4gZXN0YWTDrXN0aWNvLg0KDQojIyMjIFJlc3VtZW4geSBCb3hwbG90IFRvdGFsIGRlIGHDsW9zIHRyYWJhamFkb3MNCmBgYHtyIHJlc3VtZW5fY29sZXN0ZXJvbHNlcmljbywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpzdW1tYXJ5KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRUb3RhbFdvcmtpbmdZZWFycykNCmJveHBsb3QoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFRvdGFsV29ya2luZ1llYXJzLCBtYWluID0gIkRpYWdyYW1hIGRlIENhamEgZGUgVG90YWwgZGUgYcOxb3MgdHJhYmFqYWRvcyIsIGNvbCA9IGMoIm9yYW5nZSIpKQ0KYGBgDQoNCiMjIyMgSGlzdG9ncmFtYSBkZSBhw7FvcyB0cmFiYWphZG9zDQpgYGB7ciBoaXN0b2dyYW1hX0NTLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnN1bW1hcnkoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJFRvdGFsV29ya2luZ1llYXJzKQ0KaGlzdChkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkVG90YWxXb3JraW5nWWVhcnMsIG1haW4gPSAiSGlzdG9ncmFtYSBkZSBUb3RhbCBkZSBhw7FvcyB0cmFiYWphZG9zIiwgY29sID0gYygiUHVycGxlIikpDQpgYGANCg0KIyMjIyBSZXN1bWVuIHkgRGlhZ3JhbWEgZGUgQmFycmFzIGRlIFRhcmdldA0KYGBge3IgcmVzdW1lbl90YXJnZXQsIGZpZy5hbGlnbiA9ICdjZW50ZXInfQ0KdGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEF0dHJpdGlvbikNCnByb3AudGFibGUodGFibGUoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEF0dHJpdGlvbikpDQpiYXJwbG90KHRhYmxlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRBdHRyaXRpb24pLCBtYWluID0gIlJlbnVuY2lhIiwgY29sID0gYygidmlvbGV0IikpDQpgYGANCg0KIyMjIyBSZXN1bWVuIHkgRGlhZ3JhbWEgZGUgQ2FqYXMgQ29uanVudG8NCmBgYHtyIGJveHBsb3RfQ29uanVudG9fQ2hhbmNlLW9mLUFkbWl0X1Jlc2VhcmNoLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnRhcHBseShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfMSRNb250aGx5SW5jb21lLCBkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVExfMSRBdHRyaXRpb24sIG1lYW4pDQp0YXBwbHkoZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMXzEkTW9udGhseUluY29tZSwgZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMXzEkQXR0cml0aW9uLCBtZWRpYW4pDQpib3hwbG90KGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTF8xJE1vbnRobHlJbmNvbWV+IGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTF8xJEF0dHJpdGlvbiwgbWFpbiA9ICJCb3hwbG90IENvbmp1bnRvOiBJbmdyZXNvIG1lbnN1YWwtVG90YWxXb3JraW5nWWVhcnMiICwgY29sID0gYygicHVycGxlIiwgImJsdWUiKSkNCmBgYA0KDQojIyMjIEZvcm11bGFjacOzbiBkZWwgbW9kZWxvIGRlIFJMb2dTIGVudHJlIGxhcyB2YXJpYWJsZXMgZGUgZXN0dWRpbyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KDQojIyMjIyBDb2VmaWNpZW50ZXMgZGVsIE1vZGVsbyBSTG9nUw0KDQpgYGB7cn0NCmRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRBdHRyaXRpb25fYmluIDwtDQogIGlmZWxzZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkQXR0cml0aW9uID09ICJZZXMiLCAxLCAwKQ0KDQptb2RlbG9fUkxvZ19TaW1wbGVfUyA8LSBnbG0oQXR0cml0aW9uX2JpbiB+IE1vbnRobHlJbmNvbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGZhbWlseSA9ICJiaW5vbWlhbCIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgICA9IGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCkNCmNvZWYobW9kZWxvX1JMb2dfU2ltcGxlX1MpDQoNCmBgYA0KDQojIyMjIyBSZXN1bWVuIEVzdGFkw61zdGljbyBkZWwgTW9kZWxvIFJMb2dTDQoNCmBgYHtyfQ0KZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEF0dHJpdGlvbl9iaW4gPC0NCmlmZWxzZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkQXR0cml0aW9uID09ICJZZXMiLCAxLCAwKQ0KDQpuYW1lcyhkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwpWzE6MjBdDQp0YWJsZShkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkQXR0cml0aW9uX2JpbikNCg0KQXR0cml0aW9uX2JpbiB+IE1vbnRobHlJbmNvbWUNCm1vZGVsb19STG9nX1NpbXBsZV9TIDwtIGdsbSgNCkF0dHJpdGlvbl9iaW4gfiBNb250aGx5SW5jb21lLA0KZmFtaWx5ID0gYmlub21pYWwsDQpkYXRhID0gZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMDQopDQoNCnN1bW1hcnkobW9kZWxvX1JMb2dfU2ltcGxlX1MpDQpgYGANCg0KIyMjIyBBbsOhbGlzaXMgZGVsIG1vZGVsbyBSTG9nUyB7LnRhYnNldCAudGFic2V0LXBpbGxzfQ0KIyMjIyMgVmFyaWFibGUgUHJlZGljdG9yYSBpZ3VhbCBhIENlcm8NCmBgYHtyIHZhcmlhYmxlX1ByZWRpY3RvcmFfQ2VybywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpjb2VmKG1vZGVsb19STG9nX1NpbXBsZV9TKQ0Kcm91bmQoZXhwKGNvZWYobW9kZWxvX1JMb2dfU2ltcGxlX1MpKSw2KQ0KYGBgDQoNCiMjIyMjIFByb2JhYmlsaWRhZGVzIEVzdGltYWRhcw0KYGBge3IgcHJvYmFiaWxpZGFkZXNfRXN0aW1hZGFzLCBmaWcuYWxpZ24gPSAnY2VudGVyJ30NCnByZWRpY3QobW9kZWxvX1JMb2dfU2ltcGxlX1MpDQpgYGANCg0KDQojIyMjIyBHcsOhZmljYSBkZWwgTW9kZWxvIFJMb2dTDQpgYGB7ciBncmFmaWNhX01vZGVsb19STG9nUywgZmlnLmFsaWduID0gJ2NlbnRlcid9DQpkZXNlcmNpb25fZW1wbGVhZG9zX0lCTV9FVEwkQXR0cml0aW9uX2JpbiA8LQ0KaWZlbHNlKGRlc2VyY2lvbl9lbXBsZWFkb3NfSUJNX0VUTCRBdHRyaXRpb24gPT0gIlllcyIsIDEsIDApDQp0YXJnZXQgPC0gZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJEF0dHJpdGlvbl9iaW4NCk1vbnRobHlJbmNvbWUgPC0gZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMJE1vbnRobHlJbmNvbWUNCmRhdGFQbG90IDwtIGRhdGEuZnJhbWUoTW9udGhseUluY29tZSwgdGFyZ2V0KQ0KcGxvdCh0YXJnZXR+TW9udGhseUluY29tZSwgZGF0YSA9IGRhdGFQbG90LCBtYWluID0gIk1vZGVsbyBSTG9nUzogTW9udGhseUluY29tZS1BdHRyaXRpb25fYmluIiwgeGxhYiA9ICJNb250aGx5SW5jb21lIiwgeWxhYiA9ICJBdHRyaXRpb25fYmluID0gMCB8IEF0dHJpdGlvbl9iaW4gPSAxIiwgY29sID0gImdvbGQiLCBwY2ggPSAiSSIpDQpjdXJ2ZShwcmVkaWN0KGdsbSh0YXJnZXR+TW9udGhseUluY29tZSwgZmFtaWx5ID0gImJpbm9taWFsIiwgZGF0YSA9IGRhdGFQbG90KSwgZGF0YS5mcmFtZShNb250aGx5SW5jb21lID0geCksIHR5cGUgPSAicmVzcG9uc2UiKSwgY29sID0gInZpb2xldCIsIGx3ZCA9IDMsIGFkZCA9IFRSVUUpDQpgYGANCg0KIyMgDQoNCkxhIHJlZ3Jlc2nDs24gbG9nw61zdGljYSBzaW1wbGUgcGVybWl0acOzIGVzdGltYXIgbGEgcHJvYmFiaWxpZGFkIGRlIG9jdXJyZW5jaWEgZGUgbGEgdmFyaWFibGUgcmVzcHVlc3RhIGVuIGZ1bmNpw7NuIGRlIGxhIHZhcmlhYmxlIHByZWRpY3RvcmEgYW5hbGl6YWRhLiBFbCBlc3R1ZGlvIGRlIGxvcyBjb2VmaWNpZW50ZXMgeSBsYXMgcHJvYmFiaWxpZGFkZXMgZXN0aW1hZGFzIGZhY2lsaXTDsyBsYSBpbnRlcnByZXRhY2nDs24gZGVsIG1vZGVsbywgbWllbnRyYXMgcXVlIGxhIHJlcHJlc2VudGFjacOzbiBncsOhZmljYSBheXVkw7MgYSB2aXN1YWxpemFyIHN1IGNvbXBvcnRhbWllbnRvLiBFc3RhIHTDqWNuaWNhIHJlc3VsdMOzIGFkZWN1YWRhIHBhcmEgZWwgYW7DoWxpc2lzIGRlIHZhcmlhYmxlcyBjYXRlZ8OzcmljYXMgZGVudHJvIGRlIGxhIGJhc2UgZGUgZGF0b3MuDQoNCg0KIyMjIDUuNS4gQWp1c3RlIGRlIFZhcmlhbnphIHsudGFic2V0IC50YWJzZXQtcGlsbHN9DQoNCkVsIGFuw6FsaXNpcyBkZSB2YXJpYW56YSAoQU5PVkEpIGVzIHVuYSB0w6ljbmljYSBlc3RhZMOtc3RpY2EgcXVlIHBlcm1pdGUgY29tcGFyYXIgbG9zIGluZ3Jlc29zIG1lbnN1YWxlcyBwcm9tZWRpbyBlbnRyZSBkaWZlcmVudGVzIHJvbGVzIGRlIHRyYWJham8uIEEgdHJhdsOpcyBkZSBlc3RlIGFuw6FsaXNpcywgc2UgYnVzY2EgaWRlbnRpZmljYXIgc2kgZXhpc3RlbiBkaWZlcmVuY2lhcyBzaWduaWZpY2F0aXZhcyBlbiBsb3Mgc2FsYXJpb3Mgc2VndW4gZWwgY2FyZ28gZGVzZW1wZcOxYWRvLCBsbyBxdWUgY29udHJpYnV5ZSBhIGNvbXByZW5kZXIgbGFhIGVzdHJ1Y3R1cmEgc2FsYXJpYWwgZGVudHJvIGRlIGxhIG9yZ2FuaXphY2nDs24geSBhIHJlc3BhbGRhciBlbCBhbsOhbGlzaXMgY29uIGRhdG9zIG9iamV0aXZvcy4NCg0KIyMjIyBBTk9WQSBkZSBpbmdyZXNvcyBtZW5zdWFsZXMgc2Vnw7puIGVsIHJvbCBkZSB0cmFiYWpvDQoNCmBgYHtyIEFOT1ZBLGZpZy5hbGlnbj0nY2VudGVyJ30NCmFub3ZhX2luZ3Jlc29zIDwtIGFvdihNb250aGx5SW5jb21lIH4gSm9iUm9sZSwNCiAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMKQ0KDQpzdW1tYXJ5KGFub3ZhX2luZ3Jlc29zKQ0KDQpib3hwbG90KE1vbnRobHlJbmNvbWUgfiBKb2JSb2xlLA0KICAgICAgICBkYXRhID0gZGVzZXJjaW9uX2VtcGxlYWRvc19JQk1fRVRMLA0KICAgICAgICBsYXMgPSAyLA0KICAgICAgICBtYWluID0gIkRpc3RyaWJ1Y2lvbiBkZSBNb250aGx5SW5jb21lIHBvciBKb2JSb2xlIiwNCiAgICAgICAgeWxhYiA9ICJNb250aGx5SW5jb21lIikNCmBgYA0KDQpMYSBmaWd1cmEgY29ycmVzcG9uZGllbnRlIGFsIGJveHBsb3QgZGUgTW9udGhseUluY29tZSBwb3IgSm9iUm9sZSBjb25maXJtYSB2aXN1YWxtZW50ZSBlc3RhcyBkaWZlcmVuY2lhcywgb2JzZXJ2w6FuZG9zZSBzYWxhcmlvcyBjb25zaWRlcmFibGVtZW50ZSBtw6FzIGFsdG9zIGVuIGNhcmdvcyBkZSBkaXJlY2Npw7NuIHkgZWplY3V0aXZvcyBmcmVudGUgYSByb2xlcyBvcGVyYXRpdm9zIGNvbW8gcmVwcmVzZW50YW50ZXMgZGUgdmVudGFzIG8gcGVyc29uYWwgZGUgcmVjdXJzb3MgaHVtYW5vcy4NCg0KIyMjIyBUdWtleUhTRA0KDQpgYGB7ciBUdWtleUhTRCwgZmlnLmFsaWduPSdjZW50ZXInfQ0KVHVrZXlIU0QoYW5vdmFfaW5ncmVzb3MpDQoNCmBgYA0KU2UgcmVhbGl6w7MgdW5hIHBydWViYSBwb3N04oCRaG9jIGRlIFR1a2V5IHBhcmEgaWRlbnRpZmljYXIgcXXDqSBwYXJlcyBkZSByb2xlcyBkaWZpZXJlbiBlbiBlbCBpbmdyZXNvIG1lbnN1YWwgcHJvbWVkaW8uDQoNCg0KIyMgKio2LiBDb25jbHVzaW9uZXMqKg0KDQpTZSBwdWVkZSBjb25jbHVpciwgcXVlIGVzIHBvc2libGUgbW9kZWxhciBkZSBtYW5lcmEgYWRlY3VhZGEgbGEgZGVzZXJjacOzbiBkZSBlbXBsZWFkb3MgZGUgSUJNIGEgcGFydGlyIGRlIGluZm9ybWFjacOzbiBoaXN0w7NyaWNhIGxpbXBpYSwgdHJhbnNmb3JtYWRhIHkgYW5hbGl6YWRhIGNvbiBSLiBFbCBwcm9jZXNvIEVUTCB5IGxhIGV4cGxvcmFjacOzbiBtdWx0aXZhcmlhbnRlIHBlcm1pdGllcm9uIGNvbXByZW5kZXIgbGEgZXN0cnVjdHVyYSBkZWwgY29uanVudG8gZGUgZGF0b3MgeSBkZXRlY3RhciByZWxhY2lvbmVzIGluaWNpYWxlcyBlbnRyZSB2YXJpYWJsZXMgZGVtb2dyw6FmaWNhcywgbGFib3JhbGVzIHkgbGEgdmFyaWFibGUgZGUgZGVzZXJjacOzbi4NCg0KRWwgYWp1c3RlIGRlbCBtb2RlbG8gZGUgcmVncmVzacOzbiBsb2fDrXN0aWNhIGJpbmFyaWEgZXZpZGVuY2nDsyBxdWUgZmFjdG9yZXMgY3VhbnRpdGF0aXZvcyBjb21vIGVsIGluZ3Jlc28gbWVuc3VhbCAoKipNb250aGx5SW5jb21lKiopIHkgb3RyYXMgY2FyYWN0ZXLDrXN0aWNhcyBsYWJvcmFsZXMgdGllbmVuIHVuIGVmZWN0byBlc3RhZMOtc3RpY2FtZW50ZSBzaWduaWZpY2F0aXZvIHNvYnJlIGxhIHByb2JhYmlsaWRhZCBkZSBkZXNlcmNpw7NuLCBvZnJlY2llbmRvIHVuYSBoZXJyYW1pZW50YSDDunRpbCBwYXJhIGVzdGltYXIgZWwgcmllc2dvIGRlIGFiYW5kb25vIGRlIGNhZGEgZW1wbGVhZG8uIExhcyBwcm9iYWJpbGlkYWRlcyBlc3RpbWFkYXMgcGVybWl0ZW4gcHJpb3JpemFyIGFjY2lvbmVzIGRlIHJldGVuY2nDs24gc29icmUgZ3J1cG9zIGNvbiBtYXlvciBwcm9wZW5zacOzbiBhIHJlbnVuY2lhciwgbG8gcXVlIGFwb3J0YSB2YWxvciBwcsOhY3RpY28gYSBsYSBnZXN0acOzbiBkZSB0YWxlbnRvIGh1bWFuby4NCg0KRWwgYW7DoWxpc2lzIGRlIHZhcmlhbnphICgqKkFOT1ZBKiopIGRlIGxvcyBpbmdyZXNvcyBtZW5zdWFsZXMgc2Vnw7puIGVsIHJvbCBkZSB0cmFiYWpvIG1vc3Ryw7MgZGlmZXJlbmNpYXMgc2FsYXJpYWxlcyBtdXkgc2lnbmlmaWNhdGl2YXMgZW50cmUgY2FyZ29zLCBsbyBxdWUgcmV2ZWxhIHVuYSBlc3RydWN0dXJhIHNhbGFyaWFsIGVzdHJhdGlmaWNhZGEgZGVudHJvIGRlIGxhIG9yZ2FuaXphY2nDs24uIExhIHBydWViYSBwb3N04oCRaG9jIGRlIFR1a2V5IHkgbG9zIGJveHBsb3RzIGNvbmZpcm1hcm9uIHF1ZSBsb3MgcHVlc3RvcyBkaXJlY3Rpdm9zIHkgZWplY3V0aXZvcyBwcmVzZW50YW4gbml2ZWxlcyBkZSBpbmdyZXNvIHN1c3RhbmNpYWxtZW50ZSBzdXBlcmlvcmVzIGEgbG9zIGRlIGNhcmdvcyBvcGVyYXRpdm9zIHkgYWRtaW5pc3RyYXRpdm9zLCBpbmZvcm1hY2nDs24gY2xhdmUgcGFyYSBpbnRlcnByZXRhciBkZXNpZ3VhbGRhZGVzIGludGVybmFzIHkgc3UgcG9zaWJsZSB2w61uY3VsbyBjb24gbGEgZGVzZXJjacOzbg0KDQojIyAqKjcuIEJpYmxpb2dyYWbDrWEqKg0KDQpASVRNUEVUdWNrZXIxZWQsDQpAQ1BFTVBvcnJhczIwMTYsDQpAUEVEZXZvcmU3ZWQsDQpATU1FQ3JhbWVyMWVkLA0KQEFFRE1EaWF6LU1vcmFsZXMxZWQsDQpAQU1IYWlyLWV0QWw1ZWQsDQpAQU1BUkFsZGFzLVVyaWVsMmVkLA0KQE9UVU1ORG9vcm5pa19IYW5zZW4yMDA4LA0KQEFNRURBcmlzdGl6YWJhbDIwMTcsDQo=