From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 2DAD64A3F8 for ; Thu, 30 May 2024 02:40:59 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B31FA68D5AE; Thu, 30 May 2024 05:39:54 +0300 (EEST) Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4F54668D565 for ; Thu, 30 May 2024 05:39:48 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Thu, 30 May 2024 04:37:17 +0200 Message-ID: <20240530023927.1205442-10-dev@lynne.ee> X-Mailer: git-send-email 2.43.0.381.gb435a96ce8 In-Reply-To: <20240530023927.1205442-1-dev@lynne.ee> References: <20240530023927.1205442-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v5 09/10] aacdec: add a decoder for AAC USAC (xHE-AAC) X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Lynne via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Lynne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: VGhpcyBjb21taXQgYWRkcyBhIGRlY29kZXIgZm9yIHRoZSBmcmVxdWVuY3ktZG9tYWluIHBhcnQg b2YgVVNBQy4KCldoYXQgd29ya3M6CiAtIE1vbm8KIC0gU3RlcmVvIChubyBwcmVkaWN0aW9uKQog LSBTdGVyZW8gKG1pZC9zaWRlIGNvZGluZykKIC0gU3RlcmVvIChjb21wbGV4IHByZWRpY3Rpb24p CgpXaGF0J3MgbGVmdDoKIC0gU3BlZWNoIGNvZGluZwoKS25vd24gaXNzdWVzOgogLSBEZXN5bmMg d2l0aCBjZXJ0YWluIHNlcXVlbmNlcwogLSBQcmVyb2xsIGNyb3Nzb3ZlciBtaXNzaW5nIChzaG91 bGRuJ3QgbWF0dGVyLCBiaXRyYXRlIGFkYXB0YXRpb24gb25seSkKLS0tCiBsaWJhdmNvZGVjL2Fh Yy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgICAzICstCiBsaWJhdmNvZGVjL2FhYy9hYWNkZWMu YyAgICAgICAgICAgICAgfCAgMTg4ICstLQogbGliYXZjb2RlYy9hYWMvYWFjZGVjLmggICAgICAg ICAgICAgIHwgIDE4NyArKysKIGxpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5jICAgICAgICAgICB8 ICAyMDggKysrKwogbGliYXZjb2RlYy9hYWMvYWFjZGVjX2FjLmggICAgICAgICAgIHwgICA1NCAr CiBsaWJhdmNvZGVjL2FhYy9hYWNkZWNfZHNwX3RlbXBsYXRlLmMgfCAgICA0ICstCiBsaWJhdmNv ZGVjL2FhYy9hYWNkZWNfbGF0bS5oICAgICAgICAgfCAgIDE0ICstCiBsaWJhdmNvZGVjL2FhYy9h YWNkZWNfbHBkLmMgICAgICAgICAgfCAgMTk4ICsrKysKIGxpYmF2Y29kZWMvYWFjL2FhY2RlY19s cGQuaCAgICAgICAgICB8ICAgMzMgKwogbGliYXZjb2RlYy9hYWMvYWFjZGVjX3VzYWMuYyAgICAg ICAgIHwgMTYwOCArKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZjb2RlYy9hYWMvYWFj ZGVjX3VzYWMuaCAgICAgICAgIHwgICAzNyArCiBsaWJhdmNvZGVjL2FhY3RhYi5jICAgICAgICAg ICAgICAgICAgfCAgIDQyICsKIGxpYmF2Y29kZWMvYWFjdGFiLmggICAgICAgICAgICAgICAgICB8 ICAgMTAgKwogMTMgZmlsZXMgY2hhbmdlZCwgMjUxMCBpbnNlcnRpb25zKCspLCA3NiBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2FhYy9hYWNkZWNfYWMuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZjb2RlYy9hYWMvYWFjZGVjX2xwZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZjb2RlYy9hYWMvYWFjZGVjX2xwZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9h YWMvYWFjZGVjX3VzYWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvYWFjL2FhY2Rl Y191c2FjLmgKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9NYWtlZmlsZSBiL2xpYmF2Y29k ZWMvYWFjL01ha2VmaWxlCmluZGV4IGMzZTUyNWQzNzMuLjcwYjFkY2EyNzQgMTAwNjQ0Ci0tLSBh L2xpYmF2Y29kZWMvYWFjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvYWFjL01ha2VmaWxlCkBA IC0yLDYgKzIsNyBAQCBjbGVhbjo6CiAJCSQoUk0pICQoQ0xFQU5TVUZGSVhFUzolPWxpYmF2Y29k ZWMvYWFjLyUpCiAKIE9CSlMtJChDT05GSUdfQUFDX0RFQ09ERVIpICAgICAgICAgICs9ICBhYWMv YWFjZGVjLm8gYWFjL2FhY2RlY190YWIubyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYWFjL2FhY2RlY19mbG9hdC5vCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWFjL2FhY2RlY19mbG9hdC5vIGFhYy9hYWNkZWNfdXNhYy5vIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYWMvYWFjZGVjX2FjLm8gYWFj L2FhY2RlY19scGQubwogT0JKUy0kKENPTkZJR19BQUNfRklYRURfREVDT0RFUikgICAgKz0gIGFh Yy9hYWNkZWMubyBhYWMvYWFjZGVjX3RhYi5vIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhYWMvYWFjZGVjX2ZpeGVkLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMv YWFjL2FhY2RlYy5jIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjLmMKaW5kZXggNmYzN2FjNTM2MS4u MmI4MzIyZmM2OCAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9hYWMvYWFjZGVjLmMKKysrIGIvbGli YXZjb2RlYy9hYWMvYWFjZGVjLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgImFhY2Rl Yy5oIgogI2luY2x1ZGUgImFhY2RlY190YWIuaCIKKyNpbmNsdWRlICJhYWNkZWNfdXNhYy5oIgog CiAjaW5jbHVkZSAibGliYXZjb2RlYy9hYWMuaCIKICNpbmNsdWRlICJsaWJhdmNvZGVjL2FhY19k ZWZpbmVzLmgiCkBAIC01MzUsNiArNTM2LDggQEAgc3RhdGljIGF2X2NvbGQgdm9pZCBmbHVzaChB VkNvZGVjQ29udGV4dCAqYXZjdHgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisK KyAgICBmZl9hYWNfdXNhY19yZXNldF9zdGF0ZShhYywgJmFjLT5vY1sxXSk7CiB9CiAKIC8qKgpA QCAtOTkzLDEzICs5OTYsMTQgQEAgc3RhdGljIGludCBkZWNvZGVfZWxkX3NwZWNpZmljX2NvbmZp ZyhBQUNEZWNDb250ZXh0ICphYywgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAogICovCiBzdGF0aWMg aW50IGRlY29kZV9hdWRpb19zcGVjaWZpY19jb25maWdfZ2IoQUFDRGVjQ29udGV4dCAqYWMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZDb2RlY0NvbnRleHQg KmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QRUc0 QXVkaW9Db25maWcgKm00YWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0Q29uZmlndXJhdGlvbiAqb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdldF9iaXRfYWxpZ25tZW50LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzeW5jX2V4dGVuc2lvbikKIHsK ICAgICBpbnQgaSwgcmV0OwogICAgIEdldEJpdENvbnRleHQgZ2JjID0gKmdiOworICAgIE1QRUc0 QXVkaW9Db25maWcgKm00YWMgPSAmb2MtPm00YWM7CiAgICAgTVBFRzRBdWRpb0NvbmZpZyBtNGFj X2JhayA9ICptNGFjOwogCiAgICAgaWYgKChpID0gZmZfbXBlZzRhdWRpb19nZXRfY29uZmlnX2di KG00YWMsICZnYmMsIHN5bmNfZXh0ZW5zaW9uLCBhdmN0eCkpIDwgMCkgewpAQCAtMTAzMywxNCAr MTAzNywyMiBAQCBzdGF0aWMgaW50IGRlY29kZV9hdWRpb19zcGVjaWZpY19jb25maWdfZ2IoQUFD RGVjQ29udGV4dCAqYWMsCiAgICAgY2FzZSBBT1RfRVJfQUFDX0xDOgogICAgIGNhc2UgQU9UX0VS X0FBQ19MRDoKICAgICAgICAgaWYgKChyZXQgPSBkZWNvZGVfZ2Ffc3BlY2lmaWNfY29uZmlnKGFj LCBhdmN0eCwgZ2IsIGdldF9iaXRfYWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtNGFjLCBtNGFjLT5jaGFuX2NvbmZpZykpIDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvYy0+bTRhYywgbTRhYy0+ Y2hhbl9jb25maWcpKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICBicmVh azsKICAgICBjYXNlIEFPVF9FUl9BQUNfRUxEOgogICAgICAgICBpZiAoKHJldCA9IGRlY29kZV9l bGRfc3BlY2lmaWNfY29uZmlnKGFjLCBhdmN0eCwgZ2IsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbTRhYywgbTRhYy0+Y2hhbl9jb25maWcpKSA8IDApCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9jLT5tNGFjLCBt NGFjLT5jaGFuX2NvbmZpZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAg IGJyZWFrOworI2lmIENPTkZJR19BQUNfREVDT0RFUgorICAgIGNhc2UgQU9UX1VTQUNfTk9TQlI6 IC8qIGZhbGx0aHJvdWdoICovCisgICAgY2FzZSBBT1RfVVNBQzoKKyAgICAgICAgaWYgKChyZXQg PSBmZl9hYWNfdXNhY19jb25maWdfZGVjb2RlKGFjLCBhdmN0eCwgZ2IsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYywgbTRhYy0+Y2hhbl9jb25maWcpKSA8 IDApCiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICBicmVhazsKKyNlbmRpZgogICAg IGRlZmF1bHQ6CiAgICAgICAgIGF2cHJpdl9yZXBvcnRfbWlzc2luZ19mZWF0dXJlKGF2Y3R4LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXVkaW8gb2JqZWN0IHR5cGUg JXMlZCIsCkBAIC0xMDYwLDcgKzEwNzIsNyBAQCBzdGF0aWMgaW50IGRlY29kZV9hdWRpb19zcGVj aWZpY19jb25maWdfZ2IoQUFDRGVjQ29udGV4dCAqYWMsCiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F1 ZGlvX3NwZWNpZmljX2NvbmZpZyhBQUNEZWNDb250ZXh0ICphYywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVkNvZGVjQ29udGV4dCAqYXZjdHgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBFRzRBdWRpb0NvbmZpZyAqbTRhYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRDb25maWd1cmF0aW9u ICpvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50 OF90ICpkYXRhLCBpbnQ2NF90IGJpdF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBzeW5jX2V4dGVuc2lvbikKIHsKQEAgLTEwODAsNyArMTA5Miw3IEBA IHN0YXRpYyBpbnQgZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhBQUNEZWNDb250ZXh0ICph YywKICAgICBpZiAoKHJldCA9IGluaXRfZ2V0X2JpdHMoJmdiLCBkYXRhLCBiaXRfc2l6ZSkpIDwg MCkKICAgICAgICAgcmV0dXJuIHJldDsKIAotICAgIHJldHVybiBkZWNvZGVfYXVkaW9fc3BlY2lm aWNfY29uZmlnX2diKGFjLCBhdmN0eCwgbTRhYywgJmdiLCAwLAorICAgIHJldHVybiBkZWNvZGVf YXVkaW9fc3BlY2lmaWNfY29uZmlnX2diKGFjLCBhdmN0eCwgb2MsICZnYiwgMCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jX2V4dGVuc2lvbik7CiB9CiAK QEAgLTExMDQsNiArMTExNiwxNSBAQCBzdGF0aWMgYXZfY29sZCBpbnQgZGVjb2RlX2Nsb3NlKEFW Q29kZWNDb250ZXh0ICphdmN0eCkKIHsKICAgICBBQUNEZWNDb250ZXh0ICphYyA9IGF2Y3R4LT5w cml2X2RhdGE7CiAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBP dXRwdXRDb25maWd1cmF0aW9uICpvYyA9ICZhYy0+b2NbaV07CisgICAgICAgIEFBQ1VTQUNDb25m aWcgKnVzYWMgPSAmb2MtPnVzYWM7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdXNhYy0+ bmJfZWxlbXM7IGorKykgeworICAgICAgICAgICAgQUFDVXNhY0VsZW1Db25maWcgKmVjID0gJnVz YWMtPmVsZW1zW2ldOworICAgICAgICAgICAgYXZfZnJlZXAoJmVjLT5leHQucGxfZGF0YSk7Cisg ICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IEZGX0FSUkFZ X0VMRU1TKGFjLT5jaGUpOyB0eXBlKyspIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBN QVhfRUxFTV9JRDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoYWMtPmNoZVt0eXBlXVtpXSkgewpA QCAtMTE4MSw3ICsxMjAyLDcgQEAgYXZfY29sZCBpbnQgZmZfYWFjX2RlY29kZV9pbml0KEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKICAgICBhYy0+b2NbMV0ubTRhYy5zYW1wbGVfcmF0ZSA9IGF2Y3R4 LT5zYW1wbGVfcmF0ZTsKIAogICAgIGlmIChhdmN0eC0+ZXh0cmFkYXRhX3NpemUgPiAwKSB7Ci0g ICAgICAgIGlmICgocmV0ID0gZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhhYywgYWMtPmF2 Y3R4LCAmYWMtPm9jWzFdLm00YWMsCisgICAgICAgIGlmICgocmV0ID0gZGVjb2RlX2F1ZGlvX3Nw ZWNpZmljX2NvbmZpZyhhYywgYWMtPmF2Y3R4LCAmYWMtPm9jWzFdLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmV4dHJhZGF0YSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5leHRyYWRh dGFfc2l6ZSAqIDhMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDEpKSA8IDApCkBAIC0xNTQ5LDkgKzE1NzAsMTYgQEAgc3RhdGljIGludCBkZWNvZGVf cHVsc2VzKFB1bHNlICpwdWxzZSwgR2V0Qml0Q29udGV4dCAqZ2IsCiBpbnQgZmZfYWFjX2RlY29k ZV90bnMoQUFDRGVjQ29udGV4dCAqYWMsIFRlbXBvcmFsTm9pc2VTaGFwaW5nICp0bnMsCiAgICAg ICAgICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsIGNvbnN0IEluZGl2aWR1YWxDaGFu bmVsU3RyZWFtICppY3MpCiB7CisgICAgaW50IHRuc19tYXhfb3JkZXIgPSBJTlQzMl9NQVg7Cisg ICAgY29uc3QgaW50IGlzX3VzYWMgPSBhYy0+b2NbMV0ubTRhYy5vYmplY3RfdHlwZSA9PSBBT1Rf VVNBQyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgYWMtPm9jWzFdLm00YWMub2JqZWN0X3R5 cGUgPT0gQU9UX1VTQUNfTk9TQlI7CiAgICAgaW50IHcsIGZpbHQsIGksIGNvZWZfbGVuLCBjb2Vm X3JlcywgY29lZl9jb21wcmVzczsKICAgICBjb25zdCBpbnQgaXM4ID0gaWNzLT53aW5kb3dfc2Vx dWVuY2VbMF0gPT0gRUlHSFRfU0hPUlRfU0VRVUVOQ0U7Ci0gICAgY29uc3QgaW50IHRuc19tYXhf b3JkZXIgPSBpczggPyA3IDogYWMtPm9jWzFdLm00YWMub2JqZWN0X3R5cGUgPT0gQU9UX0FBQ19N QUlOID8gMjAgOiAxMjsKKworICAgIC8qIFVTQUMgZG9lc24ndCBzZWVtIHRvIGhhdmUgYSBsaW1p dCAqLworICAgIGlmICghaXNfdXNhYykKKyAgICAgICAgdG5zX21heF9vcmRlciA9IGlzOCA/IDcg OiBhYy0+b2NbMV0ubTRhYy5vYmplY3RfdHlwZSA9PSBBT1RfQUFDX01BSU4gPyAyMCA6IDEyOwor CiAgICAgZm9yICh3ID0gMDsgdyA8IGljcy0+bnVtX3dpbmRvd3M7IHcrKykgewogICAgICAgICBp ZiAoKHRucy0+bl9maWx0W3ddID0gZ2V0X2JpdHMoZ2IsIDIgLSBpczgpKSkgewogICAgICAgICAg ICAgY29lZl9yZXMgPSBnZXRfYml0czEoZ2IpOwpAQCAtMTU2MCw3ICsxNTg4LDEyIEBAIGludCBm Zl9hYWNfZGVjb2RlX3RucyhBQUNEZWNDb250ZXh0ICphYywgVGVtcG9yYWxOb2lzZVNoYXBpbmcg KnRucywKICAgICAgICAgICAgICAgICBpbnQgdG1wMl9pZHg7CiAgICAgICAgICAgICAgICAgdG5z LT5sZW5ndGhbd11bZmlsdF0gPSBnZXRfYml0cyhnYiwgNiAtIDIgKiBpczgpOwogCi0gICAgICAg ICAgICAgICAgaWYgKCh0bnMtPm9yZGVyW3ddW2ZpbHRdID0gZ2V0X2JpdHMoZ2IsIDUgLSAyICog aXM4KSkgPiB0bnNfbWF4X29yZGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzX3VzYWMpCisg ICAgICAgICAgICAgICAgICAgIHRucy0+b3JkZXJbd11bZmlsdF0gPSBnZXRfYml0cyhnYiwgNCAt IGlzOCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0bnMtPm9y ZGVyW3ddW2ZpbHRdID0gZ2V0X2JpdHMoZ2IsIDUgLSAoMiAqIGlzOCkpOworCisgICAgICAgICAg ICAgICAgaWYgKHRucy0+b3JkZXJbd11bZmlsdF0gPiB0bnNfbWF4X29yZGVyKSB7CiAgICAgICAg ICAgICAgICAgICAgIGF2X2xvZyhhYy0+YXZjdHgsIEFWX0xPR19FUlJPUiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJUTlMgZmlsdGVyIG9yZGVyICVkIGlzIGdyZWF0ZXIgdGhhbiBtYXhp bXVtICVkLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRucy0+b3JkZXJbd11bZmls dF0sIHRuc19tYXhfb3JkZXIpOwpAQCAtMTU5OCw2ICsxNjMxLDcgQEAgc3RhdGljIHZvaWQgZGVj b2RlX21pZF9zaWRlX3N0ZXJlbyhDaGFubmVsRWxlbWVudCAqY3BlLCBHZXRCaXRDb250ZXh0ICpn YiwKIHsKICAgICBpbnQgaWR4OwogICAgIGludCBtYXhfaWR4ID0gY3BlLT5jaFswXS5pY3MubnVt X3dpbmRvd19ncm91cHMgKiBjcGUtPmNoWzBdLmljcy5tYXhfc2ZiOworICAgIGNwZS0+bWF4X3Nm Yl9zdGUgPSBjcGUtPmNoWzBdLmljcy5tYXhfc2ZiOwogICAgIGlmIChtc19wcmVzZW50ID09IDEp IHsKICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBtYXhfaWR4OyBpZHgrKykKICAgICAgICAg ICAgIGNwZS0+bXNfbWFza1tpZHhdID0gZ2V0X2JpdHMxKGdiKTsKQEAgLTIxODIsNDIgKzIyMTYs MTkgQEAgc3RhdGljIGludCBhYWNfZGVjb2RlX2VyX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgQVZGcmFtZSAqZnJhbWUsCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWFjX2Rl Y29kZV9mcmFtZV9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkZyYW1lICpmcmFtZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpnb3RfZnJhbWVfcHRyLCBHZXRCaXRD b250ZXh0ICpnYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZQYWNr ZXQgKmF2cGt0KQorc3RhdGljIGludCBkZWNvZGVfZnJhbWVfZ2EoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LCBBQUNEZWNDb250ZXh0ICphYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJp dENvbnRleHQgKmdiLCBpbnQgKmdvdF9mcmFtZV9wdHIpCiB7Ci0gICAgQUFDRGVjQ29udGV4dCAq YWMgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIENoYW5uZWxFbGVtZW50ICpjaGUgPSBOVUxMLCAq Y2hlX3ByZXYgPSBOVUxMOworICAgIGludCBlcnI7CisgICAgaW50IGlzX2Rtb25vOworICAgIGlu dCBlbGVtX2lkOwogICAgIGVudW0gUmF3RGF0YUJsb2NrVHlwZSBlbGVtX3R5cGUsIGNoZV9wcmV2 X3R5cGUgPSBUWVBFX0VORDsKLSAgICBpbnQgZXJyLCBlbGVtX2lkOwotICAgIGludCBzYW1wbGVz ID0gMCwgbXVsdGlwbGllciwgYXVkaW9fZm91bmQgPSAwLCBwY2VfZm91bmQgPSAwOwotICAgIGlu dCBpc19kbW9ubywgc2NlX2NvdW50ID0gMDsKLSAgICBpbnQgcGF5bG9hZF9hbGlnbm1lbnQ7CiAg ICAgdWludDhfdCBjaGVfcHJlc2VuY2VbNF1bTUFYX0VMRU1fSURdID0ge3swfX07CisgICAgQ2hh bm5lbEVsZW1lbnQgKmNoZSA9IE5VTEwsICpjaGVfcHJldiA9IE5VTEw7CisgICAgaW50IHNhbXBs ZXMgPSAwLCBtdWx0aXBsaWVyLCBhdWRpb19mb3VuZCA9IDAsIHBjZV9mb3VuZCA9IDAsIHNjZV9j b3VudCA9IDA7CisgICAgQVZGcmFtZSAqZnJhbWUgPSBhYy0+ZnJhbWU7CiAKLSAgICBhYy0+ZnJh bWUgPSBmcmFtZTsKLQotICAgIGlmIChzaG93X2JpdHMoZ2IsIDEyKSA9PSAweGZmZikgewotICAg ICAgICBpZiAoKGVyciA9IHBhcnNlX2FkdHNfZnJhbWVfaGVhZGVyKGFjLCBnYikpIDwgMCkgewot ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBkZWNvZGluZyBB QUMgZnJhbWUgaGVhZGVyLlxuIik7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKGFjLT5vY1sxXS5tNGFjLnNhbXBsaW5nX2luZGV4ID4gMTIpIHsKLSAgICAg ICAgICAgIGF2X2xvZyhhYy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgImludmFsaWQgc2FtcGxpbmcg cmF0ZSBpbmRleCAlZFxuIiwgYWMtPm9jWzFdLm00YWMuc2FtcGxpbmdfaW5kZXgpOwotICAgICAg ICAgICAgZXJyID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsK LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgoZXJyID0gZnJhbWVfY29uZmlndXJlX2VsZW1l bnRzKGF2Y3R4KSkgPCAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICAvLyBUaGUgQVZfUFJP RklMRV9BQUNfKiBkZWZpbmVzIGFyZSBhbGwgb2JqZWN0X3R5cGUgLSAxCi0gICAgLy8gVGhpcyBt YXkgbGVhZCB0byBhbiB1bmRlZmluZWQgcHJvZmlsZSBiZWluZyBzaWduYWxlZAotICAgIGFjLT5h dmN0eC0+cHJvZmlsZSA9IGFjLT5vY1sxXS5tNGFjLm9iamVjdF90eXBlIC0gMTsKLQotICAgIHBh eWxvYWRfYWxpZ25tZW50ID0gZ2V0X2JpdHNfY291bnQoZ2IpOwotICAgIGFjLT50YWdzX21hcHBl ZCA9IDA7CisgICAgaW50IHBheWxvYWRfYWxpZ25tZW50ID0gZ2V0X2JpdHNfY291bnQoZ2IpOwog ICAgIC8vIHBhcnNlCiAgICAgd2hpbGUgKChlbGVtX3R5cGUgPSBnZXRfYml0cyhnYiwgMykpICE9 IFRZUEVfRU5EKSB7CiAgICAgICAgIGVsZW1faWQgPSBnZXRfYml0cyhnYiwgNCk7CkBAIC0yMjI1 LDI4ICsyMjM2LDIzIEBAIHN0YXRpYyBpbnQgYWFjX2RlY29kZV9mcmFtZV9pbnQoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LCBBVkZyYW1lICpmcmFtZSwKICAgICAgICAgaWYgKGF2Y3R4LT5kZWJ1ZyAm IEZGX0RFQlVHX1NUQVJUQ09ERSkKICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiRWxlbSB0eXBlOiV4IGlkOiV4XG4iLCBlbGVtX3R5cGUsIGVsZW1faWQpOwogCi0gICAg ICAgIGlmICghYXZjdHgtPmNoX2xheW91dC5uYl9jaGFubmVscyAmJiBlbGVtX3R5cGUgIT0gVFlQ RV9QQ0UpIHsKLSAgICAgICAgICAgIGVyciA9IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAg ICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFhdmN0eC0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzICYmIGVsZW1fdHlwZSAhPSBUWVBFX1BDRSkKKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwogCiAgICAgICAgIGlmIChlbGVtX3R5cGUgPCBUWVBFX0RT RSkgewogICAgICAgICAgICAgaWYgKGNoZV9wcmVzZW5jZVtlbGVtX3R5cGVdW2VsZW1faWRdKSB7 CiAgICAgICAgICAgICAgICAgaW50IGVycm9yID0gY2hlX3ByZXNlbmNlW2VsZW1fdHlwZV1bZWxl bV9pZF0gPiAxOwogICAgICAgICAgICAgICAgIGF2X2xvZyhhYy0+YXZjdHgsIGVycm9yID8gQVZf TE9HX0VSUk9SIDogQVZfTE9HX0RFQlVHLCAiY2hhbm5lbCBlbGVtZW50ICVkLiVkIGR1cGxpY2F0 ZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbV90eXBlLCBlbGVtX2lkKTsKLSAgICAg ICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gQVZFUlJP Ul9JTlZBTElEREFUQTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg Y2hlX3ByZXNlbmNlW2VsZW1fdHlwZV1bZWxlbV9pZF0rKzsKIAogICAgICAgICAgICAgaWYgKCEo Y2hlPWZmX2FhY19nZXRfY2hlKGFjLCBlbGVtX3R5cGUsIGVsZW1faWQpKSkgewogICAgICAgICAg ICAgICAgIGF2X2xvZyhhYy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgImNoYW5uZWwgZWxlbWVudCAl ZC4lZCBpcyBub3QgYWxsb2NhdGVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBlbGVtX3R5 cGUsIGVsZW1faWQpOwotICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1JfSU5WQUxJRERBVEE7 Ci0gICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2FtcGxlcyA9IGFj LT5vY1sxXS5tNGFjLmZyYW1lX2xlbmd0aF9zaG9ydCA/IDk2MCA6IDEwMjQ7CiAgICAgICAgICAg ICBjaGUtPnByZXNlbnQgPSAxOwpAQCAtMjI4MywxMCArMjI4OSw4IEBAIHN0YXRpYyBpbnQgYWFj X2RlY29kZV9mcmFtZV9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkZyYW1lICpmcmFtZSwK ICAgICAgICAgICAgIGludCB0YWdzOwogCiAgICAgICAgICAgICBpbnQgcHVzaGVkID0gcHVzaF9v dXRwdXRfY29uZmlndXJhdGlvbihhYyk7Ci0gICAgICAgICAgICBpZiAocGNlX2ZvdW5kICYmICFw dXNoZWQpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAg ICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChw Y2VfZm91bmQgJiYgIXB1c2hlZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKIAogICAgICAgICAgICAgdGFncyA9IGRlY29kZV9wY2UoYXZjdHgsICZhYy0+b2Nb MV0ubTRhYywgbGF5b3V0X21hcCwgZ2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YXlsb2FkX2FsaWdubWVudCk7CkBAIC0yMzEyLDggKzIzMTYsNyBAQCBzdGF0aWMgaW50IGFhY19k ZWNvZGVfZnJhbWVfaW50KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZSAqZnJhbWUsCiAg ICAgICAgICAgICAgICAgZWxlbV9pZCArPSBnZXRfYml0cyhnYiwgOCkgLSAxOwogICAgICAgICAg ICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgOCAqIGVsZW1faWQpIHsKICAgICAgICAgICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJUWVBFX0ZJTDogIm92ZXJyZWFkX2Vy cik7Ci0gICAgICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAg ICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnIgPSAwOwog ICAgICAgICAgICAgd2hpbGUgKGVsZW1faWQgPiAwKSB7CkBAIC0yMzM3LDE5ICsyMzQwLDE2IEBA IHN0YXRpYyBpbnQgYWFjX2RlY29kZV9mcmFtZV9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBB VkZyYW1lICpmcmFtZSwKICAgICAgICAgfQogCiAgICAgICAgIGlmIChlcnIpCi0gICAgICAgICAg ICBnb3RvIGZhaWw7CisgICAgICAgICAgICByZXR1cm4gZXJyOwogCiAgICAgICAgIGlmIChnZXRf Yml0c19sZWZ0KGdiKSA8IDMpIHsKICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCBvdmVycmVhZF9lcnIpOwotICAgICAgICAgICAgZXJyID0gQVZFUlJPUl9JTlZBTElEREFU QTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFhdmN0eC0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzKSB7Ci0gICAgICAgICpnb3RfZnJhbWVfcHRyID0gMDsKKyAgICBpZiAoIWF2 Y3R4LT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAog ICAgIG11bHRpcGxpZXIgPSAoYWMtPm9jWzFdLm00YWMuc2JyID09IDEpID8gYWMtPm9jWzFdLm00 YWMuZXh0X3NhbXBsZV9yYXRlID4gYWMtPm9jWzFdLm00YWMuc2FtcGxlX3JhdGUgOiAwOwogICAg IHNhbXBsZXMgPDw9IG11bHRpcGxpZXI7CkBAIC0yMzY0LDE2ICsyMzY0LDE3IEBAIHN0YXRpYyBp bnQgYWFjX2RlY29kZV9mcmFtZV9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkZyYW1lICpm cmFtZSwKIAogICAgIGlmICghYWMtPmZyYW1lLT5kYXRhWzBdICYmIHNhbXBsZXMpIHsKICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJubyBmcmFtZSBkYXRhIGZvdW5kXG4iKTsK LSAgICAgICAgZXJyID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgZ290byBmYWlsOwor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICB9CiAKICAgICBpZiAoc2Ft cGxlcykgewogICAgICAgICBhYy0+ZnJhbWUtPm5iX3NhbXBsZXMgPSBzYW1wbGVzOwogICAgICAg ICBhYy0+ZnJhbWUtPnNhbXBsZV9yYXRlID0gYXZjdHgtPnNhbXBsZV9yYXRlOwotICAgIH0gZWxz ZQorICAgICAgICAqZ290X2ZyYW1lX3B0ciA9IDE7CisgICAgfSBlbHNlIHsKICAgICAgICAgYXZf ZnJhbWVfdW5yZWYoYWMtPmZyYW1lKTsKLSAgICAqZ290X2ZyYW1lX3B0ciA9ICEhc2FtcGxlczsK KyAgICAgICAgKmdvdF9mcmFtZV9wdHIgPSAwOworICAgIH0KIAogICAgIC8qIGZvciBkdWFsLW1v bm8gYXVkaW8gKFNDRSArIFNDRSkgKi8KICAgICBpc19kbW9ubyA9IGFjLT5kbW9ub19tb2RlICYm IHNjZV9jb3VudCA9PSAyICYmCkBAIC0yMzg3LDYgKzIzODgsNTkgQEAgc3RhdGljIGludCBhYWNf ZGVjb2RlX2ZyYW1lX2ludChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUgKmZyYW1lLAog ICAgIH0KIAogICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFhY19kZWNvZGVfZnJhbWVf aW50KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCAqZ290X2ZyYW1lX3B0ciwgR2V0Qml0Q29udGV4dCAqZ2Is CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWUGFja2V0ICphdnBrdCkK K3sKKyAgICBpbnQgZXJyOworICAgIEFBQ0RlY0NvbnRleHQgKmFjID0gYXZjdHgtPnByaXZfZGF0 YTsKKworICAgIGFjLT5mcmFtZSA9IGZyYW1lOworICAgICpnb3RfZnJhbWVfcHRyID0gMDsKKwor ICAgIGlmIChzaG93X2JpdHMoZ2IsIDEyKSA9PSAweGZmZikgeworICAgICAgICBpZiAoKGVyciA9 IHBhcnNlX2FkdHNfZnJhbWVfaGVhZGVyKGFjLCBnYikpIDwgMCkgeworICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBkZWNvZGluZyBBQUMgZnJhbWUgaGVhZGVy LlxuIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFj LT5vY1sxXS5tNGFjLnNhbXBsaW5nX2luZGV4ID4gMTIpIHsKKyAgICAgICAgICAgIGF2X2xvZyhh Yy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgImludmFsaWQgc2FtcGxpbmcgcmF0ZSBpbmRleCAlZFxu IiwgYWMtPm9jWzFdLm00YWMuc2FtcGxpbmdfaW5kZXgpOworICAgICAgICAgICAgZXJyID0gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAg IH0KKworICAgIGlmICgoZXJyID0gZnJhbWVfY29uZmlndXJlX2VsZW1lbnRzKGF2Y3R4KSkgPCAw KQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvLyBUaGUgQVZfUFJPRklMRV9BQUNfKiBkZWZp bmVzIGFyZSBhbGwgb2JqZWN0X3R5cGUgLSAxCisgICAgLy8gVGhpcyBtYXkgbGVhZCB0byBhbiB1 bmRlZmluZWQgcHJvZmlsZSBiZWluZyBzaWduYWxlZAorICAgIGFjLT5hdmN0eC0+cHJvZmlsZSA9 IGFjLT5vY1sxXS5tNGFjLm9iamVjdF90eXBlIC0gMTsKKworICAgIGFjLT50YWdzX21hcHBlZCA9 IDA7CisKKyAgICBpZiAoKGFjLT5vY1sxXS5tNGFjLm9iamVjdF90eXBlID09IEFPVF9VU0FDKSB8 fAorICAgICAgICAoYWMtPm9jWzFdLm00YWMub2JqZWN0X3R5cGUgPT0gQU9UX1VTQUNfTk9TQlIp KSB7CisgICAgICAgIGlmIChhYy0+aXNfZml4ZWQpIHsKKyAgICAgICAgICAgIGF2cHJpdl9yZXBv cnRfbWlzc2luZ19mZWF0dXJlKGFjLT5hdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJBQUMgVVNBQyBmaXhlZC1wb2ludCBkZWNvZGluZyIpOworICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICB9CisjaWYgQ09ORklH X0FBQ19ERUNPREVSCisgICAgICAgIGVyciA9IGZmX2FhY191c2FjX2RlY29kZV9mcmFtZShhdmN0 eCwgYWMsIGdiLCBnb3RfZnJhbWVfcHRyKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAg ICAgICBnb3RvIGZhaWw7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBlcnIgPSBkZWNv ZGVfZnJhbWVfZ2EoYXZjdHgsIGFjLCBnYiwgZ290X2ZyYW1lX3B0cik7CisgICAgICAgIGlmIChl cnIgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJldHVybiBlcnI7 CisKIGZhaWw6CiAgICAgcG9wX291dHB1dF9jb25maWd1cmF0aW9uKGFjKTsKICAgICByZXR1cm4g ZXJyOwpAQCAtMjQxNCw3ICsyNDY4LDcgQEAgc3RhdGljIGludCBhYWNfZGVjb2RlX2ZyYW1lKEFW Q29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZSAqZnJhbWUsCiAgICAgaWYgKG5ld19leHRyYWRh dGEpIHsKICAgICAgICAgLyogZGlzY2FyZCBwcmV2aW91cyBjb25maWd1cmF0aW9uICovCiAgICAg ICAgIGFjLT5vY1sxXS5zdGF0dXMgPSBPQ19OT05FOwotICAgICAgICBlcnIgPSBkZWNvZGVfYXVk aW9fc3BlY2lmaWNfY29uZmlnKGFjLCBhYy0+YXZjdHgsICZhYy0+b2NbMV0ubTRhYywKKyAgICAg ICAgZXJyID0gZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhhYywgYWMtPmF2Y3R4LCAmYWMt Pm9jWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19l eHRyYWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3 X2V4dHJhZGF0YV9zaXplICogOExMLCAxKTsKICAgICAgICAgaWYgKGVyciA8IDApIHsKZGlmZiAt LWdpdCBhL2xpYmF2Y29kZWMvYWFjL2FhY2RlYy5oIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjLmgK aW5kZXggOGQxZWI3NDA2Ni4uZWUyMWE5NDAwNyAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9hYWMv YWFjZGVjLmgKKysrIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjLmgKQEAgLTQyLDYgKzQyLDggQEAK ICNpbmNsdWRlICJsaWJhdmNvZGVjL2F2Y29kZWMuaCIKICNpbmNsdWRlICJsaWJhdmNvZGVjL21w ZWc0YXVkaW8uaCIKIAorI2luY2x1ZGUgImFhY2RlY19hYy5oIgorCiB0eXBlZGVmIHN0cnVjdCBB QUNEZWNDb250ZXh0IEFBQ0RlY0NvbnRleHQ7CiAKIC8qKgpAQCAtNjksNiArNzEsMzIgQEAgZW51 bSBDb3VwbGluZ1BvaW50IHsKICAgICBBRlRFUl9JTURDVCA9IDMsCiB9OwogCitlbnVtIEFBQ1Vz YWNFbGVtIHsKKyAgICBJRF9VU0FDX1NDRSA9IDAsCisgICAgSURfVVNBQ19DUEUgPSAxLAorICAg IElEX1VTQUNfTEZFID0gMiwKKyAgICBJRF9VU0FDX0VYVCA9IDMsCit9OworCitlbnVtIEV4dGVu c2lvbkhlYWRlclR5cGUgeworICAgIElEX0NPTkZJR19FWFRfRklMTCA9IDAsCisgICAgSURfQ09O RklHX0VYVF9MT1VETkVTU19JTkZPID0gMiwKKyAgICBJRF9DT05GSUdfRVhUX1NUUkVBTV9JRCA9 IDcsCit9OworCitlbnVtIEFBQ1VzYWNFeHRlbnNpb24geworICAgIElEX0VYVF9FTEVfRklMTCwK KyAgICBJRF9FWFRfRUxFX01QRUdTLAorICAgIElEX0VYVF9FTEVfU0FPQywKKyAgICBJRF9FWFRf RUxFX0FVRElPUFJFUk9MTCwKKyAgICBJRF9FWFRfRUxFX1VOSV9EUkMsCit9OworCitlbnVtIEFB Q1VTQUNMb3VkbmVzc0V4dCB7CisgICAgVU5JRFJDTE9VREVYVF9URVJNID0gMHgwLAorICAgIFVO SURSQ0xPVURFWFRfRVEgPSAweDEsCit9OworCiAvLyBTdXBwb3NlZCB0byBiZSBlcXVhbCB0byBB QUNfUkVOQU1FKCkgaW4gY2FzZSBvZiBVU0VfRklYRUQuCiAjZGVmaW5lIFJFTkFNRV9GSVhFRChu YW1lKSBuYW1lICMjIF9maXhlZAogCkBAIC05Myw2ICsxMjEsNDAgQEAgdHlwZWRlZiBzdHJ1Y3Qg TG9uZ1Rlcm1QcmVkaWN0aW9uIHsKICAgICBpbnQ4X3QgdXNlZFtNQVhfTFRQX0xPTkdfU0ZCXTsK IH0gTG9uZ1Rlcm1QcmVkaWN0aW9uOwogCisvKiBQZXIgY2hhbm5lbCBjb3JlIG1vZGUgKi8KK3R5 cGVkZWYgc3RydWN0IEFBQ1VzYWNFbGVtRGF0YSB7CisgICAgdWludDhfdCBjb3JlX21vZGU7Cisg ICAgdWludDhfdCBzY2FsZV9mYWN0b3JfZ3JvdXBpbmc7CisKKyAgICAvKiBUaW1ld2FycGluZyBy YXRpbyAqLworI2RlZmluZSBOVU1fVFdfTk9ERVMgMTYKKyAgICB1aW50OF90IHR3X3JhdGlvW05V TV9UV19OT0RFU107CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1aW50OF90IGFjZWxwX2NvcmVf bW9kZSA6IDM7CisgICAgICAgIHVpbnQ4X3QgbHBkX21vZGUgOiA1OworCisgICAgICAgIHVpbnQ4 X3QgYnBmX2NvbnRyb2xfaW5mbyA6IDE7CisgICAgICAgIHVpbnQ4X3QgY29yZV9tb2RlX2xhc3Qg OiAxOworICAgICAgICB1aW50OF90IGZhY19kYXRhX3ByZXNlbnQgOiAxOworCisgICAgICAgIGlu dCBsYXN0X2xwZF9tb2RlOworICAgIH0gbGRwOworCisgICAgc3RydWN0IHsKKyAgICAgICAgdW5z aWduZWQgaW50IHNlZWQ7CisgICAgICAgIHVpbnQ4X3QgbGV2ZWwgOiAzOworICAgICAgICB1aW50 OF90IG9mZnNldCA6IDU7CisgICAgfSBub2lzZTsKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVp bnQ4X3QgZ2FpbjsKKyAgICAgICAgdWludDMyX3Qga3ZbOCAvKiAoMTAyNCAvIDE2KSAvIDggKi9d WzhdOworICAgIH0gZmFjOworCisgICAgQUFDQXJpdGhTdGF0ZSBhYzsKK30gQUFDVXNhY0VsZW1E YXRhOworCiAvKioKICAqIEluZGl2aWR1YWwgQ2hhbm5lbCBTdHJlYW0KICAqLwpAQCAtMTQ1LDEx ICsyMDcsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbENvdXBsaW5nIHsKICAqLwogdHlwZWRl ZiBzdHJ1Y3QgU2luZ2xlQ2hhbm5lbEVsZW1lbnQgewogICAgIEluZGl2aWR1YWxDaGFubmVsU3Ry ZWFtIGljczsKKyAgICBBQUNVc2FjRWxlbURhdGEgdWU7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88IFVTQUMgZWxlbWVudCBkYXRhCiAgICAgVGVtcG9yYWxOb2lzZVNoYXBpbmcgdG5z OwogICAgIGVudW0gQmFuZFR5cGUgYmFuZF90eXBlWzEyOF07ICAgICAgICAgICAgICAgICAgIC8v LzwgYmFuZCB0eXBlcwogICAgIGludCBzZm9bMTI4XTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgc2NhbGVmYWN0b3Igb2Zmc2V0cwogICAgIElOVEZMT0FUX1VOSU9OKHNm LCBbMTI4XSk7ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgc2NhbGVmYWN0b3JzICg4IHdpbmRv d3MgKiAxNiBzZmIgbWF4KQogICAgIElOVEZMT0FUX0FMSUdORURfVU5JT04oMzIsIGNvZWZmcywg ICAgMTAyNCk7ICAgIC8vLzwgY29lZmZpY2llbnRzIGZvciBJTURDVCwgbWF5YmUgcHJvY2Vzc2Vk CisgICAgSU5URkxPQVRfQUxJR05FRF9VTklPTigzMiwgcHJldl9jb2VmZnMsIDEwMjQpOyAgLy8v PCB1bnNjYWxlZCBwcmV2aW91cyBjb250ZW50cyBvZiBjb2VmZnNbXSBmb3IgVVNBQwogICAgIElO VEZMT0FUX0FMSUdORURfVU5JT04oMzIsIHNhdmVkLCAgICAgMTUzNik7ICAgIC8vLzwgb3Zlcmxh cAogICAgIElOVEZMT0FUX0FMSUdORURfVU5JT04oMzIsIHJldF9idWYsICAgMjA0OCk7ICAgIC8v LzwgUENNIG91dHB1dCBidWZmZXIKICAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDE2LCBsdHBf c3RhdGUsIDMwNzIpOyAgICAvLy88IHRpbWUgc2lnbmFsIGZvciBMVFAKQEAgLTE2MywyNSArMjI3 LDE0OCBAQCB0eXBlZGVmIHN0cnVjdCBTaW5nbGVDaGFubmVsRWxlbWVudCB7CiAgICAgfTsKIH0g U2luZ2xlQ2hhbm5lbEVsZW1lbnQ7CiAKK3R5cGVkZWYgc3RydWN0IEFBQ1VzYWNTdGVyZW8gewor ICAgIHVpbnQ4X3QgY29tbW9uX3dpbmRvdzsKKyAgICB1aW50OF90IGNvbW1vbl90dzsKKworICAg IHVpbnQ4X3QgbXNfbWFza19tb2RlOworICAgIHVpbnQ4X3QgY29uZmlnX2lkeDsKKworICAgIC8q IENvbXBsZXggcHJlZGljdGlvbiAqLworICAgIHVpbnQ4X3QgdXNlX3ByZXZfZnJhbWU7CisgICAg dWludDhfdCBwcmVkX2RpcjsKKyAgICB1aW50OF90IGNvbXBsZXhfY29lZjsKKworICAgIHVpbnQ4 X3QgcHJlZF91c2VkWzEyOF07CisKKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBhbHBo YV9xX3JlLCAxMDI0KTsKKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBhbHBoYV9xX2lt LCAxMDI0KTsKKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBwcmV2X2FscGhhX3FfcmUs IDEwMjQpOworICAgIElOVEZMT0FUX0FMSUdORURfVU5JT04oMzIsIHByZXZfYWxwaGFfcV9pbSwg MTAyNCk7CisKKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBkbWl4X3JlLCAxMDI0KTsK KyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBwcmV2X2RtaXhfcmUsIDEwMjQpOyAvKiBS ZWNhbGN1bGF0ZWQgb24gZXZlcnkgZnJhbWUgKi8KKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9O KDMyLCBkbWl4X2ltLCAxMDI0KTsgLyogRmluYWwgcHJlZGljdGlvbiBkYXRhICovCit9IEFBQ1Vz YWNTdGVyZW87CisKIC8qKgogICogY2hhbm5lbCBlbGVtZW50IC0gZ2VuZXJpYyBzdHJ1Y3QgZm9y IFNDRS9DUEUvQ0NFL0xGRQogICovCiB0eXBlZGVmIHN0cnVjdCBDaGFubmVsRWxlbWVudCB7CiAg ICAgaW50IHByZXNlbnQ7CiAgICAgLy8gQ1BFIHNwZWNpZmljCisgICAgdWludDhfdCBtYXhfc2Zi X3N0ZTsgICAgICAvLy88IChVU0FDKSBNYXhpbXVtIG9mIGJvdGggbWF4X3NmYiB2YWx1ZXMKICAg ICB1aW50OF90IG1zX21hc2tbMTI4XTsgICAgIC8vLzwgU2V0IGlmIG1pZC9zaWRlIHN0ZXJlbyBp cyB1c2VkIGZvciBlYWNoIHNjYWxlZmFjdG9yIHdpbmRvdyBiYW5kCiAgICAgLy8gc2hhcmVkCiAg ICAgU2luZ2xlQ2hhbm5lbEVsZW1lbnQgY2hbMl07CiAgICAgLy8gQ0NFIHNwZWNpZmljCiAgICAg Q2hhbm5lbENvdXBsaW5nIGNvdXA7CisgICAgLy8gVVNBQyBzdGVyZW8gY291cGxpbmcgZGF0YQor ICAgIEFBQ1VzYWNTdGVyZW8gdXM7CiB9IENoYW5uZWxFbGVtZW50OwogCit0eXBlZGVmIHN0cnVj dCBBQUNVU0FDTG91ZG5lc3NJbmZvIHsKKyAgICB1aW50OF90IGRyY19zZXRfaWQgOiA2OworICAg IHVpbnQ4X3QgZG93bm1peF9pZCA6IDc7CisgICAgc3RydWN0IHsKKyAgICAgICAgdWludDE2X3Qg bHZsIDogMTI7CisgICAgICAgIHVpbnQ4X3QgcHJlc2VudCA6IDE7CisgICAgfSBzYW1wbGVfcGVh azsKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVpbnQxNl90IGx2bCA6IDEyOworICAgICAgICB1 aW50OF90IG1lYXN1cmVtZW50IDogNDsKKyAgICAgICAgdWludDhfdCByZWxpYWJpbGl0eSA6IDI7 CisgICAgICAgIHVpbnQ4X3QgcHJlc2VudCA6IDE7CisgICAgfSB0cnVlX3BlYWs7CisKKyAgICB1 aW50OF90IG5iX21lYXN1cmVtZW50cyA6IDQ7CisgICAgc3RydWN0IHsKKyAgICAgICAgdWludDhf dCBtZXRob2RfZGVmIDogNDsKKyAgICAgICAgdWludDhfdCBtZXRob2RfdmFsOworICAgICAgICB1 aW50OF90IG1lYXN1cmVtZW50IDogNDsKKyAgICAgICAgdWludDhfdCByZWxpYWJpbGl0eSA6IDI7 CisgICAgfSBtZWFzdXJlbWVudHNbMTZdOworfSBBQUNVU0FDTG91ZG5lc3NJbmZvOworCit0eXBl ZGVmIHN0cnVjdCBBQUNVc2FjRWxlbUNvbmZpZyB7CisgICAgZW51bSBBQUNVc2FjRWxlbSB0eXBl OworCisgICAgdWludDhfdCB0d19tZGN0IDogMTsKKyAgICB1aW50OF90IG5vaXNlX2ZpbGwgOiAx OworCisgICAgdWludDhfdCBzdGVyZW9fY29uZmlnX2luZGV4OworCisgICAgc3RydWN0IHsKKyAg ICAgICAgaW50IHJhdGlvOworCisgICAgICAgIHVpbnQ4X3QgaGFybW9uaWNfc2JyIDogMTsgLyog aGFybW9uaWNTQlIgKi8KKyAgICAgICAgdWludDhfdCBic19pbnRlcnRlcyA6IDE7IC8qIGJzX2lu dGVyVGVzICovCisgICAgICAgIHVpbnQ4X3QgYnNfcHZjIDogMTsgLyogYnNfcHZjICovCisKKyAg ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgc3RhcnRfZnJlcTsgLyogZGZsdF9z dGFydF9mcmVxICovCisgICAgICAgICAgICB1aW50OF90IHN0b3BfZnJlcTsgLyogZGZsdF9zdG9w X2ZyZXEgKi8KKworICAgICAgICAgICAgdWludDhfdCBmcmVxX3NjYWxlOyAvKiBkZmx0X2ZyZXFf c2NhbGUgKi8KKyAgICAgICAgICAgIHVpbnQ4X3QgYWx0ZXJfc2NhbGUgOiAxOyAvKiBkZmx0X2Fs dGVyX3NjYWxlICovCisgICAgICAgICAgICB1aW50OF90IG5vaXNlX3NjYWxlOyAvKiBkZmx0X25v aXNlX3NjYWxlICovCisKKyAgICAgICAgICAgIHVpbnQ4X3QgbGltaXRlcl9iYW5kczsgLyogZGZs dF9saW1pdGVyX2JhbmRzICovCisgICAgICAgICAgICB1aW50OF90IGxpbWl0ZXJfZ2FpbnM7IC8q IGRmbHRfbGltaXRlcl9nYWlucyAqLworICAgICAgICAgICAgdWludDhfdCBpbnRlcnBvbF9mcmVx IDogMTsgLyogZGZsdF9pbnRlcnBvbF9mcmVxICovCisgICAgICAgICAgICB1aW50OF90IHNtb290 aGluZ19tb2RlIDogMTsgLyogZGZsdF9zbW9vdGhpbmdfbW9kZSAqLworICAgICAgICB9IGRmbHQ7 CisgICAgfSBzYnI7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1aW50OF90IGZyZXFfcmVzOyAv KiBic0ZyZXFSZXMgKi8KKyAgICAgICAgdWludDhfdCBmaXhlZF9nYWluOyAvKiBic0ZpeGVkR2Fp bkRNWCAqLworICAgICAgICB1aW50OF90IHRlbXBfc2hhcGVfY29uZmlnOyAvKiBic1RlbXBTaGFw ZUNvbmZpZyAqLworICAgICAgICB1aW50OF90IGRlY29ycl9jb25maWc7IC8qIGJzRGVjb3JyQ29u ZmlnICovCisgICAgICAgIHVpbnQ4X3QgaGlnaF9yYXRlX21vZGUgOiAxOyAvKiBic0hpZ2hSYXRl TW9kZSAqLworICAgICAgICB1aW50OF90IHBoYXNlX2NvZGluZyA6IDE7IC8qIGJzUGhhc2VDb2Rp bmcgKi8KKworICAgICAgICB1aW50OF90IG90dHNfYmFuZHNfcGhhc2U7IC8qIGJzT3R0QmFuZHNQ aGFzZSAqLworICAgICAgICB1aW50OF90IHJlc2lkdWFsX2NvZGluZzsgLyogYnNSZXNpZHVhbENv ZGluZyAqLworICAgICAgICB1aW50OF90IHJlc2lkdWFsX2JhbmRzOyAvKiBic1Jlc2lkdWFsQmFu ZHMgKi8KKyAgICAgICAgdWludDhfdCBwc2V1ZG9fbHIgOiAxOyAvKiBic1BzZXVkb0xyICovCisg ICAgICAgIHVpbnQ4X3QgZW52X3F1YW50X21vZGUgOiAxOyAvKiBic0VudlF1YW50TW9kZSAqLwor ICAgIH0gbXBzOworCisgICAgc3RydWN0IHsKKyAgICAgICAgZW51bSBBQUNVc2FjRXh0ZW5zaW9u IHR5cGU7CisgICAgICAgIHVpbnQ4X3QgcGF5bG9hZF9mcmFnOworICAgICAgICB1aW50MzJfdCBk ZWZhdWx0X2xlbjsKKyAgICAgICAgdWludDMyX3QgcGxfZGF0YV9vZmZzZXQ7CisgICAgICAgIHVp bnQ4X3QgKnBsX2RhdGE7CisgICAgfSBleHQ7Cit9IEFBQ1VzYWNFbGVtQ29uZmlnOworCit0eXBl ZGVmIHN0cnVjdCBBQUNVU0FDQ29uZmlnIHsKKyAgICB1aW50OF90IGNvcmVfc2JyX2ZyYW1lX2xl bl9pZHg7IC8qIGNvcmVTYnJGcmFtZUxlbmd0aEluZGV4ICovCisgICAgdWludDhfdCByYXRlX2lk eDsKKyAgICB1aW50MTZfdCBjb3JlX2ZyYW1lX2xlbjsKKyAgICB1aW50MTZfdCBzdHJlYW1faWRl bnRpZmllcjsKKworICAgIEFBQ1VzYWNFbGVtQ29uZmlnIGVsZW1zWzY0XTsKKyAgICBpbnQgbmJf ZWxlbXM7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1aW50OF90IG5iX2FsYnVtOworICAgICAg ICBBQUNVU0FDTG91ZG5lc3NJbmZvIGFsYnVtX2luZm9bNjRdOworICAgICAgICB1aW50OF90IG5i X2luZm87CisgICAgICAgIEFBQ1VTQUNMb3VkbmVzc0luZm8gaW5mb1s2NF07CisgICAgfSBsb3Vk bmVzczsKK30gQUFDVVNBQ0NvbmZpZzsKKwogdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0Q29uZmlndXJh dGlvbiB7CiAgICAgTVBFRzRBdWRpb0NvbmZpZyBtNGFjOwogICAgIHVpbnQ4X3QgbGF5b3V0X21h cFtNQVhfRUxFTV9JRCo0XVszXTsKICAgICBpbnQgbGF5b3V0X21hcF90YWdzOwogICAgIEFWQ2hh bm5lbExheW91dCBjaF9sYXlvdXQ7CiAgICAgZW51bSBPQ1N0YXR1cyBzdGF0dXM7CisgICAgQUFD VVNBQ0NvbmZpZyB1c2FjOwogfSBPdXRwdXRDb25maWd1cmF0aW9uOwogCiAvKioKZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5jIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjX2Fj LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uN2U1MDc3Y2QxOQotLS0g L2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5jCkBAIC0wLDAgKzEsMjA4 IEBACisvKgorICogQUFDIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzCisgKiBDb3B5cmlnaHQg KGMpIDIwMjQgTHlubmUKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgor ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKwor I2luY2x1ZGUgImxpYmF2Y29kZWMvYWFjdGFiLmgiCisjaW5jbHVkZSAiYWFjZGVjX2FjLmgiCisK K3VpbnQzMl90IGZmX2FhY19hY19tYXBfcHJvY2VzcyhBQUNBcml0aFN0YXRlICpzdGF0ZSwgaW50 IHJlc2V0LCBpbnQgTikKK3sKKyAgICBmbG9hdCByYXRpbzsKKyAgICBpZiAocmVzZXQpIHsKKyAg ICAgICAgbWVtc2V0KHN0YXRlLT5sYXN0LCAwLCBzaXplb2Yoc3RhdGUtPmxhc3QpKTsKKyAgICAg ICAgc3RhdGUtPmxhc3RfbGVuID0gTjsKKyAgICB9IGVsc2UgaWYgKHN0YXRlLT5sYXN0X2xlbiAh PSBOKSB7CisgICAgICAgIGludCBpOworICAgICAgICB1aW50OF90IGxhc3RbNTEyIC8qIDIwNDgg LyA0ICovXTsKKyAgICAgICAgbWVtY3B5KGxhc3QsIHN0YXRlLT5sYXN0LCBzaXplb2YobGFzdCkp OworCisgICAgICAgIHJhdGlvID0gc3RhdGUtPmxhc3RfbGVuIC8gKGZsb2F0KU47CisgICAgICAg IGZvciAoaSA9IDA7IGkgPCBOLzI7IGkrKykgeworICAgICAgICAgICAgaW50IGsgPSAoaW50KShp ICogcmF0aW8pOworICAgICAgICAgICAgc3RhdGUtPmxhc3RbaV0gPSBsYXN0W2tdOworICAgICAg ICB9CisKKyAgICAgICAgZm9yICg7IGkgPCBGRl9BUlJBWV9FTEVNUyhzdGF0ZS0+bGFzdCk7IGkr KykKKyAgICAgICAgICAgIHN0YXRlLT5sYXN0W2ldID0gMDsKKworICAgICAgICBzdGF0ZS0+bGFz dF9sZW4gPSBOOworICAgIH0KKworICAgIHN0YXRlLT5jdXJbM10gPSAwOworICAgIHN0YXRlLT5j dXJbMl0gPSAwOworICAgIHN0YXRlLT5jdXJbMV0gPSAwOworICAgIHN0YXRlLT5jdXJbMF0gPSAx OworCisgICAgc3RhdGUtPnN0YXRlX3ByZSA9IHN0YXRlLT5sYXN0WzBdIDw8IDEyOworICAgIHJl dHVybiBzdGF0ZS0+bGFzdFswXSA8PCAxMjsKK30KKwordWludDMyX3QgZmZfYWFjX2FjX2dldF9j b250ZXh0KEFBQ0FyaXRoU3RhdGUgKnN0YXRlLCB1aW50MzJfdCBjLCBpbnQgaSwgaW50IE4pCit7 CisgICAgYyA9IHN0YXRlLT5zdGF0ZV9wcmUgPj4gODsKKyAgICBjID0gYyArIChzdGF0ZS0+bGFz dFtpICsgMV0gPDwgOCk7CisgICAgYyA9IChjIDw8IDQpOworICAgIGMgKz0gc3RhdGUtPmN1clsx XTsKKworICAgIHN0YXRlLT5zdGF0ZV9wcmUgPSBjOworCisgICAgaWYgKGkgPiAzICYmCisgICAg ICAgICgoc3RhdGUtPmN1clszXSArIHN0YXRlLT5jdXJbMl0gKyBzdGF0ZS0+Y3VyWzFdKSA8IDUp KQorICAgICAgICByZXR1cm4gYyArIDB4MTAwMDA7CisKKyAgICByZXR1cm4gYzsKK30KKwordWlu dDMyX3QgZmZfYWFjX2FjX2dldF9wayh1aW50MzJfdCBjKQoreworICAgIGludCBpX21pbiA9IC0x OworICAgIGludCBpLCBqOworICAgIGludCBpX21heCA9IEZGX0FSUkFZX0VMRU1TKGZmX2FhY19h Y19sb29rdXBfbSkgLSAxOworICAgIHdoaWxlICgoaV9tYXggLSBpX21pbikgPiAxKSB7CisgICAg ICAgIGkgPSBpX21pbiArICgoaV9tYXggLSBpX21pbikgLyAyKTsKKyAgICAgICAgaiA9IGZmX2Fh Y19hY19oYXNoX21baV07CisgICAgICAgIGlmIChjIDwgKGogPj4gOCkpCisgICAgICAgICAgICBp X21heCA9IGk7CisgICAgICAgIGVsc2UgaWYgKGMgPiAoaiA+PiA4KSkKKyAgICAgICAgICAgIGlf bWluID0gaTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIChqICYgMHhGRik7Cisg ICAgfQorICAgIHJldHVybiBmZl9hYWNfYWNfbG9va3VwX21baV9tYXhdOworfQorCit2b2lkIGZm X2FhY19hY191cGRhdGVfY29udGV4dChBQUNBcml0aFN0YXRlICpzdGF0ZSwgaW50IGlkeCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGEsIHVpbnQxNl90IGIpCit7Cisg ICAgc3RhdGUtPmN1clswXSA9IGEgKyBiICsgMTsKKyAgICBpZiAoc3RhdGUtPmN1clswXSA+IDB4 RikKKyAgICAgICAgc3RhdGUtPmN1clswXSA9IDB4RjsKKworICAgIHN0YXRlLT5jdXJbM10gPSBz dGF0ZS0+Y3VyWzJdOworICAgIHN0YXRlLT5jdXJbMl0gPSBzdGF0ZS0+Y3VyWzFdOworICAgIHN0 YXRlLT5jdXJbMV0gPSBzdGF0ZS0+Y3VyWzBdOworCisgICAgc3RhdGUtPmxhc3RbaWR4XSA9IHN0 YXRlLT5jdXJbMF07Cit9CisKKy8qIEluaXRpYWxpemUgQUMgKi8KK3ZvaWQgZmZfYWFjX2FjX2lu aXQoQUFDQXJpdGggKmFjLCBHZXRCaXRDb250ZXh0ICpnYikKK3sKKyAgICBhYy0+bG93ID0gMDsK KyAgICBhYy0+aGlnaCA9IFVJTlQxNl9NQVg7CisgICAgYWMtPnZhbCA9IGdldF9iaXRzKGdiLCAx Nik7Cit9CisKK3VpbnQxNl90IGZmX2FhY19hY19kZWNvZGUoQUFDQXJpdGggKmFjLCBHZXRCaXRD b250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKmNk ZiwgdWludDE2X3QgY2RmX2xlbikKK3sKKyAgICBpbnQgdmFsID0gYWMtPnZhbDsKKyAgICBpbnQg bG93ID0gYWMtPmxvdzsKKyAgICBpbnQgaGlnaCA9IGFjLT5oaWdoOworCisgICAgaW50IHN5bTsK KyAgICBpbnQgcm5nID0gaGlnaCAtIGxvdyArIDE7CisgICAgaW50IGMgPSAoKCgoaW50KSh2YWwg LSBsb3cgKyAxKSkgPDwgMTQpIC0gKChpbnQpMSkpOworCisgICAgY29uc3QgdWludDE2X3QgKnAg PSBjZGYgLSAxOworCisgICAgLyogT25lIGZvciBlYWNoIHBvc3NpYmxlIENERiBsZW5ndGggaW4g dGhlIHNwZWMgKi8KKyAgICBzd2l0Y2ggKGNkZl9sZW4pIHsKKyAgICBjYXNlIDI6CisgICAgICAg IGlmICgocFsxXSAqIHJuZykgPiBjKQorICAgICAgICAgICAgcCArPSAxOworICAgICAgICBicmVh azsKKyAgICBjYXNlIDQ6CisgICAgICAgIGlmICgocFsyXSAqIHJuZykgPiBjKQorICAgICAgICAg ICAgcCArPSAyOworICAgICAgICBpZiAoKHBbMV0gKiBybmcpID4gYykKKyAgICAgICAgICAgIHAg Kz0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxNzoKKyAgICAgICAgLyogRmlyc3QgY2hl Y2sgaWYgdGhlIGN1cnJlbnQgcHJvYmFiaWxpdHkgaXMgZXZlbiBtZXQgYXQgYWxsICovCisgICAg ICAgIGlmICgocFsxXSAqIHJuZykgPD0gYykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBw ICs9IDE7CisgICAgICAgIGZvciAoaW50IGkgPSA4OyBpID49IDE7IGkgPj49IDEpCisgICAgICAg ICAgICBpZiAoKHBbaV0gKiBybmcpID4gYykKKyAgICAgICAgICAgICAgICBwICs9IGk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgMjc6CisgICAgICAgIGlmICgocFsxNl0gKiBybmcpID4gYykK KyAgICAgICAgICAgIHAgKz0gMTY7CisgICAgICAgIGlmICgocFs4XSAqIHJuZykgPiBjKQorICAg ICAgICAgICAgcCArPSA4OworICAgICAgICBpZiAocCAhPSAoY2RmIC0gMSArIDI0KSkKKyAgICAg ICAgICAgIGlmICgocFs0XSAqIHJuZykgPiBjKQorICAgICAgICAgICAgICAgIHAgKz0gNDsKKyAg ICAgICAgaWYgKChwWzJdICogcm5nKSA+IGMpCisgICAgICAgICAgICBwICs9IDI7CisKKyAgICAg ICAgaWYgKHAgIT0gKGNkZiAtIDEgKyAyNCArIDIpKQorICAgICAgICAgICAgaWYgKChwWzFdICog cm5nKSA+IGMpCisgICAgICAgICAgICAgICAgcCArPSAxOworICAgICAgICBicmVhazsKKyAgICBk ZWZhdWx0OgorICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKyAgICAgICAg YXZfYXNzZXJ0MigwKTsKKyAgICB9CisKKyAgICBzeW0gPSAoaW50KSgocHRyZGlmZl90KShwIC0g Y2RmKSkgKyAxOworICAgIGlmIChzeW0pCisgICAgICAgIGhpZ2ggPSBsb3cgKyAoKHJuZyAqIGNk ZltzeW0gLSAxXSkgPj4gMTQpIC0gMTsKKyAgICBsb3cgKz0gKHJuZyAqIGNkZltzeW1dKSA+PiAx NDsKKworICAgIC8qIFRoaXMgbG9vcCBjb3VsZCBiZSBkb25lIGZhc3RlciAqLworICAgIHdoaWxl ICgxKSB7CisgICAgICAgIGlmIChoaWdoIDwgMzI3NjgpIHsKKyAgICAgICAgICAgIDsKKyAgICAg ICAgfSBlbHNlIGlmIChsb3cgPj0gMzI3NjgpIHsKKyAgICAgICAgICAgIHZhbCAtPSAzMjc2ODsK KyAgICAgICAgICAgIGxvdyAtPSAzMjc2ODsKKyAgICAgICAgICAgIGhpZ2ggLT0gMzI3Njg7Cisg ICAgICAgIH0gZWxzZSBpZiAobG93ID49IDE2Mzg0ICYmIGhpZ2ggPCA0OTE1MikgeworICAgICAg ICAgICAgdmFsIC09IDE2Mzg0OworICAgICAgICAgICAgbG93IC09IDE2Mzg0OworICAgICAgICAg ICAgaGlnaCAtPSAxNjM4NDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgICAgIGxvdyArPSBsb3c7CisgICAgICAgIGhpZ2ggKz0gaGlnaCArIDE7 CisgICAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCBnZXRfYml0czEoZ2IpOworICAgIH07CisKKyAg ICBhYy0+bG93ID0gbG93OworICAgIGFjLT5oaWdoID0gaGlnaDsKKyAgICBhYy0+dmFsID0gdmFs OworCisgICAgcmV0dXJuIHN5bTsKK30KKwordm9pZCBmZl9hYWNfYWNfZmluaXNoKEFBQ0FyaXRo U3RhdGUgKnN0YXRlLCBpbnQgb2Zmc2V0LCBpbnQgTikKK3sKKyAgICBpbnQgaTsKKworICAgIGZv ciAoaSA9IG9mZnNldDsgaSA8IE4vMjsgaSsrKQorICAgICAgICBzdGF0ZS0+bGFzdFtpXSA9IDE7 CisKKyAgICBmb3IgKDsgaSA8IEZGX0FSUkFZX0VMRU1TKHN0YXRlLT5sYXN0KTsgaSsrKQorICAg ICAgICBzdGF0ZS0+bGFzdFtpXSA9IDA7Cit9CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9h YWNkZWNfYWMuaCBiL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBiOThjMGYwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJh dmNvZGVjL2FhYy9hYWNkZWNfYWMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQUFDIGRlZmlu aXRpb25zIGFuZCBzdHJ1Y3R1cmVzCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgTHlubmUKKyAqCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBBVkNPREVDX0FBQ19B QUNERUNfQUNfSAorI2RlZmluZSBBVkNPREVDX0FBQ19BQUNERUNfQUNfSAorCisjaW5jbHVkZSAi bGliYXZjb2RlYy9nZXRfYml0cy5oIgorCit0eXBlZGVmIHN0cnVjdCBBQUNBcml0aFN0YXRlIHsK KyAgICB1aW50OF90IGxhc3RbNTEyIC8qIDIwNDggLyA0ICovXTsKKyAgICBpbnQgbGFzdF9sZW47 CisgICAgdWludDhfdCBjdXJbNF07CisgICAgdWludDE2X3Qgc3RhdGVfcHJlOworfSBBQUNBcml0 aFN0YXRlOworCit0eXBlZGVmIHN0cnVjdCBBQUNBcml0aCB7CisgICAgdWludDE2X3QgbG93Owor ICAgIHVpbnQxNl90IGhpZ2g7CisgICAgdWludDE2X3QgdmFsOworfSBBQUNBcml0aDsKKworI2Rl ZmluZSBGRl9BQUNfQUNfRVNDQVBFIDE2CisKK3VpbnQzMl90IGZmX2FhY19hY19tYXBfcHJvY2Vz cyhBQUNBcml0aFN0YXRlICpzdGF0ZSwgaW50IHJlc2V0LCBpbnQgbGVuKTsKK3VpbnQzMl90IGZm X2FhY19hY19nZXRfY29udGV4dChBQUNBcml0aFN0YXRlICpzdGF0ZSwgdWludDMyX3Qgb2xkX2Ms IGludCBpZHgsIGludCBsZW4pOwordWludDMyX3QgZmZfYWFjX2FjX2dldF9wayh1aW50MzJfdCBj KTsKKwordm9pZCBmZl9hYWNfYWNfdXBkYXRlX2NvbnRleHQoQUFDQXJpdGhTdGF0ZSAqc3RhdGUs IGludCBpZHgsIHVpbnQxNl90IGEsIHVpbnQxNl90IGIpOwordm9pZCBmZl9hYWNfYWNfaW5pdChB QUNBcml0aCAqYWMsIEdldEJpdENvbnRleHQgKmdiKTsKKwordWludDE2X3QgZmZfYWFjX2FjX2Rl Y29kZShBQUNBcml0aCAqYWMsIEdldEJpdENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50MTZfdCAqY2RmLCB1aW50MTZfdCBjZGZfbGVuKTsKKwordm9pZCBm Zl9hYWNfYWNfZmluaXNoKEFBQ0FyaXRoU3RhdGUgKnN0YXRlLCBpbnQgb2Zmc2V0LCBpbnQgbmIp OworCisjZW5kaWYgLyogQVZDT0RFQ19BQUNERUNfQUNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy9hYWMvYWFjZGVjX2RzcF90ZW1wbGF0ZS5jIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjX2Rz cF90ZW1wbGF0ZS5jCmluZGV4IDU5YTY5ZDg4ZjMuLjhkMzFhZjIyZjggMTAwNjQ0Ci0tLSBhL2xp YmF2Y29kZWMvYWFjL2FhY2RlY19kc3BfdGVtcGxhdGUuYworKysgYi9saWJhdmNvZGVjL2FhYy9h YWNkZWNfZHNwX3RlbXBsYXRlLmMKQEAgLTg4LDggKzg4LDggQEAgc3RhdGljIHZvaWQgQUFDX1JF TkFNRShhcHBseV9taWRfc2lkZV9zdGVyZW8pKEFBQ0RlY0NvbnRleHQgKmFjLCBDaGFubmVsRWxl bWVudAogICAgIElOVEZMT0FUICpjaDEgPSBjcGUtPmNoWzFdLkFBQ19SRU5BTUUoY29lZmZzKTsK ICAgICBjb25zdCB1aW50MTZfdCAqb2Zmc2V0cyA9IGljcy0+c3diX29mZnNldDsKICAgICBmb3Ig KGludCBnID0gMDsgZyA8IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykgewotICAgICAgICBm b3IgKGludCBzZmIgPSAwOyBzZmIgPCBpY3MtPm1heF9zZmI7IHNmYisrKSB7Ci0gICAgICAgICAg ICBjb25zdCBpbnQgaWR4ID0gZyppY3MtPm1heF9zZmIgKyBzZmI7CisgICAgICAgIGZvciAoaW50 IHNmYiA9IDA7IHNmYiA8IGNwZS0+bWF4X3NmYl9zdGU7IHNmYisrKSB7CisgICAgICAgICAgICBj b25zdCBpbnQgaWR4ID0gZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiOwogICAgICAgICAgICAgaWYg KGNwZS0+bXNfbWFza1tpZHhdICYmCiAgICAgICAgICAgICAgICAgY3BlLT5jaFswXS5iYW5kX3R5 cGVbaWR4XSA8IE5PSVNFX0JUICYmCiAgICAgICAgICAgICAgICAgY3BlLT5jaFsxXS5iYW5kX3R5 cGVbaWR4XSA8IE5PSVNFX0JUKSB7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9hYWNkZWNf bGF0bS5oIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjX2xhdG0uaAppbmRleCBlNDBhMmZlMWE3Li4w NDdjMTFlMGZiIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2FhYy9hYWNkZWNfbGF0bS5oCisrKyBi L2xpYmF2Y29kZWMvYWFjL2FhY2RlY19sYXRtLmgKQEAgLTU2LDcgKzU2LDggQEAgc3RhdGljIGlu dCBsYXRtX2RlY29kZV9hdWRpb19zcGVjaWZpY19jb25maWcoc3RydWN0IExBVE1Db250ZXh0ICps YXRtY3R4LAogewogICAgIEFBQ0RlY0NvbnRleHQgKmFjICAgICA9ICZsYXRtY3R4LT5hYWNfY3R4 OwogICAgIEFWQ29kZWNDb250ZXh0ICphdmN0eCA9IGFjLT5hdmN0eDsKLSAgICBNUEVHNEF1ZGlv Q29uZmlnIG00YWMgPSB7IDAgfTsKKyAgICBPdXRwdXRDb25maWd1cmF0aW9uIG9jID0geyAwIH07 CisgICAgTVBFRzRBdWRpb0NvbmZpZyAqbTRhYyA9ICZvYy5tNGFjOwogICAgIEdldEJpdENvbnRl eHQgZ2JjOwogICAgIGludCBjb25maWdfc3RhcnRfYml0ICA9IGdldF9iaXRzX2NvdW50KGdiKTsK ICAgICBpbnQgc3luY19leHRlbnNpb24gICAgPSAwOwpAQCAtNzYsNyArNzcsNyBAQCBzdGF0aWMg aW50IGxhdG1fZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhzdHJ1Y3QgTEFUTUNvbnRleHQg KmxhdG1jdHgsCiAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDw9IDApCiAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwogCi0gICAgYml0c19jb25zdW1lZCA9IGRlY29kZV9hdWRp b19zcGVjaWZpY19jb25maWdfZ2IoTlVMTCwgYXZjdHgsICZtNGFjLAorICAgIGJpdHNfY29uc3Vt ZWQgPSBkZWNvZGVfYXVkaW9fc3BlY2lmaWNfY29uZmlnX2diKE5VTEwsIGF2Y3R4LCAmb2MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdiYywg Y29uZmlnX3N0YXJ0X2JpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzeW5jX2V4dGVuc2lvbik7CiAKQEAgLTg4LDExICs4OSwxMiBAQCBzdGF0 aWMgaW50IGxhdG1fZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhzdHJ1Y3QgTEFUTUNvbnRl eHQgKmxhdG1jdHgsCiAgICAgICBhc2NsZW4gPSBiaXRzX2NvbnN1bWVkOwogCiAgICAgaWYgKCFs YXRtY3R4LT5pbml0aWFsaXplZCB8fAotICAgICAgICBhYy0+b2NbMV0ubTRhYy5zYW1wbGVfcmF0 ZSAhPSBtNGFjLnNhbXBsZV9yYXRlIHx8Ci0gICAgICAgIGFjLT5vY1sxXS5tNGFjLmNoYW5fY29u ZmlnICE9IG00YWMuY2hhbl9jb25maWcpIHsKKyAgICAgICAgYWMtPm9jWzFdLm00YWMuc2FtcGxl X3JhdGUgIT0gbTRhYy0+c2FtcGxlX3JhdGUgfHwKKyAgICAgICAgYWMtPm9jWzFdLm00YWMuY2hh bl9jb25maWcgIT0gbTRhYy0+Y2hhbl9jb25maWcpIHsKIAogICAgICAgICBpZiAobGF0bWN0eC0+ aW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0lORk8sICJh dWRpbyBjb25maWcgY2hhbmdlZCAoc2FtcGxlX3JhdGU9JWQsIGNoYW5fY29uZmlnPSVkKVxuIiwg bTRhYy5zYW1wbGVfcmF0ZSwgbTRhYy5jaGFuX2NvbmZpZyk7CisgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19JTkZPLCAiYXVkaW8gY29uZmlnIGNoYW5nZWQgKHNhbXBsZV9yYXRlPSVk LCBjaGFuX2NvbmZpZz0lZClcbiIsCisgICAgICAgICAgICAgICAgICAgbTRhYy0+c2FtcGxlX3Jh dGUsIG00YWMtPmNoYW5fY29uZmlnKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiaW5pdGlhbGl6aW5nIGxhdG1jdHhcbiIpOwogICAg ICAgICB9CkBAIC0yODAsNyArMjgyLDcgQEAgc3RhdGljIGludCBsYXRtX2RlY29kZV9mcmFtZShB VkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUgKm91dCwKICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgIHB1c2hfb3V0cHV0X2NvbmZpZ3VyYXRpb24oJmxhdG1jdHgtPmFhY19jdHgpOwog ICAgICAgICAgICAgaWYgKChlcnIgPSBkZWNvZGVfYXVkaW9fc3BlY2lmaWNfY29uZmlnKAotICAg ICAgICAgICAgICAgICAgICAmbGF0bWN0eC0+YWFjX2N0eCwgYXZjdHgsICZsYXRtY3R4LT5hYWNf Y3R4Lm9jWzFdLm00YWMsCisgICAgICAgICAgICAgICAgICAgICZsYXRtY3R4LT5hYWNfY3R4LCBh dmN0eCwgJmxhdG1jdHgtPmFhY19jdHgub2NbMV0sCiAgICAgICAgICAgICAgICAgICAgIGF2Y3R4 LT5leHRyYWRhdGEsIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSo4TEwsIDEpKSA8IDApIHsKICAgICAg ICAgICAgICAgICBwb3Bfb3V0cHV0X2NvbmZpZ3VyYXRpb24oJmxhdG1jdHgtPmFhY19jdHgpOwog ICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9h YWNkZWNfbHBkLmMgYi9saWJhdmNvZGVjL2FhYy9hYWNkZWNfbHBkLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzk2ZWRkMmFiNQotLS0gL2Rldi9udWxsCisrKyBiL2xp YmF2Y29kZWMvYWFjL2FhY2RlY19scGQuYwpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHly aWdodCAoYykgMjAyNCBMeW5uZSA8ZGV2QGx5bm5lLmVlPgorICoKKyAqIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAiYWFjZGVjX2xwZC5oIgorI2luY2x1ZGUgImFh Y2RlY191c2FjLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy91bmFyeS5oIgorCitjb25zdCB1aW50 OF90IGZmX2FhY19scGRfbW9kZV90YWJbMzJdWzRdID0geworICAgIHsgMCwgMCwgMCwgMCB9LAor ICAgIHsgMSwgMCwgMCwgMCB9LAorICAgIHsgMCwgMSwgMCwgMCB9LAorICAgIHsgMSwgMSwgMCwg MCB9LAorICAgIHsgMCwgMCwgMSwgMCB9LAorICAgIHsgMSwgMCwgMSwgMCB9LAorICAgIHsgMCwg MSwgMSwgMCB9LAorICAgIHsgMSwgMSwgMSwgMCB9LAorICAgIHsgMCwgMCwgMCwgMSB9LAorICAg IHsgMSwgMCwgMCwgMSB9LAorICAgIHsgMCwgMSwgMCwgMSB9LAorICAgIHsgMSwgMSwgMCwgMSB9 LAorICAgIHsgMCwgMCwgMSwgMSB9LAorICAgIHsgMSwgMCwgMSwgMSB9LAorICAgIHsgMCwgMSwg MSwgMSB9LAorICAgIHsgMSwgMSwgMSwgMSB9LAorICAgIHsgMiwgMiwgMCwgMCB9LAorICAgIHsg MiwgMiwgMSwgMCB9LAorICAgIHsgMiwgMiwgMCwgMSB9LAorICAgIHsgMiwgMiwgMSwgMSB9LAor ICAgIHsgMCwgMCwgMiwgMiB9LAorICAgIHsgMSwgMCwgMiwgMiB9LAorICAgIHsgMCwgMSwgMiwg MiB9LAorICAgIHsgMSwgMSwgMiwgMiB9LAorICAgIHsgMiwgMiwgMiwgMiB9LAorICAgIHsgMywg MywgMywgMyB9LAorICAgIC8qIExhcmdlciB2YWx1ZXMgYXJlIHJlc2VydmVkLCBidXQgcGVybWl0 IHRoZW0gZm9yIHJlc2lsaWVuY2UgKi8KKyAgICB7IDAsIDAsIDAsIDAgfSwKKyAgICB7IDAsIDAs IDAsIDAgfSwKKyAgICB7IDAsIDAsIDAsIDAgfSwKKyAgICB7IDAsIDAsIDAsIDAgfSwKKyAgICB7 IDAsIDAsIDAsIDAgfSwKKyAgICB7IDAsIDAsIDAsIDAgfSwKK307CisKK3N0YXRpYyB2b2lkIHBh cnNlX3FuKEdldEJpdENvbnRleHQgKmdiLCBpbnQgKnFuLCBpbnQgbmtfbW9kZSwgaW50IG5vX3Fu KQoreworICAgIGlmIChua19tb2RlID09IDEpIHsKKyAgICAgICAgZm9yIChpbnQgayA9IDA7IGsg PCBub19xbjsgaysrKSB7CisgICAgICAgICAgICBxbltrXSA9IGdldF91bmFyeShnYiwgMCwgSU5U MzJfTUFYKTsgLy8gVE9ETzogZmluZCBwcm9wZXIgcmFuZ2VzCisgICAgICAgICAgICBpZiAocW5b a10pCisgICAgICAgICAgICAgICAgcW5ba10rKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47 CisgICAgfQorCisgICAgZm9yIChpbnQgayA9IDA7IGsgPCBub19xbjsgaysrKQorICAgICAgICBx bltrXSA9IGdldF9iaXRzKGdiLCAyKSArIDI7CisKKyAgICBpZiAobmtfbW9kZSA9PSAyKSB7Cisg ICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbm9fcW47IGsrKykgeworICAgICAgICAgICAgaWYg KHFuW2tdID4gNCkgeworICAgICAgICAgICAgICAgIHFuW2tdID0gZ2V0X3VuYXJ5KGdiLCAwLCBJ TlQzMl9NQVgpOzsKKyAgICAgICAgICAgICAgICBpZiAocW5ba10pCisgICAgICAgICAgICAgICAg ICAgIHFuW2tdICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu OworICAgIH0KKworICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbm9fcW47IGsrKykgeworICAgICAg ICBpZiAocW5ba10gPiA0KSB7CisgICAgICAgICAgICBpbnQgcW5fZXh0ID0gZ2V0X3VuYXJ5KGdi LCAwLCBJTlQzMl9NQVgpOzsKKyAgICAgICAgICAgIHN3aXRjaCAocW5fZXh0KSB7CisgICAgICAg ICAgICBjYXNlIDA6IHFuW2tdID0gNTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6IHFuW2td ID0gNjsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IHFuW2tdID0gMDsgYnJlYWs7CisgICAg ICAgICAgICBkZWZhdWx0OiBxbltrXSA9IHFuX2V4dCArIDQ7IGJyZWFrOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50IHBhcnNlX2NvZGVib29rX2lkeChH ZXRCaXRDb250ZXh0ICpnYiwgdWludDMyX3QgKmt2LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IG5rX21vZGUsIGludCBub19xbikKK3sKKyAgICBpbnQgaWR4LCBuLCBuazsKKwor ICAgIGludCBxblsyXTsKKyAgICBwYXJzZV9xbihnYiwgcW4sIG5rX21vZGUsIG5vX3FuKTsKKwor ICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbm9fcW47IGsrKykgeworICAgICAgICBpZiAocW5ba10g PiA0KSB7CisgICAgICAgICAgICBuayA9IChxbltrXSAtIDMpIC8gMjsKKyAgICAgICAgICAgIG4g PSBxbltrXSAtIG5rKjI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuayA9IDA7Cisg ICAgICAgICAgICBuID0gcW5ba107CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZHggPSBnZXRf Yml0cyhnYiwgNCpuKTsKKworICAgIGlmIChuayA+IDApCisgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgODsgaSsrKQorICAgICAgICAgICAga3ZbaV0gPSBnZXRfYml0cyhnYiwgbmspOworCisg ICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9hYWNfcGFyc2VfZmFjX2RhdGEoQUFDVXNhY0VsZW1E YXRhICpjZSwgR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB1c2VfZ2FpbiwgaW50IGxlbikKK3sKKyAgICBpbnQgcmV0OworICAgIGlmICh1c2VfZ2FpbikK KyAgICAgICAgY2UtPmZhYy5nYWluID0gZ2V0X2JpdHMoZ2IsIDcpOworCisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBsZW4vODsgaSsrKSB7CisgICAgICAgIHJldCA9IHBhcnNlX2NvZGVib29rX2lk eChnYiwgY2UtPmZhYy5rdltpXSwgMSwgMSk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAg ICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2Fh Y19sZHBfcGFyc2VfY2hhbm5lbF9zdHJlYW0oQUFDRGVjQ29udGV4dCAqYWMsIEFBQ1VTQUNDb25m aWcgKnVzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQUNVc2FjRWxl bURhdGEgKmNlLCBHZXRCaXRDb250ZXh0ICpnYikKK3sKKyAgICBpbnQgazsKKyAgICBjb25zdCB1 aW50OF90ICptb2Q7CisgICAgaW50IGZpcnN0X2xkcF9mbGFnOworICAgIGludCBmaXJzdF90Y3hf ZmxhZzsKKworICAgIGNlLT5sZHAuYWNlbHBfY29yZV9tb2RlID0gZ2V0X2JpdHMoZ2IsIDMpOwor ICAgIGNlLT5sZHAubHBkX21vZGUgPSBnZXRfYml0cyhnYiwgNSk7CisKKyAgICBjZS0+bGRwLmJw Zl9jb250cm9sX2luZm8gPSBnZXRfYml0czEoZ2IpOworICAgIGNlLT5sZHAuY29yZV9tb2RlX2xh c3QgPSBnZXRfYml0czEoZ2IpOworICAgIGNlLT5sZHAuZmFjX2RhdGFfcHJlc2VudCA9IGdldF9i aXRzMShnYik7CisKKyAgICBtb2QgPSBmZl9hYWNfbHBkX21vZGVfdGFiW2NlLT5sZHAubHBkX21v ZGVdOworCisgICAgZmlyc3RfbGRwX2ZsYWcgPSAhY2UtPmxkcC5jb3JlX21vZGVfbGFzdDsKKyAg ICBmaXJzdF90Y3hfZmxhZyA9IDE7CisgICAgaWYgKGZpcnN0X2xkcF9mbGFnKQorICAgICAgICBj ZS0+bGRwLmxhc3RfbHBkX21vZGUgPSAtMTsgLyogbGFzdF9sZHBfbW9kZSBpcyBhICoqU1RBVEVG VUwqKiB2YWx1ZSAqLworCisgICAgayA9IDA7CisgICAgd2hpbGUgKGsgPCAwKSB7CisgICAgICAg IGlmICghaykgeworICAgICAgICAgICAgaWYgKGNlLT5sZHAuY29yZV9tb2RlX2xhc3QgJiYgY2Ut PmxkcC5mYWNfZGF0YV9wcmVzZW50KQorICAgICAgICAgICAgICAgIGZmX2FhY19wYXJzZV9mYWNf ZGF0YShjZSwgZ2IsIDAsIHVzYWMtPmNvcmVfZnJhbWVfbGVuLzgpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgaWYgKCFjZS0+bGRwLmxhc3RfbHBkX21vZGUgJiYgbW9kW2tdID4gMCB8 fAorICAgICAgICAgICAgICAgIGNlLT5sZHAubGFzdF9scGRfbW9kZSAmJiAhbW9kW2tdKQorICAg ICAgICAgICAgICAgIGZmX2FhY19wYXJzZV9mYWNfZGF0YShjZSwgZ2IsIDAsIHVzYWMtPmNvcmVf ZnJhbWVfbGVuLzgpOworICAgICAgICB9CisgICAgICAgIGlmICghbW9kW2tdKSB7CisvLyAgICAg ICAgICAgIHBhcnNlX2FjZWxwX2NvZGluZygpOworICAgICAgICAgICAgY2UtPmxkcC5sYXN0X2xw ZF9tb2RlID0gMDsKKyAgICAgICAgICAgIGsrKzsKKyAgICAgICAgfSBlbHNlIHsKKy8vICAgICAg ICAgICAgcGFyc2VfdGN4X2NvZGluZygpOworICAgICAgICAgICAgY2UtPmxkcC5sYXN0X2xwZF9t b2RlID0gbW9kW2tdOworICAgICAgICAgICAgayArPSAoMSA8PCAobW9kW2tdIC0gMSkpOworICAg ICAgICAgICAgZmlyc3RfdGN4X2ZsYWcgPSAwOworICAgICAgICB9CisgICAgfQorCisvLyAgICBw YXJzZV9scGNfZGF0YShmaXJzdF9scGRfZmxhZyk7CisKKyAgICBpZiAoIWNlLT5sZHAuY29yZV9t b2RlX2xhc3QgJiYgY2UtPmxkcC5mYWNfZGF0YV9wcmVzZW50KSB7CisgICAgICAgIHVpbnQxNl90 IGxlbl84ID0gdXNhYy0+Y29yZV9mcmFtZV9sZW4gLyA4OworICAgICAgICB1aW50MTZfdCBsZW5f MTYgPSB1c2FjLT5jb3JlX2ZyYW1lX2xlbiAvIDE2OworICAgICAgICB1aW50MTZfdCBmYWNfbGVu ID0gZ2V0X2JpdHMxKGdiKSAvKiBzaG9ydF9mYWNfZmxhZyAqLyA/IGxlbl84IDogbGVuXzE2Owor ICAgICAgICBpbnQgcmV0ID0gZmZfYWFjX3BhcnNlX2ZhY19kYXRhKGNlLCBnYiwgMSwgZmFjX2xl bik7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19s cGQuaCBiL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19scGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi45MjRmZjc1ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2Rl Yy9hYWMvYWFjZGVjX2xwZC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMjQgTHlubmUgPGRldkBseW5uZS5lZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCisgKi8KKworI2lmbmRlZiBBVkNPREVDX0FBQ19BQUNERUNfTFBEX0gKKyNkZWZpbmUgQVZD T0RFQ19BQUNfQUFDREVDX0xQRF9ICisKKyNpbmNsdWRlICJhYWNkZWMuaCIKKyNpbmNsdWRlICJs aWJhdmNvZGVjL2dldF9iaXRzLmgiCisKK2ludCBmZl9hYWNfcGFyc2VfZmFjX2RhdGEoQUFDVXNh Y0VsZW1EYXRhICpjZSwgR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB1c2VfZ2FpbiwgaW50IGxlbik7CisKK2ludCBmZl9hYWNfbGRwX3BhcnNlX2NoYW5u ZWxfc3RyZWFtKEFBQ0RlY0NvbnRleHQgKmFjLCBBQUNVU0FDQ29uZmlnICp1c2FjLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUFDVXNhY0VsZW1EYXRhICpjZSwgR2V0Qml0 Q29udGV4dCAqZ2IpOworCisjZW5kaWYgLyogQVZDT0RFQ19BQUNfQUFDREVDX0xQRF9IICovCmRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9hYWNkZWNfdXNhYy5jIGIvbGliYXZjb2RlYy9hYWMv YWFjZGVjX3VzYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5jM2M5 MTM3YTJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjX3VzYWMuYwpA QCAtMCwwICsxLDE2MDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgTHlubmUgPGRldkBs eW5uZS5lZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1 ZGUgImFhY2RlY191c2FjLmgiCisjaW5jbHVkZSAiYWFjZGVjX3RhYi5oIgorI2luY2x1ZGUgImFh Y2RlY19scGQuaCIKKyNpbmNsdWRlICJhYWNkZWNfYWMuaCIKKworI2luY2x1ZGUgImxpYmF2Y29k ZWMvYWFjdGFiLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgorI2luY2x1ZGUgImxpYmF2 Y29kZWMvbXBlZzRhdWRpby5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvdW5hcnkuaCIKKworLyog TnVtYmVyIG9mIHNjYWxlZmFjdG9yIGJhbmRzIHBlciBjb21wbGV4IHByZWRpY3Rpb24gYmFuZCwg ZXF1YWwgdG8gMi4gKi8KKyNkZWZpbmUgU0ZCX1BFUl9QUkVEX0JBTkQgMgorCitzdGF0aWMgaW5s aW5lIHVpbnQzMl90IGdldF9lc2NhcGVkX3ZhbHVlKEdldEJpdENvbnRleHQgKmdiLCBpbnQgbmIx LCBpbnQgbmIyLCBpbnQgbmIzKQoreworICAgIHVpbnQzMl90IHZhbCA9IGdldF9iaXRzKGdiLCBu YjEpLCB2YWwyOworICAgIGlmICh2YWwgPCAoKDEgPDwgbmIxKSAtIDEpKQorICAgICAgICByZXR1 cm4gdmFsOworCisgICAgdmFsICs9IHZhbDIgPSBnZXRfYml0cyhnYiwgbmIyKTsKKyAgICBpZiAo dmFsMiA9PSAoKDEgPDwgbmIyKSAtIDEpKQorICAgICAgICB2YWwgKz0gZ2V0X2JpdHMoZ2IsIG5i Myk7CisKKyAgICByZXR1cm4gdmFsOworfQorCisvKiBJU08vSUVDIDIzMDAzLTMsIFRhYmxlIDc0 IOKAlCBic091dHB1dENoYW5uZWxQb3MgKi8KK3N0YXRpYyBjb25zdCBlbnVtIEFWQ2hhbm5lbCB1 c2FjX2NoX3Bvc190b19hdls2NF0gPSB7CisgICAgWzBdID0gQVZfQ0hBTl9GUk9OVF9MRUZULAor ICAgIFsxXSA9IEFWX0NIQU5fRlJPTlRfUklHSFQsCisgICAgWzJdID0gQVZfQ0hBTl9GUk9OVF9D RU5URVIsCisgICAgWzNdID0gQVZfQ0hBTl9MT1dfRlJFUVVFTkNZLAorICAgIFs0XSA9IEFWX0NI QU5fU0lERV9MRUZULCAvLyArMTEwIGRlZ3JlZXMsIExzfExTfGtBdWRpb0NoYW5uZWxMYWJlbF9M ZWZ0U3Vycm91bmQKKyAgICBbNV0gPSBBVl9DSEFOX1NJREVfUklHSFQsIC8vIC0xMTAgZGVncmVl cywgUnN8UlN8a0F1ZGlvQ2hhbm5lbExhYmVsX1JpZ2h0U3Vycm91bmQKKyAgICBbNl0gPSBBVl9D SEFOX0ZST05UX0xFRlRfT0ZfQ0VOVEVSLAorICAgIFs3XSA9IEFWX0NIQU5fRlJPTlRfUklHSFRf T0ZfQ0VOVEVSLAorICAgIFs4XSA9IEFWX0NIQU5fQkFDS19MRUZULCAvLyArMTM1IGRlZ3JlZXMs IExzcnxCTHxrQXVkaW9DaGFubmVsTGFiZWxfUmVhclN1cnJvdW5kTGVmdAorICAgIFs5XSA9IEFW X0NIQU5fQkFDS19SSUdIVCwgLy8gLTEzNSBkZWdyZWVzLCBSc3J8QlJ8a0F1ZGlvQ2hhbm5lbExh YmVsX1JlYXJTdXJyb3VuZFJpZ2h0CisgICAgWzEwXSA9IEFWX0NIQU5fQkFDS19DRU5URVIsCisg ICAgWzExXSA9IEFWX0NIQU5fU1VSUk9VTkRfRElSRUNUX0xFRlQsCisgICAgWzEyXSA9IEFWX0NI QU5fU1VSUk9VTkRfRElSRUNUX1JJR0hULAorICAgIFsxM10gPSBBVl9DSEFOX1NJREVfU1VSUk9V TkRfTEVGVCwgLy8gKzkwIGRlZ3JlZXMsIExzc3xTTHxrQXVkaW9DaGFubmVsTGFiZWxfTGVmdFNp ZGVTdXJyb3VuZAorICAgIFsxNF0gPSBBVl9DSEFOX1NJREVfU1VSUk9VTkRfUklHSFQsIC8vIC05 MCBkZWdyZWVzLCBSc3N8U1J8a0F1ZGlvQ2hhbm5lbExhYmVsX1JpZ2h0U2lkZVN1cnJvdW5kCisg ICAgWzE1XSA9IEFWX0NIQU5fV0lERV9MRUZULCAvLyArNjAgZGVncmVlcywgTHd8Rkx3fGtBdWRp b0NoYW5uZWxMYWJlbF9MZWZ0V2lkZQorICAgIFsxNl0gPSBBVl9DSEFOX1dJREVfUklHSFQsIC8v IC02MCBkZWdyZWVzLCBSd3xGUnd8a0F1ZGlvQ2hhbm5lbExhYmVsX1JpZ2h0V2lkZQorICAgIFsx N10gPSBBVl9DSEFOX1RPUF9GUk9OVF9MRUZULAorICAgIFsxOF0gPSBBVl9DSEFOX1RPUF9GUk9O VF9SSUdIVCwKKyAgICBbMTldID0gQVZfQ0hBTl9UT1BfRlJPTlRfQ0VOVEVSLAorICAgIFsyMF0g PSBBVl9DSEFOX1RPUF9CQUNLX0xFRlQsCisgICAgWzIxXSA9IEFWX0NIQU5fVE9QX0JBQ0tfUklH SFQsCisgICAgWzIyXSA9IEFWX0NIQU5fVE9QX0JBQ0tfQ0VOVEVSLAorICAgIFsyM10gPSBBVl9D SEFOX1RPUF9TSURFX0xFRlQsCisgICAgWzI0XSA9IEFWX0NIQU5fVE9QX1NJREVfUklHSFQsCisg ICAgWzI1XSA9IEFWX0NIQU5fVE9QX0NFTlRFUiwKKyAgICBbMjZdID0gQVZfQ0hBTl9MT1dfRlJF UVVFTkNZXzIsCisgICAgWzI3XSA9IEFWX0NIQU5fQk9UVE9NX0ZST05UX0xFRlQsCisgICAgWzI4 XSA9IEFWX0NIQU5fQk9UVE9NX0ZST05UX1JJR0hULAorICAgIFsyOV0gPSBBVl9DSEFOX0JPVFRP TV9GUk9OVF9DRU5URVIsCisgICAgWzMwXSA9IEFWX0NIQU5fVE9QX1NVUlJPVU5EX0xFRlQsIC8v LzwgKzExMCBkZWdyZWVzLCBMdnMsIFRwTFMKKyAgICBbMzFdID0gQVZfQ0hBTl9UT1BfU1VSUk9V TkRfUklHSFQsIC8vLzwgLTExMCBkZWdyZWVzLCBSdnMsIFRwUlMKK307CisKK3N0YXRpYyBpbnQg ZGVjb2RlX2xvdWRuZXNzX2luZm8oQUFDRGVjQ29udGV4dCAqYWMsIEFBQ1VTQUNMb3VkbmVzc0lu Zm8gKmluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJpdENvbnRleHQg KmdiKQoreworICAgIGluZm8tPmRyY19zZXRfaWQgPSBnZXRfYml0cyhnYiwgNik7CisgICAgaW5m by0+ZG93bm1peF9pZCA9IGdldF9iaXRzKGdiLCA3KTsKKworICAgIGlmICgoaW5mby0+c2FtcGxl X3BlYWsucHJlc2VudCA9IGdldF9iaXRzMShnYikpKSAvKiBzYW1wbGVQZWFrTGV2ZWxQcmVzZW50 ICovCisgICAgICAgIGluZm8tPnNhbXBsZV9wZWFrLmx2bCA9IGdldF9iaXRzKGdiLCAxMik7CisK KyAgICBpZiAoKGluZm8tPnRydWVfcGVhay5wcmVzZW50ID0gZ2V0X2JpdHMxKGdiKSkpIHsgLyog dHJ1ZVBlYWtMZXZlbFByZXNlbnQgKi8KKyAgICAgICAgaW5mby0+dHJ1ZV9wZWFrLmx2bCA9IGdl dF9iaXRzKGdiLCAxMik7CisgICAgICAgIGluZm8tPnRydWVfcGVhay5tZWFzdXJlbWVudCA9IGdl dF9iaXRzKGdiLCA0KTsKKyAgICAgICAgaW5mby0+dHJ1ZV9wZWFrLnJlbGlhYmlsaXR5ID0gZ2V0 X2JpdHMoZ2IsIDIpOworICAgIH0KKworICAgIGluZm8tPm5iX21lYXN1cmVtZW50cyA9IGdldF9i aXRzKGdiLCA0KTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGluZm8tPm5iX21lYXN1cmVtZW50 czsgaSsrKSB7CisgICAgICAgIGluZm8tPm1lYXN1cmVtZW50c1tpXS5tZXRob2RfZGVmID0gZ2V0 X2JpdHMoZ2IsIDQpOworICAgICAgICBpbmZvLT5tZWFzdXJlbWVudHNbaV0ubWV0aG9kX3ZhbCA9 IGdldF91bmFyeShnYiwgMCwgOCk7CisgICAgICAgIGluZm8tPm1lYXN1cmVtZW50c1tpXS5tZWFz dXJlbWVudCA9IGdldF9iaXRzKGdiLCA0KTsKKyAgICAgICAgaW5mby0+bWVhc3VyZW1lbnRzW2ld LnJlbGlhYmlsaXR5ID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgIH0KKworICAgIHJldHVybiAwOwor fQorCitzdGF0aWMgaW50IGRlY29kZV9sb3VkbmVzc19zZXQoQUFDRGVjQ29udGV4dCAqYWMsIEFB Q1VTQUNDb25maWcgKnVzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Qml0 Q29udGV4dCAqZ2IpCit7CisgICAgaW50IHJldDsKKworICAgIHVzYWMtPmxvdWRuZXNzLm5iX2Fs YnVtID0gZ2V0X2JpdHMoZ2IsIDYpOyAvKiBsb3VkbmVzc0luZm9BbGJ1bUNvdW50ICovCisgICAg dXNhYy0+bG91ZG5lc3MubmJfaW5mbyA9IGdldF9iaXRzKGdiLCA2KTsgLyogbG91ZG5lc3NJbmZv Q291bnQgKi8KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNhYy0+bG91ZG5lc3MubmJfYWxi dW07IGkrKykgeworICAgICAgICByZXQgPSBkZWNvZGVfbG91ZG5lc3NfaW5mbyhhYywgJnVzYWMt PmxvdWRuZXNzLmFsYnVtX2luZm9baV0sIGdiKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAg ICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNh Yy0+bG91ZG5lc3MubmJfaW5mbzsgaSsrKSB7CisgICAgICAgIHJldCA9IGRlY29kZV9sb3VkbmVz c19pbmZvKGFjLCAmdXNhYy0+bG91ZG5lc3MuaW5mb1tpXSwgZ2IpOworICAgICAgICBpZiAocmV0 IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorCisgICAgaWYgKGdldF9iaXRz MShnYikpIHsgLyogbG91ZG5lc3NJbmZvU2V0RXh0UHJlc2VudCAqLworICAgICAgICBlbnVtIEFB Q1VTQUNMb3VkbmVzc0V4dCB0eXBlOworICAgICAgICB3aGlsZSAoKHR5cGUgPSBnZXRfYml0cyhn YiwgNCkpICE9IFVOSURSQ0xPVURFWFRfVEVSTSkgeworICAgICAgICAgICAgdWludDhfdCBzaXpl X2JpdHMgPSBnZXRfYml0cyhnYiwgNCkgKyA0OworICAgICAgICAgICAgdWludDhfdCBiaXRfc2l6 ZSA9IGdldF9iaXRzKGdiLCBzaXplX2JpdHMpICsgMTsKKyAgICAgICAgICAgIHN3aXRjaCAodHlw ZSkgeworICAgICAgICAgICAgY2FzZSBVTklEUkNMT1VERVhUX0VROgorICAgICAgICAgICAgICAg IGF2cHJpdl9yZXBvcnRfbWlzc2luZ19mZWF0dXJlKGFjLT5hdmN0eCwgImxvdWRuZXNzSW5mb1Yx Iik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGJpdF9z aXplOyBpKyspCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0czEoZ2IpOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lk IGRlY29kZV91c2FjX3Nicl9kYXRhKEFBQ1VzYWNFbGVtQ29uZmlnICplLCBHZXRCaXRDb250ZXh0 ICpnYikKK3sKKyAgICB1aW50OF90IGhlYWRlcl9leHRyYTE7CisgICAgdWludDhfdCBoZWFkZXJf ZXh0cmEyOworCisgICAgZS0+c2JyLmhhcm1vbmljX3NiciA9IGdldF9iaXRzMShnYik7IC8qIGhh cm1vbmljU0JSICovCisgICAgZS0+c2JyLmJzX2ludGVydGVzID0gZ2V0X2JpdHMxKGdiKTsgLyog YnNfaW50ZXJUZXMgKi8KKyAgICBlLT5zYnIuYnNfcHZjID0gZ2V0X2JpdHMxKGdiKTsgLyogYnNf cHZjICovCisKKyAgICBlLT5zYnIuZGZsdC5zdGFydF9mcmVxID0gZ2V0X2JpdHMoZ2IsIDQpOyAv KiBkZmx0X3N0YXJ0X2ZyZXEgKi8KKyAgICBlLT5zYnIuZGZsdC5zdG9wX2ZyZXEgPSBnZXRfYml0 cyhnYiwgNCk7IC8qIGRmbHRfc3RvcF9mcmVxICovCisKKyAgICBoZWFkZXJfZXh0cmExID0gZ2V0 X2JpdHMxKGdiKTsgLyogZGZsdF9oZWFkZXJfZXh0cmExICovCisgICAgaGVhZGVyX2V4dHJhMiA9 IGdldF9iaXRzMShnYik7IC8qIGRmbHRfaGVhZGVyX2V4dHJhMiAqLworCisgICAgZS0+c2JyLmRm bHQuZnJlcV9zY2FsZSA9IDI7CisgICAgZS0+c2JyLmRmbHQuYWx0ZXJfc2NhbGUgPSAxOworICAg IGUtPnNici5kZmx0Lm5vaXNlX3NjYWxlID0gMjsKKyAgICBpZiAoaGVhZGVyX2V4dHJhMSkgewor ICAgICAgICBlLT5zYnIuZGZsdC5mcmVxX3NjYWxlID0gZ2V0X2JpdHMoZ2IsIDIpOyAvKiBkZmx0 X2ZyZXFfc2NhbGUgKi8KKyAgICAgICAgZS0+c2JyLmRmbHQuYWx0ZXJfc2NhbGUgPSBnZXRfYml0 czEoZ2IpOyAvKiBkZmx0X2FsdGVyX3NjYWxlICovCisgICAgICAgIGUtPnNici5kZmx0Lm5vaXNl X3NjYWxlID0gZ2V0X2JpdHMoZ2IsIDIpOyAvKiBkZmx0X25vaXNlX3NjYWxlICovCisgICAgfQor CisgICAgZS0+c2JyLmRmbHQubGltaXRlcl9iYW5kcyA9IDI7CisgICAgZS0+c2JyLmRmbHQubGlt aXRlcl9nYWlucyA9IDI7CisgICAgZS0+c2JyLmRmbHQuaW50ZXJwb2xfZnJlcSA9IDE7CisgICAg ZS0+c2JyLmRmbHQuc21vb3RoaW5nX21vZGUgPSAxOworICAgIGlmIChoZWFkZXJfZXh0cmEyKSB7 CisgICAgICAgIGUtPnNici5kZmx0LmxpbWl0ZXJfYmFuZHMgPSBnZXRfYml0cyhnYiwgMik7IC8q IGRmbHRfbGltaXRlcl9iYW5kcyAqLworICAgICAgICBlLT5zYnIuZGZsdC5saW1pdGVyX2dhaW5z ID0gZ2V0X2JpdHMoZ2IsIDIpOyAvKiBkZmx0X2xpbWl0ZXJfZ2FpbnMgKi8KKyAgICAgICAgZS0+ c2JyLmRmbHQuaW50ZXJwb2xfZnJlcSA9IGdldF9iaXRzMShnYik7IC8qIGRmbHRfaW50ZXJwb2xf ZnJlcSAqLworICAgICAgICBlLT5zYnIuZGZsdC5zbW9vdGhpbmdfbW9kZSA9IGdldF9iaXRzMShn Yik7IC8qIGRmbHRfc21vb3RoaW5nX21vZGUgKi8KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRl Y29kZV91c2FjX2VsZW1lbnRfY29yZShBQUNVc2FjRWxlbUNvbmZpZyAqZSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRCaXRDb250ZXh0ICpnYiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2JyX3JhdGlvKQoreworICAgIGUtPnR3X21k Y3QgPSBnZXRfYml0czEoZ2IpOyAvKiB0d19tZGN0ICovCisgICAgZS0+bm9pc2VfZmlsbCA9IGdl dF9iaXRzMShnYik7CisgICAgZS0+c2JyLnJhdGlvID0gc2JyX3JhdGlvOworfQorCitzdGF0aWMg dm9pZCBkZWNvZGVfdXNhY19lbGVtZW50X3BhaXIoQUFDVXNhY0VsZW1Db25maWcgKmUsIEdldEJp dENvbnRleHQgKmdiKQoreworICAgIGUtPnN0ZXJlb19jb25maWdfaW5kZXggPSAwOworICAgIGlm IChlLT5zYnIucmF0aW8pIHsKKyAgICAgICAgZGVjb2RlX3VzYWNfc2JyX2RhdGEoZSwgZ2IpOwor ICAgICAgICBlLT5zdGVyZW9fY29uZmlnX2luZGV4ID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgIH0K KyAgICBpZiAoZS0+c3RlcmVvX2NvbmZpZ19pbmRleCkgeworICAgICAgICBlLT5tcHMuZnJlcV9y ZXMgPSBnZXRfYml0cyhnYiwgMyk7IC8qIGJzRnJlcVJlcyAqLworICAgICAgICBlLT5tcHMuZml4 ZWRfZ2FpbiA9IGdldF9iaXRzKGdiLCAzKTsgLyogYnNGaXhlZEdhaW5ETVggKi8KKyAgICAgICAg ZS0+bXBzLnRlbXBfc2hhcGVfY29uZmlnID0gZ2V0X2JpdHMoZ2IsIDIpOyAvKiBic1RlbXBTaGFw ZUNvbmZpZyAqLworICAgICAgICBlLT5tcHMuZGVjb3JyX2NvbmZpZyA9IGdldF9iaXRzKGdiLCAy KTsgLyogYnNEZWNvcnJDb25maWcgKi8KKyAgICAgICAgZS0+bXBzLmhpZ2hfcmF0ZV9tb2RlID0g Z2V0X2JpdHMxKGdiKTsgLyogYnNIaWdoUmF0ZU1vZGUgKi8KKyAgICAgICAgZS0+bXBzLnBoYXNl X2NvZGluZyA9IGdldF9iaXRzMShnYik7IC8qIGJzUGhhc2VDb2RpbmcgKi8KKworICAgICAgICBp ZiAoZ2V0X2JpdHMxKGdiKSkgLyogYnNPdHRCYW5kc1BoYXNlUHJlc2VudCAqLworICAgICAgICAg ICAgZS0+bXBzLm90dHNfYmFuZHNfcGhhc2UgPSBnZXRfYml0cyhnYiwgNSk7IC8qIGJzT3R0QmFu ZHNQaGFzZSAqLworCisgICAgICAgIGUtPm1wcy5yZXNpZHVhbF9jb2RpbmcgPSBlLT5zdGVyZW9f Y29uZmlnX2luZGV4ID49IDI7IC8qIGJzUmVzaWR1YWxDb2RpbmcgKi8KKyAgICAgICAgaWYgKGUt Pm1wcy5yZXNpZHVhbF9jb2RpbmcpIHsKKyAgICAgICAgICAgIGUtPm1wcy5yZXNpZHVhbF9iYW5k cyA9IGdldF9iaXRzKGdiLCA1KTsgLyogYnNSZXNpZHVhbEJhbmRzICovCisgICAgICAgICAgICBl LT5tcHMucHNldWRvX2xyID0gZ2V0X2JpdHMxKGdiKTsgLyogYnNQc2V1ZG9MciAqLworICAgICAg ICB9CisgICAgICAgIGlmIChlLT5tcHMudGVtcF9zaGFwZV9jb25maWcgPT0gMikKKyAgICAgICAg ICAgIGUtPm1wcy5lbnZfcXVhbnRfbW9kZSA9IGdldF9iaXRzMShnYik7IC8qIGJzRW52UXVhbnRN b2RlICovCisgICAgfQorfQorCitzdGF0aWMgaW50IGRlY29kZV91c2FjX2V4dGVuc2lvbihBQUNE ZWNDb250ZXh0ICphYywgQUFDVXNhY0VsZW1Db25maWcgKmUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBHZXRCaXRDb250ZXh0ICpnYikKK3sKKyAgICBpbnQgbGVuID0gMCwgZXh0 X2NvbmZpZ19sZW47CisKKyAgICBlLT5leHQudHlwZSA9IGdldF9lc2NhcGVkX3ZhbHVlKGdiLCA0 LCA4LCAxNik7IC8qIHVzYWNFeHRFbGVtZW50VHlwZSAqLworICAgIGV4dF9jb25maWdfbGVuID0g Z2V0X2VzY2FwZWRfdmFsdWUoZ2IsIDQsIDgsIDE2KTsgLyogdXNhY0V4dEVsZW1lbnRDb25maWdM ZW5ndGggKi8KKworICAgIGlmIChnZXRfYml0czEoZ2IpKSAvKiB1c2FjRXh0RWxlbWVudERlZmF1 bHRMZW5ndGhQcmVzZW50ICovCisgICAgICAgIGxlbiA9IGdldF9lc2NhcGVkX3ZhbHVlKGdiLCA4 LCAxNiwgMCkgKyAxOworCisgICAgZS0+ZXh0LmRlZmF1bHRfbGVuID0gbGVuOworICAgIGUtPmV4 dC5wYXlsb2FkX2ZyYWcgPSBnZXRfYml0czEoZ2IpOyAvKiB1c2FjRXh0RWxlbWVudFBheWxvYWRG cmFnICovCisKKyAgICBhdl9sb2coYWMtPmF2Y3R4LCBBVl9MT0dfREVCVUcsICJFeHRlbnNpb24g cHJlc2VudDogdHlwZSAlaSwgbGVuICVpXG4iLAorICAgICAgICAgICBlLT5leHQudHlwZSwgZXh0 X2NvbmZpZ19sZW4pOworCisgICAgc3dpdGNoIChlLT5leHQudHlwZSkgeworI2lmIDAgLyogU2tp cCB1bnN1cHBvcnRlZCB2YWx1ZXMgKi8KKyAgICBjYXNlIElEX0VYVF9FTEVfTVBFR1M6CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgSURfRVhUX0VMRV9TQU9DOgorICAgICAgICBicmVhazsKKyAg ICBjYXNlIElEX0VYVF9FTEVfVU5JX0RSQzoKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBj YXNlIElEX0VYVF9FTEVfRklMTDoKKyAgICAgICAgYnJlYWs7IC8qIFRoaXMgaXMgd2hhdCB0aGUg c3BlYyBkb2VzICovCisgICAgY2FzZSBJRF9FWFRfRUxFX0FVRElPUFJFUk9MTDoKKyAgICAgICAg LyogTm8gY29uZmlndXJhdGlvbiBuZWVkZWQgLSBmYWxsdGhyb3VnaCAobGVuIHNob3VsZCBiZSAw KSAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIHNraXBfYml0cyhnYiwgOCpleHRfY29uZmlnX2xl bik7CisgICAgICAgIGJyZWFrOworICAgIH07CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZm X2FhY191c2FjX3Jlc2V0X3N0YXRlKEFBQ0RlY0NvbnRleHQgKmFjLCBPdXRwdXRDb25maWd1cmF0 aW9uICpvYykKK3sKKyAgICBBQUNVU0FDQ29uZmlnICp1c2FjID0gJm9jLT51c2FjOworICAgIGlu dCBlbGVtX2lkWzMgLyogU0NFLCBDUEUsIExGRSAqL10gPSB7IDAsIDAsIDAgfTsKKworICAgIENo YW5uZWxFbGVtZW50ICpjaGU7CisgICAgZW51bSBSYXdEYXRhQmxvY2tUeXBlIHR5cGU7CisgICAg aW50IGlkLCBjaDsKKworICAgIC8qIEluaXRpYWxpemUgc3RhdGUgKi8KKyAgICBmb3IgKGludCBp ID0gMDsgaSA8IHVzYWMtPm5iX2VsZW1zOyBpKyspIHsKKyAgICAgICAgQUFDVXNhY0VsZW1Db25m aWcgKmUgPSAmdXNhYy0+ZWxlbXNbaV07CisgICAgICAgIGlmIChlLT50eXBlICE9IElEX1VTQUNf U0NFICYmIGUtPnR5cGUgIT0gSURfVVNBQ19DUEUpCisgICAgICAgICAgICBjb250aW51ZTsKKwor ICAgICAgICBpZiAoZS0+dHlwZSA9PSBJRF9VU0FDX1NDRSkgeworICAgICAgICAgICAgY2ggPSAx OworICAgICAgICAgICAgdHlwZSA9IFRZUEVfU0NFOworICAgICAgICAgICAgaWQgPSBlbGVtX2lk WzBdKys7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjaCA9IDI7CisgICAgICAgICAg ICB0eXBlID0gVFlQRV9DUEU7CisgICAgICAgICAgICBpZCA9IGVsZW1faWRbMV0rKzsKKyAgICAg ICAgfQorCisgICAgICAgIGNoZSA9IGZmX2FhY19nZXRfY2hlKGFjLCB0eXBlLCBpZCk7CisgICAg ICAgIGlmIChjaGUpIHsKKyAgICAgICAgICAgIEFBQ1VzYWNTdGVyZW8gKnVzID0gJmNoZS0+dXM7 CisgICAgICAgICAgICBtZW1zZXQodXMsIDAsIHNpemVvZigqdXMpKTsKKworICAgICAgICAgICAg Zm9yIChpbnQgaiA9IDA7IGogPCBjaDsgaisrKSB7CisgICAgICAgICAgICAgICAgU2luZ2xlQ2hh bm5lbEVsZW1lbnQgKnNjZSA9ICZjaGUtPmNoW2NoXTsKKyAgICAgICAgICAgICAgICBBQUNVc2Fj RWxlbURhdGEgKnVlID0gJnNjZS0+dWU7CisKKyAgICAgICAgICAgICAgICBtZW1zZXQodWUsIDAs IHNpemVvZigqdWUpKTsKKworICAgICAgICAgICAgICAgIGlmICghY2gpCisgICAgICAgICAgICAg ICAgICAgIHVlLT5ub2lzZS5zZWVkID0gMHgzMDM5OworICAgICAgICAgICAgICAgIGVsc2UKKyAg ICAgICAgICAgICAgICAgICAgY2hlLT5jaFsxXS51ZS5ub2lzZS5zZWVkID0gMHgxMDkzMjsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKiBV c2FjQ29uZmlnICovCitpbnQgZmZfYWFjX3VzYWNfY29uZmlnX2RlY29kZShBQUNEZWNDb250ZXh0 ICphYywgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR2V0Qml0Q29udGV4dCAqZ2IsIE91dHB1dENvbmZpZ3VyYXRpb24gKm9jLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGNoYW5uZWxfY29uZmlnKQoreworICAgIGludCByZXQs IGlkeDsKKyAgICB1aW50OF90IGZyZXFfaWR4OworICAgIHVpbnQ4X3QgY2hhbm5lbF9jb25maWdf aWR4OworICAgIGludCBuYl9lbGVtZW50czsKKyAgICBpbnQgc2FtcGxlcmF0ZTsKKyAgICBpbnQg c2JyX3JhdGlvOworICAgIE1QRUc0QXVkaW9Db25maWcgKm00YWMgPSAmb2MtPm00YWM7CisgICAg QUFDVVNBQ0NvbmZpZyAqdXNhYyA9ICZvYy0+dXNhYzsKKyAgICBpbnQgZWxlbV9pZFszIC8qIFND RSwgQ1BFLCBMRkUgKi9dOworCisgICAgdWludDhfdCBsYXlvdXRfbWFwW01BWF9FTEVNX0lEKjRd WzNdOworCisgICAgbWVtc2V0KHVzYWMsIDAsIHNpemVvZigqdXNhYykpOworCisgICAgZnJlcV9p ZHggPSBnZXRfYml0cyhnYiwgNSk7IC8qIHVzYWNTYW1wbGluZ0ZyZXF1ZW5jeUluZGV4ICovCisg ICAgaWYgKGZyZXFfaWR4ID09IDB4MWYpIHsKKyAgICAgICAgc2FtcGxlcmF0ZSA9IGdldF9iaXRz KGdiLCAyNCk7IC8qIHVzYWNTYW1wbGluZ0ZyZXF1ZW5jeSAqLworCisgICAgICAgIC8qIFRyeSB0 byBtYXRjaCB1cCBhbiBpbmRleCBmb3IgdGhlIGN1c3RvbSBzYW1wbGUgcmF0ZS4KKyAgICAgICAg ICogVE9ETzogbm90IHN1cmUgaWYgY29ycmVjdCAqLworICAgICAgICBmb3IgKGlkeCA9IDA7IGlk eCA8IC8qIEZGX0FSUkFZX0VMRU1TKGZmX2FhY191c2FjX3NhbXBsZXJhdGUpICovIDMyOyBpZHgr KykgeworICAgICAgICAgICAgaWYgKGZmX2FhY191c2FjX3NhbXBsZXJhdGVbaWR4XSA+PSBzYW1w bGVyYXRlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlkeCA9 IEZGTUlOKGlkeCwgLyogRkZfQVJSQVlfRUxFTVMoZmZfYWFjX3VzYWNfc2FtcGxlcmF0ZSkgKi8g MzIgLSAxKTsKKyAgICAgICAgdXNhYy0+cmF0ZV9pZHggPSBpZHg7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgc2FtcGxlcmF0ZSA9IGZmX2FhY191c2FjX3NhbXBsZXJhdGVbZnJlcV9pZHhdOworICAg ICAgICBpZiAoc2FtcGxlcmF0ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5W QUwpOworICAgICAgICB1c2FjLT5yYXRlX2lkeCA9IGZyZXFfaWR4OworICAgIH0KKworICAgIG00 YWMtPnNhbXBsZV9yYXRlID0gYXZjdHgtPnNhbXBsZV9yYXRlID0gc2FtcGxlcmF0ZTsKKworICAg IHVzYWMtPmNvcmVfc2JyX2ZyYW1lX2xlbl9pZHggPSBnZXRfYml0cyhnYiwgMyk7IC8qIGNvcmVT YnJGcmFtZUxlbmd0aEluZGV4ICovCisgICAgbTRhYy0+ZnJhbWVfbGVuZ3RoX3Nob3J0ID0gdXNh Yy0+Y29yZV9zYnJfZnJhbWVfbGVuX2lkeCA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdXNhYy0+Y29yZV9zYnJfZnJhbWVfbGVuX2lkeCA9PSAyOworCisgICAgdXNhYy0+ Y29yZV9mcmFtZV9sZW4gPSAodXNhYy0+Y29yZV9zYnJfZnJhbWVfbGVuX2lkeCA9PSAwIHx8Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhYy0+Y29yZV9zYnJfZnJhbWVfbGVuX2lkeCA9 PSAyKSA/IDc2OCA6IDEwMjQ7CisKKyAgICBzYnJfcmF0aW8gPSB1c2FjLT5jb3JlX3Nicl9mcmFt ZV9sZW5faWR4ID09IDIgPyAyIDoKKyAgICAgICAgICAgICAgICB1c2FjLT5jb3JlX3Nicl9mcmFt ZV9sZW5faWR4ID09IDMgPyAzIDoKKyAgICAgICAgICAgICAgICB1c2FjLT5jb3JlX3Nicl9mcmFt ZV9sZW5faWR4ID09IDQgPyAxIDoKKyAgICAgICAgICAgICAgICAwOworCisgICAgY2hhbm5lbF9j b25maWdfaWR4ID0gZ2V0X2JpdHMoZ2IsIDUpOyAvKiBjaGFubmVsQ29uZmlndXJhdGlvbkluZGV4 ICovCisgICAgaWYgKCFjaGFubmVsX2NvbmZpZ19pZHgpIHsKKyAgICAgICAgLyogVXNhY0NoYW5u ZWxDb25maWcoKSAqLworICAgICAgICB1aW50OF90IG5iX2NoYW5uZWxzID0gZ2V0X2VzY2FwZWRf dmFsdWUoZ2IsIDUsIDgsIDE2KTsgLyogbnVtT3V0Q2hhbm5lbHMgKi8KKyAgICAgICAgaWYgKG5i X2NoYW5uZWxzID49IDY0KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKwor ICAgICAgICBhdl9jaGFubmVsX2xheW91dF91bmluaXQoJmFjLT5vY1sxXS5jaF9sYXlvdXQpOwor CisgICAgICAgIHJldCA9IGF2X2NoYW5uZWxfbGF5b3V0X2N1c3RvbV9pbml0KCZhYy0+b2NbMV0u Y2hfbGF5b3V0LCBuYl9jaGFubmVscyk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAg ICAgcmV0dXJuIHJldDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2NoYW5uZWxz OyBpKyspIHsKKyAgICAgICAgICAgIEFWQ2hhbm5lbEN1c3RvbSAqY20gPSAmYWMtPm9jWzFdLmNo X2xheW91dC51Lm1hcFtpXTsKKyAgICAgICAgICAgIGNtLT5pZCA9IHVzYWNfY2hfcG9zX3RvX2F2 W2dldF9iaXRzKGdiLCA1KV07IC8qIGJzT3V0cHV0Q2hhbm5lbFBvcyAqLworICAgICAgICAgICAg aWYgKGNtLT5pZCA9PSBBVl9DSEFOX05PTkUpCisgICAgICAgICAgICAgICAgY20tPmlkID0gQVZf Q0hBTl9VTktOT1dOOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gYXZfY2hhbm5lbF9sYXlv dXRfcmV0eXBlKCZhYy0+b2NbMV0uY2hfbGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVZfQ0hBTk5FTF9PUkRFUl9OQVRJVkUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9SRVRZUEVfRkxBR19DQU5P TklDQUwpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisK KyAgICAgICAgcmV0ID0gYXZfY2hhbm5lbF9sYXlvdXRfY29weSgmYXZjdHgtPmNoX2xheW91dCwg JmFjLT5vY1sxXS5jaF9sYXlvdXQpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAg IHJldHVybiByZXQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKChyZXQgPSBmZl9hYWNfc2V0 X2RlZmF1bHRfY2hhbm5lbF9jb25maWcoYWMsIGF2Y3R4LCBsYXlvdXRfbWFwLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJfZWxlbWVudHMs IGNoYW5uZWxfY29uZmlnX2lkeCkpKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisK KyAgICAvKiBVc2FjRGVjb2RlckNvbmZpZyAqLworICAgIGVsZW1faWRbMF0gPSBlbGVtX2lkWzFd ID0gZWxlbV9pZFsyXSA9IDA7CisgICAgdXNhYy0+bmJfZWxlbXMgPSBnZXRfZXNjYXBlZF92YWx1 ZShnYiwgNCwgOCwgMTYpICsgMTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNhYy0+bmJf ZWxlbXM7IGkrKykgeworICAgICAgICBBQUNVc2FjRWxlbUNvbmZpZyAqZSA9ICZ1c2FjLT5lbGVt c1tpXTsKKyAgICAgICAgbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCisgICAgICAgIGUtPnR5 cGUgPSBnZXRfYml0cyhnYiwgMik7IC8qIHVzYWNFbGVtZW50VHlwZSAqLworICAgICAgICBhdl9s b2coYWMtPmF2Y3R4LCBBVl9MT0dfREVCVUcsICJFbGVtZW50IHByZXNlbnQ6IGlkeCAlaSwgdHlw ZSAlaVxuIiwKKyAgICAgICAgICAgICAgIGksIGUtPnR5cGUpOworCisgICAgICAgIHN3aXRjaCAo ZS0+dHlwZSkgeworICAgICAgICBjYXNlIElEX1VTQUNfU0NFOiAvKiBTQ0UgKi8KKyAgICAgICAg ICAgIC8qIFVzYWNDb3JlQ29uZmlnICovCisgICAgICAgICAgICBkZWNvZGVfdXNhY19lbGVtZW50 X2NvcmUoZSwgZ2IsIHNicl9yYXRpbyk7CisgICAgICAgICAgICBpZiAoZS0+c2JyLnJhdGlvID4g MCkKKyAgICAgICAgICAgICAgICBkZWNvZGVfdXNhY19zYnJfZGF0YShlLCBnYik7CisgICAgICAg ICAgICBsYXlvdXRfbWFwW2ldWzBdID0gVFlQRV9TQ0U7CisgICAgICAgICAgICBsYXlvdXRfbWFw W2ldWzFdID0gaTsKKyAgICAgICAgICAgIGxheW91dF9tYXBbaV1bMl0gPSBBQUNfQ0hBTk5FTF9G Uk9OVDsKKyAgICAgICAgICAgIGVsZW1faWRbMF0rKzsKKworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGNhc2UgSURfVVNBQ19DUEU6IC8qIFVzYWNDaGFubmVsUGFpckVsZW1lbnRDb25mICov CisgICAgICAgICAgICAvKiBVc2FjQ29yZUNvbmZpZyAqLworICAgICAgICAgICAgZGVjb2RlX3Vz YWNfZWxlbWVudF9jb3JlKGUsIGdiLCBzYnJfcmF0aW8pOworICAgICAgICAgICAgZGVjb2RlX3Vz YWNfZWxlbWVudF9wYWlyKGUsIGdiKTsKKyAgICAgICAgICAgIGxheW91dF9tYXBbaV1bMF0gPSBU WVBFX0NQRTsKKyAgICAgICAgICAgIGxheW91dF9tYXBbaV1bMV0gPSBpOworICAgICAgICAgICAg bGF5b3V0X21hcFtpXVsyXSA9IEFBQ19DSEFOTkVMX0ZST05UOworICAgICAgICAgICAgZWxlbV9p ZFsxXSsrOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRF9VU0FDX0xGRTog LyogTEZFICovCisgICAgICAgICAgICAvKiBMRkUgaGFzIG5vIG5lZWQgZm9yIGFueSBjb25maWd1 cmF0aW9uICovCisgICAgICAgICAgICBlLT50d19tZGN0ID0gMDsKKyAgICAgICAgICAgIGUtPm5v aXNlX2ZpbGwgPSAwOworICAgICAgICAgICAgZWxlbV9pZFsyXSsrOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgSURfVVNBQ19FWFQ6IC8qIEVYVCAqLworICAgICAgICAgICAgcmV0 ID0gZGVjb2RlX3VzYWNfZXh0ZW5zaW9uKGFjLCBlLCBnYik7CisgICAgICAgICAgICBpZiAocmV0 IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH07CisgICAgfQorCisgICAgcmV0ID0gZmZfYWFjX291dHB1dF9jb25maWd1cmUoYWMs IGxheW91dF9tYXAsIGVsZW1faWRbMF0gKyBlbGVtX2lkWzFdICsgZWxlbV9pZFsyXSwgT0NfR0xP QkFMX0hEUiwgMCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJVbmFibGUgdG8gcGFyc2UgY2hhbm5lbCBjb25maWchXG4iKTsKKyAgICAg ICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAvKiB1c2Fj Q29uZmlnRXh0ZW5zaW9uUHJlc2VudCAqLworICAgICAgICBpbnQgaW52YWxpZDsKKyAgICAgICAg aW50IG5iX2V4dGVuc2lvbnMgPSBnZXRfZXNjYXBlZF92YWx1ZShnYiwgMiwgNCwgOCkgKyAxOyAv KiBudW1Db25maWdFeHRlbnNpb25zICovCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmJf ZXh0ZW5zaW9uczsgaSsrKSB7CisgICAgICAgICAgICBpbnQgdHlwZSA9IGdldF9lc2NhcGVkX3Zh bHVlKGdiLCA0LCA4LCAxNik7CisgICAgICAgICAgICBpbnQgbGVuID0gZ2V0X2VzY2FwZWRfdmFs dWUoZ2IsIDQsIDgsIDE2KTsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICAg ICAgY2FzZSBJRF9DT05GSUdfRVhUX0xPVURORVNTX0lORk86CisgICAgICAgICAgICAgICAgcmV0 ID0gZGVjb2RlX2xvdWRuZXNzX3NldChhYywgdXNhYywgZ2IpOworICAgICAgICAgICAgICAgIGlm IChyZXQgPCAwKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJRF9DT05GSUdfRVhUX1NUUkVBTV9JRDoKKyAg ICAgICAgICAgICAgICB1c2FjLT5zdHJlYW1faWRlbnRpZmllciA9IGdldF9iaXRzKGdiLCAxNik7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElEX0NPTkZJR19FWFRf RklMTDogLyogZmFsbHRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICBpbnZhbGlkID0gMDsKKyAg ICAgICAgICAgICAgICB3aGlsZSAobGVuLS0pIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGdl dF9iaXRzKGdiLCA4KSAhPSAweEE1KQorICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZCsr OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoaW52YWxpZCkKKyAgICAg ICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIkludmFsaWQgZmls bCBieXRlczogJWlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkKTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg ICAgd2hpbGUgKGxlbi0tKQorICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDgpOwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor CisgICAgcmV0ID0gZmZfYWFjX3VzYWNfcmVzZXRfc3RhdGUoYWMsIG9jKTsKKyAgICBpZiAocmV0 IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IGRlY29kZV91c2FjX3NjYWxlX2ZhY3RvcnMoQUFDRGVjQ29udGV4dCAqYWMsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2luZ2xlQ2hhbm5lbEVsZW1lbnQgKnNjZSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRCaXRDb250ZXh0ICpnYiwg dWludDhfdCBnbG9iYWxfZ2FpbikKK3sKKyAgICBJbmRpdmlkdWFsQ2hhbm5lbFN0cmVhbSAqaWNz ID0gJnNjZS0+aWNzOworCisgICAgLyogRGVjb2RlIGFsbCBzY2FsZWZhY3RvcnMuICovCisgICAg aW50IG9mZnNldF9zZiA9IGdsb2JhbF9nYWluOworICAgIGZvciAoaW50IGcgPSAwOyBnIDwgaWNz LT5udW1fd2luZG93X2dyb3VwczsgZysrKSB7CisgICAgICAgIGZvciAoaW50IHNmYiA9IDA7IHNm YiA8IGljcy0+bWF4X3NmYjsgc2ZiKyspIHsKKyAgICAgICAgICAgIC8qIEZpcnN0IGNvZWZmaWNp ZW50IGlzIGp1c3QgdGhlIGdsb2JhbCBnYWluICovCisgICAgICAgICAgICBpZiAoIWcgJiYgIXNm YikgeworICAgICAgICAgICAgICAgIC8qIFRoZSBjYW5ub25pY2FsIHJlcHJlc2VudGF0aW9uIG9m IHF1YW50aXplZCBzY2FsZWZhY3RvcnMKKyAgICAgICAgICAgICAgICAgKiBpbiB0aGUgc3BlYyBp cyB3aXRoIDEwMCBzdWJ0cmFjdGVkLiAqLworICAgICAgICAgICAgICAgIHNjZS0+c2ZvWzBdID0g b2Zmc2V0X3NmIC0gMTAwOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICBvZmZzZXRfc2YgKz0gZ2V0X3ZsYzIoZ2IsIGZmX3ZsY19zY2FsZWZh Y3RvcnMsIDcsIDMpIC0gU0NBTEVfRElGRl9aRVJPOworICAgICAgICAgICAgaWYgKG9mZnNldF9z ZiA+IDI1NVUpIHsKKyAgICAgICAgICAgICAgICBhdl9sb2coYWMtPmF2Y3R4LCBBVl9MT0dfRVJS T1IsCisgICAgICAgICAgICAgICAgICAgICAgICJTY2FsZWZhY3RvciAoJWQpIG91dCBvZiByYW5n ZS5cbiIsIG9mZnNldF9zZik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNjZS0+c2ZvW2cqaWNzLT5tYXhf c2ZiICsgc2ZiXSA9IG9mZnNldF9zZiAtIDEwMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl dHVybiAwOworfQorCisvKioKKyAqIERlY29kZSBhbmQgZGVxdWFudGl6ZSBhcml0aG1ldGljYWxs eSBjb2RlZCwgdW5pZm9ybWx5IHF1YW50aXplZCB2YWx1ZQorICoKKyAqIEBwYXJhbSAgIGNvZWYg ICAgICAgICAgICBhcnJheSBvZiBkZXF1YW50aXplZCwgc2NhbGVkIHNwZWN0cmFsIGRhdGEKKyAq IEBwYXJhbSAgIHNmICAgICAgICAgICAgICBhcnJheSBvZiBzY2FsZWZhY3RvcnMgb3IgaW50ZW5z aXR5IHN0ZXJlbyBwb3NpdGlvbnMKKyAqCisgKiBAcmV0dXJuICBSZXR1cm5zIGVycm9yIHN0YXR1 cy4gMCAtIE9LLCAhMCAtIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgZGVjb2RlX3NwZWN0cnVtX2Fu ZF9kZXF1YW50X2FjKEFBQ0RlY0NvbnRleHQgKnMsIGZsb2F0IGNvZWZbMTAyNF0sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRCaXRDb250ZXh0ICpnYiwgY29u c3QgZmxvYXQgc2ZbMTIwXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFBQ0FyaXRoU3RhdGUgKnN0YXRlLCBpbnQgcmVzZXQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZW4sIHVpbnQxNl90IE4pCit7CisgICAg QUFDQXJpdGggYWM7CisgICAgaW50IGksIGEsIGI7CisgICAgdWludDMyX3QgYzsKKworICAgIGlu dCBnYl9jb3VudDsKKyAgICBHZXRCaXRDb250ZXh0IGdiMjsKKworICAgIGZmX2FhY19hY19pbml0 KCZhYywgZ2IpOworICAgIGMgPSBmZl9hYWNfYWNfbWFwX3Byb2Nlc3Moc3RhdGUsIHJlc2V0LCBO KTsKKworICAgIC8qIEJhY2t1cCByZWFkZXIgZm9yIHJvbGxpbmcgYmFjayBieSAxNCBiaXRzIGF0 IHRoZSBlbmQgKi8KKyAgICBnYjIgPSAoR2V0Qml0Q29udGV4dCkqZ2I7CisgICAgZ2JfY291bnQg PSBnZXRfYml0c19jb3VudCgmZ2IyKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBsZW4vMjsgaSsr KSB7CisgICAgICAgIC8qIE1TQiAqLworICAgICAgICBpbnQgbHZsLCBlc2NfbmIsIG07CisgICAg ICAgIGMgPSBmZl9hYWNfYWNfZ2V0X2NvbnRleHQoc3RhdGUsIGMsIGksIE4pOworICAgICAgICBm b3IgKGx2bD1lc2NfbmI9MDs7KSB7CisgICAgICAgICAgICB1aW50MzJfdCBwa2kgPSBmZl9hYWNf YWNfZ2V0X3BrKGMgKyAoZXNjX25iIDw8IDE3KSk7CisgICAgICAgICAgICBtID0gZmZfYWFjX2Fj X2RlY29kZSgmYWMsICZnYjIsIGZmX2FhY19hY19tc2JfY2Rmc1twa2ldLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRkZfQVJSQVlfRUxFTVMoZmZfYWFjX2FjX21zYl9jZGZzW3Br aV0pKTsKKyAgICAgICAgICAgIGlmIChtIDwgRkZfQUFDX0FDX0VTQ0FQRSkKKyAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgIGx2bCsrOworCisgICAgICAgICAgICAvKiBDYXJnby1j dWx0ZWQgdmFsdWUuICovCisgICAgICAgICAgICBpZiAobHZsID4gMjMpCisgICAgICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKworICAgICAgICAgICAgaWYgKChlc2NfbmIgPSBs dmwpID4gNykKKyAgICAgICAgICAgICAgICBlc2NfbmIgPSA3OworICAgICAgICB9CisKKyAgICAg ICAgYiA9IG0gPj4gMjsKKyAgICAgICAgYSA9IG0gLSAoYiA8PCAyKTsKKworICAgICAgICAvKiBB UklUSF9TVE9QIGRldGVjdGlvbiAqLworICAgICAgICBpZiAoIW0pIHsKKyAgICAgICAgICAgIGlm IChlc2NfbmIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBhID0gYiA9IDA7 CisgICAgICAgIH0KKworICAgICAgICAvKiBMU0IgKi8KKyAgICAgICAgZm9yIChpbnQgbCA9IGx2 bDsgbCA+IDA7IGwtLSkgeworICAgICAgICAgICAgaW50IGxzYmlkeCA9ICFhID8gMSA6ICghYiA/ IDAgOiAyKTsKKyAgICAgICAgICAgIHVpbnQ4X3QgciA9IGZmX2FhY19hY19kZWNvZGUoJmFjLCAm Z2IyLCBmZl9hYWNfYWNfbHNiX2NkZnNbbHNiaWR4XSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRkZfQVJSQVlfRUxFTVMoZmZfYWFjX2FjX2xzYl9jZGZzW2xzYmlk eF0pKTsKKyAgICAgICAgICAgIGEgPSAoYSA8PCAxKSB8IChyICYgMSk7CisgICAgICAgICAgICBi ID0gKGIgPDwgMSkgfCAoKHIgPj4gMSkgJiAxKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIERl cXVhbnRpemUgY29lZmZzIGhlcmUgKi8KKyAgICAgICAgY29lZlsyKmkgKyAwXSA9IGEgKiBjYnJ0 KGEpOworICAgICAgICBjb2VmWzIqaSArIDFdID0gYiAqIGNicnQoYik7CisgICAgICAgIGZmX2Fh Y19hY191cGRhdGVfY29udGV4dChzdGF0ZSwgaSwgYSwgYik7CisgICAgfQorCisgICAgaWYgKGxl biA+IDEpIHsKKyAgICAgICAgLyogIlJld2luZCIgYml0c3RyZWFtIGJhY2sgYnkgMTQgYml0cyAq LworICAgICAgICBpbnQgZ2JfY291bnQyID0gZ2V0X2JpdHNfY291bnQoJmdiMik7CisgICAgICAg IHNraXBfYml0cyhnYiwgZ2JfY291bnQyIC0gZ2JfY291bnQgLSAxNCk7CisgICAgfSBlbHNlIHsK KyAgICAgICAgKmdiID0gZ2IyOworICAgIH0KKworICAgIGZmX2FhY19hY19maW5pc2goc3RhdGUs IGksIE4pOworCisgICAgZm9yICg7IGkgPCBOLzI7IGkrKykgeworICAgICAgICBjb2VmWzIqaSAr IDBdID0gMDsKKyAgICAgICAgY29lZlsyKmkgKyAxXSA9IDA7CisgICAgfQorCisgICAgLyogU2ln bnMgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgaWYgKGNvZWZb aV0pIHsKKyAgICAgICAgICAgIGlmICghZ2V0X2JpdHMxKGdiKSkgLyogcyAqLworICAgICAgICAg ICAgICAgIGNvZWZbaV0gKj0gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsK K30KKworc3RhdGljIGludCBkZWNvZGVfdXNhY19zdGVyZW9fY3BseChBQUNEZWNDb250ZXh0ICph YywgQUFDVXNhY1N0ZXJlbyAqdXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IENoYW5uZWxFbGVtZW50ICpjcGUsIEdldEJpdENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgbnVtX3dpbmRvd19ncm91cHMsIGludCBpbmRlcF9mbGFn KQoreworICAgIGludCBkZWx0YV9jb2RlX3RpbWU7CisgICAgSW5kaXZpZHVhbENoYW5uZWxTdHJl YW0gKmljcyA9ICZjcGUtPmNoWzBdLmljczsKKworICAgIGlmICghZ2V0X2JpdHMxKGdiKSkgeyAv KiBjcGx4X3ByZWRfYWxsICovCisgICAgICAgIGZvciAoaW50IGcgPSAwOyBnIDwgbnVtX3dpbmRv d19ncm91cHM7IGcrKykgeworICAgICAgICAgICAgZm9yIChpbnQgc2ZiID0gMDsgc2ZiIDwgY3Bl LT5tYXhfc2ZiX3N0ZTsgc2ZiICs9IFNGQl9QRVJfUFJFRF9CQU5EKSB7CisgICAgICAgICAgICAg ICAgY29uc3QgdWludDhfdCB2YWwgPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgICAgIHVz LT5wcmVkX3VzZWRbZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiXSA9IHZhbDsKKyAgICAgICAgICAg ICAgICBpZiAoKHNmYiArIDEpIDwgY3BlLT5tYXhfc2ZiX3N0ZSkKKyAgICAgICAgICAgICAgICAg ICAgdXMtPnByZWRfdXNlZFtnKmNwZS0+bWF4X3NmYl9zdGUgKyBzZmIgKyAxXSA9IHZhbDsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaW50IGcg PSAwOyBnIDwgbnVtX3dpbmRvd19ncm91cHM7IGcrKykKKyAgICAgICAgICAgIGZvciAoaW50IHNm YiA9IDA7IHNmYiA8IGNwZS0+bWF4X3NmYl9zdGU7IHNmYisrKQorICAgICAgICAgICAgICAgIHVz LT5wcmVkX3VzZWRbZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiXSA9IDE7CisgICAgfQorCisgICAg dXMtPnByZWRfZGlyID0gZ2V0X2JpdHMxKGdiKTsKKyAgICB1cy0+Y29tcGxleF9jb2VmID0gZ2V0 X2JpdHMxKGdiKTsKKworICAgIHVzLT51c2VfcHJldl9mcmFtZSA9IDA7CisgICAgaWYgKHVzLT5j b21wbGV4X2NvZWYgJiYgIWluZGVwX2ZsYWcpCisgICAgICAgIHVzLT51c2VfcHJldl9mcmFtZSA9 IGdldF9iaXRzMShnYik7CisKKyAgICBkZWx0YV9jb2RlX3RpbWUgPSAwOworICAgIGlmICghaW5k ZXBfZmxhZykKKyAgICAgICAgZGVsdGFfY29kZV90aW1lID0gZ2V0X2JpdHMxKGdiKTsKKworICAg IC8qIFRPRE86IHNob3VsZG4ndCBiZSBuZWVkZWQgKi8KKyAgICBmb3IgKGludCBnID0gMDsgZyA8 IG51bV93aW5kb3dfZ3JvdXBzOyBnKyspIHsKKyAgICAgICAgZm9yIChpbnQgc2ZiID0gMDsgc2Zi IDwgY3BlLT5tYXhfc2ZiX3N0ZTsgc2ZiICs9IFNGQl9QRVJfUFJFRF9CQU5EKSB7CisgICAgICAg ICAgICBmbG9hdCBsYXN0X2FscGhhX3FfcmUgPSAwOworICAgICAgICAgICAgZmxvYXQgbGFzdF9h bHBoYV9xX2ltID0gMDsKKyAgICAgICAgICAgIGlmIChkZWx0YV9jb2RlX3RpbWUpIHsKKyAgICAg ICAgICAgICAgICBpZiAoZykgeworICAgICAgICAgICAgICAgICAgICBsYXN0X2FscGhhX3FfcmUg PSB1cy0+cHJldl9hbHBoYV9xX3JlWyhnIC0gMSkqY3BlLT5tYXhfc2ZiX3N0ZSArIHNmYl07Cisg ICAgICAgICAgICAgICAgICAgIGxhc3RfYWxwaGFfcV9pbSA9IHVzLT5wcmV2X2FscGhhX3FfaW1b KGcgLSAxKSpjcGUtPm1heF9zZmJfc3RlICsgc2ZiXTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ug aWYgKChpY3MtPndpbmRvd19zZXF1ZW5jZVswXSA9PSBFSUdIVF9TSE9SVF9TRVFVRU5DRSkgJiYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIGljcy0+d2luZG93X3NlcXVlbmNlWzFdID09IEVJ R0hUX1NIT1JUX1NFUVVFTkNFIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICBpY3MtPndp bmRvd19zZXF1ZW5jZVsxXSA9PSBFSUdIVF9TSE9SVF9TRVFVRU5DRSkgeworICAgICAgICAgICAg ICAgICAgICAvKiBUaGUgc3BlYyBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiB0aGlzLCBidXQg aXQgZG9lc24ndCBtYWtlCisgICAgICAgICAgICAgICAgICAgICAqIGFueSBvdGhlciBzZW5zZSBv dGhlcndpc2UhICovCisgICAgICAgICAgICAgICAgICAgIGxhc3RfYWxwaGFfcV9yZSA9IHVzLT5w cmV2X2FscGhhX3FfcmVbNypjcGUtPm1heF9zZmJfc3RlICsgc2ZiXTsKKyAgICAgICAgICAgICAg ICAgICAgbGFzdF9hbHBoYV9xX2ltID0gdXMtPnByZXZfYWxwaGFfcV9pbVs3KmNwZS0+bWF4X3Nm Yl9zdGUgKyBzZmJdOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg ICAgIGxhc3RfYWxwaGFfcV9yZSA9IHVzLT5wcmV2X2FscGhhX3FfcmVbZypjcGUtPm1heF9zZmJf c3RlICsgc2ZiXTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9hbHBoYV9xX2ltID0gdXMtPnBy ZXZfYWxwaGFfcV9pbVtnKmNwZS0+bWF4X3NmYl9zdGUgKyBzZmJdOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKHNmYikgeworICAg ICAgICAgICAgICAgICAgICBsYXN0X2FscGhhX3FfcmUgPSB1cy0+YWxwaGFfcV9yZVtnKmNwZS0+ bWF4X3NmYl9zdGUgKyBzZmIgLSAxXTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9hbHBoYV9x X2ltID0gdXMtPmFscGhhX3FfaW1bZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiIC0gMV07CisgICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodXMtPnByZWRf dXNlZFtnKmNwZS0+bWF4X3NmYl9zdGUgKyBzZmJdKSB7CisgICAgICAgICAgICAgICAgaW50IHZh bCA9IC1nZXRfdmxjMihnYiwgZmZfdmxjX3NjYWxlZmFjdG9ycywgNywgMykgKyA2MDsKKyAgICAg ICAgICAgICAgICBsYXN0X2FscGhhX3FfcmUgKz0gdmFsICogMC4xZjsKKyAgICAgICAgICAgICAg ICBpZiAodXMtPmNvbXBsZXhfY29lZikgeworICAgICAgICAgICAgICAgICAgICB2YWwgPSAtZ2V0 X3ZsYzIoZ2IsIGZmX3ZsY19zY2FsZWZhY3RvcnMsIDcsIDMpICsgNjA7CisgICAgICAgICAgICAg ICAgICAgIGxhc3RfYWxwaGFfcV9pbSArPSB2YWwgKiAwLjFmOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgICB1cy0+YWxwaGFfcV9yZVtnKmNwZS0+bWF4X3NmYl9zdGUgKyBzZmJd ID0gbGFzdF9hbHBoYV9xX3JlOworICAgICAgICAgICAgICAgIHVzLT5hbHBoYV9xX2ltW2cqY3Bl LT5tYXhfc2ZiX3N0ZSArIHNmYl0gPSBsYXN0X2FscGhhX3FfaW07CisgICAgICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgICAgIHVzLT5hbHBoYV9xX3JlW2cqY3BlLT5tYXhfc2ZiX3N0ZSAr IHNmYl0gPSAwOworICAgICAgICAgICAgICAgIHVzLT5hbHBoYV9xX2ltW2cqY3BlLT5tYXhfc2Zi X3N0ZSArIHNmYl0gPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHNmYiAr IDEpIDwgY3BlLT5tYXhfc2ZiX3N0ZSkgeworICAgICAgICAgICAgICAgIHVzLT5hbHBoYV9xX3Jl W2cqY3BlLT5tYXhfc2ZiX3N0ZSArIHNmYiArIDFdID0KKyAgICAgICAgICAgICAgICAgICAgdXMt PmFscGhhX3FfcmVbZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiXTsKKyAgICAgICAgICAgICAgICB1 cy0+YWxwaGFfcV9pbVtnKmNwZS0+bWF4X3NmYl9zdGUgKyBzZmIgKyAxXSA9CisgICAgICAgICAg ICAgICAgICAgIHVzLT5hbHBoYV9xX2ltW2cqY3BlLT5tYXhfc2ZiX3N0ZSArIHNmYl07CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBzZXR1cF9zY2UoQUFDRGVjQ29udGV4dCAqYWMsIFNpbmdsZUNoYW5uZWxFbGVtZW50ICpz Y2UsCisgICAgICAgICAgICAgICAgICAgICBBQUNVU0FDQ29uZmlnICp1c2FjKQoreworICAgIEFB Q1VzYWNFbGVtRGF0YSAqdWUgPSAmc2NlLT51ZTsKKyAgICBJbmRpdmlkdWFsQ2hhbm5lbFN0cmVh bSAqaWNzID0gJnNjZS0+aWNzOworCisgICAgLyogU2V0dXAgd2luZG93IHBhcmFtZXRlcnMgKi8K KyAgICBpZiAoaWNzLT53aW5kb3dfc2VxdWVuY2VbMF0gPT0gRUlHSFRfU0hPUlRfU0VRVUVOQ0Up IHsKKyAgICAgICAgaWYgKHVzYWMtPmNvcmVfZnJhbWVfbGVuID09IDc2OCkgeworICAgICAgICAg ICAgaWNzLT5zd2Jfb2Zmc2V0ID0gZmZfc3diX29mZnNldF85Nlt1c2FjLT5yYXRlX2lkeF07Cisg ICAgICAgICAgICBpY3MtPm51bV9zd2IgPSBmZl9hYWNfbnVtX3N3Yl85Nlt1c2FjLT5yYXRlX2lk eF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpY3MtPnN3Yl9vZmZzZXQgPSBmZl9z d2Jfb2Zmc2V0XzEyOFt1c2FjLT5yYXRlX2lkeF07CisgICAgICAgICAgICBpY3MtPm51bV9zd2Ig PSBmZl9hYWNfbnVtX3N3Yl8xMjhbdXNhYy0+cmF0ZV9pZHhdOworICAgICAgICB9CisgICAgICAg IGljcy0+dG5zX21heF9iYW5kcyA9IGZmX3Ruc19tYXhfYmFuZHNfMTI4W3VzYWMtPnJhdGVfaWR4 XTsKKworICAgICAgICAvKiBTZXR1cCBzY2FsZWZhY3RvciBncm91cGluZy4gNyBiaXQgbWFzay4g Ki8KKyAgICAgICAgaWNzLT5udW1fd2luZG93X2dyb3VwcyA9IDA7CisgICAgICAgIGZvciAoaW50 IGogPSAwOyBqIDwgNzsgaisrKSB7CisgICAgICAgICAgICBpY3MtPmdyb3VwX2xlbltqXSA9IDE7 CisgICAgICAgICAgICBpZiAodWUtPnNjYWxlX2ZhY3Rvcl9ncm91cGluZyAmICgxIDw8ICg2IC0g aikpKQorICAgICAgICAgICAgICAgIGljcy0+Z3JvdXBfbGVuW2ljcy0+bnVtX3dpbmRvd19ncm91 cHNdICs9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWNzLT5udW1fd2lu ZG93X2dyb3VwcysrOworICAgICAgICB9CisKKyAgICAgICAgaWNzLT5ncm91cF9sZW5bN10gPSAx OworICAgICAgICBpY3MtPm51bV93aW5kb3dfZ3JvdXBzKys7CisgICAgICAgIGljcy0+bnVtX3dp bmRvd3MgPSA4OworICAgIH0gZWxzZSB7CisgICAgICAgIGlmICh1c2FjLT5jb3JlX2ZyYW1lX2xl biA9PSA3NjgpIHsKKyAgICAgICAgICAgIGljcy0+c3diX29mZnNldCA9IGZmX3N3Yl9vZmZzZXRf NzY4W3VzYWMtPnJhdGVfaWR4XTsKKyAgICAgICAgICAgIGljcy0+bnVtX3N3YiA9IGZmX2FhY19u dW1fc3diXzc2OFt1c2FjLT5yYXRlX2lkeF07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBpY3MtPnN3Yl9vZmZzZXQgPSBmZl9zd2Jfb2Zmc2V0XzEwMjRbdXNhYy0+cmF0ZV9pZHhdOwor ICAgICAgICAgICAgaWNzLT5udW1fc3diID0gZmZfYWFjX251bV9zd2JfMTAyNFt1c2FjLT5yYXRl X2lkeF07CisgICAgICAgIH0KKyAgICAgICAgaWNzLT50bnNfbWF4X2JhbmRzID0gZmZfdG5zX21h eF9iYW5kc18xMDI0W3VzYWMtPnJhdGVfaWR4XTsKKworICAgICAgICBpY3MtPmdyb3VwX2xlblsw XSA9IDE7CisgICAgICAgIGljcy0+bnVtX3dpbmRvd19ncm91cHMgPSAxOworICAgICAgICBpY3Mt Pm51bV93aW5kb3dzICA9IDE7CisgICAgfQorCisgICAgaWYgKGljcy0+bWF4X3NmYiA+IGljcy0+ bnVtX3N3YikgeworICAgICAgICBhdl9sb2coYWMtPmF2Y3R4LCBBVl9MT0dfRVJST1IsCisgICAg ICAgICAgICAgICAiTnVtYmVyIG9mIHNjYWxlZmFjdG9yIGJhbmRzIGluIGdyb3VwICglZCkgIgor ICAgICAgICAgICAgICAgImV4Y2VlZHMgbGltaXQgKCVkKS5cbiIsCisgICAgICAgICAgICAgICBp Y3MtPm1heF9zZmIsIGljcy0+bnVtX3N3Yik7CisgICAgICAgIHJldHVybiBBVkVSUk9SKEVJTlZB TCk7CisgICAgfQorCisgICAgLyogSnVzdCBzb21lIGRlZmF1bHRzIGZvciB0aGUgYmFuZCB0eXBl cyAqLworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgRkZfQVJSQVlfRUxFTVMoc2NlLT5iYW5kX3R5 cGUpOyBpKyspCisgICAgICAgIHNjZS0+YmFuZF90eXBlW2ldID0gRVNDX0JUOworCisgICAgcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3VzYWNfc3RlcmVvX2luZm8oQUFDRGVjQ29u dGV4dCAqYWMsIEFBQ1VTQUNDb25maWcgKnVzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFBQ1VzYWNFbGVtQ29uZmlnICplYywgQ2hhbm5lbEVsZW1lbnQgKmNwZSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsIGludCBp bmRlcF9mbGFnKQoreworICAgIGludCByZXQsIHRuc19hY3RpdmU7CisKKyAgICBBQUNVc2FjU3Rl cmVvICp1cyA9ICZjcGUtPnVzOworICAgIFNpbmdsZUNoYW5uZWxFbGVtZW50ICpzY2UxID0gJmNw ZS0+Y2hbMF07CisgICAgU2luZ2xlQ2hhbm5lbEVsZW1lbnQgKnNjZTIgPSAmY3BlLT5jaFsxXTsK KyAgICBJbmRpdmlkdWFsQ2hhbm5lbFN0cmVhbSAqaWNzMSA9ICZzY2UxLT5pY3M7CisgICAgSW5k aXZpZHVhbENoYW5uZWxTdHJlYW0gKmljczIgPSAmc2NlMi0+aWNzOworICAgIEFBQ1VzYWNFbGVt RGF0YSAqdWUxID0gJnNjZTEtPnVlOworICAgIEFBQ1VzYWNFbGVtRGF0YSAqdWUyID0gJnNjZTIt PnVlOworCisgICAgdXMtPmNvbW1vbl93aW5kb3cgPSAwOworICAgIHVzLT5jb21tb25fdHcgPSAw OworCisgICAgaWYgKCEoIXVlMS0+Y29yZV9tb2RlICYmICF1ZTItPmNvcmVfbW9kZSkpCisgICAg ICAgIHJldHVybiAwOworCisgICAgdG5zX2FjdGl2ZSA9IGdldF9iaXRzMShnYik7CisgICAgdXMt PmNvbW1vbl93aW5kb3cgPSBnZXRfYml0czEoZ2IpOworCisgICAgaWYgKHVzLT5jb21tb25fd2lu ZG93KSB7CisgICAgICAgIC8qIGljc19pbmZvKCkgKi8KKyAgICAgICAgaWNzMS0+d2luZG93X3Nl cXVlbmNlWzFdID0gaWNzMS0+d2luZG93X3NlcXVlbmNlWzBdOworICAgICAgICBpY3MyLT53aW5k b3dfc2VxdWVuY2VbMV0gPSBpY3MyLT53aW5kb3dfc2VxdWVuY2VbMF07CisgICAgICAgIGljczEt PndpbmRvd19zZXF1ZW5jZVswXSA9IGljczItPndpbmRvd19zZXF1ZW5jZVswXSA9IGdldF9iaXRz KGdiLCAyKTsKKworICAgICAgICBpY3MxLT51c2Vfa2Jfd2luZG93WzFdID0gaWNzMS0+dXNlX2ti X3dpbmRvd1swXTsKKyAgICAgICAgaWNzMi0+dXNlX2tiX3dpbmRvd1sxXSA9IGljczItPnVzZV9r Yl93aW5kb3dbMF07CisgICAgICAgIGljczEtPnVzZV9rYl93aW5kb3dbMF0gPSBpY3MyLT51c2Vf a2Jfd2luZG93WzBdID0gZ2V0X2JpdHMxKGdiKTsKKworICAgICAgICBpZiAoaWNzMS0+d2luZG93 X3NlcXVlbmNlWzBdID09IEVJR0hUX1NIT1JUX1NFUVVFTkNFKSB7CisgICAgICAgICAgICBpY3Mx LT5tYXhfc2ZiID0gaWNzMi0+bWF4X3NmYiA9IGdldF9iaXRzKGdiLCA0KTsKKyAgICAgICAgICAg IHVlMS0+c2NhbGVfZmFjdG9yX2dyb3VwaW5nID0gdWUyLT5zY2FsZV9mYWN0b3JfZ3JvdXBpbmcg PSBnZXRfYml0cyhnYiwgNyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpY3MxLT5t YXhfc2ZiID0gaWNzMi0+bWF4X3NmYiA9IGdldF9iaXRzKGdiLCA2KTsKKyAgICAgICAgfQorCisg ICAgICAgIGlmICghZ2V0X2JpdHMxKGdiKSkgeyAvKiBjb21tb25fbWF4X3NmYiAqLworICAgICAg ICAgICAgaWYgKGljczItPndpbmRvd19zZXF1ZW5jZVswXSA9PSBFSUdIVF9TSE9SVF9TRVFVRU5D RSkKKyAgICAgICAgICAgICAgICBpY3MyLT5tYXhfc2ZiID0gZ2V0X2JpdHMoZ2IsIDQpOworICAg ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGljczItPm1heF9zZmIgPSBnZXRfYml0cyhn YiwgNik7CisgICAgICAgIH0KKworICAgICAgICByZXQgPSBzZXR1cF9zY2UoYWMsIHNjZTEsIHVz YWMpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAg ICAgICAgcmV0ID0gc2V0dXBfc2NlKGFjLCBzY2UyLCB1c2FjKTsKKyAgICAgICAgaWYgKHJldCA8 IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgIGNwZS0+bWF4X3NmYl9zdGUg PSBGRk1BWChpY3MxLT5tYXhfc2ZiLCBpY3MyLT5tYXhfc2ZiKTsKKworICAgICAgICB1cy0+bXNf bWFza19tb2RlID0gZ2V0X2JpdHMoZ2IsIDIpOyAvKiBtc19tYXNrX3ByZXNlbnQgKi8KKyAgICAg ICAgbWVtc2V0KGNwZS0+bXNfbWFzaywgMCwgc2l6ZW9mKGNwZS0+bXNfbWFzaykpOworICAgICAg ICBpZiAodXMtPm1zX21hc2tfbW9kZSA9PSAxKSB7CisgICAgICAgICAgICBmb3IgKGludCBnID0g MDsgZyA8IGljczEtPm51bV93aW5kb3dfZ3JvdXBzOyBnKyspCisgICAgICAgICAgICAgICAgZm9y IChpbnQgc2ZiID0gMDsgc2ZiIDwgY3BlLT5tYXhfc2ZiX3N0ZTsgc2ZiKyspCisgICAgICAgICAg ICAgICAgICAgIGNwZS0+bXNfbWFza1tnKmNwZS0+bWF4X3NmYl9zdGUgKyBzZmJdID0gZ2V0X2Jp dHMxKGdiKTsKKyAgICAgICAgfSBlbHNlIGlmICh1cy0+bXNfbWFza19tb2RlID09IDIpIHsKKyAg ICAgICAgICAgIG1lbXNldChjcGUtPm1zX21hc2ssIDB4RkYsIHNpemVvZihjcGUtPm1zX21hc2sp KTsKKyAgICAgICAgfSBlbHNlIGlmICgodXMtPm1zX21hc2tfbW9kZSA9PSAzKSAmJiAhZWMtPnN0 ZXJlb19jb25maWdfaW5kZXgpIHsKKyAgICAgICAgICAgIHJldCA9IGRlY29kZV91c2FjX3N0ZXJl b19jcGx4KGFjLCB1cywgY3BlLCBnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGljczEtPm51bV93aW5kb3dfZ3JvdXBzLCBpbmRlcF9mbGFnKTsKKyAgICAgICAg ICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0K KyAgICB9CisKKyAgICBpZiAoZWMtPnR3X21kY3QpIHsKKyAgICAgICAgdXMtPmNvbW1vbl90dyA9 IGdldF9iaXRzMShnYik7CisgICAgICAgIGF2cHJpdl9yZXBvcnRfbWlzc2luZ19mZWF0dXJlKGFj LT5hdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFBQyBVU0FD IHRpbWV3YXJwaW5nIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAg ICB9CisKKyAgICBzY2UxLT50bnMucHJlc2VudCA9IHNjZTItPnRucy5wcmVzZW50ID0gMDsKKyAg ICBpZiAodG5zX2FjdGl2ZSkgeworICAgICAgICBhdl91bnVzZWQgaW50IHRuc19vbl9scjsKKyAg ICAgICAgaW50IGNvbW1vbl90bnMgPSAwOworICAgICAgICBpZiAodXMtPmNvbW1vbl93aW5kb3cp CisgICAgICAgICAgICBjb21tb25fdG5zID0gZ2V0X2JpdHMxKGdiKTsKKworICAgICAgICB0bnNf b25fbHIgPSBnZXRfYml0czEoZ2IpOworICAgICAgICBpZiAoY29tbW9uX3RucykgeworICAgICAg ICAgICAgcmV0ID0gZmZfYWFjX2RlY29kZV90bnMoYWMsICZzY2UxLT50bnMsIGdiLCBpY3MxKTsK KyAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cisg ICAgICAgICAgICBtZW1jcHkoJnNjZTItPnRucywgJnNjZTEtPnRucywgc2l6ZW9mKHNjZTEtPnRu cykpOworICAgICAgICAgICAgc2NlMi0+dG5zLnByZXNlbnQgPSAwOworICAgICAgICAgICAgc2Nl MS0+dG5zLnByZXNlbnQgPSAwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKGdl dF9iaXRzMShnYikpIHsKKyAgICAgICAgICAgICAgICBzY2UyLT50bnMucHJlc2VudCA9IDE7Cisg ICAgICAgICAgICAgICAgc2NlMS0+dG5zLnByZXNlbnQgPSAxOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBzY2UyLT50bnMucHJlc2VudCA9IGdldF9iaXRzMShnYik7Cisg ICAgICAgICAgICAgICAgc2NlMS0+dG5zLnByZXNlbnQgPSAhc2NlMi0+dG5zLnByZXNlbnQ7Cisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyog Ny4yLjQgR2VuZXJhdGlvbiBvZiByYW5kb20gc2lnbnMgZm9yIHNwZWN0cmFsIG5vaXNlIGZpbGxp bmcKKyAqIFRoaXMgZnVuY3Rpb24gaXMgZXhhY3RseSBkZWZpbmVkLCB0aG91Z2ggd2UndmUgaGVs cGVkIHRoZSBkZWZpbml0aW9uCisgKiBhbG9uZyB3aXRoIGJlaW5nIHNsaWdodGx5IGZhc3Rlci4g Ki8KK3N0YXRpYyBpbmxpbmUgZmxvYXQgbm9pc2VfcmFuZG9tX3NpZ24odW5zaWduZWQgaW50ICpz ZWVkKQoreworICAgIHVuc2lnbmVkIGludCBuZXdfc2VlZCA9ICpzZWVkID0gKCgqc2VlZCkgKiA2 OTA2OSkgKyA1OworICAgIGlmICgoKG5ld19zZWVkKSAmIDB4MTAwMDApID4gMCkKKyAgICAgICAg cmV0dXJuIC0xLmY7CisgICAgcmV0dXJuICsxLmY7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5X25v aXNlX2ZpbGwoQUFDRGVjQ29udGV4dCAqYWMsIFNpbmdsZUNoYW5uZWxFbGVtZW50ICpzY2UsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFBQ1VzYWNFbGVtRGF0YSAqdWUpCit7CisgICAg ZmxvYXQgKmNvZWY7CisgICAgSW5kaXZpZHVhbENoYW5uZWxTdHJlYW0gKmljcyA9ICZzY2UtPmlj czsKKworICAgIGZsb2F0IG5vaXNlX3ZhbCA9IHBvdygyLCAodWUtPm5vaXNlLmxldmVsIC0gMTQp LzMpOworICAgIGludCBub2lzZV9vZmZzZXQgPSB1ZS0+bm9pc2Uub2Zmc2V0IC0gMTY7CisgICAg aW50IGJhbmRfb2ZmOworCisgICAgYmFuZF9vZmYgPSBmZl91c2FjX25vaXNlX2ZpbGxfc3RhcnRf b2Zmc2V0W2FjLT5vY1sxXS5tNGFjLmZyYW1lX2xlbmd0aF9zaG9ydF0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWNzLT53aW5kb3dfc2VxdWVuY2VbMF0g PT0gRUlHSFRfU0hPUlRfU0VRVUVOQ0VdOworCisgICAgY29lZiA9IHNjZS0+Y29lZmZzOworICAg IGZvciAoaW50IGcgPSAwOyBnIDwgaWNzLT5udW1fd2luZG93X2dyb3VwczsgZysrKSB7CisgICAg ICAgIHVuc2lnbmVkIGdfbGVuID0gaWNzLT5ncm91cF9sZW5bZ107CisKKyAgICAgICAgZm9yIChp bnQgc2ZiID0gMDsgc2ZiIDwgaWNzLT5tYXhfc2ZiOyBzZmIrKykgeworICAgICAgICAgICAgZmxv YXQgKmNiID0gY29lZiArIGljcy0+c3diX29mZnNldFtzZmJdOworICAgICAgICAgICAgaW50IGNi X2xlbiA9IGljcy0+c3diX29mZnNldFtzZmIgKyAxXSAtIGljcy0+c3diX29mZnNldFtzZmJdOwor ICAgICAgICAgICAgaW50IGJhbmRfcXVhbnRpemVkX3RvX3plcm8gPSAxOworCisgICAgICAgICAg ICBpZiAoaWNzLT5zd2Jfb2Zmc2V0W3NmYl0gPCBiYW5kX29mZikKKyAgICAgICAgICAgICAgICBj b250aW51ZTsKKworICAgICAgICAgICAgZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCA8ICh1bnNp Z25lZClnX2xlbjsgZ3JvdXArKywgY2IgKz0gMTI4KSB7CisgICAgICAgICAgICAgICAgZm9yIChp bnQgeiA9IDA7IHogPCBjYl9sZW47IHorKykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2Jb el0gPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNiW3pdID0gbm9pc2VfcmFuZG9tX3Np Z24oJnNjZS0+dWUubm9pc2Uuc2VlZCkgKiBub2lzZV92YWw7CisgICAgICAgICAgICAgICAgICAg IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhbmRfcXVhbnRpemVkX3RvX3plcm8gPSAw OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJh bmRfcXVhbnRpemVkX3RvX3plcm8pCisgICAgICAgICAgICAgICAgc2NlLT5zZltnKmljcy0+bWF4 X3NmYiArIHNmYl0gKz0gbm9pc2Vfb2Zmc2V0OworICAgICAgICB9CisgICAgICAgIGNvZWYgKz0g Z19sZW4gPDwgNzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHNwZWN0cnVtX3NjYWxlKEFBQ0Rl Y0NvbnRleHQgKmFjLCBTaW5nbGVDaGFubmVsRWxlbWVudCAqc2NlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgQUFDVXNhY0VsZW1EYXRhICp1ZSkKK3sKKyAgICBJbmRpdmlkdWFsQ2hhbm5l bFN0cmVhbSAqaWNzID0gJnNjZS0+aWNzOworICAgIGZsb2F0ICpjb2VmOworCisgICAgLyogU3lu dGhlc2lzZSBub2lzZSAqLworICAgIGlmICh1ZS0+bm9pc2UubGV2ZWwpCisgICAgICAgIGFwcGx5 X25vaXNlX2ZpbGwoYWMsIHNjZSwgdWUpOworCisgICAgLyogQXBwbHkgc2NhbGVmYWN0b3JzICov CisgICAgY29lZiA9IHNjZS0+Y29lZmZzOworICAgIGZvciAoaW50IGcgPSAwOyBnIDwgaWNzLT5u dW1fd2luZG93X2dyb3VwczsgZysrKSB7CisgICAgICAgIHVuc2lnbmVkIGdfbGVuID0gaWNzLT5n cm91cF9sZW5bZ107CisKKyAgICAgICAgZm9yIChpbnQgc2ZiID0gMDsgc2ZiIDwgaWNzLT5tYXhf c2ZiOyBzZmIrKykgeworICAgICAgICAgICAgZmxvYXQgKmNiID0gY29lZiArIGljcy0+c3diX29m ZnNldFtzZmJdOworICAgICAgICAgICAgaW50IGNiX2xlbiA9IGljcy0+c3diX29mZnNldFtzZmIg KyAxXSAtIGljcy0+c3diX29mZnNldFtzZmJdOworICAgICAgICAgICAgZmxvYXQgc2YgPSBzY2Ut PnNmW2cqaWNzLT5tYXhfc2ZiICsgc2ZiXTsKKworICAgICAgICAgICAgZm9yIChpbnQgZ3JvdXAg PSAwOyBncm91cCA8ICh1bnNpZ25lZClnX2xlbjsgZ3JvdXArKywgY2IgKz0gMTI4KQorICAgICAg ICAgICAgICAgIGFjLT5mZHNwLT52ZWN0b3JfZm11bF9zY2FsYXIoY2IsIGNiLCBzZiwgY2JfbGVu KTsKKyAgICAgICAgfQorICAgICAgICBjb2VmICs9IGdfbGVuIDw8IDc7CisgICAgfQorfQorCitz dGF0aWMgdm9pZCBjb21wbGV4X3N0ZXJlb19kb3dubWl4X3ByZXYoQUFDRGVjQ29udGV4dCAqYWMs IENoYW5uZWxFbGVtZW50ICpjcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmxvYXQgKmRtaXhfcmUpCit7CisgICAgSW5kaXZpZHVhbENoYW5uZWxTdHJlYW0gKmlj cyA9ICZjcGUtPmNoWzBdLmljczsKKyAgICBpbnQgc2lnbiA9ICFjcGUtPnVzLnByZWRfZGlyID8g KzEgOiAtMTsKKyAgICBmbG9hdCAqY29lZjEgPSBjcGUtPmNoWzBdLmNvZWZmczsKKyAgICBmbG9h dCAqY29lZjIgPSBjcGUtPmNoWzFdLmNvZWZmczsKKworICAgIGZvciAoaW50IGcgPSAwOyBnIDwg aWNzLT5udW1fd2luZG93X2dyb3VwczsgZysrKSB7CisgICAgICAgIHVuc2lnbmVkIGdfbGVuID0g aWNzLT5ncm91cF9sZW5bZ107CisgICAgICAgIGZvciAoaW50IHNmYiA9IDA7IHNmYiA8IGNwZS0+ bWF4X3NmYl9zdGU7IHNmYisrKSB7CisgICAgICAgICAgICBpbnQgb2ZmID0gaWNzLT5zd2Jfb2Zm c2V0W3NmYl07CisgICAgICAgICAgICBpbnQgY2JfbGVuID0gaWNzLT5zd2Jfb2Zmc2V0W3NmYiAr IDFdIC0gb2ZmOworCisgICAgICAgICAgICBmbG9hdCAqYzEgPSBjb2VmMSArIG9mZjsKKyAgICAg ICAgICAgIGZsb2F0ICpjMiA9IGNvZWYyICsgb2ZmOworICAgICAgICAgICAgZmxvYXQgKmRtID0g ZG1peF9yZSArIG9mZjsKKworICAgICAgICAgICAgZm9yIChpbnQgZ3JvdXAgPSAwOyBncm91cCA8 ICh1bnNpZ25lZClnX2xlbjsKKyAgICAgICAgICAgICAgICAgZ3JvdXArKywgYzEgKz0gMTI4LCBj MiArPSAxMjgsIGRtICs9IDEyOCkgeworICAgICAgICAgICAgICAgIGZvciAoaW50IHogPSAwOyB6 IDwgY2JfbGVuOyB6KyspCisgICAgICAgICAgICAgICAgICAgIGRtW3pdID0gMC41KihjMVt6XSAr IHNpZ24qYzJbel0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgY29lZjEg Kz0gZ19sZW4gPDwgNzsKKyAgICAgICAgY29lZjIgKz0gZ19sZW4gPDwgNzsKKyAgICAgICAgZG1p eF9yZSArPSBnX2xlbiA8PCA3OworICAgIH0KK30KKworc3RhdGljIHZvaWQgY29tcGxleF9zdGVy ZW9fZG93bm1peF9jdXIoQUFDRGVjQ29udGV4dCAqYWMsIENoYW5uZWxFbGVtZW50ICpjcGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqZG1peF9yZSkKK3sK KyAgICBBQUNVc2FjU3RlcmVvICp1cyA9ICZjcGUtPnVzOworICAgIEluZGl2aWR1YWxDaGFubmVs U3RyZWFtICppY3MgPSAmY3BlLT5jaFswXS5pY3M7CisgICAgaW50IHNpZ24gPSAhY3BlLT51cy5w cmVkX2RpciA/ICsxIDogLTE7CisgICAgZmxvYXQgKmNvZWYxID0gY3BlLT5jaFswXS5jb2VmZnM7 CisgICAgZmxvYXQgKmNvZWYyID0gY3BlLT5jaFsxXS5jb2VmZnM7CisKKyAgICBmb3IgKGludCBn ID0gMDsgZyA8IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykgeworICAgICAgICB1bnNpZ25l ZCBnX2xlbiA9IGljcy0+Z3JvdXBfbGVuW2ddOworICAgICAgICBmb3IgKGludCBzZmIgPSAwOyBz ZmIgPCBjcGUtPm1heF9zZmJfc3RlOyBzZmIrKykgeworICAgICAgICAgICAgaW50IG9mZiA9IGlj cy0+c3diX29mZnNldFtzZmJdOworICAgICAgICAgICAgaW50IGNiX2xlbiA9IGljcy0+c3diX29m ZnNldFtzZmIgKyAxXSAtIG9mZjsKKworICAgICAgICAgICAgZmxvYXQgKmMxID0gY29lZjEgKyBv ZmY7CisgICAgICAgICAgICBmbG9hdCAqYzIgPSBjb2VmMiArIG9mZjsKKyAgICAgICAgICAgIGZs b2F0ICpkbSA9IGRtaXhfcmUgKyBvZmY7CisKKyAgICAgICAgICAgIGlmICh1cy0+cHJlZF91c2Vk W2cqY3BlLT5tYXhfc2ZiX3N0ZSArIHNmYl0pIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBn cm91cCA9IDA7IGdyb3VwIDwgKHVuc2lnbmVkKWdfbGVuOworICAgICAgICAgICAgICAgICAgICAg Z3JvdXArKywgYzEgKz0gMTI4LCBjMiArPSAxMjgsIGRtICs9IDEyOCkgeworICAgICAgICAgICAg ICAgICAgICBmb3IgKGludCB6ID0gMDsgeiA8IGNiX2xlbjsgeisrKQorICAgICAgICAgICAgICAg ICAgICAgICAgZG1bel0gPSAwLjUqKGMxW3pdICsgc2lnbipjMlt6XSk7CisgICAgICAgICAgICAg ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBncm91 cCA9IDA7IGdyb3VwIDwgKHVuc2lnbmVkKWdfbGVuOworICAgICAgICAgICAgICAgICAgICAgZ3Jv dXArKywgYzEgKz0gMTI4LCBjMiArPSAxMjgsIGRtICs9IDEyOCkgeworICAgICAgICAgICAgICAg ICAgICBmb3IgKGludCB6ID0gMDsgeiA8IGNiX2xlbjsgeisrKQorICAgICAgICAgICAgICAgICAg ICAgICAgZG1bel0gPSBjMVt6XTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg ICAgICAgIH0KKworICAgICAgICBjb2VmMSArPSBnX2xlbiA8PCA3OworICAgICAgICBjb2VmMiAr PSBnX2xlbiA8PCA3OworICAgICAgICBkbWl4X3JlICs9IGdfbGVuIDw8IDc7CisgICAgfQorfQor CitzdGF0aWMgdm9pZCBjb21wbGV4X3N0ZXJlb19pbnRlcnBvbGF0ZV9pbWFnKGZsb2F0ICppbSwg ZmxvYXQgKnJlLCBjb25zdCBmbG9hdCBmWzZdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbGVuLCBpbnQgZmFjdG9yX2V2ZW4sIGludCBmYWN0b3Jfb2Rk KQoreworICAgIGludCBpID0gMDsKKyAgICBmbG9hdCBzOworCisgICAgcyA9IGZbNl0qcmVbMl0g KyBmWzVdKnJlWzFdICsgZls0XSpyZVswXSArCisgICAgICAgIGZbM10qcmVbMF0gKworICAgICAg ICBmWzJdKnJlWzFdICsgZlsxXSpyZVsyXSArIGZbMF0qcmVbM107CisgICAgaW1baV0gKz0gcypm YWN0b3JfZXZlbjsKKworICAgIGkgPSAxOworICAgIHMgPSBmWzZdKnJlWzFdICsgZls1XSpyZVsw XSArIGZbNF0qcmVbMF0gKworICAgICAgICBmWzNdKnJlWzFdICsKKyAgICAgICAgZlsyXSpyZVsy XSArIGZbMV0qcmVbM10gKyBmWzBdKnJlWzRdOworICAgIGltW2ldICs9IHMqZmFjdG9yX29kZDsK KworICAgIGkgPSAyOworICAgIHMgPSBmWzZdKnJlWzBdICsgZls1XSpyZVswXSArIGZbNF0qcmVb MV0gKworICAgICAgICBmWzNdKnJlWzJdICsKKyAgICAgICAgZlsyXSpyZVszXSArIGZbMV0qcmVb NF0gKyBmWzBdKnJlWzVdOworCisgICAgaW1baV0gKz0gcypmYWN0b3JfZXZlbjsKKyAgICBmb3Ig KGkgPSAzOyBpIDwgbGVuIC0gNDsgaSArPSAyKSB7CisgICAgICAgIHMgPSBmWzZdKnJlW2ktM10g KyBmWzVdKnJlW2ktMl0gKyBmWzRdKnJlW2ktMV0gKworICAgICAgICAgICAgZlszXSpyZVtpXSAr CisgICAgICAgICAgICBmWzJdKnJlW2krMV0gKyBmWzFdKnJlW2krMl0gKyBmWzBdKnJlW2krM107 CisgICAgICAgIGltW2krMF0gKz0gcypmYWN0b3Jfb2RkOworCisgICAgICAgIHMgPSBmWzZdKnJl W2ktMl0gKyBmWzVdKnJlW2ktMV0gKyBmWzRdKnJlW2ldICsKKyAgICAgICAgICAgIGZbM10qcmVb aSsxXSArCisgICAgICAgICAgICBmWzJdKnJlW2krMl0gKyBmWzFdKnJlW2krM10gKyBmWzBdKnJl W2krNF07CisgICAgICAgIGltW2krMV0gKz0gcypmYWN0b3JfZXZlbjsKKyAgICB9CisKKyAgICBp ID0gbGVuIC0gMzsKKyAgICBzID0gZls2XSpyZVtpLTNdICsgZls1XSpyZVtpLTJdICsgZls0XSpy ZVtpLTFdICsKKyAgICAgICAgZlszXSpyZVtpXSArCisgICAgICAgIGZbMl0qcmVbaSsxXSArIGZb MV0qcmVbaSsyXSArIGZbMF0qcmVbaSsyXTsKKyAgICBpbVtpXSArPSBzKmZhY3Rvcl9vZGQ7CisK KyAgICBpID0gbGVuIC0gMjsKKyAgICBzID0gZls2XSpyZVtpLTNdICsgZls1XSpyZVtpLTJdICsg Zls0XSpyZVtpLTFdICsKKyAgICAgICAgZlszXSpyZVtpXSArCisgICAgICAgIGZbMl0qcmVbaSsx XSArIGZbMV0qcmVbaSsxXSArIGZbMF0qcmVbaV07CisgICAgaW1baV0gKz0gcypmYWN0b3JfZXZl bjsKKworICAgIGkgPSBsZW4gLSAxOworICAgIHMgPSBmWzZdKnJlW2ktM10gKyBmWzVdKnJlW2kt Ml0gKyBmWzRdKnJlW2ktMV0gKworICAgICAgICBmWzNdKnJlW2ldICsKKyAgICAgICAgZlsyXSpy ZVtpXSArIGZbMV0qcmVbaS0xXSArIGZbMF0qcmVbaS0yXTsKKyAgICBpbVtpXSArPSBzKmZhY3Rv cl9vZGQ7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGx5X2NvbXBsZXhfc3RlcmVvKEFBQ0RlY0NvbnRl eHQgKmFjLCBDaGFubmVsRWxlbWVudCAqY3BlKQoreworICAgIEFBQ1VzYWNTdGVyZW8gKnVzID0g JmNwZS0+dXM7CisgICAgSW5kaXZpZHVhbENoYW5uZWxTdHJlYW0gKmljcyA9ICZjcGUtPmNoWzBd LmljczsKKyAgICBmbG9hdCAqY29lZjEgPSBjcGUtPmNoWzBdLmNvZWZmczsKKyAgICBmbG9hdCAq Y29lZjIgPSBjcGUtPmNoWzFdLmNvZWZmczsKKyAgICBmbG9hdCAqZG1peF9pbSA9IHVzLT5kbWl4 X2ltOworCisgICAgZm9yIChpbnQgZyA9IDA7IGcgPCBpY3MtPm51bV93aW5kb3dfZ3JvdXBzOyBn KyspIHsKKyAgICAgICAgdW5zaWduZWQgZ19sZW4gPSBpY3MtPmdyb3VwX2xlbltnXTsKKyAgICAg ICAgZm9yIChpbnQgc2ZiID0gMDsgc2ZiIDwgY3BlLT5tYXhfc2ZiX3N0ZTsgc2ZiKyspIHsKKyAg ICAgICAgICAgIGludCBvZmYgPSBpY3MtPnN3Yl9vZmZzZXRbc2ZiXTsKKyAgICAgICAgICAgIGlu dCBjYl9sZW4gPSBpY3MtPnN3Yl9vZmZzZXRbc2ZiICsgMV0gLSBvZmY7CisKKyAgICAgICAgICAg IGZsb2F0ICpjMSA9IGNvZWYxICsgb2ZmOworICAgICAgICAgICAgZmxvYXQgKmMyID0gY29lZjIg KyBvZmY7CisgICAgICAgICAgICBmbG9hdCAqZG1faW0gPSBkbWl4X2ltICsgb2ZmOworICAgICAg ICAgICAgZmxvYXQgYWxwaGFfcmUgPSB1cy0+YWxwaGFfcV9yZVtnKmNwZS0+bWF4X3NmYl9zdGUg KyBzZmJdOworICAgICAgICAgICAgZmxvYXQgYWxwaGFfaW0gPSB1cy0+YWxwaGFfcV9pbVtnKmNw ZS0+bWF4X3NmYl9zdGUgKyBzZmJdOworCisgICAgICAgICAgICBpZiAoIXVzLT5wcmVkX3VzZWRb ZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiXSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwor ICAgICAgICAgICAgaWYgKCFjcGUtPnVzLnByZWRfZGlyKSB7CisgICAgICAgICAgICAgICAgZm9y IChpbnQgZ3JvdXAgPSAwOyBncm91cCA8ICh1bnNpZ25lZClnX2xlbjsKKyAgICAgICAgICAgICAg ICAgICAgIGdyb3VwKyssIGMxICs9IDEyOCwgYzIgKz0gMTI4LCBkbV9pbSArPSAxMjgpIHsKKyAg ICAgICAgICAgICAgICAgICAgZm9yIChpbnQgeiA9IDA7IHogPCBjYl9sZW47IHorKykgeworICAg ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc2lkZTsKKyAgICAgICAgICAgICAgICAgICAgICAg IHNpZGUgPSBjMlt6XSAtIGFscGhhX3JlKmMxW3pdIC0gYWxwaGFfaW0qZG1faW1bel07CisgICAg ICAgICAgICAgICAgICAgICAgICBjMlt6XSA9IGMxW3pdIC0gc2lkZTsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGMxW3pdID0gYzFbel0gKyBzaWRlOworICAgICAgICAgICAgICAgICAgICB9Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBm b3IgKGludCBncm91cCA9IDA7IGdyb3VwIDwgKHVuc2lnbmVkKWdfbGVuOworICAgICAgICAgICAg ICAgICAgICAgZ3JvdXArKywgYzEgKz0gMTI4LCBjMiArPSAxMjgsIGRtX2ltICs9IDEyOCkgewor ICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB6ID0gMDsgeiA8IGNiX2xlbjsgeisrKSB7Cisg ICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBtaWQ7CisgICAgICAgICAgICAgICAgICAgICAg ICBtaWQgPSBjMlt6XSAtIGFscGhhX3JlKmMxW3pdIC0gYWxwaGFfaW0qZG1faW1bel07CisgICAg ICAgICAgICAgICAgICAgICAgICBjMlt6XSA9IG1pZCAtIGMxW3pdOworICAgICAgICAgICAgICAg ICAgICAgICAgYzFbel0gPSBtaWQgKyBjMVt6XTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvZWYx ICs9IGdfbGVuIDw8IDc7CisgICAgICAgIGNvZWYyICs9IGdfbGVuIDw8IDc7CisgICAgICAgIGRt aXhfaW0gKz0gZ19sZW4gPDwgNzsKKyAgICB9Cit9CisKK3N0YXRpYyBjb25zdCBmbG9hdCAqY29t cGxleF9zdGVyZW9fZ2V0X2ZpbHRlcihDaGFubmVsRWxlbWVudCAqY3BlLCBpbnQgaXNfcHJldikK K3sKKyAgICBpbnQgd2luLCBzaGFwZTsKKyAgICBpZiAoIWlzX3ByZXYpIHsKKyAgICAgICAgc3dp dGNoIChjcGUtPmNoWzBdLmljcy53aW5kb3dfc2VxdWVuY2VbMF0pIHsKKyAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgY2FzZSBPTkxZX0xPTkdfU0VRVUVOQ0U6CisgICAgICAgIGNhc2UgRUlHSFRf U0hPUlRfU0VRVUVOQ0U6CisgICAgICAgICAgICB3aW4gPSAwOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIGNhc2UgTE9OR19TVEFSVF9TRVFVRU5DRToKKyAgICAgICAgICAgIHdpbiA9IDE7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMT05HX1NUT1BfU0VRVUVOQ0U6Cisg ICAgICAgICAgICB3aW4gPSAyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg ICAgICBpZiAoY3BlLT5jaFswXS5pY3MudXNlX2tiX3dpbmRvd1swXSA9PSAwICYmCisgICAgICAg ICAgICBjcGUtPmNoWzBdLmljcy51c2Vfa2Jfd2luZG93WzFdID09IDApCisgICAgICAgICAgICBz aGFwZSA9IDA7CisgICAgICAgIGVsc2UgaWYgKGNwZS0+Y2hbMF0uaWNzLnVzZV9rYl93aW5kb3db MF0gPT0gMSAmJgorICAgICAgICAgICAgICAgICBjcGUtPmNoWzBdLmljcy51c2Vfa2Jfd2luZG93 WzFdID09IDEpCisgICAgICAgICAgICBzaGFwZSA9IDE7CisgICAgICAgIGVsc2UgaWYgKGNwZS0+ Y2hbMF0uaWNzLnVzZV9rYl93aW5kb3dbMF0gPT0gMCAmJgorICAgICAgICAgICAgICAgICBjcGUt PmNoWzBdLmljcy51c2Vfa2Jfd2luZG93WzFdID09IDEpCisgICAgICAgICAgICBzaGFwZSA9IDI7 CisgICAgICAgIGVsc2UgaWYgKGNwZS0+Y2hbMF0uaWNzLnVzZV9rYl93aW5kb3dbMF0gPT0gMSAm JgorICAgICAgICAgICAgICAgICBjcGUtPmNoWzBdLmljcy51c2Vfa2Jfd2luZG93WzFdID09IDAp CisgICAgICAgICAgICBzaGFwZSA9IDM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNoYXBl ID0gMzsKKyAgICB9IGVsc2UgeworICAgICAgICB3aW4gPSBjcGUtPmNoWzBdLmljcy53aW5kb3df c2VxdWVuY2VbMF0gPT0gTE9OR19TVE9QX1NFUVVFTkNFOworICAgICAgICBzaGFwZSA9IGNwZS0+ Y2hbMF0uaWNzLnVzZV9rYl93aW5kb3dbMV07CisgICAgfQorCisgICAgcmV0dXJuIGZmX2FhY191 c2FjX21kc3RfZmlsdF9jdXJbd2luXVtzaGFwZV07Cit9CisKK3N0YXRpYyB2b2lkIHNwZWN0cnVt X2RlY29kZShBQUNEZWNDb250ZXh0ICphYywgQUFDVVNBQ0NvbmZpZyAqdXNhYywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBDaGFubmVsRWxlbWVudCAqY3BlLCBpbnQgbmJfY2hhbm5lbHMp Cit7CisgICAgQUFDVXNhY1N0ZXJlbyAqdXMgPSAmY3BlLT51czsKKworICAgIGZvciAoaW50IGNo ID0gMDsgY2ggPCBuYl9jaGFubmVsczsgY2grKykgeworICAgICAgICBTaW5nbGVDaGFubmVsRWxl bWVudCAqc2NlID0gJmNwZS0+Y2hbY2hdOworICAgICAgICBBQUNVc2FjRWxlbURhdGEgKnVlID0g JnNjZS0+dWU7CisKKyAgICAgICAgc3BlY3RydW1fc2NhbGUoYWMsIHNjZSwgdWUpOworICAgIH0K KworICAgIGlmIChuYl9jaGFubmVscyA+IDEgJiYgdXMtPmNvbW1vbl93aW5kb3cpIHsKKyAgICAg ICAgaWYgKHVzLT5tc19tYXNrX21vZGUgPT0gMykgeworICAgICAgICAgICAgY29uc3QgZmxvYXQg KmZpbHQ7CisgICAgICAgICAgICBjb21wbGV4X3N0ZXJlb19kb3dubWl4X2N1cihhYywgY3BlLCB1 cy0+ZG1peF9yZSk7CisgICAgICAgICAgICBjb21wbGV4X3N0ZXJlb19kb3dubWl4X3ByZXYoYWMs IGNwZSwgdXMtPnByZXZfZG1peF9yZSk7CisKKyAgICAgICAgICAgIGZpbHQgPSBjb21wbGV4X3N0 ZXJlb19nZXRfZmlsdGVyKGNwZSwgMCk7CisgICAgICAgICAgICBjb21wbGV4X3N0ZXJlb19pbnRl cnBvbGF0ZV9pbWFnKHVzLT5kbWl4X2ltLCB1cy0+ZG1peF9yZSwgZmlsdCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhYy0+Y29yZV9mcmFtZV9sZW4sIDEs IDEpOworICAgICAgICAgICAgaWYgKHVzLT51c2VfcHJldl9mcmFtZSkgeworICAgICAgICAgICAg ICAgIGZpbHQgPSBjb21wbGV4X3N0ZXJlb19nZXRfZmlsdGVyKGNwZSwgMSk7CisgICAgICAgICAg ICAgICAgY29tcGxleF9zdGVyZW9faW50ZXJwb2xhdGVfaW1hZyh1cy0+ZG1peF9pbSwgdXMtPnBy ZXZfZG1peF9yZSwgZmlsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVzYWMtPmNvcmVfZnJhbWVfbGVuLCAtMSwgMSk7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICAgIGFwcGx5X2NvbXBsZXhfc3RlcmVvKGFjLCBjcGUpOworICAgICAgICB9IGVs c2UgaWYgKHVzLT5tc19tYXNrX21vZGUgPiAwKSB7CisgICAgICAgICAgICBhYy0+ZHNwLmFwcGx5 X21pZF9zaWRlX3N0ZXJlbyhhYywgY3BlKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIFNh dmUgY29lZmZpY2llbnRzIGFuZCBhbHBoYSB2YWx1ZXMgZm9yIHByZWRpY3Rpb24gcmVhc29ucyAq LworICAgIGlmIChuYl9jaGFubmVscyA+IDEpIHsKKyAgICAgICAgQUFDVXNhY1N0ZXJlbyAqdXMg PSAmY3BlLT51czsKKyAgICAgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBj aCsrKSB7CisgICAgICAgICAgICBTaW5nbGVDaGFubmVsRWxlbWVudCAqc2NlID0gJmNwZS0+Y2hb Y2hdOworICAgICAgICAgICAgbWVtY3B5KHNjZS0+cHJldl9jb2VmZnMsIHNjZS0+Y29lZmZzLCBz aXplb2Yoc2NlLT5jb2VmZnMpKTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodXMtPnByZXZf YWxwaGFfcV9yZSwgdXMtPmFscGhhX3FfcmUsIHNpemVvZih1cy0+YWxwaGFfcV9yZSkpOworICAg ICAgICBtZW1jcHkodXMtPnByZXZfYWxwaGFfcV9pbSwgdXMtPmFscGhhX3FfaW0sIHNpemVvZih1 cy0+YWxwaGFfcV9pbSkpOworICAgIH0KKworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9j aGFubmVsczsgY2grKykgeworICAgICAgICBTaW5nbGVDaGFubmVsRWxlbWVudCAqc2NlID0gJmNw ZS0+Y2hbY2hdOworCisgICAgICAgIC8qIEFwcGx5IFROUyAqLworICAgICAgICBpZiAoc2NlLT50 bnMucHJlc2VudCkKKyAgICAgICAgICAgIGFjLT5kc3AuYXBwbHlfdG5zKHNjZS0+Y29lZmZzLCAm c2NlLT50bnMsICZzY2UtPmljcywgMSk7CisKKyAgICAgICAgYWMtPm9jWzFdLm00YWMuZnJhbWVf bGVuZ3RoX3Nob3J0ID8gYWMtPmRzcC5pbWRjdF9hbmRfd2luZG93aW5nXzc2OChhYywgc2NlKSA6 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjLT5kc3AuaW1k Y3RfYW5kX3dpbmRvd2luZyhhYywgc2NlKTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQgZGVjb2Rl X3VzYWNfY29yZV9jb2RlcihBQUNEZWNDb250ZXh0ICphYywgQUFDVVNBQ0NvbmZpZyAqdXNhYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQUNVc2FjRWxlbUNvbmZpZyAqZWMs IENoYW5uZWxFbGVtZW50ICpjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R2V0Qml0Q29udGV4dCAqZ2IsIGludCBpbmRlcF9mbGFnLCBpbnQgbmJfY2hhbm5lbHMpCit7Cisg ICAgaW50IHJldDsKKyAgICBpbnQgYXJpdGhfcmVzZXRfZmxhZzsKKyAgICBBQUNVc2FjU3RlcmVv ICp1cyA9ICZjaGUtPnVzOworCisgICAgLyogTG9jYWwgc3ltYm9scyAqLworICAgIHVpbnQ4X3Qg Z2xvYmFsX2dhaW47CisKKyAgICB1cy0+Y29tbW9uX3dpbmRvdyA9IDA7CisgICAgY2hlLT5jaFsw XS50bnMucHJlc2VudCA9IGNoZS0+Y2hbMV0udG5zLnByZXNlbnQgPSAwOworCisgICAgZm9yIChp bnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIFNpbmdsZUNoYW5u ZWxFbGVtZW50ICpzY2UgPSAmY2hlLT5jaFtjaF07CisgICAgICAgIEFBQ1VzYWNFbGVtRGF0YSAq dWUgPSAmc2NlLT51ZTsKKworICAgICAgICB1ZS0+Y29yZV9tb2RlID0gZ2V0X2JpdHMxKGdiKTsK KyAgICB9CisKKyAgICBpZiAobmJfY2hhbm5lbHMgPT0gMikgeworICAgICAgICByZXQgPSBkZWNv ZGVfdXNhY19zdGVyZW9faW5mbyhhYywgdXNhYywgZWMsIGNoZSwgZ2IsIGluZGVwX2ZsYWcpOwor ICAgICAgICBpZiAocmV0KQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICBm b3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAgU2luZ2xl Q2hhbm5lbEVsZW1lbnQgKnNjZSA9ICZjaGUtPmNoW2NoXTsKKyAgICAgICAgSW5kaXZpZHVhbENo YW5uZWxTdHJlYW0gKmljcyA9ICZzY2UtPmljczsKKyAgICAgICAgQUFDVXNhY0VsZW1EYXRhICp1 ZSA9ICZzY2UtPnVlOworCisgICAgICAgIGlmICh1ZS0+Y29yZV9tb2RlKSB7IC8qIGxwZF9jaGFu bmVsX3N0cmVhbSAqLworICAgICAgICAgICAgcmV0ID0gZmZfYWFjX2xkcF9wYXJzZV9jaGFubmVs X3N0cmVhbShhYywgdXNhYywgdWUsIGdiKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKG5iX2No YW5uZWxzID09IDEpIHx8CisgICAgICAgICAgICAoY2hlLT5jaFswXS51ZS5jb3JlX21vZGUgIT0g Y2hlLT5jaFsxXS51ZS5jb3JlX21vZGUpKQorICAgICAgICAgICAgc2NlLT50bnMucHJlc2VudCA9 IGdldF9iaXRzMShnYik7CisKKyAgICAgICAgLyogZmRfY2hhbm5lbF9zdHJlYW0gKi8KKyAgICAg ICAgZ2xvYmFsX2dhaW4gPSBnZXRfYml0cyhnYiwgOCk7CisKKyAgICAgICAgdWUtPm5vaXNlLmxl dmVsID0gMDsKKyAgICAgICAgaWYgKGVjLT5ub2lzZV9maWxsKSB7CisgICAgICAgICAgICB1ZS0+ bm9pc2UubGV2ZWwgPSBnZXRfYml0cyhnYiwgMyk7CisgICAgICAgICAgICB1ZS0+bm9pc2Uub2Zm c2V0ID0gZ2V0X2JpdHMoZ2IsIDUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCF1cy0+Y29t bW9uX3dpbmRvdykgeworICAgICAgICAgICAgLyogaWNzX2luZm8oKSAqLworICAgICAgICAgICAg aWNzLT53aW5kb3dfc2VxdWVuY2VbMV0gPSBpY3MtPndpbmRvd19zZXF1ZW5jZVswXTsKKyAgICAg ICAgICAgIGljcy0+d2luZG93X3NlcXVlbmNlWzBdID0gZ2V0X2JpdHMoZ2IsIDIpOworICAgICAg ICAgICAgaWNzLT51c2Vfa2Jfd2luZG93WzFdID0gaWNzLT51c2Vfa2Jfd2luZG93WzBdOworICAg ICAgICAgICAgaWNzLT51c2Vfa2Jfd2luZG93WzBdID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAg ICAgIGlmIChpY3MtPndpbmRvd19zZXF1ZW5jZVswXSA9PSBFSUdIVF9TSE9SVF9TRVFVRU5DRSkg eworICAgICAgICAgICAgICAgIGljcy0+bWF4X3NmYiA9IGdldF9iaXRzKGdiLCA0KTsKKyAgICAg ICAgICAgICAgICB1ZS0+c2NhbGVfZmFjdG9yX2dyb3VwaW5nID0gZ2V0X2JpdHMoZ2IsIDcpOwor ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpY3MtPm1heF9zZmIgPSBnZXRf Yml0cyhnYiwgNik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCA9IHNldHVwX3Nj ZShhYywgc2NlLCB1c2FjKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAg ICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAoZWMtPnR3X21kY3QgJiYg IXVzLT5jb21tb25fdHcpIHsKKyAgICAgICAgICAgIC8qIHR3X2RhdGEoKSAqLworICAgICAgICAg ICAgaWYgKGdldF9iaXRzMShnYikpIHsgLyogdHdfZGF0YV9wcmVzZW50ICovCisgICAgICAgICAg ICAgICAgLyogVGltZSB3YXJwaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYmFzZWxpbmUgcHJvZmls ZSBzdHJlYW1zLiAqLworICAgICAgICAgICAgICAgIGF2cHJpdl9yZXBvcnRfbWlzc2luZ19mZWF0 dXJlKGFjLT5hdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiQUFDIFVTQUMgdGltZXdhcnBpbmciKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9QQVRDSFdFTENPTUU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBy ZXQgPSBkZWNvZGVfdXNhY19zY2FsZV9mYWN0b3JzKGFjLCBzY2UsIGdiLCBnbG9iYWxfZ2Fpbik7 CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAg ICBhYy0+ZHNwLmRlcXVhbnRfc2NhbGVmYWN0b3JzKHNjZSk7CisKKyAgICAgICAgaWYgKHNjZS0+ dG5zLnByZXNlbnQpIHsKKyAgICAgICAgICAgIHJldCA9IGZmX2FhY19kZWNvZGVfdG5zKGFjLCAm c2NlLT50bnMsIGdiLCBpY3MpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAg ICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGFjX3NwZWN0cmFsX2Rh dGEgKi8KKyAgICAgICAgYXJpdGhfcmVzZXRfZmxhZyA9IGluZGVwX2ZsYWc7CisgICAgICAgIGlm ICghYXJpdGhfcmVzZXRfZmxhZykKKyAgICAgICAgICAgIGFyaXRoX3Jlc2V0X2ZsYWcgPSBnZXRf Yml0czEoZ2IpOworCisgICAgICAgIC8qIERlY29kZSBjb2VmZnMgKi8KKyAgICAgICAgbWVtc2V0 KCZzY2UtPmNvZWZmc1swXSwgMCwgMTAyNCpzaXplb2YoZmxvYXQpKTsKKyAgICAgICAgZm9yIChp bnQgd2luID0gMDsgd2luIDwgaWNzLT5udW1fd2luZG93czsgd2luKyspIHsKKyAgICAgICAgICAg IGludCBsZyA9IGljcy0+c3diX29mZnNldFtpY3MtPm1heF9zZmJdOworICAgICAgICAgICAgaW50 IE47CisgICAgICAgICAgICBpZiAoaWNzLT53aW5kb3dfc2VxdWVuY2VbMF0gPT0gRUlHSFRfU0hP UlRfU0VRVUVOQ0UpCisgICAgICAgICAgICAgICAgTiA9IHVzYWMtPmNvcmVfZnJhbWVfbGVuIC8g ODsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBOID0gdXNhYy0+Y29yZV9mcmFt ZV9sZW47CisKKyAgICAgICAgICAgIHJldCA9IGRlY29kZV9zcGVjdHJ1bV9hbmRfZGVxdWFudF9h YyhhYywgc2NlLT5jb2VmZnMgKyB3aW4qMTI4LCBnYiwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzY2UtPnNmLCAmdWUtPmFjLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaXRoX3Jlc2V0X2ZsYWcgJiYg KHdpbiA9PSAwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBsZywgTik7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICBy ZXR1cm4gcmV0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdldF9iaXRzMShnYikpIHsgLyog ZmFjX2RhdGFfcHJlc2VudCAqLworICAgICAgICAgICAgY29uc3QgdWludDE2X3QgbGVuXzggPSB1 c2FjLT5jb3JlX2ZyYW1lX2xlbiAvIDg7CisgICAgICAgICAgICBjb25zdCB1aW50MTZfdCBsZW5f MTYgPSB1c2FjLT5jb3JlX2ZyYW1lX2xlbiAvIDE2OworICAgICAgICAgICAgY29uc3QgdWludDE2 X3QgZmFjX2xlbiA9IGljcy0+d2luZG93X3NlcXVlbmNlWzBdID09IEVJR0hUX1NIT1JUX1NFUVVF TkNFID8gbGVuXzggOiBsZW5fMTY7CisgICAgICAgICAgICByZXQgPSBmZl9hYWNfcGFyc2VfZmFj X2RhdGEodWUsIGdiLCAxLCBmYWNfbGVuKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAg ICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzcGVjdHJ1 bV9kZWNvZGUoYWMsIHVzYWMsIGNoZSwgbmJfY2hhbm5lbHMpOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgcGFyc2VfYXVkaW9fcHJlcm9sbChBQUNEZWNDb250ZXh0ICphYywgR2V0 Qml0Q29udGV4dCAqZ2IpCit7CisgICAgaW50IHJldCA9IDA7CisgICAgR2V0Qml0Q29udGV4dCBn YmM7CisgICAgT3V0cHV0Q29uZmlndXJhdGlvbiAqb2MgPSAmYWMtPm9jWzFdOworICAgIE1QRUc0 QXVkaW9Db25maWcgKm00YWMgPSAmb2MtPm00YWM7CisgICAgTVBFRzRBdWRpb0NvbmZpZyBtNGFj X2JhayA9IG9jLT5tNGFjOworICAgIHVpbnQ4X3QgdGVtcF9kYXRhWzUxMl07CisgICAgdWludDhf dCAqdG1wX2J1ZiA9IHRlbXBfZGF0YTsKKyAgICBzaXplX3QgdG1wX2J1Zl9zaXplID0gc2l6ZW9m KHRlbXBfZGF0YSk7CisKKyAgICBhdl91bnVzZWQgaW50IGNyb3NzZmFkZTsKKyAgICBpbnQgbnVt X3ByZXJvbGxfZnJhbWVzOworCisgICAgaW50IGNvbmZpZ19sZW4gPSBnZXRfZXNjYXBlZF92YWx1 ZShnYiwgNCwgNCwgOCk7CisKKyAgICAvKiBJbXBsZW1lbnRhdGlvbnMgYXJlIGZyZWUgdG8gcGFk IHRoZSBjb25maWcgdG8gYW55IGxlbmd0aCwgc28gdXNlIGEKKyAgICAgKiBkaWZmZXJlbnQgcmVh ZGVyIGZvciB0aGlzLiAqLworICAgIGdiYyA9ICpnYjsKKyAgICByZXQgPSBmZl9hYWNfdXNhY19j b25maWdfZGVjb2RlKGFjLCBhYy0+YXZjdHgsICZnYmMsIG9jLCBtNGFjLT5jaGFuX2NvbmZpZyk7 CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgKm00YWMgPSBtNGFjX2JhazsKKyAgICAgICAg cmV0dXJuIHJldDsKKyAgICB9IGVsc2UgeworICAgICAgICBhYy0+b2NbMV0ubTRhYy5jaGFuX2Nv bmZpZyA9IDA7CisgICAgfQorCisgICAgLyogNy4xOC4zLjMgQml0cmF0ZSBhZGFwdGlvbgorICAg ICAqIElmIGNvbmZpZ3VyYXRpb24gZGlkbid0IGNoYW5nZSBhZnRlciBhcHBseWluZyBwcmVyb2xs LCBjb250aW51ZQorICAgICAqIHdpdGhvdXQgZGVjb2RpbmcgaXQuICovCisgICAgaWYgKCFtZW1j bXAobTRhYywgJm00YWNfYmFrLCBzaXplb2YobTRhY19iYWspKSkKKyAgICAgICAgcmV0dXJuIDA7 CisKKyAgICBza2lwX2JpdHNfbG9uZyhnYiwgY29uZmlnX2xlbio4KTsKKworICAgIGNyb3NzZmFk ZSA9IGdldF9iaXRzMShnYik7IC8qIGFwcGx5Q3Jvc3NmYWRlICovCisgICAgc2tpcF9iaXRzMShn Yik7IC8qIHJlc2VydmVkICovCisgICAgbnVtX3ByZXJvbGxfZnJhbWVzID0gZ2V0X2VzY2FwZWRf dmFsdWUoZ2IsIDIsIDQsIDApOyAvKiBudW1QcmVSb2xsRnJhbWVzICovCisKKyAgICBmb3IgKGlu dCBpID0gMDsgaSA8IG51bV9wcmVyb2xsX2ZyYW1lczsgaSsrKSB7CisgICAgICAgIGludCBnb3Rf ZnJhbWVfcHRyID0gMDsKKyAgICAgICAgaW50IGF1X2xlbiA9IGdldF9lc2NhcGVkX3ZhbHVlKGdi LCAxNiwgMTYsIDApOworCisgICAgICAgIGlmIChhdV9sZW4qOCA+IHRtcF9idWZfc2l6ZSkgewor ICAgICAgICAgICAgdWludDhfdCAqdG1wMjsKKyAgICAgICAgICAgIHRtcF9idWYgPSB0bXBfYnVm ID09IHRlbXBfZGF0YSA/IE5VTEwgOiB0bXBfYnVmOworICAgICAgICAgICAgdG1wMiA9IHJlYWxs b2ModG1wX2J1ZiwgYXVfbGVuKjgpOworICAgICAgICAgICAgaWYgKCF0bXAyKSB7CisgICAgICAg ICAgICAgICAgaWYgKHRtcF9idWYgIT0gdGVtcF9kYXRhKQorICAgICAgICAgICAgICAgICAgICBh dl9mcmVlKHRtcF9idWYpOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01FTSk7 CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0bXBfYnVmID0gdG1wMjsKKyAgICAgICAgfQor CisgICAgICAgIC8qIEJ5dGUgYWxpZ25tZW50IGlzIG5vdCBndWFyYW50ZWVkLiAqLworICAgICAg ICBmb3IgKGludCBpID0gMDsgaSA8IGF1X2xlbjsgaSsrKQorICAgICAgICAgICAgdG1wX2J1Zltp XSA9IGdldF9iaXRzKGdiLCA4KTsKKworICAgICAgICByZXQgPSBpbml0X2dldF9iaXRzOCgmZ2Jj LCB0bXBfYnVmLCBhdV9sZW4pOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgIHJldCA9IGZmX2FhY191c2FjX2RlY29kZV9mcmFtZShhYy0+YXZjdHgs IGFjLCAmZ2JjLCAmZ290X2ZyYW1lX3B0cik7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAg ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHRtcF9idWYgIT0gdGVtcF9kYXRhKQorICAg ICAgICBhdl9mcmVlKHRtcF9idWYpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg cGFyc2VfZXh0X2VsZShBQUNEZWNDb250ZXh0ICphYywgQUFDVXNhY0VsZW1Db25maWcgKmUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IpCit7CisgICAgdWludDhf dCAqdG1wOworICAgIHVpbnQ4X3QgcGxfZnJhZ19zdGFydCA9IDE7CisgICAgdWludDhfdCBwbF9m cmFnX2VuZCA9IDE7CisgICAgdWludDMyX3QgbGVuOworCisgICAgaWYgKCFnZXRfYml0czEoZ2Ip KSAvKiB1c2FjRXh0RWxlbWVudFByZXNlbnQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBp ZiAoZ2V0X2JpdHMxKGdiKSkgeyAvKiB1c2FjRXh0RWxlbWVudFVzZURlZmF1bHRMZW5ndGggKi8K KyAgICAgICAgbGVuID0gZS0+ZXh0LmRlZmF1bHRfbGVuOworICAgIH0gZWxzZSB7CisgICAgICAg IGxlbiA9IGdldF9iaXRzKGdiLCA4KTsgLyogdXNhY0V4dEVsZW1lbnRQYXlsb2FkTGVuZ3RoICov CisgICAgICAgIGlmIChsZW4gPT0gMjU1KQorICAgICAgICAgICAgbGVuICs9IGdldF9iaXRzKGdi LCAxNikgLSAyOworICAgIH0KKworICAgIGlmICghbGVuKQorICAgICAgICByZXR1cm4gMDsKKwor ICAgIGlmIChlLT5leHQucGF5bG9hZF9mcmFnKSB7CisgICAgICAgIHBsX2ZyYWdfc3RhcnQgPSBn ZXRfYml0czEoZ2IpOyAvKiB1c2FjRXh0RWxlbWVudFN0YXJ0ICovCisgICAgICAgIHBsX2ZyYWdf ZW5kID0gZ2V0X2JpdHMxKGdiKTsgLyogdXNhY0V4dEVsZW1lbnRTdG9wICovCisgICAgfQorCisg ICAgaWYgKHBsX2ZyYWdfc3RhcnQpCisgICAgICAgIGUtPmV4dC5wbF9kYXRhX29mZnNldCA9IDA7 CisKKyAgICAvKiBJZiBhbiBleHRlbnNpb24gc3RhcnRzIGFuZCBlbmRzIHRoaXMgcGFja2V0LCB3 ZSBjYW4gZGlyZWN0bHkgdXNlIGl0ICovCisgICAgaWYgKCEocGxfZnJhZ19zdGFydCAmJiBwbF9m cmFnX2VuZCkpIHsKKyAgICAgICAgdG1wID0gYXZfcmVhbGxvYyhlLT5leHQucGxfZGF0YSwgZS0+ ZXh0LnBsX2RhdGFfb2Zmc2V0ICsgbGVuKTsKKyAgICAgICAgaWYgKCF0bXApIHsKKyAgICAgICAg ICAgIGF2X2ZyZWUoZS0+ZXh0LnBsX2RhdGEpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Io RU5PTUVNKTsKKyAgICAgICAgfQorICAgICAgICBlLT5leHQucGxfZGF0YSA9IHRtcDsKKworICAg ICAgICAvKiBSZWFkb3V0IGRhdGEgdG8gYSBidWZmZXIgKi8KKyAgICAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBsZW47IGkrKykKKyAgICAgICAgICAgIGUtPmV4dC5wbF9kYXRhW2UtPmV4dC5wbF9k YXRhX29mZnNldCArIGldID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgIH0KKworICAgIGUtPmV4dC5w bF9kYXRhX29mZnNldCArPSBsZW47CisKKyAgICBpZiAocGxfZnJhZ19lbmQpIHsKKyAgICAgICAg aW50IHJldCA9IDA7CisgICAgICAgIGludCBzdGFydF9iaXRzID0gZ2V0X2JpdHNfY291bnQoZ2Ip OworICAgICAgICBjb25zdCBpbnQgcGxfbGVuID0gZS0+ZXh0LnBsX2RhdGFfb2Zmc2V0OworICAg ICAgICBHZXRCaXRDb250ZXh0ICpnYjIgPSBnYjsKKyAgICAgICAgR2V0Qml0Q29udGV4dCBnYmM7 CisgICAgICAgIGlmICghKHBsX2ZyYWdfc3RhcnQgJiYgcGxfZnJhZ19lbmQpKSB7CisgICAgICAg ICAgICByZXQgPSBpbml0X2dldF9iaXRzOCgmZ2JjLCBlLT5leHQucGxfZGF0YSwgcGxfbGVuKTsK KyAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisK KyAgICAgICAgICAgIGdiMiA9ICZnYmM7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKGUt PmV4dC50eXBlKSB7CisgICAgICAgIGNhc2UgSURfRVhUX0VMRV9GSUxMOgorICAgICAgICAgICAg LyogRmlsbGVyIGVsZW1lbnRzIGhhdmUgbm8gdXNhYmxlIHBheWxvYWQgKi8KKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICBjYXNlIElEX0VYVF9FTEVfQVVESU9QUkVST0xMOgorICAgICAgICAg ICAgcmV0ID0gcGFyc2VfYXVkaW9fcHJlcm9sbChhYywgZ2IyKTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogVGhpcyBzaG91bGQgbmV2ZXIgaGFw cGVuICovCisgICAgICAgICAgICBhdl9hc3NlcnQwKDApOworICAgICAgICB9CisgICAgICAgIGF2 X2ZyZWVwKCZlLT5leHQucGxfZGF0YSk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAg ICAgcmV0dXJuIHJldDsKKworICAgICAgICBza2lwX2JpdHNfbG9uZyhnYiwgcGxfbGVuKjggLSAo Z2V0X2JpdHNfY291bnQoZ2IpIC0gc3RhcnRfYml0cykpOworICAgIH0KKworICAgIHJldHVybiAw OworfQorCitpbnQgZmZfYWFjX3VzYWNfZGVjb2RlX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgQUFDRGVjQ29udGV4dCAqYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJp dENvbnRleHQgKmdiLCBpbnQgKmdvdF9mcmFtZV9wdHIpCit7CisgICAgaW50IHJldCwgbmJfY2hf ZWwsIGlzX2Rtb25vID0gMDsKKyAgICBpbnQgaW5kZXBfZmxhZywgc2FtcGxlcyA9IDA7CisgICAg aW50IGF1ZGlvX2ZvdW5kID0gMCwgc2NlX2NvdW50ID0gMDsKKyAgICBBVkZyYW1lICpmcmFtZSA9 IGFjLT5mcmFtZTsKKworICAgIGZmX2FhY19vdXRwdXRfY29uZmlndXJlKGFjLCBhYy0+b2NbMV0u bGF5b3V0X21hcCwgYWMtPm9jWzFdLmxheW91dF9tYXBfdGFncywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBhYy0+b2NbMV0uc3RhdHVzLCAwKTsKKworICAgIGluZGVwX2ZsYWcgPSBnZXRf Yml0czEoZ2IpOworCisgICAgbmJfY2hfZWwgPSAwOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwg YWMtPm9jWzFdLnVzYWMubmJfZWxlbXM7IGkrKykgeworICAgICAgICBBQUNVc2FjRWxlbUNvbmZp ZyAqZSA9ICZhYy0+b2NbMV0udXNhYy5lbGVtc1tpXTsKKyAgICAgICAgQ2hhbm5lbEVsZW1lbnQg KmNoZTsKKworICAgICAgICBzd2l0Y2ggKGUtPnR5cGUpIHsKKyAgICAgICAgY2FzZSBJRF9VU0FD X0xGRToKKyAgICAgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCisgICAgICAgIGNhc2UgSURfVVNB Q19TQ0U6CisgICAgICAgICAgICBjaGUgPSBmZl9hYWNfZ2V0X2NoZShhYywgVFlQRV9TQ0UsIG5i X2NoX2VsKyspOworICAgICAgICAgICAgaWYgKCFjaGUpIHsKKyAgICAgICAgICAgICAgICBhdl9s b2coYWMtPmF2Y3R4LCBBVl9MT0dfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAgICJjaGFu bmVsIGVsZW1lbnQgJWQuJWQgaXMgbm90IGFsbG9jYXRlZFxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgVFlQRV9TQ0UsIG5iX2NoX2VsIC0gMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldCA9IGRl Y29kZV91c2FjX2NvcmVfY29kZXIoYWMsICZhYy0+b2NbMV0udXNhYywgZSwgY2hlLCBnYiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXBfZmxhZywgMSk7Cisg ICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworCisg ICAgICAgICAgICBzY2VfY291bnQrKzsKKyAgICAgICAgICAgIGF1ZGlvX2ZvdW5kID0gMTsKKyAg ICAgICAgICAgIGNoZS0+cHJlc2VudCA9IDE7CisgICAgICAgICAgICBzYW1wbGVzID0gYWMtPm9j WzFdLm00YWMuZnJhbWVfbGVuZ3RoX3Nob3J0ID8gNzY4IDogMTAyNDsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBjYXNlIElEX1VTQUNfQ1BFOgorICAgICAgICAgICAgY2hlID0gZmZfYWFj X2dldF9jaGUoYWMsIFRZUEVfQ1BFLCBuYl9jaF9lbCsrKTsKKyAgICAgICAgICAgIGlmICghY2hl KSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGFjLT5hdmN0eCwgQVZfTE9HX0VSUk9SLAorICAg ICAgICAgICAgICAgICAgICAgICAiY2hhbm5lbCBlbGVtZW50ICVkLiVkIGlzIG5vdCBhbGxvY2F0 ZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIFRZUEVfU0NFLCBuYl9jaF9lbCAtIDEpOwor ICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAg fQorCisgICAgICAgICAgICByZXQgPSBkZWNvZGVfdXNhY19jb3JlX2NvZGVyKGFjLCAmYWMtPm9j WzFdLnVzYWMsIGUsIGNoZSwgZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGluZGVwX2ZsYWcsIDIpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAg ICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICAgICAgYXVkaW9fZm91bmQgPSAxOworICAg ICAgICAgICAgY2hlLT5wcmVzZW50ID0gMTsKKyAgICAgICAgICAgIHNhbXBsZXMgPSBhYy0+b2Nb MV0ubTRhYy5mcmFtZV9sZW5ndGhfc2hvcnQgPyA3NjggOiAxMDI0OworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgSURfVVNBQ19FWFQ6CisgICAgICAgICAgICByZXQgPSBwYXJzZV9l eHRfZWxlKGFjLCBlLCBnYik7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAg ICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK KyAgICBpZiAoYWMtPm9jWzFdLnN0YXR1cyAmJiBhdWRpb19mb3VuZCkgeworICAgICAgICBhdmN0 eC0+c2FtcGxlX3JhdGUgPSBhYy0+b2NbMV0ubTRhYy5zYW1wbGVfcmF0ZTsKKyAgICAgICAgYXZj dHgtPmZyYW1lX3NpemUgPSBzYW1wbGVzOworICAgICAgICBhYy0+b2NbMV0uc3RhdHVzID0gT0Nf TE9DS0VEOworICAgIH0KKworICAgIGlmICghZnJhbWUtPmRhdGFbMF0gJiYgc2FtcGxlcykgewor ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIm5vIGZyYW1lIGRhdGEgZm91bmRc biIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICBp ZiAoc2FtcGxlcykgeworICAgICAgICBmcmFtZS0+bmJfc2FtcGxlcyA9IHNhbXBsZXM7CisgICAg ICAgIGZyYW1lLT5zYW1wbGVfcmF0ZSA9IGF2Y3R4LT5zYW1wbGVfcmF0ZTsKKyAgICAgICAgZnJh bWUtPmZsYWdzID0gaW5kZXBfZmxhZyA/IEFWX0ZSQU1FX0ZMQUdfS0VZIDogMHgwOworICAgICAg ICAqZ290X2ZyYW1lX3B0ciA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXZfZnJhbWVfdW5y ZWYoYWMtPmZyYW1lKTsKKyAgICAgICAgZnJhbWUtPmZsYWdzID0gaW5kZXBfZmxhZyA/IEFWX0ZS QU1FX0ZMQUdfS0VZIDogMHgwOworICAgICAgICAqZ290X2ZyYW1lX3B0ciA9IDA7CisgICAgfQor CisgICAgLyogZm9yIGR1YWwtbW9ubyBhdWRpbyAoU0NFICsgU0NFKSAqLworICAgIGlzX2Rtb25v ID0gYWMtPmRtb25vX21vZGUgJiYgc2NlX2NvdW50ID09IDIgJiYKKyAgICAgICAgICAgICAgICFh dl9jaGFubmVsX2xheW91dF9jb21wYXJlKCZhYy0+b2NbMV0uY2hfbGF5b3V0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihBVkNoYW5uZWxMYXlvdXQpQVZfQ0hB Tk5FTF9MQVlPVVRfU1RFUkVPKTsKKyAgICBpZiAoaXNfZG1vbm8pIHsKKyAgICAgICAgaWYgKGFj LT5kbW9ub19tb2RlID09IDEpCisgICAgICAgICAgICBmcmFtZS0+ZGF0YVsxXSA9IGZyYW1lLT5k YXRhWzBdOworICAgICAgICBlbHNlIGlmIChhYy0+ZG1vbm9fbW9kZSA9PSAyKQorICAgICAgICAg ICAgZnJhbWUtPmRhdGFbMF0gPSBmcmFtZS0+ZGF0YVsxXTsKKyAgICB9CisKKyAgICByZXR1cm4g MDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWFjL2FhY2RlY191c2FjLmggYi9saWJhdmNv ZGVjL2FhYy9hYWNkZWNfdXNhYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjQxMTZhMjA3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL2FhYy9hYWNkZWNf dXNhYy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgTHlubmUg PGRldkBseW5uZS5lZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgor ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKwor I2lmbmRlZiBBVkNPREVDX0FBQ19BQUNERUNfVVNBQ19ICisjZGVmaW5lIEFWQ09ERUNfQUFDX0FB Q0RFQ19VU0FDX0gKKworI2luY2x1ZGUgImFhY2RlYy5oIgorCisjaW5jbHVkZSAibGliYXZjb2Rl Yy9nZXRfYml0cy5oIgorCitpbnQgZmZfYWFjX3VzYWNfY29uZmlnX2RlY29kZShBQUNEZWNDb250 ZXh0ICphYywgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsIE91dHB1dENvbmZpZ3VyYXRpb24gKm9jLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYW5uZWxfY29uZmlnKTsKKworaW50IGZmX2Fh Y191c2FjX3Jlc2V0X3N0YXRlKEFBQ0RlY0NvbnRleHQgKmFjLCBPdXRwdXRDb25maWd1cmF0aW9u ICpvYyk7CisKK2ludCBmZl9hYWNfdXNhY19kZWNvZGVfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LCBBQUNEZWNDb250ZXh0ICphYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0 Qml0Q29udGV4dCAqZ2IsIGludCAqZ290X2ZyYW1lX3B0cik7CisKKyNlbmRpZiAvKiBBVkNPREVD X0FBQ19BQUNERUNfVVNBQ19IICovCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhY3RhYi5jIGIv bGliYXZjb2RlYy9hYWN0YWIuYwppbmRleCAxOGFmYTY5YmFkLi43YjA0MDUzMWFhIDEwMDY0NAot LS0gYS9saWJhdmNvZGVjL2FhY3RhYi5jCisrKyBiL2xpYmF2Y29kZWMvYWFjdGFiLmMKQEAgLTE5 OTgsNiArMTk5OCwxMSBAQCBjb25zdCB1aW50OF90IGZmX3Ruc19tYXhfYmFuZHNfMTI4W10gPSB7 CiB9OwogLy8gQH0KIAorY29uc3QgdWludDhfdCBmZl91c2FjX25vaXNlX2ZpbGxfc3RhcnRfb2Zm c2V0WzJdWzJdID0geworICAgIHsgMTYwLCAyMCB9LAorICAgIHsgMTIwLCAxNSB9LAorfTsKKwog Y29uc3QgREVDTEFSRV9BTElHTkVEKDMyLCBmbG9hdCwgZmZfYWFjX2VsZF93aW5kb3dfNTEyKVsx OTIwXSA9IHsKICAgICAgMC4wMDMzODgzNCwgIDAuMDA1Njc3NDUsICAwLjAwODQ3Njc3LCAgMC4w MTE3MjY0MSwKICAgICAgMC4wMTUzMjU1NSwgIDAuMDE5MTc2NjQsICAwLjAyMzE4ODA5LCAgMC4w MjcyOTI1OSwKQEAgLTM4OTUsMyArMzkwMCw0MCBAQCBERUNMQVJFX0FMSUdORUQoMTYsIGNvbnN0 IGZsb2F0LCBmZl9hYWNfZGVlbXBoX3dlaWdodHMpWzE2XSA9IHsKICAgICAwLAogICAgIFVTQUNf RU1QSF9DT0VGRiwKIH07CisKK2NvbnN0IGludCBmZl9hYWNfdXNhY19zYW1wbGVyYXRlWzMyXSA9 IHsKKyAgICA5NjAwMCwgODgyMDAsIDY0MDAwLCA0ODAwMCwgNDQxMDAsIDMyMDAwLCAyNDAwMCwg MjIwNTAsCisgICAgMTYwMDAsIDEyMDAwLCAxMTAyNSwgIDgwMDAsICA3MzUwLCAgICAtMSwgICAg LTEsIDU3NjAwLAorICAgIDUxMjAwLCA0MDAwMCwgMzg0MDAsIDM0MTUwLCAyODgwMCwgMjU2MDAs IDIwMDAwLCAxOTIwMCwKKyAgICAxNzA3NSwgMTQ0MDAsIDEyODAwLCA5NjAwLCAgICAgLTEsICAg IC0xLCAgICAtMSwgICAgLTEsCit9OworCisvKiBXaW5kb3cgdHlwZSAob25seSBsb25nK2VpZ2h0 LCBzdGFydC9zdG9wL3N0b3BzdGFydCksIHNpbmUrc2luZSwga2JkK2tiZCwgc2luZStrYmQsIGti ZCtzaW5lICovCitjb25zdCBmbG9hdCBmZl9hYWNfdXNhY19tZHN0X2ZpbHRfY3VyWzQgLyogV2lu ZG93ICovXVs0IC8qIFNoYXBlICovXVs3XSA9Cit7CisgICAgeyB7IDAuMDAwMDAwLCAgMC4wMDAw MDAsICAwLjUwMDAwMCwgMC4wMDAwMDAsIC0wLjUwMDAwMCwgIDAuMDAwMDAwLCAgMC4wMDAwMDAg fSwKKyAgICAgIHsgMC4wOTE0OTcsICAwLjAwMDAwMCwgIDAuNTgxNDI3LCAwLjAwMDAwMCwgLTAu NTgxNDI3LCAgMC4wMDAwMDAsIC0wLjA5MTQ5NyB9LAorICAgICAgeyAwLjA0NTc0OCwgIDAuMDU3 MjM4LCAgMC41NDA3MTQsIDAuMDAwMDAwLCAtMC41NDA3MTQsIC0wLjA1NzIzOCwgLTAuMDQ1NzQ4 IH0sCisgICAgICB7IDAuMDQ1NzQ4LCAtMC4wNTcyMzgsICAwLjU0MDcxNCwgMC4wMDAwMDAsIC0w LjU0MDcxNCwgIDAuMDU3MjM4LCAtMC4wNDU3NDggfSB9LAorICAgIHsgeyAwLjEwMjY1OCwgIDAu MTAzNzkxLCAgMC41NjcxNDksIDAuMDAwMDAwLCAtMC41NjcxNDksIC0wLjEwMzc5MSwgLTAuMTAy NjU4IH0sCisgICAgICB7IDAuMTUwNTEyLCAgMC4wNDc5NjksICAwLjYwODU3NCwgMC4wMDAwMDAs IC0wLjYwODU3NCwgLTAuMDQ3OTY5LCAtMC4xNTA1MTIgfSwKKyAgICAgIHsgMC4xMDQ3NjMsICAw LjEwNTIwNywgIDAuNTY3ODYxLCAwLjAwMDAwMCwgLTAuNTY3ODYxLCAtMC4xMDUyMDcsIC0wLjEw NDc2MyB9LAorICAgICAgeyAwLjE0ODQwNiwgIDAuMDQ2NTUzLCAgMC42MDc4NjMsIDAuMDAwMDAw LCAtMC42MDc4NjMsIC0wLjA0NjU1MywgLTAuMTQ4NDA2IH0gfSwKKyAgICB7IHsgMC4xMDI2NTgs IC0wLjEwMzc5MSwgIDAuNTY3MTQ5LCAwLjAwMDAwMCwgLTAuNTY3MTQ5LCAgMC4xMDM3OTEsIC0w LjEwMjY1OCB9LAorICAgICAgeyAwLjE1MDUxMiwgLTAuMDQ3OTY5LCAgMC42MDg1NzQsIDAuMDAw MDAwLCAtMC42MDg1NzQsICAwLjA0Nzk2OSwgLTAuMTUwNTEyIH0sCisgICAgICB7IDAuMTQ4NDA2 LCAtMC4wNDY1NTMsICAwLjYwNzg2MywgMC4wMDAwMDAsIC0wLjYwNzg2MywgIDAuMDQ2NTUzLCAt MC4xNDg0MDYgfSwKKyAgICAgIHsgMC4xMDQ3NjMsIC0wLjEwNTIwNywgIDAuNTY3ODYxLCAwLjAw MDAwMCwgLTAuNTY3ODYxLCAgMC4xMDUyMDcsIC0wLjEwNDc2MyB9IH0sCisgICAgeyB7IDAuMjA1 MzE2LCAgMC4wMDAwMDAsICAwLjYzNDI5OCwgMC4wMDAwMDAsIC0wLjYzNDI5OCwgIDAuMDAwMDAw LCAtMC4yMDUzMTYgfSwKKyAgICAgIHsgMC4yMDk1MjYsICAwLjAwMDAwMCwgIDAuNjM1NzIyLCAw LjAwMDAwMCwgLTAuNjM1NzIyLCAgMC4wMDAwMDAsIC0wLjIwOTUyNiB9LAorICAgICAgeyAwLjIw NzQyMSwgIDAuMDAxNDE2LCAgMC42MzUwMTAsIDAuMDAwMDAwLCAtMC42MzUwMTAsIC0wLjAwMTQx NiwgLTAuMjA3NDIxIH0sCisgICAgICB7IDAuMjA3NDIxLCAtMC4wMDE0MTYsICAwLjYzNTAxMCwg MC4wMDAwMDAsIC0wLjYzNTAxMCwgIDAuMDAxNDE2LCAtMC4yMDc0MjEgfSB9Cit9OworCisvKiBX aW5kb3cgdHlwZSAoZXZlcnl0aGluZy9sb25nc3RvcCtzdG9wc3RhcnQpLCBzaW5lIG9yIGtiZCAq LworY29uc3QgZmxvYXQgZmZfYWFjX3VzYWNfbWRzdF9maWx0X3ByZXZbMiAvKiBXaW5kb3cgKi9d WzIgLyogc2luZS9rYmQgKi9dWzddID0KK3sKKyAgICB7IHsgMC4wMDAwMDAsIDAuMTA2MTAzLCAw LjI1MDAwMCwgMC4zMTgzMTAsIDAuMjUwMDAwLCAwLjEwNjEwMywgMC4wMDAwMDAgfSwKKyAgICAg IHsgMC4wNTk1MDksIDAuMTIzNzE0LCAwLjE4NjU3OSwgMC4yMTMwNzcsIDAuMTg2NTc5LCAwLjEy MzcxNCwgMC4wNTk1MDkgfSB9LAorICAgIHsgeyAwLjAzODQ5OCwgMC4wMzkyMTIsIDAuMDM5NjQ1 LCAwLjAzOTc5MCwgMC4wMzk2NDUsIDAuMDM5MjEyLCAwLjAzODQ5OCB9LAorICAgICAgeyAwLjAy NjE0MiwgMC4wMjY0MTMsIDAuMDI2NTc3LCAwLjAyNjYzMSwgMC4wMjY1NzcsIDAuMDI2NDEzLCAw LjAyNjE0MiB9IH0KK307CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhY3RhYi5oIGIvbGliYXZj b2RlYy9hYWN0YWIuaAppbmRleCA0ODFmYzU3ZDkzLi44ZGJiMjA5OGM1IDEwMDY0NAotLS0gYS9s aWJhdmNvZGVjL2FhY3RhYi5oCisrKyBiL2xpYmF2Y29kZWMvYWFjdGFiLmgKQEAgLTExNSw0ICsx MTUsMTQgQEAgZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgZmZfdG5zX21heF9iYW5kc181MTIgWzEzXTsK IGV4dGVybiBjb25zdCB1aW50OF90IGZmX3Ruc19tYXhfYmFuZHNfNDgwIFsxM107CiBleHRlcm4g Y29uc3QgdWludDhfdCBmZl90bnNfbWF4X2JhbmRzXzEyOCBbMTNdOwogCisvKiBbeF1beV0sIHgg PT0gMSAtPiBmcmFtZSBsZW4gaXMgNzY4IGZyYW1lcywgeSA9PSAxIC0+IGlzIGVpZ2h0X3Nob3J0 ICovCitleHRlcm4gY29uc3QgdWludDhfdCBmZl91c2FjX25vaXNlX2ZpbGxfc3RhcnRfb2Zmc2V0 WzJdWzJdOworCitleHRlcm4gY29uc3QgaW50IGZmX2FhY191c2FjX3NhbXBsZXJhdGVbMzJdOwor CisvKiBXaW5kb3cgdHlwZSAob25seSBsb25nK2VpZ2h0LCBzdGFydC9zdG9wL3N0b3BzdGFydCks IHNpbmUrc2luZSwga2JkK2tiZCwgc2luZStrYmQsIGtiZCtzaW5lICovCitleHRlcm4gY29uc3Qg ZmxvYXQgZmZfYWFjX3VzYWNfbWRzdF9maWx0X2N1cls0IC8qIFdpbmRvdyAqL11bNCAvKiBTaGFw ZSAqL11bN107CisvKiBXaW5kb3cgdHlwZSAoZXZlcnl0aGluZy9sb25nc3RvcCtzdG9wc3RhcnQp LCBzaW5lIG9yIGtiZCAqLworZXh0ZXJuIGNvbnN0IGZsb2F0IGZmX2FhY191c2FjX21kc3RfZmls dF9wcmV2WzIgLyogV2luZG93ICovXVsyIC8qIHNpbmUva2JkICovXVs3XTsKKwogI2VuZGlmIC8q IEFWQ09ERUNfQUFDVEFCX0ggKi8KLS0gCjIuNDMuMC4zODEuZ2I0MzVhOTZjZTgKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxp bmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1h bi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3Zl LCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAi dW5zdWJzY3JpYmUiLgo=