1 Situering

Wetenschappers onderzoeken een nieuw geneesmiddel dat is ontwikkeld om de groei van kankercellen te remmen. Het doel van dit onderzoek is om de dosis-responsrelatie van dit geneesmiddel op de expressie van bepaalde peptiden te bestuderen.
Hiervoor zetten de onderzoekers een experiment op waarbij 40 kankercellen in vitro worden gekweekt. De kankercellen worden vervolgens in 5 groepen (1,2,3,4 en 5) verdeeld, waarbij elke groep bestaat uit 8 cellen. Elke groep wordt behandeld met een specifieke concentratie van het geneesmiddel (respectivelijk 0.25, 0.98, 1.4, 10.12, 20 nmol/l). Na de behandeling worden de cellen 24u geïncubeerd en vervolgens wordt de expressie van 2 peptiden (pepA en pepB, afkomstig van 2 verschillende soorten proteïnen) gemeten met behulp van een massaspectrometer.

2 Data

De expressie van peptides wordt gemeten via een massaspectrometer, waarbij de intensiteit een maat is voor de abundantie van het peptide.

data <- data.frame(cel = 1:40, group = rep(1:5, each = 8), 
                   concentration = rep(c(0.25, 0.98, 1.4, 10.12, 20), each = 8),
                   pepA = c(0.53903031, 0.83668945, 0.73150722, 0.04758242, 
                                  1.05569492, 0.25237967, 0.79858061, 0.30402012, 
                                  4.19057655, 10.00207124, 1.15189680, 14.18709938, 
                                  3.64299323, 1.79284779, 0.78992487, 3.45530821, 
                                  24.75821757, 2.04160052, 8.93804065, 1.22949345, 
                                  9.16564751, 20.91279171, 2.13736851, 20.16839510, 
                                  34.97903014, 216.25146186, 52.83360018, NA, 
                                  76.87925384, 44.30768163, 56.12876543, 21.07390806, 
                                  182.63327882, 64.02607834, 126.71525959, 64.54102212,
                                  810.36964413, 105.64201691, 55.96835112, 173.52342097),
                   pepB = c(1.0480042, 0.4763875, 2.2259871, 0.1845394, 0.6928071, 
                                  0.7549293, 0.4103188, 1.2605083, 5.5202356,
                                  7.5744594, 6.3398971, NA, 2.1682267, 5.5115491, 
                                  4.6424738, 15.4610185, 18.2702392, 18.0317841,
                                  6.4593219, 27.8969173, 23.6455037, 28.8882159, 
                                  15.5689466, 15.8275305, 218.1058816, 190.6978574, 
                                  712.3240839, 942.3198537, 914.9005209, 141.2025639, 
                                  101.9501581, 225.3851336, 328.9863893, 1392.1280855, 
                                  468.6460232, 3081.8692608, 1119.4268196, 1751.1158002, 
                                  806.6476239, 2955.3655010))

De dataset data heeft volgende variabelen:

  • cel: identificatienummer van elke kankercel
  • group: 1, 2, 3, 4 of 5 (group 1 krijgt een concentratie van 0.25 nmol/l toegediend, group 2 0.98 nmol/l …)
  • concentration: de concentratie van het toegediende geneesmiddel in nmol/l.
  • pepA: de gemeten peptide-intensiteiten voor het eerste peptide
  • pepB: de gemeten peptide-intensiteiten voor het tweede peptide

3 Onderzoeksvragen

De onderzoekers willen de relatie tussen de dosis van het geneesmiddel en de gemeten intensiteiten van de peptiden onderzoeken. Concreet willen ze antwoord geven op de volgende vragen:

  • Heeft de dosis waarin het geneesmiddel wordt toegediend een effect op de expressie van pepA en/of pepB?
  • Is het effect van de dosis verschillend voor pepA en pepB?

Bijkomend willen ze via hun analyse een antwoord geven op volgende vraag: Als de toedieningsdosis van het geneesmiddel verdrievoudigd, met welke factor wordt de intensiteit van pepB dan gemiddeld vermenigvuldigd?

4 Bonusvraag

  • Hoe zouden de onderzoekers hun experiment kunnen aanpassen om ook rekening te houden met de natuurlijke variabiliteit in peptidehoeveelheid tussen de verschillende kankercellen?

5 Tips

  • Hou de onderzoeksvragen in je achterhoofd wanneer je data-exploratie doet.

  • Ga voor een model steeds de voorwaarden na.

  • Bedenk wel model het meest gepast is om de bijkomende onderzoeksvraag te beantwoorden

  • Je hoeft niet alle parameters te interpreteren, enkel diegene die relevant zijn voor je vraagstelling.

  • Formuleer de nulhypothese en alternatieve hypothese en interpreteer het resultaat altijd in functie van je vraagstelling.

  • Zorg ervoor dat ook je conclusie volledig is, ook al moet je daarvoor iets herhalen. Rapporteer indien mogelijk 95% betrouwbaarheidsintervallen.

6 Indienen

Dit project verloopt individueel of in groep, met maximaal 4 studenten. Per groep dient 1 student dit aangevulde Rmd-bestand in als Rmd-bestand + als html/pdf - rapport op Ufora (via “Ufora tools” > “Herkansingsproject”) met daarin een grondige data-exploratie, data-analyse, conclusie en antwoord op de bonusvraag en met vermelding van de namen van elke student in de groep. De deadline is zondag 01/09/2024 om 23u59.
Als je deelneemt aan het herkansingsproject vervangt de score voor het herkansingsproject automatisch je score voor de twee projecten uit de eerste zittijd. Indien je score op het herkansingsproject hoger is dan de score voor het opvolgen van de cursus en/of oefeningen in Dodona, dan zal de score op het herkansingsproject ook deze onderdelen vervangen.

#nulhypothese en alternatieve hypothese n0: er is geen verband tussen de concentratie geneesmiddel en de expressie van Peptide A of B n1: er is een verband tussen de concentratie geneesmiddel en de expressie van Peptide A of B

7 Nodige packages inladen

library(tidyverse) library(broom) library(gridExtra) library(ggplot2)

8 Data exploratie

9 glimpse en summary functie om een overzicht te houden van de gegevens

glimpse(data) summary(data)

10 weergave van Peptide A expressie en PEptide B expressie t.o.v. de concentratie van het geneesmiddel en opslaan voor gemakkelijke weergave van beide grafieken.

PepA_model <- ggplot(data, aes(x = concentration, y = pepA)) + geom_point() + geom_smooth(method = “lm”, se = FALSE) + labs(title = “verhouding tussen de concentratie geneesmiddel en expressie van peptide A”, x = “Concentratie (nmol/l)”, y = “Peptide A expressie”)

PepB_model <- ggplot(data, aes(x = concentration, y = pepB)) + geom_point() + geom_smooth(method = “lm”, se = FALSE) + labs(title = “Verhouding tussen de concentratie geneesmiddel en expressie van peptide B”, x = “Concentratie (nmol/l)”, y = “Peptide B expressie”)

#Voor gemakkelijke visualisatie worden de beide grafieken boven elkaar weergegeven grid.arrange(PepA_model, PepB_model, nrow = 2)

11 Data analyse

Voor beide genexpressie werk ik met een lineair model om het verband te tonen, dit omdat dit model bij beide gevallen vrij goed past: bij Pep A zijn er 2 outliers, maar deze heeft minimale impact op de grafiek. Ook bij Pep B wordt er een lineair model gebruikt, hoewel de gegevens hier meer verspreid zijn, zijn ze redelijk symmetrisch verdeeld waardoor een lineair verband ook hier redelijk accuraat is.

12 Lineair model voor peptide A

model_pepA <- lm(pepA ~ concentration, data = data) summary(model_pepA)

13 weergave van de grafiek voor Peptide A

PepA_model

14 Lineair model voor peptide B

model_pepB <- lm(pepB ~ concentration, data = data) summary(model_pepB)

15 weergave van de grafiek voor peptide B

PepB_model

#opnieuw om beide grafieken samen gemakkelijk voor te stellen grid.arrange(PepA_model, PepB_model, nrow = 2)

16 Conclusie

Zowel bij de peptide A als bij de peptide B analyses blijkt er een lineair verband te zijn tussen de concentratie van het geneesmiddel en de expressie van beide peptiden die gevormd worden. Bij de samenvatting van beide peptiden blijkt de kans op het verkrijgen van deze waarden, wanneer er in werkelijkheid geen verband is tussen de concentratie geneesmiddel en de expressie van peptide A als peptide B, enorm klein (<0,1%) wat dus minder dan 5% is en dus mag vernomen worden als een significante impact van het geneesmiddel op de expressie van beide onderzochte peptiden.

17 Antwoord op de bonusvraag

Om rekening te houden met de natuurlijke variabiliteit in peptidehoeveelheid tussen verschillende kankercellen, zou er met een mixed effects model kunnen gewerkt worden, waarbij de individuele kankercellen als een random effect worden gemodelleerd. hierdoor zou de heterogeniteit van de cellen opgevangen worden en de schatting van de effecten preciezer zijn.

#verwerkt door Alex Vandaele

LS0tDQp0aXRsZTogIkhlcmthbnNpbmdzcHJvamVjdCINCmF1dGhvcjogTHVjYXMgQmVlcmxhbmQNCm91dHB1dDoNCiAgICBodG1sX2RvY3VtZW50Og0KICAgICAgY29kZV9kb3dubG9hZDogdHJ1ZSAgICANCiAgICAgIHRoZW1lOiBjb3Ntbw0KICAgICAgdG9jOiB0cnVlDQogICAgICB0b2NfZmxvYXQ6IHRydWUNCiAgICAgIGhpZ2hsaWdodDogdGFuZ28NCiAgICAgIG51bWJlcl9zZWN0aW9uczogdHJ1ZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCBlcnJvcj1UKQ0KYGBgDQoNCiMgU2l0dWVyaW5nDQoNCldldGVuc2NoYXBwZXJzIG9uZGVyem9la2VuIGVlbiBuaWV1dyBnZW5lZXNtaWRkZWwgZGF0IGlzIG9udHdpa2tlbGQgb20gZGUgZ3JvZWkgdmFuIGthbmtlcmNlbGxlbiB0ZSByZW1tZW4uIEhldCBkb2VsIHZhbiBkaXQgb25kZXJ6b2VrIGlzIG9tIGRlIGRvc2lzLXJlc3BvbnNyZWxhdGllIHZhbiBkaXQgZ2VuZWVzbWlkZGVsIG9wIGRlIGV4cHJlc3NpZSB2YW4gYmVwYWFsZGUgcGVwdGlkZW4gdGUgYmVzdHVkZXJlbi5cDQpIaWVydm9vciB6ZXR0ZW4gZGUgb25kZXJ6b2VrZXJzIGVlbiBleHBlcmltZW50IG9wIHdhYXJiaWogNDAga2Fua2VyY2VsbGVuIGluIHZpdHJvIHdvcmRlbiBnZWt3ZWVrdC4gRGUga2Fua2VyY2VsbGVuIHdvcmRlbiB2ZXJ2b2xnZW5zIGluIDUgZ3JvZXBlbiAoMSwyLDMsNCBlbiA1KSB2ZXJkZWVsZCwgd2FhcmJpaiBlbGtlIGdyb2VwIGJlc3RhYXQgdWl0IDggY2VsbGVuLiBFbGtlIGdyb2VwIHdvcmR0IGJlaGFuZGVsZCBtZXQgZWVuIHNwZWNpZmlla2UgY29uY2VudHJhdGllIHZhbiBoZXQgZ2VuZWVzbWlkZGVsIChyZXNwZWN0aXZlbGlqayAwLjI1LCAwLjk4LCAxLjQsIDEwLjEyLCAyMCBubW9sL2wpLiBOYSBkZSBiZWhhbmRlbGluZyB3b3JkZW4gZGUgY2VsbGVuIDI0dSBnZcOvbmN1YmVlcmQgZW4gdmVydm9sZ2VucyB3b3JkdCBkZSBleHByZXNzaWUgdmFuIDIgcGVwdGlkZW4gKHBlcEEgZW4gcGVwQiwgYWZrb21zdGlnIHZhbiAyIHZlcnNjaGlsbGVuZGUgc29vcnRlbiBwcm90ZcOvbmVuKSBnZW1ldGVuIG1ldCBiZWh1bHAgdmFuIGVlbiBtYXNzYXNwZWN0cm9tZXRlci4NCg0KIyBEYXRhDQpEZSBleHByZXNzaWUgdmFuIHBlcHRpZGVzIHdvcmR0IGdlbWV0ZW4gdmlhIGVlbiBtYXNzYXNwZWN0cm9tZXRlciwgd2FhcmJpaiBkZSBpbnRlbnNpdGVpdCBlZW4gbWFhdCBpcyB2b29yIGRlIGFidW5kYW50aWUgdmFuIGhldCBwZXB0aWRlLiANCmBgYHtyfQ0KZGF0YSA8LSBkYXRhLmZyYW1lKGNlbCA9IDE6NDAsIGdyb3VwID0gcmVwKDE6NSwgZWFjaCA9IDgpLCANCiAgICAgICAgICAgICAgICAgICBjb25jZW50cmF0aW9uID0gcmVwKGMoMC4yNSwgMC45OCwgMS40LCAxMC4xMiwgMjApLCBlYWNoID0gOCksDQogICAgICAgICAgICAgICAgICAgcGVwQSA9IGMoMC41MzkwMzAzMSwgMC44MzY2ODk0NSwgMC43MzE1MDcyMiwgMC4wNDc1ODI0MiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wNTU2OTQ5MiwgMC4yNTIzNzk2NywgMC43OTg1ODA2MSwgMC4zMDQwMjAxMiwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNC4xOTA1NzY1NSwgMTAuMDAyMDcxMjQsIDEuMTUxODk2ODAsIDE0LjE4NzA5OTM4LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjY0Mjk5MzIzLCAxLjc5Mjg0Nzc5LCAwLjc4OTkyNDg3LCAzLjQ1NTMwODIxLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNC43NTgyMTc1NywgMi4wNDE2MDA1MiwgOC45MzgwNDA2NSwgMS4yMjk0OTM0NSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOS4xNjU2NDc1MSwgMjAuOTEyNzkxNzEsIDIuMTM3MzY4NTEsIDIwLjE2ODM5NTEwLCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzNC45NzkwMzAxNCwgMjE2LjI1MTQ2MTg2LCA1Mi44MzM2MDAxOCwgTkEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDc2Ljg3OTI1Mzg0LCA0NC4zMDc2ODE2MywgNTYuMTI4NzY1NDMsIDIxLjA3MzkwODA2LCANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxODIuNjMzMjc4ODIsIDY0LjAyNjA3ODM0LCAxMjYuNzE1MjU5NTksIDY0LjU0MTAyMjEyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgxMC4zNjk2NDQxMywgMTA1LjY0MjAxNjkxLCA1NS45NjgzNTExMiwgMTczLjUyMzQyMDk3KSwNCiAgICAgICAgICAgICAgICAgICBwZXBCID0gYygxLjA0ODAwNDIsIDAuNDc2Mzg3NSwgMi4yMjU5ODcxLCAwLjE4NDUzOTQsIDAuNjkyODA3MSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC43NTQ5MjkzLCAwLjQxMDMxODgsIDEuMjYwNTA4MywgNS41MjAyMzU2LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDcuNTc0NDU5NCwgNi4zMzk4OTcxLCBOQSwgMi4xNjgyMjY3LCA1LjUxMTU0OTEsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQuNjQyNDczOCwgMTUuNDYxMDE4NSwgMTguMjcwMjM5MiwgMTguMDMxNzg0MSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA2LjQ1OTMyMTksIDI3Ljg5NjkxNzMsIDIzLjY0NTUwMzcsIDI4Ljg4ODIxNTksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1LjU2ODk0NjYsIDE1LjgyNzUzMDUsIDIxOC4xMDU4ODE2LCAxOTAuNjk3ODU3NCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNzEyLjMyNDA4MzksIDk0Mi4zMTk4NTM3LCA5MTQuOTAwNTIwOSwgMTQxLjIwMjU2MzksIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMS45NTAxNTgxLCAyMjUuMzg1MTMzNiwgMzI4Ljk4NjM4OTMsIDEzOTIuMTI4MDg1NSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDY4LjY0NjAyMzIsIDMwODEuODY5MjYwOCwgMTExOS40MjY4MTk2LCAxNzUxLjExNTgwMDIsIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgwNi42NDc2MjM5LCAyOTU1LjM2NTUwMTApKQ0KYGBgDQoNCkRlIGRhdGFzZXQgYGRhdGFgIGhlZWZ0IHZvbGdlbmRlIHZhcmlhYmVsZW46DQoNCi0gY2VsOiBpZGVudGlmaWNhdGllbnVtbWVyIHZhbiBlbGtlIGthbmtlcmNlbA0KLSBncm91cDogMSwgMiwgMywgNCBvZiA1IChncm91cCAxIGtyaWpndCBlZW4gY29uY2VudHJhdGllIHZhbiAwLjI1IG5tb2wvbCB0b2VnZWRpZW5kLCBncm91cCAyIDAuOTggbm1vbC9sIC4uLikNCi0gY29uY2VudHJhdGlvbjogZGUgY29uY2VudHJhdGllIHZhbiBoZXQgdG9lZ2VkaWVuZGUgZ2VuZWVzbWlkZGVsIGluIG5tb2wvbC4NCi0gcGVwQTogZGUgZ2VtZXRlbiBwZXB0aWRlLWludGVuc2l0ZWl0ZW4gdm9vciBoZXQgZWVyc3RlIHBlcHRpZGUNCi0gcGVwQjogZGUgZ2VtZXRlbiBwZXB0aWRlLWludGVuc2l0ZWl0ZW4gdm9vciBoZXQgdHdlZWRlIHBlcHRpZGUNCg0KIyBPbmRlcnpvZWtzdnJhZ2VuDQpEZSBvbmRlcnpvZWtlcnMgd2lsbGVuIGRlIHJlbGF0aWUgdHVzc2VuIGRlIGRvc2lzIHZhbiBoZXQgZ2VuZWVzbWlkZGVsIGVuIGRlIGdlbWV0ZW4gaW50ZW5zaXRlaXRlbiB2YW4gZGUgcGVwdGlkZW4gb25kZXJ6b2VrZW4uIENvbmNyZWV0IHdpbGxlbiB6ZSBhbnR3b29yZCBnZXZlbiBvcCBkZSB2b2xnZW5kZSB2cmFnZW46DQoNCi0gSGVlZnQgZGUgZG9zaXMgd2FhcmluIGhldCBnZW5lZXNtaWRkZWwgd29yZHQgdG9lZ2VkaWVuZCBlZW4gZWZmZWN0IG9wIGRlIGV4cHJlc3NpZSB2YW4gcGVwQSBlbi9vZiBwZXBCPw0KLSBJcyBoZXQgZWZmZWN0IHZhbiBkZSBkb3NpcyB2ZXJzY2hpbGxlbmQgdm9vciBwZXBBIGVuIHBlcEI/DQoNCkJpamtvbWVuZCB3aWxsZW4gemUgdmlhIGh1biBhbmFseXNlIGVlbiBhbnR3b29yZCBnZXZlbiBvcCB2b2xnZW5kZSB2cmFhZzogQWxzIGRlIHRvZWRpZW5pbmdzZG9zaXMgdmFuIGhldCBnZW5lZXNtaWRkZWwgdmVyZHJpZXZvdWRpZ2QsIG1ldCB3ZWxrZSBmYWN0b3Igd29yZHQgZGUgaW50ZW5zaXRlaXQgdmFuIHBlcEIgZGFuIGdlbWlkZGVsZCB2ZXJtZW5pZ3Z1bGRpZ2Q/DQoNCiMgQm9udXN2cmFhZw0KDQotIEhvZSB6b3VkZW4gZGUgb25kZXJ6b2VrZXJzIGh1biBleHBlcmltZW50IGt1bm5lbiBhYW5wYXNzZW4gb20gb29rIHJla2VuaW5nIHRlIGhvdWRlbiBtZXQgZGUgbmF0dXVybGlqa2UgdmFyaWFiaWxpdGVpdCBpbiBwZXB0aWRlaG9ldmVlbGhlaWQgdHVzc2VuIGRlIHZlcnNjaGlsbGVuZGUga2Fua2VyY2VsbGVuPyANCg0KIyBUaXBzDQoNCi0gSG91IGRlIG9uZGVyem9la3N2cmFnZW4gaW4gamUgYWNodGVyaG9vZmQgd2FubmVlciBqZSBkYXRhLWV4cGxvcmF0aWUgZG9ldC4NCg0KLSBHYSB2b29yIGVlbiBtb2RlbCBzdGVlZHMgZGUgdm9vcndhYXJkZW4gbmEuDQoNCi0gQmVkZW5rIHdlbCBtb2RlbCBoZXQgbWVlc3QgZ2VwYXN0IGlzIG9tIGRlIGJpamtvbWVuZGUgb25kZXJ6b2Vrc3ZyYWFnIHRlIGJlYW50d29vcmRlbg0KDQotIEplIGhvZWZ0IG5pZXQgYWxsZSBwYXJhbWV0ZXJzIHRlIGludGVycHJldGVyZW4sIGVua2VsIGRpZWdlbmUgZGllIHJlbGV2YW50IHppam4gdm9vciBqZSB2cmFhZ3N0ZWxsaW5nLg0KDQotIEZvcm11bGVlciBkZSBudWxoeXBvdGhlc2UgZW4gYWx0ZXJuYXRpZXZlIGh5cG90aGVzZSBlbiBpbnRlcnByZXRlZXIgaGV0IHJlc3VsdGFhdCBhbHRpamQgaW4gZnVuY3RpZSB2YW4gamUgdnJhYWdzdGVsbGluZy4NCg0KLSBab3JnIGVydm9vciBkYXQgb29rIGplIGNvbmNsdXNpZSB2b2xsZWRpZyBpcywgb29rIGFsIG1vZXQgamUgZGFhcnZvb3IgaWV0cyBoZXJoYWxlbi4gUmFwcG9ydGVlciBpbmRpZW4gbW9nZWxpamsgOTUlIGJldHJvdXdiYWFyaGVpZHNpbnRlcnZhbGxlbi4NCg0KIyBJbmRpZW5lbg0KRGl0IHByb2plY3QgdmVybG9vcHQgaW5kaXZpZHVlZWwgb2YgaW4gZ3JvZXAsIG1ldCBtYXhpbWFhbCA0IHN0dWRlbnRlbi4gUGVyIGdyb2VwIGRpZW50IDEgc3R1ZGVudCBkaXQgYWFuZ2V2dWxkZSBSbWQtYmVzdGFuZCBpbiBhbHMgUm1kLWJlc3RhbmQgKyBhbHMgaHRtbC9wZGYgLSByYXBwb3J0IG9wIFVmb3JhICh2aWEgIlVmb3JhIHRvb2xzIiA+ICJIZXJrYW5zaW5nc3Byb2plY3QiKSBtZXQgZGFhcmluIGVlbiBncm9uZGlnZSBkYXRhLWV4cGxvcmF0aWUsIGRhdGEtYW5hbHlzZSwgY29uY2x1c2llIGVuIGFudHdvb3JkIG9wIGRlIGJvbnVzdnJhYWcgZW4gKiptZXQgdmVybWVsZGluZyB2YW4gZGUgbmFtZW4gdmFuIGVsa2Ugc3R1ZGVudCBpbiBkZSBncm9lcCoqLiBEZSBkZWFkbGluZSBpcyB6b25kYWcgMDEvMDkvMjAyNCBvbSAyM3U1OS5cDQpBbHMgamUgZGVlbG5lZW10IGFhbiBoZXQgaGVya2Fuc2luZ3Nwcm9qZWN0IHZlcnZhbmd0IGRlIHNjb3JlIHZvb3IgaGV0IGhlcmthbnNpbmdzcHJvamVjdCBhdXRvbWF0aXNjaCBqZSBzY29yZSB2b29yIGRlIHR3ZWUgcHJvamVjdGVuIHVpdCBkZSBlZXJzdGUgeml0dGlqZC4gSW5kaWVuIGplIHNjb3JlIG9wIGhldCBoZXJrYW5zaW5nc3Byb2plY3QgaG9nZXIgaXMgZGFuIGRlIHNjb3JlIHZvb3IgaGV0IG9wdm9sZ2VuIHZhbiBkZSBjdXJzdXMgZW4vb2Ygb2VmZW5pbmdlbiBpbiBEb2RvbmEsIGRhbiB6YWwgZGUgc2NvcmUgb3AgaGV0IGhlcmthbnNpbmdzcHJvamVjdCBvb2sgZGV6ZSBvbmRlcmRlbGVuIHZlcnZhbmdlbi4gDQoNCiNudWxoeXBvdGhlc2UgZW4gYWx0ZXJuYXRpZXZlIGh5cG90aGVzZQ0KbjA6IGVyIGlzIGdlZW4gdmVyYmFuZCB0dXNzZW4gZGUgY29uY2VudHJhdGllIGdlbmVlc21pZGRlbCBlbiBkZSBleHByZXNzaWUgdmFuIFBlcHRpZGUgQSBvZiBCDQpuMTogZXIgaXMgZWVuIHZlcmJhbmQgdHVzc2VuIGRlIGNvbmNlbnRyYXRpZSBnZW5lZXNtaWRkZWwgZW4gZGUgZXhwcmVzc2llIHZhbiBQZXB0aWRlIEEgb2YgQg0KDQojIE5vZGlnZSBwYWNrYWdlcyBpbmxhZGVuDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoYnJvb20pDQpsaWJyYXJ5KGdyaWRFeHRyYSkNCmxpYnJhcnkoZ2dwbG90MikNCg0KIyBEYXRhIGV4cGxvcmF0aWUNCiMgZ2xpbXBzZSBlbiBzdW1tYXJ5IGZ1bmN0aWUgb20gZWVuIG92ZXJ6aWNodCB0ZSBob3VkZW4gdmFuIGRlIGdlZ2V2ZW5zDQpnbGltcHNlKGRhdGEpDQpzdW1tYXJ5KGRhdGEpDQoNCiMgd2VlcmdhdmUgdmFuIFBlcHRpZGUgQSBleHByZXNzaWUgZW4gUEVwdGlkZSBCIGV4cHJlc3NpZSB0Lm8udi4gZGUgY29uY2VudHJhdGllIHZhbiBoZXQgZ2VuZWVzbWlkZGVsIGVuIG9wc2xhYW4gdm9vciBnZW1ha2tlbGlqa2Ugd2VlcmdhdmUgdmFuIGJlaWRlIGdyYWZpZWtlbi4NClBlcEFfbW9kZWwgPC0gZ2dwbG90KGRhdGEsIGFlcyh4ID0gY29uY2VudHJhdGlvbiwgeSA9IHBlcEEpKSArDQogIGdlb21fcG9pbnQoKSArDQogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNlID0gRkFMU0UpICsNCiAgbGFicyh0aXRsZSA9ICJ2ZXJob3VkaW5nIHR1c3NlbiBkZSBjb25jZW50cmF0aWUgZ2VuZWVzbWlkZGVsIGVuIGV4cHJlc3NpZSB2YW4gcGVwdGlkZSBBIiwgeCA9ICJDb25jZW50cmF0aWUgKG5tb2wvbCkiLCB5ID0gIlBlcHRpZGUgQSBleHByZXNzaWUiKQ0KDQpQZXBCX21vZGVsIDwtIGdncGxvdChkYXRhLCBhZXMoeCA9IGNvbmNlbnRyYXRpb24sIHkgPSBwZXBCKSkgKw0KICBnZW9tX3BvaW50KCkgKw0KICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzZSA9IEZBTFNFKSArDQogIGxhYnModGl0bGUgPSAiVmVyaG91ZGluZyB0dXNzZW4gZGUgY29uY2VudHJhdGllIGdlbmVlc21pZGRlbCBlbiBleHByZXNzaWUgdmFuIHBlcHRpZGUgQiIsIHggPSAiQ29uY2VudHJhdGllIChubW9sL2wpIiwgeSA9ICJQZXB0aWRlIEIgZXhwcmVzc2llIikNCiAgDQojVm9vciBnZW1ha2tlbGlqa2UgdmlzdWFsaXNhdGllIHdvcmRlbiBkZSBiZWlkZSBncmFmaWVrZW4gYm92ZW4gZWxrYWFyIHdlZXJnZWdldmVuIA0KZ3JpZC5hcnJhbmdlKFBlcEFfbW9kZWwsIFBlcEJfbW9kZWwsIG5yb3cgPSAyKQ0KDQojIERhdGEgYW5hbHlzZQ0KVm9vciBiZWlkZSBnZW5leHByZXNzaWUgd2VyayBpayBtZXQgZWVuIGxpbmVhaXIgbW9kZWwgb20gaGV0IHZlcmJhbmQgdGUgdG9uZW4sIGRpdCBvbWRhdCBkaXQgbW9kZWwgYmlqIGJlaWRlIGdldmFsbGVuIHZyaWogZ29lZCBwYXN0OiBiaWogUGVwIEEgemlqbiBlciAyIG91dGxpZXJzLCBtYWFyIGRlemUgaGVlZnQgbWluaW1hbGUgaW1wYWN0IG9wIGRlIGdyYWZpZWsuIE9vayBiaWogUGVwIEIgd29yZHQgZXIgZWVuIGxpbmVhaXIgbW9kZWwgZ2VicnVpa3QsIGhvZXdlbCBkZSBnZWdldmVucyBoaWVyIG1lZXIgdmVyc3ByZWlkIHppam4sIHppam4gemUgcmVkZWxpamsgc3ltbWV0cmlzY2ggdmVyZGVlbGQgd2FhcmRvb3IgZWVuIGxpbmVhaXIgdmVyYmFuZCBvb2sgaGllciByZWRlbGlqayBhY2N1cmFhdCBpcy4NCg0KIyBMaW5lYWlyIG1vZGVsIHZvb3IgcGVwdGlkZSBBDQptb2RlbF9wZXBBIDwtIGxtKHBlcEEgfiBjb25jZW50cmF0aW9uLCBkYXRhID0gZGF0YSkNCnN1bW1hcnkobW9kZWxfcGVwQSkNCg0KIyB3ZWVyZ2F2ZSB2YW4gZGUgZ3JhZmllayB2b29yIFBlcHRpZGUgQQ0KUGVwQV9tb2RlbA0KDQojIExpbmVhaXIgbW9kZWwgdm9vciBwZXB0aWRlIEINCm1vZGVsX3BlcEIgPC0gbG0ocGVwQiB+IGNvbmNlbnRyYXRpb24sIGRhdGEgPSBkYXRhKQ0Kc3VtbWFyeShtb2RlbF9wZXBCKQ0KDQojIHdlZXJnYXZlIHZhbiBkZSBncmFmaWVrIHZvb3IgcGVwdGlkZSBCDQpQZXBCX21vZGVsDQoNCiNvcG5pZXV3IG9tIGJlaWRlIGdyYWZpZWtlbiBzYW1lbiBnZW1ha2tlbGlqayB2b29yIHRlIHN0ZWxsZW4NCmdyaWQuYXJyYW5nZShQZXBBX21vZGVsLCBQZXBCX21vZGVsLCBucm93ID0gMikNCg0KIyBDb25jbHVzaWUNClpvd2VsIGJpaiBkZSBwZXB0aWRlIEEgYWxzIGJpaiBkZSBwZXB0aWRlIEIgYW5hbHlzZXMgYmxpamt0IGVyIGVlbiBsaW5lYWlyIHZlcmJhbmQgdGUgemlqbiB0dXNzZW4gZGUgY29uY2VudHJhdGllIHZhbiBoZXQgZ2VuZWVzbWlkZGVsIGVuIGRlIGV4cHJlc3NpZSB2YW4gYmVpZGUgcGVwdGlkZW4gZGllIGdldm9ybWQgd29yZGVuLiBCaWogZGUgc2FtZW52YXR0aW5nIHZhbiBiZWlkZSBwZXB0aWRlbiBibGlqa3QgZGUga2FucyBvcCBoZXQgdmVya3JpamdlbiB2YW4gZGV6ZSB3YWFyZGVuLCB3YW5uZWVyIGVyIGluIHdlcmtlbGlqa2hlaWQgZ2VlbiB2ZXJiYW5kIGlzIHR1c3NlbiBkZSBjb25jZW50cmF0aWUgZ2VuZWVzbWlkZGVsIGVuIGRlIGV4cHJlc3NpZSB2YW4gcGVwdGlkZSBBIGFscyBwZXB0aWRlIEIsIGVub3JtIGtsZWluICg8MCwxJSkgd2F0IGR1cyBtaW5kZXIgZGFuIDUlIGlzIGVuIGR1cyBtYWcgdmVybm9tZW4gd29yZGVuIGFscyBlZW4gc2lnbmlmaWNhbnRlIGltcGFjdCB2YW4gaGV0IGdlbmVlc21pZGRlbCBvcCBkZSBleHByZXNzaWUgdmFuIGJlaWRlIG9uZGVyem9jaHRlIHBlcHRpZGVuLg0KDQoNCiMgQW50d29vcmQgb3AgZGUgYm9udXN2cmFhZw0KT20gcmVrZW5pbmcgdGUgaG91ZGVuIG1ldCBkZSBuYXR1dXJsaWprZSB2YXJpYWJpbGl0ZWl0IGluIHBlcHRpZGVob2V2ZWVsaGVpZCB0dXNzZW4gdmVyc2NoaWxsZW5kZSBrYW5rZXJjZWxsZW4sIHpvdSBlciBtZXQgZWVuIG1peGVkIGVmZmVjdHMgbW9kZWwga3VubmVuIGdld2Vya3Qgd29yZGVuLCB3YWFyYmlqIGRlIGluZGl2aWR1ZWxlIGthbmtlcmNlbGxlbiBhbHMgZWVuIHJhbmRvbSBlZmZlY3Qgd29yZGVuIGdlbW9kZWxsZWVyZC4gaGllcmRvb3Igem91IGRlIGhldGVyb2dlbml0ZWl0IHZhbiBkZSBjZWxsZW4gb3BnZXZhbmdlbiB3b3JkZW4gZW4gZGUgc2NoYXR0aW5nIHZhbiBkZSBlZmZlY3RlbiBwcmVjaWV6ZXIgemlqbi4NCg0KI3Zlcndlcmt0IGRvb3IgQWxleCBWYW5kYWVsZQ==