Pendahuluan

Dalam industri minuman yang kompetitif, memahami profitabilitas antar lini produk merupakan kunci dalam merancang strategi bisnis yang efektif. Analisis ini berfokus pada perbandingan performa finansial antar kategori produk pada jaringan Coffee Chain di wilayah Mexico, berdasarkan data historis yang mencakup variabel penjualan, biaya, dan profit.

Data yang digunakan menyediakan informasi lengkap mengenai transaksi penjualan berdasarkan lokasi geografis dan kategori produk. Fokus diarahkan pada dua lini produk, yaitu Beans dan Leaves, dengan variabel Profit sebagai indikator utama untuk menilai kinerja finansial masing-masing kategori.

Karena data profit cenderung tidak berdistribusi normal, digunakan pendekatan non-parametrik untuk melakukan perbandingan yang lebih andal. Hasil analisis ini bertujuan memberikan wawasan strategis mengenai lini produk yang paling menguntungkan di pasar Mexico, serta menjadi dasar dalam pengambilan keputusan bisnis dan pengembangan produk ke depan.

Data

Source Code

Sebelum melakukan analisis data, langkah pertama yang perlu dilakukan adalah mengaktifkan beberapa library di R yang diperlukan untuk membaca data.

library(readxl)
library(dplyr)
library(tidyverse)
library(ggpubr)
library(ggplot2)

Input Data

Input data yang akan digunakan dalam pengujian ini

data <- read_excel("C:/Users/Asus/Documents/SIM/3. CM1 - Coffee Chain Datasets/3. CM1 - Coffee Chain Datasets.xlsx")

Untuk menganalisis pada pasar Mexico data yang digunakan mencakup 168 observasi dengan dua variabel, yaitu Product Line yang terdiri dari kategori Beans dan Leaves, serta Profit yang menunjukkan nilai keuntungan atau kerugian.

library(dplyr)
library(tidyverse)
data_Mexico <- data %>%
  filter(State == "New Mexico") %>%
  select(`Product Line`, Profit)
data_Mexico
## # A tibble: 168 × 2
##    `Product Line` Profit
##    <chr>           <dbl>
##  1 Beans             -10
##  2 Beans               9
##  3 Leaves             11
##  4 Leaves              4
##  5 Beans              -8
##  6 Beans              26
##  7 Beans             -39
##  8 Beans              -7
##  9 Beans               8
## 10 Leaves             10
## # ℹ 158 more rows
DT::datatable(data_Mexico)

Analisis Data

Uji Normalitas

Uji normalitas adalah prosedur statistik yang digunakan untuk menentukan apakah suatu dataset mengikuti distribusi normal. Uji ini penting karena banyak metode analisis statistik, seperti t-test dan ANOVA, mengasumsikan bahwa data berdistribusi normal. Beberapa metode yang umum digunakan untuk uji normalitas termasuk uji Shapiro-Wilk, Kolmogorov-Smirnov, dan analisis grafik seperti histogram dan plot Q-Q. Hasil dari uji ini membantu peneliti memutuskan langkah selanjutnya dalam analisis data.

  1. Hipotesis
    \(H_0\) : Data berdistribusi normal.
    \(H_1\) : Data tidak berdistribusi normal.
  2. Taraf Signifikansi (\(\alpha\))
    \(\alpha = 0.05\)
  3. Daerah Kritis
    Tolak \(H_0\) jika p-value \(< \alpha\)
  4. Statistik Uji
    Untuk melakukan uji Normalitas di R dapat menggunakan syntax shapiro.test()
library(ggpubr)
shapiro.test(data_Mexico$Profit)
## 
##  Shapiro-Wilk normality test
## 
## data:  data_Mexico$Profit
## W = 0.97028, p-value = 0.001138
  1. Kesimpulan
    Berdasarkan hasil uji Normalitas, diperoleh nilai p-value yang lebih kecil dari 0.05. Oleh karena itu, \(H_0\) ditolak, sehingga dapat disimpulkan bahwa data tidak berdistribusi normal.
ggqqplot(data_Mexico$Profit)


Grafik ini menunjukkan bahwa sumbu x merepresentasikan nilai teoritis distribusi normal standar, sedangkan sumbu y menunjukkan nilai sampel profit yang diamati, di mana titik data umumnya mengikuti garis linear di tengah, tetapi menyimpang di ujung, mengindikasikan distribusi profit memiliki ekor yang lebih tebal dengan beberapa nilai ekstrem.

Uji Mann Whitney

Uji Mann-Whitney, atau uji Wilcoxon rank-sum, adalah metode statistik non-parametrik yang digunakan untuk menentukan apakah dua kelompok independen berasal dari distribusi yang sama atau tidak. Berbeda dengan uji parametrik seperti t-test, uji ini tidak memerlukan asumsi normalitas, sehingga lebih tahan terhadap outlier. Prosesnya melibatkan penggabungan data dari kedua kelompok, memberikan peringkat, dan membandingkan jumlah peringkat untuk mengidentifikasi perbedaan. Nilai p yang dihasilkan menunjukkan probabilitas perbedaan yang diamati terjadi secara kebetulan, dengan nilai p kecil (umumnya <0.05) mengindikasikan perbedaan yang signifikan secara statistik.

Rumus Uji Mann-Whitney (Z-transformasi) yang digunakan untuk sampel besar \[ Z = \frac{U - \frac{n_1 \cdot n_2}{2}}{\sqrt{\frac{n_1 \cdot n_2 \cdot (n_1 + n_2 + 1)}{12}}} \]

Keterangan :

  • \(Z\) : nilai Z hasil transformasi uji Mann-Whitney
  • \(U\) : nilai statistik Mann-Whitney
  • \(n_1\) : jumlah sampel pada kelompok 1
  • \(n_2\) : jumlah sampel pada kelompok 2

Uji Mann-Whitney
1. Hipotesis
\(H_0\) : Tidak ada perbedaan distribusi profit antara kelompok Product Line atau median profit kedua kelompok adalah sama.
\(H_1\) : Ada perbedaan distribusi profit antara kelompok Product Line atau median profit kedua kelompok tidak sama.
2. Taraf Signifikansi (\(\alpha\)) \(\alpha = 0.05\)
3. Daerah Kritis Tolak \(H_0\) jika p-value \(< \alpha\)
4. Statistik Uji Untuk melakukan uji Wilcoxon di R dapat menggunakan syntax wilcox.test()

wilcox.test(Profit ~ `Product Line`, data = data_Mexico)
## 
##  Wilcoxon rank sum test with continuity correction
## 
## data:  Profit by Product Line
## W = 2015, p-value = 0.002397
## alternative hypothesis: true location shift is not equal to 0
  1. Kesimpulan
    Berdasarkan hasil uji Wilcoxon, diperoleh nilai p-value yang lebih kecil dari 0.05. Oleh karena itu, \(H_0\) ditolak, sehingga dapat disimpulkan bahwa terdapat perbedaan signifikan dalam profit berdasarkan kategori Product Line di Mexico.

Median

Setelah melakukan Uji Mann-Whitney, ditemukan bahwa terdapat perbedaan signifikan dalam profit antara kategori Product Line di Mexico.

data_Mexico %>%
  group_by(`Product Line`) %>%
  summarise(
    Median_Profit = median(Profit),
    Mean_Profit = mean(Profit),
    Count = n()
  )
## # A tibble: 2 × 4
##   `Product Line` Median_Profit Mean_Profit Count
##   <chr>                  <dbl>       <dbl> <int>
## 1 Beans                     -4        1.85   120
## 2 Leaves                    11       12.0     48

Data menunjukkan perbedaan pada mean profit, dengan Beans menghasilkan rata-rata 1.85 dari 120 transaksi, sementara Leaves menghasilkan rata-rata yang jauh lebih tinggi yaitu 12.0 dari 48 transaksi. Perbedaan ini secara statistik signifikan berdasarkan uji Mann-Whitney, mengindikasikan bahwa produk Leaves secara konsisten menghasilkan profit yang lebih tinggi dibandingkan Beans, meskipun Beans memiliki volume transaksi yang lebih banyak. Hal ini menunjukkan bahwa meskipun produk Beans lebih sering terjual, produk Leaves memberikan kontribusi profit yang lebih besar per transaksi.

Median profit untuk produk Beans

median_Beans <- median(data_Mexico$Profit[data_Mexico$`Product Line` == "Beans"])
median_Beans
## [1] -4

Hasil uji menunjukkan perbedaan signifikan antara produk Beans dan Leaves. Dari analisis median profit, terlihat bahwa produk Beans memiliki median profit negatif sebesar -4.

Median profit untuk produk Leaves

median_Leaves <- median(data_Mexico$Profit[data_Mexico$`Product Line` == "Leaves"])
median_Leaves
## [1] 11

Hasil uji menunjukkan perbedaan signifikan antara produk Beans dan Leaves. Dari analisis median profit, terlihat bahwa produk Leaves memiliki median profit positif sebesar 11.

Visualisasi

Box Plot

ggplot(data_Mexico, aes(x = `Product Line`, y = Profit, fill = `Product Line`)) +
  geom_boxplot() +
  scale_fill_manual(values = c("Beans" = "pink", "Leaves" = "skyblue")) +
  labs(title = "Perbandingan Profit: Beans vs Leaves di Mexico") +
  theme_minimal()


Produk Beans (warna pink) menunjukkan distribusi profit yang lebih rendah dan bervariasi, dengan median sekitar -2 hingga 0, interkuartil range yang lebar, serta outlier negatif ekstrem yang mencerminkan kerugian signifikan. Sebaliknya, produk Leaves (warna biru muda) memiliki profit yang lebih tinggi dan stabil, dengan median sekitar 11–12, kotak interkuartil sempit di wilayah positif, serta tidak menunjukkan nilai ekstrem. Perbedaan distribusi ini sejalan dengan hasil uji Mann-Whitney yang menunjukkan bahwa Leaves memberikan profit yang secara signifikan lebih tinggi dan konsisten dibanding Beans.

Histogram

ggplot(data_Mexico, aes(x = Profit, fill = `Product Line`)) +
  geom_histogram(binwidth = 10, color = "black", alpha = 0.7) +
  scale_fill_manual(values = c("Beans" = "pink", "Leaves" = "skyblue")) +
  facet_wrap(~ `Product Line`, scales = "free_y") +
  labs(title = "Distribusi Profit per Product Line di Mexico",
       x = "Profit",
       y = "Frekuensi") +
  theme_minimal()


Pada Histogram menunjukkan perbedaan mencolok antara produk Beans dan Leaves. Produk Beans (warna pink) memiliki distribusi profit yang relatif normal namun sedikit miring ke kiri, dengan sebaran lebar dari nilai negatif hingga positif rendah dan frekuensi tertinggi di sekitar 0, mencerminkan banyaknya transaksi dengan profit rendah atau bahkan kerugian konsisten dengan median profit negatif (-4). Sebaliknya, produk Leaves (warna biru muda) menunjukkan distribusi sempit dan terpusat sepenuhnya di area positif, dengan puncak frekuensi pada profit 10–15 dan tanpa adanya transaksi merugi. Meskipun Beans memiliki volume transaksi lebih banyak, Leaves secara konsisten memberikan profit yang lebih tinggi dan stabil.

Kesimpulan

Berdasarkan seluruh analisis data yang telah dilakukan, dapat disimpulkan bahwa: Terdapat perbedaan profitabilitas yang signifikan antara produk Beans dan Leaves di Mexico, yang dikonfirmasi melalui uji Mann-Whitney. Produk Leaves secara konsisten menunjukkan performa profit yang lebih unggul dibandingkan Beans dengan median profit sebesar 11, jauh di atas Beans yang memiliki median profit negatif (-4).

Dari visualisasi QQ-plot, terlihat bahwa distribusi profit secara keseluruhan cenderung mendekati distribusi normal pada bagian tengah, namun memiliki ekor yang lebih tebal (heavy tails) di kedua ujungnya, yang mengindikasikan adanya beberapa nilai ekstrem baik pada profit negatif maupun positif.

Boxplot menunjukkan bahwa Beans memiliki variabilitas profit yang lebih tinggi dengan beberapa outlier negatif yang ekstrem, sementara Leaves menampilkan distribusi profit yang lebih stabil dan seluruhnya berada di area positif. Hal ini menunjukkan Leaves merupakan produk dengan risiko kerugian lebih rendah.

Histogram semakin memperkuat temuan tersebut dengan memperlihatkan distribusi Beans yang menyebar dari nilai negatif hingga positif rendah, sedangkan distribusi Leaves terkonsentrasi pada nilai profit positif yang lebih tinggi tanpa adanya transaksi yang mengalami kerugian.

Meskipun Beans memiliki volume transaksi lebih banyak (120 transaksi dibandingkan 48 transaksi Leaves), produk Leaves terbukti memberikan kontribusi profit per transaksi yang jauh lebih besar dan lebih konsisten. Temuan ini memberikan implikasi strategis penting bagi perusahaan untuk mempertimbangkan fokus lebih besar pada pengembangan dan pemasaran produk Leaves guna mengoptimalkan profitabilitas di pasar Mexico.

LS0tDQp0aXRsZTogIkFuYWxpc2lzIFBlcmJhbmRpbmdhbiBQcm9maXRhYmlsaXRhcyBMaW5pIFByb2R1ayBLb3BpIGRhbiBUZWggZGkgUGFzYXIgTWV4aWNvIg0KYXV0aG9yOiAiVml2aWFuIEFpbGVlbiBIZXJzYWtlbnRqYW5hIg0KZGF0ZTogImA4IE1heSAyMDI1YCINCm91dHB1dDogb3BlbmludHJvOjpsYWJfcmVwb3J0DQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUpDQpgYGANCg0KPHN0eWxlPg0KYm9keSB7Zm9udC1mYW1pbHk6IlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgYmFja2dyb3VuZC1jb2xvcjojRkZGMkYyOw0KfQ0KLyogVGl0bGUgKi8NCi50aXRsZSwgLnN1YnRpdGxlIHsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgY29sb3I6ICMwMDAwMDA7DQogIA0KfQ0KLmF1dGhvci1kYXRlLWN1c3RvbSB7DQogIHRleHQtYWxpZ246IGxlZnQ7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogIzAwMDAwMDsNCiAgZm9udC1zaXplOiAxMHB4Ow0KICBtYXJnaW4tdG9wOiAtMTBweDsNCiAgbWFyZ2luLWJvdHRvbTogMjBweDsNCn0NCnRhYmxlLmRhdGFUYWJsZSB7DQogIGJhY2tncm91bmQtY29sb3I6IHdoaXRlICFpbXBvcnRhbnQ7DQogIGNvbG9yOiBibGFjayAhaW1wb3J0YW50Ow0KfQ0KaDF7dGV4dC1hbGlnbjogY2VudGVyOw0KZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQp9DQpoMnt0ZXh0LWFsaWduOiBhbGlnbiBsZWZ0Ow0KICBtYXJnaW4tYm90dG9tOiA1cHg7DQogIGZvbnQtc2l6ZTogMjBweDt9DQpoM3t0ZXh0LWFsaWduOiBhbGlnbiBsZWZ0Ow0KICAgZm9udC1zaXplOiAxNXB4fQ0KcCB7dGV4dC1hbGlnbjoganVzdGlmeTsNCmZvbnQtc2l6ZTogMTNweDsNCnRleHQtaW5kZW50OiAwOw0KfQ0KPC9zdHlsZT4NCg0KPGRpdiBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjogI0E5QjVERjsgcGFkZGluZzogMjBweDsgYm9yZGVyLXJhZGl1czogMTBweDsgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwwLDAsMC4xKTsiPg0KIyBQZW5kYWh1bHVhbg0KDQpEYWxhbSBpbmR1c3RyaSBtaW51bWFuIHlhbmcga29tcGV0aXRpZiwgbWVtYWhhbWkgcHJvZml0YWJpbGl0YXMgYW50YXIgbGluaSBwcm9kdWsgbWVydXBha2FuIGt1bmNpIGRhbGFtIG1lcmFuY2FuZyBzdHJhdGVnaSBiaXNuaXMgeWFuZyBlZmVrdGlmLiBBbmFsaXNpcyBpbmkgYmVyZm9rdXMgcGFkYSBwZXJiYW5kaW5nYW4gcGVyZm9ybWEgZmluYW5zaWFsIGFudGFyIGthdGVnb3JpIHByb2R1ayBwYWRhIGphcmluZ2FuIENvZmZlZSBDaGFpbiBkaSB3aWxheWFoIE1leGljbywgYmVyZGFzYXJrYW4gZGF0YSBoaXN0b3JpcyB5YW5nIG1lbmNha3VwIHZhcmlhYmVsIHBlbmp1YWxhbiwgYmlheWEsIGRhbiBwcm9maXQuDQoNCkRhdGEgeWFuZyBkaWd1bmFrYW4gbWVueWVkaWFrYW4gaW5mb3JtYXNpIGxlbmdrYXAgbWVuZ2VuYWkgdHJhbnNha3NpIHBlbmp1YWxhbiBiZXJkYXNhcmthbiBsb2thc2kgZ2VvZ3JhZmlzIGRhbiBrYXRlZ29yaSBwcm9kdWsuIEZva3VzIGRpYXJhaGthbiBwYWRhIGR1YSBsaW5pIHByb2R1aywgeWFpdHUgQmVhbnMgZGFuIExlYXZlcywgZGVuZ2FuIHZhcmlhYmVsIFByb2ZpdCBzZWJhZ2FpIGluZGlrYXRvciB1dGFtYSB1bnR1ayBtZW5pbGFpIGtpbmVyamEgZmluYW5zaWFsIG1hc2luZy1tYXNpbmcga2F0ZWdvcmkuDQoNCkthcmVuYSBkYXRhIHByb2ZpdCBjZW5kZXJ1bmcgdGlkYWsgYmVyZGlzdHJpYnVzaSBub3JtYWwsIGRpZ3VuYWthbiBwZW5kZWthdGFuIG5vbi1wYXJhbWV0cmlrIHVudHVrIG1lbGFrdWthbiBwZXJiYW5kaW5nYW4geWFuZyBsZWJpaCBhbmRhbC4gSGFzaWwgYW5hbGlzaXMgaW5pIGJlcnR1anVhbiBtZW1iZXJpa2FuIHdhd2FzYW4gc3RyYXRlZ2lzIG1lbmdlbmFpIGxpbmkgcHJvZHVrIHlhbmcgcGFsaW5nIG1lbmd1bnR1bmdrYW4gZGkgcGFzYXIgTWV4aWNvLCBzZXJ0YSBtZW5qYWRpIGRhc2FyIGRhbGFtIHBlbmdhbWJpbGFuIGtlcHV0dXNhbiBiaXNuaXMgZGFuIHBlbmdlbWJhbmdhbiBwcm9kdWsga2UgZGVwYW4uDQoNCiMgRGF0YXsudGFic2V0fQ0KPGRpdiBzdHlsZT0iY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjNzg4NkM3OyBwYWRkaW5nOiAyMHB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLDAsMCwwLjEpOyI+DQojIyBTb3VyY2UgQ29kZQ0KU2ViZWx1bSBtZWxha3VrYW4gYW5hbGlzaXMgZGF0YSwgbGFuZ2thaCBwZXJ0YW1hIHlhbmcgcGVybHUgZGlsYWt1a2FuIGFkYWxhaCBtZW5nYWt0aWZrYW4gYmViZXJhcGEgbGlicmFyeSBkaSBSIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBtZW1iYWNhIGRhdGEuDQpgYGB7ciwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShnZ3B1YnIpDQpsaWJyYXJ5KGdncGxvdDIpDQpgYGANCjwvZGl2Pg0KDQo8ZGl2IHN0eWxlPSJjb2xvcjogd2hpdGU7IGJhY2tncm91bmQtY29sb3I6ICM3ODg2Qzc7IHBhZGRpbmc6IDIwcHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsMCwwLDAuMSk7Ij4NCiMjIElucHV0IERhdGENCklucHV0IGRhdGEgeWFuZyBha2FuIGRpZ3VuYWthbiBkYWxhbSBwZW5ndWppYW4gaW5pDQpgYGB7cn0NCmRhdGEgPC0gcmVhZF9leGNlbCgiQzovVXNlcnMvQXN1cy9Eb2N1bWVudHMvU0lNLzMuIENNMSAtIENvZmZlZSBDaGFpbiBEYXRhc2V0cy8zLiBDTTEgLSBDb2ZmZWUgQ2hhaW4gRGF0YXNldHMueGxzeCIpDQpgYGANCg0KVW50dWsgbWVuZ2FuYWxpc2lzIHBhZGEgcGFzYXIgTWV4aWNvIGRhdGEgeWFuZyBkaWd1bmFrYW4gbWVuY2FrdXAgMTY4IG9ic2VydmFzaSBkZW5nYW4gZHVhIHZhcmlhYmVsLCB5YWl0dSBQcm9kdWN0IExpbmUgeWFuZyB0ZXJkaXJpIGRhcmkga2F0ZWdvcmkgQmVhbnMgZGFuIExlYXZlcywgc2VydGEgUHJvZml0IHlhbmcgbWVudW5qdWtrYW4gbmlsYWkga2V1bnR1bmdhbiBhdGF1IGtlcnVnaWFuLg0KDQpgYGB7ciwgd2FybmluZz1GQUxTRX0NCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmRhdGFfTWV4aWNvIDwtIGRhdGEgJT4lDQogIGZpbHRlcihTdGF0ZSA9PSAiTmV3IE1leGljbyIpICU+JQ0KICBzZWxlY3QoYFByb2R1Y3QgTGluZWAsIFByb2ZpdCkNCmRhdGFfTWV4aWNvDQpEVDo6ZGF0YXRhYmxlKGRhdGFfTWV4aWNvKQ0KYGBgDQo8L2Rpdj4NCiMgQW5hbGlzaXMgRGF0YXsudGFic2V0fQ0KPGRpdiBzdHlsZT0iY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjNzg4NkM3OyBwYWRkaW5nOiAyMHB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLDAsMCwwLjEpOyI+DQojIyBVamkgTm9ybWFsaXRhcw0KVWppIG5vcm1hbGl0YXMgYWRhbGFoIHByb3NlZHVyIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiB1bnR1ayBtZW5lbnR1a2FuIGFwYWthaCBzdWF0dSBkYXRhc2V0IG1lbmdpa3V0aSBkaXN0cmlidXNpIG5vcm1hbC4gVWppIGluaSBwZW50aW5nIGthcmVuYSBiYW55YWsgbWV0b2RlIGFuYWxpc2lzIHN0YXRpc3Rpaywgc2VwZXJ0aSB0LXRlc3QgZGFuIEFOT1ZBLCBtZW5nYXN1bXNpa2FuIGJhaHdhIGRhdGEgYmVyZGlzdHJpYnVzaSBub3JtYWwuIEJlYmVyYXBhIG1ldG9kZSB5YW5nIHVtdW0gZGlndW5ha2FuIHVudHVrIHVqaSBub3JtYWxpdGFzIHRlcm1hc3VrIHVqaSBTaGFwaXJvLVdpbGssIEtvbG1vZ29yb3YtU21pcm5vdiwgZGFuIGFuYWxpc2lzIGdyYWZpayBzZXBlcnRpIGhpc3RvZ3JhbSBkYW4gcGxvdCBRLVEuIEhhc2lsIGRhcmkgdWppIGluaSBtZW1iYW50dSBwZW5lbGl0aSBtZW11dHVza2FuIGxhbmdrYWggc2VsYW5qdXRueWEgZGFsYW0gYW5hbGlzaXMgZGF0YS4NCg0KMS4gKipIaXBvdGVzaXMqKjxicj4NCiAgICRIXzAkIDogRGF0YSBiZXJkaXN0cmlidXNpIG5vcm1hbC48YnI+DQogICAkSF8xJCA6IERhdGEgdGlkYWsgYmVyZGlzdHJpYnVzaSBub3JtYWwuDQoyLiAqKlRhcmFmIFNpZ25pZmlrYW5zaSAoJFxhbHBoYSQpKio8YnI+DQogICAkXGFscGhhID0gMC4wNSQNCjMuICoqRGFlcmFoIEtyaXRpcyoqPGJyPg0KICAgVG9sYWsgJEhfMCQgamlrYSAqcC12YWx1ZSogJDwgXGFscGhhJA0KNC4gKipTdGF0aXN0aWsgVWppKio8YnI+DQpVbnR1ayBtZWxha3VrYW4gdWppIE5vcm1hbGl0YXMgZGkgUiBkYXBhdCBtZW5nZ3VuYWthbiBzeW50YXggc2hhcGlyby50ZXN0KCkNCmBgYHtyLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeShnZ3B1YnIpDQpzaGFwaXJvLnRlc3QoZGF0YV9NZXhpY28kUHJvZml0KQ0KYGBgDQo1LiAqKktlc2ltcHVsYW4qKjxicj4NCkJlcmRhc2Fya2FuIGhhc2lsIHVqaSBOb3JtYWxpdGFzLCBkaXBlcm9sZWggbmlsYWkgcC12YWx1ZSB5YW5nIGxlYmloIGtlY2lsIGRhcmkgMC4wNS4NCk9sZWgga2FyZW5hIGl0dSwgJEhfMCQgZGl0b2xhaywgc2VoaW5nZ2EgZGFwYXQgZGlzaW1wdWxrYW4gYmFod2EgZGF0YSB0aWRhayBiZXJkaXN0cmlidXNpIG5vcm1hbC4NCg0KYGBge3J9DQpnZ3FxcGxvdChkYXRhX01leGljbyRQcm9maXQpDQpgYGANCjxicj4NCkdyYWZpayBpbmkgbWVudW5qdWtrYW4gYmFod2Egc3VtYnUgeCBtZXJlcHJlc2VudGFzaWthbiBuaWxhaSB0ZW9yaXRpcyBkaXN0cmlidXNpIG5vcm1hbCBzdGFuZGFyLCBzZWRhbmdrYW4gc3VtYnUgeSBtZW51bmp1a2thbiBuaWxhaSBzYW1wZWwgcHJvZml0IHlhbmcgZGlhbWF0aSwgZGkgbWFuYSB0aXRpayBkYXRhIHVtdW1ueWEgbWVuZ2lrdXRpIGdhcmlzIGxpbmVhciBkaSB0ZW5nYWgsIHRldGFwaSBtZW55aW1wYW5nIGRpIHVqdW5nLCBtZW5naW5kaWthc2lrYW4gZGlzdHJpYnVzaSBwcm9maXQgbWVtaWxpa2kgZWtvciB5YW5nIGxlYmloIHRlYmFsIGRlbmdhbiBiZWJlcmFwYSBuaWxhaSBla3N0cmVtLg0KPC9kaXY+DQoNCjxkaXYgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjogIzc4ODZDNzsgcGFkZGluZzogMjBweDsgYm9yZGVyLXJhZGl1czogMTBweDsgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwwLDAsMC4xKTsiPg0KIyMgVWppIE1hbm4gV2hpdG5leQ0KVWppIE1hbm4tV2hpdG5leSwgYXRhdSB1amkgV2lsY294b24gcmFuay1zdW0sIGFkYWxhaCBtZXRvZGUgc3RhdGlzdGlrIG5vbi1wYXJhbWV0cmlrIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lbmVudHVrYW4gYXBha2FoIGR1YSBrZWxvbXBvayBpbmRlcGVuZGVuIGJlcmFzYWwgZGFyaSBkaXN0cmlidXNpIHlhbmcgc2FtYSBhdGF1IHRpZGFrLiBCZXJiZWRhIGRlbmdhbiB1amkgcGFyYW1ldHJpayBzZXBlcnRpIHQtdGVzdCwgdWppIGluaSB0aWRhayBtZW1lcmx1a2FuIGFzdW1zaSBub3JtYWxpdGFzLCBzZWhpbmdnYSBsZWJpaCB0YWhhbiB0ZXJoYWRhcCBvdXRsaWVyLiBQcm9zZXNueWEgbWVsaWJhdGthbiBwZW5nZ2FidW5nYW4gZGF0YSBkYXJpIGtlZHVhIGtlbG9tcG9rLCBtZW1iZXJpa2FuIHBlcmluZ2thdCwgZGFuIG1lbWJhbmRpbmdrYW4ganVtbGFoIHBlcmluZ2thdCB1bnR1ayBtZW5naWRlbnRpZmlrYXNpIHBlcmJlZGFhbi4gTmlsYWkgcCB5YW5nIGRpaGFzaWxrYW4gbWVudW5qdWtrYW4gcHJvYmFiaWxpdGFzIHBlcmJlZGFhbiB5YW5nIGRpYW1hdGkgdGVyamFkaSBzZWNhcmEga2ViZXR1bGFuLCBkZW5nYW4gbmlsYWkgcCBrZWNpbCAodW11bW55YSA8MC4wNSkgbWVuZ2luZGlrYXNpa2FuIHBlcmJlZGFhbiB5YW5nIHNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3Rpay4NCg0KUnVtdXMgVWppIE1hbm4tV2hpdG5leSAoWi10cmFuc2Zvcm1hc2kpIHlhbmcgZGlndW5ha2FuIHVudHVrIHNhbXBlbCBiZXNhcg0KXFsNClogPSBcZnJhY3tVIC0gXGZyYWN7bl8xIFxjZG90IG5fMn17Mn19e1xzcXJ0e1xmcmFje25fMSBcY2RvdCBuXzIgXGNkb3QgKG5fMSArIG5fMiArIDEpfXsxMn19fQ0KXF0NCg0KKipLZXRlcmFuZ2FuIDoqKg0KDQotIFwoIFogXCkgOiBuaWxhaSBaIGhhc2lsIHRyYW5zZm9ybWFzaSB1amkgTWFubi1XaGl0bmV5ICANCi0gXCggVSBcKSA6IG5pbGFpIHN0YXRpc3RpayBNYW5uLVdoaXRuZXkgIA0KLSBcKCBuXzEgXCkgOiBqdW1sYWggc2FtcGVsIHBhZGEga2Vsb21wb2sgMSAgDQotIFwoIG5fMiBcKSA6IGp1bWxhaCBzYW1wZWwgcGFkYSBrZWxvbXBvayAyDQoNClVqaSBNYW5uLVdoaXRuZXk8YnI+DQoxLiAqKkhpcG90ZXNpcyoqPGJyPg0KICAgJEhfMCQgOiBUaWRhayBhZGEgcGVyYmVkYWFuIGRpc3RyaWJ1c2kgcHJvZml0IGFudGFyYSBrZWxvbXBvayBQcm9kdWN0IExpbmUgYXRhdSBtZWRpYW4gcHJvZml0IGtlZHVhIGtlbG9tcG9rIGFkYWxhaCBzYW1hLjxicj4NCiAgICRIXzEkIDogQWRhIHBlcmJlZGFhbiBkaXN0cmlidXNpIHByb2ZpdCBhbnRhcmEga2Vsb21wb2sgUHJvZHVjdCBMaW5lIGF0YXUgbWVkaWFuIHByb2ZpdCBrZWR1YSBrZWxvbXBvayB0aWRhayBzYW1hLg0KPGJyPg0KMi4gKipUYXJhZiBTaWduaWZpa2Fuc2kgKCRcYWxwaGEkKSoqIA0KICAgJFxhbHBoYSA9IDAuMDUkDQo8YnI+DQozLiAqKkRhZXJhaCBLcml0aXMqKiANCiAgIFRvbGFrICRIXzAkIGppa2EgKnAtdmFsdWUqICQ8IFxhbHBoYSQNCjxicj4NCjQuICoqU3RhdGlzdGlrIFVqaSoqIA0KICAgVW50dWsgbWVsYWt1a2FuIHVqaSBXaWxjb3hvbiBkaSBSIGRhcGF0IG1lbmdndW5ha2FuIHN5bnRheCB3aWxjb3gudGVzdCgpDQpgYGB7ciwgd2FybmluZz1GQUxTRX0NCndpbGNveC50ZXN0KFByb2ZpdCB+IGBQcm9kdWN0IExpbmVgLCBkYXRhID0gZGF0YV9NZXhpY28pDQpgYGANCjUuICoqS2VzaW1wdWxhbioqPGJyPg0KQmVyZGFzYXJrYW4gaGFzaWwgdWppIFdpbGNveG9uLCBkaXBlcm9sZWggbmlsYWkgcC12YWx1ZSB5YW5nIGxlYmloIGtlY2lsIGRhcmkgMC4wNS4gT2xlaCBrYXJlbmEgaXR1LCAkSF8wJCBkaXRvbGFrLCBzZWhpbmdnYSBkYXBhdCBkaXNpbXB1bGthbiBiYWh3YSB0ZXJkYXBhdCBwZXJiZWRhYW4gc2lnbmlmaWthbiBkYWxhbSBwcm9maXQgYmVyZGFzYXJrYW4ga2F0ZWdvcmkgUHJvZHVjdCBMaW5lIGRpIE1leGljby48YnI+DQo8L2Rpdj4NCjxkaXYgc3R5bGU9ImhlaWdodDogMjBweDsiPjwvZGl2Pg0KDQo8ZGl2IHN0eWxlPSJjb2xvcjogd2hpdGU7IGJhY2tncm91bmQtY29sb3I6ICM3ODg2Qzc7IHBhZGRpbmc6IDIwcHg7IGJvcmRlci1yYWRpdXM6IDEwcHg7IGJveC1zaGFkb3c6IDAgNHB4IDhweCByZ2JhKDAsMCwwLDAuMSk7Ij4NCiMjIE1lZGlhbiANClNldGVsYWggbWVsYWt1a2FuIFVqaSBNYW5uLVdoaXRuZXksIGRpdGVtdWthbiBiYWh3YSB0ZXJkYXBhdCBwZXJiZWRhYW4gc2lnbmlmaWthbiBkYWxhbSBwcm9maXQgYW50YXJhIGthdGVnb3JpIFByb2R1Y3QgTGluZSBkaSBNZXhpY28uDQpgYGB7cn0NCmRhdGFfTWV4aWNvICU+JQ0KICBncm91cF9ieShgUHJvZHVjdCBMaW5lYCkgJT4lDQogIHN1bW1hcmlzZSgNCiAgICBNZWRpYW5fUHJvZml0ID0gbWVkaWFuKFByb2ZpdCksDQogICAgTWVhbl9Qcm9maXQgPSBtZWFuKFByb2ZpdCksDQogICAgQ291bnQgPSBuKCkNCiAgKQ0KYGBgDQpEYXRhIG1lbnVuanVra2FuIHBlcmJlZGFhbiBwYWRhIG1lYW4gcHJvZml0LCBkZW5nYW4gQmVhbnMgbWVuZ2hhc2lsa2FuIHJhdGEtcmF0YSAxLjg1IGRhcmkgMTIwIHRyYW5zYWtzaSwgc2VtZW50YXJhIExlYXZlcyBtZW5naGFzaWxrYW4gcmF0YS1yYXRhIHlhbmcgamF1aCBsZWJpaCB0aW5nZ2kgeWFpdHUgMTIuMCBkYXJpIDQ4IHRyYW5zYWtzaS4gUGVyYmVkYWFuIGluaSBzZWNhcmEgc3RhdGlzdGlrIHNpZ25pZmlrYW4gYmVyZGFzYXJrYW4gdWppIE1hbm4tV2hpdG5leSwgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHByb2R1ayBMZWF2ZXMgc2VjYXJhIGtvbnNpc3RlbiBtZW5naGFzaWxrYW4gcHJvZml0IHlhbmcgbGViaWggdGluZ2dpIGRpYmFuZGluZ2thbiBCZWFucywgbWVza2lwdW4gQmVhbnMgbWVtaWxpa2kgdm9sdW1lIHRyYW5zYWtzaSB5YW5nIGxlYmloIGJhbnlhay4gSGFsIGluaSBtZW51bmp1a2thbiBiYWh3YSBtZXNraXB1biBwcm9kdWsgQmVhbnMgbGViaWggc2VyaW5nIHRlcmp1YWwsIHByb2R1ayBMZWF2ZXMgbWVtYmVyaWthbiBrb250cmlidXNpIHByb2ZpdCB5YW5nIGxlYmloIGJlc2FyIHBlciB0cmFuc2Frc2kuDQoNCk1lZGlhbiBwcm9maXQgdW50dWsgcHJvZHVrIEJlYW5zIA0KYGBge3J9DQptZWRpYW5fQmVhbnMgPC0gbWVkaWFuKGRhdGFfTWV4aWNvJFByb2ZpdFtkYXRhX01leGljbyRgUHJvZHVjdCBMaW5lYCA9PSAiQmVhbnMiXSkNCm1lZGlhbl9CZWFucw0KYGBgDQpIYXNpbCB1amkgbWVudW5qdWtrYW4gcGVyYmVkYWFuIHNpZ25pZmlrYW4gYW50YXJhIHByb2R1ayBCZWFucyBkYW4gTGVhdmVzLiBEYXJpIGFuYWxpc2lzIG1lZGlhbiBwcm9maXQsIHRlcmxpaGF0IGJhaHdhIHByb2R1ayBCZWFucyBtZW1pbGlraSBtZWRpYW4gcHJvZml0IG5lZ2F0aWYgc2ViZXNhciAtNC4NCg0KTWVkaWFuIHByb2ZpdCB1bnR1ayBwcm9kdWsgTGVhdmVzDQpgYGB7cn0NCm1lZGlhbl9MZWF2ZXMgPC0gbWVkaWFuKGRhdGFfTWV4aWNvJFByb2ZpdFtkYXRhX01leGljbyRgUHJvZHVjdCBMaW5lYCA9PSAiTGVhdmVzIl0pDQptZWRpYW5fTGVhdmVzDQpgYGANCkhhc2lsIHVqaSBtZW51bmp1a2thbiBwZXJiZWRhYW4gc2lnbmlmaWthbiBhbnRhcmEgcHJvZHVrIEJlYW5zIGRhbiBMZWF2ZXMuIERhcmkgYW5hbGlzaXMgbWVkaWFuIHByb2ZpdCwgdGVybGloYXQgYmFod2EgcHJvZHVrIExlYXZlcyBtZW1pbGlraSBtZWRpYW4gcHJvZml0IHBvc2l0aWYgc2ViZXNhciAxMS4NCjwvZGl2Pg0KIyBWaXN1YWxpc2FzaXsudGFic2V0fQ0KPGRpdiBzdHlsZT0iY29sb3I6IHdoaXRlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjNzg4NkM3OyBwYWRkaW5nOiAyMHB4OyBib3JkZXItcmFkaXVzOiAxMHB4OyBib3gtc2hhZG93OiAwIDRweCA4cHggcmdiYSgwLDAsMCwwLjEpOyI+DQojIyBCb3ggUGxvdA0KYGBge3J9DQpnZ3Bsb3QoZGF0YV9NZXhpY28sIGFlcyh4ID0gYFByb2R1Y3QgTGluZWAsIHkgPSBQcm9maXQsIGZpbGwgPSBgUHJvZHVjdCBMaW5lYCkpICsNCiAgZ2VvbV9ib3hwbG90KCkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJCZWFucyIgPSAicGluayIsICJMZWF2ZXMiID0gInNreWJsdWUiKSkgKw0KICBsYWJzKHRpdGxlID0gIlBlcmJhbmRpbmdhbiBQcm9maXQ6IEJlYW5zIHZzIExlYXZlcyBkaSBNZXhpY28iKSArDQogIHRoZW1lX21pbmltYWwoKQ0KYGBgDQo8YnI+DQpQcm9kdWsgQmVhbnMgKHdhcm5hIHBpbmspIG1lbnVuanVra2FuIGRpc3RyaWJ1c2kgcHJvZml0IHlhbmcgbGViaWggcmVuZGFoIGRhbiBiZXJ2YXJpYXNpLCBkZW5nYW4gbWVkaWFuIHNla2l0YXIgLTIgaGluZ2dhIDAsIGludGVya3VhcnRpbCByYW5nZSB5YW5nIGxlYmFyLCBzZXJ0YSBvdXRsaWVyIG5lZ2F0aWYgZWtzdHJlbSB5YW5nIG1lbmNlcm1pbmthbiBrZXJ1Z2lhbiBzaWduaWZpa2FuLiBTZWJhbGlrbnlhLCBwcm9kdWsgTGVhdmVzICh3YXJuYSBiaXJ1IG11ZGEpIG1lbWlsaWtpIHByb2ZpdCB5YW5nIGxlYmloIHRpbmdnaSBkYW4gc3RhYmlsLCBkZW5nYW4gbWVkaWFuIHNla2l0YXIgMTHigJMxMiwga290YWsgaW50ZXJrdWFydGlsIHNlbXBpdCBkaSB3aWxheWFoIHBvc2l0aWYsIHNlcnRhIHRpZGFrIG1lbnVuanVra2FuIG5pbGFpIGVrc3RyZW0uIFBlcmJlZGFhbiBkaXN0cmlidXNpIGluaSBzZWphbGFuIGRlbmdhbiBoYXNpbCB1amkgTWFubi1XaGl0bmV5IHlhbmcgbWVudW5qdWtrYW4gYmFod2EgTGVhdmVzIG1lbWJlcmlrYW4gcHJvZml0IHlhbmcgc2VjYXJhIHNpZ25pZmlrYW4gbGViaWggdGluZ2dpIGRhbiBrb25zaXN0ZW4gZGliYW5kaW5nIEJlYW5zLg0KPC9kaXY+DQoNCjxkaXYgc3R5bGU9ImNvbG9yOiB3aGl0ZTsgYmFja2dyb3VuZC1jb2xvcjogIzc4ODZDNzsgcGFkZGluZzogMjBweDsgYm9yZGVyLXJhZGl1czogMTBweDsgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwwLDAsMC4xKTsiPg0KIyMgSGlzdG9ncmFtDQpgYGB7cn0NCmdncGxvdChkYXRhX01leGljbywgYWVzKHggPSBQcm9maXQsIGZpbGwgPSBgUHJvZHVjdCBMaW5lYCkpICsNCiAgZ2VvbV9oaXN0b2dyYW0oYmlud2lkdGggPSAxMCwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuNykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCJCZWFucyIgPSAicGluayIsICJMZWF2ZXMiID0gInNreWJsdWUiKSkgKw0KICBmYWNldF93cmFwKH4gYFByb2R1Y3QgTGluZWAsIHNjYWxlcyA9ICJmcmVlX3kiKSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnVzaSBQcm9maXQgcGVyIFByb2R1Y3QgTGluZSBkaSBNZXhpY28iLA0KICAgICAgIHggPSAiUHJvZml0IiwNCiAgICAgICB5ID0gIkZyZWt1ZW5zaSIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQpgYGANCjxicj4NClBhZGEgSGlzdG9ncmFtIG1lbnVuanVra2FuIHBlcmJlZGFhbiBtZW5jb2xvayBhbnRhcmEgcHJvZHVrIEJlYW5zIGRhbiBMZWF2ZXMuIFByb2R1ayBCZWFucyAod2FybmEgcGluaykgbWVtaWxpa2kgZGlzdHJpYnVzaSBwcm9maXQgeWFuZyByZWxhdGlmIG5vcm1hbCBuYW11biBzZWRpa2l0IG1pcmluZyBrZSBraXJpLCBkZW5nYW4gc2ViYXJhbiBsZWJhciBkYXJpIG5pbGFpIG5lZ2F0aWYgaGluZ2dhIHBvc2l0aWYgcmVuZGFoIGRhbiBmcmVrdWVuc2kgdGVydGluZ2dpIGRpIHNla2l0YXIgMCwgbWVuY2VybWlua2FuIGJhbnlha255YSB0cmFuc2Frc2kgZGVuZ2FuIHByb2ZpdCByZW5kYWggYXRhdSBiYWhrYW4ga2VydWdpYW4ga29uc2lzdGVuIGRlbmdhbiBtZWRpYW4gcHJvZml0IG5lZ2F0aWYgKC00KS4gU2ViYWxpa255YSwgcHJvZHVrIExlYXZlcyAod2FybmEgYmlydSBtdWRhKSBtZW51bmp1a2thbiBkaXN0cmlidXNpIHNlbXBpdCBkYW4gdGVycHVzYXQgc2VwZW51aG55YSBkaSBhcmVhIHBvc2l0aWYsIGRlbmdhbiBwdW5jYWsgZnJla3VlbnNpIHBhZGEgcHJvZml0IDEw4oCTMTUgZGFuIHRhbnBhIGFkYW55YSB0cmFuc2Frc2kgbWVydWdpLiBNZXNraXB1biBCZWFucyBtZW1pbGlraSB2b2x1bWUgdHJhbnNha3NpIGxlYmloIGJhbnlhaywgTGVhdmVzIHNlY2FyYSBrb25zaXN0ZW4gbWVtYmVyaWthbiBwcm9maXQgeWFuZyBsZWJpaCB0aW5nZ2kgZGFuIHN0YWJpbC4NCjwvZGl2Pg0KDQoNCiMgS2VzaW1wdWxhbg0KQmVyZGFzYXJrYW4gc2VsdXJ1aCBhbmFsaXNpcyBkYXRhIHlhbmcgdGVsYWggZGlsYWt1a2FuLCBkYXBhdCBkaXNpbXB1bGthbiBiYWh3YToNClRlcmRhcGF0IHBlcmJlZGFhbiBwcm9maXRhYmlsaXRhcyB5YW5nIHNpZ25pZmlrYW4gYW50YXJhIHByb2R1ayBCZWFucyBkYW4gTGVhdmVzIGRpIE1leGljbywgeWFuZyBkaWtvbmZpcm1hc2kgbWVsYWx1aSB1amkgTWFubi1XaGl0bmV5LiBQcm9kdWsgTGVhdmVzIHNlY2FyYSBrb25zaXN0ZW4gbWVudW5qdWtrYW4gcGVyZm9ybWEgcHJvZml0IHlhbmcgbGViaWggdW5nZ3VsIGRpYmFuZGluZ2thbiBCZWFucyBkZW5nYW4gbWVkaWFuIHByb2ZpdCBzZWJlc2FyIDExLCBqYXVoIGRpIGF0YXMgQmVhbnMgeWFuZyBtZW1pbGlraSBtZWRpYW4gcHJvZml0IG5lZ2F0aWYgKC00KS4NCg0KRGFyaSB2aXN1YWxpc2FzaSBRUS1wbG90LCB0ZXJsaWhhdCBiYWh3YSBkaXN0cmlidXNpIHByb2ZpdCBzZWNhcmEga2VzZWx1cnVoYW4gY2VuZGVydW5nIG1lbmRla2F0aSBkaXN0cmlidXNpIG5vcm1hbCBwYWRhIGJhZ2lhbiB0ZW5nYWgsIG5hbXVuIG1lbWlsaWtpIGVrb3IgeWFuZyBsZWJpaCB0ZWJhbCAoaGVhdnkgdGFpbHMpIGRpIGtlZHVhIHVqdW5nbnlhLCB5YW5nIG1lbmdpbmRpa2FzaWthbiBhZGFueWEgYmViZXJhcGEgbmlsYWkgZWtzdHJlbSBiYWlrIHBhZGEgcHJvZml0IG5lZ2F0aWYgbWF1cHVuIHBvc2l0aWYuDQoNCkJveHBsb3QgbWVudW5qdWtrYW4gYmFod2EgQmVhbnMgbWVtaWxpa2kgdmFyaWFiaWxpdGFzIHByb2ZpdCB5YW5nIGxlYmloIHRpbmdnaSBkZW5nYW4gYmViZXJhcGEgb3V0bGllciBuZWdhdGlmIHlhbmcgZWtzdHJlbSwgc2VtZW50YXJhIExlYXZlcyBtZW5hbXBpbGthbiBkaXN0cmlidXNpIHByb2ZpdCB5YW5nIGxlYmloIHN0YWJpbCBkYW4gc2VsdXJ1aG55YSBiZXJhZGEgZGkgYXJlYSBwb3NpdGlmLiBIYWwgaW5pIG1lbnVuanVra2FuIExlYXZlcyBtZXJ1cGFrYW4gcHJvZHVrIGRlbmdhbiByaXNpa28ga2VydWdpYW4gbGViaWggcmVuZGFoLg0KDQpIaXN0b2dyYW0gc2VtYWtpbiBtZW1wZXJrdWF0IHRlbXVhbiB0ZXJzZWJ1dCBkZW5nYW4gbWVtcGVybGloYXRrYW4gZGlzdHJpYnVzaSBCZWFucyB5YW5nIG1lbnllYmFyIGRhcmkgbmlsYWkgbmVnYXRpZiBoaW5nZ2EgcG9zaXRpZiByZW5kYWgsIHNlZGFuZ2thbiBkaXN0cmlidXNpIExlYXZlcyB0ZXJrb25zZW50cmFzaSBwYWRhIG5pbGFpIHByb2ZpdCBwb3NpdGlmIHlhbmcgbGViaWggdGluZ2dpIHRhbnBhIGFkYW55YSB0cmFuc2Frc2kgeWFuZyBtZW5nYWxhbWkga2VydWdpYW4uDQoNCk1lc2tpcHVuIEJlYW5zIG1lbWlsaWtpIHZvbHVtZSB0cmFuc2Frc2kgbGViaWggYmFueWFrICgxMjAgdHJhbnNha3NpIGRpYmFuZGluZ2thbiA0OCB0cmFuc2Frc2kgTGVhdmVzKSwgcHJvZHVrIExlYXZlcyB0ZXJidWt0aSBtZW1iZXJpa2FuIGtvbnRyaWJ1c2kgcHJvZml0IHBlciB0cmFuc2Frc2kgeWFuZyBqYXVoIGxlYmloIGJlc2FyIGRhbiBsZWJpaCBrb25zaXN0ZW4uIFRlbXVhbiBpbmkgbWVtYmVyaWthbiBpbXBsaWthc2kgc3RyYXRlZ2lzIHBlbnRpbmcgYmFnaSBwZXJ1c2FoYWFuIHVudHVrIG1lbXBlcnRpbWJhbmdrYW4gZm9rdXMgbGViaWggYmVzYXIgcGFkYSBwZW5nZW1iYW5nYW4gZGFuIHBlbWFzYXJhbiBwcm9kdWsgTGVhdmVzIGd1bmEgbWVuZ29wdGltYWxrYW4gcHJvZml0YWJpbGl0YXMgZGkgcGFzYXIgTWV4aWNvLg0K