From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chao Gao Subject: Re: [PATCH v3] x86/apicv: Enhance posted-interrupt processing Date: Thu, 2 Mar 2017 12:28:06 +0800 Message-ID: <20170302042806.GA12584@skl-2s3.sh.intel.com> References: <1488419389-8016-1-git-send-email-chao.gao@intel.com> <58B7F6F3020000780013F23D@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <58B7F6F3020000780013F23D@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: yang.zhang.wz@gmail.com, "Xuquan (Quan Xu)" , quan.xu0@gmail.com, Andrew Cooper , Kevin Tian , xen-devel@lists.xen.org, Jun Nakajima List-Id: xen-devel@lists.xenproject.org T24gVGh1LCBNYXIgMDIsIDIwMTcgYXQgMDI6NDE6NTVBTSAtMDcwMCwgSmFuIEJldWxpY2ggd3Jv dGU6Cj4+Pj4gT24gMDIuMDMuMTcgYXQgMDI6NDksIDxjaGFvLmdhb0BpbnRlbC5jb20+IHdyb3Rl Ogo+Cj5UaGUgcGF0Y2ggdGl0bGUsIGJ0dywgbWFrZXMgaXQgbG9va3MgbGlrZSB0aGlzIGlzbid0 IGEgYnVnIGZpeCwgd2hpY2ggaXMKPmNvbnRyYXJ5IHRvIHRoZSB1bmRlcnN0YW5kaW5nIEkndmUg Z2FpbmVkIHNvIGZhci4KClRoYW5rcyB0byB5b3VyIHBhdGllbmNlIGFuZCB5b3VyIGNoYW5naW5n IHNvIG11Y2ggZGVzY3JpcHRpb24gZm9yIG1lLiBBbHNvIAp0byB0aGUgcXVlc3Rpb25zIHlvdSBh c2tlZC4gSSBhZ3JlZSB0byB0aGUgY29tbWVudHMgaSBkb24ndCByZXBseSB0by4KSG93IGFib3V0 IHRoaXM6CkZpeCBhIHdyb25nbHkgSVBJIHN1cHByZXNzaW9uIGR1cmluZyBwb3N0ZWQgaW50ZXJy dXB0IGRlbGl2ZXJ5Cgo+Cj4+IF9fdm14X2RlbGl2ZXJfcG9zdGVkX2ludGVycnVwdCgpIHdyb25n bHkgdXNlZCBhIHNvZnRpcnEgYml0IHRvIGRlY2lkZSB3aGV0aGVyCj4+IHRvIHN1cHByZXNzIGFu IElQSS4gSXRzIGxvZ2ljIHdhczogdGhlIGZpcnN0IHRpbWUgYW4gSVBJIHdhcyBzZW50LCB3ZSBz ZXQKPj4gdGhlIHNvZnRpcnEgYml0LiBOZXh0IHRpbWUsIHdlIHdvdWxkIGNoZWNrIHRoYXQgc29m dGlycSBiaXQgYmVmb3JlIHNlbmRpbmcKPj4gYW5vdGhlciBJUEkuIElmIHRoZSAxc3QgSVBJIGFy cml2ZWQgYXQgdGhlIHBDUFUgd2hpY2ggd2FzIGluCj4+IG5vbi1yb290IG1vZGUsIHRoZSBoYXJk d2FyZSB3b3VsZCBjb25zdW1lIHRoZSBJUEkgYW5kIHN5bmMgUElSIHRvIHZJUlIuCj4+IER1cmlu ZyB0aGUgcHJvY2Vzcywgbm8gb25lIChib3RoIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSkgd2lsbCBj bGVhciB0aGUKPj4gc29mdGlycSBiaXQuIEFzIGEgcmVzdWx0LCB0aGUgZm9sbG93aW5nIElQSSB3 b3VsZCBiZSB3cm9uZ2x5IHN1cHByZXNzZWQuCj4+IAo+PiBUaGlzIHBhdGNoIGRpc2NhcmRzIHRo ZSBzdXBwcmVzc2lvbiBjaGVjaywgYWx3YXlzIHNlbmRpbmcgSVBJLgo+PiBUaGUgc29mdGlycSBh bHNvIG5lZWQgdG8gYmUgcmFpc2VkLiBCdXQgdGhlcmUgaXMgYSBsaXR0bGUgY2hhbmdlLgo+PiBU aGlzIHBhdGNoIG1vdmVzIHRoZSBwbGFjZSB3aGVyZSB3ZSByYWlzZSBhIHNvZnRpcnEgZm9yCj4+ ICdjcHUgIT0gc21wX3Byb2Nlc3Nvcl9pZCgpJyBjYXNlIHRvIHRoZSBJUEkgaW50ZXJydXB0IGhh bmRsZXIuCj4+IE5hbWVseSwgZG9uJ3QgcmFpc2UgYSBzb2Z0aXJxIGZvciB0aGlzIGNhc2UgYW5k IHNldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIKPj4gdG8gcGlfbm90aWZpY2F0aW9uX2ludGVycnVw dCgpKGluIHdoaWNoIGEgc29mdGlycSBpcyByYWlzZWQpIHJlZ2FyZGxlc3Mgb2YKPj4gcG9zdGVk IGludGVycnVwdCBlbmFibGVkIG9yIG5vdC4KPgo+QXMgdXNpbmcgYSBQSSB0aGluZyBldmVuIGlu IHRoZSBub24tUEkgY2FzZSBpcyBjb3VudGVyaW50dWl0aXZlLCB0aGlzCj5uZWVkcyBleHBhbmRp bmcgb24gaW1vLiBNYXliZSBub3QgaGVyZSBidXQgaW4gYSBjb2RlIGNvbW1lbnQuCj5PciBwZXJo YXBzLCBsb29raW5nIGF0IHRoZSBjb2RlLCB0aGlzIGlzIGp1c3Qgbm90IHByZWNpc2UgZW5vdWdo IGEKPmRlc2NyaXB0aW9uOiBUaGUgY29kZSBpcyBpbnNpZGUgYSBjcHVfaGFzX3ZteF9wb3N0ZWRf aW50cl9wcm9jZXNzaW5nCj5jb25kaXRpb25hbCwgYW5kIHdoYXQgeW91IGRvIGlzIG1vdmUgY29k ZSBvdXQgb2YgdGhlIGlvbW11X2ludHBvc3QKPnNwZWNpZmljIHNlY3Rpb24uIEkuZS4gYSByZWZl cmVuY2UgdG8gSU9NTVUgbWF5IHNpbXBseSBiZSBtaXNzaW5nCj5oZXJlLgoKWWVzLiBUaGUgcmln aHQgZGVzY3JpcHRpb24gaXMgInJlZ2FyZGxlc3Mgb2YgVlQtZCBQSSBlbmFibGVkIG9yIG5vdCIu Cgo+Cj4+IFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgd2hlbiB0aGUgSVBJIGFycml2ZXMKPj4gYXQg dGhlIHBDUFUgd2hpY2ggaXMgaGFwcGVuZWQgaW4gbm9uLXJvb3QgbW9kZSwgdGhlIHBhdGNoIHdp bGwgbm90IHJhaXNlIGEKPgo+cy9wYXRjaC9jb2RlLyAob3Igc29tZSBzdWNoKQo+Cj4+IHVzZWxl c3Mgc29mdGlycSBzaW5jZSB0aGUgSVBJIGlzIGNvbnN1bWVkIGJ5IGhhcmR3YXJlIHJhdGhlciB0 aGFuIHJhaXNlIGEKPj4gc29mdGlycSB1bmNvbmRpdGlvbmFsbHkuCj4+IAo+PiBRdWFuIGRvZXNu J3QgaGF2ZSBlbm91Z2ggdGltZSB0byB1cHN0cmVhbSB0aGlzIGZpeCBwYXRjaC4gSGUgYXNrcyBt ZSB0byBkbwo+PiB0aGlzLiBNZXJnZSBhbm90aGVyIGhpcyByZWxhdGVkIHBhdGNoCj4+IChodHRw czovL2xpc3RzLnhlbnByb2plY3Qub3JnL2FyY2hpdmVzL2h0bWwveGVuLWRldmVsLzIwMTctMDIv bXNnMDI4ODUuaHRtbCkuCj4KPlRoaXMgZG9lc24ndCBiZWxvbmcgaW4gdGhlIGNvbW1pdCBtZXNz YWdlLCBhbmQgaGVuY2Ugc2hvdWxkIGJlIGFmdGVyCj50aGUgZmlyc3QgLS0tLgo+CgpXaWxsIHRh a2UgY2FyZSBvZiB0aGlzIGxhdGVyLgoKPj4gLS0tIGEveGVuL2FyY2gveDg2L2h2bS92bXgvdm14 LmMKPj4gKysrIGIveGVuL2FyY2gveDg2L2h2bS92bXgvdm14LmMKPj4gQEAgLTE4NDIsMTMgKzE4 NDIsNTkgQEAgc3RhdGljIHZvaWQgX192bXhfZGVsaXZlcl9wb3N0ZWRfaW50ZXJydXB0KHN0cnVj dCB2Y3B1ICp2KQo+PiAgICAgIGJvb2xfdCBydW5uaW5nID0gdi0+aXNfcnVubmluZzsKPj4gIAo+ PiAgICAgIHZjcHVfdW5ibG9jayh2KTsKPj4gKyAgICAvKgo+PiArICAgICAqIFRoZSB1bmRlcmx5 aW5nICdJRicgZXhjbHVkZXMgdHdvIGNhc2VzIHdoaWNoIHdlIGRvbid0IG5lZWQgZnVydGhlcgo+ Cj5XaG8gb3Igd2hhdCBpcyAnSUYnPwo+CgpJIG1lYW5lZCB0aGUgJ2lmIHNlbnRlbmNlJy4KCj4+ ICsgICAgICogb3BlcmF0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0IHZDUFUgKEB2KSB3aWxs IHN5bmMgUElSIHRvIHZJUlIgQVNBUC4KPj4gKyAgICAgKiBTcGVjaWZpY2FsbHksIHRoZSB0d28g Y2FzZXMgYXJlOgo+PiArICAgICAqIDEuIFRoZSB0YXJnZXQgdkNQVSBpcyBub3QgcnVubmluZywg bWVhbmluZyBpdCBpcyBibG9ja2VkIG9yIHJ1bm5hYmxlLgo+PiArICAgICAqIFNpbmNlIHdlIGhh dmUgdW5ibG9ja2VkIHRoZSB0YXJnZXQgdkNQVSBhYm92ZSwgdGhlIHRhcmdldCB2Q1BVIHdpbGwK Pj4gKyAgICAgKiBzeW5jIFBJUiB0byB2SVJSIHdoZW4gaXQgaXMgY2hvc2VuIHRvIHJ1bi4KPj4g KyAgICAgKiAyLiBUaGUgdGFyZ2V0IHZDUFUgaXMgdGhlIGN1cnJlbnQgdkNQVSBhbmQgaW5faXJx KCkgaXMgZmFsc2UuIEl0IG1lYW5zCj4+ICsgICAgICogdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBp biBub25pbnRlcnJ1cHQgY29udGV4dC4KPgo+ICAgICAqIDIuIFRoZSB0YXJnZXQgdkNQVSBpcyB0 aGUgY3VycmVudCB2Q1BVIGFuZCB3ZSdyZSBpbgo+ICAgICAqIG5vbi1pbnRlcnJ1cHQgY29udGV4 dC4KPgo+PiBTaW5jZSB3ZSBkb24ndCBjYWxsCj4+ICsgICAgICogdGhlIGZ1bmN0aW9uIGluIG5v bmludGVycnVwdCBjb250ZXh0IGFmdGVyIHRoZSBsYXN0IHRpbWUgYSB2Q1BVIHN5bmNzCj4+ICsg ICAgICogUElSIHRvIHZJUlIsIGV4Y2x1ZGluZyB0aGlzIGNhc2UgaXMgYWxzbyBzYWZlLgo+Cj5J dCBpcyBub3QgcmVhbGx5IGNsZWFyIHRvIG1lIHdoYXQgInRoZSBmdW5jdGlvbiIgaGVyZSByZWZl cnMgdG8uIFN1cmVseQo+dGhlIGZ1bmN0aW9uIHRoZSBjb21tZW50IGlzIGluIHdvbid0IGNhbGwg aXRzZWxmLCBubyBtYXR0ZXIgd2hhdAo+Y29udGV4dC4KClllcywgaXQgaXMgbm90IGNsZWFyLiBI b3cgYWJvdXQ6ClRoZSB0YXJnZXQgdkNQVSBpcyB0aGUgY3VycmVudCB2Q1BVIGFuZCB3ZSdyZSBp biBub24taW50ZXJydXB0IGNvbnRleHQuCndlIGNhbid0IGJlIGluIHRoZSB3aW5kb3cgYmV0d2Vl biB0aGUgY2FsbCB0byB2bXhfaW50cl9hc3Npc3QoKQphbmQgaW50ZXJydXB0cyBnZXR0aW5nIGRp c2FibGVkIHNpbmNlIG5vIGV4aXN0ZWQgY29kZSByZWFjaHMgaGVyZSBpbgpub24taW50ZXJydXB0 IGNvbnRleHQuIENvbnNpZGVyaW5nIHRoYXQsIGl0IGlzIHNhZmUgdG8ganVzdCBsZWF2ZSB3aXRo b3V0CmZ1cnRoZXIgb3BlcmF0aW9uLiAKCkRvIHlvdSB0aGluayB0aGlzIGlzIGNvcnJlY3Q/IEkg aGF2ZSBhbiBhc3N1bXB0aW9uIGhlcmUgdG8gZXhwbGFpbiB3aHkKKGluX2lycSgpIHx8ICh2ICE9 IGN1cnJlbnQpKSBpcyByZWFzb25hYmxlLiBJdCBpcyB0b3RhbGx5IG15IGd1ZXNzLgoKPgo+PiAr ICAgICAqLwo+PiAgICAgIGlmICggcnVubmluZyAmJiAoaW5faXJxKCkgfHwgKHYgIT0gY3VycmVu dCkpICkKPj4gICAgICB7Cj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIE5vdGU6IE9ubHkg dHdvIGNhc2VzIHdpbGwgcmVhY2ggaGVyZToKPj4gKyAgICAgICAgICogMS4gVGhlIHRhcmdldCB2 Q1BVIGlzIHJ1bm5pbmcgb24gb3RoZXIgcENQVS4KPj4gKyAgICAgICAgICogMi4gVGhlIHRhcmdl dCB2Q1BVIGlzIHJ1bm5pbmcgb24gdGhlIHNhbWUgcENQVSB3aXRoIHRoZSBjdXJyZW50Cj4+ICsg ICAgICAgICAqIHZDUFUKPgo+VGhpcyBpcyBhbiBpbXBvc3NpYmxlIHRoaW5nOiBUaGVyZSBjYW4n dCBiZSB0d28gdkNQVS1zIHJ1bm5pbmcgb24KPnRoZSBzYW1lIHBDUFUtcyBhdCB0aGUgc2FtZSB0 aW1lLiBIZW5jZSAuLi4KPgo+PiBhbmQgdGhlIGN1cnJlbnQgdkNQVSBpcyBpbiBpbnRlcnJ1cHQg Y29udGV4dC4gVGhhdCdzIHRvIHNheSwKPj4gKyAgICAgICAgICogdGhlIHRhcmdldCB2Q1BVIGlz IHRoZSBjdXJyZW50IHZDUFUuCj4KPi4uLiBqdXN0IHRoaXMgbGFzdCBzdGF0ZW1lbnQgaXMgc3Vm ZmljaWVudCBoZXJlLgo+Cj4+ICsgICAgICAgICAqIE5vdGUyOiBEb24ndCB3b3JyeSB0aGUgdi0+ cHJvY2Vzc29yIG1heSBjaGFuZ2Ugc2luY2UgYXQgbGVhc3Qgd2hlbgo+PiArICAgICAgICAgKiB0 aGUgdGFyZ2V0IHZDUFUgaXMgY2hvc2VuIHRvIHJ1biBvciBiZSBibG9ja2VkLCB0aGVyZSBpcyBh IGNoYW5jZQo+PiArICAgICAgICAgKiB0byBzeW5jIFBJUiB0byB2SVJSLgo+PiArICAgICAgICAg Ki8KPgo+IlRoZXJlIGlzIGEgY2hhbmNlIiByZWFkcyBhcyBpZiBpdCBtYXkgb3IgbWF5IG5vdCBo YXBwZW4uIEhvdyBhYm91dAo+IlRoZSB2Q1BVIGJlaW5nIG1vdmVkIHRvIGFub3RoZXIgcHJvY2Vz c29yIGlzIGd1YXJhbnRlZWQgdG8gc3luYwo+UElSIHRvIHZJUlIsIGR1ZSB0byB0aGUgaW52b2x2 ZWQgc2NoZWR1bGluZyBjeWNsZSI/IE9mIGNvdXJzZSBvbmx5IGlmCj50aGlzIG1hdGNoZXMgcmVh bGl0eS4KCkkgdGhpbmsgeW91ciBkZXNjcmlwdGlvbiBpcyByaWdodC4KCj4KPj4gICAgICAgICAg dW5zaWduZWQgaW50IGNwdSA9IHYtPnByb2Nlc3NvcjsKPj4gIAo+PiAtICAgICAgICBpZiAoICF0 ZXN0X2FuZF9zZXRfYml0KFZDUFVfS0lDS19TT0ZUSVJRLCAmc29mdGlycV9wZW5kaW5nKGNwdSkp Cj4+IC0gICAgICAgICAgICAgJiYgKGNwdSAhPSBzbXBfcHJvY2Vzc29yX2lkKCkpICkKPj4gKyAg ICAgICAgLyoKPj4gKyAgICAgICAgICogRm9yIGNhc2UgMSwgd2Ugc2VuZCBhIElQSSB0byB0aGUg cENQVS4gV2hlbiB0aGUgSVBJIGFycml2ZXMsIHRoZQo+Cj4uLi4gYW4gSVBJIC4uLiAoYWxzbyBh dCBsZWFzdCBvbmNlIG1vcmUgYmVsb3cpCj4KPj4gKyAgICAgICAgICogdGFyZ2V0IHZDUFUgbWF5 YmUgaXMgcnVubmluZyBpbiBub24tcm9vdCBtb2RlLCBydW5uaW5nIGluIHJvb3QKPj4gKyAgICAg ICAgICogbW9kZSwgcnVubmFibGUgb3IgYmxvY2tlZC4gSWYgdGhlIHRhcmdldCB2Q1BVIGlzIHJ1 bm5pbmcgaW4KPj4gKyAgICAgICAgICogbm9uLXJvb3QgbW9kZSwgdGhlIGhhcmR3YXJlIHdpbGwg c3luYyBQSVIgdG8gdklSUiBmb3IgdGhlIElQSQo+PiArICAgICAgICAgKiB2ZWN0b3IgaXMgc3Bl Y2lhbCB0byB0aGUgcENQVS4gSWYgdGhlIHRhcmdldCB2Q1BVIGlzIHJ1bm5pbmcgaW4KPj4gKyAg ICAgICAgICogcm9vdC1tb2RlLCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgc3RhcnRzIHRvIHJ1bi4g SW4gb3JkZXIgdG8gbWFrZQo+PiArICAgICAgICAgKiBzdXJlIHRoZSB0YXJnZXQgdkNQVSBjb3Vs ZCBnbyBiYWNrIHRvIHZteF9pbnRyX2Fzc2lzdCgpLCB0aGUKPj4gKyAgICAgICAgICogaW50ZXJy dXB0IGhhbmRsZXIgc2hvdWxkIHJhaXNlIGEgc29mdGlycSBpZiBubyBwZW5kaW5nIHNvZnRpcnEu Cj4KPkkgZG9uJ3QgdW5kZXJzdGFuZCB0aGlzIHBhcnQ6IENhbGxpbmcgdm14X2ludHJfYXNzaXN0 KCkgaXMgcGFydCBvZiBhbnkKPlZNIGVudHJ5LCBzbyBpZiB3ZSdyZSBpbiByb290IG1vZGUsIHRo ZSBmdW5jdGlvbiB3aWxsIG5lY2Vzc2FyaWx5IGJlCj5jYWxsZWQuIEFyZSB5b3UgcGVyaGFwcyB3 b3JyaWVkIGFib3V0IHRoZSB3aW5kb3cgYmV0d2VlbiB0aGUgY2FsbAo+dG8gdm14X2ludHJfYXNz aXN0KCkgYW5kIGludGVycnVwdHMgZ2V0dGluZyBkaXNhYmxlZCAob3IgYW55IG90aGVyCj5zaW1p bGFyIG9uZSAtIEkgZGlkbid0IG1ha2UgYW4gYXR0ZW1wdCB0byBjb2xsZWN0IGEgY29tcGxldGUg c2V0KT8gSWYKPnNvLCB0aGF0J3Mgd2hhdCBuZWVkcyB0byBiZSBtZW50aW9uZWQgaGVyZS4KClll cy4gSSBvbmx5IHJlY29nbml6ZWQgdGhpcyB3aW5kb3cuIFdpbGwgbWVudGlvbiB0aGlzIHdpbmRv dyBpbiBuZXh0IHZlcnNpb24uCgo+Cj4+ICsgICAgICAgICAqIElmIHRoZSB0YXJnZXQgdkNQVSBp cyBydW5uYWJsZSwgaXQgd2lsbCBzeW5jIFBJUiB0byB2SVJSIG5leHQgdGltZQo+PiArICAgICAg ICAgKiBpdCBpcyBjaG9zZSB0byBydW4uIEluIHRoaXMgY2FzZSwgYSBJUEkgYW5kIGEgc29mdGly cSBpcyBzZW50IHRvCj4+ICsgICAgICAgICAqIGEgd3JvbmcgdkNQVSB3aGljaCB3ZSB0aGluayBp dCBpcyBub3QgYSBiaWcgaXNzdWUuIElmIHRoZSB0YXJnZXQKPgo+TWF5YmUgIi4uLiB3aGljaCB3 aWxsIG5vdCBoYXZlIGFueSBhZHZlcnNlIGVmZmVjdCI/Cj4KPj4gKyAgICAgICAgICogdkNQVSBp cyBibG9ja2VkLCBzaW5jZSB2Y3B1X2Jsb2NrKCkgY2hlY2tzIHdoZXRoZXIgdGhlcmUgaXMgYW4K Pj4gKyAgICAgICAgICogZXZlbnQgdG8gYmUgZGVsaXZlcmVkIHRocm91Z2ggbG9jYWxfZXZlbnRz X25lZWRfZGVsaXZlcnkoKSBqdXN0Cj4+ICsgICAgICAgICAqIGFmdGVyIGJsb2NraW5nLCB0aGUg dkNQVSBtdXN0IGhhdmUgc3luY2VkIFBJUiB0byB2SVJSLiBTaW1pbGFybHksCj4+ICsgICAgICAg ICAqIHRoZXJlIGlzIGEgSVBJIGFuZCBhIHNvZnRpcnEgc2VudCB0byBhIHdyb25nIHZDUFUuCj4+ ICsgICAgICAgICAqLwo+PiArICAgICAgICBpZiAoIGNwdSAhPSBzbXBfcHJvY2Vzc19pZCgpICkK Pgo+RGlkIHlvdSBub3QgZXZlbiBidWlsZCB0ZXN0IHRoaXMgcGF0Y2g/IEkgZG9uJ3QgdGhpbmsg dGhlIGNvbnN0cnVjdAo+YWJvdmUgY29tcGlsZXMuCgpSZWFsbHkgc29ycnkuIEkgZm9yZ290IHRv IGNvbW1pdCBhZnRlciBJIGZpeGVkIHRoaXMuCkFjdHVyYWxseSwgSSBmb3VuZCB0aGlzLCBmaXhl ZCBpdCBhbmQgdGVzdGVkIHRoaXMgcGF0Y2ggc2V2ZXJhbCB0aW1lcyggd2l0aCBvcgp3aXRob3V0 IFZULWQgUEkpIHRvIGF2b2lkIHNvbWUgb2J2aW91cyByZWdyZXNzaW9uLgoKPgo+PiAgICAgICAg ICAgICAgc2VuZF9JUElfbWFzayhjcHVtYXNrX29mKGNwdSksIHBvc3RlZF9pbnRyX3ZlY3Rvcik7 Cj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIEZvciBjYXNlIDIsIHJhaXNpbmcgYSBzb2Z0 aXJxIGNhbiBjYXVzZSB2bXhfaW50cl9hc3Npc3QoKSB3aGVyZSBQSVIKPj4gKyAgICAgICAgICog aGFzIGEgY2hhbmNlIHRvIGJlIHN5bmNlZCB0byB2SVJSIHRvIGJlIGNhbGxlZC4gQXMgYW4gb3B0 aW1pemF0aW9uLAo+PiArICAgICAgICAgKiBXZSBvbmx5IG5lZWQgdG8gcmFpc2UgYSBzb2Z0aXJx IHdoZW4gbm8gcGVuZGluZyBzb2Z0aXJxLgo+Cj5Ib3cgYWJvdXQgIkFzIGFueSBzb2Z0aXJxIHdp bGwgZG8sIGFzIGFuIG9wdGltaXphdGlvbiB3ZSBvbmx5IHJhaXNlCj5vbmUgaWYgbm9uZSBpcyBw ZW5kaW5nIGFscmVhZHkiPyBBZ2FpbiwgaWYgdGhpcyBpcyBhIHZhbGlkIHN0YXRlbWVudAo+b25s eSwgb2YgY291cnNlLgoKWW91ciBkZXNjcmlwdGlvbiBpcyBjb3JyZWN0IGltbyBhbmQgYmV0dGVy LgoKVGhhbmtzLApDaGFvCgo+Cj5KYW4KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=