From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH] drm: BIT(DRM_ROTATE_?) -> DRM_ROTATE_? Date: Tue, 26 Jul 2016 15:41:42 +0300 Message-ID: <20160726124142.GG4329@intel.com> References: <1469430025-13540-1-git-send-email-joonas.lahtinen@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1469430025-13540-1-git-send-email-joonas.lahtinen@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Joonas Lahtinen Cc: David Airlie , linux-arm-msm@vger.kernel.org, intel-gfx@lists.freedesktop.org, Direct Rendering Infrastructure - Development , Daniel Vetter , freedreno@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org T24gTW9uLCBKdWwgMjUsIDIwMTYgYXQgMTA6MDA6MjVBTSArMDMwMCwgSm9vbmFzIExhaHRpbmVu IHdyb3RlOgo+IE9ubHkgcHJvcGVydHkgY3JlYXRpb24gdXNlcyB0aGUgcm90YXRpb24gYXMgYW4g aW5kZXgsIHNvIGNvbnZlcnQgdGhlCj4gI2RlZmluZSB0byB0aGUgbW9yZSB1c2VkIEJJVChEUk1f Uk9UQVRFXz8pIGZvcm0gYW5kIHVzZSBfX2J1aWx0aW5fZmZzCj4gdG8gZmlndXJlIHRoZSBpbmRl eCB3aGVuIG5lZWRlZC4KPiAKPiBDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ IENjOiBsaW51eC1hcm0tbXNtQHZnZXIua2VybmVsLm9yZwo+IENjOiBmcmVlZHJlbm9AbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCj4gQ2M6IERhdmlkIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KPiBD YzogRGFuaWVsIFZldHRlciA8ZGFuaWVsLnZldHRlckBmZndsbC5jaD4KPiBDYzogVmlsbGUgU3ly asOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBK b29uYXMgTGFodGluZW4gPGpvb25hcy5sYWh0aW5lbkBsaW51eC5pbnRlbC5jb20+CgpQYXRjaCBs Z3RtCgpSZXZpZXdlZC1ieTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4Lmlu dGVsLmNvbT4KCldpbGwgY29uZmxpY3QgYmFkbHkgd2l0aCBteSBzdHVmZiwgaG93ZXZlci4KCj4g LS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5oICAgICAgICAgICAgICAgIHwg IDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2FybS9tYWxpZHBfcGxhbmVzLmMgICAgICAgICAgICAg fCAyMCArKysrKysrKystLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFf b3ZlcmxheS5jICAgICAgICAgfCAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMv YXRtZWxfaGxjZGNfcGxhbmUuYyB8IDIyICsrKysrKysrKy0tLS0tLS0tLS0KPiAgZHJpdmVycy9n cHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgICAgICAgICAgICAgfCAgNCArKy0tCj4gIGRyaXZl cnMvZ3B1L2RybS9kcm1fY3J0Yy5jICAgICAgICAgICAgICAgICAgICAgIHwgMjQgKysrKysrKysr Ky0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMgICAgICAgICAg ICAgICAgIHwgIDQgKystLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lX2hlbHBlci5jICAg ICAgICAgICAgICB8ICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fcmVjdC5jICAgICAgICAg ICAgICAgICAgICAgIHwgMjggKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyAgICAgICAgICAgICB8IDEyICsrKysrLS0tLS0tCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jICAgICAgIHwgIDIgKy0K PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jICAgICAgICAgICAgfCAyOCAr KysrKysrKysrKystLS0tLS0tLS0tLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Ry di5oICAgICAgICAgICAgICAgIHwgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf ZmJjLmMgICAgICAgICAgICAgICAgfCAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRl bF9mYmRldi5jICAgICAgICAgICAgICB8ICA2ICsrKy0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9zcHJpdGUuYyAgICAgICAgICAgICB8ICA2ICsrKy0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vbXNtL21kcC9tZHA1L21kcDVfcGxhbmUuYyAgICAgICB8IDEwICsrKystLS0tLQo+ICBkcml2 ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2Rydi5jICAgICAgICAgICAgICB8ICA2ICsrKy0tLQo+ ICBkcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX2ZiLmMgICAgICAgICAgICAgICB8IDE0ICsr KysrKy0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21hcF9wbGFuZS5jICAgICAg ICAgICAgfCAxMCArKysrLS0tLS0KPiAgaW5jbHVkZS9kcm0vZHJtX2NydGMuaCAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAxMiArKysrKy0tLS0tLQo+ICAyMSBmaWxlcyBjaGFuZ2VkLCAxMDkg aW5zZXJ0aW9ucygrKSwgMTA5IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vYXJtL21hbGlkcF9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Ry di5oCj4gaW5kZXggOTU1NThmZC4uMjcxZDJmYiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYXJtL21hbGlkcF9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Ry di5oCj4gQEAgLTQ5LDYgKzQ5LDYgQEAgdm9pZCBtYWxpZHBfZGVfcGxhbmVzX2Rlc3Ryb3koc3Ry dWN0IGRybV9kZXZpY2UgKmRybSk7Cj4gIGludCBtYWxpZHBfY3J0Y19pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkcm0pOwo+ICAKPiAgLyogb2Z0ZW4gdXNlZCBjb21iaW5hdGlvbiBvZiByb3RhdGlv bmFsIGJpdHMgKi8KPiAtI2RlZmluZSBNQUxJRFBfUk9UQVRFRF9NQVNLCShCSVQoRFJNX1JPVEFU RV85MCkgfCBCSVQoRFJNX1JPVEFURV8yNzApKQo+ICsjZGVmaW5lIE1BTElEUF9ST1RBVEVEX01B U0sJKERSTV9ST1RBVEVfOTAgfCBEUk1fUk9UQVRFXzI3MCkKPiAgCj4gICNlbmRpZiAgLyogX19N QUxJRFBfRFJWX0hfXyAqLwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlk cF9wbGFuZXMuYyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5jCj4gaW5kZXgg NzI1MDk4ZC4uODJjMTkzZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlk cF9wbGFuZXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5jCj4g QEAgLTEwOCw3ICsxMDgsNyBAQCBzdGF0aWMgaW50IG1hbGlkcF9kZV9wbGFuZV9jaGVjayhzdHJ1 Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gIAkvKiBwYWNr ZWQgUkdCODg4IC8gQkdSODg4IGNhbid0IGJlIHJvdGF0ZWQgb3IgZmxpcHBlZCAqLwo+IC0JaWYg KHN0YXRlLT5yb3RhdGlvbiAhPSBCSVQoRFJNX1JPVEFURV8wKSAmJgo+ICsJaWYgKHN0YXRlLT5y b3RhdGlvbiAhPSBEUk1fUk9UQVRFXzAgJiYKPiAgCSAgICAoc3RhdGUtPmZiLT5waXhlbF9mb3Jt YXQgPT0gRFJNX0ZPUk1BVF9SR0I4ODggfHwKPiAgCSAgICAgc3RhdGUtPmZiLT5waXhlbF9mb3Jt YXQgPT0gRFJNX0ZPUk1BVF9CR1I4ODgpKQo+ICAJCXJldHVybiAtRUlOVkFMOwo+IEBAIC0xODgs OSArMTg4LDkgQEAgc3RhdGljIHZvaWQgbWFsaWRwX2RlX3BsYW5lX3VwZGF0ZShzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAgCS8qIHNldHVwIHRoZSByb3RhdGlvbiBhbmQgYXhpcyBmbGlwIGJp dHMgKi8KPiAgCWlmIChwbGFuZS0+c3RhdGUtPnJvdGF0aW9uICYgRFJNX1JPVEFURV9NQVNLKQo+ ICAJCXZhbCA9IGlsb2cyKHBsYW5lLT5zdGF0ZS0+cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0sp IDw8IExBWUVSX1JPVF9PRkZTRVQ7Cj4gLQlpZiAocGxhbmUtPnN0YXRlLT5yb3RhdGlvbiAmIEJJ VChEUk1fUkVGTEVDVF9YKSkKPiArCWlmIChwbGFuZS0+c3RhdGUtPnJvdGF0aW9uICYgRFJNX1JF RkxFQ1RfWCkKPiAgCQl2YWwgfD0gTEFZRVJfVl9GTElQOwo+IC0JaWYgKHBsYW5lLT5zdGF0ZS0+ cm90YXRpb24gJiBCSVQoRFJNX1JFRkxFQ1RfWSkpCj4gKwlpZiAocGxhbmUtPnN0YXRlLT5yb3Rh dGlvbiAmIERSTV9SRUZMRUNUX1kpCj4gIAkJdmFsIHw9IExBWUVSX0hfRkxJUDsKPiAgCj4gIAkv KiBzZXQgdGhlICdlbmFibGUgbGF5ZXInIGJpdCAqLwo+IEBAIC0yNTUsMTIgKzI1NSwxMiBAQCBp bnQgbWFsaWRwX2RlX3BsYW5lc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gIAkJCWdv dG8gY2xlYW51cDsKPiAgCj4gIAkJaWYgKCFkcm0tPm1vZGVfY29uZmlnLnJvdGF0aW9uX3Byb3Bl cnR5KSB7Cj4gLQkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBCSVQoRFJNX1JPVEFURV8wKSB8Cj4g LQkJCQkJICAgICAgQklUKERSTV9ST1RBVEVfOTApIHwKPiAtCQkJCQkgICAgICBCSVQoRFJNX1JP VEFURV8xODApIHwKPiAtCQkJCQkgICAgICBCSVQoRFJNX1JPVEFURV8yNzApIHwKPiAtCQkJCQkg ICAgICBCSVQoRFJNX1JFRkxFQ1RfWCkgfAo+IC0JCQkJCSAgICAgIEJJVChEUk1fUkVGTEVDVF9Z KTsKPiArCQkJdW5zaWduZWQgbG9uZyBmbGFncyA9IERSTV9ST1RBVEVfMCB8Cj4gKwkJCQkJICAg ICAgRFJNX1JPVEFURV85MCB8Cj4gKwkJCQkJICAgICAgRFJNX1JPVEFURV8xODAgfAo+ICsJCQkJ CSAgICAgIERSTV9ST1RBVEVfMjcwIHwKPiArCQkJCQkgICAgICBEUk1fUkVGTEVDVF9YIHwKPiAr CQkJCQkgICAgICBEUk1fUkVGTEVDVF9ZOwo+ICAJCQlkcm0tPm1vZGVfY29uZmlnLnJvdGF0aW9u X3Byb3BlcnR5ID0KPiAgCQkJCWRybV9tb2RlX2NyZWF0ZV9yb3RhdGlvbl9wcm9wZXJ0eShkcm0s IGZsYWdzKTsKPiAgCQl9Cj4gQEAgLTI2OCw3ICsyNjgsNyBAQCBpbnQgbWFsaWRwX2RlX3BsYW5l c19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkcm0pCj4gIAkJaWYgKGRybS0+bW9kZV9jb25maWcu cm90YXRpb25fcHJvcGVydHkgJiYgKGlkICE9IERFX1NNQVJUKSkKPiAgCQkJZHJtX29iamVjdF9h dHRhY2hfcHJvcGVydHkoJnBsYW5lLT5iYXNlLmJhc2UsCj4gIAkJCQkJCSAgIGRybS0+bW9kZV9j b25maWcucm90YXRpb25fcHJvcGVydHksCj4gLQkJCQkJCSAgIEJJVChEUk1fUk9UQVRFXzApKTsK PiArCQkJCQkJICAgRFJNX1JPVEFURV8wKTsKPiAgCj4gIAkJZHJtX3BsYW5lX2hlbHBlcl9hZGQo JnBsYW5lLT5iYXNlLAo+ICAJCQkJICAgICAmbWFsaWRwX2RlX3BsYW5lX2hlbHBlcl9mdW5jcyk7 Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRhX292ZXJsYXkuYyBi L2RyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRhX292ZXJsYXkuYwo+IGluZGV4IDFlZTcwN2Uu LjE1MmI0ZTcgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfb3Zl cmxheS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfb3ZlcmxheS5jCj4g QEAgLTEyMSw3ICsxMjEsNyBAQCBhcm1hZGFfb3ZsX3BsYW5lX3VwZGF0ZShzdHJ1Y3QgZHJtX3Bs YW5lICpwbGFuZSwgc3RydWN0IGRybV9jcnRjICpjcnRjLAo+ICAJaW50IHJldDsKPiAgCj4gIAly ZXQgPSBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0ZShwbGFuZSwgY3J0YywgZmIsICZzcmMs ICZkZXN0LCAmY2xpcCwKPiAtCQkJCQkgICAgQklUKERSTV9ST1RBVEVfMCksCj4gKwkJCQkJICAg IERSTV9ST1RBVEVfMCwKPiAgCQkJCQkgICAgMCwgSU5UX01BWCwgdHJ1ZSwgZmFsc2UsICZ2aXNp YmxlKTsKPiAgCWlmIChyZXQpCj4gIAkJcmV0dXJuIHJldDsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2RjX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9k cm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNfcGxhbmUuYwo+IGluZGV4IDAxNmMxOTEuLjE0Njgw OWEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0bWVsLWhsY2RjL2F0bWVsX2hsY2Rj X3BsYW5lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYXRtZWwtaGxjZGMvYXRtZWxfaGxjZGNf cGxhbmUuYwo+IEBAIC0zOTMsNyArMzkzLDcgQEAgc3RhdGljIHZvaWQgYXRtZWxfaGxjZGNfcGxh bmVfdXBkYXRlX2Zvcm1hdChzdHJ1Y3QgYXRtZWxfaGxjZGNfcGxhbmUgKnBsYW5lLAo+ICAKPiAg CWlmICgoc3RhdGUtPmJhc2UuZmItPnBpeGVsX2Zvcm1hdCA9PSBEUk1fRk9STUFUX1lVVjQyMiB8 fAo+ICAJICAgICBzdGF0ZS0+YmFzZS5mYi0+cGl4ZWxfZm9ybWF0ID09IERSTV9GT1JNQVRfTlY2 MSkgJiYKPiAtCSAgICAoc3RhdGUtPmJhc2Uucm90YXRpb24gJiAoQklUKERSTV9ST1RBVEVfOTAp IHwgQklUKERSTV9ST1RBVEVfMjcwKSkpKQo+ICsJICAgIChzdGF0ZS0+YmFzZS5yb3RhdGlvbiAm IChEUk1fUk9UQVRFXzkwIHwgRFJNX1JPVEFURV8yNzApKSkKPiAgCQljZmcgfD0gQVRNRUxfSExD RENfWVVWNDIyUk9UOwo+ICAKPiAgCWF0bWVsX2hsY2RjX2xheWVyX3VwZGF0ZV9jZmcoJnBsYW5l LT5sYXllciwKPiBAQCAtNjI4LDcgKzYyOCw3IEBAIHN0YXRpYyBpbnQgYXRtZWxfaGxjZGNfcGxh bmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxhbmUgKnAsCj4gIAkvKgo+ICAJICogU3dhcCB3 aWR0aCBhbmQgc2l6ZSBpbiBjYXNlIG9mIDkwIG9yIDI3MCBkZWdyZWVzIHJvdGF0aW9uCj4gIAkg Ki8KPiAtCWlmIChzdGF0ZS0+YmFzZS5yb3RhdGlvbiAmIChCSVQoRFJNX1JPVEFURV85MCkgfCBC SVQoRFJNX1JPVEFURV8yNzApKSkgewo+ICsJaWYgKHN0YXRlLT5iYXNlLnJvdGF0aW9uICYgKERS TV9ST1RBVEVfOTAgfCBEUk1fUk9UQVRFXzI3MCkpIHsKPiAgCQl0bXAgPSBzdGF0ZS0+Y3J0Y193 Owo+ICAJCXN0YXRlLT5jcnRjX3cgPSBzdGF0ZS0+Y3J0Y19oOwo+ICAJCXN0YXRlLT5jcnRjX2gg PSB0bXA7Cj4gQEAgLTY3Nyw3ICs2NzcsNyBAQCBzdGF0aWMgaW50IGF0bWVsX2hsY2RjX3BsYW5l X2F0b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwLAo+ICAJCQlyZXR1cm4gLUVJTlZBTDsK PiAgCj4gIAkJc3dpdGNoIChzdGF0ZS0+YmFzZS5yb3RhdGlvbiAmIERSTV9ST1RBVEVfTUFTSykg ewo+IC0JCWNhc2UgQklUKERSTV9ST1RBVEVfOTApOgo+ICsJCWNhc2UgRFJNX1JPVEFURV85MDoK PiAgCQkJb2Zmc2V0ID0gKCh5X29mZnNldCArIHN0YXRlLT5zcmNfeSArIHBhdGNoZWRfc3JjX3cg LSAxKSAvCj4gIAkJCQkgIHlkaXYpICogZmItPnBpdGNoZXNbaV07Cj4gIAkJCW9mZnNldCArPSAo KHhfb2Zmc2V0ICsgc3RhdGUtPnNyY194KSAvIHhkaXYpICoKPiBAQCAtNjg2LDcgKzY4Niw3IEBA IHN0YXRpYyBpbnQgYXRtZWxfaGxjZGNfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1fcGxh bmUgKnAsCj4gIAkJCQkJICBmYi0+cGl0Y2hlc1tpXTsKPiAgCQkJc3RhdGUtPnBzdHJpZGVbaV0g PSAtZmItPnBpdGNoZXNbaV0gLSBzdGF0ZS0+YnBwW2ldOwo+ICAJCQlicmVhazsKPiAtCQljYXNl IEJJVChEUk1fUk9UQVRFXzE4MCk6Cj4gKwkJY2FzZSBEUk1fUk9UQVRFXzE4MDoKPiAgCQkJb2Zm c2V0ID0gKCh5X29mZnNldCArIHN0YXRlLT5zcmNfeSArIHBhdGNoZWRfc3JjX2ggLSAxKSAvCj4g IAkJCQkgIHlkaXYpICogZmItPnBpdGNoZXNbaV07Cj4gIAkJCW9mZnNldCArPSAoKHhfb2Zmc2V0 ICsgc3RhdGUtPnNyY194ICsgcGF0Y2hlZF9zcmNfdyAtIDEpIC8KPiBAQCAtNjk1LDcgKzY5NSw3 IEBAIHN0YXRpYyBpbnQgYXRtZWxfaGxjZGNfcGxhbmVfYXRvbWljX2NoZWNrKHN0cnVjdCBkcm1f cGxhbmUgKnAsCj4gIAkJCQkJICAgc3RhdGUtPmJwcFtpXSkgLSBmYi0+cGl0Y2hlc1tpXTsKPiAg CQkJc3RhdGUtPnBzdHJpZGVbaV0gPSAtMiAqIHN0YXRlLT5icHBbaV07Cj4gIAkJCWJyZWFrOwo+ IC0JCWNhc2UgQklUKERSTV9ST1RBVEVfMjcwKToKPiArCQljYXNlIERSTV9ST1RBVEVfMjcwOgo+ ICAJCQlvZmZzZXQgPSAoKHlfb2Zmc2V0ICsgc3RhdGUtPnNyY195KSAvIHlkaXYpICoKPiAgCQkJ CSBmYi0+cGl0Y2hlc1tpXTsKPiAgCQkJb2Zmc2V0ICs9ICgoeF9vZmZzZXQgKyBzdGF0ZS0+c3Jj X3ggKyBwYXRjaGVkX3NyY19oIC0gMSkgLwo+IEBAIC03MDUsNyArNzA1LDcgQEAgc3RhdGljIGlu dCBhdG1lbF9obGNkY19wbGFuZV9hdG9taWNfY2hlY2soc3RydWN0IGRybV9wbGFuZSAqcCwKPiAg CQkJCQkgICgyICogc3RhdGUtPmJwcFtpXSk7Cj4gIAkJCXN0YXRlLT5wc3RyaWRlW2ldID0gZmIt PnBpdGNoZXNbaV0gLSBzdGF0ZS0+YnBwW2ldOwo+ICAJCQlicmVhazsKPiAtCQljYXNlIEJJVChE Uk1fUk9UQVRFXzApOgo+ICsJCWNhc2UgRFJNX1JPVEFURV8wOgo+ICAJCWRlZmF1bHQ6Cj4gIAkJ CW9mZnNldCA9ICgoeV9vZmZzZXQgKyBzdGF0ZS0+c3JjX3kpIC8geWRpdikgKgo+ICAJCQkJIGZi LT5waXRjaGVzW2ldOwo+IEBAIC05MDUsNyArOTA1LDcgQEAgc3RhdGljIHZvaWQgYXRtZWxfaGxj ZGNfcGxhbmVfaW5pdF9wcm9wZXJ0aWVzKHN0cnVjdCBhdG1lbF9obGNkY19wbGFuZSAqcGxhbmUs Cj4gIAlpZiAoZGVzYy0+bGF5b3V0LnhzdHJpZGUgJiYgZGVzYy0+bGF5b3V0LnBzdHJpZGUpCj4g IAkJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJnBsYW5lLT5iYXNlLmJhc2UsCj4gIAkJCQlw bGFuZS0+YmFzZS5kZXYtPm1vZGVfY29uZmlnLnJvdGF0aW9uX3Byb3BlcnR5LAo+IC0JCQkJQklU KERSTV9ST1RBVEVfMCkpOwo+ICsJCQkJRFJNX1JPVEFURV8wKTsKPiAgCj4gIAlpZiAoZGVzYy0+ bGF5b3V0LmNzYykgewo+ICAJCS8qCj4gQEAgLTEwNTYsMTAgKzEwNTYsMTAgQEAgYXRtZWxfaGxj ZGNfcGxhbmVfY3JlYXRlX3Byb3BlcnRpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgCj4g IAlkZXYtPm1vZGVfY29uZmlnLnJvdGF0aW9uX3Byb3BlcnR5ID0KPiAgCQkJZHJtX21vZGVfY3Jl YXRlX3JvdGF0aW9uX3Byb3BlcnR5KGRldiwKPiAtCQkJCQkJCSAgQklUKERSTV9ST1RBVEVfMCkg fAo+IC0JCQkJCQkJICBCSVQoRFJNX1JPVEFURV85MCkgfAo+IC0JCQkJCQkJICBCSVQoRFJNX1JP VEFURV8xODApIHwKPiAtCQkJCQkJCSAgQklUKERSTV9ST1RBVEVfMjcwKSk7Cj4gKwkJCQkJCQkg IERSTV9ST1RBVEVfMCB8Cj4gKwkJCQkJCQkgIERSTV9ST1RBVEVfOTAgfAo+ICsJCQkJCQkJICBE Uk1fUk9UQVRFXzE4MCB8Cj4gKwkJCQkJCQkgIERSTV9ST1RBVEVfMjcwKTsKPiAgCWlmICghZGV2 LT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSkKPiAgCQlyZXR1cm4gRVJSX1BUUigtRU5P TUVNKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBl ci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBpbmRleCBkZTdmZGRj Li42MWFmZDg1IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBl ci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiBAQCAtMjM0 OCw3ICsyMzQ4LDcgQEAgaW50IF9fZHJtX2F0b21pY19oZWxwZXJfc2V0X2NvbmZpZyhzdHJ1Y3Qg ZHJtX21vZGVfc2V0ICpzZXQsCj4gIAlwcmltYXJ5X3N0YXRlLT5jcnRjX2ggPSB2ZGlzcGxheTsK PiAgCXByaW1hcnlfc3RhdGUtPnNyY194ID0gc2V0LT54IDw8IDE2Owo+ICAJcHJpbWFyeV9zdGF0 ZS0+c3JjX3kgPSBzZXQtPnkgPDwgMTY7Cj4gLQlpZiAocHJpbWFyeV9zdGF0ZS0+cm90YXRpb24g JiAoQklUKERSTV9ST1RBVEVfOTApIHwgQklUKERSTV9ST1RBVEVfMjcwKSkpIHsKPiArCWlmIChw cmltYXJ5X3N0YXRlLT5yb3RhdGlvbiAmIChEUk1fUk9UQVRFXzkwIHwgRFJNX1JPVEFURV8yNzAp KSB7Cj4gIAkJcHJpbWFyeV9zdGF0ZS0+c3JjX3cgPSB2ZGlzcGxheSA8PCAxNjsKPiAgCQlwcmlt YXJ5X3N0YXRlLT5zcmNfaCA9IGhkaXNwbGF5IDw8IDE2Owo+ICAJfSBlbHNlIHsKPiBAQCAtMzAz Miw3ICszMDMyLDcgQEAgdm9pZCBkcm1fYXRvbWljX2hlbHBlcl9wbGFuZV9yZXNldChzdHJ1Y3Qg ZHJtX3BsYW5lICpwbGFuZSkKPiAgCj4gIAlpZiAocGxhbmUtPnN0YXRlKSB7Cj4gIAkJcGxhbmUt PnN0YXRlLT5wbGFuZSA9IHBsYW5lOwo+IC0JCXBsYW5lLT5zdGF0ZS0+cm90YXRpb24gPSBCSVQo RFJNX1JPVEFURV8wKTsKPiArCQlwbGFuZS0+c3RhdGUtPnJvdGF0aW9uID0gRFJNX1JPVEFURV8w Owo+ICAJfQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2F0b21pY19oZWxwZXJfcGxhbmVfcmVz ZXQpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBiL2RyaXZlcnMv Z3B1L2RybS9kcm1fY3J0Yy5jCj4gaW5kZXggZjFkOWYwNS4uOTA5YTAyNSAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1f Y3J0Yy5jCj4gQEAgLTI4MDQsOCArMjgwNCw4IEBAIGludCBkcm1fY3J0Y19jaGVja192aWV3cG9y dChjb25zdCBzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCj4gIAlkcm1fY3J0Y19nZXRfaHZfdGltaW5n KG1vZGUsICZoZGlzcGxheSwgJnZkaXNwbGF5KTsKPiAgCj4gIAlpZiAoY3J0Yy0+c3RhdGUgJiYK PiAtCSAgICBjcnRjLT5wcmltYXJ5LT5zdGF0ZS0+cm90YXRpb24gJiAoQklUKERSTV9ST1RBVEVf OTApIHwKPiAtCQkJCQkgICAgICBCSVQoRFJNX1JPVEFURV8yNzApKSkKPiArCSAgICBjcnRjLT5w cmltYXJ5LT5zdGF0ZS0+cm90YXRpb24gJiAoRFJNX1JPVEFURV85MCB8Cj4gKwkJCQkJICAgICAg RFJNX1JPVEFURV8yNzApKQo+ICAJCXN3YXAoaGRpc3BsYXksIHZkaXNwbGF5KTsKPiAgCj4gIAly ZXR1cm4gY2hlY2tfc3JjX2Nvb3Jkcyh4IDw8IDE2LCB5IDw8IDE2LAo+IEBAIC01NjQ2LDkgKzU2 NDYsOSBAQCBpbnQgZHJtX21vZGVfZGVzdHJveV9kdW1iX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsCj4gICAqIEVnLiBpZiB0aGUgaGFyZHdhcmUgc3VwcG9ydHMgZXZlcnl0aGluZyBleGNl cHQgRFJNX1JFRkxFQ1RfWAo+ICAgKiBvbmUgY291bGQgY2FsbCB0aGlzIGZ1bmN0aW9uIGxpa2Ug dGhpczoKPiAgICoKPiAtICogZHJtX3JvdGF0aW9uX3NpbXBsaWZ5KHJvdGF0aW9uLCBCSVQoRFJN X1JPVEFURV8wKSB8Cj4gLSAqICAgICAgICAgICAgICAgICAgICAgICBCSVQoRFJNX1JPVEFURV85 MCkgfCBCSVQoRFJNX1JPVEFURV8xODApIHwKPiAtICogICAgICAgICAgICAgICAgICAgICAgIEJJ VChEUk1fUk9UQVRFXzI3MCkgfCBCSVQoRFJNX1JFRkxFQ1RfWSkpOwo+ICsgKiBkcm1fcm90YXRp b25fc2ltcGxpZnkocm90YXRpb24sIERSTV9ST1RBVEVfMCB8Cj4gKyAqICAgICAgICAgICAgICAg ICAgICAgICBEUk1fUk9UQVRFXzkwIHwgRFJNX1JPVEFURV8xODAgfAo+ICsgKiAgICAgICAgICAg ICAgICAgICAgICAgRFJNX1JPVEFURV8yNzAgfCBEUk1fUkVGTEVDVF9ZKTsKPiAgICoKPiAgICog dG8gZWxpbWluYXRlIHRoZSBEUk1fUk9UQVRFX1ggZmxhZy4gRGVwZW5kaW5nIG9uIHdoYXQga2lu ZCBvZgo+ICAgKiB0cmFuc2Zvcm1zIHRoZSBoYXJkd2FyZSBzdXBwb3J0cywgdGhpcyBmdW5jdGlv biBtYXkgbm90Cj4gQEAgLTU2NTksNyArNTY1OSw3IEBAIHVuc2lnbmVkIGludCBkcm1fcm90YXRp b25fc2ltcGxpZnkodW5zaWduZWQgaW50IHJvdGF0aW9uLAo+ICAJCQkJICAgdW5zaWduZWQgaW50 IHN1cHBvcnRlZF9yb3RhdGlvbnMpCj4gIHsKPiAgCWlmIChyb3RhdGlvbiAmIH5zdXBwb3J0ZWRf cm90YXRpb25zKSB7Cj4gLQkJcm90YXRpb24gXj0gQklUKERSTV9SRUZMRUNUX1gpIHwgQklUKERS TV9SRUZMRUNUX1kpOwo+ICsJCXJvdGF0aW9uIF49IERSTV9SRUZMRUNUX1ggfCBEUk1fUkVGTEVD VF9ZOwo+ICAJCXJvdGF0aW9uID0gKHJvdGF0aW9uICYgRFJNX1JFRkxFQ1RfTUFTSykgfAo+ICAJ CSAgICAgICAgICAgQklUKChmZnMocm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0spICsgMSkgJSA0 KTsKPiAgCX0KPiBAQCAtNTc4OCwxMiArNTc4OCwxMiBAQCBzdHJ1Y3QgZHJtX3Byb3BlcnR5ICpk cm1fbW9kZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwK PiAgCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBzdXBwb3J0ZWRfcm90YXRpb25zKQo+ICB7Cj4g IAlzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9wcm9wX2VudW1fbGlzdCBwcm9wc1tdID0gewo+IC0J CXsgRFJNX1JPVEFURV8wLCAgICJyb3RhdGUtMCIgfSwKPiAtCQl7IERSTV9ST1RBVEVfOTAsICAi cm90YXRlLTkwIiB9LAo+IC0JCXsgRFJNX1JPVEFURV8xODAsICJyb3RhdGUtMTgwIiB9LAo+IC0J CXsgRFJNX1JPVEFURV8yNzAsICJyb3RhdGUtMjcwIiB9LAo+IC0JCXsgRFJNX1JFRkxFQ1RfWCwg ICJyZWZsZWN0LXgiIH0sCj4gLQkJeyBEUk1fUkVGTEVDVF9ZLCAgInJlZmxlY3QteSIgfSwKPiAr CQl7IF9fYnVpbHRpbl9mZnMoRFJNX1JPVEFURV8wKSAtIDEsICAgInJvdGF0ZS0wIiB9LAo+ICsJ CXsgX19idWlsdGluX2ZmcyhEUk1fUk9UQVRFXzkwKSAtIDEsICAicm90YXRlLTkwIiB9LAo+ICsJ CXsgX19idWlsdGluX2ZmcyhEUk1fUk9UQVRFXzE4MCkgLSAxLCAicm90YXRlLTE4MCIgfSwKPiAr CQl7IF9fYnVpbHRpbl9mZnMoRFJNX1JPVEFURV8yNzApIC0gMSwgInJvdGF0ZS0yNzAiIH0sCj4g KwkJeyBfX2J1aWx0aW5fZmZzKERSTV9SRUZMRUNUX1gpIC0gMSwgICJyZWZsZWN0LXgiIH0sCj4g KwkJeyBfX2J1aWx0aW5fZmZzKERSTV9SRUZMRUNUX1kpIC0gMSwgICJyZWZsZWN0LXkiIH0sCj4g IAl9Owo+ICAKPiAgCXJldHVybiBkcm1fcHJvcGVydHlfY3JlYXRlX2JpdG1hc2soZGV2LCAwLCAi cm90YXRpb24iLAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZiX2hlbHBlci5j IGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwo+IGluZGV4IGNlNTRlOTguLmQ0ODk2 ZjkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKPiBAQCAtMzM1LDcgKzMzNSw3IEBAIHJl dHJ5Ogo+ICAJCQlnb3RvIGZhaWw7Cj4gIAkJfQo+ICAKPiAtCQlwbGFuZV9zdGF0ZS0+cm90YXRp b24gPSBCSVQoRFJNX1JPVEFURV8wKTsKPiArCQlwbGFuZV9zdGF0ZS0+cm90YXRpb24gPSBEUk1f Uk9UQVRFXzA7Cj4gIAo+ICAJCXBsYW5lLT5vbGRfZmIgPSBwbGFuZS0+ZmI7Cj4gIAkJcGxhbmVf bWFzayB8PSAxIDw8IGRybV9wbGFuZV9pbmRleChwbGFuZSk7Cj4gQEAgLTM5NSw3ICszOTUsNyBA QCBzdGF0aWMgaW50IHJlc3RvcmVfZmJkZXZfbW9kZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqZmJf aGVscGVyKQo+ICAJCWlmIChkZXYtPm1vZGVfY29uZmlnLnJvdGF0aW9uX3Byb3BlcnR5KSB7Cj4g IAkJCWRybV9tb2RlX3BsYW5lX3NldF9vYmpfcHJvcChwbGFuZSwKPiAgCQkJCQkJICAgIGRldi0+ bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHksCj4gLQkJCQkJCSAgICBCSVQoRFJNX1JPVEFU RV8wKSk7Cj4gKwkJCQkJCSAgICBEUk1fUk9UQVRFXzApOwo+ICAJCX0KPiAgCX0KPiAgCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcGxhbmVfaGVscGVyLmMgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX3BsYW5lX2hlbHBlci5jCj4gaW5kZXggMTZjNGE3Yi4uYzM2MGUzMCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3BsYW5lX2hlbHBlci5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2RybV9wbGFuZV9oZWxwZXIuYwo+IEBAIC0yNzQsNyArMjc0LDcgQEAgaW50IGRy bV9wcmltYXJ5X2hlbHBlcl91cGRhdGUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsIHN0cnVjdCBk cm1fY3J0YyAqY3J0YywKPiAgCj4gIAlyZXQgPSBkcm1fcGxhbmVfaGVscGVyX2NoZWNrX3VwZGF0 ZShwbGFuZSwgY3J0YywgZmIsCj4gIAkJCQkJICAgICZzcmMsICZkZXN0LCAmY2xpcCwKPiAtCQkJ CQkgICAgQklUKERSTV9ST1RBVEVfMCksCj4gKwkJCQkJICAgIERSTV9ST1RBVEVfMCwKPiAgCQkJ CQkgICAgRFJNX1BMQU5FX0hFTFBFUl9OT19TQ0FMSU5HLAo+ICAJCQkJCSAgICBEUk1fUExBTkVf SEVMUEVSX05PX1NDQUxJTkcsCj4gIAkJCQkJICAgIGZhbHNlLCBmYWxzZSwgJnZpc2libGUpOwo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3JlY3QuYyBiL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fcmVjdC5jCj4gaW5kZXggYThlMmM4Ni4uNDA2M2Y2ZSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX3JlY3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcmVjdC5j Cj4gQEAgLTMxNywzOCArMzE3LDM4IEBAIHZvaWQgZHJtX3JlY3Rfcm90YXRlKHN0cnVjdCBkcm1f cmVjdCAqciwKPiAgewo+ICAJc3RydWN0IGRybV9yZWN0IHRtcDsKPiAgCj4gLQlpZiAocm90YXRp b24gJiAoQklUKERSTV9SRUZMRUNUX1gpIHwgQklUKERSTV9SRUZMRUNUX1kpKSkgewo+ICsJaWYg KHJvdGF0aW9uICYgKERSTV9SRUZMRUNUX1ggfCBEUk1fUkVGTEVDVF9ZKSkgewo+ICAJCXRtcCA9 ICpyOwo+ICAKPiAtCQlpZiAocm90YXRpb24gJiBCSVQoRFJNX1JFRkxFQ1RfWCkpIHsKPiArCQlp ZiAocm90YXRpb24gJiBEUk1fUkVGTEVDVF9YKSB7Cj4gIAkJCXItPngxID0gd2lkdGggLSB0bXAu eDI7Cj4gIAkJCXItPngyID0gd2lkdGggLSB0bXAueDE7Cj4gIAkJfQo+ICAKPiAtCQlpZiAocm90 YXRpb24gJiBCSVQoRFJNX1JFRkxFQ1RfWSkpIHsKPiArCQlpZiAocm90YXRpb24gJiBEUk1fUkVG TEVDVF9ZKSB7Cj4gIAkJCXItPnkxID0gaGVpZ2h0IC0gdG1wLnkyOwo+ICAJCQlyLT55MiA9IGhl aWdodCAtIHRtcC55MTsKPiAgCQl9Cj4gIAl9Cj4gIAo+ICAJc3dpdGNoIChyb3RhdGlvbiAmIERS TV9ST1RBVEVfTUFTSykgewo+IC0JY2FzZSBCSVQoRFJNX1JPVEFURV8wKToKPiArCWNhc2UgRFJN X1JPVEFURV8wOgo+ICAJCWJyZWFrOwo+IC0JY2FzZSBCSVQoRFJNX1JPVEFURV85MCk6Cj4gKwlj YXNlIERSTV9ST1RBVEVfOTA6Cj4gIAkJdG1wID0gKnI7Cj4gIAkJci0+eDEgPSB0bXAueTE7Cj4g IAkJci0+eDIgPSB0bXAueTI7Cj4gIAkJci0+eTEgPSB3aWR0aCAtIHRtcC54MjsKPiAgCQlyLT55 MiA9IHdpZHRoIC0gdG1wLngxOwo+ICAJCWJyZWFrOwo+IC0JY2FzZSBCSVQoRFJNX1JPVEFURV8x ODApOgo+ICsJY2FzZSBEUk1fUk9UQVRFXzE4MDoKPiAgCQl0bXAgPSAqcjsKPiAgCQlyLT54MSA9 IHdpZHRoIC0gdG1wLngyOwo+ICAJCXItPngyID0gd2lkdGggLSB0bXAueDE7Cj4gIAkJci0+eTEg PSBoZWlnaHQgLSB0bXAueTI7Cj4gIAkJci0+eTIgPSBoZWlnaHQgLSB0bXAueTE7Cj4gIAkJYnJl YWs7Cj4gLQljYXNlIEJJVChEUk1fUk9UQVRFXzI3MCk6Cj4gKwljYXNlIERSTV9ST1RBVEVfMjcw Ogo+ICAJCXRtcCA9ICpyOwo+ICAJCXItPngxID0gaGVpZ2h0IC0gdG1wLnkyOwo+ICAJCXItPngy ID0gaGVpZ2h0IC0gdG1wLnkxOwo+IEBAIC0zOTIsMjMgKzM5MiwyMyBAQCB2b2lkIGRybV9yZWN0 X3JvdGF0ZV9pbnYoc3RydWN0IGRybV9yZWN0ICpyLAo+ICAJc3RydWN0IGRybV9yZWN0IHRtcDsK PiAgCj4gIAlzd2l0Y2ggKHJvdGF0aW9uICYgRFJNX1JPVEFURV9NQVNLKSB7Cj4gLQljYXNlIEJJ VChEUk1fUk9UQVRFXzApOgo+ICsJY2FzZSBEUk1fUk9UQVRFXzA6Cj4gIAkJYnJlYWs7Cj4gLQlj YXNlIEJJVChEUk1fUk9UQVRFXzkwKToKPiArCWNhc2UgRFJNX1JPVEFURV85MDoKPiAgCQl0bXAg PSAqcjsKPiAgCQlyLT54MSA9IHdpZHRoIC0gdG1wLnkyOwo+ICAJCXItPngyID0gd2lkdGggLSB0 bXAueTE7Cj4gIAkJci0+eTEgPSB0bXAueDE7Cj4gIAkJci0+eTIgPSB0bXAueDI7Cj4gIAkJYnJl YWs7Cj4gLQljYXNlIEJJVChEUk1fUk9UQVRFXzE4MCk6Cj4gKwljYXNlIERSTV9ST1RBVEVfMTgw Ogo+ICAJCXRtcCA9ICpyOwo+ICAJCXItPngxID0gd2lkdGggLSB0bXAueDI7Cj4gIAkJci0+eDIg PSB3aWR0aCAtIHRtcC54MTsKPiAgCQlyLT55MSA9IGhlaWdodCAtIHRtcC55MjsKPiAgCQlyLT55 MiA9IGhlaWdodCAtIHRtcC55MTsKPiAgCQlicmVhazsKPiAtCWNhc2UgQklUKERSTV9ST1RBVEVf MjcwKToKPiArCWNhc2UgRFJNX1JPVEFURV8yNzA6Cj4gIAkJdG1wID0gKnI7Cj4gIAkJci0+eDEg PSB0bXAueTE7Cj4gIAkJci0+eDIgPSB0bXAueTI7Cj4gQEAgLTQxOSwxNSArNDE5LDE1IEBAIHZv aWQgZHJtX3JlY3Rfcm90YXRlX2ludihzdHJ1Y3QgZHJtX3JlY3QgKnIsCj4gIAkJYnJlYWs7Cj4g IAl9Cj4gIAo+IC0JaWYgKHJvdGF0aW9uICYgKEJJVChEUk1fUkVGTEVDVF9YKSB8IEJJVChEUk1f UkVGTEVDVF9ZKSkpIHsKPiArCWlmIChyb3RhdGlvbiAmIChEUk1fUkVGTEVDVF9YIHwgRFJNX1JF RkxFQ1RfWSkpIHsKPiAgCQl0bXAgPSAqcjsKPiAgCj4gLQkJaWYgKHJvdGF0aW9uICYgQklUKERS TV9SRUZMRUNUX1gpKSB7Cj4gKwkJaWYgKHJvdGF0aW9uICYgRFJNX1JFRkxFQ1RfWCkgewo+ICAJ CQlyLT54MSA9IHdpZHRoIC0gdG1wLngyOwo+ICAJCQlyLT54MiA9IHdpZHRoIC0gdG1wLngxOwo+ ICAJCX0KPiAgCj4gLQkJaWYgKHJvdGF0aW9uICYgQklUKERSTV9SRUZMRUNUX1kpKSB7Cj4gKwkJ aWYgKHJvdGF0aW9uICYgRFJNX1JFRkxFQ1RfWSkgewo+ICAJCQlyLT55MSA9IGhlaWdodCAtIHRt cC55MjsKPiAgCQkJci0+eTIgPSBoZWlnaHQgLSB0bXAueTE7Cj4gIAkJfQo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZGVidWdmcy5jCj4gaW5kZXggOWFhNjJjNS4uODE1MjMyYyAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gQEAgLTMwODEsMTIgKzMwODEsMTIgQEAgc3RhdGlj IGNvbnN0IGNoYXIgKnBsYW5lX3JvdGF0aW9uKHVuc2lnbmVkIGludCByb3RhdGlvbikKPiAgCSAq Lwo+ICAJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKPiAgCQkgIiVzJXMlcyVzJXMlcygweCUw OHgpIiwKPiAtCQkgKHJvdGF0aW9uICYgQklUKERSTV9ST1RBVEVfMCkpID8gIjAgIiA6ICIiLAo+ IC0JCSAocm90YXRpb24gJiBCSVQoRFJNX1JPVEFURV85MCkpID8gIjkwICIgOiAiIiwKPiAtCQkg KHJvdGF0aW9uICYgQklUKERSTV9ST1RBVEVfMTgwKSkgPyAiMTgwICIgOiAiIiwKPiAtCQkgKHJv dGF0aW9uICYgQklUKERSTV9ST1RBVEVfMjcwKSkgPyAiMjcwICIgOiAiIiwKPiAtCQkgKHJvdGF0 aW9uICYgQklUKERSTV9SRUZMRUNUX1gpKSA/ICJGTElQWCAiIDogIiIsCj4gLQkJIChyb3RhdGlv biAmIEJJVChEUk1fUkVGTEVDVF9ZKSkgPyAiRkxJUFkgIiA6ICIiLAo+ICsJCSAocm90YXRpb24g JiBEUk1fUk9UQVRFXzApID8gIjAgIiA6ICIiLAo+ICsJCSAocm90YXRpb24gJiBEUk1fUk9UQVRF XzkwKSA/ICI5MCAiIDogIiIsCj4gKwkJIChyb3RhdGlvbiAmIERSTV9ST1RBVEVfMTgwKSA/ICIx ODAgIiA6ICIiLAo+ICsJCSAocm90YXRpb24gJiBEUk1fUk9UQVRFXzI3MCkgPyAiMjcwICIgOiAi IiwKPiArCQkgKHJvdGF0aW9uICYgRFJNX1JFRkxFQ1RfWCkgPyAiRkxJUFggIiA6ICIiLAo+ICsJ CSAocm90YXRpb24gJiBEUk1fUkVGTEVDVF9ZKSA/ICJGTElQWSAiIDogIiIsCj4gIAkJIHJvdGF0 aW9uKTsKPiAgCj4gIAlyZXR1cm4gYnVmOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2F0 b21pY19wbGFuZS5jCj4gaW5kZXggN2RlNzcyMS4uN2NjOWM3NiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9hdG9taWNfcGxhbmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2F0b21pY19wbGFuZS5jCj4gQEAgLTU1LDcgKzU1LDcgQEAgaW50ZWxf Y3JlYXRlX3BsYW5lX3N0YXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lKQo+ICAJCXJldHVybiBO VUxMOwo+ICAKPiAgCXN0YXRlLT5iYXNlLnBsYW5lID0gcGxhbmU7Cj4gLQlzdGF0ZS0+YmFzZS5y b3RhdGlvbiA9IEJJVChEUk1fUk9UQVRFXzApOwo+ICsJc3RhdGUtPmJhc2Uucm90YXRpb24gPSBE Uk1fUk9UQVRFXzA7Cj4gIAlzdGF0ZS0+Y2tleS5mbGFncyA9IEk5MTVfU0VUX0NPTE9SS0VZX05P TkU7Cj4gIAo+ICAJcmV0dXJuIHN0YXRlOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5 LmMKPiBpbmRleCA3OGJlYjdlLi43NzM5NTRkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2Rpc3BsYXkuYwo+IEBAIC0yNjg4LDcgKzI2ODgsNyBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0 ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1fcGxhbmUgKnByaW1hcnksCj4gIAkJaW50ZWxfY3J0 Yy0+ZHNwYWRkcl9vZmZzZXQgPSBsaW5lYXJfb2Zmc2V0Owo+ICAJfQo+ICAKPiAtCWlmIChyb3Rh dGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4gKwlpZiAocm90YXRpb24gPT0gRFJNX1JP VEFURV8xODApIHsKPiAgCQlkc3BjbnRyIHw9IERJU1BQTEFORV9ST1RBVEVfMTgwOwo+ICAKPiAg CQl4ICs9IChjcnRjX3N0YXRlLT5waXBlX3NyY193IC0gMSk7Cj4gQEAgLTI3OTEsNyArMjc5MSw3 IEBAIHN0YXRpYyB2b2lkIGlyb25sYWtlX3VwZGF0ZV9wcmltYXJ5X3BsYW5lKHN0cnVjdCBkcm1f cGxhbmUgKnByaW1hcnksCj4gIAkJaW50ZWxfY29tcHV0ZV90aWxlX29mZnNldCgmeCwgJnksIGZi LCAwLAo+ICAJCQkJCSAgZmItPnBpdGNoZXNbMF0sIHJvdGF0aW9uKTsKPiAgCWxpbmVhcl9vZmZz ZXQgLT0gaW50ZWxfY3J0Yy0+ZHNwYWRkcl9vZmZzZXQ7Cj4gLQlpZiAocm90YXRpb24gPT0gQklU KERSTV9ST1RBVEVfMTgwKSkgewo+ICsJaWYgKHJvdGF0aW9uID09IERSTV9ST1RBVEVfMTgwKSB7 Cj4gIAkJZHNwY250ciB8PSBESVNQUExBTkVfUk9UQVRFXzE4MDsKPiAgCj4gIAkJaWYgKCFJU19I QVNXRUxMKGRldikgJiYgIUlTX0JST0FEV0VMTChkZXYpKSB7Cj4gQEAgLTI5NTIsMTcgKzI5NTIs MTcgQEAgdTMyIHNrbF9wbGFuZV9jdGxfdGlsaW5nKHVpbnQ2NF90IGZiX21vZGlmaWVyKQo+ICB1 MzIgc2tsX3BsYW5lX2N0bF9yb3RhdGlvbih1bnNpZ25lZCBpbnQgcm90YXRpb24pCj4gIHsKPiAg CXN3aXRjaCAocm90YXRpb24pIHsKPiAtCWNhc2UgQklUKERSTV9ST1RBVEVfMCk6Cj4gKwljYXNl IERSTV9ST1RBVEVfMDoKPiAgCQlicmVhazsKPiAgCS8qCj4gIAkgKiBEUk1fUk9UQVRFXyBpcyBj b3VudGVyIGNsb2Nrd2lzZSB0byBzdGF5IGNvbXBhdGlibGUgd2l0aCBYcmFuZHIKPiAgCSAqIHdo aWxlIGk5MTUgSFcgcm90YXRpb24gaXMgY2xvY2t3aXNlLCB0aGF0cyB3aHkgdGhpcyBzd2FwcGlu Zy4KPiAgCSAqLwo+IC0JY2FzZSBCSVQoRFJNX1JPVEFURV85MCk6Cj4gKwljYXNlIERSTV9ST1RB VEVfOTA6Cj4gIAkJcmV0dXJuIFBMQU5FX0NUTF9ST1RBVEVfMjcwOwo+IC0JY2FzZSBCSVQoRFJN X1JPVEFURV8xODApOgo+ICsJY2FzZSBEUk1fUk9UQVRFXzE4MDoKPiAgCQlyZXR1cm4gUExBTkVf Q1RMX1JPVEFURV8xODA7Cj4gLQljYXNlIEJJVChEUk1fUk9UQVRFXzI3MCk6Cj4gKwljYXNlIERS TV9ST1RBVEVfMjcwOgo+ICAJCXJldHVybiBQTEFORV9DVExfUk9UQVRFXzkwOwo+ICAJZGVmYXVs dDoKPiAgCQlNSVNTSU5HX0NBU0Uocm90YXRpb24pOwo+IEBAIC00MjQ4LDcgKzQyNDgsNyBAQCBp bnQgc2tsX3VwZGF0ZV9zY2FsZXJfY3J0YyhzdHJ1Y3QgaW50ZWxfY3J0Y19zdGF0ZSAqc3RhdGUp Cj4gIAkJICAgICAgaW50ZWxfY3J0Yy0+cGlwZSwgU0tMX0NSVENfSU5ERVgpOwo+ICAKPiAgCXJl dHVybiBza2xfdXBkYXRlX3NjYWxlcihzdGF0ZSwgIXN0YXRlLT5iYXNlLmFjdGl2ZSwgU0tMX0NS VENfSU5ERVgsCj4gLQkJJnN0YXRlLT5zY2FsZXJfc3RhdGUuc2NhbGVyX2lkLCBCSVQoRFJNX1JP VEFURV8wKSwKPiArCQkmc3RhdGUtPnNjYWxlcl9zdGF0ZS5zY2FsZXJfaWQsIERSTV9ST1RBVEVf MCwKPiAgCQlzdGF0ZS0+cGlwZV9zcmNfdywgc3RhdGUtPnBpcGVfc3JjX2gsCj4gIAkJYWRqdXN0 ZWRfbW9kZS0+Y3J0Y19oZGlzcGxheSwgYWRqdXN0ZWRfbW9kZS0+Y3J0Y192ZGlzcGxheSk7Cj4g IH0KPiBAQCAtMTAyNjMsNyArMTAyNjMsNyBAQCBzdGF0aWMgdm9pZCBpOXh4X3VwZGF0ZV9jdXJz b3Ioc3RydWN0IGRybV9jcnRjICpjcnRjLCB1MzIgYmFzZSwKPiAgCQlpZiAoSEFTX0RESShkZXYp KQo+ICAJCQljbnRsIHw9IENVUlNPUl9QSVBFX0NTQ19FTkFCTEU7Cj4gIAo+IC0JCWlmIChwbGFu ZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKQo+ICsJCWlmIChw bGFuZV9zdGF0ZS0+YmFzZS5yb3RhdGlvbiA9PSBEUk1fUk9UQVRFXzE4MCkKPiAgCQkJY250bCB8 PSBDVVJTT1JfUk9UQVRFXzE4MDsKPiAgCX0KPiAgCj4gQEAgLTEwMzA5LDcgKzEwMzA5LDcgQEAg c3RhdGljIHZvaWQgaW50ZWxfY3J0Y191cGRhdGVfY3Vyc29yKHN0cnVjdCBkcm1fY3J0YyAqY3J0 YywKPiAgCj4gIAkJLyogSUxLKyBkbyB0aGlzIGF1dG9tYWdpY2FsbHkgKi8KPiAgCQlpZiAoSEFT X0dNQ0hfRElTUExBWShkZXYpICYmCj4gLQkJICAgIHBsYW5lX3N0YXRlLT5iYXNlLnJvdGF0aW9u ID09IEJJVChEUk1fUk9UQVRFXzE4MCkpIHsKPiArCQkgICAgcGxhbmVfc3RhdGUtPmJhc2Uucm90 YXRpb24gPT0gRFJNX1JPVEFURV8xODApIHsKPiAgCQkJYmFzZSArPSAocGxhbmVfc3RhdGUtPmJh c2UuY3J0Y19oICoKPiAgCQkJCSBwbGFuZV9zdGF0ZS0+YmFzZS5jcnRjX3cgLSAxKSAqIDQ7Cj4g IAkJfQo+IEBAIC0xNDMwNCwxMSArMTQzMDQsMTEgQEAgZmFpbDoKPiAgdm9pZCBpbnRlbF9jcmVh dGVfcm90YXRpb25fcHJvcGVydHkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGludGVs X3BsYW5lICpwbGFuZSkKPiAgewo+ICAJaWYgKCFkZXYtPm1vZGVfY29uZmlnLnJvdGF0aW9uX3By b3BlcnR5KSB7Cj4gLQkJdW5zaWduZWQgbG9uZyBmbGFncyA9IEJJVChEUk1fUk9UQVRFXzApIHwK PiAtCQkJQklUKERSTV9ST1RBVEVfMTgwKTsKPiArCQl1bnNpZ25lZCBsb25nIGZsYWdzID0gRFJN X1JPVEFURV8wIHwKPiArCQkJRFJNX1JPVEFURV8xODA7Cj4gIAo+ICAJCWlmIChJTlRFTF9JTkZP KGRldiktPmdlbiA+PSA5KQo+IC0JCQlmbGFncyB8PSBCSVQoRFJNX1JPVEFURV85MCkgfCBCSVQo RFJNX1JPVEFURV8yNzApOwo+ICsJCQlmbGFncyB8PSBEUk1fUk9UQVRFXzkwIHwgRFJNX1JPVEFU RV8yNzA7Cj4gIAo+ICAJCWRldi0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHkgPQo+ICAJ CQlkcm1fbW9kZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoZGV2LCBmbGFncyk7Cj4gQEAgLTE0 NDUxLDggKzE0NDUxLDggQEAgc3RhdGljIHN0cnVjdCBkcm1fcGxhbmUgKmludGVsX2N1cnNvcl9w bGFuZV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgCQlpZiAoIWRldi0+bW9kZV9j b25maWcucm90YXRpb25fcHJvcGVydHkpCj4gIAkJCWRldi0+bW9kZV9jb25maWcucm90YXRpb25f cHJvcGVydHkgPQo+ICAJCQkJZHJtX21vZGVfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KGRldiwK PiAtCQkJCQkJCUJJVChEUk1fUk9UQVRFXzApIHwKPiAtCQkJCQkJCUJJVChEUk1fUk9UQVRFXzE4 MCkpOwo+ICsJCQkJCQkJRFJNX1JPVEFURV8wIHwKPiArCQkJCQkJCURSTV9ST1RBVEVfMTgwKTsK PiAgCQlpZiAoZGV2LT5tb2RlX2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSkKPiAgCQkJZHJtX29i amVjdF9hdHRhY2hfcHJvcGVydHkoJmN1cnNvci0+YmFzZS5iYXNlLAo+ICAJCQkJZGV2LT5tb2Rl X2NvbmZpZy5yb3RhdGlvbl9wcm9wZXJ0eSwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IGlu ZGV4IGU3NGQ4NTEuLmY4MmRjYzUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAo+IEBA IC0xMjU4LDcgKzEyNTgsNyBAQCB1bnNpZ25lZCBpbnQgaW50ZWxfdGlsZV9oZWlnaHQoY29uc3Qg c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICBzdGF0aWMgaW5saW5lIGJvb2wK PiAgaW50ZWxfcm90YXRpb25fOTBfb3JfMjcwKHVuc2lnbmVkIGludCByb3RhdGlvbikKPiAgewo+ IC0JcmV0dXJuIHJvdGF0aW9uICYgKEJJVChEUk1fUk9UQVRFXzkwKSB8IEJJVChEUk1fUk9UQVRF XzI3MCkpOwo+ICsJcmV0dXJuIHJvdGF0aW9uICYgKERSTV9ST1RBVEVfOTAgfCBEUk1fUk9UQVRF XzI3MCk7Cj4gIH0KPiAgCj4gIHZvaWQgaW50ZWxfY3JlYXRlX3JvdGF0aW9uX3Byb3BlcnR5KHN0 cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2ZiYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMKPiBpbmRleCA3 ODFlMmY1Li5lZmYyNmQ3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2ZiYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJjLmMKPiBAQCAtNzc1 LDcgKzc3NSw3IEBAIHN0YXRpYyBib29sIGludGVsX2ZiY19jYW5fYWN0aXZhdGUoc3RydWN0IGlu dGVsX2NydGMgKmNydGMpCj4gIAkJcmV0dXJuIGZhbHNlOwo+ICAJfQo+ICAJaWYgKElOVEVMX0lO Rk8oZGV2X3ByaXYpLT5nZW4gPD0gNCAmJiAhSVNfRzRYKGRldl9wcml2KSAmJgo+IC0JICAgIGNh Y2hlLT5wbGFuZS5yb3RhdGlvbiAhPSBCSVQoRFJNX1JPVEFURV8wKSkgewo+ICsJICAgIGNhY2hl LT5wbGFuZS5yb3RhdGlvbiAhPSBEUk1fUk9UQVRFXzApIHsKPiAgCQlmYmMtPm5vX2ZiY19yZWFz b24gPSAicm90YXRpb24gdW5zdXBwb3J0ZWQiOwo+ICAJCXJldHVybiBmYWxzZTsKPiAgCX0KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmJkZXYuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKPiBpbmRleCA2MzQ0OTk5Li40ZmVlOTNkIDEwMDY0 NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiZGV2LmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYmRldi5jCj4gQEAgLTIyMyw3ICsyMjMsNyBAQCBzdGF0 aWMgaW50IGludGVsZmJfY3JlYXRlKHN0cnVjdCBkcm1fZmJfaGVscGVyICpoZWxwZXIsCj4gIAkg KiBUaGlzIGFsc28gdmFsaWRhdGVzIHRoYXQgYW55IGV4aXN0aW5nIGZiIGluaGVyaXRlZCBmcm9t IHRoZQo+ICAJICogQklPUyBpcyBzdWl0YWJsZSBmb3Igb3duIGFjY2Vzcy4KPiAgCSAqLwo+IC0J cmV0ID0gaW50ZWxfcGluX2FuZF9mZW5jZV9mYl9vYmooJmlmYmRldi0+ZmItPmJhc2UsIEJJVChE Uk1fUk9UQVRFXzApKTsKPiArCXJldCA9IGludGVsX3Bpbl9hbmRfZmVuY2VfZmJfb2JqKCZpZmJk ZXYtPmZiLT5iYXNlLCBEUk1fUk9UQVRFXzApOwo+ICAJaWYgKHJldCkKPiAgCQlnb3RvIG91dF91 bmxvY2s7Cj4gIAo+IEBAIC0yODksNyArMjg5LDcgQEAgc3RhdGljIGludCBpbnRlbGZiX2NyZWF0 ZShzdHJ1Y3QgZHJtX2ZiX2hlbHBlciAqaGVscGVyLAo+ICBvdXRfZGVzdHJveV9mYmk6Cj4gIAlk cm1fZmJfaGVscGVyX3JlbGVhc2VfZmJpKGhlbHBlcik7Cj4gIG91dF91bnBpbjoKPiAtCWludGVs X3VucGluX2ZiX29iaigmaWZiZGV2LT5mYi0+YmFzZSwgQklUKERSTV9ST1RBVEVfMCkpOwo+ICsJ aW50ZWxfdW5waW5fZmJfb2JqKCZpZmJkZXYtPmZiLT5iYXNlLCBEUk1fUk9UQVRFXzApOwo+ICBv dXRfdW5sb2NrOgo+ICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gIAlyZXR1 cm4gcmV0Owo+IEBAIC01NTQsNyArNTU0LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfZmJkZXZfZGVz dHJveShzdHJ1Y3QgaW50ZWxfZmJkZXYgKmlmYmRldikKPiAgCj4gIAlpZiAoaWZiZGV2LT5mYikg ewo+ICAJCW11dGV4X2xvY2soJmlmYmRldi0+aGVscGVyLmRldi0+c3RydWN0X211dGV4KTsKPiAt CQlpbnRlbF91bnBpbl9mYl9vYmooJmlmYmRldi0+ZmItPmJhc2UsIEJJVChEUk1fUk9UQVRFXzAp KTsKPiArCQlpbnRlbF91bnBpbl9mYl9vYmooJmlmYmRldi0+ZmItPmJhc2UsIERSTV9ST1RBVEVf MCk7Cj4gIAkJbXV0ZXhfdW5sb2NrKCZpZmJkZXYtPmhlbHBlci5kZXYtPnN0cnVjdF9tdXRleCk7 Cj4gIAo+ICAJCWRybV9mcmFtZWJ1ZmZlcl9yZW1vdmUoJmlmYmRldi0+ZmItPmJhc2UpOwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2ludGVsX3Nwcml0ZS5jCj4gaW5kZXggMGRlOTM1YS4uMjJhZTIyOTggMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zcHJpdGUuYwo+IEBAIC00NDQsNyArNDQ0LDcgQEAg dmx2X3VwZGF0ZV9wbGFuZShzdHJ1Y3QgZHJtX3BsYW5lICpkcGxhbmUsCj4gIAkJCQkJCSAgIGZi LT5waXRjaGVzWzBdLCByb3RhdGlvbik7Cj4gIAlsaW5lYXJfb2Zmc2V0IC09IHNwcnN1cmZfb2Zm c2V0Owo+ICAKPiAtCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4gKwlp ZiAocm90YXRpb24gPT0gRFJNX1JPVEFURV8xODApIHsKPiAgCQlzcHJjdGwgfD0gU1BfUk9UQVRF XzE4MDsKPiAgCj4gIAkJeCArPSBzcmNfdzsKPiBAQCAtNTc3LDcgKzU3Nyw3IEBAIGl2Yl91cGRh dGVfcGxhbmUoc3RydWN0IGRybV9wbGFuZSAqcGxhbmUsCj4gIAkJCQkJCSAgIGZiLT5waXRjaGVz WzBdLCByb3RhdGlvbik7Cj4gIAlsaW5lYXJfb2Zmc2V0IC09IHNwcnN1cmZfb2Zmc2V0Owo+ICAK PiAtCWlmIChyb3RhdGlvbiA9PSBCSVQoRFJNX1JPVEFURV8xODApKSB7Cj4gKwlpZiAocm90YXRp b24gPT0gRFJNX1JPVEFURV8xODApIHsKPiAgCQlzcHJjdGwgfD0gU1BSSVRFX1JPVEFURV8xODA7 Cj4gIAo+ICAJCS8qIEhTVyBhbmQgQkRXIGRvZXMgdGhpcyBhdXRvbWFnaWNhbGx5IGluIGhhcmR3 YXJlICovCj4gQEAgLTcxNCw3ICs3MTQsNyBAQCBpbGtfdXBkYXRlX3BsYW5lKHN0cnVjdCBkcm1f cGxhbmUgKnBsYW5lLAo+ICAJCQkJCQkgICBmYi0+cGl0Y2hlc1swXSwgcm90YXRpb24pOwo+ICAJ bGluZWFyX29mZnNldCAtPSBkdnNzdXJmX29mZnNldDsKPiAgCj4gLQlpZiAocm90YXRpb24gPT0g QklUKERSTV9ST1RBVEVfMTgwKSkgewo+ICsJaWYgKHJvdGF0aW9uID09IERSTV9ST1RBVEVfMTgw KSB7Cj4gIAkJZHZzY250ciB8PSBEVlNfUk9UQVRFXzE4MDsKPiAgCj4gIAkJeCArPSBzcmNfdzsK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9tZHA1X3BsYW5lLmMg Yi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfcGxhbmUuYwo+IGluZGV4IDQzMmMw OTguLmEwMmEyNGUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL21zbS9tZHAvbWRwNS9t ZHA1X3BsYW5lLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vbXNtL21kcC9tZHA1L21kcDVfcGxh bmUuYwo+IEBAIC03OCw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIG1kcDVfcGxhbmVfaW5zdGFsbF9y b3RhdGlvbl9wcm9wZXJ0eShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAJaWYgKCFkZXYtPm1v ZGVfY29uZmlnLnJvdGF0aW9uX3Byb3BlcnR5KQo+ICAJCWRldi0+bW9kZV9jb25maWcucm90YXRp b25fcHJvcGVydHkgPQo+ICAJCQlkcm1fbW9kZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoZGV2 LAo+IC0JCQlCSVQoRFJNX1JFRkxFQ1RfWCkgfCBCSVQoRFJNX1JFRkxFQ1RfWSkpOwo+ICsJCQlE Uk1fUkVGTEVDVF9YIHwgRFJNX1JFRkxFQ1RfWSk7Cj4gIAo+ICAJaWYgKGRldi0+bW9kZV9jb25m aWcucm90YXRpb25fcHJvcGVydHkpCj4gIAkJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJnBs YW5lLT5iYXNlLAo+IEBAIC0zMDksOCArMzA5LDggQEAgc3RhdGljIGludCBtZHA1X3BsYW5lX2F0 b21pY19jaGVjayhzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwKPiAgCQkJcmV0dXJuIC1FSU5WQUw7 Cj4gIAkJfQo+ICAKPiAtCQloZmxpcCA9ICEhKHN0YXRlLT5yb3RhdGlvbiAmIEJJVChEUk1fUkVG TEVDVF9YKSk7Cj4gLQkJdmZsaXAgPSAhIShzdGF0ZS0+cm90YXRpb24gJiBCSVQoRFJNX1JFRkxF Q1RfWSkpOwo+ICsJCWhmbGlwID0gISEoc3RhdGUtPnJvdGF0aW9uICYgRFJNX1JFRkxFQ1RfWCk7 Cj4gKwkJdmZsaXAgPSAhIShzdGF0ZS0+cm90YXRpb24gJiBEUk1fUkVGTEVDVF9ZKTsKPiAgCQlp ZiAoKHZmbGlwICYmICEobWRwNV9wbGFuZS0+Y2FwcyAmIE1EUF9QSVBFX0NBUF9WRkxJUCkpIHx8 Cj4gIAkJCShoZmxpcCAmJiAhKG1kcDVfcGxhbmUtPmNhcHMgJiBNRFBfUElQRV9DQVBfSEZMSVAp KSkgewo+ICAJCQlkZXZfZXJyKHBsYW5lLT5kZXYtPmRldiwKPiBAQCAtNzQzLDggKzc0Myw4IEBA IHN0YXRpYyBpbnQgbWRwNV9wbGFuZV9tb2RlX3NldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSwK PiAgCWNvbmZpZyB8PSBnZXRfc2NhbGVfY29uZmlnKGZvcm1hdCwgc3JjX2gsIGNydGNfaCwgZmFs c2UpOwo+ICAJREJHKCJzY2FsZSBjb25maWcgPSAleCIsIGNvbmZpZyk7Cj4gIAo+IC0JaGZsaXAg PSAhIShwc3RhdGUtPnJvdGF0aW9uICYgQklUKERSTV9SRUZMRUNUX1gpKTsKPiAtCXZmbGlwID0g ISEocHN0YXRlLT5yb3RhdGlvbiAmIEJJVChEUk1fUkVGTEVDVF9ZKSk7Cj4gKwloZmxpcCA9ICEh KHBzdGF0ZS0+cm90YXRpb24gJiBEUk1fUkVGTEVDVF9YKTsKPiArCXZmbGlwID0gISEocHN0YXRl LT5yb3RhdGlvbiAmIERSTV9SRUZMRUNUX1kpOwo+ICAKPiAgCXNwaW5fbG9ja19pcnFzYXZlKCZt ZHA1X3BsYW5lLT5waXBlX2xvY2ssIGZsYWdzKTsKPiAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9vbWFwZHJtL29tYXBfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFw X2Rydi5jCj4gaW5kZXggMjZjNjEzNC4uM2RkNzhmMiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vb21hcGRybS9vbWFwX2Rydi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0v b21hcF9kcnYuYwo+IEBAIC0yOTUsOSArMjk1LDkgQEAgc3RhdGljIGludCBvbWFwX21vZGVzZXRf aW5pdF9wcm9wZXJ0aWVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlpZiAocHJpdi0+aGFz X2RtbSkgewo+ICAJCWRldi0+bW9kZV9jb25maWcucm90YXRpb25fcHJvcGVydHkgPQo+ICAJCQlk cm1fbW9kZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoZGV2LAo+IC0JCQkJQklUKERSTV9ST1RB VEVfMCkgfCBCSVQoRFJNX1JPVEFURV85MCkgfAo+IC0JCQkJQklUKERSTV9ST1RBVEVfMTgwKSB8 IEJJVChEUk1fUk9UQVRFXzI3MCkgfAo+IC0JCQkJQklUKERSTV9SRUZMRUNUX1gpIHwgQklUKERS TV9SRUZMRUNUX1kpKTsKPiArCQkJCURSTV9ST1RBVEVfMCB8IERSTV9ST1RBVEVfOTAgfAo+ICsJ CQkJRFJNX1JPVEFURV8xODAgfCBEUk1fUk9UQVRFXzI3MCB8Cj4gKwkJCQlEUk1fUkVGTEVDVF9Y IHwgRFJNX1JFRkxFQ1RfWSk7Cj4gIAkJaWYgKCFkZXYtPm1vZGVfY29uZmlnLnJvdGF0aW9uX3By b3BlcnR5KQo+ICAJCQlyZXR1cm4gLUVOT01FTTsKPiAgCX0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL29tYXBkcm0vb21hcF9mYi5jIGIvZHJpdmVycy9ncHUvZHJtL29tYXBkcm0vb21h cF9mYi5jCj4gaW5kZXggMzFmNTE3OC4uNWYzMzM3ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vb21hcGRybS9vbWFwX2ZiLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9v bWFwX2ZiLmMKPiBAQCAtMTc5LDI0ICsxNzksMjQgQEAgdm9pZCBvbWFwX2ZyYW1lYnVmZmVyX3Vw ZGF0ZV9zY2Fub3V0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAJCQkJCSh1aW50MzJf dCl3aW4tPnJvdGF0aW9uKTsKPiAgCQkJLyogZmFsbHRocnUgdG8gZGVmYXVsdCB0byBubyByb3Rh dGlvbiAqLwo+ICAJCWNhc2UgMDoKPiAtCQljYXNlIEJJVChEUk1fUk9UQVRFXzApOgo+ICsJCWNh c2UgRFJNX1JPVEFURV8wOgo+ICAJCQlvcmllbnQgPSAwOwo+ICAJCQlicmVhazsKPiAtCQljYXNl IEJJVChEUk1fUk9UQVRFXzkwKToKPiArCQljYXNlIERSTV9ST1RBVEVfOTA6Cj4gIAkJCW9yaWVu dCA9IE1BU0tfWFlfRkxJUCB8IE1BU0tfWF9JTlZFUlQ7Cj4gIAkJCWJyZWFrOwo+IC0JCWNhc2Ug QklUKERSTV9ST1RBVEVfMTgwKToKPiArCQljYXNlIERSTV9ST1RBVEVfMTgwOgo+ICAJCQlvcmll bnQgPSBNQVNLX1hfSU5WRVJUIHwgTUFTS19ZX0lOVkVSVDsKPiAgCQkJYnJlYWs7Cj4gLQkJY2Fz ZSBCSVQoRFJNX1JPVEFURV8yNzApOgo+ICsJCWNhc2UgRFJNX1JPVEFURV8yNzA6Cj4gIAkJCW9y aWVudCA9IE1BU0tfWFlfRkxJUCB8IE1BU0tfWV9JTlZFUlQ7Cj4gIAkJCWJyZWFrOwo+ICAJCX0K PiAgCj4gLQkJaWYgKHdpbi0+cm90YXRpb24gJiBCSVQoRFJNX1JFRkxFQ1RfWCkpCj4gKwkJaWYg KHdpbi0+cm90YXRpb24gJiBEUk1fUkVGTEVDVF9YKQo+ICAJCQlvcmllbnQgXj0gTUFTS19YX0lO VkVSVDsKPiAgCj4gLQkJaWYgKHdpbi0+cm90YXRpb24gJiBCSVQoRFJNX1JFRkxFQ1RfWSkpCj4g KwkJaWYgKHdpbi0+cm90YXRpb24gJiBEUk1fUkVGTEVDVF9ZKQo+ICAJCQlvcmllbnQgXj0gTUFT S19ZX0lOVkVSVDsKPiAgCj4gIAkJLyogYWRqdXN0IHgseSBvZmZzZXQgZm9yIGZsaXAvaW52ZXJ0 OiAqLwo+IEBAIC0yMTMsNyArMjEzLDcgQEAgdm9pZCBvbWFwX2ZyYW1lYnVmZmVyX3VwZGF0ZV9z Y2Fub3V0KHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiLAo+ICAJfSBlbHNlIHsKPiAgCQlzd2l0 Y2ggKHdpbi0+cm90YXRpb24gJiBEUk1fUk9UQVRFX01BU0spIHsKPiAgCQljYXNlIDA6Cj4gLQkJ Y2FzZSBCSVQoRFJNX1JPVEFURV8wKToKPiArCQljYXNlIERSTV9ST1RBVEVfMDoKPiAgCQkJLyog T0sgKi8KPiAgCQkJYnJlYWs7Cj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vb21h cGRybS9vbWFwX3BsYW5lLmMgYi9kcml2ZXJzL2dwdS9kcm0vb21hcGRybS9vbWFwX3BsYW5lLmMK PiBpbmRleCA1MjUyYWI3Li40Yzc3MjdlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9v bWFwZHJtL29tYXBfcGxhbmUuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9vbWFwZHJtL29tYXBf cGxhbmUuYwo+IEBAIC0xMDksOCArMTA5LDggQEAgc3RhdGljIHZvaWQgb21hcF9wbGFuZV9hdG9t aWNfdXBkYXRlKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICAJd2luLnNyY195ID0gc3RhdGUt PnNyY195ID4+IDE2Owo+ICAKPiAgCXN3aXRjaCAoc3RhdGUtPnJvdGF0aW9uICYgRFJNX1JPVEFU RV9NQVNLKSB7Cj4gLQljYXNlIEJJVChEUk1fUk9UQVRFXzkwKToKPiAtCWNhc2UgQklUKERSTV9S T1RBVEVfMjcwKToKPiArCWNhc2UgRFJNX1JPVEFURV85MDoKPiArCWNhc2UgRFJNX1JPVEFURV8y NzA6Cj4gIAkJd2luLnNyY193ID0gc3RhdGUtPnNyY19oID4+IDE2Owo+ICAJCXdpbi5zcmNfaCA9 IHN0YXRlLT5zcmNfdyA+PiAxNjsKPiAgCQlicmVhazsKPiBAQCAtMTQ5LDcgKzE0OSw3IEBAIHN0 YXRpYyB2b2lkIG9tYXBfcGxhbmVfYXRvbWljX2Rpc2FibGUoc3RydWN0IGRybV9wbGFuZSAqcGxh bmUsCj4gIAlzdHJ1Y3Qgb21hcF9wbGFuZV9zdGF0ZSAqb21hcF9zdGF0ZSA9IHRvX29tYXBfcGxh bmVfc3RhdGUocGxhbmUtPnN0YXRlKTsKPiAgCXN0cnVjdCBvbWFwX3BsYW5lICpvbWFwX3BsYW5l ID0gdG9fb21hcF9wbGFuZShwbGFuZSk7Cj4gIAo+IC0JcGxhbmUtPnN0YXRlLT5yb3RhdGlvbiA9 IEJJVChEUk1fUk9UQVRFXzApOwo+ICsJcGxhbmUtPnN0YXRlLT5yb3RhdGlvbiA9IERSTV9ST1RB VEVfMDsKPiAgCW9tYXBfc3RhdGUtPnpvcmRlciA9IHBsYW5lLT50eXBlID09IERSTV9QTEFORV9U WVBFX1BSSU1BUlkKPiAgCQkJICAgPyAwIDogb21hcF9wbGFuZS0+aWQ7Cj4gIAo+IEBAIC0xNzgs NyArMTc4LDcgQEAgc3RhdGljIGludCBvbWFwX3BsYW5lX2F0b21pY19jaGVjayhzdHJ1Y3QgZHJt X3BsYW5lICpwbGFuZSwKPiAgCQlyZXR1cm4gLUVJTlZBTDsKPiAgCj4gIAlpZiAoc3RhdGUtPmZi KSB7Cj4gLQkJaWYgKHN0YXRlLT5yb3RhdGlvbiAhPSBCSVQoRFJNX1JPVEFURV8wKSAmJgo+ICsJ CWlmIChzdGF0ZS0+cm90YXRpb24gIT0gRFJNX1JPVEFURV8wICYmCj4gIAkJICAgICFvbWFwX2Zy YW1lYnVmZmVyX3N1cHBvcnRzX3JvdGF0aW9uKHN0YXRlLT5mYikpCj4gIAkJCXJldHVybiAtRUlO VkFMOwo+ICAJfQo+IEBAIC0yNjksNyArMjY5LDcgQEAgc3RhdGljIHZvaWQgb21hcF9wbGFuZV9y ZXNldChzdHJ1Y3QgZHJtX3BsYW5lICpwbGFuZSkKPiAgCSAqLwo+ICAJb21hcF9zdGF0ZS0+em9y ZGVyID0gcGxhbmUtPnR5cGUgPT0gRFJNX1BMQU5FX1RZUEVfUFJJTUFSWQo+ICAJCQkgICA/IDAg OiBvbWFwX3BsYW5lLT5pZDsKPiAtCW9tYXBfc3RhdGUtPmJhc2Uucm90YXRpb24gPSBCSVQoRFJN X1JPVEFURV8wKTsKPiArCW9tYXBfc3RhdGUtPmJhc2Uucm90YXRpb24gPSBEUk1fUk9UQVRFXzA7 Cj4gIAo+ICAJcGxhbmUtPnN0YXRlID0gJm9tYXBfc3RhdGUtPmJhc2U7Cj4gIAlwbGFuZS0+c3Rh dGUtPnBsYW5lID0gcGxhbmU7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgg Yi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCj4gaW5kZXggM2VkZWFmOC4uNTdiYmM2MSAxMDA2NDQK PiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Ny dGMuaAo+IEBAIC04NCwxMyArODQsMTMgQEAgc3RhdGljIGlubGluZSB1aW50NjRfdCBJNjQyVTY0 KGludDY0X3QgdmFsKQo+ICAgKiBEUk1fUkVGTEVDVF9ZIHJlZmxlY3RzIHRoZSBpbWFnZSBhbG9u ZyB0aGUgc3BlY2lmaWVkIGF4aXMgcHJpb3IgdG8gcm90YXRpb24KPiAgICovCj4gICNkZWZpbmUg RFJNX1JPVEFURV9NQVNLIDB4MGYKPiAtI2RlZmluZSBEUk1fUk9UQVRFXzAJMAo+IC0jZGVmaW5l IERSTV9ST1RBVEVfOTAJMQo+IC0jZGVmaW5lIERSTV9ST1RBVEVfMTgwCTIKPiAtI2RlZmluZSBE Uk1fUk9UQVRFXzI3MAkzCj4gKyNkZWZpbmUgRFJNX1JPVEFURV8wCUJJVCgwKQo+ICsjZGVmaW5l IERSTV9ST1RBVEVfOTAJQklUKDEpCj4gKyNkZWZpbmUgRFJNX1JPVEFURV8xODAJQklUKDIpCj4g KyNkZWZpbmUgRFJNX1JPVEFURV8yNzAJQklUKDMpCj4gICNkZWZpbmUgRFJNX1JFRkxFQ1RfTUFT SyAofkRSTV9ST1RBVEVfTUFTSykKPiAtI2RlZmluZSBEUk1fUkVGTEVDVF9YCTQKPiAtI2RlZmlu ZSBEUk1fUkVGTEVDVF9ZCTUKPiArI2RlZmluZSBEUk1fUkVGTEVDVF9YCUJJVCg0KQo+ICsjZGVm aW5lIERSTV9SRUZMRUNUX1kJQklUKDUpCj4gIAo+ICBlbnVtIGRybV9jb25uZWN0b3JfZm9yY2Ug ewo+ICAJRFJNX0ZPUkNFX1VOU1BFQ0lGSUVELAo+IC0tIAo+IDIuNS41CgotLSAKVmlsbGUgU3ly asOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRl bC1nZngK