Probability Distribution ~ Assignment week 11

Logo

Ignasius Rabi Blolong

Student Majoring in Data Science at ITSB

R Programming Data Science Statistics

1 Introduction

1.1 Definisi

Distribusi probabilitas adalah konsep fundamental dalam statistika dan teori probabilitas. Ini adalah deskripsi matematika yang memberikan probabilitas terjadinya setiap hasil yang mungkin dari suatu eksperimen acak Secara sederhana, pada kesempatan kali ini kita akan melihat tentang:

  1. PDF (Probability Density Function) (Fungsi Kepadatan Probabilitas) Inti: Menunjukkan kepadatan (density) atau kemungkinan relatif suatu nilai muncul untuk variabel kontinu.

Ingat: Nilai PDF itu sendiri bukan probabilitas; probabilitas adalah luas di bawah kurvanya.

  1. Sample Proportion (Proporsi Sampel) Inti: Merupakan statistik sampel \(\hat{p}\) yang digunakan untuk mengestimasi persentase (π) suatu karakteristik dalam populasi.

Fungsi: Digunakan saat kita menganalisis data kategorikal (misalnya, ya/tidak, sukses/gagal).

  1. Sampling Distribution (Distribusi Sampling) Inti: Adalah distribusi probabilitas dari suatu statistik (misalnya, rata-rata atau proporsi) yang diperoleh dari mengambil semua sampel yang mungkin dari populasi.

Fungsi: Menjadi jembatan antara statistik sampel dan parameter populasi.

  1. CLT (Central Limit Theorem) (Teorema Limit Pusat) Inti: Aturan emas yang menyatakan bahwa jika ukuran sampel (n) cukup besar (≥30), maka Distribusi Sampling Rata-rata Sampel akan menjadi berbentuk Normal (lonceng), tidak peduli seperti apa bentuk populasi asalnya.

1.2 Jenis-jenis Distribusi

berdasarkan sifat Variabel acaknya :

1.2.1 Distribusi Probabilitas Diskrit

Ini berlaku untuk variabel acak yang hanya dapat mengambil nilai yang terhitung (biasanya bilangan bulat), seperti jumlah orang, jumlah cacat, atau jumlah keberhasilan. Fungsi: Menggunakan Fungsi Massa Probabilitas (FMP), P(X=x), yang memberikan probabilitas untuk setiap nilai spesifik x.

Contoh Umum: Distribusi Binomial, Poisson, dan Geometrik.

1.2.2 Distribusi Probabilitas Kontinu

Ini berlaku untuk variabel acak yang dapat mengambil nilai apa pun dalam rentang tertentu (diukur),seperti tinggi,berat,atau waktu. Fungsi: Menggunakan Fungsi Kepadatan Probabilitas (FKP), f(x). Karena ada tak terhingga banyaknya nilai, probabilitas untuk nilai tunggal adalah nol. Sebaliknya, probabilitas dihitung untuk suatu rentang (P(a<X<b)) sebagai area di bawah kurva FKP.

Contoh Umum: Distribusi Normal (Gaussian), Eksponensial, dan Uniform Kontinu.

1.3 Pentingnya dalam Analisis Data

Memahami distribusi probabilitas sangat penting karena:

  • Pemodelan: Distribusi memungkinkan para analis untuk memodelkan data dunia nyata dan proses acak (misalnya, memodelkan jumlah pelanggan yang tiba per jam menggunakan Distribusi Poisson).

  • Inferensi: Distribusi membentuk dasar untuk pengujian hipotesis dan estimasi interval kepercayaan, yang merupakan tulang punggung statistik inferensial.

  • Pengambilan Keputusan: Dengan mengetahui probabilitas hasil yang berbeda, organisasi dapat membuat keputusan yang lebih tepat dan mengelola risiko (misalnya, menghitung risiko kerugian investasi).

2 Continuous Random

2.1 Video Summary

\(FITUR\) \(VARIABEL\) \(DISKRIT\) \(VARIABEL\) \(KONTINU\)
Definisi Variabel yang nilainya hanya dapat mengambil hitungan terbatas (finite),dan dapat di pertanggungjawabkan, biasanya bilangan bulat. Variabel yang nilainya dapat mengambil nilai numerik apa pun dalam rentang atau interval tertentu.
Sifat Nilai Diperoleh dengan cara dihitung dan masuk akal. Diperoleh dengan cara diukur dan dapat dipecah menjadi unit yang lebih kecil (misalnya, desimal tak terhingga).
Contoh Jumlah anak dalam keluarga,Nilai siswa saat ujian, Jumlah uang di Rekening Bank. Tinggi badan, berat badan, suhu, jarak
Perhitungan Menggunakan semua Rumus probabilitas Menggunakan Rumus Kurva Kerapatan.
Representasi Visual Grafik batang (bar chart) di mana tinggi batang menunjukkan probabilitas. Histogram yang tidak memiliki cela untuk mencerminkan kontinuitas.

2.2 Variabel Acak (Random Variable)

Variabel Acak (X) adalah fungsi yang menghubungkan setiap hasil (outcome) dari suatu eksperimen acak dengan sebuah nilai numerik (angka).Sederhananya, Variabel Acak adalah cara kita mengubah hasil kejadian yang tidak pasti (seperti melempar koin) menjadi angka yang dapat dianalisis secara matematis.

  • Ia adalah Jembatan: Variabel acak adalah jembatan yang menghubungkan ruang sampel (hasil kejadian) dengan bilangan riil.

  • Nilai Tidak Pasti: Nilai yang diambilnya bergantung pada hasil acak dari eksperimen.

Contoh: Dalam pelemparan dua koin, ruang sampelnya adalah {HH, HT, TH, TT}. Variabel acak X bisa didefinisikan sebagai jumlah kepala (Heads). Nilai X yang mungkin adalah 0, 1, dan 2.

2.3 Probabilitas Density Funct

Fungsi Kepadatan Probabilitas (f(x)) adalah fungsi yang mendefinisikan distribusi probabilitas untuk variabel acak kontinu (misalnya, tinggi badan, waktu, suhu). Penjelasan:

Bukan Probabilitas Langsung: Nilai f(x) itu sendiri bukan probabilitas. Ini adalah kepadatan probabilitas. f(x) bisa saja lebih besar dari 1 (walaupun probabilitas tidak bisa).

Area = Probabilitas: Probabilitas bahwa variabel acak X jatuh dalam rentang tertentu diwakili oleh area di bawah kurva f(x) untuk rentang tersebut.

Total Area = 1: Luas total di bawah seluruh kurva PDF harus selalu sama dengan 1, karena probabilitas total untuk semua kemungkinan hasil adalah 100%.

Syarat PDF: Agar suatu fungsi f(x) dapat menjadi PDF, harus memenuhi dua syarat berikut:

  • Non-Negatif: Nilai fungsi harus selalu nol atau positif untuk semua nilai x. f(x)≥0untuk semua x

  • Total Area Sama dengan Satu: Total area di bawah kurva f(x) di seluruh domain harus sama dengan 1, karena probabilitas total dari semua kemungkinan hasil adalah 100%. ∫−∞∞f(x)dx=1 ∫−∞∞​f(x)dx=1

2.4 Probability an on Interval

Atau biasa disebut Probabilitas pada Interval, Karena variabel acak kontinu memiliki jumlah nilai yang tak terhingga, probabilitas bahwa X akan mengambil nilai tunggal tepat (misalnya P(X=5)) selalu nol. Kita hanya dapat menghitung probabilitas bahwa X akan jatuh dalam suatu interval [a,b]. Pengerjaan:

Probabilitas X berada di antara a dan b didapatkan dengan mengintegrasikan PDF (f(x)) dari a sampai b.

Metode Probabilitas yang Dihitung Deskripsi Rumus Matematis
Menggunakan PDF \(P(a \leq X \leq b)\) Luas di bawah kurva PDF antara batas \(a\) dan \(b\). \(\int_{a}^{b} f(x) dx\)
Menggunakan CDF \(P(a \leq X \leq b)\) Perbedaan antara probabilitas kumulatif pada \(b\) dan \(a\). \(F(b) - F(a)\)
Probabilitas pada Titik Tunggal \(P(X = x)\) Probabilitas bahwa variabel kontinu mengambil nilai tepat \(x\). \(0\)

2.5 Cumulative Distribution Funct

Fungsi Distribusi Kumulatif (F(x)) memberikan probabilitas bahwa variabel acak X akan mengambil nilai kurang dari atau sama dengan nilai tertentu x. Penjelasan:

  • Akumulasi Probabilitas: CDF adalah akumulasi (penjumlahan) probabilitas dari −∞ hingga titik x.

  • Hubungan dengan PDF: CDF adalah integral dari PDF.

  • Nilai: Nilai F(x) selalu berkisar antara 0 dan 1.

2.5.1 Fungsi Dasar Distribusi Kontinu

Konsep Notasi Deskripsi Singkat Rumus Matematis
Fungsi Kepadatan Probabilitas (PDF) \(f(x)\) Kemungkinan relatif (bukan probabilitas); Luas total di bawah kurva = 1. \(f(x) \geq 0\)
Fungsi Distribusi Kumulatif (CDF) \(F(x)\) Probabilitas bahwa \(X\) kurang dari atau sama dengan \(x\), \(P(X \leq x)\). \(F(x) = \int_{-\infty}^{x} f(t) dt\)

3 Sampling Distribution

3.1 Video Summary

  • Distribusi Populasi : Distribusi yang dibuat untuk mengukur setiap individu dalam populasi
  • Distribusi Sampel : Distribusi yang dibuat untuk mengukur setiap individu dalam Sampel
  • Distribusi Sampling : Distribusi statistika yang dibuat dari beberapa sampel sederhana yang diambil dari populasi tertentu secara berulang

Visualisasi: Distribusi Sampling

# Central Limit Theorem

3.2 Video Summary

3.2.1 Definisi

Central Limit Theorem berbunyi: Jika anda mengambil sampel yang cukup besar dan acak dari populasi apapun, distribusi rata-rata sampel tersebut akan berbentuk normal terlepas dari bentuk asli populasi distribusi. atau dengan kata lain : Jika ukuran sampel (n) cukup besar (umumnya n≥30), maka Distribusi Sampling Rata-rata Sampel (Xˉ) akan mendekati Distribusi Normal.Hasil ini berlaku terlepas dari bentuk distribusi populasi asalnya (bisa miring (skewed), seragam (uniform), atau bentuk apa pun). Teori ini berguna untuk menganalisis data yang besar dan memprediksi bentuk distribusi sampling berdasarkan ukuran sampel

3.2.2 Mengapa CLT Penting?

CLT sangat penting dalam statistika inferensial karena memungkinkan kita untuk menggunakan sifat-sifat distribusi normal untuk melakukan pengujian hipotesis dan membangun interval kepercayaan, bahkan ketika kita tidak tahu (atau tahu bahwa) distribusi populasi aslinya tidak normal.

3.2.3 Kondisi dan Ukuran Sampel

\(Ukuran Sampel\) (\(n\)) \(Penjelasan\)
\(n \ge 30\) Distribusi sampel akan mendekati normal (sesuai Teorema Limit Pusat - CLT), terlepas dari bentuk distribusi populasi asalnya.
\(n < 30\) Jika populasi asalnya sudah berdistribusi normal, maka distribusi samplingnya juga akan normal.
\(n < 30\) Jika populasi asalnya tidak diketahui distribusinya atau tidak normal, maka CLT tidak dapat diterapkan dengan keyakinan yang sama. Hal ini berarti terdapat lebih banyak variabilitas, kurang presisi, dan kurang keandalan dalam mengasumsikan distribusi normal.

3.2.4 Rumus

Komponen Rumus Variabel Penjelasan
Rumus Skor Z \[Z = \frac{\bar{X} - \mu}{\sigma/\sqrt{n}}\] Mengukur berapa banyak Galat Baku (Standard Error) rata-rata sampel (\(\bar{X}\)) berada di atas atau di bawah rata-rata populasi (\(\mu\)).
Rata-rata Sampel \(\bar{X}\) Statistik yang dihitung dari sampel dan sedang diuji.
Rata-rata Populasi \(\mu\) Parameter populasi (atau nilai hipotesis) yang merupakan rata-rata dari Distribusi Sampling (\(\mu_{\bar{X}}\)).
Simpangan Baku Populasi \(\sigma\) Simpangan baku dari populasi asal.
Ukuran Sampel \(n\) Jumlah observasi dalam sampel.
Galat Baku \(\sigma/\sqrt{n}\) Simpangan baku dari Distribusi Sampling Rata-Rata (\(SE_{\bar{X}}\)). Mengukur variabilitas rata-rata sampel.

4 Sample Proportion

4.1 Video Summary

Sample Proportion \(\hat{p}\) (dibaca p-hat), adalah fraksi hasil yang menguntungkan dalam kaitanya dengan keseluruhan atau bagian dari sampel yang memiliki karakteristik atau sifat tertentu. Ini digunakan sebagai penduga (estimator) terbaik dari proporsi populasi sebenarnya (population proportion), yang dilambangkan dengan p. Proporsi sampel paling sering digunakan ketika berhadapan dengan data kategorikal (misalnya, ya/tidak, sukses/gagal, setuju/tidak setuju) untuk menentukan persentase keberhasilan atau kejadian tertentu dalam sampel. Contoh:

  • Jika Anda mengambil sampel 10 orang dan 2 di antaranya memiliki bola mata berwarna hijau, maka proporsi sampel yang memiliki bola mata hijau adalah 2/10=0.2 atau 20%.

  • Jika Anda mengambil sampel 100 orang dan 60 di antaranya menyukai kopi, maka proporsi sampel yang menyukai kopi adalah 60/100=0.60 atau 60%.

4.1.1 Rumus Proporsi Sampel

Simbol Nama Deskripsi
\(\hat{p}\) Proporsi Sampel (p-hat) Proporsi dari sampel yang memiliki karakteristik yang diteliti.
\(x\) Jumlah Keberhasilan Jumlah observasi dalam sampel yang memiliki karakteristik yang diteliti.
\(n\) Ukuran Sampel Ukuran total sampel (jumlah total observasi).
\(\hat{p} = \frac{x}{n}\) Rumus Rumus yang benar untuk menghitung Proporsi Sampel.

4.1.2 Distribusi Sampling dari Proporsi Sampel

Video diatas membahas “Distribusi Sampling dari Proporsi Sampel” (Sampling Distribution of the Sample Proportion). Distribusi ini adalah distribusi probabilitas dari semua nilai proporsi sampel \(\hat{p}\) yang mungkin yang dapat diperoleh dari semua sampel berukuran n yang mungkin dari suatu populasi.

Penting: Jika ukuran sampel (n) cukup besar (biasanya jika np≥10 dan n(1−p)≥10), distribusi sampling dari \(\hat{P}\) akan mendekati distribusi normal. Ini memungkinkan kita untuk melakukan inferensi statistik.

5 Revew Sampling Distribution

5.1 Video summary

5.1.1 Konsep Kunci dan Definisi

Konsep Kunci Definisi Singkat Relevansi
Distribusi Sampling Distribusi probabilitas dari statistik sampel (misalnya, \(\bar{X}\) atau \(\hat{p}\)) atas semua sampel yang mungkin. Dasar untuk Statistika Inferensial.
Teorema Limit Pusat (CLT) Jika \(n \geq 30\), Distribusi Sampling Rata-rata mendekati Distribusi Normal, terlepas dari bentuk populasi. Memungkinkan penggunaan tabel Z (Normal) dalam analisis.
Standard Error (\(SE\)) Simpangan baku dari Distribusi Sampling. Mengukur seberapa besar rata-rata sampel kemungkinan berfluktuasi dari rata-rata populasi.
Variabel Acak Kontinu Dapat mengambil nilai apa pun dalam rentang tertentu; probabilitas dihitung untuk rentang, bukan titik spesifik. Membenarkan penggunaan kurva halus (PDF) seperti Distribusi Normal.

5.1.2 Rumus Esensial(Skor Z dan Galat Baku)

Statistik Rata-Rata Distribusi (\(\mu_{\text{statistik}}\)) Galat Baku (\(SE\)) Skor Z (Standardisasi)
Rata-Rata Sampel (\(\bar{X}\)) \(\mu_{\bar{X}} = \mu\) \(SE_{\bar{X}} = \sigma/\sqrt{n}\) \(Z = \frac{\bar{X} - \mu}{\sigma/\sqrt{n}}\)
Proporsi Sampel (\(\hat{p}\)) \(\mu_{\hat{p}} = \pi\) \(SE_{\hat{p}} = \sqrt{\frac{\pi(1-\pi)}{n}}\) \(Z = \frac{\hat{p} - \pi}{\sqrt{\pi(1-\pi)/n}}\)

5.1.3 Kondisi Penerapan Normalitas

Kondisi Statistik yang Diperiksa Aturan
Teorema Limit Pusat (CLT) Rata-Rata Sampel (\(\bar{X}\)) Ukuran sampel \(n \geq 30\) (aturan umum).
Aproksimasi Normal Proporsi Sampel (\(\hat{p}\)) \(n\pi \geq 10\) DAN \(n(1-\pi) \geq 10\).

6 References

https://www.youtube.com/embed/ZyUzRVa6hCM

https://www.youtube.com/embed/7S7j75d3GM4

https://www.youtube.com/embed/c0mFEL_SWzE

https://www.youtube.com/embed/q2e4mK0FTbw

https://www.youtube.com/embed/ivd8wEHnMCg

Noeryanti. (2021). Pengantar Teori Probabilitas. Perpus.pdf.

Wibowo, A. (2022). Basic Statistika.Pdf. Yayasan Prima Agus Teknik.

LS0tDQp0aXRsZTogIiINCmF1dGhvcjogIklnbmFzaXVzIFJhYmkgQmxvbG9uZyAoNTIyNTAwNzMpIg0KZGF0ZTogImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJWQgJUIgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOg0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlIA0KICAgIGNzczogIi4vc3RhdGlzdGlrYS5jc3MiDQogICAgdGh1bWJuYWlsczogdHJ1ZSAgICANCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KLS0tDQoNCjxoMSBjbGFzcz0iaGVhZGVyLXRpdGxlIj5Qcm9iYWJpbGl0eSBEaXN0cmlidXRpb24gfiBBc3NpZ25tZW50IHdlZWsgMTE8L2gxPg0KICANCiAgPGRpdiBjbGFzcz0icHJvZmlsZS1jYXJkIj4NCiAgPGRpdiBjbGFzcz0icHJvZmlsZS1pbWFnZSI+DQogIDxpbWcgaWQ9IkZvdG8iIHNyYz0iaWRoLmpwZWciIGFsdD0iTG9nbyIgc3R5bGU9IndpZHRoOjIwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyI+DQogIDwvZGl2Pg0KICANCiAgPGRpdiBjbGFzcz0icHJvZmlsZS1pbmZvIj4NCiAgPGgyPklnbmFzaXVzIFJhYmkgQmxvbG9uZzwvaDI+DQogIDxwPlN0dWRlbnQgTWFqb3JpbmcgaW4gRGF0YSBTY2llbmNlIGF0IElUU0I8L3A+DQogIA0KICA8ZGl2IGNsYXNzPSJiYWRnZXMiPg0KICA8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2UtYmx1ZSI+UiBQcm9ncmFtbWluZzwvc3Bhbj4NCiAgPHNwYW4gY2xhc3M9ImJhZGdlIGJhZGdlLXJlZCI+RGF0YSBTY2llbmNlPC9zcGFuPg0KICA8c3BhbiBjbGFzcz0iYmFkZ2UgYmFkZ2UtZ3JlZW4iPlN0YXRpc3RpY3M8L3NwYW4+DQogIDwvZGl2Pg0KICA8L2Rpdj4NCiAgPC9kaXY+DQoNCiMgSW50cm9kdWN0aW9uDQoNCiMjIERlZmluaXNpDQpEaXN0cmlidXNpIHByb2JhYmlsaXRhcyBhZGFsYWgga29uc2VwIGZ1bmRhbWVudGFsIGRhbGFtIHN0YXRpc3Rpa2EgZGFuIHRlb3JpIHByb2JhYmlsaXRhcy4gSW5pIGFkYWxhaCBkZXNrcmlwc2kgbWF0ZW1hdGlrYSB5YW5nIG1lbWJlcmlrYW4gcHJvYmFiaWxpdGFzIHRlcmphZGlueWEgc2V0aWFwIGhhc2lsIHlhbmcgbXVuZ2tpbiBkYXJpIHN1YXR1IGVrc3BlcmltZW4gYWNhaw0KU2VjYXJhIHNlZGVyaGFuYSwgcGFkYSBrZXNlbXBhdGFuIGthbGkgaW5pIGtpdGEgYWthbiBtZWxpaGF0IHRlbnRhbmc6DQoNCjEuIFBERiAoUHJvYmFiaWxpdHkgRGVuc2l0eSBGdW5jdGlvbikgKEZ1bmdzaSBLZXBhZGF0YW4gUHJvYmFiaWxpdGFzKQ0KSW50aTogTWVudW5qdWtrYW4ga2VwYWRhdGFuIChkZW5zaXR5KSBhdGF1IGtlbXVuZ2tpbmFuIHJlbGF0aWYgc3VhdHUgbmlsYWkgbXVuY3VsIHVudHVrIHZhcmlhYmVsIGtvbnRpbnUuDQoNCkluZ2F0OiBOaWxhaSBQREYgaXR1IHNlbmRpcmkgYnVrYW4gcHJvYmFiaWxpdGFzOyBwcm9iYWJpbGl0YXMgYWRhbGFoIGx1YXMgZGkgYmF3YWgga3VydmFueWEuDQoNCjIuIFNhbXBsZSBQcm9wb3J0aW9uIChQcm9wb3JzaSBTYW1wZWwpDQpJbnRpOiBNZXJ1cGFrYW4gc3RhdGlzdGlrIHNhbXBlbCAkXGhhdHtwfSQgeWFuZyBkaWd1bmFrYW4gdW50dWsgbWVuZ2VzdGltYXNpIHBlcnNlbnRhc2UgKM+AKSBzdWF0dSBrYXJha3RlcmlzdGlrIGRhbGFtIHBvcHVsYXNpLg0KDQpGdW5nc2k6IERpZ3VuYWthbiBzYWF0IGtpdGEgbWVuZ2FuYWxpc2lzIGRhdGEga2F0ZWdvcmlrYWwgKG1pc2FsbnlhLCB5YS90aWRhaywgc3Vrc2VzL2dhZ2FsKS4NCg0KMy4gU2FtcGxpbmcgRGlzdHJpYnV0aW9uIChEaXN0cmlidXNpIFNhbXBsaW5nKQ0KSW50aTogQWRhbGFoIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIGRhcmkgc3VhdHUgc3RhdGlzdGlrIChtaXNhbG55YSwgcmF0YS1yYXRhIGF0YXUgcHJvcG9yc2kpIHlhbmcgZGlwZXJvbGVoIGRhcmkgbWVuZ2FtYmlsIHNlbXVhIHNhbXBlbCB5YW5nIG11bmdraW4gZGFyaSBwb3B1bGFzaS4NCg0KRnVuZ3NpOiBNZW5qYWRpIGplbWJhdGFuIGFudGFyYSBzdGF0aXN0aWsgc2FtcGVsIGRhbiBwYXJhbWV0ZXIgcG9wdWxhc2kuDQoNCjQuIENMVCAoQ2VudHJhbCBMaW1pdCBUaGVvcmVtKSAoVGVvcmVtYSBMaW1pdCBQdXNhdCkNCkludGk6IEF0dXJhbiBlbWFzIHlhbmcgbWVueWF0YWthbiBiYWh3YSBqaWthIHVrdXJhbiBzYW1wZWwgKG4pIGN1a3VwIGJlc2FyICjiiaUzMCksIG1ha2EgRGlzdHJpYnVzaSBTYW1wbGluZyBSYXRhLXJhdGEgU2FtcGVsIGFrYW4gbWVuamFkaSBiZXJiZW50dWsgTm9ybWFsIChsb25jZW5nKSwgdGlkYWsgcGVkdWxpIHNlcGVydGkgYXBhIGJlbnR1ayBwb3B1bGFzaSBhc2FsbnlhLg0KDQogDQojIyBKZW5pcy1qZW5pcyBEaXN0cmlidXNpDQpiZXJkYXNhcmthbiBzaWZhdCBWYXJpYWJlbCBhY2FrbnlhIDoNCiAgICANCiMjIyBEaXN0cmlidXNpIFByb2JhYmlsaXRhcyBEaXNrcml0DQoNCkluaSBiZXJsYWt1IHVudHVrIHZhcmlhYmVsIGFjYWsgeWFuZyBoYW55YSBkYXBhdCBtZW5nYW1iaWwgbmlsYWkgeWFuZyB0ZXJoaXR1bmcgKGJpYXNhbnlhIGJpbGFuZ2FuIGJ1bGF0KSwgc2VwZXJ0aSBqdW1sYWggb3JhbmcsIGp1bWxhaCBjYWNhdCwgYXRhdSBqdW1sYWgga2ViZXJoYXNpbGFuLg0KRnVuZ3NpOiBNZW5nZ3VuYWthbiBGdW5nc2kgTWFzc2EgUHJvYmFiaWxpdGFzIChGTVApLCBQKFg9eCksIHlhbmcgbWVtYmVyaWthbiBwcm9iYWJpbGl0YXMgdW50dWsgc2V0aWFwIG5pbGFpIHNwZXNpZmlrIHguDQogDQogQ29udG9oIFVtdW06IERpc3RyaWJ1c2kgQmlub21pYWwsIFBvaXNzb24sIGRhbiBHZW9tZXRyaWsuDQogICAgDQojIyMgRGlzdHJpYnVzaSBQcm9iYWJpbGl0YXMgS29udGludQ0KDQpJbmkgYmVybGFrdSB1bnR1ayB2YXJpYWJlbCBhY2FrIHlhbmcgZGFwYXQgbWVuZ2FtYmlsIG5pbGFpIGFwYSBwdW4gZGFsYW0gcmVudGFuZyB0ZXJ0ZW50dSAoZGl1a3VyKSxzZXBlcnRpIHRpbmdnaSxiZXJhdCxhdGF1IHdha3R1Lg0KRnVuZ3NpOiBNZW5nZ3VuYWthbiBGdW5nc2kgS2VwYWRhdGFuIFByb2JhYmlsaXRhcyAoRktQKSwgZih4KS4gS2FyZW5hIGFkYSB0YWsgdGVyaGluZ2dhIGJhbnlha255YSBuaWxhaSwgcHJvYmFiaWxpdGFzIHVudHVrIG5pbGFpIHR1bmdnYWwgYWRhbGFoIG5vbC4gU2ViYWxpa255YSwgcHJvYmFiaWxpdGFzIGRpaGl0dW5nIHVudHVrIHN1YXR1IHJlbnRhbmcgKFAoYTxYPGIpKSBzZWJhZ2FpIGFyZWEgZGkgYmF3YWgga3VydmEgRktQLg0KDQogIENvbnRvaCBVbXVtOiBEaXN0cmlidXNpIE5vcm1hbCAoR2F1c3NpYW4pLCBFa3Nwb25lbnNpYWwsIGRhbiBVbmlmb3JtIEtvbnRpbnUuDQogIA0KIyMgUGVudGluZ255YSBkYWxhbSBBbmFsaXNpcyBEYXRhDQpNZW1haGFtaSBkaXN0cmlidXNpIHByb2JhYmlsaXRhcyBzYW5nYXQgcGVudGluZyBrYXJlbmE6DQoNCiAgKiBQZW1vZGVsYW46IERpc3RyaWJ1c2kgbWVtdW5na2lua2FuIHBhcmEgYW5hbGlzIHVudHVrIG1lbW9kZWxrYW4gZGF0YSBkdW5pYSBueWF0YSBkYW4gcHJvc2VzIGFjYWsgKG1pc2FsbnlhLCBtZW1vZGVsa2FuIGp1bWxhaCBwZWxhbmdnYW4geWFuZyB0aWJhIHBlciBqYW0gbWVuZ2d1bmFrYW4gRGlzdHJpYnVzaSBQb2lzc29uKS4NCg0KICAqIEluZmVyZW5zaTogRGlzdHJpYnVzaSBtZW1iZW50dWsgZGFzYXIgdW50dWsgcGVuZ3VqaWFuIGhpcG90ZXNpcyBkYW4gZXN0aW1hc2kgaW50ZXJ2YWwga2VwZXJjYXlhYW4sIHlhbmcgbWVydXBha2FuIHR1bGFuZyBwdW5nZ3VuZyBzdGF0aXN0aWsgaW5mZXJlbnNpYWwuDQoNCiAgKiBQZW5nYW1iaWxhbiBLZXB1dHVzYW46IERlbmdhbiBtZW5nZXRhaHVpIHByb2JhYmlsaXRhcyBoYXNpbCB5YW5nIGJlcmJlZGEsIG9yZ2FuaXNhc2kgZGFwYXQgbWVtYnVhdCBrZXB1dHVzYW4geWFuZyBsZWJpaCB0ZXBhdCBkYW4gbWVuZ2Vsb2xhIHJpc2lrbyAobWlzYWxueWEsIG1lbmdoaXR1bmcgcmlzaWtvIGtlcnVnaWFuIGludmVzdGFzaSkuDQoNCg0KIyBDb250aW51b3VzIFJhbmRvbQ0KDQo8ZGl2IGNsYXNzPSJ2aWRlby1jb250YWluZXIiPg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL1p5VXpSVmE2aENNIikNCmBgYA0KPC9kaXY+DQoNCiMjIFZpZGVvIFN1bW1hcnkNCnwgJEZJVFVSJCB8ICRWQVJJQUJFTCQgJERJU0tSSVQkIHwgJFZBUklBQkVMJCAkS09OVElOVSQgfA0KfCA6LS0tIHwgOi0tLSB8IDotLS0gfA0KfCAqKkRlZmluaXNpKiogfCBWYXJpYWJlbCB5YW5nIG5pbGFpbnlhIGhhbnlhIGRhcGF0IG1lbmdhbWJpbCBoaXR1bmdhbiB0ZXJiYXRhcyAoZmluaXRlKSxkYW4gZGFwYXQgZGkgcGVydGFuZ2d1bmdqYXdhYmthbiwgYmlhc2FueWEgYmlsYW5nYW4gYnVsYXQuIHwgVmFyaWFiZWwgeWFuZyBuaWxhaW55YSBkYXBhdCBtZW5nYW1iaWwgbmlsYWkgbnVtZXJpayBhcGEgcHVuIGRhbGFtIHJlbnRhbmcgYXRhdSBpbnRlcnZhbCB0ZXJ0ZW50dS4gfA0KfCAqKlNpZmF0IE5pbGFpKiogfCBEaXBlcm9sZWggZGVuZ2FuIGNhcmEgZGloaXR1bmcgZGFuIG1hc3VrIGFrYWwuIHxEaXBlcm9sZWggZGVuZ2FuIGNhcmEgZGl1a3VyIGRhbiBkYXBhdCBkaXBlY2FoIG1lbmphZGkgdW5pdCB5YW5nIGxlYmloIGtlY2lsIChtaXNhbG55YSwgZGVzaW1hbCB0YWsgdGVyaGluZ2dhKS4gfA0KfCAqKkNvbnRvaCoqIHwgSnVtbGFoIGFuYWsgZGFsYW0ga2VsdWFyZ2EsTmlsYWkgc2lzd2Egc2FhdCB1amlhbiwgSnVtbGFoIHVhbmcgZGkgUmVrZW5pbmcgQmFuay4gfCBUaW5nZ2kgYmFkYW4sIGJlcmF0IGJhZGFuLCBzdWh1LCBqYXJhayB8DQp8ICoqUGVyaGl0dW5nYW4qKiB8IE1lbmdndW5ha2FuIHNlbXVhIFJ1bXVzIHByb2JhYmlsaXRhcyAgfCBNZW5nZ3VuYWthbiBSdW11cyBLdXJ2YSBLZXJhcGF0YW4uIHwNCnwgKipSZXByZXNlbnRhc2kgVmlzdWFsKiogfCBHcmFmaWsgYmF0YW5nIChiYXIgY2hhcnQpIGRpIG1hbmEgdGluZ2dpIGJhdGFuZyBtZW51bmp1a2thbiBwcm9iYWJpbGl0YXMuIHwgSGlzdG9ncmFtIHlhbmcgdGlkYWsgbWVtaWxpa2kgY2VsYSB1bnR1ayBtZW5jZXJtaW5rYW4ga29udGludWl0YXMuIHwNCg0KDQojIyBWYXJpYWJlbCBBY2FrIChSYW5kb20gVmFyaWFibGUpDQpWYXJpYWJlbCBBY2FrIChYKSBhZGFsYWggZnVuZ3NpIHlhbmcgbWVuZ2h1YnVuZ2thbiBzZXRpYXAgaGFzaWwgKG91dGNvbWUpIGRhcmkgc3VhdHUgZWtzcGVyaW1lbiBhY2FrIGRlbmdhbiBzZWJ1YWggbmlsYWkgbnVtZXJpayAoYW5na2EpLlNlZGVyaGFuYW55YSwgVmFyaWFiZWwgQWNhayBhZGFsYWggY2FyYSBraXRhIG1lbmd1YmFoIGhhc2lsIGtlamFkaWFuIHlhbmcgdGlkYWsgcGFzdGkgKHNlcGVydGkgbWVsZW1wYXIga29pbikgbWVuamFkaSBhbmdrYSB5YW5nIGRhcGF0IGRpYW5hbGlzaXMgc2VjYXJhIG1hdGVtYXRpcy4NCg0KICAqIElhIGFkYWxhaCBKZW1iYXRhbjogVmFyaWFiZWwgYWNhayBhZGFsYWggamVtYmF0YW4geWFuZyBtZW5naHVidW5na2FuIHJ1YW5nIHNhbXBlbCAoaGFzaWwga2VqYWRpYW4pIGRlbmdhbiBiaWxhbmdhbiByaWlsLg0KDQogICogTmlsYWkgVGlkYWsgUGFzdGk6IE5pbGFpIHlhbmcgZGlhbWJpbG55YSBiZXJnYW50dW5nIHBhZGEgaGFzaWwgYWNhayBkYXJpIGVrc3BlcmltZW4uDQoNCkNvbnRvaDogRGFsYW0gcGVsZW1wYXJhbiBkdWEga29pbiwgcnVhbmcgc2FtcGVsbnlhIGFkYWxhaCB7SEgsIEhULCBUSCwgVFR9LiBWYXJpYWJlbCBhY2FrIFggYmlzYSBkaWRlZmluaXNpa2FuIHNlYmFnYWkganVtbGFoIGtlcGFsYSAoSGVhZHMpLiBOaWxhaSBYIHlhbmcgbXVuZ2tpbiBhZGFsYWggMCwgMSwgZGFuIDIuDQoNCg0KIyMgUHJvYmFiaWxpdGFzIERlbnNpdHkgRnVuY3QNCkZ1bmdzaSBLZXBhZGF0YW4gUHJvYmFiaWxpdGFzIChmKHgpKSBhZGFsYWggZnVuZ3NpIHlhbmcgbWVuZGVmaW5pc2lrYW4gZGlzdHJpYnVzaSBwcm9iYWJpbGl0YXMgdW50dWsgdmFyaWFiZWwgYWNhayBrb250aW51IChtaXNhbG55YSwgdGluZ2dpIGJhZGFuLCB3YWt0dSwgc3VodSkuDQpQZW5qZWxhc2FuOg0KDQpCdWthbiBQcm9iYWJpbGl0YXMgTGFuZ3N1bmc6IE5pbGFpIGYoeCkgaXR1IHNlbmRpcmkgYnVrYW4gcHJvYmFiaWxpdGFzLiBJbmkgYWRhbGFoIGtlcGFkYXRhbiBwcm9iYWJpbGl0YXMuIGYoeCkgYmlzYSBzYWphIGxlYmloIGJlc2FyIGRhcmkgMSAod2FsYXVwdW4gcHJvYmFiaWxpdGFzIHRpZGFrIGJpc2EpLg0KDQpBcmVhID0gUHJvYmFiaWxpdGFzOiBQcm9iYWJpbGl0YXMgYmFod2EgdmFyaWFiZWwgYWNhayBYIGphdHVoIGRhbGFtIHJlbnRhbmcgdGVydGVudHUgZGl3YWtpbGkgb2xlaCBhcmVhIGRpIGJhd2FoIGt1cnZhIGYoeCkgdW50dWsgcmVudGFuZyB0ZXJzZWJ1dC4NCg0KVG90YWwgQXJlYSA9IDE6IEx1YXMgdG90YWwgZGkgYmF3YWggc2VsdXJ1aCBrdXJ2YSBQREYgaGFydXMgc2VsYWx1IHNhbWEgZGVuZ2FuIDEsIGthcmVuYSBwcm9iYWJpbGl0YXMgdG90YWwgdW50dWsgc2VtdWEga2VtdW5na2luYW4gaGFzaWwgYWRhbGFoIDEwMCUuDQoNClN5YXJhdCBQREY6DQpBZ2FyIHN1YXR1IGZ1bmdzaSBmKHgpIGRhcGF0IG1lbmphZGkgUERGLCBoYXJ1cyBtZW1lbnVoaSBkdWEgc3lhcmF0IGJlcmlrdXQ6DQoNCiAqIE5vbi1OZWdhdGlmOiBOaWxhaSBmdW5nc2kgaGFydXMgc2VsYWx1IG5vbCBhdGF1IHBvc2l0aWYgdW50dWsgc2VtdWEgbmlsYWkgeC4NCiAgZih4KeKJpTB1bnR1ayBzZW11YSB4DQoNCiAqIFRvdGFsIEFyZWEgU2FtYSBkZW5nYW4gU2F0dTogVG90YWwgYXJlYSBkaSBiYXdhaCBrdXJ2YSBmKHgpIGRpIHNlbHVydWggZG9tYWluIGhhcnVzIHNhbWEgZGVuZ2FuIDEsIGthcmVuYSBwcm9iYWJpbGl0YXMgdG90YWwgZGFyaSBzZW11YSBrZW11bmdraW5hbiBoYXNpbCBhZGFsYWggMTAwJS4NCiAgICDiiKviiJLiiJ7iiJ5mKHgpZHg9MQ0K4oir4oiS4oie4oie4oCLZih4KWR4PTENCiAgDQoNCiMjIFByb2JhYmlsaXR5IGFuIG9uIEludGVydmFsDQpBdGF1IGJpYXNhIGRpc2VidXQgUHJvYmFiaWxpdGFzIHBhZGEgSW50ZXJ2YWwsDQpLYXJlbmEgdmFyaWFiZWwgYWNhayBrb250aW51IG1lbWlsaWtpIGp1bWxhaCBuaWxhaSB5YW5nIHRhayB0ZXJoaW5nZ2EsIHByb2JhYmlsaXRhcyBiYWh3YSBYIGFrYW4gbWVuZ2FtYmlsIG5pbGFpIHR1bmdnYWwgdGVwYXQgKG1pc2FsbnlhIFAoWD01KSkgc2VsYWx1IG5vbC4gS2l0YSBoYW55YSBkYXBhdCBtZW5naGl0dW5nIHByb2JhYmlsaXRhcyBiYWh3YSBYIGFrYW4gamF0dWggZGFsYW0gc3VhdHUgaW50ZXJ2YWwgW2EsYl0uDQpQZW5nZXJqYWFuOg0KDQpQcm9iYWJpbGl0YXMgWCBiZXJhZGEgZGkgYW50YXJhIGEgZGFuIGIgZGlkYXBhdGthbiBkZW5nYW4gbWVuZ2ludGVncmFzaWthbiBQREYgKGYoeCkpIGRhcmkgYSBzYW1wYWkgYi4NCg0KfCBNZXRvZGUgfCBQcm9iYWJpbGl0YXMgeWFuZyBEaWhpdHVuZyB8IERlc2tyaXBzaSB8IFJ1bXVzIE1hdGVtYXRpcyB8DQp8IDotLS0gfCA6LS0tOiB8IDotLS0gfCA6LS0tOiB8DQp8ICoqTWVuZ2d1bmFrYW4gUERGKiogfCAkUChhIFxsZXEgWCBcbGVxIGIpJCB8IEx1YXMgZGkgYmF3YWgga3VydmEgUERGIGFudGFyYSBiYXRhcyAkYSQgZGFuICRiJC4gfCAkXGludF97YX1ee2J9IGYoeCkgZHgkIHwNCnwgKipNZW5nZ3VuYWthbiBDREYqKiB8ICRQKGEgXGxlcSBYIFxsZXEgYikkIHwgUGVyYmVkYWFuIGFudGFyYSBwcm9iYWJpbGl0YXMga3VtdWxhdGlmIHBhZGEgJGIkIGRhbiAkYSQuIHwgJEYoYikgLSBGKGEpJCB8DQp8ICoqUHJvYmFiaWxpdGFzIHBhZGEgVGl0aWsgVHVuZ2dhbCoqIHwgJFAoWCA9IHgpJCB8IFByb2JhYmlsaXRhcyBiYWh3YSB2YXJpYWJlbCBrb250aW51IG1lbmdhbWJpbCBuaWxhaSB0ZXBhdCAkeCQuIHwgJDAkIHwNCg0KIyMgQ3VtdWxhdGl2ZSBEaXN0cmlidXRpb24gRnVuY3QNCkZ1bmdzaSBEaXN0cmlidXNpIEt1bXVsYXRpZiAoRih4KSkgbWVtYmVyaWthbiBwcm9iYWJpbGl0YXMgYmFod2EgdmFyaWFiZWwgYWNhayBYIGFrYW4gbWVuZ2FtYmlsIG5pbGFpIGt1cmFuZyBkYXJpIGF0YXUgc2FtYSBkZW5nYW4gbmlsYWkgdGVydGVudHUgeC4NClBlbmplbGFzYW46DQoNCiAgKiBBa3VtdWxhc2kgUHJvYmFiaWxpdGFzOiBDREYgYWRhbGFoIGFrdW11bGFzaSAocGVuanVtbGFoYW4pIHByb2JhYmlsaXRhcyBkYXJpIOKIkuKIniBoaW5nZ2EgdGl0aWsgeC4NCg0KICAqIEh1YnVuZ2FuIGRlbmdhbiBQREY6IENERiBhZGFsYWggaW50ZWdyYWwgZGFyaSBQREYuDQoNCiAgKiBOaWxhaTogTmlsYWkgRih4KSBzZWxhbHUgYmVya2lzYXIgYW50YXJhIDAgZGFuIDEuDQogIA0KIyMjIEZ1bmdzaSBEYXNhciBEaXN0cmlidXNpIEtvbnRpbnUNCg0KfCBLb25zZXAgfCBOb3Rhc2kgfCBEZXNrcmlwc2kgU2luZ2thdCB8IFJ1bXVzIE1hdGVtYXRpcyB8DQp8IDotLS0gfCA6LS0tOiB8IDotLS0gfCA6LS0tOiB8DQp8ICoqRnVuZ3NpIEtlcGFkYXRhbiBQcm9iYWJpbGl0YXMgKFBERikqKiB8ICRmKHgpJCB8IEtlbXVuZ2tpbmFuIHJlbGF0aWYgKGJ1a2FuIHByb2JhYmlsaXRhcyk7IEx1YXMgdG90YWwgZGkgYmF3YWgga3VydmEgPSAxLiB8ICRmKHgpIFxnZXEgMCQgfA0KfCAqKkZ1bmdzaSBEaXN0cmlidXNpIEt1bXVsYXRpZiAoQ0RGKSoqIHwgJEYoeCkkIHwgUHJvYmFiaWxpdGFzIGJhaHdhICRYJCBrdXJhbmcgZGFyaSBhdGF1IHNhbWEgZGVuZ2FuICR4JCwgJFAoWCBcbGVxIHgpJC4gfCAkRih4KSA9IFxpbnRfey1caW5mdHl9Xnt4fSBmKHQpIGR0JCB8DQogIA0KDQojIFNhbXBsaW5nIERpc3RyaWJ1dGlvbiANCjxkaXYgY2xhc3M9InZpZGVvLWNvbnRhaW5lciI+DQpgYGB7ciwgZWNobz1GQUxTRX0NCmtuaXRyOjppbmNsdWRlX3VybCgiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvN1M3ajc1ZDNHTTQiKQ0KYGBgDQo8L2Rpdj4NCg0KDQojIyBWaWRlbyBTdW1tYXJ5DQogKiBEaXN0cmlidXNpIFBvcHVsYXNpICA6IERpc3RyaWJ1c2kgeWFuZyBkaWJ1YXQgdW50dWsgbWVuZ3VrdXIgc2V0aWFwIGluZGl2aWR1IGRhbGFtIHBvcHVsYXNpIA0KICogRGlzdHJpYnVzaSBTYW1wZWwgICAgOiBEaXN0cmlidXNpIHlhbmcgZGlidWF0IHVudHVrIG1lbmd1a3VyIHNldGlhcCBpbmRpdmlkdSBkYWxhbSBTYW1wZWwNCiAqIERpc3RyaWJ1c2kgU2FtcGxpbmcgIDogRGlzdHJpYnVzaSBzdGF0aXN0aWthIHlhbmcgZGlidWF0IGRhcmkgYmViZXJhcGEgc2FtcGVsIHNlZGVyaGFuYSB5YW5nIGRpYW1iaWwgZGFyaSBwb3B1bGFzaSB0ZXJ0ZW50dSBzZWNhcmEgYmVydWxhbmcgDQogDQogPHNwYW4gY2xhc3M9InNlY3Rpb24taGVhZGVyIj5WaXN1YWxpc2FzaTogRGlzdHJpYnVzaSBTYW1wbGluZzwvc3Bhbj4NCg0KOjo6IHsuZmlndXJlLWNvbnRhaW5lcn0NCmBgYHtyIENMVCwgZmlnLndpZHRoPTEwLCBmaWcuaGVpZ2h0PTgsIGRwaT0xNTAsIG91dC53aWR0aD0nODAlJywgZWNobz1GQUxTRX0NCiMgT3BzaSAnZHBpPTE1MCcgbWVuaW5na2F0a2FuIHJlc29sdXNpLg0KIyBPcHNpICdvdXQud2lkdGg9JzgwJScnIG1lbWFzdGlrYW4gZ2FtYmFyIG1lbmdpc2kgODAlIGxlYmFyIGhhbGFtYW4gSFRNTC4NCg0KIyAxLiBNZW5nYXR1ciBzZWVkIGFnYXIgaGFzaWwgZGFwYXQgZGlyZXByb2R1a3NpDQpzZXQuc2VlZCg0MikNCg0KIyAyLiBNZW5kZWZpbmlzaWthbiBQb3B1bGFzaSBNaXJpbmcgKERpc3RyaWJ1c2kgRWtzcG9uZW5zaWFsKQ0KcG9wdWxhc2lfbWlyaW5nIDwtIHJleHAoMTAwMDAsIHJhdGUgPSAwLjUpDQoNCiMgMy4gRGlzdHJpYnVzaSBSYXRhLXJhdGEgU2FtcGVsIChuPTMwKQ0KI8KgIMKgTWVuZ2FtYmlsIDEwMDAgc2FtcGVsLCBtYXNpbmctbWFzaW5nIGJlcnVrdXJhbiBuPTMwLCBsYWx1IG1lbmdoaXR1bmcgcmF0YS1yYXRhbnlhDQpzYW1wZWxfYmVzYXIgPC0gcmVwbGljYXRlKDEwMDAsIG1lYW4oc2FtcGxlKHBvcHVsYXNpX21pcmluZywgc2l6ZSA9IDMwLCByZXBsYWNlID0gVFJVRSkpKQ0KDQojIDQuIFBsb3QgSGlzdG9ncmFtIGRhcmkgUmF0YS1yYXRhIFNhbXBlbA0KcGFyKG1mcm93ID0gYygxLCAxKSkgIyBSZXNldCBwbG90IGxheW91dA0KaGlzdChzYW1wZWxfYmVzYXIsDQogICAgbWFpbiA9ICJEaXN0cmlidXNpIFNhbXBsaW5nIFJhdGEtcmF0YSAobj0zMCkgZGFyaSBQb3B1bGFzaSBNaXJpbmciLA0KICAgIHhsYWIgPSAiUmF0YS1yYXRhIFNhbXBlbCIsDQogICAgeWxhYiA9ICJLZXBhZGF0YW4iLA0KICAgIGNvbCA9ICIjYTJkMmZmIiwNCiAgICBib3JkZXIgPSAid2hpdGUiLA0KICAgIGZyZXEgPSBGQUxTRSwgDQogICAgICMgUGFyYW1ldGVyIGluaSBtZW1wZXJiZXNhciB0ZWtzIGRpIGRhbGFtIHBsb3QNCiAgICAgY2V4Lm1haW4gPSAxLjYsIA0KICAgICBjZXgubGFiID0gMS4zLCANCiAgICAgY2V4LmF4aXMgPSAxLjIpIA0KDQojIDUuIE1lbmFtYmFoa2FuIGt1cnZhIE5vcm1hbCBkaSBhdGFzIGhpc3RvZ3JhbQ0KY3VydmUoZG5vcm0oeCwgbWVhbj1tZWFuKHNhbXBlbF9iZXNhciksIHNkPXNkKHNhbXBlbF9iZXNhcikpLA0KICAgICBhZGQgPSBUUlVFLCBjb2wgPSAicmVkIiwgbHdkID0gMykgIyBsd2Q9MyBtZW1idWF0IGdhcmlzIGt1cnZhIGxlYmloIHRlYmFsDQoNCmBgYA0KIyBDZW50cmFsIExpbWl0IFRoZW9yZW0NCjxkaXYgY2xhc3M9InZpZGVvLWNvbnRhaW5lciI+DQpgYGB7ciwgZWNobz1GQUxTRX0NCmtuaXRyOjppbmNsdWRlX3VybCgiaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvaXZkOHdFSG5NQ2ciKQ0KYGBgDQo8L2Rpdj4NCg0KIyMgVmlkZW8gU3VtbWFyeQ0KDQojIyMgRGVmaW5pc2kNCkNlbnRyYWwgTGltaXQgVGhlb3JlbSBiZXJidW55aTogSmlrYSBhbmRhIG1lbmdhbWJpbCBzYW1wZWwgeWFuZyBjdWt1cCBiZXNhciBkYW4gYWNhayBkYXJpIHBvcHVsYXNpIGFwYXB1biwgZGlzdHJpYnVzaSByYXRhLXJhdGEgc2FtcGVsIHRlcnNlYnV0IGFrYW4gYmVyYmVudHVrIG5vcm1hbCB0ZXJsZXBhcyBkYXJpIGJlbnR1ayBhc2xpIHBvcHVsYXNpIGRpc3RyaWJ1c2kuDQphdGF1IGRlbmdhbiBrYXRhIGxhaW4gOiBKaWthIHVrdXJhbiBzYW1wZWwgKG4pIGN1a3VwIGJlc2FyICh1bXVtbnlhIG7iiaUzMCksIG1ha2EgRGlzdHJpYnVzaSBTYW1wbGluZyBSYXRhLXJhdGEgU2FtcGVsIChYy4kpIGFrYW4gbWVuZGVrYXRpIERpc3RyaWJ1c2kgTm9ybWFsLkhhc2lsIGluaSBiZXJsYWt1IHRlcmxlcGFzIGRhcmkgYmVudHVrIGRpc3RyaWJ1c2kgcG9wdWxhc2kgYXNhbG55YSAoYmlzYSBtaXJpbmcgKHNrZXdlZCksIHNlcmFnYW0gKHVuaWZvcm0pLCBhdGF1IGJlbnR1ayBhcGEgcHVuKS4NClRlb3JpIGluaSBiZXJndW5hIHVudHVrIG1lbmdhbmFsaXNpcyBkYXRhIHlhbmcgYmVzYXIgZGFuIG1lbXByZWRpa3NpIGJlbnR1ayBkaXN0cmlidXNpIHNhbXBsaW5nIGJlcmRhc2Fya2FuIHVrdXJhbiBzYW1wZWwNCg0KIyMjIE1lbmdhcGEgQ0xUIFBlbnRpbmc/DQpDTFQgc2FuZ2F0IHBlbnRpbmcgZGFsYW0gc3RhdGlzdGlrYSBpbmZlcmVuc2lhbCBrYXJlbmEgbWVtdW5na2lua2FuIGtpdGEgdW50dWsgbWVuZ2d1bmFrYW4gc2lmYXQtc2lmYXQgZGlzdHJpYnVzaSBub3JtYWwgdW50dWsgbWVsYWt1a2FuIHBlbmd1amlhbiBoaXBvdGVzaXMgZGFuIG1lbWJhbmd1biBpbnRlcnZhbCBrZXBlcmNheWFhbiwgYmFoa2FuIGtldGlrYSBraXRhIHRpZGFrIHRhaHUgKGF0YXUgdGFodSBiYWh3YSkgZGlzdHJpYnVzaSBwb3B1bGFzaSBhc2xpbnlhIHRpZGFrIG5vcm1hbC4NCg0KIyMjIEtvbmRpc2kgZGFuIFVrdXJhbiBTYW1wZWwNCg0KfCAkVWt1cmFuIFNhbXBlbCQgKCRuJCkgfCAkUGVuamVsYXNhbiQgfA0KfCA6LS0tIHwgOi0tLSB8DQp8ICoqJG4gXGdlIDMwJCoqIHwgRGlzdHJpYnVzaSBzYW1wZWwgYWthbiBtZW5kZWthdGkgbm9ybWFsIChzZXN1YWkgVGVvcmVtYSBMaW1pdCBQdXNhdCAtIENMVCksIHRlcmxlcGFzIGRhcmkgYmVudHVrIGRpc3RyaWJ1c2kgcG9wdWxhc2kgYXNhbG55YS4gfA0KfCAqKiRuIDwgMzAkKiogfCBKaWthIHBvcHVsYXNpIGFzYWxueWEgc3VkYWggYmVyZGlzdHJpYnVzaSBub3JtYWwsIG1ha2EgZGlzdHJpYnVzaSBzYW1wbGluZ255YSBqdWdhIGFrYW4gbm9ybWFsLiB8DQp8ICoqJG4gPCAzMCQqKiB8IEppa2EgcG9wdWxhc2kgYXNhbG55YSB0aWRhayBkaWtldGFodWkgZGlzdHJpYnVzaW55YSBhdGF1IHRpZGFrIG5vcm1hbCwgbWFrYSBDTFQgdGlkYWsgZGFwYXQgZGl0ZXJhcGthbiBkZW5nYW4ga2V5YWtpbmFuIHlhbmcgc2FtYS4gSGFsIGluaSBiZXJhcnRpIHRlcmRhcGF0IGxlYmloIGJhbnlhayB2YXJpYWJpbGl0YXMsIGt1cmFuZyBwcmVzaXNpLCBkYW4ga3VyYW5nIGtlYW5kYWxhbiBkYWxhbSBtZW5nYXN1bXNpa2FuIGRpc3RyaWJ1c2kgbm9ybWFsLiB8DQoNCiMjIyBSdW11cyANCnwgS29tcG9uZW4gUnVtdXMgfCBWYXJpYWJlbCB8IFBlbmplbGFzYW4gfA0KfCA6LS0tIHwgOi0tLSB8IDotLS0gfA0KfCAqKlJ1bXVzIFNrb3IgWioqIHwgJCRaID0gXGZyYWN7XGJhcntYfSAtIFxtdX17XHNpZ21hL1xzcXJ0e259fSQkIHwgTWVuZ3VrdXIgYmVyYXBhIGJhbnlhayBHYWxhdCBCYWt1IChTdGFuZGFyZCBFcnJvcikgcmF0YS1yYXRhIHNhbXBlbCAoJFxiYXJ7WH0kKSBiZXJhZGEgZGkgYXRhcyBhdGF1IGRpIGJhd2FoIHJhdGEtcmF0YSBwb3B1bGFzaSAoJFxtdSQpLiB8DQp8ICoqUmF0YS1yYXRhIFNhbXBlbCoqIHwgJFxiYXJ7WH0kIHwgU3RhdGlzdGlrIHlhbmcgZGloaXR1bmcgZGFyaSBzYW1wZWwgZGFuIHNlZGFuZyBkaXVqaS4gfA0KfCAqKlJhdGEtcmF0YSBQb3B1bGFzaSoqIHwgJFxtdSQgfCBQYXJhbWV0ZXIgcG9wdWxhc2kgKGF0YXUgbmlsYWkgaGlwb3Rlc2lzKSB5YW5nIG1lcnVwYWthbiByYXRhLXJhdGEgZGFyaSBEaXN0cmlidXNpIFNhbXBsaW5nICgkXG11X3tcYmFye1h9fSQpLiB8DQp8ICoqU2ltcGFuZ2FuIEJha3UgUG9wdWxhc2kqKiB8ICRcc2lnbWEkIHwgU2ltcGFuZ2FuIGJha3UgZGFyaSBwb3B1bGFzaSBhc2FsLiB8DQp8ICoqVWt1cmFuIFNhbXBlbCoqIHwgJG4kIHwgSnVtbGFoIG9ic2VydmFzaSBkYWxhbSBzYW1wZWwuIHwNCnwgKipHYWxhdCBCYWt1KiogfCAkXHNpZ21hL1xzcXJ0e259JCB8IFNpbXBhbmdhbiBiYWt1IGRhcmkgRGlzdHJpYnVzaSBTYW1wbGluZyBSYXRhLVJhdGEgKCRTRV97XGJhcntYfX0kKS4gTWVuZ3VrdXIgdmFyaWFiaWxpdGFzIHJhdGEtcmF0YSBzYW1wZWwuIHwNCg0KDQojIFNhbXBsZSBQcm9wb3J0aW9uDQo8ZGl2IGNsYXNzPSJ2aWRlby1jb250YWluZXIiPg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV91cmwoImh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkL3EyZTRtSzBGVGJ3IikNCmBgYA0KPC9kaXY+DQoNCiMjIFZpZGVvIFN1bW1hcnkNCg0KU2FtcGxlIFByb3BvcnRpb24gJFxoYXR7cH0kIChkaWJhY2EgcC1oYXQpLCBhZGFsYWggZnJha3NpIGhhc2lsIHlhbmcgbWVuZ3VudHVuZ2thbiBkYWxhbSBrYWl0YW55YSBkZW5nYW4ga2VzZWx1cnVoYW4gYXRhdSBiYWdpYW4gZGFyaSBzYW1wZWwgeWFuZyBtZW1pbGlraSBrYXJha3RlcmlzdGlrIGF0YXUgc2lmYXQgdGVydGVudHUuIEluaSBkaWd1bmFrYW4gc2ViYWdhaSBwZW5kdWdhIChlc3RpbWF0b3IpIHRlcmJhaWsgZGFyaSBwcm9wb3JzaSBwb3B1bGFzaSBzZWJlbmFybnlhIChwb3B1bGF0aW9uIHByb3BvcnRpb24pLCB5YW5nIGRpbGFtYmFuZ2thbiBkZW5nYW4gcC4NClByb3BvcnNpIHNhbXBlbCBwYWxpbmcgc2VyaW5nIGRpZ3VuYWthbiBrZXRpa2EgYmVyaGFkYXBhbiBkZW5nYW4gZGF0YSBrYXRlZ29yaWthbCAobWlzYWxueWEsIHlhL3RpZGFrLCBzdWtzZXMvZ2FnYWwsIHNldHVqdS90aWRhayBzZXR1anUpIHVudHVrIG1lbmVudHVrYW4gcGVyc2VudGFzZSBrZWJlcmhhc2lsYW4gYXRhdSBrZWphZGlhbiB0ZXJ0ZW50dSBkYWxhbSBzYW1wZWwuDQpDb250b2g6DQoNCiogSmlrYSBBbmRhIG1lbmdhbWJpbCBzYW1wZWwgMTAgb3JhbmcgZGFuIDIgZGkgYW50YXJhbnlhIG1lbWlsaWtpIGJvbGEgbWF0YSBiZXJ3YXJuYSBoaWphdSwgbWFrYSBwcm9wb3JzaSBzYW1wZWwgeWFuZyBtZW1pbGlraSBib2xhIG1hdGEgaGlqYXUgYWRhbGFoIDIvMTA9MC4yIGF0YXUgMjAlLg0KDQoqIEppa2EgQW5kYSBtZW5nYW1iaWwgc2FtcGVsIDEwMCBvcmFuZyBkYW4gNjAgZGkgYW50YXJhbnlhIG1lbnl1a2FpIGtvcGksIG1ha2EgcHJvcG9yc2kgc2FtcGVsIHlhbmcgbWVueXVrYWkga29waSBhZGFsYWggNjAvMTAwPTAuNjAgYXRhdSA2MCUuDQoNCiMjIyBSdW11cyBQcm9wb3JzaSBTYW1wZWwNCg0KfCBTaW1ib2wgfCBOYW1hIHwgRGVza3JpcHNpIHwNCnwgOi0tLTogfCA6LS0tOiB8IDotLS0gfA0KfCAkXGhhdHtwfSQgfCBQcm9wb3JzaSBTYW1wZWwgKHAtaGF0KSB8ICoqUHJvcG9yc2kqKiBkYXJpIHNhbXBlbCB5YW5nIG1lbWlsaWtpIGthcmFrdGVyaXN0aWsgeWFuZyBkaXRlbGl0aS4gfA0KfCAkeCQgfCBKdW1sYWggS2ViZXJoYXNpbGFuIHwgKipKdW1sYWggb2JzZXJ2YXNpKiogZGFsYW0gc2FtcGVsIHlhbmcgbWVtaWxpa2kga2FyYWt0ZXJpc3RpayB5YW5nIGRpdGVsaXRpLiB8DQp8ICRuJCB8IFVrdXJhbiBTYW1wZWwgfCAqKlVrdXJhbiB0b3RhbCBzYW1wZWwqKiAoanVtbGFoIHRvdGFsIG9ic2VydmFzaSkuIHwNCnwgJFxoYXR7cH0gPSBcZnJhY3t4fXtufSQgfCAqKlJ1bXVzKiogfCBSdW11cyB5YW5nICoqYmVuYXIqKiB1bnR1ayBtZW5naGl0dW5nIFByb3BvcnNpIFNhbXBlbC4gfA0KDQojIyMgRGlzdHJpYnVzaSBTYW1wbGluZyBkYXJpIFByb3BvcnNpIFNhbXBlbA0KDQpWaWRlbyBkaWF0YXMgbWVtYmFoYXMgIkRpc3RyaWJ1c2kgU2FtcGxpbmcgZGFyaSBQcm9wb3JzaSBTYW1wZWwiIChTYW1wbGluZyBEaXN0cmlidXRpb24gb2YgdGhlIFNhbXBsZSBQcm9wb3J0aW9uKS4gRGlzdHJpYnVzaSBpbmkgYWRhbGFoIGRpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIGRhcmkgc2VtdWEgbmlsYWkgcHJvcG9yc2kgc2FtcGVsICRcaGF0e3B9JCB5YW5nIG11bmdraW4geWFuZyBkYXBhdCBkaXBlcm9sZWggZGFyaSBzZW11YSBzYW1wZWwgYmVydWt1cmFuIG4geWFuZyBtdW5na2luIGRhcmkgc3VhdHUgcG9wdWxhc2kuDQoNClBlbnRpbmc6IEppa2EgdWt1cmFuIHNhbXBlbCAobikgY3VrdXAgYmVzYXIgKGJpYXNhbnlhIGppa2EgbnDiiaUxMCBkYW4gbigx4oiScCniiaUxMCksIGRpc3RyaWJ1c2kgc2FtcGxpbmcgZGFyaSAkXGhhdHtQfSQgYWthbiBtZW5kZWthdGkgZGlzdHJpYnVzaSBub3JtYWwuIEluaSBtZW11bmdraW5rYW4ga2l0YSB1bnR1ayBtZWxha3VrYW4gaW5mZXJlbnNpIHN0YXRpc3Rpay4NCg0KDQojIFJldmV3IFNhbXBsaW5nIERpc3RyaWJ1dGlvbg0KPGRpdiBjbGFzcz0idmlkZW8tY29udGFpbmVyIj4NCmBgYHtyLCBlY2hvPUZBTFNFfQ0Ka25pdHI6OmluY2x1ZGVfdXJsKCJodHRwczovL3d3dy55b3V0dWJlLmNvbS9lbWJlZC9jMG1GRUxfU1d6RSIpDQpgYGANCjwvZGl2Pg0KDQojIyBWaWRlbyBzdW1tYXJ5DQoNCiMjIyBLb25zZXAgS3VuY2kgZGFuIERlZmluaXNpDQp8IEtvbnNlcCBLdW5jaSB8IERlZmluaXNpIFNpbmdrYXQgfCBSZWxldmFuc2kgfA0KfCA6LS0tIHwgOi0tLSB8IDotLS0gfA0KfCAqKkRpc3RyaWJ1c2kgU2FtcGxpbmcqKiB8IERpc3RyaWJ1c2kgcHJvYmFiaWxpdGFzIGRhcmkgc3RhdGlzdGlrIHNhbXBlbCAobWlzYWxueWEsICRcYmFye1h9JCBhdGF1ICRcaGF0e3B9JCkgYXRhcyBzZW11YSBzYW1wZWwgeWFuZyBtdW5na2luLiB8IERhc2FyIHVudHVrIFN0YXRpc3Rpa2EgSW5mZXJlbnNpYWwuIHwNCnwgKipUZW9yZW1hIExpbWl0IFB1c2F0IChDTFQpKiogfCBKaWthICRuIFxnZXEgMzAkLCBEaXN0cmlidXNpIFNhbXBsaW5nIFJhdGEtcmF0YSBtZW5kZWthdGkgRGlzdHJpYnVzaSBOb3JtYWwsIHRlcmxlcGFzIGRhcmkgYmVudHVrIHBvcHVsYXNpLiB8IE1lbXVuZ2tpbmthbiBwZW5nZ3VuYWFuIHRhYmVsIFogKE5vcm1hbCkgZGFsYW0gYW5hbGlzaXMuIHwNCnwgKipTdGFuZGFyZCBFcnJvciAoJFNFJCkqKiB8IFNpbXBhbmdhbiBiYWt1IGRhcmkgRGlzdHJpYnVzaSBTYW1wbGluZy4gfCBNZW5ndWt1ciBzZWJlcmFwYSBiZXNhciByYXRhLXJhdGEgc2FtcGVsIGtlbXVuZ2tpbmFuIGJlcmZsdWt0dWFzaSBkYXJpIHJhdGEtcmF0YSBwb3B1bGFzaS4gfA0KfCAqKlZhcmlhYmVsIEFjYWsgS29udGludSoqIHwgRGFwYXQgbWVuZ2FtYmlsIG5pbGFpIGFwYSBwdW4gZGFsYW0gcmVudGFuZyB0ZXJ0ZW50dTsgcHJvYmFiaWxpdGFzIGRpaGl0dW5nIHVudHVrICoqcmVudGFuZyoqLCBidWthbiB0aXRpayBzcGVzaWZpay4gfCBNZW1iZW5hcmthbiBwZW5nZ3VuYWFuIGt1cnZhIGhhbHVzIChQREYpIHNlcGVydGkgRGlzdHJpYnVzaSBOb3JtYWwuIHwNCg0KIyMjIFJ1bXVzIEVzZW5zaWFsKFNrb3IgWiBkYW4gR2FsYXQgQmFrdSkNCnwgU3RhdGlzdGlrIHwgUmF0YS1SYXRhIERpc3RyaWJ1c2kgKCRcbXVfe1x0ZXh0e3N0YXRpc3Rpa319JCkgfCBHYWxhdCBCYWt1ICgkU0UkKSB8IFNrb3IgWiAoU3RhbmRhcmRpc2FzaSkgfA0KfCA6LS0tIHwgOi0tLSB8IDotLS0gfCA6LS0tIHwNCnwgKipSYXRhLVJhdGEgU2FtcGVsICgkXGJhcntYfSQpKiogfCAkXG11X3tcYmFye1h9fSA9IFxtdSQgfCAkU0Vfe1xiYXJ7WH19ID0gXHNpZ21hL1xzcXJ0e259JCB8ICRaID0gXGZyYWN7XGJhcntYfSAtIFxtdX17XHNpZ21hL1xzcXJ0e259fSQgfA0KfCAqKlByb3BvcnNpIFNhbXBlbCAoJFxoYXR7cH0kKSoqIHwgJFxtdV97XGhhdHtwfX0gPSBccGkkIHwgJFNFX3tcaGF0e3B9fSA9IFxzcXJ0e1xmcmFje1xwaSgxLVxwaSl9e259fSQgfCAkWiA9IFxmcmFje1xoYXR7cH0gLSBccGl9e1xzcXJ0e1xwaSgxLVxwaSkvbn19JCB8DQoNCiMjIyBLb25kaXNpIFBlbmVyYXBhbiBOb3JtYWxpdGFzDQp8IEtvbmRpc2kgfCBTdGF0aXN0aWsgeWFuZyBEaXBlcmlrc2EgfCBBdHVyYW4gfA0KfCA6LS0tIHwgOi0tLSB8IDotLS0gfA0KfCAqKlRlb3JlbWEgTGltaXQgUHVzYXQgKENMVCkqKiB8IFJhdGEtUmF0YSBTYW1wZWwgKCRcYmFye1h9JCkgfCBVa3VyYW4gc2FtcGVsICoqJG4gXGdlcSAzMCQqKiAoYXR1cmFuIHVtdW0pLiB8DQp8ICoqQXByb2tzaW1hc2kgTm9ybWFsKiogfCBQcm9wb3JzaSBTYW1wZWwgKCRcaGF0e3B9JCkgfCAkblxwaSBcZ2VxIDEwJCAqKkRBTioqICRuKDEtXHBpKSBcZ2VxIDEwJC4gfA0KDQoNCiMgUmVmZXJlbmNlcw0KaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvWnlVelJWYTZoQ00NCg0KaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvN1M3ajc1ZDNHTTQNCg0KaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvYzBtRkVMX1NXekUNCg0KaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvcTJlNG1LMEZUYncNCg0KaHR0cHM6Ly93d3cueW91dHViZS5jb20vZW1iZWQvaXZkOHdFSG5NQ2cNCg0KTm9lcnlhbnRpLiAoMjAyMSkuIFBlbmdhbnRhciBUZW9yaSBQcm9iYWJpbGl0YXMuIFBlcnB1cy5wZGYuDQoNCldpYm93bywgQS4gKDIwMjIpLiBCYXNpYyBTdGF0aXN0aWthLlBkZi4gWWF5YXNhbiBQcmltYSBBZ3VzIFRla25pay4NCg0KDQoNCg0KDQoNCg==