
Latihan 1
Sebuah perusahaan ingin memahami karakteristik penyebaran data hasil
penjualan dari empat cabang (A, B, C, dan D) selama satu bulan terakhir.
Data penjualan (dalam juta rupiah) dari keempat cabang tersebut adalah
sebagai berikut:
- Cabang A: 50, 55, 60, 65, 70
- Cabang B: 40, 50, 60, 70, 80
- Cabang C: 30, 30, 35, 40, 45
- Cabang D: 70, 75, 80, 85, 90
- Hitunglah rata-rata, median, dan standar deviasi untuk masing-masing
cabang.
- Cabang mana yang memiliki penyebaran data paling kecil? Jelaskan
alasannya.
- Jika target penjualan minimum adalah 50 juta rupiah, cabang mana
saja yang gagal mencapai target di semua datanya?
- Buatlah diagram kotak (box plot) untuk memvisualisasikan penyebaran
data setiap cabang.
- Jika Anda adalah manajer perusahaan, bagaimana Anda akan menggunakan
informasi ini untuk merencanakan strategi peningkatan penjualan?
1.2 Cabang mana yang memiliki penyebaran data paling kecil? Jelaskan
alasannya.
Penyebaran data diukur dengan standar
deviasi (\(s\)). Berikut
adalah standar deviasi masing-masing cabang:
- Cabang A: \(s =
7.91\)
- Cabang B: \(s =
15.81\)
- Cabang C: \(s =
6.52\)
- Cabang D: \(s =
7.91\)
1.2.1 Jawaban: Cabang C
- Cabang C memiliki standar deviasi terkecil sebesar
\(6.52\), yang menunjukkan bahwa data
penjualan di Cabang C lebih terkonsentrasi atau homogen
dibandingkan dengan cabang lainnya.
- Penyebaran data yang kecil mengindikasikan bahwa nilai penjualan di
Cabang C lebih stabil dan mendekati rata-rata (\(\bar{X} = 36\)).
1.2.2 Penjelasan
Standar deviasi mengukur rata-rata jarak setiap data terhadap
rata-rata. Semakin kecil nilai \(s\),
semakin kecil variasi antara nilai data, dan semakin seragam data
tersebut. Cabang C memiliki penyebaran data yang lebih kecil karena
seluruh nilai penjualan mendekati rata-rata, dengan rentang data yang
sempit (30 hingga 45).
1.3 Cabang Mana yang Gagal Mencapai Target Penjualan?
Target penjualan minimum: 50 juta rupiah.
1.3.1 Data Penjualan Tiap Cabang:
- Cabang A: \(50, 55, 60,
65, 70\)
- Cabang B: \(40, 50, 60,
70, 80\)
- Cabang C: \(30, 30, 35,
40, 45\)
- Cabang D: \(70, 75, 80,
85, 90\)
1.3.2 Analisis:
Untuk setiap cabang, kita periksa apakah ada nilai yang kurang dari
50 juta rupiah:
Cabang A: Semua data \((50, 55, 60, 65, 70)\) mencapai
target.
Kesimpulan: Tidak ada data yang gagal.
Cabang B: Ada satu data yang gagal mencapai
target, yaitu \(40\).
Kesimpulan: Gagal di satu data (\(40\)).
Cabang C: Semua data \((30, 30, 35, 40, 45)\) gagal mencapai
target.
Kesimpulan: Gagal di semua data.
Cabang D: Semua data \((70, 75, 80, 85, 90)\) mencapai
target.
Kesimpulan: Tidak ada data yang gagal.
1.3.3 Jawaban Akhir:
- Cabang B memiliki 1 data yang gagal mencapai
target.
- Cabang C gagal mencapai target di semua
data.
1.4 Buatlah diagram kotak (box plot) untuk memvisualisasikan
penyebaran data setiap cabang.
1.4.1 Visualisasi data

1.5 Strategi Peningkatan Penjualan Berdasarkan Analisis Data
Sebagai manajer perusahaan, informasi ini dapat digunakan untuk
menyusun strategi peningkatan penjualan dengan langkah-langkah
berikut:
1.5.1 Fokus pada Cabang C
- Analisis: Cabang C memiliki rata-rata penjualan
terendah (\(\bar{X} = 36\)) dan gagal
mencapai target penjualan minimum \(50\) juta rupiah di semua datanya.
- Strategi:
- Tinjau faktor-faktor yang menyebabkan rendahnya penjualan, seperti
lokasi, daya beli pelanggan, atau strategi pemasaran.
- Tingkatkan promosi dan diskon khusus di area Cabang C.
- Adakan pelatihan untuk meningkatkan kinerja tim penjualan.
1.5.2 Optimalkan Kinerja Cabang B
- Analisis: Cabang B memiliki penyebaran data
terbesar (\(s = 15.81\)), menunjukkan
variasi yang tinggi dalam penjualan.
- Strategi:
- Fokus pada stabilisasi penjualan dengan pendekatan yang konsisten
terhadap pelanggan.
- Tingkatkan efisiensi distribusi dan layanan untuk mendorong
penjualan secara merata.
1.5.4 Tinjauan Data Secara Berkala
- Buat laporan bulanan untuk memantau perkembangan setiap cabang.
- Implementasikan teknologi analitik untuk memprediksi tren penjualan
dan menyesuaikan strategi dengan kebutuhan pasar.
1.5.5 Diversifikasi Produk dan Layanan
- Tambahkan variasi produk yang sesuai dengan preferensi lokal untuk
meningkatkan daya tarik di cabang dengan performa rendah.
- Evaluasi respons pasar terhadap produk baru melalui survei pelanggan
dan uji coba terbatas.
1.5.6 Kesimpulan:
Dengan memanfaatkan informasi statistik seperti rata-rata, median,
dan standar deviasi, perusahaan dapat memahami kinerja masing-masing
cabang secara mendalam dan mengimplementasikan strategi yang spesifik
untuk meningkatkan total penjualan secara keseluruhan.
Latihan 2
Perusahaan XYZ mengelola pengiriman barang ke berbagai wilayah dengan
menggunakan berbagai jenis transportasi. Setiap pengiriman melibatkan
biaya transportasi, waktu yang dibutuhkan, dan jumlah barang yang
dikirim. Berikut adalah data terkait pengiriman barang berdasarkan
wilayah dan jenis barang:
Utara |
Elektronik |
200 |
5 |
15000 |
Selatan |
Pakaian |
150 |
8 |
8000 |
Timur |
Makanan |
180 |
6 |
10000 |
Barat |
Peralatan |
120 |
7 |
12000 |
Tengah |
Elektronik |
250 |
4 |
14000 |
Utara |
Pakaian |
300 |
9 |
8500 |
Selatan |
Makanan |
220 |
7 |
9500 |
Timur |
Peralatan |
140 |
5 |
11000 |
Barat |
Elektronik |
180 |
6 |
14500 |
Tengah |
Pakaian |
350 |
8 |
7800 |
Utara |
Peralatan |
170 |
4 |
12000 |
Selatan |
Elektronik |
250 |
6 |
16000 |
Timur |
Pakaian |
190 |
7 |
8200 |
Barat |
Makanan |
130 |
5 |
10500 |
Tengah |
Peralatan |
180 |
5 |
11500 |
- Analisis Efisiensi Pengiriman:
- Visualisasikan pengiriman barang berdasarkan jumlah barang, waktu
pengiriman, dan biaya per unit dengan menggunakan plot 3D.
- Tentukan wilayah mana yang memiliki efisiensi pengiriman terendah
berdasarkan biaya per unit dan waktu pengiriman.
- Rekomendasi Operasional:
- Berdasarkan hasil analisis, wilayah mana yang memerlukan perhatian
khusus untuk meningkatkan efisiensi pengiriman?
- Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di
wilayah tersebut?
2.1 Analisis Efisiensi Pengiriman:
2.1.1 Visualisasikan pengiriman barang berdasarkan jumlah barang,
waktu pengiriman, dan biaya per unit dengan menggunakan plot 3D.
2.1.2 Tentukan wilayah mana yang memiliki efisiensi pengiriman
terendah berdasarkan biaya per unit dan waktu pengiriman.
2.1.2.1 Cara Manual
Rumus: \[
\text{Efiensi} = \frac{\text{Biaya per Unit}}{\text{Waktu Pengiriman}}
\] Note: Wilayah dengan efisiensi tertinggi
(nilai terbesar) dianggap memiliki efisiensi pengiriman terendah karena
biaya lebih mahal per satuan waktu.
Contoh Perhitungan: - Baris 1 (Wilayah Utara): \[
\text{Efiensi} = \frac{15,000}{5} = 3,000
\] - Baris 2 (Wilayah Selatan): \[
\text{Efiensi} = \frac{8,000}{8} = 1,000
\] - Baris 3 (Wilayah Timur): \[
\text{Efiensi} = \frac{10,000}{6} = 1,667
\] - Lakukan langkah yang sama untuk semua baris.
Utara |
15,000 |
5 |
3,000 |
Selatan |
8,000 |
8 |
1,000 |
Timur |
10,000 |
6 |
1,667 |
Barat |
12,000 |
7 |
1,714 |
Tengah |
14,000 |
4 |
3,500 |
Utara |
8,500 |
9 |
944 |
Selatan |
9,500 |
7 |
1,357 |
Timur |
11,000 |
5 |
2,200 |
Barat |
14,500 |
6 |
2,417 |
Tengah |
7,800 |
8 |
975 |
Utara |
12,000 |
4 |
3,000 |
Selatan |
16,000 |
6 |
2,667 |
Timur |
8,200 |
7 |
1,171 |
Barat |
10,500 |
5 |
2,100 |
Tengah |
11,500 |
5 |
2,300 |
2.1.2.1.1 Hasil Analisis
Wilayah dengan efisiensi pengiriman terendah
adalah:
- Wilayah: Tengah
- Biaya per Unit: Rp14.000
- Waktu Pengiriman: 4 jam
- Efisiensi: 3,500 (tertinggi, sehingga paling tidak
efisien)
2.1.2.2 Cara Dengan Pyhton
Tabel Data dengan Kolom Efisiensi
Utara |
Elektronik |
200 |
5 |
15000 |
3000.0000 |
Selatan |
Pakaian |
150 |
8 |
8000 |
1000.0000 |
Timur |
Makanan |
180 |
6 |
10000 |
1666.6667 |
Barat |
Peralatan |
120 |
7 |
12000 |
1714.2857 |
Tengah |
Elektronik |
250 |
4 |
14000 |
3500.0000 |
Utara |
Pakaian |
300 |
9 |
8500 |
944.4444 |
Selatan |
Makanan |
220 |
7 |
9500 |
1357.1429 |
Timur |
Peralatan |
140 |
5 |
11000 |
2200.0000 |
Barat |
Elektronik |
180 |
6 |
14500 |
2416.6667 |
Tengah |
Pakaian |
350 |
8 |
7800 |
975.0000 |
Utara |
Peralatan |
170 |
4 |
12000 |
3000.0000 |
Selatan |
Elektronik |
250 |
6 |
16000 |
2666.6667 |
Timur |
Pakaian |
190 |
7 |
8200 |
1171.4286 |
Barat |
Makanan |
130 |
5 |
10500 |
2100.0000 |
Tengah |
Peralatan |
180 |
5 |
11500 |
2300.0000 |
Data dengan Efisiensi Terendah
6 |
Utara |
Pakaian |
300 |
9 |
8500 |
944.4444 |
2.1.2.2.2 Hasil Analisis
Hasil dari kode di atas akan menunjukkan wilayah dengan
efisiensi pengiriman terendah. Berdasarkan data:
- Wilayah: Tengah
- Jenis Barang: Elektronik
- Jumlah Barang: 250 unit
- Waktu Pengiriman: 4 jam
- Biaya per Unit: Rp14.000
- Tingkat Efisiensi: 3,500 (tertinggi, berarti
efisiensi terendah).
2.1.2.3 Kesimpulan Wilayah dengan Efisiensi Terendah
Jadi Efisiensi Terendah bisa diketahui melaui cara manual dan Python
yang menghasilkan hasil yang sama,Yaitu:
Efisiensi tertinggi (paling tidak efisien) adalah 3,500.
Wilayah dengan efisiensi terendah (paling tidak efisien) adalah:
- Wilayah: Tengah
- Jenis Barang: Elektronik
- Jumlah Barang: 250 unit
- Waktu Pengiriman: 4 jam
- Biaya per Unit: Rp14.000
- Tingkat Efisiensi: 3,500 (tertinggi, berarti
efisiensi terendah).
2.2 Rekomendasi Operasional:
2.2.1 Berdasarkan hasil analisis, wilayah mana yang memerlukan
perhatian khusus untuk meningkatkan efisiensi pengiriman?
Berdasarkan hasil analisis, wilayah yang memerlukan perhatian khusus
untuk meningkatkan efisiensi pengiriman adalah Wilayah Tengah. Wilayah
ini memiliki efisiensi pengiriman terendah dengan nilai 3,500 yang
menunjukkan bahwa biaya per unit untuk pengiriman di wilayah ini sangat
tinggi dibandingkan dengan waktu yang dibutuhkan.
2.2.2 Apa rekomendasi untuk mengurangi biaya dan waktu pengiriman di
wilayah tersebut?
2.2.2.1 Rekomendasi Operasional untuk Wilayah Tengah
- Optimasi Rute Pengiriman
- Evaluasi kembali rute pengiriman: Identifikasi dan evaluasi rute
yang digunakan untuk pengiriman barang di wilayah Tengah. Hal ini bisa
mencakup pengecekan apakah ada jalan yang kurang optimal atau macet,
sehingga menambah waktu pengiriman.
- Gunakan sistem rute cerdas: Implementasikan teknologi seperti GPS
tracking dan sistem manajemen pengiriman berbasis data untuk mencari
rute yang lebih efisien. Sistem ini bisa mengurangi waktu tempuh dan
meningkatkan efisiensi pengiriman.
- Negosiasi Biaya Transportasi
- Tinjau kontrak transportasi: Wilayah Tengah memiliki biaya per unit
yang cukup tinggi, yaitu Rp 14.000. Sebaiknya melakukan negosiasi dengan
penyedia jasa transportasi untuk mendapatkan tarif lebih rendah atau
menggunakan alternatif moda transportasi yang lebih murah, seperti
kereta api atau transportasi laut untuk jarak jauh.
- Pertimbangkan penggunaan kendaraan yang lebih besar: Jika
memungkinkan, gunakan kendaraan dengan kapasitas lebih besar untuk
mengurangi biaya per unit barang yang diangkut.
- Pengelompokan Pengiriman
- Gabungkan pengiriman barang: Mengingat jumlah barang yang dikirim
cukup besar (misalnya 250 unit elektronik dan 350 unit pakaian),
menggabungkan pengiriman untuk mengurangi frekuensi pengiriman dan
memaksimalkan kapasitas kendaraan dapat mengurangi biaya
operasional.
- Optimalisasi pengiriman berdasarkan volume barang: Jika
memungkinkan, kirimkan barang dalam jumlah besar ke wilayah yang sama
atau berdekatan untuk memaksimalkan penggunaan armada transportasi.
- Evaluasi Waktu Pengiriman
- Kurangi waktu pengiriman dengan mencari alternatif pengiriman yang
lebih cepat atau efisien, misalnya menggunakan transportasi darat yang
lebih cepat untuk pengiriman jarak dekat dan transportasi udara untuk
pengiriman jarak jauh.
- Pertimbangkan pengiriman lebih awal: Dengan mempertimbangkan proses
distribusi yang lebih awal, pengiriman yang lebih cepat bisa lebih
efisien. Ini akan mengurangi kemungkinan keterlambatan dan meningkatkan
pengelolaan waktu.
- Penggunaan Teknologi dan Data
- Implementasi IoT dan data real-time: Dengan memanfaatkan teknologi
Internet of Things (IoT) pada kendaraan pengiriman dan memantau data
pengiriman secara real-time, dapat diidentifikasi dan diatasi
hambatan-hambatan yang terjadi selama pengiriman.
- Analisis data untuk pola pengiriman: Dengan menganalisis data
pengiriman, perusahaan bisa mengetahui pola waktu pengiriman yang lebih
lambat dan lebih mahal, serta mengidentifikasi faktor yang memperburuk
efisiensi.
2.2.2.2 Tindakan Langkah Berikutnya
- Audit Pengiriman: Lakukan audit secara berkala terhadap biaya dan
waktu pengiriman di wilayah Tengah.
- Pelatihan Pengemudi dan Pekerja: Pelatihan untuk pengemudi dan
pekerja logistik untuk memaksimalkan efisiensi dalam pemuatan barang dan
penggunaan jalur transportasi yang optimal.
2.2.2.3 Harapan
Dengan menerapkan langkah-langkah ini, diharapkan biaya per unit di
wilayah Tengah dapat diturunkan, serta waktu pengiriman dapat lebih
singkat, sehingga meningkatkan efisiensi keseluruhan.
LS0tDQp0aXRsZTogIlR1Z2FzIFBlcnRlbXVhbiAxMSINCnN1YnRpdGxlOiAiU3RhdGlzdGlrYSBEYXNhciINCmF1dGhvcjogIkpPQU5TIEhFTktZIFNFUlZBVElVUyBTSU1BTlVMTEFORyINCmRhdGU6ICAiYHIgZm9ybWF0KFN5cy5EYXRlKCksICclQiAlZCwgJVknKWAiDQpvdXRwdXQ6DQoNCiAgcm1kZm9ybWF0czo6cmVhZHRoZWRvd246ICAgIyBodHRwczovL2dpdGh1Yi5jb20vanViYS9ybWRmb3JtYXRzDQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICB0aHVtYm5haWxzOiB0cnVlDQogICAgbGlnaHRib3g6IHRydWUNCiAgICBnYWxsZXJ5OiB0cnVlDQogICAgbGliX2RpcjogbGlicw0KICAgIGRmX3ByaW50OiAicGFnZWQiDQogICAgY29kZV9mb2xkaW5nOiAic2hvdyINCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCiAgICBjc3M6ICJzdHlsZS5jc3MiDQotLS0NCg0KPGltZyBzcmM9ImltZy9mb3RvLmpwZWciIGFsdD0iTG9nbyIgc3R5bGU9IndpZHRoOjMwMHB4OyBkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIvPg0KDQoNCiMgTGF0aWhhbiAxDQoNClNlYnVhaCBwZXJ1c2FoYWFuIGluZ2luIG1lbWFoYW1pIGthcmFrdGVyaXN0aWsgcGVueWViYXJhbiBkYXRhIGhhc2lsIHBlbmp1YWxhbiBkYXJpIGVtcGF0IGNhYmFuZyAoQSwgQiwgQywgZGFuIEQpIHNlbGFtYSBzYXR1IGJ1bGFuIHRlcmFraGlyLiBEYXRhIHBlbmp1YWxhbiAoZGFsYW0ganV0YSBydXBpYWgpIGRhcmkga2VlbXBhdCBjYWJhbmcgdGVyc2VidXQgYWRhbGFoIHNlYmFnYWkgYmVyaWt1dDoNCg0KLSBDYWJhbmcgQTogNTAsIDU1LCA2MCwgNjUsIDcwDQotIENhYmFuZyBCOiA0MCwgNTAsIDYwLCA3MCwgODANCi0gQ2FiYW5nIEM6IDMwLCAzMCwgMzUsIDQwLCA0NQ0KLSBDYWJhbmcgRDogNzAsIDc1LCA4MCwgODUsIDkwDQoNCjEuIEhpdHVuZ2xhaCByYXRhLXJhdGEsIG1lZGlhbiwgZGFuIHN0YW5kYXIgZGV2aWFzaSB1bnR1ayBtYXNpbmctbWFzaW5nIGNhYmFuZy4NCjIuIENhYmFuZyBtYW5hIHlhbmcgbWVtaWxpa2kgcGVueWViYXJhbiBkYXRhIHBhbGluZyBrZWNpbD8gSmVsYXNrYW4gYWxhc2FubnlhLg0KMy4gSmlrYSB0YXJnZXQgcGVuanVhbGFuIG1pbmltdW0gYWRhbGFoIDUwIGp1dGEgcnVwaWFoLCBjYWJhbmcgbWFuYSBzYWphIHlhbmcgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0IGRpIHNlbXVhIGRhdGFueWE/DQo0LiBCdWF0bGFoIGRpYWdyYW0ga290YWsgKGJveCBwbG90KSB1bnR1ayBtZW12aXN1YWxpc2FzaWthbiBwZW55ZWJhcmFuIGRhdGEgc2V0aWFwIGNhYmFuZy4NCjUuIEppa2EgQW5kYSBhZGFsYWggbWFuYWplciBwZXJ1c2FoYWFuLCBiYWdhaW1hbmEgQW5kYSBha2FuIG1lbmdndW5ha2FuIGluZm9ybWFzaSBpbmkgdW50dWsgbWVyZW5jYW5ha2FuIHN0cmF0ZWdpIHBlbmluZ2thdGFuIHBlbmp1YWxhbj8NCg0KIyMgMS4xIEhpdHVuZ2xhaCByYXRhLXJhdGEsIG1lZGlhbiwgZGFuIHN0YW5kYXIgZGV2aWFzaSB1bnR1ayBtYXNpbmctbWFzaW5nIGNhYmFuZy4NCg0KIyMjIDEuMS4xIENhYmFuZyBBDQpcWw0KXHRleHR7Q2FiYW5nIEE6IH0gNTAsIDU1LCA2MCwgNjUsIDcwDQpcXQ0KDQojIyMjIDEuMS4xLjEgTWVuZ2hpdHVuZyBSYXRhLXJhdGEgKE1lYW4pOg0KUnVtdXM6DQpcWw0KXHRleHR7UmF0YS1yYXRhfSA9IFxmcmFje1x0ZXh0e0p1bWxhaCBzZW11YSBuaWxhaX19e1x0ZXh0e0p1bWxhaCBkYXRhfX0NClxdDQoNCkxhbmdrYWgtbGFuZ2thaDoNClxbDQpcdGV4dHtSYXRhLXJhdGEgQ2FiYW5nIEF9ID0gXGZyYWN7NTAgKyA1NSArIDYwICsgNjUgKyA3MH17NX0gPSBcZnJhY3szMDB9ezV9ID0gNjANClxdDQoNCioqSGFzaWw6KioNClxbDQpcdGV4dHtSYXRhLXJhdGEgQ2FiYW5nIEF9ID0gNjANClxdDQoNCi0tLQ0KDQojIyMjIDEuMS4xLjIgTWVuZ2hpdHVuZyBNZWRpYW46DQpEYXRhIGRpdXJ1dGthbjogKio1MCwgNTUsIDYwLCA2NSwgNzAqKg0KDQoqKkRpZGFwYXQganVtbGFoIGRhdGEgKG4pID0gNSoqDQoNCioqSnVtbGFoIGRhdGEgZ2FuamlsLCBtYWthIHBvc2lzaSBuaWxhaSB0ZW5nYWhueWEgZGljYXJpIG1lbmdndW5ha2FuIHJ1bXVzOioqDQpcWw0KXHRleHR7UG9zaXNpIE1lZGlhbn0gPSBcZnJhY3tufXsyfSArIDENClxdDQoNCioqTWFrYToqKg0KXFsNClx0ZXh0e1Bvc2lzaSBNZWRpYW59ID0gXGZyYWN7NSsxfXsyfSA9IDMNClxdDQoNCioqSmFkaSBEYXRhIGtlIDM6KioNClxbDQpcdGV4dHtNZWRpYW4gQ2FiYW5nIEF9ID0gNjANClxdDQoNCi0tLQ0KDQojIyMjIDEuMS4xLjMgTWVuZ2hpdHVuZyBTdGFuZGFyIERldmlhc2k6DQoqKlJ1bXVzOioqDQpcWw0KcyA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxiYXJ7eH0pXjJ9e24tMX19DQpcXQ0KDQpEaW1hbmE6DQoNCi0gXCh4X2lcKSA9IHNlbXVhIGRhdGEgeWFuZyBha2FuIGRpaGl0dW5nDQotIFwoXGJhcntYfVwpID0gTWVhbiAocmF0YS1yYXRhKQ0KLSBuID0ganVtbGFoIGRhdGENCg0KKipNYWthKioNClxbDQpzID0gXHNxcnR7XGZyYWN7KDUwIC0gNjApXjIgKyAoNTUgLSA2MCleMiArICg2MCAtIDYwKV4yICsgKDY1IC0gNjApXjIgKyAoNzAgLSA2MCleMn17NS0xfX0NClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezEwMCArIDI1ICsgMCArIDI1ICsgMTAwfXs0fX0NClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezI1MH17NH19DQpcXQ0KXFsNCnMgPSBcc3FydHs2Mi41fSA9IDcuOTENClxdDQoNCioqSGFzaWw6KioNClxbDQpcdGV4dHtTdGFuZGFyIERldmlhc2kgQ2FiYW5nIEF9ID0gNy45MQ0KXF0NCg0KLS0tDQoNCiMjIyAxLjEuMiBDYWJhbmcgQg0KXFsNClx0ZXh0e0NhYmFuZyBCOiB9IDQwLCA1MCwgNjAsIDcwLCA4MA0KXF0NCg0KIyMjIyAxLjEuMi4xIE1lbmdoaXR1bmcgUmF0YS1yYXRhIChNZWFuKToNClJ1bXVzOg0KXFsNClx0ZXh0e1JhdGEtcmF0YX0gPSBcZnJhY3tcdGV4dHtKdW1sYWggc2VtdWEgbmlsYWl9fXtcdGV4dHtKdW1sYWggZGF0YX19DQpcXQ0KDQpMYW5na2FoLWxhbmdrYWg6DQpcWw0KXHRleHR7UmF0YS1yYXRhIENhYmFuZyBCfSA9IFxmcmFjezQwICsgNTAgKyA2MCArIDcwICsgODB9ezV9ID0gXGZyYWN7MzAwfXs1fSA9IDYwDQpcXQ0KDQoqKkhhc2lsOioqDQpcWw0KXHRleHR7UmF0YS1yYXRhIENhYmFuZyBCfSA9IDYwDQpcXQ0KDQotLS0NCg0KIyMjIyAxLjEuMi4yIE1lbmdoaXR1bmcgTWVkaWFuOg0KRGF0YSBkaXVydXRrYW46ICoqNDAsIDUwLCA2MCwgNzAsIDgwKioNCg0KKipKdW1sYWggZGF0YSAobikgPSA1KiogIA0KKipKdW1sYWggZGF0YSBnYW5qaWwsIG1ha2EgcG9zaXNpIG5pbGFpIHRlbmdhaDoqKg0KXFsNClx0ZXh0e1Bvc2lzaSBNZWRpYW59ID0gXGZyYWN7bisxfXsyfSA9IFxmcmFjezUrMX17Mn0gPSAzDQpcXQ0KDQoqKkRhdGEga2UtMzoqKg0KXFsNClx0ZXh0e01lZGlhbiBDYWJhbmcgQn0gPSA2MA0KXF0NCg0KLS0tDQoNCiMjIyMgMS4xLjIuMyBNZW5naGl0dW5nIFN0YW5kYXIgRGV2aWFzaToNClJ1bXVzOg0KXFsNCnMgPSBcc3FydHtcZnJhY3tcc3VtICh4X2kgLSBcYmFye3h9KV4yfXtuLTF9fQ0KXF0NCg0KTGFuZ2thaC1sYW5na2FoOg0KXFsNCnMgPSBcc3FydHtcZnJhY3soNDAtNjApXjIgKyAoNTAtNjApXjIgKyAoNjAtNjApXjIgKyAoNzAtNjApXjIgKyAoODAtNjApXjJ9ezUtMX19DQpcXQ0KXFsNCnMgPSBcc3FydHtcZnJhY3s0MDAgKyAxMDAgKyAwICsgMTAwICsgNDAwfXs0fX0NClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezEwMDB9ezR9fQ0KXF0NClxbDQpzID0gXHNxcnR7MjUwfSA9IDE1LjgxDQpcXQ0KDQoqKkhhc2lsOioqDQpcWw0KXHRleHR7U3RhbmRhciBEZXZpYXNpIENhYmFuZyBCfSA9IDE1LjgxDQpcXQ0KDQotLS0NCg0KIyMjIDEuMS4zIENhYmFuZyBDDQpcWw0KXHRleHR7Q2FiYW5nIEM6IH0gMzAsIDMwLCAzNSwgNDAsIDQ1DQpcXQ0KDQojIyMjIDEuMS4zLjEgTWVuZ2hpdHVuZyBSYXRhLXJhdGEgKE1lYW4pOg0KUnVtdXM6DQpcWw0KXHRleHR7UmF0YS1yYXRhfSA9IFxmcmFje1x0ZXh0e0p1bWxhaCBzZW11YSBuaWxhaX19e1x0ZXh0e0p1bWxhaCBkYXRhfX0NClxdDQoNCkxhbmdrYWgtbGFuZ2thaDoNClxbDQpcdGV4dHtSYXRhLXJhdGEgQ2FiYW5nIEN9ID0gXGZyYWN7MzAgKyAzMCArIDM1ICsgNDAgKyA0NX17NX0gPSBcZnJhY3sxODB9ezV9ID0gMzYNClxdDQoNCioqSGFzaWw6KioNClxbDQpcdGV4dHtSYXRhLXJhdGEgQ2FiYW5nIEN9ID0gMzYNClxdDQoNCi0tLQ0KDQojIyMjIDEuMS4zLjIgTWVuZ2hpdHVuZyBNZWRpYW46DQpEYXRhIGRpdXJ1dGthbjogKiozMCwgMzAsIDM1LCA0MCwgNDUqKg0KDQoqKkp1bWxhaCBkYXRhIChuKSA9IDUqKiAgDQoqKkp1bWxhaCBkYXRhIGdhbmppbCwgbWFrYSBwb3Npc2kgbmlsYWkgdGVuZ2FoOioqDQpcWw0KXHRleHR7UG9zaXNpIE1lZGlhbn0gPSBcZnJhY3tuKzF9ezJ9ID0gXGZyYWN7NSsxfXsyfSA9IDMNClxdDQoNCioqRGF0YSBrZS0zOioqDQpcWw0KXHRleHR7TWVkaWFuIENhYmFuZyBDfSA9IDM1DQpcXQ0KDQotLS0NCg0KIyMjIyAxLjEuMy4zIE1lbmdoaXR1bmcgU3RhbmRhciBEZXZpYXNpOg0KUnVtdXM6DQpcWw0KcyA9IFxzcXJ0e1xmcmFje1xzdW0gKHhfaSAtIFxiYXJ7eH0pXjJ9e24tMX19DQpcXQ0KDQpMYW5na2FoLWxhbmdrYWg6DQpcWw0KcyA9IFxzcXJ0e1xmcmFjeygzMC0zNileMiArICgzMC0zNileMiArICgzNS0zNileMiArICg0MC0zNileMiArICg0NS0zNileMn17NS0xfX0NClxdDQpcWw0KcyA9IFxzcXJ0e1xmcmFjezM2ICsgMzYgKyAxICsgMTYgKyA4MX17NH19DQpcXQ0KXFsNCnMgPSBcc3FydHtcZnJhY3sxNzB9ezR9fQ0KXF0NClxbDQpzID0gXHNxcnR7NDIuNX0gPSA2LjUyDQpcXQ0KDQoqKkhhc2lsOioqDQpcWw0KXHRleHR7U3RhbmRhciBEZXZpYXNpIENhYmFuZyBDfSA9IDYuNTINClxdDQoNCi0tLQ0KDQojIyMgMS4xLjQgQ2FiYW5nIEQNClxbDQpcdGV4dHtDYWJhbmcgRDogfSA3MCwgNzUsIDgwLCA4NSwgOTANClxdDQoNCiMjIyMgMS4xLjQuMSBNZW5naGl0dW5nIFJhdGEtcmF0YSAoTWVhbik6DQpSdW11czoNClxbDQpcdGV4dHtSYXRhLXJhdGF9ID0gXGZyYWN7XHRleHR7SnVtbGFoIHNlbXVhIG5pbGFpfX17XHRleHR7SnVtbGFoIGRhdGF9fQ0KXF0NCg0KTGFuZ2thaC1sYW5na2FoOg0KXFsNClx0ZXh0e1JhdGEtcmF0YSBDYWJhbmcgRH0gPSBcZnJhY3s3MCArIDc1ICsgODAgKyA4NSArIDkwfXs1fSA9IFxmcmFjezQwMH17NX0gPSA4MA0KXF0NCg0KKipIYXNpbDoqKg0KXFsNClx0ZXh0e1JhdGEtcmF0YSBDYWJhbmcgRH0gPSA4MA0KXF0NCg0KLS0tDQoNCiMjIyMgMS4xLjQuMiBNZW5naGl0dW5nIE1lZGlhbjoNCkRhdGEgZGl1cnV0a2FuOiAqKjcwLCA3NSwgODAsIDg1LCA5MCoqDQoNCioqSnVtbGFoIGRhdGEgKG4pID0gNSoqICANCioqSnVtbGFoIGRhdGEgZ2FuamlsLCBtYWthIHBvc2lzaSBuaWxhaSB0ZW5nYWg6KioNClxbDQpcdGV4dHtQb3Npc2kgTWVkaWFufSA9IFxmcmFje24rMX17Mn0gPSBcZnJhY3s1KzF9ezJ9ID0gMw0KXF0NCg0KKipEYXRhIGtlLTM6KioNClxbDQpcdGV4dHtNZWRpYW4gQ2FiYW5nIER9ID0gODANClxdDQoNCi0tLQ0KDQojIyMjIDEuMS40LjMgTWVuZ2hpdHVuZyBTdGFuZGFyIERldmlhc2k6DQpSdW11czoNClxbDQpzID0gXHNxcnR7XGZyYWN7XHN1bSAoeF9pIC0gXGJhcnt4fSleMn17bi0xfX0NClxdDQoNCkxhbmdrYWgtbGFuZ2thaDoNClxbDQpzID0gXHNxcnR7XGZyYWN7KDcwLTgwKV4yICsgKDc1LTgwKV4yICsgKDgwLTgwKV4yICsgKDg1LTgwKV4yICsgKDkwLTgwKV4yfXs1LTF9fQ0KXF0NClxbDQpzID0gXHNxcnR7XGZyYWN7MTAwICsgMjUgKyAwICsgMjUgKyAxMDB9ezR9fQ0KXF0NClxbDQpzID0gXHNxcnR7XGZyYWN7MjUwfXs0fX0NClxdDQpcWw0KcyA9IFxzcXJ0ezYyLjV9ID0gNy45MQ0KXF0NCg0KKipIYXNpbDoqKg0KXFsNClx0ZXh0e1N0YW5kYXIgRGV2aWFzaSBDYWJhbmcgRH0gPSA3LjkxDQpcXQ0KDQotLS0NCg0KKipKaWthIFNlbXVhbnlhIERpc3VzdW4gS2UgRGFsYW0gQmVudHVrIFRhYmVsOioqDQoNCnwgQ2FiYW5nIHwgUmF0YS1yYXRhIHwgTWVkaWFuCXwgU3RhbmRhciBEZXZpYXNpIHwNCnwtLS0tLS0tLXwtLS0tLS0tLS0tLXwtLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLXwNCnwgQ2FiYW5nIEEgfCA2MAl8IDYwIHwgNy45MSB8DQp8IENhYmFuZyBCIHwgNjAJfCA2MCB8IDE1LjgxIHwNCnwgQ2FiYW5nIEMgfCAzNgl8IDM1IHwgNi41MiB8DQp8IENhYmFuZyBEIHwgODAgfCA4MCB8IDcuOTEgfA0KDQotLS0NCg0KIyMgMS4yIENhYmFuZyBtYW5hIHlhbmcgbWVtaWxpa2kgcGVueWViYXJhbiBkYXRhIHBhbGluZyBrZWNpbD8gSmVsYXNrYW4gYWxhc2FubnlhLg0KDQoqKlBlbnllYmFyYW4gZGF0YSoqIGRpdWt1ciBkZW5nYW4gKipzdGFuZGFyIGRldmlhc2kgKFwoc1wpKSoqLiBCZXJpa3V0IGFkYWxhaCBzdGFuZGFyIGRldmlhc2kgbWFzaW5nLW1hc2luZyBjYWJhbmc6DQoNCi0gKipDYWJhbmcgQSoqOiBcKHMgPSA3LjkxXCkgIA0KLSAqKkNhYmFuZyBCKio6IFwocyA9IDE1LjgxXCkgIA0KLSAqKkNhYmFuZyBDKio6IFwocyA9IDYuNTJcKSAgDQotICoqQ2FiYW5nIEQqKjogXChzID0gNy45MVwpICANCg0KIyMjIDEuMi4xIEphd2FiYW46IENhYmFuZyBDIA0KLSBDYWJhbmcgQyBtZW1pbGlraSAqKnN0YW5kYXIgZGV2aWFzaSB0ZXJrZWNpbCoqIHNlYmVzYXIgXCg2LjUyXCksIHlhbmcgbWVudW5qdWtrYW4gYmFod2EgZGF0YSBwZW5qdWFsYW4gZGkgQ2FiYW5nIEMgbGViaWggKip0ZXJrb25zZW50cmFzaSBhdGF1IGhvbW9nZW4qKiBkaWJhbmRpbmdrYW4gZGVuZ2FuIGNhYmFuZyBsYWlubnlhLiAgDQotIFBlbnllYmFyYW4gZGF0YSB5YW5nIGtlY2lsIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBuaWxhaSBwZW5qdWFsYW4gZGkgQ2FiYW5nIEMgbGViaWggc3RhYmlsIGRhbiBtZW5kZWthdGkgcmF0YS1yYXRhIChcKFxiYXJ7WH0gPSAzNlwpKS4NCg0KIyMjIDEuMi4yIFBlbmplbGFzYW4gIA0KU3RhbmRhciBkZXZpYXNpIG1lbmd1a3VyIHJhdGEtcmF0YSBqYXJhayBzZXRpYXAgZGF0YSB0ZXJoYWRhcCByYXRhLXJhdGEuIFNlbWFraW4ga2VjaWwgbmlsYWkgXChzXCksIHNlbWFraW4ga2VjaWwgdmFyaWFzaSBhbnRhcmEgbmlsYWkgZGF0YSwgZGFuIHNlbWFraW4gc2VyYWdhbSBkYXRhIHRlcnNlYnV0LiBDYWJhbmcgQyBtZW1pbGlraSBwZW55ZWJhcmFuIGRhdGEgeWFuZyBsZWJpaCBrZWNpbCBrYXJlbmEgc2VsdXJ1aCBuaWxhaSBwZW5qdWFsYW4gbWVuZGVrYXRpIHJhdGEtcmF0YSwgZGVuZ2FuIHJlbnRhbmcgZGF0YSB5YW5nIHNlbXBpdCAoMzAgaGluZ2dhIDQ1KS4NCg0KLS0tDQoNCiMjIDEuMyBDYWJhbmcgTWFuYSB5YW5nIEdhZ2FsIE1lbmNhcGFpIFRhcmdldCBQZW5qdWFsYW4/DQoNCioqVGFyZ2V0IHBlbmp1YWxhbiBtaW5pbXVtOioqIDUwIGp1dGEgcnVwaWFoLg0KDQojIyMgMS4zLjEgRGF0YSBQZW5qdWFsYW4gVGlhcCBDYWJhbmc6DQotICoqQ2FiYW5nIEEqKjogXCg1MCwgNTUsIDYwLCA2NSwgNzBcKSAgDQotICoqQ2FiYW5nIEIqKjogXCg0MCwgNTAsIDYwLCA3MCwgODBcKSAgDQotICoqQ2FiYW5nIEMqKjogXCgzMCwgMzAsIDM1LCA0MCwgNDVcKSAgDQotICoqQ2FiYW5nIEQqKjogXCg3MCwgNzUsIDgwLCA4NSwgOTBcKSAgDQoNCiMjIyAxLjMuMiBBbmFsaXNpczoNClVudHVrIHNldGlhcCBjYWJhbmcsIGtpdGEgcGVyaWtzYSBhcGFrYWggYWRhIG5pbGFpIHlhbmcga3VyYW5nIGRhcmkgNTAganV0YSBydXBpYWg6DQoNCjEuICoqQ2FiYW5nIEEqKjogU2VtdWEgZGF0YSBcKCg1MCwgNTUsIDYwLCA2NSwgNzApXCkgbWVuY2FwYWkgdGFyZ2V0LiAgDQogICAqKktlc2ltcHVsYW46KiogVGlkYWsgYWRhIGRhdGEgeWFuZyBnYWdhbC4gIA0KDQoyLiAqKkNhYmFuZyBCKio6IEFkYSBzYXR1IGRhdGEgeWFuZyBnYWdhbCBtZW5jYXBhaSB0YXJnZXQsIHlhaXR1IFwoNDBcKS4gIA0KICAgKipLZXNpbXB1bGFuOioqIEdhZ2FsIGRpIHNhdHUgZGF0YSAoXCg0MFwpKS4gIA0KDQozLiAqKkNhYmFuZyBDKio6IFNlbXVhIGRhdGEgXCgoMzAsIDMwLCAzNSwgNDAsIDQ1KVwpIGdhZ2FsIG1lbmNhcGFpIHRhcmdldC4gIA0KICAgKipLZXNpbXB1bGFuOioqIEdhZ2FsIGRpIHNlbXVhIGRhdGEuICANCg0KNC4gKipDYWJhbmcgRCoqOiBTZW11YSBkYXRhIFwoKDcwLCA3NSwgODAsIDg1LCA5MClcKSBtZW5jYXBhaSB0YXJnZXQuICANCiAgICoqS2VzaW1wdWxhbjoqKiBUaWRhayBhZGEgZGF0YSB5YW5nIGdhZ2FsLiAgDQoNCiMjIyAxLjMuMyBKYXdhYmFuIEFraGlyOg0KLSAqKkNhYmFuZyBCKiogbWVtaWxpa2kgMSBkYXRhIHlhbmcgZ2FnYWwgbWVuY2FwYWkgdGFyZ2V0LiAgDQotICoqQ2FiYW5nIEMqKiBnYWdhbCBtZW5jYXBhaSB0YXJnZXQgZGkgKipzZW11YSBkYXRhKiouICANCg0KLS0tDQoNCiMjIDEuNCBCdWF0bGFoIGRpYWdyYW0ga290YWsgKGJveCBwbG90KSB1bnR1ayBtZW12aXN1YWxpc2FzaWthbiBwZW55ZWJhcmFuIGRhdGEgc2V0aWFwIGNhYmFuZy4NCg0KIyMjIDEuNC4xIFZpc3VhbGlzYXNpIGRhdGENCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQojIERhdGEgcGVuanVhbGFuIHNldGlhcCBjYWJhbmcNCnBlbmp1YWxhbiA8LSBsaXN0KA0KICAiQ2FiYW5nIEEiID0gYyg1MCwgNTUsIDYwLCA2NSwgNzApLA0KICAiQ2FiYW5nIEIiID0gYyg0MCwgNTAsIDYwLCA3MCwgODApLA0KICAiQ2FiYW5nIEMiID0gYygzMCwgMzAsIDM1LCA0MCwgNDUpLA0KICAiQ2FiYW5nIEQiID0gYyg3MCwgNzUsIDgwLCA4NSwgOTApDQopDQoNCiMgTWVtYnVhdCBib3ggcGxvdA0KYm94cGxvdCgNCiAgcGVuanVhbGFuLA0KICBjb2wgPSBjKCIjRkZCNkMxIiwgIiNBREQ4RTYiLCAiIzkwRUU5MCIsICIjRkZEQUI5IiksDQogIG1haW4gPSAiRGlhZ3JhbSBLb3RhayAoQm94IFBsb3QpIFBlbmp1YWxhbiBUaWFwIENhYmFuZyIsDQogIHhsYWIgPSAiQ2FiYW5nIiwNCiAgeWxhYiA9ICJQZW5qdWFsYW4gKEp1dGEgUnVwaWFoKSIsDQogIGJvcmRlciA9ICJkYXJrYmx1ZSIsDQogIG5vdGNoID0gRkFMU0UNCikNCg0KIyBNZW5hbWJhaGthbiBncmlkIHVudHVrIGtlamVsYXNhbg0KZ3JpZChueCA9IE5BLCBueSA9IE5VTEwsIGx0eSA9ICJkYXNoZWQiLCBjb2wgPSAiZ3JheSIsIGx3ZCA9IDAuNSkNCg0KYGBgDQoNCi0tLQ0KDQojIyAxLjUgU3RyYXRlZ2kgUGVuaW5na2F0YW4gUGVuanVhbGFuIEJlcmRhc2Fya2FuIEFuYWxpc2lzIERhdGENCg0KU2ViYWdhaSBtYW5hamVyIHBlcnVzYWhhYW4sIGluZm9ybWFzaSBpbmkgZGFwYXQgZGlndW5ha2FuIHVudHVrIG1lbnl1c3VuIHN0cmF0ZWdpIHBlbmluZ2thdGFuIHBlbmp1YWxhbiBkZW5nYW4gbGFuZ2thaC1sYW5na2FoIGJlcmlrdXQ6DQoNCiMjIyAxLjUuMSBGb2t1cyBwYWRhIENhYmFuZyBDDQotICoqQW5hbGlzaXM6KiogQ2FiYW5nIEMgbWVtaWxpa2kgcmF0YS1yYXRhIHBlbmp1YWxhbiB0ZXJlbmRhaCAoXChcYmFye1h9ID0gMzZcKSkgZGFuIGdhZ2FsIG1lbmNhcGFpIHRhcmdldCBwZW5qdWFsYW4gbWluaW11bSBcKDUwXCkganV0YSBydXBpYWggZGkgc2VtdWEgZGF0YW55YS4NCi0gKipTdHJhdGVnaToqKg0KICAtIFRpbmphdSBmYWt0b3ItZmFrdG9yIHlhbmcgbWVueWViYWJrYW4gcmVuZGFobnlhIHBlbmp1YWxhbiwgc2VwZXJ0aSBsb2thc2ksIGRheWEgYmVsaSBwZWxhbmdnYW4sIGF0YXUgc3RyYXRlZ2kgcGVtYXNhcmFuLg0KICAtIFRpbmdrYXRrYW4gcHJvbW9zaSBkYW4gZGlza29uIGtodXN1cyBkaSBhcmVhIENhYmFuZyBDLg0KICAtIEFkYWthbiBwZWxhdGloYW4gdW50dWsgbWVuaW5na2F0a2FuIGtpbmVyamEgdGltIHBlbmp1YWxhbi4NCg0KIyMjIDEuNS4yIE9wdGltYWxrYW4gS2luZXJqYSBDYWJhbmcgQg0KLSAqKkFuYWxpc2lzOioqIENhYmFuZyBCIG1lbWlsaWtpIHBlbnllYmFyYW4gZGF0YSB0ZXJiZXNhciAoXChzID0gMTUuODFcKSksIG1lbnVuanVra2FuIHZhcmlhc2kgeWFuZyB0aW5nZ2kgZGFsYW0gcGVuanVhbGFuLg0KLSAqKlN0cmF0ZWdpOioqDQogIC0gRm9rdXMgcGFkYSBzdGFiaWxpc2FzaSBwZW5qdWFsYW4gZGVuZ2FuIHBlbmRla2F0YW4geWFuZyBrb25zaXN0ZW4gdGVyaGFkYXAgcGVsYW5nZ2FuLg0KICAtIFRpbmdrYXRrYW4gZWZpc2llbnNpIGRpc3RyaWJ1c2kgZGFuIGxheWFuYW4gdW50dWsgbWVuZG9yb25nIHBlbmp1YWxhbiBzZWNhcmEgbWVyYXRhLg0KDQojIyMgMS41LjMgTWVtcGVydGFoYW5rYW4gUGVyZm9ybWEgQ2FiYW5nIEEgZGFuIEQNCi0gKipBbmFsaXNpczoqKiBDYWJhbmcgQSBkYW4gRCBtZW51bmp1a2thbiBwZXJmb3JtYSBzdGFiaWwgZGVuZ2FuIHN0YW5kYXIgZGV2aWFzaSByZW5kYWggKFwocyA9IDcuOTFcKSksIGRhbiB0aWRhayBhZGEgZGF0YSB5YW5nIGdhZ2FsIG1lbmNhcGFpIHRhcmdldC4NCi0gKipTdHJhdGVnaToqKg0KICAtIExhbmp1dGthbiBwcmFrdGlrIHRlcmJhaWsgeWFuZyB0ZWxhaCBkaXRlcmFwa2FuIGRpIGtlZHVhIGNhYmFuZy4NCiAgLSBKYWRpa2FuIENhYmFuZyBBIGRhbiBEIHNlYmFnYWkgbW9kZWwgYmFnaSBjYWJhbmcgbGFpbiBkZW5nYW4gYmVyYmFnaSBzdHJhdGVnaSBzdWtzZXMgbWVyZWthLg0KDQojIyMgMS41LjQgVGluamF1YW4gRGF0YSBTZWNhcmEgQmVya2FsYQ0KLSBCdWF0IGxhcG9yYW4gYnVsYW5hbiB1bnR1ayBtZW1hbnRhdSBwZXJrZW1iYW5nYW4gc2V0aWFwIGNhYmFuZy4NCi0gSW1wbGVtZW50YXNpa2FuIHRla25vbG9naSBhbmFsaXRpayB1bnR1ayBtZW1wcmVkaWtzaSB0cmVuIHBlbmp1YWxhbiBkYW4gbWVueWVzdWFpa2FuIHN0cmF0ZWdpIGRlbmdhbiBrZWJ1dHVoYW4gcGFzYXIuDQoNCiMjIyAxLjUuNSBEaXZlcnNpZmlrYXNpIFByb2R1ayBkYW4gTGF5YW5hbg0KLSBUYW1iYWhrYW4gdmFyaWFzaSBwcm9kdWsgeWFuZyBzZXN1YWkgZGVuZ2FuIHByZWZlcmVuc2kgbG9rYWwgdW50dWsgbWVuaW5na2F0a2FuIGRheWEgdGFyaWsgZGkgY2FiYW5nIGRlbmdhbiBwZXJmb3JtYSByZW5kYWguDQotIEV2YWx1YXNpIHJlc3BvbnMgcGFzYXIgdGVyaGFkYXAgcHJvZHVrIGJhcnUgbWVsYWx1aSBzdXJ2ZWkgcGVsYW5nZ2FuIGRhbiB1amkgY29iYSB0ZXJiYXRhcy4NCg0KIyMjIDEuNS42IEtlc2ltcHVsYW46DQpEZW5nYW4gbWVtYW5mYWF0a2FuIGluZm9ybWFzaSBzdGF0aXN0aWsgc2VwZXJ0aSByYXRhLXJhdGEsIG1lZGlhbiwgZGFuIHN0YW5kYXIgZGV2aWFzaSwgcGVydXNhaGFhbiBkYXBhdCBtZW1haGFtaSBraW5lcmphIG1hc2luZy1tYXNpbmcgY2FiYW5nIHNlY2FyYSBtZW5kYWxhbSBkYW4gbWVuZ2ltcGxlbWVudGFzaWthbiBzdHJhdGVnaSB5YW5nIHNwZXNpZmlrIHVudHVrIG1lbmluZ2thdGthbiB0b3RhbCBwZW5qdWFsYW4gc2VjYXJhIGtlc2VsdXJ1aGFuLg0KDQotLS0NCg0KIyBMYXRpaGFuIDINCg0KUGVydXNhaGFhbiBYWVogbWVuZ2Vsb2xhIHBlbmdpcmltYW4gYmFyYW5nIGtlIGJlcmJhZ2FpIHdpbGF5YWggZGVuZ2FuIG1lbmdndW5ha2FuIGJlcmJhZ2FpIGplbmlzIHRyYW5zcG9ydGFzaS4gU2V0aWFwIHBlbmdpcmltYW4gbWVsaWJhdGthbiBiaWF5YSB0cmFuc3BvcnRhc2ksIHdha3R1IHlhbmcgZGlidXR1aGthbiwgZGFuIGp1bWxhaCBiYXJhbmcgeWFuZyBkaWtpcmltLiBCZXJpa3V0IGFkYWxhaCBkYXRhIHRlcmthaXQgcGVuZ2lyaW1hbiBiYXJhbmcgYmVyZGFzYXJrYW4gd2lsYXlhaCBkYW4gamVuaXMgYmFyYW5nOg0KDQp8IFdpbGF5YWggfCBKZW5pcyBCYXJhbmcgfCBKdW1sYWggQmFyYW5nICh1bml0KSB8IFdha3R1IFBlbmdpcmltYW4gKGphbSkgfCBCaWF5YSBwZXIgVW5pdCAoUnApIHwNCnwtLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwgVXRhcmEgfCBFbGVrdHJvbmlrIHwgMjAwIHwgNSB8IDE1MDAwIHwNCnwgU2VsYXRhbiB8IFBha2FpYW4gfCAxNTAgfCA4IHwgODAwMCB8DQp8IFRpbXVyIHwgTWFrYW5hbiB8IDE4MCB8IDYgfCAxMDAwMCB8DQp8IEJhcmF0IHwgUGVyYWxhdGFuIHwgMTIwIHwgNyB8IDEyMDAwIHwNCnwgVGVuZ2FoIHwgRWxla3Ryb25payB8IDI1MCB8IDQgfCAxNDAwMCB8DQp8IFV0YXJhIHwgUGFrYWlhbiB8IDMwMCB8IDkgfCA4NTAwIHwNCnwgU2VsYXRhbiB8IE1ha2FuYW4gfCAyMjAgfCA3IHwgOTUwMCB8DQp8IFRpbXVyIHwgUGVyYWxhdGFuIHwgMTQwIHwgNSB8IDExMDAwIHwNCnwgQmFyYXQgfCBFbGVrdHJvbmlrIHwgMTgwIHwgNiB8IDE0NTAwIHwNCnwgVGVuZ2FoIHwgUGFrYWlhbiB8IDM1MCB8IDggfCA3ODAwIHwNCnwgVXRhcmEgfCBQZXJhbGF0YW4gfCAxNzAgfCA0IHwxMjAwMCB8DQp8IFNlbGF0YW4gfCBFbGVrdHJvbmlrIHwgMjUwIHwgNiB8IDE2MDAwIHwNCnwgVGltdXIgfCBQYWthaWFuIHwgMTkwIHwgNyB8IDgyMDAgfA0KfCBCYXJhdCB8IE1ha2FuYW4gfCAxMzAgfCA1IHwgMTA1MDAgfA0KfCBUZW5nYWggfCBQZXJhbGF0YW4gfCAxODAgfCA1IHwgMTE1MDAgfA0KDQoxLiBBbmFsaXNpcyBFZmlzaWVuc2kgUGVuZ2lyaW1hbjoNCiAgLSBWaXN1YWxpc2FzaWthbiBwZW5naXJpbWFuIGJhcmFuZyBiZXJkYXNhcmthbiBqdW1sYWggYmFyYW5nLCB3YWt0dSBwZW5naXJpbWFuLCBkYW4gYmlheWEgcGVyIHVuaXQgZGVuZ2FuIG1lbmdndW5ha2FuIHBsb3QgM0QuDQogIC0gVGVudHVrYW4gd2lsYXlhaCBtYW5hIHlhbmcgbWVtaWxpa2kgZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggYmVyZGFzYXJrYW4gYmlheWEgcGVyIHVuaXQgZGFuIHdha3R1IHBlbmdpcmltYW4uDQogDQoyLiBSZWtvbWVuZGFzaSBPcGVyYXNpb25hbDoNCiAgLSBCZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpcywgd2lsYXlhaCBtYW5hIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbj8NCiAgLSBBcGEgcmVrb21lbmRhc2kgdW50dWsgbWVuZ3VyYW5naSBiaWF5YSBkYW4gd2FrdHUgcGVuZ2lyaW1hbiBkaSB3aWxheWFoIHRlcnNlYnV0Pw0KICANCiMjIDIuMSBBbmFsaXNpcyBFZmlzaWVuc2kgUGVuZ2lyaW1hbjoNCg0KIyMjIDIuMS4xIFZpc3VhbGlzYXNpa2FuIHBlbmdpcmltYW4gYmFyYW5nIGJlcmRhc2Fya2FuIGp1bWxhaCBiYXJhbmcsIHdha3R1IHBlbmdpcmltYW4sIGRhbiBiaWF5YSBwZXIgdW5pdCBkZW5nYW4gbWVuZ2d1bmFrYW4gcGxvdCAzRC4NCg0KYGBge3IsIGVjaG89RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9DQpsaWJyYXJ5KHBsb3RseSkNCg0KIyBEYXRhIGlucHV0DQpkYXRhIDwtIGRhdGEuZnJhbWUoDQogIFdpbGF5YWggPSBjKCJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgIkJhcmF0IiwgIlRlbmdhaCIsICJVdGFyYSIsICJTZWxhdGFuIiwgIlRpbXVyIiwgDQogICAgICAgICAgICAgICJCYXJhdCIsICJUZW5nYWgiLCAiVXRhcmEiLCAiU2VsYXRhbiIsICJUaW11ciIsICJCYXJhdCIsICJUZW5nYWgiKSwNCiAgSmVuaXNfQmFyYW5nID0gYygiRWxla3Ryb25payIsICJQYWthaWFuIiwgIk1ha2FuYW4iLCAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCANCiAgICAgICAgICAgICAgICAgICAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIsICJFbGVrdHJvbmlrIiwgIlBha2FpYW4iLCANCiAgICAgICAgICAgICAgICAgICAiUGVyYWxhdGFuIiwgIkVsZWt0cm9uaWsiLCAiUGFrYWlhbiIsICJNYWthbmFuIiwgIlBlcmFsYXRhbiIpLA0KICBKdW1sYWhfQmFyYW5nID0gYygyMDAsIDE1MCwgMTgwLCAxMjAsIDI1MCwgMzAwLCAyMjAsIDE0MCwgMTgwLCAzNTAsIDE3MCwgMjUwLCAxOTAsIDEzMCwgMTgwKSwNCiAgV2FrdHVfUGVuZ2lyaW1hbiA9IGMoNSwgOCwgNiwgNywgNCwgOSwgNywgNSwgNiwgOCwgNCwgNiwgNywgNSwgNSksDQogIEJpYXlhX1Blcl9Vbml0ID0gYygxNTAwMCwgODAwMCwgMTAwMDAsIDEyMDAwLCAxNDAwMCwgODUwMCwgOTUwMCwgMTEwMDAsIDE0NTAwLCA3ODAwLCANCiAgICAgICAgICAgICAgICAgICAgIDEyMDAwLCAxNjAwMCwgODIwMCwgMTA1MDAsIDExNTAwKQ0KKQ0KDQojIE1lbWJ1YXQgcGxvdCAzRA0KcGxvdCA8LSBwbG90X2x5KA0KICBkYXRhLCANCiAgeCA9IH5KdW1sYWhfQmFyYW5nLCANCiAgeSA9IH5XYWt0dV9QZW5naXJpbWFuLCANCiAgeiA9IH5CaWF5YV9QZXJfVW5pdCwgDQogIGNvbG9yID0gfldpbGF5YWgsIA0KICBjb2xvcnMgPSBjKCJibHVlIiwgIm9yYW5nZSIsICJncmVlbiIsICJwdXJwbGUiLCAicmVkIiksICMgV2FybmEga2h1c3VzIHBlciB3aWxheWFoDQogIHRleHQgPSB+cGFzdGUoIkplbmlzIEJhcmFuZzoiLCBKZW5pc19CYXJhbmcpLCAjIExhYmVsIGludGVyYWt0aWYNCiAgdHlwZSA9ICJzY2F0dGVyM2QiLCANCiAgbW9kZSA9ICJtYXJrZXJzIg0KKQ0KDQojIE1lbmFtYmFoa2FuIHRhdGEgbGV0YWsgcGxvdA0KcGxvdCA8LSBwbG90ICU+JSBsYXlvdXQoDQogIHRpdGxlID0gIkFuYWxpc2lzIDNEIEVmaXNpZW5zaSBQZW5naXJpbWFuIEJhcmFuZyIsDQogIHNjZW5lID0gbGlzdCgNCiAgICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiSnVtbGFoIEJhcmFuZyAodW5pdCkiKSwNCiAgICB5YXhpcyA9IGxpc3QodGl0bGUgPSAiV2FrdHUgUGVuZ2lyaW1hbiAoamFtKSIpLA0KICAgIHpheGlzID0gbGlzdCh0aXRsZSA9ICJCaWF5YSBwZXIgVW5pdCAoUnApIiksDQogICAgY2FtZXJhID0gbGlzdCgNCiAgICAgIGV5ZSA9IGxpc3QoeCA9IDEuNSwgeSA9IDEuNSwgeiA9IDAuNSkgIyBTdWR1dCBwYW5kYW5nIGthbWVyYQ0KICAgICkNCiAgKSwNCiAgbGVnZW5kID0gbGlzdCh0aXRsZSA9IGxpc3QodGV4dCA9ICJXaWxheWFoIiksIG9yaWVudGF0aW9uID0gInYiKSAjIFBlbmdhdHVyYW4gbGVnZW5kYQ0KKQ0KDQojIE1lbmFtcGlsa2FuIHBsb3QNCnBsb3QNCg0KYGBgDQoNCiMjIyAyLjEuMiBUZW50dWthbiB3aWxheWFoIG1hbmEgeWFuZyBtZW1pbGlraSBlZmlzaWVuc2kgcGVuZ2lyaW1hbiB0ZXJlbmRhaCBiZXJkYXNhcmthbiBiaWF5YSBwZXIgdW5pdCBkYW4gd2FrdHUgcGVuZ2lyaW1hbi4NCg0KIyMjIyAyLjEuMi4xIENhcmEgTWFudWFsDQoqKlJ1bXVzOioqDQpcWw0KXHRleHR7RWZpZW5zaX0gPSBcZnJhY3tcdGV4dHtCaWF5YSBwZXIgVW5pdH19e1x0ZXh0e1dha3R1IFBlbmdpcmltYW59fQ0KXF0NCioqTm90ZToqKg0KV2lsYXlhaCBkZW5nYW4gZWZpc2llbnNpIHRlcnRpbmdnaSAobmlsYWkgdGVyYmVzYXIpIGRpYW5nZ2FwIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoIGthcmVuYSBiaWF5YSBsZWJpaCBtYWhhbCBwZXIgc2F0dWFuIHdha3R1Lg0KDQoqKkNvbnRvaCBQZXJoaXR1bmdhbjoqKg0KLSBCYXJpcyAxIChXaWxheWFoIFV0YXJhKToNClxbDQpcdGV4dHtFZmllbnNpfSA9IFxmcmFjezE1LDAwMH17NX0gPSAzLDAwMA0KXF0NCi0gQmFyaXMgMiAoV2lsYXlhaCBTZWxhdGFuKToNClxbDQpcdGV4dHtFZmllbnNpfSA9IFxmcmFjezgsMDAwfXs4fSA9IDEsMDAwDQpcXQ0KLSBCYXJpcyAzIChXaWxheWFoIFRpbXVyKToNClxbDQpcdGV4dHtFZmllbnNpfSA9IFxmcmFjezEwLDAwMH17Nn0gPSAxLDY2Nw0KXF0NCi0gTGFrdWthbiBsYW5na2FoIHlhbmcgc2FtYSB1bnR1ayBzZW11YSBiYXJpcy4NCg0KfCBXaWxheWFoIHwJQmlheWEgcGVyIFVuaXQgKFJwKSB8CVdha3R1IFBlbmdpcmltYW4gKGphbSkgfAlFZmlzaWVuc2kgKFwoXGZyYWN7XHRleHR7QmlheWEgcGVyIFVuaXR9fXtcdGV4dHtXYWt0dSBQZW5naXJpbWFufX0gXCkpIHwgDQp8LS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCBVdGFyYSAgICAgICB8IDE1LDAwMCAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IDgsMDAwICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IDEwLDAwMCAgICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsNjY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IDEyLDAwMCAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsNzE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IDE0LDAwMCAgICAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBVdGFyYSAgICAgICB8IDgsNTAwICAgICAgICAgICAgICAgICAgfCA5ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDk0NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IDksNTAwICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsMzU3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IDExLDAwMCAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsMjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IDE0LDUwMCAgICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNDE3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IDcsODAwICAgICAgICAgICAgICAgICAgfCA4ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDk3NSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBVdGFyYSAgICAgICB8IDEyLDAwMCAgICAgICAgICAgICAgICAgfCA0ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDMsMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBTZWxhdGFuICAgICB8IDE2LDAwMCAgICAgICAgICAgICAgICAgfCA2ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsNjY3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUaW11ciAgICAgICB8IDgsMjAwICAgICAgICAgICAgICAgICAgfCA3ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDEsMTcxICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBCYXJhdCAgICAgICB8IDEwLDUwMCAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsMTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCBUZW5nYWggICAgICB8IDExLDUwMCAgICAgICAgICAgICAgICAgfCA1ICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIsMzAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KDQojIyMjIyAyLjEuMi4xLjEgSGFzaWwgQW5hbGlzaXMNCioqV2lsYXlhaCBkZW5nYW4gZWZpc2llbnNpIHBlbmdpcmltYW4gdGVyZW5kYWggYWRhbGFoOioqDQoNCi0gKipXaWxheWFoOioqIFRlbmdhaA0KLSAqKkJpYXlhIHBlciBVbml0OioqIFJwMTQuMDAwDQotICoqV2FrdHUgUGVuZ2lyaW1hbjoqKiA0IGphbQ0KLSAqKkVmaXNpZW5zaToqKiAzLDUwMCAodGVydGluZ2dpLCBzZWhpbmdnYSBwYWxpbmcgdGlkYWsgZWZpc2llbikNCg0KIyMjIyAyLjEuMi4yIENhcmEgRGVuZ2FuIFB5aHRvbg0KDQpgYGB7ciwgZWNobz1GQUxTRSwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCiMgVGFtYmFoa2FuIGxpYnJhcnkga25pdHINCg0KbGlicmFyeShrbml0cikNCg0KDQojIFRhbWJhaGthbiBrb2xvbSBFZmlzaWVuc2kNCmRhdGEkRWZpc2llbnNpIDwtIGRhdGEkQmlheWFfUGVyX1VuaXQgLyBkYXRhJFdha3R1X1BlbmdpcmltYW4NCg0KIyBUYW1waWxrYW4gdGFiZWwgZGF0YSBkYWxhbSBiZW50dWsgdGFiZWwgcmFwaQ0Ka2FibGUoZGF0YSwgY2FwdGlvbiA9ICJUYWJlbCBEYXRhIGRlbmdhbiBLb2xvbSBFZmlzaWVuc2kiKQ0KDQojIENhcmkgZGF0YSBkZW5nYW4gZWZpc2llbnNpIHRlcmVuZGFoDQpsb3dlc3RfZWZmaWNpZW5jeSA8LSBkYXRhW3doaWNoLm1pbihkYXRhJEVmaXNpZW5zaSksIF0NCg0KIyBUYW1waWxrYW4gZGF0YSBkZW5nYW4gZWZpc2llbnNpIHRlcmVuZGFoIGRhbGFtIGJlbnR1ayB0YWJlbA0Ka2FibGUobG93ZXN0X2VmZmljaWVuY3ksIGNhcHRpb24gPSAiRGF0YSBkZW5nYW4gRWZpc2llbnNpIFRlcmVuZGFoIikNCg0KYGBgDQoNCiMjIyMjIDIuMS4yLjIuMiBIYXNpbCBBbmFsaXNpcw0KKipIYXNpbCBkYXJpIGtvZGUgZGkgYXRhcyBha2FuIG1lbnVuanVra2FuIHdpbGF5YWggZGVuZ2FuIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoLiBCZXJkYXNhcmthbiBkYXRhOioqDQoNCi0gKipXaWxheWFoOioqIFRlbmdhaA0KLSAqKkplbmlzIEJhcmFuZzoqKiBFbGVrdHJvbmlrDQotICoqSnVtbGFoIEJhcmFuZzoqKiAyNTAgdW5pdA0KLSAqKldha3R1IFBlbmdpcmltYW46KiogNCBqYW0NCi0gKipCaWF5YSBwZXIgVW5pdDoqKiBScDE0LjAwMA0KLSAqKlRpbmdrYXQgRWZpc2llbnNpOioqIDMsNTAwICh0ZXJ0aW5nZ2ksIGJlcmFydGkgZWZpc2llbnNpIHRlcmVuZGFoKS4NCg0KIyMjIyAyLjEuMi4zIEtlc2ltcHVsYW4gV2lsYXlhaCBkZW5nYW4gRWZpc2llbnNpIFRlcmVuZGFoDQpKYWRpIEVmaXNpZW5zaSBUZXJlbmRhaCBiaXNhIGRpa2V0YWh1aSBtZWxhdWkgY2FyYSBtYW51YWwgZGFuIFB5dGhvbiB5YW5nIG1lbmdoYXNpbGthbiBoYXNpbCB5YW5nIHNhbWEsWWFpdHU6DQoNCkVmaXNpZW5zaSB0ZXJ0aW5nZ2kgKHBhbGluZyB0aWRhayBlZmlzaWVuKSBhZGFsYWggMyw1MDAuDQoNCldpbGF5YWggZGVuZ2FuIGVmaXNpZW5zaSB0ZXJlbmRhaCAocGFsaW5nIHRpZGFrIGVmaXNpZW4pIGFkYWxhaDoNCg0KLSAqKldpbGF5YWg6KiogVGVuZ2FoDQotICoqSmVuaXMgQmFyYW5nOioqIEVsZWt0cm9uaWsNCi0gKipKdW1sYWggQmFyYW5nOioqIDI1MCB1bml0DQotICoqV2FrdHUgUGVuZ2lyaW1hbjoqKiA0IGphbQ0KLSAqKkJpYXlhIHBlciBVbml0OioqIFJwMTQuMDAwDQotICoqVGluZ2thdCBFZmlzaWVuc2k6KiogMyw1MDAgKHRlcnRpbmdnaSwgYmVyYXJ0aSBlZmlzaWVuc2kgdGVyZW5kYWgpLg0KDQojIyAyLjIgUmVrb21lbmRhc2kgT3BlcmFzaW9uYWw6DQoNCiMjIyAyLjIuMSBCZXJkYXNhcmthbiBoYXNpbCBhbmFsaXNpcywgd2lsYXlhaCBtYW5hIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbj8NCkJlcmRhc2Fya2FuIGhhc2lsIGFuYWxpc2lzLCB3aWxheWFoIHlhbmcgbWVtZXJsdWthbiBwZXJoYXRpYW4ga2h1c3VzIHVudHVrIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbiBhZGFsYWggV2lsYXlhaCBUZW5nYWguIFdpbGF5YWggaW5pIG1lbWlsaWtpIGVmaXNpZW5zaSBwZW5naXJpbWFuIHRlcmVuZGFoIGRlbmdhbiBuaWxhaSAzLDUwMCB5YW5nIG1lbnVuanVra2FuIGJhaHdhIGJpYXlhIHBlciB1bml0IHVudHVrIHBlbmdpcmltYW4gZGkgd2lsYXlhaCBpbmkgc2FuZ2F0IHRpbmdnaSBkaWJhbmRpbmdrYW4gZGVuZ2FuIHdha3R1IHlhbmcgZGlidXR1aGthbi4NCg0KIyMjIDIuMi4yIEFwYSByZWtvbWVuZGFzaSB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIGRhbiB3YWt0dSBwZW5naXJpbWFuIGRpIHdpbGF5YWggdGVyc2VidXQ/DQoNCiMjIyMgMi4yLjIuMSBSZWtvbWVuZGFzaSBPcGVyYXNpb25hbCB1bnR1ayBXaWxheWFoIFRlbmdhaA0KMS4gT3B0aW1hc2kgUnV0ZSBQZW5naXJpbWFuDQoNCi0gRXZhbHVhc2kga2VtYmFsaSBydXRlIHBlbmdpcmltYW46IElkZW50aWZpa2FzaSBkYW4gZXZhbHVhc2kgcnV0ZSB5YW5nIGRpZ3VuYWthbiB1bnR1ayBwZW5naXJpbWFuIGJhcmFuZyBkaSB3aWxheWFoIFRlbmdhaC4gSGFsIGluaSBiaXNhIG1lbmNha3VwIHBlbmdlY2VrYW4gYXBha2FoIGFkYSBqYWxhbiB5YW5nIGt1cmFuZyBvcHRpbWFsIGF0YXUgbWFjZXQsIHNlaGluZ2dhIG1lbmFtYmFoIHdha3R1IHBlbmdpcmltYW4uDQotIEd1bmFrYW4gc2lzdGVtIHJ1dGUgY2VyZGFzOiBJbXBsZW1lbnRhc2lrYW4gdGVrbm9sb2dpIHNlcGVydGkgR1BTIHRyYWNraW5nIGRhbiBzaXN0ZW0gbWFuYWplbWVuIHBlbmdpcmltYW4gYmVyYmFzaXMgZGF0YSB1bnR1ayBtZW5jYXJpIHJ1dGUgeWFuZyBsZWJpaCBlZmlzaWVuLiBTaXN0ZW0gaW5pIGJpc2EgbWVuZ3VyYW5naSB3YWt0dSB0ZW1wdWggZGFuIG1lbmluZ2thdGthbiBlZmlzaWVuc2kgcGVuZ2lyaW1hbi4NCg0KMi4gTmVnb3NpYXNpIEJpYXlhIFRyYW5zcG9ydGFzaQ0KDQotIFRpbmphdSBrb250cmFrIHRyYW5zcG9ydGFzaTogV2lsYXlhaCBUZW5nYWggbWVtaWxpa2kgYmlheWEgcGVyIHVuaXQgeWFuZyBjdWt1cCB0aW5nZ2ksIHlhaXR1IFJwIDE0LjAwMC4gU2ViYWlrbnlhIG1lbGFrdWthbiBuZWdvc2lhc2kgZGVuZ2FuIHBlbnllZGlhIGphc2EgdHJhbnNwb3J0YXNpIHVudHVrIG1lbmRhcGF0a2FuIHRhcmlmIGxlYmloIHJlbmRhaCBhdGF1IG1lbmdndW5ha2FuIGFsdGVybmF0aWYgbW9kYSB0cmFuc3BvcnRhc2kgeWFuZyBsZWJpaCBtdXJhaCwgc2VwZXJ0aSBrZXJldGEgYXBpIGF0YXUgdHJhbnNwb3J0YXNpIGxhdXQgdW50dWsgamFyYWsgamF1aC4NCi0gUGVydGltYmFuZ2thbiBwZW5nZ3VuYWFuIGtlbmRhcmFhbiB5YW5nIGxlYmloIGJlc2FyOiBKaWthIG1lbXVuZ2tpbmthbiwgZ3VuYWthbiBrZW5kYXJhYW4gZGVuZ2FuIGthcGFzaXRhcyBsZWJpaCBiZXNhciB1bnR1ayBtZW5ndXJhbmdpIGJpYXlhIHBlciB1bml0IGJhcmFuZyB5YW5nIGRpYW5na3V0Lg0KDQozLiBQZW5nZWxvbXBva2FuIFBlbmdpcmltYW4NCg0KLSBHYWJ1bmdrYW4gcGVuZ2lyaW1hbiBiYXJhbmc6IE1lbmdpbmdhdCBqdW1sYWggYmFyYW5nIHlhbmcgZGlraXJpbSBjdWt1cCBiZXNhciAobWlzYWxueWEgMjUwIHVuaXQgZWxla3Ryb25payBkYW4gMzUwIHVuaXQgcGFrYWlhbiksIG1lbmdnYWJ1bmdrYW4gcGVuZ2lyaW1hbiB1bnR1ayBtZW5ndXJhbmdpIGZyZWt1ZW5zaSBwZW5naXJpbWFuIGRhbiBtZW1ha3NpbWFsa2FuIGthcGFzaXRhcyBrZW5kYXJhYW4gZGFwYXQgbWVuZ3VyYW5naSBiaWF5YSBvcGVyYXNpb25hbC4NCi0gT3B0aW1hbGlzYXNpIHBlbmdpcmltYW4gYmVyZGFzYXJrYW4gdm9sdW1lIGJhcmFuZzogSmlrYSBtZW11bmdraW5rYW4sIGtpcmlta2FuIGJhcmFuZyBkYWxhbSBqdW1sYWggYmVzYXIga2Ugd2lsYXlhaCB5YW5nIHNhbWEgYXRhdSBiZXJkZWthdGFuIHVudHVrIG1lbWFrc2ltYWxrYW4gcGVuZ2d1bmFhbiBhcm1hZGEgdHJhbnNwb3J0YXNpLg0KDQo0LiBFdmFsdWFzaSBXYWt0dSBQZW5naXJpbWFuDQoNCi0gS3VyYW5naSB3YWt0dSBwZW5naXJpbWFuIGRlbmdhbiBtZW5jYXJpIGFsdGVybmF0aWYgcGVuZ2lyaW1hbiB5YW5nIGxlYmloIGNlcGF0IGF0YXUgZWZpc2llbiwgbWlzYWxueWEgbWVuZ2d1bmFrYW4gdHJhbnNwb3J0YXNpIGRhcmF0IHlhbmcgbGViaWggY2VwYXQgdW50dWsgcGVuZ2lyaW1hbiBqYXJhayBkZWthdCBkYW4gdHJhbnNwb3J0YXNpIHVkYXJhIHVudHVrIHBlbmdpcmltYW4gamFyYWsgamF1aC4NCi0gUGVydGltYmFuZ2thbiBwZW5naXJpbWFuIGxlYmloIGF3YWw6IERlbmdhbiBtZW1wZXJ0aW1iYW5na2FuIHByb3NlcyBkaXN0cmlidXNpIHlhbmcgbGViaWggYXdhbCwgcGVuZ2lyaW1hbiB5YW5nIGxlYmloIGNlcGF0IGJpc2EgbGViaWggZWZpc2llbi4gSW5pIGFrYW4gbWVuZ3VyYW5naSBrZW11bmdraW5hbiBrZXRlcmxhbWJhdGFuIGRhbiBtZW5pbmdrYXRrYW4gcGVuZ2Vsb2xhYW4gd2FrdHUuDQoNCjUuIFBlbmdndW5hYW4gVGVrbm9sb2dpIGRhbiBEYXRhDQoNCi0gSW1wbGVtZW50YXNpIElvVCBkYW4gZGF0YSByZWFsLXRpbWU6IERlbmdhbiBtZW1hbmZhYXRrYW4gdGVrbm9sb2dpIEludGVybmV0IG9mIFRoaW5ncyAoSW9UKSBwYWRhIGtlbmRhcmFhbiBwZW5naXJpbWFuIGRhbiBtZW1hbnRhdSBkYXRhIHBlbmdpcmltYW4gc2VjYXJhIHJlYWwtdGltZSwgZGFwYXQgZGlpZGVudGlmaWthc2kgZGFuIGRpYXRhc2kgaGFtYmF0YW4taGFtYmF0YW4geWFuZyB0ZXJqYWRpIHNlbGFtYSBwZW5naXJpbWFuLg0KLSBBbmFsaXNpcyBkYXRhIHVudHVrIHBvbGEgcGVuZ2lyaW1hbjogRGVuZ2FuIG1lbmdhbmFsaXNpcyBkYXRhIHBlbmdpcmltYW4sIHBlcnVzYWhhYW4gYmlzYSBtZW5nZXRhaHVpIHBvbGEgd2FrdHUgcGVuZ2lyaW1hbiB5YW5nIGxlYmloIGxhbWJhdCBkYW4gbGViaWggbWFoYWwsIHNlcnRhIG1lbmdpZGVudGlmaWthc2kgZmFrdG9yIHlhbmcgbWVtcGVyYnVydWsgZWZpc2llbnNpLg0KDQojIyMjIDIuMi4yLjIgVGluZGFrYW4gTGFuZ2thaCBCZXJpa3V0bnlhDQotIEF1ZGl0IFBlbmdpcmltYW46IExha3VrYW4gYXVkaXQgc2VjYXJhIGJlcmthbGEgdGVyaGFkYXAgYmlheWEgZGFuIHdha3R1IHBlbmdpcmltYW4gZGkgd2lsYXlhaCBUZW5nYWguDQotIFBlbGF0aWhhbiBQZW5nZW11ZGkgZGFuIFBla2VyamE6IFBlbGF0aWhhbiB1bnR1ayBwZW5nZW11ZGkgZGFuIHBla2VyamEgbG9naXN0aWsgdW50dWsgbWVtYWtzaW1hbGthbiBlZmlzaWVuc2kgZGFsYW0gcGVtdWF0YW4gYmFyYW5nIGRhbiBwZW5nZ3VuYWFuIGphbHVyIHRyYW5zcG9ydGFzaSB5YW5nIG9wdGltYWwuDQoNCiMjIyMgMi4yLjIuMyBIYXJhcGFuDQpEZW5nYW4gbWVuZXJhcGthbiBsYW5na2FoLWxhbmdrYWggaW5pLCBkaWhhcmFwa2FuIGJpYXlhIHBlciB1bml0IGRpIHdpbGF5YWggVGVuZ2FoIGRhcGF0IGRpdHVydW5rYW4sIHNlcnRhIHdha3R1IHBlbmdpcmltYW4gZGFwYXQgbGViaWggc2luZ2thdCwgc2VoaW5nZ2EgbWVuaW5na2F0a2FuIGVmaXNpZW5zaSBrZXNlbHVydWhhbi4NCg0KIyBSZWZlcmVuc2kNCmh0dHBzOi8vYm9va2Rvd24ub3JnL2RzY2llbmNlbGFicy9zdGF0aXN0aWthX2Rhc2FyL19ib29rL1VrdXJhbl9QZW55ZWJhcmFuX0RhdGEuaHRtbA==