From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 12732EB64D7 for ; Fri, 30 Jun 2023 12:21:36 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9C1F710E0EF; Fri, 30 Jun 2023 12:21:36 +0000 (UTC) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTPS id D3AE710E0EF for ; Fri, 30 Jun 2023 12:21:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1688127693; x=1719663693; h=message-id:subject:from:to:date:in-reply-to:references: content-transfer-encoding:mime-version; bh=DBBX/YHlweEHvHtgaHQrXCRsPQkYNr5FDpWyRwtIfPw=; b=njos4eu8NqfNqQYlthfA42asMDTMZ2ytlyKbLMZrltO3XxGtPBjzROGn 3zwkXNe9q8bGpVdGiyGibv+hfR+EFp2twfOzGq2CoIQckBd8HxvEXypEx 5Zy1GjeVe0+5IsOo8RHyRhtMefogW/rlR1CKf8wpOfa0bQyXDTxYLAu3W /ATnHBHp//sSJLVKr9JMlRB+4Kb+UOEpIKRs9twV5Qbrt327F2hsmGqB7 cFSOnKQmkwbe+mU3L18V1rejRO6ohAzzbjFH9pBEBqbaJn1gc4xZw/R2C eWZxs+grQkdNKhzPTcSA4v12rtnwUauQQEmj6jAGRIB2vRESCNz6+t5CT Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10756"; a="362422603" X-IronPort-AV: E=Sophos;i="6.01,170,1684825200"; d="scan'208";a="362422603" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jun 2023 05:21:32 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10756"; a="783064007" X-IronPort-AV: E=Sophos;i="6.01,170,1684825200"; d="scan'208";a="783064007" Received: from hlykke-mobl.ger.corp.intel.com (HELO [10.249.254.25]) ([10.249.254.25]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jun 2023 05:21:31 -0700 Message-ID: <863bebd0c624d6fc2b38c0a06b63e468b4185128.camel@linux.intel.com> From: Thomas =?ISO-8859-1?Q?Hellstr=F6m?= To: intel-xe@lists.freedesktop.org Date: Fri, 30 Jun 2023 14:21:29 +0200 In-Reply-To: <20230630100059.122881-1-thomas.hellstrom@linux.intel.com> References: <20230630100059.122881-1-thomas.hellstrom@linux.intel.com> Organization: Intel Sweden AB, Registration Number: 556189-6027 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.46.4 (3.46.4-1.fc37) MIME-Version: 1.0 Subject: Re: [Intel-xe] [PATCH DONTMERGE] drm/xe: uapi review submission X-BeenThere: intel-xe@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel Xe graphics driver List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-xe-bounces@lists.freedesktop.org Sender: "Intel-xe" UmV2aWV3IGNvbW1lbnRzIG9uIG91ciB1QVBJIGJlbG93LgoKL1Rob21hcwoKCk9uIEZyaSwgMjAy My0wNi0zMCBhdCAxMjowMCArMDIwMCwgVGhvbWFzIEhlbGxzdHLDtm0gd3JvdGU6Cj4gQWRkIGEg Y29weSBvZiB4ZV9kcm0uaCBmb3IgdUFQSSByZXZpZXcgcHVycG9zZXMgb25seS4gTmV2ZXIgY29t bWl0Cj4gdGhpcywKPiB0aGUgaW50ZW50aW9uIGlzIHRvIHBlcmZvcm0gYW4gdUFQSSByZXZpZXcg aW4gdGhpcyB0aHJlYWQgYW5kIGlmCj4gbmVlZGVkCj4gbW92ZSBpdCB0byBHaXRsYWIgZm9yIGVh c2llciBkaXNjdXNzaW9uLgo+IAo+IFNpZ25lZC1vZmYtYnk6IFRob21hcyBIZWxsc3Ryw7ZtIDx0 aG9tYXMuaGVsbHN0cm9tQGxpbnV4LmludGVsLmNvbT4KPiAtLS0KPiDCoGluY2x1ZGUvdWFwaS9k cm0veGVfZHJtX3Jldmlld29ubHkuaCB8IDEwMDkKPiArKysrKysrKysrKysrKysrKysrKysrKysr Kwo+IMKgMSBmaWxlIGNoYW5nZWQsIDEwMDkgaW5zZXJ0aW9ucygrKQo+IMKgY3JlYXRlIG1vZGUg MTAwNjQ0IGluY2x1ZGUvdWFwaS9kcm0veGVfZHJtX3Jldmlld29ubHkuaAo+IAo+IGRpZmYgLS1n aXQgYS9pbmNsdWRlL3VhcGkvZHJtL3hlX2RybV9yZXZpZXdvbmx5LmgKPiBiL2luY2x1ZGUvdWFw aS9kcm0veGVfZHJtX3Jldmlld29ubHkuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXgg MDAwMDAwMDAwMDAwLi5lODkwYjEzMWFmOTEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVk ZS91YXBpL2RybS94ZV9kcm1fcmV2aWV3b25seS5oCj4gQEAgLTAsMCArMSwxMDA5IEBACj4gKy8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgKi8KPiArLyoKPiArICogQ29weXJpZ2h0IMKp IDIwMjMgSW50ZWwgQ29ycG9yYXRpb24KPiArICovCj4gKwo+ICsjaWZuZGVmIF9VQVBJX1hFX0RS TV9IXwo+ICsjZGVmaW5lIF9VQVBJX1hFX0RSTV9IXwo+ICsKPiArI2luY2x1ZGUgImRybS5oIgo+ ICsKPiArI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCj4gK2V4dGVybiAiQyIgewo+ICsjZW5kaWYK PiArCj4gKy8qIFBsZWFzZSBub3RlIHRoYXQgbW9kaWZpY2F0aW9ucyB0byBhbGwgc3RydWN0cyBk ZWZpbmVkIGhlcmUgYXJlCj4gKyAqIHN1YmplY3QgdG8gYmFja3dhcmRzLWNvbXBhdGliaWxpdHkg Y29uc3RyYWludHMuCj4gKyAqLwo+ICsKPiArLyoqCj4gKyAqIHN0cnVjdCB4ZV91c2VyX2V4dGVu c2lvbiAtIEJhc2UgY2xhc3MgZm9yIGRlZmluaW5nIGEgY2hhaW4gb2YKPiBleHRlbnNpb25zCj4g KyAqCj4gKyAqIE1hbnkgaW50ZXJmYWNlcyBuZWVkIHRvIGdyb3cgb3ZlciB0aW1lLiBJbiBtb3N0 IGNhc2VzIHdlIGNhbgo+IHNpbXBseQo+ICsgKiBleHRlbmQgdGhlIHN0cnVjdCBhbmQgaGF2ZSB1 c2Vyc3BhY2UgcGFzcyBpbiBtb3JlIGRhdGEuIEFub3RoZXIKPiBvcHRpb24sCj4gKyAqIGFzIGRl bW9uc3RyYXRlZCBieSBWdWxrYW4ncyBhcHByb2FjaCB0byBwcm92aWRpbmcgZXh0ZW5zaW9ucyBm b3IKPiBmb3J3YXJkCj4gKyAqIGFuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBpcyB0byB1c2Ug YSBsaXN0IG9mIG9wdGlvbmFsIHN0cnVjdHMKPiB0bwo+ICsgKiBwcm92aWRlIHRob3NlIGV4dHJh IGRldGFpbHMuCj4gKyAqCj4gKyAqIFRoZSBrZXkgYWR2YW50YWdlIHRvIHVzaW5nIGFuIGV4dGVu c2lvbiBjaGFpbiBpcyB0aGF0IGl0IGFsbG93cwo+IHVzIHRvCj4gKyAqIHJlZGVmaW5lIHRoZSBp bnRlcmZhY2UgbW9yZSBlYXNpbHkgdGhhbiBhbiBldmVyIGdyb3dpbmcgc3RydWN0IG9mCj4gKyAq IGluY3JlYXNpbmcgY29tcGxleGl0eSwgYW5kIGZvciBsYXJnZSBwYXJ0cyBvZiB0aGF0IGludGVy ZmFjZSB0bwo+IGJlCj4gKyAqIGVudGlyZWx5IG9wdGlvbmFsLiBUaGUgZG93bnNpZGUgaXMgbW9y ZSBwb2ludGVyIGNoYXNpbmc7IGNoYXNpbmcKPiBhY3Jvc3MKPiArICogdGhlIF9fdXNlciBib3Vu ZGFyeSB3aXRoIHBvaW50ZXJzIGVuY2Fwc3VsYXRlZCBpbnNpZGUgdTY0Lgo+ICsgKgo+ICsgKiBF eGFtcGxlIGNoYWluaW5nOgo+ICsgKgo+ICsgKiAuLiBjb2RlLWJsb2NrOjogQwo+ICsgKgo+ICsg KsKgwqDCoMKgwqBzdHJ1Y3QgeGVfdXNlcl9leHRlbnNpb24gZXh0MyB7Cj4gKyAqwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAubmV4dF9leHRlbnNpb24gPSAwLCAvLyBlbmQKPiArICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1lID0gLi4uLAo+ICsgKsKgwqDCoMKgwqB9Owo+ICsgKsKg wqDCoMKgwqBzdHJ1Y3QgeGVfdXNlcl9leHRlbnNpb24gZXh0MiB7Cj4gKyAqwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAubmV4dF9leHRlbnNpb24gPSAodWludHB0cl90KSZleHQzLAo+ICsgKsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm5hbWUgPSAuLi4sCj4gKyAqwqDCoMKgwqDCoH07Cj4g KyAqwqDCoMKgwqDCoHN0cnVjdCB4ZV91c2VyX2V4dGVuc2lvbiBleHQxIHsKPiArICrCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoC5uZXh0X2V4dGVuc2lvbiA9ICh1aW50cHRyX3QpJmV4dDIsCj4g KyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAubmFtZSA9IC4uLiwKPiArICrCoMKgwqDCoMKg fTsKPiArICoKPiArICogVHlwaWNhbGx5IHRoZSBzdHJ1Y3QgeGVfdXNlcl9leHRlbnNpb24gd291 bGQgYmUgZW1iZWRkZWQgaW4gc29tZQo+IHVBUEkKPiArICogc3RydWN0LCBhbmQgaW4gdGhpcyBj YXNlIHdlIHdvdWxkIGZlZWQgaXQgdGhlIGhlYWQgb2YgdGhlCj4gY2hhaW4oaS5lIGV4dDEpLAo+ ICsgKiB3aGljaCB3b3VsZCB0aGVuIGFwcGx5IGFsbCBvZiB0aGUgYWJvdmUgZXh0ZW5zaW9ucy4K PiArICoKPiArICovCj4gK3N0cnVjdCB4ZV91c2VyX2V4dGVuc2lvbiB7Cj4gK8KgwqDCoMKgwqDC oMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQG5leHRfZXh0ZW5zaW9uOgo+ICvCoMKgwqDCoMKg wqDCoCAqCj4gK8KgwqDCoMKgwqDCoMKgICogUG9pbnRlciB0byB0aGUgbmV4dCBzdHJ1Y3QgeGVf dXNlcl9leHRlbnNpb24sIG9yIHplcm8gaWYKPiB0aGUgZW5kLgo+ICvCoMKgwqDCoMKgwqDCoCAq Lwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IG5leHRfZXh0ZW5zaW9uOwo+ICsKPiArwqDCoMKgwqDC oMKgwqAvKioKPiArwqDCoMKgwqDCoMKgwqAgKiBAbmFtZTogTmFtZSBvZiB0aGUgZXh0ZW5zaW9u Lgo+ICvCoMKgwqDCoMKgwqDCoCAqCj4gK8KgwqDCoMKgwqDCoMKgICogTm90ZSB0aGF0IHRoZSBu YW1lIGhlcmUgaXMganVzdCBzb21lIGludGVnZXIuCj4gK8KgwqDCoMKgwqDCoMKgICoKPiArwqDC oMKgwqDCoMKgwqAgKiBBbHNvIG5vdGUgdGhhdCB0aGUgbmFtZSBzcGFjZSBmb3IgdGhpcyBpcyBu b3QgZ2xvYmFsIGZvcgo+IHRoZSB3aG9sZQo+ICvCoMKgwqDCoMKgwqDCoCAqIGRyaXZlciwgYnV0 IHJhdGhlciBpdHMgc2NvcGUvbWVhbmluZyBpcyBsaW1pdGVkIHRvIHRoZQo+IHNwZWNpZmljIHBp ZWNlCj4gK8KgwqDCoMKgwqDCoMKgICogb2YgdUFQSSB3aGljaCBoYXMgZW1iZWRkZWQgdGhlIHN0 cnVjdCB4ZV91c2VyX2V4dGVuc2lvbi4KPiArwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDC oMKgwqBfX3UzMiBuYW1lOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKioKPiArwqDCoMKgwqDCoMKg wqAgKiBAcGFkOiBNQloKPiArwqDCoMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEFs bCB1bmRlZmluZWQgYml0cyBtdXN0IGJlIHplcm8uCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8Kg wqDCoMKgwqDCoMKgX191MzIgcGFkOwo+ICt9Owo+ICsKPiArLyoKPiArICogeGUgc3BlY2lmaWMg aW9jdGxzLgo+ICsgKgo+ICsgKiBUaGUgZGV2aWNlIHNwZWNpZmljIGlvY3RsIHJhbmdlIGlzIFtE Uk1fQ09NTUFORF9CQVNFLAo+IERSTV9DT01NQU5EX0VORCkgaWUKPiArICogWzB4NDAsIDB4YTAp IChhMCBpcyBleGNsdWRlZCkuIFRoZSBudW1iZXJzIGJlbG93IGFyZSBkZWZpbmVkIGFzCj4gb2Zm c2V0Cj4gKyAqIGFnYWluc3QgRFJNX0NPTU1BTkRfQkFTRSBhbmQgc2hvdWxkIGJlIGJldHdlZW4g WzB4MCwgMHg2MCkuCj4gKyAqLwo+ICsjZGVmaW5lIERSTV9YRV9ERVZJQ0VfUVVFUlnCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAweDAwCj4gKyNkZWZpbmUgRFJNX1hFX0dFTV9DUkVBVEXCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwMQo+ICsjZGVmaW5lIERSTV9YRV9HRU1fTU1BUF9PRkZT RVTCoMKgwqDCoMKgwqDCoMKgwqAweDAyCj4gKyNkZWZpbmUgRFJNX1hFX1ZNX0NSRUFURcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDMKPiArI2RlZmluZSBEUk1fWEVfVk1fREVTVFJP WcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDA0Cj4gKyNkZWZpbmUgRFJNX1hFX1ZNX0JJ TkTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgwNQo+ICsjZGVmaW5lIERSTV9Y RV9FTkdJTkVfQ1JFQVRFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDYKPiArI2RlZmluZSBEUk1f WEVfRU5HSU5FX0RFU1RST1nCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDcKPiArI2RlZmluZSBEUk1f WEVfRVhFQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDA4Cj4gKyNk ZWZpbmUgRFJNX1hFX01NSU/CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MHgwOQo+ICsjZGVmaW5lIERSTV9YRV9FTkdJTkVfU0VUX1BST1BFUlRZwqDCoMKgwqDCoDB4MGEK PiArI2RlZmluZSBEUk1fWEVfV0FJVF9VU0VSX0ZFTkNFwqDCoMKgwqDCoMKgwqDCoMKgMHgwYgo+ ICsjZGVmaW5lIERSTV9YRV9WTV9NQURWSVNFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4 MGMKPiArI2RlZmluZSBEUk1fWEVfRU5HSU5FX0dFVF9QUk9QRVJUWcKgwqDCoMKgwqAweDBkCj4g Kwo+ICsvKiBNdXN0IGJlIGtlcHQgY29tcGFjdCAtLSBubyBob2xlcyAqLwo+ICsjZGVmaW5lCj4g RFJNX0lPQ1RMX1hFX0RFVklDRV9RVUVSWcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1f SU9XUihEUk1fQ09NTUFORF9CQVNFICsKPiBEUk1fWEVfREVWSUNFX1FVRVJZLCBzdHJ1Y3QgZHJt X3hlX2RldmljZV9xdWVyeSkKPiArI2RlZmluZQo+IERSTV9JT0NUTF9YRV9HRU1fQ1JFQVRFwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0lPV1IoRFJN X0NPTU1BTkRfQgo+IEFTRSArIERSTV9YRV9HRU1fQ1JFQVRFLCBzdHJ1Y3QgZHJtX3hlX2dlbV9j cmVhdGUpCj4gKyNkZWZpbmUKPiBEUk1fSU9DVExfWEVfR0VNX01NQVBfT0ZGU0VUwqDCoMKgwqDC oMKgwqDCoMKgwqDCoERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKwo+IERSTV9YRV9HRU1fTU1B UF9PRkZTRVQsIHN0cnVjdCBkcm1feGVfZ2VtX21tYXBfb2Zmc2V0KQo+ICsjZGVmaW5lCj4gRFJN X0lPQ1RMX1hFX1ZNX0NSRUFURcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1f SU9XUihEUk1fQ09NTUFORF9CQVNFICsKPiBEUk1fWEVfVk1fQ1JFQVRFLCBzdHJ1Y3QgZHJtX3hl X3ZtX2NyZWF0ZSkKPiArI2RlZmluZSBEUk1fSU9DVExfWEVfVk1fREVTVFJPWcKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IERSTV9JT1coRFJNX0NPTU1B TkRfQkFTRSArIERSTV9YRV9WTV9ERVNUUk9ZLCBzdHJ1Y3QKPiBkcm1feGVfdm1fZGVzdHJveSkK PiArI2RlZmluZSBEUk1fSU9DVExfWEVfVk1fQklORMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgCj4gRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX1hFX1ZNX0JJTkQs IHN0cnVjdCBkcm1feGVfdm1fYmluZCkKPiArI2RlZmluZQo+IERSTV9JT0NUTF9YRV9FTkdJTkVf Q1JFQVRFwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNF ICsKPiBEUk1fWEVfRU5HSU5FX0NSRUFURSwgc3RydWN0IGRybV94ZV9lbmdpbmVfY3JlYXRlKQo+ ICsjZGVmaW5lCj4gRFJNX0lPQ1RMX1hFX0VOR0lORV9HRVRfUFJPUEVSVFnCoMKgwqDCoMKgwqDC oERSTV9JT1dSKERSTV9DT01NQU5EX0JBU0UgKwo+IERSTV9YRV9FTkdJTkVfR0VUX1BST1BFUlRZ LCBzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9nZXRfcHJvcGVydHkpCj4gKyNkZWZpbmUgRFJNX0lPQ1RM X1hFX0VOR0lORV9ERVNUUk9ZwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgCj4gRFJNX0lPVyhEUk1f Q09NTUFORF9CQVNFICsgRFJNX1hFX0VOR0lORV9ERVNUUk9ZLCBzdHJ1Y3QKPiBkcm1feGVfZW5n aW5lX2Rlc3Ryb3kpCj4gKyNkZWZpbmUgRFJNX0lPQ1RMX1hFX0VYRUPCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IERSTV9JT1coRFJNX0NPTU1BTkRfQkFTRSAr IERSTV9YRV9FWEVDLCBzdHJ1Y3QgZHJtX3hlX2V4ZWMpCj4gKyNkZWZpbmUKPiBEUk1fSU9DVExf WEVfTU1JT8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRFJNX0lP V1IoRFJNX0NPTU1BTkRfQkFTRSArCj4gRFJNX1hFX01NSU8sIHN0cnVjdCBkcm1feGVfbW1pbykK PiArI2RlZmluZSBEUk1fSU9DVExfWEVfRU5HSU5FX1NFVF9QUk9QRVJUWcKgwqDCoMKgwqDCoMKg Cj4gRFJNX0lPVyhEUk1fQ09NTUFORF9CQVNFICsgRFJNX1hFX0VOR0lORV9TRVRfUFJPUEVSVFks IHN0cnVjdAo+IGRybV94ZV9lbmdpbmVfc2V0X3Byb3BlcnR5KQo+ICsjZGVmaW5lCj4gRFJNX0lP Q1RMX1hFX1dBSVRfVVNFUl9GRU5DRcKgwqDCoMKgwqDCoMKgwqDCoMKgwqBEUk1fSU9XUihEUk1f Q09NTUFORF9CQVNFICsKPiBEUk1fWEVfV0FJVF9VU0VSX0ZFTkNFLCBzdHJ1Y3QgZHJtX3hlX3dh aXRfdXNlcl9mZW5jZSkKPiArI2RlZmluZSBEUk1fSU9DVExfWEVfVk1fTUFEVklTRcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoAo+IERSTV9JT1coRFJNX0NP TU1BTkRfQkFTRSArIERSTV9YRV9WTV9NQURWSVNFLCBzdHJ1Y3QKPiBkcm1feGVfdm1fbWFkdmlz ZSkKPiArCj4gKy8qKgo+ICsgKiBlbnVtIGRybV94ZV9tZW1vcnlfY2xhc3MgLSBTdXBwb3J0ZWQg bWVtb3J5IGNsYXNzZXMuCj4gKyAqLwo+ICtlbnVtIGRybV94ZV9tZW1vcnlfY2xhc3Mgewo+ICvC oMKgwqDCoMKgwqDCoC8qKiBAWEVfTUVNX1JFR0lPTl9DTEFTU19TWVNNRU06IFJlcHJlc2VudHMg c3lzdGVtIG1lbW9yeS4gKi8KPiArwqDCoMKgwqDCoMKgwqBYRV9NRU1fUkVHSU9OX0NMQVNTX1NZ U01FTSA9IDAsCj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQFhFX01F TV9SRUdJT05fQ0xBU1NfVlJBTTogT24gZGlzY3JldGUgcGxhdGZvcm1zLCB0aGlzCj4gK8KgwqDC oMKgwqDCoMKgICogcmVwcmVzZW50cyB0aGUgbWVtb3J5IHRoYXQgaXMgbG9jYWwgdG8gdGhlIGRl dmljZSwgd2hpY2gKPiB3ZQo+ICvCoMKgwqDCoMKgwqDCoCAqIGNhbGwgVlJBTS4gTm90IHZhbGlk IG9uIGludGVncmF0ZWQgcGxhdGZvcm1zLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDC oMKgwqDCoFhFX01FTV9SRUdJT05fQ0xBU1NfVlJBTQo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0 cnVjdCBkcm1feGVfcXVlcnlfbWVtX3JlZ2lvbiAtIERlc2NyaWJlcyBzb21lIHJlZ2lvbiBhcyBr bm93bgo+IHRvCj4gKyAqIHRoZSBkcml2ZXIuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX3hlX3F1ZXJ5 X21lbV9yZWdpb24gewo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEBt ZW1fY2xhc3M6IFRoZSBtZW1vcnkgY2xhc3MgZGVzY3JpYmluZyB0aGlzIHJlZ2lvbi4KPiArwqDC oMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFNlZSBlbnVtIGRybV94ZV9tZW1vcnlf Y2xhc3MgZm9yIHN1cHBvcnRlZCB2YWx1ZXMuCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDC oMKgwqDCoMKgX191MTYgbWVtX2NsYXNzOwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDC oMKgwqDCoCAqIEBpbnN0YW5jZTogVGhlIGluc3RhbmNlIGZvciB0aGlzIHJlZ2lvbi4KPiArwqDC oMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFRoZSBAbWVtX2NsYXNzIGFuZCBAaW5z dGFuY2UgdGFrZW4gdG9nZXRoZXIgd2lsbCBhbHdheXMKPiBnaXZlCj4gK8KgwqDCoMKgwqDCoMKg ICogYSB1bmlxdWUgcGFpci4KPiArwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBf X3UxNiBpbnN0YW5jZTsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHBhZDogTUJaICovCj4gK8KgwqDC oMKgwqDCoMKgX191MzIgcGFkOwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDC oCAqIEBtaW5fcGFnZV9zaXplOiBNaW4gcGFnZS1zaXplIGluIGJ5dGVzIGZvciB0aGlzIHJlZ2lv bi4KPiArwqDCoMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFdoZW4gdGhlIGtlcm5l bCBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGlzIHJlZ2lvbiwgdGhlCj4gK8KgwqDCoMKgwqDCoMKg ICogdW5kZXJseWluZyBwYWdlcyB3aWxsIGJlIGF0IGxlYXN0IEBtaW5fcGFnZV9zaXplIGluIHNp emUuCj4gK8KgwqDCoMKgwqDCoMKgICoKPiArwqDCoMKgwqDCoMKgwqAgKiBJbXBvcnRhbnQgbm90 ZTogV2hlbiB1c2Vyc3BhY2UgYWxsb2NhdGVzIGEgR1RUIGFkZHJlc3MKPiB3aGljaAo+ICvCoMKg wqDCoMKgwqDCoCAqIGNhbiBwb2ludCB0byBtZW1vcnkgYWxsb2NhdGVkIGZyb20gdGhpcyByZWdp b24sIGl0IG11c3QKPiBhbHNvCj4gK8KgwqDCoMKgwqDCoMKgICogcmVzcGVjdCB0aGlzIG1pbmlt dW0gYWxpZ25tZW50LiBUaGlzIGlzIGVuZm9yY2VkIGJ5IHRoZQo+ICvCoMKgwqDCoMKgwqDCoCAq IGtlcm5lbC4KPiArwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBtaW5f cGFnZV9zaXplOwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEBtYXhf cGFnZV9zaXplOiBNYXggcGFnZS1zaXplIGluIGJ5dGVzIGZvciB0aGlzIHJlZ2lvbi4KPiArwqDC oMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBtYXhfcGFnZV9zaXplOwoKV2hh dCdzIHRoZSBpbnRlbmRlZCB1c2FnZSBmb3IgdGhpcyBmaWVsZD8gV2hhdCBleGFjdGx5IGRvZXMK bWF4X3BhZ2Vfc2l6ZSBtZWFuIGFuZCBob3cgaXMgVU1EIGV4cGVjdGVkIHRvIHVzZSBpdD8gSXMg aXQgdGhlIG1heApzaXplIG9mIGEgR1RUIHBhZ2UtdGFibGUgZW50cnk/Cgo+ICvCoMKgwqDCoMKg wqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEB0b3RhbF9zaXplOiBUaGUgdXNhYmxlIHNpemUg aW4gYnl0ZXMgZm9yIHRoaXMgcmVnaW9uLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDC oMKgwqDCoF9fdTY0IHRvdGFsX3NpemU7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKg wqDCoMKgICogQHVzZWQ6IEVzdGltYXRlIG9mIHRoZSBtZW1vcnkgdXNlZCBpbiBieXRlcyBmb3Ig dGhpcwo+IHJlZ2lvbi4KPiArwqDCoMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFJl cXVpcmVzIENBUF9QRVJGTU9OIG9yIENBUF9TWVNfQURNSU4gdG8gZ2V0IHJlbGlhYmxlCj4gK8Kg wqDCoMKgwqDCoMKgICogYWNjb3VudGluZy7CoCBXaXRob3V0IHRoaXMgdGhlIHZhbHVlIGhlcmUg d2lsbCBhbHdheXMgZXF1YWwKPiArwqDCoMKgwqDCoMKgwqAgKiB6ZXJvLgo+ICvCoMKgwqDCoMKg wqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IHVzZWQ7Cj4gK8KgwqDCoMKgwqDCoMKgLyoq IEByZXNlcnZlZDogTUJaICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgcmVzZXJ2ZWRbOF07Cj4g K307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGRybV94ZV9xdWVyeV9tZW1fdXNhZ2UgLSBkZXNj cmliZSBtZW1vcnkgcmVnaW9ucyBhbmQgdXNhZ2UKPiArICoKPiArICogSWYgYSBxdWVyeSBpcyBt YWRlIHdpdGggYSBzdHJ1Y3QgZHJtX3hlX2RldmljZV9xdWVyeSB3aGVyZSAucXVlcnkKPiArICog aXMgZXF1YWwgdG8gRFJNX1hFX0RFVklDRV9RVUVSWV9NRU1fVVNBR0UsIHRoZW4gdGhlIHJlcGx5 IHVzZXMKPiArICogc3RydWN0IGRybV94ZV9xdWVyeV9tZW1fdXNhZ2UgaW4gLmRhdGEuCj4gKyAq Lwo+ICtzdHJ1Y3QgZHJtX3hlX3F1ZXJ5X21lbV91c2FnZSB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoq IEBudW1fcmVnaW9uczogbnVtYmVyIG9mIG1lbW9yeSByZWdpb25zIHJldHVybmVkIGluCj4gQHJl Z2lvbnMgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBudW1fcmVnaW9uczsKPiArwqDCoMKgwqDC oMKgwqAvKiogQHBhZDogTUJaICovCj4gK8KgwqDCoMKgwqDCoMKgX191MzIgcGFkOwo+ICvCoMKg wqDCoMKgwqDCoC8qKiBAcmVnaW9uczogVGhlIHJldHVybmVkIHJlZ2lvbnMgZm9yIHRoaXMgZGV2 aWNlICovCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV94ZV9xdWVyeV9tZW1fcmVnaW9uIHJl Z2lvbnNbXTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHJtX3hlX3F1ZXJ5X2NvbmZp ZyAtIGRlc2NyaWJlIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbgo+ICsgKgo+ICsgKiBJZiBhIHF1 ZXJ5IGlzIG1hZGUgd2l0aCBhIHN0cnVjdCBkcm1feGVfZGV2aWNlX3F1ZXJ5IHdoZXJlIC5xdWVy eQo+ICsgKiBpcyBlcXVhbCB0byBEUk1fWEVfREVWSUNFX1FVRVJZX0NPTkZJRywgdGhlbiB0aGUg cmVwbHkgdXNlcwo+ICsgKiBzdHJ1Y3QgZHJtX3hlX3F1ZXJ5X2NvbmZpZyBpbiAuZGF0YS4KPiAr ICovCj4gK3N0cnVjdCBkcm1feGVfcXVlcnlfY29uZmlnIHsKPiArwqDCoMKgwqDCoMKgwqAvKiog QG51bV9wYXJhbXM6IG51bWJlciBvZiBwYXJhbWV0ZXJzIHJldHVybmVkIGluIGluZm8gKi8KPiAr wqDCoMKgwqDCoMKgwqBfX3UzMiBudW1fcGFyYW1zOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiog QHBhZDogTUJaICovCj4gK8KgwqDCoMKgwqDCoMKgX191MzIgcGFkOwo+ICsKPiArI2RlZmluZSBY RV9RVUVSWV9DT05GSUdfUkVWX0FORF9ERVZJQ0VfSUTCoMKgwqDCoMKgwqAwCj4gKyNkZWZpbmUg WEVfUVVFUllfQ09ORklHX0ZMQUdTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg MQo+ICvCoMKgwqDCoMKgwqDCoCNkZWZpbmUgWEVfUVVFUllfQ09ORklHX0ZMQUdTX0hBU19WUkFN wqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgxIDw8IDApCj4gK8KgwqDCoMKgwqDCoMKgI2RlZmluZSBY RV9RVUVSWV9DT05GSUdfRkxBR1NfVVNFX0dVQ8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgxIDw8 IDEpCj4gKyNkZWZpbmUgWEVfUVVFUllfQ09ORklHX01JTl9BTElHTkVNRU5UwqDCoMKgwqDCoMKg wqDCoMKgMgpzL0FMSUdORU1FTlQvQUxJR05NRU5ULwo+ICsjZGVmaW5lIFhFX1FVRVJZX0NPTkZJ R19WQV9CSVRTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Mwo+ICsjZGVmaW5lIFhFX1FVRVJZX0NPTkZJR19HVF9DT1VOVMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoDQKR2VuZXJhbDogU2hvdWxkIHdlIHJlcGxhY2UgR1Qgd2l0aCB0aWxlIG5vdywg YW5kIGF2b2lkIEdUIHNwZWNpZmljIGRhdGEKaW4gdGhlIElPQ1RMIGludGVyZmFjZSAoYnV0IGtl ZXAgaXQgaW4gdGhlIHN5c2ZzIGludGVyZmFjZSk/Cj4gKyNkZWZpbmUgWEVfUVVFUllfQ09ORklH X01FTV9SRUdJT05fQ09VTlTCoMKgwqDCoMKgwqDCoDUKPiArI2RlZmluZSBYRV9RVUVSWV9DT05G SUdfTUFYX0VOR0lORV9QUklPUklUWcKgwqDCoMKgNgo+ICsjZGVmaW5lCj4gWEVfUVVFUllfQ09O RklHX05VTV9QQVJBTcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoWEVfUVVFUllfQ09ORklH X01BWF9FTkdJTkVfUFIKPiBJT1JJVFkgKyAxKQoKV2Ugc2hvdWxkIGRvY3VtZW50IGFsbCB0aGUg YWJvdmUgYmV0dGVyLgoKPiArwqDCoMKgwqDCoMKgwqAvKiogQGluZm86IGFycmF5IG9mIGVsZW1l bnRzIGNvbnRhaW5pbmcgdGhlIGNvbmZpZyBpbmZvICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQg aW5mb1tdOwoKSG93IGlzIGluZm8gbGFpZCBvdXQ/IElzIGl0IGtleS12YWx1ZSBwYWlycz8gRG9j dW1lbnQuCj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGRybV94ZV9xdWVyeV9ndHMgLSBk ZXNjcmliZSBHVHMKPiArICoKPiArICogSWYgYSBxdWVyeSBpcyBtYWRlIHdpdGggYSBzdHJ1Y3Qg ZHJtX3hlX2RldmljZV9xdWVyeSB3aGVyZSAucXVlcnkKPiArICogaXMgZXF1YWwgdG8gRFJNX1hF X0RFVklDRV9RVUVSWV9HVFMsIHRoZW4gdGhlIHJlcGx5IHVzZXMgc3RydWN0Cj4gKyAqIGRybV94 ZV9xdWVyeV9ndHMgaW4gLmRhdGEuCj4gKyAqLwpTZWUgYWJvdmUgb24gdGlsZXMgdnMgZ3RzLgoK PiArc3RydWN0IGRybV94ZV9xdWVyeV9ndHMgewo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAbnVtX2d0 OiBudW1iZXIgb2YgR1RzIHJldHVybmVkIGluIGd0cyAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMy IG51bV9ndDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBwYWQ6IE1CWiAqLwo+ICvCoMKgwqDC oMKgwqDCoF9fdTMyIHBhZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDC oMKgICogQGd0czogVGhlIEdUcyByZXR1cm5lZCBmb3IgdGhpcyBkZXZpY2UKPiArwqDCoMKgwqDC oMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFRPRE86IGNvbnZlcnQgZHJtX3hlX3F1ZXJ5X2d0 IHRvIHByb3BlciBrZXJuZWwtZG9jLgo+ICvCoMKgwqDCoMKgwqDCoCAqIFRPRE86IFBlcmhhcHMg aW5mbyBhYm91dCBldmVyeSBtZW0gcmVnaW9uIHJlbGF0aXZlIHRvIHRoaXMKPiBHVD8gZS5nLgo+ ICvCoMKgwqDCoMKgwqDCoCAqIGJhbmR3aWR0aCBiZXR3ZWVuIHRoaXMgR1QgYW5kIHJlbW90ZSBy ZWdpb24/Cj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGRybV94 ZV9xdWVyeV9ndCB7Cj4gKyNkZWZpbmUgWEVfUVVFUllfR1RfVFlQRV9NQUlOwqDCoMKgwqDCoMKg wqDCoMKgwqAwCj4gKyNkZWZpbmUgWEVfUVVFUllfR1RfVFlQRV9SRU1PVEXCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoDEKPiArI2RlZmluZSBYRV9RVUVSWV9HVF9UWVBFX01FRElBwqDC oMKgwqDCoMKgwqDCoMKgMgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3UxNiB0 eXBlOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3UxNiBpbnN0YW5jZTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX191MzIgY2xvY2tfZnJlcTsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX191NjQgZmVhdHVyZXM7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoF9fdTY0IG5hdGl2ZV9tZW1fcmVnaW9uczvCoMKgwqDCoMKgwqDCoC8q IGJpdCBtYXNrIG9mCj4gaW5zdGFuY2VzIGZyb20gZHJtX3hlX3F1ZXJ5X21lbV91c2FnZSAqLwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3U2NCBzbG93X21lbV9yZWdpb25zO8Kg wqDCoMKgwqDCoMKgwqDCoC8qIGJpdCBtYXNrIG9mCj4gaW5zdGFuY2VzIGZyb20gZHJtX3hlX3F1 ZXJ5X21lbV91c2FnZSAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3U2NCBp bmFjY2Vzc2libGVfbWVtX3JlZ2lvbnM7wqAvKiBiaXQgbWFzayBvZgo+IGluc3RhbmNlcyBmcm9t IGRybV94ZV9xdWVyeV9tZW1fdXNhZ2UgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgX191NjQgcmVzZXJ2ZWRbOF07Cj4gK8KgwqDCoMKgwqDCoMKgfSBndHNbXTsKPiArfTsKPiAr Cj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHJtX3hlX3F1ZXJ5X3RvcG9sb2d5X21hc2sgLSBkZXNjcmli ZSB0aGUgdG9wb2xvZ3kgbWFzayBvZgo+IGEgR1QKPiArICoKPiArICogVGhpcyBpcyB0aGUgaGFy ZHdhcmUgdG9wb2xvZ3kgd2hpY2ggcmVmbGVjdHMgdGhlIGludGVybmFsCj4gcGh5c2ljYWwKPiAr ICogc3RydWN0dXJlIG9mIHRoZSBHUFUuCj4gKyAqCj4gKyAqIElmIGEgcXVlcnkgaXMgbWFkZSB3 aXRoIGEgc3RydWN0IGRybV94ZV9kZXZpY2VfcXVlcnkgd2hlcmUgLnF1ZXJ5Cj4gKyAqIGlzIGVx dWFsIHRvIERSTV9YRV9ERVZJQ0VfUVVFUllfR1RfVE9QT0xPR1ksIHRoZW4gdGhlIHJlcGx5IHVz ZXMKPiArICogc3RydWN0IGRybV94ZV9xdWVyeV90b3BvbG9neV9tYXNrIGluIC5kYXRhLgo+ICsg Ki8KCkFnYWluLCB0aWxlIHZzIEdULgo+ICtzdHJ1Y3QgZHJtX3hlX3F1ZXJ5X3RvcG9sb2d5X21h c2sgewo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAZ3RfaWQ6IEdUIElEIHRoZSBtYXNrIGlzIGFzc29j aWF0ZWQgd2l0aCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTE2IGd0X2lkOwo+ICsKPiArwqDCoMKg wqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFRvIHF1ZXJ5IHRoZSBtYXNrIG9mIER1YWwg U3ViIFNsaWNlcyAoRFNTKSBhdmFpbGFibGUgZm9yCj4gZ2VvbWV0cnkKPiArwqDCoMKgwqDCoMKg wqAgKiBvcGVyYXRpb25zLiBGb3IgZXhhbXBsZSBhIHF1ZXJ5IHJlc3BvbnNlIGNvbnRhaW5pbmcg dGhlCj4gZm9sbG93aW5nCj4gK8KgwqDCoMKgwqDCoMKgICogaW4gbWFzazoKPiArwqDCoMKgwqDC oMKgwqAgKsKgwqAgRFNTX0dFT01FVFJZwqDCoMKgIGZmIGZmIGZmIGZmIDAwIDAwIDAwIDAwCj4g K8KgwqDCoMKgwqDCoMKgICogbWVhbnMgMzIgRFNTIGFyZSBhdmFpbGFibGUgZm9yIGdlb21ldHJ5 Lgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICsjZGVmaW5lIFhFX1RPUE9fRFNTX0dFT01FVFJZwqDC oMKgKDEgPDwgMCkKPiArwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFRvIHF1 ZXJ5IHRoZSBtYXNrIG9mIER1YWwgU3ViIFNsaWNlcyAoRFNTKSBhdmFpbGFibGUgZm9yCj4gY29t cHV0ZQo+ICvCoMKgwqDCoMKgwqDCoCAqIG9wZXJhdGlvbnMuIEZvciBleGFtcGxlIGEgcXVlcnkg cmVzcG9uc2UgY29udGFpbmluZyB0aGUKPiBmb2xsb3dpbmcKPiArwqDCoMKgwqDCoMKgwqAgKiBp biBtYXNrOgo+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoCBEU1NfQ09NUFVURcKgwqDCoCBmZiBmZiBm ZiBmZiAwMCAwMCAwMCAwMAo+ICvCoMKgwqDCoMKgwqDCoCAqIG1lYW5zIDMyIERTUyBhcmUgYXZh aWxhYmxlIGZvciBjb21wdXRlLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICsjZGVmaW5lIFhFX1RP UE9fRFNTX0NPTVBVVEXCoMKgwqDCoCgxIDw8IDEpCj4gK8KgwqDCoMKgwqDCoMKgLyoKPiArwqDC oMKgwqDCoMKgwqAgKiBUbyBxdWVyeSB0aGUgbWFzayBvZiBFeGVjdXRpb24gVW5pdHMgKEVVKSBh dmFpbGFibGUgcGVyCj4gRHVhbCBTdWIKPiArwqDCoMKgwqDCoMKgwqAgKiBTbGljZXMgKERTUyku IEZvciBleGFtcGxlIGEgcXVlcnkgcmVzcG9uc2UgY29udGFpbmluZyB0aGUKPiBmb2xsb3dpbmcK PiArwqDCoMKgwqDCoMKgwqAgKiBpbiBtYXNrOgo+ICvCoMKgwqDCoMKgwqDCoCAqwqDCoCBFVV9Q RVJfRFNTwqDCoMKgIGZmIGZmIDAwIDAwIDAwIDAwIDAwIDAwCj4gK8KgwqDCoMKgwqDCoMKgICog bWVhbnMgZWFjaCBEU1MgaGFzIDE2IEVVLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICsjZGVmaW5l IFhFX1RPUE9fRVVfUEVSX0RTU8KgwqDCoMKgwqAoMSA8PCAyKQo+ICvCoMKgwqDCoMKgwqDCoC8q KiBAdHlwZTogdHlwZSBvZiBtYXNrICovCj4gK8KgwqDCoMKgwqDCoMKgX191MTYgdHlwZTsKPiAr Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBudW1fYnl0ZXM6IG51bWJlciBvZiBieXRlcyBpbiByZXF1 ZXN0ZWQgbWFzayAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIG51bV9ieXRlczsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgLyoqIEBtYXNrOiBsaXR0bGUtZW5kaWFuIG1hc2sgb2YgQG51bV9ieXRlcyAq Lwo+ICvCoMKgwqDCoMKgwqDCoF9fdTggbWFza1tdOwo+ICt9Owo+ICsKPiArLyoqCj4gKyAqIHN0 cnVjdCBkcm1feGVfZGV2aWNlX3F1ZXJ5IC0gbWFpbiBzdHJ1Y3R1cmUgdG8gcXVlcnkgZGV2aWNl Cj4gaW5mb3JtYXRpb24KPiArICoKPiArICogSWYgc2l6ZSBpcyBzZXQgdG8gMCwgdGhlIGRyaXZl ciBmaWxscyBpdCB3aXRoIHRoZSByZXF1aXJlZCBzaXplCj4gZm9yIHRoZQo+ICsgKiByZXF1ZXN0 ZWQgdHlwZSBvZiBkYXRhIHRvIHF1ZXJ5LiBJZiBzaXplIGlzIGVxdWFsIHRvIHRoZSByZXF1aXJl ZAo+IHNpemUsCj4gKyAqIHRoZSBxdWVyaWVkIGluZm9ybWF0aW9uIGlzIGNvcGllZCBpbnRvIGRh dGEuCj4gKyAqCj4gKyAqIEZvciBleGFtcGxlIHRoZSBmb2xsb3dpbmcgY29kZSBzbmlwcGV0IGFs bG93cyByZXRyaWV2aW5nIGFuZAo+IHByaW50aW5nCj4gKyAqIGluZm9ybWF0aW9uIGFib3V0IHRo ZSBkZXZpY2UgZW5naW5lcyB3aXRoCj4gRFJNX1hFX0RFVklDRV9RVUVSWV9FTkdJTkVTOgoKV2hh dCBoYXBwZW5zIGlmIHVzZXItc3BhY2UgdXNlcyBhIHRvbyBzbWFsbCB2YWx1ZSBvZiAuc2l6ZT8K Cj4gKyAqCj4gKyAqIC4uIGNvZGUtYmxvY2s6OiBDCj4gKyAqCj4gKyAqwqDCoMKgwqDCoHN0cnVj dCBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpod2U7Cj4gKyAqwqDCoMKgwqDCoHN0cnVj dCBkcm1feGVfZGV2aWNlX3F1ZXJ5IHF1ZXJ5ID0gewo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgLmV4dGVuc2lvbnMgPSAwLAo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLnF1 ZXJ5ID0gRFJNX1hFX0RFVklDRV9RVUVSWV9FTkdJTkVTLAo+ICsgKsKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLnNpemUgPSAwLAo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLmRhdGEg PSAwLAo+ICsgKsKgwqDCoMKgwqB9Owo+ICsgKsKgwqDCoMKgwqBpb2N0bChmZCwgRFJNX0lPQ1RM X1hFX0RFVklDRV9RVUVSWSwgJnF1ZXJ5KTsKPiArICrCoMKgwqDCoMKgaHdlID0gbWFsbG9jKHF1 ZXJ5LnNpemUpOwo+ICsgKsKgwqDCoMKgwqBxdWVyeS5kYXRhID0gKHVpbnRwdHJfdClod2U7Cj4g KyAqwqDCoMKgwqDCoGlvY3RsKGZkLCBEUk1fSU9DVExfWEVfREVWSUNFX1FVRVJZLCAmcXVlcnkp Owo+ICsgKsKgwqDCoMKgwqBpbnQgbnVtX2VuZ2luZXMgPSBxdWVyeS5zaXplIC8gc2l6ZW9mKCpo d2UpOwo+ICsgKsKgwqDCoMKgwqBmb3IgKGludCBpID0gMDsgaSA8IG51bV9lbmdpbmVzOyBpKysp IHsKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHByaW50ZigiRW5naW5lICVkOiAlc1xu IiwgaSwKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBod2Vb aV0uZW5naW5lX2NsYXNzID09Cj4gRFJNX1hFX0VOR0lORV9DTEFTU19SRU5ERVIgPyAiUkVOREVS IjoKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBod2VbaV0u ZW5naW5lX2NsYXNzID09Cj4gRFJNX1hFX0VOR0lORV9DTEFTU19DT1BZID8gIkNPUFkiOgo+ICsg KsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGh3ZVtpXS5lbmdpbmVf Y2xhc3MgPT0KPiBEUk1fWEVfRU5HSU5FX0NMQVNTX1ZJREVPX0RFQ09ERSA/ICJWSURFT19ERUNP REUiOgo+ICsgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGh3ZVtp XS5lbmdpbmVfY2xhc3MgPT0KPiBEUk1fWEVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0UgPyAi VklERU9fRU5IQU5DRSI6Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaHdlW2ldLmVuZ2luZV9jbGFzcyA9PQo+IERSTV9YRV9FTkdJTkVfQ0xBU1NfQ09NUFVU RSA/ICJDT01QVVRFIjoKPiArICrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAiVU5LTk9XTiIpOwo+ICsgKsKgwqDCoMKgwqB9Cj4gKyAqwqDCoMKgwqDCoGZyZWUoaHdl KTsKPiArICovCj4gK3N0cnVjdCBkcm1feGVfZGV2aWNlX3F1ZXJ5IHsKPiArwqDCoMKgwqDCoMKg wqAvKiogQGV4dGVuc2lvbnM6IFBvaW50ZXIgdG8gdGhlIGZpcnN0IGV4dGVuc2lvbiBzdHJ1Y3Qs IGlmCj4gYW55ICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgZXh0ZW5zaW9uczsKPiArCj4gKyNk ZWZpbmUgRFJNX1hFX0RFVklDRV9RVUVSWV9FTkdJTkVTwqDCoMKgwqAwCj4gKyNkZWZpbmUgRFJN X1hFX0RFVklDRV9RVUVSWV9NRU1fVVNBR0XCoMKgMQo+ICsjZGVmaW5lIERSTV9YRV9ERVZJQ0Vf UVVFUllfQ09ORklHwqDCoMKgwqDCoDIKPiArI2RlZmluZSBEUk1fWEVfREVWSUNFX1FVRVJZX0dU U8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMwo+ICsjZGVmaW5lIERSTV9YRV9ERVZJ Q0VfUVVFUllfSFdDT05GSUfCoMKgwqA0Cj4gKyNkZWZpbmUgRFJNX1hFX0RFVklDRV9RVUVSWV9H VF9UT1BPTE9HWcKgwqDCoMKgwqDCoMKgwqA1Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBxdWVyeTog VGhlIHR5cGUgb2YgZGF0YSB0byBxdWVyeSAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHF1ZXJ5 Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHNpemU6IFNpemUgb2YgdGhlIHF1ZXJpZWQgZGF0 YSAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHNpemU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8q KiBAZGF0YTogUXVlcmllZCBkYXRhIGlzIHBsYWNlZCBoZXJlICovCj4gK8KgwqDCoMKgwqDCoMKg X191NjQgZGF0YTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQg Ki8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCByZXNlcnZlZFsyXTsKPiArfTsKPiArCj4gK3N0cnVj dCBkcm1feGVfZ2VtX2NyZWF0ZSB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBleHRlbnNpb25zOiBQ b2ludGVyIHRvIHRoZSBmaXJzdCBleHRlbnNpb24gc3RydWN0LCBpZgo+IGFueSAqLwo+ICvCoMKg wqDCoMKgwqDCoF9fdTY0IGV4dGVuc2lvbnM7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvC oMKgwqDCoMKgwqDCoCAqIEBzaXplOiBSZXF1ZXN0ZWQgc2l6ZSBmb3IgdGhlIG9iamVjdAo+ICvC oMKgwqDCoMKgwqDCoCAqCj4gK8KgwqDCoMKgwqDCoMKgICogVGhlIChwYWdlLWFsaWduZWQpIGFs bG9jYXRlZCBzaXplIGZvciB0aGUgb2JqZWN0IHdpbGwgYmUKPiByZXR1cm5lZC4KPiArwqDCoMKg wqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCBzaXplOwo+ICsKPiArI2RlZmluZSBY RV9HRU1fQ1JFQVRFX0ZMQUdfREVGRVJfQkFDS0lOR8KgwqDCoMKgwqDCoMKgKDB4MSA8PCAyNCkK PiArI2RlZmluZSBYRV9HRU1fQ1JFQVRFX0ZMQUdfU0NBTk9VVMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgKDB4MSA8PCAyNSkKCkNhbiB3ZSB1c2UgYSBkZWZpbmUgZm9yIHRoZSBtYWdpYyBzaGlm dCBvZiAyNCwgZXhwbGFpbmluZyB3aHkgaXQgaXMKdXNlZCAoMjQgYml0cyByZXNlcnZlZCkKCj4g K8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQGZsYWdzOiBGbGFncywgY3Vy cmVudGx5IGEgbWFzayBvZiBtZW1vcnkgaW5zdGFuY2VzIG9mCj4gd2hlcmUgQk8gY2FuCj4gK8Kg wqDCoMKgwqDCoMKgICogYmUgcGxhY2VkCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKg wqDCoMKgX191MzIgZmxhZ3M7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKg wqDCoCAqIEB2bV9pZDogQXR0YWNoZWQgVk0sIGlmIGFueQo+ICvCoMKgwqDCoMKgwqDCoCAqCj4g K8KgwqDCoMKgwqDCoMKgICogSWYgYSBWTSBpcyBzcGVjaWZpZWQsIHRoaXMgQk8gbXVzdDoKPiAr wqDCoMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDCoCAqwqAgMS4gT25seSBldmVyIGJlIGJv dW5kIHRvIHRoYXQgVk0uCj4gK8KgwqDCoMKgwqDCoMKgICoKPiArwqDCoMKgwqDCoMKgwqAgKsKg IDIuIENhbm5vdCBiZSBleHBvcnRlZCBhcyBhIFBSSU1FIGZkLgo+ICvCoMKgwqDCoMKgwqDCoCAq LwpSZW1vdmUgbmV3bGluZXMgaW4gaXRlbSBsaXN0PwoKPiArwqDCoMKgwqDCoMKgwqBfX3UzMiB2 bV9pZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQGhhbmRs ZTogUmV0dXJuZWQgaGFuZGxlIGZvciB0aGUgb2JqZWN0Lgo+ICvCoMKgwqDCoMKgwqDCoCAqCj4g K8KgwqDCoMKgwqDCoMKgICogT2JqZWN0IGhhbmRsZXMgYXJlIG5vbnplcm8uCj4gK8KgwqDCoMKg wqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgX191MzIgaGFuZGxlOwo+ICsKPiArwqDCoMKgwqDC oMKgwqAvKiogQHBhZDogTUJaICovCj4gK8KgwqDCoMKgwqDCoMKgX191MzIgcGFkOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqAvKiogQHJlc2VydmVkOiBSZXNlcnZlZCAqLwo+ICvCoMKgwqDCoMKgwqDC oF9fdTY0IHJlc2VydmVkWzJdOwo+ICt9Owo+ICsKPiArc3RydWN0IGRybV94ZV9nZW1fbW1hcF9v ZmZzZXQgewoKV2l0aCBUVE0gdGhlIG1tYXAgb2Zmc2V0IGlzIGtub3duIGF0IGJvIGNyZWF0aW9u IHRpbWUsIHNvIGNvdWxkIGJlCnJldHVybmVkIGZyb20gZ2VtIGNyZWF0ZSwgYnV0IHRoYXQgcmVz dHJpY3RzIGZ1dHVyZSBpbXBsZW1lbnRhdGlvbnMuClBlcmhhcHMgd29ydGgga2VlcGluZyB0aGUg bW1hcCBvZmZzZXQgSU9DVEwuCgo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAZXh0ZW5zaW9uczogUG9p bnRlciB0byB0aGUgZmlyc3QgZXh0ZW5zaW9uIHN0cnVjdCwgaWYKPiBhbnkgKi8KPiArwqDCoMKg wqDCoMKgwqBfX3U2NCBleHRlbnNpb25zOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQGhhbmRs ZTogSGFuZGxlIGZvciB0aGUgb2JqZWN0IGJlaW5nIG1hcHBlZC4gKi8KPiArwqDCoMKgwqDCoMKg wqBfX3UzMiBoYW5kbGU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAZmxhZ3M6IE11c3QgYmUg emVybyAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIGZsYWdzOwo+ICsKPiArwqDCoMKgwqDCoMKg wqAvKiogQG9mZnNldDogVGhlIGZha2Ugb2Zmc2V0IHRvIHVzZSBmb3Igc3Vic2VxdWVudCBtbWFw IGNhbGwKPiAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IG9mZnNldDsKPiArCj4gK8KgwqDCoMKg wqDCoMKgLyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCBy ZXNlcnZlZFsyXTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHJtX3hlX3ZtX2JpbmRf b3BfZXJyb3JfY2FwdHVyZSAtIGZvcm1hdCBvZiBWTSBiaW5kIG9wCj4gZXJyb3IgY2FwdHVyZQo+ ICsgKi8KUmV2aXNpdCBhZnRlciB0aGUgcmVtb3ZhbCBvZiB0aGUgVk1fQklORCBhc3luYyB3b3Jr ZXIgLyBWTV9CSU5ECnJlZmFjdG9yaW5nPwo+ICtzdHJ1Y3QgZHJtX3hlX3ZtX2JpbmRfb3BfZXJy b3JfY2FwdHVyZSB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBlcnJvcjogZXJybm8gdGhhdCBvY2N1 cmVkICovCj4gK8KgwqDCoMKgwqDCoMKgX19zMzIgZXJyb3I7Cj4gKwo+ICvCoMKgwqDCoMKgwqDC oC8qKiBAb3A6IG9wZXJhdGlvbiB0aGF0IGVuY291bnRlciBhbiBlcnJvciAqLwo+ICvCoMKgwqDC oMKgwqDCoF9fdTMyIG9wOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQGFkZHI6IGFkZHJlc3Mg b2YgYmluZCBvcCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IGFkZHI7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoC8qKiBAc2l6ZTogc2l6ZSBvZiBiaW5kICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQg c2l6ZTsKPiArfTsKPiArCj4gKy8qKiBzdHJ1Y3QgZHJtX3hlX2V4dF92bV9zZXRfcHJvcGVydHkg LSBWTSBzZXQgcHJvcGVydHkgZXh0ZW5zaW9uICovCgpSZXZpc2l0IGFmdGVyIHRoZSByZW1vdmFs IG9mIHRoZSBWTV9CSU5EIGFzeW5jIHdvcmtlciAvIFZNX0JJTkQKcmVmYWN0b3Jpbmc/Cj4gK3N0 cnVjdCBkcm1feGVfZXh0X3ZtX3NldF9wcm9wZXJ0eSB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBi YXNlOiBiYXNlIHVzZXIgZXh0ZW5zaW9uICovCj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHhlX3Vz ZXJfZXh0ZW5zaW9uIGJhc2U7Cj4gKwo+ICsjZGVmaW5lIFhFX1ZNX1BST1BFUlRZX0JJTkRfT1Bf RVJST1JfQ0FQVFVSRV9BRERSRVNTwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDAKPiArwqDCoMKgwqDC oMKgwqAvKiogQHByb3BlcnR5OiBwcm9wZXJ0eSB0byBzZXQgKi8KPiArwqDCoMKgwqDCoMKgwqBf X3UzMiBwcm9wZXJ0eTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBwYWQ6IE1CWiAqLwo+ICvC oMKgwqDCoMKgwqDCoF9fdTMyIHBhZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEB2YWx1ZTog cHJvcGVydHkgdmFsdWUgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCB2YWx1ZTsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgLyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgKi8KPiArwqDCoMKgwqDCoMKgwqBf X3U2NCByZXNlcnZlZFsyXTsKPiArfTsKPiArCj4gK3N0cnVjdCBkcm1feGVfdm1fY3JlYXRlIHsK PiArI2RlZmluZSBYRV9WTV9FWFRFTlNJT05fU0VUX1BST1BFUlRZwqDCoMKgMAo+ICvCoMKgwqDC oMKgwqDCoC8qKiBAZXh0ZW5zaW9uczogUG9pbnRlciB0byB0aGUgZmlyc3QgZXh0ZW5zaW9uIHN0 cnVjdCwgaWYKPiBhbnkgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCBleHRlbnNpb25zOwo+ICsK PiArI2RlZmluZSBEUk1fWEVfVk1fQ1JFQVRFX1NDUkFUQ0hfUEFHRcKgwqAoMHgxIDw8IDApCj4g KyNkZWZpbmUgRFJNX1hFX1ZNX0NSRUFURV9DT01QVVRFX01PREXCoMKgKDB4MSA8PCAxKQoKV2Ug c2hvdWxkIHRoaW5rIGEgYml0IGFib3V0IHRoaXMuIEknZCBsaWtlIHRvIHNlZSBzL0NPTVBVVEUv TFIvIGhlcmUsCmFuZCB0aGVuIHRoZSBLTUQgY2FuIGNob29zZSBiZXR3ZWVuIHByZWVtcHQtZmVu Y2UgbW9kZSBvciBmYXVsdCBtb2RlCndoaWNoIGFyZSB0aGUgdHdvIHdheXMgdG8gaW1wbGVtZW50 IExSLiBBIGNsaWVudCB3YW50aW5nIHRvIGZvcmNlIEZBVUxUCm1vZGUgY2FuIGRvIHRoYXQgd2l0 aCBfQ1JFQVRFX0ZPUkNFX0ZBVUxUX01PREUKCj4gKyNkZWZpbmUgRFJNX1hFX1ZNX0NSRUFURV9B U1lOQ19CSU5EX09QU8KgwqDCoMKgwqDCoMKgwqAoMHgxIDw8IDIpCj4gKyNkZWZpbmUgRFJNX1hF X1ZNX0NSRUFURV9GQVVMVF9NT0RFwqDCoMKgwqAoMHgxIDw8IDMpCj4gK8KgwqDCoMKgwqDCoMKg LyoqIEBmbGFnczogRmxhZ3MgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBmbGFnczsKPiArCj4g K8KgwqDCoMKgwqDCoMKgLyoqIEB2bV9pZDogUmV0dXJuZWQgVk0gSUQgKi8KPiArwqDCoMKgwqDC oMKgwqBfX3UzMiB2bV9pZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEByZXNlcnZlZDogUmVz ZXJ2ZWQgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCByZXNlcnZlZFsyXTsKPiArfTsKPiArCj4g K3N0cnVjdCBkcm1feGVfdm1fZGVzdHJveSB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEB2bV9pZDog Vk0gSUQgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiB2bV9pZDsKPiArCj4gK8KgwqDCoMKgwqDC oMKgLyoqIEBwYWQ6IE1CWiAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHBhZDsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgLyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgKi8KPiArwqDCoMKgwqDCoMKgwqBf X3U2NCByZXNlcnZlZFsyXTsKPiArfTsKPiArCj4gK3N0cnVjdCBkcm1feGVfdm1fYmluZF9vcCB7 Cj4gK8KgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQG9iajogR0VNIG9iamVj dCB0byBvcGVyYXRlIG9uLCBNQlogZm9yIE1BUF9VU0VSUFRSLCBNQloKPiBmb3IgVU5NQVAKPiAr wqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBvYmo7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoC8qKiBAcGFkOiBNQlogKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBwYWQ7Cj4g Kwo+ICvCoMKgwqDCoMKgwqDCoHVuaW9uIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBvYmpfb2Zmc2V0OiBP ZmZzZXQgaW50byB0aGUgb2JqZWN0LCBNQlogZm9yCj4gQ0xFQVJfUkFOR0UsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIGlnbm9yZWQgZm9yIHVuYmluZAo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg X191NjQgb2JqX29mZnNldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8q KiBAdXNlcnB0cjogdXNlciBwb2ludGVyIHRvIGJpbmQgb24gKi8KPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgX191NjQgdXNlcnB0cjsKPiArwqDCoMKgwqDCoMKgwqB9Owo+ICsKPiAr wqDCoMKgwqDCoMKgwqAvKioKPiArwqDCoMKgwqDCoMKgwqAgKiBAcmFuZ2U6IE51bWJlciBvZiBi eXRlcyBmcm9tIHRoZSBvYmplY3QgdG8gYmluZCB0byBhZGRyLAo+IE1CWiBmb3IgVU5NQVBfQUxM Cj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgcmFuZ2U7Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoC8qKiBAYWRkcjogQWRkcmVzcyB0byBvcGVyYXRlIG9uLCBNQlogZm9y IFVOTUFQX0FMTCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IGFkZHI7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEB0aWxlX21hc2s6IE1hc2sgZm9yIHdoaWNo IHRpbGVzIHRvIGNyZWF0ZSBiaW5kcyBmb3IsIDAgPT0KPiBBbGwgdGlsZXMsCj4gK8KgwqDCoMKg wqDCoMKgICogb25seSBhcHBsaWVzIHRvIGNyZWF0aW5nIG5ldyBWTUFzCj4gK8KgwqDCoMKgwqDC oMKgICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgdGlsZV9tYXNrOwo+ICsKPiArI2RlZmluZSBY RV9WTV9CSU5EX09QX01BUMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAKPiArI2RlZmlu ZSBYRV9WTV9CSU5EX09QX1VOTUFQwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgxCj4gKyNkZWZp bmUgWEVfVk1fQklORF9PUF9NQVBfVVNFUlBUUsKgwqDCoMKgwqDCoDB4Mgo+ICsjZGVmaW5lIFhF X1ZNX0JJTkRfT1BfUkVTVEFSVMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgzCj4gKyNkZWZpbmUgWEVf Vk1fQklORF9PUF9VTk1BUF9BTEzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4NAo+ ICsjZGVmaW5lIFhFX1ZNX0JJTkRfT1BfUFJFRkVUQ0jCoMKgwqDCoMKgwqDCoMKgwqAweDUKPiAr Cj4gKyNkZWZpbmUgWEVfVk1fQklORF9GTEFHX1JFQURPTkxZwqDCoMKgwqDCoMKgwqAoMHgxIDw8 IDE2KQoKCj4gK8KgwqDCoMKgwqDCoMKgLyoKPiArwqDCoMKgwqDCoMKgwqAgKiBBIGJpbmQgb3Bz IGNvbXBsZXRpb25zIGFyZSBhbHdheXMgYXN5bmMsIGhlbmNlIHRoZSBzdXBwb3J0Cj4gZm9yIG91 dAo+ICvCoMKgwqDCoMKgwqDCoCAqIHN5bmMuIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhlIGFsbG9j YXRpb24gb2YgdGhlIG1lbW9yeSBmb3IKPiBuZXcgcGFnZQo+ICvCoMKgwqDCoMKgwqDCoCAqIHRh YmxlcyBhbmQgdGhlIGpvYiB0byBwcm9ncmFtIHRoZSBwYWdlcyB0YWJsZXMgaXMKPiBhc3luY2hy b25vdXMKPiArwqDCoMKgwqDCoMKgwqAgKiByZWxhdGl2ZSB0byB0aGUgSU9DVEwuIFRoYXQgcGFy dCBvZiBhIGJpbmQgb3BlcmF0aW9uIGNhbgo+IGZhaWwgdW5kZXIKPiArwqDCoMKgwqDCoMKgwqAg KiBtZW1vcnkgcHJlc3N1cmUsIHRoZSBqb2IgaW4gcHJhY3RpY2UgY2FuJ3QgZmFpbCB1bmxlc3Mg dGhlCj4gc3lzdGVtIGlzCj4gK8KgwqDCoMKgwqDCoMKgICogdG90YWxseSBzaG90Lgo+ICvCoMKg wqDCoMKgwqDCoCAqCj4gK8KgwqDCoMKgwqDCoMKgICogSWYgdGhpcyBmbGFnIGlzIGNsZWFyIGFu ZCB0aGUgSU9DVEwgZG9lc24ndCByZXR1cm4gYW4KPiBlcnJvciwgaW4KPiArwqDCoMKgwqDCoMKg wqAgKiBwcmFjdGljZSB0aGUgYmluZCBvcCBpcyBnb29kIGFuZCB3aWxsIGNvbXBsZXRlLgo+ICvC oMKgwqDCoMKgwqDCoCAqCj4gK8KgwqDCoMKgwqDCoMKgICogSWYgdGhpcyBmbGFnIGlzIHNldCBh bmQgZG9lc24ndCByZXR1cm4gYW4gZXJyb3IsIHRoZSBiaW5kCj4gb3AgY2FuCj4gK8KgwqDCoMKg wqDCoMKgICogc3RpbGwgZmFpbCBhbmQgcmVjb3ZlcnkgaXMgbmVlZGVkLiBJZiBjb25maWd1cmVk LCB0aGUgYmluZAo+IG9wIHRoYXQKPiArwqDCoMKgwqDCoMKgwqAgKiBjYXVzZWQgdGhlIGVycm9y IHdpbGwgYmUgY2FwdHVyZWQgaW4KPiBkcm1feGVfdm1fYmluZF9vcF9lcnJvcl9jYXB0dXJlLgo+ ICvCoMKgwqDCoMKgwqDCoCAqIE9uY2UgdGhlIHVzZXIgc2VlcyB0aGUgZXJyb3IgKHZpYSBhIHVm ZW5jZSArCj4gK8KgwqDCoMKgwqDCoMKgICogWEVfVk1fUFJPUEVSVFlfQklORF9PUF9FUlJPUl9D QVBUVVJFX0FERFJFU1MpLCBpdCBzaG91bGQKPiBmcmVlIG1lbW9yeQo+ICvCoMKgwqDCoMKgwqDC oCAqIHZpYSBub24tYXN5bmMgdW5iaW5kcywgYW5kIHRoZW4gcmVzdGFydCBhbGwgcXVldWUnZCBh c3luYwo+IGJpbmRzIG9wIHZpYQo+ICvCoMKgwqDCoMKgwqDCoCAqIFhFX1ZNX0JJTkRfT1BfUkVT VEFSVC4gT3IgYWx0ZXJuYXRpdmVseSB0aGUgdXNlciBzaG91bGQKPiBkZXN0cm95IHRoZQo+ICvC oMKgwqDCoMKgwqDCoCAqIFZNLgo+ICvCoMKgwqDCoMKgwqDCoCAqCj4gK8KgwqDCoMKgwqDCoMKg ICogVGhpcyBmbGFnIGlzIG9ubHkgYWxsb3dlZCB3aGVuCj4gRFJNX1hFX1ZNX0NSRUFURV9BU1lO Q19CSU5EX09QUyBpcwo+ICvCoMKgwqDCoMKgwqDCoCAqIGNvbmZpZ3VyZWQgaW4gdGhlIFZNIGFu ZCBtdXN0IGJlIHNldCBpZiB0aGUgVk0gaXMKPiBjb25maWd1cmVkIHdpdGgKPiArwqDCoMKgwqDC oMKgwqAgKiBEUk1fWEVfVk1fQ1JFQVRFX0FTWU5DX0JJTkRfT1BTIGFuZCBub3QgaW4gYW4gZXJy b3Igc3RhdGUuCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gKyNkZWZpbmUgWEVfVk1fQklORF9GTEFH X0FTWU5DwqDCoMKgwqDCoMKgwqDCoMKgwqAoMHgxIDw8IDE3KQo+ICvCoMKgwqDCoMKgwqDCoC8q Cj4gK8KgwqDCoMKgwqDCoMKgICogVmFsaWQgb24gYSBmYXVsdGluZyBWTSBvbmx5LCBkbyB0aGUg TUFQIG9wZXJhdGlvbgo+IGltbWVkaWF0ZWx5IHJhdGhlcgo+ICvCoMKgwqDCoMKgwqDCoCAqIHRo YW4gZGlmZmVyaW5nIHRoZSBNQVAgdG8gdGhlIHBhZ2UgZmF1bHQgaGFuZGxlci4Kcy9kaWZmZXJp bmcvZGVmZXJyaW5nLy4gUGVyaGFwcyBhIE5PUCBvbiBub24tZmF1bHRpbmcgVk1zCj4gK8KgwqDC oMKgwqDCoMKgICovCj4gKyNkZWZpbmUgWEVfVk1fQklORF9GTEFHX0lNTUVESUFURcKgwqDCoMKg wqDCoCgweDEgPDwgMTgpCj4gK8KgwqDCoMKgwqDCoMKgLyoKPiArwqDCoMKgwqDCoMKgwqAgKiBX aGVuIHRoZSBOVUxMIGZsYWcgaXMgc2V0LCB0aGUgcGFnZSB0YWJsZXMgYXJlIHNldHVwIHdpdGgK PiBhIHNwZWNpYWwKPiArwqDCoMKgwqDCoMKgwqAgKiBiaXQgd2hpY2ggaW5kaWNhdGVzIHdyaXRl cyBhcmUgZHJvcHBlZCBhbmQgYWxsIHJlYWRzCj4gcmV0dXJuIHplcm8uwqAgSW4KPiArwqDCoMKg wqDCoMKgwqAgKiB0aGUgZnV0dXJlLCB0aGUgTlVMTCBmbGFncyB3aWxsIG9ubHkgYmUgdmFsaWQg Zm9yCj4gWEVfVk1fQklORF9PUF9NQVAKPiArwqDCoMKgwqDCoMKgwqAgKiBvcGVyYXRpb25zLCB0 aGUgQk8gaGFuZGxlIE1CWiwgYW5kIHRoZSBCTyBvZmZzZXQgTUJaLiBUaGlzCj4gZmxhZyBpcwo+ ICvCoMKgwqDCoMKgwqDCoCAqIGludGVuZGVkIHRvIGltcGxlbWVudCBWSyBzcGFyc2UgYmluZGlu Z3MuCj4gK8KgwqDCoMKgwqDCoMKgICovClJldmlzaXQgdGhlIGFib3ZlLCBhbmQgYWxpZ24gdG8g Y29uc2Vuc3VzLgoKPiArI2RlZmluZSBYRV9WTV9CSU5EX0ZMQUdfTlVMTMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAoMHgxIDw8IDE5KQo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAb3A6IE9wZXJhdGlvbiB0 byBwZXJmb3JtIChsb3dlciAxNiBiaXRzKSBhbmQgZmxhZ3MKPiAodXBwZXIgMTYgYml0cykgKi8K PiArwqDCoMKgwqDCoMKgwqBfX3UzMiBvcDsKCkNhbiB3ZSB1c2UgdHdvIF9fdTE2cyBpbnN0ZWFk PwoKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBtZW1fcmVnaW9uOiBNZW1vcnkgcmVnaW9uIHRv IHByZWZldGNoIFZNQSB0bywgaW5zdGFuY2UKPiBub3QgYSBtYXNrICovCj4gK8KgwqDCoMKgwqDC oMKgX191MzIgcmVnaW9uOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHJlc2VydmVkOiBSZXNl cnZlZCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IHJlc2VydmVkWzJdOwo+ICt9Owo+ICsKPiAr c3RydWN0IGRybV94ZV92bV9iaW5kIHsKPiArwqDCoMKgwqDCoMKgwqAvKiogQGV4dGVuc2lvbnM6 IFBvaW50ZXIgdG8gdGhlIGZpcnN0IGV4dGVuc2lvbiBzdHJ1Y3QsIGlmCj4gYW55ICovCj4gK8Kg wqDCoMKgwqDCoMKgX191NjQgZXh0ZW5zaW9uczsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEB2 bV9pZDogVGhlIElEIG9mIHRoZSBWTSB0byBiaW5kIHRvICovCj4gK8KgwqDCoMKgwqDCoMKgX191 MzIgdm1faWQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEBl bmdpbmVfaWQ6IGVuZ2luZV9pZCwgbXVzdCBiZSBvZiBjbGFzcwo+IERSTV9YRV9FTkdJTkVfQ0xB U1NfVk1fQklORAo+ICvCoMKgwqDCoMKgwqDCoCAqIGFuZCBlbmdpbmUgbXVzdCBoYXZlIHNhbWUg dm1faWQuIElmIHplcm8sIHRoZSBkZWZhdWx0IFZNCj4gYmluZCBlbmdpbmUKPiArwqDCoMKgwqDC oMKgwqAgKiBpcyB1c2VkLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9f dTMyIGVuZ2luZV9pZDsKCkdlbmVyYWw6IGVuZ2luZSB2cyBjb250ZXh0LiBEaXNjdXNzaW9uIGdv aW5nIG9uIGVsc2V3aGVyZS4KCj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAbnVtX2JpbmRzOiBu dW1iZXIgb2YgYmluZHMgaW4gdGhpcyBJT0NUTCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIG51 bV9iaW5kczsKCm51bV9vcHM/Cgo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHBhZDogTUJaICov Cj4gK8KgwqDCoMKgwqDCoMKgX191MzIgcGFkOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB1bmlvbiB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qKiBAYmluZDogdXNlZCBpZiBudW1f YmluZHMgPT0gMSAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZHJt X3hlX3ZtX2JpbmRfb3AgYmluZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oC8qKgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBAdmVjdG9yX29mX2JpbmRz OiB1c2VycHRyIHRvIGFycmF5IG9mIHN0cnVjdAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgKiBkcm1feGVfdm1fYmluZF9vcCBpZiBudW1fYmluZHMgPiAxCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBf X3U2NCB2ZWN0b3Jfb2ZfYmluZHM7Cj4gK8KgwqDCoMKgwqDCoMKgfTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgLyoqIEBudW1fc3luY3M6IGFtb3VudCBvZiBzeW5jcyB0byB3YWl0IG9uICovCj4gK8Kg wqDCoMKgwqDCoMKgX191MzIgbnVtX3N5bmNzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHBh ZDI6IE1CWiAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHBhZDI7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoC8qKiBAc3luY3M6IHBvaW50ZXIgdG8gc3RydWN0IGRybV94ZV9zeW5jIGFycmF5ICovCj4g K8KgwqDCoMKgwqDCoMKgX191NjQgc3luY3M7CgpEaXNhYmxlIGluLXN5bmNzIG9uIExSIHZtcywg YW5kIHVzZXItZmVuY2UgaW4tc3luY3MgaW4gZ2VuZXJhbD8KCj4gKwo+ICvCoMKgwqDCoMKgwqDC oC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgcmVzZXJ2 ZWRbMl07Cj4gK307Cj4gKwo+ICsvKiogc3RydWN0IGRybV94ZV9leHRfZW5naW5lX3NldF9wcm9w ZXJ0eSAtIGVuZ2luZSBzZXQgcHJvcGVydHkKPiBleHRlbnNpb24gKi8KCklzIHRoaXMgZm9yIG11 bHRpcGxlIHByb3BlcnRpZXMgcGVyIGlvY3RsPyBEb2N1bWVudC4KCj4gK3N0cnVjdCBkcm1feGVf ZXh0X2VuZ2luZV9zZXRfcHJvcGVydHkgewo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAYmFzZTogYmFz ZSB1c2VyIGV4dGVuc2lvbiAqLwo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB4ZV91c2VyX2V4dGVu c2lvbiBiYXNlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHByb3BlcnR5OiBwcm9wZXJ0eSB0 byBzZXQgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBwcm9wZXJ0eTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgLyoqIEBwYWQ6IE1CWiAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHBhZDsKPiArCj4g K8KgwqDCoMKgwqDCoMKgLyoqIEB2YWx1ZTogcHJvcGVydHkgdmFsdWUgKi8KPiArwqDCoMKgwqDC oMKgwqBfX3U2NCB2YWx1ZTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHJtX3hlX2Vu Z2luZV9zZXRfcHJvcGVydHkgLSBlbmdpbmUgc2V0IHByb3BlcnR5Cj4gKyAqCj4gKyAqIFNhbWUg bmFtZXNwYWNlIGZvciBleHRlbnNpb25zIGFzIGRybV94ZV9lbmdpbmVfY3JlYXRlCj4gKyAqLwo+ ICtzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9zZXRfcHJvcGVydHkgewo+ICvCoMKgwqDCoMKgwqDCoC8q KiBAZXh0ZW5zaW9uczogUG9pbnRlciB0byB0aGUgZmlyc3QgZXh0ZW5zaW9uIHN0cnVjdCwgaWYK PiBhbnkgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCBleHRlbnNpb25zOwo+ICsKPiArwqDCoMKg wqDCoMKgwqAvKiogQGVuZ2luZV9pZDogRW5naW5lIElEICovCj4gK8KgwqDCoMKgwqDCoMKgX191 MzIgZW5naW5lX2lkOwo+ICsKPiArI2RlZmluZSBYRV9FTkdJTkVfU0VUX1BST1BFUlRZX1BSSU9S SVRZwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMAo+ICsj ZGVmaW5lIFhFX0VOR0lORV9TRVRfUFJPUEVSVFlfVElNRVNMSUNFwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgMQo+ICsjZGVmaW5lIFhFX0VOR0lORV9TRVRfUFJPUEVSVFlfUFJFRU1QVElP Tl9USU1FT1VUwqDCoMKgwqDCoMKgMgoKRG9jdW1lbnQuIERvIHRoZXNlIG9wZW4gdXAgZm9yIERv UyB2dWxuZXJhYmlsaXRpZXM/Cgo+ICvCoMKgwqDCoMKgwqDCoC8qCj4gK8KgwqDCoMKgwqDCoMKg ICogTG9uZyBydW5uaW5nIG9yIFVMTFMgZW5naW5lIG1vZGUuIERNQSBmZW5jZXMgbm90IGFsbG93 ZWQKPiBpbiB0aGlzCj4gK8KgwqDCoMKgwqDCoMKgICogbW9kZS4gTXVzdCBtYXRjaCB0aGUgdmFs dWUgb2YKPiBEUk1fWEVfVk1fQ1JFQVRFX0NPTVBVVEVfTU9ERSwgc2VydmVzCj4gK8KgwqDCoMKg wqDCoMKgICogYXMgYSBzYW5pdHkgY2hlY2sgdGhlIFVNRCBrbm93cyB3aGF0IGl0IGlzIGRvaW5n LiBDYW4gb25seQo+IGJlIHNldCBhdAo+ICvCoMKgwqDCoMKgwqDCoCAqIGVuZ2luZSBjcmVhdGUg dGltZS4KPiArwqDCoMKgwqDCoMKgwqAgKi8KCnMvQ09NUFVURS9MUi8gPwoKPiArI2RlZmluZSBY RV9FTkdJTkVfU0VUX1BST1BFUlRZX0NPTVBVVEVfTU9ERcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oDMKPiArI2RlZmluZSBYRV9FTkdJTkVfU0VUX1BST1BFUlRZX1BFUlNJU1RFTkNFwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqA0Cj4gKyNkZWZpbmUgWEVfRU5HSU5FX1NFVF9QUk9QRVJUWV9KT0Jf VElNRU9VVMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgNQo+ICsjZGVmaW5lIFhFX0VOR0lORV9T RVRfUFJPUEVSVFlfQUNDX1RSSUdHRVLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDYKPiArI2Rl ZmluZSBYRV9FTkdJTkVfU0VUX1BST1BFUlRZX0FDQ19OT1RJRlnCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgNwo+ICsjZGVmaW5lIFhFX0VOR0lORV9TRVRfUFJPUEVSVFlfQUNDX0dSQU5VTEFS SVRZwqDCoMKgwqDCoMKgwqDCoMKgOAoKRG9jdW1lbnRhdGlvbj8KCj4gK8KgwqDCoMKgwqDCoMKg LyoqIEBwcm9wZXJ0eTogcHJvcGVydHkgdG8gc2V0ICovCj4gK8KgwqDCoMKgwqDCoMKgX191MzIg cHJvcGVydHk7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAdmFsdWU6IHByb3BlcnR5IHZhbHVl ICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgdmFsdWU7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8q KiBAcmVzZXJ2ZWQ6IFJlc2VydmVkICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgcmVzZXJ2ZWRb Ml07Cj4gK307Cj4gKwo+ICsvKiogc3RydWN0IGRybV94ZV9lbmdpbmVfY2xhc3NfaW5zdGFuY2Ug LSBpbnN0YW5jZSBvZiBhbiBlbmdpbmUKPiBjbGFzcyAqLwo+ICtzdHJ1Y3QgZHJtX3hlX2VuZ2lu ZV9jbGFzc19pbnN0YW5jZSB7Cgpjb250ZXggLyBlbmdpbmU/Cj4gKyNkZWZpbmUgRFJNX1hFX0VO R0lORV9DTEFTU19SRU5ERVLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDAKPiArI2RlZmluZSBE Uk1fWEVfRU5HSU5FX0NMQVNTX0NPUFnCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAxCj4g KyNkZWZpbmUgRFJNX1hFX0VOR0lORV9DTEFTU19WSURFT19ERUNPREXCoMKgwqDCoMKgwqDCoDIK PiArI2RlZmluZSBEUk1fWEVfRU5HSU5FX0NMQVNTX1ZJREVPX0VOSEFOQ0XCoMKgwqDCoMKgwqAz Cj4gKyNkZWZpbmUgRFJNX1hFX0VOR0lORV9DTEFTU19DT01QVVRFwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgNAo+ICvCoMKgwqDCoMKgwqDCoC8qCj4gK8KgwqDCoMKgwqDCoMKgICogS2VybmVsIG9u bHkgY2xhc3MgKG5vdCBhY3R1YWwgaGFyZHdhcmUgZW5naW5lIGNsYXNzKS4gVXNlZAo+IGZvcgo+ ICvCoMKgwqDCoMKgwqDCoCAqIGNyZWF0aW5nIG9yZGVyZWQgcXVldWVzIG9mIFZNIGJpbmQgb3Bl cmF0aW9ucy4KPiArwqDCoMKgwqDCoMKgwqAgKi8KPiArI2RlZmluZSBEUk1fWEVfRU5HSU5FX0NM QVNTX1ZNX0JJTkTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA1Cj4gK8KgwqDCoMKgwqDCoMKgX191 MTYgZW5naW5lX2NsYXNzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBfX3UxNiBlbmdpbmVfaW5zdGFu Y2U7Cj4gK8KgwqDCoMKgwqDCoMKgX191MTYgZ3RfaWQ7Cgp0aWxlL2d0PyAKCj4gK307Cj4gKwo+ ICtzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9jcmVhdGUgewoKY29udGV4dC9lbmdpbmU/IAoKPiArI2Rl ZmluZSBYRV9FTkdJTkVfRVhURU5TSU9OX1NFVF9QUk9QRVJUWcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgMAo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAZXh0ZW5zaW9uczogUG9pbnRlciB0byB0 aGUgZmlyc3QgZXh0ZW5zaW9uIHN0cnVjdCwgaWYKPiBhbnkgKi8KPiArwqDCoMKgwqDCoMKgwqBf X3U2NCBleHRlbnNpb25zOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHdpZHRoOiBzdWJtaXNz aW9uIHdpZHRoIChudW1iZXIgQkIgcGVyIGV4ZWMpIGZvciB0aGlzCj4gZW5naW5lICovCj4gK8Kg wqDCoMKgwqDCoMKgX191MTYgd2lkdGg7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAbnVtX3Bs YWNlbWVudHM6IG51bWJlciBvZiB2YWxpZCBwbGFjZW1lbnRzIGZvciB0aGlzCj4gZW5naW5lICov Cj4gK8KgwqDCoMKgwqDCoMKgX191MTYgbnVtX3BsYWNlbWVudHM7Cj4gKwo+ICvCoMKgwqDCoMKg wqDCoC8qKiBAdm1faWQ6IFZNIHRvIHVzZSBmb3IgdGhpcyBlbmdpbmUgKi8KPiArwqDCoMKgwqDC oMKgwqBfX3UzMiB2bV9pZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBmbGFnczogTUJaICov Cj4gK8KgwqDCoMKgwqDCoMKgX191MzIgZmxhZ3M7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBA ZW5naW5lX2lkOiBSZXR1cm5lZCBlbmdpbmUgSUQgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBl bmdpbmVfaWQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEBp bnN0YW5jZXM6IHVzZXIgcG9pbnRlciB0byBhIDItZCBhcnJheSBvZiBzdHJ1Y3QKPiArwqDCoMKg wqDCoMKgwqAgKiBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNlCj4gK8KgwqDCoMKgwqDCoMKg ICoKPiArwqDCoMKgwqDCoMKgwqAgKiBsZW5ndGggPSB3aWR0aCAoaSkgKiBudW1fcGxhY2VtZW50 cyAoaikKPiArwqDCoMKgwqDCoMKgwqAgKiBpbmRleCA9IGogKyBpICogd2lkdGgKPiArwqDCoMKg wqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCBpbnN0YW5jZXM7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoC8qKiBAcmVzZXJ2ZWQ6IFJlc2VydmVkICovCj4gK8KgwqDCoMKgwqDCoMKgX191 NjQgcmVzZXJ2ZWRbMl07Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX3hlX2VuZ2luZV9nZXRfcHJv cGVydHkgewo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAZXh0ZW5zaW9uczogUG9pbnRlciB0byB0aGUg Zmlyc3QgZXh0ZW5zaW9uIHN0cnVjdCwgaWYKPiBhbnkgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2 NCBleHRlbnNpb25zOwoKV2Ugc2hvdWxkIGRvY3VtZW50IGZvciBlYWNoIGV4dGVuc2lvbiBwb2lu dGVyIHdoYXQgZXh0ZW5zaW9ucyBhcmUKY3VycmVudGx5IHN1cHBvcnRlZC4KCj4gKwo+ICvCoMKg wqDCoMKgwqDCoC8qKiBAZW5naW5lX2lkOiBFbmdpbmUgSUQgKi8KPiArwqDCoMKgwqDCoMKgwqBf X3UzMiBlbmdpbmVfaWQ7Cj4gKwo+ICsjZGVmaW5lIFhFX0VOR0lORV9HRVRfUFJPUEVSVFlfQkFO wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMAo+ICvCoMKgwqDCoMKg wqDCoC8qKiBAcHJvcGVydHk6IHByb3BlcnR5IHRvIGdldCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9f dTMyIHByb3BlcnR5Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHZhbHVlOiBwcm9wZXJ0eSB2 YWx1ZSAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IHZhbHVlOwo+ICsKPiArwqDCoMKgwqDCoMKg wqAvKiogQHJlc2VydmVkOiBSZXNlcnZlZCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IHJlc2Vy dmVkWzJdOwo+ICt9Owo+ICsKPiArc3RydWN0IGRybV94ZV9lbmdpbmVfZGVzdHJveSB7Cj4gK8Kg wqDCoMKgwqDCoMKgLyoqIEBlbmdpbmVfaWQ6IEVuZ2luZSBJRCAqLwo+ICvCoMKgwqDCoMKgwqDC oF9fdTMyIGVuZ2luZV9pZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBwYWQ6IE1CWiAqLwo+ ICvCoMKgwqDCoMKgwqDCoF9fdTMyIHBhZDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEByZXNl cnZlZDogUmVzZXJ2ZWQgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCByZXNlcnZlZFsyXTsKPiAr fTsKPiArCj4gK3N0cnVjdCBkcm1feGVfc3luYyB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBleHRl bnNpb25zOiBQb2ludGVyIHRvIHRoZSBmaXJzdCBleHRlbnNpb24gc3RydWN0LCBpZgo+IGFueSAq Lwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IGV4dGVuc2lvbnM7Cj4gKwo+ICsjZGVmaW5lIERSTV9Y RV9TWU5DX1NZTkNPQkrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDAKPiArI2RlZmluZSBEUk1f WEVfU1lOQ19USU1FTElORV9TWU5DT0JKwqDCoMKgMHgxCj4gKyNkZWZpbmUgRFJNX1hFX1NZTkNf RE1BX0JVRsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4Mgo+ICsjZGVmaW5lIERSTV9YRV9TWU5D X1VTRVJfRkVOQ0XCoMKgwqDCoMKgwqDCoMKgwqAweDMKPiArI2RlZmluZSBEUk1fWEVfU1lOQ19T SUdOQUzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MTAKCkFuIGVudW0gb3IgZmxhZ3M/IFNo b3VsZCBzZXBhcmF0ZSBfX3UxNiBhZ2Fpbj8KCj4gK8KgwqDCoMKgwqDCoMKgX191MzIgZmxhZ3M7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAcGFkOiBNQlogKi8KPiArwqDCoMKgwqDCoMKgwqBf X3UzMiBwYWQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHVuaW9uIHsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgX191MzIgaGFuZGxlOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIEBhZGRyOiBB ZGRyZXNzIG9mIHVzZXIgZmVuY2UuIFdoZW4gc3luYyBwYXNzZWQgaW4KPiB2aWEgZXhlYwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBJT0NUTCB0aGlzIGEgR1BVIGFkZHJlc3Mg aW4gdGhlIFZNLiBXaGVuIHN5bmMKPiBwYXNzZWQgaW4gdmlhCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAqIFZNIGJpbmQgSU9DVEwgdGhpcyBpcyBhIHVzZXIgcG9pbnRlci4gSW4g ZWl0aGVyCj4gY2FzZSwgaXQgaXMKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICog dGhlIHVzZXJzIHJlc3BvbnNpYmlsaXR5IHRoYXQgdGhpcyBhZGRyZXNzIGlzCj4gcHJlc2VudCBh bmQKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogbWFwcGVkIHdoZW4gdGhlIHVz ZXIgZmVuY2UgaXMgc2lnbmFsbGVkLiBNdXN0IGJlCj4gcXdvcmQKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICogYWxpZ25lZC4KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICovCgpEb2N1bWVudCB0aGUgc2l6ZSBvZiB0aGUgdXNlciBmZW5jZSB2YWx1ZT8gRG9lcyBY ZSBndWFyYW50ZWUgYXRvbWljaXR5CndoZW4gdXBkYXRpbmc/IChJIGd1ZXNzIHdlIG11c3QgZG8p LiBJbiB0aGF0IGNhc2Ugd2UgbXVzdCBsb29rIGF0CndoZXRoZXIgY29weV90b191c2VyKCksIHB1 dF91c2VyKCkgZXRjIGd1YXJhbnRlZXMgdGhhdCBvciB3aGV0aGVyIHdlCmFjdHVhbGx5IG5lZWQg dG8gZG8gYSBnZXRfdXNlcl9wYWdlLCBrbWFwIGl0IGFuZCBwZXJmb3JtIGEga21kIGF0b21pYwpv cGVyYXRpb24uCgoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgX191NjQgYWRkcjsK PiArwqDCoMKgwqDCoMKgwqB9Owo+ICsKPiArwqDCoMKgwqDCoMKgwqBfX3U2NCB0aW1lbGluZV92 YWx1ZTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgKi8KPiAr wqDCoMKgwqDCoMKgwqBfX3U2NCByZXNlcnZlZFsyXTsKPiArfTsKPiArCj4gK3N0cnVjdCBkcm1f eGVfZXhlYyB7Cj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBleHRlbnNpb25zOiBQb2ludGVyIHRvIHRo ZSBmaXJzdCBleHRlbnNpb24gc3RydWN0LCBpZgo+IGFueSAqLwo+ICvCoMKgwqDCoMKgwqDCoF9f dTY0IGV4dGVuc2lvbnM7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAdm1faWQ6IFZNIElEIHRv IHJ1biBiYXRjaCBidWZmZXIgaW4gKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBlbmdpbmVfaWQ7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAbnVtX3N5bmNzOiBBbW91bnQgb2Ygc3RydWN0IGRy bV94ZV9zeW5jIGluIGFycmF5LiAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTMyIG51bV9zeW5jczsK CldoYXQgc3luYy10eXBlcyBhcmUgYWxsb3dlZCBhbmQgY29ycmVjdGx5IGhhbmRsZWQ/Cgo+ICsK PiArwqDCoMKgwqDCoMKgwqAvKiogQHN5bmNzOiBQb2ludGVyIHRvIHN0cnVjdCBkcm1feGVfc3lu YyBhcnJheS4gKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCBzeW5jczsKPiArCj4gK8KgwqDCoMKg wqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQGFkZHJlc3M6IGFkZHJlc3Mgb2YgYmF0Y2gg YnVmZmVyIGlmIG51bV9iYXRjaF9idWZmZXIgPT0gMQo+IG9yIGFuCj4gK8KgwqDCoMKgwqDCoMKg ICogYXJyYXkgb2YgYmF0Y2ggYnVmZmVyIGFkZHJlc3Nlcwo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ ICvCoMKgwqDCoMKgwqDCoF9fdTY0IGFkZHJlc3M7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ ICvCoMKgwqDCoMKgwqDCoCAqIEBudW1fYmF0Y2hfYnVmZmVyOiBudW1iZXIgb2YgYmF0Y2ggYnVm ZmVyIGluIHRoaXMgZXhlYywKPiBtdXN0IG1hdGNoCj4gK8KgwqDCoMKgwqDCoMKgICogdGhlIHdp ZHRoIG9mIHRoZSBlbmdpbmUKPiArwqDCoMKgwqDCoMKgwqAgKi8KPiArwqDCoMKgwqDCoMKgwqBf X3UxNiBudW1fYmF0Y2hfYnVmZmVyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHBhZDogTUJa ICovCj4gK8KgwqDCoMKgwqDCoMKgX191MTYgcGFkWzNdOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAv KiogQHJlc2VydmVkOiBSZXNlcnZlZCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IHJlc2VydmVk WzJdOwo+ICt9Owo+ICsKPiArc3RydWN0IGRybV94ZV9tbWlvIHsKSXMgdGhpcyBJT0NUTCBnZW5l cmFsbHkgYXZhaWxhYmxlIHRvIGFsbCBjbGllbnRzPyBvciBDQVBfU1lTX0FETUlOCm9ubHk/Ck9u IGEgZmlyc3QgbG9vayB0aGlzIGxvb2tzIGxpa2UgYSBwcmV0dHkgZGFuZ2Vyb3VzIElPQ1RMLiBX aG8ncyBnb2luZwp0byB1c2UgaXQgYW5kIGZvciB3aGF0PyAKCj4gK8KgwqDCoMKgwqDCoMKgLyoq IEBleHRlbnNpb25zOiBQb2ludGVyIHRvIHRoZSBmaXJzdCBleHRlbnNpb24gc3RydWN0LCBpZgo+ IGFueSAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IGV4dGVuc2lvbnM7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoF9fdTMyIGFkZHI7Cj4gKwo+ICsjZGVmaW5lIERSTV9YRV9NTUlPXzhCSVTCoMKgwqDC oMKgwqDCoDB4MAo+ICsjZGVmaW5lIERSTV9YRV9NTUlPXzE2QklUwqDCoMKgwqDCoMKgMHgxCj4g KyNkZWZpbmUgRFJNX1hFX01NSU9fMzJCSVTCoMKgwqDCoMKgwqAweDIKPiArI2RlZmluZSBEUk1f WEVfTU1JT182NEJJVMKgwqDCoMKgwqDCoDB4Mwo+ICsjZGVmaW5lIERSTV9YRV9NTUlPX0JJVFNf TUFTS8KgwqAweDMKPiArI2RlZmluZSBEUk1fWEVfTU1JT19SRUFEwqDCoMKgwqDCoMKgwqAweDQK PiArI2RlZmluZSBEUk1fWEVfTU1JT19XUklURcKgwqDCoMKgwqDCoDB4OAo+ICvCoMKgwqDCoMKg wqDCoF9fdTMyIGZsYWdzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqBfX3U2NCB2YWx1ZTsKPiArCj4g K8KgwqDCoMKgwqDCoMKgLyoqIEByZXNlcnZlZDogUmVzZXJ2ZWQgKi8KPiArwqDCoMKgwqDCoMKg wqBfX3U2NCByZXNlcnZlZFsyXTsKPiArfTsKPiArCj4gKy8qKgo+ICsgKiBzdHJ1Y3QgZHJtX3hl X3dhaXRfdXNlcl9mZW5jZSAtIHdhaXQgdXNlciBmZW5jZQo+ICsgKgo+ICsgKiBXYWl0IG9uIHVz ZXIgZmVuY2UsIFhFIHdpbGwgd2FrZXVwIG9uIGV2ZXJ5IEhXIGVuZ2luZSBpbnRlcnJ1cHQKPiBp biB0aGUKPiArICogaW5zdGFuY2VzIGxpc3QgYW5kIGNoZWNrIGlmIHVzZXIgZmVuY2UgaXMgY29t cGxldGU6Ogo+ICsgKgo+ICsgKsKgwqDCoMKgwqAoKmFkZHIgJiBNQVNLKSBPUCAoVkFMVUUgJiBN QVNLKQo+ICsgKgoKPiArICogUmV0dXJucyB0byB1c2VyIG9uIHVzZXIgZmVuY2UgY29tcGxldGlv biBvciB0aW1lb3V0Lgo+ICsgKi8KPiArc3RydWN0IGRybV94ZV93YWl0X3VzZXJfZmVuY2Ugewo+ ICvCoMKgwqDCoMKgwqDCoC8qKiBAZXh0ZW5zaW9uczogUG9pbnRlciB0byB0aGUgZmlyc3QgZXh0 ZW5zaW9uIHN0cnVjdCwgaWYKPiBhbnkgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCBleHRlbnNp b25zOwo+ICsKPiArwqDCoMKgwqDCoMKgwqB1bmlvbiB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKiBAYWRkcjog dXNlciBwb2ludGVyIGFkZHJlc3MgdG8gd2FpdCBvbiwgbXVzdCBxd29yZAo+IGFsaWduZWQKCkFu ZCBxd29yZCBzaXplZD8KCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBfX3U2NCBhZGRyOwo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoqCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqIEB2bV9pZDogVGhlIElEIG9mIHRoZSBWTSB3aGljaCBlbmNvdW50ZXIgYW4gZXJyb3IKPiB1 c2VkIHdpdGgKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogRFJNX1hFX1VGRU5D RV9XQUlUX1ZNX0VSUk9SLiBVcHBlciAzMiBiaXRzIG11c3QgYmUKPiBjbGVhci4KPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoF9fdTY0IHZtX2lkOwo+ICvCoMKgwqDCoMKgwqDCoH07Cj4gKwo+ICsjZGVmaW5lIERSTV9Y RV9VRkVOQ0VfV0FJVF9FUcKgwqAwCj4gKyNkZWZpbmUgRFJNX1hFX1VGRU5DRV9XQUlUX05FUcKg MQo+ICsjZGVmaW5lIERSTV9YRV9VRkVOQ0VfV0FJVF9HVMKgwqAyCj4gKyNkZWZpbmUgRFJNX1hF X1VGRU5DRV9XQUlUX0dURcKgMwo+ICsjZGVmaW5lIERSTV9YRV9VRkVOQ0VfV0FJVF9MVMKgwqA0 Cj4gKyNkZWZpbmUgRFJNX1hFX1VGRU5DRV9XQUlUX0xURcKgNQo+ICvCoMKgwqDCoMKgwqDCoC8q KiBAb3A6IHdhaXQgb3BlcmF0aW9uICh0eXBlIG9mIGNvbXBhcmlzb24pICovCj4gK8KgwqDCoMKg wqDCoMKgX191MTYgb3A7Cj4gKwo+ICsjZGVmaW5lIERSTV9YRV9VRkVOQ0VfV0FJVF9TT0ZUX09Q wqDCoMKgwqDCoCgxIDw8IDApwqDCoMKgwqDCoMKgwqDCoC8qIGUuZy4gV2FpdAo+IG9uIFZNIGJp bmQgKi8KPiArI2RlZmluZSBEUk1fWEVfVUZFTkNFX1dBSVRfQUJTVElNRcKgwqDCoMKgwqAoMSA8 PCAxKQo+ICsjZGVmaW5lIERSTV9YRV9VRkVOQ0VfV0FJVF9WTV9FUlJPUsKgwqDCoMKgKDEgPDwg MikKPiArwqDCoMKgwqDCoMKgwqAvKiogQGZsYWdzOiB3YWl0IGZsYWdzICovCj4gK8KgwqDCoMKg wqDCoMKgX191MTYgZmxhZ3M7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAcGFkOiBNQlogKi8K PiArwqDCoMKgwqDCoMKgwqBfX3UzMiBwYWQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAdmFs dWU6IGNvbXBhcmUgdmFsdWUgKi8KPiArwqDCoMKgwqDCoMKgwqBfX3U2NCB2YWx1ZTsKPiArCj4g KyNkZWZpbmUgRFJNX1hFX1VGRU5DRV9XQUlUX1U4wqDCoMKgwqDCoMKgwqDCoMKgwqAweGZmdQo+ ICsjZGVmaW5lIERSTV9YRV9VRkVOQ0VfV0FJVF9VMTbCoMKgwqDCoMKgwqDCoMKgwqAweGZmZmZ1 Cj4gKyNkZWZpbmUgRFJNX1hFX1VGRU5DRV9XQUlUX1UzMsKgwqDCoMKgwqDCoMKgwqDCoDB4ZmZm ZmZmZmZ1Cj4gKyNkZWZpbmUgRFJNX1hFX1VGRU5DRV9XQUlUX1U2NMKgwqDCoMKgwqDCoMKgwqDC oDB4ZmZmZmZmZmZmZmZmZmZmZnUKPiArwqDCoMKgwqDCoMKgwqAvKiogQG1hc2s6IGNvbXBhcmlz b24gbWFzayAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IG1hc2s7Cj4gK8KgwqDCoMKgwqDCoMKg LyoqCj4gK8KgwqDCoMKgwqDCoMKgICogQHRpbWVvdXQ6IGhvdyBsb25nIHRvIHdhaXQgYmVmb3Jl IGJhaWxpbmcsIHZhbHVlIGluCj4gbmFub3NlY29uZHMuCj4gK8KgwqDCoMKgwqDCoMKgICogV2l0 aG91dCBEUk1fWEVfVUZFTkNFX1dBSVRfQUJTVElNRSBmbGFnIHNldCAocmVsYXRpdmUKPiB0aW1l b3V0KQo+ICvCoMKgwqDCoMKgwqDCoCAqIGl0IGNvbnRhaW5zIHRpbWVvdXQgZXhwcmVzc2VkIGlu IG5hbm9zZWNvbmRzIHRvIHdhaXQKPiAoZmVuY2Ugd2lsbAo+ICvCoMKgwqDCoMKgwqDCoCAqIGV4 cGlyZSBhdCBub3coKSArIHRpbWVvdXQpLgo+ICvCoMKgwqDCoMKgwqDCoCAqIFdoZW4gRFJNX1hF X1VGRU5DRV9XQUlUX0FCU1RJTUUgZmxhdCBpcyBzZXQgKGFic29sdXRlCj4gdGltZW91dCkgd2Fp dAo+ICvCoMKgwqDCoMKgwqDCoCAqIHdpbGwgZW5kIGF0IHRpbWVvdXQgKHVzZXMgc3lzdGVtIE1P Tk9UT05JQ19DTE9DSykuCj4gK8KgwqDCoMKgwqDCoMKgICogUGFzc2luZyBuZWdhdGl2ZSB0aW1l b3V0IGxlYWRzIHRvIG5ldmVyZW5kaW5nIHdhaXQuCj4gK8KgwqDCoMKgwqDCoMKgICoKPiArwqDC oMKgwqDCoMKgwqAgKiBPbiByZWxhdGl2ZSB0aW1lb3V0IHRoaXMgdmFsdWUgaXMgdXBkYXRlZCB3 aXRoIHRpbWVvdXQKPiBsZWZ0Cj4gK8KgwqDCoMKgwqDCoMKgICogKGZvciByZXN0YXJ0aW5nIHRo ZSBjYWxsIGluIGNhc2Ugb2Ygc2lnbmFsIGRlbGl2ZXJ5KS4KPiArwqDCoMKgwqDCoMKgwqAgKiBP biBhYnNvbHV0ZSB0aW1lb3V0IHRoaXMgdmFsdWUgc3RheXMgaW50YWN0IChyZXN0YXJ0ZWQKPiBj YWxsIHN0aWxsCj4gK8KgwqDCoMKgwqDCoMKgICogZXhwaXJlIGF0IHRoZSBzYW1lIHBvaW50IG9m IHRpbWUpLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fczY0IHRpbWVv dXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKgo+ICvCoMKgwqDCoMKgwqDCoCAqIEBudW1fZW5n aW5lczogbnVtYmVyIG9mIGVuZ2luZSBpbnN0YW5jZXMgdG8gd2FpdCBvbiwgbXVzdAo+IGJlIHpl cm8KPiArwqDCoMKgwqDCoMKgwqAgKiB3aGVuIERSTV9YRV9VRkVOQ0VfV0FJVF9TT0ZUX09QIHNl dAo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IG51bV9lbmdpbmVz Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKioKPiArwqDCoMKgwqDCoMKgwqAgKiBAaW5zdGFuY2Vz OiB1c2VyIHBvaW50ZXIgdG8gYXJyYXkgb2YKPiBkcm1feGVfZW5naW5lX2NsYXNzX2luc3RhbmNl IHRvCj4gK8KgwqDCoMKgwqDCoMKgICogd2FpdCBvbiwgbXVzdCBiZSBOVUxMIHdoZW4gRFJNX1hF X1VGRU5DRV9XQUlUX1NPRlRfT1Agc2V0Cj4gK8KgwqDCoMKgwqDCoMKgICovCj4gK8KgwqDCoMKg wqDCoMKgX191NjQgaW5zdGFuY2VzOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHJlc2VydmVk OiBSZXNlcnZlZCAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IHJlc2VydmVkWzJdOwo+ICt9Owo+ ICsKPiArc3RydWN0IGRybV94ZV92bV9tYWR2aXNlIHsKPiArwqDCoMKgwqDCoMKgwqAvKiogQGV4 dGVuc2lvbnM6IFBvaW50ZXIgdG8gdGhlIGZpcnN0IGV4dGVuc2lvbiBzdHJ1Y3QsIGlmCj4gYW55 ICovCj4gK8KgwqDCoMKgwqDCoMKgX191NjQgZXh0ZW5zaW9uczsKPiArCj4gK8KgwqDCoMKgwqDC oMKgLyoqIEB2bV9pZDogVGhlIElEIFZNIGluIHdoaWNoIHRoZSBWTUEgZXhpc3RzICovCj4gK8Kg wqDCoMKgwqDCoMKgX191MzIgdm1faWQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAcGFkOiBN QlogKi8KPiArwqDCoMKgwqDCoMKgwqBfX3UzMiBwYWQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8q KiBAcmFuZ2U6IE51bWJlciBvZiBieXRlcyBpbiB0aGUgVk1BICovCj4gK8KgwqDCoMKgwqDCoMKg X191NjQgcmFuZ2U7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoC8qKiBAYWRkcjogQWRkcmVzcyBvZiB0 aGUgVk1BIHRvIG9wZXJhdGlvbiBvbiAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IGFkZHI7CgpH UFUgVkE/CgpEb2VzIHRoZSBhZGRyIGFuZCByYW5nZSBuZWVkIHRvIGV4YWN0bHkgbWF0Y2ggYW4g ZXhpc3Rpbmcgdm1hLiBXaGF0CmhhcHBlbnMgb3RoZXJ3aXNlLgoKPiArCj4gK8KgwqDCoMKgwqDC oMKgLyoKPiArwqDCoMKgwqDCoMKgwqAgKiBTZXR0aW5nIHRoZSBwcmVmZXJyZWQgbG9jYXRpb24g d2lsbCB0cmlnZ2VyIGEgbWlncmF0ZSBvZgo+IHRoZSBWTUEKPiArwqDCoMKgwqDCoMKgwqAgKiBi YWNraW5nIHN0b3JlIHRvIG5ldyBsb2NhdGlvbiBpZiB0aGUgYmFja2luZyBzdG9yZSBpcwo+IGFs cmVhZHkKPiArwqDCoMKgwqDCoMKgwqAgKiBhbGxvY2F0ZWQuCj4gK8KgwqDCoMKgwqDCoMKgICoK PiArwqDCoMKgwqDCoMKgwqAgKiBGb3IgRFJNX1hFX1ZNX01BRFZJU0VfUFJFRkVSUkVEX01FTV9D TEFTUyB1c2FnZSwgc2VlIGVudW0KPiArwqDCoMKgwqDCoMKgwqAgKiBkcm1feGVfbWVtb3J5X2Ns YXNzLgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICsjZGVmaW5lIERSTV9YRV9WTV9NQURWSVNFX1BS RUZFUlJFRF9NRU1fQ0xBU1PCoMKgMAo+ICsjZGVmaW5lIERSTV9YRV9WTV9NQURWSVNFX1BSRUZF UlJFRF9HVMKgwqDCoMKgwqDCoMKgwqDCoDEKPiArwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDC oMKgwqDCoCAqIEluIHRoaXMgY2FzZSBsb3dlciAzMiBiaXRzIGFyZSBtZW0gY2xhc3MsIHVwcGVy IDMyIGFyZSBHVC4KPiArwqDCoMKgwqDCoMKgwqAgKiBDb21iaW5hdGlvbiBwcm92aWRlcyBhIHNp bmdsZSBJT0NUTCBwbHVzIG1pZ3JhdGUgVk1BIHRvCj4gcHJlZmVycmVkCj4gK8KgwqDCoMKgwqDC oMKgICogbG9jYXRpb24uCj4gK8KgwqDCoMKgwqDCoMKgICovCj4gKyNkZWZpbmUgRFJNX1hFX1ZN X01BRFZJU0VfUFJFRkVSUkVEX01FTV9DTEFTU19HVMKgwqDCoMKgwqDCoMKgMgo+ICvCoMKgwqDC oMKgwqDCoC8qCj4gK8KgwqDCoMKgwqDCoMKgICogVGhlIENQVSB3aWxsIGRvIGF0b21pYyBtZW1v cnkgb3BlcmF0aW9ucyB0byB0aGlzIFZNQS4gTXVzdAo+IGJlIHNldCBvbgo+ICvCoMKgwqDCoMKg wqDCoCAqIHNvbWUgZGV2aWNlcyBmb3IgYXRvbWljcyB0byBiZWhhdmUgY29ycmVjdGx5Lgo+ICvC oMKgwqDCoMKgwqDCoCAqLwo+ICsjZGVmaW5lIERSTV9YRV9WTV9NQURWSVNFX0NQVV9BVE9NSUPC oMKgwqDCoMKgwqDCoMKgwqDCoMKgMwo+ICvCoMKgwqDCoMKgwqDCoC8qCj4gK8KgwqDCoMKgwqDC oMKgICogVGhlIGRldmljZSB3aWxsIGRvIGF0b21pYyBtZW1vcnkgb3BlcmF0aW9ucyB0byB0aGlz IFZNQS4KPiBNdXN0IGJlIHNldAo+ICvCoMKgwqDCoMKgwqDCoCAqIG9uIHNvbWUgZGV2aWNlcyBm b3IgYXRvbWljcyB0byBiZWhhdmUgY29ycmVjdGx5Lgo+ICvCoMKgwqDCoMKgwqDCoCAqLwo+ICsj ZGVmaW5lIERSTV9YRV9WTV9NQURWSVNFX0RFVklDRV9BVE9NSUPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoDQKPiArwqDCoMKgwqDCoMKgwqAvKgo+ICvCoMKgwqDCoMKgwqDCoCAqIFBy aW9yaXR5IFdSVCB0byBldmljdGlvbiAobW92aW5nIGZyb20gcHJlZmVycmVkIG1lbW9yeQo+IGxv Y2F0aW9uIGR1ZQo+ICvCoMKgwqDCoMKgwqDCoCAqIHRvIG1lbW9yeSBwcmVzc3VyZSkuIFRoZSBs b3dlciB0aGUgcHJpb3JpdHksIHRoZSBtb3JlCj4gbGlrZWx5IHRvIGJlCj4gK8KgwqDCoMKgwqDC oMKgICogZXZpY3RlZC4KPiArwqDCoMKgwqDCoMKgwqAgKi8KCgo+ICsjZGVmaW5lIERSTV9YRV9W TV9NQURWSVNFX1BSSU9SSVRZwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA1Cj4gKyNkZWZpbmXC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoERSTV9YRV9WTUFfUFJJT1JJVFlfTE9XwqDC oMKgwqDCoMKgwqDCoMKgMAo+ICsjZGVmaW5lwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBEUk1fWEVfVk1BX1BSSU9SSVRZX05PUk1BTMKgwqDCoMKgwqDCoDHCoMKgwqDCoMKgwqDCoC8q Cj4gRGVmYXVsdCAqLwo+ICsjZGVmaW5lwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBE Uk1fWEVfVk1BX1BSSU9SSVRZX0hJR0jCoMKgwqDCoMKgwqDCoMKgMsKgwqDCoMKgwqDCoMKgLyoK PiBNdXN0IGJlIGVsZXZhdGVkIHVzZXIgKi8KPiArwqDCoMKgwqDCoMKgwqAvKiBQaW4gdGhlIFZN QSBpbiBtZW1vcnksIG11c3QgYmUgZWxldmF0ZWQgdXNlciAqLwo+ICsjZGVmaW5lIERSTV9YRV9W TV9NQURWSVNFX1BJTsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDYKPiAKCnMv ZWxldmF0ZWQgdXNlci91c2VyIGhhcyBlbGV2YXRlZCBwcml2aWxlZ2VzLwoKPiArwqDCoMKgwqDC oMKgwqAvKiogQHByb3BlcnR5OiBwcm9wZXJ0eSB0byBzZXQgKi8KPiArwqDCoMKgwqDCoMKgwqBf X3UzMiBwcm9wZXJ0eTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyoqIEBwYWQyOiBNQlogKi8KPiAr wqDCoMKgwqDCoMKgwqBfX3UzMiBwYWQyOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiogQHZhbHVl OiBwcm9wZXJ0eSB2YWx1ZSAqLwo+ICvCoMKgwqDCoMKgwqDCoF9fdTY0IHZhbHVlOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqAvKiogQHJlc2VydmVkOiBSZXNlcnZlZCAqLwo+ICvCoMKgwqDCoMKgwqDC oF9fdTY0IHJlc2VydmVkWzJdOwo+ICt9Owo+ICsKPiArI2lmIGRlZmluZWQoX19jcGx1c3BsdXMp Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsjZW5kaWYgLyogX1VBUElfWEVfRFJNX0hfICovCgo=