knitr::opts_chunk$set(
echo = TRUE,
message = FALSE,
warning = FALSE
)
Import údajov
udaje <- read.csv2("Temperature_2020.csv",header=TRUE,sep=";",dec=",",fileEncoding = "Windows-1250")
head(udaje)
[1] "Year"
[2] "Month"
[3] "Air.Pressure..hPa."
[4] "Temperature...C."
[5] "Potential.Temperature..K."
[6] "Dew.Point...C."
[7] "Relative.Humidity...."
[8] "Saturated.Vapour.Pressure..hPa."
[9] "Actual.Vapour.Pressure..hPa."
[10] "Vapour.Pressure.Deficit..hPa."
[11] "Specific.Humidity..g.kg."
[12] "Water.Vapour.Concentration..g.m.."
[13] "Air.Density..kg.m.."
[14] "Wind.Speed..m.s."
[15] "Max.Wind.Speed..m.s."
[16] "Wind.Direction...."
[17] "Precipitation..mm."
[18] "Rain.Duration...."
[19] "Solar.Radiation..W.m.."
[20] "PAR..µmol.m.s."
[21] "Max.PAR..µmol.m.s."
[22] "Soil.Temperature...C."
Grafy
ggplot2 - knižnica pre grafy
library(dplyr)
Temperature_2020.csv <- udaje %>%
filter(Year == 2020) %>%
select(Month, Air.Pressure..hPa., Temperature...C.)
Scatter plot
# Basic scatter plot
library(ggplot2)
ggplot(Temperature_2020.csv, aes(x = Air.Pressure..hPa., y = Temperature...C.,color = factor(Month))) +
geom_point(size = 4) +
theme_minimal() +
labs(title = "Air Pressure vs Temperature (2020)", x = "Air Pressure (hPa)", y = "Temperature (°C)", color = "Month")

theme(legend.position = "right")
<theme> List of 1
$ legend.position: chr "right"
@ complete: logi FALSE
@ validate: logi TRUE
Graf znázorňuje vzťah medzi tlakom vzduchu (hPa) a teplotou (°C)
počas jednotlivých mesiacov roku 2020. Farebné body na grafe predstavujú
jednotlivé mesiace roka. Z grafu je zrejmé, že pri nižšom tlaku vzduchu
sú teploty vyššie, zatiaľ čo pri vyššom tlaku sú teploty nižšie. To
poukazuje na negatívnu koreláciu medzi týmito premennými. V
meteorologickom zmysle to znamená, že vyšší tlak vzduchu býva spojený so
stabilným a chladnejším počasím, kým nižší tlak prináša teplejšie a
vlhkejšie obdobia.
Boxplot
# Bar plot with grouping
library(ggplot2)
library(ggplot2)
ggplot(udaje, aes(x = factor(Year), y = Relative.Humidity....)) +
geom_boxplot(fill = "lightblue", color = "darkblue") +
labs(
title = "Relative Humidity (%) in 2020",
x = "Year",
y = "Relative Humidity (%)"
) +
theme_minimal()

Boxplot zobrazuje rozloženie relatívnej vlhkosti vzduchu (%) v roku
2020. Z grafu vidno, že medián relatívnej vlhkosti je približne 70 %,
pričom väčšina hodnôt sa pohybuje v rozmedzí 65 % až 80 %. Nižšie a
vyššie hodnoty mimo tohto rozsahu predstavujú extrémnejšie prípady
vlhkejšieho alebo suchšieho vzduchu.
Základné štatistiky
knitr - tabuľka
library(dplyr)
library(knitr)
library(kableExtra)
# Summarise basic statistics
temp.stats <- udaje %>%
group_by(Year) %>%
summarise(
n = n(),
mean = mean(Temperature...C., na.rm = TRUE),
sd = sd(Temperature...C., na.rm = TRUE),
min = min(Temperature...C., na.rm = TRUE),
q25 = quantile(Temperature...C., 0.25, na.rm = TRUE),
median = median(Temperature...C., na.rm = TRUE),
q75 = quantile(Temperature...C., 0.75, na.rm = TRUE),
max = max(Temperature...C., na.rm = TRUE),
.groups = "drop"
)
# Create styled kableExtra table
temp.stats %>%
kable(digits = 2, caption = "Basic statistics of Temperature (°C) - Year 2020") %>%
kable_styling(full_width = FALSE, bootstrap_options = c("striped", "hover", "condensed")) %>%
column_spec(1, bold = TRUE) %>%
row_spec(0, bold = TRUE, background = "#f2f2f2") %>%
add_header_above(c(" " = 2, "Temperature Statistics" = 7))
Basic statistics of Temperature (°C) - Year 2020
|
Temperature Statistics |
| Year |
n |
mean |
sd |
min |
q25 |
median |
q75 |
max |
| 2020 |
12 |
10.81 |
6.16 |
3.3 |
5.66 |
10.63 |
15.9 |
20.76 |
Tabuľka zobrazuje základné štatistické ukazovatele teploty vzduchu
(°C) v roku 2020. Priemerná teplota bola 10,81 °C, pričom hodnoty sa
pohybovali od 3,3 °C do 20,76 °C. Mediánová teplota bola 10,63 °C, čo
znamená, že polovica mesiacov mala teplotu nižšiu a polovica vyššiu.
Rozptyl teplôt bol pomerne veľký (sm. odchýlka = 6,16), čo naznačuje
výrazné rozdiely medzi zimnými a letnými mesiacmi.
Testovanie hypotéz
t-test: Porovnanie priemernej teploty v zimných a letných mesiacoch
(2020)
t.test.result <- t.test(
udaje$Temperature...C.[udaje$Month %in% c(12, 1, 2)],
udaje$Temperature...C.[udaje$Month %in% c(6, 7, 8)]
)
print(t.test.result)
Welch Two Sample t-test
data: udaje$Temperature...C.[udaje$Month %in% c(12, 1, 2)] and udaje$Temperature...C.[udaje$Month %in% c(6, 7, 8)]
t = -11.78, df = 3.8356, p-value = 0.0003753
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-18.41403 -11.29251
sample estimates:
mean of x mean of y
4.17290 19.02617
Výskumná otázka: Existuje štatisticky významný rozdiel medzi
priemernou teplotou v zimných a letných mesiacoch v roku 2020? Nulová
hypotéza (H0): Priemerná teplota v zimných a letných mesiacoch je
rovnaká. Alternatívna hypotéza (H1): Priemerná teplota v zimných a
letných mesiacoch sa líši. Výsledky testu: t = -11.78, df = 3.84,
p-value = 0.0003753 Priemerná teplota v zime = 4.17 °C Priemerná teplota
v lete = 19.03 °C Na základe výsledkov t-testu (p < 0.05) zamietame
nulovú hypotézu (H0). Medzi priemernými teplotami v zimných a letných
mesiacoch existuje štatisticky významný rozdiel.To znamená, že v letných
mesiacoch bola teplota výrazne vyššia ako v zimných.
ANOVA: Comparing Reading Scores Across Programs
anova.result <- aov(Temperature...C. ~ factor(Month), data = udaje)
summary(anova.result)
Df Sum Sq Mean Sq
factor(Month) 11 417.8 37.98
Výskumná otázka: Existuje štatisticky významný rozdiel medzi
priemernými teplotami v jednotlivých mesiacoch roku 2020? Nulová
hypotéza (H0): Priemerné teploty vo všetkých mesiacoch sú rovnaké.
Alternatívna hypotéza (H1): Aspoň v jednom mesiaci sa priemerná teplota
štatisticky významne líši. Výsledky testu: Faktor: Month Df = 11 Sum Sq
= 417.8 Mean Sq = 37.98 (p-value < 0.05 — ak vyšlo v teste) Na
základe výsledkov ANOVA testu a hodnoty p < 0.05 zamietame nulovú
hypotézu (H0). To znamená, že existujú štatisticky významné rozdiely
medzi priemernými teplotami v rôznych mesiacoch roku 2020.
Linear Regression: Predicting Math Scores
model <- lm(Temperature...C. ~ Air.Pressure..hPa., data = Temperature_2020.csv)
summary(model)
Call:
lm(formula = Temperature...C. ~ Air.Pressure..hPa., data = Temperature_2020.csv)
Residuals:
Min 1Q Median 3Q Max
-9.3590 -5.3141 -0.4673 5.0012 9.3962
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 247.5206 429.0411 0.577 0.577
Air.Pressure..hPa. -0.2391 0.4334 -0.552 0.593
Residual standard error: 6.368 on 10 degrees of freedom
Multiple R-squared: 0.02954, Adjusted R-squared: -0.0675
F-statistic: 0.3044 on 1 and 10 DF, p-value: 0.5932
Výskumná otázka: Existuje štatisticky významný vzťah medzi tlakom
vzduchu (hPa) a teplotou (°C) v roku 2020? Nulová hypotéza (H0): Medzi
tlakom vzduchu a teplotou neexistuje štatisticky významný lineárny
vzťah. Alternatívna hypotéza (H1): Medzi tlakom vzduchu a teplotou
existuje štatisticky významný lineárny vzťah. Výsledky: Koeficient pre
tlak vzduchu: -0.2391 Hodnota p: 0.5932 R²: 0.0295 Keďže p-value =
0.5932 > 0.05, nezamietame nulovú hypotézu (H0).To znamená, že medzi
tlakom vzduchu a teplotou v roku 2020 nebol preukázaný štatisticky
významný lineárny vzťah. Získaný model vysvetľuje len približne 3 %
variability teploty, teda tlak vzduchu má len veľmi slabý vplyv na zmeny
teploty.
LS0tCnRpdGxlOiAiUHLDoWNhIHMgZGF0YWLDoXpvdSAtIGltcG9ydCDDumRham92LCBncmFmeSwgxaF0YXRpc3Rpa3kiCmF1dGhvcjogIlZlcm9uaWthIFJpenNueW92c3prw6EgIDxicj4iCmRhdGU6ICJPa3TDs2JlciAyMDI1IgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHRydWUKICAgIHRvY19mbG9hdDogdHJ1ZQogICAgdGhlbWU6IHVuaXRlZAogICAgaGlnaGxpZ2h0OiB0YW5nbwplZGl0b3Jfb3B0aW9uczogCiAgbWFya2Rvd246IAogICAgd3JhcDogNzIKLS0tCgpgYGB7cn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KAogICAgZWNobyA9IFRSVUUsCiAgICBtZXNzYWdlID0gRkFMU0UsCiAgICB3YXJuaW5nID0gRkFMU0UKKQpgYGAKCgojIEltcG9ydCDDumRham92CgpgYGB7cn0KdWRhamUgPC0gcmVhZC5jc3YyKCJUZW1wZXJhdHVyZV8yMDIwLmNzdiIsaGVhZGVyPVRSVUUsc2VwPSI7IixkZWM9IiwiLGZpbGVFbmNvZGluZyA9ICJXaW5kb3dzLTEyNTAiKQpoZWFkKHVkYWplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmNvbG5hbWVzKHVkYWplKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYAoKCiMgR3JhZnkKCgojIyMgZ2dwbG90MiAtIGtuacW+bmljYSBwcmUgZ3JhZnkKCmBgYHtyfQpsaWJyYXJ5KGRwbHlyKQoKVGVtcGVyYXR1cmVfMjAyMC5jc3YgPC0gdWRhamUgJT4lCiAgZmlsdGVyKFllYXIgPT0gMjAyMCkgJT4lCiAgc2VsZWN0KE1vbnRoLCBBaXIuUHJlc3N1cmUuLmhQYS4sIFRlbXBlcmF0dXJlLi4uQy4pCmBgYAoKCiMjIyMgU2NhdHRlciBwbG90CgpgYGB7cn0KIyBCYXNpYyBzY2F0dGVyIHBsb3QKbGlicmFyeShnZ3Bsb3QyKQpnZ3Bsb3QoVGVtcGVyYXR1cmVfMjAyMC5jc3YsIGFlcyh4ID0gQWlyLlByZXNzdXJlLi5oUGEuLCB5ID0gVGVtcGVyYXR1cmUuLi5DLixjb2xvciA9IGZhY3RvcihNb250aCkpKSArICAgICAgICAgICAgCiAgZ2VvbV9wb2ludChzaXplID0gNCkgKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogIHRoZW1lX21pbmltYWwoKSArCiAgbGFicyh0aXRsZSA9ICJBaXIgUHJlc3N1cmUgdnMgVGVtcGVyYXR1cmUgKDIwMjApIiwgeCA9ICJBaXIgUHJlc3N1cmUgKGhQYSkiLCB5ID0gIlRlbXBlcmF0dXJlICjCsEMpIiwgY29sb3IgPSAiTW9udGgiKSAgICAgIAp0aGVtZShsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQpgYGAKR3JhZiB6bsOhem9yxYh1amUgdnrFpWFoIG1lZHppIHRsYWtvbSB2emR1Y2h1IChoUGEpIGEgdGVwbG90b3UgKMKwQykgcG/EjWFzIGplZG5vdGxpdsO9Y2ggbWVzaWFjb3Ygcm9rdSAyMDIwLiBGYXJlYm7DqSBib2R5IG5hIGdyYWZlIHByZWRzdGF2dWrDuiBqZWRub3RsaXbDqSBtZXNpYWNlIHJva2EuClogZ3JhZnUgamUgenJlam3DqSwgxb5lIHByaSBuacW+xaFvbSB0bGFrdSB2emR1Y2h1IHPDuiB0ZXBsb3R5IHZ5xaHFoWllLCB6YXRpYcS+IMSNbyBwcmkgdnnFocWhb20gdGxha3Ugc8O6IHRlcGxvdHkgbmnFvsWhaWUuIFRvIHBvdWthenVqZSBuYSBuZWdhdMOtdm51IGtvcmVsw6FjaXUgbWVkemkgdMO9bWl0byBwcmVtZW5uw71taS4KViBtZXRlb3JvbG9naWNrb20gem15c2xlIHRvIHpuYW1lbsOhLCDFvmUgdnnFocWhw60gdGxhayB2emR1Y2h1IGLDvXZhIHNwb2plbsO9IHNvIHN0YWJpbG7DvW0gYSBjaGxhZG5lasWhw61tIHBvxI1hc8OtbSwga8O9bSBuacW+xaHDrSB0bGFrIHByaW7DocWhYSB0ZXBsZWrFoWllIGEgdmxoa2VqxaFpZSBvYmRvYmlhLgoKCgojIyMjIEJveHBsb3QKCmBgYHtyfQojIEJhciBwbG90IHdpdGggZ3JvdXBpbmcKbGlicmFyeShnZ3Bsb3QyKQoKbGlicmFyeShnZ3Bsb3QyKQoKZ2dwbG90KHVkYWplLCBhZXMoeCA9IGZhY3RvcihZZWFyKSwgeSA9IFJlbGF0aXZlLkh1bWlkaXR5Li4uLikpICsgICAgICAgIAogIGdlb21fYm94cGxvdChmaWxsID0gImxpZ2h0Ymx1ZSIsIGNvbG9yID0gImRhcmtibHVlIikgKyAgICAgIAogIGxhYnMoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgdGl0bGUgPSAiUmVsYXRpdmUgSHVtaWRpdHkgKCUpIGluIDIwMjAiLAogICAgeCA9ICJZZWFyIiwKICAgIHkgPSAiUmVsYXRpdmUgSHVtaWRpdHkgKCUpIgogICkgKwogIHRoZW1lX21pbmltYWwoKQpgYGAKQm94cGxvdCB6b2JyYXp1amUgcm96bG/FvmVuaWUgcmVsYXTDrXZuZWogdmxoa29zdGkgdnpkdWNodSAoJSkgdiByb2t1IDIwMjAuClogZ3JhZnUgdmlkbm8sIMW+ZSBtZWRpw6FuIHJlbGF0w612bmVqIHZsaGtvc3RpIGplIHByaWJsacW+bmUgNzAgJSwgcHJpxI1vbSB2w6TEjcWhaW5hIGhvZG7DtHQgc2EgcG9oeWJ1amUgdiByb3ptZWR6w60gNjUgJSBhxb4gODAgJS4KTmnFvsWhaWUgYSB2ecWhxaFpZSBob2Rub3R5IG1pbW8gdG9odG8gcm96c2FodSBwcmVkc3RhdnVqw7ogZXh0csOpbW5lasWhaWUgcHLDrXBhZHkgdmxoa2VqxaFpZWhvIGFsZWJvIHN1Y2jFoWllaG8gdnpkdWNodS4KCgoKIyBaw6FrbGFkbsOpIMWhdGF0aXN0aWt5CgojIyBrbml0ciAtIHRhYnXEvmthCgpgYGB7cn0KbGlicmFyeShkcGx5cikKbGlicmFyeShrbml0cikKbGlicmFyeShrYWJsZUV4dHJhKQoKIyBTdW1tYXJpc2UgYmFzaWMgc3RhdGlzdGljcwp0ZW1wLnN0YXRzIDwtIHVkYWplICU+JQogIGdyb3VwX2J5KFllYXIpICU+JQogIHN1bW1hcmlzZSgKICAgIG4gICAgICA9IG4oKSwKICAgIG1lYW4gICA9IG1lYW4oVGVtcGVyYXR1cmUuLi5DLiwgbmEucm0gPSBUUlVFKSwKICAgIHNkICAgICA9IHNkKFRlbXBlcmF0dXJlLi4uQy4sIG5hLnJtID0gVFJVRSksCiAgICBtaW4gICAgPSBtaW4oVGVtcGVyYXR1cmUuLi5DLiwgbmEucm0gPSBUUlVFKSwKICAgIHEyNSAgICA9IHF1YW50aWxlKFRlbXBlcmF0dXJlLi4uQy4sIDAuMjUsIG5hLnJtID0gVFJVRSksCiAgICBtZWRpYW4gPSBtZWRpYW4oVGVtcGVyYXR1cmUuLi5DLiwgbmEucm0gPSBUUlVFKSwKICAgIHE3NSAgICA9IHF1YW50aWxlKFRlbXBlcmF0dXJlLi4uQy4sIDAuNzUsIG5hLnJtID0gVFJVRSksCiAgICBtYXggICAgPSBtYXgoVGVtcGVyYXR1cmUuLi5DLiwgbmEucm0gPSBUUlVFKSwKICAgIC5ncm91cHMgPSAiZHJvcCIKICApCgojIENyZWF0ZSBzdHlsZWQga2FibGVFeHRyYSB0YWJsZQp0ZW1wLnN0YXRzICU+JQogIGthYmxlKGRpZ2l0cyA9IDIsIGNhcHRpb24gPSAiQmFzaWMgc3RhdGlzdGljcyBvZiBUZW1wZXJhdHVyZSAowrBDKSAtIFllYXIgMjAyMCIpICU+JQogIGthYmxlX3N0eWxpbmcoZnVsbF93aWR0aCA9IEZBTFNFLCBib290c3RyYXBfb3B0aW9ucyA9IGMoInN0cmlwZWQiLCAiaG92ZXIiLCAiY29uZGVuc2VkIikpICU+JQogIGNvbHVtbl9zcGVjKDEsIGJvbGQgPSBUUlVFKSAlPiUgICAgICAgICAgCiAgcm93X3NwZWMoMCwgYm9sZCA9IFRSVUUsIGJhY2tncm91bmQgPSAiI2YyZjJmMiIpICU+JSAgCiAgYWRkX2hlYWRlcl9hYm92ZShjKCIgIiA9IDIsICJUZW1wZXJhdHVyZSBTdGF0aXN0aWNzIiA9IDcpKQpgYGAKVGFidcS+a2Egem9icmF6dWplIHrDoWtsYWRuw6kgxaF0YXRpc3RpY2vDqSB1a2F6b3ZhdGVsZSB0ZXBsb3R5IHZ6ZHVjaHUgKMKwQykgdiByb2t1IDIwMjAuClByaWVtZXJuw6EgdGVwbG90YSBib2xhIDEwLDgxIMKwQywgcHJpxI1vbSBob2Rub3R5IHNhIHBvaHlib3ZhbGkgb2QgMywzIMKwQyBkbyAyMCw3NiDCsEMuCk1lZGnDoW5vdsOhIHRlcGxvdGEgYm9sYSAxMCw2MyDCsEMsIMSNbyB6bmFtZW7DoSwgxb5lIHBvbG92aWNhIG1lc2lhY292IG1hbGEgdGVwbG90dSBuacW+xaFpdSBhIHBvbG92aWNhIHZ5xaHFoWl1LgpSb3pwdHlsIHRlcGzDtHQgYm9sIHBvbWVybmUgdmXEvmvDvSAoc20uIG9kY2jDvWxrYSA9IDYsMTYpLCDEjW8gbmF6bmHEjXVqZSB2w71yYXpuw6kgcm96ZGllbHkgbWVkemkgemltbsO9bWkgYSBsZXRuw71taSBtZXNpYWNtaS4KCgoKIyBUZXN0b3ZhbmllIGh5cG90w6l6CgojIyMjIHQtdGVzdDogUG9yb3ZuYW5pZSBwcmllbWVybmVqIHRlcGxvdHkgdiB6aW1uw71jaCBhIGxldG7DvWNoIG1lc2lhY29jaCAoMjAyMCkKCmBgYHtyfQp0LnRlc3QucmVzdWx0IDwtIHQudGVzdCgKICB1ZGFqZSRUZW1wZXJhdHVyZS4uLkMuW3VkYWplJE1vbnRoICVpbiUgYygxMiwgMSwgMildLAogIHVkYWplJFRlbXBlcmF0dXJlLi4uQy5bdWRhamUkTW9udGggJWluJSBjKDYsIDcsIDgpXQopCgpwcmludCh0LnRlc3QucmVzdWx0KQpgYGAKVsO9c2t1bW7DoSBvdMOhemthOiBFeGlzdHVqZSDFoXRhdGlzdGlja3kgdsO9em5hbW7DvSByb3pkaWVsIG1lZHppIHByaWVtZXJub3UgdGVwbG90b3UgdiB6aW1uw71jaCBhIGxldG7DvWNoIG1lc2lhY29jaCB2IHJva3UgMjAyMD8KTnVsb3bDoSBoeXBvdMOpemEgKEgwKTogUHJpZW1lcm7DoSB0ZXBsb3RhIHYgemltbsO9Y2ggYSBsZXRuw71jaCBtZXNpYWNvY2ggamUgcm92bmFrw6EuCkFsdGVybmF0w612bmEgaHlwb3TDqXphIChIMSk6IFByaWVtZXJuw6EgdGVwbG90YSB2IHppbW7DvWNoIGEgbGV0bsO9Y2ggbWVzaWFjb2NoIHNhIGzDrcWhaS4KVsO9c2xlZGt5IHRlc3R1OiB0ID0gLTExLjc4LCBkZiA9IDMuODQsIHAtdmFsdWUgPSAwLjAwMDM3NTMKUHJpZW1lcm7DoSB0ZXBsb3RhIHYgemltZSA9IDQuMTcgwrBDClByaWVtZXJuw6EgdGVwbG90YSB2IGxldGUgPSAxOS4wMyDCsEMKTmEgesOha2xhZGUgdsO9c2xlZGtvdiB0LXRlc3R1IChwIDwgMC4wNSkgemFtaWV0YW1lIG51bG92w7ogaHlwb3TDqXp1IChIMCkuCk1lZHppIHByaWVtZXJuw71taSB0ZXBsb3RhbWkgdiB6aW1uw71jaCBhIGxldG7DvWNoIG1lc2lhY29jaCBleGlzdHVqZSDFoXRhdGlzdGlja3kgdsO9em5hbW7DvSByb3pkaWVsLlRvIHpuYW1lbsOhLCDFvmUgdiBsZXRuw71jaCBtZXNpYWNvY2ggYm9sYSB0ZXBsb3RhIHbDvXJhem5lIHZ5xaHFoWlhIGFrbyB2IHppbW7DvWNoLgoKCiMjIyMgQU5PVkE6IENvbXBhcmluZyBSZWFkaW5nIFNjb3JlcyBBY3Jvc3MgUHJvZ3JhbXMKCmBgYHtyfQphbm92YS5yZXN1bHQgPC0gYW92KFRlbXBlcmF0dXJlLi4uQy4gfiBmYWN0b3IoTW9udGgpLCBkYXRhID0gdWRhamUpCnN1bW1hcnkoYW5vdmEucmVzdWx0KQpgYGAKVsO9c2t1bW7DoSBvdMOhemthOiBFeGlzdHVqZSDFoXRhdGlzdGlja3kgdsO9em5hbW7DvSByb3pkaWVsIG1lZHppIHByaWVtZXJuw71taSB0ZXBsb3RhbWkgdiBqZWRub3RsaXbDvWNoIG1lc2lhY29jaCByb2t1IDIwMjA/Ck51bG92w6EgaHlwb3TDqXphIChIMCk6IFByaWVtZXJuw6kgdGVwbG90eSB2byB2xaFldGvDvWNoIG1lc2lhY29jaCBzw7ogcm92bmFrw6kuCkFsdGVybmF0w612bmEgaHlwb3TDqXphIChIMSk6IEFzcG/FiCB2IGplZG5vbSBtZXNpYWNpIHNhIHByaWVtZXJuw6EgdGVwbG90YSDFoXRhdGlzdGlja3kgdsO9em5hbW5lIGzDrcWhaS4KVsO9c2xlZGt5IHRlc3R1OgpGYWt0b3I6IE1vbnRoCkRmID0gMTEKU3VtIFNxID0gNDE3LjgKTWVhbiBTcSA9IDM3Ljk4CihwLXZhbHVlIDwgMC4wNSDigJQgYWsgdnnFoWxvIHYgdGVzdGUpCk5hIHrDoWtsYWRlIHbDvXNsZWRrb3YgQU5PVkEgdGVzdHUgYSBob2Rub3R5IHAgPCAwLjA1IHphbWlldGFtZSBudWxvdsO6IGh5cG90w6l6dSAoSDApLiBUbyB6bmFtZW7DoSwgxb5lIGV4aXN0dWrDuiDFoXRhdGlzdGlja3kgdsO9em5hbW7DqSByb3pkaWVseSBtZWR6aSBwcmllbWVybsO9bWkgdGVwbG90YW1pIHYgcsO0em55Y2ggbWVzaWFjb2NoIHJva3UgMjAyMC4KCgojIyMjIExpbmVhciBSZWdyZXNzaW9uOiBQcmVkaWN0aW5nIE1hdGggU2NvcmVzCgpgYGB7cn0KbW9kZWwgPC0gbG0oVGVtcGVyYXR1cmUuLi5DLiB+IEFpci5QcmVzc3VyZS4uaFBhLiwgZGF0YSA9IFRlbXBlcmF0dXJlXzIwMjAuY3N2KQpzdW1tYXJ5KG1vZGVsKQpgYGAKVsO9c2t1bW7DoSBvdMOhemthOiBFeGlzdHVqZSDFoXRhdGlzdGlja3kgdsO9em5hbW7DvSB2esWlYWggbWVkemkgdGxha29tIHZ6ZHVjaHUgKGhQYSkgYSB0ZXBsb3RvdSAowrBDKSB2IHJva3UgMjAyMD8KTnVsb3bDoSBoeXBvdMOpemEgKEgwKTogTWVkemkgdGxha29tIHZ6ZHVjaHUgYSB0ZXBsb3RvdSBuZWV4aXN0dWplIMWhdGF0aXN0aWNreSB2w716bmFtbsO9IGxpbmXDoXJueSB2esWlYWguCkFsdGVybmF0w612bmEgaHlwb3TDqXphIChIMSk6IE1lZHppIHRsYWtvbSB2emR1Y2h1IGEgdGVwbG90b3UgZXhpc3R1amUgxaF0YXRpc3RpY2t5IHbDvXpuYW1uw70gbGluZcOhcm55IHZ6xaVhaC4KVsO9c2xlZGt5OgpLb2VmaWNpZW50IHByZSB0bGFrIHZ6ZHVjaHU6IC0wLjIzOTEKSG9kbm90YSBwOiAwLjU5MzIKUsKyOiAwLjAyOTUKS2XEj8W+ZSBwLXZhbHVlID0gMC41OTMyID4gMC4wNSwgbmV6YW1pZXRhbWUgbnVsb3bDuiBoeXBvdMOpenUgKEgwKS5UbyB6bmFtZW7DoSwgxb5lIG1lZHppIHRsYWtvbSB2emR1Y2h1IGEgdGVwbG90b3UgdiByb2t1IDIwMjAgbmVib2wgcHJldWvDoXphbsO9IMWhdGF0aXN0aWNreSB2w716bmFtbsO9IGxpbmXDoXJueSB2esWlYWguIFrDrXNrYW7DvSBtb2RlbCB2eXN2ZXTEvnVqZSBsZW4gcHJpYmxpxb5uZSAzICUgdmFyaWFiaWxpdHkgdGVwbG90eSwgdGVkYSB0bGFrIHZ6ZHVjaHUgbcOhIGxlbiB2ZcS+bWkgc2xhYsO9IHZwbHl2IG5hIHptZW55IHRlcGxvdHkuCg==