From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30784 invoked by alias); 11 Jul 2015 18:35:43 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 30775 invoked by uid 89); 11 Jul 2015 18:35:42 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-4.4 required=5.0 tests=AWL,BAYES_50,KAM_LAZY_DOMAIN_SECURITY,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Sat, 11 Jul 2015 18:35:39 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 51808A2C3C for ; Sat, 11 Jul 2015 18:35:38 +0000 (UTC) Received: from reynosa.quesejoda.com (vpn-48-202.rdu2.redhat.com [10.10.48.202]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id t6BIZaBU010611; Sat, 11 Jul 2015 14:35:37 -0400 Message-ID: <55A161F8.8010800@redhat.com> Date: Sat, 11 Jul 2015 18:35:00 -0000 From: Aldy Hernandez User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.7.0 MIME-Version: 1.0 To: Jakub Jelinek CC: gcc-patches Subject: Re: [gomp4.1] depend(sink) and depend(source) parsing for C References: <559EBC6C.70109@redhat.com> <20150709185315.GY10247@tucnak.redhat.com> <55A008FF.10609@redhat.com> In-Reply-To: <55A008FF.10609@redhat.com> Content-Type: multipart/mixed; boundary="------------030305050203090301070504" X-SW-Source: 2015-07/txt/msg00955.txt.bz2 This is a multi-part message in MIME format. --------------030305050203090301070504 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 432 It looks like the C++ bits are quite similar to the C ones. AFAICT, only numbers are allowed for the sink offsets, so no C++ iterators, which would likely complicate matters. If they are eventually allowed, we can implement them as a follow up. The attached patch addresses all your concerns plus includes the C++ implementation. The included test passes for both languages. I can work on Fortran next if you'd like. Aldy --------------030305050203090301070504 Content-Type: text/plain; charset=UTF-8; name="curr" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="curr" Content-length: 35836 ZGlmZiAtLWdpdCBhL2djYy9jL2MtcGFyc2VyLmMgYi9nY2MvYy9jLXBhcnNl ci5jCmluZGV4IGNkM2JkNWEuLjUwZWRhZjYgMTAwNjQ0Ci0tLSBhL2djYy9j L2MtcGFyc2VyLmMKKysrIGIvZ2NjL2MvYy1wYXJzZXIuYwpAQCAtMTE3MDEs NiArMTE3MDEsOTUgQEAgY19wYXJzZXJfb21wX2NsYXVzZV9zaW1kbGVuIChj X3BhcnNlciAqcGFyc2VyLCB0cmVlIGxpc3QpCiAgIHJldHVybiBjOwogfQog CisvKiBPcGVuTVAgNC4xOgorICAgdmVjOgorICAgICBpZGVudGlmaWVyIFsr Ly0gaW50ZWdlcl0KKyAgICAgdmVjICwgaWRlbnRpZmllciBbKy8tIGludGVn ZXJdCisqLworCitzdGF0aWMgdHJlZQorY19wYXJzZXJfb21wX2NsYXVzZV9k ZXBlbmRfc2luayAoY19wYXJzZXIgKnBhcnNlciwgbG9jYXRpb25fdCBjbGF1 c2VfbG9jLAorCQkJCSB0cmVlIGxpc3QpCit7CisgIHRyZWUgdmVjID0gTlVM TDsKKyAgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXNfbm90IChwYXJzZXIs IENQUF9OQU1FKQorICAgICAgfHwgY19wYXJzZXJfcGVla190b2tlbiAocGFy c2VyKS0+aWRfa2luZCAhPSBDX0lEX0lEKQorICAgIHsKKyAgICAgIGNfcGFy c2VyX2Vycm9yIChwYXJzZXIsICJleHBlY3RlZCBpZGVudGlmaWVyIik7Cisg ICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAgd2hpbGUgKGNfcGFyc2Vy X25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX05BTUUpCisJICYmIGNfcGFy c2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmlkX2tpbmQgPT0gQ19JRF9JRCkK KyAgICB7CisgICAgICB0cmVlIHQgPSBsb29rdXBfbmFtZSAoY19wYXJzZXJf cGVla190b2tlbiAocGFyc2VyKS0+dmFsdWUpOworICAgICAgdHJlZSBhZGRl bmQgPSBOVUxMOworCisgICAgICBpZiAodCA9PSBOVUxMX1RSRUUpCisJewor CSAgdW5kZWNsYXJlZF92YXJpYWJsZSAoY19wYXJzZXJfcGVla190b2tlbiAo cGFyc2VyKS0+bG9jYXRpb24sCisJCQkgICAgICAgY19wYXJzZXJfcGVla190 b2tlbiAocGFyc2VyKS0+dmFsdWUpOworCSAgdCA9IGVycm9yX21hcmtfbm9k ZTsKKwl9CisKKyAgICAgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNl cik7CisKKyAgICAgIGlmICh0ICE9IGVycm9yX21hcmtfbm9kZSkKKwl7CisJ ICBib29sIG5lZzsKKworCSAgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXMg KHBhcnNlciwgQ1BQX01JTlVTKSkKKwkgICAgbmVnID0gdHJ1ZTsKKwkgIGVs c2UgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX1BM VVMpKQorCSAgICBuZWcgPSBmYWxzZTsKKwkgIGVsc2UKKwkgICAgeworCSAg ICAgIGFkZGVuZCA9IGludGVnZXJfemVyb19ub2RlOworCSAgICAgIGdvdG8g YWRkX3RvX3ZlY3RvcjsKKwkgICAgfQorCSAgY19wYXJzZXJfY29uc3VtZV90 b2tlbiAocGFyc2VyKTsKKworCSAgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5f aXNfbm90IChwYXJzZXIsIENQUF9OVU1CRVIpKQorCSAgICB7CisJICAgICAg Y19wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4cGVjdGVkICU8aW50ZWdlciU+ Iik7CisJICAgICAgcmV0dXJuIGxpc3Q7CisJICAgIH0KKworCSAgYWRkZW5k ID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+dmFsdWU7CisJICBp ZiAoVFJFRV9DT0RFIChhZGRlbmQpICE9IElOVEVHRVJfQ1NUKQorCSAgICB7 CisJICAgICAgY19wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4cGVjdGVkICU8 aW50ZWdlciU+Iik7CisJICAgICAgcmV0dXJuIGxpc3Q7CisJICAgIH0KKwkg IGlmIChuZWcpCisJICAgIHsKKwkgICAgICBib29sIG92ZXJmbG93OworCSAg ICAgIHdpZGVfaW50IG9mZnNldCA9IHdpOjpuZWcgKGFkZGVuZCwgJm92ZXJm bG93KTsKKwkgICAgICBhZGRlbmQgPSB3aWRlX2ludF90b190cmVlIChUUkVF X1RZUEUgKGFkZGVuZCksIG9mZnNldCk7CisJICAgICAgaWYgKG92ZXJmbG93 KQorCQl3YXJuaW5nX2F0IChjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIp LT5sb2NhdGlvbiwKKwkJCSAgICBPUFRfV292ZXJmbG93LAorCQkJICAgICJv dmVyZmxvdyBpbiBpbXBsaWNpdCBjb25zdGFudCBjb252ZXJzaW9uIik7CisJ ICAgIH0KKwkgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisK KwlhZGRfdG9fdmVjdG9yOgorCSAgdmVjID0gdHJlZV9jb25zIChhZGRlbmQs IHQsIHZlYyk7CisKKwkgIGlmIChjX3BhcnNlcl9uZXh0X3Rva2VuX2lzX25v dCAocGFyc2VyLCBDUFBfQ09NTUEpKQorCSAgICBicmVhazsKKworCSAgY19w YXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKKwl9CisgICAgfQorCisg IHRyZWUgdSA9IGJ1aWxkX29tcF9jbGF1c2UgKGNsYXVzZV9sb2MsIE9NUF9D TEFVU0VfREVQRU5EKTsKKyAgT01QX0NMQVVTRV9ERVBFTkRfS0lORCAodSkg PSBPTVBfQ0xBVVNFX0RFUEVORF9TSU5LOworICBPTVBfQ0xBVVNFX0RFQ0wg KHUpID0gbnJldmVyc2UgKHZlYyk7CisgIE9NUF9DTEFVU0VfQ0hBSU4gKHUp ID0gbGlzdDsKKyAgcmV0dXJuIHU7Cit9CisKIC8qIE9wZW5NUCA0LjA6CiAg ICBkZXBlbmQgKCBkZXBlbmQta2luZDogdmFyaWFibGUtbGlzdCApCiAKQEAg LTExNzA4LDEwICsxMTc5Nyw5IEBAIGNfcGFyc2VyX29tcF9jbGF1c2Vfc2lt ZGxlbiAoY19wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0KQogICAgICBpbiB8 IG91dCB8IGlub3V0CiAKICAgIE9wZW5NUCA0LjE6Ci0gICBkZXBlbmQgKCBk ZXBlbmQtbG9vcC1raW5kIFsgOiB2ZWMgXSApCisgICBkZXBlbmQgKCBzb3Vy Y2UgKQogCi0gICBkZXBlbmQtbG9vcC1raW5kOgotICAgICBzb3VyY2UgfCBz aW5rICAqLworICAgZGVwZW5kICggc2luayAgOiB2ZWMgKSAgKi8KIAogc3Rh dGljIHRyZWUKIGNfcGFyc2VyX29tcF9jbGF1c2VfZGVwZW5kIChjX3BhcnNl ciAqcGFyc2VyLCB0cmVlIGxpc3QpCkBAIC0xMTc1NCwxNiArMTE4NDIsMTkg QEAgY19wYXJzZXJfb21wX2NsYXVzZV9kZXBlbmQgKGNfcGFyc2VyICpwYXJz ZXIsIHRyZWUgbGlzdCkKICAgICAgIHJldHVybiBjOwogICAgIH0KIAotICAv KiBGSVhNRTogSGFuZGxlIE9NUF9DTEFVU0VfREVQRU5EX1NJTksuICAqLwot CiAgIGlmICghY19wYXJzZXJfcmVxdWlyZSAocGFyc2VyLCBDUFBfQ09MT04s ICJleHBlY3RlZCAlPDolPiIpKQogICAgIGdvdG8gcmVzeW5jX2ZhaWw7CiAK LSAgbmwgPSBjX3BhcnNlcl9vbXBfdmFyaWFibGVfbGlzdCAocGFyc2VyLCBj bGF1c2VfbG9jLAotCQkJCSAgIE9NUF9DTEFVU0VfREVQRU5ELCBsaXN0KTsK KyAgaWYgKGtpbmQgPT0gT01QX0NMQVVTRV9ERVBFTkRfU0lOSykKKyAgICBu bCA9IGNfcGFyc2VyX29tcF9jbGF1c2VfZGVwZW5kX3NpbmsgKHBhcnNlciwg Y2xhdXNlX2xvYywgbGlzdCk7CisgIGVsc2UKKyAgICB7CisgICAgICBubCA9 IGNfcGFyc2VyX29tcF92YXJpYWJsZV9saXN0IChwYXJzZXIsIGNsYXVzZV9s b2MsCisJCQkJICAgICAgIE9NUF9DTEFVU0VfREVQRU5ELCBsaXN0KTsKIAot ICBmb3IgKGMgPSBubDsgYyAhPSBsaXN0OyBjID0gT01QX0NMQVVTRV9DSEFJ TiAoYykpCi0gICAgT01QX0NMQVVTRV9ERVBFTkRfS0lORCAoYykgPSBraW5k OworICAgICAgZm9yIChjID0gbmw7IGMgIT0gbGlzdDsgYyA9IE9NUF9DTEFV U0VfQ0hBSU4gKGMpKQorCU9NUF9DTEFVU0VfREVQRU5EX0tJTkQgKGMpID0g a2luZDsKKyAgICB9CiAKICAgY19wYXJzZXJfc2tpcF91bnRpbF9mb3VuZCAo cGFyc2VyLCBDUFBfQ0xPU0VfUEFSRU4sICJleHBlY3RlZCAlPCklPiIpOwog ICByZXR1cm4gbmw7CmRpZmYgLS1naXQgYS9nY2MvYy9jLXR5cGVjay5jIGIv Z2NjL2MvYy10eXBlY2suYwppbmRleCA0NjljZDg4Li4wYjMzMmU4IDEwMDY0 NAotLS0gYS9nY2MvYy9jLXR5cGVjay5jCisrKyBiL2djYy9jL2MtdHlwZWNr LmMKQEAgLTEyNDg5LDYgKzEyNDg5LDExIEBAIGNfZmluaXNoX29tcF9jbGF1 c2VzICh0cmVlIGNsYXVzZXMsIGJvb2wgZGVjbGFyZV9zaW1kKQogCQkJICA9 PSBPTVBfQ0xBVVNFX0RFUEVORF9TT1VSQ0UpOwogCSAgICAgIGJyZWFrOwog CSAgICB9CisJICBpZiAoT01QX0NMQVVTRV9ERVBFTkRfS0lORCAoYykgPT0g T01QX0NMQVVTRV9ERVBFTkRfU0lOSykKKwkgICAgeworCSAgICAgIGdjY19h c3NlcnQgKFRSRUVfQ09ERSAodCkgPT0gVFJFRV9MSVNUKTsKKwkgICAgICBi cmVhazsKKwkgICAgfQogCSAgaWYgKFRSRUVfQ09ERSAodCkgPT0gVFJFRV9M SVNUKQogCSAgICB7CiAJICAgICAgaWYgKGhhbmRsZV9vbXBfYXJyYXlfc2Vj dGlvbnMgKGMpKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvcmV0eXBlcy5oIGIvZ2Nj L2NvcmV0eXBlcy5oCmluZGV4IGUzY2VjMDEuLmE3MDg4OTYgMTAwNjQ0Ci0t LSBhL2djYy9jb3JldHlwZXMuaAorKysgYi9nY2MvY29yZXR5cGVzLmgKQEAg LTExMyw2ICsxMTMsNyBAQCBzdHJ1Y3QgZ29tcF9hdG9taWNfbG9hZDsKIHN0 cnVjdCBnb21wX2F0b21pY19zdG9yZTsKIHN0cnVjdCBnb21wX2NvbnRpbnVl Owogc3RydWN0IGdvbXBfY3JpdGljYWw7CitzdHJ1Y3QgZ29tcF9vcmRlcmVk Owogc3RydWN0IGdvbXBfZm9yOwogc3RydWN0IGdvbXBfcGFyYWxsZWw7CiBz dHJ1Y3QgZ29tcF90YXNrOwpkaWZmIC0tZ2l0IGEvZ2NjL2NwL3BhcnNlci5j IGIvZ2NjL2NwL3BhcnNlci5jCmluZGV4IGIxOGY1NGYuLjdlMGE4NTc3IDEw MDY0NAotLS0gYS9nY2MvY3AvcGFyc2VyLmMKKysrIGIvZ2NjL2NwL3BhcnNl ci5jCkBAIC0yOTMxNCw2ICsyOTMxNCw5OSBAQCBjcF9wYXJzZXJfb21wX2Ns YXVzZV9zaW1kbGVuIChjcF9wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0LAog ICByZXR1cm4gYzsKIH0KIAorLyogT3Blbk1QIDQuMToKKyAgIHZlYzoKKyAg ICAgaWRlbnRpZmllciBbKy8tIGludGVnZXJdCisgICAgIHZlYyAsIGlkZW50 aWZpZXIgWysvLSBpbnRlZ2VyXQorKi8KKworc3RhdGljIHRyZWUKK2NwX3Bh cnNlcl9vbXBfY2xhdXNlX2RlcGVuZF9zaW5rIChjcF9wYXJzZXIgKnBhcnNl ciwgbG9jYXRpb25fdCBjbGF1c2VfbG9jLAorCQkJCSAgdHJlZSBsaXN0KQor eworICB0cmVlIHZlYyA9IE5VTEw7CisKKyAgaWYgKGNwX2xleGVyX25leHRf dG9rZW5faXNfbm90IChwYXJzZXItPmxleGVyLCBDUFBfTkFNRSkpCisgICAg eworICAgICAgY3BfcGFyc2VyX2Vycm9yIChwYXJzZXIsICJleHBlY3RlZCBp ZGVudGlmaWVyIik7CisgICAgICByZXR1cm4gbGlzdDsKKyAgICB9CisKKyAg d2hpbGUgKGNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+bGV4ZXIs IENQUF9OQU1FKSkKKyAgICB7CisgICAgICBsb2NhdGlvbl90IGlkX2xvYyA9 IGNwX2xleGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4ZXIpLT5sb2NhdGlv bjsKKyAgICAgIHRyZWUgdCwgaWRlbnRpZmllciA9IGNwX3BhcnNlcl9pZGVu dGlmaWVyIChwYXJzZXIpOworICAgICAgdHJlZSBhZGRlbmQgPSBOVUxMOwor CisgICAgICBpZiAoaWRlbnRpZmllciA9PSBlcnJvcl9tYXJrX25vZGUpCisJ dCA9IGVycm9yX21hcmtfbm9kZTsKKyAgICAgIGVsc2UKKwl7CisJICB0ID0g Y3BfcGFyc2VyX2xvb2t1cF9uYW1lX3NpbXBsZQorCSAgICAgICAgKHBhcnNl ciwgaWRlbnRpZmllciwKKwkJIGNwX2xleGVyX3BlZWtfdG9rZW4gKHBhcnNl ci0+bGV4ZXIpLT5sb2NhdGlvbik7CisJICBpZiAodCA9PSBlcnJvcl9tYXJr X25vZGUpCisJICAgIGNwX3BhcnNlcl9uYW1lX2xvb2t1cF9lcnJvciAocGFy c2VyLCBpZGVudGlmaWVyLCB0LCBOTEVfTlVMTCwKKwkJCQkJIGlkX2xvYyk7 CisJfQorCisgICAgICBpZiAodCAhPSBlcnJvcl9tYXJrX25vZGUpCisJewor CSAgYm9vbCBuZWc7CisKKwkgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lz IChwYXJzZXItPmxleGVyLCBDUFBfTUlOVVMpKQorCSAgICBuZWcgPSB0cnVl OworCSAgZWxzZSBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2Vy LT5sZXhlciwgQ1BQX1BMVVMpKQorCSAgICBuZWcgPSBmYWxzZTsKKwkgIGVs c2UKKwkgICAgeworCSAgICAgIGFkZGVuZCA9IGludGVnZXJfemVyb19ub2Rl OworCSAgICAgIGdvdG8gYWRkX3RvX3ZlY3RvcjsKKwkgICAgfQorCSAgY3Bf bGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5sZXhlcik7CisKKwkgIGlm IChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzX25vdCAocGFyc2VyLT5sZXhlciwg Q1BQX05VTUJFUikpCisJICAgIHsKKwkgICAgICBjcF9wYXJzZXJfZXJyb3Ig KHBhcnNlciwgImV4cGVjdGVkICU8aW50ZWdlciU+Iik7CisJICAgICAgcmV0 dXJuIGxpc3Q7CisJICAgIH0KKworCSAgYWRkZW5kID0gY3BfbGV4ZXJfcGVl a190b2tlbiAocGFyc2VyLT5sZXhlciktPnUudmFsdWU7CisJICBpZiAoVFJF RV9DT0RFIChhZGRlbmQpICE9IElOVEVHRVJfQ1NUKQorCSAgICB7CisJICAg ICAgY3BfcGFyc2VyX2Vycm9yIChwYXJzZXIsICJleHBlY3RlZCAlPGludGVn ZXIlPiIpOworCSAgICAgIHJldHVybiBsaXN0OworCSAgICB9CisJICBpZiAo bmVnKQorCSAgICB7CisJICAgICAgYm9vbCBvdmVyZmxvdzsKKwkgICAgICB3 aWRlX2ludCBvZmZzZXQgPSB3aTo6bmVnIChhZGRlbmQsICZvdmVyZmxvdyk7 CisJICAgICAgYWRkZW5kID0gd2lkZV9pbnRfdG9fdHJlZSAoVFJFRV9UWVBF IChhZGRlbmQpLCBvZmZzZXQpOworCSAgICAgIGlmIChvdmVyZmxvdykKKwkJ d2FybmluZ19hdCAoY3BfbGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhl ciktPmxvY2F0aW9uLAorCQkJICAgIE9QVF9Xb3ZlcmZsb3csCisJCQkgICAg Im92ZXJmbG93IGluIGltcGxpY2l0IGNvbnN0YW50IGNvbnZlcnNpb24iKTsK KwkgICAgfQorCSAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5s ZXhlcik7CisKKwlhZGRfdG9fdmVjdG9yOgorCSAgdmVjID0gdHJlZV9jb25z IChhZGRlbmQsIHQsIHZlYyk7CisKKwkgIGlmIChjcF9sZXhlcl9uZXh0X3Rv a2VuX2lzX25vdCAocGFyc2VyLT5sZXhlciwgQ1BQX0NPTU1BKSkKKwkgICAg YnJlYWs7CisKKwkgIGNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+ bGV4ZXIpOworCX0KKyAgICB9CisgIGNwX3BhcnNlcl9yZXF1aXJlIChwYXJz ZXIsIENQUF9DTE9TRV9QQVJFTiwgUlRfQ0xPU0VfUEFSRU4pOworCisgIHRy ZWUgdSA9IGJ1aWxkX29tcF9jbGF1c2UgKGNsYXVzZV9sb2MsIE9NUF9DTEFV U0VfREVQRU5EKTsKKyAgT01QX0NMQVVTRV9ERVBFTkRfS0lORCAodSkgPSBP TVBfQ0xBVVNFX0RFUEVORF9TSU5LOworICBPTVBfQ0xBVVNFX0RFQ0wgKHUp ID0gbnJldmVyc2UgKHZlYyk7CisgIE9NUF9DTEFVU0VfQ0hBSU4gKHUpID0g bGlzdDsKKyAgcmV0dXJuIHU7Cit9CisKIC8qIE9wZW5NUCA0LjA6CiAgICBk ZXBlbmQgKCBkZXBlbmQta2luZCA6IHZhcmlhYmxlLWxpc3QgKQogCkBAIC0y OTMyMSwxMCArMjk0MTQsOSBAQCBjcF9wYXJzZXJfb21wX2NsYXVzZV9zaW1k bGVuIChjcF9wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0LAogICAgICBpbiB8 IG91dCB8IGlub3V0CiAKICAgIE9wZW5NUCA0LjE6Ci0gICBkZXBlbmQgKCBk ZXBlbmQtbG9vcC1raW5kIFsgOiB2ZWMgXSApCisgICBkZXBlbmQgKCBzb3Vy Y2UgKQogCi0gICBkZXBlbmQtbG9vcC1raW5kOgotICAgICBzb3VyY2UgfCBz aW5rICAqLworICAgZGVwZW5kICggc2luayA6IHZlYyApICovCiAKIHN0YXRp YyB0cmVlCiBjcF9wYXJzZXJfb21wX2NsYXVzZV9kZXBlbmQgKGNwX3BhcnNl ciAqcGFyc2VyLCB0cmVlIGxpc3QsIGxvY2F0aW9uX3QgbG9jKQpAQCAtMjkz NzEsMTcgKzI5NDYzLDE5IEBAIGNwX3BhcnNlcl9vbXBfY2xhdXNlX2RlcGVu ZCAoY3BfcGFyc2VyICpwYXJzZXIsIHRyZWUgbGlzdCwgbG9jYXRpb25fdCBs b2MpCiAgICAgICByZXR1cm4gYzsKICAgICB9CiAKLSAgLyogRklYTUU6IEhh bmRsZSBPTVBfQ0xBVVNFX0RFUEVORF9TSU5LLiAgKi8KLQogICBpZiAoIWNw X3BhcnNlcl9yZXF1aXJlIChwYXJzZXIsIENQUF9DT0xPTiwgUlRfQ09MT04p KQogICAgIGdvdG8gcmVzeW5jX2ZhaWw7CiAKLSAgbmxpc3QgPSBjcF9wYXJz ZXJfb21wX3Zhcl9saXN0X25vX29wZW4gKHBhcnNlciwgT01QX0NMQVVTRV9E RVBFTkQsIGxpc3QsCi0JCQkJCSAgTlVMTCk7Ci0KLSAgZm9yIChjID0gbmxp c3Q7IGMgIT0gbGlzdDsgYyA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMpKQotICAg IE9NUF9DTEFVU0VfREVQRU5EX0tJTkQgKGMpID0ga2luZDsKKyAgaWYgKGtp bmQgPT0gT01QX0NMQVVTRV9ERVBFTkRfU0lOSykKKyAgICBubGlzdCA9IGNw X3BhcnNlcl9vbXBfY2xhdXNlX2RlcGVuZF9zaW5rIChwYXJzZXIsIGxvYywg bGlzdCk7CisgIGVsc2UKKyAgICB7CisgICAgICBubGlzdCA9IGNwX3BhcnNl cl9vbXBfdmFyX2xpc3Rfbm9fb3BlbiAocGFyc2VyLCBPTVBfQ0xBVVNFX0RF UEVORCwKKwkJCQkJICAgICAgbGlzdCwgTlVMTCk7CiAKKyAgICAgIGZvciAo YyA9IG5saXN0OyBjICE9IGxpc3Q7IGMgPSBPTVBfQ0xBVVNFX0NIQUlOIChj KSkKKwlPTVBfQ0xBVVNFX0RFUEVORF9LSU5EIChjKSA9IGtpbmQ7CisgICAg fQogICByZXR1cm4gbmxpc3Q7CiAKICBpbnZhbGlkX2tpbmQ6CmRpZmYgLS1n aXQgYS9nY2MvY3Avc2VtYW50aWNzLmMgYi9nY2MvY3Avc2VtYW50aWNzLmMK aW5kZXggY2NhNmVhMS4uM2FkNGMzNiAxMDA2NDQKLS0tIGEvZ2NjL2NwL3Nl bWFudGljcy5jCisrKyBiL2djYy9jcC9zZW1hbnRpY3MuYwpAQCAtNjE0OCw2 ICs2MTQ4LDExIEBAIGZpbmlzaF9vbXBfY2xhdXNlcyAodHJlZSBjbGF1c2Vz LCBib29sIGFsbG93X2ZpZWxkcywgYm9vbCBkZWNsYXJlX3NpbWQpCiAJCQkg ID09IE9NUF9DTEFVU0VfREVQRU5EX1NPVVJDRSk7CiAJICAgICAgYnJlYWs7 CiAJICAgIH0KKwkgIGlmIChPTVBfQ0xBVVNFX0RFUEVORF9LSU5EIChjKSA9 PSBPTVBfQ0xBVVNFX0RFUEVORF9TSU5LKQorCSAgICB7CisJICAgICAgZ2Nj X2Fzc2VydCAoVFJFRV9DT0RFICh0KSA9PSBUUkVFX0xJU1QpOworCSAgICAg IGJyZWFrOworCSAgICB9CiAJICBpZiAoVFJFRV9DT0RFICh0KSA9PSBUUkVF X0xJU1QpCiAJICAgIHsKIAkgICAgICBpZiAoaGFuZGxlX29tcF9hcnJheV9z ZWN0aW9ucyAoYykpCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLXByZXR0eS1w cmludC5jIGIvZ2NjL2dpbXBsZS1wcmV0dHktcHJpbnQuYwppbmRleCBjYWU4 ODgzLi44M2NlM2VjIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLXByZXR0eS1w cmludC5jCisrKyBiL2djYy9naW1wbGUtcHJldHR5LXByaW50LmMKQEAgLTE0 ODgsOSArMTQ4OCw2IEBAIGR1bXBfZ2ltcGxlX29tcF9ibG9jayAocHJldHR5 X3ByaW50ZXIgKmJ1ZmZlciwgZ2ltcGxlIGdzLCBpbnQgc3BjLCBpbnQgZmxh Z3MpCiAJY2FzZSBHSU1QTEVfT01QX1RBU0tHUk9VUDoKIAkgIHBwX3N0cmlu ZyAoYnVmZmVyLCAiI3ByYWdtYSBvbXAgdGFza2dyb3VwIik7CiAJICBicmVh azsKLQljYXNlIEdJTVBMRV9PTVBfT1JERVJFRDoKLQkgIHBwX3N0cmluZyAo YnVmZmVyLCAiI3ByYWdtYSBvbXAgb3JkZXJlZCIpOwotCSAgYnJlYWs7CiAJ Y2FzZSBHSU1QTEVfT01QX1NFQ1RJT046CiAJICBwcF9zdHJpbmcgKGJ1ZmZl ciwgIiNwcmFnbWEgb21wIHNlY3Rpb24iKTsKIAkgIGJyZWFrOwpAQCAtMTU0 MSw2ICsxNTM4LDMxIEBAIGR1bXBfZ2ltcGxlX29tcF9jcml0aWNhbCAocHJl dHR5X3ByaW50ZXIgKmJ1ZmZlciwgZ29tcF9jcml0aWNhbCAqZ3MsCiAgICAg fQogfQogCisvKiBEdW1wIGEgR0lNUExFX09NUF9PUkRFUkVEIHR1cGxlIG9u IHRoZSBwcmV0dHlfcHJpbnRlciBCVUZGRVIuICAqLworCitzdGF0aWMgdm9p ZAorZHVtcF9naW1wbGVfb21wX29yZGVyZWQgKHByZXR0eV9wcmludGVyICpi dWZmZXIsIGdvbXBfb3JkZXJlZCAqZ3MsCisJCQkgaW50IHNwYywgaW50IGZs YWdzKQoreworICBpZiAoZmxhZ3MgJiBUREZfUkFXKQorICAgIGR1bXBfZ2lt cGxlX2ZtdCAoYnVmZmVyLCBzcGMsIGZsYWdzLCAiJUcgPCUrQk9EWSA8JVM+ ID4iLCBncywKKwkJICAgICBnaW1wbGVfb21wX2JvZHkgKGdzKSk7CisgIGVs c2UKKyAgICB7CisgICAgICBwcF9zdHJpbmcgKGJ1ZmZlciwgIiNwcmFnbWEg b21wIG9yZGVyZWQiKTsKKyAgICAgIGR1bXBfb21wX2NsYXVzZXMgKGJ1ZmZl ciwgZ2ltcGxlX29tcF9vcmRlcmVkX2NsYXVzZXMgKGdzKSwgc3BjLCBmbGFn cyk7CisgICAgICBpZiAoIWdpbXBsZV9zZXFfZW1wdHlfcCAoZ2ltcGxlX29t cF9ib2R5IChncykpKQorCXsKKwkgIG5ld2xpbmVfYW5kX2luZGVudCAoYnVm ZmVyLCBzcGMgKyAyKTsKKwkgIHBwX2xlZnRfYnJhY2UgKGJ1ZmZlcik7CisJ ICBwcF9uZXdsaW5lIChidWZmZXIpOworCSAgZHVtcF9naW1wbGVfc2VxIChi dWZmZXIsIGdpbXBsZV9vbXBfYm9keSAoZ3MpLCBzcGMgKyA0LCBmbGFncyk7 CisJICBuZXdsaW5lX2FuZF9pbmRlbnQgKGJ1ZmZlciwgc3BjICsgMik7CisJ ICBwcF9yaWdodF9icmFjZSAoYnVmZmVyKTsKKwl9CisgICAgfQorfQorCiAv KiBEdW1wIGEgR0lNUExFX09NUF9SRVRVUk4gdHVwbGUgb24gdGhlIHByZXR0 eV9wcmludGVyIEJVRkZFUi4gICovCiAKIHN0YXRpYyB2b2lkCkBAIC0yMjUw LDExICsyMjcyLDE1IEBAIHBwX2dpbXBsZV9zdG10XzEgKHByZXR0eV9wcmlu dGVyICpidWZmZXIsIGdpbXBsZSBncywgaW50IHNwYywgaW50IGZsYWdzKQog CiAgICAgY2FzZSBHSU1QTEVfT01QX01BU1RFUjoKICAgICBjYXNlIEdJTVBM RV9PTVBfVEFTS0dST1VQOgotICAgIGNhc2UgR0lNUExFX09NUF9PUkRFUkVE OgogICAgIGNhc2UgR0lNUExFX09NUF9TRUNUSU9OOgogICAgICAgZHVtcF9n aW1wbGVfb21wX2Jsb2NrIChidWZmZXIsIGdzLCBzcGMsIGZsYWdzKTsKICAg ICAgIGJyZWFrOwogCisgICAgY2FzZSBHSU1QTEVfT01QX09SREVSRUQ6Cisg ICAgICBkdW1wX2dpbXBsZV9vbXBfb3JkZXJlZCAoYnVmZmVyLCBhc19hIDxn b21wX29yZGVyZWQgKj4gKGdzKSwgc3BjLAorCQkJICAgICAgIGZsYWdzKTsK KyAgICAgIGJyZWFrOworCiAgICAgY2FzZSBHSU1QTEVfT01QX0NSSVRJQ0FM OgogICAgICAgZHVtcF9naW1wbGVfb21wX2NyaXRpY2FsIChidWZmZXIsIGFz X2EgPGdvbXBfY3JpdGljYWwgKj4gKGdzKSwgc3BjLAogCQkJCWZsYWdzKTsK ZGlmZiAtLWdpdCBhL2djYy9naW1wbGUtd2Fsay5jIGIvZ2NjL2dpbXBsZS13 YWxrLmMKaW5kZXggZjBlMmM2Ny4uMWZlNDM2NSAxMDA2NDQKLS0tIGEvZ2Nj L2dpbXBsZS13YWxrLmMKKysrIGIvZ2NjL2dpbXBsZS13YWxrLmMKQEAgLTMy Nyw2ICszMjcsMTYgQEAgd2Fsa19naW1wbGVfb3AgKGdpbXBsZSBzdG10LCB3 YWxrX3RyZWVfZm4gY2FsbGJhY2tfb3AsCiAgICAgICB9CiAgICAgICBicmVh azsKIAorICAgIGNhc2UgR0lNUExFX09NUF9PUkRFUkVEOgorICAgICAgewor CWdvbXBfb3JkZXJlZCAqb21wX3N0bXQgPSBhc19hIDxnb21wX29yZGVyZWQg Kj4gKHN0bXQpOworCXJldCA9IHdhbGtfdHJlZSAoZ2ltcGxlX29tcF9vcmRl cmVkX2NsYXVzZXNfcHRyIChvbXBfc3RtdCksCisJCQkgY2FsbGJhY2tfb3As IHdpLCBwc2V0KTsKKwlpZiAocmV0KQorCSAgcmV0dXJuIHJldDsKKyAgICAg IH0KKyAgICAgIGJyZWFrOworCiAgICAgY2FzZSBHSU1QTEVfT01QX0ZPUjoK ICAgICAgIHJldCA9IHdhbGtfdHJlZSAoZ2ltcGxlX29tcF9mb3JfY2xhdXNl c19wdHIgKHN0bXQpLCBjYWxsYmFja19vcCwgd2ksCiAJCSAgICAgICBwc2V0 KTsKZGlmZiAtLWdpdCBhL2djYy9naW1wbGUuYyBiL2djYy9naW1wbGUuYwpp bmRleCBkOGViNzdhLi5iODdkNDRkIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxl LmMKKysrIGIvZ2NjL2dpbXBsZS5jCkBAIC05OTEsMTIgKzk5MSwxNSBAQCBn aW1wbGVfYnVpbGRfb21wX2NvbnRpbnVlICh0cmVlIGNvbnRyb2xfZGVmLCB0 cmVlIGNvbnRyb2xfdXNlKQogLyogQnVpbGQgYSBHSU1QTEVfT01QX09SREVS RUQgc3RhdGVtZW50LgogCiAgICBCT0RZIGlzIHRoZSBzZXF1ZW5jZSBvZiBz dGF0ZW1lbnRzIGluc2lkZSBhIGxvb3AgdGhhdCB3aWxsIGV4ZWN1dGVkIGlu Ci0gICBzZXF1ZW5jZS4gICovCisgICBzZXF1ZW5jZS4KKyAgIENMQVVTRVMg YXJlIGNsYXVzZXMgZm9yIHRoaXMgc3RhdGVtZW50LiAgKi8KIAotZ2ltcGxl Ci1naW1wbGVfYnVpbGRfb21wX29yZGVyZWQgKGdpbXBsZV9zZXEgYm9keSkK K2dvbXBfb3JkZXJlZCAqCitnaW1wbGVfYnVpbGRfb21wX29yZGVyZWQgKGdp bXBsZV9zZXEgYm9keSwgdHJlZSBjbGF1c2VzKQogewotICBnaW1wbGUgcCA9 IGdpbXBsZV9hbGxvYyAoR0lNUExFX09NUF9PUkRFUkVELCAwKTsKKyAgZ29t cF9vcmRlcmVkICpwCisgICAgPSBhc19hIDxnb21wX29yZGVyZWQgKj4gKGdp bXBsZV9hbGxvYyAoR0lNUExFX09NUF9PUkRFUkVELCAwKSk7CisgIGdpbXBs ZV9vbXBfb3JkZXJlZF9zZXRfY2xhdXNlcyAocCwgY2xhdXNlcyk7CiAgIGlm IChib2R5KQogICAgIGdpbXBsZV9vbXBfc2V0X2JvZHkgKHAsIGJvZHkpOwog CmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLmRlZiBiL2djYy9naW1wbGUuZGVm CmluZGV4IDk2NjAyZGYuLmQzY2E0MDIgMTAwNjQ0Ci0tLSBhL2djYy9naW1w bGUuZGVmCisrKyBiL2djYy9naW1wbGUuZGVmCkBAIC0yODMsMTAgKzI4Myw2 IEBAIERFRkdTQ09ERShHSU1QTEVfT01QX01BU1RFUiwgImdpbXBsZV9vbXBf bWFzdGVyIiwgR1NTX09NUCkKICAgIEJPRFkgaXMgdGhlIHNlcXVlbmNlIG9m IHN0YXRlbWVudHMgdG8gZXhlY3V0ZSBpbiB0aGUgdGFza2dyb3VwIHNlY3Rp b24uICAqLwogREVGR1NDT0RFKEdJTVBMRV9PTVBfVEFTS0dST1VQLCAiZ2lt cGxlX29tcF90YXNrZ3JvdXAiLCBHU1NfT01QKQogCi0vKiBHSU1QTEVfT01Q X09SREVSRUQgPEJPRFk+IHJlcHJlc2VudHMgI3ByYWdtYSBvbXAgb3JkZXJl ZC4KLSAgIEJPRFkgaXMgdGhlIHNlcXVlbmNlIG9mIHN0YXRlbWVudHMgdG8g ZXhlY3V0ZSBpbiB0aGUgb3JkZXJlZCBzZWN0aW9uLiAgKi8KLURFRkdTQ09E RShHSU1QTEVfT01QX09SREVSRUQsICJnaW1wbGVfb21wX29yZGVyZWQiLCBH U1NfT01QKQotCiAvKiBHSU1QTEVfT01QX1BBUkFMTEVMIDxCT0RZLCBDTEFV U0VTLCBDSElMRF9GTiwgREFUQV9BUkc+IHJlcHJlc2VudHMKIAogICAgI3By YWdtYSBvbXAgcGFyYWxsZWwgW0NMQVVTRVNdCkBAIC0zNzUsNiArMzcxLDEx IEBAIERFRkdTQ09ERShHSU1QTEVfT01QX1RBUkdFVCwgImdpbXBsZV9vbXBf dGFyZ2V0IiwgR1NTX09NUF9QQVJBTExFTF9MQVlPVVQpCiAgICBDTEFVU0VT IGlzIGFuIE9NUF9DTEFVU0UgY2hhaW4gaG9sZGluZyB0aGUgYXNzb2NpYXRl ZCBjbGF1c2VzLiAgKi8KIERFRkdTQ09ERShHSU1QTEVfT01QX1RFQU1TLCAi Z2ltcGxlX29tcF90ZWFtcyIsIEdTU19PTVBfU0lOR0xFX0xBWU9VVCkKIAor LyogR0lNUExFX09NUF9PUkRFUkVEIDxCT0RZLCBDTEFVU0VTPiByZXByZXNl bnRzICNwcmFnbWEgb21wIG9yZGVyZWQuCisgICBCT0RZIGlzIHRoZSBzZXF1 ZW5jZSBvZiBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUgaW4gdGhlIG9yZGVyZWQg c2VjdGlvbi4KKyAgIENMQVVTRVMgaXMgYW4gT01QX0NMQVVTRSBjaGFpbiBo b2xkaW5nIHRoZSBhc3NvY2lhdGVkIGNsYXVzZXMuICAqLworREVGR1NDT0RF KEdJTVBMRV9PTVBfT1JERVJFRCwgImdpbXBsZV9vbXBfb3JkZXJlZCIsIEdT U19PTVBfU0lOR0xFX0xBWU9VVCkKKwogLyogR0lNUExFX1BSRURJQ1QgPFBS RURJQ1QsIE9VVENPTUU+IHNwZWNpZmllcyBhIGhpbnQgZm9yIGJyYW5jaCBw cmVkaWN0aW9uLgogCiAgICBQUkVESUNUIGlzIG9uZSBvZiB0aGUgcHJlZGlj dG9ycyBmcm9tIHByZWRpY3QuZGVmLgpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBs ZS5oIGIvZ2NjL2dpbXBsZS5oCmluZGV4IDYwNTdlYTAuLjY1ZjY2MmYgMTAw NjQ0Ci0tLSBhL2djYy9naW1wbGUuaAorKysgYi9nY2MvZ2ltcGxlLmgKQEAg LTY2OCw3ICs2NjgsNyBAQCBzdHJ1Y3QgR1RZKCh0YWcoIkdTU19PTVBfQ09O VElOVUUiKSkpCiAgIHRyZWUgY29udHJvbF91c2U7CiB9OwogCi0vKiBHSU1Q TEVfT01QX1NJTkdMRSwgR0lNUExFX09NUF9URUFNUyAqLworLyogR0lNUExF X09NUF9TSU5HTEUsIEdJTVBMRV9PTVBfVEVBTVMsIEdJTVBMRV9PTVBfT1JE RVJFRCAqLwogCiBzdHJ1Y3QgR1RZKCh0YWcoIkdTU19PTVBfU0lOR0xFX0xB WU9VVCIpKSkKICAgZ2ltcGxlX3N0YXRlbWVudF9vbXBfc2luZ2xlX2xheW91 dCA6IHB1YmxpYyBnaW1wbGVfc3RhdGVtZW50X29tcApAQCAtNjkzLDYgKzY5 MywxMyBAQCBzdHJ1Y3QgR1RZKCh0YWcoIkdTU19PTVBfU0lOR0xFX0xBWU9V VCIpKSkKICAgICAgICAgIHN0bXQtPmNvZGUgPT0gR0lNUExFX09NUF9URUFN Uy4gICovCiB9OwogCitzdHJ1Y3QgR1RZKCh0YWcoIkdTU19PTVBfU0lOR0xF X0xBWU9VVCIpKSkKKyAgZ29tcF9vcmRlcmVkIDogcHVibGljIGdpbXBsZV9z dGF0ZW1lbnRfb21wX3NpbmdsZV9sYXlvdXQKK3sKKyAgICAvKiBObyBleHRy YSBmaWVsZHM7IGFkZHMgaW52YXJpYW50OgorICAgICAgICAgc3RtdC0+Y29k ZSA9PSBHSU1QTEVfT01QX09SREVSRUQuICAqLworfTsKKwogCiAvKiBHSU1Q TEVfT01QX0FUT01JQ19MT0FELgogICAgTm90ZTogVGhpcyBpcyBiYXNlZCBv biBnaW1wbGVfc3RhdGVtZW50X2Jhc2UsIG5vdCBnX3Nfb21wLCBiZWNhdXNl IGdfc19vbXAKQEAgLTEwMDcsNiArMTAxNCwxNCBAQCBpc19hX2hlbHBlciA8 Z29tcF9jcml0aWNhbCAqPjo6dGVzdCAoZ2ltcGxlIGdzKQogdGVtcGxhdGUg PD4KIHRlbXBsYXRlIDw+CiBpbmxpbmUgYm9vbAoraXNfYV9oZWxwZXIgPGdv bXBfb3JkZXJlZCAqPjo6dGVzdCAoZ2ltcGxlIGdzKQoreworICByZXR1cm4g Z3MtPmNvZGUgPT0gR0lNUExFX09NUF9PUkRFUkVEOworfQorCit0ZW1wbGF0 ZSA8PgordGVtcGxhdGUgPD4KK2lubGluZSBib29sCiBpc19hX2hlbHBlciA8 Z29tcF9mb3IgKj46OnRlc3QgKGdpbXBsZSBncykKIHsKICAgcmV0dXJuIGdz LT5jb2RlID09IEdJTVBMRV9PTVBfRk9SOwpAQCAtMTIxNSw2ICsxMjMwLDE0 IEBAIGlzX2FfaGVscGVyIDxjb25zdCBnb21wX2NyaXRpY2FsICo+Ojp0ZXN0 IChjb25zdF9naW1wbGUgZ3MpCiB0ZW1wbGF0ZSA8PgogdGVtcGxhdGUgPD4K IGlubGluZSBib29sCitpc19hX2hlbHBlciA8Y29uc3QgZ29tcF9vcmRlcmVk ICo+Ojp0ZXN0IChjb25zdF9naW1wbGUgZ3MpCit7CisgIHJldHVybiBncy0+ Y29kZSA9PSBHSU1QTEVfT01QX09SREVSRUQ7Cit9CisKK3RlbXBsYXRlIDw+ Cit0ZW1wbGF0ZSA8PgoraW5saW5lIGJvb2wKIGlzX2FfaGVscGVyIDxjb25z dCBnb21wX2ZvciAqPjo6dGVzdCAoY29uc3RfZ2ltcGxlIGdzKQogewogICBy ZXR1cm4gZ3MtPmNvZGUgPT0gR0lNUExFX09NUF9GT1I7CkBAIC0xMzU1LDcg KzEzNzgsNyBAQCBnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF9zZWN0aW9uIChn aW1wbGVfc2VxKTsKIGdpbXBsZSBnaW1wbGVfYnVpbGRfb21wX21hc3RlciAo Z2ltcGxlX3NlcSk7CiBnaW1wbGUgZ2ltcGxlX2J1aWxkX29tcF90YXNrZ3Jv dXAgKGdpbXBsZV9zZXEpOwogZ29tcF9jb250aW51ZSAqZ2ltcGxlX2J1aWxk X29tcF9jb250aW51ZSAodHJlZSwgdHJlZSk7Ci1naW1wbGUgZ2ltcGxlX2J1 aWxkX29tcF9vcmRlcmVkIChnaW1wbGVfc2VxKTsKK2dvbXBfb3JkZXJlZCAq Z2ltcGxlX2J1aWxkX29tcF9vcmRlcmVkIChnaW1wbGVfc2VxLCB0cmVlKTsK IGdpbXBsZSBnaW1wbGVfYnVpbGRfb21wX3JldHVybiAoYm9vbCk7CiBnb21w X3NlY3Rpb25zICpnaW1wbGVfYnVpbGRfb21wX3NlY3Rpb25zIChnaW1wbGVf c2VxLCB0cmVlKTsKIGdpbXBsZSBnaW1wbGVfYnVpbGRfb21wX3NlY3Rpb25z X3N3aXRjaCAodm9pZCk7CkBAIC00NDYwLDYgKzQ0ODMsMzUgQEAgZ2ltcGxl X29tcF9jcml0aWNhbF9zZXRfY2xhdXNlcyAoZ29tcF9jcml0aWNhbCAqY3Jp dF9zdG10LCB0cmVlIGNsYXVzZXMpCiB9CiAKIAorLyogUmV0dXJuIHRoZSBj bGF1c2VzIGFzc29jaWF0ZWQgd2l0aCBPTVBfT1JERVJFRCBzdGF0ZW1lbnQg T1JEX1NUTVQuICAqLworCitzdGF0aWMgaW5saW5lIHRyZWUKK2dpbXBsZV9v bXBfb3JkZXJlZF9jbGF1c2VzIChjb25zdCBnb21wX29yZGVyZWQgKm9yZF9z dG10KQoreworICByZXR1cm4gb3JkX3N0bXQtPmNsYXVzZXM7Cit9CisKKwor LyogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgY2xhdXNlcyBhc3NvY2lhdGVk IHdpdGggT01QIG9yZGVyZWQgc3RhdGVtZW50CisgICBPUkRfU1RNVC4gICov CisKK3N0YXRpYyBpbmxpbmUgdHJlZSAqCitnaW1wbGVfb21wX29yZGVyZWRf Y2xhdXNlc19wdHIgKGdvbXBfb3JkZXJlZCAqb3JkX3N0bXQpCit7CisgIHJl dHVybiAmb3JkX3N0bXQtPmNsYXVzZXM7Cit9CisKKworLyogU2V0IENMQVVT RVMgdG8gYmUgdGhlIGNsYXVzZXMgYXNzb2NpYXRlZCB3aXRoIE9NUCBvcmRl cmVkIHN0YXRlbWVudAorICAgT1JEX1NUTVQuICAqLworCitzdGF0aWMgaW5s aW5lIHZvaWQKK2dpbXBsZV9vbXBfb3JkZXJlZF9zZXRfY2xhdXNlcyAoZ29t cF9vcmRlcmVkICpvcmRfc3RtdCwgdHJlZSBjbGF1c2VzKQoreworICBvcmRf c3RtdC0+Y2xhdXNlcyA9IGNsYXVzZXM7Cit9CisKKwogLyogUmV0dXJuIHRo ZSBraW5kIG9mIHRoZSBPTVBfRk9SIHN0YXRlbWVtZW50IEcuICAqLwogCiBz dGF0aWMgaW5saW5lIGludApkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsaWZ5LmMg Yi9nY2MvZ2ltcGxpZnkuYwppbmRleCAyMWY4MjIzLi5kMDc5NTMwIDEwMDY0 NAotLS0gYS9nY2MvZ2ltcGxpZnkuYworKysgYi9nY2MvZ2ltcGxpZnkuYwpA QCAtMTQ5LDYgKzE0OSw4IEBAIHN0cnVjdCBnaW1wbGlmeV9vbXBfY3R4CiAg IHN0cnVjdCBnaW1wbGlmeV9vbXBfY3R4ICpvdXRlcl9jb250ZXh0OwogICBz cGxheV90cmVlIHZhcmlhYmxlczsKICAgaGFzaF9zZXQ8dHJlZT4gKnByaXZh dGl6ZWRfdHlwZXM7CisgIC8qIEl0ZXJhdGlvbiB2YXJpYWJsZXMgaW4gYW4g T01QX0ZPUi4gICovCisgIHZlYzx0cmVlPiBpdGVyX3ZhcnM7CiAgIGxvY2F0 aW9uX3QgbG9jYXRpb247CiAgIGVudW0gb21wX2NsYXVzZV9kZWZhdWx0X2tp bmQgZGVmYXVsdF9raW5kOwogICBlbnVtIG9tcF9yZWdpb25fdHlwZSByZWdp b25fdHlwZTsKQEAgLTM2NSw2ICszNjcsOCBAQCBuZXdfb21wX2NvbnRleHQg KGVudW0gb21wX3JlZ2lvbl90eXBlIHJlZ2lvbl90eXBlKQogCiAgIGMgPSBY Q05FVyAoc3RydWN0IGdpbXBsaWZ5X29tcF9jdHgpOwogICBjLT5vdXRlcl9j b250ZXh0ID0gZ2ltcGxpZnlfb21wX2N0eHA7CisgIGMtPml0ZXJfdmFycy5z YWZlX3B1c2goMCk7CisgIGMtPml0ZXJfdmFycy5wb3AoKTsKICAgYy0+dmFy aWFibGVzID0gc3BsYXlfdHJlZV9uZXcgKHNwbGF5X3RyZWVfY29tcGFyZV9k ZWNsX3VpZCwgMCwgMCk7CiAgIGMtPnByaXZhdGl6ZWRfdHlwZXMgPSBuZXcg aGFzaF9zZXQ8dHJlZT47CiAgIGMtPmxvY2F0aW9uID0gaW5wdXRfbG9jYXRp b247CkBAIC0zODQsNiArMzg4LDcgQEAgZGVsZXRlX29tcF9jb250ZXh0IChz dHJ1Y3QgZ2ltcGxpZnlfb21wX2N0eCAqYykKIHsKICAgc3BsYXlfdHJlZV9k ZWxldGUgKGMtPnZhcmlhYmxlcyk7CiAgIGRlbGV0ZSBjLT5wcml2YXRpemVk X3R5cGVzOworICBjLT5pdGVyX3ZhcnMucmVsZWFzZSAoKTsKICAgWERFTEVU RSAoYyk7CiB9CiAKQEAgLTYzNDMsNiArNjM0OCwxMyBAQCBnaW1wbGlmeV9z Y2FuX29tcF9jbGF1c2VzICh0cmVlICpsaXN0X3AsIGdpbXBsZV9zZXEgKnBy ZV9wLAogCSAgZ290byBkb19hZGQ7CiAKIAljYXNlIE9NUF9DTEFVU0VfREVQ RU5EOgorCSAgaWYgKE9NUF9DTEFVU0VfREVQRU5EX0tJTkQgKGMpID09IE9N UF9DTEFVU0VfREVQRU5EX1NJTksKKwkgICAgICB8fCBPTVBfQ0xBVVNFX0RF UEVORF9LSU5EIChjKSA9PSBPTVBfQ0xBVVNFX0RFUEVORF9TT1VSQ0UpCisJ ICAgIHsKKwkgICAgICAvKiBOb3RoaW5nIHRvIGRvLiAgT01QX0NMQVVTRV9E RUNMIHdpbGwgYmUgbG93ZXJlZCBpbgorCQkgb21wLWxvdy5jLiAgKi8KKwkg ICAgICBicmVhazsKKwkgICAgfQogCSAgaWYgKFRSRUVfQ09ERSAoT01QX0NM QVVTRV9ERUNMIChjKSkgPT0gQ09NUE9VTkRfRVhQUikKIAkgICAgewogCSAg ICAgIGdpbXBsaWZ5X2V4cHIgKCZUUkVFX09QRVJBTkQgKE9NUF9DTEFVU0Vf REVDTCAoYyksIDApLCBwcmVfcCwKQEAgLTcyODIsNiArNzI5NCw4IEBAIGdp bXBsaWZ5X29tcF9mb3IgKHRyZWUgKmV4cHJfcCwgZ2ltcGxlX3NlcSAqcHJl X3ApCiAJICAgICAgPT0gVFJFRV9WRUNfTEVOR1RIIChPTVBfRk9SX0NPTkQg KGZvcl9zdG10KSkpOwogICBnY2NfYXNzZXJ0IChUUkVFX1ZFQ19MRU5HVEgg KE9NUF9GT1JfSU5JVCAoZm9yX3N0bXQpKQogCSAgICAgID09IFRSRUVfVkVD X0xFTkdUSCAoT01QX0ZPUl9JTkNSIChmb3Jfc3RtdCkpKTsKKyAgZ2ltcGxp Znlfb21wX2N0eHAtPml0ZXJfdmFycy5jcmVhdGUgKFRSRUVfVkVDX0xFTkdU SAorCQkJCSAgICAgICAoT01QX0ZPUl9JTklUIChmb3Jfc3RtdCkpKTsKICAg Zm9yIChpID0gMDsgaSA8IFRSRUVfVkVDX0xFTkdUSCAoT01QX0ZPUl9JTklU IChmb3Jfc3RtdCkpOyBpKyspCiAgICAgewogICAgICAgdCA9IFRSRUVfVkVD X0VMVCAoT01QX0ZPUl9JTklUIChmb3Jfc3RtdCksIGkpOwpAQCAtNzI5MCw2 ICs3MzA0LDcgQEAgZ2ltcGxpZnlfb21wX2ZvciAodHJlZSAqZXhwcl9wLCBn aW1wbGVfc2VxICpwcmVfcCkKICAgICAgIGdjY19hc3NlcnQgKERFQ0xfUCAo ZGVjbCkpOwogICAgICAgZ2NjX2Fzc2VydCAoSU5URUdSQUxfVFlQRV9QIChU UkVFX1RZUEUgKGRlY2wpKQogCQkgIHx8IFBPSU5URVJfVFlQRV9QIChUUkVF X1RZUEUgKGRlY2wpKSk7CisgICAgICBnaW1wbGlmeV9vbXBfY3R4cC0+aXRl cl92YXJzLnF1aWNrX3B1c2ggKGRlY2wpOwogCiAgICAgICAvKiBNYWtlIHN1 cmUgdGhlIGl0ZXJhdGlvbiB2YXJpYWJsZSBpcyBwcml2YXRlLiAgKi8KICAg ICAgIHRyZWUgYyA9IE5VTExfVFJFRTsKQEAgLTg5ODIsNyArODk5NywzNiBA QCBnaW1wbGlmeV9leHByICh0cmVlICpleHByX3AsIGdpbXBsZV9zZXEgKnBy ZV9wLCBnaW1wbGVfc2VxICpwb3N0X3AsCiAJCX0KIAkJYnJlYWs7CiAJICAg ICAgY2FzZSBPTVBfT1JERVJFRDoKLQkJZyA9IGdpbXBsZV9idWlsZF9vbXBf b3JkZXJlZCAoYm9keSk7CisJCWlmIChnaW1wbGlmeV9vbXBfY3R4cCkKKwkJ ICBmb3IgKHRyZWUgYyA9IE9NUF9PUkRFUkVEX0NMQVVTRVMgKCpleHByX3Ap OworCQkgICAgICAgYzsgYyA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMpKQorCQkg ICAgaWYgKE9NUF9DTEFVU0VfQ09ERSAoYykgPT0gT01QX0NMQVVTRV9ERVBF TkQKKwkJCSYmIE9NUF9DTEFVU0VfREVQRU5EX0tJTkQgKGMpID09IE9NUF9D TEFVU0VfREVQRU5EX1NJTkspCisJCSAgICAgIHsKKwkJCXVuc2lnbmVkIGlu dCBuID0gMDsKKwkJCWJvb2wgZmFpbCA9IGZhbHNlOworCQkJZm9yICh0cmVl IGRlY2xzID0gT01QX0NMQVVTRV9ERUNMIChjKTsKKwkJCSAgICAgZGVjbHMg JiYgVFJFRV9DT0RFIChkZWNscykgPT0gVFJFRV9MSVNUOworCQkJICAgICBk ZWNscyA9IFRSRUVfQ0hBSU4gKGRlY2xzKSwgKytuKQorCQkJICBpZiAobiA8 IGdpbXBsaWZ5X29tcF9jdHhwLT5pdGVyX3ZhcnMubGVuZ3RoICgpCisJCQkg ICAgICAmJiBUUkVFX1ZBTFVFIChkZWNscykKKwkJCSAgICAgICE9IGdpbXBs aWZ5X29tcF9jdHhwLT5pdGVyX3ZhcnNbbl0pCisJCQkgICAgeworCQkJICAg ICAgZXJyb3JfYXQgKE9NUF9DTEFVU0VfTE9DQVRJT04gKGMpLAorCQkJCQki dmFyaWFibGUgJXFFIGlzIG5vdCBhbiBpdGVyYXRpb24gIgorCQkJCQkidmFy aWFibGUiLCBUUkVFX1ZBTFVFIChkZWNscykpOworCQkJICAgICAgZmFpbCA9 IHRydWU7CisJCQkgICAgfQorCQkJLyogQXZvaWQgYmVpbmcgdG9vIHJlZHVu ZGFudC4gICovCisJCQlpZiAoIWZhaWwKKwkJCSAgICAmJiBuICE9IGdpbXBs aWZ5X29tcF9jdHhwLT5pdGVyX3ZhcnMubGVuZ3RoICgpKQorCQkJICBlcnJv cl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksCisJCQkgICAgICJudW1i ZXIgb2YgdmFyaWFibGVzIGluIGRlcGVuZChzaW5rKSBjbGF1c2UgIgorCQkJ ICAgICAiZG9lcyBub3QgbWF0Y2ggbnVtYmVyIG9mIGl0ZXJhdGlvbiB2YXJp YWJsZXMiKTsKKwkJICAgICAgfQorCisJCWcgPSBnaW1wbGVfYnVpbGRfb21w X29yZGVyZWQgKGJvZHksCisJCQkJCSAgICAgIE9NUF9PUkRFUkVEX0NMQVVT RVMgKCpleHByX3ApKTsKIAkJYnJlYWs7CiAJICAgICAgY2FzZSBPTVBfQ1JJ VElDQUw6CiAJCWdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKCZPTVBfQ1JJ VElDQUxfQ0xBVVNFUyAoKmV4cHJfcCksCmRpZmYgLS1naXQgYS9nY2Mvb21w LWxvdy5jIGIvZ2NjL29tcC1sb3cuYwppbmRleCA4MzY3N2VhLi4zZGVjMDk1 IDEwMDY0NAotLS0gYS9nY2Mvb21wLWxvdy5jCisrKyBiL2djYy9vbXAtbG93 LmMKQEAgLTI5OTYsNiArMjk5Niw4IEBAIHNjYW5fb21wX3RlYW1zIChnb21w X3RlYW1zICpzdG10LCBvbXBfY29udGV4dCAqb3V0ZXJfY3R4KQogc3RhdGlj IGJvb2wKIGNoZWNrX29tcF9uZXN0aW5nX3Jlc3RyaWN0aW9ucyAoZ2ltcGxl IHN0bXQsIG9tcF9jb250ZXh0ICpjdHgpCiB7CisgIHRyZWUgYzsKKwogICAv KiBObyBuZXN0aW5nIG9mIG5vbi1PcGVuQUNDIFNUTVQgKHRoYXQgaXMsIGFu IE9wZW5NUCBvbmUsIG9yIGEgR09NUCBidWlsdGluKQogICAgICBpbnNpZGUg YW4gT3BlbkFDQyBDVFguICAqLwogICBpZiAoIShpc19naW1wbGVfb21wIChz dG10KQpAQCAtMzIxNiw3ICszMjE4LDU0IEBAIGNoZWNrX29tcF9uZXN0aW5n X3Jlc3RyaWN0aW9ucyAoZ2ltcGxlIHN0bXQsIG9tcF9jb250ZXh0ICpjdHgp CiAJICAgIGJyZWFrOwogCSAgfQogICAgICAgYnJlYWs7CisgICAgY2FzZSBH SU1QTEVfT01QX1RBU0s6CisgICAgICBmb3IgKGMgPSBnaW1wbGVfb21wX3Rh c2tfY2xhdXNlcyAoc3RtdCk7IGM7IGMgPSBPTVBfQ0xBVVNFX0NIQUlOIChj KSkKKwlpZiAoT01QX0NMQVVTRV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX0RF UEVORAorCSAgICAmJiAoT01QX0NMQVVTRV9ERVBFTkRfS0lORCAoYykgPT0g T01QX0NMQVVTRV9ERVBFTkRfU09VUkNFCisJCXx8IE9NUF9DTEFVU0VfREVQ RU5EX0tJTkQgKGMpID09IE9NUF9DTEFVU0VfREVQRU5EX1NJTkspKQorCSAg eworCSAgICBlbnVtIG9tcF9jbGF1c2VfZGVwZW5kX2tpbmQga2luZCA9IE9N UF9DTEFVU0VfREVQRU5EX0tJTkQgKGMpOworCSAgICBnY2NfYXNzZXJ0IChr aW5kID09IE9NUF9DTEFVU0VfREVQRU5EX1NPVVJDRQorCQkJfHwga2luZCA9 PSBPTVBfQ0xBVVNFX0RFUEVORF9TSU5LKTsKKwkgICAgZXJyb3JfYXQgKE9N UF9DTEFVU0VfTE9DQVRJT04gKGMpLAorCQkgICAgICAiZGVwZW5kKCVzKSBp cyBvbmx5IGF2YWlsYWJsZSBpbiAlPG9tcCBvcmRlcmVkJT4iLAorCQkgICAg ICBraW5kID09IE9NUF9DTEFVU0VfREVQRU5EX1NPVVJDRSA/ICJzb3VyY2Ui IDogInNpbmsiKTsKKwkgICAgcmV0dXJuIGZhbHNlOworCSAgfQorICAgICAg YnJlYWs7CiAgICAgY2FzZSBHSU1QTEVfT01QX09SREVSRUQ6CisgICAgICBm b3IgKGMgPSBnaW1wbGVfb21wX29yZGVyZWRfY2xhdXNlcyAoYXNfYSA8Z29t cF9vcmRlcmVkICo+IChzdG10KSk7CisJICAgYzsgYyA9IE9NUF9DTEFVU0Vf Q0hBSU4gKGMpKQorCXsKKwkgIGVudW0gb21wX2NsYXVzZV9kZXBlbmRfa2lu ZCBraW5kID0gT01QX0NMQVVTRV9ERVBFTkRfS0lORCAoYyk7CisJICBpZiAo a2luZCA9PSBPTVBfQ0xBVVNFX0RFUEVORF9TT1VSQ0UKKwkgICAgICB8fCBr aW5kID09IE9NUF9DTEFVU0VfREVQRU5EX1NJTkspCisJICAgIHsKKwkgICAg ICBib29sIGhhdmVfb3JkZXJlZCA9IGZhbHNlOworCSAgICAgIC8qIExvb2sg Zm9yIGNvbnRhaW5pbmcgb3JkZXJlZChOKSBsb29wLiAgKi8KKwkgICAgICBm b3IgKG9tcF9jb250ZXh0ICpvY3R4ID0gY3R4OyBvY3R4OyBvY3R4ID0gb2N0 eC0+b3V0ZXIpCisJCWlmIChnaW1wbGVfY29kZSAob2N0eC0+c3RtdCkgPT0g R0lNUExFX09NUF9GT1IKKwkJICAgICYmIGZpbmRfb21wX2NsYXVzZSAoZ2lt cGxlX29tcF9mb3JfY2xhdXNlcyAob2N0eC0+c3RtdCksCisJCQkJCU9NUF9D TEFVU0VfT1JERVJFRCkpCisJCSAgeworCQkgICAgaGF2ZV9vcmRlcmVkID0g dHJ1ZTsKKwkJICAgIGJyZWFrOworCQkgIH0KKwkgICAgICBpZiAoIWhhdmVf b3JkZXJlZCkKKwkJeworCQkgIGVycm9yX2F0IChPTVBfQ0xBVVNFX0xPQ0FU SU9OIChjKSwKKwkJCSAgICAiZGVwZW5kIGNsYXVzZSBtdXN0IGJlIGNsb3Nl bHkgbmVzdGVkIGluc2lkZSBhbiAiCisJCQkgICAgIm9yZGVyZWQgbG9vcCIp OworCQkgIHJldHVybiBmYWxzZTsKKwkJfQorCSAgICB9CisJICBlbHNlCisJ ICAgIHsKKwkgICAgICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAo YyksCisJCQkiaW52YWxpZCBkZXBlbmQga2luZCBpbiBvbXAgb3JkZXJlZCBk ZXBlbmQiKTsKKwkgICAgICByZXR1cm4gZmFsc2U7CisJICAgIH0KKwl9CiAg ICAgICBmb3IgKDsgY3R4ICE9IE5VTEw7IGN0eCA9IGN0eC0+b3V0ZXIpCiAJ c3dpdGNoIChnaW1wbGVfY29kZSAoY3R4LT5zdG10KSkKIAkgIHsKQEAgLTEy NTYyLDYgKzEyNjExLDEwIEBAIGxvd2VyX2RlcGVuZF9jbGF1c2VzIChnaW1w bGUgc3RtdCwgZ2ltcGxlX3NlcSAqaXNlcSwgZ2ltcGxlX3NlcSAqb3NlcSkK IAljYXNlIE9NUF9DTEFVU0VfREVQRU5EX0lOT1VUOgogCSAgbl9vdXQrKzsK IAkgIGJyZWFrOworCWNhc2UgT01QX0NMQVVTRV9ERVBFTkRfU09VUkNFOgor CWNhc2UgT01QX0NMQVVTRV9ERVBFTkRfU0lOSzoKKwkgIC8qIEZJWE1FOiAg Ki8KKwkgIGJyZWFrOwogCWRlZmF1bHQ6CiAJICBnY2NfdW5yZWFjaGFibGUg KCk7CiAJfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21t b24vZ29tcC9zaW5rLTEuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L2dvbXAvc2luay0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZDQxMWQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvYy1jKystY29tbW9uL2dvbXAvc2luay0xLmMKQEAgLTAsMCArMSw4OCBA QAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAi LWZvcGVubXAgLVd1bmtub3duLXByYWdtYXMgLVdlcnJvciIgfSAqLworCitl eHRlcm4gdm9pZCBiYXJrICh2b2lkKTsKK2ludCBpLGosazsKK2ludCBhcnJh eVs1NTVdOworCitpbnQKK21haW4oKQoreworI3ByYWdtYSBvbXAgcGFyYWxs ZWwgZm9yIG9yZGVyZWQoMikKKyAgZm9yIChpPTA7IGkgPCAxMDA7ICsraSkK KyAgICBmb3IgKGo9MDsgaiA8IDEwMDsgKytqKQorICAgICAgeworLyogT1VU IHZhcmlhbnQgZG9lcyBub3QgYXBwbHkgdG8gT1JERVJFRCBjb25zdHJ1Y3Qu ICAqLworI3ByYWdtYSBvbXAgb3JkZXJlZCBkZXBlbmQob3V0OmkpIC8qIHsg ZGctZXJyb3IgImludmFsaWQgZGVwZW5kIGtpbmQiIH0gKi8KKworLyogZGVw ZW5kKHNpbmsuLi4pIGlzIGFsbG93ZWQgd2l0aG91dCBhbiBvZmZzZXQuICAq LworI3ByYWdtYSBvbXAgb3JkZXJlZCBkZXBlbmQoc2luazppLGotMSkKKwor I3ByYWdtYSBvbXAgb3JkZXJlZCBkZXBlbmQoc2luazppLTEsaisyKQorICAg ICAgYmFyayAoKTsKKyAgICAgIH0KKworLyogZGVwZW5kKHNpbmsuLi4pIGRv ZXMgbm90IGFwcGx5IHRvIGBvbXAgdGFzaycuICAqLworI3ByYWdtYSBvbXAg dGFzayBkZXBlbmQoc2luazppKzMpIC8qIHsgZGctZXJyb3IgIm9ubHkgYXZh aWxhYmxlIGluICdvbXAgb3JkZXJlZCciIH0gKi8KKyAgYmFyaygpOworCisj cHJhZ21hIG9tcCBvcmRlcmVkIGRlcGVuZChzb3VyY2UpIC8qIHsgZGctZXJy b3IgImRlcGVuZCBjbGF1c2UgbXVzdCBiZSBjbG9zZWx5IG5lc3RlZCIgfSAq LworCisjcHJhZ21hIG9tcCBwYXJhbGxlbCBmb3Igb3JkZXJlZCgyKQorICBm b3IgKGk9MDsgaSA8IDEwMDsgKytpKQorICAgIGZvciAoaj0wOyBqIDwgMTAw OyArK2opCisgICAgICB7CisvKiBNdWx0aXBsZSBkZXBlbmQoc291cmNlKSBh bGxvd2VkLiAgKi8KKyNwcmFnbWEgb21wIG9yZGVyZWQgZGVwZW5kKHNvdXJj ZSkKKyNwcmFnbWEgb21wIG9yZGVyZWQgZGVwZW5kKHNvdXJjZSkKKyAgICAg IH0KKworI3ByYWdtYSBvbXAgcGFyYWxsZWwgZm9yIG9yZGVyZWQoMikKKyAg Zm9yIChpPTA7IGkgPCAxMDA7ICsraSkKKyAgICBmb3IgKGo9MDsgaiA8IDEw MDsgKytqKQorICAgICAgeworI3ByYWdtYSBvbXAgb3JkZXJlZCBkZXBlbmQo c2luazppLTIsai0yLGsrMikgLyogeyBkZy1lcnJvciAiZG9lcyBub3QgbWF0 Y2ggbnVtYmVyIG9mIGl0ZXJhdGlvbiB2YXIiIH0gKi8KKwliYXJrKCk7Cisg ICAgICB9CisKKyNwcmFnbWEgb21wIHBhcmFsbGVsIGZvciBvcmRlcmVkKDIp CisgIGZvciAoaT0wOyBpIDwgMTAwOyArK2kpCisgICAgZm9yIChqPTA7IGog PCAxMDA7ICsraikKKyAgICAgIHsKKyNwcmFnbWEgb21wIG9yZGVyZWQgZGVw ZW5kKHNpbms6aS0yKSAvKiB7IGRnLWVycm9yICJkb2VzIG5vdCBtYXRjaCBu dW1iZXIgb2YgaXRlcmF0aW9uIHZhcmlhYmxlcyIgfSAqLworCWJhcmsoKTsK KyAgICAgIH0KK30KKwordm9pZCBiYXIgKGludCwgaW50LCBpbnQpOworCit2 b2lkCitmb28gKGludCBuLCBpbnQgbSwgaW50IG8pCit7CisgIGludCBpLCBq LCBrOworICAjcHJhZ21hIG9tcCBmb3IgY29sbGFwc2UoMikgb3JkZXJlZCgy KQorICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKQorICAgIHsKKyAgICAgIGZv ciAoaiA9IDA7IGogPCBuOyBqKyspCisgICAgICAgIGZvciAoayA9IDA7IGsg PCBvOyBrKyspCisgICAgICAgICAgeworI3ByYWdtYSBvbXAgb3JkZXJlZCBk ZXBlbmQoc2luazogaS0xLGosaykgZGVwZW5kKHNpbms6IGksai0xLGstMSkg ZGVwZW5kKHNpbms6IGktMSxqLTEsaysxKQorCSAgICBiYXIgKGksIGosIGsp OworI3ByYWdtYSBvbXAgb3JkZXJlZCBkZXBlbmQoc291cmNlKQorCSAgfQor ICAgIH0KK30KKworaW50CitiYXogKCkKK3sKKyAgaW50IGksIGo7CisjcHJh Z21hIG9tcCBwYXJhbGxlbCBmb3Igb3JkZXJlZCgyKQorICBmb3IgKGk9MDsg aSA8IDEwMDsgKytpKQorICAgIGZvciAoaj0wOyBqIDwgMTAwOyArK2opCisg ICAgICB7CisjcHJhZ21hIG9tcCBvcmRlcmVkIGRlcGVuZChzaW5rOmktMSxq LTMpCisgICAgICAgIGJhciAoaSwgaiwgMCk7CisjcHJhZ21hIG9tcCBvcmRl cmVkIGRlcGVuZChzb3VyY2UpCisgICAgICB9Cit9CmRpZmYgLS1naXQgYS9n Y2MvdHJlZS1pbmxpbmUuYyBiL2djYy90cmVlLWlubGluZS5jCmluZGV4IDA2 YjQwNzcuLmY0ZThjZjIgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWlubGluZS5j CisrKyBiL2djYy90cmVlLWlubGluZS5jCkBAIC0xNDc5LDcgKzE0NzksOSBA QCByZW1hcF9naW1wbGVfc3RtdCAoZ2ltcGxlIHN0bXQsIGNvcHlfYm9keV9k YXRhICppZCkKIAogCWNhc2UgR0lNUExFX09NUF9PUkRFUkVEOgogCSAgczEg PSByZW1hcF9naW1wbGVfc2VxIChnaW1wbGVfb21wX2JvZHkgKHN0bXQpLCBp ZCk7Ci0JICBjb3B5ID0gZ2ltcGxlX2J1aWxkX29tcF9vcmRlcmVkIChzMSk7 CisJICBjb3B5ID0gZ2ltcGxlX2J1aWxkX29tcF9vcmRlcmVkCisJICAgICAg ICAgICAoczEsCisJCSAgICBnaW1wbGVfb21wX29yZGVyZWRfY2xhdXNlcyAo YXNfYSA8Z29tcF9vcmRlcmVkICo+IChzdG10KSkpOwogCSAgYnJlYWs7CiAK IAljYXNlIEdJTVBMRV9PTVBfU0VDVElPTjoKZGlmZiAtLWdpdCBhL2djYy90 cmVlLXByZXR0eS1wcmludC5jIGIvZ2NjL3RyZWUtcHJldHR5LXByaW50LmMK aW5kZXggN2Y4ZTBmZS4uM2M1ZDBmNSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUt cHJldHR5LXByaW50LmMKKysrIGIvZ2NjL3RyZWUtcHJldHR5LXByaW50LmMK QEAgLTUzMyw2ICs1MzMsMjIgQEAgZHVtcF9vbXBfY2xhdXNlIChwcmV0dHlf cHJpbnRlciAqcHAsIHRyZWUgY2xhdXNlLCBpbnQgc3BjLCBpbnQgZmxhZ3Mp CiAJY2FzZSBPTVBfQ0xBVVNFX0RFUEVORF9TT1VSQ0U6CiAJICBwcF9zdHJp bmcgKHBwLCAic291cmNlKSIpOwogCSAgcmV0dXJuOworCWNhc2UgT01QX0NM QVVTRV9ERVBFTkRfU0lOSzoKKwkgIHBwX3N0cmluZyAocHAsICJzaW5rOiIp OworCSAgZm9yICh0cmVlIHQgPSBPTVBfQ0xBVVNFX0RFQ0wgKGNsYXVzZSk7 IHQ7IHQgPSBUUkVFX0NIQUlOICh0KSkKKwkgICAgaWYgKFRSRUVfQ09ERSAo dCkgPT0gVFJFRV9MSVNUKQorCSAgICAgIHsKKwkJZHVtcF9nZW5lcmljX25v ZGUgKHBwLCBUUkVFX1ZBTFVFICh0KSwgc3BjLCBmbGFncywgZmFsc2UpOwor CQlpZiAoVFJFRV9QVVJQT1NFICh0KSAhPSBpbnRlZ2VyX3plcm9fbm9kZSkK KwkJICBkdW1wX2dlbmVyaWNfbm9kZSAocHAsIFRSRUVfUFVSUE9TRSAodCks IHNwYywgZmxhZ3MsCisJCQkJICAgICBmYWxzZSk7CisJCWlmIChUUkVFX0NI QUlOICh0KSkKKwkJICBwcF9jb21tYSAocHApOworCSAgICAgIH0KKwkgICAg ZWxzZQorCSAgICAgIGdjY191bnJlYWNoYWJsZSAoKTsKKwkgIHBwX3JpZ2h0 X3BhcmVuIChwcCk7CisJICByZXR1cm47CiAJZGVmYXVsdDoKIAkgIGdjY191 bnJlYWNoYWJsZSAoKTsKIAl9Cg== --------------030305050203090301070504--