From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v4 4/7] libxl: support mapping static shared memory areas during domain creation Date: Tue, 6 Feb 2018 13:07:30 +0000 Message-ID: <6eb51518-4e01-1d4a-e345-a0fc91c3594c@arm.com> References: <20180130175024.26921-1-blackskygg@gmail.com> <20180130175024.26921-5-blackskygg@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180130175024.26921-5-blackskygg@gmail.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Zhongze Liu , xen-devel@lists.xen.org Cc: Ian Jackson , Stefano Stabellini , Wei Liu List-Id: xen-devel@lists.xenproject.org SGksCgpPbiAwMS8zMC8yMDE4IDA1OjUwIFBNLCBaaG9uZ3plIExpdSB3cm90ZToKPiBBZGQgbGli eGxfX3NzaG1fYWRkIHRvIG1hcCBzaGFyZWQgcGFnZXMgZnJvbSBvbmUgRG9tVSB0byBhbm90aGVy LCBUaGUgbWFwcGluZwo+IHByb2Nlc3MgaW52b2x2ZXMgdGhlIGZvbGx3aW5nIHN0ZXBzOgoKcy9m b2xsd2luZy9mb2xsb3dpbmcvCgo+IAo+ICAgICogU2V0IGRlZmF1bHRzIGFuZCBjaGVjayBmb3Ig ZnVydGhlciBlcnJvcnMgaW4gdGhlIHN0YXRpY19zaG0gY29uZmlnczoKPiAgICAgIG92ZXJsYXBw aW5nIGFyZWFzLCBpbnZhbGlkIHJhbmdlcywgZHVwbGljYXRlZCBtYXN0ZXIgZG9tYWluLAo+ICAg ICAgbm90IHBhZ2UgYWxpZ25lZCwgbm8gbWFzdGVyIGRvbWFpbiBldGMuCj4gICAgKiBVc2UgeGNf ZG9tYWluX2FkZF90b19waHlzbWFwX2JhdGNoIHRvIGRvIHRoZSBwYWdlIHNoYXJpbmcuCj4gICAg KiBXaGVuIHNvbWUgb2YgdGhlIHBhZ2VzIGNhbid0IGJlIHN1Y2Nlc3NmdWxseSBtYXBwZWQsIHJv bGwgYmFjayBhbnkKPiAgICAgIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcGFnZXMgc28gdGhhdCB0aGUg c3lzdGVtIHN0YXlzIGluIGEgY29uc2lzdGVudCBzdGF0ZS4KPiAgICAqIFdyaXRlIGluZm9tYXRp b24gYWJvdXQgc3RhdGljIHNoYXJlZCBtZW1vcnkgYXJlYXMgaW50byB0aGUgYXBwcm9wcmlhdGUK CnMvaW5mb21hdGlvbi9pbmZvcm1hdGlvbi8KCj4gICAgICB4ZW5zdG9yZSBwYXRocyBhbmQgc2V0 IHRoZSByZWZjb3VudCBvZiB0aGUgc2hhcmVkIHJlZ2lvbiBhY2NvcmRpbmdseS4KPiAKPiBUZW1w b3JhcmlseSBtYXJrIHRoaXMgYXMgdW5zdXBwb3J0ZWQgb24geDg2IGJlY2F1c2UgY2FsbGluZyBw Mm1fYWRkX2ZvcmVpZ24gb24KPiB0d28gZG9tVSdzIGlzIGN1cnJlbnRseSBub3QgYWxsb3dkIG9u IHg4NiAoc2VlIHRoZSBjb21tZW50cyBpbgo+IHg4Ni9tbS9wMm0uYzpwMm1fYWRkX2ZvcmVpZ24g Zm9yIG1vcmUgZGV0YWlscykuCj4gCj4gVGhpcyBpcyBmb3IgdGhlIHByb3Bvc2FsICJBbGxvdyBz ZXR0aW5nIHVwIHNoYXJlZCBtZW1vcnkgYXJlYXMgYmV0d2VlbiBWTXMKPiBmcm9tIHhsIGNvbmZp ZyBmaWxlIiAoc2VlIFsxXSkuCj4gCj4gWzFdIGh0dHBzOi8vbGlzdHMueGVuLm9yZy9hcmNoaXZl cy9odG1sL3hlbi1kZXZlbC8yMDE3LTA4L21zZzAzMjQyLmh0bWwKPiAKPiBTaWduZWQtb2ZmLWJ5 OiBaaG9uZ3plIExpdSA8YmxhY2tza3lnZ0BnbWFpbC5jb20+Cj4gCj4gQ2M6IFdlaSBMaXUgPHdl aS5saXUyQGNpdHJpeC5jb20+Cj4gQ2M6IElhbiBKYWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRy aXguY29tPgo+IENjOiBTdGVmYW5vIFN0YWJlbGxpbmkgPHNzdGFiZWxsaW5pQGtlcm5lbC5vcmc+ Cj4gQ2M6IEp1bGllbiBHcmFsbCA8anVsaWVuLmdyYWxsQGFybS5jb20+Cj4gQ2M6IHhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCj4gLS0tCj4gICAgVjM6Cj4gICAgKiBVbm1hcCB0aGUgc3VjY2Vzc2Z1 bGx5IG1hcHBlZCBwYWdlcyB3aGVuZXZlciByYyAhPSAwLgo+IAo+ICAgIFY0Ogo+ICAgICogVXNl IFhFTk1BUFNQQUNFX2dtZm5fc2hhcmUgaW5zdGVhZCBvZiAqX2dtZm5fZm9yZWlnbi4KPiAtLS0K PiAgIHRvb2xzL2xpYnhsL01ha2VmaWxlICAgICAgICAgfCAgIDIgKy0KPiAgIHRvb2xzL2xpYnhs L2xpYnhsX2FyY2guaCAgICAgfCAgIDYgKwo+ICAgdG9vbHMvbGlieGwvbGlieGxfYXJtLmMgICAg ICB8ICAxNSArKwo+ICAgdG9vbHMvbGlieGwvbGlieGxfY3JlYXRlLmMgICB8ICAyNyArKysKPiAg IHRvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggfCAgMTQgKysKPiAgIHRvb2xzL2xpYnhsL2xp YnhsX3NzaG0uYyAgICAgfCAzOTcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ICAgdG9vbHMvbGlieGwvbGlieGxfeDg2LmMgICAgICB8ICAxOSArKysKPiAgIDcg ZmlsZXMgY2hhbmdlZCwgNDc5IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0b29scy9saWJ4bC9saWJ4bF9zc2htLmMKPiAKPiBkaWZmIC0tZ2l0IGEv dG9vbHMvbGlieGwvTWFrZWZpbGUgYi90b29scy9saWJ4bC9NYWtlZmlsZQo+IGluZGV4IDkxN2Nl YjBlNzIuLmUyODM0ZDg0ZGMgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwvTWFrZWZpbGUKPiAr KysgYi90b29scy9saWJ4bC9NYWtlZmlsZQo+IEBAIC0xMzksNyArMTM5LDcgQEAgTElCWExfT0JK UyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGlieGxfY3JlYXRlLm8gbGlieGxfZG0ubyBsaWJ4bF9w Y2kubyBcCj4gICAJCQlsaWJ4bF9kb21fc3VzcGVuZC5vIGxpYnhsX2RvbV9zYXZlLm8gbGlieGxf dXNiLm8gXAo+ICAgCQkJbGlieGxfdnRwbS5vIGxpYnhsX25pYy5vIGxpYnhsX2Rpc2subyBsaWJ4 bF9jb25zb2xlLm8gXAo+ICAgCQkJbGlieGxfY3B1cG9vbC5vIGxpYnhsX21lbS5vIGxpYnhsX3Nj aGVkLm8gbGlieGxfdG1lbS5vIFwKPiAtCQkJbGlieGxfOXBmcy5vIGxpYnhsX2RvbWFpbi5vIGxp YnhsX3ZkaXNwbC5vIFwKPiArCQkJbGlieGxfOXBmcy5vIGxpYnhsX2RvbWFpbi5vIGxpYnhsX3Zk aXNwbC5vIGxpYnhsX3NzaG0ubyBcCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAkKExJQlhM X09CSlMteSkKPiAgIExJQlhMX09CSlMgKz0gbGlieGxfZ2VuaWQubwo+ICAgTElCWExfT0JKUyAr PSBfbGlieGxfdHlwZXMubyBsaWJ4bF9mbGFzay5vIF9saWJ4bF90eXBlc19pbnRlcm5hbC5vCj4g ZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaCBiL3Rvb2xzL2xpYnhsL2xpYnhs X2FyY2guaAo+IGluZGV4IDc4NGVjN2Y2MDkuLjExNDMzZmU0NjYgMTAwNjQ0Cj4gLS0tIGEvdG9v bHMvbGlieGwvbGlieGxfYXJjaC5oCj4gKysrIGIvdG9vbHMvbGlieGwvbGlieGxfYXJjaC5oCj4g QEAgLTc4LDYgKzc4LDEyIEBAIGludCBsaWJ4bF9fYXJjaF9leHRyYV9tZW1vcnkobGlieGxfX2dj ICpnYywKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfZG9tYWlu X2J1aWxkX2luZm8gKmluZm8sCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2 NF90ICpvdXQpOwo+ICAgCj4gK19oaWRkZW4KPiArYm9vbCBsaWJ4bF9fYXJjaF9kb21haW5fc3Vw cG9ydF9zc2htKGNvbnN0IGxpYnhsX2RvbWFpbl9idWlsZF9pbmZvICpiX2luZm8pOwo+ICsKPiAr X2hpZGRlbgo+ICtpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVm YXVsdChsaWJ4bF9zdGF0aWNfc2htICpzc2htKTsKPiArCj4gICAjaWYgZGVmaW5lZChfX2kzODZf XykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQo+ICAgCj4gICAjZGVmaW5lIExBUElDX0JBU0VfQURE UkVTUyAgMHhmZWUwMDAwMAo+IGRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9hcm0uYyBi L3Rvb2xzL2xpYnhsL2xpYnhsX2FybS5jCj4gaW5kZXggM2U0NjU1NDMwMS4uZTE0ODc5ZWMwOCAx MDA2NDQKPiAtLS0gYS90b29scy9saWJ4bC9saWJ4bF9hcm0uYwo+ICsrKyBiL3Rvb2xzL2xpYnhs L2xpYnhsX2FybS5jCj4gQEAgLTExNTQsNiArMTE1NCwyMSBAQCB2b2lkIGxpYnhsX19hcmNoX2Rv bWFpbl9idWlsZF9pbmZvX2FjcGlfc2V0ZGVmYXVsdCgKPiAgICAgICBsaWJ4bF9kZWZib29sX3Nl dGRlZmF1bHQoJmJfaW5mby0+YWNwaSwgZmFsc2UpOwo+ICAgfQo+ICAgCj4gK2Jvb2wgbGlieGxf X2FyY2hfZG9tYWluX3N1cHBvcnRfc3NobShjb25zdCBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAq Yl9pbmZvKQo+ICt7Cj4gKyAgICByZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiAraW50IGxpYnhsX19h cmNoX2RvbWFpbl9zc2htX2NhY2hlcG9saWN5X3NldGRlZmF1bHQobGlieGxfc3RhdGljX3NobSAq c3NobSkKPiArewo+ICsgICAgaWYgKHNzaG0tPmNhY2hlX3BvbGljeSA9PSBMSUJYTF9TU0hNX0NB Q0hFUE9MSUNZX1VOS05PV04pCj4gKyAgICAgICAgc3NobS0+Y2FjaGVfcG9saWN5ID0gTElCWExf U1NITV9DQUNIRVBPTElDWV9BUk1fTk9STUFMOwo+ICsgICAgaWYgKHNzaG0tPmNhY2hlX3BvbGlj eSA+PSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1g4Nl9OT1JNQUwpCj4gKyAgICAgICAgcmV0dXJu IEVSUk9SX0lOVkFMOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICAgLyoKPiAgICAq IExvY2FsIHZhcmlhYmxlczoKPiAgICAqIG1vZGU6IEMKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGli eGwvbGlieGxfY3JlYXRlLmMgYi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwo+IGluZGV4IGM0 OTgxMzUyNDYuLjk4YzE2ODY3YmYgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfY3Jl YXRlLmMKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF9jcmVhdGUuYwo+IEBAIC01MzIsNiArNTMy LDE0IEBAIGludCBsaWJ4bF9fZG9tYWluX2J1aWxkKGxpYnhsX19nYyAqZ2MsCj4gICAgICAgICAg IHJldCA9IEVSUk9SX0lOVkFMOwo+ICAgICAgICAgICBnb3RvIG91dDsKPiAgICAgICB9Cj4gKwo+ ICsgICAgLyogdGhlIHAybSBoYXMgYmVlbiBzZXR1cCwgd2UgY291bGQgbWFwIHRoZSBzdGF0aWMg c2hhcmVkIG1lbW9yeSBub3cuICovCgpzL3RoZS9UaGUvCgo+ICsgICAgcmV0ID0gbGlieGxfX3Nz aG1fYWRkKGdjLCBkb21pZCwgZF9jb25maWctPnNzaG1zLCBkX2NvbmZpZy0+bnVtX3NzaG1zKTsK PiArICAgIGlmIChyZXQgIT0gMCkgewo+ICsgICAgICAgIExPRyhFUlJPUiwgImZhaWxlZCB0byBt YXAgc3RhdGljIHNoYXJlZCBtZW1vcnkiKTsKPiArICAgICAgICBnb3RvIG91dDsKPiArICAgIH0K PiArCj4gICAgICAgcmV0ID0gbGlieGxfX2J1aWxkX3Bvc3QoZ2MsIGRvbWlkLCBpbmZvLCBzdGF0 ZSwgdm1lbnRzLCBsb2NhbGVudHMpOwo+ICAgb3V0Ogo+ICAgICAgIHJldHVybiByZXQ7Cj4gQEAg LTk1Nyw2ICs5NjUsMjUgQEAgc3RhdGljIHZvaWQgaW5pdGlhdGVfZG9tYWluX2NyZWF0ZShsaWJ4 bF9fZWdjICplZ2MsCj4gICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0Owo+ICAgICAgIH0KPiAgIAo+ ICsgICAgaWYgKGRfY29uZmlnLT5udW1fc3NobXMgIT0gMCAmJgo+ICsgICAgICAgICFsaWJ4bF9f YXJjaF9kb21haW5fc3VwcG9ydF9zc2htKCZkX2NvbmZpZy0+Yl9pbmZvKSkgewo+ICsgICAgICAg IExPR0QoRVJST1IsIGRvbWlkLCAic3RhdGljX3NobSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMg ZG9tYWluIHR5cGUuIik7Cj4gKyAgICAgICAgcmV0ID0gRVJST1JfSU5WQUw7Cj4gKyAgICAgICAg Z290byBlcnJvcl9vdXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IGRfY29u ZmlnLT5udW1fc3NobXM7ICsraSkgewo+ICsgICAgICAgIHJldCA9IGxpYnhsX19zc2htX3NldGRl ZmF1bHQoZ2MsIGRvbWlkLCAmZF9jb25maWctPnNzaG1zW2ldKTsKPiArICAgICAgICBpZiAocmV0 KSB7Cj4gKyAgICAgICAgICAgIExPR0QoRVJST1IsIGRvbWlkLCAiVW5hYmxlIHRvIHNldCBkZWZh dWx0cyBmb3Igc3RhdGljIHNobSIpOwo+ICsgICAgICAgICAgICBnb3RvIGVycm9yX291dDsKPiAr ICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmV0ID0gbGlieGxfX3NzaG1fY2hlY2tfb3Zl cmxhcChnYywgZG9taWQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRf Y29uZmlnLT5zc2htcywgZF9jb25maWctPm51bV9zc2htcyk7Cj4gKyAgICBpZiAocmV0KSBnb3Rv IGVycm9yX291dDsKPiArCj4gICAgICAgcmV0ID0gbGlieGxfX2RvbWFpbl9tYWtlKGdjLCBkX2Nv bmZpZywgJmRvbWlkLCAmc3RhdGUtPmNvbmZpZyk7Cj4gICAgICAgaWYgKHJldCkgewo+ICAgICAg ICAgICBMT0dEKEVSUk9SLCBkb21pZCwgImNhbm5vdCBtYWtlIGRvbWFpbjogJWQiLCByZXQpOwo+ IGRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9pbnRlcm5hbC5oIGIvdG9vbHMvbGlieGwv bGlieGxfaW50ZXJuYWwuaAo+IGluZGV4IDUwNjY4N2ZiZTkuLjJjZmU0YzA4YTcgMTAwNjQ0Cj4g LS0tIGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAo+ICsrKyBiL3Rvb2xzL2xpYnhsL2xp YnhsX2ludGVybmFsLmgKPiBAQCAtNDQxNSw2ICs0NDE1LDIwIEBAIHN0YXRpYyBpbmxpbmUgYm9v bCBsaWJ4bF9fc3RyaW5nX2lzX2RlZmF1bHQoY2hhciAqKnMpCj4gICB9Cj4gICAjZW5kaWYKPiAg IAo+ICsvKgo+ICsgKiBTZXQgdXAgc3RhdGljIHNoYXJlZCByYW0gcGFnZXMgZm9yIEhWTSBkb21h aW5zIHRvIGNvbW11bmljYXRlCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkg YmUgY2FsbGVkIGFmdGVyIHRoZSBtZW1vcnkgbWFwIGlzIGNvbnN0cnVjdGVkCj4gKyAqIGFuZCBi ZWZvcmUgYW55IGZ1cnRoZXIgbWVtb3J5IGFjY2Vzcy4KPiArICovCj4gK19oaWRkZW4gaW50IGxp YnhsX19zc2htX2FkZChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG0sIGludCBsZW4pOwo+ICsK PiArX2hpZGRlbiBpbnQgbGlieGxfX3NzaG1fY2hlY2tfb3ZlcmxhcChsaWJ4bF9fZ2MgKmdjLCB1 aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9zdGF0aWNfc2htICpzc2htcywgaW50IGxlbik7Cj4gK19oaWRkZW4gaW50IGxpYnhsX19z c2htX3NldGRlZmF1bHQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobSk7Cj4gKwo+ ICAgLyoKPiAgICAqIExvY2FsIHZhcmlhYmxlczoKPiAgICAqIG1vZGU6IEMKPiBkaWZmIC0tZ2l0 IGEvdG9vbHMvbGlieGwvbGlieGxfc3NobS5jIGIvdG9vbHMvbGlieGwvbGlieGxfc3NobS5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwLi41NjJmNDZmMjk5Cj4gLS0t IC9kZXYvbnVsbAo+ICsrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3NzaG0uYwo+IEBAIC0wLDAgKzEs Mzk3IEBACj4gKyNpbmNsdWRlICJsaWJ4bF9vc2RlcHMuaCIKPiArI2luY2x1ZGUgImxpYnhsX2lu dGVybmFsLmgiCj4gKyNpbmNsdWRlICJsaWJ4bF9hcmNoLmgiCj4gKwo+ICsjZGVmaW5lIFNTSE1f UEFUSChpZCkgR0NTUFJJTlRGKCIvbGlieGwvc3RhdGljX3NobS8lcyIsIGlkKQo+ICsKPiArI2Rl ZmluZSBTU0hNX0VSUk9SKGRvbWlkLCBzc2htaWQsIGYsIC4uLikgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAo+ICsgICAgTE9HRChFUlJPUiwgZG9taWQsICJzdGF0aWNfc2htIGlkID0g JXM6ICIgZiwgc3NobWlkLCAjI19fVkFfQVJHU19fKQo+ICsKPiArCj4gKy8qIFNldCBkZWZhdWx0 IHZhbHVlcyBmb3IgbGlieGxfc3RhdGljX3NobSAqLwo+ICtpbnQgbGlieGxfX3NzaG1fc2V0ZGVm YXVsdChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfc3RhdGljX3NobSAqc3NobSkKPiArewo+ICsgICAgaW50IHJjOwo+ICsK PiArICAgIGlmIChzc2htLT5yb2xlID09IExJQlhMX1NTSE1fUk9MRV9VTktOT1dOKQo+ICsgICAg ICAgIHNzaG0tPnJvbGUgPSBMSUJYTF9TU0hNX1JPTEVfU0xBVkU7Cj4gKyAgICBpZiAoc3NobS0+ cHJvdCA9PSBMSUJYTF9TU0hNX1BST1RfVU5LTk9XTikKPiArICAgICAgICBzc2htLT5wcm90ID0g TElCWExfU1NITV9QUk9UX1JXOwoKV2hhdCBpcyB0aGUgcHVycG9zZSBvZiB7Uk9MRSxQUk9UfV9V TktOT1dOIGlmIHlvdSBkZWZhdWx0IGl0IHJlc3AuIHRvIApST0xFX1NMQVZFIGFuZCBQUk9UX1JX LiAgV291bGQgbm90IGl0IGJlIGVhc2llciB0byBqdXN0IGRyb3AgdGhlbT8KCj4gKwo+ICsgICAg Lyogcm9sZS1zcGVjaWZpYyBjaGVja3MgKi8KPiArICAgIGlmIChzc2htLT5yb2xlID09IExJQlhM X1NTSE1fUk9MRV9TTEFWRSkgewo+ICsgICAgICAgIGlmIChzc2htLT5vZmZzZXQgPT0gTElCWExf U1NITV9SQU5HRV9VTktOT1dOKQo+ICsgICAgICAgICAgICBzc2htLT5vZmZzZXQgPSAwOwo+ICsg ICAgICAgIGlmIChzc2htLT5jYWNoZV9wb2xpY3kgIT0gTElCWExfU1NITV9DQUNIRVBPTElDWV9V TktOT1dOKSB7Cj4gKyAgICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICJjYWNoZV9wb2xpY3kgaXMgb25seSBhcHBsaWNhYmxlIHRv IG1hc3RlciBkb21haW5zIik7Cj4gKyAgICAgICAgICAgIHJjID0gRVJST1JfSU5WQUw7Cj4gKyAg ICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArICAgIH0gZWxzZSB7Cj4gKyAgICAg ICAgaWYgKHNzaG0tPm9mZnNldCAhPSBMSUJYTF9TU0hNX1JBTkdFX1VOS05PV04pIHsKPiArICAg ICAgICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgIm9mZnNldCBpcyBvbmx5IGFwcGxpY2FibGUgdG8gc2xhdmUgZG9tYWlucyIpOwo+ICsg ICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOwo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJjID0gbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2Fj aGVwb2xpY3lfc2V0ZGVmYXVsdChzc2htKTsKPiArICAgICAgICBpZiAocmMpIHsKPiArICAgICAg ICAgICAgU1NITV9FUlJPUihkb21pZCwgc3NobS0+aWQsCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgImNhY2hlIHBvbGljeSBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0iKTsKPiArICAg ICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIHJjID0g MDsKPiArb3V0Ogo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4gKwo+ICsvKiBDb21wYXJhdG9yIGZv ciBzb3J0aW5nIHNzaG0gcmFuZ2VzIGJ5IHNzaG0tPmJlZ2luICovCj4gK3N0YXRpYyBpbnQgc3No bV9yYW5nZV9jbXAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKPiArewo+ICsgICAgbGli eGxfc3RhdGljX3NobSAqY29uc3QgKnNzaG1hID0gYSwgKmNvbnN0ICpzc2htYiA9IGI7Cj4gKyAg ICByZXR1cm4gKCpzc2htYSktPmJlZ2luID4gKCpzc2htYiktPmJlZ2luID8gMSA6IC0xOwo+ICt9 Cj4gKwo+ICsvKiBjaGVjayBpZiB0aGUgc3NobSBzbGF2ZSBjb25maWdzIGluIEBzc2htIG92ZXJs YXAgKi8KCnMvY2hlY2svQ2hlY2svCgo+ICtpbnQgbGlieGxfX3NzaG1fY2hlY2tfb3ZlcmxhcChs aWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG1zLCBpbnQgbGVuKQo+ICt7Cj4gKwo+ ICsgICAgY29uc3QgbGlieGxfc3RhdGljX3NobSAqKnNsYXZlX3NzaG1zID0gTlVMTDsKPiArICAg IGludCBudW1fc2xhdmVzOwo+ICsgICAgaW50IGk7Cj4gKwo+ICsgICAgaWYgKCFsZW4pIHJldHVy biAwOwo+ICsKPiArICAgIHNsYXZlX3NzaG1zID0gbGlieGxfX2NhbGxvYyhnYywgbGVuLCBzaXpl b2Yoc2xhdmVfc3NobXNbMF0pKTsKPiArICAgIG51bV9zbGF2ZXMgPSAwOwo+ICsgICAgZm9yIChp ID0gMDsgaSA8IGxlbjsgKytpKSB7Cj4gKyAgICAgICAgaWYgKHNzaG1zW2ldLnJvbGUgPT0gTElC WExfU1NITV9ST0xFX1NMQVZFKQo+ICsgICAgICAgICAgICBzbGF2ZV9zc2htc1tudW1fc2xhdmVz KytdID0gc3NobXMgKyBpOwo+ICsgICAgfQo+ICsgICAgcXNvcnQoc2xhdmVfc3NobXMsIG51bV9z bGF2ZXMsIHNpemVvZihzbGF2ZV9zc2htc1swXSksIHNzaG1fcmFuZ2VfY21wKTsKPiArCj4gKyAg ICBmb3IgKGkgPSAwOyBpIDwgbnVtX3NsYXZlcyAtIDE7ICsraSkgewo+ICsgICAgICAgIGlmIChz bGF2ZV9zc2htc1tpKzFdLT5iZWdpbiA8IHNsYXZlX3NzaG1zW2ldLT5lbmQpIHsKPiArICAgICAg ICAgICAgU1NITV9FUlJPUihkb21pZCwgc2xhdmVfc3NobXNbaSsxXS0+aWQsICJzbGF2ZSByYW5n ZXMgb3ZlcmxhcC4iKTsKPiArICAgICAgICAgICAgcmV0dXJuIEVSUk9SX0lOVkFMOwo+ICsgICAg ICAgIH0KPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArLyogICBsaWJ4 bF9fc3NobV9kb19tYXAgLS0gbWFwIHBhZ2VzIGludG8gc2xhdmUncyBwaHlzbWFwCj4gKyAqCj4g KyAqICAgVGhpcyBmdW5jdGlvbnMgbWFwcwo+ICsgKiAgICAgbWFzdGVyIGdmbjogW0Btc3NobS0+ YmVnaW4gKyBAc3NobS0+b2Zmc2V0LCBAbXNzaG0tPmVuZCArIEBzc2htLT5vZmZzZXQpCj4gKyAq ICAgaW50bwo+ICsgKiAgICAgc2xhdmUgZ2ZuOiBbQHNzaG0tPmJlZ2luLCBAc3NobS0+ZW5kKQo+ ICsgKgo+ICsgKiAgIFRoZSBnZm5zIG9mIHRoZSBwYWdlcyB0aGF0IGFyZSBzdWNjZXNzZnVsbHkg bWFwcGVkIHdpbGwgYmUgc3RvcmVkCj4gKyAqICAgaW4gQG1hcHBlZCwgYW5kIHRoZSBudW1iZXIg b2YgdGhlIGdmbnMgd2lsbCBiZSBzdG9yZWQgaW4gQG5tYXBwZWQuCj4gKyAqCj4gKyAqICAgVGhl IGNhbGxlciBoYXZlIHRvIGd1YXJlbnRlZSB0aGF0IHNzaG0tPmJlZ2luIDwgc3NobS0+ZW5kIGFu ZCBhbGwgdGhlCgpzL2hhdmUgdG8vaGFzIHRvLyBJIHRoaW5rLgpzL2d1YXJlbnRlZS9ndWFyYW50 ZWUvCgo+ICsgKiAgIHZhbHVlcyBhcmUgcGFnZS1hbGlnbmVkLgoKSG1tbSwgSSBkb24ndCBzZWUg dGhlIGFsaWduZW1lbnQgY2hlY2sgaW4gbGlieGwuIFNvIGRvIHlvdSByZWx5IG9uIHRoZSAKdG9v bHN0YWNrIHRvIGRvIGl0PwoKPiArICovCj4gK3N0YXRpYyBpbnQgbGlieGxfX3NzaG1fZG9fbWFw KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IG1pZCwgdWludDMyX3Qgc2lkLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9zdGF0aWNfc2htICpzc2htLCBsaWJ4bF9zdGF0aWNf c2htICptc3NobSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICpt YXBwZWQsIHVuc2lnbmVkIGludCAqbm1hcHBlZCkKPiArewo+ICsgICAgaW50IHJjOwo+ICsgICAg aW50IGk7Cj4gKyAgICB1bnNpZ25lZCBpbnQgbnVtX21wYWdlcywgbnVtX3NwYWdlcywgbnVtX3N1 Y2Nlc3MsIG9mZnNldDsKCkEgZnJhbWUgbnVtYmVyIG1heSBub3QgZml0IGludG8gYSAzMi1iaXQg dmFsdWUuIFlvdSB3b3VsZCBuZWVkIHRvIHVzZSAKeGVuX3Bmbl90ICg2NC1iaXQpIGhlcmUuCgo+ ICsgICAgaW50ICplcnJzOwo+ICsgICAgeGVuX3Vsb25nX3QgKmlkeHM7Cj4gKyAgICB4ZW5fcGZu X3QgKmdwZm5zOwo+ICsKPiArICAgIG51bV9tcGFnZXMgPSAobXNzaG0tPmVuZCAtIG1zc2htLT5i ZWdpbikgPj4gWENfUEFHRV9TSElGVDsKPiArICAgIG51bV9zcGFnZXMgPSAoc3NobS0+ZW5kIC0g c3NobS0+YmVnaW4pID4+IFhDX1BBR0VfU0hJRlQ7Cj4gKyAgICBvZmZzZXQgPSBzc2htLT5vZmZz ZXQgPj4gWENfUEFHRV9TSElGVDsKPiArCj4gKyAgICAvKiBDaGVjayByYW5nZS4gVGVzdCBvZmZz ZXQgPCBtcGFnZXMgZmlyc3QgdG8gYXZvaWQgb3ZlcmZsb3cgKi8KPiArICAgIGlmICgob2Zmc2V0 ID49IG51bV9tcGFnZXMpIHx8IChudW1fbXBhZ2VzIC0gb2Zmc2V0IDwgbnVtX3NwYWdlcykpIHsK PiArICAgICAgICBTU0hNX0VSUk9SKHNpZCwgc3NobS0+aWQsICJleGNlZWRzIG1hc3RlcidzIGFk ZHJlc3Mgc3BhY2UuIik7Cj4gKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKPiArICAgICAgICBn b3RvIG91dDsKPiArICAgIH0KPiArCj4gKyAgICAvKiBmaWxsIG91dCB0aGUgcGZuJ3MgYW5kIGRv IHRoZSBtYXBwaW5nICovCgpJIHRoaW5rIHlvdSBtZWFuIGdmbiBoZXJlIGFuZCBub3QgcGZuLgoK PiArICAgIGVycnMgPSBsaWJ4bF9fY2FsbG9jKGdjLCBudW1fc3BhZ2VzLCBzaXplb2YoaW50KSk7 Cj4gKyAgICBpZHhzID0gbGlieGxfX2NhbGxvYyhnYywgbnVtX3NwYWdlcywgc2l6ZW9mKHhlbl91 bG9uZ190KSk7Cj4gKyAgICBncGZucyA9IGxpYnhsX19jYWxsb2MoZ2MsIG51bV9zcGFnZXMsIHNp emVvZih4ZW5fcGZuX3QpKTsKPiArICAgIGZvciAoaSA9IDA7IGkgPCBudW1fc3BhZ2VzOyBpKysp IHsKPiArICAgICAgICBpZHhzW2ldID0gKG1zc2htLT5iZWdpbiA+PiBYQ19QQUdFX1NISUZUKSAr IG9mZnNldCArIGk7Cj4gKyAgICAgICAgZ3BmbnNbaV09IChzc2htLT5iZWdpbiA+PiBYQ19QQUdF X1NISUZUKSArIGk7Cj4gKyAgICB9Cj4gKyAgICByYyA9IHhjX2RvbWFpbl9hZGRfdG9fcGh5c21h cF9iYXRjaChDVFgtPnhjaCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpZCwgbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg WEVOTUFQU1BBQ0VfZ21mbl9zaGFyZSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG51bV9zcGFnZXMsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpZHhzLCBncGZucywgZXJycyk7Cj4gKwo+ICsgICAgbnVtX3N1Y2Nlc3MgPSAwOwo+ ICsgICAgZm9yIChpID0gMDsgaSA8IG51bV9zcGFnZXM7IGkrKykgewo+ICsgICAgICAgIGlmIChl cnJzW2ldKSB7Cj4gKyAgICAgICAgICAgIFNTSE1fRVJST1Ioc2lkLCBzc2htLT5pZCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgbWFwIGF0IGFkZHJlc3MgMHglIlBSSXg2NCIuIiwK PiArICAgICAgICAgICAgICAgICAgICAgICBncGZuc1tpXSA8PCBYQ19QQUdFX1NISUZUKTsKPiAr ICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwo+ICsgICAgICAgIH0gZWxzZSB7Cj4gKyAgICAg ICAgICAgIG1hcHBlZFtudW1fc3VjY2VzcysrXSA9IGdwZm5zW2ldOwo+ICsgICAgICAgIH0KPiAr ICAgIH0KPiArICAgICpubWFwcGVkID0gbnVtX3N1Y2Nlc3M7Cj4gKyAgICBpZiAocmMpIGdvdG8g b3V0Owo+ICsKPiArICAgIHJjID0gMDsKPiArb3V0Ogo+ICsgICAgcmV0dXJuIHJjOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGxpYnhsX19zc2htX2luY3JlZihsaWJ4bF9fZ2MgKmdjLCB4c190cmFu c2FjdGlvbl90IHh0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpzc2htX3BhdGgpCj4gK3sKPiArICAgIGludCByYywgY291bnQ7Cj4gKyAgICBjb25zdCBjaGFy ICpjb3VudF9wYXRoLCAqY291bnRfc3RyaW5nOwo+ICsKPiArICAgIGNvdW50X3BhdGggPSBHQ1NQ UklOVEYoIiVzL3VzZXJjbnQiLCBzc2htX3BhdGgpOwo+ICsgICAgcmMgPSBsaWJ4bF9feHNfcmVh ZF9jaGVja2VkKGdjLCB4dCwgY291bnRfcGF0aCwgJmNvdW50X3N0cmluZyk7Cj4gKyAgICBpZiAo cmMpIGdvdG8gb3V0Owo+ICsgICAgY291bnQgPSBhdG9pKGNvdW50X3N0cmluZyk7Cj4gKwo+ICsg ICAgY291bnRfc3RyaW5nID0gR0NTUFJJTlRGKCIlZCIsIGNvdW50KzEpOwo+ICsgICAgcmMgPSBs aWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywgeHQsIGNvdW50X3BhdGgsIGNvdW50X3N0cmluZyk7 Cj4gKyAgICBpZiAocmMpIGdvdG8gb3V0OwoKSSB3YXMgYSBhYm91dCB0byBzYXkgdGhlIHVwZGF0 ZSBkb2VzIG5vdCBsb29rIHNhZmUsIGJ1dCB0aGVuIG5vdGljZWQgaXQgCndhcyBjYWxsZWQgd2l0 aGluIGEgc2FtZSB0cmFuc2F0aW9uLiBZb3UgbWlnaHQgd2FudCB0byBhZGQgYSBjb21tZW50IG9u IAp0b3Agb2YgdGhpcyBmdW5jdGlvbiB0byBhdm9pZCBtaXN1bmRlcnN0YW5kaW5nLgoKPiArCj4g KyAgICByYyA9IDA7Cj4gK291dDoKPiArICAgIHJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGlj IGludCBsaWJ4bF9fc3NobV9hZGRfc2xhdmUobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQs Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNz aG0pCj4gK3sKPiArICAgIGludCByYywgaTsKPiArICAgIGNvbnN0IGNoYXIgKnNzaG1fcGF0aCwg KnNsYXZlX3BhdGg7Cj4gKyAgICBjb25zdCBjaGFyICpkb21fcGF0aCwgKmRvbV9zc2htX3BhdGgs ICpkb21fcm9sZV9wYXRoOwo+ICsgICAgY29uc3QgY2hhciAqeHNfdmFsdWU7Cj4gKyAgICBjaGFy ICplbnRzWzldOwo+ICsgICAgbGlieGxfc3RhdGljX3NobSBtYXN0ZXJfc3NobTsKPiArICAgIHVp bnQzMl90IG1hc3Rlcl9kb21pZDsKPiArICAgIHhlbl9wZm5fdCAqbWFwcGVkOwo+ICsgICAgdW5z aWduZWQgaW50IG5tYXBwZWQgPSAwOwo+ICsgICAgeHNfdHJhbnNhY3Rpb25fdCB4dCA9IFhCVF9O VUxMOwo+ICsgICAgYm9vbCBpc3JldHJ5Owo+ICsKPiArICAgIHNzaG1fcGF0aCA9IFNTSE1fUEFU SChzc2htLT5pZCk7Cj4gKyAgICBzbGF2ZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9zbGF2ZXMvJSJQ Ukl1MzIsIHNzaG1fcGF0aCwgZG9taWQpOwo+ICsgICAgZG9tX3BhdGggPSBsaWJ4bF9feHNfZ2V0 X2RvbXBhdGgoZ2MsIGRvbWlkKTsKPiArICAgIC8qIHRoZSBkb21haW4gc2hvdWxkIGJlIGluIHhl bnN0b3JlIGJ5IG5vdyAqLwo+ICsgICAgYXNzZXJ0KGRvbV9wYXRoKTsKPiArICAgIGRvbV9zc2ht X3BhdGggPSBHQ1NQUklOVEYoIiVzL3N0YXRpY19zaG0vJXMiLCBkb21fcGF0aCwgc3NobS0+aWQp Owo+ICsgICAgZG9tX3JvbGVfcGF0aCA9IEdDU1BSSU5URigiJXMvcm9sZSIsIGRvbV9zc2htX3Bh dGgpOwo+ICsKPiArICAgIC8qIHByZXBhcmUgdGhlIHNsYXZlIHhlbnN0b3JlIGVudHJpZXMgKi8K PiArICAgIGVudHNbMF0gPSAiYmVnaW4iOwo+ICsgICAgZW50c1sxXSA9IEdDU1BSSU5URigiMHgl IlBSSXg2NCwgc3NobS0+YmVnaW4pOwo+ICsgICAgZW50c1syXSA9ICJlbmQiOwo+ICsgICAgZW50 c1szXSA9IEdDU1BSSU5URigiMHglIlBSSXg2NCwgc3NobS0+ZW5kKTsKPiArICAgIGVudHNbNF0g PSAib2Zmc2V0IjsKPiArICAgIGVudHNbNV0gPSBHQ1NQUklOVEYoIjB4JSJQUkl4NjQsIHNzaG0t Pm9mZnNldCk7Cj4gKyAgICBlbnRzWzZdID0gInByb3QiOwo+ICsgICAgZW50c1s3XSA9IGxpYnhs X19zdHJkdXAoZ2MsIGxpYnhsX3NzaG1fcHJvdF90b19zdHJpbmcoc3NobS0+cHJvdCkpOwo+ICsg ICAgZW50c1s4XSA9IE5VTEw7Cj4gKwo+ICsgICAgbWFwcGVkID0gbGlieGxfX2NhbGxvYyhnYywg KHNzaG0tPmVuZCAtIHNzaG0tPmJlZ2luKSA+PiBYQ19QQUdFX1NISUZULAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplb2YoeGVuX3Bmbl90KSk7Cj4gKwo+ICsgICAgaXNyZXRyeSA9 IGZhbHNlOwo+ICsgICAgZm9yICg7Oykgewo+ICsgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5z YWN0aW9uX3N0YXJ0KGdjLCAmeHQpOwo+ICsgICAgICAgIGlmIChyYykgZ290byBvdXQ7Cj4gKwo+ ICsgICAgICAgIGlmICghbGlieGxfX3hzX3JlYWQoZ2MsIHh0LCBzc2htX3BhdGgpKSB7Cj4gKyAg ICAgICAgICAgIFNTSE1fRVJST1IoZG9taWQsIHNzaG0tPmlkLCAibm8gbWFzdGVyIGZvdW5kLiIp Owo+ICsgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cj4gKyAgICAgICAgICAgIGdvdG8gb3V0 Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyogZXZlcnkgSUQgY2FuIGFwcGVhciBpbiBl YWNoIGRvbWFpbiBhdCBtb3N0IG9uY2UgKi8KPiArICAgICAgICBpZiAobGlieGxfX3hzX3JlYWQo Z2MsIHh0LCBkb21fc3NobV9wYXRoKSkgewo+ICsgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlk LCBzc2htLT5pZCwKPiArICAgICAgICAgICAgICAgICAgICAgICAiZG9tYWluIHRyaWVkIHRvIG1h cCB0aGUgc2FtZSBJRCB0d2ljZS4iKTsKPiArICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwo+ ICsgICAgICAgICAgICBnb3RvIG91dDsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qIGxv b2sgYXQgdGhlIG1hc3RlciBpbmZvIGFuZCBzZWUgaWYgd2UgY291bGQgZG8gdGhlIG1hcHBpbmcg Ki8KPiArICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL3Byb3QiLCBzc2ht X3BhdGgpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHNfdmFsdWUp Owo+ICsgICAgICAgIGlmIChyYykgZ290byBvdXQ7Cj4gKyAgICAgICAgbGlieGxfc3NobV9wcm90 X2Zyb21fc3RyaW5nKHhzX3ZhbHVlLCAmbWFzdGVyX3NzaG0ucHJvdCk7Cj4gKwo+ICsgICAgICAg IHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgeHQsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvYmVnaW4iLCBzc2htX3BhdGgpLAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmeHNfdmFsdWUpOwo+ICsgICAgICAg IGlmIChyYykgZ290byBvdXQ7Cj4gKyAgICAgICAgbWFzdGVyX3NzaG0uYmVnaW4gPSBzdHJ0b3Vs bCh4c192YWx1ZSwgTlVMTCwgMTYpOwo+ICsKPiArICAgICAgICByYyA9IGxpYnhsX194c19yZWFk X2NoZWNrZWQoZ2MsIHh0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH Q1NQUklOVEYoIiVzL2VuZCIsIHNzaG1fcGF0aCksCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ4c192YWx1ZSk7Cj4gKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiAr ICAgICAgICBtYXN0ZXJfc3NobS5lbmQgPSBzdHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOwo+ ICsKPiArICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIHh0LAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVzL21hc3RlciIsIHNz aG1fcGF0aCksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ4c192YWx1 ZSk7Cj4gKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArICAgICAgICBtYXN0ZXJfZG9taWQg PSBzdHJ0b3VsbCh4c192YWx1ZSwgTlVMTCwgMTYpOwo+ICsKPiArICAgICAgICBpZiAoc3NobS0+ cHJvdCA9PSBMSUJYTF9TU0hNX1BST1RfVU5LTk9XTikKPiArICAgICAgICAgICAgc3NobS0+cHJv dCA9IG1hc3Rlcl9zc2htLnByb3Q7Cj4gKwo+ICsgICAgICAgIC8qIGNoZWNrIGlmIHRoZSBzbGF2 ZSBpcyBhc2tpbmcgdG9vIG11Y2ggcGVybWlzc2lvbiAqLwo+ICsgICAgICAgIGlmIChtYXN0ZXJf c3NobS5wcm90IDwgc3NobS0+cHJvdCkgewo+ICsgICAgICAgICAgICBTU0hNX0VSUk9SKGRvbWlk LCBzc2htLT5pZCwgInNsYXZlIGlzIGFza2luZyB0b28gbXVjaCBwZXJtaXNzaW9uLiIpOwo+ICsg ICAgICAgICAgICByYyA9IEVSUk9SX0lOVkFMOwo+ICsgICAgICAgICAgICBnb3RvIG91dDsKPiAr ICAgICAgICB9Cj4gKwo+ICsgICAgICAgIC8qIGFsbCBjaGVja3MgcGFzc2VkLCBkbyB0aGUgam9i ICovCj4gKyAgICAgICAgaWYgKCFpc3JldHJ5KSB7Cj4gKyAgICAgICAgICAgIHJjID0gbGlieGxf X3NzaG1fZG9fbWFwKGdjLCBtYXN0ZXJfZG9taWQsIGRvbWlkLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzc2htLCAmbWFzdGVyX3NzaG0sCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1hcHBlZCwgJm5tYXBwZWQpOwo+ICsgICAgICAgICAgICBp ZiAocmMpIGdvdG8gb3V0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyogd3JpdGUgdGhl IHJlc3VsdCB0byB4ZW5zdG9yZSBhbmQgY29tbWl0ICovCj4gKyAgICAgICAgcmMgPSBsaWJ4bF9f eHNfd3JpdGVfY2hlY2tlZChnYywgeHQsIGRvbV9yb2xlX3BhdGgsICJzbGF2ZSIpOwo+ICsgICAg ICAgIGlmIChyYykgZ290byBvdXQ7Cj4gKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3JpdGV2KGdj LCB4dCwgc2xhdmVfcGF0aCwgZW50cyk7Cj4gKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiAr ICAgICAgICByYyA9IGxpYnhsX19zc2htX2luY3JlZihnYywgeHQsIHNzaG1fcGF0aCk7Cj4gKyAg ICAgICAgaWYgKHJjKSBnb3RvIG91dDsKPiArCj4gKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJh bnNhY3Rpb25fY29tbWl0KGdjLCAmeHQpOwo+ICsgICAgICAgIGlmICghcmMpIGJyZWFrOwo+ICsg ICAgICAgIGlmIChyYyA8IDApIGdvdG8gb3V0Owo+ICsgICAgICAgIGlzcmV0cnkgPSB0cnVlOwo+ ICsgICAgfQo+ICsKPiArICAgIHJjID0gMDsKPiArb3V0Ogo+ICsgICAgaWYgKHJjKSB7Cj4gKyAg ICAgICAgLyogcm9sbCBiYWNrIHN1Y2Nlc3NmdWxseSBtYXBwZWQgcGFnZXMgKi8KPiArICAgICAg ICBTU0hNX0VSUk9SKGRvbWlkLCBzc2htLT5pZCwgImZhaWxlZCB0byBtYXAgc29tZSBwYWdlcywg Y2FuY2VsbGluZy4iKTsKPiArICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbm1hcHBlZDsgaSsrKSB7 Cj4gKyAgICAgICAgICAgIHhjX2RvbWFpbl9yZW1vdmVfZnJvbV9waHlzbWFwKENUWC0+eGNoLCBk b21pZCwgbWFwcGVkW2ldKTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKwo+ICsgICAgbGlieGxf X3hzX3RyYW5zYWN0aW9uX2Fib3J0KGdjLCAmeHQpOwo+ICsKPiArICAgIHJldHVybiByYzsKPiAr fQo+ICsKPiArc3RhdGljIGludCBsaWJ4bF9fc3NobV9hZGRfbWFzdGVyKGxpYnhsX19nYyAqZ2Ms IHVpbnQzMl90IGRvbWlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGli eGxfc3RhdGljX3NobSAqc3NobSkKPiArewo+ICsgICAgaW50IHJjOwo+ICsgICAgY29uc3QgY2hh ciAqc3NobV9wYXRoLCAqZG9tX3BhdGgsICpkb21fcm9sZV9wYXRoOwo+ICsgICAgY2hhciAqZW50 c1sxM107Cj4gKyAgICBzdHJ1Y3QgeHNfcGVybWlzc2lvbnMgbm9wZXJtOwo+ICsgICAgeHNfdHJh bnNhY3Rpb25fdCB4dCA9IFhCVF9OVUxMOwo+ICsKPiArICAgIHNzaG1fcGF0aCA9IFNTSE1fUEFU SChzc2htLT5pZCk7Cj4gKyAgICBkb21fcGF0aCA9IGxpYnhsX194c19nZXRfZG9tcGF0aChnYywg ZG9taWQpOwo+ICsgICAgLyogdGhlIGRvbWFpbiBzaG91bGQgYmUgaW4geGVuc3RvcmUgYnkgbm93 ICovCj4gKyAgICBhc3NlcnQoZG9tX3BhdGgpOwo+ICsgICAgZG9tX3JvbGVfcGF0aCA9IEdDU1BS SU5URigiJXMvc3RhdGljX3NobS8lcy9yb2xlIiwgZG9tX3BhdGgsIHNzaG0tPmlkKTsKPiArCj4g KyAgICAvKiBwcmVwYXJlIHRoZSB4ZW5zdG9yZSBlbnRyaWVzICovCj4gKyAgICBlbnRzWzBdID0g Im1hc3RlciI7Cj4gKyAgICBlbnRzWzFdID0gR0NTUFJJTlRGKCIlIlBSSXUzMiwgZG9taWQpOwo+ ICsgICAgZW50c1syXSA9ICJiZWdpbiI7Cj4gKyAgICBlbnRzWzNdID0gR0NTUFJJTlRGKCIweCUi UFJJeDY0LCBzc2htLT5iZWdpbik7Cj4gKyAgICBlbnRzWzRdID0gImVuZCI7Cj4gKyAgICBlbnRz WzVdID0gR0NTUFJJTlRGKCIweCUiUFJJeDY0LCBzc2htLT5lbmQpOwo+ICsgICAgZW50c1s2XSA9 ICJwcm90IjsKPiArICAgIGVudHNbN10gPSBsaWJ4bF9fc3RyZHVwKGdjLCBsaWJ4bF9zc2htX3By b3RfdG9fc3RyaW5nKHNzaG0tPnByb3QpKTsKPiArICAgIGVudHNbOF0gPSAiY2FjaGVfcG9saWN5 IjsKPiArICAgIGVudHNbOV0gPSBsaWJ4bF9fc3RyZHVwKGdjLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbGlieGxfc3NobV9jYWNoZXBvbGljeV90b19zdHJpbmcoc3NobS0+Y2FjaGVf cG9saWN5KSk7Cj4gKyAgICBlbnRzWzEwXSA9ICJ1c2VyY250IjsKPiArICAgIGVudHNbMTFdID0g IjEiOwo+ICsgICAgZW50c1sxMl0gPSBOVUxMOwo+ICsKPiArICAgIC8qIGNvdWxkIG9ubHkgYmUg YWNjZXNzZWQgYnkgRG9tMCAqLwo+ICsgICAgbm9wZXJtLmlkID0gMDsKPiArICAgIG5vcGVybS5w ZXJtcyA9IFhTX1BFUk1fTk9ORTsKPiArCj4gKyAgICBmb3IgKDs7KSB7Cj4gKyAgICAgICAgcmMg PSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25fc3RhcnQoZ2MsICZ4dCk7Cj4gKyAgICAgICAgaWYgKHJj KSBnb3RvIG91dDsKPiArCj4gKyAgICAgICAgaWYgKCFsaWJ4bF9feHNfcmVhZChnYywgeHQsIHNz aG1fcGF0aCkpIHsKPiArICAgICAgICAgICAgLyogZXZlcnkgSUQgY2FuIGFwcGVhciBpbiBlYWNo IGRvbWFpbiBhdCBtb3N0IG9uY2UgKi8KPiArICAgICAgICAgICAgaWYgKGxpYnhsX194c19yZWFk KGdjLCB4dCwgZG9tX3JvbGVfcGF0aCkpIHsKPiArICAgICAgICAgICAgICAgIFNTSE1fRVJST1Io ZG9taWQsIHNzaG0tPmlkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG9tYWluIHRy aWVkIHRvIG1hcCB0aGUgc2FtZSBJRCB0d2ljZS4iKTsKPiArICAgICAgICAgICAgICAgIHJjID0g RVJST1JfRkFJTDsKPiArICAgICAgICAgICAgICAgIGdvdG8gb3V0Owo+ICsgICAgICAgICAgICB9 Cj4gKyAgICAgICAgICAgIHJjID0gbGlieGxfX3hzX3dyaXRlX2NoZWNrZWQoZ2MsIHh0LCBkb21f cm9sZV9wYXRoLCAibWFzdGVyIik7Cj4gKyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7Owo+ ICsKPiArICAgICAgICAgICAgbGlieGxfX3hzX21rbm9kKGdjLCB4dCwgc3NobV9wYXRoLCAmbm9w ZXJtLCAxKTsKPiArICAgICAgICAgICAgbGlieGxfX3hzX3dyaXRldihnYywgeHQsIHNzaG1fcGF0 aCwgZW50cyk7Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgU1NITV9FUlJPUihk b21pZCwgc3NobS0+aWQsICJjYW4gb25seSBoYXZlIG9uZSBtYXN0ZXIuIik7Cj4gKyAgICAgICAg ICAgIHJjID0gRVJST1JfRkFJTDsKPiArICAgICAgICAgICAgZ290byBvdXQ7Cj4gKyAgICAgICAg fQo+ICsKPiArICAgICAgICByYyA9IGxpYnhsX194c190cmFuc2FjdGlvbl9jb21taXQoZ2MsICZ4 dCk7Cj4gKyAgICAgICAgaWYgKCFyYykgYnJlYWs7Cj4gKyAgICAgICAgaWYgKHJjIDwgMCkgZ290 byBvdXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmMgPSAwOwo+ICtvdXQ6Cj4gKyAgICBsaWJ4bF9f eHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ4dCk7Cj4gKyAgICByZXR1cm4gcmM7Cj4gK30KPiAr Cj4gK2ludCBsaWJ4bF9fc3NobV9hZGQobGlieGxfX2djICpnYywgIHVpbnQzMl90IGRvbWlkLAo+ ICsgICAgICAgICAgICAgICAgICAgIGxpYnhsX3N0YXRpY19zaG0gKnNzaG1zLCBpbnQgbGVuKQo+ ICt7Cj4gKyAgICBpbnQgcmMsIGk7Cj4gKwo+ICsgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytp KSB7Cj4gKyAgICAgICAgaWYgKHNzaG1zW2ldLnJvbGUgPT0gTElCWExfU1NITV9ST0xFX1NMQVZF KSB7Cj4gKyAgICAgICAgICAgIHJjID0gbGlieGxfX3NzaG1fYWRkX3NsYXZlKGdjLCBkb21pZCwg c3NobXMraSk7Cj4gKyAgICAgICAgfSBlbHNlIHsKPiArICAgICAgICAgICAgcmMgPSBsaWJ4bF9f c3NobV9hZGRfbWFzdGVyKGdjLCBkb21pZCwgc3NobXMraSk7Cj4gKyAgICAgICAgfQo+ICsgICAg ICAgIGlmIChyYykgIHJldHVybiByYzsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMDsKPiAr fQo+ICsKPiArLyoKPiArICogTG9jYWwgdmFyaWFibGVzOgo+ICsgKiBtb2RlOiBDCj4gKyAqIGMt YmFzaWMtb2Zmc2V0OiA0Cj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4g KyAqLwo+IGRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF94ODYuYyBiL3Rvb2xzL2xpYnhs L2xpYnhsX3g4Ni5jCj4gaW5kZXggNWY5MWZlNGY5Mi4uOGVjNTA0NGViMiAxMDA2NDQKPiAtLS0g YS90b29scy9saWJ4bC9saWJ4bF94ODYuYwo+ICsrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Ni5j Cj4gQEAgLTU5Niw2ICs1OTYsMjUgQEAgdm9pZCBsaWJ4bF9fYXJjaF9kb21haW5fYnVpbGRfaW5m b19hY3BpX3NldGRlZmF1bHQoCj4gICAgICAgbGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZiX2lu Zm8tPmFjcGksIHRydWUpOwo+ICAgfQo+ICAgCj4gK2Jvb2wgbGlieGxfX2FyY2hfZG9tYWluX3N1 cHBvcnRfc3NobShjb25zdCBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9pbmZvKQo+ICt7Cj4g KyAgICAvKiBGSVhNRTogTWFyayB0aGlzIGFzIHVuc3VwcG9ydGVkIGZvciBjYWxsaW5nIHAybV9h ZGRfZm9yZWlnbiBvbiB0d28KPiArICAgICAqIERvbVUncyBpcyBjdXJyZW50bHkgbm90IGFsbG93 ZCBvbiB4ODYsIHNlZSB0aGUgY29tbWVudHMgaW4KPiArICAgICAqIHg4Ni9tbS9wMm0uYzogcDJt X2FkZF9mb3JlaWduLgo+ICsgICAgICovCj4gKyAgICAgcmV0dXJuIGZhbHNlOwo+ICt9Cj4gKwo+ ICtpbnQgbGlieGxfX2FyY2hfZG9tYWluX3NzaG1fY2FjaGVwb2xpY3lfc2V0ZGVmYXVsdChsaWJ4 bF9zdGF0aWNfc2htICpzc2htKQo+ICt7Cj4gKyAgICBpZiAoc3NobS0+Y2FjaGVfcG9saWN5ID09 IExJQlhMX1NTSE1fQ0FDSEVQT0xJQ1lfVU5LTk9XTikKPiArICAgICAgICBzc2htLT5jYWNoZV9w b2xpY3kgPSBMSUJYTF9TU0hNX0NBQ0hFUE9MSUNZX1g4Nl9OT1JNQUw7Cj4gKyAgICBpZiAoc3No bS0+Y2FjaGVfcG9saWN5IDwgTElCWExfU1NITV9DQUNIRVBPTElDWV9YODZfTk9STUFMKQo+ICsg ICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ICsK PiAgIC8qCj4gICAgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gICAgKiBtb2RlOiBDCj4gCgpDaGVlcnMs CgotLSAKSnVsaWVuIEdyYWxsCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9q ZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVu LWRldmVs