From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8AC116E008 for ; Fri, 14 Sep 2018 08:56:09 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id a20-v6so6836963edd.4 for ; Fri, 14 Sep 2018 01:56:09 -0700 (PDT) Date: Fri, 14 Sep 2018 10:56:05 +0200 From: Daniel Vetter Message-ID: <20180914085605.GK11082@phenom.ffwll.local> References: <20180907155157.5798-1-gwan-gyeong.mun@intel.com> <20180907155157.5798-5-gwan-gyeong.mun@intel.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180907155157.5798-5-gwan-gyeong.mun@intel.com> Subject: Re: [igt-dev] [i-g-t,v4 4/4] kms_plane: Add clipping subtests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Gwan-gyeong Mun Cc: igt-dev@lists.freedesktop.org, juha-pekka.heikkila@intel.com List-ID: T24gRnJpLCBTZXAgMDcsIDIwMTggYXQgMDY6NTE6NTdQTSArMDMwMCwgR3dhbi1neWVvbmcgTXVu IHdyb3RlOgo+IEZyb206IEltcmUgRGVhayA8aW1yZS5kZWFrQGludGVsLmNvbT4KPiAKPiBBZGQg cGxhbmUgY2xpcHBpbmcgc3VidGVzdHMgZGlzcGxheWluZyBhIHNpbmdsZSBjbGlwcGVkIHBsYW5l LCB3aXRoIHRoZQo+IGZvbGxvd2luZyB0ZXN0IGNhc2VzOgo+IGEpIHBsYW5lIGNvdmVyaW5nIHRo ZSB3aG9sZSBzY3JlZW4sIHNvIHRoYXQgY2xpcHBpbmcgaXMgZG9uZSBhdCBhbGwgNAo+ICAgIHNj cmVlbiBlZGdlcwo+IGIpIHBsYW5lIGF0IGVpdGhlciBvZiB0aGUgNCBjb3JuZXJzIG9mIHRoZSBz Y3JlZW4gY2xpcHBlZCwgc28gdGhhdCBhCj4gICAgNHg0IHBpeGVsIHBhcnQgb2YgdGhlIHBsYW5l IGlzIHZpc2libGUKPiBjKSBwbGFuZSBhdCBlaXRoZXIgb2YgdGhlIDQgY29ybmVycyBvZiB0aGUg c2NyZWVuIGNsaXBwZWQsIHNvIHRoYXQgYQo+ICAgIDJ4MiBwaXhlbCBwYXJ0IG9mIHRoZSBwbGFu ZSBpcyB2aXNpYmxlCj4gCj4gRWFjaCBvZiB0aGUgYWJvdmUgY2FzZXMgYXJlIHRlc3RlZCB3aXRo IGFsbCBzdXBwb3J0ZWQgdGlsaW5nIG1vZGVzLAo+IHJvdGF0aW9uIGRlZ3JlZXMsIGRpZmZlcmlu ZyBwaXhlbCBmb3JtYXQgc2l6ZXMgKG9ubHkgMTYgYnBwIGFuZCAzMiBicHAKPiBmb3Igbm93KSBh bmQgY2VydGFpbiBwbGFuZXMuIFdoaWxlIHRoZSBhKSBhbmQgYikgY2FzZXMgYWJvdmUgYXJlCj4g c3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMgYykgaXMgbm90IGZ1bGx5IHN1cHBvcnRlZCBvbiBH TEsgYW5kIENOTAo+ICh3aGljaCB3YXMgdGhlIHByaW1hcnkgbW90aXZhdGlvbiBmb3IgdGhpcyB0 ZXN0Y2FzZSkuCj4gCj4gdjI6Cj4gLSBBZGQgbWlzc2luZyByZXNldCBmb3IgdGhlIG91dHB1dCBw aXBlIGFmdGVyIGZpbmlzaGluZyB0aGUgdGVzdCBmb3IgYQo+ICAgZ2l2ZW4gb3V0cHV0LCBmaXhp bmcgdGhlCj4gICAiRFAtMSBhbmQgZURQLTEgYXJlIGJvdGggdHJ5aW5nIHRvIHVzZSBwaXBlIEEi IHR5cGUgb2YgZXJyb3JzLgo+IC0gVXNlIC1FUkFOR0UgaW5zdGVhZCBvZiAtRUlOVkFMIHRvIGNo ZWNrIHRoZSByZXR1cm4gY29kZSBmb3IKPiAgIHVuc3VwcG9ydGVkIHBsYW5lIFggcG9zaXRpb25z LCBiYXNlZCBvbiB0aGUgbGF0ZXN0IGtlcm5lbCBjb2RlLgo+IC0gQWRkIGNvbW1lbnQgZXhwbGFp bmluZyB0aGUgZGVwZW5kZW5jaWVzIHdoZW4gZG9pbmcgYSB1bml2ZXJzYWwKPiAgIGNvbW1pdC4K PiAKPiB2MzogKEd3YW4tZ3llb25nKQo+IC0gQWRkIG1pc3NpbmcgcmVsZWFzZSBvZiBmcmFtZWJ1 ZmZlciBvbiBjcmVhdGVfZmJfZm9yX21vZGVfX2NsaXBwaW5nX2Rpc3BsYXkoKQo+ICAgZnVuY3Rp b24uCj4gLSBBZGQgdXNpbmcgbXVsdGkgcGxhbmVzIHBlciBzaW5nbGUgZGlzcGxheSBjb21taXQg b24gY2xpcHBpbmcgdGVzdCBvZgo+ICAgNCBjb3JuZXJzLiAoRGFuaWVsKQo+ICAgSXQgZW5hYmxl cyB0aGUgaW1wcm92aW5nIG9mIHRlc3Qgc3BlZWQuIElmIG51bWJlciBvZiBwbGFuZXMgaXMgb3Zl cgo+ICAgdGhhbiA0LCBpdCB1c2VzIGZvdXIgcGxhbmVzIGZyb20gZmlyc3QgcGxhbmUgdG8gbmV4 dCBmb3VyIHBsYW5lcy4KPiAgICg0IHBsYW5lcyBtYWtlIHRlc3Rpbmcgb2YgNCBjb3JuZXJzIHBv c3NpYmxlIGFzIDEgZGlzcGxheSBjb21taXQuKQo+ICAgSWYgbnVtYmVyIG9mIHBsYW5lcyBpcyBv dmVyIHRoYW4gMiBhbmQgbGVzcyB0aGFuIDQsIGl0IHVzZXMgdHdvIHBsYW5lcwo+ICAgZnJvbSBm aXJzdCBwbGFuZSB0byBuZXh0IHR3byBwbGFuZXMuICgyIHBsYW5lcyBtYWtlIHRlc3Rpbmcgb2Yg NCBjb3JuZXJzCj4gICBwb3NzaWJsZSBhcyAyIGRpc3BsYXkgY29tbWl0LikgUmVzdCBvZiBjYXNl cyBpdCB1c2VzIG9ubHkgZmlyc3QgcGxhbmUuCj4gICAoMSBwbGFuZSBtYWtlcyB0ZXN0aW5nIG9m IDQgY29ybmVycyBwb3NzaWJsZSBhcyA0IGRpc3BsYXkgY29tbWl0LikKPiAgIEl0IGNoYW5nZXMg dG8gdXNpbmcgb2YgY2VydGFpbiBwbGFuZXMgZnJvbSB1c2luZyBvZiBhbGwgc3VwcG9ydGVkIHBs YW5lcy4KPiAgIEFuZCBhIGN1cnNvciBwbGFuZSBjYW4gYmUgb25lIG9mIHRlc3QgcGxhbmVzLgo+ IAo+IHY0OiAoSW1yZSkKPiAtIENoYW5nZSBhIGNvbW1pdCBzdHlsZSB0byBsZWdhY3kgZnJvbSB1 bml2ZXJzYWwgd2hlbiB0aGlzIGdyYWJzIGEgY3JjIGZvcgo+ICAgZnJhbWVidWZmZXIuIFRoZSB1 bml2ZXJzYWwgY29tbWl0IGhhcyBpc3N1ZXMgd2l0aCBtdWx0aXBsZSBvdXRwdXRzLiBBcwo+ICAg dGhlIGxlZ2FjeSBzdHlsZSBjb21taXQgZG9lcyBub3QgYWxsb3cgY2hhbmdpbmcgb2YgcHJpbWFy eSBwbGFuZSByb3RhdGlvbgo+ICAgb24gbm9uLWZpcnN0IGNvbW1pdCwgdGhpcyBjYWxscyBpZ3Rf ZGlzcGxheV9yZXNldCgpIHRvIG1ha2UgYSBmaXJzdAo+ICAgY29tbWl0IHN0YXRlIHByaW9yIHRv IGNhbGwgdGVzdF9ncmFiX2NyY19mb3JfZmIoKS4KCkp1c3QgYW4gYXNpZGU6IFdoeSBub3QgYXRv bWljPyBBdG9taWMgc2hvdWxkIGJlIGEgbm90Y2ggZmFzdGVyIHN0aWxsLApzaW5jZSBpdCBhcHBs aWVzIGFsbCB0aGUgY2hhbmdlcyBpbiBvbmUgZ28uCgpJIHRoaW5rIHdlIHNob3VsZCBhbHNvIGhh dmUgYSBub24tY29tbWl0dGluZyB2ZXJzaW9uIG9mCmlndF9kaXNwbGF5X3Jlc2V0KCksIHRvIGN1 dCBhd2F5IGV2ZW4gbW9yZSBtb2Rlc2V0cy4KCkFsc28sIGlzIHRoZSBwbGFuIHRvIHJlbW92ZSB0 aGUgY29ycmVzcG9uZGluZyBjdXJzb3IgdGVzdHM/Cgo+IC0gVXBkYXRlIHZhcmlhYmxlIG5hbWlu ZyBtb3JlIGNsZWFybHkKPiAgIGNsaXBfc3F1YXJlc19jbnQgLT4gcGxhbmVfY250Cj4gLSBPcHRp bWl6ZSB0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZXMoKSBmdW5jdGlvbgo+IC0gVXBkYXRlIGlu ZGVudGF0aW9uIGFzIGtlcm5lbCBzdHlsZQo+IAo+IFNpZ25lZC1vZmYtYnk6IEltcmUgRGVhayA8 aW1yZS5kZWFrQGludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBHd2FuLWd5ZW9uZyBNdW4gPGd3 YW4tZ3llb25nLm11bkBpbnRlbC5jb20+Cj4gQ2M6IE1pa2EgS2Fob2xhIDxtaWthLmthaG9sYUBp bnRlbC5jb20+Cj4gQ2M6IE1hYXJ0ZW4gTGFua2hvcnN0IDxtYWFydGVuLmxhbmtob3JzdEBsaW51 eC5pbnRlbC5jb20+Cj4gQ2M6IEp1aGEtUGVra2EgSGVpa2tpbMOkIDxqdWhhLXBla2thLmhlaWtr aWxhQGludGVsLmNvbT4KPiBSZXZpZXdlZC1ieTogQXJrYWRpdXN6IEhpbGVyIDxhcmthZGl1c3ou aGlsZXJAaW50ZWwuY29tPiAodjEpCj4gLS0tCj4gIHRlc3RzL2ttc19wbGFuZS5jIHwgNTE2ICsr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgMSBmaWxlIGNo YW5nZWQsIDUxNiBpbnNlcnRpb25zKCspCj4gCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2ttc19wbGFu ZS5jIGIvdGVzdHMva21zX3BsYW5lLmMKPiBpbmRleCAzZjQ4YzgyMS4uYWM0NzUzNTggMTAwNjQ0 Cj4gLS0tIGEvdGVzdHMva21zX3BsYW5lLmMKPiArKysgYi90ZXN0cy9rbXNfcGxhbmUuYwo+IEBA IC00MSwxMSArNDEsNDAgQEAgdHlwZWRlZiBzdHJ1Y3Qgewo+ICAJaW50IGRybV9mZDsKPiAgCWln dF9kaXNwbGF5X3QgZGlzcGxheTsKPiAgCWlndF9waXBlX2NyY190ICpwaXBlX2NyYzsKPiArCXVp bnQzMl90IGRldmlkOwo+ICsJdWludDY0X3QgbWF4X2N1cnc7Cj4gKwl1aW50NjRfdCBtYXhfY3Vy aDsKPiAgfSBkYXRhX3Q7Cj4gIAo+ICt0eXBlZGVmIHN0cnVjdCB7Cj4gKwlpbnQgeDsKPiArCWlu dCB5Owo+ICsJaW50IHNpemU7Cj4gK30gc3F1YXJlX3Q7Cj4gKwo+ICBzdGF0aWMgY29sb3JfdCBy ZWQgICA9IHsgMS4wZiwgMC4wZiwgMC4wZiB9Owo+ICBzdGF0aWMgY29sb3JfdCBncmVlbiA9IHsg MC4wZiwgMS4wZiwgMC4wZiB9Owo+ICtzdGF0aWMgY29sb3JfdCB5ZWxsb3cgPSB7IDEuMGYsIDEu MGYsIDAuMGYgfTsKPiAgc3RhdGljIGNvbG9yX3QgYmx1ZSAgPSB7IDAuMGYsIDAuMGYsIDEuMGYg fTsKPiArc3RhdGljIGNvbG9yX3Qgd2hpdGUgPSB7IDEuMGYsIDEuMGYsIDEuMGYgfTsKPiArc3Rh dGljIHNxdWFyZV90IGNsaXBfc3F1YXJlc1s0XTsKPiArCj4gKy8qCj4gKyAqIFNpemUgb2YgYSBz cXVhcmUgcGxhbmUgdXNlZCB0byB0ZXN0IGNsaXBwaW5nIGF0IHRoZSA0IGNvdXJuZXJzIG9mIHRo ZQo+ICsgKiBkaXNwbGF5Lgo+ICsgKi8KPiArI2RlZmluZSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJ WkUJNjQKPiArCj4gKy8qCj4gKyAqIFZpc2libGUgcGxhbmUgc2l6ZSBhZnRlciBjbGlwcGluZyB0 aGF0IHdvcmtzIG9uIGFsbCBwbGF0Zm9ybXMgZm9yIGFsbCBwbGFuZQo+ICsgKiBwb3NpdGlvbnMu Cj4gKyAqIFRoZSBleGNlcHRpb25zIGFyZSBHTEsvQ05MIHdoZXJlIHRoZXJlIG11c3QgYmUgYXQg bGVhc3QgdGhpcyBtYW55IHBpeGVscwo+ICsgKiB2aXNpYmxlIGZyb20gdGhlIHBsYW5lIGFmdGVy IGl0J3MgY2xpcHBlZCB0byB0aGUgbGVmdC9yaWdodCBlZGdlIG9mIHRoZQo+ICsgKiBzY3JlZW4u IE5vdCBtZWV0aW5nIHRoaXMgY29uZGl0aW9uIG1heSB0cmlnZ2VyIEZJRk8gdW5kZXJmbG93cyBh bmQgc2NyZWVuCj4gKyAqIGNvcnJ1cHRpb24uIFRoZSBjdXJzb3IgcGxhbmUgaXMgYW4gZXhjZXB0 aW9uIHRoYXQgZG9lc24ndCBoYXZlIHRoaXMgcHJvYmxlbQo+ICsgKiBldmVuIG9uIEdMSy9DTkwu Cj4gKyAqLwo+ICsjZGVmaW5lIENMSVBQRURfUExBTkVfTUlOX1ZBTElECQk0Cj4gIAo+ICAvKgo+ ICAgKiBDb21tb24gY29kZSBhY3Jvc3MgYWxsIHRlc3RzLCBhY3Rpbmcgb24gZGF0YV90Cj4gQEAg LTE0Miw2ICsxNzEsNjkgQEAgY3JlYXRlX2ZiX2Zvcl9tb2RlX19wb3NpdGlvbihkYXRhX3QgKmRh dGEsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSwKPiAgCWlndF9wdXRfY2Fpcm9fY3R4KGRhdGEtPmRy bV9mZCwgZmIsIGNyKTsKPiAgfQo+ICAKPiArLyoKPiArICogQ3JlYXRlIGEgc3F1YXJlIEZCIGZv ciB0aGUgcGxhbmUgaW4gdGhlIGNsaXBwaW5nIHRlc3QsIGRpdmlkZWQgaW50byA0Cj4gKyAqIHF1 YXJ0ZXJzIHNvbGlkIGZpbGxlZCB3aXRoIGRpZmZlcmVudCBjb2xvcnMuIFVzZSB0aGUgZ2l2ZW4g dGlsaW5nLCBmb3JtYXQKPiArICogYW5kIHNpemUgYW5kIHJvdGF0ZSB0aGUgRkIgY2xvY2t3aXNl IHdpdGggdGhlIGdpdmVuIHJvdGF0aW9uIGRlZ3JlZXMsIHNvCj4gKyAqIHRoYXQgdGhlIGNvdW50 ZXJjbG9ja3dpc2Ugcm90YXRpb24gd2l0aCB0aGUgc2FtZSBkZWdyZWVzIGRvbmUgYnkgdGhlIEhX Cj4gKyAqIHdpbGwgYWx3YXlzIHJlc3VsdCBpbiB0aGUgc2FtZSByZWZlcmVuY2UgRkIgaW1hZ2Uu Cj4gKyAqLwo+ICtzdGF0aWMgdm9pZAo+ICtjcmVhdGVfZmJfZm9yX21vZGVfX2NsaXBwaW5nX3Bs YW5lKGRhdGFfdCAqZGF0YSwgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCj4gKwkJCQkgICB1aW50 NjRfdCB0aWxpbmcsCj4gKwkJCQkgICB1aW50MzJfdCBmb3JtYXQsCj4gKwkJCQkgICBpbnQgc2l6 ZSwKPiArCQkJCSAgIHN0cnVjdCBpZ3RfZmIgKmZiIC8qIG91dCAqLykKPiArewo+ICsJY29sb3Jf dCBjb3JuZXJzW10gPSB7IHJlZCwgd2hpdGUsIHllbGxvdywgYmx1ZSB9Owo+ICsJY29sb3JfdCBj b2xvcjsKPiArCXVuc2lnbmVkIGludCBmYl9pZDsKPiArCWNhaXJvX3QgKmNyOwo+ICsJY29uc3Qg aW50IHFzaXplID0gc2l6ZSAvIDI7Cj4gKwlpbnQgaWR4Owo+ICsKPiArCWZiX2lkID0gaWd0X2Ny ZWF0ZV9mYihkYXRhLT5kcm1fZmQsIHNpemUsIHNpemUsIGZvcm1hdCwgdGlsaW5nLCBmYik7Cj4g KwlpZ3RfYXNzZXJ0KGZiX2lkKTsKPiArCj4gKwljciA9IGlndF9nZXRfY2Fpcm9fY3R4KGRhdGEt PmRybV9mZCwgZmIpOwo+ICsKPiArCXN3aXRjaCAocm90YXRpb24pIHsKPiArCWNhc2UgSUdUX1JP VEFUSU9OXzA6Cj4gKwkJaWR4ID0gMDsKPiArCQlicmVhazsKPiArCWNhc2UgSUdUX1JPVEFUSU9O XzkwOgo+ICsJCWlkeCA9IDM7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIElHVF9ST1RBVElPTl8xODA6 Cj4gKwkJaWR4ID0gMjsKPiArCQlicmVhazsKPiArCWNhc2UgSUdUX1JPVEFUSU9OXzI3MDoKPiAr CQlpZHggPSAxOwo+ICsJCWJyZWFrOwo+ICsJZGVmYXVsdDoKPiArCQlpZ3RfYXNzZXJ0KDApOwo+ ICsJfQo+ICsKPiArCWNvbG9yID0gY29ybmVyc1tpZHhdOwo+ICsJaWd0X3BhaW50X2NvbG9yKGNy LCAwLCAwLCBxc2l6ZSwgcXNpemUsCj4gKwkJCWNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9y LmJsdWUpOwo+ICsKPiArCWNvbG9yID0gY29ybmVyc1soKytpZHgpICUgNF07Cj4gKwlpZ3RfcGFp bnRfY29sb3IoY3IsIHFzaXplLCAwLCBxc2l6ZSwgcXNpemUsCj4gKwkJCWNvbG9yLnJlZCwgY29s b3IuZ3JlZW4sIGNvbG9yLmJsdWUpOwo+ICsKPiArCWNvbG9yID0gY29ybmVyc1soKytpZHgpICUg NF07Cj4gKwlpZ3RfcGFpbnRfY29sb3IoY3IsIHFzaXplLCBxc2l6ZSwgcXNpemUsIHFzaXplLAo+ ICsJCQljb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsKPiArCj4gKwljb2xvciA9 IGNvcm5lcnNbKCsraWR4KSAlIDRdOwo+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCBxc2l6ZSwg cXNpemUsIHFzaXplLAo+ICsJCQljb2xvci5yZWQsIGNvbG9yLmdyZWVuLCBjb2xvci5ibHVlKTsK PiArCj4gKwlpZ3RfYXNzZXJ0KGNhaXJvX3N0YXR1cyhjcikgPT0gMCk7Cj4gKwljYWlyb19kZXN0 cm95KGNyKTsKPiArfQo+ICsKPiAgZW51bSB7Cj4gIAlURVNUX1BPU0lUSU9OX0ZVTExZX0NPVkVS RUQgPSAxIDw8IDAsCj4gIAlURVNUX0RQTVMgPSAxIDw8IDEsCj4gQEAgLTU0NSw2ICs2MzcsNDE0 IEBAIHRlc3RfcGl4ZWxfZm9ybWF0cyhkYXRhX3QgKmRhdGEsIGVudW0gcGlwZSBwaXBlKQo+ICAJ fQo+ICB9Cj4gIAo+ICtzdGF0aWMgYm9vbAo+ICtib2d1c19wbGFuZV9jb25mKHVpbnQzMl90IGRl dmlkLCBpZ3RfcGxhbmVfdCAqcGxhbmVfb2JqLAo+ICsJCSBpbnQgaGRpc3BsYXksIGludCBwbGFu ZV94LCBpbnQgcGxhbmVfd2lkdGgpCj4gK3sKPiArCWlmICghKElTX0dFTUlOSUxBS0UoZGV2aWQp IHx8IElTX0NBTk5PTkxBS0UoZGV2aWQpKSkKPiArCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJaWYg KHBsYW5lX29iai0+dHlwZSA9PSBEUk1fUExBTkVfVFlQRV9DVVJTT1IpCj4gKwkJcmV0dXJuIGZh bHNlOwo+ICsKPiArCWlmIChwbGFuZV94ICsgcGxhbmVfd2lkdGggPj0gQ0xJUFBFRF9QTEFORV9N SU5fVkFMSUQgJiYKPiArCSAgICBwbGFuZV94IDw9IGhkaXNwbGF5IC0gQ0xJUFBFRF9QTEFORV9N SU5fVkFMSUQpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgYm9vbAo+ICtzdXBwb3J0ZWRfcGxhbmVfY29uZihkYXRhX3QgKmRhdGEsIGlu dCBwbGFuZV90eXBlLCB1aW50NjRfdCB0aWxpbmcsCj4gKwkJICAgICB1aW50MzJfdCBmb3JtYXQs IGlndF9yb3RhdGlvbl90IHJvdGF0aW9uLAo+ICsJCSAgICAgZHJtTW9kZU1vZGVJbmZvICptb2Rl LAo+ICsJCSAgICAgaW50IHBsYW5lX3gsIGludCBwbGFuZV95LCBpbnQgcGxhbmVfc2l6ZSkKPiAr ewo+ICsJaWYgKGludGVsX2dlbihkYXRhLT5kZXZpZCkgPCA5ICYmCj4gKwkgICAgdGlsaW5nICE9 IExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCS8q IE9uIEdFTjw5IHRoZSBwcmltYXJ5IHBsYW5lIG11c3QgY292ZXIgdGhlIGZ1bGwgc2NyZWVuLiAq Lwo+ICsJaWYgKGludGVsX2dlbihkYXRhLT5kZXZpZCkgPCA5ICYmCj4gKwkgICAgcGxhbmVfdHlw ZSA9PSBEUk1fUExBTkVfVFlQRV9QUklNQVJZICYmCj4gKwkgICAgKHBsYW5lX3ggPiAwIHx8IHBs YW5lX3kgPiAwIHx8Cj4gKwkgICAgIChwbGFuZV94ICsgcGxhbmVfc2l6ZSA8IG1vZGUtPmhkaXNw bGF5KSB8fAo+ICsJICAgICAocGxhbmVfeSArIHBsYW5lX3NpemUgPCBtb2RlLT52ZGlzcGxheSkp KQo+ICsJCXJldHVybiBmYWxzZTsKPiArCj4gKwlpZiAocGxhbmVfdHlwZSA9PSBEUk1fUExBTkVf VFlQRV9DVVJTT1IpIHsKPiArCQkvKiBGb3IgY3Vyc29yIHBsYW5lcyBvbmx5IGxpbmVhci9hbHBo YSBmb3JtYXQgaXMgc3VwcG9ydGVkLiAqLwo+ICsJCWlmICh0aWxpbmcgIT0gTE9DQUxfRFJNX0ZP Uk1BVF9NT0RfTk9ORSB8fAo+ICsJCSAgICBmb3JtYXQgIT0gRFJNX0ZPUk1BVF9BUkdCODg4OCkK PiArCQkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCQlpZiAocGxhbmVfc2l6ZSA+IGRhdGEtPm1heF9j dXJ3IHx8IHBsYW5lX3NpemUgPiBkYXRhLT5tYXhfY3VyaCkKPiArCQkJcmV0dXJuIGZhbHNlOwo+ ICsJfSBlbHNlIHsKPiArCQkvKgo+ICsJCSAqIEZvciBub24tY3Vyc29yIHBsYW5lcyBmb3JtYXRz IHdpdGggYWxwaGEgbWF5IHJlc3VsdCBpbgo+ICsJCSAqIHVuZGV0ZXJtaW5pc3RpYyBDUkNzLCB3 ZSB1c2UgdGhlIHNhbWUgc2l6ZWQKPiArCQkgKiBub24tYWxwaGEgWFJHQjg4ODggZm9ybWF0IGlu c3RlYWQuCj4gKwkJICovCj4gKwkJaWYgKGZvcm1hdCA9PSBEUk1fRk9STUFUX0FSR0I4ODg4KQo+ ICsJCQlyZXR1cm4gZmFsc2U7Cj4gKwo+ICsJCWlmIChmb3JtYXQgPT0gRFJNX0ZPUk1BVF9SR0I1 NjUgJiYKPiArCQkgICAgaW50ZWxfZ2VuKGRhdGEtPmRldmlkKSA8IDkgJiYKPiArCQkgICAgIUlT X1ZBTExFWVZJRVcoZGF0YS0+ZGV2aWQpICYmICFJU19DSEVSUllWSUVXKGRhdGEtPmRldmlkKSkK PiArCQkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsKPiArCS8qIFJHQjU2NSB3aXRoIHJvdGF0aW9u IGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4gKi8KPiArCWlmIChmb3JtYXQgPT0gRFJNX0ZPUk1B VF9SR0I1NjUgJiYgcm90YXRpb24gIT0gSUdUX1JPVEFUSU9OXzApCj4gKwkJcmV0dXJuIGZhbHNl Owo+ICsKPiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBDcmVhdGUgYSBzcXVh cmUgcmVmZXJlbmNlIEZCIGZvciB0aGUgd2hvbGUgc2NyZWVuIGluIHRoZSBjbGlwcGluZyB0ZXN0 LAo+ICsgKiB3aXRoIHRoZSBnaXZlbiB0ZXN0IHBsYW5lIHBvc2l0aW9uIGFuZCBzaXplLiBTZWUK PiArICogY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19wbGFuZSgpIGZvciB0aGUgbGF5b3V0 IG9mIHRoZSB0ZXN0IHBsYW5lLgo+ICsgKi8KPiArc3RhdGljIHZvaWQKPiArY3JlYXRlX2ZiX2Zv cl9tb2RlX19jbGlwcGluZ19kaXNwbGF5KGRhdGFfdCAqZGF0YSwgZHJtTW9kZU1vZGVJbmZvICpt b2RlLAo+ICsJCQkJICAgICBzcXVhcmVfdCAqY2xpcF9zcXVhcmVzLAo+ICsJCQkJICAgICBpbnQg cGxhbmVfY250LAo+ICsJCQkJICAgICBzdHJ1Y3QgaWd0X2ZiICpmYiAvKiBvdXQgKi8pCj4gK3sK PiArCWludCBwbGFuZTsKPiArCXN0cnVjdCBpZ3RfZmIgcGxhbmVfZmJzWzRdOwo+ICsJdW5zaWdu ZWQgaW50IGZiX2lkOwo+ICsJY2Fpcm9fdCAqY3I7Cj4gKwljYWlyb19zdXJmYWNlX3QgKnNyY3Nb NF07Cj4gKwo+ICsJZmJfaWQgPSBpZ3RfY3JlYXRlX2ZiKGRhdGEtPmRybV9mZCwKPiArCQkJICAg ICAgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAo+ICsJCQkgICAgICBEUk1fRk9STUFU X1hSR0I4ODg4LAo+ICsJCQkgICAgICBMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAo+ICsJCQkg ICAgICBmYik7Cj4gKwlpZ3RfYXNzZXJ0KGZiX2lkKTsKPiArCj4gKwljciA9IGlndF9nZXRfY2Fp cm9fY3R4KGRhdGEtPmRybV9mZCwgZmIpOwo+ICsJaWd0X3BhaW50X2NvbG9yKGNyLCAwLCAwLCBt b2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXksCj4gKwkJCTAsIDAsIDApOwo+ICsKPiArCWZv ciAocGxhbmUgPSAwOyBwbGFuZSA8IHBsYW5lX2NudDsgcGxhbmUrKykgewo+ICsJCWNyZWF0ZV9m Yl9mb3JfbW9kZV9fY2xpcHBpbmdfcGxhbmUoZGF0YSwgSUdUX1JPVEFUSU9OXzAsCj4gKwkJCQkJ CSAgIExPQ0FMX0RSTV9GT1JNQVRfTU9EX05PTkUsCj4gKwkJCQkJCSAgIERSTV9GT1JNQVRfWFJH Qjg4ODgsCj4gKwkJCQkJCSAgIGNsaXBfc3F1YXJlc1twbGFuZV0uc2l6ZSwKPiArCQkJCQkJICAg JnBsYW5lX2Zic1twbGFuZV0pOwo+ICsKPiArCQlzcmNzW3BsYW5lXSA9IGlndF9nZXRfY2Fpcm9f c3VyZmFjZShkYXRhLT5kcm1fZmQsCj4gKwkJCQkJCSAgICZwbGFuZV9mYnNbcGxhbmVdKTsKPiAr CQljYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY3IsIHNyY3NbcGxhbmVdLAo+ICsJCQkJCSBjbGlw X3NxdWFyZXNbcGxhbmVdLngsCj4gKwkJCQkJIGNsaXBfc3F1YXJlc1twbGFuZV0ueSk7Cj4gKwkJ Y2Fpcm9fcmVjdGFuZ2xlKGNyLAo+ICsJCQkJY2xpcF9zcXVhcmVzW3BsYW5lXS54LAo+ICsJCQkJ Y2xpcF9zcXVhcmVzW3BsYW5lXS55LAo+ICsJCQkJY2xpcF9zcXVhcmVzW3BsYW5lXS5zaXplLAo+ ICsJCQkJY2xpcF9zcXVhcmVzW3BsYW5lXS5zaXplKTsKPiArCQljYWlyb19maWxsKGNyKTsKPiAr CX0KPiArCj4gKwlpZ3RfYXNzZXJ0KGNhaXJvX3N0YXR1cyhjcikgPT0gMCk7Cj4gKwljYWlyb19k ZXN0cm95KGNyKTsKPiArCj4gKwlmb3IgKHBsYW5lID0gMDsgcGxhbmUgPCBwbGFuZV9jbnQ7IHBs YW5lKyspIHsKPiArCQljYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3Jjc1twbGFuZV0pOwo+ICsJCWln dF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAmcGxhbmVfZmJzW3BsYW5lXSk7Cj4gKwl9Cj4gK30K PiArCj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfcGxhbmVfY2xpcHBpbmdfZm9ybWF0KGRhdGFfdCAq ZGF0YSwKPiArCQkJICAgZW51bSBwaXBlIHBpcGUsCj4gKwkJCSAgIGlndF9vdXRwdXRfdCAqb3V0 cHV0LAo+ICsJCQkgICBkcm1Nb2RlTW9kZUluZm8gKm1vZGUsCj4gKwkJCSAgIHNxdWFyZV90ICpj bGlwX3NxdWFyZXMsCj4gKwkJCSAgIGludCBwbGFuZV9jbnQsCj4gKwkJCSAgIHVpbnQ2NF90IHRp bGluZywKPiArCQkJICAgaWd0X3JvdGF0aW9uX3Qgcm90YXRpb24sCj4gKwkJCSAgIHVpbnQzMl90 IGZvcm1hdCwKPiArCQkJICAgaWd0X2NyY190ICpyZWZlcmVuY2VfY3JjKQo+ICt7Cj4gKwlpbnQg cGxhbmU7Cj4gKwlpZ3RfcGxhbmVfdCAqcGxhbmVfb2Jqc1s0XTsKPiArCXN0cnVjdCBpZ3RfZmIg cGxhbmVfZmJzWzRdOwo+ICsJaWd0X2NyY190IGNyYzsKPiArCWludCByZXQ7Cj4gKwlib29sIGJv Z3VzX3BsYW5lcyA9IGZhbHNlOwo+ICsKPiArCW1lbXNldChwbGFuZV9vYmpzLCAwLCBzaXplb2Yo cGxhbmVfb2JqcykpOwo+ICsKPiArCWlndF9kZWJ1Zygicm90YXRpb24gJXMgdGlsaW5nICVzIGZv cm1hdCAlc1xuIiwKPiArCQkgIGlndF9yb3RhdGlvbl9kZWdyZWVzX3N0cihyb3RhdGlvbiksCj4g KwkJICBpZ3RfdGlsaW5nX3N0cih0aWxpbmcpLAo+ICsJCSAgaWd0X2Zvcm1hdF9zdHIoZm9ybWF0 KSk7Cj4gKwo+ICsJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ICsKPiArCWZv ciAocGxhbmUgPSAwOyBwbGFuZSA8IHBsYW5lX2NudCA7IHBsYW5lKyspIHsKPiArCQlpZ3RfcGxh bmVfdCAqb2JqID0gaWd0X291dHB1dF9nZXRfcGxhbmUob3V0cHV0LCBwbGFuZSk7Cj4gKwkJc3Ry dWN0IGlndF9mYiAqZmIgPSAmcGxhbmVfZmJzW3BsYW5lXTsKPiArCQlpbnQgeCA9IGNsaXBfc3F1 YXJlc1twbGFuZV0ueDsKPiArCQlpbnQgeSA9IGNsaXBfc3F1YXJlc1twbGFuZV0ueTsKPiArCQlp bnQgc2l6ZSA9IGNsaXBfc3F1YXJlc1twbGFuZV0uc2l6ZTsKPiArCQl1aW50NjRfdCBfdGlsaW5n ID0gdGlsaW5nOwo+ICsJCXVpbnQzMl90IF9mb3JtYXQgPSBmb3JtYXQ7Cj4gKwo+ICsJCWlmIChv YmotPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfQ1VSU09SKSB7Cj4gKwkJCV90aWxpbmcgPSBMT0NB TF9EUk1fRk9STUFUX01PRF9OT05FOwo+ICsJCQlfZm9ybWF0ID0gRFJNX0ZPUk1BVF9BUkdCODg4 ODsKPiArCQl9Cj4gKwo+ICsJCWlmICghc3VwcG9ydGVkX3BsYW5lX2NvbmYoZGF0YSwgb2JqLT50 eXBlLCBfdGlsaW5nLCBfZm9ybWF0LAo+ICsJCQkJCSAgcm90YXRpb24sIG1vZGUsIHgsIHksIHNp emUpKQo+ICsJCQlnb3RvIG91dDsKPiArCj4gKwkJY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGlu Z19wbGFuZShkYXRhLCByb3RhdGlvbixfdGlsaW5nLAo+ICsJCQkJCQkgICBfZm9ybWF0LCBzaXpl LCBmYik7Cj4gKwo+ICsJCWlndF9wbGFuZV9zZXRfZmIob2JqLCBmYik7Cj4gKwkJaWd0X2ZiX3Nl dF9wb3NpdGlvbihmYiwgb2JqLCAwLCAwKTsKPiArCj4gKwkJaWd0X3BsYW5lX3NldF9zaXplKG9i aiwgc2l6ZSwgc2l6ZSk7Cj4gKwkJaWd0X3BsYW5lX3NldF9yb3RhdGlvbihvYmosIHJvdGF0aW9u KTsKPiArCQlpZ3RfcGxhbmVfc2V0X3Bvc2l0aW9uKG9iaiwgeCwgeSk7Cj4gKwo+ICsJCXBsYW5l X29ianNbcGxhbmVdID0gb2JqOwo+ICsJfQo+ICsKPiArCS8qCj4gKwkgKiBOb3RlIHRoYXQgYSB1 bml2ZXJzYWwgY29tbWl0IGRvZXNuJ3Qgc3VwcG9ydCBmdWxsIG1vZGVzZXRzLCBzbyB3ZQo+ICsJ ICogaGF2ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgZm9sbG93aW5nIG9ubHkgbmVlZHMgdG8gY29t bWl0IGNoYW5nZXMKPiArCSAqIHRoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCBhIGZhc3RzZXQuIFRo aXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQsCj4gKwkgKiBzaW5jZSBiZWZvcmUgY2FsbGluZyB0aGlz IGZ1bmN0aW9uIHdlIHRvb2sgdGhlIHJlZmVyZW5jZSBDUkMgd2hpY2gKPiArCSAqIGxlZnQgdGhl IGRpc3BsYXkgZW5hYmxlZCB3aXRoIHRoZSBtb2RlIHdlIHJlcXVpcmUgaGVyZSBhbmQKPiArCSAq IGFmdGVyd2FyZHMgd2Ugb25seSBjaGFuZ2UgcGxhbmUgcGFyYW1ldGVycyAoRkIsIHBvc2l0aW9u LCByb3RhdGlvbgo+ICsJICogZXRjLikuCj4gKwkgKi8KPiArCXJldCA9IGlndF9kaXNwbGF5X3Ry eV9jb21taXQyKCZkYXRhLT5kaXNwbGF5LCBDT01NSVRfVU5JVkVSU0FMKTsKPiArCj4gKwlmb3Ig KHBsYW5lID0gMDsgcGxhbmUgPCBwbGFuZV9jbnQ7IHBsYW5lKyspIHsKPiArCQlpZighYm9ndXNf cGxhbmVfY29uZihkYXRhLT5kZXZpZCwgcGxhbmVfb2Jqc1twbGFuZV0sCj4gKwkJCQkgICAgIG1v ZGUtPmhkaXNwbGF5LCBjbGlwX3NxdWFyZXNbcGxhbmVdLngsCj4gKwkJCQkgICAgIGNsaXBfc3F1 YXJlc1twbGFuZV0uc2l6ZSkpIHsKClB1dHRpbmcgdGhhdCBmdW5jdGlvbiBjYWxsIGludG8gdGhl IGlmIGxvb2tzIGEgYml0IGZ1bm55LCBJJ2QgcHV0IGl0Cm91dHNpZGUuCgpJIGFsc28gbG9va2Vk IGF0IHlvdXIgcmVzdWx0czoKCmh0dHBzOi8vaW50ZWwtZ2Z4LWNpLjAxLm9yZy90cmVlL2RybS10 aXAvSUdUUFdfMTgxMy9zaGFyZHMtYWxsLmh0bWwKCihZZXMgeW91IG5lZWQgdG8ga25vdyB0byBy ZXBsYWNlIHNoYXJkcy5odG1sIHdpdGggc2hhcmRzLWFsbC5odG1sKS4gWW91cgpuZXcgdGVzdGNh c2VzIGFyZSBmYWlsaW5nLCBzbyB0aGVyZSdzIGEgYnVnIHNvbWV3aGVyZS4gTmVlZCB0byBnZXQg dGhhdApmaXhlZCBmaXJzdC4KCi1EYW5pZWwKPiArCQkJYm9ndXNfcGxhbmVzID0gdHJ1ZTsKPiAr CQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChib2d1c19wbGFuZXMpIHsKPiArCQlp Z3RfYXNzZXJ0KHJldCA9PSAwKTsKPiArCQlpZ3RfcGlwZV9jcmNfY29sbGVjdF9jcmMoZGF0YS0+ cGlwZV9jcmMsICZjcmMpOwo+ICsJCWlndF9hc3NlcnRfY3JjX2VxdWFsKHJlZmVyZW5jZV9jcmMs ICZjcmMpOwo+ICsJfSBlbHNlIHsKPiArCQlpZ3RfYXNzZXJ0KHJldCA9PSAtRVJBTkdFKTsKPiAr CX0KPiArCj4gK291dDoKPiArCWZvciAocGxhbmUgPSAwOyBwbGFuZSA8IHBsYW5lX2NudDsgcGxh bmUrKykgewo+ICsJCWlmICghcGxhbmVfb2Jqc1twbGFuZV0pCj4gKwkJCWNvbnRpbnVlOwo+ICsJ CWlndF9wbGFuZV9zZXRfZmIocGxhbmVfb2Jqc1twbGFuZV0sIE5VTEwpOwo+ICsJCWlndF9wbGFu ZV9zZXRfcm90YXRpb24ocGxhbmVfb2Jqc1twbGFuZV0sIElHVF9ST1RBVElPTl8wKTsKPiArCQlp Z3RfcGxhbmVfc2V0X3Bvc2l0aW9uKHBsYW5lX29ianNbcGxhbmVdLCAwLCAwKTsKPiArCj4gKwkJ aWd0X3JlbW92ZV9mYihkYXRhLT5kcm1fZmQsICZwbGFuZV9mYnNbcGxhbmVdKTsKPiArCX0KPiAr Cj4gKwlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgUElQRV9BTlkpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZAo+ICt0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZShkYXRhX3QgKmRhdGEsIGVu dW0gcGlwZSBwaXBlLAo+ICsJCQkgICBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZHJtTW9kZU1vZGVJ bmZvICptb2RlLAo+ICsJCQkgICBzcXVhcmVfdCAqY2xpcF9zcXVhcmVzLCBpbnQgcGxhbmVfY250 KQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3Qgewo+ICsJCXVpbnQ2NF90IHRpbGluZzsKPiArCQlpZ3Rf cm90YXRpb25fdCByb3RhdGlvbjsKPiArCX0gcm90YXRpb25zW10gPSB7Cj4gKwkJeyBMT0NBTF9E Uk1fRk9STUFUX01PRF9OT05FLAkJSUdUX1JPVEFUSU9OXzAgfSwKPiArCj4gKwkJeyBMT0NBTF9J OTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwJSUdUX1JPVEFUSU9OXzAgfSwKPiArCj4gKwkJeyBMT0NB TF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzAgfSwKPiArCQl7IExPQ0FM X0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELAlJR1RfUk9UQVRJT05fOTAgfSwKPiArCQl7IExPQ0FM X0k5MTVfRk9STUFUX01PRF9ZX1RJTEVELAlJR1RfUk9UQVRJT05fMTgwIH0sCj4gKwkJeyBMT0NB TF9JOTE1X0ZPUk1BVF9NT0RfWV9USUxFRCwJSUdUX1JPVEFUSU9OXzI3MCB9LAo+ICsKPiArCQl7 IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCwJSUdUX1JPVEFUSU9OXzAgfSwKPiArCQl7 IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCwJSUdUX1JPVEFUSU9OXzkwIH0sCj4gKwkJ eyBMT0NBTF9JOTE1X0ZPUk1BVF9NT0RfWWZfVElMRUQsCUlHVF9ST1RBVElPTl8xODAgfSwKPiAr CQl7IExPQ0FMX0k5MTVfRk9STUFUX01PRF9ZZl9USUxFRCwJSUdUX1JPVEFUSU9OXzI3MCB9LAo+ ICsJfTsKPiArCWNvbnN0IHVpbnQzMl90IGZvcm1hdHNbXSA9IHsKPiArCQlEUk1fRk9STUFUX1JH QjU2NSwKPiArCQlEUk1fRk9STUFUX1hSR0I4ODg4LAo+ICsJCURSTV9GT1JNQVRfQVJHQjg4ODgs Cj4gKwl9Owo+ICsKPiArCWlndF9mYl90IHJlZmVyZW5jZV9mYjsKPiArCWlndF9jcmNfdCByZWZl cmVuY2VfY3JjOwo+ICsKPiArCWZvciAoaW50IHBsYW5lID0gMDsgcGxhbmUgPCBwbGFuZV9jbnQ7 IHBsYW5lKyspIHsKPiArCQlpZ3RfaW5mbygiVGVzdGluZyBjb25uZWN0b3IgJXMgbW9kZSAlZHgl ZCB1c2luZyBwaXBlICVzOiAlZHglZEAlZCwlZFxuIiwKPiArCQkJIGlndF9vdXRwdXRfbmFtZShv dXRwdXQpLAo+ICsJCQkgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAo+ICsJCQkga21z dGVzdF9waXBlX25hbWUocGlwZSksCj4gKwkJCSBjbGlwX3NxdWFyZXNbcGxhbmVdLnNpemUsIGNs aXBfc3F1YXJlc1twbGFuZV0uc2l6ZSwKPiArCQkJIGNsaXBfc3F1YXJlc1twbGFuZV0ueCwgY2xp cF9zcXVhcmVzW3BsYW5lXS55KTsKPiArCX0KPiArCj4gKwl0ZXN0X2luaXQoZGF0YSwgcGlwZSk7 Cj4gKwo+ICsJY3JlYXRlX2ZiX2Zvcl9tb2RlX19jbGlwcGluZ19kaXNwbGF5KGRhdGEsIG1vZGUs Cj4gKwkJCQkJICAgICBjbGlwX3NxdWFyZXMsCj4gKwkJCQkJICAgICBwbGFuZV9jbnQsCj4gKwkJ CQkJICAgICAmcmVmZXJlbmNlX2ZiKTsKPiArCj4gKwkvKgo+ICsJICogQXMgYSB0ZXN0X2dyYWJf Y3JjX2Zvcl9mYigpIGZ1bmN0aW9uIHVzZXMgYSBsZWdhY3kgc3R5bGUgY29tbWl0Cj4gKwkgKiB3 aGljaCBkb2VzIG5vdCBhbGxvdyBjaGFuZ2luZyBvZiBwcmltYXJ5IHBsYW5lIHJvdGF0aW9uIG9u IG5vbi1maXJzdAo+ICsJICogY29tbWl0LCB3ZSBjYWxsIGlndF9kaXNwbGF5X3Jlc2V0KCkgdG8g bWFrZSBpdCBhcyBhIGZpcnN0IGNvbW1pdAo+ICsJICogcHJpb3IgdG8gY2FsbCB0ZXN0X2dyYWJf Y3JjX2Zvcl9mYigpLgo+ICsJICovCj4gKwlpZ3RfZGlzcGxheV9yZXNldCgmZGF0YS0+ZGlzcGxh eSk7Cj4gKwl0ZXN0X2dyYWJfY3JjX2Zvcl9mYihkYXRhLCBvdXRwdXQsIHBpcGUsICZyZWZlcmVu Y2VfZmIsICZyZWZlcmVuY2VfY3JjKTsKPiArCWlndF9yZW1vdmVfZmIoZGF0YS0+ZHJtX2ZkLCAm cmVmZXJlbmNlX2ZiKTsKPiArCj4gKwlmb3IgKGludCByb3RhdGlvbiA9IDA7IHJvdGF0aW9uIDwg QVJSQVlfU0laRShyb3RhdGlvbnMpOyByb3RhdGlvbisrKQo+ICsJCWZvciAoaW50IGZvcm1hdCA9 IDA7IGZvcm1hdCA8IEFSUkFZX1NJWkUoZm9ybWF0cyk7IGZvcm1hdCsrKQo+ICsJCQl0ZXN0X3Bs YW5lX2NsaXBwaW5nX2Zvcm1hdChkYXRhLCBwaXBlLCBvdXRwdXQsCj4gKwkJCQkJCSAgIG1vZGUs Cj4gKwkJCQkJCSAgIGNsaXBfc3F1YXJlcywKPiArCQkJCQkJICAgcGxhbmVfY250LAo+ICsJCQkJ CQkgICByb3RhdGlvbnNbcm90YXRpb25dLnRpbGluZywKPiArCQkJCQkJICAgcm90YXRpb25zW3Jv dGF0aW9uXS5yb3RhdGlvbiwKPiArCQkJCQkJICAgZm9ybWF0c1tmb3JtYXRdLAo+ICsJCQkJCQkg ICAmcmVmZXJlbmNlX2NyYyk7Cj4gKwo+ICsJdGVzdF9maW5pKGRhdGEpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgdm9pZAo+ICt0ZXN0X3BsYW5lX2NsaXBwaW5nX3NxdWFyZXMoZGF0YV90ICpkYXRhLCBl bnVtIHBpcGUgcGlwZSwKPiArCQkJICAgIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBkcm1Nb2RlTW9k ZUluZm8gKm1vZGUsCj4gKwkJCSAgICBzcXVhcmVfdCAqY2xpcF9zcXVhcmVzLCBpbnQgcGxhbmVf Y250KQo+ICt7Cj4gKwlmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkgKz0gcGxhbmVfY250KQo+ICsJ CXRlc3RfcGxhbmVfY2xpcHBpbmdfc3F1YXJlKGRhdGEsIHBpcGUsIG91dHB1dCwgbW9kZSwKPiAr CQkJCQkgICBjbGlwX3NxdWFyZXMgKyBpLAo+ICsJCQkJCSAgIHBsYW5lX2NudCk7Cj4gK30KPiAr Cj4gK3N0YXRpYyB2b2lkCj4gK3Rlc3RfcGxhbmVfY2xpcHBpbmcoZGF0YV90ICpkYXRhLCBlbnVt IHBpcGUgcGlwZSkKPiArewo+ICsJaWd0X291dHB1dF90ICpvdXRwdXQ7Cj4gKwlpbnQgY29ubmVj dGVkX291dHMgPSAwOwo+ICsKPiArCWZvcl9lYWNoX3ZhbGlkX291dHB1dF9vbl9waXBlKCZkYXRh LT5kaXNwbGF5LCBwaXBlLCBvdXRwdXQpIHsKPiArCQlkcm1Nb2RlTW9kZUluZm8gKm1vZGU7Cj4g KwkJaW50IHNxX3NpemU7Cj4gKwkJaW50IG1heF9wbGFuZXMgPSBkYXRhLT5kaXNwbGF5LnBpcGVz W3BpcGVdLm5fcGxhbmVzOwo+ICsJCWludCBwbGFuZV9jbnQ7Cj4gKwo+ICsJCXBsYW5lX2NudCA9 IG1heF9wbGFuZXMgPj0gNCA/IDQgOiBtYXhfcGxhbmVzID49IDIgPyAyIDogMTsKPiArCj4gKwkJ aWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIHBpcGUpOwo+ICsJCW1vZGUgPSBpZ3Rfb3V0cHV0 X2dldF9tb2RlKG91dHB1dCk7Cj4gKwo+ICsJCS8qCj4gKwkJICogVGVzdCB3aXRoIGEgc3F1YXJl IHBsYW5lIGJpZ2dlciB0aGFuIGVpdGhlciB0aGUgd2lkdGggb3IKPiArCQkgKiBoZWlnaHQgb2Yg dGhlIG1vZGUuIFRoaXMgc2hvdWxkIHBhc3Mgb24gYWxsIHBsYXRmb3Jtcy4KPiArCQkgKi8KPiAr CQlzcV9zaXplID0gbW9kZS0+aGRpc3BsYXkgPiBtb2RlLT52ZGlzcGxheSA/Cj4gKwkJCSAgbW9k ZS0+aGRpc3BsYXkgOiBtb2RlLT52ZGlzcGxheTsKPiArCj4gKwkJY2xpcF9zcXVhcmVzWzBdLngg PSAtMjsKPiArCQljbGlwX3NxdWFyZXNbMF0ueSA9IC0yOwo+ICsJCWNsaXBfc3F1YXJlc1swXS5z aXplID0gc3Ffc2l6ZSArIDQ7Cj4gKwo+ICsJCXRlc3RfcGxhbmVfY2xpcHBpbmdfc3F1YXJlKGRh dGEsIHBpcGUsIG91dHB1dCwgbW9kZSwKPiArCQkJCQkgICBjbGlwX3NxdWFyZXMsIDEpOwo+ICsK PiArCQkvKgo+ICsJCSAqIFRlc3QgcG9zaXRpb25zIGluIHRoZSA0IGNvcm5lcnMgb2YgdGhlIHNj cmVlbiB3aXRoIGEKPiArCQkgKiBDTElQUEVEX1BMQU5FX01JTl9WQUxJRCB4IENMSVBQRURfUExB TkVfTUlOX1ZBTElEIHNxdWFyZQo+ICsJCSAqIHZpc2libGUgZnJvbSB0aGUgcGxhbmUuIFRoZXNl IHNob3VsZCBwYXNzIG9uIGFsbCBwbGF0Zm9ybXMuCj4gKwkJICovCj4gKwkJY2xpcF9zcXVhcmVz WzBdLnggPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFICsKPiArCQkJCSAgICAgQ0xJUFBFRF9Q TEFORV9NSU5fVkFMSUQ7Cj4gKwkJY2xpcF9zcXVhcmVzWzBdLnkgPSAtQ0xJUFBFRF9QTEFORV9T TUFMTF9TSVpFICsKPiArCQkJCSAgICAgQ0xJUFBFRF9QTEFORV9NSU5fVkFMSUQ7Cj4gKwkJY2xp cF9zcXVhcmVzWzBdLnNpemUgPSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJWkU7Cj4gKwo+ICsJCWNs aXBfc3F1YXJlc1sxXS54ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArCj4gKwkJCQkgICAg IENMSVBQRURfUExBTkVfTUlOX1ZBTElEOwo+ICsJCWNsaXBfc3F1YXJlc1sxXS55ID0gbW9kZS0+ dmRpc3BsYXkgLQo+ICsJCQkJICAgIENMSVBQRURfUExBTkVfTUlOX1ZBTElEOwo+ICsJCWNsaXBf c3F1YXJlc1sxXS5zaXplID0gQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFOwo+ICsKPiArCQljbGlw X3NxdWFyZXNbMl0ueCA9IG1vZGUtPmhkaXNwbGF5IC0KPiArCQkJCSAgICBDTElQUEVEX1BMQU5F X01JTl9WQUxJRDsKPiArCQljbGlwX3NxdWFyZXNbMl0ueSA9IC1DTElQUEVEX1BMQU5FX1NNQUxM X1NJWkUgKwo+ICsJCQkJICAgICBDTElQUEVEX1BMQU5FX01JTl9WQUxJRDsKPiArCQljbGlwX3Nx dWFyZXNbMl0uc2l6ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsKPiArCj4gKwkJY2xpcF9z cXVhcmVzWzNdLnggPSBtb2RlLT5oZGlzcGxheSAtCj4gKwkJCQkgICAgQ0xJUFBFRF9QTEFORV9N SU5fVkFMSUQ7Cj4gKwkJY2xpcF9zcXVhcmVzWzNdLnkgPSBtb2RlLT52ZGlzcGxheSAtCj4gKwkJ CQkgICAgQ0xJUFBFRF9QTEFORV9NSU5fVkFMSUQ7Cj4gKwkJY2xpcF9zcXVhcmVzWzNdLnNpemUg PSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJWkU7Cj4gKwo+ICsJCXRlc3RfcGxhbmVfY2xpcHBpbmdf c3F1YXJlcyhkYXRhLCBwaXBlLCBvdXRwdXQsIG1vZGUsCj4gKwkJCQkJICAgIGNsaXBfc3F1YXJl cywgcGxhbmVfY250KTsKPiArCj4gKwkJLyoKPiArCQkgKiBUZXN0IHBvc2l0aW9ucyBpbiB0aGUg NCBjb3JuZXJzIG9mIHRoZSBzY3JlZW4gd2l0aCBhCj4gKwkJICogMiB4IDIgc3F1YXJlIHZpc2li bGUgZnJvbSB0aGUgcGxhbmUuIFRoZXNlIGFyZSB2YWxpZCBvbiBhbGwKPiArCQkgKiBwbGF0Zm9y bXMgZXhjZXB0IG9uIEdMSy9DTkwgd2hlcmUgbGVzcyB0aGFuCj4gKwkJICogQ0xJUFBFRF9QTEFO RV9NSU5fVkFMSUQgcGl4ZWxzIHZpc2libGUgb24gdGhlIGxlZnQvcmlnaHQKPiArCQkgKiBlZGdl cyBvZiB0aGUgc2NyZWVuIG1heSBjYXVzZSBGSUZPIHVuZGVyZmxvdyBhbmQgZGlzcGxheQo+ICsJ CSAqIGNvcnJ1cHRpb24uCj4gKwkJICoKPiArCQkgKiBUaGUgY3Vyc29yIHBsYW5lIGlzIGFuIGV4 Y2VwdGlvbiB3aXRob3V0IHRoaXMgcHJvYmxlbS4KPiArCQkgKgo+ICsJCSAqIFVzZSAyIHggMiBz aXplIGFzIG90aGVyIChvZGQpIHNpemVzIG1heSByZXN1bHQgaW4gYW4KPiArCQkgKiBpbmNvcnJl Y3QgQ1JDIGZvciB0aGUgY3Vyc29yIHBsYW5lIGV2ZW4gdGhvdWdoIGl0IGRpc3BsYXlzCj4gKwkJ ICogY29ycmVjdGx5IGFuZCBjYXVzZXMgbm8gdW5kZXJmbG93Lgo+ICsJCSAqLwo+ICsJCWNsaXBf c3F1YXJlc1swXS54ID0gLUNMSVBQRURfUExBTkVfU01BTExfU0laRSArIDI7Cj4gKwkJY2xpcF9z cXVhcmVzWzBdLnkgPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFICsgMjsKPiArCQljbGlwX3Nx dWFyZXNbMF0uc2l6ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsKPiArCj4gKwkJY2xpcF9z cXVhcmVzWzFdLnggPSAtQ0xJUFBFRF9QTEFORV9TTUFMTF9TSVpFICsgMjsKPiArCQljbGlwX3Nx dWFyZXNbMV0ueSA9IG1vZGUtPnZkaXNwbGF5IC0gMjsKPiArCQljbGlwX3NxdWFyZXNbMV0uc2l6 ZSA9IENMSVBQRURfUExBTkVfU01BTExfU0laRTsKPiArCj4gKwkJY2xpcF9zcXVhcmVzWzJdLngg PSBtb2RlLT5oZGlzcGxheSAtIDI7Cj4gKwkJY2xpcF9zcXVhcmVzWzJdLnkgPSAtQ0xJUFBFRF9Q TEFORV9TTUFMTF9TSVpFICsgMjsKPiArCQljbGlwX3NxdWFyZXNbMl0uc2l6ZSA9IENMSVBQRURf UExBTkVfU01BTExfU0laRTsKPiArCj4gKwkJY2xpcF9zcXVhcmVzWzNdLnggPSBtb2RlLT5oZGlz cGxheSAtIDI7Cj4gKwkJY2xpcF9zcXVhcmVzWzNdLnkgPSBtb2RlLT52ZGlzcGxheSAtIDI7Cj4g KwkJY2xpcF9zcXVhcmVzWzNdLnNpemUgPSBDTElQUEVEX1BMQU5FX1NNQUxMX1NJWkU7Cj4gKwo+ ICsJCXRlc3RfcGxhbmVfY2xpcHBpbmdfc3F1YXJlcyhkYXRhLCBwaXBlLCBvdXRwdXQsIG1vZGUs Cj4gKwkJCQkJICAgIGNsaXBfc3F1YXJlcywgcGxhbmVfY250KTsKPiArCj4gKwkJY29ubmVjdGVk X291dHMrKzsKPiArCX0KPiArCj4gKwlpZ3Rfc2tpcF9vbihjb25uZWN0ZWRfb3V0cyA9PSAwKTsK PiArfQo+ICsKPiAgc3RhdGljIHZvaWQKPiAgcnVuX3Rlc3RzX2Zvcl9waXBlX3BsYW5lKGRhdGFf dCAqZGF0YSwgZW51bSBwaXBlIHBpcGUpCj4gIHsKPiBAQCAtNTgxLDYgKzEwODEsOSBAQCBydW5f dGVzdHNfZm9yX3BpcGVfcGxhbmUoZGF0YV90ICpkYXRhLCBlbnVtIHBpcGUgcGlwZSkKPiAgCQkg ICAgICBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSkKPiAgCQl0ZXN0X3BsYW5lX3Bhbm5pbmcoZGF0 YSwgcGlwZSwgVEVTVF9QQU5OSU5HX0JPVFRPTV9SSUdIVCB8Cj4gIAkJCQkJICAgICAgIFRFU1Rf U1VTUEVORF9SRVNVTUUpOwo+ICsJaWd0X3N1YnRlc3RfZigicGxhbmUtY2xpcHBpbmctcGlwZS0l cy1wbGFuZXMiLAo+ICsJCSAgICAgIGttc3Rlc3RfcGlwZV9uYW1lKHBpcGUpKQo+ICsJCXRlc3Rf cGxhbmVfY2xpcHBpbmcoZGF0YSwgcGlwZSk7Cj4gIH0KPiAgCj4gIAo+IEBAIC01OTMsOCArMTA5 NiwyMSBAQCBpZ3RfbWFpbgo+ICAJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOwo+ICAKPiAgCWln dF9maXh0dXJlIHsKPiArCQlpbnQgcmV0Owo+ICsKPiAgCQlkYXRhLmRybV9mZCA9IGRybV9vcGVu X2RyaXZlcl9tYXN0ZXIoRFJJVkVSX0lOVEVMKTsKPiAgCj4gKwkJZGF0YS5kZXZpZCA9IGludGVs X2dldF9kcm1fZGV2aWQoZGF0YS5kcm1fZmQpOwo+ICsKPiArCQlkYXRhLm1heF9jdXJ3ID0gNjQ7 Cj4gKwkJZGF0YS5tYXhfY3VyaCA9IDY0Owo+ICsJCXJldCA9IGRybUdldENhcChkYXRhLmRybV9m ZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsCj4gKwkJCQkmZGF0YS5tYXhfY3Vydyk7Cj4gKwkJaWd0 X2Fzc2VydChyZXQgPT0gMCB8fCBlcnJubyA9PSBFSU5WQUwpOwo+ICsJCXJldCA9IGRybUdldENh cChkYXRhLmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfSEVJR0hULAo+ICsJCQkJJmRhdGEubWF4X2N1 cmgpOwo+ICsJCWlndF9hc3NlcnQocmV0ID09IDAgfHwgZXJybm8gPT0gRUlOVkFMKTsKPiArCj4g IAkJa21zdGVzdF9zZXRfdnRfZ3JhcGhpY3NfbW9kZSgpOwo+ICAKPiAgCQlpZ3RfcmVxdWlyZV9w aXBlX2NyYyhkYXRhLmRybV9mZCk7Cj4gLS0gCj4gMi4xOC4wCj4gCgotLSAKRGFuaWVsIFZldHRl cgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwu Y2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRl diBtYWlsaW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2Cg==