From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yi Sun Subject: Re: [PATCH v8 08/24] x86: refactor psr: set value: implement framework. Date: Fri, 10 Mar 2017 10:54:22 +0800 Message-ID: <20170310025422.GF17458@yi.y.sun> References: <1487148579-7243-1-git-send-email-yi.y.sun@linux.intel.com> <1487148579-7243-9-git-send-email-yi.y.sun@linux.intel.com> <58C03A3E020000780014155A@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cmAgs-0008MU-Ly for xen-devel@lists.xenproject.org; Fri, 10 Mar 2017 02:54:02 +0000 Content-Disposition: inline In-Reply-To: <58C03A3E020000780014155A@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich Cc: kevin.tian@intel.com, wei.liu2@citrix.com, he.chen@linux.intel.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, mengxu@cis.upenn.edu, xen-devel@lists.xenproject.org, chao.p.peng@linux.intel.com List-Id: xen-devel@lists.xenproject.org T24gMTctMDMtMDggMDk6MDc6MTAsIEphbiBCZXVsaWNoIHdyb3RlOgo+ID4+PiBPbiAxNS4wMi4x NyBhdCAwOTo0OSwgPHlpLnkuc3VuQGxpbnV4LmludGVsLmNvbT4gd3JvdGU6Cj4gPiBBcyBzZXQg dmFsdWUgZmxvdyBpcyB0aGUgbW9zdCBjb21wbGljYXRlZCBvbmUgaW4gcHNyLCBpdCB3aWxsIGJl Cj4gPiBkaXZpZGVkIHRvIHNvbWUgcGF0Y2hlcyB0byBtYWtlIHRoaW5ncyBjbGVhcmVyLiBUaGlz IHBhdGNoCj4gPiBpbXBsZW1lbnRzIHRoZSBzZXQgdmFsdWUgZnJhbWV3b3JrIHRvIHNob3cgYSB3 aG9sZSBwaWN0dXJlIGZpcnN0bHkuCj4gPiAKPiA+IEl0IGFsc28gY2hhbmdlcyBkb21jdGwgaW50 ZXJmYWNlIHRvIG1ha2UgaXQgbW9yZSBnZW5lcmFsLgo+ID4gCj4gPiBUbyBtYWtlIHRoZSBzZXQg dmFsdWUgZmxvdyBiZSBnZW5lcmFsIGFuZCBjYW4gc3VwcG9ydCBtdWx0aXBsZSBmZWF0dXJlcwo+ ID4gYXQgc2FtZSB0aW1lLCBpdCBpbmNsdWRlcyBiZWxvdyBzdGVwczoKPiA+IDEuIEdldCBDT1Mg SUQgb2YgY3VycmVudCBkb21haW4gdXNpbmcuCj4gCj4gV2hhdCBpcyB0aGUgInVzaW5nIiBoZXJl IHN1cHBvc2VkIHRvIG1lYW4/Cj4gCk15IG1lYW5pbmcgaXMgdG8gZ2V0IHRoZSBjb3MgaWQgdGhh dCBjdXJyZW50IGRvbWFpbiBpcyB1c2luZy4gU29ycnkgZm9yIHRoaXMuCldpbGwgbWFrZSBpdCBi ZXR0ZXIuCgo+ID4gLS0tIGEveGVuL2FyY2gveDg2L3Bzci5jCj4gPiArKysgYi94ZW4vYXJjaC94 ODYvcHNyLmMKPiA+IEBAIC01NDYsMTggKzU0NiwyMTQgQEAgaW50IHBzcl9nZXRfdmFsKHN0cnVj dCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBzb2NrZXQsCj4gPiAgICAgIHJldHVybiBwc3JfZ2V0 KHNvY2tldCwgdHlwZSwgTlVMTCwgMCwgZCwgdmFsKTsKPiA+ICB9Cj4gPiAgCj4gPiAtaW50IHBz cl9zZXRfbDNfY2JtKHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGludCBzb2NrZXQsCj4gPiAt ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IGNibSwgZW51bSBjYm1fdHlwZSB0eXBlKQo+ID4g Ky8qIFNldCB2YWx1ZSBmdW5jdGlvbnMgKi8KPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGdldF9j b3NfbnVtKGNvbnN0IHN0cnVjdCBwc3Jfc29ja2V0X2luZm8gKmluZm8pCj4gPiAgewo+ID4gICAg ICByZXR1cm4gMDsKPiA+ICB9Cj4gPiAgCj4gPiArc3RhdGljIGludCBhc3NlbWJsZV92YWxfYXJy YXkodWludDY0X3QgKnZhbCwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCBhcnJheV9sZW4sCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbywKPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgb2xkX2NvcykKPiA+ICt7Cj4gPiArICAgIHJldHVybiAtRUlO VkFMOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHNldF9uZXdfdmFsX3RvX2FycmF5KHVp bnQ2NF90ICp2YWwsCj4gCj4gaW5zZXJ0X25ld192YWwoKSA/IEFuZCB3aGVuIHRhbGtpbmcgYWJv dXQgYXJyYXlzLCBhcyBpbmRpY2F0ZWQKPiBiZWZvcmUsIHBsZWFzZSB1c2UgW10gbm90YXRpb24g aW5zdGVhZCBvZiBwb2ludGVycy4gVGhpcyBpcwo+IHBhcnRpY3VsYXJseSByZWxldmFudCB3aGVu IHRoZSBmdW5jdGlvbiBuYW1lIHN1Z2dlc3RzIHRoYXQgaXQKPiB3b3VsZCBiZSAidmFsIiB3aGlj aCBnZXRzIGluc2VydGVkLCBidXQgYWl1aSBpdCBpcyByZWFsbHkgLi4uCj4gCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBhcnJheV9sZW4sCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcHNyX3NvY2tldF9pbmZvICpp bmZvLAo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwc3JfZmVhdF90 eXBlIGZlYXRfdHlwZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudW0g Y2JtX3R5cGUgdHlwZSwKPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ2 NF90IG0pCj4gCj4gLi4uICJtIi4gVGhlcmVmb3JlIHBsZWFzZSBhbHNvIGNvbnNpZGVyIGJldHRl ciBuYW1pbmcgb2YgcGFyYW1ldGVycy4KPiAKU3VyZSwgdGhhbmtzIQoKPiA+ICtzdGF0aWMgaW50 IHdyaXRlX3Bzcl9tc3IodW5zaWduZWQgaW50IHNvY2tldCwgdW5zaWduZWQgaW50IGNvcywKPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDY0X3QgKnZhbCkKPiA+ICt7Cj4g PiArICAgIHJldHVybiAtRU5PRU5UOwo+ID4gK30KPiAKPiBJcyB0aGlzIGZ1bmN0aW9uIGludGVu ZGVkIHlvdSB3cml0ZSBqdXN0IG9uZSBNU1IsIG9yIHBvdGVudGlhbGx5IG1hbnk/Cj4gSW4gdGhl IGxhdHRlciBjYXNlIHRoZSBuYW1lIHdvdWxkIHBlcmhhcHMgYmV0dGVyIGJlICJ3cml0ZV9wc3Jf bXNycygpIi4KPiAKRm9yIG9uZSBmZWF0dXJlLCBpdCBkb2VzIHNldCBvbmUgTVNSLgoKPiA+ICtp bnQgcHNyX3NldF92YWwoc3RydWN0IGRvbWFpbiAqZCwgdW5zaWduZWQgaW50IHNvY2tldCwKPiA+ ICsgICAgICAgICAgICAgICAgdWludDY0X3QgdmFsLCBlbnVtIGNibV90eXBlIHR5cGUpCj4gPiAr ewo+ID4gKyAgICB1bnNpZ25lZCBpbnQgb2xkX2NvczsKPiA+ICsgICAgaW50IGNvcywgcmV0Owo+ ID4gKyAgICB1bnNpZ25lZCBpbnQgKnJlZjsKPiA+ICsgICAgdWludDY0X3QgKnZhbF9hcnJheTsK PiA+ICsgICAgc3RydWN0IHBzcl9zb2NrZXRfaW5mbyAqaW5mbyA9IGdldF9zb2NrZXRfaW5mbyhz b2NrZXQpOwo+ID4gKyAgICB1aW50MzJfdCBhcnJheV9sZW47Cj4gPiArICAgIGVudW0gcHNyX2Zl YXRfdHlwZSBmZWF0X3R5cGU7Cj4gPiArCj4gPiArICAgIGlmICggSVNfRVJSKGluZm8pICkKPiA+ ICsgICAgICAgIHJldHVybiBQVFJfRVJSKGluZm8pOwo+ID4gKwo+ID4gKyAgICBmZWF0X3R5cGUg PSBwc3JfY2JtX3R5cGVfdG9fZmVhdF90eXBlKHR5cGUpOwo+ID4gKyAgICBpZiAoICF0ZXN0X2Jp dChmZWF0X3R5cGUsICZpbmZvLT5mZWF0X21hc2spICkKPiA+ICsgICAgICAgIHJldHVybiAtRU5P RU5UOwo+ID4gKwo+ID4gKyAgICAvKgo+ID4gKyAgICAgKiBTdGVwIDA6Cj4gPiArICAgICAqIG9s ZF9jb3MgbWVhbnMgdGhlIENPUyBJRCBjdXJyZW50IGRvbWFpbiBpcyB1c2luZy4gQnkgZGVmYXVs dCwgaXQgaXMgMC4KPiA+ICsgICAgICoKPiA+ICsgICAgICogRm9yIGV2ZXJ5IENPUyBJRCwgdGhl cmUgaXMgYSByZWZlcmVuY2UgY291bnQgdG8gcmVjb3JkIGhvdyBtYW55IGRvbWFpbnMKPiA+ICsg ICAgICogYXJlIHVzaW5nIHRoZSBDT1MgcmVnaXN0ZXIgY29ycmVzcG9uZGluZyB0byB0aGlzIENP UyBJRC4KPiA+ICsgICAgICogLSBJZiByZWZbb2xkX2Nvc10gaXMgMCwgdGhhdCBtZWFucyB0aGlz IENPUyBpcyBub3QgdXNlZCBieSBhbnkgZG9tYWluLgo+ID4gKyAgICAgKiAtIElmIHJlZltvbGRf Y29zXSBpcyAxLCB0aGF0IG1lYW5zIHRoaXMgQ09TIGlzIG9ubHkgdXNlZCBieSBjdXJyZW50Cj4g PiArICAgICAqICAgZG9tYWluLgo+ID4gKyAgICAgKiAtIElmIHJlZltvbGRfY29zXSBpcyBtb3Jl IHRoYW4gMSwgdGhhdCBtZWFuIG11bHRpcGxlIGRvbWFpbnMgYXJlIHVzaW5nCj4gPiArICAgICAq ICAgdGhpcyBDT1MuCj4gPiArICAgICAqLwo+ID4gKyAgICBvbGRfY29zID0gZC0+YXJjaC5wc3Jf Y29zX2lkc1tzb2NrZXRdOwo+ID4gKyAgICBpZiAoIG9sZF9jb3MgPiBNQVhfQ09TX1JFR19DTlQg KQo+ID4gKyAgICAgICAgcmV0dXJuIC1FT1ZFUkZMT1c7Cj4gCj4gRG9lc24ndCB0aGlzIG5lZWQg dG8gYmUgPj0gPyBBbmQgaXNuJ3QgdGhpcyBoYXBwZW5pbmcgYW4gaW5kaWNhdGlvbgo+IG9mIGEg YnVnLCBpLmUuIHNob3VsZG4ndCB0aGVyZSBiZSBhbiBBU1NFUlRfVU5SRUFDSEFCTEUoKSBhaGVh ZAo+IG9mIHRoZSByZXR1cm4/Cj4gClNvcnJ5LiBUaGlzIGhhcyBiZWVuIGNvcnJlY3RlZCBpbiBu ZXh0IHZlcnNpb24uIFRoYW5rcyEKCj4gPiArICAgIHJlZiA9IGluZm8tPmNvc19yZWY7Cj4gPiAr Cj4gPiArICAgIC8qCj4gPiArICAgICAqIFN0ZXAgMToKPiA+ICsgICAgICogQXNzZW1sZSBhIHZh bHVlIGFycmF5IHRvIHN0b3JlIGFsbCBmZWF0dWVzIGNvc19yZWdfdmFsW29sZF9jb3NdLgo+IAo+ IEFzc2VtYmxlIC4uLiBmZWF0dXJlcyAuLi4KPiAKT2gsIHNvcnJ5LgoKWy4uLl0KPiA+ICsgICAg LyoKPiA+ICsgICAgICogU3RlcCAyOgo+ID4gKyAgICAgKiBUcnkgdG8gZmluZCBpZiB0aGVyZSBp cyBhbHJlYWR5IGEgQ09TIElEIG9uIHdoaWNoIGFsbCBmZWF0dXJlcycgdmFsdWVzCj4gPiArICAg ICAqIGFyZSBzYW1lIGFzIHRoZSBhcnJheS4gVGhlbiwgd2UgY2FuIHJldXNlIHRoaXMgQ09TIElE Lgo+ID4gKyAgICAgKi8KPiA+ICsgICAgY29zID0gZmluZF9jb3ModmFsX2FycmF5LCBhcnJheV9s ZW4sIGZlYXRfdHlwZSwgaW5mbyk7Cj4gPiArICAgIGlmICggY29zID49IDAgKQo+ID4gKyAgICB7 Cj4gPiArICAgICAgICBpZiAoIGNvcyA9PSBvbGRfY29zICkKPiA+ICsgICAgICAgIHsKPiA+ICsg ICAgICAgICAgICBzcGluX3VubG9jaygmaW5mby0+cmVmX2xvY2spOwo+ID4gKyAgICAgICAgICAg IHhmcmVlKHZhbF9hcnJheSk7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPiArICAgICAg ICB9Cj4gCj4gWW91IGNvdWxkIHNhdmUgYSBsZXZlbCBvZiBpbmRlbnRhdGlvbiBpZiB5b3UgaW52 ZXJ0ZWQgdGhlIG91dGVyIGlmKCkncwo+IGNvbmRpdGlvbiBhbmQgbWFkZSB0aGUgY29kZSBhYm92 ZSAiZWxzZSBpZiIuCj4gCldpbGwgY29uc2lkZXIgaXQuCgo+ID4gKyAgICB9Cj4gPiArICAgIGVs c2UKPiA+ICsgICAgewo+ID4gKyAgICAgICAgLyoKPiA+ICsgICAgICAgICAqIFN0ZXAgMzoKPiA+ ICsgICAgICAgICAqIElmIGZhaWwgdG8gZmluZCwgd2UgbmVlZCBhbGxvY2F0ZSBhIG5ldyBDT1Mg SUQuCj4gPiArICAgICAgICAgKiBJZiBtdWx0aXBsZSBkb21haW5zIGFyZSB1c2luZyBzYW1lIENP UyBJRCwgaXRzIHJlZiBpcyBtb3JlCj4gPiArICAgICAgICAgKiB0aGFuIDEuIFRoYXQgbWVhbnMg d2UgY2Fubm90IGZyZWUgdGhpcyBDT1MgdG8gbWFrZSBjdXJyZW50IGRvbWFpbgo+ID4gKyAgICAg ICAgICogdXNlIGl0LiBCZWNhdXNlIG90aGVyIGRvbWFpbnMgYXJlIHVzaW5nIHRoZSB2YWx1ZSBz YXZlZCBpbiB0aGUgQ09TLgo+ID4gKyAgICAgICAgICogVW5sZXNzIHRoZSByZWYgaXMgY2hhbmdl ZCB0byAxIChtZWFuIG9ubHkgY3VycmVudCBkb21haW4gaXMgdXNpbmcKPiA+ICsgICAgICAgICAq IGl0KSwgd2UgY2Fubm90IGFsbG9jYXRlIHRoZSBDT1MgSUQgdG8gY3VycmVudCBkb21haW4uCj4g Cj4gSSB0aGluayBJIGhhZCBiZWVuIGNvbmZ1c2VkIGJ5IHRoaXMgYWxyZWFkeSBiZWZvcmUsIGFu ZCBJIGNvbnRpbnVlIHRvCj4gYmU6IEhvdyBjb3VsZCByZWYgYmUgImNoYW5nZWQgdG8gMSIgaGVy ZSwgYW5kIHRoZW4gaGF2ZSBzYWlkCj4gbWVhbmluZz8gSWYgeW91IHJlZmVyIHRvIHRoZSB2YWx1 ZSBhZnRlciBhIHBvc3NpYmxlIGRlY3JlbWVudCwgdGhlCj4gdmFsdWUgdGhlbiBiZWluZyAxIG1l YW5zIHRoZXJlIGlzIGFub3RoZXIgZG9tYWluIHVzaW5nIGl0LiBIZW5jZSAuLi4KPiAKPiA+ICsg ICAgICAgICAqIFNvLCBvbmx5IHRoZSBDT1MgSUQgd2hpY2ggcmVmIGlzIDEgb3IgMCBjYW4gYmUg YWxsb2NhdGVkLgo+IAo+IC4uLiBJIHRoaW5rIHRoaXMgaXMgbm90IGdlbmVyYWxseSBjb3JyZWN0 IGVpdGhlcjogQSBDT1Mgd2l0aCByZWYgMSBjYW4KPiBvbmx5IGJlIHJlLXVzZWQgaXQgdGhhdCdz IG9sZF9jb3MuIEluIGFsbCBvdGhlciBjYXNlcyBvbmx5IHJlZiAwIG9uZXMKPiBhcmUgY2FuZGlk YXRlcy4gQnV0IGFueXdheSBJIHRoaW5rIHRoZSBjb21tZW50IGJlbG9uZ3MgaW50byB0aGUKPiBm dW5jdGlvbiwgd2hpY2ggd291bGQgdGhlbiBhbGxvdyBmb3Igc2VlaW5nIGl0IGJlIGFkZGVkIGFs b25nIHdpdGgKPiB0aGUgYWN0dWFsIGNvZGUsIG1ha2luZyBpdCBwb3NzaWJsZSB0byBjaGVjayB0 aGF0IGJvdGggbWF0Y2ggdXAuCj4gClNvcnJ5LCB0aGUgZXhwcmVzc2lvbiBpcyBub3QgZ29vZC4g SW4gZmFjdCwgb25seSBDT1MgSUQgd2hpY2ggcmVmIGlzIDEgb3IgMApjYW4gYmUgYWxsb2NhdGVk IHRvIGN1cnJlbnQgZG9tYWluLiBJZiBvbGRfY29zIGlzIG5vdCAwIGFuZCBpdHMgcmVmPT0xIG1l YW5zCnRoYXQgb25seSBjdXJyZW50IGRvbWFpbiBpcyB1c2luZyB0aGlzIG9sZF9jb3MgSUQuIFNv LCB0aGlzIG9sZF9jb3MgSUQgaXMKY2VydGFpbmx5IGNhbiBiZSByZXVzZWQgYnkgY3VycmVudCBk b21haW4uIFJlZj09MCBtZWFucyB0aGVyZSBpcyBubyBhbnkgZG9tYWluCnVzaW5nIHRoaXMgQ09T IElELiBTbyBpdCBjYW4gYmUgdXNlZCB0b28uCgpJIHdpbGwgcG9saXNoIHRoZSBjb21tZW50cy4K Cj4gPiArICAgICAgICAgKi8KPiA+ICsgICAgICAgIGNvcyA9IHBpY2tfYXZhaWxfY29zKGluZm8s IHZhbF9hcnJheSwgYXJyYXlfbGVuLCBvbGRfY29zLCBmZWF0X3R5cGUpOwo+ID4gKyAgICAgICAg aWYgKCBjb3MgPCAwICkKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAgICBzcGluX3VubG9j aygmaW5mby0+cmVmX2xvY2spOwo+ID4gKyAgICAgICAgICAgIHhmcmVlKHZhbF9hcnJheSk7Cj4g PiArICAgICAgICAgICAgcmV0dXJuIGNvczsKPiA+ICsgICAgICAgIH0KPiA+ICsKPiA+ICsgICAg ICAgIC8qCj4gPiArICAgICAgICAgKiBTdGVwIDQ6Cj4gPiArICAgICAgICAgKiBXcml0ZSBhbGwg ZmVhdHVyZXMgTVNScyBhY2NvcmRpbmcgdG8gdGhlIENPUyBJRC4KPiA+ICsgICAgICAgICAqLwo+ ID4gKyAgICAgICAgcmV0ID0gd3JpdGVfcHNyX21zcihzb2NrZXQsIGNvcywgdmFsX2FycmF5KTsK PiA+ICsgICAgICAgIGlmICggcmV0ICkKPiA+ICsgICAgICAgIHsKPiA+ICsgICAgICAgICAgICBz cGluX3VubG9jaygmaW5mby0+cmVmX2xvY2spOwo+ID4gKyAgICAgICAgICAgIHhmcmVlKHZhbF9h cnJheSk7Cj4gPiArICAgICAgICAgICAgcmV0dXJuIHJldDsKPiA+ICsgICAgICAgIH0KPiAKPiBU aGVzZSByZWN1cnJpbmcgZXJyb3IgcGF0aHMgY291bGQgY2VydGFpbmx5IGRvIHdpdGggZm9sZGlu Zy4KPiAKWWVzLCBXZWkgaGFzIHN1Z2dlc3RlZCB0byB1c2UgZ290byB0byBoYW5kbGUgdGhlbS4g VGhpcyBoYXMgYmVlbiByZWZpbmVkIGluCm5leHQgdmVyc2lvbi4KCj4gPiArICAgIH0KPiA+ICsK PiA+ICsgICAgLyoKPiA+ICsgICAgICogU3RlcCA1Ogo+ID4gKyAgICAgKiBVcGRhdGUgcmVmIGFj Y29yZGluZyB0byBDT1MgSUQuCj4gPiArICAgICAqLwo+ID4gKyAgICByZWZbY29zXSsrOwo+ID4g KyAgICBBU1NFUlQocmVmW2Nvc10gfHwgY29zID09IDApOwo+IAo+ICAgICBBU1NFUlQoIWNvcyB8 fCByZWZbY29zXSk7Cj4gICAgIEFTU0VSVCghb2xkX2NvcyB8fCByZWZbb2xkX2Nvc10pOwo+IApP aywgdGhhbmtzIQoKPiA+ICsgICAgcmVmW29sZF9jb3NdLS07Cj4gPiArICAgIHNwaW5fdW5sb2Nr KCZpbmZvLT5yZWZfbG9jayk7Cj4gPiArCj4gPiArICAgIC8qCj4gPiArICAgICAqIFN0ZXAgNjoK PiA+ICsgICAgICogU2F2ZSB0aGUgQ09TIElEIGludG8gY3VycmVudCBkb21haW4ncyBwc3JfY29z X2lkc1tdIHNvIHRoYXQgd2UgY2FuIGtub3cKPiA+ICsgICAgICogd2hpY2ggQ09TIHRoZSBkb21h aW4gaXMgdXNpbmcgb24gdGhlIHNvY2tldC4gT25lIGRvbWFpbiBjYW4gb25seSB1c2UKPiA+ICsg ICAgICogb25lIENPUyBJRCBhdCBzYW1lIHRpbWUgb24gZWFjaCBzb2NrZXQuCj4gPiArICAgICAq Lwo+ID4gKyAgICBkLT5hcmNoLnBzcl9jb3NfaWRzW3NvY2tldF0gPSBjb3M7Cj4gCj4gU28gdGhl IGRvbWFpbiBoYXMgbm90IGJlZW4gcGF1c2VkLCBpLmUuIHNvbWUgb2YgaXRzIHZDUFUtcyBtYXkK PiBiZSBydW5uaW5nIG9uIG90aGVyIHBDUFUtcyAoaW5jbHVkaW5nIG9uZXMgb24gdGhlIHNvY2tl dCBpbgo+IHF1ZXN0aW9uKS4gSG93IGNvbWUgaXQgaXMgc2FmZSB0byB1cGRhdGUgdGhpcyB2YWx1 ZSBoZXJlPwo+IApUaGlzIGlzIGEgZG9tY3RsIG9wZXJhdGlvbi4gSXQgaXMgcHJvdGVjdGVkIGJ5 IGRvbWN0bF9sb2NrIHdoaWNoIGlzIGxvY2tlZCBpbgpkb19kb21jdGwoKS4KCj4gPiAgLyogQ2Fs bGVkIHdpdGggZG9tYWluIGxvY2sgaGVsZCwgbm8gZXh0cmEgbG9jayBuZWVkZWQgZm9yICdwc3Jf Y29zX2lkcycgKi8KPiA+ICBzdGF0aWMgdm9pZCBwc3JfZnJlZV9jb3Moc3RydWN0IGRvbWFpbiAq ZCkKPiA+ICB7Cj4gPiAtICAgIGlmKCAhZC0+YXJjaC5wc3JfY29zX2lkcyApCj4gPiArICAgIHVu c2lnbmVkIGludCBzb2NrZXQsIGNvczsKPiA+ICsKPiA+ICsgICAgaWYgKCAhZC0+YXJjaC5wc3Jf Y29zX2lkcyApCj4gPiAgICAgICAgICByZXR1cm47Cj4gCj4gQXMgaW4gYW4gZWFybGllciBwYXRj aCBJJ3ZlIGFza2VkIGZvciB0aGlzIGNoZWNrIHRvIGJlIHJlbW92ZWQsIEkKPiB0aGluayB5b3Ug d2lsbCBuZWVkIHRvIGFkZCBhIGNoZWNrIG9uIHNvY2tldF9pbmZvIHRvIGJlIG5vbi0KPiBOVUxM IHNvbWV3aGVyZSBpbiB0aGlzIGZ1bmN0aW9uLgo+IApPaywgd2lsbCBkbyBpdCBpbiB0aGUgbG9v cC4KCj4gPiArICAgIC8qIERvbWFpbiBpcyBmcmVlIHNvIGl0cyBjb3NfcmVmIHNob3VsZCBiZSBk ZWNyZWFzZWQuICovCj4gCj4gIkRvbWFpbiBpcyBmcmVlIiA/IERZTSAiaXMgYmVpbmcgZGVzdHJv eWVkIj8KPiAKWWVzLiAKCj4gPiArICAgIGZvciAoIHNvY2tldCA9IDA7IHNvY2tldCA8IG5yX3Nv Y2tldHM7IHNvY2tldCsrICkKPiA+ICsgICAgewo+ID4gKyAgICAgICAgc3RydWN0IHBzcl9zb2Nr ZXRfaW5mbyAqaW5mbzsKPiA+ICsKPiA+ICsgICAgICAgIC8qIGNvcyAwIGlzIGRlZmF1bHQgb25l IHdoaWNoIGRvZXMgbm90IG5lZWQgYmUgaGFuZGxlZC4gKi8KPiA+ICsgICAgICAgIGlmICggKGNv cyA9IGQtPmFyY2gucHNyX2Nvc19pZHNbc29ja2V0XSkgPT0gMCApCj4gPiArICAgICAgICAgICAg Y29udGludWU7Cj4gPiArCj4gPiArICAgICAgICAvKgo+ID4gKyAgICAgICAgICogSWYgZG9tYWlu IHVzZXMgb3RoZXIgY29zIGlkcywgYWxsIGNvcnJlc3BvbmRpbmcgcmVmcyBtdXN0IGhhdmUgYmVl bgo+ID4gKyAgICAgICAgICogaW5jcmVhc2VkIDEgZm9yIHRoaXMgZG9tYWluLiBTbywgd2UgbmVl ZCBkZWNyZWFzZSB0aGVtLgo+ID4gKyAgICAgICAgICovCj4gPiArICAgICAgICBpbmZvID0gc29j a2V0X2luZm8gKyBzb2NrZXQ7Cj4gPiArICAgICAgICBBU1NFUlQoaW5mby0+Y29zX3JlZltjb3Nd IHx8IGNvcyA9PSAwKTsKPiA+ICsgICAgICAgIHNwaW5fbG9jaygmaW5mby0+cmVmX2xvY2spOwo+ ID4gKyAgICAgICAgaW5mby0+Y29zX3JlZltjb3NdLS07Cj4gPiArICAgICAgICBzcGluX3VubG9j aygmaW5mby0+cmVmX2xvY2spOwo+IAo+IFRoZSBBU1NFUlQoKSBpcyB1c2VmdWwgb25seSBpbnNp ZGUgdGhlIGxvY2tlZCByZWdpb24uCj4gCk9rLCB0aGFua3MhCgo+IEphbgoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVs Cg==