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.

1 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.

2 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,

LS0tDQp0aXRsZTogIlNpbXVsYXNpIERhbXBhayBCYW50dWFuIFNvc2lhbCA8YnI+IHRlcmhhZGFwIFBlbnVydW5hbiBLZW1pc2tpbmFuIg0KYXV0aG9yOiAiU2FwdGEgSGFzdGhvIFBvbmNvIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogc2hvdw0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdGhlbWU6IGpvdXJuYWwNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogIHdvcmRfZG9jdW1lbnQ6DQogICAgdG9jOiB5ZXMNCi0tLQ0KDQpgYGB7PWh0bWx9DQo8c3R5bGU+DQpib2R5ew0KdGV4dC1hbGlnbjoganVzdGlmeX0NCjwvc3R5bGU+DQpgYGANCg0KUGVuYW5nZ3VsYW5nYW4ga2VtaXNraW5hbiB0ZXRhcCBtZW5qYWRpIHByaW9yaXRhcyB1dGFtYSBkYWxhbSBhZ2VuZGEgcGVtYmFuZ3VuYW4gbmFzaW9uYWwgSW5kb25lc2lhLiBOYW11biwgdGFudGFuZ2FuIGJlc2FyIHNlcmluZyBtdW5jdWwgZGFsYW0gbWVuZW50dWthbiBza2VtYSBpbnRlcnZlbnNpIHlhbmcgcGFsaW5nIGVmaXNpZW4gc2VjYXJhIGZpc2thbCBuYW11biB0ZXRhcCBtZW1iZXJpa2FuIGRhbXBhayBvcHRpbWFsLiBEaSB0ZW5nYWgga2V0ZXJiYXRhc2FuIHJ1YW5nIGFuZ2dhcmFuLCBrZWJpamFrYW4gYmFudHVhbiBzb3NpYWwgKGJhbnNvcykgZGl0dW50dXQgdW50dWsgdGlkYWsgaGFueWEgc2VrYWRhciBtZW55YWx1cmthbiBkYW5hLCB0ZXRhcGkganVnYSBoYXJ1cyBwcmVzaXNpIGRhbGFtIG1lbmVudHVrYW4gYmVzYXJhbiAobm9taW5hbCkgZGFuIHRhcmdldCBzYXNhcmFuICh0YXJnZXRpbmcpLg0KDQpMYXBvcmFuIGluaSBtZW55YWppa2FuIHNlYnVhaCBzaW11bGFzaSBkYW1wYWsgYmFudHVhbiBzb3NpYWwgbWVuZ2d1bmFrYW4gZGF0YSBTdXNlbmFzIE1hcmV0IDIwMjUuIEFuYWxpc2lzIGluaSBiZXJ0dWp1YW4gdW50dWsgbWVtcHJlZGlrc2kgc2tlbmFyaW8gdGVyYmFpayBkYWxhbSBtZW51cnVua2FuIGFuZ2thIGtlbWlza2luYW4gc2ViZXNhciAxIHBvaW4gcGVyc2VudGFzZS4gTWVsYWx1aSBwZW5kZWthdGFuIGJlcmJhc2lzIGRhdGEsIGRhcGF0IGRpdWppIGJlcmJhZ2FpIGtlbXVuZ2tpbmFuOiBhcGFrYWggYmFudHVhbiBoYXJ1cyBkaWJlcmlrYW4gc2VjYXJhIHVuaXZlcnNhbCwgYXRhdSBjdWt1cCBkaWZva3Vza2FuIHBhZGEgcGVuZHVkdWsgbWlza2luIHlhbmcgc2VsYW1hIGluaSBiZWx1bSB0ZXJqYW5na2F1IGJhbnR1YW4gZWtzaXN0aW5nPw0KDQpQZW50aW5nbnlhIGFuYWxpc2lzIGluaSB0ZXJsZXRhayBwYWRhIGtlbWFtcHVhbm55YSB1bnR1ayBtZW1iZWRhaCBrZWJ1dHVoYW4gZmlza2FsIGhpbmdnYSB0aW5na2F0IHdpbGF5YWguIE1lbmdpbmdhdCBkaXNwYXJpdGFzIGVrb25vbWkgYW50YXJwcm92aW5zaSB5YW5nIGN1a3VwIGxlYmFyLCBrZWJpamFrYW4gInNhdHUgdWt1cmFuIHVudHVrIHNlbXVhIiAoIF9vbmUgc2l6ZSBmaXRzIGFsbF8pIHNlcmluZ2thbGkga3VyYW5nIGVmZWt0aWYuIE9sZWgga2FyZW5hIGl0dSwgc2ltdWxhc2kgaW5pIGp1Z2EgbWVyaW5jaSBrZWJ1dHVoYW4gdG9wLXVwIGFuZ2dhcmFuIGRpIG1hc2luZy1tYXNpbmcgZGFyaSAzOCBwcm92aW5zaSBkaSBJbmRvbmVzaWEsIGd1bmEgbWVtYXN0aWthbiBiYWh3YSBzZXRpYXAgcnVwaWFoIHlhbmcgZGlhbG9rYXNpa2FuIGJlbmFyLWJlbmFyIGJlcmtvbnRyaWJ1c2kgcGFkYSBha3NlbGVyYXNpIHBlbnVydW5hbiBhbmdrYSBrZW1pc2tpbmFuIG5hc2lvbmFsLg0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPVRSVUV9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFKQ0KYGBgDQoNCg0KYGBge3IsIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0UsIGVjaG89RkFMU0V9DQpwYWNtYW46OnBfbG9hZChoYXZlbiwgZHBseXIsIGdncGxvdDIsIHRpZHlyLCBzY2FsZXMsIHB1cnJyLCBvcGVueGxzeCkNCmBgYA0KDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0Kc2V0d2QoIkQ6LzIuIFBlbmdlbWJhbmdhbiBkaXJpLzEgRXhlcmNpc2UgQmFndXMvSG91c2luZyBBbmFseXNpcyIpDQpkYXRhZ3c8LSByZWFkX3NhdigiS09SMjVHQUJfMDMwOUJBTlNPUy5zYXYiKQ0KYGBgDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQpkYXRha3UgPC0gZGF0YWd3ICU+JQ0KICBzZWxlY3QoUjEwMSwgUjEwMiwgUjEwNSwgUjQwMSwgS0FQSVRBLCBHS19QUk9WLCBGV1QsIA0KICAgICAgICAgUjIwMDIsIFIyMDA1LCBSMjAwNkJJMiwgUjIwMDZCSTMsIFIyMDA2Qkk0LCBSMjAwNkJJNSwNCiAgICAgICAgIFIyMDA5QTEsIFIyMDA5QTIsIFIyMDA5QTMsIFIyMDA5QTQsIFIyMDA5QTUsIFIyMDA5QikgJT4lDQogIG11dGF0ZSgNCiAgICBqYXJ0ID0gYXMubnVtZXJpYyhSNDAxKSwNCiAgICANCiAgICAjIDEuIE5vbWluYWwgUEtIDQogICAgcGtoX3ZhbCA9IGlmZWxzZSghaXMubmEoUjIwMDIpICYgUjIwMDIgPT0gMSwgNDAwMDAwLCAwKSwNCiAgICANCiAgICAjIDIuIEJQTlQgDQogICAgYnBudF90b3RhbF80YmxuID0gcm93U3VtcyhhY3Jvc3MoYyhSMjAwNkJJMiwgUjIwMDZCSTMsIFIyMDA2Qkk0LCBSMjAwNkJJNSwgUjIwMDlCKSksIG5hLnJtID0gVFJVRSksDQogICAgYnBudF92YWwgPSBicG50X3RvdGFsXzRibG4gLyA0LA0KICAgIA0KICAgICMgMy4gQmFudHVhbiBMYWlubnlhDQogICAga29udGludV92YWwgPSByb3dTdW1zKGFjcm9zcyhjKFIyMDA5QTEsIFIyMDA5QTIsIFIyMDA5QTMsIFIyMDA5QTQsIFIyMDA5QTUpKSwgbmEucm0gPSBUUlVFKSwNCiAgICANCiAgICAjIDQuIFRvdGFsIEJhbnNvcyBydXRhIGRhbiBwZXIga2FwaXRhDQogICAgdG90YWxfYmFuc29zX3J0ID0gcGtoX3ZhbCArIGJwbnRfdmFsICsga29udGludV92YWwsDQogICAgYmFuc29zX3Blcl9rYXBpdGEgPSB0b3RhbF9iYW5zb3NfcnQgLyBqYXJ0LA0KICAgIA0KICAgICMgNS4gVmFyaWFiZWwgU2ltdWxhc2kNCiAgICBnayA9IEdLX1BST1YsDQogICAgd2VpZ2h0ID0gRldULA0KICAgIG1pc2tpbl9hd2FsID0gaWZlbHNlKEtBUElUQSA8IGdrLCAxLCAwKQ0KICApDQpgYGANCg0KKipQYXJhbWV0ZXIgQmFzZWxpbmUqKg0KDQpgYGB7cn0NCmJhc2VsaW5lX3BvdmVydHkgPC0gc3VtKGRhdGFrdSRtaXNraW5fYXdhbCAqIGRhdGFrdSR3ZWlnaHQpIC8gc3VtKGRhdGFrdSR3ZWlnaHQpDQp0YXJnZXRfcG92ZXJ0eSA8LSBtYXgoMCwgYmFzZWxpbmVfcG92ZXJ0eSAtIDAuMDEpDQoNCmNhdCgiQmFzZWxpbmUgUG92ZXJ0eSAgOiIsIHJvdW5kKGJhc2VsaW5lX3BvdmVydHkgKiAxMDAsIDIpLCAiJVxuIikNCmNhdCgiVGFyZ2V0IFBvdmVydHkgICAgOiIsIHJvdW5kKHRhcmdldF9wb3ZlcnR5ICogMTAwLCAyKSwgIiVcbiIpDQpgYGAgDQoNClRhaGFwIGF3YWwgYW5hbGlzaXMgYmVyZm9rdXMgcGFkYSBwZW5ldGFwYW4gYmFzZWxpbmUga2VtaXNraW5hbiBtZW5nZ3VuYWthbiBwZW5pbWJhbmcgdW50dWsgbWVyZXByZXNlbnRhc2lrYW4gcG9wdWxhc2kgbmFzaW9uYWwuIEJlcmRhc2Fya2FuIGhhc2lsIHBlbmdvbGFoYW4sIGRpcGVyb2xlaCBhbmdrYSBrZW1pc2tpbmFuIHNlYmVzYXIgOCw0NyUuIEFuZ2thIGluaSBtZW5qYWRpIGFjdWFuIGtydXNpYWwgdW50dWsgbWVuZ3VrdXIgZWZla3Rpdml0YXMgaW50ZXJ2ZW5zaSBiYW50dWFuIHNvc2lhbCB5YW5nIGFrYW4gZGlzaW11bGFzaWthbi4NCg0KU2VqYWxhbiBkZW5nYW4gdGFyZ2V0IGFrc2VsZXJhc2kgcGVuZ2hhcHVzYW4ga2VtaXNraW5hbiwgYW5hbGlzaXMgaW5pIG1lbmV0YXBrYW4gVGFyZ2V0IEtlbWlza2luYW4gYmFydSBzZWJlc2FyIDcsNDclLCBhdGF1IHBlbnVydW5hbiBzZWJlc2FyIDEgcG9pbiBwZXJzZW50YXNlLiBTZWxpc2loIGFudGFyYSBrb25kaXNpIGJhc2VsaW5lIGRhbiB0YXJnZXQgaW5pbGFoIHlhbmcgYWthbiBtZW5qYWRpIGZva3VzIHV0YW1hIGRhbGFtIHBlcmhpdHVuZ2FuIGtlYnV0dWhhbiBmaXNrYWwsIGd1bmEgbWVuZW50dWthbiBiZXJhcGEgYmVzYXIgdGFtYmFoYW4gZGFuYSBiYW50dWFuIHlhbmcgaGFydXMgZGlhbG9rYXNpa2FuIGFnYXIgYW1iYW5nIGJhdGFzIHRhcmdldCB0ZXJzZWJ1dCBkYXBhdCB0ZXJjYXBhaSBzZWNhcmEgZWZla3RpZiBkaSBzZWx1cnVoIHdpbGF5YWguDQoNCiMgTGV2ZWwgTmFzaW9uYWwNCg0KYGBge3IsIGVjaG89RkFMU0V9DQpjYWxjX3NpbSA8LSBmdW5jdGlvbihkZiwgYiwgc2NlbmFyaW9fdHlwZSA9ICJVbml2ZXJzYWwiKSB7DQogIGRmX3NpbSA8LSBkZiAlPiUNCiAgICBtdXRhdGUoDQogICAgICB0YW1iYWhhbiA9IGNhc2Vfd2hlbigNCiAgICAgICAgc2NlbmFyaW9fdHlwZSA9PSAiVW5pdmVyc2FsIiB+IGIsDQogICAgICAgIHNjZW5hcmlvX3R5cGUgPT0gIlBlcmZlY3QiICB+IGlmZWxzZShtaXNraW5fYXdhbCA9PSAxLCBiLCAwKSwNCiAgICAgICAgc2NlbmFyaW9fdHlwZSA9PSAiSW5rbHVzaSIgfiBpZmVsc2UobWlza2luX2F3YWwgPT0gMSAmIChpcy5uYShSMjAwMil8UjIwMDIhPTEpICYgKGlzLm5hKFIyMDA1KXxSMjAwNSE9MSksIGIsIDApLA0KICAgICAgICBUUlVFIH4gMA0KICAgICAgKSwNCiAgICAgIHBlbmdlbHVhcmFuX2JhcnUgPSBLQVBJVEEgKyB0YW1iYWhhbiwNCiAgICAgIG1pc2tpbl9iYXJ1ID0gaWZlbHNlKHBlbmdlbHVhcmFuX2JhcnUgPCBnaywgMSwgMCkNCiAgICApDQogIHN1bShkZl9zaW0kbWlza2luX2JhcnUgKiBkZl9zaW0kd2VpZ2h0KSAvIHN1bShkZl9zaW0kd2VpZ2h0KQ0KfQ0KDQojIFJ1biBJdGVyYXNpDQpzaW1fcmVzdWx0cyA8LSBkYXRhLmZyYW1lKCkNCnN0ZXBfYmFudHVhbiA8LSBzZXEoMCwgMzAwMDAwLCA1MDAwKSANCg0KZm9yIChiIGluIHN0ZXBfYmFudHVhbikgew0KICBzaW1fcmVzdWx0cyA8LSByYmluZChzaW1fcmVzdWx0cywgDQogICAgZGF0YS5mcmFtZSh0YW1iYWhhbiA9IGIsIHBvdmVydHkgPSBjYWxjX3NpbShkYXRha3UsIGIsICJVbml2ZXJzYWwiKSwgc2NlbmFyaW8gPSAiVW5pdmVyc2FsIiksDQogICAgZGF0YS5mcmFtZSh0YW1iYWhhbiA9IGIsIHBvdmVydHkgPSBjYWxjX3NpbShkYXRha3UsIGIsICJQZXJmZWN0IiksIHNjZW5hcmlvID0gIlBlcmZlY3QgVGFyZ2V0aW5nIiksDQogICAgZGF0YS5mcmFtZSh0YW1iYWhhbiA9IGIsIHBvdmVydHkgPSBjYWxjX3NpbShkYXRha3UsIGIsICJJbmtsdXNpIiksIHNjZW5hcmlvID0gIklua2x1c2kgKE5vbi1QS0gvQlBOVCkiKSkNCn0NCmBgYA0KDQoNCmBgYHtyfQ0KcG9wX3RvdGFsIDwtIHN1bShkYXRha3Ukd2VpZ2h0ICogZGF0YWt1JGphcnQpDQpwb3BfbWlza2luIDwtIHN1bShkYXRha3Ukd2VpZ2h0W2RhdGFrdSRtaXNraW5fYXdhbCA9PSAxXSAqIGRhdGFrdSRqYXJ0W2RhdGFrdSRtaXNraW5fYXdhbCA9PSAxXSkNCnBvcF9pbmtsdXNpIDwtIHN1bShkYXRha3Ukd2VpZ2h0W2RhdGFrdSRtaXNraW5fYXdhbCA9PSAxICYgKGlzLm5hKGRhdGFrdSRSMjAwMil8ZGF0YWt1JFIyMDAyIT0xKSAmIChpcy5uYShkYXRha3UkUjIwMDUpfGRhdGFrdSRSMjAwNSE9MSldICogZGF0YWt1JGphcnRbZGF0YWt1JG1pc2tpbl9hd2FsID09IDEgJiAoaXMubmEoZGF0YWt1JFIyMDAyKXxkYXRha3UkUjIwMDIhPTEpICYgKGlzLm5hKGRhdGFrdSRSMjAwNSl8ZGF0YWt1JFIyMDA1IT0xKV0pDQoNCnNvbHVzaSA8LSBzaW1fcmVzdWx0cyAlPiUNCiAgZmlsdGVyKHBvdmVydHkgPD0gdGFyZ2V0X3BvdmVydHkpICU+JQ0KICBncm91cF9ieShzY2VuYXJpbykgJT4lDQogIGZpbHRlcih0YW1iYWhhbiA9PSBtaW4odGFtYmFoYW4pKSAlPiUNCiAgdW5ncm91cCgpICU+JQ0KICBtdXRhdGUodG90YWxfYW5nZ2FyYW4gPSBjYXNlX3doZW4oDQogICAgc2NlbmFyaW8gPT0gIlVuaXZlcnNhbCIgfiB0YW1iYWhhbiAqIHBvcF90b3RhbCwNCiAgICBzY2VuYXJpbyA9PSAiUGVyZmVjdCBUYXJnZXRpbmciIH4gdGFtYmFoYW4gKiBwb3BfbWlza2luLA0KICAgIHNjZW5hcmlvID09ICJJbmtsdXNpIChOb24tUEtIL0JQTlQpIiB+IHRhbWJhaGFuICogcG9wX2lua2x1c2kNCiAgKSkNCmBgYCANCg0KYGBge3J9DQpsYWJlbF9kYXRhIDwtIHNpbV9yZXN1bHRzICU+JSBmaWx0ZXIodGFtYmFoYW4gPT0gMCkgJT4lIG11dGF0ZShsYWJlbF90ZXh0ID0gcGFzdGUwKHJvdW5kKHBvdmVydHkgKiAxMDAsIDIpLCAiJSIpKQ0KaW5mb19zb2x1c2kgPC0gc29sdXNpICU+JSBmaWx0ZXIoc2NlbmFyaW8gPT0gIlBlcmZlY3QgVGFyZ2V0aW5nIikgJT4lIHNsaWNlKDEpDQoNCnRla3NfYW5nZ2FyYW4gPC0gcGFzdGUwKCJBbmdnYXJhbiBUdXJ1biAxJTogUnAgIiwgDQogICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQocm91bmQoaW5mb19zb2x1c2kkdG90YWxfYW5nZ2FyYW4gLyAxZTEyLCAyKSwgbnNtYWxsID0gMiksIA0KICAgICAgICAgICAgICAgICAgICAgICAgIiBUcmlsaXVuXG4oVGFyZ2V0IEtodXN1cyBQZW5kdWR1ayBNaXNraW46IFJwICIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0KGluZm9fc29sdXNpJHRhbWJhaGFuLCBiaWcubWFyaz0iLCIpLCAiL2thcGl0YSkiKQ0KDQpnZ3Bsb3Qoc2ltX3Jlc3VsdHMsIGFlcyh4ID0gdGFtYmFoYW4sIHkgPSBwb3ZlcnR5LCBjb2xvciA9IHNjZW5hcmlvKSkgKw0KICBnZW9tX2xpbmUoc2l6ZSA9IDEuMSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSB0YXJnZXRfcG92ZXJ0eSwgbGluZXR5cGUgPSAiZGFzaGVkIiwgY29sb3IgPSAicmVkIikgKw0KICBhbm5vdGF0ZSgibGFiZWwiLCB4ID0gbWF4KHNpbV9yZXN1bHRzJHRhbWJhaGFuKSowLjcsIHkgPSB0YXJnZXRfcG92ZXJ0eSArIDAuMDA1LCANCiAgICAgICAgICAgbGFiZWwgPSB0ZWtzX2FuZ2dhcmFuLCBmaWxsID0gIiNGRkY5QzQiLCBjb2xvciA9ICJkYXJrcmVkIiwgZm9udGZhY2UgPSAiYm9sZCIsIHNpemUgPSAzLjUpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHBlcmNlbnQsIGV4cGFuZCA9IGV4cGFuc2lvbihtdWx0ID0gYygwLjEsIDAuMikpKSArDQogIHNjYWxlX3hfY29udGludW91cyhsYWJlbHMgPSBjb21tYSkgKw0KICB0aGVtZV9taW5pbWFsKCkgKw0KICBsYWJzKHRpdGxlID0gIlNpbXVsYXNpIERhbXBhayBCYW5zb3MgcGVyIEthcGl0YSB0ZXJoYWRhcCBLZW1pc2tpbmFuIiwNCiAgICAgICBzdWJ0aXRsZSA9ICJTa2VuYXJpbyBUYW1iYWhhbiBCYW50dWFuIGRpIEF0YXMgQmFudHVhbiBFa3Npc3RpbmcgKFBLSCwgQlBOVCwgQmFudHVhbiBQZW1kYSkiLA0KICAgICAgIHggPSAiVGFtYmFoYW4gQmFudHVhbiBwZXIgS2FwaXRhIChScCkiLA0KICAgICAgIHkgPSAiUG92ZXJ0eSBSYXRlICglKSIsDQogICAgICAgY29sb3IgPSAiU2tlbmFyaW8iKSArDQogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKQ0KYGBgIA0KDQoNClZpc3VhbGlzYXNpIGRpIGF0YXMgbWVuZ2dhbWJhcmthbiBkaW5hbWlrYSBwZW51cnVuYW4gYW5na2Ega2VtaXNraW5hbiB0ZXJoYWRhcCBiZXNhcmFuIHRhbWJhaGFuIGJhbnR1YW4gc29zaWFsIHBlciBrYXBpdGEgZGFsYW0gdGlnYSBza2VuYXJpbyB5YW5nIGJlcmJlZGEuIFN1bWJ1IGhvcml6b250YWwgKFgpIG1lbnVuanVra2FuIG5vbWluYWwgdGFtYmFoYW4gYmFudHVhbiB5YW5nIGRpYmVyaWthbiwgc2VtZW50YXJhIHN1bWJ1IHZlcnRpa2FsIChZKSBtZW51bmp1a2thbiBwcm95ZWtzaSBhbmdrYSBrZW1pc2tpbmFuIHlhbmcgZGloYXNpbGthbi4gR2FyaXMgaG9yaXpvbnRhbCBwdXR1cy1wdXR1cyBiZXJ3YXJuYSBtZXJhaCBtZXJlcHJlc2VudGFzaWthbiB0YXJnZXQga2ViaWpha2FuIHNlYmVzYXIgNyw0NyUuDQoNCi0gU2tlbmFyaW8gUGVyZmVjdCBUYXJnZXRpbmc6IE1lbnVuanVra2FuIGVmaXNpZW5zaSB0ZXJ0aW5nZ2ksIGRpIG1hbmEga3VydmEgdHVydW4gcGFsaW5nIHRhamFtLiBJbmkgbWVtYnVrdGlrYW4gYmFod2EgamlrYSBiYW50dWFuIGRpYmVyaWthbiBzZWNhcmEgZWtza2x1c2lmIGhhbnlhIGtlcGFkYSBwZW5kdWR1ayBtaXNraW4sIHRhcmdldCBwZW51cnVuYW4gMSUgZGFwYXQgZGljYXBhaSBkZW5nYW4gYmlheWEgbWluaW1hbC4NCg0KLSBTa2VuYXJpbyBJbmtsdXNpOiBTa2VuYXJpbyBpbmkgbWVueWFzYXIgcGVuZHVkdWsgbWlza2luIHlhbmcgc2VsYW1hIGluaSBiZWx1bSB0ZXJqYW5na2F1IFBLSC9CUE5UIChleGNsdXNpb24gZXJyb3IpLiBLdXJ2YSBpbmkgbWVtYmFudHUgbWVuZ2lkZW50aWZpa2FzaSBiZXNhcmFuICJ0b3AtdXAiIHlhbmcgZGlidXR1aGthbiB1bnR1ayBtZW51dHVwIGNlbGFoIHBlcmxpbmR1bmdhbiBzb3NpYWwgYmFnaSBrZWxvbXBvayByZW50YW4gdGVyc2VidXQuDQoNCi0gU2tlbmFyaW8gVW5pdmVyc2FsOiBLdXJ2YSBpbmkgbWVsYW5kYWkgcGFsaW5nIGxhbWJhdCBrYXJlbmEgZGFuYSB0ZXJzZWJhciBrZSBzZWx1cnVoIGxhcGlzYW4gcGVuZHVkdWsuIFBlcmJlZGFhbiBqYXJhayBhbnRhcmEga3VydmEgaW5pIGRlbmdhbiBQZXJmZWN0IFRhcmdldGluZyBtZW51bmp1a2thbiBiZXNhcm55YSBwb3RlbnNpIHBlbmdoZW1hdGFuIGFuZ2dhcmFuIHlhbmcgYmlzYSBkaWxha3VrYW4gbWVsYWx1aSBwZXJiYWlrYW4gYWt1cmFzaSBkYXRhLg0KDQoNCiMgTGV2ZWwgUHJvdmluc2kNCg0KYGBge3IsIGVjaG89RkFMU0V9DQojIDEuIE1lbnlpYXBrYW4gVGFyZ2V0IDElIHBlciBQcm92aW5zaQ0KdGFyZ2V0X3Byb3YgPC0gZGF0YWt1ICU+JQ0KICBncm91cF9ieShSMTAxKSAlPiUNCiAgc3VtbWFyaXNlKA0KICAgIGJhc2VsaW5lX3BvdmVydHkgPSBzdW0obWlza2luX2F3YWwgKiB3ZWlnaHQpIC8gc3VtKHdlaWdodCksDQogICAgdGFyZ2V0X3BvdmVydHkgPSBtYXgoMCwgYmFzZWxpbmVfcG92ZXJ0eSAtIDAuMDEpLA0KICAgIHBvcF9qaXdhID0gc3VtKHdlaWdodCAqIGphcnQpDQogICkgJT4lDQogIHVuZ3JvdXAoKQ0KDQojIDIuIEZ1bmdzaSB1bnR1ayBtZW5jYXJpIFRvcC1VcCBPcHRpbWFsIHBlciBQcm92aW5zaQ0KIyBiX3N0YXJ0OiBtdWxhaSBkYXJpIDVyYiwgYl9lbmQ6IHNhbXBhaSAxanQsIHN0ZXA6IDVyYg0KY2FyaV90b3B1cCA8LSBmdW5jdGlvbihkZl9wcm92LCB0YXJnZXRfdmFsKSB7DQogIHRvcHVwX3N0ZXBzIDwtIHNlcSg1MDAwLCAxMDAwMDAwLCA1MDAwKQ0KICANCiAgZm9yIChiIGluIHRvcHVwX3N0ZXBzKSB7DQogICAgIyBTaW11bGFzaTogS0FQSVRBIHNhYXQgaW5pIChzdWRhaCBhZGEgYmFuc29zIGVrc2lzdGluZykgKyBUYW1iYWhhbiBCYXJ1DQogICAgcF9zaW0gPC0gZGZfcHJvdiAlPiUNCiAgICAgIG11dGF0ZShwX2JhcnUgPSBLQVBJVEEgKyBiLA0KICAgICAgICAgICAgIG1fYmFydSA9IGlmZWxzZShwX2JhcnUgPCBnaywgMSwgMCkpICU+JQ0KICAgICAgc3VtbWFyaXNlKHAgPSBzdW0obV9iYXJ1ICogd2VpZ2h0KSAvIHN1bSh3ZWlnaHQpKSAlPiUNCiAgICAgIHB1bGwocCkNCiAgICANCiAgICBpZiAocF9zaW0gPD0gdGFyZ2V0X3ZhbCkgcmV0dXJuKGIpDQogIH0NCiAgcmV0dXJuKE5BKQ0KfQ0KDQojIDMuIEVrc2VrdXNpIFNpbXVsYXNpIHBlciBQcm92aW5zaQ0KaGFzaWxfc2ltX3Byb3YgPC0gZGF0YWt1ICU+JQ0KICBncm91cF9zcGxpdChSMTAxKSAlPiUNCiAgcHVycnI6Om1hcF9kZnIoZnVuY3Rpb24oZGZfcHJvdikgew0KICAgIGtkX3Byb3YgPC0gdW5pcXVlKGRmX3Byb3YkUjEwMSkNCiAgICB0YXJnZXRfdmFsIDwtIHRhcmdldF9wcm92JHRhcmdldF9wb3ZlcnR5W3RhcmdldF9wcm92JFIxMDEgPT0ga2RfcHJvdl0NCiAgICANCiAgICAjIENhcmkgbmlsYWkgdG9wLXVwIHlhbmcgZGlidXR1aGthbg0KICAgIHRvcHVwX25lZWRlZCA8LSBjYXJpX3RvcHVwKGRmX3Byb3YsIHRhcmdldF92YWwpDQogICAgDQogICAgIyBIaXR1bmcgYmlheWEgZmlza2FsIHByb3ZpbnNpIHRlcnNlYnV0DQogICAgaml3YV9wcm92IDwtIHRhcmdldF9wcm92JHBvcF9qaXdhW3RhcmdldF9wcm92JFIxMDEgPT0ga2RfcHJvdl0NCiAgICB0b3RhbF9iaWF5YV9ycCA8LSB0b3B1cF9uZWVkZWQgKiBqaXdhX3Byb3YNCiAgICANCiAgICBkYXRhLmZyYW1lKA0KICAgICAgUjEwMSA9IGtkX3Byb3YsDQogICAgICB0YW1iYWhhbl90b3B1cF9rYXBpdGEgPSB0b3B1cF9uZWVkZWQsDQogICAgICB0b3RhbF9hbmdnYXJhbl9taWxpYXIgPSB0b3RhbF9iaWF5YV9ycCAvIDFlOQ0KICAgICkNCiAgfSkNCg0KIyA0LiBKb2luIGRlbmdhbiBCYXNlbGluZSBkYW4gU29ydCBCZXJkYXNhcmthbiBLZW1pc2tpbmFuIFRlcnRpbmdnaQ0KdGFiZWxfYWtoaXJfcHJvdiA8LSB0YXJnZXRfcHJvdiAlPiUNCiAgbGVmdF9qb2luKGhhc2lsX3NpbV9wcm92LCBieSA9ICJSMTAxIikgJT4lDQogIGFycmFuZ2UoZGVzYyhiYXNlbGluZV9wb3ZlcnR5KSkgJT4lICMgU09SVCBCRVJEQVNBUktBTiBQUk9WSU5TSSBURVJNSVNLSU4NCiAgbXV0YXRlKA0KICAgIGJhc2VsaW5lX3BjdCA9IHJvdW5kKGJhc2VsaW5lX3BvdmVydHkgKiAxMDAsIDIpLA0KICAgIHRhcmdldF9wY3QgPSByb3VuZCh0YXJnZXRfcG92ZXJ0eSAqIDEwMCwgMikNCiAgKQ0KYGBgDQoNCmBgYHtyfQ0KdGFiZWxfY2V0YWsgPC0gdGFiZWxfYWtoaXJfcHJvdiAlPiUgDQogIGFycmFuZ2UoUjEwMSkgJT4lIA0KICBzZWxlY3QoUjEwMSwgYmFzZWxpbmVfcGN0LCB0YXJnZXRfcGN0LCB0YW1iYWhhbl90b3B1cF9rYXBpdGEsIHRvdGFsX2FuZ2dhcmFuX21pbGlhcikNCiNwcmludCh0YWJlbF9jZXRhaywgbiA9IEluZikNCg0KDQojIFJla2FwIFRvdGFsIEZpc2thbA0KdG90YWxfdHJpbGl1biA8LSBzdW0odGFiZWxfYWtoaXJfcHJvdiR0b3RhbF9hbmdnYXJhbl9taWxpYXIsIG5hLnJtID0gVFJVRSkgLyAxMDAwDQpjYXQoIlRPVEFMIEFOR0dBUkFOIE5BU0lPTkFMIDogUnAiLCByb3VuZCh0b3RhbF90cmlsaXVuLCAyKSwgIlRyaWxpdW5cbiIpDQpgYGAgDQoNCioqQW5hbGlzaXMgS2VidXR1aGFuIEZpc2thbCBOYXNpb25hbCoqDQoNCkJlcmRhc2Fya2FuIGhhc2lsIGFncmVnYXNpIHNpbXVsYXNpIGRhcmkgMzggcHJvdmluc2ksIGVzdGltYXNpIHRvdGFsIGtlYnV0dWhhbiBmaXNrYWwgdW50dWsgbWVudXJ1bmthbiBhbmdrYSBrZW1pc2tpbmFuIG5hc2lvbmFsIHNlYmVzYXIgMSBwZXJzZW4gcG9pbiBhZGFsYWggc2ViZXNhciBScCAyMiw5NiBUcmlsaXVuLiBBbmdrYSBpbmkgbWVyZXByZXNlbnRhc2lrYW4gYWt1bXVsYXNpIGRhcmkgYmlheWEgaW50ZXJ2ZW5zaSB5YW5nIGRpc2VzdWFpa2FuIGRlbmdhbiBrYXJha3RlcmlzdGlrIGtlbWlza2luYW4gZGFuIEdhcmlzIEtlbWlza2luYW4gZGkgbWFzaW5nLW1hc2luZyB3aWxheWFoLiBQZXJoaXR1bmdhbiBpbmkgbWVtYmVyaWthbiBnYW1iYXJhbiBvYmpla3RpZiBtZW5nZW5haSBza2FsYSBwZW5kYW5hYW4geWFuZyBkaXBlcmx1a2FuIHVudHVrIG1lbmNhcGFpIHRhcmdldCBha3NlbGVyYXNpIHBlbmdoYXB1c2FuIGtlbWlza2luYW4gZGFsYW0gamFuZ2thIHBlbmRlay4NCg0KTmlsYWkgUnAgMjIsOTYgVHJpbGl1biBpbmkgYmVyZnVuZ3NpIHNlYmFnYWkgcGVkb21hbiBiYWdpIHBlcmVuY2FuYWFuIGFuZ2dhcmFuIHB1c2F0IGRhbiBkYWVyYWguIFBlcmx1IGRpY2F0YXQgYmFod2EgYW5na2EgaW5pIG1lcnVwYWthbiBlc3RpbWFzaSBiaWF5YSBpbnRlcnZlbnNpIGxhbmdzdW5nIGtlcGFkYSBwZW5kdWR1ayB0YXJnZXQuIERhbGFtIGltcGxlbWVudGFzaSBwcmFrdGlzbnlhLCBhbmdrYSBpbmkgZGFwYXQgbWVuamFkaSBhY3VhbiB1bnR1ayBtZW5nZXZhbHVhc2kga2VjdWt1cGFuIGFsb2thc2kgZGFuYSBiYW50dWFuIHNvc2lhbCB5YW5nIHNlZGFuZyBiZXJqYWxhbiBhdGF1IHNlYmFnYWkgZGFzYXIgcGVuZ2FqdWFuIGRhbmEgdGFtYmFoYW4gKHRvcC11cCkgZGFsYW0gbWVrYW5pc21lIHBlcnViYWhhbiBhbmdnYXJhbi4gRGVuZ2FuIG1lbmdldGFodWkgbmlsYWkgZmlza2FsIGluaSwgcGVtZXJpbnRhaCBkYXBhdCBtZW5ndWt1ciBzZWphdWggbWFuYSAiaGFyZ2EiIGRhcmkgc2VidWFoIHRhcmdldCBrZXNlamFodGVyYWFuIHJha3lhdCB5YW5nIGluZ2luIGRpY2FwYWkuDQoNCg0KYGBge3J9DQp0b3RhbF90cmlsaXVuX3Byb3YgPC0gc3VtKHRhYmVsX2FraGlyX3Byb3YkdG90YWxfYW5nZ2FyYW5fbWlsaWFyLCBuYS5ybSA9IFRSVUUpIC8gMTAwMA0Kd2IgPC0gY3JlYXRlV29ya2Jvb2soKQ0KYWRkV29ya3NoZWV0KHdiLCAiU2ltdWxhc2lfUHJvdmluc2kiKQ0Kd3JpdGVEYXRhKHdiLCAiU2ltdWxhc2lfUHJvdmluc2kiLCAiSGFzaWwgU2ltdWxhc2kgUGVyIFByb3ZpbnNpIChUYXJnZXQgUGVudXJ1bmFuIDElKSIsIHN0YXJ0Um93ID0gMSkNCndyaXRlRGF0YSh3YiwgIlNpbXVsYXNpX1Byb3ZpbnNpIiwgdGFiZWxfYWtoaXJfcHJvdiAlPiUgYXJyYW5nZShSMTAxKSwgc3RhcnRSb3cgPSAzKQ0Kc2F2ZVdvcmtib29rKHdiLCAiU2ltdWxhc2lfQmFuc29zX1Byb3ZpbnNpXzIwMjYueGxzeCIsIG92ZXJ3cml0ZSA9IFRSVUUpDQoNCmBgYCAgDQoNCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiBEaXJlY3RvcmF0ZSBvZiBXZWxmYXJlIFN0YXRpc3RpY3MsIEJQUyBTdGF0aXN0aWMgSW5kb25lc2lhLCBzYXB0YWhhc0BicHMuZ28uaWQNCg0KDQo=