A. Đọc và Chuẩn bị trước buổi học

library(tidyverse)
library(DT)
library(scales)
library(psych)
library(knitr)
library(kableExtra)
library(DescTools)
library(epitools)
library(AER)

1. Ôn lại kiến thức Tuần 2

d<- read.csv("D:/HK2_PTDLDT_TMT/Supermarket Transactions.csv", header=T)
cat<- c("Gender", "MaritalStatus", "Homeowner", "AnnualIncome", "City", "StateorProvince", "Country", "ProductFamily", "ProductDepartment", "ProductCategory")
d_cat<-d[, cat]
datatable(d_cat,options = list(scrollX = TRUE))

1.1 Bảng tần số chéo

Bảng tần suất chéo

d2 <- table(d_cat$MaritalStatus,d_cat$Homeowner)
addmargins(d2)
##      
##           N     Y   Sum
##   M    1719  5147  6866
##   S    3896  3297  7193
##   Sum  5615  8444 14059

Bảng tần suất chéo theo tỷ lệ hàng

prop.table(d2, margin = 1)
##    
##             N         Y
##   M 0.2503641 0.7496359
##   S 0.5416377 0.4583623

Nhận xét

  • Dựa vào kết quả trên, ta nhận thấy trong nhóm người đã kết hôn (M) có 1719 người (25.04%) không sở hữu nhà và 5147 người (74.96%) sở hữu nhà. Còn nhóm người độc thân (S) có 3896 người (54.16%) không sở hữu nhà và 3297 người (45.84%) sở hữu nhà.

  • Qua đó ta nhận thấy mối quan hệ tích cực giữa việc kết hôn và sở hữu nhà. Người đã kết hôn có xu hướng ổn định hơn về mặt chỗ ở, có thể do điều kiện tài chính hoặc ưu tiên đầu tư lâu dài hơn so với người độc thân.

  • Xu hướng chung là kết hôn thường đi kèm với khả năng sở hữu nhà cao hơn, phản ánh mức độ ổn định và cam kết tài chính lâu dài hơn trong cuộc sống.

1.2 Kiểm định thống kê (Kiểm định Chi-bình phương)

Để đánh giá xem có mối liên hệ có ý nghĩa thống kê giữa hai biến phân loại là MaritalStatus và Homeowner hay không, sẽ sử dụng kiểm định Chi-bình phương (Chi-square test).

# Kiểm định
chisq_result <- chisq.test(d2)

# In kết quả
chisq_result
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  d2
## X-squared = 1241.2, df = 1, p-value < 2.2e-16

Giả thuyết:

\[ \left\{ \begin{array}{ll} H_0: & \text{Biến MaritalStatus và biến Homeowner không có mối quan hệ.} \\\\ H_1: & \text{ Biến MaritalStatus và biến Homeowner có mối quan hệ.} \ \end{array} \right. \]

Kết quả kiểm định: Với mức ý nghĩa 0.0 với p-value = 2.2e-16 < 0.05, bác bỏ giả thuyết \(H_0\) tức là chấp nhận giả thuyết \(H_1\). Vậy giữa biến MaritalStatus và biến Homeowner có tồn tại mối quan hệ.

1.3 Relative Risk

e1 <- table(d_cat$Homeowner, d_cat$MaritalStatus)
addmargins(e1)
##      
##           M     S   Sum
##   N    1719  3896  5615
##   Y    5147  3297  8444
##   Sum  6866  7193 14059
RelRisk(e1)
## [1] 0.5022503
table(d$Homeowner,d$MaritalStatus)
##    
##        M    S
##   N 1719 3896
##   Y 5147 3297
m <- matrix(c(1719,5147,3896,3297),nrow = 2)
RelRisk(m, conf.level = .95)
## rel. risk    lwr.ci    upr.ci 
## 0.5022503 0.4810315 0.5241410
riskratio(e1, rev = 'b') #đưa chữ y lên trên
## $data
##        
##            S    M Total
##   Y     3297 5147  8444
##   N     3896 1719  5615
##   Total 7193 6866 14059
## 
## $measure
##    risk ratio with 95% C.I.
##      estimate     lower     upper
##   Y 1.0000000        NA        NA
##   N 0.5022503 0.4811506 0.5242752
## 
## $p.value
##    two-sided
##     midp.exact  fisher.exact    chi.square
##   Y         NA            NA            NA
##   N          0 1.822183e-277 3.663022e-272
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Tỷ số rủi ro (Relative Risk) được ước tính là 0.5023, với khoảng tin cậy 95% từ 0.4810 đến 0.5241. Điều này cho thấy những người không sở hữu nhà có khả năng đã kết hôn thấp hơn khoảng 50% so với những người có sở hữu nhà. Khoảng tin cậy 95% cho biết rằng, với độ tin cậy 95%, giá trị thực của tỷ số rủi ro nằm trong khoảng từ 0.4810 đến 0.5241. Vì khoảng này không chứa giá trị 1, sự khác biệt giữa hai nhóm được xem là có ý nghĩa thống kê.

2. Tìm hiểu về các nội dung của chương 2

2.1 Cấu trúc xác suất của bảng ngẫu nhiên

Phân phối Poisson

Phân phối Poisson là một xác suất rời rạc lý thuyết và cũng được gọi là hàm khối lượng xác suất phân phối Poisson. Nó được sử dụng để tìm xác suất của một sự kiện độc lập xảy ra trong một khoảng thời gian cố định và có tỷ lệ trung bình không đổi.

Ký hiệu: X∼Poisson(λ)

Hàm xác suất:Xác suất để có đúng \(k\) sự kiện xảy ra trong một khoảng thời gian (hoặc không gian) nhất định được cho bởi:

\[ P(X = k) = \frac{\lambda^k e^{-\lambda}}{k!} \]

Trong đó:

  • \(k\): số lần sự kiện xảy ra ( \(k = 0, 1, 2, \dots\) )
  • \(\lambda\): số lần xảy ra trung bình của sự kiện (tham số của phân phối Poisson)
  • \(e\): hằng số Euler, cơ số của logarit tự nhiên, \(e \approx 2.71828\)
  • \(k!\): giai thừa của \(k\), tức là \(k! = k \times (k-1) \times \dots \times 1\), và \(0! = 1\)

Đặc điểm quan trọng của phân phối Poisson

  • Kỳ vọng (Mean):

    \[ \mathbb{E}(X) = \lambda \]

  • Phương sai (Variance):

    \[ \mathrm{Var}(X) = \lambda \]

  • Khi \(\lambda\) nhỏ (ví dụ: λ < 5), phân phối bị lệch phải, tập trung nhiều ở phía trái.

  • Khi \(\lambda\) tăng lên (đặc biệt \(\lambda \geq 20\)), phân phối Poisson có thể được xấp xỉ tốt bằng phân phối Chuẩn:

    \[ X \sim \mathcal{N}(\lambda, \lambda) \] Phân phối Muultinomial

Phân phối Multinomial là một mở rộng của phân phối nhị thức (Bernoulli) cho nhiều hơn hai kết quả. Phân phối này mô tả xác suất của các kết quả đếm được trong \(n\) lần thử, trong đó mỗi lần thử có thể rơi vào một trong \(k\) loại (categories) với xác suất tương ứng.

Phân phối được ký hiệu là:

\[ \mathbf{Y} \sim \text{Multinomial}(n, \mathbf{p}) \]

Trong đó:

  • \(\mathbf{Y} = (Y_1, Y_2, \dots, Y_k)\) là vector số đếm cho từng loại.

  • \(n\) là tổng số lần thử (hay tổng số đếm): \(n = \sum_{i=1}^{k} Y_i\).

  • \(\mathbf{p} = (p_1, p_2, \dots, p_k)\) là vector xác suất, với \(p_i \ge 0\)\(\sum_{i=1}^{k} p_i = 1\).

Hàm xác suất được xác định như sau:

\[ P(Y_1 = y_1, \dots, Y_k = y_k) = \frac{n!}{y_1! \cdots y_k!} \cdot p_1^{y_1} \cdots p_k^{y_k} \]

2.2 So sánh 2 tỷ lệ trong bảng ngẫu nhiên 2x2

Risk Difference - RD

Risk Difference là mức chênh lệch tuyệt đối giữa xác suất xảy ra sự kiện ở hai nhóm.

Cách tính:

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

Ý nghĩa:

  • RD phản ánh sự khác biệt tuyệt đối giữa nguy cơ xảy ra sự kiện ở hai nhóm.

  • Nếu:

    • \(RD > 0\): Nhóm A có nguy cơ cao hơn nhóm B

    • \(RD < 0\): Nhóm A có nguy cơ thấp hơn nhóm B

Relative Risk - RR

Tỷ số rủi ro (RR) là tỷ lệ giữa xác suất xảy ra sự kiện ở nhóm phơi nhiễm so với nhóm không phơi nhiễm. Nó thể hiện mức tăng (hoặc giảm) tương đối về nguy cơ.

Cách tính:

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

Ý nghĩa:

  • \(RR = 1\): Không có sự khác biệt nguy cơ giữa hai nhóm

  • \(RR > 1\): Nhóm A có nguy cơ cao hơn

  • \(RR < 1\): Nhóm A có nguy cơ thấp hơn

Odds Ratio - OR

Odd Ratio (Tỷ số chênh) là một thước đo được sử dụng phổ biến trong thống kê, đặc biệt là trong nghiên cứu dịch tễ học, để đánh giá mối liên hệ giữa phơi nhiễm và kết quả.

Cách tính:

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

Ý nghĩa:

  • \(OR = 1\): Không có sự khác biệt odds giữa hai nhóm

  • \(OR > 1\): Odds xảy ra sự kiện ở nhóm A cao hơn

  • \(OR < 1\): Odds ở nhóm A thấp hơn

2.3 Khoảng tin cậy cho các tham số đo mối liên hệ

Khi ước lượng Odds Ratio (OR) do OR không phân bố chuẩn ta thường biến đổi logarit để làm việc trên thang log(OR), sau đó tính khoảng tin cậy (CI) và lấy mũ để chuyển về thang OR.

Sai số chuẩn (Standard Error - SE)

Công thức:

\[ SE(\log(\hat{\theta})) = \sqrt{ \frac{1}{n_{11}} + \frac{1}{n_{12}} + \frac{1}{n_{21}} + \frac{1}{n_{22}} } \]

Trong đó:

  • \(n_{11}, n_{12}, n_{21}, n_{22}\) là các ô trong bảng 2x2:
Sự kiện (+) Không sự kiện (−)
Nhóm 1 \(n_{11}\) \(n_{12}\)
Nhóm 2 \(n_{21}\) \(n_{22}\)

Khoảng tin cậy 95% cho log(OR)

\[ \log(\hat{\theta}) \pm z_{1 - \alpha/2} \cdot SE(\log(\hat{\theta})) \]

Với \(z_{1 - \alpha/2} = 1.96\) cho mức tin cậy 95%.

Khoảng tin cậy 95% cho OR

Chuyển về thang OR:

\[ CI_{OR} = \left[ \exp \left( \log(\hat{\theta}) - 1.96 \cdot SE \right),\ \exp \left( \log(\hat{\theta}) + 1.96 \cdot SE \right) \right] \]

Nhận xét

  • Nếu khoảng tin cậy không chứa 1, OR có ý nghĩa thống kê.

  • Nếu khoảng CI chứa 1 là không đủ bằng chứng thống kê để kết luận khác biệt.

2.4 Ví dụ

Trong ví dụ này, chúng ta sử dụng bộ dữ liệu CreditCard thuộc gói AER để phân tích mối liên hệ giữa tình trạng sở hữu nhà (owner) và quyết định cấp thẻ tín dụng (card). Dữ liệu này bao gồm thông tin về việc một cá nhân có được chấp nhận cấp thẻ tín dụng hay không, cùng với các đặc điểm cá nhân như có sở hữu nhà, thu nhập, trình độ học vấn, Chúng ta sẽ tập trung vào hai biến phân loại owner và card, từ đó xây dựng bảng 2×2 và tính tỷ số chênh Odds Ratio (OR) để đánh giá xem sở hữu nhà có ảnh hưởng đến khả năng được cấp thẻ hay không.

# Tải dữ liệu
data("CreditCard")
h1<- CreditCard
# Thay đổi giá trị của biến `card`và owner
library(dplyr)
h1$card <- dplyr::recode(h1$card, "yes" = "chapnhan", "no" = "tuchoi")
h1$owner <-  dplyr::recode(h1$owner, "yes" = "conha", "no" = "khongconha")
h2 <- table(h1$card,h1$owner) #tạo bảng chéo đếm số lần xuất hiện của từng kết hợp giữa  (Gender) và (ProductFamily).
addmargins(h2)#Thêm tổng hàng và tổng cột vào bảng
##           
##            khongconha conha  Sum
##   tuchoi          206    90  296
##   chapnhan        532   491 1023
##   Sum             738   581 1319
prop.table(h2, margin = 1)
##           
##            khongconha     conha
##   tuchoi    0.6959459 0.3040541
##   chapnhan  0.5200391 0.4799609
library(epitools)
OddsRatio(h2)
## [1] 2.11249
oddsratio(h2)
## $data
##           
##            khongconha conha Total
##   tuchoi          206    90   296
##   chapnhan        532   491  1023
##   Total           738   581  1319
## 
## $measure
##           odds ratio with 95% C.I.
##            estimate   lower    upper
##   tuchoi    1.00000      NA       NA
##   chapnhan  2.10957 1.60448 2.791356
## 
## $p.value
##           two-sided
##              midp.exact fisher.exact   chi.square
##   tuchoi             NA           NA           NA
##   chapnhan 5.738991e-08 6.417142e-08 7.928759e-08
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Dựa vào kết quả trên ta thấy những người có nhà có tỷ lệ được chấp nhận thẻ tín dụng cao hơn 2.11 lần so với những người không có nhà. Khoảng tin cậy 95% là (1.60; 2.79), không chứa giá trị 1 cho thấy sự khác biệt là có ý nghĩa thống kê. Giá trị p rất nhỏ (< 0.005), cho thấy chúng ta bác bỏ giả thuyết không rằng khả năng được cấp thẻ là như nhau giữa người có nhà và không có nhà.

3. Suy nghĩ về bộ dữ liệu

d5 <- table(d_cat$Gender,d_cat$Homeowner) #tạo bảng chéo đếm số lần xuất hiện của từng kết hợp giữa  (Gender) và (ProductFamily).
addmargins(d5) #Thêm tổng hàng và tổng cột vào bảng
##      
##           N     Y   Sum
##   F    2826  4344  7170
##   M    2789  4100  6889
##   Sum  5615  8444 14059
prop.table(d5, margin = 1)
##    
##             N         Y
##   F 0.3941423 0.6058577
##   M 0.4048483 0.5951517
OddsRatio(d5,conf.level = .95)
## odds ratio     lwr.ci     upr.ci 
##  0.9563518  0.8939173  1.0231469
oddsratio(d5)
## $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"

Nhận xét

Nam giới có odds ratio là 0.9564, với khoảng tin cậy 95% từ 0.8939 đến 1.0232. Điều này có nghĩa là nam giới có odds sở hữu nhà thấp hơn một chút so với nữ giới, tức là tỷ lệ sở hữu nhà ở nam có xu hướng thấp hơn so với nữ, nhưng sự khác biệt là rất nhỏ.

Tuy nhiên, khoảng tin cậy 95% có chứa giá trị 1, cho thấy rằng khác biệt này không có ý nghĩa thống kê. Ngoài ra, các giá trị p tương ứng (midp.exact = 0.1952, fisher.exact = 0.1965, chi.square = 0.1951) đều lớn hơn 0.05, cho thấy không có bằng chứng thống kê đủ mạnh để bác bỏ giả thuyết không.

Việc là Nữ (so với Nam) không làm tăng hay giảm đáng kể odds sở hữu nhà. Mặc dù nữ giới có odds sở hữu nhà cao hơn một chút, nhưng khác biệt này không có ý nghĩa thống kê, nên chúng ta không thể kết luận có mối liên hệ rõ ràng giữa giới tính và khả năng sở hữu nhà trong dữ liệu này.

B. Hoạt động trên lớp

1. Ôn tập và thảo luận phân tích chéo và RR

Khi nhìn vào bảng chéo và chỉ số Relative Risk (RR), chúng ta có thể có cái nhìn đầu tiên về mối liên hệ giữa hai nhóm biến phân loại. RR cho biết khả năng một nhóm có xu hướng xảy ra sự kiện nhiều hay ít hơn nhóm còn lại, nên thường được dùng để so sánh mức độ “nguy cơ” giữa hai nhóm.

Tuy nhiên, việc sử dụng bảng chéo và RR cũng có những mặt hạn chế. Trước hết, bảng chéo chỉ cho thấy số liệu đếm và tỷ lệ đơn giản — nó không cung cấp thông tin về độ chắc chắn của kết quả hay xem xét đến ảnh hưởng của các yếu tố khác. RR thì chỉ thực sự phù hợp nếu dữ liệu được thu thập từ nghiên cứu dọc, tức là theo dõi các nhóm theo thời gian. Trong trường hợp dữ liệu được lấy theo cách ngẫu nhiên hay điều tra cắt ngang, RR đôi khi có thể gây hiểu nhầm.

Ngoài ra, nếu sự kiện đang xét là hiếm, RR và Odds Ratio (OR) sẽ khá giống nhau. Nhưng nếu không hiếm, sự khác biệt giữa hai chỉ số này có thể lớn, dẫn đến kết luận không chính xác nếu không chú ý. Đặc biệt, cả hai cách làm này chưa kiểm soát được những yếu tố khác có thể ảnh hưởng đến mối liên hệ giữa hai biến chính, nên nếu muốn phân tích sâu và chính xác hơn, chúng ta cần dùng đến các phương pháp hồi quy như hồi quy logistic.

2. Đào sâu về Suy diễn trong Bảng Ngẫu nhiên 2x2

Khi tạo bảng ngẫu nhiên (ví dụ: bảng 2x2), thực chất là chúng ta đang mô tả phân bố xác suất của hai biến phân loại. Mỗi ô trong bảng thể hiện xác suất chung (joint probability) của hai biến cùng xảy ra. Chẳng hạn, trong bảng 2x2 với biến A (có/không) và biến B (nam/nữ), thì ô ở hàng “có” và cột “nam” cho biết xác suất (hoặc tần suất quan sát được) của những người vừa có đặc điểm A, vừa là nam.

Mục tiêu:

  • Hiểu rằng những con số trong bảng không chỉ là đếm đơn thuần, mà có thể xem như kết quả của một quá trình ngẫu nhiên có quy luật xác suất. Dựa vào đó, chúng ta có thể:

  • Tính các xác suất biên (xác suất xảy ra của từng biến riêng lẻ),

  • Tính xác suất có điều kiện (xác suất xảy ra của một biến khi biết biến còn lại),

  • Và từ đó phát triển các chỉ số như Tỷ số rủi ro (Relative Risk) hay Tỷ số chênh (Odds Ratio).

3. Thực hành trên R

Chọn một cặp MaritalStatus và Homeowner biến nhị phân khác từ bộ dữ liệu Supermarket Transactions

r1 <- table(d_cat$MaritalStatus,d_cat$Homeowner)
r1
##    
##        N    Y
##   M 1719 5147
##   S 3896 3297
prop_table <- prop.table(r1, margin = 1)
prop_table
##    
##             N         Y
##   M 0.2503641 0.7496359
##   S 0.5416377 0.4583623

Nhận xét: Dựa vào kết quả trên, ta nhận thấy trong nhóm người đã kết hôn (M) có 1719 người (25.04%) không sở hữu nhà và 5147 người (74.96%) sở hữu nhà. Còn nhóm người độc thân (S) có 3896 người (54.16%) không sở hữu nhà và 3297 người (45.84%) sở hữu nhà.

RD<- prop_table[1, "Y"] - prop_table[2, "N"]
RD
## [1] 0.2079982

Tỷ lệ những người đã kết hôn (M) sở hữu nhà là cao hơn so với tỷ lệ người độc thân (S) không sở hữu nhà, với chênh lệch khoảng 20.8%.

RR <- riskratio(r1)
RR
## $data
##        
##            N    Y Total
##   M     1719 5147  6866
##   S     3896 3297  7193
##   Total 5615 8444 14059
## 
## $measure
##    risk ratio with 95% C.I.
##      estimate     lower     upper
##   M 1.0000000        NA        NA
##   S 0.6114466 0.5942071 0.6291862
## 
## $p.value
##    two-sided
##     midp.exact  fisher.exact    chi.square
##   M         NA            NA            NA
##   S          0 1.822183e-277 3.663022e-272
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Nhận xét: Kết quả phân tích Relative Risk (RR) cho thấy người độc thân có nguy cơ sở hữu nhà chỉ bằng 61.1% so với người đã kết hôn, với khoảng tin cậy 95% từ 59.4% đến 62.9%. Khoảng tin cậy không chứa giá trị 1, cho thấy sự khác biệt này có ý nghĩa thống kê rất rõ ràng. Giá trị p rất nhỏ (gần bằng 0) khẳng định mối liên hệ giữa tình trạng hôn nhân và khả năng sở hữu nhà không phải do ngẫu nhiên. Điều này cho thấy người đã kết hôn có khả năng sở hữu nhà cao hơn đáng kể so với người độc thân trong dữ liệu khảo sát.

or <- oddsratio(r1)
or
## $data
##        
##            N    Y Total
##   M     1719 5147  6866
##   S     3896 3297  7193
##   Total 5615 8444 14059
## 
## $measure
##    odds ratio with 95% C.I.
##     estimate     lower     upper
##   M 1.000000        NA        NA
##   S 0.282673 0.2630995 0.3036164
## 
## $p.value
##    two-sided
##     midp.exact  fisher.exact    chi.square
##   M         NA            NA            NA
##   S          0 1.822183e-277 3.663022e-272
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Nhận xét: Kết quả phân tích Odds Ratio (OR) cho thấy nhóm người độc thân có tỷ số chênh lệch odds sở hữu nhà chỉ bằng khoảng 0.28 lần so với nhóm người đã kết hôn, với khoảng tin cậy 95% từ 0.26 đến 0.30. Khoảng tin cậy này không bao gồm giá trị 1, chứng tỏ sự khác biệt là có ý nghĩa thống kê rất mạnh. Giá trị p gần bằng 0 cũng cho thấy mối liên hệ này không phải do ngẫu nhiên. Điều này đồng nghĩa với việc người đã kết hôn có odds sở hữu nhà cao hơn đáng kể so với người độc thân, phản ánh rõ sự khác biệt về khả năng sở hữu nhà giữa hai nhóm.

LS0tDQp0aXRsZTogIk5oaeG7h20gduG7pSBUdeG6p24gMyINCmF1dGhvcjogIlF14buzbmggSMawxqFuZyINCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVIOiVNOiVTLCAlZCAtICVtIC0gJVknKWAiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgY29kZV9mb2xkaW5nOiBoaWRlDQogICAgY29kZV9kb3dubG9hZDogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UgIA0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNQ0KICAgIHRvY19mbG9hdDoNCiAgICAgIGNvbGxhcHNlZDogdHJ1ZQ0KICAgICAgc21vb3RoX3Njcm9sbDogdHJ1ZQ0KICB3b3JkX2RvY3VtZW50Og0KICAgIHRvYzogdHJ1ZQ0KLS0tDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBlY2hvID0gVFJVRSwNCiAgd2FybmluZyA9IEZBTFNFLA0KICBtZXNzYWdlID0gRkFMU0UNCikNCmBgYA0KDQpgYGB7Y3NzLGVjaG8gPSBGQUxTRX0NCmgxIHsNCiAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7DQogIGZvbnQtc2l6ZTogMzJweDsNCiAgZm9udC13ZWlnaHQ6IGJvbGQNCiAgfQ0KDQpoMiB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDI4cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KIA0KfQ0KDQpoMyB7DQogIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICBmb250LXNpemU6IDI0cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBmb250LXN0eWxlOiBpdGFsaWM7DQp9DQoNCmg0IHtmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAyMHB4Ow0KICBmb250LXN0eWxlOiBpdGFsaWN9DQoNCmJvZHkgew0KICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCiAgZm9udC1zaXplOiAxOHB4Ow0KICANCn0NCnA6bm90KGgxKTpub3QoaDIpOm5vdChoMyk6bm90KGg0KTpub3QoaDUpIHsNCiAgdGV4dC1pbmRlbnQ6IDJlbTt9DQpwIHsNCiAgdGV4dC1hbGlnbjoganVzdGlmeTsNCiAgfQ0KLnRvY2lmeS1oZWFkZXIgew0KICBmb250LXdlaWdodDogYm9sZDsNCn0NCg0KYGBgDQoNCiMgKipBLiDEkOG7jWMgdsOgIENodeG6qW4gYuG7iyB0csaw4bubYyBideG7lWkgaOG7jWMqKg0KDQpgYGB7cixtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KHBzeWNoKQ0KbGlicmFyeShrbml0cikNCmxpYnJhcnkoa2FibGVFeHRyYSkNCmxpYnJhcnkoRGVzY1Rvb2xzKQ0KbGlicmFyeShlcGl0b29scykNCmxpYnJhcnkoQUVSKQ0KYGBgDQoNCiMjICoqMS4gw5RuIGzhuqFpIGtp4bq/biB0aOG7qWMgVHXhuqduIDIqKg0KDQpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmQ8LSByZWFkLmNzdigiRDovSEsyX1BURExEVF9UTVQvU3VwZXJtYXJrZXQgVHJhbnNhY3Rpb25zLmNzdiIsIGhlYWRlcj1UKQ0KY2F0PC0gYygiR2VuZGVyIiwgIk1hcml0YWxTdGF0dXMiLCAiSG9tZW93bmVyIiwgIkFubnVhbEluY29tZSIsICJDaXR5IiwgIlN0YXRlb3JQcm92aW5jZSIsICJDb3VudHJ5IiwgIlByb2R1Y3RGYW1pbHkiLCAiUHJvZHVjdERlcGFydG1lbnQiLCAiUHJvZHVjdENhdGVnb3J5IikNCmRfY2F0PC1kWywgY2F0XQ0KZGF0YXRhYmxlKGRfY2F0LG9wdGlvbnMgPSBsaXN0KHNjcm9sbFggPSBUUlVFKSkNCmBgYA0KIyMjICoqMS4xIELhuqNuZyB04bqnbiBz4buRIGNow6lvKioNCg0KKkLhuqNuZyB04bqnbiBzdeG6pXQgY2jDqW8qDQoNCmBgYHtyfQ0KZDIgPC0gdGFibGUoZF9jYXQkTWFyaXRhbFN0YXR1cyxkX2NhdCRIb21lb3duZXIpDQphZGRtYXJnaW5zKGQyKQ0KYGBgDQoqQuG6o25nIHThuqduIHN14bqldCBjaMOpbyB0aGVvIHThu7cgbOG7hyBow6BuZyoNCg0KYGBge3J9DQpwcm9wLnRhYmxlKGQyLCBtYXJnaW4gPSAxKQ0KYGBgDQoNCipOaOG6rW4geMOpdCoNCg0KLSBE4buxYSB2w6BvIGvhur90IHF14bqjIHRyw6puLCB0YSBuaOG6rW4gdGjhuqV5IHRyb25nIG5ow7NtIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biAoTSkgY8OzIDE3MTkgbmfGsOG7nWkgKDI1LjA0JSkga2jDtG5nIHPhu58gaOG7r3UgbmjDoCB2w6AgNTE0NyBuZ8aw4budaSAoNzQuOTYlKSBz4bufIGjhu691IG5ow6AuIEPDsm4gbmjDs20gbmfGsOG7nWkgxJHhu5ljIHRow6JuIChTKSBjw7MgMzg5NiBuZ8aw4budaSAoNTQuMTYlKSBraMO0bmcgc+G7nyBo4buvdSBuaMOgIHbDoCAzMjk3IG5nxrDhu51pICg0NS44NCUpIHPhu58gaOG7r3UgbmjDoC4NCg0KLSBRdWEgxJHDsyB0YSBuaOG6rW4gdGjhuqV5IG3hu5FpIHF1YW4gaOG7hyB0w61jaCBj4buxYyBnaeG7r2Egdmnhu4djIGvhur90IGjDtG4gdsOgIHPhu58gaOG7r3UgbmjDoC4gTmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIGPDsyB4dSBoxrDhu5tuZyDhu5VuIMSR4buLbmggaMahbiB24buBIG3hurd0IGNo4buXIOG7nywgY8OzIHRo4buDIGRvIMSRaeG7gXUga2nhu4duIHTDoGkgY2jDrW5oIGhv4bq3YyDGsHUgdGnDqm4gxJHhuqd1IHTGsCBsw6J1IGTDoGkgaMahbiBzbyB24bubaSBuZ8aw4budaSDEkeG7mWMgdGjDom4uDQoNCi0gWHUgaMaw4bubbmcgY2h1bmcgbMOgIGvhur90IGjDtG4gdGjGsOG7nW5nIMSRaSBrw6htIHbhu5tpIGto4bqjIG7Eg25nIHPhu58gaOG7r3UgbmjDoCBjYW8gaMahbiwgcGjhuqNuIMOhbmggbeG7qWMgxJHhu5kg4buVbiDEkeG7i25oIHbDoCBjYW0ga+G6v3QgdMOgaSBjaMOtbmggbMOidSBkw6BpIGjGoW4gdHJvbmcgY3Xhu5ljIHPhu5FuZy4NCg0KIyMjICoqMS4yIEtp4buDbSDEkeG7i25oIHRo4buRbmcga8OqIChLaeG7g20gxJHhu4tuaCBDaGktYsOsbmggcGjGsMahbmcpKioNCg0KxJDhu4MgxJHDoW5oIGdpw6EgeGVtIGPDsyBt4buRaSBsacOqbiBo4buHIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogZ2nhu69hIGhhaSBiaeG6v24gcGjDom4gbG/huqFpIGzDoCBNYXJpdGFsU3RhdHVzIHbDoCBIb21lb3duZXIgaGF5IGtow7RuZywgc+G6vSBz4butIGThu6VuZyBraeG7g20gxJHhu4tuaCBDaGktYsOsbmggcGjGsMahbmcgKENoaS1zcXVhcmUgdGVzdCkuDQoNCmBgYHtyfQ0KIyBLaeG7g20gxJHhu4tuaA0KY2hpc3FfcmVzdWx0IDwtIGNoaXNxLnRlc3QoZDIpDQoNCiMgSW4ga+G6v3QgcXXhuqMNCmNoaXNxX3Jlc3VsdA0KYGBgDQoNCkdp4bqjIHRodXnhur90Og0KDQokJA0KXGxlZnRcew0KXGJlZ2lue2FycmF5fXtsbH0NCkhfMDogJiBcdGV4dHtCaeG6v24gTWFyaXRhbFN0YXR1cyB2w6AgYmnhur9uIEhvbWVvd25lciBraMO0bmcgY8OzIG3hu5FpIHF1YW4gaOG7hy59ICBcXFxcDQpIXzE6ICYgXHRleHR7IEJp4bq/biBNYXJpdGFsU3RhdHVzIHbDoCBiaeG6v24gSG9tZW93bmVyIGPDsyBt4buRaSBxdWFuIGjhu4cufSBcDQpcZW5ke2FycmF5fQ0KXHJpZ2h0Lg0KJCQNCg0KS+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmg6IFbhu5tpIG3hu6ljIMO9IG5naMSpYSAwLjAgduG7m2kgcC12YWx1ZSA9IDIuMmUtMTYgPCAwLjA1LCBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgJEhfMCQgdOG7qWMgbMOgIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgJEhfMSQuIFbhuq15IGdp4buvYSBiaeG6v24gTWFyaXRhbFN0YXR1cyB2w6AgYmnhur9uIEhvbWVvd25lciBjw7MgdOG7k24gdOG6oWkgbeG7kWkgcXVhbiBo4buHLg0KDQojIyMgKioxLjMgUmVsYXRpdmUgUmlzayoqDQoNCmBgYHtyfQ0KZTEgPC0gdGFibGUoZF9jYXQkSG9tZW93bmVyLCBkX2NhdCRNYXJpdGFsU3RhdHVzKQ0KYWRkbWFyZ2lucyhlMSkNClJlbFJpc2soZTEpDQpgYGANCg0KYGBge3J9DQp0YWJsZShkJEhvbWVvd25lcixkJE1hcml0YWxTdGF0dXMpDQptIDwtIG1hdHJpeChjKDE3MTksNTE0NywzODk2LDMyOTcpLG5yb3cgPSAyKQ0KUmVsUmlzayhtLCBjb25mLmxldmVsID0gLjk1KQ0Kcmlza3JhdGlvKGUxLCByZXYgPSAnYicpICPEkcawYSBjaOG7ryB5IGzDqm4gdHLDqm4NCmBgYA0KDQpU4bu3IHPhu5EgcuG7p2kgcm8gKFJlbGF0aXZlIFJpc2spIMSRxrDhu6NjIMaw4bubYyB0w61uaCBsw6AgMC41MDIzLCB24bubaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlIHThu6sgMC40ODEwIMSR4bq/biAwLjUyNDEuIMSQaeG7gXUgbsOgeSBjaG8gdGjhuqV5IG5o4buvbmcgbmfGsOG7nWkga2jDtG5nIHPhu58gaOG7r3UgbmjDoCBjw7Mga2jhuqMgbsSDbmcgxJHDoyBr4bq/dCBow7RuIHRo4bqlcCBoxqFuIGtob+G6o25nIDUwJSBzbyB24bubaSBuaOG7r25nIG5nxrDhu51pIGPDsyBz4bufIGjhu691IG5ow6AuIEtob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGJp4bq/dCBy4bqxbmcsIHbhu5tpIMSR4buZIHRpbiBj4bqteSA5NSUsIGdpw6EgdHLhu4sgdGjhu7FjIGPhu6dhIHThu7cgc+G7kSBy4bunaSBybyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDAuNDgxMCDEkeG6v24gMC41MjQxLiBWw6wga2hv4bqjbmcgbsOgeSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMSwgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSBuaMOzbSDEkcaw4bujYyB4ZW0gbMOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQoNCiMjICoqMi4gVMOsbSBoaeG7g3UgduG7gSBjw6FjIG7hu5lpIGR1bmcgY+G7p2EgY2jGsMahbmcgMioqDQoNCiMjIyAqKjIuMSBD4bqldSB0csO6YyB4w6FjIHN14bqldCBj4bunYSBi4bqjbmcgbmfhuqt1IG5oacOqbioqDQoNCioqUGjDom4gcGjhu5FpIFBvaXNzb24qKg0KDQpQaMOibiBwaOG7kWkgUG9pc3NvbiBsw6AgbeG7mXQgeMOhYyBzdeG6pXQgcuG7nWkgcuG6oWMgbMO9IHRodXnhur90IHbDoCBjxaluZyDEkcaw4bujYyBn4buNaSBsw6AgaMOgbSBraOG7kWkgbMaw4bujbmcgeMOhYyBzdeG6pXQgcGjDom4gcGjhu5FpIFBvaXNzb24uIE7DsyDEkcaw4bujYyBz4butIGThu6VuZyDEkeG7gyB0w6xtIHjDoWMgc3XhuqV0IGPhu6dhIG3hu5l0IHPhu7Ega2nhu4duIMSR4buZYyBs4bqtcCB44bqjeSByYSB0cm9uZyBt4buZdCBraG/huqNuZyB0aOG7nWkgZ2lhbiBj4buRIMSR4buLbmggdsOgIGPDsyB04bu3IGzhu4cgdHJ1bmcgYsOsbmgga2jDtG5nIMSR4buVaS4NCg0KS8O9IGhp4buHdTogWOKIvFBvaXNzb24ozrspDQoNCkjDoG0geMOhYyBzdeG6pXQ6WMOhYyBzdeG6pXQgxJHhu4MgY8OzIMSRw7puZyBcKCBrIFwpIHPhu7Ega2nhu4duIHjhuqN5IHJhIHRyb25nIG3hu5l0IGtob+G6o25nIHRo4budaSBnaWFuIChob+G6t2Mga2jDtG5nIGdpYW4pIG5o4bqldCDEkeG7i25oIMSRxrDhu6NjIGNobyBi4bufaToNCg0KJCQNClAoWCA9IGspID0gXGZyYWN7XGxhbWJkYV5rIGVeey1cbGFtYmRhfX17ayF9DQokJA0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIGsgXCk6IHPhu5EgbOG6p24gc+G7sSBraeG7h24geOG6o3kgcmEgKCBcKCBrID0gMCwgMSwgMiwgXGRvdHMgXCkgKQ0KLSBcKCBcbGFtYmRhIFwpOiBz4buRIGzhuqduIHjhuqN5IHJhIHRydW5nIGLDrG5oIGPhu6dhIHPhu7Ega2nhu4duICh0aGFtIHPhu5EgY+G7p2EgcGjDom4gcGjhu5FpIFBvaXNzb24pDQotIFwoIGUgXCk6IGjhurFuZyBz4buRIEV1bGVyLCBjxqEgc+G7kSBj4bunYSBsb2dhcml0IHThu7Egbmhpw6puLCBcKCBlIFxhcHByb3ggMi43MTgyOCBcKQ0KLSBcKCBrISBcKTogZ2lhaSB0aOG7q2EgY+G7p2EgXCggayBcKSwgdOG7qWMgbMOgIFwoIGshID0gayBcdGltZXMgKGstMSkgXHRpbWVzIFxkb3RzIFx0aW1lcyAxIFwpLCB2w6AgXCggMCEgPSAxIFwpDQoNCsSQ4bq3YyDEkWnhu4NtIHF1YW4gdHLhu41uZyBj4bunYSBwaMOibiBwaOG7kWkgUG9pc3Nvbg0KDQotICoqS+G7syB24buNbmcgKE1lYW4pOioqDQoNCiAgJCQNCiAgXG1hdGhiYntFfShYKSA9IFxsYW1iZGENCiAgJCQNCg0KLSAqKlBoxrDGoW5nIHNhaSAoVmFyaWFuY2UpOioqDQoNCiAgJCQNCiAgXG1hdGhybXtWYXJ9KFgpID0gXGxhbWJkYQ0KICAkJA0KDQotIEtoaSBcKCBcbGFtYmRhIFwpIG5o4buPICh2w60gZOG7pTogzrsgPCA1KSwgcGjDom4gcGjhu5FpIGLhu4sgbOG7h2NoIHBo4bqjaSwgdOG6rXAgdHJ1bmcgbmhp4buBdSDhu58gcGjDrWEgdHLDoWkuDQotIEtoaSBcKCBcbGFtYmRhIFwpIHTEg25nIGzDqm4gKMSR4bq3YyBiaeG7h3QgXCggXGxhbWJkYSBcZ2VxIDIwIFwpKSwgcGjDom4gcGjhu5FpIFBvaXNzb24gY8OzIHRo4buDIMSRxrDhu6NjIHjhuqVwIHjhu4kgdOG7kXQgYuG6sW5nIHBow6JuIHBo4buRaSBDaHXhuqluOg0KDQogICQkDQogIFggXHNpbSBcbWF0aGNhbHtOfShcbGFtYmRhLCBcbGFtYmRhKQ0KICAkJA0KKipQaMOibiBwaOG7kWkgTXV1bHRpbm9taWFsKioNCg0KUGjDom4gcGjhu5FpIE11bHRpbm9taWFsIGzDoCBt4buZdCBt4bufIHLhu5luZyBj4bunYSBwaMOibiBwaOG7kWkgbmjhu4sgdGjhu6ljIChCZXJub3VsbGkpIGNobyBuaGnhu4F1IGjGoW4gaGFpIGvhur90IHF14bqjLiBQaMOibiBwaOG7kWkgbsOgeSBtw7QgdOG6oyB4w6FjIHN14bqldCBj4bunYSBjw6FjIGvhur90IHF14bqjIMSR4bq/bSDEkcaw4bujYyB0cm9uZyAkbiQgbOG6p24gdGjhu60sIHRyb25nIMSRw7MgbeG7l2kgbOG6p24gdGjhu60gY8OzIHRo4buDIHLGoWkgdsOgbyBt4buZdCB0cm9uZyAkayQgbG/huqFpIChjYXRlZ29yaWVzKSB24bubaSB4w6FjIHN14bqldCB0xrDGoW5nIOG7qW5nLg0KDQpQaMOibiBwaOG7kWkgxJHGsOG7o2Mga8O9IGhp4buHdSBsw6A6DQoNCiQkDQpcbWF0aGJme1l9IFxzaW0gXHRleHR7TXVsdGlub21pYWx9KG4sIFxtYXRoYmZ7cH0pDQokJA0KDQpUcm9uZyDEkcOzOg0KDQotICRcbWF0aGJme1l9ID0gKFlfMSwgWV8yLCBcZG90cywgWV9rKSQgbMOgIHZlY3RvciBz4buRIMSR4bq/bSBjaG8gdOG7q25nIGxv4bqhaS4NCg0KLSAkbiQgbMOgIHThu5VuZyBz4buRIGzhuqduIHRo4butIChoYXkgdOG7lW5nIHPhu5EgxJHhur9tKTogJG4gPSBcc3VtX3tpPTF9XntrfSBZX2kkLg0KDQotICRcbWF0aGJme3B9ID0gKHBfMSwgcF8yLCBcZG90cywgcF9rKSQgbMOgIHZlY3RvciB4w6FjIHN14bqldCwgduG7m2kgJHBfaSBcZ2UgMCQgdsOgICRcc3VtX3tpPTF9XntrfSBwX2kgPSAxJC4NCg0KSMOgbSB4w6FjIHN14bqldCDEkcaw4bujYyB4w6FjIMSR4buLbmggbmjGsCBzYXU6DQoNCiQkDQpQKFlfMSA9IHlfMSwgXGRvdHMsIFlfayA9IHlfaykgPSBcZnJhY3tuIX17eV8xISBcY2RvdHMgeV9rIX0gXGNkb3QgcF8xXnt5XzF9IFxjZG90cyBwX2tee3lfa30NCiQkDQoNCg0KIyMjICoqMi4yIFNvIHPDoW5oIDIgdOG7tyBs4buHIHRyb25nIGLhuqNuZyBuZ+G6q3Ugbmhpw6puIDJ4MioqDQoNCiMjIyMgKlJpc2sgRGlmZmVyZW5jZSAtIFJEKg0KDQpSaXNrIERpZmZlcmVuY2UgbMOgIG3hu6ljIGNow6puaCBs4buHY2ggdHV54buHdCDEkeG7kWkgZ2nhu69hIHjDoWMgc3XhuqV0IHjhuqN5IHJhIHPhu7Ega2nhu4duIOG7nyBoYWkgbmjDs20uDQoNCioqQ8OhY2ggdMOtbmg6KioNCg0KJCQNClJEID0gXGZyYWN7YX17YSArIGJ9IC0gXGZyYWN7Y317YyArIGR9DQokJA0KDQoNCioqw50gbmdoxKlhOioqDQoNCi0gUkQgcGjhuqNuIMOhbmggc+G7sSBraMOhYyBiaeG7h3QgdHV54buHdCDEkeG7kWkgZ2nhu69hIG5ndXkgY8ahIHjhuqN5IHJhIHPhu7Ega2nhu4duIOG7nyBoYWkgbmjDs20uDQotIE7hur91Og0KDQogICAgLSBcKCBSRCA+IDAgXCk6IE5ow7NtIEEgY8OzIG5ndXkgY8ahICoqY2FvIGjGoW4qKiBuaMOzbSBCDQogIA0KICAgIC0gXCggUkQgPCAwIFwpOiBOaMOzbSBBIGPDsyBuZ3V5IGPGoSAqKnRo4bqlcCBoxqFuKiogbmjDs20gQg0KDQoNCiMjIyMgKlJlbGF0aXZlIFJpc2sgLSBSUioNCg0KVOG7tyBz4buRIHLhu6dpIHJvIChSUikgbMOgIHThu7cgbOG7hyBnaeG7r2EgeMOhYyBzdeG6pXQgeOG6o3kgcmEgc+G7sSBraeG7h24g4bufIG5ow7NtIHBoxqFpIG5oaeG7hW0gc28gduG7m2kgbmjDs20ga2jDtG5nIHBoxqFpIG5oaeG7hW0uIE7DsyB0aOG7gyBoaeG7h24gbeG7qWMgdMSDbmcgKGhv4bq3YyBnaeG6o20pIHTGsMahbmcgxJHhu5FpIHbhu4Egbmd1eSBjxqEuDQoNCioqQ8OhY2ggdMOtbmg6KioNCg0KJCQNClJSID0gXGZyYWN7YSAvIChhICsgYil9e2MgLyAoYyArIGQpfQ0KJCQNCg0KKirDnSBuZ2jEqWE6KioNCg0KLSBcKCBSUiA9IDEgXCk6IEtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3Qgbmd1eSBjxqEgZ2nhu69hIGhhaSBuaMOzbQ0KDQotIFwoIFJSID4gMSBcKTogTmjDs20gQSBjw7Mgbmd1eSBjxqEgY2FvIGjGoW4NCg0KLSBcKCBSUiA8IDEgXCk6IE5ow7NtIEEgY8OzIG5ndXkgY8ahIHRo4bqlcCBoxqFuDQoNCg0KIyMjIyAqT2RkcyBSYXRpbyAtIE9SKg0KDQpPZGQgUmF0aW8gKFThu7cgc+G7kSBjaMOqbmgpIGzDoCBt4buZdCB0aMaw4bubYyDEkW8gxJHGsOG7o2Mgc+G7rSBk4bulbmcgcGjhu5UgYmnhur9uIHRyb25nIHRo4buRbmcga8OqLCDEkeG6t2MgYmnhu4d0IGzDoCB0cm9uZyBuZ2hpw6puIGPhu6l1IGThu4tjaCB04buFIGjhu41jLCDEkeG7gyDEkcOhbmggZ2nDoSBt4buRaSBsacOqbiBo4buHIGdp4buvYSBwaMahaSBuaGnhu4VtIHbDoCBr4bq/dCBxdeG6oy4gDQoNCioqQ8OhY2ggdMOtbmg6KioNCg0KJCQNCk9SID0gXGZyYWN7YS9ifXtjL2R9ID0gXGZyYWN7YSBcY2RvdCBkfXtiIFxjZG90IGN9DQokJA0KDQoqKsOdIG5naMSpYToqKg0KDQotIFwoIE9SID0gMSBcKTogS2jDtG5nIGPDsyBz4buxIGtow6FjIGJp4buHdCBvZGRzIGdp4buvYSBoYWkgbmjDs20NCg0KLSBcKCBPUiA+IDEgXCk6IE9kZHMgeOG6o3kgcmEgc+G7sSBraeG7h24g4bufIG5ow7NtIEEgY2FvIGjGoW4NCg0KLSBcKCBPUiA8IDEgXCk6IE9kZHMg4bufIG5ow7NtIEEgdGjhuqVwIGjGoW4NCg0KDQojIyMgICoqMi4zIEtob+G6o25nIHRpbiBj4bqteSBjaG8gY8OhYyB0aGFtIHPhu5EgxJFvIG3hu5FpIGxpw6puIGjhu4cqKg0KDQpLaGkgxrDhu5tjIGzGsOG7o25nIE9kZHMgUmF0aW8gKE9SKSBkbyBPUiBraMO0bmcgcGjDom4gYuG7kSBjaHXhuqluIHRhIHRoxrDhu51uZyBiaeG6v24gxJHhu5VpIGxvZ2FyaXQgxJHhu4MgbMOgbSB2aeG7h2MgdHLDqm4gdGhhbmcgbG9nKE9SKSwgc2F1IMSRw7MgdMOtbmgga2hv4bqjbmcgdGluIGPhuq15IChDSSkgdsOgIGzhuqV5IG3FqSDEkeG7gyBjaHV54buDbiB24buBIHRoYW5nIE9SLg0KDQoqU2FpIHPhu5EgY2h14bqpbiAoU3RhbmRhcmQgRXJyb3IgLSBTRSkqDQoNCkPDtG5nIHRo4bupYzoNCg0KJCQNClNFKFxsb2coXGhhdHtcdGhldGF9KSkgPSBcc3FydHsgXGZyYWN7MX17bl97MTF9fSArIFxmcmFjezF9e25fezEyfX0gKyBcZnJhY3sxfXtuX3syMX19ICsgXGZyYWN7MX17bl97MjJ9fSB9DQokJA0KDQpUcm9uZyDEkcOzOg0KDQotIFwoIG5fezExfSwgbl97MTJ9LCBuX3syMX0sIG5fezIyfSBcKSBsw6AgY8OhYyDDtCB0cm9uZyBi4bqjbmcgMngyOg0KDQp8ICAgICAgICAgICAgICAgfCBT4buxIGtp4buHbiAoKykgfCBLaMO0bmcgc+G7sSBraeG7h24gKOKIkikgfA0KfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS18DQp8ICoqTmjDs20gMSoqICAgIHwgXCggbl97MTF9IFwpIHwgXCggbl97MTJ9IFwpICAgICAgICB8DQp8ICoqTmjDs20gMioqICAgIHwgXCggbl97MjF9IFwpIHwgXCggbl97MjJ9IFwpICAgICAgICB8DQoNCg0KKktob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIGxvZyhPUikqDQoNCiQkDQpcbG9nKFxoYXR7XHRoZXRhfSkgXHBtIHpfezEgLSBcYWxwaGEvMn0gXGNkb3QgU0UoXGxvZyhcaGF0e1x0aGV0YX0pKQ0KJCQNCg0KVuG7m2kgXCggel97MSAtIFxhbHBoYS8yfSA9IDEuOTYgXCkgY2hvIG3hu6ljIHRpbiBj4bqteSA5NSUuDQoNCg0KKktob+G6o25nIHRpbiBj4bqteSA5NSUgY2hvIE9SKg0KDQpDaHV54buDbiB24buBIHRoYW5nIE9SOg0KDQokJA0KQ0lfe09SfSA9IFxsZWZ0WyBcZXhwIFxsZWZ0KCBcbG9nKFxoYXR7XHRoZXRhfSkgLSAxLjk2IFxjZG90IFNFIFxyaWdodCksXCBcZXhwIFxsZWZ0KCBcbG9nKFxoYXR7XHRoZXRhfSkgKyAxLjk2IFxjZG90IFNFIFxyaWdodCkgXHJpZ2h0XQ0KJCQNCg0KKk5o4bqtbiB4w6l0Kg0KDQotIE7hur91IGtob+G6o25nIHRpbiBj4bqteSBraMO0bmcgY2jhu6lhIDEsIE9SIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouDQoNCi0gTuG6v3Uga2hv4bqjbmcgQ0kgY2jhu6lhIDEgbMOgIGtow7RuZyDEkeG7pyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiDEkeG7gyBr4bq/dCBsdeG6rW4ga2jDoWMgYmnhu4d0Lg0KDQojIyMgKioyLjQgVsOtIGThu6UqKg0KDQpUcm9uZyB2w60gZOG7pSBuw6B5LCBjaMO6bmcgdGEgc+G7rSBk4bulbmcgYuG7mSBk4buvIGxp4buHdSBDcmVkaXRDYXJkIHRodeG7mWMgZ8OzaSBBRVIgxJHhu4MgcGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBz4bufIGjhu691IG5ow6AgKG93bmVyKSB2w6AgcXV54bq/dCDEkeG7i25oIGPhuqVwIHRo4bq7IHTDrW4gZOG7pW5nIChjYXJkKS4gROG7ryBsaeG7h3UgbsOgeSBiYW8gZ+G7k20gdGjDtG5nIHRpbiB24buBIHZp4buHYyBt4buZdCBjw6EgbmjDom4gY8OzIMSRxrDhu6NjIGNo4bqlcCBuaOG6rW4gY+G6pXAgdGjhursgdMOtbiBk4bulbmcgaGF5IGtow7RuZywgY8O5bmcgduG7m2kgY8OhYyDEkeG6t2MgxJFp4buDbSBjw6EgbmjDom4gbmjGsCBjw7Mgc+G7nyBo4buvdSBuaMOgLCB0aHUgbmjhuq1wLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIA0KQ2jDum5nIHRhIHPhur0gdOG6rXAgdHJ1bmcgdsOgbyBoYWkgYmnhur9uIHBow6JuIGxv4bqhaSBvd25lciB2w6AgY2FyZCwgdOG7qyDEkcOzIHjDonkgZOG7sW5nIGLhuqNuZyAyw5cyIHbDoCB0w61uaCB04bu3IHPhu5EgY2jDqm5oIE9kZHMgUmF0aW8gKE9SKSDEkeG7gyDEkcOhbmggZ2nDoSB4ZW0gc+G7nyBo4buvdSBuaMOgIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24ga2jhuqMgbsSDbmcgxJHGsOG7o2MgY+G6pXAgdGjhursgaGF5IGtow7RuZy4NCg0KDQpgYGB7cn0NCg0KIyBU4bqjaSBk4buvIGxp4buHdQ0KZGF0YSgiQ3JlZGl0Q2FyZCIpDQpoMTwtIENyZWRpdENhcmQNCmBgYA0KDQpgYGB7cn0NCiMgVGhheSDEkeG7lWkgZ2nDoSB0cuG7iyBj4bunYSBiaeG6v24gYGNhcmRgdsOgIG93bmVyDQpsaWJyYXJ5KGRwbHlyKQ0KaDEkY2FyZCA8LSBkcGx5cjo6cmVjb2RlKGgxJGNhcmQsICJ5ZXMiID0gImNoYXBuaGFuIiwgIm5vIiA9ICJ0dWNob2kiKQ0KaDEkb3duZXIgPC0gIGRwbHlyOjpyZWNvZGUoaDEkb3duZXIsICJ5ZXMiID0gImNvbmhhIiwgIm5vIiA9ICJraG9uZ2NvbmhhIikNCmgyIDwtIHRhYmxlKGgxJGNhcmQsaDEkb3duZXIpICN04bqhbyBi4bqjbmcgY2jDqW8gxJHhur9tIHPhu5EgbOG6p24geHXhuqV0IGhp4buHbiBj4bunYSB04burbmcga+G6v3QgaOG7o3AgZ2nhu69hICAoR2VuZGVyKSB2w6AgKFByb2R1Y3RGYW1pbHkpLg0KYWRkbWFyZ2lucyhoMikjVGjDqm0gdOG7lW5nIGjDoG5nIHbDoCB04buVbmcgY+G7mXQgdsOgbyBi4bqjbmcNCmBgYA0KDQpgYGB7cn0NCnByb3AudGFibGUoaDIsIG1hcmdpbiA9IDEpDQpgYGANCg0KYGBge3J9DQpsaWJyYXJ5KGVwaXRvb2xzKQ0KT2Rkc1JhdGlvKGgyKQ0KYGBgDQpgYGB7cn0NCm9kZHNyYXRpbyhoMikNCmBgYA0KDQpE4buxYSB2w6BvIGvhur90IHF14bqjIHRyw6puIHRhIHRo4bqleSBuaOG7r25nIG5nxrDhu51pIGPDsyBuaMOgIGPDsyB04bu3IGzhu4cgxJHGsOG7o2MgY2jhuqVwIG5o4bqtbiB0aOG6uyB0w61uIGThu6VuZyBjYW8gaMahbiAyLjExIGzhuqduIHNvIHbhu5tpIG5o4buvbmcgbmfGsOG7nWkga2jDtG5nIGPDsyBuaMOgLiBLaG/huqNuZyB0aW4gY+G6rXkgOTUlIGzDoCAoMS42MDsgMi43OSksIGtow7RuZyBjaOG7qWEgZ2nDoSB0cuG7iyAxIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgbMOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ouIEdpw6EgdHLhu4sgcCBy4bqldCBuaOG7jyAoPCAwLjAwNSksIGNobyB0aOG6pXkgY2jDum5nIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBraMO0bmcgcuG6sW5nIGto4bqjIG7Eg25nIMSRxrDhu6NjIGPhuqVwIHRo4bq7IGzDoCBuaMawIG5oYXUgZ2nhu69hIG5nxrDhu51pIGPDsyBuaMOgIHbDoCBraMO0bmcgY8OzIG5ow6AuDQoNCiMjICoqMy4gU3V5IG5naMSpIHbhu4EgYuG7mSBk4buvIGxp4buHdSoqDQoNCmBgYHtyfQ0KZDUgPC0gdGFibGUoZF9jYXQkR2VuZGVyLGRfY2F0JEhvbWVvd25lcikgI3ThuqFvIGLhuqNuZyBjaMOpbyDEkeG6v20gc+G7kSBs4bqnbiB4deG6pXQgaGnhu4duIGPhu6dhIHThu6tuZyBr4bq/dCBo4bujcCBnaeG7r2EgIChHZW5kZXIpIHbDoCAoUHJvZHVjdEZhbWlseSkuDQphZGRtYXJnaW5zKGQ1KSAjVGjDqm0gdOG7lW5nIGjDoG5nIHbDoCB04buVbmcgY+G7mXQgdsOgbyBi4bqjbmcNCmBgYA0KDQpgYGB7cn0NCnByb3AudGFibGUoZDUsIG1hcmdpbiA9IDEpDQpgYGANCg0KYGBge3J9DQpPZGRzUmF0aW8oZDUsY29uZi5sZXZlbCA9IC45NSkNCmBgYA0KDQpgYGB7cn0NCm9kZHNyYXRpbyhkNSkNCmBgYA0KDQoqKk5o4bqtbiB4w6l0KioNCg0KTmFtIGdp4bubaSBjw7Mgb2RkcyByYXRpbyBsw6AgMC45NTY0LCB24bubaSBraG/huqNuZyB0aW4gY+G6rXkgOTUlIHThu6sgMC44OTM5IMSR4bq/biAxLjAyMzIuDQrEkGnhu4F1IG7DoHkgY8OzIG5naMSpYSBsw6AgbmFtIGdp4bubaSBjw7Mgb2RkcyBz4bufIGjhu691IG5ow6AgdGjhuqVwIGjGoW4gbeG7mXQgY2jDunQgc28gduG7m2kgbuG7ryBnaeG7m2ksIHThu6ljIGzDoCB04bu3IGzhu4cgc+G7nyBo4buvdSBuaMOgIOG7nyBuYW0gY8OzIHh1IGjGsOG7m25nIHRo4bqlcCBoxqFuIHNvIHbhu5tpIG7hu68sIG5oxrBuZyBz4buxIGtow6FjIGJp4buHdCBsw6AgcuG6pXQgbmjhu48uDQoNClR1eSBuaGnDqm4sIGtob+G6o25nIHRpbiBj4bqteSA5NSUgY8OzIGNo4bupYSBnacOhIHRy4buLIDEsIGNobyB0aOG6pXkgcuG6sW5nIGtow6FjIGJp4buHdCBuw6B5IGtow7RuZyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqLg0KTmdvw6BpIHJhLCBjw6FjIGdpw6EgdHLhu4sgcCB0xrDGoW5nIOG7qW5nIChtaWRwLmV4YWN0ID0gMC4xOTUyLCBmaXNoZXIuZXhhY3QgPSAwLjE5NjUsIGNoaS5zcXVhcmUgPSAwLjE5NTEpIMSR4buBdSBs4bubbiBoxqFuIDAuMDUsIGNobyB0aOG6pXkga2jDtG5nIGPDsyBi4bqxbmcgY2jhu6luZyB0aOG7kW5nIGvDqiDEkeG7pyBt4bqhbmggxJHhu4MgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IGtow7RuZy4NCg0KVmnhu4djIGzDoCBO4buvIChzbyB24bubaSBOYW0pIGtow7RuZyBsw6BtIHTEg25nIGhheSBnaeG6o20gxJHDoW5nIGvhu4Mgb2RkcyBz4bufIGjhu691IG5ow6AuDQpN4bq3YyBkw7kgbuG7ryBnaeG7m2kgY8OzIG9kZHMgc+G7nyBo4buvdSBuaMOgIGNhbyBoxqFuIG3hu5l0IGNow7p0LCBuaMawbmcga2jDoWMgYmnhu4d0IG7DoHkga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6osIG7Dqm4gY2jDum5nIHRhIGtow7RuZyB0aOG7gyBr4bq/dCBsdeG6rW4gY8OzIG3hu5FpIGxpw6puIGjhu4cgcsO1IHLDoG5nIGdp4buvYSBnaeG7m2kgdMOtbmggdsOgIGto4bqjIG7Eg25nIHPhu58gaOG7r3UgbmjDoCB0cm9uZyBk4buvIGxp4buHdSBuw6B5Lg0KDQojICoqQi4gSG/huqF0IMSR4buZbmcgdHLDqm4gbOG7m3AqKg0KDQojIyAqKjEuIMOUbiB04bqtcCB2w6AgdGjhuqNvIGx14bqtbiBwaMOibiB0w61jaCBjaMOpbyB2w6AgUlIqKg0KDQpLaGkgbmjDrG4gdsOgbyBi4bqjbmcgY2jDqW8gdsOgIGNo4buJIHPhu5EgUmVsYXRpdmUgUmlzayAoUlIpLCBjaMO6bmcgdGEgY8OzIHRo4buDIGPDsyBjw6FpIG5ow6xuIMSR4bqndSB0acOqbiB24buBIG3hu5FpIGxpw6puIGjhu4cgZ2nhu69hIGhhaSBuaMOzbSBiaeG6v24gcGjDom4gbG/huqFpLiBSUiBjaG8gYmnhur90IGto4bqjIG7Eg25nIG3hu5l0IG5ow7NtIGPDsyB4dSBoxrDhu5tuZyB44bqjeSByYSBz4buxIGtp4buHbiBuaGnhu4F1IGhheSDDrXQgaMahbiBuaMOzbSBjw7JuIGzhuqFpLCBuw6puIHRoxrDhu51uZyDEkcaw4bujYyBkw7luZyDEkeG7gyBzbyBzw6FuaCBt4bupYyDEkeG7mSAibmd1eSBjxqEiIGdp4buvYSBoYWkgbmjDs20uDQoNClR1eSBuaGnDqm4sIHZp4buHYyBz4butIGThu6VuZyBi4bqjbmcgY2jDqW8gdsOgIFJSIGPFqW5nIGPDsyBuaOG7r25nIG3hurd0IGjhuqFuIGNo4bq/LiBUcsaw4bubYyBo4bq/dCwgYuG6o25nIGNow6lvIGNo4buJIGNobyB0aOG6pXkgc+G7kSBsaeG7h3UgxJHhur9tIHbDoCB04bu3IGzhu4cgxJHGoW4gZ2nhuqNuIOKAlCBuw7Mga2jDtG5nIGN1bmcgY+G6pXAgdGjDtG5nIHRpbiB24buBIMSR4buZIGNo4bqvYyBjaOG6r24gY+G7p2Ega+G6v3QgcXXhuqMgaGF5IHhlbSB4w6l0IMSR4bq/biDhuqNuaCBoxrDhu59uZyBj4bunYSBjw6FjIHnhur91IHThu5Ega2jDoWMuIFJSIHRow6wgY2jhu4kgdGjhu7FjIHPhu7EgcGjDuSBo4bujcCBu4bq/dSBk4buvIGxp4buHdSDEkcaw4bujYyB0aHUgdGjhuq1wIHThu6sgbmdoacOqbiBj4bupdSBk4buNYywgdOG7qWMgbMOgIHRoZW8gZMO1aSBjw6FjIG5ow7NtIHRoZW8gdGjhu51pIGdpYW4uIFRyb25nIHRyxrDhu51uZyBo4bujcCBk4buvIGxp4buHdSDEkcaw4bujYyBs4bqleSB0aGVvIGPDoWNoIG5n4bqrdSBuaGnDqm4gaGF5IMSRaeG7gXUgdHJhIGPhuq90IG5nYW5nLCBSUiDEkcO0aSBraGkgY8OzIHRo4buDIGfDonkgaGnhu4N1IG5o4bqnbS4NCg0KTmdvw6BpIHJhLCBu4bq/dSBz4buxIGtp4buHbiDEkWFuZyB4w6l0IGzDoCBoaeG6v20sIFJSIHbDoCBPZGRzIFJhdGlvIChPUikgc+G6vSBraMOhIGdp4buRbmcgbmhhdS4gTmjGsG5nIG7hur91IGtow7RuZyBoaeG6v20sIHPhu7Ega2jDoWMgYmnhu4d0IGdp4buvYSBoYWkgY2jhu4kgc+G7kSBuw6B5IGPDsyB0aOG7gyBs4bubbiwgZOG6q24gxJHhur9uIGvhur90IGx14bqtbiBraMO0bmcgY2jDrW5oIHjDoWMgbuG6v3Uga2jDtG5nIGNow7ogw70uIMSQ4bq3YyBiaeG7h3QsIGPhuqMgaGFpIGPDoWNoIGzDoG0gbsOgeSBjaMawYSBraeG7g20gc2/DoXQgxJHGsOG7o2Mgbmjhu69uZyB54bq/dSB04buRIGtow6FjIGPDsyB0aOG7gyDhuqNuaCBoxrDhu59uZyDEkeG6v24gbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgaGFpIGJp4bq/biBjaMOtbmgsIG7Dqm4gbuG6v3UgbXXhu5FuIHBow6JuIHTDrWNoIHPDonUgdsOgIGNow61uaCB4w6FjIGjGoW4sIGNow7puZyB0YSBj4bqnbiBkw7luZyDEkeG6v24gY8OhYyBwaMawxqFuZyBwaMOhcCBo4buTaSBxdXkgbmjGsCBo4buTaSBxdXkgbG9naXN0aWMuDQoNCiMjICoqMi4gxJDDoG8gc8OidSB24buBIFN1eSBkaeG7hW4gdHJvbmcgQuG6o25nIE5n4bqrdSBuaGnDqm4gMngyKioNCg0KS2hpIHThuqFvIGLhuqNuZyBuZ+G6q3Ugbmhpw6puICh2w60gZOG7pTogYuG6o25nIDJ4MiksIHRo4buxYyBjaOG6pXQgbMOgIGNow7puZyB0YSDEkWFuZyBtw7QgdOG6oyBwaMOibiBi4buRIHjDoWMgc3XhuqV0IGPhu6dhIGhhaSBiaeG6v24gcGjDom4gbG/huqFpLiBN4buXaSDDtCB0cm9uZyBi4bqjbmcgdGjhu4MgaGnhu4duIHjDoWMgc3XhuqV0IGNodW5nIChqb2ludCBwcm9iYWJpbGl0eSkgY+G7p2EgaGFpIGJp4bq/biBjw7luZyB44bqjeSByYS4gQ2jhurNuZyBo4bqhbiwgdHJvbmcgYuG6o25nIDJ4MiB24bubaSBiaeG6v24gQSAoY8OzL2tow7RuZykgdsOgIGJp4bq/biBCIChuYW0vbuG7ryksIHRow6wgw7Qg4bufIGjDoG5nIOKAnGPDs+KAnSB2w6AgY+G7mXQg4oCcbmFt4oCdIGNobyBiaeG6v3QgeMOhYyBzdeG6pXQgKGhv4bq3YyB04bqnbiBzdeG6pXQgcXVhbiBzw6F0IMSRxrDhu6NjKSBj4bunYSBuaOG7r25nIG5nxrDhu51pIHbhu6thIGPDsyDEkeG6t2MgxJFp4buDbSBBLCB24burYSBsw6AgbmFtLg0KDQoqKk3hu6VjIHRpw6p1OioqDQoNCi0gSGnhu4N1IHLhurFuZyBuaOG7r25nIGNvbiBz4buRIHRyb25nIGLhuqNuZyBraMO0bmcgY2jhu4kgbMOgIMSR4bq/bSDEkcahbiB0aHXhuqduLCBtw6AgY8OzIHRo4buDIHhlbSBuaMawIGvhur90IHF14bqjIGPhu6dhIG3hu5l0IHF1w6EgdHLDrG5oIG5n4bqrdSBuaGnDqm4gY8OzIHF1eSBsdeG6rXQgeMOhYyBzdeG6pXQuIEThu7FhIHbDoG8gxJHDsywgY2jDum5nIHRhIGPDsyB0aOG7gzoNCg0KLSBUw61uaCBjw6FjIHjDoWMgc3XhuqV0IGJpw6puICh4w6FjIHN14bqldCB44bqjeSByYSBj4bunYSB04burbmcgYmnhur9uIHJpw6puZyBs4bq7KSwNCg0KLSBUw61uaCB4w6FjIHN14bqldCBjw7MgxJFp4buBdSBraeG7h24gKHjDoWMgc3XhuqV0IHjhuqN5IHJhIGPhu6dhIG3hu5l0IGJp4bq/biBraGkgYmnhur90IGJp4bq/biBjw7JuIGzhuqFpKSwNCg0KLSBWw6AgdOG7qyDEkcOzIHBow6F0IHRyaeG7g24gY8OhYyBjaOG7iSBz4buRIG5oxrAgVOG7tyBz4buRIHLhu6dpIHJvIChSZWxhdGl2ZSBSaXNrKSBoYXkgVOG7tyBz4buRIGNow6puaCAoT2RkcyBSYXRpbykuDQoNCiMjICoqMy4gVGjhu7FjIGjDoG5oIHRyw6puIFIqKg0KDQpDaOG7jW4gbeG7mXQgY+G6t3AgTWFyaXRhbFN0YXR1cyB2w6AgSG9tZW93bmVyIGJp4bq/biBuaOG7iyBwaMOibiBraMOhYyB04burIGLhu5kgZOG7ryBsaeG7h3UgU3VwZXJtYXJrZXQgVHJhbnNhY3Rpb25zDQoNCmBgYHtyfQ0KcjEgPC0gdGFibGUoZF9jYXQkTWFyaXRhbFN0YXR1cyxkX2NhdCRIb21lb3duZXIpDQpyMQ0KYGBgDQoNCg0KYGBge3J9DQpwcm9wX3RhYmxlIDwtIHByb3AudGFibGUocjEsIG1hcmdpbiA9IDEpDQpwcm9wX3RhYmxlDQpgYGANCk5o4bqtbiB4w6l0OiBE4buxYSB2w6BvIGvhur90IHF14bqjIHRyw6puLCB0YSBuaOG6rW4gdGjhuqV5IHRyb25nIG5ow7NtIG5nxrDhu51pIMSRw6Mga+G6v3QgaMO0biAoTSkgY8OzIDE3MTkgbmfGsOG7nWkgKDI1LjA0JSkga2jDtG5nIHPhu58gaOG7r3UgbmjDoCB2w6AgNTE0NyBuZ8aw4budaSAoNzQuOTYlKSBz4bufIGjhu691IG5ow6AuIEPDsm4gbmjDs20gbmfGsOG7nWkgxJHhu5ljIHRow6JuIChTKSBjw7MgMzg5NiBuZ8aw4budaSAoNTQuMTYlKSBraMO0bmcgc+G7nyBo4buvdSBuaMOgIHbDoCAzMjk3IG5nxrDhu51pICg0NS44NCUpIHPhu58gaOG7r3UgbmjDoC4NCg0KYGBge3J9DQpSRDwtIHByb3BfdGFibGVbMSwgIlkiXSAtIHByb3BfdGFibGVbMiwgIk4iXQ0KUkQNCmBgYA0KVOG7tyBs4buHIG5o4buvbmcgbmfGsOG7nWkgxJHDoyBr4bq/dCBow7RuIChNKSBz4bufIGjhu691IG5ow6AgbMOgIGNhbyBoxqFuIHNvIHbhu5tpIHThu7cgbOG7hyBuZ8aw4budaSDEkeG7mWMgdGjDom4gKFMpIGtow7RuZyBz4bufIGjhu691IG5ow6AsIHbhu5tpIGNow6puaCBs4buHY2gga2hv4bqjbmcgMjAuOCUuDQoNCmBgYHtyfQ0KUlIgPC0gcmlza3JhdGlvKHIxKQ0KUlINCmBgYA0KTmjhuq1uIHjDqXQ6IEvhur90IHF14bqjIHBow6JuIHTDrWNoIFJlbGF0aXZlIFJpc2sgKFJSKSBjaG8gdGjhuqV5IG5nxrDhu51pIMSR4buZYyB0aMOibiBjw7Mgbmd1eSBjxqEgc+G7nyBo4buvdSBuaMOgIGNo4buJIGLhurFuZyA2MS4xJSBzbyB24bubaSBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4sIHbhu5tpIGtob+G6o25nIHRpbiBj4bqteSA5NSUgdOG7qyA1OS40JSDEkeG6v24gNjIuOSUuIEtob+G6o25nIHRpbiBj4bqteSBraMO0bmcgY2jhu6lhIGdpw6EgdHLhu4sgMSwgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgcsO1IHLDoG5nLiBHacOhIHRy4buLIHAgcuG6pXQgbmjhu48gKGfhuqduIGLhurFuZyAwKSBraOG6s25nIMSR4buLbmggbeG7kWkgbGnDqm4gaOG7hyBnaeG7r2EgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIHbDoCBraOG6oyBuxINuZyBz4bufIGjhu691IG5ow6Aga2jDtG5nIHBo4bqjaSBkbyBuZ+G6q3Ugbmhpw6puLiDEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4gY8OzIGto4bqjIG7Eg25nIHPhu58gaOG7r3UgbmjDoCBjYW8gaMahbiDEkcOhbmcga+G7gyBzbyB24bubaSBuZ8aw4budaSDEkeG7mWMgdGjDom4gdHJvbmcgZOG7ryBsaeG7h3Uga2jhuqNvIHPDoXQuDQoNCmBgYHtyfQ0Kb3IgPC0gb2Rkc3JhdGlvKHIxKQ0Kb3INCmBgYA0KDQpOaOG6rW4geMOpdDogS+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggT2RkcyBSYXRpbyAoT1IpIGNobyB0aOG6pXkgbmjDs20gbmfGsOG7nWkgxJHhu5ljIHRow6JuIGPDsyB04bu3IHPhu5EgY2jDqm5oIGzhu4djaCBvZGRzIHPhu58gaOG7r3UgbmjDoCBjaOG7iSBi4bqxbmcga2hv4bqjbmcgMC4yOCBs4bqnbiBzbyB24bubaSBuaMOzbSBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4sIHbhu5tpIGtob+G6o25nIHRpbiBj4bqteSA5NSUgdOG7qyAwLjI2IMSR4bq/biAwLjMwLiBLaG/huqNuZyB0aW4gY+G6rXkgbsOgeSBraMO0bmcgYmFvIGfhu5NtIGdpw6EgdHLhu4sgMSwgY2jhu6luZyB04buPIHPhu7Ega2jDoWMgYmnhu4d0IGzDoCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IG3huqFuaC4gR2nDoSB0cuG7iyBwIGfhuqduIGLhurFuZyAwIGPFqW5nIGNobyB0aOG6pXkgbeG7kWkgbGnDqm4gaOG7hyBuw6B5IGtow7RuZyBwaOG6o2kgZG8gbmfhuqt1IG5oacOqbi4gxJBp4buBdSBuw6B5IMSR4buTbmcgbmdoxKlhIHbhu5tpIHZp4buHYyBuZ8aw4budaSDEkcOjIGvhur90IGjDtG4gY8OzIG9kZHMgc+G7nyBo4buvdSBuaMOgIGNhbyBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG5nxrDhu51pIMSR4buZYyB0aMOibiwgcGjhuqNuIMOhbmggcsO1IHPhu7Ega2jDoWMgYmnhu4d0IHbhu4Ega2jhuqMgbsSDbmcgc+G7nyBo4buvdSBuaMOgIGdp4buvYSBoYWkgbmjDs20u