Assignment Week-2
1. PRAKTIKUM
DATASET DUMMY
| ID | Name | Age | Salary | Position | Performace |
|---|---|---|---|---|---|
| 1 | Bagas | 25 | 5000 | Staff | Good |
| 2 | Joan | 30 | 7000 | Supervisor | Very Good |
| 3 | Alya | 27 | 6500 | Staff | Average |
| 4 | Dwi | 35 | 10000 | Manager | Good |
| 5 | Nabil | 40 | 12000 | Director | Very Good |
1.1 Pernyataan Kondisional
Tingkat Bonus Berdasar Kinerja Karyawan :
- Sangat Baik -> 20% dari gaji
- Baik -> 10% dari gaji
- Rata-rata -> 5% dari gaji
Tugas :
- Tuliskan Program dalam Phyton dan R untuk menghitung Bonus Setiap
Karyawan
- Menampilkan output dalam format : “Name: Bagas, Bonus: 500”
# Data karyawan yang sudah diketahui
data_karyawan <- data.frame(
Name = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
Salary = c(5000, 7000, 6500, 10000, 12000),
Performance = c("Good", "Very Good", "Average", "Good", "Very Good")
)
# Fungsi untuk menghitung bonus berdasarkan kinerja
calculate_bonus <- function(salary, performance) {
if (performance == "Very Good") {
return(0.20 * salary) # Jika kinerja "Very Good", bonus 20% dari gaji
} else if (performance == "Good") {
return(0.10 * salary) # Jika kinerja "Good", bonus 10% dari gaji
} else if (performance == "Average") {
return(0.05 * salary) # Jika kinerja "Average", bonus 5% dari gaji
} else {
return(0) # Jika kinerja tidak masuk kategori, bonus 0%
}
}
# Menghitung bonus untuk setiap karyawan
data_karyawan$Bonus <- mapply(calculate_bonus, data_karyawan$Salary, data_karyawan$Performance)
# Menampilkan output
for (i in 1:nrow(data_karyawan)) {
cat(sprintf("Name: %s, Bonus: %d\n", data_karyawan$Name[i], as.integer(data_karyawan$Bonus[i]))) # sprintf digunakan untuk memformat output dengan nama dan bonus dalam bentuk integer
}## Name: Bagas, Bonus: 500
## Name: Joan, Bonus: 1400
## Name: Alya, Bonus: 325
## Name: Dwi, Bonus: 1000
## Name: Nabil, Bonus: 2400
1.2 Perulangan ( For & While )
1.2.1 Gunakan for loop untuk membuat daftar karyawan dengan gaji lebih dari 6000.
# Data karyawan yang sudah diketahui
karyawan <- data.frame(
ID = c(1, 2, 3, 4, 5),
Nama = c('Bagas', 'Joan', 'Alya', 'Dwi', 'Nabil'),
Gaji = c(5000, 7000, 6500, 10000, 12000)
)
# Membuat subset data hanya untuk karyawan dengan gaji di atas 6000
karyawan_gaji_tinggi <- subset(karyawan, Gaji > 6000)
# Loop melalui subset data dan menampilkan nama dan gaji
for (i in 1:nrow(karyawan_gaji_tinggi)) {
cat(sprintf("Name: %s, Salary: %d\n", karyawan_gaji_tinggi$Nama[i], karyawan_gaji_tinggi$Gaji[i])) # Menampilkan informasi karyawan dalam format "Name: Nama, Salary: Gaji"
}## Name: Joan, Salary: 7000
## Name: Alya, Salary: 6500
## Name: Dwi, Salary: 10000
## Name: Nabil, Salary: 12000
1.2.2 Gunakan while loop untuk menampilkan karyawan hingga “Manajer” ditemukan
# Membuat data frame
data_karyawan <- data.frame(
Nama = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
Posisi = c("Staff", "Supervisor", "Staff", "Manajer", "Director")
)
# Menampilkan list karyawan sampai menemukan kata "Manajer"
i <- 1 # Menentukan indeks awal untuk looping
while (i <= nrow(data_karyawan)) {
# Loop akan berjalan selama indeks masih dalam batas jumlah karyawan
if (data_karyawan$Posisi[i] == "Manajer") { # Jika posisi karyawan adalah "Manajer", tampilkan dan hentikan loop
cat("Name:", data_karyawan$Nama[i], ", Position:", data_karyawan$Posisi[i], "(Stop here)\n")
break # Menghentikan loop setelah menemukan "Manajer"
} else {
cat("Name:", data_karyawan$Nama[i], ", Position:", data_karyawan$Posisi[i], "\n") # Menampilkan nama dan posisi karyawan yang bukan "Manajer"
}
i <- i + 1 # Tambah indeks
}## Name: Bagas , Position: Staff
## Name: Joan , Position: Supervisor
## Name: Alya , Position: Staff
## Name: Dwi , Position: Manajer (Stop here)
1.2.3 Gunakan break untuk menghentikan loop ketika karyawan dengan gaji di atas 10.000 ditemukan
# Membuat data frame
data_karyawan <- data.frame(
Name = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
Salary = c(5000, 7000, 6500, 10000, 12000)
)
# Loop melalui data karyawan
for (i in 1:nrow(data_karyawan)) {
# Jika gaji di atas 10.000, hentikan loop sebelum mencetak data tersebut
if (data_karyawan$Salary[i] > 10000) {
cat("(Stopped because Nabil has a salary above 10,000)\n") # Menampilkan pesan berhenti
break # Hentikan loop
}
# Menampilkan nama dan gaji
cat("Name:", data_karyawan$Name[i], ", Salary:", data_karyawan$Salary[i], "\n")
}## Name: Bagas , Salary: 5000
## Name: Joan , Salary: 7000
## Name: Alya , Salary: 6500
## Name: Dwi , Salary: 10000
## (Stopped because Nabil has a salary above 10,000)
1.2.4 Gunakan Lanjutkan untuk melewati karyawan dengan kinerja “Rata-rata”
data_karyawan <- data.frame(
Name = c("Bagas", "Joan", "Alya", "Dwi", "Nabil"),
Performance = c("Good", "Very Good", "Average", "Good", "Very Good")
)
# Loop melalui setiap baris data karyawan
for (i in 1:nrow(data_karyawan)) { # Loop melalui data karyawan
if (data_karyawan$Performance[i] == "Average") { # Mengecek apakah karyawan memiliki kinerja "Average"
next # Lewati iterasi ini dan lanjutkan ke karyawan berikutnya
}
print(paste0("Name: ", data_karyawan$Name[i], ", Performance: ", data_karyawan$Performance[i])) # print nama dan kinerja yang tidak memiliki kinerja "Average"
}## [1] "Name: Bagas, Performance: Good"
## [1] "Name: Joan, Performance: Very Good"
## [1] "Name: Dwi, Performance: Good"
## [1] "Name: Nabil, Performance: Very Good"
cat('(Alya is skipped because the performance is "Average")\n') # Menampilkan pesan bahwa Alya dilewati karena memiliki kinerja "Average"## (Alya is skipped because the performance is "Average")
LS0tDQp0aXRsZTogIkFzc2lnbm1lbnQgV2Vlay0yIg0KYXV0aG9yOiAiV2hpcmR5YW5hIFNoYWxmYSBBeXViaSINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6IA0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogIkM6L1VzZXJzL1NBTEZBL09uZURyaXZlL0RvY3VtZW50cy9wcmFrdGlrdW0vc3R5bGUuY3NzIg0KLS0tDQoNCjxpbWcgaWQ9IlNIQUxGQUEiIHNyYz0iQzovVXNlcnMvU0FMRkEvT25lRHJpdmUvRG9jdW1lbnRzL1NIQUxGQUEuanBnIiBhbHQ9IkxvZ28iIHN0eWxlPSJ3aWR0aDoyMDBweDsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiPg0KDQotLS0NCg0KIyAxLiBQUkFLVElLVU0NCg0KREFUQVNFVCBEVU1NWQ0KDQp8IElEIHwgTmFtZSB8IEFnZSB8IFNhbGFyeSB8IFBvc2l0aW9uIHwgUGVyZm9ybWFjZSB8DQp8LS0tLS0tLS0tfC0tLS0tLS18LS0tLS0tLS18LS0tLS0tLXwtLS0tLS0tfC0tLS0tLS18DQp8IDEgfCBCYWdhcyAgfCAyNSB8IDUwMDAgfCBTdGFmZiB8IEdvb2QgfA0KfCAyIHwgSm9hbnwgMzAgfCA3MDAwIHwgU3VwZXJ2aXNvciB8IFZlcnkgR29vZCB8DQp8IDMgfCBBbHlhfCAyNyB8IDY1MDAgfCBTdGFmZiB8IEF2ZXJhZ2UgfA0KfCA0IHwgRHdpIHwgMzUgfCAxMDAwMCB8IE1hbmFnZXIgfCBHb29kIHwNCnwgNSB8IE5hYmlsfCA0MCAgfCAxMjAwMCAgfCBEaXJlY3RvciB8IFZlcnkgR29vZCB8DQoNCg0KIyMgMS4xIFBlcm55YXRhYW4gS29uZGlzaW9uYWwNCg0KKipUaW5na2F0IEJvbnVzIEJlcmRhc2FyIEtpbmVyamEgS2FyeWF3YW4gOioqDQoNCi0gU2FuZ2F0IEJhaWsgLT4gMjAlIGRhcmkgZ2FqaSBcDQotIEJhaWsgLT4gMTAlIGRhcmkgZ2FqaSBcDQotIFJhdGEtcmF0YSAtPiA1JSBkYXJpIGdhamkNCg0KKipUdWdhcyA6KioNCg0KLSBUdWxpc2thbiBQcm9ncmFtIGRhbGFtIFBoeXRvbiBkYW4gUiB1bnR1ayBtZW5naGl0dW5nIEJvbnVzIFNldGlhcCBLYXJ5YXdhbiBcDQotIE1lbmFtcGlsa2FuIG91dHB1dCBkYWxhbSBmb3JtYXQgOiANCiAgICAqKiJOYW1lOiBCYWdhcywgQm9udXM6IDUwMCIqKg0KICAgIA0KYGBge3IgZWNobz1UUlVFLCBtZXNzYWdlPVRSVUUsIHdhcm5pbmc9VFJVRX0NCiMgRGF0YSBrYXJ5YXdhbiB5YW5nIHN1ZGFoIGRpa2V0YWh1aQ0KZGF0YV9rYXJ5YXdhbiA8LSBkYXRhLmZyYW1lKA0KICBOYW1lID0gYygiQmFnYXMiLCAiSm9hbiIsICJBbHlhIiwgIkR3aSIsICJOYWJpbCIpLA0KICBTYWxhcnkgPSBjKDUwMDAsIDcwMDAsIDY1MDAsIDEwMDAwLCAxMjAwMCksDQogIFBlcmZvcm1hbmNlID0gYygiR29vZCIsICJWZXJ5IEdvb2QiLCAiQXZlcmFnZSIsICJHb29kIiwgIlZlcnkgR29vZCIpDQopDQoNCiMgRnVuZ3NpIHVudHVrIG1lbmdoaXR1bmcgYm9udXMgYmVyZGFzYXJrYW4ga2luZXJqYQ0KY2FsY3VsYXRlX2JvbnVzIDwtIGZ1bmN0aW9uKHNhbGFyeSwgcGVyZm9ybWFuY2UpIHsNCiAgaWYgKHBlcmZvcm1hbmNlID09ICJWZXJ5IEdvb2QiKSB7DQogICAgcmV0dXJuKDAuMjAgKiBzYWxhcnkpICAjIEppa2Ega2luZXJqYSAiVmVyeSBHb29kIiwgYm9udXMgMjAlIGRhcmkgZ2FqaQ0KICB9IGVsc2UgaWYgKHBlcmZvcm1hbmNlID09ICJHb29kIikgew0KICAgIHJldHVybigwLjEwICogc2FsYXJ5KSAgIyBKaWthIGtpbmVyamEgIkdvb2QiLCBib251cyAxMCUgZGFyaSBnYWppDQogIH0gZWxzZSBpZiAocGVyZm9ybWFuY2UgPT0gIkF2ZXJhZ2UiKSB7DQogICAgcmV0dXJuKDAuMDUgKiBzYWxhcnkpICMgSmlrYSBraW5lcmphICJBdmVyYWdlIiwgYm9udXMgNSUgZGFyaSBnYWppDQogIH0gZWxzZSB7DQogICAgcmV0dXJuKDApICAjIEppa2Ega2luZXJqYSB0aWRhayBtYXN1ayBrYXRlZ29yaSwgYm9udXMgMCUNCiAgfQ0KfQ0KDQojIE1lbmdoaXR1bmcgYm9udXMgdW50dWsgc2V0aWFwIGthcnlhd2FuDQpkYXRhX2thcnlhd2FuJEJvbnVzIDwtIG1hcHBseShjYWxjdWxhdGVfYm9udXMsIGRhdGFfa2FyeWF3YW4kU2FsYXJ5LCBkYXRhX2thcnlhd2FuJFBlcmZvcm1hbmNlKQ0KDQojIE1lbmFtcGlsa2FuIG91dHB1dA0KZm9yIChpIGluIDE6bnJvdyhkYXRhX2thcnlhd2FuKSkgew0KICBjYXQoc3ByaW50ZigiTmFtZTogJXMsIEJvbnVzOiAlZFxuIiwgZGF0YV9rYXJ5YXdhbiROYW1lW2ldLCBhcy5pbnRlZ2VyKGRhdGFfa2FyeWF3YW4kQm9udXNbaV0pKSkgIyBzcHJpbnRmIGRpZ3VuYWthbiB1bnR1ayBtZW1mb3JtYXQgb3V0cHV0IGRlbmdhbiBuYW1hIGRhbiBib251cyBkYWxhbSBiZW50dWsgaW50ZWdlcg0KfQ0KYGBgDQojIyAqKjEuMiBQZXJ1bGFuZ2FuICggRm9yICYgV2hpbGUgKSoqDQoNCiMjIyAqKjEuMi4xIEd1bmFrYW4gKmZvciBsb29wKiB1bnR1ayBtZW1idWF0IGRhZnRhciBrYXJ5YXdhbiBkZW5nYW4gZ2FqaSBsZWJpaCBkYXJpIDYwMDAuKioNCg0KDQpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFfQ0KIyBEYXRhIGthcnlhd2FuIHlhbmcgc3VkYWggZGlrZXRhaHVpDQprYXJ5YXdhbiA8LSBkYXRhLmZyYW1lKA0KICBJRCA9IGMoMSwgMiwgMywgNCwgNSksDQogIE5hbWEgPSBjKCdCYWdhcycsICdKb2FuJywgJ0FseWEnLCAnRHdpJywgJ05hYmlsJyksDQogIEdhamkgPSBjKDUwMDAsIDcwMDAsIDY1MDAsIDEwMDAwLCAxMjAwMCkNCikNCg0KIyBNZW1idWF0IHN1YnNldCBkYXRhIGhhbnlhIHVudHVrIGthcnlhd2FuIGRlbmdhbiBnYWppIGRpIGF0YXMgNjAwMA0Ka2FyeWF3YW5fZ2FqaV90aW5nZ2kgPC0gc3Vic2V0KGthcnlhd2FuLCBHYWppID4gNjAwMCkNCg0KIyBMb29wIG1lbGFsdWkgc3Vic2V0IGRhdGEgZGFuIG1lbmFtcGlsa2FuIG5hbWEgZGFuIGdhamkNCmZvciAoaSBpbiAxOm5yb3coa2FyeWF3YW5fZ2FqaV90aW5nZ2kpKSB7DQogIGNhdChzcHJpbnRmKCJOYW1lOiAlcywgU2FsYXJ5OiAlZFxuIiwga2FyeWF3YW5fZ2FqaV90aW5nZ2kkTmFtYVtpXSwga2FyeWF3YW5fZ2FqaV90aW5nZ2kkR2FqaVtpXSkpICMgTWVuYW1waWxrYW4gaW5mb3JtYXNpIGthcnlhd2FuIGRhbGFtIGZvcm1hdCAiTmFtZTogTmFtYSwgU2FsYXJ5OiBHYWppIg0KfQ0KYGBgDQojIyMgKioxLjIuMiBHdW5ha2FuICp3aGlsZSBsb29wKiB1bnR1ayBtZW5hbXBpbGthbiBrYXJ5YXdhbiBoaW5nZ2EgIk1hbmFqZXIiIGRpdGVtdWthbioqDQoNCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUV9DQojIE1lbWJ1YXQgZGF0YSBmcmFtZQ0KZGF0YV9rYXJ5YXdhbiA8LSBkYXRhLmZyYW1lKA0KICBOYW1hID0gYygiQmFnYXMiLCAiSm9hbiIsICJBbHlhIiwgIkR3aSIsICJOYWJpbCIpLCAgDQogIFBvc2lzaSA9IGMoIlN0YWZmIiwgIlN1cGVydmlzb3IiLCAiU3RhZmYiLCAiTWFuYWplciIsICJEaXJlY3RvciIpDQopDQoNCiMgTWVuYW1waWxrYW4gbGlzdCBrYXJ5YXdhbiBzYW1wYWkgbWVuZW11a2FuIGthdGEgIk1hbmFqZXIiDQppIDwtIDEgICMgTWVuZW50dWthbiBpbmRla3MgYXdhbCB1bnR1ayBsb29waW5nDQp3aGlsZSAoaSA8PSBucm93KGRhdGFfa2FyeWF3YW4pKSB7ICANCiAgIyBMb29wIGFrYW4gYmVyamFsYW4gc2VsYW1hIGluZGVrcyBtYXNpaCBkYWxhbSBiYXRhcyBqdW1sYWgga2FyeWF3YW4NCiAgaWYgKGRhdGFfa2FyeWF3YW4kUG9zaXNpW2ldID09ICJNYW5hamVyIikgeyAjIEppa2EgcG9zaXNpIGthcnlhd2FuIGFkYWxhaCAiTWFuYWplciIsIHRhbXBpbGthbiBkYW4gaGVudGlrYW4gbG9vcCANCiAgIGNhdCgiTmFtZToiLCBkYXRhX2thcnlhd2FuJE5hbWFbaV0sICIsIFBvc2l0aW9uOiIsIGRhdGFfa2FyeWF3YW4kUG9zaXNpW2ldLCAiKFN0b3AgaGVyZSlcbiIpICANCiAgICBicmVhayAgIyBNZW5naGVudGlrYW4gbG9vcCBzZXRlbGFoIG1lbmVtdWthbiAiTWFuYWplciINCiAgfSBlbHNlIHsNCiAgICBjYXQoIk5hbWU6IiwgZGF0YV9rYXJ5YXdhbiROYW1hW2ldLCAiLCBQb3NpdGlvbjoiLCBkYXRhX2thcnlhd2FuJFBvc2lzaVtpXSwgIlxuIikgIyBNZW5hbXBpbGthbiBuYW1hIGRhbiBwb3Npc2kga2FyeWF3YW4geWFuZyBidWthbiAiTWFuYWplciINCiAgfQ0KDQogIGkgPC0gaSArIDEgICMgVGFtYmFoIGluZGVrcw0KfQ0KYGBgDQojIyMgKioxLjIuMyBHdW5ha2FuICpicmVhayogdW50dWsgbWVuZ2hlbnRpa2FuIGxvb3Aga2V0aWthIGthcnlhd2FuIGRlbmdhbiBnYWppIGRpIGF0YXMgMTAuMDAwIGRpdGVtdWthbioqDQoNCmBgYHtyIGVjaG89VFJVRSwgbWVzc2FnZT1UUlVFLCB3YXJuaW5nPVRSVUV9DQojIE1lbWJ1YXQgZGF0YSBmcmFtZQ0KZGF0YV9rYXJ5YXdhbiA8LSBkYXRhLmZyYW1lKA0KICBOYW1lID0gYygiQmFnYXMiLCAiSm9hbiIsICJBbHlhIiwgIkR3aSIsICJOYWJpbCIpLCAgDQogIFNhbGFyeSA9IGMoNTAwMCwgNzAwMCwgNjUwMCwgMTAwMDAsIDEyMDAwKSANCikNCg0KIyBMb29wIG1lbGFsdWkgZGF0YSBrYXJ5YXdhbg0KZm9yIChpIGluIDE6bnJvdyhkYXRhX2thcnlhd2FuKSkgeyAgDQogICMgSmlrYSBnYWppIGRpIGF0YXMgMTAuMDAwLCBoZW50aWthbiBsb29wIHNlYmVsdW0gbWVuY2V0YWsgZGF0YSB0ZXJzZWJ1dA0KICBpZiAoZGF0YV9rYXJ5YXdhbiRTYWxhcnlbaV0gPiAxMDAwMCkgeyAgDQogICAgY2F0KCIoU3RvcHBlZCBiZWNhdXNlIE5hYmlsIGhhcyBhIHNhbGFyeSBhYm92ZSAxMCwwMDApXG4iKSAgIyBNZW5hbXBpbGthbiBwZXNhbiBiZXJoZW50aQ0KICAgIGJyZWFrICAjIEhlbnRpa2FuIGxvb3ANCiAgfQ0KICANCiAgIyBNZW5hbXBpbGthbiBuYW1hIGRhbiBnYWppDQogIGNhdCgiTmFtZToiLCBkYXRhX2thcnlhd2FuJE5hbWVbaV0sICIsIFNhbGFyeToiLCBkYXRhX2thcnlhd2FuJFNhbGFyeVtpXSwgIlxuIikNCn0NCg0KYGBgDQojIyMgKioxLjIuNCBHdW5ha2FuICpMYW5qdXRrYW4qIHVudHVrICptZWxld2F0aSoga2FyeWF3YW4gZGVuZ2FuIGtpbmVyamEgIlJhdGEtcmF0YSIqKg0KDQpgYGB7ciBlY2hvPVRSVUUsIG1lc3NhZ2U9VFJVRSwgd2FybmluZz1UUlVFfQ0KZGF0YV9rYXJ5YXdhbiA8LSBkYXRhLmZyYW1lKA0KICBOYW1lID0gYygiQmFnYXMiLCAiSm9hbiIsICJBbHlhIiwgIkR3aSIsICJOYWJpbCIpLCAgDQogIFBlcmZvcm1hbmNlID0gYygiR29vZCIsICJWZXJ5IEdvb2QiLCAiQXZlcmFnZSIsICJHb29kIiwgIlZlcnkgR29vZCIpIA0KKQ0KDQojIExvb3AgbWVsYWx1aSBzZXRpYXAgYmFyaXMgZGF0YSBrYXJ5YXdhbg0KZm9yIChpIGluIDE6bnJvdyhkYXRhX2thcnlhd2FuKSkgeyAjIExvb3AgbWVsYWx1aSBkYXRhIGthcnlhd2FuDQogIGlmIChkYXRhX2thcnlhd2FuJFBlcmZvcm1hbmNlW2ldID09ICJBdmVyYWdlIikgeyAgIyBNZW5nZWNlayBhcGFrYWgga2FyeWF3YW4gbWVtaWxpa2kga2luZXJqYSAiQXZlcmFnZSINCiAgICBuZXh0ICMgTGV3YXRpIGl0ZXJhc2kgaW5pIGRhbiBsYW5qdXRrYW4ga2Uga2FyeWF3YW4gYmVyaWt1dG55YQ0KICB9DQogIHByaW50KHBhc3RlMCgiTmFtZTogIiwgZGF0YV9rYXJ5YXdhbiROYW1lW2ldLCAiLCBQZXJmb3JtYW5jZTogIiwgZGF0YV9rYXJ5YXdhbiRQZXJmb3JtYW5jZVtpXSkpICMgcHJpbnQgbmFtYSBkYW4ga2luZXJqYSB5YW5nIHRpZGFrIG1lbWlsaWtpIGtpbmVyamEgIkF2ZXJhZ2UiDQp9DQpjYXQoJyhBbHlhIGlzIHNraXBwZWQgYmVjYXVzZSB0aGUgcGVyZm9ybWFuY2UgaXMgIkF2ZXJhZ2UiKVxuJykgIyBNZW5hbXBpbGthbiBwZXNhbiBiYWh3YSBBbHlhIGRpbGV3YXRpIGthcmVuYSBtZW1pbGlraSBraW5lcmphICJBdmVyYWdlIg0KDQpgYGANCg0KDQoNCg0K