From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 7/7] lib: add igt_draw Date: Tue, 31 Mar 2015 15:07:27 +0200 Message-ID: <20150331130727.GH6354@phenom.ffwll.local> References: <1427320239-25667-1-git-send-email-przanoni@gmail.com> <1427320239-25667-7-git-send-email-przanoni@gmail.com> <20150326101938.GW1349@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f170.google.com (mail-wi0-f170.google.com [209.85.212.170]) by gabe.freedesktop.org (Postfix) with ESMTP id 25DDE6E385 for ; Tue, 31 Mar 2015 06:05:39 -0700 (PDT) Received: by wiaa2 with SMTP id a2so25200560wia.0 for ; Tue, 31 Mar 2015 06:05:38 -0700 (PDT) Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Paulo Zanoni Cc: Intel Graphics Development , Paulo Zanoni List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBNYXIgMzAsIDIwMTUgYXQgMDQ6NDU6NDlQTSAtMDMwMCwgUGF1bG8gWmFub25pIHdy b3RlOgo+IDIwMTUtMDMtMjYgNzoxOSBHTVQtMDM6MDAgRGFuaWVsIFZldHRlciA8ZGFuaWVsQGZm d2xsLmNoPjoKPiA+IE9uIFdlZCwgTWFyIDI1LCAyMDE1IGF0IDA2OjUwOjM5UE0gLTAzMDAsIFBh dWxvIFphbm9uaSB3cm90ZToKPiA+PiBGcm9tOiBQYXVsbyBaYW5vbmkgPHBhdWxvLnIuemFub25p QGludGVsLmNvbT4KPiA+Pgo+ID4+IEZvciBhbGwgdGhvc2UgSUdUIHRlc3RzIHRoYXQgbmVlZCBh biBlYXN5IHdheSB0byBkcmF3IHJlY3RhbmdsZXMgb24KPiA+PiBidWZmZXJzIHVzaW5nIGRpZmZl cmVudCBtZXRob2RzLiBDdXJyZW50IHBsYW5uZWQgdXNlcnM6IEZCQyBhbmQgUFNSCj4gPj4gQ1JD IHRlc3RzLgo+ID4+Cj4gPj4gVGhlcmUgaXMgYWxzbyBhIGxpYi90ZXN0cy9pZ3RfZHJhdyBwcm9n cmFtIHRvIGNoZWNrIGlmIHRoZSBsaWJyYXJ5IGlzCj4gPj4gc2FuZS4KPiA+Cj4gPiBXZSBuZWVk IHRvIG1vdmUgdGhhdCB0byB0ZXN0cy9pZ3RfZHJhdy4gVGhlIHRlc3RjYXNlIGluIGxpYi90ZXN0 cy8qIGdldAo+ID4gcnVuIHdpdGggbWFrZSBjaGVjaywgd2hpY2ggbXVzdCBiZSBwb3NzaWJsZSBh cyBub24tcm9vdCBvbiBhIG5vbi1pbnRlbAo+ID4gKGJ1aWxkKSBtYWNoaW5lLiBJZiB5b3UgbmVl ZCBhbiBncHUgdG8gcnVuIHlvdXIgdGVzdCBpdCBtdXN0IGJlIGluIHRlc3RzLyoKPiA+IGFzIGEg bm9ybWFsIGlndCBrZXJuZWwgdGVzdC4KPiA+Cj4gPiBXcnQgdGhlIGxpYnJhcnkgaXRzZWxmIEkn bSB1bnN1cmUgYWJvdXQgdGhlIGV4cGxpY2l0IHRpbGluZy9zd2l6emxpbmcuCj4gPiBZb3VyIGN1 cnJlbnQgY29kZSBvbmx5IHdvcmtzIG9uIGdlbjUtOCBhbmQgbWFpbnRhaW5pbmcgYSBmdWxsLWJs b3duCj4gPiBzd2l6emxlL3RpbGluZyBsaWJyYXJ5IGlzIHJlYWwgd29yaywgYW5kIG1lYW5zIHNv bWUgb2YgdGhlIHRlc3RzIGNhbid0IGJlCj4gPiBjb252ZXJ0ZWQgdG8gdGhpcy4KPiAKPiBUaGlz IHdvdWxkIGp1c3QgYmUgYSBwcm9ibGVtIGZvciB0aGUgdGVzdHMgdGhhdCB1c2UgaXQsIGFuZCBu byB0ZXN0IGlzCj4gdXNpbmcgaXQgeWV0LiBUaGlzIGlzIGp1c3QgZm9yIHRoZSBjYXNlcyB3aGVy ZSB5b3Ugd2FudCB0byB1c2UgdGhlIENQVQo+IHRvIHdyaXRlIGludG8gdGlsZWQgYnVmZmVycy4K PiAKPiBJZiB3ZSBzdGFydCB1c2luZyB0aGlzIGluIGEgdGVzdCwgdGhlbiB3ZSBuZWVkIHRvIHBy b3Blcmx5IHRlc3QgYWxsCj4gdGhlIGFmZmVjdGVkIHBsYXRmb3Jtcy4gSSBoYXZlIHNvbWUgbG9j YWwgRkJDIHRlc3RzIHRoYXQgdXNlIGl0IC0KPiB3aGljaCBJIHdhcyBnb2luZyB0byBzdWJtaXQg YWZ0ZXIgZ2V0dGluZyBmZWVkYmFjayBvbiB0aGlzIGxpYiAtLCBhbmQKPiBJIGRvbid0IHRoaW5r IHdlJ2xsIGVuZCBuZWVkaW5nIHRvIHJ1biB0aGVzZSB0ZXN0cyBvbiB0aGUgb2xkZXIKPiBwbGF0 Zm9ybXMuCj4gCj4gCj4gPiBXZSBkbyBoYXZlIGFsbCB0aGUgdGlsaW5nIG1vZGVzIGVuY29kZWQg aW4gdGhlIHRpbGluZwo+ID4gdGVzdHMgdGhvdWdoLCBzbyBpZiB5b3UgaGF2ZSBhIGxvdCBvZiB0 aW1lIGl0IG1pZ2h0IGJlIHVzZWZ1bCB0byBleHRyYWN0Cj4gPiB0aWxpbmcgaGVscGVycyBpbnRv IHRoZSBpZ3QgbGlicmFyeSB3aGljaCB3b3JrIG9uIGFsbCBnZW5lcmF0aW9ucy4KPiAKPiBDYW4g eW91IHBsZWFzZSBiZSBtb3JlIHByZWNpc2UgaGVyZT8gV2hlcmUgZXhhY3RseSBzaG91bGQgSSBs b29rPwoKZ2VtX3RpbGVkX3ByZWFkIGhhcyB0aGUgZnVsbC1ibG93biB0aWxpbmcvc3dpenpsZSBs b2dpYyBmb3IgYWxsIHBsYXRmb3Jtcy4KVGhpcyBpcyB0aGUgb25lIHRlc3Qgd2UgaGF2ZSB3aGlj aCBzaG91bGQgd29yayBldmVyeXdoZXJlLgoKTXkgY29uY2VybiBpcyB0aGF0IGJ5IGltcGxlbWVu dGluZyBhIGxpYnJhcnkgd2hpY2ggZG9lc24ndCBzdXBwb3J0CmV2ZXJ5d2hlcmUgd2UgaGF2ZWEg IGJpdCBhIHNwbGl0IGluIHRoZSB0ZXN0YmFzZSB3aGljaCBtaWdodCBzdXJwcmlzZQpwZW9wbGUu IEltbyBhIGxpYnJhcnkgZnVuY3Rpb24gc2hvdWxkIHdvcmsgZXZlcnl3aGVyZS4gSWYgeW91IGxv b2sgYXQgdGhlCmNvZGUgaW4gdGhlcmUgY29tcGFyZWQgdG8geW91cnMgdGhlcmUncyBqdXN0IDIg dGhpbmdzIG1pc3Npbmc6Ci0gVmFyaWFibGUgdGlsZSBzaXplL2hlaWdodC4KLSBTb21lIG9mIHRo ZSBtb3JlIGNyYXp5IHN3aXp6bGUgbW9kZXMuCgpBbHNvIGlmIHdlIGhhdmUgYSBsaWJyYXJ5IHdo aWNoIHdvcmtzIGV2ZXJ5d2hlcmUgd2UgY291bGQgZXh0ZW5kIGl0IHdpdGgKdGhlIG5ldyBmYW5j eSBnZW45KyB0aWxpbmcgbW9kZXMuCgo+ID4gSSB0aGluayB3ZSBzaG91bGQgYXQgbGVhc3QgaGF2 ZSBhIGZhbGxiYWNrIG1vZGUgd2hpY2ggYWxsb3dzIHVzIHRvIGZpbGwgYW4KPiA+IGVudGlyZSBi dWZmZXIgY29tcGxldGVseSAoaS5lLiBub3QganVzdCB0aGUgaHh3IGFyZWEpIGFuZCB0cmVhdCBp dCBhcwo+ID4gdW50aWxlZC4KPiAKPiBUaGF0IGlzIG5vdCB0aGUgZ29hbCBvZiB0aGUgbGlicmFy eS4gU3RpbGwsIGlmIHdlIGV2ZXIgbmVlZCB0aGlzCj4gZnVuY3Rpb24sIGl0IHdvdWxkIGJlIGVh c3kgdG8gYWRkLgoKVGhhdCB3YXMganVzdCBtZWFudCBhcyBhIGZhbGxiYWNrIGZvciBidWZmZXJz IHdoZXJlIHlvdSBkb24ndCBzdXBwb3J0IHRoZQpleGFjdCB0aWxpbmcvc3dpenpsaW5nIG1vZGUu Cj4gCj4gPgo+ID4gTW9yZSBjb21tZW50cyBiZWxvdy4KPiAKPiBNb3JlIGJlbG93IHRvbyA6KQo+ IAo+ID4gLURhbmllbAo+ID4KPiA+Pgo+ID4+IFNpZ25lZC1vZmYtYnk6IFBhdWxvIFphbm9uaSA8 cGF1bG8uci56YW5vbmlAaW50ZWwuY29tPgo+ID4+IC0tLQo+ID4+ICBsaWIvTWFrZWZpbGUuc291 cmNlcyAgICAgICB8ICAgMiArCj4gPj4gIGxpYi9pZ3RfZHJhdy5jICAgICAgICAgICAgIHwgNDY3 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4+ICBsaWIv aWd0X2RyYXcuaCAgICAgICAgICAgICB8ICA1NCArKysrKysKPiA+PiAgbGliL3Rlc3RzLy5naXRp Z25vcmUgICAgICAgfCAgIDEgKwo+ID4+ICBsaWIvdGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAg MSArCj4gPj4gIGxpYi90ZXN0cy9pZ3RfZHJhdy5jICAgICAgIHwgMjQ3ICsrKysrKysrKysrKysr KysrKysrKysrKwo+ID4+ICA2IGZpbGVzIGNoYW5nZWQsIDc3MiBpbnNlcnRpb25zKCspCj4gPj4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvaWd0X2RyYXcuYwo+ID4+ICBjcmVhdGUgbW9kZSAxMDA2 NDQgbGliL2lndF9kcmF3LmgKPiA+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi90ZXN0cy9pZ3Rf ZHJhdy5jCj4gPj4KPiA+PiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlLnNvdXJjZXMgYi9saWIv TWFrZWZpbGUuc291cmNlcwo+ID4+IGluZGV4IDNkOTM2MjkuLjg1ZGMzMjEgMTAwNjQ0Cj4gPj4g LS0tIGEvbGliL01ha2VmaWxlLnNvdXJjZXMKPiA+PiArKysgYi9saWIvTWFrZWZpbGUuc291cmNl cwo+ID4+IEBAIC01Miw2ICs1Miw4IEBAIGxpYmludGVsX3Rvb2xzX2xhX1NPVVJDRVMgPSAgICAg ICAgIFwKPiA+PiAgICAgICBpZ3RfZmIuaCAgICAgICAgICAgICAgICBcCj4gPj4gICAgICAgaWd0 X2NvcmUuYyAgICAgICAgICAgICAgXAo+ID4+ICAgICAgIGlndF9jb3JlLmggICAgICAgICAgICAg IFwKPiA+PiArICAgICBpZ3RfZHJhdy5jICAgICAgICAgICAgICBcCj4gPj4gKyAgICAgaWd0X2Ry YXcuaCAgICAgICAgICAgICAgXAo+ID4+ICAgICAgICQoTlVMTCkKPiA+Pgo+ID4+ICAuUEhPTlk6 IHZlcnNpb24uaC50bXAKPiA+PiBkaWZmIC0tZ2l0IGEvbGliL2lndF9kcmF3LmMgYi9saWIvaWd0 X2RyYXcuYwo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4gaW5kZXggMDAwMDAwMC4uNGVi NzUwNwo+ID4+IC0tLSAvZGV2L251bGwKPiA+PiArKysgYi9saWIvaWd0X2RyYXcuYwo+ID4+IEBA IC0wLDAgKzEsNDY3IEBACj4gPj4gKy8qCj4gPj4gKyAqIENvcHlyaWdodCDCqSAyMDE1IEludGVs IENvcnBvcmF0aW9uCj4gPj4gKyAqCj4gPj4gKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gPj4gKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCj4gPj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQg cmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiA+PiArICogdGhlIHJp Z2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1 YmxpY2Vuc2UsCj4gPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFu ZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4+ICsgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ID4+ ICsgKgo+ID4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPj4gKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK PiA+PiArICogU29mdHdhcmUuCj4gPj4gKyAqCj4gPj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4g Pj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiA+PiArICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKPiA+PiArICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElP TiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiA+PiArICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUwo+ID4+ICsgKiBJTiBUSEUgU09GVFdBUkUuCj4gPj4gKyAqCj4gPj4gKyAq Lwo+ID4+ICsKPiA+PiArI2luY2x1ZGUgPHN5cy9tbWFuLmg+Cj4gPj4gKwo+ID4+ICsjaW5jbHVk ZSAiaWd0X2RyYXcuaCIKPiA+PiArCj4gPj4gKyNpbmNsdWRlICJkcm10ZXN0LmgiCj4gPj4gKyNp bmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCj4gPj4gKyNpbmNsdWRlICJpZ3RfY29yZS5oIgo+ID4+ ICsjaW5jbHVkZSAiaWd0X2ZiLmgiCj4gPj4gKyNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgo+ ID4+ICsKPiA+PiArLyoqCj4gPj4gKyAqIFNFQ1RJT046aWd0X2RyYXcKPiA+PiArICogQHNob3J0 X2Rlc2NyaXB0aW9uOiBkcmF3aW5nIGhlbHBlcnMgZm9yIHRlc3RzCj4gPj4gKyAqIEB0aXRsZTog aS1nLXQgZHJhdwo+ID4+ICsgKiBAaW5jbHVkZTogaWd0X2RyYXcuaAo+ID4+ICsgKgo+ID4+ICsg KiBUaGlzIGxpYnJhcnkgY29udGFpbnMgc29tZSBmdW5jdGlvbnMgZm9yIGRyYXdpbmcgcmVjdGFu Z2xlcyBvbiBidWZmZXJzIHVzaW5nCj4gPj4gKyAqIHRoZSBtYW55IGRpZmZlcmVudCBkcmF3aW5n IG1ldGhvZHMgd2UgaGF2ZS4gSXQgYWxzbyBjb250YWlucyBzb21lIHdyYXBwZXJzCj4gPj4gKyAq IHRoYXQgbWFrZSB0aGUgcHJvY2VzcyBlYXNpZXIgaWYgeW91IGhhdmUgdGhlIGFic3RyYWN0IG9i amVjdHMgaW4gaGFuZC4KPiA+PiArICoKPiA+PiArICogQWxsIGZ1bmN0aW9ucyBhc3N1bWUgdGhl IGJ1ZmZlcnMgYXJlIGluIHRoZSBYUkdCIDg6ODo4IGZvcm1hdC4KPiA+PiArICoKPiA+PiArICov Cj4gPj4gKwo+ID4+ICsvKiBTb21lIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyB0byBhdm9pZCBo YXZpbmcgdG8gcGFzcyB0b25zIG9mIHBhcmFtZXRlcnMKPiA+PiArICogYXJvdW5kIGV2ZXJ5dGhp bmcuICovCj4gPj4gK3N0cnVjdCBjbWRfZGF0YSB7Cj4gPj4gKyAgICAgZHJtX2ludGVsX2J1Zm1n ciAqYnVmbWdyOwo+ID4+ICsgICAgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0Owo+ID4+ICt9 Owo+ID4+ICsKPiA+PiArc3RydWN0IGJ1Zl9kYXRhIHsKPiA+PiArICAgICB1aW50MzJfdCBoYW5k bGU7Cj4gPj4gKyAgICAgdWludDMyX3Qgc2l6ZTsKPiA+PiArICAgICB1aW50MzJfdCBzdHJpZGU7 Cj4gPj4gK307Cj4gPj4gKwo+ID4+ICtzdHJ1Y3QgcmVjdCB7Cj4gPj4gKyAgICAgaW50IHg7Cj4g Pj4gKyAgICAgaW50IHk7Cj4gPj4gKyAgICAgaW50IHc7Cj4gPj4gKyAgICAgaW50IGg7Cj4gPj4g K307Cj4gPj4gKwo+ID4+ICtjb25zdCBjaGFyICppZ3RfZHJhd19nZXRfbWV0aG9kX25hbWUoZW51 bSBpZ3RfZHJhd19tZXRob2QgbWV0aG9kKQo+ID4+ICt7Cj4gPj4gKyAgICAgc3dpdGNoIChtZXRo b2QpIHsKPiA+PiArICAgICBjYXNlIElHVF9EUkFXX01NQVBfQ1BVOgo+ID4+ICsgICAgICAgICAg ICAgcmV0dXJuICJtbWFwLWNwdSI7Cj4gPj4gKyAgICAgY2FzZSBJR1RfRFJBV19NTUFQX0dUVDoK PiA+PiArICAgICAgICAgICAgIHJldHVybiAibW1hcC1ndHQiOwo+ID4+ICsgICAgIGNhc2UgSUdU X0RSQVdfUFdSSVRFOgo+ID4+ICsgICAgICAgICAgICAgcmV0dXJuICJwd3JpdGUiOwo+ID4+ICsg ICAgIGNhc2UgSUdUX0RSQVdfQkxUOgo+ID4+ICsgICAgICAgICAgICAgcmV0dXJuICJibHQiOwo+ ID4+ICsgICAgIGNhc2UgSUdUX0RSQVdfUkVOREVSOgo+ID4+ICsgICAgICAgICAgICAgcmV0dXJu ICJyZW5kZXIiOwo+ID4+ICsgICAgIGRlZmF1bHQ6Cj4gPj4gKyAgICAgICAgICAgICBpZ3RfYXNz ZXJ0KGZhbHNlKTsKPiA+PiArICAgICB9Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyBpbnQg c3dpenpsZV9hZGRyKGludCBhZGRyLCBpbnQgc3dpenpsZSkKPiA+PiArewo+ID4+ICsgICAgIGlu dCBiaXQ2Owo+ID4+ICsKPiA+PiArICAgICBpZiAoc3dpenpsZSA9PSBJOTE1X0JJVF82X1NXSVpa TEVfOV8xMCkgewo+ID4+ICsgICAgICAgICAgICAgYml0NiA9ICgoYWRkciA+PiA2KSAmIDEpIF4g KChhZGRyID4+IDkpICYgMSkgXgo+ID4+ICsgICAgICAgICAgICAgICAgICAgICgoYWRkciA+PiAx MCkgJiAxKTsKPiA+PiArICAgICAgICAgICAgIGFkZHIgJj0gfigxIDw8IDYpOwo+ID4+ICsgICAg ICAgICAgICAgYWRkciB8PSAoYml0NiA8PCA2KTsKPiA+PiArICAgICB9Cj4gPj4gKwo+ID4+ICsg ICAgIHJldHVybiBhZGRyOwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICsvKiBJdCdzIGFsbCBpbiAicGl4 ZWwgY29vcmRpbmF0ZXMiLCBzbyBtYWtlIHN1cmUgeW91IG11bHRpcGx5L2RpdmlkZSBieSB0aGUg YnBwCj4gPj4gKyAqIGlmIHlvdSBuZWVkIHRvLiAqLwo+ID4+ICtzdGF0aWMgaW50IGxpbmVhcl94 X3lfdG9fdGlsZWRfcG9zKGludCB4LCBpbnQgeSwgdWludDMyX3Qgc3RyaWRlLCBpbnQgc3dpenps ZSkKPiA+PiArewo+ID4+ICsgICAgIGludCB4X3RpbGVfc2l6ZSwgeV90aWxlX3NpemU7Cj4gPj4g KyAgICAgaW50IHhfdGlsZV9uLCB5X3RpbGVfbiwgeF90aWxlX29mZiwgeV90aWxlX29mZjsKPiA+ PiArICAgICBpbnQgbGluZV9zaXplLCB0aWxlX3NpemU7Cj4gPj4gKyAgICAgaW50IHRpbGVfbiwg dGlsZV9vZmY7Cj4gPj4gKyAgICAgaW50IHRpbGVkX3BvcywgdGlsZXNfcGVyX2xpbmU7Cj4gPj4g KyAgICAgaW50IGJwcDsKPiA+PiArCj4gPj4gKyAgICAgbGluZV9zaXplID0gc3RyaWRlOwo+ID4+ ICsgICAgIHhfdGlsZV9zaXplID0gNTEyOwo+ID4+ICsgICAgIHlfdGlsZV9zaXplID0gODsKPiA+ PiArICAgICB0aWxlX3NpemUgPSB4X3RpbGVfc2l6ZSAqIHlfdGlsZV9zaXplOwo+ID4+ICsgICAg IHRpbGVzX3Blcl9saW5lID0gbGluZV9zaXplIC8geF90aWxlX3NpemU7Cj4gPj4gKyAgICAgYnBw ID0gc2l6ZW9mKHVpbnQzMl90KTsKPiA+PiArCj4gPj4gKyAgICAgeV90aWxlX24gPSB5IC8geV90 aWxlX3NpemU7Cj4gPj4gKyAgICAgeV90aWxlX29mZiA9IHkgJSB5X3RpbGVfc2l6ZTsKPiA+PiAr Cj4gPj4gKyAgICAgeF90aWxlX24gPSAoeCAqIGJwcCkgLyB4X3RpbGVfc2l6ZTsKPiA+PiArICAg ICB4X3RpbGVfb2ZmID0gKHggKiBicHApICUgeF90aWxlX3NpemU7Cj4gPj4gKwo+ID4+ICsgICAg IHRpbGVfbiA9IHlfdGlsZV9uICogdGlsZXNfcGVyX2xpbmUgKyB4X3RpbGVfbjsKPiA+PiArICAg ICB0aWxlX29mZiA9IHlfdGlsZV9vZmYgKiB4X3RpbGVfc2l6ZSArIHhfdGlsZV9vZmY7Cj4gPj4g KyAgICAgdGlsZWRfcG9zID0gdGlsZV9uICogdGlsZV9zaXplICsgdGlsZV9vZmY7Cj4gPj4gKwo+ ID4+ICsgICAgIHRpbGVkX3BvcyA9IHN3aXp6bGVfYWRkcih0aWxlZF9wb3MsIHN3aXp6bGUpOwo+ ID4+ICsKPiA+PiArICAgICByZXR1cm4gdGlsZWRfcG9zIC8gYnBwOwo+ID4+ICt9Cj4gPj4gKwo+ ID4+ICsvKiBJdCdzIGFsbCBpbiAicGl4ZWwgY29vcmRpbmF0ZXMiLCBzbyBtYWtlIHN1cmUgeW91 IG11bHRpcGx5L2RpdmlkZSBieSB0aGUgYnBwCj4gPj4gKyAqIGlmIHlvdSBuZWVkIHRvLiAqLwo+ ID4+ICtzdGF0aWMgdm9pZCB0aWxlZF9wb3NfdG9feF95X2xpbmVhcihpbnQgdGlsZWRfcG9zLCB1 aW50MzJfdCBzdHJpZGUsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBzd2l6emxlLCBpbnQgKngsIGludCAqeSkKPiA+PiArewo+ID4+ICsgICAgIGludCB0aWxlX24s IHRpbGVfb2ZmLCB0aWxlc19wZXJfbGluZSwgbGluZV9zaXplOwo+ID4+ICsgICAgIGludCB4X3Rp bGVfb2ZmLCB5X3RpbGVfb2ZmOwo+ID4+ICsgICAgIGludCB4X3RpbGVfbiwgeV90aWxlX247Cj4g Pj4gKyAgICAgaW50IHhfdGlsZV9zaXplLCB5X3RpbGVfc2l6ZSwgdGlsZV9zaXplOwo+ID4+ICsg ICAgIGludCBicHA7Cj4gPj4gKwo+ID4+ICsgICAgIHRpbGVkX3BvcyA9IHN3aXp6bGVfYWRkcih0 aWxlZF9wb3MsIHN3aXp6bGUpOwo+ID4+ICsKPiA+PiArICAgICBsaW5lX3NpemUgPSBzdHJpZGU7 Cj4gPj4gKyAgICAgeF90aWxlX3NpemUgPSA1MTI7Cj4gPj4gKyAgICAgeV90aWxlX3NpemUgPSA4 Owo+ID4+ICsgICAgIHRpbGVfc2l6ZSA9IHhfdGlsZV9zaXplICogeV90aWxlX3NpemU7Cj4gPj4g KyAgICAgdGlsZXNfcGVyX2xpbmUgPSBsaW5lX3NpemUgLyB4X3RpbGVfc2l6ZTsKPiA+PiArICAg ICBicHAgPSBzaXplb2YodWludDMyX3QpOwo+ID4+ICsKPiA+PiArICAgICB0aWxlX24gPSB0aWxl ZF9wb3MgLyB0aWxlX3NpemU7Cj4gPj4gKyAgICAgdGlsZV9vZmYgPSB0aWxlZF9wb3MgJSB0aWxl X3NpemU7Cj4gPj4gKwo+ID4+ICsgICAgIHlfdGlsZV9vZmYgPSB0aWxlX29mZiAvIHhfdGlsZV9z aXplOwo+ID4+ICsgICAgIHhfdGlsZV9vZmYgPSB0aWxlX29mZiAlIHhfdGlsZV9zaXplOwo+ID4+ ICsKPiA+PiArICAgICB4X3RpbGVfbiA9IHRpbGVfbiAlIHRpbGVzX3Blcl9saW5lOwo+ID4+ICsg ICAgIHlfdGlsZV9uID0gdGlsZV9uIC8gdGlsZXNfcGVyX2xpbmU7Cj4gPj4gKwo+ID4+ICsgICAg ICp4ID0gKHhfdGlsZV9uICogeF90aWxlX3NpemUgKyB4X3RpbGVfb2ZmKSAvIGJwcDsKPiA+PiAr ICAgICAqeSA9IHlfdGlsZV9uICogeV90aWxlX3NpemUgKyB5X3RpbGVfb2ZmOwo+ID4+ICt9Cj4g Pj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBkcmF3X3JlY3RfbW1hcF9jcHUoaW50IGZkLCBzdHJ1Y3Qg YnVmX2RhdGEgKmJ1Ziwgc3RydWN0IHJlY3QgKnJlY3QsCj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBjb2xvcikKPiA+PiArewo+ID4+ICsgICAgIHVpbnQzMl90ICpw dHI7Cj4gPj4gKyAgICAgaW50IHgsIHksIHBvczsKPiA+PiArICAgICB1aW50MzJfdCB0aWxpbmcs IHN3aXp6bGU7Cj4gPj4gKwo+ID4+ICsgICAgIGdlbV9zZXRfZG9tYWluKGZkLCBidWYtPmhhbmRs ZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwKPiA+PiArICAgICAgICAgICAgICAgICAgICBJOTE1X0dF TV9ET01BSU5fQ1BVKTsKPiA+PiArICAgICBnZW1fZ2V0X3RpbGluZyhmZCwgYnVmLT5oYW5kbGUs ICZ0aWxpbmcsICZzd2l6emxlKTsKPiA+PiArCj4gPj4gKyAgICAgcHRyID0gZ2VtX21tYXBfX2Nw dShmZCwgYnVmLT5oYW5kbGUsIDAsIGJ1Zi0+c2l6ZSwgMCk7Cj4gPj4gKyAgICAgaWd0X2Fzc2Vy dChwdHIpOwo+ID4+ICsKPiA+PiArICAgICBmb3IgKHkgPSByZWN0LT55OyB5IDwgcmVjdC0+eSAr IHJlY3QtPmg7IHkrKykgewo+ID4+ICsgICAgICAgICAgICAgZm9yICh4ID0gcmVjdC0+eDsgeCA8 IHJlY3QtPnggKyByZWN0LT53OyB4KyspIHsKPiA+PiArICAgICAgICAgICAgICAgICAgICAgaWYg KHRpbGluZykKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3MgPSBsaW5lYXJf eF95X3RvX3RpbGVkX3Bvcyh4LCB5LCBidWYtPnN0cmlkZSwKPiA+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l6emxlKTsKPiA+ PiArICAgICAgICAgICAgICAgICAgICAgZWxzZQo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHBvcyA9ICh5ICogYnVmLT5zdHJpZGUgLyBzaXplb2YodWludDMyX3QpKSArIHg7Cj4g Pj4gKyAgICAgICAgICAgICAgICAgICAgIHB0cltwb3NdID0gY29sb3I7Cj4gPj4gKyAgICAgICAg ICAgICB9Cj4gPj4gKyAgICAgfQo+ID4+ICsKPiA+PiArICAgICBnZW1fc3dfZmluaXNoKGZkLCBi dWYtPmhhbmRsZSk7Cj4gPj4gKwo+ID4+ICsgICAgIGlndF9hc3NlcnQobXVubWFwKHB0ciwgYnVm LT5zaXplKSA9PSAwKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgZHJhd19yZWN0 X21tYXBfZ3R0KGludCBmZCwgc3RydWN0IGJ1Zl9kYXRhICpidWYsIHN0cnVjdCByZWN0ICpyZWN0 LAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgY29sb3IpCj4gPj4g K3sKPiA+PiArICAgICB1aW50MzJfdCAqcHRyOwo+ID4+ICsgICAgIGludCB4LCB5Owo+ID4+ICsK PiA+PiArICAgICBwdHIgPSBnZW1fbW1hcF9fZ3R0KGZkLCBidWYtPmhhbmRsZSwgYnVmLT5zaXpl LAo+ID4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7 Cj4gPj4gKyAgICAgaWd0X2Fzc2VydChwdHIpOwo+ID4+ICsKPiA+PiArICAgICBmb3IgKHkgPSBy ZWN0LT55OyB5IDwgcmVjdC0+eSArIHJlY3QtPmg7IHkrKykgewo+ID4+ICsgICAgICAgICAgICAg aW50IGxpbmVfYmVnaW4gPSB5ICogYnVmLT5zdHJpZGUgLyBzaXplb2YodWludDMyX3QpOwo+ID4+ ICsgICAgICAgICAgICAgZm9yICh4ID0gcmVjdC0+eDsgeCA8IHJlY3QtPnggKyByZWN0LT53OyB4 KyspCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIHB0cltsaW5lX2JlZ2luICsgeF0gPSBjb2xv cjsKPiA+PiArICAgICB9Cj4gPj4gKwo+ID4+ICsgICAgIGlndF9hc3NlcnQobXVubWFwKHB0ciwg YnVmLT5zaXplKSA9PSAwKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgZHJhd19y ZWN0X3B3cml0ZV91bnRpbGVkKGludCBmZCwgc3RydWN0IGJ1Zl9kYXRhICpidWYsCj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVjdCAqcmVjdCwgdWludDMy X3QgY29sb3IpCj4gPj4gK3sKPiA+PiArICAgICB1aW50MzJfdCB0bXBbcmVjdC0+d107Cj4gPj4g KyAgICAgaW50IGksIHksIG9mZnNldCwgYnBwOwo+ID4+ICsKPiA+PiArICAgICBicHAgPSBzaXpl b2YodWludDMyX3QpOwo+ID4+ICsKPiA+PiArICAgICBmb3IgKGkgPSAwOyBpIDwgcmVjdC0+dzsg aSsrKQo+ID4+ICsgICAgICAgICAgICAgdG1wW2ldID0gY29sb3I7Cj4gPj4gKwo+ID4+ICsgICAg IGZvciAoeSA9IHJlY3QtPnk7IHkgPCByZWN0LT55ICsgcmVjdC0+aDsgeSsrKSB7Cj4gPj4gKyAg ICAgICAgICAgICBvZmZzZXQgPSAoeSAqIGJ1Zi0+c3RyaWRlKSArIChyZWN0LT54ICogYnBwKTsK PiA+PiArICAgICAgICAgICAgIGdlbV93cml0ZShmZCwgYnVmLT5oYW5kbGUsIG9mZnNldCwgdG1w LCByZWN0LT53ICogYnBwKTsKPiA+PiArICAgICB9Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRp YyB2b2lkIGRyYXdfcmVjdF9wd3JpdGVfdGlsZWQoaW50IGZkLCBzdHJ1Y3QgYnVmX2RhdGEgKmJ1 ZiwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVjdCAqcmVj dCwgdWludDMyX3QgY29sb3IsCj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3Qgc3dpenpsZSkKPiA+PiArewo+ID4+ICsgICAgIGludCBpOwo+ID4+ICsgICAgIGlu dCB0aWxlZF9wb3MsIGJwcCwgeCwgeTsKPiA+PiArICAgICB1aW50MzJfdCB0bXBbMTAyNF07Cj4g Pj4gKyAgICAgaW50IHRtcF91c2VkID0gMCwgdG1wX3NpemUgPSBBUlJBWV9TSVpFKHRtcCk7Cj4g Pj4gKyAgICAgYm9vbCBmbHVzaF90bXAgPSBmYWxzZTsKPiA+PiArICAgICBpbnQgdG1wX3N0YXJ0 X3BvcyA9IDA7Cj4gPj4gKwo+ID4+ICsgICAgIGJwcCA9IHNpemVvZih1aW50MzJfdCk7Cj4gPj4g Kwo+ID4+ICsgICAgIC8qIEluc3RlYWQgb2YgZG9pbmcgb25lIHB3cml0ZSBwZXIgcGl4ZWwsIHdl IHRyeSB0byBncm91cCB0aGUgbWF4aW11bQo+ID4+ICsgICAgICAqIGFtb3VudCBvZiBjb25zZWN1 dGl2ZSBwaXhlbHMgd2UgY2FuIGluIGEgc2luZ2xlIHB3cml0ZTogdGhhdCdzIHdoeSB3ZQo+ID4+ ICsgICAgICAqIHVzZSB0aGUgInRtcCIgdmFyaWFibGVzLiAqLwo+ID4+ICsgICAgIGZvciAoaSA9 IDA7IGkgPCB0bXBfc2l6ZTsgaSsrKQo+ID4+ICsgICAgICAgICAgICAgdG1wW2ldID0gY29sb3I7 Cj4gPj4gKwo+ID4+ICsgICAgIGZvciAodGlsZWRfcG9zID0gMDsgdGlsZWRfcG9zIDwgYnVmLT5z aXplOyB0aWxlZF9wb3MgKz0gYnBwKSB7Cj4gPj4gKyAgICAgICAgICAgICB0aWxlZF9wb3NfdG9f eF95X2xpbmVhcih0aWxlZF9wb3MsIGJ1Zi0+c3RyaWRlLCBzd2l6emxlLCAmeCwgJnkpOwo+ID4+ ICsKPiA+PiArICAgICAgICAgICAgIGlmICh4ID49IHJlY3QtPnggJiYgeCA8IHJlY3QtPnggKyBy ZWN0LT53ICYmCj4gPj4gKyAgICAgICAgICAgICAgICAgeSA+PSByZWN0LT55ICYmIHkgPCByZWN0 LT55ICsgcmVjdC0+aCkgewo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBpZiAodG1wX3VzZWQg PT0gMCkKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBfc3RhcnRfcG9zID0g dGlsZWRfcG9zOwo+ID4+ICsgICAgICAgICAgICAgICAgICAgICB0bXBfdXNlZCsrOwo+ID4+ICsg ICAgICAgICAgICAgfSBlbHNlIHsKPiA+PiArICAgICAgICAgICAgICAgICAgICAgZmx1c2hfdG1w ID0gdHJ1ZTsKPiA+PiArICAgICAgICAgICAgIH0KPiA+PiArCj4gPj4gKyAgICAgICAgICAgICBp ZiAodG1wX3VzZWQgPT0gdG1wX3NpemUgfHwgKGZsdXNoX3RtcCAmJiB0bXBfdXNlZCA+IDApKSB7 Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGdlbV93cml0ZShmZCwgYnVmLT5oYW5kbGUsIHRt cF9zdGFydF9wb3MsIHRtcCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRt cF91c2VkICogYnBwKTsKPiA+PiArICAgICAgICAgICAgICAgICAgICAgZmx1c2hfdG1wID0gZmFs c2U7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIHRtcF91c2VkID0gMDsKPiA+PiArICAgICAg ICAgICAgIH0KPiA+PiArICAgICB9Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyB2b2lkIGRy YXdfcmVjdF9wd3JpdGUoaW50IGZkLCBzdHJ1Y3QgYnVmX2RhdGEgKmJ1ZiwKPiA+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVjdCAqcmVjdCwgdWludDMyX3QgY29sb3IpCj4g Pj4gK3sKPiA+PiArICAgICB1aW50MzJfdCB0aWxpbmcsIHN3aXp6bGU7Cj4gPj4gKwo+ID4+ICsg ICAgIGdlbV9nZXRfdGlsaW5nKGZkLCBidWYtPmhhbmRsZSwgJnRpbGluZywgJnN3aXp6bGUpOwo+ ID4+ICsKPiA+PiArICAgICBpZiAodGlsaW5nKQo+ID4+ICsgICAgICAgICAgICAgZHJhd19yZWN0 X3B3cml0ZV90aWxlZChmZCwgYnVmLCByZWN0LCBjb2xvciwgc3dpenpsZSk7Cj4gPj4gKyAgICAg ZWxzZQo+ID4+ICsgICAgICAgICAgICAgZHJhd19yZWN0X3B3cml0ZV91bnRpbGVkKGZkLCBidWYs IHJlY3QsIGNvbG9yKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgZHJhd19yZWN0 X2JsdChpbnQgZmQsIHN0cnVjdCBjbWRfZGF0YSAqY21kX2RhdGEsCj4gPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGJ1Zl9kYXRhICpidWYsIHN0cnVjdCByZWN0ICpyZWN0LAo+ID4+ ICsgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGNvbG9yKQo+ID4+ICt7Cj4gPj4gKyAg ICAgZHJtX2ludGVsX2JvICpkc3Q7Cj4gPj4gKyAgICAgc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaDsKPiA+PiArICAgICBpbnQgYmx0X2NtZF9sZW4sIGJsdF9jbWRfdGlsaW5nOwo+ID4+ ICsgICAgIHVpbnQzMl90IGRldmlkID0gaW50ZWxfZ2V0X2RybV9kZXZpZChmZCk7Cj4gPj4gKyAg ICAgaW50IGdlbiA9IGludGVsX2dlbihkZXZpZCk7Cj4gPj4gKyAgICAgdWludDMyX3QgdGlsaW5n LCBzd2l6emxlOwo+ID4+ICsgICAgIGludCBwaXRjaDsKPiA+PiArCj4gPj4gKyAgICAgZ2VtX2dl dF90aWxpbmcoZmQsIGJ1Zi0+aGFuZGxlLCAmdGlsaW5nLCAmc3dpenpsZSk7Cj4gPj4gKwo+ID4+ ICsgICAgIGRzdCA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGNtZF9kYXRhLT5idWZtZ3IsIGZk LCAiIiwgYnVmLT5oYW5kbGUpOwo+ID4+ICsgICAgIGlndF9hc3NlcnQoZHN0KTsKPiA+PiArCj4g Pj4gKyAgICAgYmF0Y2ggPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhjbWRfZGF0YS0+YnVmbWdy LCBkZXZpZCk7Cj4gPj4gKyAgICAgaWd0X2Fzc2VydChiYXRjaCk7Cj4gPj4gKwo+ID4+ICsgICAg IGJsdF9jbWRfbGVuID0gKGdlbiA+PSA4KSA/ICAweDUgOiAweDQ7Cj4gPj4gKyAgICAgYmx0X2Nt ZF90aWxpbmcgPSAodGlsaW5nKSA/IFhZX0NPTE9SX0JMVF9USUxFRCA6IDA7Cj4gPj4gKyAgICAg cGl0Y2ggPSAodGlsaW5nKSA/IGJ1Zi0+c3RyaWRlIC8gNCA6IGJ1Zi0+c3RyaWRlOwo+ID4+ICsK PiA+PiArICAgICBCRUdJTl9CQVRDSCg2LCAxKTsKPiA+Cj4gPiBUaGlzIGJyZWFrcyBvbiBnZW44 IGJlY2F1c2UgdGhlcmUgdGhlIHJlbG9jYXRpb25zIGFyZSAyIGR3b3Jkcy4gWW91IG5lZWQKPiA+ IHRvIHVzZSB0aGUgbWFnaWMgbWFjcm9zIGZvciB0aGF0Lgo+ID4KPiAKPiBQbGVhc2UgcmVhZCB0 aGUgY29kZSBhZ2Fpbi4gSSBhY3R1YWxseSBkZXZlbG9wZWQgYW5kIHRlc3RlZCBldmVyeXRoaW5n Cj4gb24gZ2VuOCA6KQoKT2ggcmlnaHQgSSBtaXNzZWQgdGhhdCBPVVRfUkVMT0MgdXNlcyBxd29y ZHMgb24gZ2VuOCsgYXV0b21hdGljYWxseS4gSQpzdGlsbCB0aGluayB1c2luZyB0aGUgc2FtZSBs b2dpYyBhcyB3aXRoIGFsbCBvdGhlciBibGl0dGVyIHRlc3RzIHdvdWxkIGJlCmJldHRlciBzaW5j ZSBibGl0dGVyIGNtZCBjb3B5cGFzdGUgZmFpbCBoYXMgYmVlbiB0aGUgYmFuZSBvZiBpZ3QuCgo+ IAo+ID4+ICsgICAgIE9VVF9CQVRDSChYWV9DT0xPUl9CTFRfQ01EX05PTEVOIHwgWFlfQ09MT1Jf QkxUX1dSSVRFX0FMUEhBIHwKPiA+PiArICAgICAgICAgICAgICAgWFlfQ09MT1JfQkxUX1dSSVRF X1JHQiB8IGJsdF9jbWRfdGlsaW5nIHwgYmx0X2NtZF9sZW4pOwo+ID4+ICsgICAgIE9VVF9CQVRD SCgoMyA8PCAyNCkgfCAoMHhGMCA8PCAxNikgfCBwaXRjaCk7Cj4gPj4gKyAgICAgT1VUX0JBVENI KChyZWN0LT55IDw8IDE2KSB8IHJlY3QtPngpOwo+ID4+ICsgICAgIE9VVF9CQVRDSCgoKHJlY3Qt PnkgKyByZWN0LT5oKSA8PCAxNikgfCAocmVjdC0+eCArIHJlY3QtPncpKTsKPiA+PiArICAgICBp ZiAodGlsaW5nKQoKYnR3IHRoaXMgaXNuJ3QgbmVlZGVkIE9VVF9SRUxPQ19GRU5DRUQgd29ya3Mg Y29ycmVjdGx5IGZvciB1bnRpbGVkCmJ1ZmZlcnMuIEl0J3MgYWN0dWFsbHkgcmVxdWlyZWQgb24g Z2VuMi8zIGZvciB1bnRpbGVkIGJ1ZmZlcnMgaWYgeW91IHJldXNlCmJ1ZmZlcnMgKHdoaWNoIG1p Z2h0IGJlIHRoZSBjYXNlIGZvciBhIGxpYnJhcnkgZnVuY3Rpb24pIHNpbmNlIE9VVF9SRUxPQwpk b2VzIF9ub3RfIHJlbW92ZSBhIHN0YWxlIGZlbmNlIGlmIHRoZXJlIGlzIG9uZS4KCj4gPj4gKyAg ICAgICAgICAgICBPVVRfUkVMT0NfRkVOQ0VEKGRzdCwgMCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRF UiwgMCk7Cj4gPj4gKyAgICAgZWxzZQo+ID4+ICsgICAgICAgICAgICAgT1VUX1JFTE9DKGRzdCwg MCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgMCk7Cj4gPj4gKyAgICAgT1VUX0JBVENIKGNvbG9y KTsKPiA+PiArICAgICBBRFZBTkNFX0JBVENIKCk7Cj4gPj4gKwo+ID4+ICsgICAgIGludGVsX2Jh dGNoYnVmZmVyX2ZsdXNoKGJhdGNoKTsKPiA+PiArICAgICBnZW1fc3luYyhmZCwgYnVmLT5oYW5k bGUpOwo+ID4+ICsgICAgIGludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOwo+ID4+ICt9Cj4g Pj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBkcmF3X3JlY3RfcmVuZGVyKGludCBmZCwgc3RydWN0IGNt ZF9kYXRhICpjbWRfZGF0YSwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg YnVmX2RhdGEgKmJ1Ziwgc3RydWN0IHJlY3QgKnJlY3QsCj4gPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgdWludDMyX3QgY29sb3IpCj4gPj4gK3sKPiA+PiArICAgICBkcm1faW50ZWxfYm8g KnNyYywgKmRzdDsKPiA+PiArICAgICB1aW50MzJfdCBkZXZpZCA9IGludGVsX2dldF9kcm1fZGV2 aWQoZmQpOwo+ID4+ICsgICAgIGlndF9yZW5kZXJfY29weWZ1bmNfdCByZW5kZXJjb3B5ID0gaWd0 X2dldF9yZW5kZXJfY29weWZ1bmMoZGV2aWQpOwo+ID4+ICsgICAgIHN0cnVjdCBpZ3RfYnVmIHNy Y19idWYsIGRzdF9idWY7Cj4gPj4gKyAgICAgc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aDsKPiA+PiArICAgICB1aW50MzJfdCB0aWxpbmcsIHN3aXp6bGU7Cj4gPj4gKyAgICAgc3RydWN0 IGJ1Zl9kYXRhIHRtcDsKPiA+PiArCj4gPj4gKyAgICAgaWd0X3NraXBfb24oIXJlbmRlcmNvcHkp Owo+ID4+ICsKPiA+PiArICAgICBnZW1fZ2V0X3RpbGluZyhmZCwgYnVmLT5oYW5kbGUsICZ0aWxp bmcsICZzd2l6emxlKTsKPiA+PiArCj4gPj4gKyAgICAgLyogV2UgY3JlYXRlIGEgdGVtcG9yYXJ5 IGJ1ZmZlciBhbmQgY29weSBmcm9tIGl0IHVzaW5nIHJlbmRlcmNvcHkuICovCj4gPj4gKyAgICAg dG1wLnNpemUgPSByZWN0LT53ICogcmVjdC0+aCAqIHNpemVvZih1aW50MzJfdCk7Cj4gPj4gKyAg ICAgdG1wLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIHRtcC5zaXplKTsKPiA+PiArICAgICB0bXAu c3RyaWRlID0gcmVjdC0+dyAqIHNpemVvZih1aW50MzJfdCk7Cj4gPj4gKyAgICAgZHJhd19yZWN0 X21tYXBfY3B1KGZkLCAmdG1wLCAmKHN0cnVjdCByZWN0KXswLCAwLCByZWN0LT53LCByZWN0LT5o fSwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IpOwo+ID4+ICsKPiA+PiArICAg ICBzcmMgPSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhjbWRfZGF0YS0+YnVmbWdyLCBmZCwgIiIs IHRtcC5oYW5kbGUpOwo+ID4+ICsgICAgIGlndF9hc3NlcnQoc3JjKTsKPiA+PiArICAgICBkc3Qg PSBnZW1faGFuZGxlX3RvX2xpYmRybV9ibyhjbWRfZGF0YS0+YnVmbWdyLCBmZCwgIiIsIGJ1Zi0+ aGFuZGxlKTsKPiA+PiArICAgICBpZ3RfYXNzZXJ0KGRzdCk7Cj4gPj4gKwo+ID4+ICsgICAgIHNy Y19idWYuYm8gPSBzcmM7Cj4gPj4gKyAgICAgc3JjX2J1Zi5zdHJpZGUgPSB0bXAuc3RyaWRlOwo+ ID4+ICsgICAgIHNyY19idWYudGlsaW5nID0gSTkxNV9USUxJTkdfTk9ORTsKPiA+PiArICAgICBz cmNfYnVmLnNpemUgPSB0bXAuc2l6ZTsKPiA+PiArICAgICBkc3RfYnVmLmJvID0gZHN0Owo+ID4+ ICsgICAgIGRzdF9idWYuc3RyaWRlID0gYnVmLT5zdHJpZGU7Cj4gPj4gKyAgICAgZHN0X2J1Zi50 aWxpbmcgPSB0aWxpbmc7Cj4gPj4gKyAgICAgZHN0X2J1Zi5zaXplID0gYnVmLT5zaXplOwo+ID4+ ICsKPiA+PiArICAgICBiYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGNtZF9kYXRhLT5i dWZtZ3IsIGRldmlkKTsKPiA+PiArICAgICBpZ3RfYXNzZXJ0KGJhdGNoKTsKPiA+PiArCj4gPj4g KyAgICAgcmVuZGVyY29weShiYXRjaCwgY21kX2RhdGEtPmNvbnRleHQsICZzcmNfYnVmLCAwLCAw LCByZWN0LT53LCByZWN0LT5oLAo+ID4+ICsgICAgICAgICAgICAgICAgJmRzdF9idWYsIHJlY3Qt PngsIHJlY3QtPnkpOwo+ID4+ICsKPiA+PiArICAgICBnZW1fc3luYyhmZCwgYnVmLT5oYW5kbGUp Owo+ID4+ICsgICAgIGludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmF0Y2gpOwo+ID4+ICsgICAgIGdl bV9jbG9zZShmZCwgdG1wLmhhbmRsZSk7Cj4gPj4gK30KPiA+PiArCj4gPj4gKy8qKgo+ID4+ICsg KiBpZ3RfZHJhd19yZWN0Ogo+ID4+ICsgKiBAZmQ6IHRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yCj4g Pj4gKyAqIEBidWZtZ3I6IHRoZSBsaWJkcm0gYnVmbWdyLCBvbmx5IHJlcXVpcmVkIGZvciBJR1Rf RFJBV19CTFQgYW5kCj4gPj4gKyAqICAgICAgICAgIElHVF9EUkFXX1JFTkRFUgo+ID4+ICsgKiBA Y29udGV4dDogdGhlIGNvbnRleHQsIGNhbiBiZSBOVUxMIGlmIHlvdSBkb24ndCB3YW50IHRvIHRo aW5rIGFib3V0IGl0Cj4gPj4gKyAqIEBidWZfaGFuZGxlOiB0aGUgaGFuZGxlIG9mIHRoZSBidWZm ZXIgd2hlcmUgeW91J3JlIGdvaW5nIHRvIGRyYXcgdG8KPiA+PiArICogQGJ1Zl9zaXplOiB0aGUg c2l6ZSBvZiB0aGUgYnVmZmVyCj4gPj4gKyAqIEBidWZfc3RyaWRlOiB0aGUgc3RyaWRlIG9mIHRo ZSBidWZmZXIKPiA+PiArICogQG1ldGhvZDogbWV0aG9kIHlvdSdyZSBnb2luZyB0byB1c2UgdG8g d3JpdGUgdG8gdGhlIGJ1ZmZlcgo+ID4+ICsgKiBAcmVjdF94OiBob3Jpem9udGFsIHBvc2l0aW9u IG9uIHRoZSBidWZmZXIgd2hlcmUgeW91ciByZWN0YW5nbGUgc3RhcnRzCj4gPj4gKyAqIEByZWN0 X3k6IHZlcnRpY2FsIHBvc2l0aW9uIG9uIHRoZSBidWZmZXIgd2hlcmUgeW91ciByZWN0YW5nbGUg c3RhcnRzCj4gPj4gKyAqIEByZWN0X3c6IHdpZHRoIG9mIHRoZSByZWN0YW5nbGUKPiA+PiArICog QHJlY3RfaDogaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUKPiA+PiArICogQGNvbG9yOiBjb2xvciBv ZiB0aGUgcmVjdGFuZ2xlCj4gPj4gKyAqCj4gPj4gKyAqIFRoaXMgZnVuY3Rpb24gZHJhd3MgYSBj b2xvcmVkIHJlY3RhbmdsZSBvbiB0aGUgZGVzdGluYXRpb24gYnVmZmVyLCBhbGxvd2luZwo+ID4+ ICsgKiB5b3UgdG8gc3BlY2lmeSB0aGUgbWV0aG9kIHVzZWQgdG8gZHJhdyB0aGUgcmVjdGFuZ2xl LiBXZSBhc3N1bWUgMzIgYml0IHBpeGVscwo+ID4+ICsgKiB3aXRoIDggYml0cyBwZXIgY29sb3Iu Cj4gPj4gKyAqLwo+ID4+ICt2b2lkIGlndF9kcmF3X3JlY3QoaW50IGZkLCBkcm1faW50ZWxfYnVm bWdyICpidWZtZ3IsIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LAo+ID4+ICsgICAgICAgICAg ICAgICAgdWludDMyX3QgYnVmX2hhbmRsZSwgdWludDMyX3QgYnVmX3NpemUsIHVpbnQzMl90IGJ1 Zl9zdHJpZGUsCj4gPj4gKyAgICAgICAgICAgICAgICBlbnVtIGlndF9kcmF3X21ldGhvZCBtZXRo b2QsIGludCByZWN0X3gsIGludCByZWN0X3ksCj4gPj4gKyAgICAgICAgICAgICAgICBpbnQgcmVj dF93LCBpbnQgcmVjdF9oLCB1aW50MzJfdCBjb2xvcikKPiA+PiArewo+ID4+ICsgICAgIHN0cnVj dCBjbWRfZGF0YSBjbWRfZGF0YSA9IHsKPiA+PiArICAgICAgICAgICAgIC5idWZtZ3IgPSBidWZt Z3IsCj4gPj4gKyAgICAgICAgICAgICAuY29udGV4dCA9IGNvbnRleHQsCj4gPj4gKyAgICAgfTsK PiA+PiArICAgICBzdHJ1Y3QgYnVmX2RhdGEgYnVmID0gewo+ID4+ICsgICAgICAgICAgICAgLmhh bmRsZSA9IGJ1Zl9oYW5kbGUsCj4gPj4gKyAgICAgICAgICAgICAuc2l6ZSA9IGJ1Zl9zaXplLAo+ ID4+ICsgICAgICAgICAgICAgLnN0cmlkZSA9IGJ1Zl9zdHJpZGUsCj4gPj4gKyAgICAgfTsKPiA+ PiArICAgICBzdHJ1Y3QgcmVjdCByZWN0ID0gewo+ID4+ICsgICAgICAgICAgICAgLnggPSByZWN0 X3gsCj4gPj4gKyAgICAgICAgICAgICAueSA9IHJlY3RfeSwKPiA+PiArICAgICAgICAgICAgIC53 ID0gcmVjdF93LAo+ID4+ICsgICAgICAgICAgICAgLmggPSByZWN0X2gsCj4gPj4gKyAgICAgfTsK PiA+PiArCj4gPj4gKyAgICAgc3dpdGNoIChtZXRob2QpIHsKPiA+PiArICAgICBjYXNlIElHVF9E UkFXX01NQVBfQ1BVOgo+ID4+ICsgICAgICAgICAgICAgZHJhd19yZWN0X21tYXBfY3B1KGZkLCAm YnVmLCAmcmVjdCwgY29sb3IpOwo+ID4+ICsgICAgICAgICAgICAgYnJlYWs7Cj4gPj4gKyAgICAg Y2FzZSBJR1RfRFJBV19NTUFQX0dUVDoKPiA+PiArICAgICAgICAgICAgIGRyYXdfcmVjdF9tbWFw X2d0dChmZCwgJmJ1ZiwgJnJlY3QsIGNvbG9yKTsKPiA+PiArICAgICAgICAgICAgIGJyZWFrOwo+ ID4+ICsgICAgIGNhc2UgSUdUX0RSQVdfUFdSSVRFOgo+ID4+ICsgICAgICAgICAgICAgZHJhd19y ZWN0X3B3cml0ZShmZCwgJmJ1ZiwgJnJlY3QsIGNvbG9yKTsKPiA+PiArICAgICAgICAgICAgIGJy ZWFrOwo+ID4+ICsgICAgIGNhc2UgSUdUX0RSQVdfQkxUOgo+ID4+ICsgICAgICAgICAgICAgZHJh d19yZWN0X2JsdChmZCwgJmNtZF9kYXRhLCAmYnVmLCAmcmVjdCwgY29sb3IpOwo+ID4+ICsgICAg ICAgICAgICAgYnJlYWs7Cj4gPj4gKyAgICAgY2FzZSBJR1RfRFJBV19SRU5ERVI6Cj4gPj4gKyAg ICAgICAgICAgICBkcmF3X3JlY3RfcmVuZGVyKGZkLCAmY21kX2RhdGEsICZidWYsICZyZWN0LCBj b2xvcik7Cj4gPj4gKyAgICAgICAgICAgICBicmVhazsKPiA+PiArICAgICBkZWZhdWx0Ogo+ID4+ ICsgICAgICAgICAgICAgaWd0X2Fzc2VydChmYWxzZSk7Cj4gPj4gKyAgICAgICAgICAgICBicmVh azsKPiA+PiArICAgICB9Cj4gPj4gK30KPiA+PiArCj4gPj4gKy8qKgo+ID4+ICsgKiBpZ3RfZHJh d19yZWN0X2ZiOgo+ID4+ICsgKgo+ID4+ICsgKiBUaGlzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMg aWd0X2RyYXdfcmVjdCwgYnV0IHlvdSBjYW4gcGFzcyBhbiBpZ3RfZmIgaW5zdGVhZAo+ID4+ICsg KiBvZiBtYW51YWxseSBwcm92aWRpbmcgaXRzIGRldGFpbHMuIFNlZSBpZ3RfZHJhd19yZWN0Lgo+ ID4+ICsgKi8KPiA+PiArdm9pZCBpZ3RfZHJhd19yZWN0X2ZiKGludCBmZCwgZHJtX2ludGVsX2J1 Zm1nciAqYnVmbWdyLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgZHJtX2ludGVsX2NvbnRleHQg KmNvbnRleHQsIHN0cnVjdCBpZ3RfZmIgKmZiLAo+ID4+ICsgICAgICAgICAgICAgICAgICAgZW51 bSBpZ3RfZHJhd19tZXRob2QgbWV0aG9kLCBpbnQgcmVjdF94LCBpbnQgcmVjdF95LAo+ID4+ICsg ICAgICAgICAgICAgICAgICAgaW50IHJlY3RfdywgaW50IHJlY3RfaCwgdWludDMyX3QgY29sb3Ip Cj4gPj4gK3sKPiA+PiArICAgICBpZ3RfZHJhd19yZWN0KGZkLCBidWZtZ3IsIGNvbnRleHQsIGZi LT5nZW1faGFuZGxlLCBmYi0+c2l6ZSwgZmItPnN0cmlkZSwKPiA+PiArICAgICAgICAgICAgICAg ICAgIG1ldGhvZCwgcmVjdF94LCByZWN0X3ksIHJlY3RfdywgcmVjdF9oLCBjb2xvcik7Cj4gPj4g K30KPiA+PiArCj4gPj4gKy8qKgo+ID4+ICsgKiBpZ3RfZHJhd19maWxsX2ZiOgo+ID4+ICsgKiBA ZmQ6IHRoZSBEUk0gZmlsZSBkZXNjcmlwdG9yCj4gPj4gKyAqIEBmYjogdGhlIEZCIHRoYXQgaXMg Z29pbmcgdG8gYmUgZmlsbGVkCj4gPj4gKyAqIEBjb2xvcjogdGhlIGNvbG9yIHlvdSdyZSBnb2lu ZyB0byBwYWludCBpdAo+ID4+ICsgKgo+ID4+ICsgKiBUaGlzIGZ1bmN0aW9uIGp1c3QgcGFpbnRz IGFuIGlndF9mYiB1c2luZyB0aGUgcHJvdmlkZWQgY29sb3IuIEl0IGFzc3VtZXMgMzIKPiA+PiAr ICogYml0IHBpeGVscyB3aXRoIDggYml0IGNvbG9ycy4KPiA+PiArICovCj4gPj4gK3ZvaWQgaWd0 X2RyYXdfZmlsbF9mYihpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiLCB1aW50MzJfdCBjb2xvcikK PiA+PiArewo+ID4+ICsgICAgIGlndF9kcmF3X3JlY3RfZmIoZmQsIE5VTEwsIE5VTEwsIGZiLCBJ R1RfRFJBV19NTUFQX0dUVCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGZiLT53 aWR0aCwgZmItPmhlaWdodCwgY29sb3IpOwo+ID4+ICt9Cj4gPj4gZGlmZiAtLWdpdCBhL2xpYi9p Z3RfZHJhdy5oIGIvbGliL2lndF9kcmF3LmgKPiA+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4+ IGluZGV4IDAwMDAwMDAuLjM5OWUxN2MKPiA+PiAtLS0gL2Rldi9udWxsCj4gPj4gKysrIGIvbGli L2lndF9kcmF3LmgKPiA+PiBAQCAtMCwwICsxLDU0IEBACj4gPj4gKy8qCj4gPj4gKyAqIENvcHly aWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gPj4gKyAqCj4gPj4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCj4gPj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gPj4gKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KPiA+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBv ZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4+ICsg KiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zOgo+ID4+ICsgKgo+ID4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj ZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPj4gKyAq IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlh bCBwb3J0aW9ucyBvZiB0aGUKPiA+PiArICogU29mdHdhcmUuCj4gPj4gKyAqCj4gPj4gKyAqIFRI RSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBL SU5ELCBFWFBSRVNTIE9SCj4gPj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4+ICsgKiBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZF TlQgU0hBTEwKPiA+PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+PiArICogTElBQklMSVRZLCBX SEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJ TkcKPiA+PiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ID4+ICsgKiBJTiBUSEUgU09GVFdBUkUu Cj4gPj4gKyAqCj4gPj4gKyAqLwo+ID4+ICsKPiA+PiArI2lmbmRlZiBfX0lHVF9EUkFXX0hfXwo+ ID4+ICsjZGVmaW5lIF9fSUdUX0RSQVdfSF9fCj4gPj4gKwo+ID4+ICsjaW5jbHVkZSA8aW50ZWxf YnVmbWdyLmg+Cj4gPj4gKyNpbmNsdWRlICJpZ3RfZmIuaCIKPiA+PiArCj4gPgo+ID4gZ3RrZG9j IGZvciB0aGlzIGVudW0gd291bGQgYmUgbmljZSB0b28gSSB0aGluay4KPiAKPiBPay4KPiAKPiAK PiA+Cj4gPj4gK2VudW0gaWd0X2RyYXdfbWV0aG9kIHsKPiA+PiArICAgICBJR1RfRFJBV19NTUFQ X0NQVSwKPiA+PiArICAgICBJR1RfRFJBV19NTUFQX0dUVCwKPiA+PiArICAgICBJR1RfRFJBV19Q V1JJVEUsCj4gPj4gKyAgICAgSUdUX0RSQVdfQkxULAo+ID4+ICsgICAgIElHVF9EUkFXX1JFTkRF UiwKPiA+PiArICAgICBJR1RfRFJBV19NRVRIT0RfQ09VTlQsCj4gPj4gK307Cj4gPj4gKwo+ID4+ ICtjb25zdCBjaGFyICppZ3RfZHJhd19nZXRfbWV0aG9kX25hbWUoZW51bSBpZ3RfZHJhd19tZXRo b2QgbWV0aG9kKTsKPiA+PiArCj4gPj4gK3ZvaWQgaWd0X2RyYXdfcmVjdChpbnQgZmQsIGRybV9p bnRlbF9idWZtZ3IgKmJ1Zm1nciwgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCj4gPj4gKyAg ICAgICAgICAgICAgICB1aW50MzJfdCBidWZfaGFuZGxlLCB1aW50MzJfdCBidWZfc2l6ZSwgdWlu dDMyX3QgYnVmX3N0cmlkZSwKPiA+PiArICAgICAgICAgICAgICAgIGVudW0gaWd0X2RyYXdfbWV0 aG9kIG1ldGhvZCwgaW50IHJlY3RfeCwgaW50IHJlY3RfeSwKPiA+PiArICAgICAgICAgICAgICAg IGludCByZWN0X3csIGludCByZWN0X2gsIHVpbnQzMl90IGNvbG9yKTsKPiA+PiArCj4gPj4gK3Zv aWQgaWd0X2RyYXdfcmVjdF9mYihpbnQgZmQsIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKPiA+ PiArICAgICAgICAgICAgICAgICAgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LCBzdHJ1Y3Qg aWd0X2ZiICpmYiwKPiA+PiArICAgICAgICAgICAgICAgICAgIGVudW0gaWd0X2RyYXdfbWV0aG9k IG1ldGhvZCwgaW50IHJlY3RfeCwgaW50IHJlY3RfeSwKPiA+PiArICAgICAgICAgICAgICAgICAg IGludCByZWN0X3csIGludCByZWN0X2gsIHVpbnQzMl90IGNvbG9yKTsKPiA+PiArCj4gPj4gK3Zv aWQgaWd0X2RyYXdfZmlsbF9mYihpbnQgZmQsIHN0cnVjdCBpZ3RfZmIgKmZiLCB1aW50MzJfdCBj b2xvcik7Cj4gPj4gKwo+ID4+ICsjZW5kaWYgLyogX19JR1RfRFJBV19IX18gKi8KPiA+PiBkaWZm IC0tZ2l0IGEvbGliL3Rlc3RzLy5naXRpZ25vcmUgYi9saWIvdGVzdHMvLmdpdGlnbm9yZQo+ID4+ IGluZGV4IGE3NDVhMjMuLjg4ZjY2OGEgMTAwNjQ0Cj4gPj4gLS0tIGEvbGliL3Rlc3RzLy5naXRp Z25vcmUKPiA+PiArKysgYi9saWIvdGVzdHMvLmdpdGlnbm9yZQo+ID4+IEBAIC0xLDQgKzEsNSBA QAo+ID4+ICAjIFBsZWFzZSBrZWVwIHNvcnRlZCBhbHBoYWJldGljYWxseQo+ID4+ICtpZ3RfZHJh dwo+ID4+ICBpZ3RfZm9ya19oZWxwZXIKPiA+PiAgaWd0X2ludmFsaWRfc3VidGVzdF9uYW1lCj4g Pj4gIGlndF9saXN0X29ubHkKPiA+PiBkaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMgYi9saWIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4+IGluZGV4IGVjZDczYWUuLmZm NjZkOWQgMTAwNjQ0Cj4gPj4gLS0tIGEvbGliL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiA+PiAr KysgYi9saWIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ID4+IEBAIC0xLDQgKzEsNSBAQAo+ID4+ ICBjaGVja19QUk9HUkFNUyA9IFwKPiA+PiArICAgICBpZ3RfZHJhdyBcCj4gPj4gICAgICAgaWd0 X25vX2V4aXQgXAo+ID4+ICAgICAgIGlndF9ub19leGl0X2xpc3Rfb25seSBcCj4gPj4gICAgICAg aWd0X2ZvcmtfaGVscGVyIFwKPiA+PiBkaWZmIC0tZ2l0IGEvbGliL3Rlc3RzL2lndF9kcmF3LmMg Yi9saWIvdGVzdHMvaWd0X2RyYXcuYwo+ID4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPj4gaW5k ZXggMDAwMDAwMC4uMTYzMGNjMgo+ID4+IC0tLSAvZGV2L251bGwKPiA+PiArKysgYi9saWIvdGVz dHMvaWd0X2RyYXcuYwo+ID4+IEBAIC0wLDAgKzEsMjQ3IEBACj4gPj4gKy8qCj4gPj4gKyAqIENv cHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gPj4gKyAqCj4gPj4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCj4gPj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBk b2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gPj4gKyAqIHRvIGRlYWwgaW4g dGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0 YXRpb24KPiA+PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1 Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPj4gKyAqIGFuZC9vciBzZWxsIGNvcGll cyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ID4+ ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxv d2luZyBjb25kaXRpb25zOgo+ID4+ICsgKgo+ID4+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5v dGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gPj4g KyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFu dGlhbCBwb3J0aW9ucyBvZiB0aGUKPiA+PiArICogU29mdHdhcmUuCj4gPj4gKyAqCj4gPj4gKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCj4gPj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJ TUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4+ICsgKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKPiA+PiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiA+PiArICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFS SVNJTkcKPiA+PiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09G VFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ID4+ICsgKiBJTiBUSEUgU09GVFdB UkUuCj4gPj4gKyAqCj4gPj4gKyAqLwo+ID4+ICsKPiA+PiArLyogVGhpcyBwcm9ncmFtIHRlc3Rz IHdoZXRoZXIgdGhlIGlndF9kcmF3IGxpYnJhcnkgYWN0dWFsbHkgd29ya3MuICovCj4gPj4gKwo+ ID4+ICsjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ID4+ICsjaW5jbHVkZSAiaWd0X2F1eC5oIgo+ID4+ ICsjaW5jbHVkZSAiaWd0X2RyYXcuaCIKPiA+PiArI2luY2x1ZGUgImlndF9kZWJ1Z2ZzLmgiCj4g Pj4gKyNpbmNsdWRlICJpZ3RfZmIuaCIKPiA+PiArI2luY2x1ZGUgImlndF9rbXMuaCIKPiA+PiAr Cj4gPj4gKyNkZWZpbmUgTUFYX0NPTk5FQ1RPUlMgMzIKPiA+PiArCj4gPj4gK3N0cnVjdCBtb2Rl c2V0X3BhcmFtcyB7Cj4gPj4gKyAgICAgdWludDMyX3QgY3J0Y19pZDsKPiA+PiArICAgICB1aW50 MzJfdCBjb25uZWN0b3JfaWQ7Cj4gPj4gKyAgICAgZHJtTW9kZU1vZGVJbmZvUHRyIG1vZGU7Cj4g Pj4gK307Cj4gPj4gKwo+ID4+ICtpbnQgZHJtX2ZkOwo+ID4+ICtkcm1Nb2RlUmVzUHRyIGRybV9y ZXM7Cj4gPj4gK2RybU1vZGVDb25uZWN0b3JQdHIgZHJtX2Nvbm5lY3RvcnNbTUFYX0NPTk5FQ1RP UlNdOwo+ID4+ICtkcm1faW50ZWxfYnVmbWdyICpidWZtZ3I7Cj4gPj4gK2lndF9waXBlX2NyY190 ICpwaXBlX2NyYzsKPiA+PiArCj4gPj4gK2Jvb2wgaGFzX21ldGhvZF9iYXNlX2NyYyA9IGZhbHNl Owo+ID4+ICtpZ3RfY3JjX3QgbWV0aG9kX2Jhc2VfY3JjOwo+ID4+ICsKPiA+PiArc3RydWN0IG1v ZGVzZXRfcGFyYW1zIG1zOwo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgZmluZF9tb2Rlc2V0X3Bh cmFtcyh2b2lkKQo+ID4+ICt7Cj4gPj4gKyAgICAgaW50IGk7Cj4gPj4gKyAgICAgdWludDMyX3Qg Y29ubmVjdG9yX2lkID0gMCwgY3J0Y19pZDsKPiA+PiArICAgICBkcm1Nb2RlTW9kZUluZm9QdHIg bW9kZSA9IE5VTEw7Cj4gPj4gKwo+ID4+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBkcm1fcmVzLT5j b3VudF9jb25uZWN0b3JzOyBpKyspIHsKPiA+PiArICAgICAgICAgICAgIGRybU1vZGVDb25uZWN0 b3JQdHIgYyA9IGRybV9jb25uZWN0b3JzW2ldOwo+ID4+ICsKPiA+PiArICAgICAgICAgICAgIGlm IChjLT5jb3VudF9tb2Rlcykgewo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3Jf aWQgPSBjLT5jb25uZWN0b3JfaWQ7Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIG1vZGUgPSAm Yy0+bW9kZXNbMF07Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ID4+ICsgICAg ICAgICAgICAgfQo+ID4+ICsgICAgIH0KPiA+PiArICAgICBpZ3RfcmVxdWlyZShjb25uZWN0b3Jf aWQpOwo+ID4+ICsKPiA+PiArICAgICBjcnRjX2lkID0gZHJtX3Jlcy0+Y3J0Y3NbMF07Cj4gPj4g KyAgICAgaWd0X2Fzc2VydChjcnRjX2lkKTsKPiA+PiArICAgICBpZ3RfYXNzZXJ0KG1vZGUpOwo+ ID4+ICsKPiA+PiArICAgICBtcy5jb25uZWN0b3JfaWQgPSBjb25uZWN0b3JfaWQ7Cj4gPj4gKyAg ICAgbXMuY3J0Y19pZCA9IGNydGNfaWQ7Cj4gPj4gKyAgICAgbXMubW9kZSA9IG1vZGU7Cj4gPj4g Kwo+ID4+ICt9Cj4gPj4gKwo+ID4+ICtzdGF0aWMgdm9pZCBnZXRfbWV0aG9kX2NyYyhlbnVtIGln dF9kcmF3X21ldGhvZCBtZXRob2QsIHVpbnQ2NF90IHRpbGluZywKPiA+PiArICAgICAgICAgICAg ICAgICAgICAgICAgaWd0X2NyY190ICpjcmMpCj4gPj4gK3sKPiA+PiArICAgICBzdHJ1Y3QgaWd0 X2ZiIGZiOwo+ID4+ICsgICAgIGludCByYzsKPiA+PiArCj4gPj4gKyAgICAgaWd0X2NyZWF0ZV9m Yihkcm1fZmQsIG1zLm1vZGUtPmhkaXNwbGF5LCBtcy5tb2RlLT52ZGlzcGxheSwKPiA+PiArICAg ICAgICAgICAgICAgICAgIERSTV9GT1JNQVRfWFJHQjg4ODgsIHRpbGluZywgJmZiKTsKPiA+PiAr ICAgICBpZ3RfZHJhd19yZWN0X2ZiKGRybV9mZCwgYnVmbWdyLCBOVUxMLCAmZmIsIG1ldGhvZCwK PiA+PiArICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIGZiLndpZHRoLCBmYi5oZWlnaHQsIDB4 RkYpOwo+ID4+ICsKPiA+PiArICAgICBpZ3RfZHJhd19yZWN0X2ZiKGRybV9mZCwgYnVmbWdyLCBO VUxMLCAmZmIsIG1ldGhvZCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgIGZiLndpZHRoIC8g NCwgZmIuaGVpZ2h0IC8gNCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgIGZiLndpZHRoIC8g MiwgZmIuaGVpZ2h0IC8gMiwgMHhGRjAwKTsKPiA+PiArICAgICBpZ3RfZHJhd19yZWN0X2ZiKGRy bV9mZCwgYnVmbWdyLCBOVUxMLCAmZmIsIG1ldGhvZCwKPiA+PiArICAgICAgICAgICAgICAgICAg ICAgIGZiLndpZHRoIC8gOCwgZmIuaGVpZ2h0IC8gOCwKPiA+PiArICAgICAgICAgICAgICAgICAg ICAgIGZiLndpZHRoIC8gNCwgZmIuaGVpZ2h0IC8gNCwgMHhGRjAwMDApOwo+ID4+ICsgICAgIGln dF9kcmF3X3JlY3RfZmIoZHJtX2ZkLCBidWZtZ3IsIE5VTEwsICZmYiwgbWV0aG9kLAo+ID4+ICsg ICAgICAgICAgICAgICAgICAgICAgZmIud2lkdGggLyAyLCBmYi5oZWlnaHQgLyAyLAo+ID4+ICsg ICAgICAgICAgICAgICAgICAgICAgZmIud2lkdGggLyAzLCBmYi5oZWlnaHQgLyAzLCAweEZGMDBG Rik7Cj4gPj4gKwo+ID4+ICsgICAgIHJjID0gZHJtTW9kZVNldENydGMoZHJtX2ZkLCBtcy5jcnRj X2lkLCBmYi5mYl9pZCwgMCwgMCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgICAgICZtcy5j b25uZWN0b3JfaWQsIDEsIG1zLm1vZGUpOwo+ID4+ICsgICAgIGlndF9hc3NlcnQocmMgPT0gMCk7 Cj4gPj4gKwo+ID4+ICsgICAgIGlndF9kZWJ1Z193YWl0X2Zvcl9rZXlwcmVzcygiY3JjIik7Cj4g Pj4gKyAgICAgaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHBpcGVfY3JjLCBjcmMpOwo+ID4KPiA+ IFNob3VsZCB3ZSBqdXN0IG1vdmUgdGhpcyBpZ3RfZGVidWdfd2FpdF9mb3Jfa2V5cHJlc3MgaW50 bwo+ID4gaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjPwo+IAo+IEkgdGhpbmsgSSBwcmVmZXIgdG8g bGVhdmUgdGhlc2Ugb24gdGhlIHByb2dyYW1zIGJlY2F1c2UgeW91IGNhbiB0aGVuCj4gb3B0LW91 dCBvZiBzb21lIGNhc2VzIHN1Y2ggYXMgd2hlbiB5b3UncmUgZ2V0dGluZyB0aGUgcmVmZXJlbmNl IENSQ3MuCj4gSXQgZG9lc24ndCBodXJ0IHRvIGp1c3QgYWRkIHRoZXNlIHRvIHRoZSBwcm9ibGVt cywgYnV0IGl0IGNhbiBiZQo+IGFubm95aW5nIGlmIHRoZSB3YWl0IGlzIG9uIHRoZSBsaWIgYW5k IHlvdSBkb24ndCB3YW50IGl0LgoKd2FpdF9mb3Jfa2V5cHJlc3MgdGFrZXMgYSBrZXkgYXJndW1l bnQsIHNvIHdlIGNvdWxkIGp1c3QgdXNlIGEgImNyYyIga2V5LgpUZXN0IGNvdWxkIHRoZW4gdXNl IGEgImNoZWNrIiBvciBzaW1pbGFyICh3ZSBkb24ndCBoYXZlIGEgc3RhbmRhcmQgeWV0KSAtCmdl bmVyYWxseSB5b3UgZG9uJ3QgcmVhbGx5IHdhbnQgdG8gcnVuIHdpdGggLS1pbnRlcmFjdGl2ZS1k ZWJ1Zz1hbGwgYW55d2F5CnNpbmNlIHRoYXQgdGVuZHMgdG8gc3RvcCBhd2Z1bGx5IG9mdGVuIGFs cmVhZHkgOy0pIEFsc28geW91IGNhbiBsaXN0Cm11bHRpcGxlIGtleXdvcmRzLgoKU28gYW5ub3lp bmcgd2FpdHMgZnJvbSBsaWJyYXJpZXMgYXJlIGFscmVhZHkgdGFrZW4gY2FyZSBvZiwgbm8gaGFy bSBpbgphZGRpbmcgdGhlbS4KCj4gPj4gKwo+ID4+ICsgICAgIGttc3Rlc3RfdW5zZXRfYWxsX2Ny dGNzKGRybV9mZCwgZHJtX3Jlcyk7Cj4gPj4gKyAgICAgaWd0X3JlbW92ZV9mYihkcm1fZmQsICZm Yik7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyB2b2lkIGRyYXdfbWV0aG9kX3N1YnRlc3Qo ZW51bSBpZ3RfZHJhd19tZXRob2QgbWV0aG9kLCB1aW50NjRfdCB0aWxpbmcpCj4gPj4gK3sKPiA+ PiArICAgICBpZ3RfY3JjX3QgY3JjOwo+ID4+ICsKPiA+PiArICAgICBrbXN0ZXN0X3Vuc2V0X2Fs bF9jcnRjcyhkcm1fZmQsIGRybV9yZXMpOwo+ID4+ICsKPiA+PiArICAgICBmaW5kX21vZGVzZXRf cGFyYW1zKCk7Cj4gPj4gKwo+ID4+ICsgICAgIC8qIFVzZSBJR1RfRFJBV19NTUFQX0dUVCBvbiBh biB1bnRpbGVkIGJ1ZmZlciBhcyB0aGUgcGFyYW1ldGVyIGZvcgo+ID4+ICsgICAgICAqIGNvbXBh cmlzb24uIENhY2hlIHRoZSB2YWx1ZSBzbyB3ZSBkb24ndCByZWNvbXB1dGUgaXQgZm9yIGV2ZXJ5 IHNpbmdsZQo+ID4+ICsgICAgICAqIHN1YnRlc3QuICovCj4gPj4gKyAgICAgaWYgKCFoYXNfbWV0 aG9kX2Jhc2VfY3JjKSB7Cj4gPj4gKyAgICAgICAgICAgICBnZXRfbWV0aG9kX2NyYyhJR1RfRFJB V19NTUFQX0dUVCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwKPiA+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZtZXRob2RfYmFzZV9jcmMpOwo+ID4+ICsgICAgICAgICAgICAgaGFz X21ldGhvZF9iYXNlX2NyYyA9IHRydWU7Cj4gPj4gKyAgICAgfQo+ID4+ICsKPiA+PiArICAgICBn ZXRfbWV0aG9kX2NyYyhtZXRob2QsIHRpbGluZywgJmNyYyk7Cj4gPj4gKyAgICAgaWd0X2Fzc2Vy dF9jcmNfZXF1YWwoJmNyYywgJm1ldGhvZF9iYXNlX2NyYyk7Cj4gPj4gK30KPiA+PiArCj4gPj4g K3N0YXRpYyB2b2lkIGdldF9maWxsX2NyYyh1aW50NjRfdCB0aWxpbmcsIGlndF9jcmNfdCAqY3Jj KQo+ID4+ICt7Cj4gPj4gKyAgICAgc3RydWN0IGlndF9mYiBmYjsKPiA+PiArICAgICBpbnQgcmM7 Cj4gPj4gKwo+ID4+ICsgICAgIGlndF9jcmVhdGVfZmIoZHJtX2ZkLCBtcy5tb2RlLT5oZGlzcGxh eSwgbXMubW9kZS0+dmRpc3BsYXksCj4gPj4gKyAgICAgICAgICAgICAgICAgICBEUk1fRk9STUFU X1hSR0I4ODg4LCB0aWxpbmcsICZmYik7Cj4gPj4gKwo+ID4+ICsgICAgIGlndF9kcmF3X2ZpbGxf ZmIoZHJtX2ZkLCAmZmIsIDB4RkYpOwo+ID4+ICsKPiA+PiArICAgICByYyA9IGRybU1vZGVTZXRD cnRjKGRybV9mZCwgbXMuY3J0Y19pZCwgZmIuZmJfaWQsIDAsIDAsCj4gPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAmbXMuY29ubmVjdG9yX2lkLCAxLCBtcy5tb2RlKTsKPiA+PiArICAgICBp Z3RfYXNzZXJ0KHJjID09IDApOwo+ID4+ICsKPiA+PiArICAgICBpZ3RfZGVidWdfd2FpdF9mb3Jf a2V5cHJlc3MoImNyYyIpOwo+ID4+ICsgICAgIGlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhwaXBl X2NyYywgY3JjKTsKPiA+PiArCj4gPj4gKyAgICAga21zdGVzdF91bnNldF9hbGxfY3J0Y3MoZHJt X2ZkLCBkcm1fcmVzKTsKPiA+PiArICAgICBpZ3RfcmVtb3ZlX2ZiKGRybV9mZCwgJmZiKTsKPiA+ PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgZmlsbF9mYl9zdWJ0ZXN0KHZvaWQpCj4gPj4g K3sKPiA+PiArICAgICBpbnQgcmM7Cj4gPj4gKyAgICAgc3RydWN0IGlndF9mYiBmYjsKPiA+PiAr ICAgICBpZ3RfY3JjX3QgYmFzZV9jcmMsIGNyYzsKPiA+PiArCj4gPj4gKyAgICAga21zdGVzdF91 bnNldF9hbGxfY3J0Y3MoZHJtX2ZkLCBkcm1fcmVzKTsKPiA+PiArCj4gPj4gKyAgICAgZmluZF9t b2Rlc2V0X3BhcmFtcygpOwo+ID4+ICsKPiA+PiArICAgICBpZ3RfY3JlYXRlX2ZiKGRybV9mZCwg bXMubW9kZS0+aGRpc3BsYXksIG1zLm1vZGUtPnZkaXNwbGF5LAo+ID4+ICsgICAgICAgICAgICAg ICAgICAgRFJNX0ZPUk1BVF9YUkdCODg4OCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSwgJmZi KTsKPiA+PiArCj4gPj4gKyAgICAgaWd0X2RyYXdfcmVjdF9mYihkcm1fZmQsIGJ1Zm1nciwgTlVM TCwgJmZiLCBJR1RfRFJBV19NTUFQX0dUVCwKPiA+PiArICAgICAgICAgICAgICAgICAgICAgIDAs IDAsIGZiLndpZHRoLCBmYi5oZWlnaHQsIDB4RkYpOwo+ID4+ICsKPiA+PiArICAgICByYyA9IGRy bU1vZGVTZXRDcnRjKGRybV9mZCwgbXMuY3J0Y19pZCwgZmIuZmJfaWQsIDAsIDAsCj4gPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAmbXMuY29ubmVjdG9yX2lkLCAxLCBtcy5tb2RlKTsKPiA+ PiArICAgICBpZ3RfYXNzZXJ0KHJjID09IDApOwo+ID4+ICsKPiA+PiArICAgICBpZ3RfZGVidWdf d2FpdF9mb3Jfa2V5cHJlc3MoImNyYyIpOwo+ID4+ICsgICAgIGlndF9waXBlX2NyY19jb2xsZWN0 X2NyYyhwaXBlX2NyYywgJmJhc2VfY3JjKTsKPiA+PiArCj4gPj4gKyAgICAgZ2V0X2ZpbGxfY3Jj KExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsICZjcmMpOwo+ID4+ICsgICAgIGlndF9hc3NlcnRf Y3JjX2VxdWFsKCZjcmMsICZiYXNlX2NyYyk7Cj4gPj4gKwo+ID4+ICsgICAgIGdldF9maWxsX2Ny YyhMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwgJmNyYyk7Cj4gPj4gKyAgICAgaWd0X2Fz c2VydF9jcmNfZXF1YWwoJmNyYywgJmJhc2VfY3JjKTsKPiA+PiArCj4gPj4gKyAgICAga21zdGVz dF91bnNldF9hbGxfY3J0Y3MoZHJtX2ZkLCBkcm1fcmVzKTsKPiA+PiArICAgICBpZ3RfcmVtb3Zl X2ZiKGRybV9mZCwgJmZiKTsKPiA+PiArfQo+ID4+ICsKPiA+PiArc3RhdGljIHZvaWQgc2V0dXBf ZW52aXJvbm1lbnQodm9pZCkKPiA+PiArewo+ID4+ICsgICAgIGludCBpOwo+ID4+ICsKPiA+PiAr ICAgICBkcm1fZmQgPSBkcm1fb3Blbl9hbnlfbWFzdGVyKCk7Cj4gPj4gKyAgICAgaWd0X3JlcXVp cmUoZHJtX2ZkID49IDApOwo+ID4+ICsKPiA+PiArICAgICBkcm1fcmVzID0gZHJtTW9kZUdldFJl c291cmNlcyhkcm1fZmQpOwo+ID4+ICsgICAgIGlndF9hc3NlcnQoZHJtX3Jlcy0+Y291bnRfY29u bmVjdG9ycyA8PSBNQVhfQ09OTkVDVE9SUyk7Cj4gPj4gKwo+ID4+ICsgICAgIGZvciAoaSA9IDA7 IGkgPCBkcm1fcmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspCj4gPj4gKyAgICAgICAgICAgICBk cm1fY29ubmVjdG9yc1tpXSA9IGRybU1vZGVHZXRDb25uZWN0b3IoZHJtX2ZkLAo+ID4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRybV9yZXMt PmNvbm5lY3RvcnNbaV0pOwo+ID4+ICsKPiA+PiArICAgICBrbXN0ZXN0X3NldF92dF9ncmFwaGlj c19tb2RlKCk7Cj4gPj4gKwo+ID4+ICsgICAgIGJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2Vt X2luaXQoZHJtX2ZkLCA0MDk2KTsKPiA+PiArICAgICBpZ3RfYXNzZXJ0KGJ1Zm1ncik7Cj4gPj4g KyAgICAgZHJtX2ludGVsX2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGJ1Zm1ncik7Cj4gPj4gKwo+ ID4+ICsgICAgIHBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldygwLCBJTlRFTF9QSVBFX0NSQ19T T1VSQ0VfQVVUTyk7Cj4gPj4gK30KPiA+PiArCj4gPj4gK3N0YXRpYyB2b2lkIHRlYXJkb3duX2Vu dmlyb25tZW50KHZvaWQpCj4gPj4gK3sKPiA+PiArICAgICBpbnQgaTsKPiA+PiArCj4gPj4gKyAg ICAgaWd0X3BpcGVfY3JjX2ZyZWUocGlwZV9jcmMpOwo+ID4+ICsKPiA+PiArICAgICBkcm1faW50 ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKPiA+PiArCj4gPj4gKyAgICAgZm9yIChpID0gMDsg aSA8IGRybV9yZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykKPiA+PiArICAgICAgICAgICAgIGRy bU1vZGVGcmVlQ29ubmVjdG9yKGRybV9jb25uZWN0b3JzW2ldKTsKPiA+PiArCj4gPj4gKyAgICAg ZHJtTW9kZUZyZWVSZXNvdXJjZXMoZHJtX3Jlcyk7Cj4gPj4gKyAgICAgY2xvc2UoZHJtX2ZkKTsK PiA+PiArfQo+ID4+ICsKPiA+PiAraWd0X21haW4KPiA+PiArewo+ID4+ICsgICAgIGVudW0gaWd0 X2RyYXdfbWV0aG9kIG1ldGhvZDsKPiA+PiArCj4gPj4gKyAgICAgaWd0X2ZpeHR1cmUKPiA+PiAr ICAgICAgICAgICAgIHNldHVwX2Vudmlyb25tZW50KCk7Cj4gPj4gKwo+ID4+ICsgICAgIGZvciAo bWV0aG9kID0gMDsgbWV0aG9kIDwgSUdUX0RSQVdfTUVUSE9EX0NPVU5UOyBtZXRob2QrKykgewo+ ID4+ICsgICAgICAgICAgICAgaWd0X3N1YnRlc3RfZigiZHJhdy1tZXRob2QtJXMtdW50aWxlZCIs Cj4gPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGlndF9kcmF3X2dldF9tZXRob2RfbmFt ZShtZXRob2QpKQo+ID4+ICsgICAgICAgICAgICAgICAgICAgICBkcmF3X21ldGhvZF9zdWJ0ZXN0 KG1ldGhvZCwgTE9DQUxfRFJNX0ZPUk1BVF9NT0RfTk9ORSk7Cj4gPj4gKyAgICAgICAgICAgICBp Z3Rfc3VidGVzdF9mKCJkcmF3LW1ldGhvZC0lcy10aWxlZCIsCj4gPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgIGlndF9kcmF3X2dldF9tZXRob2RfbmFtZShtZXRob2QpKQo+ID4+ICsgICAg ICAgICAgICAgICAgICAgICBkcmF3X21ldGhvZF9zdWJ0ZXN0KG1ldGhvZCwKPiA+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMT0NBTF9JOTE1X0ZPUk1BVF9NT0Rf WF9USUxFRCk7Cj4gPj4gKyAgICAgfQo+ID4+ICsKPiA+PiArICAgICBpZ3Rfc3VidGVzdCgiZmls bC1mYiIpCj4gPj4gKyAgICAgICAgICAgICBmaWxsX2ZiX3N1YnRlc3QoKTsKPiA+PiArCj4gPj4g KyAgICAgaWd0X2ZpeHR1cmUKPiA+PiArICAgICAgICAgICAgIHRlYXJkb3duX2Vudmlyb25tZW50 KCk7Cj4gPj4gK30KPiA+PiAtLQo+ID4+IDIuMS40Cj4gPj4KPiA+PiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ID4+IEludGVsLWdmeCBtYWlsaW5nIGxp c3QKPiA+PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gPj4gaHR0cDovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo+ID4KPiA+IC0tCj4g PiBEYW5pZWwgVmV0dGVyCj4gPiBTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24K PiA+IGh0dHA6Ly9ibG9nLmZmd2xsLmNoCj4gCj4gCj4gCj4gLS0gCj4gUGF1bG8gWmFub25pCgot LSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0 cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0 b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK