Functions and Loops
- Use these when you want to run the same code many times on different things.
Syntax for functions:
function_name <- function(inputs,inputs,inputs){
# do stuff
.
.
.
return(output)
}
Syntax for loops:
for(A in B){
# do something
}
Usage example:
# example of a function to get the hypotenuse of a triangle from the short and middle side
get_hypotenuse <- function(shortside, middleside) {
# shortside and middleside are the inputs (arguments)
hypotenuse_squared<-shortside**2+middleside**2
hypotenuse<-sqrt(hypotenuse_squared)
return(hypotenuse)# hypotenuse is the output
}
shortsides <- c(3,4,5,8,1,3)
middlesides <- c(8,10,12,14,2,1)
# now lets run it multiple times in a loop
# make an empty vector to store the hypotenuses
hypotenuses <- c()
# we use these 'i' values as indexes to refer to items in our two vectors shortsides and middlesides
for(i in 1:length(shortsides)){
# run our function
hypotenuse <- get_hypotenuse(shortsides[i],middlesides[i])
# update the hypotenuse vector, so it contains the hypotenuses we've already calculated, plus the one we just calculated in this iteration of the loop
hypotenuses <- c(hypotenuses,hypotenuse)
}
# after the loop the hypotenuses vector will be full
Categorising functions
A function for categorising the environment, based on the length of the maximum growing season (mgs).
environment <- function(mgs) {
if(mgs < 4) {
return("dry")
} else if(mgs < 8) {
return("typical")
} else {
return("fertile")
}
}
Data visualisation
We use ggplot()
. These plots have a basic structure like this:
data %>% ggplot(aes(x=colA,y=colB,colour=colC)) +geom_point()/geom_line()/geom_col()
Optional extras:
+labs(x="X axis title",y="Y axis title",colour="Legend title",title="Plot title",caption="Caption for plot")
[if you use fill
instead of colour
, then you will use fill="Legend title"
]
+theme_classic()
# this is a nice theme
- If you are printing in black and white, you can use
shape
instead of colour
When to use which type of graph?
If you have a lot of x values:
geom_point()
is good when your observations come from different sources, e.g. the number of covid deaths in people of different ages, and you want to communicate the relationship between your x and y values
geom_line()
and geom_smooth()
are better for plotting multiple observations from a single source, e.g. the number of covid cases in a country over multiple weeks, where you want to communicate the change in your y value over time
If you have only a few x values:
geom_col()
is good for when you have only one y observation per x value
geom_violin()
is good when your x values are larger categories with multiple y observations per x value, and you want to compare the distribution of the y values between the different groups
geom_histogram()
is used to examine the distribution of a single variable. It’s more used in the methods section of papers rather than the results, for example to show what your sample of data looks like.
geom_histogram()
Below is a histogram showing the distribution of diamonds in the diamond dataset by their carat.
diamonds%>%
# just put the variable you want to examine the distribution of
ggplot(aes(carat))+
geom_histogram()+
theme_classic()+
labs(title="Distribution of diamonds by carat")
![](data:image/png;base64,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)
Most of the diamonds in the dataset are less than 1 carat.
geom_point()
With colours:
MGS_nettle%>%ggplot(aes(x=Population,y=Langs,colour=MGS_category))+
geom_point()+
labs(x='Population (in millions)',y='Number of languages',colour="Environment")+
theme_classic() # a nicer presentation than the default ggplot theme
![](data:image/png;base64,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)
With shapes:
MGS_nettle%>%ggplot(aes(x=Population,y=Langs,shape=MGS_category))+
geom_point()+
labs(x='Population (in millions)',y='Number of languages',shape="Environment")+
theme_classic() # a nicer presentation than the default ggplot theme
![](data:image/png;base64,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)
Adding labels to points
geom_text()
and geom_text_repel()
can be used to add labels to points on your plot. You will need to install and load the library ggrepel
to use geom_text_repel
, which positions the labels nicely so they don’t overlap with anything, and you’ll need to add an argument label
to your aes()
function in ggplot()
, to specify which column to get the labels from.
library(ggrepel)
MGS_nettle%>%
sample_n(15)%>%
ggplot(aes(x=Population,y=log10(Langs),label=Country)) + geom_point(aes(colour=MGS_category)) + geom_text_repel()+theme_classic()
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAAGwCAMAAAB8TkaXAAAA/1BMVEUAAAAAADoAAGYAOmYAOpAAZrYAv8QzMzM6AAA6ADo6AGY6OmY6OpA6ZrY6kNtNTU1NTW5NTY5NbqtNjshmAABmADpmAGZmOgBmOpBmZgBmZmZmkJBmtrZmtttmtv9uTU1uTW5uTY5ubo5ubqtuq+SOTU2OTW6OTY6Obk2OyP+QOgCQOjqQOmaQkDqQkGaQtpCQ27aQ29uQ2/+rbk2rbm6rbo6ryKur5OSr5P+2ZgC2Zjq225C22/+2/7a2/9u2///Ijk3I///bkDrbtmbb/7bb/9vb///kq27k///4dm3/tmb/yI7/25D/27b/29v/5Kv//7b//8j//9v//+T////CIsPCAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAZ3klEQVR4nO2dDX/bRLaHndw4dbK9NhQXuqVrYGnhNoWUTWFvDNxNI8BtVEEcR9//s9w58yKNZEmWbb3Mkf7Pr40t24pk5/HoaGZ0ziAEgCmDtncAgF2BvIAtkBewBfICtkBewBbIC9iyvbzQHThCgYq3X0wmL+W9d5PJ5OPrzWsA0CT5Kt59cxnefnlJd9++LLUGAI2Sr+KHT0Kt7f2Pl6XWAKBRilWk1lf8fDHRAcQDAeQFjlCo4v2b53RDwUPc+kJe4AhFKt69eB4vRHEv5AWOUNjbYJ+nQV7gGvkqxu5+ePQ+vP8JXWXAMfJVpM5dcZ52+9U13f3ocvMaADQKRtgAWyAvYAvkBWyBvIAtkBewBfI2zfHxcdu70BUgb8McH8PeqoC8DQN5qwPyNgzkrQ7I2zRwtzIgL2AL5AVsgbyALZAXsAXyArZA3r3xBoPBwUXbe9FHIO+erM6OFiTwrO0d6SGQd0/m5K6wV910jZubm7Z3oQDIux/LadzkBiMRQIzD4OS1uDOmpRm1zIPB4VUYnH4vbmhhGKoHxa16pcNt9s2N0/ZC3v0ITqJoV3rsHV4FI9EKewP6QboOZbMcjIbk7DDxX71SqO0qkLfTBKeRen9R4CBkDkYzaoVncsEnNYXWclkuiB/m1ryoxf0vBvJ2moR6vux3kA+ZH9QVQcGEXPYpMCaj9W38Sldx2l3Iuycm5l0+vlhODy6SSpK8+kSOqbxuA3n3RNspIleppJ9qeX3dA6zkpQUKG/Qt5N0PyLsncT8vKRmMUvLKp43RaydskHcvIO/ezM0Im7hz8IM4N7Pllb1iKpwIoy6yuKsM8u4D5AVsgbw9JRjJ/uXldG1okM+hAPL2FIrO5Q3jcW3I21OC0dOxuPGeQl7AjWD07MkiXL06F/Lq+ReeaIuX07E5zbTOLB0F8vaUYPSP767C4OFvRwsz/yKcD+mf7OAbyuEX06fnKJC3pwSjmTcL/bF/tDDzL2iW2+lVNPQXxpMxWt7XPCBvTxHy+qKhnQl5zfwLPafeTCcK4/Hslvc1D8jbU4S8yye/f0qD2vFE+rkeOoG8wGVoOubP50Py08y/EAHC/8ngIQ4b9CSMFvezCMjbU0heT4QKPp2wqfkXFPaq6ULpSRiOAnl7CslLDayvu8pEGzuXd4foKgOgdiAvYAvkBWyBvIAtkBewBfICtkBewBbIC9gCeQFbIC9gC+QFbIG8gC2QF7AF8gK2QF7AFsgL2AJ5AVsgL2AL5AVsgbyALZAXsAXyArZAXsAWyAvYAnkBWyAvYAvkBWyBvIAtkBewBfICtkBewBbIC9gCeQFbIC9gC+QFbIG8gC2QF7AF8gK2QF7AFsgL2AJ5AVsgL2AL5AVsgbyALZAXsAXyArZAXkdZTod04x9e5b0iOLlobnecBPI6ynI6mIWQtxDI6yjL6ecPF5C3EMjrKMvpbD5W8q7OBgNxE5ycDwZHQuhgNBgMxpAX8rqKkDc4vSJ5V2ci+vWOFsFI3RfPiOXDK8gLeR2FFPXGJK+MHMjl0UzGCn+JxpduIS/kdRSSd/n4QpjrDSRjKatsdn2xeAB5Ia+rqOBgSPJSnBvqEzTx8HJ6cIGWl4C8jiLlXb06F2HDgZJUhQ2nVz7J7KPlhbzOIuUVAQKdpAlbSVZ9wkYyByPIC3mdRckbznVXmYwUzgcDGnabi8UfxAkc5G1gDVAJkDUN5GUD5E0DedkAedNAXmc5Pj5uexccp0DF2y8mk5fy3t2LyaP3JdYAFXJ8DHs3kK/i3TeX4e2Xl+Le/ZuX4btPNq8BqgTybiRfxQ+k61tqeu++vQ5vv7reuAaoEsi7kWIVqfUV8cPX7/W9BwLI2xBwdxOFKt6/eU43Hx4ZeTeuAUBzFKl490K6a7W8m9YAoEEKextUXwNiXuAm+SpG7srooXu9DQgp2ZOv4rsJ8ZKa3C728+Jknj+9HWGDvPyBvIAtvZUXMS9/+isvYA/kBWyBvPvhyavQrQf+/HX9RSr5wvp8XMzQ3Q/Iuw/y2kgh8Cx6JNPHPHnBfkDefZirlAoms0KYL29wCnkrp9PyWsd0bzAOQ3kdrsw+U83v11f4SuhXD2UOvLHJjKdfMzg4P7xaPlkEJ/86ow17dAW7vA6YMoecfj9Qy/npIEEOHZbXPqavzp6SHCtpj0rfUQFWW0oJFeg/PWQy49Hjy+lY/JdiiqfoQbEP1ouD0TBMrADK02F57WO6f/gLCavlDefDSrZAaRw1MhueDmxNZrzocc/IS8+K/9aL5ffIXgGUp7vyJmSYH/1xNqxe3rjllTmYtJ6eFZvIr46SXDxF2xePWC+Wv8KrNJjpD92V1z4/ooO3J3PPSEH8QTWNnPl+UDZHW14rAEjKKxz/Q+zCmryIGHaiw/LGx3R5XKYDtDlhq+oAra3zdDY8EzZYHb8mQgiVvMvHryljdPxiKa9/gH6IXeiwvFbLOx+aU6oxna5VdnyOzwnNORg1xiYzHr2CivrEJ2yUZ2yYOLuTD9orgPJ0V17rmL6cyvaWuqTI26qiBmJueuN075e0U2fG07shu8pCLa+vOz+irrITszLc3Zruymsd0/XZ/mimY945+lQ7QYfljY7pshtVHqyjft5qehtAu3RY3uiYbsYkvIN/6a4yD91SXaDT8joKpsFXBORtHFyAVBWQt3Egb1VA3sbJkhc67wLkbZ5Md2Hv9kBeF4C8OwF5XQDy7gTkdQK4uwuQF7AF8gK2QF7AFsgL2JJQsdS1VJAXOEKs4nJqrPUKJ0ZD3srx9KVJSEuyHZGKy0+tCdqJhbw1QDWszuR1bqLpgLzbgZi3ddTlmXThB+TdDsjbNiaXREhhw7mOH0by1CM4eT2yl0GShIrL6UxEvhsu8IK81WIlRwlGRwu65k4+JG7Ty23uposkVJwP5eWKxRd4Qd5qkbECNa0HKveTWP5roR5PL7e9q65hqyi+4HStol/8FYe81WJaXnMdvL5CXsqcWm55T50jJS/lRYK8jWJiXkve5fTgImu55T11DltF8TFS2pYNWeggb8XoYNaSVeYy8w/WltveU9dIqCgir6HJDFpuDVABc9XPq7vKSFZ5vb4lr15ue0c3EozkF3E5lQ55UVq4tcodabIqeWwGXWUO4NsjbPRjLv7WP0xn6eW293Mj+hsme0nisRd1bClKsrVjSAR5QXUEo6eycMFTShwYjb2szqS2BYf0CuTV+egGKmNcmTUAsAlGz56INvfVORkbDapYd+OHlGRq9CVZyYNSE1IiWJONkKp2/J1evNaHm5xVptYd6+Re2UBekEcw+sd3V2Hw8LejhZ2Y3k8PD5pksNFojFXJw1TxiPLAUmI5X2YGT8cdqa4yuSlZNSx3ByEvyCMYzbxZ6I99c/I50idqXvJwbsKEaDTGquRhqnhEhTtopIbUtLOFKyAvqA4hmj8M5zM/bnmjcFZ3QUhiv+LRGDOZ3BRCsAslyJBhfeQ3M2woLJIAeUEeQt7lk98/JfGssRfzpFV+Rstrj8YY57LlDU7/sxY1pFTUfTYeJqODXaBD/M/nQ1kxJjX2kpDX3LVHY8wgjAkX7CofFCV/vhY1oKsMVAjJS7mPpZTR2Es4P7jQlRI15mTMjL7YlTzWTtiU6F5GFxjkBdVB8qqKXRQC+IkRtkSHQ1zBQ42+2JU8TBWPuHCH+dVp0sPDqvBI0Q5CXlA7/tpJ13pfQ3piTplSDZAX1AmFEhkmehkXkmR0lW0A8oId0Uf2DTOTvYwhXjlbYo1kywt5ASMSKm6Yhp6xBgDtkTUxBydsgAXoKgNsgbyALejnBWxJXYC5Optt6jCDvMAR0v2883HG6EbuGgC0SFpeD0lHABfS6Z6EuUWTedNrANAeCRVpAvF8U1ohyAscAV1lgC0ZKiLmBTyAvIAtkBc0SbmZiyWBvKAObm5uMh+HvMB1bm6y7F1OB//12Sz422eHf5+FwcPibKQlgLygBrLlpeHbwYwupfTH9G9f4jpsUZY9TMwB+5IpL1X3E2EDXUq5fLL4ef90w+jnBXWQ1fDKC4DnUt7Vqx+e7B01QF7QGFbLG3pPKygrh/KtoDF0zEvyVlIeJlE4W/dioHA2qIXVmextIHlX31VQEjE5q0xnmSy/BgA7Efx3Bb8EMS9ogcI8pKWBvIAtloo6NXVBxaH0GgC0SaziPMpWjQqYgAXWCJtpcTE8vCd5k1JAxUDeyske1wfVY4UN+rpLhA17AnmbwlLRxwlbJUDepkBXWfXA3YaAvIAtkBewBfICtuBKCsAWe3i4TEUKyAt2ZXVmT1gMTq/Uv91/oa3ivDjDXsYaAGRzfHy89lhSVLVUmbx1reEKWR/oNujE8dnTnc2lAZVcIsCe4+P1D5vKsl6IH+IAH/ztMwpPf1Etr3psB3okb9YHuj1+zkxUSGuT+VmTqPMxpYCWNYqjsEE9tgOQdzuoJnkmkNcmT97l4wu6QJKUjeTVj+2wlaw6bOvVM/PWYEUl8sqJozJ+GAtfX4s7Y1qiYufng4E4aSCJ9fN9JifmlYodXCTlnW6s6JpDQkXZ3yDalsIK2mzl3TvmDUN5vFMT8MRnJQviemSsXqDPTchrnq9in7sEiapa2KS8O7W6REbhbP/wqmhWJF9590d9q/+iThkhqTRZ/TAL4vbkwjzf8s46h45v/aNFQt4SRXxyKJT39qtr+cS7yWTy8XXGGn3DNKe+OviRn+aH7PMRn6Bc9nc9EFZAFWel9aB7FsQHI5PmnFm9Dbt9WJlhQ6hqqnwwxr59mbdGv5CtK31C9Pmf5Mprnm9lH6vpU+FBUkVfzedVFya//ejfquW9//Eyd40+YU4F5DHOT7e88a15vpWd7K+8KXTYcPdChA2y8X0g6K+8UdBADesoLW98wmaeb2UnIa9Gy3v75aXV+rooL9XgIkwLmKaaY/jc9COKOwc/6PA2bnHPZRcjLevnK9jkDvTH3ZSKXnL405ywEVHc67K8Ic7y+0T2CZsG8gKXye4q0w9oeT88eh/e/+RyV1kibFAjXTQBT84BOf1+cPgLhr26yEZ56f+7yeSjy6w1XMGWV584ya4B72gRjFQgimGv7lEYNmxewxES8qqRLv9Q97vqZQx7dY/CE7YSa7iBLa8eLNBpA8dxl0Cbw1474+Xt9J+/pr+KnvrLmdTgPfiidmNKZJa8erTcyNvqsNfOyGOhn5EHRk5eS7yb1dlTfbBpbvdapnvyalnNCFe03Oaw167oepEZ12ety+sf/qIjpMZ2r226cfVw5gmb+ItbY7itDnvtitUFSJ0nw+i7qCYSU8dK1CrPj/6gAT7xxDDqYdErdbWnpSstbxTgmpEu+ZiJFFof9toV3zhnOlDsqRRqPnGUVnks76snlOa0AoURXe1p6Ya8HcZTF7bIzhPxIymvFSbQC+SlYdYT5rmu9rRAXvdZTo8WMmRPTl6LDyrEfBhGTXMUKkWNLcuelo1AXgaY880CefUpi2qa0/Ly7GnZDOR1GS2c6TxJhw2WvCqiFfGC/UQUUnDsaSkB5HWaORlnTtbU+ddY3B7I0W5LXj1PXtzY8pqVWPa0lADyuk005mn3ej17TJ0nQ0tefYFS6B28tptksxLLnpbNQN4a0T14m5IZbahgA/KAvDVijTEUAXl3BPLWCOStF8hbI7mju/HUeMpZcH54FT1PA7tQuSSQt0Ziec1AbTzHTQ3YUufBcnp4FY3+jnZKl9hTIG+NmBO2cTJ7rzU1XkYMnk5RRN24o851CdQI5K2RuOU1YW16arycdRycXiUG0EBJIG+N5MtrBmwh7z5A3hqJ5U2HDWbA1oQLidFfUBLIWyPJEzZ7dNcM2FKV8sQJG+TdAshbI+aE7eAiY3RXDdimu8og7xZAXsAWyAvYAnkBWyBvM/Qo8WhzQN5G6FPK5+aAvI0AeesA8jYC5K0DyFsZNzc3+U/C3RqAvFVxc1NoL6geyFsVkLdxIG9VQN7GgbyVAXebBvICtuwjb2bKecyLAk2xh7y5KecBaITd5c1POQ9AI+wjb+IaF1nLRGWTV1nnZ1E2eZOFXj2oi/sBsC97hA1Ryvm48PkwKguhkhKo5ARqeaAeNMX9qnsLTUGX7IS40swh9upt0CnnY3lniVuTnEAtp4r7VfcWmmI5lfE9kjM5w75dZZRyPpHL2Lo1yQniZbrY2+ThYMdy+vnDBeR1iL37eTOkTScnSMrLMWKQiMPFfByFDXTl5OvTq0R9bljdLLvLG6ecz5PXJCdIyMs3uzwVMha2KnntJGNRfW7QLHu0vFHKeZOMYE1enZwgIa8p7lfpu2gECtS9sZY3kWTM1OcGzbLvCJsMXnUygrWYVycnSMhrivvxQ5bje3yh5DV5mhL1uUGzYG5DaVTP3zAlr12fGzQL5C2NlHf16jwOG0ySsRDytgLkLY3qnPYHqRM2qz43aJbK5O3+RVp6ZGUed5WZJGPdrC/pPlXJ28vLY322fdbdAPLuhi8zP6Jvt1Ug747oeR2gRRDzAragtwGwBfICtkBewBbIC9gCeQFbIC9gC+QFbIG8BZir+1FX1U0gbwFxagpMvHERyFsA5HUbyFtAImw4H1DalDnNZ/CGJhkQaBPIW4At7+hoQbPIfDmFd2aSAbW8gz0H8haQkHemc1HM6NI1kwyo3f3rO5C3AFveU52lSoQMHoUOflZyYtAokLeALHmD0/+czUKTDKjlHew5kLeAdD+vSjvxOaXN0cmAWt7BngN5C8g4YaNLKIbKW0oG1O7+9R3IWwBdGazT4ciuMnnZj0rspJMBtbyDPQfybouMfoELQN5t8TA04QqQt4CMsoCyRAFwA8ibDwqyOg7kzQfyOg7kzQfyOg7kLQDuug3kBWyBvIAtkBewBfICtkBewBbIC9gCeQFbIC9gC+QFbIG8gC2QF7AF8gK2QF7AFsgL2AJ5AVsgL2AL5AVsgbyALZAXsKVQxduvruXt3YvJo/el1gCgOYpU/DD5WMp7/+Zl+O6TMmsA0CAFKr796N+q5b379jpqhCEvcIYyYcPt1+/Du28uxb0HAsgLHKGMvB8eGXk3rgFAc2zX8m5cA4DmKCMvYl7gJGXkvX/zHL0NwD02ykv/He/nDUaymt9ympM6l+qg/Plr5sOAM10YYdOVTYryPkPULtINeZ9Sqn3vKeTtF92Q99mTRbh6dS7k1QWtTdm04PT7weEvJ69H8kHzHC3O5GtQ/5oz3ZD3H99dhcHD344WpqB1JO9oGNUAjJ6j8EK9BvWvWdMNeWfeLPTH/tHCFLSO5Z1Fy9Fz8WOof82ajsjrD8P5TNVUlQWtI3nt26znUP+aMR2Rd/nk90+vfAobVEHrLHkznkP9a9Z0RN7w5/MhVbM2Ba2z5M14DvWvWdMVeb3BWMqrC1ovp+NwdRaLSmdm5jlbXtS/5kxX5DVNqyloTX1gzx5HoorHh+Y5uzVG/WvOdEFe0FMgL2AL5AVs6aC8qFvZF7onLyoG9wbIC9gCeQFbuicvYt7e0EF5QV+AvIAtkBewBfICtkBewBbIC9gCeQFbIC9gC+R1jOPj47Z3gQ2Q1y2Oj2FvaSCvW0DeLYC8bgF5twDyVotnJzHRGSFWZ9nZ0DITRsDd8kDeSpF5z/xB8nLkreQF5YG8VbI6k9rOk7lWIW9NQN4qiTXVuVWTYUNGjlV/MESe1V2BvJXiGwtNblW6b+TNyLFK+VKQZ3VXIG/F0BnbUGXxScu7nmP19WgcP9ziTjMF8lYPVXaJ8kyFdjCRyrEqg4cQeVZ3BfLWgJWekhbjsCGVY3U0o1M75FndFchbJVrBHHkzcqxSNkvkWd0VyFspc3JwdTYMM+Vdz7EaegfIs7ozkLda6HyNOhyS8g7Uoxk5VldnRwvkWd0RyAvYAnkBWyAvYAvkBWzZQd76edDANrCVvbZSg4rb48ZepHiArfR4K+WBvNiKY1spD+TFVhzbSnmclBeAMkBewBbIC9gCeQFbIC9gi1PyfphMPr6W9+5eTB69r30r7ybR3Rq4f/NS3tb5XuKt1Ple4t9d73vZFpfkvf3qOnz3Cd2jv4i6V+dWwrcv69mE4t1E/vo630u8lVrfS/S7a34v2+KSvASpJb7g317re3Vu5f7Hy9q2ILbxz/+Rf/N634vZSp3vJf7ddf9dtsQ1edX3+vbr9+HdN/X9OdRWxDFwMqmrwbr/8X/VAb3W9xJtpc73Ev/uuv8uW+KWvLdffCQ/mQ+P6vyQzFZuv7ysr8V691xHo7W+l2grdb6X+HfX+3fZGrfkDfVHU/c33PrdNcWK4h3c19/yxluR1B73ouUtRn5ItcdW8Z+5pj84naBPJs/Det9LvBVJ7fIi5s0lPijdv3le21ltvBW6d/9T3V1ldb6XeCt1vpf4d9f8XrbFJXmpIRHRKH216+xPjLei7tUFaVX3e4m3Uud7aebvsj1OyQvANkBewBbIC9gCeQFbIC9gC+QFbIG8a+i8eAVpG+1kun/+ity6bQF519AZSQuqRFi2QtwWgbxraHmX+UlHIa8bQN41LHkpgpBVfc4Hg6NFaCfWVfWn6OdY5dnVr3xtCk2A2oG8a2h554dXlOJcpjkfqfuJfPy6LNWJrCcRv1JVqWr7PfQDyLuGPmETBvqyGCsVTpslCk2If1FZKiVv+pVtv4d+AHnXsCpPUakTI+0ymY/fKktF8tqvhLwNAXnXKCWvXZYK8rYE5F3Dkpf6eqNg4PTKktcuS0WL5pWQt0Eg7xqxvOkTNqqatjqTxpr6U3TiZp+wQd4GgbxrxPImusrErewfe/ZYNrem/tR8MEx0lUHe5oC8JYCNbgJ5SwB53QTylgDyugnkBWyBvIAtkBewBfICtkBewBbIC9gCeQFb/h8GmzIl0o8/hQAAAABJRU5ErkJggg==)
geom_line() and geom_smooth()
Use geom_line()
for a jagged line:
weird_names%>%
ggplot(aes(x=year, y=TotalN)) +
geom_line()+
labs(x='Year',y='Total number of weird names',title='Popularity of weird names over time')+
theme_classic()
![](data:image/png;base64,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)
Use geom_smooth()
to get a smoothed line:
weird_names%>%
ggplot(aes(x=year, y=TotalN)) +
geom_smooth()+
labs(x='Year',y='Total number of weird names',title='Popularity of weird names over time')+
theme_classic()
![](data:image/png;base64,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)
geom_col() - bar plots
barnnamn%>%
filter(name=='Lee')%>%
ggplot(aes(x=year,y=n))+geom_col()+
labs(title="Babies named Lee",x="Year",y="Number of babies")+
scale_x_continuous(breaks=c(2010:2017))+ # to specify the breaks on the x-axis
theme_classic()
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnIAAAGCCAMAAABTit4jAAABFFBMVEUAAAAAADoAAGYAOjoAOmYAOpAAZrYzMzM6AAA6ADo6AGY6OgA6OmY6OpA6ZmY6ZpA6ZrY6kLY6kNtNTU1NTW5NTY5NbqtNjshZWVlmAABmADpmOgBmkJBmkNtmtttmtv9uTU1uTW5uTY5ubo5ubqtuq+SOTU2OTW6OTY6Obk2ObquOyP+QOgCQZgCQZjqQZmaQkDqQkLaQtpCQttuQ27aQ2/+rbk2rbm6rbo6rjk2ryKur5OSr5P+2ZgC2Zjq2kDq2tpC2ttu229u22/+2/9u2///Ijk3I///bkDrbtmbbtpDb27bb29vb/7bb///kq27k////tmb/yI7/25D/27b/29v/5Kv//7b//8j//9v//+T////FLiwVAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAS00lEQVR4nO2de2PbRnZHKSeWuY/upqLjVE0bJWnspJX20U3lpKnU3W5qSd7d2KaYUg98/+9RAKQIXgrgBTlzMVfIOX9YlDy4/l3wGMAMCWqQAXTKIHUA+KmBctAxKAcdg3LQMSgHHYNy0DEoBx2DctAxmyp3MSj59ffLP7za350/ujl6/CZOsFm1u7oXj17FKwtJ2VK5gVAA5aA9GytXPvc3/z04WPphpVxcUK6PbKdcNhnu5X++/sVgsPPPpXLj4eD97++Ocj9+PBj8sjj13vw2H/DJfNP87/70i3J8tWVe5/Uwf5Bv/uvi8LjYMnudF/xznXLVkOoRPCC2PMr9ced4cZI9yJV7b5g/yH9WKjcpvpl9Nx9QMv+u+Hax5WT4q3zwzh+KLXazasvZiPc/vq9cNaR6BA+Jba/l9gqFHn1fPPG7uXKDv39z88dcmkK5m6PiwPaX/OeT4QdvygEluXK7b/ICu0tb5tp8kr0uyk2Gy1te7e98nf14NLinXDWkegQPim2V+6CcJfztT78bDgpBitNpLtKrQrnZSbewZDJ875/+vNi0+PvFdd98y9LHcvPVLYtHC1sr5VaHcJX34NjyWu51dRoslZs9+zvHhTjjuZX5Ke90eUFldp1XTgkWW5bezCw8Xd5yXJ6Na6YPy0MW/ww8JLZULjt99Co/nf7q3//nh/01ymV/+bhaUKmUq7ZEuZ8eAcpNhoUWs2u5Qo3qxLq8gJL99Tfz+UOlXLWlVK7acnbWrBZflk6s1RDxz8BDYesTayFIPhv48eP8UX7U2suWpw9fZ/m1/6NX43xWMZ/dZlK5uy2lctWW+fThk3K+If/ZcvowH1I9irMnoCO2nT7kR667RY9CuWKpoziBllqN7ya18xHzFyQq5aotpXLVlrNHS4ski4nyypDyETwktlTul8WBq1iKff/r8qpubzwc/N1iKXiS/8V7xQpwuRT8wfwlsKXpw2LLFeWqLYurwPf/9+i+cktDqkfwgOCdJNAxKAcdg3LQMSgHHYNy0DEoBx2DctAxKAcdg3LQMSgHHbOhchgKoaAcdAzKQcegHHQMykHHoBx0DMpBx6AcdAzKQcegHHQMykHHoBx0DMpBx6AcdAzKCf5he1JHfzCgnADl7EE5AcrZg3IClLMH5QQoZw/KCVDOHpQToJw9KCdAOXtQToBy9qCcAOXsQTkBytmDcgKUswflBChnD8oJUM4elBOgnD0oJ0A5e1BOgHL2oJwA5exBOQHK2YNyApSzB+UEKGcPyglQzh6UE6CcPWscmn46Gh1m2fWL0bN3LYb3ApSzp9mh6y9PsulnJ7cvD7O3H+nD+wHK2dPs0GXh2dnh9Vfn2fTzc3V4P0A5e9Y7lB/ppl+8Kw94WfYkB+VQLpS1Dt2+fJ5dPrtTTh3eA1DOnnUOXb94nk8ivkA5lIvJ2hlrPl/NuJZDubg0OzQzrjy5MmNFuXg0O/R2VHDIuhzKxYVXHwQoZw/KCVDOHpQToJw9KCdAOXtQToBy9qCcAOXsQTkBytmDcgKUswflBChnD8oJUM4elBOgnD0oJ0A5e1BOgHL2oJwA5exBOQHK2YNyApSzB+UEKGcPyglQzh6UE6CcPSgnQDl7UE6AcvagnADl7EE5AcrZg3IClLMH5QQoZw/KCVDOHpQToJw9KCdAOXtQToBy9qCcAOXsQTkBytmDcgKUswflBChnD8oJUM4elBOgnD0oJ0A5e1BOgHL2oJwA5exBOQHK2YNyApSzB+UEKGcPyglQzh6UE6CcPSgnQDl7UE6AcvagnADl7EE5AcrZg3IClLMH5QQoZw/KCVDOHpQToJw9KCdAOXuEQ1f7B1f7g0evWg7vIShnj3DodDe7ePTqYrfl8B6CcvYsO5Qf5G6OdrPx4jA3/fw8y96ORqMPz2uG9xGUs2dFuav9vUq5y1K1s8OG4X0E5exZdujmaG+8c1ycXkvOnn6XH+VuvzlpGN5HUM4e4dBkONjNTh+/ufu+OLFev8hPrOWB7kkOyqFcKGsdKpSbfnaydKRDOZQLRVWuZHE9h3IoF4p06GIwOLiQJ9YSlEO5aMh1ucc/zNZJ5hTKXT57l91+yyIJysXi3iLJQc263NOTuuF9BOXsWavc+uF9BOXsEQ5dFCfWYjW43fAegnL2SIfGg5w1xqEcygXDm5cEKGcPyglQzp6FQ7P3ypUwfUA5QzjKCVDOHpQToJw9NTPWg9bD+wfK2SPX5YqrONblUM6UlVcfii+8+oBylqCcAOXsEQ6NZyfWNRdzKIdyoSytyw3u4CiHcoawSCJAOXtQToBy9qze4cWJFeWMWbmP9ebogOkDypmyukhyupeNq/tt1g7vIyhnz6pyF7usy6GcKaufvJT7dsFRDuUMEQ7lF3PZ6WDnuOXwHoJy9rBIIkA5e1BOgHL28H45AcrZw/vlBChnD29eEqCcPSgnQDl7eL+cAOXs4f1yApSzh0USAcrZg3IClLMH5QQoZ0805frxZPWjC9+gnKAfXfhGfvLSute65PB79OPJ6kcXvkE5QT+68E3l0EXYulw/nqx+dOGbmhe82g6X9OPJ6kcXvmH6IOhHF7659wuVtv1E9H48Wf3owjfR3i/XjyerH134Jtqbl/rxZPWjC9+gnKAfXfiGE6ugH134humDoB9d+IZFEoGDLgIieNqTzaCcwEEXARE87clmUE7goIuACJ72ZDMoJ3DQRUAET3uyGZQTOOgiIIKnPdmM/BRNXtZP30VABE97shneSSJw0EVABE97shm5FLzmwwxrhgv6saMcdBEQwdOebEYe5XiLZvouAiJ42pPNrJ0+TD8/z7LrF6Nn7/Th/dhRDroIiOBpTzazTrnL0Yfn2e3Lw+ztR/rwfuwoB10ERPC0J5u59xrrweKC7uzpd/lR7vqr89nRrmb4Mv3YUQ66CIjgaU82Iz8R/fEP+wc3R7t33xeqTb94l11/eZJ/9yTHUjkPu9pBhoAIHjLoxVcWSYp1kur9coVyl8/ulFsdHjulaZ8tcZAhIIKHDHpxVbnqKLc6PHZK0z5b4iBDQAQPGfTiK+tyPxTWLd4wN+30Ws60z5Y4yBAQwUMGvXjNJ6JXb9EsVLt9+byjGatpny1xkCEggocMenFH63KmfbbEQYaACB4y6MUdvZPEtM+WOMgQEMFDBr14tF81Ep7StM+WOMgQEMFDBr24ozu8TPtsiYMMARE8ZNCLO7qP1bTPljjIEBDBQwa9OMpF7iJlBA8Z9OLRftVIeErTPlviIENABA8Z9OLRftVIeErTPlviIENABA8Z9OIskkTuImUEDxn04igXuYuUETxk0IsLhyZDTqzJMwRE8JBBLy5vKtxtHFczPHZK0z5b4iBDQAQPGfTijm4qNO2zJQ4yBETwkEEv7ujWadM+W+IgQ0AEDxn04vfX5doPj5zStM+WOMgQEMFDBr0404fIXaSM4CGDXlyeWNd9gOa94bFTmvbZEgcZAiJ4yKAXZ/oQuYuUETxk0IszfYjcRcoIHjLoxeW13M+ZPiTPEBDBQwa9uKOPwTHtsyUOMgRE8JBBL85rrJG7SBnBQwa9OMpF7iJlBA8Z9OKcWCN3kTKChwx68fsOXf3j8SbD46U07bMlDjIERPCQQS9e49B4zce3opx5hoAIHjLoxeuU48SaMkNABA8Z9OI1Dp1ylEuZISCChwx68Zrpww7XcikzBETwkEEvziJJ5C5SRvCQQS+OcpG7SBnBQwa9OPexRu4iZQQPGfTi9x06Xfdrp1HOPENABA8Z9OKrDl3tr5s9oJx9hoAIHjLoxVccGg/W/xovlDPPEBDBQwa9uHTodKDcyYpy5hkCInjIoBeX7wpe+wmaq8NjpzTtsyUOMgRE8JBBL77k0GSo3lOIcvYZAiJ4yKAXrxy60E6qcnj8lKZ9tsRBhoAIHjLoxVmXi9xFyggeMujFefUhchcpI3jIoBdHuchdpIzgIYNeHOUid5EygocMenGUi9xFyggeMujFUS5yFykjeMigF0e5yF2kjOAhg14c5SJ3kTKChwx6cZSL3EXKCB4y6MVRLnIXKSN4yKAXR7nIXaSM4CGDXhzlIneRMoKHDHpxlIvcRcoIHjLoxVEuchcpI3jIoBdHuchdpIzgIYNeHOUid5EygocMenGUi9xFyggeMujFdeXejkajD8/V4eEpTftsiYMMARE8ZNCL68qdHbYaHp7StM+WOMgQEMFDBr24qtztNyethoenNO2zJQ4yBETwkEEvrip3/SI/sZYHuic5KGeeISCChwx6cVW56WcnS0c6lDPPEBDBQwa9eLsZ6+J6DuXMMwRE8JBBL45ykbtIGcFDBr24qtzls3fZ7bcsknSWISCChwx68Vbrck8Xk1aUM88QEMFDBr04rz5E7iJlBA8Z9OIoF7mLlBE8ZNCLo1zkLlJG8JBBL45ykbtIGcFDBr04ykXuImUEDxn04igXuYuUETxk0IujXOQuUkbwkEEvjnKRu0gZwUMGvTjKRe4iZQQPGfTiKBe5i5QRPGTQi6Nc5C5SRvCQQS+OcpG7SBnBQwa9OMpF7iJlBA8Z9OIoF7mLlBE8ZNCLo1zkLlJG8JBBL45ykbtIGcFDBr04ykXuImUEDxn04igXuYuUETxk0IujXOQuUkbwkEEvjnKRu0gZwUMGvTjKRe4iZQQPGfTiKBe5i5QRPGTQi6Nc5C5SRvCQQS+OcpG7SBnBQwa9OMpF7iJlBA8Z9OIoF7mLlBE8ZNCLo1zkLlJG8JBBL45ykbtIGcFDBr04ykXuImUEDxn04igXuYuUETxk0IujXOQuUkbwkEEvjnKRu0gZwUMGvTjKRe4iZQQPGfTiKBe5i5QRPGTQi6Nc5C5SRvCQQS+OcpG7SBnBQwa9OMpF7iJlBA8Z9OIoF7mLlBE8ZNCLo1zkLlJG8JBBL45ykbtIGcFDBr04ykXuImUEDxn04igXuYuUETxk0IujXOQuUkbwkEEvjnKRu0gZwUMGvTjKRe4iZQQPGfTiKBe5i5QRPGTQi6Nc5C5SRvCQQS+OcpG7SBnBQwa9OMpF7iJlBA8Z9OIoF7mLlBE8ZNCLo1zkLlJG8JBBL45ykbtIGcFDBr04ykXuImUEDxn04igXuYuUETxk0IujXOQuUkbwkEEvrit3/WL07J0+PDylaZ8tcZAhIIKHDHpxVbnbl4fZ24/04eEpTftsiYMMARE8ZNCLq8pdf3WeTT8/V4eHpzTtsyUOMgRE8JBBL64qN/3iXXb95Un+6EnOhpd+APdQHbp8dqdcq+EAChsc5VoNB1CIdi0H0I4WM9bnrWasAO2Iti4H0I5orz4AtAPloGNQDjoG5aBjUA46BuWgY1AOOgbloGM2VW5Lnmy7YbwKDiL8tCtsqdy2PElfwUEEKhSgHBU6roByVOi4AvMB6BiUg45BOegYlIOOQTnoGDvlpp+ORodLbyoub6AQbzHeqkK2dCfGVgXmPwyocDkafdg2QlMTxR3pIRXejjYIUVvh9uXo6Ym25boKRYQNduUCM+WKu8Kmn50sbva/LPaQvPV/mwqLL9sWmP8woEK5uwObyJ+vts9VfYWzDZ7qxgqXbf/7N3XRvsISZspdFtHODu9uEDt7+l3+p7xdbJsKd1+2LjD/YUiEbIMjbUOF6b/8a1tnaivcftP6ALXmqQirkGVLd5tugOm1XJ6oug22yCpvit2mQrbJibWhQHiE9ke5+gq33/xX+xNrXYX8DLfZOa3mqfjPDU6stV1suBvusFSuuB+xutm/SClv/d+mQraZcrUFih8GVZh+usmTVVPh7fMNruXqKhSXBpsc6WoqfHpYHgECutjuIGep3PWL58s3+29xlKupkG2kXG2B8odhEQKbyL/bRLmGDBtczxk9FdtcydnOWIs9Ul29TTe9lqutkG2iXG2B2Q/DImzwdNdVmM312opvk+H63zZRrj7D2Qb/dyvMlJs/s9XN/kVKeev/NhWyDZSrLbCFcSsVNro6aGqi/VGuMcPttyH7oRC29Ym1vsJGc5gKM+XuVm22X5err7CBcrUFNlpNqo+Q/7T1tVxTE+2Vs8qQf9d6Ya+hwlaXcrz6AF2DctAxKAcdg3LQMSgHHYNy0DEoF8DN0aNX+ZfJcDd1kocEyoUwGe7lf54+fpM6yEMC5YK4yA9zk+FB6hgPCpQL4mp/NzstTqs3R4NBcZadDAeDwV42+fnvy2/hPigXxnjnDz87LozLvbt4/OZq/6A89HF51wzKhZEf3YrLuXFxSMt9+7/iqm7ys2NOts2gXCClbNnF7MOFcvvG+Zed40lx6INaUC6QuXLzSevV/s5xeZRDuUZQLpCZcuOdmWLjQr0xR7l1oFwgM+VujnLXctUK9SZDlFsHygUyU65cJCmOdKf5l//YP0C5ZlAOOgbloGNQDjoG5aBjUA46BuWgY1AOOgbloGNQDjoG5aBj/h9lg7r6dS6+CAAAAABJRU5ErkJggg==)
Reordering items on the x-axis
- add a
reorder()
function to the aes()
for the x-axis
- works the same way as
arrange()
MGS_nettle%>%
sample_n(6)%>%
ggplot(aes(x=reorder(Country,Langs),y=Langs,fill=MGS_category))+
geom_col()+
labs(x='Country',y='Number of languages')+
scale_fill_discrete("Environment",c("dry","fertile"))+
theme_classic()
![](data:image/png;base64,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)
Grouped bar plots
- Use
fill=VarX
in the aes()
of your ggplot call to colour the bars by a third variable.
- Use
position="dodge()"
in your geom_col()
to have the bars side-by-side
- Use
scale_x_continuous
(for continuous variables) to specify the breaks on the x-axis; if you have discrete (e.g. categorical) variables, the function is scale_x_discrete
barnnamn%>%
filter(name=='Lee')%>%
ggplot(aes(x=year,y=n,fill=sex))+
geom_col(position="dodge")+ # bars side-by-side
labs(title="Babies named Lee",x="Year",y="Number of babies",fill="Sex")+
scale_x_continuous(breaks=c(2010:2017))+ # to specify the breaks on the x-axis
theme_classic()
![](data:image/png;base64,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)
If you don’t use position="dodge"
, the different coloured bars will be stacked on top of eachother.
barnnamn%>%
filter(name=='Lee')%>%
ggplot(aes(x=year,y=n,fill=sex))+
geom_col()+
labs(title="Babies named Lee",x="Year",y="Number of babies",fill="Sex")+
scale_x_continuous(breaks=c(2010:2017))+ # to specify the breaks on the x-axis
theme_classic()
![](data:image/png;base64,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)
Percent stacked bar plots
Use position="fill"
to show proportions instead of counts:
barnnamn%>%
filter(name=='Lee')%>%
ggplot(aes(x=year,y=n,fill=sex))+
geom_col(position="fill")+ # to show proportions
labs(title="Babies named Lee",x="Year",y="Proportion",fill="Sex")+
scale_x_continuous(breaks=c(2010:2017))+ # to specify the breaks on the x-axis
theme_classic()
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnIAAAGCCAMAAABTit4jAAABNVBMVEUAAAAAADoAAGYAOjoAOmYAOpAAZrYAv8QzMzM6AAA6ADo6AGY6OgA6OmY6OpA6ZmY6ZpA6ZrY6kLY6kNtNTU1NTW5NTY5NbqtNjshmAABmOgBmOjpmZjpmZmZmZrZmkJBmkNtmtttmtv9uTU1uTW5uTY5ubo5ubqtuq+SOTU2OTW6OTY6Obk2ObquOyP+QOgCQOmaQZgCQZjqQZmaQZpCQkDqQkGaQkLaQtpCQttuQ27aQ2/+rbk2rbm6rbo6rjk2ryKur5OSr5P+2ZgC2Zjq2kDq2tma2tpC2ttu225C229u22/+2/7a2/9u2///Ijk3I///bkDrbkGbbtmbbtpDb27bb29vb/7bb///kq27k///4dm3/tmb/yI7/25D/27b/29v/5Kv//7b//8j//9v//+T///+YF1RHAAAACXBIWXMAAA7DAAAOwwHHb6hkAAASAklEQVR4nO2di3/a1hmGcZqwkLZrM5M4zq7NZbGTDe++dnayzm7XtV19WbrV9jAdxuj//xN2jiQQF8EnfedwbNDz/togZL1+9aEn5wYitQihoKpd9wmgqgnkUGCBHAoskEOBBXIosEAOBRbIocACORRYeuROarE+/Hp05+VmPd262rlz6nBeE7raGfzek1uH/n4tugY5I1cbQwDkkCQH5OJrf/VZ7cnIzgw5vwK51ZErclGnsW7+fPterbb2ixi5dqN2++tBK/f941rtfdv1Xv3OHPBRajU/++K9+PjMaX7P24bZMPYPbfM4dEZvzS/8Kg+57JBsC914Obdyn6/tDjvZJwa5dxpmw+yLkevYJ8mz9IBY6TP7dOjsND4wB699bB31KHMmR9x+XB+LtcoOybbQzZf7WG7dInTra3vh6wa52o9Orz430FjkrnZsw/at2d9p3D+ND4hlkKufml9QH3EabD6K3tpf12mMOi831z6Jvt+p1QexA+SyQ7IttARyR+5+PEv4zxe/b9QsILY7NSAdWuSSTtdS0mm88/Ovhlb78+G4L3XGPMb2SafdGtKaITd5CKO8JZHzWO5t1g3GyCVXf23XgtNOqTRd3sHogkoyzounBENnzE1C4cGosx33xjnTh9FDhjHo5ssZuejg1qHpTj/48z++25yDXPTt42xBJUMuc4JcVeQFuU7DYpGM5erRaMc6uoAS/fu36fwhQy5zjiOXOZNeM1t8GelYs0PGYtDNloeO1QJiZgPfPzZbptVaj0anD59EZux/67BtZhXp7DYaR27gHEcuc5rpw0fxfGM8Np4+pIdkW/rXAQWT+/TBtFyDRQ+LnF3qsB1ojFV7MKlNj0jfkMiQy5zjyGXOZGtkkWQ4UZ44JN5CN1/OyL1vGy67FHv7k3hUt95u1H44XArumB+8Y1eA46Xg++lbYCPTh6FzArnMaUeBt7/JxnLZ2kx2SLaFbrz4JAkKLJBDgQVyKLBADgUWyKHAAjkUWCCHAgvkUGCBHAoskEOBpUYOVpFOIIcCC+RQYIEcCiyQQ4EFciiwQA4FFsihwAI5FFgghwIL5FBgzSWn+/w4fuxtNzfOhw8FjAjN1DxyLpoPY+T6e63o7NHgoYARodmaQ87Rg0+TVq736tg2eOmDbERojop0rN0X51Hv5X76YHbcNco3/leh2PiD8nKsXHumailKdKwxeImFVAS5i42YtfRhrlFRJMiBXKZZrdxso6JIkAO5TN3SYzlFkSAHcplSwPp7W8mMdUucsSqKBDmQy2SRs/8XX5dTFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciDnYlQUCXIg52JUFAlyIOdiVBQJciA3UG+7uXFuN86aVq348eHxXKOiSJADuVT9PQPZo8GzC0PfUUs0KooEOZBL1Xt1HHWfp41a7+V+1H+9LxoVRYIcyKXqvjiPSYtlmzvT0dru1eiuEciVFcglmo2c7UoHyMWP3WejLR3IlRXIJSrWyl0k8wij4XgO5MoK5BIVG8sdbQ32gpxaIJdo3ox1azBjTbpT29T137BIohXIJRLX5WxDl/avZ83mg/35RkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIAdyLkZFkSAHci5GRZEgB3IuRkWRIFdl5DqNmtWtw7LGoRRFglyFkbvaqeuMmRRFgtwSI3diWqi13XKeUXIuN5/ojJkURYLc8iJ3YjvEdq0ENtFkKwdyHq/HpFYPuRSYgzunZVxj5LQLjeJyjEMpigS5JUZuPduM5wAnppe93FyfZ5roWGtMH7xdjymtHnKmT60leMXTgBPT2h3U7X9zxSLJwq7HpFYQuWT+UE/7RzsX6Nz7+F2hxQK5BV6Pca0kcpEl7c7pSdI/rlsGpQnBODknqa+AQK6sVhU507LtngxnEAe20ZurMXJOkuaxEHMgV1arh5xhLX1oDxbn2rf+KS215azLFZu3glxZrR5y0YElzU4drnZMM2e4swhJ/IDcwq7HpFYQuWwkZhdJDH92iU56E4uOdXHXY0KriJxGTB+CXQ+QS8QiSbDrAXKJQC7Y9QC5RENyzNyBN7wWej1ALhGtXLDrAXKJWCQJdj1ALhHIBbseIJcoIyd9Zzb5ZEAZ46gURYJcZZHjg+gLvh6rh5zuV/BB9EVdjymBXCJauUVdjymBXKLx91hL3DcBcmUFcom492FR12NKIJeIpeBFXY8pgVwikFvU9ZgSyCXiw0uLuh5TqhpyyTfcTNM05yOave3mxnm8ddZsNh8ej+yYNLoUCXKrityMuwtnv+HV32tFZ4/iHxy1JnZEIFdeIJdoNnK9V8dR9/mx2eq/3h/fMWl0KhLkKozceMfafXEe9V5a2EyH2my2RnbcNVp65IInKgKXG7lG/vv1s6cPFxsDwrrP9m1Ll+2YNjoUCXILS7xm5Iq0cmPKGrVYR63xHSAXILBiyI0P3QxyKzaWC56oCKwAcnHHmr6339/bSieotkftvznOdkwbHYoEuYUlLgFyeetytl07azYf7Ecrti4XPFERuNTIzVJ1P4gePFERCHKzjNJJgJwycOWRi+KvbKrKd5IET1QErjxyg8/LFfrIHMgFCFx55EoJ5AIE3nDkdAK5YImKwAogV6XPywVPVATecOR051zdrzQMnqgIXHnkWCRZaKIiEORmGTOBnNfAlUeOjnWhiYrA1UeO6cMiExWBFUCuhEAuQODKI1etr8EJnqgIXGrkOo26+fNgamZQ3a/BCZ6oCFxu5O59eBpd/njqU3PV/Rqc4ImKwOVG7t2f7Eadn85FrlpfgxM8URG45Mj9/Un0r+l/npXpQ7BEReCSI/fl/avffAlyQwVPVAQuOXLf/OG7n03fATFCzkHBLnXK6FYkyC0s8bqRO/zsT+vzkLP/ruFJceZALkDgsiPXXtudg1y8KFdiZQ7kAgQuO3LJfxOu0X/DyyJX7N2uCOSCBC41crMEcsESFYEgl2scE8h5DQS5XOOYQM5r4KojV+KOwgjkggSuNnJlBXIBAm84cjqBXLBERSDIyUaQ8xoIcrIR5LwGgpxsBDmvgSAnG0HOayDIyUaQ8xoIcrIR5LwGgpxsBDmvgSAnG0HOayDIyUaQ8xoIcrIR5LwGgpxsBDmvgSAnG0HOayDIyUaQ8xoIcrIR5LwGgpxsBDmvgSAnG0HOayDIyUaQ8xoIcrIR5LwGgpxsBDmvgSAnG0HOayDIyUaQ8xoIcrIR5LwGgpxsBDmvgSAnG0HOayDIyUaQ8xoIcrIR5LwGgpxsBDmvgSAnG0HOayDIyUaQ8xoIcrIR5LwGgpxsBDmvgSAnG0HOa2DVkOttNzfO463u02azFUVnzWbz4fFcI8h5DawYcv29VnT2yG71Xu5H3Wf70VFLNIKc18CKIdd7dRx1n9tG7cKCd9Tqv94XjSDnNbBiyHVfnMftWyKzZTrauH+NortGIBcgsGLIXWyMINff24r71qylA7kAgRVDbrSV621vpXuH4zmQCxBYMeSysZyZsQ4nDiAXMrBiyNm+NJmxpsTZnrb/hkWSgIEVQy5dlzMNnV2PsxMH8/hgf74R5LwGVg05jRHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAaCnGwEOa+BICcbQc5rIMjJRpDzGghyshHkvAZWDbnednPjfHQr2zHTCHJeAyuGXH+vFZ09GtnKdsw2gpzXwIoh13t1HHWfH2db2Y7ZRpDzGlgx5LovzqPey/1sK9tx10g9CEQV12xyLjYGhKVb2Y75RoTmSdXKzTciNE+ex3IISZo3Y90azli3khnrljhjRUiSuC5n27Xi63IISfL87gNCkkAOBRbIocACORRYIIcCC+RQYIEcCiyQQ4GlR66k7pY1XJtxec40nPFGIFdWd5fGuDxneg1GDwK56w9cJqMHgdz1By6T0YOYBaDAAjkUWCCHAgvkUGCBHAqsRSLXfdpstkY+TBzfODH20eIyxmjkxotSxnRnad9Fs/lQFZjcbK4wnjXlyFxjf6/5YH++L9doA8UXx7cWiJy9G6z7bH94k/+FfTnHb/kvYRw+lDWmO0v74kuiO1NzKYXLmG88ki/+TOOF8Bd51qmKRu9aIHIXtrKj1uDGsKMHn9rbKMZuEythHDyUNqY7ywdGcrs6w9j95a8EeHKN/ddSSzXnRVUZo2jkNtFQWvBYbuz2V1vq+M2wJYxRkY51hrFIYq5PauXyjf3XfxM71jyj6fMK9XI5L+pf5Y4191SLlehXi0XO3oeY3eRvixy/5b+EMSqGXK7R7lT4uk8LXMcc49mWPJbLM9ruv0BLl2N82or/LitqDN/ILRa53vbW2F3/hVu5HGNUCLlcY7xTE6g7U/OsAHIzEuXxnN8XNfhIbtEzVvvyZaO3bsGxXK4xKoJcrjHZqQmUAcgzJtNAgXKvib1fF0AuP/FI/NvoXQtELr3U2U3+tsjxW/5LGKMCyOUaCxM34SsyBJh1pmIrNzOx/2Z+jfmJR3LHmm8sMmPxrQUiN1j0Kb0ul28sgFyuscDaU36g2SuN5WadqYic50TzTFpAmmEMP5Tj3QcUWiCHAgvkUGCBHAoskEOBBXIosEBuvq52bh2ah06jft1nsjICOUGdxrr58+DO6XWfyMoI5CSdmGau03hy3aexOgI5SZeb9eigHtk+tlazvWynUavV1qPOu3+Mn6KSAjlR7bWP7+1a4uqmybtzern5JG76GN4pBXKiTOtmh3Nt26QZ3v5nR3Wde7t0tkqBnKwYtugk+Q4iQ1/bPKztdmzTh8oL5GSlyKWT1svNtd24lQM5nUBOVoJcey1BrG3Ra9PKqQVyshLkrnYMawY1i16nAXJqgZysBLl4kcS2dAfm4S+bT0BOKZBDgQVyKLBADgUWyKHAAjkUWCCHAgvkUGCBHAoskEOBBXIosP4PMaHcX9T91RAAAAAASUVORK5CYII=)
geom_violin()
This is good to compare the distribution of the data between groups.
# mpg is a dataset of cars
mpg %>%
# the hwy column tells you how many miles a car can go on 1 gallon of petrol
# class is the type of car
ggplot( aes(x=reorder(class,hwy), y=hwy)) +
geom_violin() +
theme_classic()+
# we can use the stat_summary point to add points for summary statistics, here we show the mean
stat_summary(fun=mean, geom="point")+
labs(x="Car type",y="miles per gallon",title="Efficiency of cars on the highway",caption = "The mean miles per gallon for each car is indicated with a point")
![](data:image/png;base64,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)
Making data points less clumped or less spread apart
- Log transformations (as in the graph above) are used to make data that is very spread apart/clumped together easier to visualise.
- The most common base is 10. When we take the log10 of a number, \(x\), we are trying to find a number \(y\) such that \(10^y=x\). The function for this in R is just
log10(x)
. For very far apart values of \(x\), taking \(log10(x)\) will give you values that are closer together, while for very close together values of \(x\), \(log10(x)\) will give you values that are further apart. This means that \(log10(x)\) is often nicer to plot than \(x\).
- It is perfectly acceptable to do these kinds of transformations to your data, in order to make it easier to visualise.
Making multiple plots
facet_wrap()
and facet_grid()
let you produce multiple different plots for each value in a column/columns
facet_wrap(~ColA)
–> will make different versions of the same graph for every different value in colA, all wrapped around each other (works well when you have a lot of different values of a variable)
facet_grid(colA~colB)
–> makes a grid of graphs, where the different values of colA are the rows in the grid, and the different values of colB are the columns in the grid. This works best when colA and colB don’t have too many different values.
+theme_minimal()
is a nice theme to use with faceted plots (compared to our usual +theme_classic()
)
barnnamn %>% filter(name=="Lee") %>% ggplot(aes(x=year, y=n)) + geom_line() + facet_wrap("sex")+theme_minimal()
![](data:image/png;base64,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)
barnnamn %>%
mutate(FinalLetter = str_sub(name, -1, -1)) %>%
mutate(Final = if_else(FinalLetter %in% c("a",'ä','ö','å', "e", "i", "o", "u", "y"), "vowel", "consonant")) %>%
group_by(Final,year,sex) %>%
summarise(total=sum(n)) %>%
ggplot(aes(x=year, y=total)) + geom_line() + facet_grid(sex ~ Final)+theme_minimal()
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnIAAAGCCAMAAABTit4jAAABGlBMVEUAAAAAADoAAGYAOpAAZrYZGUgZGXEZSHEZSJcZcboaGho6AAA6ADo6AGY6kNtIGRlIGUhIGXFISJdIcbpIl91NTU1NTW5NTY5NbqtNjshmAABmkJBmtv9uTU1uTW5uTY5ubo5ubqtuq+RxGRlxGUhxGXFxSBlxl5dxuv+OTU2OTW6OTY6Obk2OyP+QOgCQkDqQ27aQ2/+XSBmXSEiXcRmXl3GXupeX3f+rbk2rbm6rbo6ryKur5OSr5P+2ZgC2/9u2//+6cRm6cUi63Ze6/7q6///Ijk3I///bkDrb///dl0jd/93d///kq27k///r6+v/tmb/unH/yI7/25D/29v/3Zf/5Kv//7b//7r//8j//9v//93//+T///90ShUrAAAACXBIWXMAAA7DAAAOwwHHb6hkAAATMklEQVR4nO2dj5/UxBnGg6KVo6JSFiwFq0dp1Xq0SC1YexRagZNygnfl+HX5//+NZrJ73GY2yeTXvPlm73k+yrr77JtMnv0yycyukySVJFMlYzdAOmkScpKxhJxkLCEnGUvIScYScpKxhJxkLCEnGUvIScYScpKxhJxkLCEnGUvIScYScpKxhJxkrHVH7vknD8ZuwnhiHryQW2MxD346yL28tvHebffn+w/S5+f/trHxZZr+suGeeS8+/8g9zJ/NnTXW8/NP0je3bufH+ebb7LA/vp3+8sGTRSJCro9cnlmW9y+4P59/lD+8vP4gfXwmTYsv/uG2y3rxjJn6cMpwc9jNE3h8IX2c/W3LHrLnWTDMg58McvP4HGQZU+5J9q+ja+XFxSuLZ8zUB5TD7MJRAuef/Pu7M67Ty4JZZMDTdJDLziBz8LJIj+jKzqHv3fZfTO+70+1JQe75+f/OD92Rdv3H6//55MfrD7Lz6kaWDPPgp4NcSS/nXl+cX5e6vmtfHrF2EpB7c+vv548SSO//6Tdvbn13Jo8p1fChp/Jr408e3H97hZb9m/2Xe5YWXswfPr59UpDLrt4uHF3NZsOp+dXcUiI8TQa54oh10cvdL4xYFy8+3tj41R+/XDx78+16j1jTfIy6SGA+Xl0ksrji4Gk6yElrIiEnGUvIScYScpKxhJxkrOGQe7qell2R4fZMLV9CLmAhEGFEIeRsLAQijCiEnI2FQIQRhZCzsRCIMKIQcjYWAhFGFELOxkIgwohCyNlYCEQYUQg5GwuBCCMKIWdjIRBhRCHkbCwEIowoLJA7vLOVpq++mn36c8VD1KYyLAQijCgskNudbeXY7f62/CFuUxkWAhFGFAbIHXz+zVb66s+P0oPfPyp9iNtUhoVApNv2aj5bKHKH3/8z68wOvvg5ffX1dunD0e6kp7woksT9M4a6I7e76c6fe5/mdJU+FN7O6JQYHcz4jUiS3Kr6eJm9XNaTHTbr5SI1lWFNErkkObKS8g+YidzuzGlT13JWRYNt7wizp4Vn/VthNUlyeGdzPkYteYjbVIYFQi5ZUVnRMWJHVslnjEZO83JWRVXnyGXAVky/aPldT8teHLyBQcuXvn0IWOMht8RZdVGRpuKzp8tGkdkVKymxVkgVcibWOMh5nVpd0ds3rvSDJefcEvl7fLr01NuikDOx7JErOYfWF+VvLznvtm5FvuenhQY0Jr/aWtlL87cGxCBk6siVXrIFt9etqlQrmyo957bZ18oemr81IAYhk0aunJzu2xvIetsqIWdi2RVV8dZ1ewNalVeATTa4srHmbw1o7FgiWUZFyep8R99GRLV89ITccJZJ0fEXVAM2wsQ6Ak/IDWdZFCXVVo9GGFpJIuSGs+IXNbg6Z0Sh4YONFb2oyRwEIwoQcqP8DhCmzlGM8yvKqDJAbpH2elqRi5pN7jOiAPVywZ1O2YpbVPU1/BCNoFi+hFzAilnU+FtzRhRCzsYatqgwgdr8y3tGFELOxupeVJyeL8yZtv3SiBGFkLOx+ha1+GZIyLUU5ABpyCG3J+TIFgIRRhRCzsZCIMKIQsjZWAhEGFEIORsLgQgjCiFnYyEQYUQh5GwsBCKMKOIjtzebXXqk/1vfrEjIuWVuqpbP1CqaEYqEnFPVkktaeSlCkZBzynoyraLZSIriWD2QO7h6cVuraJoVqZdzquretIpmhCIhl+vhlq7lrIqE3OLkqVU0rYqEnFssOLuW07ycVZGQayvIASI+bUQjKJYvIRewEIgwohByNhYCEUYUQs7GQiDCiELI2VgIRBhRCDkbC4EIIwohZ2MhEGFEIeRsLAQijCiEnI2FQIQRhZCzsRCIMKIQcjYWAhFGFELOxkIgwogChNzYv0IlSFEcywC5RdrraSF6JUYUoF4uuNMpWwhEGFEIORsLgQgjCiFnYyEQYUQh5GwsBCKMKIScjYVAhBGFkLOxEIgwohByNhYCEUYUbayX1zbmev+B/1YhF7AQiDCiaGu9uXU7fXldyLW1EIgwohByNhYCEUYUQs7GQiDCiKKLJeTaWwhEGFHEH7EeXJ3NtrRAhFmRkHOLeR18tq2FW62KhNyeQ0qLfSEQYUQR/8SaNl3ScOyfBBKkKI7VBzm3jJwWbrUqUi/nxgibaZPlqSM1lWEhEGFEYTFizcarqa7lrIqE3Jy48hVbtXBrhCIhtztz2tK8nFWRkGsryAEiPm1EIyiWLyEXsBCIMKIQcjYWAhFGFELOxkIgwohCyNlYCEQYUQg5GwuBCCMKIWdjIRBhRCHkbCwEIowohJyNhUCEEYWQs7EQiDCiEHI2FgIRRhQg5Mb+SSBBiuJYBsgt0l5PC9ErMaIA9XLBnU7ZQiDCiELI2VgIRBhRCDkbC4EIIwohZ2MhEGFEIeRsLAQijCiEnI2FQIQRhZCzsRCIMKIQcjYWAhFGFELOxkIgwohCyNlYCEQYUQg5GwuBCCMKIWdjIRBhRCHkbCwEIowoLJDLV7rRAhFGRUIuTfdmlx6Vr9iqhVsjFAm59OHFH7JeTot9WRUJuXR+YtXCrY2kKI7VFzkt3GpVpF4ubdzLRWoqw0IgwojCCjldy1kVCbl0jpwWbrUqEnKp5uVsi4RcW0EOEPFpIxpBsXwJuVIrCSiwPSFXIyF3bPlI1RTlbxJyjSxfQq6Ms767EnI1OknI2Z0jhVyN1g25ugswDR9GsXytE3J5n4X4tBGNoFi+1gW5BqdIITeO5WuayFVckcXYFwIRCDwnB7mBrsqE3DiWLwJy1aPIqskLITchy9e4C7cu+qyK18scqnpHsUYyQG6R9vJWKyfAij7mb6J6uXiWr6GRKz0VLlueD4lFyMWzfBGu5dAWAhFGFELOxkIgwohCyNlYCEQYUQg5GwuBCCMKIWdjIRBhRCHkbCwEIowohkbuxeW3Uxjv3Gte37c9eAuBCCMK9XI2FgIRRhRCzsZCIMKIIgZy+2d1Yh2v6CQi9/rGudc3rry4fKV5ee/24C0EIowoIiDnYLt7Ln327k/N6/u2B28hEGFEEQm5ndPpM51YRyk6icild3PedtTLjVJ0IpHLLubSu8mpm83LJamthpskkaRG8q/lMnW8lpOkRhJykrGOkdt5+x3r6RHbI629Sno5SYopDR8kYxWRy0+u57ptCTILhJgSQzSCYvkqILfjBg4vLndjDnKAiE8b0QiK5Wu4ESvkABGfNqIRFMuXkAtYCEQYUejEamMhEGFEEQM5DR/GLDqZyPUR5AARnzaiERTLF+JazmY9TCE3juULgJy3UNPykoaD76u9hUCEEcXgyPX9jrVjU0vv8JFjx0gMgQgjini9XEd1ak/FLWXmVtWCiB03KOTGsXzVDh8O72xFvTlmm66sAF7dBquhE3KjWL5qkdudbeXY5Tf9LXno156cjZZVC+zqN1h1TEJuFMtXHXIHn3+zFe1G593HCEn5IvxLG6w4KCE3iuWrBrnD7/+ZdWYHX/ycvvp6u/ThaHcd1G+x89XV0ovP7ddS7xHF2qk7crub7vy592lOV+lD4e2t/gok1VbTDVaMLp56O+jaQvsi9XJZT3bYrJdb3amHgt8ei/neoW5QgkAEAk9s5HZnTpstr+X8GY2yKY5kpapUPa3FTpNSNd8gAhEIPEaTJId3Nudj1JKH5u1Z/piTolVT1dPy4fItvx9uOQUo5JpZvgzn5eaf5hCf6KDWatfXaAqw1hJyNTL+JUnFjW+6bzCeteAOgQg3pQaWL/14qdYqv/ILbk/I1UjIBSznVHAn5BpZvoRcwFoaAfvgCblGli8hF7A8p9nIQsjVSMgFrDInOLIQcjUScgGr0in/cYFxI6Zg+RJyAQuBCCMKIWdjIRBhRCHkbCwEIowohJyNhUCEEQUIubF/EkiQojiWAXKLtNfTQvRKjChAvVxwp1O2EIgwohByNhYCEUYUQs7GQiDCiELI2VgIRBhRCDkbC4EIIwohZ2MhEGFEIeRsLAQijCiEnI2FQIQRhZCzsRCIMKIQcjYWAhFGFELOxkIgwohCyNlYCEQYUcRHbm82u/Qo6iqaU7AQiDCiiI6cW+amavnMQVbRnIaFQIQRhcmJtWrJpQFW0ZyKhUCEEYUJcllPFmkVzXWTojhWD+QOrl7cjrSK5nQsRK/EiMKkl6vq3kKraA7SVIaFQIQRhc0kycMtXctZFQm5xclzmFU0p2shEGFEEb+X253Nsms5zctZFQm5toIcIOLTRjSCYvkScgELgQgjCiFnYyEQYUQh5GwsBCKMKIScjYVAhBGFkLOxEIgwohByNhYCEUYUQs7GQiDCiELI2VgIRBhRCDkbC4EIIwohZ2MhEGFEIeRsLAQijChAyI39K1SCFMWxDJBbpL2eFqJXYkQB6uWCO52yhUCEEYWQs7EQiDCiEHI2FgIRRhRCzsZCIMKIQsjZWAhEGFG0sV5e25jrgyf+W4VcwEIgwoiivfX8o40LKy8KuYCFQIQRRTvrl9IuLhVyQQuBCCOKdifWM1VvFXIBC4EII4p21uOsl1s9q6ZCLmghEGFE0d56XEadkAtYCEQYUWjEamMhEGFE0dHyVYPcwdXZbEsLRJgVCTm3mNfBZ9tauNWqSMjtOaS02BcCEUYU8U+sadMlDcf+SSBBiuJYfZBzy8hp4VarIvVyboywmTZZnjpSUxkWAhFGFBYj1my8mupazqpIyM2JK1+xVQu3RigScrszpy3Ny1kVCbm2ghwg4tNGNIJi+RJyAQuBCCMKIWdjIRBhRCHkbCwEIowohJyNhUCEEYWQs7EQiDCiEHI2FgIRRhRCzsZCIMKIQsjZWAhEGFEIORsLgQgjCiFnYyEQYUQBQm7snwQSpCiOZYDcIu31tBC9EiMKUC8X3OmULQQijCiEnI2FQIQRhZCzsRCIMKIQcjYWAhFGFELOxkIgwohCyNlYCEQYUQg5GwuBCCMKIWdjIRBhRCHkbCwEIowohJyNhUCEEUWNlQi54SwEIowoKqwkk3q5AS0EIowoSqwct0DVSk2dmS87ov9b36gIgVyyovIq3xwIub3ZpUfly2dqFc0IRSMjd8SQb61C6IEY2tfKjqqthxd/yHo5rbxkVTQScj5E445YHVVaRbORJhFFaX81/G76IqdVNK2Kht5e3dnQMtuVdtWZDXu5SE1lWNNELjRxgUZO13JWRUNtr8nEBRo5raJpVTTI9hpOXKCR07ycVdEA2ytOXjACXJG+fQhY00FuZbaMEeCKhFzAmgpyq7OzkABXJOQCFh65iq8DIrRCyNlYWOSqvnqK1wohZ2MBkSugxkhJyA1owZBb6dcYKQm5AS0QcqWnUUZKQm5AC4Jc5VUbIyUhN6BFQK5ukMBIScgNaI2NHOkLeiFnYo2KHOwLeiFnYo2GXNRf6k4dueF/Vzo9DRlFrF/rWskAuUXa62kZ93LlI1NGFKBeLrjTKVuGyFV/fcWIQsjZWEZF+al02EZQLF9CLmBZFC16NyHXUpADnBpyjb6hZ0Qh5GysmEXV6y8M0QiK5UvIBawoReU/dRNyLQU5QDZytT+rFHItBTlAKnJVq8zEawTF8iXkAlb3ovLFGYSckAtYCEQYUQg5GwuBCCMKIWdjIRBhRCHkbCwEIowohJyNhUCEEYWQs7EQiDCiwCEnSY0k5CRjCTnJWEJOMpaQk4wl5CRjCTnJWEJOMpaQk4wVC7mDq7PZVoOl+xtU7c5m7paJTauK9w5oWRXaV7HI30Sbo+pURIqiWxZpNOTc3ZYOPtsO31IzXJU+3Gqzr+I9PVtWhfZVLPI30eaoOhWRouiWhVMk5Pbcbh9uhW/DFK46/H67zb6K9/RsWRXaV7HI20Sro+pURIqiWxZOEa/lGt1sLlyVddV5l92wKi3c7a5lVZN9FQ+k4WF1ygIfRbcs4iHn7vMVvqVmuCrrroN/5Zaq0sI9PVtWNdhXsaj4rMVRdSqCRdEti3jIvfpqMy2/s2bLqvz1+guL5aq08V/tkqrwvopF3iZaHFWnonDzLKPolkXMEatrbctrudKq3Kg99kJVWrinZ8uq4L6KRf4mWhxVp6Jg8yyj6JZFGg25eQMa3FIzXOX66sN/BD+cpa0v3dOzZVVoX8WilU20OKpORaQoumXhFAk5N6njrj7bzUWVV2WvXtxuXtVwMqq8KrCvYtHKJtocVaciUBTdsnDStw+SsYScZCwhJxlLyEnGEnKSsYScZCwhJxlLyEnGEnKSsYRcH909nf2xczp9fSNJ3rmXpvtnkyQ5l+5/+Jf8qVQmIddHzzKwXt+48vpGht7Ouz+9uHwle3zn3v7Z02O3DCwh10eOsf0P7zny3H//76fstf1f39w/e2XsloEl5HopO6m6f+YrUJ/Lur3s4dTNjLqxGwaWkOul/Q//deOKO6fmz15cPnUz7+WEXI2EXC+9vvG7D++lz07NEXvm0HumXq5eQq6fdpLTDryMtQw1h97+WSFXLyHXT/ORgpskcT3d3ezhr5evCLk6Cbl+ysarYzdhahJy/bRzbuwWTE5Cro/2zy7GqlJzCTnJWEJOMpaQk4wl5CRjCTnJWEJOMpaQk4z1fxMLE8pzWMztAAAAAElFTkSuQmCC)
Changing the number and look of ticks on the x axis
You can add more ticks to a continuous x-axis using the function +scale_x_continuous(n.breaks=num_ticks)
. The number of ticks that you enter won’t always be the exact number of labels it makes, but it will try to get it as close as possible while still ensuring nice break labels.
We can also make the break labels nicer by changing their angle and position. This is done with the function +theme(axis.text.x = element_text(angle=45,vjust=0.5))
, and again, just play around with the values for angle
and vjust
(vertical adjustment) until you get something that looks right. If vjust
doesn’t work for you, there is also an argument hjust
(horizontal adjustment) that you can add.
barnnamn %>%
mutate(FinalLetter = str_sub(name, -1, -1)) %>%
mutate(Final = if_else(FinalLetter %in% c("a",'ä','ö','å', "e", "i", "o", "u", "y"), "vowel", "consonant")) %>%
group_by(Final,year,sex) %>%
summarise(total=sum(n)) %>%
ggplot(aes(x=year, y=total)) + geom_line() + facet_grid(sex ~ Final)+theme_minimal()+scale_x_continuous(n.breaks=16)+theme(axis.text.x = element_text(angle=45,vjust=0.5))
![](data:image/png;base64,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)
Mapping
We can get maps from the packages rnaturalearth
and rnaturalearthdata
, and plot them using the ggplot
function geom_sf()
. sf
is a file format for storing maps.
# required packages
library(rnaturalearth)
library(rnaturalearthdata)
library(ggrepel)
# these packages may not function properly if you don't also have rgeos installed; if you get an error, run install.packages('rgeos') in your console and then try again
# the function ne_countries will give you country maps, if you don't specify which countries, it gives you the whole world.
# Use returnclass="sf" to make sure you get an sf format back, as this is what geom_sf() works with
world <- ne_countries(returnclass = "sf")
# you need to have latitude and longitude information for the things you want to plot -- I get this from google maps -- just right click on a place in google maps (on a computer), and the latitude and longitude will show up and you can copy them
type <- c("rental","parent's house","in-law's house","rental","rental")
latitude <- c(59.865,-33.879,50.874,35.664,-35.284)
longitude <- c(17.641,151.112,6.037,139.482,149.136)
places <- data.frame(type,latitude,longitude)
# start by plotting the map as a base layer
# this always has to come first -- it won't work if you start with the points and try to add the map after
world%>%
ggplot()+
geom_sf()+
# then you can add points on top of it -- note that you need to specify the data, because this comes from a different dataset to the one at the top of the pipe
geom_point(data = places,aes(x=longitude,y=latitude,colour=type))+
theme_void()+ # this is a nice theme for maps; it gets rid of the axes
labs(title="Places I've Lived")
![](data:image/png;base64,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)
You can use the ‘country’ argument in ne_countries()
to get a map of a single country.
Australia <- ne_countries(country="Australia",returnclass = "sf")
australian_places <- places%>%filter(latitude<0)
Australia%>%
ggplot()+
geom_sf()+
# since the data isn't coming from the top of the pipe, you need to tell it the data and aesthetics
geom_point(data = australian_places,aes(x=longitude,y=latitude))+
# you could use labels instead of colour -- but again you need to tell it the aesthesics and data to use
geom_text_repel(data = australian_places,aes(x=longitude,y=latitude,label=type))+
labs(title="Places I've Lived")+
theme_void()
![](data:image/png;base64,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)
You can add multiple countries if you like:
map <- ne_countries(country=c("Australia","New Zealand"),returnclass = "sf")
australian_places <- places%>%filter(latitude<0)
map%>%
ggplot()+
geom_sf()+
# since the data isn't coming from the top of the pipe, you need to tell it the data and aesthetics
geom_point(data = australian_places,aes(x=longitude,y=latitude))+
# you could use labels instead of colour -- but again you need to tell it the aesthesics and data to use
geom_text_repel(data = australian_places,aes(x=longitude,y=latitude,label=type))+
labs(title="Places I've Lived")+
theme_void()
![](data:image/png;base64,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)
Or you can use the argument continent
to specify an entire continent:
Asia <- ne_countries(continent="Asia",returnclass = "sf")
Asia%>%
ggplot()+
geom_sf()+
theme_void()
![](data:image/png;base64,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)
A full list of available countries and continents is shown below:
library(reactable)
data <- countries50
countries <- data@data
countries%>%
select(name,continent)%>%
unique()%>%
arrange(continent,name)%>%
rename(country=name)%>%
reactable(searchable = TRUE,filterable = TRUE)
Visualing variation across multiple variables
If you have 3 or 4 variables, I would try to visualise the third and fourth variables by using features like colour, or by making multiple plots (with factet_wrap()
and facet_grid()
).
However, if you have a whole bunch of variables that are all related/form a cohesive set, and you want to get an idea of how similar or different items are overall, based on their values for all these variables, you can do this by creating a distance matrix. A distance matrix shows the overall distances between all the items in your data, by taking the sum of their distances based on each variable (for more explanation see the notes from lecture 8).
Note that this only works if your data is numerical, or if it has been binarised. For numerical data, make sure you normalise the data so that values of each variable are comparable between different items (e.g. instead of using raw counts, use proportions).
There are two different kinds of visualisations you can make from a distance matrix.
- You can attempt to plot these distances, by transforming them into 2 or 3 dimensional coordinates, and plotting the items as points along these dimensions.
- You can cluster items that are close to eachother together repeatedly, until you get a branching tree.
The first method is called multidimensional scaling, and the second is called cluster analysis.
Multidimensional scaling works well if the data is easily reduced to two or three dimensions, but this isn’t always possible. Cluster analysis works better when you have complicated data which varies along multiple dimensions/with many distinct groups.
Multidimensional scaling
- Convert the data into a distance matrix–make sure it is appropriately normalised/binarised first–using the function
dist()
. Add method="binary"
if the data is binarised. If it’s numerical, the default method (euclidean
) is appropriate.
- Find coordinates for these distances using
cmdscale(distances, k=2)
. k sets the number of dimensions to use; the default is two.
cmdscale()
will make coordinates for your distances as well as it can, but it can’t always represent the distances perfectly, so you should check how closely the distances between the coordinates matches the actual distances. This is called calculating the stress on the coordinates, and we will make our own stress()
function to do this.
# d is the original distances, D is the distances between the coordinates made by cmdscale()
stress <- function(d, D){
sqrt(sum((d - D) ^ 2) / sum(d ^ 2))
}
This is how stress values are interpreted:
Stress >= 0.2 |
Poor |
0.1 <= Stress < 0.2 |
Fair |
0.05 <= Stress < 0.1 |
Good |
Stress < 0.05 |
Excellent |
- If the stress is okay, then you can plot the coordinates in two dimensions. If it’s not okay, then probably a three-dimensional or higher solution is needed to accurately represent the data. You can check how many dimesions are needed by playing around with different values of k in the
cmdscale()
function, and then checking the stress on those coordinates (see notes from lecture 8).
You will also need the functions column_to_rownames()
and as_dataframe(rownames="column_name")
to go between the data format required by dist()
, and that needed for plotting.
Below is an example using euclidean distances (i.e. with numerical data), to visualise distances between different Japanese case particles in terms of their functions.
library(ggrepel)
There were 26 warnings (use warnings() to see them)
# toy data about the frequency of use (as a proportion of the total frequency for each particle) with different cases for some Japanese particles
particle <- c("ga","ni","de","wa","o")
nominative <- c(0.95,0,0,0.5,0)
genitive <- c(0.05,0,0,0,0)
locative <- c(0,0.6,0.7,0.1,0)
instrumental <- c(0,0,0.3,0.05,0)
allative <- c(0,0.3,0,0.1,0)
accusative <- c(0,0.1,0,0.35,1)
particles <- data.frame(particle,nominative,genitive,locative,instrumental,allative,accusative)
# 1. Make the distance matrix
particles%>%
# turn the first column into rownames first -- your columns should only contain measurements of your variables of interest
column_to_rownames("particle")%>%
dist()-> distances
# 2. Make coordinates
# use k=3, 4 etc. for higher-dimensional solutions
coordinates <- cmdscale(distances,k=2)
# 3. Check stress on coordinates
stress(distances,dist(coordinates))
[1] 0.09332946
Here, the stress is less than 0.1 so the two-dimensional coordinates represent the distances well, and the data can be easily plotted
# 3. Plot coordinates
coordinates%>%
# put the rownames into a column first
as_data_frame(rownames="particle")%>%
ggplot(aes(x=V1,y=V2,label=particle))+geom_point()+geom_text_repel()+theme_classic()->plot1
plot1
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAAGwCAMAAAB8TkaXAAAAw1BMVEUAAAAAADoAAGYAOpAAZmYAZrYzMzM6AAA6ADo6AGY6Ojo6OpA6kNtNTU1NTW5NTY5NbqtNjshmAABmADpmAGZmOpBmZrZmtttmtv9uTU1uTW5uTY5ubqtuq+SOTU2OTW6OTY6OyP+QOgCQOjqQZgCQkGaQtpCQ27aQ2/+rbk2rbm6rbo6r5P+2ZgC2///Ijk3I///bkDrb/7bb/9vb///kq27k////tmb/yI7/25D/29v/5Kv//7b//8j//9v//+T///92/93VAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAMDUlEQVR4nO3dCXfTdhqF8QuZENrBLaSzpAu0yUxbaLPOAMbNpu//qSp5JQ6mtqx7ZcXP75wSEfFYfx2/URWHEBVAR6ntBQB1qe0FAHWp7QUAdantBQB1qe0FAHWp7QUAdSlQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUDRGZLaXgJWoEDRFRLT2ykKFF3B8HaMAkVXMLwdo0DRGcxutyhQABYKFICFAgVgoUCxyW6OpN22F4F6FCg22M3R7vA/dJECxQbrPz4d/4LuUaDYYP2dt0UxePq67XWgDgWKDcbwdpkCxQbrP3rNbUNnKVBsMD5h6zIFik3GS2UdpkABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgoUABWChQABYKFICFAgVgocW7rl/1nr8fbr3r9Xpfn/91ASRp4Z7bN4fFuxfDzbPDpQogSgv3XP90Xlx+X11vb387XqoAorRwz+UP74vrH6uxLe8f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)
You can see that de and ni have similar functions, as they group together, while ga and o have opposite functions, with wa falling in between ga and o, but closer to ga. This is because de and ni both have to do with location, while ga is nominative and o is accusative. But wa can take both nominative and accusative case, because it’s a topic marker–that’s why it falls in between ga and o. However, nominatively marked nouns are more often topics than accusatively marked nouns, which is why it is closer to ga than to o.
Below is an example with binary distances, using cognacy data to determine similarities between different dialects of Japanese.
japonic <- read_csv("data/japvocabmatrix.csv")
japonic%>%
rename(language=X)%>%
# excluded dead languages and Okinawa because it is not a dialect and will mess up the scale on the map by being super far away
filter(language!="Old_Japanese",language!="Middle_Japanese",language!="Okinawa")%>%
column_to_rownames("language")%>%
dist(method = "binary")->distances
coordinates <- cmdscale(distances,k=2)
coordinates%>%
as_data_frame(rownames="Location")%>%
ggplot(aes(x=V2,y=-V1,label=Location))+
geom_point()+
geom_text_repel()+
theme_classic()+
labs(x="Conservative versus progressive",y="South to north")
![](data:image/png;base64,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)
Here, instead of having distinct groups, we actually have a continuum which we can label as reflecting the spatial location (south to north) on the one hand, as well as the conservativeness of the dialect on the other hand–if you know about Japanese dialectology.
The stress on this representation is actually fairly high
stress(distances,dist(coordinates))
[1] 0.5535626
However, a three-dimensional solution is only marginally better:
higher_solution <- cmdscale(distances,k=3)
stress(distances,dist(higher_solution))
[1] 0.4809971
Here, the high stress value is likely because we have a lot of languages, so it may be that it is hard to get the correct positioning of the languages within each small group. That is, the spatial relationship between languages that are close to eachother may not be very accurate. However, the main dialect groups and the large distances in this figure are well-represented (based on what we already know about Japonic), so I think it is still a good representation–as long as you warn people not to look at the small distances. If this two-dimensional representation was really a bad represenation, we would expect a bigger difference between the stress levels of a two-dimensional versus three-dimensional solution.
Cluster analysis
If you want to know about the close relationships (small distances) as well, you could use a cluster analysis
clusters <- hclust(distances,method="ward.D2") # method="ward.D2" usually produces good results
plot(clusters)
![](data:image/png;base64,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)
Compared to multidimensional scaling, cluster analyses are better at showing distinct groups when you have a lot of data points. From the first two splits in the tree here, we already have four distinct groups–they basically represent the north and east of country, versus the south and west of the country. However, in the multidimensional scaling representation the western and eastern groups ended up squished together (it was hard to clearly separate them), so that could also contribute to high stress levels. This is probably because the eastern and western groups are less distinct from eachother than the northern and southern groups (which were preserved), and like we said the multidimensional scaling representation just shows the general trends and not the small differences.
So, if I were to present this data, I would include both the multidimensional scaling analysis (to show the overall trends), as well as the cluster analysis (to show distinct, including smaller-level, groupings).
When to use which method?
If you only have a few data points (like in the first example with the Japanese particles), multidimensional scaling and cluster analyses are usually equally good at representing the distances, because there’s enough space on the multidimensional scaled plot to keep all the groups distinct. So it’s just a matter of personal preference as to which visualisation you prefer, although if you think the data is hierarchically structured the cluster analysis would represent this hierarchical structure better.
If you have a lot of data points, however, it is hard to keep groups distinct on multidimensional scaling plots (as we saw with the Japanese data). In this case, the cluster analysis is better for showing the groupings, and it is only worth still using the multidimensional scaling plot if you think the dimensions are meaningful and represent some overall trends in the data (e.g. the north-south, conservative-progressive trends we saw in the Japanese data). If you cannot think of any meaningful labels for your dimensions, then probably all the multidimensional scaling analysis is doing is trying to represent distinct groups–rather than any kind of continuum–in which case I would just use a cluster analysis because that does grouping better when there’s lots of data points.
For instance, below is an example, plotting words based on their sensory modality ratings:
norms <- read_csv("data/lynott_connell_2009_modality.csv")
norms%>%
select(-PropertyBritish,-DominantModality)%>%
column_to_rownames("Word")%>%
sample_n(50)%>%
dist()->distances
coordinates <- cmdscale(distances)
coordinates%>%
as_data_frame(rownames="Word")%>%
ggplot(aes(x=V1,y=V2,label=Word))+
geom_point()+
geom_text_repel()+
theme_classic()
![](data:image/png;base64,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)
There groupings are not very clear, nor can we come up with any meaningful labels for these dimensions. In this case, I would just use a cluster analysis because at least then the groupings are clear:
clusters <- hclust(distances,method="ward.D2") # method="ward.D2" usually produces good results
plot(clusters)
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnIAAAGCCAMAAABTit4jAAABs1BMVEUAAAAAAA0AABcAACAAACgAACoAADEAADoAAEkAAFgAAGYADQAAFwAAF2YAICEAIXwAOioAOjoAOmYAOnwAOpAAOp0ASbYAZoEAZpAAZp0AZrYNUbwXZtsgIQAge9soAAAoADooOgAokNsxUTIxkNsyUTE6AAA6ADo6AGY6KAA6KgA6OgA6OmY6OpA6ZpA6ZrY6kJA6kJw6kLY6kLw6kNtJAABJADpJSQBJtv9YAABYAA1YADpYZjpmAABmABdmADpmAGZmOgBmOjpmZgBmZmZmgWZmkJBmkLZmkNtmtrZmtttmtv9m2/97IAB7OgB72/98IQCBKACBZgCB//+QKACQKgCQMgCQOgCQOjqQOkmQOmaQZgCQZjqQkGaQkLaQkNuQnWaQtpCQttuQtv+Q27aQ29uQ2/+cZgCdkDq2SQC2ZgC2Zjq2ZpC2kDq2kGa2tma225C227a229u22/+2/7a2/9u2//+8kDrbkCrbkDLbkDrbkGbbtmbbtpDb25Db27bb29vb2//b/7bb/9vb////gSj/nTr/tkn/tlj/tmb/25D/27b//4H//5z//7b//9v////paz+UAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAgAElEQVR4nO1di58sR1Vu42NvFjRysxoZQXxugheIgQ0adbgEXyQLUaO4CkQFZYGOeNHsXXW4gN47GmeDs/0n2/U+VXW6uqsfNdUz5/v9kp07XV1VXfX1qfOqmqIiEJKi2HUHCIcGohwhMYhyhMQgyhESgyhHSAyiHCExiHKExCDKERKDKEdIDKIcITGIcoTEIMoREoMoR0iMg6Pc7aN7RVF87B328aI4WTcX/Kfr5lpWBcfRJ95pb7EsjgM1HR4OjXLbVwVZirMWyr33aogoknI16c5bmyTK2TgwytUsUzgPUy5MFE254uiyrU2inI0Do1xNlbtfr0VYzbyTtaCcYMR2yeRe9b17crUsGZ3qC7dv11+8uOa3Hn3t1eL4HVkPp9EPa5m5qP9apb5R/+MuJ+Lt26d1c7wBc/f3P1cUH/iTdSVvu3tpX/8+E8Mfu+Q9Wnz/XnH0evW9U1nffuCwKFeTTEic279+8b8qn3JSeNVfSMrVXzPcvVbXpFiUlGO31d94pYTw0yKVU0reLQuwesT1o3vw+kbfListinuyin3BYVGOSQ7zL49y7PK6esQVPfF1yQTPzamk48k71X+KWxXlxAe71N132P/rzzV9FmsmyQSl+N11KcE7fb2E1+su/cJaVMUod8Y6U7wuy+8JDotyghYKHuXqy3f/VV7kX8vldiVJYUwFQLmjS79UXdGiMjWDu6ViV0qmetdr/PCf77HlWgvQk7XT75mDKAcoJ1Y6oWjxr+vyeqFbQUvBopxfikvTujYuUpWudlkZI5n9U32G16vbr4qqFlIii/8T5WaL5oVVTOp7woVy9A+SCJuiC+X8Urwd1RiklPquvuUcu85If/dvf7gkyu0LgPlQm6U+5WrSvXVPKPdKyunFFKUcr9AvpaScJ8XapJzoxpYotz9AnCRisjdGQb/9ila0oFTEKMfqWSClxDe2ribubtbl+PWNUgXPiHJ7AsQVzK1Bxp0zNuGfXLPVVTOxZH6x95bmCwnbFeyVEkSxLVJxd7PFqqTcyRoSmSg3e+iA14tqldPKfz2pbxsabaBfjn2BU44HvLxSUu6V0C8n7270y2ldjsyHPYMM6zNfiFSmbmoWfuJfhKMDxPzf5h62975aM5IH7zHKqbC+W0pS7vY7p8UHXrcsUhl9+LzoS93Gx9/xLNa7X18JthPlCJOgDOWz7CGIcrtDyZd34TY+IBDldgflz2tPRtkrEOV2iPc+d9oxzXOfQJQjJAZRjpAYRDlCYhDlCIlBlCMkBlGOkBhEOUJiEOUIiTEy5YjBhDYQ5QiJQZQjJAZRjpAYRDlCYsRxROVJNx5XQJQjtCGKIyuVDr1pyosmyhHaEMOR2wtNtFVD7jRRjtCGGI5sl3qH8KZhaSXKEdowHylXZIHpnu9gEKnLSTG3C10ui9nOohMzR9wYqmP2GnfBEeUIbZiPXy6L2c6iEzPHOGOYQtfJYraz6MTMETeG7FwErs6t0lusWcx2Fp2YOeLMB35qMttbTpQj9EW8k+T2gp1WRZQj9EQfV3B5sibKEfqilyu4XBDlCH0Rp8tJoomzRgdXF4csZjuLTswcsRarWFpvL4hyhJ4gV3AUsujEzEGUi0IWnZg5iHJRyKITMwdRLgpZdGLmIMpFIYtOzBxEuShk0YmZgygXhSw6MXMQ5aKQRSdmDqJcFLLoxMxBlItCFp2YOYhyUciiEzMHUS4KWXRi5iDKRSGLTswcRLkoZNGJmYMoF4UsOjFzEOWikEUnZg6iXBSy6MTMQZSLQhadmDmIclHIohMzB1EuCll0YuYgykUhi07MHES5KGTRiZmDKBeFLDoxc9BhX1HIohMzB0m5KGTRiZmDKBeFLDoxcxDlopBFJ2aOQ6Rc0lP7U6i588JBUm60mvJvNUMQ5VKBKCdBlEsFopwEUS4ViHISRLlUIMpJEOVSgSgnQZRLBaKcBFEuFYhyEkS5VCDKSRDlUoEoJ0GUSwWinARRLhWIchJEuVQgykkQ5VKBKCdBlEsFopwEUS4ViHISRLlUIMpJxA3E7YVIcG34nUKiXHatZoiogVgV8jeAN+rDoOrikAvlKIF9IGIeSP/qdE2+k/Xg6iKRDeVG6kWu7U2OmAfaLs/Vx82cfwKYKLdTkJRLe3f+7U2OSF1OirmD1uVG6kWu7U2OuAfaLoVG2yDjiHIT4MApl7q6aaomyu0U4zxQCoueKLcnICmX9u7825scRLm0d+ff3uSI88uZBZT8cqlw0JSrbi8ag6t9qosDUW5PEBvWX4xZXRSIcnuCyAfaFOfB60S50XHolEtc3TRVE+V2CqJc2rvzb29yEOXS3p1/e5ODKJf27vzbmxwZUS5Z7ixRbqfIiXKpGibK7RREuSlbGgNEuemqI8pl0d7kIMpN2dIYIMpNVx1RLov2JgdRbsqWxgBRbrrqiHJZtDc5iHJTtjQGiHLTVUeUy6K9yUGUm7KlMUCUm646olwW7U0OotyULY0Botx01RHlsmhvchDlpmxpDBDlpquOKJdFe5NDP9D2/iX/23RyXGR1ie+dFeWGJQaOlja4K3iUWzVTbrtkR3xtionOCj4cyg2uYRdVjwbZx9K8Jw0nx1WScvwwQ3CeJlrdkK7E3NHvTSfK7RSelAuAUU6SbYpTNHtQrl89RLmdIqaPjHI3p5xyjsY3ii5BlGu8Ya+0PtNy6286kJQb4e5eNUxBjxwoV7aaquLkpUWlDIlgdUO6MuwOotyu6oxsuZFFFmrWHV02n05NlJukhr2lXPiAm8jqWoqNo3IQ5RJ2YvyWW8/xiqtulGJtJe2LnclKlJuoztiWpS06VnVjFGsrWQT+FbjzkCiXoSkrGuhwJGtMdWMVaytJlJvg1kSUS10dUa690DhCiCgX3erhUm6c5nOmHFhbB+h0Y1Gu2+tNlBunrYF39G5AONs2xXk3D11bdcOKtfIL+WqvKdd3hc2ZcspJsjpZN0WzYqobWKydX/7Q5025WM2s9WnmTznlCt4cXw/I0kxHOf9TcJLGcwn0pVxkZQdAOfX7vkzK7SPl+vZkhDsCtx005YwuNyQOQZSLu+2wKSds1lrAtaeUdKrOvRJAp3qIcn36kTflpq0u0BBRrv2Keco4bbRDb0PCoI+y29pequqGUC5ons6TcrFyvukpG7ncnTmDORuJeVDO/4R81bGKzt0a7Q7sttbeDaVcp1Jtl1qv9oGocbs809GHicL6h0w5RNYko1wvvbnz1T4gKReLPpTz701HudbS2FdTanX5US4oEkaiXMcRxUc+fj6CGij2vIEhSEO5YJUDAeqpl9aTddk/vupU1/lKEzmmpFy3DkYMcn/KIVV0Kx9seRaU2xxdrk7WQ2L61UFRLkLmTUO52CabHmlnlGMBLxbPHxDtqhJSLtwLfyKClGudN7SR7tdGoFyoVMcmsZsanjwN5VhYn1FuqpOXGuR/J60lmnKhypBqIkRCt4tpKYeqg0j5QKnwmhChtnaAJ+XK/plLFT5Gkyw5HXvRUH5CynWd/8BX0ZSLvBguH1ohRqGduVfocqtgTnDrIRKtesFcKNe45CBobXtWlIv8Kh7gXu4MPgqdv7RSu/Qbt+vvD+UayjYSsFMVRLnIe1VKXRV1DE5QLO+Acr3Vx278Isq1IeZecIZExGFfIzxWK+WcU2fDlOvbZLL57Diz86Zct63THaRcYwvWp9Efyzl1dgaUC5Uag3Ldat21lGs/CEfbFs1HL4VamOqxvFNnc6NcCES5MJQ0jHGkpJRyzZUhFw+Dch3LZ0u5YS0ke6w5UQ4DUW4Ypn+GynUYzp1y3UCUa29hQsrZW4QOg3JIQ0Q5p4WRngGa1xJ3XrbMmT2iXBdfQn/KdatsvyjXC+D0FPHp6B8juj7NyE8p5eTzNgaGpqZcbBUtmCHlzOkpT77409x0Xj37RmC3t3Om1MSUGx/gtJjpGtFIRbnRTtHs0FY1dH7M6SlXS9HZzfGDUDaCfaZU717sinLgtJjpGkmIZDpuNaKUU6enPPni03wWyruvBN4X50yp2VFOPe+wtLJ8MEPKgdNTvsSF2yqY/jLSmVI7xKbLU84HKSk3GszpKVfL9ljIOGdK7RKujT7Pp1DImnKWilmzK2wjNG5PG+VMqfHQ/4jcNtNV15/DYzYia8oxgGFeFY2/FhvenjbGmVI9oecfEKHvEbmdTdfAQGWA3CnnDDMfTD8dfpztadNAz7/6EH9ErhThMaYra+ylUU4cHx25U84bZjaWP/EXlb3q3nl5jO1pk8FmHXTyPH294rpocFOJEuGfijJdWVvFr1aDTxwfHVlRDiw+SjezPQQb9sJulx92xzy8Pa39l2Ynx0o1r4nApNw3f+b4u6eLqlyAJV89OHijPqpE+IPOpisfqNuL9/PxGHbi+OjIinJGHhjdzHgI2CSwkdsu/8gjT3B72g5UOAt8/mvinzwSH75U/Dr/9rXlby7Y4zFxp6QQfHCp8f3oIx9SInwrDfSwheAOVGbeocwoVwnWfQroZmaY5duN2p1qe5qzC0Jc2uWqoubffKg2d17mQm/78vE1ex1WNeXku2KU0ocgrPfM2hPhAQsBDFTQO6Q1xMQG7u4oJx4VC7WJVcjVzbZ/J/7eflmsL/iZeIJyjncloDwjaSkj6Nqmr1dq/jURAMrFdslE2kK/RebMhCujxP73U1/ARDi3EPw3DCDoHTLytIm+E4VBdynl9CoK3U1SC/nwyb85L7YUVpuCywh8GOAuCF1r2Bunp+Xd4herobq2UcRkX8MzxX/Dm3dP/TKpUUqfABHFnxjR4LSGyAUl1IPl+Fg+c+G3hEqyMfIbhWY3V2AUJqVcu8wWq6h2GujFZ/PU8bfki62dvOzpG2oE7+Mvy8EBrohNQG7pYs++8bNS1378SpP4bYOtiNkCVL8oRfG6bc5YLT3QSqkjojyhvrEk8xl0wvi2gu6Z/uCeQbOyqvuIHGY5PNtXCh99Bd/EUq7dKWneVLaY6LdJHx0AnLwb7zn1+/zA865CV0RgjHSxOy8bXfspTPw2QquPT79qBIfuq67DOIBffjowWebMBC2invqCfJJrqxS3EO7/PXwqywkDoEWa6eJDaORLA0fZNfUo/oYYAhifdh6kt+CbfmENsU6vouy1RD0clvx39zLq9xmItP94n+AXG9zKq9WozAoflevXs2/8mlhihK4NxC98xY+vjcdFr6JqE63lHZR9BVJUdfHxK8+sVWe6yAtnk664s2nCgRMGeIeulEgDXdRGvl5abv/yzrUcRT7khbDjxCg+8R+kp98lhS7Hh0Hrx5bKIb1tbDD/HZXZtvxnjgWwvmjDALyM3+Z+4grPvzDri5tYXJz/b/FzFdS1ofg1r7jxuMi6zHqp7WzlQzyvLCnqZvnpTkmdS8CVUN4mXRtGb6u0sPqrH/9Tea9qSKuIz75huijlqaGvl3LDJ+53xCgiD5LnwqqH4c/0kCmpt3VWUSHgVWI5lELOzNpxLusDEyF61dK1VrC8XF9MzInn2rH1S7ou+EQ54le/4iePl2dOXcdXehOtYKH17jxUYoJNtqjiyRfv2JNVLrCwqxFRvhFuZO2b9RMsuPVhnDD/I4uBHSFapIUcmLZTRXkTi0LGR5wH6Z2+Ny3lgC/q+NqssELl8O17sz4+MlPwUwEn783zcrb1lP3f6c87PXCkol5fZNvIy+qIX/iK24LVi7Ehh1dpYetm+YEi0glnsyrowFYXuanCiF+/C0eO4WTtLNA98x2YD7WqACyWAkyc9yDD0vcmtljtfgGjvv4kteKVvYoybDwpZNVj1KmbU/VJ69ohG9laX1T93swi4vfWU2lgjA1PM6icOow54IrrFXTCbQCZGmEZSTcvXPP/3FHEfea6lNYQ34QToLqIEMp+kMl/s3cE6LDPmn36baiieAHVu69gUogTDKpTqIczuAtCry/mfX6/XgJd4ni1sjdb12+WKF8eRe1c4q5g7xWQVdiST43AFkYrGHlqymniP9R8132FrwAH0BBfCrohLV1xHEy9sHLfNnC4Ve+qN2T7GUcRBwHVb2ChGkGTFbMgdPXezOopAn4wIFXs9YW/z6p+QxwsDQBENy3Byuf/zGm7Y0wTnPBiL2lCsGKvkxgBEE1gw1NyeWv6r9QNxM4Cjd93jAYLiK44GqalXL3q3LBUieeAVeSJ7FskoAp0MzVs6uVdKREIX95w8k/AkQT4ol92P60jCHfOoAVa1yQlU0susHoFvq0sRERcA1loLta2R30va/IMVuUMBn8FcO824LYZRV9XXJvBGPgDIRPrcud85DbKSWaJeDUCaLKbk8jLp9FR9CpgPoR0bWOUPMZi/o6fBZKv209hePKohP/Wkkl8eLf40I8+4lPC1KWUxseAOF6KJuLdDq7lQQ8goK+6jOmKfgAjMCYhTE45niqhLERrZEops1/vchZ7CfSdH5xqmuhV1FLX9cso10I9U1plfmgUH20OGH+hl9ahZx1NRnCXHfju6F4DD6pxoirdzBoxtwovRRN1wnbb1yGX0+3y6StPAwEpVIiu+PDCC2Bk6ZfTqRJmCDfwTRIy+1GHs9iVO9YOBair8EhZ8DJWfIlSs/7n5s4zIxWNOWB0bS+tw7ziim3K6fFu4fdnZVZWY4sCV/BnlOR+oCSgfkxse4Nh/gOjy/kixggrs3z4A+VHMgzMKCK64mMkgOFX0QWT++V4qgRUZAswGVJm88s/eQomzzMfV0YrQtoxQwS8vWL8SqX4MPeaUZk9xQfMj5o8O63DerNrMfFqU9ynfsO0BD8HUk57q39XOoqkurF95Rmzij7w9U7AfNtidTfA6bFDpOANGF3+0gXcopW12EpdEQ1g9MLukpeAfe9fdHUzNo0h6CHS83Pn02ZIPUdSR8XngQlDwjebFdAn71h6obhPWt9C63Z0OZj/8ZJTBaTQ05BC/hyHRAz2cNra15ESTN6BUfTkY7cARhfsMF/O2PfeJV8KWYVKbdM6pcD8PPuGGBJYvS4GLJAglB8E+H2ZuGATgSj6RQE1VuWh1bLZzQyBFmiwF/4cG9n8aV/oI3a8sfZ/T5T/NiS+LyhRPnsBjJ6YOl9OPYMxrM3yKGX2lZRgG+hRQF4hrR+9KRO7UdoAby9fTpGXcWPWzq4AaRdeAAgJkAYlOKhV63LhHUHQA7gyrx8L5plDkkFMxrPjTUz+00q2Xd3vxplmbaYvUkg5S/3eeCozVxUqkLCxKl5HzC+dqdSynVMnSBQudPnyOS3uEMPtutEVzEe+noOF+Qo4baEtGpDgwEFu5hOQw7ykFr94v6WbU+v28NmAK/hUPZLjmmrJSrGeVrahp0vn1v/N5+WHL2dpPkiUHwS7SLzFZLt8jfuHN+DiI0NJtYpahjsv5WtRHV3BLcaW5QrGookry52L6PLXWuuuPFdwTQ6HOVCR0HaHxy/g5gTLgdHNQAqKH9b3dTnjTWp8w+oGTBjosdkHID/kabFKAMMaBLCBh7N+6jN4EYicUq2iRkURIvLm1HtTcSr5joewS8lyBVeWnwWU8WP4+EYqR6pLn7bjIAcOaZMZovkFfeZiR9g1tlZ4rk/oqvPXR73wlNIm8ncvbZcw5UbtAwhsCOiEJJTT7kNrF4l6Zm64rYqTR7gI1M+sVZRm/aJcbHFdXlahvsD3T+h4sJ4y5Wd5DBzYalrQnB+vYs9EYF30HOSWYBJ2x5UqBZweYEeYN1C2n0iNU2jTh1x4nHOWwXhYUm4Nc+sHhflTUI65gp1dJNKdKZ9ZCK0Ce3nBKmoylRpb0g7jZfGaZcQyGNvymceIovemWsjM/BvXFaCr4nrprOs6y/Mu9FZfuXyvPyAOcrjDS9oduhSUX3JHGKbOGouIv5tIQDWcO2gFI5Vdbglp7SSI+XEjH0ksVpP1XBkRtXWema9V5qIaLL2KdonowB3HRpfvlFMIFCXjClZ+lse+rojFGD0j1izJ0LDwHOSAHN/SdofmFxJqQKQc5m2HOXSuLQJcu16kD+oNcEXxIzV9sFtXcKMX22jRlZcj1uxRACLByrTrklOolzswZQ8wP0uzH8dP5ISuYN3FYDeA3WFafN57WfzloKVWKcI/aOirFx6z/Nq5iaCjyMuR6aZCLBRoEPBiw5wZvzIsJVKJU3sXhONksFwQWvrKodULmVfaGt+AH8dPV7dcjW4XOwPTKLq5y6C1z0W4WUV9HrnicVXgwdyhmDyTRH9UU+xO6S+5WY+FsM3c/GqQeRgkstLly/ctHCcD2FSsbVETptcLWRC3jh8H6kcm7PpEyztEtIJR8TNJ9MkSMBkl0jj0feZGhD+IkU3GYgUYzMJpF1ajNOspLgNvJ9iXarz3W/f0K2QYIKQuz86YUccamdfYs0W1I7+jk2+L+HHM42oHYFB9BDtYfFcHn08rPyV4poq+zfb7ca3kNSNrlQh/LvRsANouf2CttY2RoRikCXiBtI5KhrZxP4V6GuO99xMCm09eciP30oklvtiIbAhx0Uqj4O4AX11qcPIh7omzyluFffUR5DPpUfFjrIjTCxMroQCZ1kp08oqxWOxyauHRpgV4vY8uYaehN2HowWFpzAcvU+b2AuSUYRuj3JwZNOHBwEjRytTg6GZ1lWptNraoDtP7AcxfQUVCyAnrPTZMDXkVyXLC8jF9IiHmA6LOgsOelFbyrSafOW9IDZkJc4TyffW7FvyNjS6YVsqZ0zpgWoeQcmIVdfJrvcEFaUOKE4jHAiyU4FAE58XeANeetkXNiuoFmBreZq1/6Q8d99Y0akV2JFY6vYJOD4QV5rCnh0YrQYwMExmWQ8a2kggN5CF4vbvlK/dCEsqtzBRzRshTXnzhoChh75WQrhQ/6Og1tAntODZOO4voR+KUIRjAlOVNLzCYgHcn/chIcJCPh7o6LCGOz3BTSpxYkkM5BV666saE0a7M621kuaFot0yrdkxIOWuvpPl8R6+tiIcTCUjDNEmbE/BG47Rtoonlx7exKkT1lu7HdG2/OHImRcsUqDlzJfjGkyWoUwZ7w3B11izJiG/P6T5zHaoh+yYMo7lhyUeOd5uxcGA+UxIph8PMgdFaEaekSRbToUlfqmzMQuk5jNXCFPKI1evrmybApMqjh0ec2x/aFhotVjzvGkom/360fjR66sWhfG3ZOrxLD5nSQKzXmxeD51cppsW6oV0kjz6YYTCKldJajUWJrVWOPeAet+ZKUWyF9Vlu3AGe7of3QjULpVwgugFOj3EZ1k0rwg6wQIShqNGhQentewYbLLFaYBY0LwaOTXCfKOvDvhj0rICNKM7pHivMfLCrsDiBSwk17Jjd5e5qEO6sqCUCU8RCTjjvjCwDE1pDXp5w1ktjrwrXyHBjOB3PI3RjLHhuT4eeIZiOcpZ78oGyyO2EMFnQJNMhL2+jCEGfGXMYx/4ajjaNg2c/64Um+OOV4EhDb9X7ILIVS7+R6KYPfW9jzyx578RwmsVj88MBisqvZiLl7MwzMQwPoSLuxfeNB6JRhIQTLaE4RCbG7NjylWF9rEVo06ddGUPwVPJal1MSXJPpsW+eYIIJa7JTzzruwLCahyS3KepsVctdl4OHmRmnkT4czo/vW1l1DL4IidhniCb/SJarDdkmv+5KmMZNGwU8qdv8a262yPHkC2LNYId3ecB7huyVCO7AQIA41DWAcMvZYtWpDMDbD7Z/6znwdqmBfJDQdtFQy3YyogvNcjTzTJnGyI49TOr2Pq/ZV12d4HLTQ2KuAOC21Jsum70lGOQs4SeWzsQVXOmNC2CHX5dhMM/3sFGEoLdhvz4S/jUcZCT9NCYDP6DaXT+yG1duB/tGK7hctSaWwjq121KPesfu6CpAFrT3FqkH/321FbY3kiQvbe6gL04zrGOt8IePQNsWANHSE3jUucr39taqMV52c4oeQgoTXHaSXVoAU0x7dtGsRU+QF11rIB03wDYiSYpmq/7tkVEQrfmQ9NYm3bobya61RsSPh4TYOv8Mb3sXS3NQHoJmo7QB/l6c6LfCc6hbjXOZ/GM9hLqDaRdWZPsfloWPTF9IRW0/kANfYe1yzukBaKQcCbEZqdslvb25ixXcVIgAqL9dq1Vuy8ZNl+01aIhz5TERGw4pdcDE5gM8kEN6+9EdwY1Arbqg1PI9Ioi88NN00ENgvbAreMe7/ziq90hKUP4A8Xxvze9HIRsvumH4oQ6+kTReSnqi6IP101GO5Ag+TGwOKsJHxImFuIIxI6Pdjuj18wfer1tg70KM33YCoCmv4yCVK1j/LocrOSo0BdFgqFGOOrGAK1iHJr7rGxmh7RA97YgWJoXDIlMDUaoNRvsV4USuYDPFiOQI7YnGA/wnaz9tQpZHjgP2lQ+YhccK9hApI9gRCNAfMEkGPw3AoFtWYBeklXIl2BEMLkY6kEJ+p26hIJim01dFGeGXSvFU/EFHVA5Bx2jbUCTV5XBdOF5da1zSOp9m5bmC4zCSooVIlaFHVA5Bp2jbcCRNXsIlQtgWat6Ugx+xHGnCR4vYEYFKlcBATY2WNICAOhOFXf7QuULQfEAkQV+/E974mD/cEodEUqU7gmkAfcNoHjKgXMtWZUQShPxOSJCqsdG76In+yYBIlSkOZIhAIP49l7C+wRBXfZQkCOwDAxj6A4/jwJcq43m/xkb/MJqLdOZD1dNVH5dmGNoHZtfKsBPDEMCXKrvxjgiEw7qjqTOps4Lx45oDa1tkmqEXpGosxbDLCUYxnverT+NhB9NYZ6Pv6IAICyEPZGyaYTBIpTGNH3fe6O5gGoi0Ug6d4nE9kN3O7BrBj7t/GJwj0g2pdLlAWkRqX8GOA+YtvehrZ80HqWKsgVlusRD2fw4g8jClJ0UGfrmwhRA7B0FbJHvkYkpPiRwoF7IQoucgbItkBSD7z/VXmZrSIyILygUQOweJsiHGAfZ7c/tvSmdAuWCQJ3YOsotbBoD93twBmNIZUC4c5Imcg/hDEXYH9zcq8resqmwAAAVMSURBVDClJ0cGlGteNPvMQeyhCDtE+Pfm9hYZUG7kIE9ktGKXCP3e3P4iA8odMORvVKDHL+4tiHKExMiBcvP23hIikQPlZuS9JQxHBpSblfeWMBhZUG4+3lvCcGRAuTl5bwnDkQHl5uS9JQxHDpSbk/eWMBhZUI5wSCDKERIjC8qNddoFYQ7IgXKjnXZBmAMyoNwhJF8TDDKg3HinXRDmgAwoN+7hXYTckQPlRjvtgjAHZEE5wiGBKEdIDKIcITGIcoTEIMoREoMoR0gMohwhMYhyhMQgyhESgyhHSAyiHCExiHKExCDKERKDKEdIDKIcITGIcoTEIMoREoMoR0gMohwhMYhyhMQgyhESgyhHSAyiHCExiHKExCDKERKDKEdIDKIcITGIcoTEIMoREoMoR0gMohwhMYhyhMQgyhESgyhHSAyiHCExiHKExCDKERKDKEdIDKIcITGIcoTEIMoREoMoR0gMohwhMYhyhMQgyhESgyhHSAyiHCExiHKExCDKERKDKEdIDKIcITGIcoTEIMoREoMoR0gMohwhMYhyhMQgyhESgyhHSAyiHCExiHKExCDKERKDKEdIDKIcITGIcoTEIMoREoMoR0gMohwhMYhyhMQgykVic3S5XZ6Df583lyVgIMpFoqYc/KdFP0IXEOUiQZQbCqJcBFZFcfSWXFhvTouiOGf/P1lXJfvM+Pfakn9gJYuF/HtWqdI77n4mIMp1R3l8XW0KQbmb05pAm+Kc06+s2bWqpd92Wf9vJf/bLs/435vTM11610+QBYhyncF5U5WCcpuafgzs8/b+pbjKWMY+8L/8IvtbF1WlCRVRLgKCN9Ji3S4Fi5Qut2HrJv9H/T9BTqX3cQ4S5zSIcp2xgpSrbi8KzbJaYzv+7img3PPCxKh5yHGuShMqolwELCnHUQK97ua0ScoplLate7AgynWGINIKUK7+oPW6DVhYjS4HBRv5UwSIct3B7E9lsXIBxiXemRRwxZmmHC95e7Hgf5l0U6V3/QRZgCgXAeiXY3oaJ1RxsmbfX8pVVmt32i8nZKAoTSDKEZKDKEdIDKIcITGIcoTEIMoREoMoR0gMohwhMYhyAm5oAAsV6Jzz2wvmeluYKzfPX6q4ajOUK7hUgddKRmrPVAU8JWXvQZQT6EA581XNts3RW7+11KSLo9zJmt1yumCMY8l1xUJVsOGX9hxEOYEYyslMEpCP1INy/J8ybHt8LSvg4nPfQZQT2C7/+BTmkMuIfSUyRUDOeSVTSjYnXzEr6/az19vPPrxYyNTfEuSm33+LRbxkqIwXlpRjMVgBFqplFdS1rg5AzBHlBNwcckA5K+ecgeWdV+X5zQtO2iXjC1slby/OQG46I5FKYRe3S1qpv/yqxCGE/olyAn4OuaYczDnXRTEwvpR/eLJWhgDMTa9Mvpyi2krWuylMfSrTbp9BlBNwsysB5dyc88a8N1b2/tdeUDsdTG66Tu7kxRzKbYoFrKKBznsEopyAm0MOdTmYc16FJFF5dvPxx/cv+aIKc9NXKOXEXyjjiHKHhICU4/8uTTJwc3bv6uQ7i6r85IWbm45KOWE+rCzGEeUOCEgOOVDDDAWrEC1uXviDs2r1AeZgs3LTdQo7LwWcJDXjbPqSLnc4cHPI64+3Fyfrek09hznnHOWisRKeql5Tys5N1yns4nbpCj6T/4Mgi/Vw4OaQi72qRfEa2+cAcs5ZWbMR2vjWBJi7Q9DIyk3XKey8PAh4rcRHwzPyyxEwAGXu5sWpat5fEOV6wET0N+Nq+xRjJeAwodC3R1W9KJOEQJgARDlCYvw/pHilS4tKkucAAAAASUVORK5CYII=)
We can see that the groupings are not well preserved in the multidimensional scaling plot from the high stress on the coordinates:
stress(distances,dist(coordinates))
[1] 0.2605559
A three-dimensional solution is able to represent the groupings better:
newcoordinates <- cmdscale(distances,k=3)
stress(distances,dist(newcoordinates))
[1] 0.09953989
We could extract the different groupings by plotting the dimensions one after the other... But this is a lot more work (and still it’s easier to see the groups in the cluster dendrogram), so I would just use the cluster analysis instead. I would only try plotting all the dimensions if you think they’re all meaningful.
plot(clusters)
![](data:image/png;base64,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)
LS0tDQp0aXRsZTogIlIgQ2hlYXRzaGVldCINCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9mb2xkaW5nOiBzaG93DQogICAgDQotLS0NCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSx3YXJuaW5nID0gRkFMU0UsbWVzc2FnZSA9IEZBTFNFKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGJhcm5uYW1uKQ0KYGBgDQoNCg0KIyBJbnN0YWxsaW5nIGFuZCBsb2FkaW5nIHBhY2thZ2VzDQoNCllvdSBvbmx5IG5lZWQgdG8gaW5zdGFsbCBwYWNrYWdlcyBvbmNlLCBidXQgeW91IG5lZWQgdG8gbG9hZCB0aGVtIGZvciBldmVyeSBuZXcgUiBzZXNzaW9uLiAgIA0KWW91IHNob3VsZCBkbyB0aGlzIGluIHRoZSBmaXJzdCBjaHVuayBpbiB5b3VyIFIgbWFya2Rvd24gZG9jdW1lbnQuDQoNCnwgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnwqaW5zdGFsbGluZyp8YGluc3RhbGwucGFja2FnZXMoInBhY2thZ2VfbmFtZSIpYHwNCnwqbG9hZGluZyogICB8YGxpYnJhcnkocGFja2FnZV9uYW1lKWAgICAgICAgICAgIHwNCg0KVGhlIG1haW4gcGFja2FnZSB3ZSB1c2UgaXMgdGhlIGB0aWR5dmVyc2VgLiAgIA0KU28geW91IHNob3VsZCBzdGFydCBhbGwgeW91ciAuUm1kIHdpdGggYSBjaHVuayBvZiBjb2RlIGNvbnRhaW5pbmcgYGxpYnJhcnkodGlkeXZlcnNlKWAgKGFuZCBhbnkgb3RoZXIgbGliYXJpZXMvcGFja2FnZXMgeW91IG1heSBiZSB1c2luZykuDQoNCiMgUmVhZGluZyBpbiBkYXRhDQoNClRoZSBmdW5jdGlvbiB5b3UgdXNlIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgZmlsZSBiZWluZyByZWFkOg0KDQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgICAgICAgIHxgcmVhZF9jc3YoImNzdl9maWxlLmNzdiIpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8dGFiIHNlcGFyYXRlZCB2YWx1ZXMgICAgICAgICAgfGByZWFkX3RzdigidHN2X2ZpbGUudHh0IilgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnxvdGhlciBzZXBhcmF0b3JzICAgICAgICAgICAgICB8YHJlYWRfZGVsaW0oImFueWZpbGUudHh0IixzZXA9IjsiKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfGZvciBub24gdXRmLTggZW5jb2RpbmdzICAgICAgIHxgcmVhZF9jc3YoImNzdl9maWxlLmNzdiIsbG9jYWxlID0gbG9jYWxlKGVuY29kaW5nID0gIlNoaWZ0X0pJUyIpKWB8DQp8aWYgeW91IGRvbid0IGtub3cgdGhlIGVuY29kaW5nfGBndWVzc19lbmNvZGluZygiY3N2X2ZpbGUuY3N2IilgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCg0KQWx3YXlzIHVzZSAqKnBsYWluIHRleHQgZm9ybWF0cyoqICguY3N2IG9yIC50eHQgZmlsZXMpIGFuZCBub3QgZXhjZWwgKC54bHN4KSBmaWxlcy4gIA0KVXNlICoqVVRGLTggZW5jb2RpbmcqKiAoZXNwZWNpYWxseSBpZiB5b3UgaGF2ZSBub24tcm9tYW4gY2hhcmFjdGVycyEpLiAgDQpUaGUgYHJlYWRfYCBmdW5jdGlvbnMgYXNzdW1lIHlvdXIgZW5jb2RpbmcgaXMgVVRGLTguIEJ1dCBzb21ldGltZXMgeW91IGdldCBkYXRhIGZyb20gb3RoZXIgcGVvcGxlIHRoYXQgaXNuJ3QgVVRGLTgsIHRoZW4geW91IG11c3Qgc3BlY2lmeSB0aGUgZW5jb2Rpbmcgd2l0aCB0aGUgYGxvY2FsZWAgYXJndW1lbnQgKHlvdSBjYW4gdXNlIGl0IGluIGFueSByZWFkIGZ1bmN0aW9uKS4gSWYgeW91IGRvbid0IGtub3cgdGhlIGVuY29kaW5nLCBgZ3Vlc3NfZW5jb2RpbmdgIHdpbGwgZ3Vlc3MgaXQgZm9yIHlvdS4gIA0KRm9yIGhvdyB0byBjb252ZXJ0IGV4Y2VsIGRvY3VtZW50cyB0byBwbGFpbiB0ZXh0IGZvcm1hdHMsIGFuZCBjaGFuZ2UgdGhlIGVuY29kaW5nIHRvIFVURi04LCBzZWUgdGhlIG5vdGVzIGZyb20gTGVjdHVyZSAxLg0KDQojIEV4cGxvcmluZyBkYXRhc2V0cw0KDQpFeGFtcGxlcyB3aXRoIHRoZSBkYXRhc2V0IGBjYXJzYCwgdGhhdCBjb21lcyB3aXRoIFIuDQoNCnwqdG8gc2VlLi4uKiAgICAgICAgICAgICAgICAgICAgfCp1c2UuLi4qICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnx0aGUgZmlyc3QgZmV3IHJvd3MgICAgICAgICAgICAgfGBoZWFkKGNhcnMpYCAgICAgICAgICAgICAgIHwNCnx0aGUgbnVtYmVyIG9mIGNvbHVtbnMvdmFyaWFibGVzfGBsZW5ndGgoY2FycylgL2BuY29sKGNhcnMpYHwNCnx0aGUgbnVtYmVyIG9mIHJvd3MgICAgICAgICAgICAgfGBucm93KGNhcnMpYCAgICAgICAgICAgICAgIHwNCnx1bmlxdWUgcm93cyAgICAgICAgICAgICAgICAgICAgfGB1bmlxdWUoY2FycylgICAgICAgICAgICAgIHwNCnx1bmlxdWUgdmFscyBpbiBjb2x1bW4gICAgICAgICAgfGB1bmlxdWUoY2FycyRzcGVlZClgICAgICAgIHwNCnxyYW5nZSBvZiBudW1iZXJzIGluIGEgY29sdW1uICAgfGByYW5nZShjYXJzJHNwZWVkKWAgICAgICAgIHwNCnxtaW4gdmFsdWUgaW4gY29sdW1uICAgICAgICAgICAgfGBtaW4oY2FycyRzcGVlZClgICAgICAgICAgIHwNCnxtYXggdmFsdWUgaW4gY29sdW1uICAgICAgICAgICAgfGBtYXgoY2FycyRzcGVlZClgICAgICAgICAgIHwNCg0KIyBEYXRhIHdyYW5nbGluZw0KDQojIyBEYXRhZnJhbWVzDQoNCkl0IGlzIGVhc2llciBpZiB5b3UgZG8gdGhpcyB1c2luZyBwaXBlcy4gVGhlIHBpcGUgZnVuY3Rpb24gaXMgYCU+JWAuICANClRoZSBwaXBlIGZ1bmN0aW9uIHRlbGxzIFIgdG8gdXNlIHRoZSBvdXRwdXQgZnJvbSB0aGUgcHJldmlvdXMgZnVuY3Rpb24gYXMgaW5wdXQgdG8gdGhlIG5leHQgZnVuY3Rpb24uICANCkl0IG1lYW5zIHlvdSBkb24ndCBoYXZlIHRvIGtlZXAgdHlwaW5nIHRoZSBuYW1lIG9mIHRoZSBkYXRhc2V0IGV2ZXJ5IHRpbWUgeW91IHVzZSB0aGUgZnVuY3Rpb24uICANClRvIHNhdmUgdGhlIG91dHB1dCBmcm9tIGEgcGlwZSwgYWRkIGFuIGFzc2lnbm1lbnQgb3BlcmF0b3IgYC0+YCBhdCB0aGUgZW5kLCBvciBgPC1gIGF0IHRoZSBiZWdpbm5pbmcuIEJlbG93IGFyZSB0d28gd2F5cyBvZiBkb2luZyB0aGUgc2FtZSB0aGluZzoNCg0KYGBgDQpjYXJzJT4lDQogIGZpbHRlcihzcGVlZDw0KSU+JQ0KICBzZWxlY3Qoc3BlZWQsZGlzdCktPnNsb3dfY2Fycw0KICANCnNsb3dfY2FycyA8LSBjYXJzJT4lDQogICAgICAgICAgICAgICBmaWx0ZXIoc3BlZWQ8NCklPiUNCiAgICAgICAgICAgICAgIHNlbGVjdChzcGVlZCxkaXN0KQ0KYGBgDQoNCnwqdG8uLi4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCp1c2UqLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Tm90ZXMvRXhhbXBsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgDQp8KipmaWx0ZXIgcm93cyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgY2FycyU+JWZpbHRlcihzcGVlZD4yKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8KipzZWxlY3QgY29sdW1ucyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgY2FycyU+JXNlbGVjdChzcGVlZCxkaXN0KWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8Z2V0IG9ubHkgKip1bmlxdWUgcm93cyoqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgY2FycyU+JXVuaXF1ZSgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8KipzYW1wbGUqKiBpICoqcmFuZG9tIHJvd3MqKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgY2FycyU+JXNhbXBsZV9uKGkpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8KipwdWxsKiogb3V0IGEgc2luZ2xlIGNvbHVtbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgY2FycyU+JXB1bGwoc3BlZWQpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFlvdSBjYW4gdXNlIHRoZSB2ZWN0b3JzIGZ1bmN0aW9uczxiciAvPmluIHRoZSBuZXh0IHNlY3Rpb24gb24gdGhpcyBjb2x1bW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8KiphcnJhbmdlKiogYnkgYSBjb2x1bW4sIGluIGFzY2VuZGluZyBvcmRlciAgICAgICAgICAgIHxgY2FycyU+JWFycmFuZ2Uoc3BlZWQpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8YXJyYW5nZSBieSBhIGNvbHVtbiwgaW4gZGVzY2VuZGluZyBvcmRlciAgICAgICAgICAgICAgIHxgY2FycyU+JWFycmFuZ2UoLXNwZWVkKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8KipyZW5hbWUgYSBjb2x1bW4qKiwgb2xkbmFtZSwgdG8gbmV3bmFtZSAgICAgICAgICAgICAgIHxgY2FycyU+JXJlbmFtZShuZXduYW1lPW9sZG5hbWVgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8KiphZGQgYSBuZXcgY29sdW1uKiosIG5ld2NvbCAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgY2FycyU+JW11dGF0ZShuZXdjb2w9IC4uLilgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHBlcmZvcm0gc29tZSBvcGVyYXRpb25zIHRvIGdlbmVyYXRlIGRhdGEgZm9yIG5ld2NvbCBpbiAuLi4gKHNlZSB0aGUgVmVjdG9ycyBzZWN0aW9uIGZvciBpZGVhcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8cmVmZXIgdG8gdGhlIHZhcmlhYmxlIGJlaW5nIHBpcGVkICAgICAgICAgICAgICAgICAgICAgIHxgLmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfGNhcnMlPiVtdXRhdGUoSUQ9MTpucm93KC4pKSB3aGVyZSBgLmAgaXMgYGNhcnNgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8KipjYXRlZ29yaXNlIGRhdGEqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgY2FycyU+JW11dGF0ZShjYXQ9aWZfZWxzZShjLHYxLHYyKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfGNhcnMlPiU8YnIgLz4gIG11dGF0ZShzcGVlZF9jYXQ9aWZfZWxzZShzcGVlZDw1LCdzbG93JywnZmFzdCcpICMgZm9yID4gMiBjYXRlZ29yaWVzLCB3cml0ZSBhIGZ1bmN0aW9uIHRvIGNhdGVnb3Jpc2UgdGhlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8YWRkIG5ldyB2YWx1ZXMsICoqd29ya2luZyBvbiBncm91cHMgd2l0aGluIGNvbHVtbnMqKiAgIHxgbXV0YXRlKClgIHdpdGggYFtdYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfGNhcnMlPiU8YnIgLz4gIG11dGF0ZShzbG93X2Rpc3Q9c3VtKGRpc3Rbc3BlZWRfY2F0PT0nc2xvdyddKSxmYXN0X2Rpc3Q9c3VtKGRpc3Rbc3BlZWRfY2F0PSdmYXN0J10pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8YWRkIG5ldyB2YWx1ZXMsICoqd29ya2luZyBvbiBncm91cHMgd2l0aGluIGNvbHVtbnMqKiAgIHxgbXV0YXRlKClgIHdpdGggYGdyb3VwX2J5KClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfGNhcnMlPiU8YnIgLz4gIGdyb3VwX2J5KHNwZWVkX2NhdCklPiU8YnIgLz4gIG11dGF0ZSh0b3RhbF9kaXN0PXN1bShkaXN0KSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8KipjYWxjdWxhdGUgc3VtbWFyeSBzdGF0aXN0aWNzKiogb3ZlciBjb2x1bW5zICAgICAgICAgIHxgc3VtbWFyaXNlKClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfGNhcnMlPiU8YnIgLz4gIHN1bW1hcmlzZShtZWFuKHNwZWVkKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8Y2FsY3VsYXRlIHN1bW1hcnkgc3RhdGlzdGljcyBvdmVyIGdyb3VwcyB3aXRoaW4gY29sdW1uc3xgZ3JvdXBfYnkoKWAgKyBgc3VtbWFyaXNlKClgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfGNhcnMlPiU8YnIgLz4gIGdyb3VwX2J5KHNwZWVkX2NhdCklPiU8YnIgLz4gIHN1bW1hcmlzZShtZWFuKHNwZWVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8Y2FsY3VsYXRlIG9uIGVhY2ggcm93IHNlcGFyYXRlbHkgICAgICAgICAgICAgICAgICAgICAgIHxgcm93d2lzZSgpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfG5ldHRsZSU+JTxiciAvPiAgcm93d2lzZSgpJT4lPGJyIC8+ICBtdXRhdGUoZW52aXJvbm1lbnQ9TUdTX2NhdGVnb3Jpc2UoTUdTKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8KiphZGQgZGF0YSBmcm9tIGRhdEIgdG8gZGF0QSoqLCBtYXRjaGluZyBvbiBjb2xBICsgY29sQnxgbGVmdF9qb2luKGRhdEEsZGF0QixieT1jKCJjb2xBIiwiY29sQiIpKWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHJvd3MgaW4gZGF0QiB0aGF0IGRvbid0IGhhdmUgYSBtYXRjaCBpbiBkYXRBIHdpbGwgYmUgbG9zdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgcmlnaHRfam9pbihkYXRCLGRhdEEsYnk9YygiY29sQSIsImNvbEIiKSlgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHJvd3MgaW4gZGF0QiB0aGF0IGRvbid0IGhhdmUgYSBtYXRjaCBpbiBkYXRBIHdpbGwgYmUgbG9zdC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8Kipjb21iaW5lIEFMTCBkYXRhIGluIGRhdEEgYW5kIGRhdEIqKiAgICAgICAgICAgICAgICAgIHxgZnVsbF9qb2luKGRhdEEsZGF0QixieT0iY29sQSIpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHRoZSBgYnlgIGFyZ3VtZW50IGlzIG9wdGlvbmFsOyB1c2UgaXQgdG8gc3BlY2lmeSBjb2x1bW5zIHRoYXQgeW91IHdhbnQgbWVyZ2VkLiBBbGwgcm93cyBpbiBib3RoIGRhdGFzZXRzIGFyZSBrZXB0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICANCnwqKmdldCBPTkxZIGRhdGEgaW4gYm90aCBkYXRBIGFuZCBkYXRCKiogICAgICAgICAgICAgICAgfGBpbm5lcl9qb2luKGRhdEEsZGF0QixieT0iY29sQSIpYCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8cm93cyB0aGF0IGhhdmUgYSB2YWx1ZSBpbiBjb2xBIGluIG9uZSBkYXRhc2V0LCBidXQgbm90IHRoZSBvdGhlciwgd2lsbCBiZSBsb3N0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnxtYWtlIGRhdGEgKip3aWRlcioqIChhZGQgbW9yZSBjb2x1bW5zKSAgICAgICAgICAgICAgICAgfGBkYXQlPiVwaXZvdF93aWRlcihuYW1lc19mcm9tPWNvbEEsdmFsdWVzX2Zyb209Y29sQix2YWx1ZXNfZmlsbD0wYCAgICB8TmFtZXMgZm9yIHRoZSBuZXcgY29scyBjb21lIGZyb20gY29sQSwgYW5kIHZhbHVlcyB0byBmaWxsIHRoZW0gY29tZSBmcm9tIGNvbEIuIFVzZSB2YWx1ZXNfZmlsbCB0byBzcGVjaWZ5IGhvdyBOQXMgc2hvdWxkIGJlIHJlcHJlc2VudGVkIChkZWZhdWx0IGlzIE5BKXwNCnxtYWtlIGRhdGEgKipsb25nZXIqKiAocmVtb3ZlIGNvbHVtbnMpICAgICAgICAgICAgICAgICAgfGBkYXQlPiVwaXZvdF9sb25nZXIoYygiY29sQSIsImNvbEIiKSxuYW1lc190bz0iY29sRCIsdmFsdWVzX3RvPSJjb2xFImB8Y29sQSArIGNvbEIgYXJlIGNvbGxhcHNlZCBpbnRvIGEgbmV3IGNvbCwgY29sRCwgYW5kIHRoZWlyIHZhbHVlcyB3aWxsIGdvIHRvIGEgbmV3IGNvbCwgImNvbEUiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgDQoNCiMjIFZlY3RvcnMNCg0KWW91IGNhbiB0cnkgb3V0IHRoZXNlIGZ1bmN0aW9ucyB5b3Vyc2VsZjsgdGhlIGBjYXJzYCBhbmQgYGlyaXNgIGRhdGFzZXRzIGJvdGggY29tZSB3aXRoIFIuDQoNCnwqdG8uLi4qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwqdXNlKi4uLiAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfHNvcnQgaXRlbXMgKGFscGhhYmV0aWNhbGx5IG9yIG51bWVyaWNhbGx5KSAgICAgICAgICAgICAgICAgfGBzb3J0KGNhcnMkc3BlZWQpYCAgICAgICAgIHwNCnxhZGQgMTAgdG8gZXZlcnkgaXRlbSBpbiBhIHZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgY2FycyRzcGVlZCArIDEwYCAgICAgICAgICB8DQp8c2VlIGhvdyBtYW55IHZhbHVlcyB0aGVyZSBhcmUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8YGxlbmd0aChjYXJzJHNwZWVkKWAgICAgICAgfA0KfGFkZCB1cCBhbGwgdGhlIHZhbHVlcyAoZm9yIG51bWJlcnMpICAgICAgICAgICAgICAgICAgICAgICAgfGBzdW0oY2FycyRzcGVlZClgICAgICAgICAgIHwNCnxjb3VudCB0aGUgdmFsdWVzIChmb3IgY2hhcmFjdGVycykgICAgICAgICAgICAgICAgICAgICAgICAgIHxgY291bnQoaXJpcyxzcGVjaWVzKWAgICAgICB8DQp8Z2V0IGFuIGlkZWEgb2YgJ3R5cGljYWwnIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8YG1lYW4oY2FycyRzcGVlZClgICAgICAgICAgfA0KfGdldCBhbiBpZGVhIG9mICd0eXBpY2FsJyB2YWx1ZXMgd2hlbiB5b3UgaGF2ZSBvdXRsaWVycyAgICAgfGBtZWRpYW4oY2FycyRzcGVlZClgICAgICAgIHwNCnxlc3RpbWF0ZSB0aGUgJ3NwcmVhZCcgKGRldmlhdGlvbikgYXJvdW5kIHRoaXMgdHlwaWNhbCB2YWx1ZXxgc2QoY2FycyRzcGVlZClgICAgICAgICAgICB8DQp8Z2V0IHRoZSBtYXggdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8YG1heChjYXJzJHNwZWVkKWAgICAgICAgICAgfA0KfGdldCB0aGUgbWluIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfGBtaW4oY2FycyRzcGVlZClgICAgICAgICAgIHwNCnxnZXQgdGhlIHJhbmdlIG9mIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgcmFuZ2UoY2FycyRzcGVlZClgICAgICAgICB8DQp8Z2V0IG9ubHkgdW5pcXVlIHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8YHVuaXF1ZShjYXJzJHNwZWVkKWAgICAgICAgfA0KfGdldCB0aGUgaXRoIGl0ZW0gaW4gdGhlIHZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfGBjYXJzJHNwZWVkW2ldYCAgICAgICAgICAgIHwNCnxyZW1vdmUgdGhlIGl0aCBpdGVtIGZyb20gdGhlIHZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgIHxgY2FycyRzcGVlZFstaV1gICAgICAgICAgICB8DQp8Z2V0IGFsbCBpdGVtcyBiZXR3ZWVuIGkgYW5kIGogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8YGNhcnMkc3BlZWRbaTpqXWAgICAgICAgICAgfA0KfHJlbW92ZSBhbGwgaXRlbXMgYmV0d2VlbiBpIGFuZCBqICAgICAgICAgICAgICAgICAgICAgICAgICAgfGBjYXJzJHNwZWVkWy0oaTpqKV1gICAgICAgIHwNCnxzYW1wbGUgbiByYW5kb20gdmFsdWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgc2FtcGxlKGNhcnMkc3BlZWQsbilgICAgICB8DQp8Y2hlY2sgaWYgYSBjaGFyYWN0ZXIgaXMgaW4gYSB2ZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICB8YCJjaHIiICVpbiUgdmVjdG9yYCAgICAgICAgfA0KfGNoZWNrIGlmIGEgY2hhcmFjdGVyIGlzIE5PVCBpbiBhIHZlY3RvciAgICAgICAgICAgICAgICAgICAgfGAhKCJjaHIiICVpbiUgdmVjdG9yKWAgICAgIHwNCnxjaGVjayBpZiBhIG51bWJlciBpcyBpbiBhIHZlY3RvciAgICAgICAgICAgICAgICAgICAgICAgICAgIHxgbnVtICVpbiUgdmVjdG9yYCAgICAgICAgICB8DQoNCiMjIENoYXJhY3RlcnMvU3RyaW5ncw0KDQpVc2UgdGhlIHBhY2thZ2UgYHN0cmluZ3JgIChpdCBjb21lcyB3aXRoIHRoZSBgdGlkeXZlcnNlYCwgc28geW91IHNob3VsZG4ndCBoYXZlIHRvIGxvYWQgaXQgc2VwYXJhdGVseSkNCg0KfHRvLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8dXNlLi4uICAgICAgICAgICAgICAgICAgICAgICAgIHxlLmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwNCnxzdWJzZXQgYSBzdHJpbmcgICAgICAgICAgICAgICAgICAgfGBzdHJfc3ViKHN0cixzdGFydCxzdG9wKWAgICAgICB8YHN0cl9zdWIoIldlZG5lc2RheSIsMSwzKWAgPSAiV2VkIiAgfA0KfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8YWRkIGAtYCB0byBzdGFydCBmcm9tIHRoZSBlbmQgIHxgc3RyX3N1YigiV2VkbmVzZGF5IiwtMywtMSlgID0gImRheSJ8DQp8Y29udmVydCB0byBsb3dlcmNhc2UgICAgICAgICAgICAgIHxgc3RyX3RvX2xvd2VyKClgICAgICAgICAgICAgICAgfGBzdHJfdG9fbG93ZXIoIkJvYiIpYCA9ICJib2IiICAgICAgIHwNCnxjb252ZXJ0IHRvIHVwcGVyY2FzZSAgICAgICAgICAgICAgfGBzdHJfdG9fdXBwZXIoKWAgICAgICAgICAgICAgICB8YHN0cl90b191cHBlcigiYm9iIilgID0gIkJPQiIgICAgICAgfA0KfGNvbnZlcnQgdG8gdGl0bGUgY2FzZSAgICAgICAgICAgICB8YHN0cl90b190aXRsZSgpYCAgICAgICAgICAgICAgIHxgc3RyX3RvX3RpdGxlKCJib2IiKWAgPSAiQm9iIiAgICAgICB8DQp8ZmluZCBhbmQgcmVwbGFjZSAgICAgICAgICAgICAgICAgIHxgc3RyX3JlcGxhY2Uoc3RyLGZpbmQscmVwbGFjZSlgfGBzdHJfcmVwbGFjZSgiZnVuIiwiZiIsInAiKWA9InB1biIgIHwNCnxyZW1vdmUgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlfGBzdHJfdHJpbShzdHIpYCAgICAgICAgICAgICAgICB8YHN0cl90cmltKCIgaGVsbG8gIilgPSJoZWxsbyIgICAgICAgfA0KDQpUaGUgYHN0cmluZ19yYCBmdW5jdGlvbnMgYXJlIG1vc3QgcG93ZXJmdWwgd2hlbiB5b3UgY29tYmluZSB0aGVtIHdpdGggcmVndWxhciBleHByZXNzaW9ucy4gQmVsb3cgYXJlIHNvbWUgb2YgdGhlIG1vc3QgdXNlZnVsIG9uZXM6DQoNCnxSZWd1bGFyIGV4cHJlc3Npb258TWVhbmluZyAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8Ii4iICAgICAgICAgICAgICAgfGFueSBjaGFyYWN0ZXIgICAgICAgICAgICAgIHwNCnwiLioiICAgICAgICAgICAgICB8YW55IG51bWJlciBvZiBhbnkgY2hhcmFjdGVyfA0KfCJcXGIiICAgICAgICAgICAgIHxhIHdvcmQgYm91bmRhcnkgICAgICAgICAgICB8DQp8IlxcZCIgICAgICAgICAgICAgfGFueSBudW1iZXIgKGRpZ2l0KSAgICAgICAgIHwNCnwiWzpwdW5jdDpdIiAgICAgICB8cHVuY3R1YXRpb24gbWFya3MgICAgICAgICAgfA0KDQoqKkltcG9ydGFudCoqOiBCZWNhdXNlIGNoYXJhY3RlcnMgbGlrZSAiLiIgaGF2ZSBhIHNwZWNpYWwgbWVhbmluZyBpbiByZWd1bGFyIGV4cHJlc3Npb25zLCBpZiB5b3Ugd2FudCB0byBzZWFyY2ggZm9yIGEgbGl0ZXJhbCBwZXJpb2QgKC4pLCB5b3Ugd2lsbCBuZWVkIHRvIHVzZSAiXFwuIi4gVGhlIHR3byBzbGFzaGVzIGFyZSBjYWxsZWQgZXNjYXBlIGNoYXJhY3RlcnMsIHRoZXkgdGVsbCBSIG5vdCB0byB0cmVhdCB3aGF0ZXZlciBmb2xsb3dzIGFzIGEgcmVndWxhciBleHByZXNzaW9uLg0KDQpZb3UgY2FuIGZpbmQgYWxsIHRoZSByZWd1bGFyIGV4cHJlc3Npb25zIG9uIHRoZSBjaGVhdHNoZWV0IFtoZXJlXShodHRwczovL2V2b2xkeW4uZ2l0bGFiLmlvL2V2b21pY3MtMjAxOC9yZWYtc2hlZXRzL1Jfc3RyaW5ncy5wZGYpLg0KDQojIEZ1bmN0aW9ucyBhbmQgTG9vcHMNCg0KLSBVc2UgdGhlc2Ugd2hlbiB5b3Ugd2FudCB0byBydW4gdGhlIHNhbWUgY29kZSBtYW55IHRpbWVzIG9uIGRpZmZlcmVudCB0aGluZ3MuDQoNCioqU3ludGF4IGZvciBmdW5jdGlvbnMqKjoNCmBgYA0KZnVuY3Rpb25fbmFtZSA8LSBmdW5jdGlvbihpbnB1dHMsaW5wdXRzLGlucHV0cyl7DQojIGRvIHN0dWZmDQouDQouDQouDQpyZXR1cm4ob3V0cHV0KQ0KfQ0KYGBgDQoNCioqU3ludGF4IGZvciBsb29wcyoqOg0KYGBgDQpmb3IoQSBpbiBCKXsNCiAgIyBkbyBzb21ldGhpbmcNCn0NCmBgYA0KDQoqKlVzYWdlIGV4YW1wbGUqKjoNCg0KYGBgDQojIGV4YW1wbGUgb2YgYSBmdW5jdGlvbiB0byBnZXQgdGhlIGh5cG90ZW51c2Ugb2YgYSB0cmlhbmdsZSBmcm9tIHRoZSBzaG9ydCBhbmQgbWlkZGxlIHNpZGUNCg0KZ2V0X2h5cG90ZW51c2UgPC0gZnVuY3Rpb24oc2hvcnRzaWRlLCBtaWRkbGVzaWRlKSB7IA0KICAjIHNob3J0c2lkZSBhbmQgbWlkZGxlc2lkZSBhcmUgdGhlIGlucHV0cyAoYXJndW1lbnRzKQ0KICBoeXBvdGVudXNlX3NxdWFyZWQ8LXNob3J0c2lkZSoqMittaWRkbGVzaWRlKioyDQogIGh5cG90ZW51c2U8LXNxcnQoaHlwb3RlbnVzZV9zcXVhcmVkKQ0KICByZXR1cm4oaHlwb3RlbnVzZSkjIGh5cG90ZW51c2UgaXMgdGhlIG91dHB1dA0KfQ0KDQpzaG9ydHNpZGVzIDwtIGMoMyw0LDUsOCwxLDMpDQptaWRkbGVzaWRlcyA8LSBjKDgsMTAsMTIsMTQsMiwxKQ0KDQojIG5vdyBsZXRzIHJ1biBpdCBtdWx0aXBsZSB0aW1lcyBpbiBhIGxvb3ANCg0KIyBtYWtlIGFuIGVtcHR5IHZlY3RvciB0byBzdG9yZSB0aGUgaHlwb3RlbnVzZXMNCmh5cG90ZW51c2VzIDwtIGMoKQ0KDQojIHdlIHVzZSB0aGVzZSAnaScgdmFsdWVzIGFzIGluZGV4ZXMgdG8gcmVmZXIgdG8gaXRlbXMgaW4gb3VyIHR3byB2ZWN0b3JzIHNob3J0c2lkZXMgYW5kIG1pZGRsZXNpZGVzDQpmb3IoaSBpbiAxOmxlbmd0aChzaG9ydHNpZGVzKSl7DQogICMgcnVuIG91ciBmdW5jdGlvbg0KICBoeXBvdGVudXNlIDwtIGdldF9oeXBvdGVudXNlKHNob3J0c2lkZXNbaV0sbWlkZGxlc2lkZXNbaV0pDQogICMgdXBkYXRlIHRoZSBoeXBvdGVudXNlIHZlY3Rvciwgc28gaXQgY29udGFpbnMgdGhlIGh5cG90ZW51c2VzIHdlJ3ZlIGFscmVhZHkgY2FsY3VsYXRlZCwgcGx1cyB0aGUgb25lIHdlIGp1c3QgY2FsY3VsYXRlZCBpbiB0aGlzIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcA0KICBoeXBvdGVudXNlcyA8LSBjKGh5cG90ZW51c2VzLGh5cG90ZW51c2UpDQp9DQoNCiMgYWZ0ZXIgdGhlIGxvb3AgdGhlIGh5cG90ZW51c2VzIHZlY3RvciB3aWxsIGJlIGZ1bGwgDQpgYGANCg0KIyMgQ2F0ZWdvcmlzaW5nIGZ1bmN0aW9ucw0KDQpBIGZ1bmN0aW9uIGZvciBjYXRlZ29yaXNpbmcgdGhlIGVudmlyb25tZW50LCBiYXNlZCBvbiB0aGUgbGVuZ3RoIG9mIHRoZSBtYXhpbXVtIGdyb3dpbmcgc2Vhc29uIChtZ3MpLg0KDQpgYGANCmVudmlyb25tZW50IDwtIGZ1bmN0aW9uKG1ncykgew0KICBpZihtZ3MgPCA0KSB7DQogICAgcmV0dXJuKCJkcnkiKQ0KICB9IGVsc2UgaWYobWdzIDwgOCkgew0KICAgIHJldHVybigidHlwaWNhbCIpDQogIH0gZWxzZSB7DQogICAgcmV0dXJuKCJmZXJ0aWxlIikNCiAgfQ0KfQ0KYGBgDQoNCiMgQ29uZGl0aW9ucw0KDQp8RXhwcmVzc2lvbiB8TWVhbmluZyAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfFg9PVkgICAgICAgfFggZXF1YWxzIFkgICAgICAgICAgICAgICAgICAgICB8DQp8WCE9WSAgICAgICB8WCBpcyBub3QgZXF1YWwgdG8gWSAgICAgICAgICAgIHwNCnxYICVpbiUgWSAgIHxYIGlzIGluIFkgICAgICAgICAgICAgICAgICAgICAgfA0KfCEoWCAlaW4lIFkpfFggaXMgbm90IGluIFkgICAgICAgICAgICAgICAgICB8DQp8WDxZICAgICAgICB8WCBpcyBsZXNzIHRoYW4gWSAgICAgICAgICAgICAgIHwNCnxYPlkgICAgICAgIHxYIGlzIGdyZWF0ZXIgdGhhbiBZICAgICAgICAgICAgfA0KfFg+PVkgICAgICAgfFggaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIFl8DQp8WDw9IFkgICAgICB8WCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gWSAgIHwNCg0KIyMgaWYsIGVsc2UgaWYsIGVsc2Ugc3RhdGVtZW50cw0KDQohW10oaW1hZ2VzL2lmX2lmZWxzZS5QTkcpe3dpZHRoPTcwJX0NCg0KT25seSB0aGUgYmxvY2sgb2YgY29kZSBmb3IgdGhlIEZJUlNUIGNvbmRpdGlvbiB0aGF0IGV2YWx1YXRlcyB0byBUUlVFIHdpbGwgYmUgcnVuOyBzbyB0aGUgb3JkZXIgb2YgeW91ciBjb25kaXRpb25zIG1hdHRlcnMuDQoNCiMgRGF0YSB2aXN1YWxpc2F0aW9uDQoNCldlIHVzZSBgZ2dwbG90KClgLiBUaGVzZSBwbG90cyBoYXZlIGEgYmFzaWMgc3RydWN0dXJlIGxpa2UgdGhpczoNCg0KYGRhdGEgJT4lIGdncGxvdChhZXMoeD1jb2xBLHk9Y29sQixjb2xvdXI9Y29sQykpICtnZW9tX3BvaW50KCkvZ2VvbV9saW5lKCkvZ2VvbV9jb2woKWANCg0KT3B0aW9uYWwgZXh0cmFzOg0KDQoqIGArbGFicyh4PSJYIGF4aXMgdGl0bGUiLHk9IlkgYXhpcyB0aXRsZSIsY29sb3VyPSJMZWdlbmQgdGl0bGUiLHRpdGxlPSJQbG90IHRpdGxlIixjYXB0aW9uPSJDYXB0aW9uIGZvciBwbG90IilgIFtpZiB5b3UgdXNlIGBmaWxsYCBpbnN0ZWFkIG9mIGBjb2xvdXJgLCB0aGVuIHlvdSB3aWxsIHVzZSBgZmlsbD0iTGVnZW5kIHRpdGxlImBdDQoqIGArdGhlbWVfY2xhc3NpYygpYCAgICMgdGhpcyBpcyBhIG5pY2UgdGhlbWUNCiogSWYgeW91IGFyZSBwcmludGluZyBpbiBibGFjayBhbmQgd2hpdGUsIHlvdSBjYW4gdXNlIGBzaGFwZWAgaW5zdGVhZCBvZiBjb2xvdXINCg0KIyMgV2hlbiB0byB1c2Ugd2hpY2ggdHlwZSBvZiBncmFwaD8NCg0KSWYgeW91IGhhdmUgYSBsb3Qgb2YgeCB2YWx1ZXM6DQoNCiogYGdlb21fcG9pbnQoKWAgaXMgZ29vZCB3aGVuIHlvdXIgb2JzZXJ2YXRpb25zIGNvbWUgZnJvbSBkaWZmZXJlbnQgc291cmNlcywgZS5nLiB0aGUgbnVtYmVyIG9mIGNvdmlkIGRlYXRocyBpbiBwZW9wbGUgb2YgZGlmZmVyZW50IGFnZXMsIGFuZCB5b3Ugd2FudCB0byBjb21tdW5pY2F0ZSB0aGUgKnJlbGF0aW9uc2hpcCBiZXR3ZWVuIHlvdXIgeCBhbmQgeSB2YWx1ZXMqDQoqIGBnZW9tX2xpbmUoKWAgYW5kIGBnZW9tX3Ntb290aCgpYCBhcmUgYmV0dGVyIGZvciBwbG90dGluZyBtdWx0aXBsZSBvYnNlcnZhdGlvbnMgZnJvbSBhIHNpbmdsZSBzb3VyY2UsIGUuZy4gdGhlIG51bWJlciBvZiBjb3ZpZCBjYXNlcyBpbiBhIGNvdW50cnkgb3ZlciBtdWx0aXBsZSB3ZWVrcywgd2hlcmUgeW91IHdhbnQgdG8gY29tbXVuaWNhdGUgdGhlICpjaGFuZ2UgaW4geW91ciB5IHZhbHVlIG92ZXIgdGltZSoNCg0KSWYgeW91IGhhdmUgb25seSBhIGZldyB4IHZhbHVlczoNCg0KKiBgZ2VvbV9jb2woKWAgaXMgZ29vZCBmb3Igd2hlbiB5b3UgaGF2ZSBvbmx5IG9uZSB5IG9ic2VydmF0aW9uIHBlciB4IHZhbHVlDQoqIGBnZW9tX3Zpb2xpbigpYCBpcyBnb29kIHdoZW4geW91ciB4IHZhbHVlcyBhcmUgbGFyZ2VyIGNhdGVnb3JpZXMgd2l0aCBtdWx0aXBsZSB5IG9ic2VydmF0aW9ucyBwZXIgeCB2YWx1ZSwgYW5kIHlvdSB3YW50IHRvICpjb21wYXJlIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHkgdmFsdWVzIGJldHdlZW4gdGhlIGRpZmZlcmVudCBncm91cHMqDQoNCmBnZW9tX2hpc3RvZ3JhbSgpYCBpcyB1c2VkIHRvIGV4YW1pbmUgdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIHNpbmdsZSB2YXJpYWJsZS4gSXQncyBtb3JlIHVzZWQgaW4gdGhlIG1ldGhvZHMgc2VjdGlvbiBvZiBwYXBlcnMgcmF0aGVyIHRoYW4gdGhlIHJlc3VsdHMsIGZvciBleGFtcGxlIHRvIHNob3cgd2hhdCB5b3VyIHNhbXBsZSBvZiBkYXRhIGxvb2tzIGxpa2UuDQoNCiMjIGdlb21faGlzdG9ncmFtKCkNCg0KQmVsb3cgaXMgYSBoaXN0b2dyYW0gc2hvd2luZyB0aGUgZGlzdHJpYnV0aW9uIG9mIGRpYW1vbmRzIGluIHRoZSBkaWFtb25kIGRhdGFzZXQgYnkgdGhlaXIgY2FyYXQuDQoNCmBgYHtyfQ0KZGlhbW9uZHMlPiUNCiAgICAgICAjIGp1c3QgcHV0IHRoZSB2YXJpYWJsZSB5b3Ugd2FudCB0byBleGFtaW5lIHRoZSBkaXN0cmlidXRpb24gb2YNCiAgZ2dwbG90KGFlcyhjYXJhdCkpKw0KICBnZW9tX2hpc3RvZ3JhbSgpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIGxhYnModGl0bGU9IkRpc3RyaWJ1dGlvbiBvZiBkaWFtb25kcyBieSBjYXJhdCIpDQpgYGANCg0KTW9zdCBvZiB0aGUgZGlhbW9uZHMgaW4gdGhlIGRhdGFzZXQgYXJlIGxlc3MgdGhhbiAxIGNhcmF0Lg0KDQojIyBnZW9tX3BvaW50KCkNCg0KYGBge3IsaW5jbHVkZT1GQUxTRX0NCm5ldHRsZSA8LSByZWFkX2NzdigiZGF0YS9uZXR0bGVfMTk5OV9jbGltYXRlLmNzdiIpDQpuZXR0bGUgJT4lIA0KICBtdXRhdGUoTUdTX2NhdGVnb3J5ID0gaWZfZWxzZShNR1MgPCA2LCAiZHJ5IiwgImZlcnRpbGUiKSktPk1HU19uZXR0bGUNCmBgYA0KDQpXaXRoIGNvbG91cnM6DQoNCmBgYHtyLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCk1HU19uZXR0bGUlPiVnZ3Bsb3QoYWVzKHg9UG9wdWxhdGlvbix5PUxhbmdzLGNvbG91cj1NR1NfY2F0ZWdvcnkpKSsNCiAgZ2VvbV9wb2ludCgpKw0KICBsYWJzKHg9J1BvcHVsYXRpb24gKGluIG1pbGxpb25zKScseT0nTnVtYmVyIG9mIGxhbmd1YWdlcycsY29sb3VyPSJFbnZpcm9ubWVudCIpKw0KICB0aGVtZV9jbGFzc2ljKCkgICAjIGEgbmljZXIgcHJlc2VudGF0aW9uIHRoYW4gdGhlIGRlZmF1bHQgZ2dwbG90IHRoZW1lDQpgYGANCg0KV2l0aCBzaGFwZXM6DQoNCmBgYHtyLG1lc3NhZ2U9RkFMU0Usd2FybmluZz1GQUxTRX0NCk1HU19uZXR0bGUlPiVnZ3Bsb3QoYWVzKHg9UG9wdWxhdGlvbix5PUxhbmdzLHNoYXBlPU1HU19jYXRlZ29yeSkpKw0KICBnZW9tX3BvaW50KCkrDQogIGxhYnMoeD0nUG9wdWxhdGlvbiAoaW4gbWlsbGlvbnMpJyx5PSdOdW1iZXIgb2YgbGFuZ3VhZ2VzJyxzaGFwZT0iRW52aXJvbm1lbnQiKSsNCiAgdGhlbWVfY2xhc3NpYygpICAgIyBhIG5pY2VyIHByZXNlbnRhdGlvbiB0aGFuIHRoZSBkZWZhdWx0IGdncGxvdCB0aGVtZQ0KYGBgDQoNCiMjIEFkZGluZyBsYWJlbHMgdG8gcG9pbnRzDQoNCmBnZW9tX3RleHQoKWAgYW5kIGBnZW9tX3RleHRfcmVwZWwoKWAgY2FuIGJlIHVzZWQgdG8gYWRkIGxhYmVscyB0byBwb2ludHMgb24geW91ciBwbG90LiBZb3Ugd2lsbCBuZWVkIHRvIGluc3RhbGwgYW5kIGxvYWQgdGhlIGxpYnJhcnkgYGdncmVwZWxgIHRvIHVzZSBgZ2VvbV90ZXh0X3JlcGVsYCwgd2hpY2ggcG9zaXRpb25zIHRoZSBsYWJlbHMgbmljZWx5IHNvIHRoZXkgZG9uJ3Qgb3ZlcmxhcCB3aXRoIGFueXRoaW5nLCBhbmQgeW91J2xsIG5lZWQgdG8gYWRkIGFuIGFyZ3VtZW50IGBsYWJlbGAgdG8geW91ciBgYWVzKClgIGZ1bmN0aW9uIGluIGBnZ3Bsb3QoKWAsIHRvIHNwZWNpZnkgd2hpY2ggY29sdW1uIHRvIGdldCB0aGUgbGFiZWxzIGZyb20uDQoNCmBgYHtyfQ0KbGlicmFyeShnZ3JlcGVsKQ0KTUdTX25ldHRsZSU+JQ0KICBzYW1wbGVfbigxNSklPiUNCiAgZ2dwbG90KGFlcyh4PVBvcHVsYXRpb24seT1sb2cxMChMYW5ncyksbGFiZWw9Q291bnRyeSkpICsgZ2VvbV9wb2ludChhZXMoY29sb3VyPU1HU19jYXRlZ29yeSkpICsgZ2VvbV90ZXh0X3JlcGVsKCkrdGhlbWVfY2xhc3NpYygpDQoNCmBgYA0KDQoNCiMjIGdlb21fbGluZSgpIGFuZCBnZW9tX3Ntb290aCgpDQoNClVzZSBgZ2VvbV9saW5lKClgIGZvciBhIGphZ2dlZCBsaW5lOg0KDQpgYGB7cixpbmNsdWRlPUZBTFNFfQ0KYmFybm5hbW4gJT4lIA0KICBtdXRhdGUoRmlyc3RMZXR0ZXI9c3RyX3N1YihuYW1lLDEsMSkpICU+JSANCiAgZmlsdGVyKEZpcnN0TGV0dGVyID09ICJYIiB8IEZpcnN0TGV0dGVyID09ICJZIiB8IEZpcnN0TGV0dGVyID09ICJaIikgJT4lIA0KICBncm91cF9ieSh5ZWFyKSAgJT4lIA0KICBzdW1tYXJpc2UoVG90YWxOPXN1bShuKSktPndlaXJkX25hbWVzDQpgYGANCg0KDQpgYGB7cn0NCndlaXJkX25hbWVzJT4lDQogIGdncGxvdChhZXMoeD15ZWFyLCB5PVRvdGFsTikpICsgDQogIGdlb21fbGluZSgpKw0KbGFicyh4PSdZZWFyJyx5PSdUb3RhbCBudW1iZXIgb2Ygd2VpcmQgbmFtZXMnLHRpdGxlPSdQb3B1bGFyaXR5IG9mIHdlaXJkIG5hbWVzIG92ZXIgdGltZScpKw0KICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQpVc2UgYGdlb21fc21vb3RoKClgIHRvIGdldCBhIHNtb290aGVkIGxpbmU6DQoNCmBgYHtyLHdhcm5pbmc9RkFMU0UsbWVzc2FnZT1GQUxTRX0NCndlaXJkX25hbWVzJT4lDQogIGdncGxvdChhZXMoeD15ZWFyLCB5PVRvdGFsTikpICsgDQogIGdlb21fc21vb3RoKCkrDQpsYWJzKHg9J1llYXInLHk9J1RvdGFsIG51bWJlciBvZiB3ZWlyZCBuYW1lcycsdGl0bGU9J1BvcHVsYXJpdHkgb2Ygd2VpcmQgbmFtZXMgb3ZlciB0aW1lJykrDQogIHRoZW1lX2NsYXNzaWMoKQ0KYGBgDQoNCiMjIGdlb21fY29sKCkgLSBiYXIgcGxvdHMNCg0KYGBge3J9DQpiYXJubmFtbiU+JQ0KICBmaWx0ZXIobmFtZT09J0xlZScpJT4lDQogIGdncGxvdChhZXMoeD15ZWFyLHk9bikpK2dlb21fY29sKCkrDQogIGxhYnModGl0bGU9IkJhYmllcyBuYW1lZCBMZWUiLHg9IlllYXIiLHk9Ik51bWJlciBvZiBiYWJpZXMiKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1jKDIwMTA6MjAxNykpKyAgIyB0byBzcGVjaWZ5IHRoZSBicmVha3Mgb24gdGhlIHgtYXhpcw0KICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQojIyBSZW9yZGVyaW5nIGl0ZW1zIG9uIHRoZSB4LWF4aXMNCg0KKiBhZGQgYSBgcmVvcmRlcigpYCBmdW5jdGlvbiB0byB0aGUgYGFlcygpYCBmb3IgdGhlIHgtYXhpcw0KKiB3b3JrcyB0aGUgc2FtZSB3YXkgYXMgYGFycmFuZ2UoKWANCg0KYGBge3J9DQpNR1NfbmV0dGxlJT4lDQogIHNhbXBsZV9uKDYpJT4lDQogIGdncGxvdChhZXMoeD1yZW9yZGVyKENvdW50cnksTGFuZ3MpLHk9TGFuZ3MsZmlsbD1NR1NfY2F0ZWdvcnkpKSsNCiAgZ2VvbV9jb2woKSsNCiAgbGFicyh4PSdDb3VudHJ5Jyx5PSdOdW1iZXIgb2YgbGFuZ3VhZ2VzJykrDQogIHNjYWxlX2ZpbGxfZGlzY3JldGUoIkVudmlyb25tZW50IixjKCJkcnkiLCJmZXJ0aWxlIikpKw0KICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQojIyBHcm91cGVkIGJhciBwbG90cw0KDQoqIFVzZSBgZmlsbD1WYXJYYCBpbiB0aGUgYGFlcygpYCBvZiB5b3VyIGdncGxvdCBjYWxsIHRvIGNvbG91ciB0aGUgYmFycyBieSBhIHRoaXJkIHZhcmlhYmxlLg0KKiBVc2UgYHBvc2l0aW9uPSJkb2RnZSgpImAgaW4geW91ciBgZ2VvbV9jb2woKWAgdG8gaGF2ZSB0aGUgYmFycyBzaWRlLWJ5LXNpZGUNCiogVXNlIGBzY2FsZV94X2NvbnRpbnVvdXNgIChmb3IgY29udGludW91cyB2YXJpYWJsZXMpIHRvIHNwZWNpZnkgdGhlIGJyZWFrcyBvbiB0aGUgeC1heGlzOyBpZiB5b3UgaGF2ZSBkaXNjcmV0ZSAoZS5nLiBjYXRlZ29yaWNhbCkgdmFyaWFibGVzLCB0aGUgZnVuY3Rpb24gaXMgYHNjYWxlX3hfZGlzY3JldGVgDQoNCmBgYHtyfQ0KYmFybm5hbW4lPiUNCiAgZmlsdGVyKG5hbWU9PSdMZWUnKSU+JQ0KICBnZ3Bsb3QoYWVzKHg9eWVhcix5PW4sZmlsbD1zZXgpKSsNCiAgZ2VvbV9jb2wocG9zaXRpb249ImRvZGdlIikrICAjIGJhcnMgc2lkZS1ieS1zaWRlDQogIGxhYnModGl0bGU9IkJhYmllcyBuYW1lZCBMZWUiLHg9IlllYXIiLHk9Ik51bWJlciBvZiBiYWJpZXMiLGZpbGw9IlNleCIpKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPWMoMjAxMDoyMDE3KSkrICAjIHRvIHNwZWNpZnkgdGhlIGJyZWFrcyBvbiB0aGUgeC1heGlzDQogIHRoZW1lX2NsYXNzaWMoKQ0KYGBgDQoNCklmIHlvdSBkb24ndCB1c2UgYHBvc2l0aW9uPSJkb2RnZSJgLCB0aGUgZGlmZmVyZW50IGNvbG91cmVkIGJhcnMgd2lsbCBiZSBzdGFja2VkIG9uIHRvcCBvZiBlYWNob3RoZXIuDQoNCmBgYHtyfQ0KYmFybm5hbW4lPiUNCiAgZmlsdGVyKG5hbWU9PSdMZWUnKSU+JQ0KICBnZ3Bsb3QoYWVzKHg9eWVhcix5PW4sZmlsbD1zZXgpKSsNCiAgZ2VvbV9jb2woKSsgIA0KICBsYWJzKHRpdGxlPSJCYWJpZXMgbmFtZWQgTGVlIix4PSJZZWFyIix5PSJOdW1iZXIgb2YgYmFiaWVzIixmaWxsPSJTZXgiKSsNCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcz1jKDIwMTA6MjAxNykpKyAgIyB0byBzcGVjaWZ5IHRoZSBicmVha3Mgb24gdGhlIHgtYXhpcw0KICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQojIyBQZXJjZW50IHN0YWNrZWQgYmFyIHBsb3RzDQoNClVzZSBgcG9zaXRpb249ImZpbGwiYCB0byBzaG93IHByb3BvcnRpb25zIGluc3RlYWQgb2YgY291bnRzOg0KDQpgYGB7cn0NCmJhcm5uYW1uJT4lDQogIGZpbHRlcihuYW1lPT0nTGVlJyklPiUNCiAgZ2dwbG90KGFlcyh4PXllYXIseT1uLGZpbGw9c2V4KSkrDQogIGdlb21fY29sKHBvc2l0aW9uPSJmaWxsIikrICAjIHRvIHNob3cgcHJvcG9ydGlvbnMgDQogIGxhYnModGl0bGU9IkJhYmllcyBuYW1lZCBMZWUiLHg9IlllYXIiLHk9IlByb3BvcnRpb24iLGZpbGw9IlNleCIpKw0KICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzPWMoMjAxMDoyMDE3KSkrICAjIHRvIHNwZWNpZnkgdGhlIGJyZWFrcyBvbiB0aGUgeC1heGlzDQogIHRoZW1lX2NsYXNzaWMoKQ0KYGBgDQoNCiMjIGdlb21fdmlvbGluKCkNCg0KVGhpcyBpcyBnb29kIHRvIGNvbXBhcmUgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZGF0YSBiZXR3ZWVuIGdyb3Vwcy4NCg0KYGBge3J9DQojIG1wZyBpcyBhIGRhdGFzZXQgb2YgY2Fycw0KbXBnICU+JQ0KICAjIHRoZSBod3kgY29sdW1uIHRlbGxzIHlvdSBob3cgbWFueSBtaWxlcyBhIGNhciBjYW4gZ28gb24gMSBnYWxsb24gb2YgcGV0cm9sDQogICMgY2xhc3MgaXMgdGhlIHR5cGUgb2YgY2FyDQogIGdncGxvdCggYWVzKHg9cmVvcmRlcihjbGFzcyxod3kpLCB5PWh3eSkpICsgDQogIGdlb21fdmlvbGluKCkgKw0KICB0aGVtZV9jbGFzc2ljKCkrDQojIHdlIGNhbiB1c2UgdGhlIHN0YXRfc3VtbWFyeSBwb2ludCB0byBhZGQgcG9pbnRzIGZvciBzdW1tYXJ5IHN0YXRpc3RpY3MsIGhlcmUgd2Ugc2hvdyB0aGUgbWVhbg0KICBzdGF0X3N1bW1hcnkoZnVuPW1lYW4sIGdlb209InBvaW50IikrDQogIGxhYnMoeD0iQ2FyIHR5cGUiLHk9Im1pbGVzIHBlciBnYWxsb24iLHRpdGxlPSJFZmZpY2llbmN5IG9mIGNhcnMgb24gdGhlIGhpZ2h3YXkiLGNhcHRpb24gPSAiVGhlIG1lYW4gbWlsZXMgcGVyIGdhbGxvbiBmb3IgZWFjaCBjYXIgaXMgaW5kaWNhdGVkIHdpdGggYSBwb2ludCIpICANCg0KYGBgDQoNCg0KDQojIyBNYWtpbmcgZGF0YSBwb2ludHMgbGVzcyBjbHVtcGVkIG9yIGxlc3Mgc3ByZWFkIGFwYXJ0DQoNCiogTG9nIHRyYW5zZm9ybWF0aW9ucyAoYXMgaW4gdGhlIGdyYXBoIGFib3ZlKSBhcmUgdXNlZCB0byBtYWtlIGRhdGEgdGhhdCBpcyB2ZXJ5IHNwcmVhZCBhcGFydC9jbHVtcGVkIHRvZ2V0aGVyIGVhc2llciB0byB2aXN1YWxpc2UuDQoqIFRoZSBtb3N0IGNvbW1vbiBiYXNlIGlzIDEwLiBXaGVuIHdlIHRha2UgdGhlIGxvZzEwIG9mIGEgbnVtYmVyLCAkeCQsIHdlIGFyZSB0cnlpbmcgdG8gZmluZCBhIG51bWJlciAkeSQgc3VjaCB0aGF0ICQxMF55PXgkLiBUaGUgZnVuY3Rpb24gZm9yIHRoaXMgaW4gUiBpcyBqdXN0IGBsb2cxMCh4KWAuIEZvciB2ZXJ5IGZhciBhcGFydCB2YWx1ZXMgb2YgJHgkLCB0YWtpbmcgJGxvZzEwKHgpJCB3aWxsIGdpdmUgeW91IHZhbHVlcyB0aGF0IGFyZSBjbG9zZXIgdG9nZXRoZXIsIHdoaWxlIGZvciB2ZXJ5IGNsb3NlIHRvZ2V0aGVyIHZhbHVlcyBvZiAkeCQsICRsb2cxMCh4KSQgd2lsbCBnaXZlIHlvdSB2YWx1ZXMgdGhhdCBhcmUgZnVydGhlciBhcGFydC4gVGhpcyBtZWFucyB0aGF0ICRsb2cxMCh4KSQgaXMgb2Z0ZW4gbmljZXIgdG8gcGxvdCB0aGFuICR4JC4NCiogSXQgaXMgcGVyZmVjdGx5IGFjY2VwdGFibGUgdG8gZG8gdGhlc2Uga2luZHMgb2YgdHJhbnNmb3JtYXRpb25zIHRvIHlvdXIgZGF0YSwgaW4gb3JkZXIgdG8gbWFrZSBpdCBlYXNpZXIgdG8gdmlzdWFsaXNlLg0KDQojIyBNYWtpbmcgbXVsdGlwbGUgcGxvdHMgDQoNCmBmYWNldF93cmFwKClgIGFuZCBgZmFjZXRfZ3JpZCgpYCBsZXQgeW91IHByb2R1Y2UgbXVsdGlwbGUgZGlmZmVyZW50IHBsb3RzIGZvciBlYWNoIHZhbHVlIGluIGEgY29sdW1uL2NvbHVtbnMNCiANCiogYGZhY2V0X3dyYXAofkNvbEEpYCAtLT4gd2lsbCBtYWtlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBncmFwaCBmb3IgZXZlcnkgZGlmZmVyZW50IHZhbHVlIGluIGNvbEEsIGFsbCB3cmFwcGVkIGFyb3VuZCBlYWNoIG90aGVyICh3b3JrcyB3ZWxsIHdoZW4geW91IGhhdmUgYSBsb3Qgb2YgZGlmZmVyZW50IHZhbHVlcyBvZiBhIHZhcmlhYmxlKQ0KKiBgZmFjZXRfZ3JpZChjb2xBfmNvbEIpYCAtLT4gbWFrZXMgYSBncmlkIG9mIGdyYXBocywgd2hlcmUgdGhlIGRpZmZlcmVudCB2YWx1ZXMgb2YgY29sQSBhcmUgdGhlIHJvd3MgaW4gdGhlIGdyaWQsIGFuZCB0aGUgZGlmZmVyZW50IHZhbHVlcyBvZiBjb2xCIGFyZSB0aGUgY29sdW1ucyBpbiB0aGUgZ3JpZC4gVGhpcyB3b3JrcyBiZXN0IHdoZW4gY29sQSBhbmQgY29sQiBkb24ndCBoYXZlIHRvbyBtYW55IGRpZmZlcmVudCB2YWx1ZXMuDQoqIGArdGhlbWVfbWluaW1hbCgpYCBpcyBhIG5pY2UgdGhlbWUgdG8gdXNlIHdpdGggZmFjZXRlZCBwbG90cyAoY29tcGFyZWQgdG8gb3VyIHVzdWFsIGArdGhlbWVfY2xhc3NpYygpYCkNCg0KYGBge3J9DQpiYXJubmFtbiAlPiUgZmlsdGVyKG5hbWU9PSJMZWUiKSAlPiUgZ2dwbG90KGFlcyh4PXllYXIsIHk9bikpICsgZ2VvbV9saW5lKCkgKyBmYWNldF93cmFwKCJzZXgiKSt0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQpgYGB7cixtZXNzYWdlPUZBTFNFfQ0KYmFybm5hbW4gJT4lIA0KICBtdXRhdGUoRmluYWxMZXR0ZXIgPSBzdHJfc3ViKG5hbWUsIC0xLCAtMSkpICAlPiUgIA0KICBtdXRhdGUoRmluYWwgPSBpZl9lbHNlKEZpbmFsTGV0dGVyICVpbiUgYygiYSIsJ8OkJywnw7YnLCfDpScsICJlIiwgImkiLCAibyIsICJ1IiwgInkiKSwgInZvd2VsIiwgImNvbnNvbmFudCIpKSAlPiUgDQogIGdyb3VwX2J5KEZpbmFsLHllYXIsc2V4KSAlPiUgDQogIHN1bW1hcmlzZSh0b3RhbD1zdW0obikpICAlPiUgDQogIGdncGxvdChhZXMoeD15ZWFyLCB5PXRvdGFsKSkgKyBnZW9tX2xpbmUoKSArIGZhY2V0X2dyaWQoc2V4IH4gRmluYWwpK3RoZW1lX21pbmltYWwoKQ0KYGBgDQoNCiMjIENoYW5naW5nIHRoZSBudW1iZXIgYW5kIGxvb2sgb2YgdGlja3Mgb24gdGhlIHggYXhpcw0KDQpZb3UgY2FuIGFkZCBtb3JlIHRpY2tzIHRvIGEgY29udGludW91cyB4LWF4aXMgdXNpbmcgdGhlIGZ1bmN0aW9uIGArc2NhbGVfeF9jb250aW51b3VzKG4uYnJlYWtzPW51bV90aWNrcylgLiBUaGUgbnVtYmVyIG9mIHRpY2tzIHRoYXQgeW91IGVudGVyIHdvbid0IGFsd2F5cyBiZSB0aGUgZXhhY3QgbnVtYmVyIG9mIGxhYmVscyBpdCBtYWtlcywgYnV0IGl0IHdpbGwgdHJ5IHRvIGdldCBpdCBhcyBjbG9zZSBhcyBwb3NzaWJsZSB3aGlsZSBzdGlsbCBlbnN1cmluZyBuaWNlIGJyZWFrIGxhYmVscy4NCg0KV2UgY2FuIGFsc28gbWFrZSB0aGUgYnJlYWsgbGFiZWxzIG5pY2VyIGJ5IGNoYW5naW5nIHRoZWlyIGFuZ2xlIGFuZCBwb3NpdGlvbi4gVGhpcyBpcyBkb25lIHdpdGggdGhlIGZ1bmN0aW9uIGArdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGU9NDUsdmp1c3Q9MC41KSlgLCBhbmQgYWdhaW4sIGp1c3QgcGxheSBhcm91bmQgd2l0aCB0aGUgdmFsdWVzIGZvciBgYW5nbGVgIGFuZCBgdmp1c3RgICh2ZXJ0aWNhbCBhZGp1c3RtZW50KSB1bnRpbCB5b3UgZ2V0IHNvbWV0aGluZyB0aGF0IGxvb2tzIHJpZ2h0LiBJZiBgdmp1c3RgIGRvZXNuJ3Qgd29yayBmb3IgeW91LCB0aGVyZSBpcyBhbHNvIGFuIGFyZ3VtZW50IGBoanVzdGAgKGhvcml6b250YWwgYWRqdXN0bWVudCkgdGhhdCB5b3UgY2FuIGFkZC4NCg0KYGBge3IsbWVzc2FnZT1GQUxTRX0NCmJhcm5uYW1uICU+JSANCiAgbXV0YXRlKEZpbmFsTGV0dGVyID0gc3RyX3N1YihuYW1lLCAtMSwgLTEpKSAgJT4lICANCiAgbXV0YXRlKEZpbmFsID0gaWZfZWxzZShGaW5hbExldHRlciAlaW4lIGMoImEiLCfDpCcsJ8O2Jywnw6UnLCAiZSIsICJpIiwgIm8iLCAidSIsICJ5IiksICJ2b3dlbCIsICJjb25zb25hbnQiKSkgJT4lIA0KICBncm91cF9ieShGaW5hbCx5ZWFyLHNleCkgJT4lIA0KICBzdW1tYXJpc2UodG90YWw9c3VtKG4pKSAgJT4lIA0KICBnZ3Bsb3QoYWVzKHg9eWVhciwgeT10b3RhbCkpICsgZ2VvbV9saW5lKCkgKyBmYWNldF9ncmlkKHNleCB+IEZpbmFsKSt0aGVtZV9taW5pbWFsKCkrc2NhbGVfeF9jb250aW51b3VzKG4uYnJlYWtzPTE2KSt0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZT00NSx2anVzdD0wLjUpKQ0KYGBgDQoNCiMjIE1hcHBpbmcNCg0KV2UgY2FuIGdldCBtYXBzIGZyb20gdGhlIHBhY2thZ2VzIGBybmF0dXJhbGVhcnRoYCBhbmQgYHJuYXR1cmFsZWFydGhkYXRhYCwgYW5kIHBsb3QgdGhlbSB1c2luZyB0aGUgYGdncGxvdGAgZnVuY3Rpb24gYGdlb21fc2YoKWAuIGBzZmAgaXMgYSBmaWxlIGZvcm1hdCBmb3Igc3RvcmluZyBtYXBzLiANCg0KYGBge3IgbWFwcGluZ30NCiMgcmVxdWlyZWQgcGFja2FnZXMNCmxpYnJhcnkocm5hdHVyYWxlYXJ0aCkNCmxpYnJhcnkocm5hdHVyYWxlYXJ0aGRhdGEpDQpsaWJyYXJ5KGdncmVwZWwpDQoNCiMgdGhlc2UgcGFja2FnZXMgbWF5IG5vdCBmdW5jdGlvbiBwcm9wZXJseSBpZiB5b3UgZG9uJ3QgYWxzbyBoYXZlIHJnZW9zIGluc3RhbGxlZDsgaWYgeW91IGdldCBhbiBlcnJvciwgcnVuIGluc3RhbGwucGFja2FnZXMoJ3JnZW9zJykgaW4geW91ciBjb25zb2xlIGFuZCB0aGVuIHRyeSBhZ2Fpbg0KDQojIHRoZSBmdW5jdGlvbiBuZV9jb3VudHJpZXMgd2lsbCBnaXZlIHlvdSBjb3VudHJ5IG1hcHMsIGlmIHlvdSBkb24ndCBzcGVjaWZ5IHdoaWNoIGNvdW50cmllcywgaXQgZ2l2ZXMgeW91IHRoZSB3aG9sZSB3b3JsZC4gDQojIFVzZSByZXR1cm5jbGFzcz0ic2YiIHRvIG1ha2Ugc3VyZSB5b3UgZ2V0IGFuIHNmIGZvcm1hdCBiYWNrLCBhcyB0aGlzIGlzIHdoYXQgZ2VvbV9zZigpIHdvcmtzIHdpdGgNCndvcmxkIDwtIG5lX2NvdW50cmllcyhyZXR1cm5jbGFzcyA9ICJzZiIpDQoNCiMgeW91IG5lZWQgdG8gaGF2ZSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIGluZm9ybWF0aW9uIGZvciB0aGUgdGhpbmdzIHlvdSB3YW50IHRvIHBsb3QgLS0gSSBnZXQgdGhpcyBmcm9tIGdvb2dsZSBtYXBzIC0tIGp1c3QgcmlnaHQgY2xpY2sgb24gYSBwbGFjZSBpbiBnb29nbGUgbWFwcyAob24gYSBjb21wdXRlciksIGFuZCB0aGUgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSB3aWxsIHNob3cgdXAgYW5kIHlvdSBjYW4gY29weSB0aGVtDQp0eXBlIDwtIGMoInJlbnRhbCIsInBhcmVudCdzIGhvdXNlIiwiaW4tbGF3J3MgaG91c2UiLCJyZW50YWwiLCJyZW50YWwiKQ0KbGF0aXR1ZGUgPC0gYyg1OS44NjUsLTMzLjg3OSw1MC44NzQsMzUuNjY0LC0zNS4yODQpDQpsb25naXR1ZGUgPC0gYygxNy42NDEsMTUxLjExMiw2LjAzNywxMzkuNDgyLDE0OS4xMzYpDQpwbGFjZXMgPC0gZGF0YS5mcmFtZSh0eXBlLGxhdGl0dWRlLGxvbmdpdHVkZSkNCg0KIyBzdGFydCBieSBwbG90dGluZyB0aGUgbWFwIGFzIGEgYmFzZSBsYXllcg0KIyB0aGlzIGFsd2F5cyBoYXMgdG8gY29tZSBmaXJzdCAtLSBpdCB3b24ndCB3b3JrIGlmIHlvdSBzdGFydCB3aXRoIHRoZSBwb2ludHMgYW5kIHRyeSB0byBhZGQgdGhlIG1hcCBhZnRlcg0Kd29ybGQlPiUNCiAgZ2dwbG90KCkrDQogIGdlb21fc2YoKSsNCiAgIyB0aGVuIHlvdSBjYW4gYWRkIHBvaW50cyBvbiB0b3Agb2YgaXQgLS0gbm90ZSB0aGF0IHlvdSBuZWVkIHRvIHNwZWNpZnkgdGhlIGRhdGEsIGJlY2F1c2UgdGhpcyBjb21lcyBmcm9tIGEgZGlmZmVyZW50IGRhdGFzZXQgdG8gdGhlIG9uZSBhdCB0aGUgdG9wIG9mIHRoZSBwaXBlDQogIGdlb21fcG9pbnQoZGF0YSA9IHBsYWNlcyxhZXMoeD1sb25naXR1ZGUseT1sYXRpdHVkZSxjb2xvdXI9dHlwZSkpKw0KICB0aGVtZV92b2lkKCkrICAgICMgdGhpcyBpcyBhIG5pY2UgdGhlbWUgZm9yIG1hcHM7IGl0IGdldHMgcmlkIG9mIHRoZSBheGVzDQogIGxhYnModGl0bGU9IlBsYWNlcyBJJ3ZlIExpdmVkIikNCg0KYGBgDQoNCllvdSBjYW4gdXNlIHRoZSAnY291bnRyeScgYXJndW1lbnQgaW4gYG5lX2NvdW50cmllcygpYCB0byBnZXQgYSBtYXAgb2YgYSBzaW5nbGUgY291bnRyeS4NCg0KYGBge3J9DQoNCkF1c3RyYWxpYSA8LSBuZV9jb3VudHJpZXMoY291bnRyeT0iQXVzdHJhbGlhIixyZXR1cm5jbGFzcyA9ICJzZiIpDQoNCmF1c3RyYWxpYW5fcGxhY2VzIDwtIHBsYWNlcyU+JWZpbHRlcihsYXRpdHVkZTwwKQ0KDQpBdXN0cmFsaWElPiUNCiAgZ2dwbG90KCkrDQogIGdlb21fc2YoKSsNCiAgIyBzaW5jZSB0aGUgZGF0YSBpc24ndCBjb21pbmcgZnJvbSB0aGUgdG9wIG9mIHRoZSBwaXBlLCB5b3UgbmVlZCB0byB0ZWxsIGl0IHRoZSBkYXRhIGFuZCBhZXN0aGV0aWNzDQogIGdlb21fcG9pbnQoZGF0YSA9IGF1c3RyYWxpYW5fcGxhY2VzLGFlcyh4PWxvbmdpdHVkZSx5PWxhdGl0dWRlKSkrDQogICMgeW91IGNvdWxkIHVzZSBsYWJlbHMgaW5zdGVhZCBvZiBjb2xvdXIgLS0gYnV0IGFnYWluIHlvdSBuZWVkIHRvIHRlbGwgaXQgdGhlIGFlc3RoZXNpY3MgYW5kIGRhdGEgdG8gdXNlDQogIGdlb21fdGV4dF9yZXBlbChkYXRhID0gYXVzdHJhbGlhbl9wbGFjZXMsYWVzKHg9bG9uZ2l0dWRlLHk9bGF0aXR1ZGUsbGFiZWw9dHlwZSkpKw0KICBsYWJzKHRpdGxlPSJQbGFjZXMgSSd2ZSBMaXZlZCIpKw0KICB0aGVtZV92b2lkKCkNCmBgYA0KDQpZb3UgY2FuIGFkZCBtdWx0aXBsZSBjb3VudHJpZXMgaWYgeW91IGxpa2U6DQoNCmBgYHtyfQ0KbWFwIDwtIG5lX2NvdW50cmllcyhjb3VudHJ5PWMoIkF1c3RyYWxpYSIsIk5ldyBaZWFsYW5kIikscmV0dXJuY2xhc3MgPSAic2YiKQ0KDQphdXN0cmFsaWFuX3BsYWNlcyA8LSBwbGFjZXMlPiVmaWx0ZXIobGF0aXR1ZGU8MCkNCg0KbWFwJT4lDQogIGdncGxvdCgpKw0KICBnZW9tX3NmKCkrDQogICMgc2luY2UgdGhlIGRhdGEgaXNuJ3QgY29taW5nIGZyb20gdGhlIHRvcCBvZiB0aGUgcGlwZSwgeW91IG5lZWQgdG8gdGVsbCBpdCB0aGUgZGF0YSBhbmQgYWVzdGhldGljcw0KICBnZW9tX3BvaW50KGRhdGEgPSBhdXN0cmFsaWFuX3BsYWNlcyxhZXMoeD1sb25naXR1ZGUseT1sYXRpdHVkZSkpKw0KICAjIHlvdSBjb3VsZCB1c2UgbGFiZWxzIGluc3RlYWQgb2YgY29sb3VyIC0tIGJ1dCBhZ2FpbiB5b3UgbmVlZCB0byB0ZWxsIGl0IHRoZSBhZXN0aGVzaWNzIGFuZCBkYXRhIHRvIHVzZQ0KICBnZW9tX3RleHRfcmVwZWwoZGF0YSA9IGF1c3RyYWxpYW5fcGxhY2VzLGFlcyh4PWxvbmdpdHVkZSx5PWxhdGl0dWRlLGxhYmVsPXR5cGUpKSsNCiAgbGFicyh0aXRsZT0iUGxhY2VzIEkndmUgTGl2ZWQiKSsNCiAgdGhlbWVfdm9pZCgpDQoNCmBgYA0KDQpPciB5b3UgY2FuIHVzZSB0aGUgYXJndW1lbnQgYGNvbnRpbmVudGAgdG8gc3BlY2lmeSBhbiBlbnRpcmUgY29udGluZW50Og0KDQpgYGB7cn0NCkFzaWEgPC0gbmVfY291bnRyaWVzKGNvbnRpbmVudD0iQXNpYSIscmV0dXJuY2xhc3MgPSAic2YiKQ0KQXNpYSU+JQ0KICBnZ3Bsb3QoKSsNCiAgZ2VvbV9zZigpKw0KICB0aGVtZV92b2lkKCkNCmBgYA0KDQpBIGZ1bGwgbGlzdCBvZiBhdmFpbGFibGUgY291bnRyaWVzIGFuZCBjb250aW5lbnRzIGlzIHNob3duIGJlbG93Og0KDQpgYGB7cn0NCmxpYnJhcnkocmVhY3RhYmxlKQ0KZGF0YSA8LSBjb3VudHJpZXM1MA0KY291bnRyaWVzIDwtIGRhdGFAZGF0YQ0KY291bnRyaWVzJT4lDQogIHNlbGVjdChuYW1lLGNvbnRpbmVudCklPiUNCiAgdW5pcXVlKCklPiUNCiAgYXJyYW5nZShjb250aW5lbnQsbmFtZSklPiUNCiAgcmVuYW1lKGNvdW50cnk9bmFtZSklPiUNCiAgcmVhY3RhYmxlKHNlYXJjaGFibGUgPSBUUlVFLGZpbHRlcmFibGUgPSBUUlVFKQ0KYGBgDQoNCiMjIFZpc3VhbGluZyB2YXJpYXRpb24gYWNyb3NzIG11bHRpcGxlIHZhcmlhYmxlcw0KDQpJZiB5b3UgaGF2ZSAzIG9yIDQgdmFyaWFibGVzLCBJIHdvdWxkIHRyeSB0byB2aXN1YWxpc2UgdGhlIHRoaXJkIGFuZCBmb3VydGggdmFyaWFibGVzIGJ5IHVzaW5nIGZlYXR1cmVzIGxpa2UgY29sb3VyLCBvciBieSBtYWtpbmcgbXVsdGlwbGUgcGxvdHMgKHdpdGggYGZhY3RldF93cmFwKClgIGFuZCBgZmFjZXRfZ3JpZCgpYCkuDQoNCkhvd2V2ZXIsIGlmIHlvdSBoYXZlIGEgd2hvbGUgYnVuY2ggb2YgdmFyaWFibGVzIHRoYXQgYXJlIGFsbCByZWxhdGVkL2Zvcm0gYSBjb2hlc2l2ZSBzZXQsIGFuZCB5b3Ugd2FudCB0byBnZXQgYW4gaWRlYSBvZiBob3cgc2ltaWxhciBvciBkaWZmZXJlbnQgaXRlbXMgYXJlIG92ZXJhbGwsIGJhc2VkIG9uIHRoZWlyIHZhbHVlcyBmb3IgKmFsbCogdGhlc2UgdmFyaWFibGVzLCB5b3UgY2FuIGRvIHRoaXMgYnkgY3JlYXRpbmcgYSAqZGlzdGFuY2UgbWF0cml4Ki4gQSBkaXN0YW5jZSBtYXRyaXggc2hvd3MgdGhlICpvdmVyYWxsKiBkaXN0YW5jZXMgYmV0d2VlbiBhbGwgdGhlIGl0ZW1zIGluIHlvdXIgZGF0YSwgYnkgdGFraW5nIHRoZSBzdW0gb2YgdGhlaXIgZGlzdGFuY2VzIGJhc2VkIG9uIGVhY2ggdmFyaWFibGUgKGZvciBtb3JlIGV4cGxhbmF0aW9uIHNlZSB0aGUgbm90ZXMgZnJvbSBsZWN0dXJlIDgpLg0KDQpOb3RlIHRoYXQgdGhpcyBvbmx5IHdvcmtzIGlmIHlvdXIgZGF0YSBpcyBudW1lcmljYWwsIG9yIGlmIGl0IGhhcyBiZWVuIGJpbmFyaXNlZC4gRm9yIG51bWVyaWNhbCBkYXRhLCBtYWtlIHN1cmUgeW91IG5vcm1hbGlzZSB0aGUgZGF0YSBzbyB0aGF0IHZhbHVlcyBvZiBlYWNoIHZhcmlhYmxlIGFyZSBjb21wYXJhYmxlIGJldHdlZW4gZGlmZmVyZW50IGl0ZW1zIChlLmcuIGluc3RlYWQgb2YgdXNpbmcgcmF3IGNvdW50cywgdXNlIHByb3BvcnRpb25zKS4NCg0KVGhlcmUgYXJlIHR3byBkaWZmZXJlbnQga2luZHMgb2YgdmlzdWFsaXNhdGlvbnMgeW91IGNhbiBtYWtlIGZyb20gYSBkaXN0YW5jZSBtYXRyaXguIA0KDQoxLiBZb3UgY2FuIGF0dGVtcHQgdG8gKnBsb3QqIHRoZXNlIGRpc3RhbmNlcywgYnkgdHJhbnNmb3JtaW5nIHRoZW0gaW50byAyIG9yIDMgZGltZW5zaW9uYWwgY29vcmRpbmF0ZXMsIGFuZCBwbG90dGluZyB0aGUgaXRlbXMgYXMgcG9pbnRzIGFsb25nIHRoZXNlIGRpbWVuc2lvbnMuDQoyLiBZb3UgY2FuIGNsdXN0ZXIgaXRlbXMgdGhhdCBhcmUgY2xvc2UgdG8gZWFjaG90aGVyIHRvZ2V0aGVyIHJlcGVhdGVkbHksIHVudGlsIHlvdSBnZXQgYSBicmFuY2hpbmcgdHJlZS4NCg0KVGhlIGZpcnN0IG1ldGhvZCBpcyBjYWxsZWQgKm11bHRpZGltZW5zaW9uYWwgc2NhbGluZyosIGFuZCB0aGUgc2Vjb25kIGlzIGNhbGxlZCAqY2x1c3RlciBhbmFseXNpcyouDQoNCk11bHRpZGltZW5zaW9uYWwgc2NhbGluZyB3b3JrcyB3ZWxsIGlmIHRoZSBkYXRhIGlzIGVhc2lseSByZWR1Y2VkIHRvIHR3byBvciB0aHJlZSBkaW1lbnNpb25zLCBidXQgdGhpcyBpc24ndCBhbHdheXMgcG9zc2libGUuIENsdXN0ZXIgYW5hbHlzaXMgd29ya3MgYmV0dGVyIHdoZW4geW91IGhhdmUgY29tcGxpY2F0ZWQgZGF0YSB3aGljaCB2YXJpZXMgYWxvbmcgbXVsdGlwbGUgZGltZW5zaW9ucy93aXRoIG1hbnkgZGlzdGluY3QgZ3JvdXBzLg0KDQojIyMgTXVsdGlkaW1lbnNpb25hbCBzY2FsaW5nDQoNCjEuIENvbnZlcnQgdGhlIGRhdGEgaW50byBhIGRpc3RhbmNlIG1hdHJpeC0tbWFrZSBzdXJlIGl0IGlzIGFwcHJvcHJpYXRlbHkgbm9ybWFsaXNlZC9iaW5hcmlzZWQgZmlyc3QtLXVzaW5nIHRoZSBmdW5jdGlvbiBgZGlzdCgpYC4gQWRkIGBtZXRob2Q9ImJpbmFyeSJgIGlmIHRoZSBkYXRhIGlzIGJpbmFyaXNlZC4gSWYgaXQncyBudW1lcmljYWwsIHRoZSBkZWZhdWx0IG1ldGhvZCAoYGV1Y2xpZGVhbmApIGlzIGFwcHJvcHJpYXRlLg0KMi4gRmluZCBjb29yZGluYXRlcyBmb3IgdGhlc2UgZGlzdGFuY2VzIHVzaW5nIGBjbWRzY2FsZShkaXN0YW5jZXMsIGs9MilgLiBrIHNldHMgdGhlIG51bWJlciBvZiBkaW1lbnNpb25zIHRvIHVzZTsgdGhlIGRlZmF1bHQgaXMgdHdvLiANCjMuIGBjbWRzY2FsZSgpYCB3aWxsIG1ha2UgY29vcmRpbmF0ZXMgZm9yIHlvdXIgZGlzdGFuY2VzIGFzIHdlbGwgYXMgaXQgY2FuLCBidXQgaXQgY2FuJ3QgYWx3YXlzIHJlcHJlc2VudCB0aGUgZGlzdGFuY2VzIHBlcmZlY3RseSwgc28geW91IHNob3VsZCBjaGVjayBob3cgY2xvc2VseSB0aGUgZGlzdGFuY2VzIGJldHdlZW4gdGhlIGNvb3JkaW5hdGVzIG1hdGNoZXMgdGhlIGFjdHVhbCBkaXN0YW5jZXMuIFRoaXMgaXMgY2FsbGVkIGNhbGN1bGF0aW5nIHRoZSAqc3RyZXNzKiBvbiB0aGUgY29vcmRpbmF0ZXMsIGFuZCB3ZSB3aWxsIG1ha2Ugb3VyIG93biBgc3RyZXNzKClgIGZ1bmN0aW9uIHRvIGRvIHRoaXMuDQoNCmBgYHtyLGluY2x1ZGU9VFJVRX0NCiMgZCBpcyB0aGUgb3JpZ2luYWwgZGlzdGFuY2VzLCBEIGlzIHRoZSBkaXN0YW5jZXMgYmV0d2VlbiB0aGUgY29vcmRpbmF0ZXMgbWFkZSBieSBjbWRzY2FsZSgpDQpzdHJlc3MgPC0gZnVuY3Rpb24oZCwgRCl7DQogIHNxcnQoc3VtKChkIC0gRCkgXiAyKSAvIHN1bShkIF4gMikpDQp9DQpgYGANCg0KVGhpcyBpcyBob3cgc3RyZXNzIHZhbHVlcyBhcmUgaW50ZXJwcmV0ZWQ6DQoNClZhbHVlICAgICAgICAgICAgICAgIHwgSW50ZXJwcmV0YXRpb24NCi0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tDQpTdHJlc3MgPj0gMC4yICAgICAgICB8IFBvb3INCjAuMSA8PSBTdHJlc3MgPCAwLjIgIHwgRmFpcg0KMC4wNSA8PSBTdHJlc3MgPCAwLjEgfCBHb29kDQpTdHJlc3MgPCAwLjA1ICAgICAgICB8IEV4Y2VsbGVudA0KDQo0LiBJZiB0aGUgc3RyZXNzIGlzIG9rYXksIHRoZW4geW91IGNhbiBwbG90IHRoZSBjb29yZGluYXRlcyBpbiB0d28gZGltZW5zaW9ucy4gSWYgaXQncyBub3Qgb2theSwgdGhlbiBwcm9iYWJseSBhIHRocmVlLWRpbWVuc2lvbmFsIG9yIGhpZ2hlciBzb2x1dGlvbiBpcyBuZWVkZWQgdG8gYWNjdXJhdGVseSByZXByZXNlbnQgdGhlIGRhdGEuIFlvdSBjYW4gY2hlY2sgaG93IG1hbnkgZGltZXNpb25zIGFyZSBuZWVkZWQgYnkgcGxheWluZyBhcm91bmQgd2l0aCBkaWZmZXJlbnQgdmFsdWVzIG9mIGsgaW4gdGhlIGBjbWRzY2FsZSgpYCBmdW5jdGlvbiwgYW5kIHRoZW4gY2hlY2tpbmcgdGhlIHN0cmVzcyBvbiB0aG9zZSBjb29yZGluYXRlcyAoc2VlIG5vdGVzIGZyb20gbGVjdHVyZSA4KS4gDQoNCllvdSB3aWxsIGFsc28gbmVlZCB0aGUgZnVuY3Rpb25zIGBjb2x1bW5fdG9fcm93bmFtZXMoKWAgYW5kIGBhc19kYXRhZnJhbWUocm93bmFtZXM9ImNvbHVtbl9uYW1lIilgIHRvIGdvIGJldHdlZW4gdGhlIGRhdGEgZm9ybWF0IHJlcXVpcmVkIGJ5IGBkaXN0KClgLCBhbmQgdGhhdCBuZWVkZWQgZm9yIHBsb3R0aW5nLiANCg0KQmVsb3cgaXMgYW4gZXhhbXBsZSB1c2luZyBldWNsaWRlYW4gZGlzdGFuY2VzIChpLmUuIHdpdGggbnVtZXJpY2FsIGRhdGEpLCB0byB2aXN1YWxpc2UgZGlzdGFuY2VzIGJldHdlZW4gZGlmZmVyZW50IEphcGFuZXNlIGNhc2UgcGFydGljbGVzIGluIHRlcm1zIG9mIHRoZWlyIGZ1bmN0aW9ucy4NCg0KYGBge3IgZXVjbGlkZWFufQ0KbGlicmFyeShnZ3JlcGVsKQ0KDQojIHRveSBkYXRhIGFib3V0IHRoZSBmcmVxdWVuY3kgb2YgdXNlIChhcyBhIHByb3BvcnRpb24gb2YgdGhlIHRvdGFsIGZyZXF1ZW5jeSBmb3IgZWFjaCBwYXJ0aWNsZSkgd2l0aCBkaWZmZXJlbnQgY2FzZXMgZm9yIHNvbWUgSmFwYW5lc2UgcGFydGljbGVzDQpwYXJ0aWNsZSA8LSBjKCJnYSIsIm5pIiwiZGUiLCJ3YSIsIm8iKQ0Kbm9taW5hdGl2ZSA8LSBjKDAuOTUsMCwwLDAuNSwwKQ0KZ2VuaXRpdmUgPC0gYygwLjA1LDAsMCwwLDApDQpsb2NhdGl2ZSA8LSBjKDAsMC42LDAuNywwLjEsMCkNCmluc3RydW1lbnRhbCA8LSBjKDAsMCwwLjMsMC4wNSwwKQ0KYWxsYXRpdmUgPC0gYygwLDAuMywwLDAuMSwwKQ0KYWNjdXNhdGl2ZSA8LSBjKDAsMC4xLDAsMC4zNSwxKQ0KDQpwYXJ0aWNsZXMgPC0gZGF0YS5mcmFtZShwYXJ0aWNsZSxub21pbmF0aXZlLGdlbml0aXZlLGxvY2F0aXZlLGluc3RydW1lbnRhbCxhbGxhdGl2ZSxhY2N1c2F0aXZlKQ0KDQojIDEuIE1ha2UgdGhlIGRpc3RhbmNlIG1hdHJpeA0KcGFydGljbGVzJT4lDQogICMgdHVybiB0aGUgZmlyc3QgY29sdW1uIGludG8gcm93bmFtZXMgZmlyc3QgLS0geW91ciBjb2x1bW5zIHNob3VsZCBvbmx5IGNvbnRhaW4gbWVhc3VyZW1lbnRzIG9mIHlvdXIgdmFyaWFibGVzIG9mIGludGVyZXN0DQogIGNvbHVtbl90b19yb3duYW1lcygicGFydGljbGUiKSU+JQ0KICBkaXN0KCktPiBkaXN0YW5jZXMNCg0KIyAyLiBNYWtlIGNvb3JkaW5hdGVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdXNlIGs9MywgNCBldGMuIGZvciBoaWdoZXItZGltZW5zaW9uYWwgc29sdXRpb25zDQpjb29yZGluYXRlcyA8LSBjbWRzY2FsZShkaXN0YW5jZXMsaz0yKQ0KDQojIDMuIENoZWNrIHN0cmVzcyBvbiBjb29yZGluYXRlcw0KDQpzdHJlc3MoZGlzdGFuY2VzLGRpc3QoY29vcmRpbmF0ZXMpKQ0KYGBgDQoNCkhlcmUsIHRoZSBzdHJlc3MgaXMgbGVzcyB0aGFuIDAuMSBzbyB0aGUgdHdvLWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzIHJlcHJlc2VudCB0aGUgZGlzdGFuY2VzIHdlbGwsIGFuZCB0aGUgZGF0YSBjYW4gYmUgZWFzaWx5IHBsb3R0ZWQNCg0KYGBge3IgZXVjbGlkZWFuIHBsb3R9DQojIDMuIFBsb3QgY29vcmRpbmF0ZXMNCg0KY29vcmRpbmF0ZXMlPiUNCiAgICAgICAgIyBwdXQgdGhlIHJvd25hbWVzIGludG8gYSBjb2x1bW4gZmlyc3QNCiAgYXNfZGF0YV9mcmFtZShyb3duYW1lcz0icGFydGljbGUiKSU+JQ0KICBnZ3Bsb3QoYWVzKHg9VjEseT1WMixsYWJlbD1wYXJ0aWNsZSkpK2dlb21fcG9pbnQoKStnZW9tX3RleHRfcmVwZWwoKSt0aGVtZV9jbGFzc2ljKCktPnBsb3QxDQpwbG90MQ0KYGBgDQoNCllvdSBjYW4gc2VlIHRoYXQgKmRlKiBhbmQgKm5pKiBoYXZlIHNpbWlsYXIgZnVuY3Rpb25zLCBhcyB0aGV5IGdyb3VwIHRvZ2V0aGVyLCB3aGlsZSAqZ2EqIGFuZCAqbyogaGF2ZSBvcHBvc2l0ZSBmdW5jdGlvbnMsIHdpdGggKndhKiBmYWxsaW5nIGluIGJldHdlZW4gKmdhKiBhbmQgKm8qLCBidXQgY2xvc2VyIHRvICpnYSouIFRoaXMgaXMgYmVjYXVzZSAqZGUqIGFuZCAqbmkqIGJvdGggaGF2ZSB0byBkbyB3aXRoIGxvY2F0aW9uLCB3aGlsZSAqZ2EqIGlzIG5vbWluYXRpdmUgYW5kICpvKiBpcyBhY2N1c2F0aXZlLiBCdXQgKndhKiBjYW4gdGFrZSBib3RoIG5vbWluYXRpdmUgYW5kIGFjY3VzYXRpdmUgY2FzZSwgYmVjYXVzZSBpdCdzIGEgdG9waWMgbWFya2VyLS10aGF0J3Mgd2h5IGl0IGZhbGxzIGluIGJldHdlZW4gKmdhKiBhbmQgKm8qLiBIb3dldmVyLCBub21pbmF0aXZlbHkgbWFya2VkIG5vdW5zIGFyZSBtb3JlIG9mdGVuIHRvcGljcyB0aGFuIGFjY3VzYXRpdmVseSBtYXJrZWQgbm91bnMsIHdoaWNoIGlzIHdoeSBpdCBpcyBjbG9zZXIgdG8gKmdhKiB0aGFuIHRvICpvKi4NCg0KQmVsb3cgaXMgYW4gZXhhbXBsZSB3aXRoIGJpbmFyeSBkaXN0YW5jZXMsIHVzaW5nIGNvZ25hY3kgZGF0YSB0byBkZXRlcm1pbmUgc2ltaWxhcml0aWVzIGJldHdlZW4gZGlmZmVyZW50IGRpYWxlY3RzIG9mIEphcGFuZXNlLg0KDQpgYGB7ciBiaW5hcnksbWVzc2FnZT1GQUxTRX0NCmphcG9uaWMgPC0gcmVhZF9jc3YoImRhdGEvamFwdm9jYWJtYXRyaXguY3N2IikNCg0KamFwb25pYyU+JQ0KICByZW5hbWUobGFuZ3VhZ2U9WCklPiUNCiAgIyBleGNsdWRlZCBkZWFkIGxhbmd1YWdlcyBhbmQgT2tpbmF3YSBiZWNhdXNlIGl0IGlzIG5vdCBhIGRpYWxlY3QgYW5kIHdpbGwgbWVzcyB1cCB0aGUgc2NhbGUgb24gdGhlIG1hcCBieSBiZWluZyBzdXBlciBmYXIgYXdheQ0KICBmaWx0ZXIobGFuZ3VhZ2UhPSJPbGRfSmFwYW5lc2UiLGxhbmd1YWdlIT0iTWlkZGxlX0phcGFuZXNlIixsYW5ndWFnZSE9Ik9raW5hd2EiKSU+JQ0KICBjb2x1bW5fdG9fcm93bmFtZXMoImxhbmd1YWdlIiklPiUNCiAgZGlzdChtZXRob2QgPSAiYmluYXJ5IiktPmRpc3RhbmNlcw0KDQpjb29yZGluYXRlcyA8LSBjbWRzY2FsZShkaXN0YW5jZXMsaz0yKQ0KDQpjb29yZGluYXRlcyU+JQ0KICBhc19kYXRhX2ZyYW1lKHJvd25hbWVzPSJMb2NhdGlvbiIpJT4lDQogIGdncGxvdChhZXMoeD1WMix5PS1WMSxsYWJlbD1Mb2NhdGlvbikpKw0KICBnZW9tX3BvaW50KCkrDQogIGdlb21fdGV4dF9yZXBlbCgpKw0KICB0aGVtZV9jbGFzc2ljKCkrDQogIGxhYnMoeD0iQ29uc2VydmF0aXZlIHZlcnN1cyBwcm9ncmVzc2l2ZSIseT0iU291dGggdG8gbm9ydGgiKQ0KYGBgDQoNCkhlcmUsIGluc3RlYWQgb2YgaGF2aW5nIGRpc3RpbmN0IGdyb3Vwcywgd2UgYWN0dWFsbHkgaGF2ZSBhIGNvbnRpbnV1bSB3aGljaCB3ZSBjYW4gbGFiZWwgYXMgcmVmbGVjdGluZyB0aGUgc3BhdGlhbCBsb2NhdGlvbiAoc291dGggdG8gbm9ydGgpIG9uIHRoZSBvbmUgaGFuZCwgYXMgd2VsbCBhcyB0aGUgY29uc2VydmF0aXZlbmVzcyBvZiB0aGUgZGlhbGVjdCBvbiB0aGUgb3RoZXIgaGFuZC0taWYgeW91IGtub3cgYWJvdXQgSmFwYW5lc2UgZGlhbGVjdG9sb2d5LiANCg0KVGhlIHN0cmVzcyBvbiB0aGlzIHJlcHJlc2VudGF0aW9uIGlzIGFjdHVhbGx5IGZhaXJseSBoaWdoDQoNCmBgYHtyfQ0Kc3RyZXNzKGRpc3RhbmNlcyxkaXN0KGNvb3JkaW5hdGVzKSkNCmBgYA0KDQpIb3dldmVyLCBhIHRocmVlLWRpbWVuc2lvbmFsIHNvbHV0aW9uIGlzIG9ubHkgbWFyZ2luYWxseSBiZXR0ZXI6DQoNCmBgYHtyfQ0KaGlnaGVyX3NvbHV0aW9uIDwtIGNtZHNjYWxlKGRpc3RhbmNlcyxrPTMpDQpzdHJlc3MoZGlzdGFuY2VzLGRpc3QoaGlnaGVyX3NvbHV0aW9uKSkNCmBgYA0KDQpIZXJlLCB0aGUgaGlnaCBzdHJlc3MgdmFsdWUgaXMgbGlrZWx5IGJlY2F1c2Ugd2UgaGF2ZSAqYSBsb3QqIG9mIGxhbmd1YWdlcywgc28gaXQgbWF5IGJlIHRoYXQgaXQgaXMgaGFyZCB0byBnZXQgdGhlIGNvcnJlY3QgcG9zaXRpb25pbmcgb2YgdGhlIGxhbmd1YWdlcyB3aXRoaW4gZWFjaCBzbWFsbCBncm91cC4gVGhhdCBpcywgdGhlIHNwYXRpYWwgcmVsYXRpb25zaGlwIGJldHdlZW4gbGFuZ3VhZ2VzIHRoYXQgYXJlIGNsb3NlIHRvIGVhY2hvdGhlciBtYXkgbm90IGJlIHZlcnkgYWNjdXJhdGUuIEhvd2V2ZXIsIHRoZSBtYWluIGRpYWxlY3QgZ3JvdXBzIGFuZCB0aGUgbGFyZ2UgZGlzdGFuY2VzIGluIHRoaXMgZmlndXJlIGFyZSB3ZWxsLXJlcHJlc2VudGVkIChiYXNlZCBvbiB3aGF0IHdlIGFscmVhZHkga25vdyBhYm91dCBKYXBvbmljKSwgc28gSSB0aGluayBpdCBpcyBzdGlsbCBhIGdvb2QgcmVwcmVzZW50YXRpb24tLWFzIGxvbmcgYXMgeW91IHdhcm4gcGVvcGxlIG5vdCB0byBsb29rIGF0IHRoZSBzbWFsbCBkaXN0YW5jZXMuIElmIHRoaXMgdHdvLWRpbWVuc2lvbmFsIHJlcHJlc2VudGF0aW9uIHdhcyByZWFsbHkgYSBiYWQgcmVwcmVzZW5hdGlvbiwgd2Ugd291bGQgZXhwZWN0IGEgYmlnZ2VyIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgc3RyZXNzIGxldmVscyBvZiBhIHR3by1kaW1lbnNpb25hbCB2ZXJzdXMgdGhyZWUtZGltZW5zaW9uYWwgc29sdXRpb24uIA0KDQojIyMgQ2x1c3RlciBhbmFseXNpcw0KDQpJZiB5b3Ugd2FudCB0byBrbm93IGFib3V0IHRoZSBjbG9zZSByZWxhdGlvbnNoaXBzIChzbWFsbCBkaXN0YW5jZXMpIGFzIHdlbGwsIHlvdSBjb3VsZCB1c2UgYSBjbHVzdGVyIGFuYWx5c2lzDQoNCmBgYHtyfQ0KY2x1c3RlcnMgPC0gaGNsdXN0KGRpc3RhbmNlcyxtZXRob2Q9IndhcmQuRDIiKSAgICMgbWV0aG9kPSJ3YXJkLkQyIiB1c3VhbGx5IHByb2R1Y2VzIGdvb2QgcmVzdWx0cw0KcGxvdChjbHVzdGVycykNCmBgYA0KDQpDb21wYXJlZCB0byBtdWx0aWRpbWVuc2lvbmFsIHNjYWxpbmcsIGNsdXN0ZXIgYW5hbHlzZXMgYXJlIGJldHRlciBhdCBzaG93aW5nIGRpc3RpbmN0IGdyb3VwcyB3aGVuIHlvdSBoYXZlIGEgbG90IG9mIGRhdGEgcG9pbnRzLiBGcm9tIHRoZSBmaXJzdCB0d28gc3BsaXRzIGluIHRoZSB0cmVlIGhlcmUsIHdlIGFscmVhZHkgaGF2ZSBmb3VyIGRpc3RpbmN0IGdyb3Vwcy0tdGhleSBiYXNpY2FsbHkgcmVwcmVzZW50IHRoZSBub3J0aCBhbmQgZWFzdCBvZiBjb3VudHJ5LCB2ZXJzdXMgdGhlIHNvdXRoIGFuZCB3ZXN0IG9mIHRoZSBjb3VudHJ5LiBIb3dldmVyLCBpbiB0aGUgbXVsdGlkaW1lbnNpb25hbCBzY2FsaW5nIHJlcHJlc2VudGF0aW9uIHRoZSB3ZXN0ZXJuIGFuZCBlYXN0ZXJuIGdyb3VwcyBlbmRlZCB1cCBzcXVpc2hlZCB0b2dldGhlciAoaXQgd2FzIGhhcmQgdG8gY2xlYXJseSBzZXBhcmF0ZSB0aGVtKSwgc28gdGhhdCBjb3VsZCBhbHNvIGNvbnRyaWJ1dGUgdG8gaGlnaCBzdHJlc3MgbGV2ZWxzLiBUaGlzIGlzIHByb2JhYmx5IGJlY2F1c2UgdGhlIGVhc3Rlcm4gYW5kIHdlc3Rlcm4gZ3JvdXBzIGFyZSBsZXNzIGRpc3RpbmN0IGZyb20gZWFjaG90aGVyIHRoYW4gdGhlIG5vcnRoZXJuIGFuZCBzb3V0aGVybiBncm91cHMgKHdoaWNoIHdlcmUgcHJlc2VydmVkKSwgYW5kIGxpa2Ugd2Ugc2FpZCB0aGUgbXVsdGlkaW1lbnNpb25hbCBzY2FsaW5nIHJlcHJlc2VudGF0aW9uIGp1c3Qgc2hvd3MgdGhlIGdlbmVyYWwgdHJlbmRzIGFuZCBub3QgdGhlIHNtYWxsIGRpZmZlcmVuY2VzLg0KDQpTbywgaWYgSSB3ZXJlIHRvIHByZXNlbnQgdGhpcyBkYXRhLCBJIHdvdWxkIGluY2x1ZGUgYm90aCB0aGUgbXVsdGlkaW1lbnNpb25hbCBzY2FsaW5nIGFuYWx5c2lzICh0byBzaG93IHRoZSBvdmVyYWxsIHRyZW5kcyksIGFzIHdlbGwgYXMgdGhlIGNsdXN0ZXIgYW5hbHlzaXMgKHRvIHNob3cgZGlzdGluY3QsIGluY2x1ZGluZyBzbWFsbGVyLWxldmVsLCBncm91cGluZ3MpLg0KDQojIyMgV2hlbiB0byB1c2Ugd2hpY2ggbWV0aG9kPw0KDQpJZiB5b3Ugb25seSBoYXZlIGEgZmV3IGRhdGEgcG9pbnRzIChsaWtlIGluIHRoZSBmaXJzdCBleGFtcGxlIHdpdGggdGhlIEphcGFuZXNlIHBhcnRpY2xlcyksIG11bHRpZGltZW5zaW9uYWwgc2NhbGluZyBhbmQgY2x1c3RlciBhbmFseXNlcyBhcmUgdXN1YWxseSBlcXVhbGx5IGdvb2QgYXQgcmVwcmVzZW50aW5nIHRoZSBkaXN0YW5jZXMsIGJlY2F1c2UgdGhlcmUncyBlbm91Z2ggc3BhY2Ugb24gdGhlIG11bHRpZGltZW5zaW9uYWwgc2NhbGVkIHBsb3QgdG8ga2VlcCBhbGwgdGhlIGdyb3VwcyBkaXN0aW5jdC4gU28gaXQncyBqdXN0IGEgbWF0dGVyIG9mIHBlcnNvbmFsIHByZWZlcmVuY2UgYXMgdG8gd2hpY2ggdmlzdWFsaXNhdGlvbiB5b3UgcHJlZmVyLCBhbHRob3VnaCBpZiB5b3UgdGhpbmsgdGhlIGRhdGEgaXMgaGllcmFyY2hpY2FsbHkgc3RydWN0dXJlZCB0aGUgY2x1c3RlciBhbmFseXNpcyB3b3VsZCByZXByZXNlbnQgdGhpcyBoaWVyYXJjaGljYWwgc3RydWN0dXJlIGJldHRlci4NCg0KSWYgeW91IGhhdmUgYSBsb3Qgb2YgZGF0YSBwb2ludHMsIGhvd2V2ZXIsIGl0IGlzIGhhcmQgdG8ga2VlcCBncm91cHMgZGlzdGluY3Qgb24gbXVsdGlkaW1lbnNpb25hbCBzY2FsaW5nIHBsb3RzIChhcyB3ZSBzYXcgd2l0aCB0aGUgSmFwYW5lc2UgZGF0YSkuIEluIHRoaXMgY2FzZSwgdGhlIGNsdXN0ZXIgYW5hbHlzaXMgaXMgYmV0dGVyIGZvciBzaG93aW5nIHRoZSBncm91cGluZ3MsIGFuZCBpdCBpcyBvbmx5IHdvcnRoIHN0aWxsIHVzaW5nIHRoZSBtdWx0aWRpbWVuc2lvbmFsIHNjYWxpbmcgcGxvdCBpZiB5b3UgdGhpbmsgdGhlIGRpbWVuc2lvbnMgYXJlIG1lYW5pbmdmdWwgYW5kIHJlcHJlc2VudCBzb21lIG92ZXJhbGwgdHJlbmRzIGluIHRoZSBkYXRhIChlLmcuIHRoZSBub3J0aC1zb3V0aCwgY29uc2VydmF0aXZlLXByb2dyZXNzaXZlIHRyZW5kcyB3ZSBzYXcgaW4gdGhlIEphcGFuZXNlIGRhdGEpLiBJZiB5b3UgY2Fubm90IHRoaW5rIG9mIGFueSBtZWFuaW5nZnVsIGxhYmVscyBmb3IgeW91ciBkaW1lbnNpb25zLCB0aGVuIHByb2JhYmx5IGFsbCB0aGUgbXVsdGlkaW1lbnNpb25hbCBzY2FsaW5nIGFuYWx5c2lzIGlzIGRvaW5nIGlzIHRyeWluZyB0byByZXByZXNlbnQgZGlzdGluY3QgZ3JvdXBzLS1yYXRoZXIgdGhhbiBhbnkga2luZCBvZiBjb250aW51dW0tLWluIHdoaWNoIGNhc2UgSSB3b3VsZCBqdXN0IHVzZSBhIGNsdXN0ZXIgYW5hbHlzaXMgYmVjYXVzZSB0aGF0IGRvZXMgZ3JvdXBpbmcgYmV0dGVyIHdoZW4gdGhlcmUncyBsb3RzIG9mIGRhdGEgcG9pbnRzLg0KDQpGb3IgaW5zdGFuY2UsIGJlbG93IGlzIGFuIGV4YW1wbGUsIHBsb3R0aW5nIHdvcmRzIGJhc2VkIG9uIHRoZWlyIHNlbnNvcnkgbW9kYWxpdHkgcmF0aW5nczoNCg0KYGBge3IsbWVzc2FnZT1GQUxTRX0NCm5vcm1zIDwtIHJlYWRfY3N2KCJkYXRhL2x5bm90dF9jb25uZWxsXzIwMDlfbW9kYWxpdHkuY3N2IikNCg0Kbm9ybXMlPiUNCiAgc2VsZWN0KC1Qcm9wZXJ0eUJyaXRpc2gsLURvbWluYW50TW9kYWxpdHkpJT4lDQogIGNvbHVtbl90b19yb3duYW1lcygiV29yZCIpJT4lDQogIHNhbXBsZV9uKDUwKSU+JQ0KICBkaXN0KCktPmRpc3RhbmNlcw0KDQpjb29yZGluYXRlcyA8LSBjbWRzY2FsZShkaXN0YW5jZXMpDQoNCmNvb3JkaW5hdGVzJT4lDQogIGFzX2RhdGFfZnJhbWUocm93bmFtZXM9IldvcmQiKSU+JQ0KICBnZ3Bsb3QoYWVzKHg9VjEseT1WMixsYWJlbD1Xb3JkKSkrIA0KICBnZW9tX3BvaW50KCkrDQogIGdlb21fdGV4dF9yZXBlbCgpKw0KICB0aGVtZV9jbGFzc2ljKCkNCmBgYA0KDQpUaGVyZSBncm91cGluZ3MgYXJlIG5vdCB2ZXJ5IGNsZWFyLCBub3IgY2FuIHdlIGNvbWUgdXAgd2l0aCBhbnkgbWVhbmluZ2Z1bCBsYWJlbHMgZm9yIHRoZXNlIGRpbWVuc2lvbnMuIEluIHRoaXMgY2FzZSwgSSB3b3VsZCBqdXN0IHVzZSBhIGNsdXN0ZXIgYW5hbHlzaXMgYmVjYXVzZSBhdCBsZWFzdCB0aGVuIHRoZSBncm91cGluZ3MgYXJlIGNsZWFyOg0KDQpgYGB7cn0NCmNsdXN0ZXJzIDwtIGhjbHVzdChkaXN0YW5jZXMsbWV0aG9kPSJ3YXJkLkQyIikgICAjIG1ldGhvZD0id2FyZC5EMiIgdXN1YWxseSBwcm9kdWNlcyBnb29kIHJlc3VsdHMNCnBsb3QoY2x1c3RlcnMpDQpgYGANCg0KV2UgY2FuIHNlZSB0aGF0IHRoZSBncm91cGluZ3MgYXJlIG5vdCB3ZWxsIHByZXNlcnZlZCBpbiB0aGUgbXVsdGlkaW1lbnNpb25hbCBzY2FsaW5nIHBsb3QgZnJvbSB0aGUgaGlnaCBzdHJlc3Mgb24gdGhlIGNvb3JkaW5hdGVzOg0KDQpgYGB7cn0NCnN0cmVzcyhkaXN0YW5jZXMsZGlzdChjb29yZGluYXRlcykpDQpgYGANCg0KQSB0aHJlZS1kaW1lbnNpb25hbCBzb2x1dGlvbiBpcyBhYmxlIHRvIHJlcHJlc2VudCB0aGUgZ3JvdXBpbmdzIGJldHRlcjoNCg0KYGBge3J9DQpuZXdjb29yZGluYXRlcyA8LSBjbWRzY2FsZShkaXN0YW5jZXMsaz0zKQ0Kc3RyZXNzKGRpc3RhbmNlcyxkaXN0KG5ld2Nvb3JkaW5hdGVzKSkNCmBgYA0KDQpBbmQgd2UgY291bGQgZXh0cmFjdCB0aGUgZGlmZmVyZW50IGdyb3VwaW5ncyBieSBwbG90dGluZyB0aGUgZGltZW5zaW9ucyBvbmUgYWZ0ZXIgdGhlIG90aGVyOg0KDQpgYGB7cn0NCm5ld2Nvb3JkaW5hdGVzJT4lDQogIGFzX2RhdGFfZnJhbWUocm93bmFtZXM9IldvcmQiKSU+JQ0KICBnZ3Bsb3QoYWVzKHg9VjEseT1WMixsYWJlbD1Xb3JkKSkrDQogIGdlb21fcG9pbnQoKSsNCiAgZ2VvbV90ZXh0X3JlcGVsKCkrDQogIHRoZW1lX2NsYXNzaWMoKQ0KDQpuZXdjb29yZGluYXRlcyU+JQ0KICBhc19kYXRhX2ZyYW1lKHJvd25hbWVzPSJXb3JkIiklPiUNCiAgZ2dwbG90KGFlcyh4PVYxLHk9VjMsbGFiZWw9V29yZCkpKw0KICBnZW9tX3BvaW50KCkrDQogIGdlb21fdGV4dF9yZXBlbCgpKw0KICB0aGVtZV9jbGFzc2ljKCkNCg0KbmV3Y29vcmRpbmF0ZXMlPiUNCiAgYXNfZGF0YV9mcmFtZShyb3duYW1lcz0iV29yZCIpJT4lDQogIGdncGxvdChhZXMoeD1WMix5PVYzLGxhYmVsPVdvcmQpKSsNCiAgZ2VvbV9wb2ludCgpKw0KICBnZW9tX3RleHRfcmVwZWwoKSsNCiAgdGhlbWVfY2xhc3NpYygpDQoNCmBgYA0KDQpCdXQgdGhpcyBpcyBhIGxvdCBtb3JlIHdvcmsgKGFuZCBzdGlsbCBpdCdzIGVhc2llciB0byBzZWUgdGhlIGdyb3VwcyBpbiB0aGUgY2x1c3RlciBkZW5kcm9ncmFtKSwgc28gSSB3b3VsZCBqdXN0IHVzZSB0aGUgY2x1c3RlciBhbmFseXNpcyBpbnN0ZWFkLiBJIHdvdWxkIG9ubHkgdHJ5IHBsb3R0aW5nIGFsbCB0aGUgZGltZW5zaW9ucyBpZiB5b3UgdGhpbmsgdGhleSdyZSBhbGwgbWVhbmluZ2Z1bC4NCg0KYGBge3J9DQpwbG90KGNsdXN0ZXJzKQ0KYGBgDQoNCg0KIyBEZWFsaW5nIHdpdGggRXJyb3JzDQoNCnxFcnJvciAgICAgICAgICAgICAgICAgICAgfFBvc3NpYmxlIGV4cGxhbmF0aW9uL2ZpeCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18DQp8IkNvdWxkIG5vdCBmaW5kIGZ1bmN0aW9uInxZb3UgaGF2ZW4ndCBsb2FkZWQgKG9yIGluc3RhbGxlZCkgdGhlIGxpYnJhcnkgZm9yIHRoZSBmdW5jdGlvbiB5b3UncmUgdHJ5aW5nIHRvIHVzZSwgb3IgeW91J3ZlIHNwZWx0IHRoZSBmdW5jdGlvbiBuYW1lIHdyb25nIXwNCnwib2JqZWN0ICdibGFoJyBub3QgZm91bmQifFlvdSBoYXZlIGEgdHlwbyB3aXRoIHlvdXIgdmFyaWFibGUgbmFtZSAnYmxhaCcsIGkuZS4geW91J3ZlIHNwZWx0IGJsYWggd3Jvbmcgc29tZXdoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfA0KDQojIEdldHRpbmcgaGVscA0KDQoqIElmIHlvdSB3YW50IHRvIGtub3cgbW9yZSBhYm91dCBhbnkgZnVuY3Rpb24sIGlmIHlvdSB0eXBlIGA/ZnVuY3Rpb25fbmFtZWAsIFIgd2lsbCBzaG93IHlvdSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdGhlIGZ1bmN0aW9uIHdvcmtzIGluIHRoZSBib3R0b20gcmlnaHQgcGFuZQ0KKiBJZiB5b3Ugc3RpbGwgbmVlZCBoZWxwLCB0cnkgc2VhcmNoaW5nIGZvciB5b3VyIHF1ZXN0aW9uIG9uIFtzdGFjayBleGNoYW5nZV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvdGFnZ2VkL3IpIG9yIGp1c3QgZ29vZ2xlIGFsc28gdXN1YWxseSB3b3JrcyA6KQ0KKiBUaGVyZSBhcmUgYWxzbyB0aGUgW1IgY2hlYXRzaGVldHNdKGh0dHBzOi8vd3d3LnJzdHVkaW8uY29tL3Jlc291cmNlcy9jaGVhdHNoZWV0cy8pDQoqIEFuZCBvZiBjb3Vyc2UsIGFsc28gYXNrIHlvdXIgcXVlc3Rpb24gaW4gdGhlIHJlbGV2YW50IGRpc2N1c3Npb24gYm9hcmQgb24gc3R1ZGl1bSENCg0K