Tuberkulosis (TB) masih menjadi salah satu masalah kesehatan
masyarakat di Provinsi Jawa Barat dengan jumlah kasus yang relatif
tinggi. Penelitian ini bertujuan menganalisis faktor-faktor yang
memengaruhi Incidence Rate (IR) TB tahun 2025 menggunakan pendekatan
spasial Spatial Lag of X (SLX). Data yang digunakan mencakup 27
kabupaten/kota di Jawa Barat dengan variabel jumlah fasilitas kesehatan,
persentase penduduk miskin, kepadatan penduduk, akses air minum layak,
akses sanitasi layak, dan jumlah kasus HIV. Analisis dilakukan melalui
statistik deskriptif, pemetaan spasial, uji autokorelasi spasial Moran’s
I, regresi OLS, dan model SLX. Hasil menunjukkan bahwa model SLX
memberikan kinerja yang lebih baik dibandingkan model OLS dengan nilai
R² sebesar 0,6913 dan RMSE sebesar 123,49. Temuan ini mengindikasikan
bahwa faktor-faktor yang memengaruhi kejadian TB tidak hanya berasal
dari karakteristik wilayah itu sendiri, tetapi juga dipengaruhi oleh
kondisi wilayah sekitarnya. Oleh karena itu, pendekatan spasial perlu
dipertimbangkan dalam perencanaan program pengendalian TB di Jawa
Barat.
3. Hasil Analisis
3.1 Analisis Deskriptif dan Peta IR
Tabel 2. Statistik Deskriptif
vars <- jabar_tb %>%
st_drop_geometry() %>%
dplyr::select(
TB,
incidence_rate_TB,
faskes,
penduduk_miskin,
kepadatan,
air_minum,
sanitasi,
hiv
) %>%
mutate(across(everything(), as.numeric))
desc_table <- data.frame(
Variabel = c(
"TB",
"Incidence Rate TB",
"Faskes",
"Penduduk Miskin",
"Kepadatan",
"Air Minum Layak",
"Sanitasi Layak",
"HIV"
),
Mean = sapply(vars, mean, na.rm = TRUE),
SD = sapply(vars, sd, na.rm = TRUE),
Varians = sapply(vars, var, na.rm = TRUE),
Min = sapply(vars, min, na.rm = TRUE),
Max = sapply(vars, max, na.rm = TRUE)
)
knitr::kable( desc_table, digits = 4)
| TB |
TB |
8347.7407 |
6046.3174 |
3.655795e+07 |
1024.0000 |
28134.000 |
| incidence_rate_TB |
Incidence Rate TB |
486.7945 |
226.4968 |
5.130079e+04 |
230.8394 |
1077.861 |
| faskes |
Faskes |
2185.3704 |
1387.9867 |
1.926507e+06 |
241.0000 |
5588.000 |
| penduduk_miskin |
Penduduk Miskin |
7.5956 |
2.4999 |
6.249300e+00 |
2.3100 |
11.020 |
| kepadatan |
Kepadatan |
3941.3333 |
4701.5895 |
2.210494e+07 |
387.0000 |
15300.000 |
| air_minum |
Air Minum Layak |
95.7793 |
4.5879 |
2.104910e+01 |
84.7900 |
100.000 |
| sanitasi |
Sanitasi Layak |
9.2563 |
6.5311 |
4.265500e+01 |
1.8700 |
22.830 |
| hiv |
HIV |
94.1852 |
100.4253 |
1.008523e+04 |
7.0000 |
389.000 |
Berdasarkan hasil statistik deskriptif, terlihat bahwa jumlah kasus
Tuberkulosis (TB) di Jawa Barat memiliki nilai rata-rata sebesar
8.347,74 kasus dengan variasi yang cukup tinggi antar wilayah, yang
ditunjukkan oleh standar deviasi sebesar 6.046,32. Sementara itu,
incidence rate TB memiliki rata-rata 486,79 per 100.000 penduduk dengan
rentang nilai yang cukup lebar, menunjukkan adanya ketimpangan beban
penyakit antar kabupaten/kota.
Untuk variabel independen, kondisi sosial ekonomi dan kesehatan juga
menunjukkan variasi antar wilayah. Variabel kepadatan penduduk memiliki
sebaran yang paling tinggi dibanding variabel lain, sedangkan variabel
seperti akses air minum layak relatif lebih homogen dengan nilai yang
mendekati 100% di sebagian besar wilayah. Secara umum, hasil ini
menunjukkan adanya heterogenitas kondisi antar wilayah di Jawa Barat,
yang mengindikasikan potensi adanya perbedaan risiko Tuberkulosis antar
daerah.
tm_shape(jabar_tb) +
tm_polygons(
"incidence_rate_TB",
palette = "Reds",
title = "Incidence Rate TB"
) +
tm_text(
text = "WADMKK",
size = 0.5
) +
tm_layout(
legend.outside = TRUE
)

Gambar 1. Visualisasi Peta Incidance Rate TB
Sebagian besar wilayah di Jawa Barat berada pada kategori incidence
rate (IR) rendah hingga sedang (200–599 per 100.000 penduduk) yang
tersebar di berbagai wilayah barat, selatan, dan timur. Sementara itu,
wilayah dengan IR tinggi hingga sangat tinggi (>600 per 100.000
penduduk) cenderung membentuk pola terlokalisasi pada beberapa wilayah
perkotaan yang padat penduduk. Hal ini menunjukkan adanya konsentrasi
kasus TB pada wilayah dengan karakteristik urban dan kepadatan
tinggi.
3.2 Uji Autokorelasi Spasial
Tabel 3. Hasil Uji Autokorelasi Spasial
var_list <- c( "incidence_rate_TB", "faskes", "penduduk_miskin", "kepadatan", "air_minum", "sanitasi", "hiv" )
nama_variabel <- c( "Incidence Rate (TB)", "Faskes", "Penduduk Miskin", "Kepadatan Penduduk", "Air Minum Layak", "Sanitasi Layak", "HIV" )
moran_summary <- data.frame( Variabel = nama_variabel, Moran_I = NA, Expectation = NA, Variance = NA, Z_score = NA, p_value = NA )
for(i in seq_along(var_list)) { x <- scale(jabar_tb[[var_list[i]]])[,1]
moran_result <- moran.test( x, lw, zero.policy = TRUE )
moran_summary$Moran_I[i] <- moran_result$estimate[1]
moran_summary$Expectation[i] <- moran_result$estimate[2]
moran_summary$Variance[i] <- moran_result$estimate[3]
moran_summary$Z_score[i] <- unname(moran_result$statistic)
moran_summary$p_value[i] <- moran_result$p.value}
knitr::kable( moran_summary, digits = 4)
| Incidence Rate (TB) |
0.0500 |
-0.0385 |
0.0187 |
0.6473 |
0.2587 |
| Faskes |
-0.0392 |
-0.0385 |
0.0194 |
-0.0050 |
0.5020 |
| Penduduk Miskin |
0.5076 |
-0.0385 |
0.0201 |
3.8553 |
0.0001 |
| Kepadatan Penduduk |
0.2580 |
-0.0385 |
0.0191 |
2.1437 |
0.0160 |
| Air Minum Layak |
0.2847 |
-0.0385 |
0.0194 |
2.3232 |
0.0101 |
| Sanitasi Layak |
0.3514 |
-0.0385 |
0.0200 |
2.7573 |
0.0029 |
| HIV |
0.2562 |
-0.0385 |
0.0174 |
2.2316 |
0.0128 |
Berdasarkan hasil uji Moran’s I pada masing-masing variabel,
ditemukan bahwa sebagian besar variabel independen menunjukkan adanya
autokorelasi spasial yang signifikan. Variabel penduduk miskin,
kepadatan penduduk, akses air minum layak, sanitasi layak, dan jumlah
kasus HIV memiliki nilai Moran’s I positif dan signifikan (p < 0,05),
yang menunjukkan adanya pola pengelompokan spasial (clustered) antar
wilayah di Jawa Barat. Sebaliknya, variabel incidence rate Tuberkulosis
dan jumlah fasilitas kesehatan (faskes) tidak menunjukkan autokorelasi
spasial yang signifikan (p > 0,05), sehingga distribusinya cenderung
acak secara spasial dan tidak membentuk pola pengelompokan yang jelas
antar wilayah.
3.3 Model OLS
Hasil estimasi parameter menggunakan metode Ordinary Least Squares
(OLS) disajikan pada Tabel 5 berikut:
Tabel 4. Hasil Estimasi Model OLS
ols_model <- lm(
incidence_rate_TB ~
faskes +
penduduk_miskin +
kepadatan +
air_minum +
sanitasi +
hiv,
data = jabar_tb
)
ols_coef <- summary(ols_model)$coefficients
ols_table <- data.frame(
Variabel = rownames(ols_coef),
Koefisien = ols_coef[, 1],
Std_Error = ols_coef[, 2],
t_value = ols_coef[, 3],
p_value = ols_coef[, 4]
)
knitr::kable(
ols_table,
digits = 4, row.names = FALSE)
| (Intercept) |
-177.6495 |
957.9636 |
-0.1854 |
0.8547 |
| faskes |
-0.0603 |
0.0431 |
-1.4002 |
0.1768 |
| penduduk_miskin |
14.6376 |
20.6729 |
0.7081 |
0.4871 |
| kepadatan |
0.0211 |
0.0145 |
1.4580 |
0.1604 |
| air_minum |
5.4803 |
9.8547 |
0.5561 |
0.5843 |
| sanitasi |
1.9850 |
8.4556 |
0.2348 |
0.8168 |
| hiv |
0.6230 |
0.5724 |
1.0883 |
0.2894 |
Berdasarkan hasil OLS, variabel independen secara simultan
berpengaruh signifikan terhadap incidence rate TB (p = 0,02078), namun
secara parsial tidak ditemukan pengaruh yang signifikan (p > 0,05).
Model mampu menjelaskan sekitar 49,55% variasi incidence rate (R² =
0,4955), dengan nilai Adjusted R² sebesar 0,3442. Secara umum, hasil
ini menunjukkan bahwa model masih terbatas dalam menjelaskan variasi TB
sehingga diperlukan pendekatan spasial untuk menangkap keterkaitan antar
wilayah.
3.4 Diagnostik Model OLS
Tabel 5. Diagnostik Model OLS
Tabel 5. Diagnostik Model
jabar_tb$residual_ols <- residuals(ols_model)
# VIF
vif_values <- vif(ols_model)
# Uji diagnostik
shapiro_res <- shapiro.test(jabar_tb$residual_ols)
bp_res <- bptest(ols_model)
dw_res <- dwtest(ols_model)
moran_residual <- moran.test(
jabar_tb$residual_ols,
lw,
zero.policy = TRUE
)
diagnostic_table <- data.frame(
Uji = c(
paste("VIF –", names(vif_values)),
"Normalitas Residual (Shapiro-Wilk)",
"Heteroskedastisitas (Breusch-Pagan)",
"Autokorelasi (Durbin-Watson)",
"Autokorelasi Spasial Residual (Moran's I)"
),
Nilai = c(
as.numeric(vif_values),
shapiro_res$statistic,
bp_res$statistic,
dw_res$statistic,
moran_residual$estimate[1]
),
p_value = c(
rep(NA, length(vif_values)),
shapiro_res$p.value,
bp_res$p.value,
dw_res$p.value,
moran_residual$p.value
)
)
knitr::kable(
diagnostic_table,
digits = 4
)
| VIF – faskes |
2.7618 |
NA |
| VIF – penduduk_miskin |
2.0639 |
NA |
| VIF – kepadatan |
3.5732 |
NA |
| VIF – air_minum |
1.5797 |
NA |
| VIF – sanitasi |
2.3568 |
NA |
| VIF – hiv |
2.5539 |
NA |
| Normalitas Residual (Shapiro-Wilk) |
0.9547 |
0.2787 |
| Heteroskedastisitas (Breusch-Pagan) |
8.4930 |
0.2042 |
| Autokorelasi (Durbin-Watson) |
3.0128 |
0.9971 |
| Autokorelasi Spasial Residual (Moran’s I) |
0.2573 |
0.0176 |
Hasil diagnostik model OLS menunjukkan bahwa seluruh asumsi klasik
terpenuhi, yaitu tidak terdapat multikolinearitas, heteroskedastisitas,
maupun autokorelasi residual secara temporal. Namun, uji Moran’s I pada
residual menunjukkan adanya autokorelasi spasial yang signifikan (I =
0,2573; p = 0,0176), yang mengindikasikan bahwa residual masih memiliki
pola ketergantungan antar wilayah. Temuan ini menunjukkan bahwa model
OLS belum mampu menangkap efek spasial, sehingga diperlukan pendekatan
model spasial seperti SLX untuk mengakomodasi keterkaitan antar
wilayah.
3.5 Model SLX
Tabel 5. Hasil Estimasi Model SLX
jabar_tb$lag_faskes <- lag.listw(
lw, jabar_tb$faskes,
zero.policy = TRUE
)
jabar_tb$lag_penduduk_miskin <- lag.listw(
lw, jabar_tb$penduduk_miskin,
zero.policy = TRUE
)
jabar_tb$lag_kepadatan <- lag.listw(
lw, jabar_tb$kepadatan,
zero.policy = TRUE
)
jabar_tb$lag_air_minum <- lag.listw(
lw, jabar_tb$air_minum,
zero.policy = TRUE
)
jabar_tb$lag_sanitasi <- lag.listw(
lw, jabar_tb$sanitasi,
zero.policy = TRUE
)
jabar_tb$lag_hiv <- lag.listw(
lw, jabar_tb$hiv,
zero.policy = TRUE
)
slx_model <- lm(
incidence_rate_TB ~
faskes +
penduduk_miskin +
kepadatan +
air_minum +
sanitasi +
hiv +
lag_faskes +
lag_penduduk_miskin +
lag_kepadatan +
lag_air_minum +
lag_sanitasi +
lag_hiv,
data = jabar_tb
)
slx_coef <- summary(slx_model)$coefficients
slx_table <- data.frame(
Variabel = c(
"(Intercept)",
"Faskes",
"Penduduk Miskin",
"Kepadatan Penduduk",
"Air Minum Layak",
"Sanitasi Layak",
"HIV",
"Lag Faskes",
"Lag Penduduk Miskin",
"Lag Kepadatan",
"Lag Air Minum Layak",
"Lag Sanitasi Layak",
"Lag HIV"
),
Koefisien = slx_coef[, 1],
Std_Error = slx_coef[, 2],
t_value = slx_coef[, 3],
p_value = slx_coef[, 4]
)
knitr::kable(
slx_table,
digits = 4, row.names = FALSE)
| (Intercept) |
617.9421 |
2184.4884 |
0.2829 |
0.7814 |
| Faskes |
-0.0307 |
0.0512 |
-0.5992 |
0.5586 |
| Penduduk Miskin |
-7.8117 |
29.5788 |
-0.2641 |
0.7956 |
| Kepadatan Penduduk |
0.0228 |
0.0185 |
1.2328 |
0.2379 |
| Air Minum Layak |
8.6532 |
10.3198 |
0.8385 |
0.4158 |
| Sanitasi Layak |
3.7075 |
9.7746 |
0.3793 |
0.7102 |
| HIV |
0.6005 |
0.5896 |
1.0184 |
0.3258 |
| Lag Faskes |
0.0769 |
0.1117 |
0.6878 |
0.5028 |
| Lag Penduduk Miskin |
32.5588 |
51.2840 |
0.6349 |
0.5357 |
| Lag Kepadatan |
-0.0464 |
0.0446 |
-1.0391 |
0.3164 |
| Lag Air Minum Layak |
-15.1076 |
25.1085 |
-0.6017 |
0.5570 |
| Lag Sanitasi Layak |
9.2671 |
21.2031 |
0.4371 |
0.6687 |
| Lag HIV |
0.0116 |
1.1733 |
0.0099 |
0.9923 |
Hasil estimasi model SLX menunjukkan bahwa model secara simultan
signifikan dalam menjelaskan variasi incidence rate Tuberkulosis (p =
0,04483). Nilai R² sebesar 0,6913 menunjukkan bahwa model mampu
menjelaskan sekitar 69,13% variasi data, yang lebih tinggi dibandingkan
model OLS. Namun demikian, secara parsial seluruh variabel baik variabel
lokal maupun efek spasial (lag) tidak menunjukkan pengaruh yang
signifikan (p > 0,05). Hal ini mengindikasikan bahwa pengaruh faktor
risiko terhadap incidence rate TB tersebar secara spasial dan tidak
terpusat pada satu variabel tertentu. Secara keseluruhan, model SLX
menunjukkan adanya peningkatan kemampuan dalam menangkap variasi data
dibandingkan OLS, sehingga mendukung adanya efek keterkaitan spasial
antar wilayah dalam penyebaran Tuberkulosis. Tidak signifikannya
variabel secara parsial dapat disebabkan oleh adanya pengaruh faktor
lain yang belum dimasukkan dalam model seperti kualitas hunian,
kepatuhan pengobatan, dan mobilitas penduduk.
Selain mengestimasi koefisien regresi, model SLX memungkinkan
identifikasi pengaruh langsung (direct effect) dan pengaruh tidak
langsung (indirect effect) yang berasal dari wilayah tetangga. Analisis
ini penting untuk mengetahui sejauh mana faktor-faktor sosial, ekonomi,
dan kesehatan memengaruhi Incidence Rate Tuberkulosis (TB), baik melalui
karakteristik wilayah itu sendiri maupun melalui efek limpahan spasial
(spillover effect). Hasil estimasi efek langsung, efek tidak langsung,
dan efek total disajikan pada Tabel 6.
Tabel 6. Direct and Indirect Effects Model SLX
slx_coef <- summary(slx_model)$coefficients
impact_table <- data.frame(
Variable = c(
"faskes",
"penduduk_miskin",
"kepadatan",
"air_minum",
"sanitasi",
"hiv"
),
Direct = slx_coef[c(
"faskes",
"penduduk_miskin",
"kepadatan",
"air_minum",
"sanitasi",
"hiv"
), 1],
SE_Direct = slx_coef[c(
"faskes",
"penduduk_miskin",
"kepadatan",
"air_minum",
"sanitasi",
"hiv"
), 2],
p_Direct = slx_coef[c(
"faskes",
"penduduk_miskin",
"kepadatan",
"air_minum",
"sanitasi",
"hiv"
), 4],
Indirect = slx_coef[c(
"lag_faskes",
"lag_penduduk_miskin",
"lag_kepadatan",
"lag_air_minum",
"lag_sanitasi",
"lag_hiv"
), 1],
SE_Indirect = slx_coef[c(
"lag_faskes",
"lag_penduduk_miskin",
"lag_kepadatan",
"lag_air_minum",
"lag_sanitasi",
"lag_hiv"
), 2],
p_Indirect = slx_coef[c(
"lag_faskes",
"lag_penduduk_miskin",
"lag_kepadatan",
"lag_air_minum",
"lag_sanitasi",
"lag_hiv"
), 4]
)
impact_table$Total <-
impact_table$Direct +
impact_table$Indirect
knitr::kable(
impact_table,
digits = 4,
row.names = FALSE
)
| faskes |
-0.0307 |
0.0512 |
0.5586 |
0.0769 |
0.1117 |
0.5028 |
0.0462 |
| penduduk_miskin |
-7.8117 |
29.5788 |
0.7956 |
32.5588 |
51.2840 |
0.5357 |
24.7471 |
| kepadatan |
0.0228 |
0.0185 |
0.2379 |
-0.0464 |
0.0446 |
0.3164 |
-0.0236 |
| air_minum |
8.6532 |
10.3198 |
0.4158 |
-15.1076 |
25.1085 |
0.5570 |
-6.4544 |
| sanitasi |
3.7075 |
9.7746 |
0.7102 |
9.2671 |
21.2031 |
0.6687 |
12.9747 |
| hiv |
0.6005 |
0.5896 |
0.3258 |
0.0116 |
1.1733 |
0.9923 |
0.6121 |
Hasil estimasi direct effect, indirect effect, dan total effect pada
model Spatial Lag of X (SLX) disajikan pada Tabel 6. Seluruh variabel
memiliki nilai p-value lebih besar dari 0,05 baik pada pengaruh langsung
maupun pengaruh tidak langsung, sehingga tidak terdapat bukti statistik
yang cukup untuk menyatakan bahwa fasilitas kesehatan, penduduk miskin,
kepadatan penduduk, akses air minum layak, sanitasi layak, maupun jumlah
kasus HIV berpengaruh signifikan terhadap Incidence Rate (IR)
Tuberkulosis (TB) di Jawa Barat.
Meskipun tidak signifikan, arah koefisien menunjukkan beberapa
kecenderungan hubungan. Variabel fasilitas kesehatan, penduduk miskin,
sanitasi layak, dan HIV memiliki total effect positif, sedangkan
kepadatan penduduk dan akses air minum layak memiliki total effect
negatif. Selain itu, beberapa variabel menunjukkan perbedaan arah antara
direct effect dan indirect effect, seperti penduduk miskin, kepadatan
penduduk, dan akses air minum layak, yang mengindikasikan adanya
kemungkinan pengaruh karakteristik wilayah tetangga terhadap kondisi TB
di suatu wilayah.
Secara umum, hasil direct effect dan indirect effect menunjukkan
bahwa tidak terdapat pengaruh signifikan secara parsial dari seluruh
variabel yang diteliti. Namun, keberadaan koefisien indirect effect yang
tidak bernilai nol menunjukkan bahwa model SLX mampu mengakomodasi
potensi keterkaitan antarwilayah (spatial spillover), meskipun efek
tersebut belum terbukti signifikan secara statistik pada data penelitian
ini.
3.6 Perbandingan Model
Tabel 7. Perbandingan Model
model_comparison <- data.frame(
Model = c("OLS", "SLX"),
AIC = round(
c(
AIC(ols_model),
AIC(slx_model)
),
2
),
R_squared = round(
c(
summary(ols_model)$r.squared,
summary(slx_model)$r.squared
),
4
),
LogLik = round(
c(
as.numeric(logLik(ols_model)),
as.numeric(logLik(slx_model))
),
2
),
RMSE = round(
c(
sqrt(mean(ols_model$residuals^2)),
sqrt(mean(slx_model$residuals^2))
),
2
)
)
comparison_table <- data.frame(
Model = c("OLS", "SLX"),
AIC = round(
c(
AIC(ols_model),
AIC(slx_model)
),
2
),
R_squared = round(
c(
summary(ols_model)$r.squared,
summary(slx_model)$r.squared
),
4
),
Log_Likelihood = round(
c(
as.numeric(logLik(ols_model)),
as.numeric(logLik(slx_model))
),
2
),
RMSE = round(
c(
sqrt(mean(residuals(ols_model)^2)),
sqrt(mean(residuals(slx_model)^2))
),
2
)
)
knitr::kable(
comparison_table,
digits = 4
)
| OLS |
365.96 |
0.4955 |
-174.98 |
157.87 |
| SLX |
364.69 |
0.6913 |
-168.35 |
123.49 |
Hasil perbandingan kinerja model menunjukkan bahwa model SLX memiliki
performa yang lebih baik dibandingkan model OLS. Hal ini terlihat dari
penurunan nilai AIC dan RMSE, serta peningkatan nilai R-squared dan
log-likelihood. Peningkatan tersebut menunjukkan bahwa model SLX lebih
mampu menjelaskan variasi incidence rate Tuberkulosis dengan
mempertimbangkan efek spasial antar wilayah. Dengan demikian, model SLX
lebih sesuai digunakan dalam analisis ini karena mampu menangkap
keterkaitan spasial yang tidak dapat dijelaskan oleh model OLS.
4. Pembahasan
4.1 Pembahasan
Penelitian ini bertujuan menganalisis faktor-faktor yang berhubungan
dengan Incidence Rate (IR) Tuberkulosis (TB) di Provinsi Jawa Barat
menggunakan pendekatan spasial Spatial Lag of X (SLX). Hasil analisis
menunjukkan bahwa distribusi TB di Jawa Barat tidak merata antar
kabupaten/kota. Peta Incidence Rate memperlihatkan bahwa wilayah dengan
tingkat kejadian TB tinggi cenderung terkonsentrasi pada beberapa
wilayah perkotaan yang memiliki aktivitas sosial dan mobilitas penduduk
yang tinggi. Kondisi ini sejalan dengan karakteristik penyakit TB yang
penularannya dipengaruhi oleh intensitas kontak antarindividu dalam
suatu populasi.
Hasil uji Moran’s I menunjukkan bahwa sebagian besar variabel
penjelas, yaitu penduduk miskin, kepadatan penduduk, akses air minum
layak, sanitasi layak, dan jumlah kasus HIV memiliki pola pengelompokan
spasial yang signifikan. Temuan ini menunjukkan bahwa karakteristik
sosial, ekonomi, dan kesehatan masyarakat di Jawa Barat tidak tersebar
secara acak, melainkan cenderung membentuk kelompok wilayah dengan
karakteristik yang serupa. Adanya pola pengelompokan tersebut
mengindikasikan bahwa pendekatan spasial relevan digunakan dalam
analisis faktor-faktor yang berkaitan dengan kejadian TB.
Model OLS menunjukkan bahwa secara simultan variabel-variabel yang
digunakan mampu menjelaskan variasi Incidence Rate TB. Namun demikian,
tidak terdapat variabel yang signifikan secara parsial. Selain itu, uji
Moran’s I terhadap residual model menunjukkan adanya autokorelasi
spasial yang signifikan. Hasil tersebut mengindikasikan bahwa masih
terdapat informasi spasial yang belum dapat dijelaskan oleh model OLS
sehingga asumsi independensi antarwilayah tidak sepenuhnya terpenuhi.
Oleh karena itu, penggunaan model spasial menjadi penting untuk
mengakomodasi keterkaitan geografis antar kabupaten/kota.
Penerapan model SLX menghasilkan peningkatan kinerja model
dibandingkan OLS, yang ditunjukkan oleh peningkatan nilai koefisien
determinasi (R²) dari 0,4955 menjadi 0,6913 serta penurunan nilai RMSE.
Temuan ini menunjukkan bahwa penambahan komponen spasial pada variabel
independen mampu meningkatkan kemampuan model dalam menjelaskan variasi
Incidence Rate TB. Dengan kata lain, informasi mengenai kondisi wilayah
tetangga memberikan kontribusi dalam menjelaskan variasi kejadian TB di
Jawa Barat.
Meskipun demikian, hasil estimasi parameter model SLX menunjukkan
bahwa seluruh variabel lokal maupun variabel lag spasial memiliki nilai
p-value lebih besar dari 0,05. Hasil analisis direct effect dan indirect
effect juga menunjukkan bahwa tidak terdapat pengaruh yang signifikan
secara statistik baik dari karakteristik wilayah itu sendiri maupun dari
karakteristik wilayah tetangga. Temuan ini menunjukkan bahwa variabel
fasilitas kesehatan, persentase penduduk miskin, kepadatan penduduk,
akses air minum layak, sanitasi layak, dan jumlah kasus HIV belum mampu
menjelaskan variasi Incidence Rate TB secara parsial pada data yang
digunakan dalam penelitian ini.
Ketidaksignifikanan seluruh variabel dapat disebabkan oleh beberapa
faktor. Pertama, jumlah observasi yang relatif terbatas, yaitu hanya 27
kabupaten/kota, dapat mengurangi kekuatan statistik model dalam
mendeteksi pengaruh variabel. Kedua, kejadian TB merupakan fenomena yang
kompleks dan dipengaruhi oleh berbagai faktor lain yang belum dimasukkan
ke dalam model, seperti kondisi hunian, kepadatan rumah tangga, status
gizi, perilaku pencarian pengobatan, keberhasilan pengobatan, mobilitas
penduduk, dan faktor lingkungan. Ketiga, penggunaan data agregat pada
tingkat kabupaten/kota berpotensi menimbulkan efek heterogenitas
internal wilayah yang tidak dapat ditangkap oleh model.
Secara keseluruhan, penelitian ini menunjukkan bahwa pendekatan
spasial memberikan peningkatan kemampuan model dalam menjelaskan variasi
kejadian TB dibandingkan pendekatan nonspasial. Namun demikian, belum
ditemukan bukti statistik yang cukup untuk menyatakan bahwa faktor
fasilitas kesehatan, kemiskinan, kepadatan penduduk, akses air minum
layak, sanitasi layak, maupun HIV berpengaruh secara langsung maupun
tidak langsung terhadap Incidence Rate TB di Jawa Barat pada tahun 2025.
Temuan ini mengindikasikan perlunya pengembangan model dengan variabel
yang lebih komprehensif serta penggunaan data spasio-temporal untuk
memperoleh pemahaman yang lebih baik mengenai faktor-faktor yang
memengaruhi persebaran TB.
4.2 Keterbatasan Penelitian
Penelitian ini memiliki beberapa keterbatasan yaitu sebagai
berikut:
- Jumlah unit observasi relatif terbatas, yaitu hanya 27
kabupaten/kota di Provinsi Jawa Barat. Jumlah observasi yang kecil dapat
mengurangi kekuatan statistik (statistical power) model dalam mendeteksi
pengaruh variabel secara parsial.
- Data yang digunakan bersifat cross-sectional pada tahun 2025
sehingga belum mampu menggambarkan dinamika perubahan kejadian
Tuberkulosis (TB) dari waktu ke waktu maupun mengidentifikasi pola
temporal penyebaran penyakit.
- Variabel penjelas yang digunakan masih terbatas pada faktor sosial,
ekonomi, dan kesehatan tertentu. Beberapa faktor yang secara teoritis
berhubungan dengan TB, seperti kepadatan hunian, status gizi, tingkat
pendidikan, perilaku kesehatan, cakupan pengobatan TB, mobilitas
penduduk, dan kondisi lingkungan fisik belum dimasukkan ke dalam
model.
- Analisis dilakukan pada tingkat agregat kabupaten/kota, sehingga
belum mampu menangkap variasi karakteristik dan risiko TB pada tingkat
wilayah yang lebih rinci, seperti kecamatan atau desa/kelurahan. Kondisi
ini berpotensi menimbulkan ecological fallacy, yaitu kesimpulan pada
tingkat kelompok yang belum tentu berlaku pada tingkat individu.
- Model SLX hanya mempertimbangkan efek spasial pada variabel penjelas
(X) dan belum mengakomodasi kemungkinan ketergantungan spasial yang
lebih kompleks pada variabel respon maupun galat model. Oleh karena itu,
model spasial lain seperti SAR, SEM, SDM, atau pendekatan Bayesian
spasial dapat dipertimbangkan pada penelitian selanjutnya.
- Tidak ditemukannya pengaruh yang signifikan secara parsial pada
seluruh variabel penelitian mengindikasikan bahwa masih terdapat
faktor-faktor lain yang belum terakomodasi dalam model dan berpotensi
memengaruhi variasi Incidence Rate TB di Jawa Barat.
LS0tDQp0aXRsZTogIkFuYWxpc2lzIFNwYXNpYWwgRmFrdG9yLUZha3RvciB5YW5nIE1lbWVuZ2FydWhpIEluY2lkZW5jZSBSYXRlIFR1YmVya3Vsb3NpcyBkaSBQcm92aW5zaSBKYXdhIEJhcmF0IFRhaHVuIDIwMjUgTWVuZ2d1bmFrYW4gTW9kZWwgU3BhdGlhbCBMYWcgb2YgWCAoU0xYKSINCg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCmNzczogc3R5bGUuY3NzDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkocmVhZHhsKQ0KbGlicmFyeShzZikNCmxpYnJhcnkoc3BkZXApDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkodG1hcCkNCmxpYnJhcnkoSU5MQSkNCmxpYnJhcnkoY2FyKQ0KbGlicmFyeShsbXRlc3QpDQp0bWFwX21vZGUoInBsb3QiKQ0KYGBgDQoNCg0KLS0tDQoNCioqSWRlbnRpdGFzIFBlbnVsaXM6KioNCg0KfCBLZXRlcmFuZ2FuIHwgSW5mb3JtYXNpIHwNCnwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18DQp8IE5hbWEgfCBTcmkgWXVsaWFuYSB8DQp8IE5QTSB8IDE0MDcyMDI1MDAwMyB8DQp8IFByb2dyYW0gU3R1ZGkgfCBNYWdpc3RlciBTdGF0aXN0aWthIFRlcmFwYW4gfA0KfCBNYXRhIEt1bGlhaCB8IEFuYWxpc2lzIFNwYXNpYWwgfA0KDQotLS0NCg0KLS0tDQoNCjxkaXYgYWxpZ249ImNlbnRlciI+DQojICoqQUJTVFJBSyoqDQo8L2Rpdj4NCg0KVHViZXJrdWxvc2lzIChUQikgbWFzaWggbWVuamFkaSBzYWxhaCBzYXR1IG1hc2FsYWgga2VzZWhhdGFuIG1hc3lhcmFrYXQgZGkgUHJvdmluc2kgSmF3YSBCYXJhdCBkZW5nYW4ganVtbGFoIGthc3VzIHlhbmcgcmVsYXRpZiB0aW5nZ2kuIFBlbmVsaXRpYW4gaW5pIGJlcnR1anVhbiBtZW5nYW5hbGlzaXMgZmFrdG9yLWZha3RvciB5YW5nIG1lbWVuZ2FydWhpIEluY2lkZW5jZSBSYXRlIChJUikgVEIgdGFodW4gMjAyNSBtZW5nZ3VuYWthbiBwZW5kZWthdGFuIHNwYXNpYWwgU3BhdGlhbCBMYWcgb2YgWCAoU0xYKS4gRGF0YSB5YW5nIGRpZ3VuYWthbiBtZW5jYWt1cCAyNyBrYWJ1cGF0ZW4va290YSBkaSBKYXdhIEJhcmF0IGRlbmdhbiB2YXJpYWJlbCBqdW1sYWggZmFzaWxpdGFzIGtlc2VoYXRhbiwgcGVyc2VudGFzZSBwZW5kdWR1ayBtaXNraW4sIGtlcGFkYXRhbiBwZW5kdWR1aywgYWtzZXMgYWlyIG1pbnVtIGxheWFrLCBha3NlcyBzYW5pdGFzaSBsYXlhaywgZGFuIGp1bWxhaCBrYXN1cyBISVYuIEFuYWxpc2lzIGRpbGFrdWthbiBtZWxhbHVpIHN0YXRpc3RpayBkZXNrcmlwdGlmLCBwZW1ldGFhbiBzcGFzaWFsLCB1amkgYXV0b2tvcmVsYXNpIHNwYXNpYWwgTW9yYW7igJlzIEksIHJlZ3Jlc2kgT0xTLCBkYW4gbW9kZWwgU0xYLiBIYXNpbCBtZW51bmp1a2thbiBiYWh3YSBtb2RlbCBTTFggbWVtYmVyaWthbiBraW5lcmphIHlhbmcgbGViaWggYmFpayBkaWJhbmRpbmdrYW4gbW9kZWwgT0xTIGRlbmdhbiBuaWxhaSBSwrIgc2ViZXNhciAwLDY5MTMgZGFuIFJNU0Ugc2ViZXNhciAxMjMsNDkuIFRlbXVhbiBpbmkgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIGZha3Rvci1mYWt0b3IgeWFuZyBtZW1lbmdhcnVoaSBrZWphZGlhbiBUQiB0aWRhayBoYW55YSBiZXJhc2FsIGRhcmkga2FyYWt0ZXJpc3RpayB3aWxheWFoIGl0dSBzZW5kaXJpLCB0ZXRhcGkganVnYSBkaXBlbmdhcnVoaSBvbGVoIGtvbmRpc2kgd2lsYXlhaCBzZWtpdGFybnlhLiBPbGVoIGthcmVuYSBpdHUsIHBlbmRla2F0YW4gc3Bhc2lhbCBwZXJsdSBkaXBlcnRpbWJhbmdrYW4gZGFsYW0gcGVyZW5jYW5hYW4gcHJvZ3JhbSBwZW5nZW5kYWxpYW4gVEIgZGkgSmF3YSBCYXJhdC4NCg0KKipLYXRhIEt1bmNpOioqIFR1YmVya3Vsb3NpcywgSW5jaWRlbmNlIFJhdGUsIEFuYWxpc2lzIFNwYXNpYWwsIE1vcmFuJ3MgSSwgU3BhdGlhbCBMYWcgb2YgWCAoU0xYKSwgSmF3YSBCYXJhdC4NCg0KDQotLS0NCg0KDQojIDEuIFBlbmRhaHVsdWFuDQoNCiMjIDEuMSBMYXRhciBCZWxha2FuZyANCg0KVHViZXJrdWxvc2lzIChUQikgbWVydXBha2FuIHNhbGFoIHNhdHUgcGVueWFraXQgbWVudWxhciB5YW5nIG1hc2loIG1lbmphZGkgcGVybWFzYWxhaGFuIGtlc2VoYXRhbiBtYXN5YXJha2F0IGRpIGR1bmlhLiBQZW55YWtpdCB5YW5nIGRpc2ViYWJrYW4gb2xlaCBNeWNvYmFjdGVyaXVtIHR1YmVyY3Vsb3NpcyBpbmkgbWVueWViYXIgbWVsYWx1aSB1ZGFyYSBkYW4gbWVuamFkaSBzYWxhaCBzYXR1IHBlbnllYmFiIHV0YW1hIGtlbWF0aWFuIGFraWJhdCBwZW55YWtpdCBpbmZla3NpIChXSE8sIDIwMjUpLiBVcGF5YSBwZW5nZW5kYWxpYW4gVEIgbWVydXBha2FuIHNhbGFoIHNhdHUgdGFyZ2V0IGRhbGFtIFN1c3RhaW5hYmxlIERldmVsb3BtZW50IEdvYWxzIChTREdzKSwga2h1c3VzbnlhIHBhZGEgVHVqdWFuIGtlLTMgeWFpdHUgS2VoaWR1cGFuIFNlaGF0IGRhbiBTZWphaHRlcmEsIGRlbmdhbiB0YXJnZXQgMy4zIHlhbmcgbWVuYXJnZXRrYW4gcGVuZ2FraGlyYW4gZXBpZGVtaSBUQiBwYWRhIHRhaHVuIDIwMzAuIEhhbCBpbmkgbWVudW5qdWtrYW4gYmFod2EgcGVuYW5nZ3VsYW5nYW4gVEIgYnVrYW4gaGFueWEgcHJpb3JpdGFzIG5hc2lvbmFsLCB0ZXRhcGkganVnYSBiYWdpYW4gZGFyaSBrb21pdG1lbiBnbG9iYWwgeWFuZyBoYXJ1cyBkaWR1a3VuZyBtZWxhbHVpIHVwYXlhIGJlcmJhc2lzIGRhdGEgZGFuIHdpbGF5YWguIEluZG9uZXNpYSB0ZXJtYXN1ayBuZWdhcmEgZGVuZ2FuIGJlYmFuIFRCIHRlcnRpbmdnaSBkaSBkdW5pYSBkYW4gbWVueXVtYmFuZyBzZWtpdGFyIDEwJSBkYXJpIHRvdGFsIGthc3VzIFRCIGdsb2JhbCAoV0hPLCAyMDI1KS4NCg0KRGkgSW5kb25lc2lhLCBUdWJlcmt1bG9zaXMgKFRCKSBtYXNpaCBtZW5qYWRpIHNhbGFoIHNhdHUgbWFzYWxhaCBrZXNlaGF0YW4gbWFzeWFyYWthdCB5YW5nIHV0YW1hLiBKdW1sYWgga2FzdXMgVEIgeWFuZyBkaWxhcG9ya2FuIG1lbnVuanVra2FuIHRyZW4gcGVuaW5na2F0YW4gZGFyaSB0YWh1biBrZSB0YWh1bi4gQmVyZGFzYXJrYW4gUHJvZmlsIEtlc2VoYXRhbiBJbmRvbmVzaWEgMjAyNCwgdGVyZGFwYXQgMjI5LjY4MyBrYXN1cyBUQiB5YW5nIGRpbGFwb3JrYW4gcGFkYSB0YWh1biAyMDI0LCBtZW5pbmdrYXQgZGliYW5kaW5na2FuIHRhaHVuIHNlYmVsdW1ueWEuIEphd2EgQmFyYXQgbWVydXBha2FuIHByb3ZpbnNpIGRlbmdhbiBiZWJhbiBUQiB0ZXJ0aW5nZ2kgZGkgSW5kb25lc2lhLCBkZW5nYW4ganVtbGFoIGthc3VzIG1lbmNhcGFpIDIyNS4zODkga2FzdXMgcGFkYSB0YWh1biAyMDI1LiBUaW5nZ2lueWEganVtbGFoIGthc3VzIHRlcnNlYnV0IG1lbnVuanVra2FuIGJhaHdhIFRCIG1hc2loIG1lbmphZGkgdGFudGFuZ2FuIHNlcml1cyBkYWxhbSB1cGF5YSBwZW5nZW5kYWxpYW4gcGVueWFraXQgbWVudWxhciBkaSBKYXdhIEJhcmF0IGRhbiBtZW1lcmx1a2FuIHBlcmhhdGlhbiBraHVzdXMgZGFsYW0gcGVyZW5jYW5hYW4gcHJvZ3JhbSBrZXNlaGF0YW4gYmVyYmFzaXMgd2lsYXlhaCAoS2VtZW50ZXJpYW4gS2VzZWhhdGFuIFJlcHVibGlrIEluZG9uZXNpYSwgMjAyNTsgRGluYXMgS2VzZWhhdGFuIFByb3ZpbnNpIEphd2EgQmFyYXQsIDIwMjUpLg0KDQpUaW5nZ2lueWEga2FzdXMgVEIgZGlwZW5nYXJ1aGkgb2xlaCBiZXJiYWdhaSBmYWt0b3Igc29zaWFsLCBla29ub21pLCBkYW4gbGluZ2t1bmdhbi4gQmViZXJhcGEgcGVuZWxpdGlhbiBtZW51bmp1a2thbiBiYWh3YSBrZXBhZGF0YW4gcGVuZHVkdWssIHRpbmdrYXQga2VtaXNraW5hbiwga3VhbGl0YXMgc2FuaXRhc2ksIGFrc2VzIGFpciBtaW51bSBsYXlhaywga2V0ZXJzZWRpYWFuIGZhc2lsaXRhcyBrZXNlaGF0YW4sIHNlcnRhIGthc3VzIEhJViBiZXJodWJ1bmdhbiBkZW5nYW4ga2VqYWRpYW4gVEIgKFNpaGFsb2hvIGV0IGFsLiwgMjAyMTsgTGFvbGkgZXQgYWwuLCAyMDI0OyBIYW5kYXlhbmkgZXQgYWwuLCAyMDI0KS4gU2VsYWluIGl0dSwga2FyYWt0ZXJpc3RpayB3aWxheWFoIHlhbmcgYmVyYmVkYSBtZW55ZWJhYmthbiBkaXN0cmlidXNpIGthc3VzIFRCIHRpZGFrIG1lcmF0YSBhbnRhciBkYWVyYWguDQoNClBlcmJlZGFhbiBkaXN0cmlidXNpIGthc3VzIGFudGFyd2lsYXlhaCBtZW51bmp1a2thbiBwZW50aW5nbnlhIHBlbmRla2F0YW4gc3Bhc2lhbCBkYWxhbSBhbmFsaXNpcyBlcGlkZW1pb2xvZ2kuIEFuYWxpc2lzIHNwYXNpYWwgbWVtdW5na2lua2FuIGlkZW50aWZpa2FzaSBwb2xhIHBlcnNlYmFyYW4gcGVueWFraXQgYmVyZGFzYXJrYW4gbG9rYXNpIGdlb2dyYWZpcyBzZWhpbmdnYSBkYXBhdCBtZW1iYW50dSBtZW5lbnR1a2FuIHdpbGF5YWggcHJpb3JpdGFzIHBlbmdlbmRhbGlhbiBUQi4gRGFsYW0gcGVuZWxpdGlhbiBpbmksIGFuYWxpc2lzIGRpbGFrdWthbiBtZWxhbHVpIHBlbWV0YWFuIEluY2lkZW5jZSBSYXRlIChJUiksIHBlbW9kZWxhbiBmYWt0b3ItZmFrdG9yIHlhbmcgYmVyaHVidW5nYW4gZGVuZ2FuIHRpbmdrYXQgcGVudWxhcmFuIFRCIG1lbmdndW5ha2FuIHJlZ3Jlc2kgT3JkaW5hcnkgTGVhc3QgU3F1YXJlcyAoT0xTKSwgc2VydGEgcGVuZ3VqaWFuIGVmZWsga2V0ZXJnYW50dW5nYW4gc3Bhc2lhbC4NCg0KTW9kZWwgT0xTIGtvbnZlbnNpb25hbCBtZW5nYXN1bXNpa2FuIGJhaHdhIHBlbmdhbWF0YW4gZGkgc3VhdHUgd2lsYXlhaCBiZXJzaWZhdCBpbmRlcGVuZGVuIGRhbiB0aWRhayBkaXBlbmdhcnVoaSBvbGVoIHdpbGF5YWggc2VraXRhcm55YS4gTmFtdW4sIHBlbnlha2l0IG1lbnVsYXIgc2VwZXJ0aSBUQiBtZW1pbGlraSBrYXJha3RlcmlzdGlrIGJhd2FhbiBiZXJ1cGEgZWZlayBsaW1wYWhhbiAoc3BpbGxvdmVyIGVmZmVjdCkgYWtpYmF0IG1vYmlsaXRhcyBwZW5kdWR1ayBsaW50YXMgYmF0YXMgYWRtaW5pc3RyYXRpZi4gT2xlaCBrYXJlbmEgaXR1LCBqaWthIHRlcmRhcGF0IGtldGVyZ2FudHVuZ2FuIHNwYXNpYWwgcGFkYSB2YXJpYWJlbCBwZW5qZWxhcywgbW9kZWwgU3BhdGlhbCBMYWcgWCAoU0xYKSBkaXRlcmFwa2FuIHVudHVrIG1lbmdoYXNpbGthbiBlc3RpbWFzaSB5YW5nIGxlYmloIGFrdXJhdCBtZWxhbHVpIHBlbWJvYm90YW4gbWF0cmlrcyBrZXRldGFuZ2dhYW4gKHNwYXRpYWwgd2VpZ2h0IG1hdHJpeCkuIEhhc2lsIHBlbmVsaXRpYW4gaW5pIGRpaGFyYXBrYW4gZGFwYXQgbWVtYmVyaWthbiBnYW1iYXJhbiBtZW5nZW5haSBmYWt0b3IgbG9rYWwgZGFuIGZha3RvciBsaW5na3VuZ2FuIHRldGFuZ2dhIHlhbmcgYmVyaHVidW5nYW4gZGVuZ2FuIGtlamFkaWFuIFRCIGRpIFByb3ZpbnNpIEphd2EgQmFyYXQgc2ViYWdhaSBkYXNhciBwZXJlbmNhbmFhbiBwcm9ncmFtIHBlbmdlbmRhbGlhbiBiZXJiYXNpcyB3aWxheWFoLg0KDQojIyAxLjIgUnVtdXNhbiBNYXNhbGFoDQoNCjEpIEJhZ2FpbWFuYSBrYXJha3RlcmlzdGlrIGRhbiBkaXN0cmlidXNpIHNwYXNpYWwga2FzdXMgVEIgZGkgSmF3YSBCYXJhdD8gDQoNCjIpIEJhZ2FpbWFuYSBwb2xhIHBlcnNlYmFyYW4gSW5jaWRlbmNlIFJhdGUgVEI/IA0KDQozKSBCYWdhaW1hbmEgcGVuZ2FydWggZmFrdG9yIHNvc2lhbC1la29ub21pIGRhbiBrZXNlaGF0YW4gdGVyaGFkYXAgVEIgbWVuZ2d1bmFrYW4gT0xTPyANCg0KNCkgQXBha2FoIHRlcmRhcGF0IGVmZWsgc3Bhc2lhbCB5YW5nIGxlYmloIGJhaWsgZGlqZWxhc2thbiBkZW5nYW4gbW9kZWwgU0xYPw0KDQoNCg0KIyMgMS4zIFR1anVhbiBQZW5lbGl0aWFuDQoNCjEpIE1lbmRlc2tyaXBzaWthbiBrYXJha3RlcmlzdGlrIGthc3VzIFRCIGRpIEphd2EgQmFyYXQuIA0KMikgTWVtZXRha2FuIGRpc3RyaWJ1c2kgSW5jaWRlbmNlIFJhdGUgVEIuIA0KMykgTWVuZ2FuYWxpc2lzIGZha3RvciB5YW5nIG1lbWVuZ2FydWhpIFRCIG1lbmdndW5ha2FuIE9MUy4gDQo0KSBNZW5ndWppIGRhbiBtZW1iYW5kaW5na2FuIG1vZGVsIE9MUyBkYW4gU0xYLg0KDQojIDIuIERhdGEgZGFuIE1ldG9kZSANCiMjIDIuMSBEYXRhIFBlbmVsaXRpYW4NCg0KRGF0YSB5YW5nIGRpZ3VuYWthbiBtZXJ1cGFrYW4gZGF0YSBzZWt1bmRlciB5YW5nIG1lbmNha3VwIDI3IGthYnVwYXRlbi9rb3RhIGRpIFByb3ZpbnNpIEphd2EgQmFyYXQgcGFkYSB0YWh1biAyMDI1LiBEYXRhIGF0cmlidXQgZGlwZXJvbGVoIGRhcmkgQmFkYW4gUHVzYXQgU3RhdGlzdGlrIChCUFMpIFByb3ZpbnNpIEphd2EgQmFyYXQgc2VydGEgUG9ydGFsIE9wZW4gRGF0YSBKYWJhciwgc2VkYW5na2FuIGRhdGEgc3Bhc2lhbCBiZXJ1cGEgYmF0YXMgYWRtaW5pc3RyYXNpIGthYnVwYXRlbi9rb3RhIGRhbGFtIGZvcm1hdCAqc2hhcGVmaWxlKiAoU0hQKSBkaXBlcm9sZWggZGFyaSBQb3J0YWwgT3BlbiBEYXRhIEphYmFyLiBEYXRhIHNwYXNpYWwgdGVyc2VidXQgZGlndW5ha2FuIHVudHVrIG1lbWJhbmd1biBtYXRyaWtzIHBlbWJvYm90IHNwYXNpYWwgZGFuIG1lbXZpc3VhbGlzYXNpa2FuIHNlYmFyYW4ga2FzdXMgVHViZXJrdWxvc2lzIChUQikgYW50YXJ3aWxheWFoLiBWYXJpYWJlbCBwZW5lbGl0aWFuIHRlcmRpcmkgYXRhcyBzYXR1IHZhcmlhYmVsIHJlc3BvbiB5YWl0dSBJUiBUdWJlcmt1bG9zaXMgKFRCKSwgZW5hbSB2YXJpYWJlbCBwZW5qZWxhcyB5YW5nIG1lbmNlcm1pbmthbiBmYWt0b3Igc29zaWFsLCBla29ub21pLCBkYW4ga2VzZWhhdGFuLCBzZXJ0YSBqdW1sYWggcGVuZHVkdWsgeWFuZyBkaWd1bmFrYW4gc2ViYWdhaSBkYXNhciBwZXJoaXR1bmdhbiAqSW5jaWRlbmNlIFJhdGUqIChJUikuIERlZmluaXNpIG9wZXJhc2lvbmFsIHZhcmlhYmVsIHlhbmcgZGlndW5ha2FuIGRpc2FqaWthbiBwYWRhIFRhYmVsIDEuDQoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCnNldHdkKCJEOi9NQUdJU1RFUi9TRU1FU1RFUiAyIikNCg0KZGF0YSA8LSByZWFkX2V4Y2VsKA0KICAiZGF0YXNldCBUQi54bHN4IiwNCiAgc2hlZXQgPSAic3Bhc2lhbCINCikNCg0KZGF0YSA8LSBkYXRhICU+JQ0KICByZW5hbWUoDQogICAgcGVuZHVkdWtfbWlza2luID0gYHBlcnNlbnRhc2UgcGVuZHVkdWsgbWlza2luYCwNCiAgICBrZXBhZGF0YW4gPSBga2VwYWRhdGFuIHBlbmR1ZHVrYCwNCiAgICBhaXJfbWludW0gPSBgYWlyIG1pbnVtIGxheWFrYCwNCiAgICBzYW5pdGFzaSA9IGBzYW5pdGFzaSBsYXlha2AsDQogICAgaGl2ID0gYGp1bWxhaCBrYXN1cyBISVZgLA0KICAgIGp1bWxhaF9wZW5kdWR1ayA9IGBKdW1sYWggUGVuZHVkdWtgDQogICkgJT4lDQogIG11dGF0ZSgNCiAgICBUQiAgICAgICAgICAgICAgICA9IGFzLm51bWVyaWMoVEIpLA0KICAgIGZhc2tlcyAgICAgICAgICAgID0gYXMubnVtZXJpYyhmYXNrZXMpLA0KICAgIHBlbmR1ZHVrX21pc2tpbiAgID0gYXMubnVtZXJpYyhwZW5kdWR1a19taXNraW4pLA0KICAgIGtlcGFkYXRhbiAgICAgICAgID0gYXMubnVtZXJpYyhrZXBhZGF0YW4pLA0KICAgIGFpcl9taW51bSAgICAgICAgID0gYXMubnVtZXJpYyhhaXJfbWludW0pLA0KICAgIHNhbml0YXNpICAgICAgICAgID0gYXMubnVtZXJpYyhzYW5pdGFzaSksDQogICAgaGl2ICAgICAgICAgICAgICAgPSBhcy5udW1lcmljKGhpdiksDQogICAganVtbGFoX3BlbmR1ZHVrICAgPSBhcy5udW1lcmljKGp1bWxhaF9wZW5kdWR1ayksDQoNCmluY2lkZW5jZV9yYXRlX1RCID0NCiAgICAgIChUQiAvIGp1bWxhaF9wZW5kdWR1aykgKiAxMDAwMDANCiAgKQ0KDQpzZXR3ZCgiRDovQmF0YXMvQmF0YXMiKQ0KDQpqYWJhciA8LSBzdF9yZWFkKA0KICAiQmF0YXNfS2FidXBhdGVuX0phd2FfQmFyYXQuc2hwIiwNCiAgcXVpZXQgPSBUUlVFDQopDQoNCmRhdGEka2FiX2NsZWFuIDwtIGRhdGEkbmFtYV9rYWJ1cGF0ZW5fa290YSAlPiUNCiAgdG91cHBlcigpICU+JQ0KICBnc3ViKCJLQUJVUEFURU4gIiwgIiIsIC4pDQoNCmphYmFyJGthYl9jbGVhbiA8LSB0b3VwcGVyKGphYmFyJFdBRE1LSykNCg0KamFiYXJfdGIgPC0gbWVyZ2UoDQogIGphYmFyLA0KICBkYXRhLA0KICBieSA9ICJrYWJfY2xlYW4iDQopDQoNCmBgYA0KDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCAxLioqIFZhcmlhYmVsIFBlbmVsaXRpYW4NCjwvZGl2Pg0KDQoNCnwgVmFyaWFiZWwgICAgICAgICAgICAgICAgICAgICB8IERlZmluaXNpIE9wZXJhc2lvbmFsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGFzYXIgVGVvcmkgZGFuIEVtcGlyaXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEFyYWggSHVidW5nYW4geWFuZyBEaWhhcmFwa2FuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8DQp8ICoqSVIgVHViZXJrdWxvc2lzIChZKSoqICAgICAgfCBKdW1sYWgga2FzdXMgVEIgcGVyIDEwMC4wMDAgcGVuZHVkdWsgcGFkYSBzZXRpYXAga2FidXBhdGVuL2tvdGEgZGkgSmF3YSBCYXJhdCB0YWh1biAyMDI1LiB8IERpZ3VuYWthbiBzZWJhZ2FpIHVrdXJhbiByaXNpa28ga2VqYWRpYW4gVEIgeWFuZyBtZW11bmdraW5rYW4gcGVyYmFuZGluZ2FuIGFudGFyd2lsYXlhaCBkZW5nYW4ganVtbGFoIHBlbmR1ZHVrIGJlcmJlZGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipGYXNpbGl0YXMgS2VzZWhhdGEgKCRYXzEkKSoqIHwgSnVtbGFoIGZhc2lsaXRhcyBrZXNlaGF0YW4gcGFkYSBzZXRpYXAga2FidXBhdGVuL2tvdGEuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBBa3NlcyB0ZXJoYWRhcCBwZWxheWFuYW4ga2VzZWhhdGFuIGJlcnBlcmFuIHBlbnRpbmcgZGFsYW0gcGVuZW11YW4ga2FzdXMsIGRpYWdub3NpcywgZGFuIHBlbmdvYmF0YW4gVEIuIFJhaG1hd2F0aSBldCBhbC4gKDIwMjYpIG1lbnVuanVra2FuIGJhaHdhIGluZGlrYXRvciBpbmZyYXN0cnVrdHVyIGtlc2VoYXRhbiBiZXJ1cGEganVtbGFoIGRva3RlciBkYW4ga2VwZXNlcnRhYW4gSktOIGJlcmFzb3NpYXNpIGRlbmdhbiBrYXN1cyBUQiB5YW5nIHRlcmxhcG9ya2FuLiBEZW5nYW4gZGVtaWtpYW4sIGZhc2lsaXRhcyBrZXNlaGF0YW4gZGlwYW5kYW5nIHNlYmFnYWkgcHJva3NpIGthcGFzaXRhcyBzaXN0ZW0ga2VzZWhhdGFuIGRhbGFtIHBlbmdlbmRhbGlhbiBUQi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipQb3NpdGlmICgrKSoqLiBTZW1ha2luIGJhbnlhayBmYXNpbGl0YXMga2VzZWhhdGFuLCBzZW1ha2luIHRpbmdnaSBrZW1hbXB1YW4gcGVuZW11YW4gZGFuIHBlbGFwb3JhbiBrYXN1cyBUQiAoKmNhc2UgZGV0ZWN0aW9uKikuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqUGVuZHVkdWsgTWlza2luICgkWF8yJCkqKiAgICAgfCBQZXJzZW50YXNlIHBlbmR1ZHVrIG1pc2tpbiBwYWRhIHNldGlhcCBrYWJ1cGF0ZW4va290YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEZha3RvciBzb3NpYWwgZWtvbm9taSBtZXJ1cGFrYW4gZGV0ZXJtaW5hbiB1dGFtYSBUQi4gU3R1ZGkgc3Bhc2lhbCBkaSBKYXdhIG1lbmVtdWthbiBiYWh3YSBrZW1pc2tpbmFuIHRlcm1hc3VrIGZha3RvciB5YW5nIGRpYW5hbGlzaXMgYmVyc2FtYSBwcmV2YWxlbnNpIFRCLiBTZWxhaW4gaXR1LCBhbmFsaXNpcyBuYXNpb25hbCBJbmRvbmVzaWEgbWVudW5qdWtrYW4gYmFod2EgZmFrdG9yIHNvc2lhbCBla29ub21pIGJlcmFzb3NpYXNpIGRlbmdhbiB2YXJpYXNpIHNwYXNpYWwga2VqYWRpYW4gVEIuIE9sZWgga2FyZW5hIGl0dSwgd2lsYXlhaCBkZW5nYW4gcHJvcG9yc2kgcGVuZHVkdWsgbWlza2luIHlhbmcgbGViaWggdGluZ2dpIGNlbmRlcnVuZyBtZW1pbGlraSByaXNpa28gVEIgeWFuZyBsZWJpaCBiZXNhci4gfCAqKlBvc2l0aWYgKCspKiouIFNlbWFraW4gdGluZ2dpIHByb3BvcnNpIHBlbmR1ZHVrIG1pc2tpbiwgc2VtYWtpbiB0aW5nZ2kgcmlzaWtvIGtlamFkaWFuIFRCIGFraWJhdCBrZXRlcmJhdGFzYW4gYWtzZXMga2VzZWhhdGFuLCBnaXppLCBkYW4ga29uZGlzaSBodW5pYW4geWFuZyBrdXJhbmcgbGF5YWsuIHwNCnwgKipLZXBhZGF0YW4gUGVuZHVkdWsgKCRYXzMkKSoqICB8IEp1bWxhaCBwZW5kdWR1ayBwZXIga23CsiBwYWRhIHNldGlhcCBrYWJ1cGF0ZW4va290YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFB1dHJhIGV0IGFsLiAoMjAyMikgbWVuZW11a2FuIGJhaHdhIGtlcGFkYXRhbiBydW1haCB0YW5nZ2EgYmVyaHVidW5nYW4gZGVuZ2FuIHByZXZhbGVuc2kgVEIgZGkgUHVsYXUgSmF3YS4gUmFobWF3YXRpIGV0IGFsLiAoMjAyNikganVnYSBtZW51bmp1a2thbiBiYWh3YSBrZXBhZGF0YW4gcGVuZHVkdWsgbWVtaWxpa2kgcGVuZ2FydWggcG9zaXRpZiB0ZXJoYWRhcCBrYXN1cyBUQiBkYW4gbWVuZ2hhc2lsa2FuIGVmZWsgbGltcGFoYW4gc3Bhc2lhbCAoKnNwYXRpYWwgc3BpbGxvdmVyKikuIFBlbmVsaXRpYW4gZGkgS2FidXBhdGVuIEJla2FzaSBqdWdhIG1lbnVuanVra2FuIGFkYW55YSBodWJ1bmdhbiBzcGFzaWFsIGFudGFyYSBrZXBhZGF0YW4gcGVuZHVkdWsgZGFuIHBlcnNlYmFyYW4ga2FzdXMgVEIuICAgICAgfCAqKlBvc2l0aWYgKCspKiouIFNlbWFraW4gcGFkYXQgc3VhdHUgd2lsYXlhaCwgc2VtYWtpbiB0aW5nZ2kgcGVsdWFuZyBrb250YWsgYW50YXJpbmRpdmlkdSBzZWhpbmdnYSBtZW5pbmdrYXRrYW4gcmlzaWtvIHBlbnVsYXJhbiBUQi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipBaXIgTWludW0gTGF5YWsgKCRYXzQkKSoqICAgICB8IFBlcnNlbnRhc2UgcnVtYWggdGFuZ2dhIHlhbmcgbWVtaWxpa2kgYWtzZXMgdGVyaGFkYXAgYWlyIG1pbnVtIGxheWFrLiAgICAgICAgICAgICAgICAgICAgIHwgUmFobWF3YXRpIGV0IGFsLiAoMjAyNikgbWVuZ2d1bmFrYW4gYWtzZXMgYWlyIG1pbnVtIHNlYmFnYWkgc2FsYWggc2F0dSBpbmRpa2F0b3IgaW5mcmFzdHJ1a3R1ciBrZXNlaGF0YW4gZGFsYW0gbW9kZWwgc3Bhc2lhbCBUQi4gVmFyaWFiZWwgaW5pIGRpcGVydGltYmFuZ2thbiBzZWJhZ2FpIGluZGlrYXRvciBrdWFsaXRhcyBsaW5na3VuZ2FuIGRhbiBrZXNlaGF0YW4gbWFzeWFyYWthdCB5YW5nIGRhcGF0IG1lbWVuZ2FydWhpIHJpc2lrbyBwZW55YWtpdCBtZW51bGFyLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICoqTmVnYXRpZiAoLSkqKi4gU2VtYWtpbiB0aW5nZ2kgYWtzZXMgYWlyIG1pbnVtIGxheWFrLCBzZW1ha2luIGJhaWsga29uZGlzaSBrZXNlaGF0YW4gbGluZ2t1bmdhbiBzZWhpbmdnYSByaXNpa28gVEIgY2VuZGVydW5nIG1lbnVydW4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKlNhbml0YXNpIExheWFrICgkWF81JCkqKiAgICAgIHwgUGVyc2VudGFzZSBydW1haCB0YW5nZ2EgeWFuZyBtZW1pbGlraSBha3NlcyB0ZXJoYWRhcCBzYW5pdGFzaSBsYXlhay4gICAgICAgICAgICAgICAgICAgICAgfCBSYWhtYXdhdGkgZXQgYWwuICgyMDI2KSBtZW1hc3Vra2FuIHNhbml0YXNpIHNlYmFnYWkgaW5kaWthdG9yIGluZnJhc3RydWt0dXIga2VzZWhhdGFuLiBTZWxhaW4gaXR1LCBzdHVkaSBzcGFzaWFsIFRCIGRpIEphd2EgQmFyYXQgbWVuZ2d1bmFrYW4gaW5kaWthdG9yIHNhbml0YXNpIGxpbmdrdW5nYW4gc2ViYWdhaSBmYWt0b3IgeWFuZyBkaWFuYWxpc2lzIGJlcnNhbWEgZGlzdHJpYnVzaSBzcGFzaWFsIFRCLiBTYW5pdGFzaSB5YW5nIGJhaWsgZGFwYXQgbWVuZ3VyYW5naSBrZXJlbnRhbmFuIG1hc3lhcmFrYXQgdGVyaGFkYXAgYmVyYmFnYWkgcGVueWFraXQgaW5mZWtzaSBkYW4gbWVuY2VybWlua2FuIGt1YWxpdGFzIGxpbmdrdW5nYW4geWFuZyBsZWJpaCBzZWhhdC4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgKipOZWdhdGlmICgtKSoqLiBTZW1ha2luIHRpbmdnaSBjYWt1cGFuIHNhbml0YXNpIGxheWFrLCBzZW1ha2luIHJlbmRhaCByaXNpa28ga2VqYWRpYW4gVEIga2FyZW5hIGt1YWxpdGFzIGxpbmdrdW5nYW4geWFuZyBsZWJpaCBiYWlrLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqSElWICgkWF82JCkqKiAgICAgICAgICAgICAgICAgfCBKdW1sYWgga2FzdXMgSElWIHBhZGEgc2V0aWFwIGthYnVwYXRlbi9rb3RhLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhJViBtZXJ1cGFrYW4gZmFrdG9yIHJpc2lrbyB1dGFtYSBUQiBrYXJlbmEgbWVueWViYWJrYW4gcGVudXJ1bmFuIHNpc3RlbSBpbXVuIHNlaGluZ2dhIG1lbmluZ2thdGthbiByaXNpa28gYmVya2VtYmFuZ255YSBpbmZla3NpIFRCIGFrdGlmLiBLYWppYW4gc2lzdGVtYXRpcyBtZXRvZGUgYW5hbGlzaXMgc3Bhc2lhbCBUQiBtZW51bmp1a2thbiBiYWh3YSBiYW55YWsgcGVuZWxpdGlhbiB0ZWxhaCBtZW5nYW5hbGlzaXMgaHVidW5nYW4gc3Bhc2lhbCBhbnRhcmEgVEIgZGFuIEhJVi4gT2xlaCBrYXJlbmEgaXR1LCB3aWxheWFoIGRlbmdhbiBqdW1sYWgga2FzdXMgSElWIHlhbmcgbGViaWggdGluZ2dpIGJlcnBvdGVuc2kgbWVtaWxpa2kgYmViYW4gVEIgeWFuZyBsZWJpaCBiZXNhci4gICAgICAgICAgICAgICAgICAgfCAqKlBvc2l0aWYgKCspKiouIFNlbWFraW4gdGluZ2dpIGp1bWxhaCBrYXN1cyBISVYsIHNlbWFraW4gdGluZ2dpIHJpc2lrbyBUQiBrYXJlbmEgbWVuaW5na2F0bnlhIGtlcmVudGFuYW4gdGVyaGFkYXAgaW5mZWtzaSBvcG9ydHVuaXN0aWsuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipKdW1sYWggUGVuZHVkdWsqKiAgICAgICAgICB8IEp1bWxhaCBwZW5kdWR1ayBwYWRhIHNldGlhcCBrYWJ1cGF0ZW4va290YS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgRGlndW5ha2FuIHNlYmFnYWkgcG9wdWxhc2kgYmVyaXNpa28gKCpwb3B1bGF0aW9uIGF0IHJpc2sqKSBkYWxhbSBwZXJoaXR1bmdhbiBpbmNpZGVuY2UgcmF0ZSBUQi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFRpZGFrIGRpYW5hbGlzaXMgc2ViYWdhaSB2YXJpYWJlbCBwcmVkaWt0b3IuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KDQoqKlN1bWJlciBEYXRhOioqIEJhZGFuIFB1c2F0IFN0YXRpc3RpayBQcm92aW5zaSBKYXdhIEJhcmF0IGRhbiBQb3J0YWwgT3BlbiBEYXRhIEphYmFyLg0KDQoNCiMjIDIuMiBNZXRvZGUgQW5hbGlzaXMNCiMjIyAyLjIuMSBBbmFsaXNpcyBEZXNrcmlwdGlmIGRhbiBJbmNpZGFuY2UgUmF0ZQ0KDQpBbmFsaXNpcyBkZXNrcmlwdGlmIGRpbGFrdWthbiB1bnR1ayBtZW1iZXJpa2FuIGdhbWJhcmFuIHVtdW0gbWVuZ2VuYWkgZGlzdHJpYnVzaSBrYXN1cyBUdWJlcmt1bG9zaXMgKFRCKSBwYWRhIHNldGlhcCBrYWJ1cGF0ZW4va290YSBkaSBQcm92aW5zaSBKYXdhIEJhcmF0IFRhaHVuIDIwMjUuIEluY2lkYW5jZSBSYXRlIHNlYmFnYWkgdWt1cmFuIGVwaWRlbWlvbG9naSBkaWd1bmFrYW4gdW50dWsgbWVuZ3VrdXIgZnJla3VlbnNpIGthc3VzIGJhcnUgVEIgeWFuZyB0ZXJqYWRpIGRhbGFtIHBvcHVsYXNpIGJlcmlzaWtvIHNlbGFtYSBwZXJpb2RlIHdha3R1IHRlcnRlbnR1IGRpIHdpbGF5YWggdGVydGVudHUuIEZvcm11bGEgcGVuZ2hpdHVuZ2FuIElSIGRhbGFtIHBlbmVsaXRpYW4gaW5pIGRlbmdhbiBwZXIgMTAwLjAwMCBwZW5kdWR1ayBkaXJ1bXVza2FuIHNlYmFnYWkgYmVyaWt1dDoNCg0KJCQNCklSX2kgPSBcZnJhY3tUQl9pfXtcdGV4dHtKdW1sYWggUGVuZHVkdWt9X2l9IFx0aW1lcyAxMDAuMDAwDQokJA0KDQoNCkRlbmdhbjoNCg0KJElSX2kkCQkJOiAganVtbGFoIGthc3VzIFRCIHBhZGEga2FidXBhdGVuL2tvdGEgaS4NCg0KJHtcdGV4dHtKdW1sYWggUGVuZHVkdWt9X2l9JAk6IGp1bWxhaCBwb3B1bGFzaSBkaSB3aWxheWFoIGkuDQoNCg0KIyMjIDIuMi4zIE1hdHJpayBQZW1ib2JvdCBTcGFzaWFsDQoNCmBgYHtyIH0NCm5iIDwtIHBvbHkybmIoDQogIGphYmFyX3RiLA0KICBxdWVlbiA9IFRSVUUNCikNCg0KbHcgPC0gbmIybGlzdHcoDQogIG5iLA0KICBzdHlsZSA9ICJXIiwNCiAgemVyby5wb2xpY3kgPSBUUlVFDQopDQpgYGANCg0KQmVyZGFzYXJrYW4ga3JpdGVyaWEgUXVlZW4gQ29udGlndWl0eSwgZHVhIHdpbGF5YWggc3Bhc2lhbCBpIGRhbiBqIGRpbnlhdGFrYW4gc2FsaW5nIGJlcnRldGFuZ2dhIGppa2Ega2VkdWFueWEgYmVyYmFnaSBiYXRhcyB3aWxheWFoIGJlcnNhbWEsIGJhaWsgYmVydXBhIHBlcnNpbmdndW5nYW4gZ2FyaXMgKGVkZ2UpIG1hdXB1biB0aXRpayBzdWR1dCAodmVydGV4KS4gU2VjYXJhIG1hdGVtYXRpcywgZWxlbWVuIG1hdHJpa3Mga2V0ZXRhbmdnYWFuIGF3YWwgJHdfe2lqfSQgZGlkZWZpbmlzaWthbiBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiQkDQp3X3tpan0gPQ0KXGJlZ2lue2Nhc2VzfQ0KMSwgJiBcdGV4dHtqaWthIHdpbGF5YWggfSBpIFx0ZXh0eyBkYW4gfSBqIFx0ZXh0eyBiZXJiYWdpIGJhdGFzIGdhcmlzIGF0YXUgdGl0aWt9LCBcXA0KMCwgJiBcdGV4dHtqaWthIHdpbGF5YWggfSBpIFx0ZXh0eyBkYW4gfSBqIFx0ZXh0eyB0aWRhayBiZXJiYWdpIGJhdGFzIGxhbmdzdW5nIGF0YXUgfSBpPWouDQpcZW5ke2Nhc2VzfQ0KJCQNCkRpbWFuYSBlbGVtZW4gcGVtYm9ib3Qgc3Bhc2lhbCB0ZXJzdGFuZGFyZGlzYXNpIGJhcmlzICR3X3tpan0kIGRpaGl0dW5nIGRlbmdhbiBtZW1iYWdpIHNldGlhcCBlbGVtZW4gYmluZXIgZGVuZ2FuIHRvdGFsIGp1bWxhaCB0ZXRhbmdnYSBwYWRhIGJhcmlzIHRlcnNlYnV0LiBUcmFuc2Zvcm1hc2kgaW5pIG1lbmd1YmFoIGludGVycHJldGFzaSBlZmVrIHNwYXNpYWwgbWVuamFkaSBuaWxhaSByYXRhLXJhdGEgc3Bhc2lhbCAoc3BhdGlhbCBsYWcpIGRhcmkga2FyYWt0ZXJpc3RpayB3aWxheWFoLXdpbGF5YWggdGV0YW5nZ2FueWE6DQoNCiQkDQpXX3tpan0gPSBcZnJhY3t3X3tpan19e1xzdW1fe2o9MX1ee259IHdfe2lqfX0NCiQkDQoJDQojIyMgMi4yLjMgTW9kZWwgT0xTDQpNb2RlbCBPTFMgZGlndW5ha2FuIHNlYmFnYWkgbW9kZWwgYmFzZWxpbmUgdW50dWsgbWVuZ2VzdGltYXNpIGh1YnVuZ2FuIGxpbmVhciBnbG9iYWwgYW50YXJhIHZhcmlhYmVsIGluZGVwZW5kZW4gZGFuIEluY2lkZW5jZSBSYXRlIFRCIHRhbnBhIG1lbXBlcmhpdHVuZ2thbiBhc3BlayBsb2thc2kuIFBlcnNhbWFhbiByZWdyZXNpIGxpbmVhciBiZXJnYW5kYSBPTFMgZGFsYW0gcGVuZWxpdGlhbiBpbmkgZGlydW11c2thbiBzZWJhZ2FpIGJlcmlrdXQ6DQoNCiQkWWk9zrJfMCArzrJfMSBYXzFpICvOsl8yIFhfezJpfSArzrJfMyBYX3szaX0gK86yXzQgWF97NGl9K86yXzUgWF97NWl9ICvOsl82IFhfezZpfSArzrVfaSAkJA0KRGVuZ2FuOg0KDQokWV9pJAk6IEluY2lkYW5jZSBSYXRlIGthc3VzIFRCIA0KDQokzrJfMCQJOiBLb25zdGFudGEgKG5pbGFpIHBhcmFtZXRlciBpbnRlcmNlcHQpLg0KDQokzrJfMSzigKYszrJfNiQgOiBLb2VmaXNpZW4gcmVncmVzaSBtYXNpbmctbWFzaW5nIHZhcmlhYmVsIGluZGVwZW5kZW4gbG9rYWwuDQoNCiRYJAk6IFZhcmlhYmVsIFByZWRpa3Rvcg0KDQokzrVfaSQJOiBnYWxhdCB5YW5nIGRpYXN1bXNpa2FuIGJlcmRpc3RyaWJ1c2kgbm9ybWFsDQoNCiMjIyAyLjIuNCBTcGFzaWFsIExhZyBYDQoNCk1vZGVsIFNwYXRpYWwgTGFnIFggKFNMWCkgbWVydXBha2FuIHBlbmdlbWJhbmdhbiBkYXJpIG1vZGVsIE9MUyBrb252ZW5zaW9uYWwgZGVuZ2FuIG1lbmFtYmFoa2FuIHZhcmlhYmVsIHBlbmplbGFzIHlhbmcgdGVsYWggZGl0cmFuc2Zvcm1hc2lrYW4gbWVuZ2d1bmFrYW4gbWF0cmlrcyBwZW1ib2JvdCBzcGFzaWFsIChzcGF0aWFsIGxhZyBvZiBleG9nZW5vdXMgdmFyaWFibGVzKS4gTW9kZWwgaW5pIGRpZ3VuYWthbiB1bnR1ayBtZW5hbmdrYXAgZWZlayBsaW1wYWhhbiAoc3BpbGxvdmVyIGVmZmVjdCksIHlhaXR1IGtvbmRpc2kgZGkgbWFuYSB2YXJpYWJlbCB0ZXJpa2F0IChZKSBkaSBzdWF0dSB3aWxheWFoIHRpZGFrIGhhbnlhIGRpcGVuZ2FydWhpIG9sZWgga2FyYWt0ZXJpc3RpayBpbnRlcm5hbCB3aWxheWFoIGl0dSBzZW5kaXJpIChYKSwgbWVsYWlua2FuIGp1Z2EgZGlwZW5nYXJ1aGkgb2xlaCBrYXJha3RlcmlzdGlrIHdpbGF5YWgtd2lsYXlhaCB0ZXRhbmdnYSB5YW5nIGJlcmJhdGFzYW4gbGFuZ3N1bmcgKFdYKS4NCg0KU2VjYXJhIG1hdGVtYXRpcywgcGVyc2FtYWFuIG1vZGVsIFNMWCB1bnR1ayBJbmNpZGVuY2UgUmF0ZSBrYXN1cyBUQiBkaSAyNyBrYWJ1cGF0ZW4va290YSBQcm92aW5zaSBKYXdhIEJhcmF0IGRpcnVtdXNrYW4gc2ViYWdhaSBiZXJpa3V0Og0KDQokJA0KWV9pID0gXGJldGFfMCArDQpcc3VtX3trPTF9Xns2fSBcYmV0YV9rIFhfe2tpfSArDQpcc3VtX3trPTF9Xns2fSBcZ2FtbWFfayBcc3VtX3tqPTF9XntufSBXX3tpan0gWF97a2p9DQorIFx2YXJlcHNpbG9uX2kNCiQkDQoNCkRlbmdhbjoNCg0KJFlfaSQJOiBJbmNpZGVuY2UgUmF0ZSBUQiBwYWRhIHdpbGF5YWgga2UtaS4NCg0KJFhfe2tpfSQJOiB2YXJpYWJlbCBpbmRlcGVuZGVuIGxva2FsLg0KDQokV1gpX3traX0kOiBWYXJpYWJlbCBiZWJhcyB5YW5nIHRlbGFoIGRpYmVyaSBib2JvdCBzcGFzaWFsIChTcGFzaWFsIExhZyBYKS4NCg0KJM6yX2skCTogUGFyYW1ldGVyIGtvZWZpc2llbiByZWdyZXNpIHVudHVrIHZhcmlhYmVsIGJlYmFzIGxva2FsDQoNCiRcZ2FtbWFfayQ6IFBlbmdhcnVoIHRpZGFrIGxhbmdzdW5nIChzcGlsbG92ZXIgZWZmZWN0KSBkYXJpIHdpbGF5YWggdGV0YW5nZ2EuIA0KDQokXGVwc2lsb25faSQJOiBnYWxhdCBtb2RlbC4NCg0KDQojIDMuIEhhc2lsIEFuYWxpc2lzIA0KIyMgMy4xIEFuYWxpc2lzIERlc2tyaXB0aWYgZGFuIFBldGEgSVINCg0KDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCAyLioqIFN0YXRpc3RpayBEZXNrcmlwdGlmIA0KPC9kaXY+DQoNCg0KDQpgYGB7cn0NCnZhcnMgPC0gamFiYXJfdGIgJT4lDQogIHN0X2Ryb3BfZ2VvbWV0cnkoKSAlPiUNCiAgZHBseXI6OnNlbGVjdCgNCiAgICBUQiwNCiAgICBpbmNpZGVuY2VfcmF0ZV9UQiwNCiAgICBmYXNrZXMsDQogICAgcGVuZHVkdWtfbWlza2luLA0KICAgIGtlcGFkYXRhbiwNCiAgICBhaXJfbWludW0sDQogICAgc2FuaXRhc2ksDQogICAgaGl2DQogICkgJT4lDQogIG11dGF0ZShhY3Jvc3MoZXZlcnl0aGluZygpLCBhcy5udW1lcmljKSkNCg0KZGVzY190YWJsZSA8LSBkYXRhLmZyYW1lKA0KICBWYXJpYWJlbCA9IGMoDQogICAgIlRCIiwNCiAgICAiSW5jaWRlbmNlIFJhdGUgVEIiLA0KICAgICJGYXNrZXMiLA0KICAgICJQZW5kdWR1ayBNaXNraW4iLA0KICAgICJLZXBhZGF0YW4iLA0KICAgICJBaXIgTWludW0gTGF5YWsiLA0KICAgICJTYW5pdGFzaSBMYXlhayIsDQogICAgIkhJViINCiAgKSwNCiAgTWVhbiA9IHNhcHBseSh2YXJzLCBtZWFuLCBuYS5ybSA9IFRSVUUpLA0KICBTRCA9IHNhcHBseSh2YXJzLCBzZCwgbmEucm0gPSBUUlVFKSwNCiAgVmFyaWFucyA9IHNhcHBseSh2YXJzLCB2YXIsIG5hLnJtID0gVFJVRSksDQogIE1pbiA9IHNhcHBseSh2YXJzLCBtaW4sIG5hLnJtID0gVFJVRSksDQogIE1heCA9IHNhcHBseSh2YXJzLCBtYXgsIG5hLnJtID0gVFJVRSkNCikNCg0KDQprbml0cjo6a2FibGUoIGRlc2NfdGFibGUsIGRpZ2l0cyA9IDQpDQpgYGANCg0KDQpCZXJkYXNhcmthbiBoYXNpbCBzdGF0aXN0aWsgZGVza3JpcHRpZiwgdGVybGloYXQgYmFod2EganVtbGFoIGthc3VzIFR1YmVya3Vsb3NpcyAoVEIpIGRpIEphd2EgQmFyYXQgbWVtaWxpa2kgbmlsYWkgcmF0YS1yYXRhIHNlYmVzYXIgOC4zNDcsNzQga2FzdXMgZGVuZ2FuIHZhcmlhc2kgeWFuZyBjdWt1cCB0aW5nZ2kgYW50YXIgd2lsYXlhaCwgeWFuZyBkaXR1bmp1a2thbiBvbGVoIHN0YW5kYXIgZGV2aWFzaSBzZWJlc2FyIDYuMDQ2LDMyLiBTZW1lbnRhcmEgaXR1LCBpbmNpZGVuY2UgcmF0ZSBUQiBtZW1pbGlraSByYXRhLXJhdGEgNDg2LDc5IHBlciAxMDAuMDAwIHBlbmR1ZHVrIGRlbmdhbiByZW50YW5nIG5pbGFpIHlhbmcgY3VrdXAgbGViYXIsIG1lbnVuanVra2FuIGFkYW55YSBrZXRpbXBhbmdhbiBiZWJhbiBwZW55YWtpdCBhbnRhciBrYWJ1cGF0ZW4va290YS4NCg0KVW50dWsgdmFyaWFiZWwgaW5kZXBlbmRlbiwga29uZGlzaSBzb3NpYWwgZWtvbm9taSBkYW4ga2VzZWhhdGFuIGp1Z2EgbWVudW5qdWtrYW4gdmFyaWFzaSBhbnRhciB3aWxheWFoLiBWYXJpYWJlbCBrZXBhZGF0YW4gcGVuZHVkdWsgbWVtaWxpa2kgc2ViYXJhbiB5YW5nIHBhbGluZyB0aW5nZ2kgZGliYW5kaW5nIHZhcmlhYmVsIGxhaW4sIHNlZGFuZ2thbiB2YXJpYWJlbCBzZXBlcnRpIGFrc2VzIGFpciBtaW51bSBsYXlhayByZWxhdGlmIGxlYmloIGhvbW9nZW4gZGVuZ2FuIG5pbGFpIHlhbmcgbWVuZGVrYXRpIDEwMCUgZGkgc2ViYWdpYW4gYmVzYXIgd2lsYXlhaC4gU2VjYXJhIHVtdW0sIGhhc2lsIGluaSBtZW51bmp1a2thbiBhZGFueWEgaGV0ZXJvZ2VuaXRhcyBrb25kaXNpIGFudGFyIHdpbGF5YWggZGkgSmF3YSBCYXJhdCwgeWFuZyBtZW5naW5kaWthc2lrYW4gcG90ZW5zaSBhZGFueWEgcGVyYmVkYWFuIHJpc2lrbyBUdWJlcmt1bG9zaXMgYW50YXIgZGFlcmFoLg0KDQoNCmBgYHtyIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQoNCnRtX3NoYXBlKGphYmFyX3RiKSArDQogIHRtX3BvbHlnb25zKA0KICAgICJpbmNpZGVuY2VfcmF0ZV9UQiIsDQogICAgcGFsZXR0ZSA9ICJSZWRzIiwNCiAgICB0aXRsZSA9ICJJbmNpZGVuY2UgUmF0ZSBUQiINCiAgKSArDQogIHRtX3RleHQoDQogICAgdGV4dCA9ICJXQURNS0siLA0KICAgIHNpemUgPSAwLjUNCiAgKSArDQogIHRtX2xheW91dCgNCiAgICBsZWdlbmQub3V0c2lkZSA9IFRSVUUNCiAgKQ0KYGBgDQoNCg0KPGRpdiBhbGlnbj0iY2VudGVyIj4NCioqR2FtYmFyIDEuKiogVmlzdWFsaXNhc2kgUGV0YSBJbmNpZGFuY2UgUmF0ZSBUQiANCjwvZGl2Pg0KIA0KU2ViYWdpYW4gYmVzYXIgd2lsYXlhaCBkaSBKYXdhIEJhcmF0IGJlcmFkYSBwYWRhIGthdGVnb3JpIGluY2lkZW5jZSByYXRlIChJUikgcmVuZGFoIGhpbmdnYSBzZWRhbmcgKDIwMOKAkzU5OSBwZXIgMTAwLjAwMCBwZW5kdWR1aykgeWFuZyB0ZXJzZWJhciBkaSBiZXJiYWdhaSB3aWxheWFoIGJhcmF0LCBzZWxhdGFuLCBkYW4gdGltdXIuIFNlbWVudGFyYSBpdHUsIHdpbGF5YWggZGVuZ2FuIElSIHRpbmdnaSBoaW5nZ2Egc2FuZ2F0IHRpbmdnaSAoPjYwMCBwZXIgMTAwLjAwMCBwZW5kdWR1aykgY2VuZGVydW5nIG1lbWJlbnR1ayBwb2xhIHRlcmxva2FsaXNhc2kgcGFkYSBiZWJlcmFwYSB3aWxheWFoIHBlcmtvdGFhbiB5YW5nIHBhZGF0IHBlbmR1ZHVrLiBIYWwgaW5pIG1lbnVuanVra2FuIGFkYW55YSBrb25zZW50cmFzaSBrYXN1cyBUQiBwYWRhIHdpbGF5YWggZGVuZ2FuIGthcmFrdGVyaXN0aWsgdXJiYW4gZGFuIGtlcGFkYXRhbiB0aW5nZ2kuDQoNCiMjIDMuMiBVamkgQXV0b2tvcmVsYXNpIFNwYXNpYWwgDQoNCjxkaXYgYWxpZ249ImNlbnRlciI+DQoqKlRhYmVsIDMuKiogIEhhc2lsIFVqaSBBdXRva29yZWxhc2kgU3Bhc2lhbA0KPC9kaXY+DQoNCmBgYHtyfQ0KdmFyX2xpc3QgPC0gYyggImluY2lkZW5jZV9yYXRlX1RCIiwgImZhc2tlcyIsICJwZW5kdWR1a19taXNraW4iLCAia2VwYWRhdGFuIiwgImFpcl9taW51bSIsICJzYW5pdGFzaSIsICJoaXYiICkNCg0KbmFtYV92YXJpYWJlbCA8LSBjKCAiSW5jaWRlbmNlIFJhdGUgKFRCKSIsICJGYXNrZXMiLCAiUGVuZHVkdWsgTWlza2luIiwgIktlcGFkYXRhbiBQZW5kdWR1ayIsICJBaXIgTWludW0gTGF5YWsiLCAiU2FuaXRhc2kgTGF5YWsiLCAiSElWIiApDQoNCm1vcmFuX3N1bW1hcnkgPC0gZGF0YS5mcmFtZSggVmFyaWFiZWwgPSBuYW1hX3ZhcmlhYmVsLCBNb3Jhbl9JID0gTkEsIEV4cGVjdGF0aW9uID0gTkEsIFZhcmlhbmNlID0gTkEsIFpfc2NvcmUgPSBOQSwgcF92YWx1ZSA9IE5BICkNCg0KZm9yKGkgaW4gc2VxX2Fsb25nKHZhcl9saXN0KSkgeyB4IDwtIHNjYWxlKGphYmFyX3RiW1t2YXJfbGlzdFtpXV1dKVssMV0gDQoNCm1vcmFuX3Jlc3VsdCA8LSBtb3Jhbi50ZXN0KCB4LCBsdywgemVyby5wb2xpY3kgPSBUUlVFICkgDQoNCm1vcmFuX3N1bW1hcnkkTW9yYW5fSVtpXSA8LSBtb3Jhbl9yZXN1bHQkZXN0aW1hdGVbMV0gDQoNCm1vcmFuX3N1bW1hcnkkRXhwZWN0YXRpb25baV0gPC0gbW9yYW5fcmVzdWx0JGVzdGltYXRlWzJdIA0KDQptb3Jhbl9zdW1tYXJ5JFZhcmlhbmNlW2ldIDwtIG1vcmFuX3Jlc3VsdCRlc3RpbWF0ZVszXSANCg0KbW9yYW5fc3VtbWFyeSRaX3Njb3JlW2ldIDwtIHVubmFtZShtb3Jhbl9yZXN1bHQkc3RhdGlzdGljKSANCg0KbW9yYW5fc3VtbWFyeSRwX3ZhbHVlW2ldIDwtIG1vcmFuX3Jlc3VsdCRwLnZhbHVlfSANCg0Ka25pdHI6OmthYmxlKCBtb3Jhbl9zdW1tYXJ5LCBkaWdpdHMgPSA0KQ0KYGBgDQoNCg0KDQoNCkJlcmRhc2Fya2FuIGhhc2lsIHVqaSBNb3JhbuKAmXMgSSBwYWRhIG1hc2luZy1tYXNpbmcgdmFyaWFiZWwsIGRpdGVtdWthbiBiYWh3YSBzZWJhZ2lhbiBiZXNhciB2YXJpYWJlbCBpbmRlcGVuZGVuIG1lbnVuanVra2FuIGFkYW55YSBhdXRva29yZWxhc2kgc3Bhc2lhbCB5YW5nIHNpZ25pZmlrYW4uIFZhcmlhYmVsIHBlbmR1ZHVrIG1pc2tpbiwga2VwYWRhdGFuIHBlbmR1ZHVrLCBha3NlcyBhaXIgbWludW0gbGF5YWssIHNhbml0YXNpIGxheWFrLCBkYW4ganVtbGFoIGthc3VzIEhJViBtZW1pbGlraSBuaWxhaSBNb3JhbuKAmXMgSSBwb3NpdGlmIGRhbiBzaWduaWZpa2FuIChwIDwgMCwwNSksIHlhbmcgbWVudW5qdWtrYW4gYWRhbnlhIHBvbGEgcGVuZ2Vsb21wb2thbiBzcGFzaWFsIChjbHVzdGVyZWQpIGFudGFyIHdpbGF5YWggZGkgSmF3YSBCYXJhdC4gU2ViYWxpa255YSwgdmFyaWFiZWwgaW5jaWRlbmNlIHJhdGUgVHViZXJrdWxvc2lzIGRhbiBqdW1sYWggZmFzaWxpdGFzIGtlc2VoYXRhbiAoZmFza2VzKSB0aWRhayBtZW51bmp1a2thbiBhdXRva29yZWxhc2kgc3Bhc2lhbCB5YW5nIHNpZ25pZmlrYW4gKHAgPiAwLDA1KSwgc2VoaW5nZ2EgZGlzdHJpYnVzaW55YSBjZW5kZXJ1bmcgYWNhayBzZWNhcmEgc3Bhc2lhbCBkYW4gdGlkYWsgbWVtYmVudHVrIHBvbGEgcGVuZ2Vsb21wb2thbiB5YW5nIGplbGFzIGFudGFyIHdpbGF5YWguDQoNCiMjIDMuMyAgTW9kZWwgT0xTIA0KDQpIYXNpbCBlc3RpbWFzaSBwYXJhbWV0ZXIgbWVuZ2d1bmFrYW4gbWV0b2RlIE9yZGluYXJ5IExlYXN0IFNxdWFyZXMgKE9MUykgZGlzYWppa2FuIHBhZGEgVGFiZWwgNSBiZXJpa3V0Og0KDQoNCjxkaXYgYWxpZ249ImNlbnRlciI+DQoqKlRhYmVsIDQuKiogIEhhc2lsIEVzdGltYXNpIE1vZGVsIE9MUw0KPC9kaXY+DQoNCmBgYHtyfQ0Kb2xzX21vZGVsIDwtIGxtKA0KICBpbmNpZGVuY2VfcmF0ZV9UQiB+DQogICAgZmFza2VzICsNCiAgICBwZW5kdWR1a19taXNraW4gKw0KICAgIGtlcGFkYXRhbiArDQogICAgYWlyX21pbnVtICsNCiAgICBzYW5pdGFzaSArDQogICAgaGl2LA0KICBkYXRhID0gamFiYXJfdGINCikNCg0Kb2xzX2NvZWYgPC0gc3VtbWFyeShvbHNfbW9kZWwpJGNvZWZmaWNpZW50cw0KDQpvbHNfdGFibGUgPC0gZGF0YS5mcmFtZSgNCiAgVmFyaWFiZWwgPSByb3duYW1lcyhvbHNfY29lZiksDQogIEtvZWZpc2llbiA9IG9sc19jb2VmWywgMV0sDQogIFN0ZF9FcnJvciA9IG9sc19jb2VmWywgMl0sDQogIHRfdmFsdWUgPSBvbHNfY29lZlssIDNdLA0KICBwX3ZhbHVlID0gb2xzX2NvZWZbLCA0XQ0KKQ0KDQprbml0cjo6a2FibGUoDQogIG9sc190YWJsZSwNCiAgZGlnaXRzID0gNCwgcm93Lm5hbWVzID0gRkFMU0UpDQpgYGANCg0KQmVyZGFzYXJrYW4gaGFzaWwgT0xTLCB2YXJpYWJlbCBpbmRlcGVuZGVuIHNlY2FyYSBzaW11bHRhbiBiZXJwZW5nYXJ1aCBzaWduaWZpa2FuIHRlcmhhZGFwIGluY2lkZW5jZSByYXRlIFRCIChwID0gMCwwMjA3OCksIG5hbXVuIHNlY2FyYSBwYXJzaWFsIHRpZGFrIGRpdGVtdWthbiBwZW5nYXJ1aCB5YW5nIHNpZ25pZmlrYW4gKHAgPiAwLDA1KS4gTW9kZWwgbWFtcHUgbWVuamVsYXNrYW4gc2VraXRhciA0OSw1NSUgdmFyaWFzaSBpbmNpZGVuY2UgcmF0ZSAoUsKyID0gMCw0OTU1KSwgZGVuZ2FuIG5pbGFpIEFkanVzdGVkIFLCsiBzZWJlc2FyIDAsMzQ0Mi4gU2VjYXJhIHVtdW0sIGhhc2lsIGluaSBtZW51bmp1a2thbiBiYWh3YSBtb2RlbCBtYXNpaCB0ZXJiYXRhcyBkYWxhbSBtZW5qZWxhc2thbiB2YXJpYXNpIFRCIHNlaGluZ2dhIGRpcGVybHVrYW4gcGVuZGVrYXRhbiBzcGFzaWFsIHVudHVrIG1lbmFuZ2thcCBrZXRlcmthaXRhbiBhbnRhciB3aWxheWFoLg0KDQojIyAzLjQgRGlhZ25vc3RpayBNb2RlbCBPTFMNCg0KVGFiZWwgNS4gRGlhZ25vc3RpayBNb2RlbCBPTFMgDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCA1LioqICBEaWFnbm9zdGlrIE1vZGVsDQo8L2Rpdj4NCg0KYGBge3J9DQpqYWJhcl90YiRyZXNpZHVhbF9vbHMgPC0gcmVzaWR1YWxzKG9sc19tb2RlbCkNCg0KIyBWSUYNCnZpZl92YWx1ZXMgPC0gdmlmKG9sc19tb2RlbCkNCg0KIyBVamkgZGlhZ25vc3Rpaw0Kc2hhcGlyb19yZXMgPC0gc2hhcGlyby50ZXN0KGphYmFyX3RiJHJlc2lkdWFsX29scykNCmJwX3JlcyA8LSBicHRlc3Qob2xzX21vZGVsKQ0KZHdfcmVzIDwtIGR3dGVzdChvbHNfbW9kZWwpDQoNCm1vcmFuX3Jlc2lkdWFsIDwtIG1vcmFuLnRlc3QoDQogIGphYmFyX3RiJHJlc2lkdWFsX29scywNCiAgbHcsDQogIHplcm8ucG9saWN5ID0gVFJVRQ0KKQ0KDQpkaWFnbm9zdGljX3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIFVqaSA9IGMoDQogICAgcGFzdGUoIlZJRiDigJMiLCBuYW1lcyh2aWZfdmFsdWVzKSksDQogICAgIk5vcm1hbGl0YXMgUmVzaWR1YWwgKFNoYXBpcm8tV2lsaykiLA0KICAgICJIZXRlcm9za2VkYXN0aXNpdGFzIChCcmV1c2NoLVBhZ2FuKSIsDQogICAgIkF1dG9rb3JlbGFzaSAoRHVyYmluLVdhdHNvbikiLA0KICAgICJBdXRva29yZWxhc2kgU3Bhc2lhbCBSZXNpZHVhbCAoTW9yYW4ncyBJKSINCiAgKSwNCiAgTmlsYWkgPSBjKA0KICAgIGFzLm51bWVyaWModmlmX3ZhbHVlcyksDQogICAgc2hhcGlyb19yZXMkc3RhdGlzdGljLA0KICAgIGJwX3JlcyRzdGF0aXN0aWMsDQogICAgZHdfcmVzJHN0YXRpc3RpYywNCiAgICBtb3Jhbl9yZXNpZHVhbCRlc3RpbWF0ZVsxXQ0KICApLA0KICBwX3ZhbHVlID0gYygNCiAgICByZXAoTkEsIGxlbmd0aCh2aWZfdmFsdWVzKSksDQogICAgc2hhcGlyb19yZXMkcC52YWx1ZSwNCiAgICBicF9yZXMkcC52YWx1ZSwNCiAgICBkd19yZXMkcC52YWx1ZSwNCiAgICBtb3Jhbl9yZXNpZHVhbCRwLnZhbHVlDQogICkNCikNCg0Ka25pdHI6OmthYmxlKA0KICBkaWFnbm9zdGljX3RhYmxlLA0KICBkaWdpdHMgPSA0DQopDQpgYGANCg0KDQpIYXNpbCBkaWFnbm9zdGlrIG1vZGVsIE9MUyBtZW51bmp1a2thbiBiYWh3YSBzZWx1cnVoIGFzdW1zaSBrbGFzaWsgdGVycGVudWhpLCB5YWl0dSB0aWRhayB0ZXJkYXBhdCBtdWx0aWtvbGluZWFyaXRhcywgaGV0ZXJvc2tlZGFzdGlzaXRhcywgbWF1cHVuIGF1dG9rb3JlbGFzaSByZXNpZHVhbCBzZWNhcmEgdGVtcG9yYWwuIE5hbXVuLCB1amkgTW9yYW7igJlzIEkgcGFkYSByZXNpZHVhbCBtZW51bmp1a2thbiBhZGFueWEgYXV0b2tvcmVsYXNpIHNwYXNpYWwgeWFuZyBzaWduaWZpa2FuIChJID0gMCwyNTczOyBwID0gMCwwMTc2KSwgeWFuZyBtZW5naW5kaWthc2lrYW4gYmFod2EgcmVzaWR1YWwgbWFzaWggbWVtaWxpa2kgcG9sYSBrZXRlcmdhbnR1bmdhbiBhbnRhciB3aWxheWFoLiBUZW11YW4gaW5pIG1lbnVuanVra2FuIGJhaHdhIG1vZGVsIE9MUyBiZWx1bSBtYW1wdSBtZW5hbmdrYXAgZWZlayBzcGFzaWFsLCBzZWhpbmdnYSBkaXBlcmx1a2FuIHBlbmRla2F0YW4gbW9kZWwgc3Bhc2lhbCBzZXBlcnRpIFNMWCB1bnR1ayBtZW5nYWtvbW9kYXNpIGtldGVya2FpdGFuIGFudGFyIHdpbGF5YWguDQoNCg0KIyMgMy41IE1vZGVsIFNMWA0KDQoNCjxkaXYgYWxpZ249ImNlbnRlciI+DQoqKlRhYmVsIDUuKiogIEhhc2lsIEVzdGltYXNpIE1vZGVsIFNMWCANCjwvZGl2Pg0KDQpgYGB7cn0NCmphYmFyX3RiJGxhZ19mYXNrZXMgPC0gbGFnLmxpc3R3KA0KICBsdywgamFiYXJfdGIkZmFza2VzLA0KICB6ZXJvLnBvbGljeSA9IFRSVUUNCikNCg0KamFiYXJfdGIkbGFnX3BlbmR1ZHVrX21pc2tpbiA8LSBsYWcubGlzdHcoDQogIGx3LCBqYWJhcl90YiRwZW5kdWR1a19taXNraW4sDQogIHplcm8ucG9saWN5ID0gVFJVRQ0KKQ0KDQpqYWJhcl90YiRsYWdfa2VwYWRhdGFuIDwtIGxhZy5saXN0dygNCiAgbHcsIGphYmFyX3RiJGtlcGFkYXRhbiwNCiAgemVyby5wb2xpY3kgPSBUUlVFDQopDQoNCmphYmFyX3RiJGxhZ19haXJfbWludW0gPC0gbGFnLmxpc3R3KA0KICBsdywgamFiYXJfdGIkYWlyX21pbnVtLA0KICB6ZXJvLnBvbGljeSA9IFRSVUUNCikNCg0KamFiYXJfdGIkbGFnX3Nhbml0YXNpIDwtIGxhZy5saXN0dygNCiAgbHcsIGphYmFyX3RiJHNhbml0YXNpLA0KICB6ZXJvLnBvbGljeSA9IFRSVUUNCikNCg0KamFiYXJfdGIkbGFnX2hpdiA8LSBsYWcubGlzdHcoDQogIGx3LCBqYWJhcl90YiRoaXYsDQogIHplcm8ucG9saWN5ID0gVFJVRQ0KKQ0KDQpzbHhfbW9kZWwgPC0gbG0oDQogIGluY2lkZW5jZV9yYXRlX1RCIH4NCiAgICBmYXNrZXMgKw0KICAgIHBlbmR1ZHVrX21pc2tpbiArDQogICAga2VwYWRhdGFuICsNCiAgICBhaXJfbWludW0gKw0KICAgIHNhbml0YXNpICsNCiAgICBoaXYgKw0KICAgIGxhZ19mYXNrZXMgKw0KICAgIGxhZ19wZW5kdWR1a19taXNraW4gKw0KICAgIGxhZ19rZXBhZGF0YW4gKw0KICAgIGxhZ19haXJfbWludW0gKw0KICAgIGxhZ19zYW5pdGFzaSArDQogICAgbGFnX2hpdiwNCiAgZGF0YSA9IGphYmFyX3RiDQopDQoNCnNseF9jb2VmIDwtIHN1bW1hcnkoc2x4X21vZGVsKSRjb2VmZmljaWVudHMNCg0Kc2x4X3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIFZhcmlhYmVsID0gYygNCiAgICAiKEludGVyY2VwdCkiLA0KICAgICJGYXNrZXMiLA0KICAgICJQZW5kdWR1ayBNaXNraW4iLA0KICAgICJLZXBhZGF0YW4gUGVuZHVkdWsiLA0KICAgICJBaXIgTWludW0gTGF5YWsiLA0KICAgICJTYW5pdGFzaSBMYXlhayIsDQogICAgIkhJViIsDQogICAgIkxhZyBGYXNrZXMiLA0KICAgICJMYWcgUGVuZHVkdWsgTWlza2luIiwNCiAgICAiTGFnIEtlcGFkYXRhbiIsDQogICAgIkxhZyBBaXIgTWludW0gTGF5YWsiLA0KICAgICJMYWcgU2FuaXRhc2kgTGF5YWsiLA0KICAgICJMYWcgSElWIg0KICApLA0KICBLb2VmaXNpZW4gPSBzbHhfY29lZlssIDFdLA0KICBTdGRfRXJyb3IgPSBzbHhfY29lZlssIDJdLA0KICB0X3ZhbHVlID0gc2x4X2NvZWZbLCAzXSwNCiAgcF92YWx1ZSA9IHNseF9jb2VmWywgNF0NCikNCg0Ka25pdHI6OmthYmxlKA0KICBzbHhfdGFibGUsDQogIGRpZ2l0cyA9IDQsICByb3cubmFtZXMgPSBGQUxTRSkNCmBgYA0KDQpIYXNpbCBlc3RpbWFzaSBtb2RlbCBTTFggbWVudW5qdWtrYW4gYmFod2EgbW9kZWwgc2VjYXJhIHNpbXVsdGFuIHNpZ25pZmlrYW4gZGFsYW0gbWVuamVsYXNrYW4gdmFyaWFzaSBpbmNpZGVuY2UgcmF0ZSBUdWJlcmt1bG9zaXMgKHAgPSAwLDA0NDgzKS4gTmlsYWkgUsKyIHNlYmVzYXIgMCw2OTEzIG1lbnVuanVra2FuIGJhaHdhIG1vZGVsIG1hbXB1IG1lbmplbGFza2FuIHNla2l0YXIgNjksMTMlIHZhcmlhc2kgZGF0YSwgeWFuZyBsZWJpaCB0aW5nZ2kgZGliYW5kaW5na2FuIG1vZGVsIE9MUy4NCk5hbXVuIGRlbWlraWFuLCBzZWNhcmEgcGFyc2lhbCBzZWx1cnVoIHZhcmlhYmVsIGJhaWsgdmFyaWFiZWwgbG9rYWwgbWF1cHVuIGVmZWsgc3Bhc2lhbCAobGFnKSB0aWRhayBtZW51bmp1a2thbiBwZW5nYXJ1aCB5YW5nIHNpZ25pZmlrYW4gKHAgPiAwLDA1KS4gSGFsIGluaSBtZW5naW5kaWthc2lrYW4gYmFod2EgcGVuZ2FydWggZmFrdG9yIHJpc2lrbyB0ZXJoYWRhcCBpbmNpZGVuY2UgcmF0ZSBUQiB0ZXJzZWJhciBzZWNhcmEgc3Bhc2lhbCBkYW4gdGlkYWsgdGVycHVzYXQgcGFkYSBzYXR1IHZhcmlhYmVsIHRlcnRlbnR1LiBTZWNhcmEga2VzZWx1cnVoYW4sIG1vZGVsIFNMWCBtZW51bmp1a2thbiBhZGFueWEgcGVuaW5na2F0YW4ga2VtYW1wdWFuIGRhbGFtIG1lbmFuZ2thcCB2YXJpYXNpIGRhdGEgZGliYW5kaW5na2FuIE9MUywgc2VoaW5nZ2EgbWVuZHVrdW5nIGFkYW55YSBlZmVrIGtldGVya2FpdGFuIHNwYXNpYWwgYW50YXIgd2lsYXlhaCBkYWxhbSBwZW55ZWJhcmFuIFR1YmVya3Vsb3Npcy4gVGlkYWsgc2lnbmlmaWthbm55YSB2YXJpYWJlbCBzZWNhcmEgcGFyc2lhbCBkYXBhdCBkaXNlYmFia2FuIG9sZWggYWRhbnlhIHBlbmdhcnVoIGZha3RvciBsYWluIHlhbmcgYmVsdW0gZGltYXN1a2thbiBkYWxhbSBtb2RlbCBzZXBlcnRpIGt1YWxpdGFzIGh1bmlhbiwga2VwYXR1aGFuIHBlbmdvYmF0YW4sIGRhbiBtb2JpbGl0YXMgcGVuZHVkdWsuDQoNClNlbGFpbiBtZW5nZXN0aW1hc2kga29lZmlzaWVuIHJlZ3Jlc2ksIG1vZGVsIFNMWCBtZW11bmdraW5rYW4gaWRlbnRpZmlrYXNpIHBlbmdhcnVoIGxhbmdzdW5nIChkaXJlY3QgZWZmZWN0KSBkYW4gcGVuZ2FydWggdGlkYWsgbGFuZ3N1bmcgKGluZGlyZWN0IGVmZmVjdCkgeWFuZyBiZXJhc2FsIGRhcmkgd2lsYXlhaCB0ZXRhbmdnYS4gQW5hbGlzaXMgaW5pIHBlbnRpbmcgdW50dWsgbWVuZ2V0YWh1aSBzZWphdWggbWFuYSBmYWt0b3ItZmFrdG9yIHNvc2lhbCwgZWtvbm9taSwgZGFuIGtlc2VoYXRhbiBtZW1lbmdhcnVoaSBJbmNpZGVuY2UgUmF0ZSBUdWJlcmt1bG9zaXMgKFRCKSwgYmFpayBtZWxhbHVpIGthcmFrdGVyaXN0aWsgd2lsYXlhaCBpdHUgc2VuZGlyaSBtYXVwdW4gbWVsYWx1aSBlZmVrIGxpbXBhaGFuIHNwYXNpYWwgKHNwaWxsb3ZlciBlZmZlY3QpLiBIYXNpbCBlc3RpbWFzaSBlZmVrIGxhbmdzdW5nLCBlZmVrIHRpZGFrIGxhbmdzdW5nLCBkYW4gZWZlayB0b3RhbCBkaXNhamlrYW4gcGFkYSBUYWJlbCA2Lg0KDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCA2LioqIERpcmVjdCBhbmQgSW5kaXJlY3QgRWZmZWN0cyBNb2RlbCBTTFgNCjwvZGl2Pg0KDQpgYGB7cn0NCnNseF9jb2VmIDwtIHN1bW1hcnkoc2x4X21vZGVsKSRjb2VmZmljaWVudHMNCg0KaW1wYWN0X3RhYmxlIDwtIGRhdGEuZnJhbWUoDQogIFZhcmlhYmxlID0gYygNCiAgICAiZmFza2VzIiwNCiAgICAicGVuZHVkdWtfbWlza2luIiwNCiAgICAia2VwYWRhdGFuIiwNCiAgICAiYWlyX21pbnVtIiwNCiAgICAic2FuaXRhc2kiLA0KICAgICJoaXYiDQogICksDQoNCiAgRGlyZWN0ID0gc2x4X2NvZWZbYygNCiAgICAiZmFza2VzIiwNCiAgICAicGVuZHVkdWtfbWlza2luIiwNCiAgICAia2VwYWRhdGFuIiwNCiAgICAiYWlyX21pbnVtIiwNCiAgICAic2FuaXRhc2kiLA0KICAgICJoaXYiDQogICksIDFdLA0KDQogIFNFX0RpcmVjdCA9IHNseF9jb2VmW2MoDQogICAgImZhc2tlcyIsDQogICAgInBlbmR1ZHVrX21pc2tpbiIsDQogICAgImtlcGFkYXRhbiIsDQogICAgImFpcl9taW51bSIsDQogICAgInNhbml0YXNpIiwNCiAgICAiaGl2Ig0KICApLCAyXSwNCg0KICBwX0RpcmVjdCA9IHNseF9jb2VmW2MoDQogICAgImZhc2tlcyIsDQogICAgInBlbmR1ZHVrX21pc2tpbiIsDQogICAgImtlcGFkYXRhbiIsDQogICAgImFpcl9taW51bSIsDQogICAgInNhbml0YXNpIiwNCiAgICAiaGl2Ig0KICApLCA0XSwNCg0KICBJbmRpcmVjdCA9IHNseF9jb2VmW2MoDQogICAgImxhZ19mYXNrZXMiLA0KICAgICJsYWdfcGVuZHVkdWtfbWlza2luIiwNCiAgICAibGFnX2tlcGFkYXRhbiIsDQogICAgImxhZ19haXJfbWludW0iLA0KICAgICJsYWdfc2FuaXRhc2kiLA0KICAgICJsYWdfaGl2Ig0KICApLCAxXSwNCg0KICBTRV9JbmRpcmVjdCA9IHNseF9jb2VmW2MoDQogICAgImxhZ19mYXNrZXMiLA0KICAgICJsYWdfcGVuZHVkdWtfbWlza2luIiwNCiAgICAibGFnX2tlcGFkYXRhbiIsDQogICAgImxhZ19haXJfbWludW0iLA0KICAgICJsYWdfc2FuaXRhc2kiLA0KICAgICJsYWdfaGl2Ig0KICApLCAyXSwNCg0KICBwX0luZGlyZWN0ID0gc2x4X2NvZWZbYygNCiAgICAibGFnX2Zhc2tlcyIsDQogICAgImxhZ19wZW5kdWR1a19taXNraW4iLA0KICAgICJsYWdfa2VwYWRhdGFuIiwNCiAgICAibGFnX2Fpcl9taW51bSIsDQogICAgImxhZ19zYW5pdGFzaSIsDQogICAgImxhZ19oaXYiDQogICksIDRdDQopDQoNCmltcGFjdF90YWJsZSRUb3RhbCA8LQ0KICBpbXBhY3RfdGFibGUkRGlyZWN0ICsNCiAgaW1wYWN0X3RhYmxlJEluZGlyZWN0DQoNCmtuaXRyOjprYWJsZSgNCiAgaW1wYWN0X3RhYmxlLA0KICBkaWdpdHMgPSA0LA0KICByb3cubmFtZXMgPSBGQUxTRQ0KKQ0KYGBgDQoNCg0KSGFzaWwgZXN0aW1hc2kgZGlyZWN0IGVmZmVjdCwgaW5kaXJlY3QgZWZmZWN0LCBkYW4gdG90YWwgZWZmZWN0IHBhZGEgbW9kZWwgU3BhdGlhbCBMYWcgb2YgWCAoU0xYKSBkaXNhamlrYW4gcGFkYSBUYWJlbCA2LiBTZWx1cnVoIHZhcmlhYmVsIG1lbWlsaWtpIG5pbGFpIHAtdmFsdWUgbGViaWggYmVzYXIgZGFyaSAwLDA1IGJhaWsgcGFkYSBwZW5nYXJ1aCBsYW5nc3VuZyBtYXVwdW4gcGVuZ2FydWggdGlkYWsgbGFuZ3N1bmcsIHNlaGluZ2dhIHRpZGFrIHRlcmRhcGF0IGJ1a3RpIHN0YXRpc3RpayB5YW5nIGN1a3VwIHVudHVrIG1lbnlhdGFrYW4gYmFod2EgZmFzaWxpdGFzIGtlc2VoYXRhbiwgcGVuZHVkdWsgbWlza2luLCBrZXBhZGF0YW4gcGVuZHVkdWssIGFrc2VzIGFpciBtaW51bSBsYXlhaywgc2FuaXRhc2kgbGF5YWssIG1hdXB1biBqdW1sYWgga2FzdXMgSElWIGJlcnBlbmdhcnVoIHNpZ25pZmlrYW4gdGVyaGFkYXAgSW5jaWRlbmNlIFJhdGUgKElSKSBUdWJlcmt1bG9zaXMgKFRCKSBkaSBKYXdhIEJhcmF0Lg0KDQpNZXNraXB1biB0aWRhayBzaWduaWZpa2FuLCBhcmFoIGtvZWZpc2llbiBtZW51bmp1a2thbiBiZWJlcmFwYSBrZWNlbmRlcnVuZ2FuIGh1YnVuZ2FuLiBWYXJpYWJlbCBmYXNpbGl0YXMga2VzZWhhdGFuLCBwZW5kdWR1ayBtaXNraW4sIHNhbml0YXNpIGxheWFrLCBkYW4gSElWIG1lbWlsaWtpIHRvdGFsIGVmZmVjdCBwb3NpdGlmLCBzZWRhbmdrYW4ga2VwYWRhdGFuIHBlbmR1ZHVrIGRhbiBha3NlcyBhaXIgbWludW0gbGF5YWsgbWVtaWxpa2kgdG90YWwgZWZmZWN0IG5lZ2F0aWYuIFNlbGFpbiBpdHUsIGJlYmVyYXBhIHZhcmlhYmVsIG1lbnVuanVra2FuIHBlcmJlZGFhbiBhcmFoIGFudGFyYSBkaXJlY3QgZWZmZWN0IGRhbiBpbmRpcmVjdCBlZmZlY3QsIHNlcGVydGkgcGVuZHVkdWsgbWlza2luLCBrZXBhZGF0YW4gcGVuZHVkdWssIGRhbiBha3NlcyBhaXIgbWludW0gbGF5YWssIHlhbmcgbWVuZ2luZGlrYXNpa2FuIGFkYW55YSBrZW11bmdraW5hbiBwZW5nYXJ1aCBrYXJha3RlcmlzdGlrIHdpbGF5YWggdGV0YW5nZ2EgdGVyaGFkYXAga29uZGlzaSBUQiBkaSBzdWF0dSB3aWxheWFoLg0KDQpTZWNhcmEgdW11bSwgaGFzaWwgZGlyZWN0IGVmZmVjdCBkYW4gaW5kaXJlY3QgZWZmZWN0IG1lbnVuanVra2FuIGJhaHdhIHRpZGFrIHRlcmRhcGF0IHBlbmdhcnVoIHNpZ25pZmlrYW4gc2VjYXJhIHBhcnNpYWwgZGFyaSBzZWx1cnVoIHZhcmlhYmVsIHlhbmcgZGl0ZWxpdGkuIE5hbXVuLCBrZWJlcmFkYWFuIGtvZWZpc2llbiBpbmRpcmVjdCBlZmZlY3QgeWFuZyB0aWRhayBiZXJuaWxhaSBub2wgbWVudW5qdWtrYW4gYmFod2EgbW9kZWwgU0xYIG1hbXB1IG1lbmdha29tb2Rhc2kgcG90ZW5zaSBrZXRlcmthaXRhbiBhbnRhcndpbGF5YWggKHNwYXRpYWwgc3BpbGxvdmVyKSwgbWVza2lwdW4gZWZlayB0ZXJzZWJ1dCBiZWx1bSB0ZXJidWt0aSBzaWduaWZpa2FuIHNlY2FyYSBzdGF0aXN0aWsgcGFkYSBkYXRhIHBlbmVsaXRpYW4gaW5pLg0KDQoNCiMjIDMuNiBQZXJiYW5kaW5nYW4gTW9kZWwNCg0KDQo8ZGl2IGFsaWduPSJjZW50ZXIiPg0KKipUYWJlbCA3LioqIFBlcmJhbmRpbmdhbiBNb2RlbA0KPC9kaXY+DQoNCmBgYHtyfQ0KbW9kZWxfY29tcGFyaXNvbiA8LSBkYXRhLmZyYW1lKA0KICBNb2RlbCA9IGMoIk9MUyIsICJTTFgiKSwNCiAgDQogIEFJQyA9IHJvdW5kKA0KICAgIGMoDQogICAgICBBSUMob2xzX21vZGVsKSwNCiAgICAgIEFJQyhzbHhfbW9kZWwpDQogICAgKSwNCiAgICAyDQogICksDQogIA0KICBSX3NxdWFyZWQgPSByb3VuZCgNCiAgICBjKA0KICAgICAgc3VtbWFyeShvbHNfbW9kZWwpJHIuc3F1YXJlZCwNCiAgICAgIHN1bW1hcnkoc2x4X21vZGVsKSRyLnNxdWFyZWQNCiAgICApLA0KICAgIDQNCiAgKSwNCiAgDQogIExvZ0xpayA9IHJvdW5kKA0KICAgIGMoDQogICAgICBhcy5udW1lcmljKGxvZ0xpayhvbHNfbW9kZWwpKSwNCiAgICAgIGFzLm51bWVyaWMobG9nTGlrKHNseF9tb2RlbCkpDQogICAgKSwNCiAgICAyDQogICksDQogIA0KICBSTVNFID0gcm91bmQoDQogICAgYygNCiAgICAgIHNxcnQobWVhbihvbHNfbW9kZWwkcmVzaWR1YWxzXjIpKSwNCiAgICAgIHNxcnQobWVhbihzbHhfbW9kZWwkcmVzaWR1YWxzXjIpKQ0KICAgICksDQogICAgMg0KICApDQopDQoNCmNvbXBhcmlzb25fdGFibGUgPC0gZGF0YS5mcmFtZSgNCiAgTW9kZWwgPSBjKCJPTFMiLCAiU0xYIiksDQoNCiAgQUlDID0gcm91bmQoDQogICAgYygNCiAgICAgIEFJQyhvbHNfbW9kZWwpLA0KICAgICAgQUlDKHNseF9tb2RlbCkNCiAgICApLA0KICAgIDINCiAgKSwNCg0KICBSX3NxdWFyZWQgPSByb3VuZCgNCiAgICBjKA0KICAgICAgc3VtbWFyeShvbHNfbW9kZWwpJHIuc3F1YXJlZCwNCiAgICAgIHN1bW1hcnkoc2x4X21vZGVsKSRyLnNxdWFyZWQNCiAgICApLA0KICAgIDQNCiAgKSwNCg0KICBMb2dfTGlrZWxpaG9vZCA9IHJvdW5kKA0KICAgIGMoDQogICAgICBhcy5udW1lcmljKGxvZ0xpayhvbHNfbW9kZWwpKSwNCiAgICAgIGFzLm51bWVyaWMobG9nTGlrKHNseF9tb2RlbCkpDQogICAgKSwNCiAgICAyDQogICksDQoNCiAgUk1TRSA9IHJvdW5kKA0KICAgIGMoDQogICAgICBzcXJ0KG1lYW4ocmVzaWR1YWxzKG9sc19tb2RlbCleMikpLA0KICAgICAgc3FydChtZWFuKHJlc2lkdWFscyhzbHhfbW9kZWwpXjIpKQ0KICAgICksDQogICAgMg0KICApDQopDQoNCmtuaXRyOjprYWJsZSgNCiAgY29tcGFyaXNvbl90YWJsZSwNCiAgZGlnaXRzID0gNA0KKQ0KDQpgYGANCg0KSGFzaWwgcGVyYmFuZGluZ2FuIGtpbmVyamEgbW9kZWwgbWVudW5qdWtrYW4gYmFod2EgbW9kZWwgU0xYIG1lbWlsaWtpIHBlcmZvcm1hIHlhbmcgbGViaWggYmFpayBkaWJhbmRpbmdrYW4gbW9kZWwgT0xTLiBIYWwgaW5pIHRlcmxpaGF0IGRhcmkgcGVudXJ1bmFuIG5pbGFpIEFJQyBkYW4gUk1TRSwgc2VydGEgcGVuaW5na2F0YW4gbmlsYWkgUi1zcXVhcmVkIGRhbiBsb2ctbGlrZWxpaG9vZC4gUGVuaW5na2F0YW4gdGVyc2VidXQgbWVudW5qdWtrYW4gYmFod2EgbW9kZWwgU0xYIGxlYmloIG1hbXB1IG1lbmplbGFza2FuIHZhcmlhc2kgaW5jaWRlbmNlIHJhdGUgVHViZXJrdWxvc2lzIGRlbmdhbiBtZW1wZXJ0aW1iYW5na2FuIGVmZWsgc3Bhc2lhbCBhbnRhciB3aWxheWFoLiBEZW5nYW4gZGVtaWtpYW4sIG1vZGVsIFNMWCBsZWJpaCBzZXN1YWkgZGlndW5ha2FuIGRhbGFtIGFuYWxpc2lzIGluaSBrYXJlbmEgbWFtcHUgbWVuYW5na2FwIGtldGVya2FpdGFuIHNwYXNpYWwgeWFuZyB0aWRhayBkYXBhdCBkaWplbGFza2FuIG9sZWggbW9kZWwgT0xTLg0KDQoNCiMgNC4gUGVtYmFoYXNhbg0KDQojIyA0LjEgUGVtYmFoYXNhbg0KDQpQZW5lbGl0aWFuIGluaSBiZXJ0dWp1YW4gbWVuZ2FuYWxpc2lzIGZha3Rvci1mYWt0b3IgeWFuZyBiZXJodWJ1bmdhbiBkZW5nYW4gSW5jaWRlbmNlIFJhdGUgKElSKSBUdWJlcmt1bG9zaXMgKFRCKSBkaSBQcm92aW5zaSBKYXdhIEJhcmF0IG1lbmdndW5ha2FuIHBlbmRla2F0YW4gc3Bhc2lhbCBTcGF0aWFsIExhZyBvZiBYIChTTFgpLiBIYXNpbCBhbmFsaXNpcyBtZW51bmp1a2thbiBiYWh3YSBkaXN0cmlidXNpIFRCIGRpIEphd2EgQmFyYXQgdGlkYWsgbWVyYXRhIGFudGFyIGthYnVwYXRlbi9rb3RhLiBQZXRhIEluY2lkZW5jZSBSYXRlIG1lbXBlcmxpaGF0a2FuIGJhaHdhIHdpbGF5YWggZGVuZ2FuIHRpbmdrYXQga2VqYWRpYW4gVEIgdGluZ2dpIGNlbmRlcnVuZyB0ZXJrb25zZW50cmFzaSBwYWRhIGJlYmVyYXBhIHdpbGF5YWggcGVya290YWFuIHlhbmcgbWVtaWxpa2kgYWt0aXZpdGFzIHNvc2lhbCBkYW4gbW9iaWxpdGFzIHBlbmR1ZHVrIHlhbmcgdGluZ2dpLiBLb25kaXNpIGluaSBzZWphbGFuIGRlbmdhbiBrYXJha3RlcmlzdGlrIHBlbnlha2l0IFRCIHlhbmcgcGVudWxhcmFubnlhIGRpcGVuZ2FydWhpIG9sZWggaW50ZW5zaXRhcyBrb250YWsgYW50YXJpbmRpdmlkdSBkYWxhbSBzdWF0dSBwb3B1bGFzaS4NCg0KSGFzaWwgdWppIE1vcmFuJ3MgSSBtZW51bmp1a2thbiBiYWh3YSBzZWJhZ2lhbiBiZXNhciB2YXJpYWJlbCBwZW5qZWxhcywgeWFpdHUgcGVuZHVkdWsgbWlza2luLCBrZXBhZGF0YW4gcGVuZHVkdWssIGFrc2VzIGFpciBtaW51bSBsYXlhaywgc2FuaXRhc2kgbGF5YWssIGRhbiBqdW1sYWgga2FzdXMgSElWIG1lbWlsaWtpIHBvbGEgcGVuZ2Vsb21wb2thbiBzcGFzaWFsIHlhbmcgc2lnbmlmaWthbi4gVGVtdWFuIGluaSBtZW51bmp1a2thbiBiYWh3YSBrYXJha3RlcmlzdGlrIHNvc2lhbCwgZWtvbm9taSwgZGFuIGtlc2VoYXRhbiBtYXN5YXJha2F0IGRpIEphd2EgQmFyYXQgdGlkYWsgdGVyc2ViYXIgc2VjYXJhIGFjYWssIG1lbGFpbmthbiBjZW5kZXJ1bmcgbWVtYmVudHVrIGtlbG9tcG9rIHdpbGF5YWggZGVuZ2FuIGthcmFrdGVyaXN0aWsgeWFuZyBzZXJ1cGEuIEFkYW55YSBwb2xhIHBlbmdlbG9tcG9rYW4gdGVyc2VidXQgbWVuZ2luZGlrYXNpa2FuIGJhaHdhIHBlbmRla2F0YW4gc3Bhc2lhbCByZWxldmFuIGRpZ3VuYWthbiBkYWxhbSBhbmFsaXNpcyBmYWt0b3ItZmFrdG9yIHlhbmcgYmVya2FpdGFuIGRlbmdhbiBrZWphZGlhbiBUQi4NCg0KTW9kZWwgT0xTIG1lbnVuanVra2FuIGJhaHdhIHNlY2FyYSBzaW11bHRhbiB2YXJpYWJlbC12YXJpYWJlbCB5YW5nIGRpZ3VuYWthbiBtYW1wdSBtZW5qZWxhc2thbiB2YXJpYXNpIEluY2lkZW5jZSBSYXRlIFRCLiBOYW11biBkZW1pa2lhbiwgdGlkYWsgdGVyZGFwYXQgdmFyaWFiZWwgeWFuZyBzaWduaWZpa2FuIHNlY2FyYSBwYXJzaWFsLiBTZWxhaW4gaXR1LCB1amkgTW9yYW4ncyBJIHRlcmhhZGFwIHJlc2lkdWFsIG1vZGVsIG1lbnVuanVra2FuIGFkYW55YSBhdXRva29yZWxhc2kgc3Bhc2lhbCB5YW5nIHNpZ25pZmlrYW4uIEhhc2lsIHRlcnNlYnV0IG1lbmdpbmRpa2FzaWthbiBiYWh3YSBtYXNpaCB0ZXJkYXBhdCBpbmZvcm1hc2kgc3Bhc2lhbCB5YW5nIGJlbHVtIGRhcGF0IGRpamVsYXNrYW4gb2xlaCBtb2RlbCBPTFMgc2VoaW5nZ2EgYXN1bXNpIGluZGVwZW5kZW5zaSBhbnRhcndpbGF5YWggdGlkYWsgc2VwZW51aG55YSB0ZXJwZW51aGkuIE9sZWgga2FyZW5hIGl0dSwgcGVuZ2d1bmFhbiBtb2RlbCBzcGFzaWFsIG1lbmphZGkgcGVudGluZyB1bnR1ayBtZW5nYWtvbW9kYXNpIGtldGVya2FpdGFuIGdlb2dyYWZpcyBhbnRhciBrYWJ1cGF0ZW4va290YS4NCg0KUGVuZXJhcGFuIG1vZGVsIFNMWCBtZW5naGFzaWxrYW4gcGVuaW5na2F0YW4ga2luZXJqYSBtb2RlbCBkaWJhbmRpbmdrYW4gT0xTLCB5YW5nIGRpdHVuanVra2FuIG9sZWggcGVuaW5na2F0YW4gbmlsYWkga29lZmlzaWVuIGRldGVybWluYXNpIChSsikgZGFyaSAwLDQ5NTUgbWVuamFkaSAwLDY5MTMgc2VydGEgcGVudXJ1bmFuIG5pbGFpIFJNU0UuIFRlbXVhbiBpbmkgbWVudW5qdWtrYW4gYmFod2EgcGVuYW1iYWhhbiBrb21wb25lbiBzcGFzaWFsIHBhZGEgdmFyaWFiZWwgaW5kZXBlbmRlbiBtYW1wdSBtZW5pbmdrYXRrYW4ga2VtYW1wdWFuIG1vZGVsIGRhbGFtIG1lbmplbGFza2FuIHZhcmlhc2kgSW5jaWRlbmNlIFJhdGUgVEIuIERlbmdhbiBrYXRhIGxhaW4sIGluZm9ybWFzaSBtZW5nZW5haSBrb25kaXNpIHdpbGF5YWggdGV0YW5nZ2EgbWVtYmVyaWthbiBrb250cmlidXNpIGRhbGFtIG1lbmplbGFza2FuIHZhcmlhc2kga2VqYWRpYW4gVEIgZGkgSmF3YSBCYXJhdC4NCg0KTWVza2lwdW4gZGVtaWtpYW4sIGhhc2lsIGVzdGltYXNpIHBhcmFtZXRlciBtb2RlbCBTTFggbWVudW5qdWtrYW4gYmFod2Egc2VsdXJ1aCB2YXJpYWJlbCBsb2thbCBtYXVwdW4gdmFyaWFiZWwgbGFnIHNwYXNpYWwgbWVtaWxpa2kgbmlsYWkgcC12YWx1ZSBsZWJpaCBiZXNhciBkYXJpIDAsMDUuIEhhc2lsIGFuYWxpc2lzIGRpcmVjdCBlZmZlY3QgZGFuIGluZGlyZWN0IGVmZmVjdCBqdWdhIG1lbnVuanVra2FuIGJhaHdhIHRpZGFrIHRlcmRhcGF0IHBlbmdhcnVoIHlhbmcgc2lnbmlmaWthbiBzZWNhcmEgc3RhdGlzdGlrIGJhaWsgZGFyaSBrYXJha3RlcmlzdGlrIHdpbGF5YWggaXR1IHNlbmRpcmkgbWF1cHVuIGRhcmkga2FyYWt0ZXJpc3RpayB3aWxheWFoIHRldGFuZ2dhLiBUZW11YW4gaW5pIG1lbnVuanVra2FuIGJhaHdhIHZhcmlhYmVsIGZhc2lsaXRhcyBrZXNlaGF0YW4sIHBlcnNlbnRhc2UgcGVuZHVkdWsgbWlza2luLCBrZXBhZGF0YW4gcGVuZHVkdWssIGFrc2VzIGFpciBtaW51bSBsYXlhaywgc2FuaXRhc2kgbGF5YWssIGRhbiBqdW1sYWgga2FzdXMgSElWIGJlbHVtIG1hbXB1IG1lbmplbGFza2FuIHZhcmlhc2kgSW5jaWRlbmNlIFJhdGUgVEIgc2VjYXJhIHBhcnNpYWwgcGFkYSBkYXRhIHlhbmcgZGlndW5ha2FuIGRhbGFtIHBlbmVsaXRpYW4gaW5pLg0KDQpLZXRpZGFrc2lnbmlmaWthbmFuIHNlbHVydWggdmFyaWFiZWwgZGFwYXQgZGlzZWJhYmthbiBvbGVoIGJlYmVyYXBhIGZha3Rvci4gUGVydGFtYSwganVtbGFoIG9ic2VydmFzaSB5YW5nIHJlbGF0aWYgdGVyYmF0YXMsIHlhaXR1IGhhbnlhIDI3IGthYnVwYXRlbi9rb3RhLCBkYXBhdCBtZW5ndXJhbmdpIGtla3VhdGFuIHN0YXRpc3RpayBtb2RlbCBkYWxhbSBtZW5kZXRla3NpIHBlbmdhcnVoIHZhcmlhYmVsLiBLZWR1YSwga2VqYWRpYW4gVEIgbWVydXBha2FuIGZlbm9tZW5hIHlhbmcga29tcGxla3MgZGFuIGRpcGVuZ2FydWhpIG9sZWggYmVyYmFnYWkgZmFrdG9yIGxhaW4geWFuZyBiZWx1bSBkaW1hc3Vra2FuIGtlIGRhbGFtIG1vZGVsLCBzZXBlcnRpIGtvbmRpc2kgaHVuaWFuLCBrZXBhZGF0YW4gcnVtYWggdGFuZ2dhLCBzdGF0dXMgZ2l6aSwgcGVyaWxha3UgcGVuY2FyaWFuIHBlbmdvYmF0YW4sIGtlYmVyaGFzaWxhbiBwZW5nb2JhdGFuLCBtb2JpbGl0YXMgcGVuZHVkdWssIGRhbiBmYWt0b3IgbGluZ2t1bmdhbi4gS2V0aWdhLCBwZW5nZ3VuYWFuIGRhdGEgYWdyZWdhdCBwYWRhIHRpbmdrYXQga2FidXBhdGVuL2tvdGEgYmVycG90ZW5zaSBtZW5pbWJ1bGthbiBlZmVrIGhldGVyb2dlbml0YXMgaW50ZXJuYWwgd2lsYXlhaCB5YW5nIHRpZGFrIGRhcGF0IGRpdGFuZ2thcCBvbGVoIG1vZGVsLg0KDQpTZWNhcmEga2VzZWx1cnVoYW4sIHBlbmVsaXRpYW4gaW5pIG1lbnVuanVra2FuIGJhaHdhIHBlbmRla2F0YW4gc3Bhc2lhbCBtZW1iZXJpa2FuIHBlbmluZ2thdGFuIGtlbWFtcHVhbiBtb2RlbCBkYWxhbSBtZW5qZWxhc2thbiB2YXJpYXNpIGtlamFkaWFuIFRCIGRpYmFuZGluZ2thbiBwZW5kZWthdGFuIG5vbnNwYXNpYWwuIE5hbXVuIGRlbWlraWFuLCBiZWx1bSBkaXRlbXVrYW4gYnVrdGkgc3RhdGlzdGlrIHlhbmcgY3VrdXAgdW50dWsgbWVueWF0YWthbiBiYWh3YSBmYWt0b3IgZmFzaWxpdGFzIGtlc2VoYXRhbiwga2VtaXNraW5hbiwga2VwYWRhdGFuIHBlbmR1ZHVrLCBha3NlcyBhaXIgbWludW0gbGF5YWssIHNhbml0YXNpIGxheWFrLCBtYXVwdW4gSElWIGJlcnBlbmdhcnVoIHNlY2FyYSBsYW5nc3VuZyBtYXVwdW4gdGlkYWsgbGFuZ3N1bmcgdGVyaGFkYXAgSW5jaWRlbmNlIFJhdGUgVEIgZGkgSmF3YSBCYXJhdCBwYWRhIHRhaHVuIDIwMjUuIFRlbXVhbiBpbmkgbWVuZ2luZGlrYXNpa2FuIHBlcmx1bnlhIHBlbmdlbWJhbmdhbiBtb2RlbCBkZW5nYW4gdmFyaWFiZWwgeWFuZyBsZWJpaCBrb21wcmVoZW5zaWYgc2VydGEgcGVuZ2d1bmFhbiBkYXRhIHNwYXNpby10ZW1wb3JhbCB1bnR1ayBtZW1wZXJvbGVoIHBlbWFoYW1hbiB5YW5nIGxlYmloIGJhaWsgbWVuZ2VuYWkgZmFrdG9yLWZha3RvciB5YW5nIG1lbWVuZ2FydWhpIHBlcnNlYmFyYW4gVEIuDQoNCiMjIDQuMiBLZXRlcmJhdGFzYW4gUGVuZWxpdGlhbg0KDQpQZW5lbGl0aWFuIGluaSBtZW1pbGlraSBiZWJlcmFwYSBrZXRlcmJhdGFzYW4geWFpdHUgc2ViYWdhaSBiZXJpa3V0Og0KDQoxLiBKdW1sYWggdW5pdCBvYnNlcnZhc2kgcmVsYXRpZiB0ZXJiYXRhcywgeWFpdHUgaGFueWEgMjcga2FidXBhdGVuL2tvdGEgZGkgUHJvdmluc2kgSmF3YSBCYXJhdC4gSnVtbGFoIG9ic2VydmFzaSB5YW5nIGtlY2lsIGRhcGF0IG1lbmd1cmFuZ2kga2VrdWF0YW4gc3RhdGlzdGlrIChzdGF0aXN0aWNhbCBwb3dlcikgbW9kZWwgZGFsYW0gbWVuZGV0ZWtzaSBwZW5nYXJ1aCB2YXJpYWJlbCBzZWNhcmEgcGFyc2lhbC4NCjIuIERhdGEgeWFuZyBkaWd1bmFrYW4gYmVyc2lmYXQgY3Jvc3Mtc2VjdGlvbmFsIHBhZGEgdGFodW4gMjAyNSBzZWhpbmdnYSBiZWx1bSBtYW1wdSBtZW5nZ2FtYmFya2FuIGRpbmFtaWthIHBlcnViYWhhbiBrZWphZGlhbiBUdWJlcmt1bG9zaXMgKFRCKSBkYXJpIHdha3R1IGtlIHdha3R1IG1hdXB1biBtZW5naWRlbnRpZmlrYXNpIHBvbGEgdGVtcG9yYWwgcGVueWViYXJhbiBwZW55YWtpdC4NCjMuIFZhcmlhYmVsIHBlbmplbGFzIHlhbmcgZGlndW5ha2FuIG1hc2loIHRlcmJhdGFzIHBhZGEgZmFrdG9yIHNvc2lhbCwgZWtvbm9taSwgZGFuIGtlc2VoYXRhbiB0ZXJ0ZW50dS4gQmViZXJhcGEgZmFrdG9yIHlhbmcgc2VjYXJhIHRlb3JpdGlzIGJlcmh1YnVuZ2FuIGRlbmdhbiBUQiwgc2VwZXJ0aSBrZXBhZGF0YW4gaHVuaWFuLCBzdGF0dXMgZ2l6aSwgdGluZ2thdCBwZW5kaWRpa2FuLCBwZXJpbGFrdSBrZXNlaGF0YW4sIGNha3VwYW4gcGVuZ29iYXRhbiBUQiwgbW9iaWxpdGFzIHBlbmR1ZHVrLCBkYW4ga29uZGlzaSBsaW5na3VuZ2FuIGZpc2lrIGJlbHVtIGRpbWFzdWtrYW4ga2UgZGFsYW0gbW9kZWwuDQo0LiBBbmFsaXNpcyBkaWxha3VrYW4gcGFkYSB0aW5na2F0IGFncmVnYXQga2FidXBhdGVuL2tvdGEsIHNlaGluZ2dhIGJlbHVtIG1hbXB1IG1lbmFuZ2thcCB2YXJpYXNpIGthcmFrdGVyaXN0aWsgZGFuIHJpc2lrbyBUQiBwYWRhIHRpbmdrYXQgd2lsYXlhaCB5YW5nIGxlYmloIHJpbmNpLCBzZXBlcnRpIGtlY2FtYXRhbiBhdGF1IGRlc2Eva2VsdXJhaGFuLiBLb25kaXNpIGluaSBiZXJwb3RlbnNpIG1lbmltYnVsa2FuIGVjb2xvZ2ljYWwgZmFsbGFjeSwgeWFpdHUga2VzaW1wdWxhbiBwYWRhIHRpbmdrYXQga2Vsb21wb2sgeWFuZyBiZWx1bSB0ZW50dSBiZXJsYWt1IHBhZGEgdGluZ2thdCBpbmRpdmlkdS4NCjUuIE1vZGVsIFNMWCBoYW55YSBtZW1wZXJ0aW1iYW5na2FuIGVmZWsgc3Bhc2lhbCBwYWRhIHZhcmlhYmVsIHBlbmplbGFzIChYKSBkYW4gYmVsdW0gbWVuZ2Frb21vZGFzaSBrZW11bmdraW5hbiBrZXRlcmdhbnR1bmdhbiBzcGFzaWFsIHlhbmcgbGViaWgga29tcGxla3MgcGFkYSB2YXJpYWJlbCByZXNwb24gbWF1cHVuIGdhbGF0IG1vZGVsLiBPbGVoIGthcmVuYSBpdHUsIG1vZGVsIHNwYXNpYWwgbGFpbiBzZXBlcnRpIFNBUiwgU0VNLCBTRE0sIGF0YXUgcGVuZGVrYXRhbiBCYXllc2lhbiBzcGFzaWFsIGRhcGF0IGRpcGVydGltYmFuZ2thbiBwYWRhIHBlbmVsaXRpYW4gc2VsYW5qdXRueWEuDQo2LiBUaWRhayBkaXRlbXVrYW5ueWEgcGVuZ2FydWggeWFuZyBzaWduaWZpa2FuIHNlY2FyYSBwYXJzaWFsIHBhZGEgc2VsdXJ1aCB2YXJpYWJlbCBwZW5lbGl0aWFuIG1lbmdpbmRpa2FzaWthbiBiYWh3YSBtYXNpaCB0ZXJkYXBhdCBmYWt0b3ItZmFrdG9yIGxhaW4geWFuZyBiZWx1bSB0ZXJha29tb2Rhc2kgZGFsYW0gbW9kZWwgZGFuIGJlcnBvdGVuc2kgbWVtZW5nYXJ1aGkgdmFyaWFzaSBJbmNpZGVuY2UgUmF0ZSBUQiBkaSBKYXdhIEJhcmF0Lg0KDQoNCiMgNS4JS2VzaW1wdWxhbiBkYW4gU2FyYW4NCg0KIyMgNS4xIEtlc2ltcHVsYW4NCg0KQmVyZGFzYXJrYW4gaGFzaWwgYW5hbGlzaXMgc3Bhc2lhbCB0ZXJoYWRhcCBJbmNpZGVuY2UgUmF0ZSAoSVIpIFR1YmVya3Vsb3NpcyAoVEIpIGRpIFByb3ZpbnNpIEphd2EgQmFyYXQgdGFodW4gMjAyNSBtZW5nZ3VuYWthbiBwZW5kZWthdGFuIFNwYXRpYWwgTGFnIG9mIFggKFNMWCksIGRpcGVyb2xlaCBiZWJlcmFwYSBrZXNpbXB1bGFuIHNlYmFnYWkgYmVyaWt1dDoNCg0KMS4gRGlzdHJpYnVzaSBJbmNpZGVuY2UgUmF0ZSBUQiBkaSBKYXdhIEJhcmF0IG1lbnVuanVra2FuIHZhcmlhc2kgYW50YXIga2FidXBhdGVuL2tvdGEuIFdpbGF5YWggZGVuZ2FuIElSIHRpbmdnaSBjZW5kZXJ1bmcgdGVya29uc2VudHJhc2kgcGFkYSBiZWJlcmFwYSB3aWxheWFoIHBlcmtvdGFhbiB5YW5nIG1lbWlsaWtpIGthcmFrdGVyaXN0aWsga2VwYWRhdGFuIGRhbiBha3Rpdml0YXMgcGVuZHVkdWsgeWFuZyB0aW5nZ2kuDQoyLiBIYXNpbCB1amkgTW9yYW4ncyBJIG1lbnVuanVra2FuIGJhaHdhIHNlYmFnaWFuIGJlc2FyIHZhcmlhYmVsIHBlbmplbGFzLCB5YWl0dSBwZW5kdWR1ayBtaXNraW4sIGtlcGFkYXRhbiBwZW5kdWR1aywgYWtzZXMgYWlyIG1pbnVtIGxheWFrLCBzYW5pdGFzaSBsYXlhaywgZGFuIGp1bWxhaCBrYXN1cyBISVYgbWVtaWxpa2kgcG9sYSBwZW5nZWxvbXBva2FuIHNwYXNpYWwgKHNwYXRpYWwgY2x1c3RlcmluZykgeWFuZyBzaWduaWZpa2FuLCBzZWhpbmdnYSBwZW5kZWthdGFuIHNwYXNpYWwgcmVsZXZhbiBkaWd1bmFrYW4gZGFsYW0gYW5hbGlzaXMuDQozLiBNb2RlbCBPTFMgbWVudW5qdWtrYW4gYmFod2EgdmFyaWFiZWwtdmFyaWFiZWwgcGVuZWxpdGlhbiBzZWNhcmEgc2ltdWx0YW4gbWFtcHUgbWVuamVsYXNrYW4gdmFyaWFzaSBJbmNpZGVuY2UgUmF0ZSBUQiwgbmFtdW4gcmVzaWR1YWwgbW9kZWwgbWFzaWggbWVuZ2FuZHVuZyBhdXRva29yZWxhc2kgc3Bhc2lhbCBzZWhpbmdnYSBiZWx1bSBtYW1wdSBtZW5hbmdrYXAga2V0ZXJrYWl0YW4gYW50YXJ3aWxheWFoIHNlY2FyYSBtZW1hZGFpLg0KNC4gTW9kZWwgU0xYIG1lbWJlcmlrYW4gcGVyZm9ybWEgeWFuZyBsZWJpaCBiYWlrIGRpYmFuZGluZ2thbiBtb2RlbCBPTFMgZGVuZ2FuIG5pbGFpIGtvZWZpc2llbiBkZXRlcm1pbmFzaSAoUrIpIHlhbmcgbGViaWggdGluZ2dpIGRhbiBuaWxhaSBSTVNFIHlhbmcgbGViaWggcmVuZGFoLiBIYWwgaW5pIG1lbnVuanVra2FuIGJhaHdhIGluZm9ybWFzaSBzcGFzaWFsIGFudGFyd2lsYXlhaCBtZW1iZXJpa2FuIHRhbWJhaGFuIGtlbWFtcHVhbiBkYWxhbSBtZW5qZWxhc2thbiB2YXJpYXNpIGtlamFkaWFuIFRCLg0KNS4gTWVza2lwdW4gZGVtaWtpYW4sIHNlbHVydWggdmFyaWFiZWwgbG9rYWwgbWF1cHVuIHZhcmlhYmVsIGxhZyBzcGFzaWFsIHRpZGFrIG1lbnVuanVra2FuIHBlbmdhcnVoIHlhbmcgc2lnbmlmaWthbiBzZWNhcmEgcGFyc2lhbCB0ZXJoYWRhcCBJbmNpZGVuY2UgUmF0ZSBUQi4gSGFzaWwgYW5hbGlzaXMgZGlyZWN0IGVmZmVjdCBkYW4gaW5kaXJlY3QgZWZmZWN0IGp1Z2EgdGlkYWsgbWVudW5qdWtrYW4gYWRhbnlhIGVmZWsgbGltcGFoYW4gc3Bhc2lhbCAoc3BpbGxvdmVyIGVmZmVjdCkgeWFuZyBzaWduaWZpa2FuIHBhZGEgdGFyYWYgc2lnbmlmaWthbnNpIDUlLg0KU2VjYXJhIGtlc2VsdXJ1aGFuLCBwZW5lbGl0aWFuIGluaSBtZW51bmp1a2thbiBiYWh3YSBwZW5kZWthdGFuIHNwYXNpYWwgcGVudGluZyBkYWxhbSBwZW1vZGVsYW4ga2VqYWRpYW4gVEIgZGkgSmF3YSBCYXJhdCwgbmFtdW4gdmFyaWFiZWwgeWFuZyBkaWd1bmFrYW4gZGFsYW0gcGVuZWxpdGlhbiBpbmkgYmVsdW0gbWFtcHUgbWVuamVsYXNrYW4gZmFrdG9yLWZha3RvciB5YW5nIG1lbWVuZ2FydWhpIEluY2lkZW5jZSBSYXRlIFRCIHNlY2FyYSBwYXJzaWFsLg0KDQojIyA1LjIgU2FyYW4gDQoNCkJlcmRhc2Fya2FuIGhhc2lsIHBlbmVsaXRpYW4geWFuZyBkaXBlcm9sZWgsIGJlYmVyYXBhIHNhcmFuIHlhbmcgZGFwYXQgZGliZXJpa2FuIGFkYWxhaCBzZWJhZ2FpIGJlcmlrdXQ6DQoNCjEuICBQZW1lcmludGFoIGRhZXJhaCBkYW4gaW5zdGFuc2kga2VzZWhhdGFuIHBlcmx1IHRldGFwIG1lbXByaW9yaXRhc2thbiBwcm9ncmFtIHBlbmdlbmRhbGlhbiBUQiBwYWRhIHdpbGF5YWggZGVuZ2FuIEluY2lkZW5jZSBSYXRlIHRpbmdnaSBtZWxhbHVpIHBlbmluZ2thdGFuIGRldGVrc2kgZGluaSwgcGVuZ29iYXRhbiwgZGFuIHBlbWFudGF1YW4ga2FzdXMgc2VjYXJhIGJlcmtlbGFuanV0YW4uDQoyLiBQZW5lbGl0aWFuIHNlbGFuanV0bnlhIGRpc2FyYW5rYW4gbWVuYW1iYWhrYW4gdmFyaWFiZWwgeWFuZyBsZWJpaCBzcGVzaWZpayB0ZXJrYWl0IGZha3RvciByaXNpa28gVEIsIHNlcGVydGkga29uZGlzaSBodW5pYW4sIGtlcGFkYXRhbiBydW1haCB0YW5nZ2EsIHRpbmdrYXQgcGVuZGlkaWthbiwgc3RhdHVzIGdpemksIG1vYmlsaXRhcyBwZW5kdWR1aywgY2FrdXBhbiBwZW5nb2JhdGFuIFRCLCBkYW4gZmFrdG9yIGxpbmdrdW5nYW4gbGFpbm55YS4NCjMuIFBlbmdndW5hYW4gZGF0YSBzcGFzaW8tdGVtcG9yYWwgYXRhdSBkYXRhIHBhbmVsIHNwYXNpYWwgcGVybHUgZGlwZXJ0aW1iYW5na2FuIGFnYXIgZGFwYXQgbWVuYW5na2FwIGRpbmFtaWthIHBlbnllYmFyYW4gVEIgZGFyaSB3YWt0dSBrZSB3YWt0dSBkYW4gbWVuZ2lkZW50aWZpa2FzaSBwZXJ1YmFoYW4gcG9sYSBzcGFzaWFsIHNlY2FyYSBsZWJpaCBha3VyYXQuDQo0LiAgTW9kZWwgc3Bhc2lhbCB5YW5nIGxlYmloIGtvbXBsZWtzIHNlcGVydGkgU3BhdGlhbCBEdXJiaW4gTW9kZWwgKFNETSksIFNwYXRpYWwgRXJyb3IgTW9kZWwgKFNFTSksIFNwYXRpYWwgQXV0b3JlZ3Jlc3NpdmUgTW9kZWwgKFNBUiksIGF0YXUgcGVuZGVrYXRhbiBCYXllc2lhbiBzcGFzaWFsIHNlcGVydGkgQllNIGRhbiBCWU0yIGRhcGF0IGRpZ3VuYWthbiB1bnR1ayBtZW1wZXJvbGVoIHBlbWFoYW1hbiB5YW5nIGxlYmloIGtvbXByZWhlbnNpZiBtZW5nZW5haSBmYWt0b3ItZmFrdG9yIHlhbmcgbWVtZW5nYXJ1aGkga2VqYWRpYW4gVEIuDQo1LiBBbmFsaXNpcyBwYWRhIHRpbmdrYXQgd2lsYXlhaCB5YW5nIGxlYmloIHJpbmNpLCBzZXBlcnRpIGtlY2FtYXRhbiBhdGF1IGRlc2Eva2VsdXJhaGFuLCBwZXJsdSBkaWxha3VrYW4gdW50dWsgbWVuZ3VyYW5naSBoZXRlcm9nZW5pdGFzIGRhbGFtIHNhdHUgd2lsYXlhaCBhZG1pbmlzdHJhc2kgZGFuIG1lbmdoYXNpbGthbiBpbmZvcm1hc2kgeWFuZyBsZWJpaCBzcGVzaWZpayBiYWdpIHBlcmVuY2FuYWFuIHByb2dyYW0ga2VzZWhhdGFuLg0KDQojIERhZnRhciBQdXN0YWthIA0KDQoxLiBBbG1hLCBMLiBSLiwgT2xpdmlvbml0YSwgVi4sICYgV2FyZGFuaSwgSC4gRS4gKDIwMjQpLiAqQW4gZWNvbG9naWNhbCBzdHVkeSBvZiBkZXRlcm1pbmFudHMgb2YgdGhlIGluY2lkZW5jZSBvZiB0dWJlcmN1bG9zaXMgaW4gTWFsYW5nIFJheWEgYXJlYSouIFByZXZlbnRpYTogVGhlIEluZG9uZXNpYW4gSm91cm5hbCBvZiBQdWJsaWMgSGVhbHRoLCA5KDEpLCAxMTItMTIwLiBodHRwczovL2RvaS5vcmcvMTAuMTc5NzcvdW0wNDR2OWkxMjAyNHAxMTItMTIwDQoNCjIuIEFuc2VsaW4sIEwuICgxOTk1KS4gKkxvY2FsIGluZGljYXRvcnMgb2Ygc3BhdGlhbCBhc3NvY2lhdGlvbiBMSVNBKi4gR2VvZ3JhcGhpY2FsIEFuYWx5c2lzLCAyNygyKSwgOTMtMTE1LiBodHRwczovL2RvaS5vcmcvMTAuMTExMS9qLjE1MzgtNDYzMi4xOTk1LnRiMDAzMzgueA0KDQozLiBBdGlsbGFoLCBDLiBOLiwgV3VsYW5kYXJpLCBSLiBBLiwgJiBLdXJuaWFzYXJpLCBGLiAoMjAyMykuICpFbnZpcm9ubWVudGFsIGZhY3RvcnMgYW5kIHB1bG1vbmFyeSB0dWJlcmN1bG9zaXMgY2FzZXMgaW4gQmFuZHVuZyBDaXR5Ki4gSnVybmFsIElsbWlhaCBLZXNlaGF0YW4gTWFzeWFyYWthdCwgMTUoNCksIDE2Ny0xNzUuIGh0dHBzOi8vZG9pLm9yZy8xMC41MjAyMi9qaWttLnYxNWk0LjU2Ng0KDQo0LiBCaXZhbmQsIFIuIFMuLCBQZWJlc21hLCBFLiwgJiBH821lei1SdWJpbywgVi4gKDIwMTMpLiAqQXBwbGllZCBzcGF0aWFsIGRhdGEgYW5hbHlzaXMgd2l0aCBSKiAoMm5kIGVkLikuIFNwcmluZ2VyLg0KDQo1LiBDbGlmZiwgQS4gRC4sICYgT3JkLCBKLiBLLiAoMTk4MSkuICpTcGF0aWFsIHByb2Nlc3NlczogTW9kZWxzIGFuZCBhcHBsaWNhdGlvbnMqLiBQaW9uLg0KDQo2LiBEaW5hcyBLZXNlaGF0YW4gUHJvdmluc2kgSmF3YSBCYXJhdC4gKDIwMjUpLiAqSnVtbGFoIGthc3VzIHBlbnlha2l0IHR1YmVya3Vsb3NpcyBiZXJkYXNhcmthbiBrYWJ1cGF0ZW4va290YSBkaSBKYXdhIEJhcmF0Ki4gT3BlbiBEYXRhIEphYmFyLiBodHRwczovL29wZW5kYXRhLmphYmFycHJvdi5nby5pZC9pZC9kYXRhc2V0L2p1bWxhaC1rYXN1cy1wZW55YWtpdC10dWJlcmt1bG9zaXMtYmVyZGFzYXJrYW4ta2FidXBhdGVua290YS1kaS1qYXdhLWJhcmF0DQoNCjcuIER6YWtpeWFoLCBSLiBOLiwgS2FyaW1hLCBVLiBRLiwgU2ltYW5qb3JhbmcsIEMuLCAmIEFwcmluaW5nc2loLiAoMjAyMykuICpEZXRlcm1pbmFuIGtlamFkaWFuIHR1YmVya3Vsb3NpcyBwYXJ1IHBhZGEgdXNpYSBkZXdhc2EqLiBKdXJuYWwgUGVuZWxpdGlhbiBLZXNlaGF0YW4gU3VhcmEgRm9yaWtlcy4NCg0KOC4gRmFya2hhbiwgQS4sIFBha2FzaSwgVC4gVC4sIFN1bGlzdHlvLCBTLiwgU2Fsc2FiaWxhLCBBLiwgTWF1ZGUsIFIuIEouLCAmIFJvdGVqYW5hcHJhc2VydCwgQy4gKDIwMjYpLiAqU3BhdGlvdGVtcG9yYWwgZXBpZGVtaW9sb2d5IGFuZCBhc3NvY2lhdGVkIHJpc2sgZmFjdG9ycyBvZiB0dWJlcmN1bG9zaXMgaW5jaWRlbmNlIGFuZCBtb3J0YWxpdHkgaW4gSW5kb25lc2lhIDIwMTctMjAyMjogQSBuYXRpb253aWRlIHNwYWNlLXRpbWUgaGllcmFyY2hpY2FsIGFuYWx5c2lzKi4gUG9wdWxhdGlvbiBIZWFsdGggTWV0cmljcywgMjQsIDEyLiBodHRwczovL2RvaS5vcmcvMTAuMTE4Ni9zMTI5NjMtMDI2LTAwNDU4LTUNCg0KOS4gSGFuZGF5YW5pLCBTLiwgTXVzZmlyYWgsIE0uLCAmIEFwcmlhbmEsIEEuICgyMDI0KS4gKkRldGVybWluYW50cyBvZiBwdWxtb25hcnkgdHViZXJjdWxvc2lzKi4gSnVybmFsIElsbWlhaCBLZXNlaGF0YW4sIDYoMSksIDQ1LTU0LiBodHRwczovL2RvaS5vcmcvMTAuMzY1OTAvamlrYS52NmkxLjM3NA0KDQoxMC4gSGFxLCBBLiwgQWNobWFkaSwgVS4gRi4sICYgU3VzYW5uYSwgRC4gKDIwMjApLiAqQW5hbGlzaXMgc3Bhc2lhbCBUQiBwYXJ1Ki4gSnVybmFsIEVrb2xvZ2kgS2VzZWhhdGFuLCAxOCgzKS4gaHR0cHM6Ly9kb2kub3JnLzEwLjIyNDM1L2play52M2kxOC44MA0KDQoxMS4gSW5nZ2FycHV0cmksIFkuIFIuLCBUcmloYW5kaW5pLCBJLiwgTm92aXRhc2FyaSwgUC4gRC4sICYgTWFrZnVsLCBNLiBSLiAoMjAyMykuICpTcGF0aWFsIGFuYWx5c2lzIG9mIHR1YmVyY3Vsb3NpcyBjYXNlcyBkaWZmdXNpb24gYmFzZWQgb24gcG9wdWxhdGlvbiBkZW5zaXR5IGluIEJla2FzaSBSZWdlbmN5IGluIDIwMTctMjAyMSouIEJlcml0YSBLZWRva3RlcmFuIE1hc3lhcmFrYXQsIDM5KDEpLCBlNjQ2Mi4gaHR0cHM6Ly9kb2kub3JnLzEwLjIyMTQ2L2JrbS52MzlpMDEuNjQ2Mg0KDQoxMi4gS2VtZW50ZXJpYW4gS2VzZWhhdGFuIFJlcHVibGlrIEluZG9uZXNpYS4gKDIwMjUpLiAqUHJvZmlsIGtlc2VoYXRhbiBJbmRvbmVzaWEgMjAyNCouDQoNCjEzLiBLcmlzdGlhbmluZ3J1bSwgRS4gTi4gKDIwMjQpLiAqS2VwYWRhdGFuIHBlbmR1ZHVrIGRhbiBUQiBwYXJ1KiAoU2tyaXBzaSkuIFVuaXZlcnNpdGFzIER1dGEgQmFuZ3NhLg0KDQoxNC4gTGFvbGksIEguIEEuLCBOYXppcmEsIEEuLCBGYWxlcmlhLCBJLiwgVGFyaWdhbiwgQi4sICYgR2lyc2FuZywgVi4gSS4gKDIwMjQpLiAqQ2FzZXMgb2YgcHVsbW9uYXJ5IHR1YmVyY3Vsb3NpcyBhbmQgcG9wdWxhdGlvbiBkZW5zaXR5Ki4gTUlISElDbyBDb25mZXJlbmNlIFByb2NlZWRpbmdzLg0KDQoxNS4gTWFkYW8sIEUuIFAuLCBIZXJtYXdhdGksIEUuLCBQdXRyaSwgTi4gQS4gQS4sICYgTWFrZnVsLCBNLiBSLiAoMjAyNCkuICpFdmFsdWF0aW5nIHNwYXRpYWwgYW5hbHlzaXMgb2YgdHViZXJjdWxvc2lzIHByZXZhbGVuY2UgdG8gaWRlbnRpZnkgcHJpb3JpdHkgZGlzdHJpY3RzIG9yIG11bmljaXBhbGl0aWVzIHRoYXQgbmVlZCBwb2xpY3kgYXR0ZW50aW9uIGluIFdlc3QgSmF2YSouIEJlcml0YSBLZWRva3RlcmFuIE1hc3lhcmFrYXQsIDQwKDQpLiBodHRwczovL2RvaS5vcmcvMTAuMjIxNDYvYmttLnY0MGkwNC4xMjE2MA0KDQoxNi4gTW9udGdvbWVyeSwgRC4gQy4sIFBlY2ssIEUuIEEuLCAmIFZpbmluZywgRy4gRy4gKDIwMjEpLiAqSW50cm9kdWN0aW9uIHRvIGxpbmVhciByZWdyZXNzaW9uIGFuYWx5c2lzKiAoNnRoIGVkLikuIFdpbGV5Lg0KDQoxNy4gTnVyZGluLCBBLiwgZXQgYWwuICgyMDI1KS4gKkFuYWxpc2lzIGZha3RvciByaXNpa28gVEIqLiBKdXJuYWwgS2VzZWhhdGFuIFlhbWFzaSBNYWthc3NhciwgOSgyKSwgMS05Lg0KDQoxOC4gUHV0cmEsIEkuIEcuIE4uIEUuLCBSYWhtYW5pYXRpLCBNLiwgRXJ5YW5kbywgVC4sICYgU2lwYWh1dGFyLCBULiAoMjAyMikuICpNb2RlbGluZyB0aGUgcHJldmFsZW5jZSBvZiB0dWJlcmN1bG9zaXMgaW4gSmF2YSwgSW5kb25lc2lhOiBBbiBlY29sb2dpY2FsIHN0dWR5IHVzaW5nIGdlb2dyYXBoaWNhbGx5IHdlaWdodGVkIHJlZ3Jlc3Npb24qLiBKb3VybmFsIG9mIFBvcHVsYXRpb24gYW5kIFNvY2lhbCBTdHVkaWVzLiBodHRwczovL3NvMDMudGNpLXRoYWlqby5vcmcvaW5kZXgucGhwL2pwc3MvYXJ0aWNsZS92aWV3LzI1NzQ3Nw0KDQoxOS4gUmFobWF3YXRpLCBZLiwgSmFtaWwsIEkuIFIuLCBIaWRheWFoLCBJLiwgS3VzdW1hd2FyZGFuaSwgRC4sICYgV2lib3dvLCBXLiAoMjAyNikuICpTcGF0aWFsIGVjb25vbWV0cmljIGFuYWx5c2lzIG9mIHRoZSBpbXBhY3Qgb2YgaGVhbHRoIGluZnJhc3RydWN0dXJlIG9uIFRCQyBwYXRpZW50czogU3R1ZHkgY2FzZSBpbiBJbmRvbmVzaWEgcHJvdmluY2VzIGxldmVsKi4gSW50ZXJuYXRpb25hbCBSZXZpZXcgZm9yIFNwYXRpYWwgUGxhbm5pbmcgYW5kIFN1c3RhaW5hYmxlIERldmVsb3BtZW50LCAxNCgxKSwgOTYtMTE3LiBodHRwczovL2RvaS5vcmcvMTAuMTQyNDYvaXJzcHNkLjE0LjFfOTYNCg0KMjAuIFJvc2FkeSwgRC4gUy4sIFp1bGZhLCBOLiBSLiBBLiwgJiBQcmF0YW1hLCBTLiBCLiAoMjAyNCkuICpTcGF0aWFsIGFuYWx5c2lzIFRCIEJhbmR1bmcqLiBHbG9iYWwgTWVkaWNhbCAmIEhlYWx0aCBDb21tdW5pY2F0aW9uLCAxMigxKS4gaHR0cHM6Ly9kb2kub3JnLzEwLjI5MzEzL2dtaGMudjEyaTEuMTI0MTANCg0KMjEuIFNhc21pdGEsIFMuLCBKdW5haWQsIEouLCAmIEFpbnVyYWZpcSwgQS4gKDIwMTcpLiAqUG9sYSBzcGFzaWFsIFRCIHBhcnUqLiBKdXJuYWwgSWxtaWFoIE1haGFzaXN3YSBLZXNlaGF0YW4gTWFzeWFyYWthdC4NCg0KMjIuIFNoYWgsIFMuIEEuLCBWZWxhcmRlLCBSLiwgQW1pbmksIEguLCBldCBhbC4gKDIwMTgpLiAqTWV0aG9kcyB1c2VkIGluIHRoZSBzcGF0aWFsIGFuYWx5c2lzIG9mIHR1YmVyY3Vsb3NpcyBlcGlkZW1pb2xvZ3k6IEEgc3lzdGVtYXRpYyByZXZpZXcqLiBCTUMgUHVibGljIEhlYWx0aC4gaHR0cHM6Ly9kb2kub3JnLzEwLjExODYvczEyODg5LTAxOC01NTU4LTQNCg0KMjMuIFNpaGFsb2hvLCBFLiBELiwgZXQgYWwuICgyMDIxKS4gKlBlbmdhcnVoIGtlbWlza2luYW4gdGVyaGFkYXAgVEIqLiBKb3VybmFsIG9mIEFwcGxpZWQgQnVzaW5lc3MgYW5kIEVjb25vbWljLCA3KDMpLiBodHRwczovL2RvaS5vcmcvMTAuMzA5OTgvamFiZS52N2kzLjY0NzANCg0KMjQuIFN1cnlhbmksIEYuIFQuLCAmIEliYWQsIE0uICgyMDIyKS4gKkZha3RvciBrZXBhZGF0YW4gZGFuIHNhbml0YXNpIHRlcmhhZGFwIFRCKi4gSnVybmFsIFNvc2lhbCBTYWlucywgMigxMCkuIGh0dHBzOi8vZG9pLm9yZy8xMC4zNjQxOC9qdXJuYWxzb3NhaW5zLnYyaTEwLjQ2OA0KDQoyNS4gVHVybmVyLCBSLiBELiwgZXQgYWwuICgyMDE3KS4gKlR1YmVyY3Vsb3NpcyBpbmZlY3Rpb3VzbmVzcyBhbmQgaG9zdCBzdXNjZXB0aWJpbGl0eSouIEpvdXJuYWwgb2YgSW5mZWN0aW91cyBEaXNlYXNlcywgMjE2LiBodHRwczovL2RvaS5vcmcvMTAuMTA5My9pbmZkaXMvaml4MzYxDQoNCjI2LiBXb3JsZCBIZWFsdGggT3JnYW5pemF0aW9uLiAoMjAyNSkuICpHbG9iYWwgdHViZXJjdWxvc2lzIHJlcG9ydCAyMDI1Ki4gV0hPLg0KDQoNCi0tLQ0KDQpMaW5rIERhdGEgZGFuIFNIUCA6IGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9kcml2ZS9mb2xkZXJzLzFlQUtYR3d3Qnc3S2lTaDhxWW9RamRVNWJYZThuaXhCZz91c3A9c2hhcmluZw0KDQpMaW5rIFJzaGlueSA6IA0KaHR0cHM6Ly9zcml5dWxpYW5hLnNoaW55YXBwcy5pby9EQVNIQk9BUkRfQU5BTElTSVNfU1BBU0lBTC8NCg==