Link Data: https://docs.google.com/spreadsheets/d/1LWdLX6opkxVwGwbkloWFQ8sFwrGIKFDl7BY_z5Khg_Y/edit?usp=sharing

LỜI CẢM ƠN

Trong suốt quá trình học tập môn Phân tích dữ liệu định tính em xin gửi lời cám ơn chân thành đến thầy Trần Mạnh Tường - giảng viên bộ môn Phân tích dữ liệu định tính đã đã tận tình chỉ dạy, truyền đạt những kiến thức quý báo cho em trong thời gian vừa qua để em có đủ kiến thức, điều kiện để thực hiện bài tiểu luận này. Em xin bày tỏ lòng biết ơn đến thầy.

Tuy nhiên, do vốn kiến thức còn nhiều hạn chế nên trong quá trình làm tiêu luận khó tránh khỏi những sai sót, rất mong thầy bỏ qua. Em rất mong nhận được những ý kiến đóng góp của thầy để bản thân có thể học hỏi thêm nhiều kinh nghiệm và hoàn thành tốt hơn trong bài khóa luận tốt nghiệp sắp đến.

Em xin chân thành cảm ơn!

PHẦN MỞ ĐẦU

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

Các công ty, doanh nghiệp kinh doanh luôn mong muốn thương hiệu, sản phẩm của mình chiếm lĩnh được thị trường. Để làm được vậy thì họ phải hiểu được các yếu tố ảnh hưởng đến quyết định mua hàng của người tiêu dùng tại thị trường đó. Vì vậy, việc nắm được quy trình ra quyết định mua hàng của người tiêu dùng đồng nghĩa với việc doanh nghiệp hiểu các giai đoạn khách hàng trải qua để có thể đi đến quyết định cuối cùng là có nên mua sản phẩm hay không. Quyết định này dựa trên sự ảnh hưởng của nhiều yếu tố khác nhau, mỗi người khác nhau sẽ có những tác động khác nhau trên từng yếu tố. Đối với những nhân viên kinh doanh và marketing, sự hiểu biết về các yếu tố này cung cấp một cái nhìn sâu sắc hơn về tâm lý khách hàng và hành trình khách hàng, từ đó giúp doanh nghiệp xây dựng các chiến lược bán hàng, tiếp thị hiệu quả và tăng doanh thu bán hàng. Trong bối cảnh nền kinh tế phát triển như hiện nay, các sàn thương mại điện tử có vai trò quan trọng và được nhiều người dùng tin tưởng sử dung, bên cạnh việc giúp ích cho việc mua sắm, lựa chọn của khách hàng được thuận tiện, nhanh chóng và hiệu quả hơn thì cũng không kém phần cạnh tranh. Do đó, các doanh nghiệp cần hiểu rõ phân khúc khách hàng của mình, nắm bắt được quy trình ra quyết định của khách hàng từ đó đưa ra chiến dịch quảng cáo phù hợp, nhằm thu hút khách hàng và tăng doanh thu bán hàng. Để đánh giá được hiệu suất của chiến dịch quảng cáo có thật sự hiệu quả và có ảnh hưởng đến quyết định mua hàng của khách hàng hay không, tác giả đã lựa chọn đề tài “Phân tích các yếu tố ảnh hưởng đến quyết định mua hàng sau khi xem quảng cáo của khách hàng” nhằm mang lại một cái nhìn tổng quan, thực tế hơn về hiệu quả của các chiến dịch quảng cáo mà Amazon đang triển khai có tác động đến quyết định mua hàng của khách hàng như thế nào.

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

Phân tích và đánh giá các yếu tố ảnh hưởng đến quyết định mua hàng sau khi xem quảng cáo của khách hàng. Kết quả nghiên cứu sẽ cung cấp thông tin và hiểu biết sâu hơn về các yếu tố ảnh hưởng đến quyết định mua hàng sau khi xem quảng cáo của khách hàng, từ đó đưa ra các chiến lược marketing, quảng cáo phù hợp hơn nhằm thu hút khách hàng và cải thiện chỉ số ROI cho doanh nghiệp.

3. Đối tượng, phạm vi nghiên cứu

Đối tượng nghiên cứu: Các khách hàng có hành vi mua sắm, tiêu dùng trên sàn thương mại điện tử Amazon Phạm vi nghiên cứu: Bộ dữ liệu là chỉ số hiệu suất quảng cáo của Amazon cung cấp thông tin toàn diện về hiệu quả của các chiến dịch quảng cáo và quyết định mua hàng của khách hàng cho một khoảng thời gian tuần cụ thể.

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

Phương pháp dữ liệu định tính và phương pháp xử lý số liệu bằng thống kê toán học: Để nắm vững thông tin và số liệu liên quan đến quyết định mua hàng sau khi xem quảng cáo của khách hàng, tác giả sẽ tiến hành một quá trình phân tích số liệu bằng phương pháp thống kê toán học. Các thông số liên quan đến tần suất, phân bố, độ tương quan và độ tương tác giữa các biến sẽ được tính toán. Phần mềm R - một công cụ mạnh mẽ và phổ biến trong lĩnh vực thống kê và xử lý dữ liệu - sẽ hỗ trợ quá trình này. Việc sử dụng phần mềm R sẽ đảm bảo tính chính xác và đáng tin cậy trong việc phân tích số liệu.

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

Phần mở đầu

Chương 1. Tổng quan lý thuyết

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

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

Chương 4. Kết luận

CHƯƠNG 1. TỔNG QUAN LÝ THUYẾT

1.1 Khái niệm về quảng cáo

Quảng cáo là các hình thức giới thiệu hoặc tuyên truyền có thể trả phí hoặc không trả phí thông báo cho người dùng về sản phẩm, dịch vụ, sự kiện nổi bật của công ty,… nhằm thuyết phục người dùng, kích thích nhu cầu và xây dựng lòng trung thành của khách hàng. Đây là một trong những chiến lược Marketing nhằm tăng lượng tiêu thụ sản phẩm của doanh nghiệp. Nhận thấy rằng Quảng cáo xuất hiện cách đây hàng ngàn năm, có lẽ từ khi bắt đầu có thành thị và buôn bán thì cũng có quảng cáo. Mỹ là nước đi đầu trong hoạt động quảng cáo trên các sóng điện từ, không phải ngẫu nhiên mà người ta ví các chương trình quảng cáo của Mỹ là một giấc mơ về nền văn minh Mỹ, một giấc mơ có sức hút kỳ lạ đối với hàng triệu người trên thế giới. Quảng cáo gắn liền với sự phát triển của kinh tế thị trường và nền sản xuất hàng hóa, dịch vụ. Thực tiễn đã chứng minh khoa học và công nghệ phát triển đã kéo theo hoạt động quảng cáo ngày càng sôi động và phong phú hơn, quảng cáo xuất hiện nhiều nơi, được thể hiện bằng nhiều hình thức, truyền tài bằng nhiều phương tiện khác nhau…quảng cáo là hoạt động kinh tế nhưng đồng thời cũng là sự sáng tạo văn hóa và ảnh hưởng đến quyền lợi của người tiêu dùng chính vì vậy cần đặt ra vấn đề trung thực Chiến lược quảng cáo là một kế hoạch toàn diện mô tả cách một doanh nghiệp sẽ sử dụng quảng cáo để thuyết phục khách hàng mục tiêu mua hàng. Một số nội dung có thể đưa vào chiến lược quảng cáo như: Hướng dẫn sử dụng, chân dung khách hàng mục tiêu (lý tưởng), phương tiện quảng cáo sẽ sử dụng, ngân sách quảng cáo hay cách thức quảng cáo trên các phương tiện này.

1.2 Khái niệm quá trình ra quyết định mua hàng của khách hàng

Người tiêu dùng có những cách thức mua khác nhau đối với bất kỳ một sản phẩm nhất định nào. Thông thường khi mua sắm, người tiêu dùng thường trải qua năm giai đoạn: Nhận biết vấn đề, tìm kiếm thông tin, đánh giá các lựa chọn, quyết định mua và hành động mua, phản ứng sau khi mua. Trên thực tế không nhất thiết phải trải qua 5 giai đoạn quyết định mua của người tiêu dùng, nhất là trong những trường hợp mua những mặt hàng ít cần để tâm. Người tiêu dùng có thể bỏ qua hay đảo lại một số giai đoạn.

1.3 Các yếu tố ảnh hưởng đến quyết định mua hàng của khách hàng

  • Nhận biết vấn đề

Quy trình ra quyết định mua hàng của người tiêu dùng bắt đầu từ khi người mua ý thức được vấn đề hay nhu cầu. Nhu cầu có thể bắt nguồn từ những tác nhân kích thích nội tại (như việc người ta đói, khát dẫn đến nhu cầu ăn uống) hay bên ngoài (như việc nhìn thấy một quảng cáo sản phẩm hay dẫn đến nhu cầu phải mua sản phẩm đó).

Khi người mua cảm thấy có sự khác biệt giữa tình trạng thực tế và tình trạng mong muốn đạt đến một ngưỡng nào đó, họ sẽ hình thành nên động cơ thôi thúc hành động hướng vào lớp đối tượng có thể thỏa mãn được mong muốn của mình.

Để tối ưu hóa thương hiệu của mình đến khách hàng, các doanh nghiệp cần tập trung vào việc giúp khách hàng tiềm năng nhận ra và xác định nhu cầu của họ thông qua việc thu thập thông tin người dùng, tạo nội dung xoay quanh nhu cầu của khách hàng và định vị nội dung đó ở nơi khách hàng tiềm năng có thể nhìn thấy như các trang mạng xã hội, các sàn thương mại điện tử,…

  • Tìm kiếm thông tin

Người tiêu dùng có nhu cầu sẽ bắt đầu tìm kiếm thêm thông tin. Nhu cầu càng cấp bách, thông tin ban đầu càng ít, sản phẩm cần mua có giá trị lớn thì càng thôi thúc con người tìm kiếm thông tin.

Mối quan tâm then chốt của người làm Marketing là những nguồn thông tin chủ yếu mà người tiêu dùng tìm đến và ảnh hưởng tương đối của từng nguồn đó đến quyết định mua sắm tiếp sau.

Các nguồn thông tin của người tiêu dùng được chia thành bốn nhóm.

  • Nguồn thông tin cá nhân: Gia đình, bạn bè, hàng xóm, người quen.

  • Nguồn thông tin thương mại: Quảng cáo, nhân viên bán hàng, đại lý, bao bì, triển lãm.

  • Nguồn thông tin công cộng: Các phương tiện thông tin đại chúng, các tổ chức nghiên cứu người tiêu dùng.

  • Nguồn thông tin thực nghiệm: Sờ mó, nghiên cứu và sử dụng sản phẩm.

Nguồn thông tin nào có tác động mạnh tới người tiêu dùng còn tùy thuộc vào loại sản phẩm, đặc tính của khách hàng. Ví dụ về quá trình quyết định mua hàng tại bước 2: Người cẩn thận thường không tin vào quảng cáo, họ phải tìm kiếm thêm các thông tin khác từ các nguồn khác nhau, hay đối với quyết định mua sắm quan trọng như mua ô tô, nhà cửa, hay đi học nước ngoài, thì người ta thường muốn có càng nhiều thông tin càng tốt để tăng độ tin cậy của quyết định.

Người tiêu dùng nhận được nhiều thông tin nhất về sản phẩm từ những nguồn thông tin thương mại, tuy nhiên, những nguồn thông tin cá nhân lại là những nguồn tác động nhiều nhất tới người tiêu dùng. Mỗi nguồn thông tin cũng thực hiện các chức năng khác nhau ở một mức độ nào đó tác động đến quyết định mua sắm.

  • Đánh giá lựa chọn

Trong quá trình quyết định mua hàng của khách hàng thì đây được đánh giá là bước quan trọng nhất. Từ các nhãn hiệu sản phẩm khác nhau đã biết qua giai đoạn tìm kiếm thông tin, khách hàng bắt đầu đánh giá để chọn ra nhãn hiệu, sản phẩm phù hợp với nhu cầu của mình.

Để hiểu rõ việc đánh giá của khách hàng như thế nào, doanh nghiệp cần quan tâm đến các vấn đề sau: Các thuộc tính của sản phẩm mà khách hàng quan tâm, mức độ quan trọng của các thuộc tính đối với khách hàng, niềm tin của khách hàng đối với các nhãn hiệu, độ hữu dụng của các thuộc tính.

Người tiêu dùng xem mỗi sản phẩm như một tập hợp các thuộc tính với những khả năng đem lại những ích lợi tìm kiếm và thỏa mãn nhu cầu khác nhau. Những tính chất mà người mua quan tâm thay đổi tùy theo loại sản phẩm (ví dụ ô tô xe máy quan tâm đến xe có chạy êm không, tiêu thụ xăng ít không…, máy ảnh quan tâm đến độ nét, tốc độ chụp…). Họ sẽ chú ý nhiều nhất đến những tính chất sẽ đem lại cho họ những ích lợi cần tìm kiếm.

Mức độ quan trọng của các thuộc tính khác nhau đối với các nhóm khách hàng khác nhau. Đôi khi, những thuộc tính nổi bật nhất có thể không phải là những thuộc tính quan trọng nhất, thuộc tính này có thể quan trọng với nhóm khách hàng này nhưng lại không quan trọng với nhóm khách hàng khác, một số thuộc tính có thể nổi bật lên là vì người tiêu dùng vừa mới xem một quảng cáo có nhắc tới chúng hơn là họ đã định vị được tầm quan trọng của thuộc tính đó đối với bản thân. Doanh nghiệp cần quan tâm nhiều hơn đến tầm quan trọng của các thuộc tính tồn tại trong sản phẩm để đáp ứng được nhu cầu của người tiêu dùng.

Niềm tin của khách hàng đối với các nhãn hiệu, sản phẩm cũng có ảnh hưởng lớn tới quyết định mua hàng của họ. Người tiêu dùng có khuynh hướng xây dựng cho mình một tập hợp những niềm tin vào các nhãn hiệu. Niềm tin vào nhãn hiệu của người tiêu dùng sẽ thay đổi theo kinh nghiệm của họ và tác động của nhận thức có chọn lọc, bóp méo có chọn lọc và ghi nhớ có chọn lọc. Khi một nhãn hiệu đã chiếm được niềm tin của khách hàng sẽ dễ được họ lựa chọn ở các lần mua tiếp theo. Nhãn hiệu là một tài sản vô hình của công ty, do vậy việc xây dựng một thương hiệu mạnh là cực kỳ quan trọng.

Mỗi thuộc tính của sản phẩm thông thường được người tiêu dùng gán cho một mức độ hữu dụng khác nhau. Khi quyết định mua một sản phẩm, khách hàng luôn có xu hướng chọn sản phẩm có tổng giá trị sử dụng từ các thuộc tính là lớn nhất.

  • Quyết định mua và hành động mua

Ở giai đoạn đánh giá, người tiêu dùng đã hình thành sở thích đối với những nhãn hiệu trong tập lựa chọn. Người tiêu dùng cũng có thể hình thành ý định mua nhãn hiệu ưa thích nhất. Tuy nhiên còn hai yếu tố nữa có thể xen vào giữa ý định mua và quyết định mua hàng.

– Yếu tố đầu tiên là thái độ của người khác (bạn bè, gia đình, đồng nghiệp…). Trước khi quyết định mua hàng, bao giờ người tiêu dùng cũng có xu hướng tham khảo ý kiến từ người thân, hoặc ý kiến những người xung quanh đánh giá về sản phẩm đó. Thái độ của người tiêu dùng có bị tác động bởi thái độ của người xung quanh hay không lại phụ thuộc vào hai đặc điểm: + Thứ nhất là mức độ mãnh liệt ở thái độ phản ứng của người xung quanh về sản phẩm truyền đạt đến người tiêu dùng. + Thứ hai là động cơ làm theo phản ứng của người khác. Thái độ của người khác càng mãnh liệt đồng thời người ta càng gần gũi với người tiêu dùng thì càng có khả năng người tiêu dùng điều chỉnh lại quyết định mua sắm của mình theo người đó. Tuy nhiên, ảnh hưởng của những người khác sẽ trở nên phức tạp khi có một vài người thân cận với người mua có ý kiến trái ngược nhau về sản phẩm người tiêu dùng lựa chọn.

– Yếu tố thứ hai là các yếu tố tình huống bất ngờ. Người tiêu dùng hình thành ý định mua hàng trên cơ sở những yếu tố như (thu nhập dự kiến của gia đình, giá dự kiến và ích lợi dự kiến của sản phẩm). Khi người tiêu dùng sắp sửa hành động thì những yếu tố tình huống bất ngờ có thể xuất hiện đột ngột và làm thay đổi ý định mua hàng, họ nhận thức được những rủi ro có thể gặp phải, không dám chắc về quyết định của mình dẫn đến băn khoăn lo lắng khi mua hàng, họ có thể sẽ hủy bỏ quyết định, hoặc thu thập thêm thông tin hoặc các yếu tố hỗ trợ tích cực để tăng độ tin tưởng vào quyết định của mình.

Vì vậy những sở thích và thậm chí cả những ý định mua hàng cũng không phải là những dấu hiệu hoàn toàn tin cậy báo trước hành vi mua của khách hàng.

  • Phản ứng sau mua

Phản ứng sau mua là bước cuối cùng trong quá trình quyết định mua của người tiêu dùng. Sau khi mua xong, khách hàng sử dụng sản phẩm và có các đánh giá về sản phẩm mua được. Mức độ hài lòng của khách hàng sẽ tác động trực tiếp đến các quyết định mua vào lần sau.

Sự hài lòng hay không của khách hàng sau khi mua phụ thuộc vào mối tương quan giữa sự mong đợi của khách hàng trước khi mua và sự cảm nhận của họ sau khi mua và sử dụng sản phẩm. Khi khách hàng hài lòng, họ sẽ chia sẻ tâm trạng hưng phấn đó cho nhiều người khác. Như vậy, có thể nói khách hàng hài lòng là người quảng cáo miễn phí và hiệu quả nhất cho doanh nghiệp. Ngược lại khi họ không hài lòng, họ cũng sẽ “chia buồn” với nhiều người khác. Điều này làm cho công ty có nhiều nguy cơ mất đi khách hàng tiềm năng.

Doanh nghiệp cần chú trọng tới việc nghiên cứu các yếu tố ảnh hưởng quá trình quyết định mua hàng của người tiêu dùng, đồng thời cũng cần phải tìm hiểu tác động của việc ra quyết định hiện tại dẫn đến sự thay đổi hành vi trong tương lai như thế nào để có thể đề ra chính sách Marketing sao cho phù hợp nhất.

CHƯƠNG 2. PHƯƠNG PHÁP NGHIÊN CỨU

2.1 Dữ liệu nghiên cứu

Dữ liệu nghiên cứu về hiệu suất của chiến dịch quảng cáo trên Amazon thông qua quyết định mua hàng sau khi xem quảng cáo của khách hàng bao gồm từ khóa tìm kiếm, tỷ lệ click, tỷ lệ thêm vào giỏ hàng và quyết định mua hàng. Nó cho phép các doanh nghiệp tối ưu hóa các chiến lược quảng cáo của họ và cải thiện ROI bằng cách phân tích các từ khóa tìm kiếm và sản phẩm phù hợp nhất, đồng thời đưa ra các quyết định dựa trên dữ liệu. Với dữ liệu chính xác và đáng tin cậy, các doanh nghiệp có thể theo dõi hiệu suất quảng cáo của mình và dẫn đầu đối thủ trên Amazon. Dữ liệu bao gồm thông tin của 800 khách hàng tại Amazon và được lấy từ Kaggle.

setwd("F:/")
data <- read.csv("data3.csv")
library(DT)
## Warning: package 'DT' was built under R version 4.3.1
DT::datatable(data)

Dữ liệu nghiên cứu gồm 983 quan sát với 14 biến bao gồm 15 với 6 biến định tính và 8 biến định lượng.

  • Biến định tính

Income level: Mức thu nhập (Cao, Trung bình cao, Trung bình, Trung bình thấp, Thấp)

Age: nhóm tuổi

Search: Từ khóa tìm kiếm

Gender: Giới tính

Country: Quốc gia

Total click: tổng số lần nhấp xem quảng cáo

Purchase: quyết định mua hàng sau khi xem quảng cáo (1: Đồng ý mua, 0: Không đồng ý mua)

  • Biến định lượng

Time: Thời gian dành cho Internet

Search volume: số làn khách hàng sử dụng từ khóa tìm kiếm

Total imp: số lần quảng cáo được hiển thị cho khách hàng trong kết quả tìm kiếm

CLick rate: tỷ lệ nhấp xem quảng cáo

Total cart: tổng số lần thêm vào giỏ hàng

Add rate: tỷ lệ thêm vào giỏ hàng

2.2 Mô hình nghiên cứu

2.2.1 Mô hình hồi quy với hàm logit

Xét biến đáp ứng là biến nhị phân với hai thuộc tính: một gọi là “Thành công” và một gọi là “Thất bại”, chịu sự tác động của một tập hợp m biến \(X=(X_1,X_2,...,X_m)\) mà ta gọi là các biến giải thích. Biến đáp ứng được đại diện, hay lượng hóa bởi biến ngẫu nhiên có phân phối 0 – 1:

Y = 1 nếu đáp ứng là “Thành công” và 0 nếu đáp ứng là “Thất bại”

Mô hình logistic mô tả sự phụ thuộc của biến đáp ứng thông qua xác suất “Thành công” \(π(x)=P(Y=1|X=x)\) ứng với mức \(x=(x_1,x_2,...,x_m)\) của các biến giải thích phụ thuộc vào \(x=(x_1,x_2,...,x_m)\) dưới dạng:

\(log(\frac{π(x)}{(1−π(x))})=β_0+β_1.x_1+β_2.x_2+...+β_m.x_m\)

Trong đó các hằng số \(β_0,β_1,β_2,...,β_m\) được gọi là các hệ số hồi quy. Hệ số \(βj\) của biến \(x_j\) là lượng thay đổi của \(log(\frac{π(x)}{(1−π(x))})\), hay của \(log[Odds(x)]\) khi biến \(xj\) thay đổi 1 đơn vị, trong điều kiện các biến khác không thay đổi, \(j=1,2,…,m\)

  • Nếu \(β_j>0,π(x)\) đồng biến theo \(x_j\), khi các biến khác không thay đổi.

  • Nếu \(β_j<0,π(x)\) nghịch biến theo \(x_j\), khi các biến khác không thay đổi.

  • Nếu \(β_j=0,π(x)\) không phụ thuộc \(xj\)

Khi \(x_j\) tăng thêm 1 đơn vị, còn các biến khác không thay đổi thì tỷ lệ cược \(Odds(x)\) được nhân lên với \(e^(β_j)\) Mô ước lượng cho mô hình hồi quy Logistic là :

\(log(\frac{\hat{π}(x)}{(1−\hat{π}(x))})=\hat{β}_0+\hat{β}_1.x_1+\hat{β}_2.x_2+...+\hat{β}_m.x_m\)

Trong đó các hệ số \(\hat{β}_j\) ước lượng cho hồi quy \(β_j\) được tìm theo phương pháp hợp lý cực đại.

2.2.2 Mô hình hồi quy với hàm probit

Giả sử biến đáp ứng nhị phân với hai giá trị mà ta gọi là “Thành công” và “Thất bại”, phụ thuộc vào m biến giải thích: \(X_1,X_2,...,X_m\). Ký hiệu:

\(X=(X_1,X_2,...,X_m)\)

Y = 1 nếu đáp ứng là “Thành công” và 0 nếu đáp ứng là “Thất bại” thì xác suất “Thành công” ứng với \(X_1=x_1,X_2=x_2,...,X_m=x_m\) là:

\(π(x)=π(x_1,x_2,...,x_m)=E(Y|X_1=x_1,X_2=x_2,...,X_m=x_m)\)

Mô hình Probit đa biến có dạng: \(π(x_1,x_2,...,x_m)=Φ(β_0+β_1x_1+β_2x_2+...+β_mx_m\)

hay: \(Probi(π(x_1,x_2,...,x_m))=β_0+β_1x_1+β_2x_2+...+β_mx_m\)

trong đó ϕ là hàm phân phối chuẩn chính tắc:

\(Φ(t)=\frac{1}{\sqrt{2π}}\int_t^\infty\mathrm{e}^{\frac{-1}{2}u^2}du\)

và Probit là phép lấy hàm ngược của Φ:

\(Probit(π(x_1,x_2,...,x_m))= Φ^{-1}(π(x_1,x_2,...,x_m))\)

2.2.3 Mô hình hồi quy với hàm cloglog

Trong trường hợp tỷ lệ cược phụ thuộc vào các biến giải thích dưới dạng hàm lũy thừa:

\(Odds(x)=\frac{π(x)}{1−π(x)}=λ.x^{β_1}_1.x^{β_2}_2...x^{β_m}_m\)

Ta nhận được mô hình logistic có các biến dự báo ở dạng log, gọi là mô hình logistic dạng log-log

\(log(\frac{π(x)}{1−π(x)})=β_0+β_1.logx_1+β_2.logx_2+...+β_m.logx_m\)

2.3 Các tiêu chí đánh giá mô hình

2.3.1 Chỉ số AIC

AIC được đề xuất bởi Akaike Hirotugu, một nhà thống kê học người Nhật. AIC là một tiêu chí được sử dụng một cách phổ biến để đánh giá một mô hình hồi quy được ước lượng bởi phương pháp Maximum Likelihood. Một cách chung chung giá trị của AIC càng nhỏ thì mô hình càng tốt. AIC được tính bằng công thức sau:

\(AIC=-2ln(L) + 2k\)

Với \(L\) là giá trị cực đại của hàm likelihood function (hàm hợp lý) và \(k\) là tham số của mô hình.

2.3.2 Chỉ số Deviance

Deviance cũng là một tiêu chí rất phổ biến được sử dụng để đánh giá một mô hình hồi quy được ước lượng bởi phương pháp hợp lý cực đại (ML). Một cách tổng quát, cũng giống như chỉ số AIC, giá trị của Deviance càng nhỏ thì mô hình càng tốt.

2.3.3 Chỉ số Brierscore

Là chỉ tiêu dùng để đánh giá mô hình hồi quy logistic, công thức tính chỉ số Brier Score như sau: \(B=\frac{1}{n}\sum_{t=1}^{n}(Y_t-\hat{\pi_t})^2\)

Trong đó \(\hat{\pi_t}\) là giá trị ước lượng của \(\pi(x_i)=E(Y|X=x_i)\) chỉ số brierscore thật chất là trung bình của tổng bình phương các độ lệch giữa giá trị của biến phụ thuộc Y và giá trị ước lượng của nó. Vì vậy chỉ số BrierScore càng nhỏ thì mô hình cho ước lượng càng chính xác, tức là càng phù hợp với dữ liệu quan sát.

2.3.4 Ma trận nhầm lẫn

Ma trận nhầm lẫn là yếu tố giúp so sánh giá trị thực tế và giá trị dự báo: Giá trị dự báo cho quan sát thực tế \(Y_t\)\(\hat{Y_j}=@round(\hat{\pi_j})=1\) nếu \(\hat{\pi_j}>=0.5\) nếu \(\hat{\pi_j}<0.5\)

Nếu \(Y_j=1\)\(\hat{Y_j}=1\), thì \(\hat{Y_j}=1\) được gọi là một dương tính thực,

Nếu \(Y_j=0\)\(\hat{Y_j}=1\), thì \(\hat{Y_j}=1\) được gọi là một dương tính giả,

Nếu \(Y_j=1\)\(\hat{Y_j}=0\), thì \(\hat{Y_j}=0\) được gọi là một âm tính giả,

Nếu \(Y_j=0\)\(\hat{Y_j}=0\), thì \(\hat{Y_j}=0\) được gọi là một âm tính thực,

Nếu \(Y_j=\hat{Y_j}\), thì \(\hat{Y_j}\) được gọi là dự báo đúng hay chính xác, nếu \(Y_j=\hat{Y_j}\) thì \(\hat{Y_j}\) được gọi là dự báo sai hay không chính xác. Ký hiệu TN (True Negative) là số âm tính thực, FN (Fale Negative) là số âm tính giả, FP (Fale Positive) là số dương tính giả, TP (True Positive) là số dương tính thực, ta có: Ma trận: \(\begin{bmatrix} TN & FP \\ FN & TP \\ \end{bmatrix}\) được gọi là ma trận nhầm lẫn (Confusion Matrix) của mô hình. Trong ma trận nhầm lẫn người ta xét các chỉ số sau:

  • Độ chính xác toàn thể \(=\frac{TN+TP}{n}\) (tỷ lệ dự báo đúng trên toàn bộ mẫu)

  • Sai số toàn thể \(=\frac{FN+TP}{n}\) (tỷ lệ dự báo sai trên mẫu)

  • Độ nhạy (sensitivity) \(=\frac{TP}{FN+TP}\) (tỷ lệ dự báo đúng trên tổng số các thành công được quan sát). Độ nhạy càng lớn càng tốt.

  • Sai số âm tính giả (Fale negative error) \(=1-Độ nhạy=\frac{FN}{FN+TP}\)

  • Độ đặc biệt (Specificity) \(\frac{TP}{FN+TP}=\frac{ Số dương tính thực}{Tổng số quan sát có Y = 0}\) Độ đặc hiệu càng lớn càng tốt

  • Sai số dương tính giả \(1-Độ đặc hiệu = \frac{FP}{TN+FP}\)

Một mô hình tốt là mô hình có độ nhạy lớn và độ đặc hiệu lớn.

CHƯƠNG 3. KẾT QUẢ NGHIÊN CỨU

3.1 Thống kê mô tả và đồ thị của từng biến

  • Thống kê mô tả của biến “total click”
setwd("F:/")
data <- read.csv("data3.csv")
table(data$total.click)
## 
##         20-30         30-40         40-50         50-60         60-70 
##            40            24            17            15             6 
##         70-80         80-90        90-100  Less than 10 More than 100 
##            13             5             3           630            18 
##        Oct-20 
##           144
table(data$total.click)/sum(table(data$total.click))
## 
##         20-30         30-40         40-50         50-60         60-70 
##   0.043715847   0.026229508   0.018579235   0.016393443   0.006557377 
##         70-80         80-90        90-100  Less than 10 More than 100 
##   0.014207650   0.005464481   0.003278689   0.688524590   0.019672131 
##        Oct-20 
##   0.157377049
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.1
 data |> ggplot(aes(x = total.click, y = after_stat(count))) + geom_bar(fill = 'lightblue') + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) + theme_classic() + labs(x = 'Click xem quảng cáo', y = 'Frequency')

Với biến định lượng “total.click” có thể thấy tỷ lệ nhấp xem quảng cáo của khách hàng dưới 10 lần chiếm tỷ lệ cao nhất (68.85%), theo sau đó là tỷ lệ nhấp xem quảng cáo từ 10-20 lần (15,73%) và thấp nhất là tỷ lệ nhấp xem quảng cáo từ 90-100 lần (0,33%)

  • Thống kê môt tả của biến “purchase”
table(data$Purchase)
## 
##   0   1 
## 261 654
table(data$Purchase)/sum(table(data$Purchase))
## 
##         0         1 
## 0.2852459 0.7147541
library(ggplot2)
data |> ggplot(aes(x = Purchase, y = after_stat(count))) + geom_bar(fill = 'navy') + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) + theme_classic() + labs(x = 'Đồng ý mua hàng', y = 'Frequency')

Từ biểu đồ trên ta có thể thấy tỷ lệ người đồng ý mua hàng sau khi xem quảng cáo là 71%, trong khi đó tỷ lệ người không đồng ý mua hàng sau khi xem quảng cáo là 29%. Điều này cũng phản ánh mức độ hiệu quả của chiến dịch quảng cáo của Amazon.

  • Thống kê môt tả của biến “Age”
table(data$Age)
## 
##        20-30        30-40        40-50        50-60 Less than 20 More than 60 
##          273          328          201          104            8            1
table(data$Age)/sum(table(data$Age))
## 
##        20-30        30-40        40-50        50-60 Less than 20 More than 60 
##  0.298360656  0.358469945  0.219672131  0.113661202  0.008743169  0.001092896
data |> ggplot(aes(x = Age, y = after_stat(count))) + geom_bar(fill = 'purple') + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) + theme_classic() + labs(x = 'Độ tuổi', y = '')

Dựa trên biểu đồ trên ta có thể thấy nhóm tuổi xem quảng cáo nhiều nhất là 30-40 tuổi (35.85%) theo sau đó là nhóm tuổi 20-30 (29.84%) đây đều là độ tuổi trẻ, có mức thu nhập ổn định và nhu cầu mua hàng, sử dụng sản phẩm cũng nhiều hơn những nhóm tuổi khác, điều này cũng là 1 lợi thế cho Amazon khi biết được nhóm khách hàng tiềm năng của mình.

  • Thống kê môt tả của biến “Gender”
table(data$Gender)
## 
## Female   Male 
##    473    442
table(data$Gender)/sum(table(data$Gender))
## 
##    Female      Male 
## 0.5169399 0.4830601
ggplot(data = data) + geom_bar(mapping = aes(x = Gender, fill= Gender ))

Từ biểu đồ trên ta có thể thấy, tỷ lệ khách hàng là nam chiếm 48.31%, tỷ lệ khách hàng là nữ chiếm 51.69%, điều này cũng ảnh hưởng đến nhu cầu mua sắm và tỷ lệ mua hàng sau khi xem quảng cáo.

  • Thống kê môt tả của biến “Income.level”
table(data$Income.level)
## 
##   High    Low Middle 
##    451     80    384
table(data$Income.level)/sum(table(data$Income.level))
## 
##       High        Low     Middle 
## 0.49289617 0.08743169 0.41967213
data |> ggplot(aes(x = Income.level, y = after_stat(count))) + geom_bar(fill = 'brown') + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) + theme_classic() + labs(x = 'Mức thu nhập', y = '')

Có thể thấy, đối tượng khách hàng xem quảng cáo và mua hàng tại Amazon có mức thu nhập cao chiếm 49.29% trong khi lượng khách hàng có thu nhập thấp chỉ chiếm 8.74%.

  • Thống kê môt tả của biến “Search”
table(data$Search)
## 
##        anxiety toys autism sensory toys         bunmo store   calm corner items 
##                 107                 497                  38                  26 
##              fidget               Gifts              Others        sensroy toys 
##                  58                  14                  14                   5 
##  special needs toys            stim toy         stress toys       stretchy toys 
##                  27                  21                   2                  53 
##        Toys for kid 
##                  53
table(data$Search)/sum(table(data$Search))
## 
##        anxiety toys autism sensory toys         bunmo store   calm corner items 
##         0.116939891         0.543169399         0.041530055         0.028415301 
##              fidget               Gifts              Others        sensroy toys 
##         0.063387978         0.015300546         0.015300546         0.005464481 
##  special needs toys            stim toy         stress toys       stretchy toys 
##         0.029508197         0.022950820         0.002185792         0.057923497 
##        Toys for kid 
##         0.057923497
data |> ggplot(aes(x = Search, y = after_stat(count))) + geom_bar(fill = 'magenta') + geom_text(aes(label = scales::percent(after_stat(count/sum(count)))), stat = 'count', color = 'black', vjust = - .5) + theme_classic() + labs(x = 'Search query', y = '')

Từ biểu đồ có thể thấy, từ khóa được tìm kiếm nhiều nhất là “austism sensory toys” chiếm 54.32% và các từ khóa “sensory toys” và stress toys” được tìm kiếm ít nhất lần lượt với tỷ lệ 0.55% và 0.22%.

3.2 Phân tích thống kê mô tả, đồ thị của biến phụ thuộc và các biến độc lập

3.2.1 Phân tích việc khách hàng đồng ý mua hàng sau khi xem quảng cáo dựa theo giới tính

1. Bảng tần số, tần suất và biểu đồ

  • Bảng tần số
GD1 <- table(data$Gender, data$Purchase)
GD1
##         
##            0   1
##   Female 149 324
##   Male   112 330
  • Bảng tần suất
GD2 <- prop.table(GD1);GD2
##         
##                  0         1
##   Female 0.1628415 0.3540984
##   Male   0.1224044 0.3606557
  • Phân phối biên
addmargins(GD1)
##         
##            0   1 Sum
##   Female 149 324 473
##   Male   112 330 442
##   Sum    261 654 915
  • Biểu đồ cột
library(ggplot2)
gender <- data$Gender
purchase <- data$Purchase
ggplot(data, aes(purchase, fill = gender)) + geom_bar(position = 'dodge')

Thông qua bảng tần số, tần suất và biểu đồ của 2 biến đồng ý mua hàng sau khi xem quảng cáo (purchase) và biến giới tính (Gender) có thể thấy có 261 khách hàng không đồng ý mua hàng sau khi xem quảng cáo trong đó có 149 khách hàng là nữ chiếm 16.28% tổng số khách hàng và có 112 khách hàng là nam chiếm 12.24% tổng số khách hàng. Bên cạnh đó có 654 khách hàng đồng ý mua hàng sau khi xem quảng cáo trong đó có 324 khách hàng là nữ chiếm 35.41% tổng số khách hàng và có 330 khách hàng là nam chiếm 36.07% tổng số khách hàng. Qua biểu đồ có thể thấy số khách hàng đồng ý mua hàng sau khi xem quảng cáo và số khách hàng không đồng ý mua hàng sau khi xem quảng cáo đều có tỷ lệ nữ cao hơn nam.

2. Rủi ro tương đối

  • Relative risk
library(epitools)
riskratio(GD1)
## $data
##         
##            0   1 Total
##   Female 149 324   473
##   Male   112 330   442
##   Total  261 654   915
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate    lower    upper
##   Female 1.000000       NA       NA
##   Male   1.089953 1.004385 1.182811
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male   0.03944387   0.04051131 0.03913801
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Theo kết quả trên cho thấy tỷ lệ rủi ro tương đối của khách hàng đồng ý mua hàng sau khi xem quảng cáo dựa theo giới tính là 1.089953, có nghĩa là tỷ lệ những khách hàng không đồng ý mua hàng sau khi xem quảng cáo là nữ gấp 1.089953 lần tỷ lệ những khách hàng đồng ý mua hàng sau khi xem quảng cáo là nam.

Khi thêm tham số rev = “c” thì sẽ thực hiện việc đổi chỗ 2 cột trong bảng ngẫu nhiên

riskratio(GD1, rev = "c")
## $data
##         
##            1   0 Total
##   Female 324 149   473
##   Male   330 112   442
##   Total  654 261   915
## 
## $measure
##         risk ratio with 95% C.I.
##           estimate     lower     upper
##   Female 1.0000000        NA        NA
##   Male   0.8043973 0.6533312 0.9903936
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   Female         NA           NA         NA
##   Male   0.03944387   0.04051131 0.03913801
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Theo kết quả trên cho thấy tỷ lệ rủi ro tương đối của khách hàng không đồng ý mua hàng sau khi xem quảng cáo dựa theo giới tính là 0.8043973 , có nghĩa là tỷ lệ những khách hàng không đồng ý mua hàng sau khi xem quảng cáo là nam bằng 80.44% tỷ lệ những khách hàng đồng ý mua hàng sau khi xem quảng cáo là nữ.

3. Odd Ratio

epitab(GD1, method = "oddsratio")
## $tab
##         
##            0        p0   1        p1 oddsratio    lower    upper    p.value
##   Female 149 0.5708812 324 0.4954128  1.000000       NA       NA         NA
##   Male   112 0.4291188 330 0.5045872  1.354993 1.014807 1.809217 0.04051131
## 
## $measure
## [1] "wald"
## 
## $conf.level
## [1] 0.95
## 
## $pvalue
## [1] "fisher.exact"

Qua kết quả trên ta thấy tỷ lệ chênh (odd ratio) là 1.354993 có nghĩa là tỷ lệ những khách hàng không đồng ý mua hàng sau khi xem quảng cáo có giới tính là nam bằng 1.354993 tỷ lệ những khách hàng không đồng ý mua hàng sau khi xem quảng cáo có giới tính là nữ.

Khi thêm tham số rev = “c” thì sẽ thực hiện việc đổi chỗ 2 cột trong bảng ngẫu nhiên

epitab(GD1, method = 'riskratio', rev = 'c')
## $tab
##         
##            1        p0   0        p1 riskratio     lower     upper    p.value
##   Female 324 0.6849894 149 0.3150106 1.0000000        NA        NA         NA
##   Male   330 0.7466063 112 0.2533937 0.8043973 0.6533312 0.9903936 0.04051131
## 
## $measure
## [1] "wald"
## 
## $conf.level
## [1] 0.95
## 
## $pvalue
## [1] "fisher.exact"

Qua kết quả trên ta thấy tỷ lệ chênh (odd ratio) của khách hàng đồng ý mua hàng sau khi xem quảng cáo dựa theo giới tính là 0.8043973, có nghĩa là tỷ lệ những khách hàng đồng ý mua hàng sau khi xem quảng cáo là nam bằng 80.44% tỷ lệ những khách hàng đồng ý mua hàng sau khi xem quảng cáo là nữ.

3.2.2 Phân tích việc khách hàng đồng ý mua hàng sau khi xem quảng cáo dựa theo mức thu nhập

1. Bảng tần số, tần suất và biểu đồ

  • Bảng tần số
d2 <- table(data$Income.level, data$Purchase)
d2
##         
##            0   1
##   High   127 324
##   Low     23  57
##   Middle 111 273
  • Bảng tần suất
d3 <- prop.table(d2);d3
##         
##                   0          1
##   High   0.13879781 0.35409836
##   Low    0.02513661 0.06229508
##   Middle 0.12131148 0.29836066
  • Phân phối biên
addmargins(d2)
##         
##            0   1 Sum
##   High   127 324 451
##   Low     23  57  80
##   Middle 111 273 384
##   Sum    261 654 915
  • Biểu đồ cột
library(ggplot2)
income.level <- data$Income.level
purchase <- data$Purchase
ggplot(data, aes(purchase, fill = income.level)) + geom_bar(position = 'dodge')

Thông qua bảng tần số, tần suất và biểu đồ của 2 biến đồng ý mua hàng sau khi xem quảng cáo (purchase) và biến mức thu nhập (income.level) có thể thấy phần lớn khách hàng không đồng ý mua hàng sau khi xem quảng cáo có mức thu nhập từ trung bình đến trung bình cao, cụ thể có 111 khách hàng có thu nhập trung bình không đồng ý mua hàng sau khi xem quảng cáo chiếm tỷ lệ 12.13% tổng số khách hàng và có 127 khách hàng có thu nhập cao không đồng ý mua hàng sau khi xem quảng cáo chiếm tỷ lệ 13.88% tổng số khách hàng. Bên cạnh đó, số lượng lớn khách hàng đồng ý mua hàng sau khi xem quảng cáo cũng nằm trong mức thu nhập từ trung bình đến cao. Cụ thể có 273 khách hàng có thu nhập trung bình đồng ý mua hàng sau khi xem quảng cáo, chiếm tỷ lệ 29.84% tổng số khách hàng và có 324 khách hàng có thu nhập cao đồng ý mua hàng sau khi xem quảng cáo chiếm tỷ lệ 35.41% tổng số khách hàng. Qua biểu đồ có thể thấy đối tượng khách hàng chiếm phần lớn của Amazon có mức thu nhập trung bình đến cao.

2. Rủi ro tương đối

  • Relative risk
library(epitools)
riskratio(d2)
## $data
##         
##            0   1 Total
##   High   127 324   451
##   Low     23  57    80
##   Middle 111 273   384
##   Total  261 654   915
## 
## $measure
##         risk ratio with 95% C.I.
##           estimate     lower    upper
##   High   1.0000000        NA       NA
##   Low    0.9917824 0.8530264 1.153109
##   Middle 0.9896074 0.9080043 1.078544
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   High           NA           NA         NA
##   Low     0.9042911    0.8936275  0.9139243
##   Middle  0.8116739    0.8179618  0.8117385
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Theo kết quả trên cho thấy tỷ lệ rủi ro tương đối của khách hàng không đồng ý mua hàng sau khi xem quảng cáo dựa theo mức thu nhập cao là 0.9917824, có nghĩa là tỷ lệ những khách hàng có thu nhập thấp không đồng ý mua hàng sau khi xem quảng cáo bằng 0.9917824 lần tỷ lệ những khách hàng có thu nhập cao đồng ý mua hàng sau khi xem quảng cáo.

Khi thêm tham số rev = “c” thì sẽ thực hiện việc đổi chỗ 2 cột trong bảng ngẫu nhiên

riskratio(d2, rev = "c")
## $data
##         
##            1   0 Total
##   High   324 127   451
##   Low     57  23    80
##   Middle 273 111   384
##   Total  654 261   915
## 
## $measure
##         risk ratio with 95% C.I.
##          estimate     lower    upper
##   High   1.000000        NA       NA
##   Low    1.020965 0.7015981 1.485706
##   Middle 1.026513 0.8277158 1.273057
## 
## $p.value
##         two-sided
##          midp.exact fisher.exact chi.square
##   High           NA           NA         NA
##   Low     0.9042911    0.8936275  0.9139243
##   Middle  0.8116739    0.8179618  0.8117385
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Theo kết quả trên cho thấy tỷ lệ rủi ro tương đối của khách hàng đồng ý mua hàng sau khi xem quảng cáo dựa theo mức thu nhập là 1.020965, có nghĩa là tỷ lệ những khách hàng có thu nhập thấp đồng ý mua hàng sau khi xem quảng cáo bằng 1.020965 tỷ lệ những khách hàng có thu nhập cao đồng ý mua hàng sau khi xem quảng cáo.

3. Odd Ratio

epitab(d2, method = "oddsratio")
## $tab
##         
##            0         p0   1         p1 oddsratio     lower    upper   p.value
##   High   127 0.48659004 324 0.49541284 1.0000000        NA       NA        NA
##   Low     23 0.08812261  57 0.08715596 0.9714171 0.5741588 1.643537 0.8936275
##   Middle 111 0.42528736 273 0.41743119 0.9640474 0.7132544 1.303024 0.8179618
## 
## $measure
## [1] "wald"
## 
## $conf.level
## [1] 0.95
## 
## $pvalue
## [1] "fisher.exact"

Qua kết quả trên ta thấy tỷ lệ chênh (odd ratio) là 0.5741 có nghĩa là tỷ lệ những khách hàng đồng ý và không đồng ý mua hàng sau khi xem quảng cáo có mức thu nhập cao nhiều hơn 57.41% tỷ lệ những khách hàng đồng ý và không đồng ý mua hàng sau khi xem quảng cáo có mức thu nhập thấp.

Khi thêm tham số rev = “c” thì sẽ thực hiện việc đổi chỗ 2 cột trong bảng ngẫu nhiên

epitab(d2, method = 'riskratio', rev = 'c')
## $tab
##         
##            1        p0   0        p1 riskratio     lower    upper   p.value
##   High   324 0.7184035 127 0.2815965  1.000000        NA       NA        NA
##   Low     57 0.7125000  23 0.2875000  1.020965 0.7015981 1.485706 0.8936275
##   Middle 273 0.7109375 111 0.2890625  1.026513 0.8277158 1.273057 0.8179618
## 
## $measure
## [1] "wald"
## 
## $conf.level
## [1] 0.95
## 
## $pvalue
## [1] "fisher.exact"

Qua kết quả trên ta thấy tỷ lệ chênh (odd ratio) là 0.7125 có nghĩa là tỷ lệ những khách hàng đồng ý và không đồng ý mua hàng sau khi xem quảng cáo có mức thu nhập thấp lớn hơn khoản 71.25% tỷ lệ những khách hàng đồng ý và không đồng ý mua hàng sau khi xem quảng cáo có mức thu nhập cao.

3.2.3 Phân tích việc khách hàng đồng ý mua hàng sau khi xem quảng cáo dựa theo độ tuổi

1. Bảng tần số, tần suất và biểu đồ

  • Bảng tần số
d4 <- table(data$Age, data$Purchase)
d4
##               
##                  0   1
##   20-30         66 207
##   30-40        106 222
##   40-50         52 149
##   50-60         37  67
##   Less than 20   0   8
##   More than 60   0   1
  • Bảng tần suất
d5 <- prop.table(d4);d5
##               
##                          0           1
##   20-30        0.072131148 0.226229508
##   30-40        0.115846995 0.242622951
##   40-50        0.056830601 0.162841530
##   50-60        0.040437158 0.073224044
##   Less than 20 0.000000000 0.008743169
##   More than 60 0.000000000 0.001092896
  • Phân phối biên
addmargins(d4)
##               
##                  0   1 Sum
##   20-30         66 207 273
##   30-40        106 222 328
##   40-50         52 149 201
##   50-60         37  67 104
##   Less than 20   0   8   8
##   More than 60   0   1   1
##   Sum          261 654 915
  • Biểu đồ cột
library(ggplot2)
age <- data$Age
purchase <- data$Purchase
ggplot(data, aes(purchase, fill = age)) + geom_bar(position = 'dodge')

Thông qua bảng tần số, tần suất và biểu đồ của 2 biến đồng ý mua hàng sau khi xem quảng cáo (purchase) và biến độ tuổi (age) có thể thấy phần lớn khách hàng không đồng ý mua hàng sau khi xem quảng cáo có độ tuổi từ 20-40, cụ thể có 66 khách hàng có độ tuổi từ 20-30 tuổi không đồng ý mua hàng sau khi xem quảng cáo chiếm tỷ lệ 7.21% tổng số khách hàng và có 106 khách hàng có độ tuổi từ 30-40 tuổi không đồng ý mua hàng sau khi xem quảng cáo chiếm tỷ lệ 11.58% tổng số khách hàng. Bên cạnh đó, số lượng lớn khách hàng đồng ý mua hàng sau khi xem quảng cáo cũng nằm trong độ tuổi từ 20 đến 40 tuổi. Cụ thể có 207 khách hàng từ 20-30 tuổi đồng ý mua hàng sau khi xem quảng cáo, chiếm tỷ lệ 22.62% tổng số khách hàng và có 328 khách hàng từ 30-40 tuổi đồng ý mua hàng sau khi xem quảng cáo chiếm tỷ lệ 24.26% tổng số khách hàng. Qua biểu đồ có thể thấy đối tượng khách hàng chiếm phần lớn của Amazon nằm trong độ tuổi trẻ từ 20 đến 40 tuổi.

2. Rủi ro tương đối

  • Relative risk
library(epitools)
riskratio(d4)
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect

## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## $data
##               
##                  0   1 Total
##   20-30         66 207   273
##   30-40        106 222   328
##   40-50         52 149   201
##   50-60         37  67   104
##   Less than 20   0   8     8
##   More than 60   0   1     1
##   Total        261 654   915
## 
## $measure
##               risk ratio with 95% C.I.
##                 estimate     lower     upper
##   20-30        1.0000000        NA        NA
##   30-40        0.8926299 0.8073682 0.9868956
##   40-50        0.9776480 0.8796517 1.0865615
##   50-60        0.8496377 0.7256454 0.9948167
##   Less than 20 1.3188406 1.2333964 1.4102039
##   More than 60 1.3188406 1.2333964 1.4102039
## 
## $p.value
##               two-sided
##                midp.exact fisher.exact chi.square
##   20-30                NA           NA         NA
##   30-40        0.02806243   0.02980327  0.0279037
##   40-50        0.67348026   0.74722979  0.6732276
##   50-60        0.02958031   0.02866465  0.0263950
##   Less than 20 0.11383967   0.20473545  0.1118575
##   More than 60 0.75912409   1.00000000  0.5725286
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

Theo kết quả trên cho thấy tỷ lệ rủi ro tương đối của khách hàng không đồng ý mua hàng sau khi xem quảng cáo dựa theo độ tuổi là 0.8926299, có nghĩa là tỷ lệ những khách hàng không đồng ý mua hàng sau khi xem quảng cáo có độ tuổi từ 20-30 bằng 0.8926299 lần tỷ lệ những khách hàng không đồng ý mua hàng sau khi xem quảng cáo có độ tuổi từ 30-40.

3. Odd Ratio

epitab(d4, method = "oddsratio")
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect

## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## $tab
##               
##                  0        p0   1          p1 oddsratio     lower     upper
##   20-30         66 0.2528736 207 0.316513761 1.0000000        NA        NA
##   30-40        106 0.4061303 222 0.339449541 0.6677605 0.4654249 0.9580581
##   40-50         52 0.1992337 149 0.227828746 0.9136009 0.6002661 1.3904944
##   50-60         37 0.1417625  67 0.102446483 0.5773600 0.3544954 0.9403353
##   Less than 20   0 0.0000000   8 0.012232416       Inf       NaN       Inf
##   More than 60   0 0.0000000   1 0.001529052       Inf       NaN       Inf
##               
##                   p.value
##   20-30                NA
##   30-40        0.02980327
##   40-50        0.74722979
##   50-60        0.02866465
##   Less than 20 0.20473545
##   More than 60 1.00000000
## 
## $measure
## [1] "wald"
## 
## $conf.level
## [1] 0.95
## 
## $pvalue
## [1] "fisher.exact"

Qua kết quả trên ta thấy tỷ lệ chênh (odd ratio) là 0.6677605 có nghĩa là tỷ lệ những khách hàng đồng ý và không đồng ý mua hàng sau khi xem quảng cáo có độ tuổi từ 20-30 bằng 66.77% tỷ lệ những khách hàng đồng ý và không đồng ý mua hàng sau khi xem quảng cáo có độ tuổi từ 30-40.

3.2.4 Phân tích việc khách hàng đồng ý mua hàng sau khi xem quảng cáo dựa theo từ khóa tìm kiếm

1. Bảng tần số, tần suất và biểu đồ

  • Bảng tần số
d6 <- table(data$Search, data$Purchase)
d6
##                      
##                         0   1
##   anxiety toys         37  70
##   autism sensory toys 141 356
##   bunmo store          15  23
##   calm corner items     2  24
##   fidget               16  42
##   Gifts                 6   8
##   Others                2  12
##   sensroy toys          4   1
##   special needs toys    7  20
##   stim toy              6  15
##   stress toys           0   2
##   stretchy toys        14  39
##   Toys for kid         11  42
  • Bảng tần suất
d7 <- prop.table(d6);d7
##                      
##                                 0           1
##   anxiety toys        0.040437158 0.076502732
##   autism sensory toys 0.154098361 0.389071038
##   bunmo store         0.016393443 0.025136612
##   calm corner items   0.002185792 0.026229508
##   fidget              0.017486339 0.045901639
##   Gifts               0.006557377 0.008743169
##   Others              0.002185792 0.013114754
##   sensroy toys        0.004371585 0.001092896
##   special needs toys  0.007650273 0.021857923
##   stim toy            0.006557377 0.016393443
##   stress toys         0.000000000 0.002185792
##   stretchy toys       0.015300546 0.042622951
##   Toys for kid        0.012021858 0.045901639
  • Phân phối biên
addmargins(d6)
##                      
##                         0   1 Sum
##   anxiety toys         37  70 107
##   autism sensory toys 141 356 497
##   bunmo store          15  23  38
##   calm corner items     2  24  26
##   fidget               16  42  58
##   Gifts                 6   8  14
##   Others                2  12  14
##   sensroy toys          4   1   5
##   special needs toys    7  20  27
##   stim toy              6  15  21
##   stress toys           0   2   2
##   stretchy toys        14  39  53
##   Toys for kid         11  42  53
##   Sum                 261 654 915
  • Biểu đồ cột
library(ggplot2)
search <- data$Search
purchase <- data$Purchase
ggplot(data, aes(purchase, fill = search)) + geom_bar(position = 'dodge')

Thông qua bảng tần số, tần suất và biểu đồ của 2 biến đồng ý mua hàng sau khi xem quảng cáo (purchase) và biến từ khóa tìm kiếm (search) có thể thấy từ khóa “autism sensory toys” được khách hàng tìm kiếm nhiều nhất với 141 khách hàng không đồng ý mua hàng sau khi xem quảng cáo với từ khóa tìm kiếm “autism sensory toys” chiếm tỷ lệ 15.41%. Bên cạnh đó, số lượng khách hàng đồng ý mua hàng sau khi xem quảng cáo với từ khóa tìm kiếm “autism sensory toys” chiếm tỷ lệ 38.91%.

2. Rủi ro tương đối

  • Relative risk
library(epitools)
riskratio(d6)
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect

## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect

## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect

## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## $data
##                      
##                         0   1 Total
##   anxiety toys         37  70   107
##   autism sensory toys 141 356   497
##   bunmo store          15  23    38
##   calm corner items     2  24    26
##   fidget               16  42    58
##   Gifts                 6   8    14
##   Others                2  12    14
##   sensroy toys          4   1     5
##   special needs toys    7  20    27
##   stim toy              6  15    21
##   stress toys           0   2     2
##   stretchy toys        14  39    53
##   Toys for kid         11  42    53
##   Total               261 654   915
## 
## $measure
##                      risk ratio with 95% C.I.
##                        estimate     lower    upper
##   anxiety toys        1.0000000        NA       NA
##   autism sensory toys 1.0949123 0.9438603 1.270138
##   bunmo store         0.9251880 0.6913261 1.238161
##   calm corner items   1.4109890 1.1822321 1.684009
##   fidget              1.1068966 0.8970029 1.365904
##   Gifts               0.8734694 0.5436877 1.403285
##   Others              1.3102041 1.0159305 1.689717
##   sensroy toys        0.3057143 0.0526782 1.774192
##   special needs toys  1.1322751 0.8710835 1.471784
##   stim toy            1.0918367 0.8059802 1.479078
##   stress toys         1.5285714 1.3318626 1.754333
##   stretchy toys       1.1247978 0.9098121 1.390584
##   Toys for kid        1.2113208 0.9968843 1.471884
## 
## $p.value
##                      two-sided
##                        midp.exact fisher.exact chi.square
##   anxiety toys                 NA           NA         NA
##   autism sensory toys 0.206247637  0.200927232 0.20127039
##   bunmo store         0.592180462  0.694165144 0.58892558
##   calm corner items   0.004740721  0.007280287 0.00690951
##   fidget              0.366307889  0.387577168 0.35835748
##   Gifts               0.552117385  0.562969101 0.54284071
##   Others              0.132872357  0.222009985 0.12655816
##   sensroy toys        0.064768733  0.059182619 0.03933053
##   special needs toys  0.407404568  0.494023200 0.39221878
##   stim toy            0.615393921  0.801037756 0.59406219
##   stress toys         0.434250765  0.547400612 0.30620167
##   stretchy toys       0.304503407  0.368267500 0.29691658
##   Toys for kid        0.073623482  0.098539448 0.07248776
## 
## $correction
## [1] FALSE
## 
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"

3. Odd Ratio

epitab(d6, method = "oddsratio")
## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect

## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect

## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect

## Warning in chisq.test(xx, correct = correction): Chi-squared approximation may
## be incorrect
## $tab
##                      
##                         0          p0   1          p1 oddsratio      lower
##   anxiety toys         37 0.141762452  70 0.107033639 1.0000000         NA
##   autism sensory toys 141 0.540229885 356 0.544342508 1.3345491 0.85645283
##   bunmo store          15 0.057471264  23 0.035168196 0.8104762 0.37798396
##   calm corner items     2 0.007662835  24 0.036697248 6.3428571 1.42025480
##   fidget               16 0.061302682  42 0.064220183 1.3875000 0.68888631
##   Gifts                 6 0.022988506   8 0.012232416 0.7047619 0.22743744
##   Others                2 0.007662835  12 0.018348624 3.1714286 0.67376988
##   sensroy toys          4 0.015325670   1 0.001529052 0.1321429 0.01424862
##   special needs toys    7 0.026819923  20 0.030581040 1.5102041 0.58496492
##   stim toy              6 0.022988506  15 0.022935780 1.3214286 0.47310460
##   stress toys           0 0.000000000   2 0.003058104       Inf        NaN
##   stretchy toys        14 0.053639847  39 0.059633028 1.4724490 0.71022374
##   Toys for kid         11 0.042145594  42 0.064220183 2.0181818 0.93052668
##                      
##                           upper     p.value
##   anxiety toys               NA          NA
##   autism sensory toys  2.079532 0.200927232
##   bunmo store          1.737829 0.694165144
##   calm corner items   28.327197 0.007280287
##   fidget               2.794592 0.387577168
##   Gifts                2.183850 0.562969101
##   Others              14.927885 0.222009985
##   sensroy toys         1.225504 0.059182619
##   special needs toys   3.898894 0.494023200
##   stim toy             3.690882 0.801037756
##   stress toys               Inf 0.547400612
##   stretchy toys        3.052708 0.368267500
##   Toys for kid         4.377153 0.098539448
## 
## $measure
## [1] "wald"
## 
## $conf.level
## [1] 0.95
## 
## $pvalue
## [1] "fisher.exact"

Qua kết quả trên ta thấy tỷ lệ chênh (odd ratio) là 1.3345491 có nghĩa là tỷ lệ những khách hàng đồng ý và không đồng ý mua hàng sau khi xem quảng cáo với từ khóa tìm kiếm “autism sensory toys” bằng 1.3345491 tỷ lệ những khách hàng đồng ý và không đồng ý mua hàng sau khi xem quảng cáo với từ khóa tìm kiếm là “anxiety toys”.

3.2 Thống kê suy diễn

3.2.1 Kiểm định tính độc lập giữa biến phụ thuộc và biến độc lập

  • Kiểm định tính độc lập cho 2 biến purchase và gender
  • Giả thuyết:

\(H_0\): Purchase và gender độc lập

\(H_1\): Purchase và gender không độc lập

setwd("F:/")
data <- read.csv("data3.csv")
chisq.test(GD1)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  GD1
## X-squared = 3.958, df = 1, p-value = 0.04665

Qua kết quả kiểm định cho thấy giá trị p-value = 0.04665 < 5% vì vậy chưa đủ cơ sở để bác bỏ \(H_0\), tức là việc khách hàng quyết định mua hàng sau khi xem quảng cáo (purchase) và giới tính (gender) có liên quan đến nhau.

  • Kiểm định tính độc lập cho 2 biến purchase và income.level
  • Giả thuyết:

\(H_0\): Purchase và income.level độc lập

\(H_1\): Purchase và income.level không độc lập

setwd("F:/")
data <- read.csv("data3.csv")
chisq.test(d2)
## 
##  Pearson's Chi-squared test
## 
## data:  d2
## X-squared = 0.05889, df = 2, p-value = 0.971

Qua kết quả kiểm định cho thấy giá trị p-value = 0.971 > 5% vì vậy có cơ sở để chấp nhận \(H_0\), tức là việc khách hàng quyết định mua hàng sau khi xem quảng cáo (purchase) và mức thu nhập (income.level) độc lập với nhau.

  • Kiểm định tính độc lập cho 2 biến purchase và age
  • Giả thuyết:

\(H_0\): Purchase và age độc lập

\(H_1\): Purchase và age không độc lập

setwd("F:/")
data <- read.csv("data3.csv")
chisq.test(d4)
## Warning in chisq.test(d4): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  d4
## X-squared = 11.669, df = 5, p-value = 0.03961

Qua kết quả kiểm định cho thấy giá trị p-value = 0.03961 < 5% vì vậy chưa có cơ sở để bác bỏ \(H_0\), tức là việc khách hàng quyết định mua hàng sau khi xem quảng cáo (purchase) và độ tuổi (age) liên quan đến nhau.

  • Kiểm định tính độc lập cho 2 biến purchase và search
  • Giả thuyết: \(H_0\): Purchase và search độc lập \(H_1\): Purchase và search không độc lập
setwd("F:/")
data <- read.csv("data3.csv")
chisq.test(d6)
## Warning in chisq.test(d6): Chi-squared approximation may be incorrect
## 
##  Pearson's Chi-squared test
## 
## data:  d6
## X-squared = 21.597, df = 12, p-value = 0.04229

Qua kết quả kiểm định cho thấy giá trị p-value = 0.04229 < 5% vì vậy chưa đủ cơ sở để bác bỏ \(H_0\), tức là việc khách hàng quyết định mua hàng sau khi xem quảng cáo (purchase) và từ khóa tìm kiếm (search) có liên quan đến nhau.

3.2.2 Ước lượng tỷ lệ

  • Ước lượng tỷ lệ khách hàng nam đồng ý mua hàng sau khi xem quảng cáo đồng thời kiểm định xem tỷ lệ khách hàng nam đồng ý mua hàng sau khi xem quảng cáo có phải là 50% không?
pm <- data[data$Gender == "Male",]
prop.test(length(pm$Gender), length(data$Gender), p = 0.5)
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(pm$Gender) out of length(data$Gender), null probability 0.5
## X-squared = 0.98361, df = 1, p-value = 0.3213
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4502770 0.5159872
## sample estimates:
##         p 
## 0.4830601

Với khoảng tin cậy 95% ước lượng tỷ lệ khách hàng nam đồng ý mua hàng sau khi xem quảng cáo nằm trong khoảng từ 45.03% đến 51.6%. Dựa theo kết quả trên ta thấy giá trị p-value = 0.3213 > 0, chấp nhận giả thuyết H0. Do đó tỷ lệ khách hàng nam đồng ý mua hàng sau khi xem quảng cáo bằng 50% với khoảng tin cậy 95%

  • Ước lượng tỷ lệ khách hàng nữ đồng ý mua hàng sau khi xem quảng cáo đồng thời kiểm định xem tỷ lệ khách hàng nam đồng ý mua hàng sau khi xem quảng cáo có phải là 50% không?
pf <- data[data$Gender == "Female",]
prop.test(length(pf$Gender), length(data$Gender), p = 0.50)
## 
##  1-sample proportions test with continuity correction
## 
## data:  length(pf$Gender) out of length(data$Gender), null probability 0.5
## X-squared = 0.98361, df = 1, p-value = 0.3213
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
##  0.4840128 0.5497230
## sample estimates:
##         p 
## 0.5169399

Với khoảng tin cậy 95% ước lượng tỷ lệ khách hàng nữ đồng ý mua hàng sau khi xem quảng cáo nằm trong khoảng từ 48.4% đến 54.97%. Dựa theo kết quả trên ta thấy giá trị p-value = 0.3213 > 0, chấp nhận giả thuyết H0. Do đó tỷ lệ khách hàng nữ đồng ý mua hàng sau khi xem quảng cáo bằng 50% với khoảng tin cậy 95%.

  • Ước lượng sự chênh lệch giữa tỷ lệ khách hàng nam và nữ trong quyết định mua hàng sau khi xem quảng cáo. Đồng thời thực hiện bài toán kiểm định sự chênh lệch này
set.seed(1)
pmm <- data[data$Gender == "Male",]
pmm1 <- pm[pm$Purchase == "1",]
pff <- data[data$Gender == "Female",]
pff1 <- pf[pf$Purchase == "1",]

a <- c(nrow(pmm), nrow(pff))
b <- c(nrow(pmm1), nrow(pff1))
prop.test(b, a)
## 
##  2-sample test for equality of proportions with continuity correction
## 
## data:  b out of a
## X-squared = 3.958, df = 1, p-value = 0.04665
## alternative hypothesis: two.sided
## 95 percent confidence interval:
##  0.001147654 0.122086158
## sample estimates:
##    prop 1    prop 2 
## 0.7466063 0.6849894

Giá trị pvalue = 0.04665 < 0, bác bỏ giả thuyết H0, do đó có sự chênh lệch giữa tỷ lệ khách hàng nam và nữ trong quyết định mua hàng sau khi xem quảng cáo. Với mức ý nghĩa 5%, sự chênh lệch giữa tỷ lệ khách hàng nam và nữ trong quyết định mua hàng sau khi xem quảng cáo nằm trong khoảng từ 0.001147 đến 0.122208.

3.2.3 Ma trận hệ số tương quan

#Chọn các biến số liên tục trong mô hình
continous_vars <- data[, sapply(data, is.numeric)]
#Tính ma trận tương quan
cor_matrix <- cor(continous_vars)
cor_matrix
##               Time search.volume   total.imp  click.rate  total.cart
## Time             1            NA          NA          NA          NA
## search.volume   NA    1.00000000  0.82003855 -0.06014436 -0.01986805
## total.imp       NA    0.82003855  1.00000000 -0.11680551 -0.04211824
## click.rate      NA   -0.06014436 -0.11680551  1.00000000  0.04972353
## total.cart      NA   -0.01986805 -0.04211824  0.04972353  1.00000000
## add.rate        NA   -0.03305097 -0.03277374  0.04086763 -0.10600274
## Purchase        NA   -0.02387918 -0.01000373  0.02317921 -0.05579315
##                  add.rate    Purchase
## Time                   NA          NA
## search.volume -0.03305097 -0.02387918
## total.imp     -0.03277374 -0.01000373
## click.rate     0.04086763  0.02317921
## total.cart    -0.10600274 -0.05579315
## add.rate       1.00000000  0.18468694
## Purchase       0.18468694  1.00000000

3.3 Mô hình hồi quy cho biến phụ thuộc quyết định mua hàng sau khi xem quảng cáo của khách hàng

3.3.1 Mô hình logit

  • Mô hình 1 Mô hình có biến phụ thuộc: purchase và các biến độc lập gồm các biến định tính: gender, age, search và tất cả các biến định lượng
set.seed(1)
model1 <- glm(data = data, formula = factor(data$Purchase) ~ data$Gender + data$Age + data$Search + data$Time + data$search.volume + data$click.rate + data$total.cart + data$total.imp + data$total.click + data$add.rate, family = binomial(link = "logit"))
levels(factor(data$Purchase))
## [1] "0" "1"
summary(model1)
## 
## Call:
## glm(formula = factor(data$Purchase) ~ data$Gender + data$Age + 
##     data$Search + data$Time + data$search.volume + data$click.rate + 
##     data$total.cart + data$total.imp + data$total.click + data$add.rate, 
##     family = binomial(link = "logit"), data = data)
## 
## Coefficients:
##                                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                     7.315e-01  5.980e-01   1.223  0.22124    
## data$GenderMale                 3.198e-01  1.586e-01   2.017  0.04375 *  
## data$Age30-40                  -3.781e-01  1.997e-01  -1.893  0.05839 .  
## data$Age40-50                  -1.191e-03  2.384e-01  -0.005  0.99601    
## data$Age50-60                  -5.235e-01  2.717e-01  -1.927  0.05403 .  
## data$AgeLess than 20            1.419e+01  4.854e+02   0.029  0.97667    
## data$AgeMore than 60            1.411e+01  1.455e+03   0.010  0.99226    
## data$Searchautism sensory toys  2.648e-01  2.441e-01   1.085  0.27797    
## data$Searchbunmo store         -3.038e-01  4.239e-01  -0.717  0.47367    
## data$Searchcalm corner items    1.856e+00  7.797e-01   2.380  0.01732 *  
## data$Searchfidget               1.646e-01  3.829e-01   0.430  0.66736    
## data$SearchGifts               -2.541e-01  6.240e-01  -0.407  0.68389    
## data$SearchOthers               8.379e-01  8.224e-01   1.019  0.30830    
## data$Searchsensroy toys        -2.656e+00  1.278e+00  -2.078  0.03770 *  
## data$Searchspecial needs toys   5.039e-01  5.036e-01   1.001  0.31703    
## data$Searchstim toy             1.655e-01  5.566e-01   0.297  0.76620    
## data$Searchstress toys          1.464e+01  1.029e+03   0.014  0.98864    
## data$Searchstretchy toys        2.787e-01  3.959e-01   0.704  0.48146    
## data$SearchToys for kid         6.446e-01  4.175e-01   1.544  0.12264    
## data$Time                      -3.477e-04  4.969e-03  -0.070  0.94421    
## data$search.volume              5.288e-04  2.013e-03   0.263  0.79284    
## data$click.rate                 2.282e-03  2.817e-03   0.810  0.41787    
## data$total.cart                -1.350e-02  1.015e-02  -1.330  0.18346    
## data$total.imp                  1.472e-04  8.293e-05   1.775  0.07585 .  
## data$total.click30-40          -1.680e+00  6.248e-01  -2.689  0.00717 ** 
## data$total.click40-50          -2.593e-01  8.218e-01  -0.316  0.75235    
## data$total.click50-60          -1.298e+00  7.425e-01  -1.748  0.08047 .  
## data$total.click60-70          -1.881e+00  1.003e+00  -1.875  0.06082 .  
## data$total.click70-80          -1.590e+00  9.085e-01  -1.750  0.08009 .  
## data$total.click80-90          -6.622e-01  1.292e+00  -0.512  0.60838    
## data$total.click90-100         -2.460e+00  1.609e+00  -1.529  0.12628    
## data$total.clickLess than 10   -1.537e-01  4.395e-01  -0.350  0.72658    
## data$total.clickMore than 100  -2.070e+00  1.105e+00  -1.873  0.06100 .  
## data$total.clickOct-20         -3.150e-01  4.592e-01  -0.686  0.49277    
## data$add.rate                   7.615e-02  1.913e-02   3.981 6.87e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1093.37  on 913  degrees of freedom
## Residual deviance:  981.17  on 879  degrees of freedom
##   (1 observation deleted due to missingness)
## AIC: 1051.2
## 
## Number of Fisher Scoring iterations: 14

Kiểm định sự phù hợp của mô hình

Giả thuyết:

\(H_0\): Mô hình không phù hợp

\(H_1\): Mô hình phù hợp

mh1test <- anova(model1, test = "Chisq")
#Lấy giá trị Prob (LR Statistic)
pvalue <- mh1test$Pr[2]
pvalue
## [1] 0.04088854

Qua kết quả kiểm định cho thấy giá trị pvalue = 0.0408 < 5% vì vậy bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.

Hệ số tương quan giữa search.volume và total.imp là 0.8734 khá lớn nên search.volume không thực sự ảnh hưởng đến quyết định mua hàng sau khi xem quảng cáo của khách hàng nên loại biến này. Những biến Time, click.rate và total.cart không có ảnh hưởng đến biến phụ thuộc tại bất kỳ mức ý nghĩa nào nên loại những biến này.

  • Mô hình 2 Mô hình 2 bao gồm những biến trong mô hình 1 bỏ đi biến Search.volume, Time, click.rate và total.cart.
set.seed(1)
model2 <- glm(data = data, formula = factor(data$Purchase) ~ data$Gender + data$Age + data$Search + data$total.imp + data$total.click + data$add.rate, family = binomial(link = "logit"))
levels(factor(data$Purchase))
## [1] "0" "1"
summary(model2)
## 
## Call:
## glm(formula = factor(data$Purchase) ~ data$Gender + data$Age + 
##     data$Search + data$total.imp + data$total.click + data$add.rate, 
##     family = binomial(link = "logit"), data = data)
## 
## Coefficients:
##                                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                     6.547e-01  4.774e-01   1.371  0.17028    
## data$GenderMale                 3.189e-01  1.577e-01   2.022  0.04314 *  
## data$Age30-40                  -3.550e-01  1.971e-01  -1.801  0.07163 .  
## data$Age40-50                   3.019e-02  2.296e-01   0.132  0.89536    
## data$Age50-60                  -5.311e-01  2.652e-01  -2.003  0.04519 *  
## data$AgeLess than 20            1.428e+01  4.852e+02   0.029  0.97653    
## data$AgeMore than 60            1.418e+01  1.455e+03   0.010  0.99223    
## data$Searchautism sensory toys  2.834e-01  2.406e-01   1.178  0.23888    
## data$Searchbunmo store         -2.514e-01  4.187e-01  -0.601  0.54816    
## data$Searchcalm corner items    1.836e+00  7.784e-01   2.359  0.01834 *  
## data$Searchfidget               1.663e-01  3.810e-01   0.437  0.66241    
## data$SearchGifts               -2.338e-01  6.099e-01  -0.383  0.70152    
## data$SearchOthers               8.538e-01  8.205e-01   1.041  0.29807    
## data$Searchsensroy toys        -2.599e+00  1.264e+00  -2.056  0.03981 *  
## data$Searchspecial needs toys   5.236e-01  5.029e-01   1.041  0.29779    
## data$Searchstim toy             1.621e-01  5.559e-01   0.292  0.77060    
## data$Searchstress toys          1.470e+01  1.029e+03   0.014  0.98860    
## data$Searchstretchy toys        2.775e-01  3.956e-01   0.702  0.48299    
## data$SearchToys for kid         6.683e-01  4.151e-01   1.610  0.10737    
## data$total.imp                  1.472e-04  7.848e-05   1.876  0.06070 .  
## data$total.click30-40          -1.652e+00  6.192e-01  -2.668  0.00764 ** 
## data$total.click40-50          -2.014e-01  8.080e-01  -0.249  0.80316    
## data$total.click50-60          -1.264e+00  7.295e-01  -1.733  0.08316 .  
## data$total.click60-70          -1.779e+00  9.838e-01  -1.809  0.07052 .  
## data$total.click70-80          -1.469e+00  8.279e-01  -1.774  0.07611 .  
## data$total.click80-90          -5.322e-01  1.252e+00  -0.425  0.67079    
## data$total.click90-100         -2.413e+00  1.602e+00  -1.507  0.13193    
## data$total.clickLess than 10   -1.579e-01  4.351e-01  -0.363  0.71661    
## data$total.clickMore than 100  -1.877e+00  9.125e-01  -2.057  0.03971 *  
## data$total.clickOct-20         -3.140e-01  4.571e-01  -0.687  0.49223    
## data$add.rate                   7.522e-02  1.877e-02   4.006 6.17e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1094.05  on 914  degrees of freedom
## Residual deviance:  984.07  on 884  degrees of freedom
## AIC: 1046.1
## 
## Number of Fisher Scoring iterations: 14

Kiểm định sự phù hợp của mô hình Giả thuyết:

\(H_0\): Mô hình không phù hợp \(H_1\): Mô hình phù hợp

mh2test <- anova(model2, test = "Chisq")
#Lấy giá trị Prob (LR Statistic)
pvalue <- mh2test$Pr[2]
pvalue
## [1] 0.03884817

Qua kết quả kiểm định cho thấy giá trị pvalue = 0.0388 < 5% vì vậy bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.

3.3.2 Mô hình probit

set.seed(1)
model3 <- glm(data = data, formula = factor(data$Purchase) ~ data$Gender + data$Age + data$Search + data$total.imp + data$total.click + data$add.rate, family = binomial(link = "probit"))
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
levels(factor(data$Purchase))
## [1] "0" "1"
summary(model3)
## 
## Call:
## glm(formula = factor(data$Purchase) ~ data$Gender + data$Age + 
##     data$Search + data$total.imp + data$total.click + data$add.rate, 
##     family = binomial(link = "probit"), data = data)
## 
## Coefficients:
##                                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                     4.039e-01  2.788e-01   1.449  0.14741    
## data$GenderMale                 1.942e-01  9.448e-02   2.056  0.03981 *  
## data$Age30-40                  -2.120e-01  1.178e-01  -1.799  0.07198 .  
## data$Age40-50                   1.238e-02  1.363e-01   0.091  0.92762    
## data$Age50-60                  -3.334e-01  1.604e-01  -2.079  0.03763 *  
## data$AgeLess than 20            4.583e+00  1.233e+02   0.037  0.97033    
## data$AgeMore than 60            4.366e+00  3.768e+02   0.012  0.99075    
## data$Searchautism sensory toys  1.735e-01  1.464e-01   1.185  0.23582    
## data$Searchbunmo store         -1.489e-01  2.574e-01  -0.579  0.56285    
## data$Searchcalm corner items    1.032e+00  3.998e-01   2.583  0.00980 ** 
## data$Searchfidget               1.134e-01  2.314e-01   0.490  0.62419    
## data$SearchGifts               -1.458e-01  3.780e-01  -0.386  0.69977    
## data$SearchOthers               5.069e-01  4.649e-01   1.090  0.27556    
## data$Searchsensroy toys        -1.464e+00  6.879e-01  -2.128  0.03333 *  
## data$Searchspecial needs toys   3.027e-01  2.991e-01   1.012  0.31150    
## data$Searchstim toy             1.048e-01  3.368e-01   0.311  0.75571    
## data$Searchstress toys          4.677e+00  2.664e+02   0.018  0.98599    
## data$Searchstretchy toys        1.617e-01  2.378e-01   0.680  0.49642    
## data$SearchToys for kid         3.941e-01  2.450e-01   1.608  0.10777    
## data$total.imp                  8.945e-05  4.543e-05   1.969  0.04898 *  
## data$total.click30-40          -1.041e+00  3.669e-01  -2.838  0.00455 ** 
## data$total.click40-50          -8.762e-02  4.677e-01  -0.187  0.85138    
## data$total.click50-60          -7.615e-01  4.384e-01  -1.737  0.08241 .  
## data$total.click60-70          -1.090e+00  6.002e-01  -1.817  0.06926 .  
## data$total.click70-80          -8.731e-01  4.947e-01  -1.765  0.07759 .  
## data$total.click80-90          -2.977e-01  7.220e-01  -0.412  0.68010    
## data$total.click90-100         -1.468e+00  9.862e-01  -1.489  0.13654    
## data$total.clickLess than 10   -8.958e-02  2.520e-01  -0.356  0.72219    
## data$total.clickMore than 100  -1.138e+00  5.464e-01  -2.083  0.03721 *  
## data$total.clickOct-20         -1.872e-01  2.665e-01  -0.702  0.48240    
## data$add.rate                   4.130e-02  9.670e-03   4.271 1.95e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1094.05  on 914  degrees of freedom
## Residual deviance:  983.57  on 884  degrees of freedom
## AIC: 1045.6
## 
## Number of Fisher Scoring iterations: 14

Kiểm định sự phù hợp của mô hình

Giả thuyết:

\(H_0\): Mô hình không phù hợp

\(H_1\): Mô hình phù hợp

mh3test <- anova(model3, test = "Chisq")
#Lấy giá trị Prob (LR Statistic)
pvalue <- mh3test$Pr[2]
pvalue
## [1] 0.03884817

Qua kết quả kiểm định cho thấy giá trị pvalue = 0.0388 < 5% vì vậy bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.

3.3.3 Mô hình cloglog

set.seed(1)
model4 <- glm(data = data, formula = factor(data$Purchase) ~ data$Gender + data$Age + data$Search + data$total.imp + data$total.click + data$add.rate, family = binomial(link = "cloglog"))
## Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
levels(factor(data$Purchase))
## [1] "0" "1"
summary(model4)
## 
## Call:
## glm(formula = factor(data$Purchase) ~ data$Gender + data$Age + 
##     data$Search + data$total.imp + data$total.click + data$add.rate, 
##     family = binomial(link = "cloglog"), data = data)
## 
## Coefficients:
##                                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                     1.389e-02  2.589e-01   0.054  0.95721    
## data$GenderMale                 1.972e-01  9.134e-02   2.159  0.03088 *  
## data$Age30-40                  -2.016e-01  1.131e-01  -1.783  0.07459 .  
## data$Age40-50                   6.847e-03  1.282e-01   0.053  0.95742    
## data$Age50-60                  -3.426e-01  1.602e-01  -2.138  0.03250 *  
## data$AgeLess than 20            2.542e+00  3.282e+01   0.077  0.93825    
## data$AgeMore than 60            2.295e+00  1.072e+02   0.021  0.98292    
## data$Searchautism sensory toys  1.836e-01  1.477e-01   1.243  0.21399    
## data$Searchbunmo store         -1.416e-01  2.711e-01  -0.522  0.60147    
## data$Searchcalm corner items    9.071e-01  3.156e-01   2.875  0.00405 ** 
## data$Searchfidget               1.403e-01  2.300e-01   0.610  0.54187    
## data$SearchGifts               -1.283e-01  4.119e-01  -0.311  0.75550    
## data$SearchOthers               4.785e-01  4.040e-01   1.184  0.23627    
## data$Searchsensroy toys        -1.857e+00  1.043e+00  -1.780  0.07503 .  
## data$Searchspecial needs toys   2.700e-01  2.857e-01   0.945  0.34461    
## data$Searchstim toy             1.337e-01  3.317e-01   0.403  0.68685    
## data$Searchstress toys          2.573e+00  7.579e+01   0.034  0.97292    
## data$Searchstretchy toys        1.616e-01  2.316e-01   0.698  0.48533    
## data$SearchToys for kid         3.654e-01  2.307e-01   1.584  0.11320    
## data$total.imp                  1.016e-04  4.994e-05   2.035  0.04183 *  
## data$total.click30-40          -1.147e+00  3.844e-01  -2.985  0.00283 ** 
## data$total.click40-50          -5.116e-02  4.173e-01  -0.123  0.90243    
## data$total.click50-60          -7.749e-01  4.488e-01  -1.727  0.08422 .  
## data$total.click60-70          -1.157e+00  6.637e-01  -1.743  0.08135 .  
## data$total.click70-80          -8.631e-01  5.076e-01  -1.700  0.08905 .  
## data$total.click80-90          -3.067e-01  6.433e-01  -0.477  0.63350    
## data$total.click90-100         -1.620e+00  1.127e+00  -1.438  0.15043    
## data$total.clickLess than 10   -5.339e-02  2.286e-01  -0.234  0.81531    
## data$total.clickMore than 100  -1.287e+00  6.181e-01  -2.083  0.03728 *  
## data$total.clickOct-20         -1.549e-01  2.425e-01  -0.639  0.52286    
## data$add.rate                   3.642e-02  7.826e-03   4.654 3.26e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1094.05  on 914  degrees of freedom
## Residual deviance:  981.65  on 884  degrees of freedom
## AIC: 1043.7
## 
## Number of Fisher Scoring iterations: 13

Kiểm định sự phù hợp của mô hình

Giả thuyết:

\(H_0\): Mô hình không phù hợp

\(H_1\): Mô hình phù hợp

mh4test <- anova(model4, test = "Chisq")
#Lấy giá trị Prob (LR Statistic)
pvalue <- mh4test$Pr[2]
pvalue
## [1] 0.03884817

Qua kết quả kiểm định cho thấy giá trị pvalue = 0.0388 < 5% vì vậy bác bỏ giả thuyết H0 nên mô hình phù hợp với dữ liệu.

3.4 Lựa chọn mô hình phù hợp giữa mô hình logit, probit và cloglog

Để đánh giá các mô hình hồi quy trên ta sẽ sử dụng thêm những tiêu chí sau để lựa chọn mô hình phù hợp vì sau khi thực hiện kiểm định sự phù hợp của cả 3 mô hình: logit, probit và cloglog đều cho ra kết quả mô hình phù hợp với dữ liệu.

3.4.1 AIC

aic1 <- AIC(model2)
aic2 <- AIC(model3)
aic3 <- AIC(model4)
AIC <- cbind(aic1,aic2,aic3)
AIC
##          aic1     aic2     aic3
## [1,] 1046.069 1045.571 1043.652

AIC(logit) = 1046.069

AIC(probit) = 1045.571

AIC(cloglog) = 1043.652

Mô hình cloglog có AIC nhỏ nhất nên ta chọn mô hình này.

3.4.2 Deviance

de1 <- deviance(model2)
de2 <- deviance(model3)
de3 <- deviance(model4)
deviance <- cbind(de1,de2,de3)
deviance
##           de1      de2     de3
## [1,] 984.0691 983.5708 981.652

Deviance(logit) = 984.0691

Deviance(probit) = 983.5708

Deviance(cloglog) = 981.652

Mô hình Cloglog có Deviance nhỏ nhất nên ta chọn mô hình này.

3.4.3 Brier Score

Trong 3 tiêu chí trên ta thấy các giá trị AIC, Deviance và BrierScore của mô hình cloglog là nhỏ nhất, tức là mô hình cloglog là mô hình phù hợp nhất trong cả 3 mô hình.

3.4.4 Ma trận nhầm lẫn

  • Mô hình logit
library(caret)
## Warning: package 'caret' was built under R version 4.3.1
## Loading required package: lattice
predictions <- predict(model2, newdata = model2$data, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0")  

predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(model2$data$Purchase, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
## 
##             actual
## predictions1   0   1
##            0  22  23
##            1 239 631
##                                           
##                Accuracy : 0.7137          
##                  95% CI : (0.6832, 0.7428)
##     No Information Rate : 0.7148          
##     P-Value [Acc > NIR] : 0.5458          
##                                           
##                   Kappa : 0.0654          
##                                           
##  Mcnemar's Test P-Value : <2e-16          
##                                           
##             Sensitivity : 0.08429         
##             Specificity : 0.96483         
##          Pos Pred Value : 0.48889         
##          Neg Pred Value : 0.72529         
##              Prevalence : 0.28525         
##          Detection Rate : 0.02404         
##    Detection Prevalence : 0.04918         
##       Balanced Accuracy : 0.52456         
##                                           
##        'Positive' Class : 0               
## 

Mô hình logit có độc chính xác toàn thể là 71.37%, độ nhạy là 8.43% và độ hiệu quả là 96.48%.

  • Mô hình probit
predictions <- predict(model3, newdata = model3$data, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0")  

predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(model3$data$Purchase, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
## 
##             actual
## predictions1   0   1
##            0  23  23
##            1 238 631
##                                           
##                Accuracy : 0.7148          
##                  95% CI : (0.6843, 0.7438)
##     No Information Rate : 0.7148          
##     P-Value [Acc > NIR] : 0.5167          
##                                           
##                   Kappa : 0.0704          
##                                           
##  Mcnemar's Test P-Value : <2e-16          
##                                           
##             Sensitivity : 0.08812         
##             Specificity : 0.96483         
##          Pos Pred Value : 0.50000         
##          Neg Pred Value : 0.72612         
##              Prevalence : 0.28525         
##          Detection Rate : 0.02514         
##    Detection Prevalence : 0.05027         
##       Balanced Accuracy : 0.52648         
##                                           
##        'Positive' Class : 0               
## 

Mô hình probit có độc chính xác toàn thể là 71.48%, độ nhạy là 8.81% và độ hiệu quả là 96.48%.

  • Mô hình cloglog
predictions <- predict(model4, newdata = model4$data, type = "response")
predicted_classes <- ifelse(predictions > 0.5, "1", "0")  

predictions1<-factor(predicted_classes, levels = c("0","1"))
actual<- factor(model4$data$Purchase, labels = c("0","1"))
confusionMatrix(table(predictions1, actual))
## Confusion Matrix and Statistics
## 
##             actual
## predictions1   0   1
##            0  21  19
##            1 240 635
##                                           
##                Accuracy : 0.7169          
##                  95% CI : (0.6865, 0.7459)
##     No Information Rate : 0.7148          
##     P-Value [Acc > NIR] : 0.4583          
##                                           
##                   Kappa : 0.0689          
##                                           
##  Mcnemar's Test P-Value : <2e-16          
##                                           
##             Sensitivity : 0.08046         
##             Specificity : 0.97095         
##          Pos Pred Value : 0.52500         
##          Neg Pred Value : 0.72571         
##              Prevalence : 0.28525         
##          Detection Rate : 0.02295         
##    Detection Prevalence : 0.04372         
##       Balanced Accuracy : 0.52570         
##                                           
##        'Positive' Class : 0               
## 

Mô hình logit có độc chính xác toàn thể là 71.69%, độ nhạy là 8.05% và độ hiệu quả là 97.095%.

Dựa vào kết quả trên có thể thấy mô hình probit có độ nhạy cao nhất và mô hình cloglog có độ chính xác toàn thể và độ hiệu quả là cao nhất trong cả 3 mô hình, vì vậy mô hình lựa chọn là mô hình cloglog.

Kết luận: Dựa vào 4 tiêu chuẩn ta thấy mô hình cloglog là mô hình được lựa chọn nhiều nhất do đó MH cloglog được lựa chọn để phân tích quyết định mua hàng sau khi xem quảng cáo của khách hàng.

3.5 Mô hình cloglog

summary(model4)
## 
## Call:
## glm(formula = factor(data$Purchase) ~ data$Gender + data$Age + 
##     data$Search + data$total.imp + data$total.click + data$add.rate, 
##     family = binomial(link = "cloglog"), data = data)
## 
## Coefficients:
##                                  Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                     1.389e-02  2.589e-01   0.054  0.95721    
## data$GenderMale                 1.972e-01  9.134e-02   2.159  0.03088 *  
## data$Age30-40                  -2.016e-01  1.131e-01  -1.783  0.07459 .  
## data$Age40-50                   6.847e-03  1.282e-01   0.053  0.95742    
## data$Age50-60                  -3.426e-01  1.602e-01  -2.138  0.03250 *  
## data$AgeLess than 20            2.542e+00  3.282e+01   0.077  0.93825    
## data$AgeMore than 60            2.295e+00  1.072e+02   0.021  0.98292    
## data$Searchautism sensory toys  1.836e-01  1.477e-01   1.243  0.21399    
## data$Searchbunmo store         -1.416e-01  2.711e-01  -0.522  0.60147    
## data$Searchcalm corner items    9.071e-01  3.156e-01   2.875  0.00405 ** 
## data$Searchfidget               1.403e-01  2.300e-01   0.610  0.54187    
## data$SearchGifts               -1.283e-01  4.119e-01  -0.311  0.75550    
## data$SearchOthers               4.785e-01  4.040e-01   1.184  0.23627    
## data$Searchsensroy toys        -1.857e+00  1.043e+00  -1.780  0.07503 .  
## data$Searchspecial needs toys   2.700e-01  2.857e-01   0.945  0.34461    
## data$Searchstim toy             1.337e-01  3.317e-01   0.403  0.68685    
## data$Searchstress toys          2.573e+00  7.579e+01   0.034  0.97292    
## data$Searchstretchy toys        1.616e-01  2.316e-01   0.698  0.48533    
## data$SearchToys for kid         3.654e-01  2.307e-01   1.584  0.11320    
## data$total.imp                  1.016e-04  4.994e-05   2.035  0.04183 *  
## data$total.click30-40          -1.147e+00  3.844e-01  -2.985  0.00283 ** 
## data$total.click40-50          -5.116e-02  4.173e-01  -0.123  0.90243    
## data$total.click50-60          -7.749e-01  4.488e-01  -1.727  0.08422 .  
## data$total.click60-70          -1.157e+00  6.637e-01  -1.743  0.08135 .  
## data$total.click70-80          -8.631e-01  5.076e-01  -1.700  0.08905 .  
## data$total.click80-90          -3.067e-01  6.433e-01  -0.477  0.63350    
## data$total.click90-100         -1.620e+00  1.127e+00  -1.438  0.15043    
## data$total.clickLess than 10   -5.339e-02  2.286e-01  -0.234  0.81531    
## data$total.clickMore than 100  -1.287e+00  6.181e-01  -2.083  0.03728 *  
## data$total.clickOct-20         -1.549e-01  2.425e-01  -0.639  0.52286    
## data$add.rate                   3.642e-02  7.826e-03   4.654 3.26e-06 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1094.05  on 914  degrees of freedom
## Residual deviance:  981.65  on 884  degrees of freedom
## AIC: 1043.7
## 
## Number of Fisher Scoring iterations: 13

3.5.1 Kết quả mô hình Cloglog

Kết quả phân tích hồi quy Cloglog cho thấy, 30 biến đưa vào mô hình hồi quy để phân tích nhưng kết quả phân tích chỉ có 12 biến độc lập có ý nghĩa thống kê bao gồm:

  • Giới tính nam (GenderMale)

  • Độ tuổi từ 30-40 (Age30-40)

  • Độ tuổi từ 50-60 (Age50-60)

  • Từ khóa tìm kiếm “calm corner items” (Searchcalm corner items)

  • Từ khóa tìm kiếm “sensroy toys” (Searchsensroy toys)

  • Số lần quảng cáo được hiển thị cho khách hàng trong kết quả tìm kiếm (total.imp)

  • số lần nhấp vào xem quảng cáo từ 30-40 lần (total.click30-40)

  • số lần nhấp vào xem quảng cáo từ 50-60 lần (total.click50-60)

  • số lần nhấp vào xem quảng cáo từ 60-70 lần (total.click60-70)

  • số lần nhấp vào xem quảng cáo từ 70-80 lần (total.click70-80)

  • số lần nhấp vào xem quảng cáo trên 100 lần (total.clickMore than 100)

  • Tỷ lệ thêm vào giỏ hàng (add.rate)

Với giả thuyết các yếu tố khác không đổi, ảnh hưởng của từng biến đến biến phụ thuộc (quyết định mua hàng sau khi xem quảng cáo) được giải thích như sau:

  • Biến giới tính trong mô hình có ý nghĩa thống kê đối với quyết định mua hàng sau khi xem quảng cáo của khách hàng, ở mức ý nghĩa 5% thì khách hàng nam sẽ có xác suất quyết định mua hàng cao hơn 54.92% so với khách hàng nữ.

  • Độ tuổi khác nhau của khách hàng sẽ có tác động khác nhau đến quyết định mua hàng sau khi xem quảng cáo. Cụ thể tại mức ý nghĩa 10%, khách hàng có độ tuổi từ 30-40 tuổi sẽ có quyết định mua hàng sau khi xem quảng cáo cao hơn 44.98% khách hàng trong độ tuổi 40-50. Bên cạnh đó, khách hàng có độ tuổi từ 50-60 thì xác suất quyết định mua hàng sau khi xem quảng cáo cao hơn 41.52% so với khách hàng trong độ tuổi 40-50.

  • Từ khóa tìm kiếm cũng có ảnh hưởng đến quyết định mua hàng sau khi xem quảng cáo của khách hàng, cụ thể tại mức ý nghĩa 1%, khách hàng tìm kiếm từ khóa “calm corner items” cao hơn 71.24% các từ khóa khác. Đồng thời, khách hàng tìm kiếm từ khóa “sensory toys” cũng có quyết định mua hàng sau khi xem quảng cáo cao hơn 13.5% với mức ý nghĩa 10%.

  • Bên cạnh đó, biến Số lần quảng cáo được hiển thị cho khách hàng trong kết quả tìm kiếm (total.imp) và tỷ lệ thêm vào giỏ hàng (add.cart) cũng có những tác động tích cực, cùng chiều đến quyết định mua hàng sau khi xem quảng cáo của khách hàng.

  • Số lần nhấp xem quảng cáo cũng có ảnh hưởng đáng kể đến quyết định mua hàng sau khi xem quảng cáo của khách hàng, số lần nhấp xem quảng cáo càng nhiều chứng tỏ khách hàng càng có nhu cầu tìm kiếm và mua sản phẩm. Cụ thể, số lần nhấp xem quảng cáo từ 50-60,60-70 và 70-80 có ý nghĩa thống kê tại mức ý nghĩa 10%, số lần nhấp xem quảng cáo nhiều hơn 100 lần có ý nghĩa thống kê tại mức ý nghĩa 5%,số lần nhấp xem quảng cáo từ 30-40 có ý nghĩa thống kê tại mức ý nghĩa 1%.

3.5.2 Khoảng ước lượng cho hệ số hồi quy

confint.default(model4)
##                                        2.5 %        97.5 %
## (Intercept)                    -4.935135e-01  5.212936e-01
## data$GenderMale                 1.814961e-02  3.762111e-01
## data$Age30-40                  -4.232377e-01  2.001376e-02
## data$Age40-50                  -2.444824e-01  2.581767e-01
## data$Age50-60                  -6.566377e-01 -2.855104e-02
## data$AgeLess than 20           -6.177844e+01  6.686336e+01
## data$AgeMore than 60           -2.078301e+02  2.124199e+02
## data$Searchautism sensory toys -1.059512e-01  4.730681e-01
## data$Searchbunmo store         -6.729549e-01  3.897647e-01
## data$Searchcalm corner items    2.886094e-01  1.525571e+00
## data$Searchfidget              -3.104316e-01  5.909682e-01
## data$SearchGifts               -9.355037e-01  6.789932e-01
## data$SearchOthers              -3.133428e-01  1.270295e+00
## data$Searchsensroy toys        -3.900931e+00  1.874129e-01
## data$Searchspecial needs toys  -2.899254e-01  8.299125e-01
## data$Searchstim toy            -5.164299e-01  7.838872e-01
## data$Searchstress toys         -1.459731e+02  1.511188e+02
## data$Searchstretchy toys       -2.923552e-01  6.155849e-01
## data$SearchToys for kid        -8.672156e-02  8.174313e-01
## data$total.imp                  3.759391e-06  1.995108e-04
## data$total.click30-40          -1.900798e+00 -3.941482e-01
## data$total.click40-50          -8.691268e-01  7.667976e-01
## data$total.click50-60          -1.654489e+00  1.046675e-01
## data$total.click60-70          -2.457639e+00  1.440771e-01
## data$total.click70-80          -1.857900e+00  1.317309e-01
## data$total.click80-90          -1.567515e+00  9.540782e-01
## data$total.click90-100         -3.829056e+00  5.881649e-01
## data$total.clickLess than 10   -5.014115e-01  3.946251e-01
## data$total.clickMore than 100  -2.498818e+00 -7.587760e-02
## data$total.clickOct-20         -6.302181e-01  3.203403e-01
## data$add.rate                   2.107974e-02  5.175573e-02

3.5.3 Dự báo

prediction <- predict(model4, newdata = model4$data, type = "response")
head(round(prediction,4),10)
##      1      2      3      4      5      6      7      8      9     10 
## 0.5811 0.9999 0.6252 0.9648 0.6201 0.6181 0.9609 0.6267 0.5474 0.6236

CHƯƠNG 4. KẾT LUẬN

4.1 Kết luận

Qua kết quả phân tích trên ta có thể thấy quyết định mua hàng sau khi xem quảng cáo của khách hàng chịu tác động bởi nhiều yếu tố như: giới tính, độ tuổi, từ khóa tìm kiếm, Số lần quảng cáo được hiển thị cho khách hàng trong kết quả tìm kiếm, số lần nhấp vào xem quảng cáo và tỷ lệ thêm vào giỏ hàng.

4.2 Hạn chế

Do hạn chế về mặt thời gian cũng như khả năng về năng lực nghiên cứu nên tác giả chỉ thực hiện được với số mẫu hạn chế và đối tượng khảo sát chỉ mang tính chất đại diện, chưa mang tính chất khái quát

4.3 Hướng nghiên cứu

Phạm vi nghiên cứu của tác giả chỉ tập trung vào một số yếu tố ảnh hưởng đến quyết định mua hàng sau khi xem quảng cáo của khách hàng như độ tuổi, thu nhập, giới tính, từ khóa tìm kiếm, số lần nhấp xem quảng cáo, tỷ lệ thêm vào giỏ hàng… Do đó, các nghiên cứu tiếp theo có thể xem xét thêm các yếu tố về sở thích, ngành nghê, công việc, tình trạng hôn nhân của khách hàng để có thể đưa ra được kết quả khả quan và đầy đủ hơn nhằm cải thiện chiến dịch quảng cáo phù hợp với nhu cầu của khách hàng từ đó thúc đẩy doanh thu của công ty.

LS0tDQp0aXRsZTogIlBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY+G7p2Ega2jDoWNoIGjDoG5nIg0KYXV0aG9yOiAiTMawdSBIdXnhu4FuIFRyw6JuIg0KZGF0ZTogIjIwMjMtMDgtMDIiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIHRvYzogeWVzDQogICAgdG9jX2Zsb2F0OiB5ZXMNCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUNCiAgICBjb2RlX2Rvd25sb2FkOiB5ZXMNCi0tLQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSkNCmBgYA0KKipMaW5rIERhdGEqKjogaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMUxXZExYNm9wa3hWd0d3Ymtsb1dGUThzRndyR0lLRkRsN0JZX3o1S2hnX1kvZWRpdD91c3A9c2hhcmluZw0KIA0KIyBM4bucSSBD4bqiTSDGoE4NClRyb25nIHN14buRdCBxdcOhIHRyw6xuaCBo4buNYyB04bqtcCBtw7RuIFBow6JuIHTDrWNoIGThu68gbGnhu4d1IMSR4buLbmggdMOtbmggZW0geGluIGfhu61pIGzhu51pIGPDoW0gxqFuIGNow6JuIHRow6BuaCDEkeG6v24gdGjhuqd5IFRy4bqnbiBN4bqhbmggVMaw4budbmcgLSBnaeG6o25nIHZpw6puIGLhu5kgbcO0biBQaMOibiB0w61jaCBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oIMSRw6MgxJHDoyB04bqtbiB0w6xuaCBjaOG7iSBk4bqheSwgdHJ1eeG7gW4gxJHhuqF0IG5o4buvbmcga2nhur9uIHRo4bupYyBxdcO9IGLDoW8gY2hvIGVtIHRyb25nIHRo4budaSBnaWFuIHbhu6thIHF1YSDEkeG7gyBlbSBjw7MgxJHhu6cga2nhur9uIHRo4bupYywgxJFp4buBdSBraeG7h24gxJHhu4MgdGjhu7FjIGhp4buHbiBiw6BpIHRp4buDdSBsdeG6rW4gbsOgeS4gRW0geGluIGLDoHkgdOG7jyBsw7JuZyBiaeG6v3QgxqFuIMSR4bq/biB0aOG6p3kuDQogIA0KVHV5IG5oacOqbiwgZG8gduG7kW4ga2nhur9uIHRo4bupYyBjw7JuIG5oaeG7gXUgaOG6oW4gY2jhur8gbsOqbiB0cm9uZyBxdcOhIHRyw6xuaCBsw6BtIHRpw6p1IGx14bqtbiBraMOzIHRyw6FuaCBraOG7j2kgbmjhu69uZyBzYWkgc8OzdCwgcuG6pXQgbW9uZyB0aOG6p3kgYuG7jyBxdWEuIEVtIHLhuqV0IG1vbmcgbmjhuq1uIMSRxrDhu6NjIG5o4buvbmcgw70ga2nhur9uIMSRw7NuZyBnw7NwIGPhu6dhIHRo4bqneSDEkeG7gyBi4bqjbiB0aMOibiBjw7MgdGjhu4MgaOG7jWMgaOG7j2kgdGjDqm0gbmhp4buBdSBraW5oIG5naGnhu4dtIHbDoCBob8OgbiB0aMOgbmggdOG7kXQgaMahbiB0cm9uZyBiw6BpIGtow7NhIGx14bqtbiB04buRdCBuZ2hp4buHcCBz4bqvcCDEkeG6v24uDQogIA0KRW0geGluIGNow6JuIHRow6BuaCBj4bqjbSDGoW4hDQoNCiMgUEjhuqZOIE3hu54gxJDhuqZVDQojIyAxLiBMw70gZG8gY2jhu41uIMSR4buBIHTDoGkNCiAgIEPDoWMgY8O0bmcgdHksIGRvYW5oIG5naGnhu4dwIGtpbmggZG9hbmggbHXDtG4gbW9uZyBtdeG7kW4gdGjGsMahbmcgaGnhu4d1LCBz4bqjbiBwaOG6qW0gY+G7p2EgbcOsbmggY2hp4bq/bSBsxKluaCDEkcaw4bujYyB0aOG7iyB0csaw4budbmcuIMSQ4buDIGzDoG0gxJHGsOG7o2MgduG6rXkgdGjDrCBo4buNIHBo4bqjaSBoaeG7g3UgxJHGsOG7o2MgY8OhYyB54bq/dSB04buRIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nIHThuqFpIHRo4buLIHRyxrDhu51uZyDEkcOzLiBWw6wgduG6rXksIHZp4buHYyBu4bqvbSDEkcaw4bujYyBxdXkgdHLDrG5oIHJhIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgY+G7p2EgbmfGsOG7nWkgdGnDqnUgZMO5bmcgxJHhu5NuZyBuZ2jEqWEgduG7m2kgdmnhu4djIGRvYW5oIG5naGnhu4dwIGhp4buDdSBjw6FjIGdpYWkgxJFv4bqhbiBraMOhY2ggaMOgbmcgdHLhuqNpIHF1YSDEkeG7gyBjw7MgdGjhu4MgxJFpIMSR4bq/biBxdXnhur90IMSR4buLbmggY3Xhu5FpIGPDuW5nIGzDoCBjw7MgbsOqbiBtdWEgc+G6o24gcGjhuqltIGhheSBraMO0bmcuIFF1eeG6v3QgxJHhu4tuaCBuw6B5IGThu7FhIHRyw6puIHPhu7Eg4bqjbmggaMaw4bufbmcgY+G7p2Egbmhp4buBdSB54bq/dSB04buRIGtow6FjIG5oYXUsIG3hu5dpIG5nxrDhu51pIGtow6FjIG5oYXUgc+G6vSBjw7Mgbmjhu69uZyB0w6FjIMSR4buZbmcga2jDoWMgbmhhdSB0csOqbiB04burbmcgeeG6v3UgdOG7kS4gxJDhu5FpIHbhu5tpIG5o4buvbmcgbmjDom4gdmnDqm4ga2luaCBkb2FuaCB2w6AgbWFya2V0aW5nLCBz4buxIGhp4buDdSBiaeG6v3QgduG7gSBjw6FjIHnhur91IHThu5EgbsOgeSBjdW5nIGPhuqVwIG3hu5l0IGPDoWkgbmjDrG4gc8OidSBz4bqvYyBoxqFuIHbhu4EgdMOibSBsw70ga2jDoWNoIGjDoG5nIHbDoCBow6BuaCB0csOsbmgga2jDoWNoIGjDoG5nLCB04burIMSRw7MgZ2nDunAgZG9hbmggbmdoaeG7h3AgeMOieSBk4buxbmcgY8OhYyBjaGnhur9uIGzGsOG7o2MgYsOhbiBow6BuZywgdGnhur9wIHRo4buLIGhp4buHdSBxdeG6oyB2w6AgdMSDbmcgZG9hbmggdGh1IGLDoW4gaMOgbmcuDQogIFRyb25nIGLhu5FpIGPhuqNuaCBu4buBbiBraW5oIHThur8gcGjDoXQgdHJp4buDbiBuaMawIGhp4buHbiBuYXksIGPDoWMgc8OgbiB0aMawxqFuZyBt4bqhaSDEkWnhu4duIHThu60gY8OzIHZhaSB0csOyIHF1YW4gdHLhu41uZyB2w6AgxJHGsOG7o2Mgbmhp4buBdSBuZ8aw4budaSBkw7luZyB0aW4gdMaw4bufbmcgc+G7rSBkdW5nLCBiw6puIGPhuqFuaCB2aeG7h2MgZ2nDunAgw61jaCBjaG8gdmnhu4djIG11YSBz4bqvbSwgbOG7sWEgY2jhu41uIGPhu6dhIGtow6FjaCBow6BuZyDEkcaw4bujYyB0aHXhuq1uIHRp4buHbiwgbmhhbmggY2jDs25nIHbDoCBoaeG7h3UgcXXhuqMgaMahbiB0aMOsIGPFqW5nIGtow7RuZyBrw6ltIHBo4bqnbiBj4bqhbmggdHJhbmguIERvIMSRw7MsIGPDoWMgZG9hbmggbmdoaeG7h3AgY+G6p24gaGnhu4N1IHLDtSBwaMOibiBraMO6YyBraMOhY2ggaMOgbmcgY+G7p2EgbcOsbmgsIG7huq9tIGLhuq90IMSRxrDhu6NjIHF1eSB0csOsbmggcmEgcXV54bq/dCDEkeG7i25oIGPhu6dhIGtow6FjaCBow6BuZyB04burIMSRw7MgxJHGsGEgcmEgY2hp4bq/biBk4buLY2ggcXXhuqNuZyBjw6FvIHBow7kgaOG7o3AsIG5o4bqxbSB0aHUgaMO6dCBraMOhY2ggaMOgbmcgdsOgIHTEg25nIGRvYW5oIHRodSBiw6FuIGjDoG5nLiANCiAgxJDhu4MgxJHDoW5oIGdpw6EgxJHGsOG7o2MgaGnhu4d1IHN14bqldCBj4bunYSBjaGnhur9uIGThu4tjaCBxdeG6o25nIGPDoW8gY8OzIHRo4bqtdCBz4buxIGhp4buHdSBxdeG6oyB2w6AgY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIGPhu6dhIGtow6FjaCBow6BuZyBoYXkga2jDtG5nLCB0w6FjIGdp4bqjIMSRw6MgbOG7sWEgY2jhu41uIMSR4buBIHTDoGkgIlBow6JuIHTDrWNoIGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyDEkeG6v24gcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY+G7p2Ega2jDoWNoIGjDoG5nIiBuaOG6sW0gbWFuZyBs4bqhaSBt4buZdCBjw6FpIG5ow6xuIHThu5VuZyBxdWFuLCB0aOG7sWMgdOG6vyBoxqFuIHbhu4EgaGnhu4d1IHF14bqjIGPhu6dhIGPDoWMgY2hp4bq/biBk4buLY2ggcXXhuqNuZyBjw6FvIG3DoCBBbWF6b24gxJFhbmcgdHJp4buDbiBraGFpIGPDsyB0w6FjIMSR4buZbmcgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgY+G7p2Ega2jDoWNoIGjDoG5nIG5oxrAgdGjhur8gbsOgby4NCiAgDQojIyAyLiBN4bulYyB0acOqdSBuZ2hpw6puIGPhu6l1DQogIFBow6JuIHTDrWNoIHbDoCDEkcOhbmggZ2nDoSBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGPhu6dhIGtow6FjaCBow6BuZy4gS+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdSBz4bq9IGN1bmcgY+G6pXAgdGjDtG5nIHRpbiB2w6AgaGnhu4N1IGJp4bq/dCBzw6J1IGjGoW4gduG7gSBjw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGPhu6dhIGtow6FjaCBow6BuZywgdOG7qyDEkcOzIMSRxrBhIHJhIGPDoWMgY2hp4bq/biBsxrDhu6NjIG1hcmtldGluZywgcXXhuqNuZyBjw6FvIHBow7kgaOG7o3AgaMahbiBuaOG6sW0gdGh1IGjDunQga2jDoWNoIGjDoG5nIHbDoCBj4bqjaSB0aGnhu4duIGNo4buJIHPhu5EgUk9JIGNobyBkb2FuaCBuZ2hp4buHcC4NCiAgDQojIyAzLiDEkOG7kWkgdMaw4bujbmcsIHBo4bqhbSB2aSBuZ2hpw6puIGPhu6l1DQrEkOG7kWkgdMaw4bujbmcgbmdoacOqbiBj4bupdTogQ8OhYyBraMOhY2ggaMOgbmcgY8OzIGjDoG5oIHZpIG11YSBz4bqvbSwgdGnDqnUgZMO5bmcgdHLDqm4gc8OgbiB0aMawxqFuZyBt4bqhaSDEkWnhu4duIHThu60gQW1hem9uDQpQaOG6oW0gdmkgbmdoacOqbiBj4bupdTogQuG7mSBk4buvIGxp4buHdSBsw6AgY2jhu4kgc+G7kSBoaeG7h3Ugc3XhuqV0IHF14bqjbmcgY8OhbyBj4bunYSBBbWF6b24gY3VuZyBj4bqlcCB0aMO0bmcgdGluIHRvw6BuIGRp4buHbiB24buBIGhp4buHdSBxdeG6oyBj4bunYSBjw6FjIGNoaeG6v24gZOG7i2NoIHF14bqjbmcgY8OhbyB2w6AgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBj4bunYSBraMOhY2ggaMOgbmcgY2hvIG3hu5l0IGtob+G6o25nIHRo4budaSBnaWFuIHR14bqnbiBj4bulIHRo4buDLg0KDQojIyA0LiBQaMawxqFuZyBwaMOhcCBuZ2hpw6puIGPhu6l1DQpQaMawxqFuZyBwaMOhcCBk4buvIGxp4buHdSDEkeG7i25oIHTDrW5oIHbDoCBwaMawxqFuZyBwaMOhcCB44butIGzDvSBz4buRIGxp4buHdSBi4bqxbmcgdGjhu5FuZyBrw6ogdG/DoW4gaOG7jWM6IMSQ4buDIG7huq9tIHbhu69uZyB0aMO0bmcgdGluIHbDoCBz4buRIGxp4buHdSBsacOqbiBxdWFuIMSR4bq/biBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBj4bunYSBraMOhY2ggaMOgbmcsIHTDoWMgZ2nhuqMgc+G6vSB0aeG6v24gaMOgbmggbeG7mXQgcXXDoSB0csOsbmggcGjDom4gdMOtY2ggc+G7kSBsaeG7h3UgYuG6sW5nIHBoxrDGoW5nIHBow6FwIHRo4buRbmcga8OqIHRvw6FuIGjhu41jLiBDw6FjIHRow7RuZyBz4buRIGxpw6puIHF1YW4gxJHhur9uIHThuqduIHN14bqldCwgcGjDom4gYuG7kSwgxJHhu5kgdMawxqFuZyBxdWFuIHbDoCDEkeG7mSB0xrDGoW5nIHTDoWMgZ2nhu69hIGPDoWMgYmnhur9uIHPhur0gxJHGsOG7o2MgdMOtbmggdG/DoW4uIFBo4bqnbiBt4buBbSBSIC0gbeG7mXQgY8O0bmcgY+G7pSBt4bqhbmggbeG6vSB2w6AgcGjhu5UgYmnhur9uIHRyb25nIGzEqW5oIHbhu7FjIHRo4buRbmcga8OqIHbDoCB44butIGzDvSBk4buvIGxp4buHdSAtIHPhur0gaOG7lyB0cuG7oyBxdcOhIHRyw6xuaCBuw6B5LiBWaeG7h2Mgc+G7rSBk4bulbmcgcGjhuqduIG3hu4FtIFIgc+G6vSDEkeG6o20gYuG6o28gdMOtbmggY2jDrW5oIHjDoWMgdsOgIMSRw6FuZyB0aW4gY+G6rXkgdHJvbmcgdmnhu4djIHBow6JuIHTDrWNoIHPhu5EgbGnhu4d1Lg0KDQojIyA1LiBL4bq/dCBj4bqldSDEkeG7gSB0w6BpDQpQaOG6p24gbeG7nyDEkeG6p3UNCg0KQ2jGsMahbmcgMS4gVOG7lW5nIHF1YW4gbMO9IHRodXnhur90DQoNCkNoxrDGoW5nIDIuIFBoxrDGoW5nIHBow6FwIG5naGnDqm4gY+G7qXUNCg0KQ2jGsMahbmcgMy4gS+G6v3QgcXXhuqMgbmdoacOqbiBj4bupdQ0KDQpDaMawxqFuZyA0LiBL4bq/dCBsdeG6rW4NCg0KIyBDSMavxqBORyAxLiBU4buUTkcgUVVBTiBMw50gVEhVWeG6vlQNCiMjIDEuMSBLaMOhaSBuaeG7h20gduG7gSBxdeG6o25nIGPDoW8NCiAgUXXhuqNuZyBjw6FvIGzDoCBjw6FjIGjDrG5oIHRo4bupYyBnaeG7m2kgdGhp4buHdSBob+G6t2MgdHV5w6puIHRydXnhu4FuIGPDsyB0aOG7gyB0cuG6oyBwaMOtIGhv4bq3YyBraMO0bmcgdHLhuqMgcGjDrSB0aMO0bmcgYsOhbyBjaG8gbmfGsOG7nWkgZMO5bmcgduG7gSBz4bqjbiBwaOG6qW0sIGThu4tjaCB24bulLCBz4buxIGtp4buHbiBu4buVaSBi4bqtdCBj4bunYSBjw7RuZyB0eSzigKYgbmjhurFtIHRodXnhur90IHBo4bulYyBuZ8aw4budaSBkw7luZywga8OtY2ggdGjDrWNoIG5odSBj4bqndSB2w6AgeMOieSBk4buxbmcgbMOybmcgdHJ1bmcgdGjDoG5oIGPhu6dhIGtow6FjaCBow6BuZy4gxJDDonkgbMOgIG3hu5l0IHRyb25nIG5o4buvbmcgY2hp4bq/biBsxrDhu6NjIE1hcmtldGluZyBuaOG6sW0gdMSDbmcgbMaw4bujbmcgdGnDqnUgdGjhu6Ugc+G6o24gcGjhuqltIGPhu6dhIGRvYW5oIG5naGnhu4dwLg0KICBOaOG6rW4gdGjhuqV5IHLhurFuZyBRdeG6o25nIGPDoW8geHXhuqV0IGhp4buHbiBjw6FjaCDEkcOieSBow6BuZyBuZ8OgbiBuxINtLCBjw7MgbOG6vSB04burIGtoaSBi4bqvdCDEkeG6p3UgY8OzIHRow6BuaCB0aOG7iyB2w6AgYnXDtG4gYsOhbiB0aMOsIGPFqW5nIGPDsyBxdeG6o25nIGPDoW8uIE3hu7kgbMOgIG7GsOG7m2MgxJFpIMSR4bqndSB0cm9uZyBob+G6oXQgxJHhu5luZyBxdeG6o25nIGPDoW8gdHLDqm4gY8OhYyBzw7NuZyDEkWnhu4duIHThu6ssIGtow7RuZyBwaOG6o2kgbmfhuqt1IG5oacOqbiBtw6AgbmfGsOG7nWkgdGEgdsOtIGPDoWMgY2jGsMahbmcgdHLDrG5oIHF14bqjbmcgY8OhbyBj4bunYSBN4bu5IGzDoCBt4buZdCBnaeG6pWMgbcahIHbhu4EgbuG7gW4gdsSDbiBtaW5oIE3hu7ksIG3hu5l0IGdp4bqlYyBtxqEgY8OzIHPhu6ljIGjDunQga+G7syBs4bqhIMSR4buRaSB24bubaSBow6BuZyB0cmnhu4d1IG5nxrDhu51pIHRyw6puIHRo4bq/IGdp4bubaS4NCiAgUXXhuqNuZyBjw6FvIGfhuq9uIGxp4buBbiB24bubaSBz4buxIHBow6F0IHRyaeG7g24gY+G7p2Ega2luaCB04bq/IHRo4buLIHRyxrDhu51uZyB2w6AgbuG7gW4gc+G6o24geHXhuqV0IGjDoG5nIGjDs2EsIGThu4tjaCB24bulLiBUaOG7sWMgdGnhu4VuIMSRw6MgY2jhu6luZyBtaW5oIGtob2EgaOG7jWMgdsOgIGPDtG5nIG5naOG7hyBwaMOhdCB0cmnhu4NuIMSRw6Mga8OpbyB0aGVvIGhv4bqhdCDEkeG7mW5nIHF14bqjbmcgY8OhbyBuZ8OgeSBjw6BuZyBzw7RpIMSR4buZbmcgIHbDoCBwaG9uZyBwaMO6IGjGoW4sIHF14bqjbmcgY8OhbyB4deG6pXQgaGnhu4duIG5oaeG7gXUgbsahaSwgxJHGsOG7o2MgdGjhu4MgaGnhu4duIGLhurFuZyBuaGnhu4F1IGjDrG5oIHRo4bupYywgdHJ1eeG7gW4gdMOgaSBi4bqxbmcgbmhp4buBdSBwaMawxqFuZyB0aeG7h24ga2jDoWMgbmhhdeKApnF14bqjbmcgY8OhbyBsw6AgaG/huqF0IMSR4buZbmcga2luaCB04bq/IG5oxrBuZyDEkeG7k25nIHRo4budaSBjxaluZyBsw6Agc+G7sSBzw6FuZyB04bqhbyB2xINuIGjDs2EgdsOgIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhu4FuIGzhu6NpIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nIGNow61uaCB2w6wgduG6rXkgY+G6p24gxJHhurd0IHJhIHbhuqVuIMSR4buBIHRydW5nIHRo4buxYw0KICBDaGnhur9uIGzGsOG7o2MgcXXhuqNuZyBjw6FvIGzDoCBt4buZdCBr4bq/IGhv4bqhY2ggdG/DoG4gZGnhu4duIG3DtCB04bqjIGPDoWNoIG3hu5l0IGRvYW5oIG5naGnhu4dwIHPhur0gc+G7rSBk4bulbmcgcXXhuqNuZyBjw6FvIMSR4buDIHRodXnhur90IHBo4bulYyBraMOhY2ggaMOgbmcgbeG7pWMgdGnDqnUgbXVhIGjDoG5nLiBN4buZdCBz4buRIG7hu5lpIGR1bmcgY8OzIHRo4buDIMSRxrBhIHbDoG8gY2hp4bq/biBsxrDhu6NjIHF14bqjbmcgY8OhbyBuaMawOiBIxrDhu5tuZyBk4bqrbiBz4butIGThu6VuZywgY2jDom4gZHVuZyBraMOhY2ggaMOgbmcgbeG7pWMgdGnDqnUgKGzDvSB0xrDhu59uZyksIHBoxrDGoW5nIHRp4buHbiBxdeG6o25nIGPDoW8gc+G6vSBz4butIGThu6VuZywgbmfDom4gc8OhY2ggcXXhuqNuZyBjw6FvIGhheSBjw6FjaCB0aOG7qWMgcXXhuqNuZyBjw6FvIHRyw6puIGPDoWMgcGjGsMahbmcgdGnhu4duIG7DoHkuDQogIA0KIyMgMS4yIEtow6FpIG5p4buHbSBxdcOhIHRyw6xuaCByYSBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIGPhu6dhIGtow6FjaCBow6BuZw0KICBOZ8aw4budaSB0acOqdSBkw7luZyBjw7Mgbmjhu69uZyBjw6FjaCB0aOG7qWMgbXVhIGtow6FjIG5oYXUgxJHhu5FpIHbhu5tpIGLhuqV0IGvhu7MgbeG7mXQgc+G6o24gcGjhuqltIG5o4bqldCDEkeG7i25oIG7DoG8uIFRow7RuZyB0aMaw4budbmcga2hpIG11YSBz4bqvbSwgbmfGsOG7nWkgdGnDqnUgZMO5bmcgdGjGsOG7nW5nIHRy4bqjaSBxdWEgbsSDbSBnaWFpIMSRb+G6oW46IE5o4bqtbiBiaeG6v3QgduG6pW4gxJHhu4EsIHTDrG0ga2nhur9tIHRow7RuZyB0aW4sIMSRw6FuaCBnacOhIGPDoWMgbOG7sWEgY2jhu41uLCBxdXnhur90IMSR4buLbmggbXVhIHbDoCBow6BuaCDEkeG7mW5nIG11YSwgcGjhuqNuIOG7qW5nIHNhdSBraGkgbXVhLg0KICBUcsOqbiB0aOG7sWMgdOG6vyBraMO0bmcgbmjhuqV0IHRoaeG6v3QgcGjhuqNpIHRy4bqjaSBxdWEgNSBnaWFpIMSRb+G6oW4gcXV54bq/dCDEkeG7i25oIG11YSBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZywgbmjhuqV0IGzDoCB0cm9uZyBuaOG7r25nIHRyxrDhu51uZyBo4bujcCBtdWEgbmjhu69uZyBt4bq3dCBow6BuZyDDrXQgY+G6p24gxJHhu4MgdMOibS4gTmfGsOG7nWkgdGnDqnUgZMO5bmcgY8OzIHRo4buDIGLhu48gcXVhIGhheSDEkeG6o28gbOG6oWkgbeG7mXQgc+G7kSBnaWFpIMSRb+G6oW4uDQoNCiMjIDEuMyBDw6FjIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgY+G7p2Ega2jDoWNoIGjDoG5nDQoqICoqTmjhuq1uIGJp4bq/dCB24bqlbiDEkeG7gSoqDQoNClF1eSB0csOsbmggcmEgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBj4bunYSBuZ8aw4budaSB0acOqdSBkw7luZyBi4bqvdCDEkeG6p3UgdOG7qyBraGkgbmfGsOG7nWkgbXVhIMO9IHRo4bupYyDEkcaw4bujYyB24bqlbiDEkeG7gSBoYXkgbmh1IGPhuqd1LiBOaHUgY+G6p3UgY8OzIHRo4buDIGLhuq90IG5ndeG7k24gdOG7qyBuaOG7r25nIHTDoWMgbmjDom4ga8OtY2ggdGjDrWNoIG7hu5lpIHThuqFpIChuaMawIHZp4buHYyBuZ8aw4budaSB0YSDEkcOzaSwga2jDoXQgZOG6q24gxJHhur9uIG5odSBj4bqndSDEg24gdeG7kW5nKSBoYXkgYsOqbiBuZ2/DoGkgKG5oxrAgdmnhu4djIG5ow6xuIHRo4bqleSBt4buZdCBxdeG6o25nIGPDoW8gc+G6o24gcGjhuqltIGhheSBk4bqrbiDEkeG6v24gbmh1IGPhuqd1IHBo4bqjaSBtdWEgc+G6o24gcGjhuqltIMSRw7MpLg0KDQpLaGkgbmfGsOG7nWkgbXVhIGPhuqNtIHRo4bqleSBjw7Mgc+G7sSBraMOhYyBiaeG7h3QgZ2nhu69hIHTDrG5oIHRy4bqhbmcgdGjhu7FjIHThur8gdsOgIHTDrG5oIHRy4bqhbmcgbW9uZyBtdeG7kW4gxJHhuqF0IMSR4bq/biBt4buZdCBuZ8aw4buhbmcgbsOgbyDEkcOzLCBo4buNIHPhur0gaMOsbmggdGjDoG5oIG7Dqm4gxJHhu5luZyBjxqEgdGjDtGkgdGjDumMgaMOgbmggxJHhu5luZyBoxrDhu5tuZyB2w6BvIGzhu5twIMSR4buRaSB0xrDhu6NuZyBjw7MgdGjhu4MgdGjhu49hIG3Do24gxJHGsOG7o2MgbW9uZyBtdeG7kW4gY+G7p2EgbcOsbmguDQoNCsSQ4buDIHThu5FpIMawdSBow7NhIHRoxrDGoW5nIGhp4buHdSBj4bunYSBtw6xuaCDEkeG6v24ga2jDoWNoIGjDoG5nLCBjw6FjIGRvYW5oIG5naGnhu4dwIGPhuqduIHThuq1wIHRydW5nIHbDoG8gdmnhu4djIGdpw7pwIGtow6FjaCBow6BuZyB0aeG7gW0gbsSDbmcgbmjhuq1uIHJhIHbDoCB4w6FjIMSR4buLbmggbmh1IGPhuqd1IGPhu6dhIGjhu40gdGjDtG5nIHF1YSB2aeG7h2MgdGh1IHRo4bqtcCB0aMO0bmcgdGluIG5nxrDhu51pIGTDuW5nLCB04bqhbyBu4buZaSBkdW5nIHhvYXkgcXVhbmggbmh1IGPhuqd1IGPhu6dhIGtow6FjaCBow6BuZyB2w6AgxJHhu4tuaCB24buLIG7hu5lpIGR1bmcgxJHDsyDhu58gbsahaSBraMOhY2ggaMOgbmcgdGnhu4FtIG7Eg25nIGPDsyB0aOG7gyBuaMOsbiB0aOG6pXkgbmjGsCBjw6FjIHRyYW5nIG3huqFuZyB4w6MgaOG7mWksIGPDoWMgc8OgbiB0aMawxqFuZyBt4bqhaSDEkWnhu4duIHThu60sLi4uDQogIA0KKiAqKlTDrG0ga2nhur9tIHRow7RuZyB0aW4qKg0KDQpOZ8aw4budaSB0acOqdSBkw7luZyBjw7Mgbmh1IGPhuqd1IHPhur0gYuG6r3QgxJHhuqd1IHTDrG0ga2nhur9tIHRow6ptIHRow7RuZyB0aW4uIE5odSBj4bqndSBjw6BuZyBj4bqlcCBiw6FjaCwgdGjDtG5nIHRpbiBiYW4gxJHhuqd1IGPDoG5nIMOtdCwgc+G6o24gcGjhuqltIGPhuqduIG11YSBjw7MgZ2nDoSB0cuG7iyBs4bubbiB0aMOsIGPDoG5nIHRow7RpIHRow7pjIGNvbiBuZ8aw4budaSB0w6xtIGtp4bq/bSB0aMO0bmcgdGluLg0KDQpN4buRaSBxdWFuIHTDom0gdGhlbiBjaOG7kXQgY+G7p2EgbmfGsOG7nWkgbMOgbSBNYXJrZXRpbmcgbMOgIG5o4buvbmcgbmd14buTbiB0aMO0bmcgdGluIGNo4bunIHnhur91IG3DoCBuZ8aw4budaSB0acOqdSBkw7luZyB0w6xtIMSR4bq/biB2w6Ag4bqjbmggaMaw4bufbmcgdMawxqFuZyDEkeG7kWkgY+G7p2EgdOG7q25nIG5ndeG7k24gxJHDsyDEkeG6v24gcXV54bq/dCDEkeG7i25oIG11YSBz4bqvbSB0aeG6v3Agc2F1LiANCg0KQ8OhYyBuZ3Xhu5NuIHRow7RuZyB0aW4gY+G7p2EgbmfGsOG7nWkgdGnDqnUgZMO5bmcgxJHGsOG7o2MgY2hpYSB0aMOgbmggYuG7kW4gbmjDs20uDQoNCisgTmd14buTbiB0aMO0bmcgdGluIGPDoSBuaMOibjogR2lhIMSRw6xuaCwgYuG6oW4gYsOoLCBow6BuZyB4w7NtLCBuZ8aw4budaSBxdWVuLg0KDQorIE5ndeG7k24gdGjDtG5nIHRpbiB0aMawxqFuZyBt4bqhaTogUXXhuqNuZyBjw6FvLCBuaMOibiB2acOqbiBiw6FuIGjDoG5nLCDEkeG6oWkgbMO9LCBiYW8gYsOsLCB0cmnhu4NuIGzDo20uDQoNCisgTmd14buTbiB0aMO0bmcgdGluIGPDtG5nIGPhu5luZzogQ8OhYyBwaMawxqFuZyB0aeG7h24gdGjDtG5nIHRpbiDEkeG6oWkgY2jDum5nLCBjw6FjIHThu5UgY2jhu6ljIG5naGnDqm4gY+G7qXUgbmfGsOG7nWkgdGnDqnUgZMO5bmcuDQoNCisgTmd14buTbiB0aMO0bmcgdGluIHRo4buxYyBuZ2hp4buHbTogU+G7nSBtw7MsIG5naGnDqm4gY+G7qXUgdsOgIHPhu60gZOG7pW5nIHPhuqNuIHBo4bqpbS4NCg0KTmd14buTbiB0aMO0bmcgdGluIG7DoG8gY8OzIHTDoWMgxJHhu5luZyBt4bqhbmggdOG7m2kgbmfGsOG7nWkgdGnDqnUgZMO5bmcgY8OybiB0w7l5IHRodeG7mWMgdsOgbyBsb+G6oWkgc+G6o24gcGjhuqltLCDEkeG6t2MgdMOtbmggY+G7p2Ega2jDoWNoIGjDoG5nLiBWw60gZOG7pSB24buBIHF1w6EgdHLDrG5oIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgdOG6oWkgYsaw4bubYyAyOiBOZ8aw4budaSBj4bqpbiB0aOG6rW4gdGjGsOG7nW5nIGtow7RuZyB0aW4gdsOgbyBxdeG6o25nIGPDoW8sIGjhu40gcGjhuqNpIHTDrG0ga2nhur9tIHRow6ptIGPDoWMgdGjDtG5nIHRpbiBraMOhYyB04burIGPDoWMgbmd14buTbiBraMOhYyBuaGF1LCBoYXkgxJHhu5FpIHbhu5tpIHF1eeG6v3QgxJHhu4tuaCBtdWEgc+G6r20gcXVhbiB0cuG7jW5nIG5oxrAgbXVhIMO0IHTDtCwgbmjDoCBj4butYSwgaGF5IMSRaSBo4buNYyBuxrDhu5tjIG5nb8OgaSwgdGjDrCBuZ8aw4budaSB0YSB0aMaw4budbmcgbXXhu5FuIGPDsyBjw6BuZyBuaGnhu4F1IHRow7RuZyB0aW4gY8OgbmcgdOG7kXQgxJHhu4MgdMSDbmcgxJHhu5kgdGluIGPhuq15IGPhu6dhIHF1eeG6v3QgxJHhu4tuaC4NCg0KTmfGsOG7nWkgdGnDqnUgZMO5bmcgbmjhuq1uIMSRxrDhu6NjIG5oaeG7gXUgdGjDtG5nIHRpbiBuaOG6pXQgduG7gSBz4bqjbiBwaOG6qW0gdOG7qyBuaOG7r25nIG5ndeG7k24gdGjDtG5nIHRpbiB0aMawxqFuZyBt4bqhaSwgdHV5IG5oacOqbiwgbmjhu69uZyBuZ3Xhu5NuIHRow7RuZyB0aW4gY8OhIG5ow6JuIGzhuqFpIGzDoCBuaOG7r25nIG5ndeG7k24gdMOhYyDEkeG7mW5nIG5oaeG7gXUgbmjhuqV0IHThu5tpIG5nxrDhu51pIHRpw6p1IGTDuW5nLiBN4buXaSBuZ3Xhu5NuIHRow7RuZyB0aW4gY8WpbmcgdGjhu7FjIGhp4buHbiBjw6FjIGNo4bupYyBuxINuZyBraMOhYyBuaGF1IOG7nyBt4buZdCBt4bupYyDEkeG7mSBuw6BvIMSRw7MgdMOhYyDEkeG7mW5nIMSR4bq/biBxdXnhur90IMSR4buLbmggbXVhIHPhuq9tLg0KICANCiogKirEkMOhbmggZ2nDoSBs4buxYSBjaOG7jW4qKg0KDQpUcm9uZyBxdcOhIHRyw6xuaCBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIGPhu6dhIGtow6FjaCBow6BuZyB0aMOsIMSRw6J5IMSRxrDhu6NjIMSRw6FuaCBnacOhIGzDoCBixrDhu5tjIHF1YW4gdHLhu41uZyBuaOG6pXQuIFThu6sgY8OhYyBuaMOjbiBoaeG7h3Ugc+G6o24gcGjhuqltIGtow6FjIG5oYXUgxJHDoyBiaeG6v3QgcXVhIGdpYWkgxJFv4bqhbiB0w6xtIGtp4bq/bSB0aMO0bmcgdGluLCBraMOhY2ggaMOgbmcgYuG6r3QgxJHhuqd1IMSRw6FuaCBnacOhIMSR4buDIGNo4buNbiByYSBuaMOjbiBoaeG7h3UsIHPhuqNuIHBo4bqpbSBwaMO5IGjhu6NwIHbhu5tpIG5odSBj4bqndSBj4bunYSBtw6xuaC4NCg0KxJDhu4MgaGnhu4N1IHLDtSB2aeG7h2MgxJHDoW5oIGdpw6EgY+G7p2Ega2jDoWNoIGjDoG5nIG5oxrAgdGjhur8gbsOgbywgZG9hbmggbmdoaeG7h3AgY+G6p24gcXVhbiB0w6JtIMSR4bq/biBjw6FjIHbhuqVuIMSR4buBIHNhdTogQ8OhYyB0aHXhu5ljIHTDrW5oIGPhu6dhIHPhuqNuIHBo4bqpbSBtw6Aga2jDoWNoIGjDoG5nIHF1YW4gdMOibSwgbeG7qWMgxJHhu5kgcXVhbiB0cuG7jW5nIGPhu6dhIGPDoWMgdGh14buZYyB0w61uaCDEkeG7kWkgduG7m2kga2jDoWNoIGjDoG5nLCBuaeG7gW0gdGluIGPhu6dhIGtow6FjaCBow6BuZyDEkeG7kWkgduG7m2kgY8OhYyBuaMOjbiBoaeG7h3UsIMSR4buZIGjhu691IGThu6VuZyBj4bunYSBjw6FjIHRodeG7mWMgdMOtbmguDQoNCk5nxrDhu51pIHRpw6p1IGTDuW5nIHhlbSBt4buXaSBz4bqjbiBwaOG6qW0gbmjGsCBt4buZdCB04bqtcCBo4bujcCBjw6FjIHRodeG7mWMgdMOtbmggduG7m2kgbmjhu69uZyBraOG6oyBuxINuZyDEkWVtIGzhuqFpIG5o4buvbmcgw61jaCBs4bujaSB0w6xtIGtp4bq/bSB2w6AgdGjhu49hIG3Do24gbmh1IGPhuqd1IGtow6FjIG5oYXUuIE5o4buvbmcgdMOtbmggY2jhuqV0IG3DoCBuZ8aw4budaSBtdWEgcXVhbiB0w6JtIHRoYXkgxJHhu5VpIHTDuXkgdGhlbyBsb+G6oWkgc+G6o24gcGjhuqltICh2w60gZOG7pSDDtCB0w7QgeGUgbcOheSBxdWFuIHTDom0gxJHhur9uIHhlIGPDsyBjaOG6oXkgw6ptIGtow7RuZywgdGnDqnUgdGjhu6UgeMSDbmcgw610IGtow7RuZ+KApiwgbcOheSDhuqNuaCBxdWFuIHTDom0gxJHhur9uIMSR4buZIG7DqXQsIHThu5FjIMSR4buZIGNo4bulcOKApikuIEjhu40gc+G6vSBjaMO6IMO9IG5oaeG7gXUgbmjhuqV0IMSR4bq/biBuaOG7r25nIHTDrW5oIGNo4bqldCBz4bq9IMSRZW0gbOG6oWkgY2hvIGjhu40gbmjhu69uZyDDrWNoIGzhu6NpIGPhuqduIHTDrG0ga2nhur9tLg0KDQpN4bupYyDEkeG7mSBxdWFuIHRy4buNbmcgY+G7p2EgY8OhYyB0aHXhu5ljIHTDrW5oIGtow6FjIG5oYXUgxJHhu5FpIHbhu5tpIGPDoWMgbmjDs20ga2jDoWNoIGjDoG5nIGtow6FjIG5oYXUuIMSQw7RpIGtoaSwgbmjhu69uZyB0aHXhu5ljIHTDrW5oIG7hu5VpIGLhuq10IG5o4bqldCBjw7MgdGjhu4Mga2jDtG5nIHBo4bqjaSBsw6Agbmjhu69uZyB0aHXhu5ljIHTDrW5oIHF1YW4gdHLhu41uZyBuaOG6pXQsIHRodeG7mWMgdMOtbmggbsOgeSBjw7MgdGjhu4MgcXVhbiB0cuG7jW5nIHbhu5tpIG5ow7NtIGtow6FjaCBow6BuZyBuw6B5IG5oxrBuZyBs4bqhaSBraMO0bmcgcXVhbiB0cuG7jW5nIHbhu5tpIG5ow7NtIGtow6FjaCBow6BuZyBraMOhYywgbeG7mXQgc+G7kSB0aHXhu5ljIHTDrW5oIGPDsyB0aOG7gyBu4buVaSBi4bqtdCBsw6puIGzDoCB2w6wgbmfGsOG7nWkgdGnDqnUgZMO5bmcgduG7q2EgbeG7m2kgeGVtIG3hu5l0IHF14bqjbmcgY8OhbyBjw7Mgbmjhuq9jIHThu5tpIGNow7puZyBoxqFuIGzDoCBo4buNIMSRw6MgxJHhu4tuaCB24buLIMSRxrDhu6NjIHThuqdtIHF1YW4gdHLhu41uZyBj4bunYSB0aHXhu5ljIHTDrW5oIMSRw7MgxJHhu5FpIHbhu5tpIGLhuqNuIHRow6JuLiBEb2FuaCBuZ2hp4buHcCBj4bqnbiBxdWFuIHTDom0gbmhp4buBdSBoxqFuIMSR4bq/biB04bqnbSBxdWFuIHRy4buNbmcgY+G7p2EgY8OhYyB0aHXhu5ljIHTDrW5oIHThu5NuIHThuqFpIHRyb25nIHPhuqNuIHBo4bqpbSDEkeG7gyDEkcOhcCDhu6luZyDEkcaw4bujYyBuaHUgY+G6p3UgY+G7p2EgbmfGsOG7nWkgdGnDqnUgZMO5bmcuDQoNCk5p4buBbSB0aW4gY+G7p2Ega2jDoWNoIGjDoG5nIMSR4buRaSB24bubaSBjw6FjIG5ow6NuIGhp4buHdSwgc+G6o24gcGjhuqltIGPFqW5nIGPDsyDhuqNuaCBoxrDhu59uZyBs4bubbiB04bubaSBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIGPhu6dhIGjhu40uIE5nxrDhu51pIHRpw6p1IGTDuW5nIGPDsyBraHV5bmggaMaw4bubbmcgeMOieSBk4buxbmcgY2hvIG3DrG5oIG3hu5l0IHThuq1wIGjhu6NwIG5o4buvbmcgbmnhu4FtIHRpbiB2w6BvIGPDoWMgbmjDo24gaGnhu4d1LiBOaeG7gW0gdGluIHbDoG8gbmjDo24gaGnhu4d1IGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nIHPhur0gdGhheSDEkeG7lWkgdGhlbyBraW5oIG5naGnhu4dtIGPhu6dhIGjhu40gdsOgIHTDoWMgxJHhu5luZyBj4bunYSBuaOG6rW4gdGjhu6ljIGPDsyBjaOG7jW4gbOG7jWMsIGLDs3AgbcOpbyBjw7MgY2jhu41uIGzhu41jIHbDoCBnaGkgbmjhu5sgY8OzIGNo4buNbiBs4buNYy4gS2hpIG3hu5l0IG5ow6NuIGhp4buHdSDEkcOjIGNoaeG6v20gxJHGsOG7o2Mgbmnhu4FtIHRpbiBj4bunYSBraMOhY2ggaMOgbmcgc+G6vSBk4buFIMSRxrDhu6NjIGjhu40gbOG7sWEgY2jhu41uIOG7nyBjw6FjIGzhuqduIG11YSB0aeG6v3AgdGhlby4gTmjDo24gaGnhu4d1IGzDoCBt4buZdCB0w6BpIHPhuqNuIHbDtCBow6xuaCBj4bunYSBjw7RuZyB0eSwgZG8gduG6rXkgdmnhu4djIHjDonkgZOG7sW5nIG3hu5l0IHRoxrDGoW5nIGhp4buHdSBt4bqhbmggbMOgIGPhu7FjIGvhu7MgcXVhbiB0cuG7jW5nLg0KDQpN4buXaSB0aHXhu5ljIHTDrW5oIGPhu6dhIHPhuqNuIHBo4bqpbSB0aMO0bmcgdGjGsOG7nW5nIMSRxrDhu6NjIG5nxrDhu51pIHRpw6p1IGTDuW5nIGfDoW4gY2hvIG3hu5l0IG3hu6ljIMSR4buZIGjhu691IGThu6VuZyBraMOhYyBuaGF1LiBLaGkgcXV54bq/dCDEkeG7i25oIG11YSBt4buZdCBz4bqjbiBwaOG6qW0sIGtow6FjaCBow6BuZyBsdcO0biBjw7MgeHUgaMaw4bubbmcgY2jhu41uIHPhuqNuIHBo4bqpbSBjw7MgdOG7lW5nIGdpw6EgdHLhu4sgc+G7rSBk4bulbmcgdOG7qyBjw6FjIHRodeG7mWMgdMOtbmggbMOgIGzhu5tuIG5o4bqldC4gDQoNCiogKipRdXnhur90IMSR4buLbmggbXVhIHbDoCBow6BuaCDEkeG7mW5nIG11YSoqDQoNCuG7niBnaWFpIMSRb+G6oW4gxJHDoW5oIGdpw6EsIG5nxrDhu51pIHRpw6p1IGTDuW5nIMSRw6MgaMOsbmggdGjDoG5oIHPhu58gdGjDrWNoIMSR4buRaSB24bubaSBuaOG7r25nIG5ow6NuIGhp4buHdSB0cm9uZyB04bqtcCBs4buxYSBjaOG7jW4uIE5nxrDhu51pIHRpw6p1IGTDuW5nIGPFqW5nIGPDsyB0aOG7gyBow6xuaCB0aMOgbmggw70gxJHhu4tuaCBtdWEgbmjDo24gaGnhu4d1IMawYSB0aMOtY2ggbmjhuqV0LiBUdXkgbmhpw6puIGPDsm4gaGFpIHnhur91IHThu5EgbuG7r2EgY8OzIHRo4buDIHhlbiB2w6BvIGdp4buvYSDDvSDEkeG7i25oIG11YSB2w6AgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZy4NCg0K4oCTIFnhur91IHThu5EgxJHhuqd1IHRpw6puIGzDoCB0aMOhaSDEkeG7mSBj4bunYSBuZ8aw4budaSBraMOhYyAoYuG6oW4gYsOoLCBnaWEgxJHDrG5oLCDEkeG7k25nIG5naGnhu4dw4oCmKS4gVHLGsOG7m2Mga2hpIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcsIGJhbyBnaeG7nSBuZ8aw4budaSB0acOqdSBkw7luZyBjxaluZyBjw7MgeHUgaMaw4bubbmcgdGhhbSBraOG6o28gw70ga2nhur9uIHThu6sgbmfGsOG7nWkgdGjDom4sIGhv4bq3YyDDvSBraeG6v24gbmjhu69uZyBuZ8aw4budaSB4dW5nIHF1YW5oIMSRw6FuaCBnacOhIHbhu4Egc+G6o24gcGjhuqltIMSRw7MuIFRow6FpIMSR4buZIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nIGPDsyBi4buLIHTDoWMgxJHhu5luZyBi4bufaSB0aMOhaSDEkeG7mSBj4bunYSBuZ8aw4budaSB4dW5nIHF1YW5oIGhheSBraMO0bmcgbOG6oWkgcGjhu6UgdGh14buZYyB2w6BvIGhhaSDEkeG6t2MgxJFp4buDbToNCiAgKyBUaOG7qSBuaOG6pXQgbMOgIG3hu6ljIMSR4buZIG3Do25oIGxp4buHdCDhu58gdGjDoWkgxJHhu5kgcGjhuqNuIOG7qW5nIGPhu6dhIG5nxrDhu51pIHh1bmcgcXVhbmggduG7gSBz4bqjbiBwaOG6qW0gdHJ1eeG7gW4gxJHhuqF0IMSR4bq/biBuZ8aw4budaSB0acOqdSBkw7luZy4NCiAgKyBUaOG7qSBoYWkgbMOgIMSR4buZbmcgY8ahIGzDoG0gdGhlbyBwaOG6o24g4bupbmcgY+G7p2EgbmfGsOG7nWkga2jDoWMuIFRow6FpIMSR4buZIGPhu6dhIG5nxrDhu51pIGtow6FjIGPDoG5nIG3Do25oIGxp4buHdCDEkeG7k25nIHRo4budaSBuZ8aw4budaSB0YSBjw6BuZyBn4bqnbiBnxalpIHbhu5tpIG5nxrDhu51pIHRpw6p1IGTDuW5nIHRow6wgY8OgbmcgY8OzIGto4bqjIG7Eg25nIG5nxrDhu51pIHRpw6p1IGTDuW5nIMSRaeG7gXUgY2jhu4luaCBs4bqhaSBxdXnhur90IMSR4buLbmggbXVhIHPhuq9tIGPhu6dhIG3DrG5oIHRoZW8gbmfGsOG7nWkgxJHDsy4gVHV5IG5oacOqbiwg4bqjbmggaMaw4bufbmcgY+G7p2Egbmjhu69uZyBuZ8aw4budaSBraMOhYyBz4bq9IHRy4bufIG7Dqm4gcGjhu6ljIHThuqFwIGtoaSBjw7MgbeG7mXQgdsOgaSBuZ8aw4budaSB0aMOibiBj4bqtbiB24bubaSBuZ8aw4budaSBtdWEgY8OzIMO9IGtp4bq/biB0csOhaSBuZ8aw4bujYyBuaGF1IHbhu4Egc+G6o24gcGjhuqltIG5nxrDhu51pIHRpw6p1IGTDuW5nIGzhu7FhIGNo4buNbi4NCg0K4oCTIFnhur91IHThu5EgdGjhu6kgaGFpIGzDoCBjw6FjIHnhur91IHThu5EgdMOsbmggaHXhu5FuZyBi4bqldCBuZ+G7nS4gTmfGsOG7nWkgdGnDqnUgZMO5bmcgaMOsbmggdGjDoG5oIMO9IMSR4buLbmggbXVhIGjDoG5nIHRyw6puIGPGoSBz4bufIG5o4buvbmcgeeG6v3UgdOG7kSBuaMawICh0aHUgbmjhuq1wIGThu7Ega2nhur9uIGPhu6dhIGdpYSDEkcOsbmgsIGdpw6EgZOG7sSBraeG6v24gdsOgIMOtY2ggbOG7o2kgZOG7sSBraeG6v24gY+G7p2Egc+G6o24gcGjhuqltKS4gS2hpIG5nxrDhu51pIHRpw6p1IGTDuW5nIHPhuq9wIHPhu61hIGjDoG5oIMSR4buZbmcgdGjDrCBuaOG7r25nIHnhur91IHThu5EgdMOsbmggaHXhu5FuZyBi4bqldCBuZ+G7nSBjw7MgdGjhu4MgeHXhuqV0IGhp4buHbiDEkeG7mXQgbmfhu5l0IHbDoCBsw6BtIHRoYXkgxJHhu5VpIMO9IMSR4buLbmggbXVhIGjDoG5nLCBo4buNIG5o4bqtbiB0aOG7qWMgxJHGsOG7o2Mgbmjhu69uZyBy4bunaSBybyBjw7MgdGjhu4MgZ+G6t3AgcGjhuqNpLCBraMO0bmcgZMOhbSBjaOG6r2MgduG7gSBxdXnhur90IMSR4buLbmggY+G7p2EgbcOsbmggZOG6q24gxJHhur9uIGLEg24ga2hvxINuIGxvIGzhuq9uZyBraGkgbXVhIGjDoG5nLCBo4buNIGPDsyB0aOG7gyBz4bq9IGjhu6d5IGLhu48gcXV54bq/dCDEkeG7i25oLCBob+G6t2MgdGh1IHRo4bqtcCB0aMOqbSB0aMO0bmcgdGluIGhv4bq3YyBjw6FjIHnhur91IHThu5EgaOG7lyB0cuG7oyB0w61jaCBj4buxYyDEkeG7gyB0xINuZyDEkeG7mSB0aW4gdMaw4bufbmcgdsOgbyBxdXnhur90IMSR4buLbmggY+G7p2EgbcOsbmguDQoNClbDrCB24bqteSBuaOG7r25nIHPhu58gdGjDrWNoIHbDoCB0aOG6rW0gY2jDrSBj4bqjIG5o4buvbmcgw70gxJHhu4tuaCBtdWEgaMOgbmcgY8Wpbmcga2jDtG5nIHBo4bqjaSBsw6Agbmjhu69uZyBk4bqldSBoaeG7h3UgaG/DoG4gdG/DoG4gdGluIGPhuq15IGLDoW8gdHLGsOG7m2MgaMOgbmggdmkgbXVhIGPhu6dhIGtow6FjaCBow6BuZy4NCiAgDQoqICoqUGjhuqNuIOG7qW5nIHNhdSBtdWEqKiANCg0KUGjhuqNuIOG7qW5nIHNhdSBtdWEgbMOgIGLGsOG7m2MgY3Xhu5FpIGPDuW5nIHRyb25nIHF1w6EgdHLDrG5oIHF1eeG6v3QgxJHhu4tuaCBtdWEgY+G7p2EgbmfGsOG7nWkgdGnDqnUgZMO5bmcuIFNhdSBraGkgbXVhIHhvbmcsIGtow6FjaCBow6BuZyBz4butIGThu6VuZyBz4bqjbiBwaOG6qW0gdsOgIGPDsyBjw6FjIMSRw6FuaCBnacOhIHbhu4Egc+G6o24gcGjhuqltIG11YSDEkcaw4bujYy4gTeG7qWMgxJHhu5kgaMOgaSBsw7JuZyBj4bunYSBraMOhY2ggaMOgbmcgc+G6vSB0w6FjIMSR4buZbmcgdHLhu7FjIHRp4bq/cCDEkeG6v24gY8OhYyBxdXnhur90IMSR4buLbmggbXVhIHbDoG8gbOG6p24gc2F1Lg0KICANClPhu7EgaMOgaSBsw7JuZyBoYXkga2jDtG5nIGPhu6dhIGtow6FjaCBow6BuZyBzYXUga2hpIG11YSBwaOG7pSB0aHXhu5ljIHbDoG8gbeG7kWkgdMawxqFuZyBxdWFuIGdp4buvYSBz4buxIG1vbmcgxJHhu6NpIGPhu6dhIGtow6FjaCBow6BuZyB0csaw4bubYyBraGkgbXVhIHbDoCBz4buxIGPhuqNtIG5o4bqtbiBj4bunYSBo4buNIHNhdSBraGkgbXVhIHbDoCBz4butIGThu6VuZyBz4bqjbiBwaOG6qW0uIEtoaSBraMOhY2ggaMOgbmcgaMOgaSBsw7JuZywgaOG7jSBz4bq9IGNoaWEgc+G6uyB0w6JtIHRy4bqhbmcgaMawbmcgcGjhuqVuIMSRw7MgY2hvIG5oaeG7gXUgbmfGsOG7nWkga2jDoWMuIE5oxrAgduG6rXksIGPDsyB0aOG7gyBuw7NpIGtow6FjaCBow6BuZyBow6BpIGzDsm5nIGzDoCBuZ8aw4budaSBxdeG6o25nIGPDoW8gbWnhu4VuIHBow60gdsOgIGhp4buHdSBxdeG6oyBuaOG6pXQgY2hvIGRvYW5oIG5naGnhu4dwLiBOZ8aw4bujYyBs4bqhaSBraGkgaOG7jSBraMO0bmcgaMOgaSBsw7JuZywgaOG7jSBjxaluZyBz4bq9IOKAnGNoaWEgYnXhu5Nu4oCdIHbhu5tpIG5oaeG7gXUgbmfGsOG7nWkga2jDoWMuIMSQaeG7gXUgbsOgeSBsw6BtIGNobyBjw7RuZyB0eSBjw7Mgbmhp4buBdSBuZ3V5IGPGoSBt4bqldCDEkWkga2jDoWNoIGjDoG5nIHRp4buBbSBuxINuZy4NCg0KRG9hbmggbmdoaeG7h3AgY+G6p24gY2jDuiB0cuG7jW5nIHThu5tpIHZp4buHYyBuZ2hpw6puIGPhu6l1IGPDoWMgeeG6v3UgdOG7kSDhuqNuaCBoxrDhu59uZyBxdcOhIHRyw6xuaCBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIGPhu6dhIG5nxrDhu51pIHRpw6p1IGTDuW5nLCDEkeG7k25nIHRo4budaSBjxaluZyBj4bqnbiBwaOG6o2kgdMOsbSBoaeG7g3UgdMOhYyDEkeG7mW5nIGPhu6dhIHZp4buHYyByYSBxdXnhur90IMSR4buLbmggaGnhu4duIHThuqFpIGThuqtuIMSR4bq/biBz4buxIHRoYXkgxJHhu5VpIGjDoG5oIHZpIHRyb25nIHTGsMahbmcgbGFpIG5oxrAgdGjhur8gbsOgbyDEkeG7gyBjw7MgdGjhu4MgxJHhu4EgcmEgY2jDrW5oIHPDoWNoIE1hcmtldGluZyBzYW8gY2hvIHBow7kgaOG7o3AgbmjhuqV0Lg0KICANCiMgQ0jGr8agTkcgMi4gUEjGr8agTkcgUEjDgVAgTkdIScOKTiBD4buoVQ0KIyMgMi4xIEThu68gbGnhu4d1IG5naGnDqm4gY+G7qXUgDQpE4buvIGxp4buHdSBuZ2hpw6puIGPhu6l1IHbhu4EgaGnhu4d1IHN14bqldCBj4bunYSBjaGnhur9uIGThu4tjaCBxdeG6o25nIGPDoW8gdHLDqm4gQW1hem9uIHRow7RuZyBxdWEgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY+G7p2Ega2jDoWNoIGjDoG5nIGJhbyBn4buTbSB04burIGtow7NhIHTDrG0ga2nhur9tLCB04bu3IGzhu4cgY2xpY2ssIHThu7cgbOG7hyB0aMOqbSB2w6BvIGdp4buPIGjDoG5nIHbDoCBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nLiBOw7MgY2hvIHBow6lwIGPDoWMgZG9hbmggbmdoaeG7h3AgdOG7kWkgxrB1IGjDs2EgY8OhYyBjaGnhur9uIGzGsOG7o2MgcXXhuqNuZyBjw6FvIGPhu6dhIGjhu40gdsOgIGPhuqNpIHRoaeG7h24gUk9JIGLhurFuZyBjw6FjaCBwaMOibiB0w61jaCBjw6FjIHThu6sga2jDs2EgdMOsbSBraeG6v20gdsOgIHPhuqNuIHBo4bqpbSBwaMO5IGjhu6NwIG5o4bqldCwgxJHhu5NuZyB0aOG7nWkgxJHGsGEgcmEgY8OhYyBxdXnhur90IMSR4buLbmggZOG7sWEgdHLDqm4gZOG7ryBsaeG7h3UuIFbhu5tpIGThu68gbGnhu4d1IGNow61uaCB4w6FjIHbDoCDEkcOhbmcgdGluIGPhuq15LCBjw6FjIGRvYW5oIG5naGnhu4dwIGPDsyB0aOG7gyB0aGVvIGTDtWkgaGnhu4d1IHN14bqldCBxdeG6o25nIGPDoW8gY+G7p2EgbcOsbmggdsOgIGThuqtuIMSR4bqndSDEkeG7kWkgdGjhu6cgdHLDqm4gQW1hem9uLiBE4buvIGxp4buHdSBiYW8gZ+G7k20gdGjDtG5nIHRpbiBj4bunYSA4MDAga2jDoWNoIGjDoG5nIHThuqFpIEFtYXpvbiB2w6AgxJHGsOG7o2MgbOG6pXkgdOG7qyBLYWdnbGUuDQpgYGB7ciB9DQpzZXR3ZCgiRjovIikNCmRhdGEgPC0gcmVhZC5jc3YoImRhdGEzLmNzdiIpDQpsaWJyYXJ5KERUKQ0KRFQ6OmRhdGF0YWJsZShkYXRhKQ0KYGBgDQpE4buvIGxp4buHdSBuZ2hpw6puIGPhu6l1IGfhu5NtIDk4MyBxdWFuIHPDoXQgduG7m2kgMTQgYmnhur9uIGJhbyBn4buTbSAxNSB24bubaSA2IGJp4bq/biDEkeG7i25oIHTDrW5oIHbDoCA4IGJp4bq/biDEkeG7i25oIGzGsOG7o25nLg0KDQoqICoqQmnhur9uIMSR4buLbmggdMOtbmgqKg0KDQpJbmNvbWUgbGV2ZWw6IE3hu6ljIHRodSBuaOG6rXAgKENhbywgVHJ1bmcgYsOsbmggY2FvLCBUcnVuZyBiw6xuaCwgDQpUcnVuZyBiw6xuaCB0aOG6pXAsIFRo4bqlcCkNCg0KQWdlOiBuaMOzbSB0deG7lWkgDQoNClNlYXJjaDogVOG7qyBraMOzYSB0w6xtIGtp4bq/bQ0KDQpHZW5kZXI6IEdp4bubaSB0w61uaA0KDQpDb3VudHJ5OiBRdeG7kWMgZ2lhDQoNClRvdGFsIGNsaWNrOiB04buVbmcgc+G7kSBs4bqnbiBuaOG6pXAgeGVtIHF14bqjbmcgY8Ohbw0KDQpQdXJjaGFzZTogcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gKDE6IMSQ4buTbmcgw70gbXVhLCAwOiBLaMO0bmcgxJHhu5NuZyDDvSBtdWEpDQoNCiogKipCaeG6v24gxJHhu4tuaCBsxrDhu6NuZyoqDQoNClRpbWU6IFRo4budaSBnaWFuIGTDoG5oIGNobyBJbnRlcm5ldA0KDQpTZWFyY2ggdm9sdW1lOiBz4buRIGzDoG4ga2jDoWNoIGjDoG5nIHPhu60gZOG7pW5nIHThu6sga2jDs2EgdMOsbSBraeG6v20NCg0KVG90YWwgaW1wOiBz4buRIGzhuqduIHF14bqjbmcgY8OhbyDEkcaw4bujYyBoaeG7g24gdGjhu4sgY2hvIGtow6FjaCBow6BuZyB0cm9uZyBr4bq/dCBxdeG6oyB0w6xtIGtp4bq/bQ0KDQpDTGljayByYXRlOiB04bu3IGzhu4cgbmjhuqVwIHhlbSBxdeG6o25nIGPDoW8NCg0KVG90YWwgY2FydDogdOG7lW5nIHPhu5EgbOG6p24gdGjDqm0gdsOgbyBnaeG7jyBow6BuZw0KDQpBZGQgcmF0ZTogdOG7tyBs4buHIHRow6ptIHbDoG8gZ2nhu48gaMOgbmcNCg0KIyMgMi4yIE3DtCBow6xuaCBuZ2hpw6puIGPhu6l1DQojIyMgMi4yLjEgTcO0IGjDrG5oIGjhu5NpIHF1eSB24bubaSBow6BtIGxvZ2l0DQpYw6l0IGJp4bq/biDEkcOhcCDhu6luZyBsw6AgYmnhur9uIG5o4buLIHBow6JuIHbhu5tpIGhhaSB0aHXhu5ljIHTDrW5oOiBt4buZdCBn4buNaSBsw6Ag4oCcVGjDoG5oIGPDtG5n4oCdIHbDoCBt4buZdCBn4buNaSBsw6Ag4oCcVGjhuqV0IGLhuqFp4oCdLCBjaOG7i3Ugc+G7sSB0w6FjIMSR4buZbmcgY+G7p2EgbeG7mXQgdOG6rXAgaOG7o3AgbSBiaeG6v24gJFg9KFhfMSxYXzIsLi4uLFhfbSkkIG3DoCB0YSBn4buNaSBsw6AgY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaC4gQmnhur9uIMSRw6FwIOG7qW5nIMSRxrDhu6NjIMSR4bqhaSBkaeG7h24sIGhheSBsxrDhu6NuZyBow7NhIGLhu59pIGJp4bq/biBuZ+G6q3Ugbmhpw6puIGPDsyBwaMOibiBwaOG7kWkgMCDigJMgMToNCg0KWSA9IDEgbuG6v3UgxJHDoXAg4bupbmcgbMOgIOKAnFRow6BuaCBjw7RuZ+KAnSB2w6AgMCBu4bq/dSDEkcOhcCDhu6luZyBsw6Ag4oCcVGjhuqV0IGLhuqFp4oCdDQoNCk3DtCBow6xuaCBsb2dpc3RpYyBtw7QgdOG6oyBz4buxIHBo4bulIHRodeG7mWMgY+G7p2EgYmnhur9uIMSRw6FwIOG7qW5nIHRow7RuZyBxdWEgeMOhYyBzdeG6pXQg4oCcVGjDoG5oIGPDtG5n4oCdICTPgCh4KT1QKFk9MXxYPXgpJCDhu6luZyB24bubaSBt4bupYyAkeD0oeF8xLHhfMiwuLi4seF9tKSQgY+G7p2EgY8OhYyBiaeG6v24gZ2nhuqNpIHRow61jaCBwaOG7pSB0aHXhu5ljIHbDoG8gJHg9KHhfMSx4XzIsLi4uLHhfbSkkIGTGsOG7m2kgZOG6oW5nOg0KDQokbG9nKFxmcmFje8+AKHgpfXsoMeKIks+AKHgpKX0pPc6yXzArzrJfMS54XzErzrJfMi54XzIrLi4uK86yX20ueF9tJCANCiAgIA0KVHJvbmcgxJHDsyBjw6FjIGjhurFuZyBz4buRICTOsl8wLM6yXzEszrJfMiwuLi4szrJfbSQgxJHGsOG7o2MgZ+G7jWkgbMOgIGPDoWMgaOG7hyBz4buRIGjhu5NpIHF1eS4gSOG7hyBz4buRICTOsmokIGPhu6dhIGJp4bq/biAkeF9qJCBsw6AgbMaw4bujbmcgdGhheSDEkeG7lWkgY+G7p2EgJGxvZyhcZnJhY3vPgCh4KX17KDHiiJLPgCh4KSl9KSQsIGhheSBj4bunYSAkbG9nW09kZHMoeCldJCBraGkgYmnhur9uICR4aiQgdGhheSDEkeG7lWkgMSDEkcahbiB24buLLCB0cm9uZyDEkWnhu4F1IGtp4buHbiBjw6FjIGJp4bq/biBraMOhYyBraMO0bmcgdGhheSDEkeG7lWksICRqPTEsMizigKYsbSQNCg0KKiBO4bq/dSAkzrJfaj4wLM+AKHgpJCDEkeG7k25nIGJp4bq/biB0aGVvICR4X2okLCBraGkgY8OhYyBiaeG6v24ga2jDoWMga2jDtG5nIHRoYXkgxJHhu5VpLg0KDQoqIE7hur91ICTOsl9qPDAsz4AoeCkkIG5naOG7i2NoIGJp4bq/biB0aGVvICR4X2okLCBraGkgY8OhYyBiaeG6v24ga2jDoWMga2jDtG5nIHRoYXkgxJHhu5VpLg0KDQoqIE7hur91ICTOsl9qPTAsz4AoeCkkIGtow7RuZyBwaOG7pSB0aHXhu5ljICR4aiQNCg0KS2hpICR4X2okIHTEg25nIHRow6ptIDEgxJHGoW4gduG7iywgY8OybiBjw6FjIGJp4bq/biBraMOhYyBraMO0bmcgdGhheSDEkeG7lWkgdGjDrCB04bu3IGzhu4cgY8aw4bujYyAkT2Rkcyh4KSQgxJHGsOG7o2MgbmjDom4gbMOqbiB24bubaSAkZV4ozrJfaikkDQpNw7QgxrDhu5tjIGzGsOG7o25nIGNobyBtw7QgaMOsbmggaOG7k2kgcXV5IExvZ2lzdGljIGzDoCA6DQoNCiAgJGxvZyhcZnJhY3tcaGF0e8+AfSh4KX17KDHiiJJcaGF0e8+AfSh4KSl9KT1caGF0e86yfV8wK1xoYXR7zrJ9XzEueF8xK1xoYXR7zrJ9XzIueF8yKy4uLitcaGF0e86yfV9tLnhfbSQNCg0KVHJvbmcgxJHDsyBjw6FjIGjhu4cgc+G7kSAkXGhhdHvOsn1faiQgxrDhu5tjIGzGsOG7o25nIGNobyBo4buTaSBxdXkgJM6yX2okIMSRxrDhu6NjIHTDrG0gdGhlbyBwaMawxqFuZyBwaMOhcCBo4bujcCBsw70gY+G7sWMgxJHhuqFpLg0KDQojIyMgMi4yLjIgTcO0IGjDrG5oIGjhu5NpIHF1eSB24bubaSBow6BtIHByb2JpdA0KR2nhuqMgc+G7rSBiaeG6v24gxJHDoXAg4bupbmcgbmjhu4sgcGjDom4gduG7m2kgaGFpIGdpw6EgdHLhu4sgbcOgIHRhIGfhu41pIGzDoCDigJxUaMOgbmggY8O0bmfigJ0gdsOgIOKAnFRo4bqldCBi4bqhaeKAnSwgcGjhu6UgdGh14buZYyB2w6BvIG0gYmnhur9uIGdp4bqjaSB0aMOtY2g6ICRYXzEsWF8yLC4uLixYX20kLiBLw70gaGnhu4d1Og0KDQokWD0oWF8xLFhfMiwuLi4sWF9tKSQNCg0KWSA9IDEgbuG6v3UgxJHDoXAg4bupbmcgbMOgIOKAnFRow6BuaCBjw7RuZ+KAnSB2w6AgMCBu4bq/dSDEkcOhcCDhu6luZyBsw6Ag4oCcVGjhuqV0IGLhuqFp4oCdIHRow6wgeMOhYyBzdeG6pXQg4oCcVGjDoG5oIGPDtG5n4oCdIOG7qW5nIHbhu5tpICRYXzE9eF8xLFhfMj14XzIsLi4uLFhfbT14X20kIGzDoDoNCg0KJM+AKHgpPc+AKHhfMSx4XzIsLi4uLHhfbSk9RShZfFhfMT14XzEsWF8yPXhfMiwuLi4sWF9tPXhfbSkkDQoNCk3DtCBow6xuaCBQcm9iaXQgxJFhIGJp4bq/biBjw7MgZOG6oW5nOg0KJM+AKHhfMSx4XzIsLi4uLHhfbSk9zqYozrJfMCvOsl8xeF8xK86yXzJ4XzIrLi4uK86yX214X20kDQoNCmhheTogJFByb2JpKM+AKHhfMSx4XzIsLi4uLHhfbSkpPc6yXzArzrJfMXhfMSvOsl8yeF8yKy4uLivOsl9teF9tJA0KDQp0cm9uZyDEkcOzIM+VIGzDoCBow6BtIHBow6JuIHBo4buRaSBjaHXhuqluIGNow61uaCB04bqvYzoNCg0KJM6mKHQpPVxmcmFjezF9e1xzcXJ0ezLPgH19XGludF90XlxpbmZ0eVxtYXRocm17ZX1ee1xmcmFjey0xfXsyfXVeMn1kdSQNCg0KdsOgIFByb2JpdCBsw6AgcGjDqXAgbOG6pXkgaMOgbSBuZ8aw4bujYyBj4bunYSDOpjoNCg0KJFByb2JpdCjPgCh4XzEseF8yLC4uLix4X20pKT0gzqZeey0xfSjPgCh4XzEseF8yLC4uLix4X20pKSQNCg0KIyMjIDIuMi4zIE3DtCBow6xuaCBo4buTaSBxdXkgduG7m2kgaMOgbSBjbG9nbG9nDQpUcm9uZyB0csaw4budbmcgaOG7o3AgdOG7tyBs4buHIGPGsOG7o2MgcGjhu6UgdGh14buZYyB2w6BvIGPDoWMgYmnhur9uIGdp4bqjaSB0aMOtY2ggZMaw4bubaSBk4bqhbmcgaMOgbSBsxal5IHRo4burYToNCg0KJE9kZHMoeCk9XGZyYWN7z4AoeCl9ezHiiJLPgCh4KX09zrsueF57zrJfMX1fMS54XnvOsl8yfV8yLi4ueF57zrJfbX1fbSQNCg0KVGEgbmjhuq1uIMSRxrDhu6NjIG3DtCBow6xuaCBsb2dpc3RpYyBjw7MgY8OhYyBiaeG6v24gZOG7sSBiw6FvIOG7nyBk4bqhbmcgbG9nLCBn4buNaSBsw6AgbcO0IGjDrG5oIGxvZ2lzdGljIGThuqFuZyBsb2ctbG9nDQoNCiRsb2coXGZyYWN7z4AoeCl9ezHiiJLPgCh4KX0pPc6yXzArzrJfMS5sb2d4XzErzrJfMi5sb2d4XzIrLi4uK86yX20ubG9neF9tJA0KDQojIyAyLjMgQ8OhYyB0acOqdSBjaMOtIMSRw6FuaCBnacOhIG3DtCBow6xuaA0KIyMjIDIuMy4xIENo4buJIHPhu5EgQUlDDQpBSUMgxJHGsOG7o2MgxJHhu4EgeHXhuqV0IGLhu59pIEFrYWlrZSBIaXJvdHVndSwgbeG7mXQgbmjDoCB0aOG7kW5nIGvDqiBo4buNYyBuZ8aw4budaSBOaOG6rXQuIEFJQyBsw6AgbeG7mXQgdGnDqnUgY2jDrSDEkcaw4bujYyBz4butIGThu6VuZyBt4buZdCBjw6FjaCBwaOG7lSBiaeG6v24gxJHhu4MgxJHDoW5oIGdpw6EgbeG7mXQgbcO0IGjDrG5oIGjhu5NpIHF1eSDEkcaw4bujYyDGsOG7m2MgbMaw4bujbmcgYuG7n2kgcGjGsMahbmcgcGjDoXAgTWF4aW11bSBMaWtlbGlob29kLiBN4buZdCBjw6FjaCBjaHVuZyBjaHVuZyBnacOhIHRy4buLIGPhu6dhIEFJQyBjw6BuZyBuaOG7jyB0aMOsIG3DtCBow6xuaCBjw6BuZyB04buRdC4gQUlDIMSRxrDhu6NjIHTDrW5oIGLhurFuZyBjw7RuZyB0aOG7qWMgc2F1Og0KDQokQUlDPS0ybG4oTCkgKyAyayQNCg0KVuG7m2kgJEwkIGzDoCBnacOhIHRy4buLIGPhu7FjIMSR4bqhaSBj4bunYSBow6BtIGxpa2VsaWhvb2QgZnVuY3Rpb24gKGjDoG0gaOG7o3AgbMO9KSB2w6AgJGskIGzDoCB0aGFtIHPhu5EgY+G7p2EgbcO0IGjDrG5oLg0KDQojIyMgMi4zLjIgQ2jhu4kgc+G7kSBEZXZpYW5jZQ0KRGV2aWFuY2UgY8WpbmcgbMOgIG3hu5l0IHRpw6p1IGNow60gcuG6pXQgcGjhu5UgYmnhur9uIMSRxrDhu6NjIHPhu60gZOG7pW5nIMSR4buDIMSRw6FuaCBnacOhIG3hu5l0IG3DtCBow6xuaCBo4buTaSBxdXkgxJHGsOG7o2MgxrDhu5tjIGzGsOG7o25nIGLhu59pIHBoxrDGoW5nIHBow6FwIGjhu6NwIGzDvSBj4buxYyDEkeG6oWkgKE1MKS4gTeG7mXQgY8OhY2ggdOG7lW5nIHF1w6F0LCBjxaluZyBnaeG7kW5nIG5oxrAgY2jhu4kgc+G7kSBBSUMsIGdpw6EgdHLhu4sgY+G7p2EgRGV2aWFuY2UgY8Ogbmcgbmjhu48gdGjDrCBtw7QgaMOsbmggY8OgbmcgdOG7kXQuDQoNCiMjIyAyLjMuMyBDaOG7iSBz4buRIEJyaWVyc2NvcmUNCkzDoCBjaOG7iSB0acOqdSBkw7luZyDEkeG7gyDEkcOhbmggZ2nDoSBtw7QgaMOsbmggaOG7k2kgcXV5IGxvZ2lzdGljLCBjw7RuZyB0aOG7qWMgdMOtbmggY2jhu4kgc+G7kSBCcmllciBTY29yZSBuaMawIHNhdToNCiRCPVxmcmFjezF9e259XHN1bV97dD0xfV57bn0oWV90LVxoYXR7XHBpX3R9KV4yJA0KDQpUcm9uZyDEkcOzICRcaGF0e1xwaV90fSQgbMOgIGdpw6EgdHLhu4sgxrDhu5tjIGzGsOG7o25nIGPhu6dhICRccGkoeF9pKT1FKFl8WD14X2kpJCBjaOG7iSBz4buRIGJyaWVyc2NvcmUgdGjhuq10IGNo4bqldCBsw6AgdHJ1bmcgYsOsbmggY+G7p2EgdOG7lW5nIGLDrG5oIHBoxrDGoW5nIGPDoWMgxJHhu5kgbOG7h2NoIGdp4buvYSBnacOhIHRy4buLIGPhu6dhIGJp4bq/biBwaOG7pSB0aHXhu5ljIFkgdsOgIGdpw6EgdHLhu4sgxrDhu5tjIGzGsOG7o25nIGPhu6dhIG7Dsy4gVsOsIHbhuq15IGNo4buJIHPhu5EgQnJpZXJTY29yZSBjw6BuZyBuaOG7jyB0aMOsIG3DtCBow6xuaCBjaG8gxrDhu5tjIGzGsOG7o25nIGPDoG5nIGNow61uaCB4w6FjLCB04bupYyBsw6AgY8OgbmcgcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdSBxdWFuIHPDoXQuDQoNCiMjIyAyLjMuNCBNYSB0cuG6rW4gbmjhuqdtIGzhuqtuDQpNYSB0cuG6rW4gbmjhuqdtIGzhuqtuIGzDoCB54bq/dSB04buRIGdpw7pwIHNvIHPDoW5oIGdpw6EgdHLhu4sgdGjhu7FjIHThur8gdsOgIGdpw6EgdHLhu4sgZOG7sSBiw6FvOg0KR2nDoSB0cuG7iyBk4buxIGLDoW8gY2hvIHF1YW4gc8OhdCB0aOG7sWMgdOG6vyAkWV90JCBsw6AgJFxoYXR7WV9qfT1Acm91bmQoXGhhdHtccGlfan0pPTEkIG7hur91ICRcaGF0e1xwaV9qfT49MC41JCBu4bq/dSAkXGhhdHtccGlfan08MC41JA0KDQpO4bq/dSAkWV9qPTEkIHbDoCAkXGhhdHtZX2p9PTEkLCB0aMOsICRcaGF0e1lfan09MSQgxJHGsOG7o2MgZ+G7jWkgbMOgIG3hu5l0IGTGsMahbmcgdMOtbmggdGjhu7FjLA0KDQpO4bq/dSAkWV9qPTAkIHbDoCAkXGhhdHtZX2p9PTEkLCB0aMOsICRcaGF0e1lfan09MSQgxJHGsOG7o2MgZ+G7jWkgbMOgIG3hu5l0IGTGsMahbmcgdMOtbmggZ2nhuqMsDQoNCk7hur91ICRZX2o9MSQgdsOgICRcaGF0e1lfan09MCQsIHRow6wgJFxoYXR7WV9qfT0wJCDEkcaw4bujYyBn4buNaSBsw6AgbeG7mXQgw6JtIHTDrW5oIGdp4bqjLA0KDQpO4bq/dSAkWV9qPTAkIHbDoCAkXGhhdHtZX2p9PTAkLCB0aMOsICRcaGF0e1lfan09MCQgxJHGsOG7o2MgZ+G7jWkgbMOgIG3hu5l0IMOibSB0w61uaCB0aOG7sWMsDQoNCk7hur91ICRZX2o9XGhhdHtZX2p9JCwgdGjDrCAkXGhhdHtZX2p9JCDEkcaw4bujYyBn4buNaSBsw6AgZOG7sSBiw6FvIMSRw7puZyBoYXkgY2jDrW5oIHjDoWMsIG7hur91ICRZX2o9XGhhdHtZX2p9JCB0aMOsICRcaGF0e1lfan0kIMSRxrDhu6NjIGfhu41pIGzDoCBk4buxIGLDoW8gc2FpIGhheSBraMO0bmcgY2jDrW5oIHjDoWMuIEvDvSBoaeG7h3UgVE4gKFRydWUgTmVnYXRpdmUpIGzDoCBz4buRIMOibSB0w61uaCB0aOG7sWMsIEZOIChGYWxlIE5lZ2F0aXZlKSBsw6Agc+G7kSDDom0gdMOtbmggZ2nhuqMsIEZQIChGYWxlIFBvc2l0aXZlKSBsw6Agc+G7kSBkxrDGoW5nIHTDrW5oIGdp4bqjLCBUUCAoVHJ1ZSBQb3NpdGl2ZSkgbMOgIHPhu5EgZMawxqFuZyB0w61uaCB0aOG7sWMsIHRhIGPDszoNCk1hIHRy4bqtbjogJFxiZWdpbntibWF0cml4fSBUTiAmIEZQIFxcIEZOICYgVFAgXFwgXGVuZHtibWF0cml4fSQNCsSRxrDhu6NjIGfhu41pIGzDoCBtYSB0cuG6rW4gbmjhuqdtIGzhuqtuIChDb25mdXNpb24gTWF0cml4KSBj4bunYSBtw7QgaMOsbmguIFRyb25nIG1hIHRy4bqtbiBuaOG6p20gbOG6q24gbmfGsOG7nWkgdGEgeMOpdCBjw6FjIGNo4buJIHPhu5Egc2F1Og0KDQoqIMSQ4buZIGNow61uaCB4w6FjIHRvw6BuIHRo4buDICQ9XGZyYWN7VE4rVFB9e259JCAodOG7tyBs4buHIGThu7EgYsOhbyDEkcO6bmcgdHLDqm4gdG/DoG4gYuG7mSBt4bqrdSkNCg0KKiBTYWkgc+G7kSB0b8OgbiB0aOG7gyAkPVxmcmFje0ZOK1RQfXtufSQgKHThu7cgbOG7hyBk4buxIGLDoW8gc2FpIHRyw6puIG3huqt1KQ0KDQoqIMSQ4buZIG5o4bqheSAoc2Vuc2l0aXZpdHkpICQ9XGZyYWN7VFB9e0ZOK1RQfSQgKHThu7cgbOG7hyBk4buxIGLDoW8gxJHDum5nIHRyw6puIHThu5VuZyBz4buRIGPDoWMgdGjDoG5oIGPDtG5nIMSRxrDhu6NjIHF1YW4gc8OhdCkuIMSQ4buZIG5o4bqheSBjw6BuZyBs4bubbiBjw6BuZyB04buRdC4NCg0KKiBTYWkgc+G7kSDDom0gdMOtbmggZ2nhuqMgKEZhbGUgbmVnYXRpdmUgZXJyb3IpICQ9MS3EkOG7mSBuaOG6oXk9XGZyYWN7Rk59e0ZOK1RQfSQNCg0KKiDEkOG7mSDEkeG6t2MgYmnhu4d0IChTcGVjaWZpY2l0eSkgJFxmcmFje1RQfXtGTitUUH09XGZyYWN7IFPhu5EgZMawxqFuZyB0w61uaCB0aOG7sWN9e1Thu5VuZyBz4buRIHF1YW4gc8OhdCBjw7MgWSA9IDB9JCDEkOG7mSDEkeG6t2MgaGnhu4d1IGPDoG5nIGzhu5tuIGPDoG5nIHThu5F0DQoNCiogU2FpIHPhu5EgZMawxqFuZyB0w61uaCBnaeG6oyAkMS3EkOG7mSDEkeG6t2MgaGnhu4d1ID0gXGZyYWN7RlB9e1ROK0ZQfSQNCg0KKipN4buZdCBtw7QgaMOsbmggdOG7kXQgbMOgIG3DtCBow6xuaCBjw7MgxJHhu5kgbmjhuqF5IGzhu5tuIHbDoCDEkeG7mSDEkeG6t2MgaGnhu4d1IGzhu5tuLioqDQoNCg0KIyBDSMavxqBORyAzLiBL4bq+VCBRVeG6oiBOR0hJw4pOIEPhu6hVDQojIyAzLjEgVGjhu5FuZyBrw6ogbcO0IHThuqMgdsOgIMSR4buTIHRo4buLIGPhu6dhIHThu6tuZyBiaeG6v24NCiogKipUaOG7kW5nIGvDqiBtw7QgdOG6oyBj4bunYSBiaeG6v24gInRvdGFsIGNsaWNrIioqIA0KYGBge3J9DQpzZXR3ZCgiRjovIikNCmRhdGEgPC0gcmVhZC5jc3YoImRhdGEzLmNzdiIpDQp0YWJsZShkYXRhJHRvdGFsLmNsaWNrKQ0KdGFibGUoZGF0YSR0b3RhbC5jbGljaykvc3VtKHRhYmxlKGRhdGEkdG90YWwuY2xpY2spKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KIGRhdGEgfD4gZ2dwbG90KGFlcyh4ID0gdG90YWwuY2xpY2ssIHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsgZ2VvbV9iYXIoZmlsbCA9ICdsaWdodGJsdWUnKSArIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpLCBzdGF0ID0gJ2NvdW50JywgY29sb3IgPSAnYmxhY2snLCB2anVzdCA9IC0gLjUpICsgdGhlbWVfY2xhc3NpYygpICsgbGFicyh4ID0gJ0NsaWNrIHhlbSBxdeG6o25nIGPDoW8nLCB5ID0gJ0ZyZXF1ZW5jeScpDQpgYGANClbhu5tpIGJp4bq/biDEkeG7i25oIGzGsOG7o25nICJ0b3RhbC5jbGljayIgY8OzIHRo4buDIHRo4bqleSB04bu3IGzhu4cgbmjhuqVwIHhlbSBxdeG6o25nIGPDoW8gY+G7p2Ega2jDoWNoIGjDoG5nIGTGsOG7m2kgMTAgbOG6p24gY2hp4bq/bSB04bu3IGzhu4cgY2FvIG5o4bqldCAoNjguODUlKSwgdGhlbyBzYXUgxJHDsyBsw6AgdOG7tyBs4buHIG5o4bqlcCB4ZW0gcXXhuqNuZyBjw6FvIHThu6sgMTAtMjAgbOG6p24gKDE1LDczJSkgdsOgIHRo4bqlcCBuaOG6pXQgbMOgIHThu7cgbOG7hyBuaOG6pXAgeGVtIHF14bqjbmcgY8OhbyB04burIDkwLTEwMCBs4bqnbiAoMCwzMyUpDQoNCiogKipUaOG7kW5nIGvDqiBtw7R0IHThuqMgY+G7p2EgYmnhur9uICJwdXJjaGFzZSIqKg0KYGBge3J9DQp0YWJsZShkYXRhJFB1cmNoYXNlKQ0KdGFibGUoZGF0YSRQdXJjaGFzZSkvc3VtKHRhYmxlKGRhdGEkUHVyY2hhc2UpKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KZGF0YSB8PiBnZ3Bsb3QoYWVzKHggPSBQdXJjaGFzZSwgeSA9IGFmdGVyX3N0YXQoY291bnQpKSkgKyBnZW9tX2JhcihmaWxsID0gJ25hdnknKSArIGdlb21fdGV4dChhZXMobGFiZWwgPSBzY2FsZXM6OnBlcmNlbnQoYWZ0ZXJfc3RhdChjb3VudC9zdW0oY291bnQpKSkpLCBzdGF0ID0gJ2NvdW50JywgY29sb3IgPSAnYmxhY2snLCB2anVzdCA9IC0gLjUpICsgdGhlbWVfY2xhc3NpYygpICsgbGFicyh4ID0gJ8SQ4buTbmcgw70gbXVhIGjDoG5nJywgeSA9ICdGcmVxdWVuY3knKQ0KYGBgDQoNClThu6sgYmnhu4N1IMSR4buTIHRyw6puIHRhIGPDsyB0aOG7gyB0aOG6pXkgdOG7tyBs4buHIG5nxrDhu51pIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBsw6AgNzElLCB0cm9uZyBraGkgxJHDsyB04bu3IGzhu4cgbmfGsOG7nWkga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBsw6AgMjklLiDEkGnhu4F1IG7DoHkgY8WpbmcgcGjhuqNuIMOhbmggbeG7qWMgxJHhu5kgaGnhu4d1IHF14bqjIGPhu6dhIGNoaeG6v24gZOG7i2NoIHF14bqjbmcgY8OhbyBj4bunYSBBbWF6b24uDQoNCiogKipUaOG7kW5nIGvDqiBtw7R0IHThuqMgY+G7p2EgYmnhur9uICJBZ2UiKioNCmBgYHtyfQ0KdGFibGUoZGF0YSRBZ2UpDQp0YWJsZShkYXRhJEFnZSkvc3VtKHRhYmxlKGRhdGEkQWdlKSkNCmRhdGEgfD4gZ2dwbG90KGFlcyh4ID0gQWdlLCB5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArIGdlb21fYmFyKGZpbGwgPSAncHVycGxlJykgKyBnZW9tX3RleHQoYWVzKGxhYmVsID0gc2NhbGVzOjpwZXJjZW50KGFmdGVyX3N0YXQoY291bnQvc3VtKGNvdW50KSkpKSwgc3RhdCA9ICdjb3VudCcsIGNvbG9yID0gJ2JsYWNrJywgdmp1c3QgPSAtIC41KSArIHRoZW1lX2NsYXNzaWMoKSArIGxhYnMoeCA9ICfEkOG7mSB0deG7lWknLCB5ID0gJycpDQpgYGANCkThu7FhIHRyw6puIGJp4buDdSDEkeG7kyB0csOqbiB0YSBjw7MgdGjhu4MgdGjhuqV5IG5ow7NtIHR14buVaSB4ZW0gcXXhuqNuZyBjw6FvIG5oaeG7gXUgbmjhuqV0IGzDoCAzMC00MCB0deG7lWkgKDM1Ljg1JSkgdGhlbyBzYXUgxJHDsyBsw6AgbmjDs20gdHXhu5VpIDIwLTMwICgyOS44NCUpIMSRw6J5IMSR4buBdSBsw6AgxJHhu5kgdHXhu5VpIHRy4bq7LCBjw7MgbeG7qWMgdGh1IG5o4bqtcCDhu5VuIMSR4buLbmggdsOgIG5odSBj4bqndSBtdWEgaMOgbmcsIHPhu60gZOG7pW5nIHPhuqNuIHBo4bqpbSBjxaluZyBuaGnhu4F1IGjGoW4gbmjhu69uZyBuaMOzbSB0deG7lWkga2jDoWMsIMSRaeG7gXUgbsOgeSBjxaluZyBsw6AgMSBs4bujaSB0aOG6vyBjaG8gQW1hem9uIGtoaSBiaeG6v3QgxJHGsOG7o2MgbmjDs20ga2jDoWNoIGjDoG5nIHRp4buBbSBuxINuZyBj4bunYSBtw6xuaC4NCg0KKiAqKlRo4buRbmcga8OqIG3DtHQgdOG6oyBj4bunYSBiaeG6v24gIkdlbmRlciIqKg0KYGBge3J9DQp0YWJsZShkYXRhJEdlbmRlcikNCnRhYmxlKGRhdGEkR2VuZGVyKS9zdW0odGFibGUoZGF0YSRHZW5kZXIpKQ0KZ2dwbG90KGRhdGEgPSBkYXRhKSArIGdlb21fYmFyKG1hcHBpbmcgPSBhZXMoeCA9IEdlbmRlciwgZmlsbD0gR2VuZGVyICkpDQpgYGANClThu6sgYmnhu4N1IMSR4buTIHRyw6puIHRhIGPDsyB0aOG7gyB0aOG6pXksIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbMOgIG5hbSBjaGnhur9tIDQ4LjMxJSwgdOG7tyBs4buHIGtow6FjaCBow6BuZyBsw6AgbuG7ryBjaGnhur9tIDUxLjY5JSwgxJFp4buBdSBuw6B5IGPFqW5nIOG6o25oIGjGsOG7n25nIMSR4bq/biBuaHUgY+G6p3UgbXVhIHPhuq9tIHbDoCB04bu3IGzhu4cgbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8Ohby4NCg0KKiAqKlRo4buRbmcga8OqIG3DtHQgdOG6oyBj4bunYSBiaeG6v24gIkluY29tZS5sZXZlbCIqKg0KYGBge3J9DQp0YWJsZShkYXRhJEluY29tZS5sZXZlbCkNCnRhYmxlKGRhdGEkSW5jb21lLmxldmVsKS9zdW0odGFibGUoZGF0YSRJbmNvbWUubGV2ZWwpKQ0KZGF0YSB8PiBnZ3Bsb3QoYWVzKHggPSBJbmNvbWUubGV2ZWwsIHkgPSBhZnRlcl9zdGF0KGNvdW50KSkpICsgZ2VvbV9iYXIoZmlsbCA9ICdicm93bicpICsgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudChhZnRlcl9zdGF0KGNvdW50L3N1bShjb3VudCkpKSksIHN0YXQgPSAnY291bnQnLCBjb2xvciA9ICdibGFjaycsIHZqdXN0ID0gLSAuNSkgKyB0aGVtZV9jbGFzc2ljKCkgKyBsYWJzKHggPSAnTeG7qWMgdGh1IG5o4bqtcCcsIHkgPSAnJykNCmBgYA0KDQpDw7MgdGjhu4MgdGjhuqV5LCDEkeG7kWkgdMaw4bujbmcga2jDoWNoIGjDoG5nIHhlbSBxdeG6o25nIGPDoW8gdsOgIG11YSBow6BuZyB04bqhaSBBbWF6b24gY8OzIG3hu6ljIHRodSBuaOG6rXAgY2FvIGNoaeG6v20gNDkuMjklIHRyb25nIGtoaSBsxrDhu6NuZyBraMOhY2ggaMOgbmcgY8OzIHRodSBuaOG6rXAgdGjhuqVwIGNo4buJIGNoaeG6v20gOC43NCUuDQoNCiogKipUaOG7kW5nIGvDqiBtw7R0IHThuqMgY+G7p2EgYmnhur9uICJTZWFyY2giKioNCmBgYHtyfQ0KdGFibGUoZGF0YSRTZWFyY2gpDQp0YWJsZShkYXRhJFNlYXJjaCkvc3VtKHRhYmxlKGRhdGEkU2VhcmNoKSkNCmRhdGEgfD4gZ2dwbG90KGFlcyh4ID0gU2VhcmNoLCB5ID0gYWZ0ZXJfc3RhdChjb3VudCkpKSArIGdlb21fYmFyKGZpbGwgPSAnbWFnZW50YScpICsgZ2VvbV90ZXh0KGFlcyhsYWJlbCA9IHNjYWxlczo6cGVyY2VudChhZnRlcl9zdGF0KGNvdW50L3N1bShjb3VudCkpKSksIHN0YXQgPSAnY291bnQnLCBjb2xvciA9ICdibGFjaycsIHZqdXN0ID0gLSAuNSkgKyB0aGVtZV9jbGFzc2ljKCkgKyBsYWJzKHggPSAnU2VhcmNoIHF1ZXJ5JywgeSA9ICcnKQ0KYGBgDQpU4burIGJp4buDdSDEkeG7kyBjw7MgdGjhu4MgdGjhuqV5LCB04burIGtow7NhIMSRxrDhu6NjIHTDrG0ga2nhur9tIG5oaeG7gXUgbmjhuqV0IGzDoCAiYXVzdGlzbSBzZW5zb3J5IHRveXMiIGNoaeG6v20gNTQuMzIlIHbDoCBjw6FjIHThu6sga2jDs2EgInNlbnNvcnkgdG95cyIgdsOgIHN0cmVzcyB0b3lzIiDEkcaw4bujYyB0w6xtIGtp4bq/bSDDrXQgbmjhuqV0IGzhuqduIGzGsOG7o3QgduG7m2kgdOG7tyBs4buHIDAuNTUlIHbDoCAwLjIyJS4NCg0KIyMgMy4yIFBow6JuIHTDrWNoIHRo4buRbmcga8OqIG3DtCB04bqjLCDEkeG7kyB0aOG7iyBj4bunYSBiaeG6v24gcGjhu6UgdGh14buZYyB2w6AgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wDQojIyMgMy4yLjEgUGjDom4gdMOtY2ggdmnhu4djIGtow6FjaCBow6BuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gZOG7sWEgdGhlbyBnaeG7m2kgdMOtbmgNCiMjIyMgMS4gQuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgYmnhu4N1IMSR4buTDQoqICoqQuG6o25nIHThuqduIHPhu5EqKg0KYGBge3IgfQ0KR0QxIDwtIHRhYmxlKGRhdGEkR2VuZGVyLCBkYXRhJFB1cmNoYXNlKQ0KR0QxDQpgYGANCiogKipC4bqjbmcgdOG6p24gc3XhuqV0KioNCmBgYHtyIH0NCkdEMiA8LSBwcm9wLnRhYmxlKEdEMSk7R0QyDQpgYGANCiogKipQaMOibiBwaOG7kWkgYmnDqm4qKg0KYGBge3IgfQ0KYWRkbWFyZ2lucyhHRDEpDQpgYGANCiogKipCaeG7g3UgxJHhu5MgY+G7mXQqKiANCmBgYHtyIH0NCmxpYnJhcnkoZ2dwbG90MikNCmdlbmRlciA8LSBkYXRhJEdlbmRlcg0KcHVyY2hhc2UgPC0gZGF0YSRQdXJjaGFzZQ0KZ2dwbG90KGRhdGEsIGFlcyhwdXJjaGFzZSwgZmlsbCA9IGdlbmRlcikpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZG9kZ2UnKQ0KYGBgDQpUaMO0bmcgcXVhIGLhuqNuZyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQgdsOgIGJp4buDdSDEkeG7kyBj4bunYSAyIGJp4bq/biDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gKHB1cmNoYXNlKSB2w6AgYmnhur9uIGdp4bubaSB0w61uaCAoR2VuZGVyKSBjw7MgdGjhu4MgdGjhuqV5IGPDsyAyNjEga2jDoWNoIGjDoG5nIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gdHJvbmcgxJHDsyBjw7MgMTQ5IGtow6FjaCBow6BuZyBsw6AgbuG7ryBjaGnhur9tIDE2LjI4JSB04buVbmcgc+G7kSBraMOhY2ggaMOgbmcgdsOgIGPDsyAxMTIga2jDoWNoIGjDoG5nIGzDoCBuYW0gY2hp4bq/bSAxMi4yNCUgdOG7lW5nIHPhu5Ega2jDoWNoIGjDoG5nLiBCw6puIGPhuqFuaCDEkcOzIGPDsyA2NTQga2jDoWNoIGjDoG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyB0cm9uZyDEkcOzIGPDsyAzMjQga2jDoWNoIGjDoG5nIGzDoCBu4buvIGNoaeG6v20gMzUuNDElIHThu5VuZyBz4buRIGtow6FjaCBow6BuZyB2w6AgY8OzIDMzMCBraMOhY2ggaMOgbmcgbMOgIG5hbSBjaGnhur9tIDM2LjA3JSB04buVbmcgc+G7kSBraMOhY2ggaMOgbmcuIFF1YSBiaeG7g3UgxJHhu5MgY8OzIHRo4buDIHRo4bqleSBz4buRIGtow6FjaCBow6BuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gdsOgIHPhu5Ega2jDoWNoIGjDoG5nIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gxJHhu4F1IGPDsyB04bu3IGzhu4cgbuG7ryBjYW8gaMahbiBuYW0uDQoNCiMjIyMgMi4gUuG7p2kgcm8gdMawxqFuZyDEkeG7kWkNCiogKipSZWxhdGl2ZSByaXNrKioNCmBgYHtyIH0NCmxpYnJhcnkoZXBpdG9vbHMpDQpyaXNrcmF0aW8oR0QxKQ0KYGBgDQpUaGVvIGvhur90IHF14bqjIHRyw6puIGNobyB0aOG6pXkgdOG7tyBs4buHIHLhu6dpIHJvIHTGsMahbmcgxJHhu5FpIGPhu6dhIGtow6FjaCBow6BuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gZOG7sWEgdGhlbyBnaeG7m2kgdMOtbmggbMOgIDEuMDg5OTUzLCBjw7MgbmdoxKlhIGzDoCB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBsw6AgbuG7ryBn4bqlcCAxLjA4OTk1MyBs4bqnbiB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGzDoCBuYW0uDQoNCioqS2hpIHRow6ptIHRoYW0gc+G7kSByZXYgPSAiYyIgdGjDrCBz4bq9IHRo4buxYyBoaeG7h24gdmnhu4djIMSR4buVaSBjaOG7lyAyIGPhu5l0IHRyb25nIGLhuqNuZyBuZ+G6q3Ugbmhpw6puKioNCmBgYHtyIH0gDQpyaXNrcmF0aW8oR0QxLCByZXYgPSAiYyIpDQpgYGANClRoZW8ga+G6v3QgcXXhuqMgdHLDqm4gY2hvIHRo4bqleSB04bu3IGzhu4cgcuG7p2kgcm8gdMawxqFuZyDEkeG7kWkgY+G7p2Ega2jDoWNoIGjDoG5nIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gZOG7sWEgdGhlbyBnaeG7m2kgdMOtbmggbMOgIDAuODA0Mzk3MyAsIGPDsyBuZ2jEqWEgbMOgIHThu7cgbOG7hyBuaOG7r25nIGtow6FjaCBow6BuZyBraMO0bmcgxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGzDoCBuYW0gYuG6sW5nIDgwLjQ0JSB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGzDoCBu4buvLg0KDQojIyMjIDMuIE9kZCBSYXRpbw0KYGBge3IgfQ0KZXBpdGFiKEdEMSwgbWV0aG9kID0gIm9kZHNyYXRpbyIpDQpgYGANClF1YSBr4bq/dCBxdeG6oyB0csOqbiB0YSB0aOG6pXkgdOG7tyBs4buHIGNow6puaCAob2RkIHJhdGlvKSBsw6AgMS4zNTQ5OTMgY8OzIG5naMSpYSBsw6AgdOG7tyBs4buHIG5o4buvbmcga2jDoWNoIGjDoG5nIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY8OzIGdp4bubaSB0w61uaCBsw6AgbmFtIGLhurFuZyAxLjM1NDk5MyB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjw7MgZ2nhu5tpIHTDrW5oIGzDoCBu4buvLg0KDQoqKktoaSB0aMOqbSB0aGFtIHPhu5EgcmV2ID0gImMiIHRow6wgc+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyDEkeG7lWkgY2jhu5cgMiBj4buZdCB0cm9uZyBi4bqjbmcgbmfhuqt1IG5oacOqbioqDQpgYGB7ciB9DQplcGl0YWIoR0QxLCBtZXRob2QgPSAncmlza3JhdGlvJywgcmV2ID0gJ2MnKQ0KYGBgDQpRdWEga+G6v3QgcXXhuqMgdHLDqm4gdGEgdGjhuqV5IHThu7cgbOG7hyBjaMOqbmggKG9kZCByYXRpbykgY+G7p2Ega2jDoWNoIGjDoG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBk4buxYSB0aGVvIGdp4bubaSB0w61uaCBsw6AgMC44MDQzOTczLCBjw7MgbmdoxKlhIGzDoCB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGzDoCBuYW0gYuG6sW5nIDgwLjQ0JSB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGzDoCBu4buvLg0KDQoNCiMjIyAzLjIuMiBQaMOibiB0w61jaCB2aeG7h2Mga2jDoWNoIGjDoG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBk4buxYSB0aGVvIG3hu6ljIHRodSBuaOG6rXANCiMjIyMgMS4gQuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgYmnhu4N1IMSR4buTDQoqICoqQuG6o25nIHThuqduIHPhu5EqKg0KYGBge3IgfQ0KZDIgPC0gdGFibGUoZGF0YSRJbmNvbWUubGV2ZWwsIGRhdGEkUHVyY2hhc2UpDQpkMg0KYGBgDQoqICoqQuG6o25nIHThuqduIHN14bqldCoqDQpgYGB7ciB9DQpkMyA8LSBwcm9wLnRhYmxlKGQyKTtkMw0KYGBgDQoqICoqUGjDom4gcGjhu5FpIGJpw6puKioNCmBgYHtyIH0NCmFkZG1hcmdpbnMoZDIpDQpgYGANCiogKipCaeG7g3UgxJHhu5MgY+G7mXQqKiANCmBgYHtyIH0NCmxpYnJhcnkoZ2dwbG90MikNCmluY29tZS5sZXZlbCA8LSBkYXRhJEluY29tZS5sZXZlbA0KcHVyY2hhc2UgPC0gZGF0YSRQdXJjaGFzZQ0KZ2dwbG90KGRhdGEsIGFlcyhwdXJjaGFzZSwgZmlsbCA9IGluY29tZS5sZXZlbCkpICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZG9kZ2UnKQ0KYGBgDQpUaMO0bmcgcXVhIGLhuqNuZyB04bqnbiBz4buRLCB04bqnbiBzdeG6pXQgdsOgIGJp4buDdSDEkeG7kyBj4bunYSAyIGJp4bq/biDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gKHB1cmNoYXNlKSB2w6AgYmnhur9uIG3hu6ljIHRodSBuaOG6rXAgKGluY29tZS5sZXZlbCkgY8OzIHRo4buDIHRo4bqleSBwaOG6p24gbOG7m24ga2jDoWNoIGjDoG5nIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY8OzIG3hu6ljIHRodSBuaOG6rXAgdOG7qyB0cnVuZyBiw6xuaCDEkeG6v24gdHJ1bmcgYsOsbmggY2FvLCBj4bulIHRo4buDIGPDsyAxMTEga2jDoWNoIGjDoG5nIGPDsyB0aHUgbmjhuq1wIHRydW5nIGLDrG5oIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY2hp4bq/bSB04bu3IGzhu4cgMTIuMTMlIHThu5VuZyBz4buRIGtow6FjaCBow6BuZyB2w6AgY8OzIDEyNyBraMOhY2ggaMOgbmcgY8OzIHRodSBuaOG6rXAgY2FvIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY2hp4bq/bSB04bu3IGzhu4cgMTMuODglIHThu5VuZyBz4buRIGtow6FjaCBow6BuZy4gQsOqbiBj4bqhbmggxJHDsywgc+G7kSBsxrDhu6NuZyBs4bubbiBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGPFqW5nIG7hurFtIHRyb25nIG3hu6ljIHRodSBuaOG6rXAgdOG7qyB0cnVuZyBiw6xuaCDEkeG6v24gY2FvLiBD4bulIHRo4buDIGPDsyAyNzMga2jDoWNoIGjDoG5nIGPDsyB0aHUgbmjhuq1wIHRydW5nIGLDrG5oIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbywgY2hp4bq/bSB04bu3IGzhu4cgMjkuODQlIHThu5VuZyBz4buRIGtow6FjaCBow6BuZyB2w6AgY8OzIDMyNCBraMOhY2ggaMOgbmcgY8OzIHRodSBuaOG6rXAgY2FvIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjaGnhur9tIHThu7cgbOG7hyAzNS40MSUgdOG7lW5nIHPhu5Ega2jDoWNoIGjDoG5nLiBRdWEgYmnhu4N1IMSR4buTIGPDsyB0aOG7gyB0aOG6pXkgxJHhu5FpIHTGsOG7o25nIGtow6FjaCBow6BuZyBjaGnhur9tIHBo4bqnbiBs4bubbiBj4bunYSBBbWF6b24gY8OzIG3hu6ljIHRodSBuaOG6rXAgdHJ1bmcgYsOsbmggxJHhur9uIGNhby4NCg0KIyMjIyAyLiBS4bunaSBybyB0xrDGoW5nIMSR4buRaQ0KKiAqKlJlbGF0aXZlIHJpc2sqKg0KYGBge3IgfQ0KbGlicmFyeShlcGl0b29scykNCnJpc2tyYXRpbyhkMikNCmBgYA0KVGhlbyBr4bq/dCBxdeG6oyB0csOqbiBjaG8gdGjhuqV5IHThu7cgbOG7hyBy4bunaSBybyB0xrDGoW5nIMSR4buRaSBj4bunYSBraMOhY2ggaMOgbmcga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBk4buxYSB0aGVvIG3hu6ljIHRodSBuaOG6rXAgY2FvIGzDoCAwLjk5MTc4MjQsIGPDsyBuZ2jEqWEgbMOgIHThu7cgbOG7hyBuaOG7r25nIGtow6FjaCBow6BuZyBjw7MgdGh1IG5o4bqtcCB0aOG6pXAga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBi4bqxbmcgMC45OTE3ODI0IGzhuqduIHThu7cgbOG7hyBuaOG7r25nIGtow6FjaCBow6BuZyBjw7MgdGh1IG5o4bqtcCBjYW8gxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvLg0KDQoqKktoaSB0aMOqbSB0aGFtIHPhu5EgcmV2ID0gImMiIHRow6wgc+G6vSB0aOG7sWMgaGnhu4duIHZp4buHYyDEkeG7lWkgY2jhu5cgMiBj4buZdCB0cm9uZyBi4bqjbmcgbmfhuqt1IG5oacOqbioqDQpgYGB7ciB9IA0Kcmlza3JhdGlvKGQyLCByZXYgPSAiYyIpDQpgYGANClRoZW8ga+G6v3QgcXXhuqMgdHLDqm4gY2hvIHRo4bqleSB04bu3IGzhu4cgcuG7p2kgcm8gdMawxqFuZyDEkeG7kWkgY+G7p2Ega2jDoWNoIGjDoG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBk4buxYSB0aGVvIG3hu6ljIHRodSBuaOG6rXAgbMOgIDEuMDIwOTY1LCBjw7MgbmdoxKlhIGzDoCB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgY8OzIHRodSBuaOG6rXAgdGjhuqVwIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBi4bqxbmcgMS4wMjA5NjUgdOG7tyBs4buHIG5o4buvbmcga2jDoWNoIGjDoG5nIGPDsyB0aHUgbmjhuq1wIGNhbyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8uDQoNCiMjIyMgMy4gT2RkIFJhdGlvDQpgYGB7ciB9DQplcGl0YWIoZDIsIG1ldGhvZCA9ICJvZGRzcmF0aW8iKQ0KYGBgDQpRdWEga+G6v3QgcXXhuqMgdHLDqm4gdGEgdGjhuqV5IHThu7cgbOG7hyBjaMOqbmggKG9kZCByYXRpbykgbMOgIDAuNTc0MSBjw7MgbmdoxKlhIGzDoCB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSB2w6Aga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjw7MgbeG7qWMgdGh1IG5o4bqtcCBjYW8gbmhp4buBdSBoxqFuIDU3LjQxJSB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSB2w6Aga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjw7MgbeG7qWMgdGh1IG5o4bqtcCB0aOG6pXAuDQoNCioqS2hpIHRow6ptIHRoYW0gc+G7kSByZXYgPSAiYyIgdGjDrCBz4bq9IHRo4buxYyBoaeG7h24gdmnhu4djIMSR4buVaSBjaOG7lyAyIGPhu5l0IHRyb25nIGLhuqNuZyBuZ+G6q3Ugbmhpw6puKioNCmBgYHtyIH0NCmVwaXRhYihkMiwgbWV0aG9kID0gJ3Jpc2tyYXRpbycsIHJldiA9ICdjJykNCmBgYA0KUXVhIGvhur90IHF14bqjIHRyw6puIHRhIHRo4bqleSB04bu3IGzhu4cgY2jDqm5oIChvZGQgcmF0aW8pIGzDoCAwLjcxMjUgY8OzIG5naMSpYSBsw6AgdOG7tyBs4buHIG5o4buvbmcga2jDoWNoIGjDoG5nIMSR4buTbmcgw70gdsOgIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY8OzIG3hu6ljIHRodSBuaOG6rXAgdGjhuqVwIGzhu5tuIGjGoW4ga2hv4bqjbiA3MS4yNSUgdOG7tyBs4buHIG5o4buvbmcga2jDoWNoIGjDoG5nIMSR4buTbmcgw70gdsOgIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY8OzIG3hu6ljIHRodSBuaOG6rXAgY2FvLg0KDQojIyMgMy4yLjMgUGjDom4gdMOtY2ggdmnhu4djIGtow6FjaCBow6BuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gZOG7sWEgdGhlbyDEkeG7mSB0deG7lWkNCiMjIyMgMS4gQuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgYmnhu4N1IMSR4buTDQoqICoqQuG6o25nIHThuqduIHPhu5EqKg0KYGBge3IgMzN9DQpkNCA8LSB0YWJsZShkYXRhJEFnZSwgZGF0YSRQdXJjaGFzZSkNCmQ0DQpgYGANCiogKipC4bqjbmcgdOG6p24gc3XhuqV0KioNCmBgYHtyIDNxfQ0KZDUgPC0gcHJvcC50YWJsZShkNCk7ZDUNCmBgYA0KKiAqKlBow6JuIHBo4buRaSBiacOqbioqDQpgYGB7ciAzcn0NCmFkZG1hcmdpbnMoZDQpDQpgYGANCiogKipCaeG7g3UgxJHhu5MgY+G7mXQqKiANCmBgYHtyIDNqfQ0KbGlicmFyeShnZ3Bsb3QyKQ0KYWdlIDwtIGRhdGEkQWdlDQpwdXJjaGFzZSA8LSBkYXRhJFB1cmNoYXNlDQpnZ3Bsb3QoZGF0YSwgYWVzKHB1cmNoYXNlLCBmaWxsID0gYWdlKSkgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdkb2RnZScpDQpgYGANClRow7RuZyBxdWEgYuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgYmnhu4N1IMSR4buTIGPhu6dhIDIgYmnhur9uIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyAocHVyY2hhc2UpIHbDoCBiaeG6v24gxJHhu5kgdHXhu5VpIChhZ2UpIGPDsyB0aOG7gyB0aOG6pXkgcGjhuqduIGzhu5tuIGtow6FjaCBow6BuZyBraMO0bmcgxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAyMC00MCwgY+G7pSB0aOG7gyBjw7MgNjYga2jDoWNoIGjDoG5nIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAyMC0zMCB0deG7lWkga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjaGnhur9tIHThu7cgbOG7hyA3LjIxJSB04buVbmcgc+G7kSBraMOhY2ggaMOgbmcgdsOgIGPDsyAxMDYga2jDoWNoIGjDoG5nIGPDsyDEkeG7mSB0deG7lWkgdOG7qyAzMC00MCB0deG7lWkga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjaGnhur9tIHThu7cgbOG7hyAxMS41OCUgdOG7lW5nIHPhu5Ega2jDoWNoIGjDoG5nLiBCw6puIGPhuqFuaCDEkcOzLCBz4buRIGzGsOG7o25nIGzhu5tuIGtow6FjaCBow6BuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY8WpbmcgbuG6sW0gdHJvbmcgxJHhu5kgdHXhu5VpIHThu6sgMjAgxJHhur9uIDQwIHR14buVaS4gQ+G7pSB0aOG7gyBjw7MgMjA3IGtow6FjaCBow6BuZyB04burIDIwLTMwIHR14buVaSDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8sIGNoaeG6v20gdOG7tyBs4buHIDIyLjYyJSB04buVbmcgc+G7kSBraMOhY2ggaMOgbmcgdsOgIGPDsyAzMjgga2jDoWNoIGjDoG5nIHThu6sgMzAtNDAgdHXhu5VpIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjaGnhur9tIHThu7cgbOG7hyAyNC4yNiUgdOG7lW5nIHPhu5Ega2jDoWNoIGjDoG5nLiBRdWEgYmnhu4N1IMSR4buTIGPDsyB0aOG7gyB0aOG6pXkgxJHhu5FpIHTGsOG7o25nIGtow6FjaCBow6BuZyBjaGnhur9tIHBo4bqnbiBs4bubbiBj4bunYSBBbWF6b24gbuG6sW0gdHJvbmcgxJHhu5kgdHXhu5VpIHRy4bq7IHThu6sgMjAgxJHhur9uIDQwIHR14buVaS4NCg0KIyMjIyAyLiBS4bunaSBybyB0xrDGoW5nIMSR4buRaQ0KKiAqKlJlbGF0aXZlIHJpc2sqKg0KYGBge3IgfQ0KbGlicmFyeShlcGl0b29scykNCnJpc2tyYXRpbyhkNCkNCmBgYA0KVGhlbyBr4bq/dCBxdeG6oyB0csOqbiBjaG8gdGjhuqV5IHThu7cgbOG7hyBy4bunaSBybyB0xrDGoW5nIMSR4buRaSBj4bunYSBraMOhY2ggaMOgbmcga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBk4buxYSB0aGVvIMSR4buZIHR14buVaSBsw6AgMC44OTI2Mjk5LCBjw7MgbmdoxKlhIGzDoCB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMjAtMzAgYuG6sW5nIDAuODkyNjI5OSBs4bqnbiB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMzAtNDAuDQoNCiMjIyMgMy4gT2RkIFJhdGlvDQpgYGB7ciB9DQplcGl0YWIoZDQsIG1ldGhvZCA9ICJvZGRzcmF0aW8iKQ0KYGBgDQpRdWEga+G6v3QgcXXhuqMgdHLDqm4gdGEgdGjhuqV5IHThu7cgbOG7hyBjaMOqbmggKG9kZCByYXRpbykgbMOgIDAuNjY3NzYwNSBjw7MgbmdoxKlhIGzDoCB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSB2w6Aga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMjAtMzAgYuG6sW5nIDY2Ljc3JSB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSB2w6Aga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjw7MgxJHhu5kgdHXhu5VpIHThu6sgMzAtNDAuDQoNCg0KIyMjIDMuMi40IFBow6JuIHTDrWNoIHZp4buHYyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGThu7FhIHRoZW8gdOG7qyBraMOzYSB0w6xtIGtp4bq/bQ0KIyMjIyAxLiBC4bqjbmcgdOG6p24gc+G7kSwgdOG6p24gc3XhuqV0IHbDoCBiaeG7g3UgxJHhu5MNCiogKipC4bqjbmcgdOG6p24gc+G7kSoqDQpgYGB7ciB9DQpkNiA8LSB0YWJsZShkYXRhJFNlYXJjaCwgZGF0YSRQdXJjaGFzZSkNCmQ2DQpgYGANCiogKipC4bqjbmcgdOG6p24gc3XhuqV0KioNCmBgYHtyIH0NCmQ3IDwtIHByb3AudGFibGUoZDYpO2Q3DQpgYGANCiogKipQaMOibiBwaOG7kWkgYmnDqm4qKg0KYGBge3IgfQ0KYWRkbWFyZ2lucyhkNikNCmBgYA0KKiAqKkJp4buDdSDEkeG7kyBj4buZdCoqIA0KYGBge3IgfQ0KbGlicmFyeShnZ3Bsb3QyKQ0Kc2VhcmNoIDwtIGRhdGEkU2VhcmNoDQpwdXJjaGFzZSA8LSBkYXRhJFB1cmNoYXNlDQpnZ3Bsb3QoZGF0YSwgYWVzKHB1cmNoYXNlLCBmaWxsID0gc2VhcmNoKSkgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdkb2RnZScpDQpgYGANClRow7RuZyBxdWEgYuG6o25nIHThuqduIHPhu5EsIHThuqduIHN14bqldCB2w6AgYmnhu4N1IMSR4buTIGPhu6dhIDIgYmnhur9uIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyAocHVyY2hhc2UpIHbDoCBiaeG6v24gdOG7qyBraMOzYSB0w6xtIGtp4bq/bSAoc2VhcmNoKSBjw7MgdGjhu4MgdGjhuqV5IHThu6sga2jDs2EgImF1dGlzbSBzZW5zb3J5IHRveXMiIMSRxrDhu6NjIGtow6FjaCBow6BuZyB0w6xtIGtp4bq/bSBuaGnhu4F1IG5o4bqldCB24bubaSAxNDEga2jDoWNoIGjDoG5nIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gduG7m2kgdOG7qyBraMOzYSB0w6xtIGtp4bq/bSAiYXV0aXNtIHNlbnNvcnkgdG95cyIgY2hp4bq/bSB04bu3IGzhu4cgMTUuNDElLiBCw6puIGPhuqFuaCDEkcOzLCBz4buRIGzGsOG7o25nIGtow6FjaCBow6BuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gduG7m2kgdOG7qyBraMOzYSB0w6xtIGtp4bq/bSAiYXV0aXNtIHNlbnNvcnkgdG95cyIgY2hp4bq/bSB04bu3IGzhu4cgMzguOTElLiANCg0KIyMjIyAyLiBS4bunaSBybyB0xrDGoW5nIMSR4buRaQ0KKiAqKlJlbGF0aXZlIHJpc2sqKg0KYGBge3IgfQ0KbGlicmFyeShlcGl0b29scykNCnJpc2tyYXRpbyhkNikNCmBgYA0KDQojIyMjIDMuIE9kZCBSYXRpbw0KYGBge3IgfQ0KZXBpdGFiKGQ2LCBtZXRob2QgPSAib2Rkc3JhdGlvIikNCmBgYA0KUXVhIGvhur90IHF14bqjIHRyw6puIHRhIHRo4bqleSB04bu3IGzhu4cgY2jDqm5oIChvZGQgcmF0aW8pIGzDoCAxLjMzNDU0OTEgY8OzIG5naMSpYSBsw6AgdOG7tyBs4buHIG5o4buvbmcga2jDoWNoIGjDoG5nIMSR4buTbmcgw70gdsOgIGtow7RuZyDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gduG7m2kgdOG7qyBraMOzYSB0w6xtIGtp4bq/bSAiYXV0aXNtIHNlbnNvcnkgdG95cyIgYuG6sW5nIDEuMzM0NTQ5MSB04bu3IGzhu4cgbmjhu69uZyBraMOhY2ggaMOgbmcgxJHhu5NuZyDDvSB2w6Aga2jDtG5nIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyB24bubaSB04burIGtow7NhIHTDrG0ga2nhur9tIGzDoCAiYW54aWV0eSB0b3lzIi4NCg0KIyMgMy4yIFRo4buRbmcga8OqIHN1eSBkaeG7hW4NCiMjIyAzLjIuMSBLaeG7g20gxJHhu4tuaCB0w61uaCDEkeG7mWMgbOG6rXAgZ2nhu69hIGJp4bq/biBwaOG7pSB0aHXhu5ljIHbDoCBiaeG6v24gxJHhu5ljIGzhuq1wDQoqICoqS2nhu4NtIMSR4buLbmggdMOtbmggxJHhu5ljIGzhuq1wIGNobyAyIGJp4bq/biBwdXJjaGFzZSB2w6AgZ2VuZGVyKioNCiogR2nhuqMgdGh1eeG6v3Q6IA0KDQokSF8wJDogUHVyY2hhc2UgdsOgIGdlbmRlciDEkeG7mWMgbOG6rXAgDQoNCiRIXzEkOiBQdXJjaGFzZSB2w6AgZ2VuZGVyIGtow7RuZyDEkeG7mWMgbOG6rXANCmBgYHtyIH0NCnNldHdkKCJGOi8iKQ0KZGF0YSA8LSByZWFkLmNzdigiZGF0YTMuY3N2IikNCmNoaXNxLnRlc3QoR0QxKQ0KYGBgDQpRdWEga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggY2hvIHRo4bqleSBnacOhIHRy4buLIHAtdmFsdWUgPSAwLjA0NjY1IDwgNSUgdsOsIHbhuq15IGNoxrBhIMSR4bunIGPGoSBz4bufIMSR4buDIGLDoWMgYuG7jyAkSF8wJCwgdOG7qWMgbMOgIHZp4buHYyBraMOhY2ggaMOgbmcgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gKHB1cmNoYXNlKSB2w6AgZ2nhu5tpIHTDrW5oIChnZW5kZXIpIGPDsyBsacOqbiBxdWFuIMSR4bq/biBuaGF1Lg0KDQoNCiogKipLaeG7g20gxJHhu4tuaCB0w61uaCDEkeG7mWMgbOG6rXAgY2hvIDIgYmnhur9uIHB1cmNoYXNlIHbDoCBpbmNvbWUubGV2ZWwqKg0KKiBHaeG6oyB0aHV54bq/dDogDQoNCiRIXzAkOiBQdXJjaGFzZSB2w6AgaW5jb21lLmxldmVsIMSR4buZYyBs4bqtcA0KDQokSF8xJDogUHVyY2hhc2UgdsOgIGluY29tZS5sZXZlbCBraMO0bmcgxJHhu5ljIGzhuq1wDQpgYGB7ciB9DQpzZXR3ZCgiRjovIikNCmRhdGEgPC0gcmVhZC5jc3YoImRhdGEzLmNzdiIpDQpjaGlzcS50ZXN0KGQyKQ0KYGBgDQpRdWEga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggY2hvIHRo4bqleSBnacOhIHRy4buLIHAtdmFsdWUgPSAwLjk3MSA+IDUlIHbDrCB24bqteSBjw7MgY8ahIHPhu58gxJHhu4MgY2jhuqVwIG5o4bqtbiAkSF8wJCwgdOG7qWMgbMOgIHZp4buHYyBraMOhY2ggaMOgbmcgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gKHB1cmNoYXNlKSB2w6AgbeG7qWMgdGh1IG5o4bqtcCAoaW5jb21lLmxldmVsKSDEkeG7mWMgbOG6rXAgduG7m2kgbmhhdS4NCg0KDQoqICoqS2nhu4NtIMSR4buLbmggdMOtbmggxJHhu5ljIGzhuq1wIGNobyAyIGJp4bq/biBwdXJjaGFzZSB2w6AgYWdlKioNCiogR2nhuqMgdGh1eeG6v3Q6IA0KDQokSF8wJDogUHVyY2hhc2UgdsOgIGFnZSDEkeG7mWMgbOG6rXANCg0KJEhfMSQ6IFB1cmNoYXNlIHbDoCBhZ2Uga2jDtG5nIMSR4buZYyBs4bqtcA0KYGBge3IgfQ0Kc2V0d2QoIkY6LyIpDQpkYXRhIDwtIHJlYWQuY3N2KCJkYXRhMy5jc3YiKQ0KY2hpc3EudGVzdChkNCkNCmBgYA0KUXVhIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyBwLXZhbHVlID0gMC4wMzk2MSA8IDUlIHbDrCB24bqteSBjaMawYSBjw7MgY8ahIHPhu58gxJHhu4MgYsOhYyBi4buPICRIXzAkLCB04bupYyBsw6Agdmnhu4djIGtow6FjaCBow6BuZyBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyAocHVyY2hhc2UpIHbDoCDEkeG7mSB0deG7lWkgKGFnZSkgbGnDqm4gcXVhbiDEkeG6v24gbmhhdS4NCg0KDQoqICoqS2nhu4NtIMSR4buLbmggdMOtbmggxJHhu5ljIGzhuq1wIGNobyAyIGJp4bq/biBwdXJjaGFzZSB2w6Agc2VhcmNoKioNCiogR2nhuqMgdGh1eeG6v3Q6IA0KJEhfMCQ6IFB1cmNoYXNlIHbDoCBzZWFyY2ggxJHhu5ljIGzhuq1wDQokSF8xJDogUHVyY2hhc2UgdsOgIHNlYXJjaCBraMO0bmcgxJHhu5ljIGzhuq1wDQpgYGB7ciB9DQpzZXR3ZCgiRjovIikNCmRhdGEgPC0gcmVhZC5jc3YoImRhdGEzLmNzdiIpDQpjaGlzcS50ZXN0KGQ2KQ0KYGBgDQpRdWEga+G6v3QgcXXhuqMga2nhu4NtIMSR4buLbmggY2hvIHRo4bqleSBnacOhIHRy4buLIHAtdmFsdWUgPSAwLjA0MjI5IDwgNSUgdsOsIHbhuq15IGNoxrBhIMSR4bunIGPGoSBz4bufIMSR4buDIGLDoWMgYuG7jyAkSF8wJCwgdOG7qWMgbMOgIHZp4buHYyBraMOhY2ggaMOgbmcgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gKHB1cmNoYXNlKSB2w6AgdOG7qyBraMOzYSB0w6xtIGtp4bq/bSAoc2VhcmNoKSBjw7MgbGnDqm4gcXVhbiDEkeG6v24gbmhhdS4NCg0KIyMjIDMuMi4yIMav4bubYyBsxrDhu6NuZyB04bu3IGzhu4cNCiogKirGr+G7m2MgbMaw4bujbmcgdOG7tyBs4buHIGtow6FjaCBow6BuZyBuYW0gxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIMSR4buTbmcgdGjhu51pIGtp4buDbSDEkeG7i25oIHhlbSB04bu3IGzhu4cga2jDoWNoIGjDoG5nIG5hbSDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY8OzIHBo4bqjaSBsw6AgNTAlIGtow7RuZz8qKg0KYGBge3J9DQpwbSA8LSBkYXRhW2RhdGEkR2VuZGVyID09ICJNYWxlIixdDQpwcm9wLnRlc3QobGVuZ3RoKHBtJEdlbmRlciksIGxlbmd0aChkYXRhJEdlbmRlciksIHAgPSAwLjUpDQpgYGANClbhu5tpIGtob+G6o25nIHRpbiBj4bqteSA5NSUgxrDhu5tjIGzGsOG7o25nIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbmFtIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDQ1LjAzJSDEkeG6v24gNTEuNiUuIEThu7FhIHRoZW8ga+G6v3QgcXXhuqMgdHLDqm4gdGEgdGjhuqV5IGdpw6EgdHLhu4sgcC12YWx1ZSA9IDAuMzIxMyA+IDAsIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSDAuIERvIMSRw7MgdOG7tyBs4buHIGtow6FjaCBow6BuZyBuYW0gxJHhu5NuZyDDvSBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGLhurFuZyA1MCUgduG7m2kga2hv4bqjbmcgdGluIGPhuq15IDk1JQ0KDQoqICoqxq/hu5tjIGzGsOG7o25nIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbuG7ryDEkeG7k25nIMO9IG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gxJHhu5NuZyB0aOG7nWkga2nhu4NtIMSR4buLbmggeGVtIHThu7cgbOG7hyBraMOhY2ggaMOgbmcgbmFtIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjw7MgcGjhuqNpIGzDoCA1MCUga2jDtG5nPyoqDQpgYGB7cn0NCnBmIDwtIGRhdGFbZGF0YSRHZW5kZXIgPT0gIkZlbWFsZSIsXQ0KcHJvcC50ZXN0KGxlbmd0aChwZiRHZW5kZXIpLCBsZW5ndGgoZGF0YSRHZW5kZXIpLCBwID0gMC41MCkNCmBgYA0KVuG7m2kga2hv4bqjbmcgdGluIGPhuq15IDk1JSDGsOG7m2MgbMaw4bujbmcgdOG7tyBs4buHIGtow6FjaCBow6BuZyBu4buvIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDQ4LjQlIMSR4bq/biA1NC45NyUuIEThu7FhIHRoZW8ga+G6v3QgcXXhuqMgdHLDqm4gdGEgdGjhuqV5IGdpw6EgdHLhu4sgcC12YWx1ZSA9IDAuMzIxMyA+IDAsIGNo4bqlcCBuaOG6rW4gZ2nhuqMgdGh1eeG6v3QgSDAuIERvIMSRw7MgdOG7tyBs4buHIGtow6FjaCBow6BuZyBu4buvIMSR4buTbmcgw70gbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBi4bqxbmcgNTAlIHbhu5tpIGtob+G6o25nIHRpbiBj4bqteSA5NSUuDQoNCiogKirGr+G7m2MgbMaw4bujbmcgc+G7sSBjaMOqbmggbOG7h2NoIGdp4buvYSB04bu3IGzhu4cga2jDoWNoIGjDoG5nIG5hbSB2w6AgbuG7ryB0cm9uZyBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8Ohby4gxJDhu5NuZyB0aOG7nWkgdGjhu7FjIGhp4buHbiBiw6BpIHRvw6FuIGtp4buDbSDEkeG7i25oIHPhu7EgY2jDqm5oIGzhu4djaCBuw6B5KioNCg0KYGBge3J9DQpzZXQuc2VlZCgxKQ0KcG1tIDwtIGRhdGFbZGF0YSRHZW5kZXIgPT0gIk1hbGUiLF0NCnBtbTEgPC0gcG1bcG0kUHVyY2hhc2UgPT0gIjEiLF0NCnBmZiA8LSBkYXRhW2RhdGEkR2VuZGVyID09ICJGZW1hbGUiLF0NCnBmZjEgPC0gcGZbcGYkUHVyY2hhc2UgPT0gIjEiLF0NCg0KYSA8LSBjKG5yb3cocG1tKSwgbnJvdyhwZmYpKQ0KYiA8LSBjKG5yb3cocG1tMSksIG5yb3cocGZmMSkpDQpwcm9wLnRlc3QoYiwgYSkNCg0KYGBgDQpHacOhIHRy4buLIHB2YWx1ZSA9IDAuMDQ2NjUgPCAwLCBiw6FjIGLhu48gZ2nhuqMgdGh1eeG6v3QgSDAsIGRvIMSRw7MgY8OzIHPhu7EgY2jDqm5oIGzhu4djaCBnaeG7r2EgdOG7tyBs4buHIGtow6FjaCBow6BuZyBuYW0gdsOgIG7hu68gdHJvbmcgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8uIFbhu5tpIG3hu6ljIMO9IG5naMSpYSA1JSwgc+G7sSBjaMOqbmggbOG7h2NoIGdp4buvYSB04bu3IGzhu4cga2jDoWNoIGjDoG5nIG5hbSB2w6AgbuG7ryB0cm9uZyBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBu4bqxbSB0cm9uZyBraG/huqNuZyB04burIDAuMDAxMTQ3IMSR4bq/biAwLjEyMjIwOC4NCg0KIyMgMy4yLjMgTWEgdHLhuq1uIGjhu4cgc+G7kSB0xrDGoW5nIHF1YW4NCmBgYHtyfQ0KI0No4buNbiBjw6FjIGJp4bq/biBz4buRIGxpw6puIHThu6VjIHRyb25nIG3DtCBow6xuaA0KY29udGlub3VzX3ZhcnMgPC0gZGF0YVssIHNhcHBseShkYXRhLCBpcy5udW1lcmljKV0NCiNUw61uaCBtYSB0cuG6rW4gdMawxqFuZyBxdWFuDQpjb3JfbWF0cml4IDwtIGNvcihjb250aW5vdXNfdmFycykNCmNvcl9tYXRyaXgNCmBgYA0KDQoNCiMjIDMuMyBNw7QgaMOsbmggaOG7k2kgcXV5IGNobyBiaeG6v24gcGjhu6UgdGh14buZYyBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBj4bunYSBraMOhY2ggaMOgbmcNCiMjIyAzLjMuMSBNw7QgaMOsbmggbG9naXQNCiogKipNw7QgaMOsbmggMSoqDQpNw7QgaMOsbmggY8OzIGJp4bq/biBwaOG7pSB0aHXhu5ljOiBwdXJjaGFzZSB2w6AgY8OhYyBiaeG6v24gxJHhu5ljIGzhuq1wIGfhu5NtIGPDoWMgYmnhur9uIMSR4buLbmggdMOtbmg6IGdlbmRlciwgYWdlLCBzZWFyY2ggdsOgIHThuqV0IGPhuqMgY8OhYyBiaeG6v24gxJHhu4tuaCBsxrDhu6NuZw0KYGBge3IgfQ0Kc2V0LnNlZWQoMSkNCm1vZGVsMSA8LSBnbG0oZGF0YSA9IGRhdGEsIGZvcm11bGEgPSBmYWN0b3IoZGF0YSRQdXJjaGFzZSkgfiBkYXRhJEdlbmRlciArIGRhdGEkQWdlICsgZGF0YSRTZWFyY2ggKyBkYXRhJFRpbWUgKyBkYXRhJHNlYXJjaC52b2x1bWUgKyBkYXRhJGNsaWNrLnJhdGUgKyBkYXRhJHRvdGFsLmNhcnQgKyBkYXRhJHRvdGFsLmltcCArIGRhdGEkdG90YWwuY2xpY2sgKyBkYXRhJGFkZC5yYXRlLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImxvZ2l0IikpDQpsZXZlbHMoZmFjdG9yKGRhdGEkUHVyY2hhc2UpKQ0Kc3VtbWFyeShtb2RlbDEpDQpgYGANCg0KKipLaeG7g20gxJHhu4tuaCBz4buxIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oKioNCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiRIXzAkOiBNw7QgaMOsbmgga2jDtG5nIHBow7kgaOG7o3ANCg0KJEhfMSQ6IE3DtCBow6xuaCBwaMO5IGjhu6NwDQpgYGB7cn0NCm1oMXRlc3QgPC0gYW5vdmEobW9kZWwxLCB0ZXN0ID0gIkNoaXNxIikNCiNM4bqleSBnacOhIHRy4buLIFByb2IgKExSIFN0YXRpc3RpYykNCnB2YWx1ZSA8LSBtaDF0ZXN0JFByWzJdDQpwdmFsdWUNCmBgYA0KUXVhIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyBwdmFsdWUgPSAwLjA0MDggPCA1JSB2w6wgduG6rXkgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwIG7Dqm4gbcO0IGjDrG5oIHBow7kgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3UuDQoNCkjhu4cgc+G7kSB0xrDGoW5nIHF1YW4gZ2nhu69hIHNlYXJjaC52b2x1bWUgdsOgIHRvdGFsLmltcCBsw6AgMC44NzM0IGtow6EgbOG7m24gbsOqbiBzZWFyY2gudm9sdW1lIGtow7RuZyB0aOG7sWMgc+G7sSDhuqNuaCBoxrDhu59uZyDEkeG6v24gcXV54bq/dCDEkeG7i25oICBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGPhu6dhIGtow6FjaCBow6BuZyBuw6puIGxv4bqhaSBiaeG6v24gbsOgeS4NCk5o4buvbmcgYmnhur9uIFRpbWUsIGNsaWNrLnJhdGUgdsOgIHRvdGFsLmNhcnQga2jDtG5nIGPDsyDhuqNuaCBoxrDhu59uZyDEkeG6v24gYmnhur9uIHBo4bulIHRodeG7mWMgdOG6oWkgYuG6pXQga+G7syBt4bupYyDDvSBuZ2jEqWEgbsOgbyBuw6puIGxv4bqhaSBuaOG7r25nIGJp4bq/biBuw6B5Lg0KDQoqICoqTcO0IGjDrG5oIDIqKg0KTcO0IGjDrG5oIDIgYmFvIGfhu5NtIG5o4buvbmcgYmnhur9uIHRyb25nIG3DtCBow6xuaCAxIGLhu48gxJFpIGJp4bq/biBTZWFyY2gudm9sdW1lLCBUaW1lLCBjbGljay5yYXRlIHbDoCB0b3RhbC5jYXJ0Lg0KYGBge3J9DQpzZXQuc2VlZCgxKQ0KbW9kZWwyIDwtIGdsbShkYXRhID0gZGF0YSwgZm9ybXVsYSA9IGZhY3RvcihkYXRhJFB1cmNoYXNlKSB+IGRhdGEkR2VuZGVyICsgZGF0YSRBZ2UgKyBkYXRhJFNlYXJjaCArIGRhdGEkdG90YWwuaW1wICsgZGF0YSR0b3RhbC5jbGljayArIGRhdGEkYWRkLnJhdGUsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAibG9naXQiKSkNCmxldmVscyhmYWN0b3IoZGF0YSRQdXJjaGFzZSkpDQpzdW1tYXJ5KG1vZGVsMikNCmBgYA0KDQoqKktp4buDbSDEkeG7i25oIHPhu7EgcGjDuSBo4bujcCBj4bunYSBtw7QgaMOsbmgqKg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiRIXzAkOiBNw7QgaMOsbmgga2jDtG5nIHBow7kgaOG7o3ANCiRIXzEkOiBNw7QgaMOsbmggcGjDuSBo4bujcA0KYGBge3J9DQptaDJ0ZXN0IDwtIGFub3ZhKG1vZGVsMiwgdGVzdCA9ICJDaGlzcSIpDQojTOG6pXkgZ2nDoSB0cuG7iyBQcm9iIChMUiBTdGF0aXN0aWMpDQpwdmFsdWUgPC0gbWgydGVzdCRQclsyXQ0KcHZhbHVlDQpgYGANClF1YSBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgcHZhbHVlID0gMC4wMzg4IDwgNSUgdsOsIHbhuq15IGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMCBuw6puIG3DtCBow6xuaCBwaMO5IGjhu6NwIHbhu5tpIGThu68gbGnhu4d1Lg0KDQoNCiMjIyAzLjMuMiBNw7QgaMOsbmggcHJvYml0DQpgYGB7ciAxLjJ9DQpzZXQuc2VlZCgxKQ0KbW9kZWwzIDwtIGdsbShkYXRhID0gZGF0YSwgZm9ybXVsYSA9IGZhY3RvcihkYXRhJFB1cmNoYXNlKSB+IGRhdGEkR2VuZGVyICsgZGF0YSRBZ2UgKyBkYXRhJFNlYXJjaCArIGRhdGEkdG90YWwuaW1wICsgZGF0YSR0b3RhbC5jbGljayArIGRhdGEkYWRkLnJhdGUsIGZhbWlseSA9IGJpbm9taWFsKGxpbmsgPSAicHJvYml0IikpDQpsZXZlbHMoZmFjdG9yKGRhdGEkUHVyY2hhc2UpKQ0Kc3VtbWFyeShtb2RlbDMpDQpgYGANCioqS2nhu4NtIMSR4buLbmggc+G7sSBwaMO5IGjhu6NwIGPhu6dhIG3DtCBow6xuaCoqDQoNCkdp4bqjIHRodXnhur90Og0KDQokSF8wJDogTcO0IGjDrG5oIGtow7RuZyBwaMO5IGjhu6NwDQoNCiRIXzEkOiBNw7QgaMOsbmggcGjDuSBo4bujcA0KYGBge3J9DQptaDN0ZXN0IDwtIGFub3ZhKG1vZGVsMywgdGVzdCA9ICJDaGlzcSIpDQojTOG6pXkgZ2nDoSB0cuG7iyBQcm9iIChMUiBTdGF0aXN0aWMpDQpwdmFsdWUgPC0gbWgzdGVzdCRQclsyXQ0KcHZhbHVlDQpgYGANClF1YSBr4bq/dCBxdeG6oyBraeG7g20gxJHhu4tuaCBjaG8gdGjhuqV5IGdpw6EgdHLhu4sgcHZhbHVlID0gMC4wMzg4IDwgNSUgdsOsIHbhuq15IGLDoWMgYuG7jyBnaeG6oyB0aHV54bq/dCBIMCBuw6puIG3DtCBow6xuaCBwaMO5IGjhu6NwIHbhu5tpIGThu68gbGnhu4d1Lg0KDQoNCiMjIyAzLjMuMyBNw7QgaMOsbmggY2xvZ2xvZw0KYGBge3IgMS4zfQ0Kc2V0LnNlZWQoMSkNCm1vZGVsNCA8LSBnbG0oZGF0YSA9IGRhdGEsIGZvcm11bGEgPSBmYWN0b3IoZGF0YSRQdXJjaGFzZSkgfiBkYXRhJEdlbmRlciArIGRhdGEkQWdlICsgZGF0YSRTZWFyY2ggKyBkYXRhJHRvdGFsLmltcCArIGRhdGEkdG90YWwuY2xpY2sgKyBkYXRhJGFkZC5yYXRlLCBmYW1pbHkgPSBiaW5vbWlhbChsaW5rID0gImNsb2dsb2ciKSkNCmxldmVscyhmYWN0b3IoZGF0YSRQdXJjaGFzZSkpDQpzdW1tYXJ5KG1vZGVsNCkNCmBgYA0KKipLaeG7g20gxJHhu4tuaCBz4buxIHBow7kgaOG7o3AgY+G7p2EgbcO0IGjDrG5oKioNCg0KR2nhuqMgdGh1eeG6v3Q6DQoNCiRIXzAkOiBNw7QgaMOsbmgga2jDtG5nIHBow7kgaOG7o3ANCg0KJEhfMSQ6IE3DtCBow6xuaCBwaMO5IGjhu6NwDQpgYGB7cn0NCm1oNHRlc3QgPC0gYW5vdmEobW9kZWw0LCB0ZXN0ID0gIkNoaXNxIikNCiNM4bqleSBnacOhIHRy4buLIFByb2IgKExSIFN0YXRpc3RpYykNCnB2YWx1ZSA8LSBtaDR0ZXN0JFByWzJdDQpwdmFsdWUNCmBgYA0KUXVhIGvhur90IHF14bqjIGtp4buDbSDEkeG7i25oIGNobyB0aOG6pXkgZ2nDoSB0cuG7iyBwdmFsdWUgPSAwLjAzODggPCA1JSB2w6wgduG6rXkgYsOhYyBi4buPIGdp4bqjIHRodXnhur90IEgwIG7Dqm4gbcO0IGjDrG5oIHBow7kgaOG7o3AgduG7m2kgZOG7ryBsaeG7h3UuDQoNCg0KIyMgMy40IEzhu7FhIGNo4buNbiBtw7QgaMOsbmggcGjDuSBo4bujcCBnaeG7r2EgbcO0IGjDrG5oIGxvZ2l0LCBwcm9iaXQgdsOgIGNsb2dsb2cNCsSQ4buDIMSRw6FuaCBnacOhIGPDoWMgbcO0IGjDrG5oIGjhu5NpIHF1eSB0csOqbiB0YSBz4bq9IHPhu60gZOG7pW5nIHRow6ptIG5o4buvbmcgdGnDqnUgY2jDrSBzYXUgxJHhu4MgbOG7sWEgY2jhu41uIG3DtCBow6xuaCBwaMO5IGjhu6NwIHbDrCBzYXUga2hpIHRo4buxYyBoaeG7h24ga2nhu4NtIMSR4buLbmggc+G7sSBwaMO5IGjhu6NwIGPhu6dhIGPhuqMgMyBtw7QgaMOsbmg6IGxvZ2l0LCBwcm9iaXQgdsOgIGNsb2dsb2cgxJHhu4F1IGNobyByYSBr4bq/dCBxdeG6oyBtw7QgaMOsbmggcGjDuSBo4bujcCB24bubaSBk4buvIGxp4buHdS4NCg0KIyMjIDMuNC4xIEFJQyANCmBgYHtyfQ0KYWljMSA8LSBBSUMobW9kZWwyKQ0KYWljMiA8LSBBSUMobW9kZWwzKQ0KYWljMyA8LSBBSUMobW9kZWw0KQ0KQUlDIDwtIGNiaW5kKGFpYzEsYWljMixhaWMzKQ0KQUlDDQpgYGANCkFJQyhsb2dpdCkgPSAxMDQ2LjA2OQ0KDQpBSUMocHJvYml0KSA9IDEwNDUuNTcxDQoNCkFJQyhjbG9nbG9nKSA9IDEwNDMuNjUyDQoNCk3DtCBow6xuaCBjbG9nbG9nIGPDsyBBSUMgbmjhu48gbmjhuqV0IG7Dqm4gdGEgY2jhu41uIG3DtCBow6xuaCBuw6B5Lg0KDQojIyMgMy40LjIgRGV2aWFuY2UNCmBgYHtyfQ0KZGUxIDwtIGRldmlhbmNlKG1vZGVsMikNCmRlMiA8LSBkZXZpYW5jZShtb2RlbDMpDQpkZTMgPC0gZGV2aWFuY2UobW9kZWw0KQ0KZGV2aWFuY2UgPC0gY2JpbmQoZGUxLGRlMixkZTMpDQpkZXZpYW5jZQ0KYGBgDQpEZXZpYW5jZShsb2dpdCkgPSA5ODQuMDY5MQ0KDQpEZXZpYW5jZShwcm9iaXQpID0gOTgzLjU3MDgNCg0KRGV2aWFuY2UoY2xvZ2xvZykgPSA5ODEuNjUyDQoNCk3DtCBow6xuaCBDbG9nbG9nIGPDsyBEZXZpYW5jZSBuaOG7jyBuaOG6pXQgbsOqbiB0YSBjaOG7jW4gbcO0IGjDrG5oIG7DoHkuDQoNCiMjIyAzLjQuMyBCcmllciBTY29yZQ0KDQogIFRyb25nIDMgdGnDqnUgY2jDrSB0csOqbiB0YSB0aOG6pXkgY8OhYyBnacOhIHRy4buLIEFJQywgRGV2aWFuY2UgdsOgIEJyaWVyU2NvcmUgY+G7p2EgbcO0IGjDrG5oIGNsb2dsb2cgbMOgIG5o4buPIG5o4bqldCwgdOG7qWMgbMOgIG3DtCBow6xuaCBjbG9nbG9nIGzDoCBtw7QgaMOsbmggcGjDuSBo4bujcCBuaOG6pXQgdHJvbmcgY+G6oyAzIG3DtCBow6xuaC4NCg0KIyMjIDMuNC40IE1hIHRy4bqtbiBuaOG6p20gbOG6q24NCiogKipNw7QgaMOsbmggbG9naXQqKg0KYGBge3J9DQpsaWJyYXJ5KGNhcmV0KQ0KcHJlZGljdGlvbnMgPC0gcHJlZGljdChtb2RlbDIsIG5ld2RhdGEgPSBtb2RlbDIkZGF0YSwgdHlwZSA9ICJyZXNwb25zZSIpDQpwcmVkaWN0ZWRfY2xhc3NlcyA8LSBpZmVsc2UocHJlZGljdGlvbnMgPiAwLjUsICIxIiwgIjAiKSAgDQoNCnByZWRpY3Rpb25zMTwtZmFjdG9yKHByZWRpY3RlZF9jbGFzc2VzLCBsZXZlbHMgPSBjKCIwIiwiMSIpKQ0KYWN0dWFsPC0gZmFjdG9yKG1vZGVsMiRkYXRhJFB1cmNoYXNlLCBsYWJlbHMgPSBjKCIwIiwiMSIpKQ0KY29uZnVzaW9uTWF0cml4KHRhYmxlKHByZWRpY3Rpb25zMSwgYWN0dWFsKSkNCmBgYA0KTcO0IGjDrG5oIGxvZ2l0IGPDsyDEkeG7mWMgY2jDrW5oIHjDoWMgdG/DoG4gdGjhu4MgbMOgIDcxLjM3JSwgxJHhu5kgbmjhuqF5IGzDoCA4LjQzJSB2w6AgxJHhu5kgaGnhu4d1IHF14bqjIGzDoCA5Ni40OCUuDQoNCiogKipNw7QgaMOsbmggcHJvYml0KioNCmBgYHtyfQ0KcHJlZGljdGlvbnMgPC0gcHJlZGljdChtb2RlbDMsIG5ld2RhdGEgPSBtb2RlbDMkZGF0YSwgdHlwZSA9ICJyZXNwb25zZSIpDQpwcmVkaWN0ZWRfY2xhc3NlcyA8LSBpZmVsc2UocHJlZGljdGlvbnMgPiAwLjUsICIxIiwgIjAiKSAgDQoNCnByZWRpY3Rpb25zMTwtZmFjdG9yKHByZWRpY3RlZF9jbGFzc2VzLCBsZXZlbHMgPSBjKCIwIiwiMSIpKQ0KYWN0dWFsPC0gZmFjdG9yKG1vZGVsMyRkYXRhJFB1cmNoYXNlLCBsYWJlbHMgPSBjKCIwIiwiMSIpKQ0KY29uZnVzaW9uTWF0cml4KHRhYmxlKHByZWRpY3Rpb25zMSwgYWN0dWFsKSkNCmBgYA0KDQpNw7QgaMOsbmggcHJvYml0IGPDsyDEkeG7mWMgY2jDrW5oIHjDoWMgdG/DoG4gdGjhu4MgbMOgIDcxLjQ4JSwgxJHhu5kgbmjhuqF5IGzDoCA4LjgxJSB2w6AgxJHhu5kgaGnhu4d1IHF14bqjIGzDoCA5Ni40OCUuDQoNCiogKipNw7QgaMOsbmggY2xvZ2xvZyoqDQpgYGB7cn0NCnByZWRpY3Rpb25zIDwtIHByZWRpY3QobW9kZWw0LCBuZXdkYXRhID0gbW9kZWw0JGRhdGEsIHR5cGUgPSAicmVzcG9uc2UiKQ0KcHJlZGljdGVkX2NsYXNzZXMgPC0gaWZlbHNlKHByZWRpY3Rpb25zID4gMC41LCAiMSIsICIwIikgIA0KDQpwcmVkaWN0aW9uczE8LWZhY3RvcihwcmVkaWN0ZWRfY2xhc3NlcywgbGV2ZWxzID0gYygiMCIsIjEiKSkNCmFjdHVhbDwtIGZhY3Rvcihtb2RlbDQkZGF0YSRQdXJjaGFzZSwgbGFiZWxzID0gYygiMCIsIjEiKSkNCmNvbmZ1c2lvbk1hdHJpeCh0YWJsZShwcmVkaWN0aW9uczEsIGFjdHVhbCkpDQpgYGANCk3DtCBow6xuaCBsb2dpdCBjw7MgxJHhu5ljIGNow61uaCB4w6FjIHRvw6BuIHRo4buDIGzDoCA3MS42OSUsIMSR4buZIG5o4bqheSBsw6AgOC4wNSUgdsOgIMSR4buZIGhp4buHdSBxdeG6oyBsw6AgOTcuMDk1JS4NCg0KROG7sWEgdsOgbyBr4bq/dCBxdeG6oyB0csOqbiBjw7MgdGjhu4MgdGjhuqV5IG3DtCBow6xuaCBwcm9iaXQgY8OzIMSR4buZIG5o4bqheSBjYW8gbmjhuqV0IHbDoCBtw7QgaMOsbmggY2xvZ2xvZyBjw7MgxJHhu5kgY2jDrW5oIHjDoWMgdG/DoG4gdGjhu4MgdsOgIMSR4buZIGhp4buHdSBxdeG6oyBsw6AgY2FvIG5o4bqldCB0cm9uZyBj4bqjIDMgbcO0IGjDrG5oLCB2w6wgduG6rXkgbcO0IGjDrG5oIGzhu7FhIGNo4buNbiBsw6AgbcO0IGjDrG5oIGNsb2dsb2cuDQoNCkvhur90IGx14bqtbjogROG7sWEgdsOgbyA0IHRpw6p1IGNodeG6qW4gdGEgdGjhuqV5IG3DtCBow6xuaCBjbG9nbG9nIGzDoCBtw7QgaMOsbmggxJHGsOG7o2MgbOG7sWEgY2jhu41uIG5oaeG7gXUgbmjhuqV0IGRvIMSRw7MgTUggY2xvZ2xvZyDEkcaw4bujYyBs4buxYSBjaOG7jW4gxJHhu4MgcGjDom4gdMOtY2ggcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY+G7p2Ega2jDoWNoIGjDoG5nLg0KDQoNCiMjIDMuNSBNw7QgaMOsbmggY2xvZ2xvZw0KYGBge3J9DQpzdW1tYXJ5KG1vZGVsNCkNCmBgYA0KIyMjIDMuNS4xIEvhur90IHF14bqjIG3DtCBow6xuaCBDbG9nbG9nDQpL4bq/dCBxdeG6oyBwaMOibiB0w61jaCBo4buTaSBxdXkgQ2xvZ2xvZyBjaG8gdGjhuqV5LCAzMCBiaeG6v24gxJHGsGEgdsOgbyBtw7QgaMOsbmggaOG7k2kgcXV5IMSR4buDIHBow6JuIHTDrWNoIG5oxrBuZyBr4bq/dCBxdeG6oyBwaMOibiB0w61jaCBjaOG7iSBjw7MgMTIgYmnhur9uIMSR4buZYyBs4bqtcCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIGJhbyBn4buTbToNCg0KKiBHaeG7m2kgdMOtbmggbmFtIChHZW5kZXJNYWxlKQ0KDQoqIMSQ4buZIHR14buVaSB04burIDMwLTQwIChBZ2UzMC00MCkNCg0KKiDEkOG7mSB0deG7lWkgdOG7qyA1MC02MCAoQWdlNTAtNjApDQoNCiogVOG7qyBraMOzYSB0w6xtIGtp4bq/bSAiY2FsbSBjb3JuZXIgaXRlbXMiIChTZWFyY2hjYWxtIGNvcm5lciBpdGVtcykNCg0KKiBU4burIGtow7NhIHTDrG0ga2nhur9tICJzZW5zcm95IHRveXMiIChTZWFyY2hzZW5zcm95IHRveXMpDQoNCiogU+G7kSBs4bqnbiBxdeG6o25nIGPDoW8gxJHGsOG7o2MgaGnhu4NuIHRo4buLIGNobyBraMOhY2ggaMOgbmcgdHJvbmcga+G6v3QgcXXhuqMgdMOsbSBraeG6v20gKHRvdGFsLmltcCkNCg0KKiBz4buRIGzhuqduIG5o4bqlcCB2w6BvIHhlbSBxdeG6o25nIGPDoW8gdOG7qyAzMC00MCBs4bqnbiAodG90YWwuY2xpY2szMC00MCkNCg0KKiBz4buRIGzhuqduIG5o4bqlcCB2w6BvIHhlbSBxdeG6o25nIGPDoW8gdOG7qyA1MC02MCBs4bqnbiAodG90YWwuY2xpY2s1MC02MCkNCg0KKiBz4buRIGzhuqduIG5o4bqlcCB2w6BvIHhlbSBxdeG6o25nIGPDoW8gdOG7qyA2MC03MCBs4bqnbiAodG90YWwuY2xpY2s2MC03MCkNCg0KKiBz4buRIGzhuqduIG5o4bqlcCB2w6BvIHhlbSBxdeG6o25nIGPDoW8gdOG7qyA3MC04MCBs4bqnbiAodG90YWwuY2xpY2s3MC04MCkNCg0KKiBz4buRIGzhuqduIG5o4bqlcCB2w6BvIHhlbSBxdeG6o25nIGPDoW8gdHLDqm4gMTAwIGzhuqduICh0b3RhbC5jbGlja01vcmUgDQp0aGFuIDEwMCkNCiogVOG7tyBs4buHIHRow6ptIHbDoG8gZ2nhu48gaMOgbmcgKGFkZC5yYXRlKQ0KDQpW4bubaSBnaeG6oyB0aHV54bq/dCBjw6FjIHnhur91IHThu5Ega2jDoWMga2jDtG5nIMSR4buVaSwg4bqjbmggaMaw4bufbmcgY+G7p2EgdOG7q25nIGJp4bq/biDEkeG6v24gYmnhur9uIHBo4bulIHRodeG7mWMgKHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvKSDEkcaw4bujYyBnaeG6o2kgdGjDrWNoIG5oxrAgc2F1Og0KDQoqIEJp4bq/biBnaeG7m2kgdMOtbmggdHJvbmcgbcO0IGjDrG5oIGPDsyDDvSBuZ2jEqWEgdGjhu5FuZyBrw6ogxJHhu5FpIHbhu5tpIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGPhu6dhIGtow6FjaCBow6BuZywg4bufIG3hu6ljIMO9IG5naMSpYSA1JSB0aMOsIGtow6FjaCBow6BuZyBuYW0gc+G6vSBjw7MgeMOhYyBzdeG6pXQgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBjYW8gaMahbiA1NC45MiUgc28gduG7m2kga2jDoWNoIGjDoG5nIG7hu68uDQoNCiogxJDhu5kgdHXhu5VpIGtow6FjIG5oYXUgY+G7p2Ega2jDoWNoIGjDoG5nIHPhur0gY8OzIHTDoWMgxJHhu5luZyBraMOhYyBuaGF1IMSR4bq/biBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8Ohby4gQ+G7pSB0aOG7gyB04bqhaSBt4bupYyDDvSBuZ2jEqWEgMTAlLCBraMOhY2ggaMOgbmcgY8OzIMSR4buZIHR14buVaSB04burIDMwLTQwIHR14buVaSBz4bq9IGPDsyBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBjYW8gaMahbiA0NC45OCUga2jDoWNoIGjDoG5nIHRyb25nIMSR4buZIHR14buVaSA0MC01MC4gQsOqbiBj4bqhbmggxJHDsywga2jDoWNoIGjDoG5nIGPDsyDEkeG7mSB0deG7lWkgdOG7qyA1MC02MCB0aMOsIHjDoWMgc3XhuqV0IHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGNhbyBoxqFuIDQxLjUyJSBzbyB24bubaSBraMOhY2ggaMOgbmcgdHJvbmcgxJHhu5kgdHXhu5VpIDQwLTUwLg0KDQoqIFThu6sga2jDs2EgdMOsbSBraeG6v20gY8WpbmcgY8OzIOG6o25oIGjGsOG7n25nIMSR4bq/biBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBj4bunYSBraMOhY2ggaMOgbmcsIGPhu6UgdGjhu4MgdOG6oWkgbeG7qWMgw70gbmdoxKlhIDElLCBraMOhY2ggaMOgbmcgdMOsbSBraeG6v20gdOG7qyBraMOzYSAiY2FsbSBjb3JuZXIgaXRlbXMiIGNhbyBoxqFuIDcxLjI0JSBjw6FjIHThu6sga2jDs2Ega2jDoWMuIMSQ4buTbmcgdGjhu51pLCBraMOhY2ggaMOgbmcgdMOsbSBraeG6v20gdOG7qyBraMOzYSAic2Vuc29yeSB0b3lzIiBjxaluZyBjw7MgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY2FvIGjGoW4gMTMuNSUgduG7m2kgbeG7qWMgw70gbmdoxKlhIDEwJS4NCg0KKiBCw6puIGPhuqFuaCDEkcOzLCBiaeG6v24gU+G7kSBs4bqnbiBxdeG6o25nIGPDoW8gxJHGsOG7o2MgaGnhu4NuIHRo4buLIGNobyBraMOhY2ggaMOgbmcgdHJvbmcga+G6v3QgcXXhuqMgdMOsbSBraeG6v20gKHRvdGFsLmltcCkgdsOgIHThu7cgbOG7hyB0aMOqbSB2w6BvIGdp4buPIGjDoG5nIChhZGQuY2FydCkgY8WpbmcgY8OzIG5o4buvbmcgdMOhYyDEkeG7mW5nIHTDrWNoIGPhu7FjLCBjw7luZyBjaGnhu4F1IMSR4bq/biBxdXnhur90IMSR4buLbmggbXVhIGjDoG5nIHNhdSBraGkgeGVtIHF14bqjbmcgY8OhbyBj4bunYSBraMOhY2ggaMOgbmcuDQoNCiogU+G7kSBs4bqnbiBuaOG6pXAgeGVtIHF14bqjbmcgY8OhbyBjxaluZyBjw7Mg4bqjbmggaMaw4bufbmcgxJHDoW5nIGvhu4MgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGPhu6dhIGtow6FjaCBow6BuZywgc+G7kSBs4bqnbiBuaOG6pXAgeGVtIHF14bqjbmcgY8OhbyBjw6BuZyBuaGnhu4F1IGNo4bupbmcgdOG7jyBraMOhY2ggaMOgbmcgY8OgbmcgY8OzIG5odSBj4bqndSB0w6xtIGtp4bq/bSB2w6AgbXVhIHPhuqNuIHBo4bqpbS4gQ+G7pSB0aOG7gywgc+G7kSBs4bqnbiBuaOG6pXAgeGVtIHF14bqjbmcgY8OhbyB04burIDUwLTYwLDYwLTcwIHbDoCA3MC04MCBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHThuqFpIG3hu6ljIMO9IG5naMSpYSAxMCUsIHPhu5EgbOG6p24gbmjhuqVwIHhlbSBxdeG6o25nIGPDoW8gbmhp4buBdSBoxqFuIDEwMCBs4bqnbiBjw7Mgw70gbmdoxKlhIHRo4buRbmcga8OqIHThuqFpIG3hu6ljIMO9IG5naMSpYSA1JSxz4buRIGzhuqduIG5o4bqlcCB4ZW0gcXXhuqNuZyBjw6FvIHThu6sgMzAtNDAgY8OzIMO9IG5naMSpYSB0aOG7kW5nIGvDqiB04bqhaSBt4bupYyDDvSBuZ2jEqWEgMSUuDQoNCiMjIyAzLjUuMiBLaG/huqNuZyDGsOG7m2MgbMaw4bujbmcgY2hvIGjhu4cgc+G7kSBo4buTaSBxdXkNCmBgYHtyfQ0KY29uZmludC5kZWZhdWx0KG1vZGVsNCkNCmBgYA0KDQojIyMgMy41LjMgROG7sSBiw6FvDQpgYGB7cn0NCnByZWRpY3Rpb24gPC0gcHJlZGljdChtb2RlbDQsIG5ld2RhdGEgPSBtb2RlbDQkZGF0YSwgdHlwZSA9ICJyZXNwb25zZSIpDQpoZWFkKHJvdW5kKHByZWRpY3Rpb24sNCksMTApDQpgYGANCg0KDQojIENIxq/GoE5HIDQuIEvhur5UIExV4bqsTg0KIyMgNC4xIEvhur90IGx14bqtbg0KUXVhIGvhur90IHF14bqjIHBow6JuIHTDrWNoIHRyw6puIHRhIGPDsyB0aOG7gyB0aOG6pXkgcXV54bq/dCDEkeG7i25oIG11YSBow6BuZyBzYXUga2hpIHhlbSBxdeG6o25nIGPDoW8gY+G7p2Ega2jDoWNoIGjDoG5nIGNo4buLdSB0w6FjIMSR4buZbmcgYuG7n2kgbmhp4buBdSB54bq/dSB04buRIG5oxrA6IGdp4bubaSB0w61uaCwgxJHhu5kgdHXhu5VpLCB04burIGtow7NhIHTDrG0ga2nhur9tLCBT4buRIGzhuqduIHF14bqjbmcgY8OhbyDEkcaw4bujYyBoaeG7g24gdGjhu4sgY2hvIGtow6FjaCBow6BuZyB0cm9uZyBr4bq/dCBxdeG6oyB0w6xtIGtp4bq/bSwgc+G7kSBs4bqnbiBuaOG6pXAgdsOgbyB4ZW0gcXXhuqNuZyBjw6FvIHbDoCB04bu3IGzhu4cgdGjDqm0gdsOgbyBnaeG7jyBow6BuZy4NCg0KIyMgNC4yIEjhuqFuIGNo4bq/IA0KRG8gaOG6oW4gY2jhur8gduG7gSBt4bq3dCB0aOG7nWkgZ2lhbiBjxaluZyBuaMawIGto4bqjIG7Eg25nIHbhu4EgbsSDbmcgbOG7sWMgbmdoacOqbiBj4bupdSBuw6puIHTDoWMgZ2nhuqMgY2jhu4kgdGjhu7FjIGhp4buHbiDEkcaw4bujYyB24bubaSBz4buRIG3huqt1IGjhuqFuIGNo4bq/IHbDoCDEkeG7kWkgdMaw4bujbmcga2jhuqNvIHPDoXQgY2jhu4kgbWFuZyB0w61uaCBjaOG6pXQgxJHhuqFpIGRp4buHbiwgY2jGsGEgbWFuZyB0w61uaCBjaOG6pXQga2jDoWkgcXXDoXQNCg0KIyMgNC4zIEjGsOG7m25nIG5naGnDqm4gY+G7qXUNClBo4bqhbSB2aSBuZ2hpw6puIGPhu6l1IGPhu6dhIHTDoWMgZ2nhuqMgY2jhu4kgdOG6rXAgdHJ1bmcgdsOgbyBt4buZdCBz4buRIHnhur91IHThu5Eg4bqjbmggaMaw4bufbmcgxJHhur9uIHF1eeG6v3QgxJHhu4tuaCBtdWEgaMOgbmcgc2F1IGtoaSB4ZW0gcXXhuqNuZyBjw6FvIGPhu6dhIGtow6FjaCBow6BuZyBuaMawIMSR4buZIHR14buVaSwgdGh1IG5o4bqtcCwgZ2nhu5tpIHTDrW5oLCB04burIGtow7NhIHTDrG0ga2nhur9tLCBz4buRIGzhuqduIG5o4bqlcCB4ZW0gcXXhuqNuZyBjw6FvLCB04bu3IGzhu4cgdGjDqm0gdsOgbyBnaeG7jyBow6BuZy4uLiBEbyDEkcOzLCBjw6FjIG5naGnDqm4gY+G7qXUgdGnhur9wIHRoZW8gY8OzIHRo4buDIHhlbSB4w6l0IHRow6ptIGPDoWMgeeG6v3UgdOG7kSB24buBIHPhu58gdGjDrWNoLCBuZ8Ogbmggbmdow6osIGPDtG5nIHZp4buHYywgdMOsbmggdHLhuqFuZyBow7RuIG5ow6JuIGPhu6dhIGtow6FjaCBow6BuZyDEkeG7gyBjw7MgdGjhu4MgxJHGsGEgcmEgxJHGsOG7o2Mga+G6v3QgcXXhuqMga2jhuqMgcXVhbiB2w6AgxJHhuqd5IMSR4bunIGjGoW4gbmjhurFtIGPhuqNpIHRoaeG7h24gY2hp4bq/biBk4buLY2ggcXXhuqNuZyBjw6FvIHBow7kgaOG7o3AgduG7m2kgbmh1IGPhuqd1IGPhu6dhIGtow6FjaCBow6BuZyB04burIMSRw7MgdGjDumMgxJHhuql5IGRvYW5oIHRodSBj4bunYSBjw7RuZyB0eS4NCg0K