2. Lineárna regresia v základnom tvare
V tejto časti sme urobili základný regresný model, kde skúmame, čo
ovplyvňuje mieru nezamestnanosti na Slovensku. Do modelu sme dali podiel
zamestnanosti v jednotlivých sektoroch a logaritmus HDP, ktorý lepšie
zachytáva ekonomický rast.
library(ggplot2)
# môj regresný logaritmovaný model
model_log <- lm(Unemployment.Rate ~
Employment.Sector..Agriculture +
Employment.Sector..Industry +
Employment.Sector..Services +
logGDP,
data = udajeSlovakRepublic)
summary(model_log)
Call:
lm(formula = Unemployment.Rate ~ Employment.Sector..Agriculture +
Employment.Sector..Industry + Employment.Sector..Services +
logGDP, data = udajeSlovakRepublic)
Residuals:
Min 1Q Median 3Q Max
-5.3249 -2.3479 0.4943 1.6275 4.9565
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.531e+06 2.243e+06 1.128 0.269106
Employment.Sector..Agriculture -2.531e+04 2.243e+04 -1.128 0.269112
Employment.Sector..Industry -2.530e+04 2.243e+04 -1.128 0.269190
Employment.Sector..Services -2.530e+04 2.243e+04 -1.128 0.269175
logGDP -1.427e+01 3.662e+00 -3.896 0.000583 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 2.895 on 27 degrees of freedom
Multiple R-squared: 0.4891, Adjusted R-squared: 0.4134
F-statistic: 6.461 on 4 and 27 DF, p-value: 0.0008785
Z výsledkov vyšlo, že premenné Agriculture, Industry a Services nie
sú štatisticky významné. To znamená, že podľa tohto modelu nevieme
potvrdiť, že tieto sektory majú priamy vplyv na nezamestnanosť. Na druhú
stranu, premenná logGDP je významná a jej koeficient je záporný, takže
keď HDP rastie, nezamestnanosť má tendenciu klesať. F-test ukazuje, že
model je ako celok významný, takže dáva zmysel ho ďalej používať.
3. Detekcia autokorelácie
ACF graf (Autocorrelation Function)
Táto funkcia priradzuje odhad korelácie, ktorá je medzi jednotlivými
rezíduami v aktuálnom období a období posunutom (Lag) o \(k\) období späť.
acf(res, lag.max = 4,main = "Autokorelačná funkcia rezíduí")

Z ACF grafu vidíme, že reziduá nášho modelu sú výrazne
autokorelované. Hodnota pri lag 1 je nad hranicou významnosti, čo
znamená, že reziduá z jedného roka sú silne spojené s reziduami z
predchádzajúceho roka. Podobne aj lag 2 a lag 3 sú stále relatívne
vysoké.
Toto naznačuje, že model nezachytáva časovú závislosť v dátach a
pravdepodobne v ňom vzniká autokorelácia, ktorú musíme ďalej otestovať
aj formálnymi štatistickými testami.
Durbin–Watsonov test
Pri Durbin–Watsonovom teste pracujeme s týmito hypotézami:
- H₀ : v reziduách nie je prítomná autokorelácia
prvého rádu. Chyby medzi rokmi sú náhodné a nesúvisia spolu.
- H₁ : v reziduách je prítomná autokorelácia prvého
rádu. Chyby medzi rokmi sú navzájom závislé.
library(lmtest)
dwtest(model_log
)
Durbin-Watson test
data: model_log
DW = 0.54927, p-value = 9.366e-09
alternative hypothesis: true autocorrelation is greater than 0
Výsledok testu nám v našom prípade ukazuje hodnotu DW = 0.549, čo je
výrazne nižšie ako hodnota okolo 2, ktorá by znamenala žiadnu
autokoreláciu. P-hodnota je extrémne malá (9.366e-09), takže nulovú
hypotézu zamietame. Z toho vyplýva, že v našom modeli je prítomná
pozitívna autokorelácia rezíduí.
Breusch–Godfreyov test (BG test)
Durbin–Watsonov test nám ukázal, že v našom modeli je problém s
autokoreláciou. Na potvrdenie tohto výsledku použijeme Breusch–Godfreyov
test, ktorý je všeobecnejší a vie zachytiť aj vyšší rád
autokorelácie.
Pri BG teste pracujeme s týmito hypotézami:
- H₀ : v reziduách nášho modelu nie je autokorelácia
daného rádu. Chyby sú náhodné a medzi rokmi nie sú systematicky
prepojené.
- H₁ : v reziduách je prítomná autokorelácia daného
rádu. Chyby medzi rokmi spolu súvisia a model nezachytáva časový priebeh
úplne správne.
bgtest(model_log, order = 1)
Breusch-Godfrey test for serial correlation of order up to 1
data: model_log
LM test = 15.78, df = 1, p-value = 7.114e-05
Test nám vyšiel s p-hodnotou 7.114e-05, čo je oveľa menej ako hranica
0,05. Preto nulovú hypotézu zamietame a berieme to tak, že v našom
modeli je prítomná autokorelácia prvého rádu.
Tento výsledok potvrdzuje to, čo sme videli aj v ACF grafe a v
Durbin–Watsonovom teste. Chyby modelu sa v čase opakujú a nadväzujú na
seba, takže model nezachytáva časový vývoj nezamestnanosti úplne
správne. Ide o problém v špecifikácii modelu, nie o problém v samotných
dátach.
Odstraňovanie problému autokorelácie rezíduí – Koyckov model
Keďže náš pôvodný model mal problém s autokoreláciou, pokúšame sa ho
odstrániť pridaním oneskorenej závislej premennej. Ide o tzv. Koyckov
model. Do modelu sme pridali nezamestnanosť z minulého roka (lag 1),
keďže predpokladáme, že vývoj nezamestnanosti sa mení postupne a môže
byť ovplyvnený hodnotami z predchádzajúceho obdobia.
Po pridaní tejto premennej odhadneme nový model a následne vykonáme
Durbin–Watsonov test, aby sme skontrolovali, či autokorelácia zmizla. Ak
je hodnota DW bližšie k číslu 2 a p-hodnota je väčšia ako 0,05, znamená
to, že autokoreláciu sa podarilo odstrániť.
library(dplyr)
udajeSlovakRepublic <- udajeSlovakRepublic %>%
arrange(Year) %>%
mutate(
Unemployment_lag1 = lag(Unemployment.Rate)
)
model_koyck <- lm(Unemployment.Rate ~
Employment.Sector..Agriculture +
Employment.Sector..Industry +
Employment.Sector..Services +
logGDP +
Unemployment_lag1,
data = udajeSlovakRepublic)
summary(model_koyck)
Call:
lm(formula = Unemployment.Rate ~ Employment.Sector..Agriculture +
Employment.Sector..Industry + Employment.Sector..Services +
logGDP + Unemployment_lag1, data = udajeSlovakRepublic)
Residuals:
Min 1Q Median 3Q Max
-1.8401 -0.9695 -0.2207 0.9802 2.8456
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.047e+06 1.098e+06 1.864 0.0741 .
Employment.Sector..Agriculture -2.047e+04 1.098e+04 -1.864 0.0741 .
Employment.Sector..Industry -2.047e+04 1.098e+04 -1.864 0.0741 .
Employment.Sector..Services -2.047e+04 1.098e+04 -1.864 0.0741 .
logGDP -3.746e+00 2.237e+00 -1.674 0.1065
Unemployment_lag1 8.215e-01 9.572e-02 8.582 6.37e-09 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 1.414 on 25 degrees of freedom
(1 observation deleted due to missingness)
Multiple R-squared: 0.8872, Adjusted R-squared: 0.8646
F-statistic: 39.31 on 5 and 25 DF, p-value: 4.654e-11
Výsledky Koyckovho modelu
Keď sme do modelu pridali oneskorenú nezamestnanosť z minulého roka,
tak sa výsledky zlepšili. Premenná Unemployment_lag1 vyšla veľmi
významná, čo znamená, že nezamestnanosť z predchádzajúceho roka silno
ovplyvňuje nezamestnanosť v aktuálnom roku. To dáva zmysel, keďže
nezamestnanosť sa väčšinou nemení skokovo, ale postupne.
Ostatné premenné už nie sú také dôležité ako predtým, pretože veľkú
časť zmeny v nezamestnanosti vysvetlí práve hodnota z minulého roka.
Tým, že sme túto premennú pridali, model sa lepšie trafí do toho, ako sa
nezamestnanosť správa v čase.
Hodnota R² sa zvýšila na približne 0.89, čo je veľmi dobré. Znamená
to, že náš nový model už vie vysvetliť skoro celú zmenu v
nezamestnanosti. Celkovo tento model pôsobí stabilnejšie a presnejšie
než ten pôvodný.
Durbin–Watsonov test po odhade Koyckovho modelu
Na novom modeli sme spravili opäť Durbin–Watsonov test, aby sme
zistili, či sa autokorelácia podarila odstrániť. V našom prípade sme
dostali hodnotu DW = 1.3468, čo je síce bližšie k hodnote 2 ako predtým,
ale stále to nie je úplne ideálne. P-hodnota je 0.003, takže nulovú
hypotézu opäť zamietame.
To znamená, že aj keď sa autokorelácia znížila, stále tam je a model
ju úplne neodstránil. Koyckov model síce pomohol zlepšiť výsledky a
spravil model presnejší, ale autokorelácia sa nestratila úplne.
Durbin-Watson test
data: model_koyck
DW = 1.3468, p-value = 0.003055
alternative hypothesis: true autocorrelation is greater than 0
Na novom modeli sme spravili opäť Durbin–Watsonov test, aby sme
zistili, či sa autokorelácia podarila odstrániť. V našom prípade sme
dostali hodnotu DW = 1.3468, čo je síce bližšie k hodnote 2 ako predtým,
ale stále to nie je úplne ideálne. P-hodnota je 0.003, takže nulovú
hypotézu opäť zamietame.
Koyckov model síce pomohol zlepšiť výsledky a spravil model
presnejší, ale autokorelácia sa nestratila úplne.
Newey–West robustné štandardné chyby
Keďže náš model má problémy s autokoreláciou a niektoré predpoklady
klasickej regresie nie sú splnené, použili sme tzv. robustné smerodajné
chyby. Tie nemenia samotné koeficienty, ale upravujú ich smerodajné
chyby tak, aby boli výsledky spoľahlivejšie aj vtedy, keď sa model
nespráva úplne ideálne.
coeftest(model_koyck, vcov = vcovHC(model_koyck, type = "HC3"))
t test of coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 2.0472e+06 9.4600e+05 2.1640 0.04022 *
Employment.Sector..Agriculture -2.0471e+04 9.4859e+03 -2.1580 0.04073 *
Employment.Sector..Industry -2.0471e+04 9.4780e+03 -2.1598 0.04058 *
Employment.Sector..Services -2.0470e+04 9.4689e+03 -2.1619 0.04040 *
logGDP -3.7461e+00 2.4370e+00 -1.5372 0.13681
Unemployment_lag1 8.2149e-01 1.0563e-01 7.7771 3.918e-08 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Výsledky po použití robustných smerodajných chýb
Po použití robustných smerodajných chýb sa ukázalo, že náš model je
stabilnejší a výsledky sú spoľahlivejšie. V porovnaní s predchádzajúcimi
výsledkami vidíme, že oneskorená nezamestnanosť (Unemployment_lag1)
zostáva výrazne významná, takže naozaj platí, že nezamestnanosť z
minulého roka silno ovplyvňuje tú aktuálnu.
Zaujímavé je, že po úprave sa významnými stali aj premenné
Agriculture, Industry a Services. Všetky tri majú veľmi podobné
koeficienty aj p-hodnoty. Znamená to, že tieto premenné majú určitý
vplyv na nezamestnanosť, ale tento vplyv sme videli až po tom, čo boli
chyby „opravené“ robustným prístupom.
Premenná logGDP zostala nevýznamná, takže HDP samotné nemá v našom
modeli až taký veľký vplyv, keď už berieme do úvahy oneskorenú
nezamestnanosť.
Celkovo môžeme povedať, že robustné smerodajné chyby nám pomohli
získať presnejší obraz o tom, ktoré premenné sú skutočne dôležité, aj
keď model nemá úplne ideálne vlastnosti.
Zhrnutie
V našej analýze sme najskôr odhadli základný regresný model, aby sme
zistili, čo ovplyvňuje mieru nezamestnanosti na Slovensku. Pôvodný model
mal však problémy s autokoreláciou, čo sme videli v ACF grafe a
potvrdili pomocou Durbin–Watsonovho a Breusch–Godfreyovho testu. To
znamenalo, že model nezachytával časový vývoj dostatočne dobre a chyby
sa v čase opakovali.
Preto sme vyskúšali Koyckov model, kde sme pridali nezamestnanosť z
predchádzajúceho roka. Tento krok výrazne zlepšil kvalitu modelu a
zvýšil R², takže model dokázal vysvetliť oveľa väčšiu časť zmien v
nezamestnanosti. Autokorelácia sa síce znížila, ale úplne nezmizla.
Nakoniec sme použili robustné smerodajné chyby, ktoré upravujú
výsledky tak, aby boli spoľahlivejšie aj vtedy, keď model nie je úplne
ideálny. Po tejto úprave sa ukázalo, ktoré premenné sú naozaj dôležité a
výsledky pôsobili stabilnejšie.
Celkovo môžeme povedať, že náš model po úpravách lepšie zachytáva
vývoj nezamestnanosti v čase. Stále však platí, že časové rady sú
špecifické a často si vyžadujú pokročilejšie modely, aby sme úplne
odstránili autokoreláciu.
LS0tCnRpdGxlOiAiUHLDoWNhIHMgZGF0YWLDoXpvdSAtIGltcG9ydCDDumRham92LCBncmFmeSwgxaF0YXRpc3Rpa3kiCmF1dGhvcjogIkzDrXZpYSBNZWxpY2hvdsOhIgpkYXRlOiAiTm92ZW1iZXIgMjAyNSIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogICAgdG9jOiB0cnVlCiAgICB0b2NfZmxvYXQ6IHRydWUKICAgIHRoZW1lOiB1bml0ZWQKICAgIGhpZ2hsaWdodDogdGFuZ28KZWRpdG9yX29wdGlvbnM6IAogIG1hcmtkb3duOiAKICAgIHdyYXA6IDcyCi0tLQoKYGBge3J9CmxpYnJhcnkoem9vKQpsaWJyYXJ5KHRzZXJpZXMpCmxpYnJhcnkobG10ZXN0KQpsaWJyYXJ5KHNhbmR3aWNoKQpsaWJyYXJ5KGNhcikKcm0obGlzdD1scygpKQpgYGAKCgojSW1wb3J0IHVkYWpvdgoKCmBgYHtyfQp1ZGFqZSA8LSByZWFkLmNzdigiRW1wbG95bWVudF9VbmVtcGxveW1lbnRfR0RQX2RhdGEuY3N2IiwKaGVhZGVyID0gVFJVRSwKc2VwID0gIiwiLApkZWMgPSAiLiIsCnN0cmluZ3NBc0ZhY3RvcnMgPSBGQUxTRSkKCgp1ZGFqZVNsb3Zha1JlcHVibGljIDwtIHVkYWplW3VkYWplJENvdW50cnk9PSJTbG92YWsgUmVwdWJsaWMiLGMoIlVuZW1wbG95bWVudC5SYXRlIiwiRW1wbG95bWVudC5TZWN0b3IuLkFncmljdWx0dXJlIiwgIlllYXIiLCJHRFAuLmluLlVTRC4iLCAiRW1wbG95bWVudC5TZWN0b3IuLkluZHVzdHJ5IiwiRW1wbG95bWVudC5TZWN0b3IuLlNlcnZpY2VzIildCnJvd25hbWVzKHVkYWplU2xvdmFrUmVwdWJsaWMpPC11ZGFqZVNsb3Zha1JlcHVibGljJFllYXIKdWRhamVTbG92YWtSZXB1YmxpYyA8LSB1ZGFqZVNsb3Zha1JlcHVibGljW29yZGVyKHVkYWplU2xvdmFrUmVwdWJsaWMkWWVhciksIF0KdWRhamVTbG92YWtSZXB1YmxpYyRsb2dHRFAgPC0gbG9nKHVkYWplU2xvdmFrUmVwdWJsaWMkR0RQLi5pbi5VU0QuKQoKCgp1ZGFqZVNsb3Zha1JlcHVibGljCgpgYGAKCgojIyAyLiBMaW5lw6FybmEgcmVncmVzaWEgdiB6w6FrbGFkbm9tIHR2YXJlCgpWIHRlanRvIMSNYXN0aSBzbWUgdXJvYmlsaSB6w6FrbGFkbsO9IHJlZ3Jlc27DvSBtb2RlbCwga2RlIHNrw7ptYW1lLCDEjW8gb3ZwbHl2xYh1amUgbWllcnUgbmV6YW1lc3RuYW5vc3RpIG5hIFNsb3ZlbnNrdS4gRG8gbW9kZWx1IHNtZSBkYWxpIHBvZGllbCB6YW1lc3RuYW5vc3RpIHYgamVkbm90bGl2w71jaCBzZWt0b3JvY2ggYSBsb2dhcml0bXVzIEhEUCwga3RvcsO9IGxlcMWhaWUgemFjaHl0w6F2YSBla29ub21pY2vDvSByYXN0LgoKCmBgYHtyfQpsaWJyYXJ5KGdncGxvdDIpCgojIG3DtGogcmVncmVzbsO9IGxvZ2FyaXRtb3ZhbsO9IG1vZGVsCm1vZGVsX2xvZyA8LSBsbShVbmVtcGxveW1lbnQuUmF0ZSB+IAogICAgICAgICAgICAgICAgICBFbXBsb3ltZW50LlNlY3Rvci4uQWdyaWN1bHR1cmUgKwogICAgICAgICAgICAgICAgICBFbXBsb3ltZW50LlNlY3Rvci4uSW5kdXN0cnkgKwogICAgICAgICAgICAgICAgICBFbXBsb3ltZW50LlNlY3Rvci4uU2VydmljZXMgKwogICAgICAgICAgICAgICAgICBsb2dHRFAsCiAgICAgICAgICAgICAgICBkYXRhID0gdWRhamVTbG92YWtSZXB1YmxpYykKCnN1bW1hcnkobW9kZWxfbG9nKQoKYGBgClogdsO9c2xlZGtvdiB2ecWhbG8sIMW+ZSBwcmVtZW5uw6kgQWdyaWN1bHR1cmUsIEluZHVzdHJ5IGEgU2VydmljZXMgbmllIHPDuiDFoXRhdGlzdGlja3kgdsO9em5hbW7DqS4gVG8gem5hbWVuw6EsIMW+ZSBwb2TEvmEgdG9odG8gbW9kZWx1IG5ldmllbWUgcG90dnJkacWlLCDFvmUgdGlldG8gc2VrdG9yeSBtYWrDuiBwcmlhbXkgdnBseXYgbmEgbmV6YW1lc3RuYW5vc8WlLiBOYSBkcnVow7ogc3RyYW51LCBwcmVtZW5uw6EgbG9nR0RQIGplIHbDvXpuYW1uw6EgYSBqZWoga29lZmljaWVudCBqZSB6w6Fwb3Juw70sIHRha8W+ZSBrZcSPIEhEUCByYXN0aWUsIG5lemFtZXN0bmFub3PFpSBtw6EgdGVuZGVuY2l1IGtsZXNhxaUuCiBGLXRlc3QgdWthenVqZSwgxb5lIG1vZGVsIGplIGFrbyBjZWxvayB2w716bmFtbsO9LCB0YWvFvmUgZMOhdmEgem15c2VsIGhvIMSPYWxlaiBwb3XFvsOtdmHFpS4KCgojIyMgMy4gRGV0ZWtjaWEgYXV0b2tvcmVsw6FjaWUgCgojIyMjIEdyYWZpY2vDoSBpbmZvcm3DoWNpYQoKYGBge3J9CmxpYnJhcnkoZ2dwbG90MikKCnVkYWplU2xvdmFrUmVwdWJsaWMkZml0dGVkIDwtIGZpdHRlZChtb2RlbF9sb2cpCgpnZ3Bsb3QodWRhamVTbG92YWtSZXB1YmxpYywgYWVzKHggPSBZZWFyLCB5ID0gVW5lbXBsb3ltZW50LlJhdGUpKSArCiAgZ2VvbV9wb2ludChjb2xvciA9ICJzdGVlbGJsdWUiLCBzaXplID0gMykgKwogIGdlb21fbGluZShhZXMoeSA9IGZpdHRlZCksIGNvbG9yID0gInJlZCIsIHNpemUgPSAyKSArCiAgbGFicygKICAgIHRpdGxlID0gIlVuZW1wbG95bWVudCByYXRlIGluIFNsb3ZhayBSZXB1YmxpYzogRW1waXJpY2FsIChibHVlKSB2cy4gRml0dGVkIChyZWQpIiwKICAgIHggPSAiWWVhciIsCiAgICB5ID0gIlVuZW1wbG95bWVudCByYXRlICglKSIKICApICsKICB0aGVtZV9taW5pbWFsKCkKYGBgCgoKViBncmFmZSBwb3Jvdm7DoXZhbWUgcmXDoWxuZSBob2Rub3R5IG5lemFtZXN0bmFub3N0aSBzIGhvZG5vdGFtaSwga3RvcsOpIHByZWRwb3ZlZGFsIG1vZGVsLiBOYSBncmFmZSBtw7TFvmVtZSB2aWRpZcWlLCDFvmUgxI1lcnZlbsOhIMSNaWFyYSBuaWUgcHJlc25lIGxlbXVqZSBtb2Ryw6kgYm9keS4gVG90byBuYXpuYcSNdWplLCDFvmUgbW9kZWwgbmVtdXPDrSDDunBsbmUgemFjaHl0w6F2YcWlIMSNYXNvdsO9IHbDvXZvaiBuZXphbWVzdG5hbm9zdGkuCgpaw6Fyb3ZlxYggamUgbW/Fvm7DqSB2aWRpZcWlLCDFvmUgaG9kbm90eSBpZMO6IHYgxI1hc2Ug4oCedmxub3ZpdG/igJwsIMSNbyBtw7TFvmUgYnnFpSB6bmFrLCDFvmUgbWVkemkgcm9rbWkgZXhpc3R1amUgbmVqYWvDoSB6w6F2aXNsb3PFpS4gUHLDoXZlIHByZXRvIGJ1ZGVtZSDEj2FsZWogdGVzdG92YcWlLCDEjWkgdiBkw6F0YWNoIG5pZSBqZSBhdXRva29yZWzDoWNpYS4KCgoKCmBgYHtyfQojIHVsb3NpbWUgc2kgcmV6aWR1YSB6IHBvdm9kbmVobyBtb2RlbHUgLSBuYXp2YW5laG8gbW9kZWwKcmVzIDwtIHJlc2lkdWFscyhtb2RlbF9sb2cpCmBgYAoKIyMjIyBBQ0YgZ3JhZiAoQXV0b2NvcnJlbGF0aW9uIEZ1bmN0aW9uKQoKVMOhdG8gZnVua2NpYSBwcmlyYWR6dWplIG9kaGFkIGtvcmVsw6FjaWUsIGt0b3LDoSBqZSBtZWR6aSBqZWRub3RsaXbDvW1pIHJlesOtZHVhbWkgdiBha3R1w6Fsbm9tIG9iZG9iw60gYSBvYmRvYsOtIHBvc3VudXRvbSAoTGFnKSBvICRrJCBvYmRvYsOtIHNww6TFpS4KCmBgYHtyfQphY2YocmVzLCBsYWcubWF4ID0gNCxtYWluID0gIkF1dG9rb3JlbGHEjW7DoSBmdW5rY2lhIHJlesOtZHXDrSIpCmBgYAoKWiBBQ0YgZ3JhZnUgdmlkw61tZSwgxb5lIHJlemlkdcOhIG7DocWhaG8gbW9kZWx1IHPDuiB2w71yYXpuZSBhdXRva29yZWxvdmFuw6kuIEhvZG5vdGEgcHJpIGxhZyAxIGplIG5hZCBocmFuaWNvdSB2w716bmFtbm9zdGksIMSNbyB6bmFtZW7DoSwgxb5lIHJlemlkdcOhIHogamVkbsOpaG8gcm9rYSBzw7ogc2lsbmUgc3BvamVuw6kgcyByZXppZHVhbWkgeiBwcmVkY2jDoWR6YWrDumNlaG8gcm9rYS4gUG9kb2JuZSBhaiBsYWcgMiBhIGxhZyAzIHPDuiBzdMOhbGUgcmVsYXTDrXZuZSB2eXNva8OpLgoKVG90byBuYXpuYcSNdWplLCDFvmUgbW9kZWwgbmV6YWNoeXTDoXZhIMSNYXNvdsO6IHrDoXZpc2xvc8WlIHYgZMOhdGFjaCBhIHByYXZkZXBvZG9ibmUgdiDFiG9tIHZ6bmlrw6EgYXV0b2tvcmVsw6FjaWEsIGt0b3LDuiBtdXPDrW1lIMSPYWxlaiBvdGVzdG92YcWlIGFqIGZvcm3DoWxueW1pIMWhdGF0aXN0aWNrw71taSB0ZXN0YW1pLgoKCiMjIyMgRHVyYmlu4oCTV2F0c29ub3YgdGVzdApQcmkgRHVyYmlu4oCTV2F0c29ub3ZvbSB0ZXN0ZSBwcmFjdWplbWUgcyB0w71taXRvIGh5cG90w6l6YW1pOgoKLSAqKkjigoAgOioqIHYgcmV6aWR1w6FjaCBuaWUgamUgcHLDrXRvbW7DoSBhdXRva29yZWzDoWNpYSBwcnbDqWhvIHLDoWR1LiBDaHlieSBtZWR6aSByb2ttaSBzw7ogbsOhaG9kbsOpIGEgbmVzw7p2aXNpYSBzcG9sdS4KLSAqKkjigoEgOioqIHYgcmV6aWR1w6FjaCBqZSBwcsOtdG9tbsOhIGF1dG9rb3JlbMOhY2lhIHBydsOpaG8gcsOhZHUuIENoeWJ5IG1lZHppIHJva21pIHPDuiBuYXZ6w6Fqb20gesOhdmlzbMOpLgoKYGBge3J9CmxpYnJhcnkobG10ZXN0KQpkd3Rlc3QobW9kZWxfbG9nCiAgICAgICApCmBgYAoKVsO9c2xlZG9rIHRlc3R1IG7DoW0gdiBuYcWhb20gcHLDrXBhZGUgdWthenVqZSBob2Rub3R1IERXID0gMC41NDksIMSNbyBqZSB2w71yYXpuZSBuacW+xaFpZSBha28gaG9kbm90YSBva29sbyAyLCBrdG9yw6EgYnkgem5hbWVuYWxhIMW+aWFkbnUgYXV0b2tvcmVsw6FjaXUuIFAtaG9kbm90YSBqZSBleHRyw6ltbmUgbWFsw6EgKDkuMzY2ZS0wOSksIHRha8W+ZSBudWxvdsO6IGh5cG90w6l6dSB6YW1pZXRhbWUuIFogdG9obyB2eXBsw712YSwgxb5lIHYgbmHFoW9tIG1vZGVsaSBqZSBwcsOtdG9tbsOhIHBveml0w612bmEgYXV0b2tvcmVsw6FjaWEgcmV6w61kdcOtLgoKCgoKIyMjIyBCcmV1c2No4oCTR29kZnJleW92IHRlc3QgKEJHIHRlc3QpCgpEdXJiaW7igJNXYXRzb25vdiB0ZXN0IG7DoW0gdWvDoXphbCwgxb5lIHYgbmHFoW9tIG1vZGVsaSBqZSBwcm9ibMOpbSBzIGF1dG9rb3JlbMOhY2lvdS4gTmEgcG90dnJkZW5pZSB0b2h0byB2w71zbGVka3UgcG91xb5pamVtZSBCcmV1c2No4oCTR29kZnJleW92IHRlc3QsIGt0b3LDvSBqZSB2xaFlb2JlY25lasWhw60gYSB2aWUgemFjaHl0acWlIGFqIHZ5xaHFocOtIHLDoWQgYXV0b2tvcmVsw6FjaWUuCgpQcmkgQkcgdGVzdGUgcHJhY3VqZW1lIHMgdMO9bWl0byBoeXBvdMOpemFtaToKCi0gKipI4oKAIDoqKiB2IHJlemlkdcOhY2ggbsOhxaFobyBtb2RlbHUgbmllIGplIGF1dG9rb3JlbMOhY2lhIGRhbsOpaG8gcsOhZHUuIENoeWJ5IHPDuiBuw6Fob2Ruw6kgYSBtZWR6aSByb2ttaSBuaWUgc8O6IHN5c3RlbWF0aWNreSBwcmVwb2plbsOpLgotICoqSOKCgSA6KiogdiByZXppZHXDoWNoIGplIHByw610b21uw6EgYXV0b2tvcmVsw6FjaWEgZGFuw6lobyByw6FkdS4gQ2h5YnkgbWVkemkgcm9rbWkgc3BvbHUgc8O6dmlzaWEgYSBtb2RlbCBuZXphY2h5dMOhdmEgxI1hc292w70gcHJpZWJlaCDDunBsbmUgc3Byw6F2bmUuCgoKCmBgYHtyfQpiZ3Rlc3QobW9kZWxfbG9nLCBvcmRlciA9IDEpCmBgYAoKVGVzdCBuw6FtIHZ5xaFpZWwgcyBwLWhvZG5vdG91IDcuMTE0ZS0wNSwgxI1vIGplIG92ZcS+YSBtZW5laiBha28gaHJhbmljYSAwLDA1LiBQcmV0byBudWxvdsO6IGh5cG90w6l6dSB6YW1pZXRhbWUgYSBiZXJpZW1lIHRvIHRhaywgxb5lIHYgbmHFoW9tIG1vZGVsaSBqZSBwcsOtdG9tbsOhIGF1dG9rb3JlbMOhY2lhIHBydsOpaG8gcsOhZHUuCgpUZW50byB2w71zbGVkb2sgcG90dnJkenVqZSB0bywgxI1vIHNtZSB2aWRlbGkgYWogdiBBQ0YgZ3JhZmUgYSB2IER1cmJpbuKAk1dhdHNvbm92b20gdGVzdGUuIENoeWJ5IG1vZGVsdSBzYSB2IMSNYXNlIG9wYWt1asO6IGEgbmFkdsOkenVqw7ogbmEgc2ViYSwgdGFrxb5lIG1vZGVsIG5lemFjaHl0w6F2YSDEjWFzb3bDvSB2w712b2ogbmV6YW1lc3RuYW5vc3RpIMO6cGxuZSBzcHLDoXZuZS4gSWRlIG8gcHJvYmzDqW0gdiDFoXBlY2lmaWvDoWNpaSBtb2RlbHUsIG5pZSBvIHByb2Jsw6ltIHYgc2Ftb3Ruw71jaCBkw6F0YWNoLgoKCiMjIyBPZHN0cmHFiG92YW5pZSBwcm9ibMOpbXUgYXV0b2tvcmVsw6FjaWUgcmV6w61kdcOtIOKAkyBLb3lja292IG1vZGVsCgpLZcSPxb5lIG7DocWhIHDDtHZvZG7DvSBtb2RlbCBtYWwgcHJvYmzDqW0gcyBhdXRva29yZWzDoWNpb3UsIHBva8O6xaFhbWUgc2EgaG8gb2RzdHLDoW5pxaUgcHJpZGFuw61tIG9uZXNrb3JlbmVqIHrDoXZpc2xlaiBwcmVtZW5uZWouIElkZSBvIHR6di4gS295Y2tvdiBtb2RlbC4gRG8gbW9kZWx1IHNtZSBwcmlkYWxpIG5lemFtZXN0bmFub3PFpSB6IG1pbnVsw6lobyByb2thIChsYWcgMSksIGtlxI/FvmUgcHJlZHBva2xhZMOhbWUsIMW+ZSB2w712b2ogbmV6YW1lc3RuYW5vc3RpIHNhIG1lbsOtIHBvc3R1cG5lIGEgbcO0xb5lIGJ5xaUgb3ZwbHl2bmVuw70gaG9kbm90YW1pIHogcHJlZGNow6FkemFqw7pjZWhvIG9iZG9iaWEuCgpQbyBwcmlkYW7DrSB0ZWp0byBwcmVtZW5uZWogb2RoYWRuZW1lIG5vdsO9IG1vZGVsIGEgbsOhc2xlZG5lIHZ5a29uw6FtZSBEdXJiaW7igJNXYXRzb25vdiB0ZXN0LCBhYnkgc21lIHNrb250cm9sb3ZhbGksIMSNaSBhdXRva29yZWzDoWNpYSB6bWl6bGEuIEFrIGplIGhvZG5vdGEgRFcgYmxpxb7FoWllIGsgxI3DrXNsdSAyIGEgcC1ob2Rub3RhIGplIHbDpMSNxaFpYSBha28gMCwwNSwgem5hbWVuw6EgdG8sIMW+ZSBhdXRva29yZWzDoWNpdSBzYSBwb2RhcmlsbyBvZHN0csOhbmnFpS4KCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQoKdWRhamVTbG92YWtSZXB1YmxpYyA8LSB1ZGFqZVNsb3Zha1JlcHVibGljICU+JQogIGFycmFuZ2UoWWVhcikgJT4lCiAgbXV0YXRlKAogICAgVW5lbXBsb3ltZW50X2xhZzEgPSBsYWcoVW5lbXBsb3ltZW50LlJhdGUpCiAgKQoKYGBgCmBgYHtyfQptb2RlbF9rb3ljayA8LSBsbShVbmVtcGxveW1lbnQuUmF0ZSB+IAogICAgICAgICAgICAgICAgICAgIEVtcGxveW1lbnQuU2VjdG9yLi5BZ3JpY3VsdHVyZSArCiAgICAgICAgICAgICAgICAgICAgRW1wbG95bWVudC5TZWN0b3IuLkluZHVzdHJ5ICsKICAgICAgICAgICAgICAgICAgICBFbXBsb3ltZW50LlNlY3Rvci4uU2VydmljZXMgKwogICAgICAgICAgICAgICAgICAgIGxvZ0dEUCArCiAgICAgICAgICAgICAgICAgICAgVW5lbXBsb3ltZW50X2xhZzEsCiAgICAgICAgICAgICAgICAgIGRhdGEgPSB1ZGFqZVNsb3Zha1JlcHVibGljKQoKc3VtbWFyeShtb2RlbF9rb3ljaykKCmBgYAojIyMgVsO9c2xlZGt5IEtveWNrb3ZobyBtb2RlbHUKCktlxI8gc21lIGRvIG1vZGVsdSBwcmlkYWxpIG9uZXNrb3JlbsO6IG5lemFtZXN0bmFub3PFpSB6IG1pbnVsw6lobyByb2thLCB0YWsgc2EgdsO9c2xlZGt5IHpsZXDFoWlsaS4gUHJlbWVubsOhIFVuZW1wbG95bWVudF9sYWcxIHZ5xaFsYSB2ZcS+bWkgdsO9em5hbW7DoSwgxI1vIHpuYW1lbsOhLCDFvmUgbmV6YW1lc3RuYW5vc8WlIHogcHJlZGNow6FkemFqw7pjZWhvIHJva2Egc2lsbm8gb3ZwbHl2xYh1amUgbmV6YW1lc3RuYW5vc8WlIHYgYWt0dcOhbG5vbSByb2t1LiBUbyBkw6F2YSB6bXlzZWwsIGtlxI/FvmUgbmV6YW1lc3RuYW5vc8WlIHNhIHbDpMSNxaFpbm91IG5lbWVuw60gc2tva292bywgYWxlIHBvc3R1cG5lLgoKT3N0YXRuw6kgcHJlbWVubsOpIHXFviBuaWUgc8O6IHRha8OpIGTDtGxlxb5pdMOpIGFrbyBwcmVkdMO9bSwgcHJldG/FvmUgdmXEvmvDuiDEjWFzxaUgem1lbnkgdiBuZXphbWVzdG5hbm9zdGkgdnlzdmV0bMOtIHByw6F2ZSBob2Rub3RhIHogbWludWzDqWhvIHJva2EuIFTDvW0sIMW+ZSBzbWUgdMO6dG8gcHJlbWVubsO6IHByaWRhbGksIG1vZGVsIHNhIGxlcMWhaWUgdHJhZsOtIGRvIHRvaG8sIGFrbyBzYSBuZXphbWVzdG5hbm9zxaUgc3Byw6F2YSB2IMSNYXNlLgoKSG9kbm90YSBSwrIgc2EgenbDvcWhaWxhIG5hIHByaWJsacW+bmUgMC44OSwgxI1vIGplIHZlxL5taSBkb2Jyw6kuIFpuYW1lbsOhIHRvLCDFvmUgbsOhxaEgbm92w70gbW9kZWwgdcW+IHZpZSB2eXN2ZXRsacWlIHNrb3JvIGNlbMO6IHptZW51IHYgbmV6YW1lc3RuYW5vc3RpLiBDZWxrb3ZvIHRlbnRvIG1vZGVsIHDDtHNvYsOtIHN0YWJpbG5lasWhaWUgYSBwcmVzbmVqxaFpZSBuZcW+IHRlbiBww7R2b2Ruw70uCgoKIyMjIER1cmJpbuKAk1dhdHNvbm92IHRlc3QgcG8gb2RoYWRlIEtveWNrb3ZobyBtb2RlbHUKCk5hIG5vdm9tIG1vZGVsaSBzbWUgc3ByYXZpbGkgb3DDpMWlIER1cmJpbuKAk1dhdHNvbm92IHRlc3QsIGFieSBzbWUgemlzdGlsaSwgxI1pIHNhIGF1dG9rb3JlbMOhY2lhIHBvZGFyaWxhIG9kc3Ryw6FuacWlLiBWIG5hxaFvbSBwcsOtcGFkZSBzbWUgZG9zdGFsaSBob2Rub3R1IERXID0gMS4zNDY4LCDEjW8gamUgc8OtY2UgYmxpxb7FoWllIGsgaG9kbm90ZSAyIGFrbyBwcmVkdMO9bSwgYWxlIHN0w6FsZSB0byBuaWUgamUgw7pwbG5lIGlkZcOhbG5lLiBQLWhvZG5vdGEgamUgMC4wMDMsIHRha8W+ZSBudWxvdsO6IGh5cG90w6l6dSBvcMOkxaUgemFtaWV0YW1lLgoKVG8gem5hbWVuw6EsIMW+ZSBhaiBrZcSPIHNhIGF1dG9rb3JlbMOhY2lhIHpuw63FvmlsYSwgc3TDoWxlIHRhbSBqZSBhIG1vZGVsIGp1IMO6cGxuZSBuZW9kc3Ryw6FuaWwuIEtveWNrb3YgbW9kZWwgc8OtY2UgcG9tb2hvbCB6bGVwxaFpxaUgdsO9c2xlZGt5IGEgc3ByYXZpbCBtb2RlbCBwcmVzbmVqxaHDrSwgYWxlIGF1dG9rb3JlbMOhY2lhIHNhIG5lc3RyYXRpbGEgw7pwbG5lLgoKYGBge3J9CmR3dGVzdChtb2RlbF9rb3ljaykKCmBgYAoKTmEgbm92b20gbW9kZWxpIHNtZSBzcHJhdmlsaSBvcMOkxaUgRHVyYmlu4oCTV2F0c29ub3YgdGVzdCwgYWJ5IHNtZSB6aXN0aWxpLCDEjWkgc2EgYXV0b2tvcmVsw6FjaWEgcG9kYXJpbGEgb2RzdHLDoW5pxaUuIFYgbmHFoW9tIHByw61wYWRlIHNtZSBkb3N0YWxpIGhvZG5vdHUgRFcgPSAxLjM0NjgsIMSNbyBqZSBzw61jZSBibGnFvsWhaWUgayBob2Rub3RlIDIgYWtvIHByZWR0w71tLCBhbGUgc3TDoWxlIHRvIG5pZSBqZSDDunBsbmUgaWRlw6FsbmUuIFAtaG9kbm90YSBqZSAwLjAwMywgdGFrxb5lIG51bG92w7ogaHlwb3TDqXp1IG9ww6TFpSB6YW1pZXRhbWUuCgpLb3lja292IG1vZGVsIHPDrWNlIHBvbW9ob2wgemxlcMWhacWlIHbDvXNsZWRreSBhIHNwcmF2aWwgbW9kZWwgcHJlc25lasWhw60sIGFsZSBhdXRva29yZWzDoWNpYSBzYSBuZXN0cmF0aWxhIMO6cGxuZS4KCiMjIyMgTmV3ZXnigJNXZXN0IHJvYnVzdG7DqSDFoXRhbmRhcmRuw6kgY2h5YnkKCktlxI/FvmUgbsOhxaEgbW9kZWwgbcOhIHByb2Jsw6lteSBzIGF1dG9rb3JlbMOhY2lvdSBhIG5pZWt0b3LDqSBwcmVkcG9rbGFkeSBrbGFzaWNrZWogcmVncmVzaWUgbmllIHPDuiBzcGxuZW7DqSwgcG91xb5pbGkgc21lIHR6di4gcm9idXN0bsOpIHNtZXJvZGFqbsOpIGNoeWJ5LiBUaWUgbmVtZW5pYSBzYW1vdG7DqSBrb2VmaWNpZW50eSwgYWxlIHVwcmF2dWrDuiBpY2ggc21lcm9kYWpuw6kgY2h5YnkgdGFrLCBhYnkgYm9saSB2w71zbGVka3kgc3BvxL5haGxpdmVqxaFpZSBhaiB2dGVkeSwga2XEjyBzYSBtb2RlbCBuZXNwcsOhdmEgw7pwbG5lIGlkZcOhbG5lLgoKCmBgYHtyfQpjb2VmdGVzdChtb2RlbF9rb3ljaywgdmNvdiA9IHZjb3ZIQyhtb2RlbF9rb3ljaywgdHlwZSA9ICJIQzMiKSkKCmBgYAojIyMgVsO9c2xlZGt5IHBvIHBvdcW+aXTDrSByb2J1c3Ruw71jaCBzbWVyb2Rham7DvWNoIGNow71iCgpQbyBwb3XFvml0w60gcm9idXN0bsO9Y2ggc21lcm9kYWpuw71jaCBjaMO9YiBzYSB1a8OhemFsbywgxb5lIG7DocWhIG1vZGVsIGplIHN0YWJpbG5lasWhw60gYSB2w71zbGVka3kgc8O6IHNwb8S+YWhsaXZlasWhaWUuIFYgcG9yb3ZuYW7DrSBzIHByZWRjaMOhZHphasO6Y2ltaSB2w71zbGVka2FtaSB2aWTDrW1lLCDFvmUgb25lc2tvcmVuw6EgbmV6YW1lc3RuYW5vc8WlIChVbmVtcGxveW1lbnRfbGFnMSkgem9zdMOhdmEgdsO9cmF6bmUgdsO9em5hbW7DoSwgdGFrxb5lIG5hb3phaiBwbGF0w60sIMW+ZSBuZXphbWVzdG5hbm9zxaUgeiBtaW51bMOpaG8gcm9rYSBzaWxubyBvdnBseXbFiHVqZSB0w7ogYWt0dcOhbG51LgoKWmF1asOtbWF2w6kgamUsIMW+ZSBwbyDDunByYXZlIHNhIHbDvXpuYW1uw71taSBzdGFsaSBhaiBwcmVtZW5uw6kgQWdyaWN1bHR1cmUsIEluZHVzdHJ5IGEgU2VydmljZXMuIFbFoWV0a3kgdHJpIG1hasO6IHZlxL5taSBwb2RvYm7DqSBrb2VmaWNpZW50eSBhaiBwLWhvZG5vdHkuIFpuYW1lbsOhIHRvLCDFvmUgdGlldG8gcHJlbWVubsOpIG1hasO6IHVyxI1pdMO9IHZwbHl2IG5hIG5lemFtZXN0bmFub3PFpSwgYWxlIHRlbnRvIHZwbHl2IHNtZSB2aWRlbGkgYcW+IHBvIHRvbSwgxI1vIGJvbGkgY2h5Ynkg4oCeb3ByYXZlbsOp4oCcIHJvYnVzdG7DvW0gcHLDrXN0dXBvbS4KClByZW1lbm7DoSBsb2dHRFAgem9zdGFsYSBuZXbDvXpuYW1uw6EsIHRha8W+ZSBIRFAgc2Ftb3Ruw6kgbmVtw6EgdiBuYcWhb20gbW9kZWxpIGHFviB0YWvDvSB2ZcS+a8O9IHZwbHl2LCBrZcSPIHXFviBiZXJpZW1lIGRvIMO6dmFoeSBvbmVza29yZW7DuiBuZXphbWVzdG5hbm9zxaUuCgpDZWxrb3ZvIG3DtMW+ZW1lIHBvdmVkYcWlLCDFvmUgcm9idXN0bsOpIHNtZXJvZGFqbsOpIGNoeWJ5IG7DoW0gcG9tb2hsaSB6w61za2HFpSBwcmVzbmVqxaHDrSBvYnJheiBvIHRvbSwga3RvcsOpIHByZW1lbm7DqSBzw7ogc2t1dG/EjW5lIGTDtGxlxb5pdMOpLCBhaiBrZcSPIG1vZGVsIG5lbcOhIMO6cGxuZSBpZGXDoWxuZSB2bGFzdG5vc3RpLgoKIyMjIFpocm51dGllCgpWIG5hxaFlaiBhbmFsw716ZSBzbWUgbmFqc2vDtHIgb2RoYWRsaSB6w6FrbGFkbsO9IHJlZ3Jlc27DvSBtb2RlbCwgYWJ5IHNtZSB6aXN0aWxpLCDEjW8gb3ZwbHl2xYh1amUgbWllcnUgbmV6YW1lc3RuYW5vc3RpIG5hIFNsb3ZlbnNrdS4gUMO0dm9kbsO9IG1vZGVsIG1hbCB2xaFhayBwcm9ibMOpbXkgcyBhdXRva29yZWzDoWNpb3UsIMSNbyBzbWUgdmlkZWxpIHYgQUNGIGdyYWZlIGEgcG90dnJkaWxpIHBvbW9jb3UgRHVyYmlu4oCTV2F0c29ub3ZobyBhIEJyZXVzY2jigJNHb2RmcmV5b3ZobyB0ZXN0dS4gVG8gem5hbWVuYWxvLCDFvmUgbW9kZWwgbmV6YWNoeXTDoXZhbCDEjWFzb3bDvSB2w712b2ogZG9zdGF0b8SNbmUgZG9icmUgYSBjaHlieSBzYSB2IMSNYXNlIG9wYWtvdmFsaS4KClByZXRvIHNtZSB2eXNrw7rFoWFsaSBLb3lja292IG1vZGVsLCBrZGUgc21lIHByaWRhbGkgbmV6YW1lc3RuYW5vc8WlIHogcHJlZGNow6FkemFqw7pjZWhvIHJva2EuIFRlbnRvIGtyb2sgdsO9cmF6bmUgemxlcMWhaWwga3ZhbGl0dSBtb2RlbHUgYSB6dsO9xaFpbCBSwrIsIHRha8W+ZSBtb2RlbCBkb2vDoXphbCB2eXN2ZXRsacWlIG92ZcS+YSB2w6TEjcWhaXUgxI1hc8WlIHptaWVuIHYgbmV6YW1lc3RuYW5vc3RpLiBBdXRva29yZWzDoWNpYSBzYSBzw61jZSB6bsOtxb5pbGEsIGFsZSDDunBsbmUgbmV6bWl6bGEuCgpOYWtvbmllYyBzbWUgcG91xb5pbGkgcm9idXN0bsOpIHNtZXJvZGFqbsOpIGNoeWJ5LCBrdG9yw6kgdXByYXZ1asO6IHbDvXNsZWRreSB0YWssIGFieSBib2xpIHNwb8S+YWhsaXZlasWhaWUgYWogdnRlZHksIGtlxI8gbW9kZWwgbmllIGplIMO6cGxuZSBpZGXDoWxueS4gUG8gdGVqdG8gw7pwcmF2ZSBzYSB1a8OhemFsbywga3RvcsOpIHByZW1lbm7DqSBzw7ogbmFvemFqIGTDtGxlxb5pdMOpIGEgdsO9c2xlZGt5IHDDtHNvYmlsaSBzdGFiaWxuZWrFoWllLgoKQ2Vsa292byBtw7TFvmVtZSBwb3ZlZGHFpSwgxb5lIG7DocWhIG1vZGVsIHBvIMO6cHJhdsOhY2ggbGVwxaFpZSB6YWNoeXTDoXZhIHbDvXZvaiBuZXphbWVzdG5hbm9zdGkgdiDEjWFzZS4gU3TDoWxlIHbFoWFrIHBsYXTDrSwgxb5lIMSNYXNvdsOpIHJhZHkgc8O6IMWhcGVjaWZpY2vDqSBhIMSNYXN0byBzaSB2ecW+YWR1asO6IHBva3JvxI1pbGVqxaFpZSBtb2RlbHksIGFieSBzbWUgw7pwbG5lIG9kc3Ryw6FuaWxpIGF1dG9rb3JlbMOhY2l1Lgo=