Probability Distributions

Assignment Week 11

Angelica Florentina M.

52250063

Student Majoring in Data Science at Institut Teknologi Sains Bandung

1 Introduction

Distribusi probabilitas dapat diartikan sebagai fungsi statistik yang bertujuan untuk mendeskripsikan semua kemungkinan nilai dan juga kemungkinan yang dapat diambil dari berbagai variabel acak pada rentang tertentu. Dalam hal ini, kisaran distribusi frekuensi tersebut dibatasi oleh nilai minimum dan nilai maksimum di mana terjadi nilai kemungkinan yang akan diplot tergantung pada jumlah faktornya.

Beberapa faktor yang memengaruhi distribusi probabilitas tersebut di antaranya rata-rata distribusi atau rata-rata, deviasi standar, kemiringan, dan kurtosis. Sehingga dapat disimpulkan bahwa pengertian distribusi probabilitas secara umum adalah suatu distribusi yang menggambarkan tentang peluang dari sekumpulan variasi sebagai pengganti frekuensi.

Ciri-ciri dari distribusi probabilitas.

  1. Distribusi probabilitas memiliki ciri-ciri yakni probabilitas atau peluang dari sebuah hasil berkisar antara 0 sampai dengan 1.

  2. Ciri-ciri selanjutnya yaitu distribusi probabilitas memiliki hasil-hasil, yang mana hasilnya adalah dari kejadian yang tidak terikat antara kejadian yang satu dengan kejadian yang lain.

  3. Terakhir, distribusi probabilitas ini memiliki daftar hasil yang lebih lengkap. Sehingga jumlah dari probabilitas atau peluang dari berbagai kejadian atau peristiwanya adalah 1.

Materi ini akan memandu anda melalui beberapa konsep utama:

  • Continuous Random Variables, untuk variabel kontinu yang menggambarkan kemungkinan nilai pada rentang kontinu.
  • Sampling Distributions, yang mewakili distribusi statistik sampel seperti rata-rata sampel atau proporsi sampel.
  • The Central Limit Theorem (CLT), salah satu hasil terpenting dalam statistik, menjelaskan mengapa distribusi rata-rata sampel cenderung normal terlepas dari bentuk dasar populasi.
  • Sample Proportion Distributions, banyak digunakan dalam analisis survei dan penelitian kuantitatif.

2 Continuous Random Variable

2.1 Variabel Diskrit

Variabel diskrit adalah variabel yang hanya memiliki nilai yang dapat dihitung (countable). Nilai-nilainya terbatas atau dapat dihitung satu per satu.

Ciri-ciri:

  • Datanya didapatkan melalui perhitungan.
  • Nilainya terbatas atau dapat dihitung, meskipun bisa berupa desimal
  • Tidak mungkin memiliki nilai “di antara” yang tidak masuk akal.

Contoh:

  • Hasil nilai ujian siswa
  • Jumah anak dalam keluarga
  • Jumlah kelereng biru dalam kotak
  • Jumlah (H) Head ketika melempar suatu koin

2.2 Variabel Kontinu

Variabel kontinu adalah variabel yang dapat memiliki nilai apa pun dalam suatu rentang, termasuk pecahan sampai tingkat ketelitian tak terbatas. Data kontinu diperoleh melalui pengukuran.

Kenapa disebut kontinu? Karena nilai-nilainya tak hingga dan tidak dapat dihitung satu per satu

Contoh:

  • Usia
  • Berat badan
  • Jarak
  • Suhu

2.3 Perbedaan Variabel Diskrit dan Kontinu

A. Variabel Diskrit

  • Menggunakan bar chart (diagram batang)
  • Biasanya ada celah antara batang, karena nilai diskrit tidak kontinu.
  • Setiap batang mewakili hasil yang dapat dihitung

B. Variabel Kontinu

  • Menggunakan histogram
  • Tidak ada celah antara batang, menunjukkan bahwa data bersifat kontinu
  • Setiap nilai titik dapat ditempatkan di mana saja di sumbu x.
  • Bisa juga menggunakan density plot

2.4 Penyajian Probabilitas

  • Probabilitas suatu nilai x pada variabel diskrit dinyatakan dengan fungsi probabilitas (Probability Mass Function, PMF), yaitu P(X = x).

  • Jumlah semua probabilitas untuk semua nilai yang mungkin adalah 1

\[\sum_{i} P(X = x_i) = 1\]

  • Probabilitas didefinisikan dengan fungsi kerapatan (Probability Density Function, PDF) f(x).

  • Probabilitas berada dalam interval [a,b] adalah luas area dibawah kurva f(x) dari a sampaii b:

\[P(a \leq X \leq b) = \int_{a}^{b} f(x) \, dx\]

  • Fungsi PDF selalu bernilai tidak negatif dan total luas di bawah kurva adalah 1:

\[\int_{-\infty}^{\infty} f(x) \, dx = 1\]

  • Rumus PDF distribusi normal dengan mean μ dan standar deviasi σ:

\[f(x) = \frac{1}{\sigma \sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}\]

  • Grafiknya berbentuk kurva lonceng simetris, probabilitas suatu intervalnya bisa dihitung dengan integral PDF atau menggunakan tabel Z (standar normal).

  • Jika ingin menghitung probabilitas untuk variabel kontinu, pendekatan umum adalah menggunakan fungsi distribusi kumulatif (CDF):

\[F(x) = P(X \leq x) = \int_{-\infty}^{x} f(t) \, dt\]

  • Untuk mendapatkan probabilitas suatu rentang [a,b]:

\[P(a \leq X \leq b) = F(b) - F(a)\]

3 Sampling Distribution

3.1 Pengertian

Distribusi sampel (sample distribution) adalah distribusi data dari satu sampel tunggal yang diambil dari populasi, mencerminkan variabilitas observasi individu dalam sampel tersebut, yang sering kali tidak sepenuhnya mewakili populasi karena ukuran sampel kecil. Sebaliknya, distribusi sampling (sampling distribution) adalah distribusi probabilitas dari statistik sampel (seperti rata-rata atau proporsi) yang dihitung dari banyak sampel acak sederhana yang diambil berulang kali dari populasi yang sama, memungkinkan analisis perilaku statistik secara teoritis.

3.2 Metode Pengambilan Sampel dan Aplikasi

Metode sampling memengaruhi kualitas distribusi, seperti simple random (setiap elemen sama peluangnya), stratified (populasi dibagi strata homogen), systematic (interval tetap), atau cluster (berdasarkan kelompok geografis). Distribusi sampling berguna untuk inferensi: estimasi parameter populasi (misalnya μ) tanpa survei penuh, uji hipotesis, dan interval kepercayaan, karena lebih efisien daripada mengukur seluruh populasi besar. Dalam praktik, faktor koreksi diterapkan jika populasi terbatas (n/N>5%) untuk menyesuaikan varians.

3.3 Perbedaan Utama

Aspek Distribusi Populasi Distribusi Sampel Distribusi Sampling
Sumber Data Seluruh populasi (N elemen) Satu sampel tunggal (n elemen) Banyak sampel acak berulang (statistik seperti \(\bar{x}\))
Ukuran Variabilitas Tinggi (σ) Tinggi, mirip populasi tapi bias Rendah \(\left( \frac{\sigma}{\sqrt{n}} \right)\)
Rata-rata μ (tetap) \(\bar{x}\) (bervariasi) μ (sama dengan populasi)
Aplikasi Deskripsi penuh, jarang praktis Analisis awal satu sampel Inferensi: estimasi, uji hipotesis
Bentuk (jika n besar) Apapun Apapun Normal (Central Limit Theorem)

3.4 Distribusi Sampling Rata-Rata Sampel

Distribusi sampling rata-rata sampel memiliki rata-rata sama dengan rata-rata populasi \[\quad \mu_{\bar{x}} = \mu\] tetapi deviasi standar lebih kecil, yaitu standar error (SE): \[\sigma_{\bar{x}} = \frac{\sigma}{\sqrt{n}}\] karena rata-rata kurang bervariasi daripada observasi individu. Jika sampel cukup banyak, distribusi ini mendekati normal karena Central Limit Theorem, meskipun populasi tidak normal. Notasi untuk distribusi sampling normal adalah \[\bar{x} \sim N\left(\mu, \frac{\sigma}{\sqrt{n}}\right)\] dengan formula standarisasi \[z = \frac{\bar{x} - \mu}{\sigma / \sqrt{n}}\]

3.5 Contoh

Diketahui:

  • Tinggi orang Canada: normal, (μ = 160 cm, σ = 7 cm)
  • n = 10

Ditanya: P(rata-rata < 157)

Langkah:

\[SE = \frac{7}{\sqrt{10}} = 2.21\]

\[Z = \frac{157 - 160}{2.21} = -1.36 => 0.0869\] Maka, probabilitas rata-rata tinggi 10 orang Canada < 157 cm adalah 0.0869.

Distribusi sampling berguna untuk inferensi statistik secara efisien, seperti memperkirakan μ tanpa mengukur seluruh populasi (misalnya tinggi rata-rata 8 miliar orang), serta menghitung probabilitas berdasarkan ukuran sampel.

4 Central Limit Theorem

4.1 Pengertian

Central Limit Theorem (CLT) memprediksi bentuk distribusi sampling berdasarkan ukuran sampel. CLT mengatakan Jika ukuran sampel n cukup besar, maka sampling distribution dari mean akan berbentuk normal, terlepas dari bentuk distribusi asalnya.

Artinya :

  • Populasi awal bisa miring (skewed), tidak simetris atau tidak normal.
  • Tapi, jika n besar -> distribusi rata-rata sampel akan tetap mendekati normal.

4.2 Rumus Matematis CLT

Parameter Rumus Deskripsi
Rata-rata Sampling \(\quad \mu_{\bar{x}} = \mu\) Selalu sama dengan populasi
Standar Error \(\sigma_{\bar{x}} = \frac{\sigma}{\sqrt{n}}\) Mengecil seiring n besar
Z-Score \(z = \frac{\bar{x} - \mu}{\sigma / \sqrt{n}}\) Standarisasi untuk probabilitas
Distribusi \(\bar{x} \sim N\left(\mu, \frac{\sigma}{\sqrt{n}}\right)\) Bentuk akhir CLT

Syarat dan Batasan Lengkap

  1. Jika n ≥ 30:
  • Sampling distribution ≈ normal
  • Bisa menggunakan formula normal seperti z-score.
  1. Jika n < 30:
  • CLT tidak boleh digunakan
  • Sampling distribution belum tentu normal, namun jika populasi sudah normal dari awal meskipun n < 30 hasilnya akan tetap normal.

4.3 Contoh

Kasus: Populasi tinggi Kanada μ = 160 cm, σ = 7 cm, n = 30.

Cari P(rata-rata < 157):

\[SE = \frac{7}{\sqrt{30}} = 1.28 cm\]

\[Z = \frac{157 - 160}{1.28} = - 2.34 => 0.0096\]

Jadi, probabilitasnya yaitu 0.0096 -> 0.96%.

4.4 Aplikasi Praktis CLT

Tujuan Rumus Interval Kepercayaan 95%
Estimasi μ \(\bar{x} \pm 1.96 \times \frac{\sigma}{\sqrt{n}}\)
Margin of Error \(\text{MOE} = z \times \frac{\sigma}{\sqrt{n}}\)
Uji Hipotesis Bandingkan z dengan critical value
  • Estimasi Rata-rata, artinya jika sampel diambil berulang kali dan setiap kali dibuat interval \(\bar{x} \pm 1.96 \times \frac{\sigma}{\sqrt{n}}\) , maka setiap 95% interval tersebut akan memuat nilai rata-rata yang sebenarnya.

  • Margin of Error, artinya makin besar \({\sigma}\) atau makin kecil n, maka \({\sigma}/{\sqrt{n}}\) makin besar sehingga margin of error melebar dan interval kepercayaan menjadi kurang presisi.

  • Uji Hipotesis, di mana statistik uji z dihitung dari data dan kemudian dibandingkan dengan nilai kritis, misalnya \(\pm 1.96\) untuk uji dua sisi dengan \({\alpha}\) = 0.05

5 Sample Proportion

5.1 Pengertian

Distribusi Sampling Proporsi Sampel \(\hat{(p)}\) adalah distribusi probabilitas dari berbagai nilai \(\hat{p}\) yang mungkin dihasilkan dari pengulangan sampel acak sederhana dari populasi biner/sukses-gagal.

5.2 Rumus

  • Populasi:

\[{p} = \frac{X}{N}\]

  • Sample:

\[\hat{p} = \frac{x}{n}\]

  • Mean:

\[\mu_{\hat{p}} = p\]

  • Variance:

\[\sigma_{\hat{p}}^2 = \frac{p(1-p)}{n}\]

  • Standar Error (SE):

\[\sigma_{\hat{p}} = \sqrt{\frac{p(1-p)}{n}}\]

  • Distribusi Normal:

\[\hat{p} \sim N\left(p, \sqrt{\frac{p(1-p)}{n}}\right)\]

  • Z-Score dan Standarisasi:

\[z = \frac{\hat{p} - p}{\sqrt{\frac{p(1-p)}{n}}}\]

  • Faktor Koreksi Populasi Terbatas (n/N > 5%):

\[\sigma_{\hat{p}} = \sqrt{\frac{p(1-p)}{n}} \cdot \sqrt{\frac{N-n}{N-1}}\]

Syarat CLT Proporsi vs Mean

  • Sampling Mean: \(n \geq 10\)
  • Sampling Proporsi: \(np \geq 10, \quad nq\geq 10 {(q = 1-p)}\)

Minimum n tergantung p: Jika p = 0.1, \(n \geq 100\) (karena 100 x 0.1 = 10).

5.3 Contoh

Sebuah survei nasional menemukan bahwa 40% penduduk memiliki kebiasaan berolahraga minimal 3 kali per minggu. Kita melakukan survei acak terhadap n = 100 orang.

Pertanyaan:

  • Tentukan mean dan standard deviation dari sampling distribution
  • Periksa apakah kondisi CLT untuk proporsi terpenuhi.
  • Tentukan distribusi sampling

Diketahui:

  • 𝑝= 0.40
  • 𝑛= 100
  • 𝑞= 1−𝑝= 0.60

\[\mu_{\hat{p}} = p = 0.40\]

\[\sigma_{\hat{p}} = \sqrt{\frac{p(1-p)}{n}} = \sqrt{\frac{0.40 - 0.60}{100}} = \sqrt{\frac{0.24}{100}} = \sqrt{0.0024} ≈ 0.049\]

\[np = {100 . 0.40} = {40 \geq 10}\]

\[nq = {100 . 0.60} = {60 \geq 10}\]

Keduanya terpenuhi → distribusi \(\hat{p}\) dapat dianggap normal.

\[\hat{p} \sim N{(0.40, 0.049)}\]

6 Review Sampling Distribution

6.1 Contoh kasus

Misalnya kita memiliki sebuah toples berisi 200 kelereng hijau dan 300 kelereng biru. Jika sebuah kelereng diambil tiga kali dengan pengembalian, berapa peluang terambilnya setidaknya dua kelereng hijau?

6.2 Probabilitas dasar & Sample space

Nilai Probabilitas: \[{P(Green)} = \frac{200}{500} = 0.4\]

\[{P(Blue)} = \frac{300}{500} = 0.6\]

Outcome (Sample Space) :

  • GGG
  • GGB
  • GBG
  • GBB
  • BGG
  • BGB
  • BBG
  • BBB

Dengan 3 pengambilan, jumlah total outcome -> 2x2x2 = 8 \[{P(GGB)} = 0.4 × 0.4 × 0.6 = 0.096\]

\[{P(BBB)} = 0.6 × 0.6 × 0.6 = 0.216\]

\[{P(\geq 2G)} = {P(2G)} + {P(3G)} = 3 × 0.096 + 0.064 = 0.352 = 35.2\%\]

6.3 Distribusi Binomial

Rumus

\[P(X = k) = \binom{n}{k} \, p^k (1-p)^{n-k}\]

  • P(X = 2)
  • P(X = 3)
  • P(X = 4)
  • P(X = 5)

\[{P(\geq 2G)} = \sum_{k=2}^{5} \binom{5}{k} \, (0.4)^k (0.6)^{5-k} = 0.6634 = 66.34\%\]

  • k = 2: \[\binom{5}{2} \, (0.4)^2 (0.6)^{3} = 0.3456\]

6.4 Distribusi Sampling Proporsi

Kondisi CLT Proporsi:

\(np \geq 10, n(1 - p) \geq 10 -> 100 × 0.4 = 40 \geq 10, 60 \geq 10\)

\[\hat{p} \sim N\left(p, \sqrt{\frac{p(1-p)}{n}}\right)\]

\[{SE} = \sqrt{\frac{0.4 × 0.6}{100}} = 0.049\]

\[z = {\frac{\hat{p} - {p}}{SE}} = {\frac{0.35 - 0.4}{0.049}} = - 1.02\]

\[P(\hat{p} \geq 0.35) = P(Z \geq - 1.02) = 1 - 0.1539 = 0.8461 = 84.61\%\]

6.5 Interpretasi

1. n = 3:

  • Sample Space (Probabilitas Tepat = 0.352 atau 35.2%)
  • Insight: Ada 35.2% kemungkinan mendapat ≥ 2 hijau dalam 3 tarikan with replacement.
  • Konteks: Cocok untuk eksperimen kecil, enumerasi semua 8 outcome memungkinkan.

2. n = 5:

  • Distribusi Binomial (Probabilitas Tepat = 0.6634 atau 66.34%)
  • Interpretasi: 66.34% kemungkinan mendapat ≥ 2 hijau dalam 5 tarikan.
  • Konteks: Efisien untuk n sedang (10 kalkulasi), akurat 100%

3. n = 100:

  • CLT Proporsi (Approx = 0.8461 atau 84.61%)
  • Interpretasi: 84.61% kemungkinan \({\hat p}\) ≥ 0.35 (≥ 35 hijau dari 100).
  • Akurasi: Approx (bukan eksak), tapi sangat dekat untuk n besar.

7 References

[1] Zasendy Rehena Populasi, Sampel dan Distribusi Sampling
https://id.scribd.com/presentation/469254311/POPULASI-SAMPEL-DISTRIBUSI-SAMPLING-STANDAR-ERROR

[2] S. Andilah [2025] “EBOOK DASAR STATISTIK”

[3] Rinaldi Munir (ITB) “Beberapa Distribusi Peluang Kontinu” https://informatika.stei.itb.ac.id/~rinaldi.munir/Probstat/2010-2011/Beberapa%20Distribusi%20Peluang%20Kontinu.pdf

[4] Unikom Repository Distribusi Sampling https://repository.unikom.ac.id/32827/1/DISTRIBUSI%20SAMPLING.pdf

[5] Andi Asari, SIP., S.Kom., M.A., P.hD (C). [Juni 2023] Pengantar Statistika 1 https://www.scribd.com/document/693044474/Andi-Asari-Pengantar-Statistika-1

[6] Dendi Zainuddin Hamidi, S.T., M.M [November 2024] Statistik Dasar

[7] Introduction to Statistics. “7 Probability Distributions.” dsciencelabs. https://bookdown.org/dsciencelabs/intro_statistics/07-Probability_Distributions.html

LS0tDQp0aXRsZTogIlByb2JhYmlsaXR5IERpc3RyaWJ1dGlvbnMiDQpzdWJ0aXRsZTogIkFzc2lnbm1lbnQgV2VlayAxMSINCmF1dGhvcjogIkFuZ2VsaWNhIEZsb3JlbnRpbmEgTS4iDQpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAiY29kZS5jc3MiDQotLS0NCg0KDQpgYGB7ciBwcm9maWxlLCBlY2hvPUZBTFNFfQ0KbGlicmFyeShodG1sdG9vbHMpDQpIVE1MKCcNCjxkaXYgY2xhc3M9InByb2ZpbGUtY2FyZCI+DQogIDxkaXY+DQogICAgPGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hbmdlbGlpZWUvZm90b2FuZ2VsaWNhL21haW4vZm9ybWFsLmpwZyINCiAgICAgICAgIGNsYXNzPSJwcm9maWxlLXBob3RvIj4NCiAgPC9kaXY+DQogIDxkaXY+DQogICAgPGgxIGNsYXNzPSJwcm9maWxlLW5hbWUiPkFuZ2VsaWNhIEZsb3JlbnRpbmEgTS48L2gxPg0KICAgIDxwIHN0eWxlPSJtYXJnaW46IDRweCAwOyBjb2xvcjpibGFjazsiPjUyMjUwMDYzPC9wPg0KICAgIDxwIGNsYXNzPSJwcm9maWxlLWluZm8iPlN0dWRlbnQgTWFqb3JpbmcgaW4gRGF0YSBTY2llbmNlIGF0IEluc3RpdHV0IFRla25vbG9naSBTYWlucyBCYW5kdW5nPC9wPg0KDQogICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAxNXB4OyBtYXJnaW4tdG9wOiAxOHB4OyI+DQogICAgICA8YnV0dG9uIGNsYXNzPSJwcm9maWxlLWJ1dHRvbiBidG4tZHMiPlNraWxsZnVsPC9idXR0b24+DQogICAgICA8YnV0dG9uIGNsYXNzPSJwcm9maWxlLWJ1dHRvbiBidG4tc3RhdHMiPkN1cmlvdXM8L2J1dHRvbj4NCiAgICAgIDxidXR0b24gY2xhc3M9InByb2ZpbGUtYnV0dG9uIGJ0bi1zdGF0czEiPk9yZ2FuaXplZDwvYnV0dG9uPg0KICAgIDwvZGl2Pg0KICA8L2Rpdj4NCjwvZGl2Pg0KJykNCmBgYA0KDQoNCiMgSW50cm9kdWN0aW9uDQo8ZGl2IGNsYXNzPSJibG9ja3F1b3RlIj4NCkRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIGRhcGF0IGRpYXJ0aWthbiBzZWJhZ2FpIGZ1bmdzaSBzdGF0aXN0aWsgeWFuZyBiZXJ0dWp1YW4gdW50dWsgbWVuZGVza3JpcHNpa2FuIHNlbXVhIGtlbXVuZ2tpbmFuIG5pbGFpIGRhbiBqdWdhIGtlbXVuZ2tpbmFuIHlhbmcgZGFwYXQgZGlhbWJpbCBkYXJpIGJlcmJhZ2FpIHZhcmlhYmVsIGFjYWsgcGFkYSByZW50YW5nIHRlcnRlbnR1LiBEYWxhbSBoYWwgaW5pLCBraXNhcmFuIGRpc3RyaWJ1c2kgZnJla3VlbnNpIHRlcnNlYnV0IGRpYmF0YXNpIG9sZWggbmlsYWkgbWluaW11bSBkYW4gbmlsYWkgbWFrc2ltdW0gZGkgbWFuYSB0ZXJqYWRpIG5pbGFpIGtlbXVuZ2tpbmFuIHlhbmcgYWthbiBkaXBsb3QgdGVyZ2FudHVuZyBwYWRhIGp1bWxhaCBmYWt0b3JueWEuDQoNCkJlYmVyYXBhIGZha3RvciB5YW5nIG1lbWVuZ2FydWhpIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIHRlcnNlYnV0IGRpIGFudGFyYW55YSByYXRhLXJhdGEgZGlzdHJpYnVzaSBhdGF1IHJhdGEtcmF0YSwgZGV2aWFzaSBzdGFuZGFyLCBrZW1pcmluZ2FuLCBkYW4ga3VydG9zaXMuIFNlaGluZ2dhIGRhcGF0IGRpc2ltcHVsa2FuIGJhaHdhIHBlbmdlcnRpYW4gZGlzdHJpYnVzaSBwcm9iYWJpbGl0YXMgc2VjYXJhIHVtdW0gYWRhbGFoIHN1YXR1IGRpc3RyaWJ1c2kgeWFuZyBtZW5nZ2FtYmFya2FuIHRlbnRhbmcgcGVsdWFuZyBkYXJpIHNla3VtcHVsYW4gdmFyaWFzaSBzZWJhZ2FpIHBlbmdnYW50aSBmcmVrdWVuc2kuDQoNCkNpcmktY2lyaSBkYXJpIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzLg0KDQoxLiBEaXN0cmlidXNpIHByb2JhYmlsaXRhcyBtZW1pbGlraSBjaXJpLWNpcmkgeWFrbmkgcHJvYmFiaWxpdGFzIGF0YXUgcGVsdWFuZyBkYXJpIHNlYnVhaCBoYXNpbCBiZXJraXNhciBhbnRhcmEgMCBzYW1wYWkgZGVuZ2FuIDEuDQoNCjIuIENpcmktY2lyaSBzZWxhbmp1dG55YSB5YWl0dSBkaXN0cmlidXNpIHByb2JhYmlsaXRhcyBtZW1pbGlraSBoYXNpbC1oYXNpbCwgeWFuZyBtYW5hIGhhc2lsbnlhIGFkYWxhaCBkYXJpIGtlamFkaWFuIHlhbmcgdGlkYWsgdGVyaWthdCBhbnRhcmEga2VqYWRpYW4geWFuZyBzYXR1IGRlbmdhbiBrZWphZGlhbiB5YW5nIGxhaW4uDQoNCjMuIFRlcmFraGlyLCBkaXN0cmlidXNpIHByb2JhYmlsaXRhcyBpbmkgbWVtaWxpa2kgZGFmdGFyIGhhc2lsIHlhbmcgbGViaWggbGVuZ2thcC4gU2VoaW5nZ2EganVtbGFoIGRhcmkgcHJvYmFiaWxpdGFzIGF0YXUgcGVsdWFuZyBkYXJpIGJlcmJhZ2FpIGtlamFkaWFuIGF0YXUgcGVyaXN0aXdhbnlhIGFkYWxhaCAxLg0KDQpNYXRlcmkgaW5pIGFrYW4gbWVtYW5kdSBhbmRhIG1lbGFsdWkgYmViZXJhcGEga29uc2VwIHV0YW1hOg0KDQotIENvbnRpbnVvdXMgUmFuZG9tIFZhcmlhYmxlcywgdW50dWsgdmFyaWFiZWwga29udGludSB5YW5nIG1lbmdnYW1iYXJrYW4ga2VtdW5na2luYW4gbmlsYWkgcGFkYSByZW50YW5nIGtvbnRpbnUuDQotIFNhbXBsaW5nIERpc3RyaWJ1dGlvbnMsIHlhbmcgbWV3YWtpbGkgZGlzdHJpYnVzaSBzdGF0aXN0aWsgc2FtcGVsIHNlcGVydGkgcmF0YS1yYXRhIHNhbXBlbCBhdGF1IHByb3BvcnNpIHNhbXBlbC4NCi0gVGhlIENlbnRyYWwgTGltaXQgVGhlb3JlbSAoQ0xUKSwgc2FsYWggc2F0dSBoYXNpbCAgdGVycGVudGluZyBkYWxhbSBzdGF0aXN0aWssIG1lbmplbGFza2FuIG1lbmdhcGEgZGlzdHJpYnVzaSByYXRhLXJhdGEgc2FtcGVsIGNlbmRlcnVuZyBub3JtYWwgdGVybGVwYXMgZGFyaSBiZW50dWsgZGFzYXIgcG9wdWxhc2kuIA0KLSBTYW1wbGUgUHJvcG9ydGlvbiBEaXN0cmlidXRpb25zLCBiYW55YWsgZGlndW5ha2FuIGRhbGFtIGFuYWxpc2lzIHN1cnZlaSBkYW4gcGVuZWxpdGlhbiBrdWFudGl0YXRpZi4NCjwvZGl2Pg0KDQojIENvbnRpbnVvdXMgUmFuZG9tIFZhcmlhYmxlDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQoga25pdHI6OmluY2x1ZGVfdXJsKCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9aeVV6UlZhNmhDTT9zaT14eHZJdVJuZ3JjVlBOekp5IikNCmBgYA0KDQojIyBWYXJpYWJlbCBEaXNrcml0DQo8ZGl2IGNsYXNzPSJwYXN0ZWwtYmx1ZS1ib3giPg0KVmFyaWFiZWwgZGlza3JpdCBhZGFsYWggdmFyaWFiZWwgeWFuZyBoYW55YSBtZW1pbGlraSBuaWxhaSB5YW5nIGRhcGF0IGRpaGl0dW5nIChjb3VudGFibGUpLiBOaWxhaS1uaWxhaW55YSB0ZXJiYXRhcyBhdGF1IGRhcGF0IGRpaGl0dW5nIHNhdHUgcGVyIHNhdHUuDQoNCioqQ2lyaS1jaXJpOioqDQoNCi0gRGF0YW55YSBkaWRhcGF0a2FuIG1lbGFsdWkgcGVyaGl0dW5nYW4uDQotIE5pbGFpbnlhIHRlcmJhdGFzIGF0YXUgZGFwYXQgZGloaXR1bmcsIG1lc2tpcHVuIGJpc2EgYmVydXBhIGRlc2ltYWwNCi0gVGlkYWsgbXVuZ2tpbiBtZW1pbGlraSBuaWxhaSBfImRpIGFudGFyYSJfIHlhbmcgdGlkYWsgbWFzdWsgYWthbC4NCg0KKipDb250b2g6KioNCg0KLSBIYXNpbCBuaWxhaSB1amlhbiBzaXN3YQ0KLSBKdW1haCBhbmFrIGRhbGFtIGtlbHVhcmdhDQotIEp1bWxhaCBrZWxlcmVuZyBiaXJ1IGRhbGFtIGtvdGFrDQotIEp1bWxhaCAoSCkgSGVhZCBrZXRpa2EgbWVsZW1wYXIgc3VhdHUga29pbg0KPC9kaXY+DQoNCiMjIFZhcmlhYmVsIEtvbnRpbnUNCjxkaXYgY2xhc3M9InBhc3RlbC1ibHVlLWJveCI+DQpWYXJpYWJlbCBrb250aW51IGFkYWxhaCB2YXJpYWJlbCB5YW5nIGRhcGF0IG1lbWlsaWtpIG5pbGFpIGFwYSBwdW4gZGFsYW0gc3VhdHUgcmVudGFuZywgdGVybWFzdWsgcGVjYWhhbiBzYW1wYWkgdGluZ2thdCBrZXRlbGl0aWFuIHRhayB0ZXJiYXRhcy4gRGF0YSBrb250aW51IGRpcGVyb2xlaCBtZWxhbHVpIHBlbmd1a3VyYW4uIA0KDQpLZW5hcGEgZGlzZWJ1dCBrb250aW51PyBLYXJlbmEgbmlsYWktbmlsYWlueWEgdGFrIGhpbmdnYSBkYW4gdGlkYWsgZGFwYXQgZGloaXR1bmcgc2F0dSBwZXIgc2F0dQ0KDQoqKkNvbnRvaDoqKg0KDQotIFVzaWENCi0gQmVyYXQgYmFkYW4NCi0gSmFyYWsgDQotIFN1aHUNCjwvZGl2Pg0KDQojIyBQZXJiZWRhYW4gVmFyaWFiZWwgRGlza3JpdCBkYW4gS29udGludQ0KPGRpdiBjbGFzcz0icGFzdGVsLWJsdWUtYm94Ij4NCioqQS4gVmFyaWFiZWwgRGlza3JpdCoqDQoNCi0gTWVuZ2d1bmFrYW4gYmFyIGNoYXJ0IChkaWFncmFtIGJhdGFuZykNCi0gQmlhc2FueWEgYWRhIGNlbGFoIGFudGFyYSBiYXRhbmcsIGthcmVuYSBuaWxhaSBkaXNrcml0IHRpZGFrIGtvbnRpbnUuDQotIFNldGlhcCBiYXRhbmcgbWV3YWtpbGkgaGFzaWwgeWFuZyBkYXBhdCBkaWhpdHVuZw0KDQoNCioqQi4gVmFyaWFiZWwgS29udGludSoqDQoNCi0gTWVuZ2d1bmFrYW4gaGlzdG9ncmFtDQotIFRpZGFrIGFkYSBjZWxhaCBhbnRhcmEgYmF0YW5nLCBtZW51bmp1a2thbiBiYWh3YSBkYXRhIGJlcnNpZmF0IGtvbnRpbnUNCi0gU2V0aWFwIG5pbGFpIHRpdGlrIGRhcGF0IGRpdGVtcGF0a2FuIGRpIG1hbmEgc2FqYSBkaSBzdW1idSB4Lg0KLSBCaXNhIGp1Z2EgbWVuZ2d1bmFrYW4gZGVuc2l0eSBwbG90DQo8L2Rpdj4NCg0KIyMgUGVueWFqaWFuIFByb2JhYmlsaXRhcw0KPGRpdiBjbGFzcz0icGFzdGVsLWJsdWUtYm94Ij4NCi0gUHJvYmFiaWxpdGFzIHN1YXR1IG5pbGFpIF94XyBwYWRhIHZhcmlhYmVsIGRpc2tyaXQgZGlueWF0YWthbiBkZW5nYW4gZnVuZ3NpIHByb2JhYmlsaXRhcyAoUHJvYmFiaWxpdHkgTWFzcyBGdW5jdGlvbiwgUE1GKSwgeWFpdHUgX1AoWCA9IHgpLl8gDQoNCi0gSnVtbGFoIHNlbXVhIHByb2JhYmlsaXRhcyB1bnR1ayBzZW11YSBuaWxhaSB5YW5nIG11bmdraW4gYWRhbGFoIDENCg0KJCRcc3VtX3tpfSBQKFggPSB4X2kpID0gMSQkDQoNCi0gUHJvYmFiaWxpdGFzIGRpZGVmaW5pc2lrYW4gZGVuZ2FuIGZ1bmdzaSBrZXJhcGF0YW4gKFByb2JhYmlsaXR5IERlbnNpdHkgRnVuY3Rpb24sIFBERikgX2YoeClfLg0KDQotIFByb2JhYmlsaXRhcyBiZXJhZGEgZGFsYW0gaW50ZXJ2YWwgX1thLGJdXyBhZGFsYWggbHVhcyBhcmVhIGRpYmF3YWgga3VydmEgX2YoeClfIGRhcmkgX2FfIHNhbXBhaWkgX2JfOg0KDQokJFAoYSBcbGVxIFggXGxlcSBiKSA9IFxpbnRfe2F9XntifSBmKHgpIFwsIGR4JCQNCg0KLSBGdW5nc2kgUERGIHNlbGFsdSBiZXJuaWxhaSB0aWRhayBuZWdhdGlmIGRhbiB0b3RhbCBsdWFzIGRpIGJhd2FoIGt1cnZhIGFkYWxhaCAxOg0KDQokJFxpbnRfey1caW5mdHl9XntcaW5mdHl9IGYoeCkgXCwgZHggPSAxJCQNCg0KLSBSdW11cyBQREYgZGlzdHJpYnVzaSBub3JtYWwgZGVuZ2FuIG1lYW4gX868XyBkYW4gc3RhbmRhciBkZXZpYXNpIF/Pg186DQoNCiQkZih4KSA9IFxmcmFjezF9e1xzaWdtYSBcc3FydHsyXHBpfX0gZV57LVxmcmFjeyh4LVxtdSleMn17MlxzaWdtYV4yfX0kJA0KDQotIEdyYWZpa255YSBiZXJiZW50dWsga3VydmEgbG9uY2VuZyBzaW1ldHJpcywgcHJvYmFiaWxpdGFzIHN1YXR1IGludGVydmFsbnlhIGJpc2EgZGloaXR1bmcgZGVuZ2FuIGludGVncmFsIFBERiBhdGF1IG1lbmdndW5ha2FuIHRhYmVsIFogKHN0YW5kYXIgbm9ybWFsKS4NCg0KLSBKaWthIGluZ2luIG1lbmdoaXR1bmcgcHJvYmFiaWxpdGFzIHVudHVrIHZhcmlhYmVsIGtvbnRpbnUsIHBlbmRla2F0YW4gdW11bSBhZGFsYWggbWVuZ2d1bmFrYW4gZnVuZ3NpIGRpc3RyaWJ1c2kga3VtdWxhdGlmIChDREYpOg0KDQokJEYoeCkgPSBQKFggXGxlcSB4KSA9IFxpbnRfey1caW5mdHl9Xnt4fSBmKHQpIFwsIGR0JCQNCg0KLSBVbnR1ayBtZW5kYXBhdGthbiBwcm9iYWJpbGl0YXMgc3VhdHUgcmVudGFuZyBbYSxiXToNCg0KJCRQKGEgXGxlcSBYIFxsZXEgYikgPSBGKGIpIC0gRihhKSQkDQo8L2Rpdj4NCg0KIyBTYW1wbGluZyBEaXN0cmlidXRpb24NCg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLzdTN2o3NWQzR000P3NpPWw4WGFBbkVwekk2dlFtNksiKQ0KYGBgDQoNCiMjIFBlbmdlcnRpYW4NCjxkaXYgY2xhc3M9InBhc3RlbC1tYXJvb24tYm94Ij4NCkRpc3RyaWJ1c2kgc2FtcGVsIChzYW1wbGUgZGlzdHJpYnV0aW9uKSBhZGFsYWggZGlzdHJpYnVzaSBkYXRhIGRhcmkgc2F0dSBzYW1wZWwgdHVuZ2dhbCB5YW5nIGRpYW1iaWwgZGFyaSBwb3B1bGFzaSwgbWVuY2VybWlua2FuIHZhcmlhYmlsaXRhcyBvYnNlcnZhc2kgaW5kaXZpZHUgZGFsYW0gc2FtcGVsIHRlcnNlYnV0LCB5YW5nIHNlcmluZyBrYWxpIHRpZGFrIHNlcGVudWhueWEgbWV3YWtpbGkgcG9wdWxhc2kga2FyZW5hIHVrdXJhbiBzYW1wZWwga2VjaWwuIFNlYmFsaWtueWEsIGRpc3RyaWJ1c2kgc2FtcGxpbmcgKHNhbXBsaW5nIGRpc3RyaWJ1dGlvbikgYWRhbGFoIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIGRhcmkgc3RhdGlzdGlrIHNhbXBlbCAoc2VwZXJ0aSByYXRhLXJhdGEgYXRhdSBwcm9wb3JzaSkgeWFuZyBkaWhpdHVuZyBkYXJpIGJhbnlhayBzYW1wZWwgYWNhayBzZWRlcmhhbmEgeWFuZyBkaWFtYmlsIGJlcnVsYW5nIGthbGkgZGFyaSBwb3B1bGFzaSB5YW5nIHNhbWEsIG1lbXVuZ2tpbmthbiBhbmFsaXNpcyBwZXJpbGFrdSBzdGF0aXN0aWsgc2VjYXJhIHRlb3JpdGlzLg0KPC9kaXY+DQoNCiMjIE1ldG9kZSBQZW5nYW1iaWxhbiBTYW1wZWwgZGFuIEFwbGlrYXNpDQo8ZGl2IGNsYXNzPSJwYXN0ZWwtbWFyb29uLWJveCI+DQpNZXRvZGUgc2FtcGxpbmcgbWVtZW5nYXJ1aGkga3VhbGl0YXMgZGlzdHJpYnVzaSwgc2VwZXJ0aSBzaW1wbGUgcmFuZG9tIChzZXRpYXAgZWxlbWVuIHNhbWEgcGVsdWFuZ255YSksIHN0cmF0aWZpZWQgKHBvcHVsYXNpIGRpYmFnaSBzdHJhdGEgaG9tb2dlbiksIHN5c3RlbWF0aWMgKGludGVydmFsIHRldGFwKSwgYXRhdSBjbHVzdGVyIChiZXJkYXNhcmthbiBrZWxvbXBvayBnZW9ncmFmaXMpLiBEaXN0cmlidXNpIHNhbXBsaW5nIGJlcmd1bmEgdW50dWsgaW5mZXJlbnNpOiBlc3RpbWFzaSBwYXJhbWV0ZXIgcG9wdWxhc2kgKG1pc2FsbnlhIF/OvF8pIHRhbnBhIHN1cnZlaSBwZW51aCwgdWppIGhpcG90ZXNpcywgZGFuIGludGVydmFsIGtlcGVyY2F5YWFuLCBrYXJlbmEgbGViaWggZWZpc2llbiBkYXJpcGFkYSBtZW5ndWt1ciBzZWx1cnVoIHBvcHVsYXNpIGJlc2FyLiBEYWxhbSBwcmFrdGlrLCBmYWt0b3Iga29yZWtzaSBkaXRlcmFwa2FuIGppa2EgcG9wdWxhc2kgdGVyYmF0YXMgXyhuL04+NSUpXyB1bnR1ayBtZW55ZXN1YWlrYW4gdmFyaWFucy4NCjwvZGl2Pg0KDQojIyBQZXJiZWRhYW4gVXRhbWENCjxkaXYgY2xhc3M9InBhc3RlbC1tYXJvb24tYm94Ij4NCnwgQXNwZWsgICAgICAgICAgICAgICAgIHwgRGlzdHJpYnVzaSBQb3B1bGFzaSAgIHwgRGlzdHJpYnVzaSBTYW1wZWwgICAgICAgIHwgRGlzdHJpYnVzaSBTYW1wbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgU3VtYmVyIERhdGEgICAgICAgICAgIHwgU2VsdXJ1aCBwb3B1bGFzaSAoTiBlbGVtZW4pICAgICB8IFNhdHUgc2FtcGVsIHR1bmdnYWwgKG4gZWxlbWVuKSAgIHwgQmFueWFrIHNhbXBlbCBhY2FrIGJlcnVsYW5nIChzdGF0aXN0aWsgc2VwZXJ0aSAkXGJhcnt4fSQpIHwNCnwgVWt1cmFuIFZhcmlhYmlsaXRhcyAgIHwgVGluZ2dpIF8oz4MpXyAgICAgICAgICAgICAgfCBUaW5nZ2ksIG1pcmlwIHBvcHVsYXNpIHRhcGkgYmlhcyB8IFJlbmRhaCAkXGxlZnQoIFxmcmFje1xzaWdtYX17XHNxcnR7bn19IFxyaWdodCkkICAgICAgICAgICAgICAgICAgICAgfA0KfCBSYXRhLXJhdGEgICAgICAgICAgICAgfCBfzrxfICh0ZXRhcCkgICAgICAgICAgICAgICAgICB8ICRcYmFye3h9JCAoYmVydmFyaWFzaSkgICAgICAgIHwgX868XyAoc2FtYSBkZW5nYW4gcG9wdWxhc2kpICAgICAgICAgICAgICAgICAgICAgICB8DQp8IEFwbGlrYXNpICAgICAgICAgICAgICB8IERlc2tyaXBzaSBwZW51aCwgamFyYW5nIHByYWt0aXMgfCBBbmFsaXNpcyBhd2FsIHNhdHUgc2FtcGVsICAgICAgICB8IEluZmVyZW5zaTogZXN0aW1hc2ksIHVqaSBoaXBvdGVzaXMgICAgICAgICAgICAgICAgIHwNCnwgQmVudHVrIChqaWthIG4gYmVzYXIpIHwgQXBhcHVuICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFwYXB1biAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTm9ybWFsIChDZW50cmFsIExpbWl0IFRoZW9yZW0pICAgICAgICAgICAgICAgICAgICAgIHwNCjwvZGl2Pg0KDQojIyBEaXN0cmlidXNpIFNhbXBsaW5nIFJhdGEtUmF0YSBTYW1wZWwNCjxkaXYgY2xhc3M9InBhc3RlbC1tYXJvb24tYm94Ij4NCkRpc3RyaWJ1c2kgc2FtcGxpbmcgcmF0YS1yYXRhIHNhbXBlbCBtZW1pbGlraSByYXRhLXJhdGEgc2FtYSBkZW5nYW4gcmF0YS1yYXRhIHBvcHVsYXNpIA0KJCRccXVhZCBcbXVfe1xiYXJ7eH19ID0gXG11JCQgDQp0ZXRhcGkgZGV2aWFzaSBzdGFuZGFyIGxlYmloIGtlY2lsLCB5YWl0dSBzdGFuZGFyIGVycm9yIChTRSk6DQokJFxzaWdtYV97XGJhcnt4fX0gPSBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSQkDQprYXJlbmEgcmF0YS1yYXRhIGt1cmFuZyBiZXJ2YXJpYXNpIGRhcmlwYWRhIG9ic2VydmFzaSBpbmRpdmlkdS4gSmlrYSBzYW1wZWwgY3VrdXAgYmFueWFrLCBkaXN0cmlidXNpIGluaSBtZW5kZWthdGkgbm9ybWFsIGthcmVuYSBDZW50cmFsIExpbWl0IFRoZW9yZW0sIG1lc2tpcHVuIHBvcHVsYXNpIHRpZGFrIG5vcm1hbC4gTm90YXNpIHVudHVrIGRpc3RyaWJ1c2kgc2FtcGxpbmcgbm9ybWFsIGFkYWxhaA0KJCRcYmFye3h9IFxzaW0gTlxsZWZ0KFxtdSwgXGZyYWN7XHNpZ21hfXtcc3FydHtufX1ccmlnaHQpJCQNCmRlbmdhbiBmb3JtdWxhIHN0YW5kYXJpc2FzaSANCiQkeiA9IFxmcmFje1xiYXJ7eH0gLSBcbXV9e1xzaWdtYSAvIFxzcXJ0e259fSQkDQo8L2Rpdj4NCg0KIyMgQ29udG9oDQo8ZGl2IGNsYXNzPSJwYXN0ZWwtbWFyb29uLWJveCI+DQpEaWtldGFodWk6DQoNCi0gVGluZ2dpIG9yYW5nIENhbmFkYTogbm9ybWFsLCAozrwgPSAxNjAgY20sIM+DID0gNyBjbSkNCi0gbiA9IDEwDQoNCkRpdGFueWE6IFAocmF0YS1yYXRhIDwgMTU3KQ0KDQpMYW5na2FoOg0KDQokJFNFID0gXGZyYWN7N317XHNxcnR7MTB9fSA9IDIuMjEkJA0KDQokJFogPSBcZnJhY3sxNTcgLSAxNjB9ezIuMjF9ID0gLTEuMzYgPT4gMC4wODY5JCQNCk1ha2EsIHByb2JhYmlsaXRhcyByYXRhLXJhdGEgdGluZ2dpIDEwIG9yYW5nIENhbmFkYSA8IDE1NyBjbSBhZGFsYWggMC4wODY5Lg0KDQpEaXN0cmlidXNpIHNhbXBsaW5nIGJlcmd1bmEgdW50dWsgaW5mZXJlbnNpIHN0YXRpc3RpayBzZWNhcmEgZWZpc2llbiwgc2VwZXJ0aSBtZW1wZXJraXJha2FuIF/OvF8gdGFucGEgbWVuZ3VrdXIgc2VsdXJ1aCBwb3B1bGFzaSAobWlzYWxueWEgdGluZ2dpIHJhdGEtcmF0YSA4IG1pbGlhciBvcmFuZyksIHNlcnRhIG1lbmdoaXR1bmcgcHJvYmFiaWxpdGFzIGJlcmRhc2Fya2FuIHVrdXJhbiBzYW1wZWwuDQo8L2Rpdj4NCg0KIyBDZW50cmFsIExpbWl0IFRoZW9yZW0NCg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2l2ZDh3RUhuTUNnP3NpPTZoeEtaaUtjejVldEdURlEiKQ0KYGBgDQoNCiMjIFBlbmdlcnRpYW4NCjxkaXYgY2xhc3M9InBhc3RlbC1wdXJwbGUtYm94Ij4NCkNlbnRyYWwgTGltaXQgVGhlb3JlbSAoQ0xUKSBtZW1wcmVkaWtzaSBiZW50dWsgZGlzdHJpYnVzaSBzYW1wbGluZyBiZXJkYXNhcmthbiB1a3VyYW4gc2FtcGVsLiBDTFQgbWVuZ2F0YWthbiBfSmlrYSB1a3VyYW4gc2FtcGVsIG4gY3VrdXAgYmVzYXIsIG1ha2Egc2FtcGxpbmcgZGlzdHJpYnV0aW9uIGRhcmkgbWVhbiBha2FuIGJlcmJlbnR1ayBub3JtYWwsIHRlcmxlcGFzIGRhcmkgYmVudHVrIGRpc3RyaWJ1c2kgYXNhbG55YS5fDQoNCkFydGlueWEgOg0KDQotIFBvcHVsYXNpIGF3YWwgYmlzYSBtaXJpbmcgKHNrZXdlZCksIHRpZGFrIHNpbWV0cmlzIGF0YXUgdGlkYWsgbm9ybWFsLg0KLSBUYXBpLCBqaWthIG4gYmVzYXIgLT4gZGlzdHJpYnVzaSByYXRhLXJhdGEgc2FtcGVsIGFrYW4gdGV0YXAgbWVuZGVrYXRpIG5vcm1hbC4NCjwvZGl2Pg0KDQojIyBSdW11cyBNYXRlbWF0aXMgQ0xUDQo8ZGl2IGNsYXNzPSJwYXN0ZWwtcHVycGxlLWJveCI+DQoNCnwgUGFyYW1ldGVyICAgICAgICAgIHwgUnVtdXMgICAgICAgICAgICAgfCBEZXNrcmlwc2kgICAgICAgICAgIHwNCnwgLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8IFJhdGEtcmF0YSBTYW1wbGluZyB8ICRccXVhZCBcbXVfe1xiYXJ7eH19ID0gXG11JCB8IFNlbGFsdSBzYW1hIGRlbmdhbiBwb3B1bGFzaSAgICAgfA0KfCBTdGFuZGFyIEVycm9yICAgICAgfCAkXHNpZ21hX3tcYmFye3h9fSA9IFxmcmFje1xzaWdtYX17XHNxcnR7bn19JCB8IE1lbmdlY2lsIHNlaXJpbmcgX25fIGJlc2FyICAgICAgfA0KfCBaLVNjb3JlICAgICAgICAgICAgfCAkeiA9IFxmcmFje1xiYXJ7eH0gLSBcbXV9e1xzaWdtYSAvIFxzcXJ0e259fSQgfCBTdGFuZGFyaXNhc2kgdW50dWsgcHJvYmFiaWxpdGFzIHwNCnwgRGlzdHJpYnVzaSAgICAgICAgIHwgJFxiYXJ7eH0gXHNpbSBOXGxlZnQoXG11LCBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fVxyaWdodCkkIHwgQmVudHVrIGFraGlyIENMVCAgICAgICAgICAgICAgICB8DQoNCg0KKipTeWFyYXQgZGFuIEJhdGFzYW4gTGVuZ2thcCoqDQoNCjEuIEppa2EgbiDiiaUgMzA6DQotIFNhbXBsaW5nIGRpc3RyaWJ1dGlvbiDiiYggbm9ybWFsDQotIEJpc2EgbWVuZ2d1bmFrYW4gZm9ybXVsYSBub3JtYWwgc2VwZXJ0aSB6LXNjb3JlLg0KDQoyLiBKaWthIG4gPCAzMDoNCi0gQ0xUIHRpZGFrIGJvbGVoIGRpZ3VuYWthbg0KLSBTYW1wbGluZyBkaXN0cmlidXRpb24gYmVsdW0gdGVudHUgbm9ybWFsLCBuYW11biBqaWthIHBvcHVsYXNpIHN1ZGFoIG5vcm1hbCBkYXJpIGF3YWwgbWVza2lwdW4gbiA8IDMwIGhhc2lsbnlhIGFrYW4gdGV0YXAgbm9ybWFsLg0KPC9kaXY+DQoNCiMjIENvbnRvaA0KPGRpdiBjbGFzcz0icGFzdGVsLXB1cnBsZS1ib3giPg0KDQpLYXN1czogUG9wdWxhc2kgdGluZ2dpIEthbmFkYSBfzrxfID0gMTYwIGNtLCBfz4NfID0gNyBjbSwgX25fID0gMzAuDQoNCkNhcmkgUChyYXRhLXJhdGEgPCAxNTcpOg0KDQokJFNFID0gXGZyYWN7N317XHNxcnR7MzB9fSA9IDEuMjggY20kJA0KDQokJFogPSBcZnJhY3sxNTcgLSAxNjB9ezEuMjh9ID0gLSAyLjM0ID0+IDAuMDA5NiQkDQoNCkphZGksIHByb2JhYmlsaXRhc255YSB5YWl0dSAwLjAwOTYgLT4gMC45NiUuDQo8L2Rpdj4NCg0KIyMgQXBsaWthc2kgUHJha3RpcyBDTFQNCjxkaXYgY2xhc3M9InBhc3RlbC1wdXJwbGUtYm94Ij4NCg0KfCBUdWp1YW4gICAgICAgICAgfCBSdW11cyBJbnRlcnZhbCBLZXBlcmNheWFhbiA5NSUgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgRXN0aW1hc2kgX868XyB8ICRcYmFye3h9IFxwbSAxLjk2IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSQNCiB8DQp8IE1hcmdpbiBvZiBFcnJvciB8ICRcdGV4dHtNT0V9ID0geiBcdGltZXMgXGZyYWN7XHNpZ21hfXtcc3FydHtufX0kDQogICAgICAgICB8DQp8IFVqaSBIaXBvdGVzaXMgICB8IEJhbmRpbmdrYW4gX3pfIGRlbmdhbiBjcml0aWNhbCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KDQoNCi0gRXN0aW1hc2kgUmF0YS1yYXRhLCBhcnRpbnlhIGppa2Egc2FtcGVsIGRpYW1iaWwgYmVydWxhbmcga2FsaSBkYW4gc2V0aWFwIGthbGkgZGlidWF0IGludGVydmFsICRcYmFye3h9IFxwbSAxLjk2IFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSQgLCBtYWthIHNldGlhcCA5NSUgaW50ZXJ2YWwgdGVyc2VidXQgYWthbiBtZW11YXQgbmlsYWkgcmF0YS1yYXRhIHlhbmcgc2ViZW5hcm55YS4NCg0KLSBNYXJnaW4gb2YgRXJyb3IsIGFydGlueWEgbWFraW4gYmVzYXIgJHtcc2lnbWF9JCBhdGF1IG1ha2luIGtlY2lsIF9uXywgbWFrYSAke1xzaWdtYX0ve1xzcXJ0e259fSQgbWFraW4gYmVzYXIgc2VoaW5nZ2EgbWFyZ2luIG9mIGVycm9yIG1lbGViYXIgZGFuIGludGVydmFsIGtlcGVyY2F5YWFuIG1lbmphZGkga3VyYW5nIHByZXNpc2kuDQoNCi0gVWppIEhpcG90ZXNpcywgZGkgbWFuYSBzdGF0aXN0aWsgdWppIF96XyBkaWhpdHVuZyBkYXJpIGRhdGEgZGFuIGtlbXVkaWFuIGRpYmFuZGluZ2thbiBkZW5nYW4gbmlsYWkga3JpdGlzLCBtaXNhbG55YSAkXHBtIDEuOTYkIHVudHVrIHVqaSBkdWEgc2lzaSBkZW5nYW4gJHtcYWxwaGF9JCA9IDAuMDUNCg0KPC9kaXY+DQoNCiMgU2FtcGxlIFByb3BvcnRpb24NCg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL3EyZTRtSzBGVGJ3P3NpPW5qb0JlSmt4d0t4a2lCRlgiKQ0KYGBgDQoNCiMjIFBlbmdlcnRpYW4NCjxkaXYgY2xhc3M9InBhc3RlbC1ncmVlbi1ib3giPg0KRGlzdHJpYnVzaSBTYW1wbGluZyBQcm9wb3JzaSBTYW1wZWwgJFxoYXR7KHApfSQgYWRhbGFoIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIGRhcmkgYmVyYmFnYWkgbmlsYWkgJFxoYXR7cH0kIHlhbmcgbXVuZ2tpbiBkaWhhc2lsa2FuIGRhcmkgcGVuZ3VsYW5nYW4gc2FtcGVsIGFjYWsgc2VkZXJoYW5hIGRhcmkgcG9wdWxhc2kgYmluZXIvc3Vrc2VzLWdhZ2FsLg0KPC9kaXY+DQoNCiMjIFJ1bXVzDQo8ZGl2IGNsYXNzPSJwYXN0ZWwtZ3JlZW4tYm94Ij4NCg0KLSBQb3B1bGFzaToNCg0KDQokJHtwfSA9IFxmcmFje1h9e059JCQNCg0KDQotIFNhbXBsZToNCg0KDQokJFxoYXR7cH0gPSBcZnJhY3t4fXtufSQkDQoNCi0gTWVhbjoNCg0KDQokJFxtdV97XGhhdHtwfX0gPSBwJCQNCg0KLSBWYXJpYW5jZTogDQoNCiQkXHNpZ21hX3tcaGF0e3B9fV4yID0gXGZyYWN7cCgxLXApfXtufSQkDQoNCi0gU3RhbmRhciBFcnJvciAoU0UpOg0KDQokJFxzaWdtYV97XGhhdHtwfX0gPSBcc3FydHtcZnJhY3twKDEtcCl9e259fSQkDQoNCi0gRGlzdHJpYnVzaSBOb3JtYWw6DQoNCiQkXGhhdHtwfSBcc2ltIE5cbGVmdChwLCBcc3FydHtcZnJhY3twKDEtcCl9e259fVxyaWdodCkkJA0KDQotIFotU2NvcmUgZGFuIFN0YW5kYXJpc2FzaToNCg0KJCR6ID0gXGZyYWN7XGhhdHtwfSAtIHB9e1xzcXJ0e1xmcmFje3AoMS1wKX17bn19fSQkDQoNCi0gRmFrdG9yIEtvcmVrc2kgUG9wdWxhc2kgVGVyYmF0YXMgKG4vTiA+IDUlKToNCg0KJCRcc2lnbWFfe1xoYXR7cH19ID0gXHNxcnR7XGZyYWN7cCgxLXApfXtufX0gXGNkb3QgXHNxcnR7XGZyYWN7Ti1ufXtOLTF9fSQkDQoNCioqU3lhcmF0IENMVCBQcm9wb3JzaSB2cyBNZWFuKioNCg0KLSBTYW1wbGluZyBNZWFuOiAkbiBcZ2VxIDEwJA0KLSBTYW1wbGluZyBQcm9wb3JzaTogJG5wIFxnZXEgMTAsIFxxdWFkIG5xXGdlcSAxMCB7KHEgPSAxLXApfSQNCg0KTWluaW11bSBfbl8gdGVyZ2FudHVuZyBfcF86IEppa2EgX3BfID0gMC4xLCAkbiBcZ2VxIDEwMCQgKGthcmVuYSAxMDAgeCAwLjEgPSAxMCkuDQo8L2Rpdj4NCg0KIyMgQ29udG9oDQo8ZGl2IGNsYXNzPSJwYXN0ZWwtZ3JlZW4tYm94Ij4NCg0KU2VidWFoIHN1cnZlaSBuYXNpb25hbCBtZW5lbXVrYW4gYmFod2EgNDAlIHBlbmR1ZHVrIG1lbWlsaWtpIGtlYmlhc2FhbiBiZXJvbGFocmFnYSBtaW5pbWFsIDMga2FsaSBwZXIgbWluZ2d1Lg0KS2l0YSBtZWxha3VrYW4gc3VydmVpIGFjYWsgdGVyaGFkYXAgbiA9IDEwMCBvcmFuZy4NCg0KUGVydGFueWFhbjoNCg0KLSBUZW50dWthbiBtZWFuIGRhbiBzdGFuZGFyZCBkZXZpYXRpb24gZGFyaSBzYW1wbGluZyBkaXN0cmlidXRpb24gDQotIFBlcmlrc2EgYXBha2FoIGtvbmRpc2kgQ0xUIHVudHVrIHByb3BvcnNpIHRlcnBlbnVoaS4NCi0gVGVudHVrYW4gZGlzdHJpYnVzaSBzYW1wbGluZw0KDQpEaWtldGFodWk6DQoNCi0g8J2RnT0gMC40MA0KLSDwnZGbPSAxMDANCi0g8J2Rnj0gMeKIkvCdkZ09IDAuNjANCg0KJCRcbXVfe1xoYXR7cH19ID0gcCA9IDAuNDAkJA0KDQokJFxzaWdtYV97XGhhdHtwfX0gPSBcc3FydHtcZnJhY3twKDEtcCl9e259fSA9IFxzcXJ0e1xmcmFjezAuNDAgLSAwLjYwfXsxMDB9fSA9IFxzcXJ0e1xmcmFjezAuMjR9ezEwMH19ID0gXHNxcnR7MC4wMDI0fSDiiYggMC4wNDkkJA0KDQokJG5wID0gezEwMCAuIDAuNDB9ID0gezQwIFxnZXEgMTB9JCQNCg0KJCRucSA9IHsxMDAgLiAwLjYwfSA9IHs2MCBcZ2VxIDEwfSQkDQoNCktlZHVhbnlhIHRlcnBlbnVoaSDihpIgZGlzdHJpYnVzaSAkXGhhdHtwfSQgZGFwYXQgZGlhbmdnYXAgbm9ybWFsLg0KDQokJFxoYXR7cH0gXHNpbSBOeygwLjQwLCAwLjA0OSl9JCQNCjwvZGl2Pg0KDQojIFJldmlldyBTYW1wbGluZyBEaXN0cmlidXRpb24NCg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL2MwbUZFTF9TV3pFP3NpPXJJbjNCWm9FR21WU0VrS0giKQ0KYGBgDQoNCg0KIyMgQ29udG9oIGthc3VzDQo8ZGl2IGNsYXNzPSJwYXN0ZWwteWVsbG93LWJveCI+DQpNaXNhbG55YSBraXRhIG1lbWlsaWtpIHNlYnVhaCB0b3BsZXMgYmVyaXNpIDIwMCBrZWxlcmVuZyBoaWphdSBkYW4gMzAwIGtlbGVyZW5nIGJpcnUuIEppa2Egc2VidWFoIGtlbGVyZW5nIGRpYW1iaWwgdGlnYSBrYWxpIGRlbmdhbiBwZW5nZW1iYWxpYW4sIGJlcmFwYSBwZWx1YW5nIHRlcmFtYmlsbnlhIHNldGlkYWtueWEgZHVhIGtlbGVyZW5nIGhpamF1Pw0KPC9kaXY+DQoNCiMjIFByb2JhYmlsaXRhcyBkYXNhciAmIFNhbXBsZSBzcGFjZQ0KPGRpdiBjbGFzcz0icGFzdGVsLXllbGxvdy1ib3giPg0KTmlsYWkgUHJvYmFiaWxpdGFzOg0KJCR7UChHcmVlbil9ID0gXGZyYWN7MjAwfXs1MDB9ID0gMC40JCQNCg0KJCR7UChCbHVlKX0gPSBcZnJhY3szMDB9ezUwMH0gPSAwLjYkJA0KDQpPdXRjb21lIChTYW1wbGUgU3BhY2UpIDoNCg0KLSBHR0cNCi0gR0dCDQotIEdCRyANCi0gR0JCDQotIEJHRw0KLSBCR0INCi0gQkJHDQotIEJCQg0KDQpEZW5nYW4gMyBwZW5nYW1iaWxhbiwganVtbGFoIHRvdGFsIG91dGNvbWUgLT4gMngyeDIgPSA4DQokJHtQKEdHQil9ID0gMC40IMOXIDAuNCDDlyAwLjYgPSAwLjA5NiQkDQoNCiQke1AoQkJCKX0gPSAwLjYgw5cgMC42IMOXIDAuNiA9IDAuMjE2JCQNCg0KJCR7UChcZ2VxIDJHKX0gPSB7UCgyRyl9ICsge1AoM0cpfSA9IDMgw5cgMC4wOTYgKyAwLjA2NCA9IDAuMzUyID0gMzUuMlwlJCQNCjwvZGl2Pg0KDQojIyBEaXN0cmlidXNpIEJpbm9taWFsDQo8ZGl2IGNsYXNzPSJwYXN0ZWwteWVsbG93LWJveCI+DQpSdW11cw0KDQokJFAoWCA9IGspID0gXGJpbm9te259e2t9IFwsIHBeayAoMS1wKV57bi1rfSQkDQoNCg0KLSBQKFggPSAyKQ0KLSBQKFggPSAzKQ0KLSBQKFggPSA0KQ0KLSBQKFggPSA1KQ0KDQokJHtQKFxnZXEgMkcpfSA9IFxzdW1fe2s9Mn1eezV9IFxiaW5vbXs1fXtrfSBcLCAoMC40KV5rICgwLjYpXns1LWt9ID0gMC42NjM0ID0gNjYuMzRcJSQkDQoNCi0gX2tfID0gMjogJCRcYmlub217NX17Mn0gXCwgKDAuNCleMiAoMC42KV57M30gPSAwLjM0NTYkJA0KPC9kaXY+DQoNCiMjIERpc3RyaWJ1c2kgU2FtcGxpbmcgUHJvcG9yc2kNCjxkaXYgY2xhc3M9InBhc3RlbC15ZWxsb3ctYm94Ij4NCktvbmRpc2kgQ0xUIFByb3BvcnNpOiANCg0KJG5wIFxnZXEgMTAsIG4oMSAtIHApIFxnZXEgMTAgLT4gMTAwIMOXIDAuNCA9IDQwIFxnZXEgMTAsIDYwIFxnZXEgMTAkDQoNCg0KJCRcaGF0e3B9IFxzaW0gTlxsZWZ0KHAsIFxzcXJ0e1xmcmFje3AoMS1wKX17bn19XHJpZ2h0KSQkDQoNCiQke1NFfSA9IFxzcXJ0e1xmcmFjezAuNCDDlyAwLjZ9ezEwMH19ID0gMC4wNDkkJA0KDQoNCiQkeiA9IHtcZnJhY3tcaGF0e3B9IC0ge3B9fXtTRX19ID0ge1xmcmFjezAuMzUgLSAwLjR9ezAuMDQ5fX0gPSAtIDEuMDIkJA0KDQoNCiQkUChcaGF0e3B9IFxnZXEgMC4zNSkgPSBQKFogXGdlcSAtIDEuMDIpID0gMSAtIDAuMTUzOSA9IDAuODQ2MSA9IDg0LjYxXCUkJA0KPC9kaXY+DQoNCiMjIEludGVycHJldGFzaQ0KPGRpdiBjbGFzcz0icGFzdGVsLXllbGxvdy1ib3giPg0KKioxLiBuID0gMzoqKg0KDQoNCi0gU2FtcGxlIFNwYWNlIChQcm9iYWJpbGl0YXMgVGVwYXQgPSAwLjM1MiBhdGF1IDM1LjIlKQ0KLSBJbnNpZ2h0OiBBZGEgMzUuMiUga2VtdW5na2luYW4gbWVuZGFwYXQg4omlIDIgaGlqYXUgZGFsYW0gMyB0YXJpa2FuIHdpdGggcmVwbGFjZW1lbnQuDQotIEtvbnRla3M6IENvY29rIHVudHVrIGVrc3BlcmltZW4ga2VjaWwsIGVudW1lcmFzaSBzZW11YSA4IG91dGNvbWUgbWVtdW5na2lua2FuLg0KDQoqKjIuIG4gPSA1OioqDQoNCg0KLSBEaXN0cmlidXNpIEJpbm9taWFsIChQcm9iYWJpbGl0YXMgVGVwYXQgPSAwLjY2MzQgYXRhdSA2Ni4zNCUpDQotIEludGVycHJldGFzaTogNjYuMzQlIGtlbXVuZ2tpbmFuIG1lbmRhcGF0IOKJpSAyIGhpamF1IGRhbGFtIDUgdGFyaWthbi4NCi0gS29udGVrczogRWZpc2llbiB1bnR1ayBfbl8gc2VkYW5nICgxMCBrYWxrdWxhc2kpLCBha3VyYXQgMTAwJQ0KDQoqKjMuIG4gPSAxMDA6KioNCg0KDQotIENMVCBQcm9wb3JzaSAoQXBwcm94ID0gMC44NDYxIGF0YXUgODQuNjElKQ0KLSBJbnRlcnByZXRhc2k6IDg0LjYxJSBrZW11bmdraW5hbiANCiR7XGhhdCBwfSQg4omlIDAuMzUgKOKJpSAzNSBoaWphdSBkYXJpIDEwMCkuDQotIEFrdXJhc2k6IEFwcHJveCAoYnVrYW4gZWtzYWspLCB0YXBpIHNhbmdhdCBkZWthdCB1bnR1ayBuIGJlc2FyLg0KPC9kaXY+DQoNCiMgUmVmZXJlbmNlcw0KPGRpdiBjbGFzcz0iYmxvY2txdW90ZSI+DQpbMV0gWmFzZW5keSBSZWhlbmEgX1BvcHVsYXNpLCBTYW1wZWwgZGFuIERpc3RyaWJ1c2kgU2FtcGxpbmdfICANCmh0dHBzOi8vaWQuc2NyaWJkLmNvbS9wcmVzZW50YXRpb24vNDY5MjU0MzExL1BPUFVMQVNJLVNBTVBFTC1ESVNUUklCVVNJLVNBTVBMSU5HLVNUQU5EQVItRVJST1IgDQoNClsyXSBTLiBBbmRpbGFoIFsyMDI1XSBfIkVCT09LIERBU0FSIFNUQVRJU1RJSyJfDQoNClszXSBSaW5hbGRpIE11bmlyIChJVEIpIF8iQmViZXJhcGEgRGlzdHJpYnVzaSBQZWx1YW5nIEtvbnRpbnUiXyAgIGh0dHBzOi8vaW5mb3JtYXRpa2Euc3RlaS5pdGIuYWMuaWQvfnJpbmFsZGkubXVuaXIvUHJvYnN0YXQvMjAxMC0yMDExL0JlYmVyYXBhJTIwRGlzdHJpYnVzaSUyMFBlbHVhbmclMjBLb250aW51LnBkZg0KDQpbNF0gVW5pa29tIFJlcG9zaXRvcnkgX0Rpc3RyaWJ1c2kgU2FtcGxpbmdfICAgaHR0cHM6Ly9yZXBvc2l0b3J5LnVuaWtvbS5hYy5pZC8zMjgyNy8xL0RJU1RSSUJVU0klMjBTQU1QTElORy5wZGYNCg0KWzVdIEFuZGkgQXNhcmksIFNJUC4sIFMuS29tLiwgTS5BLiwgUC5oRCAoQykuIFtKdW5pIDIwMjNdIF9QZW5nYW50YXIgU3RhdGlzdGlrYSAxXyAgaHR0cHM6Ly93d3cuc2NyaWJkLmNvbS9kb2N1bWVudC82OTMwNDQ0NzQvQW5kaS1Bc2FyaS1QZW5nYW50YXItU3RhdGlzdGlrYS0xDQoNCls2XSBEZW5kaQlaYWludWRkaW4JSGFtaWRpLAlTLlQuLAlNLk0gW05vdmVtYmVyIDIwMjRdIF9TdGF0aXN0aWsgRGFzYXJfDQoNCls3XSBJbnRyb2R1Y3Rpb24gdG8gU3RhdGlzdGljcy4gX+KAnDcgUHJvYmFiaWxpdHkgRGlzdHJpYnV0aW9ucy7igJ1fIGRzY2llbmNlbGFicy4gaHR0cHM6Ly9ib29rZG93bi5vcmcvZHNjaWVuY2VsYWJzL2ludHJvX3N0YXRpc3RpY3MvMDctUHJvYmFiaWxpdHlfRGlzdHJpYnV0aW9ucy5odG1sDQoNCjwvZGl2Pg==