Base R has many built in functions that can be used to create different type of plots. Some of them are discussed here.
Get help on your problems from experienced statisticians at homeworkhelponline.net.
Pie Chart
> food <- c("Burger","Pasta","Pizza","Rice","Chicken")
> price <- c(200,150,600,100,90)
> # to find percentage amount
> par <- round(price/sum(price)*100)
> # to define Food object in pie chart with percentage sign and value
> labs <- paste(food,par,"%")
> pie(price,
+ labels = labs,
+ col=1:5,
+ main="Pie Chart of Food Price")

> pie(price,
+ labels = labs, col=1:5,
+ main="Pie Chart of Food Price",
+ radius=0.4)

Barplot
> barplot(price,main="Barplot", xlab="Food", ylab="Price",
+ names.arg=food)

> barplot(price,main="Barplot", xlab="Price", ylab="Food Item",
+ names.arg=food,col=1:5)

> barplot(price, ylab="Food", xlab="Price", main="Barplot of Foods",
+ horiz=F, names.arg=food,
+ border="blue",
+ col="lightblue",
+ density=30)

Using legend -
> barplot(price,
+ main="Barplot", xlab="Price", ylab="Food Item",
+ col=1:5)
> legend(x = "topright",food,lty="solid",col=1:5, bg = "gray90", text.col = "blue4")

Histogram
> N <- 100
> set.seed(11)
> x <- rnorm(1000, 10, 3) # to draw 1000 normal random numebrs
> hist(x, breaks=N,
+ main="Histogram of Sampling DIstribution",xlab="Samples Range",ylab="Frequency")

Reducing the number of breaks -
> N <- 30
> hist(x, breaks=N,
+ main="Histogram of Sampling DIstribution",xlab="Samples Range",ylab="Frequency")

Increasing the number of breaks -
> N <- 200
> hist(x, breaks=N,
+ main="Histogram of Sampling DIstribution",xlab="Samples Range",ylab="Frequency")

Sturges formula can be used for breaks using “Sturges” -
> hist(x, breaks="Sturges",
+ main="Histogram of Sampling DIstribution",xlab="Samples Range",ylab="Frequency")

To set probabilities in the y-axis set probability=T -
> hist(x, breaks="Sturges",
+ main="Histogram of Sampling Distribution",xlab="Samples Range",ylab="Probability",
+ probability = T)

Y and X axis’s range can be changed using xlim and ylim -
> hist(x, breaks=100,
+ main="Histogram of Sampling Distribution",xlab="Samples Range",ylab="Probability",
+ probability = T, xlim=c(-5,25), ylim= c(0,0.2))

Density Plot
Using the function density() we can find kernal density -
> set.seed(11)
> a <- rnorm(1000, 10, 3) # to draw 1000 normal random numbers
> x <- density(a)
> plot(x,
+ main="Histogram of Sampling DIstribution",xlab="Samples Range",ylab="Frequency")

Using polygon() we can customize it-
> plot(x,
+ main="Histogram of Sampling DIstribution",
+ xlab="Samples Range",ylab="Frequency")
> polygon(x, col = "steelblue", border="black")

Boxplot
> set.seed(10)
> norm.number <- rnorm(100, 10, 3)
> pois.number <- rpois(10, 10)
> unif.number <- runif(n = 100, min = 0, max = 20)
> boxplot(norm.number, pois.number, unif.number,
+ main="Boxplot of different distributions")

Passing data frame to boxplot and using horizontal = T-
> dists <- data.frame(Normal=norm.number,
+ Poisson=pois.number,
+ Uniform=unif.number)
> boxplot(dists,
+ main="Boxplot of different distributions", horizontal = T)

> boxplot(dists,
+ main="Boxplot of different distributions", horizontal = T,
+ xlab="Frequiency", ylab="Distributions", col=1:3, las=1)

Scatter plot
This is the simplest way to graph a scatter plot -
> x <- 1:20
> y <- log10(x)*10
> plot(x,y,
+ main="Relationship between X and Y",
+ xlab="X-axis", ylab="Y-axis")

Changing the type of points -
> x <- 1:20
> y <- log10(x)*10
> plot(x,y,
+ main="Relationship between X and Y",
+ xlab="X-axis", ylab="Y-axis",
+ pch=20)

> x <- 1:20
> y <- log10(x)*10
> plot(x,y,
+ main="Relationship between X and Y",
+ xlab="X-axis", ylab="Y-axis",
+ pch=10)

See the effect of using the argument las=1. It rotates the value of y-axis when las=1, rotates the value of x-axis when las=2 and rotates both when las=3. las=1 is pretty good to see:
> plot(x,y,
+ main="Relationship between X and Y",
+ xlab="X-axis", ylab="Y-axis",
+ las=1)

Adding a fitted line to the graph -
> x <- 1:20
> y <- log10(x)*10
> plot(x,y,
+ main="Relationship between X and Y",
+ xlab="X-axis", ylab="Y-axis",
+ pch=20)
> abline(lm(y ~ x), col="red") # regression line
> lines(lowess(x,y), col="blue") # draws a smooth line through the plot

Using cex to change the size of dots:
> plot(x,y,
+ main="Relationship between X and Y",
+ xlab="X-axis", ylab="Y-axis",
+ cex=0.55)

> plot(x,y,
+ main="Relationship between X and Y",
+ xlab="X-axis", ylab="Y-axis",
+ cex=1.4)

Let’s use the built-in USArrests data set-
> head(USArrests)
Murder Assault UrbanPop Rape
Alabama 13.2 236 58 21.2
Alaska 10.0 263 48 44.5
Arizona 8.1 294 80 31.0
Arkansas 8.8 190 50 19.5
California 9.0 276 91 40.6
Colorado 7.9 204 78 38.7
Now -
> plot(USArrests$Murder, USArrests$Assault,
+ main="Relationship between Assault and Murder",
+ xlab="No. of Murder", ylab="Np. of Assault")
> abline(lm(USArrests$Assault ~ USArrests$Murder), col="red")
> lines(lowess(USArrests$Murder, USArrests$Assault), col="blue")

Multiple Scatterplots
Let’s use the built-in USArrests data set-
> head(USArrests)
Murder Assault UrbanPop Rape
Alabama 13.2 236 58 21.2
Alaska 10.0 263 48 44.5
Arizona 8.1 294 80 31.0
Arkansas 8.8 190 50 19.5
California 9.0 276 91 40.6
Colorado 7.9 204 78 38.7
Let’s see the relationships through graph and correlation matrix -
> pairs(~Murder+UrbanPop+Rape,data=USArrests,
+ main="Simple Scatterplot Matrix")

> round(cor(USArrests[,c(1,3,4)]),2)
Murder UrbanPop Rape
Murder 1.00 0.07 0.56
UrbanPop 0.07 1.00 0.41
Rape 0.56 0.41 1.00
Line plot
In plot() the argument type takes the values: “p” for points
“l” for lines
“b” for both points and lines
“c” for empty points joined by lines
“o” for overplotted points and lines
“s” and “S” for stair steps
“n” does not produce any points or lines
lty is for line type. Line types can either be specified as an integer (0=blank, 1=solid (default), 2=dashed, 3=dotted, 4=dotdash, 5=longdash, 6=twodash) or as one of the character strings “blank”, “solid”, “dashed”, “dotted”, “dotdash”, “longdash”, or “twodash” -
> x <- 1:20
> y <- log10(x)*10
> plot(x,y,
+ main="Relationship between X and Y",
+ xlab="X-axis", ylab="Y-axis",
+ type="l",lty=1)

Using type=b and pch=20 -
> plot(x,y,
+ main="Relationship between X and Y",
+ xlab="X-axis", ylab="Y-axis",
+ type="b",lty=1, pch=20)

LS0tDQp0aXRsZTogIkJhc2ljIFBsb3R0aW5nIg0KYXV0aG9yOiAiTUQgQUhTQU5VTCBJU0xBTSINCm91dHB1dDogDQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiBmYWxzZQ0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIHRoZW1lOiBjZXJ1bGVhbg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCi0tLQ0KDQotLS0NCg0KYGBge3IsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoDQogIGNvbW1lbnQgPSAiIiwgcHJvbXB0ID0gVFJVRSwgbWVzc2FnZT1GLCB3YXJuaW5nID0gRg0KKQ0KYGBgDQojIyB7LnRhYnNldCAudGFic2V0LWZhZGUgLnRhYnNldC1waWxsc30NCg0KQmFzZSBSIGhhcyBtYW55IGJ1aWx0IGluIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNyZWF0ZSBkaWZmZXJlbnQgdHlwZSBvZiBwbG90cy4gU29tZSBvZiB0aGVtIGFyZSBkaXNjdXNzZWQgaGVyZS4NCg0KR2V0IGhlbHAgb24geW91ciBwcm9ibGVtcyBmcm9tIGV4cGVyaWVuY2VkIHN0YXRpc3RpY2lhbnMgYXQgW2hvbWV3b3JraGVscG9ubGluZS5uZXRdKGh0dHBzOi8vd3d3LmhvbWV3b3JraGVscG9ubGluZS5uZXQvcHJvZ3JhbW1pbmcvci1wcm9ncmFtbWluZykuDQoNCi0tLS0tLQ0KDQojIyMgUGllIENoYXJ0DQoNCmBgYHtyfQ0KZm9vZCA8LSBjKCJCdXJnZXIiLCJQYXN0YSIsIlBpenphIiwiUmljZSIsIkNoaWNrZW4iKQ0KcHJpY2UgPC0gYygyMDAsMTUwLDYwMCwxMDAsOTApDQojIHRvIGZpbmQgcGVyY2VudGFnZSBhbW91bnQNCnBhciA8LSByb3VuZChwcmljZS9zdW0ocHJpY2UpKjEwMCkJDQojIHRvIGRlZmluZSBGb29kIG9iamVjdCBpbiBwaWUgY2hhcnQgd2l0aCBwZXJjZW50YWdlIHNpZ24gYW5kIHZhbHVlDQpsYWJzIDwtIHBhc3RlKGZvb2QscGFyLCIlIikNCnBpZShwcmljZSwNCiAgICBsYWJlbHMgPSBsYWJzLCANCiAgICBjb2w9MTo1LA0KICAgIG1haW49IlBpZSBDaGFydCBvZiBGb29kIFByaWNlIikNCmBgYA0KDQoNCmBgYHtyfQ0KcGllKHByaWNlLA0KICAgIGxhYmVscyA9IGxhYnMsIGNvbD0xOjUsDQogICAgbWFpbj0iUGllIENoYXJ0IG9mIEZvb2QgUHJpY2UiLA0KICAgIHJhZGl1cz0wLjQpDQpgYGANCg0KDQoNCiMjIyBCYXJwbG90DQoNCmBgYHtyfQ0KYmFycGxvdChwcmljZSxtYWluPSJCYXJwbG90IiwgeGxhYj0iRm9vZCIsIHlsYWI9IlByaWNlIiwNCiAgICAgICAgbmFtZXMuYXJnPWZvb2QpDQpgYGANCg0KYGBge3J9DQpiYXJwbG90KHByaWNlLG1haW49IkJhcnBsb3QiLCB4bGFiPSJQcmljZSIsIHlsYWI9IkZvb2QgSXRlbSIsDQogICAgICAgIG5hbWVzLmFyZz1mb29kLGNvbD0xOjUpDQpgYGANCmBgYHtyfQ0KYmFycGxvdChwcmljZSwgeWxhYj0iRm9vZCIsIHhsYWI9IlByaWNlIiwgbWFpbj0iQmFycGxvdCBvZiBGb29kcyIsDQogICAgICAgIGhvcml6PUYsIG5hbWVzLmFyZz1mb29kLA0KICAgICAgICBib3JkZXI9ImJsdWUiLA0KICAgICAgICBjb2w9ImxpZ2h0Ymx1ZSIsDQogICAgICAgIGRlbnNpdHk9MzApDQpgYGANCg0KVXNpbmcgbGVnZW5kIC0NCmBgYHtyfQ0KYmFycGxvdChwcmljZSwNCiAgICAgICAgbWFpbj0iQmFycGxvdCIsIHhsYWI9IlByaWNlIiwgeWxhYj0iRm9vZCBJdGVtIiwNCiAgICAgICAgY29sPTE6NSkNCmxlZ2VuZCh4ID0gInRvcHJpZ2h0Iixmb29kLGx0eT0ic29saWQiLGNvbD0xOjUsIGJnID0gImdyYXk5MCIsIHRleHQuY29sID0gImJsdWU0IikNCmBgYA0KDQoNCiMjIyBIaXN0b2dyYW0NCg0KYGBge3J9DQpOIDwtIDEwMA0Kc2V0LnNlZWQoMTEpDQp4IDwtIHJub3JtKDEwMDAsIDEwLCAzKQkjIHRvIGRyYXcgMTAwMCBub3JtYWwgcmFuZG9tIG51bWVicnMNCmhpc3QoeCwgYnJlYWtzPU4sDQogICAgIG1haW49Ikhpc3RvZ3JhbSBvZiBTYW1wbGluZyBESXN0cmlidXRpb24iLHhsYWI9IlNhbXBsZXMgUmFuZ2UiLHlsYWI9IkZyZXF1ZW5jeSIpDQpgYGANCg0KUmVkdWNpbmcgdGhlIG51bWJlciBvZiBicmVha3MgLQ0KYGBge3J9DQpOIDwtIDMwDQpoaXN0KHgsIGJyZWFrcz1OLA0KICAgICBtYWluPSJIaXN0b2dyYW0gb2YgU2FtcGxpbmcgRElzdHJpYnV0aW9uIix4bGFiPSJTYW1wbGVzIFJhbmdlIix5bGFiPSJGcmVxdWVuY3kiKQ0KYGBgDQoNCkluY3JlYXNpbmcgdGhlIG51bWJlciBvZiBicmVha3MgLQ0KYGBge3J9DQpOIDwtIDIwMA0KaGlzdCh4LCBicmVha3M9TiwNCiAgICAgbWFpbj0iSGlzdG9ncmFtIG9mIFNhbXBsaW5nIERJc3RyaWJ1dGlvbiIseGxhYj0iU2FtcGxlcyBSYW5nZSIseWxhYj0iRnJlcXVlbmN5IikNCmBgYA0KDQpTdHVyZ2VzIGZvcm11bGEgY2FuIGJlIHVzZWQgZm9yIGJyZWFrcyB1c2luZyAiU3R1cmdlcyIgLQ0KYGBge3J9DQpoaXN0KHgsIGJyZWFrcz0iU3R1cmdlcyIsDQogICAgIG1haW49Ikhpc3RvZ3JhbSBvZiBTYW1wbGluZyBESXN0cmlidXRpb24iLHhsYWI9IlNhbXBsZXMgUmFuZ2UiLHlsYWI9IkZyZXF1ZW5jeSIpDQpgYGANCg0KVG8gc2V0IHByb2JhYmlsaXRpZXMgaW4gdGhlIHktYXhpcyBzZXQgYHByb2JhYmlsaXR5PVRgIC0NCmBgYHtyfQ0KaGlzdCh4LCBicmVha3M9IlN0dXJnZXMiLA0KICAgICBtYWluPSJIaXN0b2dyYW0gb2YgU2FtcGxpbmcgRGlzdHJpYnV0aW9uIix4bGFiPSJTYW1wbGVzIFJhbmdlIix5bGFiPSJQcm9iYWJpbGl0eSIsDQogICAgIHByb2JhYmlsaXR5ID0gVCkNCmBgYA0KDQpZIGFuZCBYIGF4aXMncyByYW5nZSBjYW4gYmUgY2hhbmdlZCB1c2luZyBgeGxpbWAgYW5kIGB5bGltYCAtDQpgYGB7cn0NCmhpc3QoeCwgYnJlYWtzPTEwMCwNCiAgICAgbWFpbj0iSGlzdG9ncmFtIG9mIFNhbXBsaW5nIERpc3RyaWJ1dGlvbiIseGxhYj0iU2FtcGxlcyBSYW5nZSIseWxhYj0iUHJvYmFiaWxpdHkiLA0KICAgICBwcm9iYWJpbGl0eSA9IFQsIHhsaW09YygtNSwyNSksIHlsaW09IGMoMCwwLjIpKQ0KYGBgDQoNCg0KIyMjIERlbnNpdHkgUGxvdA0KDQpVc2luZyB0aGUgZnVuY3Rpb24gYGRlbnNpdHkoKWAgd2UgY2FuIGZpbmQga2VybmFsIGRlbnNpdHkgLQ0KYGBge3J9DQpzZXQuc2VlZCgxMSkNCmEgPC0gcm5vcm0oMTAwMCwgMTAsIDMpCSMgdG8gZHJhdyAxMDAwIG5vcm1hbCByYW5kb20gbnVtYmVycw0KeCA8LSBkZW5zaXR5KGEpDQpwbG90KHgsDQogICAgIG1haW49Ikhpc3RvZ3JhbSBvZiBTYW1wbGluZyBESXN0cmlidXRpb24iLHhsYWI9IlNhbXBsZXMgUmFuZ2UiLHlsYWI9IkZyZXF1ZW5jeSIpDQpgYGANCg0KVXNpbmcgYHBvbHlnb24oKWAgd2UgY2FuIGN1c3RvbWl6ZSBpdC0NCmBgYHtyfQ0KcGxvdCh4LA0KICAgICBtYWluPSJIaXN0b2dyYW0gb2YgU2FtcGxpbmcgRElzdHJpYnV0aW9uIiwNCiAgICAgeGxhYj0iU2FtcGxlcyBSYW5nZSIseWxhYj0iRnJlcXVlbmN5IikNCnBvbHlnb24oeCwgY29sID0gInN0ZWVsYmx1ZSIsIGJvcmRlcj0iYmxhY2siKQ0KYGBgDQoNCiMjIyBCb3hwbG90DQoNCmBgYHtyfQ0Kc2V0LnNlZWQoMTApDQpub3JtLm51bWJlciA8LSBybm9ybSgxMDAsIDEwLCAzKQ0KcG9pcy5udW1iZXIgPC0gcnBvaXMoMTAsIDEwKQ0KdW5pZi5udW1iZXIgPC0gcnVuaWYobiA9IDEwMCwgbWluID0gMCwgbWF4ID0gMjApDQpib3hwbG90KG5vcm0ubnVtYmVyLCBwb2lzLm51bWJlciwgdW5pZi5udW1iZXIsDQogICAgICAgIG1haW49IkJveHBsb3Qgb2YgZGlmZmVyZW50IGRpc3RyaWJ1dGlvbnMiKQ0KYGBgDQoNClBhc3NpbmcgZGF0YSBmcmFtZSB0byBib3hwbG90IGFuZCB1c2luZyBgaG9yaXpvbnRhbCA9IFRgLQ0KYGBge3J9DQpkaXN0cyA8LSBkYXRhLmZyYW1lKE5vcm1hbD1ub3JtLm51bWJlciwNCiAgICAgICAgICAgICAgICAgICAgUG9pc3Nvbj1wb2lzLm51bWJlciwNCiAgICAgICAgICAgICAgICAgICAgVW5pZm9ybT11bmlmLm51bWJlcikNCmJveHBsb3QoZGlzdHMsDQogICAgICAgIG1haW49IkJveHBsb3Qgb2YgZGlmZmVyZW50IGRpc3RyaWJ1dGlvbnMiLCBob3Jpem9udGFsID0gVCkNCmBgYA0KDQpgYGB7cn0NCmJveHBsb3QoZGlzdHMsDQogICAgICAgIG1haW49IkJveHBsb3Qgb2YgZGlmZmVyZW50IGRpc3RyaWJ1dGlvbnMiLCBob3Jpem9udGFsID0gVCwNCiAgICAgICAgeGxhYj0iRnJlcXVpZW5jeSIsIHlsYWI9IkRpc3RyaWJ1dGlvbnMiLCBjb2w9MTozLCBsYXM9MSkNCmBgYA0KDQojIyMgU2NhdHRlciBwbG90DQoNClRoaXMgaXMgdGhlIHNpbXBsZXN0IHdheSB0byBncmFwaCBhIHNjYXR0ZXIgcGxvdCAtDQpgYGB7cn0NCnggPC0gMToyMA0KeSA8LSBsb2cxMCh4KSoxMA0KcGxvdCh4LHksDQogICAgIG1haW49IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFggYW5kIFkiLA0KICAgICB4bGFiPSJYLWF4aXMiLCB5bGFiPSJZLWF4aXMiKQ0KYGBgDQoNCkNoYW5naW5nIHRoZSB0eXBlIG9mIHBvaW50cyAtDQpgYGB7cn0NCnggPC0gMToyMA0KeSA8LSBsb2cxMCh4KSoxMA0KcGxvdCh4LHksDQogICAgIG1haW49IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFggYW5kIFkiLA0KICAgICB4bGFiPSJYLWF4aXMiLCB5bGFiPSJZLWF4aXMiLA0KICAgICBwY2g9MjApDQpgYGANCg0KYGBge3J9DQp4IDwtIDE6MjANCnkgPC0gbG9nMTAoeCkqMTANCnBsb3QoeCx5LA0KICAgICBtYWluPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBYIGFuZCBZIiwNCiAgICAgeGxhYj0iWC1heGlzIiwgeWxhYj0iWS1heGlzIiwNCiAgICAgcGNoPTEwKQ0KYGBgDQoNCg0KU2VlIHRoZSBlZmZlY3Qgb2YgdXNpbmcgdGhlIGFyZ3VtZW50IGBsYXM9MWAuIEl0IHJvdGF0ZXMgdGhlIHZhbHVlIG9mIHktYXhpcyB3aGVuIGBsYXM9MWAsIHJvdGF0ZXMgdGhlIHZhbHVlIG9mIHgtYXhpcyB3aGVuIGBsYXM9MmAgYW5kIHJvdGF0ZXMgYm90aCB3aGVuIGBsYXM9M2AuIGBsYXM9MWAgaXMgcHJldHR5IGdvb2QgdG8gc2VlOg0KYGBge3J9DQpwbG90KHgseSwNCiAgICAgbWFpbj0iUmVsYXRpb25zaGlwIGJldHdlZW4gWCBhbmQgWSIsDQogICAgIHhsYWI9IlgtYXhpcyIsIHlsYWI9IlktYXhpcyIsDQogICAgIGxhcz0xKQ0KYGBgDQoNCkFkZGluZyBhIGZpdHRlZCBsaW5lIHRvIHRoZSBncmFwaCAtIA0KYGBge3J9DQp4IDwtIDE6MjANCnkgPC0gbG9nMTAoeCkqMTANCnBsb3QoeCx5LA0KICAgICBtYWluPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBYIGFuZCBZIiwNCiAgICAgeGxhYj0iWC1heGlzIiwgeWxhYj0iWS1heGlzIiwNCiAgICAgcGNoPTIwKQ0KYWJsaW5lKGxtKHkgfiB4KSwgY29sPSJyZWQiKSAgIyByZWdyZXNzaW9uIGxpbmUNCmxpbmVzKGxvd2Vzcyh4LHkpLCBjb2w9ImJsdWUiKSAgIyBkcmF3cyBhIHNtb290aCBsaW5lIHRocm91Z2ggdGhlIHBsb3QNCmBgYA0KDQpVc2luZyBgY2V4YCB0byBjaGFuZ2UgdGhlIHNpemUgb2YgZG90czoNCmBgYHtyfQ0KcGxvdCh4LHksDQogICAgIG1haW49IlJlbGF0aW9uc2hpcCBiZXR3ZWVuIFggYW5kIFkiLA0KICAgICB4bGFiPSJYLWF4aXMiLCB5bGFiPSJZLWF4aXMiLA0KICAgICBjZXg9MC41NSkNCmBgYA0KDQpgYGB7cn0NCnBsb3QoeCx5LA0KICAgICBtYWluPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBYIGFuZCBZIiwNCiAgICAgeGxhYj0iWC1heGlzIiwgeWxhYj0iWS1heGlzIiwNCiAgICAgY2V4PTEuNCkNCmBgYA0KDQoNCkxldCdzIHVzZSB0aGUgYnVpbHQtaW4gVVNBcnJlc3RzIGRhdGEgc2V0LQ0KYGBge3J9DQpoZWFkKFVTQXJyZXN0cykNCmBgYA0KDQpOb3cgLQ0KYGBge3J9DQpwbG90KFVTQXJyZXN0cyRNdXJkZXIsIFVTQXJyZXN0cyRBc3NhdWx0LA0KICAgICBtYWluPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBBc3NhdWx0IGFuZCBNdXJkZXIiLA0KICAgICB4bGFiPSJOby4gb2YgTXVyZGVyIiwgeWxhYj0iTnAuIG9mIEFzc2F1bHQiKQ0KYWJsaW5lKGxtKFVTQXJyZXN0cyRBc3NhdWx0IH4gVVNBcnJlc3RzJE11cmRlciksIGNvbD0icmVkIikNCmxpbmVzKGxvd2VzcyhVU0FycmVzdHMkTXVyZGVyLCBVU0FycmVzdHMkQXNzYXVsdCksIGNvbD0iYmx1ZSIpDQpgYGANCg0KIyMjIE11bHRpcGxlIFNjYXR0ZXJwbG90cw0KDQpMZXQncyB1c2UgdGhlIGJ1aWx0LWluIFVTQXJyZXN0cyBkYXRhIHNldC0NCmBgYHtyfQ0KaGVhZChVU0FycmVzdHMpDQpgYGANCg0KTGV0J3Mgc2VlIHRoZSByZWxhdGlvbnNoaXBzIHRocm91Z2ggZ3JhcGggYW5kIGNvcnJlbGF0aW9uIG1hdHJpeCAtDQpgYGB7cn0NCnBhaXJzKH5NdXJkZXIrVXJiYW5Qb3ArUmFwZSxkYXRhPVVTQXJyZXN0cywNCiAgIG1haW49IlNpbXBsZSBTY2F0dGVycGxvdCBNYXRyaXgiKQ0Kcm91bmQoY29yKFVTQXJyZXN0c1ssYygxLDMsNCldKSwyKQ0KYGBgDQoNCiMjIyBMaW5lIHBsb3QgDQoNCkluIGBwbG90KClgIHRoZSBhcmd1bWVudCBgdHlwZWAgdGFrZXMgdGhlIHZhbHVlczogDQrigJxw4oCdIGZvciBwb2ludHMgICANCuKAnGzigJ0gZm9yIGxpbmVzICAgDQrigJxi4oCdIGZvciBib3RoIHBvaW50cyBhbmQgbGluZXMgICANCuKAnGPigJ0gZm9yIGVtcHR5IHBvaW50cyBqb2luZWQgYnkgbGluZXMgICANCuKAnG/igJ0gZm9yIG92ZXJwbG90dGVkIHBvaW50cyBhbmQgbGluZXMgICANCuKAnHPigJ0gYW5kIOKAnFPigJ0gZm9yIHN0YWlyIHN0ZXBzICAgDQrigJxu4oCdIGRvZXMgbm90IHByb2R1Y2UgYW55IHBvaW50cyBvciBsaW5lcyAgIA0KDQpgbHR5YCBpcyBmb3IgbGluZSB0eXBlLiBMaW5lIHR5cGVzIGNhbiBlaXRoZXIgYmUgc3BlY2lmaWVkIGFzIGFuIGludGVnZXIgKDA9YmxhbmssIDE9c29saWQgKGRlZmF1bHQpLCAyPWRhc2hlZCwgMz1kb3R0ZWQsIDQ9ZG90ZGFzaCwgNT1sb25nZGFzaCwgNj10d29kYXNoKSBvciBhcyBvbmUgb2YgdGhlIGNoYXJhY3RlciBzdHJpbmdzIOKAnGJsYW5r4oCdLCDigJxzb2xpZOKAnSwg4oCcZGFzaGVk4oCdLCDigJxkb3R0ZWTigJ0sIOKAnGRvdGRhc2jigJ0sIOKAnGxvbmdkYXNo4oCdLCBvciDigJx0d29kYXNo4oCdIC0NCmBgYHtyfQ0KeCA8LSAxOjIwDQp5IDwtIGxvZzEwKHgpKjEwDQpwbG90KHgseSwNCiAgICAgbWFpbj0iUmVsYXRpb25zaGlwIGJldHdlZW4gWCBhbmQgWSIsDQogICAgIHhsYWI9IlgtYXhpcyIsIHlsYWI9IlktYXhpcyIsIA0KICAgICB0eXBlPSJsIixsdHk9MSkNCmBgYA0KDQpVc2luZyB0eXBlPWIgYW5kIHBjaD0yMCAtDQpgYGB7cn0NCnBsb3QoeCx5LA0KICAgICBtYWluPSJSZWxhdGlvbnNoaXAgYmV0d2VlbiBYIGFuZCBZIiwNCiAgICAgeGxhYj0iWC1heGlzIiwgeWxhYj0iWS1heGlzIiwgDQogICAgIHR5cGU9ImIiLGx0eT0xLCBwY2g9MjApDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQoNCg0KDQo=