NHIỆM VỤ 2.1


1. Đọc dữ liệu từ file xlsx

Để thực hiện chức năng đọc dữ liệu từ file xlsx của R, ta thực hiện theo các bước sau:

Bước 1: Tải package xlsx và gọi dữ liệu file lên R với câu lệnh:

Bước 2: Đọc dữ liệu file xlsx với câu lệnh read.xlsx()

library('xlsx') #gọi package 'xlsx'
d <- read.xlsx(file = 'C:/Users/Admin/Downloads/Grunfeld.xls', sheetIndex = 1, header = T)

Trong đó:

  • read.xlsx(): đọc dữ liệu

  • file = ’ ’ : nguồn dữ liệu

  • sheetIndex: số trang sheet muốn lấy

  • header = T: dòng đầu tiên là tiêu đề chứ không phải dữ liệu

2. Sử dụng 1 bộ dữ liệu ‘cars’ có sẵn trong gói package ‘datasets’

Datasets là một gói package bao gồm nhiều bộ dữ liệu mà ta có thể sử dụng sẵn trong R, để sử dụng ta thực hiện theo các bước sau:

Bước 1: Tải gói package datasets với câu lệnh:

library('datasets') #gọi package datasets sau khi đã tải xong
data(package = 'datasets') #xem trong gói package datasets có những bộ dữ liệu nào

Bước 2: Tải 1 bộ dữ liệu cars trong gói package Datasets

a <- cars #gán bộ dữ liệu 'cars' vào a 

Bước 3: Sử dụng bộ dữ liệu cars:

is.data.frame(a) #kiểm tra xem a có phải là 1 data frame hay không, nếu ra True thì phải, False thì không phải
## [1] TRUE
length(a) #kiểm tra chiều dài của dữ liệu
## [1] 2
names(a) #tên biến của dữ liệu, "speed" và "dist"
## [1] "speed" "dist"
dim(a) #kiểm tra dữ liệu có bao nhiêu dòng và bao nhiêu cột, ở đây a có 50 dòng và 2 cột
## [1] 50  2
library(skimr) #gọi package skimr
skim(a) #mô tả chi tiết dữ liệu như: mean là trung bình, sd là độ lệch chuẩn,...
Data summary
Name a
Number of rows 50
Number of columns 2
_______________________
Column type frequency:
numeric 2
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
speed 0 1 15.40 5.29 4 12 15 19 25 ▂▅▇▇▃
dist 0 1 42.98 25.77 2 26 36 56 120 ▅▇▅▂▁
head(a,10) #đầu, hiện 10 dòng đầu tiên của dữ liệu
##    speed dist
## 1      4    2
## 2      4   10
## 3      7    4
## 4      7   22
## 5      8   16
## 6      9   10
## 7     10   18
## 8     10   26
## 9     10   34
## 10    11   17
tail(a,10) #đuôi, hiện 10 dòng cuối của dữ liệu 
##    speed dist
## 41    20   52
## 42    20   56
## 43    20   64
## 44    22   66
## 45    23   54
## 46    24   70
## 47    24   92
## 48    24   93
## 49    24  120
## 50    25   85
str(a) #cung cấp thông tin dữ liệu
## 'data.frame':    50 obs. of  2 variables:
##  $ speed: num  4 4 7 7 8 9 10 10 10 11 ...
##  $ dist : num  2 10 4 22 16 10 18 26 34 17 ...

3. Rút trích dữ liệu từ bộ dữ liệu ‘cars’

Trong một số trường hợp, chúng ta thu về là một dữ liệu lớn tuy nhiên ta lại không sử dụng hết. Để thuận tiện R hỗ trợ chức năng rút trích dữ liệu, ta thực hiện theo các bước sau:

Bước 1: Đổi tên cho các biến để thuận tiện cho việc thao tác dữ liệu:

names(a) <- c('S', 'D')

Sau bước này, thay vì phải gọi dữ liệu là ‘Speed’ và ‘Dist’ thì chũng ta chỉ cần gọi là ‘S’ và ‘D’

Bước 2: Thực hiện thao tác rút trích dữ liệu:

b <- a[7,2] #b bao gồm hàng 7 cột 2 của a
S <- a$S #S bao gồm nguyên dữ liệu cột S
c <- a[ ,1] #c cũng bao gồm nguyên dữ liệu cột S, c và S giống nhau
e <- a[3:7, ] #e bao gồm dữ liệu từ dòng 3,7 của a
f <- a[c(2,4,6,8),c(1,2)] #f bao gồm dữ liệu dòng 2,4,6,8 và cột 1,2 của a
g <- a[a$D >=35 & a$D <=70, ] #g bao gồm các dữ liệu vừa bé hơn hoặc bằng 35 vừa nhỏ hơn hoặc bằng 70 của a
h <-a[a$D == 35 | a$D == 80, ] #h bao gồm các dự liệu bằng 35 hoặc bằng 80 của a
i <- a[S != 15, ] #i bao gồm dữ liệu S nhưng bỏ tất cả giá trị bằng 15

4. Một số package quan trọng khác của R

Ngoài datasets trong R còn nhiều gói package quan trọng khác như tidyverse hay ggplot2. Chúng ta hoàn toàn có thể áp dụng những lệnh ở mục 3 với những package đó.

Tuy nhiên, đối với packgae tidyverse, package này có 1 chức năng vô cùng thú vị mà các package khác không có đó là %>% (pipe). Để sử dụng chức năng này, ta thực hiện như sau:

Ví dụ:

library(tidyverse) #gọi package 'tidyverse'
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ ggplot2   3.4.4     ✔ tibble    3.2.1
## ✔ lubridate 1.9.3     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
m <- a %>% filter(S>15) #dữ liệu m bao gồm có a làm dữ liệu đầu vào, lọc sao cho dữ liệu S>15

Chú thích: * %>% (pipe) mang nghĩa “kế đến là”.

Ở đây, chúng ta có thể hiểu ý nghĩa của ví dụ trên là: Với m, chúng ta lấy a làm dữ liệu đầu vào, kế đến dùng lệnh filter để lọc những giá trị S lớn hơn 15.

5. Giới thiệu về World Bank

Bên cạnh gói package được đề cập bên trên như datasets, ggplot2 hay tidyverse, chúng ta còn có thể lấy và sử dụng dữ liệu từ World Bank.

World Bank lưu trữ rất nhiều thông tin kinh tế vĩ mô của nhiều nước trên thế giới và hoàn toàn cho phép người dùng truy cập và sử dụng dữ liệu.

NHIỆM VỤ 2.2

Phân tích một số đặc trưng của Board Game


1. Giới thiệu

1.1. Board game là gì?

Thuật ngữ board game được dùng để chỉ các loại trò chơi cờ bàn bao gồm 2 hay nhiều người chơi tương tác với nhau thông qua một bàn cờ và tuân theo một quy luật nhất định. Một số trò còn sử dụng các vật dụng hỗ trợ như lá bài, xí ngầu, quân cờ…

Người chơi cần phải phán đoán, tư duy, phân tích tình huống và cả sự may mắn của mình để chiến thắng. Thời gian cho lần chơi tùy thuộc vào từng trò, có những trò chơi rất nhanh nhưng cũng có những trò phải mất từ 1 đến 2 tiếng mới kết thúc.

Một số trò board game nổi tiếng mà chúng ta có thể đã nghe qua như: Cờ vua, cờ cá ngựa, ma sói, rút gỗ, bài unô, lô tô, trò ca rô, ma sói, mèo nổ, …

1.2. Bộ dữ liệu board game

game <- read.csv(file = 'C:/Users/Admin/Downloads/board_game_data.csv', header = T) #đọc dữ liệu board game

Bộ dữ liệu board game bao gồm 2212 quan sát và 10 biến, được lấy từ Kaggle - một nơi uy tín cung cấp lượng lớn thông tin về đa dạng các lĩnh vực và ngành nghề.

Nghiên cứu bộ dữ liệu board game bằng công cụ R giúp cho những nhà sáng tạo hay các nhà kinh doanh về mảng trò chơi có một cái nhìn cụ thể và tốt hơn về một số yếu tố, từ đó, họ có thể tự điều chỉnh và thu hút thêm tệp khách hàng như:

  • Game id của trò (game_id)

  • Tên trò chơi (names)

  • Số lượng người tham gia tối thiểu (min_player)

  • Số lượng người tham gia tối đa (max_player)

  • Thời gian trung bình khi chơi một trò, tính theo phút (avg_time)

  • Thời gian tối thiểu khi chơi một trò, tính theo phút (min_time)

  • Thời gian tối đa khi chơi một trò, tính theo phút (max_time)

  • Số lượt đánh giá (avg_rating)

  • Độ tuổi người chơi (age)

  • Nhà sáng lập trò chơi (designer)

2. Phân tích số người chơi

names(game) <- c('ID', 'N', 'minp', 'maxp', 'AT', 'mint', 'maxt', 'AR', 'A', 'D') 
#Đổi tên các biến để tiện lợi trong việc thực hiện thác tác trên dữ liệu

game1 <- game[game$minp ==1 & game$maxp <=2, ] 
#game1 bao gồm dữ liệu đầu vào là game, số người chơi tối thiểu là 1, số người chơi tối đa là 2, ứng với nhóm khách hàng lẻ/cặp đôi

game2 <- game[game$minp >= 2 & game$maxp >= 3, ] 
#game2 cũng bao gồm dữ liệu đầu vào là game, số người chơi tối thiểu lớn hơn hoặc bằng 2, số người chơi tối đa lớn hơn hoặc bằng 3, ứng với nhóm khách hàng đội/nhóm

Qua việc phân tích 2212 trường hợp quan sát, ta nhận thấy tỷ lệ xuất hiện của trò chơi dành cho nhóm khách hàng lẻ/cặp đôi chiếm một tỷ trọng thấp hơn (khoảng 2,667%, tương đương với 59/2212) so với trò chơi dành cho nhóm khách hàng là đội/nhóm (khoảng 69,168%, tương đương với 1530/2212). Kết quả này làm nổi bật sự ít được chú ý của nhóm khách hàng lẻ/cặp đôi so với nhóm khách hàng là đội/nhóm.

Dựa trên phân tích này, ta có thể đề xuất rằng các nhà sáng tạo và doanh nghiệp trong lĩnh vực trò chơi có thể khai thác thêm cơ hội bằng cách sáng tạo và phát triển các trò chơi đặc biệt dành cho nhóm khách hàng lẻ/cặp đôi. Đồng thời, liên tục nỗ lực cải thiện trò chơi, nhằm tạo ra trải nghiệm thú vị và giữ chân người chơi thuộc nhóm khách hàng là đội/nhóm.

=> Điều này không chỉ giúp tăng cường sự chú ý đối với đối tượng này mà còn có thể mang lại nguồn lợi nhuận bổ sung cho họ.

Một số trò chơi dành cho nhóm khách hàng lẻ/cặp đôi mà ta có thể phát triển thêm là:

  • Arkham Horror: The Card Game

  • Nate French, Matthew Newman

  • Fields of Arle

  • Uwe Rosenberg

  • The Lord of the Rings: The Card Game

3. Phân tích thời gian chơi một trò

game3 <- game[game$mint >= 5 & game$maxt <= 180, ]
#game3 bao gồm dữ liệu đầu vào là game, số thời gian chơi tối thiểu là lớn hơn bằng 5, số thời gian chơi tối đa là bé hơn bằng 180, ứng với bộ trò chơi mất ít thời gian để chơi

game4 <- game[game$mint >= 180 & game$maxt <= 6000, ]
#game4 bao gồm dữ liệu đầu vào là game, số thời gian chơi tối thiểu là lớn hơn bằng 180, số thời gian chơi tối đa là bé hơn bằng 6000, ứng với bộ trò chơi mất nhiều thời gian để chơi

Kết quả nghiên cứu cho thấy rằng đối với các trò chơi có thời gian chơi ngắn, chúng có tỷ lệ rất cao (2039/2212 xấp xỉ 92,179%), hầu hết các bộ trò chơi đều được chơi trong khoảng thời gian từ 1 đến 3 tiếng. Ngược lại, trò chơi đòi hỏi thời gian chơi lâu hơn có tỷ lệ sử dụng thấp hơn (177/2212 xấp xỉ 8,001%).

Nhìn chung, nghiên cứu cho thấy rằng ưu điểm chính và điểm độc đáo trong lĩnh vực trò chơi nằm ở không những sản phẩm thú vị mà còn mất ít thời gian để chơi, tiết kiệm thời gian. Điều này đặt ra một cơ hội rõ ràng cho các nhà sáng tạo và doanh nghiệp trò chơi để tập trung và phát triển những trò chơi có đặc điểm này, nhằm tối ưu hóa sự hấp dẫn và tiện lợi cho người chơi.

4. Tổng kết

Thông qua nghiên cứu trên, ta có thể rút ra kết luận rằng, nhà sáng tạo và nhà kinh doanh trong lĩnh vực trò chơi nên:

  • Quan tâm đến nhóm khách hàng lẻ/cặp đôi bằng cách sáng tạo thêm những bộ trò chơi cho nhóm khách hàng này.

  • Giữ chân nhóm khách hàng đội/nhóm bằng cách không ngừng cải tiến, cải thiện trò chơi.

  • Tập trung vào những bộ trò chơi mất ít thời gian để chơi.

  • Thông điệp, quy luật trong trò chơi cần được thiết kế một cách lành mạnh vì khách hàng là các em học sinh dưới 19 tuổi.

check <- is.na(game) #kiểm tra tính hoàn chỉnh của dữ liệu 'board game'
LS0tDQp0aXRsZTogIk5oaeG7h20gduG7pSAyIg0KYXV0aG9yOiAiTmd1eeG7hW4gUGjhuqFtIFRow7p5IEFuIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDogDQogICAgdG9jOiB0cnVlIA0KICAgIG51bWJlciBzZWN0aW9uOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUg6JU06JVMsICVkIC0gJW0gLSAlWScpYCINCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KDQojICoqTkhJ4buGTSBW4bukIDIuMSoqDQoqKioNCg0KIyMgKioxLiDEkOG7jWMgZOG7ryBsaeG7h3UgdOG7qyBmaWxlIHhsc3gqKg0KDQrEkOG7gyB0aOG7sWMgaGnhu4duIGNo4bupYyBuxINuZyDEkeG7jWMgZOG7ryBsaeG7h3UgdOG7qyBmaWxlIHhsc3ggY+G7p2EgUiwgdGEgdGjhu7FjIGhp4buHbiB0aGVvIGPDoWMgYsaw4bubYyBzYXU6DQoNCioqQsaw4bubYyAxOioqIFThuqNpIHBhY2thZ2UgeGxzeCB2w6AgZ+G7jWkgZOG7ryBsaeG7h3UgZmlsZSBsw6puIFIgduG7m2kgY8OidSBs4buHbmg6DQoNCioqQsaw4bubYyAyOioqIMSQ4buNYyBk4buvIGxp4buHdSBmaWxlIHhsc3ggduG7m2kgY8OidSBs4buHbmggKipyZWFkLnhsc3goKSoqDQoNCmBgYHtyfQ0KbGlicmFyeSgneGxzeCcpICNn4buNaSBwYWNrYWdlICd4bHN4Jw0KZCA8LSByZWFkLnhsc3goZmlsZSA9ICdDOi9Vc2Vycy9BZG1pbi9Eb3dubG9hZHMvR3J1bmZlbGQueGxzJywgc2hlZXRJbmRleCA9IDEsIGhlYWRlciA9IFQpDQpgYGANCg0KVHJvbmcgxJHDszoNCg0KKiByZWFkLnhsc3goKTogxJHhu41jIGThu68gbGnhu4d1DQoNCiogZmlsZSA9ICcgJyA6IG5ndeG7k24gZOG7ryBsaeG7h3UNCg0KKiBzaGVldEluZGV4OiBz4buRIHRyYW5nIHNoZWV0IG114buRbiBs4bqleQ0KDQoqIGhlYWRlciA9IFQ6IGTDsm5nIMSR4bqndSB0acOqbiBsw6AgdGnDqnUgxJHhu4EgY2jhu6kga2jDtG5nIHBo4bqjaSBk4buvIGxp4buHdQ0KDQojIyAqKjIuIFPhu60gZOG7pW5nIDEgYuG7mSBk4buvIGxp4buHdSAnY2FycycgY8OzIHPhurVuIHRyb25nIGfDs2kgcGFja2FnZSAnZGF0YXNldHMnKioNCg0KKipEYXRhc2V0cyoqIGzDoCBt4buZdCBnw7NpIHBhY2thZ2UgYmFvIGfhu5NtIG5oaeG7gXUgYuG7mSBk4buvIGxp4buHdSBtw6AgdGEgY8OzIHRo4buDIHPhu60gZOG7pW5nIHPhurVuIHRyb25nIFIsIMSR4buDIHPhu60gZOG7pW5nIHRhIHRo4buxYyBoaeG7h24gdGhlbyBjw6FjIGLGsOG7m2Mgc2F1Og0KDQoqKkLGsOG7m2MgMToqKiBU4bqjaSBnw7NpIHBhY2thZ2UgKipkYXRhc2V0cyoqIHbhu5tpIGPDonUgbOG7h25oOg0KDQpgYGB7cn0NCmxpYnJhcnkoJ2RhdGFzZXRzJykgI2fhu41pIHBhY2thZ2UgZGF0YXNldHMgc2F1IGtoaSDEkcOjIHThuqNpIHhvbmcNCmRhdGEocGFja2FnZSA9ICdkYXRhc2V0cycpICN4ZW0gdHJvbmcgZ8OzaSBwYWNrYWdlIGRhdGFzZXRzIGPDsyBuaOG7r25nIGLhu5kgZOG7ryBsaeG7h3UgbsOgbw0KYGBgDQoNCioqQsaw4bubYyAyOioqIFThuqNpIDEgYuG7mSBk4buvIGxp4buHdSAqKmNhcnMqKiB0cm9uZyBnw7NpIHBhY2thZ2UgKipEYXRhc2V0cyoqDQoNCmBgYHtyfQ0KYSA8LSBjYXJzICNnw6FuIGLhu5kgZOG7ryBsaeG7h3UgJ2NhcnMnIHbDoG8gYSANCmBgYA0KDQoqKkLGsOG7m2MgMzoqKiBT4butIGThu6VuZyBi4buZIGThu68gbGnhu4d1ICoqY2FycyoqOg0KYGBge3J9DQppcy5kYXRhLmZyYW1lKGEpICNraeG7g20gdHJhIHhlbSBhIGPDsyBwaOG6o2kgbMOgIDEgZGF0YSBmcmFtZSBoYXkga2jDtG5nLCBu4bq/dSByYSBUcnVlIHRow6wgcGjhuqNpLCBGYWxzZSB0aMOsIGtow7RuZyBwaOG6o2kNCmxlbmd0aChhKSAja2nhu4NtIHRyYSBjaGnhu4F1IGTDoGkgY+G7p2EgZOG7ryBsaeG7h3UNCm5hbWVzKGEpICN0w6puIGJp4bq/biBj4bunYSBk4buvIGxp4buHdSwgInNwZWVkIiB2w6AgImRpc3QiDQpkaW0oYSkgI2tp4buDbSB0cmEgZOG7ryBsaeG7h3UgY8OzIGJhbyBuaGnDqnUgZMOybmcgdsOgIGJhbyBuaGnDqnUgY+G7mXQsIOG7nyDEkcOieSBhIGPDsyA1MCBkw7JuZyB2w6AgMiBj4buZdA0KDQpsaWJyYXJ5KHNraW1yKSAjZ+G7jWkgcGFja2FnZSBza2ltcg0Kc2tpbShhKSAjbcO0IHThuqMgY2hpIHRp4bq/dCBk4buvIGxp4buHdSBuaMawOiBtZWFuIGzDoCB0cnVuZyBiw6xuaCwgc2QgbMOgIMSR4buZIGzhu4djaCBjaHXhuqluLC4uLg0KDQpoZWFkKGEsMTApICPEkeG6p3UsIGhp4buHbiAxMCBkw7JuZyDEkeG6p3UgdGnDqm4gY+G7p2EgZOG7ryBsaeG7h3UNCnRhaWwoYSwxMCkgI8SRdcO0aSwgaGnhu4duIDEwIGTDsm5nIGN14buRaSBj4bunYSBk4buvIGxp4buHdSANCnN0cihhKSAjY3VuZyBj4bqlcCB0aMO0bmcgdGluIGThu68gbGnhu4d1DQpgYGANCg0KIyMgKiozLiBSw7p0IHRyw61jaCBk4buvIGxp4buHdSB04burIGLhu5kgZOG7ryBsaeG7h3UgJ2NhcnMnKioNCg0KVHJvbmcgbeG7mXQgc+G7kSB0csaw4budbmcgaOG7o3AsIGNow7puZyB0YSB0aHUgduG7gSBsw6AgbeG7mXQgZOG7ryBsaeG7h3UgbOG7m24gdHV5IG5oacOqbiB0YSBs4bqhaSBraMO0bmcgc+G7rSBk4bulbmcgaOG6v3QuIMSQ4buDIHRodeG6rW4gdGnhu4duIFIgaOG7lyB0cuG7oyBjaOG7qWMgbsSDbmcgcsO6dCB0csOtY2ggZOG7ryBsaeG7h3UsIHRhIHRo4buxYyBoaeG7h24gdGhlbyBjw6FjIGLGsOG7m2Mgc2F1Og0KDQoqKkLGsOG7m2MgMToqKiDEkOG7lWkgdMOqbiBjaG8gY8OhYyBiaeG6v24gxJHhu4MgdGh14bqtbiB0aeG7h24gY2hvIHZp4buHYyB0aGFvIHTDoWMgZOG7ryBsaeG7h3U6DQpgYGB7cn0NCm5hbWVzKGEpIDwtIGMoJ1MnLCAnRCcpDQpgYGANCg0KU2F1IGLGsOG7m2MgbsOgeSwgdGhheSB2w6wgcGjhuqNpIGfhu41pIGThu68gbGnhu4d1IGzDoCAnU3BlZWQnIHbDoCAnRGlzdCcgdGjDrCBjaMWpbmcgdGEgY2jhu4kgY+G6p24gZ+G7jWkgbMOgICdTJyB2w6AgJ0QnDQoNCioqQsaw4bubYyAyOioqIFRo4buxYyBoaeG7h24gdGhhbyB0w6FjIHLDunQgdHLDrWNoIGThu68gbGnhu4d1Og0KYGBge3J9DQpiIDwtIGFbNywyXSAjYiBiYW8gZ+G7k20gaMOgbmcgNyBj4buZdCAyIGPhu6dhIGENClMgPC0gYSRTICNTIGJhbyBn4buTbSBuZ3V5w6puIGThu68gbGnhu4d1IGPhu5l0IFMNCmMgPC0gYVsgLDFdICNjIGPFqW5nIGJhbyBn4buTbSBuZ3V5w6puIGThu68gbGnhu4d1IGPhu5l0IFMsIGMgdsOgIFMgZ2nhu5FuZyBuaGF1DQplIDwtIGFbMzo3LCBdICNlIGJhbyBn4buTbSBk4buvIGxp4buHdSB04burIGTDsm5nIDMsNyBj4bunYSBhDQpmIDwtIGFbYygyLDQsNiw4KSxjKDEsMildICNmIGJhbyBn4buTbSBk4buvIGxp4buHdSBkw7JuZyAyLDQsNiw4IHbDoCBj4buZdCAxLDIgY+G7p2EgYQ0KZyA8LSBhW2EkRCA+PTM1ICYgYSREIDw9NzAsIF0gI2cgYmFvIGfhu5NtIGPDoWMgZOG7ryBsaeG7h3UgduG7q2EgYsOpIGjGoW4gaG/hurdjIGLhurFuZyAzNSB24burYSBuaOG7jyBoxqFuIGhv4bq3YyBi4bqxbmcgNzAgY+G7p2EgYQ0KaCA8LWFbYSREID09IDM1IHwgYSREID09IDgwLCBdICNoIGJhbyBn4buTbSBjw6FjIGThu7EgbGnhu4d1IGLhurFuZyAzNSBob+G6t2MgYuG6sW5nIDgwIGPhu6dhIGENCmkgPC0gYVtTICE9IDE1LCBdICNpIGJhbyBn4buTbSBk4buvIGxp4buHdSBTIG5oxrBuZyBi4buPIHThuqV0IGPhuqMgZ2nDoSB0cuG7iyBi4bqxbmcgMTUNCmBgYA0KDQojIyAqKjQuIE3hu5l0IHPhu5EgcGFja2FnZSBxdWFuIHRy4buNbmcga2jDoWMgY+G7p2EgUioqDQpOZ2/DoGkgKipkYXRhc2V0cyoqIHRyb25nIFIgY8OybiBuaGnhu4F1IGfDs2kgcGFja2FnZSBxdWFuIHRy4buNbmcga2jDoWMgbmjGsCAqKnRpZHl2ZXJzZSoqIGhheSAqKmdncGxvdDIqKi4gQ2jDum5nIHRhIGhvw6BuIHRvw6BuIGPDsyB0aOG7gyDDoXAgZOG7pW5nIG5o4buvbmcgbOG7h25oIOG7nyBt4bulYyAzIHbhu5tpIG5o4buvbmcgcGFja2FnZSDEkcOzLg0KDQpUdXkgbmhpw6puLCDEkeG7kWkgduG7m2kgcGFja2dhZSAqKnRpZHl2ZXJzZSoqLCBwYWNrYWdlIG7DoHkgY8OzIDEgY2jhu6ljIG7Eg25nIHbDtCBjw7luZyB0aMO6IHbhu4sgbcOgIGPDoWMgcGFja2FnZSBraMOhYyBraMO0bmcgY8OzIMSRw7MgbMOgICoqJT4lIChwaXBlKSoqLiDEkOG7gyBz4butIGThu6VuZyBjaOG7qWMgbsSDbmcgbsOgeSwgdGEgdGjhu7FjIGhp4buHbiBuaMawIHNhdToNCg0KX1bDrSBk4bulOl8NCmBgYHtyfQ0KbGlicmFyeSh0aWR5dmVyc2UpICNn4buNaSBwYWNrYWdlICd0aWR5dmVyc2UnDQptIDwtIGEgJT4lIGZpbHRlcihTPjE1KSAjZOG7ryBsaeG7h3UgbSBiYW8gZ+G7k20gY8OzIGEgbMOgbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbywgbOG7jWMgc2FvIGNobyBk4buvIGxp4buHdSBTPjE1DQpgYGANCg0KKipDaMO6IHRow61jaDoqKg0KKiAlPiUgKHBpcGUpIG1hbmcgbmdoxKlhICJr4bq/IMSR4bq/biBsw6AiLiANCg0K4bueIMSRw6J5LCBjaMO6bmcgdGEgY8OzIHRo4buDIGhp4buDdSDDvSBuZ2jEqWEgY+G7p2EgdsOtIGThu6UgdHLDqm4gbMOgOiBW4bubaSBtLCBjaMO6bmcgdGEgbOG6pXkgYSBsw6BtIGThu68gbGnhu4d1IMSR4bqndSB2w6BvLCBr4bq/IMSR4bq/biBkw7luZyBs4buHbmggZmlsdGVyIMSR4buDIGzhu41jIG5o4buvbmcgZ2nDoSB0cuG7iyBTIGzhu5tuIGjGoW4gMTUuDQoNCiMjICoqNS4gR2nhu5tpIHRoaeG7h3UgduG7gSBXb3JsZCBCYW5rKioNCkLDqm4gY+G6oW5oIGfDs2kgcGFja2FnZSDEkcaw4bujYyDEkeG7gSBj4bqtcCBiw6puIHRyw6puIG5oxrAgKipkYXRhc2V0cyoqLCAqKmdncGxvdDIqKiBoYXkgKip0aWR5dmVyc2UqKiwgY2jDum5nIHRhIGPDsm4gY8OzIHRo4buDIGzhuqV5IHbDoCBz4butIGThu6VuZyBk4buvIGxp4buHdSB04burICoqV29ybGQgQmFuayoqLiANCg0KKipXb3JsZCBCYW5rKiogbMawdSB0cuG7ryBy4bqldCBuaGnhu4F1IHRow7RuZyB0aW4ga2luaCB04bq/IHbEqSBtw7QgY+G7p2Egbmhp4buBdSBuxrDhu5tjIHRyw6puIHRo4bq/IGdp4bubaSB2w6AgaG/DoG4gdG/DoG4gY2hvIHBow6lwIG5nxrDhu51pIGTDuW5nIHRydXkgY+G6rXAgdsOgIHPhu60gZOG7pW5nIGThu68gbGnhu4d1Lg0KDQojICoqTkhJ4buGTSBW4bukIDIuMioqDQoNCiMgKipQaMOibiB0w61jaCBt4buZdCBz4buRIMSR4bq3YyB0csawbmcgY+G7p2EgQm9hcmQgR2FtZSoqDQoqKioNCg0KIyMgKioxLiBHaeG7m2kgdGhp4buHdSoqDQojIyMgKioxLjEuIEJvYXJkIGdhbWUgbMOgIGfDrD8qKg0KDQpUaHXhuq10IG5n4buvIF9ib2FyZCBnYW1lXyDEkcaw4bujYyBkw7luZyDEkeG7gyBjaOG7iSBjw6FjIGxv4bqhaSB0csOyIGNoxqFpIGPhu50gYsOgbiBiYW8gZ+G7k20gMiBoYXkgbmhp4buBdSBuZ8aw4budaSBjaMahaSB0xrDGoW5nIHTDoWMgduG7m2kgbmhhdSB0aMO0bmcgcXVhIG3hu5l0IGLDoG4gY+G7nSB2w6AgdHXDom4gdGhlbyBt4buZdCBxdXkgbHXhuq10IG5o4bqldCDEkeG7i25oLiBN4buZdCBz4buRIHRyw7IgY8OybiBz4butIGThu6VuZyBjw6FjIHbhuq10IGThu6VuZyBo4buXIHRy4bujIG5oxrAgbMOhIGLDoGksIHjDrSBuZ+G6p3UsIHF1w6JuIGPhu50uLi4gDQoNCk5nxrDhu51pIGNoxqFpIGPhuqduIHBo4bqjaSBwaMOhbiDEkW/DoW4sIHTGsCBkdXksIHBow6JuIHTDrWNoIHTDrG5oIGh14buRbmcgdsOgIGPhuqMgc+G7sSBtYXkgbeG6r24gY+G7p2EgbcOsbmggxJHhu4MgY2hp4bq/biB0aOG6r25nLiBUaOG7nWkgZ2lhbiBjaG8gbOG6p24gY2jGoWkgdMO5eSB0aHXhu5ljIHbDoG8gdOG7q25nIHRyw7IsIGPDsyBuaOG7r25nIHRyw7IgY2jGoWkgcuG6pXQgbmhhbmggbmjGsG5nIGPFqW5nIGPDsyBuaOG7r25nIHRyw7IgcGjhuqNpIG3huqV0IHThu6sgMSDEkeG6v24gMiB0aeG6v25nIG3hu5tpIGvhur90IHRow7pjLg0KDQpN4buZdCBz4buRIHRyw7IgX2JvYXJkIGdhbWVfIG7hu5VpIHRp4bq/bmcgbcOgIGNow7puZyB0YSBjw7MgdGjhu4MgxJHDoyBuZ2hlIHF1YSBuaMawOiBD4budIHZ1YSwgY+G7nSBjw6Egbmfhu7FhLCBtYSBzw7NpLCByw7p0IGfhu5csIGLDoGkgdW7DtCwgbMO0IHTDtCwgdHLDsiBjYSByw7QsIG1hIHPDs2ksIG3DqG8gbuG7lSwgLi4uDQoNCiMjIyAqKjEuMi4gQuG7mSBk4buvIGxp4buHdSBib2FyZCBnYW1lKioNCg0KYGBge3J9DQpnYW1lIDwtIHJlYWQuY3N2KGZpbGUgPSAnQzovVXNlcnMvQWRtaW4vRG93bmxvYWRzL2JvYXJkX2dhbWVfZGF0YS5jc3YnLCBoZWFkZXIgPSBUKSAjxJHhu41jIGThu68gbGnhu4d1IGJvYXJkIGdhbWUNCmBgYA0KDQpC4buZIGThu68gbGnhu4d1IF9ib2FyZCBnYW1lXyBiYW8gZ+G7k20gMjIxMiBxdWFuIHPDoXQgdsOgIDEwIGJp4bq/biwgxJHGsOG7o2MgbOG6pXkgdOG7qyBbS2FnZ2xlXShodHRwczovL3d3dy5rYWdnbGUuY29tL2RhdGFzZXRzL21ycGFudGhlcnNvbi9ib2FyZC1nYW1lLWRhdGEvZGF0YSkgLSBt4buZdCBuxqFpIHV5IHTDrW4gY3VuZyBj4bqlcCBsxrDhu6NuZyBs4bubbiB0aMO0bmcgdGluIHbhu4EgxJFhIGThuqFuZyBjw6FjIGzEqW5oIHbhu7FjIHbDoCBuZ8Ogbmggbmdo4buBLg0KDQpOZ2hpw6puIGPhu6l1IGLhu5kgZOG7ryBsaeG7h3UgX2JvYXJkIGdhbWVfIGLhurFuZyBjw7RuZyBj4bulIFIgZ2nDunAgY2hvIG5o4buvbmcgbmjDoCBzw6FuZyB04bqhbyBoYXkgY8OhYyBuaMOgIGtpbmggZG9hbmggduG7gSBt4bqjbmcgdHLDsiBjaMahaSBjw7MgbeG7mXQgY8OhaSBuaMOsbiBj4bulIHRo4buDIHbDoCB04buRdCBoxqFuIHbhu4EgbeG7mXQgc+G7kSB54bq/dSB04buRLCB04burIMSRw7MsIGjhu40gY8OzIHRo4buDIHThu7EgxJFp4buBdSBjaOG7iW5oIHbDoCB0aHUgaMO6dCB0aMOqbSB04buHcCBraMOhY2ggaMOgbmcgbmjGsDoNCg0KKiBHYW1lIGlkIGPhu6dhIHRyw7IgKiooZ2FtZV9pZCkqKg0KDQoqIFTDqm4gdHLDsiBjaMahaSAqKihuYW1lcykqKg0KDQoqIFPhu5EgbMaw4bujbmcgbmfGsOG7nWkgdGhhbSBnaWEgdOG7kWkgdGhp4buDdSAqKihtaW5fcGxheWVyKSoqDQoNCiogU+G7kSBsxrDhu6NuZyBuZ8aw4budaSB0aGFtIGdpYSB04buRaSDEkWEgKioobWF4X3BsYXllcikqKg0KDQoqIFRo4budaSBnaWFuIHRydW5nIGLDrG5oIGtoaSBjaMahaSBt4buZdCB0csOyLCB0w61uaCB0aGVvIHBow7p0ICoqKGF2Z190aW1lKSoqDQoNCiogVGjhu51pIGdpYW4gdOG7kWkgdGhp4buDdSBraGkgY2jGoWkgbeG7mXQgdHLDsiwgdMOtbmggdGhlbyBwaMO6dCAqKihtaW5fdGltZSkqKg0KDQoqIFRo4budaSBnaWFuIHThu5FpIMSRYSBraGkgY2jGoWkgbeG7mXQgdHLDsiwgdMOtbmggdGhlbyBwaMO6dCAqKihtYXhfdGltZSkqKg0KDQoqIFPhu5EgbMaw4bujdCDEkcOhbmggZ2nDoSAqKihhdmdfcmF0aW5nKSoqDQoNCiogxJDhu5kgdHXhu5VpIG5nxrDhu51pIGNoxqFpICoqKGFnZSkqKg0KDQoqIE5ow6Agc8OhbmcgbOG6rXAgdHLDsiBjaMahaSAqKihkZXNpZ25lcikqKg0KDQojIyAqKjIuIFBow6JuIHTDrWNoIHPhu5EgbmfGsOG7nWkgY2jGoWkqKg0KDQpgYGB7cn0NCm5hbWVzKGdhbWUpIDwtIGMoJ0lEJywgJ04nLCAnbWlucCcsICdtYXhwJywgJ0FUJywgJ21pbnQnLCAnbWF4dCcsICdBUicsICdBJywgJ0QnKSANCiPEkOG7lWkgdMOqbiBjw6FjIGJp4bq/biDEkeG7gyB0aeG7h24gbOG7o2kgdHJvbmcgdmnhu4djIHRo4buxYyBoaeG7h24gdGjDoWMgdMOhYyB0csOqbiBk4buvIGxp4buHdQ0KDQpnYW1lMSA8LSBnYW1lW2dhbWUkbWlucCA9PTEgJiBnYW1lJG1heHAgPD0yLCBdIA0KI2dhbWUxIGJhbyBn4buTbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbyBsw6AgZ2FtZSwgc+G7kSBuZ8aw4budaSBjaMahaSB04buRaSB0aGnhu4N1IGzDoCAxLCBz4buRIG5nxrDhu51pIGNoxqFpIHThu5FpIMSRYSBsw6AgMiwg4bupbmcgduG7m2kgbmjDs20ga2jDoWNoIGjDoG5nIGzhursvY+G6t3AgxJHDtGkNCg0KZ2FtZTIgPC0gZ2FtZVtnYW1lJG1pbnAgPj0gMiAmIGdhbWUkbWF4cCA+PSAzLCBdIA0KI2dhbWUyIGPFqW5nIGJhbyBn4buTbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbyBsw6AgZ2FtZSwgc+G7kSBuZ8aw4budaSBjaMahaSB04buRaSB0aGnhu4N1IGzhu5tuIGjGoW4gaG/hurdjIGLhurFuZyAyLCBz4buRIG5nxrDhu51pIGNoxqFpIHThu5FpIMSRYSBs4bubbiBoxqFuIGhv4bq3YyBi4bqxbmcgMywg4bupbmcgduG7m2kgbmjDs20ga2jDoWNoIGjDoG5nIMSR4buZaS9uaMOzbQ0KYGBgDQoNClF1YSB2aeG7h2MgcGjDom4gdMOtY2ggMjIxMiB0csaw4budbmcgaOG7o3AgcXVhbiBzw6F0LCB0YSBuaOG6rW4gdGjhuqV5IHThu7cgbOG7hyB4deG6pXQgaGnhu4duIGPhu6dhIHRyw7IgY2jGoWkgZMOgbmggY2hvIG5ow7NtIGtow6FjaCBow6BuZyBs4bq7L2PhurdwIMSRw7RpIGNoaeG6v20gbeG7mXQgdOG7tyB0cuG7jW5nIHRo4bqlcCBoxqFuIF8oa2hv4bqjbmcgMiw2NjclLCB0xrDGoW5nIMSRxrDGoW5nIHbhu5tpIDU5LzIyMTIpXyBzbyB24bubaSB0csOyIGNoxqFpIGTDoG5oIGNobyBuaMOzbSBraMOhY2ggaMOgbmcgbMOgIMSR4buZaS9uaMOzbSBfKGtob+G6o25nIDY5LDE2OCUsIHTGsMahbmcgxJHGsMahbmcgduG7m2kgMTUzMC8yMjEyKV8uIEvhur90IHF14bqjIG7DoHkgbMOgbSBu4buVaSBi4bqtdCBz4buxIMOtdCDEkcaw4bujYyBjaMO6IMO9IGPhu6dhIG5ow7NtIGtow6FjaCBow6BuZyBs4bq7L2PhurdwIMSRw7RpIHNvIHbhu5tpIG5ow7NtIGtow6FjaCBow6BuZyBsw6AgxJHhu5lpL25ow7NtLiANCg0KROG7sWEgdHLDqm4gcGjDom4gdMOtY2ggbsOgeSwgdGEgY8OzIHRo4buDIMSR4buBIHh14bqldCBy4bqxbmcgY8OhYyBuaMOgIHPDoW5nIHThuqFvIHbDoCBkb2FuaCBuZ2hp4buHcCB0cm9uZyBsxKluaCB24buxYyB0csOyIGNoxqFpIGPDsyB0aOG7gyBraGFpIHRow6FjIHRow6ptIGPGoSBo4buZaSBi4bqxbmcgY8OhY2ggc8OhbmcgdOG6oW8gdsOgIHBow6F0IHRyaeG7g24gY8OhYyB0csOyIGNoxqFpIMSR4bq3YyBiaeG7h3QgZMOgbmggY2hvIG5ow7NtIGtow6FjaCBow6BuZyBs4bq7L2PhurdwIMSRw7RpLiDEkOG7k25nIHRo4budaSwgbGnDqm4gdOG7pWMgbuG7lyBs4buxYyBj4bqjaSB0aGnhu4duIHRyw7IgY2jGoWksIG5o4bqxbSB04bqhbyByYSB0cuG6o2kgbmdoaeG7h20gdGjDuiB24buLIHbDoCBnaeG7ryBjaMOibiBuZ8aw4budaSBjaMahaSB0aHXhu5ljIG5ow7NtIGtow6FjaCBow6BuZyBsw6AgxJHhu5lpL25ow7NtLg0KDQo9PiDEkGnhu4F1IG7DoHkga2jDtG5nIGNo4buJIGdpw7pwIHTEg25nIGPGsOG7nW5nIHPhu7EgY2jDuiDDvSDEkeG7kWkgduG7m2kgxJHhu5FpIHTGsOG7o25nIG7DoHkgbcOgIGPDsm4gY8OzIHRo4buDIG1hbmcgbOG6oWkgbmd14buTbiBs4bujaSBuaHXhuq1uIGLhu5Ugc3VuZyBjaG8gaOG7jS4NCg0KTeG7mXQgc+G7kSB0csOyIGNoxqFpIGTDoG5oIGNobyBuaMOzbSBraMOhY2ggaMOgbmcgbOG6uy9j4bq3cCDEkcO0aSBtw6AgdGEgY8OzIHRo4buDIHBow6F0IHRyaeG7g24gdGjDqm0gbMOgOg0KDQoqIEFya2hhbSBIb3Jyb3I6IFRoZSBDYXJkIEdhbWUNCg0KKiBOYXRlIEZyZW5jaCwgTWF0dGhldyBOZXdtYW4NCg0KKiBGaWVsZHMgb2YgQXJsZQ0KDQoqIFV3ZSBSb3NlbmJlcmcNCg0KKiBUaGUgTG9yZCBvZiB0aGUgUmluZ3M6IFRoZSBDYXJkIEdhbWUNCg0KIyMgKiozLiBQaMOibiB0w61jaCB0aOG7nWkgZ2lhbiBjaMahaSBt4buZdCB0csOyKioNCg0KYGBge3J9DQpnYW1lMyA8LSBnYW1lW2dhbWUkbWludCA+PSA1ICYgZ2FtZSRtYXh0IDw9IDE4MCwgXQ0KI2dhbWUzIGJhbyBn4buTbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbyBsw6AgZ2FtZSwgc+G7kSB0aOG7nWkgZ2lhbiBjaMahaSB04buRaSB0aGnhu4N1IGzDoCBs4bubbiBoxqFuIGLhurFuZyA1LCBz4buRIHRo4budaSBnaWFuIGNoxqFpIHThu5FpIMSRYSBsw6AgYsOpIGjGoW4gYuG6sW5nIDE4MCwg4bupbmcgduG7m2kgYuG7mSB0csOyIGNoxqFpIG3huqV0IMOtdCB0aOG7nWkgZ2lhbiDEkeG7gyBjaMahaQ0KDQpnYW1lNCA8LSBnYW1lW2dhbWUkbWludCA+PSAxODAgJiBnYW1lJG1heHQgPD0gNjAwMCwgXQ0KI2dhbWU0IGJhbyBn4buTbSBk4buvIGxp4buHdSDEkeG6p3UgdsOgbyBsw6AgZ2FtZSwgc+G7kSB0aOG7nWkgZ2lhbiBjaMahaSB04buRaSB0aGnhu4N1IGzDoCBs4bubbiBoxqFuIGLhurFuZyAxODAsIHPhu5EgdGjhu51pIGdpYW4gY2jGoWkgdOG7kWkgxJFhIGzDoCBiw6kgaMahbiBi4bqxbmcgNjAwMCwg4bupbmcgduG7m2kgYuG7mSB0csOyIGNoxqFpIG3huqV0IG5oaeG7gXUgdGjhu51pIGdpYW4gxJHhu4MgY2jGoWkNCmBgYA0KDQpL4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1IGNobyB0aOG6pXkgcuG6sW5nIMSR4buRaSB24bubaSBjw6FjIHRyw7IgY2jGoWkgY8OzIHRo4budaSBnaWFuIGNoxqFpIG5n4bqvbiwgY2jDum5nIGPDsyB04bu3IGzhu4cgcuG6pXQgY2FvIF8oMjAzOS8yMjEyIHjhuqVwIHjhu4kgOTIsMTc5JSlfLCBo4bqndSBo4bq/dCBjw6FjIGLhu5kgdHLDsiBjaMahaSDEkeG7gXUgxJHGsOG7o2MgY2jGoWkgdHJvbmcga2hv4bqjbmcgdGjhu51pIGdpYW4gdOG7qyAxIMSR4bq/biAzIHRp4bq/bmcuIE5nxrDhu6NjIGzhuqFpLCB0csOyIGNoxqFpIMSRw7JpIGjhu49pIHRo4budaSBnaWFuIGNoxqFpIGzDonUgaMahbiBjw7MgdOG7tyBs4buHIHPhu60gZOG7pW5nIHRo4bqlcCBoxqFuIF8oMTc3LzIyMTIgeOG6pXAgeOG7iSA4LDAwMSUpXy4NCg0KTmjDrG4gY2h1bmcsIG5naGnDqm4gY+G7qXUgY2hvIHRo4bqleSBy4bqxbmcgxrB1IMSRaeG7g20gY2jDrW5oIHbDoCDEkWnhu4NtIMSR4buZYyDEkcOhbyB0cm9uZyBsxKluaCB24buxYyB0csOyIGNoxqFpIG7hurFtIOG7nyBraMO0bmcgbmjhu69uZyBz4bqjbiBwaOG6qW0gdGjDuiB24buLIG3DoCBjw7JuIG3huqV0IMOtdCB0aOG7nWkgZ2lhbiDEkeG7gyBjaMahaSwgdGnhur90IGtp4buHbSB0aOG7nWkgZ2lhbi4gxJBp4buBdSBuw6B5IMSR4bq3dCByYSBt4buZdCBjxqEgaOG7mWkgcsO1IHLDoG5nIGNobyBjw6FjIG5ow6Agc8OhbmcgdOG6oW8gdsOgIGRvYW5oIG5naGnhu4dwIHRyw7IgY2jGoWkgxJHhu4MgdOG6rXAgdHJ1bmcgdsOgIHBow6F0IHRyaeG7g24gbmjhu69uZyB0csOyIGNoxqFpIGPDsyDEkeG6t2MgxJFp4buDbSBuw6B5LCBuaOG6sW0gdOG7kWkgxrB1IGjDs2Egc+G7sSBo4bqlcCBk4bqrbiB2w6AgdGnhu4duIGzhu6NpIGNobyBuZ8aw4budaSBjaMahaS4NCg0KIyMgKio0LiBU4buVbmcga+G6v3QqKg0KDQpUaMO0bmcgcXVhIG5naGnDqm4gY+G7qXUgdHLDqm4sIHRhIGPDsyB0aOG7gyByw7p0IHJhIGvhur90IGx14bqtbiBy4bqxbmcsIG5ow6Agc8OhbmcgdOG6oW8gdsOgIG5ow6Aga2luaCBkb2FuaCB0cm9uZyBsxKluaCB24buxYyB0csOyIGNoxqFpIG7Dqm46DQoNCiogUXVhbiB0w6JtIMSR4bq/biBuaMOzbSBraMOhY2ggaMOgbmcgbOG6uy9j4bq3cCDEkcO0aSBi4bqxbmcgY8OhY2ggc8OhbmcgdOG6oW8gdGjDqm0gbmjhu69uZyBi4buZIHRyw7IgY2jGoWkgY2hvIG5ow7NtIGtow6FjaCBow6BuZyBuw6B5Lg0KDQoqIEdp4buvIGNow6JuIG5ow7NtIGtow6FjaCBow6BuZyDEkeG7mWkvbmjDs20gYuG6sW5nIGPDoWNoIGtow7RuZyBuZ+G7q25nIGPhuqNpIHRp4bq/biwgY+G6o2kgdGhp4buHbiB0csOyIGNoxqFpLg0KDQoqIFThuq1wIHRydW5nIHbDoG8gbmjhu69uZyBi4buZIHRyw7IgY2jGoWkgbeG6pXQgw610IHRo4budaSBnaWFuIMSR4buDIGNoxqFpLg0KDQoqIFRow7RuZyDEkWnhu4dwLCBxdXkgbHXhuq10IHRyb25nIHRyw7IgY2jGoWkgY+G6p24gxJHGsOG7o2MgdGhp4bq/dCBr4bq/IG3hu5l0IGPDoWNoIGzDoG5oIG3huqFuaCB2w6wga2jDoWNoIGjDoG5nIGzDoCBjw6FjIGVtIGjhu41jIHNpbmggZMaw4bubaSAxOSB0deG7lWkuDQoNCmBgYHtyfQ0KY2hlY2sgPC0gaXMubmEoZ2FtZSkgI2tp4buDbSB0cmEgdMOtbmggaG/DoG4gY2jhu4luaCBj4bunYSBk4buvIGxp4buHdSAnYm9hcmQgZ2FtZScNCmBgYA0KDQoNCg==