Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Figure wrapping code for air zone reports #4

Open
wants to merge 54 commits into
base: fig-wrapping
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
843c487
Initial commit
karawoo Mar 6, 2019
6b9657b
Use correct data in pm25 plotting function
ateucher Mar 8, 2019
294c188
Use RData files instead of running analyses from scratch
karawoo Mar 8, 2019
2c13e88
Tweak some spacing in figures
karawoo Mar 10, 2019
15a4ad9
Create ozone table
karawoo Mar 11, 2019
4c9b11e
Add part of PM 2.5 table
karawoo Mar 14, 2019
657b8bc
Add Rmds for additional air zones
karawoo Mar 14, 2019
b76d72b
Don't commit PDFs (at least for now)
karawoo Mar 14, 2019
503a95f
Fix color for management level cell
karawoo Mar 15, 2019
e996226
Start summary report with table
karawoo Mar 15, 2019
f60b827
Use rcaaqs colors
karawoo Mar 16, 2019
465320a
Load packages in functions.R
karawoo Mar 16, 2019
ba3cdca
Use Arial as main font
karawoo Mar 16, 2019
0308bcd
Figure captions
karawoo Mar 16, 2019
2152f45
Store figure captions in separate script
karawoo Mar 16, 2019
52839c1
Table captions
karawoo Mar 16, 2019
ea8adcf
Hold float positions
karawoo Mar 16, 2019
4527a3e
Add full PM2.5 data to table
karawoo Mar 17, 2019
4f365d1
Don't track logs in git
karawoo Mar 17, 2019
40f9a1d
Organize functions, captions, output report directory
karawoo Mar 17, 2019
265cdf5
Update airzone reports
karawoo Mar 17, 2019
b08d2a4
Add caption to management framework table
karawoo Mar 17, 2019
015f6fa
Add ozone plots to summary report
karawoo Mar 17, 2019
6b9287d
Set chunk options for the whole document
karawoo Mar 17, 2019
2c85bb5
Extract latex header to separate file
karawoo Mar 18, 2019
9d556a3
Move PM CAAQS annotation outside plot
karawoo Mar 18, 2019
38d124c
Customize figure sizes
karawoo Mar 18, 2019
a3adbd2
Customize appearance of plots in summary report
karawoo Mar 18, 2019
9316363
Add lorem ipsum placeholder text to summary report
karawoo Mar 18, 2019
cec329b
Add instructions to readme
karawoo Mar 18, 2019
37c6bd4
Add PM2.5 plots to summary report
karawoo Mar 18, 2019
8b6fb87
Load pm25 plots
karawoo Mar 18, 2019
3f6c349
Attempt figure wrapping
karawoo Mar 18, 2019
b209453
Combine functions.R and packages.R
karawoo Mar 20, 2019
5ea822f
Add summary map
karawoo Mar 20, 2019
57b801f
Rmd setup tweaks
karawoo Mar 20, 2019
2d33016
Move Fort St. John label
karawoo Mar 20, 2019
5d78652
Load tidyverse in summary report
karawoo Mar 25, 2019
c129616
Create legend key for CAAQS line in plots
karawoo Mar 25, 2019
d72dd4d
Add air zone maps to individual reports
karawoo Mar 25, 2019
3e0adbf
With CAAQS in legend, can remove some of the logic for axis limits
karawoo Mar 26, 2019
6845579
Merge branch 'create-reports' into fig-wrapping
karawoo Mar 26, 2019
3ec7aed
This looks somewhat decent
karawoo Mar 27, 2019
6715197
Write a chunk hook to generate proper wrapfigure code
karawoo Mar 27, 2019
618c1b0
Add placeholder text to all reports
karawoo Mar 28, 2019
d9ddf52
Filter annual data to same stations as summary data
karawoo Mar 28, 2019
0720791
Bigger text in air zone maps
karawoo Mar 28, 2019
d96e5d1
Subscript PM2.5 in all parts of the PM2.5 bar chart
karawoo Mar 28, 2019
c3fd556
Put captions above tables
karawoo Mar 28, 2019
dc5ace9
Add parameter to filter annual plot stations
karawoo Mar 28, 2019
cc8ad97
Consistent legend order in PM2.5 bar chart
karawoo Mar 28, 2019
79c797a
Merge branch 'create-reports' into fig-wrapping
karawoo Mar 28, 2019
1f645d5
Slightly bigger map
karawoo Mar 28, 2019
400cd07
Extract knitr options and hook to a separate script
karawoo Mar 28, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
# PDFs
*.pdf

# Log files
*.log

# History files
.Rhistory
.Rapp.history
Expand Down
223 changes: 223 additions & 0 deletions 00_summary_report.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
---
title: Air Zone Summary Report
header-includes:
- \usepackage[table,xcdraw]{xcolor}
- \usepackage{multicol}
- \usepackage{booktabs}
- \usepackage{makecell}
- \usepackage{multirow}
- \usepackage{colortbl}
- \usepackage{amsmath}
- \usepackage{float}
- \floatplacement{figure}{H}
output:
pdf_document:
md_extensions: +raw_attribute
latex_engine: lualatex
fig_caption: true
mainfont: Arial
params:
ozone_summary_plot: !r ambient_summary_plot
ozone_caaqs_mgmt_map: !r management_map_pdf
ozone_caaqs_mgmt_chart: !r management_chart
pm25_summary_plot: !r pm_ambient_summary_plot
pm25_caaqs_mgmt_map: !r pm_mgmt_map
pm25_caaqs_mgmt_chart: !r pm_mgmt_chart
---

```{r setup, echo = FALSE, message = FALSE}
knitr::opts_chunk$set(echo = FALSE, warning = FALSE)
library("tidyverse")
library("bcmaps")
library("sf")
```

## Introduction

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sit amet ultrices
lacus, eleifend vehicula erat. Suspendisse suscipit nec ante a bibendum. Orci
varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus
mus. Ut ac diam lectus. Nullam non tincidunt leo. Quisque sed egestas mauris,
vitae feugiat neque. Quisque eu vestibulum enim. Nam convallis nec nunc ut
rutrum. Fusce laoreet convallis scelerisque.

Nunc sit amet sem in purus iaculis commodo at a felis. Curabitur lacus purus,
interdum eu mauris quis, ultrices auctor risus. Vestibulum orci nulla, volutpat
sit amet hendrerit id, laoreet eu leo. Class aptent taciti sociosqu ad litora
torquent per conubia nostra, per inceptos himenaeos. In consequat urna id velit
dignissim, quis sagittis nunc volutpat. Fusce non facilisis ligula. Nulla mollis
in purus vitae bibendum. Morbi bibendum tempus lectus sed egestas.

```{r air-zones-map, fig.width = 4, fig.asp = 1, fig.cap = "Air zones and major population centers of British Columbia."}
## Cities to show on map
cities <- c("Victoria", "Vancouver", "Kamloops", "Prince George", "Fort St. John")
cities_to_plot <- bc_cities() %>%
filter(NAME %in% cities)

## Where to place labels for air zones and cities (not their actual locations;
## chosen to fit nicely on the plot)
airzone_labels <- tribble(
~name, ~x, ~y,
"Coastal", 730000, 710000,
"Northeast", 1150000, 1550000,
"Northwest", 825000, 1460000,
"Central\nInterior", 1050000, 1008000,
"Southern\nInterior", 1600000, 630000,
"Georgia Strait", 1200000, 340000,
"Lower Fraser Valley", 1550000, 420000
)

cities <- tribble(
~name, ~x, ~y,
"Victoria", 1130000, 410000,
"Vancouver", 1290000, 510000,
"Kamloops", 1350000, 680000,
"Prince\nGeorge", 1300000, 930000,
"Fort\nSt. John", 1310000, 1200000
)

ggplot() +
geom_sf(data = airzones(), aes(fill = Airzone), colour = "grey50") +
geom_sf(data = bc_bound(), fill = NA, colour = "grey50") +
geom_sf(data = cities_to_plot) +
geom_text(data = airzone_labels, aes(x, y, label = name), size = 4) +
geom_text(data = cities, aes(x, y, label = name), size = 2) +
scale_fill_brewer(palette = "Set3") +
coord_sf(datum = NA) +
labs(title = "Air Zones of British Columbia") +
theme_void() +
theme(
legend.position = "none",
plot.title = element_text(hjust = 0.5)
)
```

## Additional section 1

Suspendisse sed dictum est. Fusce vitae sollicitudin enim. Maecenas nisi nisi,
sollicitudin eu lacus ac, porttitor gravida ipsum. Morbi nisi lectus, blandit ut
neque at, pretium posuere augue. Nullam lacus nisi, molestie id posuere vel,
vehicula elementum dolor. Sed quis eros eget nibh laoreet porttitor pellentesque
sit amet ex. Donec ultricies felis et rutrum sagittis. Sed feugiat aliquet
turpis, in tincidunt neque hendrerit in. Donec volutpat neque sed mattis
porttitor. Donec quis erat sagittis, ultrices lectus quis, semper massa. Quisque
vel neque lacinia, euismod ante ut, porttitor ligula. Aenean varius lorem id
nisl mollis, in sollicitudin quam viverra. Mauris sit amet mauris ut felis
facilisis hendrerit. Nulla eu commodo ipsum, et cursus arcu. Cras pretium tortor
ut dapibus condimentum.

Aliquam non condimentum mauris. Integer non nunc ut lacus luctus ullamcorper.
Aenean id vulputate metus. Integer tristique tempus sapien sed pellentesque.
Nulla elementum consequat felis, at eleifend ex rutrum vitae. Cras ultricies
quam justo, ac vulputate mauris blandit non. Aliquam convallis viverra egestas.
Pellentesque dictum ipsum id venenatis sagittis. Vestibulum feugiat ullamcorper
hendrerit. Etiam vitae purus at augue laoreet lacinia. Vestibulum quis fringilla
neque. Pellentesque habitant morbi tristique senectus et netus et malesuada
fames ac turpis egestas.



<!-- Air zone management framework table -->

```{=latex}
\begin{table}[h]
\centering
\caption{Air zone management framework for ground-level ozone and PM$_{2.5}$. The CAAQS define the upper threshold, separating the "red" and "orange" management levels.}
\begin{tabular}{|l|c|c|c|c|c|c|}
\hline
\rowcolor[HTML]{D9D9D9}
& \multicolumn{2}{c|}{\begin{tabular}[c]{@{}c@{}}$\text{O}_3$\\ (ppb)\end{tabular}} & \multicolumn{2}{c|}{\begin{tabular}[c]{@{}c@{}}$\text{PM}_{2.5}$ – Annual\\ ($\mu \text{g/m}^3$)\end{tabular}} & \multicolumn{2}{c|}{\begin{tabular}[c]{@{}c@{}}$\text{PM}_{2.5}$ - 24h\\ ($\mu \text{g/m}^3$)\end{tabular}} \\ \cline{2-7}
\rowcolor[HTML]{D9D9D9}
\multirow{-2}{*}{Management Level} & 2015 & 2020 & 2015 & 2020 & 2015 & 2020 \\ \hline
\rowcolor[HTML]{A50026}
{\color[HTML]{FFFFFF} Red} & \multicolumn{6}{c|}{\cellcolor[HTML]{A50026}{\color[HTML]{FFFFFF} Actions for Achieving Air Zone CAAQS}} \\ \hline
Threshold (CAAQS) & 63 & 62 & 10 & 8.8 & 28 & 27 \\ \hline
\rowcolor[HTML]{F46D43}
Orange & \multicolumn{6}{c|}{\cellcolor[HTML]{F46D43}Actions for Preventing CAAQS Exceedance} \\ \hline
Threshold & \multicolumn{2}{c|}{56} & \multicolumn{2}{c|}{6.4} & \multicolumn{2}{c|}{19} \\ \hline
\rowcolor[HTML]{FEE08B}
Yellow & \multicolumn{6}{c|}{\cellcolor[HTML]{FEE08B}Actions for Preventing Air Quality Deterioration} \\ \hline
Threshold & \multicolumn{2}{c|}{50} & \multicolumn{2}{c|}{4} & \multicolumn{2}{c|}{10} \\ \hline
\rowcolor[HTML]{A6D96A}
Green & \multicolumn{6}{c|}{\cellcolor[HTML]{A6D96A}Actions for Keeping Clean Areas Clean} \\ \hline
\end{tabular}
\end{table}

```

## Additional section 2

Nam eu nisl eu eros convallis viverra et pulvinar elit. Pellentesque porttitor
pretium scelerisque. Quisque vel augue at risus dapibus fermentum. In in dolor
eu risus lacinia dignissim. Aliquam sed porta eros. Nullam vel arcu ut turpis
scelerisque molestie. Morbi convallis euismod imperdiet.

Ut vehicula, tortor quis placerat rhoncus, quam velit aliquam magna, ac
pellentesque sapien dui et odio. Vestibulum a ligula a libero suscipit pulvinar
nec ut mi. Phasellus in odio et quam semper lobortis eu quis lacus. In non lacus
dui. Proin a feugiat eros. Donec ultrices rutrum porttitor. Proin tempor urna ac
nunc faucibus volutpat. Nunc pharetra orci a mi tristique pharetra. Suspendisse
vel velit eu justo porttitor tincidunt sed scelerisque nunc. Morbi id justo at
libero ultricies aliquam.


<!-- Ozone summary plots -->

```{r ozone_summary_plot, fig.width = 4, fig.asp = 1.4, fig.cap = "Air zone summary plot for 8-hour average ozone"}
params$ozone_summary_plot +
theme(text = element_text(size = 8))
```

```{r ozone_caaqs_mgmt_map, fig.width = 5, fig.asp = 1, fig.cap = "Management level map for ozone."}
params$ozone_caaqs_mgmt_map
```

```{r ozone_caaqs_mgmt_chart, fig.width = 4, fig.asp = 1, fig.cap = "Management level achievement chart for ozone."}
params$ozone_caaqs_mgmt_chart +
theme(
axis.text = element_text(size = 8),
axis.title = element_text(size = 10),
legend.text = element_text(size = 8),
legend.title = element_text(size = 10)
)
```

## Addtional section 3

Aenean in pellentesque justo, finibus tincidunt tortor. Nulla ac rutrum lorem.
Sed mattis a ex id fermentum. Proin eget neque aliquet, maximus nisi at, mollis
sapien. Cras consequat diam lorem. Maecenas vulputate odio ac pellentesque
scelerisque. Cras molestie ultrices turpis, in accumsan lectus dictum et.

Donec non libero pharetra, aliquam nulla et, bibendum dui. Donec at sodales dui.
Sed eget elit malesuada arcu dapibus consequat ut sed felis. Donec at dui nec
velit dictum tincidunt. Ut posuere massa quis lectus accumsan rhoncus. Maecenas
scelerisque turpis nec felis dictum finibus. In sodales luctus pellentesque. Sed
sit amet tempor lacus. Vivamus nec erat id sem viverra bibendum auctor non sem.
Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus.

<!-- PM2.5 summary plots -->

```{r pm25_summary_plot, fig.width = 4, fig.asp = 1.4, fig.cap = "Air zone summary plot for annual and 24h PM$_{2.5}$"}
params$pm25_summary_plot +
theme(text = element_text(size = 8))
```

```{r pm25_caaqs_mgmt_map, fig.width = 5, fig.asp = 1, fig.cap = "Management level map for PM$_{2.5}$."}
params$pm25_caaqs_mgmt_map
```

```{r pm25_caaqs_mgmt_chart, fig.width = 4, fig.asp = 1.4, fig.cap = "Management level achievement chart for PM$_{2.5}$."}
params$pm25_caaqs_mgmt_chart +
theme(
axis.text = element_text(size = 8),
axis.title = element_text(size = 10),
legend.text = element_text(size = 8),
legend.title = element_text(size = 10),
## Make strips a bit smaller
strip.text = element_text(size = 8, margin = margin(1, 0, 1, 0)),
# Add a little space so the last axis label doesn't get cut off
plot.margin = unit(c(0, 1, 0, 0), "cm")
)
```
164 changes: 164 additions & 0 deletions 01_northeast.Rmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
---
title: Northeast Air Zone
output:
pdf_document:
latex_engine: lualatex
fig_caption: true
includes:
in_header: components/header.tex
mainfont: Arial
params:
ozone: !r ozone_caaqs_results
annual_ozone: !r ozone_caaqs$ann_4th_highest
ems_ids_ozone: !r NA
pm25: !r pm_caaqs_combined_results
annual_pm25: !r pm25_caaqs_annual$yearly_avg
ems_ids_pm25: !r NA
airzone: "Northeast"
---

<!-- Load functions, filter data to airzone -->

```{r setup, include = FALSE}
knitr::opts_chunk$set(echo = FALSE, warning = FALSE)

## Load packages, functions, etc.
source("components/functions.R")

## Filter data to air zone
airzone <- params$airzone
ozone <- filter(params$ozone, airzone == !!airzone)
pm25 <- filter(params$pm25, airzone == !!airzone)

## Filter annual data to EMS ids provided if present, otherwise use the same
## ones as in the summary data
if (!is.na(params$ems_ids_ozone)) {
annual_ozone <- filter(params$annual_ozone, ems_id %in% params$ems_ids_ozone)
} else {
annual_ozone <- filter(params$annual_ozone, ems_id %in% ozone$ems_id)
}
if (!is.na(params$ems_ids_pm25)) {
annual_pm25 <- filter(params$annual_pm25, ems_id %in% params$ems_ids_pm25)
} else {
annual_pm25 <- filter(params$annual_pm25, ems_id %in% pm25$ems_id)
}
```

## Introduction

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce sit amet ultrices
lacus, eleifend vehicula erat. Suspendisse suscipit nec ante a bibendum. Orci
varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus
mus. Ut ac diam lectus. Nullam non tincidunt leo. Quisque sed egestas mauris,
vitae feugiat neque. Quisque eu vestibulum enim. Nam convallis nec nunc ut
rutrum. Fusce laoreet convallis scelerisque.

## Background

Nunc sit amet sem in purus iaculis commodo at a felis. Curabitur lacus purus,
interdum eu mauris quis, ultrices auctor risus. Vestibulum orci nulla, volutpat
sit amet hendrerit id, laoreet eu leo. Class aptent taciti sociosqu ad litora
torquent per conubia nostra, per inceptos himenaeos. In consequat urna id velit
dignissim, quis sagittis nunc volutpat. Fusce non facilisis ligula. Nulla mollis
in purus vitae bibendum. Morbi bibendum tempus lectus sed egestas.

<!-- Airzone map-->

```{r airzone-map, fig.width = 3, fig.cap = paste(airzone, "Air Zone")}
airzone_map(airzone)
```

## Ozone

Suspendisse sed dictum est. Fusce vitae sollicitudin enim. Maecenas nisi nisi,
sollicitudin eu lacus ac, porttitor gravida ipsum. Morbi nisi lectus, blandit ut
neque at, pretium posuere augue. Nullam lacus nisi, molestie id posuere vel,
vehicula elementum dolor. Sed quis eros eget nibh laoreet porttitor pellentesque
sit amet ex. Donec ultricies felis et rutrum sagittis. Sed feugiat aliquet
turpis, in tincidunt neque hendrerit in. Donec volutpat neque sed mattis
porttitor. Donec quis erat sagittis, ultrices lectus quis, semper massa. Quisque
vel neque lacinia, euismod ante ut, porttitor ligula. Aenean varius lorem id
nisl mollis, in sollicitudin quam viverra. Mauris sit amet mauris ut felis
facilisis hendrerit. Nulla eu commodo ipsum, et cursus arcu. Cras pretium tortor
ut dapibus condimentum.

<!-- Ozone by station -->

```{r ozone-by-station, fig.width = 4.5, fig.asp = 0.5, fig.cap = ozone_by_station_cap(airzone, ozone)}
plot_ozone_by_station(ozone, airzone)
```

<!-- Annual trends in ozone concentrations -->

```{r annual-ozone, fig.cap = annual_ozone_cap(annual_ozone)}
plot_ozone_station_timeseries(annual_ozone, airzone)
```

## PM$_{2.5}$ levels

Aliquam non condimentum mauris. Integer non nunc ut lacus luctus ullamcorper.
Aenean id vulputate metus. Integer tristique tempus sapien sed pellentesque.
Nulla elementum consequat felis, at eleifend ex rutrum vitae. Cras ultricies
quam justo, ac vulputate mauris blandit non. Aliquam convallis viverra egestas.
Pellentesque dictum ipsum id venenatis sagittis. Vestibulum feugiat ullamcorper
hendrerit. Etiam vitae purus at augue laoreet lacinia. Vestibulum quis fringilla
neque. Pellentesque habitant morbi tristique senectus et netus et malesuada
fames ac turpis egestas.

Nam eu nisl eu eros convallis viverra et pulvinar elit. Pellentesque porttitor
pretium scelerisque. Quisque vel augue at risus dapibus fermentum. In in dolor
eu risus lacinia dignissim. Aliquam sed porta eros. Nullam vel arcu ut turpis
scelerisque molestie. Morbi convallis euismod imperdiet.

Ut vehicula, tortor quis placerat rhoncus, quam velit aliquam magna, ac
pellentesque sapien dui et odio. Vestibulum a ligula a libero suscipit pulvinar
nec ut mi. Phasellus in odio et quam semper lobortis eu quis lacus. In non lacus
dui. Proin a feugiat eros. Donec ultrices rutrum porttitor. Proin tempor urna ac
nunc faucibus volutpat. Nunc pharetra orci a mi tristique pharetra. Suspendisse
vel velit eu justo porttitor tincidunt sed scelerisque nunc. Morbi id justo at
libero ultricies aliquam.

<!-- PM2.5 by station -->

```{r pm25-by-station, fig.width = 5, fig.asp = 0.5, fig.cap = pm25_by_station_cap(airzone, pm25)}
plot_pm25_by_station(pm25)
```

<!-- PM Annual trends in PM 2.5 -->

```{r annual-pm25, fig.cap = annual_pm25_cap(annual_pm25)}
plot_pm25_station_timeseries(annual_pm25, airzone)
```

## Air Zone Management Levels

Aenean in pellentesque justo, finibus tincidunt tortor. Nulla ac rutrum lorem.
Sed mattis a ex id fermentum. Proin eget neque aliquet, maximus nisi at, mollis
sapien. Cras consequat diam lorem. Maecenas vulputate odio ac pellentesque
scelerisque. Cras molestie ultrices turpis, in accumsan lectus dictum et.

Donec non libero pharetra, aliquam nulla et, bibendum dui. Donec at sodales dui.
Sed eget elit malesuada arcu dapibus consequat ut sed felis. Donec at dui nec
velit dictum tincidunt. Ut posuere massa quis lectus accumsan rhoncus. Maecenas
scelerisque turpis nec felis dictum finibus. In sodales luctus pellentesque. Sed
sit amet tempor lacus. Vivamus nec erat id sem viverra bibendum auctor non sem.
Orci varius natoque penatibus et magnis dis parturient montes, nascetur
ridiculus mus.

<!-- Summary of ozone concentrations as measured and air zone management levels -->

```{r table-2}
create_ozone_table(ozone, airzone)
```

<!-- Summary of PM2.5 concentrations as measured and air zone management levels -->

```{r table-3}
create_pm25_table(pm25, airzone)
```

## Actions to Protect Air Quality

Praesent nec tincidunt ante. Morbi pulvinar velit eget metus commodo aliquam. Nulla non diam vel leo pellentesque pretium. Maecenas eleifend et lectus nec mollis. Donec aliquet massa ac odio blandit euismod. Curabitur sed neque semper, dictum neque vitae, dictum risus. Vestibulum sit amet auctor ante, a gravida est. Interdum et malesuada fames ac ante ipsum primis in faucibus. Integer quis dignissim risus.

Sed a urna lectus. Morbi arcu est, tincidunt a pharetra a, fringilla sit amet ligula. Donec pellentesque non ex a tristique. Donec a malesuada felis, vitae blandit nibh. Quisque quis pretium dolor, ut vehicula elit. Sed enim ligula, consectetur auctor massa vitae, venenatis bibendum leo. Interdum et malesuada fames ac ante ipsum primis in faucibus.
Loading