Assignment Week-2

Logo


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