Tugas Individu

Regresi Logistik Multinomial

Foto Diri


Regresi Logistik Multinomial

1. Konsep Dasar

1.1 Pengertian Regresi Logistik Multinomial

Regresi Logistik Multinomial adalah salah satu metode analisis statistik yang digunakan untuk memprediksi kemungkinan (peluang) dari suatu kejadian yang memiliki lebih dari dua hasil atau kategori.

Model ini merupakan pengembangan dari regresi logistik biner, yang awalnya hanya bisa digunakan untuk memprediksi hasil dengan dua kemungkinan saja, seperti ya/tidak, sukses/gagal, atau membeli/tidak membeli.

Dalam regresi logistik multinomial, hasil yang ingin diprediksi bisa memiliki tiga atau lebih pilihan, contohnya:

  • Tingkat kesuksesan bisnis: rendah, sedang, atau tinggi
  • Kepuasan pelanggan: kurang puas, puas, atau sangat puas
  • Keputusan konsumen: tidak membeli, menimbang, atau membeli

Tujuan utama dari model ini adalah untuk mengetahui faktor-faktor mana yang paling berpengaruh terhadap peluang terjadinya suatu kategori hasil tertentu. Artinya, kita bisa melihat bagaimana variabel-variabel seperti iklan, tenaga penjualan, atau kepuasan pelanggan dapat meningkatkan peluang keberhasilan suatu usaha.

Secara sederhana, regresi logistik multinomial membantu kita memahami hubungan antara beberapa faktor (variabel bebas) dengan kemungkinan suatu hasil (variabel terikat) yang memiliki lebih dari dua pilihan.

Model ini bekerja dengan cara membandingkan setiap kategori hasil terhadap satu kategori yang dijadikan acuan (base category). Melalui perbandingan ini, kita bisa melihat seberapa besar kemungkinan suatu data termasuk dalam kategori tertentu dibanding kategori acuan tersebut.

Dengan kata lain, regresi logistik multinomial memungkinkan kita untuk:

  • Memprediksi peluang terjadinya berbagai tingkat hasil
  • Mengetahui pengaruh masing-masing faktor terhadap setiap tingkat hasil
  • Membantu pengambilan keputusan berdasarkan data dan analisis probabilitas

1.2 Penjelasan Rumus Regresi Logistik Multinomial

Rumus umum regresi logistik multinomial dapat dituliskan sebagai berikut:

\[ \ln\left(\frac{P(Y = j)}{P(Y = \text{dasar})}\right) = \beta_{0j} + \beta_{1j}X_1 + \beta_{2j}X_2 + \beta_{3j}X_3 + \beta_{4j}X_4 \]

dengan:

  • ( \(P(Y = j)\) ) : peluang bahwa suatu observasi (misalnya perusahaan) termasuk dalam kategori j (misalnya “Sedang” atau “Tinggi”),
  • ( \(P(Y = \text{dasar})\) ) : peluang observasi termasuk kategori dasar (misalnya “Rendah”),
  • ( \(\beta_{0j}\) ) : konstanta (nilai dasar tanpa pengaruh variabel lain),
  • ( \(\beta_{1j}, \beta_{2j}, \beta_{3j}, \beta_{4j}\) ) : koefisien yang menunjukkan besar dan arah pengaruh dari masing-masing variabel,
  • ( \(X_1, X_2, X_3, X_4\) ) : variabel bebas yang memengaruhi hasil.

1.2.1 Contoh Penerapan pada Dataset Tingkat Kesuksesan Penjualan Berdasarkan Berbagai Faktor

Dalam penelitian ini, variabel bebas yang digunakan terdiri dari:

Simbol Variabel Keterangan
( \(X_1\) ) Periklanan Jumlah dana yang digunakan untuk promosi
( \(X_2\) ) Tenaga Penjualan Jumlah karyawan bagian penjualan
( \(X_3\) ) Kepuasan Tingkat kepuasan pelanggan
( \(X_4\) ) Persaingan Tingkat persaingan antar perusahaan
( \(Y\) ) Tingkat Kesuksesan Kategori: Rendah, Sedang, atau Tinggi

Karena variabel terikat (Tingkat Kesuksesan) memiliki tiga kategori, maka model akan membentuk dua persamaan logit, dengan kategori dasar (pembanding) adalah “Rendah”.

Persamaan pertama membandingkan kategori “Sedang” terhadap “Rendah”, dan persamaan kedua membandingkan kategori “Tinggi” terhadap “Rendah”.

1⃣ Persamaan untuk kategori “Sedang” dibanding “Rendah”

\[ \ln\left(\frac{P(Y = \text{Sedang})}{P(Y = \text{Rendah})}\right) = \beta_{0,sed} + \beta_{1,sed}(Periklanan) + \beta_{2,sed}(Tenaga\ Penjualan) + \beta_{3,sed}(Kepuasan) + \beta_{4,sed}(Persaingan) \]

Artinya: persamaan ini menggambarkan seberapa besar kemungkinan perusahaan memiliki tingkat kesuksesan “Sedang” dibanding “Rendah”, berdasarkan empat faktor di atas.

2⃣ Persamaan untuk kategori “Tinggi” dibanding “Rendah”

\[ \ln\left(\frac{P(Y = \text{Tinggi})}{P(Y = \text{Rendah})}\right) = \beta_{0,ting} + \beta_{1,ting}(Periklanan) + \beta_{2,ting}(Tenaga\ Penjualan) + \beta_{3,ting}(Kepuasan) + \beta_{4,ting}(Persaingan) \]

Artinya: persamaan ini menunjukkan kemungkinan perusahaan mencapai kesuksesan “Tinggi” dibanding “Rendah”, tergantung dari seberapa besar nilai iklan, tenaga penjualan, kepuasan, dan persaingan yang dimilikinya.

1.2.2 Makna Rumus dalam Konteks Data

Secara sederhana, rumus tersebut berfungsi untuk menghitung peluang suatu perusahaan masuk dalam kategori kesuksesan tertentu berdasarkan nilai dari variabel-variabelnya.

  • Jika koefisien (β) bernilai positif, artinya variabel tersebut meningkatkan peluang perusahaan untuk memiliki tingkat kesuksesan yang lebih tinggi. Contohnya, jika koefisien “Periklanan” positif, maka semakin besar dana yang digunakan untuk iklan, semakin tinggi kemungkinan perusahaan berada pada tingkat kesuksesan “Sedang” atau “Tinggi”.

  • Sebaliknya, jika koefisien (β) bernilai negatif, maka variabel tersebut menurunkan peluang perusahaan untuk mencapai tingkat kesuksesan yang lebih tinggi. Misalnya, jika “Persaingan” memiliki koefisien negatif, artinya semakin tinggi tingkat persaingan, semakin kecil peluang perusahaan untuk mencapai kesuksesan “Tinggi”.


2.Penerapan Regresi Logistik Multinomial

Dalam tugas kali ini, digunakan analisis regresi logistik multinomial untuk mengetahui faktor-faktor yang memengaruhi tingkat kesuksesan suatu usaha atau perusahaan. Data yang digunakan berisi beberapa variabel yang dianggap dapat memengaruhi hasil akhir (tingkat kesuksesan), yaitu:

  • Periklanan → seberapa besar upaya promosi yang dilakukan,
  • Tenaga Penjualan → seberapa banyak tenaga yang terlibat dalam proses penjualan(sales-nya),
  • Kepuasan → seberapa puas pelanggan terhadap produk atau layanan,
  • Persaingan → seberapa besar tekanan dari pesaing di pasar.

Sedangkan variabel yang ingin diprediksi adalah Tingkat Kesuksesan, yang memiliki tiga kategori: Rendah, Sedang, Tinggi.

Dengan menggunakan regresi logistik multinomial, analisis ini bertujuan untuk:

  1. Mengetahui pengaruh masing-masing faktor terhadap peluang suatu usaha berada pada tingkat kesuksesan tertentu.
  2. Membandingkan kemungkinan antar kategori, misalnya peluang berada di tingkat Tinggi dibanding Rendah, atau Sedang dibanding Rendah.
  3. Melihat faktor mana yang paling berpengaruh dalam meningkatkan peluang keberhasilan suatu usaha.

2.1 Menampilkan Data Regresi Logisti Multinomial (Pengaruh Faktor dalam Penjualan Penjualan terhadap Kesuksesan)

2.2 Pembangunan Model Regresi Logistik Multinomial

2.2.1. Menampilkan Kode untuk Model Regresi Logistik Multinomial

# 1. Panggil library yang dibutuhkan
library(nnet)    # untuk fungsi multinom()
library(dplyr)   # untuk olah data

# 2. Baca file CSV
data <- read.csv("data multinomial logistics regression 2.csv",
                 stringsAsFactors = FALSE,
                 colClasses = "character",
                 check.names = FALSE)

# 3. Ubah tipe data agar bisa dianalisis
data_multi <- data %>%
  mutate(
    Periklanan           = as.numeric(gsub("\\.", "", Periklanan)),
    `Tenaga Penjualan`   = as.numeric(gsub("\\.", "", `Tenaga Penjualan`)),
    Kepuasan             = as.numeric(gsub("\\.", "", Kepuasan)),
    Persaingan           = as.numeric(gsub("\\.", "", Persaingan)),
    `Tingkat Kesuksesan` = factor(`Tingkat Kesuksesan`,
                                  levels = c("Rendah", "Sedang", "Tinggi"))
  )

# 4. Bangun model regresi logistik multinomial
model_multi <- multinom(
  `Tingkat Kesuksesan` ~ Periklanan + `Tenaga Penjualan` + Kepuasan + Persaingan,
  data = data_multi
)
## # weights:  18 (10 variable)
## initial  value 219.722458 
## final  value 219.722458 
## converged
# 5. Tampilkan ringkasan model
summary(model_multi)
## Call:
## multinom(formula = `Tingkat Kesuksesan` ~ Periklanan + `Tenaga Penjualan` + 
##     Kepuasan + Persaingan, data = data_multi)
## 
## Coefficients:
##          (Intercept)    Periklanan `Tenaga Penjualan`      Kepuasan
## Sedang -4.691250e-33 -1.824321e-17      -1.026521e-17 -5.885049e-17
## Tinggi  9.382499e-33 -1.670891e-16       2.442452e-16  1.676947e-16
##           Persaingan
## Sedang  1.024808e-16
## Tinggi -1.912334e-16
## 
## Std. Errors:
##        (Intercept)   Periklanan `Tenaga Penjualan`     Kepuasan   Persaingan
## Sedang         NaN 7.482794e-17       1.424806e-16 5.808512e-17 5.590177e-17
## Tinggi         NaN 8.683027e-17       1.501287e-16 5.901390e-17 6.282393e-17
## 
## Residual Deviance: 439.4449 
## AIC: 459.4449
# 6. Hitung nilai z-value dan p-value
z_values <- summary(model_multi)$coefficients / summary(model_multi)$standard.errors
p_values <- 2 * (1 - pnorm(abs(z_values)))

hasil_model <- cbind(
  "z-value" = round(z_values, 3),
  "p-value" = round(p_values, 4)
)

# 7. Tampilkan hasil akhir
hasil_model
##        (Intercept) Periklanan `Tenaga Penjualan` Kepuasan Persaingan
## Sedang         NaN     -0.244             -0.072   -1.013      1.833
## Tinggi         NaN     -1.924              1.627    2.842     -3.044
##        (Intercept) Periklanan `Tenaga Penjualan` Kepuasan Persaingan
## Sedang         NaN     0.8074             0.9426   0.3110     0.0668
## Tinggi         NaN     0.0543             0.1038   0.0045     0.0023

2.2.2 Interpretasi Output Model

Model yang dijalankan sudah berhasil (converged), artinya programnya bisa selesai menghitung. Tapi, hasilnya menunjukkan bahwa tidak ada faktor yang benar-benar berpengaruh secara signifikan.

Mari lihat satu per satu hasilnya :

a.Tabel Koefisien

Kategori Variabel Nilai Koefisien Arti Singkat
Sedang Periklanan -0.000000000000000018 Hampir nol → Iklan tidak berpengaruh nyata
Sedang Tenaga Penjualan -0.000000000000000010 Hampir nol → Jumlah tenaga penjualan tidak berpengaruh
Sedang Kepuasan -0.000000000000000059 Hampir nol → Kepuasan pelanggan tidak berpengaruh nyata
Sedang Persaingan +0.000000000000000102 Kecil sekali → Tidak berpengaruh
Tinggi Periklanan -0.000000000000000167 Hampir nol → Iklan tidak berpengaruh
Tinggi Tenaga Penjualan +0.000000000000000244 Hampir nol → Jumlah sales tidak berpengaruh
Tinggi Kepuasan +0.000000000000000168 Hampir nol → Kepuasan tidak berpengaruh
Tinggi Persaingan -0.000000000000000191 Hampir nol → Persaingan tidak berpengaruh

Semua angka ini sangat-sangat kecil (mendekati nol), artinya tidak ada hubungan nyata antara variabel-variabel tersebut dengan “Tingkat Kesuksesan”.

b. Standard Error

Hasilnya seperti ini:

Kategori Variabel Standard Error
Sedang Periklanan 0.000000000000000074
Sedang Tenaga Penjualan 0.000000000000000142
Sedang Kepuasan 0.000000000000000058
Sedang Persaingan 0.000000000000000055
Tinggi Periklanan 0.000000000000000086
Tinggi Tenaga Penjualan 0.000000000000000150
Tinggi Kepuasan 0.000000000000000059
Tinggi Persaingan 0.000000000000000062

Ada juga beberapa NaN (Not a Number) di bagian intercept, artinya:

Model tidak bisa menghitung karena datanya terlalu mirip antar kategori (Rendah–Sedang–Tinggi).

yang artinya:

Data terlalu “seragam” — sehingga model bingung membedakan mana usaha yang benar-benar rendah, sedang, atau tinggi.

c.Residual Deviance dan AIC

Istilah Nilai Arti Sederhana
Residual Deviance 439.44 Semakin kecil nilainya semakin baik. Nilai ini masih cukup besar → model belum cocok dengan data.
AIC 459.44 Digunakan untuk membandingkan model. Nilai besar berarti modelnya belum bagus.

Model ini belum bisa menjelaskan hubungan antara faktor dan kesuksesan dengan baik.

d.Nilai z-value dan p-value

Ini digunakan untuk melihat apakah pengaruh tiap variabel signifikan atau tidak.

Contoh hasilnya:

Kategori Variabel z-value p-value
Sedang Periklanan -0.244 0.8074
Sedang Tenaga Penjualan -0.072 0.9426
Sedang Kepuasan -1.013 0.3110
Sedang Persaingan 1.833 0.0668
Tinggi Periklanan -1.924 0.0543
Tinggi Tenaga Penjualan 1.627 0.1038
Tinggi Kepuasan 2.842 0.0045
Tinggi Persaingan -3.044 0.0023

Aturan sederhananya:

  • Jika p-value < 0.05, berarti signifikan (berpengaruh nyata)
  • Jika p-value > 0.05, berarti tidak signifikan

Dari hasil di atas:

  • Untuk kategori Sedang, semua p-value > 0.05 → tidak ada pengaruh signifikan.
  • Untuk kategori Tinggi, hanya Kepuasan (0.0045) dan Persaingan (0.0023) yang terlihat signifikan secara statistik, tapi karena nilai koefisiennya sangat kecil, efek nyatanya tetap lemah sekali.

Kesimpulan Akhir

Peneliti membangun model multinomial logistic regression untuk memprediksi tingkat kesuksesan berdasarkan faktor periklanan, tenaga penjualan, kepuasan pelanggan, dan persaingan. Model telah berhasil dijalankan (ditandai dengan status converged), namun hasilnya menunjukkan bahwa:

  1. Nilai koefisien semua variabel sangat kecil. Artinya, perubahan nilai pada keempat variabel tersebut tidak memberikan pengaruh yang nyata terhadap perubahan tingkat kesuksesan.

  2. Nilai Standard Error yang sangat kecil dan munculnya NaN menunjukkan bahwa model kesulitan menghitung karena data tidak memiliki variasi yang cukup antar kategori.

  3. Nilai Residual Deviance sebesar 439.44 dan AIC sebesar 459.44 menunjukkan bahwa tingkat kesalahan model masih tinggi. Model belum mampu menggambarkan hubungan yang baik antara variabel independen dan tingkat kesuksesan.

Secara keseluruhan, dapat disimpulkan bahwa model belum berhasil menjelaskan perbedaan tingkat kesuksesan secara akurat. Hal ini kemungkinan terjadi karena jumlah data yang terlalu kecil, kategori yang tidak seimbang, atau nilai variabel yang mirip antar observasi.

2.3. Visualisasi Hasil

2.3.1 Penjelasan Tentang Visualisasi

Grafik ini menampilkan hubungan antara empat variabel prediktor (Periklanan, Tenaga Penjualan, Kepuasan, dan Persaingan) dengan kategori Tingkat Kesuksesan (Rendah, Sedang, Tinggi).

  • Sumbu X (horizontal) → nilai dari tiap variabel prediktor.

  • Sumbu Y (vertikal) → kategori tingkat kesuksesan (1 = Rendah, 2 = Sedang, 3 = Tinggi).

  • Titik warna → masing-masing observasi (data perusahaan).

    • Ungu = Rendah
    • Hijau = Sedang
    • Kuning = Tinggi
  • Garis merah → tren (hasil smoothing LOESS), menggambarkan arah umum hubungan.

a.Kepuasan

  • Terlihat semakin tinggi nilai Kepuasan, titik-titik kuning (Tinggi) makin banyak di bagian atas grafik.

  • Garis merah naik di awal, sedikit turun di akhir — tapi secara umum menunjukkan tren positif ringan.

  • Ini berarti:

    Semakin tinggi tingkat kepuasan pelanggan, semakin besar peluang perusahaan berada pada tingkat kesuksesan Sedang atau Tinggi.

  • Hasil ini sesuai dengan p-value model (di bagian analisis), di mana Kepuasan (p = 0.0045) termasuk signifikan untuk kategori “Tinggi”.

🟢 Kesimpulan: Kepuasan pelanggan mempunyai pengaruh positif nyata terhadap peningkatan tingkat kesuksesan.

b. Periklanan

  • Polanya juga menunjukkan garis merah cenderung naik ke kanan.
  • Artinya, makin besar dana promosi, makin tinggi pula peluang kesuksesan (lebih banyak titik kuning di kanan atas).
  • Namun, tren ini tidak terlalu tajam, dan dalam hasil model, p-value-nya tidak signifikan (0.0543 → sedikit di atas 0.05).

🟡 Kesimpulan: Periklanan punya arah pengaruh positif, tapi belum cukup kuat secara statistik.

c. Persaingan

  • Garis merah justru sedikit turun ketika nilai Persaingan meningkat.
  • Ini menandakan bahwa semakin tinggi tingkat persaingan, peluang untuk mencapai kesuksesan cenderung menurun.
  • Dalam hasil regresi, variabel ini juga signifikan (p = 0.0023) untuk kategori “Tinggi”, dan koefisiennya negatif.

🔴 Kesimpulan: Persaingan punya pengaruh negatif yang signifikan terhadap kesuksesan — artinya, persaingan ketat bisa menurunkan peluang sukses.

d. Tenaga Penjualan

  • Garis merah naik perlahan seiring meningkatnya jumlah tenaga penjualan.
  • Namun, sebaran titiknya cukup acak, jadi hubungan ini lemah dan tidak signifikan di hasil model (p = 0.1038).
  • Jadi meskipun arahnya positif, efeknya kecil banget.

🟡 Kesimpulan: Jumlah tenaga penjualan cenderung meningkatkan peluang sukses, tapi tidak signifikan secara statistik.

Kesimpulan Umum dari Visualisasi

Dari empat grafik tersebut bisa disimpulkan:

Variabel Arah Hubungan Signifikansi Arti Visualisasi
Kepuasan Positif ✅ Signifikan Kepuasan tinggi → peluang sukses meningkat
Periklanan Positif ⚠️ Hampir signifikan Iklan lebih banyak → sedikit menaikkan peluang sukses
Persaingan Negatif ✅ Signifikan Persaingan tinggi → peluang sukses menurun
Tenaga Penjualan Positif lemah ❌ Tidak signifikan Jumlah sales lebih banyak → pengaruh kecil

3.Kesimpulan Keseluruhan Regresi Logistik Multinomial

Secara keseluruhan, Regresi Logistik Multinomial merupakan salah satu metode statistik yang digunakan untuk memprediksi variabel dependen bersifat kategorik dengan lebih dari dua kelas, berdasarkan beberapa variabel independen yang bersifat numerik atau kategorik. Berbeda dengan regresi logistik biner yang hanya membedakan dua hasil (misalnya “ya” atau “tidak”), regresi logistik multinomial mampu menganalisis peluang suatu observasi berada pada salah satu dari beberapa kategori.

Dalam penelitian ini, metode tersebut digunakan untuk menganalisis faktor-faktor yang memengaruhi Tingkat Kesuksesan Usaha, dengan empat variabel prediktor yaitu Periklanan, Tenaga Penjualan, Kepuasan, dan Persaingan. Analisis dilakukan untuk mengetahui bagaimana setiap variabel tersebut berpengaruh terhadap peluang suatu usaha berada pada kategori Rendah, Sedang, atau Tinggi.

Hasil pemodelan menunjukkan bahwa:

  1. Model telah berhasil dijalankan dan konvergen, namun nilai AIC dan deviance yang tinggi menandakan bahwa model belum sepenuhnya menggambarkan hubungan data secara optimal.
  2. Variabel Kepuasan berpengaruh positif signifikan terhadap peningkatan tingkat kesuksesan (p = 0.0045), artinya semakin tinggi tingkat kepuasan pelanggan, semakin besar peluang usaha mencapai kesuksesan tinggi.
  3. Variabel Persaingan menunjukkan pengaruh negatif signifikan (p = 0.0023), yang berarti semakin tinggi tingkat persaingan, semakin kecil peluang mencapai kesuksesan tinggi.
  4. Variabel Periklanan dan Tenaga Penjualan menunjukkan arah hubungan positif, namun tidak signifikan secara statistik.
  5. Hasil visualisasi memperkuat interpretasi model, di mana garis tren (warna merah) pada Kepuasan dan Periklanan menunjukkan kecenderungan naik, sedangkan pada Persaingan justru menurun.

Dengan demikian, dapat disimpulkan bahwa:

Regresi Logistik Multinomial efektif digunakan untuk memodelkan hubungan antara beberapa variabel independen dengan variabel dependen yang memiliki tiga atau lebih kategori. Dalam studi ini, model berhasil menunjukkan bahwa Kepuasan merupakan faktor yang paling berpengaruh positif terhadap tingkat kesuksesan usaha, sedangkan Persaingan berpengaruh negatif signifikan. Dua variabel lainnya, Periklanan dan Tenaga Penjualan, belum memberikan pengaruh yang signifikan terhadap perubahan tingkat kesuksesan.

Sebagai saran, model ini dapat ditingkatkan dengan:

  • Menambah jumlah dan variasi data agar model lebih stabil,
  • Melakukan uji lanjutan seperti analisis interaksi antar variabel, dan
  • Mencoba pendekatan klasifikasi lain (seperti random forest atau ordinal regression) untuk melihat perbandingan performa model.

4. Perbandingan antara Regresi Logistik Biner dan Regresi Logistik Mutinomial

4.1 Perbedaan Konsep Dasar

Aspek Regresi Logistik Biner Regresi Logistik Multinomial
Jumlah Kategori Variabel Dependen (Y) 2 kategori (contoh: Ya/Tidak, Sukses/Gagal) ≥ 3 kategori (contoh: Rendah, Sedang, Tinggi)
Jenis Analisis Menghitung peluang terjadinya salah satu dari dua hasil Menghitung peluang observasi masuk ke salah satu dari beberapa kategori
Persamaan Logit Hanya 1 persamaan logit Membentuk beberapa persamaan logit (sebanyak kategori - 1)
Kategori Pembanding (Base) Salah satu kategori dianggap sebagai pembanding (biasanya “0”) Salah satu kategori dianggap dasar, dan setiap kategori lain dibandingkan dengan dasar tersebut
Tujuan Analisis Mengetahui faktor-faktor yang memengaruhi dua kemungkinan hasil Mengetahui faktor-faktor yang memengaruhi hasil dengan banyak tingkatan
Contoh Kasus Apakah seseorang membeli produk (Ya/Tidak) Tingkat kepuasan pelanggan (Rendah, Sedang, Tinggi)

4.2 Perbandingan Berdasarkan Output Model

Aspek Binary Logistic Regression Multinomial Logistic Regression
Koefisien (β) Menunjukkan seberapa besar pengaruh tiap variabel terhadap peluang hasil “1” (misalnya sukses). Menunjukkan pengaruh tiap variabel terhadap setiap kategori dibanding kategori dasar.
Interpretasi Koefisien Jika β positif → meningkatkan peluang sukses. Jika negatif → menurunkan peluang. Sama, tapi berlaku untuk tiap kategori (misal: “Sedang” vs “Rendah”, “Tinggi” vs “Rendah”).
Nilai p-value Menunjukkan apakah pengaruh tiap variabel signifikan terhadap hasil “1”. Menunjukkan signifikansi pengaruh tiap variabel terhadap tiap kategori dibanding dasar.
Output Utama di R Coefficients, Std. Error, z-value, p-value, AIC Sama, tapi hasil lebih banyak karena mencakup semua kategori hasil.
Kinerja Model (AIC, Deviance) Digunakan untuk menilai seberapa baik model memprediksi dua hasil. Sama, digunakan untuk melihat kecocokan model dengan data multi-kategori.

4.3 Perbandingan Berdasarkan Hasil Output dari Tugas

Aspek Regresi Logistik Biner (Bookdown) Regresi Logistik Multinomial (Tugas Ini)
Kategori Hasil (Y) Tingkat Kesuksesan memiliki 2 kategori: Rendah dan Tinggi Tingkat Kesuksesan memiliki 3 kategori: Rendah, Sedang, dan Tinggi
Jumlah Persamaan Logit 1 persamaan (perbandingan antara Tinggi vs Rendah) 2 persamaan (perbandingan Sedang vs Rendah dan Tinggi vs Rendah)
Variabel Signifikan Hanya Kepuasan yang paling berpengaruh signifikan terhadap kesuksesan Kepuasan dan Persaingan berpengaruh signifikan pada kategori Tinggi
Arah Pengaruh Kepuasan → berpengaruh positif terhadap peluang kesuksesan Kepuasan → berpengaruh positif, sedangkan Persaingannegatif
Nilai AIC (Kecocokan Model) Lebih kecil, menandakan model sederhana dan efisien Lebih besar karena model lebih kompleks dengan banyak kategori
Kestabilan Model Cenderung lebih stabil karena hanya dua kategori hasil Lebih bervariasi karena tiap kategori memiliki hubungan yang berbeda-beda

4.4 Kesimpulan Umum Perbandingan

Dari perbandingan di atas dapat disimpulkan bahwa:

  1. Regresi logistik biner cocok untuk analisis sederhana dengan dua hasil, menghasilkan model yang lebih stabil dan mudah diinterpretasikan.
  2. Regresi logistik multinomial lebih kompleks, karena mampu menganalisis lebih dari dua kategori hasil, tetapi butuh data yang lebih banyak dan variatif agar hasilnya signifikan.
  3. Dalam kedua model, arah pengaruh variabel tetap sama, hanya saja multinomial memperluas analisisnya ke lebih banyak kategori.
  4. Pada kedua model, Kepuasan pelanggan tetap menjadi faktor paling berpengaruh positif, sedangkan Persaingan cenderung memberi pengaruh negatif terhadap tingkat kesuksesan.

🟢 Garis besar:

Regresi logistik biner lebih efisien untuk kasus sederhana, sedangkan regresi logistik multinomial memberikan pemahaman yang lebih mendalam tentang bagaimana variabel memengaruhi berbagai tingkatan hasil.

Referensi

Siregar, B. (2025). Regression Models – Analysis and Predictive Modeling [Bagian 2: Regression Models]. Diambil dari https://bookdown.org/content/a142b172-69b2-436d-bdb0-9da6d046a0f9/02-Regression_Model.html

Tibrani Education. (2023). Regresi Logistik Multinomial SPSS II Lengkap dengan penjelasannya [Video]. YouTube. https://youtu.be/ljAMTBFlFAI?si=hLQXuAiVaKe8NApo

LS0tDQp0aXRsZTogIlR1Z2FzIEluZGl2aWR1Ig0Kc3VidGl0bGU6ICJSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsIg0KYXV0aG9yOiAiT2xpdmlhIE1laWxpbmRhIERhdnRpbiBQZXNpcmVyb24iDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlLmNzcyINCi0tLQ0KDQo8aW1nIHNyYz0iY2lwcGllMi5qcGciIHdpZHRoPSIzMDAiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIgYWx0PSJGb3RvIERpcmkiPg0KDQotLS0NCg0KIyAqKlJlZ3Jlc2kgTG9naXN0aWsgTXVsdGlub21pYWwqKg0KDQojIDEuICoqS29uc2VwIERhc2FyKioNCg0KIyMgMS4xICoqUGVuZ2VydGlhbiBSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsKioNCg0KKipSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsKiogYWRhbGFoIHNhbGFoIHNhdHUgbWV0b2RlIGFuYWxpc2lzIHN0YXRpc3RpayB5YW5nIGRpZ3VuYWthbiB1bnR1ayAqKm1lbXByZWRpa3NpIGtlbXVuZ2tpbmFuIChwZWx1YW5nKSoqIGRhcmkgc3VhdHUga2VqYWRpYW4geWFuZyBtZW1pbGlraSAqKmxlYmloIGRhcmkgZHVhIGhhc2lsIGF0YXUga2F0ZWdvcmkqKi4NCg0KTW9kZWwgaW5pIG1lcnVwYWthbiAqKnBlbmdlbWJhbmdhbiBkYXJpIHJlZ3Jlc2kgbG9naXN0aWsgYmluZXIqKiwgeWFuZyBhd2FsbnlhIGhhbnlhIGJpc2EgZGlndW5ha2FuIHVudHVrIG1lbXByZWRpa3NpIGhhc2lsIGRlbmdhbiAqKmR1YSBrZW11bmdraW5hbiBzYWphKiosIHNlcGVydGkgKnlhL3RpZGFrKiwgKnN1a3Nlcy9nYWdhbCosIGF0YXUgKm1lbWJlbGkvdGlkYWsgbWVtYmVsaSouDQoNCkRhbGFtIHJlZ3Jlc2kgbG9naXN0aWsgbXVsdGlub21pYWwsIGhhc2lsIHlhbmcgaW5naW4gZGlwcmVkaWtzaSBiaXNhIG1lbWlsaWtpICoqdGlnYSBhdGF1IGxlYmloIHBpbGloYW4qKiwgY29udG9obnlhOg0KDQoqIFRpbmdrYXQga2VzdWtzZXNhbiBiaXNuaXM6ICpyZW5kYWgqLCAqc2VkYW5nKiwgYXRhdSAqdGluZ2dpKg0KKiBLZXB1YXNhbiBwZWxhbmdnYW46ICprdXJhbmcgcHVhcyosICpwdWFzKiwgYXRhdSAqc2FuZ2F0IHB1YXMqDQoqIEtlcHV0dXNhbiBrb25zdW1lbjogKnRpZGFrIG1lbWJlbGkqLCAqbWVuaW1iYW5nKiwgYXRhdSAqbWVtYmVsaSoNCg0KVHVqdWFuIHV0YW1hIGRhcmkgbW9kZWwgaW5pIGFkYWxhaCB1bnR1ayBtZW5nZXRhaHVpICoqZmFrdG9yLWZha3RvciBtYW5hIHlhbmcgcGFsaW5nIGJlcnBlbmdhcnVoIHRlcmhhZGFwIHBlbHVhbmcgdGVyamFkaW55YSBzdWF0dSBrYXRlZ29yaSBoYXNpbCB0ZXJ0ZW50dSoqLg0KQXJ0aW55YSwga2l0YSBiaXNhIG1lbGloYXQgYmFnYWltYW5hIHZhcmlhYmVsLXZhcmlhYmVsIHNlcGVydGkgKmlrbGFuKiwgKnRlbmFnYSBwZW5qdWFsYW4qLCBhdGF1ICprZXB1YXNhbiBwZWxhbmdnYW4qIGRhcGF0IG1lbmluZ2thdGthbiBwZWx1YW5nIGtlYmVyaGFzaWxhbiBzdWF0dSB1c2FoYS4NCg0KU2VjYXJhIHNlZGVyaGFuYSwgKipyZWdyZXNpIGxvZ2lzdGlrIG11bHRpbm9taWFsIG1lbWJhbnR1IGtpdGEgbWVtYWhhbWkgaHVidW5nYW4gYW50YXJhIGJlYmVyYXBhIGZha3RvciAodmFyaWFiZWwgYmViYXMpKiogZGVuZ2FuICoqa2VtdW5na2luYW4gc3VhdHUgaGFzaWwgKHZhcmlhYmVsIHRlcmlrYXQpKiogeWFuZyBtZW1pbGlraSBsZWJpaCBkYXJpIGR1YSBwaWxpaGFuLg0KDQpNb2RlbCBpbmkgYmVrZXJqYSBkZW5nYW4gY2FyYSBtZW1iYW5kaW5na2FuIHNldGlhcCBrYXRlZ29yaSBoYXNpbCB0ZXJoYWRhcCBzYXR1IGthdGVnb3JpIHlhbmcgZGlqYWRpa2FuICoqYWN1YW4gKGJhc2UgY2F0ZWdvcnkpKiouDQpNZWxhbHVpIHBlcmJhbmRpbmdhbiBpbmksIGtpdGEgYmlzYSBtZWxpaGF0IHNlYmVyYXBhIGJlc2FyIGtlbXVuZ2tpbmFuIHN1YXR1IGRhdGEgdGVybWFzdWsgZGFsYW0ga2F0ZWdvcmkgdGVydGVudHUgZGliYW5kaW5nIGthdGVnb3JpIGFjdWFuIHRlcnNlYnV0Lg0KDQpEZW5nYW4ga2F0YSBsYWluLCByZWdyZXNpIGxvZ2lzdGlrIG11bHRpbm9taWFsIG1lbXVuZ2tpbmthbiBraXRhIHVudHVrOg0KDQoqICoqTWVtcHJlZGlrc2kgcGVsdWFuZyB0ZXJqYWRpbnlhIGJlcmJhZ2FpIHRpbmdrYXQgaGFzaWwqKg0KKiAqKk1lbmdldGFodWkgcGVuZ2FydWggbWFzaW5nLW1hc2luZyBmYWt0b3IgdGVyaGFkYXAgc2V0aWFwIHRpbmdrYXQgaGFzaWwqKg0KKiAqKk1lbWJhbnR1IHBlbmdhbWJpbGFuIGtlcHV0dXNhbioqIGJlcmRhc2Fya2FuIGRhdGEgZGFuIGFuYWxpc2lzIHByb2JhYmlsaXRhcw0KDQoNCiMjIDEuMiAqKlBlbmplbGFzYW4gUnVtdXMgUmVncmVzaSBMb2dpc3RpayBNdWx0aW5vbWlhbCoqDQoNClJ1bXVzIHVtdW0gcmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbCBkYXBhdCBkaXR1bGlza2FuIHNlYmFnYWkgYmVyaWt1dDoNCg0KJCQNClxsblxsZWZ0KFxmcmFje1AoWSA9IGopfXtQKFkgPSBcdGV4dHtkYXNhcn0pfVxyaWdodCkNCj0gXGJldGFfezBqfSArIFxiZXRhX3sxan1YXzEgKyBcYmV0YV97Mmp9WF8yICsgXGJldGFfezNqfVhfMyArIFxiZXRhX3s0an1YXzQNCiQkDQoNCmRlbmdhbjoNCg0KKiAoICRQKFkgPSBqKSQgKSA6IHBlbHVhbmcgYmFod2Egc3VhdHUgb2JzZXJ2YXNpIChtaXNhbG55YSBwZXJ1c2FoYWFuKSB0ZXJtYXN1ayBkYWxhbSBrYXRlZ29yaSAqaiogKG1pc2FsbnlhIOKAnFNlZGFuZ+KAnSBhdGF1IOKAnFRpbmdnaeKAnSksDQoqICggJFAoWSA9IFx0ZXh0e2Rhc2FyfSkkICkgOiBwZWx1YW5nIG9ic2VydmFzaSB0ZXJtYXN1ayBrYXRlZ29yaSBkYXNhciAobWlzYWxueWEg4oCcUmVuZGFo4oCdKSwNCiogKCAkXGJldGFfezBqfSQgKSA6IGtvbnN0YW50YSAobmlsYWkgZGFzYXIgdGFucGEgcGVuZ2FydWggdmFyaWFiZWwgbGFpbiksDQoqICggJFxiZXRhX3sxan0sIFxiZXRhX3syan0sIFxiZXRhX3szan0sIFxiZXRhX3s0an0kICkgOiBrb2VmaXNpZW4geWFuZyBtZW51bmp1a2thbiBiZXNhciBkYW4gYXJhaCBwZW5nYXJ1aCBkYXJpIG1hc2luZy1tYXNpbmcgdmFyaWFiZWwsDQoqICggJFhfMSwgWF8yLCBYXzMsIFhfNCQgKSA6IHZhcmlhYmVsIGJlYmFzIHlhbmcgbWVtZW5nYXJ1aGkgaGFzaWwuDQoNCg0KIyMjIDEuMi4xICoqQ29udG9oIFBlbmVyYXBhbiBwYWRhIERhdGFzZXQgVGluZ2thdCBLZXN1a3Nlc2FuIFBlbmp1YWxhbiBCZXJkYXNhcmthbiBCZXJiYWdhaSBGYWt0b3IgKioNCg0KRGFsYW0gcGVuZWxpdGlhbiBpbmksIHZhcmlhYmVsIGJlYmFzIHlhbmcgZGlndW5ha2FuIHRlcmRpcmkgZGFyaToNCg0KfCBTaW1ib2wgIHwgVmFyaWFiZWwgICAgICAgICAgIHwgS2V0ZXJhbmdhbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IDotLS0tLS0gfCA6LS0tLS0tLS0tLS0tLS0tLS0gfCA6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgKCAkWF8xJCApIHwgUGVyaWtsYW5hbiAgICAgICAgIHwgSnVtbGFoIGRhbmEgeWFuZyBkaWd1bmFrYW4gdW50dWsgcHJvbW9zaSB8DQp8ICggJFhfMiQgKSB8IFRlbmFnYSBQZW5qdWFsYW4gICB8IEp1bWxhaCBrYXJ5YXdhbiBiYWdpYW4gcGVuanVhbGFuICAgICAgICAgfA0KfCAoICRYXzMkICkgfCBLZXB1YXNhbiAgICAgICAgICAgfCBUaW5na2F0IGtlcHVhc2FuIHBlbGFuZ2dhbiAgICAgICAgICAgICAgIHwNCnwgKCAkWF80JCApIHwgUGVyc2FpbmdhbiAgICAgICAgIHwgVGluZ2thdCBwZXJzYWluZ2FuIGFudGFyIHBlcnVzYWhhYW4gICAgICB8DQp8ICggJFkkICkgICB8IFRpbmdrYXQgS2VzdWtzZXNhbiB8IEthdGVnb3JpOiBSZW5kYWgsIFNlZGFuZywgYXRhdSBUaW5nZ2kgICAgfA0KDQpLYXJlbmEgdmFyaWFiZWwgdGVyaWthdCAoKipUaW5na2F0IEtlc3Vrc2VzYW4qKikgbWVtaWxpa2kgKip0aWdhIGthdGVnb3JpKiosIG1ha2EgbW9kZWwgYWthbiBtZW1iZW50dWsgKipkdWEgcGVyc2FtYWFuIGxvZ2l0KiosIGRlbmdhbiBrYXRlZ29yaSBkYXNhciAocGVtYmFuZGluZykgYWRhbGFoICoq4oCcUmVuZGFo4oCdKiouDQoNClBlcnNhbWFhbiBwZXJ0YW1hIG1lbWJhbmRpbmdrYW4ga2F0ZWdvcmkgKirigJxTZWRhbmfigJ0qKiB0ZXJoYWRhcCAqKuKAnFJlbmRhaOKAnSoqLCBkYW4gcGVyc2FtYWFuIGtlZHVhIG1lbWJhbmRpbmdrYW4ga2F0ZWdvcmkgKirigJxUaW5nZ2nigJ0qKiB0ZXJoYWRhcCAqKuKAnFJlbmRhaOKAnSoqLg0KDQoNCg0KIyMjIyAx4oOjIFBlcnNhbWFhbiB1bnR1ayBrYXRlZ29yaSDigJxTZWRhbmfigJ0gZGliYW5kaW5nIOKAnFJlbmRhaCINCg0KJCQNClxsblxsZWZ0KFxmcmFje1AoWSA9IFx0ZXh0e1NlZGFuZ30pfXtQKFkgPSBcdGV4dHtSZW5kYWh9KX1ccmlnaHQpDQo9IFxiZXRhX3swLHNlZH0gKyBcYmV0YV97MSxzZWR9KFBlcmlrbGFuYW4pICsgXGJldGFfezIsc2VkfShUZW5hZ2FcIFBlbmp1YWxhbikgKyBcYmV0YV97MyxzZWR9KEtlcHVhc2FuKSArIFxiZXRhX3s0LHNlZH0oUGVyc2FpbmdhbikNCiQkDQoNCkFydGlueWE6DQpwZXJzYW1hYW4gaW5pIG1lbmdnYW1iYXJrYW4gKipzZWJlcmFwYSBiZXNhciBrZW11bmdraW5hbiBwZXJ1c2FoYWFuIG1lbWlsaWtpIHRpbmdrYXQga2VzdWtzZXNhbiDigJxTZWRhbmfigJ0gZGliYW5kaW5nIOKAnFJlbmRhaOKAnSoqLCBiZXJkYXNhcmthbiBlbXBhdCBmYWt0b3IgZGkgYXRhcy4NCg0KDQoNCiMjIyMgMuKDoyBQZXJzYW1hYW4gdW50dWsga2F0ZWdvcmkg4oCcVGluZ2dp4oCdIGRpYmFuZGluZyDigJxSZW5kYWjigJ0NCg0KJCQNClxsblxsZWZ0KFxmcmFje1AoWSA9IFx0ZXh0e1RpbmdnaX0pfXtQKFkgPSBcdGV4dHtSZW5kYWh9KX1ccmlnaHQpDQo9IFxiZXRhX3swLHRpbmd9ICsgXGJldGFfezEsdGluZ30oUGVyaWtsYW5hbikgKyBcYmV0YV97Mix0aW5nfShUZW5hZ2FcIFBlbmp1YWxhbikgKyBcYmV0YV97Myx0aW5nfShLZXB1YXNhbikgKyBcYmV0YV97NCx0aW5nfShQZXJzYWluZ2FuKQ0KJCQNCg0KQXJ0aW55YToNCnBlcnNhbWFhbiBpbmkgbWVudW5qdWtrYW4gKiprZW11bmdraW5hbiBwZXJ1c2FoYWFuIG1lbmNhcGFpIGtlc3Vrc2VzYW4g4oCcVGluZ2dp4oCdIGRpYmFuZGluZyDigJxSZW5kYWjigJ0qKiwgdGVyZ2FudHVuZyBkYXJpIHNlYmVyYXBhIGJlc2FyIG5pbGFpIGlrbGFuLCB0ZW5hZ2EgcGVuanVhbGFuLCBrZXB1YXNhbiwgZGFuIHBlcnNhaW5nYW4geWFuZyBkaW1pbGlraW55YS4NCg0KDQojIyMgMS4yLjIgKipNYWtuYSBSdW11cyBkYWxhbSBLb250ZWtzIERhdGEqKg0KDQpTZWNhcmEgc2VkZXJoYW5hLCBydW11cyB0ZXJzZWJ1dCBiZXJmdW5nc2kgdW50dWsgbWVuZ2hpdHVuZyAqKnBlbHVhbmcqKiBzdWF0dSBwZXJ1c2FoYWFuIG1hc3VrIGRhbGFtIGthdGVnb3JpIGtlc3Vrc2VzYW4gdGVydGVudHUgYmVyZGFzYXJrYW4gbmlsYWkgZGFyaSB2YXJpYWJlbC12YXJpYWJlbG55YS4NCg0KKiBKaWthIGtvZWZpc2llbiAozrIpIGJlcm5pbGFpICoqcG9zaXRpZioqLCBhcnRpbnlhIHZhcmlhYmVsIHRlcnNlYnV0ICoqbWVuaW5na2F0a2FuIHBlbHVhbmcqKiBwZXJ1c2FoYWFuIHVudHVrIG1lbWlsaWtpIHRpbmdrYXQga2VzdWtzZXNhbiB5YW5nIGxlYmloIHRpbmdnaS4NCiAgQ29udG9obnlhLCBqaWthIGtvZWZpc2llbiDigJxQZXJpa2xhbmFu4oCdIHBvc2l0aWYsIG1ha2Egc2VtYWtpbiBiZXNhciBkYW5hIHlhbmcgZGlndW5ha2FuIHVudHVrIGlrbGFuLCBzZW1ha2luIHRpbmdnaSBrZW11bmdraW5hbiBwZXJ1c2FoYWFuIGJlcmFkYSBwYWRhIHRpbmdrYXQga2VzdWtzZXNhbiDigJxTZWRhbmfigJ0gYXRhdSDigJxUaW5nZ2nigJ0uDQoNCiogU2ViYWxpa255YSwgamlrYSBrb2VmaXNpZW4gKM6yKSBiZXJuaWxhaSAqKm5lZ2F0aWYqKiwgbWFrYSB2YXJpYWJlbCB0ZXJzZWJ1dCAqKm1lbnVydW5rYW4gcGVsdWFuZyoqIHBlcnVzYWhhYW4gdW50dWsgbWVuY2FwYWkgdGluZ2thdCBrZXN1a3Nlc2FuIHlhbmcgbGViaWggdGluZ2dpLg0KICBNaXNhbG55YSwgamlrYSDigJxQZXJzYWluZ2Fu4oCdIG1lbWlsaWtpIGtvZWZpc2llbiBuZWdhdGlmLCBhcnRpbnlhIHNlbWFraW4gdGluZ2dpIHRpbmdrYXQgcGVyc2Fpbmdhbiwgc2VtYWtpbiBrZWNpbCBwZWx1YW5nIHBlcnVzYWhhYW4gdW50dWsgbWVuY2FwYWkga2VzdWtzZXNhbiDigJxUaW5nZ2nigJ0uDQoNCi0tLQ0KDQojIDIuKipQZW5lcmFwYW4gUmVncmVzaSBMb2dpc3RpayBNdWx0aW5vbWlhbCoqIA0KDQpEYWxhbSB0dWdhcyBrYWxpIGluaSwgZGlndW5ha2FuICoqYW5hbGlzaXMgcmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbCoqIHVudHVrIG1lbmdldGFodWkgKipmYWt0b3ItZmFrdG9yIHlhbmcgbWVtZW5nYXJ1aGkgdGluZ2thdCBrZXN1a3Nlc2FuIHN1YXR1IHVzYWhhIGF0YXUgcGVydXNhaGFhbioqLg0KRGF0YSB5YW5nIGRpZ3VuYWthbiBiZXJpc2kgYmViZXJhcGEgdmFyaWFiZWwgeWFuZyBkaWFuZ2dhcCBkYXBhdCBtZW1lbmdhcnVoaSBoYXNpbCBha2hpciAoKnRpbmdrYXQga2VzdWtzZXNhbiopLCB5YWl0dToNCg0KKiAqKlBlcmlrbGFuYW4qKiDihpIgc2ViZXJhcGEgYmVzYXIgdXBheWEgcHJvbW9zaSB5YW5nIGRpbGFrdWthbiwNCiogKipUZW5hZ2EgUGVuanVhbGFuKiog4oaSIHNlYmVyYXBhIGJhbnlhayB0ZW5hZ2EgeWFuZyB0ZXJsaWJhdCBkYWxhbSBwcm9zZXMgcGVuanVhbGFuKHNhbGVzLW55YSksDQoqICoqS2VwdWFzYW4qKiDihpIgc2ViZXJhcGEgcHVhcyBwZWxhbmdnYW4gdGVyaGFkYXAgcHJvZHVrIGF0YXUgbGF5YW5hbiwNCiogKipQZXJzYWluZ2FuKiog4oaSIHNlYmVyYXBhIGJlc2FyIHRla2FuYW4gZGFyaSBwZXNhaW5nIGRpIHBhc2FyLg0KDQpTZWRhbmdrYW4gdmFyaWFiZWwgeWFuZyBpbmdpbiBkaXByZWRpa3NpIGFkYWxhaCAqKlRpbmdrYXQgS2VzdWtzZXNhbioqLCB5YW5nIG1lbWlsaWtpIHRpZ2Ega2F0ZWdvcmk6DQoqUmVuZGFoKiwNCipTZWRhbmcqLA0KKlRpbmdnaSouDQoNCkRlbmdhbiBtZW5nZ3VuYWthbiByZWdyZXNpIGxvZ2lzdGlrIG11bHRpbm9taWFsLCBhbmFsaXNpcyBpbmkgYmVydHVqdWFuIHVudHVrOg0KDQoxLiAqKk1lbmdldGFodWkgcGVuZ2FydWggbWFzaW5nLW1hc2luZyBmYWt0b3IqKiB0ZXJoYWRhcCBwZWx1YW5nIHN1YXR1IHVzYWhhIGJlcmFkYSBwYWRhIHRpbmdrYXQga2VzdWtzZXNhbiB0ZXJ0ZW50dS4NCjIuICoqTWVtYmFuZGluZ2thbiBrZW11bmdraW5hbiBhbnRhciBrYXRlZ29yaSoqLCBtaXNhbG55YSBwZWx1YW5nIGJlcmFkYSBkaSB0aW5na2F0ICpUaW5nZ2kqIGRpYmFuZGluZyAqUmVuZGFoKiwgYXRhdSAqU2VkYW5nKiBkaWJhbmRpbmcgKlJlbmRhaCouDQozLiAqKk1lbGloYXQgZmFrdG9yIG1hbmEgeWFuZyBwYWxpbmcgYmVycGVuZ2FydWgqKiBkYWxhbSBtZW5pbmdrYXRrYW4gcGVsdWFuZyBrZWJlcmhhc2lsYW4gc3VhdHUgdXNhaGEuDQoNCiMjIDIuMSAqKk1lbmFtcGlsa2FuIERhdGEgUmVncmVzaSBMb2dpc3RpIE11bHRpbm9taWFsIChQZW5nYXJ1aCBGYWt0b3IgZGFsYW0gUGVuanVhbGFuICBQZW5qdWFsYW4gdGVyaGFkYXAgS2VzdWtzZXNhbikqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0NCiMgQmFjYSBDU1Ygc2ViYWdhaSB0ZWtzIHN1cGF5YSBhbmdrYSBnYWsgZGlwb3RvbmcgYXRhdSBkaXViYWgNCmxpYnJhcnkoRFQpDQpkYXRhIDwtIHJlYWQuY3N2KCJkYXRhIG11bHRpbm9taWFsIGxvZ2lzdGljcyByZWdyZXNzaW9uIDIuY3N2IiwNCiAgICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICBjb2xDbGFzc2VzID0gImNoYXJhY3RlciIsDQogICAgICAgICAgICAgICAgIGNoZWNrLm5hbWVzID0gRkFMU0UpDQoNCiMgVGFtcGlsa2FuIHNlbXVhIGRhdGEgcGVyc2lzIHNlcGVydGkgZGkgQ1NWIHRhbnBhIG5vbW9yIGJhcmlzDQpkYXRhdGFibGUoDQogIGRhdGEsDQogIHJvd25hbWVzID0gRkFMU0UsICAgICAgICAgICAgICANCiAgb3B0aW9ucyA9IGxpc3Qoc2Nyb2xsWCA9IFRSVUUpIA0KKQ0KDQoNCmBgYA0KDQojIyAyLjIgKipQZW1iYW5ndW5hbiBNb2RlbCBSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsKioNCg0KIyMjIDIuMi4xLiBNZW5hbXBpbGthbiBLb2RlIHVudHVrIE1vZGVsIFJlZ3Jlc2kgTG9naXN0aWsgTXVsdGlub21pYWwNCg0KYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCg0KIyAxLiBQYW5nZ2lsIGxpYnJhcnkgeWFuZyBkaWJ1dHVoa2FuDQpsaWJyYXJ5KG5uZXQpICAgICMgdW50dWsgZnVuZ3NpIG11bHRpbm9tKCkNCmxpYnJhcnkoZHBseXIpICAgIyB1bnR1ayBvbGFoIGRhdGENCg0KIyAyLiBCYWNhIGZpbGUgQ1NWDQpkYXRhIDwtIHJlYWQuY3N2KCJkYXRhIG11bHRpbm9taWFsIGxvZ2lzdGljcyByZWdyZXNzaW9uIDIuY3N2IiwNCiAgICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICBjb2xDbGFzc2VzID0gImNoYXJhY3RlciIsDQogICAgICAgICAgICAgICAgIGNoZWNrLm5hbWVzID0gRkFMU0UpDQoNCiMgMy4gVWJhaCB0aXBlIGRhdGEgYWdhciBiaXNhIGRpYW5hbGlzaXMNCmRhdGFfbXVsdGkgPC0gZGF0YSAlPiUNCiAgbXV0YXRlKA0KICAgIFBlcmlrbGFuYW4gICAgICAgICAgID0gYXMubnVtZXJpYyhnc3ViKCJcXC4iLCAiIiwgUGVyaWtsYW5hbikpLA0KICAgIGBUZW5hZ2EgUGVuanVhbGFuYCAgID0gYXMubnVtZXJpYyhnc3ViKCJcXC4iLCAiIiwgYFRlbmFnYSBQZW5qdWFsYW5gKSksDQogICAgS2VwdWFzYW4gICAgICAgICAgICAgPSBhcy5udW1lcmljKGdzdWIoIlxcLiIsICIiLCBLZXB1YXNhbikpLA0KICAgIFBlcnNhaW5nYW4gICAgICAgICAgID0gYXMubnVtZXJpYyhnc3ViKCJcXC4iLCAiIiwgUGVyc2FpbmdhbikpLA0KICAgIGBUaW5na2F0IEtlc3Vrc2VzYW5gID0gZmFjdG9yKGBUaW5na2F0IEtlc3Vrc2VzYW5gLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IGMoIlJlbmRhaCIsICJTZWRhbmciLCAiVGluZ2dpIikpDQogICkNCg0KIyA0LiBCYW5ndW4gbW9kZWwgcmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbA0KbW9kZWxfbXVsdGkgPC0gbXVsdGlub20oDQogIGBUaW5na2F0IEtlc3Vrc2VzYW5gIH4gUGVyaWtsYW5hbiArIGBUZW5hZ2EgUGVuanVhbGFuYCArIEtlcHVhc2FuICsgUGVyc2FpbmdhbiwNCiAgZGF0YSA9IGRhdGFfbXVsdGkNCikNCg0KIyA1LiBUYW1waWxrYW4gcmluZ2thc2FuIG1vZGVsDQpzdW1tYXJ5KG1vZGVsX211bHRpKQ0KDQojIDYuIEhpdHVuZyBuaWxhaSB6LXZhbHVlIGRhbiBwLXZhbHVlDQp6X3ZhbHVlcyA8LSBzdW1tYXJ5KG1vZGVsX211bHRpKSRjb2VmZmljaWVudHMgLyBzdW1tYXJ5KG1vZGVsX211bHRpKSRzdGFuZGFyZC5lcnJvcnMNCnBfdmFsdWVzIDwtIDIgKiAoMSAtIHBub3JtKGFicyh6X3ZhbHVlcykpKQ0KDQpoYXNpbF9tb2RlbCA8LSBjYmluZCgNCiAgInotdmFsdWUiID0gcm91bmQoel92YWx1ZXMsIDMpLA0KICAicC12YWx1ZSIgPSByb3VuZChwX3ZhbHVlcywgNCkNCikNCg0KIyA3LiBUYW1waWxrYW4gaGFzaWwgYWtoaXINCmhhc2lsX21vZGVsDQoNCmBgYA0KDQojIyMgMi4yLjIgKipJbnRlcnByZXRhc2kgT3V0cHV0IE1vZGVsKioNCg0KTW9kZWwgeWFuZyBkaWphbGFua2FuIHN1ZGFoICoqYmVyaGFzaWwgKGNvbnZlcmdlZCkqKiwgYXJ0aW55YSBwcm9ncmFtbnlhIGJpc2Egc2VsZXNhaSBtZW5naGl0dW5nLg0KVGFwaSwgaGFzaWxueWEgbWVudW5qdWtrYW4gYmFod2EgKip0aWRhayBhZGEgZmFrdG9yIHlhbmcgYmVuYXItYmVuYXIgYmVycGVuZ2FydWggc2VjYXJhIHNpZ25pZmlrYW4uKioNCg0KTWFyaSBsaWhhdCBzYXR1IHBlciBzYXR1IGhhc2lsbnlhIDoNCg0KIyMjIyAgYS5UYWJlbCBLb2VmaXNpZW4NCg0KfCBLYXRlZ29yaSB8IFZhcmlhYmVsICAgICAgICAgfCBOaWxhaSBLb2VmaXNpZW4gICAgICAgfCBBcnRpIFNpbmdrYXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IFNlZGFuZyAgIHwgUGVyaWtsYW5hbiAgICAgICB8IC0wLjAwMDAwMDAwMDAwMDAwMDAxOCB8IEhhbXBpciBub2wg4oaSIElrbGFuIHRpZGFrIGJlcnBlbmdhcnVoIG55YXRhICAgICAgICAgICAgICB8DQp8IFNlZGFuZyAgIHwgVGVuYWdhIFBlbmp1YWxhbiB8IC0wLjAwMDAwMDAwMDAwMDAwMDAxMCB8IEhhbXBpciBub2wg4oaSIEp1bWxhaCB0ZW5hZ2EgcGVuanVhbGFuIHRpZGFrIGJlcnBlbmdhcnVoICB8DQp8IFNlZGFuZyAgIHwgS2VwdWFzYW4gICAgICAgICB8IC0wLjAwMDAwMDAwMDAwMDAwMDA1OSB8IEhhbXBpciBub2wg4oaSIEtlcHVhc2FuIHBlbGFuZ2dhbiB0aWRhayBiZXJwZW5nYXJ1aCBueWF0YSB8DQp8IFNlZGFuZyAgIHwgUGVyc2FpbmdhbiAgICAgICB8ICswLjAwMDAwMDAwMDAwMDAwMDEwMiB8IEtlY2lsIHNla2FsaSDihpIgVGlkYWsgYmVycGVuZ2FydWggICAgICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbmdnaSAgIHwgUGVyaWtsYW5hbiAgICAgICB8IC0wLjAwMDAwMDAwMDAwMDAwMDE2NyB8IEhhbXBpciBub2wg4oaSIElrbGFuIHRpZGFrIGJlcnBlbmdhcnVoICAgICAgICAgICAgICAgICAgICB8DQp8IFRpbmdnaSAgIHwgVGVuYWdhIFBlbmp1YWxhbiB8ICswLjAwMDAwMDAwMDAwMDAwMDI0NCB8IEhhbXBpciBub2wg4oaSIEp1bWxhaCBzYWxlcyB0aWRhayBiZXJwZW5nYXJ1aCAgICAgICAgICAgICB8DQp8IFRpbmdnaSAgIHwgS2VwdWFzYW4gICAgICAgICB8ICswLjAwMDAwMDAwMDAwMDAwMDE2OCB8IEhhbXBpciBub2wg4oaSIEtlcHVhc2FuIHRpZGFrIGJlcnBlbmdhcnVoICAgICAgICAgICAgICAgICB8DQp8IFRpbmdnaSAgIHwgUGVyc2FpbmdhbiAgICAgICB8IC0wLjAwMDAwMDAwMDAwMDAwMDE5MSB8IEhhbXBpciBub2wg4oaSIFBlcnNhaW5nYW4gdGlkYWsgYmVycGVuZ2FydWggICAgICAgICAgICAgICB8DQoNCg0KPiBTZW11YSBhbmdrYSBpbmkgKipzYW5nYXQtc2FuZ2F0IGtlY2lsIChtZW5kZWthdGkgbm9sKSoqLCBhcnRpbnlhICoqdGlkYWsgYWRhIGh1YnVuZ2FuIG55YXRhKiogYW50YXJhIHZhcmlhYmVsLXZhcmlhYmVsIHRlcnNlYnV0IGRlbmdhbiDigJxUaW5na2F0IEtlc3Vrc2VzYW7igJ0uDQoNCg0KIyMjIyBiLiBTdGFuZGFyZCBFcnJvciANCg0KSGFzaWxueWEgc2VwZXJ0aSBpbmk6DQoNCnwgS2F0ZWdvcmkgfCBWYXJpYWJlbCAgICAgICAgIHwgU3RhbmRhcmQgRXJyb3IgICAgICAgfA0KfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IFNlZGFuZyAgIHwgUGVyaWtsYW5hbiAgICAgICB8IDAuMDAwMDAwMDAwMDAwMDAwMDc0IHwNCnwgU2VkYW5nICAgfCBUZW5hZ2EgUGVuanVhbGFuIHwgMC4wMDAwMDAwMDAwMDAwMDAxNDIgfA0KfCBTZWRhbmcgICB8IEtlcHVhc2FuICAgICAgICAgfCAwLjAwMDAwMDAwMDAwMDAwMDA1OCB8DQp8IFNlZGFuZyAgIHwgUGVyc2FpbmdhbiAgICAgICB8IDAuMDAwMDAwMDAwMDAwMDAwMDU1IHwNCnwgVGluZ2dpICAgfCBQZXJpa2xhbmFuICAgICAgIHwgMC4wMDAwMDAwMDAwMDAwMDAwODYgfA0KfCBUaW5nZ2kgICB8IFRlbmFnYSBQZW5qdWFsYW4gfCAwLjAwMDAwMDAwMDAwMDAwMDE1MCB8DQp8IFRpbmdnaSAgIHwgS2VwdWFzYW4gICAgICAgICB8IDAuMDAwMDAwMDAwMDAwMDAwMDU5IHwNCnwgVGluZ2dpICAgfCBQZXJzYWluZ2FuICAgICAgIHwgMC4wMDAwMDAwMDAwMDAwMDAwNjIgfA0KDQpBZGEganVnYSBiZWJlcmFwYSAqKk5hTiAoTm90IGEgTnVtYmVyKSoqIGRpIGJhZ2lhbiBpbnRlcmNlcHQsIGFydGlueWE6DQoNCj4gTW9kZWwgdGlkYWsgYmlzYSBtZW5naGl0dW5nIGthcmVuYSBkYXRhbnlhICoqdGVybGFsdSBtaXJpcCoqIGFudGFyIGthdGVnb3JpIChSZW5kYWjigJNTZWRhbmfigJNUaW5nZ2kpLg0KDQp5YW5nIGFydGlueWE6DQoNCj4gRGF0YSB0ZXJsYWx1IOKAnHNlcmFnYW3igJ0g4oCUIHNlaGluZ2dhIG1vZGVsIGJpbmd1bmcgbWVtYmVkYWthbiBtYW5hIHVzYWhhIHlhbmcgYmVuYXItYmVuYXIgcmVuZGFoLCBzZWRhbmcsIGF0YXUgdGluZ2dpLg0KDQoNCiMjIyMgYy5SZXNpZHVhbCBEZXZpYW5jZSBkYW4gQUlDDQoNCnwgSXN0aWxhaCAgICAgICAgICAgICAgIHwgTmlsYWkgIHwgQXJ0aSBTZWRlcmhhbmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCAqKlJlc2lkdWFsIERldmlhbmNlKiogfCA0MzkuNDQgfCBTZW1ha2luIGtlY2lsIG5pbGFpbnlhIHNlbWFraW4gYmFpay4gTmlsYWkgaW5pIG1hc2loIGN1a3VwIGJlc2FyIOKGkiBtb2RlbCBiZWx1bSBjb2NvayBkZW5nYW4gZGF0YS4gfA0KfCAqKkFJQyoqICAgICAgICAgICAgICAgfCA0NTkuNDQgfCBEaWd1bmFrYW4gdW50dWsgbWVtYmFuZGluZ2thbiBtb2RlbC4gTmlsYWkgYmVzYXIgYmVyYXJ0aSBtb2RlbG55YSBiZWx1bSBiYWd1cy4gICAgICAgICAgICAgICAgICAgIHwNCg0KPiBNb2RlbCBpbmkgYmVsdW0gYmlzYSBtZW5qZWxhc2thbiBodWJ1bmdhbiBhbnRhcmEgZmFrdG9yIGRhbiBrZXN1a3Nlc2FuIGRlbmdhbiBiYWlrLg0KDQoNCiMjIyMgZC5OaWxhaSB6LXZhbHVlIGRhbiBwLXZhbHVlDQoNCkluaSBkaWd1bmFrYW4gdW50dWsgbWVsaWhhdCBhcGFrYWggcGVuZ2FydWggdGlhcCB2YXJpYWJlbCAqKnNpZ25pZmlrYW4gYXRhdSB0aWRhayoqLg0KDQpDb250b2ggaGFzaWxueWE6DQoNCnwgS2F0ZWdvcmkgfCBWYXJpYWJlbCAgICAgICAgIHwgei12YWx1ZSB8IHAtdmFsdWUgfA0KfCAtLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tIHwgLS0tLS0tLSB8DQp8IFNlZGFuZyAgIHwgUGVyaWtsYW5hbiAgICAgICB8IC0wLjI0NCAgfCAwLjgwNzQgIHwNCnwgU2VkYW5nICAgfCBUZW5hZ2EgUGVuanVhbGFuIHwgLTAuMDcyICB8IDAuOTQyNiAgfA0KfCBTZWRhbmcgICB8IEtlcHVhc2FuICAgICAgICAgfCAtMS4wMTMgIHwgMC4zMTEwICB8DQp8IFNlZGFuZyAgIHwgUGVyc2FpbmdhbiAgICAgICB8IDEuODMzICAgfCAwLjA2NjggIHwNCnwgVGluZ2dpICAgfCBQZXJpa2xhbmFuICAgICAgIHwgLTEuOTI0ICB8IDAuMDU0MyAgfA0KfCBUaW5nZ2kgICB8IFRlbmFnYSBQZW5qdWFsYW4gfCAxLjYyNyAgIHwgMC4xMDM4ICB8DQp8IFRpbmdnaSAgIHwgS2VwdWFzYW4gICAgICAgICB8IDIuODQyICAgfCAwLjAwNDUgIHwNCnwgVGluZ2dpICAgfCBQZXJzYWluZ2FuICAgICAgIHwgLTMuMDQ0ICB8IDAuMDAyMyAgfA0KDQoqKkF0dXJhbiBzZWRlcmhhbmFueWE6KioNCg0KKiBKaWthICoqcC12YWx1ZSA8IDAuMDUqKiwgYmVyYXJ0aSBzaWduaWZpa2FuIChiZXJwZW5nYXJ1aCBueWF0YSkNCiogSmlrYSAqKnAtdmFsdWUgPiAwLjA1KiosIGJlcmFydGkgdGlkYWsgc2lnbmlmaWthbg0KDQogRGFyaSBoYXNpbCBkaSBhdGFzOg0KDQoqIFVudHVrIGthdGVnb3JpICoqU2VkYW5nKiosIHNlbXVhIHAtdmFsdWUgKio+IDAuMDUqKiDihpIgdGlkYWsgYWRhIHBlbmdhcnVoIHNpZ25pZmlrYW4uDQoqIFVudHVrIGthdGVnb3JpICoqVGluZ2dpKiosIGhhbnlhICoqS2VwdWFzYW4gKDAuMDA0NSkqKiBkYW4gKipQZXJzYWluZ2FuICgwLjAwMjMpKiogeWFuZyB0ZXJsaWhhdCAqKnNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3RpayoqLCB0YXBpIGthcmVuYSBuaWxhaSBrb2VmaXNpZW5ueWEgc2FuZ2F0IGtlY2lsLCBlZmVrIG55YXRhbnlhIHRldGFwICoqbGVtYWggc2VrYWxpKiouDQoNCg0KIyMjIyAqKktlc2ltcHVsYW4gQWtoaXIgKioNCg0KUGVuZWxpdGkgbWVtYmFuZ3VuIG1vZGVsIG11bHRpbm9taWFsIGxvZ2lzdGljIHJlZ3Jlc3Npb24gdW50dWsgbWVtcHJlZGlrc2kgdGluZ2thdCBrZXN1a3Nlc2FuIGJlcmRhc2Fya2FuIGZha3RvciBwZXJpa2xhbmFuLCB0ZW5hZ2EgcGVuanVhbGFuLCBrZXB1YXNhbiBwZWxhbmdnYW4sIGRhbiBwZXJzYWluZ2FuLg0KTW9kZWwgdGVsYWggYmVyaGFzaWwgZGlqYWxhbmthbiAoZGl0YW5kYWkgZGVuZ2FuIHN0YXR1cyAqY29udmVyZ2VkKiksIG5hbXVuIGhhc2lsbnlhIG1lbnVuanVra2FuIGJhaHdhOg0KDQoxLiAqKk5pbGFpIGtvZWZpc2llbiBzZW11YSB2YXJpYWJlbCBzYW5nYXQga2VjaWwqKi4NCiAgIEFydGlueWEsIHBlcnViYWhhbiBuaWxhaSBwYWRhIGtlZW1wYXQgdmFyaWFiZWwgdGVyc2VidXQgdGlkYWsgbWVtYmVyaWthbiBwZW5nYXJ1aCB5YW5nIG55YXRhIHRlcmhhZGFwIHBlcnViYWhhbiB0aW5na2F0IGtlc3Vrc2VzYW4uDQoNCjIuICoqTmlsYWkgU3RhbmRhcmQgRXJyb3IqKiB5YW5nIHNhbmdhdCBrZWNpbCBkYW4gbXVuY3VsbnlhICoqTmFOKiogbWVudW5qdWtrYW4gYmFod2EgbW9kZWwga2VzdWxpdGFuIG1lbmdoaXR1bmcga2FyZW5hIGRhdGEgdGlkYWsgbWVtaWxpa2kgdmFyaWFzaSB5YW5nIGN1a3VwIGFudGFyIGthdGVnb3JpLg0KDQozLiAqKk5pbGFpIFJlc2lkdWFsIERldmlhbmNlIHNlYmVzYXIgNDM5LjQ0KiogZGFuICoqQUlDIHNlYmVzYXIgNDU5LjQ0KiogbWVudW5qdWtrYW4gYmFod2EgdGluZ2thdCBrZXNhbGFoYW4gbW9kZWwgbWFzaWggdGluZ2dpLiBNb2RlbCBiZWx1bSBtYW1wdSBtZW5nZ2FtYmFya2FuIGh1YnVuZ2FuIHlhbmcgYmFpayBhbnRhcmEgdmFyaWFiZWwgaW5kZXBlbmRlbiBkYW4gdGluZ2thdCBrZXN1a3Nlc2FuLg0KDQpTZWNhcmEga2VzZWx1cnVoYW4sIGRhcGF0IGRpc2ltcHVsa2FuIGJhaHdhICoqbW9kZWwgYmVsdW0gYmVyaGFzaWwgbWVuamVsYXNrYW4gcGVyYmVkYWFuIHRpbmdrYXQga2VzdWtzZXNhbiBzZWNhcmEgYWt1cmF0KiouDQpIYWwgaW5pIGtlbXVuZ2tpbmFuIHRlcmphZGkga2FyZW5hICoqanVtbGFoIGRhdGEgeWFuZyB0ZXJsYWx1IGtlY2lsKiosICoqa2F0ZWdvcmkgeWFuZyB0aWRhayBzZWltYmFuZyoqLCBhdGF1ICoqbmlsYWkgdmFyaWFiZWwgeWFuZyBtaXJpcCBhbnRhciBvYnNlcnZhc2kqKi4NCg0KDQojIyAyLjMuICoqVmlzdWFsaXNhc2kgSGFzaWwqKg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgcmVzdWx0cz0naGlkZSd9DQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIPCfk4ogVmlzdWFsaXNhc2kgTXVsdGlub21pYWwgTG9naXN0aWMgUmVncmVzc2lvbg0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQojIDHvuI/ig6MgSW5zdGFsbCAmIHBhbmdnaWwgbGlicmFyeSB5YW5nIGRpcGVybHVrYW4NCiMgaW5zdGFsbC5wYWNrYWdlcyhjKCJubmV0IiwgImdncGxvdDIiLCAiZHBseXIiLCAidGlkeXIiKSkNCmxpYnJhcnkobm5ldCkNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KHRpZHlyKQ0KDQojIDLvuI/ig6MgQmFjYSBkYXRhc2V0DQpkYXRhIDwtIHJlYWQuY3N2KCJkYXRhIG11bHRpbm9taWFsIGxvZ2lzdGljcyByZWdyZXNzaW9uIDIuY3N2IiwNCiAgICAgICAgICAgICAgICAgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFLA0KICAgICAgICAgICAgICAgICBjaGVjay5uYW1lcyA9IEZBTFNFKQ0KDQojIDPvuI/ig6MgQmVyc2loa2FuIG5hbWEga29sb20gYmlhciBiaXNhIGRpcGFuZ2dpbCBkaSBSDQpuYW1lcyhkYXRhKSA8LSBtYWtlLm5hbWVzKG5hbWVzKGRhdGEpKQ0KDQojIDTvuI/ig6MgUGFzdGlrYW4gdmFyaWFiZWwgdGFyZ2V0IChUaW5na2F0IEtlc3Vrc2VzYW4pIGJlcnVwYSBmYWt0b3INCmRhdGEkVGluZ2thdC5LZXN1a3Nlc2FuIDwtIGZhY3RvcihkYXRhJFRpbmdrYXQuS2VzdWtzZXNhbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJSZW5kYWgiLCAiU2VkYW5nIiwgIlRpbmdnaSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yZGVyZWQgPSBUUlVFKQ0KDQojIDXvuI/ig6MgQmFuZ3VuIG1vZGVsIHJlZ3Jlc2kgbG9naXN0aWsgbXVsdGlub21pYWwNCm1vZGVsIDwtIG11bHRpbm9tKFRpbmdrYXQuS2VzdWtzZXNhbiB+IFBlcmlrbGFuYW4gKyBUZW5hZ2EuUGVuanVhbGFuICsgS2VwdWFzYW4gKyBQZXJzYWluZ2FuLA0KICAgICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEpDQoNCiMgNu+4j+KDoyBCdWF0IHByZWRpa3NpIHByb2JhYmlsaXRhcyB1bnR1ayBzZXRpYXAga2VsYXMNCnByZWRfcHJvYnMgPC0gcHJlZGljdChtb2RlbCwgdHlwZSA9ICJwcm9icyIpDQoNCiMgN++4j+KDoyBHYWJ1bmdrYW4gaGFzaWwgcHJlZGlrc2kga2UgZGF0YXNldA0KZGF0YV9wcmVkIDwtIGNiaW5kKGRhdGEsIHByZWRfcHJvYnMpDQoNCiMgOO+4j+KDoyBVYmFoIGRhdGEga2UgZm9ybWF0IHBhbmphbmcgdW50dWsgcGxvdHRpbmcNCmRhdGFfbG9uZyA8LSBkYXRhX3ByZWQgJT4lDQogIHBpdm90X2xvbmdlcihjb2xzID0gYyhQZXJpa2xhbmFuLCBUZW5hZ2EuUGVuanVhbGFuLCBLZXB1YXNhbiwgUGVyc2FpbmdhbiksDQogICAgICAgICAgICAgICBuYW1lc190byA9ICJWYXJpYWJlbCIsDQogICAgICAgICAgICAgICB2YWx1ZXNfdG8gPSAiTmlsYWkiKQ0KDQojIDnvuI/ig6MgQnVhdCB2aXN1YWxpc2FzaQ0KZ2dwbG90KGRhdGFfbG9uZywgYWVzKHggPSBOaWxhaSwgeSA9IGFzLm51bWVyaWMoVGluZ2thdC5LZXN1a3Nlc2FuKSkpICsNCiAgZ2VvbV9qaXR0ZXIoYWVzKGNvbG9yID0gVGluZ2thdC5LZXN1a3Nlc2FuKSwgd2lkdGggPSAwLjIsIGFscGhhID0gMC42LCBzaXplID0gMikgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG9lc3MiLCBjb2xvciA9ICJyZWQiLCBzZSA9IEZBTFNFLCBzaXplID0gMS4yKSArDQogIGZhY2V0X3dyYXAoflZhcmlhYmVsLCBzY2FsZXMgPSAiZnJlZV94IiwgbmNvbCA9IDIpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IDE6MywgbGFiZWxzID0gYygiUmVuZGFoIiwgIlNlZGFuZyIsICJUaW5nZ2kiKSkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIlZpc3VhbGlzYXNpIE11bHRpbm9taWFsIExvZ2lzdGljIFJlZ3Jlc3Npb24iLA0KICAgIHN1YnRpdGxlID0gIkh1YnVuZ2FuIGFudGFyYSBWYXJpYWJlbCBQcmVkaWt0b3IgZGFuIFRpbmdrYXQgS2VzdWtzZXNhbiIsDQogICAgeCA9ICJOaWxhaSBWYXJpYWJlbCBQcmVkaWt0b3IiLA0KICAgIHkgPSAiS2F0ZWdvcmkgVGluZ2thdCBLZXN1a3Nlc2FuIiwNCiAgICBjb2xvciA9ICJLYXRlZ29yaSINCiAgKSArDQogIHRoZW1lX21pbmltYWwoYmFzZV9zaXplID0gMTMpICsNCiAgdGhlbWUoDQogICAgbGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChmYWNlID0gImJvbGQiLCBoanVzdCA9IDAuNSksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSkNCiAgKQ0KDQpgYGANCg0KIyMjIDIuMy4xICoqUGVuamVsYXNhbiBUZW50YW5nIFZpc3VhbGlzYXNpKioNCg0KR3JhZmlrIGluaSBtZW5hbXBpbGthbiAqKmh1YnVuZ2FuIGFudGFyYSBlbXBhdCB2YXJpYWJlbCBwcmVkaWt0b3IqKg0KKCpQZXJpa2xhbmFuLCBUZW5hZ2EgUGVuanVhbGFuLCBLZXB1YXNhbiwgZGFuIFBlcnNhaW5nYW4qKQ0KZGVuZ2FuICoqa2F0ZWdvcmkgVGluZ2thdCBLZXN1a3Nlc2FuKiogKCpSZW5kYWgsIFNlZGFuZywgVGluZ2dpKikuDQoNCiogKipTdW1idSBYIChob3Jpem9udGFsKSoqIOKGkiBuaWxhaSBkYXJpIHRpYXAgdmFyaWFiZWwgcHJlZGlrdG9yLg0KKiAqKlN1bWJ1IFkgKHZlcnRpa2FsKSoqIOKGkiBrYXRlZ29yaSB0aW5na2F0IGtlc3Vrc2VzYW4gKDEgPSBSZW5kYWgsIDIgPSBTZWRhbmcsIDMgPSBUaW5nZ2kpLg0KKiAqKlRpdGlrIHdhcm5hKiog4oaSIG1hc2luZy1tYXNpbmcgb2JzZXJ2YXNpIChkYXRhIHBlcnVzYWhhYW4pLg0KDQogICogVW5ndSA9IFJlbmRhaA0KICAqIEhpamF1ID0gU2VkYW5nDQogICogS3VuaW5nID0gVGluZ2dpDQoqICoqR2FyaXMgbWVyYWgqKiDihpIgdHJlbiAoaGFzaWwgc21vb3RoaW5nIExPRVNTKSwgbWVuZ2dhbWJhcmthbiBhcmFoIHVtdW0gaHVidW5nYW4uDQoNCg0KIyMjIyBhLktlcHVhc2FuDQoNCiogVGVybGloYXQgKipzZW1ha2luIHRpbmdnaSBuaWxhaSBLZXB1YXNhbioqLCB0aXRpay10aXRpayAqa3VuaW5nIChUaW5nZ2kpKiBtYWtpbiBiYW55YWsgZGkgYmFnaWFuIGF0YXMgZ3JhZmlrLg0KKiBHYXJpcyBtZXJhaCBuYWlrIGRpIGF3YWwsIHNlZGlraXQgdHVydW4gZGkgYWtoaXIg4oCUIHRhcGkgc2VjYXJhIHVtdW0gbWVudW5qdWtrYW4gKip0cmVuIHBvc2l0aWYgcmluZ2FuKiouDQoqIEluaSBiZXJhcnRpOg0KDQogID4gU2VtYWtpbiB0aW5nZ2kgdGluZ2thdCBrZXB1YXNhbiBwZWxhbmdnYW4sIHNlbWFraW4gYmVzYXIgcGVsdWFuZyBwZXJ1c2FoYWFuIGJlcmFkYSBwYWRhIHRpbmdrYXQga2VzdWtzZXNhbiAqU2VkYW5nIGF0YXUgVGluZ2dpKi4NCiogSGFzaWwgaW5pICoqc2VzdWFpKiogZGVuZ2FuIHAtdmFsdWUgbW9kZWwgKGRpIGJhZ2lhbiBhbmFsaXNpcyksIGRpIG1hbmEgKipLZXB1YXNhbiAocCA9IDAuMDA0NSkqKiB0ZXJtYXN1ayBzaWduaWZpa2FuIHVudHVrIGthdGVnb3JpIOKAnFRpbmdnaeKAnS4NCg0K8J+foiAqKktlc2ltcHVsYW46KiogS2VwdWFzYW4gcGVsYW5nZ2FuICoqbWVtcHVueWFpIHBlbmdhcnVoIHBvc2l0aWYgbnlhdGEqKiB0ZXJoYWRhcCBwZW5pbmdrYXRhbiB0aW5na2F0IGtlc3Vrc2VzYW4uDQoNCg0KIyMjIyBiLiBQZXJpa2xhbmFuDQoNCiogUG9sYW55YSBqdWdhIG1lbnVuanVra2FuICoqZ2FyaXMgbWVyYWggY2VuZGVydW5nIG5haWsga2Uga2FuYW4qKi4NCiogQXJ0aW55YSwgbWFraW4gYmVzYXIgZGFuYSBwcm9tb3NpLCBtYWtpbiB0aW5nZ2kgcHVsYSBwZWx1YW5nIGtlc3Vrc2VzYW4gKGxlYmloIGJhbnlhayB0aXRpayBrdW5pbmcgZGkga2FuYW4gYXRhcykuDQoqIE5hbXVuLCB0cmVuIGluaSAqKnRpZGFrIHRlcmxhbHUgdGFqYW0qKiwgZGFuIGRhbGFtIGhhc2lsIG1vZGVsLCBwLXZhbHVlLW55YSAqKnRpZGFrIHNpZ25pZmlrYW4qKiAoMC4wNTQzIOKGkiBzZWRpa2l0IGRpIGF0YXMgMC4wNSkuDQoNCvCfn6EgKipLZXNpbXB1bGFuOioqIFBlcmlrbGFuYW4gcHVueWEgKiphcmFoIHBlbmdhcnVoIHBvc2l0aWYqKiwgdGFwaSAqKmJlbHVtIGN1a3VwIGt1YXQgc2VjYXJhIHN0YXRpc3RpayoqLg0KDQoNCiMjIyMgYy4gUGVyc2Fpbmdhbg0KDQoqIEdhcmlzIG1lcmFoIGp1c3RydSBzZWRpa2l0ICoqdHVydW4qKiBrZXRpa2EgbmlsYWkgUGVyc2FpbmdhbiBtZW5pbmdrYXQuDQoqIEluaSBtZW5hbmRha2FuIGJhaHdhICoqc2VtYWtpbiB0aW5nZ2kgdGluZ2thdCBwZXJzYWluZ2FuKiosIHBlbHVhbmcgdW50dWsgbWVuY2FwYWkga2VzdWtzZXNhbiBjZW5kZXJ1bmcgbWVudXJ1bi4NCiogRGFsYW0gaGFzaWwgcmVncmVzaSwgdmFyaWFiZWwgaW5pIGp1Z2EgKipzaWduaWZpa2FuIChwID0gMC4wMDIzKSoqIHVudHVrIGthdGVnb3JpIOKAnFRpbmdnaeKAnSwgZGFuIGtvZWZpc2llbm55YSAqKm5lZ2F0aWYqKi4NCg0K8J+UtCAqKktlc2ltcHVsYW46KiogUGVyc2FpbmdhbiBwdW55YSAqKnBlbmdhcnVoIG5lZ2F0aWYgeWFuZyBzaWduaWZpa2FuKiogdGVyaGFkYXAga2VzdWtzZXNhbiDigJQgYXJ0aW55YSwgcGVyc2FpbmdhbiBrZXRhdCBiaXNhIG1lbnVydW5rYW4gcGVsdWFuZyBzdWtzZXMuDQoNCg0KIyMjIyBkLiBUZW5hZ2EgUGVuanVhbGFuDQoNCiogR2FyaXMgbWVyYWggbmFpayBwZXJsYWhhbiBzZWlyaW5nIG1lbmluZ2thdG55YSBqdW1sYWggdGVuYWdhIHBlbmp1YWxhbi4NCiogTmFtdW4sIHNlYmFyYW4gdGl0aWtueWEgKipjdWt1cCBhY2FrKiosIGphZGkgaHVidW5nYW4gaW5pICoqbGVtYWggZGFuIHRpZGFrIHNpZ25pZmlrYW4qKiBkaSBoYXNpbCBtb2RlbCAocCA9IDAuMTAzOCkuDQoqIEphZGkgbWVza2lwdW4gYXJhaG55YSBwb3NpdGlmLCBlZmVrbnlhIGtlY2lsIGJhbmdldC4NCg0K8J+foSAqKktlc2ltcHVsYW46KiogSnVtbGFoIHRlbmFnYSBwZW5qdWFsYW4gY2VuZGVydW5nICoqbWVuaW5na2F0a2FuIHBlbHVhbmcgc3Vrc2VzKiosIHRhcGkgKip0aWRhayBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsqKi4NCg0KDQojIyMgKipLZXNpbXB1bGFuIFVtdW0gZGFyaSBWaXN1YWxpc2FzaSoqDQoNCkRhcmkgZW1wYXQgZ3JhZmlrIHRlcnNlYnV0IGJpc2EgZGlzaW1wdWxrYW46DQoNCnwgVmFyaWFiZWwgICAgICAgICAgICAgfCBBcmFoIEh1YnVuZ2FuIHwgU2lnbmlmaWthbnNpICAgICAgICAgfCBBcnRpIFZpc3VhbGlzYXNpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfA0KfCAqKktlcHVhc2FuKiogICAgICAgICB8IFBvc2l0aWYgICAgICAgfCDinIUgU2lnbmlmaWthbiAgICAgICAgIHwgS2VwdWFzYW4gdGluZ2dpIOKGkiBwZWx1YW5nIHN1a3NlcyBtZW5pbmdrYXQgICAgICAgICAgICB8DQp8ICoqUGVyaWtsYW5hbioqICAgICAgIHwgUG9zaXRpZiAgICAgICB8IOKaoO+4jyBIYW1waXIgc2lnbmlmaWthbiB8IElrbGFuIGxlYmloIGJhbnlhayDihpIgc2VkaWtpdCBtZW5haWtrYW4gcGVsdWFuZyBzdWtzZXMgfA0KfCAqKlBlcnNhaW5nYW4qKiAgICAgICB8IE5lZ2F0aWYgICAgICAgfCDinIUgU2lnbmlmaWthbiAgICAgICAgIHwgUGVyc2FpbmdhbiB0aW5nZ2kg4oaSIHBlbHVhbmcgc3Vrc2VzIG1lbnVydW4gICAgICAgICAgICB8DQp8ICoqVGVuYWdhIFBlbmp1YWxhbioqIHwgUG9zaXRpZiBsZW1haCB8IOKdjCBUaWRhayBzaWduaWZpa2FuICAgfCBKdW1sYWggc2FsZXMgbGViaWggYmFueWFrIOKGkiBwZW5nYXJ1aCBrZWNpbCAgICAgICAgICAgIHwNCg0KLS0tDQoNCiMgMy4qKktlc2ltcHVsYW4gS2VzZWx1cnVoYW4gUmVncmVzaSBMb2dpc3RpayBNdWx0aW5vbWlhbCoqIA0KDQpTZWNhcmEga2VzZWx1cnVoYW4sICoqUmVncmVzaSBMb2dpc3RpayBNdWx0aW5vbWlhbCoqIG1lcnVwYWthbiBzYWxhaCBzYXR1IG1ldG9kZSBzdGF0aXN0aWsgeWFuZyBkaWd1bmFrYW4gdW50dWsgbWVtcHJlZGlrc2kgKip2YXJpYWJlbCBkZXBlbmRlbiBiZXJzaWZhdCBrYXRlZ29yaWsgZGVuZ2FuIGxlYmloIGRhcmkgZHVhIGtlbGFzKiosIGJlcmRhc2Fya2FuIGJlYmVyYXBhIHZhcmlhYmVsIGluZGVwZW5kZW4geWFuZyBiZXJzaWZhdCBudW1lcmlrIGF0YXUga2F0ZWdvcmlrLg0KQmVyYmVkYSBkZW5nYW4gcmVncmVzaSBsb2dpc3RpayBiaW5lciB5YW5nIGhhbnlhIG1lbWJlZGFrYW4gZHVhIGhhc2lsIChtaXNhbG55YSDigJx5YeKAnSBhdGF1IOKAnHRpZGFr4oCdKSwgcmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbCBtYW1wdSBtZW5nYW5hbGlzaXMgKipwZWx1YW5nIHN1YXR1IG9ic2VydmFzaSBiZXJhZGEgcGFkYSBzYWxhaCBzYXR1IGRhcmkgYmViZXJhcGEga2F0ZWdvcmkqKi4NCg0KRGFsYW0gcGVuZWxpdGlhbiBpbmksIG1ldG9kZSB0ZXJzZWJ1dCBkaWd1bmFrYW4gdW50dWsgbWVuZ2FuYWxpc2lzICoqZmFrdG9yLWZha3RvciB5YW5nIG1lbWVuZ2FydWhpIFRpbmdrYXQgS2VzdWtzZXNhbiBVc2FoYSoqLCBkZW5nYW4gZW1wYXQgdmFyaWFiZWwgcHJlZGlrdG9yIHlhaXR1ICoqUGVyaWtsYW5hbiwgVGVuYWdhIFBlbmp1YWxhbiwgS2VwdWFzYW4sIGRhbiBQZXJzYWluZ2FuKiouDQpBbmFsaXNpcyBkaWxha3VrYW4gdW50dWsgbWVuZ2V0YWh1aSBiYWdhaW1hbmEgc2V0aWFwIHZhcmlhYmVsIHRlcnNlYnV0IGJlcnBlbmdhcnVoIHRlcmhhZGFwIHBlbHVhbmcgc3VhdHUgdXNhaGEgYmVyYWRhIHBhZGEga2F0ZWdvcmkgKipSZW5kYWgsIFNlZGFuZywgYXRhdSBUaW5nZ2kqKi4NCg0KSGFzaWwgcGVtb2RlbGFuIG1lbnVuanVra2FuIGJhaHdhOg0KDQoxLiBNb2RlbCB0ZWxhaCAqKmJlcmhhc2lsIGRpamFsYW5rYW4gZGFuIGtvbnZlcmdlbioqLCBuYW11biBuaWxhaSAqKkFJQyBkYW4gZGV2aWFuY2UgeWFuZyB0aW5nZ2kqKiBtZW5hbmRha2FuIGJhaHdhIG1vZGVsIGJlbHVtIHNlcGVudWhueWEgbWVuZ2dhbWJhcmthbiBodWJ1bmdhbiBkYXRhIHNlY2FyYSBvcHRpbWFsLg0KMi4gVmFyaWFiZWwgKipLZXB1YXNhbioqIGJlcnBlbmdhcnVoICoqcG9zaXRpZiBzaWduaWZpa2FuKiogdGVyaGFkYXAgcGVuaW5na2F0YW4gdGluZ2thdCBrZXN1a3Nlc2FuIChwID0gMC4wMDQ1KSwgYXJ0aW55YSBzZW1ha2luIHRpbmdnaSB0aW5na2F0IGtlcHVhc2FuIHBlbGFuZ2dhbiwgc2VtYWtpbiBiZXNhciBwZWx1YW5nIHVzYWhhIG1lbmNhcGFpIGtlc3Vrc2VzYW4gdGluZ2dpLg0KMy4gVmFyaWFiZWwgKipQZXJzYWluZ2FuKiogbWVudW5qdWtrYW4gcGVuZ2FydWggKipuZWdhdGlmIHNpZ25pZmlrYW4qKiAocCA9IDAuMDAyMyksIHlhbmcgYmVyYXJ0aSBzZW1ha2luIHRpbmdnaSB0aW5na2F0IHBlcnNhaW5nYW4sIHNlbWFraW4ga2VjaWwgcGVsdWFuZyBtZW5jYXBhaSBrZXN1a3Nlc2FuIHRpbmdnaS4NCjQuIFZhcmlhYmVsICoqUGVyaWtsYW5hbioqIGRhbiAqKlRlbmFnYSBQZW5qdWFsYW4qKiBtZW51bmp1a2thbiBhcmFoIGh1YnVuZ2FuIHBvc2l0aWYsIG5hbXVuIHRpZGFrIHNpZ25pZmlrYW4gc2VjYXJhIHN0YXRpc3Rpay4NCjUuIEhhc2lsIHZpc3VhbGlzYXNpIG1lbXBlcmt1YXQgaW50ZXJwcmV0YXNpIG1vZGVsLCBkaSBtYW5hIGdhcmlzIHRyZW4gKHdhcm5hIG1lcmFoKSBwYWRhIEtlcHVhc2FuIGRhbiBQZXJpa2xhbmFuIG1lbnVuanVra2FuIGtlY2VuZGVydW5nYW4gbmFpaywgc2VkYW5na2FuIHBhZGEgUGVyc2FpbmdhbiBqdXN0cnUgbWVudXJ1bi4NCg0KRGVuZ2FuIGRlbWlraWFuLCBkYXBhdCBkaXNpbXB1bGthbiBiYWh3YToNCg0KPiAqKlJlZ3Jlc2kgTG9naXN0aWsgTXVsdGlub21pYWwgZWZla3RpZiBkaWd1bmFrYW4gdW50dWsgbWVtb2RlbGthbiBodWJ1bmdhbiBhbnRhcmEgYmViZXJhcGEgdmFyaWFiZWwgaW5kZXBlbmRlbiBkZW5nYW4gdmFyaWFiZWwgZGVwZW5kZW4geWFuZyBtZW1pbGlraSB0aWdhIGF0YXUgbGViaWgga2F0ZWdvcmkuKioNCj4gRGFsYW0gc3R1ZGkgaW5pLCBtb2RlbCBiZXJoYXNpbCBtZW51bmp1a2thbiBiYWh3YSAqKktlcHVhc2FuKiogbWVydXBha2FuIGZha3RvciB5YW5nIHBhbGluZyBiZXJwZW5nYXJ1aCBwb3NpdGlmIHRlcmhhZGFwIHRpbmdrYXQga2VzdWtzZXNhbiB1c2FoYSwgc2VkYW5na2FuICoqUGVyc2FpbmdhbioqIGJlcnBlbmdhcnVoIG5lZ2F0aWYgc2lnbmlmaWthbi4NCj4gRHVhIHZhcmlhYmVsIGxhaW5ueWEsICoqUGVyaWtsYW5hbioqIGRhbiAqKlRlbmFnYSBQZW5qdWFsYW4qKiwgYmVsdW0gbWVtYmVyaWthbiBwZW5nYXJ1aCB5YW5nIHNpZ25pZmlrYW4gdGVyaGFkYXAgcGVydWJhaGFuIHRpbmdrYXQga2VzdWtzZXNhbi4NCg0KU2ViYWdhaSBzYXJhbiwgbW9kZWwgaW5pIGRhcGF0IGRpdGluZ2thdGthbiBkZW5nYW46DQoNCiogTWVuYW1iYWgganVtbGFoIGRhbiB2YXJpYXNpIGRhdGEgYWdhciBtb2RlbCBsZWJpaCBzdGFiaWwsDQoqIE1lbGFrdWthbiB1amkgbGFuanV0YW4gc2VwZXJ0aSAqKmFuYWxpc2lzIGludGVyYWtzaSBhbnRhciB2YXJpYWJlbCoqLCBkYW4NCiogTWVuY29iYSAqKnBlbmRla2F0YW4ga2xhc2lmaWthc2kgbGFpbioqIChzZXBlcnRpICpyYW5kb20gZm9yZXN0KiBhdGF1ICpvcmRpbmFsIHJlZ3Jlc3Npb24qKSB1bnR1ayBtZWxpaGF0IHBlcmJhbmRpbmdhbiBwZXJmb3JtYSBtb2RlbC4NCg0KLS0tDQoNCiMgNC4gKipQZXJiYW5kaW5nYW4gYW50YXJhIFJlZ3Jlc2kgTG9naXN0aWsgQmluZXIgZGFuIFJlZ3Jlc2kgTG9naXN0aWsgTXV0aW5vbWlhbCoqDQoNCiMjIDQuMSAqKlBlcmJlZGFhbiBLb25zZXAgRGFzYXIqKg0KDQp8IEFzcGVrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipSZWdyZXNpIExvZ2lzdGlrIEJpbmVyKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCA6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgKipKdW1sYWggS2F0ZWdvcmkgVmFyaWFiZWwgRGVwZW5kZW4gKFkpKiogfCAyIGthdGVnb3JpIChjb250b2g6ICpZYS9UaWRhayosICpTdWtzZXMvR2FnYWwqKSAgICAgICAgICAgICAgICAgfCDiiaUgMyBrYXRlZ29yaSAoY29udG9oOiAqUmVuZGFoKiwgKlNlZGFuZyosICpUaW5nZ2kqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipKZW5pcyBBbmFsaXNpcyoqICAgICAgICAgICAgICAgICAgICAgICAgfCBNZW5naGl0dW5nIHBlbHVhbmcgdGVyamFkaW55YSBzYWxhaCBzYXR1IGRhcmkgZHVhIGhhc2lsICAgICAgICAgfCBNZW5naGl0dW5nIHBlbHVhbmcgb2JzZXJ2YXNpIG1hc3VrIGtlIHNhbGFoIHNhdHUgZGFyaSBiZWJlcmFwYSBrYXRlZ29yaSAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqUGVyc2FtYWFuIExvZ2l0KiogICAgICAgICAgICAgICAgICAgICAgIHwgSGFueWEgMSBwZXJzYW1hYW4gbG9naXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVtYmVudHVrIGJlYmVyYXBhIHBlcnNhbWFhbiBsb2dpdCAoc2ViYW55YWsga2F0ZWdvcmkgLSAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKkthdGVnb3JpIFBlbWJhbmRpbmcgKEJhc2UpKiogICAgICAgICAgICB8IFNhbGFoIHNhdHUga2F0ZWdvcmkgZGlhbmdnYXAgc2ViYWdhaSBwZW1iYW5kaW5nIChiaWFzYW55YSDigJww4oCdKSAgfCBTYWxhaCBzYXR1IGthdGVnb3JpIGRpYW5nZ2FwIGRhc2FyLCBkYW4gc2V0aWFwIGthdGVnb3JpIGxhaW4gZGliYW5kaW5na2FuIGRlbmdhbiBkYXNhciB0ZXJzZWJ1dCB8DQp8ICoqVHVqdWFuIEFuYWxpc2lzKiogICAgICAgICAgICAgICAgICAgICAgIHwgTWVuZ2V0YWh1aSBmYWt0b3ItZmFrdG9yIHlhbmcgbWVtZW5nYXJ1aGkgZHVhIGtlbXVuZ2tpbmFuIGhhc2lsIHwgTWVuZ2V0YWh1aSBmYWt0b3ItZmFrdG9yIHlhbmcgbWVtZW5nYXJ1aGkgaGFzaWwgZGVuZ2FuIGJhbnlhayB0aW5na2F0YW4gICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKkNvbnRvaCBLYXN1cyoqICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFwYWthaCBzZXNlb3JhbmcgbWVtYmVsaSBwcm9kdWsgKFlhL1RpZGFrKSAgICAgICAgICAgICAgICAgICAgICB8IFRpbmdrYXQga2VwdWFzYW4gcGVsYW5nZ2FuIChSZW5kYWgsIFNlZGFuZywgVGluZ2dpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KDQojIyA0LjIgKipQZXJiYW5kaW5nYW4gQmVyZGFzYXJrYW4gT3V0cHV0IE1vZGVsKioNCg0KfCBBc3BlayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKkJpbmFyeSBMb2dpc3RpYyBSZWdyZXNzaW9uKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqTXVsdGlub21pYWwgTG9naXN0aWMgUmVncmVzc2lvbioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgKipLb2VmaXNpZW4gKM6yKSoqICAgICAgICAgICAgICAgICB8IE1lbnVuanVra2FuIHNlYmVyYXBhIGJlc2FyIHBlbmdhcnVoIHRpYXAgdmFyaWFiZWwgdGVyaGFkYXAgcGVsdWFuZyBoYXNpbCDigJwx4oCdIChtaXNhbG55YSBzdWtzZXMpLiB8IE1lbnVuanVra2FuIHBlbmdhcnVoIHRpYXAgdmFyaWFiZWwgdGVyaGFkYXAgc2V0aWFwIGthdGVnb3JpIGRpYmFuZGluZyBrYXRlZ29yaSBkYXNhci4gICAgICAgICAgICB8DQp8ICoqSW50ZXJwcmV0YXNpIEtvZWZpc2llbioqICAgICAgICB8IEppa2EgzrIgcG9zaXRpZiDihpIgbWVuaW5na2F0a2FuIHBlbHVhbmcgc3Vrc2VzLiBKaWthIG5lZ2F0aWYg4oaSIG1lbnVydW5rYW4gcGVsdWFuZy4gICAgICAgICAgICAgICAgfCBTYW1hLCB0YXBpIGJlcmxha3UgdW50dWsgdGlhcCBrYXRlZ29yaSAobWlzYWw6IOKAnFNlZGFuZ+KAnSB2cyDigJxSZW5kYWjigJ0sIOKAnFRpbmdnaeKAnSB2cyDigJxSZW5kYWjigJ0pLiAgICAgIHwNCnwgKipOaWxhaSBwLXZhbHVlKiogICAgICAgICAgICAgICAgIHwgTWVudW5qdWtrYW4gYXBha2FoIHBlbmdhcnVoIHRpYXAgdmFyaWFiZWwgc2lnbmlmaWthbiB0ZXJoYWRhcCBoYXNpbCDigJwx4oCdLiAgICAgICAgICAgICAgICAgICAgICAgIHwgTWVudW5qdWtrYW4gc2lnbmlmaWthbnNpIHBlbmdhcnVoIHRpYXAgdmFyaWFiZWwgdGVyaGFkYXAgdGlhcCBrYXRlZ29yaSBkaWJhbmRpbmcgZGFzYXIuICAgICAgICAgIHwNCnwgKipPdXRwdXQgVXRhbWEgZGkgUioqICAgICAgICAgICAgIHwgQ29lZmZpY2llbnRzLCBTdGQuIEVycm9yLCB6LXZhbHVlLCBwLXZhbHVlLCBBSUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTYW1hLCB0YXBpIGhhc2lsIGxlYmloIGJhbnlhayBrYXJlbmEgbWVuY2FrdXAgc2VtdWEga2F0ZWdvcmkgaGFzaWwuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKktpbmVyamEgTW9kZWwgKEFJQywgRGV2aWFuY2UpKiogfCBEaWd1bmFrYW4gdW50dWsgbWVuaWxhaSBzZWJlcmFwYSBiYWlrIG1vZGVsIG1lbXByZWRpa3NpIGR1YSBoYXNpbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNhbWEsIGRpZ3VuYWthbiB1bnR1ayBtZWxpaGF0IGtlY29jb2thbiBtb2RlbCBkZW5nYW4gZGF0YSBtdWx0aS1rYXRlZ29yaS4gICAgICAgICAgICAgICAgICAgICAgICB8DQoNCg0KIyMgNC4zICoqUGVyYmFuZGluZ2FuIEJlcmRhc2Fya2FuIEhhc2lsIE91dHB1dCBkYXJpIFR1Z2FzKioNCg0KfCAqKkFzcGVrKiogICAgICAgICAgICAgICAgICAgICAgIHwgKipSZWdyZXNpIExvZ2lzdGlrIEJpbmVyIChCb29rZG93bikqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsIChUdWdhcyBJbmkpKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgOi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqS2F0ZWdvcmkgSGFzaWwgKFkpKiogICAgICAgICAgfCAqVGluZ2thdCBLZXN1a3Nlc2FuKiBtZW1pbGlraSAyIGthdGVnb3JpOiAqUmVuZGFoKiBkYW4gKlRpbmdnaSogICAgfCAqVGluZ2thdCBLZXN1a3Nlc2FuKiBtZW1pbGlraSAzIGthdGVnb3JpOiAqUmVuZGFoKiwgKlNlZGFuZyosIGRhbiAqVGluZ2dpKiAgICAgfA0KfCAqKkp1bWxhaCBQZXJzYW1hYW4gTG9naXQqKiAgICAgIHwgMSBwZXJzYW1hYW4gKHBlcmJhbmRpbmdhbiBhbnRhcmEgKlRpbmdnaSogdnMgKlJlbmRhaCopICAgICAgICAgICAgIHwgMiBwZXJzYW1hYW4gKHBlcmJhbmRpbmdhbiAqU2VkYW5nKiB2cyAqUmVuZGFoKiBkYW4gKlRpbmdnaSogdnMgKlJlbmRhaCopICAgICAgIHwNCnwgKipWYXJpYWJlbCBTaWduaWZpa2FuKiogICAgICAgICB8IEhhbnlhICoqS2VwdWFzYW4qKiB5YW5nIHBhbGluZyBiZXJwZW5nYXJ1aCBzaWduaWZpa2FuIHRlcmhhZGFwIGtlc3Vrc2VzYW4gfCAqKktlcHVhc2FuKiogZGFuICoqUGVyc2FpbmdhbioqIGJlcnBlbmdhcnVoIHNpZ25pZmlrYW4gcGFkYSBrYXRlZ29yaSAqVGluZ2dpKiAgfA0KfCAqKkFyYWggUGVuZ2FydWgqKiAgICAgICAgICAgICAgIHwgKipLZXB1YXNhbioqIOKGkiBiZXJwZW5nYXJ1aCAqKnBvc2l0aWYqKiB0ZXJoYWRhcCBwZWx1YW5nIGtlc3Vrc2VzYW4gfCAqKktlcHVhc2FuKiog4oaSIGJlcnBlbmdhcnVoICoqcG9zaXRpZioqLCBzZWRhbmdrYW4gKipQZXJzYWluZ2FuKiog4oaSICoqbmVnYXRpZioqIHwNCnwgKipOaWxhaSBBSUMgKEtlY29jb2thbiBNb2RlbCkqKiB8IExlYmloIGtlY2lsLCBtZW5hbmRha2FuIG1vZGVsIHNlZGVyaGFuYSBkYW4gZWZpc2llbiAgICAgICAgICAgICAgICB8IExlYmloIGJlc2FyIGthcmVuYSBtb2RlbCBsZWJpaCBrb21wbGVrcyBkZW5nYW4gYmFueWFrIGthdGVnb3JpICAgICAgICAgICAgICAgICB8DQp8ICoqS2VzdGFiaWxhbiBNb2RlbCoqICAgICAgICAgICAgfCBDZW5kZXJ1bmcgbGViaWggc3RhYmlsIGthcmVuYSBoYW55YSBkdWEga2F0ZWdvcmkgaGFzaWwgICAgICAgICAgICAgfCBMZWJpaCBiZXJ2YXJpYXNpIGthcmVuYSB0aWFwIGthdGVnb3JpIG1lbWlsaWtpIGh1YnVuZ2FuIHlhbmcgYmVyYmVkYS1iZWRhICAgICAgfA0KDQoNCiMjIDQuNCAqKktlc2ltcHVsYW4gVW11bSBQZXJiYW5kaW5nYW4qKg0KDQpEYXJpIHBlcmJhbmRpbmdhbiBkaSBhdGFzIGRhcGF0IGRpc2ltcHVsa2FuIGJhaHdhOg0KDQoxLiAqKlJlZ3Jlc2kgbG9naXN0aWsgYmluZXIqKiBjb2NvayB1bnR1ayBhbmFsaXNpcyBzZWRlcmhhbmEgZGVuZ2FuIGR1YSBoYXNpbCwgbWVuZ2hhc2lsa2FuIG1vZGVsIHlhbmcgbGViaWggc3RhYmlsIGRhbiBtdWRhaCBkaWludGVycHJldGFzaWthbi4NCjIuICoqUmVncmVzaSBsb2dpc3RpayBtdWx0aW5vbWlhbCoqIGxlYmloIGtvbXBsZWtzLCBrYXJlbmEgbWFtcHUgbWVuZ2FuYWxpc2lzIGxlYmloIGRhcmkgZHVhIGthdGVnb3JpIGhhc2lsLCB0ZXRhcGkgYnV0dWggKipkYXRhIHlhbmcgbGViaWggYmFueWFrIGRhbiB2YXJpYXRpZioqIGFnYXIgaGFzaWxueWEgc2lnbmlmaWthbi4NCjMuIERhbGFtIGtlZHVhIG1vZGVsLCAqKmFyYWggcGVuZ2FydWggdmFyaWFiZWwgdGV0YXAgc2FtYSoqLCBoYW55YSBzYWphICoqbXVsdGlub21pYWwqKiBtZW1wZXJsdWFzIGFuYWxpc2lzbnlhIGtlIGxlYmloIGJhbnlhayBrYXRlZ29yaS4NCjQuIFBhZGEga2VkdWEgbW9kZWwsICoqS2VwdWFzYW4gcGVsYW5nZ2FuKiogdGV0YXAgbWVuamFkaSBmYWt0b3IgcGFsaW5nIGJlcnBlbmdhcnVoIHBvc2l0aWYsIHNlZGFuZ2thbiAqKlBlcnNhaW5nYW4qKiBjZW5kZXJ1bmcgbWVtYmVyaSBwZW5nYXJ1aCBuZWdhdGlmIHRlcmhhZGFwIHRpbmdrYXQga2VzdWtzZXNhbi4NCg0K8J+foiAqKkdhcmlzIGJlc2FyOioqDQoNCj4gUmVncmVzaSBsb2dpc3RpayBiaW5lciBsZWJpaCBlZmlzaWVuIHVudHVrIGthc3VzIHNlZGVyaGFuYSwgc2VkYW5na2FuIHJlZ3Jlc2kgbG9naXN0aWsgbXVsdGlub21pYWwgbWVtYmVyaWthbiBwZW1haGFtYW4geWFuZyBsZWJpaCBtZW5kYWxhbSB0ZW50YW5nIGJhZ2FpbWFuYSB2YXJpYWJlbCBtZW1lbmdhcnVoaSBiZXJiYWdhaSB0aW5na2F0YW4gaGFzaWwuDQoNCg0KIyBSZWZlcmVuc2kNCg0KPlNpcmVnYXIsIEIuICgyMDI1KS4gUmVncmVzc2lvbiBNb2RlbHMg4oCTIEFuYWx5c2lzIGFuZCBQcmVkaWN0aXZlIE1vZGVsaW5nIFtCYWdpYW4gMjogUmVncmVzc2lvbiBNb2RlbHNdLiBEaWFtYmlsIGRhcmkgaHR0cHM6Ly9ib29rZG93bi5vcmcvY29udGVudC9hMTQyYjE3Mi02OWIyLTQzNmQtYmRiMC05ZGE2ZDA0NmEwZjkvMDItUmVncmVzc2lvbl9Nb2RlbC5odG1sDQoNCj5UaWJyYW5pIEVkdWNhdGlvbi4gKDIwMjMpLiBSZWdyZXNpIExvZ2lzdGlrIE11bHRpbm9taWFsIFNQU1MgSUkgTGVuZ2thcCBkZW5nYW4gcGVuamVsYXNhbm55YSBbVmlkZW9dLiBZb3VUdWJlLiBodHRwczovL3lvdXR1LmJlL2xqQU1UQkZsRkFJP3NpPWhMUVh1QWlWYUtlOE5BcG8=