1 A: ĐỌC VÀ CHUẨN BỊ TRƯỚC BUỔI HỌC

1.1 Giới thiệu chung

Tuần này, chúng ta đi sâu vào suy diễn thống kê trên bảng ngẫu nhiên (Contingency Table), đặc biệt tập trung vào:

  • Kiểm định Chi-square về tính độc lập giữa hai biến phân loại.
  • Các chỉ số đo lường mối liên hệ trong bảng 2x2: Relative Risk (RR)Odds Ratio (OR).
  • Cách tính khoảng tin cậy cho Odds Ratio.
  • Ứng dụng các kiến thức trên vào một ví dụ thực tế từ bộ dữ liệu Supermarket Transactions.

Đọc dữ liệu và khám phá

library("csv")
## Warning: package 'csv' was built under R version 4.4.3
data <- read.csv("C:/Users/Admin/Downloads/Supermarket Transactions.csv", header = T)
str(data)
## 'data.frame':    14059 obs. of  16 variables:
##  $ X                : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ PurchaseDate     : chr  "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
##  $ CustomerID       : int  7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
##  $ Gender           : chr  "F" "M" "F" "M" ...
##  $ MaritalStatus    : chr  "S" "M" "M" "M" ...
##  $ Homeowner        : chr  "Y" "Y" "N" "Y" ...
##  $ Children         : int  2 5 2 3 3 3 2 2 3 1 ...
##  $ AnnualIncome     : chr  "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
##  $ City             : chr  "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
##  $ StateorProvince  : chr  "CA" "CA" "WA" "OR" ...
##  $ Country          : chr  "USA" "USA" "USA" "USA" ...
##  $ ProductFamily    : chr  "Food" "Food" "Food" "Food" ...
##  $ ProductDepartment: chr  "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
##  $ ProductCategory  : chr  "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
##  $ UnitsSold        : int  5 5 3 4 4 3 4 6 1 2 ...
##  $ Revenue          : num  27.38 14.9 5.52 4.44 14 ...

Đầu tiên, ta sẽ sử dụng 2 biến định tính: Gender (Giới tính) và Homeowner (Có sở hữu nhà hay không) để tiến hành đưa ra ví dụ cũng như phân tích.

1.2 Bảng ngẫu nhiên

Bảng ngẫu nhiên (contingency table) là công cụ thống kê dùng để trình bày tần số của các biến phân loại. Trong trường hợp đơn giản nhất – bảng 2x2 – bảng có dạng:

Biến B = Yes Biến B = No
Biến A = Yes a b
Biến A = No c d

Trong phân tích thống kê, bảng 2x2 thường dùng để:

  • So sánh xác suất giữa hai nhóm (như Nam vs Nữ).
  • Tính toán các chỉ số đo lường mối liên hệ: Risk, Odds, Relative Risk (RR), Odds Ratio (OR).
  • Kiểm định giả thuyết về sự độc lập giữa hai biến (Chi-square test, Fisher’s Exact Test,…).

Bảng có thể sinh ra từ các phân phối như:

  • Multinomial: nếu tổng số quan sát cố định.
  • Poisson: nếu từng ô trong bảng là biến Poisson độc lập (áp dụng khi dữ liệu hiếm).

Các bước thực hiện trong R

table_gender_homeowner <- table(data$Gender, data$Homeowner)
table_gender_homeowner
##    
##        N    Y
##   F 2826 4344
##   M 2789 4100

1.3 Kiểm định Chi-square về tính độc lập

Lý thuyết: Kiểm định Chi-square

Dùng để kiểm tra xem hai biến phân loại có độc lập thống kê không.

  • Giả thuyết H₀: Hai biến độc lập.
  • Giả thuyết H₁: Hai biến có mối liên hệ.

Chỉ số kiểm định: \[ X^2 = \sum \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]

Trong đó:

  • \(O_{ij}\) là tần số quan sát
  • \(E_{ij}\) là tần số kỳ vọng.

Nếu p-value < 0.05, ta có đủ cơ sở để bác bỏ H₀ → Có bằng chứng về sự phụ thuộc giữa hai biến.

Các bước thực hiện trong R

chisq.test(table_gender_homeowner, correct = FALSE)
## 
##  Pearson's Chi-squared test
## 
## data:  table_gender_homeowner
## X-squared = 1.6788, df = 1, p-value = 0.1951

1.4 Tính Odds Ratio, Relative Risk

1.4.1 Tỷ số nguy cơ (Relative Risk - RR)

Khái niệm: Relative Risk (RR) là tỷ lệ giữa xác suất xảy ra sự kiện ở nhóm tiếp xúc so với nhóm không tiếp xúc.

Công thức:

\[ RR = \frac{\frac{a}{a+b}}{\frac{c}{c+d}} \]

Diễn giải:

  • RR = 1: Không có sự khác biệt về nguy cơ giữa hai nhóm.
  • RR > 1: Nguy cơ ở nhóm tiếp xúc cao hơn nhóm không tiếp xúc.
  • RR < 1: Nguy cơ ở nhóm tiếp xúc thấp hơn nhóm không tiếp xúc.

1.4.2 Tỷ số chênh (Odds Ratio - OR)

Khái niệm: Odds Ratio (OR) là tỷ lệ giữa odds xảy ra sự kiện ở nhóm tiếp xúc so với nhóm không tiếp xúc.

Công thức:

\[ OR = \frac{\frac{a}{b}}{\frac{c}{d}} = \frac{a \times d}{b \times c} \]

Diễn giải:

  • OR = 1: Không có sự khác biệt về odds giữa hai nhóm.
  • OR > 1: Odds xảy ra sự kiện ở nhóm tiếp xúc cao hơn nhóm không tiếp xúc.
  • OR < 1: Odds xảy ra sự kiện ở nhóm tiếp xúc thấp hơn nhóm không tiếp xúc.

Các bước thực hiện trên R

# Lấy số liệu
a <- table_gender_homeowner["F", "Y"]
b <- table_gender_homeowner["F", "N"]
c <- table_gender_homeowner["M", "Y"]
d <- table_gender_homeowner["M", "N"]

# Tính Odds
odds_female <- a / b
odds_male <- c / d

# Odds Ratio (OR)
or <- odds_female / odds_male

# Relative Risk (RR)
risk_female <- a / (a + b)
risk_male <- c / (c + d)
rr <- risk_female / risk_male

list(
  odds_female = odds_female,
  odds_male = odds_male,
  OR = or,
  RR = rr
)
## $odds_female
## [1] 1.537155
## 
## $odds_male
## [1] 1.470061
## 
## $OR
## [1] 1.04564
## 
## $RR
## [1] 1.017989

Khoảng tin cậy 95% cho Odds Ratio

Do OR không phân phối chuẩn, nên lấy log(OR) để xây dựng khoảng tin cậy:

\[ CI_{log(OR)} = \log(OR) \pm Z \cdot SE_{log(OR)} \]

Với: \[ SE = \sqrt{\frac{1}{a} + \frac{1}{b} + \frac{1}{c} + \frac{1}{d}} \]

Chuyển về thang OR bằng hàm mũ: \(e^{CI}\).

Các bước thực hiện trên R

se_log_or <- sqrt(1/a + 1/b + 1/c + 1/d)
z <- 1.96  # hệ số cho 95%
ci_lower <- exp(log(or) - z * se_log_or)
ci_upper <- exp(log(or) + z * se_log_or)
c(ci_lower, ci_upper)
## [1] 0.9773755 1.1186731

Nhận xét:

  • Nếu OR < 1, odds của việc sở hữu nhà ở nhóm Female nhỏ hơn Male.
  • Nếu RR < 1, phụ nữ có nguy cơ sở hữu nhà thấp hơn nam giới.

Kết luận cần đi kèm với kiểm định Chi-square và khoảng tin cậy, không nên chỉ nhìn vào OR/RR.

Đây là một ví dụ điển hình cho việc sử dụng Odds Ratio trong kinh tế/xã hội học để mô tả mối liên hệ giữa hai đặc điểm phân loại.

1.5 Thực hành trên bộ dữ liệu

Tạo bảng tần số

# Bảng tần số chéo giữa MaritalStatus và Homeowner
tbl <- table(data$MaritalStatus, data$Homeowner)
tbl
##    
##        N    Y
##   M 1719 5147
##   S 3896 3297

Nhận xét

  • Khách hàng đã kết hôn (M): Có tới 5147 người sở hữu nhà ở, chiếm phần lớn trong nhóm này, trong khi chỉ có 1719 người không sở hữu nhà.

  • Khách hàng độc thân (S): Ngược lại, nhóm này có xu hướng không sở hữu nhà ở cao hơn với 3896 người, trong khi số người sở hữu nhà chỉ là 3297 người.

Kiểm định Chi-square

chi_test <- chisq.test(tbl)
chi_test
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tbl
## X-squared = 1241.2, df = 1, p-value < 2.2e-16

Kết quả kiểm định:

  • Giá trị thống kê Chi-bình phương: X-squared = 1241.2

  • Bậc tự do: df = 1

  • Giá trị p: p-value < 2.2e-16

Kết luận:

  • Vì giá trị p rất nhỏ (p < 0.05), ta bác bỏ giả thuyết không H0. Điều này cho thấy có mối liên hệ có ý nghĩa thống kê giữa tình trạng hôn nhân và tình trạng sở hữu nhà.

Tính Odds Ratio và Relative Risk

# Lọc dữ liệu: chỉ lấy Married và Single
data2 <- subset(data, MaritalStatus %in% c("M", "S"))

# Tạo bảng 2x2
tbl2 <- table(data2$MaritalStatus, data2$Homeowner)
tbl2
##    
##        N    Y
##   M 1719 5147
##   S 3896 3297
# Tính toán Odds Ratio và Relative Risk
library(epiR)
## Warning: package 'epiR' was built under R version 4.4.3
## Loading required package: survival
## Package epiR 2.0.84 is loaded
## Type help(epi.about) for summary information
## Type browseVignettes(package = 'epiR') to learn how to use epiR for applied epidemiological analyses
## 
epi_result <- epi.2by2(tbl2, method = "cohort.count", conf.level = 0.95)
epi_result
##              Outcome+    Outcome-      Total                 Inc risk *
## Exposure+        1719        5147       6866     25.04 (24.02 to 26.08)
## Exposure-        3896        3297       7193     54.16 (53.00 to 55.32)
## Total            5615        8444      14059     39.94 (39.13 to 40.75)
## 
## Point estimates and 95% CIs:
## -------------------------------------------------------------------
## Inc risk ratio                                 0.46 (0.44, 0.48)
## Inc odds ratio                                 0.28 (0.26, 0.30)
## Attrib risk in the exposed *                   -29.13 (-30.67, -27.59)
## Attrib fraction in the exposed (%)            -116.34 (-126.59, -106.62)
## Attrib risk in the population *                -14.22 (-15.63, -12.82)
## Attrib fraction in the population (%)         -35.62 (-35.74, -35.46)
## -------------------------------------------------------------------
## Uncorrected chi2 test that OR = 1: chi2(1) = 1242.432 Pr>chi2 = <0.001
## Fisher exact test that OR = 1: Pr>chi2 = <0.001
##  Wald confidence limits
##  CI: confidence interval
##  * Outcomes per 100 population units

1.6 Kết quả phân tích

Bảng chéo tần suất giữa MaritalStatus và Homeowner

Marital Status Không sở hữu nhà (N) Có sở hữu nhà (Y) Tổng cộng
Married (M) 1,719 5,147 6,866
Single (S) 3,896 3,297 7,193
Tổng cộng 5,615 8,444 14,059

Tỷ lệ hiện mắc (Incidence Risk)

  • Nhóm Married: 25.04% (CI: 24.02 – 26.08)
  • Nhóm Single: 54.16% (CI: 53.00 – 55.32)

Những người độc thân có xác suất không sở hữu nhà cao hơn gấp đôi so với người đã kết hôn.


Relative Risk (RR)

  • RR = 0.46 (95% CI: 0.44 – 0.48)

Nguy cơ không sở hữu nhà ở nhóm đã kết hôn chỉ bằng 46% so với nhóm độc thân.


Odds Ratio (OR)

  • OR = 0.28 (95% CI: 0.26 – 0.30)

Xác suất không sở hữu nhà ở nhóm đã kết hôn thấp hơn 72% so với nhóm độc thân.


Risk Difference và Attribution

  • Chênh lệch nguy cơ tuyệt đối (risk difference): -29.13 điểm phần trăm
  • Tỷ lệ quy trách trong nhóm phơi nhiễm (exposed): -116.34%
  • Tỷ lệ quy trách toàn dân (population): -35.62%

Điều này cho thấy rằng việc kết hôn có thể giúp giảm đáng kể rủi ro không sở hữu nhà ở cấp độ cá nhân lẫn dân số.


Kiểm định ý nghĩa thống kê

  • Chi-squared test: χ²(1) = 1242.43, p < 0.001
  • Fisher’s exact test: p < 0.001

Kết quả kiểm định cho thấy mối liên hệ giữa tình trạng hôn nhân và việc sở hữu nhà là rất có ý nghĩa thống kê (p < 0.001).


Kết luận:

  • Có mối liên hệ rất rõ ràng và có ý nghĩa giữa tình trạng hôn nhân và việc sở hữu nhà.
  • Những người đã kết hôn có tỷ lệ và xác suất không sở hữu nhà thấp hơn đáng kể so với người độc thân.
  • Đây là một phát hiện quan trọng có thể được sử dụng trong các nghiên cứu xã hội học hoặc chính sách nhà ở.

2 B: HOẠT ĐỘNG TRÊN LỚP

Trong hoạt động này, chúng ta sẽ sử dụng dữ liệu Supermarket Transactions để phân tích mối liên hệ giữa các biến nhị phân. Mục tiêu là:

  • Tạo bảng 2x2
  • Tính và diễn giải Hiệu hai tỷ lệ (Difference in Proportions)
  • Tính Relative Risk (RR) và Odds Ratio (OR)
  • Tính khoảng tin cậy 95% cho OR
  • Thực hiện phân tích phân tầng (stratified analysis)

2.1 Đọc và làm quen với dữ liệu

Bộ dữ liệu “Supermarket Transactions” phản ánh các giao dịch mua hàng của khách hàng tại một siêu thị trong một khoảng thời gian cụ thể. Mỗi dòng dữ liệu tương ứng với một giao dịch, bao gồm thông tin nhân khẩu học (giới tính, loại thành viên, chi nhánh), đặc điểm sản phẩm (loại sản phẩm, kênh thanh toán), và các yếu tố hành vi tiêu dùng (thời gian mua sắm, mức độ hài lòng, giá trị đơn hàng,…). Tập dữ liệu gồm 14.059 quan sát và 16 biến, cung cấp nền tảng chi tiết để phân tích hành vi khách hàng và hiệu quả kinh doanh của siêu thị.

# Đọc file
library("csv")
data <- read.csv("C:/Users/Admin/Downloads/Supermarket Transactions.csv", header = T)

# Hiển thị cấu trúc dữ liệu
str(data)
## 'data.frame':    14059 obs. of  16 variables:
##  $ X                : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ PurchaseDate     : chr  "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
##  $ CustomerID       : int  7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
##  $ Gender           : chr  "F" "M" "F" "M" ...
##  $ MaritalStatus    : chr  "S" "M" "M" "M" ...
##  $ Homeowner        : chr  "Y" "Y" "N" "Y" ...
##  $ Children         : int  2 5 2 3 3 3 2 2 3 1 ...
##  $ AnnualIncome     : chr  "$30K - $50K" "$70K - $90K" "$50K - $70K" "$30K - $50K" ...
##  $ City             : chr  "Los Angeles" "Los Angeles" "Bremerton" "Portland" ...
##  $ StateorProvince  : chr  "CA" "CA" "WA" "OR" ...
##  $ Country          : chr  "USA" "USA" "USA" "USA" ...
##  $ ProductFamily    : chr  "Food" "Food" "Food" "Food" ...
##  $ ProductDepartment: chr  "Snack Foods" "Produce" "Snack Foods" "Snacks" ...
##  $ ProductCategory  : chr  "Snack Foods" "Vegetables" "Snack Foods" "Candy" ...
##  $ UnitsSold        : int  5 5 3 4 4 3 4 6 1 2 ...
##  $ Revenue          : num  27.38 14.9 5.52 4.44 14 ...
# Hiển thị vài dòng đầu và cuối
head(data)
##   X PurchaseDate CustomerID Gender MaritalStatus Homeowner Children
## 1 1   2007-12-18       7223      F             S         Y        2
## 2 2   2007-12-20       7841      M             M         Y        5
## 3 3   2007-12-21       8374      F             M         N        2
## 4 4   2007-12-21       9619      M             M         Y        3
## 5 5   2007-12-22       1900      F             S         Y        3
## 6 6   2007-12-22       6696      F             M         Y        3
##    AnnualIncome          City StateorProvince Country ProductFamily
## 1   $30K - $50K   Los Angeles              CA     USA          Food
## 2   $70K - $90K   Los Angeles              CA     USA          Food
## 3   $50K - $70K     Bremerton              WA     USA          Food
## 4   $30K - $50K      Portland              OR     USA          Food
## 5 $130K - $150K Beverly Hills              CA     USA         Drink
## 6   $10K - $30K Beverly Hills              CA     USA          Food
##   ProductDepartment      ProductCategory UnitsSold Revenue
## 1       Snack Foods          Snack Foods         5   27.38
## 2           Produce           Vegetables         5   14.90
## 3       Snack Foods          Snack Foods         3    5.52
## 4            Snacks                Candy         4    4.44
## 5         Beverages Carbonated Beverages         4   14.00
## 6              Deli          Side Dishes         3    4.37
tail(data)
##           X PurchaseDate CustomerID Gender MaritalStatus Homeowner Children
## 14054 14054   2009-12-29       2032      F             M         N        3
## 14055 14055   2009-12-29       9102      F             M         Y        2
## 14056 14056   2009-12-29       4822      F             M         Y        3
## 14057 14057   2009-12-31        250      M             S         Y        1
## 14058 14058   2009-12-31       6153      F             S         N        4
## 14059 14059   2009-12-31       3656      M             S         N        3
##       AnnualIncome        City StateorProvince Country  ProductFamily
## 14054  $10K - $30K      Yakima              WA     USA Non-Consumable
## 14055  $10K - $30K   Bremerton              WA     USA           Food
## 14056  $10K - $30K Walla Walla              WA     USA           Food
## 14057  $30K - $50K    Portland              OR     USA          Drink
## 14058  $50K - $70K     Spokane              WA     USA          Drink
## 14059  $50K - $70K    Portland              OR     USA Non-Consumable
##       ProductDepartment      ProductCategory UnitsSold Revenue
## 14054         Household       Paper Products         5   14.50
## 14055      Baking Goods         Baking Goods         3    9.64
## 14056      Frozen Foods           Vegetables         3    7.45
## 14057         Beverages Pure Juice Beverages         4    3.24
## 14058             Dairy                Dairy         2    4.00
## 14059         Household           Electrical         5   25.53
# Chuyển các biến định tính phù hợp sang factor
factor <- c("Gender", "MaritalStatus", "Homeowner", "AnnualIncome",
                    "City", "StateorProvince", "Country",
                    "ProductFamily", "ProductDepartment", "ProductCategory")

# Kiểm tra biến nào tồn tại trong data
factor <- intersect(factor, names(data))

# Chuyển sang factor
data[factor] <- lapply(data[factor], as.factor)

# Kiểm tra lại cấu trúc
str(data)
## 'data.frame':    14059 obs. of  16 variables:
##  $ X                : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ PurchaseDate     : chr  "2007-12-18" "2007-12-20" "2007-12-21" "2007-12-21" ...
##  $ CustomerID       : int  7223 7841 8374 9619 1900 6696 9673 354 1293 7938 ...
##  $ Gender           : Factor w/ 2 levels "F","M": 1 2 1 2 1 1 2 1 2 2 ...
##  $ MaritalStatus    : Factor w/ 2 levels "M","S": 2 1 1 1 2 1 2 1 1 2 ...
##  $ Homeowner        : Factor w/ 2 levels "N","Y": 2 2 1 2 2 2 2 2 2 1 ...
##  $ Children         : int  2 5 2 3 3 3 2 2 3 1 ...
##  $ AnnualIncome     : Factor w/ 8 levels "$10K - $30K",..: 5 7 6 5 3 1 5 4 1 6 ...
##  $ City             : Factor w/ 23 levels "Acapulco","Bellingham",..: 8 8 4 12 3 3 13 23 2 15 ...
##  $ StateorProvince  : Factor w/ 10 levels "BC","CA","DF",..: 2 2 8 6 2 2 6 8 8 2 ...
##  $ Country          : Factor w/ 3 levels "Canada","Mexico",..: 3 3 3 3 3 3 3 3 3 3 ...
##  $ ProductFamily    : Factor w/ 3 levels "Drink","Food",..: 2 2 2 2 1 2 2 2 3 3 ...
##  $ ProductDepartment: Factor w/ 22 levels "Alcoholic Beverages",..: 20 18 20 21 4 11 13 6 15 14 ...
##  $ ProductCategory  : Factor w/ 45 levels "Baking Goods",..: 42 45 42 7 15 41 5 13 16 35 ...
##  $ UnitsSold        : int  5 5 3 4 4 3 4 6 1 2 ...
##  $ Revenue          : num  27.38 14.9 5.52 4.44 14 ...

Giải thích các biến

Bộ dữ liệu ghi lại thông tin về các giao dịch mua hàng của khách hàng, bao gồm thông tin nhân khẩu học, thông tin sản phẩm, số lượng bán ra và doanh thu. Dữ liệu bao gồm 14059 quan sát và 16 biến. Dưới đây là mô tả chi tiết các biến có trong bộ dữ liệu:

Tên Biến Ý Nghĩa
PurchaseDate Ngày giao dịch mua hàng diễn ra (định dạng ngày/tháng/năm).
CustomerID Mã định danh duy nhất cho mỗi khách hàng.
Gender Giới tính của khách hàng: M (Nam), F (Nữ).
MaritalStatus Tình trạng hôn nhân: S (Độc thân), M (Đã kết hôn).
Homeowner Tình trạng sở hữu nhà: Y (Có), N (Không).
Children Số lượng con cái của khách hàng.
AnnualIncome Mức thu nhập hàng năm theo khoảng (Ví dụ: $30K - $50K).
City Thành phố nơi khách hàng thực hiện giao dịch.
StateorProvince Bang hoặc tỉnh (ví dụ: CA cho California, OR cho Oregon).
Country Quốc gia.
ProductFamily Nhóm sản phẩm chính: Food (Thực phẩm), Drink (Đồ uống), Non-Consumable (Không tiêu dùng).
ProductDepartment Bộ phận sản phẩm như Snack Foods, Frozen Foods, v.v.
ProductCategory Danh mục sản phẩm cụ thể hơn, ví dụ: Candy, Beer and Wine.
UnitsSold Số lượng đơn vị sản phẩm đã bán trong giao dịch đó.
Revenue Doanh thu từ giao dịch (tính theo USD).

2.2 Phân tích mối liên hệ giữa Gender và Homeowner

2.2.1 Tạo bảng tần số chéo

table_gender_home <- table(data$Gender, data$Homeowner)
table_gender_home
##    
##        N    Y
##   F 2826 4344
##   M 2789 4100

Dựa vào bảng trên:

  • Nữ (F) có tổng cộng 7170 người, trong đó 4344 người sở hữu nhà, chiếm khoảng 60.6%.

  • Nam (M) có tổng cộng 6889 người, với 4100 người sở hữu nhà, tương ứng khoảng 59.5%.

Nhận xét:

Tỷ lệ sở hữu nhà của nữ có vẻ nhỉnh hơn một chút so với nam (khoảng 60.6% so với 59.5%), tuy nhiên sự khác biệt này là khá nhỏ.
Để đánh giá rõ ràng hơn về mức độ liên hệ giữa hai biến, ta sẽ tiếp tục tính các chỉ số định lượng như:
Hiệu hai tỷ lệ (Difference in Proportions), Relative Risk (RR), Odds Ratio (OR).


2.2.2 Tính Hiệu Hai Tỷ Lệ

prop_table <- prop.table(table_gender_home, margin = 1)
prop_table
##    
##             N         Y
##   F 0.3941423 0.6058577
##   M 0.4048483 0.5951517
diff_prop <- prop_table[1, "Y"] - prop_table[2, "N"]
diff_prop
## [1] 0.2010094

Tỷ lệ sở hữu nhà:

  • nữ là 0.6059 (tức là 60.6%)

  • nam là 0.5952 (tức là 59.5%)

Hiệu hai tỷ lệ giữa nữ và nam là 0.201, tương đương 20.1 điểm phần trăm.

Kết luận:

Tỷ lệ nữ sở hữu nhà cao hơn nam khoảng 1.00%, tuy nhiên mức chênh lệch này khá nhỏ và chưa thể kết luận có ý nghĩa thống kê nếu chưa tính khoảng tin cậy (confidence interval) hoặc thực hiện các kiểm định thống kê chính thức như kiểm định z hoặc chi bình phương.


2.2.3 Tính Relative Risk (RR)

library(epitools)
## 
## Attaching package: 'epitools'
## The following object is masked from 'package:survival':
## 
##     ratetable
rr_result <- riskratio(table_gender_home)
rr_result$measure
##    risk ratio with 95% C.I.
##      estimate     lower    upper
##   F 1.0000000        NA       NA
##   M 0.9823291 0.9561812 1.009192

Dựa vào kết quả ta thấy Relative Risk (RR) của nam so với nữ là 0.9823. Khoảng tin cậy 95% của RR nằm trong khoảng từ 0.9562 đến 1.0092.

Kết luận:
RR < 1 cho thấy nam có tỷ lệ sở hữu nhà thấp hơn nữ một chút (chỉ còn khoảng 98.23% so với nữ). Tuy nhiên, vì khoảng tin cậy 95% bao gồm giá trị 1.0, nên không có bằng chứng đủ mạnh để kết luận sự khác biệt này có ý nghĩa thống kê. Nói cách khác, tỷ lệ sở hữu nhà giữa nam và nữ có thể coi là tương đương.


2.2.4 Tính Odds Ratio (OR) và Khoảng Tin Cậy

library(epitools)
or_result <- oddsratio(table_gender_home)
or_result
## $data
##        
##            N    Y Total
##   F     2826 4344  7170
##   M     2789 4100  6889
##   Total 5615 8444 14059
## 
## $measure
##    odds ratio with 95% C.I.
##     estimate     lower    upper
##   F 1.000000        NA       NA
##   M 0.956381 0.8938974 1.023169
## 
## $p.value
##    two-sided
##     midp.exact fisher.exact chi.square
##   F         NA           NA         NA
##   M   0.195158    0.1964833  0.1950884
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
or_result$conf.int
## NULL

Phân tích bảng thì giữa hai nhóm giới tính (F và M) cho thấy:

  • Tỷ số odds (odds ratio) giữa nhóm nam (M) so với nữ (F) là 0.96, với khoảng tin cậy 95% là [0.89; 1.02].
  • Giá trị p từ các phép kiểm định hai phía:
    • Mid-p exact: p = 0.195
    • Fisher’s exact: p = 0.196
    • Chi-square: p = 0.195

Do tất cả các giá trị p đều lớn hơn mức ý nghĩa thông thường (α = 0.05), không có sự khác biệt có ý nghĩa thống kê giữa nhóm nam và nữ về biến được phân tích.

Như vậy, kết quả cho thấy không có mối liên quan rõ rệt giữa giới tính và biến, theo phân tích odds ratio và các kiểm định xác suất tương ứng.

DQotLS0NCnRpdGxlOiAiKipOaGnhu4dtIFbhu6UgMyoqIg0KYXV0aG9yOiAiTmd1eeG7hW4gTMOqIFRoacOqbiBLaW0iDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogeWVzDQogICAgdG9jOiB5ZXMNCiAgICB0b2NfZGVwdGg6IDMNCiAgICB0b2NfZmxvYXQ6DQogICAgICBjb2xsYXBzZWQ6IHllcw0KICAgICAgc21vb3RoX3Njcm9sbDogeWVzDQotLS0NCg0KPHN0eWxlPg0KLyogSW4gxJHhuq1tIHRvw6BuIGLhu5kgdGnDqnUgxJHhu4EgKGJhbyBn4buTbSBj4bqjIHPhu5EgY2jGsMahbmcpICovDQpoMSwgaDIsIGgzLCBoNCwgaDUsIGg2IHsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQp9DQo8L3N0eWxlPg0KDQo8c3R5bGU+DQovKiDhuqhuIHPhu5EgbeG7pWMg4bufIGPhuqVwIDEgKi8NCmgxIC5oZWFkZXItc2VjdGlvbi1udW1iZXIgew0KICBkaXNwbGF5OiBub25lOw0KfQ0KPC9zdHlsZT4NCg0KPHN0eWxlPg0KLyog4bqobiBz4buRIG3hu6VjIGzhu6VjIChjaOG7iSBj4bqlcCAxKSB0cm9uZyBi4bqjbmcgVE9DICovDQpuYXYjVE9DIHVsIGxpID4gYSA+IHNwYW4udG9jLXNlY3Rpb24tbnVtYmVyIHsNCiAgZGlzcGxheTogbm9uZTsNCn0NCi8qIE5oxrBuZyBnaeG7ryBs4bqhaSBz4buRIGNobyBj4bqlcCBkxrDhu5tpICovDQpuYXYjVE9DIHVsIGxpIHVsIGxpID4gYSA+IHNwYW4udG9jLXNlY3Rpb24tbnVtYmVyIHsNCiAgZGlzcGxheTogaW5saW5lOw0KfQ0KPC9zdHlsZT4NCg0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFKQ0KYGBgDQoNCiMgKipBOiDEkOG7jEMgVsOAIENIVeG6qE4gQuG7iiBUUsav4buaQyBCVeG7lEkgSOG7jEMqKg0KIyMgKipHaeG7m2kgdGhp4buHdSBjaHVuZyoqDQoNClR14bqnbiBuw6B5LCBjaMO6bmcgdGEgxJFpIHPDonUgdsOgbyBzdXkgZGnhu4VuIHRo4buRbmcga8OqIHRyw6puIGLhuqNuZyBuZ+G6q3Ugbmhpw6puIChDb250aW5nZW5jeSBUYWJsZSksIMSR4bq3YyBiaeG7h3QgdOG6rXAgdHJ1bmcgdsOgbzoNCg0KLSBLaeG7g20gxJHhu4tuaCBDaGktc3F1YXJlIHbhu4EgdMOtbmggxJHhu5ljIGzhuq1wIGdp4buvYSBoYWkgYmnhur9uIHBow6JuIGxv4bqhaS4NCi0gQ8OhYyBjaOG7iSBz4buRIMSRbyBsxrDhu51uZyBt4buRaSBsacOqbiBo4buHIHRyb25nIGLhuqNuZyAyeDI6ICoqUmVsYXRpdmUgUmlzayAoUlIpKiogdsOgICoqT2RkcyBSYXRpbyAoT1IpKiouDQotIEPDoWNoIHTDrW5oIGtob+G6o25nIHRpbiBj4bqteSBjaG8gT2RkcyBSYXRpby4NCi0g4buobmcgZOG7pW5nIGPDoWMga2nhur9uIHRo4bupYyB0csOqbiB2w6BvIG3hu5l0IHbDrSBk4bulIHRo4buxYyB04bq/IHThu6sgYuG7mSBk4buvIGxp4buHdSAqKlN1cGVybWFya2V0IFRyYW5zYWN0aW9ucyoqLg0KDQoqKsSQ4buNYyBk4buvIGxp4buHdSB2w6Aga2jDoW0gcGjDoSoqDQoNCmBgYHtyfQ0KbGlicmFyeSgiY3N2IikNCmRhdGEgPC0gcmVhZC5jc3YoIkM6L1VzZXJzL0FkbWluL0Rvd25sb2Fkcy9TdXBlcm1hcmtldCBUcmFuc2FjdGlvbnMuY3N2IiwgaGVhZGVyID0gVCkNCnN0cihkYXRhKQ0KYGBgDQoNCsSQ4bqndSB0acOqbiwgdGEgc+G6vSBz4butIGThu6VuZyAyIGJp4bq/biDEkeG7i25oIHTDrW5oOiAqKkdlbmRlcioqIChHaeG7m2kgdMOtbmgpIHbDoCAqKkhvbWVvd25lcioqIChDw7Mgc+G7nyBo4buvdSBuaMOgIGhheSBraMO0bmcpIMSR4buDIHRp4bq/biBow6BuaCDEkcawYSByYSB2w60gZOG7pSBjxaluZyBuaMawIHBow6JuIHTDrWNoLg0KDQojIyAqKkLhuqNuZyBuZ+G6q3Ugbmhpw6puKioNCg0KQuG6o25nIG5n4bqrdSBuaGnDqm4gKGNvbnRpbmdlbmN5IHRhYmxlKSBsw6AgY8O0bmcgY+G7pSB0aOG7kW5nIGvDqiBkw7luZyDEkeG7gyB0csOsbmggYsOgeSB04bqnbiBz4buRIGPhu6dhIGPDoWMgYmnhur9uIHBow6JuIGxv4bqhaS4gVHJvbmcgdHLGsOG7nW5nIGjhu6NwIMSRxqFuIGdp4bqjbiBuaOG6pXQg4oCTIGLhuqNuZyAyeDIg4oCTIGLhuqNuZyBjw7MgZOG6oW5nOg0KDQp8ICAgICAgICAgICAgICB8IEJp4bq/biBCID0gWWVzIHwgQmnhur9uIEIgPSBObyB8DQp8LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwNCnwgKipCaeG6v24gQSA9IFllcyoqIHwgYSAgICAgICAgICAgIHwgYiAgICAgICAgICAgfA0KfCAqKkJp4bq/biBBID0gTm8qKiAgfCBjICAgICAgICAgICAgfCBkICAgICAgICAgICB8DQoNClRyb25nIHBow6JuIHTDrWNoIHRo4buRbmcga8OqLCBi4bqjbmcgMngyIHRoxrDhu51uZyBkw7luZyDEkeG7gzoNCg0KLSBTbyBzw6FuaCB4w6FjIHN14bqldCBnaeG7r2EgaGFpIG5ow7NtIChuaMawIE5hbSB2cyBO4buvKS4NCi0gVMOtbmggdG/DoW4gY8OhYyBjaOG7iSBz4buRIMSRbyBsxrDhu51uZyBt4buRaSBsacOqbiBo4buHOiBSaXNrLCBPZGRzLCBSZWxhdGl2ZSBSaXNrIChSUiksIE9kZHMgUmF0aW8gKE9SKS4NCi0gS2nhu4NtIMSR4buLbmggZ2nhuqMgdGh1eeG6v3QgduG7gSBz4buxIMSR4buZYyBs4bqtcCBnaeG7r2EgaGFpIGJp4bq/biAoQ2hpLXNxdWFyZSB0ZXN0LCBGaXNoZXLigJlzIEV4YWN0IFRlc3QsLi4uKS4NCg0KQuG6o25nIGPDsyB0aOG7gyBzaW5oIHJhIHThu6sgY8OhYyBwaMOibiBwaOG7kWkgbmjGsDoNCg0KLSAqKk11bHRpbm9taWFsKio6IG7hur91IHThu5VuZyBz4buRIHF1YW4gc8OhdCBj4buRIMSR4buLbmguDQotICoqUG9pc3NvbioqOiBu4bq/dSB04burbmcgw7QgdHJvbmcgYuG6o25nIGzDoCBiaeG6v24gUG9pc3NvbiDEkeG7mWMgbOG6rXAgKMOhcCBk4bulbmcga2hpIGThu68gbGnhu4d1IGhp4bq/bSkuDQoNCioqQ8OhYyBixrDhu5tjIHRo4buxYyBoaeG7h24gdHJvbmcgUioqDQoNCmBgYHtyfQ0KdGFibGVfZ2VuZGVyX2hvbWVvd25lciA8LSB0YWJsZShkYXRhJEdlbmRlciwgZGF0YSRIb21lb3duZXIpDQp0YWJsZV9nZW5kZXJfaG9tZW93bmVyDQpgYGANCg0KDQojIyAqKktp4buDbSDEkeG7i25oIENoaS1zcXVhcmUgduG7gSB0w61uaCDEkeG7mWMgbOG6rXAqKg0KDQoqKkzDvSB0aHV54bq/dDogS2nhu4NtIMSR4buLbmggQ2hpLXNxdWFyZSoqDQoNCkTDuW5nIMSR4buDIGtp4buDbSB0cmEgeGVtIGhhaSBiaeG6v24gcGjDom4gbG/huqFpIGPDsyDEkeG7mWMgbOG6rXAgdGjhu5FuZyBrw6oga2jDtG5nLg0KDQotICoqR2nhuqMgdGh1eeG6v3QgSOKCgCoqOiBIYWkgYmnhur9uIMSR4buZYyBs4bqtcC4NCi0gKipHaeG6oyB0aHV54bq/dCBI4oKBKio6IEhhaSBiaeG6v24gY8OzIG3hu5FpIGxpw6puIGjhu4cuDQoNCkNo4buJIHPhu5Ega2nhu4NtIMSR4buLbmg6DQpcWw0KWF4yID0gXHN1bSBcZnJhY3soT197aWp9IC0gRV97aWp9KV4yfXtFX3tpan19DQpcXQ0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIE9fe2lqfSBcKSBsw6AgdOG6p24gc+G7kSBxdWFuIHPDoXQgDQotIFwoIEVfe2lqfSBcKSBsw6AgdOG6p24gc+G7kSBr4buzIHbhu41uZy4NCg0KTuG6v3UgcC12YWx1ZSA8IDAuMDUsIHRhIGPDsyDEkeG7pyBjxqEgc+G7nyDEkeG7gyBiw6FjIGLhu48gSOKCgCDihpIgQ8OzIGLhurFuZyBjaOG7qW5nIHbhu4Egc+G7sSBwaOG7pSB0aHXhu5ljIGdp4buvYSBoYWkgYmnhur9uLg0KDQoNCioqQ8OhYyBixrDhu5tjIHRo4buxYyBoaeG7h24gdHJvbmcgUioqDQoNCmBgYHtyfQ0KY2hpc3EudGVzdCh0YWJsZV9nZW5kZXJfaG9tZW93bmVyLCBjb3JyZWN0ID0gRkFMU0UpDQpgYGANCg0KIyMgKipUw61uaCBPZGRzIFJhdGlvLCBSZWxhdGl2ZSBSaXNrKioNCg0KIyMjICoqVOG7tyBz4buRIG5ndXkgY8ahIChSZWxhdGl2ZSBSaXNrIC0gUlIpKioNCg0KKipLaMOhaSBuaeG7h206KiogUmVsYXRpdmUgUmlzayAoUlIpIGzDoCB04bu3IGzhu4cgZ2nhu69hIHjDoWMgc3XhuqV0IHjhuqN5IHJhIHPhu7Ega2nhu4duIOG7nyBuaMOzbSB0aeG6v3AgeMO6YyBzbyB24bubaSBuaMOzbSBraMO0bmcgdGnhur9wIHjDumMuDQoNCioqQ8O0bmcgdGjhu6ljOioqDQoNClxbDQpSUiA9IFxmcmFje1xmcmFje2F9e2ErYn19e1xmcmFje2N9e2MrZH19DQpcXQ0KDQoqKkRp4buFbiBnaeG6o2k6KioNCg0KLSBSUiA9IDE6IEtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgduG7gSBuZ3V5IGPGoSBnaeG7r2EgaGFpIG5ow7NtLg0KLSBSUiA+IDE6IE5ndXkgY8ahIOG7nyBuaMOzbSB0aeG6v3AgeMO6YyBjYW8gaMahbiBuaMOzbSBraMO0bmcgdGnhur9wIHjDumMuDQotIFJSIDwgMTogTmd1eSBjxqEg4bufIG5ow7NtIHRp4bq/cCB4w7pjIHRo4bqlcCBoxqFuIG5ow7NtIGtow7RuZyB0aeG6v3AgeMO6Yy4NCg0KIyMjICoqVOG7tyBz4buRIGNow6puaCAoT2RkcyBSYXRpbyAtIE9SKSoqDQoNCioqS2jDoWkgbmnhu4dtOioqIE9kZHMgUmF0aW8gKE9SKSBsw6AgdOG7tyBs4buHIGdp4buvYSBvZGRzIHjhuqN5IHJhIHPhu7Ega2nhu4duIOG7nyBuaMOzbSB0aeG6v3AgeMO6YyBzbyB24bubaSBuaMOzbSBraMO0bmcgdGnhur9wIHjDumMuDQoNCioqQ8O0bmcgdGjhu6ljOioqDQoNClxbDQpPUiA9IFxmcmFje1xmcmFje2F9e2J9fXtcZnJhY3tjfXtkfX0gPSBcZnJhY3thIFx0aW1lcyBkfXtiIFx0aW1lcyBjfQ0KXF0NCg0KKipEaeG7hW4gZ2nhuqNpOioqDQoNCi0gT1IgPSAxOiBLaMO0bmcgY8OzIHPhu7Ega2jDoWMgYmnhu4d0IHbhu4Egb2RkcyBnaeG7r2EgaGFpIG5ow7NtLg0KLSBPUiA+IDE6IE9kZHMgeOG6o3kgcmEgc+G7sSBraeG7h24g4bufIG5ow7NtIHRp4bq/cCB4w7pjIGNhbyBoxqFuIG5ow7NtIGtow7RuZyB0aeG6v3AgeMO6Yy4NCi0gT1IgPCAxOiBPZGRzIHjhuqN5IHJhIHPhu7Ega2nhu4duIOG7nyBuaMOzbSB0aeG6v3AgeMO6YyB0aOG6pXAgaMahbiBuaMOzbSBraMO0bmcgdGnhur9wIHjDumMuDQoNCioqQ8OhYyBixrDhu5tjIHRo4buxYyBoaeG7h24gdHLDqm4gUioqDQoNCmBgYHtyfQ0KIyBM4bqleSBz4buRIGxp4buHdQ0KYSA8LSB0YWJsZV9nZW5kZXJfaG9tZW93bmVyWyJGIiwgIlkiXQ0KYiA8LSB0YWJsZV9nZW5kZXJfaG9tZW93bmVyWyJGIiwgIk4iXQ0KYyA8LSB0YWJsZV9nZW5kZXJfaG9tZW93bmVyWyJNIiwgIlkiXQ0KZCA8LSB0YWJsZV9nZW5kZXJfaG9tZW93bmVyWyJNIiwgIk4iXQ0KDQojIFTDrW5oIE9kZHMNCm9kZHNfZmVtYWxlIDwtIGEgLyBiDQpvZGRzX21hbGUgPC0gYyAvIGQNCg0KIyBPZGRzIFJhdGlvIChPUikNCm9yIDwtIG9kZHNfZmVtYWxlIC8gb2Rkc19tYWxlDQoNCiMgUmVsYXRpdmUgUmlzayAoUlIpDQpyaXNrX2ZlbWFsZSA8LSBhIC8gKGEgKyBiKQ0Kcmlza19tYWxlIDwtIGMgLyAoYyArIGQpDQpyciA8LSByaXNrX2ZlbWFsZSAvIHJpc2tfbWFsZQ0KDQpsaXN0KA0KICBvZGRzX2ZlbWFsZSA9IG9kZHNfZmVtYWxlLA0KICBvZGRzX21hbGUgPSBvZGRzX21hbGUsDQogIE9SID0gb3IsDQogIFJSID0gcnINCikNCmBgYA0KDQoNCioqS2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gT2RkcyBSYXRpbyoqDQoNCkRvIE9SIGtow7RuZyBwaMOibiBwaOG7kWkgY2h14bqpbiwgbsOqbiBs4bqleSBsb2coT1IpIMSR4buDIHjDonkgZOG7sW5nIGtob+G6o25nIHRpbiBj4bqteToNCg0KXFsNCkNJX3tsb2coT1IpfSA9IFxsb2coT1IpIFxwbSBaIFxjZG90IFNFX3tsb2coT1IpfQ0KXF0NCg0KVuG7m2k6DQpcWw0KU0UgPSBcc3FydHtcZnJhY3sxfXthfSArIFxmcmFjezF9e2J9ICsgXGZyYWN7MX17Y30gKyBcZnJhY3sxfXtkfX0NClxdDQoNCkNodXnhu4NuIHbhu4EgdGhhbmcgT1IgYuG6sW5nIGjDoG0gbcWpOiBcKCBlXntDSX0gXCkuDQoNCioqQ8OhYyBixrDhu5tjIHRo4buxYyBoaeG7h24gdHLDqm4gUioqDQoNCmBgYHtyfQ0Kc2VfbG9nX29yIDwtIHNxcnQoMS9hICsgMS9iICsgMS9jICsgMS9kKQ0KeiA8LSAxLjk2ICAjIGjhu4cgc+G7kSBjaG8gOTUlDQpjaV9sb3dlciA8LSBleHAobG9nKG9yKSAtIHogKiBzZV9sb2dfb3IpDQpjaV91cHBlciA8LSBleHAobG9nKG9yKSArIHogKiBzZV9sb2dfb3IpDQpjKGNpX2xvd2VyLCBjaV91cHBlcikNCmBgYA0KDQoqKk5o4bqtbiB4w6l0OioqDQoNCi0gTuG6v3UgKipPUiA8IDEqKiwgb2RkcyBj4bunYSB2aeG7h2Mgc+G7nyBo4buvdSBuaMOgIOG7nyBuaMOzbSBGZW1hbGUgbmjhu48gaMahbiBNYWxlLg0KLSBO4bq/dSAqKlJSIDwgMSoqLCBwaOG7pSBu4buvIGPDsyBuZ3V5IGPGoSBz4bufIGjhu691IG5ow6AgdGjhuqVwIGjGoW4gbmFtIGdp4bubaS4NCg0KS+G6v3QgbHXhuq1uIGPhuqduIMSRaSBrw6htIHbhu5tpIGtp4buDbSDEkeG7i25oIENoaS1zcXVhcmUgdsOgIGtob+G6o25nIHRpbiBj4bqteSwga2jDtG5nIG7Dqm4gY2jhu4kgbmjDrG4gdsOgbyBPUi9SUi4NCg0KxJDDonkgbMOgIG3hu5l0IHbDrSBk4bulIMSRaeG7g24gaMOsbmggY2hvIHZp4buHYyBz4butIGThu6VuZyBPZGRzIFJhdGlvIHRyb25nIGtpbmggdOG6vy94w6MgaOG7mWkgaOG7jWMgxJHhu4MgbcO0IHThuqMgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgaGFpIMSR4bq3YyDEkWnhu4NtIHBow6JuIGxv4bqhaS4NCg0KIyMgKipUaOG7sWMgaMOgbmggdHLDqm4gYuG7mSBk4buvIGxp4buHdSoqDQoNCioqVOG6oW8gYuG6o25nIHThuqduIHPhu5EqKg0KDQpgYGB7cn0NCiMgQuG6o25nIHThuqduIHPhu5EgY2jDqW8gZ2nhu69hIE1hcml0YWxTdGF0dXMgdsOgIEhvbWVvd25lcg0KdGJsIDwtIHRhYmxlKGRhdGEkTWFyaXRhbFN0YXR1cywgZGF0YSRIb21lb3duZXIpDQp0YmwNCmBgYA0KDQoqKk5o4bqtbiB4w6l0KioNCg0KLSAqKktow6FjaCBow6BuZyDEkcOjIGvhur90IGjDtG4gKE0pKio6IEPDsyB04bubaSA1MTQ3IG5nxrDhu51pIHPhu58gaOG7r3UgbmjDoCDhu58sIGNoaeG6v20gcGjhuqduIGzhu5tuIHRyb25nIG5ow7NtIG7DoHksIHRyb25nIGtoaSBjaOG7iSBjw7MgMTcxOSBuZ8aw4budaSBraMO0bmcgc+G7nyBo4buvdSBuaMOgLg0KDQotICoqS2jDoWNoIGjDoG5nIMSR4buZYyB0aMOibiAoUykqKjogTmfGsOG7o2MgbOG6oWksIG5ow7NtIG7DoHkgY8OzIHh1IGjGsOG7m25nIGtow7RuZyBz4bufIGjhu691IG5ow6Ag4bufIGNhbyBoxqFuIHbhu5tpIDM4OTYgbmfGsOG7nWksIHRyb25nIGtoaSBz4buRIG5nxrDhu51pIHPhu58gaOG7r3UgbmjDoCBjaOG7iSBsw6AgMzI5NyBuZ8aw4budaS4NCg0KKipLaeG7g20gxJHhu4tuaCBDaGktc3F1YXJlKioNCg0KYGBge3J9DQpjaGlfdGVzdCA8LSBjaGlzcS50ZXN0KHRibCkNCmNoaV90ZXN0DQpgYGANCg0KKipL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaDoqKg0KDQotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogQ2hpLWLDrG5oIHBoxrDGoW5nOiBYLXNxdWFyZWQgPSAxMjQxLjINCg0KLSBC4bqtYyB04buxIGRvOiBkZiA9IDENCg0KLSBHacOhIHRy4buLIHA6IHAtdmFsdWUgPCAyLjJlLTE2DQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gVsOsIGdpw6EgdHLhu4sgcCBy4bqldCBuaOG7jyAocCA8IDAuMDUpLCB0YSBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3Qga2jDtG5nIEgwLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gdsOgIHTDrG5oIHRy4bqhbmcgc+G7nyBo4buvdSBuaMOgLg0KDQoqKlTDrW5oIE9kZHMgUmF0aW8gdsOgIFJlbGF0aXZlIFJpc2sqKg0KDQpgYGB7cn0NCiMgTOG7jWMgZOG7ryBsaeG7h3U6IGNo4buJIGzhuqV5IE1hcnJpZWQgdsOgIFNpbmdsZQ0KZGF0YTIgPC0gc3Vic2V0KGRhdGEsIE1hcml0YWxTdGF0dXMgJWluJSBjKCJNIiwgIlMiKSkNCg0KIyBU4bqhbyBi4bqjbmcgMngyDQp0YmwyIDwtIHRhYmxlKGRhdGEyJE1hcml0YWxTdGF0dXMsIGRhdGEyJEhvbWVvd25lcikNCnRibDINCg0KIyBUw61uaCB0b8OhbiBPZGRzIFJhdGlvIHbDoCBSZWxhdGl2ZSBSaXNrDQpsaWJyYXJ5KGVwaVIpDQplcGlfcmVzdWx0IDwtIGVwaS4yYnkyKHRibDIsIG1ldGhvZCA9ICJjb2hvcnQuY291bnQiLCBjb25mLmxldmVsID0gMC45NSkNCmVwaV9yZXN1bHQNCmBgYA0KDQoNCg0KIyMgKipL4bq/dCBxdeG6oyBwaMOibiB0w61jaCoqDQoNCioqQuG6o25nIGNow6lvIHThuqduIHN14bqldCBnaeG7r2EgTWFyaXRhbFN0YXR1cyB2w6AgSG9tZW93bmVyKioNCg0KfCBNYXJpdGFsIFN0YXR1cyB8IEtow7RuZyBz4bufIGjhu691IG5ow6AgKE4pIHwgQ8OzIHPhu58gaOG7r3UgbmjDoCAoWSkgfCBU4buVbmcgY+G7mW5nIHwNCnwtLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS18DQp8IE1hcnJpZWQgKE0pICAgIHwgMSw3MTkgICAgICAgICAgICAgICAgfCA1LDE0NyAgICAgICAgICAgICAgfCA2LDg2NiAgICAgfA0KfCBTaW5nbGUgKFMpICAgICB8IDMsODk2ICAgICAgICAgICAgICAgIHwgMywyOTcgICAgICAgICAgICAgIHwgNywxOTMgICAgIHwNCnwgKipU4buVbmcgY+G7mW5nKiogIHwgNSw2MTUgICAgICAgICAgICAgICAgfCA4LDQ0NCAgICAgICAgICAgICAgfCAxNCwwNTkgICAgfA0KDQotLS0NCg0KKipU4bu3IGzhu4cgaGnhu4duIG3huq9jIChJbmNpZGVuY2UgUmlzaykqKg0KDQotICoqTmjDs20gTWFycmllZCoqOiAyNS4wNCUgKENJOiAyNC4wMiDigJMgMjYuMDgpDQotICoqTmjDs20gU2luZ2xlKio6IDU0LjE2JSAoQ0k6IDUzLjAwIOKAkyA1NS4zMikNCg0KTmjhu69uZyBuZ8aw4budaSAqKsSR4buZYyB0aMOibioqIGPDsyB4w6FjIHN14bqldCBraMO0bmcgc+G7nyBo4buvdSBuaMOgICoqY2FvIGjGoW4gZ+G6pXAgxJHDtGkqKiBzbyB24bubaSBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4uDQoNCi0tLQ0KDQoqKlJlbGF0aXZlIFJpc2sgKFJSKSoqDQoNCi0gKipSUiA9IDAuNDYqKiAoOTUlIENJOiAwLjQ0IOKAkyAwLjQ4KQ0KDQpOZ3V5IGPGoSBraMO0bmcgc+G7nyBo4buvdSBuaMOgIOG7nyBuaMOzbSDEkcOjIGvhur90IGjDtG4gY2jhu4kgYuG6sW5nICoqNDYlKiogc28gduG7m2kgbmjDs20gxJHhu5ljIHRow6JuLg0KDQotLS0NCg0KKipPZGRzIFJhdGlvIChPUikqKg0KDQotICoqT1IgPSAwLjI4KiogKDk1JSBDSTogMC4yNiDigJMgMC4zMCkNCg0KWMOhYyBzdeG6pXQga2jDtG5nIHPhu58gaOG7r3UgbmjDoCDhu58gbmjDs20gxJHDoyBr4bq/dCBow7RuIHRo4bqlcCBoxqFuICoqNzIlKiogc28gduG7m2kgbmjDs20gxJHhu5ljIHRow6JuLg0KDQotLS0NCg0KKipSaXNrIERpZmZlcmVuY2UgdsOgIEF0dHJpYnV0aW9uKioNCg0KLSAqKkNow6puaCBs4buHY2ggbmd1eSBjxqEgdHV54buHdCDEkeG7kWkgKHJpc2sgZGlmZmVyZW5jZSkqKjogLTI5LjEzIMSRaeG7g20gcGjhuqduIHRyxINtDQotICoqVOG7tyBs4buHIHF1eSB0csOhY2ggdHJvbmcgbmjDs20gcGjGoWkgbmhp4buFbSAoZXhwb3NlZCkqKjogLTExNi4zNCUNCi0gKipU4bu3IGzhu4cgcXV5IHRyw6FjaCB0b8OgbiBkw6JuIChwb3B1bGF0aW9uKSoqOiAtMzUuNjIlDQoNCsSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IHLhurFuZyB2aeG7h2Mga+G6v3QgaMO0biBjw7MgdGjhu4MgZ2nDunAgZ2nhuqNtIMSRw6FuZyBr4buDIHLhu6dpIHJvIGtow7RuZyBz4bufIGjhu691IG5ow6Ag4bufIGPhuqVwIMSR4buZIGPDoSBuaMOibiBs4bqrbiBkw6JuIHPhu5EuDQoNCi0tLQ0KDQoqKktp4buDbSDEkeG7i25oIMO9IG5naMSpYSB0aOG7kW5nIGvDqioqDQoNCi0gKipDaGktc3F1YXJlZCB0ZXN0Kio6IM+HwrIoMSkgPSAxMjQyLjQzLCBwIDwgMC4wMDENCi0gKipGaXNoZXLigJlzIGV4YWN0IHRlc3QqKjogcCA8IDAuMDAxDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIHbDoCB2aeG7h2Mgc+G7nyBo4buvdSBuaMOgIGzDoCAqKnLhuqV0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6oqKiAocCA8IDAuMDAxKS4NCg0KLS0tDQoNCioqS+G6v3QgbHXhuq1uOioqDQoNCi0gQ8OzIG3hu5FpIGxpw6puIGjhu4cgcuG6pXQgcsO1IHLDoG5nIHbDoCBjw7Mgw70gbmdoxKlhIGdp4buvYSB0w6xuaCB0cuG6oW5nIGjDtG4gbmjDom4gdsOgIHZp4buHYyBz4bufIGjhu691IG5ow6AuDQotIE5o4buvbmcgbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIGPDsyB04bu3IGzhu4cgdsOgIHjDoWMgc3XhuqV0IGtow7RuZyBz4bufIGjhu691IG5ow6AgKip0aOG6pXAgaMahbiDEkcOhbmcga+G7gyoqIHNvIHbhu5tpIG5nxrDhu51pIMSR4buZYyB0aMOibi4NCi0gxJDDonkgbMOgIG3hu5l0IHBow6F0IGhp4buHbiBxdWFuIHRy4buNbmcgY8OzIHRo4buDIMSRxrDhu6NjIHPhu60gZOG7pW5nIHRyb25nIGPDoWMgbmdoacOqbiBj4bupdSB4w6MgaOG7mWkgaOG7jWMgaG/hurdjIGNow61uaCBzw6FjaCBuaMOgIOG7ny4NCg0KDQojICoqQjogSE/huqBUIMSQ4buYTkcgVFLDik4gTOG7mlAqKg0KDQpUcm9uZyBob+G6oXQgxJHhu5luZyBuw6B5LCBjaMO6bmcgdGEgc+G6vSBz4butIGThu6VuZyBk4buvIGxp4buHdSAqKlN1cGVybWFya2V0IFRyYW5zYWN0aW9ucyoqIMSR4buDIHBow6JuIHTDrWNoIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGPDoWMgYmnhur9uIG5o4buLIHBow6JuLiBN4bulYyB0acOqdSBsw6A6DQoNCi0gVOG6oW8gYuG6o25nIDJ4Mg0KLSBUw61uaCB2w6AgZGnhu4VuIGdp4bqjaSBIaeG7h3UgaGFpIHThu7cgbOG7hyAoRGlmZmVyZW5jZSBpbiBQcm9wb3J0aW9ucykNCi0gVMOtbmggUmVsYXRpdmUgUmlzayAoUlIpIHbDoCBPZGRzIFJhdGlvIChPUikNCi0gVMOtbmgga2hv4bqjbmcgdGluIGPhuq15IDk1JSBjaG8gT1INCi0gVGjhu7FjIGhp4buHbiBwaMOibiB0w61jaCBwaMOibiB04bqnbmcgKHN0cmF0aWZpZWQgYW5hbHlzaXMpDQoNCi0tLQ0KDQojIyAqKsSQ4buNYyB2w6AgbMOgbSBxdWVuIHbhu5tpIGThu68gbGnhu4d1KioNCg0KQuG7mSBk4buvIGxp4buHdSDigJxTdXBlcm1hcmtldCBUcmFuc2FjdGlvbnPigJ0gcGjhuqNuIMOhbmggY8OhYyBnaWFvIGThu4tjaCBtdWEgaMOgbmcgY+G7p2Ega2jDoWNoIGjDoG5nIHThuqFpIG3hu5l0IHNpw6p1IHRo4buLIHRyb25nIG3hu5l0IGtob+G6o25nIHRo4budaSBnaWFuIGPhu6UgdGjhu4MuIE3hu5dpIGTDsm5nIGThu68gbGnhu4d1IHTGsMahbmcg4bupbmcgduG7m2kgbeG7mXQgZ2lhbyBk4buLY2gsIGJhbyBn4buTbSB0aMO0bmcgdGluIG5ow6JuIGto4bqpdSBo4buNYyAoZ2nhu5tpIHTDrW5oLCBsb+G6oWkgdGjDoG5oIHZpw6puLCBjaGkgbmjDoW5oKSwgxJHhurdjIMSRaeG7g20gc+G6o24gcGjhuqltIChsb+G6oWkgc+G6o24gcGjhuqltLCBrw6puaCB0aGFuaCB0b8OhbiksIHbDoCBjw6FjIHnhur91IHThu5EgaMOgbmggdmkgdGnDqnUgZMO5bmcgKHRo4budaSBnaWFuIG11YSBz4bqvbSwgbeG7qWMgxJHhu5kgaMOgaSBsw7JuZywgZ2nDoSB0cuG7iyDEkcahbiBow6BuZywuLi4pLiBU4bqtcCBk4buvIGxp4buHdSBn4buTbSAxNC4wNTkgcXVhbiBzw6F0IHbDoCAxNiBiaeG6v24sIGN1bmcgY+G6pXAgbuG7gW4gdOG6o25nIGNoaSB0aeG6v3QgxJHhu4MgcGjDom4gdMOtY2ggaMOgbmggdmkga2jDoWNoIGjDoG5nIHbDoCBoaeG7h3UgcXXhuqMga2luaCBkb2FuaCBj4bunYSBzacOqdSB0aOG7iy4NCg0KYGBge3J9DQojIMSQ4buNYyBmaWxlDQpsaWJyYXJ5KCJjc3YiKQ0KZGF0YSA8LSByZWFkLmNzdigiQzovVXNlcnMvQWRtaW4vRG93bmxvYWRzL1N1cGVybWFya2V0IFRyYW5zYWN0aW9ucy5jc3YiLCBoZWFkZXIgPSBUKQ0KDQojIEhp4buDbiB0aOG7iyBj4bqldSB0csO6YyBk4buvIGxp4buHdQ0Kc3RyKGRhdGEpDQoNCiMgSGnhu4NuIHRo4buLIHbDoGkgZMOybmcgxJHhuqd1IHbDoCBjdeG7kWkNCmhlYWQoZGF0YSkNCnRhaWwoZGF0YSkNCg0KIyBDaHV54buDbiBjw6FjIGJp4bq/biDEkeG7i25oIHTDrW5oIHBow7kgaOG7o3Agc2FuZyBmYWN0b3INCmZhY3RvciA8LSBjKCJHZW5kZXIiLCAiTWFyaXRhbFN0YXR1cyIsICJIb21lb3duZXIiLCAiQW5udWFsSW5jb21lIiwNCiAgICAgICAgICAgICAgICAgICAgIkNpdHkiLCAiU3RhdGVvclByb3ZpbmNlIiwgIkNvdW50cnkiLA0KICAgICAgICAgICAgICAgICAgICAiUHJvZHVjdEZhbWlseSIsICJQcm9kdWN0RGVwYXJ0bWVudCIsICJQcm9kdWN0Q2F0ZWdvcnkiKQ0KDQojIEtp4buDbSB0cmEgYmnhur9uIG7DoG8gdOG7k24gdOG6oWkgdHJvbmcgZGF0YQ0KZmFjdG9yIDwtIGludGVyc2VjdChmYWN0b3IsIG5hbWVzKGRhdGEpKQ0KDQojIENodXnhu4NuIHNhbmcgZmFjdG9yDQpkYXRhW2ZhY3Rvcl0gPC0gbGFwcGx5KGRhdGFbZmFjdG9yXSwgYXMuZmFjdG9yKQ0KDQojIEtp4buDbSB0cmEgbOG6oWkgY+G6pXUgdHLDumMNCnN0cihkYXRhKQ0KYGBgDQoNCioqR2nhuqNpIHRow61jaCBjw6FjIGJp4bq/bioqDQoNCkLhu5kgZOG7ryBsaeG7h3UgZ2hpIGzhuqFpIHRow7RuZyB0aW4gduG7gSBjw6FjIGdpYW8gZOG7i2NoIG11YSBow6BuZyBj4bunYSBraMOhY2ggaMOgbmcsIGJhbyBn4buTbSB0aMO0bmcgdGluIG5ow6JuIGto4bqpdSBo4buNYywgdGjDtG5nIHRpbiBz4bqjbiBwaOG6qW0sIHPhu5EgbMaw4bujbmcgYsOhbiByYSB2w6AgZG9hbmggdGh1LiBE4buvIGxp4buHdSBiYW8gZ+G7k20gMTQwNTkgcXVhbiBzw6F0IHbDoCAxNiBiaeG6v24uIETGsOG7m2kgxJHDonkgbMOgIG3DtCB04bqjIGNoaSB0aeG6v3QgY8OhYyBiaeG6v24gY8OzIHRyb25nIGLhu5kgZOG7ryBsaeG7h3U6DQoNCnwgICAgKipUw6puIEJp4bq/bioqICAgICAgICAgICB8ICAgICoqw50gTmdoxKlhKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfA0KfCAqKlB1cmNoYXNlRGF0ZSoqICAgICAgICAgfCBOZ8OgeSBnaWFvIGThu4tjaCBtdWEgaMOgbmcgZGnhu4VuIHJhICjEkeG7i25oIGThuqFuZyBuZ8OgeS90aMOhbmcvbsSDbSkuICAgICAgICAgICAgICAgICB8DQp8ICoqQ3VzdG9tZXJJRCoqICAgICAgICAgIHwgTcOjIMSR4buLbmggZGFuaCBkdXkgbmjhuqV0IGNobyBt4buXaSBraMOhY2ggaMOgbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipHZW5kZXIqKiAgICAgICAgICAgICAgIHwgR2nhu5tpIHTDrW5oIGPhu6dhIGtow6FjaCBow6BuZzogKipNKiogKE5hbSksICoqRioqIChO4buvKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqTWFyaXRhbFN0YXR1cyoqICAgICAgICB8IFTDrG5oIHRy4bqhbmcgaMO0biBuaMOibjogKipTKiogKMSQ4buZYyB0aMOibiksICoqTSoqICjEkMOjIGvhur90IGjDtG4pLiAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqSG9tZW93bmVyKiogICAgICAgICAgICB8IFTDrG5oIHRy4bqhbmcgc+G7nyBo4buvdSBuaMOgOiAqKlkqKiAoQ8OzKSwgKipOKiogKEtow7RuZykuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipDaGlsZHJlbioqICAgICAgICAgICAgIHwgU+G7kSBsxrDhu6NuZyBjb24gY8OhaSBj4bunYSBraMOhY2ggaMOgbmcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqQW5udWFsSW5jb21lKiogICAgICAgICB8IE3hu6ljIHRodSBuaOG6rXAgaMOgbmcgbsSDbSB0aGVvIGtob+G6o25nIChWw60gZOG7pTogKiokMzBLIC0gJDUwSyoqKS4gICAgICAgICAgICAgICAgICB8DQp8ICoqQ2l0eSoqICAgICAgICAgICAgICAgICB8IFRow6BuaCBwaOG7kSBuxqFpIGtow6FjaCBow6BuZyB0aOG7sWMgaGnhu4duIGdpYW8gZOG7i2NoLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8ICoqU3RhdGVvclByb3ZpbmNlKiogICAgICB8IEJhbmcgaG/hurdjIHThu4luaCAodsOtIGThu6U6ICoqQ0EqKiBjaG8gQ2FsaWZvcm5pYSwgKipPUioqIGNobyBPcmVnb24pLiAgICAgICAgICAgICAgIHwNCnwgKipDb3VudHJ5KiogICAgICAgICAgICAgIHwgUXXhu5FjIGdpYS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwNCnwgKipQcm9kdWN0RmFtaWx5KiogICAgICAgIHwgTmjDs20gc+G6o24gcGjhuqltIGNow61uaDogKipGb29kKiogKFRo4buxYyBwaOG6qW0pLCAqKkRyaW5rKiogKMSQ4buTIHXhu5FuZyksICoqTm9uLUNvbnN1bWFibGUqKiAoS2jDtG5nIHRpw6p1IGTDuW5nKS4gfA0KfCAqKlByb2R1Y3REZXBhcnRtZW50KiogICAgfCBC4buZIHBo4bqtbiBz4bqjbiBwaOG6qW0gbmjGsCAqKlNuYWNrIEZvb2RzKiosICoqRnJvemVuIEZvb2RzKiosIHYudi4gICAgICAgICAgICAgICAgICAgIHwNCnwgKipQcm9kdWN0Q2F0ZWdvcnkqKiAgICAgIHwgRGFuaCBt4bulYyBz4bqjbiBwaOG6qW0gY+G7pSB0aOG7gyBoxqFuLCB2w60gZOG7pTogKipDYW5keSoqLCAqKkJlZXIgYW5kIFdpbmUqKi4gICAgICAgICAgICAgIHwNCnwgKipVbml0c1NvbGQqKiAgICAgICAgICAgIHwgU+G7kSBsxrDhu6NuZyDEkcahbiB24buLIHPhuqNuIHBo4bqpbSDEkcOjIGLDoW4gdHJvbmcgZ2lhbyBk4buLY2ggxJHDsy4gICAgICAgICAgICAgICAgICAgICAgICAgfA0KfCAqKlJldmVudWUqKiAgICAgICAgICAgICAgfCBEb2FuaCB0aHUgdOG7qyBnaWFvIGThu4tjaCAodMOtbmggdGhlbyBVU0QpLiAgIHwNCg0KDQotLS0NCg0KIyMgKipQaMOibiB0w61jaCBt4buRaSBsacOqbiBo4buHIGdp4buvYSBHZW5kZXIgdsOgIEhvbWVvd25lcioqDQoNCiMjIyAqKlThuqFvIGLhuqNuZyB04bqnbiBz4buRIGNow6lvKioNCg0KYGBge3J9DQp0YWJsZV9nZW5kZXJfaG9tZSA8LSB0YWJsZShkYXRhJEdlbmRlciwgZGF0YSRIb21lb3duZXIpDQp0YWJsZV9nZW5kZXJfaG9tZQ0KYGBgDQoNCkThu7FhIHbDoG8gYuG6o25nIHRyw6puOg0KDQotICoqTuG7ryAoRikqKiBjw7MgdOG7lW5nIGPhu5luZyBgciBzdW0odGFibGVfZ2VuZGVyX2hvbWVbIkYiLCBdKWAgbmfGsOG7nWksIHRyb25nIMSRw7MgYHIgdGFibGVfZ2VuZGVyX2hvbWVbIkYiLCAiWSJdYCBuZ8aw4budaSBz4bufIGjhu691IG5ow6AsIGNoaeG6v20ga2hv4bqjbmcgYHIgcm91bmQoMTAwICogdGFibGVfZ2VuZGVyX2hvbWVbIkYiLCAiWSJdIC8gc3VtKHRhYmxlX2dlbmRlcl9ob21lWyJGIiwgXSksIDEpYCUuDQoNCi0gKipOYW0gKE0pKiogY8OzIHThu5VuZyBj4buZbmcgYHIgc3VtKHRhYmxlX2dlbmRlcl9ob21lWyJNIiwgXSlgIG5nxrDhu51pLCB24bubaSBgciB0YWJsZV9nZW5kZXJfaG9tZVsiTSIsICJZIl1gIG5nxrDhu51pIHPhu58gaOG7r3UgbmjDoCwgdMawxqFuZyDhu6luZyBraG/huqNuZyBgciByb3VuZCgxMDAgKiB0YWJsZV9nZW5kZXJfaG9tZVsiTSIsICJZIl0gLyBzdW0odGFibGVfZ2VuZGVyX2hvbWVbIk0iLCBdKSwgMSlgJS4NCg0KKipOaOG6rW4geMOpdDoqKiANCg0KVOG7tyBs4buHIHPhu58gaOG7r3UgbmjDoCBj4bunYSBu4buvIGPDsyB24bq7IG5o4buJbmggaMahbiBt4buZdCBjaMO6dCBzbyB24bubaSBuYW0gKGtob+G6o25nIDYwLjYlIHNvIHbhu5tpIDU5LjUlKSwgdHV5IG5oacOqbiBz4buxIGtow6FjIGJp4buHdCBuw6B5IGzDoCBraMOhIG5o4buPLiAgDQrEkOG7gyDEkcOhbmggZ2nDoSByw7UgcsOgbmcgaMahbiB24buBIG3hu6ljIMSR4buZIGxpw6puIGjhu4cgZ2nhu69hIGhhaSBiaeG6v24sIHRhIHPhur0gdGnhur9wIHThu6VjIHTDrW5oIGPDoWMgY2jhu4kgc+G7kSDEkeG7i25oIGzGsOG7o25nIG5oxrA6ICANCkhp4buHdSBoYWkgdOG7tyBs4buHIChEaWZmZXJlbmNlIGluIFByb3BvcnRpb25zKSwgUmVsYXRpdmUgUmlzayAoUlIpLCBPZGRzIFJhdGlvIChPUikuDQoNCi0tLQ0KDQojIyMgKipUw61uaCBIaeG7h3UgSGFpIFThu7cgTOG7hyoqDQoNCmBgYHtyfQ0KcHJvcF90YWJsZSA8LSBwcm9wLnRhYmxlKHRhYmxlX2dlbmRlcl9ob21lLCBtYXJnaW4gPSAxKQ0KcHJvcF90YWJsZQ0KDQpkaWZmX3Byb3AgPC0gcHJvcF90YWJsZVsxLCAiWSJdIC0gcHJvcF90YWJsZVsyLCAiTiJdDQpkaWZmX3Byb3ANCmBgYA0KDQpU4bu3IGzhu4cgc+G7nyBo4buvdSBuaMOgOg0KDQotIOG7niAqKm7hu68qKiBsw6AgYHIgcm91bmQocHJvcF90YWJsZVsxLCAiWSJdLCA0KWAgKHThu6ljIGzDoCBgciByb3VuZCgxMDAgKiBwcm9wX3RhYmxlWzEsICJZIl0sIDEpYCUpDQoNCi0g4bueICoqbmFtKiogbMOgIGByIHJvdW5kKHByb3BfdGFibGVbMiwgIlkiXSwgNClgICh04bupYyBsw6AgYHIgcm91bmQoMTAwICogcHJvcF90YWJsZVsyLCAiWSJdLCAxKWAlKQ0KDQpIaeG7h3UgaGFpIHThu7cgbOG7hyBnaeG7r2EgbuG7ryB2w6AgbmFtIGzDoCBgciByb3VuZChkaWZmX3Byb3AsIDQpYCwgdMawxqFuZyDEkcawxqFuZyBgciByb3VuZCgxMDAgKiBkaWZmX3Byb3AsIDIpYCDEkWnhu4NtIHBo4bqnbiB0csSDbS4NCg0KKipL4bq/dCBsdeG6rW46KiogIA0KDQpU4bu3IGzhu4cgbuG7ryBz4bufIGjhu691IG5ow6AgY2FvIGjGoW4gbmFtIGtob+G6o25nIDEuMDAlLCB0dXkgbmhpw6puIG3hu6ljIGNow6puaCBs4buHY2ggbsOgeSBraMOhIG5o4buPIHbDoCBjaMawYSB0aOG7gyBr4bq/dCBsdeG6rW4gY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBu4bq/dSBjaMawYSB0w61uaCBraG/huqNuZyB0aW4gY+G6rXkgKGNvbmZpZGVuY2UgaW50ZXJ2YWwpIGhv4bq3YyB0aOG7sWMgaGnhu4duIGPDoWMga2nhu4NtIMSR4buLbmggdGjhu5FuZyBrw6ogY2jDrW5oIHRo4bupYyBuaMawIGtp4buDbSDEkeG7i25oIHogaG/hurdjIGNoaSBiw6xuaCBwaMawxqFuZy4NCg0KLS0tDQoNCiMjIyAqKlTDrW5oIFJlbGF0aXZlIFJpc2sgKFJSKSoqDQoNCmBgYHtyfQ0KbGlicmFyeShlcGl0b29scykNCnJyX3Jlc3VsdCA8LSByaXNrcmF0aW8odGFibGVfZ2VuZGVyX2hvbWUpDQpycl9yZXN1bHQkbWVhc3VyZQ0KYGBgDQoNCkThu7FhIHbDoG8ga+G6v3QgcXXhuqMgdGEgdGjhuqV5IFJlbGF0aXZlIFJpc2sgKFJSKSBj4bunYSBuYW0gc28gduG7m2kgbuG7ryBsw6AgYHIgcm91bmQocnJfcmVzdWx0JG1lYXN1cmVbIk0iLCAiZXN0aW1hdGUiXSwgNClgLiBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGPhu6dhIFJSIG7hurFtIHRyb25nIGtob+G6o25nIHThu6sgYHIgcm91bmQocnJfcmVzdWx0JG1lYXN1cmVbIk0iLCAibG93ZXIiXSwgNClgIMSR4bq/biBgciByb3VuZChycl9yZXN1bHQkbWVhc3VyZVsiTSIsICJ1cHBlciJdLCA0KWAuDQoNCioqS+G6v3QgbHXhuq1uOioqICANClJSIDwgMSBjaG8gdGjhuqV5IG5hbSBjw7MgdOG7tyBs4buHIHPhu58gaOG7r3UgbmjDoCB0aOG6pXAgaMahbiBu4buvIG3hu5l0IGNow7p0IChjaOG7iSBjw7JuIGtob+G6o25nIGByIHJvdW5kKHJyX3Jlc3VsdCRtZWFzdXJlWyJNIiwgImVzdGltYXRlIl0sIDQpICogMTAwYCUgc28gduG7m2kgbuG7rykuIFR1eSBuaGnDqm4sIHbDrCBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGJhbyBn4buTbSBnacOhIHRy4buLIDEuMCwgbsOqbiBraMO0bmcgY8OzIGLhurFuZyBjaOG7qW5nIMSR4bunIG3huqFuaCDEkeG7gyBr4bq/dCBsdeG6rW4gc+G7sSBraMOhYyBiaeG7h3QgbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLiBOw7NpIGPDoWNoIGtow6FjLCB04bu3IGzhu4cgc+G7nyBo4buvdSBuaMOgIGdp4buvYSBuYW0gdsOgIG7hu68gY8OzIHRo4buDIGNvaSBsw6AgdMawxqFuZyDEkcawxqFuZy4NCg0KLS0tDQoNCiMjIyAqKlTDrW5oIE9kZHMgUmF0aW8gKE9SKSB2w6AgS2hv4bqjbmcgVGluIEPhuq15KioNCg0KYGBge3J9DQpsaWJyYXJ5KGVwaXRvb2xzKQ0Kb3JfcmVzdWx0IDwtIG9kZHNyYXRpbyh0YWJsZV9nZW5kZXJfaG9tZSkNCm9yX3Jlc3VsdA0Kb3JfcmVzdWx0JGNvbmYuaW50DQpgYGANCg0KUGjDom4gdMOtY2ggYuG6o25nIHRow6wgZ2nhu69hIGhhaSBuaMOzbSBnaeG7m2kgdMOtbmggKEYgdsOgIE0pIGNobyB0aOG6pXk6DQoNCi0gVOG7tyBz4buRIG9kZHMgKG9kZHMgcmF0aW8pIGdp4buvYSBuaMOzbSBuYW0gKE0pIHNvIHbhu5tpIG7hu68gKEYpIGzDoCAqKjAuOTYqKiwgduG7m2kga2hv4bqjbmcgdGluIGPhuq15IDk1JSBsw6AgKipbMC44OTsgMS4wMl0qKi4NCi0gR2nDoSB0cuG7iyBwIHThu6sgY8OhYyBwaMOpcCBraeG7g20gxJHhu4tuaCBoYWkgcGjDrWE6DQogIC0gTWlkLXAgZXhhY3Q6ICoqcCA9IDAuMTk1KioNCiAgLSBGaXNoZXIncyBleGFjdDogKipwID0gMC4xOTYqKg0KICAtIENoaS1zcXVhcmU6ICoqcCA9IDAuMTk1KioNCg0KRG8gdOG6pXQgY+G6oyBjw6FjIGdpw6EgdHLhu4sgcCDEkeG7gXUgbOG7m24gaMahbiBt4bupYyDDvSBuZ2jEqWEgdGjDtG5nIHRoxrDhu51uZyAoKirOsSA9IDAuMDUqKiksIGtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2EgbmjDs20gbmFtIHbDoCBu4buvIHbhu4EgYmnhur9uIMSRxrDhu6NjIHBow6JuIHTDrWNoLg0KDQpOaMawIHbhuq15LCBr4bq/dCBxdeG6oyBjaG8gdGjhuqV5IGtow7RuZyBjw7MgbeG7kWkgbGnDqm4gcXVhbiByw7UgcuG7h3QgZ2nhu69hIGdp4bubaSB0w61uaCB2w6AgYmnhur9uLCB0aGVvIHBow6JuIHTDrWNoIG9kZHMgcmF0aW8gdsOgIGPDoWMga2nhu4NtIMSR4buLbmggeMOhYyBzdeG6pXQgdMawxqFuZyDhu6luZy4NCg0KDQo=