From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 02/15] drm/i915: Embedded microcontroller (uC) firmware loading support Date: Mon, 6 Jul 2015 21:17:25 +0200 Message-ID: <20150706191725.GJ7568@phenom.ffwll.local> References: <1435926637-30892-1-git-send-email-david.s.gordon@intel.com> <1435926637-30892-3-git-send-email-david.s.gordon@intel.com> <20150706140630.GE2156@phenom.ffwll.local> <559AC7E5.805@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wi0-f180.google.com (mail-wi0-f180.google.com [209.85.212.180]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0B3136E8F8 for ; Mon, 6 Jul 2015 12:14:39 -0700 (PDT) Received: by widjy10 with SMTP id jy10so169479412wid.1 for ; Mon, 06 Jul 2015 12:14:37 -0700 (PDT) Content-Disposition: inline In-Reply-To: <559AC7E5.805@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Dave Gordon Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gTW9uLCBKdWwgMDYsIDIwMTUgYXQgMDc6MjQ6MzdQTSArMDEwMCwgRGF2ZSBHb3Jkb24gd3Jv dGU6Cj4gT24gMDYvMDcvMTUgMTU6MDYsIERhbmllbCBWZXR0ZXIgd3JvdGU6Cj4gPk9uIEZyaSwg SnVsIDAzLCAyMDE1IGF0IDAxOjMwOjI0UE0gKzAxMDAsIERhdmUgR29yZG9uIHdyb3RlOgo+ID4+ Q3VycmVudCBkZXZpY2VzIG1heSBjb250YWluIG9uZSBvciBtb3JlIHByb2dyYW1tYWJsZSBtaWNy b2NvbnRyb2xsZXJzCj4gPj50aGF0IG5lZWQgdG8gaGF2ZSBhIGZpcm13YXJlIGltYWdlIChha2Eg ImJpbmFyeSBibG9iIikgbG9hZGVkIGZyb20gYW4KPiA+PmV4dGVybmFsIG1lZGl1bSBhbmQgdHJh bnNmZXJyZWQgdG8gdGhlIGRldmljZSdzIG1lbW9yeS4KPiA+Pgo+ID4+VGhpcyBmaWxlIHByb3Zp ZGVzIGNvbW1vbiBzdXBwb3J0IGZ1bmN0aW9ucyBmb3IgZG9pbmcgdGhpczsgdGhleSBjYW4KPiA+ PnRoZW4gYmUgdXNlZCBieSBlYWNoIHVDLXNwZWNpZmljIGxvYWRlciwgdGh1cyByZWR1Y2luZyBj b2RlIGR1cGxpY2F0aW9uCj4gPj5hbmQgdGVzdGluZyBlZmZvcnQuCj4gPj4KPiA+PnYyOgo+ID4+ ICAgICBMb2NhbCBmdW5jdGlvbnMgc2hvdWxkIHBhc3MgZGV2X3ByaXYgcmF0aGVyIHRoYW4gZGV2 IFtDaHJpcyBXaWxzb25dCj4gPj4gICAgIFZhcmlvdXMgb3RoZXIgaW1wcm92ZW1lbnRzIHBlciBD aHJpcyBXaWxzb24ncyByZXZpZXcgY29tbWVudHMKPiA+Pgo+ID4+djM6Cj4gPj4gICAgIERlZmVh dHVyZWQgdmVyc2lvbiB3aXRob3V0IGFzeW5jIHByZWZldGNoIFtEYW5pZWwgVmV0dGVyXQo+ID4+ Cj4gPj5TaWduZWQtb2ZmLWJ5OiBEYXZlIEdvcmRvbiA8ZGF2aWQucy5nb3Jkb25AaW50ZWwuY29t Pgo+ID4+U2lnbmVkLW9mZi1ieTogQWxleCBEYWkgPHl1LmRhaUBpbnRlbC5jb20+Cj4gPj4tLS0K PiA+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgICAgICAgICAgfCAgIDMgKwo+ID4+ ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF91Y19sb2FkZXIuYyB8IDMxMCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPiA+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf dWNfbG9hZGVyLmggfCAgOTIgKysrKysrKysrKwo+ID4+ICAzIGZpbGVzIGNoYW5nZWQsIDQwNSBp bnNlcnRpb25zKCspCj4gPj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF91Y19sb2FkZXIuYwo+ID4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmgKPiA+Pgo+ID4+ZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiA+ PmluZGV4IGRlMjE5NjUuLmYxZjgwZmMgMTAwNjQ0Cj4gPj4tLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9NYWtlZmlsZQo+ID4+KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUKPiA+ PkBAIC0zOSw2ICszOSw5IEBAIGk5MTUteSArPSBpOTE1X2NtZF9wYXJzZXIubyBcCj4gPj4gIAkg IGludGVsX3JpbmdidWZmZXIubyBcCj4gPj4gIAkgIGludGVsX3VuY29yZS5vCj4gPj4KPiA+Pisj IGdlbmVyaWMgYW5jaWxsaWFyeSBtaWNyb2NvbnRyb2xsZXIgc3VwcG9ydAo+ID4+K2k5MTUteSAr PSBpbnRlbF91Y19sb2FkZXIubwo+ID4+Kwo+ID4+ICAjIGF1dG9nZW5lcmF0ZWQgbnVsbCByZW5k ZXIgc3RhdGUKPiA+PiAgaTkxNS15ICs9IGludGVsX3JlbmRlcnN0YXRlX2dlbjYubyBcCj4gPj4g IAkgIGludGVsX3JlbmRlcnN0YXRlX2dlbjcubyBcCj4gPj5kaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfdWNfbG9hZGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF91Y19sb2FkZXIuYwo+ID4+bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiA+PmluZGV4IDAwMDAwMDAu LmE4ZmMxZGQKPiA+Pi0tLSAvZGV2L251bGwKPiA+PisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX3VjX2xvYWRlci5jCj4gPj5AQCAtMCwwICsxLDMxMCBAQAo+ID4+Ky8qCj4gPj4rICog Q29weXJpZ2h0IMKpIDIwMTQgSW50ZWwgQ29ycG9yYXRpb24KPiA+PisgKgo+ID4+KyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCj4gPj4rICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiA+PisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCj4gPj4rICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gPj4rICogYW5kL29yIHNlbGwgY29waWVzIG9m IHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gPj4rICog U29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9uczoKPiA+PisgKgo+ID4+KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFu ZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiA+PisgKiBwYXJh Z3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9y dGlvbnMgb2YgdGhlCj4gPj4rICogU29mdHdhcmUuCj4gPj4rICoKPiA+PisgKiBUSEUgU09GVFdB UkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQ UkVTUyBPUgo+ID4+KyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+ID4+KyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ ID4+KyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5Z IENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gPj4rICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKPiA+PisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCj4gPj4rICogSU4gVEhFIFNPRlRXQVJFLgo+ID4+KyAqCj4gPj4r ICogQXV0aG9yOgo+ID4+KyAqCURhdmUgR29yZG9uIDxkYXZpZC5zLmdvcmRvbkBpbnRlbC5jb20+ Cj4gPj4rICovCj4gPj4rI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Cj4gPj4rI2luY2x1ZGUg Imk5MTVfZHJ2LmgiCj4gPj4rI2luY2x1ZGUgImludGVsX3VjX2xvYWRlci5oIgo+ID4+Kwo+ID4+ Ky8qKgo+ID4+KyAqIERPQzogQ29tbW9uIGZ1bmN0aW9ucyBmb3IgZW1iZWRkZWQgbWljcm9jb250 cm9sbGVyICh1QykgZmlybXdhcmUgbG9hZGluZwo+ID4+KyAqCj4gPj4rICogVGhlIGZ1bmN0aW9u cyBpbiB0aGlzIGZpbGUgcHJvdmlkZSBjb21tb24gc3VwcG9ydCBjb2RlIGZvciBsb2FkaW5nIHRo ZQo+ID4+KyAqIGZpcm13YXJlIHRoYXQgbWF5IGJlIHJlcXVpcmVkIGJ5IGFuIGVtYmVkZGVkIG1p Y3JvY29udHJvbGxlciAodUMpLgo+ID4+KyAqCj4gPj4rICogVGhlIGZ1bmN0aW9uIGludGVsX3Vj X2Z3X2luaXQoKSBzaG91bGQgYmUgY2FsbGVkIGZpcnN0OyBpdCByZXF1aXJlcyBubwo+ID4+KyAq IGxvY2tpbmcsIGFuZCBjYW4gYmUgY2FsbGVkIGV2ZW4gYmVmb3JlIEdFTSBoYXMgYmVlbiBpbml0 aWFsaXNlZC4gSXQganVzdAo+ID4+KyAqIGluaXRpYWxpc2VzIHRoZSB0cmFja2luZyBkYXRhIGFu ZCBzdG9yZXMgaXRzIHBhcmFtZXRlcnMgZm9yIHRoZSBzdWJzZXF1ZW50Cj4gPj4rICogY2FsbCB0 byBpbnRlbF91Y19md19mZXRjaCgpLgo+ID4+KyAqCj4gPj4rICogQXQgc29tZSBjb252ZW5pZW50 IHBvaW50IGFmdGVyIEdFTSBpbml0aWFsaXNhdGlvbiwgdGhlIGRyaXZlciBzaG91bGQgY2FsbAo+ ID4+KyAqIGludGVsX3VjX2Z3X2ZldGNoKCkuIFRoZSBmaXJzdCB0aW1lLCB0aGlzIHdpbGwgdXNl IHRoZSBMaW51eCBrZXJuZWwncwo+ID4+KyAqIHJlcXVlc3RfZmlybXdhcmUoKSBjYWxsIHRvIG9w ZW4gYW5kIHJlYWQgdGhlIGZpcm13YXJlIGltYWdlIGludG8gbWVtb3J5Lgo+ID4+KyAqIChPbiBz dWJzZXF1ZW50IGNhbGxzLCB0aGlzIGlzIHNraXBwZWQsIGFzIGVpdGhlciB0aGUgZmlybXdhcmUg aGFzIGFscmVhZHkKPiA+PisgKiBiZWVuIGZldGNoZWQgaW50byBtZW1vcnksIG9yIGl0IGlzIGFs cmVhZHkga25vd24gdGhhdCBubyB2YWxpZCBmaXJtd2FyZQo+ID4+KyAqIGltYWdlIGNvdWxkIGJl IGZvdW5kKS4KPiA+PisgKgo+ID4+KyAqIFRoZSBjYWxsYmFjaygpIGZ1bmN0aW9uIHBhc3NlZCB0 byBpbnRlbF91Y19md19mZXRjaCgpIGNhbiBmdXJ0aGVyIGNoZWNrCj4gPj4rICogdGhlIGZpcm13 YXJlIGltYWdlIGJlZm9yZSBpdCBpcyBzYXZlZC4gVGhpcyBmdW5jdGlvbiBjYW4gcmVqZWN0IHRo ZSBpbWFnZQo+ID4+KyAqIGJ5IHJldHVybmluZyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgKGUuZy4g LUVOT0VYRUMpLCBvciBhY2NlcHQgaXQuIEluIHRoZQo+ID4+KyAqIGxhdHRlciBjYXNlLCBpdCBj YW4gcmV0dXJuIElOVEVMX1VDX0ZXX0dPT0QgKHdoaWNoIGlzIGFsc28gdGhlIGRlZmF1bHQgaWYK PiA+PisgKiBubyBjYWxsYmFjaygpIGlzIHN1cHBsaWVkKSwgYW5kIHRoZSBjb21tb24gY29kZSBo ZXJlIHdpbGwgc2F2ZSB0aGUgd2hvbGUKPiA+PisgKiBvZiB0aGUgZmlybXdhcmUgaW1hZ2UgaW4g YSAocGFnZWFibGUsIHNobWZzLWJhY2tlZCkgR0VNIG9iamVjdC4KPiA+PisgKgo+ID4+KyAqIElm IHNhdmluZyB0aGUgd2hvbGUgaW1hZ2UgdW5tb2RpZmllZCBpcyBub3QgYXBwcm9wcmlhdGUgKGZv ciBleGFtcGxlLCBpZgo+ID4+KyAqIG9ubHkgYSBzbWFsbCBwYXJ0IG9mIHRoZSBpbWFnZSBpcyBu ZWVkZWQgbGF0ZXIsIG9yIHRoZSBkYXRhIG5lZWRzIHRvIGJlCj4gPj4rICogcmVvcmdhbmlzZWQg YmVmb3JlIHNhdmluZyksIHRoZSBjYWxsYmFjaygpIGZ1bmN0aW9uIGNhbiBpbnN0ZWFkIG1ha2Ug aXRzCj4gPj4rICogb3duIGFycmFuZ2VtZW50cyBmb3Igc2F2aW5nIHRoZSByZXF1aXJlZCBkYXRh IGluIGEgR0VNIG9iamVjdCBvciBvdGhlcndpc2UKPiA+PisgKiBhbmQgdGhlbiByZXR1cm4gSU5U RUxfVUNfRldfU0FWRUQuCj4gPj4rICoKPiA+PisgKiAoSWYgc3VjaCBhIGNhbGxiYWNrIGRvZXMg c3Rhc2ggKHNvbWUgb2YpIHRoZSBpbWFnZSBkYXRhIGluIGEgR0VNIG9iamVjdCwKPiA+PisgKiBp dCBjYW4gdXNlIHRoZSB1Y19md19vYmogYW5kIHVjX2Z3X3NpemUgZmllbGRzOyB0aGUgY29tbW9u IGZyYW1ld29yayB3aWxsCj4gPj4rICogdGhlbiBoYW5kbGUgZGVhbGxvY2F0aW5nIHRoZSBvYmpl Y3Qgb24gZmFpbHVyZSBvciBmaW5hbGlzYXRpb24uIE90aGVyd2lzZQo+ID4+KyAqIGFueSBhbGxv Y2F0ZWQgcmVzb3VyY2VzIHdpbGwgaGF2ZSB0byBiZSBtYW5hZ2VkIGJ5IHRoZSB1Qy1zcGVjaWZp YyBjb2RlKS4KPiA+PisgKgo+ID4+KyAqIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIGludGVs X3VjX2Z3X2ZldGNoKCksIHRoZSB1Qy1zcGVjaWZpYyBjb2RlIGNhbgo+ID4+KyAqIHRyYW5zZmVy IHRoZSBkYXRhIGluIHRoZSBHRU0gb2JqZWN0IChvciBpdHMgb3duIGFsdGVybmF0aXZlKSB0byB0 aGUgdUMncwo+ID4+KyAqIG1lbW9yeSAoaW4gc29tZSB1Qy1zcGVjaWZpYyB3YXksIG5vdCBoYW5k bGVkIGhlcmUpLgo+ID4+KyAqCj4gPj4rICogRHVyaW5nIGRyaXZlciBzaHV0ZG93biwgb3IgaWYg ZHJpdmVyIGxvYWQgaXMgYWJvcnRlZCwgaW50ZWxfdWNfZndfZmluaSgpCj4gPj4rICogc2hvdWxk IGJlIGNhbGxlZCB0byByZWxlYXNlIGFueSByZW1haW5pbmcgcmVzb3VyY2VzLgo+ID4+KyAqLwo+ ID4+Kwo+ID4+Ky8qIFVzZXItZnJpZW5kbHkgcmVwcmVzZW50YXRpb24gb2YgYW4gZW51bSAqLwo+ ID4+K2NvbnN0IGNoYXIgKmludGVsX3VjX2Z3X3N0YXR1c19yZXByKGVudW0gaW50ZWxfdWNfZndf c3RhdHVzIHN0YXR1cykKPiA+Pit7Cj4gPj4rCXN3aXRjaCAoc3RhdHVzKSB7Cj4gPj4rCWNhc2Ug SU5URUxfVUNfRklSTVdBUkVfRkFJTDoKPiA+PisJCXJldHVybiAiRkFJTCI7Cj4gPj4rCWNhc2Ug SU5URUxfVUNfRklSTVdBUkVfTk9ORToKPiA+PisJCXJldHVybiAiTk9ORSI7Cj4gPj4rCWNhc2Ug SU5URUxfVUNfRklSTVdBUkVfUEVORElORzoKPiA+PisJCXJldHVybiAiUEVORElORyI7Cj4gPj4r CWNhc2UgSU5URUxfVUNfRklSTVdBUkVfU1VDQ0VTUzoKPiA+PisJCXJldHVybiAiU1VDQ0VTUyI7 Cj4gPj4rCWRlZmF1bHQ6Cj4gPj4rCQlyZXR1cm4gIlVOS05PV04hIjsKPiA+PisJfQo+ID4+K307 Cj4gPj4rCj4gPj4rLyoKPiA+PisgKiBDYWxsZWQgb25jZSBwZXIgdUMsIGxhdGUgaW4gZHJpdmVy IGluaXRpYWxpc2F0aW9uLCBhZnRlciBHRU0gaXMgc2V0IHVwLgo+ID4+KyAqIEZpcnN0LCB3ZSBm ZXRjaCB0aGUgZmlybXdhcmUgaW1hZ2UgdXNpbmcgcmVxdWVzdF9maXJtd2FyZSgpLCB0aGVuIGFs bG93Cj4gPj4rICogdGhlIG9wdGlvbmFsIGNhbGxiYWNrKCkgZnVuY3Rpb24gdG8gY2hlY2sgaXQu IElmIGl0J3MgZ29vZCwgYW5kIGNhbGxiYWNrKCkKPiA+PisgKiBkb2Vzbid0IHNheSBpdCdzIGFs cmVhZHkgc2F2ZWQgdGhlIGltYWdlLCB3ZSB3aWxsIHNhdmUgaXQgaGVyZSBieSBjb3B5aW5nCj4g Pj4rICogdGhlIHdob2xlIHRoaW5nIGludG8gYSAocGFnZWFibGUsIHNobWZzLWJhY2tlZCkgR0VN IG9iamVjdCwKPiA+PisgKi8KPiA+PitzdGF0aWMgdm9pZAo+ID4+K3VjX2Z3X2ZldGNoKHN0cnVj dCBpbnRlbF91Y19mdyAqdWNfZncsCj4gPj4rCSAgICBpbnQgY2FsbGJhY2soc3RydWN0IGludGVs X3VjX2Z3ICopKQo+ID4+K3sKPiA+PisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHVjX2Z3LT51 Y19kZXY7Cj4gPj4rCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gPj4rCWNvbnN0 IHN0cnVjdCBmaXJtd2FyZSAqZnc7Cj4gPj4rCWludCBjYl9zdGF0dXMgPSBJTlRFTF9VQ19GV19H T09EOwo+ID4+Kwo+ID4+KwlEUk1fREVCVUdfRFJJVkVSKCJiZWZvcmUgd2FpdGluZzogJXMgZncg ZmV0Y2ggc3RhdHVzICVzLCBmdyAlcFxuIiwKPiA+PisJCXVjX2Z3LT51Y19uYW1lLAo+ID4+KwkJ aW50ZWxfdWNfZndfc3RhdHVzX3JlcHIodWNfZnctPnVjX2Z3X2ZldGNoX3N0YXR1cyksCj4gPj4r CQl1Y19mdy0+dWNfZndfYmxvYik7Cj4gPj4rCj4gPj4rCVdBUk5fT04oIW11dGV4X2lzX2xvY2tl ZCgmZGV2LT5zdHJ1Y3RfbXV0ZXgpKTsKPiA+PisJV0FSTl9PTih1Y19mdy0+dWNfZndfZmV0Y2hf c3RhdHVzICE9IElOVEVMX1VDX0ZJUk1XQVJFX1BFTkRJTkcpOwo+ID4+Kwo+ID4+KwlpZiAocmVx dWVzdF9maXJtd2FyZSgmZncsIHVjX2Z3LT51Y19md19wYXRoLCAmZGV2LT5wZGV2LT5kZXYpKQo+ ID4+KwkJZ290byBmYWlsOwo+ID4+KwlpZiAoIWZ3KQo+ID4+KwkJZ290byBmYWlsOwo+ID4+Kwo+ ID4+KwlEUk1fREVCVUdfRFJJVkVSKCJmZXRjaCAlcyBmdyBmcm9tICVzIHN1Y2NlZWRlZCwgZncg JXBcbiIsCj4gPj4rCQl1Y19mdy0+dWNfbmFtZSwgdWNfZnctPnVjX2Z3X3BhdGgsIGZ3KTsKPiA+ PisJdWNfZnctPnVjX2Z3X2Jsb2IgPSBmdzsKPiA+PisKPiA+PisJLyogQ2FsbGJhY2sgdG8gdGhl IG9wdGlvbmFsIHVDLXNwZWNpZmljIGZ1bmN0aW9uLCBpZiBzdXBwbGllZCAqLwo+ID4+KwlpZiAo Y2FsbGJhY2spCj4gPj4rCQljYl9zdGF0dXMgPSBjYWxsYmFjayh1Y19mdyk7Cj4gPj4rCWlmIChj Yl9zdGF0dXMgPCAwKQo+ID4+KwkJZ290byBmYWlsOwo+ID4+Kwlzd2l0Y2ggKGNiX3N0YXR1cykg ewo+ID4+KwlkZWZhdWx0Ogo+ID4+KwkJV0FSTigxLCAiSW52YWxpZCBzdGF0dXMgJWQgZnJvbSBm dyBjaGVja2luZyBjYWxsYmFjayAlcGZcbiIsCj4gPj4rCQkJCWNiX3N0YXR1cywgY2FsbGJhY2sp Owo+ID4+KwkJZ290byBmYWlsOwo+ID4+Kwo+ID4+KwljYXNlIElOVEVMX1VDX0ZXX1NBVkVEOgo+ ID4+KwkJLy8gR29vZCwgYWxyZWFkeSBzYXZlZCwgbm90aGluZyB0byBkbwo+ID4+KwkJYnJlYWs7 Cj4gPj4rCj4gPj4rCWNhc2UgSU5URUxfVUNfRldfR09PRDoKPiA+PisJCS8vIEdvb2QsIHNhdmUg aW4gR0VNIG9iamVjdAo+ID4+KwkJb2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9mcm9tX2Rh dGEoZGV2LCBmdy0+ZGF0YSwgZnctPnNpemUpOwo+ID4+KwkJaWYgKCFvYmopCj4gPj4rCQkJZ290 byBmYWlsOwo+ID4+Kwo+ID4+KwkJdWNfZnctPnVjX2Z3X29iaiA9IG9iajsKPiA+PisJCXVjX2Z3 LT51Y19md19zaXplID0gZnctPnNpemU7Cj4gPj4rCX0KPiA+PisKPiA+PisJRFJNX0RFQlVHX0RS SVZFUigiJXMgZncgZmV0Y2ggc3RhdHVzIFNVQ0NFU1MsIGNiICVkLCBvYmogJXBcbiIsCj4gPj4r CQkJdWNfZnctPnVjX25hbWUsIGNiX3N0YXR1cywgdWNfZnctPnVjX2Z3X29iaik7Cj4gPj4rCj4g Pj4rCXJlbGVhc2VfZmlybXdhcmUoZncpOwo+ID4+Kwl1Y19mdy0+dWNfZndfYmxvYiA9IE5VTEw7 Cj4gPj4rCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRFTF9VQ19GSVJNV0FSRV9TVUND RVNTOwo+ID4+KwlyZXR1cm47Cj4gPj4rCj4gPj4rZmFpbDoKPiA+PisJRFJNX0RFQlVHX0RSSVZF UigiJXMgZncgZmV0Y2ggc3RhdHVzIEZBSUw7IGZ3ICVwLCBvYmogJXBcbiIsCj4gPj4rCQl1Y19m dy0+dWNfbmFtZSwgZncsIHVjX2Z3LT51Y19md19vYmopOwo+ID4+KwlEUk1fRVJST1IoIkZhaWxl ZCB0byBmZXRjaCAlcyBmaXJtd2FyZSBmcm9tICVzXG4iLAo+ID4+KwkJICB1Y19mdy0+dWNfbmFt ZSwgdWNfZnctPnVjX2Z3X3BhdGgpOwo+ID4+Kwo+ID4+KwlvYmogPSB1Y19mdy0+dWNfZndfb2Jq Owo+ID4+KwlpZiAob2JqKQo+ID4+KwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+ YmFzZSk7Cj4gPj4rCXVjX2Z3LT51Y19md19vYmogPSBOVUxMOwo+ID4+Kwo+ID4+KwlyZWxlYXNl X2Zpcm13YXJlKGZ3KTsJCS8qIE9LIGV2ZW4gaWYgZncgaXMgTlVMTCAqLwo+ID4+Kwl1Y19mdy0+ dWNfZndfYmxvYiA9IE5VTEw7Cj4gPj4rCXVjX2Z3LT51Y19md19mZXRjaF9zdGF0dXMgPSBJTlRF TF9VQ19GSVJNV0FSRV9GQUlMOwo+ID4+K30KPiA+Cj4gPlNvIGxvb2tpbmcgYXQgdGhpcyB0aGUg ZW50aXJlIGxpYnJhcnkgbm93IGJvaWxzIGRvd24gdG8gYSBnbG9yaWZpZWQKPiA+dmVyc2lvbiBv Zgo+ID4KPiA+CWlmIChyZXF1ZXN0X2Zpcm13YXJlICE9IDApIHsKPiA+CQlEUk1fREVCVUdfR0VN KCJndWMgZmlybXdhcmUgbG9hZGluZyBmYWlsZWRcbiIpOwo+ID4JCXJldHVybiBmYWlsOwo+ID4J fQo+ID4KPiA+CWdlbV9vYmpfY3JlYXRlX2Zyb21fZGF0ZShmdykKPiA+CXJlbGFzZV9maXJtd2Fy ZQo+ID4KPiA+Q2FuIEkgaGF2ZSB0aGF0IGlubGluZWQgKG9yIGFzIGEgc2ltcGxlIHN0YXRpYyBo ZWxwZXIgZnVuY3Rpb24pIGludG8gdGhlCj4gPmNhbGxzaXRlIHBsZWFzZT8gWWVzIHRoYXQgdW5m b3J0dW5hdGVseSBtZWFucyBJIGFzayB5b3UgdG8gY2FuIHRoZSByZWFsbHkKPiA+Z3JlYXQga2Vy bmVsZG9jIHlvdSd2ZSBkb25lIChJJ2QgcmVhbGx5IGxpa2UgYWxsIHBhdGNoZXMgdG8gbG9vayB0 aGlzCj4gPmdyZWF0IHdydCBkb2NzKSwgYnV0IEkgYWxzbyB0aGluayB0aGF0IHRoZSBhYnN0cmFj dGlvbiByZWFsbHkgZG9lc24ndCBwYXkKPiA+b2ZmLiBGaXJtd2FyZS1sb2FkaW5nIHVzaW5nIHJl cXVlc3RfZmlybXdhcmUgaXMgbm90IHNvbWV0aGluZyB0cmlja3kKPiA+ZW5vdWdoIHRvIGp1c3Rp ZnkgYWRkZWQgYWJzdHJhY3Rpb24uIFllcyB0aGVyZSB3YXMgdGhlCj4gPnN5bmNocm9uaXphdGlv bi9jb21wbGV0aW9uIHN0dWZmIGluIHRoZXJlIGJlZm9yZSwgYnV0IGFzIGV4cGxhaW5lZCBpbiB0 aGUKPiA+cHJldmlvdXMgZGlzY3Vzc2lvbiBJIGRvbid0IGV4cGVjdCB1cyB0byBiZSBhYmxlIHRv IHNoYXJlIHRoYXQgcGFydCBhdAo+ID5hbGwsIGFuZCBJJ2QgbGlrZSBhbnkga2luZCBvZiBzeW5j aHJvbml6YXRpb24gdG8gYmUgb3Blbi1jb2RlZCB1c2luZwo+ID5ub3JtYWwga2VybmVsIHByaW1p dGl2ZXMgKGxpa2UgZmx1c2hfd29yayBvciBzaW1pbGFyKSB0byBtYWtlIGl0IHJlYWxseQo+ID5z dGljayBvdXQgdG8gcmV2aWV3ZXJzLgo+ID4KPiA+VGhhbmtzLCBEYW5pZWwKPiAKPiBXZWxsLCBJ IC9jb3VsZC8gc3F1YXNoIHRoZXNlIGZ1bmN0aW9ucyBpbnRvIHRoZSBHdUMtc3BlY2lmaWMgbG9h ZGVyIGFuZCBwdXQKPiBhICJnIiBvbiB0aGUgZnJvbnQgb2YgYWxsIHRoZSBuYW1lcywgYnV0IHRo YXQgd291bGQganVzdCByZXN1bHQgaW4gdGhlIHdob2xlCj4gbG90IGdldHRpbmcgY29weXBhc3Rl ZCB3aGVuIHdlIGNvbWUgdG8gZG8gdGhlIG5leHQgbGV0dGVyIG9mIHRoZSBhbHBoYWJldCA6KAo+ IAo+IE9yIHdvcnNlIHN0aWxsLCBzb21lb25lIGVsc2Ugd291bGQgd3JpdGUgYSBjb21wbGV0ZWx5 IG5ldyB2ZXJzaW9uIGZyb20KPiBzY3JhdGNoLCB3aGljaCB3b3VsZCBiZSBhIHdhc3RlIG9mIGVm Zm9ydCBib3RoIGZvciB0aGVtIGFuZCBmb3IgdGhvc2Ugd2hvCj4gd291bGQgdGhlbiBoYXZlIHRv IHJldmlldyB0aGUgbmV3IGNvZGUsIHNwb3QgdGhlIHNpbWlsYXJpdGllcyBhbmQKPiBkaWZmZXJl bmNlcywgYW5kIGFzayBmb3IgaXQgYWxsIHRvIGJlIHJld3JpdHRlbiB0byBiZSBtb3JlIGxpa2Ug dGhlCj4gYnktdGhlbi1leGlzdGluZyBHdUMgY29kZS4KPiAKPiBJdCdzIGFsc28gbm90IHF1aXRl IGFzIHNpbXBsZSBhcyB5b3VyIHBhcmFwaHJhc2U7IGV2ZW4gd2l0aG91dCB0aGUgcHJlZmV0Y2gK PiBjb2RlLCBpdCBhbHNvIGRlYWxzIHdpdGggdGhlIGRvLXRoaXMtb25jZSBsb2dpYywgYW5kIGNv cnJlY3RseSBmcmVlaW5nCj4gcmVzb3VyY2VzIGluIGFsbCBlcnJvciBwYXRoczsgbm90IGVub3Jt b3VzbHkgY29tcGxpY2F0ZWQgYnV0IHdoeSByZXBlYXQKPiBzaW1pbGFyIGNvZGUgaW4gc2V2ZXJh bCBwbGFjZXMgd2hlbiB5b3UgY2FuIGp1c3Qgc2hhcmUgdGhlIG9uZSBpbnN0YW5jZSAoYW5kCj4g dGhlcmUgL3dpbGwvIGJlIG90aGVyIHVzZXJzIGZvciB0aGlzIGNvZGUpLiBBbmQgd2UgbWF5IHdl bGwgYWRkIG90aGVyIGNvbW1vbgo+IGZ1bmN0aW9uYWxpdHkgaGVyZSwgc2hvdWxkIGl0IHR1cm4g b3V0IHVzZWZ1bCBmb3IgbW9yZSB0aGFuIG9uZSB1Qy4gWW91J3JlCj4ganVzdCBhc2tpbmcgdG8g aW5jcmVhc2UgdGhlIG1haW50ZW5hbmNlIGVmZm9ydCBieSBkdXBsaWNhdGluZyB0aGUgbG9hZGVy Cj4gY29kZSByYXRoZXIgdGhhbiBzaGFyaW5nIGl0IDooCgpkby10aGlzLW9uY2UgaXMgc29sdmVk IGVhc2lseSBieSBtb3ZpbmcgdGhlIGRvLWl0LW9uY2UgcGFydHMgaW50bwpnZW1faW5pdCwgd2hp Y2ggaXMgY2FsbGVkIG9uY2UgYXQgZHJpdmVyIGxvYWQuIFRoZSBjb21wbGV4aXR5IHNlZW1zIHRv CmVhc3kgdG8gcmVkdWNlIGJ5IGRyb3BwaW5nIGFsbCB0aGUgZmFuY3kgbG9hZGVyIHN0YXR1cyBs b2dpYyAtIHRoZSBkcml2ZXIKb25seSBjYXJlcyBhYm91dCBzdWNjZXNzIHkvbi4gQW5kIGZvciAi bm8iIHdlIGp1c3QgZGVjbGFyZSB0aGUgZ3B1IGRlYWQuCkFueXRoaW5nIGluIGFkZGl0aW9uIHRv IHRoYXQgY2FuIGJlIGR1bXBlZCBpbnRvIGRtZXNnIHVzaW5nIGFwcHJvcHJpYXRlCkRSTV9ERUJV RyogZm9yIGRldmVsb3BlcnMgY29uc3VtcHRpb24uIE5vIG5lZWQgZm9yIGRlYnVnZnMgb3IgYW55 dGhpbmcKZWxzZSByZWFsbHkgaW1vLgoKVGhhdCBsZWF2ZXMgYSBzbWFsbCBmdW5jdGlvbnMgd2hp Y2ggY29tcHV0ZXMgdGhlIGZpcm13YXJlIG5hbWUgcGVyCnBsYXRmcm9tLCBkb2VzIHRoZSByZXF1 ZXN0X2Zpcm13YXJlLCBhbGxvY2F0ZXMgYSBnZW0gb2JqZWN0LCBjb3BpZXMgdGhlCmZpcm13YXJl IGRhdGEgb3ZlciwgcmVsZWFzZXMgdGhlIGZpcm13YXJlIGFuZCB0aGVuIHJldHVybnMgdGhlIHJl c3VsdGluZwpnZW0gb2JqZWN0IChvciBOVUxMIHdoZW4gYW55dGhpbmcgd2VudCB3cm9uZykuIGd1 YyBpbml0IGluIGdlbV9pbml0X2h3IGNhbgp0aGVuIGNvbnN1bWUgdGhhdC4KCk9uY2Ugd2UgaGF2 ZSB0aGUgZ3VjKzEgbGFuZGluZyB3ZSBjYW4ganVzdCBleHBvcnQgdGhhdCBvciByZW5hbWUKaW50 ZWxfZ3VjXyogdG8gaW50ZWxfZ3RfKiBhbmQgdGhhdCdzIGl0IC0gdGhlIGxvYWRlciBoZXJlIGlz bid0IGdlbmVyaWMKYmVjYXVzZSBpdCBjb3BpZXMgdGhlIGZpcm13YXJlIHRvIGdlbSBvYmplY3Rz LCB3aGljaCBpc24ndCBhY3R1YWxseSB3aGF0CnRoZSBkbWMgbG9hZGVyIG5lZWRzLgoKPiBDb252 ZXJzZWx5LCBpZiB5b3UgdGhpbmsgaXQgYWRkcyBsaXR0bGUgZnVuY3Rpb25hbGl0eSwgaXQgYWxz byBhZGRzIGxpdHRsZQo+IG92ZXJoZWFkLiBJIHdvdWxkbid0IG11Y2ggd2FudCB0byBpbmxpbmUg dGhlIGN1cnJlbnRseS1nZW5lcmljIGZ1bmN0aW9ucwo+IGludG8gdGhlaXIgY2FsbGVycyBhbHNv IGJlY2F1c2UgdGhhdCB3b3VsZCBibG9hdCB0aGVtIHRvbyBtdWNoOyBhdCB0aGUKPiBtb21lbnQs IHdpdGggdGhlIHNwbGl0IGJldHdlZW4gR3VDLXNwZWNpZmljIGFuZCBjb21tb24gZnVuY3Rpb25z LCB0aGUKPiBiaWdnZXN0IGZ1bmN0aW9ucyB0dXJuIG91dCB0byBiZSBhYm91dCBvbmUgc2NyZWVu ZnVsLiBJZiB3ZSAib3Blbi1jb2RlIiBpdAo+IGFsbCB3ZSBlbmQgdXAgd2l0aCBtb25zdHJvdXMg MzAwLWxpbmUtcGx1cyBmdW5jdGlvbnMgd2l0aCBhbnkgbnVtYmVyIG9mCj4gZXJyb3IgcGF0aHMs IHdoaWNoIGlzIGp1c3Qgbm90IG5pY2UuCgpJdCBhZGRzIGEgZmFpcmx5IGNvbXBsZXggaW50ZXJm YWNlIChhbmQgYSBub24tc3RhbmRhcmQgb25lIG9uIHRvcCB3aXRoIGFsbAp0aGUgY3VzdG9tIHN0 YXRlIGRlZmluZXMpLCBhbmQgaXQgc3RhcnRzIG91dCB3aXRoIGdlbmVyaWMgY29kZSBpbnN0ZWFk IG9mCnRoZSBtb3JlIGNvbW1vbiBleHRyYWN0IGNvbW1vbiBjb2RlIGFmdGVyIHRoZSBmYWN0LiBE ZXNpbmdpbmcgaW50ZXJmYWNlCmJlZm9yZSB0aGUgdXNlcnMgYXJlIHJlYWxseSBjbGVhciB0ZW5k cyB0byByZXN1bHQgaW4gb3ZlcmZpdHRlZCBkZXNpZ24KKHlvdSB3YW50ZWQgdG8gdXNlIHRoaXMg Zm9yIGRtYyB0b28gYWZ0ZXIgYWxsIHdoZXJlIGl0IGRvZXNuJ3QgcmVhbGx5IGZpdAp0aGF0IHdl bGwpLgoKPiBTbyBJJ2QgcmVhbGx5IHByZWZlciB0byBrZWVwIHRoZSB1dGlsaXR5IGNvZGUgYW5k IHRoZSBHdUMtc3BlY2lmaWMgc3R1ZmYKPiB0aWRpbHkgc2VwYXJhdGVkIGV2ZW4gYmVmb3JlIHdl IGhhdmUgdGhlIG90aGVyIHBvdGVudGlhbCB1c2VycyBvZiB0aGlzCj4gc3VwcG9ydCBjb2RlIGlu IHVwc3RyZWFtLgoKSSdtIG5vdCBvcHBvc2VkIHRvIGEgc21hbGwgaGVscGVyIHdoaWNoIGVzc2Vu dGlhbGx5IHdvdWxkIGRvCnJlcXVlc3RfZmlybXdhcmUrY29weSB0byBnZW0gYm8uIFRoaXMgaGVy ZSBpcyBhIGxvdCBtb3JlIHRoYW4gdGhhdC4KLURhbmllbAotLSAKRGFuaWVsIFZldHRlcgpTb2Z0 d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1h aWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK