Motivations

Plot của Financial Times được John Burn-Murdoch trích dẫn như sau:

Bằng cách sử dụng R chúng ta có thể “tái tạo” lại plot này như sau:

# R Codes

Dưới đây là R Codes cho area plot ở trên:

# Load original plot from: https://mobile.twitter.com/jburnmurdoch/status/1541097879984537602/photo/1
# Extract color codes from downloaded image by https://imagecolorpicker.com/en


# Clear R Environment: 

rm(list = ls())

# Create a data set for ploting: 

my_time <- 1:7

a_lot <- c(0.3, 0.29, 0.31, 0.32, 0.35, 0.45, 0.6)

a_little <- c(1, 0.95, 1.1, 1.2, 1.25, 1.7, 2.2)

not_limited <- c(1.7, 1.6, 1.75, 1.8, 2.1, 2.6, 3.1)

library(tidyverse)

df_wide <- tibble(my_time = my_time, a_lot = a_lot, a_little = a_little, not_limited = not_limited)

#----------------
#  Prepare data
#----------------

my_levels <- c("a_lot", "a_little", "not_limited")

df_wide %>% 
  gather(type, value, -my_time) %>% 
  mutate(type = factor(type, level = my_levels[3:1])) -> df_long

label_on_x <- c("May\n2021", "Jul", "Sep", "Nov", "Jan\n2022", "Mar", "May")


a_lot_color <- "#c94456"

a_little_color <- "#ea9077"

not_limited_color <- "#dfd2c8"

grid_color <- "#eaded2"

text_color_grey <- "#908b86"

bgr_color <- "#fff1e5"

p_title <- "Rates of self-reported long Covid continue rise in the UK, with 2% of\npopulation now stating the condition is limiting their daily activities"

p_subtittle <- "Estimated prevalence of self-reported long Covid in the UK, by level of limitation\n(% of total population)"

p_caption <- "Source: ONS Covid-19 infection survey\nFT graphic: Nguyen Chi Dung"


library(showtext) # -> Package for using extra fonts. 

my_font <- "Roboto Condensed" # -> Use Roboto Condensed font for our plot. 

font_add_google(name = my_font, family = my_font) # -> Load font. 

showtext_auto() # -> Automatically render text: 

library(ggtext)

df_long %>% 
  ggplot(aes(x = my_time, y = value, fill = type)) + 
  geom_area(position = "dodge", show.legend = FALSE, alpha = 0.8) + 
  theme_minimal() +  
  labs(title = p_title, subtitle = p_subtittle, caption = p_caption) +   
  scale_x_continuous(limits = c(1, 7), breaks = seq(1, 7, 1), expand = c(0, 0), labels = label_on_x) + 
  scale_y_continuous(position = "right", expand = c(0, 0)) + 
  scale_fill_manual(values = c(not_limited_color, a_little_color, a_lot_color)) + 
  theme(axis.title = element_blank()) + 
  theme(plot.margin = unit(rep(0.7, 4), "cm")) + 
  theme(panel.grid.minor = element_blank()) + 
  theme(panel.grid.major.x = element_blank()) + 
  theme(panel.grid.major.y = element_line(size = 0.8, color = grid_color)) + 
  theme(plot.background = element_rect(color = NA, fill = bgr_color)) + 
  theme(panel.background = element_rect(color = NA, fill = NA)) + 
  theme(axis.ticks.length.x = unit(0.2, "cm")) + 
  theme(axis.ticks.x = element_line(color = "grey50", size = 0.8)) + 
  theme(axis.text.x = element_text(family = my_font, size = 12, color = "grey40", hjust = 0.13)) + 
  theme(axis.text.y = element_text(family = my_font, size = 12, color = "grey40")) + 
  theme(plot.title = element_text(family = my_font, size = 19, color = "black")) + 
  theme(plot.subtitle = element_text(family = my_font, size = 15, color = "grey30")) + 
  theme(plot.caption = element_text(family = my_font, size = 10, color = "grey30", hjust = 0)) + 
  theme(axis.line.x = element_line(size = 0.8, color = "grey40")) + 
  annotate("text", 
           label = "Daily activities limited a alot", 
           family = my_font, 
           x = 4.2, 
           y = 0.12, 
           size = 5.5, 
           hjust = -0.5, 
           vjust = 0, 
           color = "white") + 
  annotate("text", 
           label = "Daily activities limited a little", 
           family = my_font, 
           x = 4.2, 
           y = 0.6, 
           size = 5.5, 
           hjust = -0.5, 
           vjust = 0, 
           color = "white", 
           angle = "7") + 
  annotate("text", 
           label = "Daily activities not limited", 
           family = my_font, 
           x = 4.2, 
           y = 1.25, 
           size = 5.5, 
           hjust = -0.5, 
           vjust = 0, 
           color = "grey50", 
           angle = "20")

# Make FT icon: 

library(grid)

grid.rect(x = 0, y = 1, width = 0.06, height = 0.01, just = c("left", "top"), gp = gpar(fill = "black", col = "black"))

Notes

  1. Làm chữ béo (bold) cho một số từ trong text của plot là vấn đề còn bỏ trống. Chúng ta có thể sử dụng gói ggtext để xử lí vấn đề này.
  2. Có thể tham khảo thêm một số plot của FT tại đây hoặc tại đây.
LS0tDQp0aXRsZTogJ1IgZm9yIERhdGEgVmlzdWFsaXphdGlvbjogUmVwbGljYXRpbmcgRmluYW5jaWFsIFRpbWVzIEdyYXBoIChuYWl2ZSB2ZXJzaW9uKScNCmF1dGhvcjogJ0F1dGhvcjogTmd1eWVuIENoaSBEdW5nJw0Kc3VidGl0bGU6ICJEYWlseSBHcmFwaCBTZXJpZXMiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICAjIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGhpZ2hsaWdodDogemVuYnVybg0KICAgICMgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0aGVtZTogImZsYXRseSINCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQpgYGB7ciBzZXR1cCxpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgY2FjaGUgPSBUUlVFLCBmaWcuc2hvd3RleHQgPSBUUlVFKQ0KDQpgYGANCg0KIyBNb3RpdmF0aW9ucw0KDQpQbG90IGPhu6dhIEZpbmFuY2lhbCBUaW1lcyDEkcaw4bujYyBKb2huIEJ1cm4tTXVyZG9jaCB0csOtY2ggZOG6q24gbmjGsCBzYXU6IA0KDQoNCiFbXShDOi9Vc2Vycy9BZG1pbi9Eb2N1bWVudHMvYXJlYV9wbG90X29yaWdpbmFsLmpwZykNCg0KQuG6sW5nIGPDoWNoIHPhu60gZOG7pW5nIFIgY2jDum5nIHRhIGPDsyB0aOG7gyAidMOhaSB04bqhbyIgbOG6oWkgcGxvdCBuw6B5IG5oxrAgc2F1OiANCg0KDQohW10oQzovVXNlcnMvQWRtaW4vRG9jdW1lbnRzL2FyZWEyLmpwZykNCiMgUiBDb2Rlcw0KDQpExrDhu5tpIMSRw6J5IGzDoCBSIENvZGVzIGNobyBhcmVhIHBsb3Qg4bufIHRyw6puOiANCg0KYGBge3IsIGV2YWw9RkFMU0V9DQoNCiMgTG9hZCBvcmlnaW5hbCBwbG90IGZyb206IGh0dHBzOi8vbW9iaWxlLnR3aXR0ZXIuY29tL2pidXJubXVyZG9jaC9zdGF0dXMvMTU0MTA5Nzg3OTk4NDUzNzYwMi9waG90by8xDQojIEV4dHJhY3QgY29sb3IgY29kZXMgZnJvbSBkb3dubG9hZGVkIGltYWdlIGJ5IGh0dHBzOi8vaW1hZ2Vjb2xvcnBpY2tlci5jb20vZW4NCg0KDQojIENsZWFyIFIgRW52aXJvbm1lbnQ6IA0KDQpybShsaXN0ID0gbHMoKSkNCg0KIyBDcmVhdGUgYSBkYXRhIHNldCBmb3IgcGxvdGluZzogDQoNCm15X3RpbWUgPC0gMTo3DQoNCmFfbG90IDwtIGMoMC4zLCAwLjI5LCAwLjMxLCAwLjMyLCAwLjM1LCAwLjQ1LCAwLjYpDQoNCmFfbGl0dGxlIDwtIGMoMSwgMC45NSwgMS4xLCAxLjIsIDEuMjUsIDEuNywgMi4yKQ0KDQpub3RfbGltaXRlZCA8LSBjKDEuNywgMS42LCAxLjc1LCAxLjgsIDIuMSwgMi42LCAzLjEpDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KDQpkZl93aWRlIDwtIHRpYmJsZShteV90aW1lID0gbXlfdGltZSwgYV9sb3QgPSBhX2xvdCwgYV9saXR0bGUgPSBhX2xpdHRsZSwgbm90X2xpbWl0ZWQgPSBub3RfbGltaXRlZCkNCg0KIy0tLS0tLS0tLS0tLS0tLS0NCiMgIFByZXBhcmUgZGF0YQ0KIy0tLS0tLS0tLS0tLS0tLS0NCg0KbXlfbGV2ZWxzIDwtIGMoImFfbG90IiwgImFfbGl0dGxlIiwgIm5vdF9saW1pdGVkIikNCg0KZGZfd2lkZSAlPiUgDQogIGdhdGhlcih0eXBlLCB2YWx1ZSwgLW15X3RpbWUpICU+JSANCiAgbXV0YXRlKHR5cGUgPSBmYWN0b3IodHlwZSwgbGV2ZWwgPSBteV9sZXZlbHNbMzoxXSkpIC0+IGRmX2xvbmcNCg0KbGFiZWxfb25feCA8LSBjKCJNYXlcbjIwMjEiLCAiSnVsIiwgIlNlcCIsICJOb3YiLCAiSmFuXG4yMDIyIiwgIk1hciIsICJNYXkiKQ0KDQoNCmFfbG90X2NvbG9yIDwtICIjYzk0NDU2Ig0KDQphX2xpdHRsZV9jb2xvciA8LSAiI2VhOTA3NyINCg0Kbm90X2xpbWl0ZWRfY29sb3IgPC0gIiNkZmQyYzgiDQoNCmdyaWRfY29sb3IgPC0gIiNlYWRlZDIiDQoNCnRleHRfY29sb3JfZ3JleSA8LSAiIzkwOGI4NiINCg0KYmdyX2NvbG9yIDwtICIjZmZmMWU1Ig0KDQpwX3RpdGxlIDwtICJSYXRlcyBvZiBzZWxmLXJlcG9ydGVkIGxvbmcgQ292aWQgY29udGludWUgcmlzZSBpbiB0aGUgVUssIHdpdGggMiUgb2ZcbnBvcHVsYXRpb24gbm93IHN0YXRpbmcgdGhlIGNvbmRpdGlvbiBpcyBsaW1pdGluZyB0aGVpciBkYWlseSBhY3Rpdml0aWVzIg0KDQpwX3N1YnRpdHRsZSA8LSAiRXN0aW1hdGVkIHByZXZhbGVuY2Ugb2Ygc2VsZi1yZXBvcnRlZCBsb25nIENvdmlkIGluIHRoZSBVSywgYnkgbGV2ZWwgb2YgbGltaXRhdGlvblxuKCUgb2YgdG90YWwgcG9wdWxhdGlvbikiDQoNCnBfY2FwdGlvbiA8LSAiU291cmNlOiBPTlMgQ292aWQtMTkgaW5mZWN0aW9uIHN1cnZleVxuRlQgZ3JhcGhpYzogTmd1eWVuIENoaSBEdW5nIg0KDQoNCmxpYnJhcnkoc2hvd3RleHQpICMgLT4gUGFja2FnZSBmb3IgdXNpbmcgZXh0cmEgZm9udHMuIA0KDQpteV9mb250IDwtICJSb2JvdG8gQ29uZGVuc2VkIiAjIC0+IFVzZSBSb2JvdG8gQ29uZGVuc2VkIGZvbnQgZm9yIG91ciBwbG90LiANCg0KZm9udF9hZGRfZ29vZ2xlKG5hbWUgPSBteV9mb250LCBmYW1pbHkgPSBteV9mb250KSAjIC0+IExvYWQgZm9udC4gDQoNCnNob3d0ZXh0X2F1dG8oKSAjIC0+IEF1dG9tYXRpY2FsbHkgcmVuZGVyIHRleHQ6IA0KDQpsaWJyYXJ5KGdndGV4dCkNCg0KZGZfbG9uZyAlPiUgDQogIGdncGxvdChhZXMoeCA9IG15X3RpbWUsIHkgPSB2YWx1ZSwgZmlsbCA9IHR5cGUpKSArIA0KICBnZW9tX2FyZWEocG9zaXRpb24gPSAiZG9kZ2UiLCBzaG93LmxlZ2VuZCA9IEZBTFNFLCBhbHBoYSA9IDAuOCkgKyANCiAgdGhlbWVfbWluaW1hbCgpICsgIA0KICBsYWJzKHRpdGxlID0gcF90aXRsZSwgc3VidGl0bGUgPSBwX3N1YnRpdHRsZSwgY2FwdGlvbiA9IHBfY2FwdGlvbikgKyAgIA0KICBzY2FsZV94X2NvbnRpbnVvdXMobGltaXRzID0gYygxLCA3KSwgYnJlYWtzID0gc2VxKDEsIDcsIDEpLCBleHBhbmQgPSBjKDAsIDApLCBsYWJlbHMgPSBsYWJlbF9vbl94KSArIA0KICBzY2FsZV95X2NvbnRpbnVvdXMocG9zaXRpb24gPSAicmlnaHQiLCBleHBhbmQgPSBjKDAsIDApKSArIA0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKG5vdF9saW1pdGVkX2NvbG9yLCBhX2xpdHRsZV9jb2xvciwgYV9sb3RfY29sb3IpKSArIA0KICB0aGVtZShheGlzLnRpdGxlID0gZWxlbWVudF9ibGFuaygpKSArIA0KICB0aGVtZShwbG90Lm1hcmdpbiA9IHVuaXQocmVwKDAuNywgNCksICJjbSIpKSArIA0KICB0aGVtZShwYW5lbC5ncmlkLm1pbm9yID0gZWxlbWVudF9ibGFuaygpKSArIA0KICB0aGVtZShwYW5lbC5ncmlkLm1ham9yLnggPSBlbGVtZW50X2JsYW5rKCkpICsgDQogIHRoZW1lKHBhbmVsLmdyaWQubWFqb3IueSA9IGVsZW1lbnRfbGluZShzaXplID0gMC44LCBjb2xvciA9IGdyaWRfY29sb3IpKSArIA0KICB0aGVtZShwbG90LmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSBOQSwgZmlsbCA9IGJncl9jb2xvcikpICsgDQogIHRoZW1lKHBhbmVsLmJhY2tncm91bmQgPSBlbGVtZW50X3JlY3QoY29sb3IgPSBOQSwgZmlsbCA9IE5BKSkgKyANCiAgdGhlbWUoYXhpcy50aWNrcy5sZW5ndGgueCA9IHVuaXQoMC4yLCAiY20iKSkgKyANCiAgdGhlbWUoYXhpcy50aWNrcy54ID0gZWxlbWVudF9saW5lKGNvbG9yID0gImdyZXk1MCIsIHNpemUgPSAwLjgpKSArIA0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMTIsIGNvbG9yID0gImdyZXk0MCIsIGhqdXN0ID0gMC4xMykpICsgDQogIHRoZW1lKGF4aXMudGV4dC55ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9IG15X2ZvbnQsIHNpemUgPSAxMiwgY29sb3IgPSAiZ3JleTQwIikpICsgDQogIHRoZW1lKHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gbXlfZm9udCwgc2l6ZSA9IDE5LCBjb2xvciA9ICJibGFjayIpKSArIA0KICB0aGVtZShwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KGZhbWlseSA9IG15X2ZvbnQsIHNpemUgPSAxNSwgY29sb3IgPSAiZ3JleTMwIikpICsgDQogIHRoZW1lKHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSBteV9mb250LCBzaXplID0gMTAsIGNvbG9yID0gImdyZXkzMCIsIGhqdXN0ID0gMCkpICsgDQogIHRoZW1lKGF4aXMubGluZS54ID0gZWxlbWVudF9saW5lKHNpemUgPSAwLjgsIGNvbG9yID0gImdyZXk0MCIpKSArIA0KICBhbm5vdGF0ZSgidGV4dCIsIA0KICAgICAgICAgICBsYWJlbCA9ICJEYWlseSBhY3Rpdml0aWVzIGxpbWl0ZWQgYSBhbG90IiwgDQogICAgICAgICAgIGZhbWlseSA9IG15X2ZvbnQsIA0KICAgICAgICAgICB4ID0gNC4yLCANCiAgICAgICAgICAgeSA9IDAuMTIsIA0KICAgICAgICAgICBzaXplID0gNS41LCANCiAgICAgICAgICAgaGp1c3QgPSAtMC41LCANCiAgICAgICAgICAgdmp1c3QgPSAwLCANCiAgICAgICAgICAgY29sb3IgPSAid2hpdGUiKSArIA0KICBhbm5vdGF0ZSgidGV4dCIsIA0KICAgICAgICAgICBsYWJlbCA9ICJEYWlseSBhY3Rpdml0aWVzIGxpbWl0ZWQgYSBsaXR0bGUiLCANCiAgICAgICAgICAgZmFtaWx5ID0gbXlfZm9udCwgDQogICAgICAgICAgIHggPSA0LjIsIA0KICAgICAgICAgICB5ID0gMC42LCANCiAgICAgICAgICAgc2l6ZSA9IDUuNSwgDQogICAgICAgICAgIGhqdXN0ID0gLTAuNSwgDQogICAgICAgICAgIHZqdXN0ID0gMCwgDQogICAgICAgICAgIGNvbG9yID0gIndoaXRlIiwgDQogICAgICAgICAgIGFuZ2xlID0gIjciKSArIA0KICBhbm5vdGF0ZSgidGV4dCIsIA0KICAgICAgICAgICBsYWJlbCA9ICJEYWlseSBhY3Rpdml0aWVzIG5vdCBsaW1pdGVkIiwgDQogICAgICAgICAgIGZhbWlseSA9IG15X2ZvbnQsIA0KICAgICAgICAgICB4ID0gNC4yLCANCiAgICAgICAgICAgeSA9IDEuMjUsIA0KICAgICAgICAgICBzaXplID0gNS41LCANCiAgICAgICAgICAgaGp1c3QgPSAtMC41LCANCiAgICAgICAgICAgdmp1c3QgPSAwLCANCiAgICAgICAgICAgY29sb3IgPSAiZ3JleTUwIiwgDQogICAgICAgICAgIGFuZ2xlID0gIjIwIikNCg0KIyBNYWtlIEZUIGljb246IA0KDQpsaWJyYXJ5KGdyaWQpDQoNCmdyaWQucmVjdCh4ID0gMCwgeSA9IDEsIHdpZHRoID0gMC4wNiwgaGVpZ2h0ID0gMC4wMSwganVzdCA9IGMoImxlZnQiLCAidG9wIiksIGdwID0gZ3BhcihmaWxsID0gImJsYWNrIiwgY29sID0gImJsYWNrIikpDQpgYGANCg0KIyBOb3Rlcw0KDQoxLiBMw6BtIGNo4buvIGLDqW8gKGJvbGQpIGNobyBt4buZdCBz4buRIHThu6sgdHJvbmcgdGV4dCBj4bunYSBwbG90IGzDoCB24bqlbiDEkeG7gSBjw7JuIGLhu48gdHLhu5FuZy4gQ2jDum5nIHRhIGPDsyB0aOG7gyBz4butIGThu6VuZyBnw7NpIGdndGV4dCDEkeG7gyB44butIGzDrSB24bqlbiDEkeG7gSBuw6B5LiANCjIuIEPDsyB0aOG7gyB0aGFtIGto4bqjbyB0aMOqbSBt4buZdCBz4buRIHBsb3QgY+G7p2EgRlQgW3ThuqFpIMSRw6J5XShodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVJlcGxpY2F0aW5nK0ZpbmFuY2lhbCtUaW1lcytHcmFwaCZybHo9MUMxQ0hCRl9lblZOODcwVk44NzAmdGJtPWlzY2gmc291cmNlPWl1JmljdHg9MSZ2ZXQ9MSZmaXI9SDZFVEhfeHROb0RIVU0lMjUyQ3lnSXRzYWlESUpadXBNJTI1MkNfJTI1M0J0aGF0WlVTVVA2cGhUTSUyNTJDa1EtbXgyVEJrVHJETU0lMjUyQ18lMjUzQlI5QXpTUVp0Mk1Lck5NJTI1MkNpa2h0S1JWanBQWlg5TSUyNTJDXyUyNTNCQnhVY3dLbk1sMllrZk0lMjUyQ19mdmJ0QVRCdnFxZEpNJTI1MkNfJTI1M0JfNXBVXzlmX2IxMFN4TSUyNTJDeVVIbjVQbThhYU9fdU0lMjUyQ18lMjUzQmNScjJvZjk5d1NtNDdNJTI1MkNZbGxGcDlDd2czUjFPTSUyNTJDXyUyNTNCbi1kU3hQY3FxektRT00lMjUyQ19mdmJ0QVRCdnFxZEpNJTI1MkNfJTI1M0JsMmhmZTI5RFRMbnE2TSUyNTJDRXA0dG0wSmRRSmc4d00lMjUyQ18lMjUzQkRoOVpJUXdtRDFkVlRNJTI1MkNfZnZidEFUQnZxcWRKTSUyNTJDXyUyNTNCb3JSaGVSTE9OX1BuOE0lMjUyQ2tNVDNVOUN6MWhkZ01NJTI1MkNfJnVzZz1BSTRfLWtUeDJMaU5SbkNHMTM2OE1NX0pmTFBHU0hKWEVnJnNhPVgmdmVkPTJhaFVLRXdqeXJxZnl4ZVA0QWhXSXFGWUJIWVhoQ0hJUTlRRjZCQWdHRUFFKSBob+G6t2MgW3ThuqFpIMSRw6J5XShodHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVJlcGxpY2F0aW5nK0ZpbmFuY2lhbCtUaW1lcytHcmFwaCZybHo9MUMxQ0hCRl9lblZOODcwVk44NzAmdGJtPWlzY2gmc291cmNlPWl1JmljdHg9MSZ2ZXQ9MSZmaXI9SDZFVEhfeHROb0RIVU0lMjUyQ3lnSXRzYWlESUpadXBNJTI1MkNfJTI1M0J0aGF0WlVTVVA2cGhUTSUyNTJDa1EtbXgyVEJrVHJETU0lMjUyQ18lMjUzQlI5QXpTUVp0Mk1Lck5NJTI1MkNpa2h0S1JWanBQWlg5TSUyNTJDXyUyNTNCQnhVY3dLbk1sMllrZk0lMjUyQ19mdmJ0QVRCdnFxZEpNJTI1MkNfJTI1M0JfNXBVXzlmX2IxMFN4TSUyNTJDeVVIbjVQbThhYU9fdU0lMjUyQ18lMjUzQmNScjJvZjk5d1NtNDdNJTI1MkNZbGxGcDlDd2czUjFPTSUyNTJDXyUyNTNCbi1kU3hQY3FxektRT00lMjUyQ19mdmJ0QVRCdnFxZEpNJTI1MkNfJTI1M0JsMmhmZTI5RFRMbnE2TSUyNTJDRXA0dG0wSmRRSmc4d00lMjUyQ18lMjUzQkRoOVpJUXdtRDFkVlRNJTI1MkNfZnZidEFUQnZxcWRKTSUyNTJDXyUyNTNCb3JSaGVSTE9OX1BuOE0lMjUyQ2tNVDNVOUN6MWhkZ01NJTI1MkNfJnVzZz1BSTRfLWtUeDJMaU5SbkNHMTM2OE1NX0pmTFBHU0hKWEVnJnNhPVgmdmVkPTJhaFVLRXdqeXJxZnl4ZVA0QWhXSXFGWUJIWVhoQ0hJUTlRRjZCQWdVRUFFI2ltZ3JjPXRoYXRaVVNVUDZwaFRNJmltZ2RpaT1IbWZEUUFLTlJHR2F5TQ0KIyBodHRwczovL3R3aXR0ZXIuY29tL2pidXJubXVyZG9jaC9zdGF0dXMvMTU0MTA5Nzg3OTk4NDUzNzYwMikuIA0KDQo=