diff --git a/submissions/FinalRExercise_LionGlenysCharity.Rmd b/submissions/FinalRExercise_LionGlenysCharity.Rmd new file mode 100644 index 0000000..5e83580 --- /dev/null +++ b/submissions/FinalRExercise_LionGlenysCharity.Rmd @@ -0,0 +1,144 @@ +--- +title: "Bootcamp Final Exercise" +output: html_notebook +--- + + +```{r} +library(tidyverse) +library(here) +library(reshape2) + +nys_school <- read.csv("data/nys_schools.csv") +nys_acs <- read.csv("data/nys_acs.csv") +``` + +```{r} +head(nys_school) +``` + +```{r} +head(nys_acs) +``` + +```{r} +str(nys_school) +``` + +```{r} +str(nys_acs) +``` + + +```{r} +summary(nys_school) +``` +total_enroll, mean_ela_score, mean_math_score -> positive value, but the minimum value -> -99 (Missing value) +per_free_lunch, per_reduced_lunch, per_lep -> should be ratio, but the minimum value -> -99 (Missing values) + +```{r} +summary(nys_acs) +``` +county_per_poverty, country_per_batch -> ratio +median_household_income -> integer + +```{r} +colSums(is.na(nys_school)) +``` + +```{r} +colSums(is.na(nys_acs)) +``` + +No NA values, just -99 as the missing values + +Variables with missing values -> total_enroll, mean_ela_score, mean_math_score, per_free_lunch, per_reduced_lunch, per_lep + +Dealing with missing values -> set it to NA for the -99 +```{r} +nys_school[nys_school == -99] <- NA +summary(nys_school) +``` + +```{r} +head(nys_acs) +``` +```{r} +boxplot(county_per_poverty ~ year, data = nys_acs, + main = "Income Distribution by year", + xlab = "Year", + ylab = "Income", + las = 2) # Adjust label size if there are many counties +``` +Based on the distribution -> it looks like within a year, most of the distribution lie on a simillar value. Set Low -> Less than 0.07, Medium [0.07, 0.17], High (>0,17) + +```{r} +nys_acs_with_county_level <- nys_acs %>% + mutate(county_level = case_when( + county_per_poverty < 0.07 ~ "Low", + county_per_poverty >= 0.07 & county_per_poverty <= 0.17 ~ "Medium", + county_per_poverty > 0.17 ~ "High" + ) + ) +``` + +Task 3.3 +```{r} +scores_std <- nys_school %>% + select(year, contains("score")) %>% + group_by(year) %>% + summarize(all_mean_ela = mean(mean_ela_score, na.rm=TRUE), + all_mean_math = mean(mean_math_score, na.rm=TRUE), + all_sd_ela = sd(mean_ela_score, na.rm=TRUE), + all_sd_math = sd(mean_math_score, na.rm=TRUE)) +``` + +```{r} +with_all_value <- inner_join(nys_school, scores_std, by = 'year') +std_school <- mutate(with_all_value, + z_score_ela = (mean_ela_score-all_mean_ela)/all_sd_ela, + z_score_math = (mean_math_score-all_mean_math)/all_sd_math) +``` + +```{r} +head(nys_acs_with_county_level) +``` + +```{r} +join_data <- inner_join(std_school, nys_acs_with_county_level, by = c('county_name', 'year')) +head(join_data) +``` + +```{r} +summary_data <- join_data %>% + group_by(year, county_level) %>% + summarize(mean_ela = mean(z_score_ela, na.rm = TRUE), + mean_math = mean(z_score_math, na.rm = TRUE)) + +ggplot(summary_data, aes(x = year, y = mean_ela, color = county_level, group = county_level)) + + geom_line() + + geom_point() + + labs( + title = "Trend of Average ELA Scores by County Poverty Level", + x = "Year", + y = "Average ELA Score", + color = "County Poverty Level" + ) + + scale_color_brewer(palette = "Dark2") + + theme_minimal() +``` + +```{r} +ggplot(summary_data, aes(x = year, y = mean_math, color = county_level, group = county_level)) + + geom_line() + + geom_point() + + labs( + title = "Trend of Average Math Scores by County Poverty Level", + x = "Year", + y = "Average Math Score", + color = "County Poverty Level" + ) + + scale_color_brewer(palette = "Dark2") + + theme_minimal() +``` + diff --git a/submissions/FinalRExercise_LionGlenysCharity.nb.html b/submissions/FinalRExercise_LionGlenysCharity.nb.html new file mode 100644 index 0000000..ae0006f --- /dev/null +++ b/submissions/FinalRExercise_LionGlenysCharity.nb.html @@ -0,0 +1,2142 @@ + + + + + + + + + + + + + +Bootcamp Final Exercise + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
library(tidyverse)
+library(here)
+library(reshape2)
+
+nys_school <- read.csv("data/nys_schools.csv")
+nys_acs <- read.csv("data/nys_acs.csv")
+ + + + + + +
head(nys_school)
+ + +
+ +
+ + + + + + +
+ +
+ + + + + + +
str(nys_school)
+
+ + +
'data.frame':   35663 obs. of  12 variables:
+ $ school_cd        : num  1.01e+10 1.01e+10 1.01e+10 1.01e+10 1.01e+10 ...
+ $ school_name      : chr  "MONTESSORI MAGNET SCHOOL" "MONTESSORI MAGNET SCHOOL" "MONTESSORI MAGNET SCHOOL" "MONTESSORI MAGNET SCHOOL" ...
+ $ district_name    : chr  "ALBANY CITY SCHOOL DISTRICT" "ALBANY CITY SCHOOL DISTRICT" "ALBANY CITY SCHOOL DISTRICT" "ALBANY CITY SCHOOL DISTRICT" ...
+ $ county_name      : chr  "ALBANY" "ALBANY" "ALBANY" "ALBANY" ...
+ $ region           : chr  "CAPITAL DISTRICT" "CAPITAL DISTRICT" "CAPITAL DISTRICT" "CAPITAL DISTRICT" ...
+ $ year             : int  2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 ...
+ $ total_enroll     : num  316 312 300 326 294 321 335 347 366 359 ...
+ $ per_free_lunch   : num  0.33 0.32 0.26 0.22 0.31 0.25 0.35 0.22 0.29 0.26 ...
+ $ per_reduced_lunch: num  0.1 0.08 0.08 0.07 0.06 0.08 0.04 0 0.02 0.01 ...
+ $ per_lep          : num  0.01 0.02 0.03 0.03 0.03 0.03 0.06 0.06 0.05 0.07 ...
+ $ mean_ela_score   : num  658 673 670 667 670 ...
+ $ mean_math_score  : num  670 679 683 681 687 ...
+ + + + + + +
str(nys_acs)
+
+ + +
'data.frame':   496 obs. of  5 variables:
+ $ county_name            : chr  "ALBANY" "ALBANY" "ALBANY" "ALBANY" ...
+ $ year                   : int  2009 2010 2011 2012 2013 2014 2015 2016 2009 2010 ...
+ $ county_per_poverty     : num  0.118 0.119 0.121 0.124 0.123 ...
+ $ median_household_income: int  55350 56090 57715 59359 59394 59940 59887 60904 40917 41305 ...
+ $ county_per_bach        : num  0.19 0.197 0.199 0.198 0.205 ...
+ + + + + + +
summary(nys_school)
+
+ + +
   school_cd         school_name        district_name      county_name           region               year     
+ Min.   :1.010e+10   Length:35663       Length:35663       Length:35663       Length:35663       Min.   :2008  
+ 1st Qu.:2.802e+11   Class :character   Class :character   Class :character   Class :character   1st Qu.:2010  
+ Median :3.317e+11   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Median :2013  
+ Mean   :3.568e+11                                                                               Mean   :2013  
+ 3rd Qu.:4.725e+11                                                                               3rd Qu.:2015  
+ Max.   :6.808e+11                                                                               Max.   :2017  
+  total_enroll    per_free_lunch     per_reduced_lunch      per_lep          mean_ela_score  mean_math_score
+ Min.   : -99.0   Min.   :-99.0000   Min.   :-99.00000   Min.   :-99.00000   Min.   :-99.0   Min.   :-99.0  
+ 1st Qu.: 339.0   1st Qu.:  0.1900   1st Qu.:  0.03000   1st Qu.:  0.00000   1st Qu.:296.0   1st Qu.:298.0  
+ Median : 469.0   Median :  0.4200   Median :  0.06000   Median :  0.03000   Median :324.2   Median :330.8  
+ Mean   : 523.6   Mean   :  0.4188   Mean   :  0.02852   Mean   :  0.04124   Mean   :447.1   Mean   :456.0  
+ 3rd Qu.: 648.0   3rd Qu.:  0.7200   3rd Qu.:  0.10000   3rd Qu.:  0.11000   3rd Qu.:666.3   3rd Qu.:683.5  
+ Max.   :2347.0   Max.   :257.0000   Max.   : 53.00000   Max.   :  1.00000   Max.   :720.8   Max.   :738.7  
+ + + +

total_enroll, mean_ela_score, mean_math_score -> positive value, +but the minimum value -> -99 (Missing value) per_free_lunch, +per_reduced_lunch, per_lep -> should be ratio, but the minimum value +-> -99 (Missing values)

+ + + +
summary(nys_acs)
+
+ + +
 county_name             year      county_per_poverty median_household_income county_per_bach  
+ Length:496         Min.   :2009   Min.   :0.04689    Min.   : 33794          Min.   :0.07574  
+ Class :character   1st Qu.:2011   1st Qu.:0.10903    1st Qu.: 46347          1st Qu.:0.11018  
+ Mode  :character   Median :2012   Median :0.12884    Median : 50134          Median :0.13169  
+                    Mean   :2012   Mean   :0.13085    Mean   : 54116          Mean   :0.14410  
+                    3rd Qu.:2014   3rd Qu.:0.14929    3rd Qu.: 56448          3rd Qu.:0.17431  
+                    Max.   :2016   Max.   :0.29935    Max.   :102044          Max.   :0.31795  
+ + + +

county_per_poverty, country_per_batch -> ratio +median_household_income -> integer

+ + + +
colSums(is.na(nys_school))
+
+ + +
        school_cd       school_name     district_name       county_name            region              year 
+                0                 0                 0                 0                 0                 0 
+     total_enroll    per_free_lunch per_reduced_lunch           per_lep    mean_ela_score   mean_math_score 
+                0                 0                 0                 0                 0                 0 
+ + + + + + +
colSums(is.na(nys_acs))
+
+ + +
            county_name                    year      county_per_poverty median_household_income         county_per_bach 
+                      0                       0                       0                       0                       0 
+ + + +

No NA values, just -99 as the missing values

+

Variables with missing values -> total_enroll, mean_ela_score, +mean_math_score, per_free_lunch, per_reduced_lunch, per_lep

+

Dealing with missing values -> set it to NA for the -99

+ + + +
summary(nys_school)
+
+ + +
   school_cd         school_name        district_name      county_name           region               year     
+ Min.   :1.010e+10   Length:35663       Length:35663       Length:35663       Length:35663       Min.   :2008  
+ 1st Qu.:2.802e+11   Class :character   Class :character   Class :character   Class :character   1st Qu.:2010  
+ Median :3.317e+11   Mode  :character   Mode  :character   Mode  :character   Mode  :character   Median :2013  
+ Mean   :3.568e+11                                                                               Mean   :2013  
+ 3rd Qu.:4.725e+11                                                                               3rd Qu.:2015  
+ Max.   :6.808e+11                                                                               Max.   :2017  
+                                                                                                               
+  total_enroll    per_free_lunch     per_reduced_lunch     per_lep        mean_ela_score  mean_math_score
+ Min.   :   3.0   Min.   :  0.0000   Min.   : 0.00000   Min.   :0.00000   Min.   :191.0   Min.   :213.0  
+ 1st Qu.: 339.0   1st Qu.:  0.1900   1st Qu.: 0.03000   1st Qu.:0.00000   1st Qu.:300.0   1st Qu.:303.0  
+ Median : 469.0   Median :  0.4200   Median : 0.06000   Median :0.03000   Median :347.3   Median :361.0  
+ Mean   : 523.8   Mean   :  0.4606   Mean   : 0.07019   Mean   :0.07736   Mean   :483.2   Mean   :492.7  
+ 3rd Qu.: 648.0   3rd Qu.:  0.7225   3rd Qu.: 0.10000   3rd Qu.:0.11000   3rd Qu.:667.3   3rd Qu.:684.7  
+ Max.   :2347.0   Max.   :257.0000   Max.   :53.00000   Max.   :1.00000   Max.   :720.8   Max.   :738.7  
+ NA's   :13       NA's   :15         NA's   :15         NA's   :13        NA's   :2208    NA's   :2210   
+ + + + + + +
+ +
+ + + + +
boxplot(county_per_poverty ~ year, data = nys_acs,
+        main = "Income Distribution by year",
+        xlab = "Year",
+        ylab = "Income",
+        las = 2)  # Adjust label size if there are many counties
+ + +

+ + + +

Based on the distribution -> it looks like within a year, most of +the distribution lie on a simillar value. Set Low -> Less than 0.07, +Medium [0.07, 0.17], High (>0,17)

+ + + +
nys_acs_with_county_level <- nys_acs %>%
+  mutate(county_level = case_when(
+      county_per_poverty < 0.07 ~ "Low",
+      county_per_poverty >= 0.07 & county_per_poverty <= 0.17 ~ "Medium",
+      county_per_poverty > 0.17 ~ "High"
+    )
+  )
+ + + +

Task 3.3

+ + + +
scores_std <- nys_school %>%
+  select(year, contains("score")) %>%
+  group_by(year) %>%
+  summarize(all_mean_ela = mean(mean_ela_score, na.rm=TRUE),
+            all_mean_math = mean(mean_math_score, na.rm=TRUE),
+            all_sd_ela = sd(mean_ela_score, na.rm=TRUE),
+            all_sd_math = sd(mean_math_score, na.rm=TRUE))
+ + + + + + +
with_all_value <- inner_join(nys_school, scores_std, by = 'year')
+std_school <- mutate(with_all_value,
+                     z_score_ela = (mean_ela_score-all_mean_ela)/all_sd_ela,
+                     z_score_math = (mean_math_score-all_mean_math)/all_sd_math)
+ + + + + + +
head(nys_acs_with_county_level)
+ + +
+ +
+ + + + + + +
join_data <- inner_join(std_school, nys_acs_with_county_level, by = c('county_name', 'year'))
+head(join_data)
+ + +
+ +
+ + + + + + +
summary_data <- join_data %>%
+  group_by(year, county_level) %>%
+  summarize(mean_ela = mean(z_score_ela, na.rm = TRUE),
+            mean_math = mean(z_score_math, na.rm = TRUE))
+ + +
`summarise()` has grouped output by 'year'. You can override using the `.groups` argument.
+ + +
ggplot(summary_data, aes(x = year, y = mean_ela, color = county_level, group = county_level)) +
+  geom_line() +
+  geom_point() +
+  labs(
+    title = "Trend of Average ELA Scores by County Poverty Level",
+    x = "Year",
+    y = "Average ELA Score",
+    color = "County Poverty Level"
+  ) +
+  scale_color_brewer(palette = "Dark2") +
+  theme_minimal()
+
+ + +

+ + + + + + +
ggplot(summary_data, aes(x = year, y = mean_math, color = county_level, group = county_level)) +
+  geom_line() +
+  geom_point() +
+  labs(
+    title = "Trend of Average Math Scores by County Poverty Level",
+    x = "Year",
+    y = "Average Math Score",
+    color = "County Poverty Level"
+  ) +
+  scale_color_brewer(palette = "Dark2") +
+  theme_minimal()
+ + +

+ + + + + +
LS0tCnRpdGxlOiAiQm9vdGNhbXAgRmluYWwgRXhlcmNpc2UiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KCgpgYGB7cn0KbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkoaGVyZSkKbGlicmFyeShyZXNoYXBlMikKCm55c19zY2hvb2wgPC0gcmVhZC5jc3YoImRhdGEvbnlzX3NjaG9vbHMuY3N2IikKbnlzX2FjcyA8LSByZWFkLmNzdigiZGF0YS9ueXNfYWNzLmNzdiIpCmBgYAoKYGBge3J9CmhlYWQobnlzX3NjaG9vbCkKYGBgCgpgYGB7cn0KaGVhZChueXNfYWNzKQpgYGAKCmBgYHtyfQpzdHIobnlzX3NjaG9vbCkKYGBgCgpgYGB7cn0Kc3RyKG55c19hY3MpCmBgYAoKCmBgYHtyfQpzdW1tYXJ5KG55c19zY2hvb2wpCmBgYAp0b3RhbF9lbnJvbGwsIG1lYW5fZWxhX3Njb3JlLCBtZWFuX21hdGhfc2NvcmUgLT4gcG9zaXRpdmUgdmFsdWUsIGJ1dCB0aGUgbWluaW11bSB2YWx1ZSAtPiAtOTkgKE1pc3NpbmcgdmFsdWUpCnBlcl9mcmVlX2x1bmNoLCBwZXJfcmVkdWNlZF9sdW5jaCwgcGVyX2xlcCAtPiBzaG91bGQgYmUgcmF0aW8sIGJ1dCB0aGUgbWluaW11bSB2YWx1ZSAtPiAtOTkgKE1pc3NpbmcgdmFsdWVzKQoKYGBge3J9CnN1bW1hcnkobnlzX2FjcykKYGBgCmNvdW50eV9wZXJfcG92ZXJ0eSwgY291bnRyeV9wZXJfYmF0Y2ggLT4gcmF0aW8KbWVkaWFuX2hvdXNlaG9sZF9pbmNvbWUgLT4gaW50ZWdlcgoKYGBge3J9CmNvbFN1bXMoaXMubmEobnlzX3NjaG9vbCkpCmBgYAoKYGBge3J9CmNvbFN1bXMoaXMubmEobnlzX2FjcykpCmBgYAoKTm8gTkEgdmFsdWVzLCBqdXN0IC05OSBhcyB0aGUgbWlzc2luZyB2YWx1ZXMKClZhcmlhYmxlcyB3aXRoIG1pc3NpbmcgdmFsdWVzIC0+IHRvdGFsX2Vucm9sbCwgbWVhbl9lbGFfc2NvcmUsIG1lYW5fbWF0aF9zY29yZSwgcGVyX2ZyZWVfbHVuY2gsIHBlcl9yZWR1Y2VkX2x1bmNoLCBwZXJfbGVwCgpEZWFsaW5nIHdpdGggbWlzc2luZyB2YWx1ZXMgLT4gc2V0IGl0IHRvIE5BIGZvciB0aGUgLTk5CmBgYHtyfQpueXNfc2Nob29sW255c19zY2hvb2wgPT0gLTk5XSA8LSBOQQpzdW1tYXJ5KG55c19zY2hvb2wpCmBgYAoKYGBge3J9CmhlYWQobnlzX2FjcykKYGBgCmBgYHtyfQpib3hwbG90KGNvdW50eV9wZXJfcG92ZXJ0eSB+IHllYXIsIGRhdGEgPSBueXNfYWNzLAogICAgICAgIG1haW4gPSAiSW5jb21lIERpc3RyaWJ1dGlvbiBieSB5ZWFyIiwKICAgICAgICB4bGFiID0gIlllYXIiLAogICAgICAgIHlsYWIgPSAiSW5jb21lIiwKICAgICAgICBsYXMgPSAyKSAgIyBBZGp1c3QgbGFiZWwgc2l6ZSBpZiB0aGVyZSBhcmUgbWFueSBjb3VudGllcwpgYGAKQmFzZWQgb24gdGhlIGRpc3RyaWJ1dGlvbiAtPiBpdCBsb29rcyBsaWtlIHdpdGhpbiBhIHllYXIsIG1vc3Qgb2YgdGhlIGRpc3RyaWJ1dGlvbiBsaWUgb24gYSBzaW1pbGxhciB2YWx1ZS4gU2V0IExvdyAtPiBMZXNzIHRoYW4gMC4wNywgTWVkaXVtIFswLjA3LCAwLjE3XSwgSGlnaCAoPjAsMTcpCgpgYGB7cn0KbnlzX2Fjc193aXRoX2NvdW50eV9sZXZlbCA8LSBueXNfYWNzICU+JQogIG11dGF0ZShjb3VudHlfbGV2ZWwgPSBjYXNlX3doZW4oCiAgICAgIGNvdW50eV9wZXJfcG92ZXJ0eSA8IDAuMDcgfiAiTG93IiwKICAgICAgY291bnR5X3Blcl9wb3ZlcnR5ID49IDAuMDcgJiBjb3VudHlfcGVyX3BvdmVydHkgPD0gMC4xNyB+ICJNZWRpdW0iLAogICAgICBjb3VudHlfcGVyX3BvdmVydHkgPiAwLjE3IH4gIkhpZ2giCiAgICApCiAgKQpgYGAKClRhc2sgMy4zCmBgYHtyfQpzY29yZXNfc3RkIDwtIG55c19zY2hvb2wgJT4lCiAgc2VsZWN0KHllYXIsIGNvbnRhaW5zKCJzY29yZSIpKSAlPiUKICBncm91cF9ieSh5ZWFyKSAlPiUKICBzdW1tYXJpemUoYWxsX21lYW5fZWxhID0gbWVhbihtZWFuX2VsYV9zY29yZSwgbmEucm09VFJVRSksCiAgICAgICAgICAgIGFsbF9tZWFuX21hdGggPSBtZWFuKG1lYW5fbWF0aF9zY29yZSwgbmEucm09VFJVRSksCiAgICAgICAgICAgIGFsbF9zZF9lbGEgPSBzZChtZWFuX2VsYV9zY29yZSwgbmEucm09VFJVRSksCiAgICAgICAgICAgIGFsbF9zZF9tYXRoID0gc2QobWVhbl9tYXRoX3Njb3JlLCBuYS5ybT1UUlVFKSkKYGBgCgpgYGB7cn0Kd2l0aF9hbGxfdmFsdWUgPC0gaW5uZXJfam9pbihueXNfc2Nob29sLCBzY29yZXNfc3RkLCBieSA9ICd5ZWFyJykKc3RkX3NjaG9vbCA8LSBtdXRhdGUod2l0aF9hbGxfdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgIHpfc2NvcmVfZWxhID0gKG1lYW5fZWxhX3Njb3JlLWFsbF9tZWFuX2VsYSkvYWxsX3NkX2VsYSwKICAgICAgICAgICAgICAgICAgICAgel9zY29yZV9tYXRoID0gKG1lYW5fbWF0aF9zY29yZS1hbGxfbWVhbl9tYXRoKS9hbGxfc2RfbWF0aCkKYGBgCgpgYGB7cn0KaGVhZChueXNfYWNzX3dpdGhfY291bnR5X2xldmVsKQpgYGAKCmBgYHtyfQpqb2luX2RhdGEgPC0gaW5uZXJfam9pbihzdGRfc2Nob29sLCBueXNfYWNzX3dpdGhfY291bnR5X2xldmVsLCBieSA9IGMoJ2NvdW50eV9uYW1lJywgJ3llYXInKSkKaGVhZChqb2luX2RhdGEpCmBgYAoKYGBge3J9CnN1bW1hcnlfZGF0YSA8LSBqb2luX2RhdGEgJT4lCiAgZ3JvdXBfYnkoeWVhciwgY291bnR5X2xldmVsKSAlPiUKICBzdW1tYXJpemUobWVhbl9lbGEgPSBtZWFuKHpfc2NvcmVfZWxhLCBuYS5ybSA9IFRSVUUpLAogICAgICAgICAgICBtZWFuX21hdGggPSBtZWFuKHpfc2NvcmVfbWF0aCwgbmEucm0gPSBUUlVFKSkKCmdncGxvdChzdW1tYXJ5X2RhdGEsIGFlcyh4ID0geWVhciwgeSA9IG1lYW5fZWxhLCBjb2xvciA9IGNvdW50eV9sZXZlbCwgZ3JvdXAgPSBjb3VudHlfbGV2ZWwpKSArCiAgZ2VvbV9saW5lKCkgKwogIGdlb21fcG9pbnQoKSArCiAgbGFicygKICAgIHRpdGxlID0gIlRyZW5kIG9mIEF2ZXJhZ2UgRUxBIFNjb3JlcyBieSBDb3VudHkgUG92ZXJ0eSBMZXZlbCIsCiAgICB4ID0gIlllYXIiLAogICAgeSA9ICJBdmVyYWdlIEVMQSBTY29yZSIsCiAgICBjb2xvciA9ICJDb3VudHkgUG92ZXJ0eSBMZXZlbCIKICApICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgpgYGB7cn0KZ2dwbG90KHN1bW1hcnlfZGF0YSwgYWVzKHggPSB5ZWFyLCB5ID0gbWVhbl9tYXRoLCBjb2xvciA9IGNvdW50eV9sZXZlbCwgZ3JvdXAgPSBjb3VudHlfbGV2ZWwpKSArCiAgZ2VvbV9saW5lKCkgKwogIGdlb21fcG9pbnQoKSArCiAgbGFicygKICAgIHRpdGxlID0gIlRyZW5kIG9mIEF2ZXJhZ2UgTWF0aCBTY29yZXMgYnkgQ291bnR5IFBvdmVydHkgTGV2ZWwiLAogICAgeCA9ICJZZWFyIiwKICAgIHkgPSAiQXZlcmFnZSBNYXRoIFNjb3JlIiwKICAgIGNvbG9yID0gIkNvdW50eSBQb3ZlcnR5IExldmVsIgogICkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKCg==
+ + + +
+ + + + + + + + + + + + + + + +