From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau =?utf-8?B?TW9ubsOp?= Subject: Re: [PATCH v5 09/15] argo: implement the sendv op; evtchn: expose send_guest_global_virq Date: Tue, 22 Jan 2019 13:08:22 +0100 Message-ID: <20190122120822.v5eyc64fa4moourd@mac> References: <1548064795-18160-1-git-send-email-christopher.w.clark@gmail.com> <1548064795-18160-10-git-send-email-christopher.w.clark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1glur4-0001QU-TF for xen-devel@lists.xenproject.org; Tue, 22 Jan 2019 12:08:34 +0000 Content-Disposition: inline In-Reply-To: <1548064795-18160-10-git-send-email-christopher.w.clark@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Christopher Clark Cc: Juergen Gross , Stefano Stabellini , Wei Liu , Ross Philipson , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Jason Andryuk , Ian Jackson , Rich Persaud , Tim Deegan , Daniel Smith , Julien Grall , Paul Durrant , Jan Beulich , xen-devel@lists.xenproject.org, James McKenzie , Eric Chanudet List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBKYW4gMjEsIDIwMTkgYXQgMDE6NTk6NDlBTSAtMDgwMCwgQ2hyaXN0b3BoZXIgQ2xh cmsgd3JvdGU6Cj4gc2VuZHYgb3BlcmF0aW9uIGlzIGludm9rZWQgdG8gcGVyZm9ybSBhIHN5bmNo cm9ub3VzIHNlbmQgb2YgYnVmZmVycwo+IGNvbnRhaW5lZCBpbiBpb3ZzIHRvIGEgcmVtb3RlIGRv bWFpbidzIHJlZ2lzdGVyZWQgcmluZy4KPiAKPiBJdCB0YWtlczoKPiAgKiBBIGRlc3RpbmF0aW9u IGFkZHJlc3MgKGRvbWlkLCBwb3J0KSBmb3IgdGhlIHJpbmcgdG8gc2VuZCB0by4KPiAgICBJdCBw ZXJmb3JtcyBhIG1vc3Qtc3BlY2lmaWMgbWF0Y2ggbG9va3VwLCB0byBhbGxvdyBmb3Igd2lsZGNh cmQuCj4gICogQSBzb3VyY2UgYWRkcmVzcywgdXNlZCB0byBpbmZvcm0gdGhlIGRlc3RpbmF0aW9u IG9mIHdoZXJlIHRvIHJlcGx5Lgo+ICAqIFRoZSBhZGRyZXNzIG9mIGFuIGFycmF5IG9mIGlvdnMg Y29udGFpbmluZyB0aGUgZGF0YSB0byBzZW5kCj4gICogLi4gYW5kIHRoZSBsZW5ndGggb2YgdGhh dCBhcnJheSBvZiBpb3ZzCj4gICogYW5kIGEgMzItYml0IG1lc3NhZ2UgdHlwZSwgYXZhaWxhYmxl IHRvIGNvbW11bmljYXRlIG1lc3NhZ2UgY29udGV4dAo+ICAgIGRhdGEgKGVnLiBrZXJuZWwtdG8t a2VybmVsLCBzZXBhcmF0ZSBmcm9tIHRoZSBhcHBsaWNhdGlvbiBkYXRhKS4KPiAKPiBJZiBpbnN1 ZmZpY2llbnQgc3BhY2UgZXhpc3RzIGluIHRoZSBkZXN0aW5hdGlvbiByaW5nLCBpdCB3aWxsIHJl dHVybgo+IC1FQUdBSU4gYW5kIFhlbiB3aWxsIG5vdGlmeSB0aGUgY2FsbGVyIHdoZW4gc3VmZmlj aWVudCBzcGFjZSBiZWNvbWVzCj4gYXZhaWxhYmxlLgo+IAo+IEFjY2Vzc2VzIHRvIHRoZSByaW5n IGluZGljZXMgYXJlIGFwcHJvcHJpYXRlbHkgYXRvbWljLiBUaGUgcmluZ3MgYXJlCj4gbWFwcGVk IGludG8gWGVuJ3MgcHJpdmF0ZSBhZGRyZXNzIHNwYWNlIHRvIHdyaXRlIGFzIG5lZWRlZCBhbmQg dGhlCj4gbWFwcGluZ3MgYXJlIHJldGFpbmVkIGZvciBsYXRlciB1c2UuCj4gCj4gTm90aWZpY2F0 aW9ucyBhcmUgc2VudCB0byBndWVzdHMgdmlhIFZJUlEgYW5kIHNlbmRfZ3Vlc3RfZ2xvYmFsX3Zp cnEgaXMKPiBleHBvc2VkIGluIHRoZSBjaGFuZ2UgdG8gZW5hYmxlIGFyZ28gdG8gY2FsbCBpdC4g VklSUV9BUkdPX01FU1NBR0UgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXiBWSVJRX0FSR08KPiBjbGFpbWVkIGZyb20gdGhlIFZJUlEgcHJldmlv dXNseSByZXNlcnZlZCBmb3IgdGhpcyBwdXJwb3NlICgjMTEpLgo+IAo+IFRoZSBWSVJRIG5vdGlm aWNhdGlvbiBtZXRob2QgaXMgdXNlZCByYXRoZXIgdGhhbiBzZW5kaW5nIGV2ZW50cyB1c2luZwo+ IGV2dGNobiBmdW5jdGlvbnMgZGlyZWN0bHkgYmVjYXVzZToKPiAKPiAqIG5vIGN1cnJlbnQgZXZl bnQgY2hhbm5lbCB0eXBlIGlzIGFuIGV4YWN0IGZpdCBmb3IgdGhlIGludGVuZGVkCj4gICBiZWhh dmlvdXIuIEVDU19JUEkgaXMgY2xvc2VzdCwgYnV0IGl0IGRpc2FsbG93cyBtaWdyYXRpb24gdG8K PiAgIG90aGVyIFZDUFVzIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSBhIHJlcXVpcmVtZW50IGZv ciBBcmdvLgo+IAo+ICogYXQgdGhlIHBvaW50IG9mIGFyZ29faW5pdCwgYWxsb2NhdGlvbiBvZiBh biBldmVudCBjaGFubmVsIGlzCj4gICBjb21wbGljYXRlZCBieSBub25lIG9mIHRoZSBndWVzdCBW Q1BVcyBiZWluZyBpbml0aWFsaXplZCB5ZXQKPiAgIGFuZCB0aGUgZXZlbnQgY2hhbm5lbCBsb2dp YyBleHBlY3RzIHRoYXQgYSB2YWxpZCBldmVudCBjaGFubmVsCj4gICBoYXMgYSBwcmVzZW50IFZD UFUuCgpJTU8gaWZmIHlvdSB3YW50ZWQgdG8gdXNlIGV2ZW50IGNoYW5uZWxzIHRob3NlIF9tdXN0 XyBiZSBzZXR1cCBieSB0aGUKZ3Vlc3QsIGllOiB0aGUgZ3Vlc3QgYXJnbyBkcml2ZXIgd291bGQg bG9hZCwgYWxsb2NhdGUgYW4gZXZlbnQgY2hhbm5lbAphbmQgdGhlbiB0ZWxsIHRoZSBoeXBlcnZp c29yIGFib3V0IHRoZSBldmVudCBjaGFubmVsIHRoYXQgc2hvdWxkIGJlCnVzZWQgZm9yIGFyZ28g bm90aWZpY2F0aW9ucy4KCj4gK3N0YXRpYyBpbnQKPiArbWVtY3B5X3RvX2d1ZXN0X3JpbmcoY29u c3Qgc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8sCj4g KyAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBvZmZzZXQsCj4gKyAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHZvaWQgKnNyYywgWEVOX0dVRVNUX0hBTkRMRSh1aW50OF90KSBzcmNf aG5kLAo+ICsgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQo+ICt7Cj4gKyAg ICB1bnNpZ25lZCBpbnQgbWZuc19pbmRleCA9IG9mZnNldCA+PiBQQUdFX1NISUZUOwo+ICsgICAg dm9pZCAqZHN0Owo+ICsgICAgaW50IHJldDsKPiArICAgIHVuc2lnbmVkIGludCBzcmNfb2Zmc2V0 ID0gMDsKPiArCj4gKyAgICBBU1NFUlQoTE9DS0lOR19MMyhkLCByaW5nX2luZm8pKTsKPiArCj4g KyAgICBvZmZzZXQgJj0gflBBR0VfTUFTSzsKPiArCj4gKyAgICBpZiAoIGxlbiArIG9mZnNldCA+ IFhFTl9BUkdPX01BWF9SSU5HX1NJWkUgKQo+ICsgICAgICAgIHJldHVybiAtRUZBVUxUOwo+ICsK PiArICAgIHdoaWxlICggbGVuICkKPiArICAgIHsKPiArICAgICAgICB1bnNpZ25lZCBpbnQgaGVh ZF9sZW4gPSAob2Zmc2V0ICsgbGVuKSA+IFBBR0VfU0laRSA/IFBBR0VfU0laRSAtIG9mZnNldAo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogbGVuOwoKSU1PIHRoYXQgd291bGQgYmUgY2xlYXJlciBhczoKCmhlYWRfbGVuID0gbWlu KFBBR0VfU0laRSAtIG9mZnNldCwgbGVuKTsKCkJ1dCBhbnl3YXksIHRoaXMgc2hvdWxkIGdvIGF3 YXkgd2hlbiB5b3UgbW92ZSB0byB1c2luZyB2bWFwLgoKWy4uLl0KPiArc3RhdGljIGludAo+ICty aW5nYnVmX2luc2VydChjb25zdCBzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgYXJnb19yaW5nX2lu Zm8gKnJpbmdfaW5mbywKPiArICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGFyZ29fcmluZ19p ZCAqc3JjX2lkLAo+ICsgICAgICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHhlbl9h cmdvX2lvdl90KSBpb3ZzX2huZCwKPiArICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBuaW92 LCB1aW50MzJfdCBtZXNzYWdlX3R5cGUsCj4gKyAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg Km91dF9sZW4pCj4gK3sKPiArICAgIHhlbl9hcmdvX3JpbmdfdCByaW5nOwo+ICsgICAgc3RydWN0 IHhlbl9hcmdvX3JpbmdfbWVzc2FnZV9oZWFkZXIgbWggPSB7IH07Cj4gKyAgICBpbnQgc3AsIHJl dDsKPiArICAgIHVuc2lnbmVkIGludCBsZW4gPSAwOwo+ICsgICAgeGVuX2FyZ29faW92X3QgaW92 c1tYRU5fQVJHT19NQVhJT1ZdOwo+ICsgICAgeGVuX2FyZ29faW92X3QgKnBpb3Y7Cj4gKyAgICBY RU5fR1VFU1RfSEFORExFKHVpbnQ4X3QpIE5VTExfaG5kID0KPiArICAgICAgIGd1ZXN0X2hhbmRs ZV9mcm9tX3BhcmFtKGd1ZXN0X2hhbmRsZV9mcm9tX3B0cihOVUxMLCB1aW50OF90KSwgdWludDhf dCk7Cj4gKwo+ICsgICAgQVNTRVJUKExPQ0tJTkdfTDMoZCwgcmluZ19pbmZvKSk7Cj4gKwo+ICsg ICAgcmV0ID0gX19jb3B5X2Zyb21fZ3Vlc3QoaW92cywgaW92c19obmQsIG5pb3YpID8gLUVGQVVM VCA6IDA7Cj4gKyAgICBpZiAoIHJldCApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAg ICAvKgo+ICsgICAgICogT2J0YWluIHRoZSB0b3RhbCBzaXplIG9mIGRhdGEgdG8gdHJhbnNtaXQg LS0gc2V0cyB0aGUgJ2xlbicgdmFyaWFibGUKPiArICAgICAqIC0tIGFuZCBzYW5pdHkgY2hlY2sg dGhhdCB0aGUgaW92cyBjb25mb3JtIHRvIHNpemUgYW5kIG51bWJlciBsaW1pdHMuCj4gKyAgICAg KiBFbmZvcmNlZCBiZWxvdzogbm8gbW9yZSB0aGFuICdsZW4nIGJ5dGVzIG9mIGd1ZXN0IGRhdGEK PiArICAgICAqIChwbHVzIHRoZSBtZXNzYWdlIGhlYWRlcikgd2lsbCBiZSBzZW50IGluIHRoaXMg b3BlcmF0aW9uLgo+ICsgICAgICovCj4gKyAgICByZXQgPSBpb3ZfY291bnQoaW92cywgbmlvdiwg Jmxlbik7Cj4gKyAgICBpZiAoIHJldCApCj4gKyAgICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAg ICAvKgo+ICsgICAgICogU2l6ZSBib3VuZHMgY2hlY2sgYWdhaW5zdCByaW5nIHNpemUgYW5kIHN0 YXRpYyBtYXhpbXVtIG1lc3NhZ2UgbGltaXQuCj4gKyAgICAgKiBUaGUgbWVzc2FnZSBtdXN0IG5v dCBmaWxsIHRoZSByaW5nOyB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZSBzbG90Cj4gKyAgICAg KiByZW1haW5pbmcgc28gd2UgY2FuIGRpc3Rpbmd1aXNoIGEgZnVsbCByaW5nIGZyb20gYW4gZW1w dHkgb25lLgo+ICsgICAgICovCj4gKyAgICBpZiAoICgoUk9VTkRVUF9NRVNTQUdFKGxlbikgKwo+ ICsgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHhlbl9hcmdvX3JpbmdfbWVzc2FnZV9oZWFkZXIp KSA+PSByaW5nX2luZm8tPmxlbikgfHwKPiArICAgICAgICAgKGxlbiA+IE1BWF9BUkdPX01FU1NB R0VfU0laRSkgKQoKbGVuIGlzIGFscmVhZHkgY2hlY2tlZCB0byBiZSA8PSBNQVhfQVJHT19NRVNT QUdFX1NJWkUgaW4gaW92X2NvdW50CndoZXJlIGl0IGdldHMgc2V0LCB0aGlzIGlzIHJlZHVuZGFu dC4KCj4gKyAgICAgICAgcmV0dXJuIC1FTVNHU0laRTsKPiArCj4gKyAgICByZXQgPSBnZXRfc2Fu aXRpemVkX3JpbmcoZCwgJnJpbmcsIHJpbmdfaW5mbyk7Cj4gKyAgICBpZiAoIHJldCApCj4gKyAg ICAgICAgcmV0dXJuIHJldDsKPiArCj4gKyAgICBhcmdvX2RwcmludGsoInJpbmcudHhfcHRyPSV1 IHJpbmcucnhfcHRyPSV1IHJpbmcgbGVuPSV1Igo+ICsgICAgICAgICAgICAgICAgICIgcmluZ19p bmZvLT50eF9wdHI9JXVcbiIsCj4gKyAgICAgICAgICAgICAgICAgcmluZy50eF9wdHIsIHJpbmcu cnhfcHRyLCByaW5nX2luZm8tPmxlbiwgcmluZ19pbmZvLT50eF9wdHIpOwo+ICsKPiArICAgIGlm ICggcmluZy5yeF9wdHIgPT0gcmluZy50eF9wdHIgKQo+ICsgICAgICAgIHNwID0gcmluZ19pbmZv LT5sZW47Cj4gKyAgICBlbHNlCj4gKyAgICB7Cj4gKyAgICAgICAgc3AgPSByaW5nLnJ4X3B0ciAt IHJpbmcudHhfcHRyOwo+ICsgICAgICAgIGlmICggc3AgPCAwICkKPiArICAgICAgICAgICAgc3Ag Kz0gcmluZ19pbmZvLT5sZW47Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIFNpemUg Ym91bmRzIGNoZWNrIGFnYWluc3QgY3VycmVudGx5IGF2YWlsYWJsZSBzcGFjZSBpbiB0aGUgcmlu Zy4KPiArICAgICAqIEFnYWluOiB0aGUgbWVzc2FnZSBtdXN0IG5vdCBmaWxsIHRoZSByaW5nIGxl YXZpbmcgbm8gc3BhY2UgcmVtYWluaW5nLgo+ICsgICAgICovCj4gKyAgICBpZiAoIChST1VORFVQ X01FU1NBR0UobGVuKSArCj4gKyAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgeGVuX2FyZ29fcmlu Z19tZXNzYWdlX2hlYWRlcikpID49IHNwICkKPiArICAgIHsKPiArICAgICAgICBhcmdvX2Rwcmlu dGsoIkVBR0FJTlxuIik7Cj4gKyAgICAgICAgcmV0dXJuIC1FQUdBSU47Cj4gKyAgICB9Cj4gKwo+ ICsgICAgbWgubGVuID0gbGVuICsgc2l6ZW9mKHN0cnVjdCB4ZW5fYXJnb19yaW5nX21lc3NhZ2Vf aGVhZGVyKTsKPiArICAgIG1oLnNvdXJjZS5hcG9ydCA9IHNyY19pZC0+YXBvcnQ7Cj4gKyAgICBt aC5zb3VyY2UuZG9tYWluX2lkID0gc3JjX2lkLT5kb21haW5faWQ7Cj4gKyAgICBtaC5tZXNzYWdl X3R5cGUgPSBtZXNzYWdlX3R5cGU7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIEZvciB0aGlzIGNv cHkgdG8gdGhlIGd1ZXN0IHJpbmcsIHR4X3B0ciBpcyBhbHdheXMgMTYtYnl0ZSBhbGlnbmVkCj4g KyAgICAgKiBhbmQgdGhlIG1lc3NhZ2UgaGVhZGVyIGlzIDE2IGJ5dGVzIGxvbmcuCj4gKyAgICAg Ki8KPiArICAgIEJVSUxEX0JVR19PTigKPiArICAgICAgICBzaXplb2Yoc3RydWN0IHhlbl9hcmdv X3JpbmdfbWVzc2FnZV9oZWFkZXIpICE9IFJPVU5EVVBfTUVTU0FHRSgxKSk7Cj4gKwo+ICsgICAg LyoKPiArICAgICAqIEZpcnN0IGRhdGEgd3JpdGUgaW50byB0aGUgZGVzdGluYXRpb24gcmluZzog Zml4ZWQgc2l6ZSwgbWVzc2FnZSBoZWFkZXIuCj4gKyAgICAgKiBUaGlzIGNhbm5vdCBvdmVycnVu IGJlY2F1c2UgdGhlIGF2YWlsYWJsZSBmcmVlIHNwYWNlICh2YWx1ZSBpbiAnc3AnKQo+ICsgICAg ICogaXMgY2hlY2tlZCBhYm92ZSBhbmQgbXVzdCBiZSBhdCBsZWFzdCB0aGlzIHNpemUuCj4gKyAg ICAgKi8KPiArICAgIHJldCA9IG1lbWNweV90b19ndWVzdF9yaW5nKGQsIHJpbmdfaW5mbywKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmcudHhfcHRyICsgc2l6ZW9mKHhlbl9h cmdvX3JpbmdfdCksCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWgsIE5VTExf aG5kLCBzaXplb2YobWgpKTsKPiArICAgIGlmICggcmV0ICkKPiArICAgIHsKPiArICAgICAgICBn cHJpbnRrKFhFTkxPR19FUlIsCj4gKyAgICAgICAgICAgICAgICAiYXJnbzogZmFpbGVkIHRvIHdy aXRlIG1lc3NhZ2UgaGVhZGVyIHRvIHJpbmcgKHZtJXU6JXggdm0ldSlcbiIsCj4gKyAgICAgICAg ICAgICAgICByaW5nX2luZm8tPmlkLmRvbWFpbl9pZCwgcmluZ19pbmZvLT5pZC5hcG9ydCwKPiAr ICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCk7Cj4gKwo+ICsgICAgICAg IHJldHVybiByZXQ7Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmluZy50eF9wdHIgKz0gc2l6ZW9mKG1o KTsKPiArICAgIGlmICggcmluZy50eF9wdHIgPT0gcmluZ19pbmZvLT5sZW4gKQo+ICsgICAgICAg IHJpbmcudHhfcHRyID0gMDsKPiArCj4gKyAgICBmb3IgKCBwaW92ID0gaW92czsgbmlvdi0tOyBw aW92KysgKQo+ICsgICAgewo+ICsgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfNjQodWludDhfdCkg YnVmX2huZCA9IHBpb3YtPmlvdl9obmQ7Cj4gKyAgICAgICAgdW5zaWduZWQgaW50IGlvdl9sZW4g PSBwaW92LT5pb3ZfbGVuOwo+ICsKPiArICAgICAgICAvKiBJZiBubyBkYXRhIGlzIHByb3ZpZGVk IGluIHRoaXMgaW92LCBtb2FuIGFuZCBza2lwIG9uIHRvIHRoZSBuZXh0ICovCj4gKyAgICAgICAg aWYgKCAhaW92X2xlbiApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBncHJpbnRrKFhFTkxP R19FUlIsCgpUaGlzIHNob3VsZCBsaWtlbHkgYmUgV0FSTiBvciBJTkZPLCBzaW5jZSBpdCdzIG5v dCBhbiBlcnJvcj8KCj4gKyAgICAgICAgICAgICAgICAgICAgImFyZ286IG5vIGRhdGEgaW92X2xl bj0wIGlvdl9obmQ9JXAgcmluZyAodm0ldToleCB2bSV1KVxuIiwKPiArICAgICAgICAgICAgICAg ICAgICBidWZfaG5kLnAsIHJpbmdfaW5mby0+aWQuZG9tYWluX2lkLCByaW5nX2luZm8tPmlkLmFw b3J0LAo+ICsgICAgICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCk7Cj4g Kwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlm ICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9va2F5KGJ1Zl9obmQsIGlvdl9sZW4pKSApCj4gKyAg ICAgICAgewo+ICsgICAgICAgICAgICBncHJpbnRrKFhFTkxPR19FUlIsCj4gKyAgICAgICAgICAg ICAgICAgICAgImFyZ286IGJhZCBpb3YgaGFuZGxlIFslcCwgJXVdICh2bSV1OiV4IHZtJXUpXG4i LAo+ICsgICAgICAgICAgICAgICAgICAgIGJ1Zl9obmQucCwgaW92X2xlbiwKPiArICAgICAgICAg ICAgICAgICAgICByaW5nX2luZm8tPmlkLmRvbWFpbl9pZCwgcmluZ19pbmZvLT5pZC5hcG9ydCwK PiArICAgICAgICAgICAgICAgICAgICByaW5nX2luZm8tPmlkLnBhcnRuZXJfaWQpOwo+ICsKPiAr ICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBz cCA9IHJpbmdfaW5mby0+bGVuIC0gcmluZy50eF9wdHI7Cj4gKwo+ICsgICAgICAgIC8qIENoZWNr OiBpb3YgZGF0YSBzaXplIHZlcnN1cyBmcmVlIHNwYWNlIGF0IHRoZSB0YWlsIG9mIHRoZSByaW5n ICovCj4gKyAgICAgICAgaWYgKCBpb3ZfbGVuID4gc3AgKQo+ICsgICAgICAgIHsKPiArICAgICAg ICAgICAgLyoKPiArICAgICAgICAgICAgICogU2Vjb25kIHBvc3NpYmxlIGRhdGEgd3JpdGU6IHJp bmctdGFpbC13cmFwLXdyaXRlLgo+ICsgICAgICAgICAgICAgKiBQb3B1bGF0ZSB0aGUgcmluZyB0 YWlsIGFuZCB1cGRhdGUgdGhlIGludGVybmFsIHR4X3B0ciB0byBoYW5kbGUKPiArICAgICAgICAg ICAgICogd3JhcHBpbmcgYXQgdGhlIGVuZCBvZiByaW5nLgo+ICsgICAgICAgICAgICAgKiBTaXpl IG9mIGRhdGEgd3JpdHRlbiBoZXJlOiBzcAo+ICsgICAgICAgICAgICAgKiB3aGljaCBpcyB0aGUg ZXhhY3QgZnVsbCBhbW91bnQgb2YgZnJlZSBzcGFjZSBhdmFpbGFibGUgYXQgdGhlCj4gKyAgICAg ICAgICAgICAqIHRhaWwgb2YgdGhlIHJpbmcsIHNvIHRoaXMgY2Fubm90IG92ZXJydW4uCj4gKyAg ICAgICAgICAgICAqLwo+ICsgICAgICAgICAgICByZXQgPSBtZW1jcHlfdG9fZ3Vlc3RfcmluZyhk LCByaW5nX2luZm8sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJp bmcudHhfcHRyICsgc2l6ZW9mKHhlbl9hcmdvX3JpbmdfdCksCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGJ1Zl9obmQsIHNwKTsKPiArICAgICAgICAgICAg aWYgKCByZXQgKQo+ICsgICAgICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICBncHJpbnRrKFhF TkxPR19FUlIsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJhcmdvOiBmYWlsZWQgdG8gY29w eSB7JXAsICVkfSAodm0ldToleCB2bSV1KVxuIiwKPiArICAgICAgICAgICAgICAgICAgICAgICAg YnVmX2huZC5wLCBzcCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgcmluZ19pbmZvLT5pZC5k b21haW5faWQsIHJpbmdfaW5mby0+aWQuYXBvcnQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAg IHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCk7Cj4gKwo+ICsgICAgICAgICAgICAgICAgcmV0dXJu IHJldDsKPiArICAgICAgICAgICAgfQo+ICsKPiArICAgICAgICAgICAgcmluZy50eF9wdHIgPSAw Owo+ICsgICAgICAgICAgICBpb3ZfbGVuIC09IHNwOwo+ICsgICAgICAgICAgICBndWVzdF9oYW5k bGVfYWRkX29mZnNldChidWZfaG5kLCBzcCk7Cj4gKwo+ICsgICAgICAgICAgICBBU1NFUlQoaW92 X2xlbiA8PSByaW5nX2luZm8tPmxlbik7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICAvKgo+ ICsgICAgICAgICAqIFRoaXJkIHBvc3NpYmxlIGRhdGEgd3JpdGU6IGFsbCBkYXRhIHJlbWFpbmlu ZyBmb3IgdGhpcyBpb3YuCj4gKyAgICAgICAgICogU2l6ZSBvZiBkYXRhIHdyaXR0ZW4gaGVyZTog aW92X2xlbgo+ICsgICAgICAgICAqCj4gKyAgICAgICAgICogQ2FzZSAxOiBpZiB0aGUgcmluZy10 YWlsLXdyYXAtd3JpdGUgYWJvdmUgd2FzIHBlcmZvcm1lZCwgdGhlbgo+ICsgICAgICAgICAqICAg ICAgICAgaW92X2xlbiBoYXMgYmVlbiBkZWNyZWFzZWQgYnkgJ3NwJyBhbmQgcmluZy50eF9wdHIg aXMgemVyby4KPiArICAgICAgICAgKgo+ICsgICAgICAgICAqICAgIFdlIGtub3cgZnJvbSBjaGVj a2luZyB0aGUgcmVzdWx0IG9mIGlvdl9jb3VudDoKPiArICAgICAgICAgKiAgICAgIGxlbiArIHNp emVvZihtZXNzYWdlX2hlYWRlcikgPD0gcmluZ19pbmZvLT5sZW4KPiArICAgICAgICAgKiAgICBX ZSBhbHNvIGtub3cgdGhhdCBsZW4gaXMgdGhlIHRvdGFsIG9mIHN1bW1pbmcgYWxsIGlvdl9sZW5z LCBzbzoKPiArICAgICAgICAgKiAgICAgICBpb3ZfbGVuIDw9IGxlbgo+ICsgICAgICAgICAqICAg IHNvIGJ5IHRyYW5zaXRpdml0eToKPiArICAgICAgICAgKiAgICAgICBpb3ZfbGVuIDw9IGxlbiA8 PSAocmluZ19pbmZvLT5sZW4gLSBzaXplb2YobXNnaGVhZGVyKSkKPiArICAgICAgICAgKiAgICBh bmQgdGhlcmVmb3JlOgo+ICsgICAgICAgICAqICAgICAgIChpb3ZfbGVuICsgc2l6ZW9mKG1zZ2hl YWRlcikgPD0gcmluZ19pbmZvLT5sZW4pICYmCj4gKyAgICAgICAgICogICAgICAgKHJpbmcudHhf cHRyID09IDApCj4gKyAgICAgICAgICogICAgc28gdGhpcyB3cml0ZSBjYW5ub3Qgb3ZlcnJ1biBo ZXJlLgo+ICsgICAgICAgICAqCj4gKyAgICAgICAgICogQ2FzZSAyOiByaW5nLXRhaWwtd3JhcC13 cml0ZSBhYm92ZSB3YXMgbm90IHBlcmZvcm1lZAo+ICsgICAgICAgICAqICAgIC0+IHNvIGlvdl9s ZW4gaXMgdGhlIGd1ZXN0LXN1cHBsaWVkIHZhbHVlIGFuZDogKGlvdl9sZW4gPD0gc3ApCj4gKyAg ICAgICAgICogICAgaWUuIGxlc3MgdGhhbiBhdmFpbGFibGUgc3BhY2UgYXQgdGhlIHRhaWwgb2Yg dGhlIHJpbmc6Cj4gKyAgICAgICAgICogICAgICAgIHNvIHRoaXMgd3JpdGUgY2Fubm90IG92ZXJy dW4uCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgcmV0ID0gbWVtY3B5X3RvX2d1ZXN0X3Jpbmco ZCwgcmluZ19pbmZvLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmcu dHhfcHRyICsgc2l6ZW9mKHhlbl9hcmdvX3JpbmdfdCksCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTlVMTCwgYnVmX2huZCwgaW92X2xlbik7Cj4gKyAgICAgICAgaWYgKCBy ZXQgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgZ3ByaW50ayhYRU5MT0dfRVJSLAo+ICsg ICAgICAgICAgICAgICAgICAgICJhcmdvOiBmYWlsZWQgdG8gY29weSBbJXAsICV1XSAodm0ldTol eCB2bSV1KVxuIiwKPiArICAgICAgICAgICAgICAgICAgICBidWZfaG5kLnAsIGlvdl9sZW4sIHJp bmdfaW5mby0+aWQuZG9tYWluX2lkLAo+ICsgICAgICAgICAgICAgICAgICAgIHJpbmdfaW5mby0+ aWQuYXBvcnQsIHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCk7Cj4gKwo+ICsgICAgICAgICAgICBy ZXR1cm4gcmV0Owo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgcmluZy50eF9wdHIgKz0gaW92 X2xlbjsKPiArCj4gKyAgICAgICAgaWYgKCByaW5nLnR4X3B0ciA9PSByaW5nX2luZm8tPmxlbiAp Cj4gKyAgICAgICAgICAgIHJpbmcudHhfcHRyID0gMDsKPiArICAgIH0KPiArCj4gKyAgICByaW5n LnR4X3B0ciA9IFJPVU5EVVBfTUVTU0FHRShyaW5nLnR4X3B0cik7Cj4gKwo+ICsgICAgaWYgKCBy aW5nLnR4X3B0ciA+PSByaW5nX2luZm8tPmxlbiApCj4gKyAgICAgICAgcmluZy50eF9wdHIgLT0g cmluZ19pbmZvLT5sZW47CgpZb3Ugc2VlbSB0byBoYW5kbGUgdGhlIHdyYXBwaW5nIGFmdGVyIGVh Y2ggcG9zc2libGUgd3JpdGUsIHNvIEkgdGhpbmsKdGhlIGFib3ZlIGlzIG5vdCBuZWVkZWQ/IE1h eWJlIGl0IHNob3VsZCBiZSBhbiBhc3NlcnQgaW5zdGVhZD8KCj4gKwo+ICsgICAgdXBkYXRlX3R4 X3B0cihkLCByaW5nX2luZm8sIHJpbmcudHhfcHRyKTsKPiArCj4gKyAgICAvKgo+ICsgICAgICog QXQgdGhpcyBwb2ludCAoYW5kIGFsc28gb24gYW4gZXJyb3IgZXhpdCBwYXRocyBmcm9tIHRoaXMg ZnVuY3Rpb24pIGl0IGlzCj4gKyAgICAgKiBwb3NzaWJsZSB0byB1bm1hcCB0aGUgcmluZ19pbmZv LCBpZToKPiArICAgICAqICAgcmluZ191bm1hcChkLCByaW5nX2luZm8pOwo+ICsgICAgICogYnV0 IHBlcmZvcm1hbmNlIHNob3VsZCBiZSBpbXByb3ZlZCBieSBub3QgZG9pbmcgc28sIGFuZCByZXRh aW5pbmcKPiArICAgICAqIHRoZSBtYXBwaW5nLgo+ICsgICAgICogQW4gWFNNIHBvbGljeSBjb250 cm9sIG92ZXIgbGV2ZWwgb2YgY29uZmlkZW50aWFsaXR5IHJlcXVpcmVkCj4gKyAgICAgKiB2ZXJz dXMgcGVyZm9ybWFuY2UgY29zdCBjb3VsZCBiZSBhZGRlZCB0byBkZWNpZGUgdGhhdCBoZXJlLgo+ ICsgICAgICovCj4gKwo+ICsgICAgKm91dF9sZW4gPSBsZW47Cj4gKwo+ICsgICAgcmV0dXJuIHJl dDsKPiArfQo+ICsKPiAgc3RhdGljIHZvaWQKPiAgd2lsZGNhcmRfcGVuZGluZ19saXN0X3JlbW92 ZShkb21pZF90IGRvbWFpbl9pZCwgc3RydWN0IHBlbmRpbmdfZW50ICplbnQpCj4gIHsKPiBAQCAt NDk3LDYgKzkxOCwyNSBAQCB3aWxkY2FyZF9wZW5kaW5nX2xpc3RfcmVtb3ZlKGRvbWlkX3QgZG9t YWluX2lkLCBzdHJ1Y3QgcGVuZGluZ19lbnQgKmVudCkKPiAgfQo+ICAKPiAgc3RhdGljIHZvaWQK PiArd2lsZGNhcmRfcGVuZGluZ19saXN0X2luc2VydChkb21pZF90IGRvbWFpbl9pZCwgc3RydWN0 IHBlbmRpbmdfZW50ICplbnQpCj4gK3sKPiArICAgIHN0cnVjdCBkb21haW4gKmQgPSBnZXRfZG9t YWluX2J5X2lkKGRvbWFpbl9pZCk7Cj4gKwo+ICsgICAgaWYgKCAhZCApCj4gKyAgICAgICAgcmV0 dXJuOwo+ICsKPiArICAgIEFTU0VSVChMT0NLSU5HX1JlYWRfTDEpOwo+ICsKPiArICAgIGlmICgg ZC0+YXJnbyApCj4gKyAgICB7Cj4gKyAgICAgICAgc3Bpbl9sb2NrKCZkLT5hcmdvLT53aWxkY2Fy ZF9MMl9sb2NrKTsKPiArICAgICAgICBsaXN0X2FkZCgmZW50LT53aWxkY2FyZF9ub2RlLCAmZC0+ YXJnby0+d2lsZGNhcmRfcGVuZF9saXN0KTsKPiArICAgICAgICBzcGluX3VubG9jaygmZC0+YXJn by0+d2lsZGNhcmRfTDJfbG9jayk7Cj4gKyAgICB9Cj4gKyAgICBwdXRfZG9tYWluKGQpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICBwZW5kaW5nX3JlbW92ZV9hbGwoY29uc3Qgc3RydWN0IGRv bWFpbiAqZCwgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8pCj4gIHsKPiAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgKnJpbmdfcGVuZGluZyA9ICZyaW5nX2luZm8tPnBlbmRpbmc7Cj4gQEAg LTUxOCw2ICs5NTgsNzAgQEAgcGVuZGluZ19yZW1vdmVfYWxsKGNvbnN0IHN0cnVjdCBkb21haW4g KmQsIHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvKQo+ICAgICAgcmluZ19pbmZvLT5u cGVuZGluZyA9IDA7Cj4gIH0KPiAgCj4gK3N0YXRpYyBpbnQKPiArcGVuZGluZ19xdWV1ZShjb25z dCBzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbywKPiAr ICAgICAgICAgICAgICBkb21pZF90IHNyY19pZCwgdW5zaWduZWQgaW50IGxlbikKPiArewo+ICsg ICAgc3RydWN0IHBlbmRpbmdfZW50ICplbnQ7Cj4gKwo+ICsgICAgQVNTRVJUKExPQ0tJTkdfTDMo ZCwgcmluZ19pbmZvKSk7Cj4gKwo+ICsgICAgaWYgKCByaW5nX2luZm8tPm5wZW5kaW5nID49IE1B WF9QRU5ESU5HX1BFUl9SSU5HICkKPiArICAgICAgICByZXR1cm4gLUVOT1NQQzsKPiArCj4gKyAg ICBlbnQgPSB4bWFsbG9jKHN0cnVjdCBwZW5kaW5nX2VudCk7Cj4gKyAgICBpZiAoICFlbnQgKQo+ ICsgICAgICAgIHJldHVybiAtRU5PTUVNOwo+ICsKPiArICAgIGVudC0+bGVuID0gbGVuOwo+ICsg ICAgZW50LT5kb21haW5faWQgPSBzcmNfaWQ7Cj4gKyAgICBlbnQtPnJpbmdfaW5mbyA9IHJpbmdf aW5mbzsKPiArCj4gKyAgICBpZiAoIHJpbmdfaW5mby0+aWQucGFydG5lcl9pZCA9PSBYRU5fQVJH T19ET01JRF9BTlkgKQo+ICsgICAgICAgIHdpbGRjYXJkX3BlbmRpbmdfbGlzdF9pbnNlcnQoc3Jj X2lkLCBlbnQpOwo+ICsgICAgbGlzdF9hZGQoJmVudC0+bm9kZSwgJnJpbmdfaW5mby0+cGVuZGlu Zyk7Cj4gKyAgICByaW5nX2luZm8tPm5wZW5kaW5nKys7Cj4gKwo+ICsgICAgcmV0dXJuIDA7Cj4g K30KPiArCj4gK3N0YXRpYyBpbnQKPiArcGVuZGluZ19yZXF1ZXVlKGNvbnN0IHN0cnVjdCBkb21h aW4gKmQsIHN0cnVjdCBhcmdvX3JpbmdfaW5mbyAqcmluZ19pbmZvLAo+ICsgICAgICAgICAgICAg ICAgZG9taWRfdCBzcmNfaWQsIHVuc2lnbmVkIGludCBsZW4pCj4gK3sKPiArICAgIHN0cnVjdCBs aXN0X2hlYWQgKmN1cnNvciwgKmhlYWQ7Cj4gKwo+ICsgICAgQVNTRVJUKExPQ0tJTkdfTDMoZCwg cmluZ19pbmZvKSk7Cj4gKwo+ICsgICAgLyogTGlzdCBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVk IGhlcmUuIFVwZGF0ZSBsZW4gaW4gYSBtYXRjaCBpZiBmb3VuZC4gKi8KPiArICAgIGhlYWQgPSAm cmluZ19pbmZvLT5wZW5kaW5nOwo+ICsKPiArICAgIGZvciAoIGN1cnNvciA9IGhlYWQtPm5leHQ7 IGN1cnNvciAhPSBoZWFkOyBjdXJzb3IgPSBjdXJzb3ItPm5leHQgKQoKbGlzdF9mb3JfZWFjaF9l bnRyeQoKPiAgbG9uZwo+ICBkb19hcmdvX29wKHVuc2lnbmVkIGludCBjbWQsIFhFTl9HVUVTVF9I QU5ETEVfUEFSQU0odm9pZCkgYXJnMSwKPiAgICAgICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BB UkFNKHZvaWQpIGFyZzIsIHVuc2lnbmVkIGxvbmcgYXJnMywKPiBAQCAtMTE0NSw2ICsxNzM0LDUz IEBAIGRvX2FyZ29fb3AodW5zaWduZWQgaW50IGNtZCwgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh2 b2lkKSBhcmcxLAo+ICAgICAgICAgIGJyZWFrOwo+ICAgICAgfQo+ICAKPiArICAgIGNhc2UgWEVO X0FSR09fT1Bfc2VuZHY6Cj4gKyAgICB7Cj4gKyAgICAgICAgeGVuX2FyZ29fc2VuZF9hZGRyX3Qg c2VuZF9hZGRyOwo+ICsKPiArICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHhlbl9hcmdv X3NlbmRfYWRkcl90KSBzZW5kX2FkZHJfaG5kID0KPiArICAgICAgICAgICAgZ3Vlc3RfaGFuZGxl X2Nhc3QoYXJnMSwgeGVuX2FyZ29fc2VuZF9hZGRyX3QpOwo+ICsgICAgICAgIFhFTl9HVUVTVF9I QU5ETEVfUEFSQU0oeGVuX2FyZ29faW92X3QpIGlvdnNfaG5kID0KPiArICAgICAgICAgICAgZ3Vl c3RfaGFuZGxlX2Nhc3QoYXJnMiwgeGVuX2FyZ29faW92X3QpOwo+ICsgICAgICAgIC8qIGFyZzMg aXMgbmlvdiAqLwo+ICsgICAgICAgIC8qIGFyZzQgaXMgbWVzc2FnZV90eXBlLiBNdXN0IGJlIGEg MzItYml0IHZhbHVlLiAqLwo+ICsKPiArICAgICAgICByYyA9IGNvcHlfZnJvbV9ndWVzdCgmc2Vu ZF9hZGRyLCBzZW5kX2FkZHJfaG5kLCAxKSA/IC1FRkFVTFQgOiAwOwo+ICsgICAgICAgIGlmICgg cmMgKQo+ICsgICAgICAgICAgICBicmVhazsKPiArCj4gKyAgICAgICAgLyoKPiArICAgICAgICAg KiBDaGVjayBwYWRkaW5nIGlzIHplcm9lZC4gUmVqZWN0IG5pb3YgYWJvdmUgbGltaXQgb3IgbWVz c2FnZV90eXBlcwo+ICsgICAgICAgICAqIHRoYXQgYXJlIG91dHNpZGUgMzIgYml0IHJhbmdlLgo+ ICsgICAgICAgICAqLwo+ICsgICAgICAgIGlmICggdW5saWtlbHkoc2VuZF9hZGRyLnNyYy5wYWQg fHwgc2VuZF9hZGRyLmRzdC5wYWQgfHwKPiArICAgICAgICAgICAgICAgICAgICAgIChhcmczID4g WEVOX0FSR09fTUFYSU9WKSB8fCAoYXJnNCAmIH4weGZmZmZmZmZmVUwpKSApCgphcmc0ICYgKEdC KDQpIC0gMSkKCklzIGNsZWFyZXIgSU1PLCBvcjoKCmFyZzQgPiBVSU5UMzJfTUFYCgo+ICsgICAg ICAgIHsKPiArICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwo+ICsgICAgICAgICAgICBicmVhazsK PiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICggc2VuZF9hZGRyLnNyYy5kb21haW5faWQg PT0gWEVOX0FSR09fRE9NSURfQU5ZICkKPiArICAgICAgICAgICAgc2VuZF9hZGRyLnNyYy5kb21h aW5faWQgPSBjdXJyZC0+ZG9tYWluX2lkOwo+ICsKPiArICAgICAgICAvKiBObyBkb21haW4gaXMg Y3VycmVudGx5IGF1dGhvcml6ZWQgdG8gc2VuZCBvbiBiZWhhbGYgb2YgYW5vdGhlciAqLwo+ICsg ICAgICAgIGlmICggdW5saWtlbHkoc2VuZF9hZGRyLnNyYy5kb21haW5faWQgIT0gY3VycmQtPmRv bWFpbl9pZCkgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgcmMgPSAtRVBFUk07Cj4gKyAg ICAgICAgICAgIGJyZWFrOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgLyoKPiArICAgICAg ICAgKiBDaGVjayBhY2Nlc3MgdG8gdGhlIHdob2xlIGFycmF5IGhlcmUgc28gd2UgY2FuIHVzZSB0 aGUgZmFzdGVyIF9fY29weQo+ICsgICAgICAgICAqIG9wZXJhdGlvbnMgdG8gcmVhZCBlYWNoIGVs ZW1lbnQgbGF0ZXIuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAgaWYgKCB1bmxpa2VseSghZ3Vl c3RfaGFuZGxlX29rYXkoaW92c19obmQsIGFyZzMpKSApCgpZb3UgbmVlZCB0byBzZXQgcmMgdG8g RUZBVUxUIGhlcmUsIGJlY2F1c2UgdGhlIGNhbGwgdG8gY29weV9mcm9tX2d1ZXN0CmhhcyBzZXQg aXQgdG8gMC4KCkFsdGVybmF0aXZlbHkgeW91IGNhbiBjaGFuZ2UgdGhlIGNhbGwgYWJvdmUgdG8g YmU6CgppZiAoIGNvcHlfZnJvbV9ndWVzdCgmc2VuZF9hZGRyLCBzZW5kX2FkZHJfaG5kLCAxKSAp CiAgICByZXR1cm4gLUVGQVVMVDsKClNvIHJjIGRvZXNuJ3QgZ2V0IHNldCB0byAwIG9uIHN1Y2Nl c3MuCgpXaXRoIHRob3NlIHRha2VuIGNhcmUgb2Y6CgpSZXZpZXdlZC1ieTogUm9nZXIgUGF1IE1v bm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0 cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlz dGluZm8veGVuLWRldmVs