Ujian Tengah Semester

Teknik Sampling dan Survei

Logo


1 Simulasi Kesalahan Sampling di Lapangan


Andikan Anda adalah bagian dari tim riset lapangan yang diminta untuk melakukan survei tingkat penggunaan aplikasi transportasi online di 3 kota menengah di Sumatera. Target sampel total adalah 600 responden masing-masing 200 per kota. Tetapi, setelah 2 minggu melakukan survei anda menemukan: - Di Kota A, tim berhasil mendapatkan 250 responden. - Di Kota B, hanya 120 responden yang dapat diwawancarai. - Di Kota C, 180 responden.

Instruksi:

1.1 Penyelesaian

  1. Jelaskan dua jenis kesalahan sampling yang terjadi berdasarkan situasi ini.

Terdapat Dua Jenis Kesalahan yang terjadi pada situasi ini:

  1. Kesalahan Sampling Non-Respon (Non-Respon Bias)
  • Hal ini terjadi pada saat dari target populasi tidak memberikan respon. Hal ini mengakibatkan, data yang terkumpul mungkin menjadi tidak mencerminkan karakteristik seluruh populasi.

  • Contoh pada kasus di Kota B yang terdapat 120 responden yang berhasil diwawancarahi. Hal ini tidak memenuhi target responden pada setiap kota yaitu 200 responden. Dengan kata lain, terdapat 80 responden yang tidak memberikan respon. Jika karakteristik pada 80 responden ini berbeda dari 120 responden yang diwawancarai, hasil survei bisa menjadi bias.

  1. Kesalahan Sampling Proporsional (Propotional Sampling Error)
  • Hal ini terjadi ketika distribusi sampel yang terkumpul tidak sesuai dengan target yang sudah direncanakan. Hal ini mengakibatkan beberapa kelompok mungkin terlalu mewakili ataupun kurang terwakili.

  • Contoh pada Kasus ini terdapat target awal dengan 200 responden di setiap kota. Namun setelah 2 minggu hasil survei yang dihasilkan di Kota A : 250 responden (melebihi target responden), di Kota B : 120 responden (kurang memenuhi target responden), di Kota C (juga kurang memenuhi target responden). Ketidakseimbangan ini membuat hasil survei tidak proporsional.

1.2 Penyelesaian

  1. Jika Anda harus menyesuaikan bobot untuk mengembalikan representasi proporsional, bagaimana Anda akan menghitungnya?

Untuk mengembalikan representasi proporsional, kita dapat menghitung bobot (weight) di setiap kota yang berdasarkan target dan jumlah responden aktual. Berikut langkah-langkahnya:

  1. Rumus Bobot

\[ \text{Bobot Kota} = \frac{\text{Target Sampel Kota}}{\text{Jumlah Responden Aktual Kota}} \]

Penjelasan:

  • Target Sampel Kota : Jumlah target responden yang seharusnya diwawancarai di setiap kota yaitu 200 responden.

  • Jumlah Responden Aktual Kota : Jumlah target responden yang berhasil diwawancarai di setiap kota.

  1. Perhitungan Bobot untuk Setiap Kota
  • Kota A

\[ \text{Bobot Kota} = \frac{\text{Target Sampel Kota}}{\text{Jumlah Responden Aktual Kota}} \]

⬩ Contoh untuk di Kota A:

\[ \text{Bobot Kota A} = \frac{200}{250} = 0{.}8 \]

Artinya, setiap responden di kota A akan dihitung sebagai 0.8 dalam analisis.

  • Kota B

\[ \text{Bobot Kota} = \frac{\text{Target Sampel Kota}}{\text{Jumlah Responden Aktual Kota}} \]

⬩ Contoh untuk di Kota B:

\[ \text{Bobot Kota B} = \frac{200}{120} = 1{.}67 \] Artinya, setiap responden di kota B akan dihitung sebagai 1.67 dalam analisis.

  • Kota C

\[ \text{Bobot Kota} = \frac{\text{Target Sampel Kota}}{\text{Jumlah Responden Aktual Kota}} \]

⬩ Contoh untuk di Kota C:

\[ \text{Bobot Kota C} = \frac{200}{180} = 1{.}11 \]

Artinya, setiap responden di kota C akan dihitung sebagai 1.11 dalam analisis.

  • Dengan menerapkan bobot ini, data dari ketiga kota akan lebih seimbang dan mencerminkan proporsi yang diinginkan, meskipun jumlah responden aktual tidak sesuai target.

  • Kesimpulan nya:
    Penerapan bobot adalah langkah penting untuk memastikan hasil survei tetap valid dan representatif, meskipun ada ketidakseimbangan dalam jumlah responden yang terkumpul.


2 Mendesain Survei dengan Pembobotan Waktu Puncak


Buatlah desain rancangan survei tentang persepsi kenyamanan pengguna ojek online saat jam sibuk (07.00–09.00 dan 17.00–19.00).

Instruksi:

2.1 Penyelesaian

  1. Desain pendekatan sampling yang memungkinkan Anda menangkap persepsi pengguna secara representatif pada jam sibuk, tanpa melakukan survei sepanjang hari.

Adapun tujuan dalam hal ini adalah untuk menangkap persepsi terhadap pengguna ojek online secara representatif pada jam sibuk (07.00–09.00 dan 17.00–19.00).

  1. Stratifikasi Berdasarkan Waktu
  • Waktu dilakukannya survei dibagi menjadi dua periode:

Pagi : (07.00–09).

Sore : (17.00–19.00).

  • Setiap periode dianggap sebagai strata karena data historis menunjukkan perbedaan jumlah pengguna.
  1. Proporsi Pengguna Berdasarkan Data Historis
  • Misal, pengguna sore dua kali lebih banyak dibandingkan dengan pagi.

  • Proporsi pengguna:

Pagi \(\frac{1}{3}\) dari total pengguna.

Sore \(\frac{2}{3}\) dari total pengguna.

  1. Target Responden
  • Jika total responden adalah 300:

Pagi \(\frac{1}{3} \times 300 = 100\) responden

Sore \(\frac{2}{3} \times 300 = 200\) responden

2.2 Penyelesaian

  1. Sertakan rancangan waktu, metode pemilihan responden, dan justifikasi pemilihan unit sampling.
  1. Rancangan Waktu
  • Survei dilakukan hanya pada saat jam sibuk:

Pagi : (07.00–09).

Sore : (17.00–19.00).

  1. Metode Pemilihan Responden
  • Random Sampling :

⬩ Memilih responden secara acak dari pengguna ojek online yang aktif selama jam sibuk.

  • Quota Sampling :

⬩ Menetapkan kuota responden untuk pagi dan sore berdasarkan proporsi:

Pagi : \((\frac{1}{3})\) responden.

Sore : \((\frac{2}{3})\) responden.

  1. Justifikasi
  • Unit Sampling : Pengguna aktif ojek online pada saat jam sibuk.

  • Alasan :

⬩ Pengguna aktif pada jam sibuk merupakan populasi yang relevan dalam menilai ataupun mengukur persepsi kenyamanan. Misalnya, persepsi kenyamanan pada saat jam padatnya lalu lintas.

⬩ Data yang berasal dari pengguna aktif ojek online akan menjadi lebih akurat dibanding pengguna acak di luar jam sibuk.

⬩ Pemilihan lokasi strategis memastikan untuk mengakses ke populasi target

2.3 Penyelesaian

  1. Jelaskan bagaimana Anda akan menyesuaikan hasil survei jika 60% responden berasal dari pagi hari, sementara 40% dari sore hari, sedangkan data historis menunjukkan pengguna ojek online saat sore hari dua kali lebih banyak dibanding pagi.

Masalah penyesuaian hasil survei adalah jika hasil survei menunjukkan bahwa 60% responden berasal dari pagi dan 40% responden berasal dari sore hari, tetapi pada data historis menunjukkan bahwa pengguna sore dua kali lebih banyak dibandingkan dengan pengguna pada pagi hari Maka dari itu, perlu dilakukan pembobotan.

  1. Rumus Bobot

Bobot dihitung dengan :

\[ \text{Bobot Waktu} = \frac{\text{Proporsi Historis}}{\text{Proporsi Responden Aktual}} \]

  1. Perhitungan Bobot :
  • Pagi

⬩ Proporsi historis: \(( \frac{1}{3} = 33{.}3\% )\)

⬩ Proporsi responden aktual: \(( 60\%)\)

\[ \text{Bobot Waktu} = \frac{\text{Proporsi Historis}}{\text{Proporsi Responden Aktual}} \]

⬩ Contoh perhitungan bobot pada Pagi:

\[ \text{Bobot Pagi} = \frac{33{.}3}{60} = 0{.}555 \]

  • Sore

⬩ Proporsi historis: \(( \frac{2}{3} = 66{.}7\%)\)

⬩ Proporsi responden aktual: \(( 40\%)\)

\[ \text{Bobot Waktu} = \frac{\text{Proporsi Historis}}{\text{Proporsi Responden Aktual}} \]

⬩ Contoh perhitungan bobot pada Sore:

\[ \text{Bobot Sore} = \frac{66{.}7}{40} = 1{.}667 \] 3. Penerapan Bobot :

  • Penerapan bobot ini untuk memastikan hasil survei mencerminkan distribusi pengguna ojek online yang sebenarnya. Dalam analisis data:

⬩ Responden pagi dikali dengan bobot 0.555.

⬩ Responden sore dikalikan dengan bobot 1.667.

  1. Contoh Perhitungan :

⬩ Jumlah Responden Aktual: 300

  • Distribusi Aktual :

Pagi : 180 responden
Sore : 120 responden

  • Setelah Dilakukan Pembobotan :

Pagi :

\[( 180 \times 0{,}555 = 99{.}9 \Rightarrow \text{dibulatkan menjadi } 100)\]

Sore :
\[( 120 \times 1{,}667 = 200{.}04 \Rightarrow \text{dibulatkan menjadi } 200)\]


3 Soal Ketiga


Anda ditugaskan oleh biro akademik kampus untuk merancang instrumen survei yang bertujuan mengevaluasi kepuasan mahasiswa terhadap layanan akademik, yang mencakup layanan seperti: KRS online, bimbingan akademik, pelayanan administrasi, akses informasi akademik, dan bantuan penyelesaian studi.

Tim peneliti meminta Anda untuk:

3.1 Penyelesaian

  • Merancang 25 pertanyaan utama dengan variasi skala dan bentuk pertanyaan.

  • Adapun tujuan dari pertanyaan tersebut untuk mengevaluasi tingkat kepuasan mahasiswa terhadap berbagai layanan akademik di kampus, seperti:

⬩ KRS online

⬩ Bimbingan akademik

⬩ Pelayanan administrasi

⬩ Akses informasi akademik

⬩ Bantuan penyelesaian studi

  1. Desain Pertanyaan

Berikut lampiran 25 pertanyaan yang bertujuan mengevaluasi kepuasan mahasiswa terhadap layanan akademik. https://tinyurl.com/585wycap

Catatan:

  • Bentuk pertanyaan : Likert scale, rating scale, dan pilihan ganda

  • Contoh variasi skala:

⬩ Likert 1-5 : Sangat tidak puas hingga sangat puas

⬩ Skala 1-10 : untuk kenyamanan penggunaan sistem

⬩ Pilihan Ganda : Sumber informasi, kecepatan layanan, dll.

3.2 Penyelesaian

  • Merancang sistem validasi instrumen.
  1. Sistem Validasi Instrumen

A. Validasi Isi

  • Meminta atau melibatkan para pakar atau dosen pembimbing menilai apakah setiap pertanyaan sesuai dengan tujuan survei?

⬩ Sesuai dengan aspek yang dinilai

⬩ Menggambarkan dimensi layanan akademik

  • Contoh:

⬩ Kemudahan dalam mengakses KRS online

⬩ Kemudahan mendapatkan informasi jadwal perkuliahan

B. Validasi Konstruk

  • Dalam hal ini gunakan Analisis Faktor Eksploratori (EFA). Hal ini dilakukan dengan tujuan untuk memastikan bahwa :

⬩ Memastikan bahwa pertanyaan dalam satu layanan membentuk satu kelompok (konstruk) yang sesuai

  • Misalnya:

⬩ 5 Pertanyaan tentang KRS Online : membentuk 1 faktor

⬩ 5 Pertanyaan tentang Bimbingan Akademik : membentuk faktor lain

  • Hasil dari Analisis Faktor Eksploratori (EFA) yang baik dan sesuai struktur menunjukkan bahwa semua pertanyaan mengelompok sesuai dimensi yang dituju dan validasi konstruk terpenuhi.

C. Uji Reliabilitas - Cronbach’s Alpha

  • Adapun tujuan ini dilakukan untuk mengukur konsistensi internal pertanyaan dalam satu kelompok atau satu dimensi. Misalnya:

  • Contoh Hasil:

⬩ 5 pertanyaan tentang KRS Online menghasilkan nilai Cronbach’s Alpha = 0.83 : Reliabel

⬩ 5 pertanyaan tentang Bimbingan Akademik menghasilkan nilai Cronbach’s Alpha = 0.79

Secara umum, nilai alpha ≥ 0.7 dianggap konsisten dan dapat diandalkan.

3.3 Penyelesaian

  • Menentukan metode distribusi dan pengujian kuesioner secara statistik.

A. Metode Distribusi Survei

  • Menggunakan platform Google Form, lalu disebarkan melalui:

⬩ Grup WhatsApp kelas

⬩ Bantuan dosen wali

⬩ Media sosial kampus

B. Metode Pengambilan Sampel

  • Menggunakan Stratified Random Sampling, artinya:

⬩ Mahasiswa dapat dibagi menjadi per program studi dan angkatan

⬩ Setelah itu, melakukan pemilihan Secara acak dari masing-masing kelompok tersebut dalam setiap strata agar terwakili secara proporsional.

C. Menghitung Ukuran Sampel

Misalnya:

  • Populasi jumlah mahasiswa (\(N\)) = 5000

  • Margin of error (\(e\)) = 5% (0.05)

⬩ Menggunakan Rumus Slovin:

\[ n = \frac{N}{1 + N \cdot e^2} \] \[ n = \frac{5000}{1 + 5000 \cdot (0{,}05)^2} = \frac{5000}{1 + 5000 \cdot 0{,}0025} = \frac{5000}{1 + 12{,}5} = \frac{5000}{13{,}5} \approx 370{,}37 \] Jadi, minimal 371 responden diperlukan agar hasil survei representatif dari total 5000 mahasiswa, dengan tingkat kesalahan 5%.

3.4 Penyelesaian

  • Menyiapkan simulasi strategi pengambilan sampel dan pengolahan data awal.

A. Simulasi Data (2.000 Respon)

⬩ Data diasumsikan berdasarkan proporsi dan asumsi:

  1. Kepuasan KRS Online (1-10)
\[\text{Layanan}\] \[\text{Rata-rata}\] \[\text{Standarisasi/Distribusi} \]
Kepuasan KRS Online (1–10) 7.8 SD ≈ 1.0
Kepuasan Bimbingan Akademik 4.2 SD ≈ 0.6
Kecepatan Pelayanan 40% cukup cepat, 20% lambat
Sumber Informasi Akademik 45% WhatsApp, 30% Website, 25% Dosen
  1. Perhitungan Statistik Deskriptif

A. Kepuasan KRS Online (Skala 1–10)

⬩ Misalnya dari 2000 data, nilai responden tersebar seperti ini:

\[\text{Nilai}\] \[\text{Jumlah Mahasiswa}\]
6 200
7 500
8 800
9 400
10 100
Total 2000

Rata-rata (Mean)

\[ \text{Mean} = \frac{(6 \times 200) + (7 \times 500) + (8 \times 800) + (9 \times 400) + (10 \times 100)}{2000} \] \[ \text{Mean} = \frac{(1200 + 3500 + 6400 + 3600 + 1000)}{2000} = \frac{15{.}700}{2000} = 7{.}85 \approx 7{.}8 \]Median

Data diurutkan : posisi median = ke-1000 dan ke-1001. Nilai ke-1000 & ke-1001 = 8

Sehingga, Median = 8

Standar Deviasi (SD)

Menggunakan rumus:

\[ SD = \sqrt{ \frac{ \sum (x_i - \bar{x})^2 \cdot f_i }{n} } \] Keterangan:

\(\bar{x}\) = 7.85

\(x_i\) = nilai

\(f_i\) = frekuensi tiap nilai

\(n\) = 2000

Hitung tiap selisih kuadrat:

\[\text{Nilai } (x_1)\] \[\text{Frekuensi } (f_1)\] \[(x_i - \bar{x})^2 \] \[f_i \cdot (x_i - \bar{x})^2\]
6 200 \((6 - 7{.}85)^2 = 3{.}4225\) 684.5
7 500 \((7 - 7{.}85)^2 = 0{.}7225\) 361.25
8 800 \((8 - 7{.}85)^2 = 0{.}0225\) 18
9 400 \((9 - 7{.}85)^2 = 1{.}3225\) 529
10 100 \((10 - 7{.}85)^2 = 4{.}6225\) 462.25
Total 2055

\[ SD = \sqrt{ \frac{2055}{2000} } = \sqrt{1{.}0275} \approx 1{.}01 \]

\(SD \approx 1.01\)

B. Bimbingan Akademik (Skala Likert 1-5)

⬩ Distribusi contoh:

\[\text{Nilai}\] \[\text{Jumlah Mahasiswa}\]
2 100
3 300
4 1100
5 500

Rata-rata (Mean)

\[ \text{Mean} = \frac{(2 \times 100) + (3 \times 300) + (4 \times 1100) + (5 \times 500)}{2000} \]

\[ \text{Mean} = \frac{200 + 900 + 4400 + 2500}{2000} = \frac{8000} {2000} = 4.0 \]Median

Data diurutkan : posisi median = ke-1000 dan ke-1001. Nilai ke-1000 & ke-1001 = 4

Sehingga, Median = 4

Standar Deviasi (SD)

\[\text{Nilai } (x_1)\] \[\text{Frekuensi } (f_1)\] \[(x_i - \bar{x})^2 \] \[f_i \cdot (x_i - \bar{x})^2\]
2 100 \((2 - 4)^2 = 4\) 400
3 300 \((3 - 4)^2 = 1\) 300
4 1100 \((4 - 4)^2 = 0\) 0
5 500 \((5 - 4)^2 = 1\) 500
Total 1200

\[ SD = \sqrt{ \frac{1200}{2000} } = \sqrt{0.6} \approx 0{.}77 \]

\(SD \approx 0.77\)

  1. Perhitungan Kategorikal Pelayanan Administrasi

A. Kecepatan Pelayanan Administrasi

\[\text{Kategori}\] \[\text{Proporsi}\] \[\text{Jumlah}\]
Cukup cepat \(40%\) \(0{.}4 \times 2000 = 800 \text{ mahasiswa}\)
Lambat \(20%\) \(0{.}2 \times 2000 = 400 \text{ mahasiswa}\)
Lainnya \(40%\) \(0{.}4 \times 2000 = 800 \text{ mahasiswa}\)

B. Sumber Informasi Akademik

\[\text{Sumber}\] \[\text{Proporsi}\] \[\text{Jumlah}\]
Grup WhatsApp \(45%\) \(0{.}45 \times 2000 = 900\)
Website Kampus \(30%\) \(0{.}30 \times 2000 = 600\)
Dosen Wali \(25%\) \(0{.}25 \times 2000 = 500\)
  1. Ringkasan Tabel Statistik Deskriptif
\[\text{Layanan}\] \[\text{Rata-rata}\] \[\text{Median}\] \[\text{Standar Deviasi} (SD)\]
KRS Online (1–10) 7.8 8 1.01
Bimbingan Akademik (1–5) 4.0 4 0.77
LS0tDQp0aXRsZTogIlVqaWFuIFRlbmdhaCBTZW1lc3RlciINCnN1YnRpdGxlOiAiVGVrbmlrIFNhbXBsaW5nIGRhbiBTdXJ2ZWkiDQphdXRob3I6IA0KICAtICJEd2kgU3JpIFlhbnRpIE1hbnVsbGFuZyINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cw0KICAgIHNlbGZfY29udGFpbmVkOiB0cnVlDQogICAgdGh1bWJuYWlsczogdHJ1ZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KICAgIGxpYl9kaXI6IGxpYnMNCiAgICBkZl9wcmludDogInBhZ2VkIg0KICAgIGNvZGVfZm9sZGluZzogInNob3ciDQogICAgY29kZV9kb3dubG9hZDogeWVzDQogICAgY3NzOiAiQzovVXNlcnMvRHdpIE1hbnVsbGFuZy9Eb3dubG9hZHMvc3R5bGUuY3NzIg0KLS0tDQo8aW1nIGlkPSJsb2dvLXV0YW1hIiBzcmM9IkM6L1VzZXJzL0R3aSBNYW51bGxhbmcvUGljdHVyZXMvQ2FtZXJhIFJvbGwvZHdpLmpwZyIgYWx0PSJMb2dvIiBzdHlsZT0id2lkdGg6MjAwcHg7IGRpc3BsYXk6IGJsb2NrOyBtYXJnaW46IGF1dG87Ij4NCg0KLS0tDQoNCiMgU2ltdWxhc2kgS2VzYWxhaGFuIFNhbXBsaW5nIGRpIExhcGFuZ2FuDQoNCi0tLQ0KDQpBbmRpa2FuIEFuZGEgYWRhbGFoIGJhZ2lhbiBkYXJpIHRpbSByaXNldCBsYXBhbmdhbiB5YW5nIGRpbWludGEgdW50dWsgbWVsYWt1a2FuDQpzdXJ2ZWkgdGluZ2thdCBwZW5nZ3VuYWFuIGFwbGlrYXNpIHRyYW5zcG9ydGFzaSBvbmxpbmUgZGkgKiozIGtvdGEgbWVuZW5nYWgqKiBkaSBTdW1hdGVyYS4NClRhcmdldCBzYW1wZWwgdG90YWwgYWRhbGFoICoqNjAwIHJlc3BvbmRlbioqIG1hc2luZy1tYXNpbmcgMjAwIHBlciBrb3RhLiBUZXRhcGksIHNldGVsYWgNCjIgbWluZ2d1IG1lbGFrdWthbiBzdXJ2ZWkgYW5kYSBtZW5lbXVrYW46DQotIERpIEtvdGEgQSwgdGltIGJlcmhhc2lsIG1lbmRhcGF0a2FuIDI1MCByZXNwb25kZW4uDQotIERpIEtvdGEgQiwgaGFueWEgMTIwIHJlc3BvbmRlbiB5YW5nIGRhcGF0IGRpd2F3YW5jYXJhaS4NCi0gRGkgS290YSBDLCAxODAgcmVzcG9uZGVuLg0KDQoqKkluc3RydWtzaToqKg0KDQojIyBQZW55ZWxlc2FpYW4gDQoNCmEuIEplbGFza2FuICoqZHVhIGplbmlzIGtlc2FsYWhhbiBzYW1wbGluZyoqIHlhbmcgdGVyamFkaSBiZXJkYXNhcmthbiBzaXR1YXNpIGluaS4NCg0KVGVyZGFwYXQgKipEdWEgSmVuaXMgS2VzYWxhaGFuKiogeWFuZyB0ZXJqYWRpIHBhZGEgc2l0dWFzaSBpbmk6DQoNCjEuICoqS2VzYWxhaGFuIFNhbXBsaW5nIE5vbi1SZXNwb24gKE5vbi1SZXNwb24gQmlhcykqKg0KDQotIEhhbCBpbmkgdGVyamFkaSBwYWRhIHNhYXQgZGFyaSB0YXJnZXQgcG9wdWxhc2kgdGlkYWsgbWVtYmVyaWthbiByZXNwb24uIEhhbCBpbmkgbWVuZ2FraWJhdGthbiwgZGF0YSB5YW5nIHRlcmt1bXB1bCBtdW5na2luIG1lbmphZGkgdGlkYWsgbWVuY2VybWlua2FuIGthcmFrdGVyaXN0aWsgc2VsdXJ1aCBwb3B1bGFzaS4gDQoNCi0gQ29udG9oIHBhZGEga2FzdXMgKipkaSBLb3RhIEIqKiB5YW5nIHRlcmRhcGF0ICoqMTIwIHJlc3BvbmRlbioqIHlhbmcgYmVyaGFzaWwgZGl3YXdhbmNhcmFoaS4gSGFsIGluaSB0aWRhayBtZW1lbnVoaSB0YXJnZXQgcmVzcG9uZGVuIHBhZGEgc2V0aWFwIGtvdGEgeWFpdHUgKioyMDAgcmVzcG9uZGVuKiouIERlbmdhbiBrYXRhIGxhaW4sIHRlcmRhcGF0ICoqODAgcmVzcG9uZGVuKiogeWFuZyB0aWRhayBtZW1iZXJpa2FuIHJlc3Bvbi4gSmlrYSBrYXJha3RlcmlzdGlrIHBhZGEgODAgcmVzcG9uZGVuIGluaSBiZXJiZWRhIGRhcmkgMTIwIHJlc3BvbmRlbiB5YW5nIGRpd2F3YW5jYXJhaSwgaGFzaWwgc3VydmVpIGJpc2EgbWVuamFkaSBiaWFzLg0KDQoyLiAqKktlc2FsYWhhbiBTYW1wbGluZyBQcm9wb3JzaW9uYWwgKFByb3BvdGlvbmFsIFNhbXBsaW5nIEVycm9yKSoqDQoNCi0gSGFsIGluaSB0ZXJqYWRpIGtldGlrYSBkaXN0cmlidXNpIHNhbXBlbCB5YW5nIHRlcmt1bXB1bCB0aWRhayBzZXN1YWkgZGVuZ2FuIHRhcmdldCB5YW5nIHN1ZGFoIGRpcmVuY2FuYWthbi4gSGFsIGluaSBtZW5nYWtpYmF0a2FuIGJlYmVyYXBhIGtlbG9tcG9rIG11bmdraW4gdGVybGFsdSBtZXdha2lsaSBhdGF1cHVuIGt1cmFuZyB0ZXJ3YWtpbGkuDQoNCi0gQ29udG9oIHBhZGEgS2FzdXMgaW5pIHRlcmRhcGF0IHRhcmdldCBhd2FsIGRlbmdhbiAqKjIwMCByZXNwb25kZW4qKiBkaSBzZXRpYXAga290YS4gTmFtdW4gc2V0ZWxhaCAyIG1pbmdndSBoYXNpbCBzdXJ2ZWkgeWFuZyBkaWhhc2lsa2FuICoqZGkgS290YSBBIDogMjUwIHJlc3BvbmRlbioqIChtZWxlYmloaSB0YXJnZXQgcmVzcG9uZGVuKSwgKipkaSBLb3RhIEIgOiAxMjAgcmVzcG9uZGVuKiogKGt1cmFuZyBtZW1lbnVoaSB0YXJnZXQgcmVzcG9uZGVuKSwgKipkaSBLb3RhIEMqKiAoanVnYSBrdXJhbmcgbWVtZW51aGkgdGFyZ2V0IHJlc3BvbmRlbikuIEtldGlkYWtzZWltYmFuZ2FuIGluaSBtZW1idWF0IGhhc2lsIHN1cnZlaSB0aWRhayBwcm9wb3JzaW9uYWwuDQoNCiMjIFBlbnllbGVzYWlhbiANCg0KYi4gSmlrYSBBbmRhIGhhcnVzIG1lbnllc3VhaWthbiBib2JvdCB1bnR1ayBtZW5nZW1iYWxpa2FuIHJlcHJlc2VudGFzaSBwcm9wb3JzaW9uYWwsDQpiYWdhaW1hbmEgQW5kYSBha2FuIG1lbmdoaXR1bmdueWE/DQoNClVudHVrIG1lbmdlbWJhbGlrYW4gcmVwcmVzZW50YXNpIHByb3BvcnNpb25hbCwga2l0YSBkYXBhdCBtZW5naGl0dW5nICoqYm9ib3QgKHdlaWdodCkqKiBkaSBzZXRpYXAga290YSB5YW5nIGJlcmRhc2Fya2FuIHRhcmdldCBkYW4ganVtbGFoIHJlc3BvbmRlbiBha3R1YWwuIEJlcmlrdXQgbGFuZ2thaC1sYW5na2FobnlhOg0KDQoxLiAqKlJ1bXVzIEJvYm90KioNCg0KJCQNClx0ZXh0e0JvYm90IEtvdGF9ID0gXGZyYWN7XHRleHR7VGFyZ2V0IFNhbXBlbCBLb3RhfX17XHRleHR7SnVtbGFoIFJlc3BvbmRlbiBBa3R1YWwgS290YX19DQokJA0KDQoqKlBlbmplbGFzYW46KioNCg0KLSAqKlRhcmdldCBTYW1wZWwgS290YSoqIDogSnVtbGFoIHRhcmdldCByZXNwb25kZW4geWFuZyBzZWhhcnVzbnlhIGRpd2F3YW5jYXJhaSBkaSBzZXRpYXAga290YSB5YWl0dSAyMDAgcmVzcG9uZGVuLg0KDQotICoqSnVtbGFoIFJlc3BvbmRlbiBBa3R1YWwgS290YSoqIDogSnVtbGFoIHRhcmdldCByZXNwb25kZW4geWFuZyBiZXJoYXNpbCBkaXdhd2FuY2FyYWkgZGkgc2V0aWFwIGtvdGEuDQoNCg0KMi4gKipQZXJoaXR1bmdhbiBCb2JvdCB1bnR1ayBTZXRpYXAgS290YSoqDQoNCi0gKipLb3RhIEEqKg0KDQokJA0KXHRleHR7Qm9ib3QgS290YX0gPSBcZnJhY3tcdGV4dHtUYXJnZXQgU2FtcGVsIEtvdGF9fXtcdGV4dHtKdW1sYWggUmVzcG9uZGVuIEFrdHVhbCBLb3RhfX0NCiQkDQoNCuKsqSBDb250b2ggdW50dWsgZGkgS290YSBBOg0KDQokJA0KXHRleHR7Qm9ib3QgS290YSBBfSA9IFxmcmFjezIwMH17MjUwfSA9IDB7Ln04DQokJA0KDQoNCkFydGlueWEsIHNldGlhcCByZXNwb25kZW4gKipkaSBrb3RhIEEqKiBha2FuIGRpaGl0dW5nIHNlYmFnYWkgKiowLjgqKiBkYWxhbSBhbmFsaXNpcy4NCg0KLSAqKktvdGEgQioqDQoNCiQkDQpcdGV4dHtCb2JvdCBLb3RhfSA9IFxmcmFje1x0ZXh0e1RhcmdldCBTYW1wZWwgS290YX19e1x0ZXh0e0p1bWxhaCBSZXNwb25kZW4gQWt0dWFsIEtvdGF9fQ0KJCQNCg0K4qypIENvbnRvaCB1bnR1ayBkaSBLb3RhIEI6DQoNCiQkDQpcdGV4dHtCb2JvdCBLb3RhIEJ9ID0gXGZyYWN7MjAwfXsxMjB9ID0gMXsufTY3DQokJA0KQXJ0aW55YSwgc2V0aWFwIHJlc3BvbmRlbiAqKmRpIGtvdGEgQioqIGFrYW4gZGloaXR1bmcgc2ViYWdhaSAqKjEuNjcqKiBkYWxhbSBhbmFsaXNpcy4NCg0KLSAqKktvdGEgQyoqDQoNCiQkDQpcdGV4dHtCb2JvdCBLb3RhfSA9IFxmcmFje1x0ZXh0e1RhcmdldCBTYW1wZWwgS290YX19e1x0ZXh0e0p1bWxhaCBSZXNwb25kZW4gQWt0dWFsIEtvdGF9fQ0KJCQNCg0K4qypIENvbnRvaCB1bnR1ayBkaSBLb3RhIEM6DQoNCiQkDQpcdGV4dHtCb2JvdCBLb3RhIEN9ID0gXGZyYWN7MjAwfXsxODB9ID0gMXsufTExDQokJA0KDQpBcnRpbnlhLCBzZXRpYXAgcmVzcG9uZGVuICoqZGkga290YSBDKiogYWthbiBkaWhpdHVuZyBzZWJhZ2FpICoqMS4xMSoqIGRhbGFtIGFuYWxpc2lzLg0KDQotIERlbmdhbiBtZW5lcmFwa2FuIGJvYm90IGluaSwgZGF0YSBkYXJpIGtldGlnYSBrb3RhIGFrYW4gbGViaWggc2VpbWJhbmcgZGFuIG1lbmNlcm1pbmthbiBwcm9wb3JzaSB5YW5nIGRpaW5naW5rYW4sIG1lc2tpcHVuIGp1bWxhaCByZXNwb25kZW4gYWt0dWFsIHRpZGFrIHNlc3VhaSB0YXJnZXQuDQoNCi0gS2VzaW1wdWxhbiBueWE6ICANClBlbmVyYXBhbiBib2JvdCBhZGFsYWggbGFuZ2thaCBwZW50aW5nIHVudHVrIG1lbWFzdGlrYW4gaGFzaWwgc3VydmVpIHRldGFwIHZhbGlkIGRhbiByZXByZXNlbnRhdGlmLCBtZXNraXB1biBhZGEga2V0aWRha3NlaW1iYW5nYW4gZGFsYW0ganVtbGFoIHJlc3BvbmRlbiB5YW5nIHRlcmt1bXB1bC4NCg0KLS0tDQoNCiMgTWVuZGVzYWluIFN1cnZlaSBkZW5nYW4gUGVtYm9ib3RhbiBXYWt0dSBQdW5jYWsNCg0KLS0tDQoNCkJ1YXRsYWggZGVzYWluIHJhbmNhbmdhbiBzdXJ2ZWkgdGVudGFuZyAqKnBlcnNlcHNpIGtlbnlhbWFuYW4gcGVuZ2d1bmEgb2playBvbmxpbmUgc2FhdCBqYW0gc2lidWsgKDA3LjAw4oCTMDkuMDAgZGFuIDE3LjAw4oCTMTkuMDApKiouDQoNCioqSW5zdHJ1a3NpOioqDQoNCiMjIFBlbnllbGVzYWlhbiANCg0KYS4gRGVzYWluIHBlbmRla2F0YW4gc2FtcGxpbmcgeWFuZyAqKm1lbXVuZ2tpbmthbiBBbmRhIG1lbmFuZ2thcCBwZXJzZXBzaSBwZW5nZ3VuYSBzZWNhcmEgcmVwcmVzZW50YXRpZiBwYWRhIGphbSBzaWJ1ayoqLCB0YW5wYSBtZWxha3VrYW4gc3VydmVpIHNlcGFuamFuZw0KaGFyaS4NCg0KQWRhcHVuICoqdHVqdWFuKiogZGFsYW0gaGFsIGluaSBhZGFsYWggdW50dWsgbWVuYW5na2FwIHBlcnNlcHNpIHRlcmhhZGFwIHBlbmdndW5hIG9qZWsgb25saW5lIHNlY2FyYSByZXByZXNlbnRhdGlmIHBhZGEgamFtIHNpYnVrICgwNy4wMOKAkzA5LjAwIGRhbiAxNy4wMOKAkzE5LjAwKS4NCg0KMS4gKipTdHJhdGlmaWthc2kgQmVyZGFzYXJrYW4gV2FrdHUqKg0KDQotIFdha3R1IGRpbGFrdWthbm55YSBzdXJ2ZWkgZGliYWdpIG1lbmphZGkgZHVhIHBlcmlvZGU6DQoNCuKsqSAqKlBhZ2kgOiAoMDcuMDDigJMwOSkqKi4NCg0K4qypICoqU29yZSA6ICgxNy4wMOKAkzE5LjAwKSoqLg0KDQotIFNldGlhcCBwZXJpb2RlIGRpYW5nZ2FwIHNlYmFnYWkgc3RyYXRhIGthcmVuYSBkYXRhIGhpc3RvcmlzIG1lbnVuanVra2FuIHBlcmJlZGFhbiBqdW1sYWggcGVuZ2d1bmEuDQoNCjIuICoqUHJvcG9yc2kgUGVuZ2d1bmEgQmVyZGFzYXJrYW4gRGF0YSBIaXN0b3JpcyoqDQoNCi0gTWlzYWwsIHBlbmdndW5hIHNvcmUgKipkdWEga2FsaSBsZWJpaCBiYW55YWsgZGliYW5kaW5na2FuIGRlbmdhbiBwYWdpKiouIA0KDQotIFByb3BvcnNpIHBlbmdndW5hOg0KDQrirKkgKipQYWdpKiogJFxmcmFjezF9ezN9JCBkYXJpIHRvdGFsIHBlbmdndW5hLg0KDQrirKkgKipTb3JlKiogJFxmcmFjezJ9ezN9JCBkYXJpIHRvdGFsIHBlbmdndW5hLg0KDQozLiAqKlRhcmdldCBSZXNwb25kZW4qKg0KDQotIEppa2EgdG90YWwgcmVzcG9uZGVuIGFkYWxhaCAqKjMwMCoqOiANCg0K4qypICoqUGFnaSoqICRcZnJhY3sxfXszfSBcdGltZXMgMzAwID0gMTAwJCByZXNwb25kZW4NCg0K4qypICoqU29yZSoqICRcZnJhY3syfXszfSBcdGltZXMgMzAwID0gMjAwJCByZXNwb25kZW4NCg0KIyMgUGVueWVsZXNhaWFuIA0KDQpiLiBTZXJ0YWthbiAqKnJhbmNhbmdhbiB3YWt0dSoqLCBtZXRvZGUgcGVtaWxpaGFuIHJlc3BvbmRlbiwgZGFuIGp1c3RpZmlrYXNpDQpwZW1pbGloYW4gKip1bml0IHNhbXBsaW5nKiouDQoNCjEuICoqUmFuY2FuZ2FuIFdha3R1KioNCg0KLSBTdXJ2ZWkgZGlsYWt1a2FuIGhhbnlhIHBhZGEgc2FhdCBqYW0gc2lidWs6DQoNCuKsqSAqKlBhZ2kgOiAoMDcuMDDigJMwOSkqKi4NCg0K4qypICoqU29yZSA6ICgxNy4wMOKAkzE5LjAwKSoqLg0KDQoNCjIuICoqTWV0b2RlIFBlbWlsaWhhbiBSZXNwb25kZW4qKg0KDQotICoqUmFuZG9tIFNhbXBsaW5nKiogOiANCg0K4qypIE1lbWlsaWggcmVzcG9uZGVuIHNlY2FyYSBhY2FrIGRhcmkgcGVuZ2d1bmEgb2playBvbmxpbmUgeWFuZyBha3RpZiBzZWxhbWEgamFtIHNpYnVrLg0KDQotICoqUXVvdGEgU2FtcGxpbmcqKiA6DQoNCuKsqSAgTWVuZXRhcGthbiBrdW90YSByZXNwb25kZW4gdW50dWsgcGFnaSBkYW4gc29yZSBiZXJkYXNhcmthbiBwcm9wb3JzaToNCg0K4qypICoqUGFnaSoqIDogJChcZnJhY3sxfXszfSkkIHJlc3BvbmRlbi4NCg0K4qypICoqU29yZSoqIDogJChcZnJhY3syfXszfSkkIHJlc3BvbmRlbi4NCg0KMy4gKipKdXN0aWZpa2FzaSoqDQoNCi0gKipVbml0IFNhbXBsaW5nKiogOiBQZW5nZ3VuYSBha3RpZiBvamVrIG9ubGluZSBwYWRhIHNhYXQgamFtIHNpYnVrLg0KDQotICoqQWxhc2FuKiogOiANCg0K4qypIFBlbmdndW5hIGFrdGlmIHBhZGEgamFtIHNpYnVrIG1lcnVwYWthbiBwb3B1bGFzaSB5YW5nIHJlbGV2YW4gZGFsYW0gbWVuaWxhaSBhdGF1cHVuIG1lbmd1a3VyIHBlcnNlcHNpIGtlbnlhbWFuYW4uIE1pc2FsbnlhLCBwZXJzZXBzaSBrZW55YW1hbmFuIHBhZGEgc2FhdCBqYW0gcGFkYXRueWEgbGFsdSBsaW50YXMuDQoNCuKsqSBEYXRhIHlhbmcgYmVyYXNhbCBkYXJpIHBlbmdndW5hIGFrdGlmIG9qZWsgb25saW5lIGFrYW4gbWVuamFkaSBsZWJpaCBha3VyYXQgZGliYW5kaW5nIHBlbmdndW5hIGFjYWsgZGkgbHVhciBqYW0gc2lidWsuDQoNCuKsqSBQZW1pbGloYW4gbG9rYXNpIHN0cmF0ZWdpcyBtZW1hc3Rpa2FuIHVudHVrIG1lbmdha3NlcyBrZSBwb3B1bGFzaSB0YXJnZXQNCg0KIyMgUGVueWVsZXNhaWFuIA0KDQpjLiBKZWxhc2thbiBiYWdhaW1hbmEgQW5kYSBha2FuIG1lbnllc3VhaWthbiBoYXNpbCBzdXJ2ZWkgamlrYSA2MCUgcmVzcG9uZGVuIGJlcmFzYWwNCmRhcmkgcGFnaSBoYXJpLCBzZW1lbnRhcmEgNDAlIGRhcmkgc29yZSBoYXJpLCBzZWRhbmdrYW4gZGF0YSBoaXN0b3JpcyBtZW51bmp1a2thbg0KcGVuZ2d1bmEgb2playBvbmxpbmUgc2FhdCBzb3JlIGhhcmkgZHVhIGthbGkgbGViaWggYmFueWFrIGRpYmFuZGluZyBwYWdpLg0KDQpNYXNhbGFoIHBlbnllc3VhaWFuIGhhc2lsIHN1cnZlaSBhZGFsYWggamlrYSBoYXNpbCBzdXJ2ZWkgbWVudW5qdWtrYW4gYmFod2EgKio2MCUgcmVzcG9uZGVuIGJlcmFzYWwgZGFyaSBwYWdpKiogZGFuICoqNDAlIHJlc3BvbmRlbiBiZXJhc2FsIGRhcmkgc29yZSBoYXJpKiosIHRldGFwaSBwYWRhIGRhdGEgaGlzdG9yaXMgbWVudW5qdWtrYW4gYmFod2EgcGVuZ2d1bmEgc29yZSAqKmR1YSBrYWxpIGxlYmloIGJhbnlhayBkaWJhbmRpbmdrYW4gZGVuZ2FuIHBlbmdndW5hIHBhZGEgcGFnaSBoYXJpKiogTWFrYSBkYXJpIGl0dSwgcGVybHUgZGlsYWt1a2FuIHBlbWJvYm90YW4uDQoNCjEuICoqUnVtdXMgQm9ib3QqKg0KDQpCb2JvdCBkaWhpdHVuZyBkZW5nYW4gOiANCg0KJCQNClx0ZXh0e0JvYm90IFdha3R1fSA9IFxmcmFje1x0ZXh0e1Byb3BvcnNpIEhpc3RvcmlzfX17XHRleHR7UHJvcG9yc2kgUmVzcG9uZGVuIEFrdHVhbH19DQokJA0KDQoyLiAqKlBlcmhpdHVuZ2FuIEJvYm90KiogOiANCg0KLSAqKlBhZ2kqKg0KDQrirKkgUHJvcG9yc2kgaGlzdG9yaXM6ICQoIFxmcmFjezF9ezN9ID0gMzN7Ln0zXCUgKSQgIA0KDQrirKkgUHJvcG9yc2kgcmVzcG9uZGVuIGFrdHVhbDogJCggNjBcJSkkICANCg0KJCQNClx0ZXh0e0JvYm90IFdha3R1fSA9IFxmcmFje1x0ZXh0e1Byb3BvcnNpIEhpc3RvcmlzfX17XHRleHR7UHJvcG9yc2kgUmVzcG9uZGVuIEFrdHVhbH19DQokJA0KDQrirKkgQ29udG9oIHBlcmhpdHVuZ2FuIGJvYm90IHBhZGEgKipQYWdpKio6DQoNCiQkDQpcdGV4dHtCb2JvdCBQYWdpfSA9IFxmcmFjezMzey59M317NjB9ID0gMHsufTU1NQ0KJCQNCg0KLSAqKlNvcmUqKiAgDQoNCuKsqSBQcm9wb3JzaSBoaXN0b3JpczogJCggXGZyYWN7Mn17M30gPSA2NnsufTdcJSkkDQoNCuKsqSBQcm9wb3JzaSByZXNwb25kZW4gYWt0dWFsOiAkKCA0MFwlKSQgIA0KDQokJA0KXHRleHR7Qm9ib3QgV2FrdHV9ID0gXGZyYWN7XHRleHR7UHJvcG9yc2kgSGlzdG9yaXN9fXtcdGV4dHtQcm9wb3JzaSBSZXNwb25kZW4gQWt0dWFsfX0NCiQkDQoNCuKsqSBDb250b2ggcGVyaGl0dW5nYW4gYm9ib3QgcGFkYSAqKlNvcmUqKjoNCg0KJCQNClx0ZXh0e0JvYm90IFNvcmV9ID0gXGZyYWN7NjZ7Ln03fXs0MH0gPSAxey59NjY3DQokJA0KMy4gKipQZW5lcmFwYW4gQm9ib3QqKiA6IA0KDQotIFBlbmVyYXBhbiBib2JvdCBpbmkgdW50dWsgbWVtYXN0aWthbiBoYXNpbCBzdXJ2ZWkgbWVuY2VybWlua2FuIGRpc3RyaWJ1c2kgcGVuZ2d1bmEgb2playBvbmxpbmUgeWFuZyBzZWJlbmFybnlhLiBEYWxhbSBhbmFsaXNpcyBkYXRhOiANCg0K4qypIFJlc3BvbmRlbiBwYWdpIGRpa2FsaSBkZW5nYW4gYm9ib3QgKiowLjU1NSoqLg0KDQrirKkgUmVzcG9uZGVuIHNvcmUgZGlrYWxpa2FuIGRlbmdhbiBib2JvdCAqKjEuNjY3KiouDQoNCjQuICoqQ29udG9oIFBlcmhpdHVuZ2FuKiogOiANCg0K4qypIEp1bWxhaCBSZXNwb25kZW4gQWt0dWFsOiAzMDANCg0KLSAqKkRpc3RyaWJ1c2kgQWt0dWFsKiogOg0KDQrirKkgKipQYWdpKiogOiAxODAgcmVzcG9uZGVuICANCuKsqSAqKlNvcmUqKiA6IDEyMCByZXNwb25kZW4NCg0KLSAqKlNldGVsYWggRGlsYWt1a2FuIFBlbWJvYm90YW4qKiA6DQoNCuKsqSAqKlBhZ2kqKiA6ICANCg0KJCQoIDE4MCBcdGltZXMgMHssfTU1NSA9IDk5ey59OSBcUmlnaHRhcnJvdyBcdGV4dHtkaWJ1bGF0a2FuIG1lbmphZGkgfSAxMDApJCQNCg0K4qypICoqU29yZSoqIDogIA0KJCQoIDEyMCBcdGltZXMgMXssfTY2NyA9IDIwMHsufTA0IFxSaWdodGFycm93IFx0ZXh0e2RpYnVsYXRrYW4gbWVuamFkaSB9IDIwMCkkJA0KDQotLS0NCg0KIyBTb2FsIEtldGlnYQ0KDQotLS0NCg0KQW5kYSBkaXR1Z2Fza2FuIG9sZWggYmlybyBha2FkZW1payBrYW1wdXMgdW50dWsgbWVyYW5jYW5nICoqaW5zdHJ1bWVuIHN1cnZlaSoqIHlhbmcgYmVydHVqdWFuIG1lbmdldmFsdWFzaSAqKmtlcHVhc2FuIG1haGFzaXN3YSB0ZXJoYWRhcCBsYXlhbmFuIGFrYWRlbWlrKiosIHlhbmcgbWVuY2FrdXAgbGF5YW5hbiBzZXBlcnRpOiBLUlMgb25saW5lLCBiaW1iaW5nYW4gYWthZGVtaWssIHBlbGF5YW5hbiBhZG1pbmlzdHJhc2ksIGFrc2VzIGluZm9ybWFzaSBha2FkZW1paywgZGFuIGJhbnR1YW4gcGVueWVsZXNhaWFuIHN0dWRpLg0KDQpUaW0gcGVuZWxpdGkgbWVtaW50YSBBbmRhIHVudHVrOg0KDQojIyBQZW55ZWxlc2FpYW4gDQoNCi0gTWVyYW5jYW5nIDI1IHBlcnRhbnlhYW4gdXRhbWEgZGVuZ2FuICoqdmFyaWFzaSBza2FsYSBkYW4gYmVudHVrIHBlcnRhbnlhYW4qKi4NCg0KLSBBZGFwdW4gdHVqdWFuIGRhcmkgcGVydGFueWFhbiB0ZXJzZWJ1dCB1bnR1ayBtZW5nZXZhbHVhc2kgKip0aW5na2F0IGtlcHVhc2FuIG1haGFzaXN3YSoqIHRlcmhhZGFwIGJlcmJhZ2FpIGxheWFuYW4gYWthZGVtaWsgZGkga2FtcHVzLCBzZXBlcnRpOg0KDQrirKkgS1JTIG9ubGluZQ0KDQrirKkgQmltYmluZ2FuIGFrYWRlbWlrDQoNCuKsqSBQZWxheWFuYW4gYWRtaW5pc3RyYXNpDQoNCuKsqSBBa3NlcyBpbmZvcm1hc2kgYWthZGVtaWsNCg0K4qypIEJhbnR1YW4gcGVueWVsZXNhaWFuIHN0dWRpDQoNCg0KMS4gKipEZXNhaW4gUGVydGFueWFhbioqDQoNCkJlcmlrdXQgbGFtcGlyYW4gMjUgcGVydGFueWFhbiB5YW5nIGJlcnR1anVhbiBtZW5nZXZhbHVhc2kgKiprZXB1YXNhbiBtYWhhc2lzd2EgdGVyaGFkYXAgbGF5YW5hbiBha2FkZW1payoqLiBodHRwczovL3Rpbnl1cmwuY29tLzU4NXd5Y2FwDQoNCkNhdGF0YW46DQoNCi0gQmVudHVrIHBlcnRhbnlhYW4gOiBMaWtlcnQgc2NhbGUsIHJhdGluZyBzY2FsZSwgZGFuIHBpbGloYW4gZ2FuZGENCg0KLSBDb250b2ggdmFyaWFzaSBza2FsYToNCg0K4qypIExpa2VydCAxLTUgOiBTYW5nYXQgdGlkYWsgcHVhcyBoaW5nZ2Egc2FuZ2F0IHB1YXMNCg0K4qypIFNrYWxhIDEtMTAgOiB1bnR1ayBrZW55YW1hbmFuIHBlbmdndW5hYW4gc2lzdGVtDQoNCuKsqSBQaWxpaGFuIEdhbmRhIDogU3VtYmVyIGluZm9ybWFzaSwga2VjZXBhdGFuIGxheWFuYW4sIGRsbC4NCg0KDQojIyBQZW55ZWxlc2FpYW4gDQoNCi0gTWVyYW5jYW5nIHNpc3RlbSB2YWxpZGFzaSBpbnN0cnVtZW4uDQoNCjIuICoqU2lzdGVtIFZhbGlkYXNpIEluc3RydW1lbioqDQoNCkEuICoqVmFsaWRhc2kgSXNpKioNCg0KLSBNZW1pbnRhIGF0YXUgbWVsaWJhdGthbiBwYXJhIHBha2FyIGF0YXUgZG9zZW4gcGVtYmltYmluZyBtZW5pbGFpIGFwYWthaCBzZXRpYXAgcGVydGFueWFhbiBzZXN1YWkgZGVuZ2FuIHR1anVhbiBzdXJ2ZWk/DQoNCuKsqSBTZXN1YWkgZGVuZ2FuIGFzcGVrIHlhbmcgZGluaWxhaQ0KDQrirKkgTWVuZ2dhbWJhcmthbiBkaW1lbnNpIGxheWFuYW4gYWthZGVtaWsNCg0KLSBDb250b2g6DQoNCuKsqSBLZW11ZGFoYW4gZGFsYW0gbWVuZ2Frc2VzIEtSUyBvbmxpbmUNCg0K4qypIEtlbXVkYWhhbiBtZW5kYXBhdGthbiBpbmZvcm1hc2kgamFkd2FsIHBlcmt1bGlhaGFuDQoNCkIuICoqVmFsaWRhc2kgS29uc3RydWsqKg0KDQotIERhbGFtIGhhbCBpbmkgZ3VuYWthbiAqKkFuYWxpc2lzIEZha3RvciBFa3NwbG9yYXRvcmkgKEVGQSkqKi4gSGFsIGluaSBkaWxha3VrYW4gZGVuZ2FuIHR1anVhbiB1bnR1ayBtZW1hc3Rpa2FuIGJhaHdhIDoNCg0K4qypIE1lbWFzdGlrYW4gYmFod2EgcGVydGFueWFhbiBkYWxhbSBzYXR1IGxheWFuYW4gbWVtYmVudHVrIHNhdHUga2Vsb21wb2sgKGtvbnN0cnVrKSB5YW5nIHNlc3VhaQ0KDQotIE1pc2FsbnlhOg0KDQrirKkgNSBQZXJ0YW55YWFuIHRlbnRhbmcgKipLUlMgT25saW5lKiogOiBtZW1iZW50dWsgMSBmYWt0b3INCg0K4qypIDUgUGVydGFueWFhbiB0ZW50YW5nICoqQmltYmluZ2FuIEFrYWRlbWlrKiogOiBtZW1iZW50dWsgZmFrdG9yIGxhaW4NCg0KLSAgSGFzaWwgZGFyaSAqKkFuYWxpc2lzIEZha3RvciBFa3NwbG9yYXRvcmkgKEVGQSkqKiB5YW5nIGJhaWsgZGFuIHNlc3VhaSBzdHJ1a3R1ciBtZW51bmp1a2thbiBiYWh3YSBzZW11YSBwZXJ0YW55YWFuIG1lbmdlbG9tcG9rIHNlc3VhaSBkaW1lbnNpIHlhbmcgZGl0dWp1IGRhbiB2YWxpZGFzaSBrb25zdHJ1ayB0ZXJwZW51aGkuDQoNCkMuICoqVWppIFJlbGlhYmlsaXRhcyAtIENyb25iYWNoJ3MgQWxwaGEqKg0KDQotIEFkYXB1biAqKnR1anVhbioqIGluaSBkaWxha3VrYW4gdW50dWsgbWVuZ3VrdXIgKiprb25zaXN0ZW5zaSBpbnRlcm5hbCBwZXJ0YW55YWFuKiogZGFsYW0gc2F0dSBrZWxvbXBvayBhdGF1IHNhdHUgZGltZW5zaS4gTWlzYWxueWE6DQoNCi0gQ29udG9oIEhhc2lsOg0KDQrirKkgNSBwZXJ0YW55YWFuIHRlbnRhbmcgKipLUlMgT25saW5lKiogbWVuZ2hhc2lsa2FuIG5pbGFpICoqQ3JvbmJhY2gncyBBbHBoYSA9IDAuODMqKiA6ICBSZWxpYWJlbCANCg0K4qypIDUgcGVydGFueWFhbiB0ZW50YW5nICoqQmltYmluZ2FuIEFrYWRlbWlrKiogbWVuZ2hhc2lsa2FuIG5pbGFpICoqQ3JvbmJhY2gncyBBbHBoYSA9IDAuNzkqKg0KDQoqKlNlY2FyYSB1bXVtLCBuaWxhaSBhbHBoYSDiiaUgMC43IGRpYW5nZ2FwIGtvbnNpc3RlbiBkYW4gZGFwYXQgZGlhbmRhbGthbioqLg0KDQoNCiMjIFBlbnllbGVzYWlhbiANCg0KLSBNZW5lbnR1a2FuIG1ldG9kZSBkaXN0cmlidXNpIGRhbiBwZW5ndWppYW4ga3Vlc2lvbmVyIHNlY2FyYSBzdGF0aXN0aWsuDQoNCkEuICoqTWV0b2RlIERpc3RyaWJ1c2kgU3VydmVpKioNCg0KLSBNZW5nZ3VuYWthbiBwbGF0Zm9ybSAqKkdvb2dsZSBGb3JtKiosIGxhbHUgZGlzZWJhcmthbiBtZWxhbHVpOg0KDQrirKkgR3J1cCBXaGF0c0FwcCBrZWxhcw0KDQrirKkgQmFudHVhbiBkb3NlbiB3YWxpDQoNCuKsqSBNZWRpYSBzb3NpYWwga2FtcHVzDQoNCg0KQi4gKipNZXRvZGUgUGVuZ2FtYmlsYW4gU2FtcGVsKioNCg0KLSBNZW5nZ3VuYWthbiAqKlN0cmF0aWZpZWQgUmFuZG9tIFNhbXBsaW5nKiosIGFydGlueWE6DQoNCuKsqSBNYWhhc2lzd2EgZGFwYXQgZGliYWdpIG1lbmphZGkgcGVyICoqcHJvZ3JhbSBzdHVkaSBkYW4gYW5na2F0YW4qKg0KDQrirKkgU2V0ZWxhaCBpdHUsIG1lbGFrdWthbiBwZW1pbGloYW4gU2VjYXJhIGFjYWsgZGFyaSBtYXNpbmctbWFzaW5nIGtlbG9tcG9rIHRlcnNlYnV0IGRhbGFtIHNldGlhcCBzdHJhdGEgYWdhciAqKnRlcndha2lsaSBzZWNhcmEgcHJvcG9yc2lvbmFsKiouDQoNCkMuICoqTWVuZ2hpdHVuZyBVa3VyYW4gU2FtcGVsKioNCg0KTWlzYWxueWE6DQoNCi0gUG9wdWxhc2kganVtbGFoIG1haGFzaXN3YSAoJE4kKSA9IDUwMDAgDQoNCi0gTWFyZ2luIG9mIGVycm9yICgkZSQpID0gNSUgKDAuMDUpDQoNCuKsqSBNZW5nZ3VuYWthbiAqKlJ1bXVzIFNsb3ZpbioqOg0KDQokJA0KbiA9IFxmcmFje059ezEgKyBOIFxjZG90IGVeMn0NCiQkDQokJA0KbiA9IFxmcmFjezUwMDB9ezEgKyA1MDAwIFxjZG90ICgweyx9MDUpXjJ9DQo9IFxmcmFjezUwMDB9ezEgKyA1MDAwIFxjZG90IDB7LH0wMDI1fQ0KPSBcZnJhY3s1MDAwfXsxICsgMTJ7LH01fQ0KPSBcZnJhY3s1MDAwfXsxM3ssfTV9DQpcYXBwcm94IDM3MHssfTM3DQokJA0KSmFkaSwgKiptaW5pbWFsIDM3MSByZXNwb25kZW4qKiBkaXBlcmx1a2FuIGFnYXIgaGFzaWwgc3VydmVpICoqcmVwcmVzZW50YXRpZioqIGRhcmkgdG90YWwgNTAwMCBtYWhhc2lzd2EsIGRlbmdhbiB0aW5na2F0IGtlc2FsYWhhbiA1JS4NCg0KIyMgUGVueWVsZXNhaWFuIA0KDQotIE1lbnlpYXBrYW4gc2ltdWxhc2kgc3RyYXRlZ2kgcGVuZ2FtYmlsYW4gc2FtcGVsIGRhbiBwZW5nb2xhaGFuIGRhdGEgYXdhbC4NCg0KQS4gKipTaW11bGFzaSBEYXRhICgyLjAwMCBSZXNwb24pKioNCg0K4qypIERhdGEgZGlhc3Vtc2lrYW4gYmVyZGFzYXJrYW4gcHJvcG9yc2kgZGFuIGFzdW1zaToNCg0KMS4gKipLZXB1YXNhbiBLUlMgT25saW5lICgxLTEwKSoqDQoNCnwgJCRcdGV4dHtMYXlhbmFufSQkIHwgJCRcdGV4dHtSYXRhLXJhdGF9JCQgfCQkXHRleHR7U3RhbmRhcmlzYXNpL0Rpc3RyaWJ1c2l9ICQkfA0KfDotLS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLTp8DQp8ICoqS2VwdWFzYW4gS1JTIE9ubGluZSAoMeKAkzEwKSoqIHwgNy44IHwgU0Qg4omIIDEuMCB8DQp8ICoqS2VwdWFzYW4gQmltYmluZ2FuIEFrYWRlbWlrKiogfCA0LjJ8IFNEIOKJiCAwLjYgfA0KfCAqKktlY2VwYXRhbiBQZWxheWFuYW4qKnwgNDAlIGN1a3VwIGNlcGF0LCAyMCUgbGFtYmF0IHwgfA0KfCAqKlN1bWJlciBJbmZvcm1hc2kgQWthZGVtaWsqKnw0NSUgV2hhdHNBcHAsIDMwJSBXZWJzaXRlLCAyNSUgRG9zZW4gfCB8DQoNCg0KMS4gKipQZXJoaXR1bmdhbiBTdGF0aXN0aWsgRGVza3JpcHRpZioqDQoNCkEuICoqS2VwdWFzYW4gS1JTIE9ubGluZSAoU2thbGEgMeKAkzEwKSoqDQoNCuKsqSBNaXNhbG55YSBkYXJpIDIwMDAgZGF0YSwgbmlsYWkgcmVzcG9uZGVuIHRlcnNlYmFyIHNlcGVydGkgaW5pOg0KDQp8ICQkXHRleHR7TmlsYWl9JCQgfCAkJFx0ZXh0e0p1bWxhaCBNYWhhc2lzd2F9JCQgfA0KfDotLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLTp8DQp8IDYgfCAyMDAgfA0KfCA3IHwgNTAwIHwgDQp8IDggfCA4MDAgfA0KfCA5IHwgNDAwIHwNCnwgMTB8IDEwMHwNCnwgVG90YWx8IDIwMDB8DQoNCuKsqSAqKlJhdGEtcmF0YSAoTWVhbikqKg0KDQokJA0KXHRleHR7TWVhbn0gPSBcZnJhY3soNiBcdGltZXMgMjAwKSArICg3IFx0aW1lcyA1MDApICsgKDggXHRpbWVzIDgwMCkgKyAoOSBcdGltZXMgNDAwKSArICgxMCBcdGltZXMgMTAwKX17MjAwMH0NCiQkDQokJA0KXHRleHR7TWVhbn0gPSBcZnJhY3soMTIwMCArIDM1MDAgKyA2NDAwICsgMzYwMCArIDEwMDApfXsyMDAwfQ0KPSBcZnJhY3sxNXsufTcwMH17MjAwMH0NCj0gN3sufTg1IFxhcHByb3ggN3sufTgNCiQkDQrirKkgKipNZWRpYW4qKg0KDQpEYXRhIGRpdXJ1dGthbiA6IHBvc2lzaSBtZWRpYW4gPSBrZS0xMDAwIGRhbiBrZS0xMDAxLiBOaWxhaSBrZS0xMDAwICYga2UtMTAwMSA9IDgNCg0KU2VoaW5nZ2EsIE1lZGlhbiA9IDgNCg0K4qypICoqU3RhbmRhciBEZXZpYXNpIChTRCkqKg0KDQpNZW5nZ3VuYWthbiBydW11czoNCg0KJCQNClNEID0gXHNxcnR7IFxmcmFjeyBcc3VtICh4X2kgLSBcYmFye3h9KV4yIFxjZG90IGZfaSB9e259IH0NCiQkDQpLZXRlcmFuZ2FuOiANCg0K4qypICRcYmFye3h9JCA9IDcuODUgDQoNCuKsqSAkeF9pJCA9IG5pbGFpDQoNCuKsqSAkZl9pJCA9IGZyZWt1ZW5zaSB0aWFwIG5pbGFpIA0KDQrirKkgJG4kID0gMjAwMA0KDQpIaXR1bmcgdGlhcCBzZWxpc2loIGt1YWRyYXQ6DQoNCnwkJFx0ZXh0e05pbGFpIH0gKHhfMSkkJHwgJCRcdGV4dHtGcmVrdWVuc2kgfSAoZl8xKSQkIHwkJCh4X2kgLSBcYmFye3h9KV4yICQkfCQkZl9pIFxjZG90ICh4X2kgLSBcYmFye3h9KV4yJCR8DQp8Oi0tLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLTp8DQp8IDYgfCAyMDAgfCQoNiAtIDd7Ln04NSleMiA9IDN7Ln00MjI1JCB8IDY4NC41fA0KfCA3IHwgNTAwIHwkKDcgLSA3ey59ODUpXjIgPSAwey59NzIyNSQgfCAzNjEuMjV8DQp8IDggfCA4MDAgfCQoOCAtIDd7Ln04NSleMiA9IDB7Ln0wMjI1JCB8IDE4fA0KfCA5IHwgNDAwIHwkKDkgLSA3ey59ODUpXjIgPSAxey59MzIyNSQgfCA1Mjl8DQp8IDEwIHwgMTAwIHwkKDEwIC0gN3sufTg1KV4yID0gNHsufTYyMjUkIHw0NjIuMjV8DQp8IFRvdGFsIHwgIHwgfCAyMDU1fA0KDQokJA0KU0QgPSBcc3FydHsgXGZyYWN7MjA1NX17MjAwMH0gfSA9IFxzcXJ0ezF7Ln0wMjc1fSBcYXBwcm94IDF7Ln0wMQ0KJCQNCg0KJFNEIFxhcHByb3ggMS4wMSQNCg0KQi4gKipCaW1iaW5nYW4gQWthZGVtaWsgKFNrYWxhIExpa2VydCAxLTUpKioNCg0K4qypIERpc3RyaWJ1c2kgY29udG9oOg0KDQp8ICQkXHRleHR7TmlsYWl9JCQgfCAkJFx0ZXh0e0p1bWxhaCBNYWhhc2lzd2F9JCQgfA0KfDotLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLTp8DQp8IDIgfCAxMDAgfA0KfCAzIHwgMzAwIHwgDQp8IDQgfCAxMTAwIHwNCnwgNSB8IDUwMCB8DQoNCuKsqSAqKlJhdGEtcmF0YSAoTWVhbikqKg0KDQokJA0KXHRleHR7TWVhbn0gPSBcZnJhY3soMiBcdGltZXMgMTAwKSArICgzIFx0aW1lcyAzMDApICsgKDQgXHRpbWVzIDExMDApICsgKDUgXHRpbWVzIDUwMCl9ezIwMDB9DQokJA0KDQokJA0KXHRleHR7TWVhbn0gPSBcZnJhY3syMDAgKyA5MDAgKyA0NDAwICsgMjUwMH17MjAwMH0gPSBcZnJhY3s4MDAwfSB7MjAwMH0gPSA0LjANCiQkDQrirKkgKipNZWRpYW4qKg0KDQpEYXRhIGRpdXJ1dGthbiA6IHBvc2lzaSBtZWRpYW4gPSBrZS0xMDAwIGRhbiBrZS0xMDAxLiBOaWxhaSBrZS0xMDAwICYga2UtMTAwMSA9IDQNCg0KU2VoaW5nZ2EsIE1lZGlhbiA9IDQNCg0K4qypICoqU3RhbmRhciBEZXZpYXNpIChTRCkqKg0KDQp8JCRcdGV4dHtOaWxhaSB9ICh4XzEpJCR8ICQkXHRleHR7RnJla3VlbnNpIH0gKGZfMSkkJCB8JCQoeF9pIC0gXGJhcnt4fSleMiAkJHwkJGZfaSBcY2RvdCAoeF9pIC0gXGJhcnt4fSleMiQkfA0KfDotLS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS06fA0KfCAyIHwgMTAwIHwkKDIgLSA0KV4yID0gNCQgfCA0MDB8DQp8IDMgfCAzMDAgfCQoMyAtIDQpXjIgPSAxJHwgMzAwfA0KfCA0IHwgMTEwMCB8JCg0IC0gNCleMiA9IDAkfCAwfA0KfCA1IHwgNTAwIHwkKDUgLSA0KV4yID0gMSQgfCA1MDB8DQp8IFRvdGFsIHwgIHwgfCAxMjAwfA0KDQokJA0KU0QgPSBcc3FydHsgXGZyYWN7MTIwMH17MjAwMH0gfSA9IFxzcXJ0ezAuNn0gXGFwcHJveCAwey59NzcNCiQkDQoNCiRTRCBcYXBwcm94IDAuNzckDQoNCg0KMi4gKipQZXJoaXR1bmdhbiBLYXRlZ29yaWthbCBQZWxheWFuYW4gQWRtaW5pc3RyYXNpKioNCg0KQS4gKipLZWNlcGF0YW4gUGVsYXlhbmFuIEFkbWluaXN0cmFzaSoqDQoNCnwgJCRcdGV4dHtLYXRlZ29yaX0kJCB8ICQkXHRleHR7UHJvcG9yc2l9JCQgfCQkXHRleHR7SnVtbGFofSQkfA0KfDotLS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLTp8DQp8IEN1a3VwIGNlcGF0IHwgJDQwJSQgfCQwey59NCBcdGltZXMgMjAwMCA9IDgwMCBcdGV4dHsgbWFoYXNpc3dhfSQgfA0KfCBMYW1iYXQgfCAkMjAlJCB8JDB7Ln0yIFx0aW1lcyAyMDAwID0gNDAwIFx0ZXh0eyBtYWhhc2lzd2F9JCB8DQp8IExhaW5ueWEgfCAkNDAlJCB8JDB7Ln00IFx0aW1lcyAyMDAwID0gODAwIFx0ZXh0eyBtYWhhc2lzd2F9JCB8DQoNCkIuICoqU3VtYmVyIEluZm9ybWFzaSBBa2FkZW1payoqDQoNCnwgJCRcdGV4dHtTdW1iZXJ9JCQgfCAkJFx0ZXh0e1Byb3BvcnNpfSQkIHwkJFx0ZXh0e0p1bWxhaH0kJHwNCnw6LS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS06fA0KfCBHcnVwIFdoYXRzQXBwIHwgJDQ1JSQgfCQwey59NDUgXHRpbWVzIDIwMDAgPSA5MDAkIHwNCnwgV2Vic2l0ZSBLYW1wdXMgfCAkMzAlJCB8JDB7Ln0zMCBcdGltZXMgMjAwMCA9IDYwMCQgfA0KfCBEb3NlbiBXYWxpIHwgJDI1JSQgfCQwey59MjUgXHRpbWVzIDIwMDAgPSA1MDAkIHwNCg0KMy4gKipSaW5na2FzYW4gVGFiZWwgU3RhdGlzdGlrIERlc2tyaXB0aWYqKg0KDQp8JCRcdGV4dHtMYXlhbmFufSQkfCAkJFx0ZXh0e1JhdGEtcmF0YX0kJCB8JCRcdGV4dHtNZWRpYW59JCR8JCRcdGV4dHtTdGFuZGFyIERldmlhc2l9IChTRCkkJHwNCnw6LS0tLS0tLS0tLS0tLS0tOnw6LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLTp8Oi0tLS0tLS0tLS0tLS0tLS0tLS0tLS06fDotLS0tLS0tLS0tLS0tLS0tLS0tLS0tOnwNCnwgS1JTIE9ubGluZSAoMeKAkzEwKSB8IDcuOCB8IDggfCAxLjAxIHwNCnwgQmltYmluZ2FuIEFrYWRlbWlrICgx4oCTNSkgfCA0LjAgfCA0IHwgMC43N3wNCg0K