From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Campbell Subject: Re: [PATCH 4.4 1/2] libxl: Rerun bison and flex Date: Mon, 4 Jan 2016 15:00:09 +0000 Message-ID: <1451919609.13361.143.camel@citrix.com> References: <1451902108.13361.12.camel@citrix.com> <1451919024-7904-1-git-send-email-ian.jackson@eu.citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1451919024-7904-1-git-send-email-ian.jackson@eu.citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Jackson , xen-devel@lists.xensource.com Cc: osstest-admin@xenproject.org, Jan Beulich List-Id: xen-devel@lists.xenproject.org T24gTW9uLCAyMDE2LTAxLTA0IGF0IDE0OjUwICswMDAwLCBJYW4gSmFja3NvbiB3cm90ZToKPiBX ZSBhcmUgZ29pbmcgdG8gd2FudCB0byBjaGVycnkgcGljayBhIGNoYW5nZSB0byB0aGUgYmlzb24g aW5wdXQsIHdoaWNoCj4gd2lsbCBpbnZvbHZlIHJlcnVubmluZyBiaXNvbi4KPiAKPiBTbyBmaXJz dGx5LCB1cGRhdGUgdGhlIGJpc29uIGFuZCBmbGV4IG91dHB1dCB0byB0aGF0IGZyb20gY3VycmVu dAo+IERlYmlhbiB3aGVlenkgKGkzODY7IDE6Mi41LmRmc2ctMi4xIGFuZCAyLjUuMzUtMTAuMSBy ZXNwZWN0aXZlbHkpLgo+IAo+IFRoZXJlIHNob3VsZCBiZSBubyBmdW5jdGlvbmFsIGNoYW5nZSBz aW5jZSB0aGVyZSBpcyBubyBjaGFuZ2UgdG8gdGhlCj4gc291cmNlIGZpbGUsIGJ1dCB3ZSB3aWxs IGluaGVyaXQgYnVnZml4ZXMgYW5kIGJlaGF2aW91cmFsIGNoYW5nZXMgZnJvbQo+IHRoZSBuZXcg dmVyc2lvbiBvZiBiaXNvbi7CoMKgU28gdGhpcyBpcyBtb3JlIGEgbWF0dGVyIG9mIGhvcGUgdGhh bgo+IGtub3dsZWRnZS4KClRoaXMgb25lIGlzbid0IGEgY2hlcnJ5IHBpY2ssIGJ1dCByYXRoZXIg YSBtYW51YWwgcmVydW4gb2YgdGhlIHRvb2xzIHdpdGggYQpjYXJnby1jdWx0ZWQgY29tbWl0IG1l c3NhZ2UgZnJvbSBhbm90aGVyIHN1Y2ggb2NjYXNpb24sIHJpZ2h0PwoKPiAKPiBTaWduZWQtb2Zm LWJ5OiBJYW4gSmFja3NvbiA8SWFuLkphY2tzb25AZXUuY2l0cml4LmNvbT4KPiAtLS0KPiDCoHRv b2xzL2xpYnhsL2xpYnhsdV9jZmdfeS5jIHzCoMKgNTM4ICsrKysrKysrKysrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLQo+IC0tLS0tLS0tCj4gwqB0b29scy9saWJ4bC9saWJ4bHVfY2ZnX3kuaCB8 wqDCoMKgMTQgKy0KPiDCoDIgZmlsZXMgY2hhbmdlZCwgMzA0IGluc2VydGlvbnMoKyksIDI0OCBk ZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGx1X2NmZ195LmMg Yi90b29scy9saWJ4bC9saWJ4bHVfY2ZnX3kuYwo+IGluZGV4IDIxODkzM2UuLjQ0MzdlMDUgMTAw NjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGx1X2NmZ195LmMKPiArKysgYi90b29scy9saWJ4 bC9saWJ4bHVfY2ZnX3kuYwo+IEBAIC0xLDEwICsxLDggQEAKPiArLyogQSBCaXNvbiBwYXJzZXIs IG1hZGUgYnkgR05VIEJpc29uIDIuNS7CoMKgKi8KPiDCoAo+IC0vKiBBIEJpc29uIHBhcnNlciwg bWFkZSBieSBHTlUgQmlzb24gMi40LjEuwqDCoCovCj4gLQo+IC0vKiBTa2VsZXRvbiBpbXBsZW1l bnRhdGlvbiBmb3IgQmlzb24ncyBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCj4gKy8qIEJpc29uIGlt cGxlbWVudGF0aW9uIGZvciBZYWNjLWxpa2UgcGFyc2VycyBpbiBDCj4gwqDCoMKgwqAKPiAtwqDC oMKgwqDCoMKgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LCAxOTkwLCAyMDAwLCAyMDAxLCAyMDAy LCAyMDAzLCAyMDA0LAo+IDIwMDUsIDIwMDYKPiAtwqDCoMKgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuCj4gK8KgwqDCoMKgwqDCoENvcHlyaWdodCAoQykgMTk4NCwgMTk4OS0xOTkwLCAy MDAwLTIwMTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAo+IEluYy4KPiDCoMKgwqDCoAo+IMKg wqDCoMKgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKPiDCoMKgwqDCoGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gQEAgLTQ2LDcgKzQ0LDcg QEAKPiDCoCNkZWZpbmUgWVlCSVNPTiAxCj4gwqAKPiDCoC8qIEJpc29uIHZlcnNpb24uwqDCoCov Cj4gLSNkZWZpbmUgWVlCSVNPTl9WRVJTSU9OICIyLjQuMSIKPiArI2RlZmluZSBZWUJJU09OX1ZF UlNJT04gIjIuNSIKPiDCoAo+IMKgLyogU2tlbGV0b24gbmFtZS7CoMKgKi8KPiDCoCNkZWZpbmUg WVlTS0VMRVRPTl9OQU1FICJ5YWNjLmMiCj4gQEAgLTc1LDcgKzczLDcgQEAKPiDCoAo+IMKgLyog Q29weSB0aGUgZmlyc3QgcGFydCBvZiB1c2VyIGRlY2xhcmF0aW9ucy7CoMKgKi8KPiDCoAo+IC0v KiBMaW5lIDE4OSBvZiB5YWNjLmPCoMKgKi8KPiArLyogTGluZSAyNjggb2YgeWFjYy5jwqDCoCov Cj4gwqAjbGluZSAxOSAibGlieGx1X2NmZ195LnkiCj4gwqAKPiDCoCNkZWZpbmUgWVlMRVhfUEFS QU0gY3R4LT5zY2FubmVyCj4gQEAgLTgzLDggKzgxLDggQEAKPiDCoCNpbmNsdWRlICJsaWJ4bHVf Y2ZnX2wuaCIKPiDCoAo+IMKgCj4gLS8qIExpbmUgMTg5IG9mIHlhY2MuY8KgwqAqLwo+IC0jbGlu ZSA4OCAibGlieGx1X2NmZ195LmMiCj4gKy8qIExpbmUgMjY4IG9mIHlhY2MuY8KgwqAqLwo+ICsj bGluZSA4NiAibGlieGx1X2NmZ195LmMiCj4gwqAKPiDCoC8qIEVuYWJsaW5nIHRyYWNlcy7CoMKg Ki8KPiDCoCNpZm5kZWYgWVlERUJVRwo+IEBAIC0xMjQsNyArMTIyLDcgQEAKPiDCoHR5cGVkZWYg dW5pb24gWVlTVFlQRQo+IMKgewo+IMKgCj4gLS8qIExpbmUgMjE0IG9mIHlhY2MuY8KgwqAqLwo+ ICsvKiBMaW5lIDI5MyBvZiB5YWNjLmPCoMKgKi8KPiDCoCNsaW5lIDI1ICJsaWJ4bHVfY2ZnX3ku eSIKPiDCoAo+IMKgwqDCoGNoYXIgKnN0cmluZzsKPiBAQCAtMTMyLDggKzEzMCw4IEBAIHR5cGVk ZWYgdW5pb24gWVlTVFlQRQo+IMKgCj4gwqAKPiDCoAo+IC0vKiBMaW5lIDIxNCBvZiB5YWNjLmPC oMKgKi8KPiAtI2xpbmUgMTM3ICJsaWJ4bHVfY2ZnX3kuYyIKPiArLyogTGluZSAyOTMgb2YgeWFj Yy5jwqDCoCovCj4gKyNsaW5lIDEzNSAibGlieGx1X2NmZ195LmMiCj4gwqB9IFlZU1RZUEU7Cj4g wqAjIGRlZmluZSBZWVNUWVBFX0lTX1RSSVZJQUwgMQo+IMKgIyBkZWZpbmUgeXlzdHlwZSBZWVNU WVBFIC8qIG9ic29sZXNjZW50OyB3aWxsIGJlIHdpdGhkcmF3biAqLwo+IEBAIC0xNTcsOCArMTU1 LDggQEAgdHlwZWRlZiBzdHJ1Y3QgWVlMVFlQRQo+IMKgLyogQ29weSB0aGUgc2Vjb25kIHBhcnQg b2YgdXNlciBkZWNsYXJhdGlvbnMuwqDCoCovCj4gwqAKPiDCoAo+IC0vKiBMaW5lIDI2NCBvZiB5 YWNjLmPCoMKgKi8KPiAtI2xpbmUgMTYyICJsaWJ4bHVfY2ZnX3kuYyIKPiArLyogTGluZSAzNDMg b2YgeWFjYy5jwqDCoCovCj4gKyNsaW5lIDE2MCAibGlieGx1X2NmZ195LmMiCj4gwqAKPiDCoCNp ZmRlZiBzaG9ydAo+IMKgIyB1bmRlZiBzaG9ydAo+IEBAIC0yMDgsNyArMjA2LDcgQEAgdHlwZWRl ZiBzaG9ydCBpbnQgeXl0eXBlX2ludDE2Owo+IMKgI2RlZmluZSBZWVNJWkVfTUFYSU1VTSAoKFlZ U0laRV9UKSAtMSkKPiDCoAo+IMKgI2lmbmRlZiBZWV8KPiAtIyBpZiBZWUVOQUJMRV9OTFMKPiAr IyBpZiBkZWZpbmVkIFlZRU5BQkxFX05MUyAmJiBZWUVOQUJMRV9OTFMKPiDCoCPCoMKgaWYgRU5B QkxFX05MUwo+IMKgI8KgwqDCoGluY2x1ZGUgPGxpYmludGwuaD4gLyogSU5GUklOR0VTIE9OIFVT RVIgTkFNRSBTUEFDRSAqLwo+IMKgI8KgwqDCoGRlZmluZSBZWV8obXNnaWQpIGRnZXR0ZXh0ICgi Ymlzb24tcnVudGltZSIsIG1zZ2lkKQo+IEBAIC0yNjEsMTEgKzI1OSwxMSBAQCBZWUlEICh5eWkp Cj4gwqAjwqDCoMKgwqBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKPiDCoCPCoMKgwqBlbHNlCj4gwqAj wqDCoMKgwqBkZWZpbmUgWVlTVEFDS19BTExPQyBhbGxvY2EKPiAtI8KgwqDCoMKgaWYgISBkZWZp bmVkIF9BTExPQ0FfSCAmJiAhIGRlZmluZWQgX1NURExJQl9IICYmIChkZWZpbmVkIF9fU1REQ19f Cj4gfHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKPiArI8KgwqDCoMKgaWYgISBkZWZpbmVkIF9B TExPQ0FfSCAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkCj4gX19TVERDX18g fHwgZGVmaW5lZCBfX0M5OV9fRlVOQ19fIFwKPiDCoMKgwqDCoMKgwqB8fCBkZWZpbmVkIF9fY3Bs dXNwbHVzIHx8IGRlZmluZWQgX01TQ19WRVIpCj4gwqAjwqDCoMKgwqDCoGluY2x1ZGUgPHN0ZGxp Yi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCj4gLSPCoMKgwqDCoMKgaWZu ZGVmIF9TVERMSUJfSAo+IC0jwqDCoMKgwqDCoMKgZGVmaW5lIF9TVERMSUJfSCAxCj4gKyPCoMKg wqDCoMKgaWZuZGVmIEVYSVRfU1VDQ0VTUwo+ICsjwqDCoMKgwqDCoMKgZGVmaW5lIEVYSVRfU1VD Q0VTUyAwCj4gwqAjwqDCoMKgwqDCoGVuZGlmCj4gwqAjwqDCoMKgwqBlbmRpZgo+IMKgI8KgwqDC oGVuZGlmCj4gQEAgLTI4OCwyNCArMjg2LDI0IEBAIFlZSUQgKHl5aSkKPiDCoCPCoMKgaWZuZGVm IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTQo+IMKgI8KgwqDCoGRlZmluZSBZWVNUQUNLX0FMTE9DX01B WElNVU0gWVlTSVpFX01BWElNVU0KPiDCoCPCoMKgZW5kaWYKPiAtI8KgwqBpZiAoZGVmaW5lZCBf X2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgX1NURExJQl9IIFwKPiArI8KgwqBpZiAoZGVmaW5lZCBf X2NwbHVzcGx1cyAmJiAhIGRlZmluZWQgRVhJVF9TVUNDRVNTIFwKPiDCoMKgwqDCoMKgwqDCoMKg JiYgISAoKGRlZmluZWQgWVlNQUxMT0MgfHwgZGVmaW5lZCBtYWxsb2MpIFwKPiDCoAnCoMKgwqDC oMKgJiYgKGRlZmluZWQgWVlGUkVFIHx8IGRlZmluZWQgZnJlZSkpKQo+IMKgI8KgwqDCoGluY2x1 ZGUgPHN0ZGxpYi5oPiAvKiBJTkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCj4gLSPCoMKg wqBpZm5kZWYgX1NURExJQl9ICj4gLSPCoMKgwqDCoGRlZmluZSBfU1RETElCX0ggMQo+ICsjwqDC oMKgaWZuZGVmIEVYSVRfU1VDQ0VTUwo+ICsjwqDCoMKgwqBkZWZpbmUgRVhJVF9TVUNDRVNTIDAK PiDCoCPCoMKgwqBlbmRpZgo+IMKgI8KgwqBlbmRpZgo+IMKgI8KgwqBpZm5kZWYgWVlNQUxMT0MK PiDCoCPCoMKgwqBkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCj4gLSPCoMKgwqBpZiAhIGRlZmluZWQg bWFsbG9jICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQgX19TVERDX18gfHwKPiBk ZWZpbmVkIF9fQzk5X19GVU5DX18gXAo+ICsjwqDCoMKgaWYgISBkZWZpbmVkIG1hbGxvYyAmJiAh IGRlZmluZWQgRVhJVF9TVUNDRVNTICYmIChkZWZpbmVkIF9fU1REQ19fCj4gfHwgZGVmaW5lZCBf X0M5OV9fRlVOQ19fIFwKPiDCoMKgwqDCoMKgwqB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzIHx8IGRl ZmluZWQgX01TQ19WRVIpCj4gwqB2b2lkICptYWxsb2MgKFlZU0laRV9UKTsgLyogSU5GUklOR0VT IE9OIFVTRVIgTkFNRSBTUEFDRSAqLwo+IMKgI8KgwqDCoGVuZGlmCj4gwqAjwqDCoGVuZGlmCj4g wqAjwqDCoGlmbmRlZiBZWUZSRUUKPiDCoCPCoMKgwqBkZWZpbmUgWVlGUkVFIGZyZWUKPiAtI8Kg wqDCoGlmICEgZGVmaW5lZCBmcmVlICYmICEgZGVmaW5lZCBfU1RETElCX0ggJiYgKGRlZmluZWQg X19TVERDX18gfHwKPiBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAo+ICsjwqDCoMKgaWYgISBkZWZp bmVkIGZyZWUgJiYgISBkZWZpbmVkIEVYSVRfU1VDQ0VTUyAmJiAoZGVmaW5lZCBfX1NURENfXyB8 fAo+IGRlZmluZWQgX19DOTlfX0ZVTkNfXyBcCj4gwqDCoMKgwqDCoMKgfHwgZGVmaW5lZCBfX2Nw bHVzcGx1cyB8fCBkZWZpbmVkIF9NU0NfVkVSKQo+IMKgdm9pZCBmcmVlICh2b2lkICopOyAvKiBJ TkZSSU5HRVMgT04gVVNFUiBOQU1FIFNQQUNFICovCj4gwqAjwqDCoMKgZW5kaWYKPiBAQCAtMzM2 LDIzICszMzQsNyBAQCB1bmlvbiB5eWFsbG9jCj4gwqDCoMKgwqDCoMKgKChOKSAqIChzaXplb2Yg KHl5dHlwZV9pbnQxNikgKyBzaXplb2YgKFlZU1RZUEUpICsgc2l6ZW9mCj4gKFlZTFRZUEUpKSBc Cj4gwqDCoMKgwqDCoMKgwqArIDIgKiBZWVNUQUNLX0dBUF9NQVhJTVVNKQo+IMKgCj4gLS8qIENv cHkgQ09VTlQgb2JqZWN0cyBmcm9tIEZST00gdG8gVE8uwqDCoFRoZSBzb3VyY2UgYW5kIGRlc3Rp bmF0aW9uIGRvCj4gLcKgwqDCoG5vdCBvdmVybGFwLsKgwqAqLwo+IC0jIGlmbmRlZiBZWUNPUFkK PiAtI8KgwqBpZiBkZWZpbmVkIF9fR05VQ19fICYmIDEgPCBfX0dOVUNfXwo+IC0jwqDCoMKgZGVm aW5lIFlZQ09QWShUbywgRnJvbSwgQ291bnQpIFwKPiAtwqDCoMKgwqDCoMKgX19idWlsdGluX21l bWNweSAoVG8sIEZyb20sIChDb3VudCkgKiBzaXplb2YgKCooRnJvbSkpKQo+IC0jwqDCoGVsc2UK PiAtI8KgwqDCoGRlZmluZSBZWUNPUFkoVG8sIEZyb20sIENvdW50KQkJXAo+IC3CoMKgwqDCoMKg wqBkbwkJCQkJXAo+IC0JewkJCQkJXAo+IC0JwqDCoFlZU0laRV9UIHl5aTsJCQkJXAo+IC0JwqDC oGZvciAoeXlpID0gMDsgeXlpIDwgKENvdW50KTsgeXlpKyspCVwKPiAtCcKgwqDCoMKgKFRvKVt5 eWldID0gKEZyb20pW3l5aV07CQlcCj4gLQl9CQkJCQlcCj4gLcKgwqDCoMKgwqDCoHdoaWxlIChZ WUlEICgwKSkKPiAtI8KgwqBlbmRpZgo+IC0jIGVuZGlmCj4gKyMgZGVmaW5lIFlZQ09QWV9ORUVE RUQgMQo+IMKgCj4gwqAvKiBSZWxvY2F0ZSBTVEFDSyBmcm9tIGl0cyBvbGQgbG9jYXRpb24gdG8g dGhlIG5ldyBvbmUuwqDCoFRoZQo+IMKgwqDCoMKgbG9jYWwgdmFyaWFibGVzIFlZU0laRSBhbmQg WVlTVEFDS1NJWkUgZ2l2ZSB0aGUgb2xkIGFuZCBuZXcgbnVtYmVyIG9mCj4gQEAgLTM3Miw2ICsz NTQsMjYgQEAgdW5pb24geXlhbGxvYwo+IMKgCj4gwqAjZW5kaWYKPiDCoAo+ICsjaWYgZGVmaW5l ZCBZWUNPUFlfTkVFREVEICYmIFlZQ09QWV9ORUVERUQKPiArLyogQ29weSBDT1VOVCBvYmplY3Rz IGZyb20gRlJPTSB0byBUTy7CoMKgVGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gZG8KPiArwqDC oMKgbm90IG92ZXJsYXAuwqDCoCovCj4gKyMgaWZuZGVmIFlZQ09QWQo+ICsjwqDCoGlmIGRlZmlu ZWQgX19HTlVDX18gJiYgMSA8IF9fR05VQ19fCj4gKyPCoMKgwqBkZWZpbmUgWVlDT1BZKFRvLCBG cm9tLCBDb3VudCkgXAo+ICvCoMKgwqDCoMKgwqBfX2J1aWx0aW5fbWVtY3B5IChUbywgRnJvbSwg KENvdW50KSAqIHNpemVvZiAoKihGcm9tKSkpCj4gKyPCoMKgZWxzZQo+ICsjwqDCoMKgZGVmaW5l IFlZQ09QWShUbywgRnJvbSwgQ291bnQpCQlcCj4gK8KgwqDCoMKgwqDCoGRvCQkJCQlcCj4gKwl7 CQkJCQlcCj4gKwnCoMKgWVlTSVpFX1QgeXlpOwkJCQlcCj4gKwnCoMKgZm9yICh5eWkgPSAwOyB5 eWkgPCAoQ291bnQpOyB5eWkrKykJXAo+ICsJwqDCoMKgwqAoVG8pW3l5aV0gPSAoRnJvbSlbeXlp XTsJCVwKPiArCX0JCQkJCVwKPiArwqDCoMKgwqDCoMKgd2hpbGUgKFlZSUQgKDApKQo+ICsjwqDC oGVuZGlmCj4gKyMgZW5kaWYKPiArI2VuZGlmIC8qICFZWUNPUFlfTkVFREVEICovCj4gKwo+IMKg LyogWVlGSU5BTCAtLSBTdGF0ZSBudW1iZXIgb2YgdGhlIHRlcm1pbmF0aW9uIHN0YXRlLsKgwqAq Lwo+IMKgI2RlZmluZSBZWUZJTkFMwqDCoDMKPiDCoC8qIFlZTEFTVCAtLSBMYXN0IGluZGV4IGlu IFlZVEFCTEUuwqDCoCovCj4gQEAgLTQ5Miw4ICs0OTQsOCBAQCBzdGF0aWMgY29uc3QgeXl0eXBl X3VpbnQ4IHl5cjJbXSA9Cj4gwqDCoMKgwqDCoMKgwqDCoDUswqDCoMKgwqDCoDAswqDCoMKgwqDC oDIKPiDCoH07Cj4gwqAKPiAtLyogWVlERUZBQ1RbU1RBVEUtTkFNRV0gLS0gRGVmYXVsdCBydWxl IHRvIHJlZHVjZSB3aXRoIGluIHN0YXRlCj4gLcKgwqDCoFNUQVRFLU5VTSB3aGVuIFlZVEFCTEUg ZG9lc24ndCBzcGVjaWZ5IHNvbWV0aGluZyBlbHNlIHRvIGRvLsKgwqBaZXJvCj4gKy8qIFlZREVG QUNUW1NUQVRFLU5BTUVdIC0tIERlZmF1bHQgcmVkdWN0aW9uIG51bWJlciBpbiBzdGF0ZSBTVEFU RS1OVU0uCj4gK8KgwqDCoFBlcmZvcm1lZCB3aGVuIFlZVEFCTEUgZG9lc24ndCBzcGVjaWZ5IHNv bWV0aGluZyBlbHNlIHRvIGRvLsKgwqBaZXJvCj4gwqDCoMKgwqBtZWFucyB0aGUgZGVmYXVsdCBp cyBhbiBlcnJvci7CoMKgKi8KPiDCoHN0YXRpYyBjb25zdCB5eXR5cGVfdWludDggeXlkZWZhY3Rb XSA9Cj4gwqB7Cj4gQEAgLTUyOCw4ICs1MzAsNyBAQCBzdGF0aWMgY29uc3QgeXl0eXBlX2ludDgg eXlwZ290b1tdID0KPiDCoAo+IMKgLyogWVlUQUJMRVtZWVBBQ1RbU1RBVEUtTlVNXV0uwqDCoFdo YXQgdG8gZG8gaW4gc3RhdGUgU1RBVEUtTlVNLsKgwqBJZgo+IMKgwqDCoMKgcG9zaXRpdmUsIHNo aWZ0IHRoYXQgdG9rZW4uwqDCoElmIG5lZ2F0aXZlLCByZWR1Y2UgdGhlIHJ1bGUgd2hpY2gKPiAt wqDCoMKgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS7CoMKgSWYgemVybywgZG8gd2hhdCBZWURFRkFD VCBzYXlzLgo+IC3CoMKgwqBJZiBZWVRBQkxFX05JTkYsIHN5bnRheCBlcnJvci7CoMKgKi8KPiAr wqDCoMKgbnVtYmVyIGlzIHRoZSBvcHBvc2l0ZS7CoMKgSWYgWVlUQUJMRV9OSU5GLCBzeW50YXgg ZXJyb3IuwqDCoCovCj4gwqAjZGVmaW5lIFlZVEFCTEVfTklORiAtMwo+IMKgc3RhdGljIGNvbnN0 IHl5dHlwZV9pbnQ4IHl5dGFibGVbXSA9Cj4gwqB7Cj4gQEAgLTUzOCw2ICs1MzksMTIgQEAgc3Rh dGljIGNvbnN0IHl5dHlwZV9pbnQ4IHl5dGFibGVbXSA9Cj4gwqDCoMKgwqDCoMKgwqAxNizCoMKg wqDCoDI2LMKgwqDCoMKgMjUswqDCoMKgwqAyMCzCoMKgwqDCoDEzCj4gwqB9Owo+IMKgCj4gKyNk ZWZpbmUgeXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQoeXlzdGF0ZSkgXAo+ICvCoMKgKCh5eXN0YXRl KSA9PSAoLTE4KSkKPiArCj4gKyNkZWZpbmUgeXl0YWJsZV92YWx1ZV9pc19lcnJvcih5eXRhYmxl X3ZhbHVlKSBcCj4gK8KgwqBZWUlEICgwKQo+ICsKPiDCoHN0YXRpYyBjb25zdCB5eXR5cGVfdWlu dDggeXljaGVja1tdID0KPiDCoHsKPiDCoMKgwqDCoMKgwqDCoMKgMCzCoMKgwqDCoMKgMSzCoMKg wqDCoDE5LMKgwqDCoMKgwqAzLMKgwqDCoMKgwqAwLMKgwqDCoMKgwqA2LMKgwqDCoMKgwqA2LMKg wqDCoMKgMjEswqDCoMKgwqDCoDgswqDCoMKgwqDCoDYsCj4gQEAgLTU2Niw5ICs1NzMsMTggQEAg c3RhdGljIGNvbnN0IHl5dHlwZV91aW50OCB5eXN0b3NbXSA9Cj4gwqAKPiDCoC8qIExpa2UgWVlF UlJPUiBleGNlcHQgZG8gY2FsbCB5eWVycm9yLsKgwqBUaGlzIHJlbWFpbnMgaGVyZSB0ZW1wb3Jh cmlseQo+IMKgwqDCoMKgdG8gZWFzZSB0aGUgdHJhbnNpdGlvbiB0byB0aGUgbmV3IG1lYW5pbmcg b2YgWVlFUlJPUiwgZm9yIEdDQy4KPiAtwqDCoMKgT25jZSBHQ0MgdmVyc2lvbiAyIGhhcyBzdXBw bGFudGVkIHZlcnNpb24gMSwgdGhpcyBjYW4gZ28uwqDCoCovCj4gK8KgwqDCoE9uY2UgR0NDIHZl cnNpb24gMiBoYXMgc3VwcGxhbnRlZCB2ZXJzaW9uIDEsIHRoaXMgY2FuIGdvLsKgwqBIb3dldmVy LAo+ICvCoMKgwqBZWUZBSUwgYXBwZWFycyB0byBiZSBpbiB1c2UuwqDCoE5ldmVydGhlbGVzcywg aXQgaXMgZm9ybWFsbHkgZGVwcmVjYXRlZAo+ICvCoMKgwqBpbiBCaXNvbiAyLjQuMidzIE5FV1Mg ZW50cnksIHdoZXJlIGEgcGxhbiB0byBwaGFzZSBpdCBvdXQgaXMKPiArwqDCoMKgZGlzY3Vzc2Vk LsKgwqAqLwo+IMKgCj4gwqAjZGVmaW5lIFlZRkFJTAkJZ290byB5eWVycmxhYgo+ICsjaWYgZGVm aW5lZCBZWUZBSUwKPiArwqDCoC8qIFRoaXMgaXMgaGVyZSB0byBzdXBwcmVzcyB3YXJuaW5ncyBm cm9tIHRoZSBHQ0MgY3BwJ3MKPiArwqDCoMKgwqDCoC1XdW51c2VkLW1hY3Jvcy7CoMKgTm9ybWFs bHkgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgdGhhdCB3YXJuaW5nLCBidXQKPiArwqDCoMKgwqDCoHNv bWUgdXNlcnMgZG8sIGFuZCB3ZSB3YW50IHRvIG1ha2UgaXQgZWFzeSBmb3IgdXNlcnMgdG8gcmVt b3ZlCj4gK8KgwqDCoMKgwqBZWUZBSUwgdXNlcywgd2hpY2ggd2lsbCBwcm9kdWNlIHdhcm5pbmdz IGZyb20gQmlzb24gMi41LsKgwqAqLwo+ICsjZW5kaWYKPiDCoAo+IMKgI2RlZmluZSBZWVJFQ09W RVJJTkcoKcKgwqAoISF5eWVycnN0YXR1cykKPiDCoAo+IEBAIC01NzgsNyArNTk0LDYgQEAgZG8J CQkJCQkJCj4gCVwKPiDCoMKgwqDCoMKgewkJCQkJCQkJXAo+IMKgwqDCoMKgwqDCoMKgeXljaGFy ID0gKFRva2VuKTsJCQkJCQlcCj4gwqDCoMKgwqDCoMKgwqB5eWx2YWwgPSAoVmFsdWUpOwkJCQkJ CVwKPiAtwqDCoMKgwqDCoMKgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwkJCQlcCj4g wqDCoMKgwqDCoMKgwqBZWVBPUFNUQUNLICgxKTsJCQkJCQlcCj4gwqDCoMKgwqDCoMKgwqBnb3Rv IHl5YmFja3VwOwkJCQkJCVwKPiDCoMKgwqDCoMKgfQkJCQkJCQkJXAo+IEBAIC02MjUsNyArNjQw LDcgQEAgd2hpbGUgKFlZSUQgKDApKQo+IMKgwqDCoMKgd2Ugd29uJ3QgYnJlYWsgdXNlciBjb2Rl OiB3aGVuIHRoZXNlIGFyZSB0aGUgbG9jYXRpb25zIHdlIGtub3cuwqDCoCovCj4gwqAKPiDCoCNp Zm5kZWYgWVlfTE9DQVRJT05fUFJJTlQKPiAtIyBpZiBZWUxUWVBFX0lTX1RSSVZJQUwKPiArIyBp ZiBkZWZpbmVkIFlZTFRZUEVfSVNfVFJJVklBTCAmJiBZWUxUWVBFX0lTX1RSSVZJQUwKPiDCoCPC oMKgZGVmaW5lIFlZX0xPQ0FUSU9OX1BSSU5UKEZpbGUsIExvYykJCQlcCj4gwqDCoMKgwqDCoMKg ZnByaW50ZiAoRmlsZSwgIiVkLiVkLSVkLiVkIiwJCQlcCj4gwqAJwqDCoMKgwqDCoMKgKExvYyku Zmlyc3RfbGluZSwgKExvYykuZmlyc3RfY29sdW1uLAlcCj4gQEAgLTgzNCw3ICs4NDksNiBAQCBp bnQgeXlkZWJ1ZzsKPiDCoCMgZGVmaW5lIFlZTUFYREVQVEggMTAwMDAKPiDCoCNlbmRpZgo+IMKg Cj4gLQwKPiDCoAo+IMKgI2lmIFlZRVJST1JfVkVSQk9TRQo+IMKgCj4gQEAgLTkzNywxMTUgKzk1 MSwxNDIgQEAgeXl0bmFtZXJyIChjaGFyICp5eXJlcywgY29uc3QgY2hhciAqeXlzdHIpCj4gwqB9 Cj4gwqAjIGVuZGlmCj4gwqAKPiAtLyogQ29weSBpbnRvIFlZUkVTVUxUIGFuIGVycm9yIG1lc3Nh Z2UgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4KPiAtwqDCoMKgWVlDSEFSIHdoaWxlIGluIHN0 YXRlIFlZU1RBVEUuwqDCoFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZCwKPiAtwqDC oMKgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGJ5dGUuwqDCoElmIFlZUkVTVUxUIGlz IG51bGwsIGRvIG5vdAo+IC3CoMKgwqBjb3B5IGFueXRoaW5nOyBqdXN0IHJldHVybiB0aGUgbnVt YmVyIG9mIGJ5dGVzIHRoYXQgd291bGQgYmUKPiAtwqDCoMKgY29waWVkLsKgwqBBcyBhIHNwZWNp YWwgY2FzZSwgcmV0dXJuIDAgaWYgYW4gb3JkaW5hcnkgInN5bnRheCBlcnJvciIKPiAtwqDCoMKg bWVzc2FnZSB3aWxsIGRvLsKgwqBSZXR1cm4gWVlTSVpFX01BWElNVU0gaWYgb3ZlcmZsb3cgb2Nj dXJzIGR1cmluZwo+IC3CoMKgwqBzaXplIGNhbGN1bGF0aW9uLsKgwqAqLwo+IC1zdGF0aWMgWVlT SVpFX1QKPiAteXlzeW50YXhfZXJyb3IgKGNoYXIgKnl5cmVzdWx0LCBpbnQgeXlzdGF0ZSwgaW50 IHl5Y2hhcikKPiAtewo+IC3CoMKgaW50IHl5biA9IHl5cGFjdFt5eXN0YXRlXTsKPiArLyogQ29w eSBpbnRvICpZWU1TRywgd2hpY2ggaXMgb2Ygc2l6ZSAqWVlNU0dfQUxMT0MsIGFuIGVycm9yIG1l c3NhZ2UKPiArwqDCoMKgYWJvdXQgdGhlIHVuZXhwZWN0ZWQgdG9rZW4gWVlUT0tFTiBmb3IgdGhl IHN0YXRlIHN0YWNrIHdob3NlIHRvcCBpcwo+ICvCoMKgwqBZWVNTUC4KPiDCoAo+IC3CoMKgaWYg KCEgKFlZUEFDVF9OSU5GIDwgeXluICYmIHl5biA8PSBZWUxBU1QpKQo+IC3CoMKgwqDCoHJldHVy biAwOwo+IC3CoMKgZWxzZQo+ICvCoMKgwqBSZXR1cm4gMCBpZiAqWVlNU0cgd2FzIHN1Y2Nlc3Nm dWxseSB3cml0dGVuLsKgwqBSZXR1cm4gMSBpZiAqWVlNU0cgaXMKPiArwqDCoMKgbm90IGxhcmdl IGVub3VnaCB0byBob2xkIHRoZSBtZXNzYWdlLsKgwqBJbiB0aGF0IGNhc2UsIGFsc28gc2V0Cj4g K8KgwqDCoCpZWU1TR19BTExPQyB0byB0aGUgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzLsKgwqBS ZXR1cm4gMiBpZiB0aGUKPiArwqDCoMKgcmVxdWlyZWQgbnVtYmVyIG9mIGJ5dGVzIGlzIHRvbyBs YXJnZSB0byBzdG9yZS7CoMKgKi8KPiArc3RhdGljIGludAo+ICt5eXN5bnRheF9lcnJvciAoWVlT SVpFX1QgKnl5bXNnX2FsbG9jLCBjaGFyICoqeXltc2csCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgeXl0eXBlX2ludDE2ICp5eXNzcCwgaW50IHl5dG9rZW4pCj4gK3sKPiArwqDC oFlZU0laRV9UIHl5c2l6ZTAgPSB5eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0b2tlbl0pOwo+ICvC oMKgWVlTSVpFX1QgeXlzaXplID0geXlzaXplMDsKPiArwqDCoFlZU0laRV9UIHl5c2l6ZTE7Cj4g K8KgwqBlbnVtIHsgWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKPiArwqDCoC8q IEludGVybmF0aW9uYWxpemVkIGZvcm1hdCBzdHJpbmcuICovCj4gK8KgwqBjb25zdCBjaGFyICp5 eWZvcm1hdCA9IDA7Cj4gK8KgwqAvKiBBcmd1bWVudHMgb2YgeXlmb3JtYXQuICovCj4gK8KgwqBj aGFyIGNvbnN0ICp5eWFyZ1tZWUVSUk9SX1ZFUkJPU0VfQVJHU19NQVhJTVVNXTsKPiArwqDCoC8q IE51bWJlciBvZiByZXBvcnRlZCB0b2tlbnMgKG9uZSBmb3IgdGhlICJ1bmV4cGVjdGVkIiwgb25l IHBlcgo+ICvCoMKgwqDCoMKgImV4cGVjdGVkIikuICovCj4gK8KgwqBpbnQgeXljb3VudCA9IDA7 Cj4gKwo+ICvCoMKgLyogVGhlcmUgYXJlIG1hbnkgcG9zc2liaWxpdGllcyBoZXJlIHRvIGNvbnNp ZGVyOgo+ICvCoMKgwqDCoMKgLSBBc3N1bWUgWVlGQUlMIGlzIG5vdCB1c2VkLsKgwqBJdCdzIHRv byBmbGF3ZWQgdG8gY29uc2lkZXIuwqDCoFNlZQo+ICvCoMKgwqDCoMKgwqDCoDxodHRwOi8vbGlz dHMuZ251Lm9yZy9hcmNoaXZlL2h0bWwvYmlzb24tcGF0Y2hlcy8yMDA5LTEyL21zZzAwMDI0Cj4g Lmh0bWw+Cj4gK8KgwqDCoMKgwqDCoMKgZm9yIGRldGFpbHMuwqDCoFlZRVJST1IgaXMgZmluZSBh cyBpdCBkb2VzIG5vdCBpbnZva2UgdGhpcwo+ICvCoMKgwqDCoMKgwqDCoGZ1bmN0aW9uLgo+ICvC oMKgwqDCoMKgLSBJZiB0aGlzIHN0YXRlIGlzIGEgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVm YXVsdCBhY3Rpb24sIHRoZW4KPiArwqDCoMKgwqDCoMKgwqB0aGUgb25seSB3YXkgdGhpcyBmdW5j dGlvbiB3YXMgaW52b2tlZCBpcyBpZiB0aGUgZGVmYXVsdCBhY3Rpb24KPiArwqDCoMKgwqDCoMKg wqBpcyBhbiBlcnJvciBhY3Rpb24uwqDCoEluIHRoYXQgY2FzZSwgZG9uJ3QgY2hlY2sgZm9yIGV4 cGVjdGVkCj4gK8KgwqDCoMKgwqDCoMKgdG9rZW5zIGJlY2F1c2UgdGhlcmUgYXJlIG5vbmUuCj4g K8KgwqDCoMKgwqAtIFRoZSBvbmx5IHdheSB0aGVyZSBjYW4gYmUgbm8gbG9va2FoZWFkIHByZXNl bnQgKGluIHl5Y2hhcikgaXMgaWYKPiArwqDCoMKgwqDCoMKgwqB0aGlzIHN0YXRlIGlzIGEgY29u c2lzdGVudCBzdGF0ZSB3aXRoIGEgZGVmYXVsdCBhY3Rpb24uwqDCoFRodXMsCj4gK8KgwqDCoMKg wqDCoMKgZGV0ZWN0aW5nIHRoZSBhYnNlbmNlIG9mIGEgbG9va2FoZWFkIGlzIHN1ZmZpY2llbnQg dG8gZGV0ZXJtaW5lCj4gK8KgwqDCoMKgwqDCoMKgdGhhdCB0aGVyZSBpcyBubyB1bmV4cGVjdGVk IG9yIGV4cGVjdGVkIHRva2VuIHRvIHJlcG9ydC7CoMKgSW4gdGhhdAo+ICvCoMKgwqDCoMKgwqDC oGNhc2UsIGp1c3QgcmVwb3J0IGEgc2ltcGxlICJzeW50YXggZXJyb3IiLgo+ICvCoMKgwqDCoMKg LSBEb24ndCBhc3N1bWUgdGhlcmUgaXNuJ3QgYSBsb29rYWhlYWQganVzdCBiZWNhdXNlIHRoaXMg c3RhdGUgaXMgYQo+ICvCoMKgwqDCoMKgwqDCoGNvbnNpc3RlbnQgc3RhdGUgd2l0aCBhIGRlZmF1 bHQgYWN0aW9uLsKgwqBUaGVyZSBtaWdodCBoYXZlIGJlZW4gYQo+ICvCoMKgwqDCoMKgwqDCoHBy ZXZpb3VzIGluY29uc2lzdGVudCBzdGF0ZSwgY29uc2lzdGVudCBzdGF0ZSB3aXRoIGEgbm9uLWRl ZmF1bHQKPiArwqDCoMKgwqDCoMKgwqBhY3Rpb24sIG9yIHVzZXIgc2VtYW50aWMgYWN0aW9uIHRo YXQgbWFuaXB1bGF0ZWQgeXljaGFyLgo+ICvCoMKgwqDCoMKgLSBPZiBjb3Vyc2UsIHRoZSBleHBl Y3RlZCB0b2tlbiBsaXN0IGRlcGVuZHMgb24gc3RhdGVzIHRvIGhhdmUKPiArwqDCoMKgwqDCoMKg wqBjb3JyZWN0IGxvb2thaGVhZCBpbmZvcm1hdGlvbiwgYW5kIGl0IGRlcGVuZHMgb24gdGhlIHBh cnNlciBub3QKPiArwqDCoMKgwqDCoMKgwqB0byBwZXJmb3JtIGV4dHJhIHJlZHVjdGlvbnMgYWZ0 ZXIgZmV0Y2hpbmcgYSBsb29rYWhlYWQgZnJvbSB0aGUKPiArwqDCoMKgwqDCoMKgwqBzY2FubmVy IGFuZCBiZWZvcmUgZGV0ZWN0aW5nIGEgc3ludGF4IGVycm9yLsKgwqBUaHVzLCBzdGF0ZSBtZXJn aW5nCj4gK8KgwqDCoMKgwqDCoMKgKGZyb20gTEFMUiBvciBJRUxSKSBhbmQgZGVmYXVsdCByZWR1 Y3Rpb25zIGNvcnJ1cHQgdGhlIGV4cGVjdGVkCj4gK8KgwqDCoMKgwqDCoMKgdG9rZW4gbGlzdC7C oMKgSG93ZXZlciwgdGhlIGxpc3QgaXMgY29ycmVjdCBmb3IgY2Fub25pY2FsIExSIHdpdGgKPiAr wqDCoMKgwqDCoMKgwqBvbmUgZXhjZXB0aW9uOiBpdCB3aWxsIHN0aWxsIGNvbnRhaW4gYW55IHRv a2VuIHRoYXQgd2lsbCBub3QgYmUKPiArwqDCoMKgwqDCoMKgwqBhY2NlcHRlZCBkdWUgdG8gYW4g ZXJyb3IgYWN0aW9uIGluIGEgbGF0ZXIgc3RhdGUuCj4gK8KgwqAqLwo+ICvCoMKgaWYgKHl5dG9r ZW4gIT0gWVlFTVBUWSkKPiDCoMKgwqDCoMKgewo+IC3CoMKgwqDCoMKgwqBpbnQgeXl0eXBlID0g WVlUUkFOU0xBVEUgKHl5Y2hhcik7Cj4gLcKgwqDCoMKgwqDCoFlZU0laRV9UIHl5c2l6ZTAgPSB5 eXRuYW1lcnIgKDAsIHl5dG5hbWVbeXl0eXBlXSk7Cj4gLcKgwqDCoMKgwqDCoFlZU0laRV9UIHl5 c2l6ZSA9IHl5c2l6ZTA7Cj4gLcKgwqDCoMKgwqDCoFlZU0laRV9UIHl5c2l6ZTE7Cj4gLcKgwqDC oMKgwqDCoGludCB5eXNpemVfb3ZlcmZsb3cgPSAwOwo+IC3CoMKgwqDCoMKgwqBlbnVtIHsgWVlF UlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSA9IDUgfTsKPiAtwqDCoMKgwqDCoMKgY2hhciBjb25z dCAqeXlhcmdbWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTV07Cj4gLcKgwqDCoMKgwqDCoGlu dCB5eXg7Cj4gLQo+IC0jIGlmIDAKPiAtwqDCoMKgwqDCoMKgLyogVGhpcyBpcyBzbyB4Z2V0dGV4 dCBzZWVzIHRoZSB0cmFuc2xhdGFibGUgZm9ybWF0cyB0aGF0IGFyZQo+IC0JwqBjb25zdHJ1Y3Rl ZCBvbiB0aGUgZmx5LsKgwqAqLwo+IC3CoMKgwqDCoMKgwqBZWV8oInN5bnRheCBlcnJvciwgdW5l eHBlY3RlZCAlcyIpOwo+IC3CoMKgwqDCoMKgwqBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3Rl ZCAlcywgZXhwZWN0aW5nICVzIik7Cj4gLcKgwqDCoMKgwqDCoFlZXygic3ludGF4IGVycm9yLCB1 bmV4cGVjdGVkICVzLCBleHBlY3RpbmcgJXMgb3IgJXMiKTsKPiAtwqDCoMKgwqDCoMKgWVlfKCJz eW50YXggZXJyb3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvciAlcyBvciAlcyIpOwo+ IC3CoMKgwqDCoMKgwqBZWV8oInN5bnRheCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5n ICVzIG9yICVzIG9yICVzIG9yCj4gJXMiKTsKPiAtIyBlbmRpZgo+IC3CoMKgwqDCoMKgwqBjaGFy ICp5eWZtdDsKPiAtwqDCoMKgwqDCoMKgY2hhciBjb25zdCAqeXlmOwo+IC3CoMKgwqDCoMKgwqBz dGF0aWMgY2hhciBjb25zdCB5eXVuZXhwZWN0ZWRbXSA9ICJzeW50YXggZXJyb3IsIHVuZXhwZWN0 ZWQgJXMiOwo+IC3CoMKgwqDCoMKgwqBzdGF0aWMgY2hhciBjb25zdCB5eWV4cGVjdGluZ1tdID0g IiwgZXhwZWN0aW5nICVzIjsKPiAtwqDCoMKgwqDCoMKgc3RhdGljIGNoYXIgY29uc3QgeXlvcltd ID0gIiBvciAlcyI7Cj4gLcKgwqDCoMKgwqDCoGNoYXIgeXlmb3JtYXRbc2l6ZW9mIHl5dW5leHBl Y3RlZAo+IC0JCcKgwqDCoMKgKyBzaXplb2YgeXlleHBlY3RpbmcgLSAxCj4gLQkJwqDCoMKgwqAr ICgoWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFYSU1VTSAtIDIpCj4gLQkJwqDCoMKgwqDCoMKgwqAq IChzaXplb2YgeXlvciAtIDEpKV07Cj4gLcKgwqDCoMKgwqDCoGNoYXIgY29uc3QgKnl5cHJlZml4 ID0geXlleHBlY3Rpbmc7Cj4gLQo+IC3CoMKgwqDCoMKgwqAvKiBTdGFydCBZWVggYXQgLVlZTiBp ZiBuZWdhdGl2ZSB0byBhdm9pZCBuZWdhdGl2ZSBpbmRleGVzIGluCj4gLQnCoFlZQ0hFQ0suwqDC oCovCj4gLcKgwqDCoMKgwqDCoGludCB5eXhiZWdpbiA9IHl5biA8IDAgPyAteXluIDogMDsKPiAt Cj4gLcKgwqDCoMKgwqDCoC8qIFN0YXkgd2l0aGluIGJvdW5kcyBvZiBib3RoIHl5Y2hlY2sgYW5k IHl5dG5hbWUuwqDCoCovCj4gLcKgwqDCoMKgwqDCoGludCB5eWNoZWNrbGltID0gWVlMQVNUIC0g eXluICsgMTsKPiAtwqDCoMKgwqDCoMKgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5UT0tF TlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwo+IC3CoMKgwqDCoMKgwqBpbnQgeXljb3VudCA9 IDE7Cj4gLQo+IC3CoMKgwqDCoMKgwqB5eWFyZ1swXSA9IHl5dG5hbWVbeXl0eXBlXTsKPiAtwqDC oMKgwqDCoMKgeXlmbXQgPSB5eXN0cGNweSAoeXlmb3JtYXQsIHl5dW5leHBlY3RlZCk7Cj4gLQo+ IC3CoMKgwqDCoMKgwqBmb3IgKHl5eCA9IHl5eGJlZ2luOyB5eXggPCB5eXhlbmQ7ICsreXl4KQo+ IC0JaWYgKHl5Y2hlY2tbeXl4ICsgeXluXSA9PSB5eXggJiYgeXl4ICE9IFlZVEVSUk9SKQo+IC0J wqDCoHsKPiAtCcKgwqDCoMKgaWYgKHl5Y291bnQgPT0gWVlFUlJPUl9WRVJCT1NFX0FSR1NfTUFY SU1VTSkKPiAtCcKgwqDCoMKgwqDCoHsKPiAtCQl5eWNvdW50ID0gMTsKPiAtCQl5eXNpemUgPSB5 eXNpemUwOwo+IC0JCXl5Zm9ybWF0W3NpemVvZiB5eXVuZXhwZWN0ZWQgLSAxXSA9ICdcMCc7Cj4g LQkJYnJlYWs7Cj4gLQnCoMKgwqDCoMKgwqB9Cj4gLQnCoMKgwqDCoHl5YXJnW3l5Y291bnQrK10g PSB5eXRuYW1lW3l5eF07Cj4gLQnCoMKgwqDCoHl5c2l6ZTEgPSB5eXNpemUgKyB5eXRuYW1lcnIg KDAsIHl5dG5hbWVbeXl4XSk7Cj4gLQnCoMKgwqDCoHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXpl MSA8IHl5c2l6ZSk7Cj4gLQnCoMKgwqDCoHl5c2l6ZSA9IHl5c2l6ZTE7Cj4gLQnCoMKgwqDCoHl5 Zm10ID0geXlzdHBjcHkgKHl5Zm10LCB5eXByZWZpeCk7Cj4gLQnCoMKgwqDCoHl5cHJlZml4ID0g eXlvcjsKPiAtCcKgwqB9Cj4gK8KgwqDCoMKgwqDCoGludCB5eW4gPSB5eXBhY3RbKnl5c3NwXTsK PiArwqDCoMKgwqDCoMKgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl0b2tlbl07Cj4gK8Kg wqDCoMKgwqDCoGlmICgheXlwYWN0X3ZhbHVlX2lzX2RlZmF1bHQgKHl5bikpCj4gK8KgwqDCoMKg wqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgLyogU3RhcnQgWVlYIGF0IC1ZWU4gaWYg bmVnYXRpdmUgdG8gYXZvaWQgbmVnYXRpdmUgaW5kZXhlcyBpbgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFlZQ0hFQ0suwqDCoEluIG90aGVyIHdvcmRzLCBza2lwIHRoZSBmaXJzdCAtWVlO IGFjdGlvbnMgZm9yCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdGhpcyBzdGF0ZSBiZWNh dXNlIHRoZXkgYXJlIGRlZmF1bHQgYWN0aW9ucy7CoMKgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKg wqBpbnQgeXl4YmVnaW4gPSB5eW4gPCAwID8gLXl5biA6IDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgLyogU3RheSB3aXRoaW4gYm91bmRzIG9mIGJvdGggeXljaGVjayBhbmQgeXl0bmFtZS7CoMKg Ki8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqBpbnQgeXljaGVja2xpbSA9IFlZTEFTVCAtIHl5biAr IDE7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgaW50IHl5eGVuZCA9IHl5Y2hlY2tsaW0gPCBZWU5U T0tFTlMgPyB5eWNoZWNrbGltIDogWVlOVE9LRU5TOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGlu dCB5eXg7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoeXl4ID0geXl4YmVnaW47IHl5 eCA8IHl5eGVuZDsgKyt5eXgpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh5eWNoZWNr W3l5eCArIHl5bl0gPT0geXl4ICYmIHl5eCAhPSBZWVRFUlJPUgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCYmICF5eXRhYmxlX3ZhbHVlX2lzX2Vycm9yICh5eXRhYmxlW3l5eCAr IHl5bl0pKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGlmICh5eWNvdW50ID09IFlZRVJST1JfVkVSQk9TRV9BUkdTX01B WElNVU0pCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHl5Y291bnQgPSAxOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeXlzaXplID0geXlzaXplMDsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgeXlhcmdbeXljb3VudCsrXSA9IHl5dG5hbWVbeXl4XTsKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB5eXNpemUxID0geXlzaXplICsgeXl0bmFtZXJyICgwLCB5eXRuYW1l W3l5eF0pOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICghICh5eXNpemUg PD0geXlzaXplMQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqB5eXNpemUgPSB5eXNpemUxOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoH0KPiDCoAo+IC3CoMKgwqDCoMKg wqB5eWYgPSBZWV8oeXlmb3JtYXQpOwo+IC3CoMKgwqDCoMKgwqB5eXNpemUxID0geXlzaXplICsg eXlzdHJsZW4gKHl5Zik7Cj4gLcKgwqDCoMKgwqDCoHl5c2l6ZV9vdmVyZmxvdyB8PSAoeXlzaXpl MSA8IHl5c2l6ZSk7Cj4gLcKgwqDCoMKgwqDCoHl5c2l6ZSA9IHl5c2l6ZTE7Cj4gK8KgwqBzd2l0 Y2ggKHl5Y291bnQpCj4gK8KgwqDCoMKgewo+ICsjIGRlZmluZSBZWUNBU0VfKE4sIFMpwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBcCj4gK8KgwqDCoMKgwqDCoGNh c2UgTjrCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoFwKPiArwqDCoMKgwqDCoMKgwqDCoHl5Zm9ybWF0ID0gUzvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgXAo+ICvCoMKgwqDCoMKgwqBicmVhawo+ ICvCoMKgwqDCoMKgwqBZWUNBU0VfKDAsIFlZXygic3ludGF4IGVycm9yIikpOwo+ICvCoMKgwqDC oMKgwqBZWUNBU0VfKDEsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzIikpOwo+ICvC oMKgwqDCoMKgwqBZWUNBU0VfKDIsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBl eHBlY3RpbmcgJXMiKSk7Cj4gK8KgwqDCoMKgwqDCoFlZQ0FTRV8oMywgWVlfKCJzeW50YXggZXJy b3IsIHVuZXhwZWN0ZWQgJXMsIGV4cGVjdGluZyAlcyBvcgo+ICVzIikpOwo+ICvCoMKgwqDCoMKg wqBZWUNBU0VfKDQsIFlZXygic3ludGF4IGVycm9yLCB1bmV4cGVjdGVkICVzLCBleHBlY3Rpbmcg JXMgb3IgJXMgb3IKPiAlcyIpKTsKPiArwqDCoMKgwqDCoMKgWVlDQVNFXyg1LCBZWV8oInN5bnRh eCBlcnJvciwgdW5leHBlY3RlZCAlcywgZXhwZWN0aW5nICVzIG9yICVzIG9yCj4gJXMgb3IgJXMi KSk7Cj4gKyMgdW5kZWYgWVlDQVNFXwo+ICvCoMKgwqDCoH0KPiDCoAo+IC3CoMKgwqDCoMKgwqBp ZiAoeXlzaXplX292ZXJmbG93KQo+IC0JcmV0dXJuIFlZU0laRV9NQVhJTVVNOwo+ICvCoMKgeXlz aXplMSA9IHl5c2l6ZSArIHl5c3RybGVuICh5eWZvcm1hdCk7Cj4gK8KgwqBpZiAoISAoeXlzaXpl IDw9IHl5c2l6ZTEgJiYgeXlzaXplMSA8PSBZWVNUQUNLX0FMTE9DX01BWElNVU0pKQo+ICvCoMKg wqDCoHJldHVybiAyOwo+ICvCoMKgeXlzaXplID0geXlzaXplMTsKPiDCoAo+IC3CoMKgwqDCoMKg wqBpZiAoeXlyZXN1bHQpCj4gLQl7Cj4gLQnCoMKgLyogQXZvaWQgc3ByaW50ZiwgYXMgdGhhdCBp bmZyaW5nZXMgb24gdGhlIHVzZXIncyBuYW1lIHNwYWNlLgo+IC0JwqDCoMKgwqDCoERvbid0IGhh dmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhlIHRyYW5zbGF0aW9uCj4gLQnCoMKgwqDC oMKgcHJvZHVjZWQgYSBzdHJpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mICIlcyJzLsKgwqAq Lwo+IC0JwqDCoGNoYXIgKnl5cCA9IHl5cmVzdWx0Owo+IC0JwqDCoGludCB5eWkgPSAwOwo+IC0J wqDCoHdoaWxlICgoKnl5cCA9ICp5eWYpICE9ICdcMCcpCj4gLQnCoMKgwqDCoHsKPiAtCcKgwqDC oMKgwqDCoGlmICgqeXlwID09ICclJyAmJiB5eWZbMV0gPT0gJ3MnICYmIHl5aSA8IHl5Y291bnQp Cj4gLQkJewo+IC0JCcKgwqB5eXAgKz0geXl0bmFtZXJyICh5eXAsIHl5YXJnW3l5aSsrXSk7Cj4g LQkJwqDCoHl5ZiArPSAyOwo+IC0JCX0KPiAtCcKgwqDCoMKgwqDCoGVsc2UKPiAtCQl7Cj4gLQkJ wqDCoHl5cCsrOwo+IC0JCcKgwqB5eWYrKzsKPiAtCQl9Cj4gLQnCoMKgwqDCoH0KPiAtCX0KPiAt wqDCoMKgwqDCoMKgcmV0dXJuIHl5c2l6ZTsKPiArwqDCoGlmICgqeXltc2dfYWxsb2MgPCB5eXNp emUpCj4gK8KgwqDCoMKgewo+ICvCoMKgwqDCoMKgwqAqeXltc2dfYWxsb2MgPSAyICogeXlzaXpl Owo+ICvCoMKgwqDCoMKgwqBpZiAoISAoeXlzaXplIDw9ICp5eW1zZ19hbGxvYwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCYmICp5eW1zZ19hbGxvYyA8PSBZWVNUQUNLX0FMTE9DX01BWElN VU0pKQo+ICvCoMKgwqDCoMKgwqDCoMKgKnl5bXNnX2FsbG9jID0gWVlTVEFDS19BTExPQ19NQVhJ TVVNOwo+ICvCoMKgwqDCoMKgwqByZXR1cm4gMTsKPiDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoC8q IEF2b2lkIHNwcmludGYsIGFzIHRoYXQgaW5mcmluZ2VzIG9uIHRoZSB1c2VyJ3MgbmFtZSBzcGFj ZS4KPiArwqDCoMKgwqDCoERvbid0IGhhdmUgdW5kZWZpbmVkIGJlaGF2aW9yIGV2ZW4gaWYgdGhl IHRyYW5zbGF0aW9uCj4gK8KgwqDCoMKgwqBwcm9kdWNlZCBhIHN0cmluZyB3aXRoIHRoZSB3cm9u ZyBudW1iZXIgb2YgIiVzInMuwqDCoCovCj4gK8KgwqB7Cj4gK8KgwqDCoMKgY2hhciAqeXlwID0g Knl5bXNnOwo+ICvCoMKgwqDCoGludCB5eWkgPSAwOwo+ICvCoMKgwqDCoHdoaWxlICgoKnl5cCA9 ICp5eWZvcm1hdCkgIT0gJ1wwJykKPiArwqDCoMKgwqDCoMKgaWYgKCp5eXAgPT0gJyUnICYmIHl5 Zm9ybWF0WzFdID09ICdzJyAmJiB5eWkgPCB5eWNvdW50KQo+ICvCoMKgwqDCoMKgwqDCoMKgewo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoHl5cCArPSB5eXRuYW1lcnIgKHl5cCwgeXlhcmdbeXlpKytd KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqB5eWZvcm1hdCArPSAyOwo+ICvCoMKgwqDCoMKgwqDC oMKgfQo+ICvCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqB7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgeXlwKys7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgeXlmb3JtYXQrKzsKPiAr wqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoH0KPiArwqDCoHJldHVybiAwOwo+IMKgfQo+IMKgI2Vu ZGlmIC8qIFlZRVJST1JfVkVSQk9TRSAqLwo+IC0MCj4gwqAKPiDCoC8qLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uCj4gwqB8IFJlbGVhc2UgdGhlIG1lbW9y eSBhc3NvY2lhdGVkIHRvIHRoaXMgc3ltYm9sLsKgwqB8Cj4gQEAgLTEwNzgsNjYgKzExMTksNjYg QEAgeXlkZXN0cnVjdCAoeXltc2csIHl5dHlwZSwgeXl2YWx1ZXAsIHl5bG9jYXRpb25wLAo+IGN0 eCkKPiDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgY2FzZSAzOiAvKiAiSURFTlQiICovCj4g wqAKPiAtLyogTGluZSAxMDAwIG9mIHlhY2MuY8KgwqAqLwo+ICsvKiBMaW5lIDEzOTEgb2YgeWFj Yy5jwqDCoCovCj4gwqAjbGluZSA0MCAibGlieGx1X2NmZ195LnkiCj4gwqAJeyBmcmVlKCh5eXZh bHVlcC0+c3RyaW5nKSk7IH07Cj4gwqAKPiAtLyogTGluZSAxMDAwIG9mIHlhY2MuY8KgwqAqLwo+ IC0jbGluZSAxMDg3ICJsaWJ4bHVfY2ZnX3kuYyIKPiArLyogTGluZSAxMzkxIG9mIHlhY2MuY8Kg wqAqLwo+ICsjbGluZSAxMTI4ICJsaWJ4bHVfY2ZnX3kuYyIKPiDCoAlicmVhazsKPiDCoMKgwqDC oMKgwqDCoGNhc2UgNDogLyogIlNUUklORyIgKi8KPiDCoAo+IC0vKiBMaW5lIDEwMDAgb2YgeWFj Yy5jwqDCoCovCj4gKy8qIExpbmUgMTM5MSBvZiB5YWNjLmPCoMKgKi8KPiDCoCNsaW5lIDQwICJs aWJ4bHVfY2ZnX3kueSIKPiDCoAl7IGZyZWUoKHl5dmFsdWVwLT5zdHJpbmcpKTsgfTsKPiDCoAo+ IC0vKiBMaW5lIDEwMDAgb2YgeWFjYy5jwqDCoCovCj4gLSNsaW5lIDEwOTYgImxpYnhsdV9jZmdf eS5jIgo+ICsvKiBMaW5lIDEzOTEgb2YgeWFjYy5jwqDCoCovCj4gKyNsaW5lIDExMzcgImxpYnhs dV9jZmdfeS5jIgo+IMKgCWJyZWFrOwo+IMKgwqDCoMKgwqDCoMKgY2FzZSA1OiAvKiAiTlVNQkVS IiAqLwo+IMKgCj4gLS8qIExpbmUgMTAwMCBvZiB5YWNjLmPCoMKgKi8KPiArLyogTGluZSAxMzkx IG9mIHlhY2MuY8KgwqAqLwo+IMKgI2xpbmUgNDAgImxpYnhsdV9jZmdfeS55Igo+IMKgCXsgZnJl ZSgoeXl2YWx1ZXAtPnN0cmluZykpOyB9Owo+IMKgCj4gLS8qIExpbmUgMTAwMCBvZiB5YWNjLmPC oMKgKi8KPiAtI2xpbmUgMTEwNSAibGlieGx1X2NmZ195LmMiCj4gKy8qIExpbmUgMTM5MSBvZiB5 YWNjLmPCoMKgKi8KPiArI2xpbmUgMTE0NiAibGlieGx1X2NmZ195LmMiCj4gwqAJYnJlYWs7Cj4g wqDCoMKgwqDCoMKgwqBjYXNlIDE4OiAvKiAidmFsdWUiICovCj4gwqAKPiAtLyogTGluZSAxMDAw IG9mIHlhY2MuY8KgwqAqLwo+ICsvKiBMaW5lIDEzOTEgb2YgeWFjYy5jwqDCoCovCj4gwqAjbGlu ZSA0MyAibGlieGx1X2NmZ195LnkiCj4gwqAJeyB4bHVfX2NmZ19zZXRfZnJlZSgoeXl2YWx1ZXAt PnNldHRpbmcpKTsgfTsKPiDCoAo+IC0vKiBMaW5lIDEwMDAgb2YgeWFjYy5jwqDCoCovCj4gLSNs aW5lIDExMTQgImxpYnhsdV9jZmdfeS5jIgo+ICsvKiBMaW5lIDEzOTEgb2YgeWFjYy5jwqDCoCov Cj4gKyNsaW5lIDExNTUgImxpYnhsdV9jZmdfeS5jIgo+IMKgCWJyZWFrOwo+IMKgwqDCoMKgwqDC oMKgY2FzZSAxOTogLyogImF0b20iICovCj4gwqAKPiAtLyogTGluZSAxMDAwIG9mIHlhY2MuY8Kg wqAqLwo+ICsvKiBMaW5lIDEzOTEgb2YgeWFjYy5jwqDCoCovCj4gwqAjbGluZSA0MCAibGlieGx1 X2NmZ195LnkiCj4gwqAJeyBmcmVlKCh5eXZhbHVlcC0+c3RyaW5nKSk7IH07Cj4gwqAKPiAtLyog TGluZSAxMDAwIG9mIHlhY2MuY8KgwqAqLwo+IC0jbGluZSAxMTIzICJsaWJ4bHVfY2ZnX3kuYyIK PiArLyogTGluZSAxMzkxIG9mIHlhY2MuY8KgwqAqLwo+ICsjbGluZSAxMTY0ICJsaWJ4bHVfY2Zn X3kuYyIKPiDCoAlicmVhazsKPiDCoMKgwqDCoMKgwqDCoGNhc2UgMjA6IC8qICJ2YWx1ZWxpc3Qi ICovCj4gwqAKPiAtLyogTGluZSAxMDAwIG9mIHlhY2MuY8KgwqAqLwo+ICsvKiBMaW5lIDEzOTEg b2YgeWFjYy5jwqDCoCovCj4gwqAjbGluZSA0MyAibGlieGx1X2NmZ195LnkiCj4gwqAJeyB4bHVf X2NmZ19zZXRfZnJlZSgoeXl2YWx1ZXAtPnNldHRpbmcpKTsgfTsKPiDCoAo+IC0vKiBMaW5lIDEw MDAgb2YgeWFjYy5jwqDCoCovCj4gLSNsaW5lIDExMzIgImxpYnhsdV9jZmdfeS5jIgo+ICsvKiBM aW5lIDEzOTEgb2YgeWFjYy5jwqDCoCovCj4gKyNsaW5lIDExNzMgImxpYnhsdV9jZmdfeS5jIgo+ IMKgCWJyZWFrOwo+IMKgwqDCoMKgwqDCoMKgY2FzZSAyMTogLyogInZhbHVlcyIgKi8KPiDCoAo+ IC0vKiBMaW5lIDEwMDAgb2YgeWFjYy5jwqDCoCovCj4gKy8qIExpbmUgMTM5MSBvZiB5YWNjLmPC oMKgKi8KPiDCoCNsaW5lIDQzICJsaWJ4bHVfY2ZnX3kueSIKPiDCoAl7IHhsdV9fY2ZnX3NldF9m cmVlKCh5eXZhbHVlcC0+c2V0dGluZykpOyB9Owo+IMKgCj4gLS8qIExpbmUgMTAwMCBvZiB5YWNj LmPCoMKgKi8KPiAtI2xpbmUgMTE0MSAibGlieGx1X2NmZ195LmMiCj4gKy8qIExpbmUgMTM5MSBv ZiB5YWNjLmPCoMKgKi8KPiArI2xpbmUgMTE4MiAibGlieGx1X2NmZ195LmMiCj4gwqAJYnJlYWs7 Cj4gwqAKPiDCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gQEAgLTExNDUsNiArMTE4Niw3IEBAIHl5 ZGVzdHJ1Y3QgKHl5bXNnLCB5eXR5cGUsIHl5dmFsdWVwLCB5eWxvY2F0aW9ucCwKPiBjdHgpCj4g wqDCoMKgwqDCoH0KPiDCoH0KPiDCoAo+ICsKPiDCoC8qIFByZXZlbnQgd2FybmluZ3MgZnJvbSAt V21pc3NpbmctcHJvdG90eXBlcy7CoMKgKi8KPiDCoCNpZmRlZiBZWVBBUlNFX1BBUkFNCj4gwqAj aWYgZGVmaW5lZCBfX1NURENfXyB8fCBkZWZpbmVkIF9fY3BsdXNwbHVzCj4gQEAgLTExNjEsMTIg KzEyMDMsOSBAQCBpbnQgeXlwYXJzZSAoKTsKPiDCoCNlbmRpZiAvKiAhIFlZUEFSU0VfUEFSQU0g Ki8KPiDCoAo+IMKgCj4gLQo+IC0KPiAtCj4gLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS4K PiAtfCB5eXBhcnNlIG9yIHl5cHVzaF9wYXJzZS7CoMKgfAo+IC1gLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSovCj4gKy8qLS0tLS0tLS0tLS4KPiArfCB5eXBhcnNlLsKgwqB8Cj4gK2AtLS0tLS0t LS0tKi8KPiDCoAo+IMKgI2lmZGVmIFlZUEFSU0VfUEFSQU0KPiDCoCNpZiAoZGVmaW5lZCBfX1NU RENfXyB8fCBkZWZpbmVkIF9fQzk5X19GVU5DX18gXAo+IEBAIC0xMjMwLDcgKzEyNjksNyBAQCBZ WUxUWVBFIHl5bGxvYzsKPiDCoMKgwqDCoMKgWVlMVFlQRSAqeXlsc3A7Cj4gwqAKPiDCoMKgwqDC oMKgLyogVGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgZXJyb3Igc3RhcnRlZCBhbmQgZW5kZWQuwqDC oCovCj4gLcKgwqDCoMKgWVlMVFlQRSB5eWVycm9yX3JhbmdlWzJdOwo+ICvCoMKgwqDCoFlZTFRZ UEUgeXllcnJvcl9yYW5nZVszXTsKPiDCoAo+IMKgwqDCoMKgwqBZWVNJWkVfVCB5eXN0YWNrc2l6 ZTsKPiDCoAo+IEBAIC0xMjc3LDcgKzEzMTYsNyBAQCBZWUxUWVBFIHl5bGxvYzsKPiDCoMKgwqB5 eXZzcCA9IHl5dnM7Cj4gwqDCoMKgeXlsc3AgPSB5eWxzOwo+IMKgCj4gLSNpZiBZWUxUWVBFX0lT X1RSSVZJQUwKPiArI2lmIGRlZmluZWQgWVlMVFlQRV9JU19UUklWSUFMICYmIFlZTFRZUEVfSVNf VFJJVklBTAo+IMKgwqDCoC8qIEluaXRpYWxpemUgdGhlIGRlZmF1bHQgbG9jYXRpb24gYmVmb3Jl IHBhcnNpbmcgc3RhcnRzLsKgwqAqLwo+IMKgwqDCoHl5bGxvYy5maXJzdF9saW5lwqDCoMKgPSB5 eWxsb2MubGFzdF9saW5lwqDCoMKgPSAxOwo+IMKgwqDCoHl5bGxvYy5maXJzdF9jb2x1bW4gPSB5 eWxsb2MubGFzdF9jb2x1bW4gPSAxOwo+IEBAIC0xMzc5LDcgKzE0MTgsNyBAQCB5eWJhY2t1cDoK PiDCoAo+IMKgwqDCoC8qIEZpcnN0IHRyeSB0byBkZWNpZGUgd2hhdCB0byBkbyB3aXRob3V0IHJl ZmVyZW5jZSB0byBsb29rYWhlYWQKPiB0b2tlbi7CoMKgKi8KPiDCoMKgwqB5eW4gPSB5eXBhY3Rb eXlzdGF0ZV07Cj4gLcKgwqBpZiAoeXluID09IFlZUEFDVF9OSU5GKQo+ICvCoMKgaWYgKHl5cGFj dF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQo+IMKgwqDCoMKgwqBnb3RvIHl5ZGVmYXVsdDsKPiDC oAo+IMKgwqDCoC8qIE5vdCBrbm93biA9PiBnZXQgYSBsb29rYWhlYWQgdG9rZW4gaWYgZG9uJ3Qg YWxyZWFkeSBoYXZlIG9uZS7CoMKgKi8KPiBAQCAtMTQxMCw4ICsxNDQ5LDggQEAgeXliYWNrdXA6 Cj4gwqDCoMKgeXluID0geXl0YWJsZVt5eW5dOwo+IMKgwqDCoGlmICh5eW4gPD0gMCkKPiDCoMKg wqDCoMKgewo+IC3CoMKgwqDCoMKgwqBpZiAoeXluID09IDAgfHwgeXluID09IFlZVEFCTEVfTklO RikKPiAtCWdvdG8geXllcnJsYWI7Cj4gK8KgwqDCoMKgwqDCoGlmICh5eXRhYmxlX3ZhbHVlX2lz X2Vycm9yICh5eW4pKQo+ICvCoMKgwqDCoMKgwqDCoMKgZ290byB5eWVycmxhYjsKPiDCoMKgwqDC oMKgwqDCoHl5biA9IC15eW47Cj4gwqDCoMKgwqDCoMKgwqBnb3RvIHl5cmVkdWNlOwo+IMKgwqDC oMKgwqB9Cj4gQEAgLTE0NjcsODAgKzE1MDYsOTEgQEAgeXlyZWR1Y2U6Cj4gwqDCoMKgwqDCoHsK PiDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIDk6Cj4gwqAKPiAtLyogTGluZSAxNDU1IG9mIHlhY2Mu Y8KgwqAqLwo+ICsvKiBMaW5lIDE4MDYgb2YgeWFjYy5jwqDCoCovCj4gwqAjbGluZSA1NyAibGli eGx1X2NmZ195LnkiCj4gLcKgwqDCoMKgeyB4bHVfX2NmZ19zZXRfc3RvcmUoY3R4LCh5eXZzcFso MSkgLSAoMyldLnN0cmluZyksKHl5dnNwWygzKSAtCj4gKDMpXS5zZXR0aW5nKSwoeXlsc3BbKDMp IC0gKDMpXSkuZmlyc3RfbGluZSk7IDt9Cj4gK8KgwqDCoMKgeyB4bHVfX2NmZ19zZXRfc3RvcmUo Y3R4LCh5eXZzcFsoMSkgLSAoMyldLnN0cmluZyksKHl5dnNwWygzKSAtCj4gKDMpXS5zZXR0aW5n KSwoeXlsc3BbKDMpIC0gKDMpXSkuZmlyc3RfbGluZSk7IH0KPiDCoMKgwqDCoMKgYnJlYWs7Cj4g wqAKPiDCoMKgwqBjYXNlIDEyOgo+IMKgCj4gLS8qIExpbmUgMTQ1NSBvZiB5YWNjLmPCoMKgKi8K PiArLyogTGluZSAxODA2IG9mIHlhY2MuY8KgwqAqLwo+IMKgI2xpbmUgNjIgImxpYnhsdV9jZmdf eS55Igo+IC3CoMKgwqDCoHsgKHl5dmFsLnNldHRpbmcpPSB4bHVfX2NmZ19zZXRfbWsoY3R4LDEs KHl5dnNwWygxKSAtICgxKV0uc3RyaW5nKSk7Cj4gO30KPiArwqDCoMKgwqB7ICh5eXZhbC5zZXR0 aW5nKT0geGx1X19jZmdfc2V0X21rKGN0eCwxLCh5eXZzcFsoMSkgLSAoMSldLnN0cmluZykpOwo+ IH0KPiDCoMKgwqDCoMKgYnJlYWs7Cj4gwqAKPiDCoMKgwqBjYXNlIDEzOgo+IMKgCj4gLS8qIExp bmUgMTQ1NSBvZiB5YWNjLmPCoMKgKi8KPiArLyogTGluZSAxODA2IG9mIHlhY2MuY8KgwqAqLwo+ IMKgI2xpbmUgNjMgImxpYnhsdV9jZmdfeS55Igo+IC3CoMKgwqDCoHsgKHl5dmFsLnNldHRpbmcp PSAoeXl2c3BbKDMpIC0gKDQpXS5zZXR0aW5nKTsgO30KPiArwqDCoMKgwqB7ICh5eXZhbC5zZXR0 aW5nKT0gKHl5dnNwWygzKSAtICg0KV0uc2V0dGluZyk7IH0KPiDCoMKgwqDCoMKgYnJlYWs7Cj4g wqAKPiDCoMKgwqBjYXNlIDE0Ogo+IMKgCj4gLS8qIExpbmUgMTQ1NSBvZiB5YWNjLmPCoMKgKi8K PiArLyogTGluZSAxODA2IG9mIHlhY2MuY8KgwqAqLwo+IMKgI2xpbmUgNjUgImxpYnhsdV9jZmdf eS55Igo+IC3CoMKgwqDCoHsgKHl5dmFsLnN0cmluZyk9ICh5eXZzcFsoMSkgLSAoMSldLnN0cmlu Zyk7IDt9Cj4gK8KgwqDCoMKgeyAoeXl2YWwuc3RyaW5nKT0gKHl5dnNwWygxKSAtICgxKV0uc3Ry aW5nKTsgfQo+IMKgwqDCoMKgwqBicmVhazsKPiDCoAo+IMKgwqDCoGNhc2UgMTU6Cj4gwqAKPiAt LyogTGluZSAxNDU1IG9mIHlhY2MuY8KgwqAqLwo+ICsvKiBMaW5lIDE4MDYgb2YgeWFjYy5jwqDC oCovCj4gwqAjbGluZSA2NiAibGlieGx1X2NmZ195LnkiCj4gLcKgwqDCoMKgeyAoeXl2YWwuc3Ry aW5nKT0gKHl5dnNwWygxKSAtICgxKV0uc3RyaW5nKTsgO30KPiArwqDCoMKgwqB7ICh5eXZhbC5z dHJpbmcpPSAoeXl2c3BbKDEpIC0gKDEpXS5zdHJpbmcpOyB9Cj4gwqDCoMKgwqDCoGJyZWFrOwo+ IMKgCj4gwqDCoMKgY2FzZSAxNjoKPiDCoAo+IC0vKiBMaW5lIDE0NTUgb2YgeWFjYy5jwqDCoCov Cj4gKy8qIExpbmUgMTgwNiBvZiB5YWNjLmPCoMKgKi8KPiDCoCNsaW5lIDY4ICJsaWJ4bHVfY2Zn X3kueSIKPiAtwqDCoMKgwqB7ICh5eXZhbC5zZXR0aW5nKT0geGx1X19jZmdfc2V0X21rKGN0eCww LDApOyA7fQo+ICvCoMKgwqDCoHsgKHl5dmFsLnNldHRpbmcpPSB4bHVfX2NmZ19zZXRfbWsoY3R4 LDAsMCk7IH0KPiDCoMKgwqDCoMKgYnJlYWs7Cj4gwqAKPiDCoMKgwqBjYXNlIDE3Ogo+IMKgCj4g LS8qIExpbmUgMTQ1NSBvZiB5YWNjLmPCoMKgKi8KPiArLyogTGluZSAxODA2IG9mIHlhY2MuY8Kg wqAqLwo+IMKgI2xpbmUgNjkgImxpYnhsdV9jZmdfeS55Igo+IC3CoMKgwqDCoHsgKHl5dmFsLnNl dHRpbmcpPSAoeXl2c3BbKDEpIC0gKDEpXS5zZXR0aW5nKTsgO30KPiArwqDCoMKgwqB7ICh5eXZh bC5zZXR0aW5nKT0gKHl5dnNwWygxKSAtICgxKV0uc2V0dGluZyk7IH0KPiDCoMKgwqDCoMKgYnJl YWs7Cj4gwqAKPiDCoMKgwqBjYXNlIDE4Ogo+IMKgCj4gLS8qIExpbmUgMTQ1NSBvZiB5YWNjLmPC oMKgKi8KPiArLyogTGluZSAxODA2IG9mIHlhY2MuY8KgwqAqLwo+IMKgI2xpbmUgNzAgImxpYnhs dV9jZmdfeS55Igo+IC3CoMKgwqDCoHsgKHl5dmFsLnNldHRpbmcpPSAoeXl2c3BbKDEpIC0gKDMp XS5zZXR0aW5nKTsgO30KPiArwqDCoMKgwqB7ICh5eXZhbC5zZXR0aW5nKT0gKHl5dnNwWygxKSAt ICgzKV0uc2V0dGluZyk7IH0KPiDCoMKgwqDCoMKgYnJlYWs7Cj4gwqAKPiDCoMKgwqBjYXNlIDE5 Ogo+IMKgCj4gLS8qIExpbmUgMTQ1NSBvZiB5YWNjLmPCoMKgKi8KPiArLyogTGluZSAxODA2IG9m IHlhY2MuY8KgwqAqLwo+IMKgI2xpbmUgNzIgImxpYnhsdV9jZmdfeS55Igo+IC3CoMKgwqDCoHsg KHl5dmFsLnNldHRpbmcpPSB4bHVfX2NmZ19zZXRfbWsoY3R4LDIsKHl5dnNwWygxKSAtICgyKV0u c3RyaW5nKSk7Cj4gO30KPiArwqDCoMKgwqB7ICh5eXZhbC5zZXR0aW5nKT0geGx1X19jZmdfc2V0 X21rKGN0eCwyLCh5eXZzcFsoMSkgLSAoMildLnN0cmluZykpOwo+IH0KPiDCoMKgwqDCoMKgYnJl YWs7Cj4gwqAKPiDCoMKgwqBjYXNlIDIwOgo+IMKgCj4gLS8qIExpbmUgMTQ1NSBvZiB5YWNjLmPC oMKgKi8KPiArLyogTGluZSAxODA2IG9mIHlhY2MuY8KgwqAqLwo+IMKgI2xpbmUgNzMgImxpYnhs dV9jZmdfeS55Igo+IC3CoMKgwqDCoHsgeGx1X19jZmdfc2V0X2FkZChjdHgsKHl5dnNwWygxKSAt ICg1KV0uc2V0dGluZyksKHl5dnNwWyg0KSAtCj4gKDUpXS5zdHJpbmcpKTsgKHl5dmFsLnNldHRp bmcpPSAoeXl2c3BbKDEpIC0gKDUpXS5zZXR0aW5nKTsgO30KPiArwqDCoMKgwqB7IHhsdV9fY2Zn X3NldF9hZGQoY3R4LCh5eXZzcFsoMSkgLSAoNSldLnNldHRpbmcpLCh5eXZzcFsoNCkgLQo+ICg1 KV0uc3RyaW5nKSk7ICh5eXZhbC5zZXR0aW5nKT0gKHl5dnNwWygxKSAtICg1KV0uc2V0dGluZyk7 IH0KPiDCoMKgwqDCoMKgYnJlYWs7Cj4gwqAKPiDCoAo+IMKgCj4gLS8qIExpbmUgMTQ1NSBvZiB5 YWNjLmPCoMKgKi8KPiAtI2xpbmUgMTU0MiAibGlieGx1X2NmZ195LmMiCj4gKy8qIExpbmUgMTgw NiBvZiB5YWNjLmPCoMKgKi8KPiArI2xpbmUgMTU4MSAibGlieGx1X2NmZ195LmMiCj4gwqDCoMKg wqDCoMKgwqBkZWZhdWx0OiBicmVhazsKPiDCoMKgwqDCoMKgfQo+ICvCoMKgLyogVXNlciBzZW1h bnRpYyBhY3Rpb25zIHNvbWV0aW1lcyBhbHRlciB5eWNoYXIsIGFuZCB0aGF0IHJlcXVpcmVzCj4g K8KgwqDCoMKgwqB0aGF0IHl5dG9rZW4gYmUgdXBkYXRlZCB3aXRoIHRoZSBuZXcgdHJhbnNsYXRp b24uwqDCoFdlIHRha2UgdGhlCj4gK8KgwqDCoMKgwqBhcHByb2FjaCBvZiB0cmFuc2xhdGluZyBp bW1lZGlhdGVseSBiZWZvcmUgZXZlcnkgdXNlIG9mIHl5dG9rZW4uCj4gK8KgwqDCoMKgwqBPbmUg YWx0ZXJuYXRpdmUgaXMgdHJhbnNsYXRpbmcgaGVyZSBhZnRlciBldmVyeSBzZW1hbnRpYyBhY3Rp b24sCj4gK8KgwqDCoMKgwqBidXQgdGhhdCB0cmFuc2xhdGlvbiB3b3VsZCBiZSBtaXNzZWQgaWYg dGhlIHNlbWFudGljIGFjdGlvbiBpbnZva2VzCj4gK8KgwqDCoMKgwqBZWUFCT1JULCBZWUFDQ0VQ VCwgb3IgWVlFUlJPUiBpbW1lZGlhdGVseSBhZnRlciBhbHRlcmluZyB5eWNoYXIgb3IKPiArwqDC oMKgwqDCoGlmIGl0IGludm9rZXMgWVlCQUNLVVAuwqDCoEluIHRoZSBjYXNlIG9mIFlZQUJPUlQg b3IgWVlBQ0NFUFQsIGFuCj4gK8KgwqDCoMKgwqBpbmNvcnJlY3QgZGVzdHJ1Y3RvciBtaWdodCB0 aGVuIGJlIGludm9rZWQgaW1tZWRpYXRlbHkuwqDCoEluIHRoZQo+ICvCoMKgwqDCoMKgY2FzZSBv ZiBZWUVSUk9SIG9yIFlZQkFDS1VQLCBzdWJzZXF1ZW50IHBhcnNlciBhY3Rpb25zIG1pZ2h0IGxl YWQKPiArwqDCoMKgwqDCoHRvIGFuIGluY29ycmVjdCBkZXN0cnVjdG9yIGNhbGwgb3IgdmVyYm9z ZSBzeW50YXggZXJyb3IgbWVzc2FnZQo+ICvCoMKgwqDCoMKgYmVmb3JlIHRoZSBsb29rYWhlYWQg aXMgdHJhbnNsYXRlZC7CoMKgKi8KPiDCoMKgwqBZWV9TWU1CT0xfUFJJTlQgKCItPiAkJCA9Iiwg eXlyMVt5eW5dLCAmeXl2YWwsICZ5eWxvYyk7Cj4gwqAKPiDCoMKgwqBZWVBPUFNUQUNLICh5eWxl bik7Cj4gQEAgLTE1NjksNiArMTYxOSwxMCBAQCB5eXJlZHVjZToKPiDCoHwgeXllcnJsYWIgLS0g aGVyZSBvbiBkZXRlY3RpbmcgZXJyb3IgfAo+IMKgYC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSovCj4gwqB5eWVycmxhYjoKPiArwqDCoC8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGxh dGVzdCBsb29rYWhlYWQgdHJhbnNsYXRpb24uwqDCoFNlZSBjb21tZW50cyBhdAo+ICvCoMKgwqDC oMKgdXNlciBzZW1hbnRpYyBhY3Rpb25zIGZvciB3aHkgdGhpcyBpcyBuZWNlc3NhcnkuwqDCoCov Cj4gK8KgwqB5eXRva2VuID0geXljaGFyID09IFlZRU1QVFkgPyBZWUVNUFRZIDogWVlUUkFOU0xB VEUgKHl5Y2hhcik7Cj4gKwo+IMKgwqDCoC8qIElmIG5vdCBhbHJlYWR5IHJlY292ZXJpbmcgZnJv bSBhbiBlcnJvciwgcmVwb3J0IHRoaXMgZXJyb3IuwqDCoCovCj4gwqDCoMKgaWYgKCF5eWVycnN0 YXR1cykKPiDCoMKgwqDCoMKgewo+IEBAIC0xNTc2LDQxICsxNjMwLDQwIEBAIHl5ZXJybGFiOgo+ IMKgI2lmICEgWVlFUlJPUl9WRVJCT1NFCj4gwqDCoMKgwqDCoMKgwqB5eWVycm9yICgmeXlsbG9j LCBjdHgsIFlZXygic3ludGF4IGVycm9yIikpOwo+IMKgI2Vsc2UKPiArIyBkZWZpbmUgWVlTWU5U QVhfRVJST1IgeXlzeW50YXhfZXJyb3IgKCZ5eW1zZ19hbGxvYywgJnl5bXNnLCBcCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgeXlzc3AsIHl5dG9rZW4pCj4gwqDCoMKgwqDCoMKgwqB7Cj4gLQlZ WVNJWkVfVCB5eXNpemUgPSB5eXN5bnRheF9lcnJvciAoMCwgeXlzdGF0ZSwgeXljaGFyKTsKPiAt CWlmICh5eW1zZ19hbGxvYyA8IHl5c2l6ZSAmJiB5eW1zZ19hbGxvYyA8IFlZU1RBQ0tfQUxMT0Nf TUFYSU1VTSkKPiAtCcKgwqB7Cj4gLQnCoMKgwqDCoFlZU0laRV9UIHl5YWxsb2MgPSAyICogeXlz aXplOwo+IC0JwqDCoMKgwqBpZiAoISAoeXlzaXplIDw9IHl5YWxsb2MgJiYgeXlhbGxvYyA8PQo+ IFlZU1RBQ0tfQUxMT0NfTUFYSU1VTSkpCj4gLQnCoMKgwqDCoMKgwqB5eWFsbG9jID0gWVlTVEFD S19BTExPQ19NQVhJTVVNOwo+IC0JwqDCoMKgwqBpZiAoeXltc2cgIT0geXltc2didWYpCj4gLQnC oMKgwqDCoMKgwqBZWVNUQUNLX0ZSRUUgKHl5bXNnKTsKPiAtCcKgwqDCoMKgeXltc2cgPSAoY2hh ciAqKSBZWVNUQUNLX0FMTE9DICh5eWFsbG9jKTsKPiAtCcKgwqDCoMKgaWYgKHl5bXNnKQo+IC0J wqDCoMKgwqDCoMKgeXltc2dfYWxsb2MgPSB5eWFsbG9jOwo+IC0JwqDCoMKgwqBlbHNlCj4gLQnC oMKgwqDCoMKgwqB7Cj4gLQkJeXltc2cgPSB5eW1zZ2J1ZjsKPiAtCQl5eW1zZ19hbGxvYyA9IHNp emVvZiB5eW1zZ2J1ZjsKPiAtCcKgwqDCoMKgwqDCoH0KPiAtCcKgwqB9Cj4gLQo+IC0JaWYgKDAg PCB5eXNpemUgJiYgeXlzaXplIDw9IHl5bXNnX2FsbG9jKQo+IC0JwqDCoHsKPiAtCcKgwqDCoMKg KHZvaWQpIHl5c3ludGF4X2Vycm9yICh5eW1zZywgeXlzdGF0ZSwgeXljaGFyKTsKPiAtCcKgwqDC oMKgeXllcnJvciAoJnl5bGxvYywgY3R4LCB5eW1zZyk7Cj4gLQnCoMKgfQo+IC0JZWxzZQo+IC0J wqDCoHsKPiAtCcKgwqDCoMKgeXllcnJvciAoJnl5bGxvYywgY3R4LCBZWV8oInN5bnRheCBlcnJv ciIpKTsKPiAtCcKgwqDCoMKgaWYgKHl5c2l6ZSAhPSAwKQo+IC0JwqDCoMKgwqDCoMKgZ290byB5 eWV4aGF1c3RlZGxhYjsKPiAtCcKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqBjaGFyIGNvbnN0ICp5 eW1zZ3AgPSBZWV8oInN5bnRheCBlcnJvciIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgaW50IHl5c3lu dGF4X2Vycm9yX3N0YXR1czsKPiArwqDCoMKgwqDCoMKgwqDCoHl5c3ludGF4X2Vycm9yX3N0YXR1 cyA9IFlZU1lOVEFYX0VSUk9SOwo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKHl5c3ludGF4X2Vycm9y X3N0YXR1cyA9PSAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoHl5bXNncCA9IHl5bXNnOwo+ICvC oMKgwqDCoMKgwqDCoMKgZWxzZSBpZiAoeXlzeW50YXhfZXJyb3Jfc3RhdHVzID09IDEpCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoeXltc2cg IT0geXltc2didWYpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBZWVNUQUNLX0ZSRUUg KHl5bXNnKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeXltc2cgPSAoY2hhciAqKSBZWVNU QUNLX0FMTE9DICh5eW1zZ19hbGxvYyk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICgh eXltc2cpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgeXltc2cgPSB5eW1zZ2J1ZjsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB5eW1zZ19hbGxvYyA9IHNpemVvZiB5eW1zZ2J1ZjsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB5eXN5bnRheF9lcnJvcl9zdGF0dXMgPSAyOwo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbHNl Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgeXlzeW50YXhfZXJyb3Jfc3RhdHVzID0gWVlTWU5UQVhfRVJST1I7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgeXltc2dwID0geXltc2c7Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDC oMKgwqDCoMKgeXllcnJvciAoJnl5bGxvYywgY3R4LCB5eW1zZ3ApOwo+ICvCoMKgwqDCoMKgwqDC oMKgaWYgKHl5c3ludGF4X2Vycm9yX3N0YXR1cyA9PSAyKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oGdvdG8geXlleGhhdXN0ZWRsYWI7Cj4gwqDCoMKgwqDCoMKgwqB9Cj4gKyMgdW5kZWYgWVlTWU5U QVhfRVJST1IKPiDCoCNlbmRpZgo+IMKgwqDCoMKgwqB9Cj4gwqAKPiAtwqDCoHl5ZXJyb3JfcmFu Z2VbMF0gPSB5eWxsb2M7Cj4gK8KgwqB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOwo+IMKgCj4g wqDCoMKgaWYgKHl5ZXJyc3RhdHVzID09IDMpCj4gwqDCoMKgwqDCoHsKPiBAQCAtMTY0Nyw3ICsx NzAwLDcgQEAgeXllcnJvcmxhYjoKPiDCoMKgwqBpZiAoLypDT05TVENPTkQqLyAwKQo+IMKgwqDC oMKgwqDCoGdvdG8geXllcnJvcmxhYjsKPiDCoAo+IC3CoMKgeXllcnJvcl9yYW5nZVswXSA9IHl5 bHNwWzEteXlsZW5dOwo+ICvCoMKgeXllcnJvcl9yYW5nZVsxXSA9IHl5bHNwWzEteXlsZW5dOwo+ IMKgwqDCoC8qIERvIG5vdCByZWNsYWltIHRoZSBzeW1ib2xzIG9mIHRoZSBydWxlIHdoaWNoIGFj dGlvbiB0cmlnZ2VyZWQKPiDCoMKgwqDCoMKgwqB0aGlzIFlZRVJST1IuwqDCoCovCj4gwqDCoMKg WVlQT1BTVEFDSyAoeXlsZW4pOwo+IEBAIC0xNjY2LDcgKzE3MTksNyBAQCB5eWVycmxhYjE6Cj4g wqDCoMKgZm9yICg7OykKPiDCoMKgwqDCoMKgewo+IMKgwqDCoMKgwqDCoMKgeXluID0geXlwYWN0 W3l5c3RhdGVdOwo+IC3CoMKgwqDCoMKgwqBpZiAoeXluICE9IFlZUEFDVF9OSU5GKQo+ICvCoMKg wqDCoMKgwqBpZiAoIXl5cGFjdF92YWx1ZV9pc19kZWZhdWx0ICh5eW4pKQo+IMKgCXsKPiDCoAnC oMKgeXluICs9IFlZVEVSUk9SOwo+IMKgCcKgwqBpZiAoMCA8PSB5eW4gJiYgeXluIDw9IFlZTEFT VCAmJiB5eWNoZWNrW3l5bl0gPT0gWVlURVJST1IpCj4gQEAgLTE2ODEsNyArMTczNCw3IEBAIHl5 ZXJybGFiMToKPiDCoMKgwqDCoMKgwqDCoGlmICh5eXNzcCA9PSB5eXNzKQo+IMKgCVlZQUJPUlQ7 Cj4gwqAKPiAtwqDCoMKgwqDCoMKgeXllcnJvcl9yYW5nZVswXSA9ICp5eWxzcDsKPiArwqDCoMKg wqDCoMKgeXllcnJvcl9yYW5nZVsxXSA9ICp5eWxzcDsKPiDCoMKgwqDCoMKgwqDCoHl5ZGVzdHJ1 Y3QgKCJFcnJvcjogcG9wcGluZyIsCj4gwqAJCcKgwqB5eXN0b3NbeXlzdGF0ZV0sIHl5dnNwLCB5 eWxzcCwgY3R4KTsKPiDCoMKgwqDCoMKgwqDCoFlZUE9QU1RBQ0sgKDEpOwo+IEBAIC0xNjkxLDEw ICsxNzQ0LDEwIEBAIHl5ZXJybGFiMToKPiDCoAo+IMKgwqDCoCorK3l5dnNwID0geXlsdmFsOwo+ IMKgCj4gLcKgwqB5eWVycm9yX3JhbmdlWzFdID0geXlsbG9jOwo+ICvCoMKgeXllcnJvcl9yYW5n ZVsyXSA9IHl5bGxvYzsKPiDCoMKgwqAvKiBVc2luZyBZWUxMT0MgaXMgdGVtcHRpbmcsIGJ1dCB3 b3VsZCBjaGFuZ2UgdGhlIGxvY2F0aW9uIG9mCj4gwqDCoMKgwqDCoMKgdGhlIGxvb2thaGVhZC7C oMKgWVlMT0MgaXMgYXZhaWxhYmxlIHRob3VnaC7CoMKgKi8KPiAtwqDCoFlZTExPQ19ERUZBVUxU ICh5eWxvYywgKHl5ZXJyb3JfcmFuZ2UgLSAxKSwgMik7Cj4gK8KgwqBZWUxMT0NfREVGQVVMVCAo eXlsb2MsIHl5ZXJyb3JfcmFuZ2UsIDIpOwo+IMKgwqDCoCorK3l5bHNwID0geXlsb2M7Cj4gwqAK PiDCoMKgwqAvKiBTaGlmdCB0aGUgZXJyb3IgdG9rZW4uwqDCoCovCj4gQEAgLTE3MzAsOCArMTc4 MywxMyBAQCB5eWV4aGF1c3RlZGxhYjoKPiDCoAo+IMKgeXlyZXR1cm46Cj4gwqDCoMKgaWYgKHl5 Y2hhciAhPSBZWUVNUFRZKQo+IC3CoMKgwqDCoMKgeXlkZXN0cnVjdCAoIkNsZWFudXA6IGRpc2Nh cmRpbmcgbG9va2FoZWFkIiwKPiAtCQnCoHl5dG9rZW4sICZ5eWx2YWwsICZ5eWxsb2MsIGN0eCk7 Cj4gK8KgwqDCoMKgewo+ICvCoMKgwqDCoMKgwqAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBsYXRlc3Qg bG9va2FoZWFkIHRyYW5zbGF0aW9uLsKgwqBTZWUgY29tbWVudHMKPiBhdAo+ICvCoMKgwqDCoMKg wqDCoMKgwqB1c2VyIHNlbWFudGljIGFjdGlvbnMgZm9yIHdoeSB0aGlzIGlzIG5lY2Vzc2FyeS7C oMKgKi8KPiArwqDCoMKgwqDCoMKgeXl0b2tlbiA9IFlZVFJBTlNMQVRFICh5eWNoYXIpOwo+ICvC oMKgwqDCoMKgwqB5eWRlc3RydWN0ICgiQ2xlYW51cDogZGlzY2FyZGluZyBsb29rYWhlYWQiLAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB5eXRva2VuLCAmeXlsdmFsLCAm eXlsbG9jLCBjdHgpOwo+ICvCoMKgwqDCoH0KPiDCoMKgwqAvKiBEbyBub3QgcmVjbGFpbSB0aGUg c3ltYm9scyBvZiB0aGUgcnVsZSB3aGljaCBhY3Rpb24gdHJpZ2dlcmVkCj4gwqDCoMKgwqDCoMKg dGhpcyBZWUFCT1JUIG9yIFlZQUNDRVBULsKgwqAqLwo+IMKgwqDCoFlZUE9QU1RBQ0sgKHl5bGVu KTsKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGx1X2NmZ195LmggYi90b29scy9saWJ4 bC9saWJ4bHVfY2ZnX3kuaAo+IGluZGV4IGU3YjNkMTIuLmQ3ZGZhZjIgMTAwNjQ0Cj4gLS0tIGEv dG9vbHMvbGlieGwvbGlieGx1X2NmZ195LmgKPiArKysgYi90b29scy9saWJ4bC9saWJ4bHVfY2Zn X3kuaAo+IEBAIC0xLDEwICsxLDggQEAKPiArLyogQSBCaXNvbiBwYXJzZXIsIG1hZGUgYnkgR05V IEJpc29uIDIuNS7CoMKgKi8KPiDCoAo+IC0vKiBBIEJpc29uIHBhcnNlciwgbWFkZSBieSBHTlUg Qmlzb24gMi40LjEuwqDCoCovCj4gLQo+IC0vKiBTa2VsZXRvbiBpbnRlcmZhY2UgZm9yIEJpc29u J3MgWWFjYy1saWtlIHBhcnNlcnMgaW4gQwo+ICsvKiBCaXNvbiBpbnRlcmZhY2UgZm9yIFlhY2Mt bGlrZSBwYXJzZXJzIGluIEMKPiDCoMKgwqDCoAo+IC3CoMKgwqDCoMKgwqBDb3B5cmlnaHQgKEMp IDE5ODQsIDE5ODksIDE5OTAsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCj4gMjAwNSwg MjAwNgo+IC3CoMKgwqBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KPiArwqDCoMKgwqDC oMKgQ29weXJpZ2h0IChDKSAxOTg0LCAxOTg5LTE5OTAsIDIwMDAtMjAxMSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sCj4gSW5jLgo+IMKgwqDCoMKgCj4gwqDCoMKgwqBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+IMKg wqDCoMKgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKPiBAQCAtNTIsNyArNTAsNyBAQAo+IMKgdHlwZWRlZiB1bmlvbiBZ WVNUWVBFCj4gwqB7Cj4gwqAKPiAtLyogTGluZSAxNjc2IG9mIHlhY2MuY8KgwqAqLwo+ICsvKiBM aW5lIDIwNjggb2YgeWFjYy5jwqDCoCovCj4gwqAjbGluZSAyNSAibGlieGx1X2NmZ195LnkiCj4g wqAKPiDCoMKgwqBjaGFyICpzdHJpbmc7Cj4gQEAgLTYwLDggKzU4LDggQEAgdHlwZWRlZiB1bmlv biBZWVNUWVBFCj4gwqAKPiDCoAo+IMKgCj4gLS8qIExpbmUgMTY3NiBvZiB5YWNjLmPCoMKgKi8K PiAtI2xpbmUgNjUgImxpYnhsdV9jZmdfeS5oIgo+ICsvKiBMaW5lIDIwNjggb2YgeWFjYy5jwqDC oCovCj4gKyNsaW5lIDYzICJsaWJ4bHVfY2ZnX3kuaCIKPiDCoH0gWVlTVFlQRTsKPiDCoCMgZGVm aW5lIFlZU1RZUEVfSVNfVFJJVklBTCAxCj4gwqAjIGRlZmluZSB5eXN0eXBlIFlZU1RZUEUgLyog b2Jzb2xlc2NlbnQ7IHdpbGwgYmUgd2l0aGRyYXduICovCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVs QGxpc3RzLnhlbi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==