Tugas 1 Sampling & Survey Techniques

Principles of Sampling

Logo

1 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.

2 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:

Konsep Simbol untuk Populasi (Parameter) Simbol untuk Sampel (Statistik)
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.

2.1 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.

2.2 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.

2.3 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:

Fitur Populasi (N) Sampel (n)
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

3 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

4 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:

  1. 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.
  2. 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.
  3. 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:

Aspek Keterangan Cara mengatasi
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.

5 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:

  1. Define

  2. Indentify

  3. Design

  4. Implement

  5. Explore

  6. Test

  7. 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.

5.1 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

  • Tetapkan nomor unik untuk setiap anggota populasi.

  • Gunakan generator angka acak atau sistem lotere untuk memilih peserta.

Contoh: Sebuah perusahaan ingin mensurvei 500 karyawan dari 5.000 karyawan. Setiap karyawan diberi nomor, dan 500 orang dipilih secara acak menggunakan sistem undian.

5.2 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

5.3 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.

6 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.

Tantangan Penyebab Solusi
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

7 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:

Industri Aplikasi Tujuan
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