1- breve introduccion

  1. El ingreso público, es toda cantidad de dinero percibida por el Estado y demás entes públicos, cuyo objetivo esencial es financiar los gastos públicos. Las notas características del ingreso público son: El ingreso público es siempre una suma de dinero. No obstante, en algunas ocasiones el ingreso público que inicialmente se cuantifica en una cantidad de dinero, se hace efectivo en especie; como por ejemplo en aquellos casos en que la deuda tributaria se extinguen con la entrega de bienes del patrimonio histórico.
  2. Percibida por un Ente público.
  3. Tiene como objetivo esencial financiar el gasto público unidad de medida: millones de pesos a precios corrientes periodicidad: mensual fuente: “(”http://www.inegi.org.mx/sistemas/bie/?idserPadre=11400090“)”

en la grafica podemos observar que presenta estacionalidad, serie temporal ya que la variación periódica y predecible de la misma con un periodo inferior o igual a un año.

Descomposicion clasica

La estacionalidad es un fenómeno que aparece cuando uno se da cuenta que en determinados períodos y con regularidad se repiten patrones de comportamiento de un hecho, como el que se esta observando en primera instancia.

La tendencia se torna estocastica

Los residuos estan elevados, dado a las fluctuaciones de las salidas de capital y/o de las entradas del mismo.

Si es necesario, utilizar transformacion Box-Cox / logaritmos para estabilizar la varianza

podemos notar que con la prueba aun se ve la estacionalidad y la tendencia

5 En caso de estacionalidad, aplicar diferencias estacionales

se muestra mas estabilizada la varianza es constante

5 Usar prueba Dickey-Fuller para evaluar el orden de integracion de la serie. Diferenciar hasta que la serie sea estacionaria.

summary(ur.df(diff.ITGF))

############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression none 


Call:
lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)

Residuals:
    Min      1Q  Median      3Q     Max 
-451.00  -21.69   -1.07   95.32  230.07 

Coefficients:
           Estimate Std. Error t value Pr(>|t|)    
z.lag.1    -1.99041    0.08317 -23.931  < 2e-16 ***
z.diff.lag  0.33249    0.04814   6.907 2.06e-11 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 132.7 on 384 degrees of freedom
Multiple R-squared:  0.7748,    Adjusted R-squared:  0.7736 
F-statistic: 660.4 on 2 and 384 DF,  p-value: < 2.2e-16


Value of test-statistic is: -23.9308 

Critical values for test statistics: 
      1pct  5pct 10pct
tau1 -2.58 -1.95 -1.62

podemos observar que el valor de value of test-statistic es de -23.9308 el cual pasa los tres valores criticos, con lo cual podemos decir que la serie ya es estacional

6. Usar herramientas ACF, PACF, EACF y criterios de Akaike/ Bayes para construir propuestas de modelos.

Mostrados los procesos anteriores con sus debidos criterios , podemos empezar a proponer una serie de cambios en el “ARIMA” para estructurar un modelo correcto que ayuda al buen modelaje y presentacion del modelo “ingreso al sector publico”

la prueba nos propone un modelo MA 1 estacional con un AR 5 estacional

eacf(diff(diff(ITGF)))
AR/MA
  0 1 2 3 4 5 6 7 8 9 10 11 12 13
0 x o o o o o o o o o x  x  x  o 
1 x x o o o o o o o o o  x  x  o 
2 x x o o o o o o o o o  x  x  o 
3 x x o o o o o o o o o  x  x  o 
4 x o x x o o o o o o o  x  x  o 
5 x x o x o o o o o o o  x  x  o 
6 x x o o o o o o o o o  x  x  x 
7 x o o o o o o o o o o  x  x  o 

nos propone un un AR 2 y un MA 3 #Propuesta 1

propuesta1<-Arima(ITGF,order=c(0,1,0),seasonal=c(2,1,1))
propuesta1<-Arima(ITGF,order=c(0,1,0),seasonal=c(2,1,1))
propuesta1
Series: ITGF 
ARIMA(0,1,0)(2,1,1)[12] 

Coefficients:
        sar1    sar2    sma1
      0.3755  0.0291  -1.000
s.e.  0.0532  0.0541   0.061

sigma^2 estimated as 10334:  log likelihood=-2291.66
AIC=4591.32   AICc=4591.43   BIC=4607.05
checkresiduals(propuesta1)

    Ljung-Box test

data:  Residuals from ARIMA(0,1,0)(2,1,1)[12]
Q* = 103.21, df = 21, p-value = 7.762e-13

Model df: 3.   Total lags used: 24

el AICc es elevado y los rezagos se siguen saliendo no es el mejor modelo

Propuesta 2

propuesta2<-Arima(ITGF,order=c(0,1,2),seasonal=c(2,1,1))
propuesta2<-Arima(ITGF,order=c(0,1,2),seasonal=c(2,1,1))
propuesta2
Series: ITGF 
ARIMA(0,1,2)(2,1,1)[12] 

Coefficients:
          ma1      ma2    sar1    sar2     sma1
      -0.6959  -0.2994  0.5714  0.0146  -1.0000
s.e.   0.0663   0.0533  0.0579  0.0548   0.0465

sigma^2 estimated as 7055:  log likelihood=-2219.73
AIC=4451.46   AICc=4451.69   BIC=4475.05
checkresiduals(propuesta2)

    Ljung-Box test

data:  Residuals from ARIMA(0,1,2)(2,1,1)[12]
Q* = 167.22, df = 19, p-value < 2.2e-16

Model df: 5.   Total lags used: 24

los residuos estan dentro de las bandas de confianza y el resultado del AICc es menor que el de la propuesta 1

Propuesta 3

propuesta3<-Arima(ITGF,order=c(2,1,3),seasonal=c(0,0,2))
propuesta3<-Arima(ITGF,order=c(2,1,3),seasonal=c(0,0,2))
propuesta3
Series: ITGF 
ARIMA(2,1,3)(0,0,2)[12] 

Coefficients:
         ar1      ar2      ma1     ma2      ma3    sma1    sma2
      1.6853  -0.9802  -2.6049  2.4550  -0.8309  0.3861  0.1432
s.e.  0.0124   0.0117   0.0402  0.0805   0.0449  0.0557  0.0600

sigma^2 estimated as 5736:  log likelihood=-2235.54
AIC=4487.09   AICc=4487.47   BIC=4518.8
checkresiduals(propuesta3)

    Ljung-Box test

data:  Residuals from ARIMA(2,1,3)(0,0,2)[12]
Q* = 87.071, df = 17, p-value = 2.073e-11

Model df: 7.   Total lags used: 24

el resultado de AICc es menor que en la propuesta 1, pero mayor que la propuesta 2

Propuesta 4

propuesta4
Series: ITGF 
ARIMA(2,1,3)(0,1,3)[12] 

Coefficients:
         ar1      ar2     ma1     ma2      ma3     sma1     sma2     sma3
      1.6841  -0.9783  -2.593  2.4303  -0.8167  -0.6151  -0.2348  -0.1497
s.e.  0.0134   0.0125   0.042  0.0836   0.0461   0.1036   0.0745   0.0625

sigma^2 estimated as 5804:  log likelihood=-2183.32
AIC=4384.63   AICc=4385.12   BIC=4420.02
checkresiduals(propuesta4)

    Ljung-Box test

data:  Residuals from ARIMA(2,1,3)(0,1,3)[12]
Q* = 81.855, df = 16, p-value = 7.693e-11

Model df: 8.   Total lags used: 24

el AICc es mucho mayor a los anteriores, no es el mejor modelo

Propuesta 5

propuesta5
Series: ITGF 
ARIMA(1,1,1)(0,1,0)[12] 

Coefficients:
         ar1      ma1
      0.1882  -1.0000
s.e.  0.0507   0.0079

sigma^2 estimated as 8829:  log likelihood=-2249.38
AIC=4504.76   AICc=4504.82   BIC=4516.55
checkresiduals(propuesta5)

    Ljung-Box test

data:  Residuals from ARIMA(1,1,1)(0,1,0)[12]
Q* = 151.28, df = 22, p-value < 2.2e-16

Model df: 2.   Total lags used: 24

el AICc es bueno aunque ligeramente mayor que la propuesta 2

7. Como parte del diagn´ostico del modelo, analizar los residuos y aplicar la prueba Ljung-Box.

los resultados confirman que la mejor propuesta es la numero 2

propuesta.auto
Series: ITGF 
ARIMA(2,1,3)(0,0,2)[12] 

Coefficients:
         ar1      ar2      ma1     ma2      ma3    sma1    sma2
      1.6853  -0.9802  -2.6049  2.4550  -0.8309  0.3861  0.1432
s.e.  0.0124   0.0117   0.0402  0.0805   0.0449  0.0557  0.0600

sigma^2 estimated as 5736:  log likelihood=-2235.54
AIC=4487.09   AICc=4487.47   BIC=4518.8
checkresiduals(propuesta.auto)

    Ljung-Box test

data:  Residuals from ARIMA(2,1,3)(0,0,2)[12]
Q* = 87.071, df = 17, p-value = 2.073e-11

Model df: 7.   Total lags used: 24

el auto arima nos da un mejor resultado del AICc ya que es mas bajo sin embargo no nos muesta ar ni ma para poder hacer la ecuacion final, por ello nos quedamos con la propuesta 2

9. Presente la ecuacion final y describa

$$ INGRESO DEL GOBIERNO=0.0256 +0.0058{_(12)}

$$

10. Crear un pronostico a dos años.

La proyeccion de nuestro pronostico muestra que nuestro ingreso al sector , se va a mantener constante, dado que la condiciones economicas que nos estamos enfrentando no son muy distintas a las politicas monetaria y gubernamentales de antes.

  1. Realizar el pronostico ARIMA para dos años.
getrmse(diff.ITGF,h=12,order=c(2,1,3),seasonal=c(0,1,3))
[1] 114.3297
getrmse(diff.ITGF,h=12,order=c(0,1,2),seasonal=c(2,1,1))
[1] 116.811
getrmse(diff.ITGF,h=12,order=c(1,1,1),seasonal=c(0,1,0))
[1] 36.94563
getrmse(diff.ITGF,h=12,order=c(2,1,2),seasonal=c(1,1,2))
[1] 101.6726
getrmse(diff.ITGF,h=12,order=c(2,1,1),seasonal=c(1,1,0))
[1] 50.32122
getrmse(diff.ITGF,h=12,order=c(2,1,1),seasonal=c(1,1,1))
[1] 113.1242
getrmse(diff.ITGF,h=12,order=c(2,1,1),seasonal=c(0,1,1))
[1] 66.08332
getrmse(diff.ITGF,h=12,order=c(1,1,0),seasonal=c(1,1,2))
[1] 142.3332
getrmse(diff.ITGF,h=12,order=c(1,0,1),seasonal=c(1,1,0))
[1] 42.83948
getrmse(diff.ITGF,h=12,order=c(1,0,1),seasonal=c(1,1,1))
[1] 105.2729
getrmse(diff.ITGF,h=12,order=c(2,1,1),seasonal=c(2,1,1))
[1] 111.587
getrmse(diff.ITGF,h=12,order=c(1,1,0),seasonal=c(1,0,0))
[1] 139.3919
getrmse(diff.ITGF,h=12,order=c(1,1,1),seasonal=c(0,0,1))
[1] 138.1087
getrmse(diff.ITGF,h=12,order=c(2,1,1),seasonal=c(0,0,1))
[1] 133.9418

la raiz del error media mas pequeño es la opcion 3 el 36.94563

  1. Utilizando metodos de pronosticos simples y/o suavizamiento exponencial generar un pronostico para dos años. Elegir el metodo que presente la raiz del error medio al cuadrado mas pequeno.

  1. Usando el an´alisis de transferencia, modelar observaciones cambios estructurales y/o observaciones at´ipicas en el contexto ARIMAX (punto extra, opcional).

Analisis de intervencion

Las intervenciones pueden ser naturales o hechas por el ser humano 1- el ingreso al sector publico puede aumentar debido a un cobro mas elevado de impuestos 2- puede disminuir debido a una fuga de capital

air.m1

Call:
arimax(x = log(ITGF), order = c(0, 1, 1), seasonal = list(order = c(0, 1, 1), 
    period = 12), xreg = data.frame(Dec96 = 1 * (seq(ITGF) == 12), Jan97 = 1 * 
    (seq(ITGF) == 13), Dec02 = 1 * (seq(ITGF) == 84)), method = "ML", xtransf = data.frame(I911 = 1 * 
    (seq(ITGF) == 69), I911 = 1 * (seq(ITGF) == 69)), transfer = list(c(0, 0), 
    c(1, 0)))

Coefficients:
          ma1     sma1    Dec96   Jan97    Dec02  I911-MA0  I911.1-AR1  I911.1-MA0
      -1.0000  -0.2327  -0.1174  0.3395  -0.0050    1.7246      0.0432     -1.8474
s.e.   0.0104   0.0645   0.7965  0.6281   0.6202   35.5800      0.7596     35.5747

sigma^2 estimated as 0.624:  log likelihood = -449.58,  aic = 915.17
plot(log(ITGF),ylab='Log(ITGF)')+
points(fitted(air.m1))
integer(0)

  1. Analizar un VAR, necesita incluir los puntos siguientes a)Buscar otra variable (incluso mas variables) y redactar la teoria que se encuentra detras de la relacion entre variables que propone.

La segunda variable es gasto de gobierno

se relaciona con el ingreso al sector publico mediante el PIB o las Politicas monetarias Todas las funciones que realiza el sector público requieren la realización de un gasto, por lo que para financiarlas será necesario obtener ingresos. Para poder financiar sus gastos, el sector público tiene que conseguir ingresos. Dichos ingresos los logra, entre otras vías, estableciendo impuestos, es decir, pagos obligatorios que obtiene de las economías domésticas y las empresas. El conjunto de procedimientos y normas que regulan la contribución de impuestos se denomina sistema tributario. A su vez, los impuestos también pueden cumplir una importante función redistributiva a través de la progresividad, de la que hablaremos en el apartado relativo a ingresos públicos. Cada vez que el sector público decide aplicar una política fiscal expansiva se produce un efecto negativo sobre el saldo presupuestario (SP = T - G - TR), ya que los incrementos de los gastos del sector público (gasto público y transferencias) o las reducciones de sus ingresos provocan un incremento del déficit público. Como sabemos, en una economía cerrada, la reducción del ahorro público supone una reducción de los recursos para financiar la inversión, por lo que, para evitar la caída de la inversión interna el ahorro privado debe compensar el incremento del déficit público. b) Evaluar la estacionalidad de la nueva variable.

base2 <- read.csv("C:/Users/usuario/Desktop/ingresoalsector 1.2.csv", sep = ";")

como la habia descrito anteriormente cuenta con estacionalidad y un poco de tendencia

podemos observar en el gasto de gobierno tendencia creciente

aqui se puede ver claramente que la serie de ingreso es estacional

la serie de gasto no es estacional, solo tendencia creciente

summary(reg.i)

Call:
lm(formula = ts.i ~ time(ts.i) + mes.)

Residuals:
     Min       1Q   Median       3Q      Max 
-220.860  -95.939   -1.307   85.590  219.883 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
(Intercept)   3951.7943  1188.8964   3.324 0.000975 ***
time(ts.i)      -1.8803     0.5938  -3.167 0.001668 ** 
mes.February    55.4294    27.0805   2.047 0.041367 *  
mes.March       61.1013    27.0806   2.256 0.024626 *  
mes.April       27.3185    27.0808   1.009 0.313728    
mes.May        -11.5248    27.0811  -0.426 0.670668    
mes.June       -17.9741    27.0815  -0.664 0.507285    
mes.July       -19.1714    27.2912  -0.702 0.482815    
mes.August      -6.6710    27.2912  -0.244 0.807026    
mes.September   -5.3893    27.2913  -0.197 0.843565    
mes.October      0.9862    27.2916   0.036 0.971194    
mes.November    -1.6384    27.2919  -0.060 0.952162    
mes.December    16.0495    27.2923   0.588 0.556843    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 110 on 377 degrees of freedom
Multiple R-squared:  0.07716,   Adjusted R-squared:  0.04779 
F-statistic: 2.627 on 12 and 377 DF,  p-value: 0.002211
summary(reg.g)

Call:
lm(formula = ts.g ~ time(ts.g) + mes.)

Residuals:
     Min       1Q   Median       3Q      Max 
-1075421  -342633  -145283   284947  2179445 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)   -176153186    5868675 -30.016  < 2e-16 ***
time(ts.g)         88068       2931  30.047  < 2e-16 ***
mes.February      129592     133676   0.969  0.33294    
mes.March         272276     133676   2.037  0.04237 *  
mes.April         409953     133677   3.067  0.00232 ** 
mes.May           546128     133679   4.085 5.38e-05 ***
mes.June          736266     133681   5.508 6.74e-08 ***
mes.July          871737     134716   6.471 3.03e-10 ***
mes.August       1002826     134716   7.444 6.69e-13 ***
mes.September    1142787     134717   8.483 5.06e-16 ***
mes.October      1276434     134718   9.475  < 2e-16 ***
mes.November     1424624     134719  10.575  < 2e-16 ***
mes.December     1694868     134721  12.581  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 543000 on 377 degrees of freedom
Multiple R-squared:  0.7698,    Adjusted R-squared:  0.7625 
F-statistic: 105.1 on 12 and 377 DF,  p-value: < 2.2e-16

summary(ur.df(ts.ddi))

############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression none 


Call:
lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)

Residuals:
    Min      1Q  Median      3Q     Max 
-380.98  -13.55    0.50   16.56  357.61 

Coefficients:
           Estimate Std. Error t value Pr(>|t|)    
z.lag.1    -1.73430    0.08143 -21.299  < 2e-16 ***
z.diff.lag  0.28684    0.04959   5.784 1.54e-08 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 109.8 on 373 degrees of freedom
Multiple R-squared:  0.7007,    Adjusted R-squared:  0.6991 
F-statistic: 436.6 on 2 and 373 DF,  p-value: < 2.2e-16


Value of test-statistic is: -21.2986 

Critical values for test statistics: 
      1pct  5pct 10pct
tau1 -2.58 -1.95 -1.62

el resultado de esta prueba respecto al ingreso son es de (-21.2986) pasa por mucho los valores criticos esto quiere decir que la serie ya es estacionaria

summary(ur.df(ts.dgg))

############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression none 


Call:
lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)

Residuals:
    Min      1Q  Median      3Q     Max 
-398791     300    7999   22509  203912 

Coefficients:
           Estimate Std. Error t value Pr(>|t|)    
z.lag.1    -1.25088    0.07765 -16.109   <2e-16 ***
z.diff.lag  0.10154    0.05157   1.969   0.0497 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 64440 on 373 degrees of freedom
Multiple R-squared:  0.5721,    Adjusted R-squared:  0.5698 
F-statistic: 249.3 on 2 and 373 DF,  p-value: < 2.2e-16


Value of test-statistic is: -16.1092 

Critical values for test statistics: 
      1pct  5pct 10pct
tau1 -2.58 -1.95 -1.62

la prueba aplicada al gasto de gobierno nos dice que el resultado (-16.1092) sobrepasa los valores criticos, por tanto ya es una serie estacionaria

  1. Proponga el orden de rezagos optimo para el VAR y presentar la estimacion.
VARselect(base3, lag.max = 24, type = "const")[["selection"]]
AIC(n)  HQ(n)  SC(n) FPE(n) 
    24     12     12     24 

nos propone rezzagos del 1 hasta el 24

Propuesta 1 con 2rezagos

Rezago 2

summary(var1)

VAR Estimation Results:
========================= 
Endogenous variables: i, g 
Deterministic variables: both 
Sample size: 376 
Log Likelihood: -7012.215 
Roots of the characteristic polynomial:
0.3478 0.1354
Call:
VAR(y = base3, p = 1, type = "both")


Estimation results for equation i: 
================================== 
i = i.l1 + g.l1 + const + trend 

        Estimate Std. Error t value Pr(>|t|)    
i.l1  -3.475e-01  4.860e-02  -7.150 4.63e-12 ***
g.l1  -2.954e-05  9.093e-05  -0.325    0.745    
const -1.227e+00  1.190e+01  -0.103    0.918    
trend  4.854e-03  5.451e-02   0.089    0.929    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 114.7 on 372 degrees of freedom
Multiple R-Squared: 0.1212, Adjusted R-squared: 0.1141 
F-statistic: 17.11 on 3 and 372 DF,  p-value: 1.988e-10 


Estimation results for equation g: 
================================== 
g = i.l1 + g.l1 + const + trend 

       Estimate Std. Error t value Pr(>|t|)   
i.l1    -2.5793    27.4714  -0.094  0.92525   
g.l1    -0.1358     0.0514  -2.642  0.00858 **
const  -48.5695  6729.0238  -0.007  0.99424   
trend    4.3258    30.8138   0.140  0.88843   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 64850 on 372 degrees of freedom
Multiple R-Squared: 0.01851,    Adjusted R-squared: 0.01059 
F-statistic: 2.338 on 3 and 372 DF,  p-value: 0.07325 



Covariance matrix of residuals:
      i         g
i 13163 9.577e+04
g 95769 4.206e+09

Correlation matrix of residuals:
        i       g
i 1.00000 0.01287
g 0.01287 1.00000

nos encontramos 1 variable significativa con un resultado de p-value del 0.07325

Rezago 2

summary(var2)

VAR Estimation Results:
========================= 
Endogenous variables: i, g 
Deterministic variables: both 
Sample size: 375 
Log Likelihood: -6976.032 
Roots of the characteristic polynomial:
0.5365 0.5365 0.3146 0.3146
Call:
VAR(y = base3, p = 2, type = "both")


Estimation results for equation i: 
================================== 
i = i.l1 + g.l1 + i.l2 + g.l2 + const + trend 

        Estimate Std. Error t value Pr(>|t|)    
i.l1  -4.469e-01  4.986e-02  -8.963  < 2e-16 ***
g.l1  -2.459e-05  8.823e-05  -0.279    0.781    
i.l2  -2.871e-01  4.984e-02  -5.762 1.76e-08 ***
g.l2   4.210e-05  8.831e-05   0.477    0.634    
const -1.753e+00  1.151e+01  -0.152    0.879    
trend  6.715e-03  5.263e-02   0.128    0.899    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 110.3 on 369 degrees of freedom
Multiple R-Squared: 0.1941, Adjusted R-squared: 0.1831 
F-statistic: 17.77 on 5 and 369 DF,  p-value: 8.702e-16 


Estimation results for equation g: 
================================== 
g = i.l1 + g.l1 + i.l2 + g.l2 + const + trend 

        Estimate Std. Error t value Pr(>|t|)   
i.l1     3.41673   29.25679   0.117  0.90709   
g.l1    -0.14949    0.05178  -2.887  0.00411 **
i.l2    20.19985   29.24550   0.691  0.49019   
g.l2    -0.10222    0.05182  -1.972  0.04931 * 
const  -47.52316 6752.86820  -0.007  0.99439   
trend    4.72230   30.88237   0.153  0.87855   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 64730 on 369 degrees of freedom
Multiple R-Squared: 0.02992,    Adjusted R-squared: 0.01678 
F-statistic: 2.276 on 5 and 369 DF,  p-value: 0.04654 



Covariance matrix of residuals:
       i         g
i  12169 1.895e+05
g 189548 4.190e+09

Correlation matrix of residuals:
        i       g
i 1.00000 0.02654
g 0.02654 1.00000

tenemos 2 variables significativas y un resultado p-value mas bajo que el anterior #Rezago 3

summary(var3)

VAR Estimation Results:
========================= 
Endogenous variables: i, g 
Deterministic variables: both 
Sample size: 374 
Log Likelihood: -6944.455 
Roots of the characteristic polynomial:
0.6293 0.6293 0.5241 0.3545 0.3545 0.2464
Call:
VAR(y = base3, p = 3, type = "both")


Estimation results for equation i: 
================================== 
i = i.l1 + g.l1 + i.l2 + g.l2 + i.l3 + g.l3 + const + trend 

        Estimate Std. Error t value Pr(>|t|)    
i.l1  -5.061e-01  5.040e-02 -10.043  < 2e-16 ***
g.l1  -6.167e-06  8.590e-05  -0.072    0.943    
i.l2  -3.821e-01  5.325e-02  -7.176 4.02e-12 ***
g.l2   4.792e-05  8.643e-05   0.555    0.580    
i.l3  -2.062e-01  5.040e-02  -4.092 5.26e-05 ***
g.l3   3.642e-05  8.604e-05   0.423    0.672    
const  1.685e+00  1.120e+01   0.151    0.880    
trend -7.121e-03  5.114e-02  -0.139    0.889    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 106.8 on 366 degrees of freedom
Multiple R-Squared: 0.2343, Adjusted R-squared: 0.2196 
F-statistic:    16 on 7 and 366 DF,  p-value: < 2.2e-16 


Estimation results for equation g: 
================================== 
g = i.l1 + g.l1 + i.l2 + g.l2 + i.l3 + g.l3 + const + trend 

        Estimate Std. Error t value Pr(>|t|)   
i.l1     2.42747   30.66912   0.079  0.93696   
g.l1    -0.15223    0.05227  -2.912  0.00381 **
i.l2    17.93151   32.40534   0.553  0.58036   
g.l2    -0.10677    0.05260  -2.030  0.04308 * 
i.l3    -4.73814   30.66924  -0.154  0.87731   
g.l3    -0.03033    0.05236  -0.579  0.56282   
const -101.17008 6813.59266  -0.015  0.98816   
trend    5.02466   31.11823   0.161  0.87181   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 64970 on 366 degrees of freedom
Multiple R-Squared: 0.0309, Adjusted R-squared: 0.01236 
F-statistic: 1.667 on 7 and 366 DF,  p-value: 0.1158 



Covariance matrix of residuals:
       i         g
i  11397 1.878e+05
g 187818 4.221e+09

Correlation matrix of residuals:
        i       g
i 1.00000 0.02708
g 0.02708 1.00000

solo se aumentoo una variable significativa y bajo un poco el resultado de p-value #Rezago 8

summary(var4)

VAR Estimation Results:
========================= 
Endogenous variables: i, g 
Deterministic variables: both 
Sample size: 369 
Log Likelihood: -6801.206 
Roots of the characteristic polynomial:
0.881 0.881 0.8724 0.8724 0.852 0.852 0.8227 0.8227 0.7983 0.7983 0.7962 0.7962 0.7585 0.7585 0.7578 0.7578
Call:
VAR(y = base3, p = 8, type = "both")


Estimation results for equation i: 
================================== 
i = i.l1 + g.l1 + i.l2 + g.l2 + i.l3 + g.l3 + i.l4 + g.l4 + i.l5 + g.l5 + i.l6 + g.l6 + i.l7 + g.l7 + i.l8 + g.l8 + const + trend 

        Estimate Std. Error t value Pr(>|t|)    
i.l1  -6.820e-01  5.167e-02 -13.201  < 2e-16 ***
g.l1  -1.482e-05  8.173e-05  -0.181    0.856    
i.l2  -6.339e-01  6.034e-02 -10.506  < 2e-16 ***
g.l2   4.700e-05  8.274e-05   0.568    0.570    
i.l3  -5.556e-01  6.573e-02  -8.454 7.65e-16 ***
g.l3   4.129e-05  8.296e-05   0.498    0.619    
i.l4  -4.934e-01  6.731e-02  -7.329 1.60e-12 ***
g.l4  -9.447e-06  8.156e-05  -0.116    0.908    
i.l5  -4.284e-01  6.695e-02  -6.399 5.00e-10 ***
g.l5  -9.733e-06  8.201e-05  -0.119    0.906    
i.l6  -3.761e-01  6.415e-02  -5.863 1.05e-08 ***
g.l6  -6.326e-06  8.526e-05  -0.074    0.941    
i.l7  -3.278e-01  5.843e-02  -5.610 4.11e-08 ***
g.l7  -1.681e-05  8.515e-05  -0.197    0.844    
i.l8  -2.405e-01  5.021e-02  -4.790 2.47e-06 ***
g.l8  -3.482e-05  8.398e-05  -0.415    0.679    
const -3.296e+00  1.059e+01  -0.311    0.756    
trend  1.243e-02  4.805e-02   0.259    0.796    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 98.21 on 351 degrees of freedom
Multiple R-Squared: 0.3597, Adjusted R-squared: 0.3286 
F-statistic:  11.6 on 17 and 351 DF,  p-value: < 2.2e-16 


Estimation results for equation g: 
================================== 
g = i.l1 + g.l1 + i.l2 + g.l2 + i.l3 + g.l3 + i.l4 + g.l4 + i.l5 + g.l5 + i.l6 + g.l6 + i.l7 + g.l7 + i.l8 + g.l8 + const + trend 

        Estimate Std. Error t value Pr(>|t|)    
i.l1     2.04403   33.33979   0.061  0.95115    
g.l1    -0.21203    0.05274  -4.020 7.12e-05 ***
i.l2    20.84900   38.93665   0.535  0.59267    
g.l2    -0.16844    0.05339  -3.155  0.00174 ** 
i.l3     2.52378   42.41281   0.060  0.95258    
g.l3    -0.10204    0.05353  -1.906  0.05744 .  
i.l4     9.68843   43.43597   0.223  0.82363    
g.l4    -0.07564    0.05263  -1.437  0.15153    
i.l5     7.14984   43.20304   0.165  0.86865    
g.l5    -0.23776    0.05292  -4.493 9.56e-06 ***
i.l6     8.49367   41.39338   0.205  0.83754    
g.l6    -0.18242    0.05502  -3.316  0.00101 ** 
i.l7     7.64663   37.70391   0.203  0.83940    
g.l7    -0.15872    0.05495  -2.888  0.00411 ** 
i.l8    16.34643   32.39769   0.505  0.61419    
g.l8    -0.15872    0.05420  -2.929  0.00363 ** 
const  875.69050 6833.46404   0.128  0.89811    
trend   -0.11671   31.00393  -0.004  0.99700    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1


Residual standard error: 63380 on 351 degrees of freedom
Multiple R-Squared: 0.1155, Adjusted R-squared: 0.0727 
F-statistic: 2.697 on 17 and 351 DF,  p-value: 0.0003424 



Covariance matrix of residuals:
       i         g
i   9645 1.662e+05
g 166167 4.016e+09

Correlation matrix of residuals:
       i      g
i 1.0000 0.0267
g 0.0267 1.0000

tenemos significancia con 8 varriables y un p-value minimo, ocuparemos esta propuesta de rezagos

plot(var4.serial, names = "Consumption")

Invalid residual name(s) supplied, using residuals of first variable.

plot(var4.serial, names = "Income")

Invalid residual name(s) supplied, using residuals of first variable.

  1. Probar la correlacion serial y normalidad en los residuos.
var.norm
$`JB`

    JB-Test (multivariate)

data:  Residuals of VAR object var4
Chi-squared = 3118.2, df = 4, p-value < 2.2e-16


$Skewness

    Skewness only (multivariate)

data:  Residuals of VAR object var4
Chi-squared = 698.5, df = 2, p-value < 2.2e-16


$Kurtosis

    Kurtosis only (multivariate)

data:  Residuals of VAR object var4
Chi-squared = 2419.7, df = 2, p-value < 2.2e-16

se puede observar estabilidad estructural y que las fluctuaciones son minimas e) Resultados de la prueba de causalidad de Granger

causality(var4, cause='i')$Granger

    Granger causality H0: i do not Granger-cause g

data:  VAR object var4
F-Test = 0.088744, df1 = 8, df2 = 702, p-value = 0.9995

se acepta la H0 y se puede decir que el ingreso no causa al gasto de gobierno

causality(var4, cause='g')$Granger

    Granger causality H0: g do not Granger-cause i

data:  VAR object var4
F-Test = 0.1296, df1 = 8, df2 = 702, p-value = 0.998

de igual manera se acepta la H0, lo cual quiere decir que el gasto de gobierno no causa al ingreso

  1. Crear un pronostico para dos años usando el VAR especificado.
predictions<-predict(var4,n.ahead=10,ci=0.95)
class(predictions)
[1] "varprd"
plot(predictions,names="Consumption")

Invalid variable name(s) supplied, using first variable.

fanchart(predictions,names="Income")

Invalid variable name(s) supplied, using first variable.

  1. Interpretar las funciones impulso-respuesta.
plot(irf(var4,impulse="i",response="g",ortho=T))

plot(irf(var4,impulse="g",response="i",ortho=T))

Descomposicion de varianza de error

fevd.var <- fevd(var4, n.ahead = 10) 
fevd.var
$`i`
              i            g
 [1,] 1.0000000 0.000000e+00
 [2,] 0.9999376 6.237122e-05
 [3,] 0.9989286 1.071355e-03
 [4,] 0.9989281 1.071897e-03
 [5,] 0.9981073 1.892695e-03
 [6,] 0.9981020 1.897981e-03
 [7,] 0.9980724 1.927619e-03
 [8,] 0.9979818 2.018151e-03
 [9,] 0.9978208 2.179221e-03
[10,] 0.9974624 2.537571e-03

$g
                 i         g
 [1,] 0.0007127428 0.9992873
 [2,] 0.0006880443 0.9993120
 [3,] 0.0013237573 0.9986762
 [4,] 0.0019823079 0.9980177
 [5,] 0.0020190796 0.9979809
 [6,] 0.0019782386 0.9980218
 [7,] 0.0019687443 0.9980313
 [8,] 0.0020042054 0.9979958
 [9,] 0.0021793173 0.9978207
[10,] 0.0025482159 0.9974518
plot(fevd.var,addbars=2)

el ingreso no depende del gasto y el gasto no depende del ingreso esto se debe a que ambas variables forman el PIB por ello requeririan mas variables como las exportaciones e importaciones, la inversión, etc.

  1. Evaluar la potencial cointegracion usando la metodologia de Engle-Granger y Johan-sen.
po.test(base3[,1:2])
p-value smaller than printed p-value

    Phillips-Ouliaris Cointegration Test

data:  base3[, 1:2]
Phillips-Ouliaris demeaned = -424.72, Truncation lag parameter = 3, p-value = 0.01

con H0 las variables no estan cointegradas

LS0tDQp0aXRsZTogIlRSQUJBSk8gVEVSQ0VSIFBBUkNJQUwiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCmF1dGhvcjogIlJPTUVSTyBHVVRJRVJSRVogQ0FTQU5EUkEgWVVOVUVMIg0KLS0tDQoNCiMgMS0gYnJldmUgaW50cm9kdWNjaW9uDQphKSBFbCBpbmdyZXNvIHD6YmxpY28sIGVzIHRvZGEgY2FudGlkYWQgZGUgZGluZXJvIHBlcmNpYmlkYSBwb3IgZWwgRXN0YWRvIHkgZGVt4XMgZW50ZXMgcPpibGljb3MsIGN1eW8gb2JqZXRpdm8gZXNlbmNpYWwgZXMgZmluYW5jaWFyIGxvcyBnYXN0b3MgcPpibGljb3MuDQpMYXMgbm90YXMgY2FyYWN0ZXLtc3RpY2FzIGRlbCBpbmdyZXNvIHD6YmxpY28gc29uOg0KRWwgaW5ncmVzbyBw+mJsaWNvIGVzIHNpZW1wcmUgdW5hIHN1bWEgZGUgZGluZXJvLiBObyBvYnN0YW50ZSwgZW4gYWxndW5hcyBvY2FzaW9uZXMgZWwgaW5ncmVzbyBw+mJsaWNvIHF1ZSBpbmljaWFsbWVudGUgc2UgY3VhbnRpZmljYSBlbiB1bmEgY2FudGlkYWQgZGUgZGluZXJvLCBzZSBoYWNlIGVmZWN0aXZvIGVuIGVzcGVjaWU7IGNvbW8gcG9yIGVqZW1wbG8gZW4gYXF1ZWxsb3MgY2Fzb3MgZW4gcXVlIGxhIGRldWRhIHRyaWJ1dGFyaWEgc2UgZXh0aW5ndWVuIGNvbiBsYSBlbnRyZWdhIGRlIGJpZW5lcyBkZWwgcGF0cmltb25pbyBoaXN083JpY28uDQpiKSBQZXJjaWJpZGEgcG9yIHVuIEVudGUgcPpibGljby4NCmMpIFRpZW5lIGNvbW8gb2JqZXRpdm8gZXNlbmNpYWwgZmluYW5jaWFyIGVsIGdhc3RvIHD6YmxpY28NCnVuaWRhZCBkZSBtZWRpZGE6IG1pbGxvbmVzIGRlIHBlc29zIGEgcHJlY2lvcyBjb3JyaWVudGVzDQpwZXJpb2RpY2lkYWQ6IG1lbnN1YWwNCmZ1ZW50ZTogIigiaHR0cDovL3d3dy5pbmVnaS5vcmcubXgvc2lzdGVtYXMvYmllLz9pZHNlclBhZHJlPTExNDAwMDkwIikiDQoNCmBgYHtyfQ0KbGlicmFyeShmb3JlaWduKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShmb3JlY2FzdCkNCmxpYnJhcnkoVFNBKQ0KbGlicmFyeSh1cmNhKQ0KYmFzZSA8LSByZWFkLmNzdigiQzovVXNlcnMvdXN1YXJpby9EZXNrdG9wL2luZ3Jlc29hbHNlY3RvciAxLjIuY3N2Iiwgc2VwID0gIjsiKQ0KSVRHRjwtIHRzKGJhc2UkdG90YWwsc3RhcnQgPSBjKDE5ODYsMSksZnJlcXVlbmN5ID0gMTIpDQphdXRvcGxvdChJVEdGKQ0KYGBgDQplbiBsYSBncmFmaWNhIHBvZGVtb3Mgb2JzZXJ2YXIgcXVlIHByZXNlbnRhIGVzdGFjaW9uYWxpZGFkLCAgc2VyaWUgdGVtcG9yYWwgeWEgcXVlIGxhIHZhcmlhY2nzbiBwZXJp82RpY2EgeSBwcmVkZWNpYmxlIGRlIGxhIG1pc21hIGNvbiB1biBwZXJpb2RvIGluZmVyaW9yIG8gaWd1YWwgYSB1biBh8W8uIA0KDQojRGVzY29tcG9zaWNpb24gY2xhc2ljYSANCg0KYGBge3J9DQpmaXQgPC0gZGVjb21wb3NlKElUR0YsIHR5cGU9J2FkZGl0aXZlJykNCmF1dG9wbG90KGZpdCkNCmBgYA0KTGEgZXN0YWNpb25hbGlkYWQgZXMgdW4gZmVu821lbm8gcXVlIGFwYXJlY2UgY3VhbmRvIHVubyBzZSBkYSBjdWVudGEgcXVlIGVuIGRldGVybWluYWRvcyBwZXLtb2RvcyB5IGNvbiByZWd1bGFyaWRhZCBzZSByZXBpdGVuIHBhdHJvbmVzIGRlIGNvbXBvcnRhbWllbnRvIGRlIHVuIGhlY2hvLCBjb21vIGVsIHF1ZSBzZSBlc3RhIG9ic2VydmFuZG8gZW4gcHJpbWVyYSBpbnN0YW5jaWEuDQoNCkxhIHRlbmRlbmNpYSBzZSB0b3JuYSBlc3RvY2FzdGljYSANCg0KTG9zIHJlc2lkdW9zIGVzdGFuIGVsZXZhZG9zLCBkYWRvIGEgbGFzIGZsdWN0dWFjaW9uZXMgZGUgbGFzIHNhbGlkYXMgZGUgY2FwaXRhbCB5L28gZGUgbGFzIGVudHJhZGFzIGRlbCBtaXNtby4NCg0KI1NpIGVzIG5lY2VzYXJpbywgdXRpbGl6YXIgdHJhbnNmb3JtYWNpb24gQm94LUNveCAvIGxvZ2FyaXRtb3MgcGFyYSBlc3RhYmlsaXphciBsYSB2YXJpYW56YQ0KYGBge3J9DQpCb3hDb3guYXIoSVRHRikNCmBgYA0KYGBge3J9DQphdXRvcGxvdChJVEdGXjAuNzAsIHR5cGU9Im8iKQ0KYGBgDQoNCnBvZGVtb3Mgbm90YXIgcXVlIGNvbiBsYSBwcnVlYmEgYXVuIHNlIHZlIGxhIGVzdGFjaW9uYWxpZGFkIHkgbGEgdGVuZGVuY2lhIA0KDQojNSBFbiBjYXNvIGRlIGVzdGFjaW9uYWxpZGFkLCBhcGxpY2FyIGRpZmVyZW5jaWFzIGVzdGFjaW9uYWxlcw0KYGBge3J9DQpkaWZmLklUR0YgPC0gZGlmZihkaWZmKElUR0YpKSANCmF1dG9wbG90KGRpZmYuSVRHRikgKyB4bGFiKCJh8W8iKSArIHlsYWIoImRhdG9zIikgKyBnZ3RpdGxlKCJJTkdSRVNPIEFMIFNFQ1RPUiBQVUJMSUNPIikNCmBgYA0KDQpzZSBtdWVzdHJhIG1hcyBlc3RhYmlsaXphZGEgbGEgdmFyaWFuemEgZXMgY29uc3RhbnRlIA0KDQojNSBVc2FyICBwcnVlYmEgIERpY2tleS1GdWxsZXIgIHBhcmEgIGV2YWx1YXIgIGVsICBvcmRlbiAgZGUgIGludGVncmFjaW9uICBkZSAgbGEgIHNlcmllLiAgRGlmZXJlbmNpYXIgIGhhc3RhICBxdWUgIGxhICBzZXJpZSAgc2VhICBlc3RhY2lvbmFyaWEuDQpgYGB7cn0NCnN1bW1hcnkodXIuZGYoZGlmZi5JVEdGKSkNCmBgYA0KDQpwb2RlbW9zIG9ic2VydmFyIHF1ZSBlbCB2YWxvciBkZSB2YWx1ZSBvZiB0ZXN0LXN0YXRpc3RpYyBlcyBkZSAtMjMuOTMwOCBlbCBjdWFsIHBhc2EgbG9zIHRyZXMgdmFsb3JlcyBjcml0aWNvcywgY29uIGxvIGN1YWwgcG9kZW1vcyBkZWNpciBxdWUgbGEgc2VyaWUgeWEgZXMgZXN0YWNpb25hbCANCg0KIzYuIFVzYXIgaGVycmFtaWVudGFzIEFDRiwgUEFDRiwgRUFDRiB5IGNyaXRlcmlvcyBkZSBBa2Fpa2UvIEJheWVzIHBhcmEgY29uc3RydWlyIHByb3B1ZXN0YXMgZGUgbW9kZWxvcy4NCg0KYGBge3J9DQpnZ3RzZGlzcGxheShkaWZmLklUR0YpDQpgYGANCmBgYHtyfQ0KcmVzIDwtIGFybWFzdWJzZXRzKHk9ZGlmZi5JVEdGLCBuYXI9MTIsIG5tYT0xMiwgeS5uYW1lPSd0ZXN0JywgYXIubWV0aG9kPSdvbHMnKQ0KcGxvdChyZXMpDQpgYGANCg0KTW9zdHJhZG9zIGxvcyBwcm9jZXNvcyBhbnRlcmlvcmVzIGNvbiBzdXMgZGViaWRvcyBjcml0ZXJpb3MgLCBwb2RlbW9zIGVtcGV6YXIgYSBwcm9wb25lciB1bmEgc2VyaWUgZGUgY2FtYmlvcyBlbiBlbCAiQVJJTUEiIHBhcmEgZXN0cnVjdHVyYXIgdW4gbW9kZWxvIGNvcnJlY3RvIHF1ZSBheXVkYSBhbCBidWVuIG1vZGVsYWplIHkgcHJlc2VudGFjaW9uIGRlbCBtb2RlbG8gImluZ3Jlc28gYWwgc2VjdG9yIHB1YmxpY28iDQoNCmxhIHBydWViYSBub3MgcHJvcG9uZSB1biBtb2RlbG8gTUEgMSBlc3RhY2lvbmFsIGNvbiB1biBBUiA1IGVzdGFjaW9uYWwNCg0KYGBge3J9DQplYWNmKGRpZmYoZGlmZihJVEdGKSkpDQpgYGANCm5vcyBwcm9wb25lIHVuIHVuIEFSIDIgeSB1biBNQSAzDQojUHJvcHVlc3RhIDENCg0KYGBge3J9DQpwcm9wdWVzdGExPC1BcmltYShJVEdGLG9yZGVyPWMoMCwxLDApLHNlYXNvbmFsPWMoMiwxLDEpKQ0KcHJvcHVlc3RhMQ0KYGBgDQpgYGB7cn0NCmNoZWNrcmVzaWR1YWxzKHByb3B1ZXN0YTEpDQpgYGANCg0KZWwgQUlDYyBlcyBlbGV2YWRvIHkgbG9zIHJlemFnb3Mgc2Ugc2lndWVuIHNhbGllbmRvIG5vIGVzIGVsIG1lam9yIG1vZGVsbyANCg0KI1Byb3B1ZXN0YSAyDQpgYGB7cn0NCnByb3B1ZXN0YTI8LUFyaW1hKElUR0Ysb3JkZXI9YygwLDEsMiksc2Vhc29uYWw9YygyLDEsMSkpDQpwcm9wdWVzdGEyDQpgYGANCmBgYHtyfQ0KY2hlY2tyZXNpZHVhbHMocHJvcHVlc3RhMikNCmBgYA0KbG9zIHJlc2lkdW9zIGVzdGFuIGRlbnRybyBkZSBsYXMgYmFuZGFzIGRlIGNvbmZpYW56YSB5IGVsIHJlc3VsdGFkbyBkZWwgQUlDYyBlcyBtZW5vciBxdWUgZWwgZGUgbGEgcHJvcHVlc3RhIDENCg0KI1Byb3B1ZXN0YSAzDQpgYGB7cn0NCnByb3B1ZXN0YTM8LUFyaW1hKElUR0Ysb3JkZXI9YygyLDEsMyksc2Vhc29uYWw9YygwLDAsMikpDQpwcm9wdWVzdGEzDQpgYGANCmBgYHtyfQ0KY2hlY2tyZXNpZHVhbHMocHJvcHVlc3RhMykNCmBgYA0KZWwgcmVzdWx0YWRvIGRlIEFJQ2MgZXMgbWVub3IgcXVlIGVuIGxhIHByb3B1ZXN0YSAxLCBwZXJvIG1heW9yIHF1ZSBsYSBwcm9wdWVzdGEgMg0KDQojUHJvcHVlc3RhIDQNCmBgYHtyfQ0KcHJvcHVlc3RhNDwtQXJpbWEoSVRHRixvcmRlcj1jKDIsMSwzKSxzZWFzb25hbD1jKDAsMSwzKSkNCnByb3B1ZXN0YTQNCmBgYA0KYGBge3J9DQpjaGVja3Jlc2lkdWFscyhwcm9wdWVzdGE0KQ0KYGBgDQplbCBBSUNjIGVzIG11Y2hvIG1heW9yIGEgbG9zIGFudGVyaW9yZXMsIG5vIGVzIGVsIG1lam9yIG1vZGVsbyAgDQoNCiNQcm9wdWVzdGEgNQ0KYGBge3J9DQpwcm9wdWVzdGE1PC1BcmltYShJVEdGLG9yZGVyPWMoMSwxLDEpLHNlYXNvbmFsPWMoMCwxLDApKQ0KcHJvcHVlc3RhNQ0KYGBgDQpgYGB7cn0NCmNoZWNrcmVzaWR1YWxzKHByb3B1ZXN0YTUpDQpgYGANCg0KZWwgQUlDYyBlcyBidWVubyBhdW5xdWUgbGlnZXJhbWVudGUgbWF5b3IgcXVlIGxhIHByb3B1ZXN0YSAyIA0KDQojNy4gQ29tbyBwYXJ0ZSBkZWwgZGlhZ260b3N0aWNvIGRlbCBtb2RlbG8sIGFuYWxpemFyIGxvcyByZXNpZHVvcyB5IGFwbGljYXIgbGEgcHJ1ZWJhIExqdW5nLUJveC4NCmBgYHtyfQ0KdHNkaWFnKHByb3B1ZXN0YTEsZ29mPTEyLG9taXQuaW5pdGlhbD1GKQ0KdHNkaWFnKHByb3B1ZXN0YTIsZ29mPTEyLG9taXQuaW5pdGlhbD1GKQ0KdHNkaWFnKHByb3B1ZXN0YTMsZ29mPTEyLG9taXQuaW5pdGlhbD1GKQ0KdHNkaWFnKHByb3B1ZXN0YTQsZ29mPTEyLG9taXQuaW5pdGlhbD1GKQ0KdHNkaWFnKHByb3B1ZXN0YTUsZ29mPTEyLG9taXQuaW5pdGlhbD1GKQ0KYGBgDQpsb3MgcmVzdWx0YWRvcyBjb25maXJtYW4gcXVlIGxhIG1lam9yIHByb3B1ZXN0YSBlcyBsYSBudW1lcm8gMg0KYGBge3J9DQpwcm9wdWVzdGEuYXV0byA8LSBhdXRvLmFyaW1hKElUR0YpIA0KcHJvcHVlc3RhLmF1dG8NCmBgYA0KYGBge3J9DQpjaGVja3Jlc2lkdWFscyhwcm9wdWVzdGEuYXV0bykNCmBgYA0KYGBge3J9DQp0c2RpYWcocHJvcHVlc3RhLmF1dG8sZ29mPTEyLG9taXQuaW5pdGlhbD1GKQ0KYGBgDQoNCmVsIGF1dG8gYXJpbWEgbm9zIGRhIHVuIG1lam9yIHJlc3VsdGFkbyBkZWwgQUlDYyB5YSBxdWUgZXMgbWFzIGJham8gc2luIGVtYmFyZ28gbm8gbm9zIG11ZXN0YSBhciBuaSBtYSBwYXJhIHBvZGVyIGhhY2VyIGxhIGVjdWFjaW9uIGZpbmFsLCAgcG9yIGVsbG8gbm9zIHF1ZWRhbW9zIGNvbiBsYSBwcm9wdWVzdGEgMg0KDQojOS4gUHJlc2VudGUgbGEgZWN1YWNpb24gZmluYWwgeSBkZXNjcmliYSANCg0KJCQNCklOR1JFU08gREVMIEdPQklFUk5PPVx0aGV0YTAuMDI1NiArXHRoZXRhMC4wMDU4e18oMTIpfQ0KDQokJA0KDQojMTAuIENyZWFyIHVuIHByb25vc3RpY28gYSBkb3MgYfFvcy4NCmBgYHtyfQ0KcHJvbm9zdGljbyA8LSBwbG90KGZvcmVjYXN0KHByb3B1ZXN0YTUsaD0xMikpDQpwcm9ub3N0aWNvDQpgYGANCg0KTGEgcHJveWVjY2lvbiBkZSBudWVzdHJvIHByb25vc3RpY28gbXVlc3RyYSBxdWUgbnVlc3RybyBpbmdyZXNvIGFsIHNlY3RvciAsIHNlIHZhIGEgbWFudGVuZXIgY29uc3RhbnRlLCBkYWRvIHF1ZSBsYSBjb25kaWNpb25lcyBlY29ub21pY2FzIHF1ZSBub3MgZXN0YW1vcyBlbmZyZW50YW5kbyBubyBzb24gbXV5IGRpc3RpbnRhcyBhIGxhcyBwb2xpdGljYXMgbW9uZXRhcmlhIHkgZ3ViZXJuYW1lbnRhbGVzIGRlIGFudGVzLg0KDQoxMS4gIFJlYWxpemFyICBlbCAgcHJvbm9zdGljbyAgQVJJTUEgIHBhcmEgIGRvcyBh8W9zLg0KYGBge3J9DQpnZXRybXNlPC1mdW5jdGlvbih4LGgsLi4uKQ0Kew0KdHJhaW4uZW5kPC10aW1lKHgpW2xlbmd0aCh4KS1oXQ0KdGVzdC5zdGFydDwtdGltZSh4KVtsZW5ndGgoeCktaCsxXQ0KdHJhaW48LXdpbmRvdyh4LGVuZD10cmFpbi5lbmQpDQp0ZXN0PC13aW5kb3coeCxzdGFydD10ZXN0LnN0YXJ0KQ0KZml0PC1BcmltYSh0cmFpbiwuLi4pDQpmYzwtZm9yZWNhc3QoZml0LGg9aCkNCnJldHVybihhY2N1cmFjeShmYyx0ZXN0KVsyLCJSTVNFIl0pDQp9DQpnZXRybXNlKGRpZmYuSVRHRixoPTEyLG9yZGVyPWMoMiwxLDMpLHNlYXNvbmFsPWMoMCwxLDMpKQ0KZ2V0cm1zZShkaWZmLklUR0YsaD0xMixvcmRlcj1jKDAsMSwyKSxzZWFzb25hbD1jKDIsMSwxKSkNCmdldHJtc2UoZGlmZi5JVEdGLGg9MTIsb3JkZXI9YygxLDEsMSksc2Vhc29uYWw9YygwLDEsMCkpDQpnZXRybXNlKGRpZmYuSVRHRixoPTEyLG9yZGVyPWMoMiwxLDIpLHNlYXNvbmFsPWMoMSwxLDIpKQ0KZ2V0cm1zZShkaWZmLklUR0YsaD0xMixvcmRlcj1jKDIsMSwxKSxzZWFzb25hbD1jKDEsMSwwKSkNCmdldHJtc2UoZGlmZi5JVEdGLGg9MTIsb3JkZXI9YygyLDEsMSksc2Vhc29uYWw9YygxLDEsMSkpDQpnZXRybXNlKGRpZmYuSVRHRixoPTEyLG9yZGVyPWMoMiwxLDEpLHNlYXNvbmFsPWMoMCwxLDEpKQ0KZ2V0cm1zZShkaWZmLklUR0YsaD0xMixvcmRlcj1jKDEsMSwwKSxzZWFzb25hbD1jKDEsMSwyKSkNCmdldHJtc2UoZGlmZi5JVEdGLGg9MTIsb3JkZXI9YygxLDAsMSksc2Vhc29uYWw9YygxLDEsMCkpDQpnZXRybXNlKGRpZmYuSVRHRixoPTEyLG9yZGVyPWMoMSwwLDEpLHNlYXNvbmFsPWMoMSwxLDEpKQ0KZ2V0cm1zZShkaWZmLklUR0YsaD0xMixvcmRlcj1jKDIsMSwxKSxzZWFzb25hbD1jKDIsMSwxKSkNCmdldHJtc2UoZGlmZi5JVEdGLGg9MTIsb3JkZXI9YygxLDEsMCksc2Vhc29uYWw9YygxLDAsMCkpDQpnZXRybXNlKGRpZmYuSVRHRixoPTEyLG9yZGVyPWMoMSwxLDEpLHNlYXNvbmFsPWMoMCwwLDEpKQ0KZ2V0cm1zZShkaWZmLklUR0YsaD0xMixvcmRlcj1jKDIsMSwxKSxzZWFzb25hbD1jKDAsMCwxKSkNCmBgYA0KDQpsYSByYWl6IGRlbCBlcnJvciBtZWRpYSBtYXMgcGVxdWXxbyBlcyBsYSBvcGNpb24gMyBlbCAzNi45NDU2Mw0KDQoxMi4gIFV0aWxpemFuZG8gIG1ldG9kb3MgIGRlICBwcm9ub3N0aWNvcyAgc2ltcGxlcyAgeS9vICBzdWF2aXphbWllbnRvICBleHBvbmVuY2lhbCAgZ2VuZXJhciAgdW4gIHByb25vc3RpY28gIHBhcmEgIGRvcyAgYfFvcy4gIEVsZWdpciAgZWwgIG1ldG9kbyAgcXVlICBwcmVzZW50ZSAgbGEgIHJhaXogIGRlbCAgZXJyb3IgIG1lZGlvIGFsICBjdWFkcmFkbyAgbWFzICBwZXF1ZW5vLiAgDQpgYGB7cn0NCklUR0YuPC13aW5kb3coSVRHRixlbmQ9MzkwKQ0KDQphdXRvcGxvdChJVEdGLikrDQpmb3JlY2FzdDo6YXV0b2xheWVyKG1lYW5mKElUR0YuLGg9MTIpLFBJPUZBTFNFLHNlcmllcz0iTWVhbiIpKw0KZm9yZWNhc3Q6OmF1dG9sYXllcihyd2YoSVRHRi4saD0xMiksUEk9RkFMU0Usc2VyaWVzPSJOYe92ZSIpKw0KZm9yZWNhc3Q6OmF1dG9sYXllcihyd2YoSVRHRi4sZHJpZnQ9VFJVRSxoPTEyKSxQST1GQUxTRSxzZXJpZXM9IkRyaWZ0IikrDQpnZ3RpdGxlKCJpbmdyZXNvIGFsIHNlY3RvciBwdWJsaWNvIikrDQpndWlkZXMoY29sb3VyPWd1aWRlX2xlZ2VuZCh0aXRsZT0iRm9yZWNhc3QiKSkNCmBgYA0KDQoxMy4gVXNhbmRvIGVsIGFutGFsaXNpcyBkZSB0cmFuc2ZlcmVuY2lhLCBtb2RlbGFyIG9ic2VydmFjaW9uZXMgY2FtYmlvcyBlc3RydWN0dXJhbGVzIHkvbyBvYnNlcnZhY2lvbmVzIGF0tGlwaWNhcyBlbiBlbCBjb250ZXh0byBBUklNQVggKHB1bnRvIGV4dHJhLCBvcGNpb25hbCkuIA0KYGBge3J9DQpwbG90KElUR0YpDQpgYGANCg0KI0FuYWxpc2lzIGRlIGludGVydmVuY2lvbiANCkxhcyBpbnRlcnZlbmNpb25lcyBwdWVkZW4gc2VyIG5hdHVyYWxlcyBvIGhlY2hhcyBwb3IgZWwgc2VyIGh1bWFubw0KMS0gZWwgaW5ncmVzbyBhbCBzZWN0b3IgcHVibGljbyBwdWVkZSBhdW1lbnRhciBkZWJpZG8gYSB1biBjb2JybyBtYXMgZWxldmFkbyBkZSBpbXB1ZXN0b3MgDQoyLSBwdWVkZSBkaXNtaW51aXIgZGViaWRvIGEgdW5hIGZ1Z2EgZGUgY2FwaXRhbCANCmBgYHtyfQ0KYWNmKGFzLnZlY3RvcihkaWZmKGRpZmYod2luZG93KChJVEdGKSxlbmQ9YygyMDE4LDA2KSksMTIpKSksbGFnLm1heD00OCxtYWluPScnKQ0KYGBgDQoNCg0KYGBge3J9DQphaXIubTE9YXJpbWF4KGxvZyhJVEdGKSxvcmRlcj1jKDAsMSwxKSxzZWFzb25hbD1saXN0KG9yZGVyPWMoMCwxLDEpLHBlcmlvZD0xMiksDQp4dHJhbnNmPWRhdGEuZnJhbWUoSTkxMT0xKihzZXEoSVRHRik9PTY5KSxJOTExPTEqKHNlcShJVEdGKT09NjkpKSwNCnRyYW5zZmVyPWxpc3QoYygwLDApLGMoMSwwKSkseHJlZz1kYXRhLmZyYW1lKERlYzk2PTEqKHNlcShJVEdGKT09MTIpLCAgICAgICAgICBKYW45Nz0xKihzZXEoSVRHRik9PTEzKSxEZWMwMj0xKihzZXEoSVRHRik9PTg0KSksbWV0aG9kPSdNTCcpDQphaXIubTENCmBgYA0KDQpgYGB7cn0NCnBsb3QobG9nKElUR0YpLHlsYWI9J0xvZyhJVEdGKScpKw0KcG9pbnRzKGZpdHRlZChhaXIubTEpKQ0KYGBgDQoNCmBgYHtyfQ0KTmluZTExcD0xKihzZXEoSVRHRik9PTY5KSANCnBsb3QodHMoTmluZTExcCooMC4wMDA0KStmaWx0ZXIoTmluZTExcCxmaWx0ZXI9LTAuMDAwMixtZXRob2Q9J3JlY3Vyc2l2ZScsIHNpZGU9MSksZnJlcXVlbmN5PTEyLHN0YXJ0PTE5ODYpLHlsYWI9IlBJQiIsIHR5cGU9J2gnKSANCmFibGluZShoPTApDQpgYGANCg0KDQpgYGB7cn0NCmxpYnJhcnkocmVhZHIpDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmxpYnJhcnkoZm9yZWNhc3QpDQpsaWJyYXJ5KGZwcDIpDQpsaWJyYXJ5KGxtdGVzdCkNCmxpYnJhcnkoVFNBKQ0KbGlicmFyeSh1cmNhKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShybWFya2Rvd24pDQpsaWJyYXJ5KHpvbykNCmBgYA0KMTQuICBBbmFsaXphciAgdW4gIFZBUiwgIG5lY2VzaXRhICBpbmNsdWlyICBsb3MgIHB1bnRvcyAgc2lndWllbnRlcw0KYSlCdXNjYXIgIG90cmEgIHZhcmlhYmxlICAoaW5jbHVzbyAgbWFzICB2YXJpYWJsZXMpICB5ICByZWRhY3RhciAgbGEgIHRlb3JpYSAgcXVlICBzZSAgZW5jdWVudHJhICBkZXRyYXMgIGRlICBsYSAgcmVsYWNpb24gIGVudHJlICB2YXJpYWJsZXMgIHF1ZSAgcHJvcG9uZS4NCg0KI0xhIHNlZ3VuZGEgdmFyaWFibGUgZXMgZ2FzdG8gZGUgZ29iaWVybm8gDQpzZSByZWxhY2lvbmEgY29uIGVsIGluZ3Jlc28gYWwgc2VjdG9yIHB1YmxpY28gbWVkaWFudGUgZWwgUElCIG8gbGFzIFBvbGl0aWNhcyBtb25ldGFyaWFzIA0KVG9kYXMgbGFzIGZ1bmNpb25lcyBxdWUgcmVhbGl6YSBlbCBzZWN0b3IgcPpibGljbyByZXF1aWVyZW4gbGEgcmVhbGl6YWNp824gZGUgdW4gZ2FzdG8sIHBvciBsbyBxdWUgcGFyYSBmaW5hbmNpYXJsYXMgc2Vy4SBuZWNlc2FyaW8gb2J0ZW5lciBpbmdyZXNvcy4NClBhcmEgcG9kZXIgZmluYW5jaWFyIHN1cyBnYXN0b3MsIGVsIHNlY3RvciBw+mJsaWNvIHRpZW5lIHF1ZSBjb25zZWd1aXIgaW5ncmVzb3MuIERpY2hvcyBpbmdyZXNvcyBsb3MgbG9ncmEsIGVudHJlIG90cmFzIHbtYXMsIGVzdGFibGVjaWVuZG8gaW1wdWVzdG9zLCBlcyBkZWNpciwgcGFnb3Mgb2JsaWdhdG9yaW9zIHF1ZSBvYnRpZW5lIGRlIGxhcyBlY29ub23tYXMgZG9t6XN0aWNhcyB5IGxhcyBlbXByZXNhcy4gRWwgY29uanVudG8gZGUgcHJvY2VkaW1pZW50b3MgeSBub3JtYXMgcXVlIHJlZ3VsYW4gbGEgY29udHJpYnVjafNuIGRlIGltcHVlc3RvcyBzZSBkZW5vbWluYSBzaXN0ZW1hIHRyaWJ1dGFyaW8uIEEgc3UgdmV6LCBsb3MgaW1wdWVzdG9zIHRhbWJp6W4gcHVlZGVuIGN1bXBsaXIgdW5hIGltcG9ydGFudGUgZnVuY2nzbiByZWRpc3RyaWJ1dGl2YSBhIHRyYXbpcyBkZSBsYSBwcm9ncmVzaXZpZGFkLCBkZSBsYSBxdWUgaGFibGFyZW1vcyBlbiBlbCBhcGFydGFkbyByZWxhdGl2byBhIGluZ3Jlc29zIHD6YmxpY29zLg0KQ2FkYSB2ZXogcXVlIGVsIHNlY3RvciBw+mJsaWNvIGRlY2lkZSBhcGxpY2FyIHVuYSBwb2ztdGljYSBmaXNjYWwgZXhwYW5zaXZhIHNlDQpwcm9kdWNlIHVuIGVmZWN0byBuZWdhdGl2byBzb2JyZSBlbCBzYWxkbyBwcmVzdXB1ZXN0YXJpbyAoU1AgPSBUIC0gRyAtIFRSKSwgeWEgcXVlIGxvcw0KaW5jcmVtZW50b3MgZGUgbG9zIGdhc3RvcyBkZWwgc2VjdG9yIHD6YmxpY28gKGdhc3RvIHD6YmxpY28geSB0cmFuc2ZlcmVuY2lhcykgbyBsYXMNCnJlZHVjY2lvbmVzIGRlIHN1cyBpbmdyZXNvcyBwcm92b2NhbiB1biBpbmNyZW1lbnRvIGRlbCBk6WZpY2l0IHD6YmxpY28uIENvbW8gc2FiZW1vcywgZW4NCnVuYSBlY29ub23tYSBjZXJyYWRhLCBsYSByZWR1Y2Np824gZGVsIGFob3JybyBw+mJsaWNvIHN1cG9uZSB1bmEgcmVkdWNjafNuIGRlIGxvcyByZWN1cnNvcw0KcGFyYSBmaW5hbmNpYXIgbGEgaW52ZXJzafNuLCBwb3IgbG8gcXVlLCBwYXJhIGV2aXRhciBsYSBjYe1kYSBkZSBsYSBpbnZlcnNp824gaW50ZXJuYSBlbCBhaG9ycm8NCnByaXZhZG8gZGViZSBjb21wZW5zYXIgZWwgaW5jcmVtZW50byBkZWwgZOlmaWNpdCBw+mJsaWNvLg0KYikgIEV2YWx1YXIgIGxhICBlc3RhY2lvbmFsaWRhZCAgZGUgIGxhICBudWV2YSAgdmFyaWFibGUuDQpgYGB7cn0NCmJhc2UyIDwtIHJlYWQuY3N2KCJDOi9Vc2Vycy91c3VhcmlvL0Rlc2t0b3AvaW5ncmVzb2Fsc2VjdG9yIDEuMi5jc3YiLCBzZXAgPSAiOyIpDQpgYGANCmBgYHtyfQ0KdHMuaSA8LSB0cyhiYXNlMiRpdGdmLCBzdGFydCA9IGMoMTk4NiwxKSwgZnJlcXVlbmN5ID0gMTIpDQp0cy5nIDwtIHRzKGJhc2UyJGdnLCBzdGFydCA9IGMoMTk4NiwxKSwgZnJlcXVlbmN5ID0gMTIpDQpgYGANCg0KYGBge3J9DQphdXRvcGxvdCh0cy5pKQ0KYGBgDQpjb21vIGxhIGhhYmlhIGRlc2NyaXRvIGFudGVyaW9ybWVudGUgY3VlbnRhIGNvbiBlc3RhY2lvbmFsaWRhZCB5IHVuIHBvY28gZGUgdGVuZGVuY2lhIA0KYGBge3J9DQphdXRvcGxvdCh0cy5nKQ0KYGBgDQpwb2RlbW9zIG9ic2VydmFyIGVuIGVsIGdhc3RvIGRlIGdvYmllcm5vIHRlbmRlbmNpYSBjcmVjaWVudGUgDQpgYGB7cn0NCmdnc2Vhc29ucGxvdCh0cy5pKQ0KYGBgDQphcXVpIHNlIHB1ZWRlIHZlciBjbGFyYW1lbnRlIHF1ZSBsYSBzZXJpZSBkZSBpbmdyZXNvIGVzIGVzdGFjaW9uYWwgDQpgYGB7cn0NCmdnc2Vhc29ucGxvdCh0cy5nKQ0KYGBgDQpsYSBzZXJpZSBkZSBnYXN0byBubyBlcyBlc3RhY2lvbmFsLCBzb2xvIHRlbmRlbmNpYSBjcmVjaWVudGUgDQpgYGB7cn0NCm1lcy4gPC0gc2Vhc29uKHRzLmkpDQpyZWcuaSA8LSBsbSh0cy5pIH4gdGltZSh0cy5pKSArIG1lcy4pDQpzdW1tYXJ5KHJlZy5pKQ0KYGBgDQoNCmBgYHtyfQ0KbWVzLiA8LSBzZWFzb24odHMuZykNCnJlZy5nIDwtIGxtKHRzLmcgfiB0aW1lKHRzLmcpICsgbWVzLikNCnN1bW1hcnkocmVnLmcpDQpgYGANCg0KYGBge3J9DQp0cy5kZGkgPC0gZGlmZihkaWZmKHRzLmksMTIpKQ0KdHMuZGdnIDwtIGRpZmYoZGlmZih0cy5nLDEyKSkgDQoNCmBgYA0KDQpgYGB7cn0NCmdndHNkaXNwbGF5KHRzLmRkaSkNCg0KYGBgDQpgYGB7cn0NCmdndHNkaXNwbGF5KHRzLmRnZykNCmBgYA0KDQoNCmBgYHtyfQ0Kc3VtbWFyeSh1ci5kZih0cy5kZGkpKQ0KYGBgDQplbCByZXN1bHRhZG8gZGUgZXN0YSBwcnVlYmEgcmVzcGVjdG8gYWwgaW5ncmVzbyBzb24gZXMgZGUgKC0yMS4yOTg2KSBwYXNhIHBvciBtdWNobyBsb3MgdmFsb3JlcyBjcml0aWNvcyBlc3RvIHF1aWVyZSBkZWNpciBxdWUgbGEgc2VyaWUgeWEgZXMgZXN0YWNpb25hcmlhIA0KDQpgYGB7cn0NCnN1bW1hcnkodXIuZGYodHMuZGdnKSkNCmBgYA0KbGEgcHJ1ZWJhIGFwbGljYWRhIGFsIGdhc3RvIGRlIGdvYmllcm5vIG5vcyBkaWNlIHF1ZSBlbCByZXN1bHRhZG8gKC0xNi4xMDkyKSBzb2JyZXBhc2EgbG9zIHZhbG9yZXMgY3JpdGljb3MsIHBvciB0YW50byB5YSBlcyB1bmEgc2VyaWUgZXN0YWNpb25hcmlhIA0KYGBge3J9DQpiYXNlMyA8LSBjYmluZC56b28oaSA9IHRzLmRkaSwgZyA9IHRzLmRnZykgDQpWaWV3KGJhc2UzKSANCmF1dG9wbG90KGJhc2UzKSANCmBgYA0KDQpjKSAgUHJvcG9uZ2EgIGVsICBvcmRlbiAgZGUgIHJlemFnb3Mgb3B0aW1vICBwYXJhICBlbCAgVkFSICB5ICBwcmVzZW50YXIgIGxhICBlc3RpbWFjaW9uLiAgDQpgYGB7cn0NClZBUnNlbGVjdChiYXNlMywgbGFnLm1heCA9IDI0LCB0eXBlID0gImNvbnN0IilbWyJzZWxlY3Rpb24iXV0NClZBUnNlbGVjdChiYXNlMywgbGFnLm1heCA9IDI0LCB0eXBlID0gImNvbnN0IikNCmBgYA0KDQpub3MgcHJvcG9uZSByZXp6YWdvcyBkZWwgMSBoYXN0YSBlbCAyNA0KDQojUHJvcHVlc3RhIDEgY29uIDJyZXphZ29zIA0KI1JlemFnbyAyDQoNCmBgYHtyfQ0KdmFyMSA8LSBWQVIoYmFzZTMsIHA9MSwgdHlwZSA9ICJib3RoIikNCnN1bW1hcnkodmFyMSkNCmBgYA0KIG5vcyBlbmNvbnRyYW1vcyAxIHZhcmlhYmxlIHNpZ25pZmljYXRpdmEgY29uIHVuIHJlc3VsdGFkbyBkZSBwLXZhbHVlIGRlbCAwLjA3MzI1DQoNCiNSZXphZ28gMg0KDQpgYGB7cn0NCnZhcjIgPC0gVkFSKGJhc2UzLCBwPTIsIHR5cGUgPSAiYm90aCIpDQpzdW1tYXJ5KHZhcjIpDQpgYGANCnRlbmVtb3MgMiB2YXJpYWJsZXMgc2lnbmlmaWNhdGl2YXMgeSB1biByZXN1bHRhZG8gcC12YWx1ZSBtYXMgYmFqbyBxdWUgZWwgYW50ZXJpb3IgDQojUmV6YWdvIDMNCmBgYHtyfQ0KdmFyMyA8LSBWQVIoYmFzZTMsIHA9MywgdHlwZSA9ICJib3RoIikNCnN1bW1hcnkodmFyMykNCmBgYA0Kc29sbyBzZSBhdW1lbnRvbyB1bmEgdmFyaWFibGUgc2lnbmlmaWNhdGl2YSB5IGJham8gdW4gcG9jbyBlbCByZXN1bHRhZG8gZGUgcC12YWx1ZSANCiNSZXphZ28gOCANCmBgYHtyfQ0KdmFyNCA8LSBWQVIoYmFzZTMsIHA9OCwgdHlwZSA9ICJib3RoIikNCnN1bW1hcnkodmFyNCkNCmBgYA0KdGVuZW1vcyBzaWduaWZpY2FuY2lhIGNvbiA4IHZhcnJpYWJsZXMgeSB1biBwLXZhbHVlIG1pbmltbywgb2N1cGFyZW1vcyBlc3RhIHByb3B1ZXN0YSBkZSByZXphZ29zIA0KDQpgYGB7cn0NCnZhcjQuc2VyaWFsIDwtIHNlcmlhbC50ZXN0KHZhcjQsIGxhZ3MucHQ9MTAsIHR5cGU9IlBULmFzeW1wdG90aWMiKSANCnBsb3QodmFyNC5zZXJpYWwsIG5hbWVzID0gIkNvbnN1bXB0aW9uIikNCmBgYA0KYGBge3J9DQpwbG90KHZhcjQuc2VyaWFsLCBuYW1lcyA9ICJJbmNvbWUiKQ0KYGBgDQoNCmQpICBQcm9iYXIgIGxhICBjb3JyZWxhY2lvbiAgc2VyaWFsICB5ICBub3JtYWxpZGFkICBlbiAgbG9zICByZXNpZHVvcy4NCg0KYGBge3J9DQp2YXIubm9ybTwtbm9ybWFsaXR5LnRlc3QodmFyNCxtdWx0aXZhcmlhdGUub25seT1UUlVFKQ0KdmFyLm5vcm0NCmBgYA0KDQpgYGB7cn0NCmN1c3VtPC1zdGFiaWxpdHkodmFyNCx0eXBlPSJPTFMtQ1VTVU0iKQ0KcGxvdChjdXN1bSkNCmBgYA0KDQoNCmBgYHtyfQ0KcmVjLmN1c3VtPC1zdGFiaWxpdHkodmFyNCx0eXBlPSJSZWMtQ1VTVU0iKQ0KcGxvdChyZWMuY3VzdW0pDQpgYGANCnNlIHB1ZWRlIG9ic2VydmFyIGVzdGFiaWxpZGFkIGVzdHJ1Y3R1cmFsIHkgcXVlIGxhcyBmbHVjdHVhY2lvbmVzIHNvbiBtaW5pbWFzIA0KZSkgIFJlc3VsdGFkb3MgIGRlICBsYSAgcHJ1ZWJhICBkZSAgY2F1c2FsaWRhZCAgZGUgIEdyYW5nZXINCg0KYGBge3J9DQpjYXVzYWxpdHkodmFyNCwgY2F1c2U9J2knKSRHcmFuZ2VyDQpgYGANCnNlIGFjZXB0YSBsYSBIMCB5IHNlIHB1ZWRlIGRlY2lyIHF1ZSBlbCBpbmdyZXNvIG5vIGNhdXNhIGFsIGdhc3RvIGRlIGdvYmllcm5vIA0KYGBge3J9DQpjYXVzYWxpdHkodmFyNCwgY2F1c2U9J2cnKSRHcmFuZ2VyDQpgYGANCmRlIGlndWFsIG1hbmVyYSBzZSBhY2VwdGEgbGEgSDAsIGxvIGN1YWwgcXVpZXJlIGRlY2lyIHF1ZSBlbCBnYXN0byBkZSBnb2JpZXJubyBubyBjYXVzYSBhbCBpbmdyZXNvDQoNCmYpICBDcmVhciAgdW4gIHByb25vc3RpY28gIHBhcmEgIGRvcyAgYfFvcyAgdXNhbmRvICBlbCAgVkFSICBlc3BlY2lmaWNhZG8uICANCmBgYHtyfQ0KcHJlZGljdGlvbnM8LXByZWRpY3QodmFyNCxuLmFoZWFkPTEwLGNpPTAuOTUpDQpjbGFzcyhwcmVkaWN0aW9ucykNCmBgYA0KDQpgYGB7cn0NCnBsb3QocHJlZGljdGlvbnMsbmFtZXM9IkNvbnN1bXB0aW9uIikNCmBgYA0KDQpgYGB7cn0NCmZhbmNoYXJ0KHByZWRpY3Rpb25zLG5hbWVzPSJJbmNvbWUiKQ0KYGBgDQoNCmcpICBJbnRlcnByZXRhciAgbGFzICBmdW5jaW9uZXMgIGltcHVsc28tcmVzcHVlc3RhLg0KDQpgYGB7cn0NCnBsb3QoaXJmKHZhcjQsaW1wdWxzZT0iaSIscmVzcG9uc2U9ImciLG9ydGhvPVQpKQ0KYGBgDQoNCmBgYHtyfQ0KcGxvdChpcmYodmFyNCxpbXB1bHNlPSJnIixyZXNwb25zZT0iaSIsb3J0aG89VCkpDQpgYGANCg0KI0Rlc2NvbXBvc2ljaW9uIGRlIHZhcmlhbnphIGRlIGVycm9yIA0KDQpgYGB7cn0NCmZldmQudmFyIDwtIGZldmQodmFyNCwgbi5haGVhZCA9IDEwKSANCmZldmQudmFyDQoNCmBgYA0KDQpgYGB7cn0NCnBsb3QoZmV2ZC52YXIsYWRkYmFycz0yKQ0KYGBgDQplbCBpbmdyZXNvIG5vIGRlcGVuZGUgZGVsIGdhc3RvIHkgZWwgZ2FzdG8gbm8gZGVwZW5kZSBkZWwgaW5ncmVzbyANCmVzdG8gc2UgZGViZSBhIHF1ZSBhbWJhcyB2YXJpYWJsZXMgZm9ybWFuIGVsIFBJQiBwb3IgZWxsbyByZXF1ZXJpcmlhbiBtYXMgdmFyaWFibGVzIGNvbW8gbGFzIGV4cG9ydGFjaW9uZXMgZSBpbXBvcnRhY2lvbmVzLCBsYSBpbnZlcnNp824sIGV0Yy4gDQoNCjE1LiAgRXZhbHVhciAgbGEgIHBvdGVuY2lhbCAgY29pbnRlZ3JhY2lvbiAgdXNhbmRvICBsYSAgbWV0b2RvbG9naWEgIGRlICBFbmdsZS1HcmFuZ2VyICB5ICBKb2hhbi1zZW4uDQoNCmBgYHtyfQ0KbGlicmFyeSh0c2VyaWVzKQ0KcG8udGVzdChiYXNlM1ssMToyXSkNCmBgYA0KDQpjb24gSDAgbGFzIHZhcmlhYmxlcyBubyBlc3RhbiBjb2ludGVncmFkYXMg