Teoría

Los modelos de ecuaciones estructurales (SEM) son una técnica de estadística multivariada que permite analizar patrones complejos de relaciones entre variables, incluyendo variables latentes (constructos que no se miden directamente, sino que se infieren a partir de varios ítems observados). Se pueden ver como varios análisis factoriales conectados que permiten efectos directos e indirectos entre los factores.

Tipos de fórmula en lavaan:

  1. Regresión (~): una variable depende de otras.
  2. Variable latente (=~): el factor se infiere de sus indicadores.
  3. Varianza y covarianza (~~): relación entre variables (o entre errores).
  4. Efecto definido (:=): se usa para calcular efectos indirectos y totales.

Para decidir si un modelo es adecuado se revisan los índices de ajuste: χ² (idealmente no significativo, aunque es sensible al tamaño de muestra), CFI y TLI (≥ 0.95 bueno, ≥ 0.90 aceptable), RMSEA (≤ 0.06 bueno, ≤ 0.08 aceptable) y SRMR (≤ 0.08). “Depurar” el modelo significa quitar ítems con cargas bajas o liberar covarianzas de error para mejorar el ajuste.

# install.packages("lavaan"); install.packages("lavaanPlot"); install.packages("readxl")
library(lavaan)      # latent variable analysis
library(lavaanPlot)
library(readxl)

Ejercicio 1. Holzinger y Swineford

Holzinger y Swineford aplicaron exámenes de habilidad mental a adolescentes de dos escuelas. Se busca identificar tres habilidades: visual (x1–x3), textual (x4–x6) y velocidad (x7–x9). La base viene incluida en lavaan.

df1 <- HolzingerSwineford1939

Estructurar y estimar el modelo (CFA)

modelo1 <- '
  visual    =~ x1 + x2 + x3
  textual   =~ x4 + x5 + x6
  velocidad =~ x7 + x8 + x9
'
fit1 <- cfa(modelo1, data = df1)
summary(fit1, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 35 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        21
## 
##   Number of observations                           301
## 
## Model Test User Model:
##                                                       
##   Test statistic                                85.306
##   Degrees of freedom                                24
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                               918.852
##   Degrees of freedom                                36
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.931
##   Tucker-Lewis Index (TLI)                       0.896
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -3737.745
##   Loglikelihood unrestricted model (H1)      -3695.092
##                                                       
##   Akaike (AIC)                                7517.490
##   Bayesian (BIC)                              7595.339
##   Sample-size adjusted Bayesian (SABIC)       7528.739
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.092
##   90 Percent confidence interval - lower         0.071
##   90 Percent confidence interval - upper         0.114
##   P-value H_0: RMSEA <= 0.050                    0.001
##   P-value H_0: RMSEA >= 0.080                    0.840
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.065
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   visual =~                                                             
##     x1                1.000                               0.900    0.772
##     x2                0.554    0.100    5.554    0.000    0.498    0.424
##     x3                0.729    0.109    6.685    0.000    0.656    0.581
##   textual =~                                                            
##     x4                1.000                               0.990    0.852
##     x5                1.113    0.065   17.014    0.000    1.102    0.855
##     x6                0.926    0.055   16.703    0.000    0.917    0.838
##   velocidad =~                                                          
##     x7                1.000                               0.619    0.570
##     x8                1.180    0.165    7.152    0.000    0.731    0.723
##     x9                1.082    0.151    7.155    0.000    0.670    0.665
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   visual ~~                                                             
##     textual           0.408    0.074    5.552    0.000    0.459    0.459
##     velocidad         0.262    0.056    4.660    0.000    0.471    0.471
##   textual ~~                                                            
##     velocidad         0.173    0.049    3.518    0.000    0.283    0.283
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .x1                0.549    0.114    4.833    0.000    0.549    0.404
##    .x2                1.134    0.102   11.146    0.000    1.134    0.821
##    .x3                0.844    0.091    9.317    0.000    0.844    0.662
##    .x4                0.371    0.048    7.779    0.000    0.371    0.275
##    .x5                0.446    0.058    7.642    0.000    0.446    0.269
##    .x6                0.356    0.043    8.277    0.000    0.356    0.298
##    .x7                0.799    0.081    9.823    0.000    0.799    0.676
##    .x8                0.488    0.074    6.573    0.000    0.488    0.477
##    .x9                0.566    0.071    8.003    0.000    0.566    0.558
##     visual            0.809    0.145    5.564    0.000    1.000    1.000
##     textual           0.979    0.112    8.737    0.000    1.000    1.000
##     velocidad         0.384    0.086    4.451    0.000    1.000    1.000

Diagrama del modelo

lavaanPlot(model = fit1, coefs = TRUE, covs = TRUE, stand = TRUE)

Conclusión

Las cargas estandarizadas de los tres factores son significativas y en su mayoría altas, así que los nueve ítems miden lo que se espera (habilidad visual, textual y de velocidad). El ajuste es aceptable pero no perfecto: CFI ≈ 0.93 y TLI ≈ 0.90 (aceptables), mientras que el RMSEA ≈ 0.09 queda un poco alto y la χ² sale significativa. Es un modelo válido para estos datos, aunque se podría mejorar liberando alguna covarianza de error (por ejemplo entre ítems de velocidad, que suelen correlacionarse por el formato de la prueba).

Ejercicio 2. Democracia Política e Industrialización

Es el ejemplo clásico de Bollen. Se modelan tres constructos: industrialización en 1960 (ind60), democracia política en 1960 (dem60) y democracia política en 1965 (dem65). La base también viene en lavaan.

df2 <- PoliticalDemocracy

Estructurar y estimar el modelo (SEM)

modelo2 <- '
  # Modelo de medición
  ind60 =~ x1 + x2 + x3
  dem60 =~ y1 + y2 + y3 + y4
  dem65 =~ y5 + y6 + y7 + y8

  # Modelo estructural
  dem60 ~ ind60
  dem65 ~ ind60 + dem60

  # Covarianzas de error (indicadores medidos en 1960 y 1965)
  y1 ~~ y5
  y2 ~~ y4 + y6
  y3 ~~ y7
  y4 ~~ y8
  y6 ~~ y8
'
fit2 <- sem(modelo2, data = df2)
summary(fit2, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 68 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        31
## 
##   Number of observations                            75
## 
## Model Test User Model:
##                                                       
##   Test statistic                                38.125
##   Degrees of freedom                                35
##   P-value (Chi-square)                           0.329
## 
## Model Test Baseline Model:
## 
##   Test statistic                               730.654
##   Degrees of freedom                                55
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.995
##   Tucker-Lewis Index (TLI)                       0.993
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -1547.791
##   Loglikelihood unrestricted model (H1)      -1528.728
##                                                       
##   Akaike (AIC)                                3157.582
##   Bayesian (BIC)                              3229.424
##   Sample-size adjusted Bayesian (SABIC)       3131.720
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.035
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.092
##   P-value H_0: RMSEA <= 0.050                    0.611
##   P-value H_0: RMSEA >= 0.080                    0.114
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.044
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   ind60 =~                                                              
##     x1                1.000                               0.670    0.920
##     x2                2.180    0.139   15.742    0.000    1.460    0.973
##     x3                1.819    0.152   11.967    0.000    1.218    0.872
##   dem60 =~                                                              
##     y1                1.000                               2.223    0.850
##     y2                1.257    0.182    6.889    0.000    2.794    0.717
##     y3                1.058    0.151    6.987    0.000    2.351    0.722
##     y4                1.265    0.145    8.722    0.000    2.812    0.846
##   dem65 =~                                                              
##     y5                1.000                               2.103    0.808
##     y6                1.186    0.169    7.024    0.000    2.493    0.746
##     y7                1.280    0.160    8.002    0.000    2.691    0.824
##     y8                1.266    0.158    8.007    0.000    2.662    0.828
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   dem60 ~                                                               
##     ind60             1.483    0.399    3.715    0.000    0.447    0.447
##   dem65 ~                                                               
##     ind60             0.572    0.221    2.586    0.010    0.182    0.182
##     dem60             0.837    0.098    8.514    0.000    0.885    0.885
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##  .y1 ~~                                                                 
##    .y5                0.624    0.358    1.741    0.082    0.624    0.296
##  .y2 ~~                                                                 
##    .y4                1.313    0.702    1.871    0.061    1.313    0.273
##    .y6                2.153    0.734    2.934    0.003    2.153    0.356
##  .y3 ~~                                                                 
##    .y7                0.795    0.608    1.308    0.191    0.795    0.191
##  .y4 ~~                                                                 
##    .y8                0.348    0.442    0.787    0.431    0.348    0.109
##  .y6 ~~                                                                 
##    .y8                1.356    0.568    2.386    0.017    1.356    0.338
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .x1                0.082    0.019    4.184    0.000    0.082    0.154
##    .x2                0.120    0.070    1.718    0.086    0.120    0.053
##    .x3                0.467    0.090    5.177    0.000    0.467    0.239
##    .y1                1.891    0.444    4.256    0.000    1.891    0.277
##    .y2                7.373    1.374    5.366    0.000    7.373    0.486
##    .y3                5.067    0.952    5.324    0.000    5.067    0.478
##    .y4                3.148    0.739    4.261    0.000    3.148    0.285
##    .y5                2.351    0.480    4.895    0.000    2.351    0.347
##    .y6                4.954    0.914    5.419    0.000    4.954    0.443
##    .y7                3.431    0.713    4.814    0.000    3.431    0.322
##    .y8                3.254    0.695    4.685    0.000    3.254    0.315
##     ind60             0.448    0.087    5.173    0.000    1.000    1.000
##    .dem60             3.956    0.921    4.295    0.000    0.800    0.800
##    .dem65             0.172    0.215    0.803    0.422    0.039    0.039
lavaanPlot(model = fit2, coefs = TRUE, stand = TRUE)

Conclusión

El modelo ajusta muy bien: χ² no significativa (p ≈ 0.33), CFI ≈ 0.99, TLI ≈ 0.99, RMSEA ≈ 0.03 y SRMR ≈ 0.04, todos dentro de los rangos de buen ajuste. La industrialización de 1960 predice positivamente la democracia de 1960 y de 1965, y la democracia de 1960 predice la de 1965, es decir, hay estabilidad temporal del constructo. Las covarianzas de error entre los mismos indicadores medidos en años distintos eran necesarias y mejoran el ajuste.

Ejercicio 3. Bienestar de los Colaboradores

Preparación de datos

# El archivo Datos_SEM_Eng.xlsx debe estar en la misma carpeta que este .Rmd
datos <- read_excel("Datos_SEM_Eng.xlsx", sheet = "Hoja1")
names(datos) <- trimws(names(datos))   # limpiar espacios al final de los nombres
dim(datos)
## [1] 223  51

Parte 1: CFA de segundo orden (experiencias de recuperación)

Las experiencias de recuperación tienen cuatro dominios (desapego, relajación, maestría y control) que, a su vez, se explican por un factor de segundo orden. Primero estimo el modelo con todos los ítems disponibles.

mod_p1_completo <- '
  Desapego   =~ RPD01 + RPD02 + RPD03 + RPD05 + RPD06 + RPD07 + RPD08 + RPD09 + RPD10
  Relajacion =~ RRE02 + RRE03 + RRE04 + RRE05 + RRE06 + RRE07 + RRE10
  Maestria   =~ RMA02 + RMA03 + RMA04 + RMA05 + RMA06 + RMA07 + RMA08 + RMA09 + RMA10
  Control    =~ RCO02 + RCO03 + RCO04 + RCO05 + RCO06 + RCO07
  Recuperacion =~ Desapego + Relajacion + Maestria + Control
'
fit_p1c <- cfa(mod_p1_completo, data = datos)
fitMeasures(fit_p1c, c("chisq","df","cfi","tli","rmsea","srmr"))
##    chisq       df      cfi      tli    rmsea     srmr 
## 1221.031  430.000    0.888    0.879    0.091    0.075

Depuración. Revisando las cargas estandarizadas más bajas y los índices de modificación (modindices(fit_p1c)), los ítems RPD01, RPD06, RMA02 y RMA06 son los que menos aportan. Al eliminarlos, el ajuste mejora.

mod_p1 <- '
  Desapego   =~ RPD02 + RPD03 + RPD05 + RPD07 + RPD08 + RPD09 + RPD10
  Relajacion =~ RRE02 + RRE03 + RRE04 + RRE05 + RRE06 + RRE07 + RRE10
  Maestria   =~ RMA03 + RMA04 + RMA05 + RMA07 + RMA08 + RMA09 + RMA10
  Control    =~ RCO02 + RCO03 + RCO04 + RCO05 + RCO06 + RCO07
  Recuperacion =~ Desapego + Relajacion + Maestria + Control
'
fit_p1 <- cfa(mod_p1, data = datos)
fitMeasures(fit_p1, c("chisq","df","cfi","tli","rmsea","srmr"))
##   chisq      df     cfi     tli   rmsea    srmr 
## 809.630 320.000   0.920   0.913   0.083   0.059
lavaanPlot(model = fit_p1, coefs = TRUE, stand = TRUE)

El CFI sube de ≈ 0.89 a ≈ 0.92 y el RMSEA baja de ≈ 0.09 a ≈ 0.083. El modelo depurado alcanza un ajuste aceptable y confirma que los cuatro dominios cargan sobre un factor de segundo orden de experiencias de recuperación.

Parte 2: CFA de energía recuperada

mod_p2 <- 'Energia =~ EN01 + EN02 + EN04 + EN05 + EN06 + EN07 + EN08'
fit_p2 <- cfa(mod_p2, data = datos)
summary(fit_p2, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 32 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        14
## 
##   Number of observations                           223
## 
## Model Test User Model:
##                                                       
##   Test statistic                                47.222
##   Degrees of freedom                                14
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                              2324.436
##   Degrees of freedom                                21
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.986
##   Tucker-Lewis Index (TLI)                       0.978
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -2017.154
##   Loglikelihood unrestricted model (H1)      -1993.543
##                                                       
##   Akaike (AIC)                                4062.308
##   Bayesian (BIC)                              4110.008
##   Sample-size adjusted Bayesian (SABIC)       4065.641
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.103
##   90 Percent confidence interval - lower         0.072
##   90 Percent confidence interval - upper         0.136
##   P-value H_0: RMSEA <= 0.050                    0.004
##   P-value H_0: RMSEA >= 0.080                    0.892
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.012
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Energia =~                                                            
##     EN01              1.000                               1.674    0.893
##     EN02              1.029    0.044   23.192    0.000    1.723    0.933
##     EN04              0.999    0.044   22.583    0.000    1.672    0.924
##     EN05              0.999    0.042   23.649    0.000    1.672    0.939
##     EN06              0.986    0.042   23.722    0.000    1.651    0.940
##     EN07              1.049    0.046   22.856    0.000    1.755    0.928
##     EN08              1.036    0.043   24.173    0.000    1.734    0.946
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .EN01              0.711    0.074    9.651    0.000    0.711    0.202
##    .EN02              0.444    0.049    9.012    0.000    0.444    0.130
##    .EN04              0.481    0.052    9.214    0.000    0.481    0.147
##    .EN05              0.375    0.042    8.830    0.000    0.375    0.118
##    .EN06              0.359    0.041    8.798    0.000    0.359    0.116
##    .EN07              0.499    0.055    9.129    0.000    0.499    0.139
##    .EN08              0.353    0.041    8.580    0.000    0.353    0.105
##     Energia           2.801    0.327    8.565    0.000    1.000    1.000

Las siete cargas son altas y significativas, con CFI ≈ 0.99 y TLI ≈ 0.98, lo que confirma que los ítems de energía se agrupan en una sola dimensión. El RMSEA queda un poco por encima de 0.08; si se quisiera afinar, se podría liberar la covarianza de error entre dos ítems muy parecidos (según los índices de modificación), pero el constructo es claramente unidimensional.

Parte 3: Análisis de senderos (mediación)

Se evalúa si la energía recuperada media el efecto de las experiencias de recuperación sobre el engagement laboral. El engagement se modela como factor de segundo orden (vigor, dedicación, absorción).

mod_p3 <- '
  # Medición
  Desapego   =~ RPD02 + RPD03 + RPD05 + RPD07 + RPD08 + RPD09 + RPD10
  Relajacion =~ RRE02 + RRE03 + RRE04 + RRE05 + RRE06 + RRE07 + RRE10
  Maestria   =~ RMA03 + RMA04 + RMA05 + RMA07 + RMA08 + RMA09 + RMA10
  Control    =~ RCO02 + RCO03 + RCO04 + RCO05 + RCO06 + RCO07
  Recuperacion =~ Desapego + Relajacion + Maestria + Control
  Energia    =~ EN01 + EN02 + EN04 + EN05 + EN06 + EN07 + EN08
  Vigor      =~ EVI01 + EVI02 + EVI03
  Dedicacion =~ EDE01 + EDE02 + EDE03
  Absorcion  =~ EAB01 + EAB02 + EAB03
  Engagement =~ Vigor + Dedicacion + Absorcion

  # Estructural (mediación)
  Energia    ~ a*Recuperacion
  Engagement ~ b*Energia + c*Recuperacion

  # Efectos
  indirecto := a*b
  directo   := c
  total     := c + (a*b)
'
fit_p3 <- sem(mod_p3, data = datos)
summary(fit_p3, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.6-21 ended normally after 66 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        96
## 
##   Number of observations                           223
## 
## Model Test User Model:
##                                                       
##   Test statistic                              2002.925
##   Degrees of freedom                               850
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                             12238.430
##   Degrees of freedom                               903
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.898
##   Tucker-Lewis Index (TLI)                       0.892
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)             -13966.019
##   Loglikelihood unrestricted model (H1)     -12964.557
##                                                       
##   Akaike (AIC)                               28124.039
##   Bayesian (BIC)                             28451.127
##   Sample-size adjusted Bayesian (SABIC)      28146.891
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.078
##   90 Percent confidence interval - lower         0.074
##   90 Percent confidence interval - upper         0.082
##   P-value H_0: RMSEA <= 0.050                    0.000
##   P-value H_0: RMSEA >= 0.080                    0.230
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.064
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Desapego =~                                                           
##     RPD02             1.000                               1.667    0.856
##     RPD03             0.950    0.064   14.914    0.000    1.584    0.797
##     RPD05             1.098    0.061   17.887    0.000    1.829    0.883
##     RPD07             1.019    0.062   16.374    0.000    1.699    0.842
##     RPD08             0.941    0.066   14.368    0.000    1.569    0.779
##     RPD09             1.105    0.062   17.816    0.000    1.841    0.881
##     RPD10             1.124    0.063   17.826    0.000    1.873    0.881
##   Relajacion =~                                                         
##     RRE02             1.000                               1.275    0.850
##     RRE03             1.120    0.065   17.288    0.000    1.428    0.871
##     RRE04             1.021    0.058   17.628    0.000    1.302    0.880
##     RRE05             1.052    0.056   18.693    0.000    1.341    0.908
##     RRE06             1.245    0.074   16.918    0.000    1.588    0.861
##     RRE07             1.121    0.071   15.835    0.000    1.430    0.829
##     RRE10             0.814    0.067   12.129    0.000    1.038    0.698
##   Maestria =~                                                           
##     RMA03             1.000                               1.587    0.781
##     RMA04             1.049    0.071   14.879    0.000    1.666    0.877
##     RMA05             1.010    0.070   14.492    0.000    1.604    0.860
##     RMA07             0.978    0.067   14.498    0.000    1.552    0.860
##     RMA08             0.993    0.068   14.603    0.000    1.576    0.865
##     RMA09             0.921    0.068   13.582    0.000    1.462    0.819
##     RMA10             0.931    0.071   13.050    0.000    1.477    0.794
##   Control =~                                                            
##     RCO02             1.000                               1.632    0.855
##     RCO03             0.945    0.049   19.164    0.000    1.542    0.910
##     RCO04             0.794    0.044   18.101    0.000    1.295    0.884
##     RCO05             0.814    0.043   18.924    0.000    1.329    0.904
##     RCO06             0.837    0.045   18.407    0.000    1.365    0.892
##     RCO07             0.836    0.046   18.202    0.000    1.364    0.887
##   Recuperacion =~                                                       
##     Desapego          1.000                               0.712    0.712
##     Relajacion        0.886    0.096    9.228    0.000    0.824    0.824
##     Maestria          0.829    0.114    7.260    0.000    0.619    0.619
##     Control           1.182    0.124    9.497    0.000    0.859    0.859
##   Energia =~                                                            
##     EN01              1.000                               1.678    0.896
##     EN02              1.027    0.044   23.421    0.000    1.723    0.933
##     EN04              0.998    0.044   22.875    0.000    1.675    0.925
##     EN05              0.996    0.042   23.840    0.000    1.671    0.939
##     EN06              0.982    0.041   23.859    0.000    1.649    0.939
##     EN07              1.044    0.045   22.965    0.000    1.753    0.926
##     EN08              1.033    0.042   24.400    0.000    1.733    0.946
##   Vigor =~                                                              
##     EVI01             1.000                               1.684    0.967
##     EVI02             0.985    0.028   35.283    0.000    1.659    0.962
##     EVI03             0.996    0.048   20.545    0.000    1.677    0.836
##   Dedicacion =~                                                         
##     EDE01             1.000                               1.868    0.952
##     EDE02             0.907    0.034   26.377    0.000    1.695    0.922
##     EDE03             0.570    0.037   15.539    0.000    1.066    0.754
##   Absorcion =~                                                          
##     EAB01             1.000                               1.607    0.917
##     EAB02             0.711    0.051   13.823    0.000    1.143    0.752
##     EAB03             0.735    0.063   11.599    0.000    1.181    0.671
##   Engagement =~                                                         
##     Vigor             1.000                               0.901    0.901
##     Dedicacion        1.213    0.061   19.814    0.000    0.985    0.985
##     Absorcion         0.958    0.059   16.371    0.000    0.904    0.904
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   Energia ~                                                             
##     Recuperacn (a)    1.170    0.123    9.547    0.000    0.827    0.827
##   Engagement ~                                                          
##     Energia    (b)    0.401    0.107    3.762    0.000    0.443    0.443
##     Recuperacn (c)    0.298    0.158    1.885    0.059    0.233    0.233
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .RPD02             1.017    0.112    9.079    0.000    1.017    0.268
##    .RPD03             1.443    0.150    9.621    0.000    1.443    0.365
##    .RPD05             0.946    0.110    8.637    0.000    0.946    0.220
##    .RPD07             1.189    0.129    9.245    0.000    1.189    0.292
##    .RPD08             1.598    0.164    9.729    0.000    1.598    0.394
##    .RPD09             0.976    0.113    8.673    0.000    0.976    0.224
##    .RPD10             1.008    0.116    8.668    0.000    1.008    0.223
##    .RRE02             0.624    0.067    9.252    0.000    0.624    0.277
##    .RRE03             0.648    0.072    8.977    0.000    0.648    0.241
##    .RRE04             0.492    0.056    8.826    0.000    0.492    0.225
##    .RRE05             0.383    0.047    8.195    0.000    0.383    0.176
##    .RRE06             0.881    0.097    9.122    0.000    0.881    0.259
##    .RRE07             0.930    0.098    9.459    0.000    0.930    0.313
##    .RRE10             1.136    0.113   10.087    0.000    1.136    0.513
##    .RMA03             1.607    0.167    9.623    0.000    1.607    0.389
##    .RMA04             0.831    0.097    8.550    0.000    0.831    0.230
##    .RMA05             0.905    0.102    8.851    0.000    0.905    0.260
##    .RMA07             0.845    0.096    8.846    0.000    0.845    0.260
##    .RMA08             0.835    0.095    8.772    0.000    0.835    0.252
##    .RMA09             1.051    0.113    9.342    0.000    1.051    0.330
##    .RMA10             1.282    0.134    9.542    0.000    1.282    0.370
##    .RCO02             0.978    0.104    9.391    0.000    0.978    0.269
##    .RCO03             0.493    0.058    8.476    0.000    0.493    0.172
##    .RCO04             0.468    0.052    9.014    0.000    0.468    0.218
##    .RCO05             0.393    0.046    8.619    0.000    0.393    0.182
##    .RCO06             0.479    0.054    8.881    0.000    0.479    0.204
##    .RCO07             0.505    0.056    8.972    0.000    0.505    0.213
##    .EN01              0.695    0.072    9.659    0.000    0.695    0.198
##    .EN02              0.443    0.049    9.063    0.000    0.443    0.130
##    .EN04              0.472    0.051    9.236    0.000    0.472    0.144
##    .EN05              0.378    0.042    8.907    0.000    0.378    0.119
##    .EN06              0.366    0.041    8.900    0.000    0.366    0.119
##    .EN07              0.507    0.055    9.209    0.000    0.507    0.142
##    .EN08              0.354    0.041    8.659    0.000    0.354    0.105
##    .EVI01             0.199    0.039    5.047    0.000    0.199    0.065
##    .EVI02             0.224    0.040    5.619    0.000    0.224    0.075
##    .EVI03             1.213    0.124    9.773    0.000    1.213    0.301
##    .EDE01             0.363    0.065    5.604    0.000    0.363    0.094
##    .EDE02             0.506    0.067    7.569    0.000    0.506    0.150
##    .EDE03             0.864    0.087    9.921    0.000    0.864    0.432
##    .EAB01             0.489    0.103    4.765    0.000    0.489    0.159
##    .EAB02             1.003    0.109    9.187    0.000    1.003    0.434
##    .EAB03             1.706    0.176    9.719    0.000    1.706    0.550
##    .Desapego          1.370    0.195    7.029    0.000    0.493    0.493
##    .Relajacion        0.521    0.086    6.047    0.000    0.320    0.320
##    .Maestria          1.553    0.239    6.508    0.000    0.616    0.616
##    .Control           0.696    0.126    5.530    0.000    0.261    0.261
##     Recuperacion      1.408    0.272    5.174    0.000    1.000    1.000
##    .Energia           0.891    0.137    6.521    0.000    0.316    0.316
##    .Vigor             0.536    0.085    6.330    0.000    0.189    0.189
##    .Dedicacion        0.102    0.090    1.138    0.255    0.029    0.029
##    .Absorcion         0.473    0.112    4.234    0.000    0.183    0.183
##    .Engagement        1.331    0.171    7.798    0.000    0.579    0.579
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     indirecto         0.469    0.131    3.588    0.000    0.367    0.367
##     directo           0.298    0.158    1.885    0.059    0.233    0.233
##     total             0.766    0.106    7.260    0.000    0.599    0.599
lavaanPlot(model = fit_p3, coefs = TRUE, stand = TRUE)

Efectos directos e indirectos. La ruta recuperación → energía (a) y la ruta energía → engagement (b) son significativas, por lo que el efecto indirecto (a*b) también lo es. En cambio, el efecto directo de recuperación sobre engagement (c) resulta no significativo (p ≈ 0.06) una vez que la energía está en el modelo. Esto indica una mediación total: las experiencias de recuperación no impactan directamente el engagement, sino a través de la energía recuperada. En la práctica, descansar mejor recupera energía, y esa energía es la que se traduce en engagement.

Parte 4: Modelo de medición

El modelo de medición toma los mismos constructos de la Parte 3 pero sin caminos direccionales: los tres constructos (recuperación, energía y engagement) quedan solo correlacionados.

mod_p4 <- '
  Desapego   =~ RPD02 + RPD03 + RPD05 + RPD07 + RPD08 + RPD09 + RPD10
  Relajacion =~ RRE02 + RRE03 + RRE04 + RRE05 + RRE06 + RRE07 + RRE10
  Maestria   =~ RMA03 + RMA04 + RMA05 + RMA07 + RMA08 + RMA09 + RMA10
  Control    =~ RCO02 + RCO03 + RCO04 + RCO05 + RCO06 + RCO07
  Recuperacion =~ Desapego + Relajacion + Maestria + Control
  Energia    =~ EN01 + EN02 + EN04 + EN05 + EN06 + EN07 + EN08
  Vigor      =~ EVI01 + EVI02 + EVI03
  Dedicacion =~ EDE01 + EDE02 + EDE03
  Absorcion  =~ EAB01 + EAB02 + EAB03
  Engagement =~ Vigor + Dedicacion + Absorcion
'
fit_p4 <- cfa(mod_p4, data = datos)
fitMeasures(fit_p4, c("chisq","df","cfi","tli","rmsea","srmr"))
##    chisq       df      cfi      tli    rmsea     srmr 
## 2002.925  850.000    0.898    0.892    0.078    0.064

El ajuste del modelo de medición es prácticamente igual al de la Parte 3 (CFI ≈ 0.90, RMSEA ≈ 0.078). Esto tiene sentido: como en la Parte 3 el modelo estructural entre los tres constructos está saturado (tres constructos, tres caminos), su ajuste depende únicamente de la parte de medición. Todos los constructos quedan bien definidos por sus indicadores y correlacionados entre sí.

Conclusión (Ejercicio 3)

El constructo de experiencias de recuperación se sostiene como un factor de segundo orden con cuatro dominios, y depurar cuatro ítems mejora el ajuste. La energía recuperada es unidimensional. Lo más relevante es que la energía media totalmente el efecto de la recuperación sobre el engagement: sin recuperar energía fuera del trabajo, las actividades de descanso por sí solas no elevan el engagement. La recomendación organizacional es promover el desapego y el descanso real fuera del horario laboral, porque es la vía por la que se recupera la energía que sostiene el engagement.

Ejercicio 4. Modelo de Ecuaciones Estructurales (Behson, Eddy y Lorenzet, 2000)

El estudio evalúa el Job Characteristics Model (JCM) de Hackman y Oldham con dos modelos en competencia:

  • Modelo 1 (JCM original, tres etapas): características del puesto → estados psicológicos críticos (significado, responsabilidad, conocimiento de resultados) → resultados (satisfacción, motivación, crecimiento). Los estados psicológicos son mediadores.
  • Modelo 2 (dos etapas): características del puesto → resultados, omitiendo los estados psicológicos.

Comparación de ajuste (Tabla 4 del artículo):

Índice Modelo 1 (con estados) Modelo 2 (sin estados) Regla
χ² (gl) 124.25 (25) 12.09 (3) ns
GFI 0.91 0.99 > 0.90
CFI 0.89 0.98 > 0.90
RMSEA 0.14 0.16 < 0.08
AIC / CAIC 294.48 / 446.29 80.09 / 227.56 menor = mejor
Rutas significativas 12 de 14 7 de 15
Varianza explicada 42% / 42% / 38% 37% / 43% / 32% mayor = mejor

¿Por qué eligen el Modelo 1 si el Modelo 2 ajusta mejor? Por los índices de ajuste (GFI, CFI, AIC, CAIC), el Modelo 2 gana. Pero los autores argumentan que comparar modelos requiere más que comparar el ajuste: importa la correspondencia con la teoría y la razonabilidad de los coeficientes. Tres razones concretas:

  1. Los estados psicológicos son el “núcleo causal” del modelo. El JCM se construyó alrededor de ellos; las características del puesto se identificaron para producir esos estados, no al revés. Quitarlos rompe el mecanismo teórico.
  2. Los coeficientes del Modelo 2 contradicen la teoría. En el Modelo 2, ocho de las nueve rutas entre variedad, significado e identidad de la tarea y los resultados salen no significativas. En el Modelo 1, esas mismas variables sí tienen efecto, pero indirecto, mediado por el significado experimentado. Es decir, aumentar la variedad de tareas sirve solo si genera sensación de significado; sin medir los estados psicológicos, uno concluiría erróneamente que esas características no importan.
  3. El Modelo 1 explica más varianza y tiene más rutas significativas (12/14 vs 7/15), y evita conclusiones prácticas equivocadas: subir las características del puesto tiene poco efecto si el empleado no experimenta los estados psicológicos.

Lección. Un mejor ajuste no significa un mejor modelo. La selección de modelos no puede basarse solo en las métricas: la teoría, la interpretabilidad de los coeficientes y la utilidad práctica pesan igual o más. Elegir el Modelo 2 por sus índices habría llevado a intervenciones organizacionales mal dirigidas. Esto conecta con la idea de fondo del curso: no decidir por el número solo, sino por lo que el modelo realmente explica y por su sustento conceptual.

LS0tCnRpdGxlOiAnQWN0aXZpZGFkIDM6IE1vZGVsb3MgZGUgZWN1YWNpb25lcyBlc3RydWN0dXJhbGVzJwphdXRob3I6ICJMdWlzIEFndWlsYXIiCmRhdGU6ICIyMDI2LTA4LTI2IgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRQogICAgY29kZV9kb3dubG9hZDogVFJVRQogICAgdGhlbWU6IHlldGkKLS0tCgojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gVGVvcsOtYSA8L3NwYW4+CgpMb3MgKiptb2RlbG9zIGRlIGVjdWFjaW9uZXMgZXN0cnVjdHVyYWxlcyAoU0VNKSoqIHNvbiB1bmEgdMOpY25pY2EgZGUgZXN0YWTDrXN0aWNhIG11bHRpdmFyaWFkYSBxdWUgcGVybWl0ZSBhbmFsaXphciBwYXRyb25lcyBjb21wbGVqb3MgZGUgcmVsYWNpb25lcyBlbnRyZSB2YXJpYWJsZXMsIGluY2x1eWVuZG8gKip2YXJpYWJsZXMgbGF0ZW50ZXMqKiAoY29uc3RydWN0b3MgcXVlIG5vIHNlIG1pZGVuIGRpcmVjdGFtZW50ZSwgc2lubyBxdWUgc2UgaW5maWVyZW4gYSBwYXJ0aXIgZGUgdmFyaW9zIMOtdGVtcyBvYnNlcnZhZG9zKS4gU2UgcHVlZGVuIHZlciBjb21vIHZhcmlvcyBhbsOhbGlzaXMgZmFjdG9yaWFsZXMgY29uZWN0YWRvcyBxdWUgcGVybWl0ZW4gZWZlY3RvcyBkaXJlY3RvcyBlIGluZGlyZWN0b3MgZW50cmUgbG9zIGZhY3RvcmVzLgoKVGlwb3MgZGUgZsOzcm11bGEgZW4gbGF2YWFuOgoKMS4gUmVncmVzacOzbiAoYH5gKTogdW5hIHZhcmlhYmxlIGRlcGVuZGUgZGUgb3RyYXMuCjIuIFZhcmlhYmxlIGxhdGVudGUgKGA9fmApOiBlbCBmYWN0b3Igc2UgaW5maWVyZSBkZSBzdXMgaW5kaWNhZG9yZXMuCjMuIFZhcmlhbnphIHkgY292YXJpYW56YSAoYH5+YCk6IHJlbGFjacOzbiBlbnRyZSB2YXJpYWJsZXMgKG8gZW50cmUgZXJyb3JlcykuCjQuIEVmZWN0byBkZWZpbmlkbyAoYDo9YCk6IHNlIHVzYSBwYXJhIGNhbGN1bGFyIGVmZWN0b3MgaW5kaXJlY3RvcyB5IHRvdGFsZXMuCgpQYXJhIGRlY2lkaXIgc2kgdW4gbW9kZWxvIGVzIGFkZWN1YWRvIHNlIHJldmlzYW4gbG9zICoqw61uZGljZXMgZGUgYWp1c3RlKio6IM+HwrIgKGlkZWFsbWVudGUgbm8gc2lnbmlmaWNhdGl2bywgYXVucXVlIGVzIHNlbnNpYmxlIGFsIHRhbWHDsW8gZGUgbXVlc3RyYSksICoqQ0ZJKiogeSAqKlRMSSoqICjiiaUgMC45NSBidWVubywg4omlIDAuOTAgYWNlcHRhYmxlKSwgKipSTVNFQSoqICjiiaQgMC4wNiBidWVubywg4omkIDAuMDggYWNlcHRhYmxlKSB5ICoqU1JNUioqICjiiaQgMC4wOCkuICJEZXB1cmFyIiBlbCBtb2RlbG8gc2lnbmlmaWNhIHF1aXRhciDDrXRlbXMgY29uIGNhcmdhcyBiYWphcyBvIGxpYmVyYXIgY292YXJpYW56YXMgZGUgZXJyb3IgcGFyYSBtZWpvcmFyIGVsIGFqdXN0ZS4KCmBgYHtyIGxpYnJlcmlhcywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBpbnN0YWxsLnBhY2thZ2VzKCJsYXZhYW4iKTsgaW5zdGFsbC5wYWNrYWdlcygibGF2YWFuUGxvdCIpOyBpbnN0YWxsLnBhY2thZ2VzKCJyZWFkeGwiKQpsaWJyYXJ5KGxhdmFhbikgICAgICAjIGxhdGVudCB2YXJpYWJsZSBhbmFseXNpcwpsaWJyYXJ5KGxhdmFhblBsb3QpCmxpYnJhcnkocmVhZHhsKQpgYGAKCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBFamVyY2ljaW8gMS4gSG9semluZ2VyIHkgU3dpbmVmb3JkIDwvc3Bhbj4KCkhvbHppbmdlciB5IFN3aW5lZm9yZCBhcGxpY2Fyb24gZXjDoW1lbmVzIGRlIGhhYmlsaWRhZCBtZW50YWwgYSBhZG9sZXNjZW50ZXMgZGUgZG9zIGVzY3VlbGFzLiBTZSBidXNjYSBpZGVudGlmaWNhciB0cmVzIGhhYmlsaWRhZGVzOiB2aXN1YWwgKHgx4oCTeDMpLCB0ZXh0dWFsICh4NOKAk3g2KSB5IHZlbG9jaWRhZCAoeDfigJN4OSkuIExhIGJhc2UgdmllbmUgaW5jbHVpZGEgZW4gbGF2YWFuLgoKYGBge3IgaHMtZGF0b3N9CmRmMSA8LSBIb2x6aW5nZXJTd2luZWZvcmQxOTM5CmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBFc3RydWN0dXJhciB5IGVzdGltYXIgZWwgbW9kZWxvIChDRkEpIDwvc3Bhbj4KCmBgYHtyIGhzLW1vZGVsb30KbW9kZWxvMSA8LSAnCiAgdmlzdWFsICAgID1+IHgxICsgeDIgKyB4MwogIHRleHR1YWwgICA9fiB4NCArIHg1ICsgeDYKICB2ZWxvY2lkYWQgPX4geDcgKyB4OCArIHg5CicKZml0MSA8LSBjZmEobW9kZWxvMSwgZGF0YSA9IGRmMSkKc3VtbWFyeShmaXQxLCBmaXQubWVhc3VyZXMgPSBUUlVFLCBzdGFuZGFyZGl6ZWQgPSBUUlVFKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gRGlhZ3JhbWEgZGVsIG1vZGVsbyA8L3NwYW4+CgpgYGB7ciBocy1wbG90fQpsYXZhYW5QbG90KG1vZGVsID0gZml0MSwgY29lZnMgPSBUUlVFLCBjb3ZzID0gVFJVRSwgc3RhbmQgPSBUUlVFKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gQ29uY2x1c2nDs24gPC9zcGFuPgoKTGFzIGNhcmdhcyBlc3RhbmRhcml6YWRhcyBkZSBsb3MgdHJlcyBmYWN0b3JlcyBzb24gc2lnbmlmaWNhdGl2YXMgeSBlbiBzdSBtYXlvcsOtYSBhbHRhcywgYXPDrSBxdWUgbG9zIG51ZXZlIMOtdGVtcyBtaWRlbiBsbyBxdWUgc2UgZXNwZXJhIChoYWJpbGlkYWQgdmlzdWFsLCB0ZXh0dWFsIHkgZGUgdmVsb2NpZGFkKS4gRWwgYWp1c3RlIGVzIGFjZXB0YWJsZSBwZXJvIG5vIHBlcmZlY3RvOiBDRkkg4omIIDAuOTMgeSBUTEkg4omIIDAuOTAgKGFjZXB0YWJsZXMpLCBtaWVudHJhcyBxdWUgZWwgUk1TRUEg4omIIDAuMDkgcXVlZGEgdW4gcG9jbyBhbHRvIHkgbGEgz4fCsiBzYWxlIHNpZ25pZmljYXRpdmEuIEVzIHVuIG1vZGVsbyB2w6FsaWRvIHBhcmEgZXN0b3MgZGF0b3MsIGF1bnF1ZSBzZSBwb2Ryw61hIG1lam9yYXIgbGliZXJhbmRvIGFsZ3VuYSBjb3ZhcmlhbnphIGRlIGVycm9yIChwb3IgZWplbXBsbyBlbnRyZSDDrXRlbXMgZGUgdmVsb2NpZGFkLCBxdWUgc3VlbGVuIGNvcnJlbGFjaW9uYXJzZSBwb3IgZWwgZm9ybWF0byBkZSBsYSBwcnVlYmEpLgoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IEVqZXJjaWNpbyAyLiBEZW1vY3JhY2lhIFBvbMOtdGljYSBlIEluZHVzdHJpYWxpemFjacOzbiA8L3NwYW4+CgpFcyBlbCBlamVtcGxvIGNsw6FzaWNvIGRlIEJvbGxlbi4gU2UgbW9kZWxhbiB0cmVzIGNvbnN0cnVjdG9zOiBpbmR1c3RyaWFsaXphY2nDs24gZW4gMTk2MCAoYGluZDYwYCksIGRlbW9jcmFjaWEgcG9sw610aWNhIGVuIDE5NjAgKGBkZW02MGApIHkgZGVtb2NyYWNpYSBwb2zDrXRpY2EgZW4gMTk2NSAoYGRlbTY1YCkuIExhIGJhc2UgdGFtYmnDqW4gdmllbmUgZW4gbGF2YWFuLgoKYGBge3IgcGQtZGF0b3N9CmRmMiA8LSBQb2xpdGljYWxEZW1vY3JhY3kKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IEVzdHJ1Y3R1cmFyIHkgZXN0aW1hciBlbCBtb2RlbG8gKFNFTSkgPC9zcGFuPgoKYGBge3IgcGQtbW9kZWxvfQptb2RlbG8yIDwtICcKICAjIE1vZGVsbyBkZSBtZWRpY2nDs24KICBpbmQ2MCA9fiB4MSArIHgyICsgeDMKICBkZW02MCA9fiB5MSArIHkyICsgeTMgKyB5NAogIGRlbTY1ID1+IHk1ICsgeTYgKyB5NyArIHk4CgogICMgTW9kZWxvIGVzdHJ1Y3R1cmFsCiAgZGVtNjAgfiBpbmQ2MAogIGRlbTY1IH4gaW5kNjAgKyBkZW02MAoKICAjIENvdmFyaWFuemFzIGRlIGVycm9yIChpbmRpY2Fkb3JlcyBtZWRpZG9zIGVuIDE5NjAgeSAxOTY1KQogIHkxIH5+IHk1CiAgeTIgfn4geTQgKyB5NgogIHkzIH5+IHk3CiAgeTQgfn4geTgKICB5NiB+fiB5OAonCmZpdDIgPC0gc2VtKG1vZGVsbzIsIGRhdGEgPSBkZjIpCnN1bW1hcnkoZml0MiwgZml0Lm1lYXN1cmVzID0gVFJVRSwgc3RhbmRhcmRpemVkID0gVFJVRSkKYGBgCgpgYGB7ciBwZC1wbG90fQpsYXZhYW5QbG90KG1vZGVsID0gZml0MiwgY29lZnMgPSBUUlVFLCBzdGFuZCA9IFRSVUUpCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBDb25jbHVzacOzbiA8L3NwYW4+CgpFbCBtb2RlbG8gYWp1c3RhIG11eSBiaWVuOiDPh8KyIG5vIHNpZ25pZmljYXRpdmEgKHAg4omIIDAuMzMpLCBDRkkg4omIIDAuOTksIFRMSSDiiYggMC45OSwgUk1TRUEg4omIIDAuMDMgeSBTUk1SIOKJiCAwLjA0LCB0b2RvcyBkZW50cm8gZGUgbG9zIHJhbmdvcyBkZSBidWVuIGFqdXN0ZS4gTGEgaW5kdXN0cmlhbGl6YWNpw7NuIGRlIDE5NjAgcHJlZGljZSBwb3NpdGl2YW1lbnRlIGxhIGRlbW9jcmFjaWEgZGUgMTk2MCB5IGRlIDE5NjUsIHkgbGEgZGVtb2NyYWNpYSBkZSAxOTYwIHByZWRpY2UgbGEgZGUgMTk2NSwgZXMgZGVjaXIsIGhheSAqKmVzdGFiaWxpZGFkIHRlbXBvcmFsKiogZGVsIGNvbnN0cnVjdG8uIExhcyBjb3ZhcmlhbnphcyBkZSBlcnJvciBlbnRyZSBsb3MgbWlzbW9zIGluZGljYWRvcmVzIG1lZGlkb3MgZW4gYcOxb3MgZGlzdGludG9zIGVyYW4gbmVjZXNhcmlhcyB5IG1lam9yYW4gZWwgYWp1c3RlLgoKIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IEVqZXJjaWNpbyAzLiBCaWVuZXN0YXIgZGUgbG9zIENvbGFib3JhZG9yZXMgPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBQcmVwYXJhY2nDs24gZGUgZGF0b3MgPC9zcGFuPgoKYGBge3Igc2VtLWRhdG9zfQojIEVsIGFyY2hpdm8gRGF0b3NfU0VNX0VuZy54bHN4IGRlYmUgZXN0YXIgZW4gbGEgbWlzbWEgY2FycGV0YSBxdWUgZXN0ZSAuUm1kCmRhdG9zIDwtIHJlYWRfZXhjZWwoIkRhdG9zX1NFTV9FbmcueGxzeCIsIHNoZWV0ID0gIkhvamExIikKbmFtZXMoZGF0b3MpIDwtIHRyaW13cyhuYW1lcyhkYXRvcykpICAgIyBsaW1waWFyIGVzcGFjaW9zIGFsIGZpbmFsIGRlIGxvcyBub21icmVzCmRpbShkYXRvcykKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IFBhcnRlIDE6IENGQSBkZSBzZWd1bmRvIG9yZGVuIChleHBlcmllbmNpYXMgZGUgcmVjdXBlcmFjacOzbikgPC9zcGFuPgoKTGFzIGV4cGVyaWVuY2lhcyBkZSByZWN1cGVyYWNpw7NuIHRpZW5lbiBjdWF0cm8gZG9taW5pb3MgKGRlc2FwZWdvLCByZWxhamFjacOzbiwgbWFlc3Ryw61hIHkgY29udHJvbCkgcXVlLCBhIHN1IHZleiwgc2UgZXhwbGljYW4gcG9yIHVuIGZhY3RvciBkZSBzZWd1bmRvIG9yZGVuLiBQcmltZXJvIGVzdGltbyBlbCBtb2RlbG8gY29uIHRvZG9zIGxvcyDDrXRlbXMgZGlzcG9uaWJsZXMuCgpgYGB7ciBwMS1jb21wbGV0b30KbW9kX3AxX2NvbXBsZXRvIDwtICcKICBEZXNhcGVnbyAgID1+IFJQRDAxICsgUlBEMDIgKyBSUEQwMyArIFJQRDA1ICsgUlBEMDYgKyBSUEQwNyArIFJQRDA4ICsgUlBEMDkgKyBSUEQxMAogIFJlbGFqYWNpb24gPX4gUlJFMDIgKyBSUkUwMyArIFJSRTA0ICsgUlJFMDUgKyBSUkUwNiArIFJSRTA3ICsgUlJFMTAKICBNYWVzdHJpYSAgID1+IFJNQTAyICsgUk1BMDMgKyBSTUEwNCArIFJNQTA1ICsgUk1BMDYgKyBSTUEwNyArIFJNQTA4ICsgUk1BMDkgKyBSTUExMAogIENvbnRyb2wgICAgPX4gUkNPMDIgKyBSQ08wMyArIFJDTzA0ICsgUkNPMDUgKyBSQ08wNiArIFJDTzA3CiAgUmVjdXBlcmFjaW9uID1+IERlc2FwZWdvICsgUmVsYWphY2lvbiArIE1hZXN0cmlhICsgQ29udHJvbAonCmZpdF9wMWMgPC0gY2ZhKG1vZF9wMV9jb21wbGV0bywgZGF0YSA9IGRhdG9zKQpmaXRNZWFzdXJlcyhmaXRfcDFjLCBjKCJjaGlzcSIsImRmIiwiY2ZpIiwidGxpIiwicm1zZWEiLCJzcm1yIikpCmBgYAoKKipEZXB1cmFjacOzbi4qKiBSZXZpc2FuZG8gbGFzIGNhcmdhcyBlc3RhbmRhcml6YWRhcyBtw6FzIGJhamFzIHkgbG9zIMOtbmRpY2VzIGRlIG1vZGlmaWNhY2nDs24gKGBtb2RpbmRpY2VzKGZpdF9wMWMpYCksIGxvcyDDrXRlbXMgKipSUEQwMSwgUlBEMDYsIFJNQTAyIHkgUk1BMDYqKiBzb24gbG9zIHF1ZSBtZW5vcyBhcG9ydGFuLiBBbCBlbGltaW5hcmxvcywgZWwgYWp1c3RlIG1lam9yYS4KCmBgYHtyIHAxLXB1cmlmaWNhZG99Cm1vZF9wMSA8LSAnCiAgRGVzYXBlZ28gICA9fiBSUEQwMiArIFJQRDAzICsgUlBEMDUgKyBSUEQwNyArIFJQRDA4ICsgUlBEMDkgKyBSUEQxMAogIFJlbGFqYWNpb24gPX4gUlJFMDIgKyBSUkUwMyArIFJSRTA0ICsgUlJFMDUgKyBSUkUwNiArIFJSRTA3ICsgUlJFMTAKICBNYWVzdHJpYSAgID1+IFJNQTAzICsgUk1BMDQgKyBSTUEwNSArIFJNQTA3ICsgUk1BMDggKyBSTUEwOSArIFJNQTEwCiAgQ29udHJvbCAgICA9fiBSQ08wMiArIFJDTzAzICsgUkNPMDQgKyBSQ08wNSArIFJDTzA2ICsgUkNPMDcKICBSZWN1cGVyYWNpb24gPX4gRGVzYXBlZ28gKyBSZWxhamFjaW9uICsgTWFlc3RyaWEgKyBDb250cm9sCicKZml0X3AxIDwtIGNmYShtb2RfcDEsIGRhdGEgPSBkYXRvcykKZml0TWVhc3VyZXMoZml0X3AxLCBjKCJjaGlzcSIsImRmIiwiY2ZpIiwidGxpIiwicm1zZWEiLCJzcm1yIikpCmBgYAoKYGBge3IgcDEtcGxvdH0KbGF2YWFuUGxvdChtb2RlbCA9IGZpdF9wMSwgY29lZnMgPSBUUlVFLCBzdGFuZCA9IFRSVUUpCmBgYAoKRWwgQ0ZJIHN1YmUgZGUg4omIIDAuODkgYSDiiYggMC45MiB5IGVsIFJNU0VBIGJhamEgZGUg4omIIDAuMDkgYSDiiYggMC4wODMuIEVsIG1vZGVsbyBkZXB1cmFkbyBhbGNhbnphIHVuIGFqdXN0ZSBhY2VwdGFibGUgeSBjb25maXJtYSBxdWUgbG9zIGN1YXRybyBkb21pbmlvcyBjYXJnYW4gc29icmUgdW4gZmFjdG9yIGRlIHNlZ3VuZG8gb3JkZW4gZGUgZXhwZXJpZW5jaWFzIGRlIHJlY3VwZXJhY2nDs24uCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IFBhcnRlIDI6IENGQSBkZSBlbmVyZ8OtYSByZWN1cGVyYWRhIDwvc3Bhbj4KCmBgYHtyIHAyfQptb2RfcDIgPC0gJ0VuZXJnaWEgPX4gRU4wMSArIEVOMDIgKyBFTjA0ICsgRU4wNSArIEVOMDYgKyBFTjA3ICsgRU4wOCcKZml0X3AyIDwtIGNmYShtb2RfcDIsIGRhdGEgPSBkYXRvcykKc3VtbWFyeShmaXRfcDIsIGZpdC5tZWFzdXJlcyA9IFRSVUUsIHN0YW5kYXJkaXplZCA9IFRSVUUpCmBgYAoKTGFzIHNpZXRlIGNhcmdhcyBzb24gYWx0YXMgeSBzaWduaWZpY2F0aXZhcywgY29uIENGSSDiiYggMC45OSB5IFRMSSDiiYggMC45OCwgbG8gcXVlIGNvbmZpcm1hIHF1ZSBsb3Mgw610ZW1zIGRlIGVuZXJnw61hIHNlIGFncnVwYW4gZW4gKip1bmEgc29sYSBkaW1lbnNpw7NuKiouIEVsIFJNU0VBIHF1ZWRhIHVuIHBvY28gcG9yIGVuY2ltYSBkZSAwLjA4OyBzaSBzZSBxdWlzaWVyYSBhZmluYXIsIHNlIHBvZHLDrWEgbGliZXJhciBsYSBjb3ZhcmlhbnphIGRlIGVycm9yIGVudHJlIGRvcyDDrXRlbXMgbXV5IHBhcmVjaWRvcyAoc2Vnw7puIGxvcyDDrW5kaWNlcyBkZSBtb2RpZmljYWNpw7NuKSwgcGVybyBlbCBjb25zdHJ1Y3RvIGVzIGNsYXJhbWVudGUgdW5pZGltZW5zaW9uYWwuCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+IFBhcnRlIDM6IEFuw6FsaXNpcyBkZSBzZW5kZXJvcyAobWVkaWFjacOzbikgPC9zcGFuPgoKU2UgZXZhbMO6YSBzaSBsYSBlbmVyZ8OtYSByZWN1cGVyYWRhICoqbWVkaWEqKiBlbCBlZmVjdG8gZGUgbGFzIGV4cGVyaWVuY2lhcyBkZSByZWN1cGVyYWNpw7NuIHNvYnJlIGVsIGVuZ2FnZW1lbnQgbGFib3JhbC4gRWwgZW5nYWdlbWVudCBzZSBtb2RlbGEgY29tbyBmYWN0b3IgZGUgc2VndW5kbyBvcmRlbiAodmlnb3IsIGRlZGljYWNpw7NuLCBhYnNvcmNpw7NuKS4KCmBgYHtyIHAzfQptb2RfcDMgPC0gJwogICMgTWVkaWNpw7NuCiAgRGVzYXBlZ28gICA9fiBSUEQwMiArIFJQRDAzICsgUlBEMDUgKyBSUEQwNyArIFJQRDA4ICsgUlBEMDkgKyBSUEQxMAogIFJlbGFqYWNpb24gPX4gUlJFMDIgKyBSUkUwMyArIFJSRTA0ICsgUlJFMDUgKyBSUkUwNiArIFJSRTA3ICsgUlJFMTAKICBNYWVzdHJpYSAgID1+IFJNQTAzICsgUk1BMDQgKyBSTUEwNSArIFJNQTA3ICsgUk1BMDggKyBSTUEwOSArIFJNQTEwCiAgQ29udHJvbCAgICA9fiBSQ08wMiArIFJDTzAzICsgUkNPMDQgKyBSQ08wNSArIFJDTzA2ICsgUkNPMDcKICBSZWN1cGVyYWNpb24gPX4gRGVzYXBlZ28gKyBSZWxhamFjaW9uICsgTWFlc3RyaWEgKyBDb250cm9sCiAgRW5lcmdpYSAgICA9fiBFTjAxICsgRU4wMiArIEVOMDQgKyBFTjA1ICsgRU4wNiArIEVOMDcgKyBFTjA4CiAgVmlnb3IgICAgICA9fiBFVkkwMSArIEVWSTAyICsgRVZJMDMKICBEZWRpY2FjaW9uID1+IEVERTAxICsgRURFMDIgKyBFREUwMwogIEFic29yY2lvbiAgPX4gRUFCMDEgKyBFQUIwMiArIEVBQjAzCiAgRW5nYWdlbWVudCA9fiBWaWdvciArIERlZGljYWNpb24gKyBBYnNvcmNpb24KCiAgIyBFc3RydWN0dXJhbCAobWVkaWFjacOzbikKICBFbmVyZ2lhICAgIH4gYSpSZWN1cGVyYWNpb24KICBFbmdhZ2VtZW50IH4gYipFbmVyZ2lhICsgYypSZWN1cGVyYWNpb24KCiAgIyBFZmVjdG9zCiAgaW5kaXJlY3RvIDo9IGEqYgogIGRpcmVjdG8gICA6PSBjCiAgdG90YWwgICAgIDo9IGMgKyAoYSpiKQonCmZpdF9wMyA8LSBzZW0obW9kX3AzLCBkYXRhID0gZGF0b3MpCnN1bW1hcnkoZml0X3AzLCBmaXQubWVhc3VyZXMgPSBUUlVFLCBzdGFuZGFyZGl6ZWQgPSBUUlVFKQpgYGAKCmBgYHtyIHAzLXBsb3R9CmxhdmFhblBsb3QobW9kZWwgPSBmaXRfcDMsIGNvZWZzID0gVFJVRSwgc3RhbmQgPSBUUlVFKQpgYGAKCioqRWZlY3RvcyBkaXJlY3RvcyBlIGluZGlyZWN0b3MuKiogTGEgcnV0YSByZWN1cGVyYWNpw7NuIOKGkiBlbmVyZ8OtYSAoYGFgKSB5IGxhIHJ1dGEgZW5lcmfDrWEg4oaSIGVuZ2FnZW1lbnQgKGBiYCkgc29uIHNpZ25pZmljYXRpdmFzLCBwb3IgbG8gcXVlIGVsICoqZWZlY3RvIGluZGlyZWN0byoqIChgYSpiYCkgdGFtYmnDqW4gbG8gZXMuIEVuIGNhbWJpbywgZWwgKiplZmVjdG8gZGlyZWN0byoqIGRlIHJlY3VwZXJhY2nDs24gc29icmUgZW5nYWdlbWVudCAoYGNgKSByZXN1bHRhICoqbm8gc2lnbmlmaWNhdGl2byoqIChwIOKJiCAwLjA2KSB1bmEgdmV6IHF1ZSBsYSBlbmVyZ8OtYSBlc3TDoSBlbiBlbCBtb2RlbG8uIEVzdG8gaW5kaWNhIHVuYSAqKm1lZGlhY2nDs24gdG90YWwqKjogbGFzIGV4cGVyaWVuY2lhcyBkZSByZWN1cGVyYWNpw7NuIG5vIGltcGFjdGFuIGRpcmVjdGFtZW50ZSBlbCBlbmdhZ2VtZW50LCBzaW5vIGEgdHJhdsOpcyBkZSBsYSBlbmVyZ8OtYSByZWN1cGVyYWRhLiBFbiBsYSBwcsOhY3RpY2EsIGRlc2NhbnNhciBtZWpvciByZWN1cGVyYSBlbmVyZ8OtYSwgeSBlc2EgZW5lcmfDrWEgZXMgbGEgcXVlIHNlIHRyYWR1Y2UgZW4gZW5nYWdlbWVudC4KCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gUGFydGUgNDogTW9kZWxvIGRlIG1lZGljacOzbiA8L3NwYW4+CgpFbCBtb2RlbG8gZGUgbWVkaWNpw7NuIHRvbWEgbG9zIG1pc21vcyBjb25zdHJ1Y3RvcyBkZSBsYSBQYXJ0ZSAzIHBlcm8gc2luIGNhbWlub3MgZGlyZWNjaW9uYWxlczogbG9zIHRyZXMgY29uc3RydWN0b3MgKHJlY3VwZXJhY2nDs24sIGVuZXJnw61hIHkgZW5nYWdlbWVudCkgcXVlZGFuIHNvbG8gY29ycmVsYWNpb25hZG9zLgoKYGBge3IgcDR9Cm1vZF9wNCA8LSAnCiAgRGVzYXBlZ28gICA9fiBSUEQwMiArIFJQRDAzICsgUlBEMDUgKyBSUEQwNyArIFJQRDA4ICsgUlBEMDkgKyBSUEQxMAogIFJlbGFqYWNpb24gPX4gUlJFMDIgKyBSUkUwMyArIFJSRTA0ICsgUlJFMDUgKyBSUkUwNiArIFJSRTA3ICsgUlJFMTAKICBNYWVzdHJpYSAgID1+IFJNQTAzICsgUk1BMDQgKyBSTUEwNSArIFJNQTA3ICsgUk1BMDggKyBSTUEwOSArIFJNQTEwCiAgQ29udHJvbCAgICA9fiBSQ08wMiArIFJDTzAzICsgUkNPMDQgKyBSQ08wNSArIFJDTzA2ICsgUkNPMDcKICBSZWN1cGVyYWNpb24gPX4gRGVzYXBlZ28gKyBSZWxhamFjaW9uICsgTWFlc3RyaWEgKyBDb250cm9sCiAgRW5lcmdpYSAgICA9fiBFTjAxICsgRU4wMiArIEVOMDQgKyBFTjA1ICsgRU4wNiArIEVOMDcgKyBFTjA4CiAgVmlnb3IgICAgICA9fiBFVkkwMSArIEVWSTAyICsgRVZJMDMKICBEZWRpY2FjaW9uID1+IEVERTAxICsgRURFMDIgKyBFREUwMwogIEFic29yY2lvbiAgPX4gRUFCMDEgKyBFQUIwMiArIEVBQjAzCiAgRW5nYWdlbWVudCA9fiBWaWdvciArIERlZGljYWNpb24gKyBBYnNvcmNpb24KJwpmaXRfcDQgPC0gY2ZhKG1vZF9wNCwgZGF0YSA9IGRhdG9zKQpmaXRNZWFzdXJlcyhmaXRfcDQsIGMoImNoaXNxIiwiZGYiLCJjZmkiLCJ0bGkiLCJybXNlYSIsInNybXIiKSkKYGBgCgpFbCBhanVzdGUgZGVsIG1vZGVsbyBkZSBtZWRpY2nDs24gZXMgcHLDoWN0aWNhbWVudGUgaWd1YWwgYWwgZGUgbGEgUGFydGUgMyAoQ0ZJIOKJiCAwLjkwLCBSTVNFQSDiiYggMC4wNzgpLiBFc3RvIHRpZW5lIHNlbnRpZG86IGNvbW8gZW4gbGEgUGFydGUgMyBlbCBtb2RlbG8gZXN0cnVjdHVyYWwgZW50cmUgbG9zIHRyZXMgY29uc3RydWN0b3MgZXN0w6Egc2F0dXJhZG8gKHRyZXMgY29uc3RydWN0b3MsIHRyZXMgY2FtaW5vcyksIHN1IGFqdXN0ZSBkZXBlbmRlIMO6bmljYW1lbnRlIGRlIGxhIHBhcnRlIGRlIG1lZGljacOzbi4gVG9kb3MgbG9zIGNvbnN0cnVjdG9zIHF1ZWRhbiBiaWVuIGRlZmluaWRvcyBwb3Igc3VzIGluZGljYWRvcmVzIHkgY29ycmVsYWNpb25hZG9zIGVudHJlIHPDrS4KCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4gQ29uY2x1c2nDs24gKEVqZXJjaWNpbyAzKSA8L3NwYW4+CgpFbCBjb25zdHJ1Y3RvIGRlIGV4cGVyaWVuY2lhcyBkZSByZWN1cGVyYWNpw7NuIHNlIHNvc3RpZW5lIGNvbW8gdW4gZmFjdG9yIGRlIHNlZ3VuZG8gb3JkZW4gY29uIGN1YXRybyBkb21pbmlvcywgeSBkZXB1cmFyIGN1YXRybyDDrXRlbXMgbWVqb3JhIGVsIGFqdXN0ZS4gTGEgZW5lcmfDrWEgcmVjdXBlcmFkYSBlcyB1bmlkaW1lbnNpb25hbC4gTG8gbcOhcyByZWxldmFudGUgZXMgcXVlIGxhIGVuZXJnw61hICoqbWVkaWEgdG90YWxtZW50ZSoqIGVsIGVmZWN0byBkZSBsYSByZWN1cGVyYWNpw7NuIHNvYnJlIGVsIGVuZ2FnZW1lbnQ6IHNpbiByZWN1cGVyYXIgZW5lcmfDrWEgZnVlcmEgZGVsIHRyYWJham8sIGxhcyBhY3RpdmlkYWRlcyBkZSBkZXNjYW5zbyBwb3Igc8OtIHNvbGFzIG5vIGVsZXZhbiBlbCBlbmdhZ2VtZW50LiBMYSByZWNvbWVuZGFjacOzbiBvcmdhbml6YWNpb25hbCBlcyBwcm9tb3ZlciBlbCBkZXNhcGVnbyB5IGVsIGRlc2NhbnNvIHJlYWwgZnVlcmEgZGVsIGhvcmFyaW8gbGFib3JhbCwgcG9ycXVlIGVzIGxhIHbDrWEgcG9yIGxhIHF1ZSBzZSByZWN1cGVyYSBsYSBlbmVyZ8OtYSBxdWUgc29zdGllbmUgZWwgZW5nYWdlbWVudC4KCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPiBFamVyY2ljaW8gNC4gTW9kZWxvIGRlIEVjdWFjaW9uZXMgRXN0cnVjdHVyYWxlcyAoQmVoc29uLCBFZGR5IHkgTG9yZW56ZXQsIDIwMDApIDwvc3Bhbj4KCkVsIGVzdHVkaW8gZXZhbMO6YSBlbCBKb2IgQ2hhcmFjdGVyaXN0aWNzIE1vZGVsIChKQ00pIGRlIEhhY2ttYW4geSBPbGRoYW0gY29uIGRvcyBtb2RlbG9zIGVuIGNvbXBldGVuY2lhOgoKLSAqKk1vZGVsbyAxIChKQ00gb3JpZ2luYWwsIHRyZXMgZXRhcGFzKToqKiBjYXJhY3RlcsOtc3RpY2FzIGRlbCBwdWVzdG8g4oaSIGVzdGFkb3MgcHNpY29sw7NnaWNvcyBjcsOtdGljb3MgKHNpZ25pZmljYWRvLCByZXNwb25zYWJpbGlkYWQsIGNvbm9jaW1pZW50byBkZSByZXN1bHRhZG9zKSDihpIgcmVzdWx0YWRvcyAoc2F0aXNmYWNjacOzbiwgbW90aXZhY2nDs24sIGNyZWNpbWllbnRvKS4gTG9zIGVzdGFkb3MgcHNpY29sw7NnaWNvcyBzb24gbWVkaWFkb3Jlcy4KLSAqKk1vZGVsbyAyIChkb3MgZXRhcGFzKToqKiBjYXJhY3RlcsOtc3RpY2FzIGRlbCBwdWVzdG8g4oaSIHJlc3VsdGFkb3MsICoqb21pdGllbmRvKiogbG9zIGVzdGFkb3MgcHNpY29sw7NnaWNvcy4KCkNvbXBhcmFjacOzbiBkZSBhanVzdGUgKFRhYmxhIDQgZGVsIGFydMOtY3Vsbyk6Cgp8IMONbmRpY2UgfCBNb2RlbG8gMSAoY29uIGVzdGFkb3MpIHwgTW9kZWxvIDIgKHNpbiBlc3RhZG9zKSB8IFJlZ2xhIHwKfC0tLXwtLS18LS0tfC0tLXwKfCDPh8KyIChnbCkgfCAxMjQuMjUgKDI1KSB8IDEyLjA5ICgzKSB8IG5zIHwKfCBHRkkgfCAwLjkxIHwgMC45OSB8ID4gMC45MCB8CnwgQ0ZJIHwgMC44OSB8IDAuOTggfCA+IDAuOTAgfAp8IFJNU0VBIHwgMC4xNCB8IDAuMTYgfCA8IDAuMDggfAp8IEFJQyAvIENBSUMgfCAyOTQuNDggLyA0NDYuMjkgfCA4MC4wOSAvIDIyNy41NiB8IG1lbm9yID0gbWVqb3IgfAp8IFJ1dGFzIHNpZ25pZmljYXRpdmFzIHwgMTIgZGUgMTQgfCA3IGRlIDE1IHwg4oCUIHwKfCBWYXJpYW56YSBleHBsaWNhZGEgfCA0MiUgLyA0MiUgLyAzOCUgfCAzNyUgLyA0MyUgLyAzMiUgfCBtYXlvciA9IG1lam9yIHwKCioqwr9Qb3IgcXXDqSBlbGlnZW4gZWwgTW9kZWxvIDEgc2kgZWwgTW9kZWxvIDIgYWp1c3RhIG1lam9yPyoqIFBvciBsb3Mgw61uZGljZXMgZGUgYWp1c3RlIChHRkksIENGSSwgQUlDLCBDQUlDKSwgZWwgTW9kZWxvIDIgZ2FuYS4gUGVybyBsb3MgYXV0b3JlcyBhcmd1bWVudGFuIHF1ZSBjb21wYXJhciBtb2RlbG9zIHJlcXVpZXJlIG3DoXMgcXVlIGNvbXBhcmFyIGVsIGFqdXN0ZTogaW1wb3J0YSBsYSAqKmNvcnJlc3BvbmRlbmNpYSBjb24gbGEgdGVvcsOtYSoqIHkgbGEgKipyYXpvbmFiaWxpZGFkIGRlIGxvcyBjb2VmaWNpZW50ZXMqKi4gVHJlcyByYXpvbmVzIGNvbmNyZXRhczoKCjEuICoqTG9zIGVzdGFkb3MgcHNpY29sw7NnaWNvcyBzb24gZWwgIm7DumNsZW8gY2F1c2FsIiBkZWwgbW9kZWxvLioqIEVsIEpDTSBzZSBjb25zdHJ1ecOzIGFscmVkZWRvciBkZSBlbGxvczsgbGFzIGNhcmFjdGVyw61zdGljYXMgZGVsIHB1ZXN0byBzZSBpZGVudGlmaWNhcm9uIHBhcmEgcHJvZHVjaXIgZXNvcyBlc3RhZG9zLCBubyBhbCByZXbDqXMuIFF1aXRhcmxvcyByb21wZSBlbCBtZWNhbmlzbW8gdGXDs3JpY28uCjIuICoqTG9zIGNvZWZpY2llbnRlcyBkZWwgTW9kZWxvIDIgY29udHJhZGljZW4gbGEgdGVvcsOtYS4qKiBFbiBlbCBNb2RlbG8gMiwgb2NobyBkZSBsYXMgbnVldmUgcnV0YXMgZW50cmUgdmFyaWVkYWQsIHNpZ25pZmljYWRvIGUgaWRlbnRpZGFkIGRlIGxhIHRhcmVhIHkgbG9zIHJlc3VsdGFkb3Mgc2FsZW4gKipubyBzaWduaWZpY2F0aXZhcyoqLiBFbiBlbCBNb2RlbG8gMSwgZXNhcyBtaXNtYXMgdmFyaWFibGVzIHPDrSB0aWVuZW4gZWZlY3RvLCBwZXJvICoqaW5kaXJlY3RvKiosIG1lZGlhZG8gcG9yIGVsIHNpZ25pZmljYWRvIGV4cGVyaW1lbnRhZG8uIEVzIGRlY2lyLCBhdW1lbnRhciBsYSB2YXJpZWRhZCBkZSB0YXJlYXMgc2lydmUgc29sbyBzaSBnZW5lcmEgc2Vuc2FjacOzbiBkZSBzaWduaWZpY2Fkbzsgc2luIG1lZGlyIGxvcyBlc3RhZG9zIHBzaWNvbMOzZ2ljb3MsIHVubyBjb25jbHVpcsOtYSBlcnLDs25lYW1lbnRlIHF1ZSBlc2FzIGNhcmFjdGVyw61zdGljYXMgbm8gaW1wb3J0YW4uCjMuICoqRWwgTW9kZWxvIDEgZXhwbGljYSBtw6FzIHZhcmlhbnphIHkgdGllbmUgbcOhcyBydXRhcyBzaWduaWZpY2F0aXZhcyoqICgxMi8xNCB2cyA3LzE1KSwgeSBldml0YSBjb25jbHVzaW9uZXMgcHLDoWN0aWNhcyBlcXVpdm9jYWRhczogc3ViaXIgbGFzIGNhcmFjdGVyw61zdGljYXMgZGVsIHB1ZXN0byB0aWVuZSBwb2NvIGVmZWN0byBzaSBlbCBlbXBsZWFkbyBubyBleHBlcmltZW50YSBsb3MgZXN0YWRvcyBwc2ljb2zDs2dpY29zLgoKKipMZWNjacOzbi4qKiBVbiBtZWpvciBhanVzdGUgbm8gc2lnbmlmaWNhIHVuIG1lam9yIG1vZGVsby4gTGEgc2VsZWNjacOzbiBkZSBtb2RlbG9zIG5vIHB1ZWRlIGJhc2Fyc2Ugc29sbyBlbiBsYXMgbcOpdHJpY2FzOiBsYSB0ZW9yw61hLCBsYSBpbnRlcnByZXRhYmlsaWRhZCBkZSBsb3MgY29lZmljaWVudGVzIHkgbGEgdXRpbGlkYWQgcHLDoWN0aWNhIHBlc2FuIGlndWFsIG8gbcOhcy4gRWxlZ2lyIGVsIE1vZGVsbyAyIHBvciBzdXMgw61uZGljZXMgaGFicsOtYSBsbGV2YWRvIGEgaW50ZXJ2ZW5jaW9uZXMgb3JnYW5pemFjaW9uYWxlcyBtYWwgZGlyaWdpZGFzLiBFc3RvIGNvbmVjdGEgY29uIGxhIGlkZWEgZGUgZm9uZG8gZGVsIGN1cnNvOiBubyBkZWNpZGlyIHBvciBlbCBuw7ptZXJvIHNvbG8sIHNpbm8gcG9yIGxvIHF1ZSBlbCBtb2RlbG8gcmVhbG1lbnRlIGV4cGxpY2EgeSBwb3Igc3Ugc3VzdGVudG8gY29uY2VwdHVhbC4K