From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH v5 10/28] xsplice: Implement payload loading Date: Tue, 5 Apr 2016 11:50:01 -0400 Message-ID: <20160405155001.GA29407@char.us.oracle.com> References: <1458849640-22588-1-git-send-email-konrad.wilk@oracle.com> <1458849640-22588-11-git-send-email-konrad.wilk@oracle.com> <56FD461602000078000E1C28@prv-mh.provo.novell.com> <20160331212604.GA24340@localhost.localdomain> <56FE591502000078000E1F2D@prv-mh.provo.novell.com> <20160404194444.GA4474@char.us.oracle.com> <5703868D02000078000E308B@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1anTFS-0001QW-D3 for xen-devel@lists.xenproject.org; Tue, 05 Apr 2016 15:50:34 +0000 Content-Disposition: inline In-Reply-To: <5703868D02000078000E308B@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: Keir Fraser , andrew.cooper3@citrix.com, mpohlack@amazon.de, ross.lagerwall@citrix.com, Julien Grall , Stefano Stabellini , xen-devel@lists.xenproject.org, Konrad Rzeszutek Wilk , sasha.levin@oracle.com List-Id: xen-devel@lists.xenproject.org PiA+IFBsZWFzZSBhZHZpc2UuCj4gCj4gV2VsbCwgSSBjZXJ0YWlubHkgZGlkbid0IHRoaW5rIG9m IGl0IGdldHRpbmcgZG9uZSB0aGF0IHdheS4gVG8gbWUgdGhlCj4gbW9zdCBuYXR1cmFsIGdlbmVy YWxpemF0aW9uIHdvdWxkIGJlIGZvciBhbiBhcmNoIHRvIHJlZ2lzdGVyIG9uZSBvcgo+IG1vcmUg c2Vjb25kYXJ5IHJhbmdlcyAod2hpY2ggY291bGQgZXZlbiBnZXQgcmVmZXJyZWQgdG8gYnkgYW4K PiBlbnVtKSBhdCBib290IHRpbWUgKG9yIG1heWJlIHRoYXQgY291bGQgZXZlbiBiZSBhcnJhbmdl ZCBmb3IgYXQKPiBjb21waWxlIHRpbWUsIGkuZS4gbm8gYWN0aXZlIHJlZ2lzdHJhdGlvbiBuZWNl c3NhcnkpLCB3aXRoIGVhY2ggc3VjaAoKVGhlIHN0YXJ0IG9mIHRoaXMgcmVnaW9uIC0gIHhlbl92 aXJ0X2VuZCBpcyBjb21wdXRlZCBkdXJpbmcgYm9vdHRpbWUKc28gcGFydCBvZiB0aGlzIGlzIHdp bGwgYmUgcnVudGltZS4KCj4gYXJlYSBnZXR0aW5nIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcyBz ZXQgdXAgYXMgaXMgYmVpbmcgZG9uZSByaWdodAo+IG5vdyBmb3IgdGhlICJiYXNlIiBWQSByYW5n ZS4KClRoYXQgYWN0dWFsbHkgZW5kZWQgdXAgcHJldHR5IHNpbXBsZS4gSXQgd29uJ3QgY29tcGls ZSBmb3IgQVJNIHlldCwKc2VlIGJlbG93IHBsZWFzZS4KPiAKPiBCdXQgaWYgdGhhdCdzIHRvbyBj dW1iZXJzb21lIGZvciBub3csIEknbSBjZXJ0YWlubHkgZmluZSB3aXRoCj4geFNwbGljZSBjb2Rl IGRlYWxpbmcgd2l0aCB0aGUgVkEgbWFuYWdlbWVudCBpdHNlbGYuIFdlIGNhbgo+IGFsd2F5cyBh ZGQgc3VjaCBhbiBleHRlbnNpb24gbGF0ZXIgKGFuZCB0aGVuIG1ha2UgeFNwbGljZSB1c2UgaXQp LgoKRnJvbSA0NTkwNjAzOWIxOGYxOTk1YjI2Yzk3YjU2MDI0NGFjOTAzMDg1OTdmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxr QG9yYWNsZS5jb20+CkRhdGU6IE1vbiwgMTQgTWFyIDIwMTYgMTI6MDI6MDUgLTA0MDAKU3ViamVj dDogW1JGQyBQQVRDSF0gdm1hcDogQWRkIHZtYWxsb2NfdHlwZSBXSVAKClRPRE86CiAtIENoZWNr IHdoYXQgaGFwcGVucyBvbiAhQ09ORklHX1hTUExJQ0UKIC0gTW92ZSBhcmNoIHNwZWNpZmljIHRv IGFyY2ggc3BlY2lmaWMgKGFuZCBtYWtlIGl0IGNvbXBpbGUgdW5kZXIgQVJNKQoKRm9yIHRob3Nl IHVzZXJzIHdobyB3YW50IHRvIHVzZSB0aGUgdmlydHVhbCBhZGRyZXNzZXMgdGhhdAphcmUgaW4g dGhlIGh5cGVydmlzb3IncyB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2UgLSB0aGlzIG5ldwpmdW5jdGlv biBhbGxvd3MgdGhhdC4gQWxvbmcgd2l0aCBwcm92aWRpbmcgdGhlIHVuZGVybGF5aW5nCk1GTnMg Zm9yIHRoZSB1c2VyJ3MgKHN1Y2ggYXMgY2hhbmdpbmcgcGFnZSB0YWJsZSBwZXJtaXNzaW9ucyku CgpJbXBsZW1lbnRhdGlvbiB3aXNlIHRoZSB2bWFwIEFQSSBrZWVwcyB0cmFjayBvZiB0d28gdmly dHVhbAphZGRyZXNzIHJlZ2lvbnMgbm93OgogYSkgVk1BUF9WSVJUX1NUQVJUCiBiKSB4ZW5fdmly dF9lbmQgdXAgdG8gWEVOX1ZJUlRfRU5EIChtaW51cyBzb21lIG90aGVyIHNwYWNlKS4KClRoZSBh KSBvbmUgaXMgdGhlIGRlZmF1bHQgb25lIGFuZCB0aGUgZXhpc3RpbmcgYmVoYXZpb3IKZm9yIHVz ZXJzIG9mIHZtYWxsb2MsIHZtYXAsIGV0YyBpcyB0aGUgc2FtZS4KCklmIGhvd2V2ZXIgb25lIHdp c2hlcyB0byB1c2UgdGhlIGIpIG9uZSBvbmx5IGhhcyB0byB1c2UKdGhlIHZtYWxsb2NfdHlwZSBB UEkgb24gdGhlc2UgdmlydHVhbCBhZGRyZXNzZXMuCgpUaGlzIGFsbG93cyB1c2VycyAoc3VjaCBh cyB4U3BsaWNlKSB0byBwcm92aWRlIHRoZWlyIG93bgptZWNoYW5pc20gdG8gY2hhbmdlIHRoZSB0 aGUgcGFnZSBmbGFncywgYW5kIGFsc28gdXNlIHZpcnR1YWwKYWRkcmVzc2VzIGNsb3NlciB0byB0 aGUgaHlwZXJ2aXNvciB2aXJ0dWFsIGFkZHJlc3NlcyAoYXQgbGVhc3QKb24geDg2KSB3aGlsZSBu b3QgaGF2aW5nIHRvIGRlYWwgd2l0aCB0aGUgYWxsb2NhdGlvbiBvZgpwYWdlcy4KCkZvciBleGFt cGxlIG9mIHVzZXJzLCBzZWUgcGF0Y2ggdGl0bGVkICJ4c3BsaWNlOiBJbXBsZW1lbnQgcGF5bG9h ZApsb2FkaW5nIiwgd2hlcmUgd2UgcGFyc2UgdGhlIHBheWxvYWQncyBFTEYgcmVsb2NhdGlvbnMg LSB3aGljaAppcyBkZWZpbmVkIHRvIGJlIHNpZ25lZCAzMi1iaXQgKHNvIG1heCBkaXNwbGFjZW1l bnQgaXMgMkdCIHZpcnR1YWwKc3BhY0UpLiBUaGUgZGlzcGxhY2VtZW50IG9mIHRoZSBoeXBlcnZp c29yIHZpcnR1YWwgYWRkcmVzc2VzIHRvIHRoZQp2bWFsbG9jIChvbiB4ODYpIGlzIG1vcmUgdGhh biAzMi1iaXRzIC0gd2hpY2ggbWVhbnMgdGhhdCBFTEYgcmVsb2NhdGlvbnMKd291bGQgdHJ1bmNh dGUgdGhlIDM0IGFuZCAzM3RoIGJpdC4gSGVuY2UgdGhpcyBhbHRlcm5hdGUgQVBJCgpTaW5jZSB0 aGVyZSBpcyBvbmx5IG9uZSB1c2VyIG9mIHRoaXMgLSBpdCBpcyBjb25kaXRpb25hbCBvbgpDT05G SUdfWFNQTElDRSAtIGFuZCB0aGUgZ2VuZXJpYyB2bWFsbG9jIGNvZGUgaGFkIGFkZGVkIGNoZWNr cwppbiBjYXNlIHRoZSBiKSByYW5nZSBoYXMgbm90IGJlZW4gaW5pdGlhbGl6ZWQuCgpTaWduZWQt b2ZmLWJ5OiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5jb20+ClN1 Z2dlc3RlZC1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgotLS0KQ2M6IElhbiBK YWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogSmFuIEJldWxpY2ggPGpiZXVs aWNoQHN1c2UuY29tPgpDYzogS2VpciBGcmFzZXIgPGtlaXJAeGVuLm9yZz4KQ2M6IFRpbSBEZWVn YW4gPHRpbUB4ZW4ub3JnPgoKdjQ6IE5ldyBwYXRjaC4KdjU6IFVwZGF0ZSBwZXIgSmFuJ3MgY29t bWVudHMuCnY2OiBEcm9wIHRoZSBzdHJheSBwYXJlbnRoZXNlcyBvbiB0eXBlZGVmcy4KICAgIERp dGNoIHRoZSB2dW5tYXAgY2FsbGJhY2suIFN0YXNoIGF3YXkgdGhlIHZpcnR1YWwgYWRkcmVzc2Vz IGluIGxpc3RzLgogICAgRGl0Y2ggdGhlIHZtYXAgY2FsbGJhY2suIEp1c3QgcHJvdmlkZSB2aXJ0 dWFsIGFkZHJlc3MuCiAgICBEaXRjaCB0aGUgdm1hbGxvY19yYW5nZS4gQWxsb2NhdGUgb24gc3Rh cnR1cCB0aGUgdm1hbGxvY1tYRU5fVklSVF0KICAgIHJhbmdlcy4KLS0tCi0tLQogeGVuL2FyY2gv eDg2L21tLmMgICAgICAgICAgICAgICAgIHwgICAyICstCiB4ZW4vYXJjaC94ODYvc2V0dXAuYyAg ICAgICAgICAgICAgfCAgIDMgKwogeGVuL2NvbW1vbi92bWFwLmMgICAgICAgICAgICAgICAgIHwg MTk0ICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCiB4ZW4vZHJpdmVycy9h Y3BpL29zbC5jICAgICAgICAgICAgfCAgIDIgKy0KIHhlbi9pbmNsdWRlL2FzbS14ODYveDg2XzY0 L3BhZ2UuaCB8ICAgMiArCiB4ZW4vaW5jbHVkZS94ZW4vdm1hcC5oICAgICAgICAgICAgfCAgMTUg KystCiA2IGZpbGVzIGNoYW5nZWQsIDE0OCBpbnNlcnRpb25zKCspLCA3MCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5jCmluZGV4 IGJjYTc1MzIuLjZmYTkyMDggMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS5jCisrKyBiL3hl bi9hcmNoL3g4Ni9tbS5jCkBAIC02MTI0LDcgKzYxMjQsNyBAQCB2b2lkIF9faW9tZW0gKmlvcmVt YXAocGFkZHJfdCBwYSwgc2l6ZV90IGxlbikKICAgICAgICAgdW5zaWduZWQgaW50IG9mZnMgPSBw YSAmIChQQUdFX1NJWkUgLSAxKTsKICAgICAgICAgdW5zaWduZWQgaW50IG5yID0gUEZOX1VQKG9m ZnMgKyBsZW4pOwogCi0gICAgICAgIHZhID0gX192bWFwKCZtZm4sIG5yLCAxLCAxLCBQQUdFX0hZ UEVSVklTT1JfTk9DQUNIRSkgKyBvZmZzOworICAgICAgICB2YSA9IF9fdm1hcCgmbWZuLCBuciwg MSwgMSwgUEFHRV9IWVBFUlZJU09SX05PQ0FDSEUsIFZNQVBfVklSVCkgKyBvZmZzOwogICAgIH0K IAogICAgIHJldHVybiAodm9pZCBfX2ZvcmNlIF9faW9tZW0gKil2YTsKZGlmZiAtLWdpdCBhL3hl bi9hcmNoL3g4Ni9zZXR1cC5jIGIveGVuL2FyY2gveDg2L3NldHVwLmMKaW5kZXggMGI0Zjk0Zi4u OWI1MDJiNiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3NldHVwLmMKKysrIGIveGVuL2FyY2gv eDg2L3NldHVwLmMKQEAgLTEwMCw2ICsxMDAsOSBAQCB1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0 bHkgeGVuX3BoeXNfc3RhcnQ7CiAKIHVuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseSB4ZW5fdmly dF9lbmQ7CiAKK3Vuc2lnbmVkIGxvbmcgX19yZWFkX21vc3RseSBhdmFpbF92aXJ0X3N0YXJ0Owor dW5zaWduZWQgbG9uZyBfX3JlYWRfbW9zdGx5IGF2YWlsX3ZpcnRfZW5kOworCiBERUZJTkVfUEVS X0NQVShzdHJ1Y3QgdHNzX3N0cnVjdCwgaW5pdF90c3MpOwogCiBjaGFyIF9fc2VjdGlvbigiLmJz cy5zdGFja19hbGlnbmVkIikgY3B1MF9zdGFja1tTVEFDS19TSVpFXTsKZGlmZiAtLWdpdCBhL3hl bi9jb21tb24vdm1hcC5jIGIveGVuL2NvbW1vbi92bWFwLmMKaW5kZXggMTM0ZWRhMC4uMzQzYTI1 YSAxMDA2NDQKLS0tIGEveGVuL2NvbW1vbi92bWFwLmMKKysrIGIveGVuL2NvbW1vbi92bWFwLmMK QEAgLTEwLDQwICsxMCw2MSBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKIHN0YXRpYyBERUZJ TkVfU1BJTkxPQ0sodm1fbG9jayk7Ci1zdGF0aWMgdm9pZCAqX19yZWFkX21vc3RseSB2bV9iYXNl OwotI2RlZmluZSB2bV9iaXRtYXAgKCh1bnNpZ25lZCBsb25nICopdm1fYmFzZSkKK3N0YXRpYyB2 b2lkICpfX3JlYWRfbW9zdGx5IHZtX2Jhc2VbVk1BUF9UWVBFX01BWF07CisjZGVmaW5lIHZtX2Jp dG1hcCh4KSAoKHVuc2lnbmVkIGxvbmcgKil2bV9iYXNlW3hdKQogLyogaGlnaGVzdCBhbGxvY2F0 ZWQgYml0IGluIHRoZSBiaXRtYXAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgX19yZWFkX21vc3Rs eSB2bV90b3A7CitzdGF0aWMgdW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgdm1fdG9wW1ZNQVBf VFlQRV9NQVhdOwogLyogdG90YWwgbnVtYmVyIG9mIGJpdHMgaW4gdGhlIGJpdG1hcCAqLwotc3Rh dGljIHVuc2lnbmVkIGludCBfX3JlYWRfbW9zdGx5IHZtX2VuZDsKK3N0YXRpYyB1bnNpZ25lZCBp bnQgX19yZWFkX21vc3RseSB2bV9lbmRbVk1BUF9UWVBFX01BWF07CiAvKiBsb3dlc3Qga25vd24g Y2xlYXIgYml0IGluIHRoZSBiaXRtYXAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdm1fbG93Owor c3RhdGljIHVuc2lnbmVkIGludCB2bV9sb3dbVk1BUF9UWVBFX01BWF07CiAKLXZvaWQgX19pbml0 IHZtX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHZtX2luaXRfdHlwZShlbnVtIHZtYXBfdHlwZSB0 eXBlKQogewogICAgIHVuc2lnbmVkIGludCBpLCBucjsKICAgICB1bnNpZ25lZCBsb25nIHZhOwor ICAgIHZvaWQgKmVuZDsKKworICAgIGlmICggdHlwZSA9PSBWTUFQX1ZJUlQgKQorICAgIHsKKyAg ICAgICAgdm1fYmFzZVtWTUFQX1ZJUlRdID0gKHZvaWQgKilWTUFQX1ZJUlRfU1RBUlQ7CisgICAg ICAgIGVuZCA9IGFyY2hfdm1hcF92aXJ0X2VuZCgpOworICAgIH0KKyAgICBlbHNlCisgICAgewor ICAgICAgICB2bV9iYXNlW1hFTl9WSVJUXSA9ICh2b2lkICopeGVuX3ZpcnRfZW5kOworICAgICAg ICBlbmQgPSAodm9pZCAqKShYRU5fVklSVF9FTkQgLSBOUl9DUFVTICogUEFHRV9TSVpFKTsKIAot ICAgIHZtX2Jhc2UgPSAodm9pZCAqKVZNQVBfVklSVF9TVEFSVDsKLSAgICB2bV9lbmQgPSBQRk5f RE9XTihhcmNoX3ZtYXBfdmlydF9lbmQoKSAtIHZtX2Jhc2UpOwotICAgIHZtX2xvdyA9IFBGTl9V UCgodm1fZW5kICsgNykgLyA4KTsKLSAgICBuciA9IFBGTl9VUCgodm1fbG93ICsgNykgLyA4KTsK LSAgICB2bV90b3AgPSBuciAqIFBBR0VfU0laRSAqIDg7CisgICAgICAgIEJVR19PTihlbmQgPD0g dm1fYmFzZVtYRU5fVklSVF0pOworICAgIH0KKyAgICB2bV9lbmRbdHlwZV0gPSBQRk5fRE9XTihl bmQgLSB2bV9iYXNlW3R5cGVdKTsKKyAgICB2bV9sb3dbdHlwZV09IFBGTl9VUCgodm1fZW5kW3R5 cGVdICsgNykgLyA4KTsKKyAgICBuciA9IFBGTl9VUCgodm1fbG93W3R5cGVdICsgNykgLyA4KTsK KyAgICB2bV90b3BbdHlwZV0gPSBuciAqIFBBR0VfU0laRSAqIDg7CiAKLSAgICBmb3IgKCBpID0g MCwgdmEgPSAodW5zaWduZWQgbG9uZyl2bV9iaXRtYXA7IGkgPCBucjsgKytpLCB2YSArPSBQQUdF X1NJWkUgKQorICAgIGZvciAoIGkgPSAwLCB2YSA9ICh1bnNpZ25lZCBsb25nKXZtX2JpdG1hcCh0 eXBlKTsgaSA8IG5yOyArK2ksIHZhICs9IFBBR0VfU0laRSApCiAgICAgewogICAgICAgICBzdHJ1 Y3QgcGFnZV9pbmZvICpwZyA9IGFsbG9jX2RvbWhlYXBfcGFnZShOVUxMLCAwKTsKIAogICAgICAg ICBtYXBfcGFnZXNfdG9feGVuKHZhLCBwYWdlX3RvX21mbihwZyksIDEsIFBBR0VfSFlQRVJWSVNP Uik7CiAgICAgICAgIGNsZWFyX3BhZ2UoKHZvaWQgKil2YSk7CiAgICAgfQotICAgIGJpdG1hcF9m aWxsKHZtX2JpdG1hcCwgdm1fbG93KTsKKyAgICBiaXRtYXBfZmlsbCh2bV9iaXRtYXAodHlwZSks IHZtX2xvd1t0eXBlXSk7CiAKICAgICAvKiBQb3B1bGF0ZSBwYWdlIHRhYmxlcyBmb3IgdGhlIGJp dG1hcCBpZiBuZWNlc3NhcnkuICovCi0gICAgcG9wdWxhdGVfcHRfcmFuZ2UodmEsIDAsIHZtX2xv dyAtIG5yKTsKKyAgICBwb3B1bGF0ZV9wdF9yYW5nZSh2YSwgMCwgdm1fbG93W3R5cGVdIC0gbnIp OwogfQogCi12b2lkICp2bV9hbGxvYyh1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGludCBhbGln bikKK3ZvaWQgX19pbml0IHZtX2luaXQodm9pZCkKK3sKKyAgICB2bV9pbml0X3R5cGUoVk1BUF9W SVJUKTsKKyNpZmRlZiBDT05GSUdfWFNQTElDRQorICAgIHZtX2luaXRfdHlwZShYRU5fVklSVCk7 CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgKnZtX2FsbG9jX3R5cGUodW5zaWduZWQgaW50IG5y LCB1bnNpZ25lZCBpbnQgYWxpZ24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnVtIHZt YXBfdHlwZSB0KQogewogICAgIHVuc2lnbmVkIGludCBzdGFydCwgYml0OwogCkBAIC01MiwyNyAr NzMsMzAgQEAgdm9pZCAqdm1fYWxsb2ModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQgYWxp Z24pCiAgICAgZWxzZSBpZiAoIGFsaWduICYgKGFsaWduIC0gMSkgKQogICAgICAgICBhbGlnbiAm PSAtYWxpZ247CiAKKyAgICBpZiAoICF2bV9iYXNlW3RdICkKKyAgICAgICAgcmV0dXJuIE5VTEw7 CisKICAgICBzcGluX2xvY2soJnZtX2xvY2spOwogICAgIGZvciAoIDsgOyApCiAgICAgewogICAg ICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZzsKIAotICAgICAgICBBU1NFUlQodm1fbG93ID09IHZt X3RvcCB8fCAhdGVzdF9iaXQodm1fbG93LCB2bV9iaXRtYXApKTsKLSAgICAgICAgZm9yICggc3Rh cnQgPSB2bV9sb3c7IHN0YXJ0IDwgdm1fdG9wOyApCisgICAgICAgIEFTU0VSVCh2bV9sb3dbdF0g PT0gdm1fdG9wW3RdIHx8ICF0ZXN0X2JpdCh2bV9sb3dbdF0sIHZtX2JpdG1hcCh0KSkpOworICAg ICAgICBmb3IgKCBzdGFydCA9IHZtX2xvd1t0XTsgc3RhcnQgPCB2bV90b3BbdF07ICkKICAgICAg ICAgewotICAgICAgICAgICAgYml0ID0gZmluZF9uZXh0X2JpdCh2bV9iaXRtYXAsIHZtX3RvcCwg c3RhcnQgKyAxKTsKLSAgICAgICAgICAgIGlmICggYml0ID4gdm1fdG9wICkKLSAgICAgICAgICAg ICAgICBiaXQgPSB2bV90b3A7CisgICAgICAgICAgICBiaXQgPSBmaW5kX25leHRfYml0KHZtX2Jp dG1hcCh0KSwgdm1fdG9wW3RdLCBzdGFydCArIDEpOworICAgICAgICAgICAgaWYgKCBiaXQgPiB2 bV90b3BbdF0gKQorICAgICAgICAgICAgICAgIGJpdCA9IHZtX3RvcFt0XTsKICAgICAgICAgICAg IC8qCiAgICAgICAgICAgICAgKiBOb3RlIHRoYXQgdGhpcyBza2lwcyB0aGUgZmlyc3QgYml0LCBt YWtpbmcgdGhlCiAgICAgICAgICAgICAgKiBjb3JyZXNwb25kaW5nIHBhZ2UgYSBndWFyZCBvbmUu CiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHN0YXJ0ID0gKHN0YXJ0ICsgYWxpZ24pICYg fihhbGlnbiAtIDEpOwotICAgICAgICAgICAgaWYgKCBiaXQgPCB2bV90b3AgKQorICAgICAgICAg ICAgaWYgKCBiaXQgPCB2bV90b3BbdF0gKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAg IGlmICggc3RhcnQgKyBuciA8IGJpdCApCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg ICAgICAgICAgICAgIHN0YXJ0ID0gZmluZF9uZXh0X3plcm9fYml0KHZtX2JpdG1hcCwgdm1fdG9w LCBiaXQgKyAxKTsKKyAgICAgICAgICAgICAgICBzdGFydCA9IGZpbmRfbmV4dF96ZXJvX2JpdCh2 bV9iaXRtYXAodCksIHZtX3RvcFt0XSwgYml0ICsgMSk7CiAgICAgICAgICAgICB9CiAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICB7CkBAIC04MiwxMiArMTA2LDEyIEBAIHZvaWQgKnZtX2Fs bG9jKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsaWduKQogICAgICAgICAgICAgfQog ICAgICAgICB9CiAKLSAgICAgICAgaWYgKCBzdGFydCA8IHZtX3RvcCApCisgICAgICAgIGlmICgg c3RhcnQgPCB2bV90b3BbdF0gKQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgc3Bpbl91 bmxvY2soJnZtX2xvY2spOwogCi0gICAgICAgIGlmICggdm1fdG9wID49IHZtX2VuZCApCisgICAg ICAgIGlmICggdm1fdG9wW3RdID49IHZtX2VuZFt0XSApCiAgICAgICAgICAgICByZXR1cm4gTlVM TDsKIAogICAgICAgICBwZyA9IGFsbG9jX2RvbWhlYXBfcGFnZShOVUxMLCAwKTsKQEAgLTk2LDIz ICsxMjAsMjMgQEAgdm9pZCAqdm1fYWxsb2ModW5zaWduZWQgaW50IG5yLCB1bnNpZ25lZCBpbnQg YWxpZ24pCiAKICAgICAgICAgc3Bpbl9sb2NrKCZ2bV9sb2NrKTsKIAotICAgICAgICBpZiAoIHN0 YXJ0ID49IHZtX3RvcCApCisgICAgICAgIGlmICggc3RhcnQgPj0gdm1fdG9wW3RdICkKICAgICAg ICAgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YSA9ICh1bnNpZ25lZCBsb25nKXZtX2Jp dG1hcCArIHZtX3RvcCAvIDg7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHZhID0gKHVuc2ln bmVkIGxvbmcpdm1fYml0bWFwKHQpICsgdm1fdG9wW3RdIC8gODsKIAogICAgICAgICAgICAgaWYg KCAhbWFwX3BhZ2VzX3RvX3hlbih2YSwgcGFnZV90b19tZm4ocGcpLCAxLCBQQUdFX0hZUEVSVklT T1IpICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBjbGVhcl9wYWdlKCh2b2lkICop dmEpOwotICAgICAgICAgICAgICAgIHZtX3RvcCArPSBQQUdFX1NJWkUgKiA4OwotICAgICAgICAg ICAgICAgIGlmICggdm1fdG9wID4gdm1fZW5kICkKLSAgICAgICAgICAgICAgICAgICAgdm1fdG9w ID0gdm1fZW5kOworICAgICAgICAgICAgICAgIHZtX3RvcFt0XSArPSBQQUdFX1NJWkUgKiA4Owor ICAgICAgICAgICAgICAgIGlmICggdm1fdG9wW3RdID4gdm1fZW5kW3RdICkKKyAgICAgICAgICAg ICAgICAgICAgdm1fdG9wW3RdID0gdm1fZW5kW3RdOwogICAgICAgICAgICAgICAgIGNvbnRpbnVl OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgZnJlZV9kb21oZWFwX3BhZ2Uo cGcpOwogCi0gICAgICAgIGlmICggc3RhcnQgPj0gdm1fdG9wICkKKyAgICAgICAgaWYgKCBzdGFy dCA+PSB2bV90b3BbdF0gKQogICAgICAgICB7CiAgICAgICAgICAgICBzcGluX3VubG9jaygmdm1f bG9jayk7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTEyMCw0NyArMTQ0LDU2IEBAIHZv aWQgKnZtX2FsbG9jKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsaWduKQogICAgIH0K IAogICAgIGZvciAoIGJpdCA9IHN0YXJ0OyBiaXQgPCBzdGFydCArIG5yOyArK2JpdCApCi0gICAg ICAgIF9fc2V0X2JpdChiaXQsIHZtX2JpdG1hcCk7Ci0gICAgaWYgKCBiaXQgPCB2bV90b3AgKQot ICAgICAgICBBU1NFUlQoIXRlc3RfYml0KGJpdCwgdm1fYml0bWFwKSk7CisgICAgICAgIF9fc2V0 X2JpdChiaXQsIHZtX2JpdG1hcCh0KSk7CisgICAgaWYgKCBiaXQgPCB2bV90b3BbdF0gKQorICAg ICAgICBBU1NFUlQoIXRlc3RfYml0KGJpdCwgdm1fYml0bWFwKHQpKSk7CiAgICAgZWxzZQotICAg ICAgICBBU1NFUlQoYml0ID09IHZtX3RvcCk7Ci0gICAgaWYgKCBzdGFydCA8PSB2bV9sb3cgKyAy ICkKLSAgICAgICAgdm1fbG93ID0gYml0OworICAgICAgICBBU1NFUlQoYml0ID09IHZtX3RvcFt0 XSk7CisgICAgaWYgKCBzdGFydCA8PSB2bV9sb3dbdF0gKyAyICkKKyAgICAgICAgdm1fbG93W3Rd ID0gYml0OwogICAgIHNwaW5fdW5sb2NrKCZ2bV9sb2NrKTsKIAotICAgIHJldHVybiB2bV9iYXNl ICsgc3RhcnQgKiBQQUdFX1NJWkU7CisgICAgcmV0dXJuIHZtX2Jhc2VbdF0gKyBzdGFydCAqIFBB R0VfU0laRTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCB2bV9pbmRleChjb25zdCB2b2lkICp2 YSkKK3ZvaWQgKnZtX2FsbG9jKHVuc2lnbmVkIGludCBuciwgdW5zaWduZWQgaW50IGFsaWduKQor eworICAgIHJldHVybiB2bV9hbGxvY190eXBlKG5yLCBhbGlnbiwgVk1BUF9WSVJUKTsKK30KKwor c3RhdGljIHVuc2lnbmVkIGludCB2bV9pbmRleChjb25zdCB2b2lkICp2YSwgZW51bSB2bWFwX3R5 cGUgdHlwZSkKIHsKICAgICB1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZyl2YSAm IH4oUEFHRV9TSVpFIC0gMSk7CiAgICAgdW5zaWduZWQgaW50IGlkeDsKKyAgICB1bnNpZ25lZCBs b25nIHN0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpdm1fYmFzZVt0eXBlXTsKKworICAgIGlmICggIXN0 YXJ0KQorICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmICggYWRkciA8IFZNQVBfVklSVF9TVEFS VCArICh2bV9lbmQgLyA4KSB8fAotICAgICAgICAgYWRkciA+PSBWTUFQX1ZJUlRfU1RBUlQgKyB2 bV90b3AgKiBQQUdFX1NJWkUgKQorICAgIGlmICggYWRkciA8IHN0YXJ0ICsgKHZtX2VuZFt0eXBl XSAvIDgpIHx8CisgICAgICAgICBhZGRyID49IHN0YXJ0ICsgdm1fdG9wW3R5cGVdICogUEFHRV9T SVpFICkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZHggPSBQRk5fRE9XTih2YSAtIHZtX2Jh c2UpOwotICAgIHJldHVybiAhdGVzdF9iaXQoaWR4IC0gMSwgdm1fYml0bWFwKSAmJgotICAgICAg ICAgICB0ZXN0X2JpdChpZHgsIHZtX2JpdG1hcCkgPyBpZHggOiAwOworICAgIGlkeCA9IFBGTl9E T1dOKHZhIC0gdm1fYmFzZVt0eXBlXSk7CisgICAgcmV0dXJuICF0ZXN0X2JpdChpZHggLSAxLCB2 bV9iaXRtYXAodHlwZSkpICYmCisgICAgICAgICAgIHRlc3RfYml0KGlkeCwgdm1fYml0bWFwKHR5 cGUpKSA/IGlkeCA6IDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdm1fc2l6ZShjb25zdCB2 b2lkICp2YSkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdm1fc2l6ZShjb25zdCB2b2lkICp2YSwgZW51 bSB2bWFwX3R5cGUgdHlwZSkKIHsKLSAgICB1bnNpZ25lZCBpbnQgc3RhcnQgPSB2bV9pbmRleCh2 YSksIGVuZDsKKyAgICB1bnNpZ25lZCBpbnQgc3RhcnQgPSB2bV9pbmRleCh2YSwgdHlwZSksIGVu ZDsKIAogICAgIGlmICggIXN0YXJ0ICkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBlbmQgPSBm aW5kX25leHRfemVyb19iaXQodm1fYml0bWFwLCB2bV90b3AsIHN0YXJ0ICsgMSk7CisgICAgZW5k ID0gZmluZF9uZXh0X3plcm9fYml0KHZtX2JpdG1hcCh0eXBlKSwgdm1fdG9wW3R5cGVdLCBzdGFy dCArIDEpOwogCi0gICAgcmV0dXJuIG1pbihlbmQsIHZtX3RvcCkgLSBzdGFydDsKKyAgICByZXR1 cm4gbWluKGVuZCwgdm1fdG9wW3R5cGVdKSAtIHN0YXJ0OwogfQogCi12b2lkIHZtX2ZyZWUoY29u c3Qgdm9pZCAqdmEpCitzdGF0aWMgdm9pZCB2bV9mcmVlX3R5cGUoY29uc3Qgdm9pZCAqdmEsIGVu dW0gdm1hcF90eXBlIHR5cGUpCiB7Ci0gICAgdW5zaWduZWQgaW50IGJpdCA9IHZtX2luZGV4KHZh KTsKKyAgICB1bnNpZ25lZCBpbnQgYml0ID0gdm1faW5kZXgodmEsIHR5cGUpOwogCiAgICAgaWYg KCAhYml0ICkKICAgICB7CkBAIC0xNjksMjIgKzIwMiwyOCBAQCB2b2lkIHZtX2ZyZWUoY29uc3Qg dm9pZCAqdmEpCiAgICAgfQogCiAgICAgc3Bpbl9sb2NrKCZ2bV9sb2NrKTsKLSAgICBpZiAoIGJp dCA8IHZtX2xvdyApCisgICAgaWYgKCBiaXQgPCB2bV9sb3dbdHlwZV0gKQogICAgIHsKLSAgICAg ICAgdm1fbG93ID0gYml0IC0gMTsKLSAgICAgICAgd2hpbGUgKCAhdGVzdF9iaXQodm1fbG93IC0g MSwgdm1fYml0bWFwKSApCi0gICAgICAgICAgICAtLXZtX2xvdzsKKyAgICAgICAgdm1fbG93W3R5 cGVdID0gYml0IC0gMTsKKyAgICAgICAgd2hpbGUgKCAhdGVzdF9iaXQodm1fbG93W3R5cGVdIC0g MSwgdm1fYml0bWFwKHR5cGUpKSApCisgICAgICAgICAgICAtLXZtX2xvd1t0eXBlXTsKICAgICB9 Ci0gICAgd2hpbGUgKCBfX3Rlc3RfYW5kX2NsZWFyX2JpdChiaXQsIHZtX2JpdG1hcCkgKQotICAg ICAgICBpZiAoICsrYml0ID09IHZtX3RvcCApCisgICAgd2hpbGUgKCBfX3Rlc3RfYW5kX2NsZWFy X2JpdChiaXQsIHZtX2JpdG1hcCh0eXBlKSkgKQorICAgICAgICBpZiAoICsrYml0ID09IHZtX3Rv cFt0eXBlXSApCiAgICAgICAgICAgICBicmVhazsKICAgICBzcGluX3VubG9jaygmdm1fbG9jayk7 CiB9CiAKK3ZvaWQgdm1fZnJlZShjb25zdCB2b2lkICp2YSkKK3sKKyAgICB2bV9mcmVlX3R5cGUo dmEsIFZNQVBfVklSVCk7Cit9CisKIHZvaWQgKl9fdm1hcChjb25zdCBtZm5fdCAqbWZuLCB1bnNp Z25lZCBpbnQgZ3JhbnVsYXJpdHksCi0gICAgICAgICAgICAgdW5zaWduZWQgaW50IG5yLCB1bnNp Z25lZCBpbnQgYWxpZ24sIHVuc2lnbmVkIGludCBmbGFncykKKyAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgbnIsIHVuc2lnbmVkIGludCBhbGlnbiwgdW5zaWduZWQgaW50IGZsYWdzLAorICAgICAg ICAgICAgIGVudW0gdm1hcF90eXBlIHR5cGUpCiB7Ci0gICAgdm9pZCAqdmEgPSB2bV9hbGxvYyhu ciAqIGdyYW51bGFyaXR5LCBhbGlnbik7CisgICAgdm9pZCAqdmEgPSB2bV9hbGxvY190eXBlKG5y ICogZ3JhbnVsYXJpdHksIGFsaWduLCB0eXBlKTsKICAgICB1bnNpZ25lZCBsb25nIGN1ciA9ICh1 bnNpZ25lZCBsb25nKXZhOwogCiAgICAgZm9yICggOyB2YSAmJiBuci0tOyArK21mbiwgY3VyICs9 IFBBR0VfU0laRSAqIGdyYW51bGFyaXR5ICkKQEAgLTIwMSwyMiArMjQwLDMzIEBAIHZvaWQgKl9f dm1hcChjb25zdCBtZm5fdCAqbWZuLCB1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHksCiAKIHZvaWQg KnZtYXAoY29uc3QgbWZuX3QgKm1mbiwgdW5zaWduZWQgaW50IG5yKQogewotICAgIHJldHVybiBf X3ZtYXAobWZuLCAxLCBuciwgMSwgUEFHRV9IWVBFUlZJU09SKTsKKyAgICByZXR1cm4gX192bWFw KG1mbiwgMSwgbnIsIDEsIFBBR0VfSFlQRVJWSVNPUiwgVk1BUF9WSVJUKTsKIH0KIAogdm9pZCB2 dW5tYXAoY29uc3Qgdm9pZCAqdmEpCiB7CisgICAgZW51bSB2bWFwX3R5cGUgdHlwZSA9IFZNQVBf VklSVDsKKyAgICB1bnNpZ25lZCBpbnQgc2l6ZSA9IHZtX3NpemUodmEsIHR5cGUpOworI2lmbmRl ZiBfUEFHRV9OT05FCisgICAgdW5zaWduZWQgbG9uZyBhZGRyOworI2VuZGlmCisKKyAgICBpZiAo ICFzaXplICkKKyAgICB7CisgICAgICAgIHR5cGUgPSBYRU5fVklSVDsKKyAgICAgICAgc2l6ZSA9 IHZtX3NpemUodmEsIHR5cGUpOworICAgIH0KICNpZm5kZWYgX1BBR0VfTk9ORQotICAgIHVuc2ln bmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXZhOworICAgIGFkZHIgPSAodW5zaWduZWQg bG9uZyl2YTsKIAotICAgIGRlc3Ryb3lfeGVuX21hcHBpbmdzKGFkZHIsIGFkZHIgKyBQQUdFX1NJ WkUgKiB2bV9zaXplKHZhKSk7CisgICAgZGVzdHJveV94ZW5fbWFwcGluZ3MoYWRkciwgYWRkciAr IFBBR0VfU0laRSAqIHNpemUpOwogI2Vsc2UgLyogQXZvaWQgdGVhcmluZyBkb3duIGludGVybWVk aWF0ZSBwYWdlIHRhYmxlcy4gKi8KLSAgICBtYXBfcGFnZXNfdG9feGVuKCh1bnNpZ25lZCBsb25n KXZhLCAwLCB2bV9zaXplKHZhKSwgX1BBR0VfTk9ORSk7CisgICAgbWFwX3BhZ2VzX3RvX3hlbigo dW5zaWduZWQgbG9uZyl2YSwgMCwgc2l6ZSwgX1BBR0VfTk9ORSk7CiAjZW5kaWYKLSAgICB2bV9m cmVlKHZhKTsKKyAgICB2bV9mcmVlX3R5cGUodmEsIHR5cGUpOwogfQogCi12b2lkICp2bWFsbG9j KHNpemVfdCBzaXplKQordm9pZCAqdm1hbGxvY190eXBlKHNpemVfdCBzaXplLCBlbnVtIHZtYXBf dHlwZSB0eXBlLCBtZm5fdCAqKm1mbl9hcnJheSkKIHsKICAgICBtZm5fdCAqbWZuOwogICAgIHNp emVfdCBwYWdlcywgaTsKQEAgLTIzOCwxMSArMjg4LDE1IEBAIHZvaWQgKnZtYWxsb2Moc2l6ZV90 IHNpemUpCiAgICAgICAgIG1mbltpXSA9IF9tZm4ocGFnZV90b19tZm4ocGcpKTsKICAgICB9CiAK LSAgICB2YSA9IHZtYXAobWZuLCBwYWdlcyk7CisgICAgdmEgPSBfX3ZtYXAobWZuLCAxLCBwYWdl cywgMSwgUEFHRV9IWVBFUlZJU09SLCB0eXBlKTsKICAgICBpZiAoIHZhID09IE5VTEwgKQogICAg ICAgICBnb3RvIGVycm9yOwogCi0gICAgeGZyZWUobWZuKTsKKyAgICBpZiAoIG1mbl9hcnJheSAp CisgICAgICAgICptZm5fYXJyYXkgPSBtZm47CisgICAgZWxzZQorICAgICAgICB4ZnJlZShtZm4p OworCiAgICAgcmV0dXJuIHZhOwogCiAgZXJyb3I6CkBAIC0yNTIsNiArMzA2LDExIEBAIHZvaWQg KnZtYWxsb2Moc2l6ZV90IHNpemUpCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKK3ZvaWQgKnZtYWxs b2Moc2l6ZV90IHNpemUpCit7CisgICAgcmV0dXJuIHZtYWxsb2NfdHlwZShzaXplLCBWTUFQX1ZJ UlQsIE5VTEwpOworfQorCiB2b2lkICp2emFsbG9jKHNpemVfdCBzaXplKQogewogICAgIHZvaWQg KnAgPSB2bWFsbG9jKHNpemUpOwpAQCAtMjc1LDcgKzMzNCwxMCBAQCB2b2lkIHZmcmVlKHZvaWQg KnZhKQogICAgIGlmICggIXZhICkKICAgICAgICAgcmV0dXJuOwogCi0gICAgcGFnZXMgPSB2bV9z aXplKHZhKTsKKyAgICBwYWdlcyA9IHZtX3NpemUodmEsIFZNQVBfVklSVCk7CisgICAgaWYgKCAh cGFnZXMgKQorICAgICAgICBwYWdlcyA9IHZtX3NpemUodmEsIFhFTl9WSVJUKTsKKwogICAgIEFT U0VSVChwYWdlcyk7CiAKICAgICBmb3IgKCBpID0gMDsgaSA8IHBhZ2VzOyBpKysgKQpkaWZmIC0t Z2l0IGEveGVuL2RyaXZlcnMvYWNwaS9vc2wuYyBiL3hlbi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5k ZXggOGEyOGQ4Ny4uNjZiZWM3OCAxMDA2NDQKLS0tIGEveGVuL2RyaXZlcnMvYWNwaS9vc2wuYwor KysgYi94ZW4vZHJpdmVycy9hY3BpL29zbC5jCkBAIC05Nyw3ICs5Nyw3IEBAIGFjcGlfb3NfbWFw X21lbW9yeShhY3BpX3BoeXNpY2FsX2FkZHJlc3MgcGh5cywgYWNwaV9zaXplIHNpemUpCiAJCWlm IChJU19FTkFCTEVEKENPTkZJR19YODYpICYmICEoKHBoeXMgKyBzaXplIC0gMSkgPj4gMjApKQog CQkJcmV0dXJuIF9fdmEocGh5cyk7CiAJCXJldHVybiBfX3ZtYXAoJm1mbiwgUEZOX1VQKG9mZnMg KyBzaXplKSwgMSwgMSwKLQkJCSAgICAgIEFDUElfTUFQX01FTV9BVFRSKSArIG9mZnM7CisJCQkg ICAgICBBQ1BJX01BUF9NRU1fQVRUUiwgVk1BUF9WSVJUKSArIG9mZnM7CiAJfQogCXJldHVybiBf X2FjcGlfbWFwX3RhYmxlKHBoeXMsIHNpemUpOwogfQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv YXNtLXg4Ni94ODZfNjQvcGFnZS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni94ODZfNjQvcGFnZS5o CmluZGV4IDg2YWJiOTQuLmE4NTRlMDUgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYv eDg2XzY0L3BhZ2UuaAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L3g4Nl82NC9wYWdlLmgKQEAg LTM4LDYgKzM4LDggQEAKICNpbmNsdWRlIDx4ZW4vcGR4Lmg+CiAKIGV4dGVybiB1bnNpZ25lZCBs b25nIHhlbl92aXJ0X2VuZDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGF2YWlsX3ZpcnRfc3RhcnQ7 CitleHRlcm4gdW5zaWduZWQgbG9uZyBhdmFpbF92aXJ0X2VuZDsKIAogI2RlZmluZSBzcGFnZV90 b19wZHgoc3BnKSAoKChzcGcpIC0gc3BhZ2VfdGFibGUpPDwoU1VQRVJQQUdFX1NISUZULVBBR0Vf U0hJRlQpKQogI2RlZmluZSBwZHhfdG9fc3BhZ2UocGR4KSAoc3BhZ2VfdGFibGUgKyAoKHBkeCk+ PihTVVBFUlBBR0VfU0hJRlQtUEFHRV9TSElGVCkpKQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUv eGVuL3ZtYXAuaCBiL3hlbi9pbmNsdWRlL3hlbi92bWFwLmgKaW5kZXggNTY3MWFjOC4uNDkyZDNl NyAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUveGVuL3ZtYXAuaAorKysgYi94ZW4vaW5jbHVkZS94 ZW4vdm1hcC5oCkBAIC00LDE0ICs0LDI1IEBACiAjaW5jbHVkZSA8eGVuL21tLmg+CiAjaW5jbHVk ZSA8YXNtL3BhZ2UuaD4KIAorLyogVGhlc2UgdHdvIGZ1bmN0aW9ucyBvcGVyYXRlIG9ubHkgb24g Vk1BUF9WSVJUIGFkZHJlc3Mgc3BhY2UuICovCiB2b2lkICp2bV9hbGxvYyh1bnNpZ25lZCBpbnQg bnIsIHVuc2lnbmVkIGludCBhbGlnbik7CiB2b2lkIHZtX2ZyZWUoY29uc3Qgdm9pZCAqKTsKIAot dm9pZCAqX192bWFwKGNvbnN0IG1mbl90ICptZm4sIHVuc2lnbmVkIGludCBncmFudWxhcml0eSwK LSAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbnIsIHVuc2lnbmVkIGludCBhbGlnbiwgdW5zaWdu ZWQgaW50IGZsYWdzKTsKK2VudW0gdm1hcF90eXBlIHsKKyAgICBWTUFQX1ZJUlQsCisgICAgWEVO X1ZJUlQsCisgICAgVk1BUF9UWVBFX01BWCwKK307CisKK3ZvaWQgKl9fdm1hcChjb25zdCBtZm5f dCAqbWZuLCB1bnNpZ25lZCBpbnQgZ3JhbnVsYXJpdHksIHVuc2lnbmVkIGludCBuciwKKyAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgYWxpZ24sIHVuc2lnbmVkIGludCBmbGFncywgZW51bSB2bWFw X3R5cGUpOwogdm9pZCAqdm1hcChjb25zdCBtZm5fdCAqbWZuLCB1bnNpZ25lZCBpbnQgbnIpOwog dm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqKTsKKy8qIE9ubHkgb3BlcmF0ZXMgb24gVk1BUF9WSVJU LiAqLwogdm9pZCAqdm1hbGxvYyhzaXplX3Qgc2l6ZSk7CisKK3ZvaWQgKnZtYWxsb2NfdHlwZShz aXplX3Qgc2l6ZSwgZW51bSB2bWFwX3R5cGUgdHlwZSwgbWZuX3QgKiptZm5fYXJyYXkpOworCiB2 b2lkICp2emFsbG9jKHNpemVfdCBzaXplKTsKIHZvaWQgdmZyZWUodm9pZCAqdmEpOwogCi0tIAoy LjQuMwoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhl bi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==