From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from azure-sdnproxy.icoremail.net (azure-sdnproxy.icoremail.net [207.46.229.174]) by sourceware.org (Postfix) with ESMTP id B6A923858D3C for ; Sat, 6 May 2023 08:53:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B6A923858D3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=eswincomputing.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=eswincomputing.com Received: from E0001797DT (unknown [113.200.72.66]) by app2 (Coremail) with SMTP id EggMCgD3PZSLFVZkkx0SAA--.11073S2; Sat, 06 May 2023 16:53:32 +0800 (CST) Date: Sat, 6 May 2023 16:53:32 +0800 From: "Fei Gao" To: Sinan Cc: jiawei , gcc-patches Subject: Re: Re: [PATCH 4/5] RISC-V: Add Zcmp extension supports. References: <2023042518114000378158@eswincomputing.com>, <991049a4-d55b-4cb6-8d2f-6d9979047517.sinan.lin@linux.alibaba.com> X-Priority: 3 X-GUID: 670AEF23-3189-49A0-8A3A-2BE11A9BECB0 X-Has-Attach: no X-Mailer: Foxmail 7.2.15.80[cn] Mime-Version: 1.0 Message-ID: <20230506165331848595125@eswincomputing.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-CM-TRANSID:EggMCgD3PZSLFVZkkx0SAA--.11073S2 X-Coremail-Antispam: 1UD129KBjvAXoWfCw1UAw48tF1rtw4UJr45GFg_yoWrGFy7Wo WfWr1Iv3WfGr1Uuan8Cw1fWrn8Xw4v9w4UXan5JwnxGF1ktay8uF1Svws3Zay3Kry7Kay8 AFWxJa12vayvq3Zxn29KB7ZKAUJUUUUU529EdanIXcx71UUUUU7v73VFW2AGmfu7bjvjm3 AaLaJ3UjIYCTnIWjp_UUUYr7k0a2IF6w4kM7kC6x804xWl1xkIjI8I6I8E6xAIw20EY4v2 0xvaj40_Wr0E3s1l8cAvFVAK0II2c7xJM28CjxkF64kEwVA0rcxSw2x7M28EF7xvwVC0I7 IYx2IY67AKxVWDJVCq3wA2z4x0Y4vE2Ix0cI8IcVCY1x0267AKxVW8Jr0_Cr1UM28EF7xv wVC2z280aVAFwI0_GcCE3s1l84ACjcxK6I8E87Iv6xkF7I0E14v26rxl6s0DM2AIxVAIcx kEcVAq07x20xvEncxIr21l5I8CrVACY4xI64kE6c02F40Ex7xfMcIj6x8ErcxFaVAv8VW8 Jr1UJr1lOx8S6xCaFVCjc4AY6r1j6r4UM4x0Y48IcxkI7VAKI48JM4xvF2IEb7IF0Fy264 kE64k0F24lc2xSY4AK67AK6r43MxAIw28IcxkI7VAKI48JMxAIw28IcVCjz48v1sIEY20_ Gr1UJr1UMxC20s026xCaFVCjc4AY6r1j6r4UMI8I3I0E5I8CrVAFwI0_Jr0_Jr4lx2IqxV Cjr7xvwVAFwI0_JrI_JrWlx4CE17CEb7AF67AKxVWUXVWUAwCIc40Y0x0EwIxGrwCI42IY 6xIIjxv20xvE14v26r1j6r1xMIIF0xvE2Ix0cI8IcVCY1x0267AKxVW8JVWxJwCI42IY6x AIw20EY4v20xvaj40_Jr0_JF4lIxAIcVC2z280aVAFwI0_Jr0_Gr1lIxAIcVC2z280aVCY 1x0267AKxVW8JVW8Jr1l6VACY4xI67k04243AbIYCTnIWIevJa73UjIFyTuYvjxUfApeUU UUU X-CM-SenderInfo: xjdrwv3l6h245lqf0zpsxwx03jof0z/ X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,KAM_DMARC_STATUS,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE,URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: T24gMjAyMy0wNS0wNcKgMjM6NTcgwqBTaW5hbiA8c2luYW4ubGluQGxpbnV4LmFsaWJhYmEuY29t PiB3cm90ZToKPgo+PiBoaSBKaWF3ZWkKPj4KPj4gUGxlYXNlIGlnbm9yZSBteSBwcmV2aW91cyBy ZXBseS4gSSBhY2NpZGVudGx5IHNlbnQgdGhlIGVtYWlsIGJlZm9yZSBJIGZpbmlzaGVkIGl0Lgo+ PiBTb3JyeSBmb3IgdGhhdCEKPj4KPj4gSSBkb3dubG9hZGVkIHRoZSBzZXJpZXMgb2YgcGF0Y2hl cyBmcm9tIHlvdSBhbmQgZm91bmQgaW4gc29tZSBjYXNlcwo+PiBpdCBmYWlscyB0byBnZW5lcmF0 ZSB6Y21wIHB1c2ggYW5kIHBvcCBpbnNucy4KPj4KPj4gVEM6Cj4+Cj4+IGNoYXIgbXlfZ2V0Y2hh cigpOwo+PiBpbnQgdGVzdF9zMCgpCj4+IHsKPj4KPj4gaW50IGEgPSBteV9nZXRjaGFyKCk7Cj4+ IGludCBiID0gbXlfZ2V0Y2hhcigpOwo+PiByZXR1cm4gYStiOwo+PiB9Cj4+Cj4+IGNjMSAtZm5v LXNocmluay13cmFwLXNlcGFyYXRlIC1PMiAtbWFyY2g9cnYzMmVfemNhX3pjbXAgLW1hYmk9aWxw MzJlIC1tY21vZGVsPW1lZGxvdyB0ZXN0LmMKPj4KPj4gLWZuby1zaHJpbmstd3JhcC1zZXBhcmF0 ZSBpcyB1c2VkIGhlcmUgdG8gYXZvaWQgdGhlIGltcGFjdCBmcm9tIHNocmluay13cmFwLXNlcGFy YXRlIHRoYXQgaXMgYnkgZGVmYXVsdAo+PiBlbmFibGVkIGluIE8yLgo+Pgo+PiBBcyBpJ20gYWxz byBpbnRlcmVzdGVkIGluIFpjKiwgaSBkaWQgc29tZSBjaGFuZ2VzIG1haW5seSBpbiBwcm9sb2d1 ZSBhbmQgZXBpbG9ndWUgcGFzcyBxdWl0ZSBzaW1saWFyIHRvCj4+IHdoYXQgaGFzIGJlZW4gZG9u ZSBmb3Igc2F2ZSBhbmQgcmVzdG9yZSBleGNlcHQgdGhlIENGSSBkaXJlY3RpdmVzIGR1ZSB0byBy ZXZlcnNlZCBvcmRlciB0aGF0IHpjbXAKPj4gcHVzaGVzIGFuZCBwb3BzIHJhLCBzIHJlZ3MgdGhh biB3aGF0IHNhdmUgYW5kIHJlc3RvcmUgZG8uCj4+Cj4+IEkgd2lsbCByZWZpbmUgYW5kIHNoYXJl IHRoZSBjb2RlIHNvb24gZm9yIHlvdXIgcmV2aWV3Lgo+Pgo+PiBCUgo+PiBGZWkKPkhpIEZlaSwK PkluIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLCBjbS5wdXNoIHdpbGwgbm90IGluY3JlYXNl IHRoZSBvcmlnaW5hbCBhZGp1c3RtZW50IHNpemUgb2YgdGhlIHN0YWNrIHBvaW50ZXIuIEFzIGNt LnB1c2ggdXNlcyBhIG1pbmltdW0gYWRqdXN0bWVudCBzaXplIG9mIDE2LCBhbmQgaW4geW91ciBl eGFtcGxlLCB0aGUgYWRqdXN0bWVudCBzaXplIG9mIHNwIGlzIDEyLCBzbyBjbS5wdXNoIHdpbGwg bm90IGJlIGdlbmVyYXRlZC4KPnlvdSBjYW4gZmluZCB0aGUgY2hlY2sgYXQgcmlzY3ZfdXNlX3B1 c2hfcG9wCj4+ID4gKyAqLwo+PiA+ICsgaWYgKGJhc2Vfc2l6ZSA+IGZyYW1lX3NpemUpCj4+ID4g KyByZXR1cm4gZmFsc2U7Cj4+ID4gKwo+QW5kIGlmIHRoaXMgY2hlY2sgaXMgcmVtb3ZlZCwgdGhl biB5b3UgY2FuIGdldCB0aGUgb3V0cHV0IHRoYXQgeW91IGV4cGVjdC4KPmBgYAo+IGNtLnB1c2gg e3JhLHMwfSwtMTYKPiBjYWxsIG15X2dldGNoYXIKPiBtdiBzMCxhMAo+IGNhbGwgbXlfZ2V0Y2hh cgo+IGFkZCBhMCxzMCxhMAo+IGNtLnBvcHJldCB7cmEsczB9LDE2Cj5gYGAKPkluIG1hbnkgc2Nl bmFyaW9zIG9mIHJ2MzJlLCBjbS5wdXNoIGNhbm5vdCBiZSBnZW5lcmF0ZWQgYXMgYSByZXN1bHQu IFBlcmhhcHMgd2UgY2FuIHJlbW92ZSB0aGlzIGNoZWNrPyBJIGhhdmVuJ3QgdGVzdGVkIGlmIGl0 IGlzIG9rIHRvIHJlbW92ZSB0aGlzIGNoZWNrLCBhbmQgQ0Mgamlhd2VpIHRvIGhlbHAgdGVzdCBp dC4KPkJSLAo+U2luYW4gCgpoaSBTaW5hbgoKVGhhbmtzIGZvciB5b3VyIHJlcGx5LiAKSSBwb3N0 ZWQgbXkgY29kZXMgYXTCoGh0dHBzOi8vd3d3Lm1haWwtYXJjaGl2ZS5jb20vZ2NjLXBhdGNoZXNA Z2NjLmdudS5vcmcvbXNnMzA2OTIxLmh0bWwKSW4gdGhlIGNvdmVyIGxldHRlciwgaSBkaWQgc29t ZSBjb21wYXJpc2lvbi7CoApDb3VsZCB5b3UgcGxlYXNlIHJldmlldz8KClRoYW5rcyAmIEJSLMKg CkZlaQoKPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQo+U2VuZGVyOkZlaSBHYW8gPGdhb2ZlaUBlc3dpbmNvbXB1dGluZy5j b20+Cj5TZW50IEF0OjIwMjMgQXByLiAyNSAoVHVlLikgMTg6MTIKPlJlY2lwaWVudDpqaWF3ZWkg PGppYXdlaUBpc2Nhcy5hYy5jbj4KPkNjOmdjYy1wYXRjaGVzIDxnY2MtcGF0Y2hlc0BnY2MuZ251 Lm9yZz4KPlN1YmplY3Q6W1BBVENIIDQvNV0gUklTQy1WOiBBZGQgWmNtcCBleHRlbnNpb24gc3Vw cG9ydHMuCj5oaSBKaWF3ZWkKPlBsZWFzZSBpZ25vcmUgbXkgcHJldmlvdXMgcmVwbHkuIEkgYWNj aWRlbnRseSBzZW50IHRoZSBlbWFpbCBiZWZvcmUgSSBmaW5pc2hlZCBpdC4KPlNvcnJ5IGZvciB0 aGF0IQo+SSBkb3dubG9hZGVkIHRoZSBzZXJpZXMgb2YgcGF0Y2hlcyBmcm9tIHlvdSBhbmQgZm91 bmQgaW4gc29tZSBjYXNlcwo+aXQgZmFpbHMgdG8gZ2VuZXJhdGUgemNtcCBwdXNoIGFuZCBwb3Ag aW5zbnMuCj5UQzoKPmNoYXIgbXlfZ2V0Y2hhcigpOwo+aW50IHRlc3RfczAoKQo+ewo+IGludCBh ID0gbXlfZ2V0Y2hhcigpOwo+IGludCBiID0gbXlfZ2V0Y2hhcigpOwo+IHJldHVybiBhK2I7Cj59 Cj5jYzEgLWZuby1zaHJpbmstd3JhcC1zZXBhcmF0ZSAtTzIgLW1hcmNoPXJ2MzJlX3pjYV96Y21w IC1tYWJpPWlscDMyZSAtbWNtb2RlbD1tZWRsb3cgdGVzdC5jCj4tZm5vLXNocmluay13cmFwLXNl cGFyYXRlIGlzIHVzZWQgaGVyZSB0byBhdm9pZCB0aGUgaW1wYWN0IGZyb20gc2hyaW5rLXdyYXAt c2VwYXJhdGUgdGhhdCBpcyBieSBkZWZhdWx0Cj5lbmFibGVkIGluIE8yLgo+QXMgaSdtIGFsc28g aW50ZXJlc3RlZCBpbiBaYyosIGkgZGlkIHNvbWUgY2hhbmdlcyBtYWlubHkgaW4gcHJvbG9ndWUg YW5kIGVwaWxvZ3VlIHBhc3MgcXVpdGUgc2ltbGlhciB0bwo+d2hhdCBoYXMgYmVlbiBkb25lIGZv ciBzYXZlIGFuZCByZXN0b3JlIGV4Y2VwdCB0aGUgQ0ZJIGRpcmVjdGl2ZXMgZHVlIHRvIHJldmVy c2VkIG9yZGVyIHRoYXQgemNtcAo+cHVzaGVzIGFuZCBwb3BzIHJhLCBzIHJlZ3MgdGhhbiB3aGF0 IHNhdmUgYW5kIHJlc3RvcmUgZG8uCj5JIHdpbGwgcmVmaW5lIGFuZCBzaGFyZSB0aGUgY29kZSBz b29uIGZvciB5b3VyIHJldmlldy4KPkJSCj5GZWkKPk9uIFRodSBBcHIgNiAwNjoyMToxNyBHTVQg MjAyMyBKaWF3ZWkgamlhd2VpQGlzY2FzLmFjLmNuIHdyb3RlOgo+Pgo+PkFkZCBaY21wIGV4dGVu c2lvbiBpbnN0cnVjdGlvbnMgc3VwcG9ydC4gR2VuZXJhdGUgcHVzaC9wb3AKPj53aXRoIGZvbGxv dyBzdGVwczoKPj4KPj4gMS4gcHJlcHJvY2Vzc2luZzoKPj4gMS4xLiBpZiB0aGVyZSBpcyBubyBw dXNoIHJ0eCwgdGhlbiBqdXN0IHJldHVybi4gZS5nLgo+PiAobm90ZSA1IDEgMjIgMiBbYmIgMl0g Tk9URV9JTlNOX0JBU0lDX0JMT0NLKQo+PiAoaW5zbi9mIDIyIDUgMjMgMiAoc2V0IChyZWcvZjpT SSAyIHNwKQo+PiAocGx1czpTSSAocmVnL2Y6U0kgMiBzcCkKPj4gKGNvbnN0X2ludCAtMzIgWzB4 ZmZmZmZmZmZmZmZmZmZlMF0pKSkKPj4gKG5pbCkpCj4+IChub3RlIDIzIDIyIDIgMiBOT1RFX0lO U05fUFJPTE9HVUVfRU5EKQo+PiAxLjIuIGlmIHB1c2ggcnR4IGV4aXN0cywgdGhlbiB3ZSBjb21w dXRlIHRoZSBudW1iZXIgb2YKPj4gcHVzaGVkIHMtcmVnaXN0ZXJzLCBuX3NyZWcuCj4+Cj4+IHB1 c2ggcnR4IHNob3VsZCBiZSBmaW5kIGJlZm9yZSBOT1RFX0lOU05fUFJPTE9HVUVfRU5EIHRhZwo+ Pgo+PiBbMiBhbmQgMyBoYXBwZW5kIHNpbXVsdGFuZW91c2x5XQo+Pgo+PiAyLiBmaW5kIHZhbGlk IG1vdmUgcGF0dGVybiwgbXYgc04sIGFOLCB3aGVyZSBOIDwgbl9zcmVnLAo+PiBhbmQgYU4gaXMg bm90IHVzZWQgdGhlIG1vdmUgcGF0dGVybiwgYW5kIHNOIGlzIG5vdAo+PiBkZWZpbmVkIGJlZm9y ZSB0aGUgbW92ZSBwYXR0ZXJuIChmcm9tIHByb2xvZ3VlIHRvIHRoZQo+PiBwb3NpdGlvbiBvZiBt b3ZlIHBhdHRlcm4pLgo+Pgo+PiAzLiBhbmFseXNpcyB1c2UgYW5kIHJlYWNoIG9mIGV2ZXJ5IGlu c3RydWN0aW9uIGZyb20gcHJvbG9ndWUKPj4gdG8gdGhlIHBvc2l0aW9uIG9mIG1vdmUgcGF0dGVy bi4KPj4gaWYgYW55IHNOIGlzIHVzZWQsIHRoZW4gd2UgbWFyayB0aGUgY29ycmVzcG9uZGluZyBh cmd1bWVudCBsaXN0Cj4+IGNhbmRpZGF0ZSBhcyBpbnZhbGlkLgo+PiBlLmcuCj4+IHB1c2gge3Jh LHMwLXMzfSwge30sIC0zMgo+PiBzdyBzMCw0NChzcCkgIyBzMCBpcyB1c2VkLCB0aGVuIGFyZ3Vt ZW50IGxpc3QgaXMgaW52YWxpZAo+PiBtdiBhMCxhNSAjIGEwIGlzIGRlZmluZWQsIHRoZW4gYXJn dW1lbnQgbGlzdCBpcyBpbnZhbGlkCj4+IC4uLgo+PiBtdiBzMCxhMAo+PiBtdiBzMSxhMQo+PiBt diBzMixhMgo+Pgo+PiA0LiBpZiB0aGVyZSBpcyBhIHZhbGlkIGFyZ3VtZW50IGxpc3QsIHRoZW4g cmVwbGFjZSB0aGUgcG9wCj4+IHB1c2ggcGFyYWxsZWwgaW5zbiwgYW5kIGRlbGV0ZSBtdiBwYXR0 ZXJuLgo+PiBpZiBub3QsIHNraXAuCj4+Cj4+QWxsICJ6Y21wZSIgbWVhbnMgWmNtcCB3aXRoIFJW RSBleHRlbnNpb24uCj4+VGhlIHB1c2gvcG9wIGluc3RydW5jdGlvbiBpbXBsZW1lbnQgaXMgbW9z dGx5IGZpbmlzaGVkIGJ5IFNpbmFuIExpbi4KPj4KPj5Dby1BdXRob3JlZCBieTogU2luYW4gTGlu IDxzaW5hbi4uLi5AbGludXguYWxpYmFiYS5jb20+Cj4+Q28tQXV0aG9yZWQgYnk6IFNpbW9uIENv b2sgPHNpbW9uLmMuLi5AZW1iZWNvc20uY29tPgo+PkNvLUF1dGhvcmVkIGJ5OiBTaGlodWEgTGlh byA8c2hpLi4uQGlzY2FzLmFjLmNuPgo+Pgo+PmdjYy9DaGFuZ2VMb2c6Cj4+Cj4+ICogY29uZmln LmdjYzogTmV3IG9iamVjdC4KPj4gKiBjb25maWcvcmlzY3YvcHJlZGljYXRlcy5tZCAocmlzY3Zf c3RhY2tfcHVzaF9vcGVyYXRpb24pOgo+PiBOZXcgcHJlZGljYXRlLgo+PiAocmlzY3Zfc3RhY2tf cG9wX29wZXJhdGlvbik6IERpdHRvLgo+PiAocG9wX3JldHVybl92YWx1ZV9jb25zdGFudCk6IERp dHRvLgo+PiAqIGNvbmZpZy9yaXNjdi9yaXNjdi1wYXNzZXMuZGVmIChJTlNFUlRfUEFTU19BRlRF Uik6IE5ldyBwYXNzLgo+PiAqIGNvbmZpZy9yaXNjdi9yaXNjdi1wcm90b3MuaCAocmlzY3Zfb3V0 cHV0X3BvcHJldF9wKToKPj4gTmV3IHJvdXRpbmUuCj4+IChyaXNjdl92YWxpZF9zdGFja19wdXNo X3BvcF9wKTogRGl0dG8uCj4+IChyaXNjdl9jaGVja19yZWdubyk6IERpdHRvLgo+PiAobWFrZV9w YXNzX3pjbXBfcG9wcmV0KTogTmV3IHBhc3MuCj4+ICogY29uZmlnL3Jpc2N2L3Jpc2N2LmNjIChz dHJ1Y3QgcmlzY3ZfZnJhbWVfaW5mbyk6IE5ldyB2YXJpYWJsZS4KPj4gKHJpc2N2X291dHB1dF9w b3ByZXRfcCk6IE5ldyBmdW5jdGlvbi4KPj4gKHJpc2N2X3ByaW50X3BvcF9zaXplKTogRGl0dG8u Cj4+IChyaXNjdl9wcmludF9yZWdsaXN0KTogRGl0dG8uCj4+IChyaXNjdl9wcmludF9vcGVyYW5k KTogTmV3IGNhc2Ugc3ltYm9scy4KPj4gKHJpc2N2X3NhdmVfcHVzaF9wb3BfY291bnQpOiBOZXcg ZnVuY3Rpb24uCj4+IChyaXNjdl9wdXNoX3BvcF9iYXNlX3NwX2FkanVzdCk6IERpdHRvLgo+PiAo cmlzY3ZfdXNlX3B1c2hfcG9wKTogRGl0dG8uCj4+IChyaXNjdl9jb21wdXRlX2ZyYW1lX2luZm8p OiBBZGp1c3QgZnJhbWUgdmFsdWUuCj4+IChyaXNjdl9lbWl0X3BvcF9pbnNuKTogTmV3IGZ1bmN0 aW9uLgo+PiAocmlzY3ZfY2hlY2tfcmVnbm8pOiBEaXR0by4KPj4gKHJpc2N2X3ZhbGlkX3N0YWNr X3B1c2hfcG9wX3ApOiBEaXR0by4KPj4gKHJpc2N2X2VtaXRfcHVzaF9pbnNuKTogRGl0dG8uCj4+ IChyaXNjdl9leHBhbmRfcHJvbG9ndWUpOiBNb2RpZnkgZnJhbWUgcGF0dGVybi4KPj4gKHJpc2N2 X2V4cGFuZF9lcGlsb2d1ZSk6IERpdHRvLgo+PiAqIGNvbmZpZy9yaXNjdi9yaXNjdi5oIChSRVRV Uk5fVkFMVUVfUkVHTlVNKToKPj4gKFJJU0NWX1pDRV9QVVNIX1BPUF9NQVNLKTogTmV3IG1hc2su Cj4+IChSSVNDVl9aQ01QRV9QVVNIX1BPUF9NQVNLKTogRGl0dG8uCj4+ICogY29uZmlnL3Jpc2N2 L3Jpc2N2Lm1kOiBBZGQgbmV3IHJlZyBudW1iZXIgYW5kIGluY2x1ZGUgaW5mby4KPj4gKiBjb25m aWcvcmlzY3YvdC1yaXNjdjogTmV3IG9iamVjdCBydWxlcy4KPj4gKiBjb25maWcvcmlzY3Yvcmlz Y3YtemNtcC1wb3ByZXQuY2M6IE5ldyBmaWxlLgo+PiAqIGNvbmZpZy9yaXNjdi96Yy5tZDogTmV3 IGZpbGUuCj4+LS0tCj4+IGdjYy9jb25maWcuZ2NjIHwgMiArLQo+PiBnY2MvY29uZmlnL3Jpc2N2 L3ByZWRpY2F0ZXMubWQgfCAxNiArCj4+IGdjYy9jb25maWcvcmlzY3YvcmlzY3YtcGFzc2VzLmRl ZiB8IDEgKwo+PiBnY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oIHwgNCArCj4+IGdjYy9j b25maWcvcmlzY3YvcmlzY3YtemNtcC1wb3ByZXQuY2MgfCAyNjAgKysrKysrKysrKysrKysrCj4+ IGdjYy9jb25maWcvcmlzY3YvcmlzY3YuY2MgfCA0MzcgKysrKysrKysrKysrKysrKysrKysrKysr Ky0KPj4gZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5oIHwgNCArCj4+IGdjYy9jb25maWcvcmlzY3Yv cmlzY3YubWQgfCAzICsKPj4gZ2NjL2NvbmZpZy9yaXNjdi90LXJpc2N2IHwgNCArCj4+IGdjYy9j b25maWcvcmlzY3YvemMubWQgfCA0NyArKysKPj4gMTAgZmlsZXMgY2hhbmdlZCwgNzY3IGluc2Vy dGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQo+PiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL2NvbmZp Zy9yaXNjdi9yaXNjdi16Y21wLXBvcHJldC5jYwo+PiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL2Nv bmZpZy9yaXNjdi96Yy5tZAo+Pgo+PmRpZmYgLS1naXQgYS9nY2MvY29uZmlnLmdjYyBiL2djYy9j b25maWcuZ2NjCj4+aW5kZXggNjI5ZDMyNGI1ZWYuLmE5OTFjNTI3M2Y5IDEwMDY0NAo+Pi0tLSBh L2djYy9jb25maWcuZ2NjCj4+KysrIGIvZ2NjL2NvbmZpZy5nY2MKPj5AQCAtNTI5LDcgKzUyOSw3 IEBAIHBydS0qLSopCj4+IDs7Cj4+IHJpc2N2KikKPj4gY3B1X3R5cGU9cmlzY3YKPj4tIGV4dHJh X29ianM9InJpc2N2LWJ1aWx0aW5zLm8gcmlzY3YtYy5vIHJpc2N2LXNyLm8KPj5yaXNjdi1zaG9y dGVuLW1lbXJlZnMubyByaXNjdi1zZWxmdGVzdHMubyByaXNjdi12Lm8gcmlzY3YtdnNldHZsLm8i Cj4+KyBleHRyYV9vYmpzPSJyaXNjdi1idWlsdGlucy5vIHJpc2N2LWMubyByaXNjdi1zci5vCj4+ cmlzY3Ytc2hvcnRlbi1tZW1yZWZzLm8gcmlzY3Ytc2VsZnRlc3RzLm8gcmlzY3Ytdi5vIHJpc2N2 LXZzZXR2bC5vCj4+cmlzY3YtemNtcC1wb3ByZXQubyIKPj4gZXh0cmFfb2Jqcz0iJHtleHRyYV9v YmpzfSByaXNjdi12ZWN0b3ItYnVpbHRpbnMubwo+PnJpc2N2LXZlY3Rvci1idWlsdGlucy1zaGFw ZXMubyByaXNjdi12ZWN0b3ItYnVpbHRpbnMtYmFzZXMubyIKPj4gZXh0cmFfb2Jqcz0iJHtleHRy YV9vYmpzfSB0aGVhZC5vIgo+PiBkX3RhcmdldF9vYmpzPSJyaXNjdi1kLm8iCj4+ZGlmZiAtLWdp dCBhL2djYy9jb25maWcvcmlzY3YvcHJlZGljYXRlcy5tZCBiL2djYy9jb25maWcvcmlzY3YvcHJl ZGljYXRlcy5tZAo+PmluZGV4IDBkOWQ3NzAxYzdlLi42YmZmNmNkMDQ3YSAxMDA2NDQKPj4tLS0g YS9nY2MvY29uZmlnL3Jpc2N2L3ByZWRpY2F0ZXMubWQKPj4rKysgYi9nY2MvY29uZmlnL3Jpc2N2 L3ByZWRpY2F0ZXMubWQKPj5AQCAtNDEyLDMgKzQxMiwxOSBAQAo+PiAoYW5kIChtYXRjaF9jb2Rl ICJjb25zdF9pbnQiKQo+PiAoaW9yIChtYXRjaF9vcGVyYW5kIDAgIm5vdF91aW1tX2V4dHJhX2Jp dF9vcGVyYW5kIikKPj4gKG1hdGNoX29wZXJhbmQgMCAiY29uc3Rfbm90dHdvYml0c19vcGVyYW5k IikpKSkKPj4rCj4+KyhkZWZpbmVfc3BlY2lhbF9wcmVkaWNhdGUgInJpc2N2X3N0YWNrX3B1c2hf b3BlcmF0aW9uIgo+PisgKG1hdGNoX2NvZGUgInBhcmFsbGVsIikKPj4rewo+PisgcmV0dXJuIHJp c2N2X3ZhbGlkX3N0YWNrX3B1c2hfcG9wX3AgKG9wLCB0cnVlKTsKPj4rfSkKPj4rCj4+KyhkZWZp bmVfc3BlY2lhbF9wcmVkaWNhdGUgInJpc2N2X3N0YWNrX3BvcF9vcGVyYXRpb24iCj4+KyAobWF0 Y2hfY29kZSAicGFyYWxsZWwiKQo+Pit7Cj4+KyByZXR1cm4gcmlzY3ZfdmFsaWRfc3RhY2tfcHVz aF9wb3BfcCAob3AsIGZhbHNlKTsKPj4rfSkKPj4rCj4+KyhkZWZpbmVfcHJlZGljYXRlICJwb3Bf cmV0dXJuX3ZhbHVlX2NvbnN0YW50Igo+PisgKGFuZCAobWF0Y2hfY29kZSAiY29uc3RfaW50IikK Pj4rIChtYXRjaF90ZXN0ICJJTlRWQUwgKG9wKSA9PSAwIikpKQo+PmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL3Jpc2N2L3Jpc2N2LXBhc3Nlcy5kZWYKPj5iL2djYy9jb25maWcvcmlzY3YvcmlzY3Yt cGFzc2VzLmRlZgo+PmluZGV4IDQwODQxMjJjZjBhLi4yNTYyNWI5YWYzZSAxMDA2NDQKPj4tLS0g YS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXBhc3Nlcy5kZWYKPj4rKysgYi9nY2MvY29uZmlnL3Jp c2N2L3Jpc2N2LXBhc3Nlcy5kZWYKPj5AQCAtMTksMyArMTksNCBAQAo+Pgo+PiBJTlNFUlRfUEFT U19BRlRFUiAocGFzc19ydGxfc3RvcmVfbW90aW9uLCAxLCBwYXNzX3Nob3J0ZW5fbWVtcmVmcyk7 Cj4+IElOU0VSVF9QQVNTX0JFRk9SRSAocGFzc19mYXN0X3J0bF9kY2UsIDEsIHBhc3NfdnNldHZs KTsKPj4rSU5TRVJUX1BBU1NfQUZURVIgKHBhc3NfY3Byb3BfaGFyZHJlZywgMSwgcGFzc196Y21w X3BvcHJldCk7Cj4+ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtcHJvdG9zLmgg Yi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oCj4+aW5kZXggNDYxMTQ0N2RkZGUuLjhm MjQzY2Q1ZjQ0IDEwMDY0NAo+Pi0tLSBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtcHJvdG9zLmgK Pj4rKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LXByb3Rvcy5oCj4+QEAgLTU0LDYgKzU0LDcg QEAgZXh0ZXJuIGJvb2wgcmlzY3Zfc3BsaXRfNjRiaXRfbW92ZV9wIChydHgsIHJ0eCk7Cj4+IGV4 dGVybiB2b2lkIHJpc2N2X3NwbGl0X2RvdWJsZXdvcmRfbW92ZSAocnR4LCBydHgpOwo+PiBleHRl cm4gY29uc3QgY2hhciAqcmlzY3Zfb3V0cHV0X21vdmUgKHJ0eCwgcnR4KTsKPj4gZXh0ZXJuIGNv bnN0IGNoYXIgKnJpc2N2X291dHB1dF9yZXR1cm4gKCk7Cj4+K2V4dGVybiBib29sIHJpc2N2X291 dHB1dF9wb3ByZXRfcCAocnR4KTsKPj4KPj4gI2lmZGVmIFJUWF9DT0RFCj4+IGV4dGVybiB2b2lk IHJpc2N2X2V4cGFuZF9pbnRfc2NjIChydHgsIGVudW0gcnR4X2NvZGUsIHJ0eCwgcnR4KTsKPj5A QCAtNzksNiArODAsOCBAQCBleHRlcm4gdm9pZCByaXNjdl9yZWluaXQgKHZvaWQpOwo+PiBleHRl cm4gcG9seV91aW50NjQgcmlzY3ZfcmVnbW9kZV9uYXR1cmFsX3NpemUgKG1hY2hpbmVfbW9kZSk7 Cj4+IGV4dGVybiBib29sIHJpc2N2X3ZfZXh0X3ZlY3Rvcl9tb2RlX3AgKG1hY2hpbmVfbW9kZSk7 Cj4+IGV4dGVybiBib29sIHJpc2N2X3NoYW10X21hdGNoZXNfbWFza19wIChpbnQsIEhPU1RfV0lE RV9JTlQpOwo+PitleHRlcm4gYm9vbCByaXNjdl92YWxpZF9zdGFja19wdXNoX3BvcF9wIChydHgs IGJvb2wpOwo+PitleHRlcm4gYm9vbCByaXNjdl9jaGVja19yZWdubyhydHgsIHVuc2lnbmVkKTsK Pj4KPj4gLyogUm91dGluZXMgaW1wbGVtZW50ZWQgaW4gcmlzY3YtYy5jYy4gKi8KPj4gdm9pZCBy aXNjdl9jcHVfY3BwX2J1aWx0aW5zIChjcHBfcmVhZGVyICopOwo+PkBAIC05OSw2ICsxMDIsNyBA QCBleHRlcm4gYm9vbCByaXNjdl9oYXJkX3JlZ25vX3JlbmFtZV9vayAodW5zaWduZWQsIHVuc2ln bmVkKTsKPj4KPj4gcnRsX29wdF9wYXNzICogbWFrZV9wYXNzX3Nob3J0ZW5fbWVtcmVmcyAoZ2Nj Ojpjb250ZXh0ICpjdHh0KTsKPj4gcnRsX29wdF9wYXNzICogbWFrZV9wYXNzX3ZzZXR2bCAoZ2Nj Ojpjb250ZXh0ICpjdHh0KTsKPj4rcnRsX29wdF9wYXNzICogbWFrZV9wYXNzX3pjbXBfcG9wcmV0 IChnY2M6OmNvbnRleHQgKmN0eHQpOwo+Pgo+PiAvKiBJbmZvcm1hdGlvbiBhYm91dCBvbmUgQ1BV IHdlIGtub3cgYWJvdXQuICovCj4+IHN0cnVjdCByaXNjdl9jcHVfaW5mbyB7Cj4+ZGlmZiAtLWdp dCBhL2djYy9jb25maWcvcmlzY3YvcmlzY3YtemNtcC1wb3ByZXQuY2MKPj5iL2djYy9jb25maWcv cmlzY3YvcmlzY3YtemNtcC1wb3ByZXQuY2MKPj5uZXcgZmlsZSBtb2RlIDEwMDY0NAo+PmluZGV4 IDAwMDAwMDAwMDAwLi5kN2I0MGY2YTNlMgo+Pi0tLSAvZGV2L251bGwKPj4rKysgYi9nY2MvY29u ZmlnL3Jpc2N2L3Jpc2N2LXpjbXAtcG9wcmV0LmNjCj4+QEAgLTAsMCArMSwyNjAgQEAKPj4rI2lu Y2x1ZGUgImNvbmZpZy5oIgo+PisjaW5jbHVkZSAic3lzdGVtLmgiCj4+KyNpbmNsdWRlICJjb3Jl dHlwZXMuaCIKPj4rI2luY2x1ZGUgInRtLmgiCj4+KyNpbmNsdWRlICJydGwuaCIKPj4rI2luY2x1 ZGUgImJhY2tlbmQuaCIKPj4rI2luY2x1ZGUgInJlZ3MuaCIKPj4rI2luY2x1ZGUgInRhcmdldC5o Igo+PisjaW5jbHVkZSAibWVtbW9kZWwuaCIKPj4rI2luY2x1ZGUgImVtaXQtcnRsLmgiCj4+KyNp bmNsdWRlICJkZi5oIgo+PisjaW5jbHVkZSAicHJlZGljdC5oIgo+PisjaW5jbHVkZSAidHJlZS1w YXNzLmgiCj4+KyNpbmNsdWRlICJ0cmVlLmgiCj4+KyNpbmNsdWRlICJ0bV9wLmgiCj4+KyNpbmNs dWRlICJvcHRhYnMuaCIKPj4rI2luY2x1ZGUgInJlY29nLmgiCj4+KyNpbmNsdWRlICJjZmdydGwu aCIKPj4rCj4+KyNkZWZpbmUgSU5fVEFSR0VUX0NPREUgMQo+PisKPj4rbmFtZXNwYWNlIHsKPj4r Cj4+Ky8qCj4+KyAxLiBwcmVwcm9jZXNzaW5nOgo+PisgMS4xLiBpZiB0aGVyZSBpcyBubyBwdXNo IHJ0eCwgdGhlbiBqdXN0IHJldHVybi4gZS5nLgo+PisgKG5vdGUgNSAxIDIyIDIgW2JiIDJdIE5P VEVfSU5TTl9CQVNJQ19CTE9DSykKPj4rIChpbnNuL2YgMjIgNSAyMyAyIChzZXQgKHJlZy9mOlNJ IDIgc3ApCj4+KyAocGx1czpTSSAocmVnL2Y6U0kgMiBzcCkKPj4rIChjb25zdF9pbnQgLTMyIFsw eGZmZmZmZmZmZmZmZmZmZTBdKSkpCj4+KyAobmlsKSkKPj4rIChub3RlIDIzIDIyIDIgMiBOT1RF X0lOU05fUFJPTE9HVUVfRU5EKQo+PisgMS4yLiBpZiBwdXNoIHJ0eCBleGlzdHMsIHRoZW4gd2Ug Y29tcHV0ZSB0aGUgbnVtYmVyIG9mCj4+KyBwdXNoZWQgcy1yZWdpc3RlcnMsIG5fc3JlZy4KPj4r Cj4+KyBwdXNoIHJ0eCBzaG91bGQgYmUgZmluZCBiZWZvcmUgTk9URV9JTlNOX1BST0xPR1VFX0VO RCB0YWcKPj4rCj4+KyBbMiBhbmQgMyBoYXBwZW5kIHNpbXVsdGFuZW91c2x5XQo+PisgMi4gZmlu ZCB2YWxpZCBtb3ZlIHBhdHRlcm4sIG12IHNOLCBhTiwgd2hlcmUgTiA8IG5fc3JlZywKPj4rIGFu ZCBhTiBpcyBub3QgdXNlZCB0aGUgbW92ZSBwYXR0ZXJuLCBhbmQgc04gaXMgbm90Cj4+KyBkZWZp bmVkIGJlZm9yZSB0aGUgbW92ZSBwYXR0ZXJuIChmcm9tIHByb2xvZ3VlIHRvIHRoZQo+PisgcG9z aXRpb24gb2YgbW92ZSBwYXR0ZXJuKS4KPj4rIDMuIGFuYWx5c2lzIHVzZSBhbmQgcmVhY2ggb2Yg ZXZlcnkgaW5zdHJ1Y3Rpb24gZnJvbSBwcm9sb2d1ZQo+PisgdG8gdGhlIHBvc2l0aW9uIG9mIG1v dmUgcGF0dGVybi4KPj4rIGlmIGFueSBzTiBpcyB1c2VkLCB0aGVuIHdlIG1hcmsgdGhlIGNvcnJl c3BvbmRpbmcgYXJndW1lbnQgbGlzdAo+PisgY2FuZGlkYXRlIGFzIGludmFsaWQuCj4+KyBlLmcu Cj4+KyBwdXNoIHtyYSxzMC1zM30sIHt9LCAtMzIKPj4rIHN3IHMwLDQ0KHNwKSAjIHMwIGlzIHVz ZWQsIHRoZW4gYXJndW1lbnQgbGlzdCBpcyBpbnZhbGlkCj4+KyBtdiBhMCxhNSAjIGEwIGlzIGRl ZmluZWQsIHRoZW4gYXJndW1lbnQgbGlzdCBpcyBpbnZhbGlkCj4+KyAuLi4KPj4rIG12IHMwLGEw Cj4+KyBtdiBzMSxhMQo+PisgbXYgczIsYTIKPj4rCj4+KyA0LiBpZiB0aGVyZSBpcyBhIHZhbGlk IGFyZ3VtZW50IGxpc3QsIHRoZW4gcmVwbGFjZSB0aGUgcG9wCj4+KyBwdXNoIHBhcmFsbGVsIGlu c24sIGFuZCBkZWxldGUgbXYgcGF0dGVybi4KPj4rIGlmIG5vdCwgc2tpcC4KPj4rKi8KPj4rCj4+ K3N0YXRpYyB2b2lkCj4+K2VtaXRfemNtcF9wb3ByZXQgKHJ0eF9pbnNuICpwb3BfcnR4LAo+Pisg cnR4X2luc24gKipjYW5kaWRhdGVzLAo+PisgYmFzaWNfYmxvY2sgYmIpCj4+K3sKPj4rIGJvb2wg Z2VuX3BvcHJldHpfcCA9IGNhbmRpZGF0ZXMgWzBdOwo+PisgYm9vbCBnZW5fcG9wcmV0X3AgPSBj YW5kaWRhdGVzIFsyXTsKPj4rCj4+KyBpZiAoIShnZW5fcG9wcmV0X3AgfHwgZ2VuX3BvcHJldHpf cCkpCj4+KyByZXR1cm47Cj4+Kwo+PisgZ2NjX2Fzc2VydCAoKGdlbl9wb3ByZXRfcCAmJiAhZ2Vu X3BvcHJldHpfcCkKPj4rIHx8IChnZW5fcG9wcmV0el9wICYmIGdlbl9wb3ByZXRfcCkpOwo+PisK Pj4rIHJ0eCBwb3BfcGF0ID0gUEFUVEVSTiAocG9wX3J0eCk7Cj4+KyB1bnNpZ25lZCBwb3BfaWR4 ID0gMCwgcG9wcmV0X2lkeCA9IDA7Cj4+KyB1bnNpZ25lZCBuX3BvcF9wYXIgPSBYVkVDTEVOIChw b3BfcGF0LCAwKTsKPj4rIHVuc2lnbmVkIG5fcG9wcmV0X3BhciA9IG5fcG9wX3Bhcgo+PisgKyAo Z2VuX3BvcHJldHpfcCA/IDIgOiAwKQo+PisgKyAoZ2VuX3BvcHJldF9wID8gMiA6IDApOwo+PisK Pj4rIHJ0eCBwb3ByZXRfcGFyID0gZ2VuX3J0eF9QQVJBTExFTCAoVk9JRG1vZGUsCj4+KyBydHZl Y19hbGxvYyAobl9wb3ByZXRfcGFyKSk7Cj4+Kwo+PisgLyogcmV0dXJuIHplcm8gcGF0dGVybiAq Lwo+PisgaWYgKGdlbl9wb3ByZXR6X3ApCj4+KyB7Cj4+KyBYVkVDRVhQIChwb3ByZXRfcGFyLCAw LCAwKSA9IFBBVFRFUk4gKGNhbmRpZGF0ZXNbMF0pOwo+PisgWFZFQ0VYUCAocG9wcmV0X3Bhciwg MCwgMSkgPSBQQVRURVJOIChjYW5kaWRhdGVzWzFdKTsKPj4rIHBvcHJldF9pZHggKz0gMjsKPj4r IGRlbGV0ZV9pbnNuIChjYW5kaWRhdGVzWzBdKTsKPj4rIGRlbGV0ZV9pbnNuIChjYW5kaWRhdGVz WzFdKTsKPj4rIH0KPj4rCj4+KyAvKiBjb3B5IHBvcCBwYXJ1ZW5jZS4gKi8KPj4rIGZvciAoOyBw b3BfaWR4IDwgbl9wb3BfcGFyOwo+PisgcG9wX2lkeCArKywgcG9wcmV0X2lkeCArKykKPj4rIHsK Pj4rIFhWRUNFWFAgKHBvcHJldF9wYXIsIDAsIHBvcHJldF9pZHgpID0KPj4rIFhWRUNFWFAgKHBv cF9wYXQsIDAsIHBvcF9pZHgpOwo+PisgfQo+PisKPj4rIC8qIHJldCBwYXR0ZXJuLiAqLwo+Pisg cnR4IHJldF9wYXQgPSBQQVRURVJOIChjYW5kaWRhdGVzWzJdKTsKPj4rIGdjY19hc3NlcnQgKEdF VF9DT0RFIChyZXRfcGF0KSA9PSBQQVJBTExFTCk7Cj4+Kwo+PisgZm9yIChpbnQgaSA9IDA7IGkg PCBYVkVDTEVOIChyZXRfcGF0LCAwKTsKPj4rIGkrKywgcG9wcmV0X2lkeCsrKQo+Pisgewo+Pisg WFZFQ0VYUCAocG9wcmV0X3BhciwgMCwgcG9wcmV0X2lkeCkgPQo+PisgWFZFQ0VYUCAocmV0X3Bh dCwgMCwgaSk7Cj4+KyB9Cj4+Kwo+PisgcnR4X2luc24gKmluc24gPSBlbWl0X2p1bXBfaW5zbl9h ZnRlciAoCj4+KyBwb3ByZXRfcGFyLAo+PisgQkJfRU5EIChiYikpOwo+PisgSlVNUF9MQUJFTCAo aW5zbikgPSBzaW1wbGVfcmV0dXJuX3J0eDsKPj4rCj4+KyBSRUdfTk9URVMgKGluc24pID0gUkVH X05PVEVTIChwb3BfcnR4KTsKPj4rIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24pID0gMTsKPj4r Cj4+KyBpZiAoZHVtcF9maWxlKQo+Pisgewo+PisgZnByaW50ZihkdW1wX2ZpbGUsICJuZXcgaW5z bjpcbiIpOwo+PisgcHJpbnRfcnRsIChkdW1wX2ZpbGUsIGluc24pOwo+PisgfQo+PisKPj4rIGRl bGV0ZV9pbnNuIChjYW5kaWRhdGVzIFsyXSk7Cj4+KyBkZWxldGVfaW5zbiAocG9wX3J0eCk7Cj4+ K30KPj4rCj4+K3N0YXRpYyB2b2lkCj4+K3pjbXBfcG9wcmV0ICh2b2lkKQo+Pit7Cj4+KyBiYXNp Y19ibG9jayBiYjsKPj4rIHJ0eF9pbnNuICppbnNuID0gTlVMTCwgKnBvcF9ydHggPSBOVUxMOwo+ PisgcnR4X2luc24gKnBvcF9jYW5kaWRhdGVzWzNdID0ge05VTEwsIH07Cj4+KyAvKgo+PisgZmlu ZCBOT1RFX0lOU05fRVBJTE9HVUVfQkVHLCBidXQgcG9wX3J0eCBub3QgZm91bmQgPT4gcmV0dXJu Cj4+KyBmaW5kIE5PVEVfSU5TTl9FUElMT0dVRV9CRUcsIGFuZCBwb3BfcnR4IGlzIGZvdW5kID0+ IGxvb2tpbmcgZm9yIGEwCj4+KyAqLwo+PisKPj4rIEZPUl9FQUNIX0JCX1JFVkVSU0VfRk4gKGJi LCBjZnVuKQo+Pisgewo+PisgRk9SX0JCX0lOU05TX1JFVkVSU0UgKGJiLCBpbnNuKQo+Pisgewo+ PisgaWYgKCFwb3BfcnR4Cj4+KyAmJiBOT1RFX1AgKGluc24pCj4+KyAmJiBOT1RFX0tJTkQgKGlu c24pID09IE5PVEVfSU5TTl9FUElMT0dVRV9CRUcpCj4+KyByZXR1cm47Cj4+Kwo+PisgaWYgKE5P VEVfUCAoaW5zbikKPj4rICYmIE5PVEVfS0lORCAoaW5zbikgPT0gTk9URV9JTlNOX0ZVTkNUSU9O X0JFRykKPj4rIHsKPj4rIGlmIChwb3BfcnR4KQo+PisgZW1pdF96Y21wX3BvcHJldCAocG9wX3J0 eCwgcG9wX2NhbmRpZGF0ZXMsIGJiKTsKPj4rIHJldHVybjsKPj4rIH07Cj4+Kwo+PisgaWYgKCEo Tk9OREVCVUdfSU5TTl9QIChpbnNuKQo+PisgfHwgQ0FMTF9QIChpbnNuKSkpCj4+KyBjb250aW51 ZTsKPj4rCj4+KyBydHggcG9wX3BhdCA9IFBBVFRFUk4gKGluc24pOwo+PisKPj4rIGlmIChHRVRf Q09ERSAocG9wX3BhdCkgPT0gUEFSQUxMRUwKPj4rICYmIHJpc2N2X3ZhbGlkX3N0YWNrX3B1c2hf cG9wX3AgKHBvcF9wYXQsIGZhbHNlKSkKPj4rIHsKPj4rIHBvcF9ydHggPSBpbnNuOwo+PisgY29u dGludWU7Cj4+KyB9Cj4+Kwo+PisgLyogcGF0dGVybiBmb3IgYHJldGAuICovCj4+KyBpZiAoSlVN UF9QIChpbnNuKQo+PisgJiYgR0VUX0NPREUgKHBvcF9wYXQpID09IFBBUkFMTEVMCj4+KyAmJiBY VkVDTEVOIChwb3BfcGF0LCAwKSA9PSAyCj4+KyAmJiBHRVRfQ09ERSAoWFZFQ0VYUCAocG9wX3Bh dCwgMCwgMCkpID09IFNJTVBMRV9SRVRVUk4KPj4rICYmIEdFVF9DT0RFIChYVkVDRVhQIChwb3Bf cGF0LCAwLCAxKSkgPT0gVVNFKQo+Pisgewo+PisgcnR4IHVzZV9yZWcgPSBYRVhQIChYVkVDRVhQ IChwb3BfcGF0LCAwLCAxKSwgMCk7Cj4+KyBpZiAoUkVHX1AgKHVzZV9yZWcpCj4+KyAmJiBSRUdO TyAodXNlX3JlZykgPT0gUkVUVVJOX0FERFJfUkVHTlVNKQo+Pisgewo+PisgcG9wX2NhbmRpZGF0 ZXMgWzJdID0gaW5zbjsKPj4rIGNvbnRpbnVlOwo+PisgfQo+PisgfQo+PisKPj4rIGlmICghcG9w X3J0eCkKPj4rIGNvbnRpbnVlOwo+PisKPj4rIC8qIHBhdHRlcm4gZm9yIHJldHVybiB2YWx1ZS4g Ki8KPj4rIGlmICghcG9wX2NhbmRpZGF0ZXMgWzBdCj4+KyAmJiBHRVRfQ09ERSAocG9wX3BhdCkg PT0gVVNFKQo+Pisgewo+PisgcnR4X2luc24gKnNldF9pbnNuID0gUFJFVl9JTlNOIChpbnNuKTsK Pj4rIHJ0eCBwYXRfc2V0ID0gUEFUVEVSTiAoc2V0X2luc24pOwo+PisKPj4rIGlmIChyaXNjdl9j aGVja19yZWdubyAoWEVYUCAocG9wX3BhdCwgMCksCj4+KyBSRVRVUk5fVkFMVUVfUkVHTlVNKQo+ PisgJiYgaW5zbgo+PisgJiYgcGF0X3NldCAhPSBOVUxMCj4+KyAmJiBHRVRfQ09ERSAocGF0X3Nl dCkgPT0gU0VUCj4+KyAmJiByaXNjdl9jaGVja19yZWdubyAoU0VUX0RFU1QgKHBhdF9zZXQpLAo+ PisgUkVUVVJOX1ZBTFVFX1JFR05VTSkKPj4rICYmIENPTlNUX0lOVF9QIChTRVRfU1JDIChwYXRf c2V0KSkKPj4rICYmIElOVFZBTCAoU0VUX1NSQyAocGF0X3NldCkpID09IDApCj4+KyB7Cj4+KyBw b3BfY2FuZGlkYXRlcyBbMF0gPSBzZXRfaW5zbjsKPj4rIHBvcF9jYW5kaWRhdGVzIFsxXSA9IGlu c247Cj4+KyBicmVhazsKPj4rIH0KPj4rIH0KPj4rIH0KPj4rCj4+KyBpZiAocG9wX3J0eCkKPj4r IHsKPj4rIGVtaXRfemNtcF9wb3ByZXQgKHBvcF9ydHgsIHBvcF9jYW5kaWRhdGVzLCBiYik7Cj4+ KyByZXR1cm47Cj4+KyB9Cj4+KyB9Cj4+K30KPj4rCj4+K2NvbnN0IHBhc3NfZGF0YSBwYXNzX2Rh dGFfemNtcF9wb3ByZXQgPQo+Pit7Cj4+KyBSVExfUEFTUywgLyogdHlwZSAqLwo+PisgInpjbXAt cG9wcmV0IiwgLyogbmFtZSAqLwo+PisgT1BUR1JPVVBfTk9ORSwgLyogb3B0aW5mb19mbGFncyAq Lwo+PisgVFZfTk9ORSwgLyogdHZfaWQgKi8KPj4rIDAsIC8qIHByb3BlcnRpZXNfcmVxdWlyZWQg Ki8KPj4rIDAsIC8qIHByb3BlcnRpZXNfcHJvdmlkZWQgKi8KPj4rIDAsIC8qIHByb3BlcnRpZXNf ZGVzdHJveWVkICovCj4+KyAwLCAvKiB0b2RvX2ZsYWdzX3N0YXJ0ICovCj4+KyAwLCAvKiB0b2Rv X2ZsYWdzX2ZpbmlzaCAqLwo+Pit9Owo+PisKPj4rY2xhc3MgcGFzc196Y21wX3BvcHJldCA6IHB1 YmxpYyBydGxfb3B0X3Bhc3MKPj4rewo+PitwdWJsaWM6Cj4+KyBwYXNzX3pjbXBfcG9wcmV0IChn Y2M6OmNvbnRleHQgKmN0eHQpCj4+KyA6IHJ0bF9vcHRfcGFzcyAocGFzc19kYXRhX3pjbXBfcG9w cmV0LCBjdHh0KQo+Pisge30KPj4rCj4+KyAvKiBvcHRfcGFzcyBtZXRob2RzOiAqLwo+Pisgdmly dHVhbCBib29sIGdhdGUgKGZ1bmN0aW9uICopCj4+KyB7IHJldHVybiBUQVJHRVRfWkNNUDsgfQo+ PisgdmlydHVhbCB1bnNpZ25lZCBpbnQgZXhlY3V0ZSAoZnVuY3Rpb24gKikKPj4rIHsKPj4rIHpj bXBfcG9wcmV0ICgpOwo+PisgcmV0dXJuIDA7Cj4+KyB9Cj4+K307IC8vIGNsYXNzIHBhc3NfemNt cF9wb3ByZXQKPj4rCj4+K30gLy8gYW5vbiBuYW1lc3BhY2UKPj4rCj4+K3J0bF9vcHRfcGFzcyAq Cj4+K21ha2VfcGFzc196Y21wX3BvcHJldCAoZ2NjOjpjb250ZXh0ICpjdHh0KQo+Pit7Cj4+KyBy ZXR1cm4gbmV3IHBhc3NfemNtcF9wb3ByZXQgKGN0eHQpOwo+Pit9Cj4+ZGlmZiAtLWdpdCBhL2dj Yy9jb25maWcvcmlzY3YvcmlzY3YuY2MgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmNjCj4+aW5k ZXggNWY4Y2JmYzE1ZWQuLjE3ZGYyZjNmOGNmIDEwMDY0NAo+Pi0tLSBhL2djYy9jb25maWcvcmlz Y3YvcmlzY3YuY2MKPj4rKysgYi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmNjCj4+QEAgLTExNCw2 ICsxMTQsOSBAQCBzdHJ1Y3QgR1RZKCgpKSByaXNjdl9mcmFtZV9pbmZvIHsKPj4gLyogTGlrZXdp c2UgRlBSIFguICovCj4+IHVuc2lnbmVkIGludCBmbWFzazsKPj4KPj4rIC8qIEhvdyBtdWNoIHRo ZSBwdXNoL3BvcCByb3V0aW5lcyBhZGp1c3Qgc3AgKG9yIDAgaWYgdW51c2VkKS4gKi8KPj4rIHVu c2lnbmVkIHB1c2hfcG9wX3NwX2FkanVzdDsKPj4rCj4+IC8qIEhvdyBtdWNoIHRoZSBHUFIgc2F2 ZS9yZXN0b3JlIHJvdXRpbmVzIGFkanVzdCBzcCAob3IgMCBpZiB1bnVzZWQpLiAqLwo+PiB1bnNp Z25lZCBzYXZlX2xpYmNhbGxfYWRqdXN0bWVudDsKPj4KPj5AQCAtNDAxLDYgKzQwNCwyMCBAQCBz dGF0aWMgY29uc3QgdW5zaWduZWQgZ3ByX3NhdmVfcmVnX29yZGVyW10gPSB7Cj4+IFMxMF9SRUdO VU0sIFMxMV9SRUdOVU0KPj4gfTsKPj4KPj4rLyogT3JkZXIgZm9yIHRoZSBDTE9CQkVScy9VU0Vz IG9mIHB1c2gvcG9wLiAqLwo+PitzdGF0aWMgY29uc3QgdW5zaWduZWQgcHVzaF9zYXZlX3JlZ19v cmRlcltdID0gewo+PisgSU5WQUxJRF9SRUdOVU0sIFJFVFVSTl9BRERSX1JFR05VTSwgUzBfUkVH TlVNLAo+PisgUzFfUkVHTlVNLCBTMl9SRUdOVU0sIFMzX1JFR05VTSwgUzRfUkVHTlVNLAo+Pisg UzVfUkVHTlVNLCBTNl9SRUdOVU0sIFM3X1JFR05VTSwgUzhfUkVHTlVNLAo+PisgUzlfUkVHTlVN LCBTMTBfUkVHTlVNLCBTMTFfUkVHTlVNCj4+K307Cj4+Kwo+PisvKiBPcmRlciBmb3IgdGhlIENM T0JCRVJzL1VTRXMgb2YgcHVzaC9wb3AgaW4gcnZlLiAqLwo+PitzdGF0aWMgY29uc3QgdW5zaWdu ZWQgcHVzaF9zYXZlX3JlZ19vcmRlcl96Y21wZVtdID0gewo+PisgSU5WQUxJRF9SRUdOVU0sIFJF VFVSTl9BRERSX1JFR05VTSwgUzBfUkVHTlVNLAo+PisgUzFfUkVHTlVNCj4+K307Cj4+Kwo+PiAv KiBBIHRhYmxlIGRlc2NyaWJpbmcgYWxsIHRoZSBwcm9jZXNzb3JzIEdDQyBrbm93cyBhYm91dC4g Ki8KPj4gc3RhdGljIGNvbnN0IHN0cnVjdCByaXNjdl90dW5lX2luZm8gcmlzY3ZfdHVuZV9pbmZv X3RhYmxlW10gPSB7Cj4+ICNkZWZpbmUgUklTQ1ZfVFVORShUVU5FX05BTUUsIFBJUEVMSU5FX01P REVMLCBUVU5FX0lORk8pIFwKPj5AQCAtMjk4OSw2ICszMDA2LDE3IEBAIHJpc2N2X291dHB1dF9y ZXR1cm4gKCkKPj4gcmV0dXJuICJyZXQiOwo+PiB9Cj4+Cj4+K2Jvb2wKPj4rcmlzY3Zfb3V0cHV0 X3BvcHJldF9wIChydHggb3ApCj4+K3sKPj4rIHVuc2lnbmVkIG5fcnR4ID0gWFZFQ0xFTiAob3As IDApOwo+PisgcnR4IHVzZSA9IFhWRUNFWFAgKG9wLCAwLCBuX3J0eCAtIDEpOwo+PisgcnR4IHJl dCA9IFhWRUNFWFAgKG9wLCAwLCBuX3J0eCAtIDIpOwo+PisKPj4rIHJldHVybiBHRVRfQ09ERSAo cmV0KSA9PSBTSU1QTEVfUkVUVVJOCj4+KyAmJiBHRVRfQ09ERSAodXNlKSA9PSBVU0U7Cj4+K30K Pj4rCj4+Cj4+Cj4+IC8qIFJldHVybiB0cnVlIGlmIENNUDEgaXMgYSBzdWl0YWJsZSBzZWNvbmQg b3BlcmFuZCBmb3IgaW50ZWdlciBvcmRlcmluZwo+PiB0ZXN0IENPREUuIFNlZSBhbHNvIHRoZSAq c0NDIHBhdHRlcm5zIGluIHJpc2N2Lm1kLiAqLwo+PkBAIC00MzA2LDYgKzQzMzQsNzQgQEAgcmlz Y3ZfbWVtbW9kZWxfbmVlZHNfYW1vX2FjcXVpcmUgKGVudW0gbWVtbW9kZWwgbW9kZWwpCj4+IH0K Pj4gfQo+Pgo+PisvKiBQcmludCBTcCBhZGp1c3RtZW50IGZpZWxkIG9mIHBvcCBpbnN0cnVjdGlv bi4gKi8KPj4rCj4+K3N0YXRpYyB2b2lkCj4+K3Jpc2N2X3ByaW50X3BvcF9zaXplIChGSUxFICpm aWxlLCBydHggb3ApCj4+K3sKPj4rIHVuc2lnbmVkIHNwX2FkanVzdF9pZHggPSBYVkVDTEVOIChv cCwgMCkgLSAxOwo+PisgcnR4IHNwX2FkanVzdF9ydHggPSBYVkVDRVhQIChvcCwgMCwgc3BfYWRq dXN0X2lkeCk7Cj4+Kwo+PisgLyogU2tpcCByZXQgb3IgcGF0dGVybi4gKi8KPj4rIHdoaWxlIChH RVRfQ09ERSAoc3BfYWRqdXN0X3J0eCkgIT0gU0VUKQo+Pisgc3BfYWRqdXN0X3J0eCA9IFhWRUNF WFAgKG9wLCAwLCAtLXNwX2FkanVzdF9pZHgpOwo+PisKPj4rIHJ0eCBlbHRfcGx1cyA9IFNFVF9T UkMgKHNwX2FkanVzdF9ydHgpOwo+PisgZnByaW50ZiAoZmlsZSwgIiVsZCIsIElOVFZBTCAoWEVY UCAoZWx0X3BsdXMsIDEpKSk7Cj4+K30KPj4rCj4+Ky8qIFByaW50IHB1c2gvcG9wIHJlZ2lzdGVy IGxpc3QuICovCj4+Kwo+PitzdGF0aWMgdm9pZAo+PityaXNjdl9wcmludF9yZWdsaXN0IChGSUxF ICpmaWxlLCBydHggb3ApCj4+K3sKPj4rIC8qIHdlIG9ubHkgZGVhbCB3aXRoIHRocmVlIGZvcm1h dHM6Cj4+KyBwdXNoIHtyYX0KPj4rIHB1c2gge3JhLCBzMH0KPj4rIHB1c2gge3JhLCBzMC1zTn0K Pj4rIG9yCj4+KyBwb3Age3JhfQo+PisgcG9wIHtyYSwgczB9Cj4+KyBwb3Age3JhLCBzMC1zTn0K Pj4rIHJlZ2lzdGVycyBleGNlcHQgcmEgaGFzIHRvIGJlIGNvbnRpbnVvdXMgcy1yZWdpc3RlciwK Pj4rIGFuZCBpdCBpcyBzdXBwb3NlZCB0byBiZSBjaGVja2VkIGJlZm9yZS4KPj4rIHJlZ2lzdGVy IGxpc3QgcGF0dGVybnMgaW4gcHVzaDoKPj4rIChzZXQvZiAobWVtL2M6U0kKPj4rIChwbHVzOlNJ IChyZWcvZjpTSSAyIHNwKQo+PisgKGNvbnN0X2ludCAyOCBbMHgxY10pKSBbMiBTNCBBMzJdKQo+ PisgKHJlZzpTSSAxIHJhKSkKPj4rIHJlZ2lzdGVyIGxpc3QgcGF0dGVybnMgaW4gcG9wOgo+Pisg KHNldC9mIChyZWc6REkgMSByYSkKPj4rIChtZW0vYzpESSAocGx1czpESSAocmVnL2Y6REkgMiBz cCkKPj4rIChjb25zdF9pbnQgOCBbMHg4XSkpIFsyIFM4IEE2NF0pKQo+PisgKi8KPj4rIGludCB0 b3RhbF9jb3VudCA9IFhWRUNMRU4gKG9wLCAwKTsKPj4rIGludCBuX3JlZ3MgPSAwOwo+PisgYm9v bCBwdXNoX3AgPSBHRVRfQ09ERSAoWFZFQ0VYUCAob3AsIDAsIDApKSA9PSBTRVQKPj4rICYmIEdF VF9DT0RFIChTRVRfU1JDIChYVkVDRVhQIChvcCwgMCwgMCkpKSA9PSBQTFVTOwo+PisKPj4rIGZv ciAoaW50IGlkeCA9IDA7IGlkeCA8IHRvdGFsX2NvdW50OyArK2lkeCkKPj4rIHsKPj4rIHJ0eCBl bGUgPSBYVkVDRVhQIChvcCwgMCwgaWR4KTsKPj4rIGlmIChHRVRfQ09ERSAoZWxlKSAhPSBTRVQp Cj4+KyBjb250aW51ZTsKPj4rCj4+KyBib29sIHJlc3RvcmVfc2F2ZV9wID0gcHVzaF9wID8KPj4r IE1FTV9QIChTRVRfREVTVCAoZWxlKSkgOgo+PisgTUVNX1AgKFNFVF9TUkMgKGVsZSkpOwo+PisK Pj4rIGlmIChyZXN0b3JlX3NhdmVfcCkKPj4rIG5fcmVncyArKzsKPj4rIH0KPj4rCj4+KyBpZiAo bl9yZWdzID4gMikKPj4rIGZwcmludGYgKGZpbGUsICJyYSxzMC1zJXUiLCBuX3JlZ3MgLSAyKTsK Pj4rIGVsc2UgaWYgKG5fcmVncyA+IDEpCj4+KyBmcHJpbnRmIChmaWxlLCAicmEsczAiKTsKPj4r IGVsc2UKPj4rIGZwdXRzKCJyYSIsIGZpbGUpOwo+Pit9Cj4+Kwo+PiAvKiBSZXR1cm4gdHJ1ZSBp ZiBhIEZFTkNFIHNob3VsZCBiZSBlbWl0dGVkIHRvIGJlZm9yZSBhIG1lbW9yeSBhY2Nlc3MgdG8K Pj4gaW1wbGVtZW50IHRoZSByZWxlYXNlIHBvcnRpb24gb2YgbWVtb3J5IG1vZGVsIE1PREVMLiAq Lwo+Pgo+PkBAIC00NTE3LDYgKzQ2MTMsMTQgQEAgcmlzY3ZfcHJpbnRfb3BlcmFuZCAoRklMRSAq ZmlsZSwgcnR4IG9wLCBpbnQgbGV0dGVyKQo+PiBmcHV0cyAoR0VUX1JUWF9OQU1FIChjb2RlKSwg ZmlsZSk7Cj4+IGJyZWFrOwo+Pgo+PisgY2FzZSAnTCc6Cj4+KyByaXNjdl9wcmludF9yZWdsaXN0 IChmaWxlLCBvcCk7Cj4+KyBicmVhazsKPj4rCj4+KyBjYXNlICdzJzoKPj4rIHJpc2N2X3ByaW50 X3BvcF9zaXplIChmaWxlLCBvcCk7Cj4+KyBicmVhazsKPj4rCj4+IGNhc2UgJ1MnOgo+PiB7Cj4+ IHJ0eCBuZXdvcCA9IEdFTl9JTlQgKGN0el9od2kgKElOVFZBTCAob3ApKSk7Cj4+QEAgLTQ3Nzcs NiArNDg4MSw2NiBAQCByaXNjdl91c2Vfc2F2ZV9saWJjYWxsIChjb25zdCBzdHJ1Y3QgcmlzY3Zf ZnJhbWVfaW5mbwo+PipmcmFtZSkKPj4gcmV0dXJuIGZyYW1lLT5zYXZlX2xpYmNhbGxfYWRqdXN0 bWVudCAhPSAwOwo+PiB9Cj4+Cj4+Ky8qIERldGVybWluZSBob3cgbWFueSBpbnN0cnVjdGlvbnMg cmVsYXRlZCB0byBwdXNoL3BvcCBpbnN0cnVjdGlvbnMuICovCj4+Kwo+PitzdGF0aWMgdW5zaWdu ZWQKPj4rcmlzY3Zfc2F2ZV9wdXNoX3BvcF9jb3VudCAodW5zaWduZWQgbWFzaykKPj4rewo+Pisg aWYgKCFCSVRTRVRfUCAobWFzaywgR1BfUkVHX0ZJUlNUICsgUkVUVVJOX0FERFJfUkVHTlVNKSkK Pj4rIHJldHVybiAwOwo+PisgZm9yICh1bnNpZ25lZCBuID0gR1BfUkVHX0xBU1Q7IG4gPiBHUF9S RUdfRklSU1Q7IG4tLSkKPj4rIGlmIChCSVRTRVRfUCAobWFzaywgbikKPj4rICYmICFjYWxsX3Vz ZWRfcmVncyBbbl0pCj4+KyAvKiBhZGQgcmEgc2F2aW5nIGFuZCBzcCBhZGp1c3QuICovCj4+KyBy ZXR1cm4gQ0FMTEVFX1NBVkVEX1JFR19OVU1CRVIgKG4pICsgMSArIDI7Cj4+KyBhYm9ydCAoKTsK Pj4rfQo+PisKPj4rLyogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIHNwIGFkanVzdG1lbnQgb2YgcHVz aC9wb3AgaW5zdHJ1Y3Rpb24uICovCj4+Kwo+PitzdGF0aWMgdW5zaWduZWQKPj4rcmlzY3ZfcHVz aF9wb3BfYmFzZV9zcF9hZGp1c3QgKHVuc2lnbmVkIG1hc2spCj4+K3sKPj4rIHVuc2lnbmVkIG5f cmVncyA9IHJpc2N2X3NhdmVfcHVzaF9wb3BfY291bnQgKG1hc2spIC0gMTsKPj4rIHJldHVybiAo bl9yZWdzICogVU5JVFNfUEVSX1dPUkQgKyAxNSkgJiAofjB4Zik7Cj4+K30KPj4rCj4+Ky8qIERl dGVybWluZSB3aGV0aGVyIHRvIGNhbGwgcHVzaC9wb3Agcm91dGluZXMuICovCj4+Kwo+PitzdGF0 aWMgYm9vbAo+PityaXNjdl91c2VfcHVzaF9wb3AgKGNvbnN0IHN0cnVjdCByaXNjdl9mcmFtZV9p bmZvICpmcmFtZSwgY29uc3QgSE9TVF9XSURFX0lOVAo+PmZyYW1lX3NpemUpCj4+K3sKPj4rIGlm ICghVEFSR0VUX1pDTVApCj4+KyByZXR1cm4gZmFsc2U7Cj4+Kwo+PisgLyogV2UgZG8gbm90IGhh bmRsZXIgdmFyaWFibGUgYXJndW1lbnQgY2FzZXMgY3VycmVudGx5LiAqLwo+PisgaWYgKGNmdW4t Pm1hY2hpbmUtPnZhcmFyZ3Nfc2l6ZSAhPSAwKQo+PisgcmV0dXJuIGZhbHNlOwo+PisKPj4rIEhP U1RfV0lERV9JTlQgYmFzZV9zaXplID0gcmlzY3ZfcHVzaF9wb3BfYmFzZV9zcF9hZGp1c3QgKGZy YW1lLT5tYXNrKTsKPj4rIC8qCj4+KyBQciA5NjAyMTUtMS5jIGluIHJ2NjQgb3VwdXRzCj4+Kwo+ PisgYWRkaSBzcCxzcCwtMzIKPj4rIHNkIHJhLDI0KHNwKQo+Pisgc2QgczAsMTYoc3ApCj4+KyBz ZCBzMiw4KHNwKQo+Pisgc2QgczMsMChzcCkKPj4rIGl0IGlzIGEgcmFyZSBjYXNlIHRoYXQgY2Fs bGVlIHNhdmVkIHJlZ2lzdGVycyBhcmUgbm90IG5vbi1jb250aW5vdXMsCj4+KyB3aGljaCBicmVh a3MgdGhlIG9sZCBwdXNoIGltcGxlbWVudGF0aW9uLCBhbmQgd2UganVzdCByZWplY3QgdGhpcyBj YXNlCj4+KyBsaWtlIHNhdmUtcmVzdG9yZSBkb2VzIG5vdy4KPj4rICovCj4+KyBpZiAoYmFzZV9z aXplID4gZnJhbWVfc2l6ZSkKPj4rIHJldHVybiBmYWxzZTsKPj4rCj4+KyAvKiB7cmEsczAtczEw fSBpcyBpbnZhbGlkLiAqLwo+PisgaWYgKGZyYW1lLT5tYXNrICYgKDEgPDwgKFMxMF9SRUdOVU0g LSBHUF9SRUdfRklSU1QpKQo+PisgJiYgIShmcmFtZS0+bWFzayAmICgxIDw8IChTMTFfUkVHTlVN IC0gR1BfUkVHX0ZJUlNUKSkpKQo+PisgcmV0dXJuIGZhbHNlOwo+PisKPj4rIHJldHVybiBmcmFt ZS0+bWFzayAmICgxIDw8IChSRVRVUk5fQUREUl9SRUdOVU0gLSBHUF9SRUdfRklSU1QpKTsKPj4r fQo+PisKPj4gLyogRGV0ZXJtaW5lIHdoaWNoIEdQUiBzYXZlL3Jlc3RvcmUgcm91dGluZSB0byBj YWxsLiAqLwo+Pgo+PiBzdGF0aWMgdW5zaWduZWQKPj5AQCAtNDkzNCw2ICs1MDk4LDggQEAgcmlz Y3ZfY29tcHV0ZV9mcmFtZV9pbmZvICh2b2lkKQo+PiAvKiBPbmx5IHVzZSBzYXZlL3Jlc3RvcmUg cm91dGluZXMgd2hlbiB0aGUgR1BScyBhcmUgYXRvcCB0aGUgZnJhbWUuICovCj4+IGlmIChrbm93 bl9uZSAoZnJhbWUtPmhhcmRfZnJhbWVfcG9pbnRlcl9vZmZzZXQsIGZyYW1lLT50b3RhbF9zaXpl KSkKPj4gZnJhbWUtPnNhdmVfbGliY2FsbF9hZGp1c3RtZW50ID0gMDsKPj4rCj4+KyBmcmFtZS0+ cHVzaF9wb3Bfc3BfYWRqdXN0ID0gMDsKPj4gfQo+Pgo+PiAvKiBNYWtlIHN1cmUgdGhhdCB3ZSdy ZSBub3QgdHJ5aW5nIHRvIGVsaW1pbmF0ZSB0byB0aGUgd3JvbmcgaGFyZCBmcmFtZQo+PkBAIC01 MTcxLDYgKzUzMzcsODYgQEAgcmlzY3ZfZm9yX2VhY2hfc2F2ZWRfcmVnIChwb2x5X2ludDY0IHNw X29mZnNldCwKPj5yaXNjdl9zYXZlX3Jlc3RvcmVfZm4gZm4sCj4+IH0KPj4gfQo+Pgo+PitzdGF0 aWMgdm9pZAo+PityaXNjdl9lbWl0X3BvcF9pbnNuIChzdHJ1Y3QgcmlzY3ZfZnJhbWVfaW5mbyAq ZnJhbWUsIEhPU1RfV0lERV9JTlQgb2Zmc2V0LAo+PkhPU1RfV0lERV9JTlQgc2l6ZSkKPj4rewo+ PisgdW5zaWduZWQgaW50IHZlY2xlbiA9IHJpc2N2X3NhdmVfcHVzaF9wb3BfY291bnQgKGZyYW1l LT5tYXNrKTsKPj4rIHVuc2lnbmVkIGludCBuX3JlZyA9IHZlY2xlbiAtIDE7Cj4+KyBydHZlYyB2 ZWMgPSBydHZlY19hbGxvYyAodmVjbGVuKTsKPj4rIEhPU1RfV0lERV9JTlQgc3BfYWRqdXN0Owo+ PisgcnR4IGR3YXJmID0gTlVMTF9SVFg7Cj4+Kwo+PisgY29uc3QgdW5zaWduZWQgKnJlZ19vcmRl ciA9IChUQVJHRVRfWkNNUCAmJiBUQVJHRVRfUlZFKQo+PisgPyBwdXNoX3NhdmVfcmVnX29yZGVy X3pjbXBlCj4+KyA6IHB1c2hfc2F2ZV9yZWdfb3JkZXI7Cj4+Kwo+PisgZ2NjX2Fzc2VydCAobl9y ZWcgPj0gMQo+PisgJiYgVEFSR0VUX1pDTVAKPj4rICYmICgoVEFSR0VUX1JWRSAmJiAobl9yZWcg PD0gQVJSQVlfU0laRSAocHVzaF9zYXZlX3JlZ19vcmRlcl96Y21wZSkpKQo+PisgfHwgKFRBUkdF VF9aQ01QICYmIChuX3JlZyA8PSBBUlJBWV9TSVpFIChwdXNoX3NhdmVfcmVnX29yZGVyKSkpKSk7 Cj4+Kwo+PisgLyogc3AgYWRqdXN0IHBhdHRlcm4gKi8KPj4rIGludCBtYXhfYWxsb3dfc3BfYWRq dXN0ID0gcmlzY3ZfcHVzaF9wb3BfYmFzZV9zcF9hZGp1c3QgKGZyYW1lLT5tYXNrKSArIDQ4Owo+ PisgaW50IGFsaWduZWRfc2l6ZSA9IHNpemU7Cj4+Kwo+PisgLyogaWYgc3AgYWRqdXN0bWVudCBp cyB0b28gbGFyZ2UsIHdlIHNob3VsZCBzcGxpdCBpdCBmaXJzdC4gKi8KPj4rIGlmIChhbGlnbmVk X3NpemUgPiBtYXhfYWxsb3dfc3BfYWRqdXN0KQo+Pisgewo+PisgcnR4IGR3YXJmX3ByZV9zcF9h ZGp1c3QgPSBOVUxMX1JUWDsKPj4rIHJ0eCBwcmVfYWRqdXN0X3J0eCA9IGdlbl9hZGQzX2luc24g KHN0YWNrX3BvaW50ZXJfcnR4LAo+Pisgc3RhY2tfcG9pbnRlcl9ydHgsCj4+KyBHRU5fSU5UIChh bGlnbmVkX3NpemUgLSBtYXhfYWxsb3dfc3BfYWRqdXN0KSk7Cj4+KyBydHggaW5zbiA9IGVtaXRf aW5zbiAocHJlX2FkanVzdF9ydHgpOwo+PisKPj4rIHJ0eCBjZmFfcHJlX2FkanVzdF9ydHggPSBn ZW5fcnR4X1BMVVMgKFBtb2RlLCBzdGFja19wb2ludGVyX3J0eCwKPj4rIEdFTl9JTlQgKGFsaWdu ZWRfc2l6ZSAtIG1heF9hbGxvd19zcF9hZGp1c3QpKTsKPj4rIGR3YXJmX3ByZV9zcF9hZGp1c3Qg PSBhbGxvY19yZWdfbm90ZSAoUkVHX0NGQV9ERUZfQ0ZBLAo+PisgY2ZhX3ByZV9hZGp1c3RfcnR4 LAo+PisgZHdhcmZfcHJlX3NwX2FkanVzdCk7Cj4+Kwo+PisgUlRYX0ZSQU1FX1JFTEFURURfUCAo aW5zbikgPSAxOwo+PisgUkVHX05PVEVTIChpbnNuKSA9IGR3YXJmX3ByZV9zcF9hZGp1c3Q7Cj4+ Kwo+Pisgc3BfYWRqdXN0ID0gbWF4X2FsbG93X3NwX2FkanVzdDsKPj4rIH0KPj4rIGVsc2UKPj4r IHNwX2FkanVzdCA9IChhbGlnbmVkX3NpemUgKyAxNSkgJiAofjB4Zik7Cj4+Kwo+PisgLyogcmVn aXN0ZXIgc2F2ZSBzZXF1ZW5jZS4gKi8KPj4rIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCB2ZWNs ZW47ICsraSkKPj4rIHsKPj4rIG9mZnNldCAtPSBVTklUU19QRVJfV09SRDsKPj4rIHVuc2lnbmVk IHJlZ25vID0gcmVnX29yZGVyW2ldOwo+PisgcnR4IHJlZyA9IGdlbl9ydHhfUkVHIChQbW9kZSwg cmVnbm8pOwo+PisgcnR4IG1lbSA9IGdlbl9mcmFtZV9tZW0gKFBtb2RlLCBwbHVzX2NvbnN0YW50 IChQbW9kZSwKPj4rIHN0YWNrX3BvaW50ZXJfcnR4LAo+Pisgb2Zmc2V0KSk7Cj4+KyBydHggc2V0 ID0gZ2VuX3J0eF9TRVQgKHJlZywgbWVtKTsKPj4rIFJUVkVDX0VMVCAodmVjLCBpIC0gMSkgPSBz ZXQ7Cj4+KyBSVFhfRlJBTUVfUkVMQVRFRF9QIChzZXQpID0gMTsKPj4rIGR3YXJmID0gYWxsb2Nf cmVnX25vdGUgKFJFR19DRkFfUkVTVE9SRSwgcmVnLCBkd2FyZik7Cj4+KyB9Cj4+Kwo+PisgLyog c3AgYWRqdXN0IHBhdHRlcm4gKi8KPj4rIHJ0eCBhZGp1c3Rfc3BfcnR4Cj4+KyA9IGdlbl9ydHhf U0VUIChzdGFja19wb2ludGVyX3J0eCwKPj4rIHBsdXNfY29uc3RhbnQgKFBtb2RlLAo+Pisgc3Rh Y2tfcG9pbnRlcl9ydHgsCj4+KyBzcF9hZGp1c3QpKTsKPj4rIFJUVkVDX0VMVCAodmVjLCB2ZWNs ZW4gLSAxKSA9IGFkanVzdF9zcF9ydHg7Cj4+Kwo+PisgcnR4IGNmYV9hZGp1c3RfcnR4ID0gZ2Vu X3J0eF9QTFVTIChQbW9kZSwgc3RhY2tfcG9pbnRlcl9ydHgsCj4+KyBjb25zdDBfcnR4KTsKPj4r IGR3YXJmID0gYWxsb2NfcmVnX25vdGUgKFJFR19DRkFfREVGX0NGQSwgY2ZhX2FkanVzdF9ydHgs IGR3YXJmKTsKPj4rCj4+KyBmcmFtZS0+Z3Bfc3Bfb2Zmc2V0IC09ICh2ZWNsZW4gLSAxKSAqIFVO SVRTX1BFUl9XT1JEOwo+PisgZnJhbWUtPnB1c2hfcG9wX3NwX2FkanVzdCA9IHNwX2FkanVzdDsK Pj4rCj4+KyBydHggaW5zbiA9IGVtaXRfaW5zbiAoZ2VuX3J0eF9QQVJBTExFTCAoVk9JRG1vZGUs IHZlYykpOwo+PisgUlRYX0ZSQU1FX1JFTEFURURfUCAoaW5zbikgPSAxOwo+PisgUkVHX05PVEVT IChpbnNuKSA9IGR3YXJmOwo+Pit9Cj4+Kwo+PiAvKiBGb3Igc3RhY2sgZnJhbWVzIHRoYXQgY2Fu J3QgYmUgYWxsb2NhdGVkIHdpdGggYSBzaW5nbGUgQURESSBpbnN0cnVjdGlvbiwKPj4gY29tcHV0 ZSB0aGUgYmVzdCB2YWx1ZSB0byBpbml0aWFsbHkgYWxsb2NhdGUuIEl0IG11c3QgYXQgYSBtaW5p bXVtCj4+IGFsbG9jYXRlIGVub3VnaCBzcGFjZSB0byBzcGlsbCB0aGUgY2FsbGVlLXNhdmVkIHJl Z2lzdGVycy4gSWYgVEFSR0VUX1JWQywKPj5AQCAtNTI3MCw2ICs1NTE2LDE0NiBAQCByaXNjdl9l bWl0X3N0YWNrX3RpZSAodm9pZCkKPj4gZW1pdF9pbnNuIChnZW5fc3RhY2tfdGllZGkgKHN0YWNr X3BvaW50ZXJfcnR4LCBoYXJkX2ZyYW1lX3BvaW50ZXJfcnR4KSk7Cj4+IH0KPj4KPj4rYm9vbAo+ PityaXNjdl9jaGVja19yZWdubyhydHggcGF0LCB1bnNpZ25lZCByZWdubykKPj4rewo+PisgcmV0 dXJuIFJFR19QIChwYXQpCj4+KyAmJiBSRUdOTyAocGF0KSA9PSByZWdubzsKPj4rfQo+PisKPj4r LyogRnVuY3Rpb24gdG8gY2hlY2sgd2hldGhlciB0aGUgT1AgaXMgYSB2YWxpZCBzdGFjayBwdXNo L3BvcCBvcGVyYXRpb24uCj4+KyBUaGlzIHBhcnQgaXMgYm9ycm93ZWQgZnJvbSBuZHMzMiBuZHMz Ml92YWxpZF9zdGFja19wdXNoX3BvcF9wICovCj4+Kwo+Pitib29sCj4+K3Jpc2N2X3ZhbGlkX3N0 YWNrX3B1c2hfcG9wX3AgKHJ0eCBvcCwgYm9vbCBwdXNoX3ApCj4+K3sKPj4rIGludCBpbmRleDsK Pj4rIGludCB0b3RhbF9jb3VudDsKPj4rIGludCBzcF9hZGp1c3RfcnR4X2luZGV4Owo+PisgcnR4 IGVsdDsKPj4rIHJ0eCBlbHRfcmVnOwo+PisgcnR4IGVsdF9wbHVzOwo+PisKPj4rIGlmICghVEFS R0VUX1pDTVApCj4+KyByZXR1cm4gZmFsc2U7Cj4+Kwo+PisgdG90YWxfY291bnQgPSBYVkVDTEVO IChvcCwgMCk7Cj4+KyBzcF9hZGp1c3RfcnR4X2luZGV4ID0gcHVzaF9wID8gMCA6IHRvdGFsX2Nv dW50IC0gMTsKPj4rCj4+KyAvKiBBdCBsZWFzdCBzcCArIG9uZSBjYWxsZWUgc2F2ZS9yZXN0b3Jl IHJlZ2lzdGVyIHJ0eCAqLwo+PisgaWYgKHRvdGFsX2NvdW50IDwgMikKPj4rIHJldHVybiBmYWxz ZTsKPj4rCj4+KyAvKiBQZXJmb3JtIHNvbWUgcXVpY2sgY2hlY2sgZm9yIHRoYXQgZXZlcnkgZWxl bWVudCBzaG91bGQgYmUgJ3NldCcsCj4+KyBmb3IgcG9wLCBpdCBtaWdodCBjb250YWluIGByZXRg IGFuZCBgcmV0IHZhbHVlYCBwYXR0ZXJuLiAqLwo+PisgZm9yIChpbmRleCA9IDA7IGluZGV4IDwg dG90YWxfY291bnQ7IGluZGV4KyspCj4+KyB7Cj4+KyBlbHQgPSBYVkVDRVhQIChvcCwgMCwgaW5k ZXgpOwo+PisKPj4rIC8qIHNraXAgcG9wIHJldHVybiB2YWx1ZSBydHggKi8KPj4rIGlmICghcHVz aF9wICYmIEdFVF9DT0RFIChlbHQpID09IFNFVAo+PisgJiYgcmlzY3ZfY2hlY2tfcmVnbm8gKFNF VF9ERVNUIChlbHQpLCBSRVRVUk5fVkFMVUVfUkVHTlVNKQo+PisgJiYgdG90YWxfY291bnQgPj0g NAo+PisgJiYgaW5kZXggKyAxIDwgdG90YWxfY291bnQKPj4rICYmIEdFVF9DT0RFIChYVkVDRVhQ IChvcCwgMCwgaW5kZXggKyAxKSkgPT0gVVNFKQo+Pisgewo+PisgcnR4IHVzZV9yZWcgPSBYRVhQ IChYVkVDRVhQIChvcCwgMCwgaW5kZXggKyAxKSwgMCk7Cj4+Kwo+PisgaWYgKCFyaXNjdl9jaGVj a19yZWdubyAodXNlX3JlZywgUkVUVVJOX1ZBTFVFX1JFR05VTSkpCj4+KyByZXR1cm4gZmFsc2U7 Cj4+Kwo+PisgaW5kZXggKz0gMTsKPj4rIGNvbnRpbnVlOwo+PisgfQo+PisKPj4rIC8qIHNraXAg cmV0IHJ0eCAqLwo+PisgaWYgKCFwdXNoX3AgJiYgR0VUX0NPREUgKGVsdCkgPT0gU0lNUExFX1JF VFVSTgo+PisgJiYgdG90YWxfY291bnQgPj0gNAo+PisgJiYgaW5kZXggKyAxIDwgdG90YWxfY291 bnQKPj4rICYmIEdFVF9DT0RFIChYVkVDRVhQIChvcCwgMCwgaW5kZXggKyAxKSkgPT0gVVNFKQo+ Pisgewo+PisgcnR4IHVzZV9yZWcgPSBYRVhQIChYVkVDRVhQIChvcCwgMCwgaW5kZXggKyAxKSwg MCk7Cj4+Kwo+PisgaWYgKCFyaXNjdl9jaGVja19yZWdubyAodXNlX3JlZywgUkVUVVJOX0FERFJf UkVHTlVNKSkKPj4rIHJldHVybiBmYWxzZTsKPj4rCj4+KyBpbmRleCArPSAxOwo+Pisgc3BfYWRq dXN0X3J0eF9pbmRleCAtPSAyOwo+PisgY29udGludWU7Cj4+KyB9Cj4+Kwo+PisgaWYgKEdFVF9D T0RFIChlbHQpICE9IFNFVCkKPj4rIHJldHVybiBmYWxzZTsKPj4rIH0KPj4rCj4+KyBlbHQgPSBY VkVDRVhQIChvcCwgMCwgc3BfYWRqdXN0X3J0eF9pbmRleCk7Cj4+KyBlbHRfcmVnID0gU0VUX0RF U1QgKGVsdCk7Cj4+KyBlbHRfcGx1cyA9IFNFVF9TUkMgKGVsdCk7Cj4+Kwo+PisgLyogQ2hlY2sg dGhpcyBpcyAoc2V0IChzdGFja19yZWcpIChwbHVzIHN0YWNrX3JlZyBjb25zdCkpIHBhdHRlcm4u ICovCj4+KyBpZiAoR0VUX0NPREUgKGVsdF9wbHVzKSAhPSBQTFVTCj4+KyB8fCAhcmlzY3ZfY2hl Y2tfcmVnbm8gKGVsdF9yZWcsIFNUQUNLX1BPSU5URVJfUkVHTlVNKSkKPj4rIHJldHVybiBmYWxz ZTsKPj4rCj4+KyAvKiBQYXNzIGFsbCB0ZXN0LCB0aGlzIGlzIGEgdmFsaWQgcnR4LiAqLwo+Pisg cmV0dXJuIHRydWU7Cj4+K30KPj4rCj4+Ky8qIEdlbmVyYXRlIHB1c2gvcG9wIHJ0eCAqLwo+PisK Pj4rc3RhdGljIHZvaWQKPj4rcmlzY3ZfZW1pdF9wdXNoX2luc24gKHN0cnVjdCByaXNjdl9mcmFt ZV9pbmZvICpmcmFtZSwgSE9TVF9XSURFX0lOVCBzaXplKQo+Pit7Cj4+KyB1bnNpZ25lZCBpbnQg dmVjbGVuID0gcmlzY3Zfc2F2ZV9wdXNoX3BvcF9jb3VudCAoZnJhbWUtPm1hc2spOwo+PisgdW5z aWduZWQgaW50IG5fcmVnID0gdmVjbGVuIC0gMTsKPj4rIHJ0dmVjIHZlYyA9IHJ0dmVjX2FsbG9j ICh2ZWNsZW4pOwo+PisKPj4rIGNvbnN0IHVuc2lnbmVkICpyZWdfb3JkZXIgPSAoVEFSR0VUX1pD TVAgJiYgVEFSR0VUX1JWRSkKPj4rID8gcHVzaF9zYXZlX3JlZ19vcmRlcl96Y21wZQo+PisgOiBw dXNoX3NhdmVfcmVnX29yZGVyOwo+PisKPj4rIGludCBhbGlnbmVkX3NpemUgPSAoc2l6ZSArIDE1 KSAmICh+MHhmKTsKPj4rCj4+KyBnY2NfYXNzZXJ0IChuX3JlZyA+PSAxCj4+KyAmJiBUQVJHRVRf WkNNUAo+PisgJiYgKChUQVJHRVRfUlZFICYmIChuX3JlZyA8PSBBUlJBWV9TSVpFIChwdXNoX3Nh dmVfcmVnX29yZGVyX3pjbXBlKSkpCj4+KyB8fCAoVEFSR0VUX1pDTVAgJiYgKG5fcmVnIDw9IEFS UkFZX1NJWkUgKHB1c2hfc2F2ZV9yZWdfb3JkZXIpKSkpKTsKPj4rCj4+KyAvKiBzcCBhZGp1c3Qg cGF0dGVybiAqLwo+PisgaW50IG1heF9hbGxvd19zcF9hZGp1c3QgPSByaXNjdl9wdXNoX3BvcF9i YXNlX3NwX2FkanVzdCAoZnJhbWUtPm1hc2spICsgNDg7Cj4+KyBpbnQgc3BfYWRqdXN0ID0gYWxp Z25lZF9zaXplID4gbWF4X2FsbG93X3NwX2FkanVzdCA/Cj4+KyBtYXhfYWxsb3dfc3BfYWRqdXN0 Cj4+KyA6IGFsaWduZWRfc2l6ZTsKPj4rCj4+KyAvKlRPRE86IG1vdmUgdGhpcyBwYXJ0IHRvIGZy YW1lIGNvbXB1dGF0aW9uIGZ1bmN0aW9uLiAqLwo+PisgZnJhbWUtPmdwX3NwX29mZnNldCA9ICh2 ZWNsZW4gLSAxKSAqIFVOSVRTX1BFUl9XT1JEOwo+PisgZnJhbWUtPnB1c2hfcG9wX3NwX2FkanVz dCA9IHNwX2FkanVzdDsKPj4rCj4+KyBydHggYWRqdXN0X3NwX3J0eAo+PisgPSBnZW5fcnR4X1NF VCAoc3RhY2tfcG9pbnRlcl9ydHgsCj4+KyBwbHVzX2NvbnN0YW50IChQbW9kZSwKPj4rIHN0YWNr X3BvaW50ZXJfcnR4LAo+PisgLXNwX2FkanVzdCkpOwo+PisgUlRWRUNfRUxUICh2ZWMsIDApID0g YWRqdXN0X3NwX3J0eDsKPj4rCj4+KyAvKiBSZWdpc3RlciBzYXZlIHNlcXVlbmNlLiAqLwo+Pisg Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHZlY2xlbjsgKytpKQo+Pisgewo+Pisgc3BfYWRqdXN0 IC09IFVOSVRTX1BFUl9XT1JEOwo+PisgdW5zaWduZWQgcmVnbm8gPSByZWdfb3JkZXJbaV07Cj4+ KyBydHggcmVnID0gZ2VuX3J0eF9SRUcgKFBtb2RlLCByZWdubyk7Cj4+KyBydHggbWVtID0gZ2Vu X2ZyYW1lX21lbSAoUG1vZGUsIHBsdXNfY29uc3RhbnQgKFBtb2RlLAo+Pisgc3RhY2tfcG9pbnRl cl9ydHgsCj4+KyBzcF9hZGp1c3QpKTsKPj4rIHJ0eCBzZXQgPSBnZW5fcnR4X1NFVCAobWVtLCBy ZWcpOwo+PisgUlRWRUNfRUxUICh2ZWMsIGkpID0gc2V0Owo+PisgUlRYX0ZSQU1FX1JFTEFURURf UCAoc2V0KSA9IDE7Cj4+KyB9Cj4+Kwo+PisgcnR4IGluc24gPSBlbWl0X2luc24gKGdlbl9ydHhf UEFSQUxMRUwgKFZPSURtb2RlLCB2ZWMpKTsKPj4rIFJUWF9GUkFNRV9SRUxBVEVEX1AgKGluc24p ID0gMTsKPj4rfQo+PisKPj4gLyogRXhwYW5kIHRoZSAicHJvbG9ndWUiIHBhdHRlcm4uICovCj4+ Cj4+IHZvaWQKPj5AQCAtNTI3OCw2ICs1NjY0LDcgQEAgcmlzY3ZfZXhwYW5kX3Byb2xvZ3VlICh2 b2lkKQo+PiBzdHJ1Y3QgcmlzY3ZfZnJhbWVfaW5mbyAqZnJhbWUgPSAmY2Z1bi0+bWFjaGluZS0+ ZnJhbWU7Cj4+IHBvbHlfaW50NjQgc2l6ZSA9IGZyYW1lLT50b3RhbF9zaXplOwo+PiB1bnNpZ25l ZCBtYXNrID0gZnJhbWUtPm1hc2s7Cj4+KyBIT1NUX1dJREVfSU5UIHN0ZXAxID0gcmlzY3ZfZmly c3Rfc3RhY2tfc3RlcCAoZnJhbWUpOwo+PiBydHggaW5zbjsKPj4KPj4gaWYgKGZsYWdfc3RhY2tf dXNhZ2VfaW5mbykKPj5AQCAtNTMwMCwxOSArNTY4NywzMiBAQCByaXNjdl9leHBhbmRfcHJvbG9n dWUgKHZvaWQpCj4+IFJFR19OT1RFUyAoaW5zbikgPSBkd2FyZjsKPj4gfQo+Pgo+PisgaWYgKHNp emUuaXNfY29uc3RhbnQgKCkpCj4+KyBzdGVwMSA9IE1JTiAoc2l6ZS50b19jb25zdGFudCgpLCBz dGVwMSk7Cj4+KyBpZiAocmlzY3ZfdXNlX3B1c2hfcG9wIChmcmFtZSwgc3RlcDEpKQo+Pisgewo+ PisgcmlzY3ZfZW1pdF9wdXNoX2luc24gKGZyYW1lLCBzdGVwMSk7Cj4+Kwo+Pisgc3RlcDEgPSBN QVggKHN0ZXAxIC0gZnJhbWUtPnB1c2hfcG9wX3NwX2FkanVzdCwgMCk7Cj4+KyBzaXplID0gTUFY IChzaXplLnRvX2NvbnN0YW50KCkgLSBmcmFtZS0+cHVzaF9wb3Bfc3BfYWRqdXN0LCAwKTsKPj4r IGZyYW1lLT5tYXNrICY9IH4gKChUQVJHRVRfWkNNUCAmJiBUQVJHRVRfUlZFKSA/Cj4+KyBSSVND Vl9aQ01QRV9QVVNIX1BPUF9NQVNLCj4+KyA6IFJJU0NWX1pDRV9QVVNIX1BPUF9NQVNLKTsKPj4r IH0KPj4rCj4+IC8qIFNhdmUgdGhlIHJlZ2lzdGVycy4gKi8KPj4gaWYgKChmcmFtZS0+bWFzayB8 IGZyYW1lLT5mbWFzaykgIT0gMCkKPj4gewo+Pi0gSE9TVF9XSURFX0lOVCBzdGVwMSA9IHJpc2N2 X2ZpcnN0X3N0YWNrX3N0ZXAgKGZyYW1lKTsKPj4tIGlmIChzaXplLmlzX2NvbnN0YW50ICgpKQo+ Pi0gc3RlcDEgPSBNSU4gKHNpemUudG9fY29uc3RhbnQoKSwgc3RlcDEpOwo+Pi0KPj4tIGluc24g PSBnZW5fYWRkM19pbnNuIChzdGFja19wb2ludGVyX3J0eCwKPj4tIHN0YWNrX3BvaW50ZXJfcnR4 LAo+Pi0gR0VOX0lOVCAoLXN0ZXAxKSk7Cj4+LSBSVFhfRlJBTUVfUkVMQVRFRF9QIChlbWl0X2lu c24gKGluc24pKSA9IDE7Cj4+LSBzaXplIC09IHN0ZXAxOwo+Pi0gcmlzY3ZfZm9yX2VhY2hfc2F2 ZWRfcmVnIChzaXplLCByaXNjdl9zYXZlX3JlZywgZmFsc2UsIGZhbHNlKTsKPj4rIGlmIChzdGVw MSA+IDApCj4+KyB7Cj4+KyBpbnNuID0gZ2VuX2FkZDNfaW5zbiAoc3RhY2tfcG9pbnRlcl9ydHgs Cj4+KyBzdGFja19wb2ludGVyX3J0eCwKPj4rIEdFTl9JTlQgKC1zdGVwMSkpOwo+PisgUlRYX0ZS QU1FX1JFTEFURURfUCAoZW1pdF9pbnNuIChpbnNuKSkgPSAxOwo+Pisgc2l6ZSAtPSBzdGVwMTsK Pj4rIH0KPj4rIHJpc2N2X2Zvcl9lYWNoX3NhdmVkX3JlZyAoc2l6ZSwgcmlzY3Zfc2F2ZV9yZWcs Cj4+KyBmYWxzZSAvKiBib29sIGVwaWxvZ3VlICovLCBmYWxzZSAvKiBib29sIG1heWJlX2VoX3Jl dHVybiAqLyk7Cj4+IH0KPj4KPj4gZnJhbWUtPm1hc2sgPSBtYXNrOyAvKiBVbmRvIHRoZSBhYm92 ZSBmaWIuICovCj4+QEAgLTU0MTIsNiArNTgxMiw4IEBAIHJpc2N2X2V4cGFuZF9lcGlsb2d1ZSAo aW50IHN0eWxlKQo+PiBydHggcmEgPSBnZW5fcnR4X1JFRyAoUG1vZGUsIFJFVFVSTl9BRERSX1JF R05VTSk7Cj4+IHJ0eCBpbnNuOwo+Pgo+PisgYm9vbCB1c2VfemNtcF9wb3AgPSAhdXNlX3Jlc3Rv cmVfbGliY2FsbCAmJiAhKGNydGwtPmNhbGxzX2VoX3JldHVybik7Cj4+Kwo+PiAvKiBXZSBuZWVk IHRvIGFkZCBtZW1vcnkgYmFycmllciB0byBwcmV2ZW50IHJlYWQgZnJvbSBkZWFsbG9jYXRlZCBz dGFjay4gKi8KPj4gYm9vbCBuZWVkX2JhcnJpZXJfcCA9IGtub3duX25lIChnZXRfZnJhbWVfc2l6 ZSAoKQo+PiArIGNmdW4tPm1hY2hpbmUtPmZyYW1lLmFyZ19wb2ludGVyX29mZnNldCwgMCk7Cj4+ QEAgLTU1MzgsNiArNTk0MCwxOCBAQCByaXNjdl9leHBhbmRfZXBpbG9ndWUgKGludCBzdHlsZSkK Pj4gaWYgKHVzZV9yZXN0b3JlX2xpYmNhbGwpCj4+IGZyYW1lLT5tYXNrID0gMDsgLyogVGVtcG9y YXJpbHkgZmliIHRoYXQgd2UgbmVlZCBub3Qgc2F2ZSBHUFJzLiAqLwo+Pgo+PisgaWYgKHVzZV96 Y21wX3BvcCAmJiByaXNjdl91c2VfcHVzaF9wb3AgKGZyYW1lLCBzdGVwMikpCj4+KyB7Cj4+KyAv KiBFbWl0IGEgYmFycmllciB0byBwcmV2ZW50IGxvYWRzIGZyb20gYSBkZWFsbG9jYXRlZCBzdGFj ay4gKi8KPj4rIHJpc2N2X2VtaXRfc3RhY2tfdGllICgpOwo+PisgbmVlZF9iYXJyaWVyX3AgPSBm YWxzZTsKPj4rIHJpc2N2X2VtaXRfcG9wX2luc24gKGZyYW1lLCBmcmFtZS0+dG90YWxfc2l6ZS50 b19jb25zdGFudCgpLCBzdGVwMik7Cj4+KyBmcmFtZS0+bWFzayAmPSB+ICgoVEFSR0VUX1pDTVAg JiYgVEFSR0VUX1JWRSkgPwo+PisgUklTQ1ZfWkNNUEVfUFVTSF9QT1BfTUFTSwo+PisgOiBSSVND Vl9aQ0VfUFVTSF9QT1BfTUFTSyk7Cj4+KyBzdGVwMiA9IDA7Cj4+KyB9Cj4+Kwo+PiAvKiBSZXN0 b3JlIHRoZSByZWdpc3RlcnMuICovCj4+IHJpc2N2X2Zvcl9lYWNoX3NhdmVkX3JlZyAoZnJhbWUt PnRvdGFsX3NpemUgLSBzdGVwMiwgcmlzY3ZfcmVzdG9yZV9yZWcsCj4+IHRydWUsIHN0eWxlID09 IEVYQ0VQVElPTl9SRVRVUk4pOwo+PkBAIC01NTUyLDYgKzU5NjYsOSBAQCByaXNjdl9leHBhbmRf ZXBpbG9ndWUgKGludCBzdHlsZSkKPj4gaWYgKG5lZWRfYmFycmllcl9wKQo+PiByaXNjdl9lbWl0 X3N0YWNrX3RpZSAoKTsKPj4KPj4rIGlmICh1c2VfemNtcF9wb3ApCj4+KyBmcmFtZS0+bWFzayA9 IG1hc2s7Cj4+Kwo+PiAvKiBEZWFsbG9jYXRlIHRoZSBmaW5hbCBiaXQgb2YgdGhlIGZyYW1lLiAq Lwo+PiBpZiAoc3RlcDIgPiAwKQo+PiB7Cj4+ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3Yv cmlzY3YuaCBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YuaAo+PmluZGV4IGQwNWIxZDU5ODUzLi42 ZTZlM2VlMmMyNSAxMDA2NDQKPj4tLS0gYS9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmgKPj4rKysg Yi9nY2MvY29uZmlnL3Jpc2N2L3Jpc2N2LmgKPj5AQCAtMzgzLDYgKzM4Myw3IEBAIEFTTV9NSVNB X1NQRUMKPj4gI2RlZmluZSBIQVJEX0ZSQU1FX1BPSU5URVJfUkVHTlVNIDgKPj4gI2RlZmluZSBT VEFDS19QT0lOVEVSX1JFR05VTSAyCj4+ICNkZWZpbmUgVEhSRUFEX1BPSU5URVJfUkVHTlVNIDQK Pj4rI2RlZmluZSBSRVRVUk5fVkFMVUVfUkVHTlVNIDEwCj4+Cj4+IC8qIFRoZXNlIHR3byByZWdp c3RlcnMgZG9uJ3QgcmVhbGx5IGV4aXN0OiB0aGV5IGdldCBlbGltaW5hdGVkIHRvIGVpdGhlcgo+ PiB0aGUgc3RhY2sgb3IgaGFyZCBmcmFtZSBwb2ludGVyLiAqLwo+PkBAIC0xMDk3LDQgKzEwOTgs NyBAQCBleHRlcm4gdm9pZCByaXNjdl9yZW1vdmVfdW5uZWVkZWRfc2F2ZV9yZXN0b3JlX2NhbGxz Cj4+KHZvaWQpOwo+PiAjZGVmaW5lIERXQVJGX1JFR19UT19VTldJTkRfQ09MVU1OKFJFR05PKSBc Cj4+ICgoUkVHTk8gPT0gUklTQ1ZfRFdBUkZfVkxFTkIpID8gKEZJUlNUX1BTRVVET19SRUdJU1RF UiArIDEpIDogUkVHTk8pCj4+Cj4+KyNkZWZpbmUgUklTQ1ZfWkNFX1BVU0hfUE9QX01BU0sgMHgw ZmZjMDMwMnUKPj4rI2RlZmluZSBSSVNDVl9aQ01QRV9QVVNIX1BPUF9NQVNLIDB4MzAydQo+PisK Pj4gI2VuZGlmIC8qICEgR0NDX1JJU0NWX0ggKi8KPj5kaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9y aXNjdi9yaXNjdi5tZCBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YubWQKPj5pbmRleCBiYzM4NGQ5 YWVkZi4uYjlmMmE0MjZlNDggMTAwNjQ0Cj4+LS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi9yaXNjdi5t ZAo+PisrKyBiL2djYy9jb25maWcvcmlzY3YvcmlzY3YubWQKPj5AQCAtMTA4LDEyICsxMDgsMTQg QEAKPj4KPj4gKGRlZmluZV9jb25zdGFudHMKPj4gWyhSRVRVUk5fQUREUl9SRUdOVU0gMSkKPj4r IChTUF9SRUdOVU0gMikKPj4gKEdQX1JFR05VTSAzKQo+PiAoVFBfUkVHTlVNIDQpCj4+IChUMF9S RUdOVU0gNSkKPj4gKFQxX1JFR05VTSA2KQo+PiAoUzBfUkVHTlVNIDgpCj4+IChTMV9SRUdOVU0g OSkKPj4rIChBMF9SRUdOVU0gMTApCj4+IChTMl9SRUdOVU0gMTgpCj4+IChTM19SRUdOVU0gMTkp Cj4+IChTNF9SRUdOVU0gMjApCj4+QEAgLTMxNDcsMyArMzE0OSw0IEBACj4+IChpbmNsdWRlICJz aWZpdmUtNy5tZCIpCj4+IChpbmNsdWRlICJ0aGVhZC5tZCIpCj4+IChpbmNsdWRlICJ2ZWN0b3Iu bWQiKQo+PisoaW5jbHVkZSAiemMubWQiKQo+PmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL3Jpc2N2 L3QtcmlzY3YgYi9nY2MvY29uZmlnL3Jpc2N2L3QtcmlzY3YKPj5pbmRleCA2ZTMyNmZjN2UwMi4u OWVmNTIyMzA2YTUgMTAwNjQ0Cj4+LS0tIGEvZ2NjL2NvbmZpZy9yaXNjdi90LXJpc2N2Cj4+Kysr IGIvZ2NjL2NvbmZpZy9yaXNjdi90LXJpc2N2Cj4+QEAgLTkwLDYgKzkwLDEwIEBAIHJpc2N2LXYu bzogJChzcmNkaXIpL2NvbmZpZy9yaXNjdi9yaXNjdi12LmNjIFwKPj4gJChDT01QSUxFKSAkPAo+ PiAkKFBPU1RDT01QSUxFKQo+Pgo+PityaXNjdi16Y21wLXBvcHJldC5vOiAkKHNyY2RpcikvY29u ZmlnL3Jpc2N2L3Jpc2N2LXpjbXAtcG9wcmV0LmNjCj4+KyAkKENPTVBJTEUpICQ8Cj4+KyAkKFBP U1RDT01QSUxFKQo+PisKPj4gdGhlYWQubzogJChzcmNkaXIpL2NvbmZpZy9yaXNjdi90aGVhZC5j YyBcCj4+ICQoQ09ORklHX0gpICQoU1lTVEVNX0gpIGNvcmV0eXBlcy5oICQoVEFSR0VUX0gpIGJh Y2tlbmQuaCAkKFJUTF9IKSBcCj4+IG1lbW1vZGVsLmggJChFTUlUX1JUTF9IKSBwb2x5LWludC5o IG91dHB1dC5oCj4+ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcmlzY3YvemMubWQgYi9nY2MvY29u ZmlnL3Jpc2N2L3pjLm1kCj4+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPj5pbmRleCAwMDAwMDAwMDAw MC4uM2FkMzRkYWNkNDkKPj4tLS0gL2Rldi9udWxsCj4+KysrIGIvZ2NjL2NvbmZpZy9yaXNjdi96 Yy5tZAo+PkBAIC0wLDAgKzEsNDcgQEAKPj4rOzsgTWFjaGluZSBkZXNjcmlwdGlvbiBmb3IgWkNF IGV4dGVuc2lvbi4KPj4rOzsgQ29weXJpZ2h0IChDKSAyMDIxIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgo+PisKPj4rOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR0NDLgo+PisKPj4rOzsg R0NDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKPj4rOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKPj4rOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQo+Pis7OyBhbnkgbGF0ZXIgdmVy c2lvbi4KPj4rCj4+Kzs7IEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp bGwgYmUgdXNlZnVsLAo+Pis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+Pis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKPj4rOzsgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPj4rCj4+Kzs7IFlvdSBzaG91bGQgaGF2ZSBy ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+Kzs7IGFs b25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuIElmIG5vdCBzZWUKPj4rOzsgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+PisKPj4rKGRlZmluZV9pbnNuICIqc3RhY2tf cHVzaDxtb2RlPiIKPj4rIFsobWF0Y2hfcGFyYWxsZWwgMCAicmlzY3Zfc3RhY2tfcHVzaF9vcGVy YXRpb24iCj4+KyBbKHNldCAocmVnOlggU1BfUkVHTlVNKSAocGx1czpYIChyZWc6WCBTUF9SRUdO VU0pCj4+KyAobWF0Y2hfb3BlcmFuZDpYIDEgImNvbnN0X2ludF9vcGVyYW5kIiAiIikpKV0pXQo+ PisgIlRBUkdFVF9aQ01QIgo+PisgImNtLnB1c2hcdHslTDB9LCUxIikKPj4rCj4+KyhkZWZpbmVf aW5zbiAiKnN0YWNrX3BvcDxtb2RlPiIKPj4rIFsobWF0Y2hfcGFyYWxsZWwgMCAicmlzY3Zfc3Rh Y2tfcG9wX29wZXJhdGlvbiIKPj4rIFsoc2V0IChtYXRjaF9vcGVyYW5kOlggMSAicmVnaXN0ZXJf b3BlcmFuZCIgIiIpCj4+KyAobWVtOlggKHBsdXM6WCAocmVnOlggU1BfUkVHTlVNKQo+PisgKG1h dGNoX29wZXJhbmQ6WCAyICJjb25zdF9pbnRfb3BlcmFuZCIgIiIpKSkpXSldCj4+KyAiVEFSR0VU X1pDTVAiCj4+KyB7Cj4+KyByZXR1cm4gcmlzY3Zfb3V0cHV0X3BvcHJldF9wIChvcGVyYW5kc1sw XSkgPwo+PisgImNtLnBvcHJldFx0eyVMMH0sJXMwIiA6Cj4+KyAiY20ucG9wXHR7JUwwfSwlczAi Owo+PisgfSkKPj4rCj4+KyhkZWZpbmVfaW5zbiAiKnN0YWNrX3BvcF93aXRoX3JldHVybl92YWx1 ZTxtb2RlPiIKPj4rIFsobWF0Y2hfcGFyYWxsZWwgMCAicmlzY3Zfc3RhY2tfcG9wX29wZXJhdGlv biIKPj4rIFsoc2V0IChyZWc6QU5ZSSBBMF9SRUdOVU0pCj4+KyAobWF0Y2hfb3BlcmFuZDpBTllJ IDEgInBvcF9yZXR1cm5fdmFsdWVfY29uc3RhbnQiICIiKSldKV0KPj4rICJUQVJHRVRfWkNNUCIK Pj4rIHsKPj4rIGdjY19hc3NlcnQgKHJpc2N2X291dHB1dF9wb3ByZXRfcCAob3BlcmFuZHNbMF0p KTsKPj4rIHJldHVybiAiY20ucG9wcmV0elx0eyVMMH0sJXMwIjsKPj4rIH0pCj4+LS0KPj4yLjI1 LjEgCgoK