From mboxrd@z Thu Jan 1 00:00:00 1970 From: Robert Bragg Subject: Re: [RFC 0/6] Non perf based Gen Graphics OA unit driver Date: Tue, 20 Oct 2015 21:16:41 +0100 Message-ID: References: <1443537549-6905-1-git-send-email-robert@sixbynine.org> <20151016094306.GA3604@twins.programming.kicks-ass.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20151016094306.GA3604@twins.programming.kicks-ass.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Peter Zijlstra Cc: Mark Rutland , Matt Fleming , dri-devel@lists.freedesktop.org, David Airlie , intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, Alexander Shishkin , Sourab Gupta , linux-api@vger.kernel.org, Zheng Yan , Daniel Vetter , Ingo Molnar List-Id: linux-api@vger.kernel.org T24gRnJpLCBPY3QgMTYsIDIwMTUgYXQgMTA6NDMgQU0sIFBldGVyIFppamxzdHJhIDxwZXRlcnpA aW5mcmFkZWFkLm9yZz4gd3JvdGU6Cj4gT24gVHVlLCBTZXAgMjksIDIwMTUgYXQgMDM6Mzk6MDNQ TSArMDEwMCwgUm9iZXJ0IEJyYWdnIHdyb3RlOgo+PiAtIFdlJ3JlIGJyaWRnaW5nIHR3byBjb21w bGV4IGFyY2hpdGVjdHVyZXMKPj4KPj4gICAgIFRvIHJldmlldyB0aGlzIHdvcmsgSSB0aGluayBp dCB3aWxsIGJlIHJlbGV2YW50IHRvIGhhdmUgYSBnb29kCj4+ICAgICBnZW5lcmFsIGZhbWlsaWFy aXR5IHdpdGggR2VuIGdyYXBoaWNzIChlLmcuIHRoaW5raW5nIGFib3V0IHRoZSBPQQo+PiAgICAg dW5pdCdzIGludGVyYWN0aW9uIHdpdGggdGhlIGNvbW1hbmQgc3RyZWFtZXIgYW5kIGV4ZWNsaXN0 Cj4+ICAgICBzY2hlZHVsaW5nKSBhcyB3ZWxsIGFzIG91ciB1c2Vyc3BhY2UgYXJjaGl0ZWN0dXJl IGFuZCBob3cgd2UncmUKPj4gICAgIGNvbnN1bWluZyBPQSBkYXRhIHdpdGhpbiBNZXNhIHRvIGlt cGxlbWVudCB0aGUKPj4gICAgIElOVEVMX3BlcmZvcm1hbmNlX3F1ZXJ5IGV4dGVuc2lvbi4KPj4K Pj4gICAgIE9uIHRoZSBmbGlwIHNpZGUgaGVyZSwgaXRzIG5lY2Vzc2FyeSB0byB1bmRlcnN0YW5k IHRoZSBwZXJmCj4+ICAgICB1c2Vyc3BhY2UgaW50ZXJmYWNlIChmb3IgbW9zdCB0aGlzIGlzIGhp ZGRlbiBieSB0b29scyBzbyB0aGUgZGV0YWlscwo+PiAgICAgYXJlbid0IGNvbW1vbiBrbm93bGVk Z2UpIGFzIHdlbGwgYXMgdGhlIGludGVybmFsIGRlc2lnbiwgY29uc2lkZXJpbmcKPj4gICAgIHRo YXQgdGhlIFBNVSB3ZSdyZSBsb29raW5nIGF0IHNlZW1zIHRvIGJyZWFrIHNldmVyYWwgY3VycmVu dCBkZXNpZ24KPj4gICAgIGFzc3VtcHRpb25zLiBJIGNhbiBvbmx5IGNsYWltIGEgbGltaXRlZCBm YW1pbGlhcml0eSB3aXRoIHBlcmYncwo+PiAgICAgZGVzaWduLCBqdXN0IGFzIGEgcmVzdWx0IG9m IHRoaXMgd29yay4KPgo+IFJpZ2h0OyBidXQgYSBsaXR0bGUgZWZmb3J0IGFuZCBwYXRpZW5jZSBv biBib3RoIHNpZGVzIHNob3VsZCBnZXQgdXMKPiB0aGVyZSBJIHRoaW5rLiBBdCB3b3JzdCB3ZSds bCBib3RoIGxlYXJuIHNvbWV0aGluZyBuZXcgOy0pCgpJIHN1cHBvc2UgSSdtIGFsc28gY29uY2Vy bmVkIHRpbWUgaXMgYW4gaW1wb3J0YW50IGZhY3RvciB0b28uIFdoZW4gaXQKY29tZXMgdG8gdGhl IE9BIG1ldHJpY3M7IHdlIGFscmVhZHkgaGF2ZSB1c2Vyc3BhY2UgdG9vbHMgdGhhdCBjb3VsZCBi ZQptb3JlIHdpZGVseSB1c2VkIGJ5IGRldmVsb3BlcnMgb25jZSB3ZSBoYXZlIGFuIHVwc3RyZWFt IGludGVyZmFjZS4KVG9kYXkgcGVyZiBpc24ndCB2ZXJ5IHdlbGwgc3VpdGVkIHRvIG91ciBPQSB1 bml0IHVzZSBjYXNlLCBhbmQKYWx0aG91Z2ggd2UgbWF5IGJlIGFibGUgdG8gY2hhbmdlIHRoYXQg LSBhbmQgSSBjYW4gdHJ5IHRvIGhlbHAgd2l0aAp0aGF0IC0gYXQgdGhpcyBwb2ludCBJIHRoaW5r IEknZCBwcmVmZXIgbm90IHRvIGJsb2NrIG1vdmluZyBmb3J3YXJkIGluCnRoZSBtZWFuIHRpbWUg d2l0aCB0aGUgYWx0ZXJuYXRpdmUgaTkxNSBpbnRlcmZhY2UuCgpBbHRob3VnaCBjb2RlLXdpc2Ug aXQgZGlkbid0IHJlcXVpcmUgYW55IGJpZyBjaGFuZ2VzIHRvIGV2ZW50cy9jb3JlIHRvCmdldCBh biBpbml0aWFsIHBlcmYgYmFzZWQgZHJpdmVyIHdvcmtpbmcgZm9yIG91ciB1c2UgY2FzZSwgd2Ug aGF2ZQpyYWlzZWQgYSBudW1iZXIgb2YgcXVpdGUgc2lnbmlmaWNhbnQgZGVzaWduIHF1ZXN0aW9u cyBhbmQgYXJndWFibHkgY3V0CnNvbWUgY29ybmVycywgd2hpY2ggY291bGQgdGFrZSBhIGxvbmcg dGltZSB0byByZXNvbHZlIHByb3Blcmx5LiBJIGFsc28KdGVuZCB0byB0aGluayBpdCdzIGFuIG9w ZW4gcXVlc3Rpb24gYXQgdGhpcyBzdGFnZSB3aGV0aGVyIGl0IHdvdWxkCnJlYWxseSBiZSBpbiBl dmVyeW9uZSdzIGludGVyZXN0IHRvIHRha2UgcGVyZiBpbiB0aGlzIGRpcmVjdGlvbgp3aXRob3V0 IGEgY2xlYXIgc2Vuc2Ugb2YgdGhlIGJlbmVmaXRzIGl0IGJyaW5ncyBpbiBjb21wYXJpc29uIHRv IHRoZQpjb21wbGV4aXR5IGl0IG1heSBhZGQuCgpJdCdzIGFsc28gYSBiaXQgYXdrd2FyZCBJIGhh ZCBhbHJlYWR5IHN0YXJ0ZWQgdG8gbW92ZSBhaGVhZCB3aXRoIHRoaXMKaWRlYSBvZiB1cHN0cmVh bWluZyBhIG5vbi1wZXJmIGJhc2VkIGRyaXZlciBmb3IgdGhlIE9BIHVuaXQgYWZ0ZXIKYXNraW5n IERhbmllbCBWZXR0ZXIgYWJvdXQgdGhpcyBvbiBJUkMuIFRoZXJlIGFyZSBzb21lIGtub2NrIG9u CmVmZmVjdHMgaGVyZSB0b287IFNvdXJhYiBHdXB0YSBpcyBsb29raW5nIGF0IGJ1aWxkaW5nIG9u IHRoaXMgT0EKZHJpdmVyIGFuZCBoYXMgbm93IHN0YXJ0ZWQgYWRhcHRpbmcgaGlzIHdvcmsgZm9y IHRoaXMgbm9uLXBlcmYKYXBwcm9hY2guCgo+Cj4+IC0gVGhlIGN1cnJlbnQgT0EgUE1VIGRyaXZl ciBicmVha3Mgc29tZSBzaWduaWZpY2FudCBkZXNpZ24gYXNzdW1wdGlvbnMuCj4+Cj4+ICAgICBF eGlzdGluZyBwZXJmIHBtdXMgYXJlIHVzZWQgZm9yIHByb2ZpbGluZyB3b3JrIG9uIGEgY3B1IGFu ZCB3ZSdyZQo+PiAgICAgaW50cm9kdWNpbmcgdGhlIGlkZWEgb2YgX0lTX0RFVklDRSBwbXVzIHdp dGggZGlmZmVyZW50IHNlY3VyaXR5Cj4+ICAgICBpbXBsaWNhdGlvbnMsIHRoZSBuZWVkIHRvIGZh a2UgY3B1LXJlbGF0ZWQgZGF0YSAoc3VjaCBhcyB1c2VyL2tlcm5lbAo+PiAgICAgcmVnaXN0ZXJz KSB0byBmaXQgd2l0aCBwZXJmJ3MgY3VycmVudCBkZXNpZ24sIGFuZCBhZGRpbmcgX0RFVklDRQo+ PiAgICAgcmVjb3JkcyBhcyBhIHdheSB0byBmb3J3YXJkIGRldmljZS1zcGVjaWZpYyBzdGF0dXMg cmVjb3Jkcy4KPgo+IFRoZXJlIGFyZSBtb3JlIGRldmljZXMgd2l0aCBjb3VudGVycyBvbiB0aGFu IEdQVXMsIHNvIEkgdGhpbmsgaXQgbWlnaHQKPiBtYWtlIHNlbnNlIHRvIGxvb2sgYXQgZXh0ZW5k aW5nIHBlcmYgdG8gYmV0dGVyIGRlYWwgd2l0aCB0aGlzLgoKSSB3b25kZXIgaWYgaXQgY291bGQg YmUgZ29vZCB0byBsb29rIGF0IGV4cG9zaW5nIHNvbWUgb2YgdGhlIG1taW8KYWNjZXNzaWJsZSBH ZW4gZ3JhcGhpY3MgY291bnRlcnMgYmVmb3JlIHRhY2tsaW5nIGEgbW9yZSBjb21wbGV4IGNhc2UK bGlrZSB0aGUgT0EgdW5pdC4gV2UgaGF2ZSBhIG51bWJlciBvZiBjb3VudGVycyB0aGF0IGNvdWxk IGJlCmludGVyZXN0aW5nIHRvIHNhbXBsZSBwZXJpb2RpY2FsbHkgdmlhIGEgaHJ0aW1lciwgdGhh dCByZXF1aXJlIG5vCmNvbmZpZ3VyYXRpb24sIGFyZSBnbG9iYWwgKHNvIG5vIG5lZWQgdG8gc3Bl Y2lmeSBhIGdwdSBjb250ZXh0KSBidXQgYXMKdGhleSByZWxhdGUgdG8gdGhlIEdQVSBhbiBfSVNf REVWSUNFIHBtdSB3b3VsZCBzdGlsbCBiZSBhcHByb3ByaWF0ZS4KU29tZSBvZiB0aGVzZSBzZWVt IGxpa2UgdGhleSBjb3VsZCBiZSBiZXR0ZXIgc3VpdGVkIHRvIGJlaW5nIGV4cG9zZWQKdmlhIHBl cmYgdGhhbiBPQSB1bml0IGNvdW50ZXJzIHNvIHRoZXkgbWlnaHQgYmUgYSBoZWxwZnVsIHN0ZXBw aW5nCnN0b25lLgoKPgo+PiAgICAgVGhlIE9BIHVuaXQgd3JpdGVzIHJlcG9ydHMgb2YgY291bnRl cnMgaW50byBhIGNpcmN1bGFyIGJ1ZmZlciwKPj4gICAgIHdpdGhvdXQgaW52b2x2ZW1lbnQgZnJv bSB0aGUgQ1BVLCBtYWtpbmcgb3VyIFBNVSBkcml2ZXIgdGhlIGZpcnN0IG9mCj4+ICAgICBhIGtp bmQuCj4KPiBBZ3JlZWQsIHRoaXMgaXMgc29tZXdoYXQgJ29kZCcgZnJvbSB3aGVyZSB3ZSBhcmUg dG9kYXkuCj4KPj4gICAgIFBlcmYgc3VwcG9ydHMgZ3JvdXBzIG9mIGNvdW50ZXJzIGFuZCBhbGxv d3MgdGhvc2UgdG8gYmUgcmVhZCB2aWEKPj4gICAgIHRyYW5zYWN0aW9ucyBpbnRlcm5hbGx5IGJ1 dCB0cmFuc2FjdGlvbnMgY3VycmVudGx5IHNlZW0gZGVzaWduZWQgdG8KPj4gICAgIGJlIGV4cGxp Y2l0bHkgaW5pdGlhdGVkIGZyb20gdGhlIGNwdSAoc2F5IGluIHJlc3BvbnNlIHRvIGEgdXNlcnNw YWNlCj4+ICAgICByZWFkKCkpIGFuZCB3aGlsZSB3ZSBjb3VsZCBwdWxsIGEgcmVwb3J0IG91dCBv ZiB0aGUgT0EgYnVmZmVyIHdlCj4+ICAgICBjYW4ndCB0cmlnZ2VyIGEgcmVwb3J0IGZyb20gdGhl IGNwdSBvbiBkZW1hbmQuCj4+Cj4+ICAgICBSZWxhdGVkIHRvIGJlaW5nIHJlcG9ydCBiYXNlZDsg dGhlIE9BIGNvdW50ZXJzIGFyZSBjb25maWd1cmVkIGluIEhXCj4+ICAgICBhcyBhIHNldCB3aGls ZSBwZXJmIGdlbmVyYWxseSBleHBlY3RzIGNvdW50ZXIgY29uZmlndXJhdGlvbnMgdG8gYmUKPj4g ICAgIG9ydGhvZ29uYWwuIEFsdGhvdWdoIGNvdW50ZXJzIGNhbiBiZSBhc3NvY2lhdGVkIHdpdGgg YSBncm91cCBsZWFkZXIKPj4gICAgIGFzIHRoZXkgYXJlIG9wZW5lZCwgdGhlcmUncyBubyBjbGVh ciBwcmVjZWRlbnQgZm9yIGJlaW5nIGFibGUgdG8KPj4gICAgIHByb3ZpZGUgZ3JvdXAtd2lkZSBj b25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgYW5kIG5vIG9idmlvdXMgc29sdXRpb24KPj4gICAgIGFz IHlldCB0aGF0J3MgZXhwZWN0ZWQgdG8gYmUgYWNjZXB0YWJsZSB0byB1cHN0cmVhbSBhbmQgbWVl dHMgb3VyCj4+ICAgICB1c2Vyc3BhY2UgbmVlZHMuCj4KPiBJJ20gbm90IGVudGlyZWx5IHN1cmUg d2hhdCB5b3UgbWVhbiB3aXRoIGdyb3VwLXdpZGUgY29uZmlndXJhdGlvbgo+IGF0dHJpYnV0ZXM7 IGNvdWxkIHlvdSBlbGFib3JhdGU/CgpIZXJlIEknbSB0aGlua2luZyBvZiBjb25maWd1cmF0aW9u IGRldGFpbHMgdGhhdCBjb25jZXB0dWFsbHkgcmVsYXRlIHRvCmEgc2V0IG9mIE9BIHVuaXQgY291 bnRlcnMsIG5vdCBpbmRpdmlkdWFsIGV2ZW50cy9jb3VudGVyczoKCi0gVGhlIGNob2ljZSBvZiAn bWV0cmljIHNldCcgd2hpY2ggcmVwcmVzZW50cyBhIE1VWCBjb25maWd1cmF0aW9uICsKYm9vbGVh biBsb2dpYyBjb25maWd1cmF0aW9uIGZvciBhIHNldCBvZiBjb3VudGVycyB0aGF0IHdpbGwgYmUK aW5jbHVkZWQgaW4gdGhlIHJlcG9ydHMgd3JpdHRlbiBieSB0aGUgT0EgdW5pdC4KCi0gVGhlIE9B IHVuaXQgZXhwb25lbnQgZm9yIHBlcmlvZGljIHNhbXBsaW5nIGFwcGxpZXMgdG8gdGhlIHdob2xl IGdyb3VwLgoKLSBUaGUgY2hvaWNlIG9mIHJlcG9ydCBsYXlvdXQgd2hpY2ggdGhlIE9BIHVuaXQg d3JpdGVzIGFsbCB0aGUgY291bnRlcnMgaW4uCgotIFRoZSBjaG9pY2UgdG8gcHJvZmlsZSBhIHNp bmdsZSBjb250ZXh0IG9yIHN5c3RlbS13aWRlIGFwcGxpZXMgdG8gdGhlCmdyb3VwLCBhcyB3ZWxs IGFzIHRoZSBzcGVjaWZpY2F0aW9uIG9mIGEgZmlsZSBkZXNjcmlwdG9yICsgY29udGV4dCBJRApp biB0aGUgc2luZ2xlLWNvbnRleHQgY2FzZS4KCgo+Cj4+ICAgICBXZSBjdXJyZW50bHkgYXZvaWQg dXNpbmcgcGVyZidzIGdyb3VwaW5nIGZlYXR1cmUKPj4gICAgIGFuZCBmb3J3YXJkIE9BIHJlcG9y dHMgdG8gdXNlcnNwYWNlIHZpYSBwZXJmJ3MgJ3Jhdycgc2FtcGxlIGZpZWxkLgo+PiAgICAgVGhp cyBzdWl0cyBvdXIgdXNlcnNwYWNlIHdlbGwgY29uc2lkZXJpbmcgaG93IGNvdXBsZWQgdGhlIGNv dW50ZXJzCj4+ICAgICBhcmUgd2hlbiBkZWFsaW5nIHdpdGggbm9ybWFsaXppbmcuIEl0IHdvdWxk IGJlIGluY29udmVuaWVudCB0byBzcGxpdAo+PiAgICAgY291bnRlcnMgdXAgaW50byBzZXBhcmF0 ZSBldmVudHMsIG9ubHkgdG8gcmVxdWlyZSB1c2Vyc3BhY2UgdG8KPj4gICAgIHJlY29tYmluZSB0 aGVtLgo+Cj4gU28gSUYgeW91IHdlcmUgdXNpbmcgYSBncm91cCwgYSBzaW5nbGUgcmVhZCBmcm9t IHRoZSBsZWFkZXIgY2FuIHJldHVybgo+IHlvdSBhIHZlY3RvciBvZiBhbGwgdmFsdWVzIChQRVJG X0ZPUk1BVF9HUk9VUCksIHRoaXMgYXZvaWRzIGhhdmluZyB0bwo+IGRvIHRoYXQgcmVjb21iaW5l LgoKQWx0aG91Z2ggcmVjb21iaW5pbmcgaXNuJ3QgbmVjZXNzYXJ5IHdpdGggX0ZPUk1BVF9HUk9V UCwgdGhpcyB2ZWN0b3IKbGF5b3V0IGNvdWxkIGJlIHNpbWlsYXJseSBpbmNvbnZlbmllbnQgZm9y IHVzZXJzcGFjZS4uLgoKYWZpY3Qgd2UgY291bGRuJ3QgYXZvaWQgYWxzbyByZXF1ZXN0aW5nIHRo ZSBfSUQgdG8gYmUgaW5jbHVkZWQgaW4gdGhlCnZlY3Rvciwgc28gaW5zdGVhZCBvZiB0aGUgMzIv NDBiaXRzIHBlciBjb3VudGVyIHdlIHdvdWxkIG5vdyBoYXZlCjE2Ynl0ZXMgcGVyIGNvdW50ZXIg d2hpY2ggd291bGQgc2VlbSB0byBsb29zZSBzb21lIGJlbmVmaXQgZnJvbSBhCmNvbXBhY3QgSFcg bGF5b3V0IHRvIG1pbmltaXplIG91ciB1c2Ugb2YgbWVtb3J5IGJhbmR3aWR0aC4KClVzZXJzcGFj ZSBoYXMgdG8gYmUgYXdhcmUgdGhhdCB3ZSdyZSBwbGFjaW5nIDMyYml0IG9yIDQwYml0IHZhbHVl cwp3aXRoaW4gYSA2NGJpdCBmaWVsZCBhbmQgdGhlIHZhbHVlcyB3aWxsIG92ZXJmbG93IGFzIHN1 Y2guCgpBcyB1c2Vyc3BhY2UgcmVjZWl2ZXMgcmVwb3J0cyBpdCBjYWxjdWxhdGVzIGRlbHRhcyBi ZXR3ZWVuIHNlcXVlbnRpYWwKcmVwb3J0cyB0byBhY2N1bXVsYXRlIDY0Yml0IGNvdW50ZXJzLiBG b3IgZWFjaCBldmVudCBpbiB0aGUgdmVjdG9yIGl0Cm5lZWRzIHRvIGxvb2t1cCB0aGUgaW5kZXgg b2YgdGhlIGFjY3VtdWxhdGVkIHZhbHVlLCBhbmQgYSBsb29rdXAgYmFzZWQKb24gYSB1NjQgZXZl bnQgaWQgZm9yIGVhY2ggY291bnRlciBpc24ndCBhcyBkaXJlY3QgYXMgd2l0aCBhIHJpZ2lkCnJl cG9ydCBsYXlvdXQuIChJIGRvbid0IGtub3cgd2hhdCBhc3N1bXB0aW9ucyBjYW4gYmUgbWFkZSBh Ym91dCB0aGUKdmVjdG9yIG9yZGVyaW5nIGZyb20gb25lIHNhbXBsZSB0byB0aGUgbmV4dCwgYnV0 IG1heWJlIGEgZml4ZWQgbWFwcGluZwpjb3VsZCBiZSBtYWRlIGFmdGVyIHRoZSBmaXJzdCBzYW1w bGUpIFdoZW4gY2FsY3VsYXRpbmcgdGhlIGRlbHRhCnVzZXJzcGFjZSBuZWVkcyB0byBiZSBjYXJl ZnVsIG5vdCB0byB0cmVhdCB0aGUgdmVjdG9yIHZhbHVlcyBhcyA2NGJpdApidXQgYXMgMzIvNDBi aXQgdG8gYWNjb3VudCBmb3Igb3ZlcmZsb3cuCgpNZXNhIHdpbGwgc3RpbGwgaGF2ZSB0byBiZSBh YmxlIHRvIGhhbmRsZSB0aGUgcmF3IE9BIHJlcG9ydCBsYXlvdXRzIHRvCnByb2Nlc3MgcmVwb3J0 cyBjb2xsZWN0ZWQgdmlhIHRoZSBjb21tYW5kIHN0cmVhbSB1c2luZwpNSV9SRVBPUlRfUEVSRl9D T1VOVCBjb21tYW5kcywgc28gYW55IGFsdGVybmF0aXZlIGF0IGxlYXN0IHJlcHJlc2VudHMKc29t ZSBhbW91bnQgb2YgZXh0cmEgbGF5b3V0IGhhbmRsaW5nIGNvZGUgYW5kIG5lZWRpbmcgdG8gaGFu ZGxlCmRpZmZlcmVudCBjb21iaW5hdGlvbnMgb2YgcmF3IG9yIHZlY3RvciBsYXlvdXRzIHdoZW4g Y2FsY3VsYXRpbmcgYQpzaW5nbGUgZGVsdGEuCgo+Cj4gQW5vdGhlciBvcHRpb24gd291bGQgYmUg dG8gdmlldyB0aGUgYXJyaXZhbCBvZiBhbiBPQSB2ZWN0b3IgaW4gdGhlCj4gZGF0YXN0cmVhbSBh cyBhbiAnZXZlbnQnIGFuZCBnZW5lcmF0ZSBhIFBFUkZfUkVDT1JEX1JFQUQgaW4gdGhlIHBlcmYK PiBidWZmZXIgKHdoaWNoIGFnYWluIGNhbiB1c2UgdGhlIEdST1VQIHZlY3RvciBmb3JtYXQpLgoK VGJoIEkgY291bGRuJ3QgcmVhbGx5IGZpZ3VyZSBvdXQgd2hhdCBQRVJGX1JFQ09SRF9SRUFEIGlz IGludGVuZGVkIGZvcgotIHRoZSB1c2Vyc3BhY2UgY29kZSBJIGZvdW5kIGN1cnJlbnRseSBpZ25v cmVzIHRoZXNlLgoKVGhlIGV4dGVuc2libGUgc2FtcGxlIGRlc2lnbiBzZWVtcyBtb3JlIGFwcHJv cHJpYXRlLCBidXQgaXQgY291bGQgYmUKZ29vZCBpZiBzYW1wbGVzIHdlcmUgZXh0ZW5zaWJsZSBi eSBkZXZpY2UgZHJpdmVycyBhcyBhbiBhbHRlcm5hdGl2ZSB0bwpwYWNraW5nIGRhdGEgaW50byB0 aGUgcmF3IGZpZWxkLiBTb3VyYWIgd2hvJ3MgYmVlbiBidWlsZGluZyBvbiBteSBiYXNlCk9BIGRy aXZlciBpcyBleHBvc2luZyBtb3JlIGRhdGEgYXMgcGFydCBvZiBzYW1wbGVzLCBpbmNsdWRpbmcg YQpjb250ZXh0IElELCBhbmQgd2Ugd2VyZSBleHRlbmRpbmcgd2hhdCB3ZSBpbmNsdWRlZCBpbiB0 aGUgcmF3IGZpZWxkCih3ZSB3b3VsZG4ndCBnZXQgdGhpcyBleHRyYSBkYXRhIHZpYSBfUkVDT1JE X1JFQUQpLgoKQ29uY2VwdHVhbGx5IHRoZSBhaW0gd2FzIHRvIGV4cG9zZSBldmVudCBzcGVjaWZp YyBzYW1wbGUgZmxhZ3MsIHRvCmV4dGVuZCBzYW1wbGVzIChtaXJyb3JpbmcgdGhlIGV4aXN0aW5n IGRlc2lnbiBmb3IgcHJlLWRlZmluZWQgc2FtcGxlCmZsYWdzLCBleGNlcHQgZHJpdmVyIGV4dGVu c2libGUpLiBXZSBqdXN0IHVzZWQgdGhlIHJhdyBmaWVsZCBhcyB0aGUKbW9zdCBjb252ZW5pZW50 IGV4dGVuc2lvbiBwb2ludCB0byBzdGFydCB3aXRoLgoKRXh0ZW5kaW5nIHRoZSByYXcgZmllbGQg aGFzIHNvbWUgZGlmZmljdWx0aWVzIHRob3VnaCBiZWNhdXNlCmV2ZW50cy9jb3JlIGN1cnJlbnRs eSBvbmx5IGxldHMgYSBwbXUgZ2l2ZSBhIHNpbmdsZSByYXcgZGF0YSBwb2ludGVyCnBsdXMgbGVu IHdoaWNoIHdpbGwgYmUgY29waWVkIGludG8gdGhlIHJpbmcgYnVmZmVyLCBzbyB0byBpbmNsdWRl IG1vcmUKdGhhbiB0aGUgT0EgcmVwb3J0IHdlJ2QgaGF2ZSB0byBjb3B5IHRoZSByZXBvcnQgaW50 byBhbiBpbnRlcm1lZGlhdGUKbGFyZ2VyIGJ1ZmZlci4gSSdkIGJlZW4gY29uc2lkZXJpbmcgYWxs b3dpbmcgYSB2ZWN0b3Igb2YgZGF0YStsZW4KdmFsdWVzIHRvIGJlIHNwZWNpZmllZCBmb3IgY29w eWluZyB0aGUgcmF3IGRhdGEuCgo+Cj4+ICAgICBSZWxhdGVkIHRvIGNvdW50ZXIgb3J0aG9nb25h bGl0eTsgd2UgY2FuJ3QgdGltZSBzaGFyZSB0aGUgT0EgdW5pdCwKPj4gICAgIHdoaWxlIGV2ZW50 IHNjaGVkdWxpbmcgaXMgYSBjZW50cmFsIGRlc2lnbiBpZGVhIHdpdGhpbiBwZXJmIGZvcgo+PiAg ICAgYWxsb3dpbmcgdXNlcnNwYWNlIHRvIG9wZW4gKyBlbmFibGUgbW9yZSBldmVudHMgdGhhbiBj YW4gYmUKPj4gICAgIGNvbmZpZ3VyZWQgaW4gSFcgYXQgYW55IG9uZSB0aW1lLgo+Cj4gU28gd2Ug aGF2ZSBvdGhlciBQTVVzIHRoYXQgY2Fubm90IGRvIHRoaXM7IEdlbiBPQSB3b3VsZCBub3QgYmUg dW5pcXVlIGluCj4gdGhpcy4gSW50ZWwgUFQgZm9yIGV4YW1wbGUgb25seSBhbGxvd3MgYSBzaW5n bGUgYWN0aXZlIGV2ZW50Lgo+Cj4gVGhhdCBzYWlkOyBlYXJsaWVyIHRvZGF5IEkgc2F3Ogo+Cj4g ICBodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD92PTlKM0JRY0FlSHBJJmxpc3Q9UExlNkkz TktyLUk0SjJvTEdYaEdPZUJNRWpoOGgxMGpUMyZpbmRleD03Cj4KPiB3aGVyZSBleGFjdGx5IHRo aXMgZmVhdHVyZSB3YXMgbWVudGlvbmVkIGFzIG5vdCBmaXR0aW5nIHdlbGwgaW50byB0aGUKPiBl eGlzdGluZyBHUFUgcGVyZm9ybWFuY2UgaW50ZXJmYWNlcyAoR0xfQU1EX3BlcmZvcm1hbmNlX21v bml0b3IgLwo+IEdMX0lOVEVMX3BlcmZvcm1hbmNlX3F1ZXJ5KS4KCkkgdGhpbmsgU2FtdWVsIHdh cyBnZW5lcmFsbHkgY29tbWVudGluZyB0aGF0IHRoZXNlIEludGVsL0FNRCBHTApleHRlbnNpb25z IGFyZW4ndCBhIGdvb2QgZml0IGZvciBOdmlkaWEgaHcgc2luY2UgaXQncyBhd2t3YXJkIHRvCmFi c3RyYWN0IHRoZSBuZWVkIHRvIHVwZGF0ZSB0aGUgTVVYIGNvbmZpZ3VyYXRpb24gaW4tZmxpZ2h0 IHNvIHRoZXkKY2FuIGRlcml2ZSBoaWdoZXIgbGV2ZWwgY291bnRlcnMgZnJvbSBtb3JlIGlucHV0 cyB0aGFuIHRoZSBIVyBjYW4KZXhwb3NlIGF0IHRoZSBzYW1lIHRpbWUuIFVubGlrZSBJbnRlbCBh bmQgQU1ELCBpdCBsb29rcyBsaWtlIGluc3RlYWQKb2YgZGVmaW5pbmcgYSBHTCBleHRlbnNpb24g Zm9yIGFjY2Vzc2luZyBwZXJmb3JtYW5jZSBjb3VudGVycyBOdmlkaWEKaGFzIGEgcGVyZmtpdCBh cGkgd2hpY2ggY2FuIGJlIHVzZWQgaW4gY29uanVjdGlvbiB3aXRoIE9wZW5HTCwgQ1VEQSBvcgpE aXJlY3QzRCB3aGljaCBTYW11ZWwgaGFzIGFsc28gYmVlbiBpbXBsZW1lbnRpbmcuCgpJJ20gbm90 IHN1cmUgd2hhdCBleGFjdGx5IGFib3V0IHRoZSBBTUQvSW50ZWwgR0wgZXh0ZW5zaW9ucyBtYWtl cyBpdAp0cmlja3kgdG8gYWJzdHJhY3Qgcm91bmQtcm9iaW4gdXBkYXRlcyBvZiB0aGUgTVVYcyBp bnRlcm5hbGx5IHZzIHdoYXQKcGVyZmtpdCBvZmZlcnMgYnV0IHNpbmNlIHdlIHdvdWxkbid0IGV4 cGVjdCB0byByb3VuZC1yb2JpbiB0aGUgT0EKY291bnRlciBjb25maWd1cmF0aW9uIHRoZSBJTlRF TF9wZXJmb3JtYW5jZV9xdWVyeSBzcGVjIGF1dGhvcnMKd291bGRuJ3QgaGF2ZSBnaXZlbiB0aGF0 IGFueSBjb25zaWRlcmF0aW9uLgoKPgo+IFNvIHRoZXJlIGlzIGhhcmR3YXJlIChOdmlkaWEpIG91 dCB0aGVyZSB0aGF0IGRvZXMgc3VwcG9ydCB0aGlzLiBBbHNvCj4gbWVudGlvbmVkIHdhcyB0aGF0 IHRoaXMgaGFyZHdhcmUgaGFzIGdsb2JhbCBhbmQgbG9jYWwgY291bnRlcnMsIHdoZXJlCj4gdGhl IGxvY2FsIG9uZXMgYXJlIHNwZWNpZmljIHRvIGEgcmVuZGVyaW5nIGNvbnRleHQuIFRoYXQgaXMg bm90IHVubGlrZQo+IHRoZSBwZXItY3B1IC8gcGVyLXRhc2sgc3R1ZmYgcGVyZiBkb2VzLgoKRm9y IHJlZmVyZW5jZSwgT0EgY291bnRlcnMgY2FuIGJlIHZpZXdlZCBhcyBnbG9iYWwgb3IgbG9jYWwg Y291bnRlcnMuCldoZW4gb3BlbmluZyBhbiBldmVudCBhbiBhcHBsaWNhdGlvbiBjYW4gcmVxdWVz dCBhIHN5c3RlbS13aWRlIHZpZXcgdnMKc2luZ2xlLWNvbnRleHQgdmlldy4KCj4KPj4gICAgIFRo ZSBPQSB1bml0IGlzIG5vdCBkZXNpZ25lZCB0bwo+PiAgICAgYWxsb3cgcmUtY29uZmlndXJhdGlv biB3aGlsZSBpbiB1c2UuIFdlIGNhbid0IHJlY29uZmlndXJlIHRoZSBPQQo+PiAgICAgdW5pdCB3 aXRob3V0IGxvb3NpbmcgaW50ZXJuYWwgT0EgdW5pdCBzdGF0ZSB3aGljaCB3ZSBjYW4ndCBhY2Nl c3MKPj4gICAgIGV4cGxpY2l0bHkgdG8gc2F2ZSBhbmQgcmVzdG9yZS4gUmVjb25maWd1cmluZyB0 aGUgT0EgdW5pdCBpcyBhbHNvCj4+ICAgICByZWxhdGl2ZWx5IHNsb3csIGludm9sdmluZyB+MTAw IHJlZ2lzdGVyIHdyaXRlcy4gRnJvbSB1c2Vyc3BhY2UgTWVzYQo+PiAgICAgYWxzbyBkZXBlbmRz IG9uIGEgc3RhYmxlIE9BIGNvbmZpZ3VyYXRpb24gd2hlbiBlbWl0dGluZwo+PiAgICAgTUlfUkVQ T1JUX1BFUkZfQ09VTlQgY29tbWFuZHMgYW5kIGltcG9ydGFudGx5IHRoZSBPQSB1bml0IGNhbid0 IGJlCj4+ICAgICBkaXNhYmxlZCB3aGlsZSB0aGVyZSBhcmUgb3V0c3RhbmRpbmcgTUlfUlBDIGNv bW1hbmRzIGxlc3Qgd2UgaGFuZwo+PiAgICAgdGhlIGNvbW1hbmQgc3RyZWFtZXIuCj4KPiBSaWdo dDsgc2VlIHRoZSBQRVJGX1BNVV9DQVBfRVhDTFVTSVZFIHN0dWZmLgoKVGhpcyBsb29rcyBsaWtl IGl0J3MgaW5jb21wYXRpYmxlIHdpdGggdGhlIGdyb3VwIG1lY2hhbmlzbSByZTogdGhlCm90aGVy IHF1ZXN0aW9uIG9mIGV4cG9zaW5nIE9BIHJlcG9ydHMgdmlhIHRoZSBncm91cGluZyBtZWNoYW5p bXMgdnMKcmF3IHNhbXBsZSBkYXRhLgoKPgo+PiAtIFdlIG1heSBiZSBtYWtpbmcgc29tZSB0ZWNo bmljYWwgY29tcHJvbWlzZXMgYS50Lm0gZm9yIHRoZSBzYWtlIG9mCj4+ICAgdXNpbmcgcGVyZi4K Pj4KPj4gICAgIHBlcmZfZXZlbnRfb3BlbigpIHJlcXVpcmVzIGV2ZW50cyB0byBlaXRoZXIgcmVs YXRlIHRvIGEgcGlkIG9yIGEKPj4gICAgIHNwZWNpZmljIGNwdSBjb3JlLCB3aGlsZSBvdXIgZGV2 aWNlIHBtdSByZWxhdGVzIHRvIG5laXRoZXIuICBFdmVudHMKPj4gICAgIG9wZW5lZCB3aXRoIGEg cGlkIHdpbGwgYmUgYXV0b21hdGljYWxseSBlbmFibGVkL2Rpc2FibGVkIGFjY29yZGluZwo+PiAg ICAgdG8gdGhlIHNjaGVkdWxpbmcgb2YgdGhhdCBwcm9jZXNzIC0gc28gbm90IGFwcHJvcHJpYXRl IGZvciB1cy4KPgo+IFJpZ2h0OyB0aGUgdHJhZGl0aW9uYWwgY3B1L3BpZCBtYXBwaW5nIGRvZXNu J3Qgd29yayB3ZWxsIGZvciBkZXZpY2VzOwo+IGJ1dCBtYXliZSwgd2l0aCBzb21lIHdvcmssIHdl IGNhbiBjcmVhdGUgc29tZXRoaW5nIGxpa2UgdGhhdAo+IGdsb2JhbC9sb2NhbCByZW5kZXIgY29u dGV4dCBmcm9tIGl0OyBhbHRob3VnaCBJJ3ZlIG5vIGNsdWUgd2hhdCBmb3JtCj4gdGhhdCB3b3Vs ZCBuZWVkIGF0IHRoaXMgdGltZS4KCkN1cnJlbnRseSB0aGUgd2F5IHdlIGlkZW50aWZ5IGEgY29u dGV4dCBpcyB3aXRoIHRoZSBjb21iaW5hdGlvbiBvZiBhCmZpbGUgZGVzY3JpcHRvciBhbmQgYSB1 MzIgY29udGV4dCBoYW5kbGUgKG9ubHkgdW5pcXVlIHRvIHRoYXQgZmQpLiBUaGUKdXNlIG9mIGEg ZHJtIGZpbGUgZGVzY3JpcHRvciBoZXJlIGFsc28gcmVsYXRlcyB0byB0aGUgc2VjdXJpdHkgbW9k ZWwKZm9yIGFjY2Vzc2luZyBzaW5nbGUgY29udGV4dCBtZXRyaWNzLCBpbiB0aGF0IHdlIGRvbid0 IHJlcXVpcmUgcm9vdApwcml2aWxlZ2VzIHRvIHByb2ZpbGUgYSBjb250ZXh0IGFzc29jaWF0ZWQg d2l0aCBhIGZpbGUgZGVzY3JpcHRvciB0aGF0CnRoZSBwcm9jZXNzIGhhcyBvcGVuLgoKUmVjZW50 bHkgd2UndmUgYWxzbyBiZWVuIHdvcmtpbmcgd2l0aCBhIGdsb2JhbGx5IHVuaXF1ZSBjb250ZXh0 IElECihub3QgdXBzdHJlYW0geWV0KSBhbmQgaXQgY291bGQgYmUgaW50ZXJlc3RpbmcgdG8gYWxz byBhbGxvdyBzaW5nbGUKY29udGV4dCBwcm9maWxpbmcgZ2l2ZW4gYSBnbG9iYWwgSUQsIHdpdGhv dXQgYW55IGZkIChjb21wYXJhYmxlIHRvCnBhc3NpbmcgYSBwaWQgdG8gcGVyZl9ldmVudF9vcGVu KS4gVGhpcyBmb3JtIG9mIHNlbGVjdGlvbiB3b3VsZApwcm9iYWJseSByZXF1aXJlIHJvb3QgcHJp dmlsZWdlcyBieSBkZWZhdWx0LgoKPgo+PiAgICAgV2hlbgo+PiAgICAgYW4gZXZlbnQgaXMgcmVs YXRlZCB0byBhIGNwdSBpZCwgcGVyZiBlbnN1cmVzIHBtdSBtZXRob2RzIHdpbGwgYmUKPj4gICAg IGludm9rZWQgdmlhIGFuIGludGVyIHByb2Nlc3MgaW50ZXJydXB0IG9uIHRoYXQgY29yZS4gVG8g YXZvaWQKPj4gICAgIGludmFzaXZlIGNoYW5nZXMgb3VyIHVzZXJzcGFjZSBvcGVucyBPQSBwZXJm IGV2ZW50cyBmb3IgYSBzcGVjaWZpYwo+PiAgICAgY3B1Lgo+Cj4gU29tZSBvZiB0aGF0IG1pZ2h0 IHN0aWxsIG1ha2Ugc2Vuc2UgaW4gdGhlIHNlbnNlIHRoYXQgR1BVcyBhcmUgc3ViamVjdAo+IHRv IHRoZSBOVU1BIHRvcG9sb2d5IG9mIG1hY2hpbmVzLiBJIHdvdWxkIHRoaW5rIHlvdSB3b3VsZCB3 YW50IG1vc3QKPiBzdWNoIHRoaW5ncyB0byBiZSBkb25lIG9uIHRoZSBub2RlIHRoZSBkZXZpY2Ug aXMgYXR0YWNoZWQgdG8uCj4KPiBHcmFudGVkLCB0aGlzIG1pZ2h0IG5vdCBiZSBhIGNvbmNlcm4g Zm9yIEludGVsIGdyYXBoaWNzLCBidXQgaXQgbWlnaHQgYmUKPiByZWxldmFudCBmb3Igc29tZSBv ZiB0aGUgZGlzY3JldGUgR1BVcy4KCkknbSBub3Qgc3VyZSB3aGV0aGVyIE5vdXZlYXUgdGFrZXMg dGhpcyBraW5kIG9mIGlkZWEgaW50byBjb25zaWRlcmF0aW9uIG9yIG5vdC4KCj4KPj4gLSBJJ20g bm90IGNvbmZpZGVudCBvdXIgdXNlIGNhc2UgYmVuZWZpdHMgbXVjaCBmcm9tIGJ1aWxkaW5nIG9u IHBlcmY6Cj4+Cj4+ICAgICBXZSBhcmVuJ3QgdXNpbmcgZXhpc3RpbmcgcGVyZiBiYXNlZCB0b29s aW5nIHdpdGggb3VyIFBNVS4gRXhpc3RpbmcKPj4gICAgIHRvb2xzIHR5cGljYWxseSBhc3N1bWUg eW91J3JlIHByb2ZpbGluZyB3b3JrIHJ1bm5pbmcgb24gYSBjcHUsIGUuZy4KPj4gICAgIGV4cGVj dGluZyBzYW1wbGVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBpbnN0cnVjdGlvbiBwb2ludGVycyBh bmQKPj4gICAgIHVzZXIva2VybmVsIHJlZ2lzdGVycyBhbmQgYWltaW5nIHRvIHJlcHJlc2VudCBt ZXRyaWNzIGluIHJlbGF0aW9uCj4+ICAgICB0byBhcHBsaWNhdGlvbiBzb3VyY2UgY29kZS4gV2Un cmUgZm9yd2FyZGluZyBmYWtlIHJlZ2lzdGVyIHZhbHVlcwo+PiAgICAgYW5kIHVzZXJzcGFjZSBu ZWVkcyBuZWVkcyB0byBrbm93IGhvdyB0byBkZWNvZGUgdGhlIHJhdyBPQSByZXBvcnRzCj4+ICAg ICBiZWZvcmUgYW55dGhpbmcgY2FuIGJlIHJlcG9ydGVkIHRvIGEgdXNlci4KPj4KPj4gICAgIFdp dGggdGhlIGJ1ZmZlcmluZyBkb25lIGJ5IHRoZSBPQSB1bml0IEkgZG9uJ3QgdGhpbmsgd2UgY3Vy cmVudGx5Cj4+ICAgICBiZW5lZml0IGZyb20gcGVyZidzIG1tYXBwZWQgY2lyY3VsYXIgYnVmZmVy IGludGVyZmFjZS4gV2UgYWxyZWFkeQo+PiAgICAgaGF2ZSBhIGRlY291cGxlZCBwcm9kdWNlciBh bmQgY29uc3VtZXIgYW5kIHNpbmNlIHdlIGhhdmUgdG8gY29weSBvdXQKPj4gICAgIG9mIHRoZSBP QSBidWZmZXIsIGl0IHdvdWxkIHdvcmsgd2VsbCBmb3IgdXMgdG8gaGlkZSB0aGF0IGNvcHkgaW4K Pj4gICAgIGEgc2ltcGxlciByZWFkKCkgYmFzZWQgaW50ZXJmYWNlLgo+Pgo+Pgo+PiAtIExvZ2lz dGljYWxseSBpdCBtaWdodCBiZSBtb3JlIHByYWN0aWNhbCB0byBjb250YWluIHRoaXMgdG8gdGhl Cj4+ICAgZ3JhcGhpY3Mgc3RhY2suCj4+Cj4+ICAgICBJdCBzZWVtcyBmYWlyIHRvIGNvbnNpZGVy IHRoYXQgaWYgd2UgY2FuJ3Qgc2VlIGEgdmVyeSBjb21wZWxsaW5nCj4+ICAgICBiZW5lZml0IHRv IGJ1aWxkaW5nIG9uIHBlcmYsIHRoZW4gY29udGFpbmluZyB0aGlzIHdvcmsgdG8KPj4gICAgIGRy aXZlcnMvZ3B1L2RybS9pOTE1IG1heSBzaW1wbGlmeSB0aGUgcmV2aWV3IHByb2Nlc3MgYXMgd2Vs bCBhcwo+PiAgICAgZnV0dXJlIG1haW50ZW5hbmNlIGFuZCBkZXZlbG9wbWVudC4KPgo+PiBQZXRl cjsgSSB3b25kZXIgaWYgeW91IHdvdWxkIHRlbmQgdG8gYWdyZWUgdG9vIHRoYXQgaXQgY291bGQg bWFrZSBzZW5zZQo+PiBmb3IgdXMgdG8gZ28gd2l0aCBvdXIgb3duIGludGVyZmFjZSBoZXJlPwo+ Cj4gU29ycnkgdGhpcyB0b29rIHNvIGxvbmc7IHRoaXMgd2FudGVkIGEgd2VsbCBjb25zaWRlcmVk IHJlc3BvbnNlIGFuZAo+IHRob3NlIHRlbmQgdG8gZ2V0IGRlbGF5ZWQgaW4gbGlnaHQgb2YgJ3Vy Z2VudCcgc3R1ZmYuCj4KPiBXaGlsZSBJIGNhbiBjZXJ0YWlubHkgc2VlIHRoZSBwYWluIHBvaW50 cyBhbmQgd2h5IHlvdSB3b3VsZCByYXRoZXIgbm90Cj4gZGVhbCB3aXRoIHRoZW0uIEkgdGhpbmsg aXQgd291bGQgbWFrZSBMaW51eCBhIGJldHRlciBwbGFjZSBpZiB3ZSBjb3VsZAo+IG1hbmFnZSB0 byBjb21lIHVwIHdpdGggYSBnZW5lcmljIGludGVyZmFjZSB0aGF0IHdvdWxkIHdvcmsgZm9yICdh bGwnCj4gR1BVcyAoYW5kIHBvc3NpYmx5IG1vcmUgZGV2aWNlcykuCgpJJ20gbm90IHN1cmUgYSBn ZW5lcmljIG11bHRpLXZlbmRvciBpbnRlcmZhY2UgZm9yIGdwdSBtZXRyaWNzIGlzCndoYXQncyBh dCBzdGFrZSBvciByZWFsbHkgbmVlZGVkIGhlcmUuIFRoZSBwZXJmIGRyaXZlciBJIHdvcmtlZCBv bgpkaWRuJ3QgYXR0ZW1wdCB0byBwcm92aWRlIGEgZ2VuZXJpYyBpbnRlcmZhY2U6IEUuZy4gY291 bnRlcgpub3JtYWxpemluZyBpcyByZWxhdGl2ZWx5IGNvbXBsZXggYW5kIEhXIHNwZWNpZmljIGJ1 dCBtYWtlcyBzZW5zZSB0bwpsZWF2ZSB0byB1c2Vyc3BhY2UuIE5vcm1hbGl6aW5nIG1heSBjb21i aW5lIHBlcmlvZGljIE9BIHJlcG9ydHMgKGZyb20KcGVyZikgd2l0aCBNSV9SRVBPUlRfUEVSRl9D T1VOVCByZXBvcnRzIGdvdCB2aWEgYSBjb21tYW5kIHN0cmVhbSAgKG5vdAppbnZvbHZpbmcgcGVy ZikuIE5vcm1hbGl6aW5nIG1pZ2h0IGFsc28gYmUgZG9uZSBvZmZsaW5lIG9yIHJlbW90ZWx5CmZv ciBhIHJlZHVjZWQgcnVudGltZSBvdmVyaGVhZCkuCgpBbHRob3VnaCBpdCBjb3VsZCBiZSBnb29k IHRvIHdvcmsgbW9yZSBjbG9zZWx5IHdpdGggU2FtdWVsIG9uIHRoaXMsIEkKZGlkIHJhaXNlIHRo ZSBpZGVhIG9mIHVzaW5nIHBlcmYgd2l0aCBoaW0gbGFzdCB5ZWFyIGJ1dCBJIHRoaW5rIGhpcwpw cmlvcml0eSBpcyBzdGlsbCB3aXRoIGFjY2Vzc2luZyBtZXRyaWNzIHN5bmNocm9uaXplZCB3aXRo IHRoZSBjb21tYW5kCnN0cmVhbS4gV2Ugd2VyZSBsb29raW5nIGF0IGEgcGVyZi1saWtlIGludGVy ZmFjZSB0byBoZWxwIHN1cHBvcnQgdGhlCnBlcmlvZGljIHNhbXBsaW5nIGZlYXR1cmUgb2YgdGhl IE9BIHVuaXQsIGJ1dCBJJ20gbm90IGF3YXJlIHRoYXQKTnZpZGlhIEhXIGhhcyB0aGUgc2FtZSBr aW5kIG9mIGZlYXR1cmUuCgpJIHRoaW5rIGl0J3MgbW9yZSB0aGUgbm9ybSB0aGF0IEdQVSBkcml2 ZXJzIGRvbid0IHNoYXJlIGEgbG90IG9mCmtlcm5lbCBpbnRlcmZhY2VzIGdpdmVuIHRoZSBzaWdu aWZpY2FudCBhcmNoaXRlY3R1cmFsIGRpZmZlcmVuY2VzCmJldHdlZW4gdmVuZG9ycy4gQSBsYXJn ZSBwcm9wb3J0aW9uIG9mIGEgR1BVIGRyaXZlciBpcyB0eXBpY2FsbHkgaW4KdXNlcnNwYWNlIGFu ZCBpbnRlcmZhY2Ugc3RhbmRhcmRpc2F0aW9uIGlzIGRvbmUgYXQgdGhlIE9wZW5HTC9DTCBsZXZl bAptb3JlIHNvIHRoYW4gd2l0aCBrZXJuZWwgaW50ZXJmYWNlcy4gV2hpbGUgcGVyZiBtYXkgYmUg YWRhcHRhYmxlIHRvCmhlbHAgYWNjZXNzIHNvbWUgZ3B1L2RldmljZSBtZXRyaWNzIGl0J3Mgbm90 IGluIGEgZ29vZCBwb3NpdGlvbiB0byBiZQppbnZvbHZlZCB3aXRoIGNhcHR1cmluZyBtZXRyaWNz IHZpYSBjb21tYW5kIHN0cmVhbXMgaW4gc3luYyB3aXRoCnNwZWNpZmljIGNvbW1hbmRzIHN1Ym1p dHRlZCBpbiB1c2Vyc3BhY2Ugc28gSSB3b3VsZG4ndCBleHBlY3QgdG8gYWltCmZvciBwZXJmIHRv IGJlIHRoZSBzb2xlIGludGVyZmFjZSBmb3IgZ3B1IG1ldHJpY3MuCgoKT2tleSwgc29ycnkgdG8g c3RpbGwgYmUgaW5jbGluZWQgdG8gcHJpb3JpdGl6ZSB0aGUgbm9uLXBlcmYgaW50ZXJmYWNlCmF0 IHRoaXMgc3RhZ2UsIGF0IGxlYXN0IGZvciBPQSB1bml0IG1ldHJpY3MuIFRoYXQgc2FpZDsgSSB0 aGluayBpdCBtYXkKc3RpbGwgYmUgcHJhY3RpY2FsIHRvIGxvb2sgYXQgZXhwb3Npbmcgb3RoZXIg bW1pbyBhY2Nlc3NpYmxlIGNvdW50ZXJzCm9mIEdlbiBncmFwaGljcyB2aWEgcGVyZiBhbmQgbWF5 YmUgdGhlc2UgY291bGQgc2VydmUgYXMgYSBzdGVwcGluZwpzdG9uZSBiZWZvcmUgYXR0ZW1wdGlu ZyBzdXBwb3J0aW5nIHRoZSBPQSB1bml0IHZpYSBwZXJmLgoKSSdtIHN0aWxsIG9wZW4gdG8gdHJ5 aW5nIHRvIGhlbHAgd2l0aCBhZGFwdGluZyBwZXJmIGluIHRoaXMgZGlyZWN0aW9uCmlmIHlvdSBm ZWVsIGl0IGNvdWxkIGJlIHdvcnRod2hpbGUsIGJ1dCB3b3VsZCBsaWtlIHRvIGRlY291cGxlIHRo ZQplZmZvcnQgZm9yIG5vdy4KClJlZ2FyZHMsCi0gUm9iZXJ0Cl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==