Re: [PATCH 1/5] mtd: spi-nor: Refactor Read Status/Write Status support
Miquel Raynal <[email protected]> Tue, 04 Aug 2026 16:57:26 +0200
| Newsgroups | org.infradead.lists.linux-mtd,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
SGVsbG8gTWljaGFlbCwKCk9uIDA3LzA3LzIwMjYgYXQgMTE6NDM6NDQgKzAyLCAiTWljaGFlbCBX YWxsZSIgPG13YWxsZUBrZXJuZWwub3JnPiB3cm90ZToKCj4gSGkgTWlxdWVsLAo+Cj4gdGhhbmtz IGZvciBkb2luZyB0aGlzIChzb21ld2hhdCB0aGFua2xlc3MpIHRhc2suIEkgYnJpZWZseSBza2lt bWVkCj4gb3ZlciB0aGlzIHBhdGNoLi4gW09rIGNvbWluZyBiYWNrIGhlcmUsIGl0J3MgcXVpdGUg YSBiaWdnZXIKPiBmZWVkYmFjay4gQW5kIEknbSBzb3JyeSBpZiBpdCdzIHNvbWV0aW1lIGNvbmZ1 c2luZywgSSB3YXMganVtcGluZwo+IGJhY2sgYW5kIGZvcnRoXS4KClRoYW5rcyBhIGxvdCBmb3Ig ZG9pbmcgdGhhdCByZXZpZXcsIHdoaWNoIEkga25vdyBpcyBwYWluZnVsLgoKPiBPbiBGcmkgTWF5 IDI5LCAyMDI2IGF0IDY6MDUgUE0gQ0VTVCwgTWlxdWVsIFJheW5hbCB3cm90ZToKPj4gU1BJIE5P UiBoYXMgYSBsb3Qgb2YgaGlzdG9yeS4gQWRkaXRpb25zIG92ZXIgYWRkaXRpb25zLCB0aGUgc3Vi dGxldGllcwo+PiBvZiB0aGUgSkVTRDIxNiBzcGVjaWZpY2F0aW9uLCB0aGVpciBpbXBsZW1lbnRh dGlvbnMgYnkgdGhlIG1hbnVmYWN0dXJlcnMKPj4gYW5kIHRoZSBoYXJkd2FyZSBtaXN0YWtlcyBo YXZlIGdlbmVyYXRlZCBhIGdpZ2FudGljIG1hemUsIGxldCdzIHRyeSB0bwo+PiB1bmRlcnN0YW5k IHdoYXQgaXMgcmVhbGx5IG5lZWRlZC4KPj4KPj4gVGhlIHNwZWNpZmljYXRpb24gZXhwbGFpbnMg dGhlIFFFIChRdWFkIEVuYWJsZSkgYml0ZmllbGQgYXMgZGVzY3JpYmluZwo+PiB3aGVyZSB0aGUg Yml0IHRvIGVuYWJsZSB0aGUgUXVhZCBjYXBhYmlsaXR5IGlzLCBidXQgYWxzbyBob3cgdG8gc2V0 Cj4+IGl0Lgo+Cj4gSSB0aGluayB0aGUgc3RhbmRhcmQganVzdCB3cm90ZSBkb3duIHdoYXQgYWxs IHRoZSBkaWZmZXJlbnQgdmVuZG9ycwo+IHdlcmUgZG9pbmcuIFNvIGl0IGRpZG4ndCByZWFsbHkg c3RhcnQgYXMgIm9uZSIgc3RhbmRhcmQgYnV0IGp1c3QKPiBjb2xsZWN0ZWQgYWxsIHRoZSBkaWZm ZXJlbnQgdmFyaWFudHMgZnJvbSBhbGwgdGhlIHZlbmRvcnMuIEFsc28sIGl0Cj4gc2VlbXMgdGhh dCB0aGUgc3RhbmRhcmQgaXMgb25seSBpbnRlcmVzdGVkIGluIGhvdyB0byBlbmFibGUgdGhlCj4g cXVhZCBJTyBtb2RlLiBFdmVyeXRoaW5nIGVsc2UgaXMgZ3Vlc3N3b3JrLiBCdXQgaWZmIGEgZ2l2 ZW4gdmVuZG9yCj4gc3RpY2sgdG8gaXRzIGltcGxlbWVudGF0aW9uLCBjaGFuY2VzIGFyZSB0aGF0 IHRoZSBRRVIgd2lsbAo+IGNvcnJlc3BvbmQgdG8gaG93IHRvIHJlYWQgYW5kIHdyaXRlIHN0YXR1 cyByZWdpc3RlcnMuIFNvIGZvciBvdXIKPiBndWVzc3dvcmssIHdlIGNhbiB1c2UgYSBRRVItdG8t InNyIGFjY2VzcyIgbWFwcGluZyBhcyBhIGJhc2VsaW5lLgo+IFdlIHNob3VsZCBtYXAgdGhlIFFF UiBlbnVtZXJhdGlvbiB0byB2ZW5kb3JzIHRvIGdldCBhIGJldHRlcgo+IHVuZGVyc3RhbmRpbmcg bm93IGFuZCBpbiB0aGUgZnV0dXJlLgoKSXQgc2VlbXMgbW9yZSBjb21wbGV4IHRoYW4gdGhhdCwg YmVjYXVzZSBpbmRlZWQgaXQgYWxsIHN0YXJ0ZWQgd2l0aCBhCnN0YXR1cyBvZiB3aGF0IHdlcmUg KG1vcmUgb3IgbGVzcykgZG9pbmcgdGhlIHZlbmRvcnMuIFVuZm9ydHVuYXRlbHkgdGhleQpkaWQg bm90IHN0aWNrIHRvIHRoYXQgbWV0aG9kLCBzbyBpdCBpcyBub3QgcG9zc2libGUgdG8gaWRlbnRp ZnkgInZlbmRvcgpYID0+IFFFUiBZIi4gQW5kIGl0IGNvbnRpbnVlcyB0byBldm9sdmUgKGFzIGlu IHBhdGNoIDIpLiBBbmQgVEJIIEkgZG9uJ3QKaGF2ZSB0aGUgaGlzdG9yeSwgYnV0IGlmIHNvbWVv bmUgd2FudHMgdG8gc3BhcmtsZSB0aGUgU0ZEUCBzd2l0Y2ggd2l0aApzdXJnaWNhbCBjb21tZW50 cywgSSBhZ3JlZSBpdCdzIGludGVyZXN0aW5nIHRvIGtlZXAgYSB0cmFjZS4KCj4gQWxzbywgSSBo YXZlbid0IGZvdW5kIGEgdmVuZG9yIHdoaWNoIGlzIHVzaW5nIHRoZSAzRWgvM0ZoIG9wY29kZXM/ IQoKR29vZCBxdWVzdGlvbiwgSSBoYXZlIG5vIGlkZWEgZWl0aGVyLCBidXQgaWYgSSByZW1vdmUg aXQgSSBmZWFyIGV2ZW4KbW9yZSBwdXNoYmFjayA6KQoKPj4gVW5mb3J0dW5hdGVseSwgdGhlIHNw ZWNpZmljYXRpb24gaXMgbm90IHByZWNpc2UgYWJvdXQgd2hhdCBvcGNvZGVzCj4+IGFyZSBzdXBw b3J0ZWQgZXhhY3RseSBpbiBhbGwgdGhlIGNhc2VzLiBUaGVyZSBpcyBhbiBpbnRyb2R1Y3Rpb24g dGhhdAo+PiBiYXNpY2FsbHkgc3RhdGVzOgo+PiAtIE9wY29kZSAweDA1IHJlYWRzIFNSMSwgYW5k IHRoZW4gU1IyIGlmIGFub3RoZXIgYnl0ZSBpcyByZWFkCj4KPiBXaGVyZSBpcyB0aGF0PyBJdCBv bmx5IHN0YXRlcyB0aGF0IDA1IHJlYWRzIHNyMSwgbm8/CgpZb3UgYXJlIHJpZ2h0LCBteSBiYWQu IFdoYXQgYSBzbmlwZXIgOikKCkkgd2lsbCBjb3JyZWN0IHRoZSBjb21taXQgbG9nIGFuZCB0aGUg Y29kZS4KCj4+IC0gT3Bjb2RlIDB4MzUgYWxsb3dzIHRvIHJlYWQgU1IyCj4+IC0gT3Bjb2RlIDB4 MDEgd3JpdGVzIFNSMSwgYW5kIHRoZW4gU1IyIGlmIGFub3RoZXIgYnl0ZSBpcyB3cml0dGVuCj4K PiBBY2suCj4KPiBCdXQgcmVhZGluZyB0aGUgaW5kaXZpZHVhbCBRRVIgbWV0aG9kcyBiZWxvdywg SSdtIG5vdCBzdXJlLCBpZiB0aGF0Cj4gaXMgcmVhbGx5IHRoZSBiYXNlbGluZSBoZXJlLgoKVGhp cyBpcyB3aGF0IHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlIFFFUiBmaWVsZCBzdGF0ZXMuIFRoZW4s IGV2ZXJ5IGZpZWxkCnNsaWdodGx5IG1vZGlmaWVzIHRoYXQgYmFzZWxpbmUsIGV4Y2VwdCAxMDEg d2hpY2ggSUlSQyBpcyBtb3JlIG9yIGxlc3MKdGhlIG5vbWluYWwgYmVoYXZpb3VyIHdpdGhvdXQg c3VidGxldHkuCgo+IEkgbWVhbiAxMDFiIGNvcnJlc3BvbmRzIHRvIGV4YWN0bHkKPiB0aGF0LCBu bz8KCkluIHRoZSBzcGVjLCB5ZXMuIEluIHRoZSBpbXBsZW1lbnRhdGlvbiwgbm8sIHNpbmNlIChJ IGJlbGlldmUgZm9yIHdyb25nCnJlYXNvbnMpIFNSMSBjYW5ub3QgYmUgd3JpdHRlbiBhbG9uZS4g U28gd2UgZm9yY2UgMiBieXRlcyB3cml0ZXMgaW4gdGhpcwpjYXNlLCBJIGFtIG5vdCBjaGFuZ2lu ZyB0aGlzLgoKPj4gVGhlbiB0aGUgYml0ZmllbGQsIGFtb25nIGluZGljYXRpbmcgdGhlIGxvY2F0 aW9uIG9mIHRoZSBRRSBiaXQsIG1heQo+PiBpbmRpY2F0ZToKPj4gLSBSZWFkaW5nIFNSMSBhbmQg U1IyIGluIG9uZSBvcGVyYXRpb24gaXMgbm90IHBvc3NpYmxlIChsb29wcyBvdmVyIHRoZQo+PiAg IGNvbnRlbnQgb2YgU1IxKQo+PiAtIFJlYWRpbmcgU1IyIGRpcmVjdGx5IGlzIHBvc3NpYmxlCj4+ IC0gV3JpdGluZyBTUjEgc21hc2hlcyBTUjIKPgo+IFlvdSBtZWFuIHdyaXRpbmcganVzdCBvbmUg Ynl0ZSB3aXRoIDAxaCwgd2lsbCBzZXQgc3IyIHRvIHplcm8uIElPVywKPiB5b3UnbGwgaGF2ZSB0 byBhbHdheXMgd3JpdGUgdHdvIGJ5dGVzIGlmIHVzaW5nIDAxaC4KClllcy4gSSB3aWxsIG1ha2Ug aXQgbW9yZSBjbGVhciBpbiB0aGUgbmV4dCBpdGVyYXRpb24uCgo+IFdoYXQgd2UgYWxzbyBkb24n dCBrbm93IGlzIGhvdyBtYW55IHN0YXR1cyByZWdpc3RlcnMgdGhlcmUgYWN0dWFsbHkKPiBhcmUu CgpWZXJ5IHRydWUsIGFuZCBzb2x2ZSB3aXRoIHRoaXMgYXBwcm9hY2hlZCBidHcuIEZvciBub3cg SSBkb24ndCBuZWVkCml0LCBidXQgdGhlIFJWIGNoaXBzIGZlYXR1cmUgYSB0aGlyZCBzdGF0dXMg cmVnaXN0ZXJzLgoKPj4gT25lIHByb2JsZW0gd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlv biwgaXMgdGhhdCBpdCBvbmx5IGZvY3VzZXMgb24KPj4gdGhlIFFFIGJpdC4gQSBxdWFkX2VuYWJs ZSBmdW5jdGlvbiB3YXMgY3JlYXRlZCBmb3IgZWFjaCBjYXNlLCBldmVuCj4+IHRob3VnaCBpbiBw cmFjdGljZSwgdGhlIGxvZ2ljIHdhcyBhbHdheXMgdGhlIHNhbWU6IHJlYWQsIG1vZGlmeSwgd3Jp dGUsCj4+IHJlYWQgYmFjayBhbmQgdmVyaWZ5LiBPbmUgcHJvYmxlbSBjb21lcyB3aGVuIG90aGVy IGZlYXR1cmVzIG5lZWQgdG8gcGxheQo+PiB3aXRoIHRoZSBzdGF0dXMgcmVnaXN0ZXJzLCBsaWtl IHNvZnR3YXJlIGJsb2NrIHByb3RlY3Rpb24gb3IgT1RQOiB5b3UKPj4gbmV2ZXIga25vdyBob3cg dG8gcHJvcGVybHkgaGFuZGxlIHRoZSBRRSBiaXQsIG5vciB3aGVyZSBpdCBpcywgbm9yIGhvdwo+ PiB0byByZWFkL3dyaXRlIHRoZSBTdGF0dXMgcmVnaXN0ZXJzLiBUaGlzIGxlYWQgdG8KPj4gYXBw cm94aW1hdGlvbnMvZ3Vlc3NpbmcgKGluIHN3cC5jLCBvdHAuYyBhbmQgb2J2aW91c2x5IGluIGxl Z2FjeQo+PiBjb250cm9sbGVyIGRyaXZlcnMgbGlrZSBhdG1lbC5jKSBidXQgYWxzbyB0byB0aGUg aW1wbGVtZW50YXRpb24gb2YgYQo+PiBnYXppbGxvbiBvZiBoZWxwZXJzIGZvciByZWFkaW5nL3dy aXRpbmcvY2hlY2tpbmcgdGhlIHN0YXR1cyByZWdpc3RlcnMuCj4KPiBNaD8gd2h5IGRvIHdlIGhh dmUgdG8ga25vdyB0aGUgUUUgYml0IGluIG90aGVyIHBhcnRzPyBXZSBzaGFsbCBqdXN0Cj4gcmVh ZC1tb2RpZnktd3JpdGUgdGhlIHN0YXR1cyByZWdpc3RlcnMsIG5vPwoKSSBhbSBzb3JyeSBJJ20g bm90IHN1cmUgSSBnZXQgdGhlIHF1ZXN0aW9uIGhlcmUgbGV0IG1lIGF0dGVtcHQgYSBmdWxsCmFu c3dlci4KCk5vLCBybXcgaXMgbm90IGFsd2F5cyB0aGUgd2F5IHRvIGdvLCBvbmUgbXVzdCBiZSBt b3JlIGNhcmVmdWwsIHNpbmNlIHlvdQpjYW5ub3QgcmVhZCBTUjIgc29tZXRpbWVzIGFuZCBjYW5u b3QganVzdCB3cml0ZSBvbmx5IFNSMSB3aXRob3V0IHJpc2tpbmcKdG8gbG9vc2UgU1IyIHNvbWUg b3RoZXIgdGltZXMuCgpIb3dldmVyLCBJIGRvbid0IHdhbnQgdGhhdCBjb21wbGV4aXR5IHRvIGJl IGhhbmRsZWQgYnkgYWxsIHRoZSBjYWxsZXJzLApoZW5jZSBJIGFtIHByb3Bvc2luZyBoaWdoLWxl dmVsIGhlbHBlcnMgZm9yIHRoYXQuCgo+PiBJbiBhZGRpdGlvbiwgSSBiZWxpZXZlIHNvbWUgZGVz aWduIGRlY2lzaW9ucyBoYWQgYSBuZWdhdGl2ZSBpbXBhY3Qgb3Zlcgo+PiB0aGUgeWVhcnMuCj4+ Cj4+IC0gQWxsIHBvc3NpYmxlIHNpdHVhdGlvbnMgaGFkIHRvIGJlIGZsYWdnZWQgYnkgdGhlIGNv cmUuIFRoaXMgaXMgbGlrZWx5Cj4+ICAgd3JvbmcsIGJlY2F1c2Ugd2Ugbm8gbG9uZ2VyIGtub3cg d2h5IHdlIG5lZWQgc3BlY2lmaWMgcXVpcmtzLiBJdCB3YXMKPj4gICBpbmVoZXJlbnQgdG8gdGhl IHN0YXRlIG9mIHRoZSBTUEkgTk9SIGNvcmUgYmVmb3JlIHRoZSBncmVhdCBjbGVhbnVwCj4+ICAg dGhhdCBoYWQgaGFwcGVuZWQgdGhlIHBhc3QgZmV3IHllYXJzLiBJIGJlbGlldmUgdGhpcyBjcmVh dGVzIGNvbmZ1c2lvbgo+PiAgIGluIHRoZSBjb3JlIHRvZGF5LCBhbmQgd2Ugc2hvdWxkIHB1c2gg dGhpcyB0byB2ZW5kb3IgZml4dXBzCj4+ICAgaW5zdGVhZC4gQXMgYW4gZXhhbXBsZSwgaW4gMjAy MyBIc2luLVlpIHdhcyBmYWNpbmcgYW4gaXNzdWUgYmVjYXVzZQo+PiAgIGhpcyBjaGlwIHdhcyBz ZXR0aW5nIHRoZSB3cm9uZyBRRVIgdmFsdWUsIGxlYWRpbmcgdG8gUkRDUiBiZWluZwo+PiAgIHBy ZXZlbnRlZCwgdGh1cyBmYWxsaW5nIGludG8gYSBjb25kaXRpb24gYmxpbmRseSBzZXR0aW5nIGEg cmFuZG9tIFFFCj4+ICAgYml0IChJIHN0cm9uZ3kgYmVsaWV2ZSBpdCBpcyBkb25lIGxpa2UgdGhh dCBmb3Igd3JvbmcgcmVhc29ucykuIEhpcwo+PiAgIGNoaXAgYWN0dWFsbHkgaGFkIFJEQ1Igc3Vw cG9ydCEgVGhlIGNvcnJlY3QgZml4IHNob3VsZCBoYXZlIGJlZW4gdG8KPj4gICBtYXJrIHRoZSBj YXBhYmlsaXR5IGluIGEgZGV2aWNlIGZpeHVwIGluc3RlYWQgb2YgaGFuZGxpbmcgdGhpcyBpbiB0 aGUKPj4gICBjb3JlLgo+Pgo+PiAgIExpbms6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwv Q0FKTVFLLWhSMGVhTzBiNFZkMFU4X0tBbmRMeVphcHFkSGpWTEFvZTQycldpOXJkTGtBQG1haWwu Z21haWwuY29tLwo+Cj4gWW91IG1lYW4gdGhlICJhbHdheXMgc2V0IHRoZSBRRVIgYml0Ij8KPgo+ IEkgYWdyZWUsIHRoaXMgc2hvdWxkIGJlIHB1c2hlZCBpbnRvIHRoZSB2ZW5kb3IgZml4dXBzLiBC dXQgd2hhdCBJCj4gcmVhbGx5IHdhbnQgdG8gYXZvaWQgaXMgdGhhdCB3ZSBoYXZlIHRvIGhhdmUg YSBuZXZlciBlbmRpbmcgbGlzdCBvZgo+IElEcyBmb3IgdGhlc2UgZml4dXBzLiBTbyB0aGVyZSBz aGFsbCBiZSBhIGdlbmVyaWMgdmVuZG9yIGZpeHVwLgoKSSBndWVzcyB3ZSBjYW4gaGF2ZSB0aGlz IGtpbmQgb2YgZml4dXBzLCB0aGVyZSBpcyBvbmUgaW4gbWFjcm9uaXguYyBhbmQKc29vbiBhbm90 aGVyIG9uZSBpbiB3aW5ib25kLmMuIEJ1dCBhdCB0aGUgbW9tZW50IEkganVzdCBjYW5ub3QgaW52 ZW50CnRoZW0uIEkgY2FuIG9ubHkgdHJhbnNsYXRlIHRoZSBleGlzdGluZyBvbmVzIGFuZCBjcnkg Zm9yIHRoZSBvdGhlcnMuCgo+IEFzIGEgc2lkZSBub2RlLCBJIHJlYWxseSBkb24ndCBsaWtlIGhv dyB0aGUgZml4dXBzIGFyZSBoYW5kbGVkIGF0Cj4gdGhlIG1vbWVudC4gIEkndmUgcHJvcG9zZWQg dGhhdCB3YXkgYmFjayBidXQgaXQgd291bGQgYmUgYXdlc29tZSB0bwo+IGJlIGFibGUgdG8ganVz dCByZWdpc3RlciBhIGZpeHVwIHdpdGgKPgo+IHJlZ2lzdGVyX3NwaV9ub3JfZml4dXAoU05PUl9J RCgweGVmLCAweDQwLCAweDE2KSwgd2luYm9uZF93MjVxMzJfZml4dXApOwo+IHJlZ2lzdGVyX3Nw aV9ub3JfZml4dXAoU05PUl9JRCgweGVmKSwgd2luYm9uZF9kZWZhdWx0X3Byb3BlcnRpZXMpOwoK QWFhYWFhaCwgdGhhdCB3b3VsZCBiZSBncmVhdC4gSXQgaXMgaW5kZWVkIGEgcHJvYmxlbSBjdXJy ZW50bHksIHNpbmNlIHdlCmNhbm5vdCAiYXNzaWduIiBhIGZpeHVwIHRvIHNldmVyYWwgY2hpcHMg ZWFzaWx5LCBpZiB0aGVzZSBjaGlwcyBhbHJlYWR5CmhhdmUgb3RoZXIgZml4dXBzLiBJIGZvdW5k IGEgbmVhdCB3YXkgaW4gdGhlIFdpbmJvbmQgZHJpdmVyICh0aGUKaXNfdzI1cXh4cnYoKSBoZWxw ZXIpIGJ1dCBpZiBzb21lb25lIGNvbWVzIHdpdGggc3VjaCBhIHNlcmllcywgSSdkIGJlCmFsbCBm b3IgaXQuCgpJZiBJIGdldCBib3RoZXJlZCB0b28gbXVjaCB3aXRoIHRoYXQgSSBtaWdodCBhbHNv IGRvIGl0IG15c2VsZiwgYnV0LApoZWgsIG9uZSBzdGVwIGF0IGEgdGltZSA6LSkKCj4gTWF5YmUg eW91IGhhdmUgc29tZSB0aG91Z2h0cyBvbiB0aGF0LiBJJ20gbm90IHN1cmUgd2UgcmVhbGx5IG5l ZWQKPiB0aGUgZGlzdGluY3Rpb24gYmV0d2VlbiBtYW51ZmFjdHVyZXIgZml4dXBzIGFuZCBwZXIg ZGV2aWNlIGZpeHVwcy4KPgo+IE5vdyBvYnZpb3VzbHksIHdpdGggb3VyIGlkIHJldXNlIHByb2Js ZW0sIHRoYXQgYWJvdmUgaXNuJ3QgZW5vdWdoLgo+IEkndmUgcHJvcG9zZWQgdG8gaGF2ZSBhIG1h dGNoIGZ1bmN0aW9uIGJhY2sgdGhhdCAtIGJ5IGRlZmF1bHQgLSBvbmx5Cj4gbWF0Y2hlcyB0aGUg aWQgLSBidXQgY2FuIGJlIG92ZXJ3cml0dGVuIHRvIG1hdGNoIGFueXRoaW5nIGVsc2UuIEkKPiBo YXZlIGFsc28gdGhvdWdodCBhYm91dCBqdXN0IGRvaW5nIGEgY2hlY2tzdW0gb3ZlciB0aGUgU0ZE UCBhbmQKPiBtYXRjaCB0aGF0LgoKQSBjaGVja3N1bSB3b3VsZCBiZSBzdXBlciBwYWluZnVsIHRv IG1haW50YWluLCBob3dldmVyIEkgd291bGQKZGVmaW5pdGVseSBnbyBmb3IgYSBwb3NzaWJsZSBo b29rIHRoYXQgc2F5cyB3aGV0aGVyIG9yIG5vdCB0aGUgZml4dXAKYXBwbGllcyAoYmFzZWQgb24g U0ZEUCBjb250ZW50LCBsaWtlIHRoZSBTRkRQIHZlcnNpb24gb3IgYW55dGhpbmcgZWxzZQp0aGF0 IGNvdWxkIGJlIGNoZWNrZWQpLiBUaGlzIHdvdWxkIGJlIGEgd2F5IHRvIGRlZHVwbGljYXRlIHRo ZSBlbnRyaWVzCndoZW4gdGhlcmUgaXMgYW4gSUQgcmV1c2UuCgo+IEFueSB0aG91Z2h0cyBvbiB0 aGF0Pwo+Cj4gQnV0IEkgZGlncmVzcy4uCgo6JykKCj4+IC0gU0ZEUCBwYXJzaW5nIGlzIG92ZXIg Y2F1dGlvdXMuIEkgYmVsaWV2ZQo+PiAgIEJGUFRfRFdPUkQxNV9RRVJfU1IyX0JJVDFfTk9fUkQg aXMgYWJ1c2l2ZSAobm90aGluZyBzdGF0ZXMgdGhhdCBSRENSIGlzCj4+ICAgbm90IHN1cHBvcnRl ZCksIGFuZCBCRlBUX0RXT1JEMTVfUUVSX1NSMl9CSVQxIGlzIGFsc28gb3V0IG9mCj4+ICAgc3Bl Y2lmaWNhdGlvbiB3aGVuIGZvcmNpbmcgMTYtYml0IFN0YXR1cyB3cml0ZXMuCj4KPiBBbHNvLCBJ IGRvbid0IHRoaW5rIEJGUFRfRFdPUkQxNV9RRVJfU1IyX0JJVDFfQlVHR1kgaXMgYSBnb29kIG5h bWUKPiA6KQoKWWVzLCBtYXliZSBJIGNhbiByZW5hbWUgaXQgbm93LgoKPj4gLSBTTk9SX0ZfSEFT XzE2QklUX1NSIGlzIG9ubHkgaW1wb3NpbmcgMTZiaXQgU3RhdHVzIHdyaXRlcywgd2hlcmVhcwo+ PiAgIHJlYWRzIGNhbiBzdGlsbCBiZSA4LWJpdCB3aWRlcyBhbmQgZXZlbiBzb21ldGltZXMgY2Fu IG9ubHkgYmUgOC1iaXQKPj4gICB3aWRlLgo+Pgo+PiAtIFRoZSB1c2FnZSBvZiBoZWxwZXJzIHZl cmlmeWluZyB0aGUgd3JpdGVzIHdhcyBhbHNvIHNwcmVhZCBmb3IgSU1ITyBubwo+PiAgIHJlYWxs eSBnb29kIHJlYXNvbi4gV2h5IHNob3VsZG4ndCB3ZSB0cnVzdCBzcGkgb3BlcmF0aW9ucyB3aGVu IGl0Cj4+ICAgY29tZXMgdG8gU3RhdHVzIFJlZ2lzdGVycz8gV2UgZG8gbm90IHJlYWQgYmFjayBv dXIgcGFnZSByZWFkcywgc28gd2h5Cj4+ICAgc3RhdHVzIHJlZ2lzdGVycyBzaG91bGQgYmUgdHJl YXRlZCB3aXRoIHNvIG11Y2ggY2FyZSwgaWYgaXQncyBub3QKPj4gICBiZWNhdXNlIHdlIGFyZSB1 bnN1cmUgb2Ygd2hhdCBpcyBiZWluZyBkb25lPyBNeSBwcm9wb3NhbCBpbmNsdWRlcyBhCj4+ICAg Y2hlY2sgd2hlbiBpdCBjb21lcyB0byB0aGUgUUUgYml0IChkb25lIG9uY2UpIGJ1dCB3ZSBkb24n dCBuZWVkIHRoZXNlCj4+ICAgY2hlY2tzIG90aGVyd2lzZS4gSWYgdGhlIFFFIGJpdCB3YXMgd3Jp dHRlbiBwcm9wZXJseSwgdGhlcmUgYXJlIGhpZ2gKPj4gICBjaGFuY2VzIHRoYXQgdGhlIG90aGVy IHJlZ2lzdGVyIGFjY2Vzc2VzIHdpbGwganVzdCBiZSBmaW5lLCBubz8KPgo+IE9uZSB0aGluZyB0 aGF0IGNvbWVzIHRvIG1pbmQgaXMgaGFyZHdhcmUgd3JpdGUgcHJvdGVjdGlvbi4gSWYKPiB0aGVy ZSdzIG5vdGhpbmcgYmVmb3JlIHRoYXQgY29kZSB3aGljaCBjaGVja3MgaXQsIHRoZSB2ZXJpZnkg bWlnaHQKPiBmYWlsIGlmIHRoZSBoYXJkd2FyZSB3cml0ZSBwcm90ZWN0aW9uIGlzIGVuYWJsZWQu IFNvIHdlIHNob3VsZAo+IHNvbWVob3cgY2hlY2sgZm9yIHRoYXQgYW5kIGRyb3AgdGhlIHZlcmlm eSBoZXJlLgoKQnV0IGhvdyBkbyB5b3UgdGhpbmsgd2Ugc2hvdWxkIGhhbmRsZSBpdD8gV2lsbCB0 aGUgUUUgYml0IHdyaXRpbmcKdmVyaWZpY2F0aW9uIGZhaWwgaWYgSFcgV1AgaXMgZW5hYmxlZD8K Cj4KPj4gQXNkZSBmcm9tIG15IG1haW4gcXVlc3QsIEkgYWxzbyBvYnNlcnZlZCBubyBnb29kIHJl YXNvbiB0byBhc2sgdGhlCj4+IHJlYWQvd3JpdGUgc3RhdHVzIHJlZ2lzdGVyIGNhbGxlcnMgdG8g dXNlIG5vci0+Ym91bmNlYnVmIHdoaWxlIHRoZQo+PiBsb3ctbGV2ZWwgaGVscGVycyBjb3VsZCBk byBpdCB0aGVtc2VsdmVzICh3ZSBhcmUgdGFsa2luZyBhYm91dCBvbmUgb3IKPj4gdHdvIGJ5dGVz IGJlaW5nIGNvcGllZCkuCj4KPiBUb3RhbGx5IGFncmVlIQo+Cj4+IFNvIGFmdGVyIHRoZXNlIG9i c2VydmF0aW9ucywgbXkgcHJvcG9zYWwgaXMgdGhlIGZvbGxvd2luZzoKPj4gLSBDcmVhdGUgcHJp dmF0ZSBsb3cgbGV2ZWwgaGVscGVycyB0aGF0IGp1c3QgcmVhZCBvciB3cml0ZSBhIHN0YXR1cwo+ PiAgIHJlZ2lzdGVyLiBUaGV5IGFyZSBmbGV4aWJsZSwgd2UgY2FuIGdpdmUgdGhlIG9wY29kZSAo d2hpY2ggdmFyaWVzCj4+ICAgYmFzZWQgb24gdGhlIFNGRFAgUUVSIGZpZWxkKSBhbmQgdGhlIGxl bmd0aCAoMSBvciAyKS4KPj4gLSBDcmVhdGUgcHVibGljIGdlbmVyaWMgYWNjZXNzb3JzIHdoaWNo IHdpbGwgYmUgdXNlZCB0byByZWFkL3dyaXRlIHNyMQo+PiAgIGFuZC9vciBzcjIuIFRoaXMgaXMg d2hlcmUgYWxsIHRoZSBjbGV2ZXJuZXNzIHNoYWxsIGJlLiBUaGUgaGVscGVycyB1c2UKPj4gICB0 aGUgYXZhaWxhYmxlIG9wY29kZXMgZm9yIGEgZ2l2ZW4gY2hpcCBpbiBvcmRlciB0byBmdWxsZmls bCB0aGUKPj4gICByZXF1ZXN0Lgo+PiAtIFByb3ZpZGUgYSBzaW5nbGUgZ2VuZXJpYyAtPnF1YWRf ZW5hYmxlKCkgaG9vayB3aGljaCBnZW5lcmljYWxseSBkb2VzCj4+ICAgYWxsIHRoZSBzdGVwcyBt ZW50aW9uZWQgYWJvdmUgKHJlYWQsIG1vZGlmeSwgd3JpdGUsIHJlYWQgYmFjayBhbmQKPj4gICB2 ZXJpZnkpLgo+PiAtIENyZWF0ZSBhIGxpc3Qgb2Ygb3Bjb2RlcyBmb3IgYWxsIDYgcG9zc2libGUg c2l0dWF0aW9uczoKPj4gICB7cmVhZCwgd3JpdGV9IHtzcjEsIHNyMiwgc3IxIGFuZCBzcjJ9LiBU aGVzZSBvcGNvZGVzIGFyZQo+PiAgIGZpbGxlZC9jbGVhcmVkIGJhc2VkIG9uIHRoZSBRRVIgZmll bGQuIEFuIG9wY29kZSBzZXQgdG8gMCBpbmRpY2F0ZXMKPj4gICB0aGUgYWJzZW5jZSBvZiBzdXBw b3J0ICh0aGVyZSBpcyBubyAweDAwIG9wY29kZSBpbiBTUEkgTk9SKS4KPgo+IEhvdyB3b3VsZCB3 ZSBmaWxsIHRoZXNlIGZpZWxkcyBmb3IgZmxhc2hlcyB3aXRob3V0IFNGRFA/IEkgZ3Vlc3MKPiBi eSB2ZW5kb3IgaW4gdGhlIHZlbmRvciBtb2R1bGVzLgoKTm9uIFNGUEQgY2hpcHMgYXJlIGFscmVh ZHkgdXNpbmcgdGhlICJkZWZhdWx0IiB0aGF0IHRoZSBjb3JlIGltcGxpZXMsIEkKYW0gbm90IGNo YW5naW5nIHRoYXQgKGp1c3QgdHJhbnNsYXRlZCBpdCB0byB0aGUgbmV3IGZvcm1hbGlzbSkuCgo+ PiBJIHRyaWVkIG15IGJlc3QgdG8gYW5hbHl6ZSB0aGUgY3VycmVudCBiZWhhdmlvciBhbmQgdG8g bWltaWMgaXQgYXMgbXVjaAo+PiBhcyBwb3NzaWJsZSwgYnV0IHRoaXMgaXMgYSByaXNreSBjbGVh bnVwLiBIb3dldmVyLCBpZiB3ZSBnbyBmb3IgdGhpcywgaXQKPj4gd2lsbCBiZSAqbXVjaCogZWFz aWVyIGluIHRoZSBmdXR1cmUgdG8gaGFuZGxlIGFsbCBraW5kIG9mIGNoaXAKPj4gdmFyaWF0aW9u cy4gV2Ugd29uJ3QgYmUgbGltaXRlZCB0byBhIGNvdXBsZSBvZiBmbGFncyBhbnltb3JlLCBidXQg cmF0aGVyCj4+IHdlJ2xsIGJlIGFibGUgdG8ganVzdCBkaXNhYmxlIGEgcmVhZCBvciB3cml0ZSBj YXBhYmlsaXR5IHVzaW5nIGEgc2luZ2xlCj4+IGxpbmUuCj4KPiBJJ2Qgb3AgZm9yIHRha2luZyB0 aGlzIGVhcmx5IGluIHRoZSBjeWNsZSBmb3IgYXQgbGVhc3QgdHdvIGN5Y2xlcy4KPiBJLmUuIGp1 c3QgbGV0IGl0IHNpdCBpbiBuZXh0IGFuZCBkb24ndCBpbmNsdWRlIGl0IGluIHRoZSBuZXh0IFBS LAo+IGJ1dCBvbmUgYWZ0ZXIgdGhhdC4KCkkgdmVyeSBtdWNoIGFncmVlIHdpdGggdGhpcy4gSWRl YWxseSBhdCAtcmMxLgoKWy4uLl0KCj4+ICsvKioKPj4gKyAqIHNwaV9ub3Jfd3JpdGVfc3JzX2xs KCkgLSBMb3ctbGV2ZWwgU3RhdHVzIFJlZ2lzdGVycyB3cml0ZS4KPj4gKyAqIEBub3I6CXBvaW50 ZXIgdG8gJ3N0cnVjdCBzcGlfbm9yJy4KPj4gKyAqIEBvcGNvZGU6CW9wY29kZSBmb3IgdGhlIHN0 YXR1cyByZWdpc3RlciB3cml0ZSBvcGVyYXRpb24uCj4+ICsgKiBAc3JzOglwb2ludGVyIHRvIHN0 YXR1cyByZWdpc3RlcnMgYnVmZmVyIHRvIHdyaXRlLgo+PiArICogQGxlbjoJbnVtYmVyIG9mIHN0 YXR1cyByZWdpc3RlcnMgdG8gd3JpdGUuCj4+ICsgKgo+PiArICogUmV0dXJuOiAwIG9uIHN1Y2Nl c3MsIC1lcnJubyBvdGhlcndpc2UuCj4+ICsgKi8KPj4gK3N0YXRpYyBpbnQgc3BpX25vcl93cml0 ZV9zcnNfbGwoc3RydWN0IHNwaV9ub3IgKm5vciwgdTggb3Bjb2RlLAljb25zdCB1OCAqc3JzLAo+ PiArCQkJCXVuc2lnbmVkIGludCBsZW4pCj4+ICt7Cj4+ICsJaW50IHJldCwgaTsKPj4gKwo+PiAr CXJldCA9IHNwaV9ub3Jfd3JpdGVfZW5hYmxlKG5vcik7Cj4+ICsJaWYgKHJldCkKPj4gKwkJcmV0 dXJuIHJldDsKPj4gKwo+PiArCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKPj4gKwkJbm9yLT5i b3VuY2VidWZbaV0gPSBzcnNbaV07Cj4+ICsKPj4gKwlpZiAobm9yLT5zcGltZW0pIHsKPj4gKwkJ c3RydWN0IHNwaV9tZW1fb3Agb3AgPSBTUElfTk9SX1dSU1JfT1Aob3Bjb2RlLAo+PiArCQkJCQkJ ICAgICAgIG5vci0+Ym91bmNlYnVmLCBsZW4pOwo+PiArCj4+ICsJCXNwaV9ub3Jfc3BpbWVtX3Nl dHVwX29wKG5vciwgJm9wLCBub3ItPnJlZ19wcm90byk7Cj4+ICsKPj4gKwkJcmV0ID0gc3BpX21l bV9leGVjX29wKG5vci0+c3BpbWVtLCAmb3ApOwo+PiArCX0gZWxzZSB7Cj4+ICsJCXJldCA9IHNw aV9ub3JfY29udHJvbGxlcl9vcHNfd3JpdGVfcmVnKG5vciwgb3Bjb2RlLAo+PiArCQkJCQkJICAg ICAgIG5vci0+Ym91bmNlYnVmLCBsZW4pOwo+PiArCX0KPj4gKwo+PiArCWlmIChyZXQpIHsKPj4g KwkJZGV2X2RiZyhub3ItPmRldiwgIkVycm9yICVkIHdyaXRpbmcgU3RhdHVzIFJlZ2lzdGVyc1xu IiwgcmV0KTsKPj4gKwkJcmV0dXJuIHJldDsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gc3BpX25v cl93YWl0X3RpbGxfcmVhZHkobm9yKTsKPj4gK30KPj4gKwo+PiAraW50IHNwaV9ub3JfcmVhZF9z cnMoc3RydWN0IHNwaV9ub3IgKm5vciwgdTggKnNyMSwgdTggKnNyMikKPgo+IG5pdHBpY2ssIGkg dGhpbmsgdGhpcyBpcyBhIHdlaXJkIG5hbWUuIEJ1dCBtYXliZSBpdCdzIGp1c3QgbWUuCj4KPiBX aGF0IGlmIHdlJ2QganVzdCBtYWtlIHRoZSBvbmUgc3RhdHVzIHJlZ2lzdGVyIGFzIHUzMj8gSSBt ZWFuIGluIHRoZQo+IHdpbmJvbmQgZGF0YXNoZWV0IGl0J3MgY2FsbGVkIFM3LVMwIGFuZCBTMTUt UzguIFRoYXQgd2F5IHdlIGFsc28KPiBkb24ndCBuZWVkIGEgdHdvIGJ5dGUgcWVfbWFzay4gVG8g b3B0aW1pemUgdGhlIHN0YW5kYXJkIHVzZWNhc2UgdG8KPiBwb2xsIHRoZSBXSVAgYml0LCB3ZSBj b3VsZCBhZGQgYSBieXRlIG1hc2suCj4KPj4gK3sKPj4gKwlzdHJ1Y3Qgc3BpX25vcl9mbGFzaF9w YXJhbWV0ZXIgKnBhcmFtcyA9IG5vci0+cGFyYW1zOwo+PiArCWludCByZXQ7Cj4+ICsKPj4gKwlp ZiAocGFyYW1zLT5yZWFkX3Nyc19vcGNvZGUgJiYKPj4gKwkgICAgKChzcjEgJiYgIXBhcmFtcy0+ cmVhZF9zcjFfb3Bjb2RlKSB8fCAoc3IyICYmICFwYXJhbXMtPnJlYWRfc3IyX29wY29kZSkpKSB7 Cj4+ICsJCXU4IHNyc1syXSA9IHt9Owo+PiArCj4+ICsJCXJldCA9IHNwaV9ub3JfcmVhZF9zcnNf bGwobm9yLCBwYXJhbXMtPnJlYWRfc3JzX29wY29kZSwgc3JzLCAyKTsKPj4gKwkJaWYgKHJldCkK Pj4gKwkJCXJldHVybiByZXQ7Cj4+ICsKPj4gKwkJaWYgKHNyMSkKPj4gKwkJCSpzcjEgPSBzcnNb MF07Cj4+ICsKPj4gKwkJaWYgKHNyMikKPj4gKwkJCSpzcjIgPSBzcnNbMV07Cj4+ICsKPj4gKwkJ cmV0dXJuIDA7Cj4+ICsJfQo+PiArCgpbLi4uXQoKPj4gQEAgLTMxMDYsMTEgKzI4MDQsMTQgQEAg c3RhdGljIHZvaWQgc3BpX25vcl9pbml0X2RlZmF1bHRfcGFyYW1zKHN0cnVjdCBzcGlfbm9yICpu b3IpCj4+ICAJY29uc3Qgc3RydWN0IGZsYXNoX2luZm8gKmluZm8gPSBub3ItPmluZm87Cj4+ICAJ c3RydWN0IGRldmljZV9ub2RlICpucCA9IHNwaV9ub3JfZ2V0X2ZsYXNoX25vZGUobm9yKTsKPj4g IAo+PiAtCXBhcmFtcy0+cXVhZF9lbmFibGUgPSBzcGlfbm9yX3NyMl9iaXQxX3F1YWRfZW5hYmxl Owo+PiAtCXBhcmFtcy0+b3RwLm9yZyA9IGluZm8tPm90cDsKPj4gLQo+PiAtCS8qIERlZmF1bHQg dG8gMTYtYml0IFdyaXRlIFN0YXR1cyAoMDFoKSBDb21tYW5kICovCj4+ICsJLyogRGVmYXVsdCB0 byAxNi1iaXQgUmVhZC9Xcml0ZSBTdGF0dXMgY29tbWFuZHMgKi8KPj4gIAlub3ItPmZsYWdzIHw9 IFNOT1JfRl9IQVNfMTZCSVRfU1I7Cj4+ICsJcGFyYW1zLT5yZWFkX3Nyc19vcGNvZGUgPSBTUElO T1JfT1BfUkRTUjsKPj4gKwlwYXJhbXMtPndyaXRlX3Nyc19vcGNvZGUgPSBTUElOT1JfT1BfV1JT UjsKPj4gKwlwYXJhbXMtPnF1YWRfZW5hYmxlID0gc3BpX25vcl9nZW5lcmljX3F1YWRfZW5hYmxl Owo+PiArCXBhcmFtcy0+cWVfbWFza1sxXSA9IEJJVCgxKTsKPgo+IE5vdCBzdXJlIHRoaXMgaXMg YSBzYWZlIGJldC4gSSdkIG5lZWQgdG8gY29uc3VsdCBhbGwgZGF0YXNoZWV0cyBvZgo+IHRoZSBk aWZmZXJlbnQgdmVuZG9ycy4gTm90IG5vdy4uCgpUaGlzIGlzIG5vdCBhIGJldCwganVzdCBhIHRy YW5zbGF0aW9uLiBVbmxlc3MgaWYgSSdtIG1pc3NpbmcKc29tZXRoaW5nPwoKPj4gKwo+PiArCXBh cmFtcy0+b3RwLm9yZyA9IGluZm8tPm90cDsKPj4gIAo+PiAgCS8qIFNldCBTUEkgTk9SIHNpemVz LiAqLwo+PiAgCXBhcmFtcy0+d3JpdGVzaXplID0gMTsKPj4gQEAgLTMyNTgsOCArMjk1OSwxMSBA QCBzdGF0aWMgaW50IHNwaV9ub3JfcXVhZF9lbmFibGUoc3RydWN0IHNwaV9ub3IgKm5vcikKPj4g IAkJcmV0dXJuIDA7Cj4+ICAKPj4gIAlpZiAoIShzcGlfbm9yX2dldF9wcm90b2NvbF93aWR0aChu b3ItPnJlYWRfcHJvdG8pID09IDQgfHwKPj4gLQkgICAgICBzcGlfbm9yX2dldF9wcm90b2NvbF93 aWR0aChub3ItPndyaXRlX3Byb3RvKSA9PSA0KSkKPj4gKwkgICAgICBzcGlfbm9yX2dldF9wcm90 b2NvbF93aWR0aChub3ItPndyaXRlX3Byb3RvKSA9PSA0KSkgewo+PiArCQlub3ItPnBhcmFtcy0+ cWVfbWFza1swXSA9IDA7Cj4+ICsJCW5vci0+cGFyYW1zLT5xZV9tYXNrWzFdID0gMDsKPgo+IFdo eSBzZXR0aW5nIHRoZSBtYXNrIHRvIDA/IFRoZSBtYXNrIGlzIHN0aWxsIHZhbGlkLCBidXQgd2Ug anVzdAo+IGNhbm5vdCB1c2UgaXQuIEJ1dCBpdCBjb3VsZCBzdGlsbCBiZSBhIHVzZWZ1bCBpbmZv cm1hdGlvbiwgaS5lLiBpbgo+IGRlYnVnZnMuCgpJIHNlZSwgbGV0IG1lIGZpbmQgYW5vdGhlciB3 YXkuCgo+PiAgCQlyZXR1cm4gMDsKPj4gKwl9Cj4+ICAKPj4gIAlyZXR1cm4gbm9yLT5wYXJhbXMt PnF1YWRfZW5hYmxlKG5vcik7Cj4+ICB9CgpbLi4uXQoKPj4gQEAgLTEzMCw3ICsxMTIsNiBAQCBl bnVtIHNwaV9ub3Jfb3B0aW9uX2ZsYWdzIHsKPj4gIAlTTk9SX0ZfSEFTXzRCQUlUCT0gQklUKDQp LAo+PiAgCVNOT1JfRl9IQVNfTE9DSwkJPSBCSVQoNSksCj4+ICAJU05PUl9GX0hBU18xNkJJVF9T Ugk9IEJJVCg2KSwKPj4gLQlTTk9SX0ZfTk9fUkVBRF9DUgk9IEJJVCg3KSwKPj4gIAlTTk9SX0Zf SEFTX1NSX1RCX0JJVDYJPSBCSVQoOCksCj4+ICAJU05PUl9GX0hBU180QklUX0JQICAgICAgPSBC SVQoOSksCj4+ICAJU05PUl9GX0hBU19TUl9CUDNfQklUNiAgPSBCSVQoMTApLAo+PiBAQCAtMzc1 LDYgKzM1NiwxMyBAQCBzdHJ1Y3Qgc3BpX25vcl9vdHAgewo+PiAgICogQG90cDoJCVNQSSBOT1Ig T1RQIGluZm8uCj4+ICAgKiBAc2V0X29jdGFsX2R0cjoJZW5hYmxlcyBvciBkaXNhYmxlcyBTUEkg Tk9SIG9jdGFsIERUUiBtb2RlLgo+PiAgICogQHF1YWRfZW5hYmxlOgllbmFibGVzIFNQSSBOT1Ig cXVhZCBtb2RlLgo+PiArICogQHFlX21hc2s6CQl0d28gYnl0ZXMgbWFzayB1c2VkIHRvIHNldC9j bGVhciB0aGUgUUUgYml0Cj4KPiBUd28gYnl0ZXM/IEkgYXNzdW1lIHRoYXQncyBvbmUgZm9yIGVh Y2ggc3RhdHVzIHJlZ2lzdGVyLiBUaGF0J3Mgbm90Cj4gcmVhbGx5IGNsZWFyLiBCdXQgYWxzbyBz ZWUgYWJvdmUsIG1heWJlIG1ha2UgaXQgdTMyLgoKWWVzLCB3aHkgbm90LiBTbyB3ZSBhcmUgc2Fm ZSB1bnRpbCB0aGV5IGFkZCBhIGZpZnRoIFNSIDopCgo+PiArICogQHJlYWRfc3JzX29wY29kZToJ b3Bjb2RlIHVzZWQgdG8gcmVhZCBTUjEgYW5kIFNSMiBpbiBvbmUgb3BlcmF0aW9uCj4+ICsgKiBA cmVhZF9zcjFfb3Bjb2RlOglvcGNvZGUgdXNlZCB0byByZWFkIFNSMSBhbG9uZQo+PiArICogQHJl YWRfc3IyX29wY29kZToJb3Bjb2RlIHVzZWQgdG8gcmVhZCBTUjIgYWxvbmUKPj4gKyAqIEB3cml0 ZV9zcnNfb3Bjb2RlOglvcGNvZGUgdXNlZCB0byB3cml0ZSBTUjEgYW5kIFNSMiBpbiBvbmUgb3Bl cmF0aW9uCj4+ICsgKiBAd3JpdGVfc3IxX29wY29kZToJb3Bjb2RlIHVzZWQgdG8gd3JpdGUgU1Ix IGFsb25lCj4+ICsgKiBAd3JpdGVfc3IyX29wY29kZToJb3Bjb2RlIHVzZWQgdG8gd3JpdGUgU1Iy IGFsb25lCj4+ICAgKiBAc2V0XzRieXRlX2FkZHJfbW9kZTogcHV0cyB0aGUgU1BJIE5PUiBpbiA0 IGJ5dGUgYWRkcmVzc2luZyBtb2RlLgo+PiAgICogQHJlYWR5OgkJKG9wdGlvbmFsKSBmbGFzaGVz IG1pZ2h0IHVzZSBhIGRpZmZlcmVudCBtZWNoYW5pc20KPj4gICAqCQkJdGhhbiByZWFkaW5nIHRo ZSBzdGF0dXMgcmVnaXN0ZXIgdG8gaW5kaWNhdGUgdGhleQo+PiBAQCAtNDA1LDYgKzM5MywxMyBA QCBzdHJ1Y3Qgc3BpX25vcl9mbGFzaF9wYXJhbWV0ZXIgewo+PiAgCj4+ICAJaW50ICgqc2V0X29j dGFsX2R0cikoc3RydWN0IHNwaV9ub3IgKm5vciwgYm9vbCBlbmFibGUpOwo+PiAgCWludCAoKnF1 YWRfZW5hYmxlKShzdHJ1Y3Qgc3BpX25vciAqbm9yKTsKPj4gKwl1OAkJCQlxZV9tYXNrWzJdOwo+ PiArCXU4CQkJCXJlYWRfc3JzX29wY29kZTsKPj4gKwl1OAkJCQlyZWFkX3NyMV9vcGNvZGU7Cj4+ ICsJdTgJCQkJcmVhZF9zcjJfb3Bjb2RlOwo+PiArCXU4CQkJCXdyaXRlX3Nyc19vcGNvZGU7Cj4+ ICsJdTgJCQkJd3JpdGVfc3IxX29wY29kZTsKPj4gKwl1OAkJCQl3cml0ZV9zcjJfb3Bjb2RlOwo+ Cj4gQ2FuIHdlIG1vdmUgYWxsIHRoZSBvcGNvZGVzIGludG8gb25lIHBsYWNlPyBUaGVyZSBpcyBh bHJlYWR5IGEKPiBkaWVfZXJhc2Vfb3Bjb2RlLiBUaG91Z2ggaXQgbWlnaHQganVzdCBiZSBhIGdv b2QgaWRlYSBub3cgdG8gZ3JvdXAKPiB0aGVtIGludG8gYSBzdWJub2RlLgo+Cj4gc3BpX25vcl9m bGFzaF9vcGNvZGVzIHsKPiAJdTggZGllX2VyYXNlOwo+IAl1OCByZHNyOwo+IAl1OCByZHNyMTsK PiAJdTggcmRzcjI7Cj4gCXU4IHdyc3I7Cj4gCXU4IHdyc3IxOwo+IAl1OCB3cnNyMjsKPiB9OwoK RGVmaW5pdGVseSBhIGdvb2QgaWRlYS4KCj4KPiBBbHNvIEknZCBtYWtlIGl0IGEgY2FsbGJhY2ss IHNvIGEgaXQgY2FuIGJlIG92ZXJ3cml0dGVuIGlmIHRoZXJlJ3MKPiBzb21lIHdlaXJkIGZsYXNo LgoKV2h5IGEgY2FsbGJhY2s/IFdlIGp1c3QgbmVlZCB0byBhbWVuZCB0aGF0IHRhYmxlLiBUaGF0 J3MgZXhhY3RseSB3aGF0IEkKcHJvcG9zZSBpbiB3aW5ib25kLmMsIGl0IGp1c3Qgd29ya3MgYW5k IGlzIG11Y2ggbW9yZSByZWFkYWJsZS4KCj4gaW50ICgqcmVhZF9zcikoc3RydWN0IHNwaV9ub3Ig Km5vciwgdTMyICpzciwgdTggYm0pCj4gaW50ICgqd3JpdGVfc3IpKHN0cnVjdCBzcGlfbm9yICpu b3IsIHUzMiBzciwgdTggYm0pCj4KPiBpbnQgc3BpX25vcl9nZW5lcmljX3JlYWRfc3Ioc3RydWN0 IHNwaV9ub3IgKm5vciwgdTMyICpzciwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTgg Ynl0ZV9tYXNrKQo+IHsKPiAJc3BpX25vcl9mbGFzaF9wYXJhbWV0ZXIgKnBhcmFtcyA9IG5vci0+ cGFyYW1zOwo+Cj4gCWlmIChwYXJhbXMtPmZsYWdzICYgU05PUl9GX1NVUFBPUlRTX1NSXzE2QklU X1JFQUQpCj4gCQkuLi4KPiB9Cj4KPiBpbnQgc3BpX25vcl9nZW5lcmljX3dyaXRlX3NyKHN0cnVj dCBzcGlfbm9yICpub3IsIHUzMiAqc3IsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 OCBieXRlX21hc2spCj4gewo+IAlpZiAocGFyYW1zLT5mbGFncyAmIFNOT1JfRl9IQVNfMTZCSVRf U1IpCj4gCQkuLi4KPiB9CgpbLi4uXQoKPj4gLS0tIGEvZHJpdmVycy9tdGQvc3BpLW5vci9zZmRw LmMKPj4gKysrIGIvZHJpdmVycy9tdGQvc3BpLW5vci9zZmRwLmMKPj4gQEAgLTU2MSwxMCArNTYx LDIxIEBAIHN0YXRpYyBpbnQgc3BpX25vcl9wYXJzZV9iZnB0KHN0cnVjdCBzcGlfbm9yICpub3Is Cj4+ICAJdmFsID4+PSBCRlBUX0RXT1JEMTFfUEFHRV9TSVpFX1NISUZUOwo+PiAgCXBhcmFtcy0+ cGFnZV9zaXplID0gMVUgPDwgdmFsOwo+PiAgCj4+ICsJLyoKPj4gKwkgKiBUaGUgc3RhbmRhcmQg ZGVjbGFyZXMgdmFyaW91cyByZWFkIGFuZCB3cml0ZSBzdGF0dXMgbWV0aG9kcywgc29tZSBvZgo+ PiArCSAqIHRoZW0gd2lsbCBiZSBvdmVybG9hZGVkIGJhc2VkIG9uIHRoZSBRRVIgZmllbGQuCj4+ ICsJICovCj4+ICsJcGFyYW1zLT5yZWFkX3Nyc19vcGNvZGUgPSBTUElOT1JfT1BfUkRTUjsKPgo+ IE5vdCBzdXJlLCB0aGF0J3MgYSBzYW5lIGRlZmF1bHQuIEkgdGhpbmsgaXQgd2FzIGFsd2F5cyAw NS8zNSBmb3IKPiByZWFkaW5nLgoKVGhhdCBpcyByaWdodCwgSSB3aWxsIGFtZW5kIGFuZCBmb2xs b3cgeW91ciBzdWdnZXN0aW9uIHdoaWNoIHNlZW1zIHNhZmVyLgoKPiBTb21lIG5ld2VyIGZsYXNo ZXMgbWlnaHQgaGF2ZSBtYXBwZWQgdGhlIHNyMiB0byB0aGUgc2Vjb25kCj4gYnl0ZSBmb3IgdGhl IDA1IG9wY29kZS4KPgo+PiArCXBhcmFtcy0+cmVhZF9zcjFfb3Bjb2RlID0gU1BJTk9SX09QX1JE U1I7Cj4+ICsJcGFyYW1zLT5yZWFkX3NyMl9vcGNvZGUgPSBTUElOT1JfT1BfUkRDUjsKPj4gKwlw YXJhbXMtPndyaXRlX3Nyc19vcGNvZGUgPSBTUElOT1JfT1BfV1JTUjsKPj4gKwlwYXJhbXMtPndy aXRlX3NyMV9vcGNvZGUgPSBTUElOT1JfT1BfV1JTUjsKPj4gKwoKVGhhbmtzISBJIHdpbGwgY29t ZSB1cCB3aXRoIGFuIHVwZGF0ZSBzb29uLgoKTWlxdcOobAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4IE1URCBkaXNjdXNzaW9uIG1h aWxpbmcgbGlzdApodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xp bnV4LW10ZC8K