From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Yang Subject: Re: [Help] Trigger Watchdog when adding an IPI in vcpu_wake Date: Wed, 14 Sep 2016 18:44:17 +0800 Message-ID: <20160914104417.GA25572@linux-gk3p> References: <20160913085437.GA14514@linux-gk3p> <1473766217.6339.103.camel@citrix.com> Reply-To: Wei Yang Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1473766217.6339.103.camel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Dario Faggioli Cc: xuquan8@huawei.com, liuxiaojian6@huawei.com, george.dunlap@eu.citrix.com, xen-devel@lists.xen.org, richard.weiyang@gmail.com, mengxu@cis.upenn.edu, Wei Yang List-Id: xen-devel@lists.xenproject.org T24gVHVlLCBTZXAgMTMsIDIwMTYgYXQgMDE6MzA6MTdQTSArMDIwMCwgRGFyaW8gRmFnZ2lvbGkg d3JvdGU6Cj5bdXNpbmcgeGVuZGV2ZWwgY29ycmVjdCBhZGRyZXNzXQo+Cj5PbiBUdWUsIDIwMTYt MDktMTMgYXQgMTY6NTQgKzA4MDAsIFdlaSBZYW5nIHdyb3RlOgo+PiBPbiBGcmksIDIwMTYtMDkt MDkgYXQgMTc6NDEgKzA4MDAsIFdlaSBZYW5nIHdyb3RlOgo+PiA+wqAKPj4gPiBJJ20gbm90IHN1 cnByaXNlZCBieSB0aGF0LiBZZXQsIEknZCBiZSBpbnRlcmVzdGVkIGluIGhlYXJpbmcgbW9yZQo+ PiA+IGFib3V0IHRoaXMgcHJvZmlsaW5nIHlvdSBoYXZlIGRvbmUgKHRoaW5ncyBsaWtlLCBob3cg eW91IGNhcHR1cmVkCj4+ID4gdGhlIGRhdGEsIHdoYXQgd29ya2xvYWRzIHlvdSBhcmUgZXhhY3Rs eSBjb25zaWRlcmluZywgaG93IHlvdQo+PiA+IGRldGVybWluZWQgd2hhdCBpcyB0aGUgYm90dGxl bmVjaywgZXRjKS4KPj4gTGV0IG1lIHRyeSB0byBleHBsYWluIHRoaXMuCj4+IAo+PiBXb3JrbG9h ZDrCoMKgwqDCoMKgwqDCoMKgwqBhLiBCbHVlIFNjcmVlbiBpbiBXaW5kb3dzIEd1ZXN0cwo+PiAJ CcKgwqBiLiBzb21lIGNsaWVudCB1c2luZyBXaW5kb3dzIHRvIGRvIHNvbWUgdmlkZW8KPj4gcHJv Y2Vzc2luZwo+PiAJCcKgwqDCoMKgwqB3aGljaCBuZWVkIHByZWNpc2UgdGltZXN0YW1wICh3ZSBh cmUgbm90IHN1cmUgdGhlCj4+IGNvcmUKPj4gCQnCoMKgwqDCoMKgcmVhc29uIGJ1dCB3ZSBzZWUg dGhlIHN5c3RlbSBpcyB2ZXJ5IHNsb3cpCj4+Cj5EbyB5b3UgbWluZCBzaGFyaW5nIGp1c3QgYSBi aXQgbW9yZSwgc3VjaCBhczoKPsKgLSBudW1iZXIgb2YgcGNwdXMKPsKgLSBudW1iZXIgb2YgdmNw dXMgb2YgdGhlIHZhcmlvdXMgVk1zCgoxNjAgcGNwdXMKMTYgdmNwdXMgaW4gVk0gYW5kIDggVk1z Cgo+Cj5JIGFsc28gYW0gbm90IHN1cmUgd2hhdCAiYS4gQmx1ZSBzY3JlZW4gaW4gV2luZG93cyBn dWVzdHMiIGFib3ZlCj5tZWFucy4uLiBpcyB0aGVyZSBhIHdvcmtsb2FkIGNhbGxlZCAiQmx1ZSBT Y3JlZW4iPyBPciBpcyBpdCB0aGF0IHlvdQo+YXJlIGhpdHRpbmcgYSBCU09EIGluIHNvbWUgb2Yg eW91ciBndWVzdHMgKHdoaWNoIG9uZXMsIHdoYXQgd2VyZSB0aGV5Cj5kb2luZyk/IE9yIGlzIGl0 IHRoYXQgeW91IF93YW50XyB0byBwcm92b2tlIGEgQlNPRCBvbiBzb21lIG9mIHlvdXIKPmd1ZXN0 cz8gT3IgaXMgdGhhdCBzb21ldGhpbmcgZWxzZT8gOi1QCj4KClllcywgdGhlICJCbHVlIFNjcmVl biIgaXMgd2hhdCB3ZSB3YW50IHRvIG1pbWljIHRoZSBiZWhhdmlvciBmcm9tIGNsaWVudC4KClRo ZSAiQmx1ZSBTY3JlZW4iIHdpbGwgZm9yY2UgdGhlIGh5cGVydmlzb3IgdG8gZG8gbG9hZCBiYWxh bmNlIGluIG15IG1pbmQuCgo+PiBDYXB0dXJlIHRoZSBkYXRhOiBsb2NrIHByb2ZpbGUKPj4gQm90 dGxlbmVjayBDaGVjazogVGhlIHNjaGVkdWxlIGxvY2sgd2FpdCB0aW1lIGlzIHJlYWxseSBoaWdo wqDCoMKgwqDCoMKgCj4+IAo+T2ssIGNvb2wuIEludGVyZXN0aW5nIHRoYXQgbG9jayBwcm9maWxp bmcgd29ya3Mgb24gNC4xISA6LU8KPgo+PiA+IFRoZSBzY2hlZHVsZXIgdHJpZXMgdG8gc2VlIHdo ZXRoZXIgdGhlIHYtPnByb2Nlc3NvciBvZiB0aGUgd2FraW5nCj4+ID4gdmNwdSBjYW4gYmUgcmUt dXNlZCwgYnV0IHRoYXQncyBub3QgYXQgYWxsIGd1YXJhbnRlZWQsIGFuZCBhZ2FpbiwKPj4gPiBv biBhIHZlcnkgbG9hZGVkIHN5c3RlbSwgbm90IGV2ZW4gdGhhdCBsaWtlbHkhCj4+ID4gCj4+IEht bS4uLiBJIG1heSBtaXNzZWQgc29tZXRoaW5nLgo+PiAKPj4gVG9vayB5b3VyIGFzc3VtcHRpb24g YmVsb3cgZm9yIGV4YW1wbGUuwqAKPj4gSW4gbXkgbWluZCwgdGhlIHByb2Nlc3MgbG9va3MgbGlr ZSB0aGlzOgo+PiAKPj4gwqDCoMKgwqBjc2NoZWRfdmNwdV93YWtlKCkKPj4gwqDCoMKgwqDCoMKg wqDCoF9fcnVucV9pbnNlcnQoKSzCoMKgaW5zZXJ0IHRoZSB2Y3B1IGluIHBjcHUncyA2IHJ1bnEK Pj4gwqDCoMKgwqDCoMKgwqDCoF9fcnVucV90aWNrbGUoKSzCoMKgcmFpc2UgU0NIRURVTEVfU09G VElSUSBvbiBwY3B1IDYgb3Igb3RoZXIKPj4gKDEpCj4+IMKgwqDCoMKgCj5XZWxsLCB5ZXMuIE1v cmUgcHJlY2lzZWx5LCBhdCBsZWFzdCBpbiBjdXJyZW50IHN0YWdpbmcsCj5TQ0hFRFVMRV9TT0ZU SVJRIGlzIHJhaXNlZCBmb3IgcGNwdSA2Ogo+wqAtIGlmIHBjcHUgNiBpcyBpZGxlLCBvcgo+wqAt IGlmIHBjcHUgNiBpcyBub3QgaWRsZSBidXQgdGhlcmUgYWN0dWFsbHkgaXNuJ3QgYW55IGlkbGUg dmNwdSwgYW5kCj7CoCDCoHRoZSB3YWtpbmcgdmNwdSBpcyBoaWdoZXIgaW4gcHJpb3JpdHkgdGhh biB3aGF0IGlzIHJ1bm5pbmcgb24gcGNwdSA2Cj4KPj4gwqDCoMKgwqBfX2RvX3NvZnRpcnEoKQo+ PiDCoMKgwqDCoMKgwqDCoMKgc2NoZWR1bGUoKQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj c2NoZWRfc2NoZWR1bGUoKSzCoMKgZm9yIHBjcHUgNiwgaXQgbWF5IHdha2UgdXAgZDJ2MiBiYXNl ZAo+PiBvbiBpdCdzCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwcmlvcml0eQo+Pgo+WWVzLCBidXQgaXQgaXMgcGNwdSA2 IHRoYXQgd2lsbCBydW4gY3NjaGVkX3NjaGVkdWxlKCkgb25seSBpZiB0aGUKPmNvbmRpdGlvbnMg bWVudGlvbmVkIGFib3ZlIGFyZSBtZXQuIElmIG5vdCwgaXQgd2lsbCBiZSBzb21lIG90aGVyIHBj cHUKPnRoYXQgd2lsbCBkbyBzbyAob3Igbm9uZSEpLgo+Cj5CdXQgSSBqdXN0IHJlYWxpemVkIHRo YXQgdGhlIGZhY3QgdGhhdCB5b3UgYXJlIGFjdHVhbGx5IHdvcmtpbmcgb24gNC4xCj5pcyBnb2lu ZyB0byBiZSBhbiBpc3N1ZS4gSW4gZmFjdCwgdGhlIGNvZGUgdGhhdCBpdCBpcyBub3cgaW4gWGVu IGhhcwo+Y2hhbmdlZCAqKmEgbG90Kiogc2luY2UgNC4xLiBJbiBmYWN0LCB5b3UncmUgbWlzc2lu ZyBhbGwgdGhlIHNvZnQtCj5hZmZpbml0eSB3b3JrICh3aGljaCB5b3UgbWF5IG9yIG1heSBub3Qg ZmluZCB1c2VmdWwpIGJ1dCBhbHNvCj5pbXByb3ZlbWVudHMgYW5kIGJ1Z2ZpeGluZy4KPgoKVGhh dCdzIHRydWUuLi4KCj5JJ2xsIGhhdmUgYSBxdWljayBsb29rIGF0IGhvdyBfX3J1bnFfdGlja2xl KCkgbG9va3MgbGlrZSBpbiBYZW4gNC4xLAo+YnV0IHRoZXJlJ3MgdmVyeSBmZXcgY2hhbmNlcyBJ J2xsIGJlIGF2YWlsYWJsZSB0byBwcm92aWRlIGRldGFpbGVkCj5yZXZpZXcsIGFkdmljZSwgdGVz dGluZywgZXRjLiwgb24gc3VjaCBhbiBvbGQgY29kZWJhc2UuIDotKAo+Cj4+IEJ5IGxvb2tpbmcg YXQgdGhlIGNvZGUsIHdoYXQgSSBtaXNzZWQgbWF5IGJlIGluIF9fcnVucV90aWNrbGUoKSwKPj4g d2hpY2ggaW4gY2FzZQo+PiB0aGVyZSBhcmUgaWRsZSBwY3B1LCBzY2hlZHVsZV9zb2Z0aXJxIGlz IGFsc28gcmFpc2VkIG9uIHRoZW0uIEJ5Cj4+IGRvaW5nIHNvLAo+PiB0aG9zZSBpZGxlIHBjcHVz IHdvdWxkIHN0ZWFsIG90aGVyIGJ1c3kgdGFza3MgYW5kIG1heSBpbiBjaGFuY2UgZ2V0Cj4+IGQy djI/Cj4+IAo+WWVzLCBpdCBsb29rcyBsaWtlLCBpbiBYZW4gNC4xLCB0aGlzIGlzIG1vcmUgb3Ig bGVzcyB3aGF0IGhhcHBlbnMuIFRoZQo+aWRlYSBpcyB0byBhbHdheXMgdGlja2xlIHBjcHUgNiwg aWYgdGhlIHByaW9yaXR5IG9mIHRoZSB3YWtpbmcgdmNwdSBpcwo+aGlnaGVyIHRoYW4gd2hhdCBp cyBydW5uaW5nIHRoZXJlLsKgCj4KCkhtbS4uLiBpbiBjYXNlIHRoZXJlIGFyZSBpZGxlIHBjcHVz IGFuZCB0aGUgcHJpb3JpdHkgb2YgdGhlIHdha2luZyB2Y3B1IGlzCmhpZ2hlciB0aGFuIHdoYXQg aXMgcnVubmluZyBvbiBwY3B1IDYsIHdvdWxkIHBjcHUgNiBoYXZlIG1vcmUgY2hhbmNlIHRvIHJ1 biBpdD8Kb3Igb3RoZXIgaWRsZSBwY3VwIHdvdWxkIHN0ZWFsIGl0IGZyb20gcGNwdTY/IG9yIHRo ZXkgaGF2ZSBlcXVhbCBjaGFuY2U/Cgo+SWYgcGNwdSA2IHdhcyBub3QgaWRsZSwgd2UgYWxzbyB0 aWNrbGUgb25lIG9yIG1vcmUgaWRsZSBwY3B1cyBzbyB0aGF0Ogo+wqAtIGlmIHRoZSB3YWtpbmcg dmNwdSBwcmVlbXB0ZWQgd2hhdCB3YXMgcnVubmluZyBvbiBwY3B1IDYsIGFuIGlkbGVyCj7CoCDC oGNhbiBwaWNrLXVwICgic3RlYWwiKSBzdWNoIHByZWVtcHRlZCB2Y3B1IGFuZCBydW4gaXQ7Cj7C oC0gaWYgdGhlIHdha2luZyB2Y3B1IGVuZGVkIHVwIGluIHRoZSBydW5xdWV1ZSwgYW4gaWRsZXIg Y2FuIHN0ZWFsIGl0Cj4KCkhtbS4uLiBJIGRvbid0IGdldCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu IHRoZXNlIHR3byBjYXNlcy4KCkxvb2tzIGJvdGggYXJlIGFuIGlkbGVyIHN0ZWFsIHRoZSB2Y3B1 LgoKPj4gQlRXLCBpZiB0aGUgc3lzdGVtIGlzIGluIGhlYXZ5IGxvYWQsIGhvdyBtdWNoIGNoYW5j ZSB3b3VsZCB3ZSBoYXZlCj4+IGlkbGUgcGNwdT8KPj4gCj5JdCdzIG5vdCB2ZXJ5IGxpa2VseSB0 aGF0IHRoZXJlIHdpbGwgYmUgaWRsZSBwY3B1cyBpbiBhIHZlcnkgYnVzeQo+c3lzdGVtLCBJIGFn cmVlLgo+Cj4+ID4gPiBXZSBjYW4gZGl2aWRlIHRoaXMgaW4gdGhyZWUgc3RlcHM6Cj4+ID4gPiBh KSBTZW5kIElQSSB0byB0aGUgdGFyZ2V0IENQVSBhbmQgdGVsbCBpdCB3aGljaCB2Y3B1IHdlIHdh bnQgaXQKPj4gPiA+IHRvwqAKPj4gPiA+IHdha2UgdXAuCj4+ID4gPiBiKSBUaGUgaW50ZXJydXB0 IGhhbmRsZXIgb24gdGFyZ2V0IGNwdSBpbnNlcnQgdmNwdSB0byBhIHBlcmNwdQo+PiA+ID4gcXVl dWXCoAo+PiA+ID4gYW5kIHJhaXNlCj4+ID4gPiDCoMKgwqBzb2Z0aXJxLgo+PiA+ID4gYykgc29m dGlycSB3aWxsIGRlcXVldWUgdGhlIHZjcHUgYW5kIHdha2UgaXQgdXAuCj4+ID4gPiAKPj4gPiBJ J20gbm90IHN1cmUgSSBzZWUgaG93IHlvdSB0aGluayB0aGlzIHdvdWxkIGltcHJvdmUgdGhlIHNp dHVhdGlvbi4KPj4gPiAKPj4gPiBTbywgcXVpY2tseSwgcmlnaHQgbm93Ogo+PiA+IAo+PiA+IC0g bGV0J3Mgc2F5IHZjcHUgMiBvZiBkb21haW4gMiAoZnJvbSBub3cgZDJ2MikgaXMgd2FraW5nIHVw Cj4+ID4gLSBsZXQncyBhc3N1bWUgZDJ2Mi0+cHJvY2Vzc29yID0gNgo+PiA+IC0gbGV0J3MgYXNz dW1lIHRoZSB3YWtldXAgaXMgaGFwcGVuaW5nIG9uIHBjcHUgNAo+PiA+IAo+PiA+IFJpZ2h0IG5v dzoKPj4gPiAKPj4gPiAtIG9uIHBjcHUgNCwgdmNwdV93YWtlKGQydjIpIHRha2VzIHRoZSBzY2hl ZHVsZXIgbG9jayBvZiBkMnYyLAo+PiA+IMKgIHdoaWNoIGlzIHRoZSBydW5xdWV1ZSBsb2NrIG9m IHBjcHUgNiAoaW4gQ3JlZGl0MSwgdGhlcmUgaXMgMQo+PiA+IMKgIHJ1bnF1ZXVlIHBlciBwY3B1 LCBhbmQgbG9ja3MgYXJlIHBlci1jcHUgYWxyZWFkeSkKPj4gPiAtIGluIGNzY2hlZF92Y3B1X3dh a2UoZDJ2MiksIGQydjIgaXMgaW5zZXJ0ZWQgaW4gcGNwdSdzIDYgcnVucXVldWUKPj4gPiAtIHN0 aWxsIGV4ZWN1dGluZyBvbiBwY3B1IDQsIF9fcnVucV90aWNrbGUoKSBpcyBjYWxsZWQsIGFuZCBp dAo+PiA+IMKgIGRldGVybWluZXMgb24gd2hpY2ggcGNwdSBkMnYyIHNob3VsZCBydW4KPj4gPiAt IGl0IHJhaXNlcyB0aGUgU0NIRURVTEVfU09GVElSUSBmb3Igc3VjaCBwY3B1LiBMZXQncyBsb29r IGF0IHRoZQo+PiA+IMKgIGZvbGxvd2luZyB0d28gY2FzZXM6Cj4+ID4gwqDCoMKgYSkgaWYgaXQg d2FzIGRldGVybWluZWQgdGhhdCBkMnYyIHNob3VsZCBydW4gb24gcGNwdSA2Ogo+PiA+IMKgwqDC oMKgwqDCoMKgLSBpbiBhIChsaXR0bGUsIGhvcGVmdWxseSkgd2hpbGUsIHBjcHUgNiB3aWxsIHNj aGVkdWxlCj4+ID4gwqDCoMKgwqDCoMKgwqAtIGl0IHRha2VzIGl0cyBvd24gcnVucXVldWUgbG9j awo+PiA+IMKgwqDCoMKgwqDCoMKgLSBpdCBmaW5kcyBkMnYyIGluIHRoZXJlLCBhbmQgcnVucyBp dAo+PiBFdmVuIGluIHRoaXMgY2FzZSwgaXQgZGVwZW5kcyBvbiB0aGUgcHJpb3JpdHkgb2YgZDJ2 MiB3aGV0aGVyIGl0Cj4+IHdvdWxkIGJlIHJ1bgo+PiBub3cuIFJpZ2h0Pwo+PiAKPlllcy4gQnV0 IGJvdGggaW4gNC4xIGFuZCBpbiBjdXJyZW50IHN0YWdpbmcsIHdlIG9ubHkgcmFpc2UKPlNDSEVE VUxFX1NPRlRJUlEgb24gcGNwdSA2LCBpZiBhbmQgb25seSBpZiB0aGUgcHJpb3JpdHkgb2YgdGhl IHdha2luZwo+dmNwdSBpcyBoaWdoZXIgYW5kIGl0IHNob3VsZCBwcmVlbXB0IHRoZSBjdXJyZW50 bHkgcnVubmluZyB2Y3B1Lgo+CgpPaCwgeW91IGFyZSByaWdodC4gSSBkaWRuJ3QgY2F0Y2ggdGhp cyBlaXRoZXIuCgpUaGlzIG1lYW5zIGluIGNhc2UgCmEpIHRoZSBwcmlvcml0eSBpcyBsb3dlciB0 aGFuIGN1cnJlbnQgb25lIApiKSBubyBpZGxlciBpbiBzeXN0ZW0KClRoZSB2Y3B1IHdpbGwgc2l0 IHF1aWV0bHkgaW4gdGhlIHJ1bnEgYW5kIHdhaXRpbmcgZm9yIHRoZSBzY2hlZHVsZSBuZXh0IHRp bWUuCgo+PiA+IMKgwqDCoGIpIGlmIGl0IHdhcyBkZXRlcm1pbmVkIHRoYXQgZDJ2MiBzaG91bGQg cnVuIG9uLCBzYXksIHBjcHUgOToKPj4gPiDCoMKgwqDCoMKgwqDCoC0gaW4gYSAobGl0dGxlLCBo b3BlZnVsbHkpIHdoaWxlLCBwY3B1IDkgd2lsbCBzY2hlZHVsZQo+PiA+IMKgwqDCoMKgwqDCoMKg LSBpdCB0YWtlcyBpdHMgb3duIHJ1bnF1ZXVlIGxvY2sKPj4gPiDCoMKgwqDCoMKgwqDCoC0gaWYg aXQgaGFzIG5vdGhpbmcgaW4gaXRzIHJ1bnF1ZXVlIChsaWtlbHksIGlmCj4+ID4gwqDCoMKgwqDC oMKgwqDCoMKgX19ydW5xX3RpY2tsZSgpIGNob3NlIGl0LCBidXQgbm90IG5lY2Vzc2FyaWx5IGFu ZCBhbHdheXMKPj4gPiDCoMKgwqDCoMKgwqDCoMKgwqB0cnVlLCBlc3BlY2lhbGx5IHVuZGVyIGhp Z2ggbG9hZCksIGl0IGxvb2tzIGFyb3VuZCB0bwo+PiA+IMKgwqDCoMKgwqDCoMKgwqDCoHNlZSBp ZiBvdGhlciBwY3B1cyBoYXZlIGFueSB2Y3B1IHRoYXQgaXQgY2FuIGV4ZWN1dGUKPj4gPiDCoMKg wqDCoMKgwqDCoC0gaXQgd2lsbCB0cnkgdG8gdGFrZSB0aGUgbG9ja3Mgb2YgdGhlIHZhcmlvdXMg cGNwdSdzCj4+ID4gwqDCoMKgwqDCoMKgwqDCoMKgcnVucXVldWVzIGl0IGNvbWVzIGFjcm9zcwo+ PiA+IMKgwqDCoMKgwqDCoMKgLSBpZiBpdCBtYW5hZ2VzIHRvIHRha2UgdGhlIGxvY2sgb2YgcGNw dSdzIDYgcnVucXVldWUsIGl0Cj4+ID4gwqDCoMKgwqDCoMKgwqDCoMKgc2VlcyBkMnYyIGluIGl0 LCBzdGVhbCBpdCBhbmQgcnVuIGl0Lgo+PiBPaCwgbXkgdW5kZXJzdGFuZGluZyBtYXRjaGVzIHlv dXJzIDotKQo+PiAKPj4gQllXLCB3ZSBhbHNvIGZvdW5kIGluIGNzY2hlZF9sb2FkX2JhbGFuY2Uo KSB3aWxsIGhvbGQgdGhlIHNjaGVkdWxlCj4+IGxvY2ssIGJ1dAo+PiBub3QgZm91bmQgYSBwcm9w ZXIgdmNwdSB0byBzdGVhbC4gTWF5YmUgdGhpcyB3b3VsZCBiZSBhIHBvdGVudGlhbAo+PiBvcHRp bWl6YXRpb24KPj4gcG9pbnQuCj4+IAo+TW1tLi4uIEkgYWN0dWFsbHkgZG9uJ3QgdW5kZXJzdGFu ZCB3aGF0IHlvdSBtZWFuIGhlcmUuLi4gd2hhdCBpcyB0aGUKPnBvc3NpYmxlIG9wdGltaXphdGlv bj8KPgo+PiA+IFdpdGggeW91ciBtb2RpZmljYXRpb25zLCBBRkFJQ1Q6Cj4+ID4gCj4+ID4gLSBv biBwY3B1IDQsIG5vdGlmeV9yZW1vdGVfdmNwdV93YWtlKGQydjIpIHRha2VzIHRoZSB3YWtlX3Zj cHVfbG9jawo+PiA+IMKgIG9mIHBjcHUgNiBhbmQgcXVldWUgZDJ2MiBpbiBwY3B1J3MgNiBkZWZl cnJlZCB3YWtldXAgbGlzdAo+PiA+IC0gcG9rZSBwY3B1IDYgd2l0aCBhbiBJUEkKPj4gPiAtIGlu IGEgKGxpdHRsZSwgaG9wZWZ1bGx5KSB3aGlsZSwgcGNwdSA2IHJlYWN0IHRvIHRoZSBJUEkgYW5k LAo+PiA+IMKgIF9JX3RoaW5rXywgY2FsbCB2Y3B1X3dha2UoZDJ2MikgPyBbKl0KPj4gWW91IGFy ZSBhbG1vc3QgcmlnaHQuIEhlcmUgaW4gdGhlIGludGVycnVwdCBoYW5kbGVyLCBpdCBkb2VzIHR3 bwo+PiB0aGluZ3M6Cj4+IDEuIGVjaG8gYmFjayBub3RpZnlfcmVtb3RlX3ZjcHVfd2FrZSgpIGl0 IGZpbmlzaGVzIHRoZSBqb2IKPj4gMi4gcmFpc2UgYSBzZXBhcmF0ZSBzb2Z0aXJxLCB3aGljaCB3 aWxsIGNhbGwgdmNwdV93YWtlKGQydjIpCj4+IAo+PiA+IAo+PiA+IC0gb24gcGNwdSA2LCB2Y3B1 X3dha2UoZDJ2MikgdGFrZXMgaXRzIG93biBydW5xdWV1ZSBsb2NrCj4+ID4gLSBpbiBjc2NoZWRf dmNwdV93YWtlKGQydjIpLCBkMnYyIGlzIGluc2VydGVkIGluIHBjcHUncyA2IHJ1bnF1ZXVlCj4+ ID4gLSBvbiBwY3B1IDYsIF9fcnVucV90aWNrbGUoKSBpcyBjYWxsZWQsIGFuZCBpdCBkZXRlcm1p bmVzIG9uIHdoaWNoCj4+ID4gwqAgcGNwdSBkMnYyIHNob3VsZCBydW4KPj4gQXQgdGhpcyBwbGFj ZSwgdGhlIGJlaGF2aW9yIG9mIF9fcnVuX3RpY2tsZSgpIGlzIHdoYXQgSSBtZW50aW9uZWQKPj4g YWJvdmUuIFJhaXNlCj4+IHNvZnRpcnEgb24gcGNwdTYgYW5kIGlkbGUgcGNwdXMuIFdobyBpcyBm YXN0ZXIsIHdobyBnZXQgZDJ2Mi4KPj4KPlNvcnQgb2YsIHllcy4gSW4gZ2VuZXJhbCwgeW91IGNh biBleHBlY3QgcGNwdSA2IGdvaW5nIHRocm91Z2gKPmNzY2hlZF9zY2hlZHVsZSgpLCBhbmQgaGVu Y2Ugc2V0dGluZyBkMnYyIHRvIHJ1biwgdG8gYmUgZmFzdGVyIHRoYXQKPlNDSEVEVUxFX1NPRklS USBiZWluZyBub3RpZmllZCB0byBzb21lb25lIHJlbW90ZSwgYW5kIGl0IHNjaGVkdWxpbmcgYW5k Cj5nZXR0aW5nIHRvIHdvcmsgc3RlYWxpbmcgZnJvbSBwY3B1IDYncyBydW5xdWV1ZS4KPgo+SG93 ZXZlciwgdGhhdCBpcyB0aGUgY2FzZSBvbmx5IGlmIGQydjIgaGFkIGhpZ2hlciBwcmlvcml0eSB0 aGFuIHdoYXQgaXMKPnJ1bm5pbmcgb24gcGNwdSA2LiBJZiBpdCBkb2VzIG5vdCwgeW91Ogo+wqAt IF9kb24ndF8gdGlja2xlIHBjcHUgNgo+wqAtIHRpY2tsZSBvbmUgb3IgbW9yZSBpZGxlcnMsIGlm IGFueS4KPgo+U28sIGFnYWluLCBpdCdzIG5vdCB0aGF0IHlvdSBhbHdheXMgd2FrZSBhbmQgcnVu IGl0IG9uIHBjcHUgNgo+CgpJIHNlZSB3aGF0IHlvdSBtZWFuIDotKQoKU28gSSBhbSBjdXJpb3Vz IGFib3V0IHdoeSB3ZSBhZGQgdGhpcyBpbiBwY3B1J3MgNiBxdWV1ZSwgd2hlbiB3ZSBrbm93IHRo ZQpwcmlvcml0eSBpcyBsb3cgaW4gX19ydW5xX3RpY2tsZSgpIGFuZCB3b24ndCB0aWNrbGUgdGhh dC4gQW5kIHdlIGFyZSBzdXJlCnNvbWVvbmUgaW4gdGhlIGZ1dHVyZSB3aWxsIGdyYWIgcGNwdSdz IDYgc2NoZWR1bGUgbG9jayBhbmQgdGFrZSBpdC4KCk9yIGluIHRoaXMgY2FzZSAtLSB3aGVuIHRo ZXJlIGFyZSBpZGxlcnMgYW5kIHZjcHUncyBwcmlvcml0eSBpcyBoaWdoZXIsCmluc3RlYWQgb2Yg bGV0IHBjcHUgNiB0byB3YWtlIHRoaXMsIGJ1dCBsZXQgYW4gaWRsZXIgdG8gdGFrZSBpdD8gQXNr IHNvbWVvbmUKd2hvIGlzIGZyZWUgdG8gaGVscCBhIGJ1c3kgb25lLgoKPj4gPiAtIGl0IHJhaXNl cyB0aGUgU0NIRURVTEVfU09GVElSUSBmb3Igc3VjaCBwY3B1LiBMZXQncyBsb29rIGF0IHRoZQo+ PiA+IMKgIGZvbGxvd2luZyB0d28gY2FzZXM6Cj4+ID4gwqDCoMKgYSkgaWYgaXQgd2FzIGRldGVy bWluZWQgdGhhdCBkMnYyIHNob3VsZCBydW4gb24gcGNwdSA2Cj4+ID4gwqDCoMKgwqDCoMKgKGku ZS4sIFNDSEVEVUxFX1NPRlRJUlEgd2FzIHJhaXNlZCBieSBwY3B1IDYgb24gaXRzZWxmKToKPj4g PiDCoMKgwqDCoMKgwqDCoC0gYXQgdGhlIGZpcnN0IHNvZnRpcnEgY2hlY2ssIHBjcHUgNiB3aWxs IHNjaGVkdWxlCj4+ID4gwqDCoMKgwqDCoMKgwqAtIGl0IHRha2VzIGl0cyBvd24gcnVucXVldWUg bG9jawo+PiA+IMKgwqDCoMKgwqDCoMKgLSBpdCBmaW5kcyBkMnYyIGluIHRoZXJlLCBhbmQgcnVu cyBpdAo+PiA+IMKgwqDCoGIpIGlmIGl0IHdhcyBkZXRlcm1pbmVkIHRoYXQgZDJ2MiBzaG91bGQg cnVuIG9uLCBzYXksIHBjcHUgOToKPj4gPiDCoMKgwqDCoMKgwqDCoC0gaW4gYSAobGl0dGxlLCBo b3BlZnVsbHkpIHdoaWxlLCBwY3B1IDkgd2lsbCBzY2hlZHVsZQo+PiA+IMKgwqDCoMKgwqDCoMKg LSBpdCB0YWtlcyBpdHMgb3duIHJ1bnF1ZXVlIGxvY2sKPj4gPiDCoMKgwqDCoMKgwqDCoC0gaWYg aXQgaGFzIG5vdGhpbmcgaW4gaXRzIHJ1bnF1ZXVlIChsaWtlbHksIGlmCj4+ID4gwqDCoMKgwqDC oMKgwqDCoMKgX19ydW5xX3RpY2tsZSgpIGNob3NlIGl0LCBidXQgbm90IG5lY2Vzc2FyaWx5IGFu ZCBhbHdheXMKPj4gPiDCoMKgwqDCoMKgwqDCoMKgwqB0cnVlLCBlc3BlY2lhbGx5IHVuZGVyIGhp Z2ggbG9hZCksIGl0IGxvb2tzIGFyb3VuZCB0bwo+PiA+IMKgwqDCoMKgwqDCoMKgwqDCoHNlZSBp ZiBvdGhlciBwY3B1cyBoYXZlIGFueSB2Y3B1IHRoYXQgaXQgY2FuIGV4ZWN1dGUKPj4gPiDCoMKg wqDCoMKgwqDCoC0gaXQgd2lsbCB0cnkgdG8gdGFrZSB0aGUgbG9ja3Mgb2YgdGhlIHZhcmlvdXMg cGNwdSdzCj4+ID4gwqDCoMKgwqDCoMKgwqDCoMKgcnVucXVldWVzIGl0IGNvbWVzIGFjcm9zcwo+ PiA+IMKgwqDCoMKgwqDCoMKgLSBpZiBpdCBtYW5hZ2VzIHRvIHRha2UgdGhlIGxvY2sgb2YgcGNw dSdzIDYgcnVucXVldWUsIGl0Cj4+ID4gwqDCoMKgwqDCoMKgwqDCoMKgc2VlcyBkMnYyIGluIGl0 LCBzdGVhbCBpdCBhbmQgcnVuIGl0Lgo+PiA+IAo+PiA+IFsqXSBJIGRvbid0IHNlZSBpbiB0aGUg Y29kZSB5b3Ugc2hhcmVkIHdoYXQgaGFwcGVucyBpbiByZWFjdGlvbiB0bwo+PiA+IHRoZSBJUEkg V0FLRVVQX1RBU0tfVkVDVE9SLCBzbyBJJ20gZ29pbmcgdG8gYXNzdW1lIHRoYXQgaXQgYWN0dWFs bHkKPj4gPiBjYWxscyB2Y3B1X3dha2UoKQo+PiA+IAo+PiA+IFNvLCBiYXNpY2FsbHksIGl0IGxv b2tzIHRvIG1lIHRoYXQgeW91J3JlIGFkZGluZyBhIGxldmVsIG9mCj4+ID4gaW5kaXJlY3Rpb24s IEknbSBub3Qgc3VyZSBmb3Igd2hhdCBiZW5lZml0Lgo+Cj4+IEluIG15IG1pbmQsIHdlIGFyZSB0 cnlpbmcgdG8gcmVkdWNlIHRoZSBjb250ZW50aW9uIG9uIHNjaGVkdWxlIGxvY2sKPj4gZnJvbSB0 d28KPj4gYXNwZWN0czoKPj4gMS4gZm9yIHRob3NlIHZjcHVzIHdvdWxkIHJ1biBvbiBvdGhlciBw Y3B1LCBpdCB3aWxsIHRha2UKPj4gd2FrZV92Y3B1X2xvY2sKPj4gwqDCoMKgaW5zdGVhZCBvZiBz Y2hlZHVsZSBsb2NrCj4+Cj5JIGRvbid0IHNlZSBob3cgeW91IGNhbiBzYXkgImluc3RlYWQiLiBJ dCBsb29rcyB0byBtZSB0aGF0LCBmb3IgdGhvc2UKPnZjcHVzIHdoYXQgd291bGQgcnVuIG9uIG90 aGVyIHBjcHUsIHdlIG5lZWQgdG8gdGFrZSB3YWtlX3ZjcHVfbG9jawo+X2luX2FkZGl0aW9uXyB0 byB0aGUgcnVucXVldWUgbG9jay4KPgo+PiAyLiBhbmQgaW4gdmNwdV93YWtlKCksIGl0IHdpbGwg bm90IGdyYWIgYSByZW1vdGUgc2NoZWR1bGUgbG9jaywgd2hpY2gKPj4gYWxzbwo+PiDCoMKgwqBy ZWR1Y2UgdGhlIGNhY2hlIGNvaGVyZW5jeSBiZXR3ZWVuIHBjcHVzCj4+IAo+UmlnaHQuIFRha2lu ZyB0aGUgd2FrZV92Y3B1X2xvY2sgb2YgcGNwdSA2IGZyb20gcGNwdSA0IGlzIHRha2luZyBhCj5y ZW1vdGUgbG9jaywgdGhvdWdoLgoKSG1tLi4uIHlvdSBhcmUgcmlnaHQuCgo+Cj4+ID4gSW4gZmFj dCwgaW4gdGhlIGJlc3QgY2FzZSAoaS5lLiwgZDJ2MiB3aWxsIGFjdHVhbGx5IGJlIHJ1biBvbiBp dHMKPj4gPiB2LT5wcm9jZXNzb3IpLCBpbiB0aGUgb3JpZ2luYWwgY29kZSB0aGVyZSBpczoKPj4g PiAtIDEgSVBJIChTQ0hFRFVMRV9TT0ZUSVJRKSBmcm9tIHBjcHUgNCB0byBwY3B1IDYuCj4+ID4g SW4geW91ciBjYXNlLCB0aGVyZSBpczoKPj4gPiAtIDEgSVBJIChTQ0hFRFVMRV9TT0ZUSVJRKSBm cm9tIHBjcHUgNCB0byBwY3B1IDYKPj4gPiAtIDEgc29mdGlycSAoYWdhaW4gU0NIRURVTEVfU09G VElSUSkgdG8gc2VsZiBvbiBwY3B1IDYuCj4+ID4gCj4+IE91ciBpZGVhIG1heSBsb29rcyBsaWtl IHRoaXM6Cj4+IMKgLSAxIElQSSAoV0FLRVVQX1RBU0tfVkVDVE9SKSBmcm9tIHBjcHUgNCB0byBw Y3B1IDYKPj4gwqAtIDEgc29mdGlycSAoU0NIRURVTEVfV0FLRVVQKSB0byBzZWxmIG9uIHBjcHUg NiB0byBxdWV1ZSB0aGUgdmNwdS4KPj4gwqAtIDEgc29mdGlycSAoU0NIRURVTEVfU09GVElSUSkg dG8gc2VsZiBvbiBwY3B1IDYuCj4+IAo+U28sIGl0J3MgZXZlbiB3b3JzZSB0aGFuIGhvdyBJIGlt YWdpbmVkISA6LVAKPgo+PiA+IEFsc28sIGFzIGZhciBhcyBsb2NraW5nIHdpdGhpbiB0aGUgd2Fr ZXVwIHBhdGggaXMgY29uY2VybmVkLCBpbiB0aGUKPj4gPiBvcmlnaW5hbCBjb2RlOgo+PiA+IC0g dGhlIHJ1bnF1ZXVlIGxvY2sgb2YgcGNwdSA2IGlzIGhlbGQgZm9yIHRoZSB0aW1lIG9mIHZjcHVf d2FrZSgpCj4+ID4gwqAgKGkuZS4sIGZvciB0aGUgdGltZSBvZiBfX3J1bnFfaW5zZXJ0KCkgYW5k IF9fcnVucV90aWNrbGUoKS4KPj4gPiBJbiB5b3VyIGNhc2U6Cj4+ID4gLSB0aGUgd2FrZV92Y3B1 X2xvY2sgb2YgcGNwdSA2IGlzIGhlbGQgZHVyaW5nIHF1ZXVlaW5nIG9mIHRoZQo+PiA+IMKgIGRl ZmVycmVkIHdha2V1cAo+PiA+IC0gdGhlIHJ1bnF1ZXVlIGxvY2sgb2YgcGNwdSA2IGlzIGhlbGQg Zm9yIHRoZSB0aW1lIG9mIHZjcHVfd2FrZSgpCj4+ID4gCj4+IFRoZSB3YWtlX3ZjcHVfbG9jayBp cyBob2xkIGluIHRoZSBmaXJzdCBzdGVwIGluIGFib3ZlLgo+PiBUaGUgcnVucXVldWUgbG9jayhJ IHRoaW5rIHlvdSBtZWFuIHRoZSBzY2hlZHVsZSBsb2NrPykgd29uJ3QgYmUgdGFrZW4KPj4gaW4g dGhpcwo+PiBjYXNlLgo+PiAKPkl0IHdpbGwgYmUgdGFrZW4sIGZvciBleGVjdXRpbmcgdmNwdV93 YWtlKCkuIEZyb20geW91ciBvd24gZGVzY3JpcHRpb24KPm9mIHRoZSBtZWNoYW5pc20gYWJvdmU6 Cj4KPiJPdXIgaWRlYSBtYXkgbG9va3MgbGlrZSB0aGlzOgo+wqAgwqAxKSAxIElQSSAoV0FLRVVQ X1RBU0tfVkVDVE9SKSBmcm9tIHBjcHUgNCB0byBwY3B1IDYKPsKgIMKgMikgMSBzb2Z0aXJxIChT Q0hFRFVMRV9XQUtFVVApIHRvIHNlbGYgb24gcGNwdSA2IHRvIHF1ZXVlIHRoZQo+wqAgwqAgwqAg dmNwdS4KPsKgIMKgMykgMSBzb2Z0aXJxIChTQ0hFRFVMRV9TT0ZUSVJRKSB0byBzZWxmIG9uIHBj cHUgNi4iCj4KPjEpIHJ1bnMgb24gcGNwdSA0IGFuZCB0YWtlcyBwY3B1J3MgNiB3YWtlX3ZjcHVf bG9jawo+MikgcnVucyBvbiBwY3B1IDYgYW5kIHRha2VzIHBjcHUnNiA2IHJ1bnF1ZXVlIGxvY2ss IGZvciB2Y3B1X3dha2UoKQo+MykgcnVucyBvbiBwY3B1IDYgYW5kIHRha2VzIHBjcHUncyA2IHJ1 bnF1ZXVlIGxvY2ssIGZvcgo+wqAgwqBjc2NoZWRfc2NoZWR1bGUoKQo+CgpPaCwgeW91IGFyZSBy aWdodC4KCldlIHRyeSB0byBsZXQgdGhlIHBjcHUncyA2IHNjaGVkdWxlIGxvY2sganVzdCBiZSBn cmFiYmVkIGJ5IHBjcHUgNiwgd2hpbGUKbG9va3MgdGhlIHdha2VfdmNwdV9sb2NrIGlzIGdyYWJi ZWQgYnkgb3RoZXJzLgoKSSBhbSB0aGlua2luZyBvdXIgY2hhbmdlIG1heSBiZW5lZml0IGxpa2Ug dGhpcyAuCgpUaGUgc2l0dWF0aW9uIGlzOgoqIHZjcHUncyBwcmlvcml0eSBpcyBoaWdoZXIKKiBw Y3B1IDkgaXMgaWRsZQoqIHBjcHUgNiBhbmQgcGNwdSA5IGFyZSByYWlzZWQgU0NIRURVTEVfU09G VElSUQoKQXQgdGhpcyBtb21lbnQgcGNwdSA0IGlzIGhvbGRpbmcgcGNwdSA2IHJ1bnF1ZXVlIGxv Y2ssIG5laXRoZXIgcGNwdSA2Cm5vciBwY3B1IDkgY291bGQgZG8gdGhlaXIgam9iIHVudGlsIHBj cHUgNCByZWxlYXNlIHBjcHUgNiBydW5xdWV1ZSBsb2NrLgoKV2hpbGUgaW4gb3VyIGNhc2UsIHBj cHUgNCBkb2Vzbid0IGhvbGQgdGhlIHJ1bnF1ZXVlIGxvY2ssIHNvIHBjcHUgNiBhbmQgcGNwdSA5 CmNvdWxkIGRvIHRoZWlyIGpvYiBpbW1lZGlhdGVseS4gQWggSSBrbm93LCB2ZXJ5IGNvcm5lciwg bm90IHN1cmUgYWJvdXQgdGhlCmVmZmVjdC4KCkJUVywgSSBzdWRkZW5seSBmb3VuZCBzb2Z0aXJx IGlzIGltcGxlbWVudGVkIGFzIGFuIElQSS4gU28gSSBhbSB0aGlua2luZwp3aGV0aGVyIGl0IGlz IHNhdmUgdG8gcmFpc2Ugc29mdGlycSB0byBpdHNlbGY/IFNpbmNlIGl0IGxvb2tzIHdlIGFscmVh ZHkgaG9sZAp0aGUgcnVucXVldWUgbG9jay4gT3IgYmVjYXVzZSB3ZSBoYXZlIHR1cm5lZCB0aGUg aXJxIG9mZiBpbiB2Y3B1X3dha2UoKT8KCj4+ID4gCj4+ID4gKGkuZS4sIGZvciB0aGUgdGltZSBv ZiBfX3J1bnFfaW5zZXJ0KCkgYW5kIF9fcnVucV90aWNrbGUoKS4KPj4gPiAKPj4gPiBXaGljaCwg dG8gbWUsIGxvb2tzIGxpa2UgYm90aCBtb3JlIGludGVyLUNQVSBjb21tdW5pY2F0aW9uIG92ZXJo ZWFkCj4+ID4gYW5kIG1vcmUgY2hhbmNlcyBmb3IgbG9jayBjb250ZW50aW9uLgo+PiBIbW0uLi4g eWVzLCBtb3JlIGludGVyLUNQVSBjb21tdW5pY2F0aW9uLCB3aGlsZSBsZXNzIGxvY2sgY29udGVu dGlvbgo+PiBJIHRoaW5rLgo+PiAKPk1vcmUgaW50ZXItQ1BVIGNvbW11bmljYXRpb24sIHRoZSBz YW1lIGxldmVsIG9mIGxvY2FsIGxvY2sgY29udGVudGlvbgo+cGx1cyBzb21lIGFkZGVkIG1vZGVy YXRlbHkgdG8gbG93IGNvbnRlbnRlZCByZW1vdGUgbG9jayBjb250ZW50aW9uLAo+QUZBSUNULgo+ Cj4+ID4gU28sIGFnYWluLCBtb3JlIElQSXMgYW5kIG1vcmUgKHBvdGVudGlhbCkgbG9jayBjb250 ZW50aW9uLgo+PiA+IAo+PiA+IFRydWUgdGhlIHF1ZXVlaW5nIGludG8gdGhlIGRlZmVycmVkIHdh a2V1cCBsaXN0IHdpbGwgYmUgdmVyeSBzaW1wbGUKPj4gPiBhbmQgcXVpY2ssIGFuZCBoZW5jZSB0 aGUgY3JpdGljYWwgc2VjdGlvbiBuZWVkZWQgZm9yIGltcGxlbWVudGluZwo+PiA+IGl0IHZlcnkg c2hvcnQuIEJ1dCB0aGUgcHJvYmxlbSBpcyB0aGF0IHlvdSBhcmUgbm90IHNob3J0ZW5pbmcKPj4g PiBzb21ldGhpbmcgbG9uZywgb3Igc3BsaXR0aW5nIHNvbWV0aGluZyBsb25nIGluIHR3byBzaG9y dGVyIGNodW5rcywKPj4gPiB5b3UgYXJlIF9hZGRpbmdfIHNvbWV0aGluZywgYW5kIHRodXMgeW91 IGNhbid0IHBvc3NpYmx5IHdpbi4gOi0vCj4+ID4gCj4+IFllcywgd2UgYXJlIG1vdmluZyBzb21l IHRoaW5nLCBsZXQgbWUgZGlnZXN0IGl0IGZvciBhIHdoaWxlLgo+PiAKPlN1cmUuIExldCBtZSBh bHNvIGFkZCB0aGF0IEknbSBub3Qgc2F5aW5nIGl0J3Mgbm90IGdvaW5nIHRvIHdvcmssIG9yCj50 aGF0IGl0J3Mgbm90IGdvaW5nIHRvIGltcHJvdmUgdGhlIHNpdHVhdGlvbi4KPgo+V2hhdCBJJ20g c2F5aW5nIGlzIHRoYXQsIGFyY2hpdGVjdHVyYWxseSwgaXQncyBub3QgdG9vIGRpZmZlcmVudCBm cm9tCj50aGUgY3VycmVudCBzaXR1YXRpb24sIHNvIEkgd291bGQgbm90IGV4cGVjdCB3b25kZXJz IGZyb20ganVzdCB0aGlzLgo+Cj5XaGF0IEknZCBkbyB3b3VsZCBiZSB0byB0cnkgZmlndXJpbmcg b3V0IHdoZXJlIGl0IGlzIHRoYXQgdGhlIG1vc3QKPndhaXRpbmcgdGltZSBpcyBiZWluZyBhY2N1 bXVsYXRlZCwgaS5lLiwgd2hpY2ggKnNwZWNpZmljKiBsb2NraW5nCj5hdHRlbXB0cyBvZiB0aGUg c2NoZWR1bGVyJ3MgcnVucXVldWVzJyBsb2NrcyBhcmUgdGhlIG1vc3QgY29udGVuZGVkLAo+YW5k IGZvY3VzIG9uIHRob3NlIGZpcnN0Lgo+Cj5JZiB5b3UncmUgb24gYSBiaWcgaG9zdCwgSSB0aGlu ayB0aGUgd2F5IGluIHdoaWNoIENyZWRpdDEgZG9lcyBsb2FkCj5iYWxhbmNpbmcgKGkuZS4sIGJ5 IHdvcmsgc3RlYWxpbmcpIG1heSBiZSB0aGUgdGhpbmcgdG8gYmxhbWUuIEJ1dCBhbGwKPnRoZXNl IGFyZSB0aGluZ3MgdGhhdCBvbmx5IHByb2ZpbGluZyBhbmQgYmVuY2htYXJraW5nIGNhbiByZWFs bHkgdGVsbCEKPjotKQo+Cj5BcyBhIHNpZGUgbm90ZSwgd2UncmUgYWxzbyB3b3JraW5nIG9uIHNv bWV0aGluZyB3aGljaCwgYXQgdGhlIGVuZCBvZgo+dGhlIGRheSwgaXMgcmF0aGVyIHNpbWlsYXIs IGFsdGhvdWdoIGZvciBkaWZmZXJlbnQgcHVycG9zZXMuIEluIGZhY3QsCj5zZWUgaGVyZToKPmh0 dHBzOi8vbGlzdHMueGVucHJvamVjdC5vcmcvYXJjaGl2ZXMvaHRtbC94ZW4tZGV2ZWwvMjAxNi0w Ny9tc2cwMTg5Mi5odG1sCj4KPlRoZSBnb2FsIGlzIG5vdCBoYXZpbmcgdG8gZGlzYWJsZSBJUlFz IGR1cmluZyBzY2hlZHVsaW5nLCBhbmQgSSdtCj5sb29raW5nIGF0IGtlZXBpbmcgdGhlIHBlci1w Y3B1IGRlZmVycmVkIHdha2V1cCBsaXN0IGxvY2tsZXNzLCBpbiBvcmRlcgo+bm90IHRvIGFkZCBt b3JlIGxvY2sgY29udGVudGlvbi4KPgo+SWYgeW91J3JlIGludGVyZXN0ZWQgb24ga25vd2luZyBt b3JlIG9yIHdvcmtpbmcgb24gdGhhdCwganVzdCBsZXQgbWUKPmtub3cuIEJ1dCwgb2YgY291cnNl LCB0aGlzIGhhdmUgdG8gYmUgZG9uZSBvbiBYZW4gdXBzdHJlYW0sIG5vdCBvbiBhbgo+b2xkIHZl cnNpb24uCj4KPlJlZ2FyZHMsCj5EYXJpbwo+LS0gCj48PFRoaXMgaGFwcGVucyBiZWNhdXNlIEkg Y2hvb3NlIGl0IHRvIGhhcHBlbiE+PiAoUmFpc3RsaW4gTWFqZXJlKQo+LS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPkRhcmlv IEZhZ2dpb2xpLCBQaC5ELCBodHRwOi8vYWJvdXQubWUvZGFyaW8uZmFnZ2lvbGkKPlNlbmlvciBT b2Z0d2FyZSBFbmdpbmVlciwgQ2l0cml4IFN5c3RlbXMgUiZEIEx0ZC4sIENhbWJyaWRnZSAoVUsp Cj4KCgoKLS0gClJpY2hhcmQgWWFuZ1xuSGVscCB5b3UsIEhlbHAgbWUKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=