From mboxrd@z Thu Jan 1 00:00:00 1970 From: Zhongze Liu Subject: Re: [PATCH 5/6] libxl: support mapping static shared memory areas during domain creation Date: Wed, 23 Aug 2017 10:37:50 +0800 Message-ID: References: <20170822180840.20981-1-blackskygg@gmail.com> <20170822180840.20981-6-blackskygg@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Stefano Stabellini Cc: Tim Deegan , Wei Liu , George Dunlap , Andrew Cooper , Ian Jackson , xen-devel@lists.xen.org, Julien Grall , Jan Beulich List-Id: xen-devel@lists.xenproject.org SGkgU3RlZmFubywKCjIwMTctMDgtMjMgNTo0MiBHTVQrMDg6MDAgU3RlZmFubyBTdGFiZWxsaW5p IDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPjoKPiBPbiBXZWQsIDIzIEF1ZyAyMDE3LCBaaG9uZ3pl IExpdSB3cm90ZToKPj4gQWRkIGxpYnhsX19zc2htX2FkZCB0byBtYXAgc2hhcmVkIHBhZ2VzIGZy b20gb25lIERvbVUgdG8gYW5vdGhlciwgVGhlIG1hcHBpbmcKPj4gcHJvY2VzcyBpbnZvbHZlcyB0 aGUgZm9sbHdpbmcgc3RlcHM6Cj4+Cj4+ICAgKiBTZXQgZGVmYXVsdHMgYW5kIGNoZWNrIGZvciBm dXJ0aGVyIGVycm9ycyBpbiB0aGUgc3RhdGljX3NobSBjb25maWdzOgo+PiAgICAgb3ZlcmxhcHBp bmcgYXJlYXMsIGludmFsaWQgcmFuZ2VzLCBkdXBsaWNhdGVkIG1hc3RlciBkb21haW4sCj4+ICAg ICBubyBtYXN0ZXIgZG9tYWluIGV0Yy4KPj4gICAqIFdyaXRlIGluZm9tYXRpb24gb2Ygc3RhdGlj IHNoYXJlZCBtZW1vcnkgYXJlYXMgaW50byB0aGUgYXBwcm9wcmlhdGUKPj4gICAgIHhlbnN0b3Jl IHBhdGhzLgo+PiAgICogdXNlIHhjX2RvbWFpbl9hZGRfdG9fcGh5c21hcF9iYXRjaCB0byBkbyB0 aGUgcGFnZSBzaGFyaW5nLgo+Pgo+PiBUZW1wb3JhcmlseSBtYXJrIHRoaXMgYXMgdW5zdXBwb3J0 ZWQgb24geDg2IGJlY2F1c2UgY2FsbGluZyBwMm1fYWRkX2ZvcmVnaW4gb24KPj4gdHdvIGRvbVUn cyBpcyBjdXJyZW50bHkgbm90IGFsbG93ZCBvbiB4ODYgKHNlZSB0aGUgY29tbWVudHMgaW4KPj4g eDg2L21tL3AybS5jOnAybV9hZGRfZm9yZWdpbiBmb3IgbW9yZSBkZXRhaWxzKS4KPj4KPj4gVGhp cyBpcyBmb3IgdGhlIHByb3Bvc2FsICJBbGxvdyBzZXR0aW5nIHVwIHNoYXJlZCBtZW1vcnkgYXJl YXMgYmV0d2VlbiBWTXMKPj4gZnJvbSB4bCBjb25maWcgZmlsZSIgKHNlZSBbMV0pLgo+Pgo+PiBb MV0gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9hcmNoaXZlcy9odG1sL3hlbi1kZXZlbC8y MDE3LTA3L21zZzAzMDQ3Lmh0bWwKPj4KPj4gU2lnbmVkLW9mZi1ieTogWmhvbmd6ZSBMaXUgPGJs YWNrc2t5Z2dAZ21haWwuY29tPgo+Pgo+PiBDYzogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3Bl cjNAY2l0cml4LmNvbT4KPj4gQ2M6IEdlb3JnZSBEdW5sYXAgPEdlb3JnZS5EdW5sYXBAZXUuY2l0 cml4LmNvbT4KPj4gQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgo+ PiBDYzogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1c2UuY29tPgo+PiBDYzogS29ucmFkIFJ6ZXN6 dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgo+PiBDYzogU3RlZmFubyBTdGFiZWxs aW5pIDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgo+PiBDYzogVGltIERlZWdhbiA8dGltQHhlbi5v cmc+Cj4+IENjOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgo+PiBDYzogSnVsaWVuIEdy YWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KPj4gQ2M6IHhlbi1kZXZlbEBsaXN0cy54ZW4ub3Jn Cj4+IC0tLQo+PiAgdG9vbHMvbGlieGwvTWFrZWZpbGUgICAgICAgICB8ICAgMiArLQo+PiAgdG9v bHMvbGlieGwvbGlieGxfYXJjaC5oICAgICB8ICAgNiArCj4+ICB0b29scy9saWJ4bC9saWJ4bF9h cm0uYyAgICAgIHwgIDE1ICsrCj4+ICB0b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYyAgIHwgIDI3 ICsrKysKPj4gIHRvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggfCAgMTQgKysKPj4gIHRvb2xz L2xpYnhsL2xpYnhsX3NzaG0uYyAgICAgfCAzMzYgKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwo+PiAgdG9vbHMvbGlieGwvbGlieGxfeDg2LmMgICAgICB8ICAxOCAr KysKPj4gIHRvb2xzL2xpYnhsL2xpYnhsX3hzaGVscC5jICAgfCAgIDggKysKPj4gIDggZmlsZXMg Y2hhbmdlZCwgNDI1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCB0b29scy9saWJ4bC9saWJ4bF9zc2htLmMKPj4KPj4gZGlmZiAtLWdpdCBhL3Rvb2xz L2xpYnhsL01ha2VmaWxlIGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKPj4gaW5kZXggM2I2M2ZiMmNh ZC4uZmQ2MjRiMjhmMyAxMDA2NDQKPj4gLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKPj4gKysr IGIvdG9vbHMvbGlieGwvTWFrZWZpbGUKPj4gQEAgLTEzOCw3ICsxMzgsNyBAQCBMSUJYTF9PQkpT ID0gZmxleGFycmF5Lm8gbGlieGwubyBsaWJ4bF9jcmVhdGUubyBsaWJ4bF9kbS5vIGxpYnhsX3Bj aS5vIFwKPj4gICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RvbV9zdXNwZW5kLm8gbGlieGxf ZG9tX3NhdmUubyBsaWJ4bF91c2IubyBcCj4+ICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF92 dHBtLm8gbGlieGxfbmljLm8gbGlieGxfZGlzay5vIGxpYnhsX2NvbnNvbGUubyBcCj4+ICAgICAg ICAgICAgICAgICAgICAgICBsaWJ4bF9jcHVwb29sLm8gbGlieGxfbWVtLm8gbGlieGxfc2NoZWQu byBsaWJ4bF90bWVtLm8gXAo+PiAtICAgICAgICAgICAgICAgICAgICAgbGlieGxfOXBmcy5vIGxp YnhsX2RvbWFpbi5vIFwKPj4gKyAgICAgICAgICAgICAgICAgICAgIGxpYnhsXzlwZnMubyBsaWJ4 bF9kb21haW4ubyBsaWJ4bF9zc2htLm8gXAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgJChM SUJYTF9PQkpTLXkpCj4+ICBMSUJYTF9PQkpTICs9IGxpYnhsX2dlbmlkLm8KPj4gIExJQlhMX09C SlMgKz0gX2xpYnhsX3R5cGVzLm8gbGlieGxfZmxhc2subyBfbGlieGxfdHlwZXNfaW50ZXJuYWwu bwo+PiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5oIGIvdG9vbHMvbGlieGwv bGlieGxfYXJjaC5oCj4+IGluZGV4IDVlMWZjNjA2MGUuLjFkNjgxZDg4NjMgMTAwNjQ0Cj4+IC0t LSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaAo+PiArKysgYi90b29scy9saWJ4bC9saWJ4bF9h cmNoLmgKPj4gQEAgLTcxLDYgKzcxLDEyIEBAIGludCBsaWJ4bF9fYXJjaF9leHRyYV9tZW1vcnko bGlieGxfX2djICpnYywKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGli eGxfZG9tYWluX2J1aWxkX2luZm8gKmluZm8sCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQ2NF90ICpvdXQpOwo+Pgo+PiArX2hpZGRlbgo+PiArYm9vbCBsaWJ4bF9fYXJjaF9k b21haW5fc3VwcG9ydF9zc2htKGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8p Owo+PiArCj4+ICtfaGlkZGVuCj4+ICtpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVw b2xpY3lfc2V0ZGVmYXVsdChsaWJ4bF9zdGF0aWNfc2htICpzc2htKTsKPj4gKwo+PiAgI2lmIGRl ZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKPj4KPj4gICNkZWZpbmUgTEFQ SUNfQkFTRV9BRERSRVNTICAweGZlZTAwMDAwCj4+IGRpZmYgLS1naXQgYS90b29scy9saWJ4bC9s aWJ4bF9hcm0uYyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jCj4+IGluZGV4IGQ4NDJkODg4ZWIu LjA5NzUxMDljMGMgMTAwNjQ0Cj4+IC0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jCj4+ICsr KyBiL3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jCj4+IEBAIC0xMDY1LDYgKzEwNjUsMjEgQEAgdm9p ZCBsaWJ4bF9fYXJjaF9kb21haW5fYnVpbGRfaW5mb19hY3BpX3NldGRlZmF1bHQoCj4+ICAgICAg bGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZiX2luZm8tPmFjcGksIGZhbHNlKTsKPj4gIH0KPj4K Pj4gK2Jvb2wgbGlieGxfX2FyY2hfZG9tYWluX3N1cHBvcnRfc3NobShjb25zdCBsaWJ4bF9kb21h aW5fYnVpbGRfaW5mbyAqYl9pbmZvKQo+PiArewo+PiArICAgIHJldHVybiB0cnVlOwo+PiArfQo+ PiArCj4+ICtpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVmYXVs dChsaWJ4bF9zdGF0aWNfc2htICpzc2htKQo+PiArewo+PiArICAgIGlmIChzc2htLT5jYWNoZV9w b2xpY3kgPT0gTElCWExfU1NITV9DQUNIRVBPTElDWV9VTktOT1dOKQo+PiArICAgICAgICBzc2ht LT5jYWNoZV9wb2xpY3kgPSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX0FSTV9OT1JNQUw7Cj4+ICsg ICAgaWYgKHNzaG0tPmNhY2hlX3BvbGljeSA+PSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1g4Nl9O T1JNQUwpCj4+ICsgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKPj4gKwo+PiArICAgIHJldHVy biAwOwo+PiArfQo+PiArCj4+ICAvKgo+PiAgICogTG9jYWwgdmFyaWFibGVzOgo+PiAgICogbW9k ZTogQwo+PiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMgYi90b29scy9s aWJ4bC9saWJ4bF9jcmVhdGUuYwo+PiBpbmRleCAxMTU4MzAzZTFhLi44ZTVlYzQ4NmQyIDEwMDY0 NAo+PiAtLS0gYS90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwo+PiArKysgYi90b29scy9saWJ4 bC9saWJ4bF9jcmVhdGUuYwo+PiBAQCAtNTAxLDYgKzUwMSwxNCBAQCBpbnQgbGlieGxfX2RvbWFp bl9idWlsZChsaWJ4bF9fZ2MgKmdjLAo+PiAgICAgICAgICByZXQgPSBFUlJPUl9JTlZBTDsKPj4g ICAgICAgICAgZ290byBvdXQ7Cj4+ICAgICAgfQo+PiArCj4+ICsgICAgLyogdGhlIHAybSBoYXMg YmVlbiBzZXR1cCwgd2UgY291bGQgbWFwIHRoZSBzdGF0aWMgc2hhcmVkIG1lbW9yeSBub3cuICov Cj4+ICsgICAgcmV0ID0gbGlieGxfX3NzaG1fYWRkKGdjLCBkb21pZCwgZF9jb25maWctPnNzaG1z LCBkX2NvbmZpZy0+bnVtX3NzaG1zKTsKPj4gKyAgICBpZiAocmV0ICE9IDApIHsKPj4gKyAgICAg ICAgTE9HKEVSUk9SLCAiZmFpbGVkIHRvIG1hcCBzdGF0aWMgc2hhcmVkIG1lbW9yeSIpOwo+PiAr ICAgICAgICBnb3RvIG91dDsKPj4gKyAgICB9Cj4+ICsKPj4gICAgICByZXQgPSBsaWJ4bF9fYnVp bGRfcG9zdChnYywgZG9taWQsIGluZm8sIHN0YXRlLCB2bWVudHMsIGxvY2FsZW50cyk7Cj4+ICBv dXQ6Cj4+ICAgICAgcmV0dXJuIHJldDsKPj4gQEAgLTkxOCw2ICs5MjYsMjUgQEAgc3RhdGljIHZv aWQgaW5pdGlhdGVfZG9tYWluX2NyZWF0ZShsaWJ4bF9fZWdjICplZ2MsCj4+ICAgICAgICAgIGdv dG8gZXJyb3Jfb3V0Owo+PiAgICAgIH0KPj4KPj4gKyAgICBpZiAoZF9jb25maWctPm51bV9zc2ht cyAhPSAwICYmCj4+ICsgICAgICAgICFsaWJ4bF9fYXJjaF9kb21haW5fc3VwcG9ydF9zc2htKCZk X2NvbmZpZy0+Yl9pbmZvKSkgewo+PiArICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgInN0YXRp Y19zaG0gaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGRvbWFpbiB0eXBlLiIpOwo+PiArICAgICAg ICByZXQgPSBFUlJPUl9JTlZBTDsKPj4gKyAgICAgICAgZ290byBlcnJvcl9vdXQ7Cj4+ICsgICAg fQo+PiArCj4+ICsgICAgcmV0ID0gbGlieGxfX3NzaG1fY2hlY2tfb3ZlcmxhcChnYywgZG9taWQs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX2NvbmZpZy0+c3NobXMs IGRfY29uZmlnLT5udW1fc3NobXMpOwo+PiArICAgIGlmIChyZXQpIGdvdG8gZXJyb3Jfb3V0Owo+ Cj4gSSB0aGluayBpdCBtYWtlcyBzZW5zZSB0byBjYWxsIGxpYnhsX19zc2htX2NoZWNrX292ZXJs YXAgb25seSBpZgo+IG51bV9zc2htcyAhPSAwLgoKWWVzLgpCdXQgSSBwcmVmZXIgdG8gZG8gdGhl IGNoZWNrIGluc2lkZSBsaWJ4bF9fc3NobV9jaGVja19vdmVybGFwLiBKdXN0IGxpa2UKd2hhdCBs aWJ4bF9fc3NobV9hZGQgZG9lcy4KCj4KPgo+PiArICAgIGZvciAoaSA9IDA7IGkgPCBkX2NvbmZp Zy0+bnVtX3NzaG1zOyArK2kpIHsKPj4gKyAgICAgICAgcmV0ID0gbGlieGxfX3NzaG1fc2V0ZGVm YXVsdChnYywgZG9taWQsICZkX2NvbmZpZy0+c3NobXNbaV0pOwo+PiArICAgICAgICBpZiAocmV0 KSB7Cj4+ICsgICAgICAgICAgICBMT0dEKEVSUk9SLCBkb21pZCwgIlVuYWJsZSB0byBzZXQgZGVm YXVsdHMgZm9yIHN0YXRpYyBzc2htIik7Cj4+ICsgICAgICAgICAgICBnb3RvIGVycm9yX291dDsK Pj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+PiAgICAgIHJldCA9IGxpYnhsX19kb21haW5f bWFrZShnYywgZF9jb25maWcsICZkb21pZCwgJnN0YXRlLT5jb25maWcpOwo+PiAgICAgIGlmIChy ZXQpIHsKPj4gICAgICAgICAgTE9HRChFUlJPUiwgZG9taWQsICJjYW5ub3QgbWFrZSBkb21haW46 ICVkIiwgcmV0KTsKPj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgg Yi90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oCj4+IGluZGV4IDcyNDc1MDk2N2MuLjc0YmMw YWNiMjEgMTAwNjQ0Cj4+IC0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKPj4gKysr IGIvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAo+PiBAQCAtNzIxLDYgKzcyMSw3IEBAIF9o aWRkZW4gY2hhciAqKmxpYnhsX194c19kaXJlY3RvcnkobGlieGxfX2djICpnYywgeHNfdHJhbnNh Y3Rpb25fdCB0LAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICpwYXRoLCB1bnNpZ25lZCBpbnQgKm5iKTsKPj4gICAgIC8qIE9uIGVycm9yOiByZXR1cm5z IE5VTEwsIHNldHMgZXJybm8gKG5vIGxvZ2dpbmcpICovCj4+ICBfaGlkZGVuIGNoYXIgKmxpYnhs X194c19saWJ4bF9wYXRoKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkKTsKPj4gK19oaWRk ZW4gY2hhciAqbGlieGxfX3hzX2dldF9zc2htcGF0aChsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFy ICppZCk7Cj4+Cj4+ICBfaGlkZGVuIGludCBsaWJ4bF9fYmFja2VuZHBhdGhfcGFyc2VfZG9taWQo bGlieGxfX2djICpnYywgY29uc3QgY2hhciAqYmVfcGF0aCwKPj4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kb21pZCAqZG9taWRfb3V0KTsKPj4gQEAg LTQzNTIsNiArNDM1MywxOSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbGlieGxfX2FjcGlfZGVmYm9v bF92YWwoY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5mbwo+PiAgfQo+PiAgI2Vu ZGlmCj4+Cj4+ICsvKgo+PiArICogU2V0IHVwIHN0YXRpYyBzaGFyZWQgcmFtIHBhZ2VzIGZvciBI Vk0gZG9tYWlucyB0byBjb21tdW5pY2F0ZQo+PiArICoKPj4gKyAqIFRoaXMgZnVuY3Rpb24gc2hv dWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIHRoZSBtZW1vcnkgbWFwIGlzIGNvbnN0cnVjdGVkCj4+ ICsgKiBhbmQgYmVmb3JlIGFueSBmdXJ0aGVyIG1lbW9yeSBhY2Nlc3MuICovCj4+ICtfaGlkZGVu IGludCBsaWJ4bF9fc3NobV9hZGQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobSwgaW50IGxl bik7Cj4+ICsKPj4gK19oaWRkZW4gaW50IGxpYnhsX19zc2htX2NoZWNrX292ZXJsYXAobGlieGxf X2djICpnYywgdWludDMyX3QgZG9taWQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG1zLCBpbnQgbGVuKTsKPj4gK19oaWRkZW4g aW50IGxpYnhsX19zc2htX3NldGRlZmF1bHQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0g KnNzaG0pOwo+PiArCj4+ICAvKgo+PiAgICogTG9jYWwgdmFyaWFibGVzOgo+PiAgICogbW9kZTog Qwo+PiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfc3NobS5jIGIvdG9vbHMvbGlieGwv bGlieGxfc3NobS5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAu LmUxNmMyNGNjYjkKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi90b29scy9saWJ4bC9saWJ4bF9z c2htLmMKPj4gQEAgLTAsMCArMSwzMzYgQEAKPj4gKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIK Pj4gKyNpbmNsdWRlICJsaWJ4bF9pbnRlcm5hbC5oIgo+PiArI2luY2x1ZGUgImxpYnhsX2FyY2gu aCIKPj4gKwo+PiArI2RlZmluZSBTU0hNX0VSUk9SKGRvbWlkLCBzc2htaWQsIGYsIC4uLikgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAgIExPR0QoRVJST1IsIGRvbWlkLCAi c3RhdGljX3NobSBpZCA9ICVzOiAiIGYsIHNzaG1pZCwgIyNfX1ZBX0FSR1NfXykKPj4gKwo+PiAr Cj4+ICsvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGxpYnhsX3N0YXRpY19zaG0gKi8KPj4gK2lu dCBsaWJ4bF9fc3NobV9zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNz aG0pCj4+ICt7Cj4+ICsgICAgaW50IHJjOwo+PiArCj4+ICsgICAgaWYgKHNzaG0tPnJvbGUgPT0g TElCWExfU1NITV9ST0xFX1VOS05PV04pIHsKPj4gKyAgICAgICAgc3NobS0+cm9sZSA9IExJQlhM X1NTSE1fUk9MRV9TTEFWRTsKPj4gKyAgICB9Cj4+ICsgICAgaWYgKHNzaG0tPnByb3QgPT0gTElC WExfU1NITV9QUk9UX1VOS05PV04pIHsKPj4gKyAgICAgICAgc3NobS0+cHJvdCA9IExJQlhMX1NT SE1fUFJPVF9SVzsKPj4gKyAgICB9Cj4+ICsgICAgLyogcm9sZS1zcGVjaWZpYyBjaGVja3MgKi8K Pj4gKyAgICBpZiAoTElCWExfU1NITV9ST0xFX1NMQVZFID09IHNzaG0tPnJvbGUpIHsKPj4gKyAg ICAgICAgaWYgKHNzaG0tPm9mZnNldCA9PSBMSUJYTF9TU0hNX1JBTkdFX1VOS05PV04pIHsKPj4g KyAgICAgICAgICAgIHNzaG0tPm9mZnNldCA9IDA7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAg aWYgKHNzaG0tPmNhY2hlX3BvbGljeSAhPSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1VOS05PV04p IHsKPj4gKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAiY2FjaGVfcG9saWN5IGlzIG9ubHkgYXBwbGljYWJsZSB0byBtYXN0 ZXIgZG9tYWlucyIpOwo+PiArICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOwo+PiArICAg ICAgICB9Cj4+ICsgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgaWYgKHNzaG0tPm9mZnNldCAhPSBM SUJYTF9TU0hNX1JBTkdFX1VOS05PV04pIHsKPj4gKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9t aWQsIHNzaG0tPmlkLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAib2Zmc2V0IGlzIG9ubHkg YXBwbGljYWJsZSB0byBzbGF2ZSBkb21haW5zIik7Cj4+ICsgICAgICAgICAgICByZXR1cm4gRVJS T1JfSU5WQUw7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAgcmMgPSBsaWJ4bF9fYXJjaF9kb21h aW5fc3NobV9jYWNoZXBvbGljeV9zZXRkZWZhdWx0KHNzaG0pOwo+PiArICAgICAgICBpZiAocmMp IHsKPj4gKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAiY2FjaGUgcG9saWN5IG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0 Zm9ybSIpOwo+PiArICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOwo+PiArICAgICAgICB9 Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gKy8qIENvbXBh cmUgZnVuY3Rpb24gZm9yIHNvcnRpbmcgc3NobSByYW5nZXMgYnkgc3NobS0+YmVnaW4gKi8KPj4g K3N0YXRpYyBpbnQgc3NobV9yYW5nZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikK Pj4gK3sKPj4gKyAgICBsaWJ4bF9zdGF0aWNfc2htICpjb25zdCAqc3NobWEgPSBhLCAqY29uc3Qg KnNzaG1iID0gYjsKPj4gKyAgICByZXR1cm4gKCpzc2htYSktPmJlZ2luID4gKCpzc2htYiktPmJl Z2luID8gMSA6IC0xOwo+PiArfQo+PiArCj4+ICsvKiBjaGVjayBpZiB0aGUgc3NobSBzbGF2ZSBj b25maWdzIGluIEBzc2htIG92ZXJsYXAgKi8KPj4gK2ludCBsaWJ4bF9fc3NobV9jaGVja19vdmVy bGFwKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG1zLCBpbnQgbGVuKQo+PiAr ewo+PiArCj4+ICsgICAgY29uc3QgbGlieGxfc3RhdGljX3NobSAqKnNsYXZlX3NzaG1zID0gTlVM TDsKPj4gKyAgICBpbnQgbnVtX3NsYXZlczsKPj4gKyAgICBpbnQgaTsKPj4gKwo+PiArICAgIHNs YXZlX3NzaG1zID0gbGlieGxfX2NhbGxvYyhnYywgbGVuLCBzaXplb2Yoc2xhdmVfc3NobXNbMF0p KTsKPj4gKyAgICBudW1fc2xhdmVzID0gMDsKPj4gKyAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyAr K2kpIHsKPj4gKyAgICAgICAgaWYgKExJQlhMX1NTSE1fUk9MRV9TTEFWRSA9PSBzc2htc1tpXS5y b2xlKQo+PiArICAgICAgICAgICAgc2xhdmVfc3NobXNbbnVtX3NsYXZlcysrXSA9IHNzaG1zICsg aTsKPj4gKyAgICB9Cj4+ICsgICAgcXNvcnQoc2xhdmVfc3NobXMsIG51bV9zbGF2ZXMsIHNpemVv ZihzbGF2ZV9zc2htc1swXSksIHNzaG1fcmFuZ2VfY21wKTsKPj4gKwo+PiArICAgIGZvciAoaSA9 IDA7IGkgPCBudW1fc2xhdmVzIC0gMTsgKytpKSB7Cj4+ICsgICAgICAgIGlmIChzbGF2ZV9zc2ht c1tpKzFdLT5iZWdpbiA8IHNsYXZlX3NzaG1zW2ldLT5lbmQpIHsKPj4gKyAgICAgICAgICAgIFNT SE1fRVJST1IoZG9taWQsIHNsYXZlX3NzaG1zW2krMV0tPmlkLCAic2xhdmUgcmFuZ2VzIG92ZXJs YXAuIik7Cj4+ICsgICAgICAgICAgICByZXR1cm4gRVJST1JfSU5WQUw7Cj4+ICsgICAgICAgIH0K Pj4gKyAgICB9Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsKPj4gK30KPj4gKwo+PiArLyogVGhlIGNh bGxlciBoYXZlIHRvIGd1YXJlbnRlZSB0aGF0IHNzaG0tPmJlZ2luIDwgc3NobS0+ZW5kICovCj4+ ICtzdGF0aWMgaW50IGxpYnhsX19zc2htX2RvX21hcChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBt aWQsIHVpbnQzMl90IHNpZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X3N0YXRpY19zaG0gKnNzaG0sCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 NjRfdCBtYmVnaW4sIHVpbnQ2NF90IG1lbmQpCj4+ICt7Cj4+ICsgICAgaW50IHJjOwo+PiArICAg IGludCBpOwo+PiArICAgIHVuc2lnbmVkIGludCBudW1fbXBhZ2VzLCBudW1fc3BhZ2VzLCBvZmZz ZXQ7Cj4+ICsgICAgaW50ICplcnJzOwo+PiArICAgIHhlbl91bG9uZ190ICppZHhzOwo+PiArICAg IHhlbl9wZm5fdCAqZ3BmbnM7Cj4+ICsKPj4gKyAgICBudW1fbXBhZ2VzID0gKG1lbmQgLSBtYmVn aW4pID4+IDEyOwo+Cj4gUGxlYXNlIGRvbid0IGhhcmRjb2RlIDEyLCBwbGVhc2UgdXNlIFhDX1BB R0VfU0hJRlQgKGFsc28gaW4gb3RoZXIgbGlieGwKPiBwYXRjaGVzKS4KCk9LLgoKPgo+Cj4+ICsg ICAgbnVtX3NwYWdlcyA9IChzc2htLT5lbmQgLSBzc2htLT5iZWdpbikgPj4gMTI7Cj4+ICsgICAg b2Zmc2V0ID0gc3NobS0+b2Zmc2V0ID4+IDEyOwo+PiArCj4+ICsgICAgLyogQ2hlY2sgcmFuZ2Uu IFRlc3Qgb2Zmc2V0IDwgbXBhZ2VzIGZpcnN0IHRvIGF2b2lkIG92ZXJmbG93ICovCj4+ICsgICAg aWYgKChvZmZzZXQgPj0gbnVtX21wYWdlcykgfHwgKG51bV9tcGFnZXMgLSBvZmZzZXQgPCBudW1f c3BhZ2VzKSkgewo+PiArICAgICAgICBTU0hNX0VSUk9SKHNpZCwgc3NobS0+aWQsICJleGNlZWRz IG1hc3RlcidzIGFkZHJlc3Mgc3BhY2UuIik7Cj4+ICsgICAgICAgIHJjID0gRVJST1JfSU5WQUw7 Cj4+ICsgICAgICAgIGdvdG8gb3V0Owo+PiArICAgIH0KPj4gKwo+PiArICAgIC8qIGZpbGwgb3V0 IHRoZSBwZm4ncyBhbmQgZG8gdGhlIG1hcHBpbmcgKi8KPj4gKyAgICBlcnJzID0gbGlieGxfX2Nh bGxvYyhnYywgbnVtX3NwYWdlcywgc2l6ZW9mKGludCkpOwo+PiArICAgIGlkeHMgPSBsaWJ4bF9f Y2FsbG9jKGdjLCBudW1fc3BhZ2VzLCBzaXplb2YoeGVuX3Vsb25nX3QpKTsKPj4gKyAgICBncGZu cyA9IGxpYnhsX19jYWxsb2MoZ2MsIG51bV9zcGFnZXMsIHNpemVvZih4ZW5fcGZuX3QpKTsKPj4g KyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX3NwYWdlczsgaSsrKSB7Cj4+ICsgICAgICAgIGlkeHNb aV0gPSAobWJlZ2luID4+IDEyKSArIG9mZnNldCArIGk7Cj4+ICsgICAgICAgIGdwZm5zW2ldPSAo c3NobS0+YmVnaW4gPj4gMTIpICsgaTsKPj4gKyAgICB9Cj4+ICsgICAgcmMgPSB4Y19kb21haW5f YWRkX3RvX3BoeXNtYXBfYmF0Y2goQ1RYLT54Y2gsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2lkLCBtaWQsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgWEVOTUFQU1BBQ0VfZ21mbl9mb3JlaWduLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zcGFnZXMsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWR4cywgZ3BmbnMsIGVycnMpOwo+PiArCj4+ICsg ICAgZm9yIChpID0gMDsgaTwgbnVtX3NwYWdlczsgaSsrKSB7Cj4+ICsgICAgICAgIGlmIChlcnJz W2ldKSB7Cj4+ICsgICAgICAgICAgICBTU0hNX0VSUk9SKHNpZCwgc3NobS0+aWQsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICJjYW4ndCBtYXAgYXQgYWRkcmVzcyAweCUiUFJJeDY0Ii4iLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICBzc2htLT5iZWdpbiArIChvZmZzZXQgPDwgMTIpICk7 Cj4+ICsgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9 Cj4+ICsgICAgaWYgKHJjKSBnb3RvIG91dDsKPj4gKwo+PiArICAgIHJjID0gMDsKPj4gKwo+PiAr b3V0Ogo+PiArICAgIHJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBsaWJ4bF9f c3NobV9hZGRfc2xhdmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htKQo+PiArewo+ PiArICAgIGludCByYzsKPj4gKyAgICBjaGFyICpzc2htX3BhdGgsICpzbGF2ZV9wYXRoLCAqZG9t X3BhdGgsICpkb21fc3NobV9wYXRoLCAqZG9tX3JvbGVfcGF0aDsKPj4gKyAgICBjaGFyICplbnRz WzldOwo+PiArICAgIGNvbnN0IGNoYXIgKnhzX3ZhbHVlOwo+PiArICAgIGxpYnhsX3N0YXRpY19z aG0gbWFzdGVyX3NzaG07Cj4+ICsgICAgdWludDMyX3QgbWFzdGVyX2RvbWlkOwo+PiArICAgIHhz X3RyYW5zYWN0aW9uX3QgeHQgPSBYQlRfTlVMTDsKPj4gKwo+PiArICAgIHNzaG1fcGF0aCA9IGxp YnhsX194c19nZXRfc3NobXBhdGgoZ2MsIHNzaG0tPmlkKTsKPj4gKyAgICBzbGF2ZV9wYXRoID0g R0NTUFJJTlRGKCIlcy9zbGF2ZXMvJSJQUkl1MzIsIHNzaG1fcGF0aCwgZG9taWQpOwo+PiArICAg IGRvbV9wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7Cj4+ICsgICAgLyog dGhlIGRvbWFpbiBzaG91bGQgYmUgaW4geGVuc3RvcmUgYnkgbm93ICovCj4+ICsgICAgYXNzZXJ0 KGRvbV9wYXRoKTsKPj4gKyAgICBkb21fc3NobV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zdGF0aWNf c2htLyVzIiwgZG9tX3BhdGgsIHNzaG0tPmlkKTsKPj4gKyAgICBkb21fcm9sZV9wYXRoID0gR0NT UFJJTlRGKCIlcy9yb2xlIiwgZG9tX3NzaG1fcGF0aCk7Cj4+ICsKPj4gKyAgICAvKiBwcmVwYXJl IHRoZSBzbGF2ZSB4ZW5zdG9yZSBlbnRyaWVzICovCj4+ICsgICAgZW50c1swXSA9ICJiZWdpbiI7 Cj4+ICsgICAgZW50c1sxXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+YmVnaW4pOwo+ PiArICAgIGVudHNbMl0gPSAiZW5kIjsKPj4gKyAgICBlbnRzWzNdID0gR0NTUFJJTlRGKCIweCUi UFJJeDY0LCBzc2htLT5lbmQpOwo+PiArICAgIGVudHNbNF0gPSAib2Zmc2V0IjsKPj4gKyAgICBl bnRzWzVdID0gR0NTUFJJTlRGKCIweCUiUFJJeDY0LCBzc2htLT5vZmZzZXQpOwo+PiArICAgIGVu dHNbNl0gPSAicHJvdCI7Cj4+ICsgICAgZW50c1s3XSA9IGxpYnhsX19zdHJkdXAoZ2MsIGxpYnhs X3NzaG1fcHJvdF90b19zdHJpbmcoc3NobS0+cHJvdCkpOwo+PiArICAgIGVudHNbOF0gPSBOVUxM Owo+PiArCj4+ICsgICAgZm9yICg7Oykgewo+PiArICAgICAgICByYyA9IGxpYnhsX194c190cmFu c2FjdGlvbl9zdGFydChnYywgJnh0KTsKPj4gKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPj4g Kwo+PiArICAgICAgICBpZiAoIWxpYnhsX194c19yZWFkKGdjLCB4dCwgc3NobV9wYXRoKSkgewo+ PiArICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsICJubyBtYXN0ZXIgZm91 bmQuIik7Cj4+ICsgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cj4+ICsgICAgICAgICAgICBn b3RvIG91dDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIC8qIGV2ZXJ5IElEIGNhbiBh cHBlYXIgaW4gZWFjaCBkb21haW4gYXQgbW9zdCBvbmNlICovCj4+ICsgICAgICAgIGlmIChsaWJ4 bF9feHNfcmVhZChnYywgeHQsIGRvbV9zc2htX3BhdGgpKSB7Cj4+ICsgICAgICAgICAgICBTU0hN X0VSUk9SKGRvbWlkLCBzc2htLT5pZCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgImRvbWFp biB0cmllZCB0byBtYXAgdGhlIHNhbWUgSUQgdHdpY2UuIik7Cj4+ICsgICAgICAgICAgICByYyA9 IEVSUk9SX0ZBSUw7Cj4+ICsgICAgICAgICAgICBnb3RvIG91dDsKPj4gKyAgICAgICAgfQo+PiAr Cj4+ICsgICAgICAgIC8qIGxvb2sgYXQgdGhlIG1hc3RlciBpbmZvIGFuZCBzZWUgaWYgd2UgY291 bGQgZG8gdGhlIG1hcHBpbmcgKi8KPj4gKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVj a2VkKGdjLCB4dCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BS SU5URigiJXMvcHJvdCIsIHNzaG1fcGF0aCksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmeHNfdmFsdWUpOwo+PiArICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owo+PiAr ICAgICAgICBsaWJ4bF9zc2htX3Byb3RfZnJvbV9zdHJpbmcoeHNfdmFsdWUsICZtYXN0ZXJfc3No bS5wcm90KTsKPj4gKwo+PiArICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2Ms IHh0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIl cy9iZWdpbiIsIHNzaG1fcGF0aCksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmeHNfdmFsdWUpOwo+PiArICAgICAgICBpZiAocmMpIGdvdG8gb3V0Owo+PiArICAgICAg ICBtYXN0ZXJfc3NobS5iZWdpbiA9IHN0cnRvdWxsKHhzX3ZhbHVlLCBOVUxMLCAxNik7Cj4+ICsK Pj4gKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCB4dCwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvZW5kIiwgc3NobV9w YXRoKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4c192YWx1ZSk7 Cj4+ICsgICAgICAgIGlmIChyYykgZ290byBvdXQ7Cj4+ICsgICAgICAgIG1hc3Rlcl9zc2htLmVu ZCA9IHN0cnRvdWxsKHhzX3ZhbHVlLCBOVUxMLCAxNik7Cj4+ICsKPj4gKyAgICAgICAgcmMgPSBs aWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCB4dCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvbWFzdGVyIiwgc3NobV9wYXRoKSwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4c192YWx1ZSk7Cj4+ICsgICAgICAgIGlm IChyYykgZ290byBvdXQ7Cj4+ICsgICAgICAgIG1hc3Rlcl9kb21pZCA9IHN0cnRvdWxsKHhzX3Zh bHVlLCBOVUxMLCAxNik7Cj4+ICsKPj4gKyAgICAgICAgLyogY2hlY2sgaWYgdGhlIHNsYXZlIGlz IGFza2luZyB0b28gbXVjaCBwZXJtaXNzaW9uICovCj4KPiB0aGlzIGNvbW1lbnQgZG9lc24ndCBz ZWVtIHRvIG1hdGNoIHRoZSBjaGVjayBiZWxvdwoKSSBzZWUgdGhpcyBzZXRkZWZhdWx0LWFuZC1j aGVjayBhcyBhIHdob2xlLCBidXQgaWYgeW91IHRoaW5rIGl0J3MgY29uZnVzaW5nLApJJ2xsIG1v dmUgaXQgZG93biB0byB0aGUgZXhhY3QgY2hlY2suCgo+Cj4KPj4gKyAgICAgICAgaWYgKExJQlhM X1NTSE1fUFJPVF9VTktOT1dOID09IHNzaG0tPnByb3QpIHsKPj4gKyAgICAgICAgICAgIHNzaG0t PnByb3QgPSBtYXN0ZXJfc3NobS5wcm90Owo+PiArICAgICAgICB9Cj4+ICsgICAgICAgIGlmICht YXN0ZXJfc3NobS5wcm90IDwgc3NobS0+cHJvdCkgewo+PiArICAgICAgICAgICAgU1NITV9FUlJP Uihkb21pZCwgc3NobS0+aWQsICJzbGF2ZSBpcyBhc2tpbmcgdG9vIG11Y2ggcGVybWlzc2lvbi4i KTsKPj4gKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7Cj4+ICsgICAgICAgICAgICBnb3Rv IG91dDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIC8qIGFsbCBjaGVja3MgcGFzc2Vk LCBkbyB0aGUgam9iICovCj4+ICsgICAgICAgIHJjID0gbGlieGxfX3NzaG1fZG9fbWFwKGdjLCBt YXN0ZXJfZG9taWQsIGRvbWlkLCBzc2htLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYXN0ZXJfc3NobS5iZWdpbiwgbWFzdGVyX3NzaG0uZW5kKTsKPgo+IERvZXNuJ3QgbGli eGxfX3NzaG1fZG9fbWFwIHJpc2sgYmVpbmcgY2FsbGVkIHR3aWNlIG9uIHhlbnN0b3JlCj4gdHJh bnNhY3Rpb24gcmV0cmllcz8KCk9vcHMuIEkgdGhpbmsgSSBzaG91bGQgc2tpcCBsaWJ4bF9fc3No bV9kb19tYXAgd2hlbiB3aXRoaW4gYSByZXRyeSwganVzdCBsaWtlCndoYXQgSSBkaWQgaW4gdGhl IGxpYnhsX19zc2htX2RlbCBwYXRjaC4KCkNoZWVycywKClpob25nemUgTGl1Cgo+Cj4KPgo+PiAr ICAgICAgICBpZiAocmMpIHsKPj4gKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7Cj4+ICsg ICAgICAgICAgICBnb3RvIG91dDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIC8qIHdy aXRlIHRoZSByZXN1bHQgdG8geGVuc3RvcmUgYW5kIGNvbW1pdCAqLwo+PiArICAgICAgICByYyA9 IGxpYnhsX194c193cml0ZV9jaGVja2VkKGdjLCB4dCwgZG9tX3JvbGVfcGF0aCwgInNsYXZlIik7 Cj4+ICsgICAgICAgIGlmIChyYykgZ290byBvdXQ7Cj4+ICsgICAgICAgIGxpYnhsX194c193cml0 ZXYoZ2MsIHh0LCBzbGF2ZV9wYXRoLCBlbnRzKTsKPj4gKwo+PiArICAgICAgICByYyA9IGxpYnhs X194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ4dCk7Cj4+ICsgICAgICAgIGlmICghcmMpIGJy ZWFrOwo+PiArICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKPj4gKyAgICB9Cj4+ICsKPj4g KyAgICByYyA9IDA7Cj4+ICtvdXQ6Cj4+ICsgICAgbGlieGxfX3hzX3RyYW5zYWN0aW9uX2Fib3J0 KGdjLCAmeHQpOwo+PiArICAgIHJldHVybiByYzsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCBs aWJ4bF9fc3NobV9hZGRfbWFzdGVyKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0p Cj4+ICt7Cj4+ICsgICAgaW50IHJjOwo+PiArICAgIGNoYXIgKnNzaG1fcGF0aCwgKmRvbV9wYXRo LCAqZG9tX3JvbGVfcGF0aDsKPj4gKyAgICBjaGFyICplbnRzWzEzXTsKPj4gKyAgICBzdHJ1Y3Qg eHNfcGVybWlzc2lvbnMgbm9wZXJtOwo+PiArICAgIHhzX3RyYW5zYWN0aW9uX3QgeHQgPSBYQlRf TlVMTDsKPj4gKwo+PiArICAgIHNzaG1fcGF0aCA9IGxpYnhsX194c19nZXRfc3NobXBhdGgoZ2Ms IHNzaG0tPmlkKTsKPj4gKyAgICBkb21fcGF0aCA9IGxpYnhsX194c19nZXRfZG9tcGF0aChnYywg ZG9taWQpOwo+PiArICAgIC8qIHRoZSBkb21haW4gc2hvdWxkIGJlIGluIHhlbnN0b3JlIGJ5IG5v dyAqLwo+PiArICAgIGFzc2VydChkb21fcGF0aCk7Cj4+ICsgICAgZG9tX3JvbGVfcGF0aCA9IEdD U1BSSU5URigiJXMvc3RhdGljX3NobS8lcy9yb2xlIiwgZG9tX3BhdGgsIHNzaG0tPmlkKTsKPj4g Kwo+PiArICAgIC8qIHByZXBhcmUgdGhlIHhlbnN0b3JlIGVudHJpZXMgKi8KPj4gKyAgICBlbnRz WzBdID0gIm1hc3RlciI7Cj4+ICsgICAgZW50c1sxXSA9IEdDU1BSSU5URigiJSJQUkl1MzIsIGRv bWlkKTsKPj4gKyAgICBlbnRzWzJdID0gImJlZ2luIjsKPj4gKyAgICBlbnRzWzNdID0gR0NTUFJJ TlRGKCIweCUiUFJJeDY0LCBzc2htLT5iZWdpbik7Cj4+ICsgICAgZW50c1s0XSA9ICJlbmQiOwo+ PiArICAgIGVudHNbNV0gPSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0tPmVuZCk7Cj4+ICsg ICAgZW50c1s2XSA9ICJwcm90IjsKPj4gKyAgICBlbnRzWzddID0gbGlieGxfX3N0cmR1cChnYywg bGlieGxfc3NobV9wcm90X3RvX3N0cmluZyhzc2htLT5wcm90KSk7Cj4+ICsgICAgZW50c1s4XSA9 ICJjYWNoZV9wb2xpY3kiOwo+PiArICAgIGVudHNbOV0gPSBsaWJ4bF9fc3RyZHVwKGdjLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3NzaG1fY2FjaGVwb2xpY3lfdG9fc3Ry aW5nKHNzaG0tPmNhY2hlX3BvbGljeSkpOwo+PiArICAgIGVudHNbMTBdID0gInN0YXR1cyI7Cj4+ ICsgICAgZW50c1sxMV0gPSAiYWxpdmUiOwo+PiArICAgIGVudHNbMTJdID0gTlVMTDsKPj4gKwo+ PiArICAgIC8qIGNvdWxkIG9ubHkgYmUgYWNjZXNzZWQgYnkgRG9tMCAqLwo+PiArICAgIG5vcGVy bS5pZCA9IDA7Cj4+ICsgICAgbm9wZXJtLnBlcm1zID0gWFNfUEVSTV9OT05FOwo+PiArCj4+ICsg ICAgZm9yICg7Oykgewo+PiArICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9zdGFy dChnYywgJnh0KTsKPj4gKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPj4gKwo+PiArICAgICAg ICBpZiAoIWxpYnhsX194c19yZWFkKGdjLCB4dCwgc3NobV9wYXRoKSkgewo+PiArICAgICAgICAg ICAgLyogZXZlcnkgSUQgY2FuIGFwcGVhciBpbiBlYWNoIGRvbWFpbiBhdCBtb3N0IG9uY2UgKi8K Pj4gKyAgICAgICAgICAgIGlmIChsaWJ4bF9feHNfcmVhZChnYywgeHQsIGRvbV9yb2xlX3BhdGgp KSB7Cj4+ICsgICAgICAgICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9tYWluIHRyaWVkIHRvIG1hcCB0aGUgc2FtZSBJ RCB0d2ljZS4iKTsKPj4gKyAgICAgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cj4+ICsgICAg ICAgICAgICAgICAgZ290byBvdXQ7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgICBy YyA9IGxpYnhsX194c193cml0ZV9jaGVja2VkKGdjLCB4dCwgZG9tX3JvbGVfcGF0aCwgIm1hc3Rl ciIpOwo+PiArICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDs7Cj4+ICsKPj4gKyAgICAgICAg ICAgIGxpYnhsX194c19ta25vZChnYywgeHQsIHNzaG1fcGF0aCwgJm5vcGVybSwgMSk7Cj4+ICsg ICAgICAgICAgICBsaWJ4bF9feHNfd3JpdGV2KGdjLCB4dCwgc3NobV9wYXRoLCBlbnRzKTsKPj4g KyAgICAgICAgfSBlbHNlIHsKPj4gKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0t PmlkLCAiY2FuIG9ubHkgaGF2ZSBvbmUgbWFzdGVyLiIpOwo+PiArICAgICAgICAgICAgcmMgPSBF UlJPUl9GQUlMOwo+PiArICAgICAgICAgICAgZ290byBvdXQ7Cj4+ICsgICAgICAgIH0KPj4gKwo+ PiArICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ4dCk7Cj4+ ICsgICAgICAgIGlmICghcmMpIGJyZWFrOwo+PiArICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91 dDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICByYyA9IDA7Cj4+ICtvdXQ6Cj4+ICsgICAgbGlieGxf X3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmeHQpOwo+PiArICAgIHJldHVybiByYzsKPj4gK30K Pj4gKwo+PiAraW50IGxpYnhsX19zc2htX2FkZChsaWJ4bF9fZ2MgKmdjLCAgdWludDMyX3QgZG9t aWQsCj4+ICsgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG1zLCBpbnQg bGVuKQo+PiArewo+PiArICAgIGludCByYywgaTsKPj4gKwo+PiArICAgIGlmICghbGVuKSByZXR1 cm4gMDsKPj4gKwo+PiArICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewo+PiArICAgICAg ICBpZiAoTElCWExfU1NITV9ST0xFX1NMQVZFID09IHNzaG1zW2ldLnJvbGUpIHsKPj4gKyAgICAg ICAgICAgIHJjID0gbGlieGxfX3NzaG1fYWRkX3NsYXZlKGdjLCBkb21pZCwgc3NobXMraSk7Cj4+ ICsgICAgICAgIH0gZWxzZSB7Cj4+ICsgICAgICAgICAgICByYyA9IGxpYnhsX19zc2htX2FkZF9t YXN0ZXIoZ2MsIGRvbWlkLCBzc2htcytpKTsKPj4gKyAgICAgICAgfQo+PiArICAgICAgICBpZiAo cmMpICByZXR1cm4gcmM7Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgcmV0dXJuIDA7Cj4+ICt9Cj4+ ICsKPj4gKy8qCj4+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4+ICsgKiBtb2RlOiBDCj4+ICsgKiBj LWJhc2ljLW9mZnNldDogNAo+PiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsCj4+ICsgKiBFbmQ6 Cj4+ICsgKi8KPj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5jIGIvdG9vbHMv bGlieGwvbGlieGxfeDg2LmMKPj4gaW5kZXggNDU1ZjZmMGJlZC4uOGRkMzRmZDdiYSAxMDA2NDQK Pj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKPj4gKysrIGIvdG9vbHMvbGlieGwvbGli eGxfeDg2LmMKPj4gQEAgLTU4Nyw2ICs1ODcsMjQgQEAgdm9pZCBsaWJ4bF9fYXJjaF9kb21haW5f YnVpbGRfaW5mb19hY3BpX3NldGRlZmF1bHQoCj4+ICAgICAgbGlieGxfZGVmYm9vbF9zZXRkZWZh dWx0KCZiX2luZm8tPmFjcGksIHRydWUpOwo+PiAgfQo+Pgo+PiArYm9vbCBsaWJ4bF9fYXJjaF9k b21haW5fc3VwcG9ydF9zc2htKGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8p Cj4+ICt7Cj4+ICsgICAgLyogRklYTUU6IE1hcmsgdGhpcyBhcyB1bnN1cHBvcnRlZCBzaW5jZSBj YWxsaW5nIHAybV9hZGRfZm9yZWlnbiBvbiB0d28KPj4gKyAgICAgKiBEb21VJ3MgaXMgY3VycmVu dGx5IG5vdCBhbGxvd2Qgb24geDg2LCBzZWUgdGhlIGNvbW1lbnRzIGluCj4+ICsgICAgICogeDg2 L21tL3AybS5jOiBwMm1fYWRkX2ZvcmVpZ24gKi8KPj4gKyAgICAgcmV0dXJuIGZhbHNlOwo+PiAr fQo+PiArCj4+ICtpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVm YXVsdChsaWJ4bF9zdGF0aWNfc2htICpzc2htKQo+PiArewo+PiArICAgIGlmIChzc2htLT5jYWNo ZV9wb2xpY3kgPT0gTElCWExfU1NITV9DQUNIRVBPTElDWV9VTktOT1dOKQo+PiArICAgICAgICBz c2htLT5jYWNoZV9wb2xpY3kgPSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1g4Nl9OT1JNQUw7Cj4+ ICsgICAgaWYgKHNzaG0tPmNhY2hlX3BvbGljeSA8IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfWDg2 X05PUk1BTCkKPj4gKyAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOwo+PiArCj4+ICsgICAgcmV0 dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gIC8qCj4+ICAgKiBMb2NhbCB2YXJpYWJsZXM6Cj4+ICAgKiBt b2RlOiBDCj4+IGRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF94c2hlbHAuYyBiL3Rvb2xz L2xpYnhsL2xpYnhsX3hzaGVscC5jCj4+IGluZGV4IGM0YTE4ZGYzNTMuLmQ5MWZiZjVmZGEgMTAw NjQ0Cj4+IC0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3hzaGVscC5jCj4+ICsrKyBiL3Rvb2xzL2xp YnhsL2xpYnhsX3hzaGVscC5jCj4+IEBAIC0xOTMsNiArMTkzLDE0IEBAIGNoYXIgKmxpYnhsX194 c19saWJ4bF9wYXRoKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkKQo+PiAgICAgIHJldHVy biBzOwo+PiAgfQo+Pgo+PiArY2hhciAqbGlieGxfX3hzX2dldF9zc2htcGF0aChsaWJ4bF9fZ2Mg KmdjLCBjb25zdCBjaGFyICppZCkKPj4gK3sKPj4gKyAgICBjaGFyICpzID0gR0NTUFJJTlRGKCIv bG9jYWwvc3RhdGljX3NobS8lcyIsIGlkKTsKPj4gKyAgICBpZiAoIXMpCj4+ICsgICAgICAgIExP R0UoRVJST1IsICJjYW5ub3QgYWxsb2NhdGUgc3RhdGljIHNobSBwYXRoIik7Cj4+ICsgICAgcmV0 dXJuIHM7Cj4+ICt9Cj4+ICsKPj4gIGludCBsaWJ4bF9feHNfcmVhZF9tYW5kYXRvcnkobGlieGxf X2djICpnYywgeHNfdHJhbnNhY3Rpb25fdCB0LAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpwYXRoLCBjb25zdCBjaGFyICoqcmVzdWx0X291dCkKPj4gIHsKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBt YWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3Jn L3hlbi1kZXZlbAo=