Penanggulangan kemiskinan tetap menjadi prioritas utama dalam agenda
pembangunan nasional Indonesia. Namun, tantangan besar sering muncul
dalam menentukan skema intervensi yang paling efisien secara fiskal
namun tetap memberikan dampak optimal. Di tengah keterbatasan ruang
anggaran, kebijakan bantuan sosial (bansos) dituntut untuk tidak hanya
sekadar menyalurkan dana, tetapi juga harus presisi dalam menentukan
besaran (nominal) dan target sasaran (targeting).
Laporan ini menyajikan sebuah simulasi dampak bantuan sosial
menggunakan data Susenas Maret 2025. Analisis ini bertujuan untuk
memprediksi skenario terbaik dalam menurunkan angka kemiskinan sebesar 1
poin persentase. Melalui pendekatan berbasis data, dapat diuji berbagai
kemungkinan: apakah bantuan harus diberikan secara universal, atau cukup
difokuskan pada penduduk miskin yang selama ini belum terjangkau bantuan
eksisting?
Pentingnya analisis ini terletak pada kemampuannya untuk membedah
kebutuhan fiskal hingga tingkat wilayah. Mengingat disparitas ekonomi
antarprovinsi yang cukup lebar, kebijakan “satu ukuran untuk semua” (
one size fits all) seringkali kurang efektif. Oleh karena itu,
simulasi ini juga merinci kebutuhan top-up anggaran di masing-masing
dari 38 provinsi di Indonesia, guna memastikan bahwa setiap rupiah yang
dialokasikan benar-benar berkontribusi pada akselerasi penurunan angka
kemiskinan nasional.
knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)
Parameter Baseline
baseline_poverty <- sum(dataku$miskin_awal * dataku$weight) / sum(dataku$weight)
target_poverty <- max(0, baseline_poverty - 0.01)
cat("Baseline Poverty :", round(baseline_poverty * 100, 2), "%\n")
## Baseline Poverty : 8.47 %
cat("Target Poverty :", round(target_poverty * 100, 2), "%\n")
## Target Poverty : 7.47 %
Tahap awal analisis berfokus pada penetapan baseline kemiskinan
menggunakan penimbang untuk merepresentasikan populasi nasional.
Berdasarkan hasil pengolahan, diperoleh angka kemiskinan sebesar 8,47%.
Angka ini menjadi acuan krusial untuk mengukur efektivitas intervensi
bantuan sosial yang akan disimulasikan.
Sejalan dengan target akselerasi penghapusan kemiskinan, analisis ini
menetapkan Target Kemiskinan baru sebesar 7,47%, atau penurunan sebesar
1 poin persentase. Selisih antara kondisi baseline dan target inilah
yang akan menjadi fokus utama dalam perhitungan kebutuhan fiskal, guna
menentukan berapa besar tambahan dana bantuan yang harus dialokasikan
agar ambang batas target tersebut dapat tercapai secara efektif di
seluruh wilayah.
Level Nasional
pop_total <- sum(dataku$weight * dataku$jart)
pop_miskin <- sum(dataku$weight[dataku$miskin_awal == 1] * dataku$jart[dataku$miskin_awal == 1])
pop_inklusi <- sum(dataku$weight[dataku$miskin_awal == 1 & (is.na(dataku$R2002)|dataku$R2002!=1) & (is.na(dataku$R2005)|dataku$R2005!=1)] * dataku$jart[dataku$miskin_awal == 1 & (is.na(dataku$R2002)|dataku$R2002!=1) & (is.na(dataku$R2005)|dataku$R2005!=1)])
solusi <- sim_results %>%
filter(poverty <= target_poverty) %>%
group_by(scenario) %>%
filter(tambahan == min(tambahan)) %>%
ungroup() %>%
mutate(total_anggaran = case_when(
scenario == "Universal" ~ tambahan * pop_total,
scenario == "Perfect Targeting" ~ tambahan * pop_miskin,
scenario == "Inklusi (Non-PKH/BPNT)" ~ tambahan * pop_inklusi
))
label_data <- sim_results %>% filter(tambahan == 0) %>% mutate(label_text = paste0(round(poverty * 100, 2), "%"))
info_solusi <- solusi %>% filter(scenario == "Perfect Targeting") %>% slice(1)
teks_anggaran <- paste0("Anggaran Turun 1%: Rp ",
format(round(info_solusi$total_anggaran / 1e12, 2), nsmall = 2),
" Triliun\n(Target Khusus Penduduk Miskin: Rp ",
format(info_solusi$tambahan, big.mark=","), "/kapita)")
ggplot(sim_results, aes(x = tambahan, y = poverty, color = scenario)) +
geom_line(size = 1.1) +
geom_hline(yintercept = target_poverty, linetype = "dashed", color = "red") +
annotate("label", x = max(sim_results$tambahan)*0.7, y = target_poverty + 0.005,
label = teks_anggaran, fill = "#FFF9C4", color = "darkred", fontface = "bold", size = 3.5) +
scale_y_continuous(labels = percent, expand = expansion(mult = c(0.1, 0.2))) +
scale_x_continuous(labels = comma) +
theme_minimal() +
labs(title = "Simulasi Dampak Bansos per Kapita terhadap Kemiskinan",
subtitle = "Skenario Tambahan Bantuan di Atas Bantuan Eksisting (PKH, BPNT, Bantuan Pemda)",
x = "Tambahan Bantuan per Kapita (Rp)",
y = "Poverty Rate (%)",
color = "Skenario") +
theme(legend.position = "bottom")

Visualisasi di atas menggambarkan dinamika penurunan angka kemiskinan
terhadap besaran tambahan bantuan sosial per kapita dalam tiga skenario
yang berbeda. Sumbu horizontal (X) menunjukkan nominal tambahan bantuan
yang diberikan, sementara sumbu vertikal (Y) menunjukkan proyeksi angka
kemiskinan yang dihasilkan. Garis horizontal putus-putus berwarna merah
merepresentasikan target kebijakan sebesar 7,47%.
Skenario Perfect Targeting: Menunjukkan efisiensi tertinggi, di
mana kurva turun paling tajam. Ini membuktikan bahwa jika bantuan
diberikan secara eksklusif hanya kepada penduduk miskin, target
penurunan 1% dapat dicapai dengan biaya minimal.
Skenario Inklusi: Skenario ini menyasar penduduk miskin yang
selama ini belum terjangkau PKH/BPNT (exclusion error). Kurva ini
membantu mengidentifikasi besaran “top-up” yang dibutuhkan untuk menutup
celah perlindungan sosial bagi kelompok rentan tersebut.
Skenario Universal: Kurva ini melandai paling lambat karena dana
tersebar ke seluruh lapisan penduduk. Perbedaan jarak antara kurva ini
dengan Perfect Targeting menunjukkan besarnya potensi penghematan
anggaran yang bisa dilakukan melalui perbaikan akurasi data.
Level Provinsi
tabel_cetak <- tabel_akhir_prov %>%
arrange(R101) %>%
select(R101, baseline_pct, target_pct, tambahan_topup_kapita, total_anggaran_miliar)
#print(tabel_cetak, n = Inf)
# Rekap Total Fiskal
total_triliun <- sum(tabel_akhir_prov$total_anggaran_miliar, na.rm = TRUE) / 1000
cat("TOTAL ANGGARAN NASIONAL : Rp", round(total_triliun, 2), "Triliun\n")
## TOTAL ANGGARAN NASIONAL : Rp 22.96 Triliun
Analisis Kebutuhan Fiskal Nasional
Berdasarkan hasil agregasi simulasi dari 38 provinsi, estimasi total
kebutuhan fiskal untuk menurunkan angka kemiskinan nasional sebesar 1
persen poin adalah sebesar Rp 22,96 Triliun. Angka ini merepresentasikan
akumulasi dari biaya intervensi yang disesuaikan dengan karakteristik
kemiskinan dan Garis Kemiskinan di masing-masing wilayah. Perhitungan
ini memberikan gambaran objektif mengenai skala pendanaan yang
diperlukan untuk mencapai target akselerasi penghapusan kemiskinan dalam
jangka pendek.
Nilai Rp 22,96 Triliun ini berfungsi sebagai pedoman bagi perencanaan
anggaran pusat dan daerah. Perlu dicatat bahwa angka ini merupakan
estimasi biaya intervensi langsung kepada penduduk target. Dalam
implementasi praktisnya, angka ini dapat menjadi acuan untuk
mengevaluasi kecukupan alokasi dana bantuan sosial yang sedang berjalan
atau sebagai dasar pengajuan dana tambahan (top-up) dalam mekanisme
perubahan anggaran. Dengan mengetahui nilai fiskal ini, pemerintah dapat
mengukur sejauh mana “harga” dari sebuah target kesejahteraan rakyat
yang ingin dicapai.
total_triliun_prov <- sum(tabel_akhir_prov$total_anggaran_miliar, na.rm = TRUE) / 1000
wb <- createWorkbook()
addWorksheet(wb, "Simulasi_Provinsi")
writeData(wb, "Simulasi_Provinsi", "Hasil Simulasi Per Provinsi (Target Penurunan 1%)", startRow = 1)
writeData(wb, "Simulasi_Provinsi", tabel_akhir_prov %>% arrange(R101), startRow = 3)
saveWorkbook(wb, "Simulasi_Bansos_Provinsi_2026.xlsx", overwrite = TRUE)
Directorate of Welfare Statistics, BPS Statistic Indonesia, saptahas@bps.go.id
LS0tDQp0aXRsZTogIlNpbXVsYXNpIERhbXBhayBCYW50dWFuIFNvc2lhbCA8YnI+IHRlcmhhZGFwIFBlbnVydW5hbiBLZW1pc2tpbmFuIg0KYXV0aG9yOiAiU2FwdGEgSGFzdGhvIFBvbmNvIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IGpvdXJuYWwNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCi0tLQ0KDQpgYGB7PWh0bWx9DQo8c3R5bGU+DQpib2R5ew0KdGV4dC1hbGlnbjoganVzdGlmeX0NCjwvc3R5bGU+DQpgYGANCg0KUGVuYW5nZ3VsYW5nYW4ga2VtaXNraW5hbiB0ZXRhcCBtZW5qYWRpIHByaW9yaXRhcyB1dGFtYSBkYWxhbSBhZ2VuZGEgcGVtYmFuZ3VuYW4gbmFzaW9uYWwgSW5kb25lc2lhLiBOYW11biwgdGFudGFuZ2FuIGJlc2FyIHNlcmluZyBtdW5jdWwgZGFsYW0gbWVuZW50dWthbiBza2VtYSBpbnRlcnZlbnNpIHlhbmcgcGFsaW5nIGVmaXNpZW4gc2VjYXJhIGZpc2thbCBuYW11biB0ZXRhcCBtZW1iZXJpa2FuIGRhbXBhayBvcHRpbWFsLiBEaSB0ZW5nYWgga2V0ZXJiYXRhc2FuIHJ1YW5nIGFuZ2dhcmFuLCBrZWJpamFrYW4gYmFudHVhbiBzb3NpYWwgKGJhbnNvcykgZGl0dW50dXQgdW50dWsgdGlkYWsgaGFueWEgc2VrYWRhciBtZW55YWx1cmthbiBkYW5hLCB0ZXRhcGkganVnYSBoYXJ1cyBwcmVzaXNpIGRhbGFtIG1lbmVudHVrYW4gYmVzYXJhbiAobm9taW5hbCkgZGFuIHRhcmdldCBzYXNhcmFuICh0YXJnZXRpbmcpLg0KDQpMYXBvcmFuIGluaSBtZW55YWppa2FuIHNlYnVhaCBzaW11bGFzaSBkYW1wYWsgYmFudHVhbiBzb3NpYWwgbWVuZ2d1bmFrYW4gZGF0YSBTdXNlbmFzIE1hcmV0IDIwMjUuIEFuYWxpc2lzIGluaSBiZXJ0dWp1YW4gdW50dWsgbWVtcHJlZGlrc2kgc2tlbmFyaW8gdGVyYmFpayBkYWxhbSBtZW51cnVua2FuIGFuZ2thIGtlbWlza2luYW4gc2ViZXNhciAxIHBvaW4gcGVyc2VudGFzZS4gTWVsYWx1aSBwZW5kZWthdGFuIGJlcmJhc2lzIGRhdGEsIGRhcGF0IGRpdWppIGJlcmJhZ2FpIGtlbXVuZ2tpbmFuOiBhcGFrYWggYmFudHVhbiBoYXJ1cyBkaWJlcmlrYW4gc2VjYXJhIHVuaXZlcnNhbCwgYXRhdSBjdWt1cCBkaWZva3Vza2FuIHBhZGEgcGVuZHVkdWsgbWlza2luIHlhbmcgc2VsYW1hIGluaSBiZWx1bSB0ZXJqYW5na2F1IGJhbnR1YW4gZWtzaXN0aW5nPw0KDQpQZW50aW5nbnlhIGFuYWxpc2lzIGluaSB0ZXJsZXRhayBwYWRhIGtlbWFtcHVhbm55YSB1bnR1ayBtZW1iZWRhaCBrZWJ1dHVoYW4gZmlza2FsIGhpbmdnYSB0aW5na2F0IHdpbGF5YWguIE1lbmdpbmdhdCBkaXNwYXJpdGFzIGVrb25vbWkgYW50YXJwcm92aW5zaSB5YW5nIGN1a3VwIGxlYmFyLCBrZWJpamFrYW4gInNhdHUgdWt1cmFuIHVudHVrIHNlbXVhIiAoIF9vbmUgc2l6ZSBmaXRzIGFsbF8pIHNlcmluZ2thbGkga3VyYW5nIGVmZWt0aWYuIE9sZWgga2FyZW5hIGl0dSwgc2ltdWxhc2kgaW5pIGp1Z2EgbWVyaW5jaSBrZWJ1dHVoYW4gdG9wLXVwIGFuZ2dhcmFuIGRpIG1hc2luZy1tYXNpbmcgZGFyaSAzOCBwcm92aW5zaSBkaSBJbmRvbmVzaWEsIGd1bmEgbWVtYXN0aWthbiBiYWh3YSBzZXRpYXAgcnVwaWFoIHlhbmcgZGlhbG9rYXNpa2FuIGJlbmFyLWJlbmFyIGJlcmtvbnRyaWJ1c2kgcGFkYSBha3NlbGVyYXNpIHBlbnVydW5hbiBhbmdrYSBrZW1pc2tpbmFuIG5hc2lvbmFsLg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPVRSVUV9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFKQ0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpwYWNtYW46OnBfbG9hZChoYXZlbiwgZHBseXIsIGdncGxvdDIsIHRpZHlyLCBzY2FsZXMsIHB1cnJyLCBvcGVueGxzeCkNCmBgYA0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Kc2V0d2QoIkQ6LzIuIFBlbmdlbWJhbmdhbiBkaXJpLzEgRXhlcmNpc2UgQmFndXMvSG91c2luZyBBbmFseXNpcyIpDQpkYXRhZ3c8LSByZWFkX3NhdigiS09SMjVHQUJfMDMwOUJBTlNPUy5zYXYiKQ0KYGBgDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQpkYXRha3UgPC0gZGF0YWd3ICU+JQ0KICBzZWxlY3QoUjEwMSwgUjEwMiwgUjEwNSwgUjQwMSwgS0FQSVRBLCBHS19QUk9WLCBGV1QsIA0KICAgICAgICAgUjIwMDIsIFIyMDA1LCBSMjAwNkJJMiwgUjIwMDZCSTMsIFIyMDA2Qkk0LCBSMjAwNkJJNSwNCiAgICAgICAgIFIyMDA5QTEsIFIyMDA5QTIsIFIyMDA5QTMsIFIyMDA5QTQsIFIyMDA5QTUsIFIyMDA5QikgJT4lDQogIG11dGF0ZSgNCiAgICBqYXJ0ID0gYXMubnVtZXJpYyhSNDAxKSwNCiAgICANCiAgICAjIDEuIE5vbWluYWwgUEtIDQogICAgcGtoX3ZhbCA9IGlmZWxzZSghaXMubmEoUjIwMDIpICYgUjIwMDIgPT0gMSwgNDAwMDAwLCAwKSwNCiAgICANCiAgICAjIDIuIEJQTlQgDQogICAgYnBudF90b3RhbF80YmxuID0gcm93U3VtcyhhY3Jvc3MoYyhSMjAwNkJJMiwgUjIwMDZCSTMsIFIyMDA2Qkk0LCBSMjAwNkJJNSwgUjIwMDlCKSksIG5hLnJtID0gVFJVRSksDQogICAgYnBudF92YWwgPSBicG50X3RvdGFsXzRibG4gLyA0LA0KICAgIA0KICAgICMgMy4gQmFudHVhbiBMYWlubnlhDQogICAga29udGludV92YWwgPSByb3dTdW1zKGFjcm9zcyhjKFIyMDA5QTEsIFIyMDA5QTIsIFIyMDA5QTMsIFIyMDA5QTQsIFIyMDA5QTUpKSwgbmEucm0gPSBUUlVFKSwNCiAgICANCiAgICAjIDQuIFRvdGFsIEJhbnNvcyBydXRhIGRhbiBwZXIga2FwaXRhDQogICAgdG90YWxfYmFuc29zX3J0ID0gcGtoX3ZhbCArIGJwbnRfdmFsICsga29udGludV92YWwsDQogICAgYmFuc29zX3Blcl9rYXBpdGEgPSB0b3RhbF9iYW5zb3NfcnQgLyBqYXJ0LA0KICAgIA0KICAgICMgNS4gVmFyaWFiZWwgU2ltdWxhc2kNCiAgICBnayA9IEdLX1BST1YsDQogICAgd2VpZ2h0ID0gRldULA0KICAgIG1pc2tpbl9hd2FsID0gaWZlbHNlKEtBUElUQSA8IGdrLCAxLCAwKQ0KICApDQpgYGANCg0KKipQYXJhbWV0ZXIgQmFzZWxpbmUqKg0KDQpgYGB7cn0NCmJhc2VsaW5lX3BvdmVydHkgPC0gc3VtKGRhdGFrdSRtaXNraW5fYXdhbCAqIGRhdGFrdSR3ZWlnaHQpIC8gc3VtKGRhdGFrdSR3ZWlnaHQpDQp0YXJnZXRfcG92ZXJ0eSA8LSBtYXgoMCwgYmFzZWxpbmVfcG92ZXJ0eSAtIDAuMDEpDQoNCmNhdCgiQmFzZWxpbmUgUG92ZXJ0eSAgOiIsIHJvdW5kKGJhc2VsaW5lX3BvdmVydHkgKiAxMDAsIDIpLCAiJVxuIikNCmNhdCgiVGFyZ2V0IFBvdmVydHkgICAgOiIsIHJvdW5kKHRhcmdldF9wb3ZlcnR5ICogMTAwLCAyKSwgIiVcbiIpDQpgYGAgDQoNClRhaGFwIGF3YWwgYW5hbGlzaXMgYmVyZm9rdXMgcGFkYSBwZW5ldGFwYW4gYmFzZWxpbmUga2VtaXNraW5hbiBtZW5nZ3VuYWthbiBwZW5pbWJhbmcgdW50dWsgbWVyZXByZXNlbnRhc2lrYW4gcG9wdWxhc2kgbmFzaW9uYWwuIEJlcmRhc2Fya2FuIGhhc2lsIHBlbmdvbGFoYW4sIGRpcGVyb2xlaCBhbmdrYSBrZW1pc2tpbmFuIHNlYmVzYXIgOCw0NyUuIEFuZ2thIGluaSBtZW5qYWRpIGFjdWFuIGtydXNpYWwgdW50dWsgbWVuZ3VrdXIgZWZla3Rpdml0YXMgaW50ZXJ2ZW5zaSBiYW50dWFuIHNvc2lhbCB5YW5nIGFrYW4gZGlzaW11bGFzaWthbi4NCg0KU2VqYWxhbiBkZW5nYW4gdGFyZ2V0IGFrc2VsZXJhc2kgcGVuZ2hhcHVzYW4ga2VtaXNraW5hbiwgYW5hbGlzaXMgaW5pIG1lbmV0YXBrYW4gVGFyZ2V0IEtlbWlza2luYW4gYmFydSBzZWJlc2FyIDcsNDclLCBhdGF1IHBlbnVydW5hbiBzZWJlc2FyIDEgcG9pbiBwZXJzZW50YXNlLiBTZWxpc2loIGFudGFyYSBrb25kaXNpIGJhc2VsaW5lIGRhbiB0YXJnZXQgaW5pbGFoIHlhbmcgYWthbiBtZW5qYWRpIGZva3VzIHV0YW1hIGRhbGFtIHBlcmhpdHVuZ2FuIGtlYnV0dWhhbiBmaXNrYWwsIGd1bmEgbWVuZW50dWthbiBiZXJhcGEgYmVzYXIgdGFtYmFoYW4gZGFuYSBiYW50dWFuIHlhbmcgaGFydXMgZGlhbG9rYXNpa2FuIGFnYXIgYW1iYW5nIGJhdGFzIHRhcmdldCB0ZXJzZWJ1dCBkYXBhdCB0ZXJjYXBhaSBzZWNhcmEgZWZla3RpZiBkaSBzZWx1cnVoIHdpbGF5YWguDQoNCiMgTGV2ZWwgTmFzaW9uYWwNCg0KYGBge3IsIGVjaG89RkFMU0V9DQpjYWxjX3NpbSA8LSBmdW5jdGlvbihkZiwgYiwgc2NlbmFyaW9fdHlwZSA9ICJVbml2ZXJzYWwiKSB7DQogIGRmX3NpbSA8LSBkZiAlPiUNCiAgICBtdXRhdGUoDQogICAgICB0YW1iYWhhbiA9IGNhc2Vfd2hlbigNCiAgICAgICAgc2NlbmFyaW9fdHlwZSA9PSAiVW5pdmVyc2FsIiB+IGIsDQogICAgICAgIHNjZW5hcmlvX3R5cGUgPT0gIlBlcmZlY3QiICB+IGlmZWxzZShtaXNraW5fYXdhbCA9PSAxLCBiLCAwKSwNCiAgICAgICAgc2NlbmFyaW9fdHlwZSA9PSAiSW5rbHVzaSIgfiBpZmVsc2UobWlza2luX2F3YWwgPT0gMSAmIChpcy5uYShSMjAwMil8UjIwMDIhPTEpICYgKGlzLm5hKFIyMDA1KXxSMjAwNSE9MSksIGIsIDApLA0KICAgICAgICBUUlVFIH4gMA0KICAgICAgKSwNCiAgICAgIHBlbmdlbHVhcmFuX2JhcnUgPSBLQVBJVEEgKyB0YW1iYWhhbiwNCiAgICAgIG1pc2tpbl9iYXJ1ID0gaWZlbHNlKHBlbmdlbHVhcmFuX2JhcnUgPCBnaywgMSwgMCkNCiAgICApDQogIHN1bShkZl9zaW0kbWlza2luX2JhcnUgKiBkZl9zaW0kd2VpZ2h0KSAvIHN1bShkZl9zaW0kd2VpZ2h0KQ0KfQ0KDQojIFJ1biBJdGVyYXNpDQpzaW1fcmVzdWx0cyA8LSBkYXRhLmZyYW1lKCkNCnN0ZXBfYmFudHVhbiA8LSBzZXEoMCwgMzAwMDAwLCA1MDAwKSANCg0KZm9yIChiIGluIHN0ZXBfYmFudHVhbikgew0KICBzaW1fcmVzdWx0cyA8LSByYmluZChzaW1fcmVzdWx0cywgDQogICAgZGF0YS5mcmFtZSh0YW1iYWhhbiA9IGIsIHBvdmVydHkgPSBjYWxjX3NpbShkYXRha3UsIGIsICJVbml2ZXJzYWwiKSwgc2NlbmFyaW8gPSAiVW5pdmVyc2FsIiksDQogICAgZGF0YS5mcmFtZSh0YW1iYWhhbiA9IGIsIHBvdmVydHkgPSBjYWxjX3NpbShkYXRha3UsIGIsICJQZXJmZWN0IiksIHNjZW5hcmlvID0gIlBlcmZlY3QgVGFyZ2V0aW5nIiksDQogICAgZGF0YS5mcmFtZSh0YW1iYWhhbiA9IGIsIHBvdmVydHkgPSBjYWxjX3NpbShkYXRha3UsIGIsICJJbmtsdXNpIiksIHNjZW5hcmlvID0gIklua2x1c2kgKE5vbi1QS0gvQlBOVCkiKSkNCn0NCmBgYA0KDQoNCmBgYHtyfQ0KcG9wX3RvdGFsIDwtIHN1bShkYXRha3Ukd2VpZ2h0ICogZGF0YWt1JGphcnQpDQpwb3BfbWlza2luIDwtIHN1bShkYXRha3Ukd2VpZ2h0W2RhdGFrdSRtaXNraW5fYXdhbCA9PSAxXSAqIGRhdGFrdSRqYXJ0W2RhdGFrdSRtaXNraW5fYXdhbCA9PSAxXSkNCnBvcF9pbmtsdXNpIDwtIHN1bShkYXRha3Ukd2VpZ2h0W2RhdGFrdSRtaXNraW5fYXdhbCA9PSAxICYgKGlzLm5hKGRhdGFrdSRSMjAwMil8ZGF0YWt1JFIyMDAyIT0xKSAmIChpcy5uYShkYXRha3UkUjIwMDUpfGRhdGFrdSRSMjAwNSE9MSldICogZGF0YWt1JGphcnRbZGF0YWt1JG1pc2tpbl9hd2FsID09IDEgJiAoaXMubmEoZGF0YWt1JFIyMDAyKXxkYXRha3UkUjIwMDIhPTEpICYgKGlzLm5hKGRhdGFrdSRSMjAwNSl8ZGF0YWt1JFIyMDA1IT0xKV0pDQoNCnNvbHVzaSA8LSBzaW1fcmVzdWx0cyAlPiUNCiAgZmlsdGVyKHBvdmVydHkgPD0gdGFyZ2V0X3BvdmVydHkpICU+JQ0KICBncm91cF9ieShzY2VuYXJpbykgJT4lDQogIGZpbHRlcih0YW1iYWhhbiA9PSBtaW4odGFtYmFoYW4pKSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBtdXRhdGUodG90YWxfYW5nZ2FyYW4gPSBjYXNlX3doZW4oDQogICAgc2NlbmFyaW8gPT0gIlVuaXZlcnNhbCIgfiB0YW1iYWhhbiAqIHBvcF90b3RhbCwNCiAgICBzY2VuYXJpbyA9PSAiUGVyZmVjdCBUYXJnZXRpbmciIH4gdGFtYmFoYW4gKiBwb3BfbWlza2luLA0KICAgIHNjZW5hcmlvID09ICJJbmtsdXNpIChOb24tUEtIL0JQTlQpIiB+IHRhbWJhaGFuICogcG9wX2lua2x1c2kNCiAgKSkNCmBgYCANCg0KYGBge3J9DQpsYWJlbF9kYXRhIDwtIHNpbV9yZXN1bHRzICU+JSBmaWx0ZXIodGFtYmFoYW4gPT0gMCkgJT4lIG11dGF0ZShsYWJlbF90ZXh0ID0gcGFzdGUwKHJvdW5kKHBvdmVydHkgKiAxMDAsIDIpLCAiJSIpKQ0KaW5mb19zb2x1c2kgPC0gc29sdXNpICU+JSBmaWx0ZXIoc2NlbmFyaW8gPT0gIlBlcmZlY3QgVGFyZ2V0aW5nIikgJT4lIHNsaWNlKDEpDQoNCnRla3NfYW5nZ2FyYW4gPC0gcGFzdGUwKCJBbmdnYXJhbiBUdXJ1biAxJTogUnAgIiwgDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQocm91bmQoaW5mb19zb2x1c2kkdG90YWxfYW5nZ2FyYW4gLyAxZTEyLCAyKSwgbnNtYWxsID0gMiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgIiBUcmlsaXVuXG4oVGFyZ2V0IEtodXN1cyBQZW5kdWR1ayBNaXNraW46IFJwICIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KGluZm9fc29sdXNpJHRhbWJhaGFuLCBiaWcubWFyaz0iLCIpLCAiL2thcGl0YSkiKQ0KDQpnZ3Bsb3Qoc2ltX3Jlc3VsdHMsIGFlcyh4ID0gdGFtYmFoYW4sIHkgPSBwb3ZlcnR5LCBjb2xvciA9IHNjZW5hcmlvKSkgKw0KICBnZW9tX2xpbmUoc2l6ZSA9IDEuMSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSB0YXJnZXRfcG92ZXJ0eSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAicmVkIikgKw0KICBhbm5vdGF0ZSgibGFiZWwiLCB4ID0gbWF4KHNpbV9yZXN1bHRzJHRhbWJhaGFuKSowLjcsIHkgPSB0YXJnZXRfcG92ZXJ0eSArIDAuMDA1LCANCiAgICAgICAgICAgbGFiZWwgPSB0ZWtzX2FuZ2dhcmFuLCBmaWxsID0gIiNGRkY5QzQiLCBjb2xvciA9ICJkYXJrcmVkIiwgZm9udGZhY2UgPSAiYm9sZCIsIHNpemUgPSAzLjUpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQsIGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gYygwLjEsIDAuMikpKSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHRpdGxlID0gIlNpbXVsYXNpIERhbXBhayBCYW5zb3MgcGVyIEthcGl0YSB0ZXJoYWRhcCBLZW1pc2tpbmFuIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJTa2VuYXJpbyBUYW1iYWhhbiBCYW50dWFuIGRpIEF0YXMgQmFudHVhbiBFa3Npc3RpbmcgKFBLSCwgQlBOVCwgQmFudHVhbiBQZW1kYSkiLA0KICAgICAgIHggPSAiVGFtYmFoYW4gQmFudHVhbiBwZXIgS2FwaXRhIChScCkiLA0KICAgICAgIHkgPSAiUG92ZXJ0eSBSYXRlICglKSIsDQogICAgICAgY29sb3IgPSAiU2tlbmFyaW8iKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KYGBgIA0KDQoNClZpc3VhbGlzYXNpIGRpIGF0YXMgbWVuZ2dhbWJhcmthbiBkaW5hbWlrYSBwZW51cnVuYW4gYW5na2Ega2VtaXNraW5hbiB0ZXJoYWRhcCBiZXNhcmFuIHRhbWJhaGFuIGJhbnR1YW4gc29zaWFsIHBlciBrYXBpdGEgZGFsYW0gdGlnYSBza2VuYXJpbyB5YW5nIGJlcmJlZGEuIFN1bWJ1IGhvcml6b250YWwgKFgpIG1lbnVuanVra2FuIG5vbWluYWwgdGFtYmFoYW4gYmFudHVhbiB5YW5nIGRpYmVyaWthbiwgc2VtZW50YXJhIHN1bWJ1IHZlcnRpa2FsIChZKSBtZW51bmp1a2thbiBwcm95ZWtzaSBhbmdrYSBrZW1pc2tpbmFuIHlhbmcgZGloYXNpbGthbi4gR2FyaXMgaG9yaXpvbnRhbCBwdXR1cy1wdXR1cyBiZXJ3YXJuYSBtZXJhaCBtZXJlcHJlc2VudGFzaWthbiB0YXJnZXQga2ViaWpha2FuIHNlYmVzYXIgNyw0NyUuDQoNCi0gU2tlbmFyaW8gUGVyZmVjdCBUYXJnZXRpbmc6IE1lbnVuanVra2FuIGVmaXNpZW5zaSB0ZXJ0aW5nZ2ksIGRpIG1hbmEga3VydmEgdHVydW4gcGFsaW5nIHRhamFtLiBJbmkgbWVtYnVrdGlrYW4gYmFod2EgamlrYSBiYW50dWFuIGRpYmVyaWthbiBzZWNhcmEgZWtza2x1c2lmIGhhbnlhIGtlcGFkYSBwZW5kdWR1ayBtaXNraW4sIHRhcmdldCBwZW51cnVuYW4gMSUgZGFwYXQgZGljYXBhaSBkZW5nYW4gYmlheWEgbWluaW1hbC4NCg0KLSBTa2VuYXJpbyBJbmtsdXNpOiBTa2VuYXJpbyBpbmkgbWVueWFzYXIgcGVuZHVkdWsgbWlza2luIHlhbmcgc2VsYW1hIGluaSBiZWx1bSB0ZXJqYW5na2F1IFBLSC9CUE5UIChleGNsdXNpb24gZXJyb3IpLiBLdXJ2YSBpbmkgbWVtYmFudHUgbWVuZ2lkZW50aWZpa2FzaSBiZXNhcmFuICJ0b3AtdXAiIHlhbmcgZGlidXR1aGthbiB1bnR1ayBtZW51dHVwIGNlbGFoIHBlcmxpbmR1bmdhbiBzb3NpYWwgYmFnaSBrZWxvbXBvayByZW50YW4gdGVyc2VidXQuDQoNCi0gU2tlbmFyaW8gVW5pdmVyc2FsOiBLdXJ2YSBpbmkgbWVsYW5kYWkgcGFsaW5nIGxhbWJhdCBrYXJlbmEgZGFuYSB0ZXJzZWJhciBrZSBzZWx1cnVoIGxhcGlzYW4gcGVuZHVkdWsuIFBlcmJlZGFhbiBqYXJhayBhbnRhcmEga3VydmEgaW5pIGRlbmdhbiBQZXJmZWN0IFRhcmdldGluZyBtZW51bmp1a2thbiBiZXNhcm55YSBwb3RlbnNpIHBlbmdoZW1hdGFuIGFuZ2dhcmFuIHlhbmcgYmlzYSBkaWxha3VrYW4gbWVsYWx1aSBwZXJiYWlrYW4gYWt1cmFzaSBkYXRhLg0KDQoNCiMgTGV2ZWwgUHJvdmluc2kNCg0KYGBge3IsIGVjaG89RkFMU0V9DQojIDEuIE1lbnlpYXBrYW4gVGFyZ2V0IDElIHBlciBQcm92aW5zaQ0KdGFyZ2V0X3Byb3YgPC0gZGF0YWt1ICU+JQ0KICBncm91cF9ieShSMTAxKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIGJhc2VsaW5lX3BvdmVydHkgPSBzdW0obWlza2luX2F3YWwgKiB3ZWlnaHQpIC8gc3VtKHdlaWdodCksDQogICAgdGFyZ2V0X3BvdmVydHkgPSBtYXgoMCwgYmFzZWxpbmVfcG92ZXJ0eSAtIDAuMDEpLA0KICAgIHBvcF9qaXdhID0gc3VtKHdlaWdodCAqIGphcnQpDQogICkgJT4lDQogIHVuZ3JvdXAoKQ0KDQojIDIuIEZ1bmdzaSB1bnR1ayBtZW5jYXJpIFRvcC1VcCBPcHRpbWFsIHBlciBQcm92aW5zaQ0KIyBiX3N0YXJ0OiBtdWxhaSBkYXJpIDVyYiwgYl9lbmQ6IHNhbXBhaSAxanQsIHN0ZXA6IDVyYg0KY2FyaV90b3B1cCA8LSBmdW5jdGlvbihkZl9wcm92LCB0YXJnZXRfdmFsKSB7DQogIHRvcHVwX3N0ZXBzIDwtIHNlcSg1MDAwLCAxMDAwMDAwLCA1MDAwKQ0KICANCiAgZm9yIChiIGluIHRvcHVwX3N0ZXBzKSB7DQogICAgIyBTaW11bGFzaTogS0FQSVRBIHNhYXQgaW5pIChzdWRhaCBhZGEgYmFuc29zIGVrc2lzdGluZykgKyBUYW1iYWhhbiBCYXJ1DQogICAgcF9zaW0gPC0gZGZfcHJvdiAlPiUNCiAgICAgIG11dGF0ZShwX2JhcnUgPSBLQVBJVEEgKyBiLA0KICAgICAgICAgICAgIG1fYmFydSA9IGlmZWxzZShwX2JhcnUgPCBnaywgMSwgMCkpICU+JQ0KICAgICAgc3VtbWFyaXNlKHAgPSBzdW0obV9iYXJ1ICogd2VpZ2h0KSAvIHN1bSh3ZWlnaHQpKSAlPiUNCiAgICAgIHB1bGwocCkNCiAgICANCiAgICBpZiAocF9zaW0gPD0gdGFyZ2V0X3ZhbCkgcmV0dXJuKGIpDQogIH0NCiAgcmV0dXJuKE5BKQ0KfQ0KDQojIDMuIEVrc2VrdXNpIFNpbXVsYXNpIHBlciBQcm92aW5zaQ0KaGFzaWxfc2ltX3Byb3YgPC0gZGF0YWt1ICU+JQ0KICBncm91cF9zcGxpdChSMTAxKSAlPiUNCiAgcHVycnI6Om1hcF9kZnIoZnVuY3Rpb24oZGZfcHJvdikgew0KICAgIGtkX3Byb3YgPC0gdW5pcXVlKGRmX3Byb3YkUjEwMSkNCiAgICB0YXJnZXRfdmFsIDwtIHRhcmdldF9wcm92JHRhcmdldF9wb3ZlcnR5W3RhcmdldF9wcm92JFIxMDEgPT0ga2RfcHJvdl0NCiAgICANCiAgICAjIENhcmkgbmlsYWkgdG9wLXVwIHlhbmcgZGlidXR1aGthbg0KICAgIHRvcHVwX25lZWRlZCA8LSBjYXJpX3RvcHVwKGRmX3Byb3YsIHRhcmdldF92YWwpDQogICAgDQogICAgIyBIaXR1bmcgYmlheWEgZmlza2FsIHByb3ZpbnNpIHRlcnNlYnV0DQogICAgaml3YV9wcm92IDwtIHRhcmdldF9wcm92JHBvcF9qaXdhW3RhcmdldF9wcm92JFIxMDEgPT0ga2RfcHJvdl0NCiAgICB0b3RhbF9iaWF5YV9ycCA8LSB0b3B1cF9uZWVkZWQgKiBqaXdhX3Byb3YNCiAgICANCiAgICBkYXRhLmZyYW1lKA0KICAgICAgUjEwMSA9IGtkX3Byb3YsDQogICAgICB0YW1iYWhhbl90b3B1cF9rYXBpdGEgPSB0b3B1cF9uZWVkZWQsDQogICAgICB0b3RhbF9hbmdnYXJhbl9taWxpYXIgPSB0b3RhbF9iaWF5YV9ycCAvIDFlOQ0KICAgICkNCiAgfSkNCg0KIyA0LiBKb2luIGRlbmdhbiBCYXNlbGluZSBkYW4gU29ydCBCZXJkYXNhcmthbiBLZW1pc2tpbmFuIFRlcnRpbmdnaQ0KdGFiZWxfYWtoaXJfcHJvdiA8LSB0YXJnZXRfcHJvdiAlPiUNCiAgbGVmdF9qb2luKGhhc2lsX3NpbV9wcm92LCBieSA9ICJSMTAxIikgJT4lDQogIGFycmFuZ2UoZGVzYyhiYXNlbGluZV9wb3ZlcnR5KSkgJT4lICMgU09SVCBCRVJEQVNBUktBTiBQUk9WSU5TSSBURVJNSVNLSU4NCiAgbXV0YXRlKA0KICAgIGJhc2VsaW5lX3BjdCA9IHJvdW5kKGJhc2VsaW5lX3BvdmVydHkgKiAxMDAsIDIpLA0KICAgIHRhcmdldF9wY3QgPSByb3VuZCh0YXJnZXRfcG92ZXJ0eSAqIDEwMCwgMikNCiAgKQ0KYGBgDQoNCmBgYHtyfQ0KdGFiZWxfY2V0YWsgPC0gdGFiZWxfYWtoaXJfcHJvdiAlPiUgDQogIGFycmFuZ2UoUjEwMSkgJT4lIA0KICBzZWxlY3QoUjEwMSwgYmFzZWxpbmVfcGN0LCB0YXJnZXRfcGN0LCB0YW1iYWhhbl90b3B1cF9rYXBpdGEsIHRvdGFsX2FuZ2dhcmFuX21pbGlhcikNCiNwcmludCh0YWJlbF9jZXRhaywgbiA9IEluZikNCg0KDQojIFJla2FwIFRvdGFsIEZpc2thbA0KdG90YWxfdHJpbGl1biA8LSBzdW0odGFiZWxfYWtoaXJfcHJvdiR0b3RhbF9hbmdnYXJhbl9taWxpYXIsIG5hLnJtID0gVFJVRSkgLyAxMDAwDQpjYXQoIlRPVEFMIEFOR0dBUkFOIE5BU0lPTkFMIDogUnAiLCByb3VuZCh0b3RhbF90cmlsaXVuLCAyKSwgIlRyaWxpdW5cbiIpDQpgYGAgDQoNCioqQW5hbGlzaXMgS2VidXR1aGFuIEZpc2thbCBOYXNpb25hbCoqDQoNCkJlcmRhc2Fya2FuIGhhc2lsIGFncmVnYXNpIHNpbXVsYXNpIGRhcmkgMzggcHJvdmluc2ksIGVzdGltYXNpIHRvdGFsIGtlYnV0dWhhbiBmaXNrYWwgdW50dWsgbWVudXJ1bmthbiBhbmdrYSBrZW1pc2tpbmFuIG5hc2lvbmFsIHNlYmVzYXIgMSBwZXJzZW4gcG9pbiBhZGFsYWggc2ViZXNhciBScCAyMiw5NiBUcmlsaXVuLiBBbmdrYSBpbmkgbWVyZXByZXNlbnRhc2lrYW4gYWt1bXVsYXNpIGRhcmkgYmlheWEgaW50ZXJ2ZW5zaSB5YW5nIGRpc2VzdWFpa2FuIGRlbmdhbiBrYXJha3RlcmlzdGlrIGtlbWlza2luYW4gZGFuIEdhcmlzIEtlbWlza2luYW4gZGkgbWFzaW5nLW1hc2luZyB3aWxheWFoLiBQZXJoaXR1bmdhbiBpbmkgbWVtYmVyaWthbiBnYW1iYXJhbiBvYmpla3RpZiBtZW5nZW5haSBza2FsYSBwZW5kYW5hYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNhcGFpIHRhcmdldCBha3NlbGVyYXNpIHBlbmdoYXB1c2FuIGtlbWlza2luYW4gZGFsYW0gamFuZ2thIHBlbmRlay4NCg0KTmlsYWkgUnAgMjIsOTYgVHJpbGl1biBpbmkgYmVyZnVuZ3NpIHNlYmFnYWkgcGVkb21hbiBiYWdpIHBlcmVuY2FuYWFuIGFuZ2dhcmFuIHB1c2F0IGRhbiBkYWVyYWguIFBlcmx1IGRpY2F0YXQgYmFod2EgYW5na2EgaW5pIG1lcnVwYWthbiBlc3RpbWFzaSBiaWF5YSBpbnRlcnZlbnNpIGxhbmdzdW5nIGtlcGFkYSBwZW5kdWR1ayB0YXJnZXQuIERhbGFtIGltcGxlbWVudGFzaSBwcmFrdGlzbnlhLCBhbmdrYSBpbmkgZGFwYXQgbWVuamFkaSBhY3VhbiB1bnR1ayBtZW5nZXZhbHVhc2kga2VjdWt1cGFuIGFsb2thc2kgZGFuYSBiYW50dWFuIHNvc2lhbCB5YW5nIHNlZGFuZyBiZXJqYWxhbiBhdGF1IHNlYmFnYWkgZGFzYXIgcGVuZ2FqdWFuIGRhbmEgdGFtYmFoYW4gKHRvcC11cCkgZGFsYW0gbWVrYW5pc21lIHBlcnViYWhhbiBhbmdnYXJhbi4gRGVuZ2FuIG1lbmdldGFodWkgbmlsYWkgZmlza2FsIGluaSwgcGVtZXJpbnRhaCBkYXBhdCBtZW5ndWt1ciBzZWphdWggbWFuYSAiaGFyZ2EiIGRhcmkgc2VidWFoIHRhcmdldCBrZXNlamFodGVyYWFuIHJha3lhdCB5YW5nIGluZ2luIGRpY2FwYWkuDQoNCg0KYGBge3J9DQp0b3RhbF90cmlsaXVuX3Byb3YgPC0gc3VtKHRhYmVsX2FraGlyX3Byb3YkdG90YWxfYW5nZ2FyYW5fbWlsaWFyLCBuYS5ybSA9IFRSVUUpIC8gMTAwMA0Kd2IgPC0gY3JlYXRlV29ya2Jvb2soKQ0KYWRkV29ya3NoZWV0KHdiLCAiU2ltdWxhc2lfUHJvdmluc2kiKQ0Kd3JpdGVEYXRhKHdiLCAiU2ltdWxhc2lfUHJvdmluc2kiLCAiSGFzaWwgU2ltdWxhc2kgUGVyIFByb3ZpbnNpIChUYXJnZXQgUGVudXJ1bmFuIDElKSIsIHN0YXJ0Um93ID0gMSkNCndyaXRlRGF0YSh3YiwgIlNpbXVsYXNpX1Byb3ZpbnNpIiwgdGFiZWxfYWtoaXJfcHJvdiAlPiUgYXJyYW5nZShSMTAxKSwgc3RhcnRSb3cgPSAzKQ0Kc2F2ZVdvcmtib29rKHdiLCAiU2ltdWxhc2lfQmFuc29zX1Byb3ZpbnNpXzIwMjYueGxzeCIsIG92ZXJ3cml0ZSA9IFRSVUUpDQoNCmBgYCAgDQoNCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiBEaXJlY3RvcmF0ZSBvZiBXZWxmYXJlIFN0YXRpc3RpY3MsIEJQUyBTdGF0aXN0aWMgSW5kb25lc2lhLCBzYXB0YWhhc0BicHMuZ28uaWQNCg0KDQo=