Tugas Individu

Web Scraping: Mengambil Data dari Website Secara Otomatis

Foto Diri

Web Scraping: Mengambil Data dari Website Secara Otomatis (Menggunakan R dan Paket rvest)

Link Percobaan saya: https://ae34e25d5a3a4a3991996a3c98aa4d3f.app.posit.cloud/?view=source_window_wwgvmxwiyfud4


1. Pendahuluan

Berdasarkan video yang saya tonton, saya mempelajari bahwa pengikisan data menggunakan R dan paket rvest adalah proses yang efektif untuk mengambil informasi dari situs web. Dalam video tersebut, dijelaskan langkah-langkah mulai dari instalasi paket yang diperlukan, pengambilan data dari halaman web, hingga penyimpanan data dalam format yang dapat digunakan, seperti CSV atau Excel. Selain itu, video juga menyoroti pentingnya memahami struktur HTML untuk mengekstrak data yang diinginkan.


2. Mengapa Web Scraping Itu Penting?

✅ Menghemat waktu dibandingkan menyalin data manual.
✅ Bisa digunakan di berbagai keperluan, seperti analisis data, riset pasar, atau pengambilan harga kompetitor.
✅ Dapat digunakan untuk mengumpulkan data dari berbagai sumber yang tidak tersedia dalam format yang mudah diakses.


3. Bagaimana Cara Web Scraping Bekerja?

Proses scraping dilakukan dalam beberapa langkah utama:
1️⃣ Mengakses halaman web menggunakan fungsi read_html() dari paket rvest.
2️⃣ Menganalisis struktur HTML untuk menemukan elemen yang dibutuhkan.
3️⃣ Mengekstrak data dari elemen yang ditemukan.
4️⃣ Menyimpan hasil scraping ke dalam file Excel atau CSV.

Berikut adalah langkah-langkah yang disampaikan dalam video:

3.1. Instalasi Paket

Sebelum menjalankan kode, harus menginstal paket yang diperlukan. Caranya, buka R atau RStudio lalu ketik:

install.packages("rvest")
install.packages("datapasta")
  • rvest: Untuk melakukan web scraping.
  • datapasta: Untuk mempermudah proses menempelkan data ke dalam R.

3.2. Mengimpor Paket

library(rvest)
library(datapasta)

Kode ini memasukkan (import) paket yang sudah kita instal tadi ke dalam program supaya bisa digunakan.


3.3. Mengambil Data dari Tabel

url <- "https://cran.r-project.org/web/pakages/available_packages_by_name.html"
html_page <- read_html(x = url)
CRAN_packages <- html_page %>% html_node(xpath = '//table') %>% html_table()
  • read_html(): Mengambil halaman web.
  • html_node(): Mencari elemen tabel menggunakan XPath.
  • html_table(): Mengonversi elemen tabel menjadi data frame.

3.4. Menggunakan Loop untuk Mengambil Data dari Beberapa Halaman

reference_df <- data.frame(
  id = 1:4,
  code = c("GER", "ESP", "ITA", "FRA"),
  country = c("Germany", "Spain", "Italy", "France"),
  url = c("https://www.transfermarkt.com/germany/kader/verein/3262/saison_id/2023/plus/1",
           "https://www.transfermarkt.com/spain/kader/verein/3375/saison_id/2023/plus/1",
           "https://www.transfermarkt.com/italy/kader/verein/3376/saison_id/2023/plus/1",
           "https://www.transfermarkt.com/france/kader/verein/3377/saison_id/2023/plus/1")
)

for (i in 1:nrow(reference_df)) {
  temp_url <- reference_df$url[i]
  temp_page <- read_html(temp_url)
  temp_table <- temp_page %>% html_node(xpath = '//*[@id="yw1"]/table') %>% html_table()
  # Proses pembersihan dan pengolahan data
}
  • Loop ini digunakan untuk mengakses beberapa URL dan mengekstrak tabel dari setiap halaman.

3.5. Menyimpan Data ke Format yang Diinginkan

Setelah data dikumpulkan, kita dapat menyimpannya ke dalam format CSV atau Excel:

write.csv(euro24, "euro24_data.csv")

4. Berikut ini adalah kode lengkapnya

# Instalasi dan pemanggilan paket
install.packages("rvest")
library(rvest)

# Mengambil data dari URL
url <- "https://cran.r-project.org/web/pakages/available_packages_by_name.html"
html_page <- read_html(x = url)
CRAN_packages <- html_page %>% html_node(xpath = '//table') %>% html_table()

# Menggunakan loop untuk mengambil data dari beberapa halaman
reference_df <- data.frame(
  id = 1:4,
  code = c("GER", "ESP", "ITA", "FRA"),
  country = c("Germany", "Spain", "Italy", "France"),
  url = c("https://www.transfermarkt.com/germany/kader/verein/3262/saison_id/2023/plus/1",
           "https://www.transfermarkt.com/spain/kader/verein/3375/saison_id/2023/plus/1",
           "https://www.transfermarkt.com/italy/kader/verein/3376/saison_id/2023/plus/1",
           "https://www.transfermarkt.com/france/kader/verein/3377/saison_id/2023/plus/1")
)

for (i in 1:nrow(reference_df)) {
  temp_url <- reference_df$url[i]
  temp_page <- read_html(temp_url)
  temp_table <- temp_page %>% html_node(xpath = '//*[@id="yw1"]/table') %>% html_table()
  # Proses pembersihan dan pengolahan data
}

# Menyimpan data ke CSV
write.csv(euro24, "euro24_data.csv")

5. Kesimpulan

Web scraping adalah teknik otomatisasi yang memungkinkan kita mengambil data dari situs web menggunakan R dan paket rvest. Proses ini sangat berguna untuk berbagai keperluan, seperti analisis data, riset pasar, dan pemantauan harga kompetitor. Dari tutorial yang diikuti, langkah-langkah utama dalam web scraping meliputi:

  1. Instalasi paket yang dibutuhkan.
  2. Mengakses halaman web dengan read_html().
  3. Menganalisis struktur HTML untuk menemukan elemen yang dibutuhkan.
  4. Mengekstrak data dari elemen yang ditemukan.
  5. Menyimpan data ke format CSV atau Excel.

Dengan pemahaman yang baik tentang cara kerja web scraping, kita dapat mengumpulkan data yang diperlukan untuk analisis lebih lanjut dengan lebih efisien.

LS0tCnRpdGxlOiAiVHVnYXMgSW5kaXZpZHUgIgpzdWJ0aXRsZTogIldlYiBTY3JhcGluZzogTWVuZ2FtYmlsIERhdGEgZGFyaSBXZWJzaXRlIFNlY2FyYSBPdG9tYXRpcyIKYXV0aG9yOiAiT2xpdmlhIE1laWxpbmRhIERhdnRpbiBQZXNpcmVyb24iCmRhdGU6ICJgciBmb3JtYXQoU3lzLkRhdGUoKSwgJyVCICVkLCAlWScpYCIKb3V0cHV0OgogIHJtZGZvcm1hdHM6OnJlYWR0aGVkb3duOiAgICMgaHR0cHM6Ly9naXRodWIuY29tL2p1YmEvcm1kZm9ybWF0cwogICAgc2VsZl9jb250YWluZWQ6IHRydWUKICAgIHRodW1ibmFpbHM6IHRydWUKICAgIGxpZ2h0Ym94OiB0cnVlCiAgICBnYWxsZXJ5OiB0cnVlCiAgICBsaWJfZGlyOiBsaWJzCiAgICBkZl9wcmludDogInBhZ2VkIgogICAgY29kZV9mb2xkaW5nOiAic2hvdyIKICAgIGNvZGVfZG93bmxvYWQ6IHllcyAKICAgIGNzczogInN0eWxlLmNzcyIKLS0tCgo8aW1nIHNyYz0iSU1HLTIwMjUwMjEyLVdBMDAwNi5qcGciIHdpZHRoPSIzMDAiIHN0eWxlPSJkaXNwbGF5OiBibG9jazsgbWFyZ2luOiBhdXRvOyIgYWx0PSJGb3RvIERpcmkiPgotLS0KCiMgKipXZWIgU2NyYXBpbmc6IE1lbmdhbWJpbCBEYXRhIGRhcmkgV2Vic2l0ZSBTZWNhcmEgT3RvbWF0aXMgKE1lbmdndW5ha2FuIFIgZGFuIFBha2V0IHJ2ZXN0KSoqCgpMaW5rIFBlcmNvYmFhbiBzYXlhOiBodHRwczovL2FlMzRlMjVkNWEzYTRhMzk5MTk5NmEzYzk4YWE0ZDNmLmFwcC5wb3NpdC5jbG91ZC8/dmlldz1zb3VyY2Vfd2luZG93X3d3Z3ZteHdpeWZ1ZDQKCi0tLQoKIyMgMS4gUGVuZGFodWx1YW4KCkJlcmRhc2Fya2FuIHZpZGVvIHlhbmcgc2F5YSB0b250b24sIHNheWEgbWVtcGVsYWphcmkgYmFod2EgcGVuZ2lraXNhbiBkYXRhIG1lbmdndW5ha2FuIFIgZGFuIHBha2V0IHJ2ZXN0IGFkYWxhaCBwcm9zZXMgeWFuZyBlZmVrdGlmIHVudHVrIG1lbmdhbWJpbCBpbmZvcm1hc2kgZGFyaSBzaXR1cyB3ZWIuIERhbGFtIHZpZGVvIHRlcnNlYnV0LCBkaWplbGFza2FuIGxhbmdrYWgtbGFuZ2thaCBtdWxhaSBkYXJpIGluc3RhbGFzaSBwYWtldCB5YW5nIGRpcGVybHVrYW4sIHBlbmdhbWJpbGFuIGRhdGEgZGFyaSBoYWxhbWFuIHdlYiwgaGluZ2dhIHBlbnlpbXBhbmFuIGRhdGEgZGFsYW0gZm9ybWF0IHlhbmcgZGFwYXQgZGlndW5ha2FuLCBzZXBlcnRpIENTViBhdGF1IEV4Y2VsLiBTZWxhaW4gaXR1LCB2aWRlbyBqdWdhIG1lbnlvcm90aSBwZW50aW5nbnlhIG1lbWFoYW1pIHN0cnVrdHVyIEhUTUwgdW50dWsgbWVuZ2Vrc3RyYWsgZGF0YSB5YW5nIGRpaW5naW5rYW4uCgotLS0KCiMjIDIuIE1lbmdhcGEgV2ViIFNjcmFwaW5nIEl0dSBQZW50aW5nPwoK4pyFIE1lbmdoZW1hdCB3YWt0dSBkaWJhbmRpbmdrYW4gbWVueWFsaW4gZGF0YSBtYW51YWwuICAK4pyFIEJpc2EgZGlndW5ha2FuIGRpIGJlcmJhZ2FpIGtlcGVybHVhbiwgc2VwZXJ0aSBhbmFsaXNpcyBkYXRhLCByaXNldCBwYXNhciwgYXRhdSBwZW5nYW1iaWxhbiBoYXJnYSBrb21wZXRpdG9yLiAgCuKchSBEYXBhdCBkaWd1bmFrYW4gdW50dWsgbWVuZ3VtcHVsa2FuIGRhdGEgZGFyaSBiZXJiYWdhaSBzdW1iZXIgeWFuZyB0aWRhayB0ZXJzZWRpYSBkYWxhbSBmb3JtYXQgeWFuZyBtdWRhaCBkaWFrc2VzLgoKLS0tCgojIyAzLiBCYWdhaW1hbmEgQ2FyYSBXZWIgU2NyYXBpbmcgQmVrZXJqYT8KClByb3NlcyBzY3JhcGluZyBkaWxha3VrYW4gZGFsYW0gYmViZXJhcGEgbGFuZ2thaCB1dGFtYTogIAox77iP4oOjIE1lbmdha3NlcyBoYWxhbWFuIHdlYiBtZW5nZ3VuYWthbiBmdW5nc2kgYHJlYWRfaHRtbCgpYCBkYXJpIHBha2V0IHJ2ZXN0LiAgCjLvuI/ig6MgTWVuZ2FuYWxpc2lzIHN0cnVrdHVyIEhUTUwgdW50dWsgbWVuZW11a2FuIGVsZW1lbiB5YW5nIGRpYnV0dWhrYW4uICAKM++4j+KDoyBNZW5nZWtzdHJhayBkYXRhIGRhcmkgZWxlbWVuIHlhbmcgZGl0ZW11a2FuLiAgCjTvuI/ig6MgTWVueWltcGFuIGhhc2lsIHNjcmFwaW5nIGtlIGRhbGFtIGZpbGUgRXhjZWwgYXRhdSBDU1YuICAKCkJlcmlrdXQgYWRhbGFoIGxhbmdrYWgtbGFuZ2thaCB5YW5nIGRpc2FtcGFpa2FuIGRhbGFtIHZpZGVvOgoKIyMjIDMuMS4gSW5zdGFsYXNpIFBha2V0CgpTZWJlbHVtIG1lbmphbGFua2FuIGtvZGUsIGhhcnVzIG1lbmdpbnN0YWwgcGFrZXQgeWFuZyBkaXBlcmx1a2FuLiBDYXJhbnlhLCBidWthIFIgYXRhdSBSU3R1ZGlvIGxhbHUga2V0aWs6CgpgYGBSCmluc3RhbGwucGFja2FnZXMoInJ2ZXN0IikKaW5zdGFsbC5wYWNrYWdlcygiZGF0YXBhc3RhIikKYGBgCgotIGBydmVzdGA6IFVudHVrIG1lbGFrdWthbiB3ZWIgc2NyYXBpbmcuCi0gYGRhdGFwYXN0YWA6IFVudHVrIG1lbXBlcm11ZGFoIHByb3NlcyBtZW5lbXBlbGthbiBkYXRhIGtlIGRhbGFtIFIuCgotLS0KCiMjIyAzLjIuIE1lbmdpbXBvciBQYWtldAoKYGBgUgpsaWJyYXJ5KHJ2ZXN0KQpsaWJyYXJ5KGRhdGFwYXN0YSkKYGBgCgpLb2RlIGluaSBtZW1hc3Vra2FuIChpbXBvcnQpIHBha2V0IHlhbmcgc3VkYWgga2l0YSBpbnN0YWwgdGFkaSBrZSBkYWxhbSBwcm9ncmFtIHN1cGF5YSBiaXNhIGRpZ3VuYWthbi4KCi0tLQoKIyMjIDMuMy4gTWVuZ2FtYmlsIERhdGEgZGFyaSBUYWJlbAoKYGBgUgp1cmwgPC0gImh0dHBzOi8vY3Jhbi5yLXByb2plY3Qub3JnL3dlYi9wYWthZ2VzL2F2YWlsYWJsZV9wYWNrYWdlc19ieV9uYW1lLmh0bWwiCmh0bWxfcGFnZSA8LSByZWFkX2h0bWwoeCA9IHVybCkKQ1JBTl9wYWNrYWdlcyA8LSBodG1sX3BhZ2UgJT4lIGh0bWxfbm9kZSh4cGF0aCA9ICcvL3RhYmxlJykgJT4lIGh0bWxfdGFibGUoKQpgYGAKCi0gYHJlYWRfaHRtbCgpYDogTWVuZ2FtYmlsIGhhbGFtYW4gd2ViLgotIGBodG1sX25vZGUoKWA6IE1lbmNhcmkgZWxlbWVuIHRhYmVsIG1lbmdndW5ha2FuIFhQYXRoLgotIGBodG1sX3RhYmxlKClgOiBNZW5nb252ZXJzaSBlbGVtZW4gdGFiZWwgbWVuamFkaSBkYXRhIGZyYW1lLgoKLS0tCgojIyMgMy40LiBNZW5nZ3VuYWthbiBMb29wIHVudHVrIE1lbmdhbWJpbCBEYXRhIGRhcmkgQmViZXJhcGEgSGFsYW1hbgoKYGBgUgpyZWZlcmVuY2VfZGYgPC0gZGF0YS5mcmFtZSgKICBpZCA9IDE6NCwKICBjb2RlID0gYygiR0VSIiwgIkVTUCIsICJJVEEiLCAiRlJBIiksCiAgY291bnRyeSA9IGMoIkdlcm1hbnkiLCAiU3BhaW4iLCAiSXRhbHkiLCAiRnJhbmNlIiksCiAgdXJsID0gYygiaHR0cHM6Ly93d3cudHJhbnNmZXJtYXJrdC5jb20vZ2VybWFueS9rYWRlci92ZXJlaW4vMzI2Mi9zYWlzb25faWQvMjAyMy9wbHVzLzEiLAogICAgICAgICAgICJodHRwczovL3d3dy50cmFuc2Zlcm1hcmt0LmNvbS9zcGFpbi9rYWRlci92ZXJlaW4vMzM3NS9zYWlzb25faWQvMjAyMy9wbHVzLzEiLAogICAgICAgICAgICJodHRwczovL3d3dy50cmFuc2Zlcm1hcmt0LmNvbS9pdGFseS9rYWRlci92ZXJlaW4vMzM3Ni9zYWlzb25faWQvMjAyMy9wbHVzLzEiLAogICAgICAgICAgICJodHRwczovL3d3dy50cmFuc2Zlcm1hcmt0LmNvbS9mcmFuY2Uva2FkZXIvdmVyZWluLzMzNzcvc2Fpc29uX2lkLzIwMjMvcGx1cy8xIikKKQoKZm9yIChpIGluIDE6bnJvdyhyZWZlcmVuY2VfZGYpKSB7CiAgdGVtcF91cmwgPC0gcmVmZXJlbmNlX2RmJHVybFtpXQogIHRlbXBfcGFnZSA8LSByZWFkX2h0bWwodGVtcF91cmwpCiAgdGVtcF90YWJsZSA8LSB0ZW1wX3BhZ2UgJT4lIGh0bWxfbm9kZSh4cGF0aCA9ICcvLypbQGlkPSJ5dzEiXS90YWJsZScpICU+JSBodG1sX3RhYmxlKCkKICAjIFByb3NlcyBwZW1iZXJzaWhhbiBkYW4gcGVuZ29sYWhhbiBkYXRhCn0KYGBgCgotIExvb3AgaW5pIGRpZ3VuYWthbiB1bnR1ayBtZW5nYWtzZXMgYmViZXJhcGEgVVJMIGRhbiBtZW5nZWtzdHJhayB0YWJlbCBkYXJpIHNldGlhcCBoYWxhbWFuLgoKLS0tCgojIyMgMy41LiBNZW55aW1wYW4gRGF0YSBrZSBGb3JtYXQgeWFuZyBEaWluZ2lua2FuCgpTZXRlbGFoIGRhdGEgZGlrdW1wdWxrYW4sIGtpdGEgZGFwYXQgbWVueWltcGFubnlhIGtlIGRhbGFtIGZvcm1hdCBDU1YgYXRhdSBFeGNlbDoKCmBgYFIKd3JpdGUuY3N2KGV1cm8yNCwgImV1cm8yNF9kYXRhLmNzdiIpCmBgYAoKLS0tCgojIyA0LiBCZXJpa3V0IGluaSBhZGFsYWgga29kZSBsZW5na2FwbnlhCgpgYGBSCiMgSW5zdGFsYXNpIGRhbiBwZW1hbmdnaWxhbiBwYWtldAppbnN0YWxsLnBhY2thZ2VzKCJydmVzdCIpCmxpYnJhcnkocnZlc3QpCgojIE1lbmdhbWJpbCBkYXRhIGRhcmkgVVJMCnVybCA8LSAiaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvd2ViL3Bha2FnZXMvYXZhaWxhYmxlX3BhY2thZ2VzX2J5X25hbWUuaHRtbCIKaHRtbF9wYWdlIDwtIHJlYWRfaHRtbCh4ID0gdXJsKQpDUkFOX3BhY2thZ2VzIDwtIGh0bWxfcGFnZSAlPiUgaHRtbF9ub2RlKHhwYXRoID0gJy8vdGFibGUnKSAlPiUgaHRtbF90YWJsZSgpCgojIE1lbmdndW5ha2FuIGxvb3AgdW50dWsgbWVuZ2FtYmlsIGRhdGEgZGFyaSBiZWJlcmFwYSBoYWxhbWFuCnJlZmVyZW5jZV9kZiA8LSBkYXRhLmZyYW1lKAogIGlkID0gMTo0LAogIGNvZGUgPSBjKCJHRVIiLCAiRVNQIiwgIklUQSIsICJGUkEiKSwKICBjb3VudHJ5ID0gYygiR2VybWFueSIsICJTcGFpbiIsICJJdGFseSIsICJGcmFuY2UiKSwKICB1cmwgPSBjKCJodHRwczovL3d3dy50cmFuc2Zlcm1hcmt0LmNvbS9nZXJtYW55L2thZGVyL3ZlcmVpbi8zMjYyL3NhaXNvbl9pZC8yMDIzL3BsdXMvMSIsCiAgICAgICAgICAgImh0dHBzOi8vd3d3LnRyYW5zZmVybWFya3QuY29tL3NwYWluL2thZGVyL3ZlcmVpbi8zMzc1L3NhaXNvbl9pZC8yMDIzL3BsdXMvMSIsCiAgICAgICAgICAgImh0dHBzOi8vd3d3LnRyYW5zZmVybWFya3QuY29tL2l0YWx5L2thZGVyL3ZlcmVpbi8zMzc2L3NhaXNvbl9pZC8yMDIzL3BsdXMvMSIsCiAgICAgICAgICAgImh0dHBzOi8vd3d3LnRyYW5zZmVybWFya3QuY29tL2ZyYW5jZS9rYWRlci92ZXJlaW4vMzM3Ny9zYWlzb25faWQvMjAyMy9wbHVzLzEiKQopCgpmb3IgKGkgaW4gMTpucm93KHJlZmVyZW5jZV9kZikpIHsKICB0ZW1wX3VybCA8LSByZWZlcmVuY2VfZGYkdXJsW2ldCiAgdGVtcF9wYWdlIDwtIHJlYWRfaHRtbCh0ZW1wX3VybCkKICB0ZW1wX3RhYmxlIDwtIHRlbXBfcGFnZSAlPiUgaHRtbF9ub2RlKHhwYXRoID0gJy8vKltAaWQ9Inl3MSJdL3RhYmxlJykgJT4lIGh0bWxfdGFibGUoKQogICMgUHJvc2VzIHBlbWJlcnNpaGFuIGRhbiBwZW5nb2xhaGFuIGRhdGEKfQoKIyBNZW55aW1wYW4gZGF0YSBrZSBDU1YKd3JpdGUuY3N2KGV1cm8yNCwgImV1cm8yNF9kYXRhLmNzdiIpCmBgYAoKLS0tCgojIyA1LiBLZXNpbXB1bGFuCgpXZWIgc2NyYXBpbmcgYWRhbGFoIHRla25payBvdG9tYXRpc2FzaSB5YW5nIG1lbXVuZ2tpbmthbiBraXRhIG1lbmdhbWJpbCBkYXRhIGRhcmkgc2l0dXMgd2ViIG1lbmdndW5ha2FuIFIgZGFuIHBha2V0IHJ2ZXN0LiBQcm9zZXMgaW5pIHNhbmdhdCBiZXJndW5hIHVudHVrIGJlcmJhZ2FpIGtlcGVybHVhbiwgc2VwZXJ0aSBhbmFsaXNpcyBkYXRhLCByaXNldCBwYXNhciwgZGFuIHBlbWFudGF1YW4gaGFyZ2Ega29tcGV0aXRvci4gRGFyaSB0dXRvcmlhbCB5YW5nIGRpaWt1dGksIGxhbmdrYWgtbGFuZ2thaCB1dGFtYSBkYWxhbSB3ZWIgc2NyYXBpbmcgbWVsaXB1dGk6CgoxLiBJbnN0YWxhc2kgcGFrZXQgeWFuZyBkaWJ1dHVoa2FuLgoyLiBNZW5nYWtzZXMgaGFsYW1hbiB3ZWIgZGVuZ2FuIGByZWFkX2h0bWwoKWAuCjMuIE1lbmdhbmFsaXNpcyBzdHJ1a3R1ciBIVE1MIHVudHVrIG1lbmVtdWthbiBlbGVtZW4geWFuZyBkaWJ1dHVoa2FuLgo0LiBNZW5nZWtzdHJhayBkYXRhIGRhcmkgZWxlbWVuIHlhbmcgZGl0ZW11a2FuLgo1LiBNZW55aW1wYW4gZGF0YSBrZSBmb3JtYXQgQ1NWIGF0YXUgRXhjZWwuCgpEZW5nYW4gcGVtYWhhbWFuIHlhbmcgYmFpayB0ZW50YW5nIGNhcmEga2VyamEgd2ViIHNjcmFwaW5nLCBraXRhIGRhcGF0IG1lbmd1bXB1bGthbiBkYXRhIHlhbmcgZGlwZXJsdWthbiB1bnR1ayBhbmFsaXNpcyBsZWJpaCBsYW5qdXQgZGVuZ2FuIGxlYmloIGVmaXNpZW4uCgojIyBSZWZlcmVuc2kKCjEuIGh0dHBzOi8veW91dHUuYmUvTUhkTUZ4VXlHZGs/c2k9Z2wzVUplT1QzYnFKQ0poRAoKMi4gaHR0cHM6Ly9ib29rZG93bi5vcmcvZHNjaWVuY2VsYWJzL2RhdGFfc2NpZW5jZV9wcm9ncmFtbWluZy8wNC1EYXRhX0NvbGxlY3Rpb24uaHRtbA==