From: Takashi Iwai Subject: Re: [Xen-devel][PATCH 0/2] sndif: add explicit back and front synchronization Date: Tue, 06 Mar 2018 15:27:10 +0100 Message-ID: References: <1517819100-1029-1-git-send-email-andr2000@gmail.com> <1531a22b-5df6-a66e-72ee-775538aeff4d@gmail.com> <621aaaa9-5994-176c-b243-c2fc9823a699@gmail.com> Mime-Version: 1.0 (generated by SEMI 1.14.6 - "Maruoka") Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx2.suse.de (mx2.suse.de [195.135.220.15]) by alsa0.perex.cz (Postfix) with ESMTP id A7D152670A1 for ; Tue, 6 Mar 2018 15:27:12 +0100 (CET) In-Reply-To: <621aaaa9-5994-176c-b243-c2fc9823a699@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: alsa-devel-bounces@alsa-project.org To: Oleksandr Andrushchenko Cc: xen-devel@lists.xenproject.org, alsa-devel@alsa-project.org, Oleksandr Andrushchenko List-Id: alsa-devel@alsa-project.org T24gVHVlLCAwNiBNYXIgMjAxOCAxNToxMzoxMyArMDEwMCwKT2xla3NhbmRyIEFuZHJ1c2hjaGVu a28gd3JvdGU6Cj4gCj4gT24gMDMvMDYvMjAxOCAwMzo0OCBQTSwgVGFrYXNoaSBJd2FpIHdyb3Rl Ogo+ID4gT24gVHVlLCAwNiBNYXIgMjAxOCAxNDozMDowNSArMDEwMCwKPiA+IE9sZWtzYW5kciBB bmRydXNoY2hlbmtvIHdyb3RlOgo+ID4+IE9uIDAzLzA2LzIwMTggMDI6NTIgUE0sIFRha2FzaGkg SXdhaSB3cm90ZToKPiA+Pj4gT24gVHVlLCAwNiBNYXIgMjAxOCAxMzowNToxNiArMDEwMCwKPiA+ Pj4gT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gd3JvdGU6Cj4gPj4+PiBPbiAwMy8wNi8yMDE4IDAx OjMyIFBNLCBUYWthc2hpIEl3YWkgd3JvdGU6Cj4gPj4+Pj4gT24gVHVlLCAwNiBNYXIgMjAxOCAx MjoyNTowNyArMDEwMCwKPiA+Pj4+PiBPbGVrc2FuZHIgQW5kcnVzaGNoZW5rbyB3cm90ZToKPiA+ Pj4+Pj4gT24gMDMvMDYvMjAxOCAxMjo1MiBQTSwgVGFrYXNoaSBJd2FpIHdyb3RlOgo+ID4+Pj4+ Pj4gT24gTW9uLCAwNSBGZWIgMjAxOCAwOToyNDo1OCArMDEwMCwKPiA+Pj4+Pj4+IE9sZWtzYW5k ciBBbmRydXNoY2hlbmtvIHdyb3RlOgo+ID4+Pj4+Pj4+IEZyb206IE9sZWtzYW5kciBBbmRydXNo Y2hlbmtvIDxvbGVrc2FuZHJfYW5kcnVzaGNoZW5rb0BlcGFtLmNvbT4KPiA+Pj4+Pj4+Pgo+ID4+ Pj4+Pj4+IEhpLCBhbGwhCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBGb3Jld29yZAo+ID4+Pj4+Pj4+ ID09PT09PT09Cj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBUaGlzIGNoYW5nZSBpcyBhaW1lZCB0byBh ZGQgc3VwcG9ydCBmb3IgZXhwbGljaXQgYmFjayBhbmQgZnJvbnQKPiA+Pj4+Pj4+PiBzeW5jaHJv bml6YXRpb24gZHVyaW5nIHBsYXliYWNrIGFuZCBjYXB0dXJlIGluIHJlc3BvbnNlIHRvIGNvbW1l bnRzCj4gPj4+Pj4+Pj4gcmFpc2VkIGR1cmluZyB1cHN0cmVhbSBhdHRlbXB0IG9mIHRoZSBwYXJh LXZpcnR1YWxpemVkIHNvdW5kIGZyb250ZW5kCj4gPj4+Pj4+Pj4gZHJpdmVyIGZvciBYZW4gWzFd LCBbMl0gYW5kIGdhdGhlciBvcGluaW9ucyBmcm9tIHRoZSByZWxldmFudCBjb21tdW5pdGllcwo+ ID4+Pj4+Pj4+IChBTFNBLCBYZW4pIG9uIHRoZSBjaGFuZ2UuCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+ PiBUaGUgcmVsZXZhbnQgYmFja2VuZCBpcyBpbXBsZW1lbnRlZCBhcyBhIHVzZXItc3BhY2UgYXBw bGljYXRpb24gWzNdCj4gPj4+Pj4+Pj4gYW5kIHVzZXMgYWNjb21wYW55aW5nIGhlbHBlciBsaWJy YXJ5IFs0XS4KPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IEJvdGggZnJvbnRlbmQgZHJpdmVyIGFuZCBi YWNrZW5kIHdlcmUgdGVzdGVkIG9uIHJlYWwgSFcgcnVubmluZyBYZW4gaHlwZXJ2aXNvcgo+ID4+ Pj4+Pj4+IChSZW5lc2FzIFItQ2FyIEFSTSBiYXNlZCBIMy9NMyBib2FyZHMsIHg4NikgdG8gbWFr ZSBzdXJlIHRoZSBwcm9wb3NlZAo+ID4+Pj4+Pj4+IHNvbHV0aW9uIGRvZXMgd29yay4KPiA+Pj4+ Pj4+Pgo+ID4+Pj4+Pj4+IFJhdGlvbmFsZQo+ID4+Pj4+Pj4+ID09PT09PT09PQo+ID4+Pj4+Pj4+ Cj4gPj4+Pj4+Pj4gRHVyaW5nIHRoZSBmaXJzdCBhdHRlbXB0IHRvIHVwc3RyZWFtIHRoZSBMaW51 eCBmcm9udCBkcml2ZXIgWzVdIG51bWJlcgo+ID4+Pj4+Pj4+IG9mIGNvbW1lbnRzIGFuZCBjb25j ZXJucyB3ZXJlIHJhaXNlZCwgb25lIG9mIHRoZSBiaWdnZXN0IGZsYXdzIGluIHRoZQo+ID4+Pj4+ Pj4+IGRlc2lnbiB3ZXJlIHF1ZXN0aW9uZWQgYnkgYm90aCBDbGVtZW5zIExhZGlzY2ggWzZdIGFu ZAo+ID4+Pj4+Pj4+IFRha2FzaGkgU2FrYW1vdG8gWzddOiB0aGUgYWJzZW5jZSBvZiBzeW5jaHJv bml6YXRpb24gYmV0d2VlbiBmcm9udGVuZAo+ID4+Pj4+Pj4+IGFuZCBiYWNrZW5kIGR1cmluZyBj YXB0dXJlL3BsYXliYWNrLiBUd28gb3B0aW9ucyB3ZXJlIGRpc2N1c3NlZDoKPiA+Pj4+Pj4+Pgo+ ID4+Pj4+Pj4+IOKAnEluIGRlc2lnbiBvZiBBTFNBIFBDTSBjb3JlLCBkcml2ZXJzIGFyZSBleHBl Y3RlZCB0byBzeW5jaHJvbml6ZSB0bwo+ID4+Pj4+Pj4+IGFjdHVhbCBoYXJkd2FyZXMgZm9yIHNl bWktcmVhbHRpbWUgZGF0YSB0cmFuc21pc3Npb24uIFRoZQo+ID4+Pj4+Pj4+IHN5bmNocm9uaXph dGlvbiBpcyBkb25lIGJ5IHR3byBwb2ludHM6Cj4gPj4+Pj4+Pj4gMSkgSW50ZXJydXB0cyB0byBy ZXNwb25kIGV2ZW50cyBmcm9tIGFjdHVhbCBoYXJkd2FyZXMuCj4gPj4+Pj4+Pj4gMikgUG9zaXRp b25zIG9mIGFjdHVhbCBkYXRhIHRyYW5zbWlzc2lvbiBpbiBhbnkgc2VyaWFsIHNvdW5kIGludGVy ZmFjZXMKPiA+Pj4+Pj4+PiAgICAgICAgIG9mIGFjdHVhbCBoYXJkd2FyZXMuCj4gPj4+Pj4+Pj4g 4oCcCj4gPj4+Pj4+Pj4KPiA+Pj4+Pj4+PiBhbmQgZmluYWxseSBhIGNoYW5nZSB0byB0aGUgZXhp c3RpbmcgcHJvdG9jb2wgd2FzIHN1Z2dlc3RlZDoKPiA+Pj4+Pj4+Pgo+ID4+Pj4+Pj4+IOKAnElu ICdpbmNsdWRlL3hlbi9pbnRlcmZhY2UvaW8vc25kaWYuaCcsIHRoZXJlJ3Mgbm8gZnVuY3Rpb25h bGl0aWVzIEkKPiA+Pj4+Pj4+PiBkZXNjcmliZWQgdGhlIGFib3ZlOgo+ID4+Pj4+Pj4+IDEuIG5v dGlmaWNhdGlvbnMgZnJvbSBEb21VIHRvIERvbTAgYWJvdXQgdGhlIHNpemUgb2YgcGVyaW9kIGZv cgo+ID4+Pj4+Pj4+ICAgICAgICAgaW50ZXJydXB0cyBmcm9tIGFjdHVhbCBoYXJkd2FyZXMuIE9y IG5vIHdheSBmcm9tIERvbTAgdG8gRG9tVSBhYm91dAo+ID4+Pj4+Pj4+ICAgICAgICAgdGhlIGNv bmZpZ3VyZWQgc2l6ZSBvZiB0aGUgcGVyaW9kLgo+ID4+Pj4+Pj4+IDIuIG5vdGlmaWNhdGlvbnMg b2YgdGhlIGludGVycnVwdHMgZnJvbSBhY3R1YWwgaGFyZHdhcmVzIHRvIERvbVUu4oCdCj4gPj4+ Pj4+Pj4KPiA+Pj4+Pj4+PiBUaGlzIGlzIGltcGxlbWVudGVkIGFzIGEgY2hhbmdlIHRvIHRoZSBz bmRpZiBwcm90b2NvbCBhbmQgYWxsb3dzIHJlbW92aW5nCj4gPj4+Pj4+Pj4gcGVyaW9kIGVtdWxh dGlvbjoKPiA+Pj4+Pj4+PiAxLiBJbnRyb2R1Y2VkIGEgbmV3IGV2ZW50IGNoYW5uZWwgZnJvbSBi YWNrIHRvIGZyb250Cj4gPj4+Pj4+Pj4gMi4gTmV3IGV2ZW50IHdpdGggbnVtYmVyIG9mIGJ5dGVz IHBsYXllZC9jYXB0dXJlZCAoWEVOU05EX0VWVF9DVVJfUE9TLAo+ID4+Pj4+Pj4+ICAgICAgICB0 byBiZSB1c2VkIGZvciBzZW5kaW5nIHNuZF9wY21fcGVyaW9kX2VsYXBzZWQgYXQgZnJvbnRlbmQg KGluIExpbnV4Cj4gPj4+Pj4+Pj4gICAgICAgIGltcGxlbWVudGF0aW9uKS4gU2VudCBpbiBieXRl cywgbm90IGZyYW1lcyB0byBtYWtlIHRoZSBwcm90b2NvbAo+ID4+Pj4+Pj4+ICAgICAgICBnZW5l cmljIGFuZCBjb25zaXN0ZW50KQo+ID4+Pj4+Pj4+IDMuIE5ldyByZXF1ZXN0IGZvciBwbGF5YmFj ay9jYXB0dXJlIGNvbnRyb2wgKFhFTlNORF9PUF9UUklHR0VSKSB3aXRoCj4gPj4+Pj4+Pj4gICAg ICAgIHN0YXJ0L3BhdXNlL3N0b3AvcmVzdW1lIHN1Yi1vcHMKPiA+Pj4+Pj4+PiA0LiBQbGF5YmFj ay9jYXB0dXJlIGJ1ZmZlciBzaXplIGlzIHNldCBvbiB0aGUgYmFja2VuZCBzaWRlIHZpYQo+ID4+ Pj4+Pj4+ICAgICAgICBYRU5TTkRfRklFTERfQlVGRkVSX1NJWkUgWGVuU3RvcmUgZW50cnkKPiA+ Pj4+Pj4+IFNvIHRoZSBuZXcgYWRkaXRpb24gbG9va3Mgc2VydmluZyB3ZWxsIGZvciB0aGUgcG9p bnQgdGhhdCB3YXMKPiA+Pj4+Pj4+IHN1Z2dlc3RlZCBpbiB0aGUgcHJldmlvdXMgdGhyZWFkLiAg QXMgSSBzZWUgbm8gZnJvbnRlbmQgZHJpdmVyCj4gPj4+Pj4+PiBpbXBsZW1lbnRhdGlvbiwgaXQn cyBoYXJkIHRvIHRlbGwgYWJvdXQgdGhlIGRldGFpbHMsIGJ1dCB0aHJvdWdoIGEKPiA+Pj4+Pj4+ IHF1aWNrIGdsYW5jZSwgdGhlIHByb3RvY29sIHNob3VsZCBiZSBPSy4KPiA+Pj4+Pj4gVGhhbmsg eW91LCB0aGUgZHJpdmVyIGlzIGF0IFsxXQo+ID4+Pj4+Pj4gTm93LCBnb2luZyBiYWNrIHRvIGEg YmlnIHBpY3R1cmU6IEkgdG9vayBhIGxvb2sgYXQgdGhlIHByZXZpb3VzCj4gPj4+Pj4+PiBwYXRj aHNldCwgYW5kIHdvbmRlciB3aGF0IGFib3V0IHRoZSBod19wYXJhbXMgc2V0dXAuICBCYXNpY2Fs bHkgdGhlCj4gPj4+Pj4+PiAoZnJvbnRlbmQpIGFwcGxpY2F0aW9uIG1heSByZXF1ZXN0IGFueSBz aXplIG9mIGJ1ZmZlciBhbmQgcGVyaW9kcwo+ID4+Pj4+Pj4gdW5sZXNzIHRoZSBkcml2ZXIgc2V0 cyB1cCB0aGUgaHcgY29uc3RyYWludHMgYXQgb3BlbiBjYWxsYmFjay4gIFRoYXQKPiA+Pj4+Pj4+ IGlzLCBhcHAgbWF5IHJlcXVlc3QgZXZlbiB0aGUgMTYgYnl0ZXMgb2YgYnVmZmVyIHNpemUsIG9y IDFHQiBvZgo+ID4+Pj4+Pj4gYnVmZmVyLiAgVGhlIHBlcmlvZHMgYXJlbid0IGFsd2F5cyBpbnRl Z2VyLCBzbyBpdCBjYW4gYmUgMTAyNCBieXRlcyBvZgo+ID4+Pj4+Pj4gYnVmZmVyIHdpdGggNDAw IGJ5dGVzIG9mIHBlcmlvZHMuCj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4gQW5kLCBpZiBzdWNoIHBhcmFt ZXRlcnMgYXJlIHNldCB1cCBmcmVlbHkgaW4gdGhlIGZyb250ZW5kIHNpZGUsIGhvdwo+ID4+Pj4+ Pj4gdGhlIGJhY2tlbmQgaXMgc3VwcG9zZWQgdG8gYmVoYXZlPyAgRnJvbSB0aGUgZnJvbnRlbmQg UE9WLCBpdCBleHBlY3RzCj4gPj4+Pj4+PiByZWNlaXZpbmcgdGhlIHdha2V1cC9ub3RpZmljYXRp b24gYXQgZWFjaCBwZXJpb2QgcHJvY2Vzc2luZyAoZS5nLiA0MDAKPiA+Pj4+Pj4+IGJ5dGVzIGlu IHRoZSBjYXNlIGFib3ZlKS4gIEJ1dCwgdGhlIGJhY2tlbmQgaXMgYW5vdGhlciBhcHBsaWNhdGlv biwgc28KPiA+Pj4+Pj4+IGhvdyB3b3VsZCBpdCB3b3JrIGZvciBzdWNoIHJlcXVpcmVtZW50cz8g IEFtIEkgbWlzc2luZyBzb21ldGhpbmcgaGVyZT8KPiA+Pj4+Pj4gV2VsbCwgdGhlIGZyb250ZW5k IGlzIG5vdCB0aGF0IGZyZWUgdG8gZGVjaWRlIGFzIGl0IG1pZ2h0IGxvb2sgbGlrZSwKPiA+Pj4+ Pj4gZS5nLiBwbGVhc2Ugc2VlIFsyXS4gQmFzaWNhbGx5IHBhcnQgb2YgaHdfcGFyYW1zIGNvbmZp Z3VyYXRpb24gaXMgd3JpdHRlbgo+ID4+Pj4+PiB0byBYZW5TdG9yZSBbM10gYXMgYSBwYXJ0IG9m IGRvbWFpbiBjb25maWd1cmF0aW9uIHdoaWNoIGRlcGVuZHMgb24KPiA+Pj4+Pj4gc3lzdGVtL2Jh Y2tlbmQKPiA+Pj4+Pj4gY2FwYWJpbGl0aWVzLiBFLmcuLCB3ZSB1c3VhbGx5IHNldCBidWZmZXIg c2l6ZXMgdG8gbWF0Y2ggcmVhbCBIVyBhdAo+ID4+Pj4+PiBiYWNrZW5kIHNpZGUKPiA+Pj4+Pj4g aWYgd2UgdXNlIEFMU0EgYW5kIHdlIGhhdmUgbW9yZSBmcmVlZG9tIGlmIHdlIHVzZSBQdWxzZUF1 ZGlvIHRoZXJlLgo+ID4+Pj4+PiBGaW5hbGx5LCBpZiBiYWNrZW5kIGRlY2lkZXMgdGhhdCB0aGUg cmVxdWVzdGVkIGJ1ZmZlci9wZXJpb2Qgc2l6ZXMgYXJlCj4gPj4+Pj4+IG5vdCBhY2NlcHRhYmxl IGl0IHdpbGwgcmVqZWN0IHN1Y2ggYSBjb25maWd1cmF0aW9uLgo+ID4+Pj4+IE9LLCB0aGF0IHJl c3RyaWN0cyBtaW5pbWFsbHkuICBTbyBhdCBsZWFzdCB0aGVyZSBpcyB0aGUgcmVzdHJpY3Rpb24g Lwo+ID4+Pj4+IGNvbW11bmljYXRpb24gYWJvdXQgdGhlIGJ1ZmZlciBzaXplLiAgQnV0IGl0IG1l cmVseSBtZWFucyB0aGUKPiA+Pj4+PiAqbWF4aW11bSogYnVmZmVyIHNpemUgaXMgc2V0LiAgQXBw bGljYXRpb24gbWF5IHJlcXVlc3Qgc3RpbGwgYW55Cj4gPj4+Pj4gc2hvcnRlciB2YWx1ZSB0aGFu IHRoYXQuCj4gPj4+Pj4KPiA+Pj4+PiBBbmQsIHRoZXJlIGFyZSBubyByZXN0cmljdGlvbiBhYm91 dCBwZXJpb2Qgc2l6ZXMgKGV4Y2VwdCBmb3IgdGhlCj4gPj4+Pj4gcGVyaW9kc19tYXgsIHdoaWNo IGlzIGNhbGN1bGF0ZWQgZnJvbSBidWZmZXJfYnl0ZXNfbWF4KS4KPiA+Pj4+PiBUaGF0IGlzLCBh cHBsaWNhdGlvbiBtYXkgcmVxdWVzdCBhbnkgc2l6ZSBiZXR3ZWVuIHRoZW07IGFuZCBpdCBleHBl Y3RzCj4gPj4+Pj4gdGhlIHdha2UgdXAgYnkgdGhpcyB2YWx1ZS4KPiA+Pj4+Pgo+ID4+Pj4+IEkg dGhpbmsgdGhhdCdzIGEgc3RpbGwgbWlzc2luZyBzdG9uZSBpbiB0aGUgZGVzaWduLgo+ID4+Pj4g V2VsbCwgc28gd2hhdCB3b3VsZCBhIHJlYWwgSFcgZHJpdmVyIGRvIGluIHRoYXQgY2FzZT8KPiA+ Pj4+IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpbiB0aGlzIGNhc2UgU1cgY2FuIHN0aWxsIHJl cXVlc3QKPiA+Pj4+IHNvbWV0aGluZyB0aGF0IEhXIGNhbid0IGRvIGFuZCBkcml2ZXIgd2lsbCBy ZWplY3Qgc3VjaCBjb25maWd1cmF0aW9ucy4KPiA+Pj4+IEluIG15IGNhc2UsIHRoZSByb2xlIG9m IHRoYXQgSFcgZHJpdmVyIGNvZGUgd2hpY2gganVkZ2VzIG9uIGlmIGNvbmZpZ3VyYXRpb24KPiA+ Pj4+IGlzIGFjY2VwdGFibGUganVzdCBydW5zIG9uIHRoZSBiYWNrZW5kIHNpZGUsIGUuZy4gZnJv bnRlbmQgZHJpdmVyIGlzIGp1c3QKPiA+Pj4+IGEgcHJveHkgd2hpY2ggdGFsa3MgdG8gdGhlIGJh Y2tlbmQgdG8gY2hlY2sgaWYgdGhlIGJhY2tlbmQgY2FuIGRvIHdoYXQKPiA+Pj4+IHJlcXVlc3Rl ZC4KPiA+Pj4+IEFuZCBpdCBpcyB1cCB0byBiYWNrZW5kIHRvIGRlY2lkZS4KPiA+Pj4+Cj4gPj4+ PiBEb2VzIHRoYXQgc291bmQgcmVhc29uYWJsZSBvciB5b3UgaGF2ZSBzb21ldGhpbmcgZWxzZSBv biB5b3VyIG1pbmQ/Cj4gPj4+IFVzdWFsbHkgdGhlIGhhcmR3YXJlIGRyaXZlciBrbm93cyBhbHJl YWR5IHRoZSByZXN0cmljdGlvbnMgYW5kIHNldHMgdXAKPiA+Pj4gdGhlIHJ1bGVzIHZpYSBodyBj b25zdHJhaW50cyBhdCBvcGVuIGNhbGxiYWNrLiAgVGhlcmUgYXJlIGxvdHMgb2YKPiA+Pj4gc25k X3BjbV9od19jb25zdHJhaW50XyooKSBoZWxwZXJzIChhbmQgdGhlIHJlbGV2YW50IG9uZXMpIHRv IGdpdmUgbW9yZQo+ID4+PiBhZGRpdGlvbmFsIHJ1bGVzIGZvciB0aGUgcGFyYW1ldGVyIHJlc3Ry aWN0aW9ucy4gIEZvciBleGFtcGxlLCBpZiB0aGUKPiA+Pj4gcGVyaW9kcyBtdXN0IGJlIGFsaWdu ZWQgd2l0aCB0aGUgYnVmZmVyIHNpemUgKGkuZS4gYnVmZmVyX3NpemUgJQo+ID4+PiBwZXJpb2Rf c2l6ZSA9PSAwKSBhcyBvbiBtYW55IGRldmljZXMsIHlvdSBjYW4gY2FsbCBsaWtlOgo+ID4+PiAg ICAgc25kX3BjbV9od19jb25zdHJhaW50X2ludGVnZXIoc3Vic3RyZWFtLT5ydW50aW1lLAo+ID4+ PiAJU05EUlZfUENNX0hXX1BBUkFNX1BFUklPRFMpOwo+ID4+PiBpbiB0aGUgb3BlbiBjYWxsYmFj ay4KPiA+PiBZb3UgYXJlIHJpZ2h0LCBJIHNhdyB0aG9zZSBpbiBvdGhlciBkcml2ZXJzCj4gPj4+ IEFuZCwgbm93IGFuIG9wZW4gcXVlc3Rpb24gZm9yIFhFTiBjb21lczogd2hhdCBraW5kIG9mIHJl c3RyaWN0aW9uCj4gPj4+IHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZSBmcm9udGVuZC4gIE9idmlv dXNseSBpdCBkZXBlbmRzIG9uIHRoZQo+ID4+PiBiYWNrZW5kLCBzbyB0aGVyZSBtdXN0IGJlIHNv bWUgY29tbXVuaWNhdGlvbiwgYW5kIHRoZSByZXN0cmljdGlvbiBtdXN0Cj4gPj4+IGJlIHByb3Bh Z2F0ZWQgYXQgb3BlbiwgaS5lLiAqYmVmb3JlKiBhY3R1YWxseSBod19wYXJhbXMgaXMgcGVyZm9y bWVkLgo+ID4+IENvdWxkIHlvdSBwbGVhc2UgZ2l2ZSBtZSBhIGhpbnQgb2Ygd2hhdCB0aG9zZSBy ZXN0cmljdGlvbnMKPiA+PiBjb3VsZCBsb29rIGxpa2U/IEUuZy4gbWFwIG9mIHN1cHBvcnRlZCBi dWZmZXIvcGVyaW9kIHNpemVzLCB3aGF0IGVsc2U/Cj4gPiBIZWgsIHRoYXQgdmVyeSBtdWNoIGRl cGVuZHMgb24gdGhlIGhhcmR3YXJlIC0tIGFuZCBpbiB0aGlzIGNhc2UsIG9uCj4gPiB0aGUgaW1w bGVtZW50YXRpb24gb2YgdGhlIGJhY2tlbmQuCj4gVGhhdCBpcyBjb3JyZWN0LCBidXQgd2UgdHJ5 IHRvIGJlIGJhY2tlbmQgYWdub3N0aWMsIHRob3VnaAo+ID4KPiA+IFByYWN0aWNhbGx5IHNlZW4s IHRoZSBidWZmZXIgYW5kIHRoZSBwZXJpb2Qgc2l6ZSBzZXR1cHMgYXJlIG1hbmRhdG9yeSwKPiA+ IHllcy4gIEhlcmUgaXMgdGhlIHF1ZXN0aW9uIHdoZXRoZXIgeW91IHdhbnQgdG8gbGltaXQgdGhl bSBieSBsaXN0Cj4gPiAoZS5nLiByZWFkIHZpYSBzb21lIFhFTlNORF8qIHByb3RvY29sKSwgb3Ig bmVnb3RpYXRlIHRoZSBzaXplIGF0IGVhY2gKPiA+IGh3X3BhcmFtcyBzZXR1cCAoZS5nLiBnZXR0 aW5nIG9ubHkgbWluL21heCBhdCBvcGVuLCBhbmQgYXQgZWFjaAo+ID4gaHdfcGFyYW1zIGNhbGws IG5lZ290aWF0ZSB3aXRoIHRoZSBiYWNrZW5kIGZvciBwZXJpb2QgYW5kIGJ1ZmZlciBzaXplCj4g PiBjaGFuZ2VzKS4KPiBUaGUgcHJvYmxlbSBJIHNlZSBoZXJlIGlzIHRoYXQgYXQgLm9wZW4gcmVh bCBIVyBkcml2ZXIKPiBhbHJlYWR5IGtub3dzIGl0cyBjb25zdHJhaW50cyBhbmQgY2FuIHByb3Bl cmx5IHNldHVwLgo+IFNvLCBpbiBvdXIgY2FzZSBhdCBvcGVuIHdlIHNob3VsZCBhbHJlYWR5IGhh dmUgYWxsIHRoZQo+IGNvbnN0cmFpbnRzIGF2YWlsYWJsZSB0byB0aGUgZnJvbnRlbmQgYXMgd2Vs bC4KPiBUaGF0IHdpbGwgbGVhZCB0byBsb3RzIG9mIHRleHQgaW4gZG9tYWluIGNvbmZpZ3VyYXRp b24gZmlsZQo+IGlmIHByb3BhZ2F0ZWQgdmlhIFhlblN0b3JlIChlLmcuIHlvdSBoYXZlIHRvIHB1 dCBhbGwgcG9zc2libGUKPiBjb21iaW5hdGlvbnMgb2YgYnVmZmVycy9wZXJpb2RzIGRlcGVuZGlu ZyBvbiBudW1iZXIgb2YKPiBjaGFubmVscywgc2FtcGxlIHJhdGVzIGV0Yy4sIHlvdSBjYW5ub3Qg dXNlIGxvZ2ljIGhlcmUgYXMgeW91IGNhbgo+IGluIGEgcmVhbCBIVyBkcml2ZXIsIG9ubHkgdmFs dWVzKS4gU28sIHN1Y2ggY29uZmlndXJhdGlvbiBkb2Vzbid0Cj4gc2VlbSB0byBiZSBhbiBvcHRp b24gaGVyZS4KCkl0IGRlcGVuZHMuICBJZiB3ZSBkbyBsaW1pdCB0aGUgY29uZmlndXJhdGlvbiBp bnRlbnRpb25hbGx5IHRvIG9ubHkKc29tZSBzdWJzZXRzIHRoYXQgc2hvdWxkIHN1ZmZpY2UgZm9y IG1vc3QgdXNlIGNhc2VzLCB0aGVuIHRoZSBsaXN0CndvdWxkIGJlIHJlbGF0aXZlbHkgc2hvcnQu Cgo+IElmIHdlIGRlY2lkZSB0byBuZWdvdGlhdGUgdGhlIHBhcmFtZXRlcnMsIHRoZW4gaXQgY2Fu J3QgYmUgZG9uZQo+IGF0IC5vcGVuIHN0YWdlIGFzIHdlbGwsIGFzIGF0IHRoaXMgbW9tZW50IHdl IGRvbid0IGtub3cgc3RyZWFtCj4gcGFyYW1ldGVycyB5ZXQsIGUuZy4gd2UgZG9uJ3Qga25vdyB0 aGUgbnVtYmVyIG9mIGNoYW5uZWxzLCBQQ00KPiBmb3JtYXQgZXRjLiwgc28gd2UgY2Fubm90IGV4 cGxhaW4gdG8gdGhlIGJhY2tlbmQgd2hhdCB3ZSB3YW50Lgo+IFRodXMsIGl0IHNlZW1zIHRoYXQg d2UgbmVlZCB0byBtb3ZlIHRoZSBuZWdvdGlhdGlvbiB0byAuaHdfcGFyYW1zCj4gY2FsbGJhY2sg d2hlcmUgc3RyZWFtIHByb3BlcnRpZXMgYXJlIGtub3duLiBCdXQgdGhpcyBsZWF2ZXMgdGhlCj4g b25seSBvcHRpb24gdG8gYXNrIHRoZSBiYWNrZW5kIGlmIGl0IGNhbiBoYW5kbGUgdGhlIHJlcXVl c3RlZAo+IGJ1ZmZlci9wZXJpb2QgYW5kIG90aGVyIHBhcmFtZXRlcnMgb3Igbm90Li4uIFRoaXMg aXMgd2hhdCBJIGRvIG5vdyA6KAoKVGhlIGFkZGl0aW9uYWwgcGFyYW1ldGVyIHNldHVwIGNhbiBi ZSBkb25lIHZpYSBod19jb25zdHJhaW50cy4gIFRoZSBodwpjb25zdHJhaW50IGlzIGJhc2ljYWxs eSBhIGZ1bmN0aW9uIGNhbGwgZm9yIGVhY2ggcGFyYW1ldGVyIGNoYW5nZSB0bwpuYXJyb3cgZG93 biB0aGUgcmFuZ2Ugb2YgdGhlIGdpdmVuIHBhcmFtZXRlci4KCnNuZF9wY21faHdfY29uc3RyYWlu dF9pbnRlZ2VyKCkgaW4gdGhlIGFib3ZlIGlzIGp1c3QgYW4gZXhhbXBsZS4KVGhlIGFjdHVhbCBm dW5jdGlvbiB0byBhZGp1c3QgdmFsdWVzIGNhbiBiZSBmcmVlbHkgd3JpdHRlbi4KCj4gQW0gSSBt aXNzaW5nIHNvbWV0aGluZyBoZXJlPwo+ID4gVGhlIGZvcm1hdCwgdGhlIGNoYW5uZWxzIGFuZCB0 aGUgc2FtcGxlIHJhdGUgYXJlIGFscmVhZHkgaW5jbHVkZWQgaW4KPiA+IHNuZF9wY21faGFyZHdh cmUgc2V0dXAsIHNvIHRoaXMgc2hvdWxkIGJlIE9LLCB1bmxlc3MgdGhleSBoYXZlCj4gPiBpbXBs aWNpdCBsaW1pdGF0aW9ucyB3aXRoIGVhY2ggb3RoZXIgKGUuZy4gc29tZSBmb3JtYXQgaXMgYXZh aWxhYmxlCj4gPiBvbmx5IHVuZGVyIHNvbWUgcmF0ZSkuCj4gVGhhbmsgeW91LCB0aGlzIHNob3Vs ZCBiZSB1cCB0byB0aGUgb25lIHdobyBzZXRzIHVwIHRoZQo+IGRvbWFpbiBjb25maWd1cmF0aW9u LiBUYWtpbmcgaW50byBhY2NvdW50IGVtYmVkZGVkIG5hdHVyZSBvZgo+IG91ciB1c2UtY2FzZXMg dGhpcyBpcyBhbG1vc3QgYWx3YXlzIGRvYWJsZSwgYXMgdGhlc2UgYXJlCj4gZGVmaW5lZCBhdCBz eXN0ZW0gZGVzaWduIHRpbWUsIGUuZy4gd2UgZGVmaW5lIG51bWJlciBvZiBjaGFubmVscwo+IGFu ZCB0aGVpciBwcm9wZXJ0aWVzIGRlcGVuZGluZyBvbiBkb21haW4gZnVuY3Rpb25hbGl0eSBhbmQg bmVlZHMuCj4gPgo+ID4gTWF5YmUgdGhlIGNoYW5uZWxzIG5lZWQgdG8gYmUgcmV2aXNpdGVkLCB0 aG91Z2g7IHVzdWFsbHkgeW91IGNhbid0Cj4gPiBoYW5kbGUgYWxsIG51bWJlciBvZiBjaGFubmVs cyBiZXR3ZWVuIG1pbiBhbmQgbWF4IGJ1dCBvbmx5IGV2ZW4KPiA+IG51bWJlcnMgb3Igc3VjaC4K PiBCdXQgaWYgYmFja2VuZCBjYW4gaW1wbGVtZW50IHNvbWUgZmFuY3kgc3R1ZmYgd2l0aCBzb2Z0 d2FyZQo+IG1peGluZyBldGMuLi4gVGhpcyBpcyB3aHkgSSBkaWRuJ3QgbGltaXQgb24gdGhhdAoK QnV0IGlmIHRoZSBiYWNrZW5kIGRvZXNuJ3Qgc3VwcG9ydCBmYW5jeSBudW1iZXJzIGxpa2UgMyBj aGFubmVscz8KVGhhdCdzIHRoZSBzYW1lIHNpdHVhdGlvbiBhcyBidWZmZXIgLyBwZXJpb2RzLiAg VGhlIGZyb250ZW5kIG5lZWRzIHRvCmtub3cgZXhhY3RseSB3aGF0IGNvbmZpZ3VyYXRpb24gdGhl IGJhY2tlbmQgd291bGQgYWxsb3cuCgoKVGFrYXNoaQpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpBbHNhLWRldmVsIG1haWxpbmcgbGlzdApBbHNhLWRldmVs QGFsc2EtcHJvamVjdC5vcmcKaHR0cDovL21haWxtYW4uYWxzYS1wcm9qZWN0Lm9yZy9tYWlsbWFu L2xpc3RpbmZvL2Fsc2EtZGV2ZWwK