From mboxrd@z Thu Jan 1 00:00:00 1970 Delivery-date: Tue, 22 Jun 2021 10:28:51 +0200 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by lore.white.stw.pengutronix.de with esmtp (Exim 4.92) (envelope-from ) id 1lvbm7-0008B3-Lq for lore@lore.pengutronix.de; Tue, 22 Jun 2021 10:28:51 +0200 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lvbm0-0003Ru-W2 for lore@pengutronix.de; Tue, 22 Jun 2021 10:28:51 +0200 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4deTRbDFE+xJTdCG2sVZod64Qb4Xneg5GB6yCDCTTg0=; b=E1aAS4sTnT2QAF uQAc7CgXEnf2IA12RQoM04G+oPFzelCQAGJFtISgO2TUK6tVI29KUX7qv1JA9826GGo50jFN09PA1 YDT7TOO/+ehf+Bp+oMfeEfZSlcBzX/YbhcRTR4/j1/AQJ/TiP6AdEL5fS7SVkkYs4ubxnqfPLcmf9 DPhjIgEVAnjW3ngZl+h3PzdoZ1z4W1n13IxwQgnIGxBEQdflNqrl+39uEqSwwsHjzR99At8ekgHY1 kpoOgtOa27ubMnnVkYNTUGBUjz2NWY7oLE0BKG7xSv32lZRVcy4zKy6W0n5eGGhc+5ySOjOOW2OlD yyPRqfQuTimCekEZMZwQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lvbk7-006EBD-6I; Tue, 22 Jun 2021 08:26:47 +0000 Received: from metis.ext.pengutronix.de ([2001:67c:670:201:290:27ff:fe1d:cc33]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lvbji-006E18-Ra for barebox@lists.infradead.org; Tue, 22 Jun 2021 08:26:30 +0000 Received: from dude.hi.pengutronix.de ([2001:67c:670:100:1d::7]) by metis.ext.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lvbjh-0002ij-K7; Tue, 22 Jun 2021 10:26:21 +0200 Received: from afa by dude.hi.pengutronix.de with local (Exim 4.92) (envelope-from ) id 1lvbjh-0005i4-3e; Tue, 22 Jun 2021 10:26:21 +0200 From: Ahmad Fatoum To: barebox@lists.infradead.org Cc: Ahmad Fatoum Date: Tue, 22 Jun 2021 10:26:17 +0200 Message-Id: <20210622082617.18011-9-a.fatoum@pengutronix.de> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210622082617.18011-1-a.fatoum@pengutronix.de> References: <20210622082617.18011-1-a.fatoum@pengutronix.de> MIME-Version: 1.0 X-BeenThere: barebox@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "barebox" X-SA-Exim-Connect-IP: 2607:7c80:54:e::133 X-SA-Exim-Mail-From: barebox-bounces+lore=pengutronix.de@lists.infradead.org X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on metis.ext.pengutronix.de X-Spam-Level: X-Spam-Status: No, score=-4.6 required=4.0 tests=AWL,BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_HELO_NONE,SPF_NONE, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Subject: [PATCH v4 8/8] usbgadget: add support for USB mass storage gadget X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on metis.ext.pengutronix.de) VGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIGZfbWFzc19zdG9yYWdlIGRyaXZlcnMgaW4gTGlu dXggdjUuMTEgYW5kClUtQm9vdCB2MjAyMS4wMS4KClVubGlrZSB0aGUgVS1Cb290IHZlcnNpb24s IGl0IHJ1bnMgYXN5bmNocm9ub3VzbHkgd2l0aG91dCBibG9ja2luZyB0aGUKYm9vdGxvYWRlciBm cm9tIGRvaW5nIG90aGVyIHRhc2tzLCBsaWtlIGV4cG9ydGluZyBvdGhlciBVU0IgZ2FkZ2V0cyBh dAp0aGUgc2FtZSB0aW1lIG9yIGVuYWJsaW5nIHNoZWxsIGFjY2Vzcy4KCldpdGggcG9sbGVycyBh bmQgd29ya3F1ZXVlcywgZW5hYmxpbmcgdGhpcyB3b3VsZCBuZWVkIGEgbGFyZ2UgcmV3b3JrCm9m IHRoZSBjb2RlIHRvIGJlIGNvbXBsZXRlbHkgY2FsbGJhY2sgYmFzZWQsIHdoZW5ldmVyIHRoZSBv cmlnaW5hbApMaW51eCBjb2RlIHNsZWVwcyB3YWl0aW5nIGZvciBldmVudHMuIFdpdGggdGhlIG5l dyBidGhyZWFkIHN1cHBvcnQsCndlIGNhbiBhY3R1YWxseSBzbGVlcCBhbmQgaGFuZG92ZXIgY29u dHJvbCB0byBvdGhlciBidGhyZWFkcyB1bnRpbAp0aGVyZSBpcyBhY3R1YWwgd29yayB0byBkby4K ClNpZ25lZC1vZmYtYnk6IEFobWFkIEZhdG91bSA8YS5mYXRvdW1AcGVuZ3V0cm9uaXguZGU+Ci0t LQogRG9jdW1lbnRhdGlvbi91c2VyL3VzYi5yc3QgICAgICAgICAgfCAgICA1ICsKIGNvbW1hbmRz L3VzYmdhZGdldC5jICAgICAgICAgICAgICAgIHwgICAxMCArLQogY29tbW9uL3VzYmdhZGdldC5j ICAgICAgICAgICAgICAgICAgfCAgIDEwICstCiBkcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyAg ICAgICAgICB8ICAgMTUgKy0KIGRyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZSAgICAgICAgIHwg ICAgMSArCiBkcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYyB8IDI3MjUgKysrKysr KysrKysrKysrKysrKysrKysrKysrCiBkcml2ZXJzL3VzYi9nYWRnZXQvbXVsdGkuYyAgICAgICAg ICB8ICAgMzYgKwogZHJpdmVycy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9uLmMgfCAgMTczICsr CiBkcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uaCB8ICAyNDUgKysrCiBpbmNsdWRl L3Njc2kuaCAgICAgICAgICAgICAgICAgICAgICB8ICAgMTIgKwogaW5jbHVkZS91c2IvZ2FkZ2V0 LW11bHRpLmggICAgICAgICAgfCAgICA0ICsKIGluY2x1ZGUvdXNiL21hc3Nfc3RvcmFnZS5oICAg ICAgICAgIHwgICAyOCArCiBpbmNsdWRlL3VzYi9zdG9yYWdlLmggICAgICAgICAgICAgICB8ICAg ODcgKwogMTMgZmlsZXMgY2hhbmdlZCwgMzM0NyBpbnNlcnRpb25zKCspLCA0IGRlbGV0aW9ucygt KQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5j CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9uLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uaAog Y3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvdXNiL21hc3Nfc3RvcmFnZS5oCiBjcmVhdGUgbW9k ZSAxMDA2NDQgaW5jbHVkZS91c2Ivc3RvcmFnZS5oCgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi91c2VyL3VzYi5yc3QgYi9Eb2N1bWVudGF0aW9uL3VzZXIvdXNiLnJzdAppbmRleCBjYTVmODEz OGRlZGEuLjYyZjY3OTZjOTUzMSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi91c2VyL3VzYi5y c3QKKysrIGIvRG9jdW1lbnRhdGlvbi91c2VyL3VzYi5yc3QKQEAgLTI2NCw2ICsyNjQsMTEgQEAg VVNCIEdhZGdldCBhdXRvc3RhcnQgT3B0aW9ucwogYGBnbG9iYWwudXNiZ2FkZ2V0LmFjbWBgCiAg IEJvb2xlYW4gZmxhZy4gSWYgc2V0IHRvIDEsIENEQyBBQ00gZnVuY3Rpb24gd2lsbCBiZSBjcmVh dGVkLgogICBTZWUgOnJlZjpgY29tbWFuZF91c2JnYWRnZXRgIC1hLiAoRGVmYXVsdCAwKS4KK2Bg Z2xvYmFsLnN5c3RlbS5wYXJ0aXRpb25zYGAKKyAgQ29tbW9uIGZ1bmN0aW9uIGRlc2NyaXB0aW9u IGZvciBhbGwgb2YgREZVLCBmYXN0Ym9vdCBhbmQgVVNCIG1hc3Mgc3RvcmFnZQorICBnYWRnZXRz LiBCb3RoIEZhc3Rib290IGFuZCBERlUgcGFydGl0aW9ucyBhbHNvIGhhdmUgZGVkaWNhdGVkIG92 ZXJyaWRlCisgIHZhcmlhYmxlcyBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHk6OgorCiBgYGds b2JhbC51c2JnYWRnZXQuZGZ1X2Z1bmN0aW9uYGAKICAgRnVuY3Rpb24gZGVzY3JpcHRpb24gZm9y IERGVS4gU2VlIDpyZWY6YGNvbW1hbmRfdXNiZ2FkZ2V0YCAtRCBbZGVzY10uCiBgYGdsb2JhbC5m YXN0Ym9vdC5wYXJ0aXRpb25zYGAKZGlmZiAtLWdpdCBhL2NvbW1hbmRzL3VzYmdhZGdldC5jIGIv Y29tbWFuZHMvdXNiZ2FkZ2V0LmMKaW5kZXggMDcwOTQwMjZkYjcxLi4yOTBmMzNlZmYzOTQgMTAw NjQ0Ci0tLSBhL2NvbW1hbmRzL3VzYmdhZGdldC5jCisrKyBiL2NvbW1hbmRzL3VzYmdhZGdldC5j CkBAIC0yMSw3ICsyMSw3IEBAIHN0YXRpYyBpbnQgZG9fdXNiZ2FkZ2V0KGludCBhcmdjLCBjaGFy ICphcmd2W10pCiAJc3RydWN0IHVzYmdhZGdldF9mdW5jcyBmdW5jcyA9IHt9OwogCWludCBvcHQ7 CiAKLQl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiYXNkQTo6RDo6YiIpKSA+IDAp IHsKKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiYXNkQTo6RDo6Uzo6YiIpKSA+ IDApIHsKIAkJc3dpdGNoIChvcHQpIHsKIAkJY2FzZSAnYSc6CiAJCWNhc2UgJ3MnOgpAQCAtMzUs NiArMzUsMTAgQEAgc3RhdGljIGludCBkb191c2JnYWRnZXQoaW50IGFyZ2MsIGNoYXIgKmFyZ3Zb XSkKIAkJCWZ1bmNzLmZsYWdzIHw9IFVTQkdBREdFVF9GQVNUQk9PVDsKIAkJCWZ1bmNzLmZhc3Ri b290X29wdHMgPSBvcHRhcmc7CiAJCQlicmVhazsKKwkJY2FzZSAnUyc6CisJCQlmdW5jcy5mbGFn cyB8PSBVU0JHQURHRVRfTUFTU19TVE9SQUdFOworCQkJZnVuY3MudW1zX29wdHMgPSBvcHRhcmc7 CisJCQlicmVhazsKIAkJY2FzZSAnYic6CiAJCQlmdW5jcy5mbGFncyB8PSBVU0JHQURHRVRfRVhQ T1JUX0JCVTsKIAkJCWJyZWFrOwpAQCAtNjAsMTMgKzY0LDE1IEBAIEJBUkVCT1hfQ01EX0hFTFBf T1BUICgiLUEgPGRlc2M+IiwgIkNyZWF0ZSBBbmRyb2lkIEZhc3Rib290IGZ1bmN0aW9uLiBJZiAn ZGVzYycKIEJBUkVCT1hfQ01EX0hFTFBfT1BUICgiLWJcdCIsICJpbmNsdWRlIHJlZ2lzdGVyZWQg YmFyZWJveCB1cGRhdGUgaGFuZGxlcnMgKGZhc3Rib290IHNwZWNpZmljKSIpCiBCQVJFQk9YX0NN RF9IRUxQX09QVCAoIi1EIDxkZXNjPiIsICJDcmVhdGUgREZVIGZ1bmN0aW9uLiBJZiAnZGVzYycg aXMgbm90IHByb3ZpZGVkLCAiCiAJCQkJICAgInRyeSB0byB1c2UgJ2dsb2JhbC51c2JnYWRnZXQu ZGZ1X2Z1bmN0aW9uJyB2YXJpYWJsZS4iKQorQkFSRUJPWF9DTURfSEVMUF9PUFQgKCItUyA8ZGVz Yz4iLCAiQ3JlYXRlIFVTQiBNYXNzIFN0b3JhZ2UgZnVuY3Rpb24uIElmICdkZXNjJyBpcyBub3Qg cHJvdmlkZWQsIgorCQkJCSAgICJmYWxsYmFjayBkaXJlY3RseSB0byAnZ2xvYmFsLnN5c3RlbS5w YXJ0aXRpb25zJyB2YXJpYWJsZS4iKQogQkFSRUJPWF9DTURfSEVMUF9PUFQgKCItZFx0IiwgIkRp c2FibGUgdGhlIGN1cnJlbnRseSBydW5uaW5nIGdhZGdldCIpCiBCQVJFQk9YX0NNRF9IRUxQX0VO RAogCiBCQVJFQk9YX0NNRF9TVEFSVCh1c2JnYWRnZXQpCiAJLmNtZAkJPSBkb191c2JnYWRnZXQs CiAJQkFSRUJPWF9DTURfREVTQygiQ3JlYXRlIFVTQiBHYWRnZXQgbXVsdGlmdW5jdGlvbiBkZXZp Y2UiKQotCUJBUkVCT1hfQ01EX09QVFMoIlstYWRBRF0iKQorCUJBUkVCT1hfQ01EX09QVFMoIlst YWRBRFNdIikKIAlCQVJFQk9YX0NNRF9HUk9VUChDTURfR1JQX0hXTUFOSVApCiAJQkFSRUJPWF9D TURfSEVMUChjbWRfdXNiZ2FkZ2V0X2hlbHApCiBCQVJFQk9YX0NNRF9FTkQKZGlmZiAtLWdpdCBh L2NvbW1vbi91c2JnYWRnZXQuYyBiL2NvbW1vbi91c2JnYWRnZXQuYwppbmRleCA5YmJhYTRlYTEy MzguLjM0YTY4NTIzNGI5NSAxMDA2NDQKLS0tIGEvY29tbW9uL3VzYmdhZGdldC5jCisrKyBiL2Nv bW1vbi91c2JnYWRnZXQuYwpAQCAtNjYsNiArNjYsMTQgQEAgaW50IHVzYmdhZGdldF9yZWdpc3Rl cihjb25zdCBzdHJ1Y3QgdXNiZ2FkZ2V0X2Z1bmNzICpmdW5jcykKIAkJfQogCX0KIAorCWlmIChm bGFncyAmIFVTQkdBREdFVF9NQVNTX1NUT1JBR0UpIHsKKwkJb3B0cy0+dW1zX29wdHMuZmlsZXMg PSBwYXJzZShmdW5jcy0+dW1zX29wdHMpOworCQlpZiAoSVNfRU5BQkxFRChDT05GSUdfVVNCX0dB REdFVF9NQVNTX1NUT1JBR0UpICYmIGZpbGVfbGlzdF9lbXB0eShvcHRzLT51bXNfb3B0cy5maWxl cykpIHsKKwkJCWZpbGVfbGlzdF9mcmVlKG9wdHMtPnVtc19vcHRzLmZpbGVzKTsKKwkJCW9wdHMt PnVtc19vcHRzLmZpbGVzID0gc3lzdGVtX3BhcnRpdGlvbnNfZ2V0KCk7CisJCX0KKwl9CisKIAlp ZiAoZmxhZ3MgJiBVU0JHQURHRVRfRkFTVEJPT1QpIHsKIAkJb3B0cy0+ZmFzdGJvb3Rfb3B0cy5m aWxlcyA9IHBhcnNlKGZ1bmNzLT5mYXN0Ym9vdF9vcHRzKTsKIAkJaWYgKElTX0VOQUJMRUQoQ09O RklHX0ZBU1RCT09UX0JBU0UpICYmIGZpbGVfbGlzdF9lbXB0eShvcHRzLT5mYXN0Ym9vdF9vcHRz LmZpbGVzKSkgewpAQCAtMTIyLDcgKzEzMCw3IEBAIHN0YXRpYyBpbnQgdXNiZ2FkZ2V0X2F1dG9z dGFydF9zZXQoc3RydWN0IHBhcmFtX2QgKnBhcmFtLCB2b2lkICpjdHgpCiAJaWYgKGFjbSkKIAkJ ZnVuY3MuZmxhZ3MgfD0gVVNCR0FER0VUX0FDTTsKIAotCWZ1bmNzLmZsYWdzIHw9IFVTQkdBREdF VF9ERlUgfCBVU0JHQURHRVRfRkFTVEJPT1Q7CisJZnVuY3MuZmxhZ3MgfD0gVVNCR0FER0VUX0RG VSB8IFVTQkdBREdFVF9GQVNUQk9PVCB8IFVTQkdBREdFVF9NQVNTX1NUT1JBR0U7CiAKIAllcnIg PSB1c2JnYWRnZXRfcmVnaXN0ZXIoJmZ1bmNzKTsKIAlpZiAoIWVycikKZGlmZiAtLWdpdCBhL2Ry aXZlcnMvdXNiL2dhZGdldC9LY29uZmlnIGIvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcKaW5k ZXggNGVkNmNiYmVlMWI5Li41NzRhNjgyMWFkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dh ZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0zNiwxMCAr MzYsMTIgQEAgY29uZmlnIFVTQl9HQURHRVRfQVVUT1NUQVJUCiAJYm9vbAogCWRlZmF1bHQgeQog CXByb21wdCAiQXV0b21hdGljYWxseSBzdGFydCB1c2JnYWRnZXQgb24gYm9vdCIKKwlzZWxlY3Qg U1lTVEVNX1BBUlRJVElPTlMgaWYgVVNCX0dBREdFVF9NQVNTX1NUT1JBR0UKIAloZWxwCiAJICBF bmFibGluZyB0aGlzIG9wdGlvbiBhbGxvd3MgdG8gYXV0b21hdGljYWxseSBzdGFydCBhIGRmdSBv cgogCSAgZmFzdGJvb3QgZ2FkZ2V0IGR1cmluZyBib290LiBUaGlzIGJlaGF2aW91ciBpcyBjb250 cm9sbGVkIHdpdGgKLQkgIHRoZSBnbG9iYWwudXNiZ2FkZ2V0LmRmdV9mdW5jdGlvbiBhbmQgZ2xv YmFsLmZhc3Rib290LiogdmFyaWFibGVzLgorCSAgdGhlIGdsb2JhbC51c2JnYWRnZXQuZGZ1X2Z1 bmN0aW9uLCBnbG9iYWwuc3lzdGVtLnBhcnRpdGlvbnMKKwkgIGFuZCBnbG9iYWwuZmFzdGJvb3Qu KiB2YXJpYWJsZXMuCiAKIGNvbW1lbnQgIlVTQiBHYWRnZXQgZHJpdmVycyIKIApAQCAtNTcsNCAr NTksMTUgQEAgY29uZmlnIFVTQl9HQURHRVRfRkFTVEJPT1QKIAlzZWxlY3QgQkFOTkVSCiAJc2Vs ZWN0IEZBU1RCT09UX0JBU0UKIAlwcm9tcHQgIkFuZHJvaWQgRmFzdGJvb3QgVVNCIEdhZGdldCIK KworY29uZmlnIFVTQl9HQURHRVRfTUFTU19TVE9SQUdFCisJYm9vbAorCXNlbGVjdCBCVEhSRUFE CisJcHJvbXB0ICJVU0IgTWFzcyBTdG9yYWdlIEdhZGdldCIKKwloZWxwCisJICBUaGUgTWFzcyBT dG9yYWdlIEdhZGdldCBhY3RzIGFzIGEgVVNCIE1hc3MgU3RvcmFnZSBkaXNrIGRyaXZlLgorCSAg QXMgaXRzIHN0b3JhZ2UgcmVwb3NpdG9yeSBpdCBjYW4gdXNlIGEgcmVndWxhciBmaWxlIG9yIGEg YmxvY2sKKwkgIGRldmljZS4gTXVsdGlwbGUgc3RvcmFnZXMgY2FuIGJlIHNwZWNpZmllZCBhdCBv bmNlIG9uCisJICBpbnN0YW50aWF0aW9uIHRpbWUuCisKIGVuZGlmCmRpZmYgLS1naXQgYS9kcml2 ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKaW5k ZXggMjc2NzNmY2YwZWY2Li41YmE0OTIwYzA4NWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dh ZGdldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKQEAgLTMsNiAr Myw3IEBAIG9iai0kKENPTkZJR19VU0JfR0FER0VUKSArPSBjb21wb3NpdGUubyBjb25maWcubyB1 c2JzdHJpbmcubyBlcGF1dG9jb25mLm8gdWRjLWNvCiBvYmotJChDT05GSUdfVVNCX0dBREdFVF9T RVJJQUwpICs9IHVfc2VyaWFsLm8gc2VyaWFsLm8gZl9zZXJpYWwubyBmX2FjbS5vCiBvYmotJChD T05GSUdfVVNCX0dBREdFVF9ERlUpICs9IGRmdS5vCiBvYmotJChDT05GSUdfVVNCX0dBREdFVF9G QVNUQk9PVCkgKz0gZl9mYXN0Ym9vdC5vCitvYmotJChDT05GSUdfVVNCX0dBREdFVF9NQVNTX1NU T1JBR0UpICs9IGZfbWFzc19zdG9yYWdlLm8gc3RvcmFnZV9jb21tb24ubwogb2JqLSQoQ09ORklH X1VTQl9HQURHRVRfRFJJVkVSX0FSQykgKz0gZnNsX3VkYy5vCiBwYmwtJChDT05GSUdfVVNCX0dB REdFVF9EUklWRVJfQVJDX1BCTCkgKz0gZnNsX3VkY19wYmwubwogb2JqLSQoQ09ORklHX1VTQl9H QURHRVRfRFJJVkVSX0FUOTEpICs9IGF0OTFfdWRjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNi L2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfbWFzc19zdG9y YWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi40ODk0ZjkxZmE2 ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2Uu YwpAQCAtMCwwICsxLDI3MjUgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w KyBPUiBCU0QtMy1DbGF1c2UKKy8qCisgKiBmX21hc3Nfc3RvcmFnZS5jIC0tIE1hc3MgU3RvcmFn ZSBVU0IgQ29tcG9zaXRlIEZ1bmN0aW9uCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDgg QWxhbiBTdGVybgorICogQ29weXJpZ2h0IChDKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq ICAgICAgICAgICAgICAgICAgICBBdXRob3I6IE1pY2hhbCBOYXphcmV3aWN6IDxtLm5hemFyZXdp Y3pAc2Ftc3VuZy5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICovCisKKy8qCisgKiBU aGUgTWFzcyBTdG9yYWdlIEZ1bmN0aW9uIGFjdHMgYXMgYSBVU0IgTWFzcyBTdG9yYWdlIGRldmlj ZSwKKyAqIGFwcGVhcmluZyB0byB0aGUgaG9zdCBhcyBhIGRpc2sgZHJpdmUgb3IgYXMgYSBDRC1S T00gZHJpdmUuICBJbgorICogYWRkaXRpb24gdG8gcHJvdmlkaW5nIGFuIGV4YW1wbGUgb2YgYSBn ZW51aW5lbHkgdXNlZnVsIGNvbXBvc2l0ZQorICogZnVuY3Rpb24gZm9yIGEgVVNCIGRldmljZSwg aXQgYWxzbyBpbGx1c3RyYXRlcyBhIHRlY2huaXF1ZSBvZgorICogZG91YmxlLWJ1ZmZlcmluZyBm b3IgaW5jcmVhc2VkIHRocm91Z2hwdXQuCisgKgorICogRnVuY3Rpb24gc3VwcG9ydHMgbXVsdGlw bGUgbG9naWNhbCB1bml0cyAoTFVOcykuICBCYWNraW5nIHN0b3JhZ2UKKyAqIGZvciBlYWNoIExV TiBpcyBwcm92aWRlZCBieSBhIHJlZ3VsYXIgZmlsZSBvciBhIGJsb2NrIGRldmljZS4KKyAqIEFj Y2VzcyBmb3IgZWFjaCBMVU4gY2FuIGJlIGxpbWl0ZWQgdG8gcmVhZC1vbmx5LiAgTW9yZW92ZXIs IHRoZQorICogZnVuY3Rpb24gY2FuIGluZGljYXRlIHRoYXQgTFVOIGlzIHJlbW92YWJsZSBhbmQv b3IgQ0QtUk9NLiAgKFRoZQorICogbGF0ZXIgaW1wbGllcyByZWFkLW9ubHkgYWNjZXNzLikKKyAq CisgKiBNU0YgaXMgY29uZmlndXJlZCBieSBzcGVjaWZ5aW5nIGEgZnNnX2NvbmZpZyBzdHJ1Y3R1 cmUuICBJdCBoYXMgdGhlCisgKiBmb2xsb3dpbmcgZmllbGRzOgorICoKKyAqCW5sdW5zCQlOdW1i ZXIgb2YgTFVOcyBmdW5jdGlvbiBoYXZlIChhbnl3aGVyZSBmcm9tIDEKKyAqCQkJCXRvIEZTR19N QVhfTFVOUyB3aGljaCBpcyA4KS4KKyAqCWx1bnMJCUFuIGFycmF5IG9mIExVTiBjb25maWd1cmF0 aW9uIHZhbHVlcy4gIFRoaXMKKyAqCQkJCXNob3VsZCBiZSBmaWxsZWQgZm9yIGVhY2ggTFVOIHRo YXQKKyAqCQkJCWZ1bmN0aW9uIHdpbGwgaW5jbHVkZSAoaWUuIGZvciAibmx1bnMiCisgKgkJCQlM VU5zKS4gIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaGFzCisgKgkJCQl0aGUgZm9sbG93aW5n IGZpZWxkczoKKyAqCS0+ZmlsZW5hbWUJVGhlIHBhdGggdG8gdGhlIGJhY2tpbmcgZmlsZSBmb3Ig dGhlIExVTi4KKyAqCQkJCVJlcXVpcmVkIGlmIExVTiBpcyBub3QgbWFya2VkIGFzCisgKgkJCQly ZW1vdmFibGUuCisgKgktPnJvCQlGbGFnIHNwZWNpZnlpbmcgYWNjZXNzIHRvIHRoZSBMVU4gc2hh bGwgYmUKKyAqCQkJCXJlYWQtb25seS4gIFRoaXMgaXMgaW1wbGllZCBpZiBDRC1ST00KKyAqCQkJ CWVtdWxhdGlvbiBpcyBlbmFibGVkIGFzIHdlbGwgYXMgd2hlbgorICoJCQkJaXQgd2FzIGltcG9z c2libGUgdG8gb3BlbiAiZmlsZW5hbWUiCisgKgkJCQlpbiBSL1cgbW9kZS4KKyAqCS0+cmVtb3Zh YmxlCUZsYWcgc3BlY2lmeWluZyB0aGF0IExVTiBzaGFsbCBiZSBpbmRpY2F0ZWQgYXMKKyAqCQkJ CWJlaW5nIHJlbW92YWJsZS4KKyAqCS0+Y2Ryb20JCUZsYWcgc3BlY2lmeWluZyB0aGF0IExVTiBz aGFsbCBiZSByZXBvcnRlZCBhcworICoJCQkJYmVpbmcgYSBDRC1ST00uCisgKgorICoJdmVuZG9y X25hbWUKKyAqCXByb2R1Y3RfbmFtZQorICoJcmVsZWFzZQkJSW5mb3JtYXRpb24gdXNlZCBhcyBh IHJlcGx5IHRvIElOUVVJUlkKKyAqCQkJCXJlcXVlc3QuICBUbyB1c2UgZGVmYXVsdCBzZXQgdG8g TlVMTCwKKyAqCQkJCU5VTEwsIDB4ZmZmZiByZXNwZWN0aXZlbHkuICBUaGUgZmlyc3QKKyAqCQkJ CWZpZWxkIHNob3VsZCBiZSA4IGFuZCB0aGUgc2Vjb25kIDE2CisgKgkJCQljaGFyYWN0ZXJzIG9y IGxlc3MuCisgKgorICoJY2FuX3N0YWxsCVNldCB0byBwZXJtaXQgZnVuY3Rpb24gdG8gaGFsdCBi dWxrIGVuZHBvaW50cy4KKyAqCQkJCURpc2FibGVkIG9uIHNvbWUgVVNCIGRldmljZXMga25vd24g bm90CisgKgkJCQl0byB3b3JrIGNvcnJlY3RseS4gIFlvdSBzaG91bGQgc2V0IGl0CisgKgkJCQl0 byB0cnVlLgorICoKKyAqIElmICJyZW1vdmFibGUiIGlzIG5vdCBzZXQgZm9yIGEgTFVOIHRoZW4g YSBiYWNraW5nIGZpbGUgbXVzdCBiZQorICogc3BlY2lmaWVkLiAgSWYgaXQgaXMgc2V0LCB0aGVu IE5VTEwgZmlsZW5hbWUgbWVhbnMgdGhlIExVTidzIG1lZGl1bQorICogaXMgbm90IGxvYWRlZCAo YW4gZW1wdHkgc3RyaW5nIGFzICJmaWxlbmFtZSIgaW4gdGhlIGZzZ19jb25maWcKKyAqIHN0cnVj dHVyZSBjYXVzZXMgZXJyb3IpLiAgVGhlIENELVJPTSBlbXVsYXRpb24gaW5jbHVkZXMgYSBzaW5n bGUKKyAqIGRhdGEgdHJhY2sgYW5kIG5vIGF1ZGlvIHRyYWNrczsgaGVuY2UgdGhlcmUgbmVlZCBi ZSBvbmx5IG9uZQorICogYmFja2luZyBmaWxlIHBlciBMVU4uICBOb3RlIGFsc28gdGhhdCB0aGUg Q0QtUk9NIGJsb2NrIGxlbmd0aCBpcworICogc2V0IHRvIDUxMiByYXRoZXIgdGhhbiB0aGUgbW9y ZSBjb21tb24gdmFsdWUgMjA0OC4KKyAqCisgKgorICogTVNGIGluY2x1ZGVzIHN1cHBvcnQgZm9y IG1vZHVsZSBwYXJhbWV0ZXJzLiAgSWYgZ2FkZ2V0IHVzaW5nIGl0CisgKiBkZWNpZGVzIHRvIHVz ZSBpdCwgdGhlIGZvbGxvd2luZyBtb2R1bGUgcGFyYW1ldGVycyB3aWxsIGJlCisgKiBhdmFpbGFi bGU6CisgKgorICoJZmlsZT1maWxlbmFtZVssZmlsZW5hbWUuLi5dCisgKgkJCU5hbWVzIG9mIHRo ZSBmaWxlcyBvciBibG9jayBkZXZpY2VzIHVzZWQgZm9yCisgKgkJCQliYWNraW5nIHN0b3JhZ2Uu CisgKglybz1iWyxiLi4uXQlEZWZhdWx0IGZhbHNlLCBib29sZWFuIGZvciByZWFkLW9ubHkgYWNj ZXNzLgorICoJcmVtb3ZhYmxlPWJbLGIuLi5dCisgKgkJCURlZmF1bHQgdHJ1ZSwgYm9vbGVhbiBm b3IgcmVtb3ZhYmxlIG1lZGlhLgorICoJY2Ryb209YlssYi4uLl0JRGVmYXVsdCBmYWxzZSwgYm9v bGVhbiBmb3Igd2hldGhlciB0byBlbXVsYXRlCisgKgkJCQlhIENELVJPTSBkcml2ZS4KKyAqCWx1 bnM9TgkJRGVmYXVsdCBOID0gbnVtYmVyIG9mIGZpbGVuYW1lcywgbnVtYmVyIG9mCisgKgkJCQlM VU5zIHRvIHN1cHBvcnQuCisgKglzdGFsbAkJRGVmYXVsdCBkZXRlcm1pbmVkIGFjY29yZGluZyB0 byB0aGUgdHlwZSBvZgorICoJCQkJVVNCIGRldmljZSBjb250cm9sbGVyICh1c3VhbGx5IHRydWUp LAorICoJCQkJYm9vbGVhbiB0byBwZXJtaXQgdGhlIGRyaXZlciB0byBoYWx0CisgKgkJCQlidWxr IGVuZHBvaW50cy4KKyAqCisgKiBUaGUgbW9kdWxlIHBhcmFtZXRlcnMgbWF5IGJlIHByZWZpeGVk IHdpdGggc29tZSBzdHJpbmcuICBZb3UgbmVlZAorICogdG8gY29uc3VsdCBnYWRnZXQncyBkb2N1 bWVudGF0aW9uIG9yIHNvdXJjZSB0byB2ZXJpZnkgd2hldGhlciBpdCBpcworICogdXNpbmcgdGhv c2UgbW9kdWxlIHBhcmFtZXRlcnMgYW5kIGlmIGl0IGRvZXMgd2hhdCBhcmUgdGhlIHByZWZpeGVz CisgKiAobG9vayBmb3IgRlNHX01PRFVMRV9QQVJBTUVURVJTKCkgbWFjcm8gdXNhZ2UsIHdoYXQn cyBpbnNpZGUgaXQgaXMKKyAqIHRoZSBwcmVmaXgpLgorICoKKyAqCisgKiBSZXF1aXJlbWVudHMg YXJlIG1vZGVzdDsgb25seSBhIGJ1bGstaW4gYW5kIGEgYnVsay1vdXQgZW5kcG9pbnQgYXJlCisg KiBuZWVkZWQuICBUaGUgbWVtb3J5IHJlcXVpcmVtZW50IGFtb3VudHMgdG8gdHdvIDE2SyBidWZm ZXJzLCBzaXplCisgKiBjb25maWd1cmFibGUgYnkgYSBwYXJhbWV0ZXIuICBTdXBwb3J0IGlzIGlu Y2x1ZGVkIGZvciBib3RoCisgKiBmdWxsLXNwZWVkIGFuZCBoaWdoLXNwZWVkIG9wZXJhdGlvbi4K KyAqCisgKiBOb3RlIHRoYXQgdGhlIGRyaXZlciBpcyBzbGlnaHRseSBub24tcG9ydGFibGUgaW4g dGhhdCBpdCBhc3N1bWVzIGEKKyAqIHNpbmdsZSBtZW1vcnkvRE1BIGJ1ZmZlciB3aWxsIGJlIHVz ZWFibGUgZm9yIGJ1bGstaW4sIGJ1bGstb3V0LCBhbmQKKyAqIGludGVycnVwdC1pbiBlbmRwb2lu dHMuICBXaXRoIG1vc3QgZGV2aWNlIGNvbnRyb2xsZXJzIHRoaXMgaXNuJ3QgYW4KKyAqIGlzc3Vl LCBidXQgdGhlcmUgbWF5IGJlIHNvbWUgd2l0aCBoYXJkd2FyZSByZXN0cmljdGlvbnMgdGhhdCBw cmV2ZW50CisgKiBhIGJ1ZmZlciBmcm9tIGJlaW5nIHVzZWQgYnkgbW9yZSB0aGFuIG9uZSBlbmRw b2ludC4KKyAqCisgKiBXaGVuIGEgTFVOIHJlY2VpdmUgYW4gImVqZWN0IiBTQ1NJIHJlcXVlc3Qg KFN0YXJ0L1N0b3AgVW5pdCksCisgKiBpZiB0aGUgTFVOIGlzIHJlbW92YWJsZSwgdGhlIGJhY2tp bmcgZmlsZSBpcyByZWxlYXNlZCB0byBzaW11bGF0ZQorICogZWplY3Rpb24uCisgKgorICoKKyAq IFRoaXMgZnVuY3Rpb24gaXMgaGVhdmlseSBiYXNlZCBvbiAiRmlsZS1iYWNrZWQgU3RvcmFnZSBH YWRnZXQiIGJ5CisgKiBBbGFuIFN0ZXJuIHdoaWNoIGluIHR1cm4gaXMgaGVhdmlseSBiYXNlZCBv biAiR2FkZ2V0IFplcm8iIGJ5IERhdmlkCisgKiBCcm93bmVsbC4gIFRoZSBkcml2ZXIncyBTQ1NJ IGNvbW1hbmQgaW50ZXJmYWNlIHdhcyBiYXNlZCBvbiB0aGUKKyAqICJJbmZvcm1hdGlvbiB0ZWNo bm9sb2d5IC0gU21hbGwgQ29tcHV0ZXIgU3lzdGVtIEludGVyZmFjZSAtIDIiCisgKiBkb2N1bWVu dCBmcm9tIFgzVDkuMiBQcm9qZWN0IDM3NUQsIFJldmlzaW9uIDEwTCwgNy1TRVAtOTMsCisgKiBh dmFpbGFibGUgYXQgPGh0dHA6Ly93d3cudDEwLm9yZy9mdHAvdDEwL2RyYWZ0cy9zMi9zMi1yMTBs LnBkZj4uCisgKiBUaGUgc2luZ2xlIGV4Y2VwdGlvbiBpcyBvcGNvZGUgMHgyMyAoUkVBRCBGT1JN QVQgQ0FQQUNJVElFUyksIHdoaWNoCisgKiB3YXMgYmFzZWQgb24gdGhlICJVbml2ZXJzYWwgU2Vy aWFsIEJ1cyBNYXNzIFN0b3JhZ2UgQ2xhc3MgVUZJCisgKiBDb21tYW5kIFNwZWNpZmljYXRpb24i IGRvY3VtZW50LCBSZXZpc2lvbiAxLjAsIERlY2VtYmVyIDE0LCAxOTk4LAorICogYXZhaWxhYmxl IGF0CisgKiA8aHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZGV2Y2xhc3NfZG9jcy91c2Jt YXNzLXVmaTEwLnBkZj4uCisgKi8KKworLyoKKyAqCQkJCURyaXZlciBEZXNpZ24KKyAqCisgKiBU aGUgTVNGIGlzIGZhaXJseSBzdHJhaWdodGZvcndhcmQuICBUaGVyZSBpcyBhIG1haW4ga2VybmVs CisgKiB0aHJlYWQgdGhhdCBoYW5kbGVzIG1vc3Qgb2YgdGhlIHdvcmsuICBJbnRlcnJ1cHQgcm91 dGluZXMgZmllbGQKKyAqIGNhbGxiYWNrcyBmcm9tIHRoZSBjb250cm9sbGVyIGRyaXZlcjogYnVs ay0gYW5kIGludGVycnVwdC1yZXF1ZXN0CisgKiBjb21wbGV0aW9uIG5vdGlmaWNhdGlvbnMsIGVu ZHBvaW50LTAgZXZlbnRzLCBhbmQgZGlzY29ubmVjdCBldmVudHMuCisgKiBDb21wbGV0aW9uIGV2 ZW50cyBhcmUgcGFzc2VkIHRvIHRoZSBtYWluIHRocmVhZCBieSB3YWtldXAgY2FsbHMuICBNYW55 CisgKiBlcDAgcmVxdWVzdHMgYXJlIGhhbmRsZWQgYXQgaW50ZXJydXB0IHRpbWUsIGJ1dCBTZXRJ bnRlcmZhY2UsCisgKiBTZXRDb25maWd1cmF0aW9uLCBhbmQgZGV2aWNlIHJlc2V0IHJlcXVlc3Rz IGFyZSBmb3J3YXJkZWQgdG8gdGhlCisgKiB0aHJlYWQgaW4gdGhlIGZvcm0gb2YgImV4Y2VwdGlv bnMiIHVzaW5nIFNJR1VTUjEgc2lnbmFscyAoc2luY2UgdGhleQorICogc2hvdWxkIGludGVycnVw dCBhbnkgb25nb2luZyBmaWxlIEkvTyBvcGVyYXRpb25zKS4KKyAqCisgKiBUaGUgdGhyZWFkJ3Mg bWFpbiByb3V0aW5lIGltcGxlbWVudHMgdGhlIHN0YW5kYXJkIGNvbW1hbmQvZGF0YS9zdGF0dXMK KyAqIHBhcnRzIG9mIGEgU0NTSSBpbnRlcmFjdGlvbi4gIEl0IGFuZCBpdHMgc3Vicm91dGluZXMg YXJlIGZ1bGwgb2YgdGVzdHMKKyAqIGZvciBwZW5kaW5nIHNpZ25hbHMvZXhjZXB0aW9ucyAtLSBh bGwgdGhpcyBwb2xsaW5nIGlzIG5lY2Vzc2FyeSBzaW5jZQorICogdGhlIGtlcm5lbCBoYXMgbm8g c2V0am1wL2xvbmdqbXAgZXF1aXZhbGVudHMuICAoTWF5YmUgdGhpcyBpcyBhbgorICogaW5kaWNh dGlvbiB0aGF0IHRoZSBkcml2ZXIgcmVhbGx5IHdhbnRzIHRvIGJlIHJ1bm5pbmcgaW4gdXNlcnNw YWNlLikKKyAqIEFuIGltcG9ydGFudCBwb2ludCBpcyB0aGF0IHNvIGxvbmcgYXMgdGhlIHRocmVh ZCBpcyBhbGl2ZSBpdCBrZWVwcyBhbgorICogb3BlbiByZWZlcmVuY2UgdG8gdGhlIGJhY2tpbmcg ZmlsZS4gIFRoaXMgd2lsbCBwcmV2ZW50IHVubW91bnRpbmcKKyAqIHRoZSBiYWNraW5nIGZpbGUn cyB1bmRlcmx5aW5nIGZpbGVzeXN0ZW0gYW5kIGNvdWxkIGNhdXNlIHByb2JsZW1zCisgKiBkdXJp bmcgc3lzdGVtIHNodXRkb3duLCBmb3IgZXhhbXBsZS4gIFRvIHByZXZlbnQgc3VjaCBwcm9ibGVt cywgdGhlCisgKiB0aHJlYWQgY2F0Y2hlcyBJTlQsIFRFUk0sIGFuZCBLSUxMIHNpZ25hbHMgYW5k IGNvbnZlcnRzIHRoZW0gaW50bworICogYW4gRVhJVCBleGNlcHRpb24uCisgKgorICogSW4gbm9y bWFsIG9wZXJhdGlvbiB0aGUgbWFpbiB0aHJlYWQgaXMgc3RhcnRlZCBkdXJpbmcgdGhlIGdhZGdl dCdzCisgKiBmc2dfYmluZCgpIGNhbGxiYWNrIGFuZCBzdG9wcGVkIGR1cmluZyBmc2dfdW5iaW5k KCkuICBCdXQgaXQgY2FuCisgKiBhbHNvIGV4aXQgd2hlbiBpdCByZWNlaXZlcyBhIHNpZ25hbCwg YW5kIHRoZXJlJ3Mgbm8gcG9pbnQgbGVhdmluZworICogdGhlIGdhZGdldCBydW5uaW5nIHdoZW4g dGhlIHRocmVhZCBpcyBkZWFkLiAgQXQgb2YgdGhpcyBtb21lbnQsIE1TRgorICogcHJvdmlkZXMg bm8gd2F5IHRvIGRlcmVnaXN0ZXIgdGhlIGdhZGdldCB3aGVuIHRocmVhZCBkaWVzIC0tIG1heWJl CisgKiBhIGNhbGxiYWNrIGZ1bmN0aW9ucyBpcyBuZWVkZWQuCisgKgorICogVG8gcHJvdmlkZSBt YXhpbXVtIHRocm91Z2hwdXQsIHRoZSBkcml2ZXIgdXNlcyBhIGNpcmN1bGFyIHBpcGVsaW5lIG9m CisgKiBidWZmZXIgaGVhZHMgKHN0cnVjdCBmc2dfYnVmZmhkKS4gIEluIHByaW5jaXBsZSB0aGUg cGlwZWxpbmUgY2FuIGJlCisgKiBhcmJpdHJhcmlseSBsb25nOyBpbiBwcmFjdGljZSB0aGUgYmVu ZWZpdHMgZG9uJ3QganVzdGlmeSBoYXZpbmcgbW9yZQorICogdGhhbiAyIHN0YWdlcyAoaS5lLiwg ZG91YmxlIGJ1ZmZlcmluZykuICBCdXQgaXQgaGVscHMgdG8gdGhpbmsgb2YgdGhlCisgKiBwaXBl bGluZSBhcyBiZWluZyBhIGxvbmcgb25lLiAgRWFjaCBidWZmZXIgaGVhZCBjb250YWlucyBhIGJ1 bGstaW4gYW5kCisgKiBhIGJ1bGstb3V0IHJlcXVlc3QgcG9pbnRlciAoc2luY2UgdGhlIGJ1ZmZl ciBjYW4gYmUgdXNlZCBmb3IgYm90aAorICogb3V0cHV0IGFuZCBpbnB1dCAtLSBkaXJlY3Rpb25z IGFsd2F5cyBhcmUgZ2l2ZW4gZnJvbSB0aGUgaG9zdCdzCisgKiBwb2ludCBvZiB2aWV3KSBhcyB3 ZWxsIGFzIGEgcG9pbnRlciB0byB0aGUgYnVmZmVyIGFuZCB2YXJpb3VzIHN0YXRlCisgKiB2YXJp YWJsZXMuCisgKgorICogVXNlIG9mIHRoZSBwaXBlbGluZSBmb2xsb3dzIGEgc2ltcGxlIHByb3Rv Y29sLiAgVGhlcmUgaXMgYSB2YXJpYWJsZQorICogKGZzZy0+bmV4dF9idWZmaGRfdG9fZmlsbCkg dGhhdCBwb2ludHMgdG8gdGhlIG5leHQgYnVmZmVyIGhlYWQgdG8gdXNlLgorICogQXQgYW55IHRp bWUgdGhhdCBidWZmZXIgaGVhZCBtYXkgc3RpbGwgYmUgaW4gdXNlIGZyb20gYW4gZWFybGllcgor ICogcmVxdWVzdCwgc28gZWFjaCBidWZmZXIgaGVhZCBoYXMgYSBzdGF0ZSB2YXJpYWJsZSBpbmRp Y2F0aW5nIHdoZXRoZXIKKyAqIGl0IGlzIEVNUFRZLCBGVUxMLCBvciBCVVNZLiAgVHlwaWNhbCB1 c2UgaW52b2x2ZXMgd2FpdGluZyBmb3IgdGhlCisgKiBidWZmZXIgaGVhZCB0byBiZSBFTVBUWSwg ZmlsbGluZyB0aGUgYnVmZmVyIGVpdGhlciBieSBmaWxlIEkvTyBvciBieQorICogVVNCIEkvTyAo ZHVyaW5nIHdoaWNoIHRoZSBidWZmZXIgaGVhZCBpcyBCVVNZKSwgYW5kIG1hcmtpbmcgdGhlIGJ1 ZmZlcgorICogaGVhZCBGVUxMIHdoZW4gdGhlIEkvTyBpcyBjb21wbGV0ZS4gIFRoZW4gdGhlIGJ1 ZmZlciB3aWxsIGJlIGVtcHRpZWQKKyAqIChhZ2FpbiBwb3NzaWJseSBieSBVU0IgSS9PLCBkdXJp bmcgd2hpY2ggaXQgaXMgbWFya2VkIEJVU1kpIGFuZAorICogZmluYWxseSBtYXJrZWQgRU1QVFkg YWdhaW4gKHBvc3NpYmx5IGJ5IGEgY29tcGxldGlvbiByb3V0aW5lKS4KKyAqCisgKiBBIG1vZHVs ZSBwYXJhbWV0ZXIgdGVsbHMgdGhlIGRyaXZlciB0byBhdm9pZCBzdGFsbGluZyB0aGUgYnVsawor ICogZW5kcG9pbnRzIHdoZXJldmVyIHRoZSB0cmFuc3BvcnQgc3BlY2lmaWNhdGlvbiBhbGxvd3Mu ICBUaGlzIGlzCisgKiBuZWNlc3NhcnkgZm9yIHNvbWUgVURDcyBsaWtlIHRoZSBTdXBlckgsIHdo aWNoIGNhbm5vdCByZWxpYWJseSBjbGVhciBhCisgKiBoYWx0IG9uIGEgYnVsayBlbmRwb2ludC4g IEhvd2V2ZXIsIHVuZGVyIGNlcnRhaW4gY2lyY3Vtc3RhbmNlcyB0aGUKKyAqIEJ1bGstb25seSBz cGVjaWZpY2F0aW9uIHJlcXVpcmVzIGEgc3RhbGwuICBJbiBzdWNoIGNhc2VzIHRoZSBkcml2ZXIK KyAqIHdpbGwgaGFsdCB0aGUgZW5kcG9pbnQgYW5kIHNldCBhIGZsYWcgaW5kaWNhdGluZyB0aGF0 IGl0IHNob3VsZCBjbGVhcgorICogdGhlIGhhbHQgaW4gc29mdHdhcmUgZHVyaW5nIHRoZSBuZXh0 IGRldmljZSByZXNldC4gIEhvcGVmdWxseSB0aGlzCisgKiB3aWxsIHBlcm1pdCBldmVyeXRoaW5n IHRvIHdvcmsgY29ycmVjdGx5LiAgRnVydGhlcm1vcmUsIGFsdGhvdWdoIHRoZQorICogc3BlY2lm aWNhdGlvbiBhbGxvd3MgdGhlIGJ1bGstb3V0IGVuZHBvaW50IHRvIGhhbHQgd2hlbiB0aGUgaG9z dCBzZW5kcworICogdG9vIG11Y2ggZGF0YSwgaW1wbGVtZW50aW5nIHRoaXMgd291bGQgY2F1c2Ug YW4gdW5hdm9pZGFibGUgcmFjZS4KKyAqIFRoZSBkcml2ZXIgd2lsbCBhbHdheXMgdXNlIHRoZSAi bm8tc3RhbGwiIGFwcHJvYWNoIGZvciBPVVQgdHJhbnNmZXJzLgorICoKKyAqIE9uZSBzdWJ0bGUg cG9pbnQgY29uY2VybnMgc2VuZGluZyBzdGF0dXMtc3RhZ2UgcmVzcG9uc2VzIGZvciBlcDAKKyAq IHJlcXVlc3RzLiAgU29tZSBvZiB0aGVzZSByZXF1ZXN0cywgc3VjaCBhcyBkZXZpY2UgcmVzZXQs IGNhbiBpbnZvbHZlCisgKiBpbnRlcnJ1cHRpbmcgYW4gb25nb2luZyBmaWxlIEkvTyBvcGVyYXRp b24sIHdoaWNoIG1pZ2h0IHRha2UgYW4KKyAqIGFyYml0cmFyaWx5IGxvbmcgdGltZS4gIER1cmlu ZyB0aGF0IGRlbGF5IHRoZSBob3N0IG1pZ2h0IGdpdmUgdXAgb24KKyAqIHRoZSBvcmlnaW5hbCBl cDAgcmVxdWVzdCBhbmQgaXNzdWUgYSBuZXcgb25lLiAgV2hlbiB0aGF0IGhhcHBlbnMgdGhlCisg KiBkcml2ZXIgc2hvdWxkIG5vdCBub3RpZnkgdGhlIGhvc3QgYWJvdXQgY29tcGxldGlvbiBvZiB0 aGUgb3JpZ2luYWwKKyAqIHJlcXVlc3QsIGFzIHRoZSBob3N0IHdpbGwgbm8gbG9uZ2VyIGJlIHdh aXRpbmcgZm9yIGl0LiAgU28gdGhlIGRyaXZlcgorICogYXNzaWducyB0byBlYWNoIGVwMCByZXF1 ZXN0IGEgdW5pcXVlIHRhZywgYW5kIGl0IGtlZXBzIHRyYWNrIG9mIHRoZQorICogdGFnIHZhbHVl IG9mIHRoZSByZXF1ZXN0IGFzc29jaWF0ZWQgd2l0aCBhIGxvbmctcnVubmluZyBleGNlcHRpb24K KyAqIChkZXZpY2UtcmVzZXQsIGludGVyZmFjZS1jaGFuZ2UsIG9yIGNvbmZpZ3VyYXRpb24tY2hh bmdlKS4gIFdoZW4gdGhlCisgKiBleGNlcHRpb24gaGFuZGxlciBpcyBmaW5pc2hlZCwgdGhlIHN0 YXR1cy1zdGFnZSByZXNwb25zZSBpcyBzdWJtaXR0ZWQKKyAqIG9ubHkgaWYgdGhlIGN1cnJlbnQg ZXAwIHJlcXVlc3QgdGFnIGlzIGVxdWFsIHRvIHRoZSBleGNlcHRpb24gcmVxdWVzdAorICogdGFn LiAgVGh1cyBvbmx5IHRoZSBtb3N0IHJlY2VudGx5IHJlY2VpdmVkIGVwMCByZXF1ZXN0IHdpbGwg Z2V0IGEKKyAqIHN0YXR1cy1zdGFnZSByZXNwb25zZS4KKyAqCisgKiBXYXJuaW5nOiBUaGlzIGRy aXZlciBzb3VyY2UgZmlsZSBpcyB0b28gbG9uZy4gIEl0IG91Z2h0IHRvIGJlIHNwbGl0IHVwCisg KiBpbnRvIGEgaGVhZGVyIGZpbGUgcGx1cyBhYm91dCAzIHNlcGFyYXRlIC5jIGZpbGVzLCB0byBo YW5kbGUgdGhlIGRldGFpbHMKKyAqIG9mIHRoZSBHYWRnZXQsIFVTQiBNYXNzIFN0b3JhZ2UsIGFu ZCBTQ1NJIHByb3RvY29scy4KKyAqLworCisvKiAjZGVmaW5lIFZFUkJPU0VfREVCVUcgKi8KKy8q ICNkZWZpbmUgRFVNUF9NU0dTICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgImZfdW1zOiAiIGZt dAorCisjaW5jbHVkZSA8Y29tbW9uLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8 bGludXgvc3RhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxmY250bC5o PgorI2luY2x1ZGUgPGZpbGUtbGlzdC5oPgorI2luY2x1ZGUgPGRtYS5oPgorI2luY2x1ZGUgPGxp bnV4L2J1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+CisjaW5jbHVkZSA8bGludXgvcGFn ZW1hcC5oPgorI2luY2x1ZGUgPGRpc2tzLmg+CisjaW5jbHVkZSA8c2NzaS5oPgorCisjaW5jbHVk ZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8dXNiL21hc3Nfc3RvcmFnZS5oPgorCisjaW5jbHVk ZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUg PHVzYi9nYWRnZXQuaD4KKyNpbmNsdWRlIDx1c2IvY29tcG9zaXRlLmg+CisjaW5jbHVkZSA8bGlu dXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGJ0 aHJlYWQuaD4KKyNpbmNsdWRlIDxzY2hlZC5oPgorCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwor I2RlZmluZSBGU0dfRFJJVkVSX0RFU0MJInVtcyIKKyNkZWZpbmUgVU1TX05BTUVfTEVOIDE2CisK KyNkZWZpbmUgRlNHX0RSSVZFUl9WRVJTSU9OCSIyMDEyLzA2LzUiCisKK3N0YXRpYyBjb25zdCBj aGFyIGZzZ19zdHJpbmdfaW50ZXJmYWNlW10gPSAiTWFzcyBTdG9yYWdlIjsKKworI2luY2x1ZGUg InN0b3JhZ2VfY29tbW9uLmgiCisKKy8qIFN0YXRpYyBzdHJpbmdzLCBpbiBVVEYtOCAoZm9yIHNp bXBsaWNpdHkgd2UgdXNlIG9ubHkgQVNDSUkgY2hhcmFjdGVycykgKi8KK3N0cnVjdCB1c2Jfc3Ry aW5nCQlmc2dfc3RyaW5nc1tdID0geworCXtGU0dfU1RSSU5HX0lOVEVSRkFDRSwJCWZzZ19zdHJp bmdfaW50ZXJmYWNlfSwKKwl7fQorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X3N0cmlu Z3MJZnNnX3N0cmluZ3RhYiA9IHsKKwkubGFuZ3VhZ2UJPSAweDA0MDksCQkvKiBlbi11cyAqLwor CS5zdHJpbmdzCT0gZnNnX3N0cmluZ3MsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitz dHJ1Y3QgYnRocmVhZCAqdGhyZWFkX3Rhc2s7CisKK3N0cnVjdCBrcmVmIHtpbnQgeDsgfTsKKwor c3RydWN0IGZzZ19kZXY7CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9saXN0ICp1bXNfZmlsZXM7CisK Ky8qIERhdGEgc2hhcmVkIGJ5IGFsbCB0aGUgRlNHIGluc3RhbmNlcy4gKi8KK3N0cnVjdCBmc2df Y29tbW9uIHsKKwlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0OworCXN0cnVjdCBmc2dfZGV2CQkq ZnNnLCAqbmV3X2ZzZzsKKworCXN0cnVjdCB1c2JfZXAJCSplcDA7CQkvKiBDb3B5IG9mIGdhZGdl dC0+ZXAwICovCisJc3RydWN0IHVzYl9yZXF1ZXN0CSplcDByZXE7CS8qIENvcHkgb2YgY2Rldi0+ cmVxICovCisJdW5zaWduZWQgaW50CQllcDBfcmVxX3RhZzsKKworCXN0cnVjdCBmc2dfYnVmZmhk CSpuZXh0X2J1ZmZoZF90b19maWxsOworCXN0cnVjdCBmc2dfYnVmZmhkCSpuZXh0X2J1ZmZoZF90 b19kcmFpbjsKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAlidWZmaGRzW0ZTR19OVU1fQlVGRkVSU107CisK KwlpbnQJCQljbW5kX3NpemU7CisJdTgJCQljbW5kW01BWF9DT01NQU5EX1NJWkVdOworCisJdW5z aWduZWQgaW50CQlubHVuczsKKwl1bnNpZ25lZCBpbnQJCWx1bjsKKwlzdHJ1Y3QgZnNnX2x1biAg ICAgICAgICBsdW5zW0ZTR19NQVhfTFVOU107CisKKwl1bnNpZ25lZCBpbnQJCWJ1bGtfb3V0X21h eHBhY2tldDsKKwllbnVtIGZzZ19zdGF0ZQkJc3RhdGU7CQkvKiBGb3IgZXhjZXB0aW9uIGhhbmRs aW5nICovCisJdW5zaWduZWQgaW50CQlleGNlcHRpb25fcmVxX3RhZzsKKworCWVudW0gZGF0YV9k aXJlY3Rpb24JZGF0YV9kaXI7CisJdTMyCQkJZGF0YV9zaXplOworCXUzMgkJCWRhdGFfc2l6ZV9m cm9tX2NtbmQ7CisJdTMyCQkJdGFnOworCXUzMgkJCXJlc2lkdWU7CisJdTMyCQkJdXNiX2Ftb3Vu dF9sZWZ0OworCisJdW5zaWduZWQgaW50CQljYW5fc3RhbGw6MTsKKwl1bnNpZ25lZCBpbnQJCXBo YXNlX2Vycm9yOjE7CisJdW5zaWduZWQgaW50CQlzaG9ydF9wYWNrZXRfcmVjZWl2ZWQ6MTsKKwl1 bnNpZ25lZCBpbnQJCWJhZF9sdW5fb2theToxOworCXVuc2lnbmVkIGludAkJcnVubmluZzoxOwor CisJc3RydWN0IGNvbXBsZXRpb24JdGhyZWFkX3dha2V1cF9uZWVkZWQ7CisKKwkvKiBDYWxsYmFj ayBmdW5jdGlvbnMuICovCisJY29uc3Qgc3RydWN0IGZzZ19vcGVyYXRpb25zCSpvcHM7CisJLyog R2FkZ2V0J3MgcHJpdmF0ZSBkYXRhLiAqLworCXZvaWQJCQkqcHJpdmF0ZV9kYXRhOworCisJY29u c3QgY2hhciAqdmVuZG9yX25hbWU7CQkvKiAgOCBjaGFyYWN0ZXJzIG9yIGxlc3MgKi8KKwljb25z dCBjaGFyICpwcm9kdWN0X25hbWU7CQkvKiAxNiBjaGFyYWN0ZXJzIG9yIGxlc3MgKi8KKwl1MTYg cmVsZWFzZTsKKworCS8qIFZlbmRvciAoOCBjaGFycyksIHByb2R1Y3QgKDE2IGNoYXJzKSwgcmVs ZWFzZSAoNAorCSAqIGhleGFkZWNpbWFsIGRpZ2l0cykgYW5kIE5VTCBieXRlICovCisJY2hhciBp bnF1aXJ5X3N0cmluZ1s4ICsgMTYgKyA0ICsgMV07Cit9OworCitzdHJ1Y3QgZnNnX2NvbmZpZyB7 CisJdW5zaWduZWQgbmx1bnM7CisJc3RydWN0IGZzZ19sdW5fY29uZmlnIHsKKwkJY29uc3QgY2hh ciAqZmlsZW5hbWU7CisJCWNoYXIgcm87CisJCWNoYXIgcmVtb3ZhYmxlOworCQljaGFyIGNkcm9t OworCQljaGFyIG5vZnVhOworCX0gbHVuc1tGU0dfTUFYX0xVTlNdOworCisJLyogQ2FsbGJhY2sg ZnVuY3Rpb25zLiAqLworCWNvbnN0IHN0cnVjdCBmc2dfb3BlcmF0aW9ucyAgICAgKm9wczsKKwkv KiBHYWRnZXQncyBwcml2YXRlIGRhdGEuICovCisJdm9pZAkJCSpwcml2YXRlX2RhdGE7CisKKwlj b25zdCBjaGFyICp2ZW5kb3JfbmFtZTsJCS8qICA4IGNoYXJhY3RlcnMgb3IgbGVzcyAqLworCWNv bnN0IGNoYXIgKnByb2R1Y3RfbmFtZTsJCS8qIDE2IGNoYXJhY3RlcnMgb3IgbGVzcyAqLworCisJ Y2hhcgkJCWNhbl9zdGFsbDsKK307CisKK3N0cnVjdCBmc2dfZGV2IHsKKwlzdHJ1Y3QgdXNiX2Z1 bmN0aW9uCWZ1bmN0aW9uOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQ7CS8qIENvcHkgb2Yg Y2Rldi0+Z2FkZ2V0ICovCisJc3RydWN0IGZzZ19jb21tb24JKmNvbW1vbjsKKworCXUxNgkJCWlu dGVyZmFjZV9udW1iZXI7CisKKwl1bnNpZ25lZCBpbnQJCWJ1bGtfaW5fZW5hYmxlZDoxOworCXVu c2lnbmVkIGludAkJYnVsa19vdXRfZW5hYmxlZDoxOworCisJdW5zaWduZWQgbG9uZwkJYXRvbWlj X2JpdGZsYWdzOworI2RlZmluZSBJR05PUkVfQlVMS19PVVQJCTAKKworCXN0cnVjdCB1c2JfZXAJ CSpidWxrX2luOworCXN0cnVjdCB1c2JfZXAJCSpidWxrX291dDsKK307CisKKworc3RhdGljIGlu bGluZSBpbnQgX19mc2dfaXNfc2V0KHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24sCisJCQkgICAg ICAgY29uc3QgY2hhciAqZnVuYywgdW5zaWduZWQgbGluZSkKK3sKKwlpZiAoY29tbW9uLT5mc2cp CisJCXJldHVybiAxOworCUVSUk9SKGNvbW1vbiwgImNvbW1vbi0+ZnNnIGlzIE5VTEwgaW4gJXMg YXQgJXVcbiIsIGZ1bmMsIGxpbmUpOworCVdBUk5fT04oMSk7CisKKwlyZXR1cm4gMDsKK30KKwor I2RlZmluZSBmc2dfaXNfc2V0KGNvbW1vbikgbGlrZWx5KF9fZnNnX2lzX3NldChjb21tb24sIF9f ZnVuY19fLCBfX0xJTkVfXykpCisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZnNnX2RldiAqZnNn X2Zyb21fZnVuYyhzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmKQoreworCXJldHVybiBjb250YWluZXJf b2YoZiwgc3RydWN0IGZzZ19kZXYsIGZ1bmN0aW9uKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgZl91bXNfb3B0cyAqCitmc2dfb3B0c19mcm9tX2Z1bmNfaW5zdChjb25zdCBzdHJ1Y3QgdXNi X2Z1bmN0aW9uX2luc3RhbmNlICpmaSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGZpLCBzdHJ1 Y3QgZl91bXNfb3B0cywgZnVuY19pbnN0KTsKK30KKwordHlwZWRlZiB2b2lkICgqZnNnX3JvdXRp bmVfdCkoc3RydWN0IGZzZ19kZXYgKik7CisKK3N0YXRpYyBpbnQgZXhjZXB0aW9uX2luX3Byb2dy ZXNzKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCit7CisJcmV0dXJuIGNvbW1vbi0+c3RhdGUg PiBGU0dfU1RBVEVfSURMRTsKK30KKworLyogTWFrZSBidWxrLW91dCByZXF1ZXN0cyBiZSBkaXZp c2libGUgYnkgdGhlIG1heHBhY2tldCBzaXplICovCitzdGF0aWMgdm9pZCBzZXRfYnVsa19vdXRf cmVxX2xlbmd0aChzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLAorCQlzdHJ1Y3QgZnNnX2J1ZmZo ZCAqYmgsIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJdW5zaWduZWQgaW50CXJlbTsKKworCWJo LT5idWxrX291dF9pbnRlbmRlZF9sZW5ndGggPSBsZW5ndGg7CisJcmVtID0gbGVuZ3RoICUgY29t bW9uLT5idWxrX291dF9tYXhwYWNrZXQ7CisJaWYgKHJlbSA+IDApCisJCWxlbmd0aCArPSBjb21t b24tPmJ1bGtfb3V0X21heHBhY2tldCAtIHJlbTsKKwliaC0+b3V0cmVxLT5sZW5ndGggPSBsZW5n dGg7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBzdHJ1Y3QgZl91bXNfb3B0 cyB1bXNbMTRdOyAvLyBGSVhNRQorc3RhdGljIGludCB1bXNfY291bnQ7CisKK3N0YXRpYyBpbnQg ZnNnX3NldF9oYWx0KHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0cnVjdCB1c2JfZXAgKmVwKQorewor CWNvbnN0IGNoYXIJKm5hbWU7CisKKwlpZiAoZXAgPT0gZnNnLT5idWxrX2luKQorCQluYW1lID0g ImJ1bGstaW4iOworCWVsc2UgaWYgKGVwID09IGZzZy0+YnVsa19vdXQpCisJCW5hbWUgPSAiYnVs ay1vdXQiOworCWVsc2UKKwkJbmFtZSA9IGVwLT5uYW1lOworCURCRyhmc2csICIlcyBzZXQgaGFs dFxuIiwgbmFtZSk7CisJcmV0dXJuIHVzYl9lcF9zZXRfaGFsdChlcCk7Cit9CisKKy8qLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCisKKy8qIFRoZXNlIHJvdXRpbmVzIG1heSBiZSBjYWxsZWQgaW4gcHJvY2Vz cyBjb250ZXh0IG9yIGluX2lycSAqLworCisvKiBDYWxsZXIgbXVzdCBob2xkIGZzZy0+bG9jayAq Lworc3RhdGljIHZvaWQgd2FrZXVwX3RocmVhZChzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQor eworCWNvbXBsZXRlKCZjb21tb24tPnRocmVhZF93YWtldXBfbmVlZGVkKTsKK30KKworc3RhdGlj IHZvaWQgcmVwb3J0X2V4Y2VwdGlvbihjb25zdCBjaGFyICpwcmVmaXgsIGVudW0gZnNnX3N0YXRl IHN0YXRlKQoreworCWNvbnN0IGNoYXIgKm1zZyA9ICI8dW5rbm93bj4iOworCXN3aXRjaCAoc3Rh dGUpIHsKKwkvKiBUaGlzIG9uZSBpc24ndCB1c2VkIGFueXdoZXJlICovCisJY2FzZSBGU0dfU1RB VEVfQ09NTUFORF9QSEFTRToKKwkJbXNnID0gIkNvbW1hbmQgUGhhc2UiOworCQlicmVhazsKKwlj YXNlIEZTR19TVEFURV9EQVRBX1BIQVNFOgorCQltc2cgPSAiRGF0YSBQaGFzZSI7CisJCWJyZWFr OworCWNhc2UgRlNHX1NUQVRFX1NUQVRVU19QSEFTRToKKwkJbXNnID0gIlN0YXR1cyBQaGFzZSI7 CisJCWJyZWFrOworCisJY2FzZSBGU0dfU1RBVEVfSURMRToKKwkJbXNnID0gIklkbGUiOworCQli cmVhazsKKwljYXNlIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVDoKKwkJbXNnID0gImFib3J0IGJ1 bGsgb3V0IjsKKwkJYnJlYWs7CisJY2FzZSBGU0dfU1RBVEVfUkVTRVQ6CisJCW1zZyA9ICJyZXNl dCI7CisJCWJyZWFrOworCWNhc2UgRlNHX1NUQVRFX0lOVEVSRkFDRV9DSEFOR0U6CisJCW1zZyA9 ICJpbnRlcmZhY2UgY2hhbmdlIjsKKwkJYnJlYWs7CisJY2FzZSBGU0dfU1RBVEVfQ09ORklHX0NI QU5HRToKKwkJbXNnID0gImNvbmZpZyBjaGFuZ2UiOworCQlicmVhazsKKwljYXNlIEZTR19TVEFU RV9ESVNDT05ORUNUOgorCQltc2cgPSAiZGlzY29ubmVjdCI7CisJCWJyZWFrOworCWNhc2UgRlNH X1NUQVRFX0VYSVQ6CisJCW1zZyA9ICJleGl0IjsKKwkJYnJlYWs7CisJY2FzZSBGU0dfU1RBVEVf VEVSTUlOQVRFRDoKKwkJbXNnID0gInRlcm1pbmF0ZWQiOworCQlicmVhazsKKwl9CisKKwlwcl9k ZWJ1ZygiJXM6ICVzXG4iLCBwcmVmaXgsIG1zZyk7Cit9CisKK3N0YXRpYyB2b2lkIHJhaXNlX2V4 Y2VwdGlvbihzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLCBlbnVtIGZzZ19zdGF0ZSBuZXdfc3Rh dGUpCit7CisJLyogRG8gbm90aGluZyBpZiBhIGhpZ2hlci1wcmlvcml0eSBleGNlcHRpb24gaXMg YWxyZWFkeSBpbiBwcm9ncmVzcy4KKwkgKiBJZiBhIGxvd2VyLW9yLWVxdWFsIHByaW9yaXR5IGV4 Y2VwdGlvbiBpcyBpbiBwcm9ncmVzcywgcHJlZW1wdCBpdAorCSAqIGFuZCBub3RpZnkgdGhlIG1h aW4gdGhyZWFkIGJ5IHNlbmRpbmcgaXQgYSBzaWduYWwuICovCisJaWYgKGNvbW1vbi0+c3RhdGUg PD0gbmV3X3N0YXRlKSB7CisJCXJlcG9ydF9leGNlcHRpb24oInJhaXNpbmciLCBuZXdfc3RhdGUp OworCQljb21tb24tPmV4Y2VwdGlvbl9yZXFfdGFnID0gY29tbW9uLT5lcDBfcmVxX3RhZzsKKwkJ Y29tbW9uLT5zdGF0ZSA9IG5ld19zdGF0ZTsKKwkJd2FrZXVwX3RocmVhZChjb21tb24pOworCX0K K30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBlcDBfcXVldWUoc3RydWN0 IGZzZ19jb21tb24gKmNvbW1vbikKK3sKKwlpbnQJcmM7CisKKwlyYyA9IHVzYl9lcF9xdWV1ZShj b21tb24tPmVwMCwgY29tbW9uLT5lcDByZXEpOworCWNvbW1vbi0+ZXAwLT5kcml2ZXJfZGF0YSA9 IGNvbW1vbjsKKwlpZiAocmMgIT0gMCAmJiByYyAhPSAtRVNIVVRET1dOKSB7CisJCS8qIFdlIGNh bid0IGRvIG11Y2ggbW9yZSB0aGFuIHdhaXQgZm9yIGEgcmVzZXQgKi8KKwkJV0FSTklORyhjb21t b24sICJlcnJvciBpbiBzdWJtaXNzaW9uOiAlcyAtLT4gJWRcbiIsCisJCQljb21tb24tPmVwMC0+ bmFtZSwgcmMpOworCX0KKwlyZXR1cm4gcmM7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisK Ky8qIEJ1bGsgYW5kIGludGVycnVwdCBlbmRwb2ludCBjb21wbGV0aW9uIGhhbmRsZXJzLgorICog VGhlc2UgYWx3YXlzIHJ1biBpbl9pcnEuICovCisKK3N0YXRpYyB2b2lkIGJ1bGtfaW5fY29tcGxl dGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVj dCBmc2dfY29tbW9uCSpjb21tb24gPSBlcC0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGZzZ19idWZm aGQJKmJoID0gcmVxLT5jb250ZXh0OworCisJaWYgKHJlcS0+c3RhdHVzIHx8IHJlcS0+YWN0dWFs ICE9IHJlcS0+bGVuZ3RoKQorCQlEQkcoY29tbW9uLCAiJXMgLS0+ICVkLCAldS8ldVxuIiwgX19m dW5jX18sCisJCQkJcmVxLT5zdGF0dXMsIHJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisJaWYg KHJlcS0+c3RhdHVzID09IC1FQ09OTlJFU0VUKQkJLyogUmVxdWVzdCB3YXMgY2FuY2VsbGVkICov CisJCXVzYl9lcF9maWZvX2ZsdXNoKGVwKTsKKworCS8qIEhvbGQgdGhlIGxvY2sgd2hpbGUgd2Ug dXBkYXRlIHRoZSByZXF1ZXN0IGFuZCBidWZmZXIgc3RhdGVzICovCisJYmgtPmlucmVxX2J1c3kg PSAwOworCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsKKwl3YWtldXBfdGhyZWFkKGNvbW1v bik7Cit9CisKK3N0YXRpYyB2b2lkIGJ1bGtfb3V0X2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVw LCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgZnNnX2NvbW1vbgkqY29tbW9u ID0gZXAtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBmc2dfYnVmZmhkCSpiaCA9IHJlcS0+Y29udGV4 dDsKKworCWR1bXBfbXNnKGNvbW1vbiwgImJ1bGstb3V0IiwgcmVxLT5idWYsIHJlcS0+YWN0dWFs KTsKKwlpZiAocmVxLT5zdGF0dXMgfHwgcmVxLT5hY3R1YWwgIT0gYmgtPmJ1bGtfb3V0X2ludGVu ZGVkX2xlbmd0aCkKKwkJREJHKGNvbW1vbiwgIiVzIC0tPiAlZCwgJXUvJXVcbiIsIF9fZnVuY19f LAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwKKwkJCQliaC0+YnVsa19vdXRfaW50ZW5k ZWRfbGVuZ3RoKTsKKwlpZiAocmVxLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQpCQkvKiBSZXF1ZXN0 IHdhcyBjYW5jZWxsZWQgKi8KKwkJdXNiX2VwX2ZpZm9fZmx1c2goZXApOworCisJLyogSG9sZCB0 aGUgbG9jayB3aGlsZSB3ZSB1cGRhdGUgdGhlIHJlcXVlc3QgYW5kIGJ1ZmZlciBzdGF0ZXMgKi8K KwliaC0+b3V0cmVxX2J1c3kgPSAwOworCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9GVUxMOworCXdh a2V1cF90aHJlYWQoY29tbW9uKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyogRXAw IGNsYXNzLXNwZWNpZmljIGhhbmRsZXJzLiAgVGhlc2UgYWx3YXlzIHJ1biBpbl9pcnEuICovCisK K3N0YXRpYyBpbnQgZnNnX3NldHVwKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYsCisJCWNvbnN0IHN0 cnVjdCB1c2JfY3RybHJlcXVlc3QgKmN0cmwpCit7CisJc3RydWN0IGZzZ19kZXYJCSpmc2cgPSBm c2dfZnJvbV9mdW5jKGYpOworCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxID0gZnNnLT5jb21tb24t PmVwMHJlcTsKKwl1MTYJCQl3X2luZGV4ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZjdHJsLT53SW5k ZXgpOworCXUxNgkJCXdfdmFsdWUgPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmN0cmwtPndWYWx1ZSk7 CisJdTE2CQkJd19sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2xlMTYoJmN0cmwtPndMZW5ndGgpOwor CisJaWYgKCFmc2dfaXNfc2V0KGZzZy0+Y29tbW9uKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwor CisJc3dpdGNoIChjdHJsLT5iUmVxdWVzdCkgeworCisJY2FzZSBVU19CVUxLX1JFU0VUX1JFUVVF U1Q6CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0KKwkJICAgIChVU0JfRElSX09VVCB8IFVT Ql9UWVBFX0NMQVNTIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSkpCisJCQlicmVhazsKKwkJaWYgKHdf aW5kZXggIT0gZnNnLT5pbnRlcmZhY2VfbnVtYmVyIHx8IHdfdmFsdWUgIT0gMCkKKwkJCXJldHVy biAtRURPTTsKKworCQkvKiBSYWlzZSBhbiBleGNlcHRpb24gdG8gc3RvcCB0aGUgY3VycmVudCBv cGVyYXRpb24KKwkJICogYW5kIHJlaW5pdGlhbGl6ZSBvdXIgc3RhdGUuICovCisJCURCRyhmc2cs ICJidWxrIHJlc2V0IHJlcXVlc3RcbiIpOworCQlyYWlzZV9leGNlcHRpb24oZnNnLT5jb21tb24s IEZTR19TVEFURV9SRVNFVCk7CisJCXJldHVybiBERUxBWUVEX1NUQVRVUzsKKworCWNhc2UgVVNf QlVMS19HRVRfTUFYX0xVTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPQorCQkgICAgKFVT Ql9ESVJfSU4gfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UpKQorCQkJYnJl YWs7CisJCWlmICh3X2luZGV4ICE9IGZzZy0+aW50ZXJmYWNlX251bWJlciB8fCB3X3ZhbHVlICE9 IDApCisJCQlyZXR1cm4gLUVET007CisJCVZEQkcoZnNnLCAiZ2V0IG1heCBMVU5cbiIpOworCQkq KHU4ICopIHJlcS0+YnVmID0gZnNnLT5jb21tb24tPm5sdW5zIC0gMTsKKworCQkvKiBSZXNwb25k IHdpdGggZGF0YS9zdGF0dXMgKi8KKwkJcmVxLT5sZW5ndGggPSBtaW4oKHUxNikxLCB3X2xlbmd0 aCk7CisJCXJldHVybiBlcDBfcXVldWUoZnNnLT5jb21tb24pOworCX0KKworCVZEQkcoZnNnLAor CSAgICAgInVua25vd24gY2xhc3Mtc3BlY2lmaWMgY29udHJvbCByZXEgIgorCSAgICAgIiUwMngu JTAyeCB2JTA0eCBpJTA0eCBsJXVcbiIsCisJICAgICBjdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwt PmJSZXF1ZXN0LAorCSAgICAgZ2V0X3VuYWxpZ25lZF9sZTE2KCZjdHJsLT53VmFsdWUpLCB3X2lu ZGV4LCB3X2xlbmd0aCk7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLworCisvKiBBbGwgdGhlIGZvbGxvd2luZyByb3V0aW5lcyBydW4gaW4gcHJvY2VzcyBj b250ZXh0ICovCisKKy8qIFVzZSB0aGlzIGZvciBidWxrIG9yIGludGVycnVwdCB0cmFuc2ZlcnMs IG5vdCBlcDAgKi8KK3N0YXRpYyB2b2lkIHN0YXJ0X3RyYW5zZmVyKHN0cnVjdCBmc2dfZGV2ICpm c2csIHN0cnVjdCB1c2JfZXAgKmVwLAorCQlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSwgaW50ICpw YnVzeSwKKwkJZW51bSBmc2dfYnVmZmVyX3N0YXRlICpzdGF0ZSkKK3sKKwlpbnQJcmM7CisKKwlp ZiAoZXAgPT0gZnNnLT5idWxrX2luKQorCQlkdW1wX21zZyhmc2csICJidWxrLWluIiwgcmVxLT5i dWYsIHJlcS0+bGVuZ3RoKTsKKworCSpwYnVzeSA9IDE7CisJKnN0YXRlID0gQlVGX1NUQVRFX0JV U1k7CisJcmMgPSB1c2JfZXBfcXVldWUoZXAsIHJlcSk7CisJaWYgKHJjICE9IDApIHsKKwkJKnBi dXN5ID0gMDsKKwkJKnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCisJCS8qIFdlIGNhbid0IGRv IG11Y2ggbW9yZSB0aGFuIHdhaXQgZm9yIGEgcmVzZXQgKi8KKworCQkvKiBOb3RlOiBjdXJyZW50 bHkgdGhlIG5ldDIyODAgZHJpdmVyIGZhaWxzIHplcm8tbGVuZ3RoCisJCSAqIHN1Ym1pc3Npb25z IGlmIERNQSBpcyBlbmFibGVkLiAqLworCQlpZiAocmMgIT0gLUVTSFVURE9XTiAmJiAhKHJjID09 IC1FT1BOT1RTVVBQICYmCisJCQkJCQlyZXEtPmxlbmd0aCA9PSAwKSkKKwkJCVdBUk5JTkcoZnNn LCAiZXJyb3IgaW4gc3VibWlzc2lvbjogJXMgLS0+ICVkXG4iLAorCQkJCQllcC0+bmFtZSwgcmMp OworCX0KK30KKworI2RlZmluZSBTVEFSVF9UUkFOU0ZFUl9PUihjb21tb24sIGVwX25hbWUsIHJl cSwgcGJ1c3ksIHN0YXRlKQkJXAorCWlmIChmc2dfaXNfc2V0KGNvbW1vbikpCQkJCQkJXAorCQlz dGFydF90cmFuc2ZlcigoY29tbW9uKS0+ZnNnLCAoY29tbW9uKS0+ZnNnLT5lcF9uYW1lLAlcCisJ CQkgICAgICAgcmVxLCBwYnVzeSwgc3RhdGUpOwkJCVwKKwllbHNlCisKKyNkZWZpbmUgU1RBUlRf VFJBTlNGRVIoY29tbW9uLCBlcF9uYW1lLCByZXEsIHBidXN5LCBzdGF0ZSkJCVwKKwlTVEFSVF9U UkFOU0ZFUl9PUihjb21tb24sIGVwX25hbWUsIHJlcSwgcGJ1c3ksIHN0YXRlKSAodm9pZCkwCisK K3N0YXRpYyBpbnQgc2xlZXBfdGhyZWFkKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pCit7CisJ aW50IHJldDsKKworCS8qIFdhaXQgdW50aWwgYSBzaWduYWwgYXJyaXZlcyBvciB3ZSBhcmUgd29r ZW4gdXAgKi8KKwlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmNvbW1v bi0+dGhyZWFkX3dha2V1cF9uZWVkZWQpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwly ZWluaXRfY29tcGxldGlvbigmY29tbW9uLT50aHJlYWRfd2FrZXVwX25lZWRlZCk7CisJcmV0dXJu IDA7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZG9fcmVhZChzdHJ1 Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQoreworCXN0cnVjdCBmc2dfbHVuCQkqY3VybHVuID0gJmNv bW1vbi0+bHVuc1tjb21tb24tPmx1bl07CisJdTMyCQkJbGJhOworCXN0cnVjdCBmc2dfYnVmZmhk CSpiaDsKKwlpbnQJCQlyYzsKKwl1MzIJCQlhbW91bnRfbGVmdDsKKwlsb2ZmX3QJCQlmaWxlX29m ZnNldDsKKwl1bnNpZ25lZCBpbnQJCWFtb3VudDsKKwl1bnNpZ25lZCBpbnQJCXBhcnRpYWxfcGFn ZTsKKwlzc2l6ZV90CQkJbnJlYWQ7CisKKwkvKiBHZXQgdGhlIHN0YXJ0aW5nIExvZ2ljYWwgQmxv Y2sgQWRkcmVzcyBhbmQgY2hlY2sgdGhhdCBpdCdzCisJICogbm90IHRvbyBiaWcgKi8KKwlpZiAo Y29tbW9uLT5jbW5kWzBdID09IFNDU0lfUkVBRDYpCisJCWxiYSA9IGdldF91bmFsaWduZWRfYmUy NCgmY29tbW9uLT5jbW5kWzFdKTsKKwllbHNlIHsKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTMy KCZjb21tb24tPmNtbmRbMl0pOworCisJCS8qIFdlIGFsbG93IERQTyAoRGlzYWJsZSBQYWdlIE91 dCA9IGRvbid0IHNhdmUgZGF0YSBpbiB0aGUKKwkJICogY2FjaGUpIGFuZCBGVUEgKEZvcmNlIFVu aXQgQWNjZXNzID0gZG9uJ3QgcmVhZCBmcm9tIHRoZQorCQkgKiBjYWNoZSksIGJ1dCB3ZSBkb24n dCBpbXBsZW1lbnQgdGhlbS4gKi8KKwkJaWYgKChjb21tb24tPmNtbmRbMV0gJiB+MHgxOCkgIT0g MCkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJ CQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3Rv cnMpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09V VF9PRl9SQU5HRTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWZpbGVfb2Zmc2V0ID0gKChsb2Zm X3QpIGxiYSkgPDwgOTsKKworCS8qIENhcnJ5IG91dCB0aGUgZmlsZSByZWFkcyAqLworCWFtb3Vu dF9sZWZ0ID0gY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kOworCWlmICh1bmxpa2VseShhbW91 bnRfbGVmdCA9PSAwKSkKKwkJcmV0dXJuIC1FSU87CQkvKiBObyBkZWZhdWx0IHJlcGx5ICovCisK Kwlmb3IgKDs7KSB7CisJCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0byBiZWNvbWUgYXZh aWxhYmxlICovCisJCWJoID0gY29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsOworCQl3aGlsZSAo YmgtPnN0YXRlICE9IEJVRl9TVEFURV9FTVBUWSkgeworCQkJcmMgPSBzbGVlcF90aHJlYWQoY29t bW9uKTsKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7CisJCX0KKworCQkvKiBGaWd1cmUgb3V0 IGhvdyBtdWNoIHdlIG5lZWQgdG8gcmVhZDoKKwkJICogVHJ5IHRvIHJlYWQgdGhlIHJlbWFpbmlu ZyBhbW91bnQuCisJCSAqIEJ1dCBkb24ndCByZWFkIG1vcmUgdGhhbiB0aGUgYnVmZmVyIHNpemUu CisJCSAqIEFuZCBkb24ndCB0cnkgdG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUuCisJ CSAqIEZpbmFsbHksIGlmIHdlJ3JlIG5vdCBhdCBhIHBhZ2UgYm91bmRhcnksIGRvbid0IHJlYWQg cGFzdAorCQkgKgl0aGUgbmV4dCBwYWdlLgorCQkgKiBJZiB0aGlzIG1lYW5zIHJlYWRpbmcgMCB0 aGVuIHdlIHdlcmUgYXNrZWQgdG8gcmVhZCBwYXN0CisJCSAqCXRoZSBlbmQgb2YgZmlsZS4gKi8K KwkJYW1vdW50ID0gbWluKGFtb3VudF9sZWZ0LCBGU0dfQlVGTEVOKTsKKwkJcGFydGlhbF9wYWdl ID0gZmlsZV9vZmZzZXQgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJCWlmIChwYXJ0aWFsX3Bh Z2UgPiAwKQorCQkJYW1vdW50ID0gbWluKGFtb3VudCwgKHVuc2lnbmVkIGludCkgUEFHRV9DQUNI RV9TSVpFIC0KKwkJCQkJcGFydGlhbF9wYWdlKTsKKworCisJCS8qIElmIHdlIHdlcmUgYXNrZWQg dG8gcmVhZCBwYXN0IHRoZSBlbmQgb2YgZmlsZSwKKwkJICogZW5kIHdpdGggYW4gZW1wdHkgYnVm ZmVyLiAqLworCQlpZiAoYW1vdW50ID09IDApIHsKKwkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9CisJ CQkJCVNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCQljdXJsdW4tPmlu Zm9fdmFsaWQgPSAxOworCQkJYmgtPmlucmVxLT5sZW5ndGggPSAwOworCQkJYmgtPnN0YXRlID0g QlVGX1NUQVRFX0ZVTEw7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFBlcmZvcm0gdGhlIHJlYWQg Ki8KKwkJbnJlYWQgPSBwcmVhZCh1bXNbY29tbW9uLT5sdW5dLmZkLCBiaC0+YnVmLCBhbW91bnQs IGZpbGVfb2Zmc2V0KTsKKworCQlWTERCRyhjdXJsdW4sICJmaWxlIHJlYWQgJXUgQCAlbGx1IC0+ ICV6ZFxuIiwgYW1vdW50LAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGZpbGVfb2Zmc2V0LAor CQkJCW5yZWFkKTsKKwkJaWYgKG5yZWFkIDw9IDApIHsKKwkJCWNvbnN0IGNoYXIgKmVyciA9IG5y ZWFkID8gc3RyZXJyb3IoLW5yZWFkKSA6ICJFT0YiOworCQkJTERCRyhjdXJsdW4sICJlcnJvciBp biBmaWxlIHJlYWQ6ICVzXG4iLCBlcnIpOworCQkJbnJlYWQgPSAwOworCQl9IGVsc2UgaWYgKG5y ZWFkIDwgYW1vdW50KSB7CisJCQlMREJHKGN1cmx1biwgInBhcnRpYWwgZmlsZSByZWFkOiAlZC8l dVxuIiwKKwkJCQkJKGludCkgbnJlYWQsIGFtb3VudCk7CisJCQlucmVhZCAtPSAobnJlYWQgJiA1 MTEpOwkvKiBSb3VuZCBkb3duIHRvIGEgYmxvY2sgKi8KKwkJfQorCQlmaWxlX29mZnNldCAgKz0g bnJlYWQ7CisJCWFtb3VudF9sZWZ0ICAtPSBucmVhZDsKKwkJY29tbW9uLT5yZXNpZHVlIC09IG5y ZWFkOworCQliaC0+aW5yZXEtPmxlbmd0aCA9IG5yZWFkOworCQliaC0+c3RhdGUgPSBCVUZfU1RB VEVfRlVMTDsKKworCQkvKiBJZiBhbiBlcnJvciBvY2N1cnJlZCwgcmVwb3J0IGl0IGFuZCBpdHMg cG9zaXRpb24gKi8KKwkJaWYgKG5yZWFkIDwgYW1vdW50KSB7CisJCQljdXJsdW4tPnNlbnNlX2Rh dGEgPSBTU19VTlJFQ09WRVJFRF9SRUFEX0VSUk9SOworCQkJY3VybHVuLT5pbmZvX3ZhbGlkID0g MTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGFtb3VudF9sZWZ0ID09IDApCisJCQlicmVhazsJ CS8qIE5vIG1vcmUgbGVmdCB0byByZWFkICovCisKKwkJLyogU2VuZCB0aGlzIGJ1ZmZlciBhbmQg Z28gcmVhZCBzb21lIG1vcmUgKi8KKwkJYmgtPmlucmVxLT56ZXJvID0gMDsKKwkJU1RBUlRfVFJB TlNGRVJfT1IoY29tbW9uLCBidWxrX2luLCBiaC0+aW5yZXEsCisJCQkgICAgICAgJmJoLT5pbnJl cV9idXN5LCAmYmgtPnN0YXRlKQorCQkJLyogRG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmCisJCQkg KiBjb21tb24tPmZzZyBpcyBOVUxMICovCisJCQlyZXR1cm4gLUVJTzsKKwkJY29tbW9uLT5uZXh0 X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJfQorCisJcmV0dXJuIC1FSU87CQkvKiBObyBk ZWZhdWx0IHJlcGx5ICovCit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQg ZG9fd3JpdGUoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikKK3sKKwlzdHJ1Y3QgZnNnX2x1bgkJ KmN1cmx1biA9ICZjb21tb24tPmx1bnNbY29tbW9uLT5sdW5dOworCXUzMgkJCWxiYTsKKwlzdHJ1 Y3QgZnNnX2J1ZmZoZAkqYmg7CisJaW50CQkJZ2V0X3NvbWVfbW9yZTsKKwl1MzIJCQlhbW91bnRf bGVmdF90b19yZXEsIGFtb3VudF9sZWZ0X3RvX3dyaXRlOworCWxvZmZfdAkJCXVzYl9vZmZzZXQs IGZpbGVfb2Zmc2V0OworCXVuc2lnbmVkIGludAkJYW1vdW50OworCXVuc2lnbmVkIGludAkJcGFy dGlhbF9wYWdlOworCXNzaXplX3QJCQlud3JpdHRlbjsKKwlpbnQJCQlyYzsKKworCWlmIChjdXJs dW4tPnJvKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1dSSVRFX1BST1RFQ1RFRDsKKwkJ cmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogR2V0IHRoZSBzdGFydGluZyBMb2dpY2FsIEJsb2Nr IEFkZHJlc3MgYW5kIGNoZWNrIHRoYXQgaXQncworCSAqIG5vdCB0b28gYmlnICovCisJaWYgKGNv bW1vbi0+Y21uZFswXSA9PSBTQ1NJX1dSSVRFNikKKwkJbGJhID0gZ2V0X3VuYWxpZ25lZF9iZTI0 KCZjb21tb24tPmNtbmRbMV0pOworCWVsc2UgeworCQlsYmEgPSBnZXRfdW5hbGlnbmVkX2JlMzIo JmNvbW1vbi0+Y21uZFsyXSk7CisKKwkJLyogV2UgYWxsb3cgRFBPIChEaXNhYmxlIFBhZ2UgT3V0 ID0gZG9uJ3Qgc2F2ZSBkYXRhIGluIHRoZQorCQkgKiBjYWNoZSkgYW5kIEZVQSAoRm9yY2UgVW5p dCBBY2Nlc3MgPSB3cml0ZSBkaXJlY3RseSB0byB0aGUKKwkJICogbWVkaXVtKS4gIFdlIGRvbid0 IGltcGxlbWVudCBEUE87IHdlIGltcGxlbWVudCBGVUEgYnkKKwkJICogcGVyZm9ybWluZyBzeW5j aHJvbm91cyBvdXRwdXQuICovCisJCWlmIChjb21tb24tPmNtbmRbMV0gJiB+MHgxOCkgeworCQkJ Y3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCQlyZXR1cm4g LUVJTlZBTDsKKwkJfQorCX0KKwlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3RvcnMpIHsKKwkJ Y3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5H RTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogQ2Fycnkgb3V0IHRoZSBmaWxlIHdyaXRl cyAqLworCWdldF9zb21lX21vcmUgPSAxOworCWZpbGVfb2Zmc2V0ID0gdXNiX29mZnNldCA9ICgo bG9mZl90KSBsYmEpIDw8IDk7CisJYW1vdW50X2xlZnRfdG9fcmVxID0gY29tbW9uLT5kYXRhX3Np emVfZnJvbV9jbW5kOworCWFtb3VudF9sZWZ0X3RvX3dyaXRlID0gY29tbW9uLT5kYXRhX3NpemVf ZnJvbV9jbW5kOworCisJd2hpbGUgKGFtb3VudF9sZWZ0X3RvX3dyaXRlID4gMCkgeworCisJCS8q IFF1ZXVlIGEgcmVxdWVzdCBmb3IgbW9yZSBkYXRhIGZyb20gdGhlIGhvc3QgKi8KKwkJYmggPSBj b21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRF X0VNUFRZICYmIGdldF9zb21lX21vcmUpIHsKKworCQkJLyogRmlndXJlIG91dCBob3cgbXVjaCB3 ZSB3YW50IHRvIGdldDoKKwkJCSAqIFRyeSB0byBnZXQgdGhlIHJlbWFpbmluZyBhbW91bnQuCisJ CQkgKiBCdXQgZG9uJ3QgZ2V0IG1vcmUgdGhhbiB0aGUgYnVmZmVyIHNpemUuCisJCQkgKiBBbmQg ZG9uJ3QgdHJ5IHRvIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgZmlsZS4KKwkJCSAqIElmIHdlJ3Jl IG5vdCBhdCBhIHBhZ2UgYm91bmRhcnksCisJCQkgKglkb24ndCBnbyBwYXN0IHRoZSBuZXh0IHBh Z2UuCisJCQkgKiBJZiB0aGlzIG1lYW5zIGdldHRpbmcgMCwgdGhlbiB3ZSB3ZXJlIGFza2VkCisJ CQkgKgl0byB3cml0ZSBwYXN0IHRoZSBlbmQgb2YgZmlsZS4KKwkJCSAqIEZpbmFsbHksIHJvdW5k IGRvd24gdG8gYSBibG9jayBib3VuZGFyeS4gKi8KKwkJCWFtb3VudCA9IG1pbihhbW91bnRfbGVm dF90b19yZXEsIEZTR19CVUZMRU4pOworCQkJcGFydGlhbF9wYWdlID0gdXNiX29mZnNldCAmIChQ QUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwkJCWlmIChwYXJ0aWFsX3BhZ2UgPiAwKQorCQkJCWFtb3Vu dCA9IG1pbihhbW91bnQsCisJKHVuc2lnbmVkIGludCkgUEFHRV9DQUNIRV9TSVpFIC0gcGFydGlh bF9wYWdlKTsKKworCQkJaWYgKGFtb3VudCA9PSAwKSB7CisJCQkJZ2V0X3NvbWVfbW9yZSA9IDA7 CisJCQkJY3VybHVuLT5zZW5zZV9kYXRhID0KKwkJCQkJU1NfTE9HSUNBTF9CTE9DS19BRERSRVNT X09VVF9PRl9SQU5HRTsKKwkJCQljdXJsdW4tPmluZm9fdmFsaWQgPSAxOworCQkJCWNvbnRpbnVl OworCQkJfQorCQkJYW1vdW50IC09IChhbW91bnQgJiA1MTEpOworCQkJaWYgKGFtb3VudCA9PSAw KSB7CisKKwkJCQkvKiBXaHkgd2VyZSB3ZSB3ZXJlIGFza2VkIHRvIHRyYW5zZmVyIGEKKwkJCQkg KiBwYXJ0aWFsIGJsb2NrPyAqLworCQkJCWdldF9zb21lX21vcmUgPSAwOworCQkJCWNvbnRpbnVl OworCQkJfQorCisJCQkvKiBHZXQgdGhlIG5leHQgYnVmZmVyICovCisJCQl1c2Jfb2Zmc2V0ICs9 IGFtb3VudDsKKwkJCWNvbW1vbi0+dXNiX2Ftb3VudF9sZWZ0IC09IGFtb3VudDsKKwkJCWFtb3Vu dF9sZWZ0X3RvX3JlcSAtPSBhbW91bnQ7CisJCQlpZiAoYW1vdW50X2xlZnRfdG9fcmVxID09IDAp CisJCQkJZ2V0X3NvbWVfbW9yZSA9IDA7CisKKwkJCS8qIGFtb3VudCBpcyBhbHdheXMgZGl2aXNp YmxlIGJ5IDUxMiwgaGVuY2UgYnkKKwkJCSAqIHRoZSBidWxrLW91dCBtYXhwYWNrZXQgc2l6ZSAq LworCQkJYmgtPm91dHJlcS0+bGVuZ3RoID0gYW1vdW50OworCQkJYmgtPmJ1bGtfb3V0X2ludGVu ZGVkX2xlbmd0aCA9IGFtb3VudDsKKwkJCWJoLT5vdXRyZXEtPnNob3J0X25vdF9vayA9IDE7CisJ CQlTVEFSVF9UUkFOU0ZFUl9PUihjb21tb24sIGJ1bGtfb3V0LCBiaC0+b3V0cmVxLAorCQkJCQkg ICZiaC0+b3V0cmVxX2J1c3ksICZiaC0+c3RhdGUpCisJCQkJLyogRG9uJ3Qga25vdyB3aGF0IHRv IGRvIGlmCisJCQkJICogY29tbW9uLT5mc2cgaXMgTlVMTCAqLworCQkJCXJldHVybiAtRUlPOwor CQkJY29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJCQljb250aW51ZTsK KwkJfQorCisJCS8qIFdyaXRlIHRoZSByZWNlaXZlZCBkYXRhIHRvIHRoZSBiYWNraW5nIGZpbGUg Ki8KKwkJYmggPSBjb21tb24tPm5leHRfYnVmZmhkX3RvX2RyYWluOworCQlpZiAoYmgtPnN0YXRl ID09IEJVRl9TVEFURV9FTVBUWSAmJiAhZ2V0X3NvbWVfbW9yZSkKKwkJCWJyZWFrOwkJCS8qIFdl IHN0b3BwZWQgZWFybHkgKi8KKwkJaWYgKGJoLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRlVMTCkgewor CQkJY29tbW9uLT5uZXh0X2J1ZmZoZF90b19kcmFpbiA9IGJoLT5uZXh0OworCQkJYmgtPnN0YXRl ID0gQlVGX1NUQVRFX0VNUFRZOworCisJCQkvKiBEaWQgc29tZXRoaW5nIGdvIHdyb25nIHdpdGgg dGhlIHRyYW5zZmVyPyAqLworCQkJaWYgKGJoLT5vdXRyZXEtPnN0YXR1cyAhPSAwKSB7CisJCQkJ Y3VybHVuLT5zZW5zZV9kYXRhID0gU1NfQ09NTVVOSUNBVElPTl9GQUlMVVJFOworCQkJCWN1cmx1 bi0+aW5mb192YWxpZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWFtb3VudCA9IGJoLT5v dXRyZXEtPmFjdHVhbDsKKworCQkJLyogUGVyZm9ybSB0aGUgd3JpdGUgKi8KKwkJCW53cml0dGVu ID0gcHdyaXRlKHVtc1tjb21tb24tPmx1bl0uZmQsIGJoLT5idWYsIGFtb3VudCwgZmlsZV9vZmZz ZXQpOworCisJCQlWTERCRyhjdXJsdW4sICJmaWxlIHdyaXRlICV1IEAgJWxsdSAtPiAlemRcbiIs IGFtb3VudCwKKwkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgZmlsZV9vZmZzZXQsCisJCQkJCW53 cml0dGVuKTsKKworCQkJaWYgKG53cml0dGVuIDwgMCkgeworCQkJCUxEQkcoY3VybHVuLCAiZXJy b3IgaW4gZmlsZSB3cml0ZTogJXBlXG4iLCBFUlJfUFRSKG53cml0dGVuKSk7CisJCQkJbndyaXR0 ZW4gPSAwOworCQkJfSBlbHNlIGlmIChud3JpdHRlbiA8IGFtb3VudCkgeworCQkJCUxEQkcoY3Vy bHVuLCAicGFydGlhbCBmaWxlIHdyaXRlOiAlZC8ldVxuIiwKKwkJCQkJCShpbnQpIG53cml0dGVu LCBhbW91bnQpOworCQkJCW53cml0dGVuIC09IChud3JpdHRlbiAmIDUxMSk7CisJCQkJLyogUm91 bmQgZG93biB0byBhIGJsb2NrICovCisJCQl9CisJCQlmaWxlX29mZnNldCArPSBud3JpdHRlbjsK KwkJCWFtb3VudF9sZWZ0X3RvX3dyaXRlIC09IG53cml0dGVuOworCQkJY29tbW9uLT5yZXNpZHVl IC09IG53cml0dGVuOworCisJCQkvKiBJZiBhbiBlcnJvciBvY2N1cnJlZCwgcmVwb3J0IGl0IGFu ZCBpdHMgcG9zaXRpb24gKi8KKwkJCWlmIChud3JpdHRlbiA8IGFtb3VudCkgeworCQkJCXByX3dh cm4oIm53cml0dGVuOiV6ZCBhbW91bnQ6JXVcbiIsIG53cml0dGVuLAorCQkJCSAgICAgICBhbW91 bnQpOworCQkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1dSSVRFX0VSUk9SOworCQkJCWN1cmx1 bi0+aW5mb192YWxpZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIERpZCB0aGUgaG9z dCBkZWNpZGUgdG8gc3RvcCBlYXJseT8gKi8KKwkJCWlmIChiaC0+b3V0cmVxLT5hY3R1YWwgIT0g YmgtPm91dHJlcS0+bGVuZ3RoKSB7CisJCQkJY29tbW9uLT5zaG9ydF9wYWNrZXRfcmVjZWl2ZWQg PSAxOworCQkJCWJyZWFrOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQkvKiBXYWl0IGZv ciBzb21ldGhpbmcgdG8gaGFwcGVuICovCisJCXJjID0gc2xlZXBfdGhyZWFkKGNvbW1vbik7CisJ CWlmIChyYykKKwkJCXJldHVybiByYzsKKwl9CisKKwlyZXR1cm4gLUVJTzsJCS8qIE5vIGRlZmF1 bHQgcmVwbHkgKi8KK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworc3RhdGljIGludCBkb19z eW5jaHJvbml6ZV9jYWNoZShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQoreworCXJldHVybiAw OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50IGRvX3ZlcmlmeShzdHJ1 Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQoreworCXN0cnVjdCBmc2dfbHVuCQkqY3VybHVuID0gJmNv bW1vbi0+bHVuc1tjb21tb24tPmx1bl07CisJdTMyCQkJbGJhOworCXUzMgkJCXZlcmlmaWNhdGlv bl9sZW5ndGg7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gY29tbW9uLT5uZXh0X2J1ZmZoZF90 b19maWxsOworCWxvZmZfdAkJCWZpbGVfb2Zmc2V0OworCXUzMgkJCWFtb3VudF9sZWZ0OworCXVu c2lnbmVkIGludAkJYW1vdW50OworCXNzaXplX3QJCQlucmVhZDsKKworCS8qIEdldCB0aGUgc3Rh cnRpbmcgTG9naWNhbCBCbG9jayBBZGRyZXNzIGFuZCBjaGVjayB0aGF0IGl0J3MKKwkgKiBub3Qg dG9vIGJpZyAqLworCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMigmY29tbW9uLT5jbW5kWzJdKTsK KwlpZiAobGJhID49IGN1cmx1bi0+bnVtX3NlY3RvcnMpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRh ID0gU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9PRl9SQU5HRTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisJLyogV2UgYWxsb3cgRFBPIChEaXNhYmxlIFBhZ2UgT3V0ID0gZG9uJ3Qgc2F2 ZSBkYXRhIGluIHRoZQorCSAqIGNhY2hlKSBidXQgd2UgZG9uJ3QgaW1wbGVtZW50IGl0LiAqLwor CWlmIChjb21tb24tPmNtbmRbMV0gJiB+MHgxMCkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBT U19JTlZBTElEX0ZJRUxEX0lOX0NEQjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdmVyaWZp Y2F0aW9uX2xlbmd0aCA9IGdldF91bmFsaWduZWRfYmUxNigmY29tbW9uLT5jbW5kWzddKTsKKwlp ZiAodW5saWtlbHkodmVyaWZpY2F0aW9uX2xlbmd0aCA9PSAwKSkKKwkJcmV0dXJuIC1FSU87CQkv KiBObyBkZWZhdWx0IHJlcGx5ICovCisKKwkvKiBQcmVwYXJlIHRvIGNhcnJ5IG91dCB0aGUgZmls ZSB2ZXJpZnkgKi8KKwlhbW91bnRfbGVmdCA9IHZlcmlmaWNhdGlvbl9sZW5ndGggPDwgOTsKKwlm aWxlX29mZnNldCA9ICgobG9mZl90KSBsYmEpIDw8IDk7CisKKwkvKiBXcml0ZSBvdXQgYWxsIHRo ZSBkaXJ0eSBidWZmZXJzIGJlZm9yZSBpbnZhbGlkYXRpbmcgdGhlbSAqLworCisJLyogSnVzdCB0 cnkgdG8gcmVhZCB0aGUgcmVxdWVzdGVkIGJsb2NrcyAqLworCXdoaWxlIChhbW91bnRfbGVmdCA+ IDApIHsKKworCQkvKiBGaWd1cmUgb3V0IGhvdyBtdWNoIHdlIG5lZWQgdG8gcmVhZDoKKwkJICog VHJ5IHRvIHJlYWQgdGhlIHJlbWFpbmluZyBhbW91bnQsIGJ1dCBub3QgbW9yZSB0aGFuCisJCSAq IHRoZSBidWZmZXIgc2l6ZS4KKwkJICogQW5kIGRvbid0IHRyeSB0byByZWFkIHBhc3QgdGhlIGVu ZCBvZiB0aGUgZmlsZS4KKwkJICogSWYgdGhpcyBtZWFucyByZWFkaW5nIDAgdGhlbiB3ZSB3ZXJl IGFza2VkIHRvIHJlYWQKKwkJICogcGFzdCB0aGUgZW5kIG9mIGZpbGUuICovCisJCWFtb3VudCA9 IG1pbihhbW91bnRfbGVmdCwgRlNHX0JVRkxFTik7CisJCWlmIChhbW91bnQgPT0gMCkgeworCQkJ Y3VybHVuLT5zZW5zZV9kYXRhID0KKwkJCQkJU1NfTE9HSUNBTF9CTE9DS19BRERSRVNTX09VVF9P Rl9SQU5HRTsKKwkJCWN1cmx1bi0+aW5mb192YWxpZCA9IDE7CisJCQlicmVhazsKKwkJfQorCisJ CS8qIFBlcmZvcm0gdGhlIHJlYWQgKi8KKwkJbnJlYWQgPSBwcmVhZCh1bXNbY29tbW9uLT5sdW5d LmZkLCBiaC0+YnVmLCBhbW91bnQsIGZpbGVfb2Zmc2V0KTsKKworCQlWTERCRyhjdXJsdW4sICJm aWxlIHJlYWQgJXUgQCAlbGx1IC0+ICV6ZFxuIiwgYW1vdW50LAorCQkJCSh1bnNpZ25lZCBsb25n IGxvbmcpIGZpbGVfb2Zmc2V0LAorCQkJCW5yZWFkKTsKKwkJaWYgKG5yZWFkIDw9IDApIHsKKwkJ CWNvbnN0IGNoYXIgKmVyciA9IG5yZWFkID8gc3RyZXJyb3IoLW5yZWFkKSA6ICJFT0YiOworCQkJ TERCRyhjdXJsdW4sICJlcnJvciBpbiBmaWxlIHJlYWQ6ICVzXG4iLCBlcnIpOworCQkJbnJlYWQg PSAwOworCQl9IGVsc2UgaWYgKG5yZWFkIDwgYW1vdW50KSB7CisJCQlMREJHKGN1cmx1biwgInBh cnRpYWwgZmlsZSB2ZXJpZnk6ICVkLyV1XG4iLAorCQkJCQkoaW50KSBucmVhZCwgYW1vdW50KTsK KwkJCW5yZWFkIC09IChucmVhZCAmIDUxMSk7CS8qIFJvdW5kIGRvd24gdG8gYSBzZWN0b3IgKi8K KwkJfQorCQlpZiAobnJlYWQgPT0gMCkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfVU5S RUNPVkVSRURfUkVBRF9FUlJPUjsKKwkJCWN1cmx1bi0+aW5mb192YWxpZCA9IDE7CisJCQlicmVh azsKKwkJfQorCQlmaWxlX29mZnNldCArPSBucmVhZDsKKwkJYW1vdW50X2xlZnQgLT0gbnJlYWQ7 CisJfQorCXJldHVybiAwOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaW50 IGRvX2lucXVpcnkoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0IGZzZ19idWZmaGQg KmJoKQoreworCXN0cnVjdCBmc2dfbHVuICpjdXJsdW4gPSAmY29tbW9uLT5sdW5zW2NvbW1vbi0+ bHVuXTsKKwlzdGF0aWMgY29uc3QgY2hhciB2ZW5kb3JfaWRbXSA9ICJMaW51eCAgICI7CisJdTgJ KmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCisJaWYgKCFjdXJsdW4pIHsJCS8qIFVuc3VwcG9ydGVk IExVTnMgYXJlIG9rYXkgKi8KKwkJY29tbW9uLT5iYWRfbHVuX29rYXkgPSAxOworCQltZW1zZXQo YnVmLCAwLCAzNik7CisJCWJ1ZlswXSA9IDB4N2Y7CQkvKiBVbnN1cHBvcnRlZCwgbm8gZGV2aWNl LXR5cGUgKi8KKwkJYnVmWzRdID0gMzE7CQkvKiBBZGRpdGlvbmFsIGxlbmd0aCAqLworCQlyZXR1 cm4gMzY7CisJfQorCisJbWVtc2V0KGJ1ZiwgMCwgOCk7CisJYnVmWzBdID0gVFlQRV9ESVNLOwor CWJ1ZlsxXSA9IGN1cmx1bi0+cmVtb3ZhYmxlID8gMHg4MCA6IDA7CisJYnVmWzJdID0gMjsJCS8q IEFOU0kgU0NTSSBsZXZlbCAyICovCisJYnVmWzNdID0gMjsJCS8qIFNDU0ktMiBJTlFVSVJZIGRh dGEgZm9ybWF0ICovCisJYnVmWzRdID0gMzE7CQkvKiBBZGRpdGlvbmFsIGxlbmd0aCAqLworCQkJ CS8qIE5vIHNwZWNpYWwgb3B0aW9ucyAqLworCXNwcmludGYoKGNoYXIgKikgKGJ1ZiArIDgpLCAi JS04cyUtMTZzJTA0eCIsIChjaGFyKikgdmVuZG9yX2lkICwKKwkJCXVtc1tjb21tb24tPmx1bl0u bmFtZSwgKHUxNikgMHhmZmZmKTsKKworCXJldHVybiAzNjsKK30KKworCitzdGF0aWMgaW50IGRv X3JlcXVlc3Rfc2Vuc2Uoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0IGZzZ19idWZm aGQgKmJoKQoreworCXN0cnVjdCBmc2dfbHVuCSpjdXJsdW4gPSAmY29tbW9uLT5sdW5zW2NvbW1v bi0+bHVuXTsKKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCXUzMgkJc2QsIHNkaW5mbyA9 IDA7CisJaW50CQl2YWxpZDsKKworCS8qCisJICogRnJvbSB0aGUgU0NTSS0yIHNwZWMuLCBzZWN0 aW9uIDcuOSAoVW5pdCBhdHRlbnRpb24gY29uZGl0aW9uKToKKwkgKgorCSAqIElmIGEgUkVRVUVT VCBTRU5TRSBjb21tYW5kIGlzIHJlY2VpdmVkIGZyb20gYW4gaW5pdGlhdG9yCisJICogd2l0aCBh IHBlbmRpbmcgdW5pdCBhdHRlbnRpb24gY29uZGl0aW9uIChiZWZvcmUgdGhlIHRhcmdldAorCSAq IGdlbmVyYXRlcyB0aGUgY29udGluZ2VudCBhbGxlZ2lhbmNlIGNvbmRpdGlvbiksIHRoZW4gdGhl CisJICogdGFyZ2V0IHNoYWxsIGVpdGhlcjoKKwkgKiAgIGEpIHJlcG9ydCBhbnkgcGVuZGluZyBz ZW5zZSBkYXRhIGFuZCBwcmVzZXJ2ZSB0aGUgdW5pdAorCSAqCWF0dGVudGlvbiBjb25kaXRpb24g b24gdGhlIGxvZ2ljYWwgdW5pdCwgb3IsCisJICogICBiKSByZXBvcnQgdGhlIHVuaXQgYXR0ZW50 aW9uIGNvbmRpdGlvbiwgbWF5IGRpc2NhcmQgYW55CisJICoJcGVuZGluZyBzZW5zZSBkYXRhLCBh bmQgY2xlYXIgdGhlIHVuaXQgYXR0ZW50aW9uCisJICoJY29uZGl0aW9uIG9uIHRoZSBsb2dpY2Fs IHVuaXQgZm9yIHRoYXQgaW5pdGlhdG9yLgorCSAqCisJICogRlNHIG5vcm1hbGx5IHVzZXMgb3B0 aW9uIGEpOyBlbmFibGUgdGhpcyBjb2RlIHRvIHVzZSBvcHRpb24gYikuCisJICovCisjaWYgMAor CWlmIChjdXJsdW4gJiYgY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhICE9IFNTX05PX1NFTlNF KSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IGN1cmx1bi0+dW5pdF9hdHRlbnRpb25fZGF0YTsK KwkJY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfTk9fU0VOU0U7CisJfQorI2VuZGlm CisKKwlpZiAoIWN1cmx1bikgewkJLyogVW5zdXBwb3J0ZWQgTFVOcyBhcmUgb2theSAqLworCQlj b21tb24tPmJhZF9sdW5fb2theSA9IDE7CisJCXNkID0gU1NfTE9HSUNBTF9VTklUX05PVF9TVVBQ T1JURUQ7CisJCXZhbGlkID0gMDsKKwl9IGVsc2UgeworCQlzZCA9IGN1cmx1bi0+c2Vuc2VfZGF0 YTsKKwkJdmFsaWQgPSBjdXJsdW4tPmluZm9fdmFsaWQgPDwgNzsKKwkJY3VybHVuLT5zZW5zZV9k YXRhID0gU1NfTk9fU0VOU0U7CisJCWN1cmx1bi0+aW5mb192YWxpZCA9IDA7CisJfQorCisJbWVt c2V0KGJ1ZiwgMCwgMTgpOworCWJ1ZlswXSA9IHZhbGlkIHwgMHg3MDsJCQkvKiBWYWxpZCwgY3Vy cmVudCBlcnJvciAqLworCWJ1ZlsyXSA9IFNLKHNkKTsKKwlwdXRfdW5hbGlnbmVkX2JlMzIoc2Rp bmZvLCAmYnVmWzNdKTsJLyogU2Vuc2UgaW5mb3JtYXRpb24gKi8KKwlidWZbN10gPSAxOCAtIDg7 CQkJLyogQWRkaXRpb25hbCBzZW5zZSBsZW5ndGggKi8KKwlidWZbMTJdID0gQVNDKHNkKTsKKwli dWZbMTNdID0gQVNDUShzZCk7CisJcmV0dXJuIDE4OworfQorCitzdGF0aWMgaW50IGRvX3JlYWRf Y2FwYWNpdHkoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0IGZzZ19idWZmaGQgKmJo KQoreworCXN0cnVjdCBmc2dfbHVuCSpjdXJsdW4gPSAmY29tbW9uLT5sdW5zW2NvbW1vbi0+bHVu XTsKKwl1MzIJCWxiYSA9IGdldF91bmFsaWduZWRfYmUzMigmY29tbW9uLT5jbW5kWzJdKTsKKwlp bnQJCXBtaSA9IGNvbW1vbi0+Y21uZFs4XTsKKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOwor CisJLyogQ2hlY2sgdGhlIFBNSSBhbmQgTEJBIGZpZWxkcyAqLworCWlmIChwbWkgPiAxIHx8IChw bWkgPT0gMCAmJiBsYmEgIT0gMCkpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJ RF9GSUVMRF9JTl9DREI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXB1dF91bmFsaWduZWRf YmUzMihjdXJsdW4tPm51bV9zZWN0b3JzIC0gMSwgJmJ1ZlswXSk7CisJCQkJCQkvKiBNYXggbG9n aWNhbCBibG9jayAqLworCXB1dF91bmFsaWduZWRfYmUzMig1MTIsICZidWZbNF0pOwkvKiBCbG9j ayBsZW5ndGggKi8KKwlyZXR1cm4gODsKK30KKworc3RhdGljIGludCBkb19yZWFkX2hlYWRlcihz dHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uLCBzdHJ1Y3QgZnNnX2J1ZmZoZCAqYmgpCit7CisJc3Ry dWN0IGZzZ19sdW4JKmN1cmx1biA9ICZjb21tb24tPmx1bnNbY29tbW9uLT5sdW5dOworCWludAkJ bXNmID0gY29tbW9uLT5jbW5kWzFdICYgMHgwMjsKKwl1MzIJCWxiYSA9IGdldF91bmFsaWduZWRf YmUzMigmY29tbW9uLT5jbW5kWzJdKTsKKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOworCisJ aWYgKGNvbW1vbi0+Y21uZFsxXSAmIH4weDAyKSB7CQkvKiBNYXNrIGF3YXkgTVNGICovCisJCWN1 cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX0lOVkFMSURfRklFTERfSU5fQ0RCOworCQlyZXR1cm4gLUVJ TlZBTDsKKwl9CisJaWYgKGxiYSA+PSBjdXJsdW4tPm51bV9zZWN0b3JzKSB7CisJCWN1cmx1bi0+ c2Vuc2VfZGF0YSA9IFNTX0xPR0lDQUxfQkxPQ0tfQUREUkVTU19PVVRfT0ZfUkFOR0U7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCW1lbXNldChidWYsIDAsIDgpOworCWJ1ZlswXSA9IDB4MDE7 CQkvKiAyMDQ4IGJ5dGVzIG9mIHVzZXIgZGF0YSwgcmVzdCBpcyBFQyAqLworCXN0b3JlX2Nkcm9t X2FkZHJlc3MoJmJ1Zls0XSwgbXNmLCBsYmEpOworCXJldHVybiA4OworfQorCisKK3N0YXRpYyBp bnQgZG9fcmVhZF90b2Moc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0IGZzZ19idWZm aGQgKmJoKQoreworCXN0cnVjdCBmc2dfbHVuCSpjdXJsdW4gPSAmY29tbW9uLT5sdW5zW2NvbW1v bi0+bHVuXTsKKwlpbnQJCW1zZiA9IGNvbW1vbi0+Y21uZFsxXSAmIDB4MDI7CisJaW50CQlzdGFy dF90cmFjayA9IGNvbW1vbi0+Y21uZFs2XTsKKwl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOwor CisJaWYgKChjb21tb24tPmNtbmRbMV0gJiB+MHgwMikgIT0gMCB8fAkvKiBNYXNrIGF3YXkgTVNG ICovCisJCQlzdGFydF90cmFjayA+IDEpIHsKKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5W QUxJRF9GSUVMRF9JTl9DREI7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbXNldChidWYs IDAsIDIwKTsKKwlidWZbMV0gPSAoMjAtMik7CQkvKiBUT0MgZGF0YSBsZW5ndGggKi8KKwlidWZb Ml0gPSAxOwkJCS8qIEZpcnN0IHRyYWNrIG51bWJlciAqLworCWJ1ZlszXSA9IDE7CQkJLyogTGFz dCB0cmFjayBudW1iZXIgKi8KKwlidWZbNV0gPSAweDE2OwkJCS8qIERhdGEgdHJhY2ssIGNvcHlp bmcgYWxsb3dlZCAqLworCWJ1Zls2XSA9IDB4MDE7CQkJLyogT25seSB0cmFjayBpcyBudW1iZXIg MSAqLworCXN0b3JlX2Nkcm9tX2FkZHJlc3MoJmJ1Zls4XSwgbXNmLCAwKTsKKworCWJ1ZlsxM10g PSAweDE2OwkJCS8qIExlYWQtb3V0IHRyYWNrIGlzIGRhdGEgKi8KKwlidWZbMTRdID0gMHhBQTsJ CQkvKiBMZWFkLW91dCB0cmFjayBudW1iZXIgKi8KKwlzdG9yZV9jZHJvbV9hZGRyZXNzKCZidWZb MTZdLCBtc2YsIGN1cmx1bi0+bnVtX3NlY3RvcnMpOworCisJcmV0dXJuIDIwOworfQorCitzdGF0 aWMgaW50IGRvX21vZGVfc2Vuc2Uoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwgc3RydWN0IGZz Z19idWZmaGQgKmJoKQoreworCXN0cnVjdCBmc2dfbHVuCSpjdXJsdW4gPSAmY29tbW9uLT5sdW5z W2NvbW1vbi0+bHVuXTsKKwlpbnQJCW1zY21uZCA9IGNvbW1vbi0+Y21uZFswXTsKKwl1OAkJKmJ1 ZiA9ICh1OCAqKSBiaC0+YnVmOworCXU4CQkqYnVmMCA9IGJ1ZjsKKwlpbnQJCXBjLCBwYWdlX2Nv ZGU7CisJaW50CQljaGFuZ2VhYmxlX3ZhbHVlcywgYWxsX3BhZ2VzOworCWludAkJdmFsaWRfcGFn ZSA9IDA7CisJaW50CQlsZW4sIGxpbWl0OworCisJaWYgKChjb21tb24tPmNtbmRbMV0gJiB+MHgw OCkgIT0gMCkgewkvKiBNYXNrIGF3YXkgREJEICovCisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNT X0lOVkFMSURfRklFTERfSU5fQ0RCOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcGMgPSBjb21t b24tPmNtbmRbMl0gPj4gNjsKKwlwYWdlX2NvZGUgPSBjb21tb24tPmNtbmRbMl0gJiAweDNmOwor CWlmIChwYyA9PSAzKSB7CisJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1NBVklOR19QQVJBTUVU RVJTX05PVF9TVVBQT1JURUQ7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljaGFuZ2VhYmxlX3Zh bHVlcyA9IChwYyA9PSAxKTsKKwlhbGxfcGFnZXMgPSAocGFnZV9jb2RlID09IDB4M2YpOworCisJ LyogV3JpdGUgdGhlIG1vZGUgcGFyYW1ldGVyIGhlYWRlci4gIEZpeGVkIHZhbHVlcyBhcmU6IGRl ZmF1bHQKKwkgKiBtZWRpdW0gdHlwZSwgbm8gY2FjaGUgY29udHJvbCAoRFBPRlVBKSwgYW5kIG5v IGJsb2NrIGRlc2NyaXB0b3JzLgorCSAqIFRoZSBvbmx5IHZhcmlhYmxlIHZhbHVlIGlzIHRoZSBX cml0ZVByb3RlY3QgYml0LiAgV2Ugd2lsbCBmaWxsIGluCisJICogdGhlIG1vZGUgZGF0YSBsZW5n dGggbGF0ZXIuICovCisJbWVtc2V0KGJ1ZiwgMCwgOCk7CisJaWYgKG1zY21uZCA9PSBTQ1NJX01P REVfU0VONikgeworCQlidWZbMl0gPSAoY3VybHVuLT5ybyA/IDB4ODAgOiAweDAwKTsJCS8qIFdQ LCBEUE9GVUEgKi8KKwkJYnVmICs9IDQ7CisJCWxpbWl0ID0gMjU1OworCX0gZWxzZSB7CQkJLyog U0NTSV9NT0RFX1NFTjEwICovCisJCWJ1ZlszXSA9IChjdXJsdW4tPnJvID8gMHg4MCA6IDB4MDAp OwkJLyogV1AsIERQT0ZVQSAqLworCQlidWYgKz0gODsKKwkJbGltaXQgPSA2NTUzNTsJCS8qIFNo b3VsZCByZWFsbHkgYmUgRlNHX0JVRkxFTiAqLworCX0KKworCS8qIE5vIGJsb2NrIGRlc2NyaXB0 b3JzICovCisKKwkvKiBUaGUgbW9kZSBwYWdlcywgaW4gbnVtZXJpY2FsIG9yZGVyLiAgVGhlIG9u bHkgcGFnZSB3ZSBzdXBwb3J0CisJICogaXMgdGhlIENhY2hpbmcgcGFnZS4gKi8KKwlpZiAocGFn ZV9jb2RlID09IDB4MDggfHwgYWxsX3BhZ2VzKSB7CisJCXZhbGlkX3BhZ2UgPSAxOworCQlidWZb MF0gPSAweDA4OwkJLyogUGFnZSBjb2RlICovCisJCWJ1ZlsxXSA9IDEwOwkJLyogUGFnZSBsZW5n dGggKi8KKwkJbWVtc2V0KGJ1ZisyLCAwLCAxMCk7CS8qIE5vbmUgb2YgdGhlIGZpZWxkcyBhcmUg Y2hhbmdlYWJsZSAqLworCisJCWlmICghY2hhbmdlYWJsZV92YWx1ZXMpIHsKKwkJCWJ1ZlsyXSA9 IDB4MDQ7CS8qIFdyaXRlIGNhY2hlIGVuYWJsZSwgKi8KKwkJCQkJLyogUmVhZCBjYWNoZSBub3Qg ZGlzYWJsZWQgKi8KKwkJCQkJLyogTm8gY2FjaGUgcmV0ZW50aW9uIHByaW9yaXRpZXMgKi8KKwkJ CXB1dF91bmFsaWduZWRfYmUxNigweGZmZmYsICZidWZbNF0pOworCQkJCQkvKiBEb24ndCBkaXNh YmxlIHByZWZldGNoICovCisJCQkJCS8qIE1pbmltdW0gcHJlZmV0Y2ggPSAwICovCisJCQlwdXRf dW5hbGlnbmVkX2JlMTYoMHhmZmZmLCAmYnVmWzhdKTsKKwkJCQkJLyogTWF4aW11bSBwcmVmZXRj aCAqLworCQkJcHV0X3VuYWxpZ25lZF9iZTE2KDB4ZmZmZiwgJmJ1ZlsxMF0pOworCQkJCQkvKiBN YXhpbXVtIHByZWZldGNoIGNlaWxpbmcgKi8KKwkJfQorCQlidWYgKz0gMTI7CisJfQorCisJLyog Q2hlY2sgdGhhdCBhIHZhbGlkIHBhZ2Ugd2FzIHJlcXVlc3RlZCBhbmQgdGhlIG1vZGUgZGF0YSBs ZW5ndGgKKwkgKiBpc24ndCB0b28gbG9uZy4gKi8KKwlsZW4gPSBidWYgLSBidWYwOworCWlmICgh dmFsaWRfcGFnZSB8fCBsZW4gPiBsaW1pdCkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19J TlZBTElEX0ZJRUxEX0lOX0NEQjsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogIFN0b3Jl IHRoZSBtb2RlIGRhdGEgbGVuZ3RoICovCisJaWYgKG1zY21uZCA9PSBTQ1NJX01PREVfU0VONikK KwkJYnVmMFswXSA9IGxlbiAtIDE7CisJZWxzZQorCQlwdXRfdW5hbGlnbmVkX2JlMTYobGVuIC0g MiwgYnVmMCk7CisJcmV0dXJuIGxlbjsKK30KKworCitzdGF0aWMgaW50IGRvX3N0YXJ0X3N0b3Ao c3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikKK3sKKwlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0g JmNvbW1vbi0+bHVuc1tjb21tb24tPmx1bl07CisKKwlpZiAoIWN1cmx1bikgeworCQlyZXR1cm4g LUVJTlZBTDsKKwl9IGVsc2UgaWYgKCFjdXJsdW4tPnJlbW92YWJsZSkgeworCQljdXJsdW4tPnNl bnNlX2RhdGEgPSBTU19JTlZBTElEX0NPTU1BTkQ7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX3ByZXZlbnRfYWxsb3coc3RydWN0IGZzZ19j b21tb24gKmNvbW1vbikKK3sKKwlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0gJmNvbW1vbi0+bHVu c1tjb21tb24tPmx1bl07CisJaW50CQlwcmV2ZW50OworCisJaWYgKCFjdXJsdW4tPnJlbW92YWJs ZSkgeworCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0NPTU1BTkQ7CisJCXJldHVy biAtRUlOVkFMOworCX0KKworCXByZXZlbnQgPSBjb21tb24tPmNtbmRbNF0gJiAweDAxOworCWlm ICgoY29tbW9uLT5jbW5kWzRdICYgfjB4MDEpICE9IDApIHsJLyogTWFzayBhd2F5IFByZXZlbnQg Ki8KKwkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCXJl dHVybiAtRUlOVkFMOworCX0KKworCWlmIChjdXJsdW4tPnByZXZlbnRfbWVkaXVtX3JlbW92YWwg JiYgIXByZXZlbnQpCisJCWZzZ19sdW5fZnN5bmNfc3ViKGN1cmx1bik7CisJY3VybHVuLT5wcmV2 ZW50X21lZGl1bV9yZW1vdmFsID0gcHJldmVudDsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMg aW50IGRvX3JlYWRfZm9ybWF0X2NhcGFjaXRpZXMoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwK KwkJCXN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgZnNnX2x1bgkqY3VybHVuID0g JmNvbW1vbi0+bHVuc1tjb21tb24tPmx1bl07CisJdTgJCSpidWYgPSAodTggKikgYmgtPmJ1ZjsK KworCWJ1ZlswXSA9IGJ1ZlsxXSA9IGJ1ZlsyXSA9IDA7CisJYnVmWzNdID0gODsJLyogT25seSB0 aGUgQ3VycmVudC9NYXhpbXVtIENhcGFjaXR5IERlc2NyaXB0b3IgKi8KKwlidWYgKz0gNDsKKwor CXB1dF91bmFsaWduZWRfYmUzMihjdXJsdW4tPm51bV9zZWN0b3JzLCAmYnVmWzBdKTsKKwkJCQkJ CS8qIE51bWJlciBvZiBibG9ja3MgKi8KKwlwdXRfdW5hbGlnbmVkX2JlMzIoNTEyLCAmYnVmWzRd KTsJLyogQmxvY2sgbGVuZ3RoICovCisJYnVmWzRdID0gMHgwMjsJCQkJLyogQ3VycmVudCBjYXBh Y2l0eSAqLworCXJldHVybiAxMjsKK30KKworCitzdGF0aWMgaW50IGRvX21vZGVfc2VsZWN0KHN0 cnVjdCBmc2dfY29tbW9uICpjb21tb24sIHN0cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1 Y3QgZnNnX2x1bgkqY3VybHVuID0gJmNvbW1vbi0+bHVuc1tjb21tb24tPmx1bl07CisKKwkvKiBX ZSBkb24ndCBzdXBwb3J0IE1PREUgU0VMRUNUICovCisJaWYgKGN1cmx1bikKKwkJY3VybHVuLT5z ZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9DT01NQU5EOworCXJldHVybiAtRUlOVkFMOworfQorCisK Ky8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgaGFsdF9idWxrX2luX2VuZHBvaW50 KHN0cnVjdCBmc2dfZGV2ICpmc2cpCit7CisJaW50CXJjOworCisJcmMgPSBmc2dfc2V0X2hhbHQo ZnNnLCBmc2ctPmJ1bGtfaW4pOworCWlmIChyYyA9PSAtRUFHQUlOKQorCQlWREJHKGZzZywgImRl bGF5ZWQgYnVsay1pbiBlbmRwb2ludCBoYWx0XG4iKTsKKwl3aGlsZSAocmMgIT0gMCkgeworCQlp ZiAocmMgIT0gLUVBR0FJTikgeworCQkJV0FSTklORyhmc2csICJ1c2JfZXBfc2V0X2hhbHQgLT4g JWRcbiIsIHJjKTsKKwkJCXJjID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJcmMgPSB1c2JfZXBf c2V0X2hhbHQoZnNnLT5idWxrX2luKTsKKwl9CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50 IHdlZGdlX2J1bGtfaW5fZW5kcG9pbnQoc3RydWN0IGZzZ19kZXYgKmZzZykKK3sKKwlpbnQJcmM7 CisKKwlEQkcoZnNnLCAiYnVsay1pbiBzZXQgd2VkZ2VcbiIpOworCXJjID0gMDsgLyogdXNiX2Vw X3NldF93ZWRnZShmc2ctPmJ1bGtfaW4pOyAqLworCWlmIChyYyA9PSAtRUFHQUlOKQorCQlWREJH KGZzZywgImRlbGF5ZWQgYnVsay1pbiBlbmRwb2ludCB3ZWRnZVxuIik7CisJd2hpbGUgKHJjICE9 IDApIHsKKwkJaWYgKHJjICE9IC1FQUdBSU4pIHsKKwkJCVdBUk5JTkcoZnNnLCAidXNiX2VwX3Nl dF93ZWRnZSAtPiAlZFxuIiwgcmMpOworCQkJcmMgPSAwOworCQkJYnJlYWs7CisJCX0KKwl9CisJ cmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHBhZF93aXRoX3plcm9zKHN0cnVjdCBmc2dfZGV2 ICpmc2cpCit7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoID0gZnNnLT5jb21tb24tPm5leHRfYnVm ZmhkX3RvX2ZpbGw7CisJdTMyCQkJbmtlZXAgPSBiaC0+aW5yZXEtPmxlbmd0aDsKKwl1MzIJCQlu c2VuZDsKKwlpbnQJCQlyYzsKKworCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9FTVBUWTsJCS8qIEZv ciB0aGUgZmlyc3QgaXRlcmF0aW9uICovCisJZnNnLT5jb21tb24tPnVzYl9hbW91bnRfbGVmdCA9 IG5rZWVwICsgZnNnLT5jb21tb24tPnJlc2lkdWU7CisJd2hpbGUgKGZzZy0+Y29tbW9uLT51c2Jf YW1vdW50X2xlZnQgPiAwKSB7CisKKwkJLyogV2FpdCBmb3IgdGhlIG5leHQgYnVmZmVyIHRvIGJl IGZyZWUgKi8KKwkJd2hpbGUgKGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRU1QVFkpIHsKKwkJCXJj ID0gc2xlZXBfdGhyZWFkKGZzZy0+Y29tbW9uKTsKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7 CisJCX0KKworCQluc2VuZCA9IG1pbihmc2ctPmNvbW1vbi0+dXNiX2Ftb3VudF9sZWZ0LCBGU0df QlVGTEVOKTsKKwkJbWVtc2V0KGJoLT5idWYgKyBua2VlcCwgMCwgbnNlbmQgLSBua2VlcCk7CisJ CWJoLT5pbnJlcS0+bGVuZ3RoID0gbnNlbmQ7CisJCWJoLT5pbnJlcS0+emVybyA9IDA7CisJCXN0 YXJ0X3RyYW5zZmVyKGZzZywgZnNnLT5idWxrX2luLCBiaC0+aW5yZXEsCisJCQkJJmJoLT5pbnJl cV9idXN5LCAmYmgtPnN0YXRlKTsKKwkJYmggPSBmc2ctPmNvbW1vbi0+bmV4dF9idWZmaGRfdG9f ZmlsbCA9IGJoLT5uZXh0OworCQlmc2ctPmNvbW1vbi0+dXNiX2Ftb3VudF9sZWZ0IC09IG5zZW5k OworCQlua2VlcCA9IDA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRocm93X2F3 YXlfZGF0YShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQoreworCXN0cnVjdCBmc2dfYnVmZmhk CSpiaDsKKwl1MzIJCQlhbW91bnQ7CisJaW50CQkJcmM7CisKKwlmb3IgKGJoID0gY29tbW9uLT5u ZXh0X2J1ZmZoZF90b19kcmFpbjsKKwkgICAgIGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRU1QVFkg fHwgY29tbW9uLT51c2JfYW1vdW50X2xlZnQgPiAwOworCSAgICAgYmggPSBjb21tb24tPm5leHRf YnVmZmhkX3RvX2RyYWluKSB7CisKKwkJLyogVGhyb3cgYXdheSB0aGUgZGF0YSBpbiBhIGZpbGxl ZCBidWZmZXIgKi8KKwkJaWYgKGJoLT5zdGF0ZSA9PSBCVUZfU1RBVEVfRlVMTCkgeworCQkJYmgt PnN0YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCQkJY29tbW9uLT5uZXh0X2J1ZmZoZF90b19kcmFp biA9IGJoLT5uZXh0OworCisJCQkvKiBBIHNob3J0IHBhY2tldCBvciBhbiBlcnJvciBlbmRzIGV2 ZXJ5dGhpbmcgKi8KKwkJCWlmIChiaC0+b3V0cmVxLT5hY3R1YWwgIT0gYmgtPm91dHJlcS0+bGVu Z3RoIHx8CisJCQkJCWJoLT5vdXRyZXEtPnN0YXR1cyAhPSAwKSB7CisJCQkJcmFpc2VfZXhjZXB0 aW9uKGNvbW1vbiwKKwkJCQkJCUZTR19TVEFURV9BQk9SVF9CVUxLX09VVCk7CisJCQkJcmV0dXJu IC1FUElQRTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogVHJ5IHRvIHN1Ym1pdCBh bm90aGVyIHJlcXVlc3QgaWYgd2UgbmVlZCBvbmUgKi8KKwkJYmggPSBjb21tb24tPm5leHRfYnVm ZmhkX3RvX2ZpbGw7CisJCWlmIChiaC0+c3RhdGUgPT0gQlVGX1NUQVRFX0VNUFRZCisJCSAmJiBj b21tb24tPnVzYl9hbW91bnRfbGVmdCA+IDApIHsKKwkJCWFtb3VudCA9IG1pbihjb21tb24tPnVz Yl9hbW91bnRfbGVmdCwgRlNHX0JVRkxFTik7CisKKwkJCS8qIGFtb3VudCBpcyBhbHdheXMgZGl2 aXNpYmxlIGJ5IDUxMiwgaGVuY2UgYnkKKwkJCSAqIHRoZSBidWxrLW91dCBtYXhwYWNrZXQgc2l6 ZSAqLworCQkJYmgtPm91dHJlcS0+bGVuZ3RoID0gYW1vdW50OworCQkJYmgtPmJ1bGtfb3V0X2lu dGVuZGVkX2xlbmd0aCA9IGFtb3VudDsKKwkJCWJoLT5vdXRyZXEtPnNob3J0X25vdF9vayA9IDE7 CisJCQlTVEFSVF9UUkFOU0ZFUl9PUihjb21tb24sIGJ1bGtfb3V0LCBiaC0+b3V0cmVxLAorCQkJ CQkgICZiaC0+b3V0cmVxX2J1c3ksICZiaC0+c3RhdGUpCisJCQkJLyogRG9uJ3Qga25vdyB3aGF0 IHRvIGRvIGlmCisJCQkJICogY29tbW9uLT5mc2cgaXMgTlVMTCAqLworCQkJCXJldHVybiAtRUlP OworCQkJY29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsID0gYmgtPm5leHQ7CisJCQljb21tb24t PnVzYl9hbW91bnRfbGVmdCAtPSBhbW91bnQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIE90 aGVyd2lzZSB3YWl0IGZvciBzb21ldGhpbmcgdG8gaGFwcGVuICovCisJCXJjID0gc2xlZXBfdGhy ZWFkKGNvbW1vbik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwl9CisJcmV0dXJuIDA7Cit9 CisKKworc3RhdGljIGludCBmaW5pc2hfcmVwbHkoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikK K3sKKwlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSBjb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGw7 CisJaW50CQkJcmMgPSAwOworCisJc3dpdGNoIChjb21tb24tPmRhdGFfZGlyKSB7CisJY2FzZSBE QVRBX0RJUl9OT05FOgorCQlicmVhazsJCQkvKiBOb3RoaW5nIHRvIHNlbmQgKi8KKworCS8qIElm IHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgaG9zdCB3YW50cyB0byByZWFkIG9yIHdyaXRlLAor CSAqIHRoaXMgbXVzdCBiZSBDQiBvciBDQkkgd2l0aCBhbiB1bmtub3duIGNvbW1hbmQuICBXZSBt dXN0bid0CisJICogdHJ5IHRvIHNlbmQgb3IgcmVjZWl2ZSBhbnkgZGF0YS4gIFNvIHN0YWxsIGJv dGggYnVsayBwaXBlcworCSAqIGlmIHdlIGNhbiBhbmQgd2FpdCBmb3IgYSByZXNldC4gKi8KKwlj YXNlIERBVEFfRElSX1VOS05PV046CisJCWlmICghY29tbW9uLT5jYW5fc3RhbGwpIHsKKwkJCS8q IE5vdGhpbmcgKi8KKwkJfSBlbHNlIGlmIChmc2dfaXNfc2V0KGNvbW1vbikpIHsKKwkJCWZzZ19z ZXRfaGFsdChjb21tb24tPmZzZywgY29tbW9uLT5mc2ctPmJ1bGtfb3V0KTsKKwkJCXJjID0gaGFs dF9idWxrX2luX2VuZHBvaW50KGNvbW1vbi0+ZnNnKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERvbid0 IGtub3cgd2hhdCB0byBkbyBpZiBjb21tb24tPmZzZyBpcyBOVUxMICovCisJCQlyYyA9IC1FSU87 CisJCX0KKwkJYnJlYWs7CisKKwkvKiBBbGwgYnV0IHRoZSBsYXN0IGJ1ZmZlciBvZiBkYXRhIG11 c3QgaGF2ZSBhbHJlYWR5IGJlZW4gc2VudCAqLworCWNhc2UgREFUQV9ESVJfVE9fSE9TVDoKKwkJ aWYgKGNvbW1vbi0+ZGF0YV9zaXplID09IDApIHsKKwkJCS8qIE5vdGhpbmcgdG8gc2VuZCAqLwor CisJCS8qIElmIHRoZXJlJ3Mgbm8gcmVzaWR1ZSwgc2ltcGx5IHNlbmQgdGhlIGxhc3QgYnVmZmVy ICovCisJCX0gZWxzZSBpZiAoY29tbW9uLT5yZXNpZHVlID09IDApIHsKKwkJCWJoLT5pbnJlcS0+ emVybyA9IDA7CisJCQlTVEFSVF9UUkFOU0ZFUl9PUihjb21tb24sIGJ1bGtfaW4sIGJoLT5pbnJl cSwKKwkJCQkJICAmYmgtPmlucmVxX2J1c3ksICZiaC0+c3RhdGUpCisJCQkJcmV0dXJuIC1FSU87 CisJCQljb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKworCQkvKiBGb3Ig QnVsay1vbmx5LCBpZiB3ZSdyZSBhbGxvd2VkIHRvIHN0YWxsIHRoZW4gc2VuZCB0aGUKKwkJICog c2hvcnQgcGFja2V0IGFuZCBoYWx0IHRoZSBidWxrLWluIGVuZHBvaW50LiAgSWYgd2UgY2FuJ3QK KwkJICogc3RhbGwsIHBhZCBvdXQgdGhlIHJlbWFpbmluZyBkYXRhIHdpdGggMCdzLiAqLworCQl9 IGVsc2UgaWYgKGNvbW1vbi0+Y2FuX3N0YWxsKSB7CisJCQliaC0+aW5yZXEtPnplcm8gPSAxOwor CQkJU1RBUlRfVFJBTlNGRVJfT1IoY29tbW9uLCBidWxrX2luLCBiaC0+aW5yZXEsCisJCQkJCSAg JmJoLT5pbnJlcV9idXN5LCAmYmgtPnN0YXRlKQorCQkJCS8qIERvbid0IGtub3cgd2hhdCB0byBk byBpZgorCQkJCSAqIGNvbW1vbi0+ZnNnIGlzIE5VTEwgKi8KKwkJCQlyYyA9IC1FSU87CisJCQlj b21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBiaC0+bmV4dDsKKwkJCWlmIChjb21tb24tPmZz ZykKKwkJCQlyYyA9IGhhbHRfYnVsa19pbl9lbmRwb2ludChjb21tb24tPmZzZyk7CisJCX0gZWxz ZSBpZiAoZnNnX2lzX3NldChjb21tb24pKSB7CisJCQlyYyA9IHBhZF93aXRoX3plcm9zKGNvbW1v bi0+ZnNnKTsKKwkJfSBlbHNlIHsKKwkJCS8qIERvbid0IGtub3cgd2hhdCB0byBkbyBpZiBjb21t b24tPmZzZyBpcyBOVUxMICovCisJCQlyYyA9IC1FSU87CisJCX0KKwkJYnJlYWs7CisKKwkvKiBX ZSBoYXZlIHByb2Nlc3NlZCBhbGwgd2Ugd2FudCBmcm9tIHRoZSBkYXRhIHRoZSBob3N0IGhhcyBz ZW50LgorCSAqIFRoZXJlIG1heSBzdGlsbCBiZSBvdXRzdGFuZGluZyBidWxrLW91dCByZXF1ZXN0 cy4gKi8KKwljYXNlIERBVEFfRElSX0ZST01fSE9TVDoKKwkJaWYgKGNvbW1vbi0+cmVzaWR1ZSA9 PSAwKSB7CisJCQkvKiBOb3RoaW5nIHRvIHJlY2VpdmUgKi8KKworCQkvKiBEaWQgdGhlIGhvc3Qg c3RvcCBzZW5kaW5nIHVuZXhwZWN0ZWRseSBlYXJseT8gKi8KKwkJfSBlbHNlIGlmIChjb21tb24t PnNob3J0X3BhY2tldF9yZWNlaXZlZCkgeworCQkJcmFpc2VfZXhjZXB0aW9uKGNvbW1vbiwgRlNH X1NUQVRFX0FCT1JUX0JVTEtfT1VUKTsKKwkJCXJjID0gLUVQSVBFOworCisJCS8qIFdlIGhhdmVu J3QgcHJvY2Vzc2VkIGFsbCB0aGUgaW5jb21pbmcgZGF0YS4gIEV2ZW4gdGhvdWdoCisJCSAqIHdl IG1heSBiZSBhbGxvd2VkIHRvIHN0YWxsLCBkb2luZyBzbyB3b3VsZCBjYXVzZSBhIHJhY2UuCisJ CSAqIFRoZSBjb250cm9sbGVyIG1heSBhbHJlYWR5IGhhdmUgQUNLJ2VkIGFsbCB0aGUgcmVtYWlu aW5nCisJCSAqIGJ1bGstb3V0IHBhY2tldHMsIGluIHdoaWNoIGNhc2UgdGhlIGhvc3Qgd291bGRu J3Qgc2VlIGEKKwkJICogU1RBTEwuICBOb3QgcmVhbGl6aW5nIHRoZSBlbmRwb2ludCB3YXMgaGFs dGVkLCBpdCB3b3VsZG4ndAorCQkgKiBjbGVhciB0aGUgaGFsdCAtLSBsZWFkaW5nIHRvIHByb2Js ZW1zIGxhdGVyIG9uLiAqLworI2lmIDAKKwkJfSBlbHNlIGlmIChjb21tb24tPmNhbl9zdGFsbCkg eworCQkJaWYgKGZzZ19pc19zZXQoY29tbW9uKSkKKwkJCQlmc2dfc2V0X2hhbHQoY29tbW9uLT5m c2csCisJCQkJCSAgICAgY29tbW9uLT5mc2ctPmJ1bGtfb3V0KTsKKwkJCXJhaXNlX2V4Y2VwdGlv bihjb21tb24sIEZTR19TVEFURV9BQk9SVF9CVUxLX09VVCk7CisJCQlyYyA9IC1FUElQRTsKKyNl bmRpZgorCisJCS8qIFdlIGNhbid0IHN0YWxsLiAgUmVhZCBpbiB0aGUgZXhjZXNzIGRhdGEgYW5k IHRocm93IGl0CisJCSAqIGFsbCBhd2F5LiAqLworCQl9IGVsc2UgeworCQkJcmMgPSB0aHJvd19h d2F5X2RhdGEoY29tbW9uKTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIHJjOworfQorCisK K3N0YXRpYyBpbnQgc2VuZF9zdGF0dXMoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikKK3sKKwlz dHJ1Y3QgZnNnX2x1bgkJKmN1cmx1biA9ICZjb21tb24tPmx1bnNbY29tbW9uLT5sdW5dOworCXN0 cnVjdCBmc2dfYnVmZmhkCSpiaDsKKwlzdHJ1Y3QgYnVsa19jc193cmFwCSpjc3c7CisJaW50CQkJ cmM7CisJdTgJCQlzdGF0dXMgPSBVU19CVUxLX1NUQVRfT0s7CisJdTMyCQkJc2QsIHNkaW5mbyA9 IDA7CisKKwkvKiBXYWl0IGZvciB0aGUgbmV4dCBidWZmZXIgdG8gYmVjb21lIGF2YWlsYWJsZSAq LworCWJoID0gY29tbW9uLT5uZXh0X2J1ZmZoZF90b19maWxsOworCXdoaWxlIChiaC0+c3RhdGUg IT0gQlVGX1NUQVRFX0VNUFRZKSB7CisJCXJjID0gc2xlZXBfdGhyZWFkKGNvbW1vbik7CisJCWlm IChyYykKKwkJCXJldHVybiByYzsKKwl9CisKKwlpZiAoY3VybHVuKQorCQlzZCA9IGN1cmx1bi0+ c2Vuc2VfZGF0YTsKKwllbHNlIGlmIChjb21tb24tPmJhZF9sdW5fb2theSkKKwkJc2QgPSBTU19O T19TRU5TRTsKKwllbHNlCisJCXNkID0gU1NfTE9HSUNBTF9VTklUX05PVF9TVVBQT1JURUQ7CisK KwlpZiAoY29tbW9uLT5waGFzZV9lcnJvcikgeworCQlEQkcoY29tbW9uLCAic2VuZGluZyBwaGFz ZS1lcnJvciBzdGF0dXNcbiIpOworCQlzdGF0dXMgPSBVU19CVUxLX1NUQVRfUEhBU0U7CisJCXNk ID0gU1NfSU5WQUxJRF9DT01NQU5EOworCX0gZWxzZSBpZiAoc2QgIT0gU1NfTk9fU0VOU0UpIHsK KwkJREJHKGNvbW1vbiwgInNlbmRpbmcgY29tbWFuZC1mYWlsdXJlIHN0YXR1c1xuIik7CisJCXN0 YXR1cyA9IFVTX0JVTEtfU1RBVF9GQUlMOworCQlWREJHKGNvbW1vbiwgIiAgc2Vuc2UgZGF0YTog U0sgeCUwMngsIEFTQyB4JTAyeCwgQVNDUSB4JTAyeDsiCisJCQkiICBpbmZvIHgleFxuIiwKKwkJ CVNLKHNkKSwgQVNDKHNkKSwgQVNDUShzZCksIHNkaW5mbyk7CisJfQorCisJLyogU3RvcmUgYW5k IHNlbmQgdGhlIEJ1bGstb25seSBDU1cgKi8KKwljc3cgPSAodm9pZCAqKWJoLT5idWY7CisKKwlj c3ctPlNpZ25hdHVyZSA9IGNwdV90b19sZTMyKFVTX0JVTEtfQ1NfU0lHTik7CisJY3N3LT5UYWcg PSBjb21tb24tPnRhZzsKKwljc3ctPlJlc2lkdWUgPSBjcHVfdG9fbGUzMihjb21tb24tPnJlc2lk dWUpOworCWNzdy0+U3RhdHVzID0gc3RhdHVzOworCisJYmgtPmlucmVxLT5sZW5ndGggPSBVU19C VUxLX0NTX1dSQVBfTEVOOworCWJoLT5pbnJlcS0+emVybyA9IDA7CisJU1RBUlRfVFJBTlNGRVJf T1IoY29tbW9uLCBidWxrX2luLCBiaC0+aW5yZXEsCisJCQkgICZiaC0+aW5yZXFfYnVzeSwgJmJo LT5zdGF0ZSkKKwkJLyogRG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmIGNvbW1vbi0+ZnNnIGlzIE5V TEwgKi8KKwkJcmV0dXJuIC1FSU87CisKKwljb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGwgPSBi aC0+bmV4dDsKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKiBD aGVjayB3aGV0aGVyIHRoZSBjb21tYW5kIGlzIHByb3Blcmx5IGZvcm1lZCBhbmQgd2hldGhlciBp dHMgZGF0YSBzaXplCisgKiBhbmQgZGlyZWN0aW9uIGFncmVlIHdpdGggdGhlIHZhbHVlcyB3ZSBh bHJlYWR5IGhhdmUuICovCitzdGF0aWMgaW50IGNoZWNrX2NvbW1hbmQoc3RydWN0IGZzZ19jb21t b24gKmNvbW1vbiwgaW50IGNtbmRfc2l6ZSwKKwkJZW51bSBkYXRhX2RpcmVjdGlvbiBkYXRhX2Rp ciwgdW5zaWduZWQgaW50IG1hc2ssCisJCWludCBuZWVkc19tZWRpdW0sIGNvbnN0IGNoYXIgKm5h bWUpCit7CisJaW50CQkJaTsKKwlpbnQJCQlsdW4gPSBjb21tb24tPmNtbmRbMV0gPj4gNTsKKwlz dGF0aWMgY29uc3QgY2hhcglkaXJsZXR0ZXJbNF0gPSB7J3UnLCAnbycsICdpJywgJ24nfTsKKwlj aGFyCQkJaGRsZW5bMjBdOworCXN0cnVjdCBmc2dfbHVuCQkqY3VybHVuOworCisJaGRsZW5bMF0g PSAwOworCWlmIChjb21tb24tPmRhdGFfZGlyICE9IERBVEFfRElSX1VOS05PV04pCisJCXNwcmlu dGYoaGRsZW4sICIsIEglYz0ldSIsIGRpcmxldHRlclsoaW50KSBjb21tb24tPmRhdGFfZGlyXSwK KwkJCQljb21tb24tPmRhdGFfc2l6ZSk7CisJVkRCRyhjb21tb24sICJTQ1NJIGNvbW1hbmQ6ICVz OyAgRGM9JWQsIEQlYz0ldTsgIEhjPSVkJXNcbiIsCisJICAgICBuYW1lLCBjbW5kX3NpemUsIGRp cmxldHRlclsoaW50KSBkYXRhX2Rpcl0sCisJICAgICBjb21tb24tPmRhdGFfc2l6ZV9mcm9tX2Nt bmQsIGNvbW1vbi0+Y21uZF9zaXplLCBoZGxlbik7CisKKwkvKiBXZSBjYW4ndCByZXBseSBhdCBh bGwgdW50aWwgd2Uga25vdyB0aGUgY29ycmVjdCBkYXRhIGRpcmVjdGlvbgorCSAqIGFuZCBzaXpl LiAqLworCWlmIChjb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPT0gMCkKKwkJZGF0YV9kaXIg PSBEQVRBX0RJUl9OT05FOworCWlmIChjb21tb24tPmRhdGFfc2l6ZSA8IGNvbW1vbi0+ZGF0YV9z aXplX2Zyb21fY21uZCkgeworCQkvKiBIb3N0IGRhdGEgc2l6ZSA8IERldmljZSBkYXRhIHNpemUg aXMgYSBwaGFzZSBlcnJvci4KKwkJICogQ2Fycnkgb3V0IHRoZSBjb21tYW5kLCBidXQgb25seSB0 cmFuc2ZlciBhcyBtdWNoIGFzCisJCSAqIHdlIGFyZSBhbGxvd2VkLiAqLworCQljb21tb24tPmRh dGFfc2l6ZV9mcm9tX2NtbmQgPSBjb21tb24tPmRhdGFfc2l6ZTsKKwkJY29tbW9uLT5waGFzZV9l cnJvciA9IDE7CisJfQorCWNvbW1vbi0+cmVzaWR1ZSA9IGNvbW1vbi0+ZGF0YV9zaXplOworCWNv bW1vbi0+dXNiX2Ftb3VudF9sZWZ0ID0gY29tbW9uLT5kYXRhX3NpemU7CisKKwkvKiBDb25mbGlj dGluZyBkYXRhIGRpcmVjdGlvbnMgaXMgYSBwaGFzZSBlcnJvciAqLworCWlmIChjb21tb24tPmRh dGFfZGlyICE9IGRhdGFfZGlyCisJICYmIGNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA+IDAp IHsKKwkJY29tbW9uLT5waGFzZV9lcnJvciA9IDE7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwor CS8qIFZlcmlmeSB0aGUgbGVuZ3RoIG9mIHRoZSBjb21tYW5kIGl0c2VsZiAqLworCWlmIChjbW5k X3NpemUgIT0gY29tbW9uLT5jbW5kX3NpemUpIHsKKworCQkvKiBTcGVjaWFsIGNhc2Ugd29ya2Fy b3VuZDogVGhlcmUgYXJlIHBsZW50eSBvZiBidWdneSBTQ1NJCisJCSAqIGltcGxlbWVudGF0aW9u cy4gTWFueSBoYXZlIGlzc3VlcyB3aXRoIGNidy0+TGVuZ3RoCisJCSAqIGZpZWxkIHBhc3Npbmcg YSB3cm9uZyBjb21tYW5kIHNpemUuIEZvciB0aG9zZSBjYXNlcyB3ZQorCQkgKiBhbHdheXMgdHJ5 IHRvIHdvcmsgYXJvdW5kIHRoZSBwcm9ibGVtIGJ5IHVzaW5nIHRoZSBsZW5ndGgKKwkJICogc2Vu dCBieSB0aGUgaG9zdCBzaWRlIHByb3ZpZGVkIGl0IGlzIGF0IGxlYXN0IGFzIGxhcmdlCisJCSAq IGFzIHRoZSBjb3JyZWN0IGNvbW1hbmQgbGVuZ3RoLgorCQkgKiBFeGFtcGxlcyBvZiBzdWNoIGNh c2VzIHdvdWxkIGJlIE1TLVdpbmRvd3MsIHdoaWNoIGlzc3VlcworCQkgKiBSRVFVRVNUIFNFTlNF IHdpdGggY2J3LT5MZW5ndGggPT0gMTIgd2hlcmUgaXQgc2hvdWxkCisJCSAqIGJlIDYsIGFuZCB4 Ym94MzYwIGlzc3VpbmcgSU5RVUlSWSwgVEVTVCBVTklUIFJFQURZIGFuZAorCQkgKiBSRVFVRVNU IFNFTlNFIHdpdGggY2J3LT5MZW5ndGggPT0gMTAgd2hlcmUgaXQgc2hvdWxkCisJCSAqIGJlIDYg YXMgd2VsbC4KKwkJICovCisJCWlmIChjbW5kX3NpemUgPD0gY29tbW9uLT5jbW5kX3NpemUpIHsK KwkJCURCRyhjb21tb24sICIlcyBpcyBidWdneSEgRXhwZWN0ZWQgbGVuZ3RoICVkICIKKwkJCSAg ICAiYnV0IHdlIGdvdCAlZFxuIiwgbmFtZSwKKwkJCSAgICBjbW5kX3NpemUsIGNvbW1vbi0+Y21u ZF9zaXplKTsKKwkJCWNtbmRfc2l6ZSA9IGNvbW1vbi0+Y21uZF9zaXplOworCQl9IGVsc2Ugewor CQkJY29tbW9uLT5waGFzZV9lcnJvciA9IDE7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0K KworCS8qIENoZWNrIHRoYXQgdGhlIExVTiB2YWx1ZXMgYXJlIGNvbnNpc3RlbnQgKi8KKwlpZiAo Y29tbW9uLT5sdW4gIT0gbHVuKQorCQlEQkcoY29tbW9uLCAidXNpbmcgTFVOICVkIGZyb20gQ0JX LCBub3QgTFVOICVkIGZyb20gQ0RCXG4iLAorCQkgICAgY29tbW9uLT5sdW4sIGx1bik7CisKKwkv KiBDaGVjayB0aGUgTFVOICovCisJaWYgKGNvbW1vbi0+bHVuIDwgY29tbW9uLT5ubHVucykgewor CQljdXJsdW4gPSAmY29tbW9uLT5sdW5zW2NvbW1vbi0+bHVuXTsKKwkJaWYgKGNvbW1vbi0+Y21u ZFswXSAhPSBTQ1NJX1JFUV9TRU5TRSkgeworCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfTk9f U0VOU0U7CisJCQljdXJsdW4tPmluZm9fdmFsaWQgPSAwOworCQl9CisJfSBlbHNlIHsKKwkJY3Vy bHVuID0gTlVMTDsKKwkJY29tbW9uLT5iYWRfbHVuX29rYXkgPSAwOworCisJCS8qIElOUVVJUlkg YW5kIFJFUVVFU1QgU0VOU0UgY29tbWFuZHMgYXJlIGV4cGxpY2l0bHkgYWxsb3dlZAorCQkgKiB0 byB1c2UgdW5zdXBwb3J0ZWQgTFVOczsgYWxsIG90aGVycyBtYXkgbm90LiAqLworCQlpZiAoY29t bW9uLT5jbW5kWzBdICE9IFNDU0lfSU5RVUlSWSAmJgorCQkgICAgY29tbW9uLT5jbW5kWzBdICE9 IFNDU0lfUkVRX1NFTlNFKSB7CisJCQlEQkcoY29tbW9uLCAidW5zdXBwb3J0ZWQgTFVOICVkXG4i LCBjb21tb24tPmx1bik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKyNpZiAwCisJLyog SWYgYSB1bml0IGF0dGVudGlvbiBjb25kaXRpb24gZXhpc3RzLCBvbmx5IElOUVVJUlkgYW5kCisJ ICogUkVRVUVTVCBTRU5TRSBjb21tYW5kcyBhcmUgYWxsb3dlZDsgYW55dGhpbmcgZWxzZSBtdXN0 IGZhaWwuICovCisJaWYgKGN1cmx1biAmJiBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGEgIT0g U1NfTk9fU0VOU0UgJiYKKwkJCWNvbW1vbi0+Y21uZFswXSAhPSBTQ1NJX0lOUVVJUlkgJiYKKwkJ CWNvbW1vbi0+Y21uZFswXSAhPSBTQ1NJX1JFUV9TRU5TRSkgeworCQljdXJsdW4tPnNlbnNlX2Rh dGEgPSBjdXJsdW4tPnVuaXRfYXR0ZW50aW9uX2RhdGE7CisJCWN1cmx1bi0+dW5pdF9hdHRlbnRp b25fZGF0YSA9IFNTX05PX1NFTlNFOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisjZW5kaWYKKwkv KiBDaGVjayB0aGF0IG9ubHkgY29tbWFuZCBieXRlcyBsaXN0ZWQgaW4gdGhlIG1hc2sgYXJlIG5v bi16ZXJvICovCisJY29tbW9uLT5jbW5kWzFdICY9IDB4MWY7CQkJLyogTWFzayBhd2F5IHRoZSBM VU4gKi8KKwlmb3IgKGkgPSAxOyBpIDwgY21uZF9zaXplOyArK2kpIHsKKwkJaWYgKGNvbW1vbi0+ Y21uZFtpXSAmJiAhKG1hc2sgJiAoMSA8PCBpKSkpIHsKKwkJCWlmIChjdXJsdW4pCisJCQkJY3Vy bHVuLT5zZW5zZV9kYXRhID0gU1NfSU5WQUxJRF9GSUVMRF9JTl9DREI7CisJCQlyZXR1cm4gLUVJ TlZBTDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX3Njc2lfY29t bWFuZChzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQoreworCXN0cnVjdCBmc2dfYnVmZmhkCSpi aDsKKwlpbnQJCQlyYzsKKwlpbnQJCQlyZXBseSA9IC1FSU5WQUw7CisJaW50CQkJaTsKKwlzdGF0 aWMgY2hhcgkJdW5rbm93blsxNl07CisJc3RydWN0IGZzZ19sdW4JCSpjdXJsdW4gPSAmY29tbW9u LT5sdW5zW2NvbW1vbi0+bHVuXTsKKworCWR1bXBfY2RiKGNvbW1vbik7CisKKwkvKiBXYWl0IGZv ciB0aGUgbmV4dCBidWZmZXIgdG8gYmVjb21lIGF2YWlsYWJsZSBmb3IgZGF0YSBvciBzdGF0dXMg Ki8KKwliaCA9IGNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZmlsbDsKKwljb21tb24tPm5leHRfYnVm ZmhkX3RvX2RyYWluID0gYmg7CisJd2hpbGUgKGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRU1QVFkp IHsKKwkJcmMgPSBzbGVlcF90aHJlYWQoY29tbW9uKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJj OworCX0KKwljb21tb24tPnBoYXNlX2Vycm9yID0gMDsKKwljb21tb24tPnNob3J0X3BhY2tldF9y ZWNlaXZlZCA9IDA7CisKKwlkb3duX3JlYWQoJmNvbW1vbi0+ZmlsZXNlbSk7CS8qIFdlJ3JlIHVz aW5nIHRoZSBiYWNraW5nIGZpbGUgKi8KKwlzd2l0Y2ggKGNvbW1vbi0+Y21uZFswXSkgeworCisJ Y2FzZSBTQ1NJX0lOUVVJUlk6CisJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGNvbW1v bi0+Y21uZFs0XTsKKwkJcmVwbHkgPSBjaGVja19jb21tYW5kKGNvbW1vbiwgNiwgREFUQV9ESVJf VE9fSE9TVCwKKwkJCQkgICAgICAoMTw8NCksIDAsCisJCQkJICAgICAgIklOUVVJUlkiKTsKKwkJ aWYgKHJlcGx5ID09IDApCisJCQlyZXBseSA9IGRvX2lucXVpcnkoY29tbW9uLCBiaCk7CisJCWJy ZWFrOworCisJY2FzZSBTQ1NJX01PREVfU0VMNjoKKwkJY29tbW9uLT5kYXRhX3NpemVfZnJvbV9j bW5kID0gY29tbW9uLT5jbW5kWzRdOworCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCA2 LCBEQVRBX0RJUl9GUk9NX0hPU1QsCisJCQkJICAgICAgKDE8PDEpIHwgKDE8PDQpLCAwLAorCQkJ CSAgICAgICJNT0RFIFNFTEVDVCg2KSIpOworCQlpZiAocmVwbHkgPT0gMCkKKwkJCXJlcGx5ID0g ZG9fbW9kZV9zZWxlY3QoY29tbW9uLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ1NJX01PREVf U0VMMTA6CisJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9CisJCQlnZXRfdW5hbGlnbmVk X2JlMTYoJmNvbW1vbi0+Y21uZFs3XSk7CisJCXJlcGx5ID0gY2hlY2tfY29tbWFuZChjb21tb24s IDEwLCBEQVRBX0RJUl9GUk9NX0hPU1QsCisJCQkJICAgICAgKDE8PDEpIHwgKDM8PDcpLCAwLAor CQkJCSAgICAgICJNT0RFIFNFTEVDVCgxMCkiKTsKKwkJaWYgKHJlcGx5ID09IDApCisJCQlyZXBs eSA9IGRvX21vZGVfc2VsZWN0KGNvbW1vbiwgYmgpOworCQlicmVhazsKKworCWNhc2UgU0NTSV9N T0RFX1NFTjY6CisJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IGNvbW1vbi0+Y21uZFs0 XTsKKwkJcmVwbHkgPSBjaGVja19jb21tYW5kKGNvbW1vbiwgNiwgREFUQV9ESVJfVE9fSE9TVCwK KwkJCQkgICAgICAoMTw8MSkgfCAoMTw8MikgfCAoMTw8NCksIDAsCisJCQkJICAgICAgIk1PREUg U0VOU0UoNikiKTsKKwkJaWYgKHJlcGx5ID09IDApCisJCQlyZXBseSA9IGRvX21vZGVfc2Vuc2Uo Y29tbW9uLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ1NJX01PREVfU0VOMTA6CisJCWNvbW1v bi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9CisJCQlnZXRfdW5hbGlnbmVkX2JlMTYoJmNvbW1vbi0+ Y21uZFs3XSk7CisJCXJlcGx5ID0gY2hlY2tfY29tbWFuZChjb21tb24sIDEwLCBEQVRBX0RJUl9U T19IT1NULAorCQkJCSAgICAgICgxPDwxKSB8ICgxPDwyKSB8ICgzPDw3KSwgMCwKKwkJCQkgICAg ICAiTU9ERSBTRU5TRSgxMCkiKTsKKwkJaWYgKHJlcGx5ID09IDApCisJCQlyZXBseSA9IGRvX21v ZGVfc2Vuc2UoY29tbW9uLCBiaCk7CisJCWJyZWFrOworCisJY2FzZSBTQ1NJX01FRF9SRU1PVkw6 CisJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJCXJlcGx5ID0gY2hlY2tfY29t bWFuZChjb21tb24sIDYsIERBVEFfRElSX05PTkUsCisJCQkJICAgICAgKDE8PDQpLCAwLAorCQkJ CSAgICAgICJQUkVWRU5ULUFMTE9XIE1FRElVTSBSRU1PVkFMIik7CisJCWlmIChyZXBseSA9PSAw KQorCQkJcmVwbHkgPSBkb19wcmV2ZW50X2FsbG93KGNvbW1vbik7CisJCWJyZWFrOworCisJY2Fz ZSBTQ1NJX1JFQUQ2OgorCQlpID0gY29tbW9uLT5jbW5kWzRdOworCQljb21tb24tPmRhdGFfc2l6 ZV9mcm9tX2NtbmQgPSAoaSA9PSAwID8gMjU2IDogaSkgPDwgOTsKKwkJcmVwbHkgPSBjaGVja19j b21tYW5kKGNvbW1vbiwgNiwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkgICAgICAoNzw8MSkgfCAo MTw8NCksIDEsCisJCQkJICAgICAgIlJFQUQoNikiKTsKKwkJaWYgKHJlcGx5ID09IDApCisJCQly ZXBseSA9IGRvX3JlYWQoY29tbW9uKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDU0lfUkVBRDEwOgor CQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPQorCQkJCWdldF91bmFsaWduZWRfYmUxNigm Y29tbW9uLT5jbW5kWzddKSA8PCA5OworCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCAx MCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkgICAgICAoMTw8MSkgfCAoMHhmPDwyKSB8ICgzPDw3 KSwgMSwKKwkJCQkgICAgICAiUkVBRCgxMCkiKTsKKwkJaWYgKHJlcGx5ID09IDApCisJCQlyZXBs eSA9IGRvX3JlYWQoY29tbW9uKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDU0lfUkVBRDEyOgorCQlj b21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPQorCQkJCWdldF91bmFsaWduZWRfYmUzMigmY29t bW9uLT5jbW5kWzZdKSA8PCA5OworCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCAxMiwg REFUQV9ESVJfVE9fSE9TVCwKKwkJCQkgICAgICAoMTw8MSkgfCAoMHhmPDwyKSB8ICgweGY8PDYp LCAxLAorCQkJCSAgICAgICJSRUFEKDEyKSIpOworCQlpZiAocmVwbHkgPT0gMCkKKwkJCXJlcGx5 ID0gZG9fcmVhZChjb21tb24pOworCQlicmVhazsKKworCWNhc2UgU0NTSV9SRF9DQVBBQzoKKwkJ Y29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kID0gODsKKwkJcmVwbHkgPSBjaGVja19jb21tYW5k KGNvbW1vbiwgMTAsIERBVEFfRElSX1RPX0hPU1QsCisJCQkJICAgICAgKDB4Zjw8MikgfCAoMTw8 OCksIDEsCisJCQkJICAgICAgIlJFQUQgQ0FQQUNJVFkiKTsKKwkJaWYgKHJlcGx5ID09IDApCisJ CQlyZXBseSA9IGRvX3JlYWRfY2FwYWNpdHkoY29tbW9uLCBiaCk7CisJCWJyZWFrOworCisJY2Fz ZSBTQ1NJX1JEX0hFQURFUjoKKwkJaWYgKCFjb21tb24tPmx1bnNbY29tbW9uLT5sdW5dLmNkcm9t KQorCQkJZ290byB1bmtub3duX2NtbmQ7CisJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9 CisJCQlnZXRfdW5hbGlnbmVkX2JlMTYoJmNvbW1vbi0+Y21uZFs3XSk7CisJCXJlcGx5ID0gY2hl Y2tfY29tbWFuZChjb21tb24sIDEwLCBEQVRBX0RJUl9UT19IT1NULAorCQkJCSAgICAgICgzPDw3 KSB8ICgweDFmPDwxKSwgMSwKKwkJCQkgICAgICAiUkVBRCBIRUFERVIiKTsKKwkJaWYgKHJlcGx5 ID09IDApCisJCQlyZXBseSA9IGRvX3JlYWRfaGVhZGVyKGNvbW1vbiwgYmgpOworCQlicmVhazsK KworCWNhc2UgU0NTSV9SRF9UT0M6CisJCWlmICghY29tbW9uLT5sdW5zW2NvbW1vbi0+bHVuXS5j ZHJvbSkKKwkJCWdvdG8gdW5rbm93bl9jbW5kOworCQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2Nt bmQgPQorCQkJZ2V0X3VuYWxpZ25lZF9iZTE2KCZjb21tb24tPmNtbmRbN10pOworCQlyZXBseSA9 IGNoZWNrX2NvbW1hbmQoY29tbW9uLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkgICAgICAo Nzw8NikgfCAoMTw8MSksIDEsCisJCQkJICAgICAgIlJFQUQgVE9DIik7CisJCWlmIChyZXBseSA9 PSAwKQorCQkJcmVwbHkgPSBkb19yZWFkX3RvYyhjb21tb24sIGJoKTsKKwkJYnJlYWs7CisKKwlj YXNlIFNDU0lfUkRfRk1UX0NBUEFDOgorCQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPQor CQkJZ2V0X3VuYWxpZ25lZF9iZTE2KCZjb21tb24tPmNtbmRbN10pOworCQlyZXBseSA9IGNoZWNr X2NvbW1hbmQoY29tbW9uLCAxMCwgREFUQV9ESVJfVE9fSE9TVCwKKwkJCQkgICAgICAoMzw8Nyks IDEsCisJCQkJICAgICAgIlJFQUQgRk9STUFUIENBUEFDSVRJRVMiKTsKKwkJaWYgKHJlcGx5ID09 IDApCisJCQlyZXBseSA9IGRvX3JlYWRfZm9ybWF0X2NhcGFjaXRpZXMoY29tbW9uLCBiaCk7CisJ CWJyZWFrOworCisJY2FzZSBTQ1NJX1JFUV9TRU5TRToKKwkJY29tbW9uLT5kYXRhX3NpemVfZnJv bV9jbW5kID0gY29tbW9uLT5jbW5kWzRdOworCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9u LCA2LCBEQVRBX0RJUl9UT19IT1NULAorCQkJCSAgICAgICgxPDw0KSwgMCwKKwkJCQkgICAgICAi UkVRVUVTVCBTRU5TRSIpOworCQlpZiAocmVwbHkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fcmVxdWVz dF9zZW5zZShjb21tb24sIGJoKTsKKwkJYnJlYWs7CisKKwljYXNlIFNDU0lfU1RBUlRfU1RQOgor CQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAwOworCQlyZXBseSA9IGNoZWNrX2NvbW1h bmQoY29tbW9uLCA2LCBEQVRBX0RJUl9OT05FLAorCQkJCSAgICAgICgxPDwxKSB8ICgxPDw0KSwg MCwKKwkJCQkgICAgICAiU1RBUlQtU1RPUCBVTklUIik7CisJCWlmIChyZXBseSA9PSAwKQorCQkJ cmVwbHkgPSBkb19zdGFydF9zdG9wKGNvbW1vbik7CisJCWJyZWFrOworCisJY2FzZSBTQ1NJX1NZ TkNfQ0FDSEU6CisJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJCXJlcGx5ID0g Y2hlY2tfY29tbWFuZChjb21tb24sIDEwLCBEQVRBX0RJUl9OT05FLAorCQkJCSAgICAgICgweGY8 PDIpIHwgKDM8PDcpLCAxLAorCQkJCSAgICAgICJTWU5DSFJPTklaRSBDQUNIRSIpOworCQlpZiAo cmVwbHkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fc3luY2hyb25pemVfY2FjaGUoY29tbW9uKTsKKwkJ YnJlYWs7CisKKwljYXNlIFNDU0lfVFNUX1VfUkRZOgorCQljb21tb24tPmRhdGFfc2l6ZV9mcm9t X2NtbmQgPSAwOworCQlyZXBseSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCA2LCBEQVRBX0RJUl9O T05FLAorCQkJCTAsIDEsCisJCQkJIlRFU1QgVU5JVCBSRUFEWSIpOworCQlicmVhazsKKworCS8q IEFsdGhvdWdoIG9wdGlvbmFsLCB0aGlzIGNvbW1hbmQgaXMgdXNlZCBieSBNUy1XaW5kb3dzLiAg V2UKKwkgKiBzdXBwb3J0IGEgbWluaW1hbCB2ZXJzaW9uOiBCeXRDaGsgbXVzdCBiZSAwLiAqLwor CWNhc2UgU0NTSV9WRVJJRlk6CisJCWNvbW1vbi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IDA7CisJ CXJlcGx5ID0gY2hlY2tfY29tbWFuZChjb21tb24sIDEwLCBEQVRBX0RJUl9OT05FLAorCQkJCSAg ICAgICgxPDwxKSB8ICgweGY8PDIpIHwgKDM8PDcpLCAxLAorCQkJCSAgICAgICJWRVJJRlkiKTsK KwkJaWYgKHJlcGx5ID09IDApCisJCQlyZXBseSA9IGRvX3ZlcmlmeShjb21tb24pOworCQlicmVh azsKKworCWNhc2UgU0NTSV9XUklURTY6CisJCWkgPSBjb21tb24tPmNtbmRbNF07CisJCWNvbW1v bi0+ZGF0YV9zaXplX2Zyb21fY21uZCA9IChpID09IDAgPyAyNTYgOiBpKSA8PCA5OworCQlyZXBs eSA9IGNoZWNrX2NvbW1hbmQoY29tbW9uLCA2LCBEQVRBX0RJUl9GUk9NX0hPU1QsCisJCQkJICAg ICAgKDc8PDEpIHwgKDE8PDQpLCAxLAorCQkJCSAgICAgICJXUklURSg2KSIpOworCQlpZiAocmVw bHkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fd3JpdGUoY29tbW9uKTsKKwkJYnJlYWs7CisKKwljYXNl IFNDU0lfV1JJVEUxMDoKKwkJY29tbW9uLT5kYXRhX3NpemVfZnJvbV9jbW5kID0KKwkJCQlnZXRf dW5hbGlnbmVkX2JlMTYoJmNvbW1vbi0+Y21uZFs3XSkgPDwgOTsKKwkJcmVwbHkgPSBjaGVja19j b21tYW5kKGNvbW1vbiwgMTAsIERBVEFfRElSX0ZST01fSE9TVCwKKwkJCQkgICAgICAoMTw8MSkg fCAoMHhmPDwyKSB8ICgzPDw3KSwgMSwKKwkJCQkgICAgICAiV1JJVEUoMTApIik7CisJCWlmIChy ZXBseSA9PSAwKQorCQkJcmVwbHkgPSBkb193cml0ZShjb21tb24pOworCQlicmVhazsKKworCWNh c2UgU0NTSV9XUklURTEyOgorCQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPQorCQkJCWdl dF91bmFsaWduZWRfYmUzMigmY29tbW9uLT5jbW5kWzZdKSA8PCA5OworCQlyZXBseSA9IGNoZWNr X2NvbW1hbmQoY29tbW9uLCAxMiwgREFUQV9ESVJfRlJPTV9IT1NULAorCQkJCSAgICAgICgxPDwx KSB8ICgweGY8PDIpIHwgKDB4Zjw8NiksIDEsCisJCQkJICAgICAgIldSSVRFKDEyKSIpOworCQlp ZiAocmVwbHkgPT0gMCkKKwkJCXJlcGx5ID0gZG9fd3JpdGUoY29tbW9uKTsKKwkJYnJlYWs7CisK KwkvKiBTb21lIG1hbmRhdG9yeSBjb21tYW5kcyB0aGF0IHdlIHJlY29nbml6ZSBidXQgZG9uJ3Qg aW1wbGVtZW50LgorCSAqIFRoZXkgZG9uJ3QgbWVhbiBtdWNoIGluIHRoaXMgc2V0dGluZy4gIEl0 J3MgbGVmdCBhcyBhbiBleGVyY2lzZQorCSAqIGZvciBhbnlvbmUgaW50ZXJlc3RlZCB0byBpbXBs ZW1lbnQgUkVTRVJWRSBhbmQgUkVMRUFTRSBpbiB0ZXJtcworCSAqIG9mIFBvc2l4IGxvY2tzLiAq LworCWNhc2UgU0NTSV9GT1JNQVQ6CisJY2FzZSBTQ1NJX1JFTEVBU0U6CisJY2FzZSBTQ1NJX1JF U0VSVkU6CisJY2FzZSBTQ1NJX1NFTkRfRElBRzoKKwkJLyogRmFsbCB0aHJvdWdoICovCisKKwlk ZWZhdWx0OgordW5rbm93bl9jbW5kOgorCQljb21tb24tPmRhdGFfc2l6ZV9mcm9tX2NtbmQgPSAw OworCQlzcHJpbnRmKHVua25vd24sICJVbmtub3duIHglMDJ4IiwgY29tbW9uLT5jbW5kWzBdKTsK KwkJcmVwbHkgPSBjaGVja19jb21tYW5kKGNvbW1vbiwgY29tbW9uLT5jbW5kX3NpemUsCisJCQkJ ICAgICAgREFUQV9ESVJfVU5LTk9XTiwgMHhmZiwgMCwgdW5rbm93bik7CisJCWlmIChyZXBseSA9 PSAwKSB7CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19JTlZBTElEX0NPTU1BTkQ7CisJCQly ZXBseSA9IC1FSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJfQorCXVwX3JlYWQoJmNvbW1vbi0+Zmls ZXNlbSk7CisKKwlpZiAocmVwbHkgPT0gLUVQSVBFKQorCQlyZXR1cm4gLUVQSVBFOworCisJLyog U2V0IHVwIHRoZSBzaW5nbGUgcmVwbHkgYnVmZmVyIGZvciBmaW5pc2hfcmVwbHkoKSAqLworCWlm IChyZXBseSA9PSAtRUlOVkFMKQorCQlyZXBseSA9IDA7CQkvKiBFcnJvciByZXBseSBsZW5ndGgg Ki8KKwlpZiAocmVwbHkgPj0gMCAmJiBjb21tb24tPmRhdGFfZGlyID09IERBVEFfRElSX1RPX0hP U1QpIHsKKwkJcmVwbHkgPSBtaW4oKHUzMikgcmVwbHksIGNvbW1vbi0+ZGF0YV9zaXplX2Zyb21f Y21uZCk7CisJCWJoLT5pbnJlcS0+bGVuZ3RoID0gcmVwbHk7CisJCWJoLT5zdGF0ZSA9IEJVRl9T VEFURV9GVUxMOworCQljb21tb24tPnJlc2lkdWUgLT0gcmVwbHk7CisJfQkJCQkvKiBPdGhlcndp c2UgaXQncyBhbHJlYWR5IHNldCAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCisKK3N0YXRpYyBpbnQgcmVjZWl2ZWRfY2J3KHN0cnVjdCBmc2dfZGV2ICpmc2csIHN0 cnVjdCBmc2dfYnVmZmhkICpiaCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcSA9IGJoLT5v dXRyZXE7CisJc3RydWN0IGJ1bGtfY2Jfd3JhcAkqY2J3ID0gcmVxLT5idWY7CisJc3RydWN0IGZz Z19jb21tb24JKmNvbW1vbiA9IGZzZy0+Y29tbW9uOworCisJLyogV2FzIHRoaXMgYSByZWFsIHBh Y2tldD8gIFNob3VsZCBpdCBiZSBpZ25vcmVkPyAqLworCWlmIChyZXEtPnN0YXR1cyB8fCB0ZXN0 X2JpdChJR05PUkVfQlVMS19PVVQsICZmc2ctPmF0b21pY19iaXRmbGFncykpCisJCXJldHVybiAt RUlOVkFMOworCisJLyogSXMgdGhlIENCVyB2YWxpZD8gKi8KKwlpZiAocmVxLT5hY3R1YWwgIT0g VVNfQlVMS19DQl9XUkFQX0xFTiB8fAorCQkJY2J3LT5TaWduYXR1cmUgIT0gY3B1X3RvX2xlMzIo CisJCQkJVVNfQlVMS19DQl9TSUdOKSkgeworCQlEQkcoZnNnLCAiaW52YWxpZCBDQlc6IGxlbiAl dSBzaWcgMHgleFxuIiwKKwkJCQlyZXEtPmFjdHVhbCwKKwkJCQlsZTMyX3RvX2NwdShjYnctPlNp Z25hdHVyZSkpOworCisJCS8qIFRoZSBCdWxrLW9ubHkgc3BlYyBzYXlzIHdlIE1VU1Qgc3RhbGwg dGhlIElOIGVuZHBvaW50CisJCSAqICg2LjYuMSksIHNvIGl0J3MgdW5hdm9pZGFibGUuICBJdCBh bHNvIHNheXMgd2UgbXVzdAorCQkgKiByZXRhaW4gdGhpcyBzdGF0ZSB1bnRpbCB0aGUgbmV4dCBy ZXNldCwgYnV0IHRoZXJlJ3MKKwkJICogbm8gd2F5IHRvIHRlbGwgdGhlIGNvbnRyb2xsZXIgZHJp dmVyIGl0IHNob3VsZCBpZ25vcmUKKwkJICogQ2xlYXItRmVhdHVyZShIQUxUKSByZXF1ZXN0cy4K KwkJICoKKwkJICogV2UgYXJlbid0IHJlcXVpcmVkIHRvIGhhbHQgdGhlIE9VVCBlbmRwb2ludDsg aW5zdGVhZAorCQkgKiB3ZSBjYW4gc2ltcGx5IGFjY2VwdCBhbmQgZGlzY2FyZCBhbnkgZGF0YSBy ZWNlaXZlZAorCQkgKiB1bnRpbCB0aGUgbmV4dCByZXNldC4gKi8KKwkJd2VkZ2VfYnVsa19pbl9l bmRwb2ludChmc2cpOworCQlzZXRfYml0KElHTk9SRV9CVUxLX09VVCwgJmZzZy0+YXRvbWljX2Jp dGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogSXMgdGhlIENCVyBtZWFuaW5n ZnVsPyAqLworCWlmIChjYnctPkx1biA+PSBGU0dfTUFYX0xVTlMgfHwgY2J3LT5GbGFncyAmIH5V U19CVUxLX0ZMQUdfSU4gfHwKKwkJCWNidy0+TGVuZ3RoIDw9IDAgfHwgY2J3LT5MZW5ndGggPiBN QVhfQ09NTUFORF9TSVpFKSB7CisJCURCRyhmc2csICJub24tbWVhbmluZ2Z1bCBDQlc6IGx1biA9 ICV1LCBmbGFncyA9IDB4JXgsICIKKwkJCQkiY21kbGVuICV1XG4iLAorCQkJCWNidy0+THVuLCBj YnctPkZsYWdzLCBjYnctPkxlbmd0aCk7CisKKwkJLyogV2UgY2FuIGRvIGFueXRoaW5nIHdlIHdh bnQgaGVyZSwgc28gbGV0J3Mgc3RhbGwgdGhlCisJCSAqIGJ1bGsgcGlwZXMgaWYgd2UgYXJlIGFs bG93ZWQgdG8uICovCisJCWlmIChjb21tb24tPmNhbl9zdGFsbCkgeworCQkJZnNnX3NldF9oYWx0 KGZzZywgZnNnLT5idWxrX291dCk7CisJCQloYWx0X2J1bGtfaW5fZW5kcG9pbnQoZnNnKTsKKwkJ fQorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBTYXZlIHRoZSBjb21tYW5kIGZvciBsYXRl ciAqLworCWNvbW1vbi0+Y21uZF9zaXplID0gY2J3LT5MZW5ndGg7CisJbWVtY3B5KGNvbW1vbi0+ Y21uZCwgY2J3LT5DREIsIGNvbW1vbi0+Y21uZF9zaXplKTsKKwlpZiAoY2J3LT5GbGFncyAmIFVT X0JVTEtfRkxBR19JTikKKwkJY29tbW9uLT5kYXRhX2RpciA9IERBVEFfRElSX1RPX0hPU1Q7CisJ ZWxzZQorCQljb21tb24tPmRhdGFfZGlyID0gREFUQV9ESVJfRlJPTV9IT1NUOworCWNvbW1vbi0+ ZGF0YV9zaXplID0gbGUzMl90b19jcHUoY2J3LT5EYXRhVHJhbnNmZXJMZW5ndGgpOworCWlmIChj b21tb24tPmRhdGFfc2l6ZSA9PSAwKQorCQljb21tb24tPmRhdGFfZGlyID0gREFUQV9ESVJfTk9O RTsKKwljb21tb24tPmx1biA9IGNidy0+THVuOworCWNvbW1vbi0+dGFnID0gY2J3LT5UYWc7CisJ cmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBnZXRfbmV4dF9jb21tYW5kKHN0cnVjdCBmc2df Y29tbW9uICpjb21tb24pCit7CisJc3RydWN0IGZzZ19idWZmaGQJKmJoOworCWludAkJCXJjID0g MDsKKworCS8qIFdhaXQgZm9yIHRoZSBuZXh0IGJ1ZmZlciB0byBiZWNvbWUgYXZhaWxhYmxlICov CisJYmggPSBjb21tb24tPm5leHRfYnVmZmhkX3RvX2ZpbGw7CisJd2hpbGUgKGJoLT5zdGF0ZSAh PSBCVUZfU1RBVEVfRU1QVFkpIHsKKwkJcmMgPSBzbGVlcF90aHJlYWQoY29tbW9uKTsKKwkJaWYg KHJjKQorCQkJcmV0dXJuIHJjOworCX0KKworCS8qIFF1ZXVlIGEgcmVxdWVzdCB0byByZWFkIGEg QnVsay1vbmx5IENCVyAqLworCXNldF9idWxrX291dF9yZXFfbGVuZ3RoKGNvbW1vbiwgYmgsIFVT X0JVTEtfQ0JfV1JBUF9MRU4pOworCWJoLT5vdXRyZXEtPnNob3J0X25vdF9vayA9IDE7CisJU1RB UlRfVFJBTlNGRVJfT1IoY29tbW9uLCBidWxrX291dCwgYmgtPm91dHJlcSwKKwkJCSAgJmJoLT5v dXRyZXFfYnVzeSwgJmJoLT5zdGF0ZSkKKwkJLyogRG9uJ3Qga25vdyB3aGF0IHRvIGRvIGlmIGNv bW1vbi0+ZnNnIGlzIE5VTEwgKi8KKwkJcmV0dXJuIC1FSU87CisKKwkvKiBXZSB3aWxsIGRyYWlu IHRoZSBidWZmZXIgaW4gc29mdHdhcmUsIHdoaWNoIG1lYW5zIHdlCisJICogY2FuIHJldXNlIGl0 IGZvciB0aGUgbmV4dCBmaWxsaW5nLiAgTm8gbmVlZCB0byBhZHZhbmNlCisJICogbmV4dF9idWZm aGRfdG9fZmlsbC4gKi8KKworCS8qIFdhaXQgZm9yIHRoZSBDQlcgdG8gYXJyaXZlICovCisJd2hp bGUgKGJoLT5zdGF0ZSAhPSBCVUZfU1RBVEVfRlVMTCkgeworCQlyYyA9IHNsZWVwX3RocmVhZChj b21tb24pOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJfQorCisJcmMgPSBmc2dfaXNfc2V0 KGNvbW1vbikgPyByZWNlaXZlZF9jYncoY29tbW9uLT5mc2csIGJoKSA6IC1FSU87CisJYmgtPnN0 YXRlID0gQlVGX1NUQVRFX0VNUFRZOworCisJcmV0dXJuIHJjOworfQorCisKKy8qLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCisKK3N0YXRpYyBpbnQgZW5hYmxlX2VuZHBvaW50KHN0cnVjdCBmc2dfY29tbW9u ICpjb21tb24sIHN0cnVjdCB1c2JfZXAgKmVwKQoreworCWludAlyYzsKKworCWVwLT5kcml2ZXJf ZGF0YSA9IGNvbW1vbjsKKwlyYyA9IHVzYl9lcF9lbmFibGUoZXApOworCWlmIChyYykKKwkJRVJS T1IoY29tbW9uLCAiY2FuJ3QgZW5hYmxlICVzLCByZXN1bHQgJWRcbiIsIGVwLT5uYW1lLCByYyk7 CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGFsbG9jX3JlcXVlc3Qoc3RydWN0IGZzZ19j b21tb24gKmNvbW1vbiwgc3RydWN0IHVzYl9lcCAqZXAsCisJCXN0cnVjdCB1c2JfcmVxdWVzdCAq KnByZXEpCit7CisJKnByZXEgPSB1c2JfZXBfYWxsb2NfcmVxdWVzdChlcCk7CisJaWYgKCpwcmVx KQorCQlyZXR1cm4gMDsKKwlFUlJPUihjb21tb24sICJjYW4ndCBhbGxvY2F0ZSByZXF1ZXN0IGZv ciAlc1xuIiwgZXAtPm5hbWUpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKiBSZXNldCBpbnRl cmZhY2Ugc2V0dGluZyBhbmQgcmUtaW5pdCBlbmRwb2ludCBzdGF0ZSAodG9nZ2xlIGV0YykuICov CitzdGF0aWMgaW50IGRvX3NldF9pbnRlcmZhY2Uoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbiwg c3RydWN0IGZzZ19kZXYgKm5ld19mc2cpCit7CisJc3RydWN0IGZzZ19kZXYgKmZzZzsKKwlpbnQg aSwgcmMgPSAwOworCisJaWYgKGNvbW1vbi0+cnVubmluZykKKwkJREJHKGNvbW1vbiwgInJlc2V0 IGludGVyZmFjZVxuIik7CisKK3Jlc2V0OgorCS8qIERlYWxsb2NhdGUgdGhlIHJlcXVlc3RzICov CisJaWYgKGNvbW1vbi0+ZnNnKSB7CisJCWZzZyA9IGNvbW1vbi0+ZnNnOworCisJCWZvciAoaSA9 IDA7IGkgPCBGU0dfTlVNX0JVRkZFUlM7ICsraSkgeworCQkJc3RydWN0IGZzZ19idWZmaGQgKmJo ID0gJmNvbW1vbi0+YnVmZmhkc1tpXTsKKworCQkJaWYgKGJoLT5pbnJlcSkgeworCQkJCXVzYl9l cF9mcmVlX3JlcXVlc3QoZnNnLT5idWxrX2luLCBiaC0+aW5yZXEpOworCQkJCWJoLT5pbnJlcSA9 IE5VTEw7CisJCQl9CisJCQlpZiAoYmgtPm91dHJlcSkgeworCQkJCXVzYl9lcF9mcmVlX3JlcXVl c3QoZnNnLT5idWxrX291dCwgYmgtPm91dHJlcSk7CisJCQkJYmgtPm91dHJlcSA9IE5VTEw7CisJ CQl9CisJCX0KKworCQkvKiBEaXNhYmxlIHRoZSBlbmRwb2ludHMgKi8KKwkJaWYgKGZzZy0+YnVs a19pbl9lbmFibGVkKSB7CisJCQl1c2JfZXBfZGlzYWJsZShmc2ctPmJ1bGtfaW4pOworCQkJZnNn LT5idWxrX2luX2VuYWJsZWQgPSAwOworCQl9CisJCWlmIChmc2ctPmJ1bGtfb3V0X2VuYWJsZWQp IHsKKwkJCXVzYl9lcF9kaXNhYmxlKGZzZy0+YnVsa19vdXQpOworCQkJZnNnLT5idWxrX291dF9l bmFibGVkID0gMDsKKwkJfQorCisJCWNvbW1vbi0+ZnNnID0gTlVMTDsKKwl9CisKKwljb21tb24t PnJ1bm5pbmcgPSAwOworCWlmICghbmV3X2ZzZyB8fCByYykKKwkJcmV0dXJuIHJjOworCisJY29t bW9uLT5mc2cgPSBuZXdfZnNnOworCWZzZyA9IGNvbW1vbi0+ZnNnOworCisJLyogRW5hYmxlIHRo ZSBlbmRwb2ludHMgKi8KKwlmc2ctPmJ1bGtfaW4tPmRlc2MgPSBmc2dfZXBfZGVzYyhjb21tb24t PmdhZGdldCwKKwkJCQkJICZmc2dfZnNfYnVsa19pbl9kZXNjLCAmZnNnX2hzX2J1bGtfaW5fZGVz Yyk7CisJcmMgPSBlbmFibGVfZW5kcG9pbnQoY29tbW9uLCBmc2ctPmJ1bGtfaW4pOworCWlmIChy YykKKwkJZ290byByZXNldDsKKwlmc2ctPmJ1bGtfaW5fZW5hYmxlZCA9IDE7CisKKwlmc2ctPmJ1 bGtfb3V0LT5kZXNjID0gZnNnX2VwX2Rlc2MoY29tbW9uLT5nYWRnZXQsCisJCQkJCSAgJmZzZ19m c19idWxrX291dF9kZXNjLCAmZnNnX2hzX2J1bGtfb3V0X2Rlc2MpOworCXJjID0gZW5hYmxlX2Vu ZHBvaW50KGNvbW1vbiwgZnNnLT5idWxrX291dCk7CisJaWYgKHJjKQorCQlnb3RvIHJlc2V0Owor CWZzZy0+YnVsa19vdXRfZW5hYmxlZCA9IDE7CisJY29tbW9uLT5idWxrX291dF9tYXhwYWNrZXQg PSA1MTI7CisJY2xlYXJfYml0KElHTk9SRV9CVUxLX09VVCwgJmZzZy0+YXRvbWljX2JpdGZsYWdz KTsKKworCS8qIEFsbG9jYXRlIHRoZSByZXF1ZXN0cyAqLworCWZvciAoaSA9IDA7IGkgPCBGU0df TlVNX0JVRkZFUlM7ICsraSkgeworCQlzdHJ1Y3QgZnNnX2J1ZmZoZAkqYmggPSAmY29tbW9uLT5i dWZmaGRzW2ldOworCisJCXJjID0gYWxsb2NfcmVxdWVzdChjb21tb24sIGZzZy0+YnVsa19pbiwg JmJoLT5pbnJlcSk7CisJCWlmIChyYykKKwkJCWdvdG8gcmVzZXQ7CisJCXJjID0gYWxsb2NfcmVx dWVzdChjb21tb24sIGZzZy0+YnVsa19vdXQsICZiaC0+b3V0cmVxKTsKKwkJaWYgKHJjKQorCQkJ Z290byByZXNldDsKKwkJYmgtPmlucmVxLT5idWYgPSBiaC0+b3V0cmVxLT5idWYgPSBiaC0+YnVm OworCQliaC0+aW5yZXEtPmNvbnRleHQgPSBiaC0+b3V0cmVxLT5jb250ZXh0ID0gYmg7CisJCWJo LT5pbnJlcS0+Y29tcGxldGUgPSBidWxrX2luX2NvbXBsZXRlOworCQliaC0+b3V0cmVxLT5jb21w bGV0ZSA9IGJ1bGtfb3V0X2NvbXBsZXRlOworCX0KKworCWNvbW1vbi0+cnVubmluZyA9IDE7CisK KwlyZXR1cm4gcmM7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBBTFQg Q09ORklHUyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworc3RhdGljIGludCBm c2dfc2V0X2FsdChzdHJ1Y3QgdXNiX2Z1bmN0aW9uICpmLCB1bnNpZ25lZCBpbnRmLCB1bnNpZ25l ZCBhbHQpCit7CisJc3RydWN0IGZzZ19kZXYgKmZzZyA9IGZzZ19mcm9tX2Z1bmMoZik7CisJZnNn LT5jb21tb24tPm5ld19mc2cgPSBmc2c7CisJcmFpc2VfZXhjZXB0aW9uKGZzZy0+Y29tbW9uLCBG U0dfU1RBVEVfQ09ORklHX0NIQU5HRSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZz Z19kaXNhYmxlKHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IGZzZ19kZXYgKmZz ZyA9IGZzZ19mcm9tX2Z1bmMoZik7CisJZnNnLT5jb21tb24tPm5ld19mc2cgPSBOVUxMOworCXJh aXNlX2V4Y2VwdGlvbihmc2ctPmNvbW1vbiwgRlNHX1NUQVRFX0NPTkZJR19DSEFOR0UpOworfQor CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgdm9pZCBoYW5kbGVfZXhjZXB0aW9uKHN0 cnVjdCBmc2dfY29tbW9uICpjb21tb24pCit7CisJaW50CQkJaTsKKwlzdHJ1Y3QgZnNnX2J1ZmZo ZAkqYmg7CisJZW51bSBmc2dfc3RhdGUJCW9sZF9zdGF0ZTsKKwlzdHJ1Y3QgZnNnX2x1bgkJKmN1 cmx1bjsKKwl1bnNpZ25lZCBpbnQJCWV4Y2VwdGlvbl9yZXFfdGFnOworCisJLyogQ2FuY2VsIGFs bCB0aGUgcGVuZGluZyB0cmFuc2ZlcnMgKi8KKwlpZiAoY29tbW9uLT5mc2cpIHsKKwkJZm9yIChp ID0gMDsgaSA8IEZTR19OVU1fQlVGRkVSUzsgKytpKSB7CisJCQliaCA9ICZjb21tb24tPmJ1ZmZo ZHNbaV07CisJCQlpZiAoYmgtPmlucmVxX2J1c3kpCisJCQkJdXNiX2VwX2RlcXVldWUoY29tbW9u LT5mc2ctPmJ1bGtfaW4sIGJoLT5pbnJlcSk7CisJCQlpZiAoYmgtPm91dHJlcV9idXN5KQorCQkJ CXVzYl9lcF9kZXF1ZXVlKGNvbW1vbi0+ZnNnLT5idWxrX291dCwKKwkJCQkJICAgICAgIGJoLT5v dXRyZXEpOworCQl9CisKKwkJLyogV2FpdCB1bnRpbCBldmVyeXRoaW5nIGlzIGlkbGUgKi8KKwkJ Zm9yICg7OykgeworCQkJaW50IG51bV9hY3RpdmUgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IEZT R19OVU1fQlVGRkVSUzsgKytpKSB7CisJCQkJYmggPSAmY29tbW9uLT5idWZmaGRzW2ldOworCQkJ CW51bV9hY3RpdmUgKz0gYmgtPmlucmVxX2J1c3kgKyBiaC0+b3V0cmVxX2J1c3k7CisJCQl9CisJ CQlpZiAobnVtX2FjdGl2ZSA9PSAwKQorCQkJCWJyZWFrOworCQkJaWYgKHNsZWVwX3RocmVhZChj b21tb24pKQorCQkJCXJldHVybjsKKwkJfQorCisJCS8qIENsZWFyIG91dCB0aGUgY29udHJvbGxl cidzIGZpZm9zICovCisJCWlmIChjb21tb24tPmZzZy0+YnVsa19pbl9lbmFibGVkKQorCQkJdXNi X2VwX2ZpZm9fZmx1c2goY29tbW9uLT5mc2ctPmJ1bGtfaW4pOworCQlpZiAoY29tbW9uLT5mc2ct PmJ1bGtfb3V0X2VuYWJsZWQpCisJCQl1c2JfZXBfZmlmb19mbHVzaChjb21tb24tPmZzZy0+YnVs a19vdXQpOworCX0KKworCS8qIFJlc2V0IHRoZSBJL08gYnVmZmVyIHN0YXRlcyBhbmQgcG9pbnRl cnMsIHRoZSBTQ1NJCisJICogc3RhdGUsIGFuZCB0aGUgZXhjZXB0aW9uLiAgVGhlbiBpbnZva2Ug dGhlIGhhbmRsZXIuICovCisKKwlmb3IgKGkgPSAwOyBpIDwgRlNHX05VTV9CVUZGRVJTOyArK2kp IHsKKwkJYmggPSAmY29tbW9uLT5idWZmaGRzW2ldOworCQliaC0+c3RhdGUgPSBCVUZfU1RBVEVf RU1QVFk7CisJfQorCWNvbW1vbi0+bmV4dF9idWZmaGRfdG9fZmlsbCA9ICZjb21tb24tPmJ1ZmZo ZHNbMF07CisJY29tbW9uLT5uZXh0X2J1ZmZoZF90b19kcmFpbiA9ICZjb21tb24tPmJ1ZmZoZHNb MF07CisJZXhjZXB0aW9uX3JlcV90YWcgPSBjb21tb24tPmV4Y2VwdGlvbl9yZXFfdGFnOworCW9s ZF9zdGF0ZSA9IGNvbW1vbi0+c3RhdGU7CisKKwlyZXBvcnRfZXhjZXB0aW9uKCJoYW5kbGluZyIs IG9sZF9zdGF0ZSk7CisKKwlpZiAob2xkX3N0YXRlID09IEZTR19TVEFURV9BQk9SVF9CVUxLX09V VCkKKwkJY29tbW9uLT5zdGF0ZSA9IEZTR19TVEFURV9TVEFUVVNfUEhBU0U7CisJZWxzZSB7CisJ CWZvciAoaSA9IDA7IGkgPCBjb21tb24tPm5sdW5zOyArK2kpIHsKKwkJCWN1cmx1biA9ICZjb21t b24tPmx1bnNbaV07CisJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19OT19TRU5TRTsKKwkJCWN1 cmx1bi0+aW5mb192YWxpZCA9IDA7CisJCX0KKwkJY29tbW9uLT5zdGF0ZSA9IEZTR19TVEFURV9J RExFOworCX0KKworCS8qIENhcnJ5IG91dCBhbnkgZXh0cmEgYWN0aW9ucyByZXF1aXJlZCBmb3Ig dGhlIGV4Y2VwdGlvbiAqLworCXN3aXRjaCAob2xkX3N0YXRlKSB7CisJY2FzZSBGU0dfU1RBVEVf QUJPUlRfQlVMS19PVVQ6CisJCXNlbmRfc3RhdHVzKGNvbW1vbik7CisKKwkJaWYgKGNvbW1vbi0+ c3RhdGUgPT0gRlNHX1NUQVRFX1NUQVRVU19QSEFTRSkKKwkJCWNvbW1vbi0+c3RhdGUgPSBGU0df U1RBVEVfSURMRTsKKwkJYnJlYWs7CisKKwljYXNlIEZTR19TVEFURV9SRVNFVDoKKwkJLyogSW4g Y2FzZSB3ZSB3ZXJlIGZvcmNlZCBhZ2FpbnN0IG91ciB3aWxsIHRvIGhhbHQgYQorCQkgKiBidWxr IGVuZHBvaW50LCBjbGVhciB0aGUgaGFsdCBub3cuICAoVGhlIFN1cGVySCBVREMKKwkJICogcmVx dWlyZXMgdGhpcy4pICovCisJCWlmICghZnNnX2lzX3NldChjb21tb24pKQorCQkJYnJlYWs7CisJ CWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoSUdOT1JFX0JVTEtfT1VULAorCQkJCSAgICAgICAmY29t bW9uLT5mc2ctPmF0b21pY19iaXRmbGFncykpCisJCQl1c2JfZXBfY2xlYXJfaGFsdChjb21tb24t PmZzZy0+YnVsa19pbik7CisKKwkJaWYgKGNvbW1vbi0+ZXAwX3JlcV90YWcgPT0gZXhjZXB0aW9u X3JlcV90YWcpCisJCQllcDBfcXVldWUoY29tbW9uKTsJLyogQ29tcGxldGUgdGhlIHN0YXR1cyBz dGFnZSAqLworCisJCWJyZWFrOworCisJY2FzZSBGU0dfU1RBVEVfQ09ORklHX0NIQU5HRToKKwkJ ZG9fc2V0X2ludGVyZmFjZShjb21tb24sIGNvbW1vbi0+bmV3X2ZzZyk7CisJCWJyZWFrOworCisJ Y2FzZSBGU0dfU1RBVEVfRVhJVDoKKwljYXNlIEZTR19TVEFURV9URVJNSU5BVEVEOgorCQlkb19z ZXRfaW50ZXJmYWNlKGNvbW1vbiwgTlVMTCk7CQkvKiBGcmVlIHJlc291cmNlcyAqLworCQljb21t b24tPnN0YXRlID0gRlNHX1NUQVRFX1RFUk1JTkFURUQ7CS8qIFN0b3AgdGhlIHRocmVhZCAqLwor CQlicmVhazsKKworCWNhc2UgRlNHX1NUQVRFX0lOVEVSRkFDRV9DSEFOR0U6CisJY2FzZSBGU0df U1RBVEVfRElTQ09OTkVDVDoKKwljYXNlIEZTR19TVEFURV9DT01NQU5EX1BIQVNFOgorCWNhc2Ug RlNHX1NUQVRFX0RBVEFfUEhBU0U6CisJY2FzZSBGU0dfU1RBVEVfU1RBVFVTX1BIQVNFOgorCWNh c2UgRlNHX1NUQVRFX0lETEU6CisJCWJyZWFrOworCX0KK30KKworLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KKworc3RhdGljIGludCBmc2dfbWFpbl90aHJlYWQodm9pZCAqY29tbW9uXykKK3sKKwlzdHJ1 Y3QgZnNnX2NvbW1vbgkqY29tbW9uID0gY29tbW9uXzsKKwlpbnQgcmV0ID0gMDsKKworCS8qIFRo ZSBtYWluIGxvb3AgKi8KKwl3aGlsZSAoY29tbW9uLT5zdGF0ZSAhPSBGU0dfU1RBVEVfVEVSTUlO QVRFRCkgeworCQlpZiAoZXhjZXB0aW9uX2luX3Byb2dyZXNzKGNvbW1vbikpIHsKKwkJCWhhbmRs ZV9leGNlcHRpb24oY29tbW9uKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKCFjb21tb24t PnJ1bm5pbmcpIHsKKwkJCXJldCA9IHNsZWVwX3RocmVhZChjb21tb24pOworCQkJaWYgKHJldCkK KwkJCQlicmVhazsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcmV0ID0gZ2V0X25leHRfY29tbWFu ZChjb21tb24pOworCQlpZiAocmV0KQorCQkJY29udGludWU7CisKKwkJaWYgKCFleGNlcHRpb25f aW5fcHJvZ3Jlc3MoY29tbW9uKSkKKwkJCWNvbW1vbi0+c3RhdGUgPSBGU0dfU1RBVEVfREFUQV9Q SEFTRTsKKworCQlpZiAoZG9fc2NzaV9jb21tYW5kKGNvbW1vbikgfHwgZmluaXNoX3JlcGx5KGNv bW1vbikpCisJCQljb250aW51ZTsKKworCQlpZiAoIWV4Y2VwdGlvbl9pbl9wcm9ncmVzcyhjb21t b24pKQorCQkJY29tbW9uLT5zdGF0ZSA9IEZTR19TVEFURV9TVEFUVVNfUEhBU0U7CisKKwkJaWYg KHNlbmRfc3RhdHVzKGNvbW1vbikpCisJCQljb250aW51ZTsKKworCQlpZiAoIWV4Y2VwdGlvbl9p bl9wcm9ncmVzcyhjb21tb24pKQorCQkJY29tbW9uLT5zdGF0ZSA9IEZTR19TVEFURV9JRExFOwor CX0KKworCWlmIChyZXQgJiYgcmV0ICE9IC1FUkVTVEFSVFNZUykgeworCQlwcl93YXJuKCIlczog ZXJyb3IgJXBlXG4iLCBfX2Z1bmNfXywgRVJSX1BUUihyZXQpKTsKKwkJcmV0dXJuIHJldDsKKwl9 CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZnNnX2NvbW1vbl9yZWxlYXNlKHN0cnVj dCBmc2dfY29tbW9uICpjb21tb24pOworCitzdGF0aWMgc3RydWN0IGZzZ19jb21tb24gKmZzZ19j b21tb25fc2V0dXAodm9pZCkKK3sKKwlzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uOworCisJLyog QWxsb2NhdGU/ICovCisJY29tbW9uID0gY2FsbG9jKHNpemVvZigqY29tbW9uKSwgMSk7CisJaWYg KCFjb21tb24pCisJCXJldHVybiBOVUxMOworCisJY29tbW9uLT5vcHMgPSBOVUxMOworCWNvbW1v bi0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCXJldHVybiBjb21tb247Cit9CisKK3N0YXRpYyBp bnQgZnNnX2NvbW1vbl9pbml0KHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24sCisJCQkgICBzdHJ1 Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdl dCA9IGNkZXYtPmdhZGdldDsKKwlzdHJ1Y3QgZmlsZV9saXN0X2VudHJ5ICpmZW50cnk7CisJc3Ry dWN0IGZzZ19idWZmaGQgKmJoOworCWludCBubHVucywgaSwgZmQgPSAtMSwgcmM7CisKKwl1bXNf Y291bnQgPSAwOworCisJY29tbW9uLT5nYWRnZXQgPSBnYWRnZXQ7CisJY29tbW9uLT5lcDAgPSBn YWRnZXQtPmVwMDsKKwljb21tb24tPmVwMHJlcSA9IGNkZXYtPnJlcTsKKworCXRocmVhZF90YXNr ID0gYnRocmVhZF9ydW4oZnNnX21haW5fdGhyZWFkLCBjb21tb24sICJtYXNzLXN0b3JhZ2UtZ2Fk Z2V0Iik7CisJaWYgKElTX0VSUih0aHJlYWRfdGFzaykpCisJCXJldHVybiBQVFJfRVJSKHRocmVh ZF90YXNrKTsKKworCWZpbGVfbGlzdF9kZXRlY3RfYWxsKHVtc19maWxlcyk7CisKKwlmaWxlX2xp c3RfZm9yX2VhY2hfZW50cnkodW1zX2ZpbGVzLCBmZW50cnkpIHsKKwkJdW5zaWduZWQgZmxhZ3Mg PSBPX1JEV1I7CisJCXN0cnVjdCBzdGF0IHN0OworCisJCWlmIChmZW50cnktPmZsYWdzKSB7CisJ CQlwcl9lcnIoImZsYWdzIG5vdCBzdXBwb3J0ZWRcbiIpOworCQkJcmV0dXJuIC1FTk9TWVM7CisJ CX0KKworCQlmZCA9IG9wZW4oZmVudHJ5LT5maWxlbmFtZSwgZmxhZ3MpOworCQlpZiAoZmQgPCAw KSB7CisJCQlwcl9lcnIoIm9wZW4oJyVzJykgZmFpbGVkOiAlcGVcbiIsCisJCQkgICAgICAgZmVu dHJ5LT5maWxlbmFtZSwgRVJSX1BUUihmZCkpOworCQkJcmV0dXJuIGZkOworCQl9CisKKwkJcmMg PSBmc3RhdChmZCwgJnN0KTsKKwkJaWYgKHJjIDwgMCkgeworCQkJcHJfZXJyKCJzdGF0KCclcycp IGZhaWxlZDogJXBlXG4iLAorCQkJICAgICAgIGZlbnRyeS0+ZmlsZW5hbWUsIEVSUl9QVFIocmMp KTsKKwkJCWdvdG8gY2xvc2U7CisJCX0KKworCQlpZiAoc3Quc3Rfc2l6ZSAlIFNFQ1RPUl9TSVpF ICE9IDApIHsKKwkJCXByX2VycigiZXhwb3J0aW5nICclcycgZmFpbGVkOiBpbnZhbGlkIGJsb2Nr IHNpemVcbiIsCisJCQkgICAgICAgZmVudHJ5LT5maWxlbmFtZSk7CisJCQlnb3RvIGNsb3NlOwor CQl9CisKKwkJdW1zW3Vtc19jb3VudF0uZmQgPSBmZDsKKwkJdW1zW3Vtc19jb3VudF0ubnVtX3Nl Y3RvcnMgPSBzdC5zdF9zaXplIC8gU0VDVE9SX1NJWkU7CisKKwkJc3RybGNweSh1bXNbdW1zX2Nv dW50XS5uYW1lLCBmZW50cnktPm5hbWUsIHNpemVvZih1bXNbdW1zX2NvdW50XS5uYW1lKSk7CisK KwkJREJHKGNvbW1vbiwgIkxVTiAlZCwgJXMgc2VjdG9yX2NvdW50ICUjeFxuIiwKKwkJCXVtc19j b3VudCwgZmVudHJ5LT5uYW1lLCB1bXNbdW1zX2NvdW50XS5udW1fc2VjdG9ycyk7CisKKwkJdW1z X2NvdW50Kys7CisJfQorCisJLyogRmluZCBvdXQgaG93IG1hbnkgTFVOcyB0aGVyZSBzaG91bGQg YmUgKi8KKwlubHVucyA9IHVtc19jb3VudDsKKwlpZiAobmx1bnMgPCAxIHx8IG5sdW5zID4gRlNH X01BWF9MVU5TKSB7CisJCXByX3dhcm4oImludmFsaWQgbnVtYmVyIG9mIExVTnM6ICV1XG4iLCBu bHVucyk7CisJCXJjID0gLUVJTlZBTDsKKwkJZ290byBjbG9zZTsKKwl9CisKKwkvKiBNYXliZSBh bGxvY2F0ZSBkZXZpY2UtZ2xvYmFsIHN0cmluZyBJRHMsIGFuZCBwYXRjaCBkZXNjcmlwdG9ycyAq LworCWlmIChmc2dfc3RyaW5nc1tGU0dfU1RSSU5HX0lOVEVSRkFDRV0uaWQgPT0gMCkgeworCQly YyA9IHVzYl9zdHJpbmdfaWQoY2Rldik7CisJCWlmICh1bmxpa2VseShyYyA8IDApKQorCQkJZ290 byBlcnJvcl9yZWxlYXNlOworCQlmc2dfc3RyaW5nc1tGU0dfU1RSSU5HX0lOVEVSRkFDRV0uaWQg PSByYzsKKwkJZnNnX2ludGZfZGVzYy5pSW50ZXJmYWNlID0gcmM7CisJfQorCisJY29tbW9uLT5u bHVucyA9IG5sdW5zOworCisJZm9yIChpID0gMDsgaSA8IG5sdW5zOyBpKyspIHsKKwkJY29tbW9u LT5sdW5zW2ldLnJlbW92YWJsZSA9IDE7CisKKwkJcmMgPSBmc2dfbHVuX29wZW4oJmNvbW1vbi0+ bHVuc1tpXSwgdW1zW2ldLm51bV9zZWN0b3JzLCAiIik7CisJCWlmIChyYykKKwkJCWdvdG8gZXJy b3JfbHVuczsKKwl9CisJY29tbW9uLT5sdW4gPSAwOworCisJLyogRGF0YSBidWZmZXJzIGN5Y2xp YyBsaXN0ICovCisJYmggPSBjb21tb24tPmJ1ZmZoZHM7CisKKwlpID0gRlNHX05VTV9CVUZGRVJT OworCWdvdG8gYnVmZmhkc19maXJzdF9pdDsKKwlkbyB7CisJCWJoLT5uZXh0ID0gYmggKyAxOwor CQkrK2JoOworYnVmZmhkc19maXJzdF9pdDoKKwkJYmgtPmlucmVxX2J1c3kgPSAwOworCQliaC0+ b3V0cmVxX2J1c3kgPSAwOworCQliaC0+YnVmID0gZG1hX2FsbG9jKEZTR19CVUZMRU4pOworCQlp ZiAodW5saWtlbHkoIWJoLT5idWYpKSB7CisJCQlyYyA9IC1FTk9NRU07CisJCQlnb3RvIGVycm9y X3JlbGVhc2U7CisJCX0KKwl9IHdoaWxlICgtLWkpOworCWJoLT5uZXh0ID0gY29tbW9uLT5idWZm aGRzOworCisJc25wcmludGYoY29tbW9uLT5pbnF1aXJ5X3N0cmluZywgc2l6ZW9mIGNvbW1vbi0+ aW5xdWlyeV9zdHJpbmcsCisJCSAiJS04cyUtMTZzJTA0eCIsCisJCSAiTGludXggICAiLAorCQkg IkZpbGUtU3RvcmUgR2FkZ2V0IiwKKwkJIDB4ZmZmZik7CisKKwkvKiBTb21lIHBlcmlwaGVyYWwg Y29udHJvbGxlcnMgYXJlIGtub3duIG5vdCB0byBiZSBhYmxlIHRvCisJICogaGFsdCBidWxrIGVu ZHBvaW50cyBjb3JyZWN0bHkuICBJZiBvbmUgb2YgdGhlbSBpcyBwcmVzZW50LAorCSAqIGRpc2Fi bGUgc3RhbGxzLgorCSAqLworCisJLyogSW5mb3JtYXRpb24gKi8KKwlEQkcoY29tbW9uLCBGU0df RFJJVkVSX0RFU0MgIiwgdmVyc2lvbjogIiBGU0dfRFJJVkVSX1ZFUlNJT04gIlxuIik7CisJREJH KGNvbW1vbiwgIk51bWJlciBvZiBMVU5zPSVkXG4iLCBjb21tb24tPm5sdW5zKTsKKworCXJldHVy biAwOworCitlcnJvcl9sdW5zOgorCWNvbW1vbi0+bmx1bnMgPSBpICsgMTsKK2Vycm9yX3JlbGVh c2U6CisJY29tbW9uLT5zdGF0ZSA9IEZTR19TVEFURV9URVJNSU5BVEVEOwkvKiBUaGUgdGhyZWFk IGlzIGRlYWQgKi8KKwlmc2dfY29tbW9uX3JlbGVhc2UoY29tbW9uKTsKK2Nsb3NlOgorCWNsb3Nl KGZkKTsKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIGZzZ19jb21tb25fcmVsZWFzZShz dHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQoreworCXN0cnVjdCBmc2dfYnVmZmhkICpiaDsKKwl1 bnNpZ25lZCBpOworCisJLyogSWYgdGhlIHRocmVhZCBpc24ndCBhbHJlYWR5IGRlYWQsIHRlbGwg aXQgdG8gZXhpdCBub3cgKi8KKwlpZiAoY29tbW9uLT5zdGF0ZSAhPSBGU0dfU1RBVEVfVEVSTUlO QVRFRCkgeworCQlyYWlzZV9leGNlcHRpb24oY29tbW9uLCBGU0dfU1RBVEVfRVhJVCk7CisJCWJ0 aHJlYWRfc3RvcCh0aHJlYWRfdGFzayk7CisJCWJ0aHJlYWRfZnJlZSh0aHJlYWRfdGFzayk7CisJ fQorCisJYmggPSBjb21tb24tPmJ1ZmZoZHM7CisJaSA9IEZTR19OVU1fQlVGRkVSUzsKKworCWRv IHsKKwkJZG1hX2ZyZWUoYmgtPmJ1Zik7CisJfSB3aGlsZSAoKytiaCwgLS1pKTsKKworCXVtc19j b3VudCA9IDA7Cit9CisKKworc3RhdGljIHZvaWQgZnNnX3VuYmluZChzdHJ1Y3QgdXNiX2NvbmZp Z3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3RydWN0IGZzZ19kZXYJ CSpmc2cgPSBmc2dfZnJvbV9mdW5jKGYpOworCXN0cnVjdCBmc2dfY29tbW9uCSpjb21tb24gPSBm c2ctPmNvbW1vbjsKKwlpbnQgaTsKKworCURCRyhmc2csICJ1bmJpbmRcbiIpOworCisJaWYgKGZz Zy0+Y29tbW9uLT5mc2cgPT0gZnNnKSB7CisJCWZzZy0+Y29tbW9uLT5uZXdfZnNnID0gTlVMTDsK KwkJcmFpc2VfZXhjZXB0aW9uKGZzZy0+Y29tbW9uLCBGU0dfU1RBVEVfQ09ORklHX0NIQU5HRSk7 CisKKwkJYnRocmVhZF9zdG9wKHRocmVhZF90YXNrKTsKKwkJd2hpbGUgKGNvbW1vbi0+ZnNnID09 IGZzZykKKwkJCWJ0aHJlYWRfcmVzY2hlZHVsZSgpOworCX0KKworCXVzYl9mcmVlX2FsbF9kZXNj cmlwdG9ycygmZnNnLT5mdW5jdGlvbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgdW1zX2NvdW50OyBp KyspCisJCWNsb3NlKHVtc1tpXS5mZCk7CisKKwlmc2dfY29tbW9uX3JlbGVhc2UoZnNnLT5jb21t b24pOworCisJdW1zX2ZpbGVzID0gTlVMTDsKK30KKworc3RhdGljIGludCBmc2dfYmluZChzdHJ1 Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMsIHN0cnVjdCB1c2JfZnVuY3Rpb24gKmYpCit7CisJc3Ry dWN0IGZzZ19kZXYJCSpmc2cgPSBmc2dfZnJvbV9mdW5jKGYpOworCXN0cnVjdCB1c2JfZ2FkZ2V0 CSpnYWRnZXQgPSBjLT5jZGV2LT5nYWRnZXQ7CisJaW50CQkJcmV0OworCXN0cnVjdCB1c2JfZXAJ CSplcDsKKwlzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICoqaHNfZnVuY3Rpb24gPSBOVUxM OworCXN0cnVjdCBmc2dfY29tbW9uCSpjb21tb24gPSBmc2ctPmNvbW1vbjsKKworCWlmICghdW1z X2ZpbGVzKSB7CisJCXN0cnVjdCBmX3Vtc19vcHRzICpvcHRzID0gY29udGFpbmVyX29mKGYtPmZp LCBzdHJ1Y3QgZl91bXNfb3B0cywgZnVuY19pbnN0KTsKKworCQl1bXNfZmlsZXMgPSBvcHRzLT5m aWxlczsKKwl9CisKKwlmc2ctPmdhZGdldCA9IGdhZGdldDsKKworCURCRyhmc2csICJiaW5kXG4i KTsKKworCXJldCA9IGZzZ19jb21tb25faW5pdChjb21tb24sIGMtPmNkZXYpOworCWlmIChyZXQp CisJCWdvdG8gcmVtb3ZlX3Vtc19maWxlczsKKworCS8qIE5ldyBpbnRlcmZhY2UgKi8KKwlyZXQg PSB1c2JfaW50ZXJmYWNlX2lkKGMsIGYpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGZzZ19jb21t b25fcmVsZWFzZTsKKwlmc2dfaW50Zl9kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPSByZXQ7CisJZnNn LT5pbnRlcmZhY2VfbnVtYmVyID0gcmV0OworCisJcmV0ID0gLUVPUE5PVFNVUFA7CisKKwkvKiBG aW5kIGFsbCB0aGUgZW5kcG9pbnRzIHdlIHdpbGwgdXNlICovCisJZXAgPSB1c2JfZXBfYXV0b2Nv bmZpZyhnYWRnZXQsICZmc2dfZnNfYnVsa19pbl9kZXNjKTsKKwlpZiAoIWVwKQorCQlnb3RvIGF1 dG9jb25mX2ZhaWw7CisKKwllcC0+ZHJpdmVyX2RhdGEgPSBjb21tb247CS8qIGNsYWltIHRoZSBl bmRwb2ludCAqLworCWZzZy0+YnVsa19pbiA9IGVwOworCisJZXAgPSB1c2JfZXBfYXV0b2NvbmZp ZyhnYWRnZXQsICZmc2dfZnNfYnVsa19vdXRfZGVzYyk7CisJaWYgKCFlcCkKKwkJZ290byBhdXRv Y29uZl9mYWlsOworCisJZXAtPmRyaXZlcl9kYXRhID0gY29tbW9uOwkvKiBjbGFpbSB0aGUgZW5k cG9pbnQgKi8KKwlmc2ctPmJ1bGtfb3V0ID0gZXA7CisKKwlpZiAoZ2FkZ2V0X2lzX2R1YWxzcGVl ZChnYWRnZXQpKSB7CisJCS8qIEFzc3VtZSBlbmRwb2ludCBhZGRyZXNzZXMgYXJlIHRoZSBzYW1l IGZvciBib3RoIHNwZWVkcyAqLworCQlmc2dfaHNfYnVsa19pbl9kZXNjLmJFbmRwb2ludEFkZHJl c3MgPQorCQkJZnNnX2ZzX2J1bGtfaW5fZGVzYy5iRW5kcG9pbnRBZGRyZXNzOworCQlmc2dfaHNf YnVsa19vdXRfZGVzYy5iRW5kcG9pbnRBZGRyZXNzID0KKwkJCWZzZ19mc19idWxrX291dF9kZXNj LmJFbmRwb2ludEFkZHJlc3M7CisJCWhzX2Z1bmN0aW9uID0gZnNnX2hzX2Z1bmN0aW9uOworCX0K KworCS8qIENvcHkgZGVzY3JpcHRvcnMgKi8KKwlyZXR1cm4gdXNiX2Fzc2lnbl9kZXNjcmlwdG9y cyhmLCBmc2dfZnNfZnVuY3Rpb24sIGhzX2Z1bmN0aW9uLCBOVUxMKTsKKworYXV0b2NvbmZfZmFp bDoKKwlFUlJPUihmc2csICJ1bmFibGUgdG8gYXV0b2NvbmZpZ3VyZSBhbGwgZW5kcG9pbnRzXG4i KTsKK2ZzZ19jb21tb25fcmVsZWFzZToKKwlmc2dfY29tbW9uX3JlbGVhc2UoY29tbW9uKTsKK3Jl bW92ZV91bXNfZmlsZXM6CisJdW1zX2ZpbGVzID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisK KworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBBREQgRlVOQ1RJT04gKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5n cyAqZnNnX3N0cmluZ3NfYXJyYXlbXSA9IHsKKwkmZnNnX3N0cmluZ3RhYiwKKwlOVUxMLAorfTsK Kworc3RhdGljIHZvaWQgZnNnX2ZyZWUoc3RydWN0IHVzYl9mdW5jdGlvbiAqZikKK3sKKwlzdHJ1 Y3QgZnNnX2RldiAqZnNnOworCisJZnNnID0gY29udGFpbmVyX29mKGYsIHN0cnVjdCBmc2dfZGV2 LCBmdW5jdGlvbik7CisKKwlrZnJlZShmc2cpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9mdW5j dGlvbiAqZnNnX2FsbG9jKHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZpKQoreworCXN0 cnVjdCBmX3Vtc19vcHRzICpvcHRzID0gZnNnX29wdHNfZnJvbV9mdW5jX2luc3QoZmkpOworCXN0 cnVjdCBmc2dfY29tbW9uICpjb21tb24gPSBvcHRzLT5jb21tb247CisJc3RydWN0IGZzZ19kZXYg KmZzZzsKKworCWZzZyA9IGt6YWxsb2Moc2l6ZW9mKCpmc2cpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IWZzZykKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlmc2ctPmZ1bmN0aW9uLm5hbWUg PSBGU0dfRFJJVkVSX0RFU0M7CisJZnNnLT5mdW5jdGlvbi5zdHJpbmdzID0gZnNnX3N0cmluZ3Nf YXJyYXk7CisJLyogZGVzY3JpcHRvcnMgYXJlIHBlci1pbnN0YW5jZSBjb3BpZXMgKi8KKwlmc2ct PmZ1bmN0aW9uLmJpbmQgPSBmc2dfYmluZDsKKwlmc2ctPmZ1bmN0aW9uLnNldF9hbHQgPSBmc2df c2V0X2FsdDsKKwlmc2ctPmZ1bmN0aW9uLnNldHVwID0gZnNnX3NldHVwOworCWZzZy0+ZnVuY3Rp b24uZGlzYWJsZSA9IGZzZ19kaXNhYmxlOworCWZzZy0+ZnVuY3Rpb24udW5iaW5kID0gZnNnX3Vu YmluZDsKKwlmc2ctPmZ1bmN0aW9uLmZyZWVfZnVuYyA9IGZzZ19mcmVlOworCisJZnNnLT5jb21t b24gPSBjb21tb247CisJY29tbW9uLT5mc2cgPSBmc2c7CisKKwlyZXR1cm4gJmZzZy0+ZnVuY3Rp b247Cit9CisKK3N0YXRpYyB2b2lkIGZzZ19mcmVlX2luc3RhbmNlKHN0cnVjdCB1c2JfZnVuY3Rp b25faW5zdGFuY2UgKmZpKQoreworCXN0cnVjdCBmX3Vtc19vcHRzICpvcHRzID0gZnNnX29wdHNf ZnJvbV9mdW5jX2luc3QoZmkpOworCisJa2ZyZWUob3B0cy0+Y29tbW9uKTsKKwlrZnJlZShvcHRz KTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZnVuY3Rpb25faW5zdGFuY2UgKmZzZ19hbGxvY19p bnN0KHZvaWQpCit7CisJc3RydWN0IGZfdW1zX29wdHMgKm9wdHM7CisKKwlvcHRzID0ga3phbGxv YyhzaXplb2YoKm9wdHMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW9wdHMpCisJCXJldHVybiBFUlJf UFRSKC1FTk9NRU0pOworCisJb3B0cy0+ZnVuY19pbnN0LmZyZWVfZnVuY19pbnN0ID0gZnNnX2Zy ZWVfaW5zdGFuY2U7CisKKwlvcHRzLT5jb21tb24gPSBmc2dfY29tbW9uX3NldHVwKCk7CisJaWYg KCFvcHRzLT5jb21tb24pIHsKKwkJZnJlZShvcHRzKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01F TSk7CisJfQorCisJcmV0dXJuICZvcHRzLT5mdW5jX2luc3Q7Cit9CisKK0RFQ0xBUkVfVVNCX0ZV TkNUSU9OX0lOSVQodW1zLCBmc2dfYWxsb2NfaW5zdCwgZnNnX2FsbG9jKTsKZGlmZiAtLWdpdCBh L2RyaXZlcnMvdXNiL2dhZGdldC9tdWx0aS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L211bHRpLmMK aW5kZXggMTQ0YWMwNjI0YmUyLi4wNGIzYzI2MDRlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNi L2dhZGdldC9tdWx0aS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9tdWx0aS5jCkBAIC02MCw2 ICs2MCw4IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmaV9kZnU7CiBz dGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbiAqZl9kZnU7CiBzdGF0aWMgc3RydWN0IHVzYl9mdW5j dGlvbl9pbnN0YW5jZSAqZmlfZmFzdGJvb3Q7CiBzdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbiAq Zl9mYXN0Ym9vdDsKK3N0YXRpYyBzdHJ1Y3QgdXNiX2Z1bmN0aW9uX2luc3RhbmNlICpmaV91bXM7 CitzdGF0aWMgc3RydWN0IHVzYl9mdW5jdGlvbiAqZl91bXM7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNi X2NvbmZpZ3VyYXRpb24gY29uZmlnID0gewogCS5iQ29uZmlndXJhdGlvblZhbHVlCT0gMSwKQEAg LTEzOSw2ICsxNDEsMzEgQEAgc3RhdGljIGludCBtdWx0aV9iaW5kX2Zhc3Rib290KHN0cnVjdCB1 c2JfY29tcG9zaXRlX2RldiAqY2RldikKIAlyZXR1cm4gdXNiX2FkZF9mdW5jdGlvbigmY29uZmln LCBmX2Zhc3Rib290KTsKIH0KIAorc3RhdGljIGludCBtdWx0aV9iaW5kX3VtcyhzdHJ1Y3QgdXNi X2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgZl91bXNfb3B0cyAq b3B0czsKKworCWZpX3VtcyA9IHVzYl9nZXRfZnVuY3Rpb25faW5zdGFuY2UoInVtcyIpOworCWlm IChJU19FUlIoZmlfdW1zKSkgeworCQlyZXQgPSBQVFJfRVJSKGZpX3Vtcyk7CisJCWZpX3VtcyA9 IE5VTEw7CisJCXJldHVybiByZXQ7CisJfQorCisJb3B0cyA9IGNvbnRhaW5lcl9vZihmaV91bXMs IHN0cnVjdCBmX3Vtc19vcHRzLCBmdW5jX2luc3QpOworCW9wdHMtPmZpbGVzID0gZ2FkZ2V0X211 bHRpX29wdHMtPnVtc19vcHRzLmZpbGVzOworCisJZl91bXMgPSB1c2JfZ2V0X2Z1bmN0aW9uKGZp X3Vtcyk7CisJaWYgKElTX0VSUihmX3VtcykpIHsKKwkJcmV0ID0gUFRSX0VSUihmX3Vtcyk7CisJ CWZfdW1zID0gTlVMTDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gdXNiX2FkZF9mdW5j dGlvbigmY29uZmlnLCBmX3Vtcyk7Cit9CisKIHN0YXRpYyBpbnQgbXVsdGlfdW5iaW5kKHN0cnVj dCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIHsKIAlpZiAoZ2FkZ2V0X211bHRpX29wdHMtPmNy ZWF0ZV9hY20pIHsKQEAgLTIwNSw2ICsyMzIsMTMgQEAgc3RhdGljIGludCBtdWx0aV9iaW5kKHN0 cnVjdCB1c2JfY29tcG9zaXRlX2RldiAqY2RldikKIAkJCWdvdG8gb3V0OwogCX0KIAorCWlmIChn YWRnZXRfbXVsdGlfb3B0cy0+dW1zX29wdHMuZmlsZXMpIHsKKwkJcHJpbnRmKCIlczogY3JlYXRp bmcgVVNCIE1hc3MgU3RvcmFnZSBmdW5jdGlvblxuIiwgX19mdW5jX18pOworCQlyZXQgPSBtdWx0 aV9iaW5kX3VtcyhjZGV2KTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKwogCWlmIChn YWRnZXRfbXVsdGlfb3B0cy0+Y3JlYXRlX2FjbSkgewogCQlwcmludGYoIiVzOiBjcmVhdGluZyBB Q00gZnVuY3Rpb25cbiIsIF9fZnVuY19fKTsKIAkJcmV0ID0gbXVsdGlfYmluZF9hY20oY2Rldik7 CkBAIC0yNzMsNiArMzA3LDcgQEAgdW5zaWduZWQgdXNiX211bHRpX2NvdW50X2Z1bmN0aW9ucyhz dHJ1Y3QgZl9tdWx0aV9vcHRzICpvcHRzKQogCWNvdW50ICs9ICFmaWxlX2xpc3RfZW1wdHkob3B0 cy0+ZmFzdGJvb3Rfb3B0cy5maWxlcykgfHwKIAkJb3B0cy0+ZmFzdGJvb3Rfb3B0cy5leHBvcnRf YmJ1OwogCWNvdW50ICs9ICFmaWxlX2xpc3RfZW1wdHkob3B0cy0+ZGZ1X29wdHMuZmlsZXMpOwor CWNvdW50ICs9ICFmaWxlX2xpc3RfZW1wdHkob3B0cy0+dW1zX29wdHMuZmlsZXMpOwogCWNvdW50 ICs9IG9wdHMtPmNyZWF0ZV9hY207CiAKIAlyZXR1cm4gY291bnQ7CkBAIC0yODIsNiArMzE3LDcg QEAgdm9pZCB1c2JfbXVsdGlfb3B0c19yZWxlYXNlKHN0cnVjdCBmX211bHRpX29wdHMgKm9wdHMp CiB7CiAJZmlsZV9saXN0X2ZyZWUob3B0cy0+ZmFzdGJvb3Rfb3B0cy5maWxlcyk7CiAJZmlsZV9s aXN0X2ZyZWUob3B0cy0+ZGZ1X29wdHMuZmlsZXMpOworCWZpbGVfbGlzdF9mcmVlKG9wdHMtPnVt c19vcHRzLmZpbGVzKTsKIAogCWZyZWUob3B0cyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vz Yi9nYWRnZXQvc3RvcmFnZV9jb21tb24uYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zdG9yYWdlX2Nv bW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uODhjZDc0NTA2 M2U0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9u LmMKQEAgLTAsMCArMSwxNzMgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w KworLyoKKyAqIHN0b3JhZ2VfY29tbW9uLmMgLS0gQ29tbW9uIGRlZmluaXRpb25zIGZvciBtYXNz IHN0b3JhZ2UgZnVuY3Rpb25hbGl0eQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA4IEFs YW4gU3Rlcm4KKyAqIENvcHllaWdodCAoQykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzCisgKiBB dXRob3I6IE1pY2hhbCBOYXphcmV3aWN6IChtLm5hemFyZXdpY3pAc2Ftc3VuZy5jb20pCisgKgor ICogUG9ydGVkIHRvIHUtYm9vdDoKKyAqIEFuZHJ6ZWogUGlldHJhc2lld2ljeiA8YW5kcnplai5w QHNhbXN1bmcuY29tPgorICoKKyAqIENvZGUgcmVmYWN0b3JpbmcgJiBjbGVhbnVwOgorICogxYF1 a2FzeiBNYWpld3NraSA8bC5tYWpld3NraUBzYW1zdW5nLmNvbT4KKyAqLworCisjaW5jbHVkZSAi c3RvcmFnZV9jb21tb24uaCIKKworLyoKKyAqIFRoaXMgZmlsZSByZXF1aXJlcyB0aGUgZm9sbG93 aW5nIGlkZW50aWZpZXJzIHVzZWQgaW4gVVNCIHN0cmluZ3MgdG8KKyAqIGJlIGRlZmluZWQgKGVh Y2ggb2YgdHlwZSBwb2ludGVyIHRvIGNoYXIpOgorICogIC0gZnNnX3N0cmluZ19tYW51ZmFjdHVy ZXIgLS0gbmFtZSBvZiB0aGUgbWFudWZhY3R1cmVyCisgKiAgLSBmc2dfc3RyaW5nX3Byb2R1Y3Qg ICAgICAtLSBuYW1lIG9mIHRoZSBwcm9kdWN0CisgKiAgLSBmc2dfc3RyaW5nX3NlcmlhbCAgICAg ICAtLSBwcm9kdWN0J3Mgc2VyaWFsCisgKiAgLSBmc2dfc3RyaW5nX2NvbmZpZyAgICAgICAtLSBu YW1lIG9mIHRoZSBjb25maWd1cmF0aW9uCisgKiAgLSBmc2dfc3RyaW5nX2ludGVyZmFjZSAgICAt LSBuYW1lIG9mIHRoZSBpbnRlcmZhY2UKKyAqIFRoZSBmaXJzdCBmb3VyIGFyZSBvbmx5IG5lZWRl ZCB3aGVuIEZTR19ERVNDUklQVE9SU19ERVZJQ0VfU1RSSU5HUworICogbWFjcm8gaXMgZGVmaW5l ZCBwcmlvciB0byBpbmNsdWRpbmcgdGhpcyBmaWxlLgorICovCisKKy8qIFRoZXJlIGlzIG9ubHkg b25lIGludGVyZmFjZS4gKi8KKworc3RydWN0IHVzYl9pbnRlcmZhY2VfZGVzY3JpcHRvciBmc2df aW50Zl9kZXNjID0geworCS5iTGVuZ3RoID0JCXNpemVvZiBmc2dfaW50Zl9kZXNjLAorCS5iRGVz Y3JpcHRvclR5cGUgPQlVU0JfRFRfSU5URVJGQUNFLAorCisJLmJOdW1FbmRwb2ludHMgPQkyLAkJ LyogQWRqdXN0ZWQgZHVyaW5nIGZzZ19iaW5kKCkgKi8KKwkuYkludGVyZmFjZUNsYXNzID0JVVNC X0NMQVNTX01BU1NfU1RPUkFHRSwKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JVVNCX1NDX1NDU0ks CS8qIEFkanVzdGVkIGR1cmluZyBmc2dfYmluZCgpICovCisJLmJJbnRlcmZhY2VQcm90b2NvbCA9 CVVTQl9QUl9CVUxLLAkvKiBBZGp1c3RlZCBkdXJpbmcgZnNnX2JpbmQoKSAqLworCS5pSW50ZXJm YWNlID0JCUZTR19TVFJJTkdfSU5URVJGQUNFLAorfTsKKworLyoKKyAqIFRocmVlIGZ1bGwtc3Bl ZWQgZW5kcG9pbnQgZGVzY3JpcHRvcnM6IGJ1bGstaW4sIGJ1bGstb3V0LCBhbmQKKyAqIGludGVy cnVwdC1pbi4KKyAqLworCitzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNnX2ZzX2J1 bGtfaW5fZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRl c2NyaXB0b3JUeXBlID0JVVNCX0RUX0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlV U0JfRElSX0lOLAorCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hGRVJfQlVMSywKKwkv KiB3TWF4UGFja2V0U2l6ZSBzZXQgYnkgYXV0b2NvbmZpZ3VyYXRpb24gKi8KK307CisKK3N0cnVj dCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc2dfZnNfYnVsa19vdXRfZGVzYyA9IHsKKwkuYkxl bmd0aCA9CQlVU0JfRFRfRU5EUE9JTlRfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RU X0VORFBPSU5ULAorCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRy aWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCisJLyogd01heFBhY2tldFNpemUgc2V0 IGJ5IGF1dG9jb25maWd1cmF0aW9uICovCit9OworCitzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVh ZGVyICpmc2dfZnNfZnVuY3Rpb25bXSA9IHsKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRl ciAqKSAmZnNnX2ludGZfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAm ZnNnX2ZzX2J1bGtfaW5fZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSAm ZnNnX2ZzX2J1bGtfb3V0X2Rlc2MsCisJTlVMTCwKK307CisKKy8qCisgKiBVU0IgMi4wIGRldmlj ZXMgbmVlZCB0byBleHBvc2UgYm90aCBoaWdoIHNwZWVkIGFuZCBmdWxsIHNwZWVkCisgKiBkZXNj cmlwdG9ycywgdW5sZXNzIHRoZXkgb25seSBydW4gYXQgZnVsbCBzcGVlZC4KKyAqCisgKiBUaGF0 IG1lYW5zIGFsdGVybmF0ZSBlbmRwb2ludCBkZXNjcmlwdG9ycyAoYmlnZ2VyIHBhY2tldHMpCisg KiBhbmQgYSAiZGV2aWNlIHF1YWxpZmllciIgLi4uIHBsdXMgbW9yZSBjb25zdHJ1Y3Rpb24gb3B0 aW9ucworICogZm9yIHRoZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IuCisgKi8KK3N0cnVjdCB1 c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBmc2dfaHNfYnVsa19pbl9kZXNjID0geworCS5iTGVuZ3Ro ID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5E UE9JTlQsCisKKwkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtfaW5fZGVz YyBkdXJpbmcgZnNnX2JpbmQoKSAqLworCS5ibUF0dHJpYnV0ZXMgPQkJVVNCX0VORFBPSU5UX1hG RVJfQlVMSywKKwkud01heFBhY2tldFNpemUgPQljcHVfdG9fbGUxNig1MTIpLAorfTsKKworc3Ry dWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yIGZzZ19oc19idWxrX291dF9kZXNjID0geworCS5i TGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0Jf RFRfRU5EUE9JTlQsCisKKwkvKiBiRW5kcG9pbnRBZGRyZXNzIGNvcGllZCBmcm9tIGZzX2J1bGtf b3V0X2Rlc2MgZHVyaW5nIGZzZ19iaW5kKCkgKi8KKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQ T0lOVF9YRkVSX0JVTEssCisJLndNYXhQYWNrZXRTaXplID0JY3B1X3RvX2xlMTYoNTEyKSwKKwku YkludGVydmFsID0JCTEsCS8qIE5BSyBldmVyeSAxIHVmcmFtZSAqLworfTsKKworc3RydWN0IHVz Yl9kZXNjcmlwdG9yX2hlYWRlciAqZnNnX2hzX2Z1bmN0aW9uW10gPSB7CisJKHN0cnVjdCB1c2Jf ZGVzY3JpcHRvcl9oZWFkZXIgKikgJmZzZ19pbnRmX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3Jp cHRvcl9oZWFkZXIgKikgJmZzZ19oc19idWxrX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3Jp cHRvcl9oZWFkZXIgKikgJmZzZ19oc19idWxrX291dF9kZXNjLAorCU5VTEwsCit9OworCisvKiBN YXhwYWNrZXQgYW5kIG90aGVyIHRyYW5zZmVyIGNoYXJhY3RlcmlzdGljcyB2YXJ5IGJ5IHNwZWVk LiAqLworc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICoKK2ZzZ19lcF9kZXNjKHN0cnVj dCB1c2JfZ2FkZ2V0ICpnLCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmZzLAorCQlz dHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmhzKQoreworCWlmIChnYWRnZXRfaXNfZHVh bHNwZWVkKGcpICYmIGctPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQorCQlyZXR1cm4gaHM7CisJ cmV0dXJuIGZzOworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisvKgorICogSWYgdGhlIG5l eHQgdHdvIHJvdXRpbmVzIGFyZSBjYWxsZWQgd2hpbGUgdGhlIGdhZGdldCBpcyByZWdpc3RlcmVk LAorICogdGhlIGNhbGxlciBtdXN0IG93biBmc2ctPmZpbGVzZW0gZm9yIHdyaXRpbmcuCisgKi8K KworaW50IGZzZ19sdW5fb3BlbihzdHJ1Y3QgZnNnX2x1biAqY3VybHVuLCB1bnNpZ25lZCBpbnQg bnVtX3NlY3RvcnMsCisJCSBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKwlpbnQJCQkJcm87CisK KwkvKiBSL1cgaWYgd2UgY2FuLCBSL08gaWYgd2UgbXVzdCAqLworCXJvID0gY3VybHVuLT5pbml0 aWFsbHlfcm87CisKKwljdXJsdW4tPnJvID0gcm87CisJY3VybHVuLT5maWxlX2xlbmd0aCA9IG51 bV9zZWN0b3JzIDw8IDk7CisJY3VybHVuLT5udW1fc2VjdG9ycyA9IG51bV9zZWN0b3JzOworCWRl YnVnKCJvcGVuIGJhY2tpbmcgZmlsZTogJXNcbiIsIGZpbGVuYW1lKTsKKworCXJldHVybiAwOwor fQorCit2b2lkIGZzZ19sdW5fY2xvc2Uoc3RydWN0IGZzZ19sdW4gKmN1cmx1bikKK3sKK30KKwor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoKKyAqIFN5bmMgdGhlIGZpbGUgZGF0YSwgZG9uJ3Qg Ym90aGVyIHdpdGggdGhlIG1ldGFkYXRhLgorICogVGhpcyBjb2RlIHdhcyBjb3BpZWQgZnJvbSBm cy9idWZmZXIuYzpzeXNfZmRhdGFzeW5jKCkuCisgKi8KK2ludCBmc2dfbHVuX2ZzeW5jX3N1Yihz dHJ1Y3QgZnNnX2x1biAqY3VybHVuKQoreworCXJldHVybiAwOworfQorCit2b2lkIHN0b3JlX2Nk cm9tX2FkZHJlc3ModTggKmRlc3QsIGludCBtc2YsIHUzMiBhZGRyKQoreworCWlmIChtc2YpIHsK KwkJLyogQ29udmVydCB0byBNaW51dGVzLVNlY29uZHMtRnJhbWVzICovCisJCWFkZHIgPj49IDI7 CQkvKiBDb252ZXJ0IHRvIDIwNDgtYnl0ZSBmcmFtZXMgKi8KKwkJYWRkciArPSAyKjc1OwkJLyog TGVhZC1pbiBvY2N1cGllcyAyIHNlY29uZHMgKi8KKwkJZGVzdFszXSA9IGFkZHIgJSA3NTsJLyog RnJhbWVzICovCisJCWFkZHIgLz0gNzU7CisJCWRlc3RbMl0gPSBhZGRyICUgNjA7CS8qIFNlY29u ZHMgKi8KKwkJYWRkciAvPSA2MDsKKwkJZGVzdFsxXSA9IGFkZHI7CQkvKiBNaW51dGVzICovCisJ CWRlc3RbMF0gPSAwOwkJLyogUmVzZXJ2ZWQgKi8KKwl9IGVsc2UgeworCQkvKiBBYnNvbHV0ZSBz ZWN0b3IgKi8KKwkJcHV0X3VuYWxpZ25lZF9iZTMyKGFkZHIsIGRlc3QpOworCX0KK30KKworLyot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zdG9yYWdl X2NvbW1vbi5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3N0b3JhZ2VfY29tbW9uLmgKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jZTA3YTdkYWM3MmMKLS0tIC9kZXYvbnVs bAorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc3RvcmFnZV9jb21tb24uaApAQCAtMCwwICsxLDI0 NSBAQAorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KKworI2lmbmRlZiBV U0JfU1RPUkFHRV9DT01NT05fSAorI2RlZmluZSBVU0JfU1RPUkFHRV9DT01NT05fSAorCisjaW5j bHVkZSA8ZHJpdmVyLmg+CisjaW5jbHVkZSA8dXNiL3N0b3JhZ2UuaD4KKyNpbmNsdWRlIDxhc20v dW5hbGlnbmVkLmg+CisjaW5jbHVkZSA8dXNiL21hc3Nfc3RvcmFnZS5oPgorCisjaWZuZGVmIERF QlVHCisjdW5kZWYgVkVSQk9TRV9ERUJVRworI3VuZGVmIERVTVBfTVNHUworI2VuZGlmIC8qICFE RUJVRyAqLworCisjZGVmaW5lIFZMREJHKGx1biwgZm10LCBhcmdzLi4uKSAgZGV2X3ZkYmcoJihs dW4pLT5kZXYsIGZtdCwgIyMgYXJncykKKyNkZWZpbmUgTERCRyhsdW4sIGZtdCwgYXJncy4uLikg ICBkZXZfZGJnICgmKGx1biktPmRldiwgZm10LCAjIyBhcmdzKQorI2RlZmluZSBMRVJST1IobHVu LCBmbXQsIGFyZ3MuLi4pIGRldl9lcnIgKCYobHVuKS0+ZGV2LCBmbXQsICMjIGFyZ3MpCisjZGVm aW5lIExXQVJOKGx1biwgZm10LCBhcmdzLi4uKSAgZGV2X3dhcm4oJihsdW4pLT5kZXYsIGZtdCwg IyMgYXJncykKKyNkZWZpbmUgTElORk8obHVuLCBmbXQsIGFyZ3MuLi4pICBkZXZfaW5mbygmKGx1 biktPmRldiwgZm10LCAjIyBhcmdzKQorCisvKgorICogS2VlcCB0aG9zZSBtYWNyb3MgaW4gc3lu YyB3aXRoIHRob3NlIGluCisgKiBpbmNsdWRlL2xpbnV4L3VzYi9jb21wb3NpdGUuaCBvciBlbHNl IEdDQyB3aWxsIGNvbXBsYWluLiAgSWYgdGhleQorICogYXJlIGlkZW50aWNhbCAodGhlIHNhbWUg bmFtZXMgb2YgYXJndW1lbnRzLCB3aGl0ZSBzcGFjZXMgaW4gdGhlCisgKiBzYW1lIHBsYWNlcykg R0NDIHdpbGwgYWxsb3cgcmVkZWZpbml0aW9uIG90aGVyd2lzZSAoZXZlbiBpZiBzb21lCisgKiB3 aGl0ZSBzcGFjZSBpcyByZW1vdmVkIG9yIGFkZGVkKSB3YXJuaW5nIHdpbGwgYmUgaXNzdWVkLgor ICoKKyAqIFRob3NlIG1hY3JvcyBhcmUgbmVlZGVkIGhlcmUgYmVjYXVzZSBGaWxlIFN0b3JhZ2Ug R2FkZ2V0IGRvZXMgbm90CisgKiBpbmNsdWRlIHRoZSBjb21wb3NpdGUuaCBoZWFkZXIuICBGb3Ig Y29tcG9zaXRlIGdhZGdldHMgdGhvc2UgbWFjcm9zCisgKiBhcmUgcmVkdW5kYW50IHNpbmNlIGNv bXBvc2l0ZS5oIGlzIGluY2x1ZGVkIGFueSB3YXkuCisgKgorICogT25lIGNvdWxkIGNoZWNrIHdo ZXRoZXIgdGhvc2UgbWFjcm9zIGFyZSBhbHJlYWR5IGRlZmluZWQgKHdoaWNoCisgKiB3b3VsZCBp bmRpY2F0ZSBjb21wb3NpdGUuaCBoYWQgYmVlbiBpbmNsdWRlZCkgb3Igbm90ICh3aGljaCB3b3Vs ZAorICogaW5kaWNhdGUgd2Ugd2VyZSBpbiBGU0cpIGJ1dCB0aGlzIGlzIG5vdCBkb25lIGJlY2F1 c2UgYSB3YXJuaW5nIGlzCisgKiBkZXNpcmVkIGlmIGRlZmluaXRpb25zIGhlcmUgZGlmZmVyIGZy b20gdGhlIG9uZXMgaW4gY29tcG9zaXRlLmguCisgKgorICogV2Ugd2FudCB0aGUgZGVmaW5pdGlv bnMgdG8gbWF0Y2ggYW5kIGJlIHRoZSBzYW1lIGluIEZpbGUgU3RvcmFnZQorICogR2FkZ2V0IGFz IHdlbGwgYXMgTWFzcyBTdG9yYWdlIEZ1bmN0aW9uIChhbmQgc28gY29tcG9zaXRlIGdhZGdldHMK KyAqIHVzaW5nIE1TRikuICBJZiBzb21lb25lIGNoYW5nZXMgdGhlbSBpbiBjb21wb3NpdGUuaCBp dCB3aWxsIHByb2R1Y2UKKyAqIGEgd2FybmluZyBpbiB0aGlzIGZpbGUgd2hlbiBidWlsZGluZyBN U0YuCisgKi8KKworI2RlZmluZSBEQkcoZCwgZm10LCBhcmdzLi4uKSBcCisJZGV2X2RiZygmKGQp LT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIFZEQkcoZCwgZm10LCBhcmdz Li4uKSBcCisJZGV2X3ZkYmcoJihkKS0+Z2FkZ2V0LT5kZXYgLCBmbXQgLCAjIyBhcmdzKQorI2Rl ZmluZSBFUlJPUihkLCBmbXQsIGFyZ3MuLi4pIFwKKwlkZXZfZXJyKCYoZCktPmdhZGdldC0+ZGV2 ICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgV0FSTklORyhkLCBmbXQsIGFyZ3MuLi4pIFwKKwlk ZXZfd2FybigmKGQpLT5nYWRnZXQtPmRldiAsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElORk8o ZCwgZm10LCBhcmdzLi4uKSBcCisJZGV2X2luZm8oJihkKS0+Z2FkZ2V0LT5kZXYgLCBmbXQgLCAj IyBhcmdzKQorCisjaWZkZWYgRFVNUF9NU0dTCisKKy8qIGR1bXBfbXNnKGZzZywgY29uc3QgY2hh ciAqIGxhYmVsLCBjb25zdCB1OCAqIGJ1ZiwgdW5zaWduZWQgbGVuZ3RoKTsgKi8KKyMgZGVmaW5l IGR1bXBfbXNnKGZzZywgbGFiZWwsIGJ1ZiwgbGVuZ3RoKSBkbyB7ICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKwlpZiAobGVuZ3RoIDwgNTEyKSB7CQkJCQkJXAorCQlEQkcoZnNnLCAiJXMsIGxl bmd0aCAldTpcbiIsIGxhYmVsLCBsZW5ndGgpOwkJXAorCQlwcmludF9oZXhfZHVtcCgiIiwgRFVN UF9QUkVGSVhfT0ZGU0VULAlcCisJCQkgICAgICAgMTYsIDEsIGJ1ZiwgbGVuZ3RoLCAwKTsJCQlc CisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworIyAgZGVmaW5lIGR1bXBfY2RiKGZzZykgZG8g eyB9IHdoaWxlICgwKQorCisjZWxzZQorCisjICBkZWZpbmUgZHVtcF9tc2coZnNnLCAvKiBjb25z dCBjaGFyICogKi8gbGFiZWwsIFwKKwkJICAgLyogY29uc3QgdTggKiAqLyBidWYsIC8qIHVuc2ln bmVkICovIGxlbmd0aCkgZG8geyB9IHdoaWxlICgwKQorCisjICBpZmRlZiBWRVJCT1NFX0RFQlVH CisKKyMgICAgZGVmaW5lIGR1bXBfY2RiKGZzZykJCQkJCQlcCisJcHJpbnRfaGV4X2R1bXAoIlND U0kgQ0RCOiAiLCBEVU1QX1BSRUZJWF9OT05FLAlcCisJCSAgICAgICAxNiwgMSwgKGZzZyktPmNt bmQsIChmc2cpLT5jbW5kX3NpemUsIDApCQlcCisKKyMgIGVsc2UKKworIyAgICBkZWZpbmUgZHVt cF9jZGIoZnNnKSBkbyB7IH0gd2hpbGUgKDApCisKKyMgIGVuZGlmIC8qIFZFUkJPU0VfREVCVUcg Ki8KKworI2VuZGlmIC8qIERVTVBfTVNHUyAqLworCisvKgorICogVGhhbmtzIHRvIE5ldENoaXAg VGVjaG5vbG9naWVzIGZvciBkb25hdGluZyB0aGlzIHByb2R1Y3QgSUQuCisgKgorICogRE8gTk9U IFJFVVNFIFRIRVNFIElEcyB3aXRoIGFueSBvdGhlciBkcml2ZXIhISAgRXZlciEhCisgKiBJbnN0 ZWFkOiAgYWxsb2NhdGUgeW91ciBvd24sIHVzaW5nIG5vcm1hbCBVU0ItSUYgcHJvY2VkdXJlcy4K KyAqLworCisjZGVmaW5lIEZTR19WRU5ET1JfSUQJMHgwNTI1CS8qIE5ldENoaXAgKi8KKyNkZWZp bmUgRlNHX1BST0RVQ1RfSUQJMHhhNGE1CS8qIExpbnV4LVVTQiBGaWxlLWJhY2tlZCBTdG9yYWdl IEdhZGdldCAqLworCisvKiBMZW5ndGggb2YgYSBTQ1NJIENvbW1hbmQgRGF0YSBCbG9jayAqLwor I2RlZmluZSBNQVhfQ09NTUFORF9TSVpFCTE2CisKKy8qIFNDU0kgU2Vuc2UgS2V5L0FkZGl0aW9u YWwgU2Vuc2UgQ29kZS9BU0MgUXVhbGlmaWVyIHZhbHVlcyAqLworI2RlZmluZSBTU19OT19TRU5T RQkJCQkwCisjZGVmaW5lIFNTX0NPTU1VTklDQVRJT05fRkFJTFVSRQkJMHgwNDA4MDAKKyNkZWZp bmUgU1NfSU5WQUxJRF9DT01NQU5ECQkJMHgwNTIwMDAKKyNkZWZpbmUgU1NfSU5WQUxJRF9GSUVM RF9JTl9DREIJCQkweDA1MjQwMAorI2RlZmluZSBTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VU X09GX1JBTkdFCTB4MDUyMTAwCisjZGVmaW5lIFNTX0xPR0lDQUxfVU5JVF9OT1RfU1VQUE9SVEVE CQkweDA1MjUwMAorI2RlZmluZSBTU19NRURJVU1fTk9UX1BSRVNFTlQJCQkweDAyM2EwMAorI2Rl ZmluZSBTU19NRURJVU1fUkVNT1ZBTF9QUkVWRU5URUQJCTB4MDU1MzAyCisjZGVmaW5lIFNTX05P VF9SRUFEWV9UT19SRUFEWV9UUkFOU0lUSU9OCTB4MDYyODAwCisjZGVmaW5lIFNTX1JFU0VUX09D Q1VSUkVECQkJMHgwNjI5MDAKKyNkZWZpbmUgU1NfU0FWSU5HX1BBUkFNRVRFUlNfTk9UX1NVUFBP UlRFRAkweDA1MzkwMAorI2RlZmluZSBTU19VTlJFQ09WRVJFRF9SRUFEX0VSUk9SCQkweDAzMTEw MAorI2RlZmluZSBTU19XUklURV9FUlJPUgkJCQkweDAzMGMwMgorI2RlZmluZSBTU19XUklURV9Q Uk9URUNURUQJCQkweDA3MjcwMAorCisjZGVmaW5lIFNLKHgpCQkoKHU4KSAoKHgpID4+IDE2KSkJ LyogU2Vuc2UgS2V5IGJ5dGUsIGV0Yy4gKi8KKyNkZWZpbmUgQVNDKHgpCQkoKHU4KSAoKHgpID4+ IDgpKQorI2RlZmluZSBBU0NRKHgpCQkoKHU4KSAoeCkpCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov CisKK3N0cnVjdCBmc2dfbHVuIHsKKwlsb2ZmX3QJCWZpbGVfbGVuZ3RoOworCWxvZmZfdAkJbnVt X3NlY3RvcnM7CisKKwl1bnNpZ25lZCBpbnQJaW5pdGlhbGx5X3JvOjE7CisJdW5zaWduZWQgaW50 CXJvOjE7CisJdW5zaWduZWQgaW50CXJlbW92YWJsZToxOworCXVuc2lnbmVkIGludAljZHJvbTox OworCXVuc2lnbmVkIGludAlwcmV2ZW50X21lZGl1bV9yZW1vdmFsOjE7CisJdW5zaWduZWQgaW50 CXJlZ2lzdGVyZWQ6MTsKKwl1bnNpZ25lZCBpbnQJaW5mb192YWxpZDoxOworCXVuc2lnbmVkIGlu dAlub2Z1YToxOworCisJdTMyCQlzZW5zZV9kYXRhOworCXUzMgkJc2Vuc2VfZGF0YV9pbmZvOwor CXUzMgkJdW5pdF9hdHRlbnRpb25fZGF0YTsKKworCXN0cnVjdCBkZXZpY2VfZAlkZXY7Cit9Owor CisjZGVmaW5lIGZzZ19sdW5faXNfb3BlbihjdXJsdW4pCSgoY3VybHVuKS0+ZmlscCAhPSBOVUxM KQorCisvKiBCaWcgZW5vdWdoIHRvIGhvbGQgb3VyIGJpZ2dlc3QgZGVzY3JpcHRvciAqLworI2Rl ZmluZSBFUDBfQlVGU0laRQkyNTYKKyNkZWZpbmUgREVMQVlFRF9TVEFUVVMJKEVQMF9CVUZTSVpF ICsgOTk5KQkvKiBBbiBpbXBvc3NpYmx5IGxhcmdlIHZhbHVlICovCisKKy8qIE51bWJlciBvZiBi dWZmZXJzIHdlIHdpbGwgdXNlLiAgMiBpcyBlbm91Z2ggZm9yIGRvdWJsZS1idWZmZXJpbmcgKi8K KyNkZWZpbmUgRlNHX05VTV9CVUZGRVJTCTIKKworLyogRGVmYXVsdCBzaXplIG9mIGJ1ZmZlciBs ZW5ndGguICovCisjZGVmaW5lIEZTR19CVUZMRU4JKCh1MzIpMTMxMDcyKQorCisvKiBNYXhpbWFs IG51bWJlciBvZiBMVU5zIHN1cHBvcnRlZCBpbiBtYXNzIHN0b3JhZ2UgZnVuY3Rpb24gKi8KKyNk ZWZpbmUgRlNHX01BWF9MVU5TCTgKKworZW51bSBmc2dfYnVmZmVyX3N0YXRlIHsKKwlCVUZfU1RB VEVfRU1QVFkgPSAwLAorCUJVRl9TVEFURV9GVUxMLAorCUJVRl9TVEFURV9CVVNZCit9OworCisv KgorICogV2hlbiBGU0dfQlVGRkhEX1NUQVRJQ19CVUZGRVIgaXMgZGVmaW5lZCB3aGVuIHRoaXMg ZmlsZSBpcyBpbmNsdWRlZAorICogdGhlIGZzZ19idWZmaGQgc3RydWN0dXJlJ3MgYnVmIGZpZWxk IHdpbGwgYmUgYW4gYXJyYXkgb2YgRlNHX0JVRkxFTgorICogY2hhcmFjdGVycyByYXRoZXIgdGhl biBhIHBvaW50ZXIgdG8gdm9pZC4KKyAqLworCitzdHJ1Y3QgZnNnX2J1ZmZoZCB7CisJdm9pZAkJ CQkqYnVmOworCWVudW0gZnNnX2J1ZmZlcl9zdGF0ZQkJc3RhdGU7CisJc3RydWN0IGZzZ19idWZm aGQJCSpuZXh0OworCisJLyoKKwkgKiBUaGUgTmV0Q2hpcCAyMjgwIGlzIGZhc3RlciwgYW5kIGhh bmRsZXMgc29tZSBwcm90b2NvbCBmYXVsdHMKKwkgKiBiZXR0ZXIsIGlmIHdlIGRvbid0IHN1Ym1p dCBhbnkgc2hvcnQgYnVsay1vdXQgcmVhZCByZXF1ZXN0cy4KKwkgKiBTbyB3ZSB3aWxsIHJlY29y ZCB0aGUgaW50ZW5kZWQgcmVxdWVzdCBsZW5ndGggaGVyZS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQJ CQlidWxrX291dF9pbnRlbmRlZF9sZW5ndGg7CisKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSppbnJl cTsKKwlpbnQJCQkJaW5yZXFfYnVzeTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJCSpvdXRyZXE7CisJ aW50CQkJCW91dHJlcV9idXN5OworfTsKKworZW51bSBmc2dfc3RhdGUgeworCS8qIFRoaXMgb25l IGlzbid0IHVzZWQgYW55d2hlcmUgKi8KKwlGU0dfU1RBVEVfQ09NTUFORF9QSEFTRSA9IC0xMCwK KwlGU0dfU1RBVEVfREFUQV9QSEFTRSwKKwlGU0dfU1RBVEVfU1RBVFVTX1BIQVNFLAorCisJRlNH X1NUQVRFX0lETEUgPSAwLAorCUZTR19TVEFURV9BQk9SVF9CVUxLX09VVCwKKwlGU0dfU1RBVEVf UkVTRVQsCisJRlNHX1NUQVRFX0lOVEVSRkFDRV9DSEFOR0UsCisJRlNHX1NUQVRFX0NPTkZJR19D SEFOR0UsCisJRlNHX1NUQVRFX0RJU0NPTk5FQ1QsCisJRlNHX1NUQVRFX0VYSVQsCisJRlNHX1NU QVRFX1RFUk1JTkFURUQKK307CisKK2VudW0gZGF0YV9kaXJlY3Rpb24geworCURBVEFfRElSX1VO S05PV04gPSAwLAorCURBVEFfRElSX0ZST01fSE9TVCwKKwlEQVRBX0RJUl9UT19IT1NULAorCURB VEFfRElSX05PTkUKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbmxpbmUg dTMyIGdldF91bmFsaWduZWRfYmUyNCh1OCAqYnVmKQoreworCXJldHVybiAweGZmZmZmZiAmICh1 MzIpIGdldF91bmFsaWduZWRfYmUzMihidWYgLSAxKTsKK30KKworLyotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ki8KKworZW51bSB7CisJRlNHX1NUUklOR19JTlRFUkZBQ0UKK307CisKKy8qLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCisKK2V4dGVybiBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGZzZ19pbnRm X2Rlc2M7CisKK2V4dGVybiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNnX2ZzX2J1 bGtfaW5fZGVzYzsKK2V4dGVybiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgZnNnX2Zz X2J1bGtfb3V0X2Rlc2M7CitleHRlcm4gc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqZnNn X2ZzX2Z1bmN0aW9uW107CisKK2V4dGVybiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3Ig ZnNnX2hzX2J1bGtfaW5fZGVzYzsKK2V4dGVybiBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0 b3IgZnNnX2hzX2J1bGtfb3V0X2Rlc2M7CitleHRlcm4gc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hl YWRlciAqZnNnX2hzX2Z1bmN0aW9uW107CisKK2ludCBmc2dfbHVuX29wZW4oc3RydWN0IGZzZ19s dW4gKmN1cmx1biwgdW5zaWduZWQgaW50IG51bV9zZWN0b3JzLAorCQkgY29uc3QgY2hhciAqZmls ZW5hbWUpOwordm9pZCBmc2dfbHVuX2Nsb3NlKHN0cnVjdCBmc2dfbHVuICpjdXJsdW4pOworCitz dHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKgorZnNnX2VwX2Rlc2Moc3RydWN0IHVzYl9n YWRnZXQgKmcsIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZnMsCisJCXN0cnVjdCB1 c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqaHMpOworaW50IGZzZ19sdW5fZnN5bmNfc3ViKHN0cnVj dCBmc2dfbHVuICpjdXJsdW4pOwordm9pZCBzdG9yZV9jZHJvbV9hZGRyZXNzKHU4ICpkZXN0LCBp bnQgbXNmLCB1MzIgYWRkcik7CisKKyNlbmRpZiAvKiBVU0JfU1RPUkFHRV9DT01NT05fSCAqLwpk aWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpLmggYi9pbmNsdWRlL3Njc2kuaAppbmRleCBmODQ1MTNi ODEzZTkuLjIzZmM3YWJiYWY0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zY3NpLmgKKysrIGIvaW5j bHVkZS9zY3NpLmgKQEAgLTEwOSwxMiArMTA5LDE1IEBACiAjZGVmaW5lIFNDU0lfTUVEX1JFTU9W TAkweDFFCQkvKiBQcmV2ZW50L0FsbG93IG1lZGl1bSBSZW1vdmFsIChPKSAqLwogI2RlZmluZSBT Q1NJX1JFQUQ2CTB4MDgJCS8qIFJlYWQgNi1ieXRlIChNQU5EQVRPUlkpICovCiAjZGVmaW5lIFND U0lfUkVBRDEwCTB4MjgJCS8qIFJlYWQgMTAtYnl0ZSAoTUFOREFUT1JZKSAqLworI2RlZmluZSBT Q1NJX1JFQUQxMgkweEE4CQkvKiBSZWFkIDEyLWJ5dGUgKE8pICovCiAjZGVmaW5lIFNDU0lfUkVB RDE2CTB4ODgJCS8qIFJlYWQgMTYtYnl0ZSAoTykgKi8KICNkZWZpbmUgU0NTSV9SRF9DQVBBQwkw eDI1CQkvKiBSZWFkIENhcGFjaXR5IChNQU5EQVRPUlkpICovCisjZGVmaW5lIFNDU0lfUkRfRk1U X0NBUEFDCTB4MjMKICNkZWZpbmUgU0NTSV9SRF9ERUZFQ1QJMHgzNwkJLyogUmVhZCBEZWZlY3Qg RGF0YSAoTykgKi8KICNkZWZpbmUgU0NTSV9SRUFEX0xPTkcJMHgzRQkJLyogUmVhZCBMb25nIChP KSAqLwogI2RlZmluZSBTQ1NJX1JFQVNTX0JMSwkweDA3CQkvKiBSZWFzc2lnbiBCbG9ja3MgKE8p ICovCiAjZGVmaW5lIFNDU0lfUkNWX0RJQUcJMHgxQwkJLyogUmVjZWl2ZSBEaWFnbm9zdGljIFJl c3VsdHMgKE8pICovCisjZGVmaW5lIFNDU0lfUkVTRVJWRQkweDE2CiAjZGVmaW5lIFNDU0lfUkVM RUFTRQkweDE3CQkvKiBSZWxlYXNlIFVuaXQgKE1BTkRBVE9SWSkgKi8KICNkZWZpbmUgU0NTSV9S RVpFUk8JMHgwMQkJLyogUmV6ZXJvIFVuaXQgKE8pICovCiAjZGVmaW5lIFNDU0lfU1JDSF9EQVRf RQkweDMxCQkvKiBTZWFyY2ggRGF0YSBFcXVhbCAoTykgKi8KQEAgLTEyOSwxMCArMTMyLDEzIEBA CiAjZGVmaW5lIFNDU0lfVkVSSUZZCTB4MkYJCS8qIFZlcmlmeSAoTykgKi8KICNkZWZpbmUgU0NT SV9XUklURTYJMHgwQQkJLyogV3JpdGUgNi1CeXRlIChNQU5EQVRPUlkpICovCiAjZGVmaW5lIFND U0lfV1JJVEUxMAkweDJBCQkvKiBXcml0ZSAxMC1CeXRlIChNQU5EQVRPUlkpICovCisjZGVmaW5l IFNDU0lfV1JJVEUxMgkweEFBCQkvKiBXcml0ZSAxMi1CeXRlIChPKSAqLwogI2RlZmluZSBTQ1NJ X1dSSVRFMTYJMHg4QQkJLyogV3JpdGUgMTYtQnl0ZSAoTykgKi8KICNkZWZpbmUgU0NTSV9XUlRf VkVSSUZZCTB4MkUJCS8qIFdyaXRlIGFuZCBWZXJpZnkgKE8pICovCiAjZGVmaW5lIFNDU0lfV1JJ VEVfTE9ORwkweDNGCQkvKiBXcml0ZSBMb25nIChPKSAqLwogI2RlZmluZSBTQ1NJX1dSSVRFX1NB TUUJMHg0MQkJLyogV3JpdGUgU2FtZSAoTykgKi8KKyNkZWZpbmUgU0NTSV9SRF9UT0MJMHg0Mwor I2RlZmluZSBTQ1NJX1JEX0hFQURFUgkweDQ0CiAKICNkZWZpbmUgU0VSVklDRV9BQ1RJT05fSU5f MTYJMHg5ZQogLyogdmFsdWVzIGZvciBzZXJ2aWNlIGFjdGlvbiBpbiAqLwpAQCAtMTcwLDQgKzE3 NiwxMCBAQCB2b2lkIHNjc2lfaW5pdCh2b2lkKTsKICNkZWZpbmUgRkFMU0UgMAogI2VuZGlmCiAK Ky8qCisgKiAgREVWSUNFIFRZUEVTCisgKi8KKworI2RlZmluZSBUWVBFX0RJU0sgICAgICAgICAg IDB4MDAKKwogI2VuZGlmIC8qIF9TQ1NJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNiL2dh ZGdldC1tdWx0aS5oIGIvaW5jbHVkZS91c2IvZ2FkZ2V0LW11bHRpLmgKaW5kZXggNDgyYWVlMTFk MDQ3Li43OWIyNGNhNGRmNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdXNiL2dhZGdldC1tdWx0aS5o CisrKyBiL2luY2x1ZGUvdXNiL2dhZGdldC1tdWx0aS5oCkBAIC00LDEwICs0LDEyIEBACiAjaW5j bHVkZSA8dXNiL2Zhc3Rib290Lmg+CiAjaW5jbHVkZSA8dXNiL2RmdS5oPgogI2luY2x1ZGUgPHVz Yi91c2JzZXJpYWwuaD4KKyNpbmNsdWRlIDx1c2IvbWFzc19zdG9yYWdlLmg+CiAKIHN0cnVjdCBm X211bHRpX29wdHMgewogCXN0cnVjdCBmYXN0Ym9vdF9vcHRzIGZhc3Rib290X29wdHM7CiAJc3Ry dWN0IGZfZGZ1X29wdHMgZGZ1X29wdHM7CisJc3RydWN0IGZfdW1zX29wdHMgdW1zX29wdHM7CiAJ Ym9vbCBjcmVhdGVfYWNtOwogCXZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZl9tdWx0aV9vcHRzICpv cHRzKTsKIH07CkBAIC0yMSwxMSArMjMsMTMgQEAgdW5zaWduZWQgdXNiX211bHRpX2NvdW50X2Z1 bmN0aW9ucyhzdHJ1Y3QgZl9tdWx0aV9vcHRzICpvcHRzKTsKICNkZWZpbmUgVVNCR0FER0VUX0FD TQkJKDEgPDwgMSkKICNkZWZpbmUgVVNCR0FER0VUX0RGVQkJKDEgPDwgMikKICNkZWZpbmUgVVNC R0FER0VUX0ZBU1RCT09UCSgxIDw8IDMpCisjZGVmaW5lIFVTQkdBREdFVF9NQVNTX1NUT1JBR0UJ KDEgPDwgNCkKIAogc3RydWN0IHVzYmdhZGdldF9mdW5jcyB7CiAJaW50IGZsYWdzOwogCWNvbnN0 IGNoYXIgKmZhc3Rib290X29wdHM7CiAJY29uc3QgY2hhciAqZGZ1X29wdHM7CisJY29uc3QgY2hh ciAqdW1zX29wdHM7CiB9OwogCiBpbnQgdXNiZ2FkZ2V0X3JlZ2lzdGVyKGNvbnN0IHN0cnVjdCB1 c2JnYWRnZXRfZnVuY3MgKmZ1bmNzKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNiL21hc3Nfc3Rv cmFnZS5oIGIvaW5jbHVkZS91c2IvbWFzc19zdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi4wODRiM2M4ZThmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNs dWRlL3VzYi9tYXNzX3N0b3JhZ2UuaApAQCAtMCwwICsxLDI4IEBACisvKiBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMCsgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgU2Ftc3Vu ZyBFbGVjdHJub2ljcworICogTHVrYXN6IE1hamV3c2tpIDxsLm1hamV3c2tpQHNhbXN1bmcuY29t PgorICovCisKKyNpZm5kZWYgX19VU0JfTUFTU19TVE9SQUdFX0hfXworI2RlZmluZSBfX1VTQl9N QVNTX1NUT1JBR0VfSF9fCisKKyNpbmNsdWRlIDx1c2IvY29tcG9zaXRlLmg+CisKKy8qIFdhaXQg YXQgbWF4aW11bSA2MCBzZWNvbmRzIGZvciBjYWJsZSBjb25uZWN0aW9uICovCisjZGVmaW5lIFVN U19DQUJMRV9SRUFEWV9USU1FT1VUCTYwCisKK3N0cnVjdCBmc2dfY29tbW9uOworCitzdHJ1Y3Qg Zl91bXNfb3B0cyB7CisJc3RydWN0IHVzYl9mdW5jdGlvbl9pbnN0YW5jZSBmdW5jX2luc3Q7CisJ c3RydWN0IGZzZ19jb21tb24gKmNvbW1vbjsKKwlzdHJ1Y3QgZmlsZV9saXN0ICpmaWxlczsKKwl1 bnNpZ25lZCBpbnQgbnVtX3NlY3RvcnM7CisJaW50IGZkOworCWNoYXIgbmFtZVsxNl07Cit9Owor CitpbnQgdXNiX3Vtc19yZWdpc3RlcihzdHJ1Y3QgZl91bXNfb3B0cyAqKTsKKworI2VuZGlmIC8q IF9fVVNCX01BU1NfU1RPUkFHRV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdXNiL3N0b3Jh Z2UuaCBiL2luY2x1ZGUvdXNiL3N0b3JhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLmUwMjQwZjg2NDU0OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvdXNi L3N0b3JhZ2UuaApAQCAtMCwwICsxLDg3IEBACisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMAorI2lmbmRlZiBfX0xJTlVYX1VTQl9TVE9SQUdFX0gKKyNkZWZpbmUgX19MSU5VWF9V U0JfU1RPUkFHRV9ICisKKy8qCisgKiBsaW51eC91c2Ivc3RvcmFnZS5oCisgKgorICogQ29weXJp Z2h0IE1hdHRoZXcgV2lsY294IGZvciBJbnRlbCBDb3JwLCAyMDEwCisgKgorICogVGhpcyBmaWxl IGNvbnRhaW5zIGRlZmluaXRpb25zIHRha2VuIGZyb20gdGhlCisgKiBVU0IgTWFzcyBTdG9yYWdl IENsYXNzIFNwZWNpZmljYXRpb24gT3ZlcnZpZXcKKyAqCisgKiBEaXN0cmlidXRlZCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gdHdvLgorICovCisKKy8qIFN0b3JhZ2Ug c3ViY2xhc3MgY29kZXMgKi8KKworI2RlZmluZSBVU0JfU0NfUkJDCTB4MDEJCS8qIFR5cGljYWxs eSwgZmxhc2ggZGV2aWNlcyAqLworI2RlZmluZSBVU0JfU0NfODAyMAkweDAyCQkvKiBDRC1ST00g Ki8KKyNkZWZpbmUgVVNCX1NDX1FJQwkweDAzCQkvKiBRSUMtMTU3IFRhcGVzICovCisjZGVmaW5l IFVTQl9TQ19VRkkJMHgwNAkJLyogRmxvcHB5ICovCisjZGVmaW5lIFVTQl9TQ184MDcwCTB4MDUJ CS8qIFJlbW92YWJsZSBtZWRpYSAqLworI2RlZmluZSBVU0JfU0NfU0NTSQkweDA2CQkvKiBUcmFu c3BhcmVudCAqLworI2RlZmluZSBVU0JfU0NfTE9DS0FCTEUJMHgwNwkJLyogUGFzc3dvcmQtcHJv dGVjdGVkICovCisKKyNkZWZpbmUgVVNCX1NDX0lTRDIwMAkweGYwCQkvKiBJU0QyMDAgQVRBICov CisjZGVmaW5lIFVTQl9TQ19DWVBfQVRBQ0IJMHhmMQkvKiBDeXByZXNzIEFUQUNCICovCisjZGVm aW5lIFVTQl9TQ19ERVZJQ0UJMHhmZgkJLyogVXNlIGRldmljZSdzIHZhbHVlICovCisKKy8qIFN0 b3JhZ2UgcHJvdG9jb2wgY29kZXMgKi8KKworI2RlZmluZSBVU0JfUFJfQ0JJCTB4MDAJCS8qIENv bnRyb2wvQnVsay9JbnRlcnJ1cHQgKi8KKyNkZWZpbmUgVVNCX1BSX0NCCTB4MDEJCS8qIENvbnRy b2wvQnVsayB3L28gaW50ZXJydXB0ICovCisjZGVmaW5lIFVTQl9QUl9CVUxLCTB4NTAJCS8qIGJ1 bGsgb25seSAqLworI2RlZmluZSBVU0JfUFJfVUFTCTB4NjIJCS8qIFVTQiBBdHRhY2hlZCBTQ1NJ ICovCisKKyNkZWZpbmUgVVNCX1BSX1VTQkFUCTB4ODAJCS8qIFNDTS1BVEFQSSBicmlkZ2UgKi8K KyNkZWZpbmUgVVNCX1BSX0VVU0JfU0REUjA5CTB4ODEJLyogU0NNLVNDU0kgYnJpZGdlIGZvciBT RERSLTA5ICovCisjZGVmaW5lIFVTQl9QUl9TRERSNTUJMHg4MgkJLyogU0REUi01NSAobWFkZSB1 cCkgKi8KKyNkZWZpbmUgVVNCX1BSX0RQQ01fVVNCCTB4ZjAJCS8qIENvbWJpbmF0aW9uIENCL1NE RFIwOSAqLworI2RlZmluZSBVU0JfUFJfRlJFRUNPTQkweGYxCQkvKiBGcmVlY29tICovCisjZGVm aW5lIFVTQl9QUl9EQVRBRkFCCTB4ZjIJCS8qIERhdGFmYWIgY2hpcHNldHMgKi8KKyNkZWZpbmUg VVNCX1BSX0pVTVBTSE9UCTB4ZjMJCS8qIExleGFyIEp1bXBzaG90ICovCisjZGVmaW5lIFVTQl9Q Ul9BTEFVREEJMHhmNAkJLyogQWxhdWRhIGNoaXBzZXRzICovCisjZGVmaW5lIFVTQl9QUl9LQVJN QQkweGY1CQkvKiBSaW8gS2FybWEgKi8KKworI2RlZmluZSBVU0JfUFJfREVWSUNFCTB4ZmYJCS8q IFVzZSBkZXZpY2UncyB2YWx1ZSAqLworCisvKgorICogQnVsayBvbmx5IGRhdGEgc3RydWN0dXJl cworICovCisKKy8qIGNvbW1hbmQgYmxvY2sgd3JhcHBlciAqLworc3RydWN0IGJ1bGtfY2Jfd3Jh cCB7CisJX19sZTMyCVNpZ25hdHVyZTsJCS8qIGNvbnRhaW5zICdVU0JDJyAqLworCV9fdTMyCVRh ZzsJCQkvKiB1bmlxdWUgcGVyIGNvbW1hbmQgaWQgKi8KKwlfX2xlMzIJRGF0YVRyYW5zZmVyTGVu Z3RoOwkvKiBzaXplIG9mIGRhdGEgKi8KKwlfX3U4CUZsYWdzOwkJCS8qIGRpcmVjdGlvbiBpbiBi aXQgMCAqLworCV9fdTgJTHVuOwkJCS8qIExVTiBub3JtYWxseSAwICovCisJX191OAlMZW5ndGg7 CQkJLyogbGVuZ3RoIG9mIHRoZSBDREIgKi8KKwlfX3U4CUNEQlsxNl07CQkvKiBtYXggY29tbWFu ZCAqLworfTsKKworI2RlZmluZSBVU19CVUxLX0NCX1dSQVBfTEVOCTMxCisjZGVmaW5lIFVTX0JV TEtfQ0JfU0lHTgkJMHg0MzQyNTM1NQkvKiBzcGVsbHMgb3V0ICdVU0JDJyAqLworI2RlZmluZSBV U19CVUxLX0ZMQUdfSU4JCSgxIDw8IDcpCisjZGVmaW5lIFVTX0JVTEtfRkxBR19PVVQJMAorCisv KiBjb21tYW5kIHN0YXR1cyB3cmFwcGVyICovCitzdHJ1Y3QgYnVsa19jc193cmFwIHsKKwlfX2xl MzIJU2lnbmF0dXJlOwkvKiBjb250YWlucyAnVVNCUycgKi8KKwlfX3UzMglUYWc7CQkvKiBzYW1l IGFzIG9yaWdpbmFsIGNvbW1hbmQgKi8KKwlfX2xlMzIJUmVzaWR1ZTsJLyogYW1vdW50IG5vdCB0 cmFuc2ZlcnJlZCAqLworCV9fdTgJU3RhdHVzOwkJLyogc2VlIGJlbG93ICovCit9OworCisjZGVm aW5lIFVTX0JVTEtfQ1NfV1JBUF9MRU4JMTMKKyNkZWZpbmUgVVNfQlVMS19DU19TSUdOCQkweDUz NDI1MzU1ICAgICAgLyogc3BlbGxzIG91dCAnVVNCUycgKi8KKyNkZWZpbmUgVVNfQlVMS19TVEFU X09LCQkwCisjZGVmaW5lIFVTX0JVTEtfU1RBVF9GQUlMCTEKKyNkZWZpbmUgVVNfQlVMS19TVEFU X1BIQVNFCTIKKworLyogYnVsay1vbmx5IGNsYXNzIHNwZWNpZmljIHJlcXVlc3RzICovCisjZGVm aW5lIFVTX0JVTEtfUkVTRVRfUkVRVUVTVCAgIDB4ZmYKKyNkZWZpbmUgVVNfQlVMS19HRVRfTUFY X0xVTiAgICAgMHhmZQorCisjZW5kaWYKLS0gCjIuMjkuMgoKCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCmJhcmVib3ggbWFpbGluZyBsaXN0CmJhcmVib3hA bGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2JhcmVib3gK