PHÂN TÍCH CÁC YẾU TỐ ẢNH HƯỞNG ĐẾN KHẢ NĂNG THU NHẬP


Chương 1. TỔNG QUAN NGHIÊN CỨU


1.1. Lý do chọn đề tài

Phân tích các yếu tố ảnh hưởng đến khả năng thu nhập là một chủ đề quan trọng trong khoa học xã hội và kinh tế học. Người ta biết rằng thu nhập của mỗi cá nhân chịu tác động từ nhiều nhân tố khác nhau như trình độ học vấn, tuổi tác, giới tính, ngành nghề, v.v

Ví dụ, báo cáo của Trung tâm Thống kê Việt Nam (2023) cho thấy lao động nam có thu nhập bình quân tháng cao hơn lao động nữ khoảng 1.37 lần do khác biệt về trình độ học vấn và điều kiện xã hội.

Ngoài ra, nghiên cứu trong nước cũng khẳng định “nhóm lao động có trình độ học vấn cao có thu nhập cao hơn hẳn so với các nhóm khác”

Vì vậy, thông qua bộ dữ liệu Adult (thu thập từ cuộc điều tra dân số Mỹ năm 1994, với nhiệm vụ phân loại thu nhập trên/ dưới 50K USD/năm, chúng ta có thể kiểm định và làm rõ hơn mối quan hệ giữa các yếu tố như trình độ, giới tính, gia đình… với khả năng thu nhập.

Nghiên cứu này giúp làm rõ cơ sở lý thuyết và thực nghiệm về các tác động nói trên, từ đó góp phần đưa ra gợi ý chính sách hoặc định hướng nghề nghiệp phù hợp cho từng nhóm nhân khẩu học.

1.2. Mục tiêu nghiên cứu

1.2.1. Mục tiêu chung

Xác định các yếu tố chủ chốt ảnh hưởng đến khả năng thu nhập của cá nhân (cụ thể là thu nhập trên 50K USD mỗi năm) trong bộ dữ liệu Adult.

Áp dụng các phương pháp thống kê phân tích dữ liệu định tính (bảng tần suất, kiểm định chi-bình phương, hồi quy logistic) để đánh giá độ mạnh của mối quan hệ giữa các yếu tố đó và thu nhập.

1.2.1. Mục tiêu cụ thể

  • Mô tả dữ liệu: Thu thập và làm sạch dữ liệu Adult, thống kê đặc điểm chung (số quan sát, phân bố từng biến, mức thu nhập).

  • Khảo sát từng yếu tố: Phân tích mối liên quan giữa thu nhập (>50K hoặc ≤50K) với các biến như giới tính, tình trạng hôn nhân, trình độ học vấn, số giờ làm việc, v.v., qua bảng chéo và kiểm định thống kê (chi-bình phương, odds ratio).

  • Mô hình hóa: Xây dựng mô hình hồi quy để đánh giá đồng thời ảnh hưởng của nhiều biến định tính và định lượng đến khả năng thu nhập cao.

  • Diễn giải kết quả: Thảo luận kết quả phân tích, đưa ra nhận xét cụ thể và liên hệ thực tế (ví dụ: sự chênh lệch thu nhập giữa nam và nữ, giữa người có học vấn cao và thấp).

1.3. Đối tượng và phạm vi nghiên cứu

  • Đối tượng nghiên cứu: Các cá nhân trong bộ dữ liệu Adult (hay Census Income), gồm 32561 dòng thông tin nhân khẩu và lao động. Mỗi quan sát tương ứng với một cá nhân và có 15 biến: tuổi, giới tính, trình độ học vấn, tình trạng hôn nhân, nghề nghiệp, số giờ làm việc/tuần, quốc tịch…, trong đó biến mục tiêu là mức thu nhập (>50K USD hoặc ≤50K USD)

  • Phạm vi nghiên cứu: Phân tích tập dữ liệu Adult, tập trung vào mối liên quan giữa các biến độc lập (đặc biệt là biến phân loại như giới tính, trình độ, v.v.) với biến phụ thuộc thu nhập. Không xét đến các yếu tố bên ngoài tập dữ liệu (ví dụ thuế, tiết kiệm), chỉ sử dụng thông tin sẵn có trong Adult. Kết quả thu được mang tính minh họa cho bộ dữ liệu này, có thể suy rộng khái quát hóa về quan hệ giữa các yếu tố xã hội-thống kê với thu nhập cá nhân.

1.4. Phương pháp nghiên cứu

1.4.1. Thu thập thông tin

Tập dữ liệu Adult được lấy từ kho dữ liệu UCI ML Repository. Dữ liệu đã được xử lý trước một phần .

Các thông tin bổ sung về dữ liệu (nguồn gốc, ý nghĩa biến, nhiệm vụ phân loại thu nhập trên/ dưới 50K) được tham khảo trực tiếp từ UCI archive.ics.uci.edu và tài liệu hướng dẫn sử dụng.

1.4.1. Xử lý thông tin

Đọc và làm sạch dữ liệu: Sử dụng ngôn ngữ R để đọc file CSV, gán tên cho các biến. Loại bỏ các bản ghi thiếu (giá trị “?”) và cắt bớt khoảng trắng trong các trường ký tự.

Mã hóa biến: Chuyển các biến định tính như GENDER, education, marital-status, occupation, relationship, race, native-country sang dạng nhân tố (factor)..

Khảo sát ban đầu: Sử dụng hàm thống kê (summary, table, dim, …) và trực quan hóa (nếu cần) để kiểm tra tính hợp lệ của dữ liệu, phân phối từng biến, tỉ lệ thu nhập >50K (khoảng 24% quan sát có thu nhập cao).

1.4.1. Đánh giá tổng quan

Sau xử lý, sẽ thực hiện phân tích thống kê mô tả (phần trăm, trung bình, phương sai).

Tiếp theo dùng bảng ngẫu nhiên 2×2 và kiểm định chi-bình phương để kiểm tra sự độc lập giữa từng biến phân loại với thu nhập.

Ngoài ra, xác định odds ratio để đo độ mạnh mối liên hệ giữa hai nhóm (ví dụ: odds thu nhập cao của nam so với nữ). Cuối cùng là xây dựng mô hình hồi quy.

1.5. Kết cấu đề tài

Đề tài được trình bày theo 5 chương như sau:

  • Chương 1. Tổng quan nghiên cứu

  • Chương 2. Cơ sở lý thuyết

  • Chương 3. Dữ liệu và phương pháp nghiên cứu

  • Chương 4. Kết quả nghiên cứu

  • Chương 5. Tổng kết


Chương 2. CƠ SỞ LÝ THUYẾT


2.1. Các khái niệm cơ bản

2.1.1. Khái niệm về thu nhập

Thu nhập của cá nhân hoặc hộ gia đình là số tiền (hoặc giá trị tương đương) mà họ nhận được từ nhiều nguồn khác nhau. Theo định nghĩa chung, “thu nhập là số tiền (hoặc một giá trị tương đương) mà một cá nhân hoặc doanh nghiệp nhận được, thường là để đổi lấy việc cung cấp hàng hóa hoặc dịch vụ hoặc thông qua vốn đầu tư”.

Đối với người lao động, thu nhập chủ yếu dưới dạng tiền lương, lương cơ bản, phụ cấp và các khoản thưởng. Trong ngữ cảnh phân tích này, biến thu nhập thường được định nghĩa nhị phân (ví dụ >50K hoặc ≤50K USD) để đánh giá khả năng có thu nhập cao hay thấp. Định nghĩa về thu nhập đặc biệt quan trọng vì đây là biến phụ thuộc chính trong mô hình phân tích, phản ánh khả năng kinh tế và chất lượng cuộc sống của cá nhân.

2.1.2. Bảng tần số - Bảng tần suất

Bảng tần số (frequency table) là bảng thống kê liệt kê số lượng quan sát ứng với mỗi giá trị hoặc mỗi nhóm giá trị của biến trong mẫu dữ liệu. Ví dụ, khi khảo sát giới tính của 100 cá nhân, bảng tần số có thể cho biết có 60 nam và 40 nữ.

Bảng tần suất (relative frequency table) là bảng tương tự nhưng cho biết tần suất tương đối hoặc tỷ lệ phần trăm thay vì số lượng tuyệt đối. Cột “Percent” trong bảng tần suất hiển thị tỷ lệ phần trăm của từng nhóm so với tổng quan sát. Ví dụ, nếu có 62 nam trên 100 quan sát thì độ phần trăm sẽ là 62%.

Bảng tần số và bảng tần suất là công cụ cơ bản trong thống kê mô tả: chúng giúp hiểu sơ bộ phân bố các biến định tính (như nghề nghiệp, trình độ, khu vực). Trong phân tích, chúng ta sẽ sử dụng các bảng này để kiểm tra phân phối của biến định tính (chẳng hạn phân phối giới tính, chủng tộc) và từ đó nhận xét: biến nào chiếm ưu thế hoặc phân bố đồng đều như thế nào trong mẫu nghiên cứu.

2.2. Phân phối xác suất

2.2.1. Phân phối Poison - Poisson Distribution

Trong lý thuyết xác suất, phân phối Poisson là một phân phối xác suất rời rạc dùng để mô hình hóa số lần một sự kiện xảy ra trong một khoảng thời gian (hoặc không gian) cố định, với điều kiện rằng các sự kiện xảy ra độc lập và theo tỷ lệ trung bình không đổi.

Cụ thể, xác suất có đúng k sự kiện xảy ra được tính bởi công thức:

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

Trong đó:

λ : là số lần kỳ vọng xảy ra của sự kiện

𝑥: là số lần xảy ra cụ thể

Trong đó \(\lambda\) là giá trị trung bình (số sự kiện kỳ vọng).

Phân phối Poisson thường áp dụng khi sự kiện xuất hiện tương đối hiếm và ngẫu nhiên (ví dụ: số cuộc gọi vào tổng đài trong 1 giờ, số lỗi phần mềm trong một ngày). Trong bài toán phân tích thu nhập, mặc dù thường dùng cho dữ liệu đếm, phân phối Poisson có thể được tham khảo khi khảo sát số lần một sự kiện liên quan đến công việc (ví dụ số lần thăng chức, số dự án hoàn thành) hoặc khi biến đếm không có giới hạn trên cố định.

Tuy nhiên, đối với biến nhị phân thu nhập (cao hay thấp), Poisson không áp dụng trực tiếp, nhưng khái niệm này giúp hiểu thêm về các mô hình phân tích xác suất rời rạc khác.

2.2.2. Phân phối nhị thức - Binomial distribution

Phân phối nhị thức là một phân phối xác suất rời rạc với hai tham số chính: số phép thử độc lập \(n\) và xác suất thành công \(p\) trong mỗi phép thử.

Phân phối này mô tả xác suất có đúng \(k\) thành công trong \(n\) thử nghiệm độc lập, mỗi thử nghiệm chỉ có hai kết quả (thành công hoặc thất bại), với cùng xác suất thành công \(p\):

Công thức xác suất của phân phối nhị thức là:

\[ P(X = k) = \binom{n}{k} p^k (1 - p)^{n - k} \]

với \(k=0,1,\dots,n\). Ứng dụng phổ biến của phân phối nhị thức trong thống kê là mô phỏng quá trình đếm số lần xuất hiện của một đặc điểm nhất định (ví dụ: số người có thu nhập trên 50K trong một mẫu 100 người).

Trong phân tích dữ liệu định tính, nếu ta xem mỗi cá nhân có thu nhập cao (>50K) là “thành công” và thấp (≤50K) là “thất bại”, thì tổng số người có thu nhập cao trong mẫu có thể được mô hình hóa gần đúng bởi phân phối nhị thức (nếu các cá nhân được giả định độc lập).

Tuy nhiên, phân phối nhị thức giả định xác suất thành công không đổi, có thể hơi khác thực tế nếu mẫu quá đa dạng về đặc điểm.

2.3. Các nô hình hồi quy nhị phân

2.3.1. Mô hình hồi quy Logistic

Hồi quy Logistic là phương pháp thống kê phổ biến để mô hình hóa và dự đoán xác suất xảy ra của biến phụ thuộc nhị phân (có hai giá trị: ví dụ thu nhập cao hoặc thấp) dựa trên một hoặc nhiều biến độc lập. Mô hình này dùng hàm logistic (sigmoid) để liên kết xác suất \(p = P(Y=1)\) với biến tuyến tính của các tham số:

\[ logit(p)= \log\left(\frac{p}{1-p}\right) = \beta_0 + \beta_1 X_1 + \ldots + \beta_k X_k \]

Nhờ đó, nó cho phép ước lượng hệ số \(\beta_i\) bằng phương pháp hợp lý cực đại (maximum likelihood). Logistic regression thích hợp khi ta quan tâm đến việc dự đoán xác suất (ví dụ khả năng một người có thu nhập trên 50K) và đồng thời đánh giá ảnh hưởng theo odds ratio của các biến giải thích (như tuổi, học vấn, nghề nghiệp).

Ví dụ, trong bộ dữ liệu adult.csv, ta có thể dùng mô hình logistic để phân tích xác suất một cá nhân thu nhập >50K dựa trên các đặc điểm nhân khẩu. Mô hình này giúp suy luận hiệu ứng theo xác suất (p-logits) và thường cho kết quả dễ diễn giải trong điều kiện biến kết quả hiếm hoặc cân bằng.

2.3.2. Mô hình hồi quy Probit

Hồi quy Probit cũng là một dạng mô hình hồi quy cho biến nhị phân, khác ở chỗ hàm liên kết (link function) là phân phối chuẩn tích lũy (hàm CDF của phân phối chuẩn) thay vì hàm logit. Nói cách khác, Probit giả định biến ngẫu nhiên sai số tuân theo phân phối chuẩn, và xác suất \(P(Y=1)\) được tính từ hàm phân phối chuẩn của tổ hợp tuyến tính của các biến độc lập.Công thức mô hình Probit có thể viết là

\[ P(Y = 1 | X) = \Phi(\beta_0 + \beta_1 X_1 + \ldots + \beta_k X_k) \]

trong đó \(\Phi\) là hàm phân phối chuẩn chuẩn hóa. Điểm mạnh của Probit là phù hợp với các tình huống giả sử logic xảy ra theo quy luật “chuông” chuẩn, tuy rằng trong thực tế kết quả thường tương đương rất nhiều với Logistic.

Việc chọn Probit thay vì Logit đôi khi dựa trên giả định về phân phối sai số hoặc truyền thống nghiên cứu. Trong bài phân tích thu nhập, Probit sẽ đưa ra các hệ số có ý nghĩa tương tự so với logistic nhưng trên quy mô chuẩn, và thường sử dụng trong lĩnh vực kinh tế lượng, tâm lý học.

2.3.3. Mô hình hồi quy Cloglog

Hồi quy Cloglog là biến thể khác của hồi quy nhị phân, sử dụng hàm liên kết \(g(p)=\log(-\log(1-p))\) . Hàm liên kết này không đối xứng, thường áp dụng khi xác suất biến cố ở một trong hai đầu rất nhỏ hoặc lớn (ví dụ khi tần suất dương gần 0).

Theo khái niệm GLM, mô hình Cloglog tương ứng với giả thiết rằng tỷ lệ của một sự kiện tuân theo phân phối Poisson. Cụ thể, nếu sự kiện “thu nhập cao” rất hiếm, ta có thể dùng cloglog để mô hình hóa log(-log(1-\(p\))) tuyến tính với biến giải thích.

Mô hình này hữu ích trong trường hợp biến phụ thuộc có phân bố thiên lệch về một phía; kết quả là các hệ số đại diện cho sự thay đổi log(-log(1-\(p\))). Trong phân tích, Logistic/Probit thường được dùng phổ biến hơn, nhưng Cloglog có thể được thử nghiệm nếu dữ liệu cho thấy tần suất thu nhập cao cực kỳ thấp hoặc muốn so sánh mô hình khác.

\[ \log(-\log(1 - p)) = \beta_0 + \beta_1 X_1 + \ldots + \beta_k X_k \]

2.4. Đánh giá mô hình và các chỉ số thống kê

2.4.1. Độ nhạy và độ đặc hiệu

Độ nhạy (sensitivity) và độ đặc hiệu (specificity) là các chỉ số đánh giá hiệu suất của mô hình phân loại nhị phân, đặc biệt trong lĩnh vực y tế nhưng cũng áp dụng cho bất kỳ phân lớp nào. Cụ thể, độ nhạy là xác suất (hoặc tỷ lệ) mà mô hình dự báo dương tính khi đối tượng thực sự có kết quả dương tính (true positive rate). Trong ngữ cảnh thu nhập, nếu ta xét “dương tính” là có thu nhập cao, độ nhạy cho biết tỷ lệ người có thu nhập cao được mô hình dự đoán chính xác.

Độ đặc hiệu là xác suất mô hình dự báo âm tính khi đối tượng thực sự âm tính (true negative rate), tức là tỷ lệ người thu nhập thấp được mô hình dự đoán đúng.

Hai chỉ số này bổ sung cho nhau: một mô hình có độ nhạy cao thường đánh đổi với độ đặc hiệu thấp và ngược lại. Ví dụ, khi phân tích kết quả phân loại (có thể thông qua ma trận nhầm lẫn), chúng ta tính độ nhạy = TP/(TP+FN) và độ đặc hiệu = TN/(TN+FP).

Độ nhạy đặc biệt quan trọng nếu ta muốn giảm thiểu việc bỏ sót các trường hợp thu nhập cao (ví dụ để ngăn chặn sai sót đánh giá những người thực sự có thu nhập cao bị gán nhầm là thấp), còn độ đặc hiệu quan trọng để tránh dự báo sai quá nhiều trường hợp thu nhập thấp.

2.4.2. Relative Risk

Tỷ số rủi ro tương đối (relative risk – RR) so sánh xác suất xảy ra một sự kiện giữa hai nhóm (ví dụ nhóm “được tiếp xúc” và nhóm “chưa tiếp xúc”).

Nếu ta quan tâm tới biến THU NHẬP CAO giữa hai nhóm đặc điểm dân số, RR được tính bằng tỉ số: xác suất thu nhập cao ở nhóm thứ nhất chia cho xác suất thu nhập cao ở nhóm thứ hai.

Theo định nghĩa, “Relative risk is a ratio of the probability of an event occurring in the exposed group versus the probability of the event occurring in the non-exposed group”.

RR=1 có nghĩa không có sự khác biệt giữa hai nhóm; RR>1 nghĩa nhóm đầu có khả năng sự kiện cao hơn nhóm sau; RR<1 ngược lại.

Ví dụ, nếu giả định “nhóm nam” là nhóm nghiên cứu và “nhóm nữ” là nhóm đối chứng, RR >1 cho thấy nam giới có khả năng thu nhập cao hơn nữ giới.

Trong phân tích, RR thường được sử dụng khi dữ liệu có thiết kế theo nghiên cứu đoàn hệ hoặc quan sát, và là phép đo trực tiếp liên quan đến xác suất (risk) giữa hai nhóm.

2.4.3. Odds Ratio

Tỷ số chênh (odds ratio – OR) là tỷ lệ của hai odds, thường dùng trong các nghiên cứu case-control hoặc hồi quy logistic để đo mức độ liên quan giữa biến độc lập và biến phụ thuộc nhị phân.

. “The odds ratio (OR) is a ratio of two sets of odds: the odds of the event occurring in an exposed group versus the odds of the event occurring in a non-exposed group”

Theo đó, odds của một nhóm là xác suất event xảy ra chia cho xác suất event không xảy ra.

  • Một OR =1 chỉ ra không có sự liên quan giữa biến “tiếp xúc” và kết quả;

  • OR>1 chỉ event có khả năng xảy ra cao hơn khi “tiếp xúc”; OR<1 chỉ xác suất xảy ra thấp hơn. Trong mô hình hồi quy logistic, hệ số logit cho biết OR tương ứng của biến giải thích.

Ví dụ, nếu OR của biến “bằng đại học” so với “không đại học” bằng 2, thì người có bằng đại học có odds thu nhập cao gấp đôi người không có bằng.

OR đặc biệt hữu ích trong phân tích hồi quy logistic bởi nó liên kết trực tiếp với hệ số ước lượng và có thể báo cáo kèm khoảng tin cậy.

2.4.4. Khoảng ước lượng cho tỷ lệ

Khoảng ước lượng (khoảng tin cậy – Confidence Interval, CI) cung cấp phạm vi giá trị mà tham số (như OR hay RR) có thể thực sự thuộc về với một độ tin cậy nhất định (thường 95%). Ví dụ, khoảng tin cậy 95% cho OR được tính dựa trên log(OR) cộng/trừ mức sai số chuẩn nhân với 1.96

Cụ thể, “Upper 95% CI = exp[ ln(OR) + 1.96 * sqrt(1/a+1/b+1/c+1/d) ]” và tương tự cho cận dưới.

Nếu khoảng tin cậy của OR (tại 95%) bao gồm giá trị 1, ta nói OR không có ý nghĩa thống kê ở mức 5%.

Tương tự cho RR, CI là công cụ để đánh giá độ chính xác của ước lượng và kiểm định giả thuyết.

Trong phân tích thu nhập, chúng ta sẽ báo cáo cùng OR và RR kèm theo khoảng tin cậy để biết kết quả bao nhiêu phần trăm đáng tin cậy trong dân số.

2.4.5. AIC - Akaike Information Criterion

Tiêu chí thông tin Akaike (AIC) là một chỉ số dùng cho lựa chọn mô hình, đánh giá chất lượng tương đối của các mô hình thống kê bằng cách cân bằng độ khớp và độ phức tạp của mô hình.

Theo công thức, “AIC = 2k – 2 ln(L)”, trong đó \(k\) là số tham số ước lượng và \(\hat L\) là giá trị cực đại của hàm hợp lý

Mô hình có AIC thấp hơn được xem là tốt hơn vì mất ít thông tin (goodness-of-fit cao với độ phức tạp thấp hơn). Khi so sánh nhiều mô hình hồi quy (ví dụ so sánh logistic, probit, cloglog), chúng ta thường chọn mô hình có AIC nhỏ nhất.

Lưu ý AIC chỉ đánh giá tương đối giữa các mô hình, không có ngưỡng “đúng/sai”. Ví dụ, nếu hai mô hình logistic với các biến khác nhau có AIC 1400 và 1380, thì mô hình AIC 1380 được ưa chuộng (ít mất thông tin hơn).

2.4.5. Deviance

Deviance là chỉ số đo độ phù hợp của mô hình thống kê dựa trên giá trị log-likelihood, tương tự như tổng bình phương dư trong hồi quy tuyến tính. Công thức tổng quát của deviance đối với một mô hình \(M_0\) so với mô hình bão hòa (saturated model) được định nghĩa là:

\[ D = 2 \left( \log L_{\text{saturated}} - \log L_{M_0} \right) \]

Mô hình bão hòa có số tham số bằng số quan sát, nên độ phù hợp tối đa (\(\log L_{\text{saturated}}\)). Deviance cho ta biết mức độ mất mát thông tin của mô hình \(M_0\) so với trường hợp tốt nhất. Deviance càng nhỏ càng cho thấy mô hình khớp dữ liệu tốt.

Trong các mô hình GLM như logistic, ta dùng deviance còn sót lại (residual deviance) để kiểm định so với deviance gốc, và so sánh deviance giữa các mô hình lồng nhau để kiểm định giả thuyết (theo phân phối \(\chi^2\) với bậc tự do phù hợp)

2.4.5. Brier Score

Brier score là thước đo độ chính xác của các dự báo xác suất trong bài toán phân loại (đặc biệt nhị phân). Nó được tính bằng giá trị bình phương sai số trung bình giữa xác suất dự báo và kết quả thực tế (0 hoặc 1):

\[ BS = \frac{1}{N} \sum_{i = 1}^{N} (f_i - o_i)^2 \]

Trong đó:

  • \(f_i\) là xác suất được mô hình dự báo cho trường hợp thứ \(i\)

  • \(o_i\) là kết quả thực tế (0 hoặc 1)

Brier score dao động từ 0 (đoán hoàn hảo) đến 1 (rất kém, thường với hai đầu tương ứng 0 và 1). Trong phân tích thu nhập, khi dùng mô hình logistic/probit dự đoán xác suất thu nhập cao, Brier score giúp đánh giá độ chính xác tổng thể của xác suất dự đoán. Một mô hình với Brier score thấp (gần 0) cho thấy dự báo xác suất tốt hơn. Brier score bổ sung cho AUC-ROC, độ nhạy/đặc hiệu bằng cách xem xét sai số dự báo xác suất một cách tổng quan.

2.5. Lược khảo nghiên cứu

2.5.1. Nghiên cứu trong nước

Trong nước đã có nhiều nghiên cứu điều tra các yếu tố ảnh hưởng đến thu nhập của người lao động tại Việt Nam. Ví dụ, Tống Quốc Bảo (2015) Phân tích thu nhập của lao động khu vực dịch vụ dựa trên dữ liệu điều tra mức sống hộ gia đình và mô hình hồi quy phân vị. Kết quả cho thấy các yếu tố như số năm đi học, kinh nghiệm làm việc, giờ làm trung bình, giới nam, khu vực đô thị, chức vụ quản lý… có tác động thuận chiều làm tăng thu nhập, trong khi làm việc tại doanh nghiệp nhà nước, sinh sống ở các vùng miền Trung có tác động ngược chiều giảm thu nhập

Tương tự, Nguyễn Hồng Hà và Lê Thị Kim Chi (2020) nghiên cứu tại Khu công nghiệp Long Đức (Trà Vinh) xác định năm yếu tố quan trọng: ngành nghề, kinh nghiệm, trình độ chuyên môn, dân tộc và điều kiện môi trường làm việc, trong đó “kinh nghiệm” và “trình độ chuyên môn” ảnh hưởng mạnh nhất lên thu nhập. Các nghiên cứu này sử dụng các phương pháp định lượng như hồi quy OLS hoặc hồi quy Logistic để đánh giá ảnh hưởng tương đối của từng yếu tố. Nhìn chung, các công trình trong nước cho thấy các yếu tố nhân khẩu học (tuổi, giới, dân tộc), cấp học vấn, kinh nghiệm và điều kiện làm việc đóng vai trò then chốt đối với thu nhập của lao động Việt Nam.

2.5.2. Nghiên cứu nước ngoài

Các nghiên cứu quốc tế cũng xác định nhiều yếu tố xã hội – kinh tế ảnh hưởng đến thu nhập cá nhân. Ví dụ, Baláková và cộng sự (2023) sử dụng dữ liệu EU-SILC cho 27 nước EU để xây dựng “Chỉ số Thu nhập” và tìm các nhân tố quyết định thu nhập cá nhân. Họ thấy những nhân tố chủ yếu ảnh hưởng đến chỉ số thu nhập bao gồm cấu trúc hộ gia đình (ví dụ số lượng thành viên), ngành nghề (nông nghiệp và dịch vụ thường liên quan đến thu nhập thấp hơn) và mức đô thị hóa (người sống ở nông thôn thường có thu nhập thấp hơn). Kết quả này gợi ý các chính sách hướng tới hỗ trợ nhóm dân số dễ bị tổn thương (hộ đơn thân, nông dân, khu vực nông thôn) để thu hẹp khoảng cách thu nhập.

Trong bối cảnh nghiên cứu thu nhập ở Việt Nam, một công trình đăng trên Asian Journal of Economics, Business and Accounting (Son et al., 2024) “Khảo sát hộ nông thôn tại vùng Trung du Bắc Bộ Việt Nam”. Họ phát hiện giới tính, tuổi tác, trình độ học vấn và tích lũy tiết kiệm ảnh hưởng đáng kể đến thu nhập hộ gia đình; trong đó chênh lệch giới tính rõ nét ở nhóm thu nhập thấp, và vai trò của yếu tố dân tộc càng nổi bật ở nhóm thu nhập cao. Như vậy, cả trong nước lẫn quốc tế, nghiên cứu cho thấy học vấn, kinh nghiệm lao động, đặc điểm dân số và điều kiện kinh tế – xã hội là các nhân tố phổ biến tác động đến thu nhập cá nhân. Những kết quả tham khảo này giúp định hướng việc chọn biến và cách hiểu kết quả phân tích hồi quy về sau trong bài.


Chương 3. DỮ LIỆU VÀ PHƯƠNG PHÁP NGHIÊN CỨU


3.1. Tổng quan về bộ dữ liệu

Bộ dữ liệu Adult (hay Census Income 1994) ghi lại thông tin nhân khẩu học và việc làm của 48842 cá nhân ở Mỹ, với 14 đặc trưng bao gồm các biến phân loại (như workclass, education, marital-status, occupation…) và các biến số (như age, education-num, hours-per-week…)

Nhiệm vụ phân loại chính là dự đoán xem thu nhập hàng năm của một người có vượt trên $50.000 hay không không dựa trên dữ liệu điều tra dân số. Đây còn được gọi là tập dữ liệu “Thu nhập điều tra dân số”.

Theo thông tin từ UCI Machine Learning Repository, các bản ghi được trích xuất từ dữ liệu điều tra dân số năm 1994 bởi Barry Becker (với điều kiện lọc: tuổi >16, thu nhập cá nhân >100, trọng số dân số >1, giờ làm >0).

Trong quá trình xử lý, các giá trị thiếu (“?”) đã được loại bỏ, kết quả còn lại 32561 quan sát với đầy đủ 15 cột dữ liệu (bao gồm 14 biến giải thích và biến mục tiêu).

  • Đặc điểm của tập dữ liệu: Đa biến

  • Lĩnh vực chủ đề: Khoa học xã hội

  • Loại tính năng: Phân loại, Số nguyên

  • Các trường hợp: 48842

  • Các biến: Gồm 14 biến:

Đọc file: Đầu tiên ta đọc dữ liệu adult.csv vào R, xác định cột và loại bỏ các giá trị thiếu được mã hoá bằng ký tự “?”.

adult <- read.csv("C:/Users/HP/Downloads/adult.csv", header = TRUE, stringsAsFactors = FALSE)
colnames(adult) <- c("age","workclass","fnlwgt","education","education_num",
                     "marital_status","occupation","relationship","race","GENDER",
                     "capital_gain","capital_loss","hours_per_week",
                     "native_country","income")

Cấu trúc dữ liệu: Sử dụng str() để xem thông tin cấu trúc. Ta thấy tổng số hàng và kiểu dữ liệu của mỗi cột.

str(adult)
## 'data.frame':    32560 obs. of  15 variables:
##  $ age           : int  50 38 53 28 37 49 52 31 42 37 ...
##  $ workclass     : chr  " Self-emp-not-inc" " Private" " Private" " Private" ...
##  $ fnlwgt        : int  83311 215646 234721 338409 284582 160187 209642 45781 159449 280464 ...
##  $ education     : chr  " Bachelors" " HS-grad" " 11th" " Bachelors" ...
##  $ education_num : int  13 9 7 13 14 5 9 14 13 10 ...
##  $ marital_status: chr  " Married-civ-spouse" " Divorced" " Married-civ-spouse" " Married-civ-spouse" ...
##  $ occupation    : chr  " Exec-managerial" " Handlers-cleaners" " Handlers-cleaners" " Prof-specialty" ...
##  $ relationship  : chr  " Husband" " Not-in-family" " Husband" " Wife" ...
##  $ race          : chr  " White" " White" " Black" " Black" ...
##  $ GENDER        : chr  " Male" " Male" " Male" " Female" ...
##  $ capital_gain  : int  0 0 0 0 0 0 0 14084 5178 0 ...
##  $ capital_loss  : int  0 0 0 0 0 0 0 0 0 0 ...
##  $ hours_per_week: int  13 40 40 40 40 16 45 50 40 80 ...
##  $ native_country: chr  " United-States" " United-States" " United-States" " Cuba" ...
##  $ income        : chr  " <=50K" " <=50K" " <=50K" " <=50K" ...

Thăm dò nhanh: Hiển thị một vài dòng đầu/cuối để hiểu sơ bộ dữ liệu.

head(adult)
##   age         workclass fnlwgt  education education_num         marital_status
## 1  50  Self-emp-not-inc  83311  Bachelors            13     Married-civ-spouse
## 2  38           Private 215646    HS-grad             9               Divorced
## 3  53           Private 234721       11th             7     Married-civ-spouse
## 4  28           Private 338409  Bachelors            13     Married-civ-spouse
## 5  37           Private 284582    Masters            14     Married-civ-spouse
## 6  49           Private 160187        9th             5  Married-spouse-absent
##           occupation   relationship   race  GENDER capital_gain capital_loss
## 1    Exec-managerial        Husband  White    Male            0            0
## 2  Handlers-cleaners  Not-in-family  White    Male            0            0
## 3  Handlers-cleaners        Husband  Black    Male            0            0
## 4     Prof-specialty           Wife  Black  Female            0            0
## 5    Exec-managerial           Wife  White  Female            0            0
## 6      Other-service  Not-in-family  Black  Female            0            0
##   hours_per_week native_country income
## 1             13  United-States  <=50K
## 2             40  United-States  <=50K
## 3             40  United-States  <=50K
## 4             40           Cuba  <=50K
## 5             40  United-States  <=50K
## 6             16        Jamaica  <=50K
tail(adult)
##       age     workclass fnlwgt     education education_num      marital_status
## 32555  22       Private 310152  Some-college            10       Never-married
## 32556  27       Private 257302    Assoc-acdm            12  Married-civ-spouse
## 32557  40       Private 154374       HS-grad             9  Married-civ-spouse
## 32558  58       Private 151910       HS-grad             9             Widowed
## 32559  22       Private 201490       HS-grad             9       Never-married
## 32560  52  Self-emp-inc 287927       HS-grad             9  Married-civ-spouse
##               occupation   relationship   race  GENDER capital_gain
## 32555    Protective-serv  Not-in-family  White    Male            0
## 32556       Tech-support           Wife  White  Female            0
## 32557  Machine-op-inspct        Husband  White    Male            0
## 32558       Adm-clerical      Unmarried  White  Female            0
## 32559       Adm-clerical      Own-child  White    Male            0
## 32560    Exec-managerial           Wife  White  Female        15024
##       capital_loss hours_per_week native_country income
## 32555            0             40  United-States  <=50K
## 32556            0             38  United-States  <=50K
## 32557            0             40  United-States   >50K
## 32558            0             40  United-States  <=50K
## 32559            0             20  United-States  <=50K
## 32560            0             40  United-States   >50K

Giá trị thiếu: Kiểm tra các biến định tính (categorical) xem có NA không. Ta phát hiện có NA ở các cột workclass, occupation, native_country (giá trị “?”). Ví dụ:

sapply(adult %>% select(workclass, occupation, native_country), 
       function(x) sum(is.na(x)))
##      workclass     occupation native_country 
##              0              0              0

Vì tỷ lệ giá trị thiếu rất nhỏ so với kích thước mẫu (ví dụ chỉ khoảng 6% cho workclass), ta lựa chọn loại bỏ những dòng có NA để đảm bảo tính chính xác của phân tích và tránh ảnh hưởng không mong muốn. Sau đó, ta chuyển các biến định tính sang factor để tiện xử lý.

# Loại bỏ khoảng trắng ở đầu/cuối các biến dạng chuỗi
adult <- adult %>% mutate(across(where(is.character), trimws))

# Thay thế "?" bằng NA
adult[adult == "?"] <- NA

# Loại bỏ các dòng có NA
adult <- na.omit(adult)
adult <- na.omit(adult)
adult <- adult %>%
  mutate_at(vars(workclass, education, marital_status, occupation, 
                 relationship, race, GENDER, native_country, income),
            factor)

Adult.csv là một bộ dữ liệu bao gồm 32561 quan sát và 14 biến, cụ thể là các biến:

Nhóm biến Biến cụ thể Mục tiêu phân tích chính
Biến định tính workclass, education, marital-status, occupation, relationship, race, GENDER, native-country Thống kê tần số, biểu đồ cột, phân phối theo nhóm
Biến định lượng age, fnlwgt, education-num, capital-gain, capital-loss, hours-per-week Mô tả thống kê, phân phối, kiểm định, khoảng tin cậy
Biến mục tiêu (target) income Dự đoán phân loại: <=50K hoặc >50K

3.1.1. Ý nghĩa các biến

Bảng biến trong dữ liệu Adult bao gồm các nhóm chính như sau:

Biến định tính:

  • workclass – Thành phần việc làm (khu vực làm việc, ví dụ: Private (tư nhân), Self-emp-not-inc (tự làm không có công ty), Federal-gov (chính phủ liên bang), …).

  • education – Trình độ học vấn (bằng cấp, ví dụ: Bachelors, HS-grad (tốt nghiệp THPT), Masters, Doctorate, Assoc-voc, …).

  • marital_status – Tình trạng hôn nhân (ví dụ: Married-civ-spouse, Divorced, Never-married, Widowed, …).

  • occupation – Ngành nghề / nghề nghiệp (ví dụ: Tech-support, Sales, Exec-managerial, Prof-specialty, Handlers-cleaners, …).

  • relationship – Quan hệ gia đình (ví dụ: Husband, Wife, Not-in-family, Own-child, Unmarried, …).

  • race – Chủng tộc (ví dụ: White, Black, Asian-Pac-Islander, Amer-Indian-Eskimo, Other).

  • GENDER – Giới tính (Male = nam, Female = nữ).

  • native_country – Quốc gia nơi sinh (ví dụ: United-States, Mexico, India, Vietnam, …).

Biến định lượng:

  • age – Tuổi (số nguyên dương). Ví dụ tuổi trong tập dữ liệu này dao động từ 17 đến 90.

  • fnlwgt – Trọng số dân số (Final Weight, số người đại diện cho một cá nhân trong mẫu). Giá trị lớn thể hiện cá nhân đó đại diện cho nhiều người trong dân số. Biến này chủ yếu dùng trong phân tích khảo sát.

  • education_num – Số năm học tương ứng với education. Ví dụ HS-grad ≈ 9 năm, Bachelors ≈ 13 năm, Masters ≈ 14 năm, Doctorate ≈ 16 năm.

  • capital_gain – Thu nhập vốn (từ đầu tư, bán tài sản trong năm). Phần lớn cá nhân có giá trị này bằng 0 (không có lãi vốn). Phân phối lệch phải.

  • capital_loss – Lỗ vốn (tổn thất vốn từ đầu tư). Tương tự capital_gain, hầu hết giá trị bằng 0.

  • hours_per_week – Số giờ làm việc mỗi tuần. Ví dụ phần lớn làm 40 giờ/tuần (toàn thời gian tiêu chuẩn), một số làm ít (ví dụ 10–20 giờ/tuần) và một số làm nhiều (tới 60–80 giờ hoặc hơn).

Biến mục tiêu (Target):

  • income – Mức thu nhập hàng năm (phan loại nhị phân). Bao gồm hai nhóm: “<=50K” (thu nhập ≤50.000 USD) và “>50K” (thu nhập trên 50.000 USD).

3.1.2. Phạm vi quan sát

Dữ liệu lấy mẫu từ dân số Hoa Kỳ năm 1994. Phạm vi quan sát chỉ gồm những người lao động (trên 16 tuổi) có hoạt động kinh tế (nghĩa là có giờ làm >0) và có thu nhập cá nhân hợp lệ (>100 USD).

Do đó, dữ liệu tập trung vào nhóm dân số trưởng thành đang đi làm, phản ánh cơ cấu nhân khẩu học và nghề nghiệp của lực lượng lao động Hoa Kỳ thời điểm đó. Sau khi loại bỏ các bản ghi thiếu (coded là “?”), tập dữ liệu phân tích bao gồm 32561 cá nhân với thông tin về giới tính, trình độ, tuổi, giờ làm việc, v.v., kèm theo nhãn thu nhập.

3.2. Xác định biến phụ thuộc và biến độc lập

Trong bài toán này, biến phụ thuộc là income (thu nhập), mục tiêu phân loại xem thu nhập cá nhân có trên 50K USD mỗi năm hay không.

Các biến độc lập (các yếu tố ảnh hưởng) được quan tâm bao gồm: Giới tính (GENDER), Trình độ học vấn (education), Tuổi (age) và Số giờ làm việc mỗi tuần (hours_per_week). Ngoài ra, tập dữ liệu còn có các biến giải thích khác như workclass, occupation, race,… nhưng trong phần phân tích thống kê mô tả này ta tập trung vào bốn biến đã nêu, vì chúng là những yếu tố nhân khẩu học quan trọng thường liên quan đến mức thu nhập.

3.3. Thống kê mô tả

3.3.1. Thống kê mô tả biến phụ thuộc- Biến thu nhập

Đầu tiên, ta xem xét phân phối của biến income.

# Thống kê tần suất cho biến income
table(adult$income)
## 
## <=50K  >50K 
## 22653  7508
prop.table(table(adult$income))*100
## 
##    <=50K     >50K 
## 75.10693 24.89307
# Chuẩn bị dữ liệu tần suất và tỷ lệ %
df_income <- as.data.frame(table(adult$income))
colnames(df_income) <- c("income", "count")
df_income$percent <- df_income$count / sum(df_income$count) * 100

# (a) Đồ thị cột thể hiện số cá nhân
p1 <- ggplot(df_income, aes(x = income, y = count, fill = income)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = count), vjust = -0.5, size = 4) +
  labs(x = "Thu nhập hàng năm",
       y = "Số cá nhân",
       title = "(a) Số cá nhân theo mức thu nhập") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# (b) Pie chart thể hiện tỷ lệ phần trăm
p2 <- ggplot(df_income, aes(x = "", y = percent, fill = income)) +
  geom_col(width = 1, color = "white", show.legend = FALSE) +
  coord_polar(theta = "y") +
  geom_text(aes(label = paste0(round(percent, 1), "%")),
            position = position_stack(vjust = 0.5), size = 4) +
  labs(title = "(b) Tỷ lệ phần trăm thu nhập") +
  theme_void()

# Kết hợp hai biểu đồ bên nhau
grid.arrange(
  p1, p2,
  ncol = 2,
  top = textGrob(
    "Hình 3.1. Biểu đồ cột và biểu đồ tròn thể hiện tần số và tần suất của biến thu nhập",
    gp = gpar(fontsize = 14, fontface = "bold")
  )
)

Kết quả tính toán cho thấy có 22653 cá nhân có thu nhập ≤50K (chiếm khoảng 75.11%), và 7508 cá nhân có thu nhập >50K (chiếm khoảng 24.89%).

Phần lớn cá nhân có thu nhập năm dưới hoặc bằng 50K USD, chỉ khoảng một phần tư có thu nhập cao hơn. Điều này hợp lý trong bối cảnh kinh tế năm 1994 tại Mỹ, khi chỉ một tỷ lệ nhất định dân số có thu nhập cao (gồm các ngành nghề trình độ cao). Kết quả này cũng cho thấy cần quan sát thêm xem các biến nhân khẩu học (giới tính, học vấn, v.v.) có quan hệ như thế nào với sự khác biệt thu nhập này.

3.3.2. Thống kê mô tả biến độc lập

3.3.2.1. Biến GENDER

Phân phối theo giới tính cho thấy bao nhiêu % nam và nữ

# Tần suất và phần trăm theo giới tính
table(adult$GENDER)
## 
## Female   Male 
##   9782  20379
prop.table(table(adult$GENDER))*100
## 
##   Female     Male 
## 32.43261 67.56739
# Tần suất và tỷ lệ phần trăm
df_gen <- as.data.frame(table(adult$GENDER))
colnames(df_gen) <- c("GENDER","count")
df_gen$percent <- df_gen$count / sum(df_gen$count) * 100

# Bar chart
p1 <- ggplot(df_gen, aes(x = GENDER, y = count, fill = GENDER)) +
  geom_col(show.legend = FALSE) +
  geom_text(aes(label = count), vjust = -0.5) +
  labs(x = "Giới tính", y = "Số cá nhân", title = "(a) Số cá nhân theo giới tính") +
  theme_minimal()

# Pie chart
p2 <- ggplot(df_gen, aes(x = "", y = percent, fill = GENDER)) +
  geom_col(width = 1, show.legend = FALSE) +
  coord_polar("y") +
  geom_text(aes(label = paste0(round(percent,1), "%")),
            position = position_stack(vjust = 0.5)) +
  labs(title = "(b) Tỷ lệ phần trăm theo giới tính") +
  theme_void()

# Hiển thị cùng nhau với tiêu đề chung
grid.arrange(
  p1, p2,
  ncol = 2,
  top = textGrob(
    "Hình 3.2. Biểu đồ cột và biểu đồ tròn thể hiện tần số và tần suất của biến giới tính",
    gp = gpar(fontsize = 14, fontface = "bold")
  )
)

Kết quả tính được có 20379 nam và 9782 nữ, tức khoảng 67.6% nam và 32.4% nữ trong dữ liệu.

Tỷ lệ nam gấp 2 lần tỉ lệ nữ. Điều này có thể do mẫu chỉ bao gồm người đi làm có thu nhập, trong khi tỉ lệ tham gia lao động của nam thường cao hơn nữ. Tương quan thực tế cho thấy ở nhiều quốc gia, nam giới có xu hướng chiếm số lượng lớn hơn trong lực lượng lao động (mặc dù khoảng cách giới tính ngày càng thu hẹp), vì vậy kết quả trên không bất ngờ.

Mô hình cũng cần lưu ý yếu tố giới tính khi dự báo thu nhập (ví dụ: có thể nam giới nói chung có thu nhập trung bình cao hơn nữ, như đã được quan sát trong nhiều thống kê lao động_

3.3.2.2. Biến EDUCATION

Biến education (bằng cấp) có nhiều mức độ khác nhau. Ta tính tần suất cho mỗi mức độ:

# Thống kê tần suất cho biến education
table(adult$education)
## 
##         10th         11th         12th      1st-4th      5th-6th      7th-8th 
##          820         1048          377          151          288          557 
##          9th   Assoc-acdm    Assoc-voc    Bachelors    Doctorate      HS-grad 
##          455         1008         1307         5043          375         9840 
##      Masters    Preschool  Prof-school Some-college 
##         1627           45          542         6678
prop.table(table(adult$education))*100
## 
##         10th         11th         12th      1st-4th      5th-6th      7th-8th 
##    2.7187427    3.4746859    1.2499586    0.5006465    0.9548755    1.8467557 
##          9th   Assoc-acdm    Assoc-voc    Bachelors    Doctorate      HS-grad 
##    1.5085707    3.3420643    4.3334107   16.7202679    1.2433275   32.6249130 
##      Masters    Preschool  Prof-school Some-college 
##    5.3943835    0.1491993    1.7970226   22.1411757
# Vẽ biểu đồ với tiêu đề đầy đủ
ggplot(adult, aes(x = fct_infreq(education))) +
  geom_bar(fill = "#4C72B0") +
  geom_text(stat = "count",
            aes(label = ..count..),
            vjust = -0.3, size = 3) +
  labs(
    x = "Trình độ học vấn",
    y = "Số cá nhân",
    title = "Hình 3.3. Biểu đồ cột phân phối trình độ học vấn"
  ) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Kết quả cho thấy nhóm đông nhất là HS-grad (tốt nghiệp THPT) với 9840 người (~32.62%), tiếp theo là Some-college (6678 người, ~22.14%) và Bachelors (5043 người, ~16.72%). Các trình độ cao như Masters (1627 người) hay Doctorate (375 người) chiếm tỉ lệ nhỏ hơn.

Đa số cá nhân trong mẫu có trình độ từ THPT đến đại học. Điều này hợp với thực tế: mức thu nhập cao thường gắn với trình độ học vấn cao hơn (sau đại học). Chúng ta có thể thấy tỷ lệ người có bằng cử nhân trở lên (Bachelors, Masters, Doctorate) chiếm một phần đáng kể, điều này cho thấy rằng trình độ học vấn là yếu tố quan trọng đáng khảo sát khi phân tích thu nhập.

3.3.2.3. Biến AGE

Biến age là biến định lượng biểu thị tuổi của cá nhân. Ta tính các chỉ số thống kê cơ bản:

# Tóm tắt thống kê mô tả cho tuổi
summary(adult$age)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   17.00   28.00   37.00   38.44   47.00   90.00
sd(adult$age)
## [1] 13.13488

Với số quan sát 32561, giá trị nhỏ nhất là 17 tuổi, lớn nhất là 90 tuổi. Tuổi trung bình (Mean) khoảng 38.44, độ lệch chuẩn ~13.13, giá trị trung vị (Median) = 37. Tứ phân vị (28, 47) cho thấy 50% cá nhân có tuổi từ 28 đến 47.

# (a) Histogram
p1 <- ggplot(adult, aes(x = age)) +
  geom_histogram(bins = 30, fill = "#4C72B0", color = "white") +
  labs(x = "Tuổi", y = "Số cá nhân", title = "(a) Phân phối độ tuổi") +
  theme_minimal()

# (b) Boxplot
p2 <- ggplot(adult, aes(y = age)) +
  geom_boxplot(fill = "#4C72B0", width = 0.3) +
  labs(y = "Tuổi", title = "(b) Boxplot độ tuổi") +
  theme_minimal(base_size = 12) +
  theme(
    axis.title.x = element_blank(),
    axis.text.x  = element_blank(),
    axis.ticks.x = element_blank()
  )

# Kết hợp hai biểu đồ với tên chung
grid.arrange(
  p1, p2, ncol = 2,
  top = textGrob(
    "Hình 3.4. Biểu đồ Histogram và Boxplot thể hiện phân phối và đặc điểm biến tuổi",
    gp = gpar(fontsize = 14, fontface = "bold")
  )
)

Phân phối tuổi trong mẫu tương đối trải đều ở người trưởng thành. Trung bình ~37 tuổi và nhiều người ở tuổi trung bình 30–40. Điều này hợp lý vì đây là độ tuổi lao động chính. Phần trẻ (17–25) và cao tuổi (>60) có số ít hơn, thể hiện lịch sử chọn mẫu: chỉ những người đang làm việc.

Kết quả này cho thấy tuổi là biến định lượng quan trọng cho phân tích, có thể xem xét mối quan hệ tuyến tính hoặc phi tuyến với thu nhập về lâu dài.

3.3.2.4. Biến HOURS_PER_WEEK

Biến hours_per_week cho biết số giờ làm việc mỗi tuần. Cũng tính thống kê cơ bản:

# Thống kê mô tả cho giờ làm việc/tuần
summary(adult$hours_per_week)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.00   40.00   40.00   40.93   45.00   99.00
sd(adult$hours_per_week)
## [1] 11.98018

Kết quả cho thấy trung vị 40 giờ, trung bình ~40 giờ, độ lệch chuẩn ~11.98. Tứ phân vị (40, 45) cho thấy phần lớn làm 45 giờ hoặc ít hơn. Số giờ tối đa lên tới 99 (một số làm rất nhiều giờ).

# (a) Histogram
p1 <- ggplot(adult, aes(x = hours_per_week)) +
  geom_histogram(bins = 30, fill = "#E69F00", color = "white") +
  labs(x = "Số giờ làm việc mỗi tuần", 
       y = "Số cá nhân", 
       title = "(a) Phân phối số giờ làm việc mỗi tuần") +
  theme_minimal()

# (b) Boxplot
p2 <- ggplot(adult, aes(y = hours_per_week)) +
  geom_boxplot(fill = "#E69F00", width = 0.3) +
  labs(y = "Số giờ làm việc mỗi tuần", 
       title = "(b) Boxplot số giờ làm việc mỗi tuần") +
  theme_minimal(base_size = 12) +
  theme(
    axis.title.x = element_blank(),
    axis.text.x  = element_blank(),
    axis.ticks.x = element_blank()
  )

# Kết hợp với tiêu đề chung
grid.arrange(
  p1, p2,
  ncol = 2,
  top = textGrob(
    "Hình 3.5. Biểu đồ Histogram và Boxplot thể hiện phân phối và đặc điểm biến số giờ làm việc mỗi tuần",
    gp = gpar(fontsize = 14, fontface = "bold")
  )
)

Số giờ làm việc tập trung quanh 40 giờ/tuần (làm việc toàn thời gian tiêu chuẩn). Hơn nửa mẫu làm vừa 40 giờ, một phần nhỏ làm ít (bán thời gian) hoặc rất nhiều (làm thêm).

Kết quả này phản ánh thực tế hầu hết lao động toàn thời gian ở Mỹ làm ~40 giờ/tuần. Phân tích thêm có thể xem liệu làm nhiều giờ hơn có tương quan với thu nhập cao hơn (ví dụ: người làm thêm ngoài giờ có thể kiếm thêm thu nhập).


Chương 4. KẾT QUẢ NGHIÊN CỨU


4.1. Phân tích tác động của từng yếu tố đến khả năng thu nhập

4.1.1. Biến GENDER

Nhiều nghiên cứu cho thấy phụ nữ thường có thu nhập trung bình thấp hơn nam giới. Ví dụ, dữ liệu của ILO ghi nhận rằng ở hầu hết các quốc gia, phụ nữ kiếm được ít hơn nam giới (giới tính nam có mức lương trung bình cao hơn

Bảng tần số - tần suất

# Bảng tần suất giữa giới tính và thu nhập
tbl_gender <- table(adult$GENDER, adult$income)
tbl_gender
##         
##          <=50K  >50K
##   Female  8670  1112
##   Male   13983  6396
# Tỷ lệ phần trăm theo hàng (theo giới tính)
prop.table(tbl_gender, 1)
##         
##              <=50K      >50K
##   Female 0.8863218 0.1136782
##   Male   0.6861475 0.3138525

Kết quả trên cho thấy tỷ lệ người có thu nhập trên 50K giữa nam và nữ khác biệt rõ rệt. Tỷ lệ này ở nam giới cao (khoảng 31.4%) trong khi ở nữ giới chỉ khoảng 11.4%.

Kiểm định Chi bình phương

# Kiểm định độc lập Chi-square
chisq.test(tbl_gender)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tbl_gender
## X-squared = 1415.5, df = 1, p-value < 2.2e-16

Bài toán kiểm định

  • \(H_0\): Giới tính và mức thu nhập độc lập (không có mối liên hệ).
  • \(H_1\): Giới tính và mức thu nhập có mối liên hệ (phụ thuộc nhau).

Kết quả kiểm định Pearson’s Chi-squared test với hiệu chỉnh Yates như sau:

  • Giá trị thống kê \(X^2 = 1415.5\)
  • Bậc tự do \(df = 1\)
  • Giá trị p-value \(< 2.2 \times 10^{-16}\)

Vì p-value rất nhỏ, nhỏ hơn mức ý nghĩa \(\alpha = 0.05\), nên chúng ta bác bỏ giả thuyế \(H_0\)

Điều này cho thấy có mối liên hệ có ý nghĩa thống kê giữa giới tính và mức thu nhập. Nói cách khác, giới tính và mức thu nhập không độc lập, mà phụ thuộc vào nhau.

Trực quan hóa

# Bar chart tỷ lệ thu nhập theo giới tính
df_gender <- as.data.frame(prop.table(tbl_gender, 1))
colnames(df_gender) <- c("GENDER", "income", "pct")

ggplot(df_gender, aes(x=GENDER, y=pct, fill=income)) +
  geom_col(position="dodge") +
  geom_text(aes(label = scales::percent(pct, accuracy = 1)), 
            position = position_dodge(width = 0.9), 
            vjust = -0.25, size = 3) +
  scale_y_continuous(labels = scales::percent_format(accuracy=1), limits = c(0, max(df_gender$pct)*1.15)) +
  scale_fill_manual(values = c("<=50K" = "#1f78b4", ">50K" = "#ff7f00")) +
  labs(title="Hình 4.1. Biểu đồ cột tỷ lệ thu nhập theo giới tính",
       x="Giới tính", y="Phần trăm", fill="Income")

Biểu đồ cột cho thấy nam (“Male”) có tỷ lệ >50K rõ rệt cao hơn nữ (“Female”), minh hoạ sinh động cho kết quả Chi-square và RR/OR ở trên.

Risk Ratio

riskratio(tbl_gender)
## $data
##         
##          <=50K >50K Total
##   Female  8670 1112  9782
##   Male   13983 6396 20379
##   Total  22653 7508 30161
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate    lower    upper
##   Female 1.000000       NA       NA
##   Male   2.760886 2.602862 2.928504
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact    chi.square
##   Female         NA           NA            NA
##   Male            0            0 5.400534e-310
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Theo bảng kết quả, nhóm khách hàng là nữ (Female) được chọn làm nhóm tham chiếu với RR = 1.0000. Nhóm khách hàng là nam (Male) có RR = 2.7609, tức khả năng khách hàng có thu nhập trên 50K trong nhóm nam cao gấp khoảng 2.76 lần so với nhóm nữ. Khoảng ước lượng tin cậy 95% cho RR là (2.6029; 2.9285), cho thấy sự khác biệt này có ý nghĩa thống kê rất cao với p-value gần bằng 0.

Odds Ratio

oddsratio(tbl_gender)
## $data
##         
##          <=50K >50K Total
##   Female  8670 1112  9782
##   Male   13983 6396 20379
##   Total  22653 7508 30161
## 
## $measure
##         odds ratio with 95% C.I.
##          estimate    lower    upper
##   Female 1.000000       NA       NA
##   Male   3.565833 3.329126 3.822584
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact    chi.square
##   Female         NA           NA            NA
##   Male            0            0 5.400534e-310
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Theo bảng kết quả, nhóm khách hàng nữ (Female) được chọn làm nhóm tham chiếu với OR = 1. Nhóm khách hàng nam (Male) có OR = 3.5658, tức là odds (tỷ lệ chênh) để một khách hàng nam có thu nhập trên 50K cao gấp khoảng 3.5658 lần so với một khách hàng nữ. Khoảng ước lượng tin cậy 95% cho OR là (3.3291; 3.8226), và p-value gần bằng 0 cho thấy sự khác biệt này có ý nghĩa thống kê rất cao.

Nam giới có khả năng đạt thu nhập cao hơn nữ giới khoảng 3–4 lần. Kết quả này phù hợp với khảo sát toàn cầu về khoảng cách lương giới tính. Cho thấy giới tính là yếu tố quan trọng. Điều này nhất quán với bằng chứng rộng hơn cho thấy phụ nữ thường bị trả lương thấp hơn nam giới, do nhiều nguyên nhân như phân biệt đối xử, lựa chọn nghề nghiệp, kinh nghiệm lao động, …

4.1.2. Biến EDUCATION

Theo dữ liệu của Cục Thống kê Lao động Mỹ (BLS), mức thu nhập trung bình tăng theo trình độ học vấn: người có học vị càng cao (tiến sĩ, thạc sĩ, cử nhân) có thu nhập trung bình gấp nhiều lần người học vấn thấp. Điều này hàm ý rằng biến trình độ học vấn sẽ tác động tích cực đến khả năng có thu nhập cao.

Bảng tần số - tần suất

# Bảng tần suất theo trình độ học vấn và thu nhập
tbl_edu <- table(adult$education, adult$income)
# Có thể gom nhóm (ví dụ: "Bachelors+" vs "LessThanBach")
adult$edu_high <- ifelse(adult$education %in% 
                         c("Bachelors","Masters","Prof-school","Doctorate","Assoc-acdm","Assoc-voc"),
                         "High", "Low")
# Đặt thứ tự levels để "Low" đứng trước "High"
adult$edu_high <- factor(adult$edu_high, levels = c("Low", "High"))
# Tạo bảng tần suất
tbl_edu2 <- table(adult$edu_high, adult$income)
tbl_edu2
##       
##        <=50K  >50K
##   Low  17081  3178
##   High  5572  4330
prop.table(tbl_edu2, 1)
##       
##            <=50K      >50K
##   Low  0.8431314 0.1568686
##   High 0.5627146 0.4372854

Kiểm định Chi bình phương

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

Bài toán kiểm định

  • \(H_0\): Trình độ học vấn và mức thu nhập độc lập (không có mối liên hệ).
  • \(H_1\): Trình độ học vấn và mức thu nhập có mối liên hệ (phụ thuộc nhau).

Kết quả kiểm định Pearson’s Chi-squared test với hiệu chỉnh Yates như sau:

  • Giá trị thống kê \(X^2 = 2795.8,\)
  • Bậc tự do \(df = 1\)
  • Giá trị p-value \(< 2.2 \times 10^{-16}\)

Vì p-value rất nhỏ, nhỏ hơn mức ý nghĩa \(\alpha = 0.05\), nên chúng ta bác bỏ giả thuyế \(H_0\)

Điều này cho thấy có mối liên hệ có ý nghĩa thống kê giữa giới tính và mức thu nhập. Nói cách khác,Trình độ học vấn và mức thu nhập không độc lập, mà phụ thuộc vào nhau.

Trực quan hóa

Phân tích bảng trên cho thấy tỷ lệ thu nhập >50K cao hơn ở nhóm có trình độ cao. Ví dụ, nhóm học vấn “Bachelors hoặc cao hơn” chiếm phần lớn các trường hợp thu nhập cao. Thống kê Chi-square cũng cho p<0.001, chứng tỏ trình độ học vấn và thu nhập cao có mối liên hệ chặt chẽ.

# Mosaic plot cho trình độ và thu nhập
mosaicplot(tbl_edu2, color=TRUE,
           main="Hình 4.2. Biểu đồ Mosaic Plot giữa thu nhập và trình độ học vấn",
           xlab="Học vấn (High/Low)", ylab="Income")

# Bar chart nhóm High vs Low
df_edu2 <- as.data.frame(prop.table(tbl_edu2,1))
colnames(df_edu2) <- c("edu_high","income","pct")
ggplot(df_edu2, aes(x = edu_high, y = pct, fill = income)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = percent(pct, accuracy = 0.1)),
            position = position_dodge(width = 0.9),
            vjust = -0.25, size = 3) +
  scale_y_continuous(labels = percent) +
  labs(
    title = "Hình 4.3. Biểu đồ cột tỷ lệ thu nhập theo trình độ học vấn", 
    x     = "Học vấn cao (High) vs thấp (Low)", 
    y     = "Phần trăm", 
    fill  = "Income"
  ) +
  theme_minimal()

Nhóm “High” áp đảo về phần trăm thu nhập >50K; mosaic plot cho thấy ô “High–>50K” chiếm diện tích lớn nhất.

Risk Ratio

riskratio(tbl_edu2)
## $data
##        
##         <=50K >50K Total
##   Low   17081 3178 20259
##   High   5572 4330  9902
##   Total 22653 7508 30161
## 
## $measure
##       risk ratio with 95% C.I.
##        estimate    lower    upper
##   Low  1.000000       NA       NA
##   High 2.787591 2.681058 2.898357
## 
## $p.value
##       two-sided
##        midp.exact fisher.exact chi.square
##   Low          NA           NA         NA
##   High          0            0          0
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Theo bảng kết quả, nhóm khách hàng có trình độ học vấn thấp (Low) được chọn làm nhóm tham chiếu với RR = 1.0000. Nhóm khách hàng có trình độ học vấn cao (High) có RR = 2.7876, tức khả năng khách hàng có thu nhập trên 50K trong nhóm trình độ cao cao gấp khoảng 2.79 lần so với nhóm trình độ thấp. Khoảng ước lượng tin cậy 95% cho RR là (2.6811; 2.8984), cho thấy sự khác biệt này có ý nghĩa thống kê rất cao với p-value gần bằng 0.

Odds Ratio

oddsratio(tbl_edu2)
## $data
##        
##         <=50K >50K Total
##   Low   17081 3178 20259
##   High   5572 4330  9902
##   Total 22653 7508 30161
## 
## $measure
##       odds ratio with 95% C.I.
##        estimate   lower    upper
##   Low  1.000000      NA       NA
##   High 4.176425 3.95368 4.411824
## 
## $p.value
##       two-sided
##        midp.exact fisher.exact chi.square
##   Low          NA           NA         NA
##   High          0            0          0
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Theo bảng kết quả, nhóm khách hàng có trình độ học vấn thấp (Low) được chọn làm nhóm tham chiếu với OR = 1. Nhóm khách hàng có trình độ học vấn cao (High) có OR = 4.1764, tức là odds (tỷ lệ chênh) để một khách hàng có trình độ cao đạt thu nhập trên 50K cao gấp khoảng 4.1764 lần so với một khách hàng có trình độ thấp. Khoảng ước lượng tin cậy 95% cho OR là (3.9537; 4.4118), và p-value gần bằng 0 cho thấy sự khác biệt này có ý nghĩa thống kê rất cao.

Kết quả phản ánh rõ mối liên hệ tích cực giữa học vấn và thu nhập, phù hợp với thực tế là bằng cấp cao hơn thường dẫn đến cơ hội nghề nghiệp tốt hơn và thu nhập cao hơn

4.1.3. Biến AGE

Bảng tần số - tần suất

Dữ liệu của BLS cho thấy thu nhập trung bình tăng theo tuổi, đạt đỉnh ở nhóm tuổi trung niên (45–54 tuổi) rồi giảm dần về sau. Tương tự, trong tập dữ liệu, người thuộc nhóm tuổi cao hơn thường có tỷ lệ thu nhập >50K cao hơn.

# Nhóm tuổi (cắt nhóm ví dụ: <30, 30-50, >50)
adult$age_grp <- cut(adult$age, breaks=c(0,30,50,100), labels=c("<30","30-50",">50"))
tbl_age <- table(adult$age_grp, adult$income)
tbl_age
##        
##         <=50K >50K
##   <30    8936  661
##   30-50  9953 4919
##   >50    3764 1928
prop.table(tbl_age, 1)
##        
##              <=50K       >50K
##   <30   0.93112431 0.06887569
##   30-50 0.66924422 0.33075578
##   >50   0.66127899 0.33872101

Kết quả cho thấy nhóm tuổi “30-50” và “>50” có tỷ lệ thu nhập >50K cao hơn nhóm tuổi “<30

Kiểm định Chi bình phương

chisq.test(tbl_age)
## 
##  Pearson's Chi-squared test
## 
## data:  tbl_age
## X-squared = 2442.2, df = 2, p-value < 2.2e-16

Bài toán kiểm định

  • \(H_0\): Độ tuổi và mức thu nhập độc lập (không có mối liên hệ).
  • \(H_1\): Độ tuổi và mức thu nhập có mối liên hệ (phụ thuộc nhau).

Kết quả kiểm định Pearson’s Chi-squared test với hiệu chỉnh Yates như sau:

  • Giá trị thống kê \(X^2 = 2442.2,\)
  • Bậc tự do \(df = 2\)
  • Giá trị p-value \(< 2.2 \times 10^{-16}\)

Vì p-value rất nhỏ, nhỏ hơn mức ý nghĩa \(\alpha = 0.05\), nên chúng ta bác bỏ giả thuyế \(H_0\)

Điều này cho thấy có mối liên hệ có ý nghĩa thống kê giữa Độ tuổi và mức thu nhập. Nói cách khác Độ tuổi và mức thu nhập không độc lập, mà phụ thuộc vào nhau.

# Boxplot so sánh phân phối tuổi theo thu nhập
ggplot(adult, aes(x=income, y=age, fill=income)) +
  geom_boxplot() +
  labs(title="Hình 4.4. Phân phối độ tuổi theo nhóm thu nhập",
       x="Income", y="Tuổi") +
  theme(legend.position="none")

# Bar chart nhóm tuổi
df_age <- as.data.frame(prop.table(tbl_age,1))
colnames(df_age) <- c("age_grp","income","pct")
ggplot(df_age, aes(x = age_grp, y = pct, fill = income)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = scales::percent(pct, accuracy = 0.1)),
            position = position_dodge(width = 0.9),
            vjust = -0.25, size = 3) +
  scale_y_continuous(labels = scales::percent) +
  labs(
    title = "Hình 4.4. Biểu đồ cột tỷ lệ thu nhập theo độ tuổi",
    x = "Nhóm tuổi",
    y = "Phần trăm",
    fill = "Income"
  )

Boxplot cho thấy trung vị tuổi nhóm >50K cao hơn nhóm <=50K; bar chart minh hoạ nhóm 30–50 chiếm tỷ lệ >50K lớn nhất.

Risk Ratio

riskratio(tbl_age)
## $data
##        
##         <=50K >50K Total
##   <30    8936  661  9597
##   30-50  9953 4919 14872
##   >50    3764 1928  5692
##   Total 22653 7508 30161
## 
## $measure
##        risk ratio with 95% C.I.
##         estimate    lower    upper
##   <30   1.000000       NA       NA
##   30-50 4.802214 4.446178 5.186760
##   >50   4.917860 4.530552 5.338279
## 
## $p.value
##        two-sided
##         midp.exact fisher.exact chi.square
##   <30           NA           NA         NA
##   30-50          0            0          0
##   >50            0            0          0
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Theo bảng kết quả, nhóm khách hàng có số giờ làm việc mỗi tuần dưới 30 giờ (<30) được chọn làm nhóm tham chiếu với RR = 1.0000. Nhóm khách hàng làm việc từ 30 đến 50 giờ mỗi tuần (30-50) có RR = 4.8022, tức là khả năng có thu nhập trên 50K trong nhóm này cao gấp khoảng 4.80 lần so với nhóm làm việc dưới 30 giờ. Nhóm khách hàng làm việc trên 50 giờ mỗi tuần (>50) có RR = 4.9179, nghĩa là khả năng có thu nhập trên 50K trong nhóm này cao gấp khoảng 4.92 lần so với nhóm làm việc dưới 30 giờ. Khoảng ước lượng tin cậy 95% cho RR nhóm 30-50 giờ là (4.4462; 5.1868) và nhóm >50 giờ là (4.5306; 5.3383). Các giá trị p-value gần bằng 0 cho thấy sự khác biệt này có ý nghĩa thống kê rất cao.

Odds Ratio

oddsratio(tbl_age)
## $data
##        
##         <=50K >50K Total
##   <30    8936  661  9597
##   30-50  9953 4919 14872
##   >50    3764 1928  5692
##   Total 22653 7508 30161
## 
## $measure
##        odds ratio with 95% C.I.
##         estimate    lower    upper
##   <30   1.000000       NA       NA
##   30-50 6.679623 6.133186 7.285502
##   >50   6.922685 6.291078 7.625929
## 
## $p.value
##        two-sided
##         midp.exact fisher.exact chi.square
##   <30           NA           NA         NA
##   30-50          0            0          0
##   >50            0            0          0
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Theo bảng kết quả, nhóm khách hàng làm việc dưới 30 giờ mỗi tuần (<30) được chọn làm nhóm tham chiếu với OR = 1. Nhóm khách hàng làm việc từ 30 đến 50 giờ mỗi tuần (30-50) có OR = 6.6796, tức là odds để một khách hàng trong nhóm này có thu nhập trên 50K cao gấp khoảng 6.68 lần so với nhóm làm việc dưới 30 giờ. Nhóm khách hàng làm việc trên 50 giờ mỗi tuần (>50) có OR = 6.9227, nghĩa là odds để một khách hàng trong nhóm này có thu nhập trên 50K cao gấp khoảng 6.92 lần so với nhóm làm việc dưới 30 giờ. Khoảng ước lượng tin cậy 95% cho OR nhóm 30-50 giờ là (6.1332; 7.2855) và nhóm >50 giờ là (6.2911; 7.6259). Giá trị p-value gần bằng 0 cho thấy sự khác biệt này có ý nghĩa thống kê rất cao.

Kết quả phù hợp với xu hướng chung là kinh nghiệm làm việc tăng theo tuổi (tới một mức độ nhất định) giúp tăng cơ hội thu nhập cao.

4.1.4. Biến HOURS_PER_WEEK

Bảng tần số - tần suất

Phân tích cho thấy những người làm việc nhiều giờ hơn (toàn thời gian) thường có tỷ lệ thu nhập >50K cao hơn so với người làm bán thời gian. Điều này là hợp lý vì làm việc nhiều giờ (toàn thời gian) thường cho phép tăng thu nhập tổng cộng.

# Nhóm theo giờ làm việc (ví dụ: >= 35h là full-time)
adult$fulltime <- ifelse(adult$hours_per_week >= 35, "Fulltime", "Parttime")
# Đặt lại thứ tự factor, Parttime đứng trước Fulltime
adult$fulltime <- factor(adult$fulltime, levels = c("Parttime", "Fulltime"))

tbl_hours <- table(adult$fulltime, adult$income)
tbl_hours
##           
##            <=50K  >50K
##   Parttime  4367   323
##   Fulltime 18286  7185
prop.table(tbl_hours, 1)
##           
##                 <=50K       >50K
##   Parttime 0.93113006 0.06886994
##   Fulltime 0.71791449 0.28208551

Kiểm định Chi bình phương

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

Bài toán kiểm định

  • \(H_0\): Số giờ làm việc trong một tuần và mức thu nhập độc lập (không có mối liên hệ).
  • \(H_1\): Số giờ làm việc trong một tuần và mức thu nhập có mối liên hệ (phụ thuộc nhau).

Kết quả kiểm định Pearson’s Chi-squared test với hiệu chỉnh Yates như sau:

  • Giá trị thống kê \(X^2 = 961.92,\)
  • Bậc tự do \(df = 1\)
  • Giá trị p-value \(< 2.2 \times 10^{-16}\)

Vì p-value rất nhỏ, nhỏ hơn mức ý nghĩa \(\alpha = 0.05\), nên chúng ta bác bỏ giả thuyế \(H_0\)

Điều này cho thấy có mối liên hệ có ý nghĩa thống kê giữa Số giờ làm việc trong một tuầnh và mức thu nhập. Nói cách khác, Số giờ làm việc trong một tuần và mức thu nhập không độc lập, mà phụ thuộc vào nhau.

Trực quan hóa

# Histogram phân phối giờ làm việc theo nhóm thu nhập
ggplot(adult, aes(x=hours_per_week, fill=income)) +
  geom_histogram(position="identity", alpha=0.6, bins=30) +
  labs(title="Hình 4.5. Phân phối số giờ làm việc mỗi tuần",
       x="Hours per Week", y="Count", fill="Income")

# Bar chart Fulltime vs Parttime
df_hours <- as.data.frame(prop.table(tbl_hours,1))
colnames(df_hours) <- c("fulltime","income","pct")

ggplot(df_hours, aes(x = fulltime, y = pct, fill = income)) +
  geom_col(position = "dodge") +
  geom_text(aes(label = scales::percent(pct, accuracy = 0.1)),
            position = position_dodge(width = 0.9),
            vjust = -0.25, size = 3) +
  scale_y_continuous(labels = scales::percent) +
  labs(
    title = "Hình 4.6. Biểu đồ tỷ lệ thu nhập theo nhóm giờ làm việc",
    x = "Loại công việc",
    y = "Phần trăm",
    fill = "Income"
  )

Risk Ratio

riskratio(tbl_hours)
## $data
##           
##            <=50K >50K Total
##   Parttime  4367  323  4690
##   Fulltime 18286 7185 25471
##   Total    22653 7508 30161
## 
## $measure
##           risk ratio with 95% C.I.
##            estimate    lower    upper
##   Parttime 1.000000       NA       NA
##   Fulltime 4.095917 3.680135 4.558674
## 
## $p.value
##           two-sided
##            midp.exact  fisher.exact    chi.square
##   Parttime         NA            NA            NA
##   Fulltime          0 4.752812e-261 1.924345e-211
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Theo bảng kết quả, nhóm khách hàng làm việc bán thời gian (Parttime) được chọn làm nhóm tham chiếu với RR = 1.0000. Nhóm khách hàng làm việc toàn thời gian (Fulltime) có RR = 4.0959, tức là khả năng có thu nhập trên 50K trong nhóm làm việc toàn thời gian cao gấp khoảng 4.10 lần so với nhóm làm việc bán thời gian. Khoảng ước lượng tin cậy 95% cho RR là (3.6801; 4.5587). Các giá trị p-value rất nhỏ (gần 0) cho thấy sự khác biệt này có ý nghĩa thống kê rất cao.

Odds Ratio

oddsratio(tbl_hours)
## $data
##           
##            <=50K >50K Total
##   Parttime  4367  323  4690
##   Fulltime 18286 7185 25471
##   Total    22653 7508 30161
## 
## $measure
##           odds ratio with 95% C.I.
##            estimate    lower   upper
##   Parttime 1.000000       NA      NA
##   Fulltime 5.309776 4.734937 5.97515
## 
## $p.value
##           two-sided
##            midp.exact  fisher.exact    chi.square
##   Parttime         NA            NA            NA
##   Fulltime          0 4.752812e-261 1.924345e-211
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"

Theo bảng kết quả, nhóm khách hàng làm việc bán thời gian (Parttime) được chọn làm nhóm tham chiếu với OR = 1.0000. Nhóm khách hàng làm việc toàn thời gian (Fulltime) có OR = 5.3098, tức là odds (tỷ lệ chênh) để một khách hàng làm việc toàn thời gian có thu nhập trên 50K cao gấp khoảng 5.31 lần so với một khách hàng làm việc bán thời gian. Khoảng ước lượng tin cậy 95% cho OR là (4.7349; 5.9752). Giá trị p-value gần bằng 0 cho thấy sự khác biệt này có ý nghĩa thống kê rất cao.

Kết quả thể hiện người lao động toàn thời gian thường kiếm được thu nhập cao hơn. Mặc dù phần lớn thu nhập cao xuất phát từ lương theo giờ cao hoặc làm thêm giờ, nhưng thực tế là làm đủ giờ cũng góp phần quan trọng tăng thu nhập trung bình.

4.2. Xây dựng và đánh giá mô hình hồi quy

4.2.1. Mô hình hồi quy Logistic

# Xây dựng mô hình hồi quy Logistic (link logit)
model_logit <- glm(income ~ GENDER + education_num + age + hours_per_week, 
                   family = binomial(link="logit"), data = adult)
summary(model_logit)
## 
## Call:
## glm(formula = income ~ GENDER + education_num + age + hours_per_week, 
##     family = binomial(link = "logit"), data = adult)
## 
## Coefficients:
##                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -9.134869   0.120311  -75.93   <2e-16 ***
## GENDERMale      1.187451   0.038923   30.51   <2e-16 ***
## education_num   0.356366   0.006870   51.88   <2e-16 ***
## age             0.047364   0.001261   37.55   <2e-16 ***
## hours_per_week  0.034015   0.001372   24.80   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 33850  on 30160  degrees of freedom
## Residual deviance: 26346  on 30156  degrees of freedom
## AIC: 26356
## 
## Number of Fisher Scoring iterations: 5

Ý nghĩa thống kê:

Tất cả các hệ số ước lượng đều có giá trị p-value rất nhỏ (tất cả đều < 2e-16), cho thấy các biến độc lập đều có tác động có ý nghĩa thống kê rất cao đến khả năng thu nhập cao.

Giải thích các hệ số:

  • Intercept (-9.134869): Là điểm cơ bản khi các biến độc lập đều bằng 0, giá trị âm thể hiện xác suất cơ bản rất thấp để thu nhập vượt ngưỡng.

  • GENDERMale (1.187451): Hệ số dương và có ý nghĩa thống kê rất cao, cho thấy nam giới có khả năng có mức thu nhập cao hơn đáng kể so với nữ giới (nhóm tham chiếu), khi giữ các yếu tố khác không đổi.

  • education_num (0.356366): Số năm học tập tăng lên một đơn vị làm tăng xác suất thu nhập cao, phản ánh trình độ học vấn là yếu tố quan trọng ảnh hưởng tích cực đến thu nhập.

  • age (0.047364): Tuổi tác có tác động tích cực đến khả năng thu nhập cao; mỗi năm tuổi tăng làm tăng log-odds (log xác suất) thu nhập cao.

  • hours_per_week (0.034015): Số giờ làm việc mỗi tuần càng nhiều càng làm tăng khả năng thu nhập cao hơn, thể hiện người làm việc nhiều giờ có xu hướng kiếm được thu nhập tốt hơn.

Đánh giá tổng quan:

Mô hình cho thấy sự cải thiện rõ rệt so với mô hình không có biến giải thích, được thể hiện qua việc Residual deviance giảm từ 33850 xuống 26346.

Giá trị AIC là 26356, dùng để so sánh hiệu quả mô hình với các mô hình khác; giá trị AIC càng nhỏ càng tốt.

Các biến đều có tác động tích cực và ý nghĩa thống kê mạnh, phù hợp với giả thuyết và kỳ vọng thực tiễn về các yếu tố ảnh hưởng đến thu nhập.

4.2.2. Mô hình hồi quy Probit

# Xây dựng mô hình hồi quy Probit (link probit)
model_probit <- glm(income ~ GENDER + education_num + age + hours_per_week, 
                    family = binomial(link="probit"), data = adult)
summary(model_probit)
## 
## Call:
## glm(formula = income ~ GENDER + education_num + age + hours_per_week, 
##     family = binomial(link = "probit"), data = adult)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -5.2653639  0.0646076  -81.50   <2e-16 ***
## GENDERMale      0.6555865  0.0213249   30.74   <2e-16 ***
## education_num   0.2047045  0.0038630   52.99   <2e-16 ***
## age             0.0277461  0.0007110   39.02   <2e-16 ***
## hours_per_week  0.0195622  0.0007897   24.77   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 33850  on 30160  degrees of freedom
## Residual deviance: 26333  on 30156  degrees of freedom
## AIC: 26343
## 
## Number of Fisher Scoring iterations: 5

Ý nghĩa thống kê:

Tất cả các hệ số đều có giá trị p rất nhỏ (đều < 2e-16), cho thấy các biến đều có tác động có ý nghĩa thống kê rất cao đối với khả năng thu nhập cao.

Giải thích các hệ số:

  • Intercept (-5.2653639): Là hệ số cơ bản khi các biến độc lập đều bằng 0, biểu thị xác suất cơ bản rất thấp để có mức thu nhập cao.

  • GENDERMale (0.6555865): Hệ số dương và rất có ý nghĩa thống kê, cho thấy nam giới có khả năng có thu nhập cao hơn so với nữ giới (nhóm tham chiếu), khi giữ nguyên các yếu tố khác.

  • education_num (0.2047045): Số năm học tập tăng 1 đơn vị làm tăng xác suất có thu nhập cao, phản ánh trình độ học vấn là yếu tố quan trọng ảnh hưởng tích cực đến thu nhập.

  • age (0.0277461): Tuổi tác có tác động tích cực lên khả năng thu nhập cao; mỗi năm tăng thêm làm tăng log-odds thu nhập cao.

  • hours_per_week (0.0195622): Số giờ làm việc mỗi tuần tăng làm tăng xác suất thu nhập cao, thể hiện rằng người làm việc nhiều giờ thường kiếm được thu nhập cao hơn.

Đánh giá tổng quan:

Mô hình có sự cải thiện rõ rệt so với mô hình không có biến giải thích, thể hiện qua việc Residual deviance giảm từ 33850 xuống 26333.

Giá trị AIC (26343) cho phép so sánh với các mô hình khác, mô hình có giá trị AIC càng thấp càng tốt.

Tất cả biến độc lập trong mô hình đều có tác động tích cực và có ý nghĩa thống kê cao đối với biến phụ thuộc.

4.2.3. Mô hình hồi quy Cloglog

# Xây dựng mô hình hồi quy Cloglog (link cloglog)
model_cloglog <- glm(income ~ GENDER + education_num + age + hours_per_week, 
                     family = binomial(link="cloglog"), data = adult)
summary(model_cloglog)
## 
## Call:
## glm(formula = income ~ GENDER + education_num + age + hours_per_week, 
##     family = binomial(link = "cloglog"), data = adult)
## 
## Coefficients:
##                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    -7.1493475  0.0866728  -82.49   <2e-16 ***
## GENDERMale      0.9972130  0.0331821   30.05   <2e-16 ***
## education_num   0.2712091  0.0050937   53.24   <2e-16 ***
## age             0.0320101  0.0009651   33.17   <2e-16 ***
## hours_per_week  0.0218921  0.0010023   21.84   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 33850  on 30160  degrees of freedom
## Residual deviance: 26657  on 30156  degrees of freedom
## AIC: 26667
## 
## Number of Fisher Scoring iterations: 9

Ý nghĩa thống kê:

Tất cả các hệ số ước lượng đều có giá trị p-value rất nhỏ (đều < 2e-16), cho thấy các biến trong mô hình đều có tác động có ý nghĩa thống kê rất cao đối với khả năng thu nhập cao.

Giải thích các hệ số:

  • Intercept (-7.1493475): Là hệ số gốc khi tất cả các biến độc lập đều bằng 0, biểu thị xác suất cơ bản rất thấp để có mức thu nhập cao.

  • GENDERMale (0.9972130): Hệ số dương và có ý nghĩa rất cao, cho thấy nam giới có xác suất cao hơn đáng kể để đạt mức thu nhập cao so với nữ giới (nhóm tham chiếu), khi các yếu tố khác được giữ cố định.

  • education_num (0.2712091): Số năm học tập càng tăng thì xác suất có thu nhập cao càng lớn. Điều này phù hợp với giả thuyết trình độ học vấn ảnh hưởng tích cực đến thu nhập.

  • age (0.0320101): Tuổi tác có tác động tích cực lên khả năng thu nhập cao; mỗi một năm tăng thêm làm tăng log-odds thu nhập cao.

  • hours_per_week (0.0218921): Số giờ làm việc mỗi tuần tăng cũng làm tăng xác suất có thu nhập cao, cho thấy người làm việc nhiều giờ hơn thường kiếm được thu nhập tốt hơn.

Đánh giá tổng quan:

Mô hình có sự cải thiện đáng kể so với mô hình không có biến giải thích, thể hiện qua chỉ số Residual deviance giảm từ 33850 xuống 26657.

Giá trị AIC = 26667 dùng để so sánh với các mô hình khác, giá trị càng thấp mô hình càng tốt.

Mô hình cho thấy tất cả các biến giải thích đều có ý nghĩa thống kê mạnh mẽ và có tác động tích cực đến xác suất thu nhập cao.

4.2.3. Lựa chọn mô hình tối ưu

# So sánh AIC giữa các mô hình
AIC(model_logit, model_probit, model_cloglog)
##               df      AIC
## model_logit    5 26355.64
## model_probit   5 26343.47
## model_cloglog  5 26666.63
  • Mô hình Logit: AIC ~ 26355.64.

  • Mô hình Probit cho AIC thấp nhất: AIC ~ 26343.47

  • Mô hình Cloglog: AIC ~26666.63

Theo tiêu chí AIC, mô hình có giá trị AIC nhỏ nhất được xem là phù hợp nhất (AIC càng thấp càng tốt). Trong trường hợp này, mô hình Probit là lựa chọn tối ưu vì nó có AIC thấp nhất. Các mô hình Logit và Cloglog có kết quả khá tương đương nhưng AIC cao hơn một chút, do đó mô hình Probit được ưu tiên.

Mô hình hồi quy Probit được giữ lại làm kết quả cuối cùng do hiệu quả giải thích tốt. Kết quả phân tích cho thấy các biến GENDER, education_num, age, hours_per_week đều có đóng góp quan trọng và có chiều ảnh hưởng dự đoán thuận với khả năng thu nhập cao. Việc lựa chọn Probit phù hợp với kiến thức lý thuyết về việc chọn mô hình nhị phân tuyến tính và đáp ứng tiêu chí mô hình gọn – giải thích tốt nhất.

Các yếu tố giới tính, học vấn, tuổi và giờ làm việc đều ảnh hưởng tích cực đến khả năng thu nhập cao, khớp với các bằng chứng ngoài thực tế. Mô hình hồi quy logit cuối cùng có thể dùng để dự đoán xác suất thu nhập lớn hơn mức cho trước, đồng thời cho kết quả thống kê đáng tin cậy.


Chương 5. TỔNG KẾT


5.1. Kết luận

Bài nghiên cứu sử dụng tập dữ liệu Adult chỉ rõ các yếu tố như giới tính, trình độ học vấn, tuổi tác và số giờ làm việc có ảnh hưởng đáng kể đến khả năng thu nhập cao (>50K USD) của cá nhân. Cụ thể, ở cùng các điều kiện khác, nam giới có xác suất đạt thu nhập cao lớn hơn nữ giới nhiều lần (tương ứng OR≈3.6, RR≈2.8), phù hợp với kết quả của các khảo sát quốc tế và trong nước: báo cáo ILO cho biết thu nhập của nữ giới chỉ đạt 70–90% so với nam giới, và GSO năm 2023 cũng cho thấy lao động nam có thu nhập bình quân tháng cao gấp 1.37 lần lao động nữ. Trình độ học vấn càng cao (số năm học nhiều hơn) thì khả năng thu nhập trên 50K USD càng tăng rõ, như đã được khẳng định trong nghiên cứu khác. Người ở độ tuổi trung niên (khoảng 30–50 tuổi) có tỷ lệ thu nhập cao nhất, trong khi tuổi tác lớn hơn hay nhỏ hơn đều giảm dần, phản ánh vai trò của kinh nghiệm và khả năng tích luỹ. Ngoài ra, lao động toàn thời gian có tỷ lệ đạt thu nhập cao vượt trội so với lao động bán thời gian.

Tóm lại, mô hình hồi quy logit cuối cùng (có AIC thấp nhất) đã giải thích tốt mối liên hệ thống kê giữa các yếu tố nhân khẩu học và khả năng thu nhập cao. Kết quả này không chỉ khớp với bằng chứng thực nghiệm và lý thuyết đã biết, mà còn chỉ ra rõ ràng các yếu tố chính đóng vai trò chủ chốt trong việc dự đoán thu nhập cao.

5.2. Hạn chế đề tài

Một hạn chế quan trọng của nghiên cứu là dữ liệu sử dụng được thu thập vào năm 1994 (cuộc điều tra dân số Hoa Kỳ). Vì vậy, các kết quả chỉ phản ánh quan hệ xã hội-thống kê tại thời điểm đó và trong bối cảnh kinh tế – xã hội đã qua của Mỹ, khó có thể áp dụng nguyên xi cho tình hình hiện nay hoặc cho các quốc gia khác.

Nghiên cứu cũng chỉ xét các biến đã cho trong bộ Adult (ví dụ chưa bao gồm kinh nghiệm cụ thể, ngành nghề chi tiết, hay các yếu tố kinh tế vĩ mô như thuế), nên có thể còn thiếu sót các nhân tố khác có ảnh hưởng. Ngoài ra, phương pháp phân tích chủ yếu là mô hình hồi quy và kiểm định tương quan (không phải phương pháp nhân quả), nên không thể khẳng định chắc chắn mối quan hệ nhân quả giữa các yếu tố với thu nhập; chỉ có thể kết luận về xu hướng thống kê. Những hạn chế này cần được xem xét cẩn thận khi diễn giải kết quả và áp dụng cho thực tế.

5.3. Hàm ý chính sách

Kết quả nghiên cứu gợi ý các hướng chính sách sau đây.

Thứ nhất, do giáo dục có ảnh hưởng tích cực đến thu nhập, việc đầu tư nâng cao chất lượng và tăng cường tiếp cận giáo dục (đào tạo nghề, giáo dục đại học) là cần thiết để nâng cao thu nhập dân cư, nhất là nhóm thu nhập thấp.

Thứ hai, do khoảng cách thu nhập theo giới tính còn lớn, chính sách bình đẳng giới trong lao động – như minh bạch lương, khuyến khích đào tạo và thăng tiến cho lao động nữ – cần được chú trọng để thu hẹp khoảng cách này.

Thứ ba, khuyến khích làm việc toàn thời gian và phát triển kỹ năng làm việc (tăng số giờ làm hữu ích) sẽ giúp gia tăng thu nhập cho người lao động; điều này có thể hỗ trợ bằng các chính sách khuyến khích việc làm ổn định.

Cuối cùng, do thu nhập tăng theo tuổi (kinh nghiệm), cần có các chính sách quan tâm đặc biệt đến nhóm lao động trẻ (đào tạo và tạo cơ hội việc làm ban đầu) và lao động lớn tuổi (đào tạo lại hoặc giữ chân nhân lực có tay nghề), góp phần nâng cao thu nhập tổng thể.

Những hàm ý này cung cấp gợi ý định hướng nghề nghiệp và chính sách nhân lực nhằm cải thiện thu nhập cho các nhóm khác nhau trong xã hội.

5.4. Hướng nghiên cứu tiếp theo

Trong tương lai, nghiên cứu có thể được mở rộng theo nhiều hướng. Có thể mở rộng bộ biến giải thích (chẳng hạn thêm kinh nghiệm làm việc, ngành nghề cụ thể, đầu tư vốn) hoặc sử dụng dữ liệu mới hơn, thậm chí dữ liệu từ các cuộc khảo sát theo thời gian để đánh giá xu hướng thu nhập qua các năm. Kỹ thuật phân tích cũng có thể đa dạng hóa bằng cách thử các mô hình học máy (random forest, boosting,…) để so sánh hiệu quả dự báo với mô hình hồi quy. Ngoài ra, việc nghiên cứu theo phân nhóm (ví dụ nhóm nghề, nhóm khu vực) hoặc so sánh với các dữ liệu quốc tế sẽ giúp đánh giá tính khái quát của kết quả.

Những hướng nghiên cứu này sẽ giúp làm sáng tỏ hơn cơ chế tác động của các yếu tố kinh tế - xã hội đối với thu nhập cá nhân và nâng cao độ tin cậy của mô hình phân tích.


LS0tDQp0aXRsZTogJyoqVEnhu4JVIExV4bqsTiBDVeG7kEkgS+G7siBWw4AgQsOASSBU4bqsUCBDw4FDIFRV4bqmTioqJw0KYXV0aG9yOiAiSG/DoG5nIFThuqVuIFBow6F0LCAyMjIxMDAwMzE3IC0gR1YgSMaw4bubbmcgZOG6q246IFRo4bqneSBUcuG6p24gTeG6oW5oIFTGsOG7nW5nIg0KZGF0ZTogIlRyxrDhu51uZyDEkOG6oWkgaOG7jWMgVMOgaSBjaMOtbmggLSBNYXJrZXRpbmcsIHRow6FuZyAwNSBuxINtIDIwMjUiDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6DQogICAgdG9jOiB0cnVlDQogICAgdG9jX2Zsb2F0OiB0cnVlDQogICAgY3NzOiBzdHlsZXMuY3NzDQogICAgaGlnaHRsaWdodDoga2F0ZQ0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgd29yZF9kb2N1bWVudDoNCiAgICB0b2M6IHRydWUNCi0tLQ0KDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPUZBTFNFfQ0KIyBO4bqhcCB0aMawIHZp4buHbg0KbGlicmFyeShkcGx5cikNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGVwaXRvb2xzKQ0KbGlicmFyeShzY2FsZXMpDQpsaWJyYXJ5KHR3ZWVkaWUpDQpsaWJyYXJ5KHN0YXRtb2QpDQpsaWJyYXJ5KGdncHVicikNCmxpYnJhcnkobm5ldCkNCmxpYnJhcnkobGF0dGljZSkNCmxpYnJhcnkocmVjaXBlcykNCmxpYnJhcnkoY2FyZXQpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkoZ3JpZEV4dHJhKQ0KbGlicmFyeShncmlkKQ0KbGlicmFyeShwUk9DKQ0KbGlicmFyeShNb2RlbE1ldHJpY3MpDQpgYGANCg0KKioqDQo8ZGl2IHN0eWxlPSJ0ZXh0LWFsaWduOmNlbnRlciI+DQoNCiMgKipQSMOCTiBUw41DSCBDw4FDIFnhur5VIFThu5Ag4bqiTkggSMav4bueTkcgxJDhur5OIEtI4bqiIE7Egk5HIFRIVSBOSOG6rFAqKiANCg0KPC9kaXY+DQoNCioqKg0KDQojICoqQ2jGsMahbmcgMS4gVOG7lE5HIFFVQU4gTkdIScOKTiBD4buoVSoqDQoNCioqKg0KDQojIyAqKjEuMS4gTMO9IGRvIGNo4buNbiDEkeG7gSB0w6BpKioNCg0KUGjDom4gdMOtY2ggY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBraOG6oyBuxINuZyB0aHUgbmjhuq1wIGzDoCBt4buZdCBjaOG7pyDEkeG7gSBxdWFuIHRy4buNbmcgdHJvbmcga2hvYSBo4buNYyB4w6MgaOG7mWkgdsOgIGtpbmggdOG6vyBo4buNYy4gTmfGsOG7nWkgdGEgYmnhur90IHLhurFuZyB0aHUgbmjhuq1wIGPhu6dhIG3hu5dpIGPDoSBuaMOibiBjaOG7i3UgdMOhYyDEkeG7mW5nIHThu6sgbmhp4buBdSBuaMOibiB04buRIGtow6FjIG5oYXUgbmjGsCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIHR14buVaSB0w6FjLCBnaeG7m2kgdMOtbmgsIG5nw6BuaCBuZ2jhu4EsIHYudg0KDQoNClbDrSBk4bulLCBiw6FvIGPDoW8gY+G7p2EgVHJ1bmcgdMOibSBUaOG7kW5nIGvDqiBWaeG7h3QgTmFtICgyMDIzKSBjaG8gdGjhuqV5IGxhbyDEkeG7mW5nIG5hbSBjw7MgdGh1IG5o4bqtcCBiw6xuaCBxdcOibiB0aMOhbmcgY2FvIGjGoW4gbGFvIMSR4buZbmcgbuG7ryBraG/huqNuZyAxLjM3IGzhuqduIGRvIGtow6FjIGJp4buHdCB24buBIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB2w6AgxJFp4buBdSBraeG7h24geMOjIGjhu5lpLg0KDQpOZ2/DoGkgcmEsIG5naGnDqm4gY+G7qXUgdHJvbmcgbsaw4bubYyBjxaluZyBraOG6s25nIMSR4buLbmgg4oCcbmjDs20gbGFvIMSR4buZbmcgY8OzIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBjYW8gY8OzIHRodSBuaOG6rXAgY2FvIGjGoW4gaOG6s24gc28gduG7m2kgY8OhYyBuaMOzbSBraMOhY+KAnQ0KDQoNClbDrCB24bqteSwgdGjDtG5nIHF1YSBi4buZIGThu68gbGnhu4d1IEFkdWx0ICh0aHUgdGjhuq1wIHThu6sgY3Xhu5ljIMSRaeG7gXUgdHJhIGTDom4gc+G7kSBN4bu5IG7Eg20gMTk5NCwgduG7m2kgbmhp4buHbSB24bulIHBow6JuIGxv4bqhaSB0aHUgbmjhuq1wIHRyw6puLyBkxrDhu5tpIDUwSyBVU0QvbsSDbSwgY2jDum5nIHRhIGPDsyB0aOG7gyBraeG7g20gxJHhu4tuaCB2w6AgbMOgbSByw7UgaMahbiBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGPDoWMgeeG6v3UgdOG7kSBuaMawIHRyw6xuaCDEkeG7mSwgZ2nhu5tpIHTDrW5oLCBnaWEgxJHDrG5o4oCmIHbhu5tpIGto4bqjIG7Eg25nIHRodSBuaOG6rXAuDQoNCk5naGnDqm4gY+G7qXUgbsOgeSBnacO6cCBsw6BtIHLDtSBjxqEgc+G7nyBsw70gdGh1eeG6v3QgdsOgIHRo4buxYyBuZ2hp4buHbSB24buBIGPDoWMgdMOhYyDEkeG7mW5nIG7Ds2kgdHLDqm4sIHThu6sgxJHDsyBnw7NwIHBo4bqnbiDEkcawYSByYSBn4bujaSDDvSBjaMOtbmggc8OhY2ggaG/hurdjIMSR4buLbmggaMaw4bubbmcgbmdo4buBIG5naGnhu4dwIHBow7kgaOG7o3AgY2hvIHThu6tuZyBuaMOzbSBuaMOibiBraOG6qXUgaOG7jWMuDQoNCiMjICoqMS4yLiBN4bulYyB0acOqdSBuZ2hpw6puIGPhu6l1KioNCg0KIyMjICoqMS4yLjEuIE3hu6VjIHRpw6p1IGNodW5nKioNCg0KWMOhYyDEkeG7i25oIGPDoWMgeeG6v3UgdOG7kSBjaOG7pyBjaOG7kXQg4bqjbmggaMaw4bufbmcgxJHhur9uIGto4bqjIG7Eg25nIHRodSBuaOG6rXAgY+G7p2EgY8OhIG5ow6JuIChj4bulIHRo4buDIGzDoCB0aHUgbmjhuq1wIHRyw6puIDUwSyBVU0QgbeG7l2kgbsSDbSkgdHJvbmcgYuG7mSBk4buvIGxp4buHdSBBZHVsdC4NCg0KDQrDgXAgZOG7pW5nIGPDoWMgcGjGsMahbmcgcGjDoXAgdGjhu5FuZyBrw6ogcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCAoYuG6o25nIHThuqduIHN14bqldCwga2nhu4NtIMSR4buLbmggY2hpLWLDrG5oIHBoxrDGoW5nLCBo4buTaSBxdXkgbG9naXN0aWMpIMSR4buDIMSRw6FuaCBnacOhIMSR4buZIG3huqFuaCBj4bunYSBt4buRaSBxdWFuIGjhu4cgZ2nhu69hIGPDoWMgeeG6v3UgdOG7kSDEkcOzIHbDoCB0aHUgbmjhuq1wLg0KDQojIyMgKioxLjIuMS4gTeG7pWMgdGnDqnUgY+G7pSB0aOG7gyoqDQoNCi0gKipNw7QgdOG6oyBk4buvIGxp4buHdToqKiBUaHUgdGjhuq1wIHbDoCBsw6BtIHPhuqFjaCBk4buvIGxp4buHdSBBZHVsdCwgdGjhu5FuZyBrw6ogxJHhurdjIMSRaeG7g20gY2h1bmcgKHPhu5EgcXVhbiBzw6F0LCBwaMOibiBi4buRIHThu6tuZyBiaeG6v24sIG3hu6ljIHRodSBuaOG6rXApLg0KDQotICoqS2jhuqNvIHPDoXQgdOG7q25nIHnhur91IHThu5E6KiogUGjDom4gdMOtY2ggbeG7kWkgbGnDqm4gcXVhbiBnaeG7r2EgdGh1IG5o4bqtcCAoPjUwSyBob+G6t2Mg4omkNTBLKSB24bubaSBjw6FjIGJp4bq/biBuaMawIGdp4bubaSB0w61uaCwgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIHPhu5EgZ2nhu50gbMOgbSB2aeG7h2MsIHYudi4sIHF1YSBi4bqjbmcgY2jDqW8gdsOgIGtp4buDbSDEkeG7i25oIHRo4buRbmcga8OqIChjaGktYsOsbmggcGjGsMahbmcsIG9kZHMgcmF0aW8pLg0KDQotICoqTcO0IGjDrG5oIGjDs2E6KiogWMOieSBk4buxbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSDEkeG7gyDEkcOhbmggZ2nDoSDEkeG7k25nIHRo4budaSDhuqNuaCBoxrDhu59uZyBj4bunYSBuaGnhu4F1IGJp4bq/biDEkeG7i25oIHTDrW5oIHbDoCDEkeG7i25oIGzGsOG7o25nIMSR4bq/biBraOG6oyBuxINuZyB0aHUgbmjhuq1wIGNhby4NCg0KLSAqKkRp4buFbiBnaeG6o2kga+G6v3QgcXXhuqM6KiogVGjhuqNvIGx14bqtbiBr4bq/dCBxdeG6oyBwaMOibiB0w61jaCwgxJHGsGEgcmEgbmjhuq1uIHjDqXQgY+G7pSB0aOG7gyB2w6AgbGnDqm4gaOG7hyB0aOG7sWMgdOG6vyAodsOtIGThu6U6IHPhu7EgY2jDqm5oIGzhu4djaCB0aHUgbmjhuq1wIGdp4buvYSBuYW0gdsOgIG7hu68sIGdp4buvYSBuZ8aw4budaSBjw7MgaOG7jWMgduG6pW4gY2FvIHbDoCB0aOG6pXApLg0KDQoNCiMjICoqMS4zLiDEkOG7kWkgdMaw4bujbmcgdsOgIHBo4bqhbSB2aSBuZ2hpw6puIGPhu6l1KioNCg0KLSAqKsSQ4buRaSB0xrDhu6NuZyBuZ2hpw6puIGPhu6l1OioqIEPDoWMgY8OhIG5ow6JuIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgQWR1bHQgKGhheSBDZW5zdXMgSW5jb21lKSwgZ+G7k20gMzI1NjEgZMOybmcgdGjDtG5nIHRpbiBuaMOibiBraOG6qXUgdsOgIGxhbyDEkeG7mW5nLiBN4buXaSBxdWFuIHPDoXQgdMawxqFuZyDhu6luZyB24bubaSBt4buZdCBjw6EgbmjDom4gdsOgIGPDsyAxNSBiaeG6v246IHR14buVaSwgZ2nhu5tpIHTDrW5oLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIHTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiwgbmdo4buBIG5naGnhu4dwLCBz4buRIGdp4budIGzDoG0gdmnhu4djL3R14bqnbiwgcXXhu5FjIHThu4tjaOKApiwgdHJvbmcgxJHDsyBiaeG6v24gbeG7pWMgdGnDqnUgbMOgIG3hu6ljIHRodSBuaOG6rXAgKD41MEsgVVNEIGhv4bq3YyDiiaQ1MEsgVVNEKQ0KDQoNCi0gKipQaOG6oW0gdmkgbmdoacOqbiBj4bupdToqKiBQaMOibiB0w61jaCB04bqtcCBk4buvIGxp4buHdSBBZHVsdCwgdOG6rXAgdHJ1bmcgdsOgbyBt4buRaSBsacOqbiBxdWFuIGdp4buvYSBjw6FjIGJp4bq/biDEkeG7mWMgbOG6rXAgKMSR4bq3YyBiaeG7h3QgbMOgIGJp4bq/biBwaMOibiBsb+G6oWkgbmjGsCBnaeG7m2kgdMOtbmgsIHRyw6xuaCDEkeG7mSwgdi52LikgduG7m2kgYmnhur9uIHBo4bulIHRodeG7mWMgdGh1IG5o4bqtcC4gS2jDtG5nIHjDqXQgxJHhur9uIGPDoWMgeeG6v3UgdOG7kSBiw6puIG5nb8OgaSB04bqtcCBk4buvIGxp4buHdSAodsOtIGThu6UgdGh14bq/LCB0aeG6v3Qga2nhu4dtKSwgY2jhu4kgc+G7rSBk4bulbmcgdGjDtG5nIHRpbiBz4bq1biBjw7MgdHJvbmcgQWR1bHQuIEvhur90IHF14bqjIHRodSDEkcaw4bujYyBtYW5nIHTDrW5oIG1pbmggaOG7jWEgY2hvIGLhu5kgZOG7ryBsaeG7h3UgbsOgeSwgY8OzIHRo4buDIHN1eSBy4buZbmcga2jDoWkgcXXDoXQgaMOzYSB24buBIHF1YW4gaOG7hyBnaeG7r2EgY8OhYyB54bq/dSB04buRIHjDoyBo4buZaS10aOG7kW5nIGvDqiB24bubaSB0aHUgbmjhuq1wIGPDoSBuaMOibi4NCg0KDQojIyAqKjEuNC4gUGjGsMahbmcgcGjDoXAgbmdoacOqbiBj4bupdSoqDQoNCiMjIyAqKjEuNC4xLiBUaHUgdGjhuq1wIHRow7RuZyB0aW4qKg0KDQpU4bqtcCBk4buvIGxp4buHdSBBZHVsdCDEkcaw4bujYyBs4bqleSB04burIGtobyBk4buvIGxp4buHdSBVQ0kgTUwgUmVwb3NpdG9yeS4gROG7ryBsaeG7h3UgxJHDoyDEkcaw4bujYyB44butIGzDvSB0csaw4bubYyBt4buZdCBwaOG6p24gLg0KDQpDw6FjIHRow7RuZyB0aW4gYuG7lSBzdW5nIHbhu4EgZOG7ryBsaeG7h3UgKG5ndeG7k24gZ+G7kWMsIMO9IG5naMSpYSBiaeG6v24sIG5oaeG7h20gduG7pSBwaMOibiBsb+G6oWkgdGh1IG5o4bqtcCB0csOqbi8gZMaw4bubaSA1MEspIMSRxrDhu6NjIHRoYW0ga2jhuqNvIHRy4buxYyB0aeG6v3AgdOG7qyBVQ0kNCmFyY2hpdmUuaWNzLnVjaS5lZHUgdsOgIHTDoGkgbGnhu4d1IGjGsOG7m25nIGThuqtuIHPhu60gZOG7pW5nLg0KIA0KIyMjICoqMS40LjEuIFjhu60gbMO9IHRow7RuZyB0aW4qKg0KDQrEkOG7jWMgdsOgIGzDoG0gc+G6oWNoIGThu68gbGnhu4d1OiBT4butIGThu6VuZyBuZ8O0biBuZ+G7ryBSIMSR4buDIMSR4buNYyBmaWxlIENTViwgZ8OhbiB0w6puIGNobyBjw6FjIGJp4bq/bi4gDQpMb+G6oWkgYuG7jyBjw6FjIGLhuqNuIGdoaSB0aGnhur91IChnacOhIHRy4buLIOKAnD/igJ0pIHbDoCBj4bqvdCBi4bubdCBraG/huqNuZyB0cuG6r25nIHRyb25nIGPDoWMgdHLGsOG7nW5nIGvDvSB04buxLg0KDQoNCk3DoyBow7NhIGJp4bq/bjogQ2h1eeG7g24gY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCBuaMawIEdFTkRFUiwgZWR1Y2F0aW9uLCBtYXJpdGFsLXN0YXR1cywgb2NjdXBhdGlvbiwgcmVsYXRpb25zaGlwLCByYWNlLCBuYXRpdmUtY291bnRyeSBzYW5nIGThuqFuZyBuaMOibiB04buRIChmYWN0b3IpLi4NCg0KDQpLaOG6o28gc8OhdCBiYW4gxJHhuqd1OiBT4butIGThu6VuZyBow6BtIHRo4buRbmcga8OqIChzdW1tYXJ5LCB0YWJsZSwgZGltLCDigKYpIHbDoCB0cuG7sWMgcXVhbiBow7NhIChu4bq/dSBj4bqnbikgxJHhu4Mga2nhu4NtIHRyYSB0w61uaCBo4bujcCBs4buHIGPhu6dhIGThu68gbGnhu4d1LCBwaMOibiBwaOG7kWkgdOG7q25nIGJp4bq/biwgdOG7iSBs4buHIHRodSBuaOG6rXAgPjUwSyAoa2hv4bqjbmcgMjQlIHF1YW4gc8OhdCBjw7MgdGh1IG5o4bqtcCBjYW8pLg0KDQojIyMgKioxLjQuMS4gxJDDoW5oIGdpw6EgdOG7lW5nIHF1YW4qKg0KDQpTYXUgeOG7rSBsw70sIHPhur0gdGjhu7FjIGhp4buHbiBwaMOibiB0w61jaCB0aOG7kW5nIGvDqiBtw7QgdOG6oyAocGjhuqduIHRyxINtLCB0cnVuZyBiw6xuaCwgcGjGsMahbmcgc2FpKS4gDQoNClRp4bq/cCB0aGVvIGTDuW5nIGLhuqNuZyBuZ+G6q3Ugbmhpw6puIDLDlzIgdsOgIGtp4buDbSDEkeG7i25oIGNoaS1iw6xuaCBwaMawxqFuZyDEkeG7gyBraeG7g20gdHJhIHPhu7EgxJHhu5ljIGzhuq1wIGdp4buvYSB04burbmcgYmnhur9uIHBow6JuIGxv4bqhaSB24bubaSB0aHUgbmjhuq1wLg0KDQoNCk5nb8OgaSByYSwgeMOhYyDEkeG7i25oIG9kZHMgcmF0aW8gxJHhu4MgxJFvIMSR4buZIG3huqFuaCBt4buRaSBsacOqbiBo4buHIGdp4buvYSBoYWkgbmjDs20gKHbDrSBk4bulOiBvZGRzIHRodSBuaOG6rXAgY2FvIGPhu6dhIG5hbSBzbyB24bubaSBu4buvKS4gQ3Xhu5FpIGPDuW5nIGzDoCB4w6J5IGThu7FuZyBtw7QgaMOsbmggaOG7k2kgcXV5Lg0KDQojIyAqKjEuNS4gS+G6v3QgY+G6pXUgxJHhu4EgdMOgaSoqDQoNCsSQ4buBIHTDoGkgxJHGsOG7o2MgdHLDrG5oIGLDoHkgdGhlbyA1IGNoxrDGoW5nIG5oxrAgc2F1Og0KDQotIENoxrDGoW5nIDEuIFThu5VuZyBxdWFuIG5naGnDqm4gY+G7qXUNCg0KLSBDaMawxqFuZyAyLiBDxqEgc+G7nyBsw70gdGh1eeG6v3QNCg0KLSBDaMawxqFuZyAzLiBE4buvIGxp4buHdSB2w6AgcGjGsMahbmcgcGjDoXAgbmdoacOqbiBj4bupdQ0KDQotIENoxrDGoW5nIDQuIEvhur90IHF14bqjIG5naGnDqm4gY+G7qXUNCg0KLSBDaMawxqFuZyA1LiBU4buVbmcga+G6v3QNCg0KKioqDQoNCiMgKipDaMawxqFuZyAyLiBDxqAgU+G7niBMw50gVEhVWeG6vlQqKg0KDQoqKioNCg0KIyMgKioyLjEuIEPDoWMga2jDoWkgbmnhu4dtIGPGoSBi4bqjbioqDQoNCiMjIyAqKjIuMS4xLiBLaMOhaSBuaeG7h20gduG7gSB0aHUgbmjhuq1wKioNCg0KVGh1IG5o4bqtcCBj4bunYSBjw6EgbmjDom4gaG/hurdjIGjhu5kgZ2lhIMSRw6xuaCBsw6Agc+G7kSB0aeG7gW4gKGhv4bq3YyBnacOhIHRy4buLIHTGsMahbmcgxJHGsMahbmcpIG3DoCBo4buNIG5o4bqtbiDEkcaw4bujYyB04burIG5oaeG7gXUgbmd14buTbiBraMOhYyBuaGF1LiBUaGVvIMSR4buLbmggbmdoxKlhIGNodW5nLCDigJx0aHUgbmjhuq1wIGzDoCBz4buRIHRp4buBbiAoaG/hurdjIG3hu5l0IGdpw6EgdHLhu4sgdMawxqFuZyDEkcawxqFuZykgbcOgIG3hu5l0IGPDoSBuaMOibiBob+G6t2MgZG9hbmggbmdoaeG7h3Agbmjhuq1uIMSRxrDhu6NjLCB0aMaw4budbmcgbMOgIMSR4buDIMSR4buVaSBs4bqleSB2aeG7h2MgY3VuZyBj4bqlcCBow6BuZyBow7NhIGhv4bq3YyBk4buLY2ggduG7pSBob+G6t2MgdGjDtG5nIHF1YSB24buRbiDEkeG6p3UgdMaw4oCdLg0KDQoNCsSQ4buRaSB24bubaSBuZ8aw4budaSBsYW8gxJHhu5luZywgdGh1IG5o4bqtcCBjaOG7pyB54bq/dSBkxrDhu5tpIGThuqFuZyB0aeG7gW4gbMawxqFuZywgbMawxqFuZyBjxqEgYuG6o24sIHBo4bulIGPhuqVwIHbDoCBjw6FjIGtob+G6o24gdGjGsOG7n25nLiBUcm9uZyBuZ+G7ryBj4bqjbmggcGjDom4gdMOtY2ggbsOgeSwgYmnhur9uIHRodSBuaOG6rXAgdGjGsOG7nW5nIMSRxrDhu6NjIMSR4buLbmggbmdoxKlhIG5o4buLIHBow6JuICh2w60gZOG7pSA+NTBLIGhv4bq3YyDiiaQ1MEsgVVNEKSDEkeG7gyDEkcOhbmggZ2nDoSBraOG6oyBuxINuZyBjw7MgdGh1IG5o4bqtcCBjYW8gaGF5IHRo4bqlcC4gxJDhu4tuaCBuZ2jEqWEgduG7gSB0aHUgbmjhuq1wIMSR4bq3YyBiaeG7h3QgcXVhbiB0cuG7jW5nIHbDrCDEkcOieSBsw6AgYmnhur9uIHBo4bulIHRodeG7mWMgY2jDrW5oIHRyb25nIG3DtCBow6xuaCBwaMOibiB0w61jaCwgcGjhuqNuIMOhbmgga2jhuqMgbsSDbmcga2luaCB04bq/IHbDoCBjaOG6pXQgbMaw4bujbmcgY3Xhu5ljIHPhu5FuZyBj4bunYSBjw6EgbmjDom4uDQoNCiMjIyAqKjIuMS4yLiBC4bqjbmcgdOG6p24gc+G7kSAtIELhuqNuZyB04bqnbiBzdeG6pXQqKg0KDQpC4bqjbmcgdOG6p24gc+G7kSAoZnJlcXVlbmN5IHRhYmxlKSBsw6AgYuG6o25nIHRo4buRbmcga8OqIGxp4buHdCBrw6ogc+G7kSBsxrDhu6NuZyBxdWFuIHPDoXQg4bupbmcgduG7m2kgbeG7l2kgZ2nDoSB0cuG7iyBob+G6t2MgbeG7l2kgbmjDs20gZ2nDoSB0cuG7iyBj4bunYSBiaeG6v24gdHJvbmcgbeG6q3UgZOG7ryBsaeG7h3UuDQpWw60gZOG7pSwga2hpIGto4bqjbyBzw6F0IGdp4bubaSB0w61uaCBj4bunYSAxMDAgY8OhIG5ow6JuLCBi4bqjbmcgdOG6p24gc+G7kSBjw7MgdGjhu4MgY2hvIGJp4bq/dCBjw7MgNjAgbmFtIHbDoCA0MCBu4buvLiANCg0KDQpC4bqjbmcgdOG6p24gc3XhuqV0IChyZWxhdGl2ZSBmcmVxdWVuY3kgdGFibGUpIGzDoCBi4bqjbmcgdMawxqFuZyB04buxIG5oxrBuZyBjaG8gYmnhur90IHThuqduIHN14bqldCB0xrDGoW5nIMSR4buRaSBob+G6t2MgdOG7tyBs4buHIHBo4bqnbiB0csSDbSB0aGF5IHbDrCBz4buRIGzGsOG7o25nIHR1eeG7h3QgxJHhu5FpLiBD4buZdCDigJxQZXJjZW504oCdIHRyb25nIGLhuqNuZyB04bqnbiBzdeG6pXQgaGnhu4NuIHRo4buLIHThu7cgbOG7hyBwaOG6p24gdHLEg20gY+G7p2EgdOG7q25nIG5ow7NtIHNvIHbhu5tpIHThu5VuZyBxdWFuIHPDoXQuIA0KVsOtIGThu6UsIG7hur91IGPDsyA2MiBuYW0gdHLDqm4gMTAwIHF1YW4gc8OhdCB0aMOsIMSR4buZIHBo4bqnbiB0csSDbSBz4bq9IGzDoCA2MiUuDQoNCg0KQuG6o25nIHThuqduIHPhu5EgdsOgIGLhuqNuZyB04bqnbiBzdeG6pXQgbMOgIGPDtG5nIGPhu6UgY8ahIGLhuqNuIHRyb25nIHRo4buRbmcga8OqIG3DtCB04bqjOiBjaMO6bmcgZ2nDunAgaGnhu4N1IHPGoSBi4buZIHBow6JuIGLhu5EgY8OhYyBiaeG6v24gxJHhu4tuaCB0w61uaCAobmjGsCBuZ2jhu4EgbmdoaeG7h3AsIHRyw6xuaCDEkeG7mSwga2h1IHbhu7FjKS4gDQpUcm9uZyBwaMOibiB0w61jaCwgY2jDum5nIHRhIHPhur0gc+G7rSBk4bulbmcgY8OhYyBi4bqjbmcgbsOgeSDEkeG7gyBraeG7g20gdHJhIHBow6JuIHBo4buRaSBj4bunYSBiaeG6v24gxJHhu4tuaCB0w61uaCAoY2jhurNuZyBo4bqhbiBwaMOibiBwaOG7kWkgZ2nhu5tpIHTDrW5oLCBjaOG7p25nIHThu5ljKSB2w6AgdOG7qyDEkcOzIG5o4bqtbiB4w6l0OiBiaeG6v24gbsOgbyBjaGnhur9tIMawdSB0aOG6vyBob+G6t2MgcGjDom4gYuG7kSDEkeG7k25nIMSR4buBdSBuaMawIHRo4bq/IG7DoG8gdHJvbmcgbeG6q3UgbmdoacOqbiBj4bupdS4NCg0KIyMgKioyLjIuIFBow6JuIHBo4buRaSB4w6FjIHN14bqldCoqDQoNCiMjIyAqKjIuMi4xLiBQaMOibiBwaOG7kWkgUG9pc29uIC0gUG9pc3NvbiBEaXN0cmlidXRpb24qKg0KDQpUcm9uZyBsw70gdGh1eeG6v3QgeMOhYyBzdeG6pXQsIHBow6JuIHBo4buRaSBQb2lzc29uIGzDoCBt4buZdCBwaMOibiBwaOG7kWkgeMOhYyBzdeG6pXQgcuG7nWkgcuG6oWMgZMO5bmcgxJHhu4MgbcO0IGjDrG5oIGjDs2Egc+G7kSBs4bqnbiBt4buZdCBz4buxIGtp4buHbiB44bqjeSByYSB0cm9uZyBt4buZdCBraG/huqNuZyB0aOG7nWkgZ2lhbiAoaG/hurdjIGtow7RuZyBnaWFuKSBj4buRIMSR4buLbmgsIHbhu5tpIMSRaeG7gXUga2nhu4duIHLhurFuZyBjw6FjIHPhu7Ega2nhu4duIHjhuqN5IHJhIMSR4buZYyBs4bqtcCB2w6AgdGhlbyB04bu3IGzhu4cgdHJ1bmcgYsOsbmgga2jDtG5nIMSR4buVaS4NCg0KQ+G7pSB0aOG7gywgeMOhYyBzdeG6pXQgY8OzIMSRw7puZyBrIHPhu7Ega2nhu4duIHjhuqN5IHJhIMSRxrDhu6NjIHTDrW5oIGLhu59pIGPDtG5nIHRo4bupYzoNCg0KJCQNClAoWCA9IGspID0gXGZyYWN7XGxhbWJkYV5rIGVeey1cbGFtYmRhfX17ayF9DQokJA0KDQoNCg0KVHJvbmcgxJHDszoNCg0KzrsgOiBsw6Agc+G7kSBs4bqnbiBr4buzIHbhu41uZyB44bqjeSByYSBj4bunYSBz4buxIGtp4buHbg0KDQrwnZGlOiBsw6Agc+G7kSBs4bqnbiB44bqjeSByYSBj4bulIHRo4buDDQogDQoNClRyb25nIMSRw7MgJFxsYW1iZGEkIGzDoCBnacOhIHRy4buLIHRydW5nIGLDrG5oIChz4buRIHPhu7Ega2nhu4duIGvhu7MgduG7jW5nKS4NCg0KDQpQaMOibiBwaOG7kWkgUG9pc3NvbiB0aMaw4budbmcgw6FwIGThu6VuZyBraGkgc+G7sSBraeG7h24geHXhuqV0IGhp4buHbiB0xrDGoW5nIMSR4buRaSBoaeG6v20gdsOgIG5n4bqrdSBuaGnDqm4gKHbDrSBk4bulOiBz4buRIGN14buZYyBn4buNaSB2w6BvIHThu5VuZyDEkcOgaSB0cm9uZyAxIGdp4budLCBz4buRIGzhu5dpIHBo4bqnbiBt4buBbSB0cm9uZyBt4buZdCBuZ8OgeSkuIFRyb25nIGLDoGkgdG/DoW4gcGjDom4gdMOtY2ggdGh1IG5o4bqtcCwgbeG6t2MgZMO5IHRoxrDhu51uZyBkw7luZyBjaG8gZOG7ryBsaeG7h3UgxJHhur9tLCBwaMOibiBwaOG7kWkgUG9pc3NvbiBjw7MgdGjhu4MgxJHGsOG7o2MgdGhhbSBraOG6o28ga2hpIGto4bqjbyBzw6F0IHPhu5EgbOG6p24gbeG7mXQgc+G7sSBraeG7h24gbGnDqm4gcXVhbiDEkeG6v24gY8O0bmcgdmnhu4djICh2w60gZOG7pSBz4buRIGzhuqduIHRoxINuZyBjaOG7qWMsIHPhu5EgZOG7sSDDoW4gaG/DoG4gdGjDoG5oKSBob+G6t2Mga2hpIGJp4bq/biDEkeG6v20ga2jDtG5nIGPDsyBnaeG7m2kgaOG6oW4gdHLDqm4gY+G7kSDEkeG7i25oLg0KDQoNClR1eSBuaGnDqm4sIMSR4buRaSB24bubaSBiaeG6v24gbmjhu4sgcGjDom4gdGh1IG5o4bqtcCAoY2FvIGhheSB0aOG6pXApLCBQb2lzc29uIGtow7RuZyDDoXAgZOG7pW5nIHRy4buxYyB0aeG6v3AsIG5oxrBuZyBraMOhaSBuaeG7h20gbsOgeSBnacO6cCBoaeG7g3UgdGjDqm0gduG7gSBjw6FjIG3DtCBow6xuaCBwaMOibiB0w61jaCB4w6FjIHN14bqldCBy4budaSBy4bqhYyBraMOhYy4NCg0KIyMjICoqMi4yLjIuIFBow6JuIHBo4buRaSBuaOG7iyB0aOG7qWMgLSBCaW5vbWlhbCBkaXN0cmlidXRpb24qKg0KDQpQaMOibiBwaOG7kWkgbmjhu4sgdGjhu6ljIGzDoCBt4buZdCBwaMOibiBwaOG7kWkgeMOhYyBzdeG6pXQgcuG7nWkgcuG6oWMgduG7m2kgaGFpIHRoYW0gc+G7kSBjaMOtbmg6IHPhu5EgcGjDqXAgdGjhu60gxJHhu5ljIGzhuq1wICRuJCB2w6AgeMOhYyBzdeG6pXQgdGjDoG5oIGPDtG5nICRwJCB0cm9uZyBt4buXaSBwaMOpcCB0aOG7rS4NCg0KDQpQaMOibiBwaOG7kWkgbsOgeSBtw7QgdOG6oyB4w6FjIHN14bqldCBjw7MgxJHDum5nICRrJCB0aMOgbmggY8O0bmcgdHJvbmcgJG4kIHRo4butIG5naGnhu4dtIMSR4buZYyBs4bqtcCwgbeG7l2kgdGjhu60gbmdoaeG7h20gY2jhu4kgY8OzIGhhaSBr4bq/dCBxdeG6oyAodGjDoG5oIGPDtG5nIGhv4bq3YyB0aOG6pXQgYuG6oWkpLCB24bubaSBjw7luZyB4w6FjIHN14bqldCB0aMOgbmggY8O0bmcgJHAkOg0KDQoNCkPDtG5nIHRo4bupYyB4w6FjIHN14bqldCBj4bunYSBwaMOibiBwaOG7kWkgbmjhu4sgdGjhu6ljIGzDoDoNCg0KJCQNClAoWCA9IGspID0gXGJpbm9te259e2t9IHBeayAoMSAtIHApXntuIC0ga30NCiQkDQoNCnbhu5tpICRrPTAsMSxcZG90cyxuJC4g4buobmcgZOG7pW5nIHBo4buVIGJp4bq/biBj4bunYSBwaMOibiBwaOG7kWkgbmjhu4sgdGjhu6ljIHRyb25nIHRo4buRbmcga8OqIGzDoCBtw7QgcGjhu49uZyBxdcOhIHRyw6xuaCDEkeG6v20gc+G7kSBs4bqnbiB4deG6pXQgaGnhu4duIGPhu6dhIG3hu5l0IMSR4bq3YyDEkWnhu4NtIG5o4bqldCDEkeG7i25oICh2w60gZOG7pTogc+G7kSBuZ8aw4budaSBjw7MgdGh1IG5o4bqtcCB0csOqbiA1MEsgdHJvbmcgbeG7mXQgbeG6q3UgMTAwIG5nxrDhu51pKS4gDQoNCg0KVHJvbmcgcGjDom4gdMOtY2ggZOG7ryBsaeG7h3UgxJHhu4tuaCB0w61uaCwgbuG6v3UgdGEgeGVtIG3hu5dpIGPDoSBuaMOibiBjw7MgdGh1IG5o4bqtcCBjYW8gKD41MEspIGzDoCDigJx0aMOgbmggY8O0bmfigJ0gdsOgIHRo4bqlcCAo4omkNTBLKSBsw6Ag4oCcdGjhuqV0IGLhuqFp4oCdLCB0aMOsIHThu5VuZyBz4buRIG5nxrDhu51pIGPDsyB0aHUgbmjhuq1wIGNhbyB0cm9uZyBt4bqrdSBjw7MgdGjhu4MgxJHGsOG7o2MgbcO0IGjDrG5oIGjDs2EgZ+G6p24gxJHDum5nIGLhu59pIHBow6JuIHBo4buRaSBuaOG7iyB0aOG7qWMgKG7hur91IGPDoWMgY8OhIG5ow6JuIMSRxrDhu6NjIGdp4bqjIMSR4buLbmggxJHhu5ljIGzhuq1wKS4NCg0KVHV5IG5oacOqbiwgcGjDom4gcGjhu5FpIG5o4buLIHRo4bupYyBnaeG6oyDEkeG7i25oIHjDoWMgc3XhuqV0IHRow6BuaCBjw7RuZyBraMO0bmcgxJHhu5VpLCBjw7MgdGjhu4MgaMahaSBraMOhYyB0aOG7sWMgdOG6vyBu4bq/dSBt4bqrdSBxdcOhIMSRYSBk4bqhbmcgduG7gSDEkeG6t2MgxJFp4buDbS4NCg0KIyMgKioyLjMuIEPDoWMgbsO0IGjDrG5oIGjhu5NpIHF1eSBuaOG7iyBwaMOibioqDQoNCiMjIyAqKjIuMy4xLiBNw7QgaMOsbmggaOG7k2kgcXV5IExvZ2lzdGljKioNCg0KSOG7k2kgcXV5IExvZ2lzdGljIGzDoCBwaMawxqFuZyBwaMOhcCB0aOG7kW5nIGvDqiBwaOG7lSBiaeG6v24gxJHhu4MgbcO0IGjDrG5oIGjDs2EgdsOgIGThu7EgxJFvw6FuIHjDoWMgc3XhuqV0IHjhuqN5IHJhIGPhu6dhIGJp4bq/biBwaOG7pSB0aHXhu5ljIG5o4buLIHBow6JuIChjw7MgaGFpIGdpw6EgdHLhu4s6IHbDrSBk4bulIHRodSBuaOG6rXAgY2FvIGhv4bq3YyB0aOG6pXApIGThu7FhIHRyw6puIG3hu5l0IGhv4bq3YyBuaGnhu4F1IGJp4bq/biDEkeG7mWMgbOG6rXAuIE3DtCBow6xuaCBuw6B5IGTDuW5nIGjDoG0gbG9naXN0aWMgKHNpZ21vaWQpIMSR4buDIGxpw6puIGvhur90IHjDoWMgc3XhuqV0ICRwID0gUChZPTEpJCB24bubaSBiaeG6v24gdHV54bq/biB0w61uaCBj4bunYSBjw6FjIHRoYW0gc+G7kToNCg0KDQokJA0KbG9naXQocCk9IFxsb2dcbGVmdChcZnJhY3twfXsxLXB9XHJpZ2h0KSA9IFxiZXRhXzAgKyBcYmV0YV8xIFhfMSArIFxsZG90cyArIFxiZXRhX2sgWF9rDQokJA0KDQpOaOG7nSDEkcOzLCBuw7MgY2hvIHBow6lwIMaw4bubYyBsxrDhu6NuZyBo4buHIHPhu5EgJFxiZXRhX2kkIGLhurFuZyBwaMawxqFuZyBwaMOhcCBo4bujcCBsw70gY+G7sWMgxJHhuqFpIChtYXhpbXVtIGxpa2VsaWhvb2QpLiBMb2dpc3RpYyByZWdyZXNzaW9uIHRow61jaCBo4bujcCBraGkgdGEgcXVhbiB0w6JtIMSR4bq/biB2aeG7h2MgZOG7sSDEkW/DoW4geMOhYyBzdeG6pXQgKHbDrSBk4bulIGto4bqjIG7Eg25nIG3hu5l0IG5nxrDhu51pIGPDsyB0aHUgbmjhuq1wIHRyw6puIDUwSykgdsOgIMSR4buTbmcgdGjhu51pIMSRw6FuaCBnacOhIOG6o25oIGjGsOG7n25nIHRoZW8gb2RkcyByYXRpbyBj4bunYSBjw6FjIGJp4bq/biBnaeG6o2kgdGjDrWNoIChuaMawIHR14buVaSwgaOG7jWMgduG6pW4sIG5naOG7gSBuZ2hp4buHcCkuDQoNCg0KVsOtIGThu6UsIHRyb25nIGLhu5kgZOG7ryBsaeG7h3UgYWR1bHQuY3N2LCB0YSBjw7MgdGjhu4MgZMO5bmcgbcO0IGjDrG5oIGxvZ2lzdGljIMSR4buDIHBow6JuIHTDrWNoIHjDoWMgc3XhuqV0IG3hu5l0IGPDoSBuaMOibiB0aHUgbmjhuq1wID41MEsgZOG7sWEgdHLDqm4gY8OhYyDEkeG6t2MgxJFp4buDbSBuaMOibiBraOG6qXUuIE3DtCBow6xuaCBuw6B5IGdpw7pwIHN1eSBsdeG6rW4gaGnhu4d1IOG7qW5nIHRoZW8geMOhYyBzdeG6pXQgKHAtbG9naXRzKSB2w6AgdGjGsOG7nW5nIGNobyBr4bq/dCBxdeG6oyBk4buFIGRp4buFbiBnaeG6o2kgdHJvbmcgxJFp4buBdSBraeG7h24gYmnhur9uIGvhur90IHF14bqjIGhp4bq/bSBob+G6t2MgY8OibiBi4bqxbmcuDQoNCiMjIyAqKjIuMy4yLiBNw7QgaMOsbmggaOG7k2kgcXV5IFByb2JpdCoqDQoNCkjhu5NpIHF1eSBQcm9iaXQgY8WpbmcgbMOgIG3hu5l0IGThuqFuZyBtw7QgaMOsbmggaOG7k2kgcXV5IGNobyBiaeG6v24gbmjhu4sgcGjDom4sIGtow6FjIOG7nyBjaOG7lyBow6BtIGxpw6puIGvhur90IChsaW5rIGZ1bmN0aW9uKSBsw6AgcGjDom4gcGjhu5FpIGNodeG6qW4gdMOtY2ggbMWpeSAoaMOgbSBDREYgY+G7p2EgcGjDom4gcGjhu5FpIGNodeG6qW4pIHRoYXkgdsOsIGjDoG0gbG9naXQuIA0KTsOzaSBjw6FjaCBraMOhYywgUHJvYml0IGdp4bqjIMSR4buLbmggYmnhur9uIG5n4bqrdSBuaGnDqm4gc2FpIHPhu5EgdHXDom4gdGhlbyBwaMOibiBwaOG7kWkgY2h14bqpbiwgdsOgIHjDoWMgc3XhuqV0ICRQKFk9MSkkIMSRxrDhu6NjIHTDrW5oIHThu6sgaMOgbSBwaMOibiBwaOG7kWkgY2h14bqpbiBj4bunYSB04buVIGjhu6NwIHR1eeG6v24gdMOtbmggY+G7p2EgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wLkPDtG5nIHRo4bupYyBtw7QgaMOsbmggUHJvYml0IGPDsyB0aOG7gyB2aeG6v3QgbMOgIA0KDQokJA0KUChZID0gMSB8IFgpID0gXFBoaShcYmV0YV8wICsgXGJldGFfMSBYXzEgKyBcbGRvdHMgKyBcYmV0YV9rIFhfaykNCiQkDQoNCnRyb25nIMSRw7MgJFxQaGkkIGzDoCBow6BtIHBow6JuIHBo4buRaSBjaHXhuqluIGNodeG6qW4gaMOzYS4gxJBp4buDbSBt4bqhbmggY+G7p2EgUHJvYml0IGzDoCBwaMO5IGjhu6NwIHbhu5tpIGPDoWMgdMOsbmggaHXhu5FuZyBnaeG6oyBz4butIGxvZ2ljIHjhuqN5IHJhIHRoZW8gcXV5IGx14bqtdCDigJxjaHXDtG5n4oCdIGNodeG6qW4sIHR1eSBy4bqxbmcgdHJvbmcgdGjhu7FjIHThur8ga+G6v3QgcXXhuqMgdGjGsOG7nW5nIHTGsMahbmcgxJHGsMahbmcgcuG6pXQgbmhp4buBdSB24bubaSBMb2dpc3RpYy4gDQoNCg0KVmnhu4djIGNo4buNbiBQcm9iaXQgdGhheSB2w6wgTG9naXQgxJHDtGkga2hpIGThu7FhIHRyw6puIGdp4bqjIMSR4buLbmggduG7gSBwaMOibiBwaOG7kWkgc2FpIHPhu5EgaG/hurdjIHRydXnhu4FuIHRo4buRbmcgbmdoacOqbiBj4bupdS4gVHJvbmcgYsOgaSBwaMOibiB0w61jaCB0aHUgbmjhuq1wLCBQcm9iaXQgc+G6vSDEkcawYSByYSBjw6FjIGjhu4cgc+G7kSBjw7Mgw70gbmdoxKlhIHTGsMahbmcgdOG7sSBzbyB24bubaSBsb2dpc3RpYyBuaMawbmcgdHLDqm4gcXV5IG3DtCBjaHXhuqluLCB2w6AgdGjGsOG7nW5nIHPhu60gZOG7pW5nIHRyb25nIGzEqW5oIHbhu7FjIGtpbmggdOG6vyBsxrDhu6NuZywgdMOibSBsw70gaOG7jWMuDQoNCiMjIyAqKjIuMy4zLiBNw7QgaMOsbmggaOG7k2kgcXV5IENsb2dsb2cqKg0KDQpI4buTaSBxdXkgQ2xvZ2xvZyBsw6AgYmnhur9uIHRo4buDIGtow6FjIGPhu6dhIGjhu5NpIHF1eSBuaOG7iyBwaMOibiwgc+G7rSBk4bulbmcgaMOgbSBsacOqbiBr4bq/dCAkZyhwKT1cbG9nKC1cbG9nKDEtcCkpJCAuIEjDoG0gbGnDqm4ga+G6v3QgbsOgeSBraMO0bmcgxJHhu5FpIHjhu6luZywgdGjGsOG7nW5nIMOhcCBk4bulbmcga2hpIHjDoWMgc3XhuqV0IGJp4bq/biBj4buRIOG7nyBt4buZdCB0cm9uZyBoYWkgxJHhuqd1IHLhuqV0IG5o4buPIGhv4bq3YyBs4bubbiAodsOtIGThu6Uga2hpIHThuqduIHN14bqldCBkxrDGoW5nIGfhuqduIDApLiANCg0KDQpUaGVvIGtow6FpIG5p4buHbSBHTE0sIG3DtCBow6xuaCBDbG9nbG9nIHTGsMahbmcg4bupbmcgduG7m2kgZ2nhuqMgdGhp4bq/dCBy4bqxbmcgdOG7tyBs4buHIGPhu6dhIG3hu5l0IHPhu7Ega2nhu4duIHR1w6JuIHRoZW8gcGjDom4gcGjhu5FpIFBvaXNzb24uIEPhu6UgdGjhu4MsIG7hur91IHPhu7Ega2nhu4duIOKAnHRodSBuaOG6rXAgY2Fv4oCdIHLhuqV0IGhp4bq/bSwgdGEgY8OzIHRo4buDIGTDuW5nIGNsb2dsb2cgxJHhu4MgbcO0IGjDrG5oIGjDs2EgbG9nKC1sb2coMS0kcCQpKSB0dXnhur9uIHTDrW5oIHbhu5tpIGJp4bq/biBnaeG6o2kgdGjDrWNoLiANCg0KDQpNw7QgaMOsbmggbsOgeSBo4buvdSDDrWNoIHRyb25nIHRyxrDhu51uZyBo4bujcCBiaeG6v24gcGjhu6UgdGh14buZYyBjw7MgcGjDom4gYuG7kSB0aGnDqm4gbOG7h2NoIHbhu4EgbeG7mXQgcGjDrWE7IGvhur90IHF14bqjIGzDoCBjw6FjIGjhu4cgc+G7kSDEkeG6oWkgZGnhu4duIGNobyBz4buxIHRoYXkgxJHhu5VpIGxvZygtbG9nKDEtJHAkKSkuIFRyb25nIHBow6JuIHTDrWNoLCBMb2dpc3RpYy9Qcm9iaXQgdGjGsOG7nW5nIMSRxrDhu6NjIGTDuW5nIHBo4buVIGJp4bq/biBoxqFuLCBuaMawbmcgQ2xvZ2xvZyBjw7MgdGjhu4MgxJHGsOG7o2MgdGjhu60gbmdoaeG7h20gbuG6v3UgZOG7ryBsaeG7h3UgY2hvIHRo4bqleSB04bqnbiBzdeG6pXQgdGh1IG5o4bqtcCBjYW8gY+G7sWMga+G7syB0aOG6pXAgaG/hurdjIG114buRbiBzbyBzw6FuaCBtw7QgaMOsbmgga2jDoWMuDQoNCiQkDQpcbG9nKC1cbG9nKDEgLSBwKSkgPSBcYmV0YV8wICsgXGJldGFfMSBYXzEgKyBcbGRvdHMgKyBcYmV0YV9rIFhfaw0KJCQNCg0KIyMgKioyLjQuIMSQw6FuaCBnacOhIG3DtCBow6xuaCB2w6AgY8OhYyBjaOG7iSBz4buRIHRo4buRbmcga8OqKioNCg0KIyMjICoqMi40LjEuIMSQ4buZIG5o4bqheSB2w6AgxJHhu5kgxJHhurdjIGhp4buHdSoqDQoNCsSQ4buZIG5o4bqheSAoc2Vuc2l0aXZpdHkpIHbDoCDEkeG7mSDEkeG6t2MgaGnhu4d1IChzcGVjaWZpY2l0eSkgbMOgIGPDoWMgY2jhu4kgc+G7kSDEkcOhbmggZ2nDoSBoaeG7h3Ugc3XhuqV0IGPhu6dhIG3DtCBow6xuaCBwaMOibiBsb+G6oWkgbmjhu4sgcGjDom4sIMSR4bq3YyBiaeG7h3QgdHJvbmcgbMSpbmggduG7sWMgeSB04bq/IG5oxrBuZyBjxaluZyDDoXAgZOG7pW5nIGNobyBi4bqldCBr4buzIHBow6JuIGzhu5twIG7DoG8uIEPhu6UgdGjhu4MsIMSR4buZIG5o4bqheSBsw6AgeMOhYyBzdeG6pXQgKGhv4bq3YyB04bu3IGzhu4cpIG3DoCBtw7QgaMOsbmggZOG7sSBiw6FvIGTGsMahbmcgdMOtbmgga2hpIMSR4buRaSB0xrDhu6NuZyB0aOG7sWMgc+G7sSBjw7Mga+G6v3QgcXXhuqMgZMawxqFuZyB0w61uaCAodHJ1ZSBwb3NpdGl2ZSByYXRlKS4NClRyb25nIG5n4buvIGPhuqNuaCB0aHUgbmjhuq1wLCBu4bq/dSB0YSB4w6l0IOKAnGTGsMahbmcgdMOtbmjigJ0gbMOgIGPDsyB0aHUgbmjhuq1wIGNhbywgxJHhu5kgbmjhuqF5IGNobyBiaeG6v3QgdOG7tyBs4buHIG5nxrDhu51pIGPDsyB0aHUgbmjhuq1wIGNhbyDEkcaw4bujYyBtw7QgaMOsbmggZOG7sSDEkW/DoW4gY2jDrW5oIHjDoWMuIA0KDQoNCsSQ4buZIMSR4bq3YyBoaeG7h3UgbMOgIHjDoWMgc3XhuqV0IG3DtCBow6xuaCBk4buxIGLDoW8gw6JtIHTDrW5oIGtoaSDEkeG7kWkgdMaw4bujbmcgdGjhu7FjIHPhu7Egw6JtIHTDrW5oICh0cnVlIG5lZ2F0aXZlIHJhdGUpLCB04bupYyBsw6AgdOG7tyBs4buHIG5nxrDhu51pIHRodSBuaOG6rXAgdGjhuqVwIMSRxrDhu6NjIG3DtCBow6xuaCBk4buxIMSRb8OhbiDEkcO6bmcuIA0KDQpIYWkgY2jhu4kgc+G7kSBuw6B5IGLhu5Ugc3VuZyBjaG8gbmhhdTogbeG7mXQgbcO0IGjDrG5oIGPDsyDEkeG7mSBuaOG6oXkgY2FvIHRoxrDhu51uZyDEkcOhbmggxJHhu5VpIHbhu5tpIMSR4buZIMSR4bq3YyBoaeG7h3UgdGjhuqVwIHbDoCBuZ8aw4bujYyBs4bqhaS4gVsOtIGThu6UsIGtoaSBwaMOibiB0w61jaCBr4bq/dCBxdeG6oyBwaMOibiBsb+G6oWkgKGPDsyB0aOG7gyB0aMO0bmcgcXVhIG1hIHRy4bqtbiBuaOG6p20gbOG6q24pLCBjaMO6bmcgdGEgdMOtbmggxJHhu5kgbmjhuqF5ID0gVFAvKFRQK0ZOKSB2w6AgxJHhu5kgxJHhurdjIGhp4buHdSA9IFROLyhUTitGUCkuIA0KDQoNCsSQ4buZIG5o4bqheSDEkeG6t2MgYmnhu4d0IHF1YW4gdHLhu41uZyBu4bq/dSB0YSBtdeG7kW4gZ2nhuqNtIHRoaeG7g3Ugdmnhu4djIGLhu48gc8OzdCBjw6FjIHRyxrDhu51uZyBo4bujcCB0aHUgbmjhuq1wIGNhbyAodsOtIGThu6UgxJHhu4MgbmfEg24gY2jhurduIHNhaSBzw7N0IMSRw6FuaCBnacOhIG5o4buvbmcgbmfGsOG7nWkgdGjhu7FjIHPhu7EgY8OzIHRodSBuaOG6rXAgY2FvIGLhu4sgZ8OhbiBuaOG6p20gbMOgIHRo4bqlcCksIGPDsm4gxJHhu5kgxJHhurdjIGhp4buHdSBxdWFuIHRy4buNbmcgxJHhu4MgdHLDoW5oIGThu7EgYsOhbyBzYWkgcXXDoSBuaGnhu4F1IHRyxrDhu51uZyBo4bujcCB0aHUgbmjhuq1wIHRo4bqlcC4NCg0KIyMjICoqMi40LjIuIFJlbGF0aXZlIFJpc2sqKg0KDQpU4bu3IHPhu5EgcuG7p2kgcm8gdMawxqFuZyDEkeG7kWkgKHJlbGF0aXZlIHJpc2sg4oCTIFJSKSBzbyBzw6FuaCB4w6FjIHN14bqldCB44bqjeSByYSBt4buZdCBz4buxIGtp4buHbiBnaeG7r2EgaGFpIG5ow7NtICh2w60gZOG7pSBuaMOzbSDigJzEkcaw4bujYyB0aeG6v3AgeMO6Y+KAnSB2w6AgbmjDs20g4oCcY2jGsGEgdGnhur9wIHjDumPigJ0pLg0KDQpO4bq/dSB0YSBxdWFuIHTDom0gdOG7m2kgYmnhur9uIFRIVSBOSOG6rFAgQ0FPIGdp4buvYSBoYWkgbmjDs20gxJHhurdjIMSRaeG7g20gZMOibiBz4buRLCBSUiDEkcaw4bujYyB0w61uaCBi4bqxbmcgdOG7iSBz4buROiB4w6FjIHN14bqldCB0aHUgbmjhuq1wIGNhbyDhu58gbmjDs20gdGjhu6kgbmjhuqV0IGNoaWEgY2hvIHjDoWMgc3XhuqV0IHRodSBuaOG6rXAgY2FvIOG7nyBuaMOzbSB0aOG7qSBoYWkuIA0KDQoNClRoZW8gxJHhu4tuaCBuZ2jEqWEsIOKAnFJlbGF0aXZlIHJpc2sgaXMgYSByYXRpbyBvZiB0aGUgcHJvYmFiaWxpdHkgb2YgYW4gZXZlbnQgb2NjdXJyaW5nIGluIHRoZSBleHBvc2VkIGdyb3VwIHZlcnN1cyB0aGUgcHJvYmFiaWxpdHkgb2YgdGhlIGV2ZW50IG9jY3VycmluZyBpbiB0aGUgbm9uLWV4cG9zZWQgZ3JvdXDigJ0uDQoNCg0KUlI9MSBjw7MgbmdoxKlhIGtow7RuZyBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIGhhaSBuaMOzbTsgUlI+MSBuZ2jEqWEgbmjDs20gxJHhuqd1IGPDsyBraOG6oyBuxINuZyBz4buxIGtp4buHbiBjYW8gaMahbiBuaMOzbSBzYXU7IFJSPDEgbmfGsOG7o2MgbOG6oWkuDQoNClbDrSBk4bulLCBu4bq/dSBnaeG6oyDEkeG7i25oIOKAnG5ow7NtIG5hbeKAnSBsw6AgbmjDs20gbmdoacOqbiBj4bupdSB2w6Ag4oCcbmjDs20gbuG7r+KAnSBsw6AgbmjDs20gxJHhu5FpIGNo4bupbmcsIFJSID4xIGNobyB0aOG6pXkgbmFtIGdp4bubaSBjw7Mga2jhuqMgbsSDbmcgdGh1IG5o4bqtcCBjYW8gaMahbiBu4buvIGdp4bubaS4NCg0KDQpUcm9uZyBwaMOibiB0w61jaCwgUlIgdGjGsOG7nW5nIMSRxrDhu6NjIHPhu60gZOG7pW5nIGtoaSBk4buvIGxp4buHdSBjw7MgdGhp4bq/dCBr4bq/IHRoZW8gbmdoacOqbiBj4bupdSDEkW/DoG4gaOG7hyBob+G6t2MgcXVhbiBzw6F0LCB2w6AgbMOgIHBow6lwIMSRbyB0cuG7sWMgdGnhur9wIGxpw6puIHF1YW4gxJHhur9uIHjDoWMgc3XhuqV0IChyaXNrKSBnaeG7r2EgaGFpIG5ow7NtLg0KDQojIyMgKioyLjQuMy4gT2RkcyBSYXRpbyoqDQoNClThu7cgc+G7kSBjaMOqbmggKG9kZHMgcmF0aW8g4oCTIE9SKSBsw6AgdOG7tyBs4buHIGPhu6dhIGhhaSBvZGRzLCB0aMaw4budbmcgZMO5bmcgdHJvbmcgY8OhYyBuZ2hpw6puIGPhu6l1IGNhc2UtY29udHJvbCBob+G6t2MgaOG7k2kgcXV5IGxvZ2lzdGljIMSR4buDIMSRbyBt4bupYyDEkeG7mSBsacOqbiBxdWFuIGdp4buvYSBiaeG6v24gxJHhu5ljIGzhuq1wIHbDoCBiaeG6v24gcGjhu6UgdGh14buZYyBuaOG7iyBwaMOibi4NCg0KDQouIOKAnFRoZSBvZGRzIHJhdGlvIChPUikgaXMgYSByYXRpbyBvZiB0d28gc2V0cyBvZiBvZGRzOiB0aGUgb2RkcyBvZiB0aGUgZXZlbnQgb2NjdXJyaW5nIGluIGFuIGV4cG9zZWQgZ3JvdXAgdmVyc3VzIHRoZSBvZGRzIG9mIHRoZSBldmVudCBvY2N1cnJpbmcgaW4gYSBub24tZXhwb3NlZCBncm91cOKAnQ0KDQpUaGVvIMSRw7MsIG9kZHMgY+G7p2EgbeG7mXQgbmjDs20gbMOgIHjDoWMgc3XhuqV0IGV2ZW50IHjhuqN5IHJhIGNoaWEgY2hvIHjDoWMgc3XhuqV0IGV2ZW50IGtow7RuZyB44bqjeSByYS4gDQoNCg0KLSBN4buZdCBPUiA9MSBjaOG7iSByYSBraMO0bmcgY8OzIHPhu7EgbGnDqm4gcXVhbiBnaeG7r2EgYmnhur9uIOKAnHRp4bq/cCB4w7pj4oCdIHbDoCBr4bq/dCBxdeG6ozsgDQoNCg0KLSBPUj4xIGNo4buJIGV2ZW50IGPDsyBraOG6oyBuxINuZyB44bqjeSByYSBjYW8gaMahbiBraGkg4oCcdGnhur9wIHjDumPigJ07IE9SPDEgY2jhu4kgeMOhYyBzdeG6pXQgeOG6o3kgcmEgdGjhuqVwIGjGoW4uIFRyb25nIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXN0aWMsIGjhu4cgc+G7kSBsb2dpdCBjaG8gYmnhur90IE9SIHTGsMahbmcg4bupbmcgY+G7p2EgYmnhur9uIGdp4bqjaSB0aMOtY2guDQoNCg0KVsOtIGThu6UsIG7hur91IE9SIGPhu6dhIGJp4bq/biDigJxi4bqxbmcgxJHhuqFpIGjhu41j4oCdIHNvIHbhu5tpIOKAnGtow7RuZyDEkeG6oWkgaOG7jWPigJ0gYuG6sW5nIDIsIHRow6wgbmfGsOG7nWkgY8OzIGLhurFuZyDEkeG6oWkgaOG7jWMgY8OzIG9kZHMgdGh1IG5o4bqtcCBjYW8gZ+G6pXAgxJHDtGkgbmfGsOG7nWkga2jDtG5nIGPDsyBi4bqxbmcuDQoNCk9SIMSR4bq3YyBiaeG7h3QgaOG7r3Ugw61jaCB0cm9uZyBwaMOibiB0w61jaCBo4buTaSBxdXkgbG9naXN0aWMgYuG7n2kgbsOzIGxpw6puIGvhur90IHRy4buxYyB0aeG6v3AgduG7m2kgaOG7hyBz4buRIMaw4bubYyBsxrDhu6NuZyB2w6AgY8OzIHRo4buDIGLDoW8gY8OhbyBrw6htIGtob+G6o25nIHRpbiBj4bqteS4NCg0KIyMjICoqMi40LjQuIEtob+G6o25nIMaw4bubYyBsxrDhu6NuZyBjaG8gdOG7tyBs4buHKioNCg0KS2hv4bqjbmcgxrDhu5tjIGzGsOG7o25nIChraG/huqNuZyB0aW4gY+G6rXkg4oCTIENvbmZpZGVuY2UgSW50ZXJ2YWwsIENJKSBjdW5nIGPhuqVwIHBo4bqhbSB2aSBnacOhIHRy4buLIG3DoCB0aGFtIHPhu5EgKG5oxrAgT1IgaGF5IFJSKSBjw7MgdGjhu4MgdGjhu7FjIHPhu7EgdGh14buZYyB24buBIHbhu5tpIG3hu5l0IMSR4buZIHRpbiBj4bqteSBuaOG6pXQgxJHhu4tuaCAodGjGsOG7nW5nIDk1JSkuIFbDrSBk4bulLCBraG/huqNuZyB0aW4gY+G6rXkgOTUlIGNobyBPUiDEkcaw4bujYyB0w61uaCBk4buxYSB0csOqbiBsb2coT1IpIGPhu5luZy90cuG7qyBt4bupYyBzYWkgc+G7kSBjaHXhuqluIG5ow6JuIHbhu5tpIDEuOTYNCg0KQ+G7pSB0aOG7gywg4oCcVXBwZXIgOTUlIENJID0gZXhwWyBsbihPUikgKyAxLjk2ICogc3FydCgxL2ErMS9iKzEvYysxL2QpIF3igJ0gdsOgIHTGsMahbmcgdOG7sSBjaG8gY+G6rW4gZMaw4bubaS4NCg0KTuG6v3Uga2hv4bqjbmcgdGluIGPhuq15IGPhu6dhIE9SICh04bqhaSA5NSUpIGJhbyBn4buTbSBnacOhIHRy4buLIDEsIHRhIG7Ds2kgT1Iga2jDtG5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6og4bufIG3hu6ljIDUlLiANCg0KVMawxqFuZyB04buxIGNobyBSUiwgQ0kgbMOgIGPDtG5nIGPhu6UgxJHhu4MgxJHDoW5oIGdpw6EgxJHhu5kgY2jDrW5oIHjDoWMgY+G7p2EgxrDhu5tjIGzGsOG7o25nIHbDoCBraeG7g20gxJHhu4tuaCBnaeG6oyB0aHV54bq/dC4gDQoNCg0KVHJvbmcgcGjDom4gdMOtY2ggdGh1IG5o4bqtcCwgY2jDum5nIHRhIHPhur0gYsOhbyBjw6FvIGPDuW5nIE9SIHbDoCBSUiBrw6htIHRoZW8ga2hv4bqjbmcgdGluIGPhuq15IMSR4buDIGJp4bq/dCBr4bq/dCBxdeG6oyBiYW8gbmhpw6p1IHBo4bqnbiB0csSDbSDEkcOhbmcgdGluIGPhuq15IHRyb25nIGTDom4gc+G7kS4NCg0KIyMjICoqMi40LjUuIEFJQyAtIEFrYWlrZSBJbmZvcm1hdGlvbiBDcml0ZXJpb24qKg0KDQpUacOqdSBjaMOtIHRow7RuZyB0aW4gQWthaWtlIChBSUMpIGzDoCBt4buZdCBjaOG7iSBz4buRIGTDuW5nIGNobyBs4buxYSBjaOG7jW4gbcO0IGjDrG5oLCDEkcOhbmggZ2nDoSBjaOG6pXQgbMaw4bujbmcgdMawxqFuZyDEkeG7kWkgY+G7p2EgY8OhYyBtw7QgaMOsbmggdGjhu5FuZyBrw6ogYuG6sW5nIGPDoWNoIGPDom4gYuG6sW5nIMSR4buZIGto4bubcCB2w6AgxJHhu5kgcGjhu6ljIHThuqFwIGPhu6dhIG3DtCBow6xuaC4NCg0KDQpUaGVvIGPDtG5nIHRo4bupYywg4oCcQUlDID0gMmsg4oCTIDIgbG4oXGhhdCBMKeKAnSwgdHJvbmcgxJHDsyAkayQgbMOgIHPhu5EgdGhhbSBz4buRIMaw4bubYyBsxrDhu6NuZyB2w6AgJFxoYXQgTCQgbMOgIGdpw6EgdHLhu4sgY+G7sWMgxJHhuqFpIGPhu6dhIGjDoG0gaOG7o3AgbMO9DQoNCk3DtCBow6xuaCBjw7MgQUlDIHRo4bqlcCBoxqFuIMSRxrDhu6NjIHhlbSBsw6AgdOG7kXQgaMahbiB2w6wgbeG6pXQgw610IHRow7RuZyB0aW4gKGdvb2RuZXNzLW9mLWZpdCBjYW8gduG7m2kgxJHhu5kgcGjhu6ljIHThuqFwIHRo4bqlcCBoxqFuKS4NCktoaSBzbyBzw6FuaCBuaGnhu4F1IG3DtCBow6xuaCBo4buTaSBxdXkgKHbDrSBk4bulIHNvIHPDoW5oIGxvZ2lzdGljLCBwcm9iaXQsIGNsb2dsb2cpLCBjaMO6bmcgdGEgdGjGsOG7nW5nIGNo4buNbiBtw7QgaMOsbmggY8OzIEFJQyBuaOG7jyBuaOG6pXQuDQoNCg0KTMawdSDDvSBBSUMgY2jhu4kgxJHDoW5oIGdpw6EgdMawxqFuZyDEkeG7kWkgZ2nhu69hIGPDoWMgbcO0IGjDrG5oLCBraMO0bmcgY8OzIG5nxrDhu6FuZyDigJzEkcO6bmcvc2Fp4oCdLiBWw60gZOG7pSwgbuG6v3UgaGFpIG3DtCBow6xuaCBsb2dpc3RpYyB24bubaSBjw6FjIGJp4bq/biBraMOhYyBuaGF1IGPDsyBBSUMgMTQwMCB2w6AgMTM4MCwgdGjDrCBtw7QgaMOsbmggQUlDIDEzODAgxJHGsOG7o2MgxrBhIGNodeG7mW5nICjDrXQgbeG6pXQgdGjDtG5nIHRpbiBoxqFuKS4NCg0KIyMjICoqMi40LjUuIERldmlhbmNlKioNCg0KRGV2aWFuY2UgbMOgIGNo4buJIHPhu5EgxJFvIMSR4buZIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oIHRo4buRbmcga8OqIGThu7FhIHRyw6puIGdpw6EgdHLhu4sgbG9nLWxpa2VsaWhvb2QsIHTGsMahbmcgdOG7sSBuaMawIHThu5VuZyBiw6xuaCBwaMawxqFuZyBkxrAgdHJvbmcgaOG7k2kgcXV5IHR1eeG6v24gdMOtbmguDQpDw7RuZyB0aOG7qWMgdOG7lW5nIHF1w6F0IGPhu6dhIGRldmlhbmNlIMSR4buRaSB24bubaSBt4buZdCBtw7QgaMOsbmggJE1fMCQgc28gduG7m2kgbcO0IGjDrG5oIGLDo28gaMOyYSAoc2F0dXJhdGVkIG1vZGVsKSDEkcaw4bujYyDEkeG7i25oIG5naMSpYSBsw6A6DQoNCg0KJCQNCkQgPSAyIFxsZWZ0KCBcbG9nIExfe1x0ZXh0e3NhdHVyYXRlZH19IC0gXGxvZyBMX3tNXzB9IFxyaWdodCkNCiQkDQoNCk3DtCBow6xuaCBiw6NvIGjDsmEgY8OzIHPhu5EgdGhhbSBz4buRIGLhurFuZyBz4buRIHF1YW4gc8OhdCwgbsOqbiDEkeG7mSBwaMO5IGjhu6NwIHThu5FpIMSRYSAoJFxsb2cgTF97XHRleHR7c2F0dXJhdGVkfX0kKS4gDQpEZXZpYW5jZSBjaG8gdGEgYmnhur90IG3hu6ljIMSR4buZIG3huqV0IG3DoXQgdGjDtG5nIHRpbiBj4bunYSBtw7QgaMOsbmggJE1fMCQgc28gduG7m2kgdHLGsOG7nW5nIGjhu6NwIHThu5F0IG5o4bqldC4NCkRldmlhbmNlIGPDoG5nIG5o4buPIGPDoG5nIGNobyB0aOG6pXkgbcO0IGjDrG5oIGto4bubcCBk4buvIGxp4buHdSB04buRdC4gDQoNCg0KVHJvbmcgY8OhYyBtw7QgaMOsbmggR0xNIG5oxrAgbG9naXN0aWMsIHRhIGTDuW5nIGRldmlhbmNlIGPDsm4gc8OzdCBs4bqhaSAocmVzaWR1YWwgZGV2aWFuY2UpIMSR4buDIGtp4buDbSDEkeG7i25oIHNvIHbhu5tpIGRldmlhbmNlIGfhu5FjLCB2w6Agc28gc8OhbmggZGV2aWFuY2UgZ2nhu69hIGPDoWMgbcO0IGjDrG5oIGzhu5NuZyBuaGF1IMSR4buDIGtp4buDbSDEkeG7i25oIGdp4bqjIHRodXnhur90ICh0aGVvIHBow6JuIHBo4buRaSAkXGNoaV4yJCB24bubaSBi4bqtYyB04buxIGRvIHBow7kgaOG7o3ApDQoNCg0KIyMjICoqMi40LjUuIEJyaWVyIFNjb3JlKioNCg0KQnJpZXIgc2NvcmUgbMOgIHRoxrDhu5tjIMSRbyDEkeG7mSBjaMOtbmggeMOhYyBj4bunYSBjw6FjIGThu7EgYsOhbyB4w6FjIHN14bqldCB0cm9uZyBiw6BpIHRvw6FuIHBow6JuIGxv4bqhaSAoxJHhurdjIGJp4buHdCBuaOG7iyBwaMOibikuDQpOw7MgxJHGsOG7o2MgdMOtbmggYuG6sW5nIGdpw6EgdHLhu4sgYsOsbmggcGjGsMahbmcgc2FpIHPhu5EgdHJ1bmcgYsOsbmggZ2nhu69hIHjDoWMgc3XhuqV0IGThu7EgYsOhbyB2w6Aga+G6v3QgcXXhuqMgdGjhu7FjIHThur8gKDAgaG/hurdjIDEpOg0KDQoNCiQkDQpCUyA9IFxmcmFjezF9e059IFxzdW1fe2kgPSAxfV57Tn0gKGZfaSAtIG9faSleMg0KJCQNCg0KVHJvbmcgxJHDszoNCg0KLSAkZl9pJCBsw6AgeMOhYyBzdeG6pXQgxJHGsOG7o2MgbcO0IGjDrG5oIGThu7EgYsOhbyBjaG8gdHLGsOG7nW5nIGjhu6NwIHRo4bupICRpJA0KDQotICRvX2kkIGzDoCBr4bq/dCBxdeG6oyB0aOG7sWMgdOG6vyAoMCBob+G6t2MgMSkNCg0KDQpCcmllciBzY29yZSBkYW8gxJHhu5luZyB04burIDAgKMSRb8OhbiBob8OgbiBo4bqjbykgxJHhur9uIDEgKHLhuqV0IGvDqW0sIHRoxrDhu51uZyB24bubaSBoYWkgxJHhuqd1IHTGsMahbmcg4bupbmcgMCB2w6AgMSkuIFRyb25nIHBow6JuIHTDrWNoIHRodSBuaOG6rXAsIGtoaSBkw7luZyBtw7QgaMOsbmggbG9naXN0aWMvcHJvYml0IGThu7EgxJFvw6FuIHjDoWMgc3XhuqV0IHRodSBuaOG6rXAgY2FvLCBCcmllciBzY29yZSBnacO6cCDEkcOhbmggZ2nDoSDEkeG7mSBjaMOtbmggeMOhYyB04buVbmcgdGjhu4MgY+G7p2EgeMOhYyBzdeG6pXQgZOG7sSDEkW/DoW4uIE3hu5l0IG3DtCBow6xuaCB24bubaSBCcmllciBzY29yZSB0aOG6pXAgKGfhuqduIDApIGNobyB0aOG6pXkgZOG7sSBiw6FvIHjDoWMgc3XhuqV0IHThu5F0IGjGoW4uIEJyaWVyIHNjb3JlIGLhu5Ugc3VuZyBjaG8gQVVDLVJPQywgxJHhu5kgbmjhuqF5L8SR4bq3YyBoaeG7h3UgYuG6sW5nIGPDoWNoIHhlbSB4w6l0IHNhaSBz4buRIGThu7EgYsOhbyB4w6FjIHN14bqldCBt4buZdCBjw6FjaCB04buVbmcgcXVhbi4NCg0KIyMgKioyLjUuIEzGsOG7o2Mga2jhuqNvIG5naGnDqm4gY+G7qXUqKg0KDQojIyMgKioyLjUuMS4gTmdoacOqbiBj4bupdSB0cm9uZyBuxrDhu5tjKioNCg0KVHJvbmcgbsaw4bubYyDEkcOjIGPDsyBuaGnhu4F1IG5naGnDqm4gY+G7qXUgxJFp4buBdSB0cmEgY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biB0aHUgbmjhuq1wIGPhu6dhIG5nxrDhu51pIGxhbyDEkeG7mW5nIHThuqFpIFZp4buHdCBOYW0uIFbDrSBk4bulLCAqKlThu5FuZyBRdeG7kWMgQuG6o28qKiAoMjAxNSkgKipQaMOibiB0w61jaCB0aHUgbmjhuq1wIGPhu6dhIGxhbyDEkeG7mW5nIGtodSB24buxYyBk4buLY2ggduG7pSoqIGThu7FhIHRyw6puIGThu68gbGnhu4d1IMSRaeG7gXUgdHJhIG3hu6ljIHPhu5FuZyBo4buZIGdpYSDEkcOsbmggdsOgIG3DtCBow6xuaCBo4buTaSBxdXkgcGjDom4gduG7iy4gS+G6v3QgcXXhuqMgY2hvIHRo4bqleSBjw6FjIHnhur91IHThu5EgbmjGsCBz4buRIG7Eg20gxJFpIGjhu41jLCBraW5oIG5naGnhu4dtIGzDoG0gdmnhu4djLCBnaeG7nSBsw6BtIHRydW5nIGLDrG5oLCBnaeG7m2kgbmFtLCBraHUgduG7sWMgxJHDtCB0aOG7iywgY2jhu6ljIHbhu6UgcXXhuqNuIGzDveKApiBjw7MgdMOhYyDEkeG7mW5nIHRodeG6rW4gY2hp4buBdSBsw6BtIHTEg25nIHRodSBuaOG6rXAsIHRyb25nIGtoaSBsw6BtIHZp4buHYyB04bqhaSBkb2FuaCBuZ2hp4buHcCBuaMOgIG7GsOG7m2MsIHNpbmggc+G7kW5nIOG7nyBjw6FjIHbDuW5nIG1p4buBbiBUcnVuZyBjw7MgdMOhYyDEkeG7mW5nIG5nxrDhu6NjIGNoaeG7gXUgZ2nhuqNtIHRodSBuaOG6rXANCg0KDQpUxrDGoW5nIHThu7EsICoqTmd1eeG7hW4gSOG7k25nIEjDoCB2w6AgTMOqIFRo4buLIEtpbSBDaGkqKiAoMjAyMCkgbmdoacOqbiBj4bupdSB04bqhaSBLaHUgY8O0bmcgbmdoaeG7h3AgTG9uZyDEkOG7qWMgKFRyw6AgVmluaCkgeMOhYyDEkeG7i25oIG7Eg20geeG6v3UgdOG7kSBxdWFuIHRy4buNbmc6IG5nw6BuaCBuZ2jhu4EsIGtpbmggbmdoaeG7h20sIHRyw6xuaCDEkeG7mSBjaHV5w6puIG3DtG4sIGTDom4gdOG7mWMgdsOgIMSRaeG7gXUga2nhu4duIG3DtGkgdHLGsOG7nW5nIGzDoG0gdmnhu4djLCB0cm9uZyDEkcOzIOKAnGtpbmggbmdoaeG7h23igJ0gdsOgIOKAnHRyw6xuaCDEkeG7mSBjaHV5w6puIG3DtG7igJ0g4bqjbmggaMaw4bufbmcgbeG6oW5oIG5o4bqldCBsw6puIHRodSBuaOG6rXAuIEPDoWMgbmdoacOqbiBj4bupdSBuw6B5IHPhu60gZOG7pW5nIGPDoWMgcGjGsMahbmcgcGjDoXAgxJHhu4tuaCBsxrDhu6NuZyBuaMawIGjhu5NpIHF1eSBPTFMgaG/hurdjIGjhu5NpIHF1eSBMb2dpc3RpYyDEkeG7gyDEkcOhbmggZ2nDoSDhuqNuaCBoxrDhu59uZyB0xrDGoW5nIMSR4buRaSBj4bunYSB04burbmcgeeG6v3UgdOG7kS4gTmjDrG4gY2h1bmcsIGPDoWMgY8O0bmcgdHLDrG5oIHRyb25nIG7GsOG7m2MgY2hvIHRo4bqleSBjw6FjIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jICh0deG7lWksIGdp4bubaSwgZMOibiB04buZYyksIGPhuqVwIGjhu41jIHbhuqVuLCBraW5oIG5naGnhu4dtIHbDoCDEkWnhu4F1IGtp4buHbiBsw6BtIHZp4buHYyDEkcOzbmcgdmFpIHRyw7IgdGhlbiBjaOG7kXQgxJHhu5FpIHbhu5tpIHRodSBuaOG6rXAgY+G7p2EgbGFvIMSR4buZbmcgVmnhu4d0IE5hbS4NCg0KDQojIyMgKioyLjUuMi4gTmdoacOqbiBj4bupdSBuxrDhu5tjIG5nb8OgaSoqDQoNCkPDoWMgbmdoacOqbiBj4bupdSBxdeG7kWMgdOG6vyBjxaluZyB4w6FjIMSR4buLbmggbmhp4buBdSB54bq/dSB04buRIHjDoyBo4buZaSDigJMga2luaCB04bq/IOG6o25oIGjGsOG7n25nIMSR4bq/biB0aHUgbmjhuq1wIGPDoSBuaMOibi4gVsOtIGThu6UsICoqQmFsw6Frb3bDoSB2w6AgY+G7mW5nIHPhu7EqKiAoMjAyMykgc+G7rSBk4bulbmcgZOG7ryBsaeG7h3UgRVUtU0lMQyBjaG8gMjcgbsaw4bubYyBFVSDEkeG7gyB4w6J5IGThu7FuZyDigJxDaOG7iSBz4buRIFRodSBuaOG6rXDigJ0gdsOgIHTDrG0gY8OhYyBuaMOibiB04buRIHF1eeG6v3QgxJHhu4tuaCB0aHUgbmjhuq1wIGPDoSBuaMOibi4gSOG7jSB0aOG6pXkgbmjhu69uZyBuaMOibiB04buRIGNo4bunIHnhur91IOG6o25oIGjGsOG7n25nIMSR4bq/biBjaOG7iSBz4buRIHRodSBuaOG6rXAgYmFvIGfhu5NtIGPhuqV1IHRyw7pjIGjhu5kgZ2lhIMSRw6xuaCAodsOtIGThu6Ugc+G7kSBsxrDhu6NuZyB0aMOgbmggdmnDqm4pLCBuZ8Ogbmggbmdo4buBIChuw7RuZyBuZ2hp4buHcCB2w6AgZOG7i2NoIHbhu6UgdGjGsOG7nW5nIGxpw6puIHF1YW4gxJHhur9uIHRodSBuaOG6rXAgdGjhuqVwIGjGoW4pIHbDoCBt4bupYyDEkcO0IHRo4buLIGjDs2EgKG5nxrDhu51pIHPhu5FuZyDhu58gbsO0bmcgdGjDtG4gdGjGsOG7nW5nIGPDsyB0aHUgbmjhuq1wIHRo4bqlcCBoxqFuKS4gS+G6v3QgcXXhuqMgbsOgeSBn4bujaSDDvSBjw6FjIGNow61uaCBzw6FjaCBoxrDhu5tuZyB04bubaSBo4buXIHRy4bujIG5ow7NtIGTDom4gc+G7kSBk4buFIGLhu4sgdOG7lW4gdGjGsMahbmcgKGjhu5kgxJHGoW4gdGjDom4sIG7DtG5nIGTDom4sIGtodSB24buxYyBuw7RuZyB0aMO0bikgxJHhu4MgdGh1IGjhurlwIGtob+G6o25nIGPDoWNoIHRodSBuaOG6rXAuDQoNCg0KVHJvbmcgYuG7kWkgY+G6o25oIG5naGnDqm4gY+G7qXUgdGh1IG5o4bqtcCDhu58gVmnhu4d0IE5hbSwgbeG7mXQgY8O0bmcgdHLDrG5oIMSRxINuZyB0csOqbiBBc2lhbiBKb3VybmFsIG9mIEVjb25vbWljcywgQnVzaW5lc3MgYW5kIEFjY291bnRpbmcgKFNvbiBldCBhbC4sIDIwMjQpICoqIkto4bqjbyBzw6F0IGjhu5kgbsO0bmcgdGjDtG4gdOG6oWkgdsO5bmcgVHJ1bmcgZHUgQuG6r2MgQuG7mSBWaeG7h3QgTmFtIioqLiBI4buNIHBow6F0IGhp4buHbiBnaeG7m2kgdMOtbmgsIHR14buVaSB0w6FjLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdsOgIHTDrWNoIGzFqXkgdGnhur90IGtp4buHbSDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24gdGh1IG5o4bqtcCBo4buZIGdpYSDEkcOsbmg7IHRyb25nIMSRw7MgY2jDqm5oIGzhu4djaCBnaeG7m2kgdMOtbmggcsO1IG7DqXQg4bufIG5ow7NtIHRodSBuaOG6rXAgdGjhuqVwLCB2w6AgdmFpIHRyw7IgY+G7p2EgeeG6v3UgdOG7kSBkw6JuIHThu5ljIGPDoG5nIG7hu5VpIGLhuq10IOG7nyBuaMOzbSB0aHUgbmjhuq1wIGNhby4gTmjGsCB24bqteSwgY+G6oyB0cm9uZyBuxrDhu5tjIGzhuqtuIHF14buRYyB04bq/LCBuZ2hpw6puIGPhu6l1IGNobyB0aOG6pXkgaOG7jWMgduG6pW4sIGtpbmggbmdoaeG7h20gbGFvIMSR4buZbmcsIMSR4bq3YyDEkWnhu4NtIGTDom4gc+G7kSB2w6AgxJFp4buBdSBraeG7h24ga2luaCB04bq/IOKAkyB4w6MgaOG7mWkgbMOgIGPDoWMgbmjDom4gdOG7kSBwaOG7lSBiaeG6v24gdMOhYyDEkeG7mW5nIMSR4bq/biB0aHUgbmjhuq1wIGPDoSBuaMOibi4gTmjhu69uZyBr4bq/dCBxdeG6oyB0aGFtIGto4bqjbyBuw6B5IGdpw7pwIMSR4buLbmggaMaw4bubbmcgdmnhu4djIGNo4buNbiBiaeG6v24gdsOgIGPDoWNoIGhp4buDdSBr4bq/dCBxdeG6oyBwaMOibiB0w61jaCBo4buTaSBxdXkgduG7gSBzYXUgdHJvbmcgYsOgaS4NCg0KKioqDQoNCiMgKipDaMawxqFuZyAzLiBE4buuIExJ4buGVSBWw4AgUEjGr8agTkcgUEjDgVAgTkdIScOKTiBD4buoVSoqDQoNCioqKg0KDQojIyAqKjMuMS4gVOG7lW5nIHF1YW4gduG7gSBi4buZIGThu68gbGnhu4d1KioNCg0KQuG7mSBk4buvIGxp4buHdSBBZHVsdCAoaGF5IENlbnN1cyBJbmNvbWUgMTk5NCkgZ2hpIGzhuqFpIHRow7RuZyB0aW4gbmjDom4ga2jhuql1IGjhu41jIHbDoCB2aeG7h2MgbMOgbSBj4bunYSA0ODg0MiBjw6EgbmjDom4g4bufIE3hu7ksIHbhu5tpIDE0IMSR4bq3YyB0csawbmcgYmFvIGfhu5NtIGPDoWMgYmnhur9uIHBow6JuIGxv4bqhaSAobmjGsCB3b3JrY2xhc3MsIGVkdWNhdGlvbiwgbWFyaXRhbC1zdGF0dXMsIG9jY3VwYXRpb27igKYpIHbDoCBjw6FjIGJp4bq/biBz4buRIChuaMawIGFnZSwgZWR1Y2F0aW9uLW51bSwgaG91cnMtcGVyLXdlZWvigKYpDQoNCk5oaeG7h20gduG7pSBwaMOibiBsb+G6oWkgY2jDrW5oIGzDoCBk4buxIMSRb8OhbiB4ZW0gdGh1IG5o4bqtcCBow6BuZyBuxINtIGPhu6dhIG3hu5l0IG5nxrDhu51pIGPDsyB2xrDhu6N0IHRyw6puICQ1MC4wMDAgaGF5IGtow7RuZw0Ka2jDtG5nIGThu7FhIHRyw6puIGThu68gbGnhu4d1IMSRaeG7gXUgdHJhIGTDom4gc+G7kS4gxJDDonkgY8OybiDEkcaw4bujYyBn4buNaSBsw6AgdOG6rXAgZOG7ryBsaeG7h3UgIlRodSBuaOG6rXAgxJFp4buBdSB0cmEgZMOibiBz4buRIi4NCg0KVGhlbyB0aMO0bmcgdGluIHThu6sgVUNJIE1hY2hpbmUgTGVhcm5pbmcgUmVwb3NpdG9yeSwgY8OhYyBi4bqjbiBnaGkgxJHGsOG7o2MgdHLDrWNoIHh14bqldCB04burIGThu68gbGnhu4d1IMSRaeG7gXUgdHJhIGTDom4gc+G7kSBuxINtIDE5OTQgYuG7n2kgQmFycnkgQmVja2VyICh24bubaSDEkWnhu4F1IGtp4buHbiBs4buNYzogdHXhu5VpID4xNiwgdGh1IG5o4bqtcCBjw6EgbmjDom4gPjEwMCwgdHLhu41uZyBz4buRIGTDom4gc+G7kSA+MSwgZ2nhu50gbMOgbSA+MCkuDQoNClRyb25nIHF1w6EgdHLDrG5oIHjhu60gbMO9LCBjw6FjIGdpw6EgdHLhu4sgdGhp4bq/dSAo4oCcP+KAnSkgxJHDoyDEkcaw4bujYyBsb+G6oWkgYuG7jywga+G6v3QgcXXhuqMgY8OybiBs4bqhaSAzMjU2MSBxdWFuIHPDoXQgduG7m2kgxJHhuqd5IMSR4bunIDE1IGPhu5l0IGThu68gbGnhu4d1IChiYW8gZ+G7k20gMTQgYmnhur9uIGdp4bqjaSB0aMOtY2ggdsOgIGJp4bq/biBt4bulYyB0acOqdSkuDQoNCi0gKirEkOG6t2MgxJFp4buDbSBj4bunYSB04bqtcCBk4buvIGxp4buHdToqKiDEkGEgYmnhur9uDQoNCg0KLSAqKkzEqW5oIHbhu7FjIGNo4bunIMSR4buBOioqIEtob2EgaOG7jWMgeMOjIGjhu5lpDQoNCg0KLSAqKkxv4bqhaSB0w61uaCBuxINuZzoqKiBQaMOibiBsb+G6oWksIFPhu5Egbmd1ecOqbg0KDQoNCi0gKipDw6FjIHRyxrDhu51uZyBo4bujcDoqKiA0ODg0Mg0KDQotICoqQ8OhYyBiaeG6v246KiogR+G7k20gMTQgYmnhur9uOiANCg0KxJDhu41jIGZpbGU6IMSQ4bqndSB0acOqbiB0YSDEkeG7jWMgZOG7ryBsaeG7h3UgYWR1bHQuY3N2IHbDoG8gUiwgeMOhYyDEkeG7i25oIGPhu5l0IHbDoCBsb+G6oWkgYuG7jyBjw6FjIGdpw6EgdHLhu4sgdGhp4bq/dSDEkcaw4bujYyBtw6MgaG/DoSBi4bqxbmcga8O9IHThu7EgIj8iLg0KDQpgYGB7cn0NCmFkdWx0IDwtIHJlYWQuY3N2KCJDOi9Vc2Vycy9IUC9Eb3dubG9hZHMvYWR1bHQuY3N2IiwgaGVhZGVyID0gVFJVRSwgc3RyaW5nc0FzRmFjdG9ycyA9IEZBTFNFKQ0KY29sbmFtZXMoYWR1bHQpIDwtIGMoImFnZSIsIndvcmtjbGFzcyIsImZubHdndCIsImVkdWNhdGlvbiIsImVkdWNhdGlvbl9udW0iLA0KICAgICAgICAgICAgICAgICAgICAgIm1hcml0YWxfc3RhdHVzIiwib2NjdXBhdGlvbiIsInJlbGF0aW9uc2hpcCIsInJhY2UiLCJHRU5ERVIiLA0KICAgICAgICAgICAgICAgICAgICAgImNhcGl0YWxfZ2FpbiIsImNhcGl0YWxfbG9zcyIsImhvdXJzX3Blcl93ZWVrIiwNCiAgICAgICAgICAgICAgICAgICAgICJuYXRpdmVfY291bnRyeSIsImluY29tZSIpDQpgYGANCg0KQ+G6pXUgdHLDumMgZOG7ryBsaeG7h3U6IFPhu60gZOG7pW5nIHN0cigpIMSR4buDIHhlbSB0aMO0bmcgdGluIGPhuqV1IHRyw7pjLiBUYSB0aOG6pXkgdOG7lW5nIHPhu5EgaMOgbmcgdsOgIGtp4buDdSBk4buvIGxp4buHdSBj4bunYSBt4buXaSBj4buZdC4NCg0KYGBge3J9DQpzdHIoYWR1bHQpDQoNCmBgYA0KDQpUaMSDbSBkw7Igbmhhbmg6IEhp4buDbiB0aOG7iyBt4buZdCB2w6BpIGTDsm5nIMSR4bqndS9jdeG7kWkgxJHhu4MgaGnhu4N1IHPGoSBi4buZIGThu68gbGnhu4d1Lg0KDQpgYGB7cn0NCmhlYWQoYWR1bHQpDQp0YWlsKGFkdWx0KQ0KDQpgYGANCg0KR2nDoSB0cuG7iyB0aGnhur91OiBLaeG7g20gdHJhIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggKGNhdGVnb3JpY2FsKSB4ZW0gY8OzIE5BIGtow7RuZy4gVGEgcGjDoXQgaGnhu4duIGPDsyBOQSDhu58gY8OhYyBj4buZdCB3b3JrY2xhc3MsIG9jY3VwYXRpb24sIG5hdGl2ZV9jb3VudHJ5IChnacOhIHRy4buLICI/IikuIFbDrSBk4bulOg0KDQpgYGB7cn0NCnNhcHBseShhZHVsdCAlPiUgc2VsZWN0KHdvcmtjbGFzcywgb2NjdXBhdGlvbiwgbmF0aXZlX2NvdW50cnkpLCANCiAgICAgICBmdW5jdGlvbih4KSBzdW0oaXMubmEoeCkpKQ0KYGBgDQoNClbDrCB04bu3IGzhu4cgZ2nDoSB0cuG7iyB0aGnhur91IHLhuqV0IG5o4buPIHNvIHbhu5tpIGvDrWNoIHRoxrDhu5tjIG3huqt1ICh2w60gZOG7pSBjaOG7iSBraG/huqNuZyA2JSBjaG8gd29ya2NsYXNzKSwgdGEgbOG7sWEgY2jhu41uIGxv4bqhaSBi4buPIG5o4buvbmcgZMOybmcgY8OzIE5BIMSR4buDIMSR4bqjbSBi4bqjbyB0w61uaCBjaMOtbmggeMOhYyBj4bunYSBwaMOibiB0w61jaCB2w6AgdHLDoW5oIOG6o25oIGjGsOG7n25nIGtow7RuZyBtb25nIG114buRbi4gU2F1IMSRw7MsIHRhIGNodXnhu4NuIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmggc2FuZyBmYWN0b3IgxJHhu4MgdGnhu4duIHjhu60gbMO9Lg0KDQpgYGB7cn0NCiMgTG/huqFpIGLhu48ga2hv4bqjbmcgdHLhuq9uZyDhu58gxJHhuqd1L2N14buRaSBjw6FjIGJp4bq/biBk4bqhbmcgY2h14buXaQ0KYWR1bHQgPC0gYWR1bHQgJT4lIG11dGF0ZShhY3Jvc3Mod2hlcmUoaXMuY2hhcmFjdGVyKSwgdHJpbXdzKSkNCg0KIyBUaGF5IHRo4bq/ICI/IiBi4bqxbmcgTkENCmFkdWx0W2FkdWx0ID09ICI/Il0gPC0gTkENCg0KIyBMb+G6oWkgYuG7jyBjw6FjIGTDsm5nIGPDsyBOQQ0KYWR1bHQgPC0gbmEub21pdChhZHVsdCkNCmFkdWx0IDwtIG5hLm9taXQoYWR1bHQpDQphZHVsdCA8LSBhZHVsdCAlPiUNCiAgbXV0YXRlX2F0KHZhcnMod29ya2NsYXNzLCBlZHVjYXRpb24sIG1hcml0YWxfc3RhdHVzLCBvY2N1cGF0aW9uLCANCiAgICAgICAgICAgICAgICAgcmVsYXRpb25zaGlwLCByYWNlLCBHRU5ERVIsIG5hdGl2ZV9jb3VudHJ5LCBpbmNvbWUpLA0KICAgICAgICAgICAgZmFjdG9yKQ0KDQpgYGANCg0KQWR1bHQuY3N2IGzDoCBt4buZdCBi4buZIGThu68gbGnhu4d1IGJhbyBn4buTbSAzMjU2MSBxdWFuIHPDoXQgdsOgIDE0IGJp4bq/biwgY+G7pSB0aOG7gyBsw6AgY8OhYyBiaeG6v246DQoNCg0KfCBOaMOzbSBiaeG6v24gICAgICAgICAgICAgIHwgQmnhur9uIGPhu6UgdGjhu4MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgTeG7pWMgdGnDqnUgcGjDom4gdMOtY2ggY2jDrW5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwNCnwgQmnhur9uIMSR4buLbmggdMOtbmggICAgICAgICB8IGB3b3JrY2xhc3NgLCBgZWR1Y2F0aW9uYCwgYG1hcml0YWwtc3RhdHVzYCwgYG9jY3VwYXRpb25gLCBgcmVsYXRpb25zaGlwYCwgYHJhY2VgLCBgR0VOREVSYCwgYG5hdGl2ZS1jb3VudHJ5YCB8IFRo4buRbmcga8OqIHThuqduIHPhu5EsIGJp4buDdSDEkeG7kyBj4buZdCwgcGjDom4gcGjhu5FpIHRoZW8gbmjDs20gICAgfA0KfCBCaeG6v24gxJHhu4tuaCBsxrDhu6NuZyAgICAgICAgfCBgYWdlYCwgYGZubHdndGAsIGBlZHVjYXRpb24tbnVtYCwgYGNhcGl0YWwtZ2FpbmAsIGBjYXBpdGFsLWxvc3NgLCBgaG91cnMtcGVyLXdlZWtgICAgICAgICAgICAgICAgICAgICAgICAgfCBNw7QgdOG6oyB0aOG7kW5nIGvDqiwgcGjDom4gcGjhu5FpLCBraeG7g20gxJHhu4tuaCwga2hv4bqjbmcgdGluIGPhuq15IHwNCnwgQmnhur9uIG3hu6VjIHRpw6p1ICh0YXJnZXQpIHwgYGluY29tZWAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgROG7sSDEkW/DoW4gcGjDom4gbG/huqFpOiA8PTUwSyBob+G6t2MgPjUwSyAgICAgICAgICAgICAgICAgICB8DQoNCg0KIyMjICoqMy4xLjEuIMOdIG5naMSpYSBjw6FjIGJp4bq/bioqDQoNCkLhuqNuZyBiaeG6v24gdHJvbmcgZOG7ryBsaeG7h3UgQWR1bHQgYmFvIGfhu5NtIGPDoWMgbmjDs20gY2jDrW5oIG5oxrAgc2F1Og0KDQoNCioqQmnhur9uIMSR4buLbmggdMOtbmg6KioNCg0KLSB3b3JrY2xhc3Mg4oCTIFRow6BuaCBwaOG6p24gdmnhu4djIGzDoG0gKGtodSB24buxYyBsw6BtIHZp4buHYywgdsOtIGThu6U6IFByaXZhdGUgKHTGsCBuaMOibiksIFNlbGYtZW1wLW5vdC1pbmMgKHThu7EgbMOgbSBraMO0bmcgY8OzIGPDtG5nIHR5KSwgRmVkZXJhbC1nb3YgKGNow61uaCBwaOG7pyBsacOqbiBiYW5nKSwg4oCmKS4NCg0KLSBlZHVjYXRpb24g4oCTIFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiAoYuG6sW5nIGPhuqVwLCB2w60gZOG7pTogQmFjaGVsb3JzLCBIUy1ncmFkICh04buRdCBuZ2hp4buHcCBUSFBUKSwgTWFzdGVycywgRG9jdG9yYXRlLCBBc3NvYy12b2MsIOKApikuDQoNCi0gbWFyaXRhbF9zdGF0dXMg4oCTIFTDrG5oIHRy4bqhbmcgaMO0biBuaMOibiAodsOtIGThu6U6IE1hcnJpZWQtY2l2LXNwb3VzZSwgRGl2b3JjZWQsIE5ldmVyLW1hcnJpZWQsIFdpZG93ZWQsIOKApikuDQoNCi0gb2NjdXBhdGlvbiDigJMgTmfDoG5oIG5naOG7gSAvIG5naOG7gSBuZ2hp4buHcCAodsOtIGThu6U6IFRlY2gtc3VwcG9ydCwgU2FsZXMsIEV4ZWMtbWFuYWdlcmlhbCwgUHJvZi1zcGVjaWFsdHksIEhhbmRsZXJzLWNsZWFuZXJzLCDigKYpLg0KDQotIHJlbGF0aW9uc2hpcCDigJMgUXVhbiBo4buHIGdpYSDEkcOsbmggKHbDrSBk4bulOiBIdXNiYW5kLCBXaWZlLCBOb3QtaW4tZmFtaWx5LCBPd24tY2hpbGQsIFVubWFycmllZCwg4oCmKS4NCg0KLSByYWNlIOKAkyBDaOG7p25nIHThu5ljICh2w60gZOG7pTogV2hpdGUsIEJsYWNrLCBBc2lhbi1QYWMtSXNsYW5kZXIsIEFtZXItSW5kaWFuLUVza2ltbywgT3RoZXIpLg0KDQotIEdFTkRFUiDigJMgR2nhu5tpIHTDrW5oIChNYWxlID0gbmFtLCBGZW1hbGUgPSBu4buvKS4NCg0KLSBuYXRpdmVfY291bnRyeSDigJMgUXXhu5FjIGdpYSBuxqFpIHNpbmggKHbDrSBk4bulOiBVbml0ZWQtU3RhdGVzLCBNZXhpY28sIEluZGlhLCBWaWV0bmFtLCDigKYpLg0KDQoqKkJp4bq/biDEkeG7i25oIGzGsOG7o25nOioqDQoNCi0gYWdlIOKAkyBUdeG7lWkgKHPhu5Egbmd1ecOqbiBkxrDGoW5nKS4gVsOtIGThu6UgdHXhu5VpIHRyb25nIHThuq1wIGThu68gbGnhu4d1IG7DoHkgZGFvIMSR4buZbmcgdOG7qyAxNyDEkeG6v24gOTAuDQoNCi0gZm5sd2d0IOKAkyBUcuG7jW5nIHPhu5EgZMOibiBz4buRIChGaW5hbCBXZWlnaHQsIHPhu5EgbmfGsOG7nWkgxJHhuqFpIGRp4buHbiBjaG8gbeG7mXQgY8OhIG5ow6JuIHRyb25nIG3huqt1KS4gR2nDoSB0cuG7iyBs4bubbiB0aOG7gyBoaeG7h24gY8OhIG5ow6JuIMSRw7MgxJHhuqFpIGRp4buHbiBjaG8gbmhp4buBdSBuZ8aw4budaSB0cm9uZyBkw6JuIHPhu5EuIEJp4bq/biBuw6B5IGNo4bunIHnhur91IGTDuW5nIHRyb25nIHBow6JuIHTDrWNoIGto4bqjbyBzw6F0Lg0KDQotIGVkdWNhdGlvbl9udW0g4oCTIFPhu5EgbsSDbSBo4buNYyB0xrDGoW5nIOG7qW5nIHbhu5tpIGVkdWNhdGlvbi4gVsOtIGThu6UgSFMtZ3JhZCDiiYggOSBuxINtLCBCYWNoZWxvcnMg4omIIDEzIG7Eg20sIE1hc3RlcnMg4omIIDE0IG7Eg20sIERvY3RvcmF0ZSDiiYggMTYgbsSDbS4NCg0KLSBjYXBpdGFsX2dhaW4g4oCTIFRodSBuaOG6rXAgduG7kW4gKHThu6sgxJHhuqd1IHTGsCwgYsOhbiB0w6BpIHPhuqNuIHRyb25nIG7Eg20pLiBQaOG6p24gbOG7m24gY8OhIG5ow6JuIGPDsyBnacOhIHRy4buLIG7DoHkgYuG6sW5nIDAgKGtow7RuZyBjw7MgbMOjaSB24buRbikuIFBow6JuIHBo4buRaSBs4buHY2ggcGjhuqNpLg0KDQotIGNhcGl0YWxfbG9zcyDigJMgTOG7lyB24buRbiAodOG7lW4gdGjhuqV0IHbhu5FuIHThu6sgxJHhuqd1IHTGsCkuIFTGsMahbmcgdOG7sSBjYXBpdGFsX2dhaW4sIGjhuqd1IGjhur90IGdpw6EgdHLhu4sgYuG6sW5nIDAuDQoNCi0gaG91cnNfcGVyX3dlZWsg4oCTIFPhu5EgZ2nhu50gbMOgbSB2aeG7h2MgbeG7l2kgdHXhuqduLiBWw60gZOG7pSBwaOG6p24gbOG7m24gbMOgbSA0MCBnaeG7nS90deG6p24gKHRvw6BuIHRo4budaSBnaWFuIHRpw6p1IGNodeG6qW4pLCBt4buZdCBz4buRIGzDoG0gw610ICh2w60gZOG7pSAxMOKAkzIwIGdp4budL3R14bqnbikgdsOgIG3hu5l0IHPhu5EgbMOgbSBuaGnhu4F1ICh04bubaSA2MOKAkzgwIGdp4budIGhv4bq3YyBoxqFuKS4NCg0KKipCaeG6v24gbeG7pWMgdGnDqnUgKFRhcmdldCk6KioNCg0KLSBpbmNvbWUg4oCTIE3hu6ljIHRodSBuaOG6rXAgaMOgbmcgbsSDbSAocGhhbiBsb+G6oWkgbmjhu4sgcGjDom4pLiBCYW8gZ+G7k20gaGFpIG5ow7NtOiDigJw8PTUwS+KAnSAodGh1IG5o4bqtcCDiiaQ1MC4wMDAgVVNEKSB2w6Ag4oCcPjUwS+KAnSAodGh1IG5o4bqtcCB0csOqbiA1MC4wMDAgVVNEKS4NCg0KIyMjICoqMy4xLjIuIFBo4bqhbSB2aSBxdWFuIHPDoXQqKg0KDQpE4buvIGxp4buHdSBs4bqleSBt4bqrdSB04burIGTDom4gc+G7kSBIb2EgS+G7syBuxINtIDE5OTQuIFBo4bqhbSB2aSBxdWFuIHPDoXQgY2jhu4kgZ+G7k20gbmjhu69uZyBuZ8aw4budaSBsYW8gxJHhu5luZyAodHLDqm4gMTYgdHXhu5VpKSBjw7MgaG/huqF0IMSR4buZbmcga2luaCB04bq/IChuZ2jEqWEgbMOgIGPDsyBnaeG7nSBsw6BtID4wKSB2w6AgY8OzIHRodSBuaOG6rXAgY8OhIG5ow6JuIGjhu6NwIGzhu4cgKD4xMDAgVVNEKS4NCg0KDQpEbyDEkcOzLCBk4buvIGxp4buHdSB04bqtcCB0cnVuZyB2w6BvIG5ow7NtIGTDom4gc+G7kSB0csaw4bufbmcgdGjDoG5oIMSRYW5nIMSRaSBsw6BtLCBwaOG6o24gw6FuaCBjxqEgY+G6pXUgbmjDom4ga2jhuql1IGjhu41jIHbDoCBuZ2jhu4EgbmdoaeG7h3AgY+G7p2EgbOG7sWMgbMaw4bujbmcgbGFvIMSR4buZbmcgSG9hIEvhu7MgdGjhu51pIMSRaeG7g20gxJHDsy4gU2F1IGtoaSBsb+G6oWkgYuG7jyBjw6FjIGLhuqNuIGdoaSB0aGnhur91IChjb2RlZCBsw6Ag4oCcP+KAnSksIHThuq1wIGThu68gbGnhu4d1IHBow6JuIHTDrWNoIGJhbyBn4buTbSAzMjU2MSBjw6EgbmjDom4gduG7m2kgdGjDtG5nIHRpbiB24buBIGdp4bubaSB0w61uaCwgdHLDrG5oIMSR4buZLCB0deG7lWksIGdp4budIGzDoG0gdmnhu4djLCB2LnYuLCBrw6htIHRoZW8gbmjDo24gdGh1IG5o4bqtcC4NCg0KIyMgKiozLjIuIFjDoWMgxJHhu4tuaCBiaeG6v24gcGjhu6UgdGh14buZYyB2w6AgYmnhur9uIMSR4buZYyBs4bqtcCoqDQoNClRyb25nIGLDoGkgdG/DoW4gbsOgeSwgYmnhur9uIHBo4bulIHRodeG7mWMgbMOgIGluY29tZSAodGh1IG5o4bqtcCksIG3hu6VjIHRpw6p1IHBow6JuIGxv4bqhaSB4ZW0gdGh1IG5o4bqtcCBjw6EgbmjDom4gY8OzIHRyw6puIDUwSyBVU0QgbeG7l2kgbsSDbSBoYXkga2jDtG5nLg0KDQoNCkPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCAoY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nKSDEkcaw4bujYyBxdWFuIHTDom0gYmFvIGfhu5NtOiBHaeG7m2kgdMOtbmggKEdFTkRFUiksIFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiAoZWR1Y2F0aW9uKSwgVHXhu5VpIChhZ2UpIHbDoCBT4buRIGdp4budIGzDoG0gdmnhu4djIG3hu5dpIHR14bqnbiAoaG91cnNfcGVyX3dlZWspLiANCk5nb8OgaSByYSwgdOG6rXAgZOG7ryBsaeG7h3UgY8OybiBjw7MgY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCBraMOhYyBuaMawIHdvcmtjbGFzcywgb2NjdXBhdGlvbiwgcmFjZSzigKYgbmjGsG5nIHRyb25nIHBo4bqnbiBwaMOibiB0w61jaCB0aOG7kW5nIGvDqiBtw7QgdOG6oyBuw6B5IHRhIHThuq1wIHRydW5nIHbDoG8gYuG7kW4gYmnhur9uIMSRw6MgbsOqdSwgdsOsIGNow7puZyBsw6Agbmjhu69uZyB54bq/dSB04buRIG5ow6JuIGto4bqpdSBo4buNYyBxdWFuIHRy4buNbmcgdGjGsOG7nW5nIGxpw6puIHF1YW4gxJHhur9uIG3hu6ljIHRodSBuaOG6rXAuDQoNCiMjICoqMy4zLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyoqDQoNCiMjIyAqKjMuMy4xLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBiaeG6v24gcGjhu6UgdGh14buZYy0gQmnhur9uIHRodSBuaOG6rXAqKg0KDQrEkOG6p3UgdGnDqm4sIHRhIHhlbSB4w6l0IHBow6JuIHBo4buRaSBj4bunYSBiaeG6v24gaW5jb21lLg0KDQpgYGB7cn0NCiMgVGjhu5FuZyBrw6ogdOG6p24gc3XhuqV0IGNobyBiaeG6v24gaW5jb21lDQp0YWJsZShhZHVsdCRpbmNvbWUpDQpwcm9wLnRhYmxlKHRhYmxlKGFkdWx0JGluY29tZSkpKjEwMA0KIyBDaHXhuqluIGLhu4sgZOG7ryBsaeG7h3UgdOG6p24gc3XhuqV0IHbDoCB04bu3IGzhu4cgJQ0KZGZfaW5jb21lIDwtIGFzLmRhdGEuZnJhbWUodGFibGUoYWR1bHQkaW5jb21lKSkNCmNvbG5hbWVzKGRmX2luY29tZSkgPC0gYygiaW5jb21lIiwgImNvdW50IikNCmRmX2luY29tZSRwZXJjZW50IDwtIGRmX2luY29tZSRjb3VudCAvIHN1bShkZl9pbmNvbWUkY291bnQpICogMTAwDQoNCiMgKGEpIMSQ4buTIHRo4buLIGPhu5l0IHRo4buDIGhp4buHbiBz4buRIGPDoSBuaMOibg0KcDEgPC0gZ2dwbG90KGRmX2luY29tZSwgYWVzKHggPSBpbmNvbWUsIHkgPSBjb3VudCwgZmlsbCA9IGluY29tZSkpICsNCiAgZ2VvbV9jb2woc2hvdy5sZWdlbmQgPSBGQUxTRSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY291bnQpLCB2anVzdCA9IC0wLjUsIHNpemUgPSA0KSArDQogIGxhYnMoeCA9ICJUaHUgbmjhuq1wIGjDoG5nIG7Eg20iLA0KICAgICAgIHkgPSAiU+G7kSBjw6EgbmjDom4iLA0KICAgICAgIHRpdGxlID0gIihhKSBT4buRIGPDoSBuaMOibiB0aGVvIG3hu6ljIHRodSBuaOG6rXAiKSArDQogIHRoZW1lX21pbmltYWwoKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpDQoNCiMgKGIpIFBpZSBjaGFydCB0aOG7gyBoaeG7h24gdOG7tyBs4buHIHBo4bqnbiB0csSDbQ0KcDIgPC0gZ2dwbG90KGRmX2luY29tZSwgYWVzKHggPSAiIiwgeSA9IHBlcmNlbnQsIGZpbGwgPSBpbmNvbWUpKSArDQogIGdlb21fY29sKHdpZHRoID0gMSwgY29sb3IgPSAid2hpdGUiLCBzaG93LmxlZ2VuZCA9IEZBTFNFKSArDQogIGNvb3JkX3BvbGFyKHRoZXRhID0gInkiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBwYXN0ZTAocm91bmQocGVyY2VudCwgMSksICIlIikpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9zdGFjayh2anVzdCA9IDAuNSksIHNpemUgPSA0KSArDQogIGxhYnModGl0bGUgPSAiKGIpIFThu7cgbOG7hyBwaOG6p24gdHLEg20gdGh1IG5o4bqtcCIpICsNCiAgdGhlbWVfdm9pZCgpDQoNCiMgS+G6v3QgaOG7o3AgaGFpIGJp4buDdSDEkeG7kyBiw6puIG5oYXUNCmdyaWQuYXJyYW5nZSgNCiAgcDEsIHAyLA0KICBuY29sID0gMiwNCiAgdG9wID0gdGV4dEdyb2IoDQogICAgIkjDrG5oIDMuMS4gQmnhu4N1IMSR4buTIGPhu5l0IHbDoCBiaeG7g3UgxJHhu5MgdHLDsm4gdGjhu4MgaGnhu4duIHThuqduIHPhu5EgdsOgIHThuqduIHN14bqldCBj4bunYSBiaeG6v24gdGh1IG5o4bqtcCIsDQogICAgZ3AgPSBncGFyKGZvbnRzaXplID0gMTQsIGZvbnRmYWNlID0gImJvbGQiKQ0KICApDQopDQpgYGANCg0KS+G6v3QgcXXhuqMgdMOtbmggdG/DoW4gY2hvIHRo4bqleSBjw7MgMjI2NTMgY8OhIG5ow6JuIGPDsyB0aHUgbmjhuq1wIOKJpDUwSyAoY2hp4bq/bSBraG/huqNuZyA3NS4xMSUpLCB2w6AgNzUwOCAgY8OhIG5ow6JuIGPDsyB0aHUgbmjhuq1wID41MEsgKGNoaeG6v20ga2hv4bqjbmcgMjQuODklKS4gDQoNClBo4bqnbiBs4bubbiBjw6EgbmjDom4gY8OzIHRodSBuaOG6rXAgbsSDbSBkxrDhu5tpIGhv4bq3YyBi4bqxbmcgNTBLIFVTRCwgY2jhu4kga2hv4bqjbmcgbeG7mXQgcGjhuqduIHTGsCBjw7MgdGh1IG5o4bqtcCBjYW8gaMahbi4gxJBp4buBdSBuw6B5IGjhu6NwIGzDvSB0cm9uZyBi4buRaSBj4bqjbmgga2luaCB04bq/IG7Eg20gMTk5NCB04bqhaSBN4bu5LCBraGkgY2jhu4kgbeG7mXQgdOG7tyBs4buHIG5o4bqldCDEkeG7i25oIGTDom4gc+G7kSBjw7MgdGh1IG5o4bqtcCBjYW8gKGfhu5NtIGPDoWMgbmfDoG5oIG5naOG7gSB0csOsbmggxJHhu5kgY2FvKS4gS+G6v3QgcXXhuqMgbsOgeSBjxaluZyBjaG8gdGjhuqV5IGPhuqduIHF1YW4gc8OhdCB0aMOqbSB4ZW0gY8OhYyBiaeG6v24gbmjDom4ga2jhuql1IGjhu41jIChnaeG7m2kgdMOtbmgsIGjhu41jIHbhuqVuLCB2LnYuKSBjw7MgcXVhbiBo4buHIG5oxrAgdGjhur8gbsOgbyB24bubaSBz4buxIGtow6FjIGJp4buHdCB0aHUgbmjhuq1wIG7DoHkuDQoNCiMjIyAqKjMuMy4yLiBUaOG7kW5nIGvDqiBtw7QgdOG6oyBiaeG6v24gxJHhu5ljIGzhuq1wKioNCg0KIyMjIyAqKjMuMy4yLjEuIEJp4bq/biBHRU5ERVIqKg0KDQpQaMOibiBwaOG7kWkgdGhlbyBnaeG7m2kgdMOtbmggY2hvIHRo4bqleSBiYW8gbmhpw6p1ICUgbmFtIHbDoCBu4buvDQoNCmBgYHtyfQ0KIyBU4bqnbiBzdeG6pXQgdsOgIHBo4bqnbiB0csSDbSB0aGVvIGdp4bubaSB0w61uaA0KdGFibGUoYWR1bHQkR0VOREVSKQ0KcHJvcC50YWJsZSh0YWJsZShhZHVsdCRHRU5ERVIpKSoxMDANCiMgVOG6p24gc3XhuqV0IHbDoCB04bu3IGzhu4cgcGjhuqduIHRyxINtDQpkZl9nZW4gPC0gYXMuZGF0YS5mcmFtZSh0YWJsZShhZHVsdCRHRU5ERVIpKQ0KY29sbmFtZXMoZGZfZ2VuKSA8LSBjKCJHRU5ERVIiLCJjb3VudCIpDQpkZl9nZW4kcGVyY2VudCA8LSBkZl9nZW4kY291bnQgLyBzdW0oZGZfZ2VuJGNvdW50KSAqIDEwMA0KDQojIEJhciBjaGFydA0KcDEgPC0gZ2dwbG90KGRmX2dlbiwgYWVzKHggPSBHRU5ERVIsIHkgPSBjb3VudCwgZmlsbCA9IEdFTkRFUikpICsNCiAgZ2VvbV9jb2woc2hvdy5sZWdlbmQgPSBGQUxTRSkgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gY291bnQpLCB2anVzdCA9IC0wLjUpICsNCiAgbGFicyh4ID0gIkdp4bubaSB0w61uaCIsIHkgPSAiU+G7kSBjw6EgbmjDom4iLCB0aXRsZSA9ICIoYSkgU+G7kSBjw6EgbmjDom4gdGhlbyBnaeG7m2kgdMOtbmgiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIFBpZSBjaGFydA0KcDIgPC0gZ2dwbG90KGRmX2dlbiwgYWVzKHggPSAiIiwgeSA9IHBlcmNlbnQsIGZpbGwgPSBHRU5ERVIpKSArDQogIGdlb21fY29sKHdpZHRoID0gMSwgc2hvdy5sZWdlbmQgPSBGQUxTRSkgKw0KICBjb29yZF9wb2xhcigieSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBhc3RlMChyb3VuZChwZXJjZW50LDEpLCAiJSIpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fc3RhY2sodmp1c3QgPSAwLjUpKSArDQogIGxhYnModGl0bGUgPSAiKGIpIFThu7cgbOG7hyBwaOG6p24gdHLEg20gdGhlbyBnaeG7m2kgdMOtbmgiKSArDQogIHRoZW1lX3ZvaWQoKQ0KDQojIEhp4buDbiB0aOG7iyBjw7luZyBuaGF1IHbhu5tpIHRpw6p1IMSR4buBIGNodW5nDQpncmlkLmFycmFuZ2UoDQogIHAxLCBwMiwNCiAgbmNvbCA9IDIsDQogIHRvcCA9IHRleHRHcm9iKA0KICAgICJIw6xuaCAzLjIuIEJp4buDdSDEkeG7kyBj4buZdCB2w6AgYmnhu4N1IMSR4buTIHRyw7JuIHRo4buDIGhp4buHbiB04bqnbiBz4buRIHbDoCB04bqnbiBzdeG6pXQgY+G7p2EgYmnhur9uIGdp4bubaSB0w61uaCIsDQogICAgZ3AgPSBncGFyKGZvbnRzaXplID0gMTQsIGZvbnRmYWNlID0gImJvbGQiKQ0KICApDQopDQpgYGANCg0KS+G6v3QgcXXhuqMgdMOtbmggxJHGsOG7o2MgY8OzIDIwMzc5ICBuYW0gdsOgIDk3ODIgIG7hu68sIHThu6ljIGtob+G6o25nIDY3LjYlIG5hbSB2w6AgMzIuNCUgbuG7ryB0cm9uZyBk4buvIGxp4buHdS4NCg0KDQpU4bu3IGzhu4cgbmFtIGfhuqVwIDIgbOG6p24gdOG7iSBs4buHIG7hu68uIMSQaeG7gXUgbsOgeSBjw7MgdGjhu4MgZG8gbeG6q3UgY2jhu4kgYmFvIGfhu5NtIG5nxrDhu51pIMSRaSBsw6BtIGPDsyB0aHUgbmjhuq1wLCB0cm9uZyBraGkgdOG7iSBs4buHIHRoYW0gZ2lhIGxhbyDEkeG7mW5nIGPhu6dhIG5hbSB0aMaw4budbmcgY2FvIGjGoW4gbuG7ry4gVMawxqFuZyBxdWFuIHRo4buxYyB04bq/IGNobyB0aOG6pXkg4bufIG5oaeG7gXUgcXXhu5FjIGdpYSwgbmFtIGdp4bubaSBjw7MgeHUgaMaw4bubbmcgY2hp4bq/bSBz4buRIGzGsOG7o25nIGzhu5tuIGjGoW4gdHJvbmcgbOG7sWMgbMaw4bujbmcgbGFvIMSR4buZbmcgKG3hurdjIGTDuSBraG/huqNuZyBjw6FjaCBnaeG7m2kgdMOtbmggbmfDoHkgY8OgbmcgdGh1IGjhurlwKSwgdsOsIHbhuq15IGvhur90IHF14bqjIHRyw6puIGtow7RuZyBi4bqldCBuZ+G7nS4gDQoNCk3DtCBow6xuaCBjxaluZyBj4bqnbiBsxrB1IMO9IHnhur91IHThu5EgZ2nhu5tpIHTDrW5oIGtoaSBk4buxIGLDoW8gdGh1IG5o4bqtcCAodsOtIGThu6U6IGPDsyB0aOG7gyBuYW0gZ2nhu5tpIG7Ds2kgY2h1bmcgY8OzIHRodSBuaOG6rXAgdHJ1bmcgYsOsbmggY2FvIGjGoW4gbuG7rywgbmjGsCDEkcOjIMSRxrDhu6NjIHF1YW4gc8OhdCB0cm9uZyBuaGnhu4F1IHRo4buRbmcga8OqIGxhbyDEkeG7mW5nXw0KDQojIyMjICoqMy4zLjIuMi4gQmnhur9uIEVEVUNBVElPTioqDQoNCkJp4bq/biBlZHVjYXRpb24gKGLhurFuZyBj4bqlcCkgY8OzIG5oaeG7gXUgbeG7qWMgxJHhu5kga2jDoWMgbmhhdS4gVGEgdMOtbmggdOG6p24gc3XhuqV0IGNobyBt4buXaSBt4bupYyDEkeG7mToNCg0KYGBge3J9DQojIFRo4buRbmcga8OqIHThuqduIHN14bqldCBjaG8gYmnhur9uIGVkdWNhdGlvbg0KdGFibGUoYWR1bHQkZWR1Y2F0aW9uKQ0KcHJvcC50YWJsZSh0YWJsZShhZHVsdCRlZHVjYXRpb24pKSoxMDANCiMgVuG6vSBiaeG7g3UgxJHhu5MgduG7m2kgdGnDqnUgxJHhu4EgxJHhuqd5IMSR4bunDQpnZ3Bsb3QoYWR1bHQsIGFlcyh4ID0gZmN0X2luZnJlcShlZHVjYXRpb24pKSkgKw0KICBnZW9tX2JhcihmaWxsID0gIiM0QzcyQjAiKSArDQogIGdlb21fdGV4dChzdGF0ID0gImNvdW50IiwNCiAgICAgICAgICAgIGFlcyhsYWJlbCA9IC4uY291bnQuLiksDQogICAgICAgICAgICB2anVzdCA9IC0wLjMsIHNpemUgPSAzKSArDQogIGxhYnMoDQogICAgeCA9ICJUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4iLA0KICAgIHkgPSAiU+G7kSBjw6EgbmjDom4iLA0KICAgIHRpdGxlID0gIkjDrG5oIDMuMy4gQmnhu4N1IMSR4buTIGPhu5l0IHBow6JuIHBo4buRaSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4iDQogICkgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEpKQ0KDQpgYGANCg0KDQpL4bq/dCBxdeG6oyBjaG8gdGjhuqV5IG5ow7NtIMSRw7RuZyBuaOG6pXQgbMOgIEhTLWdyYWQgKHThu5F0IG5naGnhu4dwIFRIUFQpIHbhu5tpIDk4NDAgbmfGsOG7nWkgKH4zMi42MiUpLCB0aeG6v3AgdGhlbyBsw6AgU29tZS1jb2xsZWdlICg2Njc4IG5nxrDhu51pLCB+MjIuMTQlKSB2w6AgQmFjaGVsb3JzICg1MDQzIG5nxrDhu51pLCB+MTYuNzIlKS4gQ8OhYyB0csOsbmggxJHhu5kgY2FvIG5oxrAgTWFzdGVycyAoMTYyNyBuZ8aw4budaSkgaGF5IERvY3RvcmF0ZSAoMzc1IG5nxrDhu51pKSBjaGnhur9tIHThu4kgbOG7hyBuaOG7jyBoxqFuLg0KDQoNCsSQYSBz4buRIGPDoSBuaMOibiB0cm9uZyBt4bqrdSBjw7MgdHLDrG5oIMSR4buZIHThu6sgVEhQVCDEkeG6v24gxJHhuqFpIGjhu41jLiDEkGnhu4F1IG7DoHkgaOG7o3AgduG7m2kgdGjhu7FjIHThur86IG3hu6ljIHRodSBuaOG6rXAgY2FvIHRoxrDhu51uZyBn4bqvbiB24bubaSB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY2FvIGjGoW4gKHNhdSDEkeG6oWkgaOG7jWMpLiBDaMO6bmcgdGEgY8OzIHRo4buDIHRo4bqleSB04bu3IGzhu4cgbmfGsOG7nWkgY8OzIGLhurFuZyBj4butIG5ow6JuIHRy4bufIGzDqm4gKEJhY2hlbG9ycywgTWFzdGVycywgRG9jdG9yYXRlKSBjaGnhur9tIG3hu5l0IHBo4bqnbiDEkcOhbmcga+G7gywgxJFp4buBdSBuw6B5IGNobyB0aOG6pXkgcuG6sW5nIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBsw6AgeeG6v3UgdOG7kSBxdWFuIHRy4buNbmcgxJHDoW5nIGto4bqjbyBzw6F0IGtoaSBwaMOibiB0w61jaCB0aHUgbmjhuq1wLg0KDQojIyMjICoqMy4zLjIuMy4gQmnhur9uIEFHRSoqDQoNCkJp4bq/biBhZ2UgbMOgIGJp4bq/biDEkeG7i25oIGzGsOG7o25nIGJp4buDdSB0aOG7iyB0deG7lWkgY+G7p2EgY8OhIG5ow6JuLiBUYSB0w61uaCBjw6FjIGNo4buJIHPhu5EgdGjhu5FuZyBrw6ogY8ahIGLhuqNuOg0KDQpgYGB7cn0NCiMgVMOzbSB04bqvdCB0aOG7kW5nIGvDqiBtw7QgdOG6oyBjaG8gdHXhu5VpDQpzdW1tYXJ5KGFkdWx0JGFnZSkNCnNkKGFkdWx0JGFnZSkNCg0KYGBgDQoNClbhu5tpIHPhu5EgcXVhbiBzw6F0IDMyNTYxLCBnacOhIHRy4buLIG5o4buPIG5o4bqldCBsw6AgMTcgdHXhu5VpLCBs4bubbiBuaOG6pXQgbMOgIDkwIHR14buVaS4gVHXhu5VpIHRydW5nIGLDrG5oIChNZWFuKSBraG/huqNuZyAzOC40NCwgxJHhu5kgbOG7h2NoIGNodeG6qW4gfjEzLjEzLCBnacOhIHRy4buLIHRydW5nIHbhu4sgKE1lZGlhbikgPSAzNy4gVOG7qSBwaMOibiB24buLICgyOCwgNDcpIGNobyB0aOG6pXkgNTAlIGPDoSBuaMOibiBjw7MgdHXhu5VpIHThu6sgMjggxJHhur9uIDQ3LiANCg0KYGBge3J9DQojIChhKSBIaXN0b2dyYW0NCnAxIDwtIGdncGxvdChhZHVsdCwgYWVzKHggPSBhZ2UpKSArDQogIGdlb21faGlzdG9ncmFtKGJpbnMgPSAzMCwgZmlsbCA9ICIjNEM3MkIwIiwgY29sb3IgPSAid2hpdGUiKSArDQogIGxhYnMoeCA9ICJUdeG7lWkiLCB5ID0gIlPhu5EgY8OhIG5ow6JuIiwgdGl0bGUgPSAiKGEpIFBow6JuIHBo4buRaSDEkeG7mSB0deG7lWkiKSArDQogIHRoZW1lX21pbmltYWwoKQ0KDQojIChiKSBCb3hwbG90DQpwMiA8LSBnZ3Bsb3QoYWR1bHQsIGFlcyh5ID0gYWdlKSkgKw0KICBnZW9tX2JveHBsb3QoZmlsbCA9ICIjNEM3MkIwIiwgd2lkdGggPSAwLjMpICsNCiAgbGFicyh5ID0gIlR14buVaSIsIHRpdGxlID0gIihiKSBCb3hwbG90IMSR4buZIHR14buVaSIpICsNCiAgdGhlbWVfbWluaW1hbChiYXNlX3NpemUgPSAxMikgKw0KICB0aGVtZSgNCiAgICBheGlzLnRpdGxlLnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgYXhpcy50ZXh0LnggID0gZWxlbWVudF9ibGFuaygpLA0KICAgIGF4aXMudGlja3MueCA9IGVsZW1lbnRfYmxhbmsoKQ0KICApDQoNCiMgS+G6v3QgaOG7o3AgaGFpIGJp4buDdSDEkeG7kyB24bubaSB0w6puIGNodW5nDQpncmlkLmFycmFuZ2UoDQogIHAxLCBwMiwgbmNvbCA9IDIsDQogIHRvcCA9IHRleHRHcm9iKA0KICAgICJIw6xuaCAzLjQuIEJp4buDdSDEkeG7kyBIaXN0b2dyYW0gdsOgIEJveHBsb3QgdGjhu4MgaGnhu4duIHBow6JuIHBo4buRaSB2w6AgxJHhurdjIMSRaeG7g20gYmnhur9uIHR14buVaSIsDQogICAgZ3AgPSBncGFyKGZvbnRzaXplID0gMTQsIGZvbnRmYWNlID0gImJvbGQiKQ0KICApDQopDQpgYGANCg0KUGjDom4gcGjhu5FpIHR14buVaSB0cm9uZyBt4bqrdSB0xrDGoW5nIMSR4buRaSB0cuG6o2kgxJHhu4F1IOG7nyBuZ8aw4budaSB0csaw4bufbmcgdGjDoG5oLiBUcnVuZyBiw6xuaCB+MzcgdHXhu5VpIHbDoCBuaGnhu4F1IG5nxrDhu51pIOG7nyB0deG7lWkgdHJ1bmcgYsOsbmggMzDigJM0MC4gxJBp4buBdSBuw6B5IGjhu6NwIGzDvSB2w6wgxJHDonkgbMOgIMSR4buZIHR14buVaSBsYW8gxJHhu5luZyBjaMOtbmguIFBo4bqnbiB0cuG6uyAoMTfigJMyNSkgdsOgIGNhbyB0deG7lWkgKD42MCkgY8OzIHPhu5Egw610IGjGoW4sIHRo4buDIGhp4buHbiBs4buLY2ggc+G7rSBjaOG7jW4gbeG6q3U6IGNo4buJIG5o4buvbmcgbmfGsOG7nWkgxJFhbmcgbMOgbSB2aeG7h2MuIA0KDQoNCkvhur90IHF14bqjIG7DoHkgY2hvIHRo4bqleSB0deG7lWkgbMOgIGJp4bq/biDEkeG7i25oIGzGsOG7o25nIHF1YW4gdHLhu41uZyBjaG8gcGjDom4gdMOtY2gsIGPDsyB0aOG7gyB4ZW0geMOpdCBt4buRaSBxdWFuIGjhu4cgdHV54bq/biB0w61uaCBob+G6t2MgcGhpIHR1eeG6v24gduG7m2kgdGh1IG5o4bqtcCB24buBIGzDonUgZMOgaS4NCg0KDQojIyMjICoqMy4zLjIuNC4gQmnhur9uIEhPVVJTX1BFUl9XRUVLKioNCg0KQmnhur9uIGhvdXJzX3Blcl93ZWVrIGNobyBiaeG6v3Qgc+G7kSBnaeG7nSBsw6BtIHZp4buHYyBt4buXaSB0deG6p24uIEPFqW5nIHTDrW5oIHRo4buRbmcga8OqIGPGoSBi4bqjbjoNCg0KYGBge3J9DQojIFRo4buRbmcga8OqIG3DtCB04bqjIGNobyBnaeG7nSBsw6BtIHZp4buHYy90deG6p24NCnN1bW1hcnkoYWR1bHQkaG91cnNfcGVyX3dlZWspDQpzZChhZHVsdCRob3Vyc19wZXJfd2VlaykNCg0KYGBgDQoNCkvhur90IHF14bqjIGNobyB0aOG6pXkgdHJ1bmcgduG7iyA0MCBnaeG7nSwgdHJ1bmcgYsOsbmggfjQwIGdp4budLCDEkeG7mSBs4buHY2ggY2h14bqpbiB+MTEuOTguIFThu6kgcGjDom4gduG7iyAoNDAsIDQ1KSBjaG8gdGjhuqV5IHBo4bqnbiBs4bubbiBsw6BtIDQ1IGdp4budIGhv4bq3YyDDrXQgaMahbi4gU+G7kSBnaeG7nSB04buRaSDEkWEgbMOqbiB04bubaSA5OSAobeG7mXQgc+G7kSBsw6BtIHLhuqV0IG5oaeG7gXUgZ2nhu50pLg0KDQpgYGB7cn0NCiMgKGEpIEhpc3RvZ3JhbQ0KcDEgPC0gZ2dwbG90KGFkdWx0LCBhZXMoeCA9IGhvdXJzX3Blcl93ZWVrKSkgKw0KICBnZW9tX2hpc3RvZ3JhbShiaW5zID0gMzAsIGZpbGwgPSAiI0U2OUYwMCIsIGNvbG9yID0gIndoaXRlIikgKw0KICBsYWJzKHggPSAiU+G7kSBnaeG7nSBsw6BtIHZp4buHYyBt4buXaSB0deG6p24iLCANCiAgICAgICB5ID0gIlPhu5EgY8OhIG5ow6JuIiwgDQogICAgICAgdGl0bGUgPSAiKGEpIFBow6JuIHBo4buRaSBz4buRIGdp4budIGzDoG0gdmnhu4djIG3hu5dpIHR14bqnbiIpICsNCiAgdGhlbWVfbWluaW1hbCgpDQoNCiMgKGIpIEJveHBsb3QNCnAyIDwtIGdncGxvdChhZHVsdCwgYWVzKHkgPSBob3Vyc19wZXJfd2VlaykpICsNCiAgZ2VvbV9ib3hwbG90KGZpbGwgPSAiI0U2OUYwMCIsIHdpZHRoID0gMC4zKSArDQogIGxhYnMoeSA9ICJT4buRIGdp4budIGzDoG0gdmnhu4djIG3hu5dpIHR14bqnbiIsIA0KICAgICAgIHRpdGxlID0gIihiKSBCb3hwbG90IHPhu5EgZ2nhu50gbMOgbSB2aeG7h2MgbeG7l2kgdHXhuqduIikgKw0KICB0aGVtZV9taW5pbWFsKGJhc2Vfc2l6ZSA9IDEyKSArDQogIHRoZW1lKA0KICAgIGF4aXMudGl0bGUueCA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICBheGlzLnRleHQueCAgPSBlbGVtZW50X2JsYW5rKCksDQogICAgYXhpcy50aWNrcy54ID0gZWxlbWVudF9ibGFuaygpDQogICkNCg0KIyBL4bq/dCBo4bujcCB24bubaSB0acOqdSDEkeG7gSBjaHVuZw0KZ3JpZC5hcnJhbmdlKA0KICBwMSwgcDIsDQogIG5jb2wgPSAyLA0KICB0b3AgPSB0ZXh0R3JvYigNCiAgICAiSMOsbmggMy41LiBCaeG7g3UgxJHhu5MgSGlzdG9ncmFtIHbDoCBCb3hwbG90IHRo4buDIGhp4buHbiBwaMOibiBwaOG7kWkgdsOgIMSR4bq3YyDEkWnhu4NtIGJp4bq/biBz4buRIGdp4budIGzDoG0gdmnhu4djIG3hu5dpIHR14bqnbiIsDQogICAgZ3AgPSBncGFyKGZvbnRzaXplID0gMTQsIGZvbnRmYWNlID0gImJvbGQiKQ0KICApDQopDQpgYGANCg0KU+G7kSBnaeG7nSBsw6BtIHZp4buHYyB04bqtcCB0cnVuZyBxdWFuaCA0MCBnaeG7nS90deG6p24gKGzDoG0gdmnhu4djIHRvw6BuIHRo4budaSBnaWFuIHRpw6p1IGNodeG6qW4pLiBIxqFuIG7hu61hIG3huqt1IGzDoG0gduG7q2EgNDAgZ2nhu50sIG3hu5l0IHBo4bqnbiBuaOG7jyBsw6BtIMOtdCAoYsOhbiB0aOG7nWkgZ2lhbikgaG/hurdjIHLhuqV0IG5oaeG7gXUgKGzDoG0gdGjDqm0pLiANCg0KDQpL4bq/dCBxdeG6oyBuw6B5IHBo4bqjbiDDoW5oIHRo4buxYyB04bq/IGjhuqd1IGjhur90IGxhbyDEkeG7mW5nIHRvw6BuIHRo4budaSBnaWFuIOG7nyBN4bu5IGzDoG0gfjQwIGdp4budL3R14bqnbi4gUGjDom4gdMOtY2ggdGjDqm0gY8OzIHRo4buDIHhlbSBsaeG7h3UgbMOgbSBuaGnhu4F1IGdp4budIGjGoW4gY8OzIHTGsMahbmcgcXVhbiB24bubaSB0aHUgbmjhuq1wIGNhbyBoxqFuICh2w60gZOG7pTogbmfGsOG7nWkgbMOgbSB0aMOqbSBuZ2/DoGkgZ2nhu50gY8OzIHRo4buDIGtp4bq/bSB0aMOqbSB0aHUgbmjhuq1wKS4NCg0KDQoNCg0KKioqDQoNCiMgKipDaMawxqFuZyA0LiBL4bq+VCBRVeG6oiBOR0hJw4pOIEPhu6hVKioNCg0KKioqDQoNCiMjICoqNC4xLiBQaMOibiB0w61jaCB0w6FjIMSR4buZbmcgY+G7p2EgdOG7q25nIHnhur91IHThu5EgxJHhur9uIGto4bqjIG7Eg25nIHRodSBuaOG6rXAqKg0KDQojIyMgKio0LjEuMS4gQmnhur9uIEdFTkRFUioqDQoNCk5oaeG7gXUgbmdoacOqbiBj4bupdSBjaG8gdGjhuqV5IHBo4bulIG7hu68gdGjGsOG7nW5nIGPDsyB0aHUgbmjhuq1wIHRydW5nIGLDrG5oIHRo4bqlcCBoxqFuIG5hbSBnaeG7m2kuIFbDrSBk4bulLCBk4buvIGxp4buHdSBj4bunYSBJTE8gZ2hpIG5o4bqtbiBy4bqxbmcg4bufIGjhuqd1IGjhur90IGPDoWMgcXXhu5FjIGdpYSwgcGjhu6UgbuG7ryBraeG6v20gxJHGsOG7o2Mgw610IGjGoW4gbmFtIGdp4bubaSAoZ2nhu5tpIHTDrW5oIG5hbSBjw7MgbeG7qWMgbMawxqFuZyB0cnVuZyBiw6xuaCBjYW8gaMahbg0KDQoqKkLhuqNuZyB04bqnbiBz4buRIC0gdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQojIELhuqNuZyB04bqnbiBzdeG6pXQgZ2nhu69hIGdp4bubaSB0w61uaCB2w6AgdGh1IG5o4bqtcA0KdGJsX2dlbmRlciA8LSB0YWJsZShhZHVsdCRHRU5ERVIsIGFkdWx0JGluY29tZSkNCnRibF9nZW5kZXINCiMgVOG7tyBs4buHIHBo4bqnbiB0csSDbSB0aGVvIGjDoG5nICh0aGVvIGdp4bubaSB0w61uaCkNCnByb3AudGFibGUodGJsX2dlbmRlciwgMSkNCmBgYA0KDQpL4bq/dCBxdeG6oyB0csOqbiBjaG8gdGjhuqV5IHThu7cgbOG7hyBuZ8aw4budaSBjw7MgdGh1IG5o4bqtcCB0csOqbiA1MEsgZ2nhu69hIG5hbSB2w6AgbuG7ryBraMOhYyBiaeG7h3QgcsO1IHLhu4d0LiBU4bu3IGzhu4cgbsOgeSDhu58gbmFtIGdp4bubaSBjYW8gKGtob+G6o25nIDMxLjQlKSB0cm9uZyBraGkg4bufIG7hu68gZ2nhu5tpIGNo4buJIGtob+G6o25nIDExLjQlLg0KDQoqKktp4buDbSDEkeG7i25oIENoaSBiw6xuaCBwaMawxqFuZyoqDQoNCmBgYHtyfQ0KIyBLaeG7g20gxJHhu4tuaCDEkeG7mWMgbOG6rXAgQ2hpLXNxdWFyZQ0KY2hpc3EudGVzdCh0YmxfZ2VuZGVyKQ0KYGBgDQoNCioqQsOgaSB0b8OhbiBraeG7g20gxJHhu4tuaCoqDQoNCi0gXChIXzBcKTogR2nhu5tpIHTDrW5oIHbDoCBt4bupYyB0aHUgbmjhuq1wIMSR4buZYyBs4bqtcCAoa2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHKS4NCi0gXChIXzFcKTogR2nhu5tpIHTDrW5oIHbDoCBt4bupYyB0aHUgbmjhuq1wIGPDsyBt4buRaSBsacOqbiBo4buHIChwaOG7pSB0aHXhu5ljIG5oYXUpLg0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBQZWFyc29uJ3MgQ2hpLXNxdWFyZWQgdGVzdCB24bubaSBoaeG7h3UgY2jhu4luaCBZYXRlcyBuaMawIHNhdToNCg0KLSBHacOhIHRy4buLIHRo4buRbmcga8OqIFwoWF4yID0gMTQxNS41XCkNCi0gQuG6rWMgdOG7sSBkbyBcKGRmID0gMVwpDQotIEdpw6EgdHLhu4sgcC12YWx1ZSBcKDwgMi4yIFx0aW1lcyAxMF57LTE2fVwpDQoNClbDrCBwLXZhbHVlIHLhuqV0IG5o4buPLCBuaOG7jyBoxqFuIG3hu6ljIMO9IG5naMSpYSBcKFxhbHBoYSA9IDAuMDVcKSwgbsOqbiBjaMO6bmcgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur8gXChIXzBcKQ0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBnaeG7m2kgdMOtbmggdsOgIG3hu6ljIHRodSBuaOG6rXAuIE7Ds2kgY8OhY2gga2jDoWMsIGdp4bubaSB0w61uaCB2w6AgbeG7qWMgdGh1IG5o4bqtcCBraMO0bmcgxJHhu5ljIGzhuq1wLCBtw6AgcGjhu6UgdGh14buZYyB2w6BvIG5oYXUuDQoNCioqVHLhu7FjIHF1YW4gaMOzYSoqDQoNCmBgYHtyfQ0KIyBCYXIgY2hhcnQgdOG7tyBs4buHIHRodSBuaOG6rXAgdGhlbyBnaeG7m2kgdMOtbmgNCmRmX2dlbmRlciA8LSBhcy5kYXRhLmZyYW1lKHByb3AudGFibGUodGJsX2dlbmRlciwgMSkpDQpjb2xuYW1lcyhkZl9nZW5kZXIpIDwtIGMoIkdFTkRFUiIsICJpbmNvbWUiLCAicGN0IikNCg0KZ2dwbG90KGRmX2dlbmRlciwgYWVzKHg9R0VOREVSLCB5PXBjdCwgZmlsbD1pbmNvbWUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uPSJkb2RnZSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudChwY3QsIGFjY3VyYWN5ID0gMSkpLCANCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLCANCiAgICAgICAgICAgIHZqdXN0ID0gLTAuMjUsIHNpemUgPSAzKSArDQogIHNjYWxlX3lfY29udGludW91cyhsYWJlbHMgPSBzY2FsZXM6OnBlcmNlbnRfZm9ybWF0KGFjY3VyYWN5PTEpLCBsaW1pdHMgPSBjKDAsIG1heChkZl9nZW5kZXIkcGN0KSoxLjE1KSkgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjKCI8PTUwSyIgPSAiIzFmNzhiNCIsICI+NTBLIiA9ICIjZmY3ZjAwIikpICsNCiAgbGFicyh0aXRsZT0iSMOsbmggNC4xLiBCaeG7g3UgxJHhu5MgY+G7mXQgdOG7tyBs4buHIHRodSBuaOG6rXAgdGhlbyBnaeG7m2kgdMOtbmgiLA0KICAgICAgIHg9Ikdp4bubaSB0w61uaCIsIHk9IlBo4bqnbiB0csSDbSIsIGZpbGw9IkluY29tZSIpDQoNCmBgYA0KDQpCaeG7g3UgxJHhu5MgY+G7mXQgY2hvIHRo4bqleSBuYW0gKOKAnE1hbGXigJ0pIGPDsyB04bu3IGzhu4cgPjUwSyByw7UgcuG7h3QgY2FvIGjGoW4gbuG7ryAo4oCcRmVtYWxl4oCdKSwgbWluaCBob+G6oSBzaW5oIMSR4buZbmcgY2hvIGvhur90IHF14bqjIENoaS1zcXVhcmUgdsOgIFJSL09SIOG7nyB0csOqbi4NCg0KKipSaXNrIFJhdGlvKioNCg0KYGBge3J9DQpyaXNrcmF0aW8odGJsX2dlbmRlcikNCmBgYA0KDQpUaGVvIGLhuqNuZyBr4bq/dCBxdeG6oywgbmjDs20ga2jDoWNoIGjDoG5nIGzDoCBu4buvIChGZW1hbGUpIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSB24bubaSBSUiA9IDEuMDAwMC4gTmjDs20ga2jDoWNoIGjDoG5nIGzDoCBuYW0gKE1hbGUpIGPDsyBSUiA9IDIuNzYwOSwgdOG7qWMga2jhuqMgbsSDbmcga2jDoWNoIGjDoG5nIGPDsyB0aHUgbmjhuq1wIHRyw6puIDUwSyB0cm9uZyBuaMOzbSBuYW0gY2FvIGfhuqVwIGtob+G6o25nIDIuNzYgbOG6p24gc28gduG7m2kgbmjDs20gbuG7ry4gS2hv4bqjbmcgxrDhu5tjIGzGsOG7o25nIHRpbiBj4bqteSA5NSUgY2hvIFJSIGzDoCAoMi42MDI5OyAyLjkyODUpLCBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8gduG7m2kgcC12YWx1ZSBn4bqnbiBi4bqxbmcgMC4NCg0KKipPZGRzIFJhdGlvKioNCg0KYGBge3J9DQpvZGRzcmF0aW8odGJsX2dlbmRlcikNCmBgYA0KDQpUaGVvIGLhuqNuZyBr4bq/dCBxdeG6oywgbmjDs20ga2jDoWNoIGjDoG5nIG7hu68gKEZlbWFsZSkgxJHGsOG7o2MgY2jhu41uIGzDoG0gbmjDs20gdGhhbSBjaGnhur91IHbhu5tpIE9SID0gMS4gTmjDs20ga2jDoWNoIGjDoG5nIG5hbSAoTWFsZSkgY8OzIE9SID0gMy41NjU4LCB04bupYyBsw6Agb2RkcyAodOG7tyBs4buHIGNow6puaCkgxJHhu4MgbeG7mXQga2jDoWNoIGjDoG5nIG5hbSBjw7MgdGh1IG5o4bqtcCB0csOqbiA1MEsgY2FvIGfhuqVwIGtob+G6o25nIDMuNTY1OCBs4bqnbiBzbyB24bubaSBt4buZdCBraMOhY2ggaMOgbmcgbuG7ry4gS2hv4bqjbmcgxrDhu5tjIGzGsOG7o25nIHRpbiBj4bqteSA5NSUgY2hvIE9SIGzDoCAoMy4zMjkxOyAzLjgyMjYpLCB2w6AgcC12YWx1ZSBn4bqnbiBi4bqxbmcgMCBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8uDQoNCk5hbSBnaeG7m2kgY8OzIGto4bqjIG7Eg25nIMSR4bqhdCB0aHUgbmjhuq1wIGNhbyBoxqFuIG7hu68gZ2nhu5tpIGtob+G6o25nIDPigJM0IGzhuqduLiBL4bq/dCBxdeG6oyBuw6B5IHBow7kgaOG7o3AgduG7m2kga2jhuqNvIHPDoXQgdG/DoG4gY+G6p3UgduG7gSBraG/huqNuZyBjw6FjaCBsxrDGoW5nIGdp4bubaSB0w61uaC4gQ2hvIHRo4bqleSBnaeG7m2kgdMOtbmggbMOgIHnhur91IHThu5EgcXVhbiB0cuG7jW5nLiDEkGnhu4F1IG7DoHkgbmjhuqV0IHF1w6FuIHbhu5tpIGLhurFuZyBjaOG7qW5nIHLhu5luZyBoxqFuIGNobyB0aOG6pXkgcGjhu6UgbuG7ryB0aMaw4budbmcgYuG7iyB0cuG6oyBsxrDGoW5nIHRo4bqlcCBoxqFuIG5hbSBnaeG7m2ksIGRvIG5oaeG7gXUgbmd1ecOqbiBuaMOibiBuaMawIHBow6JuIGJp4buHdCDEkeG7kWkgeOG7rSwgbOG7sWEgY2jhu41uIG5naOG7gSBuZ2hp4buHcCwga2luaCBuZ2hp4buHbSBsYW8gxJHhu5luZywgLi4uDQoNCiMjIyAqKjQuMS4yLiBCaeG6v24gRURVQ0FUSU9OKioNCg0KVGhlbyBk4buvIGxp4buHdSBj4bunYSBD4bulYyBUaOG7kW5nIGvDqiBMYW8gxJHhu5luZyBN4bu5IChCTFMpLCBt4bupYyB0aHUgbmjhuq1wIHRydW5nIGLDrG5oIHTEg25nIHRoZW8gdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuOiBuZ8aw4budaSBjw7MgaOG7jWMgduG7iyBjw6BuZyBjYW8gKHRp4bq/biBzxKksIHRo4bqhYyBzxKksIGPhu60gbmjDom4pIGPDsyB0aHUgbmjhuq1wIHRydW5nIGLDrG5oIGfhuqVwIG5oaeG7gXUgbOG6p24gbmfGsOG7nWkgaOG7jWMgduG6pW4gdGjhuqVwLiDEkGnhu4F1IG7DoHkgaMOgbSDDvSBy4bqxbmcgYmnhur9uIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiBz4bq9IHTDoWMgxJHhu5luZyB0w61jaCBj4buxYyDEkeG6v24ga2jhuqMgbsSDbmcgY8OzIHRodSBuaOG6rXAgY2FvLg0KDQoqKkLhuqNuZyB04bqnbiBz4buRIC0gdOG6p24gc3XhuqV0KioNCg0KYGBge3J9DQojIELhuqNuZyB04bqnbiBzdeG6pXQgdGhlbyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gdsOgIHRodSBuaOG6rXANCnRibF9lZHUgPC0gdGFibGUoYWR1bHQkZWR1Y2F0aW9uLCBhZHVsdCRpbmNvbWUpDQojIEPDsyB0aOG7gyBnb20gbmjDs20gKHbDrSBk4bulOiAiQmFjaGVsb3JzKyIgdnMgIkxlc3NUaGFuQmFjaCIpDQphZHVsdCRlZHVfaGlnaCA8LSBpZmVsc2UoYWR1bHQkZWR1Y2F0aW9uICVpbiUgDQogICAgICAgICAgICAgICAgICAgICAgICAgYygiQmFjaGVsb3JzIiwiTWFzdGVycyIsIlByb2Ytc2Nob29sIiwiRG9jdG9yYXRlIiwiQXNzb2MtYWNkbSIsIkFzc29jLXZvYyIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICJIaWdoIiwgIkxvdyIpDQojIMSQ4bq3dCB0aOG7qSB04buxIGxldmVscyDEkeG7gyAiTG93IiDEkeG7qW5nIHRyxrDhu5tjICJIaWdoIg0KYWR1bHQkZWR1X2hpZ2ggPC0gZmFjdG9yKGFkdWx0JGVkdV9oaWdoLCBsZXZlbHMgPSBjKCJMb3ciLCAiSGlnaCIpKQ0KIyBU4bqhbyBi4bqjbmcgdOG6p24gc3XhuqV0DQp0YmxfZWR1MiA8LSB0YWJsZShhZHVsdCRlZHVfaGlnaCwgYWR1bHQkaW5jb21lKQ0KdGJsX2VkdTINCnByb3AudGFibGUodGJsX2VkdTIsIDEpDQoNCg0KYGBgDQoNCioqS2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nKioNCg0KYGBge3J9DQpjaGlzcS50ZXN0KHRibF9lZHUyKQ0KYGBgDQoNCioqQsOgaSB0b8OhbiBraeG7g20gxJHhu4tuaCoqDQoNCi0gXChIXzBcKTogVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIHbDoCBt4bupYyB0aHUgbmjhuq1wIMSR4buZYyBs4bqtcCAoa2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHKS4NCi0gXChIXzFcKTogVHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIHbDoCBt4bupYyB0aHUgbmjhuq1wIGPDsyBt4buRaSBsacOqbiBo4buHIChwaOG7pSB0aHXhu5ljIG5oYXUpLg0KDQpL4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBQZWFyc29uJ3MgQ2hpLXNxdWFyZWQgdGVzdCB24bubaSBoaeG7h3UgY2jhu4luaCBZYXRlcyBuaMawIHNhdToNCg0KLSBHacOhIHRy4buLIHRo4buRbmcga8OqIFwoWF4yID0gMjc5NS44LFwpDQotIELhuq1jIHThu7EgZG8gXChkZiA9IDFcKQ0KLSBHacOhIHRy4buLIHAtdmFsdWUgXCg8IDIuMiBcdGltZXMgMTBeey0xNn1cKQ0KDQpWw6wgcC12YWx1ZSBy4bqldCBuaOG7jywgbmjhu48gaMahbiBt4bupYyDDvSBuZ2jEqWEgXChcYWxwaGEgPSAwLjA1XCksIG7Dqm4gY2jDum5nIHRhIGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/IFwoSF8wXCkNCg0KxJBp4buBdSBuw6B5IGNobyB0aOG6pXkgY8OzIG3hu5FpIGxpw6puIGjhu4cgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBnaeG7r2EgZ2nhu5tpIHTDrW5oIHbDoCBt4bupYyB0aHUgbmjhuq1wLiBOw7NpIGPDoWNoIGtow6FjLFRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB2w6AgbeG7qWMgdGh1IG5o4bqtcCBraMO0bmcgxJHhu5ljIGzhuq1wLCBtw6AgcGjhu6UgdGh14buZYyB2w6BvIG5oYXUuDQoNCioqVHLhu7FjIHF1YW4gaMOzYSoqDQoNClBow6JuIHTDrWNoIGLhuqNuZyB0csOqbiBjaG8gdGjhuqV5IHThu7cgbOG7hyB0aHUgbmjhuq1wID41MEsgY2FvIGjGoW4g4bufIG5ow7NtIGPDsyB0csOsbmggxJHhu5kgY2FvLiBWw60gZOG7pSwgbmjDs20gaOG7jWMgduG6pW4g4oCcQmFjaGVsb3JzIGhv4bq3YyBjYW8gaMahbuKAnSBjaGnhur9tIHBo4bqnbiBs4bubbiBjw6FjIHRyxrDhu51uZyBo4bujcCB0aHUgbmjhuq1wIGNhby4gVGjhu5FuZyBrw6ogQ2hpLXNxdWFyZSBjxaluZyBjaG8gcDwwLjAwMSwgY2jhu6luZyB04buPIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB2w6AgdGh1IG5o4bqtcCBjYW8gY8OzIG3hu5FpIGxpw6puIGjhu4cgY2jhurd0IGNo4bq9Lg0KDQpgYGB7cn0NCiMgTW9zYWljIHBsb3QgY2hvIHRyw6xuaCDEkeG7mSB2w6AgdGh1IG5o4bqtcA0KbW9zYWljcGxvdCh0YmxfZWR1MiwgY29sb3I9VFJVRSwNCiAgICAgICAgICAgbWFpbj0iSMOsbmggNC4yLiBCaeG7g3UgxJHhu5MgTW9zYWljIFBsb3QgZ2nhu69hIHRodSBuaOG6rXAgdsOgIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiIsDQogICAgICAgICAgIHhsYWI9Ikjhu41jIHbhuqVuIChIaWdoL0xvdykiLCB5bGFiPSJJbmNvbWUiKQ0KDQpgYGANCg0KDQpgYGB7cn0NCiMgQmFyIGNoYXJ0IG5ow7NtIEhpZ2ggdnMgTG93DQpkZl9lZHUyIDwtIGFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YmxfZWR1MiwxKSkNCmNvbG5hbWVzKGRmX2VkdTIpIDwtIGMoImVkdV9oaWdoIiwiaW5jb21lIiwicGN0IikNCmdncGxvdChkZl9lZHUyLCBhZXMoeCA9IGVkdV9oaWdoLCB5ID0gcGN0LCBmaWxsID0gaW5jb21lKSkgKw0KICBnZW9tX2NvbChwb3NpdGlvbiA9ICJkb2RnZSIpICsNCiAgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHBlcmNlbnQocGN0LCBhY2N1cmFjeSA9IDAuMSkpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksDQogICAgICAgICAgICB2anVzdCA9IC0wLjI1LCBzaXplID0gMykgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gcGVyY2VudCkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkjDrG5oIDQuMy4gQmnhu4N1IMSR4buTIGPhu5l0IHThu7cgbOG7hyB0aHUgbmjhuq1wIHRoZW8gdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIiwgDQogICAgeCAgICAgPSAiSOG7jWMgduG6pW4gY2FvIChIaWdoKSB2cyB0aOG6pXAgKExvdykiLCANCiAgICB5ICAgICA9ICJQaOG6p24gdHLEg20iLCANCiAgICBmaWxsICA9ICJJbmNvbWUiDQogICkgKw0KICB0aGVtZV9taW5pbWFsKCkNCmBgYA0KDQpOaMOzbSDigJxIaWdo4oCdIMOhcCDEkeG6o28gduG7gSBwaOG6p24gdHLEg20gdGh1IG5o4bqtcCA+NTBLOyBtb3NhaWMgcGxvdCBjaG8gdGjhuqV5IMO0IOKAnEhpZ2jigJM+NTBL4oCdIGNoaeG6v20gZGnhu4duIHTDrWNoIGzhu5tuIG5o4bqldC4NCg0KKipSaXNrIFJhdGlvKioNCg0KYGBge3J9DQpyaXNrcmF0aW8odGJsX2VkdTIpDQpgYGANClRoZW8gYuG6o25nIGvhur90IHF14bqjLCBuaMOzbSBraMOhY2ggaMOgbmcgY8OzIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB0aOG6pXAgKExvdykgxJHGsOG7o2MgY2jhu41uIGzDoG0gbmjDs20gdGhhbSBjaGnhur91IHbhu5tpIFJSID0gMS4wMDAwLg0KTmjDs20ga2jDoWNoIGjDoG5nIGPDsyB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gY2FvIChIaWdoKSBjw7MgUlIgPSAyLjc4NzYsIHThu6ljIGto4bqjIG7Eg25nIGtow6FjaCBow6BuZyBjw7MgdGh1IG5o4bqtcCB0csOqbiA1MEsgdHJvbmcgbmjDs20gdHLDrG5oIMSR4buZIGNhbyBjYW8gZ+G6pXAga2hv4bqjbmcgMi43OSBs4bqnbiBzbyB24bubaSBuaMOzbSB0csOsbmggxJHhu5kgdGjhuqVwLg0KS2hv4bqjbmcgxrDhu5tjIGzGsOG7o25nIHRpbiBj4bqteSA5NSUgY2hvIFJSIGzDoCAoMi42ODExOyAyLjg5ODQpLCBjaG8gdGjhuqV5IHPhu7Ega2jDoWMgYmnhu4d0IG7DoHkgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8gduG7m2kgcC12YWx1ZSBn4bqnbiBi4bqxbmcgMC4NCg0KDQoqKk9kZHMgUmF0aW8qKg0KDQpgYGB7cn0NCm9kZHNyYXRpbyh0YmxfZWR1MikNCmBgYA0KDQoNClRoZW8gYuG6o25nIGvhur90IHF14bqjLCBuaMOzbSBraMOhY2ggaMOgbmcgY8OzIHRyw6xuaCDEkeG7mSBo4buNYyB24bqlbiB0aOG6pXAgKExvdykgxJHGsOG7o2MgY2jhu41uIGzDoG0gbmjDs20gdGhhbSBjaGnhur91IHbhu5tpIE9SID0gMS4NCk5ow7NtIGtow6FjaCBow6BuZyBjw7MgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGNhbyAoSGlnaCkgY8OzIE9SID0gNC4xNzY0LCB04bupYyBsw6Agb2RkcyAodOG7tyBs4buHIGNow6puaCkgxJHhu4MgbeG7mXQga2jDoWNoIGjDoG5nIGPDsyB0csOsbmggxJHhu5kgY2FvIMSR4bqhdCB0aHUgbmjhuq1wIHRyw6puIDUwSyBjYW8gZ+G6pXAga2hv4bqjbmcgNC4xNzY0IGzhuqduIHNvIHbhu5tpIG3hu5l0IGtow6FjaCBow6BuZyBjw7MgdHLDrG5oIMSR4buZIHRo4bqlcC4NCktob+G6o25nIMaw4bubYyBsxrDhu6NuZyB0aW4gY+G6rXkgOTUlIGNobyBPUiBsw6AgKDMuOTUzNzsgNC40MTE4KSwgdsOgIHAtdmFsdWUgZ+G6p24gYuG6sW5nIDAgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvLg0KDQoNCkvhur90IHF14bqjIHBo4bqjbiDDoW5oIHLDtSBt4buRaSBsacOqbiBo4buHIHTDrWNoIGPhu7FjIGdp4buvYSBo4buNYyB24bqlbiB2w6AgdGh1IG5o4bqtcCwgcGjDuSBo4bujcCB24bubaSB0aOG7sWMgdOG6vyBsw6AgYuG6sW5nIGPhuqVwIGNhbyBoxqFuIHRoxrDhu51uZyBk4bqrbiDEkeG6v24gY8ahIGjhu5lpIG5naOG7gSBuZ2hp4buHcCB04buRdCBoxqFuIHbDoCB0aHUgbmjhuq1wIGNhbyBoxqFuDQoNCiMjIyAqKjQuMS4zLiBCaeG6v24gQUdFKioNCg0KKipC4bqjbmcgdOG6p24gc+G7kSAtIHThuqduIHN14bqldCoqDQoNCkThu68gbGnhu4d1IGPhu6dhIEJMUyBjaG8gdGjhuqV5IHRodSBuaOG6rXAgdHJ1bmcgYsOsbmggdMSDbmcgdGhlbyB0deG7lWksIMSR4bqhdCDEkeG7iW5oIOG7nyBuaMOzbSB0deG7lWkgdHJ1bmcgbmnDqm4gKDQ14oCTNTQgdHXhu5VpKSBy4buTaSBnaeG6o20gZOG6p24gduG7gSBzYXUuIFTGsMahbmcgdOG7sSwgdHJvbmcgdOG6rXAgZOG7ryBsaeG7h3UsIG5nxrDhu51pIHRodeG7mWMgbmjDs20gdHXhu5VpIGNhbyBoxqFuIHRoxrDhu51uZyBjw7MgdOG7tyBs4buHIHRodSBuaOG6rXAgPjUwSyBjYW8gaMahbi4NCg0KYGBge3J9DQojIE5ow7NtIHR14buVaSAoY+G6r3QgbmjDs20gdsOtIGThu6U6IDwzMCwgMzAtNTAsID41MCkNCmFkdWx0JGFnZV9ncnAgPC0gY3V0KGFkdWx0JGFnZSwgYnJlYWtzPWMoMCwzMCw1MCwxMDApLCBsYWJlbHM9YygiPDMwIiwiMzAtNTAiLCI+NTAiKSkNCnRibF9hZ2UgPC0gdGFibGUoYWR1bHQkYWdlX2dycCwgYWR1bHQkaW5jb21lKQ0KdGJsX2FnZQ0KcHJvcC50YWJsZSh0YmxfYWdlLCAxKQ0KDQoNCmBgYA0KS+G6v3QgcXXhuqMgY2hvIHRo4bqleSBuaMOzbSB0deG7lWkg4oCcMzAtNTDigJ0gdsOgIOKAnD41MOKAnSBjw7MgdOG7tyBs4buHIHRodSBuaOG6rXAgPjUwSyBjYW8gaMahbiBuaMOzbSB0deG7lWkg4oCcPDMwDQoNCioqS2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nKioNCg0KYGBge3J9DQpjaGlzcS50ZXN0KHRibF9hZ2UpDQpgYGANCg0KKipCw6BpIHRvw6FuIGtp4buDbSDEkeG7i25oKioNCg0KLSBcKEhfMFwpOiDEkOG7mSB0deG7lWkgdsOgIG3hu6ljIHRodSBuaOG6rXAgxJHhu5ljIGzhuq1wIChraMO0bmcgY8OzIG3hu5FpIGxpw6puIGjhu4cpLg0KLSBcKEhfMVwpOiDEkOG7mSB0deG7lWkgdsOgIG3hu6ljIHRodSBuaOG6rXAgY8OzIG3hu5FpIGxpw6puIGjhu4cgKHBo4bulIHRodeG7mWMgbmhhdSkuDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIFBlYXJzb24ncyBDaGktc3F1YXJlZCB0ZXN0IHbhu5tpIGhp4buHdSBjaOG7iW5oIFlhdGVzIG5oxrAgc2F1Og0KDQotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogXChYXjIgPSAyNDQyLjIsXCkNCi0gQuG6rWMgdOG7sSBkbyBcKGRmID0gMlwpDQotIEdpw6EgdHLhu4sgcC12YWx1ZSBcKDwgMi4yIFx0aW1lcyAxMF57LTE2fVwpDQoNClbDrCBwLXZhbHVlIHLhuqV0IG5o4buPLCBuaOG7jyBoxqFuIG3hu6ljIMO9IG5naMSpYSBcKFxhbHBoYSA9IDAuMDVcKSwgbsOqbiBjaMO6bmcgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur8gXChIXzBcKQ0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSDEkOG7mSB0deG7lWkgdsOgIG3hu6ljIHRodSBuaOG6rXAuIE7Ds2kgY8OhY2gga2jDoWMgxJDhu5kgdHXhu5VpIHbDoCBt4bupYyB0aHUgbmjhuq1wIGtow7RuZyDEkeG7mWMgbOG6rXAsIG3DoCBwaOG7pSB0aHXhu5ljIHbDoG8gbmhhdS4NCg0KDQoNCg0KYGBge3J9DQojIEJveHBsb3Qgc28gc8OhbmggcGjDom4gcGjhu5FpIHR14buVaSB0aGVvIHRodSBuaOG6rXANCmdncGxvdChhZHVsdCwgYWVzKHg9aW5jb21lLCB5PWFnZSwgZmlsbD1pbmNvbWUpKSArDQogIGdlb21fYm94cGxvdCgpICsNCiAgbGFicyh0aXRsZT0iSMOsbmggNC40LiBQaMOibiBwaOG7kWkgxJHhu5kgdHXhu5VpIHRoZW8gbmjDs20gdGh1IG5o4bqtcCIsDQogICAgICAgeD0iSW5jb21lIiwgeT0iVHXhu5VpIikgKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb249Im5vbmUiKQ0KDQpgYGANCg0KDQpgYGB7cn0NCiMgQmFyIGNoYXJ0IG5ow7NtIHR14buVaQ0KZGZfYWdlIDwtIGFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YmxfYWdlLDEpKQ0KY29sbmFtZXMoZGZfYWdlKSA8LSBjKCJhZ2VfZ3JwIiwiaW5jb21lIiwicGN0IikNCmdncGxvdChkZl9hZ2UsIGFlcyh4ID0gYWdlX2dycCwgeSA9IHBjdCwgZmlsbCA9IGluY29tZSkpICsNCiAgZ2VvbV9jb2wocG9zaXRpb24gPSAiZG9kZ2UiKSArDQogIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQocGN0LCBhY2N1cmFjeSA9IDAuMSkpLA0KICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuOSksDQogICAgICAgICAgICB2anVzdCA9IC0wLjI1LCBzaXplID0gMykgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobGFiZWxzID0gc2NhbGVzOjpwZXJjZW50KSArDQogIGxhYnMoDQogICAgdGl0bGUgPSAiSMOsbmggNC40LiBCaeG7g3UgxJHhu5MgY+G7mXQgdOG7tyBs4buHIHRodSBuaOG6rXAgdGhlbyDEkeG7mSB0deG7lWkiLA0KICAgIHggPSAiTmjDs20gdHXhu5VpIiwNCiAgICB5ID0gIlBo4bqnbiB0csSDbSIsDQogICAgZmlsbCA9ICJJbmNvbWUiDQogICkNCg0KYGBgDQoNCkJveHBsb3QgY2hvIHRo4bqleSB0cnVuZyB24buLIHR14buVaSBuaMOzbSA+NTBLIGNhbyBoxqFuIG5ow7NtIDw9NTBLOyBiYXIgY2hhcnQgbWluaCBob+G6oSBuaMOzbSAzMOKAkzUwIGNoaeG6v20gdOG7tyBs4buHID41MEsgbOG7m24gbmjhuqV0Lg0KDQoqKlJpc2sgUmF0aW8qKg0KDQpgYGB7cn0NCnJpc2tyYXRpbyh0YmxfYWdlKQ0KYGBgDQpUaGVvIGLhuqNuZyBr4bq/dCBxdeG6oywgbmjDs20ga2jDoWNoIGjDoG5nIGPDsyBz4buRIGdp4budIGzDoG0gdmnhu4djIG3hu5dpIHR14bqnbiBkxrDhu5tpIDMwIGdp4budICg8MzApIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSB24bubaSBSUiA9IDEuMDAwMC4NCk5ow7NtIGtow6FjaCBow6BuZyBsw6BtIHZp4buHYyB04burIDMwIMSR4bq/biA1MCBnaeG7nSBt4buXaSB0deG6p24gKDMwLTUwKSBjw7MgUlIgPSA0LjgwMjIsIHThu6ljIGzDoCBraOG6oyBuxINuZyBjw7MgdGh1IG5o4bqtcCB0csOqbiA1MEsgdHJvbmcgbmjDs20gbsOgeSBjYW8gZ+G6pXAga2hv4bqjbmcgNC44MCBs4bqnbiBzbyB24bubaSBuaMOzbSBsw6BtIHZp4buHYyBkxrDhu5tpIDMwIGdp4budLg0KTmjDs20ga2jDoWNoIGjDoG5nIGzDoG0gdmnhu4djIHRyw6puIDUwIGdp4budIG3hu5dpIHR14bqnbiAoPjUwKSBjw7MgUlIgPSA0LjkxNzksIG5naMSpYSBsw6Aga2jhuqMgbsSDbmcgY8OzIHRodSBuaOG6rXAgdHLDqm4gNTBLIHRyb25nIG5ow7NtIG7DoHkgY2FvIGfhuqVwIGtob+G6o25nIDQuOTIgbOG6p24gc28gduG7m2kgbmjDs20gbMOgbSB2aeG7h2MgZMaw4bubaSAzMCBnaeG7nS4NCktob+G6o25nIMaw4bubYyBsxrDhu6NuZyB0aW4gY+G6rXkgOTUlIGNobyBSUiBuaMOzbSAzMC01MCBnaeG7nSBsw6AgKDQuNDQ2MjsgNS4xODY4KSB2w6AgbmjDs20gPjUwIGdp4budIGzDoCAoNC41MzA2OyA1LjMzODMpLg0KQ8OhYyBnacOhIHRy4buLIHAtdmFsdWUgZ+G6p24gYuG6sW5nIDAgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvLg0KDQoqKk9kZHMgUmF0aW8qKg0KDQpgYGB7cn0NCm9kZHNyYXRpbyh0YmxfYWdlKQ0KYGBgDQoNClRoZW8gYuG6o25nIGvhur90IHF14bqjLCBuaMOzbSBraMOhY2ggaMOgbmcgbMOgbSB2aeG7h2MgZMaw4bubaSAzMCBnaeG7nSBt4buXaSB0deG6p24gKDwzMCkgxJHGsOG7o2MgY2jhu41uIGzDoG0gbmjDs20gdGhhbSBjaGnhur91IHbhu5tpIE9SID0gMS4NCk5ow7NtIGtow6FjaCBow6BuZyBsw6BtIHZp4buHYyB04burIDMwIMSR4bq/biA1MCBnaeG7nSBt4buXaSB0deG6p24gKDMwLTUwKSBjw7MgT1IgPSA2LjY3OTYsIHThu6ljIGzDoCBvZGRzIMSR4buDIG3hu5l0IGtow6FjaCBow6BuZyB0cm9uZyBuaMOzbSBuw6B5IGPDsyB0aHUgbmjhuq1wIHRyw6puIDUwSyBjYW8gZ+G6pXAga2hv4bqjbmcgNi42OCBs4bqnbiBzbyB24bubaSBuaMOzbSBsw6BtIHZp4buHYyBkxrDhu5tpIDMwIGdp4budLg0KTmjDs20ga2jDoWNoIGjDoG5nIGzDoG0gdmnhu4djIHRyw6puIDUwIGdp4budIG3hu5dpIHR14bqnbiAoPjUwKSBjw7MgT1IgPSA2LjkyMjcsIG5naMSpYSBsw6Agb2RkcyDEkeG7gyBt4buZdCBraMOhY2ggaMOgbmcgdHJvbmcgbmjDs20gbsOgeSBjw7MgdGh1IG5o4bqtcCB0csOqbiA1MEsgY2FvIGfhuqVwIGtob+G6o25nIDYuOTIgbOG6p24gc28gduG7m2kgbmjDs20gbMOgbSB2aeG7h2MgZMaw4bubaSAzMCBnaeG7nS4NCktob+G6o25nIMaw4bubYyBsxrDhu6NuZyB0aW4gY+G6rXkgOTUlIGNobyBPUiBuaMOzbSAzMC01MCBnaeG7nSBsw6AgKDYuMTMzMjsgNy4yODU1KSB2w6AgbmjDs20gPjUwIGdp4budIGzDoCAoNi4yOTExOyA3LjYyNTkpLg0KR2nDoSB0cuG7iyBwLXZhbHVlIGfhuqduIGLhurFuZyAwIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhby4NCg0KDQpL4bq/dCBxdeG6oyBwaMO5IGjhu6NwIHbhu5tpIHh1IGjGsOG7m25nIGNodW5nIGzDoCBraW5oIG5naGnhu4dtIGzDoG0gdmnhu4djIHTEg25nIHRoZW8gdHXhu5VpICh04bubaSBt4buZdCBt4bupYyDEkeG7mSBuaOG6pXQgxJHhu4tuaCkgZ2nDunAgdMSDbmcgY8ahIGjhu5lpIHRodSBuaOG6rXAgY2FvLg0KDQojIyMgKio0LjEuNC4gQmnhur9uIEhPVVJTX1BFUl9XRUVLKioNCg0KKipC4bqjbmcgdOG6p24gc+G7kSAtIHThuqduIHN14bqldCoqDQoNClBow6JuIHTDrWNoIGNobyB0aOG6pXkgbmjhu69uZyBuZ8aw4budaSBsw6BtIHZp4buHYyBuaGnhu4F1IGdp4budIGjGoW4gKHRvw6BuIHRo4budaSBnaWFuKSB0aMaw4budbmcgY8OzIHThu7cgbOG7hyB0aHUgbmjhuq1wID41MEsgY2FvIGjGoW4gc28gduG7m2kgbmfGsOG7nWkgbMOgbSBiw6FuIHRo4budaSBnaWFuLiDEkGnhu4F1IG7DoHkgbMOgIGjhu6NwIGzDvSB2w6wgbMOgbSB2aeG7h2Mgbmhp4buBdSBnaeG7nSAodG/DoG4gdGjhu51pIGdpYW4pIHRoxrDhu51uZyBjaG8gcGjDqXAgdMSDbmcgdGh1IG5o4bqtcCB04buVbmcgY+G7mW5nLg0KDQpgYGB7cn0NCiMgTmjDs20gdGhlbyBnaeG7nSBsw6BtIHZp4buHYyAodsOtIGThu6U6ID49IDM1aCBsw6AgZnVsbC10aW1lKQ0KYWR1bHQkZnVsbHRpbWUgPC0gaWZlbHNlKGFkdWx0JGhvdXJzX3Blcl93ZWVrID49IDM1LCAiRnVsbHRpbWUiLCAiUGFydHRpbWUiKQ0KIyDEkOG6t3QgbOG6oWkgdGjhu6kgdOG7sSBmYWN0b3IsIFBhcnR0aW1lIMSR4bupbmcgdHLGsOG7m2MgRnVsbHRpbWUNCmFkdWx0JGZ1bGx0aW1lIDwtIGZhY3RvcihhZHVsdCRmdWxsdGltZSwgbGV2ZWxzID0gYygiUGFydHRpbWUiLCAiRnVsbHRpbWUiKSkNCg0KdGJsX2hvdXJzIDwtIHRhYmxlKGFkdWx0JGZ1bGx0aW1lLCBhZHVsdCRpbmNvbWUpDQp0YmxfaG91cnMNCnByb3AudGFibGUodGJsX2hvdXJzLCAxKQ0KDQoNCmBgYA0KDQoNCioqS2nhu4NtIMSR4buLbmggQ2hpIGLDrG5oIHBoxrDGoW5nKioNCg0KYGBge3J9DQpjaGlzcS50ZXN0KHRibF9ob3VycykNCmBgYA0KDQoqKkLDoGkgdG/DoW4ga2nhu4NtIMSR4buLbmgqKg0KDQotIFwoSF8wXCk6IFPhu5EgZ2nhu50gbMOgbSB2aeG7h2MgdHJvbmcgbeG7mXQgdHXhuqduIHbDoCBt4bupYyB0aHUgbmjhuq1wIMSR4buZYyBs4bqtcCAoa2jDtG5nIGPDsyBt4buRaSBsacOqbiBo4buHKS4NCi0gXChIXzFcKTogU+G7kSBnaeG7nSBsw6BtIHZp4buHYyB0cm9uZyBt4buZdCB0deG6p24gdsOgIG3hu6ljIHRodSBuaOG6rXAgY8OzIG3hu5FpIGxpw6puIGjhu4cgKHBo4bulIHRodeG7mWMgbmhhdSkuDQoNCkvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIFBlYXJzb24ncyBDaGktc3F1YXJlZCB0ZXN0IHbhu5tpIGhp4buHdSBjaOG7iW5oIFlhdGVzIG5oxrAgc2F1Og0KDQotIEdpw6EgdHLhu4sgdGjhu5FuZyBrw6ogXChYXjIgPSA5NjEuOTIsXCkNCi0gQuG6rWMgdOG7sSBkbyBcKGRmID0gMVwpDQotIEdpw6EgdHLhu4sgcC12YWx1ZSBcKDwgMi4yIFx0aW1lcyAxMF57LTE2fVwpDQoNClbDrCBwLXZhbHVlIHLhuqV0IG5o4buPLCBuaOG7jyBoxqFuIG3hu6ljIMO9IG5naMSpYSBcKFxhbHBoYSA9IDAuMDVcKSwgbsOqbiBjaMO6bmcgdGEgYsOhYyBi4buPIGdp4bqjIHRodXnhur8gXChIXzBcKQ0KDQrEkGnhu4F1IG7DoHkgY2hvIHRo4bqleSBjw7MgbeG7kWkgbGnDqm4gaOG7hyBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGdp4buvYSBT4buRIGdp4budIGzDoG0gdmnhu4djIHRyb25nIG3hu5l0IHR14bqnbmggdsOgIG3hu6ljIHRodSBuaOG6rXAuIE7Ds2kgY8OhY2gga2jDoWMsIFPhu5EgZ2nhu50gbMOgbSB2aeG7h2MgdHJvbmcgbeG7mXQgdHXhuqduIHbDoCBt4bupYyB0aHUgbmjhuq1wIGtow7RuZyDEkeG7mWMgbOG6rXAsIG3DoCBwaOG7pSB0aHXhu5ljIHbDoG8gbmhhdS4NCg0KKipUcuG7sWMgcXVhbiBow7NhKioNCg0KYGBge3J9DQojIEhpc3RvZ3JhbSBwaMOibiBwaOG7kWkgZ2nhu50gbMOgbSB2aeG7h2MgdGhlbyBuaMOzbSB0aHUgbmjhuq1wDQpnZ3Bsb3QoYWR1bHQsIGFlcyh4PWhvdXJzX3Blcl93ZWVrLCBmaWxsPWluY29tZSkpICsNCiAgZ2VvbV9oaXN0b2dyYW0ocG9zaXRpb249ImlkZW50aXR5IiwgYWxwaGE9MC42LCBiaW5zPTMwKSArDQogIGxhYnModGl0bGU9IkjDrG5oIDQuNS4gUGjDom4gcGjhu5FpIHPhu5EgZ2nhu50gbMOgbSB2aeG7h2MgbeG7l2kgdHXhuqduIiwNCiAgICAgICB4PSJIb3VycyBwZXIgV2VlayIsIHk9IkNvdW50IiwgZmlsbD0iSW5jb21lIikNCg0KYGBgDQoNCmBgYHtyfQ0KIyBCYXIgY2hhcnQgRnVsbHRpbWUgdnMgUGFydHRpbWUNCmRmX2hvdXJzIDwtIGFzLmRhdGEuZnJhbWUocHJvcC50YWJsZSh0YmxfaG91cnMsMSkpDQpjb2xuYW1lcyhkZl9ob3VycykgPC0gYygiZnVsbHRpbWUiLCJpbmNvbWUiLCJwY3QiKQ0KDQpnZ3Bsb3QoZGZfaG91cnMsIGFlcyh4ID0gZnVsbHRpbWUsIHkgPSBwY3QsIGZpbGwgPSBpbmNvbWUpKSArDQogIGdlb21fY29sKHBvc2l0aW9uID0gImRvZGdlIikgKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpwZXJjZW50KHBjdCwgYWNjdXJhY3kgPSAwLjEpKSwNCiAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjkpLA0KICAgICAgICAgICAgdmp1c3QgPSAtMC4yNSwgc2l6ZSA9IDMpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKGxhYmVscyA9IHNjYWxlczo6cGVyY2VudCkgKw0KICBsYWJzKA0KICAgIHRpdGxlID0gIkjDrG5oIDQuNi4gQmnhu4N1IMSR4buTIHThu7cgbOG7hyB0aHUgbmjhuq1wIHRoZW8gbmjDs20gZ2nhu50gbMOgbSB2aeG7h2MiLA0KICAgIHggPSAiTG/huqFpIGPDtG5nIHZp4buHYyIsDQogICAgeSA9ICJQaOG6p24gdHLEg20iLA0KICAgIGZpbGwgPSAiSW5jb21lIg0KICApDQoNCmBgYA0KKipSaXNrIFJhdGlvKioNCg0KYGBge3J9DQpyaXNrcmF0aW8odGJsX2hvdXJzKQ0KYGBgDQoNClRoZW8gYuG6o25nIGvhur90IHF14bqjLCBuaMOzbSBraMOhY2ggaMOgbmcgbMOgbSB2aeG7h2MgYsOhbiB0aOG7nWkgZ2lhbiAoUGFydHRpbWUpIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSB24bubaSBSUiA9IDEuMDAwMC4NCk5ow7NtIGtow6FjaCBow6BuZyBsw6BtIHZp4buHYyB0b8OgbiB0aOG7nWkgZ2lhbiAoRnVsbHRpbWUpIGPDsyBSUiA9IDQuMDk1OSwgdOG7qWMgbMOgIGto4bqjIG7Eg25nIGPDsyB0aHUgbmjhuq1wIHRyw6puIDUwSyB0cm9uZyBuaMOzbSBsw6BtIHZp4buHYyB0b8OgbiB0aOG7nWkgZ2lhbiBjYW8gZ+G6pXAga2hv4bqjbmcgNC4xMCBs4bqnbiBzbyB24bubaSBuaMOzbSBsw6BtIHZp4buHYyBiw6FuIHRo4budaSBnaWFuLg0KS2hv4bqjbmcgxrDhu5tjIGzGsOG7o25nIHRpbiBj4bqteSA5NSUgY2hvIFJSIGzDoCAoMy42ODAxOyA0LjU1ODcpLg0KQ8OhYyBnacOhIHRy4buLIHAtdmFsdWUgcuG6pXQgbmjhu48gKGfhuqduIDApIGNobyB0aOG6pXkgc+G7sSBraMOhYyBiaeG7h3QgbsOgeSBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHLhuqV0IGNhby4NCg0KKipPZGRzIFJhdGlvKioNCg0KYGBge3J9DQpvZGRzcmF0aW8odGJsX2hvdXJzKQ0KYGBgDQoNClRoZW8gYuG6o25nIGvhur90IHF14bqjLCBuaMOzbSBraMOhY2ggaMOgbmcgbMOgbSB2aeG7h2MgYsOhbiB0aOG7nWkgZ2lhbiAoUGFydHRpbWUpIMSRxrDhu6NjIGNo4buNbiBsw6BtIG5ow7NtIHRoYW0gY2hp4bq/dSB24bubaSBPUiA9IDEuMDAwMC4NCk5ow7NtIGtow6FjaCBow6BuZyBsw6BtIHZp4buHYyB0b8OgbiB0aOG7nWkgZ2lhbiAoRnVsbHRpbWUpIGPDsyBPUiA9IDUuMzA5OCwgdOG7qWMgbMOgIG9kZHMgKHThu7cgbOG7hyBjaMOqbmgpIMSR4buDIG3hu5l0IGtow6FjaCBow6BuZyBsw6BtIHZp4buHYyB0b8OgbiB0aOG7nWkgZ2lhbiBjw7MgdGh1IG5o4bqtcCB0csOqbiA1MEsgY2FvIGfhuqVwIGtob+G6o25nIDUuMzEgbOG6p24gc28gduG7m2kgbeG7mXQga2jDoWNoIGjDoG5nIGzDoG0gdmnhu4djIGLDoW4gdGjhu51pIGdpYW4uDQpLaG/huqNuZyDGsOG7m2MgbMaw4bujbmcgdGluIGPhuq15IDk1JSBjaG8gT1IgbMOgICg0LjczNDk7IDUuOTc1MikuDQpHacOhIHRy4buLIHAtdmFsdWUgZ+G6p24gYuG6sW5nIDAgY2hvIHRo4bqleSBz4buxIGtow6FjIGJp4buHdCBuw6B5IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvLg0KDQpL4bq/dCBxdeG6oyB0aOG7gyBoaeG7h24gbmfGsOG7nWkgbGFvIMSR4buZbmcgdG/DoG4gdGjhu51pIGdpYW4gdGjGsOG7nW5nIGtp4bq/bSDEkcaw4bujYyB0aHUgbmjhuq1wIGNhbyBoxqFuLiBN4bq3YyBkw7kgcGjhuqduIGzhu5tuIHRodSBuaOG6rXAgY2FvIHh14bqldCBwaMOhdCB04burIGzGsMahbmcgdGhlbyBnaeG7nSBjYW8gaG/hurdjIGzDoG0gdGjDqm0gZ2nhu50sIG5oxrBuZyB0aOG7sWMgdOG6vyBsw6AgbMOgbSDEkeG7pyBnaeG7nSBjxaluZyBnw7NwIHBo4bqnbiBxdWFuIHRy4buNbmcgdMSDbmcgdGh1IG5o4bqtcCB0cnVuZyBiw6xuaC4NCg0KIyMgKio0LjIuIFjDonkgZOG7sW5nIHbDoCDEkcOhbmggZ2nDoSBtw7QgaMOsbmggaOG7k2kgcXV5KioNCg0KIyMjICoqNC4yLjEuIE3DtCBow6xuaCBo4buTaSBxdXkgTG9naXN0aWMqKg0KDQpgYGB7cn0NCiMgWMOieSBk4buxbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBMb2dpc3RpYyAobGluayBsb2dpdCkNCm1vZGVsX2xvZ2l0IDwtIGdsbShpbmNvbWUgfiBHRU5ERVIgKyBlZHVjYXRpb25fbnVtICsgYWdlICsgaG91cnNfcGVyX3dlZWssIA0KICAgICAgICAgICAgICAgICAgIGZhbWlseSA9IGJpbm9taWFsKGxpbms9ImxvZ2l0IiksIGRhdGEgPSBhZHVsdCkNCnN1bW1hcnkobW9kZWxfbG9naXQpDQoNCmBgYA0KDQoNCg0KKirDnSBuZ2jEqWEgdGjhu5FuZyBrw6o6KioNCg0KDQpU4bqldCBj4bqjIGPDoWMgaOG7hyBz4buRIMaw4bubYyBsxrDhu6NuZyDEkeG7gXUgY8OzIGdpw6EgdHLhu4sgcC12YWx1ZSBy4bqldCBuaOG7jyAodOG6pXQgY+G6oyDEkeG7gXUgPCAyZS0xNiksIGNobyB0aOG6pXkgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIMSR4buBdSBjw7MgdMOhYyDEkeG7mW5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvIMSR4bq/biBraOG6oyBuxINuZyB0aHUgbmjhuq1wIGNhby4NCg0KKipHaeG6o2kgdGjDrWNoIGPDoWMgaOG7hyBz4buROioqDQoNCg0KLSBJbnRlcmNlcHQgKC05LjEzNDg2OSk6DQpMw6AgxJFp4buDbSBjxqEgYuG6o24ga2hpIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCDEkeG7gXUgYuG6sW5nIDAsIGdpw6EgdHLhu4sgw6JtIHRo4buDIGhp4buHbiB4w6FjIHN14bqldCBjxqEgYuG6o24gcuG6pXQgdGjhuqVwIMSR4buDIHRodSBuaOG6rXAgdsaw4bujdCBuZ8aw4buhbmcuDQoNCi0gR0VOREVSTWFsZSAoMS4xODc0NTEpOg0KSOG7hyBz4buRIGTGsMahbmcgdsOgIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvLCBjaG8gdGjhuqV5IG5hbSBnaeG7m2kgY8OzIGto4bqjIG7Eg25nIGPDsyBt4bupYyB0aHUgbmjhuq1wIGNhbyBoxqFuIMSRw6FuZyBr4buDIHNvIHbhu5tpIG7hu68gZ2nhu5tpIChuaMOzbSB0aGFtIGNoaeG6v3UpLCBraGkgZ2nhu68gY8OhYyB54bq/dSB04buRIGtow6FjIGtow7RuZyDEkeG7lWkuDQoNCi0gZWR1Y2F0aW9uX251bSAoMC4zNTYzNjYpOg0KU+G7kSBuxINtIGjhu41jIHThuq1wIHTEg25nIGzDqm4gbeG7mXQgxJHGoW4gduG7iyBsw6BtIHTEg25nIHjDoWMgc3XhuqV0IHRodSBuaOG6rXAgY2FvLCBwaOG6o24gw6FuaCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4gbMOgIHnhur91IHThu5EgcXVhbiB0cuG7jW5nIOG6o25oIGjGsOG7n25nIHTDrWNoIGPhu7FjIMSR4bq/biB0aHUgbmjhuq1wLg0KDQotIGFnZSAoMC4wNDczNjQpOg0KVHXhu5VpIHTDoWMgY8OzIHTDoWMgxJHhu5luZyB0w61jaCBj4buxYyDEkeG6v24ga2jhuqMgbsSDbmcgdGh1IG5o4bqtcCBjYW87IG3hu5dpIG7Eg20gdHXhu5VpIHTEg25nIGzDoG0gdMSDbmcgbG9nLW9kZHMgKGxvZyB4w6FjIHN14bqldCkgdGh1IG5o4bqtcCBjYW8uDQoNCi0gaG91cnNfcGVyX3dlZWsgKDAuMDM0MDE1KToNClPhu5EgZ2nhu50gbMOgbSB2aeG7h2MgbeG7l2kgdHXhuqduIGPDoG5nIG5oaeG7gXUgY8OgbmcgbMOgbSB0xINuZyBraOG6oyBuxINuZyB0aHUgbmjhuq1wIGNhbyBoxqFuLCB0aOG7gyBoaeG7h24gbmfGsOG7nWkgbMOgbSB2aeG7h2Mgbmhp4buBdSBnaeG7nSBjw7MgeHUgaMaw4bubbmcga2nhur9tIMSRxrDhu6NjIHRodSBuaOG6rXAgdOG7kXQgaMahbi4NCg0KKirEkMOhbmggZ2nDoSB04buVbmcgcXVhbjoqKg0KDQoNCk3DtCBow6xuaCBjaG8gdGjhuqV5IHPhu7EgY+G6o2kgdGhp4buHbiByw7UgcuG7h3Qgc28gduG7m2kgbcO0IGjDrG5oIGtow7RuZyBjw7MgYmnhur9uIGdp4bqjaSB0aMOtY2gsIMSRxrDhu6NjIHRo4buDIGhp4buHbiBxdWEgdmnhu4djIFJlc2lkdWFsIGRldmlhbmNlIGdp4bqjbSB04burIDMzODUwIHh14buRbmcgMjYzNDYuDQoNCkdpw6EgdHLhu4sgQUlDIGzDoCAyNjM1NiwgZMO5bmcgxJHhu4Mgc28gc8OhbmggaGnhu4d1IHF14bqjIG3DtCBow6xuaCB24bubaSBjw6FjIG3DtCBow6xuaCBraMOhYzsgZ2nDoSB0cuG7iyBBSUMgY8Ogbmcgbmjhu48gY8OgbmcgdOG7kXQuDQoNCkPDoWMgYmnhur9uIMSR4buBdSBjw7MgdMOhYyDEkeG7mW5nIHTDrWNoIGPhu7FjIHbDoCDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogbeG6oW5oLCBwaMO5IGjhu6NwIHbhu5tpIGdp4bqjIHRodXnhur90IHbDoCBr4buzIHbhu41uZyB0aOG7sWMgdGnhu4VuIHbhu4EgY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biB0aHUgbmjhuq1wLg0KDQoNCg0KIyMjICoqNC4yLjIuIE3DtCBow6xuaCBo4buTaSBxdXkgUHJvYml0KioNCg0KYGBge3J9DQojIFjDonkgZOG7sW5nIG3DtCBow6xuaCBo4buTaSBxdXkgUHJvYml0IChsaW5rIHByb2JpdCkNCm1vZGVsX3Byb2JpdCA8LSBnbG0oaW5jb21lIH4gR0VOREVSICsgZWR1Y2F0aW9uX251bSArIGFnZSArIGhvdXJzX3Blcl93ZWVrLCANCiAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwobGluaz0icHJvYml0IiksIGRhdGEgPSBhZHVsdCkNCnN1bW1hcnkobW9kZWxfcHJvYml0KQ0KDQpgYGANCg0KDQoNCioqw50gbmdoxKlhIHRo4buRbmcga8OqOioqDQoNCg0KVOG6pXQgY+G6oyBjw6FjIGjhu4cgc+G7kSDEkeG7gXUgY8OzIGdpw6EgdHLhu4sgcCBy4bqldCBuaOG7jyAoxJHhu4F1IDwgMmUtMTYpLCBjaG8gdGjhuqV5IGPDoWMgYmnhur9uIMSR4buBdSBjw7MgdMOhYyDEkeG7mW5nIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogcuG6pXQgY2FvIMSR4buRaSB24bubaSBraOG6oyBuxINuZyB0aHUgbmjhuq1wIGNhby4NCg0KKipHaeG6o2kgdGjDrWNoIGPDoWMgaOG7hyBz4buROioqDQoNCg0KLSBJbnRlcmNlcHQgKC01LjI2NTM2MzkpOg0KTMOgIGjhu4cgc+G7kSBjxqEgYuG6o24ga2hpIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCDEkeG7gXUgYuG6sW5nIDAsIGJp4buDdSB0aOG7iyB4w6FjIHN14bqldCBjxqEgYuG6o24gcuG6pXQgdGjhuqVwIMSR4buDIGPDsyBt4bupYyB0aHUgbmjhuq1wIGNhby4NCg0KLSBHRU5ERVJNYWxlICgwLjY1NTU4NjUpOg0KSOG7hyBz4buRIGTGsMahbmcgdsOgIHLhuqV0IGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6osIGNobyB0aOG6pXkgbmFtIGdp4bubaSBjw7Mga2jhuqMgbsSDbmcgY8OzIHRodSBuaOG6rXAgY2FvIGjGoW4gc28gduG7m2kgbuG7ryBnaeG7m2kgKG5ow7NtIHRoYW0gY2hp4bq/dSksIGtoaSBnaeG7ryBuZ3V5w6puIGPDoWMgeeG6v3UgdOG7kSBraMOhYy4NCg0KLSBlZHVjYXRpb25fbnVtICgwLjIwNDcwNDUpOg0KU+G7kSBuxINtIGjhu41jIHThuq1wIHTEg25nIDEgxJHGoW4gduG7iyBsw6BtIHTEg25nIHjDoWMgc3XhuqV0IGPDsyB0aHUgbmjhuq1wIGNhbywgcGjhuqNuIMOhbmggdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIGzDoCB54bq/dSB04buRIHF1YW4gdHLhu41uZyDhuqNuaCBoxrDhu59uZyB0w61jaCBj4buxYyDEkeG6v24gdGh1IG5o4bqtcC4NCg0KLSBhZ2UgKDAuMDI3NzQ2MSk6DQpUdeG7lWkgdMOhYyBjw7MgdMOhYyDEkeG7mW5nIHTDrWNoIGPhu7FjIGzDqm4ga2jhuqMgbsSDbmcgdGh1IG5o4bqtcCBjYW87IG3hu5dpIG7Eg20gdMSDbmcgdGjDqm0gbMOgbSB0xINuZyBsb2ctb2RkcyB0aHUgbmjhuq1wIGNhby4NCg0KLSBob3Vyc19wZXJfd2VlayAoMC4wMTk1NjIyKToNClPhu5EgZ2nhu50gbMOgbSB2aeG7h2MgbeG7l2kgdHXhuqduIHTEg25nIGzDoG0gdMSDbmcgeMOhYyBzdeG6pXQgdGh1IG5o4bqtcCBjYW8sIHRo4buDIGhp4buHbiBy4bqxbmcgbmfGsOG7nWkgbMOgbSB2aeG7h2Mgbmhp4buBdSBnaeG7nSB0aMaw4budbmcga2nhur9tIMSRxrDhu6NjIHRodSBuaOG6rXAgY2FvIGjGoW4uDQoNCioqxJDDoW5oIGdpw6EgdOG7lW5nIHF1YW46KioNCg0KDQpNw7QgaMOsbmggY8OzIHPhu7EgY+G6o2kgdGhp4buHbiByw7UgcuG7h3Qgc28gduG7m2kgbcO0IGjDrG5oIGtow7RuZyBjw7MgYmnhur9uIGdp4bqjaSB0aMOtY2gsIHRo4buDIGhp4buHbiBxdWEgdmnhu4djIFJlc2lkdWFsIGRldmlhbmNlIGdp4bqjbSB04burIDMzODUwIHh14buRbmcgMjYzMzMuDQoNCkdpw6EgdHLhu4sgQUlDICgyNjM0MykgY2hvIHBow6lwIHNvIHPDoW5oIHbhu5tpIGPDoWMgbcO0IGjDrG5oIGtow6FjLCBtw7QgaMOsbmggY8OzIGdpw6EgdHLhu4sgQUlDIGPDoG5nIHRo4bqlcCBjw6BuZyB04buRdC4NCg0KVOG6pXQgY+G6oyBiaeG6v24gxJHhu5ljIGzhuq1wIHRyb25nIG3DtCBow6xuaCDEkeG7gXUgY8OzIHTDoWMgxJHhu5luZyB0w61jaCBj4buxYyB2w6AgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBjYW8gxJHhu5FpIHbhu5tpIGJp4bq/biBwaOG7pSB0aHXhu5ljLg0KDQoNCiMjIyAqKjQuMi4zLiBNw7QgaMOsbmggaOG7k2kgcXV5IENsb2dsb2cqKg0KDQpgYGB7cn0NCiMgWMOieSBk4buxbmcgbcO0IGjDrG5oIGjhu5NpIHF1eSBDbG9nbG9nIChsaW5rIGNsb2dsb2cpDQptb2RlbF9jbG9nbG9nIDwtIGdsbShpbmNvbWUgfiBHRU5ERVIgKyBlZHVjYXRpb25fbnVtICsgYWdlICsgaG91cnNfcGVyX3dlZWssIA0KICAgICAgICAgICAgICAgICAgICAgZmFtaWx5ID0gYmlub21pYWwobGluaz0iY2xvZ2xvZyIpLCBkYXRhID0gYWR1bHQpDQpzdW1tYXJ5KG1vZGVsX2Nsb2dsb2cpDQoNCmBgYA0KDQoNCioqw50gbmdoxKlhIHRo4buRbmcga8OqOioqDQoNCg0KVOG6pXQgY+G6oyBjw6FjIGjhu4cgc+G7kSDGsOG7m2MgbMaw4bujbmcgxJHhu4F1IGPDsyBnacOhIHRy4buLIHAtdmFsdWUgcuG6pXQgbmjhu48gKMSR4buBdSA8IDJlLTE2KSwgY2hvIHRo4bqleSBjw6FjIGJp4bq/biB0cm9uZyBtw7QgaMOsbmggxJHhu4F1IGPDsyB0w6FjIMSR4buZbmcgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBy4bqldCBjYW8gxJHhu5FpIHbhu5tpIGto4bqjIG7Eg25nIHRodSBuaOG6rXAgY2FvLg0KDQoqKkdp4bqjaSB0aMOtY2ggY8OhYyBo4buHIHPhu5E6KioNCg0KDQotIEludGVyY2VwdCAoLTcuMTQ5MzQ3NSk6DQpMw6AgaOG7hyBz4buRIGfhu5FjIGtoaSB04bqldCBj4bqjIGPDoWMgYmnhur9uIMSR4buZYyBs4bqtcCDEkeG7gXUgYuG6sW5nIDAsIGJp4buDdSB0aOG7iyB4w6FjIHN14bqldCBjxqEgYuG6o24gcuG6pXQgdGjhuqVwIMSR4buDIGPDsyBt4bupYyB0aHUgbmjhuq1wIGNhby4NCg0KLSBHRU5ERVJNYWxlICgwLjk5NzIxMzApOg0KSOG7hyBz4buRIGTGsMahbmcgdsOgIGPDsyDDvSBuZ2jEqWEgcuG6pXQgY2FvLCBjaG8gdGjhuqV5IG5hbSBnaeG7m2kgY8OzIHjDoWMgc3XhuqV0IGNhbyBoxqFuIMSRw6FuZyBr4buDIMSR4buDIMSR4bqhdCBt4bupYyB0aHUgbmjhuq1wIGNhbyBzbyB24bubaSBu4buvIGdp4bubaSAobmjDs20gdGhhbSBjaGnhur91KSwga2hpIGPDoWMgeeG6v3UgdOG7kSBraMOhYyDEkcaw4bujYyBnaeG7ryBj4buRIMSR4buLbmguDQoNCi0gZWR1Y2F0aW9uX251bSAoMC4yNzEyMDkxKToNClPhu5EgbsSDbSBo4buNYyB04bqtcCBjw6BuZyB0xINuZyB0aMOsIHjDoWMgc3XhuqV0IGPDsyB0aHUgbmjhuq1wIGNhbyBjw6BuZyBs4bubbi4gxJBp4buBdSBuw6B5IHBow7kgaOG7o3AgduG7m2kgZ2nhuqMgdGh1eeG6v3QgdHLDrG5oIMSR4buZIGjhu41jIHbhuqVuIOG6o25oIGjGsOG7n25nIHTDrWNoIGPhu7FjIMSR4bq/biB0aHUgbmjhuq1wLg0KDQotIGFnZSAoMC4wMzIwMTAxKToNClR14buVaSB0w6FjIGPDsyB0w6FjIMSR4buZbmcgdMOtY2ggY+G7sWMgbMOqbiBraOG6oyBuxINuZyB0aHUgbmjhuq1wIGNhbzsgbeG7l2kgbeG7mXQgbsSDbSB0xINuZyB0aMOqbSBsw6BtIHTEg25nIGxvZy1vZGRzIHRodSBuaOG6rXAgY2FvLg0KDQotIGhvdXJzX3Blcl93ZWVrICgwLjAyMTg5MjEpOg0KU+G7kSBnaeG7nSBsw6BtIHZp4buHYyBt4buXaSB0deG6p24gdMSDbmcgY8WpbmcgbMOgbSB0xINuZyB4w6FjIHN14bqldCBjw7MgdGh1IG5o4bqtcCBjYW8sIGNobyB0aOG6pXkgbmfGsOG7nWkgbMOgbSB2aeG7h2Mgbmhp4buBdSBnaeG7nSBoxqFuIHRoxrDhu51uZyBraeG6v20gxJHGsOG7o2MgdGh1IG5o4bqtcCB04buRdCBoxqFuLg0KDQoqKsSQw6FuaCBnacOhIHThu5VuZyBxdWFuOioqDQoNCg0KTcO0IGjDrG5oIGPDsyBz4buxIGPhuqNpIHRoaeG7h24gxJHDoW5nIGvhu4Mgc28gduG7m2kgbcO0IGjDrG5oIGtow7RuZyBjw7MgYmnhur9uIGdp4bqjaSB0aMOtY2gsIHRo4buDIGhp4buHbiBxdWEgY2jhu4kgc+G7kSBSZXNpZHVhbCBkZXZpYW5jZSBnaeG6o20gdOG7qyAzMzg1MCB4deG7kW5nIDI2NjU3Lg0KDQpHacOhIHRy4buLIEFJQyA9IDI2NjY3IGTDuW5nIMSR4buDIHNvIHPDoW5oIHbhu5tpIGPDoWMgbcO0IGjDrG5oIGtow6FjLCBnacOhIHRy4buLIGPDoG5nIHRo4bqlcCBtw7QgaMOsbmggY8OgbmcgdOG7kXQuDQoNCk3DtCBow6xuaCBjaG8gdGjhuqV5IHThuqV0IGPhuqMgY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCDEkeG7gXUgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiBt4bqhbmggbeG6vSB2w6AgY8OzIHTDoWMgxJHhu5luZyB0w61jaCBj4buxYyDEkeG6v24geMOhYyBzdeG6pXQgdGh1IG5o4bqtcCBjYW8uDQoNCg0KIyMjICoqNC4yLjMuIEzhu7FhIGNo4buNbiBtw7QgaMOsbmggdOG7kWkgxrB1KioNCg0KYGBge3J9DQojIFNvIHPDoW5oIEFJQyBnaeG7r2EgY8OhYyBtw7QgaMOsbmgNCkFJQyhtb2RlbF9sb2dpdCwgbW9kZWxfcHJvYml0LCBtb2RlbF9jbG9nbG9nKQ0KYGBgDQoNCi0gTcO0IGjDrG5oIExvZ2l0OiBBSUMgfiAyNjM1NS42NC4NCg0KLSBNw7QgaMOsbmggUHJvYml0IGNobyBBSUMgdGjhuqVwIG5o4bqldDogQUlDIH4gMjYzNDMuNDcNCg0KLSBNw7QgaMOsbmggQ2xvZ2xvZzogQUlDIH4yNjY2Ni42Mw0KDQpUaGVvIHRpw6p1IGNow60gQUlDLCBtw7QgaMOsbmggY8OzIGdpw6EgdHLhu4sgQUlDIG5o4buPIG5o4bqldCDEkcaw4bujYyB4ZW0gbMOgIHBow7kgaOG7o3AgbmjhuqV0IChBSUMgY8OgbmcgdGjhuqVwIGPDoG5nIHThu5F0KS4gVHJvbmcgdHLGsOG7nW5nIGjhu6NwIG7DoHksIG3DtCBow6xuaCBQcm9iaXQgbMOgIGzhu7FhIGNo4buNbiB04buRaSDGsHUgdsOsIG7DsyBjw7MgQUlDIHRo4bqlcCBuaOG6pXQuIEPDoWMgbcO0IGjDrG5oIExvZ2l0IHbDoCBDbG9nbG9nIGPDsyBr4bq/dCBxdeG6oyBraMOhIHTGsMahbmcgxJHGsMahbmcgbmjGsG5nIEFJQyBjYW8gaMahbiBt4buZdCBjaMO6dCwgZG8gxJHDsyBtw7QgaMOsbmggUHJvYml0IMSRxrDhu6NjIMawdSB0acOqbi4NCg0KDQpNw7QgaMOsbmggaOG7k2kgcXV5IFByb2JpdCDEkcaw4bujYyBnaeG7ryBs4bqhaSBsw6BtIGvhur90IHF14bqjIGN14buRaSBjw7luZyBkbyBoaeG7h3UgcXXhuqMgZ2nhuqNpIHRow61jaCB04buRdC4gS+G6v3QgcXXhuqMgcGjDom4gdMOtY2ggY2hvIHRo4bqleSBjw6FjIGJp4bq/biBHRU5ERVIsIGVkdWNhdGlvbl9udW0sIGFnZSwgaG91cnNfcGVyX3dlZWsgxJHhu4F1IGPDsyDEkcOzbmcgZ8OzcCBxdWFuIHRy4buNbmcgdsOgIGPDsyBjaGnhu4F1IOG6o25oIGjGsOG7n25nIGThu7EgxJFvw6FuIHRodeG6rW4gduG7m2kga2jhuqMgbsSDbmcgdGh1IG5o4bqtcCBjYW8uIFZp4buHYyBs4buxYSBjaOG7jW4gUHJvYml0IHBow7kgaOG7o3AgduG7m2kga2nhur9uIHRo4bupYyBsw70gdGh1eeG6v3QgduG7gSB2aeG7h2MgY2jhu41uIG3DtCBow6xuaCBuaOG7iyBwaMOibiB0dXnhur9uIHTDrW5oIHbDoCDEkcOhcCDhu6luZyB0acOqdSBjaMOtIG3DtCBow6xuaCBn4buNbiDigJMgZ2nhuqNpIHRow61jaCB04buRdCBuaOG6pXQuDQoNCg0KQ8OhYyB54bq/dSB04buRIGdp4bubaSB0w61uaCwgaOG7jWMgduG6pW4sIHR14buVaSB2w6AgZ2nhu50gbMOgbSB2aeG7h2MgxJHhu4F1IOG6o25oIGjGsOG7n25nIHTDrWNoIGPhu7FjIMSR4bq/biBraOG6oyBuxINuZyB0aHUgbmjhuq1wIGNhbywga2jhu5twIHbhu5tpIGPDoWMgYuG6sW5nIGNo4bupbmcgbmdvw6BpIHRo4buxYyB04bq/LiBNw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2l0IGN14buRaSBjw7luZyBjw7MgdGjhu4MgZMO5bmcgxJHhu4MgZOG7sSDEkW/DoW4geMOhYyBzdeG6pXQgdGh1IG5o4bqtcCBs4bubbiBoxqFuIG3hu6ljIGNobyB0csaw4bubYywgxJHhu5NuZyB0aOG7nWkgY2hvIGvhur90IHF14bqjIHRo4buRbmcga8OqIMSRw6FuZyB0aW4gY+G6rXkuDQoNCg0KKioqDQoNCiMgKipDaMawxqFuZyA1LiBU4buUTkcgS+G6vlQqKg0KDQoqKioNCg0KIyMgKio1LjEuIEvhur90IGx14bqtbioqDQoNCkLDoGkgbmdoacOqbiBj4bupdSBz4butIGThu6VuZyB04bqtcCBk4buvIGxp4buHdSBBZHVsdCBjaOG7iSByw7UgY8OhYyB54bq/dSB04buRIG5oxrAgZ2nhu5tpIHTDrW5oLCB0csOsbmggxJHhu5kgaOG7jWMgduG6pW4sIHR14buVaSB0w6FjIHbDoCBz4buRIGdp4budIGzDoG0gdmnhu4djIGPDsyDhuqNuaCBoxrDhu59uZyDEkcOhbmcga+G7gyDEkeG6v24ga2jhuqMgbsSDbmcgdGh1IG5o4bqtcCBjYW8gKD41MEsgVVNEKSBj4bunYSBjw6EgbmjDom4uIEPhu6UgdGjhu4MsIOG7nyBjw7luZyBjw6FjIMSRaeG7gXUga2nhu4duIGtow6FjLCBuYW0gZ2nhu5tpIGPDsyB4w6FjIHN14bqldCDEkeG6oXQgdGh1IG5o4bqtcCBjYW8gbOG7m24gaMahbiBu4buvIGdp4bubaSBuaGnhu4F1IGzhuqduICh0xrDGoW5nIOG7qW5nIE9S4omIMy42LCBSUuKJiDIuOCksIHBow7kgaOG7o3AgduG7m2kga+G6v3QgcXXhuqMgY+G7p2EgY8OhYyBraOG6o28gc8OhdCBxdeG7kWMgdOG6vyB2w6AgdHJvbmcgbsaw4bubYzogYsOhbyBjw6FvIElMTyBjaG8gYmnhur90IHRodSBuaOG6rXAgY+G7p2EgbuG7ryBnaeG7m2kgY2jhu4kgxJHhuqF0IDcw4oCTOTAlIHNvIHbhu5tpIG5hbSBnaeG7m2ksIHbDoCBHU08gbsSDbSAyMDIzIGPFqW5nIGNobyB0aOG6pXkgbGFvIMSR4buZbmcgbmFtIGPDsyB0aHUgbmjhuq1wIGLDrG5oIHF1w6JuIHRow6FuZyBjYW8gZ+G6pXAgMS4zNyBs4bqnbiBsYW8gxJHhu5luZyBu4buvLiBUcsOsbmggxJHhu5kgaOG7jWMgduG6pW4gY8OgbmcgY2FvIChz4buRIG7Eg20gaOG7jWMgbmhp4buBdSBoxqFuKSB0aMOsIGto4bqjIG7Eg25nIHRodSBuaOG6rXAgdHLDqm4gNTBLIFVTRCBjw6BuZyB0xINuZyByw7UsIG5oxrAgxJHDoyDEkcaw4bujYyBraOG6s25nIMSR4buLbmggdHJvbmcgbmdoacOqbiBj4bupdSBraMOhYy4gTmfGsOG7nWkg4bufIMSR4buZIHR14buVaSB0cnVuZyBuacOqbiAoa2hv4bqjbmcgMzDigJM1MCB0deG7lWkpIGPDsyB04bu3IGzhu4cgdGh1IG5o4bqtcCBjYW8gbmjhuqV0LCB0cm9uZyBraGkgdHXhu5VpIHTDoWMgbOG7m24gaMahbiBoYXkgbmjhu48gaMahbiDEkeG7gXUgZ2nhuqNtIGThuqduLCBwaOG6o24gw6FuaCB2YWkgdHLDsiBj4bunYSBraW5oIG5naGnhu4dtIHbDoCBraOG6oyBuxINuZyB0w61jaCBsdeG7uS4gTmdvw6BpIHJhLCBsYW8gxJHhu5luZyB0b8OgbiB0aOG7nWkgZ2lhbiBjw7MgdOG7tyBs4buHIMSR4bqhdCB0aHUgbmjhuq1wIGNhbyB2xrDhu6N0IHRy4buZaSBzbyB24bubaSBsYW8gxJHhu5luZyBiw6FuIHRo4budaSBnaWFuLg0KDQoNClTDs20gbOG6oWksIG3DtCBow6xuaCBo4buTaSBxdXkgbG9naXQgY3Xhu5FpIGPDuW5nIChjw7MgQUlDIHRo4bqlcCBuaOG6pXQpIMSRw6MgZ2nhuqNpIHRow61jaCB04buRdCBt4buRaSBsacOqbiBo4buHIHRo4buRbmcga8OqIGdp4buvYSBjw6FjIHnhur91IHThu5EgbmjDom4ga2jhuql1IGjhu41jIHbDoCBraOG6oyBuxINuZyB0aHUgbmjhuq1wIGNhby4gS+G6v3QgcXXhuqMgbsOgeSBraMO0bmcgY2jhu4kga2jhu5twIHbhu5tpIGLhurFuZyBjaOG7qW5nIHRo4buxYyBuZ2hp4buHbSB2w6AgbMO9IHRodXnhur90IMSRw6MgYmnhur90LCBtw6AgY8OybiBjaOG7iSByYSByw7UgcsOgbmcgY8OhYyB54bq/dSB04buRIGNow61uaCDEkcOzbmcgdmFpIHRyw7IgY2jhu6cgY2jhu5F0IHRyb25nIHZp4buHYyBk4buxIMSRb8OhbiB0aHUgbmjhuq1wIGNhby4NCg0KIyMgKio1LjIuIEjhuqFuIGNo4bq/IMSR4buBIHTDoGkqKg0KDQpN4buZdCBo4bqhbiBjaOG6vyBxdWFuIHRy4buNbmcgY+G7p2EgbmdoacOqbiBj4bupdSBsw6AgZOG7ryBsaeG7h3Ugc+G7rSBk4bulbmcgxJHGsOG7o2MgdGh1IHRo4bqtcCB2w6BvIG7Eg20gMTk5NCAoY3Xhu5ljIMSRaeG7gXUgdHJhIGTDom4gc+G7kSBIb2EgS+G7sykuIFbDrCB24bqteSwgY8OhYyBr4bq/dCBxdeG6oyBjaOG7iSBwaOG6o24gw6FuaCBxdWFuIGjhu4cgeMOjIGjhu5lpLXRo4buRbmcga8OqIHThuqFpIHRo4budaSDEkWnhu4NtIMSRw7MgdsOgIHRyb25nIGLhu5FpIGPhuqNuaCBraW5oIHThur8g4oCTIHjDoyBo4buZaSDEkcOjIHF1YSBj4bunYSBN4bu5LCBraMOzIGPDsyB0aOG7gyDDoXAgZOG7pW5nIG5ndXnDqm4geGkgY2hvIHTDrG5oIGjDrG5oIGhp4buHbiBuYXkgaG/hurdjIGNobyBjw6FjIHF14buRYyBnaWEga2jDoWMuIA0KDQoNCk5naGnDqm4gY+G7qXUgY8WpbmcgY2jhu4kgeMOpdCBjw6FjIGJp4bq/biDEkcOjIGNobyB0cm9uZyBi4buZIEFkdWx0ICh2w60gZOG7pSBjaMawYSBiYW8gZ+G7k20ga2luaCBuZ2hp4buHbSBj4bulIHRo4buDLCBuZ8Ogbmggbmdo4buBIGNoaSB0aeG6v3QsIGhheSBjw6FjIHnhur91IHThu5Ega2luaCB04bq/IHbEqSBtw7QgbmjGsCB0aHXhur8pLCBuw6puIGPDsyB0aOG7gyBjw7JuIHRoaeG6v3Ugc8OzdCBjw6FjIG5ow6JuIHThu5Ega2jDoWMgY8OzIOG6o25oIGjGsOG7n25nLiBOZ2/DoGkgcmEsIHBoxrDGoW5nIHBow6FwIHBow6JuIHTDrWNoIGNo4bunIHnhur91IGzDoCBtw7QgaMOsbmggaOG7k2kgcXV5IHbDoCBraeG7g20gxJHhu4tuaCB0xrDGoW5nIHF1YW4gKGtow7RuZyBwaOG6o2kgcGjGsMahbmcgcGjDoXAgbmjDom4gcXXhuqMpLCBuw6puIGtow7RuZyB0aOG7gyBraOG6s25nIMSR4buLbmggY2jhuq9jIGNo4bqvbiBt4buRaSBxdWFuIGjhu4cgbmjDom4gcXXhuqMgZ2nhu69hIGPDoWMgeeG6v3UgdOG7kSB24bubaSB0aHUgbmjhuq1wOyBjaOG7iSBjw7MgdGjhu4Mga+G6v3QgbHXhuq1uIHbhu4EgeHUgaMaw4bubbmcgdGjhu5FuZyBrw6ouIE5o4buvbmcgaOG6oW4gY2jhur8gbsOgeSBj4bqnbiDEkcaw4bujYyB4ZW0geMOpdCBj4bqpbiB0aOG6rW4ga2hpIGRp4buFbiBnaeG6o2kga+G6v3QgcXXhuqMgdsOgIMOhcCBk4bulbmcgY2hvIHRo4buxYyB04bq/Lg0KDQojIyAqKjUuMy4gSMOgbSDDvSBjaMOtbmggc8OhY2gqKg0KDQpL4bq/dCBxdeG6oyBuZ2hpw6puIGPhu6l1IGfhu6NpIMO9IGPDoWMgaMaw4bubbmcgY2jDrW5oIHPDoWNoIHNhdSDEkcOieS4NCg0KDQpUaOG7qSBuaOG6pXQsIGRvIGdpw6FvIGThu6VjIGPDsyDhuqNuaCBoxrDhu59uZyB0w61jaCBj4buxYyDEkeG6v24gdGh1IG5o4bqtcCwgdmnhu4djIMSR4bqndSB0xrAgbsOibmcgY2FvIGNo4bqldCBsxrDhu6NuZyB2w6AgdMSDbmcgY8aw4budbmcgdGnhur9wIGPhuq1uIGdpw6FvIGThu6VjICjEkcOgbyB04bqhbyBuZ2jhu4EsIGdpw6FvIGThu6VjIMSR4bqhaSBo4buNYykgbMOgIGPhuqduIHRoaeG6v3QgxJHhu4MgbsOibmcgY2FvIHRodSBuaOG6rXAgZMOibiBjxrAsIG5o4bqldCBsw6AgbmjDs20gdGh1IG5o4bqtcCB0aOG6pXAuIA0KDQoNClRo4bupIGhhaSwgZG8ga2hv4bqjbmcgY8OhY2ggdGh1IG5o4bqtcCB0aGVvIGdp4bubaSB0w61uaCBjw7JuIGzhu5tuLCBjaMOtbmggc8OhY2ggYsOsbmggxJHhurNuZyBnaeG7m2kgdHJvbmcgbGFvIMSR4buZbmcg4oCTIG5oxrAgbWluaCBi4bqhY2ggbMawxqFuZywga2h1eeG6v24ga2jDrWNoIMSRw6BvIHThuqFvIHbDoCB0aMSDbmcgdGnhur9uIGNobyBsYW8gxJHhu5luZyBu4buvIOKAkyBj4bqnbiDEkcaw4bujYyBjaMO6IHRy4buNbmcgxJHhu4MgdGh1IGjhurlwIGtob+G6o25nIGPDoWNoIG7DoHkuDQoNCg0KVGjhu6kgYmEsIGtodXnhur9uIGtow61jaCBsw6BtIHZp4buHYyB0b8OgbiB0aOG7nWkgZ2lhbiB2w6AgcGjDoXQgdHJp4buDbiBr4bu5IG7Eg25nIGzDoG0gdmnhu4djICh0xINuZyBz4buRIGdp4budIGzDoG0gaOG7r3Ugw61jaCkgc+G6vSBnacO6cCBnaWEgdMSDbmcgdGh1IG5o4bqtcCBjaG8gbmfGsOG7nWkgbGFvIMSR4buZbmc7IMSRaeG7gXUgbsOgeSBjw7MgdGjhu4MgaOG7lyB0cuG7oyBi4bqxbmcgY8OhYyBjaMOtbmggc8OhY2gga2h1eeG6v24ga2jDrWNoIHZp4buHYyBsw6BtIOG7lW4gxJHhu4tuaC4gDQoNCg0KQ3Xhu5FpIGPDuW5nLCBkbyB0aHUgbmjhuq1wIHTEg25nIHRoZW8gdHXhu5VpIChraW5oIG5naGnhu4dtKSwgY+G6p24gY8OzIGPDoWMgY2jDrW5oIHPDoWNoIHF1YW4gdMOibSDEkeG6t2MgYmnhu4d0IMSR4bq/biBuaMOzbSBsYW8gxJHhu5luZyB0cuG6uyAoxJHDoG8gdOG6oW8gdsOgIHThuqFvIGPGoSBo4buZaSB2aeG7h2MgbMOgbSBiYW4gxJHhuqd1KSB2w6AgbGFvIMSR4buZbmcgbOG7m24gdHXhu5VpICjEkcOgbyB04bqhbyBs4bqhaSBob+G6t2MgZ2nhu68gY2jDom4gbmjDom4gbOG7sWMgY8OzIHRheSBuZ2jhu4EpLCBnw7NwIHBo4bqnbiBuw6JuZyBjYW8gdGh1IG5o4bqtcCB04buVbmcgdGjhu4MuIA0KDQoNCk5o4buvbmcgaMOgbSDDvSBuw6B5IGN1bmcgY+G6pXAgZ+G7o2kgw70gxJHhu4tuaCBoxrDhu5tuZyBuZ2jhu4EgbmdoaeG7h3AgdsOgIGNow61uaCBzw6FjaCBuaMOibiBs4buxYyBuaOG6sW0gY+G6o2kgdGhp4buHbiB0aHUgbmjhuq1wIGNobyBjw6FjIG5ow7NtIGtow6FjIG5oYXUgdHJvbmcgeMOjIGjhu5lpLg0KDQojIyAqKjUuNC4gSMaw4bubbmcgbmdoacOqbiBj4bupdSB0aeG6v3AgdGhlbyoqDQoNClRyb25nIHTGsMahbmcgbGFpLCBuZ2hpw6puIGPhu6l1IGPDsyB0aOG7gyDEkcaw4bujYyBt4bufIHLhu5luZyB0aGVvIG5oaeG7gXUgaMaw4bubbmcuIEPDsyB0aOG7gyBt4bufIHLhu5luZyBi4buZIGJp4bq/biBnaeG6o2kgdGjDrWNoIChjaOG6s25nIGjhuqFuIHRow6ptIGtpbmggbmdoaeG7h20gbMOgbSB2aeG7h2MsIG5nw6BuaCBuZ2jhu4EgY+G7pSB0aOG7gywgxJHhuqd1IHTGsCB24buRbikgaG/hurdjIHPhu60gZOG7pW5nIGThu68gbGnhu4d1IG3hu5tpIGjGoW4sIHRo4bqtbSBjaMOtIGThu68gbGnhu4d1IHThu6sgY8OhYyBjdeG7mWMga2jhuqNvIHPDoXQgdGhlbyB0aOG7nWkgZ2lhbiDEkeG7gyDEkcOhbmggZ2nDoSB4dSBoxrDhu5tuZyB0aHUgbmjhuq1wIHF1YSBjw6FjIG7Eg20uIEvhu7kgdGh14bqtdCBwaMOibiB0w61jaCBjxaluZyBjw7MgdGjhu4MgxJFhIGThuqFuZyBow7NhIGLhurFuZyBjw6FjaCB0aOG7rSBjw6FjIG3DtCBow6xuaCBo4buNYyBtw6F5IChyYW5kb20gZm9yZXN0LCBib29zdGluZyzigKYpIMSR4buDIHNvIHPDoW5oIGhp4buHdSBxdeG6oyBk4buxIGLDoW8gduG7m2kgbcO0IGjDrG5oIGjhu5NpIHF1eS4gTmdvw6BpIHJhLCB2aeG7h2MgbmdoacOqbiBj4bupdSB0aGVvIHBow6JuIG5ow7NtICh2w60gZOG7pSBuaMOzbSBuZ2jhu4EsIG5ow7NtIGtodSB24buxYykgaG/hurdjIHNvIHPDoW5oIHbhu5tpIGPDoWMgZOG7ryBsaeG7h3UgcXXhu5FjIHThur8gc+G6vSBnacO6cCDEkcOhbmggZ2nDoSB0w61uaCBraMOhaSBxdcOhdCBj4bunYSBr4bq/dCBxdeG6oy4gDQoNCg0KTmjhu69uZyBoxrDhu5tuZyBuZ2hpw6puIGPhu6l1IG7DoHkgc+G6vSBnacO6cCBsw6BtIHPDoW5nIHThu48gaMahbiBjxqEgY2jhur8gdMOhYyDEkeG7mW5nIGPhu6dhIGPDoWMgeeG6v3UgdOG7kSBraW5oIHThur8gLSB4w6MgaOG7mWkgxJHhu5FpIHbhu5tpIHRodSBuaOG6rXAgY8OhIG5ow6JuIHbDoCBuw6JuZyBjYW8gxJHhu5kgdGluIGPhuq15IGPhu6dhIG3DtCBow6xuaCBwaMOibiB0w61jaC4NCg0KKioqIA==