From mboxrd@z Thu Jan 1 00:00:00 1970 From: Benjamin Herrenschmidt Subject: Re: [PATCH 2/2] drm/ast: Support AST2500 Date: Fri, 17 Feb 2017 08:09:37 +1100 Message-ID: <1487279377.23576.81.camel@kernel.crashing.org> References: <1487236149.23576.67.camel@kernel.crashing.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from gate.crashing.org (gate.crashing.org [63.228.1.57]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0D7ED6E2EA for ; Thu, 16 Feb 2017 21:09:48 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Emil Velikov Cc: Dave Airlie , ML dri-devel , Egbert Eich List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCAyMDE3LTAyLTE2IGF0IDE3OjMzICswMDAwLCBFbWlsIFZlbGlrb3Ygd3JvdGU6Cj4g T24gMTYgRmVicnVhcnkgMjAxNyBhdCAwOTowOSwgQmVuamFtaW4gSGVycmVuc2NobWlkdAo+IDxi ZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc+IHdyb3RlOgo+ID4gRnJvbTogIlkuQy4gQ2hlbiIgPHlj X2NoZW5AYXNwZWVkdGVjaC5jb20+Cj4gPiAKPiA+IEFkZCBkZXRlY3Rpb24gYW5kIFBPU1QgY29k ZSBmb3IgQVNUMjUwMCBnZW5lcmF0aW9uIGNoaXAsCj4gPiBjb2RlIG9yaWdpbmFsbHkgZnJvbSBB c3BlZWQgYW5kIHNsaWdodGx5IHJld29ya2VkIGZvcgo+ID4gY29kaW5nIHN0eWxlIG1vc3RseSBi eSBCZW4uCj4gPiAKPiA+IFNpZ25lZC1vZmYtYnk6IFkuQy4gQ2hlbiA8eWNfY2hlbkBhc3BlZWR0 ZWNoLmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhA a2VybmVsLmNyYXNoaW5nLm9yZz4KPiA+IC0tLQo+ID4gdjIuIFtCZW5IXQo+ID4gwqAgLSBDb2Rp bmcgc3R5bGUgZml4ZXMKPiA+IMKgIC0gQWRkIHRpbWVvdXQgdG8gbWFpbiBEUkFNIGluaXQgbG9v cAo+ID4gwqAgLSBJbXByb3ZlIGJvb3QgdGltZSBkaXNwbGF5IG9mIFJBTSBpbmZvCj4gPiAKPiA+ IFkuQy4gUGxlYXNlIGNoZWNrIHRoYXQgSSBkaWRuJ3QgYnJlYWsgUE9TVCBhcyBJIGhhdmVuJ3Qg bWFuYWdlIHRvCj4gPiB0ZXN0Cj4gPiB0aGF0ICh3ZSBjYW4ndCBib290IG91ciBtYWNoaW5lcyBp ZiB0aGUgQk1DIGlzbid0IGFscmVhZHkgUE9TVGVkKS4KPiA+IAo+IAo+IEhpIEJlbiwKPiAKPiBC YXJyaW5nIHRoZSBjaGVja3BhdGNoLnBsIHdhcm5pbmdzL2Vycm9ycyB0aGF0IHlvdSd2ZSBzcG90 dGVkIHRoZXJlJ3MKPiBhIGZldyBvdGhlciBjb21tZW50cyBiZWxvdy4KPiBJJ20gbm90IGZhbWls aWFyIHdpdGggdGhlIGhhcmR3YXJlLCBzbyBpdCdzIGp1c3QgdGhpbmdzIHRoYXQgc3RyaWtlCj4g bWUKPiBhcyBvZGQgOy0pCgpIZWggb2suIEkgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhhdCBQT1NU IGNvZGUgdG9vIG11Y2ggYXMgSSdtIG5vdAplcXVpcHBlZCB0byB0ZXN0IGl0LCBidXQgSSdsbCBo YXZlIGEgbG9vayBsYXRlciB0b2RheS4KClRoYW5rcywKQmVuLgoKPiAKPiA+ICsvKgo+ID4gKyAq IEFTVDI1MDAgRFJBTSBzZXR0aW5ncyBtb2R1bGVzCj4gPiArICovCj4gPiArI2RlZmluZSBSRUdU QkxfTlVNwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDE3Cj4gPiArI2RlZmluZSBSRUdJRFhfMDEwwqDC oMKgwqDCoMKgwqDCoMKgwqDCoDAKPiA+ICsjZGVmaW5lIFJFR0lEWF8wMTTCoMKgwqDCoMKgwqDC oMKgwqDCoMKgMQo+ID4gKyNkZWZpbmUgUkVHSURYXzAxOMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAy Cj4gPiArI2RlZmluZSBSRUdJRFhfMDIwwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDMKPiA+ICsjZGVm aW5lIFJFR0lEWF8wMjTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgNAo+ID4gKyNkZWZpbmUgUkVHSURY XzAyQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqA1Cj4gPiArI2RlZmluZSBSRUdJRFhfMDMwwqDCoMKg wqDCoMKgwqDCoMKgwqDCoDYKPiA+ICsjZGVmaW5lIFJFR0lEWF8yMTTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgNwo+ID4gKyNkZWZpbmUgUkVHSURYXzJFMMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA4Cj4g PiArI2RlZmluZSBSRUdJRFhfMkU0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoDkKPiA+ICsjZGVmaW5l IFJFR0lEWF8yRTjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTAKPiA+ICsjZGVmaW5lIFJFR0lEWF8y RUPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTEKPiA+ICsjZGVmaW5lIFJFR0lEWF8yRjDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMTIKPiA+ICsjZGVmaW5lIFJFR0lEWF8yRjTCoMKgwqDCoMKgwqDCoMKg wqDCoMKgMTMKPiA+ICsjZGVmaW5lIFJFR0lEWF8yRjjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTQK PiA+ICsjZGVmaW5lIFJFR0lEWF9SRkPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTUKPiA+ICsjZGVm aW5lIFJFR0lEWF9QTEzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTYKPiAKPiBUaGVzZSBhcmUgdXNl ZCB0byBhZGRyZXNzIHRoZSBjb3JyZWN0IHZhbHVlIGluIHRoZSBhcnJheSwgV29ydGggdXNpbmcK PiBDOTkgaW5pdGFpbGl6ZXIgdG8gZW5zdXJlIHRoYXQgdGhpbmdzIGVuZCBpbiB0aGUgcmlnaHQg cGxhY2UgPwo+IElJUkMgdGhlcmUgd2FzIHNvbWUgc2VjdXJpdHkgcmVsYXRlZCBHQ0MgcGx1Z2lu IHdoaWNoIGNhbiBmdXp6IHRoZQo+IG9yZGVyIG9mIGFycmF5KD8pIGFuZC9vciBzdHJ1Y3QgbWVt YmVycyA/Cj4gCj4gPiArCj4gPiArc3RhdGljIHUzMiBhc3QyNTAwX2RkcjNfMTYwMF90aW1pbmdf dGFibGVbUkVHVEJMX05VTV0gPSB7Cj4gPiArc3RhdGljIHUzMiBhc3QyNTAwX2RkcjRfMTYwMF90 aW1pbmdfdGFibGVbUkVHVEJMX05VTV0gPSB7Cj4gCj4gVGhlc2UgdHdvIGFyZSBjb25zdGFudCBk YXRhLCBhbHRob3VnaCB5b3UnbGwgbmVlZCB0byBhbm5vdGF0ZSB0aGUKPiB1c2VycyBhcyB3ZWxs Lgo+IAo+IAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FzdC9hc3RfbWFpbi5jCj4gPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vYXN0L2FzdF9tYWluLmMKPiA+IEBAIC0zMiw4ICszMiw2IEBACj4g PiDCoCNpbmNsdWRlIDxkcm0vZHJtX2ZiX2hlbHBlci5oPgo+ID4gwqAjaW5jbHVkZSA8ZHJtL2Ry bV9jcnRjX2hlbHBlci5oPgo+ID4gCj4gPiAtI2luY2x1ZGUgImFzdF9kcmFtX3RhYmxlcy5oIgo+ ID4gLQo+IAo+IFVucmVsYXRlZCBjaGFuZ2UgPwo+IAo+IAo+ID4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoERSTV9JTkZPKCJkcmFtICVkICVkICVkICUwOHhcbiIsIGFzdC0+bWNsaywg YXN0LQo+ID4gPmRyYW1fdHlwZSwgYXN0LT5kcmFtX2J1c193aWR0aCwgYXN0LT52cmFtX3NpemUp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9JTkZPKCJkcmFtIE1DTEs9 JXUgdHlwZT0lZCBidXNfd2lkdGg9JWQKPiA+IHNpemU9JTA4eFxuIiwKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhc3QtPm1jbGssIGFzdC0+ZHJh bV90eXBlLCBhc3QtCj4gPiA+ZHJhbV9idXNfd2lkdGgsIGFzdC0+dnJhbV9zaXplKTsKPiAKPiBV bnJlbGF0ZWQgY2hhbmdlID8KPiAKPiAKPiA+IMKgc3RhdGljIHZvaWQgYXN0X3NldF9leHRfcmVn KHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0Cj4gPiBkcm1fZGlzcGxheV9tb2RlICptb2Rl LAo+ID4gQEAgLTQyMSw3ICs0MzIsNyBAQCBzdGF0aWMgdm9pZCBhc3Rfc2V0X2V4dF9yZWcoc3Ry dWN0IGRybV9jcnRjCj4gPiAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUKPiA+ IMKgwqDCoMKgwqDCoMKgwqBhc3Rfc2V0X2luZGV4X3JlZ19tYXNrKGFzdCwgQVNUX0lPX0NSVENf UE9SVCwgMHhhOCwgMHhmZCwKPiA+IGpyZWdBOCk7Cj4gPiAKPiA+IMKgwqDCoMKgwqDCoMKgwqAv KiBTZXQgVGhyZXNob2xkICovCj4gPiAtwqDCoMKgwqDCoMKgwqBpZiAoYXN0LT5jaGlwID09IEFT VDIzMDAgfHwgYXN0LT5jaGlwID09IEFTVDI0MDApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChh c3QtPmNoaXAgPT0gQVNUMjMwMCB8fCBhc3QtPmNoaXAgPT0gQVNUMjQwMCB8fCBhc3QtCj4gPiA+ Y2hpcCA9PSBBU1QyNTAwKSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGFz dF9zZXRfaW5kZXhfcmVnKGFzdCwgQVNUX0lPX0NSVENfUE9SVCwgMHhhNywKPiA+IDB4NzgpOwo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBhc3Rfc2V0X2luZGV4X3JlZyhhc3Qs IEFTVF9JT19DUlRDX1BPUlQsIDB4YTYsCj4gPiAweDYwKTsKPiA+IMKgwqDCoMKgwqDCoMKgwqB9 IGVsc2UgaWYgKGFzdC0+Y2hpcCA9PSBBU1QyMTAwIHx8Cj4gPiBAQCAtNzk0LDcgKzgwNSw3IEBA IHN0YXRpYyBpbnQgYXN0X21vZGVfdmFsaWQoc3RydWN0IGRybV9jb25uZWN0b3IKPiA+ICpjb25u ZWN0b3IsCj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgobW9kZS0+aGRp c3BsYXkgPT0gMTYwMCkgJiYgKG1vZGUtPnZkaXNwbGF5ID09Cj4gPiA5MDApKQo+ID4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIE1PREVfT0s7 Cj4gPiAKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoKGFzdC0+Y2hpcCA9 PSBBU1QyMTAwKSB8fCAoYXN0LT5jaGlwID09Cj4gPiBBU1QyMjAwKSB8fCAoYXN0LT5jaGlwID09 IEFTVDIzMDApIHx8IChhc3QtPmNoaXAgPT0gQVNUMjQwMCkgfHwKPiA+IChhc3QtPmNoaXAgPT0g QVNUMTE4MCkpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoKGFzdC0+ Y2hpcCA9PSBBU1QyMTAwKSB8fCAoYXN0LT5jaGlwID09Cj4gPiBBU1QyMjAwKSB8fCAoYXN0LT5j aGlwID09IEFTVDIzMDApIHx8IChhc3QtPmNoaXAgPT0gQVNUMjQwMCkgfHwKPiA+IChhc3QtPmNo aXAgPT0gQVNUMjUwMCkgfHwgKGFzdC0+Y2hpcCA9PSBBU1QxMTgwKSkgewo+IAo+IDE3OCBjb2x1 bW5zIGlzIGdldHRpbmcgYSBiaXQgdG9vIG11Y2guCj4gCj4gCj4gPiAtc3RhdGljIGludCBtbWNf dGVzdF9idXJzdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCwgdTMyIGRhdGFnZW4pCj4gPiArc3Rh dGljIGludCBtbWNfdGVzdChzdHJ1Y3QgYXN0X3ByaXZhdGUgKmFzdCwgdTMyIGRhdGFnZW4sIHU4 Cj4gPiB0ZXN0X2N0bCkKPiA+IMKgewo+ID4gwqDCoMKgwqDCoMKgwqDCoHUzMiBkYXRhLCB0aW1l b3V0Owo+ID4gCj4gPiDCoMKgwqDCoMKgwqDCoMKgYXN0X21vdXRkd20oYXN0LCAweDFlNmUwMDcw LCAweDAwMDAwMDAwKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGFzdF9tb3V0ZHdtKGFzdCwgMHgxZTZl MDA3MCwgMHgwMDAwMDBjMSB8IChkYXRhZ2VuIDw8IDMpKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGFz dF9tb3V0ZHdtKGFzdCwgMHgxZTZlMDA3MCwgKGRhdGFnZW4gPDwgMykgfCB0ZXN0X2N0bCk7Cj4g PiDCoMKgwqDCoMKgwqDCoMKgdGltZW91dCA9IDA7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgZG8gewo+ ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkYXRhID0gYXN0X21pbmR3bShhc3Qs IDB4MWU2ZTAwNzApICYgMHgzMDAwOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoZGF0YSAmIDB4MjAwMCkgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB9Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgrK3Rp bWVvdXQgPiBUSU1FT1VUKSB7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBhc3RfbW91dGR3bShhc3QsIDB4MWU2ZTAwNzAsIDB4MDAwMDAwMDApOwo+ ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g MDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIC0xOwo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiDCoMKgwqDC oMKgwqDCoMKgfSB3aGlsZSAoIWRhdGEpOwo+ID4gK8KgwqDCoMKgwqDCoMKgZGF0YSA9IGFzdF9t aW5kd20oYXN0LCAweDFlNmUwMDc4KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGRhdGEgPSAoZGF0YSB8 IChkYXRhID4+IDE2KSkgJiAweGZmZmY7Cj4gPiDCoMKgwqDCoMKgwqDCoMKgYXN0X21vdXRkd20o YXN0LCAweDFlNmUwMDcwLCAweDAwMDAwMDAwKTsKPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiAx Owo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGRhdGE7Cj4gPiDCoH0KPiA+IAo+ID4gLXN0YXRp YyBpbnQgbW1jX3Rlc3RfYnVyc3QyKHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0LCB1MzIgZGF0YWdl bikKPiA+ICsKPiA+ICtzdGF0aWMgaW50IG1tY190ZXN0X2J1cnN0KHN0cnVjdCBhc3RfcHJpdmF0 ZSAqYXN0LCB1MzIgZGF0YWdlbikKPiA+IMKgewo+ID4gLcKgwqDCoMKgwqDCoMKgdTMyIGRhdGEs IHRpbWVvdXQ7Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbW1jX3Rlc3QoYXN0LCBkYXRhZ2Vu LCAweGMxKTsKPiA+ICt9Cj4gPiAKPiA+IC3CoMKgwqDCoMKgwqDCoGFzdF9tb3V0ZHdtKGFzdCwg MHgxZTZlMDA3MCwgMHgwMDAwMDAwMCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBhc3RfbW91dGR3bShh c3QsIDB4MWU2ZTAwNzAsIDB4MDAwMDAwNDEgfCAoZGF0YWdlbiA8PCAzKSk7Cj4gPiAtwqDCoMKg wqDCoMKgwqB0aW1lb3V0ID0gMDsKPiA+IC3CoMKgwqDCoMKgwqDCoGRvIHsKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkYXRhID0gYXN0X21pbmR3bShhc3QsIDB4MWU2ZTAwNzAp ICYgMHgxMDAwOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgrK3RpbWVv dXQgPiBUSU1FT1VUKSB7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGFzdF9tb3V0ZHdtKGFzdCwgMHgxZTZlMDA3MCwgMHgwKTsKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC0xOwo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+IC3CoMKgwqDCoMKgwqDCoH0gd2hpbGUg KCFkYXRhKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGRhdGEgPSBhc3RfbWluZHdtKGFzdCwgMHgxZTZl MDA3OCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBkYXRhID0gKGRhdGEgfCAoZGF0YSA+PiAxNikpICYg MHhmZmZmOwo+ID4gLcKgwqDCoMKgwqDCoMKgYXN0X21vdXRkd20oYXN0LCAweDFlNmUwMDcwLCAw eDApOwo+ID4gLcKgwqDCoMKgwqDCoMKgcmV0dXJuIGRhdGE7Cj4gPiArc3RhdGljIGludCBtbWNf dGVzdF9idXJzdDIoc3RydWN0IGFzdF9wcml2YXRlICphc3QsIHUzMiBkYXRhZ2VuKQo+ID4gK3sK PiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBtbWNfdGVzdChhc3QsIGRhdGFnZW4sIDB4NDEpOwo+ ID4gwqB9Cj4gPiAKPiA+IMKgc3RhdGljIGludCBtbWNfdGVzdF9zaW5nbGUoc3RydWN0IGFzdF9w cml2YXRlICphc3QsIHUzMiBkYXRhZ2VuKQo+ID4gwqB7Cj4gPiAtwqDCoMKgwqDCoMKgwqB1MzIg ZGF0YSwgdGltZW91dDsKPiA+IC0KPiA+IC3CoMKgwqDCoMKgwqDCoGFzdF9tb3V0ZHdtKGFzdCwg MHgxZTZlMDA3MCwgMHgwMDAwMDAwMCk7Cj4gPiAtwqDCoMKgwqDCoMKgwqBhc3RfbW91dGR3bShh c3QsIDB4MWU2ZTAwNzAsIDB4MDAwMDAwYzUgfCAoZGF0YWdlbiA8PCAzKSk7Cj4gPiAtwqDCoMKg wqDCoMKgwqB0aW1lb3V0ID0gMDsKPiA+IC3CoMKgwqDCoMKgwqDCoGRvIHsKPiA+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkYXRhID0gYXN0X21pbmR3bShhc3QsIDB4MWU2ZTAwNzAp ICYgMHgzMDAwOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChkYXRhICYg MHgyMDAwKQo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqByZXR1cm4gMDsKPiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoKyt0aW1l b3V0ID4gVElNRU9VVCkgewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBhc3RfbW91dGR3bShhc3QsIDB4MWU2ZTAwNzAsIDB4MCk7Cj4gPiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gLcKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+IC3CoMKgwqDCoMKgwqDCoH0gd2hpbGUg KCFkYXRhKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGFzdF9tb3V0ZHdtKGFzdCwgMHgxZTZlMDA3MCwg MHgwKTsKPiA+IC3CoMKgwqDCoMKgwqDCoHJldHVybiAxOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0 dXJuIG1tY190ZXN0KGFzdCwgZGF0YWdlbiwgMHhjNSk7Cj4gPiDCoH0KPiA+IAo+ID4gwqBzdGF0 aWMgaW50IG1tY190ZXN0X3NpbmdsZTIoc3RydWN0IGFzdF9wcml2YXRlICphc3QsIHUzMiBkYXRh Z2VuKQo+ID4gwqB7Cj4gPiAtwqDCoMKgwqDCoMKgwqB1MzIgZGF0YSwgdGltZW91dDsKPiA+ICvC oMKgwqDCoMKgwqDCoHJldHVybiBtbWNfdGVzdChhc3QsIGRhdGFnZW4sIDB4MDUpOwo+ID4gK30K PiA+IAo+ID4gLcKgwqDCoMKgwqDCoMKgYXN0X21vdXRkd20oYXN0LCAweDFlNmUwMDcwLCAweDAw MDAwMDAwKTsKPiA+IC3CoMKgwqDCoMKgwqDCoGFzdF9tb3V0ZHdtKGFzdCwgMHgxZTZlMDA3MCwg MHgwMDAwMDAwNSB8IChkYXRhZ2VuIDw8IDMpKTsKPiA+IC3CoMKgwqDCoMKgwqDCoHRpbWVvdXQg PSAwOwo+ID4gLcKgwqDCoMKgwqDCoMKgZG8gewo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRhdGEgPSBhc3RfbWluZHdtKGFzdCwgMHgxZTZlMDA3MCkgJiAweDEwMDA7Cj4gPiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKCsrdGltZW91dCA+IFRJTUVPVVQpIHsK PiA+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYXN0X21v dXRkd20oYXN0LCAweDFlNmUwMDcwLCAweDApOwo+ID4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLTE7Cj4gPiAtwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgfQo+ID4gLcKgwqDCoMKgwqDCoMKgfSB3aGlsZSAoIWRhdGEpOwo+ID4gLcKg wqDCoMKgwqDCoMKgZGF0YSA9IGFzdF9taW5kd20oYXN0LCAweDFlNmUwMDc4KTsKPiA+IC3CoMKg wqDCoMKgwqDCoGRhdGEgPSAoZGF0YSB8IChkYXRhID4+IDE2KSkgJiAweGZmZmY7Cj4gPiAtwqDC oMKgwqDCoMKgwqBhc3RfbW91dGR3bShhc3QsIDB4MWU2ZTAwNzAsIDB4MCk7Cj4gPiAtwqDCoMKg wqDCoMKgwqByZXR1cm4gZGF0YTsKPiA+ICtzdGF0aWMgaW50IG1tY190ZXN0X3NpbmdsZV8yNTAw KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0LCB1MzIKPiA+IGRhdGFnZW4pCj4gPiArewo+ID4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIG1tY190ZXN0KGFzdCwgZGF0YWdlbiwgMHg4NSk7Cj4gPiDCoH0K PiA+IAo+ID4gwqBzdGF0aWMgaW50IGNicl90ZXN0KHN0cnVjdCBhc3RfcHJpdmF0ZSAqYXN0KQo+ ID4gQEAgLTYwMyw5ICs1NzQsOSBAQCBzdGF0aWMgdTMyIGNicl9zY2FuMihzdHJ1Y3QgYXN0X3By aXZhdGUgKmFzdCkKPiA+IAo+ID4gwqBzdGF0aWMgdTMyIGNicl90ZXN0MyhzdHJ1Y3QgYXN0X3By aXZhdGUgKmFzdCkKPiA+IMKgewo+ID4gLcKgwqDCoMKgwqDCoMKgaWYgKCFtbWNfdGVzdF9idXJz dChhc3QsIDApKQo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKG1tY190ZXN0X2J1cnN0KGFzdCwgMCkg PCAwKQo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+IC3C oMKgwqDCoMKgwqDCoGlmICghbW1jX3Rlc3Rfc2luZ2xlKGFzdCwgMCkpCj4gPiArwqDCoMKgwqDC oMKgwqBpZiAobW1jX3Rlc3Rfc2luZ2xlKGFzdCwgMCkgPCAwKQo+IAo+IFRoZSBhYm92ZSBzZWVt cyBsaWtlIGEgX2xvdF8gb2YgdW5yZWxhdGVkIHJld29yay4gS2VlcCB0aGUKPiByZWZhY3Rvcmlu Zwo+IHNlcGFyYXRlID8KPiBOZXcgY29kZSBzZWVtcyB0byBhc3N1bWUgdGhhdCBvbmx5KD8pIC0x IGlzIHJldHVybmVkIG9uIGVycm9yLCB5ZXQgd2UKPiBkbyA8IDAuCj4gVGhpcyB3aWxsIGNvbWUg dG8gYml0ZSB5b3Uvb3RoZXJzIGFzIHRoZSB0ZXN0cyBhcmUgZXh0ZW5kZWQvcmV3b3JrZWQuCj4g Cj4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gwqDCoMKg wqDCoMKgwqDCoHJldHVybiAxOwo+ID4gwqB9Cj4gPiBAQCAtMTYwOSw3ICsxNTgwLDcgQEAgc3Rh dGljIHZvaWQgZGRyMl9pbml0KHN0cnVjdCBhc3RfcHJpdmF0ZQo+ID4gKmFzdCwgc3RydWN0IGFz dDIzMDBfZHJhbV9wYXJhbSAqcGFyYW0pCj4gPiAKPiA+IMKgfQo+ID4gCj4gPiAtc3RhdGljIHZv aWQgYXN0X2luaXRfZHJhbV8yMzAwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gPiArc3RhdGlj IHZvaWQgYXN0X3Bvc3RfY2hpcF8yMzAwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gCj4gVW5y ZWxhdGVkIHJlbmFtZSA/Cj4gCj4gCj4gPiArc3RhdGljIGJvb2wgZGRyX3Rlc3RfMjUwMChzdHJ1 Y3QgYXN0X3ByaXZhdGUgKmFzdCkKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBhc3RfbW91dGR3 bShhc3QsIDB4MUU2RTAwNzQsIDB4MDAwMEZGRkYpOwo+ID4gK8KgwqDCoMKgwqDCoMKgYXN0X21v dXRkd20oYXN0LCAweDFFNkUwMDdDLCAweEZGMDBGRjAwKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChtbWNfdGVzdF9idXJzdChhc3QsIDApIDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAobW1jX3Rlc3RfYnVy c3QoYXN0LCAxKSA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IGZhbHNlOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKG1tY190ZXN0X2J1cnN0KGFzdCwgMikgPCAw KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBmYWxzZTsKPiA+ICvC oMKgwqDCoMKgwqDCoGlmIChtbWNfdGVzdF9idXJzdChhc3QsIDMpIDwgMCkKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gZmFsc2U7Cj4gPiArwqDCoMKgwqDCoMKgwqBp ZiAobW1jX3Rlc3Rfc2luZ2xlXzI1MDAoYXN0LCAwKSA8IDApCj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGZh bHNlOwo+IAo+IEZpbmFsIHJldHVybiBzaG91bGQgYmUgdHJ1ZS4uLiBlaXRoZXIgdGhpbmdzIGdv dCBmdW5ueSB3aXRoIHYyIG9yIHRoZQo+IHRoaXMgcGF0Y2ggd2FzIG5ldmVyIHRlc3RlZCA/Cj4g Cj4gCj4gPiArc3RhdGljIHZvaWQgZGRyX3BoeV9pbml0XzI1MDAoc3RydWN0IGFzdF9wcml2YXRl ICphc3QpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGRhdGEsIHBhc3MsIHRpbWVjbnQ7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBwYXNzID0gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoGFz dF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA2MCwweDAwMDAwMDA1KTsKPiA+ICvCoMKgwqDCoMKgwqDC oHdoaWxlICghcGFzcykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZvcih0 aW1lY250ID0gMDt0aW1lY250IDwgVElNRU9VVDt0aW1lY250KyspIHsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YSA9IGFzdF9taW5kd20oYXN0 LCAweDFFNkUwMDYwKSAmIDB4MTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgaWYgKCFkYXRhKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGlmICh0aW1lY250ICE9IFRJTUVPVVQpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YSA9IGFzdF9taW5kd20oYXN0LCAweDFFNkUwMzAwKSAm Cj4gPiAweDAwMEEwMDAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAoIWRhdGEpCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBwYXNzID0gMTsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg aWYgKCFwYXNzKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA2MCwweDAwMDAwMDAwKTsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdWRlbGF5KDEwKTsgLyog ZGVsYXkgMTAgdXMgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgYXN0X21vdXRkd20oYXN0LCAweDFFNkUwMDYwLDB4MDAwMDAwMDUpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGFzdF9tb3V0ZHdtKGFzdCwgMHgxRTZFMDA2MCwweDAwMDAwMDA2 KTsKPiAKPiBJIHJlYWxpc2UgdGhhdCB0aGVyZSdzIGxpa2VseSBubyBkb2N1bWVudGF0aW9uLCB5 ZXQgcmVwZWF0aW5nIHRoZQo+IHNhbWUKPiBtYWdpYyBudW1iZXJzIG11bHRpcGxlIHRpbWVzIGlz IGEgYml0IG1laC4KPiAKPiAKPiA+ICt9Cj4gPiArCj4gPiArLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gPiAqKioqKioq KioqKioqCj4gPiArIENoZWNrIERSQU0gU2l6ZQo+ID4gKyAxR2IgOiAweDgwMDAwMDAwIH4gMHg4 N0ZGRkZGRgo+ID4gKyAyR2IgOiAweDgwMDAwMDAwIH4gMHg4RkZGRkZGRgo+ID4gKyA0R2IgOiAw eDgwMDAwMDAwIH4gMHg5RkZGRkZGRgo+ID4gKyA4R2IgOiAweDgwMDAwMDAwIH4gMHhCRkZGRkZG Rgo+ID4gKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKgo+ID4gKioqKioqKioqKiovCj4gPiArc3RhdGljIHZvaWQgY2hlY2tf ZHJhbV9zaXplXzI1MDAoc3RydWN0IGFzdF9wcml2YXRlICphc3QsIHUzMgo+ID4gdFJGQykKPiA+ ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIgcmVnXzA0LCByZWdfMTQ7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqByZWdfMDQgPSBhc3RfbWluZHdtKGFzdCwgMHgxRTZFMDAwNCkgJiAweGZmZmZm ZmZjOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmVnXzE0ID0gYXN0X21pbmR3bShhc3QsIDB4MUU2RTAw MTQpICYgMHhmZmZmZmYwMDsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGFzdF9tb3V0ZHdtKGFz dCwgMHhBMDEwMDAwMCwgMHg0MTQyNDM0NCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBhc3RfbW91dGR3 bShhc3QsIDB4OTAxMDAwMDAsIDB4MzUzNjM3MzgpOwo+ID4gK8KgwqDCoMKgwqDCoMKgYXN0X21v dXRkd20oYXN0LCAweDg4MTAwMDAwLCAweDI5MkEyQjJDKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGFz dF9tb3V0ZHdtKGFzdCwgMHg4MDEwMDAwMCwgMHgxRDFFMUYxMCk7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqAvKiBDaGVjayA4R2JpdCAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGFzdF9taW5k d20oYXN0LCAweEEwMTAwMDAwKSA9PSAweDQxNDI0MzQ0KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmVnXzA0IHw9IDB4MDM7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcmVnXzE0IHw9ICh0UkZDID4+IDI0KSAmIDB4RkY7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLyogQ2hlY2sgNEdiaXQgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoH0g ZWxzZSBpZiAoYXN0X21pbmR3bShhc3QsIDB4OTAxMDAwMDApID09IDB4MzUzNjM3MzgpIHsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdfMDQgfD0gMHgwMjsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdfMTQgfD0gKHRSRkMgPj4gMTYpICYgMHhGRjsK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBDaGVjayAyR2JpdCAqLwo+ID4g K8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChhc3RfbWluZHdtKGFzdCwgMHg4ODEwMDAwMCkgPT0g MHgyOTJBMkIyQykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZ18wNCB8 PSAweDAxOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZ18xNCB8PSAodFJG QyA+PiA4KSAmIDB4RkY7Cj4gPiArwqDCoMKgwqDCoMKgwqB9IGVsc2Ugewo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZ18xNCB8PSB0UkZDICYgMHhGRjsKPiA+ICvCoMKgwqDC oMKgwqDCoH0KPiAKPiBMaWtlIGluIHRoZSBjYXNlIGFib3ZlLi4uCj4gCj4gCj4gPiArc3RhdGlj IHZvaWQgcmVzZXRfbW1jXzI1MDAoc3RydWN0IGFzdF9wcml2YXRlICphc3QpCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoMKgYXN0X21vdXRkd20oYXN0LCAweDFFNzg1MDVDLDB4MDAwMDAwMDQpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgYXN0X21vdXRkd20oYXN0LCAweDFFNzg1MDQ0LDB4MDAwMDAwMDEp Owo+ID4gK8KgwqDCoMKgwqDCoMKgYXN0X21vdXRkd20oYXN0LCAweDFFNzg1MDQ4LDB4MDAwMDQ3 NTUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgYXN0X21vdXRkd20oYXN0LCAweDFFNzg1MDRDLDB4MDAw MDAwMTMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgbWRlbGF5KDEwMCk7wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyog ZGVsYXkKPiA+IDEwMG1zICovCj4gCj4gIldhdGVyIGlzIHdldCIgdHlwZSBvZiBjb21tZW50LiBX b3J0aCBtZW50aW9uaW5nIHdoeSBpdCdzIHNvIGxhcmdlIC0KPiBtZW50aW9uZWQgaW4gdGhlIGRv Y3VtZW50YXRpb24sIGV4cGVyaW1lbnRhbCByZXN1bHQsIG90aGVyID8KPiBTYW1lIHN1Z2dlc3Rp b24gZ29lcyBmb3IgdGhlIG90aGVyIG1kZWxheSgxMDApIGluc3RhbmNlcy4KPiAKPiAKPiA+ICtz dGF0aWMgYm9vbCBhc3RfZHJhbV9pbml0XzI1MDAoc3RydWN0IGFzdF9wcml2YXRlICphc3QpCj4g PiArewo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGRhdGE7Cj4gPiArwqDCoMKgwqDCoMKgwqB1MzIg bWF4X3RyaWVzID0gNTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGRvIHsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAobWF4X3RyaWVzLS0gPT0gMCkKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGZhbHNlOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNldF9tcGxsXzI1MDAoYXN0KTsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXNldF9tbWNfMjUwMChhc3QpOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRkcl9pbml0X2NvbW1vbl8yNTAwKGFzdCk7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGF0YSA9IGFzdF9taW5kd20o YXN0LCAweDFFNkUyMDcwKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAo ZGF0YSAmIDB4MDEwMDAwMDApCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRkcjRfaW5pdF8yNTAwKGFzdCwKPiA+IGFzdDI1MDBfZGRyNF8xNjAwX3Rp bWluZ190YWJsZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZHIzX2luaXRf MjUwMChhc3QsCj4gPiBhc3QyNTAwX2RkcjNfMTYwMF90aW1pbmdfdGFibGUpOwo+ID4gK8KgwqDC oMKgwqDCoMKgfSB3aGlsZSAoIWRkcl90ZXN0XzI1MDAoYXN0KSk7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqBhc3RfbW91dGR3bShhc3QsIDB4MUU2RTIwNDAsIGFzdF9taW5kd20oYXN0LCAweDFF NkUyMDQwKSB8Cj4gPiAweDQxKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoC8qIFBhdGNoIGNv ZGUgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoGRhdGEgPSBhc3RfbWluZHdtKGFzdCwgMHgxRTZFMjAw QykgJiAweEY5RkZGRkZGOwo+ID4gK8KgwqDCoMKgwqDCoMKgYXN0X21vdXRkd20oYXN0LCAweDFF NkUyMDBDLCBkYXRhIHwgMHgxMDAwMDAwMCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gdHJ1ZTsKPiAKPiBEcm9wIHRoZSByZXR1cm4gdHlwZSAtIGZ1bmN0aW9uIGFsd2F5cyByZXR1 cm5zIHRydWUgPwo+IEkgdGhpbmsgdGhlcmUgd2VyZSBhIGZldyBvdGhlciBmdW5jdGlvbnMgdGhh dCBjb3VsZCBkbyB0aGUgc2FtZS4KPiAKPiBSZWdhcmRzLAo+IEVtaWwKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==