library(boot)
results <- sample(x= uebung5$X, size = 5, replace = T)
before <- uebung5$IQbio[c(results)]
after <- uebung5$IQfoster [c(results)]
results1 <- sample(x= uebung5$X, size = 5, replace = T)
before1 <- uebung5$IQbio[c(results1)]
after1 <- uebung5$IQfoster [c(results1)]
results2 <- sample(x= uebung5$X, size = 5, replace = T)
before2 <- uebung5$IQbio[c(results2)]
after2 <- uebung5$IQfoster [c(results2)]
layout(matrix(c(1,1,2,3), 2, 2, byrow = F))
# PLOT1
plot(x = rep(1, length(before)),
y = before,
xlim = c(.5, 2.5),
ylim = c(60, 140),
ylab = "IQ",
xlab = "Gepaarter t-Test",
main = "Punkte",
xaxt = "n")
points(x = rep(2, length(after)), y = after)
segments(x0 = rep(1, length(before)),
y0 = before,
x1 = rep(2, length(after)),
y1 = after,
col = gray(0, .5))
mtext(text = c("IQ-Bio", "IQ-Forster"),
side = 1, at = c(1, 2), line = 1)
# PLOT2
plot(x = rep(1, length(before1)),
y = before1,
xlim = c(.5, 2.5),
ylim = c(60, 140),
ylab = "IQ",
xlab = "Gepaarter t-Test",
main = "Punkte",
xaxt = "n")
points(x = rep(2, length(after1)), y = after1)
segments(x0 = rep(1, length(before1)),
y0 = before1,
x1 = rep(2, length(after1)),
y1 = after1,
col = gray(0, .5))
mtext(text = c("IQ-Bio", "IQ-Forster"),
side = 1, at = c(1, 2), line = 1)
# PLOT2
plot(x = rep(1, length(before2)),
y = before2,
xlim = c(.5, 2.5),
ylim = c(60, 140),
ylab = "IQ",
xlab = "Gepaarter t-Test",
main = "Punkte",
xaxt = "n")
points(x = rep(2, length(after2)), y = after2)
segments(x0 = rep(1, length(before2)),
y0 = before2,
x1 = rep(2, length(after2)),
y1 = after2,
col = gray(0, .5))
mtext(text = c("IQ-Bio", "IQ-Forster"),
side = 1, at = c(1, 2), line = 1)

NA
NA
library(ggpubr)
Lade n昼㸶tiges Paket: ggplot2
Registered S3 method overwritten by 'data.table':
method from
print.data.table
d <- data.frame(before = uebung5$IQbio, after = uebung5$IQfoster)
ggpaired(d, cond1 = "before", cond2 = "after",
fill = "condition", palette = "jco")

Packages
library(car)# -> QQ - Diagramm & Scatterplot
Lade n昼㸶tiges Paket: carData
Attache Paket: 㤼㸱car㤼㸲
The following object is masked from 㤼㸱package:boot㤼㸲:
logit
The following object is masked from 㤼㸱package:dplyr㤼㸲:
recode
library(psych) # -> Deskriptive Statistiken
Attache Paket: 㤼㸱psych㤼㸲
The following object is masked from 㤼㸱package:car㤼㸲:
logit
The following objects are masked from 㤼㸱package:ggplot2㤼㸲:
%+%, alpha
The following object is masked from 㤼㸱package:boot㤼㸲:
logit
Roadmap
- Hypothese
- Voraussetzungen des t-Tests für abhängige Stichproben
- Grundlegende Konzepte: Was ist t-Test für abhängige Stichproben?
- Deskriptive Statistiken und Korrelation
- Ergebnisse des t-Tests für abhängige Stichproben
- Berechnung der Effektstärke
- Eine Aussage
Hypothese
H1: Es gibt einen Unterschied zwischen der IQ der Zwillinge (Aufwachen bei den biologischen Eltern vs. Aufwachen bei den Adoptiveltern).
H0: Es gibt keinen Unterschied zwischen der IQ der Zwillinge (Aufwachen bei den biologischen Eltern vs. Aufwachen bei den Adoptiveltern).
Voraussetzungen des t-Tests für abhängige Stichproben
Die abhängige Variable ist intervallskaliert -> Ja -> IQ
Es liegen zwei verbundene Stichproben oder Gruppen vor, aber die verschiedenen Messwertpaare sind voneinander unabhängig. 1) Sie sind verbundenen durch ihre DNA, 2) aber unabhängige, weil es zwei verschiedene Menschen sind.
Die Unterschiede zwischen den verbundenen Testwerten sind in der Grundgesamtheit normalverteilt (bei Stichproben > 30 sind Verletzungen unproblematisch) -> siehe Histogramm
Erzeuge der neuen Variable “Differenz”
# Differenz ausrechnen
zwischen <- uebung5$IQbio - uebung5$IQfoster
# Die Spalte "Differenz" wird zum Datensatz hinzugefügt
uebung5 <- cbind(uebung5, "Differenz" = zwischen)
View(uebung5)
# Eine Spalte löschen
#uebung5$Differenz <- NULL
#View(uebung5)
# Falls es Probleme gibt
uebung5$Differenz <- as.numeric(uebung5$Differenz)
Prüfung der Verteilung
Variante 1: Histogramm zur Prüfung des Normalverteilung
hist(uebung5$Differenz, xlab = "Differenz zwischen IQ der Zwillinge", ylab= "Anzahl", main ="Histogramm der Differenz", breaks = 7, col = "hotpink3")

Der Mitte ist bauchig und die Ränder sind niedriger. Allersdings ist die einschätzung nicht eindeutig. Daher kann ein QQ-Plot zur bessern Einschätzung verwendet werden.
Variante 2: QQ-Diagramm zur Prüfung des Normalverteilung
Die Werte werden der Größe nach geordnet. Als Vergleich dienen die Quantile der theoretischen Verteilung, die dem entsprechenden Verteilungswert zugehören. Wenn die Merkmalswerte aus der Vergleichsverteilung stammen, stimmen die empirischen und die theoretischen Quantile annähernd überein, d. h. die Werte liegen auf einer Diagonalen.
Große systematische Abweichungen von dieser Diagonalen geben einen Hinweis darauf, dass sich die theoretische und empirische Verteilung voneinander unterscheiden. DSie Werte müssen entlang einer aufsteigenden Gerade liegen, sodass eine ähnliche Verteilung vermutet werden kann.
# library(car) -> QQ - Diagramm
qqPlot(uebung5$Differenz, main = "QQPlot für die Var. Differenz")
[1] 24 23

Es liegt eine Normalverteilung vor.
Deskriptive Statistiken und Korrelation
Korrelation
Streudiagramm
Ein Streudiagramm, auch Punktwolke genannt (engl. scatter plot), ist die graphische Darstellung von beobachteten Wertepaaren zweier statistischer Merkmale. Diese Wertepaare werden in ein kartesisches Koordinatensystem eingetragen, wodurch sich eine Punktwolke ergibt.
scatterplot(uebung5$IQbio ~ uebung5$IQfoster,
main = "Streudiagramm für die beiden IQ-Werte", ylab = "Zwilling ist bei den biologischen Eltern aufgewachen.", xlab= "Zwilling ist bei den Adoptiveltern aufgewachen.", col= "green" )

slm <- lm(uebung5$IQbio ~ uebung5$IQfoster, data = uebung5)
plot(x = uebung5$IQbio, y = uebung5$IQfoster, col = "blue")
abline(slm, col = "red")

Es liegt eine positiver-linearer Zusammenhang vor.
Korrelation nach Bravais-Pearson
Der Korrelationskoeffizient kann nur Werte im Bereich zwischen -1 und +1 annehmen. Ist er kleiner als Null (r < 0), so besteht ein negativer linearer Zusammenhang. Bei einem Wert grösser als Null (r > 0) besteht ein positiver linearer Zusammenhang und bei einem Wert von Null (r = 0) besteht kein Zusammenhang zwischen den Variablen.
test <- cor.test(uebung5$IQbio , uebung5$IQfoster)
test
Pearson's product-moment correlation
data: uebung5$IQbio and uebung5$IQfoster
t = 9.3575, df = 25, p-value = 1.204e-09
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.7550380 0.9452009
sample estimates:
cor
0.8819877
Hinweis: Es ist es wichtig, dass die Daten miteinander korrelieren. Es ist plausibel, dass zwei verbundene Daten sich ähnlich sind und dass innerhalb eines Messwertpaares eher geringere Unterschiede auftreten als zwischen den Paaren.
Es wird ersichtlich, dass ein Zusammenhang zwischen IQBio und IQfoster(r = .88, p = .000, n = 27)vorliegt. Da r einen positiven Wert aufweist, kann von einem positiven linearen und signifikanten Zusammenhang zwischen IQBio und IQfoster ausgegangen werden. Für das Beispiel ergibt sich eine starke Korrelation von r = .88.
Deskriptive Statistiken
#library(psych)
describe(uebung5)
Es zeigt sich, dass es einen Mittelwertsunterschied zwischen IQBio und IQForster sehr gering ausfällt. + IQBio:(M= 95.11, SD = 16.08, n= 27), + IQBFoster: (M=95,30, SD = 15.74, n= 27)
Daher liegt die Vermutung nahe, dass keine Unterschied zwischen den IQs besteht.
Ergebnisse des t-Tests für abhängige Stichproben
alternative = “two.sided” verwendet eine ungerichtete Hypothese und testet zweiseitig. Falls die Hypothese gerichtet formuliert ist, kann auch “less” oder “greater” verwendet werden. Die Richtung hängt von der Codierung ab.
paired = TRUE ist dann abzuwenden, wenn die Stichprobe verbunden ist. Das “conf.level = .95” beschreibt, dass ein Alphanivau von 0.05 verwendet wird.
testVER<- t.test(uebung5$IQbio , uebung5$IQfoster, alternative = "two.sided", paired = TRUE, conf.level = .95)
testVER
Paired t-test
data: uebung5$IQbio and uebung5$IQfoster
t = -0.12438, df = 26, p-value = 0.902
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
-3.245529 2.875159
sample estimates:
mean of the differences
-0.1851852
Die Teststatistik beträgt t = -0.12438 und der zugehoerige Signifikanzwert p = .902. Damit gibt es keinen signifikanten Unterschied. Die Mittelwertsunterschiede der beiden IQs können zufälliger Natur sein (t(26) = -0.12438, p = .902, n= 7).
Berechnung der Effektstärke
Die Effektstärke ist ein Maß für die Stärke eines Treatments bzw. Phänomens. Effektstärken sind damit eine der wichtigsten Größen in empirischen Studien. Zur Einschätzung der praktischen Bedeutsamkeit existieren verschiedene Effektstärkemaße, die bei der Interpretation der Größe eines Effektes helfen.
\[r=\sqrt{\frac{t^2}{t^2+df}}\]
eff1 <- abs(sqrt(testVER$statistic ^2/ (testVER$statistic^2 + testVER$parameter)))
sprintf("Effektstärke: %.4f",eff1)
[1] "Effektstärke: 0.0244"
Zur Beurteilung der Groesse des Effektes dient die Einteilung von Cohen (1992):
r = .10 entspricht einem schwachen Effekt r = .30 entspricht einem mittleren Effekt r = .50 entspricht einem starken Effekt
Damit liegt kein Effektstärke vor (r= 0.02)
Auf der Webseite: Statistik mit Jule werden weitere Effektstärke beschrieben und empfohlen.
Eine Aussage
Es zeigt sich, dass keinen statistisch signifikant unterscheiden zwischen dem IQ der Zwillingsgeschwister gibt (t(26) = -0.12438, p = .902, n= 7).
H0 wird angenommen.
LS0tDQp0aXRsZTogInQtVGVzdCBmdWVyIHp3ZWkgdmVyYnVuZGVuZSBTdGljaHByb2JlbiINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQoNCg0KDQoNCg0KDQpgYGB7cn0NCmxpYnJhcnkoYm9vdCkNCnJlc3VsdHMgPC0gc2FtcGxlKHg9IHVlYnVuZzUkWCwgc2l6ZSA9IDUsIHJlcGxhY2UgPSBUKQ0KDQpiZWZvcmUgPC0gdWVidW5nNSRJUWJpb1tjKHJlc3VsdHMpXSANCmFmdGVyIDwtIHVlYnVuZzUkSVFmb3N0ZXIgW2MocmVzdWx0cyldDQoNCnJlc3VsdHMxIDwtIHNhbXBsZSh4PSB1ZWJ1bmc1JFgsIHNpemUgPSA1LCByZXBsYWNlID0gVCkNCg0KYmVmb3JlMSA8LSB1ZWJ1bmc1JElRYmlvW2MocmVzdWx0czEpXSANCmFmdGVyMSA8LSB1ZWJ1bmc1JElRZm9zdGVyIFtjKHJlc3VsdHMxKV0NCg0KDQpyZXN1bHRzMiA8LSBzYW1wbGUoeD0gdWVidW5nNSRYLCBzaXplID0gNSwgcmVwbGFjZSA9IFQpDQoNCmJlZm9yZTIgPC0gdWVidW5nNSRJUWJpb1tjKHJlc3VsdHMyKV0gDQphZnRlcjIgPC0gdWVidW5nNSRJUWZvc3RlciBbYyhyZXN1bHRzMildDQpgYGANCg0KYGBge3J9DQpsYXlvdXQobWF0cml4KGMoMSwxLDIsMyksIDIsIDIsIGJ5cm93ID0gRikpDQojIFBMT1QxDQoNCnBsb3QoeCA9IHJlcCgxLCBsZW5ndGgoYmVmb3JlKSksIA0KICAgICB5ID0gYmVmb3JlLCANCiAgICAgeGxpbSA9IGMoLjUsIDIuNSksIA0KICAgICB5bGltID0gYyg2MCwgMTQwKSwNCiAgICAgeWxhYiA9ICJJUSIsIA0KICAgICB4bGFiID0gIkdlcGFhcnRlciB0LVRlc3QiLA0KICAgICBtYWluID0gIlB1bmt0ZSIsIA0KICAgICB4YXh0ID0gIm4iKQ0KDQoNCnBvaW50cyh4ID0gcmVwKDIsIGxlbmd0aChhZnRlcikpLCB5ID0gYWZ0ZXIpDQoNCg0Kc2VnbWVudHMoeDAgPSByZXAoMSwgbGVuZ3RoKGJlZm9yZSkpLCANCiAgICAgICAgIHkwID0gYmVmb3JlLCANCiAgICAgICAgIHgxID0gcmVwKDIsIGxlbmd0aChhZnRlcikpLCANCiAgICAgICAgIHkxID0gYWZ0ZXIsIA0KICAgICAgICAgY29sID0gZ3JheSgwLCAuNSkpDQoNCg0KbXRleHQodGV4dCA9IGMoIklRLUJpbyIsICJJUS1Gb3JzdGVyIiksIA0KICAgICAgc2lkZSA9IDEsIGF0ID0gYygxLCAyKSwgbGluZSA9IDEpDQoNCiMgUExPVDINCnBsb3QoeCA9IHJlcCgxLCBsZW5ndGgoYmVmb3JlMSkpLCANCiAgICAgeSA9IGJlZm9yZTEsIA0KICAgICB4bGltID0gYyguNSwgMi41KSwgDQogICAgIHlsaW0gPSBjKDYwLCAxNDApLA0KICAgICB5bGFiID0gIklRIiwgDQogICAgIHhsYWIgPSAiR2VwYWFydGVyIHQtVGVzdCIsDQogICAgIG1haW4gPSAiUHVua3RlIiwgDQogICAgIHhheHQgPSAibiIpDQoNCg0KcG9pbnRzKHggPSByZXAoMiwgbGVuZ3RoKGFmdGVyMSkpLCB5ID0gYWZ0ZXIxKQ0KDQoNCnNlZ21lbnRzKHgwID0gcmVwKDEsIGxlbmd0aChiZWZvcmUxKSksIA0KICAgICAgICAgeTAgPSBiZWZvcmUxLCANCiAgICAgICAgIHgxID0gcmVwKDIsIGxlbmd0aChhZnRlcjEpKSwgDQogICAgICAgICB5MSA9IGFmdGVyMSwgDQogICAgICAgICBjb2wgPSBncmF5KDAsIC41KSkNCg0KDQptdGV4dCh0ZXh0ID0gYygiSVEtQmlvIiwgIklRLUZvcnN0ZXIiKSwgDQogICAgICBzaWRlID0gMSwgYXQgPSBjKDEsIDIpLCBsaW5lID0gMSkNCg0KIyBQTE9UMg0KcGxvdCh4ID0gcmVwKDEsIGxlbmd0aChiZWZvcmUyKSksIA0KICAgICB5ID0gYmVmb3JlMiwgDQogICAgIHhsaW0gPSBjKC41LCAyLjUpLCANCiAgICAgeWxpbSA9IGMoNjAsIDE0MCksDQogICAgIHlsYWIgPSAiSVEiLCANCiAgICAgeGxhYiA9ICJHZXBhYXJ0ZXIgdC1UZXN0IiwNCiAgICAgbWFpbiA9ICJQdW5rdGUiLCANCiAgICAgeGF4dCA9ICJuIikNCg0KDQpwb2ludHMoeCA9IHJlcCgyLCBsZW5ndGgoYWZ0ZXIyKSksIHkgPSBhZnRlcjIpDQoNCg0Kc2VnbWVudHMoeDAgPSByZXAoMSwgbGVuZ3RoKGJlZm9yZTIpKSwgDQogICAgICAgICB5MCA9IGJlZm9yZTIsIA0KICAgICAgICAgeDEgPSByZXAoMiwgbGVuZ3RoKGFmdGVyMikpLCANCiAgICAgICAgIHkxID0gYWZ0ZXIyLCANCiAgICAgICAgIGNvbCA9IGdyYXkoMCwgLjUpKQ0KDQoNCm10ZXh0KHRleHQgPSBjKCJJUS1CaW8iLCAiSVEtRm9yc3RlciIpLCANCiAgICAgIHNpZGUgPSAxLCBhdCA9IGMoMSwgMiksIGxpbmUgPSAxKQ0KDQoNCmBgYA0KDQoNCg0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwdWJyKQ0KZCA8LSBkYXRhLmZyYW1lKGJlZm9yZSA9IHVlYnVuZzUkSVFiaW8sIGFmdGVyID0gdWVidW5nNSRJUWZvc3RlcikNCmdncGFpcmVkKGQsIGNvbmQxID0gImJlZm9yZSIsIGNvbmQyID0gImFmdGVyIiwNCiAgICBmaWxsID0gImNvbmRpdGlvbiIsIHBhbGV0dGUgPSAiamNvIikNCg0KYGBgDQoNCg0KDQoNCg0KDQojIyBQYWNrYWdlcw0KDQpgYGB7cn0NCmxpYnJhcnkoY2FyKSMgLT4gUVEgLSBEaWFncmFtbSAmIFNjYXR0ZXJwbG90DQoNCmxpYnJhcnkocHN5Y2gpICMgLT4gRGVza3JpcHRpdmUgU3RhdGlzdGlrZW4NCmBgYA0KDQoNCg0KIyMgUm9hZG1hcCANCg0KMSkgSHlwb3RoZXNlDQoyKSBWb3JhdXNzZXR6dW5nZW4gZGVzIHQtVGVzdHMgZsO8ciBhYmjDpG5naWdlIFN0aWNocHJvYmVuDQozKSBHcnVuZGxlZ2VuZGUgS29uemVwdGU6IFdhcyBpc3QgdC1UZXN0IGbDvHIgYWJow6RuZ2lnZSBTdGljaHByb2Jlbj8NCjQpIERlc2tyaXB0aXZlIFN0YXRpc3Rpa2VuIHVuZCBLb3JyZWxhdGlvbg0KNSkgRXJnZWJuaXNzZSBkZXMgdC1UZXN0cyBmw7xyIGFiaMOkbmdpZ2UgU3RpY2hwcm9iZW4NCjYpIEJlcmVjaG51bmcgZGVyIEVmZmVrdHN0w6Rya2UNCjcpIEVpbmUgQXVzc2FnZSANCg0KDQoNCg0KIyBIeXBvdGhlc2UNCg0KSDE6IEVzIGdpYnQgZWluZW4gVW50ZXJzY2hpZWQgendpc2NoZW4gZGVyIElRIGRlciBad2lsbGluZ2UgKEF1ZndhY2hlbiBiZWkgZGVuIGJpb2xvZ2lzY2hlbiBFbHRlcm4gdnMuIEF1ZndhY2hlbiBiZWkgZGVuIEFkb3B0aXZlbHRlcm4pLjxicj4NCg0KSDA6IEVzIGdpYnQga2VpbmVuIFVudGVyc2NoaWVkIHp3aXNjaGVuIGRlciBJUSBkZXIgWndpbGxpbmdlIChBdWZ3YWNoZW4gYmVpIGRlbiBiaW9sb2dpc2NoZW4gRWx0ZXJuIHZzLiBBdWZ3YWNoZW4gYmVpIGRlbiBBZG9wdGl2ZWx0ZXJuKS4NCg0KIyBWb3JhdXNzZXR6dW5nZW4gZGVzIHQtVGVzdHMgZsO8ciBhYmjDpG5naWdlIFN0aWNocHJvYmVuDQoNCkRpZSBhYmjDpG5naWdlIFZhcmlhYmxlIGlzdCBpbnRlcnZhbGxza2FsaWVydCAtPiBKYSAtPiBJUQ0KDQpFcyBsaWVnZW4gendlaSB2ZXJidW5kZW5lIFN0aWNocHJvYmVuIG9kZXIgR3J1cHBlbiB2b3IsIGFiZXIgZGllIHZlcnNjaGllZGVuZW4gTWVzc3dlcnRwYWFyZSBzaW5kIHZvbmVpbmFuZGVyIHVuYWJow6RuZ2lnLiAxKSBTaWUgc2luZCB2ZXJidW5kZW5lbiBkdXJjaCBpaHJlIEROQSwgMikgYWJlciB1bmFiaMOkbmdpZ2UsIHdlaWwgZXMgendlaSB2ZXJzY2hpZWRlbmUgTWVuc2NoZW4gc2luZC4NCg0KRGllIFVudGVyc2NoaWVkZSB6d2lzY2hlbiBkZW4gdmVyYnVuZGVuZW4gVGVzdHdlcnRlbiBzaW5kIGluIGRlciBHcnVuZGdlc2FtdGhlaXQgbm9ybWFsdmVydGVpbHQgKGJlaSBTdGljaHByb2JlbiA+IDMwIHNpbmQgVmVybGV0enVuZ2VuIHVucHJvYmxlbWF0aXNjaCkgLT4gc2llaGUgSGlzdG9ncmFtbQ0KDQojIyMgRXJ6ZXVnZSBkZXIgbmV1ZW4gVmFyaWFibGUgIkRpZmZlcmVueiINCg0KYGBge3J9DQojIERpZmZlcmVueiBhdXNyZWNobmVuDQp6d2lzY2hlbiA8LSB1ZWJ1bmc1JElRYmlvIC0gdWVidW5nNSRJUWZvc3Rlcg0KDQoNCiMgRGllIFNwYWx0ZSAiRGlmZmVyZW56IiB3aXJkIHp1bSBEYXRlbnNhdHogaGluenVnZWbDvGd0DQp1ZWJ1bmc1IDwtIGNiaW5kKHVlYnVuZzUsICJEaWZmZXJlbnoiID0gendpc2NoZW4pDQpWaWV3KHVlYnVuZzUpDQoNCmBgYA0KDQoNCmBgYHtyfQ0KDQojIEVpbmUgU3BhbHRlIGzDtnNjaGVuDQoNCiN1ZWJ1bmc1JERpZmZlcmVueiA8LSBOVUxMDQojVmlldyh1ZWJ1bmc1KQ0KDQojIEZhbGxzIGVzIFByb2JsZW1lIGdpYnQNCg0KdWVidW5nNSREaWZmZXJlbnogPC0gYXMubnVtZXJpYyh1ZWJ1bmc1JERpZmZlcmVueikNCmBgYA0KDQoNCg0KDQojIyAgUHLDvGZ1bmcgZGVyIFZlcnRlaWx1bmcNCg0KIyMjIFZhcmlhbnRlIDE6IEhpc3RvZ3JhbW0genVyIFByw7xmdW5nIGRlcyBOb3JtYWx2ZXJ0ZWlsdW5nDQoNCg0KYGBge3J9DQpoaXN0KHVlYnVuZzUkRGlmZmVyZW56LCB4bGFiID0gIkRpZmZlcmVueiB6d2lzY2hlbiBJUSBkZXIgWndpbGxpbmdlIiwgeWxhYj0gIkFuemFobCIsIG1haW4gPSJIaXN0b2dyYW1tIGRlciBEaWZmZXJlbnoiLCBicmVha3MgPSA3LCAgY29sID0gImhvdHBpbmszIikNCg0KYGBgDQpEZXIgTWl0dGUgaXN0IGJhdWNoaWcgdW5kIGRpZSBSw6RuZGVyIHNpbmQgbmllZHJpZ2VyLiBBbGxlcnNkaW5ncyBpc3QgZGllIGVpbnNjaMOkdHp1bmcgbmljaHQgZWluZGV1dGlnLiBEYWhlciBrYW5uIGVpbiBRUS1QbG90IHp1ciBiZXNzZXJuIEVpbnNjaMOkdHp1bmcgdmVyd2VuZGV0IHdlcmRlbi4NCg0KDQoNCiMjIyBWYXJpYW50ZSAyOiAgUVEtRGlhZ3JhbW0genVyIFByw7xmdW5nIGRlcyBOb3JtYWx2ZXJ0ZWlsdW5nDQoNCkRpZSBXZXJ0ZSB3ZXJkZW4gZGVyIEdyw7bDn2UgbmFjaCBnZW9yZG5ldC4gQWxzIFZlcmdsZWljaCBkaWVuZW4gZGllIFF1YW50aWxlIGRlciB0aGVvcmV0aXNjaGVuIFZlcnRlaWx1bmcsIGRpZSBkZW0gZW50c3ByZWNoZW5kZW4gVmVydGVpbHVuZ3N3ZXJ0IHp1Z2Vow7ZyZW4uDQpXZW5uIGRpZSBNZXJrbWFsc3dlcnRlIGF1cyBkZXIgVmVyZ2xlaWNoc3ZlcnRlaWx1bmcgc3RhbW1lbiwgc3RpbW1lbiBkaWUgZW1waXJpc2NoZW4gdW5kIGRpZSB0aGVvcmV0aXNjaGVuIFF1YW50aWxlIGFubsOkaGVybmQgw7xiZXJlaW4sIGQuIGguIGRpZSBXZXJ0ZSBsaWVnZW4gYXVmIGVpbmVyIERpYWdvbmFsZW4uDQoNCkdyb8OfZSBzeXN0ZW1hdGlzY2hlIEFid2VpY2h1bmdlbiB2b24gZGllc2VyIERpYWdvbmFsZW4gZ2ViZW4gZWluZW4gSGlud2VpcyBkYXJhdWYsIGRhc3Mgc2ljaCBkaWUgdGhlb3JldGlzY2hlIHVuZCBlbXBpcmlzY2hlIFZlcnRlaWx1bmcgdm9uZWluYW5kZXIgdW50ZXJzY2hlaWRlbi4gDQpEU2llIFdlcnRlIG3DvHNzZW4gZW50bGFuZyBlaW5lciBhdWZzdGVpZ2VuZGVuIEdlcmFkZSBsaWVnZW4sIHNvZGFzcyBlaW5lIMOkaG5saWNoZSBWZXJ0ZWlsdW5nIHZlcm11dGV0IHdlcmRlbiBrYW5uLg0KDQpgYGB7cn0NCiMgbGlicmFyeShjYXIpIC0+IFFRIC0gRGlhZ3JhbW0gDQoNCnFxUGxvdCh1ZWJ1bmc1JERpZmZlcmVueiwgbWFpbiA9ICJRUVBsb3QgZsO8ciBkaWUgVmFyLiBEaWZmZXJlbnoiKQ0KDQpgYGANCg0KRXMgbGllZ3QgZWluZSAgTm9ybWFsdmVydGVpbHVuZyB2b3IuIA0KDQoNCiMgRGVza3JpcHRpdmUgU3RhdGlzdGlrZW4gdW5kIEtvcnJlbGF0aW9uDQoNCiMjIEtvcnJlbGF0aW9uDQoNCiMjIyMgU3RyZXVkaWFncmFtbQ0KDQpFaW4gU3RyZXVkaWFncmFtbSwgYXVjaCBQdW5rdHdvbGtlIGdlbmFubnQgKGVuZ2wuIHNjYXR0ZXIgcGxvdCksIGlzdCBkaWUgZ3JhcGhpc2NoZSBEYXJzdGVsbHVuZyB2b24gYmVvYmFjaHRldGVuIFdlcnRlcGFhcmVuIHp3ZWllciBzdGF0aXN0aXNjaGVyIE1lcmttYWxlLiBEaWVzZSBXZXJ0ZXBhYXJlIHdlcmRlbiBpbiBlaW4ga2FydGVzaXNjaGVzIEtvb3JkaW5hdGVuc3lzdGVtIGVpbmdldHJhZ2VuLCB3b2R1cmNoIHNpY2ggZWluZSBQdW5rdHdvbGtlIGVyZ2lidC4NCg0KYGBge3J9DQpzY2F0dGVycGxvdCh1ZWJ1bmc1JElRYmlvIH4gdWVidW5nNSRJUWZvc3RlciwgDQogICAgICAgICAgICBtYWluID0gIlN0cmV1ZGlhZ3JhbW0gZsO8ciBkaWUgYmVpZGVuIElRLVdlcnRlIiwgeWxhYiA9ICJad2lsbGluZyBpc3QgYmVpIGRlbiBiaW9sb2dpc2NoZW4gRWx0ZXJuIGF1Zmdld2FjaGVuLiIsIHhsYWI9ICJad2lsbGluZyBpc3QgYmVpIGRlbiBBZG9wdGl2ZWx0ZXJuIGF1Zmdld2FjaGVuLiIsIGNvbD0gImdyZWVuIiApDQoNCmBgYA0KDQpgYGB7cn0NCg0Kc2xtIDwtIGxtKHVlYnVuZzUkSVFiaW8gfiB1ZWJ1bmc1JElRZm9zdGVyLCBkYXRhID0gdWVidW5nNSkNCnBsb3QoeCA9IHVlYnVuZzUkSVFiaW8sIHkgPSB1ZWJ1bmc1JElRZm9zdGVyLCBjb2wgPSAiYmx1ZSIpDQphYmxpbmUoc2xtLCBjb2wgPSAicmVkIikNCg0KYGBgDQoNCg0KDQpFcyBsaWVndCBlaW5lIHBvc2l0aXZlci1saW5lYXJlciBadXNhbW1lbmhhbmcgdm9yLiANCg0KIyMjIyBLb3JyZWxhdGlvbiBuYWNoIEJyYXZhaXMtUGVhcnNvbg0KDQpEZXIgS29ycmVsYXRpb25za29lZmZpemllbnQga2FubiBudXIgV2VydGUgaW0gQmVyZWljaCB6d2lzY2hlbiAtMSB1bmQgKzEgYW5uZWhtZW4uIElzdCBlciBrbGVpbmVyIGFscyBOdWxsIChyIDwgMCksIHNvIGJlc3RlaHQgZWluIG5lZ2F0aXZlciBsaW5lYXJlciBadXNhbW1lbmhhbmcuIEJlaSBlaW5lbSBXZXJ0IGdyw7Zzc2VyIGFscyBOdWxsIChyID4gMCkgYmVzdGVodCBlaW4gcG9zaXRpdmVyIGxpbmVhcmVyIFp1c2FtbWVuaGFuZyB1bmQgYmVpIGVpbmVtIFdlcnQgdm9uIE51bGwgKHIgPSAwKSBiZXN0ZWh0IGtlaW4gWnVzYW1tZW5oYW5nIHp3aXNjaGVuIGRlbiBWYXJpYWJsZW4uDQoNCmBgYHtyfQ0KdGVzdCA8LSBjb3IudGVzdCh1ZWJ1bmc1JElRYmlvICwgdWVidW5nNSRJUWZvc3RlcikNCnRlc3QNCg0KYGBgDQoNCioqSGlud2VpczoqKiBFcyBpc3QgZXMgd2ljaHRpZywgZGFzcyBkaWUgRGF0ZW4gbWl0ZWluYW5kZXIga29ycmVsaWVyZW4uIEVzIGlzdCBwbGF1c2liZWwsIGRhc3MgendlaSB2ZXJidW5kZW5lIERhdGVuIHNpY2ggw6RobmxpY2ggc2luZCB1bmQgZGFzcyBpbm5lcmhhbGIgZWluZXMgTWVzc3dlcnRwYWFyZXMgZWhlciBnZXJpbmdlcmUgVW50ZXJzY2hpZWRlIGF1ZnRyZXRlbiBhbHMgendpc2NoZW4gZGVuIFBhYXJlbi4gDQoNCg0KRXMgd2lyZCBlcnNpY2h0bGljaCwgZGFzcyBlaW4gWnVzYW1tZW5oYW5nIHp3aXNjaGVuIElRQmlvIHVuZCBJUWZvc3RlcihyID0gLjg4LCBwID0gLjAwMCwgbiA9IDI3KXZvcmxpZWd0LiBEYSByIGVpbmVuIHBvc2l0aXZlbiBXZXJ0IGF1ZndlaXN0LCBrYW5uIHZvbiBlaW5lbSBwb3NpdGl2ZW4gbGluZWFyZW4gdW5kIHNpZ25pZmlrYW50ZW4gWnVzYW1tZW5oYW5nIHp3aXNjaGVuIElRQmlvIHVuZCBJUWZvc3RlciBhdXNnZWdhbmdlbiB3ZXJkZW4uIEbDvHIgZGFzIEJlaXNwaWVsIGVyZ2lidCBzaWNoIGVpbmUgc3RhcmtlIEtvcnJlbGF0aW9uIHZvbiByID0gLjg4Lg0KDQoNCg0KIyMgRGVza3JpcHRpdmUgU3RhdGlzdGlrZW4NCg0KDQpgYGB7cn0NCiNsaWJyYXJ5KHBzeWNoKQ0KZGVzY3JpYmUodWVidW5nNSkNCmBgYA0KRXMgemVpZ3Qgc2ljaCwgZGFzcyBlcyBlaW5lbiBNaXR0ZWx3ZXJ0c3VudGVyc2NoaWVkIHp3aXNjaGVuIElRQmlvIHVuZCBJUUZvcnN0ZXIgc2VociBnZXJpbmcgYXVzZsOkbGx0LiANCisgSVFCaW86KE09IDk1LjExLCBTRCA9IDE2LjA4LCBuPSAyNyksDQorIElRQkZvc3RlcjogKE09OTUsMzAsIFNEID0gMTUuNzQsIG49IDI3KQ0KDQoNCkRhaGVyIGxpZWd0IGRpZSBWZXJtdXR1bmcgbmFoZSwgZGFzcyBrZWluZSBVbnRlcnNjaGllZCB6d2lzY2hlbiBkZW4gSVFzIGJlc3RlaHQuDQoNCg0KIyBFcmdlYm5pc3NlIGRlcyB0LVRlc3RzIGbDvHIgYWJow6RuZ2lnZSBTdGljaHByb2Jlbg0KDQoNCioqYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIioqICB2ZXJ3ZW5kZXQgZWluZSB1bmdlcmljaHRldGUgSHlwb3RoZXNlIHVuZCB0ZXN0ZXQgendlaXNlaXRpZy4gRmFsbHMgZGllIEh5cG90aGVzZSBnZXJpY2h0ZXQgZm9ybXVsaWVydCBpc3QsIGthbm4gYXVjaCAibGVzcyIgb2RlciAiZ3JlYXRlciIgdmVyd2VuZGV0IHdlcmRlbi4gRGllIFJpY2h0dW5nIGjDpG5ndCB2b24gZGVyIENvZGllcnVuZyBhYi4gDQoNCioqcGFpcmVkID0gVFJVRSoqIGlzdCBkYW5uIGFienV3ZW5kZW4sIHdlbm4gZGllIFN0aWNocHJvYmUgdmVyYnVuZGVuIGlzdC4gRGFzICoqImNvbmYubGV2ZWwgPSAuOTUiKiogYmVzY2hyZWlidCwgZGFzcyBlaW4gQWxwaGFuaXZhdSB2b24gMC4wNSB2ZXJ3ZW5kZXQgd2lyZC4gDQoNCmBgYHtyfQ0KdGVzdFZFUjwtIHQudGVzdCh1ZWJ1bmc1JElRYmlvICwgdWVidW5nNSRJUWZvc3RlciwgYWx0ZXJuYXRpdmUgPSAidHdvLnNpZGVkIiwgcGFpcmVkID0gVFJVRSwgY29uZi5sZXZlbCA9IC45NSkNCg0KdGVzdFZFUg0KDQpgYGANCg0KDQpEaWUgVGVzdHN0YXRpc3RpayBiZXRyw6RndCB0ID0gLTAuMTI0MzggdW5kIGRlciB6dWdlaG9lcmlnZSBTaWduaWZpa2FuendlcnQgcCA9IC45MDIuIERhbWl0IGdpYnQgZXMga2VpbmVuIHNpZ25pZmlrYW50ZW4gVW50ZXJzY2hpZWQuIERpZSBNaXR0ZWx3ZXJ0c3VudGVyc2NoaWVkZSBkZXIgYmVpZGVuIElRcyBrw7ZubmVuIHp1ZsOkbGxpZ2VyIE5hdHVyIHNlaW4gKHQoMjYpID0gLTAuMTI0MzgsIHAgPSAuOTAyLCBuPSA3KS4NCg0KDQojIEJlcmVjaG51bmcgZGVyIEVmZmVrdHN0w6Rya2UNCg0KRGllIEVmZmVrdHN0w6Rya2UgaXN0IGVpbiBNYcOfIGbDvHIgZGllIFN0w6Rya2UgZWluZXMgVHJlYXRtZW50cyBiencuIFBow6Rub21lbnMuIEVmZmVrdHN0w6Rya2VuIHNpbmQgZGFtaXQgZWluZSBkZXIgd2ljaHRpZ3N0ZW4gR3LDtsOfZW4gaW4gZW1waXJpc2NoZW4gU3R1ZGllbi4gWnVyIEVpbnNjaMOkdHp1bmcgZGVyIHByYWt0aXNjaGVuIEJlZGV1dHNhbWtlaXQgZXhpc3RpZXJlbiB2ZXJzY2hpZWRlbmUgRWZmZWt0c3TDpHJrZW1hw59lLCBkaWUgYmVpIGRlciBJbnRlcnByZXRhdGlvbiBkZXIgR3LDtsOfZSBlaW5lcyBFZmZla3RlcyBoZWxmZW4uDQoNCiQkcj1cc3FydHtcZnJhY3t0XjJ9e3ReMitkZn19JCQNCg0KDQpgYGB7cn0NCmVmZjEgPC0gYWJzKHNxcnQodGVzdFZFUiRzdGF0aXN0aWMgXjIvICh0ZXN0VkVSJHN0YXRpc3RpY14yICsgdGVzdFZFUiRwYXJhbWV0ZXIpKSkNCg0Kc3ByaW50ZigiRWZmZWt0c3TDpHJrZTogJS40ZiIsZWZmMSkNCmBgYA0KDQoNClp1ciBCZXVydGVpbHVuZyBkZXIgR3JvZXNzZSBkZXMgRWZmZWt0ZXMgZGllbnQgZGllIEVpbnRlaWx1bmcgdm9uIENvaGVuICgxOTkyKToNCg0KciA9IC4xMCBlbnRzcHJpY2h0IGVpbmVtIHNjaHdhY2hlbiBFZmZla3QNCnIgPSAuMzAgZW50c3ByaWNodCBlaW5lbSBtaXR0bGVyZW4gRWZmZWt0DQpyID0gLjUwIGVudHNwcmljaHQgZWluZW0gc3RhcmtlbiBFZmZla3QNCg0KRGFtaXQgbGllZ3Qga2VpbiBFZmZla3RzdMOkcmtlIHZvciAocj0gMC4wMikNCg0KQXVmIGRlciBXZWJzZWl0ZTogU3RhdGlzdGlrIG1pdCBKdWxlIHdlcmRlbiB3ZWl0ZXJlIEVmZmVrdHN0w6Rya2UgYmVzY2hyaWViZW4gdW5kIGVtcGZvaGxlbi4gDQoNCg0KIyBFaW5lIEF1c3NhZ2UNCg0KRXMgemVpZ3Qgc2ljaCwgZGFzcyBrZWluZW4gc3RhdGlzdGlzY2ggc2lnbmlmaWthbnQgdW50ZXJzY2hlaWRlbiB6d2lzY2hlbiBkZW0gSVEgZGVyIFp3aWxsaW5nc2dlc2Nod2lzdGVyIGdpYnQgKHQoMjYpID0gLTAuMTI0MzgsIHAgPSAuOTAyLCBuPSA3KS4gDQoNCioqSDAgd2lyZCBhbmdlbm9tbWVuLioqDQo=