
Apa itu Sampling?
Sampling adalah proses pemilihan sebagian individu, item, atau
pematana dari populasi yang lebih besar untuk memperkirakan
karakteristik seluruh populasi. Sampling banyak digunakan dalam
penelitian, bisnis, dan kebijakan publik untuk membuat keputusan
berdasarkan data secara efisien.
Sampling merupakan konsep dasar dalam statistik yang digunakan untuk
merepresentasikan keseluruhan populasi dengan mengambil sebagian kecil
data yang disebut sampel. Dalam statistik, sampling digunakan agar tidak
perlu mengumpulkan data dari seluruh populasi, tetapi cukup dari
sebagian kecil yang dapat mewakili populasi secara keseluruhan.
Agar hasil penelitian lebih akurat, ukuran sampel harus cukup besar
untuk mewakili populasi. Selain itu, sampel harus diambil secara acak
dan dapat divalidasi dengan menggunakan beberapa kelompok sampel
berbeda. Contohnya: Sebuah sekolah ingin mengetahui apakah siswa
menyukai susu cokelat saat makan siang. Sekolah tersebut memiliki 1.000
siswa. Jika mereka hanya menanyakan pendapat 10 siswa, hasilnya mungkin
tidak akurat. Lebih baik mengambil sampel dari 100 siswa atau sekitar
10% dari jumlah total siswa, agar hasilnya lebih representatif dan dapat
menggambarkan pendapat mayoritas siswa.
Sampel dalam statistik tidak selalu berupa manusia. Sampel dapat
terdiri dari apa saja yang ingin diteliti lebih dalam. Contoh jenis
sampel lainnya meliputi negara, perusahaan, atau bahkan burung,
tergantung pada objek penelitian. Teknik ini memungkinkan peneliti untuk
menganalisis data dengan lebih efisien tanpa harus meninjau seluruh
populasi atau objek penelitian.
Populasi vs Sampel
Populasi mencakup seluruh individu, benda, atau data yang termasuk
dalam kelompok tertentu. Misalnya, populasi bisa berupa semua warga
negara di suatu negara atau seluruh produk yang dihasilkan oleh
perusahaan. Konsep penting dari populasi adalah bahwa ia mencakup semua
elemen dalam kelompok tersebut, tanpa ada yang terlewat. Sementara itu,
sampel adalah bagian kecil atau subset dari populasi yang lebih besar.
Sampel digunakan untuk merepresentasikan populasi dalam analisis
statistik. Contohnya, jika populasi adalah semua warga negara, sampel
bisa berupa 1.000 orang dari wilayah tertentu. Pada perusahaan pakaian,
sampel bisa berupa setiap celana yang diproduksi pada hari Senin atau
setiap produk keempat yang dihasilkan selama seminggu. Pemilihan sampel
yang tepat sangat penting agar dapat memberikan gambaran yang akurat
tentang populasi.
Berikut adalah tabel perbedaan simbol antara
populasi dan sampel:
| Mean (Rata-rata) |
μ (mu) |
x̄ (x-bar) |
| Proporsi |
p |
p̂ (p-hat) |
| Standar Deviasi |
σ (sigma) |
s |
| Ukuran (Size) |
N |
n |
| Koefisien Korelasi |
ρ (rho) |
r |
Dalam praktiknya, mengumpulkan data dari seluruh populasi sering kali
tidak praktis, terutama jika populasi sangat besar. Oleh karena itu,
statistik memungkinkan kita untuk mengambil data dari sampel dan
menggunakan informasi tersebut untuk menarik kesimpulan tentang populasi
secara keseluruhan. Ini membantu kita membuat keputusan yang efektif
tanpa harus memeriksa seluruh populasi.
Populasi
Populasi (\(N\)) adalah keseluruhan
kelompok individu, objek, atau peristiwa yang ingin diteliti oleh
seorang peneliti. Ini mencakup semua kemungkinan pengamtan yang relvan
dengan penelitian.
Contoh:
Semua penduduk suatu kota saat mempelajari perilaku
pemilih.
Setiap telepon pintar yang diproduksi dari pabrik saat
menganalisis tingkat kerusakan.
Setiap mahasiswa di universitas saat mengukur nilai ujian
rata-rata.
Jenis-Jenis Populasi:
Populasi Terbatas: Populasi dengan jumlah elemen
yang tetap (misalnya, karyawan di suatu perusahaan).
Populasi Tak Terbatas: Populasi dengan jumlah
elemen yang tidak dapat dihitung (misalnya, bakteri dalam cawan
petri).
Populasi Target: Populasi spesifik yang ingin
dipelajari oleh peneliti.
Populasi yang Dapat Diakses: Bagian dari
populasi sasaran yang tersedia untuk penelitian.
Sample
Sample (\(n\)) adalah bagian dari
populasi yang dipilih untuk analisis. Karena mempelajari keseluruhan
populasi sering kali tidak praktis karena biaya, waktu, atau
aksesibilitas, sampel digunakan untuk membuat kesimpulan tentang
populasi.
Contoh:
Survei terhadap 1.000 penduduk suatu kota untuk memperkirakan
opini publik.
Memeriksa 500 telepon pintar yang dipilih secara acak untuk
menilai tingkat kerusakan.
Menganalisis nilai ujian dari 200 siswa yang dipilih secara
acak.
Karakteristik Sampel yang Baik:
Representatif: Secara akurat mencerminkan
populasi.
Acak: Dipilih tanpa bias.
Cukup Besar: Memastikan estimasi yang dapat
diandalkan.
Bias Minimal: Menghindari kesalahan
sistematis.
Perbedaan Utama
Saat melakukan penelitian atau analisis statistik, penting untuk
membedakan antara populasi dan sampel. Populasi mengacu pada seluruh
kelompok yang menjadi perhatian dalam sebuah penelitian, sedangkan
sampel adalah bagian yang lebih kecil yang dipilih dari populasi
tersebut untuk dianalisis. Memahami perbedaannya sangat penting untuk
membuat kesimpulan yang akurat dan memastikan validitas kesimpulan.
Berikut adalah perbedaan utama antara populasi dan sampel:
| Definisi |
Seluruh kelompok yang diminati |
Subset yang dipilih untuk dipelajari |
| Ukuran |
Besar atau tak terbatas |
Porsi lebih kecil dan mudah diatur |
| Notasi |
Menggunakan huruf besar (misalnya, N, μ, σ) |
Menggunakan huruf kecil (misalnya, n, x̄, s) |
| Parameter |
Nilai sebenarnya (misalnya, rata-rata populasi μ, simpangan baku
σ) |
Perkiraan (misalnya, rata-rata sampel x̄, simpangan baku s) |
| Biaya & Waktu |
Tinggi |
Lebih rendah |
| Ketepatan |
Memberikan informasi yang akurat |
Memberikan perkiraan dengan beberapa margin kesalahan |
Mengapa Menggunakan
Sampel?
Dalam penelitian dan pengumpulan data, mempelajari keseluruhan
populasi sering kali tidak praktis atau mustahil. Sebaliknya, peneliti
menggunakan sampel, yang merupakan bagian populasi yang lebih kecil dan
mudah dikelola. Berikut ini adalah alasan utama penggunaan sampel:
Efektivitas Biaya
Pengumpulan data dari seluruh populasi membutuhkan sumber daya
keuangan yang signifikan. Sampel mengurangi biaya yang terkait dengan
pengumpulan, pemrosesan, dan analisis data.
Efisiensi Waktu
Mempelajari keseluruhan populasi memakan banyak waktu Sampel yang
dipilih dengan baik memungkinkan pengumpulan dan analisis data yang
lebih cepat.
Kelayakan
Beberapa populasi terlalu besar atau tidak dapat diakses untuk
diteliti secara menyeluruh. Sampel memungkinkan penelitian dilakukan
ketika pengumpulan data pada seluruh populasi tidak praktis.
Akurasi dan Keandalan
Bila dipilih dengan tepat, sampel dapat memberikan wawasan yang
sangat akurat dan andal. Teknik statistik memastikan bahwa sampel
mewakili seluruh populasi secara efektif.
Mengurangi Kompleksitas Pengelolaan Data
Menangani sejumlah besar data bisa jadi sulit. Sampel menyederhanakan
pengelolaan data sekaligus memberikan kesimpulan yang bermakna.
Pertimbangan Etis
Beberapa penelitian (misalnya, uji coba medis) mungkin mengandung
risiko, sehingga tidak etis untuk diuji pada seluruh populasi. Sampel
memungkinkan eksperimen yang terkontrol dan etis
Menghindari Bias
Sampel
Bias pengambilan sampel terjadi ketika anggota populasi tertentu
secara sistematis dikecualikan atau terwakili secara berlebihan dalam
sampel. Bias adalah kesalahan sistematis (tidak acak) yang mempengaruhi
hasil penelitian ilmiah, sehingga hasilnya tidak akurat. Contoh:
Termometer yang selalu menunjukkan suhu lima derajat lebih tinggi dari
suhu sebenarnya. Setiap pengukuran dengan termometer tersebut akan salah
secara konsisten karena kesalahan ini bersifat sistematis, bukan acak.
Beberapa jenis bias sistematis, yaitu:
Bias Pengukuran (Measurement Bias)
- Bias ini terjadi karena kesalahan dalam cara data dikumpulkan atau
alat pengukur yang digunakan.
- Contoh: Termometer yang diletakkan di bawah sinar matahari langsung
akan memberikan hasil yang lebih tinggi dari suhu sebenarnya. Memegang
termometer dengan tangan juga dapat mempengaruhi pembacaan suhu.
- Solusi: Gunakan metode standar, seperti menempatkan termometer di
dalam kotak pelindung berwarna putih yang dirancang khusus untuk
melindungi dari pengaruh lingkungan.
Bias Seleksi (Selection Bias)
- Terjadi saat sampel yang digunakan dalam penelitian tidak mewakili
populasi target secara keseluruhan, sehingga hasilnya tidak berlaku
secara umum.
- Contoh: Menguji vaksin pada kelompok mahasiswa pria sehat berusia
20-an. Hasilnya tidak akan mencerminkan efektivitas vaksin pada wanita,
orang tua, atau mereka yang memiliki kondisi kesehatan tertentu.
- Solusi: Gunakan metode sampling acak (random sampling) untuk
memastikan sampel lebih beragam dan representatif terhadap populasi
target.
Bias Konfirmasi (Confirmation Bias)
- Bias ini terjadi ketika peneliti secara tidak sadar memilih atau
menafsirkan data yang mendukung hipotesis mereka, sambil mengabaikan
bukti yang berlawanan.
- Contoh: Meneliti pengaruh pewarna makanan terhadap hiperaktivitas
anak-anak. Dalam eksperimen, satu kelompok diberi permen berwarna cerah,
sedangkan kelompok kontrol diberi buah segar. Hasil menunjukkan
anak-anak yang makan permen menjadi hiperaktif. Namun, peneliti
mengabaikan kemungkinan bahwa kandungan gula yang tinggi, bukan pewarna
makanan, yang menyebabkan hiperaktivitas.
- Solusi: Selalu pertimbangkan penjelasan alternatif dan cari bukti
yang bertentangan dengan hipotesis untuk memastikan hasil yang
objektif.
Bias dapat muncul pada berbagai tahap penelitian, mulai dari:Desain
metode penelitian, Pengumpulan data, Interpretasi hasil, dan Penarikan
kesimpulan. Penyebabnya bisa berasal dari instrumen yang digunakan,
metode sampling yang salah, atau dorongan bawah sadar untuk membuktikan
hipotesis benar. Untuk memastikan uji ilmiah yang adil dan hasil yang
akurat, penting untuk: mengidentifikasi dan menghindari berbagai sumber
bias; menggunakan metode yang sesuai dalam desain, pengumpulan data, dan
analisis; mengecek kembali hasil dengan mempertimbangkan penjelasan
alternatif dan bukti yang berlawanan.
Karena adanya bias menghasilkan hasil yang tidak akurat dan tidak
representatif, yang berpotensi mendistorsi kesimpulan dan mengurangi
validitas sebuah studi. Berikut ini beberapa penyebab bias pengambilan
sampel:
| Kurangnya cakupan |
Beberapa kelompok dalam populasi tidak dimasukkan dalam kerangka
sampel. |
Gunakan kerangka sampel yang representatif untuk
memastikan semua kelompok tercakup. |
| Representasi berlebih |
Kelompok tertentu memiliki peluang yang jauh lebih tinggi untuk
dipilih. |
Gunakan pengambilan sampel berstrata untuk menjaga
proporsi yang seimbang. |
| Bias Seleksi Diri |
Peserta secara sukarela memilih untuk mengambil bagian, sehingga
menghasilkan sampel non-acak. |
Gunakan undangan acak dan pertimbangkan
insentif untuk menarik kelompok responden yang lebih
beragam. |
Meminimalkan bias pengambilan sampel sangat penting untuk
menghasilkan temuan penelitian yang valid, andal, dan dapat
digeneralisasi. Dengan memastikan kerangka pengambilan sampel yang
dibangun dengan baik, menerapkan metode pemilihan acak, dan mengurangi
efek pemilihan sendiri, peneliti dapat meningkatkan kualitas dan akurasi
penelitian mereka.
Pengacakan dalam
Pengambilan Sampel
Pengacakan adalah proses yang memastikan setiap anggota populasi
memiliki peluang yang sama untuk dipilih. Hal ini mengurangi bias
pengambilan sampel dan meningkatkan generalisasi temuan penelitian.
Proses data science mempunyai 7 langkah sederhana, yaitu:
Define
Indentify
Design
Implement
Explore
Test
Communicate
Untuk menentukan rancangan penelitian yang perlu dipersiapkan adalah
mengidentifikasi masalah, data yang diperlukan, variabel, eksperimen,
dan model untuk digunakan. Misalnya, ketika mencoba menjawab pertanyaan
“Berapa rata-rata gaji seorang data scientist di Amerika Serikat?”, kita
harus mempertimbangkan banyak variabel seperti lokasi geografis, gender,
ras, dan situasi ekonomi selama pandemi COVID-19.
Dalam penelitian data science, terdapat dua jenis kerangka kerja
empiris: studi eksperimental dan studi observasional. Studi
eksperimental melibatkan pengendalian lingkungan pengumpulan data serta
randomisasi peserta untuk membuat perbandingan dan menemukan hubungan
sebab-akibat. Namun, studi eksperimental seringkali sulit dilakukan
dalam praktik nyata karena banyaknya faktor yang sulit diukur, seperti
budaya perusahaan dan faktor personal. Sebaliknya, studi observasional
mengumpulkan data dari situasi alami tanpa intervensi, misalnya dengan
melakukan survei kepada lulusan data science dan profesional di berbagai
industri. Meskipun hasilnya tidak dapat menunjukkan kausalitas, data ini
tetap berguna untuk memahami tren yang ada.
Pengukuran data merupakan tantangan tersendiri dalam studi
observasional karena biasanya mengandalkan laporan mandiri dari
partisipan. Agar hasil pengukuran valid dan reliabel, kita harus
memastikan bahwa data yang dikumpulkan benar-benar mewakili konsep yang
ingin diukur dan tetap konsisten saat diukur ulang. Misalnya, dalam
pengukuran gaji, kita perlu memastikan apakah yang dimaksud adalah gaji
pokok atau total kompensasi. Selain itu, kita juga harus mewaspadai bias
partisipan, seperti kecenderungan untuk memberikan jawaban yang lebih
baik dari kenyataan (social desirability bias).
Kepercayaan partisipan dalam pengumpulan data juga sangat penting.
Mereka harus tahu tujuan pengumpulan data dan bagaimana data tersebut
akan digunakan. Data demografis seperti gender dan ras sering menjadi
topik sensitif yang berisiko disalahgunakan jika tidak dikelola dengan
benar. Partisipan mungkin memberikan jawaban yang tidak akurat karena
khawatir akan konsekuensi dari data tersebut.
Dalam penelitian, kita jarang dapat mengumpulkan data dari seluruh
populasi. Oleh karena itu, kita harus mengambil sampel yang
representatif agar hasilnya dapat digeneralisasi. Idealnya, sampel
tersebut dipilih secara acak dari seluruh populasi yang relevan. Namun,
proses ini seringkali sulit dilakukan. Contohnya, jika kita hanya
mengumpulkan data dari data scientist di Microsoft, maka hasilnya bisa
tidak representatif karena adanya selection bias. Data scientist dengan
gaji lebih rendah mungkin enggan berpartisipasi, atau partisipan yang
merespons survei mungkin tidak mewakili keseluruhan populasi.
Pengambilan Sampel
Acak Sederhana
Suatu metode di mana setiap elemen dalam populasi memiliki
probabilitas pemilihan yang sama, sehingga menghasilkan sampel yang
benar-benar acak. Berikut cara kerjanya
Contoh: Sebuah perusahaan ingin mensurvei 500 karyawan dari 5.000
karyawan. Setiap karyawan diberi nomor, dan 500 orang dipilih secara
acak menggunakan sistem undian.
Pengambilan Sampel
Sistematis
Metode yang memilih elemen secara berkala dari daftar berurutan.
Berikut cara kerjanya:
Tentukan ukuran sampel (misalnya, memilih 100 orang dari daftar
1.000).
Hitung interval pengambilan sampel: Ukuran Populasi / Ukuran
Sampel (misalnya, 1.000 / 100 = 10).
Pilih titik awal secara acak, lalu pilih setiap orang
ke-10.
Contoh: Seorang peneliti ingin mensurvei setiap pelanggan ke-5 dari
daftar 1.000 pembeli. Jika titik awalnya adalah 3, individu yang dipilih
akan berada di urutan ke-3, ke-8, ke-13, dst
Pengambilan Sampel
Berstrata
Suatu metode yang membagi populasi ke dalam subkelompok (strata)
berdasarkan karakteristik yang sama, kemudian secara acak memilih
sejumlah partisipan yang proporsional dari setiap strata. Berikut cara
kerjanya:
Identifikasi strata yang relevan (misalnya, kelompok usia,
tingkat pendapatan, pendidikan).
Tentukan proporsi setiap strata dalam populasi.
Melakukan pengambilan sampel secara acak dalam setiap
strata.
Contoh: Sebuah universitas ingin mensurvei mahasiswa dari berbagai
tahun akademik. Jika 40% mahasiswa adalah mahasiswa baru, 30% adalah
mahasiswa tingkat dua, 20% adalah mahasiswa tingkat tiga, dan 10% adalah
mahasiswa tingkat empat, maka sampel akan mencerminkan proporsi ini.
Penggunaan metode pengambilan sampel acak seperti SRS, pengambilan
sampel sistematis, dan pengambilan sampel berstrata membantu memastikan
sampel yang adil, tidak bias, dan representatif Hal ini meningkatkan
keandalan dan validitas temuan penelitian, sehingga lebih dapat
digeneralisasikan ke seluruh populasi.
Tantangan dalam
Pengambilan Sampel
Pengambilan sampel merupakan proses penting dalam penelitian, tetapi
proses ini memiliki beberapa tantangan yang dapat memengaruhi akurasi
dan keandalan. Berikut ini adalah ikhtisar tantangan utama pengambilan
sampel beserta penyebabnya dan kemungkinan solusinya.
| Bias Non-Respon |
Peserta tidak mau atau tidak mampu menanggapi. Survei terlalu
panjang atau rumit. Kelompok tertentu cenderung tidak
berpartisipasi. |
Kirim pengingat tindak lanjut. Tawarkan insentif. Sederhanakan
format survei. |
| Kesalahan Kerangka Sampling |
Daftar yang kedaluwarsa atau tidak lengkap. Klasifikasi yang salah.
Peserta yang duplikat atau tidak memenuhi syarat disertakan. |
Selalu perbarui kerangka sampel. Periksa kembali sumber data.
Gunakan sampel berstrata. |
| Ukuran Sampel Tidak Memadai |
Sumber daya terbatas untuk sampel besar. Ukuran sampel salah
perhitungan. Tingkat putus sekolah tinggi dalam studi longitudinal. |
Gunakan metode statistik untuk menentukan ukuran sampel yang tepat.
Perhitungkan kemungkinan adanya dropout. |
| Kendala Biaya dan Waktu |
Biaya tinggi untuk pengumpulan data. Keterlambatan dalam menjangkau
partisipan. Perlunya peralatan atau personel khusus. |
Gunakan metode yang hemat biaya seperti survei online. Otomatisasi
pengumpulan data. Optimalkan sumber daya. |
Mengatasi tantangan ini memastikan bahwa proses pengambilan sampel
lebih andal, efisien, dan mewakili populasi sasaran. Dengan menerapkan
solusi yang efektif, peneliti dapat meminimalkan kesalahan dan
meningkatkan kualitas studi mereka secara keseluruhan
Aplikasi dalam
Industri
Pengambilan sampel memainkan peran penting di berbagai industri, yang
memungkinkan organisasi mengumpulkan wawasan, membuat keputusan yang
tepat, dan mengoptimalkan proses. Berikut ini adalah area utama di mana
pengambilan sampel digunakan secara luas:
| Keuangan |
Menganalisis transaksi keuangan dan tren pasar. |
Menilai risiko, mendeteksi penipuan, dan membuat keputusan
investasi. |
| Kontrol Kualitas |
Memeriksa sebagian produk dalam proses produksi. |
Memastikan kualitas produk dan kepatuhan terhadap standar
industri. |
| Pelayanan Kesehatan |
Mempelajari data pasien dan uji klinis. |
Memperkirakan prevalensi penyakit, efektivitas pengobatan, dan tren
kesehatan masyarakat. |
| Riset Pasar |
Melakukan survei dan kelompok fokus. |
Memahami preferensi, tren, dan perilaku pelanggan. |
Dengan menerapkan teknik pengambilan sampel yang tepat, industri
dapat memperoleh wawasan yang akurat dan andal sekaligus meminimalkan
kesalahan dan bias. Hal ini memastikan pengambilan keputusan yang lebih
baik, penghematan biaya, dan peningkatan efisiensi operasional.
LS0tDQp0aXRsZTogIlR1Z2FzIDEgU2FtcGxpbmcgJiBTdXJ2ZXkgVGVjaG5pcXVlcyINCnN1YnRpdGxlOiAiUHJpbmNpcGxlcyBvZiBTYW1wbGluZyINCmF1dGhvcjogDQogICJJc25haW5pIE51ciBIYXNhbmFoICg1MjI0MDAwNSkiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNzczogInN0eWxlICgxKS5jc3MiDQogICAgcGFyYW1zOg0KICBlY2hvOiBmYWxzZQ0KZWRpdG9yX29wdGlvbnM6IA0KICBtYXJrZG93bjogDQogICAgd3JhcDogNzINCi0tLQ0KDQo8aW1nIGlkPSJJc25hIiBzcmM9IkM6XFVzZXJzXEFTVVNcRGVza3RvcFxTdGF0aXN0aWthIERhc2FyXElzbmEucG5nIiBhbHQ9IkxvZ28iIHN0eWxlPSJ3aWR0aDoyMDBweDsgZGlzcGxheTogYmxvY2s7IG1hcmdpbjogYXV0bzsiPg0KDQojIEFwYSBpdHUgU2FtcGxpbmc/DQoNClNhbXBsaW5nIGFkYWxhaCBwcm9zZXMgcGVtaWxpaGFuIHNlYmFnaWFuIGluZGl2aWR1LCBpdGVtLCBhdGF1IHBlbWF0YW5hIGRhcmkgcG9wdWxhc2kgeWFuZyBsZWJpaCBiZXNhciB1bnR1ayBtZW1wZXJraXJha2FuIGthcmFrdGVyaXN0aWsgc2VsdXJ1aCBwb3B1bGFzaS4gU2FtcGxpbmcgYmFueWFrIGRpZ3VuYWthbiBkYWxhbSBwZW5lbGl0aWFuLCBiaXNuaXMsIGRhbiBrZWJpamFrYW4gcHVibGlrIHVudHVrIG1lbWJ1YXQga2VwdXR1c2FuIGJlcmRhc2Fya2FuIGRhdGEgc2VjYXJhIGVmaXNpZW4uDQoNClNhbXBsaW5nIG1lcnVwYWthbiBrb25zZXAgZGFzYXIgZGFsYW0gc3RhdGlzdGlrIHlhbmcgZGlndW5ha2FuIHVudHVrIG1lcmVwcmVzZW50YXNpa2FuIGtlc2VsdXJ1aGFuIHBvcHVsYXNpIGRlbmdhbiBtZW5nYW1iaWwgc2ViYWdpYW4ga2VjaWwgZGF0YSB5YW5nIGRpc2VidXQgc2FtcGVsLiBEYWxhbSBzdGF0aXN0aWssIHNhbXBsaW5nIGRpZ3VuYWthbiBhZ2FyIHRpZGFrIHBlcmx1IG1lbmd1bXB1bGthbiBkYXRhIGRhcmkgc2VsdXJ1aCBwb3B1bGFzaSwgdGV0YXBpIGN1a3VwIGRhcmkgc2ViYWdpYW4ga2VjaWwgeWFuZyBkYXBhdCBtZXdha2lsaSBwb3B1bGFzaSBzZWNhcmEga2VzZWx1cnVoYW4uDQoNCkFnYXIgaGFzaWwgcGVuZWxpdGlhbiBsZWJpaCBha3VyYXQsIHVrdXJhbiBzYW1wZWwgaGFydXMgY3VrdXAgYmVzYXIgdW50dWsgbWV3YWtpbGkgcG9wdWxhc2kuIFNlbGFpbiBpdHUsIHNhbXBlbCBoYXJ1cyBkaWFtYmlsIHNlY2FyYSBhY2FrIGRhbiBkYXBhdCBkaXZhbGlkYXNpIGRlbmdhbiBtZW5nZ3VuYWthbiBiZWJlcmFwYSBrZWxvbXBvayBzYW1wZWwgYmVyYmVkYS4gQ29udG9obnlhOiBTZWJ1YWggc2Vrb2xhaCBpbmdpbiBtZW5nZXRhaHVpIGFwYWthaCBzaXN3YSBtZW55dWthaSBzdXN1IGNva2VsYXQgc2FhdCBtYWthbiBzaWFuZy4gU2Vrb2xhaCB0ZXJzZWJ1dCBtZW1pbGlraSAxLjAwMCBzaXN3YS4gSmlrYSBtZXJla2EgaGFueWEgbWVuYW55YWthbiBwZW5kYXBhdCAxMCBzaXN3YSwgaGFzaWxueWEgbXVuZ2tpbiB0aWRhayBha3VyYXQuIExlYmloIGJhaWsgbWVuZ2FtYmlsIHNhbXBlbCBkYXJpIDEwMCBzaXN3YSBhdGF1IHNla2l0YXIgMTAlIGRhcmkganVtbGFoIHRvdGFsIHNpc3dhLCBhZ2FyIGhhc2lsbnlhIGxlYmloIHJlcHJlc2VudGF0aWYgZGFuIGRhcGF0IG1lbmdnYW1iYXJrYW4gcGVuZGFwYXQgbWF5b3JpdGFzIHNpc3dhLg0KDQpTYW1wZWwgZGFsYW0gc3RhdGlzdGlrIHRpZGFrIHNlbGFsdSBiZXJ1cGEgbWFudXNpYS4gU2FtcGVsIGRhcGF0IHRlcmRpcmkgZGFyaSBhcGEgc2FqYSB5YW5nIGluZ2luIGRpdGVsaXRpIGxlYmloIGRhbGFtLiBDb250b2ggamVuaXMgc2FtcGVsIGxhaW5ueWEgbWVsaXB1dGkgbmVnYXJhLCBwZXJ1c2FoYWFuLCBhdGF1IGJhaGthbiBidXJ1bmcsIHRlcmdhbnR1bmcgcGFkYSBvYmplayBwZW5lbGl0aWFuLiBUZWtuaWsgaW5pIG1lbXVuZ2tpbmthbiBwZW5lbGl0aSB1bnR1ayBtZW5nYW5hbGlzaXMgZGF0YSBkZW5nYW4gbGViaWggZWZpc2llbiB0YW5wYSBoYXJ1cyBtZW5pbmphdSBzZWx1cnVoIHBvcHVsYXNpIGF0YXUgb2JqZWsgcGVuZWxpdGlhbi4NCg0KIyBQb3B1bGFzaSB2cyBTYW1wZWwNCg0KUG9wdWxhc2kgbWVuY2FrdXAgc2VsdXJ1aCBpbmRpdmlkdSwgYmVuZGEsIGF0YXUgZGF0YSB5YW5nIHRlcm1hc3VrIGRhbGFtIGtlbG9tcG9rIHRlcnRlbnR1LiBNaXNhbG55YSwgcG9wdWxhc2kgYmlzYSBiZXJ1cGEgc2VtdWEgd2FyZ2EgbmVnYXJhIGRpIHN1YXR1IG5lZ2FyYSBhdGF1IHNlbHVydWggcHJvZHVrIHlhbmcgZGloYXNpbGthbiBvbGVoIHBlcnVzYWhhYW4uIEtvbnNlcCBwZW50aW5nIGRhcmkgcG9wdWxhc2kgYWRhbGFoIGJhaHdhIGlhIG1lbmNha3VwIHNlbXVhIGVsZW1lbiBkYWxhbSBrZWxvbXBvayB0ZXJzZWJ1dCwgdGFucGEgYWRhIHlhbmcgdGVybGV3YXQuIFNlbWVudGFyYSBpdHUsIHNhbXBlbCBhZGFsYWggYmFnaWFuIGtlY2lsIGF0YXUgc3Vic2V0IGRhcmkgcG9wdWxhc2kgeWFuZyBsZWJpaCBiZXNhci4gU2FtcGVsIGRpZ3VuYWthbiB1bnR1ayBtZXJlcHJlc2VudGFzaWthbiBwb3B1bGFzaSBkYWxhbSBhbmFsaXNpcyBzdGF0aXN0aWsuIENvbnRvaG55YSwgamlrYSBwb3B1bGFzaSBhZGFsYWggc2VtdWEgd2FyZ2EgbmVnYXJhLCBzYW1wZWwgYmlzYSBiZXJ1cGEgMS4wMDAgb3JhbmcgZGFyaSB3aWxheWFoIHRlcnRlbnR1LiBQYWRhIHBlcnVzYWhhYW4gcGFrYWlhbiwgc2FtcGVsIGJpc2EgYmVydXBhIHNldGlhcCBjZWxhbmEgeWFuZyBkaXByb2R1a3NpIHBhZGEgaGFyaSBTZW5pbiBhdGF1IHNldGlhcCBwcm9kdWsga2VlbXBhdCB5YW5nIGRpaGFzaWxrYW4gc2VsYW1hIHNlbWluZ2d1LiBQZW1pbGloYW4gc2FtcGVsIHlhbmcgdGVwYXQgc2FuZ2F0IHBlbnRpbmcgYWdhciBkYXBhdCBtZW1iZXJpa2FuIGdhbWJhcmFuIHlhbmcgYWt1cmF0IHRlbnRhbmcgcG9wdWxhc2kuICANCg0KQmVyaWt1dCBhZGFsYWggdGFiZWwgcGVyYmVkYWFuIHNpbWJvbCBhbnRhcmEgKipwb3B1bGFzaSoqIGRhbiAqKnNhbXBlbCoqOiAgDQoNCnwgKipLb25zZXAqKiAgICAgICAgICAgIHwgKipTaW1ib2wgdW50dWsgUG9wdWxhc2kgKFBhcmFtZXRlcikqKiB8ICoqU2ltYm9sIHVudHVrIFNhbXBlbCAoU3RhdGlzdGlrKSoqIHwgIA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAgDQp8ICoqTWVhbiAoUmF0YS1yYXRhKSoqICAgfCDOvCAobXUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCB4zIQgKHgtYmFyKSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgDQp8ICoqUHJvcG9yc2kqKiAgICAgICAgICAgfCBwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHDMgiAocC1oYXQpICAgICAgICAgICAgICAgICAgICAgICAgICB8ICANCnwgKipTdGFuZGFyIERldmlhc2kqKiAgICB8IM+DIChzaWdtYSkgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIA0KfCAqKlVrdXJhbiAoU2l6ZSkqKiAgICAgIHwgTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICANCnwgKipLb2VmaXNpZW4gS29yZWxhc2kqKiB8IM+BIChyaG8pICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIA0KDQpEYWxhbSBwcmFrdGlrbnlhLCBtZW5ndW1wdWxrYW4gZGF0YSBkYXJpIHNlbHVydWggcG9wdWxhc2kgc2VyaW5nIGthbGkgdGlkYWsgcHJha3RpcywgdGVydXRhbWEgamlrYSBwb3B1bGFzaSBzYW5nYXQgYmVzYXIuIE9sZWgga2FyZW5hIGl0dSwgc3RhdGlzdGlrIG1lbXVuZ2tpbmthbiBraXRhIHVudHVrIG1lbmdhbWJpbCBkYXRhIGRhcmkgc2FtcGVsIGRhbiBtZW5nZ3VuYWthbiBpbmZvcm1hc2kgdGVyc2VidXQgdW50dWsgbWVuYXJpayBrZXNpbXB1bGFuIHRlbnRhbmcgcG9wdWxhc2kgc2VjYXJhIGtlc2VsdXJ1aGFuLiBJbmkgbWVtYmFudHUga2l0YSBtZW1idWF0IGtlcHV0dXNhbiB5YW5nIGVmZWt0aWYgdGFucGEgaGFydXMgbWVtZXJpa3NhIHNlbHVydWggcG9wdWxhc2kuDQoNCiMjIFBvcHVsYXNpDQoNClBvcHVsYXNpICgkTiQpIGFkYWxhaCBrZXNlbHVydWhhbiBrZWxvbXBvayBpbmRpdmlkdSwgb2JqZWssIGF0YXUgcGVyaXN0aXdhIHlhbmcgaW5naW4gZGl0ZWxpdGkgb2xlaCBzZW9yYW5nIHBlbmVsaXRpLiBJbmkgbWVuY2FrdXAgc2VtdWEga2VtdW5na2luYW4gcGVuZ2FtdGFuIHlhbmcgcmVsdmFuIGRlbmdhbiBwZW5lbGl0aWFuLiANCg0KKipDb250b2g6KioNCg0KLSBTZW11YSBwZW5kdWR1ayBzdWF0dSBrb3RhIHNhYXQgbWVtcGVsYWphcmkgcGVyaWxha3UgcGVtaWxpaC4NCg0KLSBTZXRpYXAgdGVsZXBvbiBwaW50YXIgeWFuZyBkaXByb2R1a3NpIGRhcmkgcGFicmlrIHNhYXQgbWVuZ2FuYWxpc2lzIHRpbmdrYXQga2VydXNha2FuLg0KDQotIFNldGlhcCBtYWhhc2lzd2EgZGkgdW5pdmVyc2l0YXMgc2FhdCBtZW5ndWt1ciBuaWxhaSB1amlhbiByYXRhLXJhdGEuDQoNCioqSmVuaXMtSmVuaXMgUG9wdWxhc2k6KioNCg0KLSAqKlBvcHVsYXNpIFRlcmJhdGFzOioqIFBvcHVsYXNpIGRlbmdhbiBqdW1sYWggZWxlbWVuIHlhbmcgdGV0YXAgKG1pc2FsbnlhLCBrYXJ5YXdhbiBkaSBzdWF0dSBwZXJ1c2FoYWFuKS4NCg0KLSAqKlBvcHVsYXNpIFRhayBUZXJiYXRhczoqKiBQb3B1bGFzaSBkZW5nYW4ganVtbGFoIGVsZW1lbiB5YW5nIHRpZGFrIGRhcGF0IGRpaGl0dW5nIChtaXNhbG55YSwgYmFrdGVyaSBkYWxhbSBjYXdhbiBwZXRyaSkuDQoNCi0gKipQb3B1bGFzaSBUYXJnZXQ6KiogUG9wdWxhc2kgc3Blc2lmaWsgeWFuZyBpbmdpbiBkaXBlbGFqYXJpIG9sZWggcGVuZWxpdGkuDQoNCi0gKipQb3B1bGFzaSB5YW5nIERhcGF0IERpYWtzZXM6KiogQmFnaWFuIGRhcmkgcG9wdWxhc2kgc2FzYXJhbiB5YW5nIHRlcnNlZGlhIHVudHVrIHBlbmVsaXRpYW4uDQoNCiMjIFNhbXBsZQ0KDQpTYW1wbGUgKCRuJCkgYWRhbGFoIGJhZ2lhbiBkYXJpIHBvcHVsYXNpIHlhbmcgZGlwaWxpaCB1bnR1ayBhbmFsaXNpcy4gS2FyZW5hIG1lbXBlbGFqYXJpIGtlc2VsdXJ1aGFuIHBvcHVsYXNpIHNlcmluZyBrYWxpIHRpZGFrIHByYWt0aXMga2FyZW5hIGJpYXlhLCB3YWt0dSwgYXRhdSBha3Nlc2liaWxpdGFzLCBzYW1wZWwgZGlndW5ha2FuIHVudHVrIG1lbWJ1YXQga2VzaW1wdWxhbiB0ZW50YW5nIHBvcHVsYXNpLiANCg0KKipDb250b2g6KioNCg0KLSBTdXJ2ZWkgdGVyaGFkYXAgMS4wMDAgcGVuZHVkdWsgc3VhdHUga290YSB1bnR1ayBtZW1wZXJraXJha2FuIG9waW5pIHB1Ymxpay4NCg0KLSBNZW1lcmlrc2EgNTAwIHRlbGVwb24gcGludGFyIHlhbmcgZGlwaWxpaCBzZWNhcmEgYWNhayB1bnR1ayBtZW5pbGFpIHRpbmdrYXQga2VydXNha2FuLg0KDQotIE1lbmdhbmFsaXNpcyBuaWxhaSB1amlhbiBkYXJpIDIwMCBzaXN3YSB5YW5nIGRpcGlsaWggc2VjYXJhIGFjYWsuDQoNCioqS2FyYWt0ZXJpc3RpayBTYW1wZWwgeWFuZyBCYWlrOioqDQoNCi0gKipSZXByZXNlbnRhdGlmOioqIFNlY2FyYSBha3VyYXQgbWVuY2VybWlua2FuIHBvcHVsYXNpLg0KDQotICoqQWNhazoqKiBEaXBpbGloIHRhbnBhIGJpYXMuDQoNCi0gKipDdWt1cCBCZXNhcjoqKiBNZW1hc3Rpa2FuIGVzdGltYXNpIHlhbmcgZGFwYXQgZGlhbmRhbGthbi4NCg0KLSAqKkJpYXMgTWluaW1hbDoqKiBNZW5naGluZGFyaSBrZXNhbGFoYW4gc2lzdGVtYXRpcy4NCg0KIyMgUGVyYmVkYWFuIFV0YW1hDQoNClNhYXQgbWVsYWt1a2FuIHBlbmVsaXRpYW4gYXRhdSBhbmFsaXNpcyBzdGF0aXN0aWssIHBlbnRpbmcgdW50dWsgbWVtYmVkYWthbiBhbnRhcmEgcG9wdWxhc2kgZGFuIHNhbXBlbC4gUG9wdWxhc2kgbWVuZ2FjdSBwYWRhIHNlbHVydWgga2Vsb21wb2sgeWFuZyBtZW5qYWRpIHBlcmhhdGlhbiBkYWxhbSBzZWJ1YWggcGVuZWxpdGlhbiwgc2VkYW5na2FuIHNhbXBlbCBhZGFsYWggYmFnaWFuIHlhbmcgbGViaWgga2VjaWwgeWFuZyBkaXBpbGloIGRhcmkgcG9wdWxhc2kgdGVyc2VidXQgdW50dWsgZGlhbmFsaXNpcy4gTWVtYWhhbWkgcGVyYmVkYWFubnlhIHNhbmdhdCBwZW50aW5nIHVudHVrIG1lbWJ1YXQga2VzaW1wdWxhbiB5YW5nIGFrdXJhdCBkYW4gbWVtYXN0aWthbiB2YWxpZGl0YXMga2VzaW1wdWxhbi4NCg0KQmVyaWt1dCBhZGFsYWggcGVyYmVkYWFuIHV0YW1hIGFudGFyYSBwb3B1bGFzaSBkYW4gc2FtcGVsOg0KDQp8ICoqRml0dXIqKiAgICAgIHwgKipQb3B1bGFzaSAoTikqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqU2FtcGVsIChuKSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqRGVmaW5pc2kqKiAgfCBTZWx1cnVoIGtlbG9tcG9rIHlhbmcgZGltaW5hdGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgU3Vic2V0IHlhbmcgZGlwaWxpaCB1bnR1ayBkaXBlbGFqYXJpICAgICAgICAgICAgICAgICAgICB8DQp8ICoqVWt1cmFuKiogICAgfCBCZXNhciBhdGF1IHRhayB0ZXJiYXRhcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgUG9yc2kgbGViaWgga2VjaWwgZGFuIG11ZGFoIGRpYXR1ciAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqTm90YXNpKiogICAgfCBNZW5nZ3VuYWthbiBodXJ1ZiBiZXNhciAobWlzYWxueWEsIE4sIM68LCDPgykgICAgICAgICAgICAgfCBNZW5nZ3VuYWthbiBodXJ1ZiBrZWNpbCAobWlzYWxueWEsIG4sIHjMhCwgcykgICAgICAgICAgfA0KfCAqKlBhcmFtZXRlcioqIHwgTmlsYWkgc2ViZW5hcm55YSAobWlzYWxueWEsIHJhdGEtcmF0YSBwb3B1bGFzaSDOvCwgc2ltcGFuZ2FuIGJha3Ugz4MpIHwgUGVya2lyYWFuIChtaXNhbG55YSwgcmF0YS1yYXRhIHNhbXBlbCB4zIQsIHNpbXBhbmdhbiBiYWt1IHMpIHwNCnwgKipCaWF5YSAmIFdha3R1KiogfCBUaW5nZ2kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IExlYmloIHJlbmRhaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqS2V0ZXBhdGFuKiogfCBNZW1iZXJpa2FuIGluZm9ybWFzaSB5YW5nIGFrdXJhdCAgICAgICAgICAgICAgICAgICAgICAgICAgfCBNZW1iZXJpa2FuIHBlcmtpcmFhbiBkZW5nYW4gYmViZXJhcGEgbWFyZ2luIGtlc2FsYWhhbiAgfA0KDQojIE1lbmdhcGEgTWVuZ2d1bmFrYW4gU2FtcGVsPw0KDQpEYWxhbSBwZW5lbGl0aWFuIGRhbiBwZW5ndW1wdWxhbiBkYXRhLCBtZW1wZWxhamFyaSBrZXNlbHVydWhhbiBwb3B1bGFzaSBzZXJpbmcga2FsaSB0aWRhayBwcmFrdGlzIGF0YXUgbXVzdGFoaWwuIFNlYmFsaWtueWEsIHBlbmVsaXRpIG1lbmdndW5ha2FuIHNhbXBlbCwgeWFuZyBtZXJ1cGFrYW4gYmFnaWFuIHBvcHVsYXNpIHlhbmcgbGViaWgga2VjaWwgZGFuIG11ZGFoIGRpa2Vsb2xhLiBCZXJpa3V0IGluaSBhZGFsYWggYWxhc2FuIHV0YW1hIHBlbmdndW5hYW4gc2FtcGVsOg0KDQotICoqRWZla3Rpdml0YXMgQmlheWEqKg0KDQogIFBlbmd1bXB1bGFuIGRhdGEgZGFyaSBzZWx1cnVoIHBvcHVsYXNpIG1lbWJ1dHVoa2FuIHN1bWJlciBkYXlhIGtldWFuZ2FuIHlhbmcgc2lnbmlmaWthbi4gU2FtcGVsIG1lbmd1cmFuZ2kgYmlheWEgeWFuZyB0ZXJrYWl0IGRlbmdhbiBwZW5ndW1wdWxhbiwgcGVtcm9zZXNhbiwgZGFuIGFuYWxpc2lzIGRhdGEuDQoNCi0gKipFZmlzaWVuc2kgV2FrdHUqKg0KDQogIE1lbXBlbGFqYXJpIGtlc2VsdXJ1aGFuIHBvcHVsYXNpIG1lbWFrYW4gYmFueWFrIHdha3R1IFNhbXBlbCB5YW5nIGRpcGlsaWggZGVuZ2FuIGJhaWsgbWVtdW5na2lua2FuIHBlbmd1bXB1bGFuIGRhbiBhbmFsaXNpcyBkYXRhIHlhbmcgbGViaWggY2VwYXQuDQoNCi0gKipLZWxheWFrYW4qKg0KDQogIEJlYmVyYXBhIHBvcHVsYXNpIHRlcmxhbHUgYmVzYXIgYXRhdSB0aWRhayBkYXBhdCBkaWFrc2VzIHVudHVrIGRpdGVsaXRpIHNlY2FyYSBtZW55ZWx1cnVoLiBTYW1wZWwgbWVtdW5na2lua2FuIHBlbmVsaXRpYW4gZGlsYWt1a2FuIGtldGlrYSBwZW5ndW1wdWxhbiBkYXRhIHBhZGEgc2VsdXJ1aCBwb3B1bGFzaSB0aWRhayBwcmFrdGlzLg0KDQotICoqQWt1cmFzaSBkYW4gS2VhbmRhbGFuKioNCg0KICBCaWxhIGRpcGlsaWggZGVuZ2FuIHRlcGF0LCBzYW1wZWwgZGFwYXQgbWVtYmVyaWthbiB3YXdhc2FuIHlhbmcgc2FuZ2F0IGFrdXJhdCBkYW4gYW5kYWwuIFRla25payBzdGF0aXN0aWsgbWVtYXN0aWthbiBiYWh3YSBzYW1wZWwgbWV3YWtpbGkgc2VsdXJ1aCBwb3B1bGFzaSBzZWNhcmEgZWZla3RpZi4NCg0KLSAqKk1lbmd1cmFuZ2kgS29tcGxla3NpdGFzIFBlbmdlbG9sYWFuIERhdGEqKg0KDQogIE1lbmFuZ2FuaSBzZWp1bWxhaCBiZXNhciBkYXRhIGJpc2EgamFkaSBzdWxpdC4gU2FtcGVsIG1lbnllZGVyaGFuYWthbiBwZW5nZWxvbGFhbiBkYXRhIHNla2FsaWd1cyBtZW1iZXJpa2FuIGtlc2ltcHVsYW4geWFuZyBiZXJtYWtuYS4NCg0KLSAqKlBlcnRpbWJhbmdhbiBFdGlzKioNCg0KICBCZWJlcmFwYSBwZW5lbGl0aWFuIChtaXNhbG55YSwgdWppIGNvYmEgbWVkaXMpIG11bmdraW4gbWVuZ2FuZHVuZyByaXNpa28sIHNlaGluZ2dhIHRpZGFrIGV0aXMgdW50dWsgZGl1amkgcGFkYSBzZWx1cnVoIHBvcHVsYXNpLiBTYW1wZWwgbWVtdW5na2lua2FuIGVrc3BlcmltZW4geWFuZyB0ZXJrb250cm9sIGRhbiBldGlzDQogIA0KDQojIE1lbmdoaW5kYXJpIEJpYXMgU2FtcGVsDQoNCkJpYXMgcGVuZ2FtYmlsYW4gc2FtcGVsIHRlcmphZGkga2V0aWthIGFuZ2dvdGEgcG9wdWxhc2kgdGVydGVudHUgc2VjYXJhIHNpc3RlbWF0aXMgZGlrZWN1YWxpa2FuIGF0YXUgdGVyd2FraWxpIHNlY2FyYSBiZXJsZWJpaGFuIGRhbGFtIHNhbXBlbC4gQmlhcyBhZGFsYWgga2VzYWxhaGFuIHNpc3RlbWF0aXMgKHRpZGFrIGFjYWspIHlhbmcgbWVtcGVuZ2FydWhpIGhhc2lsIHBlbmVsaXRpYW4gaWxtaWFoLCBzZWhpbmdnYSBoYXNpbG55YSB0aWRhayBha3VyYXQuIENvbnRvaDogVGVybW9tZXRlciB5YW5nIHNlbGFsdSBtZW51bmp1a2thbiBzdWh1IGxpbWEgZGVyYWphdCBsZWJpaCB0aW5nZ2kgZGFyaSBzdWh1IHNlYmVuYXJueWEuIFNldGlhcCBwZW5ndWt1cmFuIGRlbmdhbiB0ZXJtb21ldGVyIHRlcnNlYnV0IGFrYW4gc2FsYWggc2VjYXJhIGtvbnNpc3RlbiBrYXJlbmEga2VzYWxhaGFuIGluaSBiZXJzaWZhdCBzaXN0ZW1hdGlzLCBidWthbiBhY2FrLiBCZWJlcmFwYSBqZW5pcyBiaWFzIHNpc3RlbWF0aXMsIHlhaXR1Og0KICANCiAgMS4gKipCaWFzIFBlbmd1a3VyYW4gKE1lYXN1cmVtZW50IEJpYXMpKioNCg0KICAgICAgLSBCaWFzIGluaSB0ZXJqYWRpIGthcmVuYSBrZXNhbGFoYW4gZGFsYW0gY2FyYSBkYXRhIGRpa3VtcHVsa2FuIGF0YXUgYWxhdCBwZW5ndWt1ciB5YW5nIGRpZ3VuYWthbi4NCiAgICAgIC0gQ29udG9oOg0KICAgICAgICBUZXJtb21ldGVyIHlhbmcgZGlsZXRha2thbiBkaSBiYXdhaCBzaW5hciBtYXRhaGFyaSBsYW5nc3VuZyBha2FuIG1lbWJlcmlrYW4gaGFzaWwgeWFuZyBsZWJpaCB0aW5nZ2kgZGFyaSBzdWh1IHNlYmVuYXJueWEuIE1lbWVnYW5nIHRlcm1vbWV0ZXIgZGVuZ2FuIHRhbmdhbiBqdWdhIGRhcGF0IG1lbXBlbmdhcnVoaSBwZW1iYWNhYW4gc3VodS4NCiAgICAgIC0gU29sdXNpOiBHdW5ha2FuIG1ldG9kZSBzdGFuZGFyLCBzZXBlcnRpIG1lbmVtcGF0a2FuIHRlcm1vbWV0ZXIgZGkgZGFsYW0ga290YWsgcGVsaW5kdW5nIGJlcndhcm5hIHB1dGloIHlhbmcgZGlyYW5jYW5nIGtodXN1cyB1bnR1ayBtZWxpbmR1bmdpIGRhcmkgcGVuZ2FydWggbGluZ2t1bmdhbi4NCiAgICAgIA0KDQogIDIuICoqQmlhcyBTZWxla3NpIChTZWxlY3Rpb24gQmlhcykqKg0KDQogICAgICAtIFRlcmphZGkgc2FhdCBzYW1wZWwgeWFuZyBkaWd1bmFrYW4gZGFsYW0gcGVuZWxpdGlhbiB0aWRhayBtZXdha2lsaSBwb3B1bGFzaSB0YXJnZXQgc2VjYXJhIGtlc2VsdXJ1aGFuLCBzZWhpbmdnYSBoYXNpbG55YSB0aWRhayBiZXJsYWt1IHNlY2FyYSB1bXVtLg0KICAgICAgLSBDb250b2g6DQogICAgICAgIE1lbmd1amkgdmFrc2luIHBhZGEga2Vsb21wb2sgbWFoYXNpc3dhIHByaWEgc2VoYXQgYmVydXNpYSAyMC1hbi4gSGFzaWxueWEgdGlkYWsgYWthbiBtZW5jZXJtaW5rYW4gZWZla3Rpdml0YXMgdmFrc2luIHBhZGEgd2FuaXRhLCBvcmFuZyB0dWEsIGF0YXUgbWVyZWthIHlhbmcgbWVtaWxpa2kga29uZGlzaSBrZXNlaGF0YW4gdGVydGVudHUuDQogICAgICAtIFNvbHVzaTogR3VuYWthbiBtZXRvZGUgc2FtcGxpbmcgYWNhayAocmFuZG9tIHNhbXBsaW5nKSB1bnR1ayBtZW1hc3Rpa2FuIHNhbXBlbCBsZWJpaCBiZXJhZ2FtIGRhbiByZXByZXNlbnRhdGlmIHRlcmhhZGFwIHBvcHVsYXNpIHRhcmdldC4NCiAgICAgIA0KICAgICAgDQogIDMuICoqQmlhcyBLb25maXJtYXNpIChDb25maXJtYXRpb24gQmlhcykqKg0KDQogICAgICAtIEJpYXMgaW5pIHRlcmphZGkga2V0aWthIHBlbmVsaXRpIHNlY2FyYSB0aWRhayBzYWRhciBtZW1pbGloIGF0YXUgbWVuYWZzaXJrYW4gZGF0YSB5YW5nIG1lbmR1a3VuZyBoaXBvdGVzaXMgbWVyZWthLCBzYW1iaWwgbWVuZ2FiYWlrYW4gYnVrdGkgeWFuZyBiZXJsYXdhbmFuLg0KICAgICAgLSBDb250b2g6DQogICAgICAgIE1lbmVsaXRpIHBlbmdhcnVoIHBld2FybmEgbWFrYW5hbiB0ZXJoYWRhcCBoaXBlcmFrdGl2aXRhcyBhbmFrLWFuYWsuIERhbGFtIGVrc3BlcmltZW4sIHNhdHUga2Vsb21wb2sgZGliZXJpIHBlcm1lbiBiZXJ3YXJuYSBjZXJhaCwgc2VkYW5na2FuIGtlbG9tcG9rIGtvbnRyb2wgZGliZXJpIGJ1YWggc2VnYXIuIEhhc2lsIG1lbnVuanVra2FuIGFuYWstYW5hayB5YW5nIG1ha2FuIHBlcm1lbiBtZW5qYWRpIGhpcGVyYWt0aWYuIE5hbXVuLCBwZW5lbGl0aSBtZW5nYWJhaWthbiBrZW11bmdraW5hbiBiYWh3YSBrYW5kdW5nYW4gZ3VsYSB5YW5nIHRpbmdnaSwgYnVrYW4gcGV3YXJuYSBtYWthbmFuLCB5YW5nIG1lbnllYmFia2FuIGhpcGVyYWt0aXZpdGFzLg0KICAgICAgLSBTb2x1c2k6IFNlbGFsdSBwZXJ0aW1iYW5na2FuIHBlbmplbGFzYW4gYWx0ZXJuYXRpZiBkYW4gY2FyaSBidWt0aSB5YW5nIGJlcnRlbnRhbmdhbiBkZW5nYW4gaGlwb3Rlc2lzIHVudHVrIG1lbWFzdGlrYW4gaGFzaWwgeWFuZyBvYmpla3RpZi4NCiAgICAgIA0KQmlhcyBkYXBhdCBtdW5jdWwgcGFkYSBiZXJiYWdhaSB0YWhhcCBwZW5lbGl0aWFuLCBtdWxhaSBkYXJpOkRlc2FpbiBtZXRvZGUgcGVuZWxpdGlhbiwgUGVuZ3VtcHVsYW4gZGF0YSwgSW50ZXJwcmV0YXNpIGhhc2lsLCBkYW4gUGVuYXJpa2FuIGtlc2ltcHVsYW4uIFBlbnllYmFibnlhIGJpc2EgYmVyYXNhbCBkYXJpIGluc3RydW1lbiB5YW5nIGRpZ3VuYWthbiwgbWV0b2RlIHNhbXBsaW5nIHlhbmcgc2FsYWgsIGF0YXUgZG9yb25nYW4gYmF3YWggc2FkYXIgdW50dWsgbWVtYnVrdGlrYW4gaGlwb3Rlc2lzIGJlbmFyLiBVbnR1ayBtZW1hc3Rpa2FuIHVqaSBpbG1pYWggeWFuZyBhZGlsIGRhbiBoYXNpbCB5YW5nIGFrdXJhdCwgcGVudGluZyB1bnR1azogbWVuZ2lkZW50aWZpa2FzaSBkYW4gbWVuZ2hpbmRhcmkgYmVyYmFnYWkgc3VtYmVyIGJpYXM7IG1lbmdndW5ha2FuIG1ldG9kZSB5YW5nIHNlc3VhaSBkYWxhbSBkZXNhaW4sIHBlbmd1bXB1bGFuIGRhdGEsIGRhbiBhbmFsaXNpczsgbWVuZ2VjZWsga2VtYmFsaSBoYXNpbCBkZW5nYW4gbWVtcGVydGltYmFuZ2thbiBwZW5qZWxhc2FuIGFsdGVybmF0aWYgZGFuIGJ1a3RpIHlhbmcgYmVybGF3YW5hbi4NCg0KS2FyZW5hIGFkYW55YSBiaWFzIG1lbmdoYXNpbGthbiBoYXNpbCB5YW5nIHRpZGFrIGFrdXJhdCBkYW4gdGlkYWsgcmVwcmVzZW50YXRpZiwgeWFuZyBiZXJwb3RlbnNpIG1lbmRpc3RvcnNpIGtlc2ltcHVsYW4gZGFuIG1lbmd1cmFuZ2kgdmFsaWRpdGFzIHNlYnVhaCBzdHVkaS4gQmVyaWt1dCBpbmkgYmViZXJhcGEgcGVueWViYWIgYmlhcyBwZW5nYW1iaWxhbiBzYW1wZWw6DQoNCnwgKipBc3BlayoqICAgICAgICAgICAgICB8ICoqS2V0ZXJhbmdhbioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqQ2FyYSBtZW5nYXRhc2kqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKkt1cmFuZ255YSBjYWt1cGFuKiogIHwgQmViZXJhcGEga2Vsb21wb2sgZGFsYW0gcG9wdWxhc2kgdGlkYWsgZGltYXN1a2thbiBkYWxhbSBrZXJhbmdrYSBzYW1wZWwuICAgICAgfCBHdW5ha2FuICoqa2VyYW5na2Egc2FtcGVsIHlhbmcgcmVwcmVzZW50YXRpZioqIHVudHVrIG1lbWFzdGlrYW4gc2VtdWEga2Vsb21wb2sgdGVyY2FrdXAuIHwNCnwgKipSZXByZXNlbnRhc2kgYmVybGViaWgqKiB8IEtlbG9tcG9rIHRlcnRlbnR1IG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBqYXVoIGxlYmloIHRpbmdnaSB1bnR1ayBkaXBpbGloLiAgIHwgR3VuYWthbiAqKnBlbmdhbWJpbGFuIHNhbXBlbCBiZXJzdHJhdGEqKiB1bnR1ayBtZW5qYWdhIHByb3BvcnNpIHlhbmcgc2VpbWJhbmcuICAgIHwNCnwgKipCaWFzIFNlbGVrc2kgRGlyaSoqICB8IFBlc2VydGEgc2VjYXJhIHN1a2FyZWxhIG1lbWlsaWggdW50dWsgbWVuZ2FtYmlsIGJhZ2lhbiwgc2VoaW5nZ2EgbWVuZ2hhc2lsa2FuIHNhbXBlbCBub24tYWNhay4gfCBHdW5ha2FuICoqdW5kYW5nYW4gYWNhayoqIGRhbiBwZXJ0aW1iYW5na2FuICoqaW5zZW50aWYqKiB1bnR1ayBtZW5hcmlrIGtlbG9tcG9rIHJlc3BvbmRlbiB5YW5nIGxlYmloIGJlcmFnYW0uIHwNCg0KTWVtaW5pbWFsa2FuIGJpYXMgcGVuZ2FtYmlsYW4gc2FtcGVsIHNhbmdhdCBwZW50aW5nIHVudHVrIG1lbmdoYXNpbGthbiB0ZW11YW4gcGVuZWxpdGlhbiB5YW5nIHZhbGlkLCBhbmRhbCwgZGFuIGRhcGF0IGRpZ2VuZXJhbGlzYXNpLiBEZW5nYW4gbWVtYXN0aWthbiBrZXJhbmdrYSBwZW5nYW1iaWxhbiBzYW1wZWwgeWFuZyBkaWJhbmd1biBkZW5nYW4gYmFpaywgbWVuZXJhcGthbiBtZXRvZGUgcGVtaWxpaGFuIGFjYWssIGRhbiBtZW5ndXJhbmdpIGVmZWsgcGVtaWxpaGFuIHNlbmRpcmksIHBlbmVsaXRpIGRhcGF0IG1lbmluZ2thdGthbiBrdWFsaXRhcyBkYW4gYWt1cmFzaSBwZW5lbGl0aWFuIG1lcmVrYS4NCg0KIyBQZW5nYWNha2FuIGRhbGFtIFBlbmdhbWJpbGFuIFNhbXBlbA0KDQpQZW5nYWNha2FuIGFkYWxhaCBwcm9zZXMgeWFuZyBtZW1hc3Rpa2FuIHNldGlhcCBhbmdnb3RhIHBvcHVsYXNpIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIGRpcGlsaWguIEhhbCBpbmkgbWVuZ3VyYW5naSBiaWFzIHBlbmdhbWJpbGFuIHNhbXBlbCBkYW4gbWVuaW5na2F0a2FuIGdlbmVyYWxpc2FzaSB0ZW11YW4gcGVuZWxpdGlhbi4gUHJvc2VzIGRhdGEgc2NpZW5jZSBtZW1wdW55YWkgNyBsYW5na2FoIHNlZGVyaGFuYSwgeWFpdHU6DQoNCiAgMS4gRGVmaW5lDQoNCiAgMi4gSW5kZW50aWZ5DQoNCiAgMy4gRGVzaWduDQoNCiAgNC4gSW1wbGVtZW50DQoNCiAgNS4gRXhwbG9yZQ0KDQogIDYuIFRlc3QNCg0KICA3LiBDb21tdW5pY2F0ZQ0KDQpVbnR1ayBtZW5lbnR1a2FuIHJhbmNhbmdhbiBwZW5lbGl0aWFuIHlhbmcgcGVybHUgZGlwZXJzaWFwa2FuIGFkYWxhaCBtZW5naWRlbnRpZmlrYXNpIG1hc2FsYWgsIGRhdGEgeWFuZyBkaXBlcmx1a2FuLCB2YXJpYWJlbCwgZWtzcGVyaW1lbiwgZGFuIG1vZGVsIHVudHVrIGRpZ3VuYWthbi4gTWlzYWxueWEsIGtldGlrYSBtZW5jb2JhIG1lbmphd2FiIHBlcnRhbnlhYW4gIkJlcmFwYSByYXRhLXJhdGEgZ2FqaSBzZW9yYW5nIGRhdGEgc2NpZW50aXN0IGRpIEFtZXJpa2EgU2VyaWthdD8iLCBraXRhIGhhcnVzIG1lbXBlcnRpbWJhbmdrYW4gYmFueWFrIHZhcmlhYmVsIHNlcGVydGkgbG9rYXNpIGdlb2dyYWZpcywgZ2VuZGVyLCByYXMsIGRhbiBzaXR1YXNpIGVrb25vbWkgc2VsYW1hIHBhbmRlbWkgQ09WSUQtMTkuDQoNCkRhbGFtIHBlbmVsaXRpYW4gZGF0YSBzY2llbmNlLCB0ZXJkYXBhdCBkdWEgamVuaXMga2VyYW5na2Ega2VyamEgZW1waXJpczogc3R1ZGkgZWtzcGVyaW1lbnRhbCBkYW4gc3R1ZGkgb2JzZXJ2YXNpb25hbC4gU3R1ZGkgZWtzcGVyaW1lbnRhbCBtZWxpYmF0a2FuIHBlbmdlbmRhbGlhbiBsaW5na3VuZ2FuIHBlbmd1bXB1bGFuIGRhdGEgc2VydGEgcmFuZG9taXNhc2kgcGVzZXJ0YSB1bnR1ayBtZW1idWF0IHBlcmJhbmRpbmdhbiBkYW4gbWVuZW11a2FuIGh1YnVuZ2FuIHNlYmFiLWFraWJhdC4gTmFtdW4sIHN0dWRpIGVrc3BlcmltZW50YWwgc2VyaW5na2FsaSBzdWxpdCBkaWxha3VrYW4gZGFsYW0gcHJha3RpayBueWF0YSBrYXJlbmEgYmFueWFrbnlhIGZha3RvciB5YW5nIHN1bGl0IGRpdWt1ciwgc2VwZXJ0aSBidWRheWEgcGVydXNhaGFhbiBkYW4gZmFrdG9yIHBlcnNvbmFsLiBTZWJhbGlrbnlhLCBzdHVkaSBvYnNlcnZhc2lvbmFsIG1lbmd1bXB1bGthbiBkYXRhIGRhcmkgc2l0dWFzaSBhbGFtaSB0YW5wYSBpbnRlcnZlbnNpLCBtaXNhbG55YSBkZW5nYW4gbWVsYWt1a2FuIHN1cnZlaSBrZXBhZGEgbHVsdXNhbiBkYXRhIHNjaWVuY2UgZGFuIHByb2Zlc2lvbmFsIGRpIGJlcmJhZ2FpIGluZHVzdHJpLiBNZXNraXB1biBoYXNpbG55YSB0aWRhayBkYXBhdCBtZW51bmp1a2thbiBrYXVzYWxpdGFzLCBkYXRhIGluaSB0ZXRhcCBiZXJndW5hIHVudHVrIG1lbWFoYW1pIHRyZW4geWFuZyBhZGEuDQoNClBlbmd1a3VyYW4gZGF0YSBtZXJ1cGFrYW4gdGFudGFuZ2FuIHRlcnNlbmRpcmkgZGFsYW0gc3R1ZGkgb2JzZXJ2YXNpb25hbCBrYXJlbmEgYmlhc2FueWEgbWVuZ2FuZGFsa2FuIGxhcG9yYW4gbWFuZGlyaSBkYXJpIHBhcnRpc2lwYW4uIEFnYXIgaGFzaWwgcGVuZ3VrdXJhbiB2YWxpZCBkYW4gcmVsaWFiZWwsIGtpdGEgaGFydXMgbWVtYXN0aWthbiBiYWh3YSBkYXRhIHlhbmcgZGlrdW1wdWxrYW4gYmVuYXItYmVuYXIgbWV3YWtpbGkga29uc2VwIHlhbmcgaW5naW4gZGl1a3VyIGRhbiB0ZXRhcCBrb25zaXN0ZW4gc2FhdCBkaXVrdXIgdWxhbmcuIE1pc2FsbnlhLCBkYWxhbSBwZW5ndWt1cmFuIGdhamksIGtpdGEgcGVybHUgbWVtYXN0aWthbiBhcGFrYWggeWFuZyBkaW1ha3N1ZCBhZGFsYWggZ2FqaSBwb2tvayBhdGF1IHRvdGFsIGtvbXBlbnNhc2kuIFNlbGFpbiBpdHUsIGtpdGEganVnYSBoYXJ1cyBtZXdhc3BhZGFpIGJpYXMgcGFydGlzaXBhbiwgc2VwZXJ0aSBrZWNlbmRlcnVuZ2FuIHVudHVrIG1lbWJlcmlrYW4gamF3YWJhbiB5YW5nIGxlYmloIGJhaWsgZGFyaSBrZW55YXRhYW4gKHNvY2lhbCBkZXNpcmFiaWxpdHkgYmlhcykuDQoNCktlcGVyY2F5YWFuIHBhcnRpc2lwYW4gZGFsYW0gcGVuZ3VtcHVsYW4gZGF0YSBqdWdhIHNhbmdhdCBwZW50aW5nLiBNZXJla2EgaGFydXMgdGFodSB0dWp1YW4gcGVuZ3VtcHVsYW4gZGF0YSBkYW4gYmFnYWltYW5hIGRhdGEgdGVyc2VidXQgYWthbiBkaWd1bmFrYW4uIERhdGEgZGVtb2dyYWZpcyBzZXBlcnRpIGdlbmRlciBkYW4gcmFzIHNlcmluZyBtZW5qYWRpIHRvcGlrIHNlbnNpdGlmIHlhbmcgYmVyaXNpa28gZGlzYWxhaGd1bmFrYW4gamlrYSB0aWRhayBkaWtlbG9sYSBkZW5nYW4gYmVuYXIuIFBhcnRpc2lwYW4gbXVuZ2tpbiBtZW1iZXJpa2FuIGphd2FiYW4geWFuZyB0aWRhayBha3VyYXQga2FyZW5hIGtoYXdhdGlyIGFrYW4ga29uc2VrdWVuc2kgZGFyaSBkYXRhIHRlcnNlYnV0Lg0KDQpEYWxhbSBwZW5lbGl0aWFuLCBraXRhIGphcmFuZyBkYXBhdCBtZW5ndW1wdWxrYW4gZGF0YSBkYXJpIHNlbHVydWggcG9wdWxhc2kuIE9sZWgga2FyZW5hIGl0dSwga2l0YSBoYXJ1cyBtZW5nYW1iaWwgc2FtcGVsIHlhbmcgcmVwcmVzZW50YXRpZiBhZ2FyIGhhc2lsbnlhIGRhcGF0IGRpZ2VuZXJhbGlzYXNpLiBJZGVhbG55YSwgc2FtcGVsIHRlcnNlYnV0IGRpcGlsaWggc2VjYXJhIGFjYWsgZGFyaSBzZWx1cnVoIHBvcHVsYXNpIHlhbmcgcmVsZXZhbi4gTmFtdW4sIHByb3NlcyBpbmkgc2VyaW5na2FsaSBzdWxpdCBkaWxha3VrYW4uIENvbnRvaG55YSwgamlrYSBraXRhIGhhbnlhIG1lbmd1bXB1bGthbiBkYXRhIGRhcmkgZGF0YSBzY2llbnRpc3QgZGkgTWljcm9zb2Z0LCBtYWthIGhhc2lsbnlhIGJpc2EgdGlkYWsgcmVwcmVzZW50YXRpZiBrYXJlbmEgYWRhbnlhIHNlbGVjdGlvbiBiaWFzLiBEYXRhIHNjaWVudGlzdCBkZW5nYW4gZ2FqaSBsZWJpaCByZW5kYWggbXVuZ2tpbiBlbmdnYW4gYmVycGFydGlzaXBhc2ksIGF0YXUgcGFydGlzaXBhbiB5YW5nIG1lcmVzcG9ucyBzdXJ2ZWkgbXVuZ2tpbiB0aWRhayBtZXdha2lsaSBrZXNlbHVydWhhbiBwb3B1bGFzaS4NCg0KDQojIyBQZW5nYW1iaWxhbiBTYW1wZWwgQWNhayBTZWRlcmhhbmENCg0KU3VhdHUgbWV0b2RlIGRpIG1hbmEgc2V0aWFwIGVsZW1lbiBkYWxhbSBwb3B1bGFzaSBtZW1pbGlraSBwcm9iYWJpbGl0YXMgcGVtaWxpaGFuIHlhbmcgc2FtYSwgc2VoaW5nZ2EgbWVuZ2hhc2lsa2FuIHNhbXBlbCB5YW5nIGJlbmFyLWJlbmFyIGFjYWsuIEJlcmlrdXQgY2FyYSBrZXJqYW55YQ0KDQotIFRldGFwa2FuIG5vbW9yIHVuaWsgdW50dWsgc2V0aWFwIGFuZ2dvdGEgcG9wdWxhc2kuDQoNCi0gR3VuYWthbiBnZW5lcmF0b3IgYW5na2EgYWNhayBhdGF1IHNpc3RlbSBsb3RlcmUgdW50dWsgbWVtaWxpaCBwZXNlcnRhLg0KDQpDb250b2g6IFNlYnVhaCBwZXJ1c2FoYWFuIGluZ2luIG1lbnN1cnZlaSA1MDAga2FyeWF3YW4gZGFyaSA1LjAwMCBrYXJ5YXdhbi4gU2V0aWFwIGthcnlhd2FuIGRpYmVyaSBub21vciwgZGFuIDUwMCBvcmFuZyBkaXBpbGloIHNlY2FyYSBhY2FrIG1lbmdndW5ha2FuIHNpc3RlbSB1bmRpYW4uDQoNCiMjIFBlbmdhbWJpbGFuIFNhbXBlbCBTaXN0ZW1hdGlzDQoNCk1ldG9kZSB5YW5nIG1lbWlsaWggZWxlbWVuIHNlY2FyYSBiZXJrYWxhIGRhcmkgZGFmdGFyIGJlcnVydXRhbi4gQmVyaWt1dCBjYXJhIGtlcmphbnlhOg0KDQotIFRlbnR1a2FuIHVrdXJhbiBzYW1wZWwgKG1pc2FsbnlhLCBtZW1pbGloIDEwMCBvcmFuZyBkYXJpIGRhZnRhciAxLjAwMCkuDQoNCi0gSGl0dW5nIGludGVydmFsIHBlbmdhbWJpbGFuIHNhbXBlbDogVWt1cmFuIFBvcHVsYXNpIC8gVWt1cmFuIFNhbXBlbCAobWlzYWxueWEsIDEuMDAwIC8gMTAwID0gMTApLg0KDQotIFBpbGloIHRpdGlrIGF3YWwgc2VjYXJhIGFjYWssIGxhbHUgcGlsaWggc2V0aWFwIG9yYW5nIGtlLTEwLg0KDQpDb250b2g6IFNlb3JhbmcgcGVuZWxpdGkgaW5naW4gbWVuc3VydmVpIHNldGlhcCBwZWxhbmdnYW4ga2UtNSBkYXJpIGRhZnRhciAxLjAwMCBwZW1iZWxpLiBKaWthIHRpdGlrIGF3YWxueWEgYWRhbGFoIDMsIGluZGl2aWR1IHlhbmcgZGlwaWxpaCBha2FuIGJlcmFkYSBkaSB1cnV0YW4ga2UtMywga2UtOCwga2UtMTMsIGRzdA0KDQojIyBQZW5nYW1iaWxhbiBTYW1wZWwgQmVyc3RyYXRhDQoNClN1YXR1IG1ldG9kZSB5YW5nIG1lbWJhZ2kgcG9wdWxhc2kga2UgZGFsYW0gc3Via2Vsb21wb2sgKHN0cmF0YSkgYmVyZGFzYXJrYW4ga2FyYWt0ZXJpc3RpayB5YW5nIHNhbWEsIGtlbXVkaWFuIHNlY2FyYSBhY2FrIG1lbWlsaWggc2VqdW1sYWggcGFydGlzaXBhbiB5YW5nIHByb3BvcnNpb25hbCBkYXJpIHNldGlhcCBzdHJhdGEuIEJlcmlrdXQgY2FyYSBrZXJqYW55YToNCg0KLSBJZGVudGlmaWthc2kgc3RyYXRhIHlhbmcgcmVsZXZhbiAobWlzYWxueWEsIGtlbG9tcG9rIHVzaWEsIHRpbmdrYXQgcGVuZGFwYXRhbiwgcGVuZGlkaWthbikuDQoNCi0gVGVudHVrYW4gcHJvcG9yc2kgc2V0aWFwIHN0cmF0YSBkYWxhbSBwb3B1bGFzaS4NCg0KLSBNZWxha3VrYW4gcGVuZ2FtYmlsYW4gc2FtcGVsIHNlY2FyYSBhY2FrIGRhbGFtIHNldGlhcCBzdHJhdGEuDQoNCkNvbnRvaDogU2VidWFoIHVuaXZlcnNpdGFzIGluZ2luIG1lbnN1cnZlaSBtYWhhc2lzd2EgZGFyaSBiZXJiYWdhaSB0YWh1biBha2FkZW1pay4gSmlrYSA0MCUgbWFoYXNpc3dhIGFkYWxhaCBtYWhhc2lzd2EgYmFydSwgMzAlIGFkYWxhaCBtYWhhc2lzd2EgdGluZ2thdCBkdWEsIDIwJSBhZGFsYWggbWFoYXNpc3dhIHRpbmdrYXQgdGlnYSwgZGFuIDEwJSBhZGFsYWggbWFoYXNpc3dhIHRpbmdrYXQgZW1wYXQsIG1ha2Egc2FtcGVsIGFrYW4gbWVuY2VybWlua2FuIHByb3BvcnNpIGluaS4NCg0KUGVuZ2d1bmFhbiBtZXRvZGUgcGVuZ2FtYmlsYW4gc2FtcGVsIGFjYWsgc2VwZXJ0aSBTUlMsIHBlbmdhbWJpbGFuIHNhbXBlbCBzaXN0ZW1hdGlzLCBkYW4gcGVuZ2FtYmlsYW4gc2FtcGVsIGJlcnN0cmF0YSBtZW1iYW50dSBtZW1hc3Rpa2FuIHNhbXBlbCB5YW5nIGFkaWwsIHRpZGFrIGJpYXMsIGRhbiByZXByZXNlbnRhdGlmIEhhbCBpbmkgbWVuaW5na2F0a2FuIGtlYW5kYWxhbiBkYW4gdmFsaWRpdGFzIHRlbXVhbiBwZW5lbGl0aWFuLCBzZWhpbmdnYSBsZWJpaCBkYXBhdCBkaWdlbmVyYWxpc2FzaWthbiBrZSBzZWx1cnVoIHBvcHVsYXNpLg0KDQoNCiMgVGFudGFuZ2FuIGRhbGFtIFBlbmdhbWJpbGFuIFNhbXBlbA0KDQpQZW5nYW1iaWxhbiBzYW1wZWwgbWVydXBha2FuIHByb3NlcyBwZW50aW5nIGRhbGFtIHBlbmVsaXRpYW4sIHRldGFwaSBwcm9zZXMgaW5pIG1lbWlsaWtpIGJlYmVyYXBhIHRhbnRhbmdhbiB5YW5nIGRhcGF0IG1lbWVuZ2FydWhpIGFrdXJhc2kgZGFuIGtlYW5kYWxhbi4gQmVyaWt1dCBpbmkgYWRhbGFoIGlraHRpc2FyIHRhbnRhbmdhbiB1dGFtYSBwZW5nYW1iaWxhbiBzYW1wZWwgYmVzZXJ0YSBwZW55ZWJhYm55YSBkYW4ga2VtdW5na2luYW4gc29sdXNpbnlhLg0KDQp8ICoqVGFudGFuZ2FuKiogICAgICAgICAgICAgICAgICAgICAgICB8ICoqUGVueWViYWIqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAqKlNvbHVzaSoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKkJpYXMgTm9uLVJlc3BvbioqICAgICAgICAgICAgICAgICAgfCBQZXNlcnRhIHRpZGFrIG1hdSBhdGF1IHRpZGFrIG1hbXB1IG1lbmFuZ2dhcGkuIFN1cnZlaSB0ZXJsYWx1IHBhbmphbmcgYXRhdSBydW1pdC4gS2Vsb21wb2sgdGVydGVudHUgY2VuZGVydW5nIHRpZGFrIGJlcnBhcnRpc2lwYXNpLiB8IEtpcmltIHBlbmdpbmdhdCB0aW5kYWsgbGFuanV0LiBUYXdhcmthbiBpbnNlbnRpZi4gU2VkZXJoYW5ha2FuIGZvcm1hdCBzdXJ2ZWkuICAgICAgICAgICAgICAgfA0KfCAqKktlc2FsYWhhbiBLZXJhbmdrYSBTYW1wbGluZyoqICAgICAgfCBEYWZ0YXIgeWFuZyBrZWRhbHV3YXJzYSBhdGF1IHRpZGFrIGxlbmdrYXAuIEtsYXNpZmlrYXNpIHlhbmcgc2FsYWguIFBlc2VydGEgeWFuZyBkdXBsaWthdCBhdGF1IHRpZGFrIG1lbWVudWhpIHN5YXJhdCBkaXNlcnRha2FuLiB8IFNlbGFsdSBwZXJiYXJ1aSBrZXJhbmdrYSBzYW1wZWwuIFBlcmlrc2Ega2VtYmFsaSBzdW1iZXIgZGF0YS4gR3VuYWthbiBzYW1wZWwgYmVyc3RyYXRhLiAgICAgfA0KfCAqKlVrdXJhbiBTYW1wZWwgVGlkYWsgTWVtYWRhaSoqICAgICAgfCBTdW1iZXIgZGF5YSB0ZXJiYXRhcyB1bnR1ayBzYW1wZWwgYmVzYXIuIFVrdXJhbiBzYW1wZWwgc2FsYWggcGVyaGl0dW5nYW4uIFRpbmdrYXQgcHV0dXMgc2Vrb2xhaCB0aW5nZ2kgZGFsYW0gc3R1ZGkgbG9uZ2l0dWRpbmFsLiB8IEd1bmFrYW4gbWV0b2RlIHN0YXRpc3RpayB1bnR1ayBtZW5lbnR1a2FuIHVrdXJhbiBzYW1wZWwgeWFuZyB0ZXBhdC4gUGVyaGl0dW5na2FuIGtlbXVuZ2tpbmFuIGFkYW55YSBkcm9wb3V0LiB8DQp8ICoqS2VuZGFsYSBCaWF5YSBkYW4gV2FrdHUqKiAgICAgICAgICB8IEJpYXlhIHRpbmdnaSB1bnR1ayBwZW5ndW1wdWxhbiBkYXRhLiBLZXRlcmxhbWJhdGFuIGRhbGFtIG1lbmphbmdrYXUgcGFydGlzaXBhbi4gUGVybHVueWEgcGVyYWxhdGFuIGF0YXUgcGVyc29uZWwga2h1c3VzLiB8IEd1bmFrYW4gbWV0b2RlIHlhbmcgaGVtYXQgYmlheWEgc2VwZXJ0aSBzdXJ2ZWkgb25saW5lLiBPdG9tYXRpc2FzaSBwZW5ndW1wdWxhbiBkYXRhLiBPcHRpbWFsa2FuIHN1bWJlciBkYXlhLiB8DQoNCk1lbmdhdGFzaSB0YW50YW5nYW4gaW5pIG1lbWFzdGlrYW4gYmFod2EgcHJvc2VzIHBlbmdhbWJpbGFuIHNhbXBlbCBsZWJpaCBhbmRhbCwgZWZpc2llbiwgZGFuIG1ld2FraWxpIHBvcHVsYXNpIHNhc2FyYW4uIERlbmdhbiBtZW5lcmFwa2FuIHNvbHVzaSB5YW5nIGVmZWt0aWYsIHBlbmVsaXRpIGRhcGF0IG1lbWluaW1hbGthbiBrZXNhbGFoYW4gZGFuIG1lbmluZ2thdGthbiBrdWFsaXRhcyBzdHVkaSBtZXJla2Egc2VjYXJhIGtlc2VsdXJ1aGFuDQoNCiMgQXBsaWthc2kgZGFsYW0gSW5kdXN0cmkNCg0KUGVuZ2FtYmlsYW4gc2FtcGVsIG1lbWFpbmthbiBwZXJhbiBwZW50aW5nIGRpIGJlcmJhZ2FpIGluZHVzdHJpLCB5YW5nIG1lbXVuZ2tpbmthbiBvcmdhbmlzYXNpIG1lbmd1bXB1bGthbiB3YXdhc2FuLCBtZW1idWF0IGtlcHV0dXNhbiB5YW5nIHRlcGF0LCBkYW4gbWVuZ29wdGltYWxrYW4gcHJvc2VzLiBCZXJpa3V0IGluaSBhZGFsYWggYXJlYSB1dGFtYSBkaSBtYW5hIHBlbmdhbWJpbGFuIHNhbXBlbCBkaWd1bmFrYW4gc2VjYXJhIGx1YXM6DQoNCnwgKipJbmR1c3RyaSoqICAgICAgICAgICB8ICoqQXBsaWthc2kqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqVHVqdWFuKiogfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgKipLZXVhbmdhbioqICAgICAgICAgIHwgTWVuZ2FuYWxpc2lzIHRyYW5zYWtzaSBrZXVhbmdhbiBkYW4gdHJlbiBwYXNhci4gIHwgTWVuaWxhaSByaXNpa28sIG1lbmRldGVrc2kgcGVuaXB1YW4sIGRhbiBtZW1idWF0IGtlcHV0dXNhbiBpbnZlc3Rhc2kuIHwNCnwgKipLb250cm9sIEt1YWxpdGFzKiogIHwgTWVtZXJpa3NhIHNlYmFnaWFuIHByb2R1ayBkYWxhbSBwcm9zZXMgcHJvZHVrc2kuIHwgTWVtYXN0aWthbiBrdWFsaXRhcyBwcm9kdWsgZGFuIGtlcGF0dWhhbiB0ZXJoYWRhcCBzdGFuZGFyIGluZHVzdHJpLiB8DQp8ICoqUGVsYXlhbmFuIEtlc2VoYXRhbioqIHwgTWVtcGVsYWphcmkgZGF0YSBwYXNpZW4gZGFuIHVqaSBrbGluaXMuICAgICAgICB8IE1lbXBlcmtpcmFrYW4gcHJldmFsZW5zaSBwZW55YWtpdCwgZWZla3Rpdml0YXMgcGVuZ29iYXRhbiwgZGFuIHRyZW4ga2VzZWhhdGFuIG1hc3lhcmFrYXQuIHwNCnwgKipSaXNldCBQYXNhcioqICAgICAgIHwgTWVsYWt1a2FuIHN1cnZlaSBkYW4ga2Vsb21wb2sgZm9rdXMuICAgICAgICAgICAgfCBNZW1haGFtaSBwcmVmZXJlbnNpLCB0cmVuLCBkYW4gcGVyaWxha3UgcGVsYW5nZ2FuLiB8DQoNCkRlbmdhbiBtZW5lcmFwa2FuIHRla25payBwZW5nYW1iaWxhbiBzYW1wZWwgeWFuZyB0ZXBhdCwgaW5kdXN0cmkgZGFwYXQgbWVtcGVyb2xlaCB3YXdhc2FuIHlhbmcgYWt1cmF0IGRhbiBhbmRhbCBzZWthbGlndXMgbWVtaW5pbWFsa2FuIGtlc2FsYWhhbiBkYW4gYmlhcy4gSGFsIGluaSBtZW1hc3Rpa2FuIHBlbmdhbWJpbGFuIGtlcHV0dXNhbiB5YW5nIGxlYmloIGJhaWssIHBlbmdoZW1hdGFuIGJpYXlhLCBkYW4gcGVuaW5na2F0YW4gZWZpc2llbnNpIG9wZXJhc2lvbmFsLg0K