A. Creating Vectors

In this section, you are expected to be able to shape data in vectors, perform basic mathematical operations, and also manipulate vectors.

Exercise 1

Create a vector A containing numeric values, starting from the last 2 digits of your student id up to 30.

A <- c(16:30)

Exercise 2

Create a vector B containing 12 character values; all names of your classmate including yourself.

B <- c("Fallen","Lala","Siana","Julian","Kefas","Ardifo","Jeffry","Vanessa","Angel","Sherly","Nikita","Irene")   

Exercise 3

Create a vector C containing 12 numeric values, random number between 60 and 100.

C <- runif(12,60,100)
C
##  [1] 86.95994 78.74587 75.87039 99.71909 94.53966 65.17817 66.86537 85.16390
##  [9] 78.02772 83.83012 96.56034 79.37854

B. Creating Matrices

In this section, you are expected to be able to shape data in Matrices, perform basic mathematical operations, and also manipulate Matrices.

Exercise 4

Create a matrices M1 order by \(rows \times columns \space (4 \times 4)\) containing 16 numeric values, random number between 60 and 100.

a <- runif(16,60,100)
M1 <- matrix(a, nrow = 4, ncol = 4)  
M1
##          [,1]     [,2]     [,3]     [,4]
## [1,] 81.68144 73.29600 82.41606 85.42531
## [2,] 71.00837 91.38658 71.11925 94.14819
## [3,] 92.68124 82.02532 67.72642 73.71539
## [4,] 81.54683 75.35091 89.74501 96.79342

Exercise 5

Create a matrices M2 order by \(rows \times columns \space (4 \times 4)\) containing 16 numeric values, random number between 30 and 60. Find out the following tasks:

  • 3 * M1, give your opinion about the result.
  • M1 + M2, give your opinion about the result.
  • M1 - M2, give your opinion about the result.
  • M1 * M2, give your opinion about the result.
  • M1 / M2, give your opinion about the result.
  • determinan of M1, give your opinion about the result.
  • invers of M1, give your opinion about the result.
b <-runif(16,30,60)
M2 <- matrix(b, nrow = 4, ncol = 4)
M2
##          [,1]     [,2]     [,3]     [,4]
## [1,] 49.70648 43.63910 37.04688 48.32535
## [2,] 36.88629 44.94298 36.46199 41.16777
## [3,] 34.95572 30.24714 37.60137 55.60057
## [4,] 46.56440 49.07322 37.29046 44.21500
3*M1  #Multiply M1(line 52) by 3
##          [,1]     [,2]     [,3]     [,4]
## [1,] 245.0443 219.8880 247.2482 256.2759
## [2,] 213.0251 274.1597 213.3578 282.4446
## [3,] 278.0437 246.0760 203.1793 221.1462
## [4,] 244.6405 226.0527 269.2350 290.3803
M1+M2 #Add M1 (line 52) with M2 (line 72)
##          [,1]     [,2]     [,3]     [,4]
## [1,] 131.3879 116.9351 119.4629 133.7507
## [2,] 107.8947 136.3296 107.5812 135.3160
## [3,] 127.6370 112.2725 105.3278 129.3160
## [4,] 128.1112 124.4241 127.0355 141.0084
M1-M2 #subtract M1 (line 52) by M2 (line 72)
##          [,1]     [,2]     [,3]     [,4]
## [1,] 31.97496 29.65690 45.36918 37.09996
## [2,] 34.12208 46.44361 34.65726 52.98042
## [3,] 57.72553 51.77818 30.12505 18.11482
## [4,] 34.98243 26.27769 52.45455 52.57842
M1*M2 #Multiply M1 (line 52) with M2 (line 72)
##          [,1]     [,2]     [,3]     [,4]
## [1,] 4060.097 3198.572 3053.258 4128.208
## [2,] 2619.235 4107.185 2593.150 3875.872
## [3,] 3239.739 2481.031 2546.607 4098.618
## [4,] 3797.179 3697.712 3346.633 4279.721
M1/M2 #Divide M1 (line 52) by M2 (line 72)
##          [,1]     [,2]     [,3]     [,4]
## [1,] 1.643275 1.679595 2.224642 1.767712
## [2,] 1.925061 2.033390 1.950504 2.286939
## [3,] 2.651390 2.711837 1.801169 1.325803
## [4,] 1.751270 1.535479 2.406648 2.189154
det(M1) #Find Determinant of M1 (Line 52)
## [1] -200218.6
library(matlib)
inv(M1) #Find Inverse of M1 (Line 52)
##            [,1]        [,2]        [,3]       [,4]
## [1,] -0.1872203 -0.04029345  0.08121915  0.1425697
## [2,]  0.2415703  0.05038687 -0.06303488 -0.2142027
## [3,]  0.3664700  0.01524629 -0.11225602 -0.2527675
## [4,] -0.3701096 -0.01941426  0.08472672  0.2913306

Exercise 6

Create a matrix data that is contain the following vectors:

  • B that you has been created in the exercise 2. Name it as a ‘names’ variable
  • C that you has been created in the exercise 3. Name it as a ‘scores’ variable.
names<-B
names
##  [1] "Fallen"  "Lala"    "Siana"   "Julian"  "Kefas"   "Ardifo"  "Jeffry" 
##  [8] "Vanessa" "Angel"   "Sherly"  "Nikita"  "Irene"
scores<-C
scores
##  [1] 86.95994 78.74587 75.87039 99.71909 94.53966 65.17817 66.86537 85.16390
##  [9] 78.02772 83.83012 96.56034 79.37854
data<-cbind(names,scores)
data
##       names     scores            
##  [1,] "Fallen"  "86.9599413871765"
##  [2,] "Lala"    "78.7458743341267"
##  [3,] "Siana"   "75.8703937008977"
##  [4,] "Julian"  "99.71909083426"  
##  [5,] "Kefas"   "94.5396636147052"
##  [6,] "Ardifo"  "65.1781670004129"
##  [7,] "Jeffry"  "66.8653709534556"
##  [8,] "Vanessa" "85.1638979185373"
##  [9,] "Angel"   "78.0277225840837"
## [10,] "Sherly"  "83.8301196880639"
## [11,] "Nikita"  "96.5603438857943"
## [12,] "Irene"   "79.3785389792174"

C. Lists

In this section, you are expected to be able to shape data by using the list() function, perform some basic manipulations.

Exercise 7

Please create a data set as the List variable by using the list() function, contain the following vectors:

  • a variable name, the values including your classmate and yourself
  • a variable age, the values including your classmate and yourself
  • a variable gender, the values including your classmate and yourself
name <- c("Fallen","Lala","Siana","Julian","Kefas","Ardifo","Jeffry","Vanessa","Angel","Sherly","Nikita","Irene")
age  <- c("21","19","19","19","19","19","19","19","19","19","19","19")
gender <- c("male", "female", "female", "male", "male", "male", "male", "female", "female", "female", "female", "female")
List <- list(name, age, gender)
List
## [[1]]
##  [1] "Fallen"  "Lala"    "Siana"   "Julian"  "Kefas"   "Ardifo"  "Jeffry" 
##  [8] "Vanessa" "Angel"   "Sherly"  "Nikita"  "Irene"  
## 
## [[2]]
##  [1] "21" "19" "19" "19" "19" "19" "19" "19" "19" "19" "19" "19"
## 
## [[3]]
##  [1] "male"   "female" "female" "male"   "male"   "male"   "male"   "female"
##  [9] "female" "female" "female" "female"

D. Factors

In this section, you are expected to be able to shape data by using the factor() function, perform some basic manipulations.

Exercise 8

Please create a data set as the Factor variable as you have done at Exercise 7. Here, you add one more variable called marital_status by using the factor() function, as the following code:

marital_status <- factor(c("yes","no","yes","no", until 12 students))
marital_status <- factor(c("married","single","married","single","single","married","single","married","married","single","married","single"))
marital_status
##  [1] married single  married single  single  married single  married married
## [10] single  married single 
## Levels: married single
factor<-List
factor[[4]] <- marital_status
factor
## [[1]]
##  [1] "Fallen"  "Lala"    "Siana"   "Julian"  "Kefas"   "Ardifo"  "Jeffry" 
##  [8] "Vanessa" "Angel"   "Sherly"  "Nikita"  "Irene"  
## 
## [[2]]
##  [1] "21" "19" "19" "19" "19" "19" "19" "19" "19" "19" "19" "19"
## 
## [[3]]
##  [1] "male"   "female" "female" "male"   "male"   "male"   "male"   "female"
##  [9] "female" "female" "female" "female"
## 
## [[4]]
##  [1] married single  married single  single  married single  married married
## [10] single  married single 
## Levels: married single

E. Data Frames

In this section, you are expected to be able to shape data by using the data.frame() function, perform some basic manipulations.

Exercise 9

Please create a data set as the DF1 variable, contain the following vectors:

  • id, assume 1 up to 6
  • name the values according to your classmate and yourself
  • gender the values according to your classmate and yourself
  • age the values according to your classmate and yourself
  • marital_status the values according to your classmate and yourself
  • address_by_city the values according to your classmate and yourself
DF1<-data.frame(id = c(1:6),
                name = c("Julian", "Vanessa", "Sherly", "Angel", "Jeffry", "Jocelyn"),
                gender = c("Male", "Female", "Female", "Female", "Male", "Female"),
                age = c("19","19","19","19","19","19"),
                marital_status = c("single","single","single","single","single","single"),
                address_by_city = c("Tangerang", "Manado", "Jakarta", "Tangerang", "Tangerang", "Tangerang"),
                stringsAsFactors = F)
                
DF1
##   id    name gender age marital_status address_by_city
## 1  1  Julian   Male  19         single       Tangerang
## 2  2 Vanessa Female  19         single          Manado
## 3  3  Sherly Female  19         single         Jakarta
## 4  4   Angel Female  19         single       Tangerang
## 5  5  Jeffry   Male  19         single       Tangerang
## 6  6 Jocelyn Female  19         single       Tangerang

Please create a data set as the DF2 variable, contain the following vectors:

  • id, assume 7 up to 12
  • name the values according to your classmate and yourself
  • gender the values according to your classmate and yourself
  • age the values according to your classmate and yourself
  • marital_status the values according to your classmate and yourself
  • address_by_city the values according to your classmate and yourself
DF2<-data.frame(id = c(7:12),
                name = c("Kefas", "Nikita", "Ardifo", "Siana", "Fallen", "Ayu"),
                gender = c("Male", "Female", "Male", "Female", "Male", "Female"),
                age = c("19","19","19","19","21","19"),
                marital_status = c("single","single","single","single","single","single"),
                address_by_city = c("Tangerang", "Jakarta", "Palangkaraya", "Tangerang", "Tangerang", "Jakarta"),
                stringsAsFactors = F)
DF2
##   id   name gender age marital_status address_by_city
## 1  7  Kefas   Male  19         single       Tangerang
## 2  8 Nikita Female  19         single         Jakarta
## 3  9 Ardifo   Male  19         single    Palangkaraya
## 4 10  Siana Female  19         single       Tangerang
## 5 11 Fallen   Male  21         single       Tangerang
## 6 12    Ayu Female  19         single         Jakarta

Exercise 10

In this final exercise, please consider the following tasks:

  • Combine DF1 and DF2, assign it as SB19 variable!
  • Print the result of data frame SB19!
  • Print first 3 rows of the SB19 dataset!
  • How can you preview the SB19 dataset like an Excel file on your Rstudio?
  • Review the structure of the data frame SB19!
  • Check the dimension of the data.
  • Please apply piping functions to the data frame SB19, filter it by their gender accordingly! (as you have learn last week)
SB19 <- rbind(DF1,DF2)

print(SB19)
##    id    name gender age marital_status address_by_city
## 1   1  Julian   Male  19         single       Tangerang
## 2   2 Vanessa Female  19         single          Manado
## 3   3  Sherly Female  19         single         Jakarta
## 4   4   Angel Female  19         single       Tangerang
## 5   5  Jeffry   Male  19         single       Tangerang
## 6   6 Jocelyn Female  19         single       Tangerang
## 7   7   Kefas   Male  19         single       Tangerang
## 8   8  Nikita Female  19         single         Jakarta
## 9   9  Ardifo   Male  19         single    Palangkaraya
## 10 10   Siana Female  19         single       Tangerang
## 11 11  Fallen   Male  21         single       Tangerang
## 12 12     Ayu Female  19         single         Jakarta
head(SB19,3)
##   id    name gender age marital_status address_by_city
## 1  1  Julian   Male  19         single       Tangerang
## 2  2 Vanessa Female  19         single          Manado
## 3  3  Sherly Female  19         single         Jakarta
View(SB19)
str(SB19)
## 'data.frame':    12 obs. of  6 variables:
##  $ id             : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ name           : chr  "Julian" "Vanessa" "Sherly" "Angel" ...
##  $ gender         : chr  "Male" "Female" "Female" "Female" ...
##  $ age            : chr  "19" "19" "19" "19" ...
##  $ marital_status : chr  "single" "single" "single" "single" ...
##  $ address_by_city: chr  "Tangerang" "Manado" "Jakarta" "Tangerang" ...
dim(SB19)
## [1] 12  6

Using filter we can split the data by categoty we want

library(magrittr)
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
pria <- SB19 %>%
filter(gender=="Male") %>% 
print()
##   id   name gender age marital_status address_by_city
## 1  1 Julian   Male  19         single       Tangerang
## 2  5 Jeffry   Male  19         single       Tangerang
## 3  7  Kefas   Male  19         single       Tangerang
## 4  9 Ardifo   Male  19         single    Palangkaraya
## 5 11 Fallen   Male  21         single       Tangerang
wanita <- SB19 %>%
filter(gender=="Female") %>%
print()
##   id    name gender age marital_status address_by_city
## 1  2 Vanessa Female  19         single          Manado
## 2  3  Sherly Female  19         single         Jakarta
## 3  4   Angel Female  19         single       Tangerang
## 4  6 Jocelyn Female  19         single       Tangerang
## 5  8  Nikita Female  19         single         Jakarta
## 6 10   Siana Female  19         single       Tangerang
## 7 12     Ayu Female  19         single         Jakarta
LS0tDQp0aXRsZTogIkxhYjM6IFIgQmFzaWNzIg0KYXV0aG9yOiAiSmVmZnJ5IFdpamF5YSINCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KYGBge3IgTG9nbywgZWNobz1GQUxTRSxmaWcuYWxpZ249J2NlbnRlcicsIG91dC53aWR0aCA9ICc0MCUnfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoImh0dHBzOi8vZ2l0aHViLmNvbS9CYWt0aS1TaXJlZ2FyL2ltYWdlcy9ibG9iL21hc3Rlci9sb2dvLnBuZz9yYXc9dHJ1ZSIpDQpgYGANCg0KIyMgQS4gQ3JlYXRpbmcgVmVjdG9ycyANCg0KSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBpbiB2ZWN0b3JzLCBwZXJmb3JtIGJhc2ljIG1hdGhlbWF0aWNhbCBvcGVyYXRpb25zLCBhbmQgYWxzbyBtYW5pcHVsYXRlIHZlY3RvcnMuDQoNCiMjIyBFeGVyY2lzZSAxDQoNCkNyZWF0ZSBhIHZlY3RvciBgQWAgY29udGFpbmluZyBudW1lcmljIHZhbHVlcywgc3RhcnRpbmcgZnJvbSB0aGUgbGFzdCAyIGRpZ2l0cyBvZiB5b3VyIHN0dWRlbnQgaWQgdXAgdG8gMzAuDQoNCmBgYHtyfQ0KQSA8LSBjKDE2OjMwKQ0KYGBgDQoNCiMjIyBFeGVyY2lzZSAyDQoNCkNyZWF0ZSBhIHZlY3RvciBgQmAgY29udGFpbmluZyAxMiBjaGFyYWN0ZXIgdmFsdWVzOyBhbGwgbmFtZXMgb2YgeW91ciBjbGFzc21hdGUgaW5jbHVkaW5nIHlvdXJzZWxmLg0KDQpgYGB7cn0NCkIgPC0gYygiRmFsbGVuIiwiTGFsYSIsIlNpYW5hIiwiSnVsaWFuIiwiS2VmYXMiLCJBcmRpZm8iLCJKZWZmcnkiLCJWYW5lc3NhIiwiQW5nZWwiLCJTaGVybHkiLCJOaWtpdGEiLCJJcmVuZSIpICAgDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDMNCg0KQ3JlYXRlIGEgdmVjdG9yICBgQ2AgY29udGFpbmluZyAxMiBudW1lcmljIHZhbHVlcywgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDYwIGFuZCAxMDAuDQoNCmBgYHtyfQ0KQyA8LSBydW5pZigxMiw2MCwxMDApDQpDDQpgYGANCg0KDQojIyBCLiBDcmVhdGluZyBNYXRyaWNlcyANCg0KSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBpbiBNYXRyaWNlcywgcGVyZm9ybSBiYXNpYyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucywgYW5kIGFsc28gbWFuaXB1bGF0ZSBNYXRyaWNlcy4NCg0KIyMjIEV4ZXJjaXNlIDQNCg0KQ3JlYXRlIGEgbWF0cmljZXMgYE0xYCBvcmRlciBieSAkcm93cyBcdGltZXMgY29sdW1ucyBcc3BhY2UgKDQgXHRpbWVzIDQpJCBjb250YWluaW5nIDE2IG51bWVyaWMgdmFsdWVzLCByYW5kb20gbnVtYmVyIGJldHdlZW4gNjAgYW5kIDEwMC4NCg0KYGBge3J9DQphIDwtIHJ1bmlmKDE2LDYwLDEwMCkNCk0xIDwtIG1hdHJpeChhLCBucm93ID0gNCwgbmNvbCA9IDQpICANCk0xDQpgYGANCg0KDQojIyMgRXhlcmNpc2UgNQ0KDQpDcmVhdGUgYSBtYXRyaWNlcyBgTTJgIG9yZGVyIGJ5ICRyb3dzIFx0aW1lcyBjb2x1bW5zIFxzcGFjZSAoNCBcdGltZXMgNCkkIGNvbnRhaW5pbmcgMTYgbnVtZXJpYyB2YWx1ZXMsIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAzMCBhbmQgNjAuIEZpbmQgb3V0IHRoZSBmb2xsb3dpbmcgdGFza3M6DQoNCiogYDMgKiBNMWAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuIA0KKiBgTTEgKyBNMmAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuIA0KKiBgTTEgLSBNMmAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuDQoqIGBNMSAqIE0yYCwgZ2l2ZSB5b3VyIG9waW5pb24gYWJvdXQgdGhlIHJlc3VsdC4gDQoqIGBNMSAvIE0yYCwgZ2l2ZSB5b3VyIG9waW5pb24gYWJvdXQgdGhlIHJlc3VsdC4gDQoqIGRldGVybWluYW4gb2YgYE0xYCwgZ2l2ZSB5b3VyIG9waW5pb24gYWJvdXQgdGhlIHJlc3VsdC4gDQoqIGludmVycyBvZiBgTTFgLCBnaXZlIHlvdXIgb3BpbmlvbiBhYm91dCB0aGUgcmVzdWx0Lg0KDQoNCmBgYHtyfQ0KYiA8LXJ1bmlmKDE2LDMwLDYwKQ0KTTIgPC0gbWF0cml4KGIsIG5yb3cgPSA0LCBuY29sID0gNCkNCk0yDQoNCjMqTTEgICNNdWx0aXBseSBNMShsaW5lIDUyKSBieSAzDQpNMStNMiAjQWRkIE0xIChsaW5lIDUyKSB3aXRoIE0yIChsaW5lIDcyKQ0KTTEtTTIgI3N1YnRyYWN0IE0xIChsaW5lIDUyKSBieSBNMiAobGluZSA3MikNCk0xKk0yICNNdWx0aXBseSBNMSAobGluZSA1Mikgd2l0aCBNMiAobGluZSA3MikNCk0xL00yICNEaXZpZGUgTTEgKGxpbmUgNTIpIGJ5IE0yIChsaW5lIDcyKQ0KZGV0KE0xKSAjRmluZCBEZXRlcm1pbmFudCBvZiBNMSAoTGluZSA1MikNCg0KbGlicmFyeShtYXRsaWIpDQppbnYoTTEpICNGaW5kIEludmVyc2Ugb2YgTTEgKExpbmUgNTIpDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDYNCg0KQ3JlYXRlIGEgbWF0cml4IGBkYXRhYCB0aGF0IGlzIGNvbnRhaW4gdGhlIGZvbGxvd2luZyB2ZWN0b3JzOg0KDQoqIGBCYCB0aGF0IHlvdSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBleGVyY2lzZSAyLiBOYW1lIGl0IGFzIGEgJ25hbWVzJyB2YXJpYWJsZQ0KKiBgQ2AgdGhhdCB5b3UgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgZXhlcmNpc2UgMy4gTmFtZSBpdCBhcyBhICdzY29yZXMnIHZhcmlhYmxlLg0KDQpgYGB7cn0NCm5hbWVzPC1CDQpuYW1lcw0KDQpzY29yZXM8LUMNCnNjb3Jlcw0KDQpkYXRhPC1jYmluZChuYW1lcyxzY29yZXMpDQpkYXRhDQpgYGANCg0KDQojIyBDLiBMaXN0cyANCg0KSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBieSB1c2luZyB0aGUgYGxpc3QoKWAgZnVuY3Rpb24sIHBlcmZvcm0gc29tZSBiYXNpYyBtYW5pcHVsYXRpb25zLg0KDQoNCiMjIyBFeGVyY2lzZSA3DQoNClBsZWFzZSBjcmVhdGUgYSBkYXRhIHNldCBhcyB0aGUgYExpc3RgIHZhcmlhYmxlIGJ5IHVzaW5nIHRoZSBgbGlzdCgpYCBmdW5jdGlvbiwgY29udGFpbiB0aGUgZm9sbG93aW5nIHZlY3RvcnM6DQoNCiogYSB2YXJpYWJsZSBgbmFtZWAsIHRoZSB2YWx1ZXMgaW5jbHVkaW5nIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KKiBhIHZhcmlhYmxlIGBhZ2VgLCB0aGUgdmFsdWVzIGluY2x1ZGluZyB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYSB2YXJpYWJsZSBgZ2VuZGVyYCwgdGhlIHZhbHVlcyBpbmNsdWRpbmcgeW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoNCmBgYHtyfQ0KbmFtZSA8LSBjKCJGYWxsZW4iLCJMYWxhIiwiU2lhbmEiLCJKdWxpYW4iLCJLZWZhcyIsIkFyZGlmbyIsIkplZmZyeSIsIlZhbmVzc2EiLCJBbmdlbCIsIlNoZXJseSIsIk5pa2l0YSIsIklyZW5lIikNCmFnZSAgPC0gYygiMjEiLCIxOSIsIjE5IiwiMTkiLCIxOSIsIjE5IiwiMTkiLCIxOSIsIjE5IiwiMTkiLCIxOSIsIjE5IikNCmdlbmRlciA8LSBjKCJtYWxlIiwgImZlbWFsZSIsICJmZW1hbGUiLCAibWFsZSIsICJtYWxlIiwgIm1hbGUiLCAibWFsZSIsICJmZW1hbGUiLCAiZmVtYWxlIiwgImZlbWFsZSIsICJmZW1hbGUiLCAiZmVtYWxlIikNCkxpc3QgPC0gbGlzdChuYW1lLCBhZ2UsIGdlbmRlcikNCkxpc3QNCmBgYA0KDQoNCiMjIEQuIEZhY3RvcnMNCg0KSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBieSB1c2luZyB0aGUgYGZhY3RvcigpYCBmdW5jdGlvbiwgcGVyZm9ybSBzb21lIGJhc2ljIG1hbmlwdWxhdGlvbnMuDQoNCg0KIyMjIEV4ZXJjaXNlIDgNCg0KUGxlYXNlIGNyZWF0ZSBhIGRhdGEgc2V0IGFzIHRoZSBgRmFjdG9yYCB2YXJpYWJsZSBhcyB5b3UgaGF2ZSBkb25lIGF0IEV4ZXJjaXNlIDcuIEhlcmUsIHlvdSBhZGQgb25lIG1vcmUgdmFyaWFibGUgY2FsbGVkIGBtYXJpdGFsX3N0YXR1c2AgYnkgdXNpbmcgdGhlIGBmYWN0b3IoKWAgZnVuY3Rpb24sIGFzIHRoZSBmb2xsb3dpbmcgY29kZToNCg0KYGBgeWFtbA0KbWFyaXRhbF9zdGF0dXMgPC0gZmFjdG9yKGMoInllcyIsIm5vIiwieWVzIiwibm8iLCB1bnRpbCAxMiBzdHVkZW50cykpDQpgYGANCg0KYGBge3J9DQptYXJpdGFsX3N0YXR1cyA8LSBmYWN0b3IoYygibWFycmllZCIsInNpbmdsZSIsIm1hcnJpZWQiLCJzaW5nbGUiLCJzaW5nbGUiLCJtYXJyaWVkIiwic2luZ2xlIiwibWFycmllZCIsIm1hcnJpZWQiLCJzaW5nbGUiLCJtYXJyaWVkIiwic2luZ2xlIikpDQptYXJpdGFsX3N0YXR1cw0KDQpmYWN0b3I8LUxpc3QNCmZhY3RvcltbNF1dIDwtIG1hcml0YWxfc3RhdHVzDQpmYWN0b3INCmBgYA0KDQoNCiMjIEUuIERhdGEgRnJhbWVzDQoNCkluIHRoaXMgc2VjdGlvbiwgeW91IGFyZSBleHBlY3RlZCB0byBiZSBhYmxlIHRvIHNoYXBlIGRhdGEgYnkgdXNpbmcgdGhlIGBkYXRhLmZyYW1lKClgIGZ1bmN0aW9uLCBwZXJmb3JtIHNvbWUgYmFzaWMgbWFuaXB1bGF0aW9ucy4NCg0KDQojIyMgRXhlcmNpc2UgOQ0KDQpQbGVhc2UgY3JlYXRlIGEgZGF0YSBzZXQgYXMgdGhlIGBERjFgIHZhcmlhYmxlLCBjb250YWluIHRoZSBmb2xsb3dpbmcgdmVjdG9yczoNCg0KKiBgaWRgLCBhc3N1bWUgMSB1cCB0byA2DQoqIGBuYW1lYCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYGdlbmRlcmAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGBhZ2VgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KKiBgbWFyaXRhbF9zdGF0dXNgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KKiBgYWRkcmVzc19ieV9jaXR5YCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCg0KYGBge3J9DQpERjE8LWRhdGEuZnJhbWUoaWQgPSBjKDE6NiksDQogICAgICAgICAgICAgICAgbmFtZSA9IGMoIkp1bGlhbiIsICJWYW5lc3NhIiwgIlNoZXJseSIsICJBbmdlbCIsICJKZWZmcnkiLCAiSm9jZWx5biIpLA0KICAgICAgICAgICAgICAgIGdlbmRlciA9IGMoIk1hbGUiLCAiRmVtYWxlIiwgIkZlbWFsZSIsICJGZW1hbGUiLCAiTWFsZSIsICJGZW1hbGUiKSwNCiAgICAgICAgICAgICAgICBhZ2UgPSBjKCIxOSIsIjE5IiwiMTkiLCIxOSIsIjE5IiwiMTkiKSwNCiAgICAgICAgICAgICAgICBtYXJpdGFsX3N0YXR1cyA9IGMoInNpbmdsZSIsInNpbmdsZSIsInNpbmdsZSIsInNpbmdsZSIsInNpbmdsZSIsInNpbmdsZSIpLA0KICAgICAgICAgICAgICAgIGFkZHJlc3NfYnlfY2l0eSA9IGMoIlRhbmdlcmFuZyIsICJNYW5hZG8iLCAiSmFrYXJ0YSIsICJUYW5nZXJhbmciLCAiVGFuZ2VyYW5nIiwgIlRhbmdlcmFuZyIpLA0KICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGKQ0KICAgICAgICAgICAgICAgIA0KREYxDQpgYGANCg0KUGxlYXNlIGNyZWF0ZSBhIGRhdGEgc2V0IGFzIHRoZSBgREYyYCB2YXJpYWJsZSwgY29udGFpbiB0aGUgZm9sbG93aW5nIHZlY3RvcnM6DQoNCiogYGlkYCwgYXNzdW1lIDcgdXAgdG8gMTINCiogYG5hbWVgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KKiBgZ2VuZGVyYCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYGFnZWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGBtYXJpdGFsX3N0YXR1c2AgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGBhZGRyZXNzX2J5X2NpdHlgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KDQpgYGB7cn0NCkRGMjwtZGF0YS5mcmFtZShpZCA9IGMoNzoxMiksDQogICAgICAgICAgICAgICAgbmFtZSA9IGMoIktlZmFzIiwgIk5pa2l0YSIsICJBcmRpZm8iLCAiU2lhbmEiLCAiRmFsbGVuIiwgIkF5dSIpLA0KICAgICAgICAgICAgICAgIGdlbmRlciA9IGMoIk1hbGUiLCAiRmVtYWxlIiwgIk1hbGUiLCAiRmVtYWxlIiwgIk1hbGUiLCAiRmVtYWxlIiksDQogICAgICAgICAgICAgICAgYWdlID0gYygiMTkiLCIxOSIsIjE5IiwiMTkiLCIyMSIsIjE5IiksDQogICAgICAgICAgICAgICAgbWFyaXRhbF9zdGF0dXMgPSBjKCJzaW5nbGUiLCJzaW5nbGUiLCJzaW5nbGUiLCJzaW5nbGUiLCJzaW5nbGUiLCJzaW5nbGUiKSwNCiAgICAgICAgICAgICAgICBhZGRyZXNzX2J5X2NpdHkgPSBjKCJUYW5nZXJhbmciLCAiSmFrYXJ0YSIsICJQYWxhbmdrYXJheWEiLCAiVGFuZ2VyYW5nIiwgIlRhbmdlcmFuZyIsICJKYWthcnRhIiksDQogICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IEYpDQpERjINCmBgYA0KDQoNCiMjIyBFeGVyY2lzZSAxMCAgICAgDQoNCkluIHRoaXMgZmluYWwgZXhlcmNpc2UsIHBsZWFzZSBjb25zaWRlciB0aGUgZm9sbG93aW5nIHRhc2tzOiANCg0KKiBDb21iaW5lIGBERjFgIGFuZCBgREYyYCwgIGFzc2lnbiBpdCBhcyBgU0IxOWAgdmFyaWFibGUhDQoqIFByaW50IHRoZSByZXN1bHQgb2YgZGF0YSBmcmFtZSBgU0IxOWAhDQoqIFByaW50IGZpcnN0IDMgcm93cyBvZiB0aGUgYFNCMTlgIGRhdGFzZXQhDQoqIEhvdyBjYW4geW91IHByZXZpZXcgIHRoZSBgU0IxOWAgZGF0YXNldCBsaWtlIGFuIEV4Y2VsIGZpbGUgb24geW91ciBSc3R1ZGlvPw0KKiBSZXZpZXcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBmcmFtZSBgU0IxOWAhDQoqIENoZWNrIHRoZSBkaW1lbnNpb24gb2YgdGhlIGRhdGEuIA0KKiBQbGVhc2UgYXBwbHkgcGlwaW5nIGZ1bmN0aW9ucyB0byB0aGUgZGF0YSBmcmFtZSBgU0IxOWAsIGZpbHRlciBpdCBieSB0aGVpciBnZW5kZXIgYWNjb3JkaW5nbHkhIChhcyB5b3UgaGF2ZSBsZWFybiBsYXN0IHdlZWspDQoNCmBgYHtyfQ0KU0IxOSA8LSByYmluZChERjEsREYyKQ0KDQpwcmludChTQjE5KQ0KaGVhZChTQjE5LDMpDQpWaWV3KFNCMTkpDQpzdHIoU0IxOSkNCmRpbShTQjE5KQ0KYGBgDQpVc2luZyBmaWx0ZXIgd2UgY2FuIHNwbGl0IHRoZSBkYXRhIGJ5IGNhdGVnb3R5IHdlIHdhbnQNCmBgYHtyfQ0KbGlicmFyeShtYWdyaXR0cikNCmxpYnJhcnkoZHBseXIpDQoNCnByaWEgPC0gU0IxOSAlPiUNCmZpbHRlcihnZW5kZXI9PSJNYWxlIikgJT4lIA0KcHJpbnQoKQ0KDQp3YW5pdGEgPC0gU0IxOSAlPiUNCmZpbHRlcihnZW5kZXI9PSJGZW1hbGUiKSAlPiUNCnByaW50KCkNCmBgYA==