From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v3 01/15] drm: Move format-related helpers to drm_fourcc.c Date: Thu, 9 Jun 2016 10:36:18 +0200 Message-ID: <20160609083618.GL3363@phenom.ffwll.local> References: <1465428739-26529-1-git-send-email-laurent.pinchart@ideasonboard.com> <1465428739-26529-2-git-send-email-laurent.pinchart@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x242.google.com (mail-wm0-x242.google.com [IPv6:2a00:1450:400c:c09::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0C8E06EAFC for ; Thu, 9 Jun 2016 08:36:23 +0000 (UTC) Received: by mail-wm0-x242.google.com with SMTP id r5so8743083wmr.0 for ; Thu, 09 Jun 2016 01:36:22 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1465428739-26529-2-git-send-email-laurent.pinchart@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: Daniel Vetter , Tomi Valkeinen , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBKdW4gMDksIDIwMTYgYXQgMDI6MzI6MDVBTSArMDMwMCwgTGF1cmVudCBQaW5jaGFy dCB3cm90ZToKPiBUaGUgZHJtX2NydGMuYyBmaWxlIGlzIGEgbWVzcywgbWFraW5nIHRoZSBBQkkg ZG9jdW1lbnRhdGlvbiBjb25mdXNpbmcKPiBzaW5jZSBhbGwgZnVuY3Rpb25zIGFyZSBpbiB0aGUg c2FtZSBiYWcuIFNwbGl0IHRoZSBmb3JtYXQtcmVsYXRlZAo+IGhlbHBlcnMgdG8gYSBuZXcgZHJt X2ZvdXJjYy5jIGZpbGUuCj4gCj4gU2lnbmVkLW9mZi1ieTogTGF1cmVudCBQaW5jaGFydCA8bGF1 cmVudC5waW5jaGFydEBpZGVhc29uYm9hcmQuY29tPgo+IC0tLQo+ICBEb2N1bWVudGF0aW9uL0Rv Y0Jvb2svZ3B1LnRtcGwgfCAgIDUgKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgICAgICAg fCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMgICAgIHwgMjg5IC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9mb3Vy Y2MuYyAgIHwgMzIwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g IGluY2x1ZGUvZHJtL2RybVAuaCAgICAgICAgICAgICB8ICAgMSArCj4gIGluY2x1ZGUvZHJtL2Ry bV9jcnRjLmggICAgICAgICB8ICAgOSAtLQo+ICBpbmNsdWRlL2RybS9kcm1fZm91cmNjLmggICAg ICAgfCAgMzcgKysrKysKPiAgNyBmaWxlcyBjaGFuZ2VkLCAzNjQgaW5zZXJ0aW9ucygrKSwgMjk5 IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2RybV9m b3VyY2MuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX2ZvdXJjYy5oCj4g Cj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbCBiL0RvY3VtZW50 YXRpb24vRG9jQm9vay9ncHUudG1wbAo+IGluZGV4IDc1ODZiZjc1ZjYyZS4uZDMyMzYzY2IxZmYx IDEwMDY0NAo+IC0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbAo+ICsrKyBiL0Rv Y3VtZW50YXRpb24vRG9jQm9vay9ncHUudG1wbAo+IEBAIC0xNjU2LDYgKzE2NTYsMTEgQEAgdm9p ZCBpbnRlbF9jcnRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAhRWRyaXZlcnMvZ3B1 L2RybS9kcm1fcmVjdC5jCj4gICAgICA8L3NlY3QyPgo+ICAgICAgPHNlY3QyPgo+ICsgICAgICA8 dGl0bGU+Rm9ybWF0cyBVdGlsaXRpZXMgUmVmZXJlbmNlPC90aXRsZT4KPiArIUlpbmNsdWRlL2Ry bS9kcm1fZm91cmNjLmgKPiArIUVkcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5jCgpOb3Qgc3Vy ZSB0aGlzIGlzIGNvcnJlY3QgaW4gdGhlIGhlbHBlciBzZWN0aW9uIG9mIEtNUy4gZHJtX2ZvdXJj YyBpcyBwYXJ0Cm9mIHRoZSB1YWJpLCBpbmNsdWRpbmcgYWxsIHRoZSBtZXRhZGF0YSBkZWZpbml0 aW9ucy4gUGxlYXNlIG1vdmUgb25lCnNlY3Rpb24gdXAsIGFuZCByZXNlbmQganVzdCB0aGlzIHBh dGNoIHNvIEkgY2FuIG1lcmdlIGl0ICh0byBhdm9pZApuZWVkbGVzcyBjb25mbGljdHMgYW5kIHJl YmFzZSBwYWluKS4KLURhbmllbAoKPiArICAgIDwvc2VjdDI+Cj4gKyAgICA8c2VjdDI+Cj4gICAg ICAgIDx0aXRsZT5GbGlwLXdvcmsgSGVscGVyIFJlZmVyZW5jZTwvdGl0bGU+Cj4gICFQaW5jbHVk ZS9kcm0vZHJtX2ZsaXBfd29yay5oIGZsaXAgdXRpbHMKPiAgIUlpbmNsdWRlL2RybS9kcm1fZmxp cF93b3JrLmgKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVy cy9ncHUvZHJtL01ha2VmaWxlCj4gaW5kZXggYmU0M2FmYjA4YzY5Li5hYTI0YWYzNWMwNjggMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL01ha2VmaWxlCj4gQEAgLTgsNyArOCw3IEBAIGRybS15ICAgICAgIDo9CWRybV9hdXRoLm8g ZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCj4gIAkJZHJtX2xvY2subyBkcm1fbWVtb3J5Lm8gZHJt X2Rydi5vIGRybV92bS5vIFwKPiAgCQlkcm1fc2NhdHRlci5vIGRybV9wY2kubyBcCj4gIAkJZHJt X3BsYXRmb3JtLm8gZHJtX3N5c2ZzLm8gZHJtX2hhc2h0YWIubyBkcm1fbW0ubyBcCj4gLQkJZHJt X2NydGMubyBkcm1fbW9kZXMubyBkcm1fZWRpZC5vIFwKPiArCQlkcm1fY3J0Yy5vIGRybV9mb3Vy Y2MubyBkcm1fbW9kZXMubyBkcm1fZWRpZC5vIFwKPiAgCQlkcm1faW5mby5vIGRybV9kZWJ1Z2Zz Lm8gZHJtX2VuY29kZXJfc2xhdmUubyBcCj4gIAkJZHJtX3RyYWNlX3BvaW50cy5vIGRybV9nbG9i YWwubyBkcm1fcHJpbWUubyBcCj4gIAkJZHJtX3JlY3QubyBkcm1fdm1hX21hbmFnZXIubyBkcm1f ZmxpcF93b3JrLm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYyBi L2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Yy5jCj4gaW5kZXggMGUzY2M2NmFhOGI3Li5lNTM2OTUy OWFmMDYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vZHJtX2NydGMuYwo+IEBAIC0yMzksMzcgKzIzOSw2IEBAIGNvbnN0IGNo YXIgKmRybV9nZXRfc3VicGl4ZWxfb3JkZXJfbmFtZShlbnVtIHN1YnBpeGVsX29yZGVyIG9yZGVy KQo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2dldF9zdWJwaXhlbF9vcmRlcl9uYW1lKTsKPiAg Cj4gLXN0YXRpYyBjaGFyIHByaW50YWJsZV9jaGFyKGludCBjKQo+IC17Cj4gLQlyZXR1cm4gaXNh c2NpaShjKSAmJiBpc3ByaW50KGMpID8gYyA6ICc/JzsKPiAtfQo+IC0KPiAtLyoqCj4gLSAqIGRy bV9nZXRfZm9ybWF0X25hbWUgLSByZXR1cm4gYSBzdHJpbmcgZm9yIGRybSBmb3VyY2MgZm9ybWF0 Cj4gLSAqIEBmb3JtYXQ6IGZvcm1hdCB0byBjb21wdXRlIG5hbWUgb2YKPiAtICoKPiAtICogTm90 ZSB0aGF0IHRoZSBidWZmZXIgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIGlzIGdsb2JhbGx5IHNoYXJl ZCBhbmQgb3duZWQgYnkKPiAtICogdGhlIGZ1bmN0aW9uIGl0c2VsZi4KPiAtICoKPiAtICogRklY TUU6IFRoaXMgaXNuJ3QgcmVhbGx5IG11bHRpdGhyZWFkaW5nIHNhZmUuCj4gLSAqLwo+IC1jb25z dCBjaGFyICpkcm1fZ2V0X2Zvcm1hdF9uYW1lKHVpbnQzMl90IGZvcm1hdCkKPiAtewo+IC0Jc3Rh dGljIGNoYXIgYnVmWzMyXTsKPiAtCj4gLQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLAo+IC0J CSAiJWMlYyVjJWMgJXMtZW5kaWFuICgweCUwOHgpIiwKPiAtCQkgcHJpbnRhYmxlX2NoYXIoZm9y bWF0ICYgMHhmZiksCj4gLQkJIHByaW50YWJsZV9jaGFyKChmb3JtYXQgPj4gOCkgJiAweGZmKSwK PiAtCQkgcHJpbnRhYmxlX2NoYXIoKGZvcm1hdCA+PiAxNikgJiAweGZmKSwKPiAtCQkgcHJpbnRh YmxlX2NoYXIoKGZvcm1hdCA+PiAyNCkgJiAweDdmKSwKPiAtCQkgZm9ybWF0ICYgRFJNX0ZPUk1B VF9CSUdfRU5ESUFOID8gImJpZyIgOiAibGl0dGxlIiwKPiAtCQkgZm9ybWF0KTsKPiAtCj4gLQly ZXR1cm4gYnVmOwo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2dldF9mb3JtYXRfbmFtZSk7Cj4g LQo+ICAvKgo+ICAgKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBhc3NpZ24gYSBzbG90IGluIHRoZSBv YmplY3QgaWRyIGFuZCBvcHRpb25hbGx5Cj4gICAqIHJlZ2lzdGVyIHRoZSBvYmplY3QgaW50byB0 aGUgaWRyLgo+IEBAIC01NTQ0LDI2NCArNTUxMyw2IEBAIGludCBkcm1fbW9kZV9kZXN0cm95X2R1 bWJfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiAgfQo+ICAKPiAgLyoqCj4gLSAqIGRy bV9mYl9nZXRfYnBwX2RlcHRoIC0gZ2V0IHRoZSBicHAvZGVwdGggdmFsdWVzIGZvciBmb3JtYXQK PiAtICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyopCj4gLSAqIEBkZXB0aDog c3RvcmFnZSBmb3IgdGhlIGRlcHRoIHZhbHVlCj4gLSAqIEBicHA6IHN0b3JhZ2UgZm9yIHRoZSBi cHAgdmFsdWUKPiAtICoKPiAtICogVGhpcyBvbmx5IHN1cHBvcnRzIFJHQiBmb3JtYXRzIGhlcmUg Zm9yIGNvbXBhdCB3aXRoIGNvZGUgdGhhdCBkb2Vzbid0IHVzZQo+IC0gKiBwaXhlbCBmb3JtYXRz IGRpcmVjdGx5IHlldC4KPiAtICovCj4gLXZvaWQgZHJtX2ZiX2dldF9icHBfZGVwdGgodWludDMy X3QgZm9ybWF0LCB1bnNpZ25lZCBpbnQgKmRlcHRoLAo+IC0JCQkgIGludCAqYnBwKQo+IC17Cj4g LQlzd2l0Y2ggKGZvcm1hdCkgewo+IC0JY2FzZSBEUk1fRk9STUFUX0M4Ogo+IC0JY2FzZSBEUk1f Rk9STUFUX1JHQjMzMjoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9CR1IyMzM6Cj4gLQkJKmRlcHRoID0g ODsKPiAtCQkqYnBwID0gODsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9YUkdCMTU1 NToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTU1NToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9SR0JY NTU1MToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9CR1JYNTU1MToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9B UkdCMTU1NToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTU1NToKPiAtCWNhc2UgRFJNX0ZPUk1B VF9SR0JBNTU1MToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNTU1MToKPiAtCQkqZGVwdGggPSAx NTsKPiAtCQkqYnBwID0gMTY7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfUkdCNTY1 Ogo+IC0JY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKPiAtCQkqZGVwdGggPSAxNjsKPiAtCQkqYnBw ID0gMTY7Cj4gLQkJYnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfUkdCODg4Ogo+IC0JY2FzZSBE Uk1fRk9STUFUX0JHUjg4ODoKPiAtCQkqZGVwdGggPSAyNDsKPiAtCQkqYnBwID0gMjQ7Cj4gLQkJ YnJlYWs7Cj4gLQljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gLQljYXNlIERSTV9GT1JNQVRf WEJHUjg4ODg6Cj4gLQljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6Cj4gLQljYXNlIERSTV9GT1JN QVRfQkdSWDg4ODg6Cj4gLQkJKmRlcHRoID0gMjQ7Cj4gLQkJKmJwcCA9IDMyOwo+IC0JCWJyZWFr Owo+IC0JY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1hC R1IyMTAxMDEwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOgo+IC0JY2FzZSBEUk1f Rk9STUFUX0JHUlgxMDEwMTAyOgo+IC0JY2FzZSBEUk1fRk9STUFUX0FSR0IyMTAxMDEwOgo+IC0J Y2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1JHQkExMDEw MTAyOgo+IC0JY2FzZSBEUk1fRk9STUFUX0JHUkExMDEwMTAyOgo+IC0JCSpkZXB0aCA9IDMwOwo+ IC0JCSpicHAgPSAzMjsKPiAtCQlicmVhazsKPiAtCWNhc2UgRFJNX0ZPUk1BVF9BUkdCODg4ODoK PiAtCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4 ODoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKPiAtCQkqZGVwdGggPSAzMjsKPiAtCQkq YnBwID0gMzI7Cj4gLQkJYnJlYWs7Cj4gLQlkZWZhdWx0Ogo+IC0JCURSTV9ERUJVR19LTVMoInVu c3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAlc1xuIiwKPiAtCQkJICAgICAgZHJtX2dldF9mb3JtYXRf bmFtZShmb3JtYXQpKTsKPiAtCQkqZGVwdGggPSAwOwo+IC0JCSpicHAgPSAwOwo+IC0JCWJyZWFr Owo+IC0JfQo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2ZiX2dldF9icHBfZGVwdGgpOwo+IC0K PiAtLyoqCj4gLSAqIGRybV9mb3JtYXRfbnVtX3BsYW5lcyAtIGdldCB0aGUgbnVtYmVyIG9mIHBs YW5lcyBmb3IgZm9ybWF0Cj4gLSAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAoRFJNX0ZPUk1BVF8q KQo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBUaGUgbnVtYmVyIG9mIHBsYW5lcyB1c2VkIGJ5 IHRoZSBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0Lgo+IC0gKi8KPiAtaW50IGRybV9mb3JtYXRfbnVt X3BsYW5lcyh1aW50MzJfdCBmb3JtYXQpCj4gLXsKPiAtCXN3aXRjaCAoZm9ybWF0KSB7Cj4gLQlj YXNlIERSTV9GT1JNQVRfWVVWNDEwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lWVTQxMDoKPiAtCWNh c2UgRFJNX0ZPUk1BVF9ZVVY0MTE6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZVNDExOgo+IC0JY2Fz ZSBEUk1fRk9STUFUX1lVVjQyMDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6Cj4gLQljYXNl IERSTV9GT1JNQVRfWVVWNDIyOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lWVTQyMjoKPiAtCWNhc2Ug RFJNX0ZPUk1BVF9ZVVY0NDQ6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZVNDQ0Ogo+IC0JCXJldHVy biAzOwo+IC0JY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gLQljYXNlIERSTV9GT1JNQVRfTlYyMToK PiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjE2Ogo+IC0JY2FzZSBEUk1fRk9STUFUX05WNjE6Cj4gLQlj YXNlIERSTV9GT1JNQVRfTlYyNDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjQyOgo+IC0JCXJldHVy biAyOwo+IC0JZGVmYXVsdDoKPiAtCQlyZXR1cm4gMTsKPiAtCX0KPiAtfQo+IC1FWFBPUlRfU1lN Qk9MKGRybV9mb3JtYXRfbnVtX3BsYW5lcyk7Cj4gLQo+IC0vKioKPiAtICogZHJtX2Zvcm1hdF9w bGFuZV9jcHAgLSBkZXRlcm1pbmUgdGhlIGJ5dGVzIHBlciBwaXhlbCB2YWx1ZQo+IC0gKiBAZm9y bWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKPiAtICogQHBsYW5lOiBwbGFuZSBpbmRl eAo+IC0gKgo+IC0gKiBSZXR1cm5zOgo+IC0gKiBUaGUgYnl0ZXMgcGVyIHBpeGVsIHZhbHVlIGZv ciB0aGUgc3BlY2lmaWVkIHBsYW5lLgo+IC0gKi8KPiAtaW50IGRybV9mb3JtYXRfcGxhbmVfY3Bw KHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKQo+IC17Cj4gLQl1bnNpZ25lZCBpbnQgZGVwdGg7 Cj4gLQlpbnQgYnBwOwo+IC0KPiAtCWlmIChwbGFuZSA+PSBkcm1fZm9ybWF0X251bV9wbGFuZXMo Zm9ybWF0KSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlzd2l0Y2ggKGZvcm1hdCkgewo+IC0JY2Fz ZSBEUk1fRk9STUFUX1lVWVY6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZZVToKPiAtCWNhc2UgRFJN X0ZPUk1BVF9VWVZZOgo+IC0JY2FzZSBEUk1fRk9STUFUX1ZZVVk6Cj4gLQkJcmV0dXJuIDI7Cj4g LQljYXNlIERSTV9GT1JNQVRfTlYxMjoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgo+IC0JY2Fz ZSBEUk1fRk9STUFUX05WMTY6Cj4gLQljYXNlIERSTV9GT1JNQVRfTlY2MToKPiAtCWNhc2UgRFJN X0ZPUk1BVF9OVjI0Ogo+IC0JY2FzZSBEUk1fRk9STUFUX05WNDI6Cj4gLQkJcmV0dXJuIHBsYW5l ID8gMiA6IDE7Cj4gLQljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgo+IC0JY2FzZSBEUk1fRk9STUFU X1lWVTQxMDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTE6Cj4gLQljYXNlIERSTV9GT1JNQVRf WVZVNDExOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9Z VlU0MjA6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lW VTQyMjoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0NDQ6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZV NDQ0Ogo+IC0JCXJldHVybiAxOwo+IC0JZGVmYXVsdDoKPiAtCQlkcm1fZmJfZ2V0X2JwcF9kZXB0 aChmb3JtYXQsICZkZXB0aCwgJmJwcCk7Cj4gLQkJcmV0dXJuIGJwcCA+PiAzOwo+IC0JfQo+IC19 Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9wbGFuZV9jcHApOwo+IC0KPiAtLyoqCj4gLSAq IGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcgLSBnZXQgdGhlIGhvcml6b250YWwg Y2hyb21hIHN1YnNhbXBsaW5nIGZhY3Rvcgo+IC0gKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgKERS TV9GT1JNQVRfKikKPiAtICoKPiAtICogUmV0dXJuczoKPiAtICogVGhlIGhvcml6b250YWwgY2hy b21hIHN1YnNhbXBsaW5nIGZhY3RvciBmb3IgdGhlCj4gLSAqIHNwZWNpZmllZCBwaXhlbCBmb3Jt YXQuCj4gLSAqLwo+IC1pbnQgZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyh1aW50 MzJfdCBmb3JtYXQpCj4gLXsKPiAtCXN3aXRjaCAoZm9ybWF0KSB7Cj4gLQljYXNlIERSTV9GT1JN QVRfWVVWNDExOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKPiAtCWNhc2UgRFJNX0ZPUk1B VF9ZVVY0MTA6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZVNDEwOgo+IC0JCXJldHVybiA0Owo+IC0J Y2FzZSBEUk1fRk9STUFUX1lVWVY6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZZVToKPiAtCWNhc2Ug RFJNX0ZPUk1BVF9VWVZZOgo+IC0JY2FzZSBEUk1fRk9STUFUX1ZZVVk6Cj4gLQljYXNlIERSTV9G T1JNQVRfTlYxMjoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgo+IC0JY2FzZSBEUk1fRk9STUFU X05WMTY6Cj4gLQljYXNlIERSTV9GT1JNQVRfTlY2MToKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0 MjI6Cj4gLQljYXNlIERSTV9GT1JNQVRfWVZVNDIyOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lVVjQy MDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6Cj4gLQkJcmV0dXJuIDI7Cj4gLQlkZWZhdWx0 Ogo+IC0JCXJldHVybiAxOwo+IC0JfQo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9o b3J6X2Nocm9tYV9zdWJzYW1wbGluZyk7Cj4gLQo+IC0vKioKPiAtICogZHJtX2Zvcm1hdF92ZXJ0 X2Nocm9tYV9zdWJzYW1wbGluZyAtIGdldCB0aGUgdmVydGljYWwgY2hyb21hIHN1YnNhbXBsaW5n IGZhY3Rvcgo+IC0gKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKPiAtICoK PiAtICogUmV0dXJuczoKPiAtICogVGhlIHZlcnRpY2FsIGNocm9tYSBzdWJzYW1wbGluZyBmYWN0 b3IgZm9yIHRoZQo+IC0gKiBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0Lgo+IC0gKi8KPiAtaW50IGRy bV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KQo+IC17Cj4g LQlzd2l0Y2ggKGZvcm1hdCkgewo+IC0JY2FzZSBEUk1fRk9STUFUX1lVVjQxMDoKPiAtCWNhc2Ug RFJNX0ZPUk1BVF9ZVlU0MTA6Cj4gLQkJcmV0dXJuIDQ7Cj4gLQljYXNlIERSTV9GT1JNQVRfWVVW NDIwOgo+IC0JY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKPiAtCWNhc2UgRFJNX0ZPUk1BVF9OVjEy Ogo+IC0JY2FzZSBEUk1fRk9STUFUX05WMjE6Cj4gLQkJcmV0dXJuIDI7Cj4gLQlkZWZhdWx0Ogo+ IC0JCXJldHVybiAxOwo+IC0JfQo+IC19Cj4gLUVYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF92ZXJ0 X2Nocm9tYV9zdWJzYW1wbGluZyk7Cj4gLQo+IC0vKioKPiAtICogZHJtX2Zvcm1hdF9wbGFuZV93 aWR0aCAtIHdpZHRoIG9mIHRoZSBwbGFuZSBnaXZlbiB0aGUgZmlyc3QgcGxhbmUKPiAtICogQHdp ZHRoOiB3aWR0aCBvZiB0aGUgZmlyc3QgcGxhbmUKPiAtICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0 Cj4gLSAqIEBwbGFuZTogcGxhbmUgaW5kZXgKPiAtICoKPiAtICogUmV0dXJuczoKPiAtICogVGhl IHdpZHRoIG9mIEBwbGFuZSwgZ2l2ZW4gdGhhdCB0aGUgd2lkdGggb2YgdGhlIGZpcnN0IHBsYW5l IGlzIEB3aWR0aC4KPiAtICovCj4gLWludCBkcm1fZm9ybWF0X3BsYW5lX3dpZHRoKGludCB3aWR0 aCwgdWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpCj4gLXsKPiAtCWlmIChwbGFuZSA+PSBkcm1f Zm9ybWF0X251bV9wbGFuZXMoZm9ybWF0KSkKPiAtCQlyZXR1cm4gMDsKPiAtCj4gLQlpZiAocGxh bmUgPT0gMCkKPiAtCQlyZXR1cm4gd2lkdGg7Cj4gLQo+IC0JcmV0dXJuIHdpZHRoIC8gZHJtX2Zv cm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyhmb3JtYXQpOwo+IC19Cj4gLUVYUE9SVF9TWU1C T0woZHJtX2Zvcm1hdF9wbGFuZV93aWR0aCk7Cj4gLQo+IC0vKioKPiAtICogZHJtX2Zvcm1hdF9w bGFuZV9oZWlnaHQgLSBoZWlnaHQgb2YgdGhlIHBsYW5lIGdpdmVuIHRoZSBmaXJzdCBwbGFuZQo+ IC0gKiBAaGVpZ2h0OiBoZWlnaHQgb2YgdGhlIGZpcnN0IHBsYW5lCj4gLSAqIEBmb3JtYXQ6IHBp eGVsIGZvcm1hdAo+IC0gKiBAcGxhbmU6IHBsYW5lIGluZGV4Cj4gLSAqCj4gLSAqIFJldHVybnM6 Cj4gLSAqIFRoZSBoZWlnaHQgb2YgQHBsYW5lLCBnaXZlbiB0aGF0IHRoZSBoZWlnaHQgb2YgdGhl IGZpcnN0IHBsYW5lIGlzIEBoZWlnaHQuCj4gLSAqLwo+IC1pbnQgZHJtX2Zvcm1hdF9wbGFuZV9o ZWlnaHQoaW50IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpCj4gLXsKPiAtCWlm IChwbGFuZSA+PSBkcm1fZm9ybWF0X251bV9wbGFuZXMoZm9ybWF0KSkKPiAtCQlyZXR1cm4gMDsK PiAtCj4gLQlpZiAocGxhbmUgPT0gMCkKPiAtCQlyZXR1cm4gaGVpZ2h0Owo+IC0KPiAtCXJldHVy biBoZWlnaHQgLyBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKGZvcm1hdCk7Cj4g LX0KPiAtRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X3BsYW5lX2hlaWdodCk7Cj4gLQo+IC0vKioK PiAgICogZHJtX3JvdGF0aW9uX3NpbXBsaWZ5KCkgLSBUcnkgdG8gc2ltcGxpZnkgdGhlIHJvdGF0 aW9uCj4gICAqIEByb3RhdGlvbjogUm90YXRpb24gdG8gYmUgc2ltcGxpZmllZAo+ICAgKiBAc3Vw cG9ydGVkX3JvdGF0aW9uczogU3VwcG9ydGVkIHJvdGF0aW9ucwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYwo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wNjQ1Yzg1ZDVmOTUK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mb3VyY2MuYwo+IEBA IC0wLDAgKzEsMzIwIEBACj4gKy8qCj4gKyAqIENvcHlyaWdodCAoYykgMjAxNiBMYXVyZW50IFBp bmNoYXJ0IDxsYXVyZW50LnBpbmNoYXJ0QGlkZWFzb25ib2FyZC5jb20+Cj4gKyAqCj4gKyAqIERS TSBjb3JlIGZvcm1hdCByZWxhdGVkIGZ1bmN0aW9ucwo+ICsgKgo+ICsgKiBQZXJtaXNzaW9uIHRv IHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlIGFu ZCBpdHMKPiArICogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50 ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKPiArICogdGhlIGFib3ZlIGNvcHlyaWdodCBu b3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodAo+ ICsgKiBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRp bmcgZG9jdW1lbnRhdGlvbiwgYW5kCj4gKyAqIHRoYXQgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdo dCBob2xkZXJzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCj4gKyAqIHB1YmxpY2l0eSBw ZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp YywKPiArICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgVGhlIGNvcHlyaWdodCBob2xkZXJz IG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zCj4gKyAqIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0 aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcwo+ICsgKiBp cyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCj4gKyAqCj4gKyAqIFRIRSBD T1BZUklHSFQgSE9MREVSUyBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBU SElTIFNPRlRXQVJFLAo+ICsgKiBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBN RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCj4gKyAqIEVWRU5UIFNIQUxMIFRIRSBD T1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgo+ ICsgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNV TFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKPiArICogREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElO IEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUgo+ICsgKiBUT1JUSU9V UyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9S IFBFUkZPUk1BTkNFCj4gKyAqIE9GIFRISVMgU09GVFdBUkUuCj4gKyAqLwo+ICsKPiArI2luY2x1 ZGUgPGxpbnV4L2J1Zy5oPgo+ICsjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KPiArI2luY2x1ZGUg PGxpbnV4L2V4cG9ydC5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKwo+ICsjaW5j bHVkZSA8ZHJtL2RybVAuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+Cj4gKwo+ICtz dGF0aWMgY2hhciBwcmludGFibGVfY2hhcihpbnQgYykKPiArewo+ICsJcmV0dXJuIGlzYXNjaWko YykgJiYgaXNwcmludChjKSA/IGMgOiAnPyc7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1fZ2V0 X2Zvcm1hdF9uYW1lIC0gcmV0dXJuIGEgc3RyaW5nIGZvciBkcm0gZm91cmNjIGZvcm1hdAo+ICsg KiBAZm9ybWF0OiBmb3JtYXQgdG8gY29tcHV0ZSBuYW1lIG9mCj4gKyAqCj4gKyAqIE5vdGUgdGhh dCB0aGUgYnVmZmVyIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBpcyBnbG9iYWxseSBzaGFyZWQgYW5k IG93bmVkIGJ5Cj4gKyAqIHRoZSBmdW5jdGlvbiBpdHNlbGYuCj4gKyAqCj4gKyAqIEZJWE1FOiBU aGlzIGlzbid0IHJlYWxseSBtdWx0aXRocmVhZGluZyBzYWZlLgo+ICsgKi8KPiArY29uc3QgY2hh ciAqZHJtX2dldF9mb3JtYXRfbmFtZSh1aW50MzJfdCBmb3JtYXQpCj4gK3sKPiArCXN0YXRpYyBj aGFyIGJ1ZlszMl07Cj4gKwo+ICsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKPiArCQkgIiVj JWMlYyVjICVzLWVuZGlhbiAoMHglMDh4KSIsCj4gKwkJIHByaW50YWJsZV9jaGFyKGZvcm1hdCAm IDB4ZmYpLAo+ICsJCSBwcmludGFibGVfY2hhcigoZm9ybWF0ID4+IDgpICYgMHhmZiksCj4gKwkJ IHByaW50YWJsZV9jaGFyKChmb3JtYXQgPj4gMTYpICYgMHhmZiksCj4gKwkJIHByaW50YWJsZV9j aGFyKChmb3JtYXQgPj4gMjQpICYgMHg3ZiksCj4gKwkJIGZvcm1hdCAmIERSTV9GT1JNQVRfQklH X0VORElBTiA/ICJiaWciIDogImxpdHRsZSIsCj4gKwkJIGZvcm1hdCk7Cj4gKwo+ICsJcmV0dXJu IGJ1ZjsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9nZXRfZm9ybWF0X25hbWUpOwo+ICsKPiAr LyoqCj4gKyAqIGRybV9mYl9nZXRfYnBwX2RlcHRoIC0gZ2V0IHRoZSBicHAvZGVwdGggdmFsdWVz IGZvciBmb3JtYXQKPiArICogQGZvcm1hdDogcGl4ZWwgZm9ybWF0IChEUk1fRk9STUFUXyopCj4g KyAqIEBkZXB0aDogc3RvcmFnZSBmb3IgdGhlIGRlcHRoIHZhbHVlCj4gKyAqIEBicHA6IHN0b3Jh Z2UgZm9yIHRoZSBicHAgdmFsdWUKPiArICoKPiArICogVGhpcyBvbmx5IHN1cHBvcnRzIFJHQiBm b3JtYXRzIGhlcmUgZm9yIGNvbXBhdCB3aXRoIGNvZGUgdGhhdCBkb2Vzbid0IHVzZQo+ICsgKiBw aXhlbCBmb3JtYXRzIGRpcmVjdGx5IHlldC4KPiArICovCj4gK3ZvaWQgZHJtX2ZiX2dldF9icHBf ZGVwdGgodWludDMyX3QgZm9ybWF0LCB1bnNpZ25lZCBpbnQgKmRlcHRoLAo+ICsJCQkgIGludCAq YnBwKQo+ICt7Cj4gKwlzd2l0Y2ggKGZvcm1hdCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX0M4Ogo+ ICsJY2FzZSBEUk1fRk9STUFUX1JHQjMzMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1IyMzM6Cj4g KwkJKmRlcHRoID0gODsKPiArCQkqYnBwID0gODsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZP Uk1BVF9YUkdCMTU1NToKPiArCWNhc2UgRFJNX0ZPUk1BVF9YQkdSMTU1NToKPiArCWNhc2UgRFJN X0ZPUk1BVF9SR0JYNTU1MToKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JYNTU1MToKPiArCWNhc2Ug RFJNX0ZPUk1BVF9BUkdCMTU1NToKPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSMTU1NToKPiArCWNh c2UgRFJNX0ZPUk1BVF9SR0JBNTU1MToKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JBNTU1MToKPiAr CQkqZGVwdGggPSAxNTsKPiArCQkqYnBwID0gMTY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9G T1JNQVRfUkdCNTY1Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0JHUjU2NToKPiArCQkqZGVwdGggPSAx NjsKPiArCQkqYnBwID0gMTY7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCODg4 Ogo+ICsJY2FzZSBEUk1fRk9STUFUX0JHUjg4ODoKPiArCQkqZGVwdGggPSAyNDsKPiArCQkqYnBw ID0gMjQ7Cj4gKwkJYnJlYWs7Cj4gKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6Cj4gKwljYXNl IERSTV9GT1JNQVRfWEJHUjg4ODg6Cj4gKwljYXNlIERSTV9GT1JNQVRfUkdCWDg4ODg6Cj4gKwlj YXNlIERSTV9GT1JNQVRfQkdSWDg4ODg6Cj4gKwkJKmRlcHRoID0gMjQ7Cj4gKwkJKmJwcCA9IDMy Owo+ICsJCWJyZWFrOwo+ICsJY2FzZSBEUk1fRk9STUFUX1hSR0IyMTAxMDEwOgo+ICsJY2FzZSBE Uk1fRk9STUFUX1hCR1IyMTAxMDEwOgo+ICsJY2FzZSBEUk1fRk9STUFUX1JHQlgxMDEwMTAyOgo+ ICsJY2FzZSBEUk1fRk9STUFUX0JHUlgxMDEwMTAyOgo+ICsJY2FzZSBEUk1fRk9STUFUX0FSR0Iy MTAxMDEwOgo+ICsJY2FzZSBEUk1fRk9STUFUX0FCR1IyMTAxMDEwOgo+ICsJY2FzZSBEUk1fRk9S TUFUX1JHQkExMDEwMTAyOgo+ICsJY2FzZSBEUk1fRk9STUFUX0JHUkExMDEwMTAyOgo+ICsJCSpk ZXB0aCA9IDMwOwo+ICsJCSpicHAgPSAzMjsKPiArCQlicmVhazsKPiArCWNhc2UgRFJNX0ZPUk1B VF9BUkdCODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9BQkdSODg4ODoKPiArCWNhc2UgRFJNX0ZP Uk1BVF9SR0JBODg4ODoKPiArCWNhc2UgRFJNX0ZPUk1BVF9CR1JBODg4ODoKPiArCQkqZGVwdGgg PSAzMjsKPiArCQkqYnBwID0gMzI7Cj4gKwkJYnJlYWs7Cj4gKwlkZWZhdWx0Ogo+ICsJCURSTV9E RUJVR19LTVMoInVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdCAlc1xuIiwKPiArCQkJICAgICAgZHJt X2dldF9mb3JtYXRfbmFtZShmb3JtYXQpKTsKPiArCQkqZGVwdGggPSAwOwo+ICsJCSpicHAgPSAw Owo+ICsJCWJyZWFrOwo+ICsJfQo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2ZiX2dldF9icHBf ZGVwdGgpOwo+ICsKPiArLyoqCj4gKyAqIGRybV9mb3JtYXRfbnVtX3BsYW5lcyAtIGdldCB0aGUg bnVtYmVyIG9mIHBsYW5lcyBmb3IgZm9ybWF0Cj4gKyAqIEBmb3JtYXQ6IHBpeGVsIGZvcm1hdCAo RFJNX0ZPUk1BVF8qKQo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBUaGUgbnVtYmVyIG9mIHBs YW5lcyB1c2VkIGJ5IHRoZSBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0Lgo+ICsgKi8KPiAraW50IGRy bV9mb3JtYXRfbnVtX3BsYW5lcyh1aW50MzJfdCBmb3JtYXQpCj4gK3sKPiArCXN3aXRjaCAoZm9y bWF0KSB7Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lW VTQxMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTE6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZV NDExOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0 MjA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lWVTQy MjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0NDQ6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDQ0 Ogo+ICsJCXJldHVybiAzOwo+ICsJY2FzZSBEUk1fRk9STUFUX05WMTI6Cj4gKwljYXNlIERSTV9G T1JNQVRfTlYyMToKPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjE2Ogo+ICsJY2FzZSBEUk1fRk9STUFU X05WNjE6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYyNDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjQy Ogo+ICsJCXJldHVybiAyOwo+ICsJZGVmYXVsdDoKPiArCQlyZXR1cm4gMTsKPiArCX0KPiArfQo+ ICtFWFBPUlRfU1lNQk9MKGRybV9mb3JtYXRfbnVtX3BsYW5lcyk7Cj4gKwo+ICsvKioKPiArICog ZHJtX2Zvcm1hdF9wbGFuZV9jcHAgLSBkZXRlcm1pbmUgdGhlIGJ5dGVzIHBlciBwaXhlbCB2YWx1 ZQo+ICsgKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JNQVRfKikKPiArICogQHBsYW5l OiBwbGFuZSBpbmRleAo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBUaGUgYnl0ZXMgcGVyIHBp eGVsIHZhbHVlIGZvciB0aGUgc3BlY2lmaWVkIHBsYW5lLgo+ICsgKi8KPiAraW50IGRybV9mb3Jt YXRfcGxhbmVfY3BwKHVpbnQzMl90IGZvcm1hdCwgaW50IHBsYW5lKQo+ICt7Cj4gKwl1bnNpZ25l ZCBpbnQgZGVwdGg7Cj4gKwlpbnQgYnBwOwo+ICsKPiArCWlmIChwbGFuZSA+PSBkcm1fZm9ybWF0 X251bV9wbGFuZXMoZm9ybWF0KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlzd2l0Y2ggKGZvcm1h dCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1lVWVY6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZZVToK PiArCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgo+ICsJY2FzZSBEUk1fRk9STUFUX1ZZVVk6Cj4gKwkJ cmV0dXJuIDI7Cj4gKwljYXNlIERSTV9GT1JNQVRfTlYxMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9O VjIxOgo+ICsJY2FzZSBEUk1fRk9STUFUX05WMTY6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlY2MToK PiArCWNhc2UgRFJNX0ZPUk1BVF9OVjI0Ogo+ICsJY2FzZSBEUk1fRk9STUFUX05WNDI6Cj4gKwkJ cmV0dXJuIHBsYW5lID8gMiA6IDE7Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDEwOgo+ICsJY2Fz ZSBEUk1fRk9STUFUX1lWVTQxMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0MTE6Cj4gKwljYXNl IERSTV9GT1JNQVRfWVZVNDExOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQyMDoKPiArCWNhc2Ug RFJNX0ZPUk1BVF9ZVlU0MjA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVVWNDIyOgo+ICsJY2FzZSBE Uk1fRk9STUFUX1lWVTQyMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVVY0NDQ6Cj4gKwljYXNlIERS TV9GT1JNQVRfWVZVNDQ0Ogo+ICsJCXJldHVybiAxOwo+ICsJZGVmYXVsdDoKPiArCQlkcm1fZmJf Z2V0X2JwcF9kZXB0aChmb3JtYXQsICZkZXB0aCwgJmJwcCk7Cj4gKwkJcmV0dXJuIGJwcCA+PiAz Owo+ICsJfQo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9wbGFuZV9jcHApOwo+ICsK PiArLyoqCj4gKyAqIGRybV9mb3JtYXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcgLSBnZXQgdGhl IGhvcml6b250YWwgY2hyb21hIHN1YnNhbXBsaW5nIGZhY3Rvcgo+ICsgKiBAZm9ybWF0OiBwaXhl bCBmb3JtYXQgKERSTV9GT1JNQVRfKikKPiArICoKPiArICogUmV0dXJuczoKPiArICogVGhlIGhv cml6b250YWwgY2hyb21hIHN1YnNhbXBsaW5nIGZhY3RvciBmb3IgdGhlCj4gKyAqIHNwZWNpZmll ZCBwaXhlbCBmb3JtYXQuCj4gKyAqLwo+ICtpbnQgZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJz YW1wbGluZyh1aW50MzJfdCBmb3JtYXQpCj4gK3sKPiArCXN3aXRjaCAoZm9ybWF0KSB7Cj4gKwlj YXNlIERSTV9GT1JNQVRfWVVWNDExOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lWVTQxMToKPiArCWNh c2UgRFJNX0ZPUk1BVF9ZVVY0MTA6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDEwOgo+ICsJCXJl dHVybiA0Owo+ICsJY2FzZSBEUk1fRk9STUFUX1lVWVY6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZZ VToKPiArCWNhc2UgRFJNX0ZPUk1BVF9VWVZZOgo+ICsJY2FzZSBEUk1fRk9STUFUX1ZZVVk6Cj4g KwljYXNlIERSTV9GT1JNQVRfTlYxMjoKPiArCWNhc2UgRFJNX0ZPUk1BVF9OVjIxOgo+ICsJY2Fz ZSBEUk1fRk9STUFUX05WMTY6Cj4gKwljYXNlIERSTV9GT1JNQVRfTlY2MToKPiArCWNhc2UgRFJN X0ZPUk1BVF9ZVVY0MjI6Cj4gKwljYXNlIERSTV9GT1JNQVRfWVZVNDIyOgo+ICsJY2FzZSBEUk1f Rk9STUFUX1lVVjQyMDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MjA6Cj4gKwkJcmV0dXJuIDI7 Cj4gKwlkZWZhdWx0Ogo+ICsJCXJldHVybiAxOwo+ICsJfQo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyk7Cj4gKwo+ICsvKioKPiArICogZHJt X2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyAtIGdldCB0aGUgdmVydGljYWwgY2hyb21h IHN1YnNhbXBsaW5nIGZhY3Rvcgo+ICsgKiBAZm9ybWF0OiBwaXhlbCBmb3JtYXQgKERSTV9GT1JN QVRfKikKPiArICoKPiArICogUmV0dXJuczoKPiArICogVGhlIHZlcnRpY2FsIGNocm9tYSBzdWJz YW1wbGluZyBmYWN0b3IgZm9yIHRoZQo+ICsgKiBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0Lgo+ICsg Ki8KPiAraW50IGRybV9mb3JtYXRfdmVydF9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9y bWF0KQo+ICt7Cj4gKwlzd2l0Y2ggKGZvcm1hdCkgewo+ICsJY2FzZSBEUk1fRk9STUFUX1lVVjQx MDoKPiArCWNhc2UgRFJNX0ZPUk1BVF9ZVlU0MTA6Cj4gKwkJcmV0dXJuIDQ7Cj4gKwljYXNlIERS TV9GT1JNQVRfWVVWNDIwOgo+ICsJY2FzZSBEUk1fRk9STUFUX1lWVTQyMDoKPiArCWNhc2UgRFJN X0ZPUk1BVF9OVjEyOgo+ICsJY2FzZSBEUk1fRk9STUFUX05WMjE6Cj4gKwkJcmV0dXJuIDI7Cj4g KwlkZWZhdWx0Ogo+ICsJCXJldHVybiAxOwo+ICsJfQo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJt X2Zvcm1hdF92ZXJ0X2Nocm9tYV9zdWJzYW1wbGluZyk7Cj4gKwo+ICsvKioKPiArICogZHJtX2Zv cm1hdF9wbGFuZV93aWR0aCAtIHdpZHRoIG9mIHRoZSBwbGFuZSBnaXZlbiB0aGUgZmlyc3QgcGxh bmUKPiArICogQHdpZHRoOiB3aWR0aCBvZiB0aGUgZmlyc3QgcGxhbmUKPiArICogQGZvcm1hdDog cGl4ZWwgZm9ybWF0Cj4gKyAqIEBwbGFuZTogcGxhbmUgaW5kZXgKPiArICoKPiArICogUmV0dXJu czoKPiArICogVGhlIHdpZHRoIG9mIEBwbGFuZSwgZ2l2ZW4gdGhhdCB0aGUgd2lkdGggb2YgdGhl IGZpcnN0IHBsYW5lIGlzIEB3aWR0aC4KPiArICovCj4gK2ludCBkcm1fZm9ybWF0X3BsYW5lX3dp ZHRoKGludCB3aWR0aCwgdWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpCj4gK3sKPiArCWlmIChw bGFuZSA+PSBkcm1fZm9ybWF0X251bV9wbGFuZXMoZm9ybWF0KSkKPiArCQlyZXR1cm4gMDsKPiAr Cj4gKwlpZiAocGxhbmUgPT0gMCkKPiArCQlyZXR1cm4gd2lkdGg7Cj4gKwo+ICsJcmV0dXJuIHdp ZHRoIC8gZHJtX2Zvcm1hdF9ob3J6X2Nocm9tYV9zdWJzYW1wbGluZyhmb3JtYXQpOwo+ICt9Cj4g K0VYUE9SVF9TWU1CT0woZHJtX2Zvcm1hdF9wbGFuZV93aWR0aCk7Cj4gKwo+ICsvKioKPiArICog ZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQgLSBoZWlnaHQgb2YgdGhlIHBsYW5lIGdpdmVuIHRoZSBm aXJzdCBwbGFuZQo+ICsgKiBAaGVpZ2h0OiBoZWlnaHQgb2YgdGhlIGZpcnN0IHBsYW5lCj4gKyAq IEBmb3JtYXQ6IHBpeGVsIGZvcm1hdAo+ICsgKiBAcGxhbmU6IHBsYW5lIGluZGV4Cj4gKyAqCj4g KyAqIFJldHVybnM6Cj4gKyAqIFRoZSBoZWlnaHQgb2YgQHBsYW5lLCBnaXZlbiB0aGF0IHRoZSBo ZWlnaHQgb2YgdGhlIGZpcnN0IHBsYW5lIGlzIEBoZWlnaHQuCj4gKyAqLwo+ICtpbnQgZHJtX2Zv cm1hdF9wbGFuZV9oZWlnaHQoaW50IGhlaWdodCwgdWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUp Cj4gK3sKPiArCWlmIChwbGFuZSA+PSBkcm1fZm9ybWF0X251bV9wbGFuZXMoZm9ybWF0KSkKPiAr CQlyZXR1cm4gMDsKPiArCj4gKwlpZiAocGxhbmUgPT0gMCkKPiArCQlyZXR1cm4gaGVpZ2h0Owo+ ICsKPiArCXJldHVybiBoZWlnaHQgLyBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5n KGZvcm1hdCk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZm9ybWF0X3BsYW5lX2hlaWdodCk7 Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybVAuaCBiL2luY2x1ZGUvZHJtL2RybVAuaAo+ IGluZGV4IDg0ZjFhOGVlZmJkYi4uYzg4NzkwNTcwODRlIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUv ZHJtL2RybVAuaAo+ICsrKyBiL2luY2x1ZGUvZHJtL2RybVAuaAo+IEBAIC02Niw2ICs2Niw3IEBA Cj4gIAo+ICAjaW5jbHVkZSA8ZHJtL2RybV9hZ3BzdXBwb3J0Lmg+Cj4gICNpbmNsdWRlIDxkcm0v ZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZm91cmNjLmg+Cj4gICNpbmNsdWRlIDxk cm0vZHJtX2dsb2JhbC5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9oYXNodGFiLmg+Cj4gICNpbmNs dWRlIDxkcm0vZHJtX21lbV91dGlsLmg+Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9j cnRjLmggYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCj4gaW5kZXggZDE1NTljZDA0ZTNkLi4xYjgw YzAyNjhkOGYgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAo+ICsrKyBiL2lu Y2x1ZGUvZHJtL2RybV9jcnRjLmgKPiBAQCAtMjU0MCwxNSArMjU0MCw2IEBAIGV4dGVybiBpbnQg ZHJtX21vZGVfcGxhbmVfc2V0X29ial9wcm9wKHN0cnVjdCBkcm1fcGxhbmUgKnBsYW5lLAo+ICBl eHRlcm4gaW50IGRybV9tb2RlX2F0b21pY19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ICAJCQkJIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKPiAgCj4gLWV4 dGVybiB2b2lkIGRybV9mYl9nZXRfYnBwX2RlcHRoKHVpbnQzMl90IGZvcm1hdCwgdW5zaWduZWQg aW50ICpkZXB0aCwKPiAtCQkJCSBpbnQgKmJwcCk7Cj4gLWV4dGVybiBpbnQgZHJtX2Zvcm1hdF9u dW1fcGxhbmVzKHVpbnQzMl90IGZvcm1hdCk7Cj4gLWV4dGVybiBpbnQgZHJtX2Zvcm1hdF9wbGFu ZV9jcHAodWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpOwo+IC1leHRlcm4gaW50IGRybV9mb3Jt YXRfaG9yel9jaHJvbWFfc3Vic2FtcGxpbmcodWludDMyX3QgZm9ybWF0KTsKPiAtZXh0ZXJuIGlu dCBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCk7Cj4g LWV4dGVybiBpbnQgZHJtX2Zvcm1hdF9wbGFuZV93aWR0aChpbnQgd2lkdGgsIHVpbnQzMl90IGZv cm1hdCwgaW50IHBsYW5lKTsKPiAtZXh0ZXJuIGludCBkcm1fZm9ybWF0X3BsYW5lX2hlaWdodChp bnQgaGVpZ2h0LCB1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSk7Cj4gLWV4dGVybiBjb25zdCBj aGFyICpkcm1fZ2V0X2Zvcm1hdF9uYW1lKHVpbnQzMl90IGZvcm1hdCk7Cj4gIGV4dGVybiBzdHJ1 Y3QgZHJtX3Byb3BlcnR5ICpkcm1fbW9kZV9jcmVhdGVfcm90YXRpb25fcHJvcGVydHkoc3RydWN0 IGRybV9kZXZpY2UgKmRldiwKPiAgCQkJCQkJCSAgICAgIHVuc2lnbmVkIGludCBzdXBwb3J0ZWRf cm90YXRpb25zKTsKPiAgZXh0ZXJuIHVuc2lnbmVkIGludCBkcm1fcm90YXRpb25fc2ltcGxpZnko dW5zaWduZWQgaW50IHJvdGF0aW9uLAo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZm91 cmNjLmggYi9pbmNsdWRlL2RybS9kcm1fZm91cmNjLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ IGluZGV4IDAwMDAwMDAwMDAwMC4uN2Y5MGEzOTZjZjJiCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2luY2x1ZGUvZHJtL2RybV9mb3VyY2MuaAo+IEBAIC0wLDAgKzEsMzcgQEAKPiArLyoKPiArICog Q29weXJpZ2h0IChjKSAyMDE2IExhdXJlbnQgUGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRl YXNvbmJvYXJkLmNvbT4KPiArICoKPiArICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlm eSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCj4gKyAqIGRvY3Vt ZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBw cm92aWRlZCB0aGF0Cj4gKyAqIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBh bGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKPiArICogbm90aWNlIGFuZCB0 aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24s IGFuZAo+ICsgKiB0aGF0IHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBub3QgYmUg dXNlZCBpbiBhZHZlcnRpc2luZyBvcgo+ICsgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0 cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCj4gKyAqIHdyaXR0ZW4g cHJpb3IgcGVybWlzc2lvbi4gIFRoZSBjb3B5cmlnaHQgaG9sZGVycyBtYWtlIG5vIHJlcHJlc2Vu dGF0aW9ucwo+ICsgKiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3Ig YW55IHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMKPiArICogaXMiIHdpdGhvdXQgZXhwcmVz cyBvciBpbXBsaWVkIHdhcnJhbnR5Lgo+ICsgKgo+ICsgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMg RElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKPiAr ICogSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO RCBGSVRORVNTLCBJTiBOTwo+ICsgKiBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUlMg QkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKPiArICogQ09OU0VRVUVOVElB TCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBP RiBVU0UsCj4gKyAqIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09O VFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKPiArICogVE9SVElPVVMgQUNUSU9OLCBBUklTSU5H IE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRQo+ICsg KiBPRiBUSElTIFNPRlRXQVJFLgo+ICsgKi8KPiArI2lmbmRlZiBfX0RSTV9GT1VSQ0NfSF9fCj4g KyNkZWZpbmUgX19EUk1fRk9VUkNDX0hfXwo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ Cj4gKyNpbmNsdWRlIDx1YXBpL2RybS9kcm1fZm91cmNjLmg+Cj4gKwo+ICt2b2lkIGRybV9mYl9n ZXRfYnBwX2RlcHRoKHVpbnQzMl90IGZvcm1hdCwgdW5zaWduZWQgaW50ICpkZXB0aCwgaW50ICpi cHApOwo+ICtpbnQgZHJtX2Zvcm1hdF9udW1fcGxhbmVzKHVpbnQzMl90IGZvcm1hdCk7Cj4gK2lu dCBkcm1fZm9ybWF0X3BsYW5lX2NwcCh1aW50MzJfdCBmb3JtYXQsIGludCBwbGFuZSk7Cj4gK2lu dCBkcm1fZm9ybWF0X2hvcnpfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCk7Cj4g K2ludCBkcm1fZm9ybWF0X3ZlcnRfY2hyb21hX3N1YnNhbXBsaW5nKHVpbnQzMl90IGZvcm1hdCk7 Cj4gK2ludCBkcm1fZm9ybWF0X3BsYW5lX3dpZHRoKGludCB3aWR0aCwgdWludDMyX3QgZm9ybWF0 LCBpbnQgcGxhbmUpOwo+ICtpbnQgZHJtX2Zvcm1hdF9wbGFuZV9oZWlnaHQoaW50IGhlaWdodCwg dWludDMyX3QgZm9ybWF0LCBpbnQgcGxhbmUpOwo+ICtjb25zdCBjaGFyICpkcm1fZ2V0X2Zvcm1h dF9uYW1lKHVpbnQzMl90IGZvcm1hdCk7Cj4gKwo+ICsjZW5kaWYgLyogX19EUk1fRk9VUkNDX0hf XyAqLwo+IC0tIAo+IFJlZ2FyZHMsCj4gCj4gTGF1cmVudCBQaW5jaGFydAo+IAo+IF9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gZHJpLWRldmVsIG1haWxp bmcgbGlzdAo+IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAoKLS0gCkRhbmllbCBW ZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0dHA6Ly9ibG9nLmZm d2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRy aS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo=