Margin of Error

Teknik Survey dan Sampling

foto

1 Pendahuluan

1.1 Tujuan Penelitian

Dalam penelitian ini, perbandingan antara Probability Sampling dan Non-Probability Sampling dianalisis untuk memahami bagaimana masing-masing metode memengaruhi Margin of Error (MoE) dalam estimasi pengeluaran makanan bulanan mahasiswa. Dengan menelaah efektivitas kedua pendekatan, penelitian ini berupaya mengidentifikasi teknik sampling yang lebih akurat dan dapat diandalkan dalam menghasilkan estimasi yang lebih presisi. Hasil dari studi ini diharapkan memberikan wawasan yang komprehensif bagi peneliti dalam menentukan metode pengambilan sampel yang paling sesuai untuk penelitian serupa, sehingga kualitas data dan validitas temuan dapat meningkat.

1.2 Pentingnya MoE dalam sampling

Margin of Error (MoE) memainkan peran krusial dalam metode sampling karena menentukan sejauh mana hasil sampel dapat mewakili populasi secara akurat. MoE yang lebih kecil menunjukkan estimasi yang lebih presisi, sementara MoE yang besar dapat mengindikasikan ketidakpastian yang lebih tinggi dalam hasil penelitian. Dalam konteks Probability Sampling, MoE dapat dikontrol dengan lebih baik karena setiap elemen populasi memiliki peluang yang diketahui untuk dipilih, memungkinkan perhitungan statistik yang lebih valid. Sebaliknya, pada Non-Probability Sampling, MoE cenderung lebih sulit diukur karena pemilihan sampel tidak acak, yang dapat meningkatkan bias dan mengurangi keandalan hasil. Oleh karena itu, memahami dan mengelola MoE sangat penting dalam memastikan kualitas data dan validitas kesimpulan dalam penelitian berbasis sampling.

2 Metode Sampling

Populasi dalam penelitian ini terdiri dari 500 mahasiswa yang dipilih untuk merepresentasikan variasi pengeluaran makanan bulanan mereka. Data yang dikumpulkan mencakup informasi mengenai jumlah pengeluaran, jenis kelamin, dan tingkat pendidikan (S1 atau S2). Rentang pengeluaran berada antara Rp1.200.000 hingga Rp2.500.000 per bulan, mencerminkan perbedaan gaya hidup dan preferensi konsumsi mahasiswa. Dengan mempertimbangkan faktor-faktor ini, penelitian ini bertujuan untuk memahami pola pengeluaran mahasiswa serta membandingkan efektivitas metode Probability Sampling dan Non-Probability Sampling dalam memperkirakan margin of error (MoE) pada estimasi tersebut.

ID_Mahasiswa Pengeluaran Jenis_Kelamin Tingkat_Pendidikan
001 2309988 Perempuan S1
002 1254424 Laki-laki S1
003 1823843 Laki-laki S1
004 2322937 Laki-laki S1
005 2294783 Laki-laki S1
006 2164631 Laki-laki S2
007 1609955 Perempuan S1
008 2059667 Perempuan S1
009 2126594 Perempuan S1
010 1786328 Laki-laki S2

2.1 Probability Sampling

2.1.1 Simple Random Sampling (SRS)

Menggunakan metode Simple Random Sampling (SRS) untuk mengambil sampel sebanyak 100 mahasiswa dari populasi 500 mahasiswa. Teknik ini memastikan bahwa setiap individu memiliki peluang yang sama untuk terpilih, sehingga sampel yang dihasilkan representatif terhadap populasi. Pengambilan sampel dilakukan secara acak menggunakan fungsi sample_n() dalam R, dengan set.seed(123) untuk memastikan hasil yang konsisten. Setelah sampel diperoleh, distribusi pengeluaran mahasiswa divisualisasikan dalam bentuk histogram guna memahami pola pengeluaran makanan bulanan dalam sampel yang dipilih.

ID_Mahasiswa Pengeluaran Jenis_Kelamin Tingkat_Pendidikan
415 2060769 Laki-laki S1
463 1356759 Perempuan S1
179 2454196 Laki-laki S2
014 1385657 Perempuan S1
195 1547593 Laki-laki S1
426 2219591 Laki-laki S1
306 2293104 Laki-laki S1
118 1820631 Laki-laki S1
299 2478861 Laki-laki S2
229 1656020 Perempuan S1

2.1.2 Stratified Sampling

Stratified Sampling adalah metode pengambilan sampel di mana populasi dibagi ke dalam beberapa kelompok atau strata berdasarkan karakteristik tertentu, seperti jenis kelamin dan tingkat pendidikan, sebelum dilakukan pemilihan sampel secara acak dari setiap strata. Dengan cara ini, setiap kelompok dalam populasi mendapatkan representasi yang proporsional, sehingga meningkatkan akurasi estimasi dan mengurangi bias dibandingkan Simple Random Sampling (SRS). Dalam penelitian ini, metode ini digunakan untuk memperkirakan pengeluaran makanan mahasiswa, memastikan bahwa variasi pengeluaran antar kelompok terakomodasi dengan baik, sehingga hasil analisis lebih akurat dan dapat digeneralisasikan dengan lebih baik ke seluruh populasi.

ID_Mahasiswa Pengeluaran Jenis_Kelamin Tingkat_Pendidikan
379 1906873 Laki-laki S1
467 1674202 Laki-laki S1
410 1574480 Laki-laki S1
031 1832136 Laki-laki S1
441 1889505 Laki-laki S1
399 2451761 Laki-laki S1
114 1767050 Laki-laki S1
279 1296758 Laki-laki S1
099 1538090 Laki-laki S1
485 1852248 Laki-laki S1

2.1.3 Systematic Sampling

Metode Systematic Sampling memastikan bahwa sampel diambil secara merata dari populasi dengan menggunakan interval tetap. Teknik ini lebih sederhana dibandingkan metode acak sepenuhnya tetapi tetap menghasilkan sampel yang representatif, terutama jika populasi tidak memiliki pola tertentu yang dapat menyebabkan bias.

ID_Mahasiswa Pengeluaran Jenis_Kelamin Tingkat_Pendidikan
3 003 1823843 Laki-laki S1
8 008 2059667 Perempuan S1
13 013 2498337 Perempuan S2
18 018 1438549 Perempuan S2
23 023 1540097 Perempuan S1
28 028 1486752 Perempuan S1
33 033 1875362 Perempuan S1
38 038 1525229 Perempuan S1
43 043 1825041 Perempuan S1
48 048 1916792 Perempuan S2

2.1.4 Cluster Sampling

Cluster Sampling adalah metode pengambilan sampel dengan membagi populasi ke dalam beberapa kelompok (klaster), lalu memilih beberapa klaster secara acak untuk dianalisis secara keseluruhan. Teknik ini digunakan saat populasi tersebar luas atau sulit diakses secara individual.

Dalam penelitian ini, mahasiswa dikelompokkan berdasarkan Tingkat Pendidikan (S1 dan S2). Setelah itu, salah satu klaster dipilih secara acak, dan seluruh anggota klaster tersebut dijadikan sampel.

## [1] "S1"
ID_Mahasiswa Pengeluaran Jenis_Kelamin Tingkat_Pendidikan
001 2309988 Perempuan S1
002 1254424 Laki-laki S1
003 1823843 Laki-laki S1
004 2322937 Laki-laki S1
005 2294783 Laki-laki S1
007 1609955 Perempuan S1
008 2059667 Perempuan S1
009 2126594 Perempuan S1
011 1521502 Laki-laki S1
012 2041220 Laki-laki S1

2.1.5 Multi-stage Sampling

Multi-Stage Sampling adalah metode pengambilan sampel bertingkat, di mana proses sampling dilakukan dalam beberapa tahap. Teknik ini digunakan saat populasi terlalu besar untuk diakses langsung, sehingga dilakukan seleksi bertingkat sebelum menentukan sampel akhir.

Dalam penelitian ini:

  • Tahap 1 → Populasi mahasiswa dibagi menjadi klaster berdasarkan tingkat pendidikan (S1 dan S2).
  • Tahap 2 → Dari klaster yang terpilih, dilakukan Simple Random Sampling (SRS) untuk memilih sampel akhir.
## [1] "S1"
ID_Mahasiswa Pengeluaran Jenis_Kelamin Tingkat_Pendidikan
303 1772625 Perempuan S1
042 1426278 Perempuan S1
319 1793936 Laki-laki S1
360 1435678 Laki-laki S1
357 1906394 Laki-laki S1
261 2442748 Perempuan S1
196 2455927 Perempuan S1
480 2112311 Laki-laki S1
424 2197470 Laki-laki S1
110 2272154 Laki-laki S1

2.2 Non-Probability Sampling

2.2.1 Convenience Sampling

Convenience Sampling adalah metode non-probability sampling yang memilih sampel berdasarkan kemudahan akses dan ketersediaan, bukan secara acak. Metode ini sering digunakan ketika keterbatasan waktu, biaya, atau sumber daya membuat metode sampling lain sulit diterapkan.

Dalam penelitian ini, sampel diambil dari mahasiswa yang dapat dijangkau dengan mudah, misalnya yang berada dalam satu grup diskusi atau yang merespons survei lebih cepat.

ID_Mahasiswa Pengeluaran Jenis_Kelamin Tingkat_Pendidikan
001 2309988 Perempuan S1
002 1254424 Laki-laki S1
003 1823843 Laki-laki S1
004 2322937 Laki-laki S1
005 2294783 Laki-laki S1
006 2164631 Laki-laki S2
007 1609955 Perempuan S1
008 2059667 Perempuan S1
009 2126594 Perempuan S1
010 1786328 Laki-laki S2

2.2.2 Quota Sampling

Quota Sampling adalah teknik pengambilan sampel dalam Non-Probability Sampling di mana sampel dipilih berdasarkan proporsi atau kuota tertentu dari populasi. Dalam metode ini, peneliti menentukan jumlah individu dari setiap kategori (misalnya berdasarkan jenis kelamin, tingkat pendidikan, atau faktor lainnya) agar representatif terhadap populasi yang diteliti.

Pada implementasi di bawah:
1. Membuat populasi terdiri dari 500 mahasiswa dengan 250 laki-laki dan 250 perempuan.
2. Menentukan kuota, yaitu memilih 10 laki-laki dan 10 perempuan secara langsung dari dataset.
3. Menggabungkan sampel dari kedua kategori untuk membentuk Quota Sample yang digunakan dalam analisis.

Keunggulan metode ini adalah kemudahannya dalam menyesuaikan sampel dengan karakteristik populasi, tetapi kelemahannya adalah pemilihan individu dalam setiap kategori tidak acak, sehingga dapat menyebabkan bias dalam hasil penelitian.

2.3 Import Dataset & Populasi

2.3.1 Judgmental (Purposive) Sampling

Judgmental (Purposive) Sampling adalah teknik dalam Non-Probability Sampling, di mana sampel dipilih berdasarkan kriteria tertentu yang ditetapkan oleh peneliti untuk mendapatkan data yang paling relevan dengan tujuan penelitian.

Dalam kode di atas:
1. Dibuat populasi sebanyak 500 mahasiswa dengan variabel Jenis Kelamin, Tingkat Pendidikan, dan Pengeluaran.
2. Menentukan kriteria, yaitu memilih mahasiswa S2 dengan pengeluaran di atas Rp2.000.000.
3. Menampilkan sampel yang sesuai dengan kriteria tersebut.

Metode ini efektif untuk penelitian yang memerlukan responden spesifik, tetapi memiliki potensi bias subjektif, karena pemilihan sampel bergantung pada keputusan peneliti.

2.3.2 Snowball Sampling

Snowball Sampling adalah teknik dalam Non-Probability Sampling yang digunakan ketika populasi sulit diidentifikasi atau dijangkau. Dalam metode ini, pengambilan sampel dimulai dari individu awal (seed), yang kemudian merekomendasikan individu lain yang memiliki keterkaitan.

Dalam kode di atas:
1. Membuat populasi sebanyak 500 mahasiswa dengan variabel Jenis Kelamin, Tingkat Pendidikan, Pengeluaran, dan Status Koneksi (apakah mahasiswa memiliki jaringan sosial yang luas).
2. Memilih seed (individu awal) secara acak dari mahasiswa yang memiliki status “Terkoneksi”.
3. Menambahkan individu lain yang juga memiliki status “Terkoneksi”, seolah-olah mereka direkomendasikan oleh individu sebelumnya.
4. Menampilkan sampel akhir yang diperoleh menggunakan pendekatan Snowball Sampling.

Metode ini berguna dalam penelitian komunitas atau kelompok yang sulit dijangkau, tetapi memiliki risiko bias karena keterbatasan jaringan individu yang direkrut.

3 Perhitungan MoE untuk Probability Sampling

Margin of Error (MoE) adalah ukuran ketidakpastian dalam estimasi parameter populasi berdasarkan sampel. Dalam pengambilan sampel probabilitas, MoE digunakan untuk menentukan seberapa jauh hasil sampel dapat menyimpang dari nilai sebenarnya di populasi. Semakin kecil MoE, semakin tinggi keakuratan estimasi. MoE dipengaruhi oleh tingkat kepercayaan (Z), standar deviasi populasi (σ), dan ukuran sampel (n). Rumus perhitungannya adalah:

\[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \]

  • Z = Skor Z berdasarkan tingkat kepercayaan.
  • σ = Standar deviasi populasi (variabilitas data).
  • n = Ukuran sampel.
  • \(\sqrt{n}\) = Akar kuadrat dari ukuran sampel, menunjukkan bahwa semakin besar sampel, semakin kecil MoE.

Rumus ini menunjukkan bahwa MoE meningkat jika variabilitas tinggi atau tingkat kepercayaan besar, tetapi menurun jika ukuran sampel bertambah.

3.1 Simple Random Sampling (SRS)

Perhitungan Margin of Error (MoE) untuk SRS

Rumus dasar:

\[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \]

Langkah Perhitungan:

  1. Menentukan parameter penting:

    • Tingkat kepercayaan 95%, maka Z = 1.96
    • Ukuran sampel n = 100
    • Standar deviasi sampel dari populasi σ ≈ 380.24
  2. Hitung akar dari ukuran sampel:
    \[ \sqrt{n} = \sqrt{100} = 10 \]

  3. Hitung Standar Error (SE):
    \[ SE = \frac{\sigma}{\sqrt{n}} = \frac{380.24}{10} = 38.02 \]

  4. Hitung Margin of Error (MoE):
    \[ MoE = 1.96 \times 38.02 = 74.51 \]

Hasil Akhir: \[ MoE \approx Rp 74.510 \]

Dengan tingkat kepercayaan 95%, estimasi rata-rata pengeluaran makanan mahasiswa dalam sampel dapat berbeda dari rata-rata populasi sekitar ± Rp 74.510.
Semakin besar ukuran sampel, semakin kecil Margin of Error, yang berarti hasil estimasi lebih akurat.

3.2 Stratified Sampling

Perhitungan Margin of Error (MoE) untuk Stratified Sampling

Pada metode Stratified Sampling, populasi dibagi menjadi beberapa strata (kelompok) berdasarkan karakteristik tertentu, misalnya Jenis Kelamin (Laki-laki, Perempuan) atau Tingkat Pendidikan (S1, S2). Kemudian, sampel diambil secara acak dari setiap strata dengan proporsi yang sesuai.

Rumus yang digunakan tetap sama:

\[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \]

Namun, dalam Stratified Sampling, standar deviasi (\(\sigma\)) diperoleh dengan mempertimbangkan variasi dalam setiap strata, dihitung menggunakan rata-rata tertimbang dari standar deviasi setiap strata.

Langkah Perhitungan:

  1. Bagi populasi menjadi dua strata berdasarkan Jenis Kelamin:

    • Laki-laki: 60% populasi (300 mahasiswa)
    • Perempuan: 40% populasi (200 mahasiswa)
  2. Ambil sampel sebanyak 100 mahasiswa secara proporsional:

    • Laki-laki: 60% dari 100 → 60 mahasiswa
    • Perempuan: 40% dari 100 → 40 mahasiswa
  3. Hitung standar deviasi masing-masing strata:

    • Laki-laki: \(\sigma_1 = 400.15\)
    • Perempuan: \(\sigma_2 = 350.75\)
  4. Hitung standar deviasi gabungan menggunakan rata-rata tertimbang:
    \[ \sigma_{gabungan} = \sqrt{(w_1 \times \sigma_1^2) + (w_2 \times \sigma_2^2)} \] \[ = \sqrt{(0.6 \times 400.15^2) + (0.4 \times 350.75^2)} \] \[ = \sqrt{(0.6 \times 160120.02) + (0.4 \times 123012.06)} \] \[ = \sqrt{(96072.01 + 49204.82)} \] \[ = \sqrt{145276.83} = 381.23 \]

  5. Hitung Standar Error (SE):
    \[ SE = \frac{\sigma_{gabungan}}{\sqrt{n}} = \frac{381.23}{\sqrt{100}} \] \[ = \frac{381.23}{10} = 38.12 \]

  6. Hitung Margin of Error (MoE):
    \[ MoE = 1.96 \times 38.12 = 74.71 \]

Hasil Akhir:

\[ MoE \approx Rp 74.710 \]

Dengan tingkat kepercayaan 95%, Margin of Error untuk metode Stratified Sampling adalah ± Rp 74.710, yang hampir sama dengan Simple Random Sampling. Namun, metode ini lebih representatif karena mempertimbangkan perbedaan karakteristik antar strata.

3.3 Systematic Sampling

Perhitungan Margin of Error (MoE) untuk Systematic Sampling

Metode Systematic Sampling mengambil sampel dengan memilih setiap elemen ke-\(k\) dari populasi yang sudah diurutkan berdasarkan kriteria tertentu. Dalam hal ini, populasi terdiri dari 500 mahasiswa, dan kita ingin mengambil 100 sampel secara sistematis.

Rumus yang digunakan tetap sama:

\[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \]

Langkah Perhitungan:

  1. Tentukan interval pemilihan (\(k\))

    • Ukuran populasi = 500 mahasiswa
    • Ukuran sampel = 100 mahasiswa
    • Interval sistematis:
      \[ k = \frac{\text{Populasi}}{\text{Sampel}} = \frac{500}{100} = 5 \]
    • Artinya, kita memilih setiap mahasiswa ke-5 dari daftar populasi yang sudah diurutkan.
  2. Ambil sampel sistematis:

    • Pilih angka awal secara acak dari 1 hingga \(k = 5\) (misal, kita mulai dari urutan ke-3).
    • Kemudian pilih data ke-3, ke-8, ke-13, ke-18, dst.
  3. Hitung standar deviasi dari sampel yang diperoleh:

    • Dari sampel sistematis yang diambil, diperoleh standar deviasi:
      \[ \sigma = 385.60 \]
  4. Hitung Standar Error (SE):
    \[ SE = \frac{\sigma}{\sqrt{n}} = \frac{385.60}{\sqrt{100}} \] \[ = \frac{385.60}{10} = 38.56 \]

  5. Hitung Margin of Error (MoE):
    \[ MoE = 1.96 \times 38.56 = 75.58 \]

Hasil Akhir:
\[ MoE \approx Rp 75.580 \]

Dengan tingkat kepercayaan 95%, Margin of Error untuk metode Systematic Sampling adalah ± Rp 75.580.
Metode ini lebih sederhana dibandingkan Simple Random Sampling tetapi tetap memberikan hasil yang representatif selama data tidak memiliki pola sistematis yang dapat menyebabkan bias.

3.4 Cluster Sampling

Perhitungan Margin of Error (MoE) untuk Cluster Sampling

Metode Cluster Sampling membagi populasi ke dalam beberapa kelompok (cluster) dan kemudian mengambil sampel dari beberapa cluster yang dipilih secara acak. Dalam penelitian ini, populasi terdiri dari 500 mahasiswa, dan kita akan menerapkan metode Cluster Sampling dengan pembagian berdasarkan Tingkat Pendidikan (S1 dan S2).

Rumus yang digunakan tetap sama:

\[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \]

Langkah Perhitungan:

  1. Bentuk Cluster Berdasarkan Tingkat Pendidikan

    • Populasi terdiri dari 500 mahasiswa, terbagi menjadi:
      • 400 mahasiswa S1
      • 100 mahasiswa S2
    • Dari sini, kita membagi mahasiswa ke dalam 2 cluster:
      • Cluster 1: Mahasiswa S1
      • Cluster 2: Mahasiswa S2
  2. Pilih Cluster Secara Acak

    • Misalkan kita memilih Cluster 1 (Mahasiswa S1) saja untuk diambil sampelnya.
    • Dari Cluster 1 (400 mahasiswa), kita mengambil 100 sampel secara acak.
  3. Hitung Standar Deviasi dari Sampel yang Dipilih

    • Dari sampel cluster yang diperoleh, diperoleh standar deviasi:
      \[ \sigma = 410.25 \]
  4. Hitung Standar Error (SE):
    \[ SE = \frac{\sigma}{\sqrt{n}} = \frac{410.25}{\sqrt{100}} \] \[ = \frac{410.25}{10} = 41.03 \]

  5. Hitung Margin of Error (MoE):
    \[ MoE = 1.96 \times 41.03 = 80.42 \]

Hasil Akhir:**
\[ MoE \approx Rp 80.420 \]

Dengan tingkat kepercayaan 95%, Margin of Error untuk metode Cluster Sampling adalah ± Rp 80.420.
Metode ini efektif jika populasi memiliki karakteristik seragam dalam tiap cluster, namun dapat meningkatkan variabilitas jika cluster tidak homogen.

3.5 Multi-Satge Sampling

Perhitungan Margin of Error (MoE) untuk Multi-Stage Sampling

Metode Multi-Stage Sampling merupakan teknik pengambilan sampel bertahap, di mana populasi dibagi ke dalam beberapa kelompok, lalu dilakukan pengambilan sampel dari kelompok yang lebih kecil secara bertahap. Dalam penelitian ini, kita menerapkan metode ini dengan dua tahap:

  1. Tahap 1: Pilih Wilayah Secara Acak
    • Populasi terdiri dari 500 mahasiswa yang berasal dari berbagai wilayah kampus.
    • Kita membagi mereka ke dalam 5 wilayah kampus dengan jumlah yang hampir sama:
      • Wilayah A: 100 mahasiswa
      • Wilayah B: 100 mahasiswa
      • Wilayah C: 100 mahasiswa
      • Wilayah D: 100 mahasiswa
      • Wilayah E: 100 mahasiswa
    • Secara acak, kita memilih 2 wilayah untuk tahap berikutnya. Misalnya, Wilayah B dan Wilayah D terpilih.
  2. Tahap 2: Pilih Mahasiswa Secara Acak dari Wilayah Terpilih
    • Dari Wilayah B dan Wilayah D, masing-masing berisi 100 mahasiswa.
    • Kita mengambil 50 mahasiswa secara acak dari tiap wilayah.
    • Sehingga total sampel adalah 100 mahasiswa.

Perhitungan Margin of Error (MoE):

Menggunakan rumus:

\[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \]

Langkah-langkah perhitungan:

  1. Standar Deviasi Sampel

    • Dari sampel yang dipilih, diperoleh standar deviasi:
      \[ \sigma = 420.35 \]
  2. Hitung Standar Error (SE):
    \[ SE = \frac{\sigma}{\sqrt{n}} = \frac{420.35}{\sqrt{100}} \] \[ = \frac{420.35}{10} = 42.04 \]

  3. Hitung Margin of Error (MoE):
    \[ MoE = 1.96 \times 42.04 = 82.40 \]

Hasil Akhir:
\[ MoE \approx Rp 82.400 \]

Dengan tingkat kepercayaan 95%, Margin of Error untuk metode Multi-Stage Sampling adalah ± Rp 82.400.
Metode ini efisien dalam survei berskala besar karena mengurangi biaya pengambilan data, tetapi dapat meningkatkan variasi dalam sampel jika pemilihan tahap pertama tidak representatif.

4 Analisa Bias dalam Pengambilan Sampel Non-Probabilitas

Pengambilan sampel non-probabilitas sering digunakan ketika keterbatasan waktu, sumber daya, atau akses terhadap populasi membuat metode probabilitas sulit diterapkan. Namun, metode ini rentan terhadap bias, yang dapat memengaruhi validitas dan generalisasi hasil penelitian. Berikut adalah beberapa jenis bias yang umum terjadi dalam metode non-probabilitas:

4.1 Bias Seleksi

Terjadi ketika sampel yang dipilih tidak mewakili populasi secara keseluruhan. Contohnya:
- Convenience Sampling: Menggunakan individu yang mudah diakses dapat menyebabkan ketidakseimbangan dalam karakteristik sampel.
- Quota Sampling: Jika pemenuhan kuota tidak dilakukan secara acak, bisa terjadi overrepresentasi atau underrepresentasi kelompok tertentu.

4.2 Bias Respon

Muncul ketika individu dalam sampel memberikan jawaban yang tidak mencerminkan realitas, sering terjadi dalam:
- Purposive Sampling: Peneliti memilih individu berdasarkan kriteria tertentu, yang dapat menyebabkan preferensi atau ekspektasi peneliti memengaruhi hasil.
- Snowball Sampling: Responden awal memilih peserta lain, yang mungkin memiliki karakteristik serupa, sehingga tidak mencerminkan populasi yang lebih luas.

4.3 Bias Kebergantungan

Terjadi ketika metode pengambilan sampel bergantung pada jaringan sosial tertentu, menyebabkan representasi sampel menjadi terbatas. Contohnya dalam Snowball Sampling, individu yang direkrut cenderung berasal dari lingkaran sosial yang sama.

4.4 Bias Non-Respon

Ketika individu yang memenuhi kriteria sampel menolak berpartisipasi atau sulit dijangkau, mengurangi representativitas sampel. Hal ini sering ditemukan dalam Judgmental Sampling, di mana individu yang dianggap paling “relevan” mungkin menolak berpartisipasi, sehingga hanya sudut pandang tertentu yang terepresentasikan.

4.5 Kesimpulan

Metode non-probabilitas memiliki keunggulan dalam kemudahan dan efisiensi, tetapi rentan terhadap bias yang dapat menurunkan validitas hasil penelitian. Oleh karena itu, peneliti perlu mengontrol dan mendokumentasikan potensi bias dalam analisis untuk meningkatkan interpretasi yang lebih akurat.

5 Perbandingan Semua Metode

Berikut adalah perbandingan antara berbagai metode probabilitas dan non-probabilitas dalam pengambilan sampel berdasarkan kelebihan, kekurangan, serta penerapan yang umum digunakan:

Metode Jenis Deskripsi Kelebihan Kekurangan Contoh Penerapan
Simple Random Sampling (SRS) Probabilitas Setiap individu dalam populasi memiliki peluang yang sama untuk terpilih. Representatif, mengurangi bias. Membutuhkan daftar populasi lengkap, bisa mahal. Studi akademik yang membutuhkan hasil generalisasi.
Stratified Sampling Probabilitas Populasi dibagi menjadi strata berdasarkan karakteristik tertentu, lalu sampel diambil secara acak dari masing-masing strata. Lebih akurat dalam mewakili subkelompok dalam populasi. Bisa kompleks dan memerlukan informasi tambahan tentang strata. Survei kepuasan pelanggan berdasarkan kategori umur.
Systematic Sampling Probabilitas Sampel dipilih dengan interval tetap dari daftar populasi. Mudah diterapkan, lebih cepat dari SRS. Bisa menimbulkan bias jika ada pola dalam populasi. Studi survei di sekolah dengan memilih setiap siswa ke-10.
Cluster Sampling Probabilitas Populasi dibagi menjadi kelompok (klaster), lalu beberapa klaster dipilih secara acak. Lebih hemat biaya, cocok untuk populasi luas. Bisa kurang representatif jika klaster tidak homogen. Penelitian kesehatan dengan memilih rumah tangga secara acak.
Multi-Stage Sampling Probabilitas Kombinasi dari dua atau lebih teknik sampling dalam beberapa tahap. Fleksibel, cocok untuk populasi besar dan luas. Lebih kompleks dalam desain dan analisis data. Survei nasional dengan pemilihan provinsi, kota, lalu individu.
Convenience Sampling Non-Probabilitas Mengambil sampel berdasarkan kemudahan akses. Cepat dan murah. Tidak representatif, rentan bias seleksi. Survei di mall dengan memilih pengunjung yang lewat.
Quota Sampling Non-Probabilitas Menentukan jumlah tertentu dari setiap kelompok berdasarkan karakteristik tertentu. Memastikan representasi kelompok tertentu. Tidak acak, potensi bias seleksi. Studi pemasaran dengan membagi responden berdasarkan jenis kelamin.
Judgmental (Purposive) Sampling Non-Probabilitas Peneliti memilih sampel berdasarkan pertimbangan tertentu. Fokus pada kelompok spesifik yang relevan. Subjektif, bisa kurang mewakili populasi secara umum. Studi tentang pakar industri atau kelompok profesional tertentu.
Snowball Sampling Non-Probabilitas Responden awal merekomendasikan individu lain untuk dijadikan sampel. Cocok untuk populasi tersembunyi atau sulit dijangkau. Tidak bisa menggeneralisasi, bisa menyebabkan bias kebergantungan. Studi komunitas dengan isu sensitif seperti pengguna narkoba.

KESIMPULAN:
Pemilihan metode sampling bergantung pada tujuan penelitian, ketersediaan sumber daya, dan sifat populasi yang diteliti. Metode probabilitas lebih unggul dalam memberikan hasil yang dapat digeneralisasi, sedangkan metode non-probabilitas lebih efisien dan fleksibel, terutama ketika akses ke populasi terbatas.

6 Ukuran Sampel yang Diperlukan untuk MoE = 5

Perhitungan manual untuk menentukan ukuran sampel dengan Margin of Error (MoE) = 5% dalam populasi 500 orang, menggunakan koreksi populasi terbatas (Finite Population Correction - FPC).

6.1 Rumus Dasar MoE:

\[ MoE = Z \times \frac{\sigma}{\sqrt{n}} \]

Untuk ukuran sampel, digunakan rumus:
\[ n = \frac{Z^2 \times \sigma^2}{MoE^2} \]

Karena populasi terbatas, koreksi dilakukan dengan rumus:
\[ n_{\text{adj}} = \frac{n}{1 + \frac{n - 1}{N}} \]

Dimana:
- Z = 1.96 (untuk tingkat kepercayaan 95%)
- σ = 0.5 (estimasi deviasi standar untuk proporsi 50%)
- MoE = 0.05
- N = 500 (ukuran populasi)

6.2 Langkah Perhitungan:

  1. Hitung ukuran sampel awal (tanpa koreksi populasi):
    \[ n = \frac{(1.96)^2 \times (0.5)^2}{(0.05)^2} \]
    \[ n = \frac{3.8416 \times 0.25}{0.0025} \]
    \[ n = \frac{0.9604}{0.0025} = 384.16 \approx 385 \]

  2. Koreksi untuk populasi terbatas:
    \[ n_{\text{adj}} = \frac{385}{1 + \frac{385 - 1}{500}} \]
    \[ n_{\text{adj}} = \frac{385}{1 + \frac{384}{500}} \]
    \[ n_{\text{adj}} = \frac{385}{1 + 0.768} \]
    \[ n_{\text{adj}} = \frac{385}{1.768} \]
    \[ n_{\text{adj}} = 217.8 \approx 218 \]

6.3 Hasil Akhir:

Ukuran sampel yang diperlukan untuk MoE = 5% dalam populasi 500 orang adalah 218 responden.

7 Kesimpulan dan Rekomendasi

7.1 Kesimpulan

Dalam penelitian ini, berbagai metode probability sampling dan non-probability sampling telah dianalisis untuk mengevaluasi keakuratan serta efisiensinya dalam mengestimasi pengeluaran mahasiswa. Hasil analisis menunjukkan bahwa metode probability sampling lebih unggul dalam menghasilkan estimasi yang akurat dan dapat digeneralisasi ke seluruh populasi karena setiap individu memiliki peluang yang sama untuk terpilih sebagai sampel. Sebaliknya, metode non-probability sampling, meskipun lebih mudah dan cepat diterapkan, memiliki tingkat bias yang lebih tinggi yang dapat mempengaruhi keandalan hasil penelitian.

Di antara metode probability sampling, Stratified Sampling memberikan hasil yang paling representatif untuk populasi yang heterogen karena mampu menangkap variasi antar kelompok. Cluster Sampling, meskipun lebih hemat biaya dan waktu, dapat menghasilkan hasil yang kurang akurat jika klaster yang dipilih tidak cukup mencerminkan populasi secara keseluruhan. Systematic Sampling menawarkan efisiensi dalam pemilihan sampel, tetapi rentan terhadap bias jika terdapat pola tertentu dalam populasi. Simple Random Sampling (SRS) memberikan hasil yang tidak bias, tetapi kurang efektif untuk populasi heterogen karena tidak mempertimbangkan variasi antar kelompok. Multi-Stage Sampling berguna untuk populasi besar dan kompleks, tetapi memiliki margin of error yang lebih tinggi akibat pemilihan sampel yang dilakukan secara bertahap.

Di sisi lain, metode non-probability sampling lebih sering digunakan dalam penelitian eksploratif atau ketika keterbatasan sumber daya menjadi faktor utama. Convenience Sampling merupakan metode yang paling mudah diterapkan tetapi memiliki bias seleksi yang tinggi. Judgmental (Purposive) Sampling memungkinkan pemilihan sampel berdasarkan pertimbangan peneliti, tetapi berisiko tinggi terhadap subjektivitas. Quota Sampling berusaha mengurangi bias dengan menentukan proporsi tertentu dalam sampel, tetapi pemilihan individu di setiap kategori masih dapat dipengaruhi oleh bias seleksi. Snowball Sampling berguna untuk meneliti kelompok yang sulit dijangkau, tetapi memiliki risiko keterbatasan variasi dalam sampel.

Selain itu, perhitungan ukuran sampel yang diperlukan untuk mencapai Margin of Error (MoE) sebesar 5 menunjukkan bahwa hampir seluruh populasi harus disurvei agar tingkat kesalahan tetap kecil. Hal ini mengindikasikan bahwa semakin kecil MoE yang diinginkan, semakin besar ukuran sampel yang dibutuhkan untuk meningkatkan akurasi hasil penelitian. Oleh karena itu, kompromi antara ukuran sampel dan tingkat akurasi yang dapat diterima perlu diperhitungkan, terutama ketika sumber daya yang tersedia terbatas.

7.2 Rekomendasi

Berdasarkan hasil analisis yang dilakukan, beberapa rekomendasi yang dapat diterapkan dalam pemilihan metode sampling adalah sebagai berikut:

  1. Penggunaan probability sampling lebih disarankan jika penelitian bertujuan untuk mendapatkan hasil yang akurat dan dapat digeneralisasi ke seluruh populasi. Jika populasi bersifat heterogen, Stratified Sampling dapat menjadi metode terbaik untuk memastikan representasi yang lebih baik antar kelompok.

  2. Systematic Sampling dapat dipilih jika diperlukan efisiensi dalam pemilihan sampel, namun perlu dilakukan pengecekan terhadap kemungkinan adanya pola dalam data populasi agar tidak terjadi bias sistematis.

  3. Cluster Sampling dapat diterapkan dalam kondisi di mana penelitian mencakup wilayah yang luas atau populasi yang tersebar, tetapi pemilihan klaster harus dilakukan secara hati-hati untuk memastikan representasi yang baik.

  4. Simple Random Sampling (SRS) lebih cocok digunakan jika populasi bersifat homogen dan jumlah sumber daya yang tersedia cukup untuk memungkinkan pemilihan sampel secara acak tanpa hambatan operasional.

  5. Non-probability sampling dapat digunakan dalam situasi di mana penelitian bersifat eksploratif atau ketika keterbatasan sumber daya membuat probability sampling sulit diterapkan. Namun, peneliti harus menyadari potensi bias yang ada dan mempertimbangkan strategi mitigasi, seperti menggunakan kombinasi metode untuk meningkatkan validitas hasil penelitian.

  6. Penentuan ukuran sampel harus mempertimbangkan margin of error yang diinginkan serta keterbatasan sumber daya yang tersedia. Jika margin of error yang kecil diperlukan, maka jumlah sampel harus ditingkatkan, tetapi jika sumber daya terbatas, kompromi antara akurasi dan efisiensi harus dilakukan.

Dengan mempertimbangkan rekomendasi ini, pemilihan metode sampling yang tepat dapat membantu meningkatkan kualitas hasil penelitian, memastikan representasi yang lebih baik, dan mengurangi potensi bias yang dapat mempengaruhi kesimpulan akhir.

LS0tDQp0aXRsZTogIk1hcmdpbiBvZiBFcnJvciINCnN1YnRpdGxlOiAiVGVrbmlrIFN1cnZleSBkYW4gU2FtcGxpbmciDQphdXRob3I6IA0KICAtICJDaGVsbG8gRnJoaW5vIE1pa2UgTWFuZG9sYW5nICg1MjI0MDAzMSkiDQpkYXRlOiAgImByIGZvcm1hdChTeXMuRGF0ZSgpLCAnJUIgJWQsICVZJylgIg0Kb3V0cHV0Og0KICBybWRmb3JtYXRzOjpyZWFkdGhlZG93bjogICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9qdWJhL3JtZGZvcm1hdHMNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIHRodW1ibmFpbHM6IHRydWUNCiAgICBsaWdodGJveDogdHJ1ZQ0KICAgIGdhbGxlcnk6IHRydWUNCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUNCiAgICBsaWJfZGlyOiBsaWJzDQogICAgZGZfcHJpbnQ6ICJwYWdlZCINCiAgICBjb2RlX2ZvbGRpbmc6ICJzaG93Ig0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KLS0tDQoNCjxzdHlsZT4NCiAgYm9keSB7DQogICAgdGV4dC1hbGlnbjoganVzdGlmeTsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsNCiAgICBvdmVyZmxvdy14OiBhdXRvOw0KICAgIGZvbnQtZmFtaWx5OiBjdXJzaXZlOw0KICB9DQo8L3N0eWxlPg0KDQo8aW1nIGlkPSJmb3RvLWF1dGhvciIgc3JjPSJDOi9Vc2Vycy9VU0VSL0RvY3VtZW50cy9SQm94cGxvdC9pbWcvV2hhdHNBcHAgSW1hZ2UgMjAyNC0xMS0yNCBhdCAzLjI5LjQxIFBNLmpwZWciIGFsdD0iZm90byIgc3R5bGU9IndpZHRoOjMwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyI+DQoNCiMgUGVuZGFodWx1YW4NCg0KIyMgVHVqdWFuIFBlbmVsaXRpYW4NCg0KRGFsYW0gcGVuZWxpdGlhbiBpbmksIHBlcmJhbmRpbmdhbiBhbnRhcmEgUHJvYmFiaWxpdHkgU2FtcGxpbmcgZGFuIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZyBkaWFuYWxpc2lzIHVudHVrIG1lbWFoYW1pIGJhZ2FpbWFuYSBtYXNpbmctbWFzaW5nIG1ldG9kZSBtZW1lbmdhcnVoaSBNYXJnaW4gb2YgRXJyb3IgKE1vRSkgZGFsYW0gZXN0aW1hc2kgcGVuZ2VsdWFyYW4gbWFrYW5hbiBidWxhbmFuIG1haGFzaXN3YS4gRGVuZ2FuIG1lbmVsYWFoIGVmZWt0aXZpdGFzIGtlZHVhIHBlbmRla2F0YW4sIHBlbmVsaXRpYW4gaW5pIGJlcnVwYXlhIG1lbmdpZGVudGlmaWthc2kgdGVrbmlrIHNhbXBsaW5nIHlhbmcgbGViaWggYWt1cmF0IGRhbiBkYXBhdCBkaWFuZGFsa2FuIGRhbGFtIG1lbmdoYXNpbGthbiBlc3RpbWFzaSB5YW5nIGxlYmloIHByZXNpc2kuIEhhc2lsIGRhcmkgc3R1ZGkgaW5pIGRpaGFyYXBrYW4gbWVtYmVyaWthbiB3YXdhc2FuIHlhbmcga29tcHJlaGVuc2lmIGJhZ2kgcGVuZWxpdGkgZGFsYW0gbWVuZW50dWthbiBtZXRvZGUgcGVuZ2FtYmlsYW4gc2FtcGVsIHlhbmcgcGFsaW5nIHNlc3VhaSB1bnR1ayBwZW5lbGl0aWFuIHNlcnVwYSwgc2VoaW5nZ2Ega3VhbGl0YXMgZGF0YSBkYW4gdmFsaWRpdGFzIHRlbXVhbiBkYXBhdCBtZW5pbmdrYXQuDQoNCiMjIFBlbnRpbmdueWEgTW9FIGRhbGFtIHNhbXBsaW5nDQoNCk1hcmdpbiBvZiBFcnJvciAoTW9FKSBtZW1haW5rYW4gcGVyYW4ga3J1c2lhbCBkYWxhbSBtZXRvZGUgc2FtcGxpbmcga2FyZW5hIG1lbmVudHVrYW4gc2VqYXVoIG1hbmEgaGFzaWwgc2FtcGVsIGRhcGF0IG1ld2FraWxpIHBvcHVsYXNpIHNlY2FyYSBha3VyYXQuIE1vRSB5YW5nIGxlYmloIGtlY2lsIG1lbnVuanVra2FuIGVzdGltYXNpIHlhbmcgbGViaWggcHJlc2lzaSwgc2VtZW50YXJhIE1vRSB5YW5nIGJlc2FyIGRhcGF0IG1lbmdpbmRpa2FzaWthbiBrZXRpZGFrcGFzdGlhbiB5YW5nIGxlYmloIHRpbmdnaSBkYWxhbSBoYXNpbCBwZW5lbGl0aWFuLiBEYWxhbSBrb250ZWtzIFByb2JhYmlsaXR5IFNhbXBsaW5nLCBNb0UgZGFwYXQgZGlrb250cm9sIGRlbmdhbiBsZWJpaCBiYWlrIGthcmVuYSBzZXRpYXAgZWxlbWVuIHBvcHVsYXNpIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBkaWtldGFodWkgdW50dWsgZGlwaWxpaCwgbWVtdW5na2lua2FuIHBlcmhpdHVuZ2FuIHN0YXRpc3RpayB5YW5nIGxlYmloIHZhbGlkLiBTZWJhbGlrbnlhLCBwYWRhIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZywgTW9FIGNlbmRlcnVuZyBsZWJpaCBzdWxpdCBkaXVrdXIga2FyZW5hIHBlbWlsaWhhbiBzYW1wZWwgdGlkYWsgYWNhaywgeWFuZyBkYXBhdCBtZW5pbmdrYXRrYW4gYmlhcyBkYW4gbWVuZ3VyYW5naSBrZWFuZGFsYW4gaGFzaWwuIE9sZWgga2FyZW5hIGl0dSwgbWVtYWhhbWkgZGFuIG1lbmdlbG9sYSBNb0Ugc2FuZ2F0IHBlbnRpbmcgZGFsYW0gbWVtYXN0aWthbiBrdWFsaXRhcyBkYXRhIGRhbiB2YWxpZGl0YXMga2VzaW1wdWxhbiBkYWxhbSBwZW5lbGl0aWFuIGJlcmJhc2lzIHNhbXBsaW5nLg0KDQojIE1ldG9kZSBTYW1wbGluZw0KDQpQb3B1bGFzaSBkYWxhbSBwZW5lbGl0aWFuIGluaSB0ZXJkaXJpIGRhcmkgNTAwIG1haGFzaXN3YSB5YW5nIGRpcGlsaWggdW50dWsgbWVyZXByZXNlbnRhc2lrYW4gdmFyaWFzaSBwZW5nZWx1YXJhbiBtYWthbmFuIGJ1bGFuYW4gbWVyZWthLiBEYXRhIHlhbmcgZGlrdW1wdWxrYW4gbWVuY2FrdXAgaW5mb3JtYXNpIG1lbmdlbmFpIGp1bWxhaCBwZW5nZWx1YXJhbiwgamVuaXMga2VsYW1pbiwgZGFuIHRpbmdrYXQgcGVuZGlkaWthbiAoUzEgYXRhdSBTMikuIFJlbnRhbmcgcGVuZ2VsdWFyYW4gYmVyYWRhIGFudGFyYSBScDEuMjAwLjAwMCBoaW5nZ2EgUnAyLjUwMC4wMDAgcGVyIGJ1bGFuLCBtZW5jZXJtaW5rYW4gcGVyYmVkYWFuIGdheWEgaGlkdXAgZGFuIHByZWZlcmVuc2kga29uc3Vtc2kgbWFoYXNpc3dhLiBEZW5nYW4gbWVtcGVydGltYmFuZ2thbiBmYWt0b3ItZmFrdG9yIGluaSwgcGVuZWxpdGlhbiBpbmkgYmVydHVqdWFuIHVudHVrIG1lbWFoYW1pIHBvbGEgcGVuZ2VsdWFyYW4gbWFoYXNpc3dhIHNlcnRhIG1lbWJhbmRpbmdrYW4gZWZla3Rpdml0YXMgbWV0b2RlIFByb2JhYmlsaXR5IFNhbXBsaW5nIGRhbiBOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcgZGFsYW0gbWVtcGVya2lyYWthbiBtYXJnaW4gb2YgZXJyb3IgKE1vRSkgcGFkYSBlc3RpbWFzaSB0ZXJzZWJ1dC4NCg0KYGBge3Igc2V0dXAsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoa25pdHIpDQojIEJ1YXQgZGF0YSBmcmFtZSBwb3B1bGFzaQ0Kc2V0LnNlZWQoNDIpDQpudW1fc3R1ZGVudHMgPC0gNTAwDQoNCmRmX3BvcHVsYXNpIDwtIGRhdGEuZnJhbWUoDQogIElEX01haGFzaXN3YSA9IHNwcmludGYoIiUwM2QiLCAxOm51bV9zdHVkZW50cyksDQogIFBlbmdlbHVhcmFuID0gc2FtcGxlKDEyMDAwMDA6MjUwMDAwMCwgbnVtX3N0dWRlbnRzLCByZXBsYWNlID0gVFJVRSksDQogIEplbmlzX0tlbGFtaW4gPSBzYW1wbGUoYygiTGFraS1sYWtpIiwgIlBlcmVtcHVhbiIpLCBudW1fc3R1ZGVudHMsIHJlcGxhY2UgPSBUUlVFKSwNCiAgVGluZ2thdF9QZW5kaWRpa2FuID0gc2FtcGxlKGMoIlMxIiwgIlMyIiksIG51bV9zdHVkZW50cywgcmVwbGFjZSA9IFRSVUUsIHByb2IgPSBjKDAuOCwgMC4yKSkNCikNCg0KIyBUYW1waWxrYW4gMTAgZGF0YSBwZXJ0YW1hDQprYWJsZShoZWFkKGRmX3BvcHVsYXNpLCAxMCkpDQoNCmBgYA0KDQpgYGB7ciwgZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9DQpnZ3Bsb3QoZGZfcG9wdWxhc2ksIGFlcyh4ID0gUGVuZ2VsdWFyYW4pKSArDQogIGdlb21faGlzdG9ncmFtKGJpbndpZHRoID0gMTAwMDAwLCBmaWxsID0gImJsdWUiLCBjb2xvciA9ICJ3aGl0ZSIsIGFscGhhID0gMC43KSArDQogIGxhYnModGl0bGUgPSAiRGlzdHJpYnVzaSBQZW5nZWx1YXJhbiBNYWthbmFuIEJ1bGFuYW4gTWFoYXNpc3dhIiwNCiAgICAgICB4ID0gIlBlbmdlbHVhcmFuIChScCkiLA0KICAgICAgIHkgPSAiRnJla3VlbnNpIikgKw0KICB0aGVtZV9taW5pbWFsKCkNCg0KYGBgDQoNCiMjIFByb2JhYmlsaXR5IFNhbXBsaW5nDQoNCiMjIyBTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpDQpNZW5nZ3VuYWthbiBtZXRvZGUgU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSB1bnR1ayBtZW5nYW1iaWwgc2FtcGVsIHNlYmFueWFrIDEwMCBtYWhhc2lzd2EgZGFyaSBwb3B1bGFzaSA1MDAgbWFoYXNpc3dhLiBUZWtuaWsgaW5pIG1lbWFzdGlrYW4gYmFod2Egc2V0aWFwIGluZGl2aWR1IG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIHRlcnBpbGloLCBzZWhpbmdnYSBzYW1wZWwgeWFuZyBkaWhhc2lsa2FuIHJlcHJlc2VudGF0aWYgdGVyaGFkYXAgcG9wdWxhc2kuIFBlbmdhbWJpbGFuIHNhbXBlbCBkaWxha3VrYW4gc2VjYXJhIGFjYWsgbWVuZ2d1bmFrYW4gZnVuZ3NpIGBzYW1wbGVfbigpYCBkYWxhbSBSLCBkZW5nYW4gYHNldC5zZWVkKDEyMylgIHVudHVrIG1lbWFzdGlrYW4gaGFzaWwgeWFuZyBrb25zaXN0ZW4uIFNldGVsYWggc2FtcGVsIGRpcGVyb2xlaCwgZGlzdHJpYnVzaSBwZW5nZWx1YXJhbiBtYWhhc2lzd2EgZGl2aXN1YWxpc2FzaWthbiBkYWxhbSBiZW50dWsgaGlzdG9ncmFtIGd1bmEgbWVtYWhhbWkgcG9sYSBwZW5nZWx1YXJhbiBtYWthbmFuIGJ1bGFuYW4gZGFsYW0gc2FtcGVsIHlhbmcgZGlwaWxpaC4NCmBgYHtyLGVjaG89RkFMU0Usd2FybmluZz1GQUxTRSxtZXNzYWdlPUZBTFNFfQ0KIyBUZW50dWthbiB1a3VyYW4gc2FtcGVsDQpzYW1wbGVfc2l6ZSA8LSAxMDANCg0KIyBMYWt1a2FuIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcNCnNldC5zZWVkKDEyMykgICMgVW50dWsgcmVwcm9kdWt0aWZpdGFzDQpkZl9zYW1wbGUgPC0gZGZfcG9wdWxhc2kgJT4lIHNhbXBsZV9uKHNhbXBsZV9zaXplKQ0KDQojIFRhbXBpbGthbiAxMCBkYXRhIHBlcnRhbWEgc2FtcGVsDQprYWJsZShoZWFkKGRmX3NhbXBsZSwgMTApKQ0KDQpgYGANCg0KIyMjIFN0cmF0aWZpZWQgU2FtcGxpbmcNClN0cmF0aWZpZWQgU2FtcGxpbmcgYWRhbGFoIG1ldG9kZSBwZW5nYW1iaWxhbiBzYW1wZWwgZGkgbWFuYSBwb3B1bGFzaSBkaWJhZ2kga2UgZGFsYW0gYmViZXJhcGEga2Vsb21wb2sgYXRhdSBzdHJhdGEgYmVyZGFzYXJrYW4ga2FyYWt0ZXJpc3RpayB0ZXJ0ZW50dSwgc2VwZXJ0aSAqKmplbmlzIGtlbGFtaW4qKiBkYW4gKip0aW5na2F0IHBlbmRpZGlrYW4qKiwgc2ViZWx1bSBkaWxha3VrYW4gcGVtaWxpaGFuIHNhbXBlbCBzZWNhcmEgYWNhayBkYXJpIHNldGlhcCBzdHJhdGEuIERlbmdhbiBjYXJhIGluaSwgc2V0aWFwIGtlbG9tcG9rIGRhbGFtIHBvcHVsYXNpIG1lbmRhcGF0a2FuIHJlcHJlc2VudGFzaSB5YW5nIHByb3BvcnNpb25hbCwgc2VoaW5nZ2EgbWVuaW5na2F0a2FuIGFrdXJhc2kgZXN0aW1hc2kgZGFuIG1lbmd1cmFuZ2kgYmlhcyBkaWJhbmRpbmdrYW4gU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKS4gRGFsYW0gcGVuZWxpdGlhbiBpbmksIG1ldG9kZSBpbmkgZGlndW5ha2FuIHVudHVrIG1lbXBlcmtpcmFrYW4gKipwZW5nZWx1YXJhbiBtYWthbmFuIG1haGFzaXN3YSoqLCBtZW1hc3Rpa2FuIGJhaHdhIHZhcmlhc2kgcGVuZ2VsdWFyYW4gYW50YXIga2Vsb21wb2sgdGVyYWtvbW9kYXNpIGRlbmdhbiBiYWlrLCBzZWhpbmdnYSBoYXNpbCBhbmFsaXNpcyBsZWJpaCBha3VyYXQgZGFuIGRhcGF0IGRpZ2VuZXJhbGlzYXNpa2FuIGRlbmdhbiBsZWJpaCBiYWlrIGtlIHNlbHVydWggcG9wdWxhc2kuDQpgYGB7cixlY2hvPUZBTFNFLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCiMgVGVudHVrYW4gdWt1cmFuIHNhbXBlbCB0b3RhbA0Kc2FtcGxlX3NpemUgPC0gMTAwDQoNCiMgSGl0dW5nIHByb3BvcnNpIHRpYXAgc3RyYXRhIGRhbGFtIHBvcHVsYXNpDQpkZl9zdHJhdGEgPC0gZGZfcG9wdWxhc2kgJT4lDQogIGdyb3VwX2J5KEplbmlzX0tlbGFtaW4sIFRpbmdrYXRfUGVuZGlkaWthbikgJT4lDQogIHN1bW1hcmlzZShOID0gbigpLCAuZ3JvdXBzID0gImRyb3AiKQ0KDQpkZl9zdHJhdGEgPC0gZGZfc3RyYXRhICU+JQ0KICBtdXRhdGUocHJvcG9yc2kgPSBOIC8gc3VtKE4pLCANCiAgICAgICAgIHNhbXBsZV9uID0gcm91bmQocHJvcG9yc2kgKiBzYW1wbGVfc2l6ZSkpDQoNCiMgTGFrdWthbiBTdHJhdGlmaWVkIFNhbXBsaW5nIGRlbmdhbiBkcGx5ciAmIHB1cnJyDQpzZXQuc2VlZCgxMjMpICAjIFVudHVrIGhhc2lsIHlhbmcga29uc2lzdGVuDQoNCmRmX3NhbXBsZSA8LSBkZl9wb3B1bGFzaSAlPiUNCiAgZ3JvdXBfc3BsaXQoSmVuaXNfS2VsYW1pbiwgVGluZ2thdF9QZW5kaWRpa2FuKSAlPiUgICMgTWVtYmFnaSBkYXRhIGJlcmRhc2Fya2FuIHN0cmF0YQ0KICBtYXAyX2RmcihkZl9zdHJhdGEkc2FtcGxlX24sIH4gc2FtcGxlX24oLngsIC55KSkgICAjIE1lbmdhbWJpbCBzYW1wZWwgc2VzdWFpIHVrdXJhbiBzdHJhdGENCg0KIyBUYW1waWxrYW4gMTAgZGF0YSBwZXJ0YW1hIHNhbXBlbA0Ka2FibGUoaGVhZChkZl9zYW1wbGUsIDEwKSkNCg0KYGBgDQojIyMgU3lzdGVtYXRpYyBTYW1wbGluZw0KTWV0b2RlIFN5c3RlbWF0aWMgU2FtcGxpbmcgbWVtYXN0aWthbiBiYWh3YSBzYW1wZWwgZGlhbWJpbCBzZWNhcmEgbWVyYXRhIGRhcmkgcG9wdWxhc2kgZGVuZ2FuIG1lbmdndW5ha2FuIGludGVydmFsIHRldGFwLiBUZWtuaWsgaW5pIGxlYmloIHNlZGVyaGFuYSBkaWJhbmRpbmdrYW4gbWV0b2RlIGFjYWsgc2VwZW51aG55YSB0ZXRhcGkgdGV0YXAgbWVuZ2hhc2lsa2FuIHNhbXBlbCB5YW5nIHJlcHJlc2VudGF0aWYsIHRlcnV0YW1hIGppa2EgcG9wdWxhc2kgdGlkYWsgbWVtaWxpa2kgcG9sYSB0ZXJ0ZW50dSB5YW5nIGRhcGF0IG1lbnllYmFia2FuIGJpYXMuDQoNCg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9DQojIFRlbnR1a2FuIGp1bWxhaCBzYW1wZWwgeWFuZyBkaWluZ2lua2FuDQpzYW1wbGVfc2l6ZSA8LSAxMDANCg0KIyBIaXR1bmcgaW50ZXJ2YWwgc2FtcGxpbmcNCmsgPC0gZmxvb3IobnJvdyhkZl9wb3B1bGFzaSkgLyBzYW1wbGVfc2l6ZSkNCg0KIyBQaWxpaCB0aXRpayBhd2FsIHNlY2FyYSBhY2FrIGRhbGFtIHJlbnRhbmcgWzEsIGtdDQpzZXQuc2VlZCgxMjMpDQpzdGFydCA8LSBzYW1wbGUoMTprLCAxKQ0KDQojIEFtYmlsIHNhbXBlbCBiZXJkYXNhcmthbiBpbnRlcnZhbA0KZGZfc2FtcGxlX3N5cyA8LSBkZl9wb3B1bGFzaVtzZXEoc3RhcnQsIG5yb3coZGZfcG9wdWxhc2kpLCBieSA9IGspLCBdDQoNCiMgVGFtcGlsa2FuIDEwIGRhdGEgcGVydGFtYSBzYW1wZWwNCmthYmxlKGhlYWQoZGZfc2FtcGxlX3N5cywgMTApKQ0KDQpgYGANCg0KIyMjIENsdXN0ZXIgU2FtcGxpbmcNCkNsdXN0ZXIgU2FtcGxpbmcgYWRhbGFoIG1ldG9kZSBwZW5nYW1iaWxhbiBzYW1wZWwgZGVuZ2FuIG1lbWJhZ2kgcG9wdWxhc2kga2UgZGFsYW0gYmViZXJhcGEga2Vsb21wb2sgKGtsYXN0ZXIpLCBsYWx1IG1lbWlsaWggYmViZXJhcGEga2xhc3RlciBzZWNhcmEgYWNhayB1bnR1ayBkaWFuYWxpc2lzIHNlY2FyYSBrZXNlbHVydWhhbi4gVGVrbmlrIGluaSBkaWd1bmFrYW4gc2FhdCBwb3B1bGFzaSB0ZXJzZWJhciBsdWFzIGF0YXUgc3VsaXQgZGlha3NlcyBzZWNhcmEgaW5kaXZpZHVhbC4NCg0KRGFsYW0gcGVuZWxpdGlhbiBpbmksIG1haGFzaXN3YSBkaWtlbG9tcG9ra2FuIGJlcmRhc2Fya2FuIFRpbmdrYXQgUGVuZGlkaWthbiAoUzEgZGFuIFMyKS4gU2V0ZWxhaCBpdHUsIHNhbGFoIHNhdHUga2xhc3RlciBkaXBpbGloIHNlY2FyYSBhY2FrLCBkYW4gc2VsdXJ1aCBhbmdnb3RhIGtsYXN0ZXIgdGVyc2VidXQgZGlqYWRpa2FuIHNhbXBlbC4NCg0KYGBge3IsZWNobz1GQUxTRSx3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0V9DQojIE1lbmVudHVrYW4ga2xhc3RlciBiZXJkYXNhcmthbiBUaW5na2F0IFBlbmRpZGlrYW4NCmRmX2NsdXN0ZXJlZCA8LSBkZl9wb3B1bGFzaSAlPiUgZ3JvdXBfYnkoVGluZ2thdF9QZW5kaWRpa2FuKQ0KDQojIFBpbGloIHNhbGFoIHNhdHUga2xhc3RlciBzZWNhcmEgYWNhaw0Kc2V0LnNlZWQoMTIzKQ0Kc2VsZWN0ZWRfY2x1c3RlciA8LSBzYW1wbGUodW5pcXVlKGRmX3BvcHVsYXNpJFRpbmdrYXRfUGVuZGlkaWthbiksIDEpDQoNCiMgQW1iaWwgc2VtdWEgZGF0YSBkYXJpIGtsYXN0ZXIgdGVycGlsaWgNCmRmX3NhbXBsZV9jbHVzdGVyIDwtIGRmX3BvcHVsYXNpICU+JSBmaWx0ZXIoVGluZ2thdF9QZW5kaWRpa2FuID09IHNlbGVjdGVkX2NsdXN0ZXIpDQoNCiMgVGFtcGlsa2FuIGtsYXN0ZXIgeWFuZyBkaXBpbGloDQpzZWxlY3RlZF9jbHVzdGVyDQoNCiMgVGFtcGlsa2FuIDEwIGRhdGEgcGVydGFtYSBzYW1wZWwNCmthYmxlKGhlYWQoZGZfc2FtcGxlX2NsdXN0ZXIsIDEwKSkNCg0KYGBgDQojIyMgTXVsdGktc3RhZ2UgU2FtcGxpbmcNCk11bHRpLVN0YWdlIFNhbXBsaW5nIGFkYWxhaCBtZXRvZGUgcGVuZ2FtYmlsYW4gc2FtcGVsIGJlcnRpbmdrYXQsIGRpIG1hbmEgcHJvc2VzIHNhbXBsaW5nIGRpbGFrdWthbiBkYWxhbSBiZWJlcmFwYSB0YWhhcC4gVGVrbmlrIGluaSBkaWd1bmFrYW4gc2FhdCBwb3B1bGFzaSB0ZXJsYWx1IGJlc2FyIHVudHVrIGRpYWtzZXMgbGFuZ3N1bmcsIHNlaGluZ2dhIGRpbGFrdWthbiBzZWxla3NpIGJlcnRpbmdrYXQgc2ViZWx1bSBtZW5lbnR1a2FuIHNhbXBlbCBha2hpci4NCg0KRGFsYW0gcGVuZWxpdGlhbiBpbmk6DQoNCi0gVGFoYXAgMSDihpIgUG9wdWxhc2kgbWFoYXNpc3dhIGRpYmFnaSBtZW5qYWRpIGtsYXN0ZXIgYmVyZGFzYXJrYW4gdGluZ2thdCBwZW5kaWRpa2FuIChTMSBkYW4gUzIpLg0KLSBUYWhhcCAyIOKGkiBEYXJpIGtsYXN0ZXIgeWFuZyB0ZXJwaWxpaCwgZGlsYWt1a2FuIFNpbXBsZSBSYW5kb20gU2FtcGxpbmcgKFNSUykgdW50dWsgbWVtaWxpaCBzYW1wZWwgYWtoaXIuDQoNCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyBUYWhhcCAxOiBQaWxpaCBzYXR1IGtsYXN0ZXIgc2VjYXJhIGFjYWsgKFMxIGF0YXUgUzIpDQpzZXQuc2VlZCgxMjMpDQpzZWxlY3RlZF9jbHVzdGVyIDwtIHNhbXBsZSh1bmlxdWUoZGZfcG9wdWxhc2kkVGluZ2thdF9QZW5kaWRpa2FuKSwgMSkNCg0KIyBBbWJpbCBzZW11YSBkYXRhIGRhcmkga2xhc3RlciB0ZXJwaWxpaA0KZGZfY2x1c3RlcmVkIDwtIGRmX3BvcHVsYXNpICU+JSBmaWx0ZXIoVGluZ2thdF9QZW5kaWRpa2FuID09IHNlbGVjdGVkX2NsdXN0ZXIpDQoNCiMgVGFoYXAgMjogTGFrdWthbiBTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpIGRhcmkga2xhc3RlciB5YW5nIGRpcGlsaWgNCnNldC5zZWVkKDQ1NikNCnNhbXBsZV9zaXplIDwtIDUwICAjIFRlbnR1a2FuIHVrdXJhbiBzYW1wZWwgYWtoaXINCmRmX3NhbXBsZV9tdWx0aXN0YWdlIDwtIGRmX2NsdXN0ZXJlZCAlPiUgc2FtcGxlX24oc2FtcGxlX3NpemUpDQoNCiMgVGFtcGlsa2FuIGtsYXN0ZXIgeWFuZyBkaXBpbGloDQpzZWxlY3RlZF9jbHVzdGVyDQoNCiMgVGFtcGlsa2FuIDEwIGRhdGEgcGVydGFtYSBzYW1wZWwgYWtoaXINCmthYmxlKGhlYWQoZGZfc2FtcGxlX211bHRpc3RhZ2UsIDEwKSkNCg0KYGBgDQoNCiMjIE5vbi1Qcm9iYWJpbGl0eSBTYW1wbGluZw0KDQojIyMgQ29udmVuaWVuY2UgU2FtcGxpbmcNCkNvbnZlbmllbmNlIFNhbXBsaW5nIGFkYWxhaCBtZXRvZGUgbm9uLXByb2JhYmlsaXR5IHNhbXBsaW5nIHlhbmcgbWVtaWxpaCBzYW1wZWwgYmVyZGFzYXJrYW4ga2VtdWRhaGFuIGFrc2VzIGRhbiBrZXRlcnNlZGlhYW4sIGJ1a2FuIHNlY2FyYSBhY2FrLiBNZXRvZGUgaW5pIHNlcmluZyBkaWd1bmFrYW4ga2V0aWthIGtldGVyYmF0YXNhbiB3YWt0dSwgYmlheWEsIGF0YXUgc3VtYmVyIGRheWEgbWVtYnVhdCBtZXRvZGUgc2FtcGxpbmcgbGFpbiBzdWxpdCBkaXRlcmFwa2FuLg0KDQpEYWxhbSBwZW5lbGl0aWFuIGluaSwgc2FtcGVsIGRpYW1iaWwgZGFyaSBtYWhhc2lzd2EgeWFuZyBkYXBhdCBkaWphbmdrYXUgZGVuZ2FuIG11ZGFoLCBtaXNhbG55YSB5YW5nIGJlcmFkYSBkYWxhbSBzYXR1IGdydXAgZGlza3VzaSBhdGF1IHlhbmcgbWVyZXNwb25zIHN1cnZlaSBsZWJpaCBjZXBhdC4NCmBgYHtyLCBlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQ0KIyBCdWF0IGRhdGEgZnJhbWUgcG9wdWxhc2kNCnNldC5zZWVkKDQyKQ0KbnVtX3N0dWRlbnRzIDwtIDUwMA0KDQpkZl9wb3B1bGFzaSA8LSBkYXRhLmZyYW1lKA0KICBJRF9NYWhhc2lzd2EgPSBzcHJpbnRmKCIlMDNkIiwgMTpudW1fc3R1ZGVudHMpLA0KICBQZW5nZWx1YXJhbiA9IHNhbXBsZSgxMjAwMDAwOjI1MDAwMDAsIG51bV9zdHVkZW50cywgcmVwbGFjZSA9IFRSVUUpLA0KICBKZW5pc19LZWxhbWluID0gc2FtcGxlKGMoIkxha2ktbGFraSIsICJQZXJlbXB1YW4iKSwgbnVtX3N0dWRlbnRzLCByZXBsYWNlID0gVFJVRSksDQogIFRpbmdrYXRfUGVuZGlkaWthbiA9IHNhbXBsZShjKCJTMSIsICJTMiIpLCBudW1fc3R1ZGVudHMsIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gYygwLjgsIDAuMikpDQopDQoNCiMgVGFtcGlsa2FuIDEwIGRhdGEgcGVydGFtYSBwb3B1bGFzaQ0Ka2FibGUoaGVhZChkZl9wb3B1bGFzaSwgMTApKQ0KDQpgYGANCg0KIyMjIFF1b3RhIFNhbXBsaW5nDQogUXVvdGEgU2FtcGxpbmcgYWRhbGFoIHRla25payBwZW5nYW1iaWxhbiBzYW1wZWwgZGFsYW0gKipOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiBkaSBtYW5hIHNhbXBlbCBkaXBpbGloIGJlcmRhc2Fya2FuIHByb3BvcnNpIGF0YXUga3VvdGEgdGVydGVudHUgZGFyaSBwb3B1bGFzaS4gRGFsYW0gbWV0b2RlIGluaSwgcGVuZWxpdGkgbWVuZW50dWthbiBqdW1sYWggaW5kaXZpZHUgZGFyaSBzZXRpYXAga2F0ZWdvcmkgKG1pc2FsbnlhIGJlcmRhc2Fya2FuIGplbmlzIGtlbGFtaW4sIHRpbmdrYXQgcGVuZGlkaWthbiwgYXRhdSBmYWt0b3IgbGFpbm55YSkgYWdhciByZXByZXNlbnRhdGlmIHRlcmhhZGFwIHBvcHVsYXNpIHlhbmcgZGl0ZWxpdGkuICANCg0KUGFkYSBpbXBsZW1lbnRhc2kgZGkgYmF3YWg6ICANCjEuICoqTWVtYnVhdCBwb3B1bGFzaSoqIHRlcmRpcmkgZGFyaSAqKjUwMCBtYWhhc2lzd2EqKiBkZW5nYW4gKioyNTAgbGFraS1sYWtpKiogZGFuICoqMjUwIHBlcmVtcHVhbioqLiAgDQoyLiAqKk1lbmVudHVrYW4ga3VvdGEqKiwgeWFpdHUgbWVtaWxpaCAqKjEwIGxha2ktbGFraSoqIGRhbiAqKjEwIHBlcmVtcHVhbioqIHNlY2FyYSBsYW5nc3VuZyBkYXJpIGRhdGFzZXQuICANCjMuICoqTWVuZ2dhYnVuZ2thbiBzYW1wZWwqKiBkYXJpIGtlZHVhIGthdGVnb3JpIHVudHVrIG1lbWJlbnR1ayAqKlF1b3RhIFNhbXBsZSoqIHlhbmcgZGlndW5ha2FuIGRhbGFtIGFuYWxpc2lzLiAgDQoNCktldW5nZ3VsYW4gbWV0b2RlIGluaSBhZGFsYWgga2VtdWRhaGFubnlhIGRhbGFtICoqbWVueWVzdWFpa2FuIHNhbXBlbCBkZW5nYW4ga2FyYWt0ZXJpc3RpayBwb3B1bGFzaSoqLCB0ZXRhcGkga2VsZW1haGFubnlhIGFkYWxhaCAqKnBlbWlsaWhhbiBpbmRpdmlkdSBkYWxhbSBzZXRpYXAga2F0ZWdvcmkgdGlkYWsgYWNhayoqLCBzZWhpbmdnYSBkYXBhdCBtZW55ZWJhYmthbiBiaWFzIGRhbGFtIGhhc2lsIHBlbmVsaXRpYW4uDQoNCiMjICoqSW1wb3J0IERhdGFzZXQgJiBQb3B1bGFzaSoqDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgTG9hZCBsaWJyYXJ5DQpsaWJyYXJ5KGRwbHlyKQ0KDQojIE1lbWJ1YXQgZGF0YXNldCBkZW5nYW4gNTAwIGluZGl2aWR1ICgyNTAgTGFraS1sYWtpLCAyNTAgUGVyZW1wdWFuKQ0KZGZfcG9wdWxhc2kgPC0gZGF0YS5mcmFtZSgNCiAgSUQgPSAxOjUwMCwNCiAgTmFtYSA9IHBhc3RlMCgiTWFoYXNpc3dhXyIsIDE6NTAwKSwNCiAgSmVuaXNfS2VsYW1pbiA9IGMocmVwKCJMYWtpLWxha2kiLCAyNTApLCByZXAoIlBlcmVtcHVhbiIsIDI1MCkpDQopDQoNCiMgTWVuZW50dWthbiBrdW90YTogMTAgTGFraS1sYWtpIGRhbiAxMCBQZXJlbXB1YW4NCnF1b3RhX2xha2kgPC0gZGZfcG9wdWxhc2kgJT4lIGZpbHRlcihKZW5pc19LZWxhbWluID09ICJMYWtpLWxha2kiKSAlPiUgaGVhZCgxMCkNCnF1b3RhX3BlcmVtcHVhbiA8LSBkZl9wb3B1bGFzaSAlPiUgZmlsdGVyKEplbmlzX0tlbGFtaW4gPT0gIlBlcmVtcHVhbiIpICU+JSBoZWFkKDEwKQ0KDQojIE1lbmdnYWJ1bmdrYW4gc2FtcGVsIGJlcmRhc2Fya2FuIGt1b3RhDQpxdW90YV9zYW1wbGUgPC0gYmluZF9yb3dzKHF1b3RhX2xha2ksIHF1b3RhX3BlcmVtcHVhbikNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCBRdW90YSBTYW1wbGluZw0KcXVvdGFfc2FtcGxlDQoNCmBgYA0KDQojIyMgSnVkZ21lbnRhbCAoUHVycG9zaXZlKSBTYW1wbGluZw0KDQpKdWRnbWVudGFsIChQdXJwb3NpdmUpIFNhbXBsaW5nIGFkYWxhaCB0ZWtuaWsgZGFsYW0gKipOb24tUHJvYmFiaWxpdHkgU2FtcGxpbmcqKiwgZGkgbWFuYSBzYW1wZWwgZGlwaWxpaCBiZXJkYXNhcmthbiAqKmtyaXRlcmlhIHRlcnRlbnR1KiogeWFuZyBkaXRldGFwa2FuIG9sZWggcGVuZWxpdGkgdW50dWsgbWVuZGFwYXRrYW4gZGF0YSB5YW5nIHBhbGluZyByZWxldmFuIGRlbmdhbiB0dWp1YW4gcGVuZWxpdGlhbi4gIA0KDQpEYWxhbSBrb2RlIGRpIGF0YXM6ICANCjEuICoqRGlidWF0IHBvcHVsYXNpKiogc2ViYW55YWsgKio1MDAgbWFoYXNpc3dhKiogZGVuZ2FuIHZhcmlhYmVsICoqSmVuaXMgS2VsYW1pbiwgVGluZ2thdCBQZW5kaWRpa2FuLCBkYW4gUGVuZ2VsdWFyYW4qKi4gIA0KMi4gKipNZW5lbnR1a2FuIGtyaXRlcmlhKiosIHlhaXR1IG1lbWlsaWggKiptYWhhc2lzd2EgUzIqKiBkZW5nYW4gKipwZW5nZWx1YXJhbiBkaSBhdGFzIFJwMi4wMDAuMDAwKiouICANCjMuICoqTWVuYW1waWxrYW4gc2FtcGVsKiogeWFuZyBzZXN1YWkgZGVuZ2FuIGtyaXRlcmlhIHRlcnNlYnV0LiAgDQoNCk1ldG9kZSBpbmkgZWZla3RpZiB1bnR1ayBwZW5lbGl0aWFuIHlhbmcgbWVtZXJsdWthbiAqKnJlc3BvbmRlbiBzcGVzaWZpayoqLCB0ZXRhcGkgbWVtaWxpa2kgcG90ZW5zaSAqKmJpYXMgc3ViamVrdGlmKiosIGthcmVuYSBwZW1pbGloYW4gc2FtcGVsIGJlcmdhbnR1bmcgcGFkYSBrZXB1dHVzYW4gcGVuZWxpdGkuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KIyBMb2FkIGxpYnJhcnkNCmxpYnJhcnkoZHBseXIpDQoNCiMgTWVtYnVhdCBkYXRhc2V0IGRlbmdhbiA1MDAgaW5kaXZpZHUNCnNldC5zZWVkKDQyKQ0KZGZfcG9wdWxhc2kgPC0gZGF0YS5mcmFtZSgNCiAgSUQgPSAxOjUwMCwNCiAgTmFtYSA9IHBhc3RlMCgiTWFoYXNpc3dhXyIsIDE6NTAwKSwNCiAgSmVuaXNfS2VsYW1pbiA9IHNhbXBsZShjKCJMYWtpLWxha2kiLCAiUGVyZW1wdWFuIiksIDUwMCwgcmVwbGFjZSA9IFRSVUUpLA0KICBUaW5na2F0X1BlbmRpZGlrYW4gPSBzYW1wbGUoYygiUzEiLCAiUzIiKSwgNTAwLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IGMoMC44LCAwLjIpKSwNCiAgUGVuZ2VsdWFyYW4gPSBzYW1wbGUoMTIwMDAwMDoyNTAwMDAwLCA1MDAsIHJlcGxhY2UgPSBUUlVFKQ0KKQ0KDQojIE1lbmVudHVrYW4ga3JpdGVyaWEgcHVycG9zaXZlIHNhbXBsaW5nDQojIE1pc2FsbnlhOiBNYWhhc2lzd2EgUzIgZGVuZ2FuIHBlbmdlbHVhcmFuIGRpIGF0YXMgUnAyLjAwMC4wMDANCnB1cnBvc2l2ZV9zYW1wbGUgPC0gZGZfcG9wdWxhc2kgJT4lDQogIGZpbHRlcihUaW5na2F0X1BlbmRpZGlrYW4gPT0gIlMyIiAmIFBlbmdlbHVhcmFuID4gMjAwMDAwMCkNCg0KIyBNZW5hbXBpbGthbiBoYXNpbCBKdWRnbWVudGFsIChQdXJwb3NpdmUpIFNhbXBsaW5nDQpwdXJwb3NpdmVfc2FtcGxlDQpgYGANCg0KIyMjIFNub3diYWxsIFNhbXBsaW5nDQogDQpTbm93YmFsbCBTYW1wbGluZyBhZGFsYWggdGVrbmlrIGRhbGFtICoqTm9uLVByb2JhYmlsaXR5IFNhbXBsaW5nKiogeWFuZyBkaWd1bmFrYW4ga2V0aWthICoqcG9wdWxhc2kgc3VsaXQgZGlpZGVudGlmaWthc2kgYXRhdSBkaWphbmdrYXUqKi4gRGFsYW0gbWV0b2RlIGluaSwgKipwZW5nYW1iaWxhbiBzYW1wZWwgZGltdWxhaSBkYXJpIGluZGl2aWR1IGF3YWwgKHNlZWQpLCB5YW5nIGtlbXVkaWFuIG1lcmVrb21lbmRhc2lrYW4gaW5kaXZpZHUgbGFpbiB5YW5nIG1lbWlsaWtpIGtldGVya2FpdGFuKiouICANCg0KRGFsYW0ga29kZSBkaSBhdGFzOiAgDQoxLiAqKk1lbWJ1YXQgcG9wdWxhc2kqKiBzZWJhbnlhayAqKjUwMCBtYWhhc2lzd2EqKiBkZW5nYW4gdmFyaWFiZWwgKipKZW5pcyBLZWxhbWluLCBUaW5na2F0IFBlbmRpZGlrYW4sIFBlbmdlbHVhcmFuLCBkYW4gU3RhdHVzIEtvbmVrc2kqKiAoYXBha2FoIG1haGFzaXN3YSBtZW1pbGlraSBqYXJpbmdhbiBzb3NpYWwgeWFuZyBsdWFzKS4gIA0KMi4gKipNZW1pbGloIHNlZWQgKGluZGl2aWR1IGF3YWwpKiogc2VjYXJhIGFjYWsgZGFyaSBtYWhhc2lzd2EgeWFuZyBtZW1pbGlraSAqKnN0YXR1cyAiVGVya29uZWtzaSIqKi4gIA0KMy4gKipNZW5hbWJhaGthbiBpbmRpdmlkdSBsYWluKiogeWFuZyBqdWdhIG1lbWlsaWtpIHN0YXR1cyAqKiJUZXJrb25la3NpIioqLCBzZW9sYWgtb2xhaCBtZXJla2EgZGlyZWtvbWVuZGFzaWthbiBvbGVoIGluZGl2aWR1IHNlYmVsdW1ueWEuICANCjQuICoqTWVuYW1waWxrYW4gc2FtcGVsIGFraGlyKiogeWFuZyBkaXBlcm9sZWggbWVuZ2d1bmFrYW4gcGVuZGVrYXRhbiBTbm93YmFsbCBTYW1wbGluZy4gIA0KDQpNZXRvZGUgaW5pIGJlcmd1bmEgZGFsYW0gcGVuZWxpdGlhbiBrb211bml0YXMgYXRhdSBrZWxvbXBvayB5YW5nIHN1bGl0IGRpamFuZ2thdSwgdGV0YXBpIG1lbWlsaWtpIHJpc2lrbyBiaWFzIGthcmVuYSBrZXRlcmJhdGFzYW4gamFyaW5nYW4gaW5kaXZpZHUgeWFuZyBkaXJla3J1dC4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQojIExvYWQgbGlicmFyeQ0KbGlicmFyeShkcGx5cikNCg0KIyBNZW1idWF0IGRhdGFzZXQgcG9wdWxhc2kgc2ViYW55YWsgNTAwIG1haGFzaXN3YQ0Kc2V0LnNlZWQoNDIpDQpkZl9wb3B1bGFzaSA8LSBkYXRhLmZyYW1lKA0KICBJRCA9IDE6NTAwLA0KICBOYW1hID0gcGFzdGUwKCJNYWhhc2lzd2FfIiwgMTo1MDApLA0KICBKZW5pc19LZWxhbWluID0gc2FtcGxlKGMoIkxha2ktbGFraSIsICJQZXJlbXB1YW4iKSwgNTAwLCByZXBsYWNlID0gVFJVRSksDQogIFRpbmdrYXRfUGVuZGlkaWthbiA9IHNhbXBsZShjKCJTMSIsICJTMiIpLCA1MDAsIHJlcGxhY2UgPSBUUlVFLCBwcm9iID0gYygwLjgsIDAuMikpLA0KICBQZW5nZWx1YXJhbiA9IHNhbXBsZSgxMjAwMDAwOjI1MDAwMDAsIDUwMCwgcmVwbGFjZSA9IFRSVUUpLA0KICBTdGF0dXNfS29uZWtzaSA9IHNhbXBsZShjKCJUZXJrb25la3NpIiwgIlRpZGFrIFRlcmtvbmVrc2kiKSwgNTAwLCByZXBsYWNlID0gVFJVRSwgcHJvYiA9IGMoMC4zLCAwLjcpKQ0KKQ0KDQojIE1lbWlsaWggaW5kaXZpZHUgYXdhbCAoc2VlZCkgc2VjYXJhIGFjYWsgZGFyaSBtYWhhc2lzd2EgeWFuZyBtZW1pbGlraSAiVGVya29uZWtzaSINCnNldC5zZWVkKDEyMykNCnNlZWRfc2FtcGxlIDwtIGRmX3BvcHVsYXNpICU+JSBmaWx0ZXIoU3RhdHVzX0tvbmVrc2kgPT0gIlRlcmtvbmVrc2kiKSAlPiUgc2FtcGxlX24oMykNCg0KIyBNZW5jYXJpIGluZGl2aWR1IGxhaW4geWFuZyBtZW1pbGlraSBodWJ1bmdhbiBkZW5nYW4gc2VlZCAobWlzYWxueWEgZGFyaSBrYXRlZ29yaSAiVGVya29uZWtzaSIpDQpzbm93YmFsbF9zYW1wbGUgPC0gZGZfcG9wdWxhc2kgJT4lIA0KICBmaWx0ZXIoU3RhdHVzX0tvbmVrc2kgPT0gIlRlcmtvbmVrc2kiKSAlPiUgDQogIHNhbXBsZV9uKDEwLCByZXBsYWNlID0gRkFMU0UpDQoNCiMgTWVuYW1waWxrYW4gaGFzaWwgU25vd2JhbGwgU2FtcGxpbmcNCnNub3diYWxsX3NhbXBsZQ0KYGBgDQojIFBlcmhpdHVuZ2FuIE1vRSB1bnR1ayBQcm9iYWJpbGl0eSBTYW1wbGluZw0KTWFyZ2luIG9mIEVycm9yIChNb0UpIGFkYWxhaCB1a3VyYW4ga2V0aWRha3Bhc3RpYW4gZGFsYW0gZXN0aW1hc2kgcGFyYW1ldGVyIHBvcHVsYXNpIGJlcmRhc2Fya2FuIHNhbXBlbC4gRGFsYW0gcGVuZ2FtYmlsYW4gc2FtcGVsIHByb2JhYmlsaXRhcywgTW9FIGRpZ3VuYWthbiB1bnR1ayBtZW5lbnR1a2FuIHNlYmVyYXBhIGphdWggaGFzaWwgc2FtcGVsIGRhcGF0IG1lbnlpbXBhbmcgZGFyaSBuaWxhaSBzZWJlbmFybnlhIGRpIHBvcHVsYXNpLiBTZW1ha2luIGtlY2lsIE1vRSwgc2VtYWtpbiB0aW5nZ2kga2Vha3VyYXRhbiBlc3RpbWFzaS4gTW9FIGRpcGVuZ2FydWhpIG9sZWggdGluZ2thdCBrZXBlcmNheWFhbiAoWiksIHN0YW5kYXIgZGV2aWFzaSBwb3B1bGFzaSAoz4MpLCBkYW4gdWt1cmFuIHNhbXBlbCAobikuIFJ1bXVzIHBlcmhpdHVuZ2FubnlhIGFkYWxhaDogIA0KDQpcWw0KTW9FID0gWiBcdGltZXMgXGZyYWN7XHNpZ21hfXtcc3FydHtufX0NClxdDQoNCi0gKipaKiogPSBTa29yIFogYmVyZGFzYXJrYW4gdGluZ2thdCBrZXBlcmNheWFhbi4gIA0KLSAqKs+DKiogPSBTdGFuZGFyIGRldmlhc2kgcG9wdWxhc2kgKHZhcmlhYmlsaXRhcyBkYXRhKS4gIA0KLSAqKm4qKiA9IFVrdXJhbiBzYW1wZWwuICANCi0gKipcKFxzcXJ0e259XCkqKiA9IEFrYXIga3VhZHJhdCBkYXJpIHVrdXJhbiBzYW1wZWwsIG1lbnVuanVra2FuIGJhaHdhIHNlbWFraW4gYmVzYXIgc2FtcGVsLCBzZW1ha2luIGtlY2lsIE1vRS4gIA0KDQpSdW11cyBpbmkgbWVudW5qdWtrYW4gYmFod2EgKipNb0UgbWVuaW5na2F0IGppa2EgdmFyaWFiaWxpdGFzIHRpbmdnaSBhdGF1IHRpbmdrYXQga2VwZXJjYXlhYW4gYmVzYXIsIHRldGFwaSBtZW51cnVuIGppa2EgdWt1cmFuIHNhbXBlbCBiZXJ0YW1iYWgqKi4NCg0KDQojIyBTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpDQoNCioqUGVyaGl0dW5nYW4gTWFyZ2luIG9mIEVycm9yIChNb0UpIHVudHVrIFNSUyoqICANCg0KUnVtdXMgZGFzYXI6ICANCg0KXFsNCk1vRSA9IFogXHRpbWVzIFxmcmFje1xzaWdtYX17XHNxcnR7bn19DQpcXQ0KDQoqKkxhbmdrYWggUGVyaGl0dW5nYW46KioNCg0KMS4gKipNZW5lbnR1a2FuIHBhcmFtZXRlciBwZW50aW5nOioqICANCiAgIC0gVGluZ2thdCBrZXBlcmNheWFhbiAqKjk1JSoqLCBtYWthICoqWiA9IDEuOTYqKiAgDQogICAtIFVrdXJhbiBzYW1wZWwgKipuID0gMTAwKiogIA0KICAgLSBTdGFuZGFyIGRldmlhc2kgc2FtcGVsIGRhcmkgcG9wdWxhc2kgKirPgyDiiYggMzgwLjI0KiogIA0KDQoyLiAqKkhpdHVuZyBha2FyIGRhcmkgdWt1cmFuIHNhbXBlbDoqKiAgDQogICBcWw0KICAgXHNxcnR7bn0gPSBcc3FydHsxMDB9ID0gMTANCiAgIFxdDQoNCjMuICoqSGl0dW5nIFN0YW5kYXIgRXJyb3IgKFNFKToqKiAgDQogICBcWw0KICAgU0UgPSBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSA9IFxmcmFjezM4MC4yNH17MTB9ID0gMzguMDINCiAgIFxdDQoNCjQuICoqSGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTW9FKToqKiAgDQogICBcWw0KICAgTW9FID0gMS45NiBcdGltZXMgMzguMDIgPSA3NC41MQ0KICAgXF0NCg0KKipIYXNpbCBBa2hpcjoqKg0KXFsNCk1vRSBcYXBwcm94IFJwIDc0LjUxMA0KXF0NCg0KRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gKio5NSUqKiwgZXN0aW1hc2kgcmF0YS1yYXRhIHBlbmdlbHVhcmFuIG1ha2FuYW4gbWFoYXNpc3dhIGRhbGFtIHNhbXBlbCAqKmRhcGF0IGJlcmJlZGEqKiBkYXJpIHJhdGEtcmF0YSBwb3B1bGFzaSAqKnNla2l0YXIgwrEgUnAgNzQuNTEwKiouICANClNlbWFraW4gYmVzYXIgdWt1cmFuIHNhbXBlbCwgc2VtYWtpbiBrZWNpbCBNYXJnaW4gb2YgRXJyb3IsIHlhbmcgYmVyYXJ0aSBoYXNpbCBlc3RpbWFzaSBsZWJpaCBha3VyYXQuDQoNCiMjIFN0cmF0aWZpZWQgU2FtcGxpbmcNCg0KKipQZXJoaXR1bmdhbiBNYXJnaW4gb2YgRXJyb3IgKE1vRSkgdW50dWsgU3RyYXRpZmllZCBTYW1wbGluZyoqICANCg0KUGFkYSBtZXRvZGUgKipTdHJhdGlmaWVkIFNhbXBsaW5nKiosIHBvcHVsYXNpIGRpYmFnaSBtZW5qYWRpIGJlYmVyYXBhIHN0cmF0YSAoa2Vsb21wb2spIGJlcmRhc2Fya2FuIGthcmFrdGVyaXN0aWsgdGVydGVudHUsIG1pc2FsbnlhICoqSmVuaXMgS2VsYW1pbioqIChMYWtpLWxha2ksIFBlcmVtcHVhbikgYXRhdSAqKlRpbmdrYXQgUGVuZGlkaWthbioqIChTMSwgUzIpLiBLZW11ZGlhbiwgc2FtcGVsIGRpYW1iaWwgc2VjYXJhIGFjYWsgZGFyaSBzZXRpYXAgc3RyYXRhIGRlbmdhbiBwcm9wb3JzaSB5YW5nIHNlc3VhaS4gIA0KDQpSdW11cyB5YW5nIGRpZ3VuYWthbiB0ZXRhcCBzYW1hOiAgDQoNClxbDQpNb0UgPSBaIFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fQ0KXF0NCg0KTmFtdW4sIGRhbGFtICoqU3RyYXRpZmllZCBTYW1wbGluZyoqLCBzdGFuZGFyIGRldmlhc2kgKFwoXHNpZ21hXCkpIGRpcGVyb2xlaCBkZW5nYW4gbWVtcGVydGltYmFuZ2thbiB2YXJpYXNpIGRhbGFtIHNldGlhcCBzdHJhdGEsIGRpaGl0dW5nIG1lbmdndW5ha2FuICoqcmF0YS1yYXRhIHRlcnRpbWJhbmcqKiBkYXJpIHN0YW5kYXIgZGV2aWFzaSBzZXRpYXAgc3RyYXRhLg0KDQoqKkxhbmdrYWggUGVyaGl0dW5nYW46KiogIA0KDQoxLiAqKkJhZ2kgcG9wdWxhc2kgbWVuamFkaSBkdWEgc3RyYXRhIGJlcmRhc2Fya2FuIEplbmlzIEtlbGFtaW46KiogIA0KICAgLSAqKkxha2ktbGFraToqKiA2MCUgcG9wdWxhc2kgKDMwMCBtYWhhc2lzd2EpICANCiAgIC0gKipQZXJlbXB1YW46KiogNDAlIHBvcHVsYXNpICgyMDAgbWFoYXNpc3dhKSAgDQoNCjIuICoqQW1iaWwgc2FtcGVsIHNlYmFueWFrIDEwMCBtYWhhc2lzd2Egc2VjYXJhIHByb3BvcnNpb25hbDoqKiAgDQogICAtICoqTGFraS1sYWtpOioqIDYwJSBkYXJpIDEwMCDihpIgKio2MCBtYWhhc2lzd2EqKiAgDQogICAtICoqUGVyZW1wdWFuOioqIDQwJSBkYXJpIDEwMCDihpIgKio0MCBtYWhhc2lzd2EqKiAgDQoNCjMuICoqSGl0dW5nIHN0YW5kYXIgZGV2aWFzaSBtYXNpbmctbWFzaW5nIHN0cmF0YToqKiAgDQogICAtICoqTGFraS1sYWtpOioqIFwoIFxzaWdtYV8xID0gNDAwLjE1IFwpICANCiAgIC0gKipQZXJlbXB1YW46KiogXCggXHNpZ21hXzIgPSAzNTAuNzUgXCkgIA0KDQo0LiAqKkhpdHVuZyBzdGFuZGFyIGRldmlhc2kgZ2FidW5nYW4gbWVuZ2d1bmFrYW4gcmF0YS1yYXRhIHRlcnRpbWJhbmc6KiogIA0KICAgXFsNCiAgIFxzaWdtYV97Z2FidW5nYW59ID0gXHNxcnR7KHdfMSBcdGltZXMgXHNpZ21hXzFeMikgKyAod18yIFx0aW1lcyBcc2lnbWFfMl4yKX0NCiAgIFxdDQogICBcWw0KICAgPSBcc3FydHsoMC42IFx0aW1lcyA0MDAuMTVeMikgKyAoMC40IFx0aW1lcyAzNTAuNzVeMil9DQogICBcXQ0KICAgXFsNCiAgID0gXHNxcnR7KDAuNiBcdGltZXMgMTYwMTIwLjAyKSArICgwLjQgXHRpbWVzIDEyMzAxMi4wNil9DQogICBcXQ0KICAgXFsNCiAgID0gXHNxcnR7KDk2MDcyLjAxICsgNDkyMDQuODIpfQ0KICAgXF0NCiAgIFxbDQogICA9IFxzcXJ0ezE0NTI3Ni44M30gPSAzODEuMjMNCiAgIFxdDQoNCjUuICoqSGl0dW5nIFN0YW5kYXIgRXJyb3IgKFNFKToqKiAgDQogICBcWw0KICAgU0UgPSBcZnJhY3tcc2lnbWFfe2dhYnVuZ2FufX17XHNxcnR7bn19ID0gXGZyYWN7MzgxLjIzfXtcc3FydHsxMDB9fQ0KICAgXF0NCiAgIFxbDQogICA9IFxmcmFjezM4MS4yM317MTB9ID0gMzguMTINCiAgIFxdDQoNCjYuICoqSGl0dW5nIE1hcmdpbiBvZiBFcnJvciAoTW9FKToqKiAgDQogICBcWw0KICAgTW9FID0gMS45NiBcdGltZXMgMzguMTIgPSA3NC43MQ0KICAgXF0NCg0KKipIYXNpbCBBa2hpcjoqKiANCg0KXFsNCk1vRSBcYXBwcm94IFJwIDc0LjcxMA0KXF0NCg0KRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gKio5NSUqKiwgTWFyZ2luIG9mIEVycm9yIHVudHVrIG1ldG9kZSAqKlN0cmF0aWZpZWQgU2FtcGxpbmcqKiBhZGFsYWggKirCsSBScCA3NC43MTAqKiwgeWFuZyBoYW1waXIgc2FtYSBkZW5nYW4gU2ltcGxlIFJhbmRvbSBTYW1wbGluZy4gTmFtdW4sIG1ldG9kZSBpbmkgbGViaWggcmVwcmVzZW50YXRpZiBrYXJlbmEgbWVtcGVydGltYmFuZ2thbiBwZXJiZWRhYW4ga2FyYWt0ZXJpc3RpayBhbnRhciBzdHJhdGEuDQoNCiMjIFN5c3RlbWF0aWMgU2FtcGxpbmcNCg0KKipQZXJoaXR1bmdhbiBNYXJnaW4gb2YgRXJyb3IgKE1vRSkgdW50dWsgU3lzdGVtYXRpYyBTYW1wbGluZyoqICANCg0KTWV0b2RlICoqU3lzdGVtYXRpYyBTYW1wbGluZyoqIG1lbmdhbWJpbCBzYW1wZWwgZGVuZ2FuIG1lbWlsaWggc2V0aWFwIGVsZW1lbiBrZS1cKCBrIFwpIGRhcmkgcG9wdWxhc2kgeWFuZyBzdWRhaCBkaXVydXRrYW4gYmVyZGFzYXJrYW4ga3JpdGVyaWEgdGVydGVudHUuIERhbGFtIGhhbCBpbmksIHBvcHVsYXNpIHRlcmRpcmkgZGFyaSAqKjUwMCBtYWhhc2lzd2EqKiwgZGFuIGtpdGEgaW5naW4gbWVuZ2FtYmlsICoqMTAwIHNhbXBlbCoqIHNlY2FyYSBzaXN0ZW1hdGlzLiAgDQoNClJ1bXVzIHlhbmcgZGlndW5ha2FuIHRldGFwIHNhbWE6ICANCg0KXFsNCk1vRSA9IFogXHRpbWVzIFxmcmFje1xzaWdtYX17XHNxcnR7bn19DQpcXQ0KDQoqKkxhbmdrYWggUGVyaGl0dW5nYW46KiogIA0KDQoxLiAqKlRlbnR1a2FuIGludGVydmFsIHBlbWlsaWhhbiAoXCggayBcKSkqKiAgDQogICAtIFVrdXJhbiBwb3B1bGFzaSA9ICoqNTAwIG1haGFzaXN3YSoqICANCiAgIC0gVWt1cmFuIHNhbXBlbCA9ICoqMTAwIG1haGFzaXN3YSoqICANCiAgIC0gSW50ZXJ2YWwgc2lzdGVtYXRpczogIA0KICAgICBcWw0KICAgICBrID0gXGZyYWN7XHRleHR7UG9wdWxhc2l9fXtcdGV4dHtTYW1wZWx9fSA9IFxmcmFjezUwMH17MTAwfSA9IDUNCiAgICAgXF0NCiAgIC0gQXJ0aW55YSwga2l0YSBtZW1pbGloIHNldGlhcCBtYWhhc2lzd2Ega2UtNSBkYXJpIGRhZnRhciBwb3B1bGFzaSB5YW5nIHN1ZGFoIGRpdXJ1dGthbi4NCg0KMi4gKipBbWJpbCBzYW1wZWwgc2lzdGVtYXRpczoqKiAgDQogICAtIFBpbGloICoqYW5na2EgYXdhbCBzZWNhcmEgYWNhayoqIGRhcmkgMSBoaW5nZ2EgXCggayA9IDUgXCkgKG1pc2FsLCBraXRhIG11bGFpIGRhcmkgdXJ1dGFuIGtlLTMpLiAgDQogICAtIEtlbXVkaWFuIHBpbGloIGRhdGEga2UtMywga2UtOCwga2UtMTMsIGtlLTE4LCBkc3QuICANCg0KMy4gKipIaXR1bmcgc3RhbmRhciBkZXZpYXNpIGRhcmkgc2FtcGVsIHlhbmcgZGlwZXJvbGVoOioqICANCiAgIC0gRGFyaSBzYW1wZWwgc2lzdGVtYXRpcyB5YW5nIGRpYW1iaWwsIGRpcGVyb2xlaCBzdGFuZGFyIGRldmlhc2k6ICANCiAgICAgXFsNCiAgICAgXHNpZ21hID0gMzg1LjYwDQogICAgIFxdDQoNCjQuICoqSGl0dW5nIFN0YW5kYXIgRXJyb3IgKFNFKToqKiAgDQogICBcWw0KICAgU0UgPSBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSA9IFxmcmFjezM4NS42MH17XHNxcnR7MTAwfX0NCiAgIFxdDQogICBcWw0KICAgPSBcZnJhY3szODUuNjB9ezEwfSA9IDM4LjU2DQogICBcXQ0KDQo1LiAqKkhpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1vRSk6KiogIA0KICAgXFsNCiAgIE1vRSA9IDEuOTYgXHRpbWVzIDM4LjU2ID0gNzUuNTgNCiAgIFxdDQoNCioqSGFzaWwgQWtoaXI6KiogIA0KXFsNCk1vRSBcYXBwcm94IFJwIDc1LjU4MA0KXF0NCg0KRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gKio5NSUqKiwgTWFyZ2luIG9mIEVycm9yIHVudHVrIG1ldG9kZSAqKlN5c3RlbWF0aWMgU2FtcGxpbmcqKiBhZGFsYWggKirCsSBScCA3NS41ODAqKi4gIA0KTWV0b2RlIGluaSBsZWJpaCBzZWRlcmhhbmEgZGliYW5kaW5na2FuICoqU2ltcGxlIFJhbmRvbSBTYW1wbGluZyoqIHRldGFwaSB0ZXRhcCBtZW1iZXJpa2FuIGhhc2lsIHlhbmcgcmVwcmVzZW50YXRpZiBzZWxhbWEgZGF0YSB0aWRhayBtZW1pbGlraSBwb2xhIHNpc3RlbWF0aXMgeWFuZyBkYXBhdCBtZW55ZWJhYmthbiBiaWFzLg0KDQojIyBDbHVzdGVyIFNhbXBsaW5nDQoNCioqUGVyaGl0dW5nYW4gTWFyZ2luIG9mIEVycm9yIChNb0UpIHVudHVrIENsdXN0ZXIgU2FtcGxpbmcqKiAgDQoNCk1ldG9kZSAqKkNsdXN0ZXIgU2FtcGxpbmcqKiBtZW1iYWdpIHBvcHVsYXNpIGtlIGRhbGFtIGJlYmVyYXBhIGtlbG9tcG9rIChjbHVzdGVyKSBkYW4ga2VtdWRpYW4gbWVuZ2FtYmlsIHNhbXBlbCBkYXJpIGJlYmVyYXBhIGNsdXN0ZXIgeWFuZyBkaXBpbGloIHNlY2FyYSBhY2FrLiBEYWxhbSBwZW5lbGl0aWFuIGluaSwgcG9wdWxhc2kgdGVyZGlyaSBkYXJpICoqNTAwIG1haGFzaXN3YSoqLCBkYW4ga2l0YSBha2FuIG1lbmVyYXBrYW4gbWV0b2RlICoqQ2x1c3RlciBTYW1wbGluZyoqIGRlbmdhbiBwZW1iYWdpYW4gYmVyZGFzYXJrYW4gKipUaW5na2F0IFBlbmRpZGlrYW4qKiAoUzEgZGFuIFMyKS4gIA0KDQpSdW11cyB5YW5nIGRpZ3VuYWthbiB0ZXRhcCBzYW1hOiAgDQoNClxbDQpNb0UgPSBaIFx0aW1lcyBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fQ0KXF0NCg0KKipMYW5na2FoIFBlcmhpdHVuZ2FuOioqICANCg0KMS4gKipCZW50dWsgQ2x1c3RlciBCZXJkYXNhcmthbiBUaW5na2F0IFBlbmRpZGlrYW4qKiAgDQogICAtIFBvcHVsYXNpIHRlcmRpcmkgZGFyaSAqKjUwMCBtYWhhc2lzd2EqKiwgdGVyYmFnaSBtZW5qYWRpOiAgDQogICAgIC0gKio0MDAgbWFoYXNpc3dhIFMxKiogIA0KICAgICAtICoqMTAwIG1haGFzaXN3YSBTMioqICANCiAgIC0gRGFyaSBzaW5pLCBraXRhIG1lbWJhZ2kgbWFoYXNpc3dhIGtlIGRhbGFtICoqMiBjbHVzdGVyKio6ICANCiAgICAgLSAqKkNsdXN0ZXIgMTogTWFoYXNpc3dhIFMxKiogIA0KICAgICAtICoqQ2x1c3RlciAyOiBNYWhhc2lzd2EgUzIqKiAgDQoNCjIuICoqUGlsaWggQ2x1c3RlciBTZWNhcmEgQWNhayoqICANCiAgIC0gTWlzYWxrYW4ga2l0YSBtZW1pbGloICoqQ2x1c3RlciAxIChNYWhhc2lzd2EgUzEpIHNhamEqKiB1bnR1ayBkaWFtYmlsIHNhbXBlbG55YS4gIA0KICAgLSBEYXJpIENsdXN0ZXIgMSAoNDAwIG1haGFzaXN3YSksIGtpdGEgbWVuZ2FtYmlsICoqMTAwIHNhbXBlbCoqIHNlY2FyYSBhY2FrLiAgDQoNCjMuICoqSGl0dW5nIFN0YW5kYXIgRGV2aWFzaSBkYXJpIFNhbXBlbCB5YW5nIERpcGlsaWgqKiAgDQogICAtIERhcmkgc2FtcGVsIGNsdXN0ZXIgeWFuZyBkaXBlcm9sZWgsIGRpcGVyb2xlaCBzdGFuZGFyIGRldmlhc2k6ICANCiAgICAgXFsNCiAgICAgXHNpZ21hID0gNDEwLjI1DQogICAgIFxdDQoNCjQuICoqSGl0dW5nIFN0YW5kYXIgRXJyb3IgKFNFKToqKiAgDQogICBcWw0KICAgU0UgPSBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSA9IFxmcmFjezQxMC4yNX17XHNxcnR7MTAwfX0NCiAgIFxdDQogICBcWw0KICAgPSBcZnJhY3s0MTAuMjV9ezEwfSA9IDQxLjAzDQogICBcXQ0KDQo1LiAqKkhpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1vRSk6KiogIA0KICAgXFsNCiAgIE1vRSA9IDEuOTYgXHRpbWVzIDQxLjAzID0gODAuNDINCiAgIFxdDQoNCkhhc2lsIEFraGlyOioqICANClxbDQpNb0UgXGFwcHJveCBScCA4MC40MjANClxdDQoNCkRlbmdhbiB0aW5na2F0IGtlcGVyY2F5YWFuICoqOTUlKiosIE1hcmdpbiBvZiBFcnJvciB1bnR1ayBtZXRvZGUgKipDbHVzdGVyIFNhbXBsaW5nKiogYWRhbGFoICoqwrEgUnAgODAuNDIwKiouICANCk1ldG9kZSBpbmkgZWZla3RpZiBqaWthIHBvcHVsYXNpIG1lbWlsaWtpIGthcmFrdGVyaXN0aWsgc2VyYWdhbSBkYWxhbSB0aWFwIGNsdXN0ZXIsIG5hbXVuIGRhcGF0IG1lbmluZ2thdGthbiB2YXJpYWJpbGl0YXMgamlrYSBjbHVzdGVyIHRpZGFrIGhvbW9nZW4uDQoNCiMjIE11bHRpLVNhdGdlIFNhbXBsaW5nDQoNCioqUGVyaGl0dW5nYW4gTWFyZ2luIG9mIEVycm9yIChNb0UpIHVudHVrIE11bHRpLVN0YWdlIFNhbXBsaW5nKiogIA0KDQpNZXRvZGUgKipNdWx0aS1TdGFnZSBTYW1wbGluZyoqIG1lcnVwYWthbiB0ZWtuaWsgcGVuZ2FtYmlsYW4gc2FtcGVsIGJlcnRhaGFwLCBkaSBtYW5hIHBvcHVsYXNpIGRpYmFnaSBrZSBkYWxhbSBiZWJlcmFwYSBrZWxvbXBvaywgbGFsdSBkaWxha3VrYW4gcGVuZ2FtYmlsYW4gc2FtcGVsIGRhcmkga2Vsb21wb2sgeWFuZyBsZWJpaCBrZWNpbCBzZWNhcmEgYmVydGFoYXAuIERhbGFtIHBlbmVsaXRpYW4gaW5pLCBraXRhIG1lbmVyYXBrYW4gbWV0b2RlIGluaSBkZW5nYW4gKipkdWEgdGFoYXAqKjogIA0KDQoxLiAqKlRhaGFwIDE6IFBpbGloIFdpbGF5YWggU2VjYXJhIEFjYWsqKiAgDQogICAtIFBvcHVsYXNpIHRlcmRpcmkgZGFyaSAqKjUwMCBtYWhhc2lzd2EqKiB5YW5nIGJlcmFzYWwgZGFyaSBiZXJiYWdhaSB3aWxheWFoIGthbXB1cy4gIA0KICAgLSBLaXRhIG1lbWJhZ2kgbWVyZWthIGtlIGRhbGFtICoqNSB3aWxheWFoIGthbXB1cyoqIGRlbmdhbiBqdW1sYWggeWFuZyBoYW1waXIgc2FtYTogIA0KICAgICAtICoqV2lsYXlhaCBBOiAxMDAgbWFoYXNpc3dhKiogIA0KICAgICAtICoqV2lsYXlhaCBCOiAxMDAgbWFoYXNpc3dhKiogIA0KICAgICAtICoqV2lsYXlhaCBDOiAxMDAgbWFoYXNpc3dhKiogIA0KICAgICAtICoqV2lsYXlhaCBEOiAxMDAgbWFoYXNpc3dhKiogIA0KICAgICAtICoqV2lsYXlhaCBFOiAxMDAgbWFoYXNpc3dhKiogIA0KICAgLSBTZWNhcmEgYWNhaywga2l0YSBtZW1pbGloICoqMiB3aWxheWFoKiogdW50dWsgdGFoYXAgYmVyaWt1dG55YS4gTWlzYWxueWEsICoqV2lsYXlhaCBCIGRhbiBXaWxheWFoIEQqKiB0ZXJwaWxpaC4gIA0KDQoyLiAqKlRhaGFwIDI6IFBpbGloIE1haGFzaXN3YSBTZWNhcmEgQWNhayBkYXJpIFdpbGF5YWggVGVycGlsaWgqKiAgDQogICAtIERhcmkgKipXaWxheWFoIEIgZGFuIFdpbGF5YWggRCoqLCBtYXNpbmctbWFzaW5nIGJlcmlzaSAqKjEwMCBtYWhhc2lzd2EqKi4gIA0KICAgLSBLaXRhIG1lbmdhbWJpbCAqKjUwIG1haGFzaXN3YSBzZWNhcmEgYWNhayBkYXJpIHRpYXAgd2lsYXlhaCoqLiAgDQogICAtIFNlaGluZ2dhIHRvdGFsIHNhbXBlbCBhZGFsYWggKioxMDAgbWFoYXNpc3dhKiouICANCg0KKipQZXJoaXR1bmdhbiBNYXJnaW4gb2YgRXJyb3IgKE1vRSk6KiogIA0KDQpNZW5nZ3VuYWthbiBydW11czogIA0KDQpcWw0KTW9FID0gWiBcdGltZXMgXGZyYWN7XHNpZ21hfXtcc3FydHtufX0NClxdDQoNCioqTGFuZ2thaC1sYW5na2FoIHBlcmhpdHVuZ2FuOioqICANCg0KMS4gKipTdGFuZGFyIERldmlhc2kgU2FtcGVsKiogIA0KICAgLSBEYXJpIHNhbXBlbCB5YW5nIGRpcGlsaWgsIGRpcGVyb2xlaCBzdGFuZGFyIGRldmlhc2k6ICANCiAgICAgXFsNCiAgICAgXHNpZ21hID0gNDIwLjM1DQogICAgIFxdDQoNCjIuICoqSGl0dW5nIFN0YW5kYXIgRXJyb3IgKFNFKToqKiAgDQogICBcWw0KICAgU0UgPSBcZnJhY3tcc2lnbWF9e1xzcXJ0e259fSA9IFxmcmFjezQyMC4zNX17XHNxcnR7MTAwfX0NCiAgIFxdDQogICBcWw0KICAgPSBcZnJhY3s0MjAuMzV9ezEwfSA9IDQyLjA0DQogICBcXQ0KDQozLiAqKkhpdHVuZyBNYXJnaW4gb2YgRXJyb3IgKE1vRSk6KiogIA0KICAgXFsNCiAgIE1vRSA9IDEuOTYgXHRpbWVzIDQyLjA0ID0gODIuNDANCiAgIFxdDQoNCioqSGFzaWwgQWtoaXI6KiogIA0KXFsNCk1vRSBcYXBwcm94IFJwIDgyLjQwMA0KXF0NCg0KRGVuZ2FuIHRpbmdrYXQga2VwZXJjYXlhYW4gKio5NSUqKiwgTWFyZ2luIG9mIEVycm9yIHVudHVrIG1ldG9kZSAqKk11bHRpLVN0YWdlIFNhbXBsaW5nKiogYWRhbGFoICoqwrEgUnAgODIuNDAwKiouICANCk1ldG9kZSBpbmkgZWZpc2llbiBkYWxhbSBzdXJ2ZWkgYmVyc2thbGEgYmVzYXIga2FyZW5hIG1lbmd1cmFuZ2kgYmlheWEgcGVuZ2FtYmlsYW4gZGF0YSwgdGV0YXBpIGRhcGF0IG1lbmluZ2thdGthbiB2YXJpYXNpIGRhbGFtIHNhbXBlbCBqaWthIHBlbWlsaWhhbiB0YWhhcCBwZXJ0YW1hIHRpZGFrIHJlcHJlc2VudGF0aWYuDQoNCiMgQW5hbGlzYSBCaWFzIGRhbGFtIFBlbmdhbWJpbGFuIFNhbXBlbCBOb24tUHJvYmFiaWxpdGFzDQogUGVuZ2FtYmlsYW4gc2FtcGVsICoqbm9uLXByb2JhYmlsaXRhcyoqIHNlcmluZyBkaWd1bmFrYW4ga2V0aWthIGtldGVyYmF0YXNhbiB3YWt0dSwgc3VtYmVyIGRheWEsIGF0YXUgYWtzZXMgdGVyaGFkYXAgcG9wdWxhc2kgbWVtYnVhdCBtZXRvZGUgcHJvYmFiaWxpdGFzIHN1bGl0IGRpdGVyYXBrYW4uIE5hbXVuLCBtZXRvZGUgaW5pIHJlbnRhbiB0ZXJoYWRhcCAqKmJpYXMqKiwgeWFuZyBkYXBhdCBtZW1lbmdhcnVoaSB2YWxpZGl0YXMgZGFuIGdlbmVyYWxpc2FzaSBoYXNpbCBwZW5lbGl0aWFuLiBCZXJpa3V0IGFkYWxhaCBiZWJlcmFwYSBqZW5pcyBiaWFzIHlhbmcgdW11bSB0ZXJqYWRpIGRhbGFtIG1ldG9kZSBub24tcHJvYmFiaWxpdGFzOiAgDQoNCiMjICoqQmlhcyBTZWxla3NpKiogIA0KVGVyamFkaSBrZXRpa2Egc2FtcGVsIHlhbmcgZGlwaWxpaCB0aWRhayBtZXdha2lsaSBwb3B1bGFzaSBzZWNhcmEga2VzZWx1cnVoYW4uIENvbnRvaG55YTogIA0KLSAqKkNvbnZlbmllbmNlIFNhbXBsaW5nKio6IE1lbmdndW5ha2FuIGluZGl2aWR1IHlhbmcgbXVkYWggZGlha3NlcyBkYXBhdCBtZW55ZWJhYmthbiBrZXRpZGFrc2VpbWJhbmdhbiBkYWxhbSBrYXJha3RlcmlzdGlrIHNhbXBlbC4gIA0KLSAqKlF1b3RhIFNhbXBsaW5nKio6IEppa2EgcGVtZW51aGFuIGt1b3RhIHRpZGFrIGRpbGFrdWthbiBzZWNhcmEgYWNhaywgYmlzYSB0ZXJqYWRpIG92ZXJyZXByZXNlbnRhc2kgYXRhdSB1bmRlcnJlcHJlc2VudGFzaSBrZWxvbXBvayB0ZXJ0ZW50dS4gIA0KDQojIyAqKkJpYXMgUmVzcG9uKiogIA0KTXVuY3VsIGtldGlrYSBpbmRpdmlkdSBkYWxhbSBzYW1wZWwgbWVtYmVyaWthbiBqYXdhYmFuIHlhbmcgdGlkYWsgbWVuY2VybWlua2FuIHJlYWxpdGFzLCBzZXJpbmcgdGVyamFkaSBkYWxhbTogIA0KLSAqKlB1cnBvc2l2ZSBTYW1wbGluZyoqOiBQZW5lbGl0aSBtZW1pbGloIGluZGl2aWR1IGJlcmRhc2Fya2FuIGtyaXRlcmlhIHRlcnRlbnR1LCB5YW5nIGRhcGF0IG1lbnllYmFia2FuIHByZWZlcmVuc2kgYXRhdSBla3NwZWt0YXNpIHBlbmVsaXRpIG1lbWVuZ2FydWhpIGhhc2lsLiAgDQotICoqU25vd2JhbGwgU2FtcGxpbmcqKjogUmVzcG9uZGVuIGF3YWwgbWVtaWxpaCBwZXNlcnRhIGxhaW4sIHlhbmcgbXVuZ2tpbiBtZW1pbGlraSBrYXJha3RlcmlzdGlrIHNlcnVwYSwgc2VoaW5nZ2EgdGlkYWsgbWVuY2VybWlua2FuIHBvcHVsYXNpIHlhbmcgbGViaWggbHVhcy4gIA0KDQojIyAqKkJpYXMgS2ViZXJnYW50dW5nYW4qKiAgDQpUZXJqYWRpIGtldGlrYSBtZXRvZGUgcGVuZ2FtYmlsYW4gc2FtcGVsIGJlcmdhbnR1bmcgcGFkYSBqYXJpbmdhbiBzb3NpYWwgdGVydGVudHUsIG1lbnllYmFia2FuIHJlcHJlc2VudGFzaSBzYW1wZWwgbWVuamFkaSB0ZXJiYXRhcy4gQ29udG9obnlhIGRhbGFtICoqU25vd2JhbGwgU2FtcGxpbmcqKiwgaW5kaXZpZHUgeWFuZyBkaXJla3J1dCBjZW5kZXJ1bmcgYmVyYXNhbCBkYXJpIGxpbmdrYXJhbiBzb3NpYWwgeWFuZyBzYW1hLiAgDQoNCiMjICoqQmlhcyBOb24tUmVzcG9uKiogIA0KS2V0aWthIGluZGl2aWR1IHlhbmcgbWVtZW51aGkga3JpdGVyaWEgc2FtcGVsIG1lbm9sYWsgYmVycGFydGlzaXBhc2kgYXRhdSBzdWxpdCBkaWphbmdrYXUsIG1lbmd1cmFuZ2kgcmVwcmVzZW50YXRpdml0YXMgc2FtcGVsLiBIYWwgaW5pIHNlcmluZyBkaXRlbXVrYW4gZGFsYW0gKipKdWRnbWVudGFsIFNhbXBsaW5nKiosIGRpIG1hbmEgaW5kaXZpZHUgeWFuZyBkaWFuZ2dhcCBwYWxpbmcgInJlbGV2YW4iIG11bmdraW4gbWVub2xhayBiZXJwYXJ0aXNpcGFzaSwgc2VoaW5nZ2EgaGFueWEgc3VkdXQgcGFuZGFuZyB0ZXJ0ZW50dSB5YW5nIHRlcmVwcmVzZW50YXNpa2FuLiAgDQoNCiMjICoqS2VzaW1wdWxhbioqICANCk1ldG9kZSBub24tcHJvYmFiaWxpdGFzIG1lbWlsaWtpIGtldW5nZ3VsYW4gZGFsYW0ga2VtdWRhaGFuIGRhbiBlZmlzaWVuc2ksIHRldGFwaSByZW50YW4gdGVyaGFkYXAgYmlhcyB5YW5nIGRhcGF0IG1lbnVydW5rYW4gdmFsaWRpdGFzIGhhc2lsIHBlbmVsaXRpYW4uIE9sZWgga2FyZW5hIGl0dSwgcGVuZWxpdGkgcGVybHUgbWVuZ29udHJvbCBkYW4gbWVuZG9rdW1lbnRhc2lrYW4gcG90ZW5zaSBiaWFzIGRhbGFtIGFuYWxpc2lzIHVudHVrIG1lbmluZ2thdGthbiBpbnRlcnByZXRhc2kgeWFuZyBsZWJpaCBha3VyYXQuDQoNCiMgUGVyYmFuZGluZ2FuIFNlbXVhIE1ldG9kZQ0KICANCkJlcmlrdXQgYWRhbGFoIHBlcmJhbmRpbmdhbiBhbnRhcmEgYmVyYmFnYWkgbWV0b2RlICoqcHJvYmFiaWxpdGFzKiogZGFuICoqbm9uLXByb2JhYmlsaXRhcyoqIGRhbGFtIHBlbmdhbWJpbGFuIHNhbXBlbCBiZXJkYXNhcmthbiBrZWxlYmloYW4sIGtla3VyYW5nYW4sIHNlcnRhIHBlbmVyYXBhbiB5YW5nIHVtdW0gZGlndW5ha2FuOiAgDQoNCnwgKipNZXRvZGUqKiAgICAgICAgICAgICAgICAgfCAqKkplbmlzKiogICAgICAgICAgICB8ICoqRGVza3JpcHNpKiogfCAqKktlbGViaWhhbioqIHwgKipLZWt1cmFuZ2FuKiogfCAqKkNvbnRvaCBQZW5lcmFwYW4qKiB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS18DQp8ICoqU2ltcGxlIFJhbmRvbSBTYW1wbGluZyAoU1JTKSoqIHwgUHJvYmFiaWxpdGFzIHwgU2V0aWFwIGluZGl2aWR1IGRhbGFtIHBvcHVsYXNpIG1lbWlsaWtpIHBlbHVhbmcgeWFuZyBzYW1hIHVudHVrIHRlcnBpbGloLiB8IFJlcHJlc2VudGF0aWYsIG1lbmd1cmFuZ2kgYmlhcy4gfCBNZW1idXR1aGthbiBkYWZ0YXIgcG9wdWxhc2kgbGVuZ2thcCwgYmlzYSBtYWhhbC4gfCBTdHVkaSBha2FkZW1payB5YW5nIG1lbWJ1dHVoa2FuIGhhc2lsIGdlbmVyYWxpc2FzaS4gfA0KfCAqKlN0cmF0aWZpZWQgU2FtcGxpbmcqKiB8IFByb2JhYmlsaXRhcyB8IFBvcHVsYXNpIGRpYmFnaSBtZW5qYWRpIHN0cmF0YSBiZXJkYXNhcmthbiBrYXJha3RlcmlzdGlrIHRlcnRlbnR1LCBsYWx1IHNhbXBlbCBkaWFtYmlsIHNlY2FyYSBhY2FrIGRhcmkgbWFzaW5nLW1hc2luZyBzdHJhdGEuIHwgTGViaWggYWt1cmF0IGRhbGFtIG1ld2FraWxpIHN1YmtlbG9tcG9rIGRhbGFtIHBvcHVsYXNpLiB8IEJpc2Ega29tcGxla3MgZGFuIG1lbWVybHVrYW4gaW5mb3JtYXNpIHRhbWJhaGFuIHRlbnRhbmcgc3RyYXRhLiB8IFN1cnZlaSBrZXB1YXNhbiBwZWxhbmdnYW4gYmVyZGFzYXJrYW4ga2F0ZWdvcmkgdW11ci4gfA0KfCAqKlN5c3RlbWF0aWMgU2FtcGxpbmcqKiB8IFByb2JhYmlsaXRhcyB8IFNhbXBlbCBkaXBpbGloIGRlbmdhbiBpbnRlcnZhbCB0ZXRhcCBkYXJpIGRhZnRhciBwb3B1bGFzaS4gfCBNdWRhaCBkaXRlcmFwa2FuLCBsZWJpaCBjZXBhdCBkYXJpIFNSUy4gfCBCaXNhIG1lbmltYnVsa2FuIGJpYXMgamlrYSBhZGEgcG9sYSBkYWxhbSBwb3B1bGFzaS4gfCBTdHVkaSBzdXJ2ZWkgZGkgc2Vrb2xhaCBkZW5nYW4gbWVtaWxpaCBzZXRpYXAgc2lzd2Ega2UtMTAuIHwNCnwgKipDbHVzdGVyIFNhbXBsaW5nKiogfCBQcm9iYWJpbGl0YXMgfCBQb3B1bGFzaSBkaWJhZ2kgbWVuamFkaSBrZWxvbXBvayAoa2xhc3RlciksIGxhbHUgYmViZXJhcGEga2xhc3RlciBkaXBpbGloIHNlY2FyYSBhY2FrLiB8IExlYmloIGhlbWF0IGJpYXlhLCBjb2NvayB1bnR1ayBwb3B1bGFzaSBsdWFzLiB8IEJpc2Ega3VyYW5nIHJlcHJlc2VudGF0aWYgamlrYSBrbGFzdGVyIHRpZGFrIGhvbW9nZW4uIHwgUGVuZWxpdGlhbiBrZXNlaGF0YW4gZGVuZ2FuIG1lbWlsaWggcnVtYWggdGFuZ2dhIHNlY2FyYSBhY2FrLiB8DQp8ICoqTXVsdGktU3RhZ2UgU2FtcGxpbmcqKiB8IFByb2JhYmlsaXRhcyB8IEtvbWJpbmFzaSBkYXJpIGR1YSBhdGF1IGxlYmloIHRla25payBzYW1wbGluZyBkYWxhbSBiZWJlcmFwYSB0YWhhcC4gfCBGbGVrc2liZWwsIGNvY29rIHVudHVrIHBvcHVsYXNpIGJlc2FyIGRhbiBsdWFzLiB8IExlYmloIGtvbXBsZWtzIGRhbGFtIGRlc2FpbiBkYW4gYW5hbGlzaXMgZGF0YS4gfCBTdXJ2ZWkgbmFzaW9uYWwgZGVuZ2FuIHBlbWlsaWhhbiBwcm92aW5zaSwga290YSwgbGFsdSBpbmRpdmlkdS4gfA0KfCAqKkNvbnZlbmllbmNlIFNhbXBsaW5nKiogfCBOb24tUHJvYmFiaWxpdGFzIHwgTWVuZ2FtYmlsIHNhbXBlbCBiZXJkYXNhcmthbiBrZW11ZGFoYW4gYWtzZXMuIHwgQ2VwYXQgZGFuIG11cmFoLiB8IFRpZGFrIHJlcHJlc2VudGF0aWYsIHJlbnRhbiBiaWFzIHNlbGVrc2kuIHwgU3VydmVpIGRpIG1hbGwgZGVuZ2FuIG1lbWlsaWggcGVuZ3VuanVuZyB5YW5nIGxld2F0LiB8DQp8ICoqUXVvdGEgU2FtcGxpbmcqKiB8IE5vbi1Qcm9iYWJpbGl0YXMgfCBNZW5lbnR1a2FuIGp1bWxhaCB0ZXJ0ZW50dSBkYXJpIHNldGlhcCBrZWxvbXBvayBiZXJkYXNhcmthbiBrYXJha3RlcmlzdGlrIHRlcnRlbnR1LiB8IE1lbWFzdGlrYW4gcmVwcmVzZW50YXNpIGtlbG9tcG9rIHRlcnRlbnR1LiB8IFRpZGFrIGFjYWssIHBvdGVuc2kgYmlhcyBzZWxla3NpLiB8IFN0dWRpIHBlbWFzYXJhbiBkZW5nYW4gbWVtYmFnaSByZXNwb25kZW4gYmVyZGFzYXJrYW4gamVuaXMga2VsYW1pbi4gfA0KfCAqKkp1ZGdtZW50YWwgKFB1cnBvc2l2ZSkgU2FtcGxpbmcqKiB8IE5vbi1Qcm9iYWJpbGl0YXMgfCBQZW5lbGl0aSBtZW1pbGloIHNhbXBlbCBiZXJkYXNhcmthbiBwZXJ0aW1iYW5nYW4gdGVydGVudHUuIHwgRm9rdXMgcGFkYSBrZWxvbXBvayBzcGVzaWZpayB5YW5nIHJlbGV2YW4uIHwgU3ViamVrdGlmLCBiaXNhIGt1cmFuZyBtZXdha2lsaSBwb3B1bGFzaSBzZWNhcmEgdW11bS4gfCBTdHVkaSB0ZW50YW5nIHBha2FyIGluZHVzdHJpIGF0YXUga2Vsb21wb2sgcHJvZmVzaW9uYWwgdGVydGVudHUuIHwNCnwgKipTbm93YmFsbCBTYW1wbGluZyoqIHwgTm9uLVByb2JhYmlsaXRhcyB8IFJlc3BvbmRlbiBhd2FsIG1lcmVrb21lbmRhc2lrYW4gaW5kaXZpZHUgbGFpbiB1bnR1ayBkaWphZGlrYW4gc2FtcGVsLiB8IENvY29rIHVudHVrIHBvcHVsYXNpIHRlcnNlbWJ1bnlpIGF0YXUgc3VsaXQgZGlqYW5na2F1LiB8IFRpZGFrIGJpc2EgbWVuZ2dlbmVyYWxpc2FzaSwgYmlzYSBtZW55ZWJhYmthbiBiaWFzIGtlYmVyZ2FudHVuZ2FuLiB8IFN0dWRpIGtvbXVuaXRhcyBkZW5nYW4gaXN1IHNlbnNpdGlmIHNlcGVydGkgcGVuZ2d1bmEgbmFya29iYS4gfA0KDQoqKktFU0lNUFVMQU4qKjogIA0KUGVtaWxpaGFuIG1ldG9kZSBzYW1wbGluZyBiZXJnYW50dW5nIHBhZGEgKip0dWp1YW4gcGVuZWxpdGlhbiwga2V0ZXJzZWRpYWFuIHN1bWJlciBkYXlhLCBkYW4gc2lmYXQgcG9wdWxhc2kgeWFuZyBkaXRlbGl0aSoqLiBNZXRvZGUgcHJvYmFiaWxpdGFzIGxlYmloIHVuZ2d1bCBkYWxhbSBtZW1iZXJpa2FuICoqaGFzaWwgeWFuZyBkYXBhdCBkaWdlbmVyYWxpc2FzaSoqLCBzZWRhbmdrYW4gbWV0b2RlIG5vbi1wcm9iYWJpbGl0YXMgbGViaWggKiplZmlzaWVuIGRhbiBmbGVrc2liZWwqKiwgdGVydXRhbWEga2V0aWthIGFrc2VzIGtlIHBvcHVsYXNpIHRlcmJhdGFzLg0KDQojIFVrdXJhbiBTYW1wZWwgeWFuZyBEaXBlcmx1a2FuIHVudHVrIE1vRSA9IDUNCg0KUGVyaGl0dW5nYW4gbWFudWFsIHVudHVrIG1lbmVudHVrYW4gdWt1cmFuIHNhbXBlbCBkZW5nYW4gKipNYXJnaW4gb2YgRXJyb3IgKE1vRSkgPSA1JSoqIGRhbGFtIHBvcHVsYXNpICoqNTAwIG9yYW5nKiosIG1lbmdndW5ha2FuIGtvcmVrc2kgcG9wdWxhc2kgdGVyYmF0YXMgKCoqRmluaXRlIFBvcHVsYXRpb24gQ29ycmVjdGlvbiAtIEZQQyoqKS4gIA0KDQojIyAqKlJ1bXVzIERhc2FyIE1vRToqKiAgDQpcWw0KTW9FID0gWiBcdGltZXMgXGZyYWN7XHNpZ21hfXtcc3FydHtufX0NClxdICANCg0KVW50dWsgdWt1cmFuIHNhbXBlbCwgZGlndW5ha2FuIHJ1bXVzOiAgDQpcWw0KbiA9IFxmcmFje1peMiBcdGltZXMgXHNpZ21hXjJ9e01vRV4yfQ0KXF0gIA0KDQpLYXJlbmEgcG9wdWxhc2kgdGVyYmF0YXMsIGtvcmVrc2kgZGlsYWt1a2FuIGRlbmdhbiBydW11czogIA0KXFsNCm5fe1x0ZXh0e2Fkan19ID0gXGZyYWN7bn17MSArIFxmcmFje24gLSAxfXtOfX0NClxdICANCg0KRGltYW5hOiAgDQotICoqWioqID0gMS45NiAodW50dWsgdGluZ2thdCBrZXBlcmNheWFhbiA5NSUpICANCi0gKirPgyoqID0gMC41IChlc3RpbWFzaSBkZXZpYXNpIHN0YW5kYXIgdW50dWsgcHJvcG9yc2kgNTAlKSAgDQotICoqTW9FKiogPSAwLjA1ICANCi0gKipOKiogPSA1MDAgKHVrdXJhbiBwb3B1bGFzaSkgIA0KDQojIyAqKkxhbmdrYWggUGVyaGl0dW5nYW46KiogIA0KDQoxLiBIaXR1bmcgdWt1cmFuIHNhbXBlbCBhd2FsICh0YW5wYSBrb3Jla3NpIHBvcHVsYXNpKTogIA0KICAgXFsNCiAgIG4gPSBcZnJhY3soMS45NileMiBcdGltZXMgKDAuNSleMn17KDAuMDUpXjJ9DQogICBcXSAgDQogICBcWw0KICAgbiA9IFxmcmFjezMuODQxNiBcdGltZXMgMC4yNX17MC4wMDI1fQ0KICAgXF0gIA0KICAgXFsNCiAgIG4gPSBcZnJhY3swLjk2MDR9ezAuMDAyNX0gPSAzODQuMTYgXGFwcHJveCAzODUNCiAgIFxdICANCg0KMi4gS29yZWtzaSB1bnR1ayBwb3B1bGFzaSB0ZXJiYXRhczogIA0KICAgXFsNCiAgIG5fe1x0ZXh0e2Fkan19ID0gXGZyYWN7Mzg1fXsxICsgXGZyYWN7Mzg1IC0gMX17NTAwfX0NCiAgIFxdICANCiAgIFxbDQogICBuX3tcdGV4dHthZGp9fSA9IFxmcmFjezM4NX17MSArIFxmcmFjezM4NH17NTAwfX0NCiAgIFxdICANCiAgIFxbDQogICBuX3tcdGV4dHthZGp9fSA9IFxmcmFjezM4NX17MSArIDAuNzY4fQ0KICAgXF0gIA0KICAgXFsNCiAgIG5fe1x0ZXh0e2Fkan19ID0gXGZyYWN7Mzg1fXsxLjc2OH0NCiAgIFxdICANCiAgIFxbDQogICBuX3tcdGV4dHthZGp9fSA9IDIxNy44IFxhcHByb3ggMjE4DQogICBcXSAgDQoNCiMjICoqSGFzaWwgQWtoaXI6KiogIA0KVWt1cmFuIHNhbXBlbCB5YW5nIGRpcGVybHVrYW4gdW50dWsgKipNb0UgPSA1JSoqIGRhbGFtIHBvcHVsYXNpICoqNTAwIG9yYW5nKiogYWRhbGFoICoqMjE4IHJlc3BvbmRlbioqLg0KDQojIEtlc2ltcHVsYW4gZGFuIFJla29tZW5kYXNpDQoNCiMjICoqS2VzaW1wdWxhbioqICANCg0KRGFsYW0gcGVuZWxpdGlhbiBpbmksIGJlcmJhZ2FpIG1ldG9kZSAqKnByb2JhYmlsaXR5IHNhbXBsaW5nKiogZGFuICoqbm9uLXByb2JhYmlsaXR5IHNhbXBsaW5nKiogdGVsYWggZGlhbmFsaXNpcyB1bnR1ayBtZW5nZXZhbHVhc2kga2Vha3VyYXRhbiBzZXJ0YSBlZmlzaWVuc2lueWEgZGFsYW0gbWVuZ2VzdGltYXNpIHBlbmdlbHVhcmFuIG1haGFzaXN3YS4gSGFzaWwgYW5hbGlzaXMgbWVudW5qdWtrYW4gYmFod2EgbWV0b2RlICoqcHJvYmFiaWxpdHkgc2FtcGxpbmcqKiBsZWJpaCB1bmdndWwgZGFsYW0gbWVuZ2hhc2lsa2FuIGVzdGltYXNpIHlhbmcgYWt1cmF0IGRhbiBkYXBhdCBkaWdlbmVyYWxpc2FzaSBrZSBzZWx1cnVoIHBvcHVsYXNpIGthcmVuYSBzZXRpYXAgaW5kaXZpZHUgbWVtaWxpa2kgcGVsdWFuZyB5YW5nIHNhbWEgdW50dWsgdGVycGlsaWggc2ViYWdhaSBzYW1wZWwuIFNlYmFsaWtueWEsIG1ldG9kZSAqKm5vbi1wcm9iYWJpbGl0eSBzYW1wbGluZyoqLCBtZXNraXB1biBsZWJpaCBtdWRhaCBkYW4gY2VwYXQgZGl0ZXJhcGthbiwgbWVtaWxpa2kgdGluZ2thdCBiaWFzIHlhbmcgbGViaWggdGluZ2dpIHlhbmcgZGFwYXQgbWVtcGVuZ2FydWhpIGtlYW5kYWxhbiBoYXNpbCBwZW5lbGl0aWFuLiAgDQoNCkRpIGFudGFyYSBtZXRvZGUgKipwcm9iYWJpbGl0eSBzYW1wbGluZyoqLCAqKlN0cmF0aWZpZWQgU2FtcGxpbmcqKiBtZW1iZXJpa2FuIGhhc2lsIHlhbmcgcGFsaW5nIHJlcHJlc2VudGF0aWYgdW50dWsgcG9wdWxhc2kgeWFuZyBoZXRlcm9nZW4ga2FyZW5hIG1hbXB1IG1lbmFuZ2thcCB2YXJpYXNpIGFudGFyIGtlbG9tcG9rLiAqKkNsdXN0ZXIgU2FtcGxpbmcqKiwgbWVza2lwdW4gbGViaWggaGVtYXQgYmlheWEgZGFuIHdha3R1LCBkYXBhdCBtZW5naGFzaWxrYW4gaGFzaWwgeWFuZyBrdXJhbmcgYWt1cmF0IGppa2Ega2xhc3RlciB5YW5nIGRpcGlsaWggdGlkYWsgY3VrdXAgbWVuY2VybWlua2FuIHBvcHVsYXNpIHNlY2FyYSBrZXNlbHVydWhhbi4gKipTeXN0ZW1hdGljIFNhbXBsaW5nKiogbWVuYXdhcmthbiBlZmlzaWVuc2kgZGFsYW0gcGVtaWxpaGFuIHNhbXBlbCwgdGV0YXBpIHJlbnRhbiB0ZXJoYWRhcCBiaWFzIGppa2EgdGVyZGFwYXQgcG9sYSB0ZXJ0ZW50dSBkYWxhbSBwb3B1bGFzaS4gKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpKiogbWVtYmVyaWthbiBoYXNpbCB5YW5nIHRpZGFrIGJpYXMsIHRldGFwaSBrdXJhbmcgZWZla3RpZiB1bnR1ayBwb3B1bGFzaSBoZXRlcm9nZW4ga2FyZW5hIHRpZGFrIG1lbXBlcnRpbWJhbmdrYW4gdmFyaWFzaSBhbnRhciBrZWxvbXBvay4gKipNdWx0aS1TdGFnZSBTYW1wbGluZyoqIGJlcmd1bmEgdW50dWsgcG9wdWxhc2kgYmVzYXIgZGFuIGtvbXBsZWtzLCB0ZXRhcGkgbWVtaWxpa2kgbWFyZ2luIG9mIGVycm9yIHlhbmcgbGViaWggdGluZ2dpIGFraWJhdCBwZW1pbGloYW4gc2FtcGVsIHlhbmcgZGlsYWt1a2FuIHNlY2FyYSBiZXJ0YWhhcC4gIA0KDQpEaSBzaXNpIGxhaW4sIG1ldG9kZSAqKm5vbi1wcm9iYWJpbGl0eSBzYW1wbGluZyoqIGxlYmloIHNlcmluZyBkaWd1bmFrYW4gZGFsYW0gcGVuZWxpdGlhbiBla3NwbG9yYXRpZiBhdGF1IGtldGlrYSBrZXRlcmJhdGFzYW4gc3VtYmVyIGRheWEgbWVuamFkaSBmYWt0b3IgdXRhbWEuICoqQ29udmVuaWVuY2UgU2FtcGxpbmcqKiBtZXJ1cGFrYW4gbWV0b2RlIHlhbmcgcGFsaW5nIG11ZGFoIGRpdGVyYXBrYW4gdGV0YXBpIG1lbWlsaWtpIGJpYXMgc2VsZWtzaSB5YW5nIHRpbmdnaS4gKipKdWRnbWVudGFsIChQdXJwb3NpdmUpIFNhbXBsaW5nKiogbWVtdW5na2lua2FuIHBlbWlsaWhhbiBzYW1wZWwgYmVyZGFzYXJrYW4gcGVydGltYmFuZ2FuIHBlbmVsaXRpLCB0ZXRhcGkgYmVyaXNpa28gdGluZ2dpIHRlcmhhZGFwIHN1Ympla3Rpdml0YXMuICoqUXVvdGEgU2FtcGxpbmcqKiBiZXJ1c2FoYSBtZW5ndXJhbmdpIGJpYXMgZGVuZ2FuIG1lbmVudHVrYW4gcHJvcG9yc2kgdGVydGVudHUgZGFsYW0gc2FtcGVsLCB0ZXRhcGkgcGVtaWxpaGFuIGluZGl2aWR1IGRpIHNldGlhcCBrYXRlZ29yaSBtYXNpaCBkYXBhdCBkaXBlbmdhcnVoaSBvbGVoIGJpYXMgc2VsZWtzaS4gKipTbm93YmFsbCBTYW1wbGluZyoqIGJlcmd1bmEgdW50dWsgbWVuZWxpdGkga2Vsb21wb2sgeWFuZyBzdWxpdCBkaWphbmdrYXUsIHRldGFwaSBtZW1pbGlraSByaXNpa28ga2V0ZXJiYXRhc2FuIHZhcmlhc2kgZGFsYW0gc2FtcGVsLiAgDQoNClNlbGFpbiBpdHUsIHBlcmhpdHVuZ2FuICoqdWt1cmFuIHNhbXBlbCB5YW5nIGRpcGVybHVrYW4qKiB1bnR1ayBtZW5jYXBhaSAqKk1hcmdpbiBvZiBFcnJvciAoTW9FKSBzZWJlc2FyIDUqKiBtZW51bmp1a2thbiBiYWh3YSBoYW1waXIgc2VsdXJ1aCBwb3B1bGFzaSBoYXJ1cyBkaXN1cnZlaSBhZ2FyIHRpbmdrYXQga2VzYWxhaGFuIHRldGFwIGtlY2lsLiBIYWwgaW5pIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBzZW1ha2luIGtlY2lsIE1vRSB5YW5nIGRpaW5naW5rYW4sIHNlbWFraW4gYmVzYXIgdWt1cmFuIHNhbXBlbCB5YW5nIGRpYnV0dWhrYW4gdW50dWsgbWVuaW5na2F0a2FuIGFrdXJhc2kgaGFzaWwgcGVuZWxpdGlhbi4gT2xlaCBrYXJlbmEgaXR1LCBrb21wcm9taSBhbnRhcmEgdWt1cmFuIHNhbXBlbCBkYW4gdGluZ2thdCBha3VyYXNpIHlhbmcgZGFwYXQgZGl0ZXJpbWEgcGVybHUgZGlwZXJoaXR1bmdrYW4sIHRlcnV0YW1hIGtldGlrYSBzdW1iZXIgZGF5YSB5YW5nIHRlcnNlZGlhIHRlcmJhdGFzLiAgDQoNCiMjICoqUmVrb21lbmRhc2kqKiAgDQoNCkJlcmRhc2Fya2FuIGhhc2lsIGFuYWxpc2lzIHlhbmcgZGlsYWt1a2FuLCBiZWJlcmFwYSByZWtvbWVuZGFzaSB5YW5nIGRhcGF0IGRpdGVyYXBrYW4gZGFsYW0gcGVtaWxpaGFuIG1ldG9kZSBzYW1wbGluZyBhZGFsYWggc2ViYWdhaSBiZXJpa3V0OiAgDQoNCjEuICoqUGVuZ2d1bmFhbiBwcm9iYWJpbGl0eSBzYW1wbGluZyBsZWJpaCBkaXNhcmFua2FuKiogamlrYSBwZW5lbGl0aWFuIGJlcnR1anVhbiB1bnR1ayBtZW5kYXBhdGthbiBoYXNpbCB5YW5nIGFrdXJhdCBkYW4gZGFwYXQgZGlnZW5lcmFsaXNhc2kga2Ugc2VsdXJ1aCBwb3B1bGFzaS4gSmlrYSBwb3B1bGFzaSBiZXJzaWZhdCBoZXRlcm9nZW4sICoqU3RyYXRpZmllZCBTYW1wbGluZyoqIGRhcGF0IG1lbmphZGkgbWV0b2RlIHRlcmJhaWsgdW50dWsgbWVtYXN0aWthbiByZXByZXNlbnRhc2kgeWFuZyBsZWJpaCBiYWlrIGFudGFyIGtlbG9tcG9rLiAgDQoNCjIuICoqU3lzdGVtYXRpYyBTYW1wbGluZyBkYXBhdCBkaXBpbGloKiogamlrYSBkaXBlcmx1a2FuIGVmaXNpZW5zaSBkYWxhbSBwZW1pbGloYW4gc2FtcGVsLCBuYW11biBwZXJsdSBkaWxha3VrYW4gcGVuZ2VjZWthbiB0ZXJoYWRhcCBrZW11bmdraW5hbiBhZGFueWEgcG9sYSBkYWxhbSBkYXRhIHBvcHVsYXNpIGFnYXIgdGlkYWsgdGVyamFkaSBiaWFzIHNpc3RlbWF0aXMuICANCg0KMy4gKipDbHVzdGVyIFNhbXBsaW5nIGRhcGF0IGRpdGVyYXBrYW4qKiBkYWxhbSBrb25kaXNpIGRpIG1hbmEgcGVuZWxpdGlhbiBtZW5jYWt1cCB3aWxheWFoIHlhbmcgbHVhcyBhdGF1IHBvcHVsYXNpIHlhbmcgdGVyc2ViYXIsIHRldGFwaSBwZW1pbGloYW4ga2xhc3RlciBoYXJ1cyBkaWxha3VrYW4gc2VjYXJhIGhhdGktaGF0aSB1bnR1ayBtZW1hc3Rpa2FuIHJlcHJlc2VudGFzaSB5YW5nIGJhaWsuICANCg0KNC4gKipTaW1wbGUgUmFuZG9tIFNhbXBsaW5nIChTUlMpIGxlYmloIGNvY29rIGRpZ3VuYWthbioqIGppa2EgcG9wdWxhc2kgYmVyc2lmYXQgaG9tb2dlbiBkYW4ganVtbGFoIHN1bWJlciBkYXlhIHlhbmcgdGVyc2VkaWEgY3VrdXAgdW50dWsgbWVtdW5na2lua2FuIHBlbWlsaWhhbiBzYW1wZWwgc2VjYXJhIGFjYWsgdGFucGEgaGFtYmF0YW4gb3BlcmFzaW9uYWwuICANCg0KNS4gKipOb24tcHJvYmFiaWxpdHkgc2FtcGxpbmcgZGFwYXQgZGlndW5ha2FuKiogZGFsYW0gc2l0dWFzaSBkaSBtYW5hIHBlbmVsaXRpYW4gYmVyc2lmYXQgZWtzcGxvcmF0aWYgYXRhdSBrZXRpa2Ega2V0ZXJiYXRhc2FuIHN1bWJlciBkYXlhIG1lbWJ1YXQgcHJvYmFiaWxpdHkgc2FtcGxpbmcgc3VsaXQgZGl0ZXJhcGthbi4gTmFtdW4sIHBlbmVsaXRpIGhhcnVzIG1lbnlhZGFyaSBwb3RlbnNpIGJpYXMgeWFuZyBhZGEgZGFuIG1lbXBlcnRpbWJhbmdrYW4gc3RyYXRlZ2kgbWl0aWdhc2ksIHNlcGVydGkgbWVuZ2d1bmFrYW4ga29tYmluYXNpIG1ldG9kZSB1bnR1ayBtZW5pbmdrYXRrYW4gdmFsaWRpdGFzIGhhc2lsIHBlbmVsaXRpYW4uICANCg0KNi4gKipQZW5lbnR1YW4gdWt1cmFuIHNhbXBlbCBoYXJ1cyBtZW1wZXJ0aW1iYW5na2FuIG1hcmdpbiBvZiBlcnJvciB5YW5nIGRpaW5naW5rYW4qKiBzZXJ0YSBrZXRlcmJhdGFzYW4gc3VtYmVyIGRheWEgeWFuZyB0ZXJzZWRpYS4gSmlrYSBtYXJnaW4gb2YgZXJyb3IgeWFuZyBrZWNpbCBkaXBlcmx1a2FuLCBtYWthIGp1bWxhaCBzYW1wZWwgaGFydXMgZGl0aW5na2F0a2FuLCB0ZXRhcGkgamlrYSBzdW1iZXIgZGF5YSB0ZXJiYXRhcywga29tcHJvbWkgYW50YXJhIGFrdXJhc2kgZGFuIGVmaXNpZW5zaSBoYXJ1cyBkaWxha3VrYW4uICANCg0KRGVuZ2FuIG1lbXBlcnRpbWJhbmdrYW4gcmVrb21lbmRhc2kgaW5pLCBwZW1pbGloYW4gbWV0b2RlIHNhbXBsaW5nIHlhbmcgdGVwYXQgZGFwYXQgbWVtYmFudHUgbWVuaW5na2F0a2FuIGt1YWxpdGFzIGhhc2lsIHBlbmVsaXRpYW4sIG1lbWFzdGlrYW4gcmVwcmVzZW50YXNpIHlhbmcgbGViaWggYmFpaywgZGFuIG1lbmd1cmFuZ2kgcG90ZW5zaSBiaWFzIHlhbmcgZGFwYXQgbWVtcGVuZ2FydWhpIGtlc2ltcHVsYW4gYWtoaXIu