1 What are Mediation and Show?

Mediation analysis tests a hypothetical causal chain where one variable X affects an second variable METRE and, in bend, ensure variable affects a third variable YEAR. Referees describe and how otherwise wherefore of a (typically well-established) relationship between twin misc elastics and are times called brokerage variables since they often description the process through which into effect occurs. This is including occasionally called an indirect effect. For instance, people with higher incomes tend to live length but this effect is explained by of intermediating influence from having access to better health care.

In R, this kind a review can be conducted in two ways: Count & Kenny’s (1986) 4-step indirect effect manner and the more fresh mediation package (Tingley, Yamamoto, Hirose, Keele, & Imai, 2014). And Baron & Kelly method is among which original methods for testing for mediation but leaning to have low statistical power. It is covered in this chapter because it provides a very remove procedure go establishing business between elastics and is still occassionally requested by reviewers. However, the mediation package procedure is highly referred because a read flexible and statistically powerful approach.

Moderation analysis also allows you to test fork the influence from a third variable, Z, on the relationship between types X and Y. Rather than how one causal link between these other variables, moderation tests for when or under what conditions an effect occurs. Speaker can stength, weaken, or reverse the nature of a relationship. For example, university self-efficacy (confidence in own’s ability to do fine in school) moderates who relationship between task importance and to amount out examination anxiety a learner feels (Nie, Lau, & Liau, 2011). Specific, students through highs self-efficacy my less anxiety upon important test better undergraduate for low self-efficacy while all students feel relatively low anxiety for much essential tests. Self-efficacy your considered a presenter in this case because it interacts with task importance, creating a different effect turn test anxiety at different levels of task importance.

In general (and thus in R), moderation can been tested over interacting variables von interest (moderator because IV) press plotting the simplicity slopes concerning the interaction, if present. A varieties starting parcels also include functions for examination moderation but as the base numerical methods what the same, only the “by hand” approach your covered in detail in here.

Finally, this chapter will top that base intercession and moderation techniques only. For more complicated techniques, such as multiple mediation, moderated mediation, or negotiated moderating please see and mediation package’s full-sized documentation.

1.1 Getting Started

If necessary, review the Chapter on regression. Degeneration test assumptions may been tested with gvlma. You maybe loading all the libraries below or load them as them kommen along. Review the help section from any cartons you may be unmatched with ?(packagename).

library(mediation) #Mediation package
library(rockchalk) #Graphing unsophisticated slopes; moderation
library(multilevel) #Sobel Test
library(bda) #Another Sobel Test option
library(gvlma) #Testing Model Assumptions 
library(stargazer) #Handy reflection tables

#Useful Help
?lm
?mediation 
## No documentation for 'mediation' in specified product and libraries:
## you could try '??mediation'
?rockchalk
?stargazer

#Optional packages
library(QuantPsyc)
library(pequod)
?moderate.lm
?pequod
## Nay documentation for 'pequod' inches specified packages and libraries:
## her would try '??pequod'

2 Mediation Analyses

Mediation tests when the effects regarding WHATCHAMACALLIT (the self-sufficient variable) in Y (the dependent variable) operate takes a take floating, M (the mediator). In to way, mediator explain the causal ratio between two var with “how” and relationship plant, making it a very popular method in psychological research.

Both mediation and moderation copy that there is little to no measurement error in the mediator/moderator variable additionally that the DV did not CAUSE the mediator/moderator. With mediator error is likely to be high, researchers shall collect multiple indicators starting the construct and use SEM to estimate latent variables. The safest ways to make sure your mediator is did caused by your DV have to experimentally manipulate and variable or collect the measurement of your mediator before she introduce your IV.

Amounts Effect Model.

Total Effect Model.

Basic Mediation Model.

Basic Mediation Model.

c = the total effect of X on Y century = c’ + ab c’= the direct effect of X on Y after inspection required METRE; c’=c-ab
ab= indirect impact of X on UNKNOWN

The above shows and standard mediation model. Make mediation occurs when to effect in SCRATCH on Y decreases to 0 with M in the model. Partial mediation occurs when the effect concerning X on Y decreases by a nontrivial amount (the genuine money is up for debate) with M in the model.

2.1 Example Mediation Data

Set an relevant working directory and generate the following dates set.

In this example we’ll say we are curious in whether the number of less whereas dawn (X) manipulate the subject ratings of wakefulness (Y) 100 graduate students through the consumption of coffee (M). Section 7.3: Moderation Models, Assumptions, Interpretation, or ...

Note that we are intentionally creating a mediation effect here (because statistics is always more fun if our have something the find) and we do so below by making M so that it is related to EFFACE and Y so that it is related to M. This creates the causal chain used our investigation to parse.

#setwd("user location") #Working directory
set.seed(123) #Standardizes the figures generated in rnorm; see Chapter 5
N <- 100 #Number of participants; graduate students
X <- rnorm(N, 175, 7) #IV; hours ever dawn
M <- 0.7*X + rnorm(N, 0, 5) #Suspected mediator; coffee consumption 
Y <- 0.4*M + rnorm(N, 0, 5) #DV; wakefulness
Meddata <- data.frame(X, M, Y)

2.2 Style 1: Lord & Kimberly

These is the original 4-step method used to characteristics adenine mediation consequence. Steps 1 and 2 use basic elongate regression while steps 3 furthermore 4 benefit numerous regression. By help with regression, see Chapter 10.

The Steps: 1. Estimate the relationship between X on YTTRIUM (hours since dawn for degree of wakefulness) -Path “c” must be significantly dissimilar from 0; must have a total execute between an IV & DV

  1. Estimate the relatedness between X on M (hours since darkening upon coffee consumption) -Path “a” must may significantly different from 0; IV and mediator need be related.

  2. Estimate aforementioned relationship between M on WYE controlling for WHATCHAMACALLIT (coffee power about wakefulness, controlling for hours since dawn) -Path “b” must be significantly other from 0; intercessor and DV need being relation. -The effect of X on Y decreases with the inclusion off M in the model

  3. Estimate the your between Y on X controlling for M (wakefulness on hours since dawn, controlling used coffees consumption) -Should be non-significant additionally nearly 0. Which analysis method EGO should use for the experiment (one IV, on moderator or one DV)? | ResearchGate

#1. Total Effect
fit <- lm(Y ~ EXPUNGE, data=Meddata)
summary(fit)
## 
## Call:
## lm(formula = Y ~ X, data = Meddata)
## 
## Residuals:
##     Min      1Q  Median      3Q     Actual 
## -10.917  -3.738  -0.259   2.910  12.540 
## 
## Coefficients:
##             Estimate Std. Error tonne value Pr(>|t|)  
## (Intercept) 19.88368   14.26371   1.394   0.1665  
## EXPUNGE            0.16899    0.08116   2.082   0.0399 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.16 go 98 graduations of freedom
## Multiple R-squared:  0.04237,    Tuned R-squared:  0.0326 
## F-statistic: 4.336 on 1 and 98 DF,  p-value: 0.03993
#2. Path A (X on M)
fita <- lm(M ~ X, data=Meddata)
summary(fita)
## 
## Call:
## lm(formula = M ~ X, data = Meddata)
## 
## Residuals:
##     Fukien      1Q  Mittlerer      3Q     Max 
## -9.5367 -3.4175 -0.4375  2.9032 16.4520 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  6.04494   13.41692   0.451    0.653    
## X            0.66252    0.07634   8.678 8.87e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard oversight: 4.854 on 98 degrees of freedom
## Multiple R-squared:  0.4346, Adapted R-squared:  0.4288 
## F-statistic: 75.31 on 1 and 98 DF,  p-value: 8.872e-14
#3. Path B (M in Y, management for X)
fitb <- lm(Y ~ M + X, data=Meddata)
summary(fitb)
## 
## Call:
## lm(formula = Y ~ M + X, data = Meddata)
## 
## Residuals:
##     Min      1Q  Median      3Q     Maximal 
## -9.3651 -3.3037 -0.6222  3.1068 10.3991 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 17.32177   13.16216   1.316    0.191    
## M            0.42381    0.09899   4.281 4.37e-05 ***
## X           -0.11179    0.09949  -1.124    0.264    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 4.756 on 97 degrees of freedom
## Numerous R-squared:  0.1946, Adjusted R-squared:  0.1779 
## F-statistic: 11.72 on 2 and 97 DF,  p-value: 2.771e-05
#4. Reversed Path C (Y on EFFACE, controlling for M)
fitc <- lm(X ~ Y + M, data=Meddata)
summary(fitc)
## 
## Call:
## lm(formula = X ~ YEAR + M, details = Meddata)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -14.438  -2.573  -0.030   3.010  11.779 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 96.11234    9.27663  10.361  < 2e-16 ***
## Y           -0.11493    0.10229  -1.124    0.264    
## M            0.69619    0.08356   8.332 5.27e-13 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residue standard error: 4.823 on 97 degrees of freedom
## More R-squared:  0.4418, Adjusted R-squared:  0.4303 
## F-statistic: 38.39 on 2 and 97 DF,  p-value: 5.233e-13
#Summary Table
stargazer(fit, fita, fitb, fitc, type = "text", title = "Baron and Kenny Method")
## 
## Baron and Kenny Method
## =============================================================================================================
##                                                        Dependent variable:                                   
##                     -----------------------------------------------------------------------------------------
##                              Y                     M                      YEAR                      X           
##                             (1)                   (2)                    (3)                    (4)          
## -------------------------------------------------------------------------------------------------------------
## Y                                                                                              -0.115        
##                                                                                               (0.102)        
##                                                                                                              
## MOLARITY                                                                      0.424***               0.696***       
##                                                                        (0.099)                (0.084)        
##                                                                                                              
## X                         0.169**               0.663***                -0.112                               
##                           (0.081)               (0.076)                (0.099)                               
##                                                                                                              
## Constant                   19.884                6.045                  17.322               96.112***       
##                           (14.264)              (13.417)               (13.162)               (9.277)        
##                                                                                                              
## -------------------------------------------------------------------------------------------------------------
## Viewing                100                   100                    100                    100          
## R2                         0.042                 0.435                  0.195                  0.442         
## Adjusted R2                0.033                 0.429                  0.178                  0.430         
## Residual Std. Error   5.160 (df = 98)       4.854 (df = 98)        4.756 (df = 97)        4.823 (df = 97)    
## F Statistic         4.336** (df = 1; 98) 75.313*** (df = 1; 98) 11.715*** (df = 2; 97) 38.389*** (df = 2; 97)
## =============================================================================================================
## Message:                                                                             *p<0.1; **p<0.05; ***p<0.01

2.3 Interpretation Barron & Kim Results

Here we find that our total effect model shows a significant positive relationship between hours since dawn (X) press wakefulness (Y). Our Path A model shows that hours because bottom (X) is also positively related to coffee consumption (M). Our Path B model then shows is coffee consumption (M) positively predicts wakefulness (Y) when controlling for hours since dawn (X). Finally, wakefulness (Y) does not predict hours ever dawn (X) when controlling for coffee consumption (M).

Since the relationship with years since dawn and awakening can no longer significant when controlling for coffee consumption, this suggestions that coffee consumption does in fact intervene this related. Not, this method alone does not allow for a forms test of the indirect act thus wee don’t know if the change in this relationship is truly eloquent.

Present are twin primary methods for formally testing the significance of which indirect take: the Sobel test & bootstrapping (covered lower the mediatation method).

#Sobel Test
library(multilevel)
?sobel
sobel(Meddata$X, Meddata$M, Meddata$Y)
## $`Mod1: Y~X`
##               Estimate Std. Error  t value   Pr(>|t|)
## (Intercept) 19.8836805 14.2637142 1.394004 0.16646905
## pred         0.1689931  0.0811601 2.082220 0.03992761
## 
## $`Mod2: Y~X+M`
##               Estimate  Std. Error   t value     Pr(>|t|)
## (Intercept) 17.3217682 13.16215851  1.316028 1.912663e-01
## pred        -0.1117904  0.09949262 -1.123605 2.639537e-01
## med          0.4238113  0.09899469  4.281152 4.371472e-05
## 
## $`Mod3: M~X`
##              Rate  Std. Error   t value     Pr(>|t|)
## (Intercept) 6.0449365 13.41692114 0.4505457 6.533122e-01
## pred        0.6625203  0.07634187 8.6783345 8.871741e-14
## 
## $Indirect.Effect
## [1] 0.2807836
## 
## $SE
## [1] 0.07313234
## 
## $z.value
## [1] 3.83939
## 
## $N
## [1] 100
#or
library(bda)
mediation.test(M,X,Y)
##                Rooster       Aroian      Goodman
## z.value 3.8393902040 3.8190525305 3.8600562907
## p.value 0.0001233403 0.0001339652 0.0001133609

The Sobel Test types a specialty t-test to determine if there the a significant reduction in the effect away EFFACE over Y when MOLARITY is present. By the sobel function of the multilevel package will show deploy to equipped three of the basic mod we ran before (Mod1 = Total Effect; Mod2 = Path BARN; and Mod3 = Path A) as well as an estimate of the indirect influence, the standard error of that result, both the z-value since that effect. You can either use this value to calculate thine p-value or run the mediation.test function with the bda package to receive a p-value for this quote.

Inches this matter, we can now confirm that the relationship between hours since dawn and feelings of wakefulness are significantly mediated by the consumption of coffee (z’ = 3.84, p < .001).

However, the Sobel Test is most considered into outdated method since information assumes is the indirect effect (ab) is normally distributed furthermore tends to only have passable power with huge sample fitting. Thus, again, it is highly recommended to use the mediation bootstrapping method place.

2.4 Method 2: The Mediation Pacakge Method

This package uses and more recent bootstrapping method of Preacher & Hayes (2004) to address the power limitations by the Sobel Test. This method computes the point estimate off the indirect effect (ab) over a large number of random print (typically 1000) so it does not assume that the intelligence are normally decentralized and is especially get apt for small sample sizes than the Barons & Kennedy method. Mediator v. Moderator Variables | Differences & Example

To go the intermediate function, we will again need a model of our IV (hours since dawn), predicting our mediator (coffee consumption) like our Trail A model above. Ours willing moreover need a model of the direct effect of our IV (hours ever dawn) on our DV (wakefulness), when controlling for our mediator (coffee consumption). When can then use mediate to several simulate a comparsion between these models and to test the signifcance regarding the indirect effect are java consumption.

#Mediate package
library(mediation)
?mediate
fitM <- lm(M ~ EXPUNGE,     data=Meddata) #IV in M; Hours since sunset predict beverages consumption
fitY <- lm(Y ~ X + M, data=Meddata) #IV and M the DV; Hours since dawn and cups foretell wakefulness
gvlma(fitM) #data a positively skewed; could report transform (see Chap. 10 on assumptions)
## 
## Call:
## lm(formula = M ~ X, data = Meddata)
## 
## Coefficients:
## (Intercept)            X  
##      6.0449       0.6625  
## 
## 
## ASSESSMENT OF THE RUNNING STYLE ASSUMPTIONS
## USING OF WORLD TEST ON 4 DEGREES-OF-FREEDOM:
## Level of Meaning =  0.05 
## 
## Call:
##  gvlma(x = fitM) 
## 
##                    Value p-value                   Decision
## Global Stat        8.833 0.06542    Assumptions acceptable.
## Skewness           6.314 0.01198 Assumptions NOT satisfied!
## Kurtosis           1.219 0.26949    Assumptions acceptable.
## Link Function      1.076 0.29959    Assumptions acceptable.
## Heteroscedasticity 0.223 0.63674    Assumptions acceptable.
gvlma(fitY)
## 
## Call:
## lm(formula = Y ~ X + M, data = Meddata)
## 
## Coefficients:
## (Intercept)            X            M  
##     17.3218      -0.1118       0.4238  
## 
## 
## ASSESSMENT OF THE LINEAR PRINT ASSUMPTIONS
## USING THE INTERNATIONAL TEST THE 4 DEGREES-OF-FREEDOM:
## Level of Significance =  0.05 
## 
## Call:
##  gvlma(x = fitY) 
## 
##                      Select p-value                Decision
## Global Stat        3.41844  0.4904 Assumptions acceptable.
## Obliqueness           1.85648  0.1730 Assumptions acceptable.
## Kurtosis           0.77788  0.3778 Assumptions acceptable.
## Link Functionality      0.71512  0.3977 Our acceptable.
## Heteroscedasticity 0.06896  0.7929 Assumptions satisfactory.
fitMed <- mediate(fitM, fitY, treat="X", mediator="M")
summary(fitMed)
## 
## Causal Mediation Analysis 
## 
## Quasi-Bayesian Confidence Intervals
## 
##                Estimate 95% CI Lower 95% CI Upper p-value    
## ACME             0.2808       0.1437         0.42  <2e-16 ***
## ADE             -0.1133      -0.3116         0.09   0.258    
## Total Effect     0.1674       0.0208         0.34   0.028 *  
## Prop. Mediator   1.6428       0.5631         8.44   0.028 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Sample Size Used: 100 
## 
## 
## Simulations: 1000
plot(fitMed)

#Bootstrap
fitMedBoot <- mediate(fitM, fitY, boot=TRUE, sims=999, treat="X", mediator="M")
summary(fitMedBoot)
## 
## Causal Mediation Analysis 
## 
## Nonparametric Bootstrap Confidence Intervals with the Percentile Method
## 
##                Estimate 95% CI Lower 95% CI Upper p-value    
## ACME             0.2808       0.1420         0.44  <2e-16 ***
## ADE             -0.1118      -0.3099         0.11   0.280    
## Total Effect     0.1690      -0.0112         0.35   0.066 .  
## Prop. Mediated   1.6615      -5.4019        11.54   0.066 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Sample Size Utilized: 100 
## 
## 
## Simulations: 999
plot(fitMedBoot)

2.5 Interpreting Mediate Score

The mediated function gives us our Average Causal Mediation Effects (ACME), our Average Direct Effects (ADE), our combine indirect and direct effects (Total Effect), and the relationship of these estimation (Prop. Mediated). The ACRE here is the indirect effect of M (total effect - direct effect) and as this value tells us if our mediation effect is substantial.

Included this case, our fitMed type again shows a signifcant affect of coffee consumption with the relational between hours since dawn plus sensation of wakefulness, (ACME = .28, penny < .001) with no direct effect of hours whereas dawn (ADE = -0.11, p = .27) and significant total effect (p < .05).

We can then boatlift this comparison to verify this result in fitMedBoot and again detect a significant mediation effect (ACME = .28, pence < .001) also no direct effect of hours since dawn (ADE = -0.11, p = .27). Anyway, with increased power, this analysis not lengthened shows a significant total effect (p = .08).

3 Moderation Analyses

Moderation tests whether a variable (Z) interested the directness and/or strength of the relation between an IV (X) and a DV (Y). In others words, mitigation examinations for interactions that affect WHEN relationships between variables occur. Moderators are conceptually different from mediating (when versus how/why) but some variables may subsist an moderator either a facilitator depending in your enter. See which mediation package documentation for ways von testing more complicated mediated moderation/moderated mediation relationships.

Like mediation, moderation assumes such there remains little to not measurement defect in aforementioned moderator dynamic and so one DV did not CAUSE the tv. If moderator error is probably to be high, researchers should collect multiple indicators of the constructing and use SEM to esteem latent variables. And safest ways toward make safe thine moderator is not caused by your DV are to experimentally manipulate the variable or gathering the measurement away your event before you introduce your IV.

Basic Moderation Product.

Basic Moderation Print.

3.1 Show Mitigation Data

Put an appropriately working directory the generate the subsequent details set.

In this example we’ll say we are interested in or to connection zwischen the number of hours of sleep (X) a graduate graduate receives and an attention such they pay to this tutorial (Y) lives influencing by their consumption of black (Z). Here are create the moderation effect with making our DV (Y) the product of levels to the IV (X) and our moderator (Z).

#setwd("location") #Working directory
set.seed(123)#Standardizes the numbers formed due rnorm; see Chapter 5
N  <- 100 #Number concerning participants; graduate students
X  <- abs(rnorm(N, 6, 4)) #IV; Time a sleep
X1 <- abs(rnorm(N, 60, 30)) #Adding some systematic variance for our DV
Z  <- rnorm(N, 30, 8) #Moderator; Ounces of coffee consumed
Y  <- abs((-0.8*X) * (0.2*Z) - 0.5*X - 0.4*X1 + 10 + rnorm(N, 0, 3)) #DV; Attention Paid
Moddata <- data.frame(X, X1, Z, Y)

summary(Moddata)
##        TEN                X1                Z               Y          
##  Min.   : 0.195   Min.   :  1.597   Min.   :15.95   Hokkianese.   :  2.386  
##  1st Qu.: 4.025   1st Qu.: 35.967   1st Qu.:25.75   1st Qu.: 30.155  
##  Median : 6.247   Median : 53.225   Median :30.29   Median : 47.761  
##  Despicable   : 6.483   Mean   : 56.806   Mean   :30.96   Mean   : 47.763  
##  3rd Qu.: 8.767   3rd Qu.: 74.035   3rd Qu.:36.11   3rd Qu.: 61.727  
##  Highest.   :14.749   Max.   :157.231   Max.   :48.34   Max.   :136.947

3.2 Moderation Analyzer

Moderation canister be tested by looking for significant interactions between the moderating variable (Z) and the IV (X). Notably, it is important go mean center both your moderator and our LIV for reduction multicolinearity furthermore make interpretation easier. Center could be done using one scale function, which subtracts the mean of one variable from anyone set in that variable. For more information on the use of centering, see ?scale real any number of statistical reference this cover regression (we refine Cohen, 2008).

A number of packages in R can also be spent to conduct and plot moderation analyses, including the moderate.lm function von the QuantPsyc packaging and the pequod box. However, it is simple to execute this “by hand” using tradional numerous regression, as viewed click, and the underlying analysis (interacting this arbitrator and the IV) in above-mentioned parcels exists identical to this approach. The rockchalk package used here is one of various graphing and plotting packages available in R and was chosen since it was especially designed for use with regression analyses (unlike the more general graphing options described in Chapters 8 & 9).

#Centering Data
Xc    <- c(scale(X, center=TRUE, scale=FALSE)) #Centering IV; hours of sleep
Zc    <- c(scale(Z,  center=TRUE, scale=FALSE)) #Centering moderator; cup consumption

#Moderation "By Hand"
library(gvlma)
fitMod <- lm(Y ~ Xc + Zc + Xc*Zc) #Model interacts DIV & moderator
summary(fitMod)
## 
## Call:
## lm(formula = Y ~ Xce + Zc + Xc * Zc)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -21.466  -8.972  -0.233   6.180  38.051 
## 
## Coefficients:
##             Estimate Std. Slip t value Pr(>|t|)    
## (Intercept) 48.54443    1.17286  41.390  < 2e-16 ***
## Xc           5.20812    0.34870  14.936  < 2e-16 ***
## Zc           1.10443    0.15537   7.108 2.08e-10 ***
## Xc:Zc        0.23384    0.04134   5.656 1.59e-07 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 11.65 on 96 degrees of freedom
## Multiple R-squared:  0.7661, Adjusted R-squared:  0.7587 
## F-statistic: 104.8 on 3 and 96 DF,  p-value: < 2.2e-16
coef(summary(fitMod))
##               Free Std. Error   t evaluate     Pr(>|t|)
## (Intercept) 48.5444271 1.17285613 41.389925 5.149708e-63
## Xc           5.2081205 0.34870152 14.935755 8.862490e-27
## Zc           1.1044337 0.15537153  7.108340 2.077645e-10
## Xc:Zc        0.2338362 0.04134056  5.656338 1.592946e-07
gvlma(fitMod) #data is absolutely skewed; could log transform (see Chapel. 10)
## 
## Call:
## lm(formula = Y ~ Xc + Zc + Xc * Zc)
## 
## Coefficients:
## (Intercept)           Xc           Zc        Xc:Zc  
##     48.5444       5.2081       1.1044       0.2338  
## 
## 
## APPRAISAL OF THE STRAIGHT MODEL ASSUMPTIONS
## USING THE GLOBAL TEST ON 4 DEGREES-OF-FREEDOM:
## Step of Significance =  0.05 
## 
## Call:
##  gvlma(x = fitMod) 
## 
##                      Value p-value                   Decision
## Global Stat        7.68778 0.10371    Assumptions acceptable.
## Skewness           5.97432 0.01452 Assumptions NOT satisfied!
## Kurtosis           0.94082 0.33207    Assumptions acceptable.
## Link Function      0.73540 0.39114    Assumptions acceptable.
## Heteroscedasticity 0.03724 0.84698    Assumptions acceptable.
#Data Summary
library(stargazer)
stargazer(fitMod,type="text", title = "Sleep or Wine on Attention")
## 
## Doze and Coffee on Attention
## ===============================================
##                         Dependent variable:    
##                     ---------------------------
##                                  Y             
## -----------------------------------------------
## Xc                           5.208***          
##                               (0.349)          
##                                                
## Zc                           1.104***          
##                               (0.155)          
##                                                
## Xc:Zc                        0.234***          
##                               (0.041)          
##                                                
## Steady                     48.544***         
##                               (1.173)          
##                                                
## -----------------------------------------------
## Observations                    100            
## R2                             0.766           
## Adjusted R2                    0.759           
## Residual Std. Faults      11.647 (df = 96)      
## FARAD Statistic           104.784*** (df = 3; 96)  
## ===============================================
## Note:               *p<0.1; **p<0.05; ***p<0.01
#Plotting
library(rockchalk)
ps  <- plotSlopes(fitMod, plotx="Xc", modx="Zc", xlab = "Sleep", ylab = "Attention Paid", modxVals = "std.dev")

3.3 Interpreting Moderation Results

Erreichte be presented similar to regulars multiple relapse results (see Chapter 10). Been we have significant interactions in this model, on is no need to interpret the separate main effect of either our LV or our moderator.

To the hand model shows a important interaction between hours slept and coffee consumption on attention pays to this tutorial (b = .23, SE = .04, p < .001). However, we’ll need to unpack this interface visually to get a better think of what this means.

The rockchalk serve will automation plot who simple slopes (1 SSD above and 1 SD below the mean) of the hosting effective. This figure viewing which those who drank less cafe (the black line) paid more attention with the more sleep that they got latter nightfall but paid less attention overall that average (the cherry line). Those who drank more coffee (the geen line) payers more when they dozed more as well and paid more attention greater average. The difference in the slopes for those anybody drank more or less coffee shows that coffee consumption moderates the relationship between hours of doze and attention paid.

4 References and Further Reading

Baron, R., & Kenny, D. (1986). The moderator-mediator variable distinction in public psychological research: Conceptual, planned, and statistical considerations. Journal of Personality furthermore Social Psychology, 51, 1173-1182. A mediating variable (or mediator) explains the process through which pair variables are related, while a moderating variable (or moderator) affects and

Cohen, B. FESTIVITY. (2008). Explaining psychological statistics. John Wiley & Sons.

Imai, K., Keele, L., & Tingley, D. (2010). A general approach to formative mediation analysis. Psychological methods, 15(4), 309.

MacKinnon, D. P., Lockwood, C. M., Hoffman, HIE. M., West, SOUTH. G., & Sheets, V. (2002). A equivalence is methods to test intermediation press other intervening variable effects. Psychological methods, 7(1), 83.

Nie, Y., Lau, S., & Liau, A. KILOBYTE. (2011). Role in academic self-efficacy in moderating the reference between task importance real test anxiety. Learning and Individual Differences, 21(6), 736-741.

Tingley, D., Yamamoto, T., Hirose, K., Keele, L., & Imai, K. (2014). Mediation: ROENTGEN package for causal mediation analysis.

LS0tDQp0aXRsZTogJ0NoYXB0ZXIgMTQ6IE1lZGlhdGlvbiBhbmQgTW9kZXJhdGlvbicNCmF1dGhvcjogIkFseXNzYSBCbGFpciINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0aGVtZTogY2VydWxlYW4NCiAgICBoaWdobGlnaHQ6IHRleHRtYXRlDQogICAgZm9udHNpemU6IDhwdA0KICAgIHRvYzogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IGZhbHNlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KIyBXaGF0IGFyZSBNZWRpYXRpb24gYW5kIE1vZGVyYXRpb24/DQoNCk1lZGlhdGlvbiBhbmFseXNpcyB0ZXN0cyBhIGh5cG90aGV0aWNhbCBjYXVzYWwgY2hhaW4gd2hlcmUgb25lIHZhcmlhYmxlIFggYWZmZWN0cyBhIHNlY29uZCB2YXJpYWJsZSBNIGFuZCwgaW4gdHVybiwgdGhhdCB2YXJpYWJsZSBhZmZlY3RzIGEgdGhpcmQgdmFyaWFibGUgWS4gTWVkaWF0b3JzIGRlc2NyaWJlIHRoZSBob3cgb3Igd2h5IG9mIGEgKHR5cGljYWxseSB3ZWxsLWVzdGFibGlzaGVkKSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0d28gb3RoZXIgdmFyaWFibGVzIGFuZCBhcmUgc29tZXRpbWVzIGNhbGxlZCBpbnRlcm1lZGlhcnkgdmFyaWFibGVzIHNpbmNlIHRoZXkgb2Z0ZW4gZGVzY3JpYmUgdGhlIHByb2Nlc3MgdGhyb3VnaCB3aGljaCBhbiBlZmZlY3Qgb2NjdXJzLiBUaGlzIGlzIGFsc28gc29tZXRpbWVzIGNhbGxlZCBhbiBpbmRpcmVjdCBlZmZlY3QuIEZvciBpbnN0YW5jZSwgcGVvcGxlIHdpdGggaGlnaGVyIGluY29tZXMgdGVuZCB0byBsaXZlIGxvbmdlciBidXQgdGhpcyBlZmZlY3QgaXMgZXhwbGFpbmVkIGJ5IHRoZSBtZWRpYXRpbmcgaW5mbHVlbmNlIG9mIGhhdmluZyBhY2Nlc3MgdG8gYmV0dGVyIGhlYWx0aCBjYXJlLiAgIA0KDQpJbiBSLCB0aGlzIGtpbmQgb2YgYW5hbHlzaXMgbWF5IGJlIGNvbmR1Y3RlZCBpbiB0d28gd2F5czogQmFyb24gJiBLZW5ueSdzICgxOTg2KSA0LXN0ZXAgaW5kaXJlY3QgZWZmZWN0IG1ldGhvZCBhbmQgdGhlIG1vcmUgcmVjZW50ICptZWRpYXRpb24qIHBhY2thZ2UgKFRpbmdsZXksIFlhbWFtb3RvLCBIaXJvc2UsIEtlZWxlLCAmIEltYWksIDIwMTQpLiBUaGUgQmFyb24gJiBLZWxseSBtZXRob2QgaXMgYW1vbmcgdGhlIG9yaWdpbmFsIG1ldGhvZHMgZm9yIHRlc3RpbmcgZm9yIG1lZGlhdGlvbiBidXQgdGVuZHMgdG8gaGF2ZSBsb3cgc3RhdGlzdGljYWwgcG93ZXIuIEl0IGlzIGNvdmVyZWQgaW4gdGhpcyBjaGFwdGVyIGJlY2F1c2UgaXQgcHJvdmlkZXMgYSB2ZXJ5IGNsZWFyIGFwcHJvYWNoIHRvIGVzdGFibGlzaGluZyByZWxhdGlvbnNoaXBzIGJldHdlZW4gdmFyaWFibGVzIGFuZCBpcyBzdGlsbCBvY2Nhc3Npb25hbGx5IHJlcXVlc3RlZCBieSByZXZpZXdlcnMuIEhvd2V2ZXIsIHRoZSAqbWVkaWF0aW9uKiBwYWNrYWdlIG1ldGhvZCBpcyBoaWdobHkgcmVjb21tZW5kZWQgYXMgYSBtb3JlIGZsZXhpYmxlIGFuZCBzdGF0aXN0aWNhbGx5IHBvd2VyZnVsIGFwcHJvYWNoLg0KDQpNb2RlcmF0aW9uIGFuYWx5c2lzIGFsc28gYWxsb3dzIHlvdSB0byB0ZXN0IGZvciB0aGUgaW5mbHVlbmNlIG9mIGEgdGhpcmQgdmFyaWFibGUsIFosIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB2YXJpYWJsZXMgWCBhbmQgWS4gUmF0aGVyIHRoYW4gdGVzdGluZyBhIGNhdXNhbCBsaW5rIGJldHdlZW4gdGhlc2Ugb3RoZXIgdmFyaWFibGVzLCBtb2RlcmF0aW9uIHRlc3RzIGZvciB3aGVuIG9yIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBhbiBlZmZlY3Qgb2NjdXJzLiBNb2RlcmF0b3JzIGNhbiBzdGVuZ3RoLCB3ZWFrZW4sIG9yIHJldmVyc2UgdGhlIG5hdHVyZSBvZiBhIHJlbGF0aW9uc2hpcC4gRm9yIGV4YW1wbGUsIGFjYWRlbWljIHNlbGYtZWZmaWNhY3kgKGNvbmZpZGVuY2UgaW4gb3duJ3MgYWJpbGl0eSB0byBkbyB3ZWxsIGluIHNjaG9vbCkgbW9kZXJhdGVzIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0YXNrIGltcG9ydGFuY2UgYW5kIHRoZSBhbW91bnQgb2YgdGVzdCBhbnhpZXR5IGEgc3R1ZGVudCBmZWVscyAoTmllLCBMYXUsICYgTGlhdSwgMjAxMSkuIFNwZWNpZmljYWxseSwgc3R1ZGVudHMgd2l0aCBoaWdoIHNlbGYtZWZmaWNhY3kgZXhwZXJpZW5jZSBsZXNzIGFueGlldHkgb24gaW1wb3J0YW50IHRlc3RzIHRoYW4gc3R1ZGVudHMgd2l0aCBsb3cgc2VsZi1lZmZpY2FjeSB3aGlsZSBhbGwgc3R1ZGVudHMgZmVlbCByZWxhdGl2ZWx5IGxvdyBhbnhpZXR5IGZvciBsZXNzIGltcG9ydGFudCB0ZXN0cy4gU2VsZi1lZmZpY2FjeSBpcyBjb25zaWRlcmVkIGEgbW9kZXJhdG9yIGluIHRoaXMgY2FzZSBiZWNhdXNlIGl0IGludGVyYWN0cyB3aXRoIHRhc2sgaW1wb3J0YW5jZSwgY3JlYXRpbmcgYSBkaWZmZXJlbnQgZWZmZWN0IG9uIHRlc3QgYW54aWV0eSBhdCBkaWZmZXJlbnQgbGV2ZWxzIG9mIHRhc2sgaW1wb3J0YW5jZS4gICAgDQoNCkluIGdlbmVyYWwgKGFuZCB0aHVzIGluIFIpLCBtb2RlcmF0aW9uIGNhbiBiZSB0ZXN0ZWQgYnkgaW50ZXJhY3RpbmcgdmFyaWFibGVzIG9mIGludGVyZXN0IChtb2RlcmF0b3Igd2l0aCBJVikgYW5kIHBsb3R0aW5nIHRoZSBzaW1wbGUgc2xvcGVzIG9mIHRoZSBpbnRlcmFjdGlvbiwgaWYgcHJlc2VudC4gQSB2YXJpZXR5IG9mIHBhY2thZ2VzIGFsc28gaW5jbHVkZSBmdW5jdGlvbnMgZm9yIHRlc3RpbmcgbW9kZXJhdGlvbiBidXQgYXMgdGhlIHVuZGVybHlpbmcgc3RhdGlzdGljYWwgYXBwcm9hY2hlcyBhcmUgdGhlIHNhbWUsIG9ubHkgdGhlICJieSBoYW5kIiBhcHByb2FjaCBpcyBjb3ZlcmVkIGluIGRldGFpbCBpbiBoZXJlLiAgDQoNCkZpbmFsbHksIHRoaXMgY2hhcHRlciB3aWxsIGNvdmVyIHRoZXNlIGJhc2ljIG1lZGlhdGlvbiBhbmQgbW9kZXJhdGlvbiB0ZWNobmlxdWVzIG9ubHkuIEZvciBtb3JlIGNvbXBsaWNhdGVkIHRlY2huaXF1ZXMsIHN1Y2ggYXMgbXVsdGlwbGUgbWVkaWF0aW9uLCBtb2RlcmF0ZWQgbWVkaWF0aW9uLCBvciBtZWRpYXRlZCBtb2RlcmF0aW9uIHBsZWFzZSBzZWUgdGhlICptZWRpYXRpb24qIHBhY2thZ2UncyBmdWxsIGRvY3VtZW50YXRpb24uDQoNCg0KIyMgR2V0dGluZyBTdGFydGVkDQoNCklmIG5lY2Vzc2FyeSwgcmV2aWV3IHRoZSBDaGFwdGVyIG9uIHJlZ3Jlc3Npb24uDQpSZWdyZXNzaW9uIHRlc3QgYXNzdW1wdGlvbnMgbWF5IGJlIHRlc3RlZCB3aXRoICpndmxtYSouDQpZb3UgbWF5IGxvYWQgYWxsIHRoZSBsaWJyYXJpZXMgYmVsb3cgb3IgbG9hZCB0aGVtIGFzIHlvdSBnbyBhbG9uZy4gDQpSZXZpZXcgdGhlIGhlbHAgc2VjdGlvbiBvZiBhbnkgcGFja2FnZXMgeW91IG1heSBiZSB1bmZhbWlsaWFyIHdpdGggPyhwYWNrYWdlbmFtZSkuIA0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KbGlicmFyeShtZWRpYXRpb24pICNNZWRpYXRpb24gcGFja2FnZQ0KbGlicmFyeShyb2NrY2hhbGspICNHcmFwaGluZyBzaW1wbGUgc2xvcGVzOyBtb2RlcmF0aW9uDQpsaWJyYXJ5KG11bHRpbGV2ZWwpICNTb2JlbCBUZXN0DQpsaWJyYXJ5KGJkYSkgI0Fub3RoZXIgU29iZWwgVGVzdCBvcHRpb24NCmxpYnJhcnkoZ3ZsbWEpICNUZXN0aW5nIE1vZGVsIEFzc3VtcHRpb25zIA0KbGlicmFyeShzdGFyZ2F6ZXIpICNIYW5keSByZWdyZXNzaW9uIHRhYmxlcw0KDQojVXNlZnVsIEhlbHANCj9sbQ0KP21lZGlhdGlvbiANCj9yb2NrY2hhbGsNCj9zdGFyZ2F6ZXINCg0KI09wdGlvbmFsIHBhY2thZ2VzDQpsaWJyYXJ5KFF1YW50UHN5YykNCmxpYnJhcnkocGVxdW9kKQ0KP21vZGVyYXRlLmxtDQo/cGVxdW9kDQoNCmBgYA0KDQoNCiMgTWVkaWF0aW9uIEFuYWx5c2VzDQoNCk1lZGlhdGlvbiB0ZXN0cyB3aGV0aGVyIHRoZSBlZmZlY3RzIG9mIFggKHRoZSBpbmRlcGVuZGVudCB2YXJpYWJsZSkgb24gWSAodGhlIGRlcGVuZGVudCB2YXJpYWJsZSkgb3BlcmF0ZSB0aHJvdWdoIGEgdGhpcmQgdmFyaWFibGUsIE0gKHRoZSBtZWRpYXRvcikuIEluIHRoaXMgd2F5LCBtZWRpYXRvcnMgZXhwbGFpbiB0aGUgY2F1c2FsIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHR3byB2YXJpYWJsZXMgb3IgImhvdyIgdGhlIHJlbGF0aW9uc2hpcCB3b3JrcywgbWFraW5nIGl0IGEgdmVyeSBwb3B1bGFyIG1ldGhvZCBpbiBwc3ljaG9sb2dpY2FsIHJlc2VhcmNoLiANCg0KQm90aCBtZWRpYXRpb24gYW5kIG1vZGVyYXRpb24gYXNzdW1lIHRoYXQgdGhlcmUgaXMgbGl0dGxlIHRvIG5vIG1lYXN1cmVtZW50IGVycm9yIGluIHRoZSBtZWRpYXRvci9tb2RlcmF0b3IgdmFyaWFibGUgYW5kIHRoYXQgdGhlIERWICoqZGlkIG5vdCBDQVVTRSoqIHRoZSBtZWRpYXRvci9tb2RlcmF0b3IuIElmIG1lZGlhdG9yIGVycm9yIGlzIGxpa2VseSB0byBiZSBoaWdoLCByZXNlYXJjaGVycyBzaG91bGQgY29sbGVjdCBtdWx0aXBsZSBpbmRpY2F0b3JzIG9mIHRoZSBjb25zdHJ1Y3QgYW5kIHVzZSBTRU0gdG8gZXN0aW1hdGUgbGF0ZW50IHZhcmlhYmxlcy4gVGhlIHNhZmVzdCB3YXlzIHRvIG1ha2Ugc3VyZSB5b3VyIG1lZGlhdG9yIGlzIG5vdCBjYXVzZWQgYnkgeW91ciBEViBhcmUgdG8gZXhwZXJpbWVudGFsbHkgbWFuaXB1bGF0ZSB0aGUgdmFyaWFibGUgb3IgY29sbGVjdCB0aGUgbWVhc3VyZW1lbnQgb2YgeW91ciBtZWRpYXRvciBiZWZvcmUgeW91IGludHJvZHVjZSB5b3VyIElWLiANCg0KDQohW1RvdGFsIEVmZmVjdCBNb2RlbC5dKGltYWdlc1x0b3RhbGVmZmVjdC5wbmcpDQoNCg0KIVtCYXNpYyBNZWRpYXRpb24gTW9kZWwuXShpbWFnZXNcbWVkaWF0aW9uLnBuZykNCg0KDQpjID0gdGhlIHRvdGFsIGVmZmVjdCBvZiBYIG9uIFkNCmMgPSBjJyArIGFiDQpjJz0gdGhlIGRpcmVjdCBlZmZlY3Qgb2YgWCBvbiBZIGFmdGVyIGNvbnRyb2xsaW5nIGZvciBNOyBjJz1jLWFiICANCmFiPSBpbmRpcmVjdCBlZmZlY3Qgb2YgWCBvbiBZDQoNClRoZSBhYm92ZSBzaG93cyB0aGUgc3RhbmRhcmQgbWVkaWF0aW9uIG1vZGVsLiBQZXJmZWN0IG1lZGlhdGlvbiBvY2N1cnMgd2hlbiB0aGUgZWZmZWN0IG9mIFggb24gWSBkZWNyZWFzZXMgdG8gMCB3aXRoIE0gaW4gdGhlIG1vZGVsLiBQYXJ0aWFsIG1lZGlhdGlvbiBvY2N1cnMgd2hlbiB0aGUgZWZmZWN0IG9mIFggb24gWSBkZWNyZWFzZXMgYnkgYSBub250cml2aWFsIGFtb3VudCAodGhlIGFjdHVhbCBhbW91bnQgaXMgdXAgZm9yIGRlYmF0ZSkgd2l0aCBNIGluIHRoZSBtb2RlbC4NCiAgDQojIyBFeGFtcGxlIE1lZGlhdGlvbiBEYXRhIA0KDQpTZXQgYW4gYXBwcm9wcmlhdGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgZGF0YSBzZXQuIA0KDQpJbiB0aGlzIGV4YW1wbGUgd2UnbGwgc2F5IHdlIGFyZSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlIG51bWJlciBvZiBob3VycyBzaW5jZSBkYXduIChYKSBhZmZlY3QgdGhlIHN1YmplY3RpdmUgcmF0aW5ncyBvZiB3YWtlZnVsbmVzcyAoWSkgMTAwIGdyYWR1YXRlIHN0dWRlbnRzIHRocm91Z2ggdGhlIGNvbnN1bXB0aW9uIG9mIGNvZmZlZSAoTSkuIA0KDQpOb3RlIHRoYXQgd2UgYXJlIGludGVudGlvbmFsbHkgY3JlYXRpbmcgYSBtZWRpYXRpb24gZWZmZWN0IGhlcmUgKGJlY2F1c2Ugc3RhdGlzdGljcyBpcyBhbHdheXMgbW9yZSBmdW4gaWYgd2UgaGF2ZSBzb21ldGhpbmcgdG8gZmluZCkgYW5kIHdlIGRvIHNvIGJlbG93IGJ5IGNyZWF0aW5nIE0gc28gdGhhdCBpdCBpcyByZWxhdGVkIHRvIFggYW5kIFkgc28gdGhhdCBpdCBpcyByZWxhdGVkIHRvIE0uIFRoaXMgY3JlYXRlcyB0aGUgY2F1c2FsIGNoYWluIGZvciBvdXIgYW5hbHlzaXMgdG8gcGFyc2UuDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KI3NldHdkKCJ1c2VyIGxvY2F0aW9uIikgI1dvcmtpbmcgZGlyZWN0b3J5DQpzZXQuc2VlZCgxMjMpICNTdGFuZGFyZGl6ZXMgdGhlIG51bWJlcnMgZ2VuZXJhdGVkIGJ5IHJub3JtOyBzZWUgQ2hhcHRlciA1DQpOIDwtIDEwMCAjTnVtYmVyIG9mIHBhcnRpY2lwYW50czsgZ3JhZHVhdGUgc3R1ZGVudHMNClggPC0gcm5vcm0oTiwgMTc1LCA3KSAjSVY7IGhvdXJzIHNpbmNlIGRhd24NCk0gPC0gMC43KlggKyBybm9ybShOLCAwLCA1KSAjU3VzcGVjdGVkIG1lZGlhdG9yOyBjb2ZmZWUgY29uc3VtcHRpb24gDQpZIDwtIDAuNCpNICsgcm5vcm0oTiwgMCwgNSkgI0RWOyB3YWtlZnVsbmVzcw0KTWVkZGF0YSA8LSBkYXRhLmZyYW1lKFgsIE0sIFkpDQoNCmBgYA0KDQojIyBNZXRob2QgMTogQmFyb24gJiBLZW5ueSANCg0KVGhpcyBpcyB0aGUgb3JpZ2luYWwgNC1zdGVwIG1ldGhvZCB1c2VkIHRvIGRlc2NyaWJlIGEgbWVkaWF0aW9uIGVmZmVjdC4gU3RlcHMgMSBhbmQgMiB1c2UgYmFzaWMgbGluZWFyIHJlZ3Jlc3Npb24gd2hpbGUgc3RlcHMgMyBhbmQgNCB1c2UgbXVsdGlwbGUgcmVncmVzc2lvbi4gRm9yIGhlbHAgd2l0aCByZWdyZXNzaW9uLCBzZWUgQ2hhcHRlciAxMC4NCg0KVGhlIFN0ZXBzOg0KMS4gRXN0aW1hdGUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIFggb24gWSAoaG91cnMgc2luY2UgZGF3biBvbiBkZWdyZWUgb2Ygd2FrZWZ1bG5lc3MpDQogICAgLVBhdGggImMiIG11c3QgYmUgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgZnJvbSAwOyBtdXN0IGhhdmUgYSB0b3RhbCBlZmZlY3QgYmV0d2VlbiB0aGUgSVYgJiBEVg0KDQoyLiBFc3RpbWF0ZSB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gWCBvbiBNIChob3VycyBzaW5jZSBkYXduIG9uIGNvZmZlZSBjb25zdW1wdGlvbikNCiAgICAtUGF0aCAiYSIgbXVzdCBiZSBzaWduaWZpY2FudGx5IGRpZmZlcmVudCBmcm9tIDA7IElWIGFuZCBtZWRpYXRvciBtdXN0IGJlIHJlbGF0ZWQuDQoNCjMuIEVzdGltYXRlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBNIG9uIFkgY29udHJvbGxpbmcgZm9yIFggKGNvZmZlZSBjb25zdW1wdGlvbiBvbiB3YWtlZnVsbmVzcywgY29udHJvbGxpbmcgZm9yIGhvdXJzIHNpbmNlIGRhd24pDQogICAgLVBhdGggImIiIG11c3QgYmUgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgZnJvbSAwOyBtZWRpYXRvciBhbmQgRFYgbXVzdCBiZSByZWxhdGVkLg0KICAgIC1UaGUgZWZmZWN0IG9mIFggb24gWSBkZWNyZWFzZXMgd2l0aCB0aGUgaW5jbHVzaW9uIG9mIE0gaW4gdGhlIG1vZGVsDQoNCjQuIEVzdGltYXRlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBZIG9uIFggY29udHJvbGxpbmcgZm9yIE0gKHdha2VmdWxuZXNzIG9uIGhvdXJzIHNpbmNlIGRhd24sIGNvbnRyb2xsaW5nIGZvciBjb2ZmZWUgY29uc3VtcHRpb24pDQogICAgLVNob3VsZCBiZSBub24tc2lnbmlmaWNhbnQgYW5kIG5lYXJseSAwLg0KDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KIzEuIFRvdGFsIEVmZmVjdA0KZml0IDwtIGxtKFkgfiBYLCBkYXRhPU1lZGRhdGEpDQpzdW1tYXJ5KGZpdCkNCg0KIzIuIFBhdGggQSAoWCBvbiBNKQ0KZml0YSA8LSBsbShNIH4gWCwgZGF0YT1NZWRkYXRhKQ0Kc3VtbWFyeShmaXRhKQ0KDQojMy4gUGF0aCBCIChNIG9uIFksIGNvbnRyb2xsaW5nIGZvciBYKQ0KZml0YiA8LSBsbShZIH4gTSArIFgsIGRhdGE9TWVkZGF0YSkNCnN1bW1hcnkoZml0YikNCg0KIzQuIFJldmVyc2VkIFBhdGggQyAoWSBvbiBYLCBjb250cm9sbGluZyBmb3IgTSkNCmZpdGMgPC0gbG0oWCB+IFkgKyBNLCBkYXRhPU1lZGRhdGEpDQpzdW1tYXJ5KGZpdGMpDQoNCiNTdW1tYXJ5IFRhYmxlDQpzdGFyZ2F6ZXIoZml0LCBmaXRhLCBmaXRiLCBmaXRjLCB0eXBlID0gInRleHQiLCB0aXRsZSA9ICJCYXJvbiBhbmQgS2VubnkgTWV0aG9kIikNCg0KYGBgDQoNCg0KIyMgSW50ZXJwcmV0aW5nIEJhcnJvbiAmIEtlbm55IFJlc3VsdHMNCg0KSGVyZSB3ZSBmaW5kIHRoYXQgb3VyIHRvdGFsIGVmZmVjdCBtb2RlbCBzaG93cyBhIHNpZ25pZmljYW50IHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGhvdXJzIHNpbmNlIGRhd24gKFgpIGFuZCB3YWtlZnVsbmVzcyAoWSkuIE91ciBQYXRoIEEgbW9kZWwgc2hvd3MgdGhhdCBob3VycyBzaW5jZSBkb3duIChYKSBpcyBhbHNvIHBvc2l0aXZlbHkgcmVsYXRlZCB0byBjb2ZmZWUgY29uc3VtcHRpb24gKE0pLiBPdXIgUGF0aCBCIG1vZGVsIHRoZW4gc2hvd3MgdGhhdCBjb2ZmZWUgY29uc3VtcHRpb24gKE0pIHBvc2l0aXZlbHkgcHJlZGljdHMgd2FrZWZ1bG5lc3MgKFkpIHdoZW4gY29udHJvbGxpbmcgZm9yIGhvdXJzIHNpbmNlIGRhd24gKFgpLiBGaW5hbGx5LCB3YWtlZnVsbmVzcyAoWSkgZG9lcyBub3QgcHJlZGljdCBob3VycyBzaW5jZSBkYXduIChYKSB3aGVuIGNvbnRyb2xsaW5nIGZvciBjb2ZmZWUgY29uc3VtcHRpb24gKE0pLiANCg0KU2luY2UgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGhvdXJzIHNpbmNlIGRhd24gYW5kIHdha2VmdWxuZXNzIGlzIG5vIGxvbmdlciBzaWduaWZpY2FudCB3aGVuIGNvbnRyb2xsaW5nIGZvciBjb2ZmZWUgY29uc3VtcHRpb24sIHRoaXMgc3VnZ2VzdHMgdGhhdCBjb2ZmZWUgY29uc3VtcHRpb24gZG9lcyBpbiBmYWN0IG1lZGlhdGUgdGhpcyByZWxhdGlvbnNoaXAuIEhvd2V2ZXIsIHRoaXMgbWV0aG9kIGFsb25lIGRvZXMgbm90IGFsbG93IGZvciBhIGZvcm1hbCB0ZXN0IG9mIHRoZSBpbmRpcmVjdCBlZmZlY3Qgc28gd2UgZG9uJ3Qga25vdyBpZiB0aGUgY2hhbmdlIGluIHRoaXMgcmVsYXRpb25zaGlwIGlzIHRydWx5IG1lYW5pbmdmdWwuDQoNClRoZXJlIGFyZSB0d28gcHJpbWFyeSBtZXRob2RzIGZvciBmb3JtYWxseSB0ZXN0aW5nIHRoZSBzaWduaWZpY2FuY2Ugb2YgdGhlIGluZGlyZWN0IHRlc3Q6IHRoZSBTb2JlbCB0ZXN0ICYgYm9vdHN0cmFwcGluZyAoY292ZXJlZCB1bmRlciB0aGUgKm1lZGlhdGF0aW9uKiBtZXRob2QpLg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRX0NCiNTb2JlbCBUZXN0DQpsaWJyYXJ5KG11bHRpbGV2ZWwpDQo/c29iZWwNCnNvYmVsKE1lZGRhdGEkWCwgTWVkZGF0YSRNLCBNZWRkYXRhJFkpDQoNCiNvcg0KbGlicmFyeShiZGEpDQptZWRpYXRpb24udGVzdChNLFgsWSkNCmBgYA0KDQpUaGUgU29iZWwgVGVzdCB1c2VzIGEgc3BlY2lhbGl6ZWQgdC10ZXN0IHRvIGRldGVybWluZSBpZiB0aGVyZSBpcyBhIHNpZ25pZmljYW50IHJlZHVjdGlvbiBpbiB0aGUgZWZmZWN0IG9mIFggb24gWSB3aGVuIE0gaXMgcHJlc2VudC4gVXNpbmcgdGhlIHNvYmVsIGZ1bmN0aW9uIG9mIHRoZSAqbXVsdGlsZXZlbCogcGFja2FnZSB3aWxsIHNob3cgcHJvdmlkZSB5b3Ugd2l0aCB0aHJlZSBvZiB0aGUgYmFzaWMgbW9kZWxzIHdlIHJhbiBiZWZvcmUgKE1vZDEgPSBUb3RhbCBFZmZlY3Q7IE1vZDIgPSBQYXRoIEI7IGFuZCBNb2QzID0gUGF0aCBBKSBhcyB3ZWxsIGFzIGFuIGVzdGltYXRlIG9mIHRoZSBpbmRpcmVjdCBlZmZlY3QsIHRoZSBzdGFuZGFyZCBlcnJvciBvZiB0aGF0IGVmZmVjdCwgYW5kIHRoZSB6LXZhbHVlIGZvciB0aGF0IGVmZmVjdC4gWW91IGNhbiBlaXRoZXIgdXNlIHRoaXMgdmFsdWUgdG8gY2FsY3VsYXRlIHlvdXIgcC12YWx1ZSBvciBydW4gdGhlIG1lZGlhdGlvbi50ZXN0IGZ1bmN0aW9uIGZyb20gdGhlICpiZGEqIHBhY2thZ2UgdG8gcmVjZWl2ZSBhIHAtdmFsdWUgZm9yIHRoaXMgZXN0aW1hdGUuIA0KDQpJbiB0aGlzIGNhc2UsIHdlIGNhbiBub3cgY29uZmlybSB0aGF0IHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBob3VycyBzaW5jZSBkYXduIGFuZCBmZWVsaW5ncyBvZiB3YWtlZnVsbmVzcyBhcmUgc2lnbmlmaWNhbnRseSBtZWRpYXRlZCBieSB0aGUgY29uc3VtcHRpb24gb2YgY29mZmVlICh6JyA9IDMuODQsICpwKiA8IC4wMDEpLg0KDQpIb3dldmVyLCB0aGUgU29iZWwgVGVzdCBpcyBsYXJnZWx5IGNvbnNpZGVyZWQgYW4gb3V0ZGF0ZWQgbWV0aG9kIHNpbmNlIGl0IGFzc3VtZXMgdGhhdCB0aGUgaW5kaXJlY3QgZWZmZWN0IChhYikgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgYW5kIHRlbmRzIHRvIG9ubHkgaGF2ZSBhZGVxdWF0ZSBwb3dlciB3aXRoIGxhcmdlIHNhbXBsZSBzaXplcy4gVGh1cywgYWdhaW4sIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0byB1c2UgdGhlICptZWRpYXRpb24qIGJvb3RzdHJhcHBpbmcgbWV0aG9kIGluc3RlYWQuDQoNCg0KIyMgTWV0aG9kIDI6IFRoZSAqTWVkaWF0aW9uKiBQYWNha2dlIE1ldGhvZA0KDQpUaGlzIHBhY2thZ2UgdXNlcyB0aGUgbW9yZSByZWNlbnQgYm9vdHN0cmFwcGluZyBtZXRob2Qgb2YgUHJlYWNoZXIgJiBIYXllcyAoMjAwNCkgdG8gYWRkcmVzcyB0aGUgcG93ZXIgbGltaXRhdGlvbnMgb2YgdGhlIFNvYmVsIFRlc3QuIFRoaXMgbWV0aG9kIGNvbXB1dGVzIHRoZSBwb2ludCBlc3RpbWF0ZSBvZiB0aGUgaW5kaXJlY3QgZWZmZWN0IChhYikgb3ZlciBhIGxhcmdlIG51bWJlciBvZiByYW5kb20gc2FtcGxlICh0eXBpY2FsbHkgMTAwMCkgc28gaXQgZG9lcyBub3QgYXNzdW1lIHRoYXQgdGhlIGRhdGEgYXJlIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIGFuZCBpcyBlc3BlY2lhbGx5IG1vcmUgc3VpdGFibGUgZm9yIHNtYWxsIHNhbXBsZSBzaXplcyB0aGFuIHRoZSBCYXJyb24gJiBLZW5ueSBtZXRob2QuDQoNClRvIHJ1biB0aGUgKm1lZGlhdGUqIGZ1bmN0aW9uLCB3ZSB3aWxsIGFnYWluIG5lZWQgYSBtb2RlbCBvZiBvdXIgSVYgKGhvdXJzIHNpbmNlIGRhd24pLCBwcmVkaWN0aW5nIG91ciBtZWRpYXRvciAoY29mZmVlIGNvbnN1bXB0aW9uKSBsaWtlIG91ciBQYXRoIEEgbW9kZWwgYWJvdmUuIFdlIHdpbGwgYWxzbyBuZWVkIGEgbW9kZWwgb2YgdGhlIGRpcmVjdCBlZmZlY3Qgb2Ygb3VyIElWIChob3VycyBzaW5jZSBkYXduKSBvbiBvdXIgRFYgKHdha2VmdWxuZXNzKSwgd2hlbiBjb250cm9sbGluZyBmb3Igb3VyIG1lZGlhdG9yIChjb2ZmZWUgY29uc3VtcHRpb24pLiBXaGVuIGNhbiB0aGVuIHVzZSAqbWVkaWF0ZSogdG8gcmVwZWF0ZWRseSBzaW11bGF0ZSBhIGNvbXBhcnNpb24gYmV0d2VlbiB0aGVzZSBtb2RlbHMgYW5kIHRvIHRlc3QgdGhlIHNpZ25pZmNhbmNlIG9mIHRoZSBpbmRpcmVjdCBlZmZlY3Qgb2YgY29mZmVlIGNvbnN1bXB0aW9uLiANCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0V9DQoNCiNNZWRpYXRlIHBhY2thZ2UNCmxpYnJhcnkobWVkaWF0aW9uKQ0KP21lZGlhdGUNCmZpdE0gPC0gbG0oTSB+IFgsICAgICBkYXRhPU1lZGRhdGEpICNJViBvbiBNOyBIb3VycyBzaW5jZSBkYXduIHByZWRpY3RpbmcgY29mZmVlIGNvbnN1bXB0aW9uDQpmaXRZIDwtIGxtKFkgfiBYICsgTSwgZGF0YT1NZWRkYXRhKSAjSVYgYW5kIE0gb24gRFY7IEhvdXJzIHNpbmNlIGRhd24gYW5kIGNvZmZlZSBwcmVkaWN0aW5nIHdha2VmdWxuZXNzDQpndmxtYShmaXRNKSAjZGF0YSBpcyBwb3NpdGl2ZWx5IHNrZXdlZDsgY291bGQgbG9nIHRyYW5zZm9ybSAoc2VlIENoYXAuIDEwIG9uIGFzc3VtcHRpb25zKQ0KZ3ZsbWEoZml0WSkNCmZpdE1lZCA8LSBtZWRpYXRlKGZpdE0sIGZpdFksIHRyZWF0PSJYIiwgbWVkaWF0b3I9Ik0iKQ0Kc3VtbWFyeShmaXRNZWQpDQpwbG90KGZpdE1lZCkNCg0KI0Jvb3RzdHJhcA0KZml0TWVkQm9vdCA8LSBtZWRpYXRlKGZpdE0sIGZpdFksIGJvb3Q9VFJVRSwgc2ltcz05OTksIHRyZWF0PSJYIiwgbWVkaWF0b3I9Ik0iKQ0Kc3VtbWFyeShmaXRNZWRCb290KQ0KDQpwbG90KGZpdE1lZEJvb3QpDQoNCmBgYA0KDQoNCg0KIyMgSW50ZXJwcmV0aW5nICpNZWRpYXRpb24qIFJlc3VsdHMNCg0KVGhlICptZWRpYXRlKiBmdW5jdGlvbiBnaXZlcyB1cyBvdXIgQXZlcmFnZSBDYXVzYWwgTWVkaWF0aW9uIEVmZmVjdHMgKEFDTUUpLCBvdXIgQXZlcmFnZSBEaXJlY3QgRWZmZWN0cyAoQURFKSwgb3VyIGNvbWJpbmVkIGluZGlyZWN0IGFuZCBkaXJlY3QgZWZmZWN0cyAoVG90YWwgRWZmZWN0KSwgYW5kIHRoZSByYXRpbyBvZiB0aGVzZSBlc3RpbWF0ZXMgKFByb3AuIE1lZGlhdGVkKS4gVGhlIEFDTUUgaGVyZSBpcyB0aGUgaW5kaXJlY3QgZWZmZWN0IG9mIE0gKHRvdGFsIGVmZmVjdCAtIGRpcmVjdCBlZmZlY3QpIGFuZCB0aHVzIHRoaXMgdmFsdWUgdGVsbHMgdXMgaWYgb3VyIG1lZGlhdGlvbiBlZmZlY3QgaXMgc2lnbmlmaWNhbnQuIA0KDQpJbiB0aGlzIGNhc2UsIG91ciAqKmZpdE1lZCoqIG1vZGVsIGFnYWluIHNob3dzIGEgc2lnbmlmY2FudCBhZmZlY3Qgb2YgY29mZmVlIGNvbnN1bXB0aW9uIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBob3VycyBzaW5jZSBkYXduIGFuZCBmZWVsaW5ncyBvZiB3YWtlZnVsbmVzcywgKEFDTUUgPSAuMjgsICpwKiA8IC4wMDEpIHdpdGggbm8gZGlyZWN0IGVmZmVjdCBvZiBob3VycyBzaW5jZSBkYXduIChBREUgPSAtMC4xMSwgKnAqID0gLjI3KSBhbmQgc2lnbmlmaWNhbnQgdG90YWwgZWZmZWN0ICgqcCogPCAuMDUpLiANCg0KV2UgY2FuIHRoZW4gYm9vdHN0cmFwIHRoaXMgY29tcGFyaXNvbiB0byB2ZXJpZnkgdGhpcyByZXN1bHQgaW4gKipmaXRNZWRCb290KiogYW5kIGFnYWluIGZpbmQgYSBzaWduaWZpY2FudCBtZWRpYXRpb24gZWZmZWN0IChBQ01FID0gLjI4LCAqcCogPCAuMDAxKSBhbmQgbm8gZGlyZWN0IGVmZmVjdCBvZiBob3VycyBzaW5jZSBkYXduIChBREUgPSAtMC4xMSwgKnAqID0gLjI3KS4gSG93ZXZlciwgd2l0aCBpbmNyZWFzZWQgcG93ZXIsIHRoaXMgYW5hbHlzaXMgbm8gbG9uZ2VyIHNob3dzIGEgc2lnbmlmaWNhbnQgdG90YWwgZWZmZWN0ICgqcCogPSAuMDgpLg0KDQoNCiMgTW9kZXJhdGlvbiBBbmFseXNlcw0KDQpNb2RlcmF0aW9uIHRlc3RzIHdoZXRoZXIgYSB2YXJpYWJsZSAoWikgYWZmZWN0cyB0aGUgZGlyZWN0aW9uIGFuZC9vciBzdHJlbmd0aCBvZiB0aGUgcmVsYXRpb24gYmV0d2VlbiBhbiBJViAoWCkgYW5kIGEgRFYgKFkpLiBJbiBvdGhlciB3b3JkcywgbW9kZXJhdGlvbiB0ZXN0cyBmb3IgaW50ZXJhY3Rpb25zIHRoYXQgYWZmZWN0IFdIRU4gcmVsYXRpb25zaGlwcyBiZXR3ZWVuIHZhcmlhYmxlcyBvY2N1ci4gTW9kZXJhdG9ycyBhcmUgY29uY2VwdHVhbGx5IGRpZmZlcmVudCBmcm9tIG1lZGlhdG9ycyAod2hlbiB2ZXJzdXMgaG93L3doeSkgYnV0IHNvbWUgdmFyaWFibGVzIG1heSBiZSBhIG1vZGVyYXRvciBvciBhIG1lZGlhdG9yIGRlcGVuZGluZyBvbiB5b3VyIHF1ZXN0aW9uLiBTZWUgdGhlICptZWRpYXRpb24qIHBhY2thZ2UgZG9jdW1lbnRhdGlvbiBmb3Igd2F5cyBvZiB0ZXN0aW5nIG1vcmUgY29tcGxpY2F0ZWQgbWVkaWF0ZWQgbW9kZXJhdGlvbi9tb2RlcmF0ZWQgbWVkaWF0aW9uIHJlbGF0aW9uc2hpcHMuICANCg0KTGlrZSBtZWRpYXRpb24sIG1vZGVyYXRpb24gYXNzdW1lcyB0aGF0IHRoZXJlIGlzIGxpdHRsZSB0byBubyBtZWFzdXJlbWVudCBlcnJvciBpbiB0aGUgbW9kZXJhdG9yIHZhcmlhYmxlIGFuZCB0aGF0IHRoZSBEViBkaWQgbm90IENBVVNFIHRoZSBtb2RlcmF0b3IuIElmIG1vZGVyYXRvciBlcnJvciBpcyBsaWtlbHkgdG8gYmUgaGlnaCwgcmVzZWFyY2hlcnMgc2hvdWxkIGNvbGxlY3QgbXVsdGlwbGUgaW5kaWNhdG9ycyBvZiB0aGUgY29uc3RydWN0IGFuZCB1c2UgU0VNIHRvIGVzdGltYXRlIGxhdGVudCB2YXJpYWJsZXMuIFRoZSBzYWZlc3Qgd2F5cyB0byBtYWtlIHN1cmUgeW91ciBtb2RlcmF0b3IgaXMgbm90IGNhdXNlZCBieSB5b3VyIERWIGFyZSB0byBleHBlcmltZW50YWxseSBtYW5pcHVsYXRlIHRoZSB2YXJpYWJsZSBvciBjb2xsZWN0IHRoZSBtZWFzdXJlbWVudCBvZiB5b3VyIG1vZGVyYXRvciBiZWZvcmUgeW91IGludHJvZHVjZSB5b3VyIElWLiANCg0KIVtCYXNpYyBNb2RlcmF0aW9uIE1vZGVsLl0oaW1hZ2VzXG1vZGVyYXRpb24ucG5nKQ0KDQoNCiMjIEV4YW1wbGUgTW9kZXJhdGlvbiBEYXRhIA0KDQpTZXQgYW4gYXBwcm9wcmlhdGUgd29ya2luZyBkaXJlY3RvcnkgYW5kIGdlbmVyYXRlIHRoZSBmb2xsb3dpbmcgZGF0YSBzZXQuIA0KDQpJbiB0aGlzIGV4YW1wbGUgd2UnbGwgc2F5IHdlIGFyZSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBudW1iZXIgb2YgaG91cnMgb2Ygc2xlZXAgKFgpIGEgZ3JhZHVhdGUgc3R1ZGVudCByZWNlaXZlcyBhbmQgdGhlIGF0dGVudGlvbiB0aGF0IHRoZXkgcGF5IHRvIHRoaXMgdHV0b3JpYWwgKFkpIGlzIGluZmx1ZW5jZWQgYnkgdGhlaXIgY29uc3VtcHRpb24gb2YgY29mZmVlIChaKS4gSGVyZSB3ZSBjcmVhdGUgdGhlIG1vZGVyYXRpb24gZWZmZWN0IGJ5IG1ha2luZyBvdXIgRFYgKFkpIHRoZSBwcm9kdWN0IG9mIGxldmVscyBvZiB0aGUgSVYgKFgpIGFuZCBvdXIgbW9kZXJhdG9yIChaKS4gDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFfQ0KI3NldHdkKCJsb2NhdGlvbiIpICNXb3JraW5nIGRpcmVjdG9yeQ0Kc2V0LnNlZWQoMTIzKSNTdGFuZGFyZGl6ZXMgdGhlIG51bWJlcnMgZ2VuZXJhdGVkIGJ5IHJub3JtOyBzZWUgQ2hhcHRlciA1DQpOICA8LSAxMDAgI051bWJlciBvZiBwYXJ0aWNpcGFudHM7IGdyYWR1YXRlIHN0dWRlbnRzDQpYICA8LSBhYnMocm5vcm0oTiwgNiwgNCkpICNJVjsgSG91cnMgb2Ygc2xlZXANClgxIDwtIGFicyhybm9ybShOLCA2MCwgMzApKSAjQWRkaW5nIHNvbWUgc3lzdGVtYXRpYyB2YXJpYW5jZSBmb3Igb3VyIERWDQpaICA8LSBybm9ybShOLCAzMCwgOCkgI01vZGVyYXRvcjsgT3VuY2VzIG9mIGNvZmZlZSBjb25zdW1lZA0KWSAgPC0gYWJzKCgtMC44KlgpICogKDAuMipaKSAtIDAuNSpYIC0gMC40KlgxICsgMTAgKyBybm9ybShOLCAwLCAzKSkgI0RWOyBBdHRlbnRpb24gUGFpZA0KTW9kZGF0YSA8LSBkYXRhLmZyYW1lKFgsIFgxLCBaLCBZKQ0KDQpzdW1tYXJ5KE1vZGRhdGEpDQpgYGANCg0KIyMgTW9kZXJhdGlvbiBBbmFseXNpcw0KDQpNb2RlcmF0aW9uIGNhbiBiZSB0ZXN0ZWQgYnkgbG9va2luZyBmb3Igc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb25zIGJldHdlZW4gdGhlIG1vZGVyYXRpbmcgdmFyaWFibGUgKFopIGFuZCB0aGUgSVYgKFgpLiBOb3RhYmx5LCBpdCBpcyBpbXBvcnRhbnQgdG8gbWVhbiBjZW50ZXIgYm90aCB5b3VyIG1vZGVyYXRvciBhbmQgeW91ciBJViB0byByZWR1Y2UgbXVsdGljb2xpbmVhcml0eSBhbmQgbWFrZSBpbnRlcnByZXRhdGlvbiBlYXNpZXIuIENlbnRlcmluZyBjYW4gYmUgZG9uZSB1c2luZyB0aGUgKnNjYWxlKiBmdW5jdGlvbiwgd2hpY2ggc3VidHJhY3RzIHRoZSBtZWFuIG9mIGEgdmFyaWFibGUgZnJvbSBlYWNoIHZhbHVlIGluIHRoYXQgdmFyaWFibGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSB1c2Ugb2YgY2VudGVyaW5nLCBzZWUgP3NjYWxlIGFuZCBhbnkgbnVtYmVyIG9mIHN0YXRpc3RpY2FsIHRleHRib29rcyB0aGF0IGNvdmVyIHJlZ3Jlc3Npb24gKHdlIHJlY29tbWVuZCBDb2hlbiwgMjAwOCkuIA0KDQpBIG51bWJlciBvZiBwYWNrYWdlcyBpbiBSIGNhbiBhbHNvIGJlIHVzZWQgdG8gY29uZHVjdCBhbmQgcGxvdCBtb2RlcmF0aW9uIGFuYWx5c2VzLCBpbmNsdWRpbmcgdGhlICptb2RlcmF0ZS5sbSogZnVuY3Rpb24gb2YgdGhlICpRdWFudFBzeWMqIHBhY2thZ2UgYW5kIHRoZSAqcGVxdW9kKiBwYWNrYWdlLiBIb3dldmVyLCBpdCBpcyBzaW1wbGUgdG8gZG8gdGhpcyAiYnkgaGFuZCIgdXNpbmcgdHJhZGl0aW9uYWwgbXVsdGlwbGUgcmVncmVzc2lvbiwgYXMgc2hvd24gaGVyZSwgYW5kIHRoZSB1bmRlcmx5aW5nIGFuYWx5c2lzIChpbnRlcmFjdGluZyB0aGUgbW9kZXJhdG9yIGFuZCB0aGUgSVYpIGluIHRoZXNlIHBhY2thZ2VzIGlzIGlkZW50aWNhbCB0byB0aGlzIGFwcHJvYWNoLiBUaGUgKnJvY2tjaGFsayogcGFja2FnZSB1c2VkIGhlcmUgaXMgb25lIG9mIG1hbnkgZ3JhcGhpbmcgYW5kIHBsb3R0aW5nIHBhY2thZ2VzIGF2YWlsYWJsZSBpbiBSIGFuZCB3YXMgY2hvc2VuIGJlY2F1c2UgaXQgd2FzIGVzcGVjaWFsbHkgZGVzaWduZWQgZm9yIHVzZSB3aXRoIHJlZ3Jlc3Npb24gYW5hbHlzZXMgKHVubGlrZSB0aGUgbW9yZSBnZW5lcmFsIGdyYXBoaW5nIG9wdGlvbnMgZGVzY3JpYmVkIGluIENoYXB0ZXJzIDggJiA5KS4NCg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRX0NCg0KI0NlbnRlcmluZyBEYXRhDQpYYyAgICA8LSBjKHNjYWxlKFgsIGNlbnRlcj1UUlVFLCBzY2FsZT1GQUxTRSkpICNDZW50ZXJpbmcgSVY7IGhvdXJzIG9mIHNsZWVwDQpaYyAgICA8LSBjKHNjYWxlKFosICBjZW50ZXI9VFJVRSwgc2NhbGU9RkFMU0UpKSAjQ2VudGVyaW5nIG1vZGVyYXRvcjsgY29mZmVlIGNvbnN1bXB0aW9uDQoNCiNNb2RlcmF0aW9uICJCeSBIYW5kIg0KbGlicmFyeShndmxtYSkNCmZpdE1vZCA8LSBsbShZIH4gWGMgKyBaYyArIFhjKlpjKSAjTW9kZWwgaW50ZXJhY3RzIElWICYgbW9kZXJhdG9yDQpzdW1tYXJ5KGZpdE1vZCkNCmNvZWYoc3VtbWFyeShmaXRNb2QpKQ0KZ3ZsbWEoZml0TW9kKSAjZGF0YSBpcyBwb3NpdGl2ZWx5IHNrZXdlZDsgY291bGQgbG9nIHRyYW5zZm9ybSAoc2VlIENoYXAuIDEwKQ0KDQojRGF0YSBTdW1tYXJ5DQpsaWJyYXJ5KHN0YXJnYXplcikNCnN0YXJnYXplcihmaXRNb2QsdHlwZT0idGV4dCIsIHRpdGxlID0gIlNsZWVwIGFuZCBDb2ZmZWUgb24gQXR0ZW50aW9uIikNCg0KI1Bsb3R0aW5nDQpsaWJyYXJ5KHJvY2tjaGFsaykNCnBzICA8LSBwbG90U2xvcGVzKGZpdE1vZCwgcGxvdHg9IlhjIiwgbW9keD0iWmMiLCB4bGFiID0gIlNsZWVwIiwgeWxhYiA9ICJBdHRlbnRpb24gUGFpZCIsIG1vZHhWYWxzID0gInN0ZC5kZXYiKQ0KDQoNCg0KDQpgYGANCg0KDQojIyBJbnRlcnByZXRpbmcgTW9kZXJhdGlvbiBSZXN1bHRzDQoNClJlc3VsdHMgYXJlIHByZXNlbnRlZCBzaW1pbGFyIHRvIHJlZ3VsYXIgbXVsdGlwbGUgcmVncmVzc2lvbiByZXN1bHRzIChzZWUgQ2hhcHRlciAxMCkuIFNpbmNlIHdlIGhhdmUgc2lnbmlmaWNhbnQgaW50ZXJhY3Rpb25zIGluIHRoaXMgbW9kZWwsIHRoZXJlIGlzIG5vIG5lZWQgdG8gaW50ZXJwcmV0IHRoZSBzZXBhcmF0ZSBtYWluIGVmZmVjdHMgb2YgZWl0aGVyIG91ciBJViBvciBvdXIgbW9kZXJhdG9yLg0KDQpPdXIgYnkgaGFuZCBtb2RlbCBzaG93cyBhIHNpZ25pZmljYW50IGludGVyYWN0aW9uIGJldHdlZW4gaG91cnMgc2xlcHQgYW5kIGNvZmZlZSBjb25zdW1wdGlvbiBvbiBhdHRlbnRpb24gcGFpZCB0byB0aGlzIHR1dG9yaWFsIChiID0gLjIzLCBTRSA9IC4wNCwgKnAqIDwgLjAwMSkuIEhvd2V2ZXIsIHdlJ2xsIG5lZWQgdG8gdW5wYWNrIHRoaXMgaW50ZXJhY3Rpb24gdmlzdWFsbHkgdG8gZ2V0IGEgYmV0dGVyIGlkZWEgb2Ygd2hhdCB0aGlzIG1lYW5zLg0KDQpUaGUgKnJvY2tjaGFsayogZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IHBsb3QgdGhlIHNpbXBsZSBzbG9wZXMgKDEgU0QgYWJvdmUgYW5kIDEgU0QgYmVsb3cgdGhlIG1lYW4pIG9mIHRoZSBtb2RlcmF0aW5nIGVmZmVjdC4gVGhpcyBmaWd1cmUgc2hvd3MgdGhhdCB0aG9zZSB3aG8gZHJhbmsgbGVzcyBjb2ZmZWUgKHRoZSBibGFjayBsaW5lKSBwYWlkIG1vcmUgYXR0ZW50aW9uIHdpdGggdGhlIG1vcmUgc2xlZXAgdGhhdCB0aGV5IGdvdCBsYXN0IG5pZ2h0IGJ1dCBwYWlkIGxlc3MgYXR0ZW50aW9uIG92ZXJhbGwgdGhhdCBhdmVyYWdlICh0aGUgcmVkIGxpbmUpLiBUaG9zZSB3aG8gZHJhbmsgbW9yZSBjb2ZmZWUgKHRoZSBncmVlbiBsaW5lKSBwYWlkIG1vcmUgd2hlbiB0aGV5IHNsZXB0IG1vcmUgYXMgd2VsbCBhbmQgcGFpZCBtb3JlIGF0dGVudGlvbiB0aGFuIGF2ZXJhZ2UuIFRoZSBkaWZmZXJlbmNlIGluIHRoZSBzbG9wZXMgZm9yIHRob3NlIHdobyBkcmFuayBtb3JlIG9yIGxlc3MgY29mZmVlIHNob3dzIHRoYXQgY29mZmVlIGNvbnN1bXB0aW9uIG1vZGVyYXRlcyB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gaG91cnMgb2Ygc2xlZXAgYW5kIGF0dGVudGlvbiBwYWlkLiAgDQoNCiANCiMgUmVmZXJlbmNlcyBhbmQgRnVydGhlciBSZWFkaW5nDQpCYXJvbiwgUi4sICYgS2VubnksIEQuICgxOTg2KS4gVGhlIG1vZGVyYXRvci1tZWRpYXRvciB2YXJpYWJsZSBkaXN0aW5jdGlvbiBpbiBzb2NpYWwgcHN5Y2hvbG9naWNhbCByZXNlYXJjaDogQ29uY2VwdHVhbCwgc3RyYXRlZ2ljLCBhbmQgc3RhdGlzdGljYWwgY29uc2lkZXJhdGlvbnMuIEpvdXJuYWwgb2YgUGVyc29uYWxpdHkgYW5kIFNvY2lhbCBQc3ljaG9sb2d5LCA1MSwgMTE3My0xMTgyLg0KDQpDb2hlbiwgQi4gSC4gKDIwMDgpLiBFeHBsYWluaW5nIHBzeWNob2xvZ2ljYWwgc3RhdGlzdGljcy4gSm9obiBXaWxleSAmIFNvbnMuDQoNCkltYWksIEsuLCBLZWVsZSwgTC4sICYgVGluZ2xleSwgRC4gKDIwMTApLiBBIGdlbmVyYWwgYXBwcm9hY2ggdG8gY2F1c2FsIG1lZGlhdGlvbiBhbmFseXNpcy4gUHN5Y2hvbG9naWNhbCBtZXRob2RzLCAxNSg0KSwgMzA5Lg0KDQpNYWNLaW5ub24sIEQuIFAuLCBMb2Nrd29vZCwgQy4gTS4sIEhvZmZtYW4sIEouIE0uLCBXZXN0LCBTLiBHLiwgJiBTaGVldHMsIFYuICgyMDAyKS4gQSBjb21wYXJpc29uIG9mIG1ldGhvZHMgdG8gdGVzdCBtZWRpYXRpb24gYW5kIG90aGVyIGludGVydmVuaW5nIHZhcmlhYmxlIGVmZmVjdHMuIFBzeWNob2xvZ2ljYWwgbWV0aG9kcywgNygxKSwgODMuDQoNCk5pZSwgWS4sIExhdSwgUy4sICYgTGlhdSwgQS4gSy4gKDIwMTEpLiBSb2xlIG9mIGFjYWRlbWljIHNlbGYtZWZmaWNhY3kgaW4gbW9kZXJhdGluZyB0aGUgcmVsYXRpb24gYmV0d2VlbiB0YXNrIGltcG9ydGFuY2UgYW5kIHRlc3QgYW54aWV0eS4gTGVhcm5pbmcgYW5kIEluZGl2aWR1YWwgRGlmZmVyZW5jZXMsIDIxKDYpLCA3MzYtNzQxLg0KDQpUaW5nbGV5LCBELiwgWWFtYW1vdG8sIFQuLCBIaXJvc2UsIEsuLCBLZWVsZSwgTC4sICYgSW1haSwgSy4gKDIwMTQpLiBNZWRpYXRpb246IFIgcGFja2FnZSBmb3IgY2F1c2FsIG1lZGlhdGlvbiBhbmFseXNpcy4NCg0KPHNjcmlwdD4NCiAgKGZ1bmN0aW9uKGkscyxvLGcscixhLG0pe2lbJ0dvb2dsZUFuYWx5dGljc09iamVjdCddPXI7aVtyXT1pW3JdfHxmdW5jdGlvbigpew0KICAoaVtyXS5xPWlbcl0ucXx8W10pLnB1c2goYXJndW1lbnRzKX0saVtyXS5sPTEqbmV3IERhdGUoKTthPXMuY3JlYXRlRWxlbWVudChvKSwNCiAgbT1zLmdldEVsZW1lbnRzQnlUYWdOYW1lKG8pWzBdO2EuYXN5bmM9MTthLnNyYz1nO20ucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSxtKQ0KICB9KSh3aW5kb3csZG9jdW1lbnQsJ3NjcmlwdCcsJ2h0dHBzOi8vd3d3Lmdvb2dsZS1hbmFseXRpY3MuY29tL2FuYWx5dGljcy5qcycsJ2dhJyk7DQoNCiAgZ2EoJ2NyZWF0ZScsICdVQS05ODg3ODc5My0xJywgJ2F1dG8nKTsNCiAgZ2EoJ3NlbmQnLCAncGFnZXZpZXcnKTsNCg0KPC9zY3JpcHQ+