From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C98E8A04B1; Wed, 9 Sep 2020 11:00:22 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AA44D1BF8D; Wed, 9 Sep 2020 11:00:21 +0200 (CEST) Received: from m1388.mail.163.com (m1388.mail.163.com [220.181.13.88]) by dpdk.org (Postfix) with ESMTP id 97DEE1BE0C for ; Wed, 9 Sep 2020 11:00:16 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=163.com; s=s110527; h=Date:From:Subject:MIME-Version:Message-ID; bh=kZO0g fD9mbkUJvkqbhaIk82eu5VjNYIvGCKwEC/dPxs=; b=DyKzk1MN7XpHDTnFWskd0 thPC5Bugo+Aftw6J3WUG1URmBbq8P4Qf7doAZQOnqcDdRC1s/AxLvqT37f+ZEX7R NuSTm/hLD7nAVBimpLCGGo5ETS65Ik/9t+o9CLbCvg8t5sfAoJlioQTiteCn4vLr NcQTlHQA3vfMSanmvYSz6M= Received: from yang_y_yi$163.com ( [111.207.123.58] ) by ajax-webmail-wmsvr88 (Coremail) ; Wed, 9 Sep 2020 17:00:12 +0800 (CST) X-Originating-IP: [111.207.123.58] Date: Wed, 9 Sep 2020 17:00:12 +0800 (CST) From: yang_y_yi To: "Jiayu Hu" Cc: thomas@monjalon.net, dev@dpdk.org, yangyi01@inspur.com X-Priority: 1 X-Mailer: Coremail Webmail Server Version XT5.0.10 build 20190724(ac680a23) Copyright (c) 2002-2020 www.mailtech.cn 163com In-Reply-To: <3d73e64d.45c4.17471c10896.Coremail.yang_y_yi@163.com> References: <20200904083740.71272-1-yang_y_yi@163.com> <20200904083740.71272-2-yang_y_yi@163.com> <20200908020516.GA68491@NPG_DPDK_VIRTIO_jiayuhu_15.sh.intel.com> <3d73e64d.45c4.17471c10896.Coremail.yang_y_yi@163.com> X-CM-CTRLDATA: 1WKOyWZvb3Rlcl9odG09NTIwNjc6NTY= MIME-Version: 1.0 Message-ID: <42e99430.5aa5.17472180a8e.Coremail.yang_y_yi@163.com> X-Coremail-Locale: zh_CN X-CM-TRANSID: WMGowAAHMMOcmVhfyDx2AA--.14186W X-CM-SenderInfo: 51dqwsp1b1xqqrwthudrp/1tbiEAKai18YDB-OgAACsb X-Coremail-Antispam: 1U5529EdanIXcx71UUUUU7vcSsGvfC2KfnxnUU== Content-Type: text/plain; charset=GBK Content-Transfer-Encoding: base64 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: Re: [dpdk-dev] [PATCH v4 1/2] gro: add UDP GRO support X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" VGhpcyBpcyBpbmNyZW1lbnRhbCBwYXRjaCB0byBmaXggeW91ciBuZXcgY29tbWVudHMsIEknbGwg c2VuZCBvdXQgdjUgaWYgbm8gbW9yZSBjb21tZW50cyBoZXJlLgoKCgpkaWZmIC0tZ2l0IGEvbGli L2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuYyBiL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmMKCmluZGV4 IDI1NTg0ZmQuLjA2MWU3YjAgMTAwNjQ0Ci0tLSBhL2xpYi9saWJydGVfZ3JvL2dyb191ZHA0LmMK KysrIGIvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAg ICAgdWludDMyX3QgaXRlbV9pZHg7CgogICAgICAgIGl0ZW1faWR4ID0gZmluZF9hbl9lbXB0eV9p dGVtKHRibCk7Ci0gICAgICAgaWYgKGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpCisg ICAgICAgaWYgKHVubGlrZWx5KGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpKQogICAg ICAgICAgICAgICAgcmV0dXJuIElOVkFMSURfQVJSQVlfSU5ERVg7CgogICAgICAgIHRibC0+aXRl bXNbaXRlbV9pZHhdLmZpcnN0c2VnID0gcGt0OwpAQCAtMTYzLDcgKzE2Myw2IEBACiAgICAgICAg ZHN0LT5pcF9zcmNfYWRkciA9IHNyYy0+aXBfc3JjX2FkZHI7CiAgICAgICAgZHN0LT5pcF9kc3Rf YWRkciA9IHNyYy0+aXBfZHN0X2FkZHI7CiAgICAgICAgZHN0LT5pcF9pZCA9IHNyYy0+aXBfaWQ7 Ci0gICAgICAgZHN0LT5pcF9pZCA9IHNyYy0+aXBfaWQ7CgogICAgICAgIHRibC0+Zmxvd3NbZmxv d19pZHhdLnN0YXJ0X2luZGV4ID0gaXRlbV9pZHg7CiAgICAgICAgdGJsLT5mbG93X251bSsrOwpA QCAtMjI2LDEwICsyMjUsMTQgQEAKICAgICAgICAgKiBEb24ndCBwcm9jZXNzIHRoZSBwYWNrZXQg d2hvc2UgcGF5bG9hZCBsZW5ndGggaXMgbGVzcyB0aGFuIG9yCiAgICAgICAgICogZXF1YWwgdG8g MC4KICAgICAgICAgKi8KLSAgICAgICBpZiAocGt0LT5wa3RfbGVuIC0gaGRyX2xlbiA8PSAwKQor ICAgICAgIGlmIChwa3QtPnBrdF9sZW4gPD0gaGRyX2xlbikKKyAgICAgICAgICAgICAgIHJldHVy biAtMTsKKworICAgICAgIGlwX2RsID0gcnRlX2JlX3RvX2NwdV8xNihpcHY0X2hkci0+dG90YWxf bGVuZ3RoKTsKKyAgICAgICBpZiAoaXBfZGwgPD0gcGt0LT5sM19sZW4pCiAgICAgICAgICAgICAg ICByZXR1cm4gLTE7CgotICAgICAgIGlwX2RsID0gcnRlX2JlX3RvX2NwdV8xNihpcHY0X2hkci0+ dG90YWxfbGVuZ3RoKSAtIHBrdC0+bDNfbGVuOworICAgICAgIGlwX2RsIC09IHBrdC0+bDNfbGVu OwogICAgICAgIGlwX2lkID0gcnRlX2JlX3RvX2NwdV8xNihpcHY0X2hkci0+cGFja2V0X2lkKTsK ICAgICAgICBmcmFnX29mZnNldCA9IHJ0ZV9iZV90b19jcHVfMTYoaXB2NF9oZHItPmZyYWdtZW50 X29mZnNldCk7CiAgICAgICAgaXNfbGFzdF9mcmFnID0gKChmcmFnX29mZnNldCAmIFJURV9JUFY0 X0hEUl9NRl9GTEFHKSA9PSAwKSA/IDEgOiAwOwpAQCAtMjYzLDcgKzI2Niw3IEBACiAgICAgICAg ICAgICAgICBpdGVtX2lkeCA9IGluc2VydF9uZXdfaXRlbSh0YmwsIHBrdCwgc3RhcnRfdGltZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlZBTElEX0FSUkFZX0lOREVYLCBmcmFn X29mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc19sYXN0X2ZyYWcpOwot ICAgICAgICAgICAgICAgaWYgKGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpCisgICAg ICAgICAgICAgICBpZiAodW5saWtlbHkoaXRlbV9pZHggPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkp CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgIGlmIChp bnNlcnRfbmV3X2Zsb3codGJsLCAma2V5LCBpdGVtX2lkeCkgPT0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJTlZBTElEX0FSUkFZX0lOREVYKSB7CkBAIC0yODQsNyArMjg3LDcgQEAK ICAgICAgICBjdXJfaWR4ID0gdGJsLT5mbG93c1tpXS5zdGFydF9pbmRleDsKICAgICAgICBwcmV2 X2lkeCA9IGN1cl9pZHg7CiAgICAgICAgZG8gewotICAgICAgICAgICAgICAgY21wID0gdWRwX2No ZWNrX25laWdoYm9yKCYodGJsLT5pdGVtc1tjdXJfaWR4XSksCisgICAgICAgICAgICAgICBjbXAg PSB1ZHA0X2NoZWNrX25laWdoYm9yKCYodGJsLT5pdGVtc1tjdXJfaWR4XSksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZnJhZ19vZmZzZXQsIGlwX2RsLCAwKTsKICAgICAgICAgICAg ICAgIGlmIChjbXApIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlX3R3b191ZHA0 X3BhY2tldHMoJih0YmwtPml0ZW1zW2N1cl9pZHhdKSwKQEAgLTMxOSw3ICszMjIsNyBAQAogICAg ICAgICAgICAgICAgaXRlbV9pZHggPSBpbnNlcnRfbmV3X2l0ZW0odGJsLCBwa3QsIHN0YXJ0X3Rp bWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5WQUxJRF9BUlJBWV9JTkRFWCwg ZnJhZ19vZmZzZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNfbGFzdF9mcmFn KTsKLSAgICAgICAgICAgICAgIGlmIChpdGVtX2lkeCA9PSBJTlZBTElEX0FSUkFZX0lOREVYKQor ICAgICAgICAgICAgICAgaWYgKHVubGlrZWx5KGl0ZW1faWR4ID09IElOVkFMSURfQVJSQVlfSU5E RVgpKQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICAgICB0 YmwtPml0ZW1zW2l0ZW1faWR4XS5uZXh0X3BrdF9pZHggPSBjdXJfaWR4OwogICAgICAgICAgICAg ICAgdGJsLT5mbG93c1tpXS5zdGFydF9pbmRleCA9IGl0ZW1faWR4OwpAQCAtMzQ4LDEyICszNTEs MTEgQEAKICAgICAgICBpdGVtX2lkeCA9IHRibC0+aXRlbXNbc3RhcnRfaWR4XS5uZXh0X3BrdF9p ZHg7CiAgICAgICAgd2hpbGUgKGl0ZW1faWR4ICE9IElOVkFMSURfQVJSQVlfSU5ERVgpIHsKICAg ICAgICAgICAgICAgIHBrdCA9IHRibC0+aXRlbXNbaXRlbV9pZHhdLmZpcnN0c2VnOwotICAgICAg ICAgICAgICAgaGRyX2xlbiA9IHBrdC0+b3V0ZXJfbDJfbGVuICsgcGt0LT5vdXRlcl9sM19sZW4g KyBwa3QtPmwyX2xlbiArCi0gICAgICAgICAgICAgICAgICAgICAgIHBrdC0+bDNfbGVuOworICAg ICAgICAgICAgICAgaGRyX2xlbiA9IHBrdC0+bDJfbGVuICsgcGt0LT5sM19sZW47CiAgICAgICAg ICAgICAgICBpcF9kbCA9IHBrdC0+cGt0X2xlbiAtIGhkcl9sZW47CiAgICAgICAgICAgICAgICBm cmFnX29mZnNldCA9IHRibC0+aXRlbXNbaXRlbV9pZHhdLmZyYWdfb2Zmc2V0OwogICAgICAgICAg ICAgICAgaXNfbGFzdF9mcmFnID0gdGJsLT5pdGVtc1tpdGVtX2lkeF0uaXNfbGFzdF9mcmFnOwot ICAgICAgICAgICAgICAgY21wID0gdWRwX2NoZWNrX25laWdoYm9yKCYodGJsLT5pdGVtc1tzdGFy dF9pZHhdKSwKKyAgICAgICAgICAgICAgIGNtcCA9IHVkcDRfY2hlY2tfbmVpZ2hib3IoJih0Ymwt Pml0ZW1zW3N0YXJ0X2lkeF0pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZnJhZ19vZmZzZXQsIGlwX2RsLCAwKTsKICAgICAgICAgICAgICAgIGlmIChjbXApIHsKICAg ICAgICAgICAgICAgICAgICAgICAgaWYgKG1lcmdlX3R3b191ZHA0X3BhY2tldHMoCkBAIC0zNjQs MTIgKzM2NiwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIElOVkFMSURfQVJSQVlfSU5ERVgpOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRibC0+aXRlbXNbc3RhcnRfaWR4XS5uZXh0X3BrdF9pZHgKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gaXRlbV9pZHg7Ci0gICAgICAgICAgICAgICAg ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICAgICB9 Ci0gICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgfQogICAgICAgIH0KCiAg ICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9saWIvbGlicnRlX2dyby9ncm9fdWRwNC5oIGIv bGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuaAppbmRleCBiYzY3ZWIxLi4wYTA3OGU0IDEwMDY0NAot LS0gYS9saWIvbGlicnRlX2dyby9ncm9fdWRwNC5oCisrKyBiL2xpYi9saWJydGVfZ3JvL2dyb191 ZHA0LmgKQEAgLTI0Niw3ICsyNDYsNyBAQCB1aW50MTZfdCBncm9fdWRwNF90YmxfdGltZW91dF9m bHVzaChzdHJ1Y3QgZ3JvX3VkcDRfdGJsICp0YmwsCiAgKiBDaGVjayBpZiB0d28gVURQL0lQdjQg cGFja2V0cyBhcmUgbmVpZ2hib3JzLgogICovCiBzdGF0aWMgaW5saW5lIGludAotdWRwX2NoZWNr X25laWdoYm9yKHN0cnVjdCBncm9fdWRwNF9pdGVtICppdGVtLAordWRwNF9jaGVja19uZWlnaGJv cihzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSAqaXRlbSwKICAgICAgICAgICAgICAgIHVpbnQxNl90IGZy YWdfb2Zmc2V0LAogICAgICAgICAgICAgICAgdWludDE2X3QgaXBfZGwsCiAgICAgICAgICAgICAg ICB1aW50MTZfdCBsMl9vZmZzZXQpCgoKCgoKCgoKCgoKCgoKCgoKCkF0IDIwMjAtMDktMDkgMTU6 MjU6MTAsICJ5YW5nX3lfeWkiIDx5YW5nX3lfeWlAMTYzLmNvbT4gd3JvdGU6Cj4KPgo+QXQgMjAy MC0wOS0wOCAxMDowNToxNiwgIkppYXl1IEh1IiA8amlheXUuaHVAaW50ZWwuY29tPiB3cm90ZToK Pj5Tb21lIGNvbW1lbnRzIGFyZSBpbmxpbmUuCj4KPlRoYW5rcywgcmVwbGllcyBpbmxpbmUuCj4K Pj4KPj5UaGFua3MsCj4+SmlheXUKPj4KPj5PbiBGcmksIFNlcCAwNCwgMjAyMCBhdCAwNDozNzoz OVBNICswODAwLCB5YW5nX3lfeWlAMTYzLmNvbSB3cm90ZToKPj4+IEZyb206IFlpIFlhbmcgPHlh bmd5aTAxQGluc3B1ci5jb20+Cj4+PiAKPj4+IFVEUCBHUk8gY2FuIGhlbHAgaW1wcm92ZSBWTS10 by1WTSBVRFAgcGVyZm9ybWFuY2Ugd2hlbgo+Pj4gVk0gaXMgZW5hYmxlZCBVRk8gb3IgR1NPLCBH Uk8gbXVzdCBiZSBzdXBwb3J0ZWQgaWYgR1NPCj4+PiBvciBVRk8gaXMgZW5hYmxlZCwgb3RoZXJ3 aXNlLCBwZXJmb3JtYW5jZSBnYWluIHdpbGwgYmUKPj4+IGh1cnQuCj4+PiAKPj4+IFdpdGggdGhp cyBlbmFibGVkIGluIERQREssIE9WUyBEUERLIGNhbiBsZXZlcmFnZSBpdAo+Pj4gdG8gaW1wcm92 ZSBWTS10by1WTSBVRFAgcGVyZm9ybWFuY2UsIHRoaXMgd2lsbCBtYWtlCj4+PiBzdXJlIElQIGZy YWdtZW50cyB3aWxsIGJlIHJlYXNzZW1ibGVkIG9uY2UgaXQgaXMKPj4+IHJlY2VpdmVkIGZyb20g cGh5c2ljYWwgTklDLiBJdCBpcyB2ZXJ5IGhlbHBmdWwgaW4gT1ZTCj4+PiBEUERLIFZMQU4gVFNP IGNhc2UuCj4+PiAKPj4+IFNpZ25lZC1vZmYtYnk6IFlpIFlhbmcgPHlhbmd5aTAxQGluc3B1ci5j b20+Cj4+PiAtLS0KPj4+ICBsaWIvbGlicnRlX2dyby9NYWtlZmlsZSAgICB8ICAgMSArCj4+PiAg bGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuYyAgfCA0MzAgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrCj4+PiAgbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuaCAgfCAy ODEgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPj4+ICBsaWIvbGlicnRlX2dyby9tZXNv bi5idWlsZCB8ICAgMiArLQo+Pj4gIGxpYi9saWJydGVfZ3JvL3J0ZV9ncm8uYyAgIHwgIDkzICsr KysrKysrLS0KPj4+ICBsaWIvbGlicnRlX2dyby9ydGVfZ3JvLmggICB8ICAgNSArLQo+Pj4gIDYg ZmlsZXMgY2hhbmdlZCwgNzk2IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9ucygtKQo+Pj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX2dyby9ncm9fdWRwNC5jCj4+PiAgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYi9saWJydGVfZ3JvL2dyb191ZHA0LmgKPj4+IAo+Pj4gZGlmZiAtLWdpdCBh L2xpYi9saWJydGVfZ3JvL01ha2VmaWxlIGIvbGliL2xpYnJ0ZV9ncm8vTWFrZWZpbGUKPj4+IGlu ZGV4IGU4NDg2ODcuLjQxZWMyOWUgMTAwNjQ0Cj4+PiAtLS0gYS9saWIvbGlicnRlX2dyby9NYWtl ZmlsZQo+Pj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8vTWFrZWZpbGUKPj4+IEBAIC0xNSw2ICsxNSw3 IEBAIEVYUE9SVF9NQVAgOj0gcnRlX2dyb192ZXJzaW9uLm1hcAo+Pj4gICMgc291cmNlIGZpbGVz Cj4+PiAgU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX0dSTykgKz0gcnRlX2dyby5jCj4+PiAgU1JD Uy0kKENPTkZJR19SVEVfTElCUlRFX0dSTykgKz0gZ3JvX3RjcDQuYwo+Pj4gK1NSQ1MtJChDT05G SUdfUlRFX0xJQlJURV9HUk8pICs9IGdyb191ZHA0LmMKPj4+ICBTUkNTLSQoQ09ORklHX1JURV9M SUJSVEVfR1JPKSArPSBncm9fdnhsYW5fdGNwNC5jCj4+PiAgCj4+PiAgIyBpbnN0YWxsIHRoaXMg aGVhZGVyIGZpbGUKPj4+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2dyby9ncm9fdWRwNC5jIGIv bGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuYwo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGlu ZGV4IDAwMDAwMDAuLjI1NTg0ZmQKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2xpYi9saWJy dGVfZ3JvL2dyb191ZHA0LmMKPj4+IEBAIC0wLDAgKzEsNDMwIEBACj4+PiArLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQo+Pj4gKyAqIENvcHlyaWdodChjKSAyMDIwIElu c3B1ciBDb3Jwb3JhdGlvbgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxydGVfbWFsbG9j Lmg+Cj4+PiArI2luY2x1ZGUgPHJ0ZV9tYnVmLmg+Cj4+PiArI2luY2x1ZGUgPHJ0ZV9jeWNsZXMu aD4KPj4+ICsjaW5jbHVkZSA8cnRlX2V0aGRldi5oPgo+Pj4gKwo+Pj4gKyNpbmNsdWRlICJncm9f dWRwNC5oIgo+Pj4gKwo+Pj4gK3ZvaWQgKgo+Pj4gK2dyb191ZHA0X3RibF9jcmVhdGUodWludDE2 X3Qgc29ja2V0X2lkLAo+Pj4gKwkJdWludDE2X3QgbWF4X2Zsb3dfbnVtLAo+Pj4gKwkJdWludDE2 X3QgbWF4X2l0ZW1fcGVyX2Zsb3cpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgZ3JvX3VkcDRfdGJsICp0 Ymw7Cj4+PiArCXNpemVfdCBzaXplOwo+Pj4gKwl1aW50MzJfdCBlbnRyaWVzX251bSwgaTsKPj4+ ICsKPj4+ICsJZW50cmllc19udW0gPSBtYXhfZmxvd19udW0gKiBtYXhfaXRlbV9wZXJfZmxvdzsK Pj4+ICsJZW50cmllc19udW0gPSBSVEVfTUlOKGVudHJpZXNfbnVtLCBHUk9fVURQNF9UQkxfTUFY X0lURU1fTlVNKTsKPj4+ICsKPj4+ICsJaWYgKGVudHJpZXNfbnVtID09IDApCj4+PiArCQlyZXR1 cm4gTlVMTDsKPj4+ICsKPj4+ICsJdGJsID0gcnRlX3ptYWxsb2Nfc29ja2V0KF9fZnVuY19fLAo+ Pj4gKwkJCXNpemVvZihzdHJ1Y3QgZ3JvX3VkcDRfdGJsKSwKPj4+ICsJCQlSVEVfQ0FDSEVfTElO RV9TSVpFLAo+Pj4gKwkJCXNvY2tldF9pZCk7Cj4+PiArCWlmICh0YmwgPT0gTlVMTCkKPj4+ICsJ CXJldHVybiBOVUxMOwo+Pj4gKwo+Pj4gKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBncm9fdWRwNF9p dGVtKSAqIGVudHJpZXNfbnVtOwo+Pj4gKwl0YmwtPml0ZW1zID0gcnRlX3ptYWxsb2Nfc29ja2V0 KF9fZnVuY19fLAo+Pj4gKwkJCXNpemUsCj4+PiArCQkJUlRFX0NBQ0hFX0xJTkVfU0laRSwKPj4+ ICsJCQlzb2NrZXRfaWQpOwo+Pj4gKwlpZiAodGJsLT5pdGVtcyA9PSBOVUxMKSB7Cj4+PiArCQly dGVfZnJlZSh0YmwpOwo+Pj4gKwkJcmV0dXJuIE5VTEw7Cj4+PiArCX0KPj4+ICsJdGJsLT5tYXhf aXRlbV9udW0gPSBlbnRyaWVzX251bTsKPj4+ICsKPj4+ICsJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg Z3JvX3VkcDRfZmxvdykgKiBlbnRyaWVzX251bTsKPj4+ICsJdGJsLT5mbG93cyA9IHJ0ZV96bWFs bG9jX3NvY2tldChfX2Z1bmNfXywKPj4+ICsJCQlzaXplLAo+Pj4gKwkJCVJURV9DQUNIRV9MSU5F X1NJWkUsCj4+PiArCQkJc29ja2V0X2lkKTsKPj4+ICsJaWYgKHRibC0+Zmxvd3MgPT0gTlVMTCkg ewo+Pj4gKwkJcnRlX2ZyZWUodGJsLT5pdGVtcyk7Cj4+PiArCQlydGVfZnJlZSh0YmwpOwo+Pj4g KwkJcmV0dXJuIE5VTEw7Cj4+PiArCX0KPj4+ICsJLyogSU5WQUxJRF9BUlJBWV9JTkRFWCBpbmRp Y2F0ZXMgYW4gZW1wdHkgZmxvdyAqLwo+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgZW50cmllc19udW07 IGkrKykKPj4+ICsJCXRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXggPSBJTlZBTElEX0FSUkFZX0lO REVYOwo+Pj4gKwl0YmwtPm1heF9mbG93X251bSA9IGVudHJpZXNfbnVtOwo+Pj4gKwo+Pj4gKwly ZXR1cm4gdGJsOwo+Pj4gK30KPj4+ICsKPj4+ICt2b2lkCj4+PiArZ3JvX3VkcDRfdGJsX2Rlc3Ry b3kodm9pZCAqdGJsKQo+Pj4gK3sKPj4+ICsJc3RydWN0IGdyb191ZHA0X3RibCAqdWRwX3RibCA9 IHRibDsKPj4+ICsKPj4+ICsJaWYgKHVkcF90YmwpIHsKPj4+ICsJCXJ0ZV9mcmVlKHVkcF90Ymwt Pml0ZW1zKTsKPj4+ICsJCXJ0ZV9mcmVlKHVkcF90YmwtPmZsb3dzKTsKPj4+ICsJfQo+Pj4gKwly dGVfZnJlZSh1ZHBfdGJsKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSB1aW50MzJf dAo+Pj4gK2ZpbmRfYW5fZW1wdHlfaXRlbShzdHJ1Y3QgZ3JvX3VkcDRfdGJsICp0YmwpCj4+PiAr ewo+Pj4gKwl1aW50MzJfdCBpOwo+Pj4gKwl1aW50MzJfdCBtYXhfaXRlbV9udW0gPSB0YmwtPm1h eF9pdGVtX251bTsKPj4+ICsKPj4+ICsJZm9yIChpID0gMDsgaSA8IG1heF9pdGVtX251bTsgaSsr KQo+Pj4gKwkJaWYgKHRibC0+aXRlbXNbaV0uZmlyc3RzZWcgPT0gTlVMTCkKPj4+ICsJCQlyZXR1 cm4gaTsKPj4+ICsJcmV0dXJuIElOVkFMSURfQVJSQVlfSU5ERVg7Cj4+PiArfQo+Pj4gKwo+Pj4g K3N0YXRpYyBpbmxpbmUgdWludDMyX3QKPj4+ICtmaW5kX2FuX2VtcHR5X2Zsb3coc3RydWN0IGdy b191ZHA0X3RibCAqdGJsKQo+Pj4gK3sKPj4+ICsJdWludDMyX3QgaTsKPj4+ICsJdWludDMyX3Qg bWF4X2Zsb3dfbnVtID0gdGJsLT5tYXhfZmxvd19udW07Cj4+PiArCj4+PiArCWZvciAoaSA9IDA7 IGkgPCBtYXhfZmxvd19udW07IGkrKykKPj4+ICsJCWlmICh0YmwtPmZsb3dzW2ldLnN0YXJ0X2lu ZGV4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpCj4+PiArCQkJcmV0dXJuIGk7Cj4+PiArCXJldHVy biBJTlZBTElEX0FSUkFZX0lOREVYOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHVp bnQzMl90Cj4+PiAraW5zZXJ0X25ld19pdGVtKHN0cnVjdCBncm9fdWRwNF90YmwgKnRibCwKPj4+ ICsJCXN0cnVjdCBydGVfbWJ1ZiAqcGt0LAo+Pj4gKwkJdWludDY0X3Qgc3RhcnRfdGltZSwKPj4+ ICsJCXVpbnQzMl90IHByZXZfaWR4LAo+Pj4gKwkJdWludDE2X3QgZnJhZ19vZmZzZXQsCj4+PiAr CQl1aW50OF90IGlzX2xhc3RfZnJhZykKPj4+ICt7Cj4+PiArCXVpbnQzMl90IGl0ZW1faWR4Owo+ Pj4gKwo+Pj4gKwlpdGVtX2lkeCA9IGZpbmRfYW5fZW1wdHlfaXRlbSh0YmwpOwo+Pj4gKwlpZiAo aXRlbV9pZHggPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkKPj4+ICsJCXJldHVybiBJTlZBTElEX0FS UkFZX0lOREVYOwo+Pj4gKwo+Pj4gKwl0YmwtPml0ZW1zW2l0ZW1faWR4XS5maXJzdHNlZyA9IHBr dDsKPj4+ICsJdGJsLT5pdGVtc1tpdGVtX2lkeF0ubGFzdHNlZyA9IHJ0ZV9wa3RtYnVmX2xhc3Rz ZWcocGt0KTsKPj4+ICsJdGJsLT5pdGVtc1tpdGVtX2lkeF0uc3RhcnRfdGltZSA9IHN0YXJ0X3Rp bWU7Cj4+PiArCXRibC0+aXRlbXNbaXRlbV9pZHhdLm5leHRfcGt0X2lkeCA9IElOVkFMSURfQVJS QVlfSU5ERVg7Cj4+PiArCXRibC0+aXRlbXNbaXRlbV9pZHhdLmZyYWdfb2Zmc2V0ID0gZnJhZ19v ZmZzZXQ7Cj4+PiArCXRibC0+aXRlbXNbaXRlbV9pZHhdLmlzX2xhc3RfZnJhZyA9IGlzX2xhc3Rf ZnJhZzsKPj4+ICsJdGJsLT5pdGVtc1tpdGVtX2lkeF0ubmJfbWVyZ2VkID0gMTsKPj4+ICsJdGJs LT5pdGVtX251bSsrOwo+Pj4gKwo+Pj4gKwkvKiBpZiB0aGUgcHJldmlvdXMgcGFja2V0IGV4aXN0 cywgY2hhaW4gdGhlbSB0b2dldGhlci4gKi8KPj4+ICsJaWYgKHByZXZfaWR4ICE9IElOVkFMSURf QVJSQVlfSU5ERVgpIHsKPj4+ICsJCXRibC0+aXRlbXNbaXRlbV9pZHhdLm5leHRfcGt0X2lkeCA9 Cj4+PiArCQkJdGJsLT5pdGVtc1twcmV2X2lkeF0ubmV4dF9wa3RfaWR4Owo+Pj4gKwkJdGJsLT5p dGVtc1twcmV2X2lkeF0ubmV4dF9wa3RfaWR4ID0gaXRlbV9pZHg7Cj4+PiArCX0KPj4+ICsKPj4+ ICsJcmV0dXJuIGl0ZW1faWR4Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIHVpbnQz Ml90Cj4+PiArZGVsZXRlX2l0ZW0oc3RydWN0IGdyb191ZHA0X3RibCAqdGJsLCB1aW50MzJfdCBp dGVtX2lkeCwKPj4+ICsJCXVpbnQzMl90IHByZXZfaXRlbV9pZHgpCj4+PiArewo+Pj4gKwl1aW50 MzJfdCBuZXh0X2lkeCA9IHRibC0+aXRlbXNbaXRlbV9pZHhdLm5leHRfcGt0X2lkeDsKPj4+ICsK Pj4+ICsJLyogTlVMTCBpbmRpY2F0ZXMgYW4gZW1wdHkgaXRlbSAqLwo+Pj4gKwl0YmwtPml0ZW1z W2l0ZW1faWR4XS5maXJzdHNlZyA9IE5VTEw7Cj4+PiArCXRibC0+aXRlbV9udW0tLTsKPj4+ICsJ aWYgKHByZXZfaXRlbV9pZHggIT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkKPj4+ICsJCXRibC0+aXRl bXNbcHJldl9pdGVtX2lkeF0ubmV4dF9wa3RfaWR4ID0gbmV4dF9pZHg7Cj4+PiArCj4+PiArCXJl dHVybiBuZXh0X2lkeDsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSB1aW50MzJfdAo+ Pj4gK2luc2VydF9uZXdfZmxvdyhzdHJ1Y3QgZ3JvX3VkcDRfdGJsICp0YmwsCj4+PiArCQlzdHJ1 Y3QgdWRwNF9mbG93X2tleSAqc3JjLAo+Pj4gKwkJdWludDMyX3QgaXRlbV9pZHgpCj4+PiArewo+ Pj4gKwlzdHJ1Y3QgdWRwNF9mbG93X2tleSAqZHN0Owo+Pj4gKwl1aW50MzJfdCBmbG93X2lkeDsK Pj4+ICsKPj4+ICsJZmxvd19pZHggPSBmaW5kX2FuX2VtcHR5X2Zsb3codGJsKTsKPj4+ICsJaWYg KHVubGlrZWx5KGZsb3dfaWR4ID09IElOVkFMSURfQVJSQVlfSU5ERVgpKQo+Pj4gKwkJcmV0dXJu IElOVkFMSURfQVJSQVlfSU5ERVg7Cj4+PiArCj4+PiArCWRzdCA9ICYodGJsLT5mbG93c1tmbG93 X2lkeF0ua2V5KTsKPj4+ICsKPj4+ICsJcnRlX2V0aGVyX2FkZHJfY29weSgmKHNyYy0+ZXRoX3Nh ZGRyKSwgJihkc3QtPmV0aF9zYWRkcikpOwo+Pj4gKwlydGVfZXRoZXJfYWRkcl9jb3B5KCYoc3Jj LT5ldGhfZGFkZHIpLCAmKGRzdC0+ZXRoX2RhZGRyKSk7Cj4+PiArCWRzdC0+aXBfc3JjX2FkZHIg PSBzcmMtPmlwX3NyY19hZGRyOwo+Pj4gKwlkc3QtPmlwX2RzdF9hZGRyID0gc3JjLT5pcF9kc3Rf YWRkcjsKPj4+ICsJZHN0LT5pcF9pZCA9IHNyYy0+aXBfaWQ7Cj4+PiArCWRzdC0+aXBfaWQgPSBz cmMtPmlwX2lkOwo+Pgo+PkR1cGxpY2F0ZWQgY29kZS4KPgo+VGhhbmtzLCBnb29kIGNhdGNoLCB3 aWxsIHJlbW92ZSBpdC4KPgo+Pgo+Pj4gKwo+Pj4gKwl0YmwtPmZsb3dzW2Zsb3dfaWR4XS5zdGFy dF9pbmRleCA9IGl0ZW1faWR4Owo+Pj4gKwl0YmwtPmZsb3dfbnVtKys7Cj4+PiArCj4+PiArCXJl dHVybiBmbG93X2lkeDsKPj4+ICt9Cj4+PiArCj4+PiArLyoKPj4+ICsgKiB1cGRhdGUgdGhlIHBh Y2tldCBsZW5ndGggZm9yIHRoZSBmbHVzaGVkIHBhY2tldC4KPj4+ICsgKi8KPj4+ICtzdGF0aWMg aW5saW5lIHZvaWQKPj4+ICt1cGRhdGVfaGVhZGVyKHN0cnVjdCBncm9fdWRwNF9pdGVtICppdGVt KQo+Pj4gK3sKPj4+ICsJc3RydWN0IHJ0ZV9pcHY0X2hkciAqaXB2NF9oZHI7Cj4+PiArCXN0cnVj dCBydGVfbWJ1ZiAqcGt0ID0gaXRlbS0+Zmlyc3RzZWc7Cj4+PiArCXVpbnQxNl90IGZyYWdfb2Zm c2V0Owo+Pj4gKwo+Pj4gKwlpcHY0X2hkciA9IChzdHJ1Y3QgcnRlX2lwdjRfaGRyICopKHJ0ZV9w a3RtYnVmX210b2QocGt0LCBjaGFyICopICsKPj4+ICsJCQlwa3QtPmwyX2xlbik7Cj4+PiArCWlw djRfaGRyLT50b3RhbF9sZW5ndGggPSBydGVfY3B1X3RvX2JlXzE2KHBrdC0+cGt0X2xlbiAtCj4+ PiArCQkJcGt0LT5sMl9sZW4pOwo+Pj4gKwo+Pj4gKwkvKiBDbGVhciBNRiBiaXQgaWYgaXQgaXMg bGFzdCBmcmFnbWVudCAqLwo+Pj4gKwlpZiAoaXRlbS0+aXNfbGFzdF9mcmFnKSB7Cj4+PiArCQlm cmFnX29mZnNldCA9IHJ0ZV9iZV90b19jcHVfMTYoaXB2NF9oZHItPmZyYWdtZW50X29mZnNldCk7 Cj4+PiArCQlpcHY0X2hkci0+ZnJhZ21lbnRfb2Zmc2V0ID0KPj4+ICsJCQlydGVfY3B1X3RvX2Jl XzE2KGZyYWdfb2Zmc2V0ICYgflJURV9JUFY0X0hEUl9NRl9GTEFHKTsKPj4+ICsJfQo+Pj4gK30K Pj4+ICsKPj4+ICtpbnQzMl90Cj4+PiArZ3JvX3VkcDRfcmVhc3NlbWJsZShzdHJ1Y3QgcnRlX21i dWYgKnBrdCwKPj4+ICsJCXN0cnVjdCBncm9fdWRwNF90YmwgKnRibCwKPj4+ICsJCXVpbnQ2NF90 IHN0YXJ0X3RpbWUpCj4+PiArewo+Pj4gKwlzdHJ1Y3QgcnRlX2V0aGVyX2hkciAqZXRoX2hkcjsK Pj4+ICsJc3RydWN0IHJ0ZV9pcHY0X2hkciAqaXB2NF9oZHI7Cj4+PiArCXVpbnQxNl90IGlwX2Rs Owo+Pj4gKwl1aW50MTZfdCBpcF9pZCwgaGRyX2xlbjsKPj4+ICsJdWludDE2X3QgZnJhZ19vZmZz ZXQgPSAwOwo+Pj4gKwl1aW50OF90IGlzX2xhc3RfZnJhZzsKPj4+ICsKPj4+ICsJc3RydWN0IHVk cDRfZmxvd19rZXkga2V5Owo+Pj4gKwl1aW50MzJfdCBjdXJfaWR4LCBwcmV2X2lkeCwgaXRlbV9p ZHg7Cj4+PiArCXVpbnQzMl90IGksIG1heF9mbG93X251bSwgcmVtYWluaW5nX2Zsb3dfbnVtOwo+ Pj4gKwlpbnQgY21wOwo+Pj4gKwl1aW50OF90IGZpbmQ7Cj4+PiArCj4+PiArCWV0aF9oZHIgPSBy dGVfcGt0bWJ1Zl9tdG9kKHBrdCwgc3RydWN0IHJ0ZV9ldGhlcl9oZHIgKik7Cj4+PiArCWlwdjRf aGRyID0gKHN0cnVjdCBydGVfaXB2NF9oZHIgKikoKGNoYXIgKilldGhfaGRyICsgcGt0LT5sMl9s ZW4pOwo+Pj4gKwloZHJfbGVuID0gcGt0LT5sMl9sZW4gKyBwa3QtPmwzX2xlbjsKPj4+ICsKPj4+ ICsJLyoKPj4+ICsJICogRG9uJ3QgcHJvY2VzcyBub24tZnJhZ21lbnQgcGFja2V0Lgo+Pj4gKwkg Ki8KPj4+ICsJaWYgKCFpc19pcHY0X2ZyYWdtZW50KGlwdjRfaGRyKSkKPj4+ICsJCXJldHVybiAt MTsKPj4+ICsKPj4+ICsJLyoKPj4+ICsJICogRG9uJ3QgcHJvY2VzcyB0aGUgcGFja2V0IHdob3Nl IHBheWxvYWQgbGVuZ3RoIGlzIGxlc3MgdGhhbiBvcgo+Pj4gKwkgKiBlcXVhbCB0byAwLgo+Pj4g KwkgKi8KPj4+ICsJaWYgKHBrdC0+cGt0X2xlbiAtIGhkcl9sZW4gPD0gMCkKPj4+ICsJCXJldHVy biAtMTsKPj4KPj5JZiBpbnB1dCBwYWNrZXRzIGFyZSBtYWxpY2lvdXMsIHdob3NlIG1idWYtPnBr dF9sZW4gaXMgc21hbGxlciB0aGFuCj4+KG1idWYtPmwyX2xlbittYnVmLT5sM19sZW4pLCB0aGUg YWJvdmUgY2hlY2sgd290bid0IHdvcmsgY29ycmVjdGx5LAo+PmFzIGl0cyB2YWx1ZSBpcyB1aW50 MTZfdCwgd2hpY2ggaXMgYWx3YXlzIHBvc2l0aXZlLgo+Cj5JIHRyaWVkIHRoZSBiZWxvdyBjb2Rl Lgo+Cj4kIGNhdCBhLmMKPiNpbmNsdWRlIAo+I2luY2x1ZGUgCj4KPmludCBtYWluKCkKPnsKPiAg ICB1aW50MTZfdCBhID0gMTA7Cj4gICAgdWludDE2X3QgYiA9IDg7Cj4KPiAgICBpZiAoKGIgLSBh KSA8IDApIHsKPiAgICAgICAgcHJpbnRmKCIldSA8ICV1XG4iLCBiICwgYSk7Cj4gICAgfQo+fQo+ JCBnY2MgYS5jCj4kIC4vYS5vdXQKPjggPCAxMAo+JAo+Cj5JdCB3b3Jrcywgc28gSSB0aGluayBp dCBpcyBvaywgbmVydmVydGhlbGVzcywgSSdsbCBjaGFuZ2UgaXQgdG8gdGhlIGJlbG93IHRvIGF2 b2lkIHlvdXIgY29uY2Vybi4KPgo+aWYgKHBrdC0+cGt0X2xlbiA8PSBoZHJfbGVuKQo+Cj4+Cj4+ PiArCj4+PiArCWlwX2RsID0gcnRlX2JlX3RvX2NwdV8xNihpcHY0X2hkci0+dG90YWxfbGVuZ3Ro KSAtIHBrdC0+bDNfbGVuOwo+Pgo+PlNhbWUgYXMgYWJvdmUuCj4KPkkgdGhpbmsgImlmIChwa3Qt PnBrdF9sZW4gPD0gaGRyX2xlbikiIGNhbiBlbnN1cmUgaXBfZGwgd2lsbCBiZSBwb3NpdGl2ZSwg SSBjYW4gYWRkIG9uZSBtb3JlCj5jb25kaXRpb24gY2hlY2sgaGVyZSBpZiB5b3Ugd2FudAo+Cj5p ZiAocnRlX2JlX3RvX2NwdV8xNihpcHY0X2hkci0+dG90YWxfbGVuZ3RoKSA8PSBsM19sZW4pCj4g ICAgICAgIHJldHVybiAtMTsKPgo+QnV0IEkgdGhpbmsgaXQgaXMgdW5uZWNlc3NhcnkgaGVyZSBm b3IgYSBsaXR0bGUgYml0IHBlcmZvcm1hbmNlIGFzIHlvdSdyZSBjYXJpbmcuCj4KPj4KPj4+ICsJ aXBfaWQgPSBydGVfYmVfdG9fY3B1XzE2KGlwdjRfaGRyLT5wYWNrZXRfaWQpOwo+Pj4gKwlmcmFn X29mZnNldCA9IHJ0ZV9iZV90b19jcHVfMTYoaXB2NF9oZHItPmZyYWdtZW50X29mZnNldCk7Cj4+ PiArCWlzX2xhc3RfZnJhZyA9ICgoZnJhZ19vZmZzZXQgJiBSVEVfSVBWNF9IRFJfTUZfRkxBRykg PT0gMCkgPyAxIDogMDsKPj4+ICsJZnJhZ19vZmZzZXQgPSAodWludDE2X3QpKGZyYWdfb2Zmc2V0 ICYgUlRFX0lQVjRfSERSX09GRlNFVF9NQVNLKSA8PCAzOwo+Pj4gKwo+Pj4gKwlydGVfZXRoZXJf YWRkcl9jb3B5KCYoZXRoX2hkci0+c19hZGRyKSwgJihrZXkuZXRoX3NhZGRyKSk7Cj4+PiArCXJ0 ZV9ldGhlcl9hZGRyX2NvcHkoJihldGhfaGRyLT5kX2FkZHIpLCAmKGtleS5ldGhfZGFkZHIpKTsK Pj4+ICsJa2V5LmlwX3NyY19hZGRyID0gaXB2NF9oZHItPnNyY19hZGRyOwo+Pj4gKwlrZXkuaXBf ZHN0X2FkZHIgPSBpcHY0X2hkci0+ZHN0X2FkZHI7Cj4+PiArCWtleS5pcF9pZCA9IGlwX2lkOwo+ Pj4gKwo+Pj4gKwkvKiBTZWFyY2ggZm9yIGEgbWF0Y2hlZCBmbG93LiAqLwo+Pj4gKwltYXhfZmxv d19udW0gPSB0YmwtPm1heF9mbG93X251bTsKPj4+ICsJcmVtYWluaW5nX2Zsb3dfbnVtID0gdGJs LT5mbG93X251bTsKPj4+ICsJZmluZCA9IDA7Cj4+PiArCWZvciAoaSA9IDA7IGkgPCBtYXhfZmxv d19udW0gJiYgcmVtYWluaW5nX2Zsb3dfbnVtOyBpKyspIHsKPj4+ICsJCWlmICh0YmwtPmZsb3dz W2ldLnN0YXJ0X2luZGV4ICE9IElOVkFMSURfQVJSQVlfSU5ERVgpIHsKPj4+ICsJCQlpZiAoaXNf c2FtZV91ZHA0X2Zsb3codGJsLT5mbG93c1tpXS5rZXksIGtleSkpIHsKPj4+ICsJCQkJZmluZCA9 IDE7Cj4+PiArCQkJCWJyZWFrOwo+Pj4gKwkJCX0KPj4+ICsJCQlyZW1haW5pbmdfZmxvd19udW0t LTsKPj4+ICsJCX0KPj4+ICsJfQo+Pj4gKwo+Pj4gKwkvKgo+Pj4gKwkgKiBGYWlsIHRvIGZpbmQg YSBtYXRjaGVkIGZsb3cuIEluc2VydCBhIG5ldyBmbG93IGFuZCBzdG9yZSB0aGUKPj4+ICsJICog cGFja2V0IGludG8gdGhlIGZsb3cuCj4+PiArCSAqLwo+Pj4gKwlpZiAoZmluZCA9PSAwKSB7Cj4+ PiArCQlpdGVtX2lkeCA9IGluc2VydF9uZXdfaXRlbSh0YmwsIHBrdCwgc3RhcnRfdGltZSwKPj4+ ICsJCQkJSU5WQUxJRF9BUlJBWV9JTkRFWCwgZnJhZ19vZmZzZXQsCj4+PiArCQkJCWlzX2xhc3Rf ZnJhZyk7Cj4+PiArCQlpZiAoaXRlbV9pZHggPT0gSU5WQUxJRF9BUlJBWV9JTkRFWCkKPj4+ICsJ CQlyZXR1cm4gLTE7Cj4+Cj4+QWRkaW5nIHVubGlrZWx5IGhlcmUgY291bGQgZ2V0IGJldHRlciBw ZXJmb3JtYW5jZSwgSU1PLgo+Cj5ObyBwcm9ibGVtLgo+Cj4+Cj4+PiArCQlpZiAoaW5zZXJ0X25l d19mbG93KHRibCwgJmtleSwgaXRlbV9pZHgpID09Cj4+PiArCQkJCUlOVkFMSURfQVJSQVlfSU5E RVgpIHsKPj4+ICsJCQkvKgo+Pj4gKwkJCSAqIEZhaWwgdG8gaW5zZXJ0IGEgbmV3IGZsb3csIHNv IGRlbGV0ZSB0aGUKPj4+ICsJCQkgKiBzdG9yZWQgcGFja2V0Lgo+Pj4gKwkJCSAqLwo+Pj4gKwkJ CWRlbGV0ZV9pdGVtKHRibCwgaXRlbV9pZHgsIElOVkFMSURfQVJSQVlfSU5ERVgpOwo+Pj4gKwkJ CXJldHVybiAtMTsKPj4+ICsJCX0KPj4+ICsJCXJldHVybiAwOwo+Pj4gKwl9Cj4+PiArCj4+PiAr CS8qCj4+PiArCSAqIENoZWNrIGFsbCBwYWNrZXRzIGluIHRoZSBmbG93IGFuZCB0cnkgdG8gZmlu ZCBhIG5laWdoYm9yIGZvcgo+Pj4gKwkgKiB0aGUgaW5wdXQgcGFja2V0Lgo+Pj4gKwkgKi8KPj4+ ICsJY3VyX2lkeCA9IHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXg7Cj4+PiArCXByZXZfaWR4ID0g Y3VyX2lkeDsKPj4+ICsJZG8gewo+Pj4gKwkJY21wID0gdWRwX2NoZWNrX25laWdoYm9yKCYodGJs LT5pdGVtc1tjdXJfaWR4XSksCj4+PiArCQkJCWZyYWdfb2Zmc2V0LCBpcF9kbCwgMCk7Cj4+PiAr CQlpZiAoY21wKSB7Cj4+PiArCQkJaWYgKG1lcmdlX3R3b191ZHA0X3BhY2tldHMoJih0YmwtPml0 ZW1zW2N1cl9pZHhdKSwKPj4+ICsJCQkJCQlwa3QsIGNtcCwgZnJhZ19vZmZzZXQsCj4+PiArCQkJ CQkJaXNfbGFzdF9mcmFnLCAwKSkKPj4+ICsJCQkJcmV0dXJuIDE7Cj4+PiArCQkJLyoKPj4+ICsJ CQkgKiBGYWlsIHRvIG1lcmdlIHRoZSB0d28gcGFja2V0cywgYXMgdGhlIHBhY2tldAo+Pj4gKwkJ CSAqIGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIG1heCB2YWx1ZS4gU3RvcmUKPj4+ICsJCQkg KiB0aGUgcGFja2V0IGludG8gdGhlIGZsb3cuCj4+PiArCQkJICovCj4+PiArCQkJaWYgKGluc2Vy dF9uZXdfaXRlbSh0YmwsIHBrdCwgc3RhcnRfdGltZSwgcHJldl9pZHgsCj4+PiArCQkJCQkJZnJh Z19vZmZzZXQsIGlzX2xhc3RfZnJhZykgPT0KPj4+ICsJCQkJCUlOVkFMSURfQVJSQVlfSU5ERVgp Cj4+PiArCQkJCXJldHVybiAtMTsKPj4+ICsJCQlyZXR1cm4gMDsKPj4+ICsJCX0KPj4+ICsKPj4+ ICsJCS8qIEVuc3VyZSBpbnNlcnRlZCBpdGVtcyBhcmUgb3JkZXJlZCBieSBmcmFnX29mZnNldCAq Lwo+Pj4gKwkJaWYgKGZyYWdfb2Zmc2V0Cj4+PiArCQkJPCB0YmwtPml0ZW1zW2N1cl9pZHhdLmZy YWdfb2Zmc2V0KSB7Cj4+PiArCQkJYnJlYWs7Cj4+PiArCQl9Cj4+PiArCj4+PiArCQlwcmV2X2lk eCA9IGN1cl9pZHg7Cj4+PiArCQljdXJfaWR4ID0gdGJsLT5pdGVtc1tjdXJfaWR4XS5uZXh0X3Br dF9pZHg7Cj4+PiArCX0gd2hpbGUgKGN1cl9pZHggIT0gSU5WQUxJRF9BUlJBWV9JTkRFWCk7Cj4+ PiArCj4+PiArCS8qIEZhaWwgdG8gZmluZCBhIG5laWdoYm9yLCBzbyBzdG9yZSB0aGUgcGFja2V0 IGludG8gdGhlIGZsb3cuICovCj4+PiArCWlmIChjdXJfaWR4ID09IHRibC0+Zmxvd3NbaV0uc3Rh cnRfaW5kZXgpIHsKPj4+ICsJCS8qIEluc2VydCBpdCBiZWZvcmUgdGhlIGZpcnN0IHBhY2tldCBv ZiB0aGUgZmxvdyAqLwo+Pj4gKwkJaXRlbV9pZHggPSBpbnNlcnRfbmV3X2l0ZW0odGJsLCBwa3Qs IHN0YXJ0X3RpbWUsCj4+PiArCQkJCUlOVkFMSURfQVJSQVlfSU5ERVgsIGZyYWdfb2Zmc2V0LAo+ Pj4gKwkJCQlpc19sYXN0X2ZyYWcpOwo+Pj4gKwkJaWYgKGl0ZW1faWR4ID09IElOVkFMSURfQVJS QVlfSU5ERVgpCj4+PiArCQkJcmV0dXJuIC0xOwo+Pj4gKwkJdGJsLT5pdGVtc1tpdGVtX2lkeF0u bmV4dF9wa3RfaWR4ID0gY3VyX2lkeDsKPj4+ICsJCXRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXgg PSBpdGVtX2lkeDsKPj4+ICsJfSBlbHNlIHsKPj4+ICsJCWlmIChpbnNlcnRfbmV3X2l0ZW0odGJs LCBwa3QsIHN0YXJ0X3RpbWUsIHByZXZfaWR4LAo+Pj4gKwkJCQlmcmFnX29mZnNldCwgaXNfbGFz dF9mcmFnKQo+Pj4gKwkJCT09IElOVkFMSURfQVJSQVlfSU5ERVgpCj4+PiArCQkJcmV0dXJuIC0x Owo+Pj4gKwl9Cj4+PiArCj4+PiArCXJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMg aW50Cj4+PiArZ3JvX3VkcDRfbWVyZ2VfaXRlbXMoc3RydWN0IGdyb191ZHA0X3RibCAqdGJsLAo+ Pj4gKwkJCSAgIHVpbnQzMl90IHN0YXJ0X2lkeCkKPj4+ICt7Cj4+PiArCXVpbnQxNl90IGZyYWdf b2Zmc2V0Owo+Pj4gKwl1aW50OF90IGlzX2xhc3RfZnJhZzsKPj4+ICsJaW50MTZfdCBpcF9kbDsK Pj4+ICsJc3RydWN0IHJ0ZV9tYnVmICpwa3Q7Cj4+PiArCWludCBjbXA7Cj4+PiArCXVpbnQzMl90 IGl0ZW1faWR4Owo+Pj4gKwl1aW50MTZfdCBoZHJfbGVuOwo+Pj4gKwo+Pj4gKwlpdGVtX2lkeCA9 IHRibC0+aXRlbXNbc3RhcnRfaWR4XS5uZXh0X3BrdF9pZHg7Cj4+PiArCXdoaWxlIChpdGVtX2lk eCAhPSBJTlZBTElEX0FSUkFZX0lOREVYKSB7Cj4+PiArCQlwa3QgPSB0YmwtPml0ZW1zW2l0ZW1f aWR4XS5maXJzdHNlZzsKPj4+ICsJCWhkcl9sZW4gPSBwa3QtPm91dGVyX2wyX2xlbiArIHBrdC0+ b3V0ZXJfbDNfbGVuICsgcGt0LT5sMl9sZW4gKwo+Pj4gKwkJCXBrdC0+bDNfbGVuOwo+Pgo+PkZv ciBub24tdHVubmVsIHBhY2tldHMsIG1idWYtPm91dGVyX2wzL2wyX2xlbiBhcmUgbm90IGd1YXJh bnRlZWQgMC4KPj5JIHRoaW5rIGl0J3MgYmV0dGVyIHRvIHBhc3Mgb3V0ZXIgaGVhZGVyIGxlbmd0 aCBhcyBhIHBhcmFtZXRlciBvZgo+Pmdyb191ZHA0X21lcmdlX2l0ZW0oKSwgbGlrZSB1ZHBfY2hl Y2tfbmVpZ2hib3IoKS4KPgo+Rm9yIHVkcCBHUk8sIHdlIGNhbiByZW1vdmUgb3V0ZXJfbDMvbDJf bGVuLCB0aGV5IGFyZSBub25zZW5zZS4KPgo+Pgo+Pj4gKwkJaXBfZGwgPSBwa3QtPnBrdF9sZW4g LSBoZHJfbGVuOwo+Pj4gKwkJZnJhZ19vZmZzZXQgPSB0YmwtPml0ZW1zW2l0ZW1faWR4XS5mcmFn X29mZnNldDsKPj4+ICsJCWlzX2xhc3RfZnJhZyA9IHRibC0+aXRlbXNbaXRlbV9pZHhdLmlzX2xh c3RfZnJhZzsKPj4+ICsJCWNtcCA9IHVkcF9jaGVja19uZWlnaGJvcigmKHRibC0+aXRlbXNbc3Rh cnRfaWR4XSksCj4+PiArCQkJCQlmcmFnX29mZnNldCwgaXBfZGwsIDApOwo+Pj4gKwkJaWYgKGNt cCkgewo+Pj4gKwkJCWlmIChtZXJnZV90d29fdWRwNF9wYWNrZXRzKAo+Pj4gKwkJCQkJJih0Ymwt Pml0ZW1zW3N0YXJ0X2lkeF0pLAo+Pj4gKwkJCQkJcGt0LCBjbXAsIGZyYWdfb2Zmc2V0LAo+Pj4g KwkJCQkJaXNfbGFzdF9mcmFnLCAwKSkgewo+Pj4gKwkJCQlpdGVtX2lkeCA9IGRlbGV0ZV9pdGVt KHRibCwgaXRlbV9pZHgsCj4+PiArCQkJCQkJCUlOVkFMSURfQVJSQVlfSU5ERVgpOwo+Pj4gKwkJ CQl0YmwtPml0ZW1zW3N0YXJ0X2lkeF0ubmV4dF9wa3RfaWR4Cj4+PiArCQkJCQk9IGl0ZW1faWR4 Owo+Pj4gKwkJCX0gZWxzZSB7Cj4+PiArCQkJCXJldHVybiAwOwo+Pj4gKwkJCX0KPj4+ICsJCX0g ZWxzZSB7Cj4+PiArCQkJcmV0dXJuIDA7Cj4+PiArCQl9Cj4+Cj4+QSBzaW5nbGUgbGluZSBkb2Vz bid0IG5lZWQgYnJhY2VzLgo+Cj5Hb3QgaXQsIHdpbGwgcmVtb3ZlIHsgfQo+Cj4+Cj4+PiArCX0K Pj4+ICsKPj4+ICsJcmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3VpbnQxNl90Cj4+PiArZ3Jv X3VkcDRfdGJsX3RpbWVvdXRfZmx1c2goc3RydWN0IGdyb191ZHA0X3RibCAqdGJsLAo+Pj4gKwkJ dWludDY0X3QgZmx1c2hfdGltZXN0YW1wLAo+Pj4gKwkJc3RydWN0IHJ0ZV9tYnVmICoqb3V0LAo+ Pj4gKwkJdWludDE2X3QgbmJfb3V0KQo+Pj4gK3sKPj4+ICsJdWludDE2X3QgayA9IDA7Cj4+PiAr CXVpbnQzMl90IGksIGo7Cj4+PiArCXVpbnQzMl90IG1heF9mbG93X251bSA9IHRibC0+bWF4X2Zs b3dfbnVtOwo+Pj4gKwo+Pj4gKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Zsb3dfbnVtOyBpKyspIHsK Pj4+ICsJCWlmICh1bmxpa2VseSh0YmwtPmZsb3dfbnVtID09IDApKQo+Pj4gKwkJCXJldHVybiBr Owo+Pj4gKwo+Pj4gKwkJaiA9IHRibC0+Zmxvd3NbaV0uc3RhcnRfaW5kZXg7Cj4+PiArCQl3aGls ZSAoaiAhPSBJTlZBTElEX0FSUkFZX0lOREVYKSB7Cj4+PiArCQkJaWYgKHRibC0+aXRlbXNbal0u c3RhcnRfdGltZSA8PSBmbHVzaF90aW1lc3RhbXApIHsKPj4+ICsJCQkJZ3JvX3VkcDRfbWVyZ2Vf aXRlbXModGJsLCBqKTsKPj4+ICsJCQkJb3V0W2srK10gPSB0YmwtPml0ZW1zW2pdLmZpcnN0c2Vn Owo+Pj4gKwkJCQlpZiAodGJsLT5pdGVtc1tqXS5uYl9tZXJnZWQgPiAxKQo+Pj4gKwkJCQkJdXBk YXRlX2hlYWRlcigmKHRibC0+aXRlbXNbal0pKTsKPj4+ICsJCQkJLyoKPj4+ICsJCQkJICogRGVs ZXRlIHRoZSBwYWNrZXQgYW5kIGdldCB0aGUgbmV4dAo+Pj4gKwkJCQkgKiBwYWNrZXQgaW4gdGhl IGZsb3cuCj4+PiArCQkJCSAqLwo+Pj4gKwkJCQlqID0gZGVsZXRlX2l0ZW0odGJsLCBqLCBJTlZB TElEX0FSUkFZX0lOREVYKTsKPj4+ICsJCQkJdGJsLT5mbG93c1tpXS5zdGFydF9pbmRleCA9IGo7 Cj4+PiArCQkJCWlmIChqID09IElOVkFMSURfQVJSQVlfSU5ERVgpCj4+PiArCQkJCQl0YmwtPmZs b3dfbnVtLS07Cj4+PiArCj4+PiArCQkJCWlmICh1bmxpa2VseShrID09IG5iX291dCkpCj4+PiAr CQkJCQlyZXR1cm4gazsKPj4+ICsJCQl9IGVsc2UKPj4+ICsJCQkJLyoKPj4+ICsJCQkJICogVGhl IGxlZnQgcGFja2V0cyBpbiB0aGlzIGZsb3cgd29uJ3QgYmUKPj4+ICsJCQkJICogdGltZW91dC4g R28gdG8gY2hlY2sgb3RoZXIgZmxvd3MuCj4+PiArCQkJCSAqLwo+Pj4gKwkJCQlicmVhazsKPj4+ ICsJCX0KPj4+ICsJfQo+Pj4gKwlyZXR1cm4gazsKPj4+ICt9Cj4+PiArCj4+PiArdWludDMyX3QK Pj4+ICtncm9fdWRwNF90YmxfcGt0X2NvdW50KHZvaWQgKnRibCkKPj4+ICt7Cj4+PiArCXN0cnVj dCBncm9fdWRwNF90YmwgKmdyb190YmwgPSB0Ymw7Cj4+PiArCj4+PiArCWlmIChncm9fdGJsKQo+ Pj4gKwkJcmV0dXJuIGdyb190YmwtPml0ZW1fbnVtOwo+Pj4gKwo+Pj4gKwlyZXR1cm4gMDsKPj4+ ICt9Cj4+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9ncm8vZ3JvX3VkcDQuaCBiL2xpYi9saWJy dGVfZ3JvL2dyb191ZHA0LmgKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+PiBpbmRleCAwMDAw MDAwLi5iYzY3ZWIxCj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysgYi9saWIvbGlicnRlX2dyby9n cm9fdWRwNC5oCj4+PiBAQCAtMCwwICsxLDI4MSBAQAo+Pj4gKy8qIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMy1DbGF1c2UKPj4+ICsgKiBDb3B5cmlnaHQoYykgMjAyMCBJbnNwdXIgQ29y cG9yYXRpb24KPj4+ICsgKi8KPj4+ICsKPj4+ICsjaWZuZGVmIF9HUk9fVURQNF9IXwo+Pj4gKyNk ZWZpbmUgX0dST19VRFA0X0hfCj4+PiArCj4+PiArI2luY2x1ZGUgPHJ0ZV9pcC5oPgo+Pj4gKyNp bmNsdWRlIDxydGVfdWRwLmg+Cj4+PiArCj4+PiArI2RlZmluZSBJTlZBTElEX0FSUkFZX0lOREVY IDB4ZmZmZmZmZmZVTAo+Pj4gKyNkZWZpbmUgR1JPX1VEUDRfVEJMX01BWF9JVEVNX05VTSAoMTAy NFVMICogMTAyNFVMKQo+Pj4gKwo+Pj4gKy8qCj4+PiArICogVGhlIG1heCBsZW5ndGggb2YgYSBJ UHY0IHBhY2tldCwgd2hpY2ggaW5jbHVkZXMgdGhlIGxlbmd0aCBvZiB0aGUgTDMKPj4+ICsgKiBo ZWFkZXIsIHRoZSBMNCBoZWFkZXIgYW5kIHRoZSBkYXRhIHBheWxvYWQuCj4+PiArICovCj4+PiAr I2RlZmluZSBNQVhfSVBWNF9QS1RfTEVOR1RIIFVJTlQxNl9NQVgKPj4+ICsKPj4+ICsvKiBIZWFk ZXIgZmllbGRzIHJlcHJlc2VudGluZyBhIFVEUC9JUHY0IGZsb3cgKi8KPj4+ICtzdHJ1Y3QgdWRw NF9mbG93X2tleSB7Cj4+PiArCXN0cnVjdCBydGVfZXRoZXJfYWRkciBldGhfc2FkZHI7Cj4+PiAr CXN0cnVjdCBydGVfZXRoZXJfYWRkciBldGhfZGFkZHI7Cj4+PiArCXVpbnQzMl90IGlwX3NyY19h ZGRyOwo+Pj4gKwl1aW50MzJfdCBpcF9kc3RfYWRkcjsKPj4+ICsKPj4+ICsJLyogSVAgZnJhZ21l bnQgZm9yIFVEUCBkb2VzIG5vdCBjb250YWluIFVEUCBoZWFkZXIKPj4+ICsJICogZXhjZXB0IHRo ZSBmaXJzdCBvbmUuIEJ1dCBJUCBJRCBtdXN0IGJlIHNhbWUuCj4+PiArCSAqLwo+Pj4gKwl1aW50 MTZfdCBpcF9pZDsKPj4+ICt9Owo+Pj4gKwo+Pj4gK3N0cnVjdCBncm9fdWRwNF9mbG93IHsKPj4+ ICsJc3RydWN0IHVkcDRfZmxvd19rZXkga2V5Owo+Pj4gKwkvKgo+Pj4gKwkgKiBUaGUgaW5kZXgg b2YgdGhlIGZpcnN0IHBhY2tldCBpbiB0aGUgZmxvdy4KPj4+ICsJICogSU5WQUxJRF9BUlJBWV9J TkRFWCBpbmRpY2F0ZXMgYW4gZW1wdHkgZmxvdy4KPj4+ICsJICovCj4+PiArCXVpbnQzMl90IHN0 YXJ0X2luZGV4Owo+Pj4gK307Cj4+PiArCj4+PiArc3RydWN0IGdyb191ZHA0X2l0ZW0gewo+Pj4g KwkvKgo+Pj4gKwkgKiBUaGUgZmlyc3QgTUJVRiBzZWdtZW50IG9mIHRoZSBwYWNrZXQuIElmIHRo ZSB2YWx1ZQo+Pj4gKwkgKiBpcyBOVUxMLCBpdCBtZWFucyB0aGUgaXRlbSBpcyBlbXB0eS4KPj4+ ICsJICovCj4+PiArCXN0cnVjdCBydGVfbWJ1ZiAqZmlyc3RzZWc7Cj4+PiArCS8qIFRoZSBsYXN0 IE1CVUYgc2VnbWVudCBvZiB0aGUgcGFja2V0ICovCj4+PiArCXN0cnVjdCBydGVfbWJ1ZiAqbGFz dHNlZzsKPj4+ICsJLyoKPj4+ICsJICogVGhlIHRpbWUgd2hlbiB0aGUgZmlyc3QgcGFja2V0IGlz IGluc2VydGVkIGludG8gdGhlIHRhYmxlLgo+Pj4gKwkgKiBUaGlzIHZhbHVlIHdvbid0IGJlIHVw ZGF0ZWQsIGV2ZW4gaWYgdGhlIHBhY2tldCBpcyBtZXJnZWQKPj4+ICsJICogd2l0aCBvdGhlciBw YWNrZXRzLgo+Pj4gKwkgKi8KPj4+ICsJdWludDY0X3Qgc3RhcnRfdGltZTsKPj4+ICsJLyoKPj4+ ICsJICogbmV4dF9wa3RfaWR4IGlzIHVzZWQgdG8gY2hhaW4gdGhlIHBhY2tldHMgdGhhdAo+Pj4g KwkgKiBhcmUgaW4gdGhlIHNhbWUgZmxvdyBidXQgY2FuJ3QgYmUgbWVyZ2VkIHRvZ2V0aGVyCj4+ PiArCSAqIChlLmcuIGNhdXNlZCBieSBwYWNrZXQgcmVvcmRlcmluZykuCj4+PiArCSAqLwo+Pj4g Kwl1aW50MzJfdCBuZXh0X3BrdF9pZHg7Cj4+PiArCS8qIG9mZnNldCBvZiBJUCBmcmFnbWVudCBw YWNrZXQgKi8KPj4+ICsJdWludDE2X3QgZnJhZ19vZmZzZXQ7Cj4+PiArCS8qIGlzIGxhc3QgSVAg ZnJhZ21lbnQ/ICovCj4+PiArCXVpbnQ4X3QgaXNfbGFzdF9mcmFnOwo+Pj4gKwkvKiB0aGUgbnVt YmVyIG9mIG1lcmdlZCBwYWNrZXRzICovCj4+PiArCXVpbnQxNl90IG5iX21lcmdlZDsKPj4+ICt9 Owo+Pj4gKwo+Pj4gKy8qCj4+PiArICogVURQL0lQdjQgcmVhc3NlbWJseSB0YWJsZSBzdHJ1Y3R1 cmUuCj4+PiArICovCj4+PiArc3RydWN0IGdyb191ZHA0X3RibCB7Cj4+PiArCS8qIGl0ZW0gYXJy YXkgKi8KPj4+ICsJc3RydWN0IGdyb191ZHA0X2l0ZW0gKml0ZW1zOwo+Pj4gKwkvKiBmbG93IGFy cmF5ICovCj4+PiArCXN0cnVjdCBncm9fdWRwNF9mbG93ICpmbG93czsKPj4+ICsJLyogY3VycmVu dCBpdGVtIG51bWJlciAqLwo+Pj4gKwl1aW50MzJfdCBpdGVtX251bTsKPj4+ICsJLyogY3VycmVu dCBmbG93IG51bSAqLwo+Pj4gKwl1aW50MzJfdCBmbG93X251bTsKPj4+ICsJLyogaXRlbSBhcnJh eSBzaXplICovCj4+PiArCXVpbnQzMl90IG1heF9pdGVtX251bTsKPj4+ICsJLyogZmxvdyBhcnJh eSBzaXplICovCj4+PiArCXVpbnQzMl90IG1heF9mbG93X251bTsKPj4+ICt9Owo+Pj4gKwo+Pj4g Ky8qKgo+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhIFVEUC9JUHY0IHJlYXNzZW1ibHkg dGFibGUuCj4+PiArICoKPj4+ICsgKiBAcGFyYW0gc29ja2V0X2lkCj4+PiArICogIFNvY2tldCBp bmRleCBmb3IgYWxsb2NhdGluZyB0aGUgVURQL0lQdjQgcmVhc3NlbWJsZSB0YWJsZQo+Pj4gKyAq IEBwYXJhbSBtYXhfZmxvd19udW0KPj4+ICsgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIGZsb3dz IGluIHRoZSBVRFAvSVB2NCBHUk8gdGFibGUKPj4+ICsgKiBAcGFyYW0gbWF4X2l0ZW1fcGVyX2Zs b3cKPj4+ICsgKiAgVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgcGVyIGZsb3cKPj4+ICsg Kgo+Pj4gKyAqIEByZXR1cm4KPj4+ICsgKiAgLSBSZXR1cm4gdGhlIHRhYmxlIHBvaW50ZXIgb24g c3VjY2Vzcy4KPj4+ICsgKiAgLSBSZXR1cm4gTlVMTCBvbiBmYWlsdXJlLgo+Pj4gKyAqLwo+Pj4g K3ZvaWQgKmdyb191ZHA0X3RibF9jcmVhdGUodWludDE2X3Qgc29ja2V0X2lkLAo+Pj4gKwkJdWlu dDE2X3QgbWF4X2Zsb3dfbnVtLAo+Pj4gKwkJdWludDE2X3QgbWF4X2l0ZW1fcGVyX2Zsb3cpOwo+ Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gZGVzdHJveXMgYSBVRFAvSVB2NCBy ZWFzc2VtYmx5IHRhYmxlLgo+Pj4gKyAqCj4+PiArICogQHBhcmFtIHRibAo+Pj4gKyAqICBQb2lu dGVyIHBvaW50aW5nIHRvIHRoZSBVRFAvSVB2NCByZWFzc2VtYmx5IHRhYmxlLgo+Pj4gKyAqLwo+ Pj4gK3ZvaWQgZ3JvX3VkcDRfdGJsX2Rlc3Ryb3kodm9pZCAqdGJsKTsKPj4+ICsKPj4+ICsvKioK Pj4+ICsgKiBUaGlzIGZ1bmN0aW9uIG1lcmdlcyBhIFVEUC9JUHY0IHBhY2tldC4KPj4+ICsgKgo+ Pj4gKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgaWYgdGhlIHBhY2tldCBoYXMgY29y cmVjdCBjaGVja3N1bXMgYW5kCj4+PiArICogZG9lcyBub3QgcmUtY2FsY3VsYXRlIGNoZWNrc3Vt cyBmb3IgdGhlIG1lcmdlZCBwYWNrZXQuIEl0IHJldHVybnMgdGhlCj4+PiArICogcGFja2V0IGlm IGl0IGlzbid0IFVEUCBmcmFnbWVudCBvciB0aGVyZSBpcyBubyBhdmFpbGFibGUgc3BhY2UgaW4K Pj4+ICsgKiB0aGUgdGFibGUuCj4+PiArICoKPj4+ICsgKiBAcGFyYW0gcGt0Cj4+PiArICogIFBh Y2tldCB0byByZWFzc2VtYmxlCj4+PiArICogQHBhcmFtIHRibAo+Pj4gKyAqICBQb2ludGVyIHBv aW50aW5nIHRvIHRoZSBVRFAvSVB2NCByZWFzc2VtYmx5IHRhYmxlCj4+PiArICogQHN0YXJ0X3Rp bWUKPj4+ICsgKiAgVGhlIHRpbWUgd2hlbiB0aGUgcGFja2V0IGlzIGluc2VydGVkIGludG8gdGhl IHRhYmxlCj4+PiArICoKPj4+ICsgKiBAcmV0dXJuCj4+PiArICogIC0gUmV0dXJuIGEgcG9zaXRp dmUgdmFsdWUgaWYgdGhlIHBhY2tldCBpcyBtZXJnZWQuCj4+PiArICogIC0gUmV0dXJuIHplcm8g aWYgdGhlIHBhY2tldCBpc24ndCBtZXJnZWQgYnV0IHN0b3JlZCBpbiB0aGUgdGFibGUuCj4+PiAr ICogIC0gUmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgZm9yIGludmFsaWQgcGFyYW1ldGVycyBvciBu byBhdmFpbGFibGUKPj4+ICsgKiAgICBzcGFjZSBpbiB0aGUgdGFibGUuCj4+PiArICovCj4+PiAr aW50MzJfdCBncm9fdWRwNF9yZWFzc2VtYmxlKHN0cnVjdCBydGVfbWJ1ZiAqcGt0LAo+Pj4gKwkJ c3RydWN0IGdyb191ZHA0X3RibCAqdGJsLAo+Pj4gKwkJdWludDY0X3Qgc3RhcnRfdGltZSk7Cj4+ PiArCj4+PiArLyoqCj4+PiArICogVGhpcyBmdW5jdGlvbiBmbHVzaGVzIHRpbWVvdXQgcGFja2V0 cyBpbiBhIFVEUC9JUHY0IHJlYXNzZW1ibHkgdGFibGUsCj4+PiArICogYW5kIHdpdGhvdXQgdXBk YXRpbmcgY2hlY2tzdW1zLgo+Pj4gKyAqCj4+PiArICogQHBhcmFtIHRibAo+Pj4gKyAqICBVRFAv SVB2NCByZWFzc2VtYmx5IHRhYmxlIHBvaW50ZXIKPj4+ICsgKiBAcGFyYW0gZmx1c2hfdGltZXN0 YW1wCj4+PiArICogIEZsdXNoIHBhY2tldHMgd2hpY2ggYXJlIGluc2VydGVkIGludG8gdGhlIHRh YmxlIGJlZm9yZSBvciBhdCB0aGUKPj4+ICsgKiAgZmx1c2hfdGltZXN0YW1wLgo+Pj4gKyAqIEBw YXJhbSBvdXQKPj4+ICsgKiAgUG9pbnRlciBhcnJheSB1c2VkIHRvIGtlZXAgZmx1c2hlZCBwYWNr ZXRzCj4+PiArICogQHBhcmFtIG5iX291dAo+Pj4gKyAqICBUaGUgZWxlbWVudCBudW1iZXIgaW4g J291dCcuIEl0IGFsc28gZGV0ZXJtaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YKPj4+ICsgKiAg cGFja2V0cyB0aGF0IGNhbiBiZSBmbHVzaGVkIGZpbmFsbHkuCj4+PiArICoKPj4+ICsgKiBAcmV0 dXJuCj4+PiArICogIFRoZSBudW1iZXIgb2YgZmx1c2hlZCBwYWNrZXRzCj4+PiArICovCj4+PiAr dWludDE2X3QgZ3JvX3VkcDRfdGJsX3RpbWVvdXRfZmx1c2goc3RydWN0IGdyb191ZHA0X3RibCAq dGJsLAo+Pj4gKwkJdWludDY0X3QgZmx1c2hfdGltZXN0YW1wLAo+Pj4gKwkJc3RydWN0IHJ0ZV9t YnVmICoqb3V0LAo+Pj4gKwkJdWludDE2X3QgbmJfb3V0KTsKPj4+ICsKPj4+ICsvKioKPj4+ICsg KiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiB0aGUgcGFja2V0cyBpbiBhIFVE UC9JUHY0Cj4+PiArICogcmVhc3NlbWJseSB0YWJsZS4KPj4+ICsgKgo+Pj4gKyAqIEBwYXJhbSB0 YmwKPj4+ICsgKiAgVURQL0lQdjQgcmVhc3NlbWJseSB0YWJsZSBwb2ludGVyCj4+PiArICoKPj4+ ICsgKiBAcmV0dXJuCj4+PiArICogIFRoZSBudW1iZXIgb2YgcGFja2V0cyBpbiB0aGUgdGFibGUK Pj4+ICsgKi8KPj4+ICt1aW50MzJfdCBncm9fdWRwNF90YmxfcGt0X2NvdW50KHZvaWQgKnRibCk7 Cj4+PiArCj4+PiArLyoKPj4+ICsgKiBDaGVjayBpZiB0d28gVURQL0lQdjQgcGFja2V0cyBiZWxv bmcgdG8gdGhlIHNhbWUgZmxvdy4KPj4+ICsgKi8KPj4+ICtzdGF0aWMgaW5saW5lIGludAo+Pj4g K2lzX3NhbWVfdWRwNF9mbG93KHN0cnVjdCB1ZHA0X2Zsb3dfa2V5IGsxLCBzdHJ1Y3QgdWRwNF9m bG93X2tleSBrMikKPj4+ICt7Cj4+PiArCXJldHVybiAocnRlX2lzX3NhbWVfZXRoZXJfYWRkcigm azEuZXRoX3NhZGRyLCAmazIuZXRoX3NhZGRyKSAmJgo+Pj4gKwkJCXJ0ZV9pc19zYW1lX2V0aGVy X2FkZHIoJmsxLmV0aF9kYWRkciwgJmsyLmV0aF9kYWRkcikgJiYKPj4+ICsJCQkoazEuaXBfc3Jj X2FkZHIgPT0gazIuaXBfc3JjX2FkZHIpICYmCj4+PiArCQkJKGsxLmlwX2RzdF9hZGRyID09IGsy LmlwX2RzdF9hZGRyKSAmJgo+Pj4gKwkJCShrMS5pcF9pZCA9PSBrMi5pcF9pZCkpOwo+Pj4gK30K Pj4+ICsKPj4+ICsvKgo+Pj4gKyAqIE1lcmdlIHR3byBVRFAvSVB2NCBwYWNrZXRzIHdpdGhvdXQg dXBkYXRpbmcgY2hlY2tzdW1zLgo+Pj4gKyAqIElmIGNtcCBpcyBsYXJnZXIgdGhhbiAwLCBhcHBl bmQgdGhlIG5ldyBwYWNrZXQgdG8gdGhlCj4+PiArICogb3JpZ2luYWwgcGFja2V0LiBPdGhlcndp c2UsIHByZS1wZW5kIHRoZSBuZXcgcGFja2V0IHRvCj4+PiArICogdGhlIG9yaWdpbmFsIHBhY2tl dC4KPj4+ICsgKi8KPj4+ICtzdGF0aWMgaW5saW5lIGludAo+Pj4gK21lcmdlX3R3b191ZHA0X3Bh Y2tldHMoc3RydWN0IGdyb191ZHA0X2l0ZW0gKml0ZW0sCj4+PiArCQlzdHJ1Y3QgcnRlX21idWYg KnBrdCwKPj4+ICsJCWludCBjbXAsCj4+PiArCQl1aW50MTZfdCBmcmFnX29mZnNldCwKPj4+ICsJ CXVpbnQ4X3QgaXNfbGFzdF9mcmFnLAo+Pj4gKwkJdWludDE2X3QgbDJfb2Zmc2V0KQo+Pj4gK3sK Pj4+ICsJc3RydWN0IHJ0ZV9tYnVmICpwa3RfaGVhZCwgKnBrdF90YWlsLCAqbGFzdHNlZzsKPj4+ ICsJdWludDE2X3QgaGRyX2xlbiwgbDJfbGVuOwo+Pj4gKwl1aW50MzJfdCBpcF9sZW47Cj4+PiAr Cj4+PiArCWlmIChjbXAgPiAwKSB7Cj4+PiArCQlwa3RfaGVhZCA9IGl0ZW0tPmZpcnN0c2VnOwo+ Pj4gKwkJcGt0X3RhaWwgPSBwa3Q7Cj4+PiArCX0gZWxzZSB7Cj4+PiArCQlwa3RfaGVhZCA9IHBr dDsKPj4+ICsJCXBrdF90YWlsID0gaXRlbS0+Zmlyc3RzZWc7Cj4+PiArCX0KPj4+ICsKPj4+ICsJ LyogY2hlY2sgaWYgdGhlIElQdjQgcGFja2V0IGxlbmd0aCBpcyBncmVhdGVyIHRoYW4gdGhlIG1h eCB2YWx1ZSAqLwo+Pj4gKwloZHJfbGVuID0gbDJfb2Zmc2V0ICsgcGt0X2hlYWQtPmwyX2xlbiAr IHBrdF9oZWFkLT5sM19sZW47Cj4+PiArCWwyX2xlbiA9IGwyX29mZnNldCA+IDAgPyBwa3RfaGVh ZC0+b3V0ZXJfbDJfbGVuIDogcGt0X2hlYWQtPmwyX2xlbjsKPj4+ICsJaXBfbGVuID0gcGt0X2hl YWQtPnBrdF9sZW4gLSBsMl9sZW4KPj4+ICsJCSArIHBrdF90YWlsLT5wa3RfbGVuIC0gaGRyX2xl bjsKPj4+ICsJaWYgKHVubGlrZWx5KGlwX2xlbiA+IE1BWF9JUFY0X1BLVF9MRU5HVEgpKQo+Pj4g KwkJcmV0dXJuIDA7Cj4+PiArCj4+PiArCS8qIHJlbW92ZSB0aGUgcGFja2V0IGhlYWRlciBmb3Ig dGhlIHRhaWwgcGFja2V0ICovCj4+PiArCXJ0ZV9wa3RtYnVmX2Fkaihwa3RfdGFpbCwgaGRyX2xl bik7Cj4+PiArCj4+PiArCS8qIGNoYWluIHR3byBwYWNrZXRzIHRvZ2V0aGVyICovCj4+PiArCWlm IChjbXAgPiAwKSB7Cj4+PiArCQlpdGVtLT5sYXN0c2VnLT5uZXh0ID0gcGt0Owo+Pj4gKwkJaXRl bS0+bGFzdHNlZyA9IHJ0ZV9wa3RtYnVmX2xhc3RzZWcocGt0KTsKPj4+ICsJfSBlbHNlIHsKPj4+ ICsJCWxhc3RzZWcgPSBydGVfcGt0bWJ1Zl9sYXN0c2VnKHBrdCk7Cj4+PiArCQlsYXN0c2VnLT5u ZXh0ID0gaXRlbS0+Zmlyc3RzZWc7Cj4+PiArCQlpdGVtLT5maXJzdHNlZyA9IHBrdDsKPj4+ICsJ CWl0ZW0tPmZyYWdfb2Zmc2V0ID0gZnJhZ19vZmZzZXQ7Cj4+PiArCX0KPj4+ICsJaXRlbS0+bmJf bWVyZ2VkKys7Cj4+PiArCWlmIChpc19sYXN0X2ZyYWcpCj4+PiArCQlpdGVtLT5pc19sYXN0X2Zy YWcgPSBpc19sYXN0X2ZyYWc7Cj4+PiArCj4+PiArCS8qIHVwZGF0ZSBNQlVGIG1ldGFkYXRhIGZv ciB0aGUgbWVyZ2VkIHBhY2tldCAqLwo+Pj4gKwlwa3RfaGVhZC0+bmJfc2VncyArPSBwa3RfdGFp bC0+bmJfc2VnczsKPj4+ICsJcGt0X2hlYWQtPnBrdF9sZW4gKz0gcGt0X3RhaWwtPnBrdF9sZW47 Cj4+PiArCj4+PiArCXJldHVybiAxOwo+Pj4gK30KPj4+ICsKPj4+ICsvKgo+Pj4gKyAqIENoZWNr IGlmIHR3byBVRFAvSVB2NCBwYWNrZXRzIGFyZSBuZWlnaGJvcnMuCj4+PiArICovCj4+PiArc3Rh dGljIGlubGluZSBpbnQKPj4+ICt1ZHBfY2hlY2tfbmVpZ2hib3Ioc3RydWN0IGdyb191ZHA0X2l0 ZW0gKml0ZW0sCj4+PiArCQl1aW50MTZfdCBmcmFnX29mZnNldCwKPj4+ICsJCXVpbnQxNl90IGlw X2RsLAo+Pj4gKwkJdWludDE2X3QgbDJfb2Zmc2V0KQo+Pgo+Pkl0J3MgYmV0dGVyIHRvIHJlbmFt ZSB0aGUgZnVuY3Rpb24gYXMgdWRwNF9jaGVja19uZWlnaGJvcigpLCBJTU8uCj4KPk5vIHByb2Js ZW0KPgo+Pgo+Pj4gK3sKPj4+ICsJc3RydWN0IHJ0ZV9tYnVmICpwa3Rfb3JpZyA9IGl0ZW0tPmZp cnN0c2VnOwo+Pj4gKwl1aW50MTZfdCBsZW47Cj4+PiArCj4+PiArCS8qIGNoZWNrIGlmIHRoZSB0 d28gcGFja2V0cyBhcmUgbmVpZ2hib3JzICovCj4+PiArCWxlbiA9IHBrdF9vcmlnLT5wa3RfbGVu IC0gbDJfb2Zmc2V0IC0gcGt0X29yaWctPmwyX2xlbiAtCj4+PiArCQlwa3Rfb3JpZy0+bDNfbGVu Owo+Pj4gKwlpZiAoZnJhZ19vZmZzZXQgPT0gaXRlbS0+ZnJhZ19vZmZzZXQgKyBsZW4pCj4+PiAr CQkvKiBhcHBlbmQgdGhlIG5ldyBwYWNrZXQgKi8KPj4+ICsJCXJldHVybiAxOwo+Pj4gKwllbHNl IGlmIChmcmFnX29mZnNldCArIGlwX2RsID09IGl0ZW0tPmZyYWdfb2Zmc2V0KQo+Pj4gKwkJLyog cHJlLXBlbmQgdGhlIG5ldyBwYWNrZXQgKi8KPj4+ICsJCXJldHVybiAtMTsKPj4+ICsKPj4+ICsJ cmV0dXJuIDA7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbmxpbmUgaW50Cj4+PiAraXNfaXB2 NF9mcmFnbWVudChjb25zdCBzdHJ1Y3QgcnRlX2lwdjRfaGRyICpoZHIpCj4+PiArewo+Pj4gKwl1 aW50MTZfdCBmbGFnX29mZnNldCwgaXBfZmxhZywgaXBfb2ZzOwo+Pj4gKwo+Pj4gKwlmbGFnX29m ZnNldCA9IHJ0ZV9iZV90b19jcHVfMTYoaGRyLT5mcmFnbWVudF9vZmZzZXQpOwo+Pj4gKwlpcF9v ZnMgPSAodWludDE2X3QpKGZsYWdfb2Zmc2V0ICYgUlRFX0lQVjRfSERSX09GRlNFVF9NQVNLKTsK Pj4+ICsJaXBfZmxhZyA9ICh1aW50MTZfdCkoZmxhZ19vZmZzZXQgJiBSVEVfSVBWNF9IRFJfTUZf RkxBRyk7Cj4+PiArCj4+PiArCXJldHVybiBpcF9mbGFnICE9IDAgfHwgaXBfb2ZzICAhPSAwOwo+ Pj4gK30KPj4+ICsjZW5kaWYKPj4+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX2dyby9tZXNvbi5i dWlsZCBiL2xpYi9saWJydGVfZ3JvL21lc29uLmJ1aWxkCj4+PiBpbmRleCA1MDE2NjhjLi4wZDE4 ZGMyIDEwMDY0NAo+Pj4gLS0tIGEvbGliL2xpYnJ0ZV9ncm8vbWVzb24uYnVpbGQKPj4+ICsrKyBi L2xpYi9saWJydGVfZ3JvL21lc29uLmJ1aWxkCj4+PiBAQCAtMSw2ICsxLDYgQEAKPj4+ICAjIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKPj4+ICAjIENvcHlyaWdodChjKSAy MDE3IEludGVsIENvcnBvcmF0aW9uCj4+PiAgCj4+PiAtc291cmNlcyA9IGZpbGVzKCdydGVfZ3Jv LmMnLCAnZ3JvX3RjcDQuYycsICdncm9fdnhsYW5fdGNwNC5jJykKPj4+ICtzb3VyY2VzID0gZmls ZXMoJ3J0ZV9ncm8uYycsICdncm9fdGNwNC5jJywgJ2dyb191ZHA0LmMnLCAnZ3JvX3Z4bGFuX3Rj cDQuYycpCj4+PiAgaGVhZGVycyA9IGZpbGVzKCdydGVfZ3JvLmgnKQo+Pj4gIGRlcHMgKz0gWydl dGhkZXYnXQo+Pj4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfZ3JvL3J0ZV9ncm8uYyBiL2xpYi9s aWJydGVfZ3JvL3J0ZV9ncm8uYwo+Pj4gaW5kZXggNjYxOGY0ZC4uZDA5NDEyOSAxMDA2NDQKPj4+ IC0tLSBhL2xpYi9saWJydGVfZ3JvL3J0ZV9ncm8uYwo+Pj4gKysrIGIvbGliL2xpYnJ0ZV9ncm8v cnRlX2dyby5jCj4+PiBAQCAtOSw2ICs5LDcgQEAKPj4+ICAKPj4+ICAjaW5jbHVkZSAicnRlX2dy by5oIgo+Pj4gICNpbmNsdWRlICJncm9fdGNwNC5oIgo+Pj4gKyNpbmNsdWRlICJncm9fdWRwNC5o Igo+Pj4gICNpbmNsdWRlICJncm9fdnhsYW5fdGNwNC5oIgo+Pj4gIAo+Pj4gIHR5cGVkZWYgdm9p ZCAqKCpncm9fdGJsX2NyZWF0ZV9mbikodWludDE2X3Qgc29ja2V0X2lkLAo+Pj4gQEAgLTE4LDE3 ICsxOSwyMyBAQAo+Pj4gIHR5cGVkZWYgdWludDMyX3QgKCpncm9fdGJsX3BrdF9jb3VudF9mbiko dm9pZCAqdGJsKTsKPj4+ICAKPj4+ICBzdGF0aWMgZ3JvX3RibF9jcmVhdGVfZm4gdGJsX2NyZWF0 ZV9mbltSVEVfR1JPX1RZUEVfTUFYX05VTV0gPSB7Cj4+PiAtCQlncm9fdGNwNF90YmxfY3JlYXRl LCBncm9fdnhsYW5fdGNwNF90YmxfY3JlYXRlLCBOVUxMfTsKPj4+ICsJCWdyb190Y3A0X3RibF9j cmVhdGUsIGdyb192eGxhbl90Y3A0X3RibF9jcmVhdGUsCj4+PiArCQlncm9fdWRwNF90YmxfY3Jl YXRlLCBOVUxMfTsKPj4+ICBzdGF0aWMgZ3JvX3RibF9kZXN0cm95X2ZuIHRibF9kZXN0cm95X2Zu W1JURV9HUk9fVFlQRV9NQVhfTlVNXSA9IHsKPj4+ICAJCQlncm9fdGNwNF90YmxfZGVzdHJveSwg Z3JvX3Z4bGFuX3RjcDRfdGJsX2Rlc3Ryb3ksCj4+PiArCQkJZ3JvX3VkcDRfdGJsX2Rlc3Ryb3ks Cj4+PiAgCQkJTlVMTH07Cj4+PiAgc3RhdGljIGdyb190YmxfcGt0X2NvdW50X2ZuIHRibF9wa3Rf Y291bnRfZm5bUlRFX0dST19UWVBFX01BWF9OVU1dID0gewo+Pj4gIAkJCWdyb190Y3A0X3RibF9w a3RfY291bnQsIGdyb192eGxhbl90Y3A0X3RibF9wa3RfY291bnQsCj4+PiArCQkJZ3JvX3VkcDRf dGJsX3BrdF9jb3VudCwKPj4+ICAJCQlOVUxMfTsKPj4+ICAKPj4+ICAjZGVmaW5lIElTX0lQVjRf VENQX1BLVChwdHlwZSkgKFJURV9FVEhfSVNfSVBWNF9IRFIocHR5cGUpICYmIFwKPj4+ICAJCSgo cHR5cGUgJiBSVEVfUFRZUEVfTDRfVENQKSA9PSBSVEVfUFRZUEVfTDRfVENQKSkKPj4+ICAKPj4+ ICsjZGVmaW5lIElTX0lQVjRfVURQX1BLVChwdHlwZSkgKFJURV9FVEhfSVNfSVBWNF9IRFIocHR5 cGUpICYmIFwKPj4+ICsJCSgocHR5cGUgJiBSVEVfUFRZUEVfTDRfVURQKSA9PSBSVEVfUFRZUEVf TDRfVURQKSkKPj4+ICsKPj4+ICAjZGVmaW5lIElTX0lQVjRfVlhMQU5fVENQNF9QS1QocHR5cGUp IChSVEVfRVRIX0lTX0lQVjRfSERSKHB0eXBlKSAmJiBcCj4+PiAgCQkoKHB0eXBlICYgUlRFX1BU WVBFX0w0X1VEUCkgPT0gUlRFX1BUWVBFX0w0X1VEUCkgJiYgXAo+Pj4gIAkJKChwdHlwZSAmIFJU RV9QVFlQRV9UVU5ORUxfVlhMQU4pID09IFwKPj4+IEBAIC00MCw2ICs0Nyw3IEBACj4+PiAgCQkg ICAgIFJURV9QVFlQRV9JTk5FUl9MM19JUFY0X0VYVCB8IFwKPj4+ICAJCSAgICAgUlRFX1BUWVBF X0lOTkVSX0wzX0lQVjRfRVhUX1VOS05PV04pKSAhPSAwKSkKPj4+ICAKPj4+ICsKPj4+ICAvKgo+ Pj4gICAqIEdSTyBjb250ZXh0IHN0cnVjdHVyZS4gSXQga2VlcHMgdGhlIHRhYmxlIHN0cnVjdHVy ZXMsIHdoaWNoIGFyZQo+Pj4gICAqIHVzZWQgdG8gbWVyZ2UgcGFja2V0cywgZm9yIGRpZmZlcmVu dCBHUk8gdHlwZXMuIEJlZm9yZSB1c2luZwo+Pj4gQEAgLTEyMywyMCArMTMxLDI2IEBAIHN0cnVj dCBncm9fY3R4IHsKPj4+ICAJc3RydWN0IGdyb190Y3A0X2Zsb3cgdGNwX2Zsb3dzW1JURV9HUk9f TUFYX0JVUlNUX0lURU1fTlVNXTsKPj4+ICAJc3RydWN0IGdyb190Y3A0X2l0ZW0gdGNwX2l0ZW1z W1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXSA9IHt7MH0gfTsKPj4+ICAKPj4+IC0JLyogQWxs b2NhdGUgYSByZWFzc2VtYmx5IHRhYmxlIGZvciBWWExBTiBHUk8gKi8KPj4+ICsJLyogYWxsb2Nh dGUgYSByZWFzc2VtYmx5IHRhYmxlIGZvciBVRFAvSVB2NCBHUk8gKi8KPj4+ICsJc3RydWN0IGdy b191ZHA0X3RibCB1ZHBfdGJsOwo+Pj4gKwlzdHJ1Y3QgZ3JvX3VkcDRfZmxvdyB1ZHBfZmxvd3Nb UlRFX0dST19NQVhfQlVSU1RfSVRFTV9OVU1dOwo+Pj4gKwlzdHJ1Y3QgZ3JvX3VkcDRfaXRlbSB1 ZHBfaXRlbXNbUlRFX0dST19NQVhfQlVSU1RfSVRFTV9OVU1dID0ge3swfSB9Owo+Pj4gKwo+Pj4g KwkvKiBBbGxvY2F0ZSBhIHJlYXNzZW1ibHkgdGFibGUgZm9yIFZYTEFOIFRDUCBHUk8gKi8KPj4+ ICAJc3RydWN0IGdyb192eGxhbl90Y3A0X3RibCB2eGxhbl90Ymw7Cj4+PiAgCXN0cnVjdCBncm9f dnhsYW5fdGNwNF9mbG93IHZ4bGFuX2Zsb3dzW1JURV9HUk9fTUFYX0JVUlNUX0lURU1fTlVNXTsK Pj4+IC0Jc3RydWN0IGdyb192eGxhbl90Y3A0X2l0ZW0gdnhsYW5faXRlbXNbUlRFX0dST19NQVhf QlVSU1RfSVRFTV9OVU1dID0gewo+Pj4gLQkJe3swfSwgMCwgMH0gfTsKPj4+ICsJc3RydWN0IGdy b192eGxhbl90Y3A0X2l0ZW0gdnhsYW5faXRlbXNbUlRFX0dST19NQVhfQlVSU1RfSVRFTV9OVU1d Cj4+PiArCQkJPSB7e3swfSwgMCwgMH0gfTsKPj4+ICAKPj4+ICAJc3RydWN0IHJ0ZV9tYnVmICp1 bnByb2Nlc3NfcGt0c1tuYl9wa3RzXTsKPj4+ICAJdWludDMyX3QgaXRlbV9udW07Cj4+PiAgCWlu dDMyX3QgcmV0Owo+Pj4gIAl1aW50MTZfdCBpLCB1bnByb2Nlc3NfbnVtID0gMCwgbmJfYWZ0ZXJf Z3JvID0gbmJfcGt0czsKPj4+IC0JdWludDhfdCBkb190Y3A0X2dybyA9IDAsIGRvX3Z4bGFuX2dy byA9IDA7Cj4+PiArCXVpbnQ4X3QgZG9fdGNwNF9ncm8gPSAwLCBkb192eGxhbl9ncm8gPSAwLCBk b191ZHA0X2dybyA9IDA7Cj4+PiAgCj4+PiAgCWlmICh1bmxpa2VseSgocGFyYW0tPmdyb190eXBl cyAmIChSVEVfR1JPX0lQVjRfVlhMQU5fVENQX0lQVjQgfAo+Pj4gLQkJCQkJUlRFX0dST19UQ1Bf SVBWNCkpID09IDApKQo+Pj4gKwkJCQkJUlRFX0dST19UQ1BfSVBWNCB8Cj4+PiArCQkJCQlSVEVf R1JPX1VEUF9JUFY0KSkgPT0gMCkpCj4+PiAgCQlyZXR1cm4gbmJfcGt0czsKPj4+ICAKPj4+ICAJ LyogR2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzICovCj4+PiBAQCAtMTcwLDYgKzE4 NCwyMCBAQCBzdHJ1Y3QgZ3JvX2N0eCB7Cj4+PiAgCQlkb190Y3A0X2dybyA9IDE7Cj4+PiAgCX0K Pj4+ICAKPj4+ICsJaWYgKHBhcmFtLT5ncm9fdHlwZXMgJiBSVEVfR1JPX1VEUF9JUFY0KSB7Cj4+ PiArCQlmb3IgKGkgPSAwOyBpIDwgaXRlbV9udW07IGkrKykKPj4+ICsJCQl1ZHBfZmxvd3NbaV0u c3RhcnRfaW5kZXggPSBJTlZBTElEX0FSUkFZX0lOREVYOwo+Pj4gKwo+Pj4gKwkJdWRwX3RibC5m bG93cyA9IHVkcF9mbG93czsKPj4+ICsJCXVkcF90YmwuaXRlbXMgPSB1ZHBfaXRlbXM7Cj4+PiAr CQl1ZHBfdGJsLmZsb3dfbnVtID0gMDsKPj4+ICsJCXVkcF90YmwuaXRlbV9udW0gPSAwOwo+Pj4g KwkJdWRwX3RibC5tYXhfZmxvd19udW0gPSBpdGVtX251bTsKPj4+ICsJCXVkcF90YmwubWF4X2l0 ZW1fbnVtID0gaXRlbV9udW07Cj4+PiArCQlkb191ZHA0X2dybyA9IDE7Cj4+PiArCX0KPj4+ICsK Pj4+ICsKPj4+ICAJZm9yIChpID0gMDsgaSA8IG5iX3BrdHM7IGkrKykgewo+Pj4gIAkJLyoKPj4+ ICAJCSAqIFRoZSB0aW1lc3RhbXAgaXMgaWdub3JlZCwgc2luY2UgYWxsIHBhY2tldHMKPj4+IEBA IC0xNzcsNyArMjA1LDggQEAgc3RydWN0IGdyb19jdHggewo+Pj4gIAkJICovCj4+PiAgCQlpZiAo SVNfSVBWNF9WWExBTl9UQ1A0X1BLVChwa3RzW2ldLT5wYWNrZXRfdHlwZSkgJiYKPj4+ICAJCQkJ ZG9fdnhsYW5fZ3JvKSB7Cj4+PiAtCQkJcmV0ID0gZ3JvX3Z4bGFuX3RjcDRfcmVhc3NlbWJsZShw a3RzW2ldLCAmdnhsYW5fdGJsLCAwKTsKPj4+ICsJCQlyZXQgPSBncm9fdnhsYW5fdGNwNF9yZWFz c2VtYmxlKHBrdHNbaV0sCj4+PiArCQkJCQkJCSZ2eGxhbl90YmwsIDApOwo+Pj4gIAkJCWlmIChy ZXQgPiAwKQo+Pj4gIAkJCQkvKiBNZXJnZSBzdWNjZXNzZnVsbHkgKi8KPj4+ICAJCQkJbmJfYWZ0 ZXJfZ3JvLS07Cj4+PiBAQCAtMTkxLDI3ICsyMjAsNDMgQEAgc3RydWN0IGdyb19jdHggewo+Pj4g IAkJCQluYl9hZnRlcl9ncm8tLTsKPj4+ICAJCQllbHNlIGlmIChyZXQgPCAwKQo+Pj4gIAkJCQl1 bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0c1tpXTsKPj4+ICsJCX0gZWxzZSBp ZiAoSVNfSVBWNF9VRFBfUEtUKHBrdHNbaV0tPnBhY2tldF90eXBlKSAmJgo+Pj4gKwkJCQlkb191 ZHA0X2dybykgewo+Pj4gKwkJCXJldCA9IGdyb191ZHA0X3JlYXNzZW1ibGUocGt0c1tpXSwgJnVk cF90YmwsIDApOwo+Pj4gKwkJCWlmIChyZXQgPiAwKQo+Pj4gKwkJCQkvKiBtZXJnZSBzdWNjZXNz ZnVsbHkgKi8KPj4+ICsJCQkJbmJfYWZ0ZXJfZ3JvLS07Cj4+PiArCQkJZWxzZSBpZiAocmV0IDwg MCkKPj4+ICsJCQkJdW5wcm9jZXNzX3BrdHNbdW5wcm9jZXNzX251bSsrXSA9IHBrdHNbaV07Cj4+ PiAgCQl9IGVsc2UKPj4+ICAJCQl1bnByb2Nlc3NfcGt0c1t1bnByb2Nlc3NfbnVtKytdID0gcGt0 c1tpXTsKPj4+ICAJfQo+Pj4gIAo+Pj4gLQlpZiAobmJfYWZ0ZXJfZ3JvIDwgbmJfcGt0cykgewo+ Pj4gKwlpZiAoKG5iX2FmdGVyX2dybyA8IG5iX3BrdHMpCj4+PiArCQkgfHwgKHVucHJvY2Vzc19u dW0gPCBuYl9wa3RzKSkgewo+Pgo+PldoeSBuZWVkIHRvIGNoZWNrIHVucHJvY2Vzc19udW0gaGVy ZT8KPgo+SW4gdGhlIGNhc2UgdGhhdCBwYWNrZXQgaXNuJ3QgbWVyZ2VkLCBuYl9hZnRlcl9ncm8g d29uJ3QgYmUgY2hhbmdlZCwgd2Ugb25seSBjYW4gdXNlIHVucHJvY2Vzc19udW0gdG8gY2hlY2ss IGl0IGlzIHBvc3NpYmxlIHRvIHJlYXNzbWJsZSB0aGVtIHN1Y2Nlc3NmdWxseSBpbiBmbHVzaCBw aGFzZS4KPgo+Pgo+Pj4gIAkJaSA9IDA7Cj4+PiAgCQkvKiBGbHVzaCBhbGwgcGFja2V0cyBmcm9t IHRoZSB0YWJsZXMgKi8KPj4+ICAJCWlmIChkb192eGxhbl9ncm8pIHsKPj4+ICAJCQlpID0gZ3Jv X3Z4bGFuX3RjcDRfdGJsX3RpbWVvdXRfZmx1c2goJnZ4bGFuX3RibCwKPj4+ICAJCQkJCTAsIHBr dHMsIG5iX3BrdHMpOwo+Pj4gIAkJfQo+Pj4gKwo+Pj4gIAkJaWYgKGRvX3RjcDRfZ3JvKSB7Cj4+ PiAgCQkJaSArPSBncm9fdGNwNF90YmxfdGltZW91dF9mbHVzaCgmdGNwX3RibCwgMCwKPj4+ICAJ CQkJCSZwa3RzW2ldLCBuYl9wa3RzIC0gaSk7Cj4+PiAgCQl9Cj4+PiArCj4+PiArCQlpZiAoZG9f dWRwNF9ncm8pIHsKPj4+ICsJCQlpICs9IGdyb191ZHA0X3RibF90aW1lb3V0X2ZsdXNoKCZ1ZHBf dGJsLCAwLAo+Pj4gKwkJCQkJJnBrdHNbaV0sIG5iX3BrdHMgLSBpKTsKPj4+ICsJCX0KPj4+ICAJ CS8qIENvcHkgdW5wcm9jZXNzZWQgcGFja2V0cyAqLwo+Pj4gIAkJaWYgKHVucHJvY2Vzc19udW0g PiAwKSB7Cj4+PiAgCQkJbWVtY3B5KCZwa3RzW2ldLCB1bnByb2Nlc3NfcGt0cywKPj4+ICAJCQkJ CXNpemVvZihzdHJ1Y3QgcnRlX21idWYgKikgKgo+Pj4gIAkJCQkJdW5wcm9jZXNzX251bSk7Cj4+ PiAgCQl9Cj4+PiArCQluYl9hZnRlcl9ncm8gPSBpICsgdW5wcm9jZXNzX251bTsKPj4+ICAJfQo+ Pj4gIAo+Pj4gIAlyZXR1cm4gbmJfYWZ0ZXJfZ3JvOwo+Pj4gMS44LjMuMQo+Cj4K