Email             :
RPubs            : https://rpubs.com/Calvinriswandy/
Jurusan          : Statistika
Address         : ARA Center, Matana University Tower
                         Jl. CBD Barat Kav, RT.1, Curug Sangereng, Kelapa Dua, Tangerang, Banten 15810.


1 Membuat Program dengan List R dan Python

1.1 Buat sebuah list untuk menyimpan 5 orang teman dekatmu

list0 = list()                                                      #Mem
list1 = list("Naftali","Jimy","Dimas","Biondy","Eldwin")

print(list1)
## [[1]]
## [1] "Naftali"
## 
## [[2]]
## [1] "Jimy"
## 
## [[3]]
## [1] "Dimas"
## 
## [[4]]
## [1] "Biondy"
## 
## [[5]]
## [1] "Eldwin"

1.2 Pilihlah satu orang dari list tersebut yang menjadi teman paling dekatmu dengan menggunakan index

list1 = list("Naftali","Jimy","Dimas","Biondy","Eldwin")
print(list1[3])
## [[1]]
## [1] "Dimas"

1.3 Gantilah satu orang yang tidak begitu dekat denganmu dengan teman baru yang kamu temui baru-baru ini

list1 = list("Naftali","Jimy","Dimas","Biondy","Eldwin")
list1[5] = "Ferdinand"

print(list1)
## [[1]]
## [1] "Naftali"
## 
## [[2]]
## [1] "Jimy"
## 
## [[3]]
## [1] "Dimas"
## 
## [[4]]
## [1] "Biondy"
## 
## [[5]]
## [1] "Ferdinand"

1.4 Bagaimana caranya anda menghitung banyak teman yang ada dalam list tersebut

length(list1)
## [1] 5

2 Buatlah contoh menyimpan sekumpulan tuple dengan R dan Python, dengan mengikuti instruksi berikut

2.1 Buatlah Tuple dengan 5 item didalamnya

library(sets)
tuple2 = tuple("Motor","Mobil","Kereta","Bajai","Pesawat")  
print(tuple2)
## ("Motor", "Mobil", "Kereta", "Bajai", "Pesawat")

2.2 Perlihatkan cara Mengakses Nilai Tuple

print(tuple2[2])
## ("Mobil")
print(tuple2[5])
## ("Pesawat")

2.3 Bagaiman anda melakukan Slicing Nilai Tuple

tuple5 = tuple("Saya","Ingin","Pergi","Naik","Motor")
print(tuple5[2:5])
## ("Ingin", "Pergi", "Naik", "Motor")

2.4 Nested Tuple

tuple7 = rep(tuple5, 10)
tuple8 =c(tuple5, tuple2)

print(tuple7)
## ("Saya", "Ingin", "Pergi", "Naik", "Motor", "Saya", "Ingin", "Pergi",
##  "Naik", "Motor", "Saya", "Ingin", "Pergi", "Naik", "Motor", "Saya",
##  "Ingin", "Pergi", "Naik", "Motor", "Saya", "Ingin", "Pergi", "Naik",
##  "Motor", "Saya", "Ingin", "Pergi", "Naik", "Motor", "Saya", "Ingin",
##  "Pergi", "Naik", "Motor", "Saya", "Ingin", "Pergi", "Naik", "Motor",
##  "Saya", "Ingin", "Pergi", "Naik", "Motor", "Saya", "Ingin", "Pergi",
##  "Naik", "Motor")
print(tuple8)
## ("Saya", "Ingin", "Pergi", "Naik", "Motor", "Motor", "Mobil", "Kereta",
##  "Bajai", "Pesawat")

3 Buatlah contoh menyimpan sekumpulan Dictionary dengan R dan Python, yang memuat type data float, integer, character, dan logical, list, tuple, dictionary dengan mengikuti instruksi berikut

3.1 Akses suatu nilai Item dari Dictionary

library(Dict)
## 
## Attaching package: 'Dict'
## The following object is masked from 'package:sets':
## 
##     %>%
calvinriswandy = dict(
  nama = "Calvin Riswandi",                                  
  umur = as.integer(17),                                    
  hobi = list("main game", "olahraga"),            
  menikah = FALSE,
  sosmed = tuple(instagram= "cvnopp_")
)
cat("Nama saya adalah :",calvinriswandy$get('nama'))
## Nama saya adalah : Calvin Riswandi
print(calvinriswandy$get('sosmed') ['instagram'])
## (instagram = "cvnopp_")

3.2 Ubah suatu Nilai Item pada Dictionary

cat("Nama saya adalah:", calvinriswandy$get('nama'))
## Nama saya adalah: Calvin Riswandi
print(calvinriswandy$get('hobi'))
## [[1]]
## [1] "main game"
## 
## [[2]]
## [1] "olahraga"

3.3 Menambahkan Item ke Dictionary

calvinriswandy["nama"] = "Calvin Riswandi"                 
print(calvinriswandy$get('nama'))
## [1] "Calvin Riswandi"

3.4 Menghapus Item dari Dictionary

calvinriswandy$remove("menikah")

print(calvinriswandy)
## # A tibble: 4 x 2
##   key    value     
##   <chr>  <list>    
## 1 hobi   <list [2]>
## 2 nama   <chr [1]> 
## 3 sosmed <tuple>   
## 4 umur   <int [1]>

4 Silahkan untuk menemukan operasi Pengindeksan, Pengirisan, dan Subsetting Data Frame dengan Menggunkan R dan Python

4.1

df1_R <- data.frame(kode = c (1:5),                                                                             # Memberi kode pada data frame 1-5
                    nama = c("Naftali","Jimy","Dimas","Biondy","Eldwin"),                                       # Memberi List berisi item nama
                    gaji = c("Rp4.000.000","Rp6.000.000","Rp6.800.000","Rp9.900.000","Rp3.500.000"),            # Memberi List berisi item gaji
                    mulai_kerja = as.Date(c("2001-01-11","2008-05-18","2007-10-30","2002-12-02","2003-08-25")), # Memberi List berisi item tanggal
                    divisi = c("Alfamart","Alfamart","Alfamart","Alfamart","Alfamart"), stringsAsFactors = F)                                
           # Memberi List berisi item divisi

print(df1_R)
##   kode    nama        gaji mulai_kerja   divisi
## 1    1 Naftali Rp4.000.000  2001-01-11 Alfamart
## 2    2    Jimy Rp6.000.000  2008-05-18 Alfamart
## 3    3   Dimas Rp6.800.000  2007-10-30 Alfamart
## 4    4  Biondy Rp9.900.000  2002-12-02 Alfamart
## 5    5  Eldwin Rp3.500.000  2003-08-25 Alfamart
df2_R <- data.frame(kode = c (6:10),                                                                            # Memberi kode pada data frame 1-5
                    nama = c("Abner","Naomi","Natalie","Noel","Angga"),                                         # Memberi List berisi item nama
                    gaji = c("Rp5.500.000","Rp7.600.000","Rp3.600.000","Rp4.350.000","Rp7.800.000"),            # Memberi List berisi item gaji
                    mulai_kerja = as.Date(c("2022-03-21","2022-01-12","2022-12-20","2022-09-02","2022-06-21")), # Memberi List berisi item tanggal
                    divisi = c("Indomaret","Indomaret","Indomaret","Indomaret","Indomaret"), stringsAsFactors = F)          
          # Memberi List berisi item divisi

print(df2_R)
##   kode    nama        gaji mulai_kerja    divisi
## 1    6   Abner Rp5.500.000  2022-03-21 Indomaret
## 2    7   Naomi Rp7.600.000  2022-01-12 Indomaret
## 3    8 Natalie Rp3.600.000  2022-12-20 Indomaret
## 4    9    Noel Rp4.350.000  2022-09-02 Indomaret
## 5   10   Angga Rp7.800.000  2022-06-21 Indomaret
typeof(df1_R)
## [1] "list"
class(df1_R)  
## [1] "data.frame"
df1_R[2,4]    
## [1] "2008-05-18"
df1_R$nama  
## [1] "Naftali" "Jimy"    "Dimas"   "Biondy"  "Eldwin"
df1_R[,c('gaji','divisi')]
##          gaji   divisi
## 1 Rp4.000.000 Alfamart
## 2 Rp6.000.000 Alfamart
## 3 Rp6.800.000 Alfamart
## 4 Rp9.900.000 Alfamart
## 5 Rp3.500.000 Alfamart
df1_R[ ,1:3]
##   kode    nama        gaji
## 1    1 Naftali Rp4.000.000
## 2    2    Jimy Rp6.000.000
## 3    3   Dimas Rp6.800.000
## 4    4  Biondy Rp9.900.000
## 5    5  Eldwin Rp3.500.000
df1_R[1:2, ] 
##   kode    nama        gaji mulai_kerja   divisi
## 1    1 Naftali Rp4.000.000  2001-01-11 Alfamart
## 2    2    Jimy Rp6.000.000  2008-05-18 Alfamart
subset(df1_R, select=c(1:5)) 
##   kode    nama        gaji mulai_kerja   divisi
## 1    1 Naftali Rp4.000.000  2001-01-11 Alfamart
## 2    2    Jimy Rp6.000.000  2008-05-18 Alfamart
## 3    3   Dimas Rp6.800.000  2007-10-30 Alfamart
## 4    4  Biondy Rp9.900.000  2002-12-02 Alfamart
## 5    5  Eldwin Rp3.500.000  2003-08-25 Alfamart
subset(df1_R, select=c(2,3))
##      nama        gaji
## 1 Naftali Rp4.000.000
## 2    Jimy Rp6.000.000
## 3   Dimas Rp6.800.000
## 4  Biondy Rp9.900.000
## 5  Eldwin Rp3.500.000
subset(df1_R, select = divisi)
##     divisi
## 1 Alfamart
## 2 Alfamart
## 3 Alfamart
## 4 Alfamart
## 5 Alfamart
subset(df1_R, select = 4)
##   mulai_kerja
## 1  2001-01-11
## 2  2008-05-18
## 3  2007-10-30
## 4  2002-12-02
## 5  2003-08-25
summary(df1_R)
##       kode       nama               gaji            mulai_kerja        
##  Min.   :1   Length:5           Length:5           Min.   :2001-01-11  
##  1st Qu.:2   Class :character   Class :character   1st Qu.:2002-12-02  
##  Median :3   Mode  :character   Mode  :character   Median :2003-08-25  
##  Mean   :3                                         Mean   :2004-10-04  
##  3rd Qu.:4                                         3rd Qu.:2007-10-30  
##  Max.   :5                                         Max.   :2008-05-18  
##     divisi         
##  Length:5          
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

5 Buatlah operasi Ganti Nama Variabel pada suatu Data Frame dengan menggunakan R

df2_R<-df1_R                                  # Merubah nama data frame df1_R menjadi df2_R
names(df2_R)<-c("Kode",                       # Merubah nama variable pada data frame df2_R
                   "Nama",
                   "Gaji",
                   "Mulai Bekerja",
                   "Divisi")

print(df2_R)
##   Kode    Nama        Gaji Mulai Bekerja   Divisi
## 1    1 Naftali Rp4.000.000    2001-01-11 Alfamart
## 2    2    Jimy Rp6.000.000    2008-05-18 Alfamart
## 3    3   Dimas Rp6.800.000    2007-10-30 Alfamart
## 4    4  Biondy Rp9.900.000    2002-12-02 Alfamart
## 5    5  Eldwin Rp3.500.000    2003-08-25 Alfamart
LS0tDQp0aXRsZTogIlR1Z2FzMyINCnN1YnRpdGxlOiAiUGVuZ2VuYWxhbiBTdHJ1a3R1ciBEYXRhIg0KYXV0aG9yOiAiQ2FsdmluIFJpc3dhbmRpICgyMDIxNDkyMDAwMykiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50OiANCiAgICBodG1sX2RvY3VtZW50OiBudWxsDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHllcw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgdGhlbWU6IHNhbmRzdG9uZQ0KICAgIGNzczogc3R5bGUxLmNzcw0KICAgIGhpZ2hsaWdodDogbW9ub2Nocm9tZQ0KLS0tDQoNCg0KPGltZyBzdHlsZT0iZmxvYXQ6IHJpZ2h0OyBtYXJnaW46IDBweCAxMDBweCAwcHggMHB4OyB3aWR0aDoyNSUiIHNyYz0iZm90by5wbmciLz4gDQoNCmBgYHtyIGxvZ28sIGVjaG89RkFMU0UsZmlnLmFsaWduPSdjZW50ZXInLCBvdXQud2lkdGggPSAnMzAlJ30NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJMb2dvLnBuZyIpDQpgYGANCg0KRW1haWwgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7Jm5ic3A7OiAgY2FsdmluLnJpc3dhbmRpQHN0dWRlbnQubWF0YW5hdW5pdmVyc2l0eS5hYy5pZCA8YnI+DQpSUHVicyAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OiBodHRwczovL3JwdWJzLmNvbS9DYWx2aW5yaXN3YW5keS8gPGJyPg0KSnVydXNhbiAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7OiBbU3RhdGlzdGlrYV0oaHR0cHM6Ly9tYXRhbmF1bml2ZXJzaXR5LmFjLmlkLz9seT1hY2FkZW1pYyZjPXNiKSA8YnI+DQpBZGRyZXNzICAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgOiBBUkEgQ2VudGVyLCBNYXRhbmEgVW5pdmVyc2l0eSBUb3dlciA8YnI+DQombmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyAmbmJzcDsgJm5ic3A7ICZuYnNwOyZuYnNwOyBKbC4gQ0JEIEJhcmF0IEthdiwgUlQuMSwgQ3VydWcgU2FuZ2VyZW5nLCBLZWxhcGEgRHVhLCBUYW5nZXJhbmcsIEJhbnRlbiAxNTgxMC4NCg0KKioqKg0KDQojIE1lbWJ1YXQgUHJvZ3JhbSBkZW5nYW4gTGlzdCBSIGRhbiBQeXRob24NCg0KIyMgQnVhdCBzZWJ1YWggbGlzdCB1bnR1ayBtZW55aW1wYW4gNSBvcmFuZyB0ZW1hbiBkZWthdG11DQoNCmBgYHtyfQ0KbGlzdDAgPSBsaXN0KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjTWVtDQpsaXN0MSA9IGxpc3QoIk5hZnRhbGkiLCJKaW15IiwiRGltYXMiLCJCaW9uZHkiLCJFbGR3aW4iKQ0KDQpwcmludChsaXN0MSkNCg0KYGBgDQoNCiMjIFBpbGlobGFoIHNhdHUgb3JhbmcgZGFyaSBsaXN0IHRlcnNlYnV0IHlhbmcgbWVuamFkaSB0ZW1hbiBwYWxpbmcgZGVrYXRtdSAgZGVuZ2FuIG1lbmdndW5ha2FuIGluZGV4DQoNCmBgYHtyfQ0KbGlzdDEgPSBsaXN0KCJOYWZ0YWxpIiwiSmlteSIsIkRpbWFzIiwiQmlvbmR5IiwiRWxkd2luIikNCnByaW50KGxpc3QxWzNdKQ0KDQpgYGANCg0KIyMgR2FudGlsYWggc2F0dSBvcmFuZyB5YW5nIHRpZGFrIGJlZ2l0dSBkZWthdCBkZW5nYW5tdSBkZW5nYW4gdGVtYW4gYmFydSB5YW5nIGthbXUgdGVtdWkgYmFydS1iYXJ1IGluaQ0KDQpgYGB7cn0NCmxpc3QxID0gbGlzdCgiTmFmdGFsaSIsIkppbXkiLCJEaW1hcyIsIkJpb25keSIsIkVsZHdpbiIpDQpsaXN0MVs1XSA9ICJGZXJkaW5hbmQiDQoNCnByaW50KGxpc3QxKQ0KDQpgYGANCg0KIyMgQmFnYWltYW5hIGNhcmFueWEgYW5kYSBtZW5naGl0dW5nIGJhbnlhayB0ZW1hbiB5YW5nIGFkYSBkYWxhbSBsaXN0IHRlcnNlYnV0DQoNCmBgYHtyfQ0KbGVuZ3RoKGxpc3QxKQ0KDQpgYGANCg0KIyBCdWF0bGFoIGNvbnRvaCBtZW55aW1wYW4gc2VrdW1wdWxhbiB0dXBsZSBkZW5nYW4gUiBkYW4gUHl0aG9uLCBkZW5nYW4gbWVuZ2lrdXRpIGluc3RydWtzaSBiZXJpa3V0DQoNCiMjIEJ1YXRsYWggVHVwbGUgZGVuZ2FuIDUgaXRlbSBkaWRhbGFtbnlhDQoNCmBgYHtyfQ0KbGlicmFyeShzZXRzKQ0KdHVwbGUyID0gdHVwbGUoIk1vdG9yIiwiTW9iaWwiLCJLZXJldGEiLCJCYWphaSIsIlBlc2F3YXQiKSAgDQpwcmludCh0dXBsZTIpDQoNCmBgYA0KIyMgUGVybGloYXRrYW4gY2FyYSBNZW5nYWtzZXMgTmlsYWkgVHVwbGUNCg0KYGBge3J9DQpwcmludCh0dXBsZTJbMl0pDQoNCmBgYA0KDQpgYGB7cn0NCnByaW50KHR1cGxlMls1XSkNCg0KYGBgDQoNCiMjIEJhZ2FpbWFuIGFuZGEgbWVsYWt1a2FuIFNsaWNpbmcgTmlsYWkgVHVwbGUNCg0KYGBge3J9DQp0dXBsZTUgPSB0dXBsZSgiU2F5YSIsIkluZ2luIiwiUGVyZ2kiLCJOYWlrIiwiTW90b3IiKQ0KcHJpbnQodHVwbGU1WzI6NV0pDQpgYGANCiMjIE5lc3RlZCBUdXBsZQ0KDQpgYGB7cn0NCnR1cGxlNyA9IHJlcCh0dXBsZTUsIDEwKQ0KdHVwbGU4ID1jKHR1cGxlNSwgdHVwbGUyKQ0KDQpwcmludCh0dXBsZTcpDQpgYGANCg0KYGBge3J9DQpwcmludCh0dXBsZTgpDQoNCmBgYA0KDQojIEJ1YXRsYWggY29udG9oIG1lbnlpbXBhbiBzZWt1bXB1bGFuIERpY3Rpb25hcnkgZGVuZ2FuIFIgZGFuIFB5dGhvbiwgeWFuZyBtZW11YXQgdHlwZSBkYXRhIGZsb2F0LCBpbnRlZ2VyLCBjaGFyYWN0ZXIsIGRhbiBsb2dpY2FsLCBsaXN0LCB0dXBsZSwgZGljdGlvbmFyeSBkZW5nYW4gbWVuZ2lrdXRpIGluc3RydWtzaSBiZXJpa3V0DQoNCiMjIEFrc2VzIHN1YXR1IG5pbGFpIEl0ZW0gZGFyaSBEaWN0aW9uYXJ5IA0KDQpgYGB7cn0NCmxpYnJhcnkoRGljdCkNCg0KYGBgDQoNCmBgYHtyfQ0KY2Fsdmlucmlzd2FuZHkgPSBkaWN0KA0KICBuYW1hID0gIkNhbHZpbiBSaXN3YW5kaSIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA0KICB1bXVyID0gYXMuaW50ZWdlcigxNyksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogIGhvYmkgPSBsaXN0KCJtYWluIGdhbWUiLCAib2xhaHJhZ2EiKSwgICAgICAgICAgICANCiAgbWVuaWthaCA9IEZBTFNFLA0KICBzb3NtZWQgPSB0dXBsZShpbnN0YWdyYW09ICJjdm5vcHBfIikNCikNCg0KYGBgDQoNCmBgYHtyfQ0KY2F0KCJOYW1hIHNheWEgYWRhbGFoIDoiLGNhbHZpbnJpc3dhbmR5JGdldCgnbmFtYScpKQ0KcHJpbnQoY2Fsdmlucmlzd2FuZHkkZ2V0KCdzb3NtZWQnKSBbJ2luc3RhZ3JhbSddKQ0KDQpgYGANCg0KIyMgVWJhaCBzdWF0dSBOaWxhaSBJdGVtIHBhZGEgRGljdGlvbmFyeQ0KDQpgYGB7cn0NCmNhdCgiTmFtYSBzYXlhIGFkYWxhaDoiLCBjYWx2aW5yaXN3YW5keSRnZXQoJ25hbWEnKSkNCg0KYGBgDQoNCmBgYHtyfQ0KcHJpbnQoY2Fsdmlucmlzd2FuZHkkZ2V0KCdob2JpJykpDQoNCmBgYA0KDQojIyBNZW5hbWJhaGthbiBJdGVtIGtlIERpY3Rpb25hcnkNCg0KYGBge3J9DQpjYWx2aW5yaXN3YW5keVsibmFtYSJdID0gIkNhbHZpbiBSaXN3YW5kaSIgICAgICAgICAgICAgICAgIA0KcHJpbnQoY2Fsdmlucmlzd2FuZHkkZ2V0KCduYW1hJykpDQpgYGANCg0KIyMgTWVuZ2hhcHVzIEl0ZW0gZGFyaSBEaWN0aW9uYXJ5DQoNCmBgYHtyfQ0KY2Fsdmlucmlzd2FuZHkkcmVtb3ZlKCJtZW5pa2FoIikNCg0KcHJpbnQoY2Fsdmlucmlzd2FuZHkpDQpgYGANCg0KIyBTaWxhaGthbiB1bnR1ayBtZW5lbXVrYW4gb3BlcmFzaSBQZW5naW5kZWtzYW4sIFBlbmdpcmlzYW4sIGRhbiBTdWJzZXR0aW5nIERhdGEgRnJhbWUgZGVuZ2FuIE1lbmdndW5rYW4gUiBkYW4gUHl0aG9uDQoNCiMjIA0KYGBge3J9DQpkZjFfUiA8LSBkYXRhLmZyYW1lKGtvZGUgPSBjICgxOjUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZW1iZXJpIGtvZGUgcGFkYSBkYXRhIGZyYW1lIDEtNQ0KICAgICAgICAgICAgICAgICAgICBuYW1hID0gYygiTmFmdGFsaSIsIkppbXkiLCJEaW1hcyIsIkJpb25keSIsIkVsZHdpbiIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgTWVtYmVyaSBMaXN0IGJlcmlzaSBpdGVtIG5hbWENCiAgICAgICAgICAgICAgICAgICAgZ2FqaSA9IGMoIlJwNC4wMDAuMDAwIiwiUnA2LjAwMC4wMDAiLCJScDYuODAwLjAwMCIsIlJwOS45MDAuMDAwIiwiUnAzLjUwMC4wMDAiKSwgICAgICAgICAgICAjIE1lbWJlcmkgTGlzdCBiZXJpc2kgaXRlbSBnYWppDQogICAgICAgICAgICAgICAgICAgIG11bGFpX2tlcmphID0gYXMuRGF0ZShjKCIyMDAxLTAxLTExIiwiMjAwOC0wNS0xOCIsIjIwMDctMTAtMzAiLCIyMDAyLTEyLTAyIiwiMjAwMy0wOC0yNSIpKSwgIyBNZW1iZXJpIExpc3QgYmVyaXNpIGl0ZW0gdGFuZ2dhbA0KICAgICAgICAgICAgICAgICAgICBkaXZpc2kgPSBjKCJBbGZhbWFydCIsIkFsZmFtYXJ0IiwiQWxmYW1hcnQiLCJBbGZhbWFydCIsIkFsZmFtYXJ0IiksIHN0cmluZ3NBc0ZhY3RvcnMgPSBGKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICMgTWVtYmVyaSBMaXN0IGJlcmlzaSBpdGVtIGRpdmlzaQ0KDQpwcmludChkZjFfUikNCmBgYA0KDQpgYGB7cn0NCmRmMl9SIDwtIGRhdGEuZnJhbWUoa29kZSA9IGMgKDY6MTApLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIE1lbWJlcmkga29kZSBwYWRhIGRhdGEgZnJhbWUgMS01DQogICAgICAgICAgICAgICAgICAgIG5hbWEgPSBjKCJBYm5lciIsIk5hb21pIiwiTmF0YWxpZSIsIk5vZWwiLCJBbmdnYSIpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZW1iZXJpIExpc3QgYmVyaXNpIGl0ZW0gbmFtYQ0KICAgICAgICAgICAgICAgICAgICBnYWppID0gYygiUnA1LjUwMC4wMDAiLCJScDcuNjAwLjAwMCIsIlJwMy42MDAuMDAwIiwiUnA0LjM1MC4wMDAiLCJScDcuODAwLjAwMCIpLCAgICAgICAgICAgICMgTWVtYmVyaSBMaXN0IGJlcmlzaSBpdGVtIGdhamkNCiAgICAgICAgICAgICAgICAgICAgbXVsYWlfa2VyamEgPSBhcy5EYXRlKGMoIjIwMjItMDMtMjEiLCIyMDIyLTAxLTEyIiwiMjAyMi0xMi0yMCIsIjIwMjItMDktMDIiLCIyMDIyLTA2LTIxIikpLCAjIE1lbWJlcmkgTGlzdCBiZXJpc2kgaXRlbSB0YW5nZ2FsDQogICAgICAgICAgICAgICAgICAgIGRpdmlzaSA9IGMoIkluZG9tYXJldCIsIkluZG9tYXJldCIsIkluZG9tYXJldCIsIkluZG9tYXJldCIsIkluZG9tYXJldCIpLCBzdHJpbmdzQXNGYWN0b3JzID0gRikgICAgICAgICAgDQogICAgICAgICAgIyBNZW1iZXJpIExpc3QgYmVyaXNpIGl0ZW0gZGl2aXNpDQoNCnByaW50KGRmMl9SKQ0KYGBgDQoNCmBgYHtyfQ0KdHlwZW9mKGRmMV9SKQ0KDQpgYGANCg0KYGBge3J9DQpjbGFzcyhkZjFfUikgIA0KDQpgYGANCg0KYGBge3J9DQpkZjFfUlsyLDRdICAgIA0KDQpgYGANCg0KYGBge3J9DQpkZjFfUiRuYW1hICANCg0KYGBgDQoNCmBgYHtyfQ0KZGYxX1JbLGMoJ2dhamknLCdkaXZpc2knKV0NCg0KYGBgDQoNCmBgYHtyfQ0KZGYxX1JbICwxOjNdDQoNCmBgYA0KDQpgYGB7cn0NCmRmMV9SWzE6MiwgXSANCg0KYGBgDQoNCmBgYHtyfQ0Kc3Vic2V0KGRmMV9SLCBzZWxlY3Q9YygxOjUpKSANCg0KYGBgDQoNCmBgYHtyfQ0Kc3Vic2V0KGRmMV9SLCBzZWxlY3Q9YygyLDMpKQ0KDQpgYGANCg0KYGBge3J9DQpzdWJzZXQoZGYxX1IsIHNlbGVjdCA9IGRpdmlzaSkNCg0KYGBgDQoNCmBgYHtyfQ0Kc3Vic2V0KGRmMV9SLCBzZWxlY3QgPSA0KQ0KDQpgYGANCg0KYGBge3J9DQpzdW1tYXJ5KGRmMV9SKQ0KDQpgYGANCg0KIyBCdWF0bGFoIG9wZXJhc2kgR2FudGkgTmFtYSBWYXJpYWJlbCBwYWRhIHN1YXR1IERhdGEgRnJhbWUgZGVuZ2FuIG1lbmdndW5ha2FuIFINCg0KYGBge3J9DQpkZjJfUjwtZGYxX1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBNZXJ1YmFoIG5hbWEgZGF0YSBmcmFtZSBkZjFfUiBtZW5qYWRpIGRmMl9SDQpuYW1lcyhkZjJfUik8LWMoIktvZGUiLCAgICAgICAgICAgICAgICAgICAgICAgIyBNZXJ1YmFoIG5hbWEgdmFyaWFibGUgcGFkYSBkYXRhIGZyYW1lIGRmMl9SDQogICAgICAgICAgICAgICAgICAgIk5hbWEiLA0KICAgICAgICAgICAgICAgICAgICJHYWppIiwNCiAgICAgICAgICAgICAgICAgICAiTXVsYWkgQmVrZXJqYSIsDQogICAgICAgICAgICAgICAgICAgIkRpdmlzaSIpDQoNCnByaW50KGRmMl9SKQ0KDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg==