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.

##  [1] 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

Exercise 2

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

##  [1] "Ardifo"  "Jeffry"  "Jocelyn" "Julian"  "Kefas"   "Nikita"  "Angel"  
##  [8] "Sherly"  "Vanessa" "Siana"   "Lala"    "Fallen"

Exercise 3

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

##  [1] 62.38875 64.26517 81.30428 70.84725 81.99653 80.16449 76.58322 80.84223
##  [9] 97.96702 86.07844 99.16742 91.17518

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.

##          [,1]     [,2]     [,3]     [,4]
## [1,] 93.52714 71.81038 70.84353 87.24286
## [2,] 87.16793 84.71045 94.39375 76.84868
## [3,] 78.24054 82.37344 97.57714 99.01813
## [4,] 94.29389 81.54247 72.91681 63.04105

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.
##          [,1]     [,2]     [,3]     [,4]
## [1,] 55.97764 59.69429 30.35259 49.86018
## [2,] 58.27770 36.36451 52.19269 55.57889
## [3,] 35.56016 31.37194 49.52012 32.48177
## [4,] 41.50107 37.62186 51.02336 45.54659
##          [,1]     [,2]     [,3]     [,4]
## [1,] 280.5814 215.4311 212.5306 261.7286
## [2,] 261.5038 254.1313 283.1813 230.5460
## [3,] 234.7216 247.1203 292.7314 297.0544
## [4,] 282.8817 244.6274 218.7504 189.1231
##          [,1]     [,2]     [,3]     [,4]
## [1,] 149.5048 131.5047 101.1961 137.1030
## [2,] 145.4456 121.0750 146.5864 132.4276
## [3,] 113.8007 113.7454 147.0973 131.4999
## [4,] 135.7950 119.1643 123.9402 108.5876
##          [,1]     [,2]     [,3]     [,4]
## [1,] 37.54949 12.11609 40.49095 37.38268
## [2,] 28.89024 48.34594 42.20106 21.26979
## [3,] 42.68038 51.00150 48.05702 66.53636
## [4,] 52.79282 43.92060 21.89344 17.49446
##          [,1]     [,2]     [,3]     [,4]
## [1,] 5235.429 4286.669 2150.284 4349.944
## [2,] 5079.946 3080.454 4926.663 4271.164
## [3,] 2782.246 2584.215 4832.032 3216.284
## [4,] 3913.297 3067.780 3720.461 2871.305
##          [,1]     [,2]     [,3]     [,4]
## [1,] 1.670794 1.202969 2.334020 1.749750
## [2,] 1.495734 2.329481 1.808563 1.382695
## [3,] 2.200230 2.625704 1.970454 3.048422
## [4,] 2.272083 2.167422 1.429087 1.384100
## [1] 585721.4
##             [,1]        [,2]        [,3]        [,4]
## [1,]  0.05389362  0.07302603 -0.07186368 -0.05072854
## [2,] -0.09209114 -0.15863981  0.11180118  0.14522617
## [3,]  0.02617028  0.12673674 -0.06423735 -0.08981543
## [4,]  0.00823665 -0.05062202  0.03717806  0.00777819

Exercise 6

Create a matrix data by column, 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     scores            
##  [1,] "Ardifo"  "62.3887493740767"
##  [2,] "Jeffry"  "64.2651687655598"
##  [3,] "Jocelyn" "81.3042829371989"
##  [4,] "Julian"  "70.8472461160272"
##  [5,] "Kefas"   "81.996531393379" 
##  [6,] "Nikita"  "80.1644925959408"
##  [7,] "Angel"   "76.5832183323801"
##  [8,] "Sherly"  "80.8422308415174"
##  [9,] "Vanessa" "97.9670208506286"
## [10,] "Siana"   "86.0784370265901"
## [11,] "Lala"    "99.1674230620265"
## [12,] "Fallen"  "91.1751762218773"

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
## [[1]]
##  [1] "Ardifo"  "Jeffry"  "Jocelyn" "Julian"  "Kefas"   "Nikita"  "Angel"  
##  [8] "Sherly"  "Vanessa" "Siana"   "Lala"    "Fallen" 
## 
## [[2]]
##  [1] 19 19 19 19 19 19 19 19 18 19 19 20
## 
## [[3]]
##  [1] "male"   "male"   "female" "male"   "male"   "female" "female" "female"
##  [9] "female" "female" "female" "male"

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:

## [[1]]
##  [1] "Ardifo"  "Jeffry"  "Jocelyn" "Julian"  "Kefas"   "Nikita"  "Angel"  
##  [8] "Sherly"  "Vanessa" "Siana"   "Lala"    "Fallen" 
## 
## [[2]]
##  [1] 19 19 19 19 19 19 19 19 18 19 19 20
## 
## [[3]]
##  [1] "male"   "male"   "female" "male"   "male"   "female" "female" "female"
##  [9] "female" "female" "female" "male"  
## 
## [[4]]
##  [1] yes no  yes no  yes no  yes no  yes no  yes no 
## Levels: no yes

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
##   id    name gender age martial_status address_by_city
## 1  1  Ardifo   male  19            yes      Kalimantan
## 2  2  Jeffry   male  19             no       Tangerang
## 3  3 Jocelyn female  19            yes       Tangerang
## 4  4  Julian   male  19             no       Tangerang
## 5  5   Kefas   male  19            yes       Tangerang
## 6  6  Nikita female  19             no       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
##   id    name gender age martial_status address_by_city
## 1  7   Angel female  19            yes       Tangerang
## 2  8  Sherly female  19             no         Jakarta
## 3  9 Vanessa female  18            yes          Maluku
## 4 10   Siana female  19             no       Tangerang
## 5 11    Lala female  19            yes       Tangerang
## 6 12  Fallen   male  20             no       Tangerang

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.
##    id    name gender age martial_status address_by_city
## 1   1  Ardifo   male  19            yes      Kalimantan
## 2   2  Jeffry   male  19             no       Tangerang
## 3   3 Jocelyn female  19            yes       Tangerang
## 4   4  Julian   male  19             no       Tangerang
## 5   5   Kefas   male  19            yes       Tangerang
## 6   6  Nikita female  19             no       Tangerang
## 7   7   Angel female  19            yes       Tangerang
## 8   8  Sherly female  19             no         Jakarta
## 9   9 Vanessa female  18            yes          Maluku
## 10 10   Siana female  19             no       Tangerang
## 11 11    Lala female  19            yes       Tangerang
## 12 12  Fallen   male  20             no       Tangerang
##   id    name gender age martial_status address_by_city
## 1  1  Ardifo   male  19            yes      Kalimantan
## 2  2  Jeffry   male  19             no       Tangerang
## 3  3 Jocelyn female  19            yes       Tangerang
## 'data.frame':    12 obs. of  6 variables:
##  $ id             : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ name           : chr  "Ardifo" "Jeffry" "Jocelyn" "Julian" ...
##  $ gender         : chr  "male" "male" "female" "male" ...
##  $ age            : num  19 19 19 19 19 19 19 19 18 19 ...
##  $ martial_status : chr  "yes" "no" "yes" "no" ...
##  $ address_by_city: chr  "Kalimantan" "Tangerang" "Tangerang" "Tangerang" ...
## [1] 12  6
  • Please apply piping functions to the data frame SB19, filter it by their gender accordingly! (as you have learn last week)
## 
## 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
##   id   name gender age martial_status address_by_city
## 1  1 Ardifo   male  19            yes      Kalimantan
## 2  2 Jeffry   male  19             no       Tangerang
## 3  4 Julian   male  19             no       Tangerang
## 4  5  Kefas   male  19            yes       Tangerang
## 5 12 Fallen   male  20             no       Tangerang
##   id    name gender age martial_status address_by_city
## 1  3 Jocelyn female  19            yes       Tangerang
## 2  6  Nikita female  19             no       Tangerang
## 3  7   Angel female  19            yes       Tangerang
## 4  8  Sherly female  19             no         Jakarta
## 5  9 Vanessa female  18            yes          Maluku
## 6 10   Siana female  19             no       Tangerang
## 7 11    Lala female  19            yes       Tangerang
LS0tDQp0aXRsZTogIkxhYjM6IFIgQmFzaWNzIg0KYXV0aG9yOiAiUHV0cmkgQW5nZWxpbmEgV2luZGpheWEtMjAxOTQ5MjAwMTAiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6IG9wZW5pbnRybzo6bGFiX3JlcG9ydA0KLS0tDQoNCmBgYHtyIExvZ28sIGVjaG89RkFMU0UsZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnNDAlJ30NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJodHRwczovL2dpdGh1Yi5jb20vQmFrdGktU2lyZWdhci9pbWFnZXMvYmxvYi9tYXN0ZXIvbG9nby5wbmc/cmF3PXRydWUiKQ0KYGBgDQoNCiMjIEEuIENyZWF0aW5nIFZlY3RvcnMgDQoNCkluIHRoaXMgc2VjdGlvbiwgeW91IGFyZSBleHBlY3RlZCB0byBiZSBhYmxlIHRvIHNoYXBlIGRhdGEgaW4gdmVjdG9ycywgcGVyZm9ybSBiYXNpYyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucywgYW5kIGFsc28gbWFuaXB1bGF0ZSB2ZWN0b3JzLg0KDQojIyMgRXhlcmNpc2UgMQ0KDQpDcmVhdGUgYSB2ZWN0b3IgYEFgIGNvbnRhaW5pbmcgbnVtZXJpYyB2YWx1ZXMsIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3QgMiBkaWdpdHMgb2YgeW91ciBzdHVkZW50IGlkIHVwIHRvIDMwLg0KDQpgYGB7cn0NCkEgPC0gMTA6MzANCkENCmBgYA0KDQojIyMgRXhlcmNpc2UgMg0KDQpDcmVhdGUgYSB2ZWN0b3IgYEJgIGNvbnRhaW5pbmcgMTIgY2hhcmFjdGVyIHZhbHVlczsgYWxsIG5hbWVzIG9mIHlvdXIgY2xhc3NtYXRlIGluY2x1ZGluZyB5b3Vyc2VsZi4NCg0KYGBge3J9DQpCIDwtIGMoIkFyZGlmbyIsIkplZmZyeSIsIkpvY2VseW4iLCJKdWxpYW4iLCJLZWZhcyIsIk5pa2l0YSIsIkFuZ2VsIiwiU2hlcmx5IiwiVmFuZXNzYSIsIlNpYW5hIiwiTGFsYSIsIkZhbGxlbiIpDQpCDQpgYGANCg0KIyMjIEV4ZXJjaXNlIDMNCg0KQ3JlYXRlIGEgdmVjdG9yICBgQ2AgY29udGFpbmluZyAxMiBudW1lcmljIHZhbHVlcywgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDYwIGFuZCAxMDAuDQoNCmBgYHtyfQ0KQyA8LSBydW5pZigxMiw2MCwxMDApDQpDDQpgYGANCg0KDQojIyBCLiBDcmVhdGluZyBNYXRyaWNlcyANCg0KSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBpbiBNYXRyaWNlcywgcGVyZm9ybSBiYXNpYyBtYXRoZW1hdGljYWwgb3BlcmF0aW9ucywgYW5kIGFsc28gbWFuaXB1bGF0ZSBNYXRyaWNlcy4NCg0KDQojIyMgRXhlcmNpc2UgNA0KDQpDcmVhdGUgYSBtYXRyaWNlcyBgTTFgIG9yZGVyIGJ5ICRyb3dzIFx0aW1lcyBjb2x1bW5zIFxzcGFjZSAoNCBcdGltZXMgNCkkIGNvbnRhaW5pbmcgMTYgbnVtZXJpYyB2YWx1ZXMsIHJhbmRvbSBudW1iZXIgYmV0d2VlbiA2MCBhbmQgMTAwLg0KDQpgYGB7cn0NCk0xICAgICAgPC0gcnVuaWYoMTYsNjAsMTAwKQ0KZGltKE0xKSA8LSBjKDQsNCkNCk0xDQpgYGANCg0KDQojIyMgRXhlcmNpc2UgNQ0KDQpDcmVhdGUgYSBtYXRyaWNlcyBgTTJgIG9yZGVyIGJ5ICRyb3dzIFx0aW1lcyBjb2x1bW5zIFxzcGFjZSAoNCBcdGltZXMgNCkkIGNvbnRhaW5pbmcgMTYgbnVtZXJpYyB2YWx1ZXMsIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAzMCBhbmQgNjAuIEZpbmQgb3V0IHRoZSBmb2xsb3dpbmcgdGFza3M6DQoNCiogYDMgKiBNMWAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuIA0KKiBgTTEgKyBNMmAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuIA0KKiBgTTEgLSBNMmAsIGdpdmUgeW91ciBvcGluaW9uIGFib3V0IHRoZSByZXN1bHQuDQoqIGBNMSAqIE0yYCwgZ2l2ZSB5b3VyIG9waW5pb24gYWJvdXQgdGhlIHJlc3VsdC4gDQoqIGBNMSAvIE0yYCwgZ2l2ZSB5b3VyIG9waW5pb24gYWJvdXQgdGhlIHJlc3VsdC4gDQoqIGRldGVybWluYW4gb2YgYE0xYCwgZ2l2ZSB5b3VyIG9waW5pb24gYWJvdXQgdGhlIHJlc3VsdC4gDQoqIGludmVycyBvZiBgTTFgLCBnaXZlIHlvdXIgb3BpbmlvbiBhYm91dCB0aGUgcmVzdWx0Lg0KDQoNCmBgYHtyfQ0KTTIgICAgICA8LSBydW5pZigxNiwzMCw2MCkNCmRpbShNMikgPC0gYyg0LDQpDQpNMg0KDQozICogTTEgICAgICAgICAgICAgICAgICAgICAgICAjICAgICBNYXRyaWtzIE0xIGRpa2FsaWthbiAzDQpNMSArIE0yICAgICAgICAgICAgICAgICAgICAgICAjICAgICBQZW5qdW1sYWhhbiBhbnRhcmEgTWF0cmlrcyAxIGRhbiBNYXRyaWtzIDINCk0xIC0gTTIgICAgICAgICAgICAgICAgICAgICAgICMgICAgIFBlbmd1cmFuZ2FuIGFudGFyYSBNYXRyaWtzIDEgZGFuIE1hdHJpa3MgMg0KTTEgKiBNMiAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgUGVya2FsaWFuIGFudGFyYSBNYXRyaWtzIDEgZGFuIE1hdHJpa3MgMg0KTTEgLyBNMiAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgUGVtYmFnaWFuIGFudGFyYSBNYXRyaWtzIDEgZGFuIE1hdHJpa3MgMg0KZGV0KE0xKSAgICAgICAgICAgICAgICAgICAgICAgIyAgICAgRnVuZ3NpIHVudHVrIG1lbmNhcmkgRGV0ZXJtaW5hbg0KbGlicmFyeSgibWF0bGliIikNCmludihNMSkgICAgICAgICAgICAgICAgICAgICAgICMgICAgIEZ1bmdzaSB1bnR1ayBtZW5jYXJpIGludmVycw0KYGBgDQoNCiMjIyBFeGVyY2lzZSA2DQoNCkNyZWF0ZSBhIG1hdHJpeCBgZGF0YWAgYnkgY29sdW1uLCB0aGF0IGlzIGNvbnRhaW4gdGhlIGZvbGxvd2luZyB2ZWN0b3JzOg0KDQoqIGBCYCB0aGF0IHlvdSBoYXMgYmVlbiBjcmVhdGVkIGluIHRoZSBleGVyY2lzZSAyLiBOYW1lIGl0IGFzIGEgJ25hbWVzJyB2YXJpYWJsZQ0KKiBgQ2AgdGhhdCB5b3UgaGFzIGJlZW4gY3JlYXRlZCBpbiB0aGUgZXhlcmNpc2UgMy4gTmFtZSBpdCBhcyBhICdzY29yZXMnIHZhcmlhYmxlLg0KDQpgYGB7cn0NCiJuYW1lcyIgICAgIDwtIEINCiJzY29yZXMiICAgIDwtIEMNCmNiaW5kKG5hbWVzLHNjb3JlcykNCmBgYA0KDQoNCiMjIEMuIExpc3RzIA0KDQpJbiB0aGlzIHNlY3Rpb24sIHlvdSBhcmUgZXhwZWN0ZWQgdG8gYmUgYWJsZSB0byBzaGFwZSBkYXRhIGJ5IHVzaW5nIHRoZSBgbGlzdCgpYCBmdW5jdGlvbiwgcGVyZm9ybSBzb21lIGJhc2ljIG1hbmlwdWxhdGlvbnMuDQoNCg0KIyMjIEV4ZXJjaXNlIDcNCg0KUGxlYXNlIGNyZWF0ZSBhIGRhdGEgc2V0IGFzIHRoZSBgTGlzdGAgdmFyaWFibGUgYnkgdXNpbmcgdGhlIGBsaXN0KClgIGZ1bmN0aW9uLCBjb250YWluIHRoZSBmb2xsb3dpbmcgdmVjdG9yczoNCg0KKiBhIHZhcmlhYmxlIGBuYW1lYCwgdGhlIHZhbHVlcyBpbmNsdWRpbmcgeW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGEgdmFyaWFibGUgYGFnZWAsIHRoZSB2YWx1ZXMgaW5jbHVkaW5nIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KKiBhIHZhcmlhYmxlIGBnZW5kZXJgLCB0aGUgdmFsdWVzIGluY2x1ZGluZyB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCg0KYGBge3J9DQpuYW1lICAgIDwtIGMoIkFyZGlmbyIsIkplZmZyeSIsIkpvY2VseW4iLCJKdWxpYW4iLCJLZWZhcyIsIk5pa2l0YSIsIkFuZ2VsIiwiU2hlcmx5IiwiVmFuZXNzYSIsIlNpYW5hIiwiTGFsYSIsIkZhbGxlbiIpDQphZ2UgICAgIDwtIGMoMTksMTksMTksMTksMTksMTksMTksMTksMTgsMTksMTksMjApDQpnZW5kZXIgIDwtIGMoIm1hbGUiLCJtYWxlIiwiZmVtYWxlIiwibWFsZSIsIm1hbGUiLCJmZW1hbGUiLCJmZW1hbGUiLCJmZW1hbGUiLCJmZW1hbGUiLCJmZW1hbGUiLCJmZW1hbGUiLCJtYWxlIikNCiJMaXN0IiAgPC0gbGlzdChuYW1lLGFnZSxnZW5kZXIpDQpMaXN0DQpgYGANCg0KDQojIyBELiBGYWN0b3JzDQoNCkluIHRoaXMgc2VjdGlvbiwgeW91IGFyZSBleHBlY3RlZCB0byBiZSBhYmxlIHRvIHNoYXBlIGRhdGEgYnkgdXNpbmcgdGhlIGBmYWN0b3IoKWAgZnVuY3Rpb24sIHBlcmZvcm0gc29tZSBiYXNpYyBtYW5pcHVsYXRpb25zLg0KDQoNCiMjIyBFeGVyY2lzZSA4DQoNClBsZWFzZSBjcmVhdGUgYSBkYXRhIHNldCBhcyB0aGUgYEZhY3RvcmAgdmFyaWFibGUgYXMgeW91IGhhdmUgZG9uZSBhdCBFeGVyY2lzZSA3LiBIZXJlLCB5b3UgYWRkIG9uZSBtb3JlIHZhcmlhYmxlIGNhbGxlZCBgbWFyaXRhbF9zdGF0dXNgIGJ5IHVzaW5nIHRoZSBgZmFjdG9yKClgIGZ1bmN0aW9uLCBhcyB0aGUgZm9sbG93aW5nIGNvZGU6DQoNCmBgYHlhbWwNCm1hcml0YWxfc3RhdHVzIDwtIGZhY3RvcihjKCJ5ZXMiLCJubyIsInllcyIsIm5vIiwgdW50aWwgMTIgc3R1ZGVudHMpKQ0KYGBgDQoNCmBgYHtyfQ0KbWFydGlhbF9zdGF0dXMgIDwtIGZhY3RvcihjKCJ5ZXMiLCJubyIsInllcyIsIm5vIiwieWVzIiwibm8iLCJ5ZXMiLCJubyIsInllcyIsIm5vIiwieWVzIiwibm8iKSkNCiJGYWN0b3IiICAgICAgICA8LSBMaXN0DQpGYWN0b3JbWzRdXSAgICAgPC0gbWFydGlhbF9zdGF0dXMNCkZhY3Rvcg0KYGBgDQoNCg0KIyMgRS4gRGF0YSBGcmFtZXMNCg0KSW4gdGhpcyBzZWN0aW9uLCB5b3UgYXJlIGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gc2hhcGUgZGF0YSBieSB1c2luZyB0aGUgYGRhdGEuZnJhbWUoKWAgZnVuY3Rpb24sIHBlcmZvcm0gc29tZSBiYXNpYyBtYW5pcHVsYXRpb25zLg0KDQoNCiMjIyBFeGVyY2lzZSA5DQoNClBsZWFzZSBjcmVhdGUgYSBkYXRhIHNldCBhcyB0aGUgYERGMWAgdmFyaWFibGUsIGNvbnRhaW4gdGhlIGZvbGxvd2luZyB2ZWN0b3JzOg0KDQoqIGBpZGAsIGFzc3VtZSAxIHVwIHRvIDYNCiogYG5hbWVgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KKiBgZ2VuZGVyYCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYGFnZWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGBtYXJpdGFsX3N0YXR1c2AgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGBhZGRyZXNzX2J5X2NpdHlgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KDQpgYGB7cn0NCkRGMSA8LSBkYXRhLmZyYW1lKGlkID0gYygxOjYpLA0KICAgICAgICAgICAgICAgICAgbmFtZSA9IGMoIkFyZGlmbyIsIkplZmZyeSIsIkpvY2VseW4iLCJKdWxpYW4iLCJLZWZhcyIsIk5pa2l0YSIpLA0KICAgICAgICAgICAgICAgICAgZ2VuZGVyID0gYygibWFsZSIsIm1hbGUiLCJmZW1hbGUiLCJtYWxlIiwibWFsZSIsImZlbWFsZSIpLA0KICAgICAgICAgICAgICAgICAgYWdlID0gYygxOSwxOSwxOSwxOSwxOSwxOSksDQogICAgICAgICAgICAgICAgICBtYXJ0aWFsX3N0YXR1cyA9IGMoInllcyIsIm5vIiwieWVzIiwibm8iLCJ5ZXMiLCJubyIpLA0KICAgICAgICAgICAgICAgICAgYWRkcmVzc19ieV9jaXR5ID0gYygiS2FsaW1hbnRhbiIsIlRhbmdlcmFuZyIsIlRhbmdlcmFuZyIsIlRhbmdlcmFuZyIsIlRhbmdlcmFuZyIsIlRhbmdlcmFuZyIpLA0KICAgICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IEYpDQpwcmludChERjEpDQpgYGANCg0KUGxlYXNlIGNyZWF0ZSBhIGRhdGEgc2V0IGFzIHRoZSBgREYyYCB2YXJpYWJsZSwgY29udGFpbiB0aGUgZm9sbG93aW5nIHZlY3RvcnM6DQoNCiogYGlkYCwgYXNzdW1lIDcgdXAgdG8gMTINCiogYG5hbWVgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KKiBgZ2VuZGVyYCB0aGUgdmFsdWVzIGFjY29yZGluZyB0byB5b3VyIGNsYXNzbWF0ZSBhbmQgeW91cnNlbGYNCiogYGFnZWAgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGBtYXJpdGFsX3N0YXR1c2AgdGhlIHZhbHVlcyBhY2NvcmRpbmcgdG8geW91ciBjbGFzc21hdGUgYW5kIHlvdXJzZWxmDQoqIGBhZGRyZXNzX2J5X2NpdHlgIHRoZSB2YWx1ZXMgYWNjb3JkaW5nIHRvIHlvdXIgY2xhc3NtYXRlIGFuZCB5b3Vyc2VsZg0KDQpgYGB7cn0NCkRGMiA8LSBkYXRhLmZyYW1lKGlkID0gYyg3OjEyKSwNCiAgICAgICAgICAgICAgICAgIG5hbWUgPSBjKCJBbmdlbCIsIlNoZXJseSIsIlZhbmVzc2EiLCJTaWFuYSIsIkxhbGEiLCJGYWxsZW4iKSwNCiAgICAgICAgICAgICAgICAgIGdlbmRlciA9IGMoImZlbWFsZSIsImZlbWFsZSIsImZlbWFsZSIsImZlbWFsZSIsImZlbWFsZSIsIm1hbGUiKSwNCiAgICAgICAgICAgICAgICAgIGFnZSA9IGMoMTksMTksMTgsMTksMTksMjApLA0KICAgICAgICAgICAgICAgICAgbWFydGlhbF9zdGF0dXMgPSBjKCJ5ZXMiLCJubyIsInllcyIsIm5vIiwieWVzIiwibm8iKSwNCiAgICAgICAgICAgICAgICAgIGFkZHJlc3NfYnlfY2l0eSA9IGMoIlRhbmdlcmFuZyIsIkpha2FydGEiLCJNYWx1a3UiLCJUYW5nZXJhbmciLCJUYW5nZXJhbmciLCJUYW5nZXJhbmciKSwNCiAgICAgICAgICAgICAgICAgIHN0cmluZ3NBc0ZhY3RvcnMgPSBGKQ0KcHJpbnQoREYyKQ0KYGBgDQoNCg0KIyMjIEV4ZXJjaXNlIDEwDQoNCkluIHRoaXMgZmluYWwgZXhlcmNpc2UsIHBsZWFzZSBjb25zaWRlciB0aGUgZm9sbG93aW5nIHRhc2tzOiANCg0KKiBDb21iaW5lIGBERjFgIGFuZCBgREYyYCwgIGFzc2lnbiBpdCBhcyBgU0IxOWAgdmFyaWFibGUhDQoqIFByaW50IHRoZSByZXN1bHQgb2YgZGF0YSBmcmFtZSBgU0IxOWAhDQoqIFByaW50IGZpcnN0IDMgcm93cyBvZiB0aGUgYFNCMTlgIGRhdGFzZXQhDQoqIEhvdyBjYW4geW91IHByZXZpZXcgIHRoZSBgU0IxOWAgZGF0YXNldCBsaWtlIGFuIEV4Y2VsIGZpbGUgb24geW91ciBSc3R1ZGlvPw0KKiBSZXZpZXcgdGhlIHN0cnVjdHVyZSBvZiB0aGUgZGF0YSBmcmFtZSBgU0IxOWAhDQoqIENoZWNrIHRoZSBkaW1lbnNpb24gb2YgdGhlIGRhdGEuIA0KYGBge3J9DQpTQjE5IDwtIHJiaW5kKERGMSxERjIpDQpwcmludChTQjE5KQ0KDQpoZWFkKFNCMTksMykNCg0KVmlldyhTQjE5KQ0KDQpzdHIoU0IxOSkNCg0KZGltKFNCMTkpDQpgYGANCg0KKiBQbGVhc2UgYXBwbHkgcGlwaW5nIGZ1bmN0aW9ucyB0byB0aGUgZGF0YSBmcmFtZSBgU0IxOWAsIGZpbHRlciBpdCBieSB0aGVpciBnZW5kZXIgYWNjb3JkaW5nbHkhIChhcyB5b3UgaGF2ZSBsZWFybiBsYXN0IHdlZWspDQpgYGB7cn0NCmxpYnJhcnkobWFncml0dHIpDQpsaWJyYXJ5KGRwbHlyKQ0KDQpNYWxlX2RhdGEgICA8LSBTQjE5ICU+JSANCiAgICBmaWx0ZXIoZ2VuZGVyPT0ibWFsZSIpJT4lIA0KICAgIHByaW50KCkNCkZlbWFsZV9kYXRhIDwtIFNCMTkgJT4lIA0KICAgIGZpbHRlcihnZW5kZXI9PSJmZW1hbGUiKSU+JSANCiAgICBwcmludCgpDQpgYGA=