# El Servicio Interno de Contribuciones (IRS) de EE.UU. está tratando de estimar la cantidad mensual de impuestos no pagados descubiertos por su departamento de auditorías. En el pasado, el IRS estimaba esta cantidad con base en el número esperado de horas de trabajo de auditorías de campo. En los últimos años, sin embargo, las horas de trabajo de auditorías de campo se han convertido en un pronosticador errático de los impuestos no pagados reales. Como resultado, la dependencia está buscando otro factor para mejorar la ecuación de estimación.
# El departamento de auditorías tiene un registro del número de horas que usa sus computadoras para detectar impuestos no pagados. ¿Podríamos combinar esta información con los datos referentes a las horas de trabajo de auditorías de campo y obtener una ecuación de estimación más precisa para los impuestos no pagados descubiertos por cada mes?

IMPORTACION DE DATOS

library(readr)
library(dplyr)
ruta_archivo<-"C:/Users/74/Desktop/BASES PARA R/R. Múltiple Ejercicicio.csv"
datos<-read_csv(file = ruta_archivo)
datos

CAMBIANDO EL NOMBRE A LAS COLUMNAS

datos1<-select(datos, Y = "Impuestos reales", X1 = "Horas en Computadora", X2 = "Horas de trabajo")
datos1

CONSTRUCCION DE MATRICES

MATRIZ Y (Regresada, Endogena)

datos1 %>% select("Y") %>% as.matrix()->Yregresada
Yregresada
       Y
 [1,] 29
 [2,] 24
 [3,] 27
 [4,] 25
 [5,] 26
 [6,] 28
 [7,] 30
 [8,] 28
 [9,] 28
[10,] 27

MATRIZ X1 Y X2 (Regresores, Exogenas)

datos1 %>%  mutate(Cte=1) %>% select("Cte","X1","X2") %>% as.matrix()->Xregresor
Xregresor
      Cte X1 X2
 [1,]   1 16 45
 [2,]   1 14 42
 [3,]   1 15 44
 [4,]   1 13 45
 [5,]   1 13 43
 [6,]   1 14 46
 [7,]   1 16 44
 [8,]   1 16 45
 [9,]   1 15 44
[10,]   1 15 43

PRODUCTO ESCALAR DE LA PRIMERA Y SEGUNDA COLUMNA DE X

columna_1<-as.matrix(Xregresor[,1])
columna_2<-as.matrix(Xregresor[,2])
Transpuesta<-t(columna_1)
productoescalar<-((t(columna_1)%*%columna_2))
productoescalar
     [,1]
[1,]  147

PRODUCTO DE X TRANSPUESTA POR X (Sigmamatriz)

Xtranspuesta<-t(Xregresor)
sigmamatriz<-(Xtranspuesta%*%Xregresor)
sigmamatriz
    Cte   X1    X2
Cte  10  147   441
X1  147 2173  6485
X2  441 6485 19461

PROPDUCTO DE X TRANSPUESTA POR Y (Matriz Cruzada)

cruzada<-(Xtranspuesta%*%Yregresada)
cruzada
        Y
Cte   272
X1   4013
X2  12005

INVERSA DE (X transpuesta por X)

inversigma<-solve(sigmamatriz)
inversigma
            Cte          X1          X2
Cte 154.8594164 -0.58488064 -3.31432361
X1   -0.5848806  0.08554377 -0.01525199
X2   -3.3143236 -0.01525199  0.08023873

PRODUCTO DE [X’X]^-1 y X’Y (Inversa de la sigmamatriz * Cruzada)

Betas_Estimados<-(inversigma%*%cruzada)
Betas_Estimados
              Y
Cte -13.8196286
X1    1.0994695
X2    0.5636605

MATRIZ DE PROYECCION P

Matriz_P<-(Xregresor%*%inversigma%*%Xtranspuesta)
Matriz_P
             [,1]        [,2]       [,3]        [,4]        [,5]        [,6]
 [1,]  0.27387268 -0.07824934 0.12400531 -0.01856764 -0.12334218  0.13129973
 [2,] -0.07824934  0.45092838 0.10742706  0.00530504  0.32095491 -0.18037135
 [3,]  0.12400531  0.10742706 0.10941645  0.04244032  0.06763926  0.05702918
 [4,] -0.01856764  0.00530504 0.04244032  0.45888594  0.26259947  0.39787798
 [5,] -0.12334218  0.32095491 0.06763926  0.26259947  0.38726790  0.07161804
 [6,]  0.13129973 -0.18037135 0.05702918  0.39787798  0.07161804  0.47214854
 [7,]  0.22148541  0.07957560 0.13660477 -0.11671088 -0.06100796 -0.03183024
 [8,]  0.27387268 -0.07824934 0.12400531 -0.01856764 -0.12334218  0.13129973
 [9,]  0.12400531  0.10742706 0.10941645  0.04244032  0.06763926  0.05702918
[10,]  0.07161804  0.26525199 0.12201592 -0.05570292  0.12997347 -0.10610080
             [,7]        [,8]       [,9]       [,10]
 [1,]  0.22148541  0.27387268 0.12400531  0.07161804
 [2,]  0.07957560 -0.07824934 0.10742706  0.26525199
 [3,]  0.13660477  0.12400531 0.10941645  0.12201592
 [4,] -0.11671088 -0.01856764 0.04244032 -0.05570292
 [5,] -0.06100796 -0.12334218 0.06763926  0.12997347
 [6,] -0.03183024  0.13129973 0.05702918 -0.10610080
 [7,]  0.24933687  0.22148541 0.13660477  0.16445623
 [8,]  0.22148541  0.27387268 0.12400531  0.07161804
 [9,]  0.13660477  0.12400531 0.10941645  0.12201592
[10,]  0.16445623  0.07161804 0.12201592  0.21485411

PROYECCION DE Y sobre X, Y = PY

Y_Proyectada<-(Matriz_P%*%Yregresada)
Y_Proyectada
             Y
 [1,] 29.13660
 [2,] 25.24668
 [3,] 27.47347
 [4,] 25.83820
 [5,] 24.71088
 [6,] 27.50133
 [7,] 28.57294
 [8,] 29.13660
 [9,] 27.47347
[10,] 26.90981

DIFERENCIA ENTRE Y e Y(Estimada)

ERRORES

Errores<-(Yregresada-Y_Proyectada)
Errores
                Y
 [1,] -0.13660477
 [2,] -1.24668435
 [3,] -0.47347480
 [4,] -0.83819629
 [5,]  1.28912467
 [6,]  0.49867374
 [7,]  1.42705570
 [8,] -1.13660477
 [9,]  0.52652520
[10,]  0.09018568

AUTOVALORES DE LA MATRIZ X’X ¿Son todos positivos? ¿Porqué?

Autovalor<-eigen(sigmamatriz)
Autovalor
eigen() decomposition
$values
[1] 2.163319e+04 1.079999e+01 6.454421e-03

$vectors
            [,1]         [,2]         [,3]
[1,] -0.02149301  0.003186926  0.999763919
[2,] -0.31622490 -0.948676746 -0.003774152
[3,] -0.94844075  0.316231363 -0.021397701

OTRA FORMA DE CALCULAR LOS ESTIMADORES Y OTROS ANALISIS

MATRIZ A POR Y

Matriz_A<-inversigma%*%Xtranspuesta
Matriz_A
           [,1]        [,2]        [,3]        [,4]        [,5]        [,6]        [,7]
Cte -3.64323607  7.46949602  0.25596817 -1.88859416  4.74005305 -5.78779841 -0.32891247
X1   0.09748011 -0.02785146  0.02718833 -0.15915119 -0.12864721 -0.08885942  0.11273210
X2   0.05238727 -0.15782493 -0.01259947  0.09814324 -0.06233422  0.16312997 -0.02785146
           [,8]        [,9]       [,10]
Cte -3.64323607  0.25596817  3.57029178
X1   0.09748011  0.02718833  0.04244032
X2   0.05238727 -0.01259947 -0.09283820
Estimadores<-Matriz_A%*%Yregresada
Estimadores
              Y
Cte -13.8196286
X1    1.0994695
X2    0.5636605
# Los parámetros son una combinación lineal de “Y”

MATRIZ P

Matriz_P<-Xregresor%*%inversigma%*%Xtranspuesta
Matriz_P
             [,1]        [,2]       [,3]        [,4]        [,5]        [,6]
 [1,]  0.27387268 -0.07824934 0.12400531 -0.01856764 -0.12334218  0.13129973
 [2,] -0.07824934  0.45092838 0.10742706  0.00530504  0.32095491 -0.18037135
 [3,]  0.12400531  0.10742706 0.10941645  0.04244032  0.06763926  0.05702918
 [4,] -0.01856764  0.00530504 0.04244032  0.45888594  0.26259947  0.39787798
 [5,] -0.12334218  0.32095491 0.06763926  0.26259947  0.38726790  0.07161804
 [6,]  0.13129973 -0.18037135 0.05702918  0.39787798  0.07161804  0.47214854
 [7,]  0.22148541  0.07957560 0.13660477 -0.11671088 -0.06100796 -0.03183024
 [8,]  0.27387268 -0.07824934 0.12400531 -0.01856764 -0.12334218  0.13129973
 [9,]  0.12400531  0.10742706 0.10941645  0.04244032  0.06763926  0.05702918
[10,]  0.07161804  0.26525199 0.12201592 -0.05570292  0.12997347 -0.10610080
             [,7]        [,8]       [,9]       [,10]
 [1,]  0.22148541  0.27387268 0.12400531  0.07161804
 [2,]  0.07957560 -0.07824934 0.10742706  0.26525199
 [3,]  0.13660477  0.12400531 0.10941645  0.12201592
 [4,] -0.11671088 -0.01856764 0.04244032 -0.05570292
 [5,] -0.06100796 -0.12334218 0.06763926  0.12997347
 [6,] -0.03183024  0.13129973 0.05702918 -0.10610080
 [7,]  0.24933687  0.22148541 0.13660477  0.16445623
 [8,]  0.22148541  0.27387268 0.12400531  0.07161804
 [9,]  0.13660477  0.12400531 0.10941645  0.12201592
[10,]  0.16445623  0.07161804 0.12201592  0.21485411

MATRIZ P por Y

Matriz_PY<-Matriz_P%*%Yregresada
Matriz_PY
             Y
 [1,] 29.13660
 [2,] 25.24668
 [3,] 27.47347
 [4,] 25.83820
 [5,] 24.71088
 [6,] 27.50133
 [7,] 28.57294
 [8,] 29.13660
 [9,] 27.47347
[10,] 26.90981
#  Las estimaciones de “Y” también son una combinación lineal de “Y”

MATRIZ M

Matriz_Identidad<-diag(10)
Matriz_Identidad
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,]    1    0    0    0    0    0    0    0    0     0
 [2,]    0    1    0    0    0    0    0    0    0     0
 [3,]    0    0    1    0    0    0    0    0    0     0
 [4,]    0    0    0    1    0    0    0    0    0     0
 [5,]    0    0    0    0    1    0    0    0    0     0
 [6,]    0    0    0    0    0    1    0    0    0     0
 [7,]    0    0    0    0    0    0    1    0    0     0
 [8,]    0    0    0    0    0    0    0    1    0     0
 [9,]    0    0    0    0    0    0    0    0    1     0
[10,]    0    0    0    0    0    0    0    0    0     1
Matriz_M<-(Matriz_Identidad-Matriz_P)
Matriz_M
             [,1]        [,2]        [,3]        [,4]        [,5]        [,6]
 [1,]  0.72612732  0.07824934 -0.12400531  0.01856764  0.12334218 -0.13129973
 [2,]  0.07824934  0.54907162 -0.10742706 -0.00530504 -0.32095491  0.18037135
 [3,] -0.12400531 -0.10742706  0.89058355 -0.04244032 -0.06763926 -0.05702918
 [4,]  0.01856764 -0.00530504 -0.04244032  0.54111406 -0.26259947 -0.39787798
 [5,]  0.12334218 -0.32095491 -0.06763926 -0.26259947  0.61273210 -0.07161804
 [6,] -0.13129973  0.18037135 -0.05702918 -0.39787798 -0.07161804  0.52785146
 [7,] -0.22148541 -0.07957560 -0.13660477  0.11671088  0.06100796  0.03183024
 [8,] -0.27387268  0.07824934 -0.12400531  0.01856764  0.12334218 -0.13129973
 [9,] -0.12400531 -0.10742706 -0.10941645 -0.04244032 -0.06763926 -0.05702918
[10,] -0.07161804 -0.26525199 -0.12201592  0.05570292 -0.12997347  0.10610080
             [,7]        [,8]        [,9]       [,10]
 [1,] -0.22148541 -0.27387268 -0.12400531 -0.07161804
 [2,] -0.07957560  0.07824934 -0.10742706 -0.26525199
 [3,] -0.13660477 -0.12400531 -0.10941645 -0.12201592
 [4,]  0.11671088  0.01856764 -0.04244032  0.05570292
 [5,]  0.06100796  0.12334218 -0.06763926 -0.12997347
 [6,]  0.03183024 -0.13129973 -0.05702918  0.10610080
 [7,]  0.75066313 -0.22148541 -0.13660477 -0.16445623
 [8,] -0.22148541  0.72612732 -0.12400531 -0.07161804
 [9,] -0.13660477 -0.12400531  0.89058355 -0.12201592
[10,] -0.16445623 -0.07161804 -0.12201592  0.78514589

ERRORES

Errores_2<-Matriz_M%*%Yregresada
Errores_2
                Y
 [1,] -0.13660477
 [2,] -1.24668435
 [3,] -0.47347480
 [4,] -0.83819629
 [5,]  1.28912467
 [6,]  0.49867374
 [7,]  1.42705570
 [8,] -1.13660477
 [9,]  0.52652520
[10,]  0.09018568
# Los residuos del modelo también son una combinación lineal de “Y” 
LS0tDQp0aXRsZTogIkVDVUFDSU9OIERFIEVTVElNQUNJT04iDQphdXRob3I6ICJEZW5pcyBGZXJuYW5kbyBGbGFtZW5jbyBOb2xhc2NvIg0Kb3V0cHV0OiANCiAgaHRtbF9ub3RlYm9vazogDQogICAgdG9jOiB5ZXMNCiAgaHRtbF9kb2N1bWVudDogDQogICAgZGZfcHJpbnQ6IGthYmxlDQogICAgdG9jOiB5ZXMNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQpgYGB7cn0NCiMgRWwgU2VydmljaW8gSW50ZXJubyBkZSBDb250cmlidWNpb25lcyAoSVJTKSBkZSBFRS5VVS4gZXN04SB0cmF0YW5kbyBkZSBlc3RpbWFyIGxhIGNhbnRpZGFkIG1lbnN1YWwgZGUgaW1wdWVzdG9zIG5vIHBhZ2Fkb3MgZGVzY3ViaWVydG9zIHBvciBzdSBkZXBhcnRhbWVudG8gZGUgYXVkaXRvcu1hcy4gRW4gZWwgcGFzYWRvLCBlbCBJUlMgZXN0aW1hYmEgZXN0YSBjYW50aWRhZCBjb24gYmFzZSBlbiBlbCBu+m1lcm8gZXNwZXJhZG8gZGUgaG9yYXMgZGUgdHJhYmFqbyBkZSBhdWRpdG9y7WFzIGRlIGNhbXBvLiBFbiBsb3Mg+mx0aW1vcyBh8W9zLCBzaW4gZW1iYXJnbywgbGFzIGhvcmFzIGRlIHRyYWJham8gZGUgYXVkaXRvcu1hcyBkZSBjYW1wbyBzZSBoYW4gY29udmVydGlkbyBlbiB1biBwcm9ub3N0aWNhZG9yIGVycuF0aWNvIGRlIGxvcyBpbXB1ZXN0b3Mgbm8gcGFnYWRvcyByZWFsZXMuIENvbW8gcmVzdWx0YWRvLCBsYSBkZXBlbmRlbmNpYSBlc3ThIGJ1c2NhbmRvIG90cm8gZmFjdG9yIHBhcmEgbWVqb3JhciBsYSBlY3VhY2nzbiBkZSBlc3RpbWFjafNuLg0KDQojIEVsIGRlcGFydGFtZW50byBkZSBhdWRpdG9y7WFzIHRpZW5lIHVuIHJlZ2lzdHJvIGRlbCBu+m1lcm8gZGUgaG9yYXMgcXVlIHVzYSBzdXMgY29tcHV0YWRvcmFzIHBhcmEgZGV0ZWN0YXIgaW1wdWVzdG9zIG5vIHBhZ2Fkb3MuIL9Qb2Ry7WFtb3MgY29tYmluYXIgZXN0YSBpbmZvcm1hY2nzbiBjb24gbG9zIGRhdG9zIHJlZmVyZW50ZXMgYSBsYXMgaG9yYXMgZGUgdHJhYmFqbyBkZSBhdWRpdG9y7WFzIGRlIGNhbXBvIHkgb2J0ZW5lciB1bmEgZWN1YWNp824gZGUgZXN0aW1hY2nzbiBt4XMgcHJlY2lzYSBwYXJhIGxvcyBpbXB1ZXN0b3Mgbm8gcGFnYWRvcyBkZXNjdWJpZXJ0b3MgcG9yIGNhZGEgbWVzPw0KDQpgYGANCg0KIyNJTVBPUlRBQ0lPTiBERSBEQVRPUw0KYGBge3Isd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFLGV2YWw9VFJVRSxlY2hvPVRSVUV9DQpsaWJyYXJ5KHJlYWRyKQ0KbGlicmFyeShkcGx5cikNCnJ1dGFfYXJjaGl2bzwtIkM6L1VzZXJzLzc0L0Rlc2t0b3AvQkFTRVMgUEFSQSBSL1IuIE36bHRpcGxlIEVqZXJjaWNpY2lvLmNzdiINCmRhdG9zPC1yZWFkX2NzdihmaWxlID0gcnV0YV9hcmNoaXZvKQ0KZGF0b3MNCmBgYA0KDQojI0NBTUJJQU5ETyBFTCBOT01CUkUgQSBMQVMgQ09MVU1OQVMNCg0KYGBge3J9DQpkYXRvczE8LXNlbGVjdChkYXRvcywgWSA9ICJJbXB1ZXN0b3MgcmVhbGVzIiwgWDEgPSAiSG9yYXMgZW4gQ29tcHV0YWRvcmEiLCBYMiA9ICJIb3JhcyBkZSB0cmFiYWpvIikNCmRhdG9zMQ0KDQpgYGANCg0KDQoNCiMgQ09OU1RSVUNDSU9OIERFIE1BVFJJQ0VTIA0KDQojIyMgTUFUUklaIFkgKFJlZ3Jlc2FkYSwgRW5kb2dlbmEpDQoNCmBgYHtyfQ0KZGF0b3MxICU+JSBzZWxlY3QoIlkiKSAlPiUgYXMubWF0cml4KCktPllyZWdyZXNhZGENCg0KWXJlZ3Jlc2FkYQ0KDQpgYGANCg0KIyMjIE1BVFJJWiBYMSBZIFgyIChSZWdyZXNvcmVzLCBFeG9nZW5hcykNCg0KYGBge3J9DQpkYXRvczEgJT4lICBtdXRhdGUoQ3RlPTEpICU+JSBzZWxlY3QoIkN0ZSIsIlgxIiwiWDIiKSAlPiUgYXMubWF0cml4KCktPlhyZWdyZXNvcg0KWHJlZ3Jlc29yDQoNCmBgYA0KDQoNCiMjIyBQUk9EVUNUTyBFU0NBTEFSIERFIExBIFBSSU1FUkEgWSBTRUdVTkRBIENPTFVNTkEgREUgWA0KDQpgYGB7cn0NCmNvbHVtbmFfMTwtYXMubWF0cml4KFhyZWdyZXNvclssMV0pDQpjb2x1bW5hXzI8LWFzLm1hdHJpeChYcmVncmVzb3JbLDJdKQ0KVHJhbnNwdWVzdGE8LXQoY29sdW1uYV8xKQ0KcHJvZHVjdG9lc2NhbGFyPC0oKHQoY29sdW1uYV8xKSUqJWNvbHVtbmFfMikpDQpwcm9kdWN0b2VzY2FsYXINCg0KYGBgDQoNCiMjIyBQUk9EVUNUTyBERSBYIFRSQU5TUFVFU1RBIFBPUiBYIChTaWdtYW1hdHJpeikNCg0KYGBge3J9DQpYdHJhbnNwdWVzdGE8LXQoWHJlZ3Jlc29yKQ0Kc2lnbWFtYXRyaXo8LShYdHJhbnNwdWVzdGElKiVYcmVncmVzb3IpDQpzaWdtYW1hdHJpeg0KDQpgYGANCg0KDQojIyMgUFJPUERVQ1RPIERFIFggVFJBTlNQVUVTVEEgUE9SIFkgKE1hdHJpeiBDcnV6YWRhKQ0KDQpgYGB7cn0NCmNydXphZGE8LShYdHJhbnNwdWVzdGElKiVZcmVncmVzYWRhKQ0KY3J1emFkYQ0KDQpgYGANCg0KDQojIyMgSU5WRVJTQSBERSAoWCB0cmFuc3B1ZXN0YSBwb3IgWCkNCg0KYGBge3J9DQppbnZlcnNpZ21hPC1zb2x2ZShzaWdtYW1hdHJpeikNCmludmVyc2lnbWENCmBgYA0KDQoNCiMjIyBQUk9EVUNUTyBERSAgW1gnWF1eLTEgeSBYJ1kgKEludmVyc2EgZGUgbGEgc2lnbWFtYXRyaXogKiBDcnV6YWRhKQ0KDQpgYGB7cn0NCkJldGFzX0VzdGltYWRvczwtKGludmVyc2lnbWElKiVjcnV6YWRhKQ0KDQpCZXRhc19Fc3RpbWFkb3MNCg0KYGBgDQoNCg0KIyMjIE1BVFJJWiBERSBQUk9ZRUNDSU9OIFANCg0KYGBge3J9DQpNYXRyaXpfUDwtKFhyZWdyZXNvciUqJWludmVyc2lnbWElKiVYdHJhbnNwdWVzdGEpDQpNYXRyaXpfUA0KDQpgYGANCg0KDQojIyMgUFJPWUVDQ0lPTiBERSAgWSBzb2JyZSBYLCBZID0gUFkNCg0KYGBge3J9DQpZX1Byb3llY3RhZGE8LShNYXRyaXpfUCUqJVlyZWdyZXNhZGEpDQpZX1Byb3llY3RhZGENCg0KYGBgDQoNCiMgRElGRVJFTkNJQSBFTlRSRSAgWSBlIFkoRXN0aW1hZGEpDQojIyMgRVJST1JFUw0KDQpgYGB7cn0NCkVycm9yZXM8LShZcmVncmVzYWRhLVlfUHJveWVjdGFkYSkNCkVycm9yZXMNCmBgYA0KDQoNCiMjIyBBVVRPVkFMT1JFUyBERSBMQSBNQVRSSVogWCdYIL9Tb24gdG9kb3MgcG9zaXRpdm9zPyC/UG9ycXXpPw0KDQpgYGB7cn0NCg0KQXV0b3ZhbG9yPC1laWdlbihzaWdtYW1hdHJpeikNCkF1dG92YWxvcg0KDQpgYGANCg0KDQojIE9UUkEgRk9STUEgREUgQ0FMQ1VMQVIgTE9TIEVTVElNQURPUkVTIFkgT1RST1MgQU5BTElTSVMNCg0KIyMjIE1BVFJJWiBBIFBPUiBZDQoNCmBgYHtyfQ0KDQpNYXRyaXpfQTwtaW52ZXJzaWdtYSUqJVh0cmFuc3B1ZXN0YQ0KTWF0cml6X0ENCg0KYGBgDQpgYGB7cn0NCkVzdGltYWRvcmVzPC1NYXRyaXpfQSUqJVlyZWdyZXNhZGENCkVzdGltYWRvcmVzDQoNCiMgTG9zIHBhcuFtZXRyb3Mgc29uIHVuYSBjb21iaW5hY2nzbiBsaW5lYWwgZGUgIlkiDQpgYGANCg0KDQojIyMgTUFUUklaIFANCg0KDQoNCmBgYHtyfQ0KDQpNYXRyaXpfUDwtWHJlZ3Jlc29yJSolaW52ZXJzaWdtYSUqJVh0cmFuc3B1ZXN0YQ0KTWF0cml6X1ANCg0KYGBgDQoNCiMjIyBNQVRSSVogUCBwb3IgWQ0KDQoNCmBgYHtyfQ0KTWF0cml6X1BZPC1NYXRyaXpfUCUqJVlyZWdyZXNhZGENCk1hdHJpel9QWQ0KDQojICBMYXMgZXN0aW1hY2lvbmVzIGRlICJZIiB0YW1iaeluIHNvbiB1bmEgY29tYmluYWNp824gbGluZWFsIGRlICJZIg0KDQpgYGANCg0KDQojIyMgTUFUUklaIE0NCg0KYGBge3J9DQpNYXRyaXpfSWRlbnRpZGFkPC1kaWFnKDEwKQ0KTWF0cml6X0lkZW50aWRhZA0KYGBgDQoNCmBgYHtyfQ0KTWF0cml6X008LShNYXRyaXpfSWRlbnRpZGFkLU1hdHJpel9QKQ0KTWF0cml6X00NCmBgYA0KDQojIyMgRVJST1JFUw0KDQpgYGB7cn0NCkVycm9yZXNfMjwtTWF0cml6X00lKiVZcmVncmVzYWRhDQpFcnJvcmVzXzINCg0KIyBMb3MgcmVzaWR1b3MgZGVsIG1vZGVsbyB0YW1iaeluIHNvbiB1bmEgY29tYmluYWNp824gbGluZWFsIGRlICJZIiANCg0KYGBgDQoNCg0KDQoNCg==