From mboxrd@z Thu Jan 1 00:00:00 1970 From: Praveen Kumar Subject: Re: [RFC PATCH v4] xen: credit2: provide custom option to create runqueue Date: Fri, 02 Jun 2017 22:15:03 +0530 Message-ID: <1496421903.13025.12.camel@gmail.com> References: <20170419174518.986-1-kpraveen.lkml@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170419174518.986-1-kpraveen.lkml@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: "xen-devel@lists.xen.org" Cc: george.dunlap@eu.citrix.com, dario.faggioli@citrix.com List-Id: xen-devel@lists.xenproject.org SGksCgpDYW4geW91IHBsZWFzZcKgcHJvdmlkZSBjb21tZW50cyBvbiB0aGUgc2hhcmVkIHBhdGNo LgpUaGFua3MgaW4gYWR2YW5jZS4KClJlZ2FyZHMsCgp+UHJhdmVlbi4KCk9uIFdlZCwgMjAxNy0w NC0xOSBhdCAyMzoxNSArMDUzMCwgUHJhdmVlbiBLdW1hciB3cm90ZToKPiBUaGUgcGF0Y2ggaW50 cm9kdWNlcyBhIG5ldywgdmVyeSBmbGV4aWJsZSB3YXkgb2YgYXJyYW5naW5nIHJ1bnF1ZXVlcwo+ IGluIENyZWRpdDIuCj4gSXQgYWxsb3dzIHRvIHNwZWNpZnksIGV4cGxpY2l0bHkgYW5kIHByZWNp c2VseSwgd2hhdCBwQ1BVcyBzaG91bGQKPiBiZWxvbmcgdG8KPiB3aGljaCBydW5xdWV1ZS4KPiAK PiBTaWduZWQtb2ZmLWJ5OiBQcmF2ZWVuIEt1bWFyIDxrcHJhdmVlbi5sa21sQGdtYWlsLmNvbT4K PiAtLS0KPiDCoGRvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLm1hcmtkb3duIHzCoMKgMTAgKyst Cj4gwqB4ZW4vY29tbW9uL3NjaGVkX2NyZWRpdDIuY8KgwqDCoMKgwqDCoMKgwqDCoMKgfCAxNjcK PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiDCoDIgZmlsZXMgY2hhbmdl ZCwgMTc0IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2Rv Y3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLm1hcmtkb3duIGIvZG9jcy9taXNjL3hlbi0KPiBjb21t YW5kLWxpbmUubWFya2Rvd24KPiBpbmRleCAzM2U1NGFlZjYzLi5mMmVlNGFkOTcyIDEwMDY0NAo+ IC0tLSBhL2RvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLm1hcmtkb3duCj4gKysrIGIvZG9jcy9t aXNjL3hlbi1jb21tYW5kLWxpbmUubWFya2Rvd24KPiBAQCAtNTI1LDcgKzUyNSw3IEBAIGFsc28g c2xvdyBpbiByZXNwb25kaW5nIHRvIGxvYWQgY2hhbmdlcy4KPiDCoFRoZSBkZWZhdWx0IHZhbHVl IG9mIGAxIHNlY2AgaXMgcmF0aGVyIGxvbmcuCj4gwqAKPiDCoCMjIyBjcmVkaXQyXF9ydW5xdWV1 ZQo+IC0+IGA9IGNwdSB8IGNvcmUgfCBzb2NrZXQgfCBub2RlIHwgYWxsYAo+ICs+IGA9IGNwdSB8 IGNvcmUgfCBzb2NrZXQgfCBub2RlIHwgYWxsIHwgPGN1c3RvbT5gCj4gwqAKPiDCoD4gRGVmYXVs dDogYHNvY2tldGAKPiDCoAo+IEBAIC01NDMsNiArNTQzLDE0IEBAIEF2YWlsYWJsZSBhbHRlcm5h dGl2ZXMsIHdpdGggdGhlaXIgbWVhbmluZywgYXJlOgo+IMKgKiBgbm9kZWA6IG9uZSBydW5xdWV1 ZSBwZXIgZWFjaCBOVU1BIG5vZGUgb2YgdGhlIGhvc3Q7Cj4gwqAqIGBhbGxgOiBqdXN0IG9uZSBy dW5xdWV1ZSBzaGFyZWQgYnkgYWxsIHRoZSBsb2dpY2FsIHBDUFVzIG9mCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqB0aGUgaG9zdAo+ICsqIGA8Y3VzdG9tPmA6IG9uZSBydW5xdWV1ZSBwZXIgbWVudGlv bmVkIHN1YnNldC4gVGhlIHN1YnNldCBjYW4gYmUKPiBkZWZpbmVkIGFzCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBhcyBzaG93biBpbiBiZWxvdyBleGFtcGxlOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY3JlZGl0Ml9ydW5xdWV1ZT1bWzAsMSxdWzIsNl1bMyw1XVs0LDdd XSAsIG9yCj4gMCwxXDsyLDZcOzMsNVw7NCw3Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB3aGljaCBtZWFucyA6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC0g cENQVXMgMCBhbmQgMSBiZWxvbmcgdG8gcnVucXVldWUgMAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAtIHBDUFVzIDIgYW5kIDYgYmVsb25nIHRvIHJ1bnF1ZXVlIDEKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLSBwQ1BVcyAzIGFuZCA1IGJlbG9u ZyB0byBydW5xdWV1ZSAyCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC0g cENQVXMgNCBhbmQgNyBiZWxvbmcgdG8gcnVucXVldWUgMwo+IMKgCj4gwqAjIyMgZGJncAo+IMKg PiBgPSBlaGNpWyA8aW50ZWdlcj4gfCBAcGNpPGJ1cz46PHNsb3Q+LjxmdW5jPiBdYAo+IGRpZmYg LS1naXQgYS94ZW4vY29tbW9uL3NjaGVkX2NyZWRpdDIuYyBiL3hlbi9jb21tb24vc2NoZWRfY3Jl ZGl0Mi5jCj4gaW5kZXggYjliOTI4MzQ3Zi4uZWJlYzMzZjQ1MCAxMDA2NDQKPiAtLS0gYS94ZW4v Y29tbW9uL3NjaGVkX2NyZWRpdDIuYwo+ICsrKyBiL3hlbi9jb21tb24vc2NoZWRfY3JlZGl0Mi5j Cj4gQEAgLTMyMSw2ICszMjEsMTYgQEAgaW50ZWdlcl9wYXJhbSgiY3JlZGl0Ml9iYWxhbmNlX292 ZXIiLAo+IG9wdF9vdmVybG9hZF9iYWxhbmNlX3RvbGVyYW5jZSk7Cj4gwqAgKsKgwqDCoMKgwqDC oMKgwqDCoMKgwqAobG9naWNhbCkgcHJvY2Vzc29ycyBvZiB0aGUgaG9zdCBiZWxvbmcuIFRoaXMg d2lsbAo+IGhhcHBlbiBpZgo+IMKgICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGhlIG9wdF9ydW5x dWV1ZSBwYXJhbWV0ZXIgaXMgc2V0IHRvICdhbGwnLgo+IMKgICoKPiArICogLSBjdXN0b206IG1l YW5pbmcgdGhhdCB0aGVyZSB3aWxsIGJlIG9uZSBydW5xdWV1ZSBwZXIgc3Vic2V0Cj4gYmVpbmcg cGFzc2VkIGFzCj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHBhcmFtZXRlciB0byBjcmVkaXQy X3J1bnF1ZXVlIGFzIHNob3duIGluIGJlbG93Cj4gZXhhbXBsZS4KPiArICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgRXhhbXBsZToKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3JlZGl0Ml9ydW5x dWV1ZT1bW2NwdTAsY3B1MV1bY3B1M11bY3B1NCxjcHU1XV0gb3IKPiArICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY3JlZGl0Ml9ydW5xdWV1ZT0wLDFcOzNcOzQsNQo+ICsgKsKgwqDCoMKgwqDCoMKg wqDCoMKgwqBUaGUgZXhhbXBsZSBtZW50aW9uZWQgc3RhdGVzIDoKPiArICrCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjcHUwIGFuZCBjcHUxIGJlbG9uZ3MgdG8gcnVucXVldWUgMAo+ICsg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNwdTMgYmVsb25ncyB0byBydW5xdWV1ZSAx Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3B1NCBhbmQgY3B1NSBiZWxvbmdz IHRvIHJ1bnF1ZXVlIDIKPiArICoKPiDCoCAqIERlcGVuZGluZyBvbiB0aGUgdmFsdWUgb2Ygb3B0 X3J1bnF1ZXVlLCB0aGVyZWZvcmUsIGNwdXMgdGhhdCBhcmUKPiBwYXJ0IG9mCj4gwqAgKiBlaXRo ZXIgdGhlIHNhbWUgcGh5c2ljYWwgY29yZSwgdGhlIHNhbWUgcGh5c2ljYWwgc29ja2V0LCB0aGUg c2FtZQo+IE5VTUEKPiDCoCAqIG5vZGUsIG9yIGp1c3QgYWxsIG9mIHRoZW0sIHdpbGwgYmUgcHV0 IHRvZ2V0aGVyIHRvIGZvcm0KPiBydW5xdWV1ZXMuCj4gQEAgLTMzMCwxNSArMzQwLDEzOCBAQCBp bnRlZ2VyX3BhcmFtKCJjcmVkaXQyX2JhbGFuY2Vfb3ZlciIsCj4gb3B0X292ZXJsb2FkX2JhbGFu Y2VfdG9sZXJhbmNlKTsKPiDCoCNkZWZpbmUgT1BUX1JVTlFVRVVFX1NPQ0tFVCAyCj4gwqAjZGVm aW5lIE9QVF9SVU5RVUVVRV9OT0RFwqDCoMKgMwo+IMKgI2RlZmluZSBPUFRfUlVOUVVFVUVfQUxM wqDCoMKgwqA0Cj4gKyNkZWZpbmUgT1BUX1JVTlFVRVVFX0NVU1RPTSA1Cj4gwqBzdGF0aWMgY29u c3QgY2hhciAqY29uc3Qgb3B0X3J1bnF1ZXVlX3N0cltdID0gewo+IMKgwqDCoMKgwqBbT1BUX1JV TlFVRVVFX0NQVV0gPSAiY3B1IiwKPiDCoMKgwqDCoMKgW09QVF9SVU5RVUVVRV9DT1JFXSA9ICJj b3JlIiwKPiDCoMKgwqDCoMKgW09QVF9SVU5RVUVVRV9TT0NLRVRdID0gInNvY2tldCIsCj4gwqDC oMKgwqDCoFtPUFRfUlVOUVVFVUVfTk9ERV0gPSAibm9kZSIsCj4gLcKgwqDCoMKgW09QVF9SVU5R VUVVRV9BTExdID0gImFsbCIKPiArwqDCoMKgwqBbT1BUX1JVTlFVRVVFX0FMTF0gPSAiYWxsIiwK PiArwqDCoMKgwqBbT1BUX1JVTlFVRVVFX0NVU1RPTV0gPSAiY3VzdG9tIgo+IMKgfTsKPiDCoHN0 YXRpYyBpbnQgX19yZWFkX21vc3RseSBvcHRfcnVucXVldWUgPSBPUFRfUlVOUVVFVUVfU09DS0VU Owo+IMKgCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9fcmVhZF9tb3N0bHkgY3VzdG9tX2NwdV9y dW5xdWV1ZVtOUl9DUFVTXTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGdldGxlbihjb25zdCBj aGFyICpzdGFydCwgY29uc3QgY2hhciAqZW5kKQo+ICt7Cj4gK8KgwqDCoMKgaWYgKCAoIHN0YXJ0 ICkgJiYgKCBlbmQgKSAmJiAoIGVuZCA+IHN0YXJ0ICkgKQo+ICvCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIGVuZC1zdGFydDsKPiArwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4g LTE7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgcGFyc2VfY3VzdG9tX3J1bnF1ZXVlX29wdGlvbihj b25zdCBjaGFyICpzKQo+ICt7Cj4gK8KgwqDCoMKgY29uc3QgY2hhciAqcGFyc2UgPSBOVUxMLCAq c19lbmQgPSBOVUxMOwo+ICvCoMKgwqDCoGNvbnN0IGNoYXIgKnN0YXJ0ID0gTlVMTCwgKmVuZCA9 IE5VTEw7Cj4gK8KgwqDCoMKgY2hhciBkZWxpbWl0ZXJbMl0gPSB7MH07Cj4gK8KgwqDCoMKgaW50 IGNwdV9hZGRlZF90b19ydW5xdWV1ZSA9IDA7Cj4gK8KgwqDCoMKgaW50IHJ1bnF1ZXVlID0gMDsK PiArCj4gK8KgwqDCoMKgLyogRm9ybWF0IHN1cHBvcnRlZCA6Cj4gK8KgwqDCoMKgwqAqIFtbMCwx LDQsNV1bMiwzLDYsN11bOCw5LDEyLDEzXVsxMCwxMSwxNCwxNV1dCj4gK8KgwqDCoMKgwqAqwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3IKPiArwqDCoMKgwqDCoCogMCwxLDQs NVw7MiwzLDYsN1w7OCw5LDEyLDEzXDsxMCwxMSwxNCwxNQo+ICvCoMKgwqDCoMKgKi8KPiArwqDC oMKgwqBwYXJzZSA9IHM7Cj4gK8KgwqDCoMKgc19lbmQgPSBzICsgc3RybGVuKHMpOwo+ICvCoMKg wqDCoC8qIFRoZSBzdGFydCBhbmQgc2hvdWxkIGFsd2F5cyBiZSBpbiBmb3JtYXQgb2YgJ1suLl0n ICovCj4gK8KgwqDCoMKgaWYgKCAoICdbJyA9PSAqcGFyc2UgKSAmJiAoICddJyA9PSAqKHNfZW5k LTEpKSApCj4gK8KgwqDCoMKgewo+ICvCoMKgwqDCoMKgwqDCoMKgZGVsaW1pdGVyWzBdID0gJ1sn Owo+ICvCoMKgwqDCoMKgwqDCoMKgZGVsaW1pdGVyWzFdID0gJ1wwJzsKPiArwqDCoMKgwqDCoMKg wqDCoHBhcnNlKys7Cj4gK8KgwqDCoMKgfQo+ICvCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqB7Cj4g K8KgwqDCoMKgwqDCoMKgwqBkZWxpbWl0ZXJbMF0gPSAnOyc7Cj4gK8KgwqDCoMKgwqDCoMKgwqBk ZWxpbWl0ZXJbMV0gPSAnXDAnOwo+ICvCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgd2hpbGUgKCAo IHBhcnNlICE9IE5VTEwgKSAmJiAoIHBhcnNlIDwgc19lbmQgKSApCj4gK8KgwqDCoMKgewo+ICvC oMKgwqDCoMKgwqDCoMKgY29uc3QgY2hhciAqdG9rZW5fc3ViX3N0ciA9IE5VTEw7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgd2hpbGUgKCAqcGFyc2UgPT0gJ1snICkKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcGFyc2UrKzsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqBzdGFydCA9IHBhcnNlOwo+ ICvCoMKgwqDCoMKgwqDCoMKgZW5kID0gc3Ryc3RyKHBhcnNlLCBkZWxpbWl0ZXIpOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqDCoC8qIENoZWNrIGlmIHdlIGRvbid0IGhhdmUgdGhlIGRlbGltaXRlciAq Lwo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKCAhZW5kICkKPiArwqDCoMKgwqDCoMKgwqDCoHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogSWYgd2UgZG9uJ3QgaGF2ZSBkZWxpbWl0ZXIsIHRo ZW4gYnJlYWssIGlmIHN0YXJ0IGlzCj4gZ3JlYXRlciB0aGFuCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgKiBvciBlcXVhbCB0byBzX2VuZCwgYXMgd2UgaGF2ZSByZWFjaGVkIHRoZSBlbmQu Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgaWYgKCBzdGFydCA+PSBzX2VuZCApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgYnJlYWs7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBXZSBuZWVkIHRvIHBh cnNlIHRpbGwgc19lbmQsIGFzIHdlIGhhdmUgdGhlIGxhc3Qgc2V0Cj4gKi8KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZW5kID0gc19lbmQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgLyogSnVzdCBtb3ZlIHRvIG5leHQsIGFzIHdlIGhhdmUgZW1wdHkgc2V0 IGxpa2UgW10gb3IgOzsgKi8KPiArwqDCoMKgwqDCoMKgwqDCoGlmICggZ2V0bGVuICggc3RhcnQs IGVuZCApIDwgMSApCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gbmV4dDsKPiArCj4g K8KgwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoMKgwqAqIGZpbmQgdG9rZW4gd2l0 aGluIHRoZSBzdWJzZXQKPiArwqDCoMKgwqDCoMKgwqDCoMKgKi8KPiArwqDCoMKgwqDCoMKgwqDC oGRvCj4gK8KgwqDCoMKgwqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHVuc2ln bmVkIGxvbmcgdG9rZW4gPSAwOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogR2V0 IGNwdSBpZHMgc2VwYXJhdGVkIGJ5ICcsJyB3aXRoaW4gZWFjaCBzZXQgKi8KPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgdG9rZW5fc3ViX3N0ciA9IHN0cnBicmsoc3RhcnQsICIsIik7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBCYXNpYyBjaGVja3MgdG8gdmFsaWRhdGUgdGhl IGxhc3QgZW50cnkgaW4gc3Vic2V0ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgg KCAhdG9rZW5fc3ViX3N0ciAmJiBzdGFydCA8IGVuZCApIHx8Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgKCB0b2tlbl9zdWJfc3RyID4gZW5kICYmIHRva2VuX3N1Yl9zdHIgPiBz dGFydCApICkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGlmICggKCBkZWxpbWl0ZXJbMF0gPT0gJ1snICkgJiYgKCBzdGFydCA9 PSBzX2VuZCAtIDEKPiApICkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGdvdG8gbmV4dDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdG9r ZW5fc3ViX3N0ciA9IGVuZDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogSnVzdCBtb3ZlIHRvIG5leHQsIGFzIHdlIGhhdmUgZW1w dHkgc2V0IGxpa2UgW10gb3IgOzsKPiAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo IGdldGxlbihzdGFydCwgdG9rZW5fc3ViX3N0cikgPCAxICkKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBnb3RvIG5leHQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB0 b2tlbiA9IHNpbXBsZV9zdHJ0b3VsKHN0YXJ0ICwmdG9rZW5fc3ViX3N0ciwgMCk7Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIHRva2VuID49IG5yX2NwdV9pZHMpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOwo+ICsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgLyogSWYgbm90IHNldCBhbHJlYWR5ICovCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmICggY3VzdG9tX2NwdV9ydW5xdWV1ZVt0b2tlbl0gPT0gLTEgKQo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY3Vz dG9tX2NwdV9ydW5xdWV1ZVt0b2tlbl0gPSBydW5xdWV1ZTsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBjcHVfYWRkZWRfdG9fcnVucXVldWUgPSAxOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVsc2UKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBpZiAoICF0b2tlbl9zdWJfc3RyIHx8IHRva2VuX3N1Yl9zdHIgPiBlbmQgKQo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGdvdG8gbmV4dDsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHN0YXJ0ID0gKyt0b2tlbl9zdWJfc3RyOwo+ICvCoMKgwqDCoMKgwqDC oMKgfSB3aGlsZSAoIHN0YXJ0IDwgZW5kICk7Cj4gK25leHQ6Cj4gK8KgwqDCoMKgwqDCoMKgwqBp ZiAoIGNwdV9hZGRlZF90b19ydW5xdWV1ZSApCj4gK8KgwqDCoMKgwqDCoMKgwqB7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJ1bnF1ZXVlKys7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGNwdV9hZGRlZF90b19ydW5xdWV1ZSA9IDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvC oMKgwqDCoMKgwqDCoMKgcGFyc2UgPSArK2VuZDsKPiArwqDCoMKgwqB9Cj4gK8KgwqDCoMKgb3B0 X3J1bnF1ZXVlID0gT1BUX1JVTlFVRVVFX0NVU1RPTTsKPiArwqDCoMKgwqByZXR1cm4gMDsKPiAr fQo+ICsKPiDCoHN0YXRpYyB2b2lkIHBhcnNlX2NyZWRpdDJfcnVucXVldWUoY29uc3QgY2hhciAq cykKPiDCoHsKPiDCoMKgwqDCoMKgdW5zaWduZWQgaW50IGk7Cj4gQEAgLTM1MSw4ICs0ODQsMjkg QEAgc3RhdGljIHZvaWQgcGFyc2VfY3JlZGl0Ml9ydW5xdWV1ZShjb25zdCBjaGFyCj4gKnMpCj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm47Cj4gwqDCoMKgwqDCoMKgwqDCoMKgfQo+ IMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgLyoKPiArwqDCoMKgwqDCoCogQXQgdGhpcyBzdGFnZSB3 ZSBhcmUgZWl0aGVyIHVua25vd24gdmFsdWUgb2YgY3JlZGl0Ml9ydW5xdWV1ZQo+IG9yIHdlIGNh bgo+ICvCoMKgwqDCoMKgKiBjb25zaWRlciBpdCB0byBiZSBjdXN0b20gY3B1LiBMZXRzIHRyeSBw YXJzaW5nIHRoZSBzYW1lLgo+ICvCoMKgwqDCoMKgKiBSZXNldHRpbmcgdGhlIGN1c3RvbV9jcHVf cnVucXVldWUgZm9yIGZ1dHVyZSB1c2UuIE9ubHkgdGhlCj4gbm9uLW5lZ2F0aXZlCj4gK8KgwqDC oMKgwqAqIGVudHJpZXMgd2lsbCBiZSB2YWxpZC4gVGhlIGluZGV4ICdpJyBpbiBjdXN0b21fY3B1 X3J1bnF1ZXVlCj4gd2lsbCBzdG9yZQo+ICvCoMKgwqDCoMKgKiB0aGUgc3BlY2lmaWMgcnVucXVl dWUgaXQgYmVsb25ncyB0by4KPiArwqDCoMKgwqDCoCogRXhhbXBsZToKPiArwqDCoMKgwqDCoCrC oMKgwqDCoMKgSWYgY3VzdG9tX2NwdV9ydW5xdWV1ZVszXSA9PSAyCj4gK8KgwqDCoMKgwqAqwqDC oMKgwqDCoFRoZW4sIGl0IG1lYW5zIHRoYXQgY3B1IDMgYmVsb25nIHRvIHJ1bnF1ZXVlIDIuCj4g K8KgwqDCoMKgwqAqwqDCoMKgwqDCoElmIGN1c3RvbV9jcHVfcnVucXVldWVbNF0gPT0gLTEKPiAr wqDCoMKgwqDCoCrCoMKgwqDCoMKgVGhlbiwgaXQgbWVhbnMgdGhhdCBjcHUgNCBkb2Vzbid0IGJl bG9uZyB0byBhbnkgcnVucXVldWUuCj4gK8KgwqDCoMKgwqAqLwo+ICvCoMKgwqDCoGZvciAoIGkg PSAwOyBpIDwgbnJfY3B1X2lkczsgaSsrICkKPiArwqDCoMKgwqDCoMKgwqDCoGN1c3RvbV9jcHVf cnVucXVldWVbaV0gPSAtMTsKPiDCoAo+IC3CoMKgwqDCoHByaW50aygiV0FSTklORywgdW5yZWNv Z25pemVkIHZhbHVlIG9mIGNyZWRpdDJfcnVucXVldWUKPiBvcHRpb24hXG4iKTsKPiArwqDCoMKg wqBpZiAoIHBhcnNlX2N1c3RvbV9ydW5xdWV1ZV9vcHRpb24ocykgIT0gMCApCj4gK8KgwqDCoMKg ewo+ICvCoMKgwqDCoMKgwqDCoMKgLyogUmVzZXR0aW5nIGluIGNhc2Ugb2YgZmFpbHVyZSwgc28g dGhhdCB3ZSBkb24ndCBtZXNzLXVwCj4gZHVyaW5nIGFueSBmYWlsdXJlCj4gK8KgwqDCoMKgwqDC oMKgwqDCoCogZHVlIHRvIHdyb25nIG9yIHNwdXJpb3VzIHBhdHRlcm4gcGFzc2VkIGJ5IHVzZXIu Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoCovCj4gK8KgwqDCoMKgwqDCoMKgwqBvcHRfcnVucXVldWUg PSBPUFRfUlVOUVVFVUVfU09DS0VUOwo+ICvCoMKgwqDCoMKgwqDCoMKgcHJpbnRrKCJXQVJOSU5H LCB1bnJlY29nbml6ZWQgdmFsdWUgb2YgY3JlZGl0Ml9ydW5xdWV1ZQo+IG9wdGlvbiFcbiIpOwo+ ICvCoMKgwqDCoH0KPiDCoH0KPiDCoGN1c3RvbV9wYXJhbSgiY3JlZGl0Ml9ydW5xdWV1ZSIsIHBh cnNlX2NyZWRpdDJfcnVucXVldWUpOwo+IMKgCj4gQEAgLTY2Miw2ICs4MTYsMTUgQEAgY3B1X3Rv X3J1bnF1ZXVlKHN0cnVjdCBjc2NoZWQyX3ByaXZhdGUgKnBydiwKPiB1bnNpZ25lZCBpbnQgY3B1 KQo+IMKgwqDCoMKgwqBzdHJ1Y3QgY3NjaGVkMl9ydW5xdWV1ZV9kYXRhICpycWQ7Cj4gwqDCoMKg wqDCoHVuc2lnbmVkIGludCBycWk7Cj4gwqAKPiArwqDCoMKgwqBpZiAoIG9wdF9ydW5xdWV1ZSA9 PSBPUFRfUlVOUVVFVUVfQ1VTVE9NICkKPiArwqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBp ZiAoIGN1c3RvbV9jcHVfcnVucXVldWVbY3B1XSAhPSAtMSApCj4gK8KgwqDCoMKgwqDCoMKgwqB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJVR19PTihjdXN0b21fY3B1X3J1bnF1ZXVlW2Nw dV0gPj0gbnJfY3B1X2lkcyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBjdXN0 b21fY3B1X3J1bnF1ZXVlW2NwdV07Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgfQo+ ICsKPiDCoMKgwqDCoMKgZm9yICggcnFpID0gMDsgcnFpIDwgbnJfY3B1X2lkczsgcnFpKysgKQo+ IMKgwqDCoMKgwqB7Cj4gwqDCoMKgwqDCoMKgwqDCoMKgdW5zaWduZWQgaW50IHBlZXJfY3B1OwoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==