Set working directory

setwd("C:/Users/Admin/Desktop/Thay_Son")

library(writexl)
package 㤼㸱writexl㤼㸲 was built under R version 3.6.2

Hoang Van Thu

HVT<-read.csv("https://raw.githubusercontent.com/tuyenhavan/Land-Relocation-Survey-Data/master/HVT_Dec.csv",sep=",")

head(HVT)

dim(HVT)
[1] 76 44

Bac SOn Keo Dai

BS_KD<-read.csv("https://raw.githubusercontent.com/tuyenhavan/Land-Relocation-Survey-Data/master/BS_KD_Dec.csv",sep=",")

head(BS_KD)

dim(BS_KD)
[1] 101  44

Duong Viet Bac - Quang Trung - Dong Quang

QT_DQ<-read.csv("https://raw.githubusercontent.com/tuyenhavan/Land-Relocation-Survey-Data/master/QT_DQ_Dec.csv",header = T,sep=",")

head(QT_DQ)

dim(QT_DQ)
[1] 95 44

Tuc Duyen

TD<-read.csv("https://raw.githubusercontent.com/tuyenhavan/Land-Relocation-Survey-Data/master/TD_Dec.csv",sep=",")

head(TD)

dim(TD)
[1] 99 44

Phan Dinh Phung

PDP<-read.csv("https://raw.githubusercontent.com/tuyenhavan/Land-Relocation-Survey-Data/master/PDP_Dec.csv",sep=",")

head(PDP)

dim(PDP)
[1] 55 44

Put all datasets in one container

Project1<-rbind(HVT,BS_KD,QT_DQ,TD,PDP)

head(Project1)

dim(Project1)
[1] 426  44
# Write xlsx file

setwd("C:/Users/Admin/Desktop/Thay_Son")

library(writexl)

write_xlsx(Project1, "Final1.xlsx")

Choosing Group variable (Group A)

library(readxl)
package 㤼㸱readxl㤼㸲 was built under R version 3.6.2
Project<-read_xlsx("Final.xlsx")

head(Project)

library(tidyverse)
Registered S3 method overwritten by 'dplyr':
  method           from
  print.rowwise_df     
-- Attaching packages --------------------------------------- tidyverse 1.2.1 --
v ggplot2 3.2.1     v purrr   0.3.2
v tibble  2.1.3     v dplyr   0.8.1
v tidyr   0.8.3     v stringr 1.4.0
v readr   1.3.1     v forcats 0.4.0
-- Conflicts ------------------------------------------ tidyverse_conflicts() --
x dplyr::filter() masks stats::filter()
x dplyr::lag()    masks stats::lag()
GroupA<- Project %>% dplyr::select(A1:A5,Y.TB)

# Building a regression model

model_A<-lm(Y.TB~., data=GroupA)

MA<-step(model_A,direction = "backward") # Variables should be selected 
Start:  AIC=-916.73
Y.TB ~ A1 + A2 + A3 + A4 + A5

       Df Sum of Sq    RSS     AIC
- A3    1   0.09868 48.248 -917.86
<none>              48.150 -916.73
- A4    1   0.26260 48.412 -916.42
- A5    1   1.01568 49.165 -909.84
- A2    1   1.97836 50.128 -901.58
- A1    1   1.99588 50.145 -901.43

Step:  AIC=-917.86
Y.TB ~ A1 + A2 + A4 + A5

       Df Sum of Sq    RSS     AIC
<none>              48.248 -917.86
- A4    1   0.76259 49.011 -913.18
- A5    1   1.05422 49.302 -910.65
- A1    1   1.90043 50.149 -903.40
- A2    1   1.93756 50.186 -903.09
summary(MA)

Call:
lm(formula = Y.TB ~ A1 + A2 + A4 + A5, data = GroupA)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.29126 -0.21711 -0.00387  0.21554  1.01554 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.53148    0.14064  17.999  < 2e-16 ***
A1           0.14729    0.03617   4.072 5.57e-05 ***
A2           0.14782    0.03595   4.112 4.72e-05 ***
A4          -0.06734    0.02611  -2.580  0.01023 *  
A5           0.08547    0.02818   3.033  0.00257 ** 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3385 on 421 degrees of freedom
Multiple R-squared:  0.2403,    Adjusted R-squared:  0.2331 
F-statistic: 33.29 on 4 and 421 DF,  p-value: < 2.2e-16
# Select only satisfied variables 

Group_A<-GroupA %>% select(A1,A2,A4,A5)

Mean_A<-rowMeans(Group_A)

Choosing Group variable (Group B)

# Choosing variable B6 to B10
GroupB<- Project %>% dplyr::select(B6:B10,Y.TB)
# Regression model for choosing met variables 

model_B<-lm(Y.TB~., data=GroupB)

MB<-step(model_B,direction = "backward") # Variables should be selected 
Start:  AIC=-1007.08
Y.TB ~ B6 + B7 + B8 + B9 + B10

       Df Sum of Sq    RSS      AIC
<none>              38.948 -1007.08
- B7    1    0.5795 39.527 -1002.79
- B8    1    0.7198 39.668 -1001.28
- B9    1    0.9219 39.870  -999.12
- B6    1    2.4418 41.390  -983.18
- B10   1    5.1114 44.059  -956.55
summary(MB)

Call:
lm(formula = Y.TB ~ B6 + B7 + B8 + B9 + B10, data = GroupB)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.07940 -0.20225 -0.01369  0.20108  1.03092 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.98633    0.13781  14.413  < 2e-16 ***
B6           0.13287    0.02589   5.131 4.40e-07 ***
B7          -0.05768    0.02307  -2.500  0.01280 *  
B8           0.08911    0.03198   2.786  0.00558 ** 
B9           0.10277    0.03259   3.153  0.00173 ** 
B10          0.18539    0.02497   7.424 6.37e-13 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3045 on 420 degrees of freedom
Multiple R-squared:  0.3868,    Adjusted R-squared:  0.3795 
F-statistic: 52.98 on 5 and 420 DF,  p-value: < 2.2e-16
# Choosing variables

Group_B<-GroupB %>% select(B6:B10)

Mean_B<-rowMeans(Group_B)

Choosing Group variable (Group C)

GroupC<- Project %>% dplyr::select(C11:C14,Y.TB)
# Regression model

model_C<-lm(Y.TB~., data=GroupC)

MC<-step(model_C,direction = "backward") # Variables should be selected 
Start:  AIC=-1002.75
Y.TB ~ C11 + C12 + C13 + C14

       Df Sum of Sq    RSS      AIC
<none>              39.218 -1002.75
- C11   1    1.2317 40.450  -991.61
- C14   1    1.8481 41.066  -985.18
- C13   1    2.7140 41.932  -976.32
- C12   1    3.9204 43.139  -964.26
summary(MC)

Call:
lm(formula = Y.TB ~ C11 + C12 + C13 + C14, data = GroupC)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.91232 -0.22700  0.00464  0.18104  0.77300 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.68874    0.13213  12.781  < 2e-16 ***
C11          0.09400    0.02588   3.632 0.000316 ***
C12          0.16913    0.02610   6.480 2.58e-10 ***
C13          0.13763    0.02553   5.391 1.17e-07 ***
C14          0.11173    0.02512   4.449 1.11e-05 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3056 on 420 degrees of freedom
  (1 observation deleted due to missingness)
Multiple R-squared:  0.3823,    Adjusted R-squared:  0.3765 
F-statistic: 64.99 on 4 and 420 DF,  p-value: < 2.2e-16
# Choosing variables

Group_C<-GroupC %>% select(C11:C14)

Mean_C<-rowMeans(Group_C)

Choosing Group variable (Group D)

GroupD<- Project %>% dplyr::select(D15:D16,Y.TB)
# Model
model_D<-lm(Y.TB~., data=GroupD)

MD<-step(model_D,direction = "backward") # Variables should be selected 
Start:  AIC=-925.84
Y.TB ~ D15 + D16

       Df Sum of Sq    RSS     AIC
- D16   1    0.0002 47.800 -927.84
<none>              47.799 -925.84
- D15   1   15.6815 63.481 -806.98

Step:  AIC=-927.84
Y.TB ~ D15

       Df Sum of Sq    RSS     AIC
<none>              47.800 -927.84
- D15   1    15.711 63.511 -808.78
summary(MD)

Call:
lm(formula = Y.TB ~ D15, data = GroupD)

Residuals:
    Min      1Q  Median      3Q     Max 
-1.4914 -0.2753  0.0086  0.2086  0.8086 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.73958    0.08890   30.82   <2e-16 ***
D15          0.28394    0.02405   11.80   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3358 on 424 degrees of freedom
Multiple R-squared:  0.2474,    Adjusted R-squared:  0.2456 
F-statistic: 139.4 on 1 and 424 DF,  p-value: < 2.2e-16
# Choosing variables

Group_D<-GroupD %>% select(D15)

Mean_D<-rowMeans(Group_D)

Choosing Group variable (Group E)

GroupE<- Project %>% dplyr::select(E17:E20,Y.TB)
# Model
model_E<-lm(Y.TB~., data=GroupE)

ME<-step(model_E,direction = "backward") # Variables should be selected 
Start:  AIC=-989.55
Y.TB ~ E17 + E18 + E19 + E20

       Df Sum of Sq    RSS     AIC
<none>              40.775 -989.55
- E17   1    0.7932 41.568 -983.34
- E19   1    1.2902 42.065 -978.28
- E20   1    2.5985 43.374 -965.23
- E18   1   14.2157 54.991 -864.14
summary(ME)

Call:
lm(formula = Y.TB ~ E17 + E18 + E19 + E20, data = GroupE)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.96709 -0.20432 -0.04625  0.21687  0.90661 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.77510    0.13896  12.774  < 2e-16 ***
E17          0.07192    0.02513   2.862 0.004422 ** 
E18          0.24142    0.01993  12.115  < 2e-16 ***
E19          0.08592    0.02354   3.650 0.000295 ***
E20          0.12602    0.02433   5.180 3.45e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3112 on 421 degrees of freedom
Multiple R-squared:  0.358, Adjusted R-squared:  0.3519 
F-statistic: 58.69 on 4 and 421 DF,  p-value: < 2.2e-16
# Choosing variables

Group_E<-GroupE %>% select(E17:E20)

Mean_E<-rowMeans(Group_E)

Choosing Group variable (Group F)

GroupF<- Project %>% dplyr::select(F21:F23,Y.TB)

# Model
model_F<-lm(Y.TB~., data=GroupF)

MF<-step(model_F,direction = "backward") # Variables should be selected 
Start:  AIC=-947.45
Y.TB ~ F21 + F22 + F23

       Df Sum of Sq    RSS     AIC
- F22   1    0.1530 45.375 -948.02
<none>              45.222 -947.45
- F21   1    5.1079 50.330 -903.87
- F23   1    5.9275 51.150 -896.99

Step:  AIC=-948.02
Y.TB ~ F21 + F23

       Df Sum of Sq    RSS     AIC
<none>              45.375 -948.02
- F21   1    5.1468 50.522 -904.25
- F23   1    5.8544 51.230 -898.32
summary(MF)

Call:
lm(formula = Y.TB ~ F21 + F23, data = GroupF)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.26828 -0.22936 -0.05067  0.19934  0.91693 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.50070    0.10024  24.948  < 2e-16 ***
F21          0.18239    0.02633   6.927 1.61e-11 ***
F23          0.16760    0.02269   7.388 8.04e-13 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3275 on 423 degrees of freedom
Multiple R-squared:  0.2855,    Adjusted R-squared:  0.2822 
F-statistic: 84.53 on 2 and 423 DF,  p-value: < 2.2e-16
# Choosing variables 
Group_F<-GroupF %>% select(F21,F23)

Mean_F<-rowMeans(Group_F)

Choosing Group variable (Group G)

GroupG<- Project %>% dplyr::select(G24:G25,Y.TB)
# Model

model_G<-lm(Y.TB~., data=GroupG)

MG<-step(model_G,direction = "backward") # Variables should be selected 
Start:  AIC=-890.57
Y.TB ~ G24 + G25

       Df Sum of Sq    RSS     AIC
- G24   1    0.0749 52.000 -891.96
<none>              51.926 -890.57
- G25   1   11.4983 63.424 -807.36

Step:  AIC=-891.96
Y.TB ~ G25

       Df Sum of Sq    RSS     AIC
<none>              52.000 -891.96
- G25   1     11.51 63.511 -808.78
summary(MG)

Call:
lm(formula = Y.TB ~ G25, data = GroupG)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.54635 -0.26109 -0.06109  0.23891  0.93891 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.00216    0.08119  36.976   <2e-16 ***
G25          0.21473    0.02217   9.688   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3502 on 424 degrees of freedom
Multiple R-squared:  0.1812,    Adjusted R-squared:  0.1793 
F-statistic: 93.85 on 1 and 424 DF,  p-value: < 2.2e-16
# Choosing variables
Group_G<-GroupG %>% select(G25)

Mean_G<-rowMeans(Group_G)

Choosing Group variable (Group H)

GroupH<- Project %>% dplyr::select(H26:H27,Y.TB)

# Model

model_H<-lm(Y.TB~., data=GroupH)

MH<-step(model_H,direction = "backward") # Variables should be selected 
Start:  AIC=-956.13
Y.TB ~ H26 + H27

       Df Sum of Sq    RSS     AIC
- H26   1    0.0533 44.573 -957.62
<none>              44.519 -956.13
- H27   1   18.9043 63.424 -807.36

Step:  AIC=-957.62
Y.TB ~ H27

       Df Sum of Sq    RSS     AIC
<none>              44.573 -957.62
- H27   1    18.938 63.511 -808.78
summary(MH)

Call:
lm(formula = Y.TB ~ H27, data = GroupH)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.89482 -0.20413 -0.00413  0.25052  0.89587 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.01344    0.05861   51.41   <2e-16 ***
H27          0.24535    0.01828   13.42   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3242 on 424 degrees of freedom
Multiple R-squared:  0.2982,    Adjusted R-squared:  0.2965 
F-statistic: 180.1 on 1 and 424 DF,  p-value: < 2.2e-16
# Choosing variables

Group_H<-GroupH %>% select(H27)

Mean_H<-rowMeans(Group_H)

It is preprocessed to form a ready dataset for analysis of influencing factors to land acquisition

Pro_final<-data.frame(Mean_A,Mean_B,Mean_C,Mean_D,Mean_E,Mean_F,Mean_G,Mean_H, Y_mean=Project$Y.TB)

head(Pro_final)
# Fitting model

model_final<-lm(Y_mean~., data=Pro_final)
# Loading variable importance package 
library(relaimpo)
package 㤼㸱relaimpo㤼㸲 was built under R version 3.6.2Loading required package: MASS

Attaching package: 㤼㸱MASS㤼㸲

The following object is masked from 㤼㸱package:dplyr㤼㸲:

    select

Loading required package: boot
Loading required package: survey
package 㤼㸱survey㤼㸲 was built under R version 3.6.2Loading required package: grid
Loading required package: Matrix

Attaching package: 㤼㸱Matrix㤼㸲

The following object is masked from 㤼㸱package:tidyr㤼㸲:

    expand

Loading required package: survival

Attaching package: 㤼㸱survival㤼㸲

The following object is masked from 㤼㸱package:boot㤼㸲:

    aml


Attaching package: 㤼㸱survey㤼㸲

The following object is masked from 㤼㸱package:graphics㤼㸲:

    dotchart

Loading required package: mitools
package 㤼㸱mitools㤼㸲 was built under R version 3.6.2This is the global version of package relaimpo.

If you are a non-US user, a version with the interesting additional metric pmvd is available

from Ulrike Groempings web site at prof.beuth-hochschule.de/groemping.
Variable_Importance<-calc.relimp(model_final,type=c("lmg"),rela=T)

Variable_Importance
Response variable: Y_mean 
Total response variance: 0.1497501 
Analysis based on 425 observations 

8 Regressors: 
Mean_A Mean_B Mean_C Mean_D Mean_E Mean_F Mean_G Mean_H 
Proportion of variance explained by model: 68.84%
Metrics are normalized to sum to 100% (rela=TRUE). 

Relative importance metrics: 

              lmg
Mean_A 0.07050366
Mean_B 0.14342882
Mean_C 0.15916395
Mean_D 0.11260040
Mean_E 0.12529315
Mean_F 0.14673951
Mean_G 0.07146360
Mean_H 0.17080690

Average coefficients for different model sizes: 

              1X       2Xs        3Xs        4Xs          5Xs         6Xs         7Xs         8Xs
Mean_A 0.3250838 0.1741945 0.09377624 0.04065234 0.0008012866 -0.03193030 -0.06072944 -0.08748522
Mean_B 0.4723081 0.4182675 0.38037392 0.35487957 0.3373205616  0.32535875  0.31775744  0.31386735
Mean_C 0.4986977 0.4075082 0.33154979 0.27089297 0.2232573030  0.18671714  0.16000771  0.14242047
Mean_D 0.2849486 0.2172747 0.17431322 0.14454287 0.1225467231  0.10525612  0.09066295  0.07729612
Mean_E 0.4821403 0.3699955 0.29419518 0.24092946 0.2023266188  0.17340758  0.15054019  0.13071420
Mean_F 0.3484192 0.2758238 0.23103158 0.20096486 0.1787992187  0.16110786  0.14639043  0.13428588
Mean_G 0.2153257 0.1538968 0.11619448 0.09130145 0.0740270183  0.06147327  0.05182370  0.04380888
Mean_H 0.2467246 0.1991026 0.17004102 0.15085699 0.1371951105  0.12692072  0.11895865  0.11277416
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIFNldCB3b3JraW5nIGRpcmVjdG9yeSANCg0KYGBge3J9DQpzZXR3ZCgiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9UaGF5X1NvbiIpDQoNCmxpYnJhcnkod3JpdGV4bCkNCmBgYA0KDQoNCiMgSG9hbmcgVmFuIFRodQ0KDQpgYGB7cn0NCkhWVDwtcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90dXllbmhhdmFuL0xhbmQtUmVsb2NhdGlvbi1TdXJ2ZXktRGF0YS9tYXN0ZXIvSFZUX0RlYy5jc3YiLHNlcD0iLCIpDQoNCmhlYWQoSFZUKQ0KDQpkaW0oSFZUKQ0KDQpgYGANCg0KIyBCYWMgU09uIEtlbyBEYWkNCg0KYGBge3J9DQpCU19LRDwtcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90dXllbmhhdmFuL0xhbmQtUmVsb2NhdGlvbi1TdXJ2ZXktRGF0YS9tYXN0ZXIvQlNfS0RfRGVjLmNzdiIsc2VwPSIsIikNCg0KaGVhZChCU19LRCkNCg0KZGltKEJTX0tEKQ0KDQpgYGANCiMgRHVvbmcgVmlldCBCYWMgLSBRdWFuZyBUcnVuZyAtIERvbmcgUXVhbmcNCg0KYGBge3J9DQpRVF9EUTwtcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90dXllbmhhdmFuL0xhbmQtUmVsb2NhdGlvbi1TdXJ2ZXktRGF0YS9tYXN0ZXIvUVRfRFFfRGVjLmNzdiIsaGVhZGVyID0gVCxzZXA9IiwiKQ0KDQpoZWFkKFFUX0RRKQ0KDQpkaW0oUVRfRFEpDQpgYGANCg0KIyBUdWMgRHV5ZW4gDQoNCmBgYHtyfQ0KVEQ8LXJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdHV5ZW5oYXZhbi9MYW5kLVJlbG9jYXRpb24tU3VydmV5LURhdGEvbWFzdGVyL1REX0RlYy5jc3YiLHNlcD0iLCIpDQoNCmhlYWQoVEQpDQoNCmRpbShURCkNCg0KYGBgDQoNCiMgUGhhbiBEaW5oIFBodW5nDQoNCmBgYHtyfQ0KUERQPC1yZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3R1eWVuaGF2YW4vTGFuZC1SZWxvY2F0aW9uLVN1cnZleS1EYXRhL21hc3Rlci9QRFBfRGVjLmNzdiIsc2VwPSIsIikNCg0KaGVhZChQRFApDQoNCmRpbShQRFApDQpgYGANCg0KIyBQdXQgYWxsIGRhdGFzZXRzIGluIG9uZSBjb250YWluZXIgDQoNCmBgYHtyfQ0KUHJvamVjdDE8LXJiaW5kKEhWVCxCU19LRCxRVF9EUSxURCxQRFApDQoNCmhlYWQoUHJvamVjdDEpDQoNCmRpbShQcm9qZWN0MSkNCiMgV3JpdGUgeGxzeCBmaWxlDQoNCnNldHdkKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL1RoYXlfU29uIikNCg0KbGlicmFyeSh3cml0ZXhsKQ0KDQp3cml0ZV94bHN4KFByb2plY3QxLCAiRmluYWwxLnhsc3giKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEEpDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQoNClByb2plY3Q8LXJlYWRfeGxzeCgiRmluYWwueGxzeCIpDQoNCmhlYWQoUHJvamVjdCkNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQoNCkdyb3VwQTwtIFByb2plY3QgJT4lIGRwbHlyOjpzZWxlY3QoQTE6QTUsWS5UQikNCg0KIyBCdWlsZGluZyBhIHJlZ3Jlc3Npb24gbW9kZWwNCg0KbW9kZWxfQTwtbG0oWS5UQn4uLCBkYXRhPUdyb3VwQSkNCg0KTUE8LXN0ZXAobW9kZWxfQSxkaXJlY3Rpb24gPSAiYmFja3dhcmQiKSAjIFZhcmlhYmxlcyBzaG91bGQgYmUgc2VsZWN0ZWQgDQoNCnN1bW1hcnkoTUEpDQojIFNlbGVjdCBvbmx5IHNhdGlzZmllZCB2YXJpYWJsZXMgDQoNCkdyb3VwX0E8LUdyb3VwQSAlPiUgc2VsZWN0KEExLEEyLEE0LEE1KQ0KDQpNZWFuX0E8LXJvd01lYW5zKEdyb3VwX0EpDQpgYGANCg0KIyBDaG9vc2luZyBHcm91cCB2YXJpYWJsZSAoR3JvdXAgQikNCg0KYGBge3J9DQojIENob29zaW5nIHZhcmlhYmxlIEI2IHRvIEIxMA0KR3JvdXBCPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChCNjpCMTAsWS5UQikNCiMgUmVncmVzc2lvbiBtb2RlbCBmb3IgY2hvb3NpbmcgbWV0IHZhcmlhYmxlcyANCg0KbW9kZWxfQjwtbG0oWS5UQn4uLCBkYXRhPUdyb3VwQikNCg0KTUI8LXN0ZXAobW9kZWxfQixkaXJlY3Rpb24gPSAiYmFja3dhcmQiKSAjIFZhcmlhYmxlcyBzaG91bGQgYmUgc2VsZWN0ZWQgDQoNCnN1bW1hcnkoTUIpDQoNCiMgQ2hvb3NpbmcgdmFyaWFibGVzDQoNCkdyb3VwX0I8LUdyb3VwQiAlPiUgc2VsZWN0KEI2OkIxMCkNCg0KTWVhbl9CPC1yb3dNZWFucyhHcm91cF9CKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEMpDQoNCmBgYHtyfQ0KR3JvdXBDPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChDMTE6QzE0LFkuVEIpDQojIFJlZ3Jlc3Npb24gbW9kZWwNCg0KbW9kZWxfQzwtbG0oWS5UQn4uLCBkYXRhPUdyb3VwQykNCg0KTUM8LXN0ZXAobW9kZWxfQyxkaXJlY3Rpb24gPSAiYmFja3dhcmQiKSAjIFZhcmlhYmxlcyBzaG91bGQgYmUgc2VsZWN0ZWQgDQpzdW1tYXJ5KE1DKQ0KIyBDaG9vc2luZyB2YXJpYWJsZXMNCg0KR3JvdXBfQzwtR3JvdXBDICU+JSBzZWxlY3QoQzExOkMxNCkNCg0KTWVhbl9DPC1yb3dNZWFucyhHcm91cF9DKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEQpDQoNCmBgYHtyfQ0KR3JvdXBEPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChEMTU6RDE2LFkuVEIpDQojIE1vZGVsDQptb2RlbF9EPC1sbShZLlRCfi4sIGRhdGE9R3JvdXBEKQ0KDQpNRDwtc3RlcChtb2RlbF9ELGRpcmVjdGlvbiA9ICJiYWNrd2FyZCIpICMgVmFyaWFibGVzIHNob3VsZCBiZSBzZWxlY3RlZCANCg0Kc3VtbWFyeShNRCkNCiMgQ2hvb3NpbmcgdmFyaWFibGVzDQoNCkdyb3VwX0Q8LUdyb3VwRCAlPiUgc2VsZWN0KEQxNSkNCg0KTWVhbl9EPC1yb3dNZWFucyhHcm91cF9EKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEUpDQoNCmBgYHtyfQ0KR3JvdXBFPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChFMTc6RTIwLFkuVEIpDQojIE1vZGVsDQptb2RlbF9FPC1sbShZLlRCfi4sIGRhdGE9R3JvdXBFKQ0KDQpNRTwtc3RlcChtb2RlbF9FLGRpcmVjdGlvbiA9ICJiYWNrd2FyZCIpICMgVmFyaWFibGVzIHNob3VsZCBiZSBzZWxlY3RlZCANCg0Kc3VtbWFyeShNRSkNCiMgQ2hvb3NpbmcgdmFyaWFibGVzDQoNCkdyb3VwX0U8LUdyb3VwRSAlPiUgc2VsZWN0KEUxNzpFMjApDQoNCk1lYW5fRTwtcm93TWVhbnMoR3JvdXBfRSkNCmBgYA0KDQojIENob29zaW5nIEdyb3VwIHZhcmlhYmxlIChHcm91cCBGKQ0KDQpgYGB7cn0NCkdyb3VwRjwtIFByb2plY3QgJT4lIGRwbHlyOjpzZWxlY3QoRjIxOkYyMyxZLlRCKQ0KDQojIE1vZGVsDQptb2RlbF9GPC1sbShZLlRCfi4sIGRhdGE9R3JvdXBGKQ0KDQpNRjwtc3RlcChtb2RlbF9GLGRpcmVjdGlvbiA9ICJiYWNrd2FyZCIpICMgVmFyaWFibGVzIHNob3VsZCBiZSBzZWxlY3RlZCANCg0Kc3VtbWFyeShNRikNCiMgQ2hvb3NpbmcgdmFyaWFibGVzIA0KR3JvdXBfRjwtR3JvdXBGICU+JSBzZWxlY3QoRjIxLEYyMykNCg0KTWVhbl9GPC1yb3dNZWFucyhHcm91cF9GKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEcpDQoNCmBgYHtyfQ0KR3JvdXBHPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChHMjQ6RzI1LFkuVEIpDQojIE1vZGVsDQoNCm1vZGVsX0c8LWxtKFkuVEJ+LiwgZGF0YT1Hcm91cEcpDQoNCk1HPC1zdGVwKG1vZGVsX0csZGlyZWN0aW9uID0gImJhY2t3YXJkIikgIyBWYXJpYWJsZXMgc2hvdWxkIGJlIHNlbGVjdGVkIA0KDQpzdW1tYXJ5KE1HKQ0KIyBDaG9vc2luZyB2YXJpYWJsZXMNCkdyb3VwX0c8LUdyb3VwRyAlPiUgc2VsZWN0KEcyNSkNCg0KTWVhbl9HPC1yb3dNZWFucyhHcm91cF9HKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEgpDQoNCmBgYHtyfQ0KR3JvdXBIPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChIMjY6SDI3LFkuVEIpDQoNCiMgTW9kZWwNCg0KbW9kZWxfSDwtbG0oWS5UQn4uLCBkYXRhPUdyb3VwSCkNCg0KTUg8LXN0ZXAobW9kZWxfSCxkaXJlY3Rpb24gPSAiYmFja3dhcmQiKSAjIFZhcmlhYmxlcyBzaG91bGQgYmUgc2VsZWN0ZWQgDQoNCnN1bW1hcnkoTUgpDQojIENob29zaW5nIHZhcmlhYmxlcw0KDQpHcm91cF9IPC1Hcm91cEggJT4lIHNlbGVjdChIMjcpDQoNCk1lYW5fSDwtcm93TWVhbnMoR3JvdXBfSCkNCmBgYA0KIyBJdCBpcyBwcmVwcm9jZXNzZWQgdG8gZm9ybSBhIHJlYWR5IGRhdGFzZXQgZm9yIGFuYWx5c2lzIG9mIGluZmx1ZW5jaW5nIGZhY3RvcnMgdG8gbGFuZCBhY3F1aXNpdGlvbg0KDQpgYGB7cn0NClByb19maW5hbDwtZGF0YS5mcmFtZShNZWFuX0EsTWVhbl9CLE1lYW5fQyxNZWFuX0QsTWVhbl9FLE1lYW5fRixNZWFuX0csTWVhbl9ILCBZX21lYW49UHJvamVjdCRZLlRCKQ0KDQpoZWFkKFByb19maW5hbCkNCiMgRml0dGluZyBtb2RlbA0KDQptb2RlbF9maW5hbDwtbG0oWV9tZWFufi4sIGRhdGE9UHJvX2ZpbmFsKQ0KIyBMb2FkaW5nIHZhcmlhYmxlIGltcG9ydGFuY2UgcGFja2FnZSANCmxpYnJhcnkocmVsYWltcG8pDQoNClZhcmlhYmxlX0ltcG9ydGFuY2U8LWNhbGMucmVsaW1wKG1vZGVsX2ZpbmFsLHR5cGU9YygibG1nIikscmVsYT1UKQ0KDQpWYXJpYWJsZV9JbXBvcnRhbmNlDQpgYGANCg0K