From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 106779 invoked by alias); 23 Nov 2016 11:52:20 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 106653 invoked by uid 89); 23 Nov 2016 11:52:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=BAYES_50,KAM_LOTSOFHASH,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=td, ta, tc, get_mode X-HELO: foss.arm.com Received: from foss.arm.com (HELO foss.arm.com) (217.140.101.70) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 23 Nov 2016 11:52:08 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 9257BC14; Wed, 23 Nov 2016 03:52:06 -0800 (PST) Received: from [10.2.206.251] (e107157-lin.cambridge.arm.com [10.2.206.251]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D04363F24D; Wed, 23 Nov 2016 03:52:05 -0800 (PST) Subject: Re: [PATCHv2 4/7, GCC, ARM, V8M] ARMv8-M Security Extension's cmse_nonsecure_entry: clear registers To: Kyrill Tkachov , gcc-patches@gcc.gnu.org References: <5796116C.6010100@arm.com> <579612EE.3050606@arm.com> <57BD7E8B.4000108@arm.com> <580F885D.6030107@arm.com> <5810A6D0.7000808@foss.arm.com> <5810D91E.3060008@arm.com> <5810DA18.3010404@foss.arm.com> <5811D039.2030401@arm.com> <5811DA7E.10905@foss.arm.com> <581377D8.90302@arm.com> <5821C22A.90109@foss.arm.com> Cc: Kyrill Tkachov , Ramana Radhakrishnan From: "Andre Vieira (lists)" Message-ID: <583582E4.4030902@arm.com> Date: Wed, 23 Nov 2016 11:52:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <5821C22A.90109@foss.arm.com> Content-Type: multipart/mixed; boundary="------------070509040903020803080708" X-IsSubscribed: yes X-SW-Source: 2016-11/txt/msg02350.txt.bz2 This is a multi-part message in MIME format. --------------070509040903020803080708 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-length: 880 Hi, After some extra testing I realized there was an issue with the way we were clearing registers when returning from a cmse_nonsecure_entry function for ARMv8-M.Baseline. This patch fixes that and changes the testcase to catch the issue. The problem was I was always using LR to clear the registers, however, due to the way the Thumb-1 backend works, we can't guarantee LR will contain the address to which we will be returning at the time of clearing. Instead we use r0 to clear r1-r3 and IP. If the function does not use r0 to return a value, we clear r0 with 0 before using it to clear everything else. As for LR, we move the value of the register used to return into it prior to returning. This satisfies the requirements of not leaking secure information since all registers hold either: - values to return - 0 - return address No changes to ChangeLog. Cheers, Andre --------------070509040903020803080708 Content-Type: text/plain; charset=UTF-8; name="diff4" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="diff4" Content-length: 55881 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL2FybS5jIGIvZ2NjL2NvbmZp Zy9hcm0vYXJtLmMKaW5kZXggZmRiZGQ0MjMyMzZlNzM4ODgwMmJjNGJkNTY4 ZjI2MGQ5NTQ4NWJiZS4uMGI5M2VjZTg0YjNlYmFiM2MzNmJlZWIxNzBhMjQ1 YzI5NDUzMjE1ZCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0vYXJtLmMK KysrIGIvZ2NjL2NvbmZpZy9hcm0vYXJtLmMKQEAgLTE3NDk5LDYgKzE3NDk5 LDI3OSBAQCBub3RlX2ludmFsaWRfY29uc3RhbnRzIChydHhfaW5zbiAqaW5z biwgSE9TVF9XSURFX0lOVCBhZGRyZXNzLCBpbnQgZG9fcHVzaGVzKQogICBy ZXR1cm47CiB9CiAKKy8qIFRoaXMgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIGNs ZWFyIG1hc2sgYW5kIFBBRERJTkdfQklUU19UT19DTEVBUiBmb3Igc3RydWN0 cworICAgYW5kIHVuaW9ucyBpbiB0aGUgY29udGV4dCBvZiBBUk12OC1NIFNl Y3VyaXR5IEV4dGVuc2lvbnMuICBJdCBpcyB1c2VkIGFzIGEKKyAgIGhlbHBl ciBmdW5jdGlvbiBmb3IgYm90aCAnY21zZV9ub25zZWN1cmVfY2FsbCcgYW5k ICdjbXNlX25vbnNlY3VyZV9lbnRyeScKKyAgIGZ1bmN0aW9ucy4gIFRoZSBQ QURESU5HX0JJVFNfVE9fQ0xFQVIgcG9pbnRlciBjYW4gYmUgdGhlIGJhc2Ug dG8gZWl0aGVyIG9uZQorICAgb3IgZm91ciBtYXNrcywgZGVwZW5kaW5nIG9u IHdoZXRoZXIgaXQgaXMgYmVpbmcgY29tcHV0ZWQgZm9yIGEKKyAgICdjbXNl X25vbnNlY3VyZV9lbnRyeScgcmV0dXJuIHZhbHVlIG9yIGEgJ2Ntc2Vfbm9u c2VjdXJlX2NhbGwnIGFyZ3VtZW50CisgICByZXNwZWN0aXZlbHkuICBUaGUg dHJlZSBmb3IgdGhlIHR5cGUgb2YgdGhlIGFyZ3VtZW50IG9yIGEgZmllbGQg d2l0aGluIGFuCisgICBhcmd1bWVudCBpcyBwYXNzZWQgaW4gQVJHX1RZUEUs IHRoZSBjdXJyZW50IHJlZ2lzdGVyIHRoaXMgYXJndW1lbnQgb3IgZmllbGQK KyAgIHN0YXJ0cyBpbiBpcyBrZXB0IGluIHRoZSBwb2ludGVyIFJFR05PIGFu ZCB1cGRhdGVkIGFjY29yZGluZ2x5LCB0aGUgYml0IHRoaXMKKyAgIGFyZ3Vt ZW50IG9yIGZpZWxkIHN0YXJ0cyBhdCBpcyBwYXNzZWQgaW4gU1RBUlRJTkdf QklUIGFuZCB0aGUgbGFzdCB1c2VkIGJpdAorICAgaXMga2VwdCBpbiBMQVNU X1VTRURfQklUIHdoaWNoIGlzIGFsc28gdXBkYXRlZCBhY2NvcmRpbmdseS4g ICovCisKK3N0YXRpYyB1bnNpZ25lZCBIT1NUX1dJREVfSU5UCitjb21wX25v dF90b19jbGVhcl9tYXNrX3N0cl91biAodHJlZSBhcmdfdHlwZSwgaW50ICog cmVnbm8sCisJCQkgICAgICAgdWludDMyX3QgKiBwYWRkaW5nX2JpdHNfdG9f Y2xlYXIsCisJCQkgICAgICAgdW5zaWduZWQgc3RhcnRpbmdfYml0LCBpbnQg KiBsYXN0X3VzZWRfYml0KQorCit7CisgIHVuc2lnbmVkIEhPU1RfV0lERV9J TlQgbm90X3RvX2NsZWFyX3JlZ19tYXNrID0gMDsKKworICBpZiAoVFJFRV9D T0RFIChhcmdfdHlwZSkgPT0gUkVDT1JEX1RZUEUpCisgICAgeworICAgICAg dW5zaWduZWQgY3VycmVudF9iaXQgPSBzdGFydGluZ19iaXQ7CisgICAgICB0 cmVlIGZpZWxkOworICAgICAgbG9uZyBpbnQgb2Zmc2V0LCBzaXplOworCisK KyAgICAgIGZpZWxkID0gVFlQRV9GSUVMRFMgKGFyZ190eXBlKTsKKyAgICAg IHdoaWxlIChmaWVsZCkKKwl7CisJICAvKiBUaGUgb2Zmc2V0IHdpdGhpbiBh IHN0cnVjdHVyZSBpcyBhbHdheXMgYW4gb2Zmc2V0IGZyb20KKwkgICAgIHRo ZSBzdGFydCBvZiB0aGF0IHN0cnVjdHVyZS4gIE1ha2Ugc3VyZSB3ZSB0YWtl IHRoYXQgaW50byB0aGUKKwkgICAgIGNhbGN1bGF0aW9uIG9mIHRoZSByZWdp c3RlciBiYXNlZCBvZmZzZXQgdGhhdCB3ZSB1c2UgaGVyZS4gICovCisJICBv ZmZzZXQgPSBzdGFydGluZ19iaXQ7CisJICBvZmZzZXQgKz0gVFJFRV9JTlRf Q1NUX0VMVCAoREVDTF9GSUVMRF9CSVRfT0ZGU0VUIChmaWVsZCksIDApOwor CSAgb2Zmc2V0ICU9IDMyOworCisJICAvKiBUaGlzIGlzIHRoZSBhY3R1YWwg c2l6ZSBvZiB0aGUgZmllbGQsIGZvciBiaXRmaWVsZHMgdGhpcyBpcyB0aGUK KwkgICAgIGJpdGZpZWxkIHdpZHRoIGFuZCBub3QgdGhlIGNvbnRhaW5lciBz aXplLiAgKi8KKwkgIHNpemUgPSBUUkVFX0lOVF9DU1RfRUxUIChERUNMX1NJ WkUgKGZpZWxkKSwgMCk7CisKKwkgIGlmICgqbGFzdF91c2VkX2JpdCAhPSBv ZmZzZXQpCisJICAgIHsKKwkgICAgICBpZiAob2Zmc2V0IDwgKmxhc3RfdXNl ZF9iaXQpCisJCXsKKwkJICAvKiBUaGlzIGZpZWxkJ3Mgb2Zmc2V0IGlzIGJl Zm9yZSB0aGUgJ2xhc3RfdXNlZF9iaXQnLCB0aGF0CisJCSAgICAgbWVhbnMg dGhpcyBmaWVsZCBnb2VzIG9uIHRoZSBuZXh0IHJlZ2lzdGVyLiAgU28gd2Ug bmVlZCB0bworCQkgICAgIHBhZCB0aGUgcmVzdCBvZiB0aGUgY3VycmVudCBy ZWdpc3RlciBhbmQgaW5jcmVhc2UgdGhlCisJCSAgICAgcmVnaXN0ZXIgbnVt YmVyLiAgKi8KKwkJICB1aW50MzJfdCBtYXNrOworCQkgIG1hc2sgID0gKCh1 aW50MzJfdCktMSkgLSAoKHVpbnQzMl90KSAxIDw8ICpsYXN0X3VzZWRfYml0 KTsKKwkJICBtYXNrKys7CisKKwkJICBwYWRkaW5nX2JpdHNfdG9fY2xlYXJb KnJlZ25vXSB8PSBtYXNrOworCQkgIG5vdF90b19jbGVhcl9yZWdfbWFzayB8 PSBIT1NUX1dJREVfSU5UXzFVIDw8ICpyZWdubzsKKwkJICAoKnJlZ25vKSsr OworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgLyogT3RoZXJ3aXNlIHdl IHBhZCB0aGUgYml0cyBiZXR3ZWVuIHRoZSBsYXN0IGZpZWxkJ3MgZW5kIGFu ZAorCQkgICAgIHRoZSBzdGFydCBvZiB0aGUgbmV3IGZpZWxkLiAgKi8KKwkJ ICB1aW50MzJfdCBtYXNrOworCisJCSAgbWFzayA9ICgodWludDMyX3QpLTEp ID4+ICgzMiAtIG9mZnNldCk7CisJCSAgbWFzayAtPSAoKHVpbnQzMl90KSAx IDw8ICpsYXN0X3VzZWRfYml0KSAtIDE7CisJCSAgcGFkZGluZ19iaXRzX3Rv X2NsZWFyWypyZWdub10gfD0gbWFzazsKKwkJfQorCSAgICAgIGN1cnJlbnRf Yml0ID0gb2Zmc2V0OworCSAgICB9CisKKwkgIC8qIENhbGN1bGF0ZSBmdXJ0 aGVyIHBhZGRpbmcgYml0cyBmb3IgaW5uZXIgc3RydWN0cy91bmlvbnMgdG9v LiAgKi8KKwkgIGlmIChSRUNPUkRfT1JfVU5JT05fVFlQRV9QIChUUkVFX1RZ UEUgKGZpZWxkKSkpCisJICAgIHsKKwkgICAgICAqbGFzdF91c2VkX2JpdCA9 IGN1cnJlbnRfYml0OworCSAgICAgIG5vdF90b19jbGVhcl9yZWdfbWFzawor CQl8PSBjb21wX25vdF90b19jbGVhcl9tYXNrX3N0cl91biAoVFJFRV9UWVBF IChmaWVsZCksIHJlZ25vLAorCQkJCQkJICBwYWRkaW5nX2JpdHNfdG9fY2xl YXIsIG9mZnNldCwKKwkJCQkJCSAgbGFzdF91c2VkX2JpdCk7CisJICAgIH0K KwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIFVwZGF0ZSAnY3VycmVudF9i aXQnIHdpdGggdGhpcyBmaWVsZCdzIHNpemUuICBJZiB0aGUKKwkJICdjdXJy ZW50X2JpdCcgbGllcyBpbiBhIHN1YnNlcXVlbnQgcmVnaXN0ZXIsIHVwZGF0 ZSAncmVnbm8nIGFuZAorCQkgcmVzZXQgJ2N1cnJlbnRfYml0JyB0byBwb2lu dCB0byB0aGUgY3VycmVudCBiaXQgaW4gdGhhdCBuZXcKKwkJIHJlZ2lzdGVy LiAgKi8KKwkgICAgICBjdXJyZW50X2JpdCArPSBzaXplOworCSAgICAgIHdo aWxlIChjdXJyZW50X2JpdCA+PSAzMikKKwkJeworCQkgIGN1cnJlbnRfYml0 LT0zMjsKKwkJICBub3RfdG9fY2xlYXJfcmVnX21hc2sgfD0gSE9TVF9XSURF X0lOVF8xVSA8PCAqcmVnbm87CisJCSAgKCpyZWdubykrKzsKKwkJfQorCSAg ICAgICpsYXN0X3VzZWRfYml0ID0gY3VycmVudF9iaXQ7CisJICAgIH0KKwor CSAgZmllbGQgPSBUUkVFX0NIQUlOIChmaWVsZCk7CisJfQorICAgICAgbm90 X3RvX2NsZWFyX3JlZ19tYXNrIHw9IEhPU1RfV0lERV9JTlRfMVUgPDwgKnJl Z25vOworICAgIH0KKyAgZWxzZSBpZiAoVFJFRV9DT0RFIChhcmdfdHlwZSkg PT0gVU5JT05fVFlQRSkKKyAgICB7CisgICAgICB0cmVlIGZpZWxkLCBmaWVs ZF90OworICAgICAgaW50IGksIHJlZ25vX3QsIGZpZWxkX3NpemU7CisgICAg ICBpbnQgbWF4X3JlZyA9IC0xOworICAgICAgaW50IG1heF9iaXQgPSAtMTsK KyAgICAgIHVpbnQzMl90IG1hc2s7CisgICAgICB1aW50MzJfdCBwYWRkaW5n X2JpdHNfdG9fY2xlYXJfcmVzW05VTV9BUkdfUkVHU10KKwk9IHstMSwgLTEs IC0xLCAtMX07CisKKyAgICAgIC8qIFRvIGNvbXB1dGUgdGhlIHBhZGRpbmcg Yml0cyBpbiBhIHVuaW9uIHdlIG9ubHkgY29uc2lkZXIgYml0cyBhcworCSBw YWRkaW5nIGJpdHMgaWYgdGhleSBhcmUgYWx3YXlzIGVpdGhlciBhIHBhZGRp bmcgYml0IG9yIGZhbGwgb3V0c2lkZSBhCisJIGZpZWxkcyBzaXplIGZvciBh bGwgZmllbGRzIGluIHRoZSB1bmlvbi4gICovCisgICAgICBmaWVsZCA9IFRZ UEVfRklFTERTIChhcmdfdHlwZSk7CisgICAgICB3aGlsZSAoZmllbGQpCisJ eworCSAgdWludDMyX3QgcGFkZGluZ19iaXRzX3RvX2NsZWFyX3RbTlVNX0FS R19SRUdTXQorCSAgICA9IHswVSwgMFUsIDBVLCAwVX07CisJICBpbnQgbGFz dF91c2VkX2JpdF90ID0gKmxhc3RfdXNlZF9iaXQ7CisJICByZWdub190ID0g KnJlZ25vOworCSAgZmllbGRfdCA9IFRSRUVfVFlQRSAoZmllbGQpOworCisJ ICAvKiBJZiB0aGUgZmllbGQncyB0eXBlIGlzIGVpdGhlciBhIHJlY29yZCBv ciBhIHVuaW9uIG1ha2Ugc3VyZSB0bworCSAgICAgY29tcHV0ZSB0aGVpciBw YWRkaW5nIGJpdHMgdG9vLiAgKi8KKwkgIGlmIChSRUNPUkRfT1JfVU5JT05f VFlQRV9QIChmaWVsZF90KSkKKwkgICAgbm90X3RvX2NsZWFyX3JlZ19tYXNr CisJICAgICAgfD0gY29tcF9ub3RfdG9fY2xlYXJfbWFza19zdHJfdW4gKGZp ZWxkX3QsICZyZWdub190LAorCQkJCQkJJnBhZGRpbmdfYml0c190b19jbGVh cl90WzBdLAorCQkJCQkJc3RhcnRpbmdfYml0LCAmbGFzdF91c2VkX2JpdF90 KTsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGZpZWxkX3NpemUgPSBUUkVF X0lOVF9DU1RfRUxUIChERUNMX1NJWkUgKGZpZWxkKSwgMCk7CisJICAgICAg cmVnbm9fdCA9IChmaWVsZF9zaXplIC8gMzIpICsgKnJlZ25vOworCSAgICAg IGxhc3RfdXNlZF9iaXRfdCA9IChzdGFydGluZ19iaXQgKyBmaWVsZF9zaXpl KSAlIDMyOworCSAgICB9CisKKwkgIGZvciAoaSA9ICpyZWdubzsgaSA8IHJl Z25vX3Q7IGkrKykKKwkgICAgeworCSAgICAgIC8qIEZvciBhbGwgYnV0IHRo ZSBsYXN0IHJlZ2lzdGVyIHVzZWQgYnkgdGhpcyBmaWVsZCBvbmx5IGtlZXAg dGhlCisJCSBwYWRkaW5nIGJpdHMgdGhhdCB3ZXJlIHBhZGRpbmcgYml0cyBp biB0aGlzIGZpZWxkLiAgKi8KKwkgICAgICBwYWRkaW5nX2JpdHNfdG9fY2xl YXJfcmVzW2ldICY9IHBhZGRpbmdfYml0c190b19jbGVhcl90W2ldOworCSAg ICB9CisKKwkgICAgLyogRm9yIHRoZSBsYXN0IHJlZ2lzdGVyLCBrZWVwIGFs bCBwYWRkaW5nIGJpdHMgdGhhdCB3ZXJlIHBhZGRpbmcKKwkgICAgICAgYml0 cyBpbiB0aGlzIGZpZWxkIGFuZCBhbnkgcGFkZGluZyBiaXRzIHRoYXQgYXJl IHN0aWxsIHZhbGlkCisJICAgICAgIGFzIHBhZGRpbmcgYml0cyBidXQgZmFs bCBvdXRzaWRlIG9mIHRoaXMgZmllbGQncyBzaXplLiAgKi8KKwkgICAgbWFz ayA9ICgoKHVpbnQzMl90KSAtMSkgLSAoKHVpbnQzMl90KSAxIDw8IGxhc3Rf dXNlZF9iaXRfdCkpICsgMTsKKwkgICAgcGFkZGluZ19iaXRzX3RvX2NsZWFy X3Jlc1tyZWdub190XQorCSAgICAgICY9IHBhZGRpbmdfYml0c190b19jbGVh cl90W3JlZ25vX3RdIHwgbWFzazsKKworCSAgLyogVXBkYXRlIHRoZSBtYXhp bXVtIHNpemUgb2YgdGhlIGZpZWxkcyBpbiB0ZXJtcyBvZiByZWdpc3RlcnMg dXNlZAorCSAgICAgKCdtYXhfcmVnJykgYW5kIHRoZSAnbGFzdF91c2VkX2Jp dCcgaW4gc2FpZCByZWdpc3Rlci4gICovCisJICBpZiAobWF4X3JlZyA8IHJl Z25vX3QpCisJICAgIHsKKwkgICAgICBtYXhfcmVnID0gcmVnbm9fdDsKKwkg ICAgICBtYXhfYml0ID0gbGFzdF91c2VkX2JpdF90OworCSAgICB9CisJICBl bHNlIGlmIChtYXhfcmVnID09IHJlZ25vX3QgJiYgbWF4X2JpdCA8IGxhc3Rf dXNlZF9iaXRfdCkKKwkgICAgbWF4X2JpdCA9IGxhc3RfdXNlZF9iaXRfdDsK KworCSAgZmllbGQgPSBUUkVFX0NIQUlOIChmaWVsZCk7CisJfQorCisgICAg ICAvKiBVcGRhdGUgdGhlIGN1cnJlbnQgcGFkZGluZ19iaXRzX3RvX2NsZWFy IHVzaW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhlCisJIHBhZGRpbmcgYml0 cyBvZiBhbGwgdGhlIGZpZWxkcy4gICovCisgICAgICBmb3IgKGk9KnJlZ25v OyBpIDwgbWF4X3JlZzsgaSsrKQorCXBhZGRpbmdfYml0c190b19jbGVhcltp XSB8PSBwYWRkaW5nX2JpdHNfdG9fY2xlYXJfcmVzW2ldOworCisgICAgICAv KiBEbyBub3Qga2VlcCB0cmFpbGluZyBwYWRkaW5nIGJpdHMsIHdlIGRvIG5v dCBrbm93IHlldCB3aGV0aGVyIHRoaXMKKwkgaXMgdGhlIGVuZCBvZiB0aGUg YXJndW1lbnQuICAqLworICAgICAgbWFzayA9ICgodWludDMyX3QpIDEgPDwg bWF4X2JpdCkgLSAxOworICAgICAgcGFkZGluZ19iaXRzX3RvX2NsZWFyW21h eF9yZWddCisJfD0gcGFkZGluZ19iaXRzX3RvX2NsZWFyX3Jlc1ttYXhfcmVn XSAmIG1hc2s7CisKKyAgICAgICpyZWdubyA9IG1heF9yZWc7CisgICAgICAq bGFzdF91c2VkX2JpdCA9IG1heF9iaXQ7CisgICAgfQorICBlbHNlCisgICAg LyogVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSB1c2VkIGZvciBzdHJ1 Y3RzIGFuZCB1bmlvbnMuICAqLworICAgIGdjY191bnJlYWNoYWJsZSAoKTsK KworICByZXR1cm4gbm90X3RvX2NsZWFyX3JlZ19tYXNrOworfQorCisvKiBJ biB0aGUgY29udGV4dCBvZiBBUk12OC1NIFNlY3VyaXR5IEV4dGVuc2lvbnMs IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBmb3IgYm90aAorICAgJ2Ntc2Vfbm9u c2VjdXJlX2NhbGwnIGFuZCAnY21zZV9ub25zZWN1cmVfZW50cnknIGZ1bmN0 aW9ucyB0byBjb21wdXRlIHdoYXQKKyAgIHJlZ2lzdGVycyBhcmUgdXNlZCB3 aGVuIHJldHVybmluZyBvciBwYXNzaW5nIGFyZ3VtZW50cywgd2hpY2ggaXMg dGhlbgorICAgcmV0dXJuZWQgYXMgYSBtYXNrLiAgSXQgd2lsbCBhbHNvIGNv bXB1dGUgYSBtYXNrIHRvIGluZGljYXRlIHBhZGRpbmcvdW51c2VkCisgICBi aXRzIGZvciBlYWNoIG9mIHRoZXNlIHJlZ2lzdGVycywgYW5kIHBhc3NlcyB0 aGlzIHRocm91Z2ggdGhlCisgICBQQURESU5HX0JJVFNfVE9fQ0xFQVIgcG9p bnRlci4gIFRoZSB0cmVlIG9mIHRoZSBhcmd1bWVudCB0eXBlIGlzIHBhc3Nl ZCBpbgorICAgQVJHX1RZUEUsIHRoZSBydGwgcmVwcmVzZW50YXRpb24gb2Yg dGhlIGFyZ3VtZW50IGlzIHBhc3NlZCBpbiBBUkdfUlRYIGFuZAorICAgdGhl IHN0YXJ0aW5nIHJlZ2lzdGVyIHVzZWQgdG8gcGFzcyB0aGlzIGFyZ3VtZW50 IG9yIHJldHVybiB2YWx1ZSBpcyBwYXNzZWQKKyAgIGluIFJFR05PLiAgSXQg bWFrZXMgdXNlIG9mICdjb21wX25vdF90b19jbGVhcl9tYXNrX3N0cl91bicg dG8gY29tcHV0ZSB0aGVzZQorICAgZm9yIHN0cnVjdCBhbmQgdW5pb24gdHlw ZXMuICAqLworCitzdGF0aWMgdW5zaWduZWQgSE9TVF9XSURFX0lOVAorY29t cHV0ZV9ub3RfdG9fY2xlYXJfbWFzayAodHJlZSBhcmdfdHlwZSwgcnR4IGFy Z19ydHgsIGludCByZWdubywKKwkJCSAgICAgdWludDMyX3QgKiBwYWRkaW5n X2JpdHNfdG9fY2xlYXIpCisKK3sKKyAgaW50IGxhc3RfdXNlZF9iaXQgPSAw OworICB1bnNpZ25lZCBIT1NUX1dJREVfSU5UIG5vdF90b19jbGVhcl9tYXNr OworCisgIGlmIChSRUNPUkRfT1JfVU5JT05fVFlQRV9QIChhcmdfdHlwZSkp CisgICAgeworICAgICAgbm90X3RvX2NsZWFyX21hc2sKKwk9IGNvbXBfbm90 X3RvX2NsZWFyX21hc2tfc3RyX3VuIChhcmdfdHlwZSwgJnJlZ25vLAorCQkJ CQkgcGFkZGluZ19iaXRzX3RvX2NsZWFyLCAwLAorCQkJCQkgJmxhc3RfdXNl ZF9iaXQpOworCisKKyAgICAgIC8qIElmIHRoZSAnbGFzdF91c2VkX2JpdCcg aXMgbm90IHplcm8sIHRoYXQgbWVhbnMgd2UgYXJlIHN0aWxsIHVzaW5nIGEK KwkgcGFydCBvZiB0aGUgbGFzdCAncmVnbm8nLiAgSW4gc3VjaCBjYXNlcyB3 ZSBtdXN0IGNsZWFyIHRoZSB0cmFpbGluZworCSBiaXRzLiAgT3RoZXJ3aXNl IHdlIGFyZSBub3QgdXNpbmcgcmVnbm8gYW5kIHdlIHNob3VsZCBtYXJrIGl0 IGFzIHRvCisJIGNsZWFyLiAgKi8KKyAgICAgIGlmIChsYXN0X3VzZWRfYml0 ICE9IDApCisJcGFkZGluZ19iaXRzX3RvX2NsZWFyW3JlZ25vXQorCSAgfD0g KCh1aW50MzJfdCktMSkgLSAoKHVpbnQzMl90KSAxIDw8IGxhc3RfdXNlZF9i aXQpICsgMTsKKyAgICAgIGVsc2UKKwlub3RfdG9fY2xlYXJfbWFzayAmPSB+ KEhPU1RfV0lERV9JTlRfMVUgPDwgcmVnbm8pOworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIG5vdF90b19jbGVhcl9tYXNrID0gMDsKKyAgICAgIC8q IFdlIGFyZSBub3QgZGVhbGluZyB3aXRoIHN0cnVjdHMgbm9yIHVuaW9ucy4g IFNvIHRoZXNlIGFyZ3VtZW50cyBtYXkgYmUKKwkgcGFzc2VkIGluIGZsb2F0 aW5nIHBvaW50IHJlZ2lzdGVycyB0b28uICBJbiBzb21lIGNhc2VzIGEgQkxL bW9kZSBpcworCSB1c2VkIHdoZW4gcmV0dXJuaW5nIG9yIHBhc3NpbmcgYXJn dW1lbnRzIGluIG11bHRpcGxlIFZGUCByZWdpc3RlcnMuICAqLworICAgICAg aWYgKEdFVF9NT0RFIChhcmdfcnR4KSA9PSBCTEttb2RlKQorCXsKKwkgIGlu dCBpLCBhcmdfcmVnczsKKwkgIHJ0eCByZWc7CisKKwkgIC8qIFRoaXMgc2hv dWxkIHJlYWxseSBvbmx5IG9jY3VyIHdoZW4gZGVhbGluZyB3aXRoIHRoZSBo YXJkLWZsb2F0CisJICAgICBBQkkuICAqLworCSAgZ2NjX2Fzc2VydCAoVEFS R0VUX0hBUkRfRkxPQVRfQUJJKTsKKworCSAgZm9yIChpID0gMDsgaSA8IFhW RUNMRU4gKGFyZ19ydHgsIDApOyBpKyspCisJICAgIHsKKwkgICAgICByZWcg PSBYRVhQIChYVkVDRVhQIChhcmdfcnR4LCAwLCBpKSwgMCk7CisJICAgICAg Z2NjX2Fzc2VydCAoUkVHX1AgKHJlZykpOworCisJICAgICAgbm90X3RvX2Ns ZWFyX21hc2sgfD0gSE9TVF9XSURFX0lOVF8xVSA8PCBSRUdOTyAocmVnKTsK KworCSAgICAgIC8qIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggREYgbW9kZSwg bWFrZSBzdXJlIHdlIGRvbid0CisJCSBjbGVhciBlaXRoZXIgb2YgdGhlIHJl Z2lzdGVycyBpdCBhZGRyZXNzZXMuICAqLworCSAgICAgIGFyZ19yZWdzID0g QVJNX05VTV9SRUdTIChHRVRfTU9ERSAocmVnKSk7CisJICAgICAgaWYgKGFy Z19yZWdzID4gMSkKKwkJeworCQkgIHVuc2lnbmVkIEhPU1RfV0lERV9JTlQg bWFzazsKKwkJICBtYXNrID0gSE9TVF9XSURFX0lOVF8xVSA8PCAoUkVHTk8g KHJlZykgKyBhcmdfcmVncyk7CisJCSAgbWFzayAtPSBIT1NUX1dJREVfSU5U XzFVIDw8IFJFR05PIChyZWcpOworCQkgIG5vdF90b19jbGVhcl9tYXNrIHw9 IG1hc2s7CisJCX0KKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwl7CisJICAv KiBPdGhlcndpc2Ugd2UgY2FuIHJlbHkgb24gdGhlIE1PREUgdG8gZGV0ZXJt aW5lIGhvdyBtYW55IHJlZ2lzdGVycworCSAgICAgYXJlIGJlaW5nIHVzZWQg YnkgdGhpcyBhcmd1bWVudC4gICovCisJICBpbnQgYXJnX3JlZ3MgPSBBUk1f TlVNX1JFR1MgKEdFVF9NT0RFIChhcmdfcnR4KSk7CisJICBub3RfdG9fY2xl YXJfbWFzayB8PSBIT1NUX1dJREVfSU5UXzFVIDw8IFJFR05PIChhcmdfcnR4 KTsKKwkgIGlmIChhcmdfcmVncyA+IDEpCisJICAgIHsKKwkgICAgICB1bnNp Z25lZCBIT1NUX1dJREVfSU5UCisJICAgICAgbWFzayA9IEhPU1RfV0lERV9J TlRfMVUgPDwgKFJFR05PIChhcmdfcnR4KSArIGFyZ19yZWdzKTsKKwkgICAg ICBtYXNrIC09IEhPU1RfV0lERV9JTlRfMVUgPDwgUkVHTk8gKGFyZ19ydHgp OworCSAgICAgIG5vdF90b19jbGVhcl9tYXNrIHw9IG1hc2s7CisJICAgIH0K Kwl9CisgICAgfQorCisgIHJldHVybiBub3RfdG9fY2xlYXJfbWFzazsKK30K KwogLyogUmV3cml0ZSBtb3ZlIGluc24gaW50byBzdWJ0cmFjdCBvZiAwIGlm IHRoZSBjb25kaXRpb24gY29kZXMgd2lsbAogICAgYmUgdXNlZnVsIGluIG5l eHQgY29uZGl0aW9uYWwganVtcCBpbnNuLiAgKi8KIApAQCAtMTk5MjAsNyAr MjAxOTMsNDIgQEAgb3V0cHV0X3JldHVybl9pbnN0cnVjdGlvbiAocnR4IG9w ZXJhbmQsIGJvb2wgcmVhbGx5X3JldHVybiwgYm9vbCByZXZlcnNlLAogCiAJ ZGVmYXVsdDoKIAkgIGlmIChJU19DTVNFX0VOVFJZIChmdW5jX3R5cGUpKQot CSAgICBzbnByaW50ZiAoaW5zdHIsIHNpemVvZiAoaW5zdHIpLCAiYnhucyVz XHQlJXxsciIsIGNvbmRpdGlvbmFsKTsKKwkgICAgeworCSAgICAgIC8qIENo ZWNrIGlmIHdlIGhhdmUgdG8gY2xlYXIgdGhlICdHRSBiaXRzJyB3aGljaCBp cyBvbmx5IHVzZWQgaWYKKwkJIHBhcmFsbGVsIGFkZCBhbmQgc3VidHJhY3Rp b24gaW5zdHJ1Y3Rpb25zIGFyZSBhdmFpbGFibGUuICAqLworCSAgICAgIGlm IChUQVJHRVRfSU5UX1NJTUQpCisJCXNucHJpbnRmIChpbnN0ciwgc2l6ZW9m IChpbnN0ciksCisJCQkgICJtc3Ilc1x0QVBTUl9uemN2cWcsICUlfGxyIiwg Y29uZGl0aW9uYWwpOworCSAgICAgIGVsc2UKKwkJc25wcmludGYgKGluc3Ry LCBzaXplb2YgKGluc3RyKSwKKwkJCSAgIm1zciVzXHRBUFNSX256Y3ZxLCAl JXxsciIsIGNvbmRpdGlvbmFsKTsKKworCSAgICAgIG91dHB1dF9hc21faW5z biAoaW5zdHIsICYgb3BlcmFuZCk7CisJICAgICAgaWYgKFRBUkdFVF9IQVJE X0ZMT0FUICYmICFUQVJHRVRfVEhVTUIxKQorCQl7CisJCSAgLyogQ2xlYXIg dGhlIGN1bXVsYXRpdmUgZXhjZXB0aW9uLXN0YXR1cyBiaXRzICgwLTQsNykg YW5kIHRoZQorCQkgICAgIGNvbmRpdGlvbiBjb2RlIGJpdHMgKDI4LTMxKSBv ZiB0aGUgRlBTQ1IuICBXZSBuZWVkIHRvCisJCSAgICAgcmVtZW1iZXIgdG8g Y2xlYXIgdGhlIGZpcnN0IHNjcmF0Y2ggcmVnaXN0ZXIgdXNlZCAoSVApIGFu ZAorCQkgICAgIHNhdmUgYW5kIHJlc3RvcmUgdGhlIHNlY29uZCAocjQpLiAg Ki8KKwkJICBzbnByaW50ZiAoaW5zdHIsIHNpemVvZiAoaW5zdHIpLCAicHVz aFx0eyUlfHI0fSIpOworCQkgIG91dHB1dF9hc21faW5zbiAoaW5zdHIsICYg b3BlcmFuZCk7CisJCSAgc25wcmludGYgKGluc3RyLCBzaXplb2YgKGluc3Ry KSwgInZtcnNcdCUlfGlwLCBmcHNjciIpOworCQkgIG91dHB1dF9hc21faW5z biAoaW5zdHIsICYgb3BlcmFuZCk7CisJCSAgc25wcmludGYgKGluc3RyLCBz aXplb2YgKGluc3RyKSwgIm1vdndcdCUlfHI0LCAjNjUzNzYiKTsKKwkJICBv dXRwdXRfYXNtX2luc24gKGluc3RyLCAmIG9wZXJhbmQpOworCQkgIHNucHJp bnRmIChpbnN0ciwgc2l6ZW9mIChpbnN0ciksICJtb3Z0XHQlJXxyNCwgIzQw OTUiKTsKKwkJICBvdXRwdXRfYXNtX2luc24gKGluc3RyLCAmIG9wZXJhbmQp OworCQkgIHNucHJpbnRmIChpbnN0ciwgc2l6ZW9mIChpbnN0ciksICJhbmRc dCUlfGlwLCAlJXxyNCIpOworCQkgIG91dHB1dF9hc21faW5zbiAoaW5zdHIs ICYgb3BlcmFuZCk7CisJCSAgc25wcmludGYgKGluc3RyLCBzaXplb2YgKGlu c3RyKSwgInZtc3JcdGZwc2NyLCAlJXxpcCIpOworCQkgIG91dHB1dF9hc21f aW5zbiAoaW5zdHIsICYgb3BlcmFuZCk7CisJCSAgc25wcmludGYgKGluc3Ry LCBzaXplb2YgKGluc3RyKSwgInBvcFx0eyUlfHI0fSIpOworCQkgIG91dHB1 dF9hc21faW5zbiAoaW5zdHIsICYgb3BlcmFuZCk7CisJCSAgc25wcmludGYg KGluc3RyLCBzaXplb2YgKGluc3RyKSwgIm1vdlx0JSV8aXAsICUlfGxyIik7 CisJCSAgb3V0cHV0X2FzbV9pbnNuIChpbnN0ciwgJiBvcGVyYW5kKTsKKwkJ fQorCSAgICAgIHNucHJpbnRmIChpbnN0ciwgc2l6ZW9mIChpbnN0ciksICJi eG5zXHQlJXxsciIpOworCSAgICB9CiAJICAvKiBVc2UgYnggaWYgaXQncyBh dmFpbGFibGUuICAqLwogCSAgZWxzZSBpZiAoYXJtX2FyY2g1IHx8IGFybV9h cmNoNHQpCiAJICAgIHNwcmludGYgKGluc3RyLCAiYnglc1x0JSV8bHIiLCBj b25kaXRpb25hbCk7CkBAIC0yNDE4Nyw3ICsyNDQ5NSwxMSBAQCB0aHVtYl9l eGl0IChGSUxFICpmLCBpbnQgcmVnX2NvbnRhaW5pbmdfcmV0dXJuX2FkZHIp CiAJYXNtX2ZwcmludGYgKGYsICJcdGFkZFx0JXIsICVyXG4iLCBTUF9SRUdO VU0sIEFSTV9FSF9TVEFDS0FESl9SRUdOVU0pOwogCiAgICAgICBpZiAoSVNf Q01TRV9FTlRSWSAoYXJtX2N1cnJlbnRfZnVuY190eXBlICgpKSkKLQlhc21f ZnByaW50ZiAoZiwgIlx0Ynhuc1x0JXJcbiIsIHJlZ19jb250YWluaW5nX3Jl dHVybl9hZGRyKTsKKwl7CisJICBhc21fZnByaW50ZiAoZiwgIlx0bXNyXHRB UFNSX256Y3ZxLCAlclxuIiwKKwkJICAgICAgIHJlZ19jb250YWluaW5nX3Jl dHVybl9hZGRyKTsKKwkgIGFzbV9mcHJpbnRmIChmLCAiXHRieG5zXHQlclxu IiwgcmVnX2NvbnRhaW5pbmdfcmV0dXJuX2FkZHIpOworCX0KICAgICAgIGVs c2UKIAlhc21fZnByaW50ZiAoZiwgIlx0YnhcdCVyXG4iLCByZWdfY29udGFp bmluZ19yZXR1cm5fYWRkcik7CiAgICAgICByZXR1cm47CkBAIC0yNDQyMyw3 ICsyNDczNSwxOCBAQCB0aHVtYl9leGl0IChGSUxFICpmLCBpbnQgcmVnX2Nv bnRhaW5pbmdfcmV0dXJuX2FkZHIpCiAKICAgLyogUmV0dXJuIHRvIGNhbGxl ci4gICovCiAgIGlmIChJU19DTVNFX0VOVFJZIChhcm1fY3VycmVudF9mdW5j X3R5cGUgKCkpKQotICAgIGFzbV9mcHJpbnRmIChmLCAiXHRieG5zXHQlclxu IiwgcmVnX2NvbnRhaW5pbmdfcmV0dXJuX2FkZHIpOworICAgIHsKKyAgICAg IC8qIFRoaXMgaXMgZm9yIHRoZSBjYXNlcyB3aGVyZSBMUiBpcyBub3QgYmVp bmcgdXNlZCB0byBjb250YWluIHRoZSByZXR1cm4KKyAgICAgICAgIGFkZHJl c3MuICBJdCBtYXkgdGhlcmVmb3JlIGNvbnRhaW4gaW5mb3JtYXRpb24gdGhh dCB3ZSBtaWdodCBub3Qgd2FudAorCSB0byBsZWFrLCBoZW5jZSBpdCBtdXN0 IGJlIGNsZWFyZWQuICBUaGUgdmFsdWUgaW4gUjAgd2lsbCBuZXZlciBiZSBh CisJIHNlY3JldCBhdCB0aGlzIHBvaW50LCBzbyBpdCBpcyBzYWZlIHRvIHVz ZSBpdCwgc2VlIHRoZSBjbGVhcmluZyBjb2RlCisJIGluICdjbXNlX25vbnNl Y3VyZV9lbnRyeV9jbGVhcl9iZWZvcmVfcmV0dXJuJy4gICovCisgICAgICBp ZiAocmVnX2NvbnRhaW5pbmdfcmV0dXJuX2FkZHIgIT0gTFJfUkVHTlVNKQor CWFzbV9mcHJpbnRmIChmLCAiXHRtb3ZcdGxyLCByMFxuIik7CisKKyAgICAg IGFzbV9mcHJpbnRmIChmLCAiXHRtc3JcdEFQU1JfbnpjdnEsICVyXG4iLCBy ZWdfY29udGFpbmluZ19yZXR1cm5fYWRkcik7CisgICAgICBhc21fZnByaW50 ZiAoZiwgIlx0Ynhuc1x0JXJcbiIsIHJlZ19jb250YWluaW5nX3JldHVybl9h ZGRyKTsKKyAgICB9CiAgIGVsc2UKICAgICBhc21fZnByaW50ZiAoZiwgIlx0 YnhcdCVyXG4iLCByZWdfY29udGFpbmluZ19yZXR1cm5fYWRkcik7CiB9CkBA IC0yNTI4NSw2ICsyNTYwOCwxNDggQEAgdGh1bWIxX2V4cGFuZF9wcm9sb2d1 ZSAodm9pZCkKICAgICBjZnVuLT5tYWNoaW5lLT5scl9zYXZlX2VsaW1pbmF0 ZWQgPSAwOwogfQogCisvKiBDbGVhciBjYWxsZXIgc2F2ZWQgcmVnaXN0ZXJz IG5vdCB1c2VkIHRvIHBhc3MgcmV0dXJuIHZhbHVlcyBhbmQgbGVha2VkCisg ICBjb25kaXRpb24gZmxhZ3MgYmVmb3JlIGV4aXRpbmcgYSBjbXNlX25vbnNl Y3VyZV9lbnRyeSBmdW5jdGlvbi4gICovCisKK3ZvaWQKK2Ntc2Vfbm9uc2Vj dXJlX2VudHJ5X2NsZWFyX2JlZm9yZV9yZXR1cm4gKHZvaWQpCit7CisgIHVp bnQ2NF90IHRvX2NsZWFyX21hc2tbMl07CisgIHVpbnQzMl90IHBhZGRpbmdf Yml0c190b19jbGVhciA9IDA7CisgIHVpbnQzMl90ICogcGFkZGluZ19iaXRz X3RvX2NsZWFyX3B0ciA9ICZwYWRkaW5nX2JpdHNfdG9fY2xlYXI7CisgIGlu dCByZWdubywgbWF4cmVnbm8gPSBJUF9SRUdOVU07CisgIHRyZWUgcmVzdWx0 X3R5cGU7CisgIHJ0eCByZXN1bHRfcnRsOworCisgIHRvX2NsZWFyX21hc2tb MF0gPSAoMVVMTCA8PCAoTlVNX0FSR19SRUdTKSkgLSAxOworICB0b19jbGVh cl9tYXNrWzBdIHw9ICgxVUxMIDw8IElQX1JFR05VTSk7CisKKyAgLyogSWYg d2UgYXJlIG5vdCBkZWFsaW5nIHdpdGggLW1mbG9hdC1hYmk9c29mdCB3ZSB3 aWxsIG5lZWQgdG8gY2xlYXIgVkZQCisgICAgIHJlZ2lzdGVycy4gIFdlIGFs c28gY2hlY2sgdGhhdCBUQVJHRVRfSEFSRF9GTE9BVCBhbmQgIVRBUkdFVF9U SFVNQjEgaG9sZAorICAgICB0byBtYWtlIHN1cmUgdGhlIGluc3RydWN0aW9u cyB1c2VkIHRvIGNsZWFyIHRoZW0gYXJlIHByZXNlbnQuICAqLworICBpZiAo VEFSR0VUX0hBUkRfRkxPQVQgJiYgIVRBUkdFVF9USFVNQjEpCisgICAgewor ICAgICAgdWludDY0X3QgZmxvYXRfbWFzayA9ICgxVUxMIDw8IChEN19WRlBf UkVHTlVNICsgMSkpIC0gMTsKKyAgICAgIG1heHJlZ25vID0gTEFTVF9WRlBf UkVHTlVNOworCisgICAgICBmbG9hdF9tYXNrICY9IH4oKDFVTEwgPDwgRklS U1RfVkZQX1JFR05VTSkgLSAxKTsKKyAgICAgIHRvX2NsZWFyX21hc2tbMF0g fD0gZmxvYXRfbWFzazsKKworICAgICAgZmxvYXRfbWFzayA9ICgxVUxMIDw8 IChtYXhyZWdubyAtIDYzKSkgLSAxOworICAgICAgdG9fY2xlYXJfbWFza1sx XSA9IGZsb2F0X21hc2s7CisKKyAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkb24n dCBjbGVhciB0aGUgdHdvIHNjcmF0Y2ggcmVnaXN0ZXJzIHVzZWQgdG8gY2xl YXIgdGhlCisJIHJlbGV2YW50IEZQU0NSIGJpdHMgaW4gb3V0cHV0X3JldHVy bl9pbnN0cnVjdGlvbi4gICovCisgICAgICBlbWl0X3VzZSAoZ2VuX3J0eF9S RUcgKFNJbW9kZSwgSVBfUkVHTlVNKSk7CisgICAgICB0b19jbGVhcl9tYXNr WzBdICY9IH4oMVVMTCA8PCBJUF9SRUdOVU0pOworICAgICAgZW1pdF91c2Ug KGdlbl9ydHhfUkVHIChTSW1vZGUsIDQpKTsKKyAgICAgIHRvX2NsZWFyX21h c2tbMF0gJj0gfigxVUxMIDw8IDQpOworICAgIH0KKworICAvKiBJZiB0aGUg dXNlciBoYXMgZGVmaW5lZCByZWdpc3RlcnMgdG8gYmUgY2FsbGVyIHNhdmVk LCB0aGVzZSBhcmUgbm8gbG9uZ2VyCisgICAgIHJlc3RvcmVkIGJ5IHRoZSBm dW5jdGlvbiBiZWZvcmUgcmV0dXJuaW5nIGFuZCBtdXN0IHRodXMgYmUgY2xl YXJlZCBmb3IKKyAgICAgc2VjdXJpdHkgcHVycG9zZXMuICAqLworICBmb3Ig KHJlZ25vID0gTlVNX0FSR19SRUdTOyByZWdubyA8IExBU1RfVkZQX1JFR05V TTsgcmVnbm8rKykKKyAgICB7CisgICAgICAvKiBXZSBkbyBub3QgdG91Y2gg cmVnaXN0ZXJzIHRoYXQgY2FuIGJlIHVzZWQgdG8gcGFzcyBhcmd1bWVudHMg YXMgcGVyCisJIHRoZSBBQVBDUywgc2luY2UgdGhlc2Ugc2hvdWxkIG5ldmVy IGJlIG1hZGUgY2FsbGVlLXNhdmVkIGJ5IHVzZXIKKwkgb3B0aW9ucy4gICov CisgICAgICBpZiAoSU5fUkFOR0UgKHJlZ25vLCBGSVJTVF9WRlBfUkVHTlVN LCBEN19WRlBfUkVHTlVNKSkKKwljb250aW51ZTsKKyAgICAgIGlmIChJTl9S QU5HRSAocmVnbm8sIElQX1JFR05VTSwgUENfUkVHTlVNKSkKKwljb250aW51 ZTsKKyAgICAgIGlmIChjYWxsX3VzZWRfcmVnc1tyZWdub10pCisJdG9fY2xl YXJfbWFza1tyZWdubyAvIDY0XSB8PSAoMVVMTCA8PCAocmVnbm8gJSA2NCkp OworICAgIH0KKworICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IGNsZWFyIHRo ZSByZWdpc3RlcnMgdXNlZCB0byByZXR1cm4gdGhlIHJlc3VsdCBpbi4gICov CisgIHJlc3VsdF90eXBlID0gVFJFRV9UWVBFIChERUNMX1JFU1VMVCAoY3Vy cmVudF9mdW5jdGlvbl9kZWNsKSk7CisgIGlmICghVk9JRF9UWVBFX1AgKHJl c3VsdF90eXBlKSkKKyAgICB7CisgICAgICByZXN1bHRfcnRsID0gYXJtX2Z1 bmN0aW9uX3ZhbHVlIChyZXN1bHRfdHlwZSwgY3VycmVudF9mdW5jdGlvbl9k ZWNsLCAwKTsKKworICAgICAgLyogTm8gbmVlZCB0byBjaGVjayB0aGF0IHdl IHJldHVybiBpbiByZWdpc3RlcnMsIGJlY2F1c2Ugd2UgZG9uJ3QKKwkgc3Vw cG9ydCByZXR1cm5pbmcgb24gc3RhY2sgeWV0LiAgKi8KKyAgICAgIHRvX2Ns ZWFyX21hc2tbMF0KKwkmPSB+Y29tcHV0ZV9ub3RfdG9fY2xlYXJfbWFzayAo cmVzdWx0X3R5cGUsIHJlc3VsdF9ydGwsIDAsCisJCQkJICAgICAgIHBhZGRp bmdfYml0c190b19jbGVhcl9wdHIpOworICAgIH0KKworICBpZiAocGFkZGlu Z19iaXRzX3RvX2NsZWFyICE9IDApCisgICAgeworICAgICAgcnR4IHJlZ19y dHg7CisgICAgICAvKiBQYWRkaW5nIGJpdHMgdG8gY2xlYXIgaXMgbm90IDAg c28gd2Uga25vdyB3ZSBhcmUgZGVhbGluZyB3aXRoCisJIHJldHVybmluZyBh IGNvbXBvc2l0ZSB0eXBlLCB3aGljaCBvbmx5IHVzZXMgcjAuICBMZXQncyBt YWtlIHN1cmUgdGhhdAorCSByMS1yMyBpcyBjbGVhcmVkIHRvbywgd2Ugd2ls bCB1c2UgcjEgYXMgYSBzY3JhdGNoIHJlZ2lzdGVyLiAgKi8KKyAgICAgIGdj Y19hc3NlcnQgKCh0b19jbGVhcl9tYXNrWzBdICYgMHhlKSA9PSAweGUpOwor CisgICAgICByZWdfcnR4ID0gZ2VuX3J0eF9SRUcgKFNJbW9kZSwgUjFfUkVH TlVNKTsKKworICAgICAgLyogRmlsbCB0aGUgbG93ZXIgaGFsZiBvZiB0aGUg bmVnYXRlZCBwYWRkaW5nX2JpdHNfdG9fY2xlYXIuICAqLworICAgICAgZW1p dF9tb3ZlX2luc24gKHJlZ19ydHgsCisJCSAgICAgIEdFTl9JTlQgKCgoKH5w YWRkaW5nX2JpdHNfdG9fY2xlYXIpIDw8IDE2dSkgPj4gMTZ1KSkpOworCisg ICAgICAvKiBBbHNvIGZpbGwgdGhlIHRvcCBoYWxmIG9mIHRoZSBuZWdhdGVk IHBhZGRpbmdfYml0c190b19jbGVhci4gICovCisgICAgICBpZiAoKCh+cGFk ZGluZ19iaXRzX3RvX2NsZWFyKSA+PiAxNikgPiAwKQorCWVtaXRfaW5zbiAo Z2VuX3J0eF9TRVQgKGdlbl9ydHhfWkVST19FWFRSQUNUIChTSW1vZGUsIHJl Z19ydHgsCisJCQkJCQkgICAgICBHRU5fSU5UICgxNiksCisJCQkJCQkgICAg ICBHRU5fSU5UICgxNikpLAorCQkJCUdFTl9JTlQgKCh+cGFkZGluZ19iaXRz X3RvX2NsZWFyKSA+PiAxNikpKTsKKworICAgICAgZW1pdF9pbnNuIChnZW5f YW5kc2kzIChnZW5fcnR4X1JFRyAoU0ltb2RlLCBSMF9SRUdOVU0pLAorCQkJ ICAgZ2VuX3J0eF9SRUcgKFNJbW9kZSwgUjBfUkVHTlVNKSwKKwkJCSAgIHJl Z19ydHgpKTsKKyAgICB9CisKKyAgZm9yIChyZWdubyA9IFIwX1JFR05VTTsg cmVnbm8gPD0gbWF4cmVnbm87IHJlZ25vKyspCisgICAgeworICAgICAgaWYg KCEodG9fY2xlYXJfbWFza1tyZWdubyAvIDY0XSAmICgxVUxMIDw8IChyZWdu byAlIDY0KSkpKQorCWNvbnRpbnVlOworCisgICAgICBpZiAoSVNfVkZQX1JF R05VTSAocmVnbm8pKQorCXsKKwkgIC8qIElmIHJlZ25vIGlzIGFuIGV2ZW4g dmZwIHJlZ2lzdGVyIGFuZCBpdHMgc3VjY2Vzc29yIGlzIGFsc28gdG8KKwkg ICAgIGJlIGNsZWFyZWQsIHVzZSB2bW92LiAgKi8KKwkgIGlmIChUQVJHRVRf VkZQX0RPVUJMRQorCSAgICAgICYmIFZGUF9SRUdOT19PS19GT1JfRE9VQkxF IChyZWdubykKKwkgICAgICAmJiB0b19jbGVhcl9tYXNrW3JlZ25vIC8gNjRd ICYgKDFVTEwgPDwgKChyZWdubyAlIDY0KSArIDEpKSkKKwkgICAgeworCSAg ICAgIGVtaXRfbW92ZV9pbnNuIChnZW5fcnR4X1JFRyAoREZtb2RlLCByZWdu bysrKSwKKwkJCSAgICAgIENPTlNUMV9SVFggKERGbW9kZSkpOworCSAgICAg IGVtaXRfdXNlIChnZW5fcnR4X1JFRyAoREZtb2RlLCByZWdubykpOworCSAg ICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBlbWl0X21vdmVfaW5zbiAo Z2VuX3J0eF9SRUcgKFNGbW9kZSwgcmVnbm8pLAorCQkJICAgICAgQ09OU1Qx X1JUWCAoU0Ztb2RlKSk7CisJICAgICAgZW1pdF91c2UgKGdlbl9ydHhfUkVH IChTRm1vZGUsIHJlZ25vKSk7CisJICAgIH0KKwl9CisgICAgICBlbHNlCisJ eworCSAgaWYgKFRBUkdFVF9USFVNQjEpCisJICAgIHsKKwkgICAgICBpZiAo cmVnbm8gPT0gUjBfUkVHTlVNKQorCQllbWl0X21vdmVfaW5zbiAoZ2VuX3J0 eF9SRUcgKFNJbW9kZSwgcmVnbm8pLAorCQkJCWNvbnN0MF9ydHgpOworCSAg ICAgIGVsc2UKKwkJLyogUjAgaGFzIGVpdGhlciBiZWVuIGNsZWFyZWQgYmVm b3JlLCBzZWUgY29kZSBhYm92ZSwgb3IgaXQKKwkJICAgaG9sZHMgYSByZXR1 cm4gdmFsdWUsIGVpdGhlciB3YXkgaXQgaXMgbm90IHNlY3JldAorCQkgICBp bmZvcm1hdGlvbi4gICovCisJCWVtaXRfbW92ZV9pbnNuIChnZW5fcnR4X1JF RyAoU0ltb2RlLCByZWdubyksCisJCQkJZ2VuX3J0eF9SRUcgKFNJbW9kZSwg UjBfUkVHTlVNKSk7CisJICAgICAgZW1pdF91c2UgKGdlbl9ydHhfUkVHIChT SW1vZGUsIHJlZ25vKSk7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAg ICAgIGVtaXRfbW92ZV9pbnNuIChnZW5fcnR4X1JFRyAoU0ltb2RlLCByZWdu byksCisJCQkgICAgICBnZW5fcnR4X1JFRyAoU0ltb2RlLCBMUl9SRUdOVU0p KTsKKwkgICAgICBlbWl0X3VzZSAoZ2VuX3J0eF9SRUcgKFNJbW9kZSwgcmVn bm8pKTsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKIC8qIEdlbmVyYXRlIHBh dHRlcm4gKnBvcF9tdWx0aXBsZV93aXRoX3N0YWNrX3VwZGF0ZV9hbmRfcmV0 dXJuIGlmIHNpbmdsZQogICAgUE9QIGluc3RydWN0aW9uIGNhbiBiZSBnZW5l cmF0ZWQuICBMUiBzaG91bGQgYmUgcmVwbGFjZWQgYnkgUEMuICBBbGwKICAg IHRoZSBjaGVja3MgcmVxdWlyZWQgYXJlIGFscmVhZHkgZG9uZSBieSAgVVNF X1JFVFVSTl9JTlNOICgpLiAgSGVuY2UsCkBAIC0yNTMzNCw2ICsyNTc5OSw4 IEBAIHRodW1iMl9leHBhbmRfcmV0dXJuIChib29sIHNpbXBsZV9yZXR1cm4p CiAgICAgfQogICBlbHNlCiAgICAgeworICAgICAgaWYgKElTX0NNU0VfRU5U UlkgKGFybV9jdXJyZW50X2Z1bmNfdHlwZSAoKSkpCisJY21zZV9ub25zZWN1 cmVfZW50cnlfY2xlYXJfYmVmb3JlX3JldHVybiAoKTsKICAgICAgIGVtaXRf anVtcF9pbnNuIChzaW1wbGVfcmV0dXJuX3J0eCk7CiAgICAgfQogfQpAQCAt MjUzOTIsNiArMjU4NTksMTAgQEAgdGh1bWIxX2V4cGFuZF9lcGlsb2d1ZSAo dm9pZCkKIAogICBpZiAoISBkZl9yZWdzX2V2ZXJfbGl2ZV9wIChMUl9SRUdO VU0pKQogICAgIGVtaXRfdXNlIChnZW5fcnR4X1JFRyAoU0ltb2RlLCBMUl9S RUdOVU0pKTsKKworICAvKiBDbGVhciBhbGwgY2FsbGVyLXNhdmVkIHJlZ3Mg dGhhdCBhcmUgbm90IHVzZWQgdG8gcmV0dXJuLiAgKi8KKyAgaWYgKElTX0NN U0VfRU5UUlkgKGFybV9jdXJyZW50X2Z1bmNfdHlwZSAoKSkpCisgICAgY21z ZV9ub25zZWN1cmVfZW50cnlfY2xlYXJfYmVmb3JlX3JldHVybiAoKTsKIH0K IAogLyogRXBpbG9ndWUgY29kZSBmb3IgQVBDUyBmcmFtZS4gICovCkBAIC0y NTgyNiw2ICsyNjI5NywxNCBAQCBhcm1fZXhwYW5kX2VwaWxvZ3VlIChib29s IHJlYWxseV9yZXR1cm4pCiAJCQkJICAgc3RhY2tfcG9pbnRlcl9ydHgsIHN0 YWNrX3BvaW50ZXJfcnR4KTsKICAgICB9CiAKKyAgICAvKiBDbGVhciBhbGwg Y2FsbGVyLXNhdmVkIHJlZ3MgdGhhdCBhcmUgbm90IHVzZWQgdG8gcmV0dXJu LiAgKi8KKyAgICBpZiAoSVNfQ01TRV9FTlRSWSAoYXJtX2N1cnJlbnRfZnVu Y190eXBlICgpKSkKKyAgICAgIHsKKwkvKiBDTVNFX0VOVFJZIGFsd2F5cyBy ZXR1cm5zLiAgKi8KKwlnY2NfYXNzZXJ0IChyZWFsbHlfcmV0dXJuKTsKKwlj bXNlX25vbnNlY3VyZV9lbnRyeV9jbGVhcl9iZWZvcmVfcmV0dXJuICgpOwor ICAgICAgfQorCiAgIGlmICghcmVhbGx5X3JldHVybikKICAgICByZXR1cm47 CiAKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYXJtL3RodW1iMS5tZCBiL2dj Yy9jb25maWcvYXJtL3RodW1iMS5tZAppbmRleCBjZDk4ZGU3ZGNiNDBkZTQ4 M2E5ZjkzYzA2NzRiZDIxNmY0YjBjNTZhLi40MzNmYzc5YWU1ODEwYTRkM2Vi NDVkMWJhODA4NzJhMzllMTU3ZTE0IDEwMDY0NAotLS0gYS9nY2MvY29uZmln L2FybS90aHVtYjEubWQKKysrIGIvZ2NjL2NvbmZpZy9hcm0vdGh1bWIxLm1k CkBAIC0xODQzLDggKzE4NDMsMTMgQEAKICAgIioKICAgICByZXR1cm4gdGh1 bWIxX3VuZXhwYW5kZWRfZXBpbG9ndWUgKCk7CiAgICIKLSAgOyBMZW5ndGgg aXMgYWJzb2x1dGUgd29yc3QgY2FzZQotICBbKHNldF9hdHRyICJsZW5ndGgi ICI0NCIpCisgIDsgTGVuZ3RoIGlzIGFic29sdXRlIHdvcnN0IGNhc2UsIHdo ZW4gdXNpbmcgQ01TRSBhbmQgaWYgdGhpcyBpcyBhbiBlbnRyeQorICA7IGZ1 bmN0aW9uIGFuIGV4dHJhIDQgKE1TUikgYnl0ZXMgd2lsbCBiZSBhZGRlZC4K KyAgWyhzZXQgKGF0dHIgImxlbmd0aCIpCisJKGlmX3RoZW5fZWxzZQorCSAo bWF0Y2hfdGVzdCAiSVNfQ01TRV9FTlRSWSAoYXJtX2N1cnJlbnRfZnVuY190 eXBlICgpKSIpCisJIChjb25zdF9pbnQgNDgpCisJIChjb25zdF9pbnQgNDQp KSkKICAgIChzZXRfYXR0ciAidHlwZSIgImJsb2NrIikKICAgIDs7IFdlIGRv bid0IGNsb2JiZXIgdGhlIGNvbmRpdGlvbnMsIGJ1dCB0aGUgcG90ZW50aWFs IGxlbmd0aCBvZiB0aGlzCiAgICA7OyBvcGVyYXRpb24gaXMgc3VmZmljaWVu dCB0byBtYWtlIGNvbmRpdGlvbmFsaXppbmcgdGhlIHNlcXVlbmNlCmRpZmYg LS1naXQgYS9nY2MvY29uZmlnL2FybS90aHVtYjIubWQgYi9nY2MvY29uZmln L2FybS90aHVtYjIubWQKaW5kZXggYWZmY2Q4MzJiNzJiN2QzNTgzNDdlNzM3 MDI2NWJlNDkyODY2YmI5MC4uZjUwMzNlZjgwMmMwODViZDBjZTQ3OWJjNzAy NmRiOTZkOWUyNTYzMiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0vdGh1 bWIyLm1kCisrKyBiL2djYy9jb25maWcvYXJtL3RodW1iMi5tZApAQCAtMTEx NCwxMiArMTExNCwzMSBAQAogCiAoZGVmaW5lX2luc24gIip0aHVtYjJfcmV0 dXJuIgogICBbKHNpbXBsZV9yZXR1cm4pXQotICAiVEFSR0VUX1RIVU1CMiIK KyAgIlRBUkdFVF9USFVNQjIgJiYgIUlTX0NNU0VfRU5UUlkgKGFybV9jdXJy ZW50X2Z1bmNfdHlwZSAoKSkiCiAgICIqIHJldHVybiBvdXRwdXRfcmV0dXJu X2luc3RydWN0aW9uIChjb25zdF90cnVlX3J0eCwgdHJ1ZSwgZmFsc2UsIHRy dWUpOyIKICAgWyhzZXRfYXR0ciAidHlwZSIgImJyYW5jaCIpCiAgICAoc2V0 X2F0dHIgImxlbmd0aCIgIjQiKV0KICkKIAorKGRlZmluZV9pbnNuICIqdGh1 bWIyX3JldHVybiIKKyAgWyhzaW1wbGVfcmV0dXJuKV0KKyAgIlRBUkdFVF9U SFVNQjIgJiYgSVNfQ01TRV9FTlRSWSAoYXJtX2N1cnJlbnRfZnVuY190eXBl ICgpKSIKKyAgIiogcmV0dXJuIG91dHB1dF9yZXR1cm5faW5zdHJ1Y3Rpb24g KGNvbnN0X3RydWVfcnR4LCB0cnVlLCBmYWxzZSwgdHJ1ZSk7IgorICBbKHNl dF9hdHRyICJ0eXBlIiAiYnJhbmNoIikKKyAgIDsgVGhpcyBpcyBhIHJldHVy biBmcm9tIGEgY21zZV9ub25zZWN1cmVfZW50cnkgZnVuY3Rpb24gc28gY29k ZSB3aWxsIGJlCisgICA7IGFkZGVkIHRvIGNsZWFyIHRoZSBBUFNSIGFuZCBw b3RlbnRpYWxseSB0aGUgRlBTQ1IgaWYgVkZQIGlzIGF2YWlsYWJsZSwgc28K KyAgIDsgd2UgYWRhcHQgdGhlIGxlbmd0aCBhY2NvcmRpbmdseS4KKyAgIChz ZXQgKGF0dHIgImxlbmd0aCIpCisgICAgIChpZl90aGVuX2Vsc2UgKG1hdGNo X3Rlc3QgIlRBUkdFVF9IQVJEX0ZMT0FUIikKKyAgICAgIChjb25zdF9pbnQg MTIpCisgICAgICAoY29uc3RfaW50IDgpKSkKKyAgIDsgV2UgZG8gbm90IHN1 cHBvcnQgcHJlZGljYXRlIGV4ZWN1dGlvbiBvZiByZXR1cm5zIGZyb20gY21z ZV9ub25zZWN1cmVfZW50cnkKKyAgIDsgZnVuY3Rpb25zIGJlY2F1c2Ugd2Ug bmVlZCB0byBjbGVhciB0aGUgQVBTUi4gIFNpbmNlIHByZWRpY2FibGUgaGFz IHRvIGJlCisgICA7IGEgY29uc3RhbnQsIHdlIGhhZCB0byBkdXBsaWNhdGUg dGhlIHRodW1iMl9yZXR1cm4gcGF0dGVybiBmb3IgQ01TRSBlbnRyeQorICAg OyBmdW5jdGlvbnMuCisgICAoc2V0X2F0dHIgInByZWRpY2FibGUiICJubyIp XQorKQorCiAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJ0aHVtYjJfZWhfcmV0 dXJuIgogICBbKHVuc3BlY192b2xhdGlsZSBbKG1hdGNoX29wZXJhbmQ6U0kg MCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiciIpXQogCQkgICAgVlVOU1BFQ19F SF9SRVRVUk4pCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYXJtL2Ntc2UvYmFzZWxpbmUvY21zZS0yLmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvYXJtL2Ntc2UvYmFzZWxpbmUvY21zZS0yLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMC4uODE0NTAyZDRlNWQ1ZWY4N2U5MjA5NzdiOTEy ZjY5ZjgzY2RkZTI1NgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hcm0vY21zZS9iYXNlbGluZS9jbXNlLTIuYwpAQCAt MCwwICsxLDE5IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBk Zy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX2FyY2hfdjhtX2Jhc2Vf b2sgfSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fYXJjaF92OG1fYmFz ZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1tY21zZSIgfSAgKi8KKworZXh0 ZXJuIGZsb2F0IGJhciAodm9pZCk7CisKK2Zsb2F0IF9fYXR0cmlidXRlX18g KChjbXNlX25vbnNlY3VyZV9lbnRyeSkpCitmb28gKHZvaWQpCit7CisgIHJl dHVybiBiYXIgKCk7Cit9CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgIm1vdnNcdHIxLCByMCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIgIm1vdnNcdHIyLCByMCIgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdnNcdHIzLCByMCIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdlx0aXAsIHIwIiB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibW92XHRs ciwgcjAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJtc3JcdEFQU1JfbnpjdnEsIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlciAiYnhucyIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvYmFzZWxpbmUvc29mdGZw LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvYmFzZWxp bmUvc29mdGZwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDA2OWZjZGFl YmZkOWNhZWEwMjc1MTg1NjAzOWEzYWFlZmQzZmZhYgotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9iYXNl bGluZS9zb2Z0ZnAuYwpAQCAtMCwwICsxLDI5IEBACisvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQg YXJtX2FyY2hfdjhtX2Jhc2Vfb2sgfSAqLworLyogeyBkZy1hZGQtb3B0aW9u cyBhcm1fYXJjaF92OG1fYmFzZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1t Y21zZSAtbWZsb2F0LWFiaT1zb2Z0ZnAiIH0gKi8KKworZG91YmxlIF9fYXR0 cmlidXRlX18gKChjbXNlX25vbnNlY3VyZV9jYWxsKSkgKCpiYXIpIChmbG9h dCwgZG91YmxlKTsKKworZG91YmxlCitmb28gKGRvdWJsZSBhKQoreworICBy ZXR1cm4gYmFyICgxLjBmLCAyLjApICsgYTsKK30KKworZmxvYXQgX19hdHRy aWJ1dGVfXyAoKGNtc2Vfbm9uc2VjdXJlX2VudHJ5KSkKK2JheiAoZmxvYXQg YSwgZG91YmxlIGIpCit7CisgIHJldHVybiAoZmxvYXQpIGJhciAoYSwgYik7 Cit9CisKKy8qIE1ha2Ugc3VyZSB3ZSBhcmUgbm90IHVzaW5nIEZQIGluc3Ry dWN0aW9ucywgc2luY2UgQVJNdjgtTSBCYXNlbGluZSBkb2VzIG5vdAorICAg c3VwcG9ydCBzdWNoIGluc3RydWN0aW9ucy4gICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJ2bW92IiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInZtc3IiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAidm1ycyIgfSB9ICov CisKKy8qIEp1c3QgZG91YmxlIGNoZWNraW5nIHRoYXQgd2UgYXJlIHN0aWxs IGRvaW5nIGNtc2UgdGhvdWdoLiAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3QgInZtcnMiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJibFx0X19nbnVfY21zZV9ub25zZWN1cmVfY2Fs bCIgfSB9ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hcm0vY21zZS9iaXRmaWVsZC0xLmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYXJtL2Ntc2UvYml0ZmllbGQtMS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAuLmZjY2M1MWQ1YzgyZjc5NTVlZTRjYjgyNTZjMWRkMzhmOWZm MjY3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYXJtL2Ntc2UvYml0ZmllbGQtMS5jCkBAIC0wLDAgKzEsMzkgQEAK Ky8qIHsgZGctZG8gcnVuIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLS1zYXZl LXRlbXBzIC1tY21zZSAtV2wsLS1zZWN0aW9uLXN0YXJ0LC5nbnUuc2dzdHVi cz0weDIwNDAwMDAwIiB9ICovCisKK3R5cGVkZWYgc3RydWN0Cit7CisgIHVu c2lnbmVkIHNob3J0ICBhIDogNjsKKyAgdW5zaWduZWQgY2hhcgkgIGIgOiAz OworICB1bnNpZ25lZCBjaGFyCSAgYzsKKyAgdW5zaWduZWQgc2hvcnQgIGQg OiA4OworfSB0ZXN0X3N0OworCit0ZXN0X3N0IF9fYXR0cmlidXRlX18gKChj bXNlX25vbnNlY3VyZV9lbnRyeSkpIGZvbyAodm9pZCkKK3sKKyAgdGVzdF9z dCB0OworICB0LmEgPSA2M3U7CisgIHQuYiA9IDd1OworICB0LmMgPSAyNTV1 OworICB0LmQgPSAyNTV1OworICByZXR1cm4gdDsKK30KKworaW50CittYWlu ICh2b2lkKQoreworICB0ZXN0X3N0IHQ7CisgIHQgPSBmb28gKCk7CisgIGlm ICh0LmEgIT0gNjN1CisgICAgICB8fCB0LmIgIT0gN3UKKyAgICAgIHx8IHQu YyAhPSAyNTV1CisgICAgICB8fCB0LmQgIT0gMjU1dSkKKyAgICBfX2J1aWx0 aW5fYWJvcnQgKCk7CisgIHJldHVybiAwOworfQorCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXIgIm1vdndcdHIxLCAjMTg1NSIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdnRcdHIxLCA2NTUz NSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImFu ZHNcdHIwKCwgcjApPywgcjEiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJieG5zIiB9IH0gKi8KKwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9jbXNlL2JpdGZpZWxkLTIuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9iaXRmaWVsZC0y LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTZhZWUzYzRjMDIyZDUwYmFl YzhhYjE2NDQzMTMwODk3NTQwZTcwMwotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9iaXRmaWVsZC0yLmMK QEAgLTAsMCArMSwzNiBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBk Zy1vcHRpb25zICItLXNhdmUtdGVtcHMgLW1jbXNlIC1XbCwtLXNlY3Rpb24t c3RhcnQsLmdudS5zZ3N0dWJzPTB4MjA0MDAwMDAiIH0gKi8KKwordHlwZWRl ZiBzdHJ1Y3QKK3sKKyAgc2hvcnQJICAgICAgYSA6IDc7CisgIHNpZ25lZCBj aGFyIGIgOiAzOworICBzaG9ydAkgICAgICBjIDogMTE7Cit9IHRlc3Rfc3Q7 CisKK3Rlc3Rfc3QgX19hdHRyaWJ1dGVfXyAoKGNtc2Vfbm9uc2VjdXJlX2Vu dHJ5KSkgZm9vICh2b2lkKQoreworICB0ZXN0X3N0IHQ7CisgIHQuYSA9IC02 NDsKKyAgdC5iID0gLTQgOworICB0LmMgPSAtMTAyNDsKKyAgcmV0dXJuIHQ7 Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgdGVzdF9zdCB0OworICB0 ID0gZm9vICgpOworICBpZiAodC5hICE9IC02NAorICAgICAgfHwgdC5iICE9 IC00CisgICAgICB8fCB0LmMgIT0gLTEwMjQpCisgICAgX19idWlsdGluX2Fi b3J0ICgpOworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJtb3Z3XHRyMSwgIzE5MTkiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJtb3Z0XHRyMSwgMjA0NyIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImFuZHNcdHIw KCwgcjApPywgcjEiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJieG5zIiB9IH0gKi8KKwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FybS9jbXNlL2JpdGZpZWxkLTMuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9iaXRmaWVsZC0zLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg1YTJiOTJmNjRjMTkxM2VmNTg1Yjhk YWE0ZDI3YzZkYTBhM2QyZgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9iaXRmaWVsZC0zLmMKQEAgLTAs MCArMSwzNyBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1vcHRp b25zICItLXNhdmUtdGVtcHMgLW1jbXNlIC1XbCwtLXNlY3Rpb24tc3RhcnQs LmdudS5zZ3N0dWJzPTB4MjA0MDAwMDAiIH0gKi8KKwordHlwZWRlZiBzdHJ1 Y3QKK3sKKyAgc2hvcnQJICAgICAgYTsKKyAgc2lnbmVkIGNoYXIgYiA6IDI7 CisgIHNob3J0CQk6IDE7CisgIHNpZ25lZCBjaGFyIGMgOiAzOworfSB0ZXN0 X3N0OworCit0ZXN0X3N0IF9fYXR0cmlidXRlX18gKChjbXNlX25vbnNlY3Vy ZV9lbnRyeSkpIGZvbyAodm9pZCkKK3sKKyAgdGVzdF9zdCB0OworICB0LmEg PSAtMzI3Njg7CisgIHQuYiA9IC0yOworICB0LmMgPSAtNDsKKyAgcmV0dXJu IHQ7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgdGVzdF9zdCB0Owor ICB0ID0gZm9vICgpOworICBpZiAodC5hICE9IC0zMjc2OAorICAgICAgfHwg dC5iICE9IC0yCisgICAgICB8fCB0LmMgIT0gLTQpCisgICAgX19idWlsdGlu X2Fib3J0ICgpOworICByZXR1cm4gMDsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJtb3Z3XHRyMSwgIzY1NTM1IiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibW92dFx0cjEsIDYzIiB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiYW5kc1x0 cjAoLCByMCk/LCByMSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgImJ4bnMiIH0gfSAqLworCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvY21zZS5leHAgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvY21zZS5leHAKaW5kZXggZjc5 N2RiYTE5MDE3MjBlMDQyNDlkNjEwNzhjMWNiZjJhM2U0MzZhOS4uMzhmMTg0 MTRjMmZlZmVjNTYxNjFlNmFjM2Y3MjkxYjAzYTNiMjlhMyAxMDA2NDQKLS0t IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9jbXNlL2Ntc2UuZXhw CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9jbXNl LmV4cApAQCAtNDMsNiArNDMsMjYgQEAgc2V0IExUT19UT1JUVVJFX09QVElP TlMgIiIKIGdjYy1kZy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAkc3JjZGlyLyRz dWJkaXIvKi5jXV0gXAogCSIiICRERUZBVUxUX0NGTEFHUwogCitpZiB7W2No ZWNrX2VmZmVjdGl2ZV90YXJnZXRfYXJtX2FyY2hfdjhtX2Jhc2Vfb2tdfSB0 aGVuIHsKKyAgICAjIEJhc2VsaW5lIG9ubHkKKyAgICBnY2MtZGctcnVudGVz dCBbbHNvcnQgW2dsb2IgJHNyY2Rpci8kc3ViZGlyL2Jhc2VsaW5lLyouY11d IFwKKwkgICAgIiIgJERFRkFVTFRfQ0ZMQUdTCit9CisKK2lmIHtbY2hlY2tf ZWZmZWN0aXZlX3RhcmdldF9hcm1fYXJjaF92OG1fbWFpbl9va119IHRoZW4g eworICAgICMgTWFpbmxpbmUgLW1mbG9hdC1hYmk9c29mdAorICAgIGdjYy1k Zy1ydW50ZXN0IFtsc29ydCBbZ2xvYiAkc3JjZGlyLyRzdWJkaXIvbWFpbmxp bmUvc29mdC8qLmNdXSBcCisJICAgICItbWZsb2F0LWFiaT1zb2Z0IiAkREVG QVVMVF9DRkxBR1MKKyAgICBnY2MtZGctcnVudGVzdCBbbHNvcnQgW2dsb2Ig JHNyY2Rpci8kc3ViZGlyL21haW5saW5lL3NvZnRmcC8qLmNdXSBcCisJICAg ICIiICRERUZBVUxUX0NGTEFHUworICAgIGdjYy1kZy1ydW50ZXN0IFtsc29y dCBbZ2xvYiAkc3JjZGlyLyRzdWJkaXIvbWFpbmxpbmUvc29mdGZwLXNwLyou Y11dIFwKKwkgICAgIiIgJERFRkFVTFRfQ0ZMQUdTCisgICAgZ2NjLWRnLXJ1 bnRlc3QgW2xzb3J0IFtnbG9iICRzcmNkaXIvJHN1YmRpci9tYWlubGluZS9o YXJkLyouY11dIFwKKwkgICAgIiIgJERFRkFVTFRfQ0ZMQUdTCisgICAgZ2Nj LWRnLXJ1bnRlc3QgW2xzb3J0IFtnbG9iICRzcmNkaXIvJHN1YmRpci9tYWlu bGluZS9oYXJkLXNwLyouY11dIFwKKwkgICAgIiIgJERFRkFVTFRfQ0ZMQUdT Cit9CisKIHNldCBMVE9fVE9SVFVSRV9PUFRJT05TICR7c2F2ZWQtbHRvX3Rv cnR1cmVfb3B0aW9uc30KIHNldCBkZy1kby13aGF0LWRlZmF1bHQgJHtzYXZl ZC1kZy1kby13aGF0LWRlZmF1bHR9CiAKZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9tYWlubGluZS9oYXJkLXNwL2Nt c2UtNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9jbXNlL21h aW5saW5lL2hhcmQtc3AvY21zZS01LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MC4uODhkZWMyNzYyODEyNjE0ZWU5ODZlZTFhMDIzYzBhY2NlOGY5NGM5MQot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h cm0vY21zZS9tYWlubGluZS9oYXJkLXNwL2Ntc2UtNS5jCkBAIC0wLDAgKzEs NDUgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLXJlcXVp cmUtZWZmZWN0aXZlLXRhcmdldCBhcm1fYXJjaF92OG1fbWFpbl9vayB9ICov CisvKiB7IGRnLWFkZC1vcHRpb25zIGFybV9hcmNoX3Y4bV9tYWluIH0gKi8K Ky8qIHsgZGctc2tpcC1pZiAiRG8gbm90IGNvbWJpbmUgZmxvYXQtYWJpPSBo YXJkIHwgc29mdCB8IHNvZnRmcCIgeyotKi0qfSB7Ii1tZmxvYXQtYWJpPXNv ZnQiIC1tZmxvYXQtYWJpPXNvZnRmcCB9IHsiIn0gfSAqLworLyogeyBkZy1z a2lwLWlmICJTa2lwIHRoZXNlIGlmIHRlc3RpbmcgZG91YmxlIHByZWNpc2lv biIgeyotKi0qfSB7Ii1tZnB1PWZwdls0LTVdLWQxNiJ9IHsiIn0gfSAqLwor LyogeyBkZy1vcHRpb25zICItbWNtc2UgLW1mbG9hdC1hYmk9aGFyZCAtbWZw dT1mcHY1LXNwLWQxNiIgfSAgKi8KKworZXh0ZXJuIGZsb2F0IGJhciAodm9p ZCk7CisKK2Zsb2F0IF9fYXR0cmlidXRlX18gKChjbXNlX25vbnNlY3VyZV9l bnRyeSkpCitmb28gKHZvaWQpCit7CisgIHJldHVybiBiYXIgKCk7Cit9Cisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdlx0cjAsIGxyIiB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibW92XHRy MSwgbHIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJtb3ZcdHIyLCBsciIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgIm1vdlx0cjMsIGxyIiB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci1ub3QgInZtb3ZcLmYzMlx0czAsICMxXC4wIiB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidm1vdlwu ZjMyXHRzMSwgIzFcLjAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyICJ2bW92XC5mMzJcdHMyLCAjMVwuMCIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtb3ZcLmYzMlx0czMsICMx XC4wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAi dm1vdlwuZjMyXHRzNCwgIzFcLjAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJ2bW92XC5mMzJcdHM1LCAjMVwuMCIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtb3ZcLmYzMlx0 czYsICMxXC4wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt YmxlciAidm1vdlwuZjMyXHRzNywgIzFcLjAiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bW92XC5mMzJcdHM4LCAjMVwuMCIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtb3Zc LmYzMlx0czksICMxXC4wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlciAidm1vdlwuZjMyXHRzMTAsICMxXC4wIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidm1vdlwuZjMyXHRzMTEs ICMxXC4wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ciAidm1vdlwuZjMyXHRzMTIsICMxXC4wIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlciAidm1vdlwuZjMyXHRzMTMsICMxXC4wIiB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidm1vdlwu ZjMyXHRzMTQsICMxXC4wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlciAidm1vdlwuZjMyXHRzMTUsICMxXC4wIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibXNyXHRBUFNSX256Y3Zx LCBsciIgeyB0YXJnZXQgeyBhcm1fYXJjaF92OG1fbWFpbl9vayAmJiB7ICEg YXJtX2RzcCB9IH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlciAibXNyXHRBUFNSX256Y3ZxZywgbHIiIHsgdGFyZ2V0IHsgYXJt X2FyY2hfdjhtX21haW5fb2sgJiYgYXJtX2RzcCB9IH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInB1c2hcdHtyNH0iIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bXJzXHRpcCwg ZnBzY3IiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJtb3Z3XHRyNCwgIzY1Mzc2IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlciAibW92dFx0cjQsICM0MDk1IiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiYW5kXHRpcCwgcjQiIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bXNyXHRmcHNj ciwgaXAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJwb3BcdHtyNH0iIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJtb3ZcdGlwLCBsciIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIgImJ4bnMiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9jbXNlL21haW5saW5lL2hhcmQv Y21zZS01LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2Uv bWFpbmxpbmUvaGFyZC9jbXNlLTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw Li4yOWY2MGJhZjUyMTJmOWZhMmU0NDM2ZmU0MGM2YWJlNGFjNjcxMjU0Ci0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2Fy bS9jbXNlL21haW5saW5lL2hhcmQvY21zZS01LmMKQEAgLTAsMCArMSwzOCBA QAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1l ZmZlY3RpdmUtdGFyZ2V0IGFybV9hcmNoX3Y4bV9tYWluX29rIH0gKi8KKy8q IHsgZGctYWRkLW9wdGlvbnMgYXJtX2FyY2hfdjhtX21haW4gfSAqLworLyog eyBkZy1za2lwLWlmICJEbyBub3QgY29tYmluZSBmbG9hdC1hYmk9IGhhcmQg fCBzb2Z0IHwgc29mdGZwIiB7Ki0qLSp9IHsiLW1mbG9hdC1hYmk9c29mdCIg LW1mbG9hdC1hYmk9c29mdGZwIH0geyIifSB9ICovCisvKiB7IGRnLXNraXAt aWYgIlNraXAgdGhlc2UgaWYgdGVzdGluZyBzaW5nbGUgcHJlY2lzaW9uIiB7 Ki0qLSp9IHsiLW1mcHU9Ki1zcC0qIn0geyIifSB9ICovCisvKiB7IGRnLW9w dGlvbnMgIi1tY21zZSAtbWZsb2F0LWFiaT1oYXJkIC1tZnB1PWZwdjUtZDE2 IiB9ICAqLworCitleHRlcm4gZmxvYXQgYmFyICh2b2lkKTsKKworZmxvYXQg X19hdHRyaWJ1dGVfXyAoKGNtc2Vfbm9uc2VjdXJlX2VudHJ5KSkKK2ZvbyAo dm9pZCkKK3sKKyAgcmV0dXJuIGJhciAoKTsKK30KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlciAibW92XHRyMCwgbHIiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJtb3ZcdHIxLCBsciIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdlx0cjIsIGxy IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibW92 XHRyMywgbHIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLW5vdCAidm1vdlwuZjMyXHRzMCwgIzFcLjAiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bW92XC5mMzJcdHMxLCAjMVwu MCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZt b3ZcLmY2NFx0ZDEsICMxXC4wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlciAidm1vdlwuZjY0XHRkMiwgIzFcLjAiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bW92XC5mNjRcdGQz LCAjMVwuMCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgInZtb3ZcLmY2NFx0ZDQsICMxXC4wIiB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlciAidm1vdlwuZjY0XHRkNSwgIzFcLjAiIH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bW92XC5m NjRcdGQ2LCAjMVwuMCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgInZtb3ZcLmY2NFx0ZDcsICMxXC4wIiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAibXNyXHRBUFNSX256Y3ZxLCBs ciIgeyB0YXJnZXQgeyBhcm1fYXJjaF92OG1fbWFpbl9vayAmJiB7ICEgYXJt X2RzcCB9IH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt YmxlciAibXNyXHRBUFNSX256Y3ZxZywgbHIiIHsgdGFyZ2V0IHsgYXJtX2Fy Y2hfdjhtX21haW5fb2sgJiYgYXJtX2RzcCB9IH0gfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInB1c2hcdHtyNH0iIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bXJzXHRpcCwgZnBz Y3IiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJt b3Z3XHRyNCwgIzY1Mzc2IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlciAibW92dFx0cjQsICM0MDk1IiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiYW5kXHRpcCwgcjQiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bXNyXHRmcHNjciwg aXAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJw b3BcdHtyNH0iIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyICJtb3ZcdGlwLCBsciIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIgImJ4bnMiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9jbXNlL21haW5saW5lL3NvZnQvY21z ZS01LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvbWFp bmxpbmUvc29mdC9jbXNlLTUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h NzIyOWVhOGViMmRhMWRhMjY0ZjU4Zjg1MThkYWYzMDNkMWJkZWRhCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9j bXNlL21haW5saW5lL3NvZnQvY21zZS01LmMKQEAgLTAsMCArMSwyNCBAQAor LyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IGFybV9hcmNoX3Y4bV9tYWluX29rIH0gKi8KKy8qIHsg ZGctYWRkLW9wdGlvbnMgYXJtX2FyY2hfdjhtX21haW4gfSAqLworLyogeyBk Zy1za2lwLWlmICJEbyBub3QgY29tYmluZSBmbG9hdC1hYmk9IGhhcmQgfCBz b2Z0IHwgc29mdGZwIiB7Ki0qLSp9IHsiLW1mbG9hdC1hYmk9aGFyZCIgLW1m bG9hdC1hYmk9c29mdGZwIH0geyIifSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1tY21zZSAtbWZsb2F0LWFiaT1zb2Z0IiB9ICAqLworCitleHRlcm4gZmxv YXQgYmFyICh2b2lkKTsKKworZmxvYXQgX19hdHRyaWJ1dGVfXyAoKGNtc2Vf bm9uc2VjdXJlX2VudHJ5KSkKK2ZvbyAodm9pZCkKK3sKKyAgcmV0dXJuIGJh ciAoKTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJt b3ZcdHIxLCBsciIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXIgIm1vdlx0cjIsIGxyIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlciAibW92XHRyMywgbHIiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyICJtb3ZcdGlwLCBsciIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJ2bW92IiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInZtc3Ii IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJtc3Jc dEFQU1JfbnpjdnEsIGxyIiB7IHRhcmdldCB7IGFybV9hcmNoX3Y4bV9tYWlu X29rICYmIHsgISBhcm1fZHNwIH0gfSB9IH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJtc3JcdEFQU1JfbnpjdnFnLCBsciIgeyB0 YXJnZXQgeyBhcm1fYXJjaF92OG1fbWFpbl9vayAmJiBhcm1fZHNwIH0gfSB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAiYnhucyIg fSB9ICovCisKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9hcm0vY21zZS9tYWlubGluZS9zb2Z0ZnAtc3AvY21zZS01LmMgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvbWFpbmxpbmUvc29mdGZw LXNwL2Ntc2UtNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc3MzRkNzdk YzM4MTJlNmExNThlYTFmNmIwNjc5MzA4NDZmZmZjY2IKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvbWFp bmxpbmUvc29mdGZwLXNwL2Ntc2UtNS5jCkBAIC0wLDAgKzEsNDYgQEAKKy8q IHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCBhcm1fYXJjaF92OG1fbWFpbl9vayB9ICovCisvKiB7IGRn LWFkZC1vcHRpb25zIGFybV9hcmNoX3Y4bV9tYWluIH0gKi8KKy8qIHsgZGct c2tpcC1pZiAiRG8gbm90IGNvbWJpbmUgZmxvYXQtYWJpPSBoYXJkIHwgc29m dCB8IHNvZnRmcCIgeyotKi0qfSB7Ii1tZmxvYXQtYWJpPXNvZnQiIC1tZmxv YXQtYWJpPWhhcmQgfSB7IiJ9IH0gKi8KKy8qIHsgZGctc2tpcC1pZiAiU2tp cCB0aGVzZSBpZiB0ZXN0aW5nIGRvdWJsZSBwcmVjaXNpb24iIHsqLSotKn0g eyItbWZwdT1mcHZbNC01XS1kMTYifSB7IiJ9IH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLW1jbXNlIC1tZmxvYXQtYWJpPXNvZnRmcCAtbWZwdT1mcHY1LXNw LWQxNiIgfSAgKi8KKworZXh0ZXJuIGZsb2F0IGJhciAodm9pZCk7CisKK2Zs b2F0IF9fYXR0cmlidXRlX18gKChjbXNlX25vbnNlY3VyZV9lbnRyeSkpCitm b28gKHZvaWQpCit7CisgIHJldHVybiBiYXIgKCk7Cit9CisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXIgIl9fYWNsZV9zZV9mb286IiB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIm1vdlx0cjAs IGxyIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAi bW92XHRyMSwgbHIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJtb3ZcdHIyLCBsciIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXIgIm1vdlx0cjMsIGxyIiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidm1vdlwuZjMyXHRzMCwgIzFcLjAi IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bW92 XC5mMzJcdHMxLCAjMVwuMCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIgInZtb3ZcLmYzMlx0czIsICMxXC4wIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidm1vdlwuZjMyXHRzMywg IzFcLjAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy ICJ2bW92XC5mMzJcdHM0LCAjMVwuMCIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXIgInZtb3ZcLmYzMlx0czUsICMxXC4wIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidm1vdlwuZjMy XHRzNiwgIzFcLjAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJ2bW92XC5mMzJcdHM3LCAjMVwuMCIgfSB9ICovCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtb3ZcLmYzMlx0czgsICMxXC4w IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAidm1v dlwuZjMyXHRzOSwgIzFcLjAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJ2bW92XC5mMzJcdHMxMCwgIzFcLjAiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bW92XC5mMzJcdHMx MSwgIzFcLjAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyICJ2bW92XC5mMzJcdHMxMiwgIzFcLjAiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bW92XC5mMzJcdHMxMywgIzFcLjAi IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bW92 XC5mMzJcdHMxNCwgIzFcLjAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJ2bW92XC5mMzJcdHMxNSwgIzFcLjAiIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJtc3JcdEFQU1Jfbnpj dnEsIGxyIiB7IHRhcmdldCB7IGFybV9hcmNoX3Y4bV9tYWluX29rICYmIHsg ISBhcm1fZHNwIH0gfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyICJtc3JcdEFQU1JfbnpjdnFnLCBsciIgeyB0YXJnZXQgeyBh cm1fYXJjaF92OG1fbWFpbl9vayAmJiBhcm1fZHNwIH0gfSB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAicHVzaFx0e3I0fSIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtcnNcdGlw LCBmcHNjciIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgIm1vdndcdHI0LCAjNjUzNzYiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJtb3Z0XHRyNCwgIzQwOTUiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJhbmRcdGlwLCByNCIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtc3JcdGZw c2NyLCBpcCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgInBvcFx0e3I0fSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXIgIm1vdlx0aXAsIGxyIiB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlciAiYnhucyIgfSB9ICovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2UvbWFpbmxpbmUvc29m dGZwL2Ntc2UtNS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9j bXNlL21haW5saW5lL3NvZnRmcC9jbXNlLTUuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwLi42YWRkYWExYTRlZGE4ZTI5MzBkNWZlNzJjOTQ2OTdiY2Y2ZTYw NGU0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2FybS9jbXNlL21haW5saW5lL3NvZnRmcC9jbXNlLTUuYwpAQCAtMCww ICsxLDM4IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX2FyY2hfdjhtX21haW5fb2sg fSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fYXJjaF92OG1fbWFpbiB9 ICovCisvKiB7IGRnLXNraXAtaWYgIkRvIG5vdCBjb21iaW5lIGZsb2F0LWFi aT0gaGFyZCB8IHNvZnQgfCBzb2Z0ZnAiIHsqLSotKn0geyItbWZsb2F0LWFi aT1zb2Z0IiAtbWZsb2F0LWFiaT1oYXJkIH0geyIifSB9ICovCisvKiB7IGRn LXNraXAtaWYgIlNraXAgdGhlc2UgaWYgdGVzdGluZyBzaW5nbGUgcHJlY2lz aW9uIiB7Ki0qLSp9IHsiLW1mcHU9Ki1zcC0qIn0geyIifSB9ICovCisvKiB7 IGRnLW9wdGlvbnMgIi1tY21zZSAtbWZsb2F0LWFiaT1zb2Z0ZnAgLW1mcHU9 ZnB2NS1kMTYiIH0gICovCisKK2V4dGVybiBmbG9hdCBiYXIgKHZvaWQpOwor CitmbG9hdCBfX2F0dHJpYnV0ZV9fICgoY21zZV9ub25zZWN1cmVfZW50cnkp KQorZm9vICh2b2lkKQoreworICByZXR1cm4gYmFyICgpOworfQorLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJfX2FjbGVfc2VfZm9vOiIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJtb3Zc dHIwLCBsciIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXIgIm1vdlx0cjEsIGxyIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlciAibW92XHRyMiwgbHIiIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyICJtb3ZcdHIzLCBsciIgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtb3ZcLmY2NFx0ZDAsICMx XC4wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAi dm1vdlwuZjY0XHRkMSwgIzFcLjAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyICJ2bW92XC5mNjRcdGQyLCAjMVwuMCIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtb3ZcLmY2NFx0 ZDMsICMxXC4wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt YmxlciAidm1vdlwuZjY0XHRkNCwgIzFcLjAiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyICJ2bW92XC5mNjRcdGQ1LCAjMVwuMCIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtb3Zc LmY2NFx0ZDYsICMxXC4wIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlciAidm1vdlwuZjY0XHRkNywgIzFcLjAiIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJtc3JcdEFQU1JfbnpjdnEs IGxyIiB7IHRhcmdldCB7IGFybV9hcmNoX3Y4bV9tYWluX29rICYmIHsgISBh cm1fZHNwIH0gfSB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyICJtc3JcdEFQU1JfbnpjdnFnLCBsciIgeyB0YXJnZXQgeyBhcm1f YXJjaF92OG1fbWFpbl9vayAmJiBhcm1fZHNwIH0gfSB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlciAicHVzaFx0e3I0fSIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtcnNcdGlwLCBm cHNjciIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIg Im1vdndcdHI0LCAjNjUzNzYiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJtb3Z0XHRyNCwgIzQwOTUiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyICJhbmRcdGlwLCByNCIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgInZtc3JcdGZwc2Ny LCBpcCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIg InBvcFx0e3I0fSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXIgIm1vdlx0aXAsIGxyIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlciAiYnhucyIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2Uvc3RydWN0LTEuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vY21zZS9zdHJ1Y3QtMS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjJkMzY2YTk0NGRmNjkyZjI5YWI0NGUz ZWU0ZDMzYzc3N2IxMjYyMjMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYXJtL2Ntc2Uvc3RydWN0LTEuYwpAQCAtMCww ICsxLDMzIEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisvKiB7IGRnLW9wdGlv bnMgIi0tc2F2ZS10ZW1wcyAtbWNtc2UgLVdsLC0tc2VjdGlvbi1zdGFydCwu Z251LnNnc3R1YnM9MHgyMDQwMDAwMCIgfSAqLworCit0eXBlZGVmIHN0cnVj dAoreworICB1bnNpZ25lZCBjaGFyCSAgYTsKKyAgdW5zaWduZWQgc2hvcnQg IGI7Cit9IHRlc3Rfc3Q7CisKK3Rlc3Rfc3QgX19hdHRyaWJ1dGVfXyAoKGNt c2Vfbm9uc2VjdXJlX2VudHJ5KSkgZm9vICh2b2lkKQoreworICB0ZXN0X3N0 IHQ7CisgIHQuYSA9IDI1NXU7CisgIHQuYiA9IDMyNzY3dTsKKyAgcmV0dXJu IHQ7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgdGVzdF9zdCB0Owor ICB0ID0gZm9vICgpOworICBpZiAodC5hICE9IDI1NXUgfHwgdC5iICE9IDMy NzY3dSkKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisgIHJldHVybiAwOwor fQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgIm1vdnNcdHIx LCAjMjU1IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ciAibW92dFx0cjEsIDY1NTM1IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlciAiYW5kc1x0cjAoLCByMCk/LCByMSIgfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIgImJ4bnMiIH0gfSAqLwor CisK --------------070509040903020803080708--