Central Tendency


Foto Kelompok 3

📘 1. Mean (Rata-rata)

🟢 Definisi: Mean adalah nilai rata-rata dari sekumpulan data. Dihitung dengan cara menjumlahkan seluruh data, lalu dibagi dengan banyaknya data.

🔹 Rumus: [ = ]

🔹 Contoh: Data: 4, 6, 8 [ = = 6]

📏 Aturan penggunaan:


📘 2. Median (Nilai Tengah)

🟢 Definisi: Median adalah nilai tengah dari data yang telah diurutkan dari kecil ke besar.

🔹 Cara menentukan:

  1. Urutkan data dari nilai terkecil ke terbesar.
  2. Jika jumlah data ganjil, median adalah nilai di tengah.
  3. Jika jumlah data genap, median adalah rata-rata dari dua nilai tengah.

🔹 Contoh: Data: 3, 5, 7 → Median = 5

Data: 2, 4, 6, 8 → Median = (4 + 6) / 2 = 5

📏 Aturan penggunaan:


📘 3. Modus (Mode)

🟢 Definisi: Modus adalah nilai yang paling sering muncul dalam suatu kumpulan data.

🔹 Contoh: Data: 2, 3, 3, 4, 5 → Modus = 3

Jika semua nilai muncul sama banyak, data disebut tidak memiliki modus. Jika ada dua nilai yang sama-sama paling sering muncul → bimodal. Lebih dari dua → multimodal.

📏 Aturan penggunaan:


📊 Kesimpulan perbandingan

Aspek Mean Median Modus
Jenis data Numerik Numerik Kategorik/Numerik
Pengaruh outlier Terpengaruh Tidak terpengaruh Tidak terpengaruh
Kegunaan utama Rata-rata umum Nilai tengah Nilai paling sering muncul
Cocok untuk Data normal/seimbang Data tidak simetris Data kategorik atau frekuensi tinggi

# --- 1. Load package yang dibutuhkan ---
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.5.2
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
library(modeest) # untuk menghitung modus
## Warning: package 'modeest' was built under R version 4.5.2
# --- 2. Import dataset ---
dataset <- read.csv("https://raw.githubusercontent.com/YanDraa/Dataweek6Statistika/main/4_Central_Tendency_Introduction_to_Statistics.csv")

# --- 3. Cek struktur data ---
str(dataset)
## 'data.frame':    200 obs. of  9 variables:
##  $ X              : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ CustomerID     : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ Age            : int  32 37 63 41 42 66 47 21 30 33 ...
##  $ Gender         : chr  "M" "F" "M" "M" ...
##  $ StoreLocation  : chr  "West" "South" "West" "North" ...
##  $ ProductCategory: chr  "Electronics" "Books" "Electronics" "Sports" ...
##  $ TotalPurchase  : int  528 72 327 391 514 381 510 102 559 27 ...
##  $ NumberOfVisits : int  4 4 4 7 7 6 5 4 2 5 ...
##  $ FeedbackScore  : int  1 5 2 1 5 3 1 2 2 2 ...
summary(dataset)
##        X            CustomerID          Age           Gender         
##  Min.   :  1.00   Min.   :  1.00   Min.   :18.00   Length:200        
##  1st Qu.: 50.75   1st Qu.: 50.75   1st Qu.:31.00   Class :character  
##  Median :100.50   Median :100.50   Median :39.00   Mode  :character  
##  Mean   :100.50   Mean   :100.50   Mean   :39.99                     
##  3rd Qu.:150.25   3rd Qu.:150.25   3rd Qu.:48.25                     
##  Max.   :200.00   Max.   :200.00   Max.   :70.00                     
##  StoreLocation      ProductCategory    TotalPurchase    NumberOfVisits  
##  Length:200         Length:200         Min.   :  11.0   Min.   : 1.000  
##  Class :character   Class :character   1st Qu.:  68.0   1st Qu.: 4.000  
##  Mode  :character   Mode  :character   Median : 108.5   Median : 5.000  
##                                        Mean   : 211.8   Mean   : 5.165  
##                                        3rd Qu.: 381.2   3rd Qu.: 7.000  
##                                        Max.   :1128.0   Max.   :11.000  
##  FeedbackScore
##  Min.   :1.0  
##  1st Qu.:1.0  
##  Median :3.0  
##  Mean   :2.8  
##  3rd Qu.:4.0  
##  Max.   :5.0
# --- 4. Hitung ukuran tendensi sentral ---

# TotalPurchase
mean_total <- mean(dataset$TotalPurchase, na.rm = TRUE)
median_total <- median(dataset$TotalPurchase, na.rm = TRUE)
mode_total <- mfv(dataset$TotalPurchase, na_rm = TRUE)

# Age
mean_age <- mean(dataset$Age, na.rm = TRUE)
median_age <- median(dataset$Age, na.rm = TRUE)
mode_age <- mfv(dataset$Age, na_rm = TRUE)

# NumberOfVisits
mean_visit <- mean(dataset$NumberOfVisits, na.rm = TRUE)
median_visit <- median(dataset$NumberOfVisits, na.rm = TRUE)
mode_visit <- mfv(dataset$NumberOfVisits, na_rm = TRUE)

# --- 5. Tampilkan hasil ---
cat("===== Central Tendency =====\n")
## ===== Central Tendency =====
cat("TotalPurchase -> Mean:", mean_total, " | Median:", median_total, " | Mode:", mode_total, "\n")
## TotalPurchase -> Mean: 211.795  | Median: 108.5  | Mode: 33
cat("Age -> Mean:", mean_age, " | Median:", median_age, " | Mode:", mode_age, "\n")
## Age -> Mean: 39.99  | Median: 39  | Mode: 18
cat("NumberOfVisits -> Mean:", mean_visit, " | Median:", median_visit, " | Mode:", mode_visit, "\n")
## NumberOfVisits -> Mean: 5.165  | Median: 5  | Mode: 5
# --- 6. Visualisasi Data ---

## 6a. Histogram TotalPurchase
ggplot(dataset, aes(x = TotalPurchase)) +
  geom_histogram(binwidth = 10, fill = "#4e79a7", color = "white") +
  geom_vline(aes(xintercept = median_total), color = "red", linetype = "dashed", linewidth = 1) +
  labs(title = "Distribusi TotalPurchase",
       x = "Total Purchase",
       y = "Frekuensi",
       subtitle = "Garis merah menunjukkan median") +
  theme_minimal()

## 6b. Boxplot TotalPurchase
ggplot(dataset, aes(y = TotalPurchase)) +
  geom_boxplot(fill = "#f28e2b", color = "black") +
  labs(title = "Boxplot TotalPurchase",
       y = "Total Purchase") +
  theme_minimal()

## 6c. Histogram Age
ggplot(dataset, aes(x = Age)) +
  geom_histogram(binwidth = 2, fill = "#59a14f", color = "white") +
  geom_vline(aes(xintercept = mean_age), color = "blue", linetype = "dashed", linewidth = 1) +
  labs(title = "Distribusi Usia Pelanggan (Age)",
       x = "Usia",
       y = "Frekuensi",
       subtitle = "Garis biru menunjukkan mean") +
  theme_minimal()

## 6d. Boxplot Age
ggplot(dataset, aes(y = Age)) +
  geom_boxplot(fill = "#edc948", color = "black") +
  labs(title = "Boxplot Usia Pelanggan",
       y = "Age") +
  theme_minimal()

## 6e. Histogram NumberOfVisits
ggplot(dataset, aes(x = NumberOfVisits)) +
  geom_histogram(binwidth = 1, fill = "#e15759", color = "white") +
  geom_vline(aes(xintercept = mean_visit), color = "blue", linetype = "dashed", linewidth = 1) +
  labs(title = "Distribusi Jumlah Kunjungan (NumberOfVisits)",
       x = "Jumlah Kunjungan",
       y = "Frekuensi",
       subtitle = "Garis biru menunjukkan mean") +
  theme_minimal()

## 6f. Boxplot NumberOfVisits
ggplot(dataset, aes(y = NumberOfVisits)) +
  geom_boxplot(fill = "#b07aa1", color = "black") +
  labs(title = "Boxplot Jumlah Kunjungan (NumberOfVisits)",
       y = "Number of Visits") +
  theme_minimal()

LS0tDQp0aXRsZTogIkNlbnRyYWwgVGVuZGVuY3kiDQphdXRob3I6DQotICJLZWxvbXBvayAzIiANCi0gIk5haWZhaCBFZHJpYSBBcnRhICg1MjI1MDA1NikiDQotICJMdWx1IE5hamxhIFNhbHNhYmlsYSAoNTIyNTAwNjkpIg0KLSAiTmFpbGEgU3lhaHJhbmkgUHV0cmkgKDUyMjUwMDcwKSINCi0gIk5pLiBNZCBBdXJvcmEgU2VrYXJuaW5ncnVtICg1MjI1MDA3MikiDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQotLS0NCg0KPGNlbnRlcj4NCjxpbWcgc3JjPSJDOi9Vc2Vycy9hY2VyL0RvY3VtZW50cy9XaGF0c0FwcCBJbWFnZSAyMDI1LTEwLTE2IGF0IDE4LjQyLjA2X2Y1NGNiNzliLmpwZyIgd2lkdGg9IjMwMCI+PGJyPg0KPGI+Rm90byBLZWxvbXBvayAzPC9iPg0KPC9jZW50ZXI+DQoNCg0KLS0tDQoNCvCfk5ggKjEuIE1lYW4gKFJhdGEtcmF0YSkqDQoNCirwn5+iIERlZmluaXNpOioNCk1lYW4gYWRhbGFoIG5pbGFpIHJhdGEtcmF0YSBkYXJpIHNla3VtcHVsYW4gZGF0YS4NCkRpaGl0dW5nIGRlbmdhbiBjYXJhIG1lbmp1bWxhaGthbiBzZWx1cnVoIGRhdGEsIGxhbHUgZGliYWdpIGRlbmdhbiBiYW55YWtueWEgZGF0YS4NCg0KKvCflLkgUnVtdXM6Kg0KWw0KXHRleHR7TWVhbn0gPSBcZnJhY3tcdGV4dHtKdW1sYWggc2VsdXJ1aCBkYXRhfX17XHRleHR7QmFueWFrbnlhIGRhdGF9fQ0KXQ0KDQoq8J+UuSBDb250b2g6Kg0KRGF0YTogNCwgNiwgOA0KWw0KXHRleHR7TWVhbn0gPSBcZnJhY3s0ICsgNiArIDh9ezN9ID0gNg0KXQ0KDQoq8J+TjyBBdHVyYW4gcGVuZ2d1bmFhbjoqDQoNCiogR3VuYWthbiAqbWVhbiogamlrYSBkYXRhIGJlcnNpZmF0ICpudW1lcmlrKiBkYW4gKnRpZGFrIG1lbWlsaWtpIHBlbmNpbGFuIGVrc3RyZW0qIChvdXRsaWVyKS4NCiogQ29jb2sgdW50dWsgZGF0YSAqZGlzdHJpYnVzaSBub3JtYWwqIGF0YXUgc2VpbWJhbmcuDQoqIEt1cmFuZyB0ZXBhdCBqaWthIGFkYSBuaWxhaSB5YW5nIHRlcmxhbHUgYmVzYXIgYXRhdSBrZWNpbCBrYXJlbmEgYmlzYSAqbWVtcGVuZ2FydWhpIHJhdGEtcmF0YSouDQoNCi0tLQ0KDQrwn5OYICoyLiBNZWRpYW4gKE5pbGFpIFRlbmdhaCkqDQoNCirwn5+iIERlZmluaXNpOioNCk1lZGlhbiBhZGFsYWggKm5pbGFpIHRlbmdhaCogZGFyaSBkYXRhIHlhbmcgdGVsYWggKmRpdXJ1dGthbiogZGFyaSBrZWNpbCBrZSBiZXNhci4NCg0KKvCflLkgQ2FyYSBtZW5lbnR1a2FuOioNCg0KMS4gVXJ1dGthbiBkYXRhIGRhcmkgbmlsYWkgdGVya2VjaWwga2UgdGVyYmVzYXIuDQoyLiBKaWthIGp1bWxhaCBkYXRhICpnYW5qaWwqLCBtZWRpYW4gYWRhbGFoIG5pbGFpIGRpIHRlbmdhaC4NCjMuIEppa2EganVtbGFoIGRhdGEgKmdlbmFwKiwgbWVkaWFuIGFkYWxhaCByYXRhLXJhdGEgZGFyaSBkdWEgbmlsYWkgdGVuZ2FoLg0KDQoq8J+UuSBDb250b2g6Kg0KRGF0YTogMywgNSwgNw0K4oaSIE1lZGlhbiA9IDUNCg0KRGF0YTogMiwgNCwgNiwgOA0K4oaSIE1lZGlhbiA9ICg0ICsgNikgLyAyID0gNQ0KDQoq8J+TjyBBdHVyYW4gcGVuZ2d1bmFhbjoqDQoNCiogR3VuYWthbiAqbWVkaWFuKiBqaWthIGRhdGEgbWVtaWxpa2kgKnBlbmNpbGFuIChvdXRsaWVyKSogYXRhdSBkaXN0cmlidXNpICp0aWRhayBzaW1ldHJpcyouDQoqIE1lZGlhbiBsZWJpaCAqdGFoYW4gdGVyaGFkYXAgbmlsYWkgZWtzdHJlbSogZGliYW5kaW5nIG1lYW4uDQoNCi0tLQ0KDQrwn5OYICozLiBNb2R1cyAoTW9kZSkqDQoNCirwn5+iIERlZmluaXNpOioNCk1vZHVzIGFkYWxhaCAqbmlsYWkgeWFuZyBwYWxpbmcgc2VyaW5nIG11bmN1bCogZGFsYW0gc3VhdHUga3VtcHVsYW4gZGF0YS4NCg0KKvCflLkgQ29udG9oOioNCkRhdGE6IDIsIDMsIDMsIDQsIDUNCuKGkiBNb2R1cyA9IDMNCg0KSmlrYSBzZW11YSBuaWxhaSBtdW5jdWwgc2FtYSBiYW55YWssIGRhdGEgZGlzZWJ1dCAqdGlkYWsgbWVtaWxpa2kgbW9kdXMqLg0KSmlrYSBhZGEgZHVhIG5pbGFpIHlhbmcgc2FtYS1zYW1hIHBhbGluZyBzZXJpbmcgbXVuY3VsIOKGkiAqYmltb2RhbCouDQpMZWJpaCBkYXJpIGR1YSDihpIgKm11bHRpbW9kYWwqLg0KDQoq8J+TjyBBdHVyYW4gcGVuZ2d1bmFhbjoqDQoNCiogQ29jb2sgZGlndW5ha2FuIHVudHVrICpkYXRhIGthdGVnb3JpayAobm9uLWFuZ2thKSogYXRhdSAqZGF0YSBkaXNrcml0Ki4NCiAgKG1pc2FsOiB3YXJuYSBmYXZvcml0LCBqZW5pcyBwcm9kdWsgcGFsaW5nIGxha3UpDQoqIEp1Z2EgYmlzYSBkaWd1bmFrYW4gdW50dWsgbWVsaWhhdCAqbmlsYWkgcGFsaW5nIHVtdW0qIGRhbGFtIGRhdGEgbnVtZXJpay4NCg0KLS0tDQoNCvCfk4ogKktlc2ltcHVsYW4gcGVyYmFuZGluZ2FuKg0KDQp8IEFzcGVrICAgICAgICAgICAgfCBNZWFuICAgICAgICAgICAgICAgICB8IE1lZGlhbiAgICAgICAgICAgICAgfCBNb2R1cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgSmVuaXMgZGF0YSAgICAgICB8IE51bWVyaWsgICAgICAgICAgICAgIHwgTnVtZXJpayAgICAgICAgICAgICB8IEthdGVnb3Jpay9OdW1lcmlrICAgICAgICAgICAgICAgICAgICB8DQp8IFBlbmdhcnVoIG91dGxpZXIgfCBUZXJwZW5nYXJ1aCAgICAgICAgICB8IFRpZGFrIHRlcnBlbmdhcnVoICAgfCBUaWRhayB0ZXJwZW5nYXJ1aCAgICAgICAgICAgICAgICAgICAgfA0KfCBLZWd1bmFhbiB1dGFtYSAgIHwgUmF0YS1yYXRhIHVtdW0gICAgICAgfCBOaWxhaSB0ZW5nYWggICAgICAgIHwgTmlsYWkgcGFsaW5nIHNlcmluZyBtdW5jdWwgICAgICAgICAgIHwNCnwgQ29jb2sgdW50dWsgICAgICB8IERhdGEgbm9ybWFsL3NlaW1iYW5nIHwgRGF0YSB0aWRhayBzaW1ldHJpcyB8IERhdGEga2F0ZWdvcmlrIGF0YXUgZnJla3VlbnNpIHRpbmdnaSB8DQoNCi0tLQ0KDQpgYGB7cn0NCiMgLS0tIDEuIExvYWQgcGFja2FnZSB5YW5nIGRpYnV0dWhrYW4gLS0tDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShtb2RlZXN0KSAjIHVudHVrIG1lbmdoaXR1bmcgbW9kdXMNCg0KIyAtLS0gMi4gSW1wb3J0IGRhdGFzZXQgLS0tDQpkYXRhc2V0IDwtIHJlYWQuY3N2KCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vWWFuRHJhYS9EYXRhd2VlazZTdGF0aXN0aWthL21haW4vNF9DZW50cmFsX1RlbmRlbmN5X0ludHJvZHVjdGlvbl90b19TdGF0aXN0aWNzLmNzdiIpDQoNCiMgLS0tIDMuIENlayBzdHJ1a3R1ciBkYXRhIC0tLQ0Kc3RyKGRhdGFzZXQpDQpzdW1tYXJ5KGRhdGFzZXQpDQoNCiMgLS0tIDQuIEhpdHVuZyB1a3VyYW4gdGVuZGVuc2kgc2VudHJhbCAtLS0NCg0KIyBUb3RhbFB1cmNoYXNlDQptZWFuX3RvdGFsIDwtIG1lYW4oZGF0YXNldCRUb3RhbFB1cmNoYXNlLCBuYS5ybSA9IFRSVUUpDQptZWRpYW5fdG90YWwgPC0gbWVkaWFuKGRhdGFzZXQkVG90YWxQdXJjaGFzZSwgbmEucm0gPSBUUlVFKQ0KbW9kZV90b3RhbCA8LSBtZnYoZGF0YXNldCRUb3RhbFB1cmNoYXNlLCBuYV9ybSA9IFRSVUUpDQoNCiMgQWdlDQptZWFuX2FnZSA8LSBtZWFuKGRhdGFzZXQkQWdlLCBuYS5ybSA9IFRSVUUpDQptZWRpYW5fYWdlIDwtIG1lZGlhbihkYXRhc2V0JEFnZSwgbmEucm0gPSBUUlVFKQ0KbW9kZV9hZ2UgPC0gbWZ2KGRhdGFzZXQkQWdlLCBuYV9ybSA9IFRSVUUpDQoNCiMgTnVtYmVyT2ZWaXNpdHMNCm1lYW5fdmlzaXQgPC0gbWVhbihkYXRhc2V0JE51bWJlck9mVmlzaXRzLCBuYS5ybSA9IFRSVUUpDQptZWRpYW5fdmlzaXQgPC0gbWVkaWFuKGRhdGFzZXQkTnVtYmVyT2ZWaXNpdHMsIG5hLnJtID0gVFJVRSkNCm1vZGVfdmlzaXQgPC0gbWZ2KGRhdGFzZXQkTnVtYmVyT2ZWaXNpdHMsIG5hX3JtID0gVFJVRSkNCg0KIyAtLS0gNS4gVGFtcGlsa2FuIGhhc2lsIC0tLQ0KY2F0KCI9PT09PSBDZW50cmFsIFRlbmRlbmN5ID09PT09XG4iKQ0KY2F0KCJUb3RhbFB1cmNoYXNlIC0+IE1lYW46IiwgbWVhbl90b3RhbCwgIiB8IE1lZGlhbjoiLCBtZWRpYW5fdG90YWwsICIgfCBNb2RlOiIsIG1vZGVfdG90YWwsICJcbiIpDQpjYXQoIkFnZSAtPiBNZWFuOiIsIG1lYW5fYWdlLCAiIHwgTWVkaWFuOiIsIG1lZGlhbl9hZ2UsICIgfCBNb2RlOiIsIG1vZGVfYWdlLCAiXG4iKQ0KY2F0KCJOdW1iZXJPZlZpc2l0cyAtPiBNZWFuOiIsIG1lYW5fdmlzaXQsICIgfCBNZWRpYW46IiwgbWVkaWFuX3Zpc2l0LCAiIHwgTW9kZToiLCBtb2RlX3Zpc2l0LCAiXG4iKQ0KDQojIC0tLSA2LiBWaXN1YWxpc2FzaSBEYXRhIC0tLQ0KDQojIyA2YS4gSGlzdG9ncmFtIFRvdGFsUHVyY2hhc2UNCmdncGxvdChkYXRhc2V0LCBhZXMoeCA9IFRvdGFsUHVyY2hhc2UpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMTAsIGZpbGwgPSAiIzRlNzlhNyIsIGNvbG9yID0gIndoaXRlIikgKw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuX3RvdGFsKSwgY29sb3IgPSAicmVkIiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgbGluZXdpZHRoID0gMSkgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1c2kgVG90YWxQdXJjaGFzZSIsDQogICAgICAgeCA9ICJUb3RhbCBQdXJjaGFzZSIsDQogICAgICAgeSA9ICJGcmVrdWVuc2kiLA0KICAgICAgIHN1YnRpdGxlID0gIkdhcmlzIG1lcmFoIG1lbnVuanVra2FuIG1lZGlhbiIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiMjIDZiLiBCb3hwbG90IFRvdGFsUHVyY2hhc2UNCmdncGxvdChkYXRhc2V0LCBhZXMoeSA9IFRvdGFsUHVyY2hhc2UpKSArDQogIGdlb21fYm94cGxvdChmaWxsID0gIiNmMjhlMmIiLCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IFRvdGFsUHVyY2hhc2UiLA0KICAgICAgIHkgPSAiVG90YWwgUHVyY2hhc2UiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIyA2Yy4gSGlzdG9ncmFtIEFnZQ0KZ2dwbG90KGRhdGFzZXQsIGFlcyh4ID0gQWdlKSkgKw0KICBnZW9tX2hpc3RvZ3JhbShiaW53aWR0aCA9IDIsIGZpbGwgPSAiIzU5YTE0ZiIsIGNvbG9yID0gIndoaXRlIikgKw0KICBnZW9tX3ZsaW5lKGFlcyh4aW50ZXJjZXB0ID0gbWVhbl9hZ2UpLCBjb2xvciA9ICJibHVlIiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgbGluZXdpZHRoID0gMSkgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1c2kgVXNpYSBQZWxhbmdnYW4gKEFnZSkiLA0KICAgICAgIHggPSAiVXNpYSIsDQogICAgICAgeSA9ICJGcmVrdWVuc2kiLA0KICAgICAgIHN1YnRpdGxlID0gIkdhcmlzIGJpcnUgbWVudW5qdWtrYW4gbWVhbiIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiMjIDZkLiBCb3hwbG90IEFnZQ0KZ2dwbG90KGRhdGFzZXQsIGFlcyh5ID0gQWdlKSkgKw0KICBnZW9tX2JveHBsb3QoZmlsbCA9ICIjZWRjOTQ4IiwgY29sb3IgPSAiYmxhY2siKSArDQogIGxhYnModGl0bGUgPSAiQm94cGxvdCBVc2lhIFBlbGFuZ2dhbiIsDQogICAgICAgeSA9ICJBZ2UiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIyA2ZS4gSGlzdG9ncmFtIE51bWJlck9mVmlzaXRzDQpnZ3Bsb3QoZGF0YXNldCwgYWVzKHggPSBOdW1iZXJPZlZpc2l0cykpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxLCBmaWxsID0gIiNlMTU3NTkiLCBjb2xvciA9ICJ3aGl0ZSIpICsNCiAgZ2VvbV92bGluZShhZXMoeGludGVyY2VwdCA9IG1lYW5fdmlzaXQpLCBjb2xvciA9ICJibHVlIiwgbGluZXR5cGUgPSAiZGFzaGVkIiwgbGluZXdpZHRoID0gMSkgKw0KICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1c2kgSnVtbGFoIEt1bmp1bmdhbiAoTnVtYmVyT2ZWaXNpdHMpIiwNCiAgICAgICB4ID0gIkp1bWxhaCBLdW5qdW5nYW4iLA0KICAgICAgIHkgPSAiRnJla3VlbnNpIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJHYXJpcyBiaXJ1IG1lbnVuanVra2FuIG1lYW4iKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIyA2Zi4gQm94cGxvdCBOdW1iZXJPZlZpc2l0cw0KZ2dwbG90KGRhdGFzZXQsIGFlcyh5ID0gTnVtYmVyT2ZWaXNpdHMpKSArDQogIGdlb21fYm94cGxvdChmaWxsID0gIiNiMDdhYTEiLCBjb2xvciA9ICJibGFjayIpICsNCiAgbGFicyh0aXRsZSA9ICJCb3hwbG90IEp1bWxhaCBLdW5qdW5nYW4gKE51bWJlck9mVmlzaXRzKSIsDQogICAgICAgeSA9ICJOdW1iZXIgb2YgVmlzaXRzIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA==