
Deskripsi

Banyak perusahaan pakaian e-niaga mengumpulkan peringkat dan ulasan yang diberikan pelanggan mereka untuk produk. Dalam Analisis ini, saya akan menunjukkan bagaimana perusahaan dapat dengan cepat dan mudah menjelajahi informasi ini dan menemukan wawasan untuk meningkatkan bisnisnya.
Dataset ini mencakup 23486 baris dan 10 variabel fitur. Setiap baris sesuai dengan ulasan pelanggan, dan termasuk variabel :
Cloting ID : Variablel Integer Categorical yang mengacu pada bagian tertentu yang sedang di tinjau.
Age : Variabel bilangan bulat positif dari usia pengulas
Title : Variabel string untuk judul ulasan.
Review Text : Variabel string untuk isi ulasan.
Rating : Variabel interger Ordinal positif untuk skor produk yang diberikan oleh pelanggan dari 1 Terburuk, hingga 5 Terbaik.
Recommended IND : Variabel biner yang menyatakan di mana pelanggan merekomendasikan produk dimana 1 direkomendasikan, sedangkan 0 tidak direkomendasikan.
Positive Feedback Count : Bilangan bulat positif yang mendokumentasikan jumlah pelanggan lain yang menganggap ulasan ini positif.
Division Name : Nama kategori dari divisi tingkat tinggi produk.
Departement Name : Nama kategori dari nama departemen produk.
Class Name : Nama kategori dadri nama kelas produk.
Data Set

colSums(is.na(data))
X Clothing.ID Age
0 0 0
Title Review.Text Rating
3810 845 0
Recommended.IND Positive.Feedback.Count Division.Name
0 0 14
Department.Name Class.Name
14 14
Disi saya punya : 3810 NA di judul, 845 di Review.Text, dan 14 NA di Division/Departement/Class.Name. Biasanya memiliki banyak nilai NA dalam data ulasan, jadi saya akan mengabaikanya.
summary(data)
X Clothing.ID Age Title Review.Text
Min. : 0 Min. : 0.0 Min. :18.0 Length:23486 Length:23486
1st Qu.: 5871 1st Qu.: 861.0 1st Qu.:34.0 Class :character Class :character
Median :11742 Median : 936.0 Median :41.0 Mode :character Mode :character
Mean :11742 Mean : 918.1 Mean :43.2
3rd Qu.:17614 3rd Qu.:1078.0 3rd Qu.:52.0
Max. :23485 Max. :1205.0 Max. :99.0
Rating Recommended.IND Positive.Feedback.Count Division.Name
Min. :1.000 Min. :0.0000 Min. : 0.000 Length:23486
1st Qu.:4.000 1st Qu.:1.0000 1st Qu.: 0.000 Class :character
Median :5.000 Median :1.0000 Median : 1.000 Mode :character
Mean :4.196 Mean :0.8224 Mean : 2.536
3rd Qu.:5.000 3rd Qu.:1.0000 3rd Qu.: 3.000
Max. :5.000 Max. :1.0000 Max. :122.000
Department.Name Class.Name
Length:23486 Length:23486
Class :character Class :character
Mode :character Mode :character
Dari Summary, saya mendapat informasi berikut : Clothing.ID - 1205 Potong pakaian Usia - Min 18, Max 99, Median Rating - Min 1, Max 5, Mean 4.2 (dibulatkan) - Keseluruhan toko sangat bagus Postitive.Feddback.Count - Hitung - Mean - 2.5, Max 122 - akan menarik untuk melihat ulasana yang berdampak itu nanti.
Visualisasi

Mari visualisasikan kolom Rating untuk lebih memahami pengalaman pelanggan di toko pakain wanita.

55, 91 % pelanggan menyukai toko dan memberi peringkat 5 dan 21,62 % memiliki peringkat 4, Hampir 80 % total - Pelanggan setia atau puas. Bisnis ini juga memiliki beberapa pelanggan yang tidak puas dan mencapati tingkat ke 3 atau lebih rendah.
Data Analysis

Dalam analisis ini, saya akan menemukan alasan kepuasan pelanggan yang buruk dan apa yang dapat dilakukan bisnis untuk memperbaikinya.
Data Analysis Exsplorasi

Saya akan mengiris dan memotong data dan menghitung peringkat rata-rata untuk group ini untuk menemukan produk atau layanan yang tidak memuaskan pelanggan.
Analysis Devision. Name

Peringkat di antara nama-nama Divisi sangat mirip sekitar 4.2.
Analysis Departemen.Name

Pertama saya menemukan bahwa Trend Departement. Name memiliki perinkat yang lebih rendah di bandingkan yang lain.
Clothing Trend

Kemudian saya medapatkan daftar 15 item di (Clothing.ID) yang di nilai lebih rendah dari 4. Toko pakaian wanita harus melihat item ini dan memperbaikinya.
Class.Name

Disini saya melihat kembali bahwa kategori Trend memiliki Rating terendah .
Produk 3 teratas dengan peringkat tertinggi adalah Jeans, Layering, Jackets.
Clothing.ID Rating

Disini saya memiliki 4 item untuk rekomendasikan di tingkatkan Rating dengan ID Clothing : 1087, 1082, 868, 865.
Age

Sepertinya toko itu memiliki pelanggan dari berabagai usia. Saya juga meliahat disini bahwa sejumlah besar ulasan datang dari pelanggan berusia 28 hingga 48 tahun. ini mungkin adalah target audiens toko ini.
Recomended.IND

Pelanggan yang akan merekomendasikan memberikan nilai rata-rata 4.6, Mereka yang tidak akan merekomendasikan - 2.3.
Meskipun saya memiliki lebih banyak klien yang akan merekomendasikan produk perusahaan, saya masih perlu berkerja untuk meningkatkan pengalaman pelanggan bagi mereka yang tidak merekomendasikannya.
TEXT ANALYSIS

Mari telusuri ulasan pelangan yang tidak akan merekomendasikan produk perusahaan.
negative_words_10 <- negative_words %>%
arrange(desc(n)) %>%
top_n(10)
Selecting by n
Dalam anlysis teks ini, saya akan mengguankan frekuensi kata untuk mengindentifkasi masalah apapun dengan produk perusahaan. Teknik sederhana namun sangat ampuh ini dapat memberikan banyak wawasan dan ide untuk perbaikan atau eksploraasi lebih lanjut.
Berikut ini adalaah 10 kata paling sering dari ulasan :

Di sini saya dapat memperhatikan beberapa hal :
Dalam Ulasan Negatif mereka, Klien kebayakan berbicara tentang gaun dan atasan
Pelanggan juga membicarakan masalah kecocokan dan ukuran. Perushaan dapat melihat dari dekat ukuran pakaian mereka dan mungkin menanmbahkan lebih banyak informasi tentangnya di situs web.
Pelanggan menyebutkan kain dan bahan yang harus dievaluasi dan di tingkatkan jika memungkinkan.
Pengembalian - Apakah mudah untuk mengembalikan produk ? Apakah perusahaan memiliki inforamasi yang jelas tentang proses ini di situs web mereka ?
Warna terkadang pakaian pada gambar dapat memiliki warna yang berbeda dari warna aslinya. Perusahaan harus mengeksplorasi masalah ini lebih lanjut dan memastikan bahwa mereka menampilkan warna dengan benar. Kualitas gambar sangat penting bagi pengecer pakian online.
Positve.Feedback.Count

Hal terkahir yang akan saya jelajahi adalah kolom Positve.Feedback.Count.
Disini dapat dilihat 2 ulasan positif dan 1 negatif. Fakta bahwa lebih dari 100 orang menganggap ulasan bermanfaat dapat menunjukkan bahwa ketiga produk ini populer.
Perusahan harus menggunakan informasi ini untuk meningkatkan produk (dalam hal ini proudk dengan ID 986) Karena akan meningkatkan pendapatan.
Kesimpulan

Di akhir analysis ini, saya akan menyoroti beberapa wawasan yang akan menarik bagi bisnis yaitu :
55.91% pelanggan menyukai toko dan memberi peringkat 5 dan 21.62% memiliki peringkat 4, hampir 80% persen total - pelanggan setia atau puas.
Trend Departement. Name memiliki peringkat yang lebih rendah dibadingkan yang lain. Di atas ada daftar 15 item Trend (Clothing. ID) yang dinilai lebih rendah dari 4. Toko pakaian wanita harus melihat item ini dan memperbaikinya.
Top-3 Produk dengan rating tertinggi adalah Jeans, Layering, Jackets. Perusahaan dapat mengguankan produk ini dalam kampanye pemasaran online atau email sebagai penjualan terbaik untuk menarik perhatian pelanggan.
4 item lagi untuk ditingkatkan dengan ID Clothing : 1087, 1082, 868, 865.
Sejumlah besar ulasana datang dari pelanggan berusia 28 tahun hinigga 48 tahun. Ini mungkin adalah target audiens toko ini. Jadi bisnis dapat fokus pada kelempok usia ini dalam periklanan online karena pelanggan ini tampaknya lebih tertarik pada produk perusahaan. Oleh karena itu tingkat konversi kampanye pemasaran itu mungkin lebih tinggi.
Dalam ulasan negatif, Klien kebayakan beribicara tentang gaun dan atasan. Perusahaan harus memeriksa mengapa mereka memiliki begitu banyak umpan balik negatif tentang produk ini. Terkadang itu hanya berarti bahwa produk ini adalah yang paling populer, makanya banyak review positif dan negatifnya.
Pelanggan juga membicarakan masalah kecocokan dan ukuran perusahaan harus memperhatikan ukuran pakian mereka dan mungkin menambahka lebih banyak informasi tentangnya di situs web.
Dalam ulasan negatif, pelanggan menyebutkan kain dan bahan yang harus dievaluasi dan ditingkatkan jika memungkinkan.
pengambalian - Apakah mudah untuk mengembalikan produk ? Apakah perusahaan memiliki informasi yang jelas tentang proses ini di situs web mereka ?
Warna - terkadang pakaian pada gambar dapat memiliki warna yang berbeda dari warna aslinya. Perusahaan harus mengeksplorasi masalah ini lebih lanjut dan memastikan bahwa mereka menampilkn warna dengan benar. Kualitas Gambar sangat penting bagi pengecer pakaian online.
LS0tDQp0aXRsZTogIkFOQUxZU0lTIFJFVklFV1MgUkFUSU5HIFBFTEFOR0dBTiINCmF1dGhvcjogIlxVMDAwMUY1RTMgSmFtYWxsdWRpbiINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHllcw0KICBodG1sX2RvY3VtZW50Og0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdG9jOiB5ZXMNCiAgICBmaWdfd2lkdGg6IDcNCiAgICBmaWdfaGVpZ2h0OiA0LjUNCiAgICB0aGVtZTogcmVhZGFibGUNCiAgICBoaWdobGlnaHQ6IHRhbmdvDQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQotLS0NCg0KDQohW10ocmF0aW5nLmdpZikNCg0KDQojIERlc2tyaXBzaSANCg0KIVtdKGdpcGh5LmdpZikNCg0KQmFueWFrIHBlcnVzYWhhYW4gcGFrYWlhbiBlLW5pYWdhIG1lbmd1bXB1bGthbiBwZXJpbmdrYXQgZGFuIHVsYXNhbiB5YW5nIGRpYmVyaWthbiBwZWxhbmdnYW4gbWVyZWthIHVudHVrIHByb2R1ay4gRGFsYW0gQW5hbGlzaXMgaW5pLCBzYXlhIGFrYW4gbWVudW5qdWtrYW4gYmFnYWltYW5hIHBlcnVzYWhhYW4gZGFwYXQgZGVuZ2FuIGNlcGF0IGRhbiBtdWRhaCBtZW5qZWxhamFoaSBpbmZvcm1hc2kgaW5pIGRhbiBtZW5lbXVrYW4gd2F3YXNhbiB1bnR1ayBtZW5pbmdrYXRrYW4gYmlzbmlzbnlhLg0KIA0KRGF0YXNldCBpbmkgbWVuY2FrdXAgMjM0ODYgYmFyaXMgZGFuIDEwIHZhcmlhYmVsIGZpdHVyLiBTZXRpYXAgYmFyaXMgc2VzdWFpIGRlbmdhbiB1bGFzYW4gcGVsYW5nZ2FuLCBkYW4gdGVybWFzdWsgdmFyaWFiZWwgOiANCg0KMS4gQ2xvdGluZyBJRCA6IFZhcmlhYmxlbCBJbnRlZ2VyIENhdGVnb3JpY2FsIHlhbmcgbWVuZ2FjdSBwYWRhIGJhZ2lhbiB0ZXJ0ZW50dSB5YW5nIHNlZGFuZyBkaSB0aW5qYXUuDQoNCg0KMi4gQWdlIDogVmFyaWFiZWwgYmlsYW5nYW4gYnVsYXQgcG9zaXRpZiBkYXJpIHVzaWEgcGVuZ3VsYXMNCg0KDQozLiBUaXRsZSA6IFZhcmlhYmVsIHN0cmluZyB1bnR1ayBqdWR1bCB1bGFzYW4uIA0KDQoNCjQuIFJldmlldyBUZXh0IDogVmFyaWFiZWwgc3RyaW5nIHVudHVrIGlzaSB1bGFzYW4uDQoNCg0KNS4gUmF0aW5nIDogVmFyaWFiZWwgaW50ZXJnZXIgT3JkaW5hbCBwb3NpdGlmIHVudHVrIHNrb3IgcHJvZHVrIHlhbmcgZGliZXJpa2FuIG9sZWggcGVsYW5nZ2FuIGRhcmkgMSBUZXJidXJ1aywgaGluZ2dhIDUgVGVyYmFpay4NCg0KDQo2LiBSZWNvbW1lbmRlZCBJTkQgOiBWYXJpYWJlbCBiaW5lciB5YW5nIG1lbnlhdGFrYW4gZGkgbWFuYSBwZWxhbmdnYW4gbWVyZWtvbWVuZGFzaWthbiBwcm9kdWsgZGltYW5hIDEgZGlyZWtvbWVuZGFzaWthbiwgc2VkYW5na2FuIDAgdGlkYWsgZGlyZWtvbWVuZGFzaWthbi4gDQoNCg0KNy4gUG9zaXRpdmUgRmVlZGJhY2sgQ291bnQgOiBCaWxhbmdhbiBidWxhdCBwb3NpdGlmIHlhbmcgbWVuZG9rdW1lbnRhc2lrYW4ganVtbGFoIHBlbGFuZ2dhbiBsYWluIHlhbmcgbWVuZ2FuZ2dhcCB1bGFzYW4gaW5pIHBvc2l0aWYuDQoNCg0KOC4gRGl2aXNpb24gTmFtZSA6IE5hbWEga2F0ZWdvcmkgZGFyaSBkaXZpc2kgdGluZ2thdCB0aW5nZ2kgcHJvZHVrLg0KDQoNCjkuIERlcGFydGVtZW50IE5hbWUgOiBOYW1hIGthdGVnb3JpIGRhcmkgbmFtYSBkZXBhcnRlbWVuIHByb2R1ay4NCg0KDQoxMC4gQ2xhc3MgTmFtZSA6IE5hbWEga2F0ZWdvcmkgZGFkcmkgbmFtYSBrZWxhcyBwcm9kdWsuDQoNCg0KIyBEYXRhIFNldCANCg0KIVtdKERBVEEgU0VULmdpZikNCg0KDQpgYGB7cn0NCg0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KHRpZHl0ZXh0KQ0KbGlicmFyeShTbm93YmFsbEMpDQoNCmRhdGEgPC0gcmVhZC5jc3YoIldvbWVucyBDbG90aGluZyBFLUNvbW1lcmNlIFJldmlld3MuY3N2IiwgbmEuc3RyaW5ncz1jKCcnLCAnTkEnKSkNCg0KI2NoZWNrIGFwYWthaCBhZGEgbmlsYWkgbmENCg0KY29sU3Vtcyhpcy5uYShkYXRhKSkNCg0KYGBgDQoNCkRpc2kgc2F5YSBwdW55YSA6IDM4MTAgTkEgZGkganVkdWwsIDg0NSBkaSBSZXZpZXcuVGV4dCwgZGFuIDE0IE5BIGRpIERpdmlzaW9uL0RlcGFydGVtZW50L0NsYXNzLk5hbWUuIA0KQmlhc2FueWEgbWVtaWxpa2kgYmFueWFrIG5pbGFpIE5BIGRhbGFtIGRhdGEgdWxhc2FuLCBqYWRpIHNheWEgYWthbiBtZW5nYWJhaWthbnlhLg0KDQoNCmBgYHtyfQ0Kc3VtbWFyeShkYXRhKQ0KYGBgDQoNCg0KRGFyaSBTdW1tYXJ5LCBzYXlhIG1lbmRhcGF0IGluZm9ybWFzaSBiZXJpa3V0IDogQ2xvdGhpbmcuSUQgLSAxMjA1IFBvdG9uZyBwYWthaWFuIFVzaWEgLSBNaW4gMTgsIE1heCA5OSwgTWVkaWFuIFJhdGluZyAtIE1pbiAxLCBNYXggNSwgTWVhbiA0LjIgKGRpYnVsYXRrYW4pIC0gS2VzZWx1cnVoYW4gdG9rbyBzYW5nYXQgYmFndXMgUG9zdGl0aXZlLkZlZGRiYWNrLkNvdW50IC0gSGl0dW5nIC0gTWVhbiAtIDIuNSwgTWF4IDEyMiAtIGFrYW4gbWVuYXJpayB1bnR1ayBtZWxpaGF0IHVsYXNhbmEgeWFuZyBiZXJkYW1wYWsgaXR1IG5hbnRpLg0KDQoNCiMgVmlzdWFsaXNhc2kNCg0KDQohW10oVklTVUFMSVNBU0kuZ2lmKQ0KDQoNCk1hcmkgdmlzdWFsaXNhc2lrYW4ga29sb20gUmF0aW5nIHVudHVrIGxlYmloIG1lbWFoYW1pIHBlbmdhbGFtYW4gcGVsYW5nZ2FuIGRpIHRva28gcGFrYWluIHdhbml0YS4NCg0KYGBge3J9DQoNCnBpZV9jaGFydF9yYXRpbmcgPC0gZGF0YSAlPiUNCiAgZ3JvdXBfYnkoUmF0aW5nKSAlPiUNCiAgc3VtbWFyaXplKFRvdGFsQ291bnQgPSBuKCkpJT4lDQogIG11dGF0ZShQcm9wID0gcm91bmQoVG90YWxDb3VudC9zdW0oVG90YWxDb3VudCkqMTAwLCBkaWdpdHMgPSAyKSkNCg0KIyB0YW1iYWhrYW4gcG9zaXNpIGxhYmVsDQoNCnBpZV9jaGFydF9yYXRpbmcgPC0gcGllX2NoYXJ0X3JhdGluZyAlPiUNCiAgYXJyYW5nZShkZXNjKFJhdGluZykpICU+JQ0KICBtdXRhdGUobGFiLnlwb3MgPSBjdW1zdW0oUHJvcCkgLSAwLjUqUHJvcCkNCg0KIyBwaWxpaCB3YXJuYSBwZWxhbmdnYW4NCg0KbXljb2xzIDwtIGMoIiM1NURERTAiLCAiIzMzNjU4QSIsICIjMkY0ODU4IiwgIiNGNkFFMkQiLCAiI0YyNjQxOSIpDQoNCg0KI3Zpc3VhbGlzYXNpDQoNCm9wdGlvbnMocmVwci5wbG90LndpZHRoID0gMTYsIHJlcHIucGxvdC5oZWlnaHQgPSA3KQ0KZ2dwbG90KHBpZV9jaGFydF9yYXRpbmcsIGFlcyh4ID0gIiIsIHkgPSBQcm9wLCBmaWxsID0gZmFjdG9yKFJhdGluZykpKSArDQogIGdlb21fYmFyKHdpZHRoID0gMSwgc3RhdCA9ICJpZGVudGl0eSIsIGNvbG9yID0gIndoaXRlIikgKw0KICBjb29yZF9wb2xhcigieSIsIHN0YXJ0ID0gMCkrDQogIGdlb21fdGV4dChhZXMoeSA9IGxhYi55cG9zLCBsYWJlbCA9IFByb3ApLCBjb2xvciA9ICJ3aGl0ZSIsIHNpemU9NykrDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IG15Y29scykgKw0KICB0aGVtZV92b2lkKCkgKw0KICBsYWJzKHRpdGxlPSJQZXJpbmdrYXQgUGVsYW5nZ2FuIGRhcmkgMSBoaW5nZ2EgNSIpICsNCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIsIGxlZ2VuZC50ZXh0PWVsZW1lbnRfdGV4dChzaXplPTEwKSwgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSkNCmBgYA0KDQoNCjU1LCA5MSAlIHBlbGFuZ2dhbiBtZW55dWthaSB0b2tvIGRhbiBtZW1iZXJpIHBlcmluZ2thdCA1IGRhbiAyMSw2MiAlIG1lbWlsaWtpIHBlcmluZ2thdCA0LCBIYW1waXIgODAgJSB0b3RhbCAtIFBlbGFuZ2dhbiBzZXRpYSBhdGF1IHB1YXMuIA0KQmlzbmlzIGluaSBqdWdhIG1lbWlsaWtpIGJlYmVyYXBhIHBlbGFuZ2dhbiB5YW5nIHRpZGFrIHB1YXMgZGFuIG1lbmNhcGF0aSB0aW5na2F0IGtlIDMgYXRhdSBsZWJpaCByZW5kYWguDQoNCg0KDQojIERhdGEgQW5hbHlzaXMNCg0KDQohW10oREFUQSBBTkFMWVNJUy5naWYpDQoNCg0KRGFsYW0gYW5hbGlzaXMgaW5pLCBzYXlhIGFrYW4gbWVuZW11a2FuIGFsYXNhbiBrZXB1YXNhbiBwZWxhbmdnYW4geWFuZyBidXJ1ayBkYW4gYXBhIHlhbmcgZGFwYXQgZGlsYWt1a2FuIGJpc25pcyB1bnR1ayBtZW1wZXJiYWlraW55YS4NCg0KDQojIyBEYXRhIEFuYWx5c2lzIEV4c3Bsb3Jhc2kNCg0KIVtdKGdpcGh5LmdpZikNCg0KU2F5YSBha2FuIG1lbmdpcmlzIGRhbiBtZW1vdG9uZyBkYXRhIGRhbiBtZW5naGl0dW5nIHBlcmluZ2thdCByYXRhLXJhdGEgdW50dWsgZ3JvdXAgaW5pIHVudHVrIG1lbmVtdWthbiBwcm9kdWsgYXRhdSBsYXlhbmFuIHlhbmcgdGlkYWsgbWVtdWFza2FuIHBlbGFuZ2dhbi4NCg0KIyMjIEFuYWx5c2lzIERldmlzaW9uLiBOYW1lDQoNCg0KIVtdKERFVklTSSBOQU1FLmdpZikNCg0KYGBge3J9DQoNCkRpdmlzaW9uTiA8LSBkYXRhICU+JQ0KICBncm91cF9ieShEaXZpc2lvbi5OYW1lKSAlPiUNCiAgZHJvcF9uYSgpJT4lDQogIHN1bW1hcml6ZShBdmVyYWdlX1JhdGluZyA9IG1lYW4oUmF0aW5nKSwgVG90YWxDb3VudD1uKCkpDQoNCmhlYWQoRGl2aXNpb25OKQ0KYGBgDQoNClBlcmluZ2thdCBkaSBhbnRhcmEgbmFtYS1uYW1hIERpdmlzaSBzYW5nYXQgbWlyaXAgc2VraXRhciA0LjIuDQoNCg0KIyMjIEFuYWx5c2lzIERlcGFydGVtZW4uTmFtZQ0KDQohW10oREVQQVJURU1FTi5naWYpDQoNCmBgYHtyfQ0KDQpEZXBhcnRtZW50TiA8LSBkYXRhICU+JQ0KICBncm91cF9ieShEZXBhcnRtZW50Lk5hbWUpICU+JQ0KICBkcm9wX25hKCkgJT4lDQogIHN1bW1hcml6ZShBdmVyYWdlX1JhdGluZyA9IG1lYW4oUmF0aW5nKSwgVG90YWxDb3VudD1uKCkpDQoNCkRlcGFydG1lbnRODQpgYGANCg0KUGVydGFtYSBzYXlhIG1lbmVtdWthbiBiYWh3YSAqKlRyZW5kKiogRGVwYXJ0ZW1lbnQuIE5hbWUgbWVtaWxpa2kgcGVyaW5rYXQgeWFuZyBsZWJpaCByZW5kYWggZGkgYmFuZGluZ2thbiB5YW5nIGxhaW4uDQoNCg0KIyMjIENsb3RoaW5nIFRyZW5kDQoNCiFbXShDTE9USElORyBURVJFTkQuZ2lmKQ0KDQpgYGB7cn0NCkNsb3RoaW5nVHJlbmQgPC0gZGF0YSAlPiUNCiAgZmlsdGVyKERlcGFydG1lbnQuTmFtZT09IlRyZW5kIikgJT4lDQogIGdyb3VwX2J5KENsb3RoaW5nLklEKSAlPiUNCiAgc3VtbWFyaXplKEF2ZXJhZ2VfUmF0aW5nID0gbWVhbihSYXRpbmcpLCBUb3RhbENvdW50PW4oKSkgJT4lDQogIGFycmFuZ2UoQXZlcmFnZV9SYXRpbmcpICU+JQ0KICBoZWFkKDE1KQ0KDQpDbG90aGluZ1RyZW5kDQpgYGANCg0KDQpLZW11ZGlhbiBzYXlhIG1lZGFwYXRrYW4gZGFmdGFyIDE1IGl0ZW0gZGkgKENsb3RoaW5nLklEKSB5YW5nIGRpIG5pbGFpIGxlYmloIHJlbmRhaCBkYXJpIDQuIFRva28gcGFrYWlhbiB3YW5pdGEgaGFydXMgbWVsaWhhdCBpdGVtIGluaSBkYW4gbWVtcGVyYmFpa2lueWEuDQoNCg0KIyMjIENsYXNzLk5hbWUgDQoNCiFbXShDTEFTUyBOQU1FLmdpZikNCg0KYGBge3J9DQoNCkNsYXNzTiA8LSBkYXRhICU+JQ0KICBncm91cF9ieShDbGFzcy5OYW1lKSAlPiUNCiAgZHJvcF9uYSgpICU+JQ0KICBzdW1tYXJpemUoQXZlcmFnZV9SYXRpbmcgPSBtZWFuKFJhdGluZyksIFRvdGFsQ291bnQ9bigpKSAlPiUNCiAgYXJyYW5nZShkZXNjKEF2ZXJhZ2VfUmF0aW5nKSkNCg0KQ2xhc3NODQpgYGANCg0KDQpEaXNpbmkgc2F5YSBtZWxpaGF0IGtlbWJhbGkgYmFod2Ega2F0ZWdvcmkgVHJlbmQgbWVtaWxpa2kgUmF0aW5nIHRlcmVuZGFoIC4gDQoNClByb2R1ayAzIHRlcmF0YXMgZGVuZ2FuIHBlcmluZ2thdCB0ZXJ0aW5nZ2kgYWRhbGFoIEplYW5zLCBMYXllcmluZywgSmFja2V0cy4NCg0KDQojIyMgQ2xvdGhpbmcuSUQgUmF0aW5nIA0KDQoNCiFbXShDTE9USElORyBJRCBSQVRJTkcuZ2lmKQ0KDQpgYGB7cn0NCg0KQ2xvdGhpbmdJRCA8LSBkYXRhICU+JQ0KICBncm91cF9ieShDbG90aGluZy5JRCkgJT4lDQogIGRyb3BfbmEoKSAlPiUNCiAgc3VtbWFyaXplKEF2ZXJhZ2VfUmF0aW5nID0gbWVhbihSYXRpbmcpLCBUb3RhbENvdW50PW4oKSkNCg0KIyB0ZW11a2FuIHByb2R1ayBkZW5nYW4gYmFueWFrIHVsYXNhbiAoPjEwMCkgZGFuIGxlYmloIHJlbmRhaCBkYXJpIDQgcGVyaW5na2F0DQoNCkNMb3RoaW5nSURMb3cgPC0gQ2xvdGhpbmdJRCAlPiUNCiAgZmlsdGVyKFRvdGFsQ291bnQgPj0xMDAgJiBBdmVyYWdlX1JhdGluZyA8NCkgJT4lDQogIGFycmFuZ2UoQXZlcmFnZV9SYXRpbmcpDQoNCkNMb3RoaW5nSURMb3cNCmBgYA0KDQogDQpEaXNpbmkgc2F5YSBtZW1pbGlraSA0IGl0ZW0gdW50dWsgcmVrb21lbmRhc2lrYW4gZGkgdGluZ2thdGthbiAqKlJhdGluZyoqIGRlbmdhbiBJRCBDbG90aGluZyA6IDEwODcsIDEwODIsIDg2OCwgODY1Lg0KIA0KIA0KIyMjIEFnZQ0KDQohW10oYWdlLmdpZikNCg0KDQpgYGB7cn0NCiMgbWVtYnVhdCBrZWxvbXBvayB1bXVyIGRhbiBjYXJpIHBlcmluZ2thdCBkaSBkYWxhbW55YQ0KDQpBZ2VHcm91cCA8LSBkYXRhICU+JQ0KICBncm91cF9ieShBZ2VHcm91cD1jdXQoQWdlLCBicmVha3M9c2VxKDE4LCAxMDAsIGJ5PTEwKSkpICU+JQ0KICBkcm9wX25hKCklPiUNCiAgc3VtbWFyaXplKEF2ZXJhZ2VfUmF0aW5nID0gbWVhbihSYXRpbmcpLCBUb3RhbENvdW50PW4oKSkNCg0KQWdlR3JvdXANCmBgYA0KDQoNClNlcGVydGlueWEgdG9rbyBpdHUgbWVtaWxpa2kgcGVsYW5nZ2FuIGRhcmkgYmVyYWJhZ2FpIHVzaWEuIFNheWEganVnYSBtZWxpYWhhdCBkaXNpbmkgYmFod2Egc2VqdW1sYWggYmVzYXIgdWxhc2FuIGRhdGFuZyBkYXJpIHBlbGFuZ2dhbiBiZXJ1c2lhICAyOCBoaW5nZ2EgNDggdGFodW4uIGluaSBtdW5na2luIGFkYWxhaCB0YXJnZXQgYXVkaWVucyB0b2tvIGluaS4NCg0KDQojIyMgUmVjb21lbmRlZC5JTkQNCg0KIVtdKFJFQ09NTUVOREVEIElORC5naWYpDQoNCmBgYHtyfQ0KIyBhcGFrYWggYWthbiBtZXJla29tZW5kYXNpa2FuIHRva28gKHByb2R1aykgaW5pIGtlcGFkYSBvcmFuZyBsYWluIGF0YXUgdGlkYWsgPw0KDQpSZWNvbWVuZGVkIDwtIGRhdGEgJT4lDQogIGdyb3VwX2J5KFJlY29tbWVuZGVkLklORCkgJT4lDQogIHN1bW1hcml6ZShBdmVyYWdlX1JhdGluZyA9IG1lYW4oUmF0aW5nKSwgVG90YWxDb3VudD1uKCkpDQoNClJlY29tZW5kZWQNCmBgYA0KDQoNClBlbGFuZ2dhbiB5YW5nIGFrYW4gbWVyZWtvbWVuZGFzaWthbiBtZW1iZXJpa2FuIG5pbGFpIHJhdGEtcmF0YSA0LjYsIE1lcmVrYSB5YW5nIHRpZGFrIGFrYW4gbWVyZWtvbWVuZGFzaWthbiAtIDIuMy4NCg0KDQpNZXNraXB1biBzYXlhIG1lbWlsaWtpIGxlYmloIGJhbnlhayBrbGllbiB5YW5nIGFrYW4gbWVyZWtvbWVuZGFzaWthbiBwcm9kdWsgcGVydXNhaGFhbiwgc2F5YSBtYXNpaCBwZXJsdSBiZXJrZXJqYSB1bnR1ayBtZW5pbmdrYXRrYW4gcGVuZ2FsYW1hbiBwZWxhbmdnYW4gYmFnaSBtZXJla2EgeWFuZyB0aWRhayBtZXJla29tZW5kYXNpa2FubnlhLg0KDQoNCiMjIFRFWFQgQU5BTFlTSVMgDQoNCiFbXShURVhUIEFOQUxZU0lTLmdpZikNCg0KTWFyaSB0ZWx1c3VyaSB1bGFzYW4gcGVsYW5nYW4geWFuZyB0aWRhayBha2FuIG1lcmVrb21lbmRhc2lrYW4gcHJvZHVrIHBlcnVzYWhhYW4uDQoNCg0KYGBge3J9DQpUZXh0IDwtIGRhdGEgJT4lDQogIGZpbHRlcihSZWNvbW1lbmRlZC5JTkQ9PTApICU+JQ0KICBzdW1tYXJpemUoUmV2aWV3LlRleHQpJT4lDQogIGRyb3BfbmEoKQ0KDQojdG9rZW5pemF0aW9uDQoNCmNvbW1lbnRzIDwtIFRleHQgJT4lIA0KICB1bmdyb3VwKCkNCg0KDQoja2F0YSB0ZXJwaXNhaA0KDQpuZWdhdGl2ZV93b3JkcyA8LSBjb21tZW50cyAlPiUgdW5uZXN0X3Rva2Vucyh3b3JkLCBSZXZpZXcuVGV4dCkNCg0KIzI1NSAyNDgga2F0YQ0KDQojcmVtb3ZlIHN0b3Aga2F0YQ0KDQpuZWdhdGl2ZV93b3JkcyA8LSAgbmVnYXRpdmVfd29yZHMgJT4lIGFudGlfam9pbihzdG9wX3dvcmRzLCBieSA9IGMoJ3dvcmQnKSkNCm5lZ2F0aXZlX3dvcmRzICU+JSBjb3VudCh3b3JkLCBzb3J0ID0gVFJVRSkNCg0KIzgyIDcwNCBrYXRhIGtpcmkNCg0KYGBgDQoNCg0KDQoNCmBgYHtyfQ0KI3N0ZW1taW5nIC0gbWVuZ2lkZW50aWZpa2FzaSBrYXRhIGRhc2FyICsgMjAga2VhdGFzDQoNCm5lZ2F0aXZlX3dvcmRzIDwtIG5lZ2F0aXZlX3dvcmRzICU+JSANCiAgbXV0YXRlKHdvcmQgPSB3b3JkU3RlbSh3b3JkKSkgJT4lDQogIGNvdW50KHdvcmQpDQoNCm5lZ2F0aXZlX3dvcmRzXzEwIDwtIG5lZ2F0aXZlX3dvcmRzICU+JQ0KICBhcnJhbmdlKGRlc2MobikpICU+JQ0KICB0b3BfbigxMCkNCmBgYA0KDQoNCkRhbGFtIGFubHlzaXMgdGVrcyBpbmksIHNheWEgYWthbiBtZW5nZ3VhbmthbiBmcmVrdWVuc2kga2F0YSB1bnR1ayBtZW5naW5kZW50aWZrYXNpIG1hc2FsYWggYXBhcHVuIGRlbmdhbiBwcm9kdWsgcGVydXNhaGFhbi4gDQpUZWtuaWsgc2VkZXJoYW5hIG5hbXVuIHNhbmdhdCBhbXB1aCBpbmkgZGFwYXQgbWVtYmVyaWthbiBiYW55YWsgd2F3YXNhbiBkYW4gaWRlIHVudHVrIHBlcmJhaWthbiBhdGF1IGVrc3Bsb3JhYXNpIGxlYmloIGxhbmp1dC4NCg0KDQpCZXJpa3V0IGluaSBhZGFsYWFoIDEwIGthdGEgcGFsaW5nIHNlcmluZyBkYXJpIHVsYXNhbiA6DQoNCg0KYGBge3J9DQojIFBlc2FuIHBla2VyamFhbiBERVNDIHVudHVrIGJhZ2FpbiBCYXJjaGFydA0KDQpuZWdhdGl2ZV93b3Jkc18xMCR3b3JkIDwtIGZhY3RvcihuZWdhdGl2ZV93b3Jkc18xMCR3b3JkLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldmVscyA9IG5lZ2F0aXZlX3dvcmRzXzEwJHdvcmRbb3JkZXIoLW5lZ2F0aXZlX3dvcmRzXzEwJG4pXSkNCg0KZ2dwbG90KG5lZ2F0aXZlX3dvcmRzXzEwLCBhZXMoeD13b3JkLCB5PW4pKSArDQogIGdlb21fYmFyKHdpZHRoPTAuNywgc3RhdCA9ICJpZGVudGl0eSIsIGZpbGw9Im9yYW5nZSIpICsNCiAgbGFicyh0aXRsZT0iMTAgS2F0YSBOZWdhdGlmIFRlcmF0YXMgRGFyaSBQZWxhbmdnYW4gWWFuZyBUaWRhayBBa2FuIE1lcmVrb21lbmRhc2lrYW4iKSArICANCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksYXhpcy50ZXh0LnkgPSBlbGVtZW50X3RleHQoc2l6ZT0xMCksDQogICAgICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplPTEwKSkNCmBgYA0KDQoNCkRpIHNpbmkgc2F5YSBkYXBhdCBtZW1wZXJoYXRpa2FuIGJlYmVyYXBhIGhhbCA6IA0KDQoNCjEpIERhbGFtIFVsYXNhbiBOZWdhdGlmIG1lcmVrYSwgS2xpZW4ga2ViYXlha2FuIGJlcmJpY2FyYSB0ZW50YW5nIGdhdW4gZGFuIGF0YXNhbiANCg0KMikgUGVsYW5nZ2FuIGp1Z2EgbWVtYmljYXJha2FuIG1hc2FsYWgga2Vjb2Nva2FuIGRhbiB1a3VyYW4uDQpQZXJ1c2hhYW4gZGFwYXQgbWVsaWhhdCBkYXJpIGRla2F0IHVrdXJhbiBwYWthaWFuIG1lcmVrYSBkYW4gbXVuZ2tpbiBtZW5hbm1iYWhrYW4gbGViaWggYmFueWFrIGluZm9ybWFzaSB0ZW50YW5nbnlhIGRpIHNpdHVzIHdlYi4NCg0KMykgUGVsYW5nZ2FuIG1lbnllYnV0a2FuIGthaW4gZGFuIGJhaGFuIHlhbmcgaGFydXMgZGlldmFsdWFzaSBkYW4gZGkgdGluZ2thdGthbiBqaWthIG1lbXVuZ2tpbmthbi4NCg0KNCkgUGVuZ2VtYmFsaWFuIC0gQXBha2FoIG11ZGFoIHVudHVrIG1lbmdlbWJhbGlrYW4gcHJvZHVrID8gQXBha2FoIHBlcnVzYWhhYW4gbWVtaWxpa2kgaW5mb3JhbWFzaSB5YW5nIGplbGFzIHRlbnRhbmcgcHJvc2VzIGluaSBkaSBzaXR1cyB3ZWIgbWVyZWthID8gDQoNCjUpIFdhcm5hIHRlcmthZGFuZyBwYWthaWFuIHBhZGEgZ2FtYmFyIGRhcGF0IG1lbWlsaWtpIHdhcm5hIHlhbmcgYmVyYmVkYSBkYXJpIHdhcm5hIGFzbGlueWEuIA0KUGVydXNhaGFhbiBoYXJ1cyBtZW5nZWtzcGxvcmFzaSBtYXNhbGFoIGluaSBsZWJpaCBsYW5qdXQgZGFuIG1lbWFzdGlrYW4gYmFod2EgbWVyZWthIG1lbmFtcGlsa2FuIHdhcm5hIGRlbmdhbiBiZW5hci4gS3VhbGl0YXMgZ2FtYmFyIHNhbmdhdCBwZW50aW5nIGJhZ2kgcGVuZ2VjZXIgcGFraWFuIG9ubGluZS4NCg0KDQojIyBQb3NpdHZlLkZlZWRiYWNrLkNvdW50DQoNCg0KIVtdKEZFRURCRUNLLmdpZikNCg0KDQpIYWwgdGVya2FoaXIgeWFuZyBha2FuIHNheWEgamVsYWphaGkgYWRhbGFoIGtvbG9tIFBvc2l0dmUuRmVlZGJhY2suQ291bnQuDQoNCg0KYGBge3J9DQpGZWVkYmFja0NvdW50IDwtIGRhdGEgJT4lDQogIGZpbHRlcihQb3NpdGl2ZS5GZWVkYmFjay5Db3VudCA+PTEwMCkgJT4lDQogIHN1bW1hcml6ZShDbG90aGluZy5JRCwgUmV2aWV3LlRleHQpDQoNCkZlZWRiYWNrQ291bnQNCmBgYA0KDQoNCkRpc2luaSBkYXBhdCBkaWxpaGF0IDIgdWxhc2FuIHBvc2l0aWYgZGFuIDEgbmVnYXRpZi4gRmFrdGEgYmFod2EgbGViaWggZGFyaSAxMDAgb3JhbmcgbWVuZ2FuZ2dhcCB1bGFzYW4gYmVybWFuZmFhdCBkYXBhdCBtZW51bmp1a2thbiBiYWh3YSBrZXRpZ2EgcHJvZHVrIGluaSBwb3B1bGVyLg0KDQoNClBlcnVzYWhhbiBoYXJ1cyBtZW5nZ3VuYWthbiBpbmZvcm1hc2kgaW5pIHVudHVrIG1lbmluZ2thdGthbiBwcm9kdWsgKGRhbGFtIGhhbCBpbmkgcHJvdWRrIGRlbmdhbiBJRCA5ODYpIEthcmVuYSBha2FuIG1lbmluZ2thdGthbiBwZW5kYXBhdGFuLg0KDQoNCiMgS2VzaW1wdWxhbiANCg0KDQohW10oS0VTSU1QVUxBTi5naWYpDQoNCkRpIGFraGlyIGFuYWx5c2lzIGluaSwgc2F5YSBha2FuIG1lbnlvcm90aSBiZWJlcmFwYSB3YXdhc2FuIHlhbmcgYWthbiBtZW5hcmlrIGJhZ2kgYmlzbmlzIHlhaXR1IDogDQoNCg0KMSkgNTUuOTElIHBlbGFuZ2dhbiBtZW55dWthaSB0b2tvIGRhbiBtZW1iZXJpIHBlcmluZ2thdCA1IGRhbiAyMS42MiUgbWVtaWxpa2kgcGVyaW5na2F0IDQsIGhhbXBpciA4MCUgcGVyc2VuIHRvdGFsIC0gcGVsYW5nZ2FuIHNldGlhIGF0YXUgcHVhcy4NCg0KDQoyKSBUcmVuZCBEZXBhcnRlbWVudC4gTmFtZSBtZW1pbGlraSBwZXJpbmdrYXQgeWFuZyBsZWJpaCByZW5kYWggZGliYWRpbmdrYW4geWFuZyBsYWluLiBEaSBhdGFzIGFkYSBkYWZ0YXIgMTUgaXRlbSBUcmVuZCAoQ2xvdGhpbmcuIElEKSB5YW5nIGRpbmlsYWkgbGViaWggcmVuZGFoIGRhcmkgNC4gVG9rbyBwYWthaWFuIHdhbml0YSBoYXJ1cyBtZWxpaGF0IGl0ZW0gaW5pIGRhbiBtZW1wZXJiYWlraW55YS4NCg0KDQozKSBUb3AtMyBQcm9kdWsgZGVuZ2FuIHJhdGluZyB0ZXJ0aW5nZ2kgYWRhbGFoIEplYW5zLCBMYXllcmluZywgSmFja2V0cy4gDQpQZXJ1c2FoYWFuIGRhcGF0IG1lbmdndWFua2FuIHByb2R1ayBpbmkgZGFsYW0ga2FtcGFueWUgcGVtYXNhcmFuIG9ubGluZSBhdGF1IGVtYWlsIHNlYmFnYWkgcGVuanVhbGFuIHRlcmJhaWsgdW50dWsgbWVuYXJpayBwZXJoYXRpYW4gcGVsYW5nZ2FuLg0KDQoNCjQpIDQgaXRlbSBsYWdpIHVudHVrIGRpdGluZ2thdGthbiBkZW5nYW4gSUQgQ2xvdGhpbmcgOiAxMDg3LCAxMDgyLCA4NjgsIDg2NS4NCg0KDQo1KSBTZWp1bWxhaCBiZXNhciB1bGFzYW5hIGRhdGFuZyBkYXJpIHBlbGFuZ2dhbiBiZXJ1c2lhIDI4IHRhaHVuIGhpbmlnZ2EgNDggdGFodW4uIEluaSBtdW5na2luIGFkYWxhaCB0YXJnZXQgYXVkaWVucyB0b2tvIGluaS4gSmFkaSBiaXNuaXMgZGFwYXQgZm9rdXMgcGFkYSBrZWxlbXBvayB1c2lhIGluaSBkYWxhbSBwZXJpa2xhbmFuIG9ubGluZSBrYXJlbmEgcGVsYW5nZ2FuIGluaSB0YW1wYWtueWEgbGViaWggdGVydGFyaWsgcGFkYSBwcm9kdWsgcGVydXNhaGFhbi4gDQpPbGVoIGthcmVuYSBpdHUgdGluZ2thdCBrb252ZXJzaSBrYW1wYW55ZSBwZW1hc2FyYW4gaXR1IG11bmdraW4gbGViaWggdGluZ2dpLg0KDQoNCjYpIERhbGFtIHVsYXNhbiBuZWdhdGlmLCBLbGllbiBrZWJheWFrYW4gYmVyaWJpY2FyYSB0ZW50YW5nIGdhdW4gZGFuIGF0YXNhbi4gUGVydXNhaGFhbiBoYXJ1cyBtZW1lcmlrc2EgbWVuZ2FwYSBtZXJla2EgbWVtaWxpa2kgYmVnaXR1IGJhbnlhayB1bXBhbiBiYWxpayBuZWdhdGlmIHRlbnRhbmcgcHJvZHVrIGluaS4gDQpUZXJrYWRhbmcgaXR1IGhhbnlhIGJlcmFydGkgYmFod2EgcHJvZHVrIGluaSBhZGFsYWggeWFuZyBwYWxpbmcgcG9wdWxlciwgbWFrYW55YSBiYW55YWsgcmV2aWV3IHBvc2l0aWYgZGFuIG5lZ2F0aWZueWEuDQoNCg0KNykgUGVsYW5nZ2FuIGp1Z2EgbWVtYmljYXJha2FuIG1hc2FsYWgga2Vjb2Nva2FuIGRhbiB1a3VyYW4gcGVydXNhaGFhbiBoYXJ1cyBtZW1wZXJoYXRpa2FuIHVrdXJhbiBwYWtpYW4gbWVyZWthIGRhbiBtdW5na2luIG1lbmFtYmFoa2EgbGViaWggYmFueWFrIGluZm9ybWFzaSB0ZW50YW5nbnlhIGRpIHNpdHVzIHdlYi4NCg0KDQo4KSBEYWxhbSB1bGFzYW4gbmVnYXRpZiwgcGVsYW5nZ2FuIG1lbnllYnV0a2FuIGthaW4gZGFuIGJhaGFuIHlhbmcgaGFydXMgZGlldmFsdWFzaSBkYW4gZGl0aW5na2F0a2FuIGppa2EgbWVtdW5na2lua2FuLg0KDQoNCjkpIHBlbmdhbWJhbGlhbiAtIEFwYWthaCBtdWRhaCB1bnR1ayBtZW5nZW1iYWxpa2FuIHByb2R1ayA/IA0KQXBha2FoIHBlcnVzYWhhYW4gbWVtaWxpa2kgaW5mb3JtYXNpIHlhbmcgamVsYXMgdGVudGFuZyBwcm9zZXMgaW5pIGRpIHNpdHVzIHdlYiBtZXJla2EgPw0KDQoNCjEwKSBXYXJuYSAtIHRlcmthZGFuZyBwYWthaWFuIHBhZGEgZ2FtYmFyIGRhcGF0IG1lbWlsaWtpIHdhcm5hIHlhbmcgYmVyYmVkYSBkYXJpIHdhcm5hIGFzbGlueWEuIFBlcnVzYWhhYW4gaGFydXMgbWVuZ2Vrc3Bsb3Jhc2kgbWFzYWxhaCBpbmkgbGViaWggbGFuanV0IGRhbiBtZW1hc3Rpa2FuIGJhaHdhIG1lcmVrYSBtZW5hbXBpbGtuIHdhcm5hIGRlbmdhbiBiZW5hci4gS3VhbGl0YXMgR2FtYmFyIHNhbmdhdCBwZW50aW5nIGJhZ2kgcGVuZ2VjZXIgcGFrYWlhbiBvbmxpbmUu