From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Antoine, Peter" Subject: Re: [PATCH] drm/i915 : Added Programming of the MOCS Date: Fri, 5 Jun 2015 08:58:05 +0000 Message-ID: References: <1433442442-512-1-git-send-email-peter.antoine@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id 3CCBE6E48F for ; Fri, 5 Jun 2015 01:58:08 -0700 (PDT) In-Reply-To: Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Matt Turner Cc: "intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org RG9uZS4NCkknbGwgd2FpdCBhYml0IGFueSBvdGhlciByZXZpZXcgcmVzcG9uc2VzIHRoZW4gdXBk YXRlIHRoZSBwYXRjaC4NCg0KUGV0ZXIuIA0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K RnJvbTogTWF0dCBUdXJuZXIgW21haWx0bzptYXR0c3Q4OEBnbWFpbC5jb21dIA0KU2VudDogVGh1 cnNkYXksIEp1bmUgNCwgMjAxNSAxMDozMyBQTQ0KVG86IEFudG9pbmUsIFBldGVyDQpDYzogaW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KU3ViamVjdDogUmU6IFtJbnRlbC1nZnhdIFtQ QVRDSF0gZHJtL2k5MTUgOiBBZGRlZCBQcm9ncmFtbWluZyBvZiB0aGUgTU9DUw0KDQpPbiBUaHUs IEp1biA0LCAyMDE1IGF0IDExOjI3IEFNLCBQZXRlciBBbnRvaW5lIDxwZXRlci5hbnRvaW5lQGlu dGVsLmNvbT4gd3JvdGU6DQo+IFRoaXMgY2hhbmdlIGFkZHMgdGhlIHByb2dyYW1taW5nIG9mIHRo ZSBNT0NTIHJlZ2lzdGVycyB0byB0aGUgZ2VuIDkrIA0KPiBwbGF0Zm9ybXMuIFRoaXMgY2hhbmdl IHNldCBwcm9ncmFtcyB0aGUgTU9DUyByZWdpc3RlciB2YWx1ZXMgdG8gYSBzZXQgDQo+IG9mIHZh bHVlcyB0aGF0IGFyZSBkZWZpbmVkIHRvIGJlIG9wdGltYWwuDQo+DQo+IEl0IGNyZWF0ZXMgYSBm aXhlZCByZWdpc3RlciBzZXQgdGhhdCBpcyBwcm9ncmFtbWVkIGFjcm9zcyB0aGUgDQo+IGRpZmZl cmVudCBlbmdpbmVzIHNvIHRoYXQgYWxsIGVuZ2luZXMgaGF2ZSB0aGUgc2FtZSB0YWJsZS4gVGhp cyBpcyANCj4gZG9uZSBhcyB0aGUgbWFpbiBSQ1MgY29udGV4dCBvbmx5IGhvbGRzIHRoZSByZWdp c3RlcnMgZm9yIGl0c2VsZiBhbmQgDQo+IHRoZSBzaGFyZWQNCj4gTDMgdmFsdWVzLiBCeSB0cnlp bmcgdG8ga2VlcCB0aGUgcmVnaXN0ZXJzIGNvbnNpc3RlbnQgYWNyb3NzIHRoZSANCj4gZGlmZmVy ZW50IGVuZ2luZXMgaXQgc2hvdWxkIG1ha2UgdGhlIHByb2dyYW1taW5nIGZvciB0aGUgcmVnaXN0 ZXJzIA0KPiBjb25zaXN0ZW50Lg0KPg0KPiBTaWduZWQtb2ZmLWJ5OiBQZXRlciBBbnRvaW5lIDxw ZXRlci5hbnRvaW5lQGludGVsLmNvbT4NCj4gLS0tDQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSAgICAgfCAgIDMgKy0NCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgg ICB8ICAgOSArKw0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgIHwgIDY4ICsr KysrKysrKysrICANCj4gZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jIHwgMjQxIA0K PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaW50ZWxfbW9jcy5oIHwgMTAxICsrKysrKysrKysrKysrKysNCj4gIDUgZmlsZXMg Y2hhbmdlZCwgNDIxIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkgIGNyZWF0ZSBtb2RlIDEw MDY0NCANCj4gZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jICBjcmVhdGUgbW9kZSAx MDA2NDQgDQo+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3MuaA0KPg0KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUgDQo+IGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvTWFrZWZpbGUgaW5kZXggYjdkZGY0OC4uY2Q3YjkxMCAxMDA2NDQNCj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvTWFrZWZpbGUNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv TWFrZWZpbGUNCj4gQEAgLTM2LDcgKzM2LDggQEAgaTkxNS15ICs9IGk5MTVfY21kX3BhcnNlci5v IFwNCj4gICAgICAgICAgIGk5MTVfdHJhY2VfcG9pbnRzLm8gXA0KPiAgICAgICAgICAgaW50ZWxf bHJjLm8gXA0KPiAgICAgICAgICAgaW50ZWxfcmluZ2J1ZmZlci5vIFwNCj4gLSAgICAgICAgIGlu dGVsX3VuY29yZS5vDQo+ICsgICAgICAgICBpbnRlbF91bmNvcmUubyBcDQo+ICsgICAgICAgICBp bnRlbF9tb2NzLm8NCj4NCj4gICMgYXV0b2dlbmVyYXRlZCBudWxsIHJlbmRlciBzdGF0ZQ0KPiAg aTkxNS15ICs9IGludGVsX3JlbmRlcnN0YXRlX2dlbjYubyBcDQo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIA0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVnLmggaW5kZXggNzIxMzIyNC4uM2E0MzViNSAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9yZWcuaA0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X3JlZy5oDQo+IEBAIC03ODI5LDQgKzc4MjksMTMgQEAgZW51bSBza2xfZGlzcF9wb3dlcl93ZWxs cyB7ICAjZGVmaW5lIF9QQUxFVFRFX0EgDQo+IChkZXZfcHJpdi0+aW5mby5kaXNwbGF5X21taW9f b2Zmc2V0ICsgMHhhMDAwKSAgI2RlZmluZSBfUEFMRVRURV9CIA0KPiAoZGV2X3ByaXYtPmluZm8u ZGlzcGxheV9tbWlvX29mZnNldCArIDB4YTgwMCkNCj4NCj4gKy8qIE1PQ1MgKE1lbW9yeSBPYmpl Y3QgQ29udHJvbCBTdGF0ZSkgcmVnaXN0ZXJzICovDQo+ICsjZGVmaW5lIEdFTjlfTE5DRkNNT0NT MCAgICAgICAgICAgICAgICAoMHhCMDIwKSAgICAgICAgLyogTDMgQ2FjaGUgQ29udHJvbCBiYXNl ICovDQo+ICsNCj4gKyNkZWZpbmUgR0VOOV9HRlhfTU9DU18wICAgICAgICAgICAgICAgICgweGM4 MDApICAgICAgICAvKiBHcmFwaGljcyBNT0NTIGJhc2UgcmVnaXN0ZXIqLw0KPiArI2RlZmluZSBH RU45X01GWDBfTU9DU18wICAgICAgICgweGM5MDApICAgICAgICAvKiBNZWRpYSAwIE1PQ1MgYmFz ZSByZWdpc3RlciovDQo+ICsjZGVmaW5lIEdFTjlfTUZYMV9NT0NTXzAgICAgICAgKDB4Y0EwMCkg ICAgICAgIC8qIE1lZGlhIDEgTU9DUyBiYXNlIHJlZ2lzdGVyKi8NCj4gKyNkZWZpbmUgR0VOOV9W RUJPWF9NT0NTXzAgICAgICAoMHhjQjAwKSAgICAgICAgLyogVmlkZW8gTU9DUyBiYXNlIHJlZ2lz dGVyKi8NCj4gKyNkZWZpbmUgR0VOOV9CTFRfTU9DU18wICAgICAgICAgICAgICAgICgweGNjMDAp ICAgICAgICAvKiBCbGl0dGVyIE1PQ1MgYmFzZSByZWdpc3RlciovDQo+ICsNCj4gICNlbmRpZiAv KiBfSTkxNV9SRUdfSF8gKi8NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5jIA0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jDQo+IGluZGV4 IDlmNTQ4NWQuLmM4NzU1NjkgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2xyYy5jDQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5jDQo+IEBA IC0xMzUsNiArMTM1LDcgQEANCj4gICNpbmNsdWRlIDxkcm0vZHJtUC5oPg0KPiAgI2luY2x1ZGUg PGRybS9pOTE1X2RybS5oPg0KPiAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiDQo+ICsjaW5jbHVkZSAi aW50ZWxfbW9jcy5oIg0KPg0KPiAgI2RlZmluZSBHRU45X0xSX0NPTlRFWFRfUkVOREVSX1NJWkUg KDIyICogUEFHRV9TSVpFKSAgI2RlZmluZSANCj4gR0VOOF9MUl9DT05URVhUX1JFTkRFUl9TSVpF ICgyMCAqIFBBR0VfU0laRSkgQEAgLTEzNzAsNiArMTM3MSw2NyBAQCANCj4gb3V0Og0KPiAgICAg ICAgIHJldHVybiByZXQ7DQo+ICB9DQo+DQo+ICsvKg0KPiArICogaTkxNV9nZW1fcHJvZ3JhbV9t b2NzKCkgLSBwcm9ncmFtIHRoZSBNT0NTIHJlZ2lzdGVyLg0KPiArICoNCj4gKyAqIHJpbmc6ICAg ICAgIFRoZSByaW5nIHRoYXQgdGhlIHByb2dyYW1taW5nIGJhdGNoIHdpbGwgYmUgcnVuIGluLg0K PiArICogY3R4OiAgICAgICAgICAgICAgICBUaGUgaW50ZWxfY29udGV4dCB0byBiZSB1c2VkLg0K PiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBlbWl0IGEgYmF0Y2ggYnVmZmVyIHdpdGgg dGhlIHZhbHVlcyByZXF1aXJlZCANCj4gK2Zvcg0KPiArICogcHJvZ3JhbW1pbmcgdGhlIE1PQ1Mg cmVnaXN0ZXIgdmFsdWVzIGZvciBhbGwgdGhlIGN1cnJlbmx5IA0KPiArc3VwcG9ydGVkDQo+ICsg KiByaW5ncy4NCj4gKyAqDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcywgb3RoZXJ3aXNlIHRo ZSBlcnJvciBzdGF0dXMuDQo+ICsgKi8NCj4gK3N0YXRpYyBpbnQgaTkxNV9nZW1fcHJvZ3JhbV9t b2NzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IGludGVsX2NvbnRleHQgKmN0eCkgew0KPiArICAgICAgIGludCByZXQgPSAw Ow0KPiArDQo+ICsgICAgICAgc3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgdDsNCj4gKyAgICAg ICBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmluZy0+ZGV2Ow0KPiArICAgICAgIHN0cnVjdCBp bnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmID0gDQo+ICsgY3R4LT5lbmdpbmVbcmluZy0+aWRdLnJp bmdidWY7DQo+ICsNCj4gKyAgICAgICBpZiAoZ2V0X21vY3Nfc2V0dGluZ3MoZGV2LCAmdCkpIHsN Cj4gKyAgICAgICAgICAgICAgIHUzMiB0YWJsZV9zaXplOw0KPiArDQo+ICsgICAgICAgICAgICAg ICAvKg0KPiArICAgICAgICAgICAgICAgICogT0suIEZvciBlYWNoIHN1cHBvcnRlZCByaW5nOg0K PiArICAgICAgICAgICAgICAgICogIHRhYmxlX3NpemUgKiAyIGR3b3JkcyBmb3IgZWFjaCBjb250 cm9sX3ZhbHVlDQo+ICsgICAgICAgICAgICAgICAgKiAgcGx1cyB0YWJsZS8yIGR3b3JkcyBmb3Ig bDNjYyB2YWx1ZXMuDQo+ICsgICAgICAgICAgICAgICAgKg0KPiArICAgICAgICAgICAgICAgICog IFBsdXMgMSBmb3IgdGhlIGxvYWQgY29tbWFuZCBhbmQgMSBmb3IgdGhlIE5PT1AgcGVyIHJpbmcN Cj4gKyAgICAgICAgICAgICAgICAqICBhbmQgdGhlIGwzY2MgcHJvZ3JhbW1pbmcuDQo+ICsgICAg ICAgICAgICAgICAgKi8NCj4gKyAgICAgICAgICAgICAgIHRhYmxlX3NpemUgPSBHRU45X05VTV9N T0NTX1JJTkdTICogKCgyICogdC5zaXplKSArIDIpICsNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0LnNpemUgKyAyOw0KPiArICAgICAgICAgICAgICAgcmV0ID0gaW50ZWxfbG9n aWNhbF9yaW5nX2JlZ2luKHJpbmdidWYsIGN0eCwgdGFibGVfc2l6ZSk7DQo+ICsgICAgICAgICAg ICAgICBpZiAocmV0KSB7DQo+ICsgICAgICAgICAgICAgICAgICAgICAgIERSTV9FUlJPUigiaW50 ZWxfbG9naWNhbF9yaW5nX2JlZ2luIGZhaWxlZCAlZFxuIiwgcmV0KTsNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gKyAgICAgICAgICAgICAgIH0NCj4gKw0KPiArICAg ICAgICAgICAgICAgLyogcHJvZ3JhbSB0aGUgY29udHJvbCByZWdpc3RlcnMgKi8NCj4gKyAgICAg ICAgICAgICAgIGVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYsICZ0LCBHRU45X0dGWF9N T0NTXzApOw0KPiArICAgICAgICAgICAgICAgZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1 ZiwgJnQsIEdFTjlfTUZYMF9NT0NTXzApOw0KPiArICAgICAgICAgICAgICAgZW1pdF9tb2NzX2Nv bnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfTUZYMV9NT0NTXzApOw0KPiArICAgICAgICAg ICAgICAgZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUocmluZ2J1ZiwgJnQsIEdFTjlfVkVCT1hfTU9D U18wKTsNCj4gKyAgICAgICAgICAgICAgIGVtaXRfbW9jc19jb250cm9sX3RhYmxlKHJpbmdidWYs ICZ0LCBHRU45X0JMVF9NT0NTXzApOw0KPiArDQo+ICsgICAgICAgICAgICAgICAvKiBub3cgcHJv Z3JhbSB0aGUgbDNjYyByZWdpc3RlcnMgKi8NCj4gKyAgICAgICAgICAgICAgIGVtaXRfbW9jc19s M2NjX3RhYmxlKHJpbmdidWYsICZ0KTsNCj4gKw0KPiArICAgICAgICAgICAgICAgaW50ZWxfbG9n aWNhbF9yaW5nX2FkdmFuY2UocmluZ2J1Zik7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIERSTV9J TkZPKCJNT0NTOiBUYWJsZSBzZXQgaW4gQ29udGV4dFxuIik7DQo+ICsgICAgICAgfSBlbHNlIHsN Cj4gKyAgICAgICAgICAgICAgIERSTV9JTkZPKCJNT0NTOiBUYWJsZSBOb3Qgc3VwcG9ydGVkIG9u IHBsYXRmb3JtXG4iKTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICByZXR1cm4gcmV0Ow0K PiArfQ0KPiArDQo+ICsNCj4gIHN0YXRpYyBpbnQgZ2VuOF9pbml0X3Jjc19jb250ZXh0KHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcsDQo+ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IGludGVsX2NvbnRleHQgKmN0eCkgIHsgQEAgLTEzNzksNiANCj4gKzE0NDEsMTIgQEAgc3RhdGlj IGludCBnZW44X2luaXRfcmNzX2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZywN Cj4gICAgICAgICBpZiAocmV0KQ0KPiAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4NCj4g KyAgICAgICAvKg0KPiArICAgICAgICAqIEZhaWxpbmcgdG8gcHJvZ3JhbSB0aGUgTU9DUyBpcyBu b24tZmF0YWwuVGhlIHN5c3RlbSB3aWxsIG5vdA0KPiArICAgICAgICAqIHJ1biBhdCBwZWFrIHBl cmZvcm1hbmNlLiBTbyBnZW5lcmF0ZSBhIHdhcm5pbmcgYW5kIGNhcnJ5IG9uLg0KPiArICAgICAg ICAqLw0KPiArICAgICAgIFdBUk5fT04oaTkxNV9nZW1fcHJvZ3JhbV9tb2NzKHJpbmcsIGN0eCkg IT0gMCk7DQo+ICsNCj4gICAgICAgICByZXR1cm4gaW50ZWxfbHJfY29udGV4dF9yZW5kZXJfc3Rh dGVfaW5pdChyaW5nLCBjdHgpOyAgfQ0KPg0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbW9jcy5jIA0KPiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX21vY3Mu Yw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4yMGM5NzM2DQo+IC0t LSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbW9jcy5jDQo+ IEBAIC0wLDAgKzEsMjQxIEBADQo+ICsvKg0KPiArICogQ29weXJpZ2h0IChjKSAyMDE1IEludGVs IENvcnBvcmF0aW9uDQo+ICsgKg0KPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwg ZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gDQo+ICtvYnRhaW5pbmcgYQ0KPiArICogY29w eSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRo ZSANCj4gKyJTb2Z0d2FyZSIpLA0KPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgDQo+ICtsaW1pdGF0aW9uDQo+ICsgKiB0 aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0 ZSwgDQo+ICtzdWJsaWNlbnNlLA0KPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gDQo+ICt0aGUNCj4gKyAqIFNvZnR3 YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIA0KPiAr Y29uZGl0aW9uczogKg0KPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyANCj4gK3RoZSBuZXh0DQo+ICsgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgDQo+ICtvZiB0aGUNCj4gKyAqIFNvZnR3YXJlLg0KPiArICoNCj4gKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCANCj4g K0VYUFJFU1MgT1INCj4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8g VEhFIFdBUlJBTlRJRVMgT0YgDQo+ICtNRVJDSEFOVEFCSUxJVFksDQo+ICsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg DQo+ICtTSEFMTA0KPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgDQo+ICtPUiBPVEhFUg0KPiArICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIA0K PiArQVJJU0lORyBGUk9NLA0KPiArICogT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiANCj4gK0RFQUxJTkdTIElOIFRIRQ0KPiArICog U09GVFdBUkUuDQo+ICsgKg0KPiArICogQXV0aG9yczoNCj4gKyAqICAgIFBldGVyIEFudG9pbmUg PHBldGVyLmFudG9pbmVAaW50ZWwuY29tPg0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlICJpbnRl bF9tb2NzLmgiDQo+ICsjaW5jbHVkZSAiaW50ZWxfbHJjLmgiDQo+ICsjaW5jbHVkZSAiaW50ZWxf cmluZ2J1ZmZlci5oIg0KPiArDQo+ICsvKg0KPiArICogTU9DUyB0YWJsZXMNCj4gKyAqDQo+ICsg KiBUaGVzZSBhcmUgdGhlIE1PQ1MgdGFibGVzIHRoYXQgYXJlIHByb2dyYW1tZWQgYWNyb3NzIGFs bCB0aGUgcmluZ3MuDQo+ICsgKiBUaGUgY29udHJvbCB2YWx1ZSBpcyBwcm9ncmFtbWVkIHRvIGFs bCB0aGUgcmluZ3MgdGhhdCBzdXBwb3J0IHRoZQ0KPiArICogTU9DUyByZWdpc3RlcnMuIFdoaWxl IHRoZSBsM2NjX3ZhbHVlcyBhcmUgb25seSBwcm9ncmFtbWVkIHRvIHRoZQ0KPiArICogTE5DRkNN T0NTMCAtIExOQ0ZDTU9DUzMyIHJlZ2lzdGVycy4NCj4gKyAqDQo+ICsgKiBOT1RFOiBUaGVzZSB0 YWJsZXMgTVVTVCBzdGFydCB3aXRoIGJlaW5nIHVuY2FjaGVkIHswLDB9IGFuZCB0aGUNCj4gKyAq ICAgICAgIHRoZSBsZW5ndGggTVVTVCBiZSBsZXNzIHRoYW4gNjMgYXMgdGhlIGxhc3QgdHdvIHJl Z2lzdGVycyBhcmUNCj4gKyAqICAgICAgIHJlc2VydmVkIGJ5IHRoZSBoYXJkd2FyZS4NCj4gKyAq Lw0KPiArc3RydWN0IGRybV9pOTE1X21vY3NfZW50cnkgc2t5bGFrZV9tb2NzX3RhYmxlW10gPSB7 DQoNClByZXN1bWFibHkgeW91IHdhbnQgdGhpcy4uLg0KDQo+ICsgICAgICAgIC8qIHsweDAwMDAw MDA5LCAweDAwMTB9ICovDQo+ICsgICAgICAgeyhNT0NTX0NBQ0hFQUJJTElUWSgxKSB8IE1PQ1Nf VEdUX0NBQ0hFKDIpIHwgTU9DU19MUlVNKDApIHwNCj4gKyAgICAgICAgICAgICAgIE1PQ1NfQU9N KDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8DQo+ICsg ICAgICAgICAgICAgICBNT0NTX1NDRigwKSksDQo+ICsgICAgICAgICAgICAgICAoTU9DU19FU0Mo MCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKDEpKX0sDQo+ICsgICAgICAg IC8qIHsweDAwMDAwMDNiLCAweDAwMzB9ICovDQo+ICsgICAgICAgeyhNT0NTX0NBQ0hFQUJJTElU WSgzKSB8IE1PQ1NfVEdUX0NBQ0hFKDIpIHwgTU9DU19MUlVNKDMpIHwNCj4gKyAgICAgICAgICAg ICAgIE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BG TSgwKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX1NDRigwKSksDQo+ICsgICAgICAgICAgICAg ICAoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKDMpKX0s DQo+ICsgICAgICAgIC8qIHsweDAwMDAwMDM5LCAweDAwMTB9ICovDQo+ICsgICAgICAgeyhNT0NT X0NBQ0hFQUJJTElUWSgxKSB8IE1PQ1NfVEdUX0NBQ0hFKDIpIHwgTU9DU19MUlVNKDMpIHwNCj4g KyAgICAgICAgICAgICAgIE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0ND KDApIHwgTU9DX1BGTSgwKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX1NDRigwKSksDQo+ICsg ICAgICAgICAgICAgICAoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVB QklMSVRZKDEpKX0sDQo+ICsgICAgICAgIC8qIHsweDAwMDAwMDE3LCAweDAwMzB9ICovDQo+ICsg ICAgICAgeyhNT0NTX0NBQ0hFQUJJTElUWSgzKSB8IE1PQ1NfVEdUX0NBQ0hFKDEpIHwgTU9DU19M UlVNKDEpIHwNCj4gKyAgICAgICAgICAgICAgIE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygw KSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX1ND RigwKSksDQo+ICsgICAgICAgICAgICAgICAoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1P Q1NfTDNfQ0FDSEVBQklMSVRZKDMpKX0sDQo+ICsgICAgICAgIC8qIHsweDAwMDAwMDE3LCAweDAw MTB9ICovDQo+ICsgICAgICAgeyhNT0NTX0NBQ0hFQUJJTElUWSgzKSB8IE1PQ1NfVEdUX0NBQ0hF KDEpIHwgTU9DU19MUlVNKDEpIHwNCj4gKyAgICAgICAgICAgICAgIE1PQ1NfQU9NKDApIHwgTU9D U19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8DQo+ICsgICAgICAgICAg ICAgICBNT0NTX1NDRigwKSksDQo+ICsgICAgICAgICAgICAgICAoTU9DU19FU0MoMCkgfCBNT0NT X1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKDEpKX0sDQo+ICsgICAgICAgIC8qIHsweDAw MDAwMDE5LCAweDAwMTB9ICovDQo+ICsgICAgICAgeyhNT0NTX0NBQ0hFQUJJTElUWSgxKSB8IE1P Q1NfVEdUX0NBQ0hFKDIpIHwgTU9DU19MUlVNKDEpIHwNCj4gKyAgICAgICAgICAgICAgIE1PQ1Nf QU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9DX1BGTSgwKSB8DQo+ ICsgICAgICAgICAgICAgICBNT0NTX1NDRigwKSksDQo+ICsgICAgICAgICAgICAgICAoTU9DU19F U0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKDEpKX0sDQo+ICsgICAg ICAgIC8qIHsweDAwMDAwMDM3LCAweDAwMzB9ICovDQo+ICsgICAgICAgeyhNT0NTX0NBQ0hFQUJJ TElUWSgzKSB8IE1PQ1NfVEdUX0NBQ0hFKDEpIHwgTU9DU19MUlVNKDMpIHwNCj4gKyAgICAgICAg ICAgICAgIE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1NfU0NDKDApIHwgTU9D X1BGTSgwKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX1NDRigwKSksDQo+ICsgICAgICAgICAg ICAgICAoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ1NfTDNfQ0FDSEVBQklMSVRZKDMp KX0sDQo+ICsgICAgICAgIC8qIHsweDAwMDAwMDNiLCAweDAwMTB9ICovDQo+ICsgICAgICAgeyhN T0NTX0NBQ0hFQUJJTElUWSgzKSB8IE1PQ1NfVEdUX0NBQ0hFKDIpIHwgTU9DU19MUlVNKDMpIHwN Cj4gKyAgICAgICAgICAgICAgIE1PQ1NfQU9NKDApIHwgTU9DU19MRUNDX0VTQygwKSB8IE1PQ1Nf U0NDKDApIHwgTU9DX1BGTSgwKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX1NDRigwKSksDQo+ ICsgICAgICAgICAgICAgICAoTU9DU19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IA0KPiArTU9DU19M M19DQUNIRUFCSUxJVFkoMSkpfSwgfTsNCj4gKw0KPiArc3RydWN0IGRybV9pOTE1X21vY3NfZW50 cnkgYnJveHRvbl9tb2NzX3RhYmxlW10gPSB7DQoNCi4uLiBhbmQgdGhpcyB0byBiZSAic3RhdGlj IGNvbnN0Ij8NCg0KPiArICAgICAgICAvKiB7MHgwMDAwMDAwMSwgMHgwMDEwfSAqLw0KPiArICAg ICAgIHsoTU9DU19DQUNIRUFCSUxJVFkoMSkgfCBNT0NTX1RHVF9DQUNIRSgwKSB8IE1PQ1NfTFJV TSgwKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkg fCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfA0KPiArICAgICAgICAgICAgICAgTU9DU19TQ0Yo MCkpLA0KPiArICAgICAgICAgICAgICAgKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NT X0wzX0NBQ0hFQUJJTElUWSgxKSl9LA0KPiArICAgICAgICAvKiB7MHgwMDAwNDAwMSwgMHgwMDEw fSAqLw0KPiArICAgICAgIHsoTU9DU19DQUNIRUFCSUxJVFkoMSkgfCBNT0NTX1RHVF9DQUNIRSgw KSB8IE1PQ1NfTFJVTSgwKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX0FPTSgwKSB8IE1PQ1Nf TEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfA0KPiArICAgICAgICAgICAg ICAgTU9DU19TQ0YoMSkpLA0KPiArICAgICAgICAgICAgICAgKE1PQ1NfRVNDKDApIHwgTU9DU19T Q0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgxKSl9LA0KPiArICAgICAgICAvKiB7MHgwMDAw NDAzYiwgMHgwMDMwfSAqLw0KPiArICAgICAgIHsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBNT0NT X1RHVF9DQUNIRSgyKSB8IE1PQ1NfTFJVTSgzKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX0FP TSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfA0KPiAr ICAgICAgICAgICAgICAgTU9DU19TQ0YoMSkpLA0KPiArICAgICAgICAgICAgICAgKE1PQ1NfRVND KDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgzKSl9LA0KPiArICAgICAg ICAvKiB7MHgwMDAwNDAxYiwgMHgwMDMwfSAqLw0KPiArICAgICAgIHsoTU9DU19DQUNIRUFCSUxJ VFkoMykgfCBNT0NTX1RHVF9DQUNIRSgyKSB8IE1PQ1NfTFJVTSgxKSB8DQo+ICsgICAgICAgICAg ICAgICBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19Q Rk0oMCkgfA0KPiArICAgICAgICAgICAgICAgTU9DU19TQ0YoMSkpLA0KPiArICAgICAgICAgICAg ICAgKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgzKSl9 LA0KPiArICAgICAgICAvKiB7MHgwMDAwMDAxNywgMHgwMDEwfSAqLw0KPiArICAgICAgIHsoTU9D U19DQUNIRUFCSUxJVFkoMykgfCBNT0NTX1RHVF9DQUNIRSgxKSB8IE1PQ1NfTFJVTSgxKSB8DQo+ ICsgICAgICAgICAgICAgICBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1ND QygwKSB8IE1PQ19QRk0oMCkgfA0KPiArICAgICAgICAgICAgICAgTU9DU19TQ0YoMCkpLA0KPiAr ICAgICAgICAgICAgICAgKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hF QUJJTElUWSgxKSl9LA0KPiArICAgICAgICAvKiB7MHgwMDAwMDAxOSwgMHgwMDEwfSAqLw0KPiAr ICAgICAgIHsoTU9DU19DQUNIRUFCSUxJVFkoMSkgfCBNT0NTX1RHVF9DQUNIRSgyKSB8IE1PQ1Nf TFJVTSgxKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0Mo MCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfA0KPiArICAgICAgICAgICAgICAgTU9DU19T Q0YoMCkpLA0KPiArICAgICAgICAgICAgICAgKE1PQ1NfRVNDKDApIHwgTU9DU19TQ0MoMCkgfCBN T0NTX0wzX0NBQ0hFQUJJTElUWSgxKSl9LA0KPiArICAgICAgICAvKiB7MHgwMDAwMDAzNywgMHgw MDMwfSAqLw0KPiArICAgICAgIHsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBNT0NTX1RHVF9DQUNI RSgxKSB8IE1PQ1NfTFJVTSgzKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NTX0FPTSgwKSB8IE1P Q1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfA0KPiArICAgICAgICAg ICAgICAgTU9DU19TQ0YoMCkpLA0KPiArICAgICAgICAgICAgICAgKE1PQ1NfRVNDKDApIHwgTU9D U19TQ0MoMCkgfCBNT0NTX0wzX0NBQ0hFQUJJTElUWSgzKSl9LA0KPiArICAgICAgICAvKiB7MHgw MDAwMDAzYiwgMHgwMDEwfSAqLw0KPiArICAgICAgIHsoTU9DU19DQUNIRUFCSUxJVFkoMykgfCBN T0NTX1RHVF9DQUNIRSgyKSB8IE1PQ1NfTFJVTSgzKSB8DQo+ICsgICAgICAgICAgICAgICBNT0NT X0FPTSgwKSB8IE1PQ1NfTEVDQ19FU0MoMCkgfCBNT0NTX1NDQygwKSB8IE1PQ19QRk0oMCkgfA0K PiArICAgICAgICAgICAgICAgTU9DU19TQ0YoMCkpLA0KPiArICAgICAgICAgICAgICAgKE1PQ1Nf RVNDKDApIHwgTU9DU19TQ0MoMCkgfCANCj4gK01PQ1NfTDNfQ0FDSEVBQklMSVRZKDEpKX0sIH07 DQo+ICsNCj4gKy8qKg0KPiArICogZ2V0X21vY3Nfc2V0dGluZ3MNCj4gKyAqDQo+ICsgKiBUaGlz IGZ1bmN0aW9uIHdpbGwgcmV0dXJuIHRoZSB2YWx1ZXMgb2YgdGhlIE1PQ1MgdGFibGUgdGhhdCBu ZWVkcyANCj4gK3RvDQo+ICsgKiBiZSBwcm9ncmFtbWVkIGZvciB0aGUgcGxhdGZvcm0uIEl0IHdp bGwgcmV0dXJuIHRoZSB2YWx1ZXMgdGhhdCANCj4gK25lZWQNCj4gKyAqIHRvIGJlIHByb2dyYW1t ZWQgYW5kIGlmIHRoZXkgbmVlZCB0byBiZSBwcm9ncmFtbWVkLg0KPiArICoNCj4gKyAqIElmIHRo ZSByZXR1cm4gdmFsdWVzIGlzIGZhbHNlIHRoZW4gdGhlIHJlZ2lzdGVycyBkbyBub3QgbmVlZCBw cm9ncmFtbWluZy4NCj4gKyAqLw0KPiArYm9vbCBnZXRfbW9jc19zZXR0aW5ncyhzdHJ1Y3QgZHJt X2RldmljZSAqZGV2LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJt X2k5MTVfbW9jc190YWJsZSAqdGFibGUpIHsNCj4gKyAgICAgICBib29sICAgIHJlc3VsdCA9IGZh bHNlOw0KPiArDQo+ICsgICAgICAgaWYgKElTX1NLWUxBS0UoZGV2KSkgew0KPiArICAgICAgICAg ICAgICAgdGFibGUtPnNpemUgID0gQVJSQVlfU0laRShza3lsYWtlX21vY3NfdGFibGUpOw0KPiAr ICAgICAgICAgICAgICAgdGFibGUtPnRhYmxlID0gc2t5bGFrZV9tb2NzX3RhYmxlOw0KPiArICAg ICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsNCj4gKyAgICAgICB9IGVsc2UgaWYgKElTX0JST1hU T04oZGV2KSkgew0KPiArICAgICAgICAgICAgICAgdGFibGUtPnNpemUgID0gQVJSQVlfU0laRShi cm94dG9uX21vY3NfdGFibGUpOw0KPiArICAgICAgICAgICAgICAgdGFibGUtPnRhYmxlID0gYnJv eHRvbl9tb2NzX3RhYmxlOw0KPiArICAgICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsNCj4gKyAg ICAgICB9IGVsc2Ugew0KPiArICAgICAgICAgICAgICAgLyogUGxhdGZvcm0gdGhhdCBzaG91bGQg aGF2ZSBhIE1PQ1MgdGFibGUgZG9lcyBub3QgKi8NCj4gKyAgICAgICAgICAgICAgIFdBUk5fT04o SU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gOSk7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAg cmV0dXJuIHJlc3VsdDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBlbWl0X21vY3NfY29udHJv bF90YWJsZSgpIC0gZW1pdCB0aGUgbW9jcyBjb250cm9sIHRhYmxlDQo+ICsgKiBAcmluZ2J1Zjog ICBEUk0gZGV2aWNlLg0KPiArICogQHRhYmxlOiAgICAgVGhlIHZhbHVlcyB0byBwcm9ncmFtIGlu dG8gdGhlIGNvbnRyb2wgcmVncy4NCj4gKyAqIEByZWdfYmFzZTogIFRoZSBiYXNlIGZvciB0aGUg RW5naW5lIHRoYXQgbmVlZHMgdG8gYmUgcHJvZ3JhbW1lZC4NCj4gKyAqDQo+ICsgKiBUaGlzIGZ1 bmN0aW9uIHNpbXBseSBlbWl0cyBhIE1JX0xPQURfUkVHSVNURVJfSU1NIGNvbW1hbmQgZm9yIHRo ZQ0KPiArICogZ2l2ZW4gdGFibGUgc3RhcnRpbmcgYXQgdGhlIGdpdmVuIGFkZHJlc3MuDQo+ICsg Kg0KPiArICogUmV0dXJuOiBOb3RoaW5nLg0KPiArICovDQo+ICt2b2lkIGVtaXRfbW9jc19jb250 cm9sX3RhYmxlKHN0cnVjdCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfbW9jc190YWJsZSAqdGFi bGUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiByZWdfYmFzZSkg ew0KPiArICAgICAgIHVuc2lnbmVkIGludCBpbmRleDsNCj4gKw0KPiArICAgICAgIGludGVsX2xv Z2ljYWxfcmluZ19lbWl0KHJpbmdidWYsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgIE1JX0xP QURfUkVHSVNURVJfSU1NKEdFTjlfTlVNX01PQ1NfRU5UUklFUykpOw0KPiArDQo+ICsgICAgICAg Zm9yIChpbmRleCA9IDA7IGluZGV4IDwgdGFibGUtPnNpemU7IGluZGV4KyspIHsNCj4gKyAgICAg ICAgICAgICAgIGludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHJlZ19iYXNlICsgKGlu ZGV4ICogNCkpOw0KPiArICAgICAgICAgICAgICAgaW50ZWxfbG9naWNhbF9yaW5nX2VtaXQocmlu Z2J1ZiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLT50 YWJsZVtpbmRleF0uY29udHJvbF92YWx1ZSk7DQo+ICsgICAgICAgfQ0KPiArDQo+ICsgICAgICAg LyoNCj4gKyAgICAgICAgKiBPaywgbm93IHNldCB0aGUgdW51c2VkIGVudHJpZXMgdG8gdW5jYWNo ZWQuIFRoZXNlIGVudHJpZXMgYXJlDQo+ICsgICAgICAgICogb2ZmaWNpYWxseSB1bmRlZmluZWQg YW5kIG5vIGNvbnRhY3QgaXMgZ2l2ZW4gZm9yIHRoZSBjb250ZW50cyBhbmQNCj4gKyAgICAgICAg KiBzZXR0aW5ncyBpcyBnaXZlbiBmb3IgdGhlc2UgZW50cmllcy4NCj4gKyAgICAgICAgKg0KPiAr ICAgICAgICAqIEVudHJ5IDAgaW4gdGhlIHRhYmxlIGlzIHVuY2FjaGVkIC0gc28gd2UgYXJlIGp1 c3Qgd3JpdHRlbiB0aGF0DQo+ICsgICAgICAgICogdmFsdWUgdG8gYWxsIHRoZSB1c2VkIGVudHJp ZXMuDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgZm9yICg7IGluZGV4IDwgR0VOOV9OVU1fTU9D U19FTlRSSUVTOyBpbmRleCsrKSB7DQo+ICsgICAgICAgICAgICAgICBpbnRlbF9sb2dpY2FsX3Jp bmdfZW1pdChyaW5nYnVmLCByZWdfYmFzZSArIChpbmRleCAqIDQpKTsNCj4gKyAgICAgICAgICAg ICAgIGludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHRhYmxlLT50YWJsZVswXS5jb250 cm9sX3ZhbHVlKTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICBpbnRlbF9sb2dpY2FsX3Jp bmdfZW1pdChyaW5nYnVmLCBNSV9OT09QKTsgfQ0KPiArDQo+ICsvKioNCj4gKyAqIGVtaXRfbW9j c19sM2NjX3RhYmxlKCkgLSBlbWl0IHRoZSBtb2NzIGNvbnRyb2wgdGFibGUNCj4gKyAqIEByaW5n YnVmOiAgIERSTSBkZXZpY2UuDQo+ICsgKiBAdGFibGU6ICAgICBUaGUgdmFsdWVzIHRvIHByb2dy YW0gaW50byB0aGUgY29udHJvbCByZWdzLg0KPiArICoNCj4gKyAqIFRoaXMgZnVuY3Rpb24gc2lt cGx5IGVtaXRzIGEgTUlfTE9BRF9SRUdJU1RFUl9JTU0gY29tbWFuZCBmb3IgdGhlDQo+ICsgKiBn aXZlbiB0YWJsZSBzdGFydGluZyBhdCB0aGUgZ2l2ZW4gYWRkcmVzcy4gVGhpcyByZWdpc3RlciBz ZXQgaXMgIA0KPiArcHJvZ3JhbW1lZA0KPiArICogaW4gcGFpcnMuDQo+ICsgKg0KPiArICogUmV0 dXJuOiBOb3RoaW5nLg0KPiArICovDQo+ICt2b2lkIGVtaXRfbW9jc19sM2NjX3RhYmxlKHN0cnVj dCBpbnRlbF9yaW5nYnVmZmVyICpyaW5nYnVmLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxlKSB7DQo+ICsgICAgICAgdW5zaWduZWQg aW50IGNvdW50Ow0KPiArICAgICAgIHVuc2lnbmVkIGludCBpbmRleDsNCj4gKw0KPiArICAgICAg IGludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgDQo+ICsgTUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9OVU1fTU9DU19FTlRS SUVTLzIpKTsNCg0KSSB0aGluayB0aGUgc3R5bGUgaXMgdG8gYWx3YXlzIHB1dCBzcGFjZXMgYXJv dW5kIG9wZXJhdG9ycyAodGhlIC8yKS4NCk9jY3VycyB0d2ljZSBpbiB0aGUgdHdvIGZvci1sb29w cyBiZWxvdyBhcyB3ZWxsLg0KDQo+ICsNCj4gKyAgICAgICBmb3IgKGluZGV4ID0gMCwgY291bnQg PSAwOyBpbmRleCA8IHRhYmxlLT5zaXplLzI7IGluZGV4KyssIGNvdW50ICs9IDIpIHsNCj4gKyAg ICAgICAgICAgICAgIHUzMiB2YWx1ZSA9ICh0YWJsZS0+dGFibGVbY291bnRdLmwzY2NfdmFsdWUg JiAweGZmZmYpIHwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgKCh0YWJsZS0+dGFibGVbY291 bnQgKyAxXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSANCj4gKyA8PCAxNik7DQo+ICsNCj4gKyAgICAg ICAgICAgICAgIGludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIEdFTjlfTE5DRkNNT0NT MCArIChpbmRleCAqIDQpKTsNCj4gKyAgICAgICAgICAgICAgIGludGVsX2xvZ2ljYWxfcmluZ19l bWl0KHJpbmdidWYsIHZhbHVlKTsNCj4gKyAgICAgICB9DQo+ICsNCj4gKyAgICAgICAvKg0KPiAr ICAgICAgICAqIE5vdyBzZXQgdGhlIHJlc3Qgb2YgdGhlIHRhYmxlIHRvIHVuY2FjaGVkIC0gdXNl IGVudHJ5IDAgYXMgdGhpcw0KPiArICAgICAgICAqIHdpbGwgYmUgdW5jYWNoZWQuIExlYXZlIHRo ZSBsYXN0IHBhaXIgaW5pdGlhbGlzZWQgYXMgcmVzZXJ2ZWQgYnkNCj4gKyAgICAgICAgKiB0aGUg aGFyZHdhcmUuDQo+ICsgICAgICAgICovDQo+ICsgICAgICAgZm9yICg7IGluZGV4IDwgR0VOOV9O VU1fTU9DU19FTlRSSUVTLzI7IGluZGV4KyspIHsNCj4gKyAgICAgICAgICAgICAgIHUzMiB2YWx1 ZSA9ICh0YWJsZS0+dGFibGVbMF0ubDNjY192YWx1ZSAmIDB4ZmZmZikgfA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAoKHRhYmxlLT50YWJsZVswXS5sM2NjX3ZhbHVlICYgMHhmZmZmKSA8PCAx Nik7DQo+ICsNCj4gKyAgICAgICAgICAgICAgIGludGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdi dWYsIEdFTjlfTE5DRkNNT0NTMCArIChpbmRleCAqIDQpKTsNCj4gKyAgICAgICAgICAgICAgIGlu dGVsX2xvZ2ljYWxfcmluZ19lbWl0KHJpbmdidWYsIHZhbHVlKTsNCj4gKyAgICAgICB9DQpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=