Packages
Dataset
df <- read_csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vStv7Pr69DtRKv6Nw6gVBep8hbT3pEeO6B1vNwxK_1DUHgpoTgbuRpZ4SvgtHFQnBZJVGeeQVyRuXZl/pub?gid=1081795515&single=true&output=csv")
── Column specification ─────────────────────────────────────────────────────────
cols(
Pacients = col_character(),
`Zoba numurs` = col_character(),
`initial treatment-Initial/retreatment -Retreatment` = col_character(),
Age = col_double(),
Gender = col_character(),
`Age 45 ≤ -1/ 45 > - 2` = col_double(),
`Tooth type` = col_character(),
`Tooth location.Maxillary -Maxilla/Mandibular-Mandible` = col_character(),
`PAI before treatment` = col_double(),
`PAI after treatment` = col_double()
)


glimpse(df)
Rows: 99
Columns: 10
$ pacients <chr> "Binovska Rūtu Re…
$ zoba_numurs <chr> "d46", "d37", "d1…
$ initial_treatment_initial_retreatment_retreatment <chr> "Initial", "Initi…
$ age <dbl> 15, 28, 28, 35, 2…
$ gender <chr> "Female", "Female…
$ age_45_1_45_2 <dbl> 1, 1, 1, 1, 1, 2,…
$ tooth_type <chr> "Molar", "Molar",…
$ tooth_location_maxillary_maxilla_mandibular_mandible <chr> "Mandible", "Mand…
$ pai_before_treatment <dbl> 2, 4, 2, 2, 2, 4,…
$ pai_after_treatment <dbl> 1, 1, 1, 2, 1, 4,…

Table 1
Characteristic |
Initial, N = 102 |
Retreatment, N = 96 |
p-value |
pai_values |
|
|
0.7 |
1 |
45 (44%) |
52 (54%) |
|
2 |
31 (30%) |
25 (26%) |
|
3 |
17 (17%) |
14 (15%) |
|
4 |
7 (6.9%) |
4 (4.2%) |
|
5 |
2 (2.0%) |
1 (1.0%) |
|
Dear Aleksandra
I was examining your data and perhaps it would be interesting to see the behavior of each treatment, so instead of grouping them together, it is possible to see what happened to each one.
By graphing them like this it seems, as you can see, that most of the lines go down, suggesting that in general the conditions improve after. What is not clear to me is how the 5 can go to 1.
Well, I hope it works, you seem to have interesting results. In Rstudio there is a tab at the top right with very simple tutorials, take a look, I think you can get a lot out of your interesting data!
Also, seems that one female patient goes from 1 to 5, check her data.
Greetings!
Sergio
Profile plot
By gender
df %>%
# here I create a new column with an ID for each patient
group_by(pacients) %>%
mutate(ID = cur_group_id()) %>%
# now select only relevant variables for the graph
select(ID, Before = pai_before_treatment, After = pai_after_treatment, gender) %>%
# and this is the graph
ggplot() +
# this geometry allow to merge the before and after points
geom_segment(aes(
x = 1,
xend = 2,
y = as.factor(Before), # this is important, since this numbers are actually categories
yend = as.factor(After)
)) +
# this is the theme of the graph
theme_bw() +
# and the axis names
scale_x_discrete(
breaks = c("1", "2"),
labels = c("Before", "After"),
limits = c(1, 2)
) +
labs(y = "",
title = "Change of PAI Before and After by Gender") +
# this disaggregate by gender and the status before, as baseline
facet_grid(gender~Before)
Adding missing grouping variables: `pacients`
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

By tooth
df %>%
# here I create a new column with an ID for each patient
group_by(pacients) %>%
mutate(ID = cur_group_id()) %>%
# now select only relevant variables for the graph
select(ID, Before = pai_before_treatment, After = pai_after_treatment, tooth_type) %>%
# and this is the graph
ggplot() +
# this geometry allow to merge the before and after points
geom_segment(aes(
x = 1,
xend = 2,
y = as.factor(Before), # this is important, since this numbers are actually categories
yend = as.factor(After)
)) +
# this is the theme of the graph
theme_bw() +
# and the axis names
scale_x_discrete(
breaks = c("1", "2"),
labels = c("Before", "After"),
limits = c(1, 2)
) +
labs(y = "",
title = "Change of PAI Before and After by Tooth") +
# this disaggregate by gender and the status before, as baseline
facet_grid(tooth_type~Before)
Adding missing grouping variables: `pacients`
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

By maxilar
df %>%
# here I create a new column with an ID for each patient
group_by(pacients) %>%
mutate(ID = cur_group_id()) %>%
# now select only relevant variables for the graph
select(ID, Before = pai_before_treatment, After = pai_after_treatment, tooth_location_maxillary_maxilla_mandibular_mandible ) %>%
# and this is the graph
ggplot() +
# this geometry allow to merge the before and after points
geom_segment(aes(
x = 1,
xend = 2,
y = as.factor(Before), # this is important, since this numbers are actually categories
yend = as.factor(After)
)) +
# this is the theme of the graph
theme_bw() +
# and the axis names
scale_x_discrete(
breaks = c("1", "2"),
labels = c("Before", "After"),
limits = c(1, 2)
) +
labs(y = "",
title = "Change of PAI Before and After") +
# this disaggregate by gender and the status before, as baseline
facet_grid(tooth_location_maxillary_maxilla_mandibular_mandible~Before)
Adding missing grouping variables: `pacients`
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

Tooth and bone
df %>%
# here I create a new column with an ID for each patient
group_by(pacients) %>%
mutate(ID = cur_group_id()) %>%
# now select only relevant variables for the graph
select(ID, Before = pai_before_treatment, After = pai_after_treatment, tooth_location_maxillary_maxilla_mandibular_mandible, tooth_type ) %>%
# and this is the graph
ggplot() +
# this geometry allow to merge the before and after points
geom_segment(aes(
x = 1,
xend = 2,
y = as.factor(Before), # this is important, since this numbers are actually categories
yend = as.factor(After)
)) +
# this is the theme of the graph
theme_bw() +
# and the axis names
scale_x_discrete(
breaks = c("1", "2"),
labels = c("Before", "After"),
limits = c(1, 2)
) +
labs(y = "",
title = "Change of PAI Before and After by Bone") +
# this disaggregate by gender and the status before, as baseline
facet_grid(tooth_location_maxillary_maxilla_mandibular_mandible~tooth_type)
Adding missing grouping variables: `pacients`
Continuous limits supplied to discrete scale.
Did you mean `limits = factor(...)` or `scale_*_continuous()`?

LS0tCnRpdGxlOiAiQWxla3NhbmRyYSIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6IGRlZmF1bHQKICBwZGZfZG9jdW1lbnQ6IGRlZmF1bHQKICB3b3JkX2RvY3VtZW50OiBkZWZhdWx0CmVkaXRvcl9vcHRpb25zOgogIGNodW5rX291dHB1dF90eXBlOiBpbmxpbmUKLS0tCgojIFBhY2thZ2VzCgpgYGB7cn0KcGFjbWFuOjpwX2xvYWQodGlkeXZlcnNlLCAKICAgICAgICAgICAgICAgamFuaXRvciwgCiAgICAgICAgICAgICAgIGd0c3VtbWFyeSwgCiAgICAgICAgICAgICAgIHZpc2RhdCkKYGBgCgojIERhdGFzZXQKCmBgYHtyfQpkZiA8LSByZWFkX2NzdigiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvZS8yUEFDWC0xdlN0djdQcjY5RHRSS3Y2Tnc2Z1ZCZXA4aGJUM3BFZU82QjF2Tnd4S18xRFVIZ3BvVGdidVJwWjRTdmd0SEZRbkJaSlZHZWVRVnlSdVhabC9wdWI/Z2lkPTEwODE3OTU1MTUmc2luZ2xlPXRydWUmb3V0cHV0PWNzdiIpCmBgYApgYGB7cn0KZGYgPC0gZGYgJT4lIAogIGphbml0b3I6OmNsZWFuX25hbWVzKCkKYGBgCgpgYGB7cn0KaGVhZChkZikKYGBgCgpgYGB7cn0KZGYgJT4lIAogIHZpc2RhdDo6dmlzX2RhdCgpCmBgYAoKCmBgYHtyfQpkZiA8LSBkZiAlPiUgCiAgZmlsbChwYWNpZW50cywKICAgICAgIGluaXRpYWxfdHJlYXRtZW50X2luaXRpYWxfcmV0cmVhdG1lbnRfcmV0cmVhdG1lbnQsIAogICAgICAgYWdlLCAKICAgICAgIGdlbmRlciwgCiAgICAgICBwYWlfYWZ0ZXJfdHJlYXRtZW50LCAKICAgICAgIHBhaV9iZWZvcmVfdHJlYXRtZW50LCAKICAgICAgIGFnZV80NV8xXzQ1XzIpIApgYGAKCmBgYHtyfQpnbGltcHNlKGRmKQpgYGAKYGBge3J9CmRmICU+JSAKICBtdXRhdGUocGFpX2FmdGVyX3RyZWF0bWVudCA9IGFzLmRvdWJsZShwYWlfYWZ0ZXJfdHJlYXRtZW50KSkgJT4lIAogIGZpbGwocGFpX2FmdGVyX3RyZWF0bWVudCkgJT4lIAogIG11dGF0ZShwYWlfZGlmZmVyZW5jZSA9IHBhaV9hZnRlcl90cmVhdG1lbnQgLSBwYWlfYmVmb3JlX3RyZWF0bWVudCkgJT4lIAogIGdncGxvdChhZXMoeCA9IHBhaV9kaWZmZXJlbmNlKSkgKyAKICBnZW9tX2hpc3RvZ3JhbShiaW5zID0gNSkgKyAKICBmYWNldF9ncmlkKGdlbmRlcn4uKQpgYGAKCiMgVGFibGUgMQpgYGB7cn0KZGYgJT4lIAogIHBpdm90X2xvbmdlcihwYWlfYmVmb3JlX3RyZWF0bWVudDpwYWlfYWZ0ZXJfdHJlYXRtZW50LCAKICAgICAgICAgICAgICAgbmFtZXNfdG8gPSAicGFpIiwgCiAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJwYWlfdmFsdWVzIikgJT4lIAogIHNlbGVjdChpbml0aWFsX3RyZWF0bWVudF9pbml0aWFsX3JldHJlYXRtZW50X3JldHJlYXRtZW50LCAKICAgICAgICAgcGFpX3ZhbHVlcykgJT4lIAogIG11dGF0ZShwYWlfdmFsdWVzID0gYXMuZmFjdG9yKHBhaV92YWx1ZXMpKSAlPiUgCiAgZ3RzdW1tYXJ5Ojp0Ymxfc3VtbWFyeShieSA9IGluaXRpYWxfdHJlYXRtZW50X2luaXRpYWxfcmV0cmVhdG1lbnRfcmV0cmVhdG1lbnQpICU+JSAKICBndHN1bW1hcnk6OmFkZF9wKCkKYGBgCgoKRGVhciBBbGVrc2FuZHJhCgpJIHdhcyBleGFtaW5pbmcgeW91ciBkYXRhIGFuZCBwZXJoYXBzIGl0IHdvdWxkIGJlIGludGVyZXN0aW5nIHRvIHNlZSB0aGUgYmVoYXZpb3Igb2YgZWFjaCB0cmVhdG1lbnQsIHNvIGluc3RlYWQgb2YgZ3JvdXBpbmcgdGhlbSB0b2dldGhlciwgaXQgaXMgcG9zc2libGUgdG8gc2VlIHdoYXQgaGFwcGVuZWQgdG8gZWFjaCBvbmUuIAoKQnkgZ3JhcGhpbmcgdGhlbSBsaWtlIHRoaXMgaXQgc2VlbXMsIGFzIHlvdSBjYW4gc2VlLCB0aGF0IG1vc3Qgb2YgdGhlIGxpbmVzIGdvIGRvd24sIHN1Z2dlc3RpbmcgdGhhdCBpbiBnZW5lcmFsIHRoZSBjb25kaXRpb25zIGltcHJvdmUgYWZ0ZXIuIFdoYXQgaXMgbm90IGNsZWFyIHRvIG1lIGlzIGhvdyB0aGUgNSBjYW4gZ28gdG8gMS4gCgpXZWxsLCBJIGhvcGUgaXQgd29ya3MsIHlvdSBzZWVtIHRvIGhhdmUgaW50ZXJlc3RpbmcgcmVzdWx0cy4gSW4gUnN0dWRpbyB0aGVyZSBpcyBhIHRhYiBhdCB0aGUgdG9wIHJpZ2h0IHdpdGggdmVyeSBzaW1wbGUgdHV0b3JpYWxzLCB0YWtlIGEgbG9vaywgSSB0aGluayB5b3UgY2FuIGdldCBhIGxvdCBvdXQgb2YgeW91ciBpbnRlcmVzdGluZyBkYXRhIQoKQWxzbywgc2VlbXMgdGhhdCBvbmUgZmVtYWxlIHBhdGllbnQgZ29lcyBmcm9tIDEgdG8gNSwgY2hlY2sgaGVyIGRhdGEuIAoKR3JlZXRpbmdzIQoKU2VyZ2lvCgoKIyBQcm9maWxlIHBsb3QKCgojIyBCeSBnZW5kZXIKYGBge3J9CgoKZGYgJT4lCiAgIyBoZXJlIEkgY3JlYXRlIGEgbmV3IGNvbHVtbiB3aXRoIGFuIElEIGZvciBlYWNoIHBhdGllbnQKICBncm91cF9ieShwYWNpZW50cykgJT4lCiAgbXV0YXRlKElEID0gY3VyX2dyb3VwX2lkKCkpICU+JSAKICAjIG5vdyBzZWxlY3Qgb25seSByZWxldmFudCB2YXJpYWJsZXMgZm9yIHRoZSBncmFwaAogIHNlbGVjdChJRCwgQmVmb3JlID0gcGFpX2JlZm9yZV90cmVhdG1lbnQsIEFmdGVyID0gcGFpX2FmdGVyX3RyZWF0bWVudCwgZ2VuZGVyKSAlPiUKICAjIGFuZCB0aGlzIGlzIHRoZSBncmFwaAogIGdncGxvdCgpICsKICAjIHRoaXMgZ2VvbWV0cnkgYWxsb3cgdG8gbWVyZ2UgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgcG9pbnRzCiAgZ2VvbV9zZWdtZW50KGFlcygKICAgIHggPSAxLAogICAgeGVuZCA9IDIsCiAgICB5ID0gYXMuZmFjdG9yKEJlZm9yZSksICMgdGhpcyBpcyBpbXBvcnRhbnQsIHNpbmNlIHRoaXMgbnVtYmVycyBhcmUgYWN0dWFsbHkgY2F0ZWdvcmllcwogICAgeWVuZCA9IGFzLmZhY3RvcihBZnRlcikKICApKSArCiAgIyB0aGlzIGlzIHRoZSB0aGVtZSBvZiB0aGUgZ3JhcGgKICB0aGVtZV9idygpICsKICAjIGFuZCB0aGUgYXhpcyBuYW1lcwogIHNjYWxlX3hfZGlzY3JldGUoCiAgICBicmVha3MgPSBjKCIxIiwgIjIiKSwKICAgIGxhYmVscyA9IGMoIkJlZm9yZSIsICJBZnRlciIpLAogICAgbGltaXRzID0gYygxLCAyKQogICkgKwogIGxhYnMoeSA9ICIiLCAKICAgICAgIHRpdGxlID0gIkNoYW5nZSBvZiBQQUkgQmVmb3JlIGFuZCBBZnRlciBieSBHZW5kZXIiKSArCiAgIyB0aGlzIGRpc2FnZ3JlZ2F0ZSBieSBnZW5kZXIgYW5kIHRoZSBzdGF0dXMgYmVmb3JlLCBhcyBiYXNlbGluZQogIGZhY2V0X2dyaWQoZ2VuZGVyfkJlZm9yZSkKYGBgCgojIEJ5IHRvb3RoCgpgYGB7cn0KZGYgJT4lCiAgIyBoZXJlIEkgY3JlYXRlIGEgbmV3IGNvbHVtbiB3aXRoIGFuIElEIGZvciBlYWNoIHBhdGllbnQKICBncm91cF9ieShwYWNpZW50cykgJT4lCiAgbXV0YXRlKElEID0gY3VyX2dyb3VwX2lkKCkpICU+JSAKICAjIG5vdyBzZWxlY3Qgb25seSByZWxldmFudCB2YXJpYWJsZXMgZm9yIHRoZSBncmFwaAogIHNlbGVjdChJRCwgQmVmb3JlID0gcGFpX2JlZm9yZV90cmVhdG1lbnQsIEFmdGVyID0gcGFpX2FmdGVyX3RyZWF0bWVudCwgdG9vdGhfdHlwZSkgJT4lCiAgIyBhbmQgdGhpcyBpcyB0aGUgZ3JhcGgKICBnZ3Bsb3QoKSArCiAgIyB0aGlzIGdlb21ldHJ5IGFsbG93IHRvIG1lcmdlIHRoZSBiZWZvcmUgYW5kIGFmdGVyIHBvaW50cwogIGdlb21fc2VnbWVudChhZXMoCiAgICB4ID0gMSwKICAgIHhlbmQgPSAyLAogICAgeSA9IGFzLmZhY3RvcihCZWZvcmUpLCAjIHRoaXMgaXMgaW1wb3J0YW50LCBzaW5jZSB0aGlzIG51bWJlcnMgYXJlIGFjdHVhbGx5IGNhdGVnb3JpZXMKICAgIHllbmQgPSBhcy5mYWN0b3IoQWZ0ZXIpCiAgKSkgKwogICMgdGhpcyBpcyB0aGUgdGhlbWUgb2YgdGhlIGdyYXBoCiAgdGhlbWVfYncoKSArCiAgIyBhbmQgdGhlIGF4aXMgbmFtZXMKICBzY2FsZV94X2Rpc2NyZXRlKAogICAgYnJlYWtzID0gYygiMSIsICIyIiksCiAgICBsYWJlbHMgPSBjKCJCZWZvcmUiLCAiQWZ0ZXIiKSwKICAgIGxpbWl0cyA9IGMoMSwgMikKICApICsKICBsYWJzKHkgPSAiIiwgCiAgICAgICB0aXRsZSA9ICJDaGFuZ2Ugb2YgUEFJIEJlZm9yZSBhbmQgQWZ0ZXIgYnkgVG9vdGgiKSArCiAgIyB0aGlzIGRpc2FnZ3JlZ2F0ZSBieSBnZW5kZXIgYW5kIHRoZSBzdGF0dXMgYmVmb3JlLCBhcyBiYXNlbGluZQogIGZhY2V0X2dyaWQodG9vdGhfdHlwZX5CZWZvcmUpCmBgYAoKIyMgQnkgbWF4aWxhcgoKYGBge3J9CmRmICU+JQogICMgaGVyZSBJIGNyZWF0ZSBhIG5ldyBjb2x1bW4gd2l0aCBhbiBJRCBmb3IgZWFjaCBwYXRpZW50CiAgZ3JvdXBfYnkocGFjaWVudHMpICU+JQogIG11dGF0ZShJRCA9IGN1cl9ncm91cF9pZCgpKSAlPiUgCiAgIyBub3cgc2VsZWN0IG9ubHkgcmVsZXZhbnQgdmFyaWFibGVzIGZvciB0aGUgZ3JhcGgKICBzZWxlY3QoSUQsIEJlZm9yZSA9IHBhaV9iZWZvcmVfdHJlYXRtZW50LCBBZnRlciA9IHBhaV9hZnRlcl90cmVhdG1lbnQsIHRvb3RoX2xvY2F0aW9uX21heGlsbGFyeV9tYXhpbGxhX21hbmRpYnVsYXJfbWFuZGlibGUgKSAlPiUKICAjIGFuZCB0aGlzIGlzIHRoZSBncmFwaAogIGdncGxvdCgpICsKICAjIHRoaXMgZ2VvbWV0cnkgYWxsb3cgdG8gbWVyZ2UgdGhlIGJlZm9yZSBhbmQgYWZ0ZXIgcG9pbnRzCiAgZ2VvbV9zZWdtZW50KGFlcygKICAgIHggPSAxLAogICAgeGVuZCA9IDIsCiAgICB5ID0gYXMuZmFjdG9yKEJlZm9yZSksICMgdGhpcyBpcyBpbXBvcnRhbnQsIHNpbmNlIHRoaXMgbnVtYmVycyBhcmUgYWN0dWFsbHkgY2F0ZWdvcmllcwogICAgeWVuZCA9IGFzLmZhY3RvcihBZnRlcikKICApKSArCiAgIyB0aGlzIGlzIHRoZSB0aGVtZSBvZiB0aGUgZ3JhcGgKICB0aGVtZV9idygpICsKICAjIGFuZCB0aGUgYXhpcyBuYW1lcwogIHNjYWxlX3hfZGlzY3JldGUoCiAgICBicmVha3MgPSBjKCIxIiwgIjIiKSwKICAgIGxhYmVscyA9IGMoIkJlZm9yZSIsICJBZnRlciIpLAogICAgbGltaXRzID0gYygxLCAyKQogICkgKwogIGxhYnMoeSA9ICIiLCAKICAgICAgIHRpdGxlID0gIkNoYW5nZSBvZiBQQUkgQmVmb3JlIGFuZCBBZnRlciBieSBCb25lIikgKwogICMgdGhpcyBkaXNhZ2dyZWdhdGUgYnkgZ2VuZGVyIGFuZCB0aGUgc3RhdHVzIGJlZm9yZSwgYXMgYmFzZWxpbmUKICBmYWNldF9ncmlkKHRvb3RoX2xvY2F0aW9uX21heGlsbGFyeV9tYXhpbGxhX21hbmRpYnVsYXJfbWFuZGlibGV+QmVmb3JlKQpgYGAKCgojIyBUb290aCBhbmQgYm9uZQoKCmBgYHtyfQpkZiAlPiUKICAjIGhlcmUgSSBjcmVhdGUgYSBuZXcgY29sdW1uIHdpdGggYW4gSUQgZm9yIGVhY2ggcGF0aWVudAogIGdyb3VwX2J5KHBhY2llbnRzKSAlPiUKICBtdXRhdGUoSUQgPSBjdXJfZ3JvdXBfaWQoKSkgJT4lIAogICMgbm93IHNlbGVjdCBvbmx5IHJlbGV2YW50IHZhcmlhYmxlcyBmb3IgdGhlIGdyYXBoCiAgc2VsZWN0KElELCBCZWZvcmUgPSBwYWlfYmVmb3JlX3RyZWF0bWVudCwgQWZ0ZXIgPSBwYWlfYWZ0ZXJfdHJlYXRtZW50LCB0b290aF9sb2NhdGlvbl9tYXhpbGxhcnlfbWF4aWxsYV9tYW5kaWJ1bGFyX21hbmRpYmxlLCB0b290aF90eXBlICkgJT4lCiAgIyBhbmQgdGhpcyBpcyB0aGUgZ3JhcGgKICBnZ3Bsb3QoKSArCiAgIyB0aGlzIGdlb21ldHJ5IGFsbG93IHRvIG1lcmdlIHRoZSBiZWZvcmUgYW5kIGFmdGVyIHBvaW50cwogIGdlb21fc2VnbWVudChhZXMoCiAgICB4ID0gMSwKICAgIHhlbmQgPSAyLAogICAgeSA9IGFzLmZhY3RvcihCZWZvcmUpLCAjIHRoaXMgaXMgaW1wb3J0YW50LCBzaW5jZSB0aGlzIG51bWJlcnMgYXJlIGFjdHVhbGx5IGNhdGVnb3JpZXMKICAgIHllbmQgPSBhcy5mYWN0b3IoQWZ0ZXIpCiAgKSkgKwogICMgdGhpcyBpcyB0aGUgdGhlbWUgb2YgdGhlIGdyYXBoCiAgdGhlbWVfYncoKSArCiAgIyBhbmQgdGhlIGF4aXMgbmFtZXMKICBzY2FsZV94X2Rpc2NyZXRlKAogICAgYnJlYWtzID0gYygiMSIsICIyIiksCiAgICBsYWJlbHMgPSBjKCJCZWZvcmUiLCAiQWZ0ZXIiKSwKICAgIGxpbWl0cyA9IGMoMSwgMikKICApICsKICBsYWJzKHkgPSAiIiwgCiAgICAgICB0aXRsZSA9ICJDaGFuZ2Ugb2YgUEFJIEJlZm9yZSBhbmQgQWZ0ZXIgYnkgQm9uZSIpICsKICAjIHRoaXMgZGlzYWdncmVnYXRlIGJ5IGdlbmRlciBhbmQgdGhlIHN0YXR1cyBiZWZvcmUsIGFzIGJhc2VsaW5lCiAgZmFjZXRfZ3JpZCh0b290aF9sb2NhdGlvbl9tYXhpbGxhcnlfbWF4aWxsYV9tYW5kaWJ1bGFyX21hbmRpYmxlfnRvb3RoX3R5cGUpCmBgYAoK