Mendapatkan Akses ke API
Rekapitulasi data COVID-19 di Indonesia terdapat pada API Publik yang beralamatkan di https://data.covid19.go.id/public/api/update.json
Tambahkan Library httr agar dapat mengakses API selanjutnya gunakan Fungsi GET dari library httr tersebut.
library(httr)
respon <- GET ("https://data.covid19.go.id/public/api/update.json")
Mengevaluasi Hasil Respon
Setelah fungsi GET() dijalankan maka server akan menjawab permintaan yang sudah dibuat.
cara untuk cek respon server adalah sebagai berikut
library(httr)
respon <- GET ("https://data.covid19.go.id/public/api/update.json")
status_code(respon)
[1] 200
Status kode dari respon yang diberikan oleh server dapat dilihat di :
https://restfulapi.net/http-status-codes/
Mengekstrak Isi Dari Respon
Untuk mengekstrak Konten dari permintaan yang sudah dibuat dapat menggunakan fungsi content(), secara otomatis fungsi tersebut akan menyesuaikan output berdasarkan jenis file yang tersedia, dalam hal ini adalah file JSON.
library(httr)
respon <- GET ("https://data.covid19.go.id/public/api/update.json")
cov_id_raw <- content(respon, as = "parsed", simplifyVector = TRUE)
Setelah itu gunakan fungsi lenght() untuk mengetahui jumlah komponen pada objek cov_id_raw
length(cov_id_raw)
[1] 2
kemudian gunakan fungsi names() untuk mengetahui nama komponen pada objek cov_id_raw
names(cov_id_raw)
[1] "data" "update"
setelah itu simpan dengan nama cov_id_doc
cov_id_doc <- cov_id_raw$update
cov_id_doc$penambahan$tanggal
[1] "2021-09-28"
cov_id_doc$penambahan$jumlah_sembuh
[1] 3551
cov_id_doc$penambahan$jumlah_meninggal
[1] 124
cov_id_doc$total$jumlah_positif
[1] 4211460
cov_id_doc$total$jumlah_meninggal
[1] 141709
Sekarang Kita Melihat di Jawa Timur
respon_jatim <- GET("https://data.covid19.go.id/public/api/prov_detail_JAWA_TIMUR.json")
cov_jatim_raw <- content(respon_jatim, as = "parsed", simplifyVector = TRUE)
Sekarang kita melihat elemen - elemen utaman yabg tersedia menggunakan fungsi names()
names(cov_jatim_raw)
[1] "last_date" "provinsi" "kasus_total" "kasus_tanpa_tgl" "kasus_dengan_tgl"
[6] "meninggal_persen" "meninggal_tanpa_tgl" "meninggal_dengan_tgl" "sembuh_persen" "sembuh_tanpa_tgl"
[11] "sembuh_dengan_tgl" "list_perkembangan" "data"
cov_jatim_raw$kasus_total
[1] 394770
cov_jatim_raw$list_perkembangan
simpan hasil extract kedalam object baru bernama cov_jatim
cov_jatim <- cov_jatim_raw$list_perkembangan
Dari hasil yang sudah ditunjukkan pada tabel di atas maka perlu kita olah datanya agar dapat dibaca. Penulisan Format tanggal harus kita perbaiki. Gunakan library dplyr untuk mengolah data.
library(dplyr)
Attaching package: ‘dplyr’
The following objects are masked from ‘package:stats’:
filter, lag
The following objects are masked from ‘package:base’:
intersect, setdiff, setequal, union
new_cov_jatim <-
cov_jatim %>%
select(-contains("DIRAWAT_OR_ISOLASI")) %>%
select(-starts_with("AKUMULASI")) %>%
rename(
cov_kasus = KASUS,
cov_meninggal = MENINGGAL,
cov_sembuh = SEMBUH
) %>%
mutate(
tanggal = as.POSIXct(tanggal / 1000, origin = "1970-01-01"),
tanggal = as.Date(tanggal)
)
str(new_cov_jatim)
'data.frame': 558 obs. of 4 variables:
$ tanggal : Date, format: "2020-03-18" "2020-03-19" "2020-03-20" "2020-03-21" ...
$ cov_kasus : int 7 3 9 9 14 2 3 9 13 3 ...
$ cov_meninggal: int 1 0 0 1 0 1 1 0 1 1 ...
$ cov_sembuh : int 0 0 0 0 0 0 0 1 0 0 ...
head(new_cov_jatim)
Memvisualisasikan Data Melalui Grafik
Gunakan Library ggplot2 dan hrbrthemes
library(ggplot2)
library(hrbrthemes)
ggplot(new_cov_jatim, aes(x = tanggal, y = cov_kasus)) +
geom_col()

library(ggplot2)
library(hrbrthemes)
ggplot(new_cov_jatim, aes(tanggal, cov_kasus)) +
geom_col(fill = "salmon") +
labs(
x = NULL,
y = "Jumlah kasus",
title = "Kasus Harian Positif COVID-19 di Jawa Timur",
subtitle = "Terjadi pelonjakan kasus di bulan Juli",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum(
base_size = 13,
plot_title_size = 21,
grid = "Y",
ticks = TRUE
) +
theme(plot.title.position = "plot")

Grafik Untuk Kasus Sembuh
library(ggplot2)
library(hrbrthemes)
ggplot(new_cov_jatim, aes(tanggal, cov_sembuh)) +
geom_col(fill = "olivedrab2") +
labs(
x = NULL,
y = "Jumlah kasus",
title = "Kasus Harian Sembuh Dari COVID-19 di Jawa Timur",
caption = "Sumber data: covid.19.go.id"
) +
theme_ipsum(
base_size = 13,
plot_title_size = 19,
grid = "Y",
ticks = TRUE
) +
theme(plot.title.position = "plot")

library(ggplot2)
library(hrbrthemes)
ggplot(new_cov_jatim, aes(tanggal, cov_meninggal)) +
geom_col(fill = "red") +
labs(
x = NULL,
y = "Jumlah kasus",
title = "Kasus Harian Meniggal Dari COVID-19 di Jawa Timur",
caption = "Sumber data: covid19.go.id"
) +
theme_ipsum(
base_size = 13,
plot_title_size = 19,
grid = "Y",
ticks = TRUE
) +
theme(plot.title.position = "plot")

LS0tDQp0aXRsZTogIlZpc3VhbGlzYXNpIERhdGEgQ292aWQgZGkgSmF3YSBUaW11ciBNZW5nZ3VuYWthbiBSIg0KYXV0aG9yOiAiVSd1biBTZXRpYXdhdGksIFMuS29tIg0KZGF0ZTogIjkvMTIvMjAyMSINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6DQogICAgbnVtYmVyX3NlY3Rpb25zOiBubw0KICAgIHRoZW1lOiBzcGFjZWxhYg0KICAgIGRmX3ByaW50OiBwYWdlZA0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KDQotLS0NCg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCg0KYm9keXsgLyogTm9ybWFsICAqLw0KICAgICAgZm9udC1zaXplOiAxNHB4Ow0KICB9DQp0ZCB7ICAvKiBUYWJsZSAgKi8NCiAgZm9udC1zaXplOiAxMnB4Ow0KfQ0KaDEudGl0bGUgew0KICBmb250LXNpemU6IDM4cHg7DQogIGNvbG9yOiBsaWdodGJsdWU7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KaDEgeyAvKiBIZWFkZXIgMSAqLw0KICBmb250LXNpemU6IDI0cHg7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCn0NCmgyIHsgLyogSGVhZGVyIDIgKi8NCiAgZm9udC1zaXplOiAyMHB4Ow0KICBjb2xvcjogRGFya0JsdWU7DQp9DQpoMyB7IC8qIEhlYWRlciAzICovDQogIGZvbnQtc2l6ZTogMTZweDsNCiMgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBjb2xvcjogRGFya0JsdWU7DQp9DQpoNCB7IC8qIEhlYWRlciA0ICovDQogIGZvbnQtc2l6ZTogMTRweDsNCiAgY29sb3I6IERhcmtCbHVlOw0KfQ0KY29kZS5yeyAvKiBDb2RlIGJsb2NrICovDQogICAgZm9udC1zaXplOiAxMnB4Ow0KfQ0KcHJlIHsgLyogQ29kZSBibG9jayAtIGRldGVybWluZXMgY29kZSBzcGFjaW5nIGJldHdlZW4gbGluZXMgKi8NCiAgICBmb250LXNpemU6IDEycHg7DQp9DQo8L3N0eWxlPg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQoja25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KCWVjaG8gPSBUUlVFLCANCglmaWcuYWxpZ24gPSAiY2VudGVyIiwNCglmaWcuc2hvdyA9ICJob2xkIiwNCgltZXNzYWdlID0gRkFMU0UsDQoJd2FybmluZyA9IEZBTFNFLA0KCXJlc3VsdHMgPSAiaG9sZCINCikNCiANCm9wdGlvbnMoc2NpcGVuID0gOTkpDQpgYGANCg0KIyBNZW5kYXBhdGthbiBBa3NlcyBrZSBBUEkNCg0KUmVrYXBpdHVsYXNpIGRhdGEgQ09WSUQtMTkgZGkgSW5kb25lc2lhIHRlcmRhcGF0IHBhZGEgQVBJIFB1YmxpayB5YW5nIGJlcmFsYW1hdGthbiBkaSANCjxhIGhyZWY9Imh0dHBzOi8vZGF0YS5jb3ZpZDE5LmdvLmlkL3B1YmxpYy9hcGkvdXBkYXRlLmpzb24iIHRhcmdldD0iX2JsYW5rIj5odHRwczovL2RhdGEuY292aWQxOS5nby5pZC9wdWJsaWMvYXBpL3VwZGF0ZS5qc29uPC9hPg0KDQpUYW1iYWhrYW4gTGlicmFyeSBodHRyIGFnYXIgZGFwYXQgbWVuZ2Frc2VzIEFQSSBzZWxhbmp1dG55YSBndW5ha2FuIEZ1bmdzaSBHRVQgZGFyaSBsaWJyYXJ5IGh0dHIgdGVyc2VidXQuDQoNCg0KYGBge3IgZXZhbD1GQUxTRX0NCmxpYnJhcnkoaHR0cikNCnJlc3BvbiA8LSBHRVQgKCJodHRwczovL2RhdGEuY292aWQxOS5nby5pZC9wdWJsaWMvYXBpL3VwZGF0ZS5qc29uIikNCmBgYA0KDQojIE1lbmdldmFsdWFzaSBIYXNpbCBSZXNwb24NCg0KU2V0ZWxhaCBmdW5nc2kgYEdFVCgpYCBkaWphbGFua2FuIG1ha2Egc2VydmVyIGFrYW4gbWVuamF3YWIgcGVybWludGFhbiB5YW5nIHN1ZGFoIGRpYnVhdC4NCg0KY2FyYSB1bnR1ayBjZWsgcmVzcG9uIHNlcnZlciBhZGFsYWggc2ViYWdhaSBiZXJpa3V0DQoNCmBgYHtyfQ0KbGlicmFyeShodHRyKQ0KcmVzcG9uIDwtIEdFVCAoImh0dHBzOi8vZGF0YS5jb3ZpZDE5LmdvLmlkL3B1YmxpYy9hcGkvdXBkYXRlLmpzb24iKQ0Kc3RhdHVzX2NvZGUocmVzcG9uKQ0KYGBgDQpTdGF0dXMga29kZSBkYXJpIHJlc3BvbiB5YW5nIGRpYmVyaWthbiBvbGVoIHNlcnZlciBkYXBhdCBkaWxpaGF0IGRpIDoNCg0KPGEgaHJlZj0iaHR0cHM6Ly9yZXN0ZnVsYXBpLm5ldC9odHRwLXN0YXR1cy1jb2Rlcy8iPmh0dHBzOi8vcmVzdGZ1bGFwaS5uZXQvaHR0cC1zdGF0dXMtY29kZXMvPC9hPg0KDQojIE1lbmdla3N0cmFrIElzaSBEYXJpIFJlc3Bvbg0KDQpVbnR1ayBtZW5nZWtzdHJhayBLb250ZW4gZGFyaSBwZXJtaW50YWFuIHlhbmcgc3VkYWggZGlidWF0IGRhcGF0IG1lbmdndW5ha2FuIGZ1bmdzaSBgY29udGVudCgpYCwgc2VjYXJhIG90b21hdGlzIGZ1bmdzaSB0ZXJzZWJ1dCBha2FuIG1lbnllc3VhaWthbiBvdXRwdXQgYmVyZGFzYXJrYW4gamVuaXMgZmlsZSB5YW5nIHRlcnNlZGlhLCBkYWxhbSBoYWwgaW5pIGFkYWxhaCBmaWxlIGBKU09OYC4gDQoNCmBgYHtyfQ0KbGlicmFyeShodHRyKQ0KcmVzcG9uIDwtIEdFVCAoImh0dHBzOi8vZGF0YS5jb3ZpZDE5LmdvLmlkL3B1YmxpYy9hcGkvdXBkYXRlLmpzb24iKQ0KY292X2lkX3JhdyA8LSBjb250ZW50KHJlc3BvbiwgYXMgPSAicGFyc2VkIiwgc2ltcGxpZnlWZWN0b3IgPSBUUlVFKQ0KYGBgDQoNClNldGVsYWggaXR1IGd1bmFrYW4gZnVuZ3NpIGBsZW5naHQoKWAgdW50dWsgbWVuZ2V0YWh1aSBqdW1sYWgga29tcG9uZW4gcGFkYSBvYmplayBgY292X2lkX3Jhd2ANCg0KYGBge3J9DQpsZW5ndGgoY292X2lkX3JhdykNCmBgYA0Ka2VtdWRpYW4gZ3VuYWthbiBmdW5nc2kgYG5hbWVzKClgICB1bnR1ayBtZW5nZXRhaHVpIG5hbWEga29tcG9uZW4gcGFkYSBvYmplayBgY292X2lkX3Jhd2ANCg0KYGBge3J9DQpuYW1lcyhjb3ZfaWRfcmF3KQ0KYGBgDQpzZXRlbGFoIGl0dSBzaW1wYW4gZGVuZ2FuIG5hbWEgYGNvdl9pZF9kb2NgDQoNCmBgYHtyfQ0KY292X2lkX2RvYyA8LSBjb3ZfaWRfcmF3JHVwZGF0ZQ0KYGBgDQoNCg0KYGBge3J9DQpjb3ZfaWRfZG9jJHBlbmFtYmFoYW4kdGFuZ2dhbA0KYGBgDQpgYGB7cn0NCmNvdl9pZF9kb2MkcGVuYW1iYWhhbiRqdW1sYWhfc2VtYnVoDQpgYGANCmBgYHtyfQ0KY292X2lkX2RvYyRwZW5hbWJhaGFuJGp1bWxhaF9tZW5pbmdnYWwNCmBgYA0KYGBge3J9DQpjb3ZfaWRfZG9jJHRvdGFsJGp1bWxhaF9wb3NpdGlmDQpgYGANCmBgYHtyfQ0KY292X2lkX2RvYyR0b3RhbCRqdW1sYWhfbWVuaW5nZ2FsDQpgYGANCiMgU2VrYXJhbmcgS2l0YSBNZWxpaGF0IGRpIEphd2EgVGltdXINCg0KYGBge3J9DQpyZXNwb25famF0aW0gPC0gR0VUKCJodHRwczovL2RhdGEuY292aWQxOS5nby5pZC9wdWJsaWMvYXBpL3Byb3ZfZGV0YWlsX0pBV0FfVElNVVIuanNvbiIpDQpjb3ZfamF0aW1fcmF3IDwtIGNvbnRlbnQocmVzcG9uX2phdGltLCBhcyA9ICJwYXJzZWQiLCBzaW1wbGlmeVZlY3RvciA9IFRSVUUpDQpgYGANCg0KU2VrYXJhbmcga2l0YSBtZWxpaGF0IGVsZW1lbiAtIGVsZW1lbiB1dGFtYW4geWFiZyB0ZXJzZWRpYSBtZW5nZ3VuYWthbiBmdW5nc2kgbmFtZXMoKQ0KDQpgYGB7cn0NCm5hbWVzKGNvdl9qYXRpbV9yYXcpDQpgYGANCg0KYGBge3J9DQpjb3ZfamF0aW1fcmF3JGthc3VzX3RvdGFsDQpgYGANCmBgYHtyfQ0KY292X2phdGltX3JhdyRsaXN0X3BlcmtlbWJhbmdhbg0KYGBgDQoNCnNpbXBhbiBoYXNpbCBleHRyYWN0IGtlZGFsYW0gb2JqZWN0IGJhcnUgYmVybmFtYSBgY292X2phdGltYA0KDQpgYGB7cn0NCmNvdl9qYXRpbSA8LSBjb3ZfamF0aW1fcmF3JGxpc3RfcGVya2VtYmFuZ2FuDQpgYGANCg0KDQpEYXJpIGhhc2lsIHlhbmcgc3VkYWggZGl0dW5qdWtrYW4gcGFkYSB0YWJlbCBkaSBhdGFzIG1ha2EgcGVybHUga2l0YSBvbGFoIGRhdGFueWEgYWdhciBkYXBhdCBkaWJhY2EuIFBlbnVsaXNhbiBGb3JtYXQgdGFuZ2dhbCBoYXJ1cyBraXRhIHBlcmJhaWtpLiBHdW5ha2FuIGxpYnJhcnkgIGBkcGx5cmAgdW50dWsgbWVuZ29sYWggZGF0YS4NCg0KYGBge3J9DQpsaWJyYXJ5KGRwbHlyKQ0KYGBgDQpgYGB7cn0NCm5ld19jb3ZfamF0aW0gPC0NCiAgY292X2phdGltICU+JSANCiAgc2VsZWN0KC1jb250YWlucygiRElSQVdBVF9PUl9JU09MQVNJIikpICU+JSANCiAgc2VsZWN0KC1zdGFydHNfd2l0aCgiQUtVTVVMQVNJIikpICU+JSANCiAgcmVuYW1lKA0KICAgIGNvdl9rYXN1cyA9IEtBU1VTLA0KICAgIGNvdl9tZW5pbmdnYWwgPSBNRU5JTkdHQUwsDQogICAgY292X3NlbWJ1aCA9IFNFTUJVSA0KICAgICkgJT4lIA0KICBtdXRhdGUoDQogICAgdGFuZ2dhbCA9IGFzLlBPU0lYY3QodGFuZ2dhbCAvIDEwMDAsIG9yaWdpbiA9ICIxOTcwLTAxLTAxIiksDQogICAgdGFuZ2dhbCA9IGFzLkRhdGUodGFuZ2dhbCkNCiAgKQ0KDQpzdHIobmV3X2Nvdl9qYXRpbSkNCmBgYA0KYGBge3J9DQpoZWFkKG5ld19jb3ZfamF0aW0pDQpgYGANCiMgTWVtdmlzdWFsaXNhc2lrYW4gRGF0YSBNZWxhbHVpIEdyYWZpaw0KDQpHdW5ha2FuIExpYnJhcnkgYGdncGxvdDJgIGRhbiBgaHJicnRoZW1lc2ANCg0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGhyYnJ0aGVtZXMpDQoNCmdncGxvdChuZXdfY292X2phdGltLCBhZXMoeCA9IHRhbmdnYWwsIHkgPSBjb3Zfa2FzdXMpKSArDQogIGdlb21fY29sKCkNCmBgYA0KYGBge3J9DQpsaWJyYXJ5KGdncGxvdDIpDQpsaWJyYXJ5KGhyYnJ0aGVtZXMpDQpnZ3Bsb3QobmV3X2Nvdl9qYXRpbSwgYWVzKHRhbmdnYWwsIGNvdl9rYXN1cykpICsNCiAgICBnZW9tX2NvbChmaWxsID0gInNhbG1vbiIpICsNCiAgICBsYWJzKA0KICAgICAgeCA9IE5VTEwsDQogICAgICB5ID0gIkp1bWxhaCBrYXN1cyIsDQogICAgICB0aXRsZSA9ICJLYXN1cyBIYXJpYW4gUG9zaXRpZiBDT1ZJRC0xOSBkaSBKYXdhIFRpbXVyIiwNCiAgICAgIHN1YnRpdGxlID0gIlRlcmphZGkgcGVsb25qYWthbiBrYXN1cyBkaSBidWxhbiBKdWxpIiwNCiAgICAgIGNhcHRpb24gPSAiU3VtYmVyIGRhdGE6IGNvdmlkMTkuZ28uaWQiDQogICAgKSArDQogICAgdGhlbWVfaXBzdW0oDQogICAgICBiYXNlX3NpemUgPSAxMywNCiAgICAgIHBsb3RfdGl0bGVfc2l6ZSA9IDIxLA0KICAgICAgZ3JpZCA9ICJZIiwNCiAgICAgIHRpY2tzID0gVFJVRQ0KICAgICkgKw0KICAgIHRoZW1lKHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIpDQpgYGANCiMgR3JhZmlrIFVudHVrIEthc3VzIFNlbWJ1aA0KDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShocmJydGhlbWVzKQ0KDQpnZ3Bsb3QobmV3X2Nvdl9qYXRpbSwgYWVzKHRhbmdnYWwsIGNvdl9zZW1idWgpKSArDQogIGdlb21fY29sKGZpbGwgPSAib2xpdmVkcmFiMiIpICsNCiAgbGFicygNCiAgICB4ID0gTlVMTCwNCiAgICB5ID0gIkp1bWxhaCBrYXN1cyIsDQogICAgdGl0bGUgPSAiS2FzdXMgSGFyaWFuIFNlbWJ1aCBEYXJpIENPVklELTE5IGRpIEphd2EgVGltdXIiLA0KICAgIGNhcHRpb24gPSAiU3VtYmVyIGRhdGE6IGNvdmlkMTkuZ28uaWQiDQogICkgKw0KICB0aGVtZV9pcHN1bSgNCiAgICBiYXNlX3NpemUgPSAxMywgDQogICAgcGxvdF90aXRsZV9zaXplID0gMTksDQogICAgZ3JpZCA9ICJZIiwNCiAgICB0aWNrcyA9IFRSVUUNCiAgKSArDQogIHRoZW1lKHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIpDQpgYGANCmBgYHtyfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShocmJydGhlbWVzKQ0KDQpnZ3Bsb3QobmV3X2Nvdl9qYXRpbSwgYWVzKHRhbmdnYWwsIGNvdl9tZW5pbmdnYWwpKSArDQogIGdlb21fY29sKGZpbGwgPSAicmVkIikgKw0KICBsYWJzKA0KICAgIHggPSBOVUxMLA0KICAgIHkgPSAiSnVtbGFoIGthc3VzIiwNCiAgICB0aXRsZSA9ICJLYXN1cyBIYXJpYW4gTWVuaWdnYWwgRGFyaSBDT1ZJRC0xOSBkaSBKYXdhIFRpbXVyIiwNCiAgICBjYXB0aW9uID0gIlN1bWJlciBkYXRhOiBjb3ZpZDE5LmdvLmlkIg0KICApICsNCiAgdGhlbWVfaXBzdW0oDQogICAgYmFzZV9zaXplID0gMTMsIA0KICAgIHBsb3RfdGl0bGVfc2l6ZSA9IDE5LA0KICAgIGdyaWQgPSAiWSIsDQogICAgdGlja3MgPSBUUlVFDQogICkgKw0KICB0aGVtZShwbG90LnRpdGxlLnBvc2l0aW9uID0gInBsb3QiKQ0KYGBgDQoNCg0KIyBEYWZ0YXIgUHVzdGFrYQ0KDQo8YSBocmVmID0gImh0dHBzOi8vd3d3LnItcHJvamVjdC5vcmcvIj5odHRwczovL3d3dy5yLXByb2plY3Qub3JnLzwvYT4NCg0KPGEgaHJlZiA9ICJodHRwczovL2NvdmlkMTkuZ28uaWQiPmh0dHBzOi8vY292aWQxOS5nby5pZDwvYT4gDQoNCg0K