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
[37m-- [1mAttaching packages[22m --------------------------------------- tidyverse 1.2.1 --[39m
[37m[32mv[37m [34mggplot2[37m 3.2.1 [32mv[37m [34mpurrr [37m 0.3.2
[32mv[37m [34mtibble [37m 2.1.3 [32mv[37m [34mdplyr [37m 0.8.1
[32mv[37m [34mtidyr [37m 0.8.3 [32mv[37m [34mstringr[37m 1.4.0
[32mv[37m [34mreadr [37m 1.3.1 [32mv[37m [34mforcats[37m 0.4.0[39m
[37m-- [1mConflicts[22m ------------------------------------------ tidyverse_conflicts() --
[31mx[37m [34mdplyr[37m::[32mfilter()[37m masks [34mstats[37m::filter()
[31mx[37m [34mdplyr[37m::[32mlag()[37m masks [34mstats[37m::lag()[39m
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)
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQojIFNldCB3b3JraW5nIGRpcmVjdG9yeSANCg0KYGBge3J9DQpzZXR3ZCgiQzovVXNlcnMvQWRtaW4vRGVza3RvcC9UaGF5X1NvbiIpDQoNCmxpYnJhcnkod3JpdGV4bCkNCmBgYA0KDQoNCiMgSG9hbmcgVmFuIFRodQ0KDQpgYGB7cn0NCkhWVDwtcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90dXllbmhhdmFuL0xhbmQtUmVsb2NhdGlvbi1TdXJ2ZXktRGF0YS9tYXN0ZXIvSFZUX0RlYy5jc3YiLHNlcD0iLCIpDQoNCmhlYWQoSFZUKQ0KDQpkaW0oSFZUKQ0KDQpgYGANCg0KIyBCYWMgU09uIEtlbyBEYWkNCg0KYGBge3J9DQpCU19LRDwtcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90dXllbmhhdmFuL0xhbmQtUmVsb2NhdGlvbi1TdXJ2ZXktRGF0YS9tYXN0ZXIvQlNfS0RfRGVjLmNzdiIsc2VwPSIsIikNCg0KaGVhZChCU19LRCkNCg0KZGltKEJTX0tEKQ0KDQpgYGANCiMgRHVvbmcgVmlldCBCYWMgLSBRdWFuZyBUcnVuZyAtIERvbmcgUXVhbmcNCg0KYGBge3J9DQpRVF9EUTwtcmVhZC5jc3YoImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS90dXllbmhhdmFuL0xhbmQtUmVsb2NhdGlvbi1TdXJ2ZXktRGF0YS9tYXN0ZXIvUVRfRFFfRGVjLmNzdiIsaGVhZGVyID0gVCxzZXA9IiwiKQ0KDQpoZWFkKFFUX0RRKQ0KDQpkaW0oUVRfRFEpDQpgYGANCg0KIyBUdWMgRHV5ZW4gDQoNCmBgYHtyfQ0KVEQ8LXJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdHV5ZW5oYXZhbi9MYW5kLVJlbG9jYXRpb24tU3VydmV5LURhdGEvbWFzdGVyL1REX0RlYy5jc3YiLHNlcD0iLCIpDQoNCmhlYWQoVEQpDQoNCmRpbShURCkNCg0KYGBgDQoNCiMgUGhhbiBEaW5oIFBodW5nDQoNCmBgYHtyfQ0KUERQPC1yZWFkLmNzdigiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3R1eWVuaGF2YW4vTGFuZC1SZWxvY2F0aW9uLVN1cnZleS1EYXRhL21hc3Rlci9QRFBfRGVjLmNzdiIsc2VwPSIsIikNCg0KaGVhZChQRFApDQoNCmRpbShQRFApDQpgYGANCg0KIyBQdXQgYWxsIGRhdGFzZXRzIGluIG9uZSBjb250YWluZXIgDQoNCmBgYHtyfQ0KUHJvamVjdDE8LXJiaW5kKEhWVCxCU19LRCxRVF9EUSxURCxQRFApDQoNCmhlYWQoUHJvamVjdDEpDQoNCmRpbShQcm9qZWN0MSkNCiMgV3JpdGUgeGxzeCBmaWxlDQoNCnNldHdkKCJDOi9Vc2Vycy9BZG1pbi9EZXNrdG9wL1RoYXlfU29uIikNCg0KbGlicmFyeSh3cml0ZXhsKQ0KDQp3cml0ZV94bHN4KFByb2plY3QxLCAiRmluYWwxLnhsc3giKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEEpDQoNCmBgYHtyfQ0KbGlicmFyeShyZWFkeGwpDQoNClByb2plY3Q8LXJlYWRfeGxzeCgiRmluYWwueGxzeCIpDQoNCmhlYWQoUHJvamVjdCkNCg0KbGlicmFyeSh0aWR5dmVyc2UpDQoNCkdyb3VwQTwtIFByb2plY3QgJT4lIGRwbHlyOjpzZWxlY3QoQTE6QTUsWS5UQikNCg0KIyBCdWlsZGluZyBhIHJlZ3Jlc3Npb24gbW9kZWwNCg0KbW9kZWxfQTwtbG0oWS5UQn4uLCBkYXRhPUdyb3VwQSkNCg0KTUE8LXN0ZXAobW9kZWxfQSxkaXJlY3Rpb24gPSAiYmFja3dhcmQiKSAjIFZhcmlhYmxlcyBzaG91bGQgYmUgc2VsZWN0ZWQgDQoNCnN1bW1hcnkoTUEpDQojIFNlbGVjdCBvbmx5IHNhdGlzZmllZCB2YXJpYWJsZXMgDQoNCkdyb3VwX0E8LUdyb3VwQSAlPiUgc2VsZWN0KEExLEEyLEE0LEE1KQ0KDQpNZWFuX0E8LXJvd01lYW5zKEdyb3VwX0EpDQpgYGANCg0KIyBDaG9vc2luZyBHcm91cCB2YXJpYWJsZSAoR3JvdXAgQikNCg0KYGBge3J9DQojIENob29zaW5nIHZhcmlhYmxlIEI2IHRvIEIxMA0KR3JvdXBCPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChCNjpCMTAsWS5UQikNCiMgUmVncmVzc2lvbiBtb2RlbCBmb3IgY2hvb3NpbmcgbWV0IHZhcmlhYmxlcyANCg0KbW9kZWxfQjwtbG0oWS5UQn4uLCBkYXRhPUdyb3VwQikNCg0KTUI8LXN0ZXAobW9kZWxfQixkaXJlY3Rpb24gPSAiYmFja3dhcmQiKSAjIFZhcmlhYmxlcyBzaG91bGQgYmUgc2VsZWN0ZWQgDQoNCnN1bW1hcnkoTUIpDQoNCiMgQ2hvb3NpbmcgdmFyaWFibGVzDQoNCkdyb3VwX0I8LUdyb3VwQiAlPiUgc2VsZWN0KEI2OkIxMCkNCg0KTWVhbl9CPC1yb3dNZWFucyhHcm91cF9CKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEMpDQoNCmBgYHtyfQ0KR3JvdXBDPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChDMTE6QzE0LFkuVEIpDQojIFJlZ3Jlc3Npb24gbW9kZWwNCg0KbW9kZWxfQzwtbG0oWS5UQn4uLCBkYXRhPUdyb3VwQykNCg0KTUM8LXN0ZXAobW9kZWxfQyxkaXJlY3Rpb24gPSAiYmFja3dhcmQiKSAjIFZhcmlhYmxlcyBzaG91bGQgYmUgc2VsZWN0ZWQgDQpzdW1tYXJ5KE1DKQ0KIyBDaG9vc2luZyB2YXJpYWJsZXMNCg0KR3JvdXBfQzwtR3JvdXBDICU+JSBzZWxlY3QoQzExOkMxNCkNCg0KTWVhbl9DPC1yb3dNZWFucyhHcm91cF9DKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEQpDQoNCmBgYHtyfQ0KR3JvdXBEPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChEMTU6RDE2LFkuVEIpDQojIE1vZGVsDQptb2RlbF9EPC1sbShZLlRCfi4sIGRhdGE9R3JvdXBEKQ0KDQpNRDwtc3RlcChtb2RlbF9ELGRpcmVjdGlvbiA9ICJiYWNrd2FyZCIpICMgVmFyaWFibGVzIHNob3VsZCBiZSBzZWxlY3RlZCANCg0Kc3VtbWFyeShNRCkNCiMgQ2hvb3NpbmcgdmFyaWFibGVzDQoNCkdyb3VwX0Q8LUdyb3VwRCAlPiUgc2VsZWN0KEQxNSkNCg0KTWVhbl9EPC1yb3dNZWFucyhHcm91cF9EKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEUpDQoNCmBgYHtyfQ0KR3JvdXBFPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChFMTc6RTIwLFkuVEIpDQojIE1vZGVsDQptb2RlbF9FPC1sbShZLlRCfi4sIGRhdGE9R3JvdXBFKQ0KDQpNRTwtc3RlcChtb2RlbF9FLGRpcmVjdGlvbiA9ICJiYWNrd2FyZCIpICMgVmFyaWFibGVzIHNob3VsZCBiZSBzZWxlY3RlZCANCg0Kc3VtbWFyeShNRSkNCiMgQ2hvb3NpbmcgdmFyaWFibGVzDQoNCkdyb3VwX0U8LUdyb3VwRSAlPiUgc2VsZWN0KEUxNzpFMjApDQoNCk1lYW5fRTwtcm93TWVhbnMoR3JvdXBfRSkNCmBgYA0KDQojIENob29zaW5nIEdyb3VwIHZhcmlhYmxlIChHcm91cCBGKQ0KDQpgYGB7cn0NCkdyb3VwRjwtIFByb2plY3QgJT4lIGRwbHlyOjpzZWxlY3QoRjIxOkYyMyxZLlRCKQ0KDQojIE1vZGVsDQptb2RlbF9GPC1sbShZLlRCfi4sIGRhdGE9R3JvdXBGKQ0KDQpNRjwtc3RlcChtb2RlbF9GLGRpcmVjdGlvbiA9ICJiYWNrd2FyZCIpICMgVmFyaWFibGVzIHNob3VsZCBiZSBzZWxlY3RlZCANCg0Kc3VtbWFyeShNRikNCiMgQ2hvb3NpbmcgdmFyaWFibGVzIA0KR3JvdXBfRjwtR3JvdXBGICU+JSBzZWxlY3QoRjIxLEYyMykNCg0KTWVhbl9GPC1yb3dNZWFucyhHcm91cF9GKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEcpDQoNCmBgYHtyfQ0KR3JvdXBHPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChHMjQ6RzI1LFkuVEIpDQojIE1vZGVsDQoNCm1vZGVsX0c8LWxtKFkuVEJ+LiwgZGF0YT1Hcm91cEcpDQoNCk1HPC1zdGVwKG1vZGVsX0csZGlyZWN0aW9uID0gImJhY2t3YXJkIikgIyBWYXJpYWJsZXMgc2hvdWxkIGJlIHNlbGVjdGVkIA0KDQpzdW1tYXJ5KE1HKQ0KIyBDaG9vc2luZyB2YXJpYWJsZXMNCkdyb3VwX0c8LUdyb3VwRyAlPiUgc2VsZWN0KEcyNSkNCg0KTWVhbl9HPC1yb3dNZWFucyhHcm91cF9HKQ0KYGBgDQoNCiMgQ2hvb3NpbmcgR3JvdXAgdmFyaWFibGUgKEdyb3VwIEgpDQoNCmBgYHtyfQ0KR3JvdXBIPC0gUHJvamVjdCAlPiUgZHBseXI6OnNlbGVjdChIMjY6SDI3LFkuVEIpDQoNCiMgTW9kZWwNCg0KbW9kZWxfSDwtbG0oWS5UQn4uLCBkYXRhPUdyb3VwSCkNCg0KTUg8LXN0ZXAobW9kZWxfSCxkaXJlY3Rpb24gPSAiYmFja3dhcmQiKSAjIFZhcmlhYmxlcyBzaG91bGQgYmUgc2VsZWN0ZWQgDQoNCnN1bW1hcnkoTUgpDQojIENob29zaW5nIHZhcmlhYmxlcw0KDQpHcm91cF9IPC1Hcm91cEggJT4lIHNlbGVjdChIMjcpDQoNCk1lYW5fSDwtcm93TWVhbnMoR3JvdXBfSCkNCmBgYA0KIyBJdCBpcyBwcmVwcm9jZXNzZWQgdG8gZm9ybSBhIHJlYWR5IGRhdGFzZXQgZm9yIGFuYWx5c2lzIG9mIGluZmx1ZW5jaW5nIGZhY3RvcnMgdG8gbGFuZCBhY3F1aXNpdGlvbg0KDQpgYGB7cn0NClByb19maW5hbDwtZGF0YS5mcmFtZShNZWFuX0EsTWVhbl9CLE1lYW5fQyxNZWFuX0QsTWVhbl9FLE1lYW5fRixNZWFuX0csTWVhbl9ILCBZX21lYW49UHJvamVjdCRZLlRCKQ0KDQpoZWFkKFByb19maW5hbCkNCiMgRml0dGluZyBtb2RlbA0KDQptb2RlbF9maW5hbDwtbG0oWV9tZWFufi4sIGRhdGE9UHJvX2ZpbmFsKQ0KIyBMb2FkaW5nIHZhcmlhYmxlIGltcG9ydGFuY2UgcGFja2FnZSANCmxpYnJhcnkocmVsYWltcG8pDQoNClZhcmlhYmxlX0ltcG9ydGFuY2U8LWNhbGMucmVsaW1wKG1vZGVsX2ZpbmFsLHR5cGU9YygibG1nIikscmVsYT1UKQ0KDQpWYXJpYWJsZV9JbXBvcnRhbmNlDQpgYGANCg0K