From mboxrd@z Thu Jan 1 00:00:00 1970 From: Martin Wilck Subject: Re: [PATCH] multipath-tools:Prioritizer based on a time-delay algorithm Date: Tue, 16 May 2017 20:54:33 +0200 Message-ID: <1494960873.4700.13.camel@suse.com> References: <1494215904-7564-1-git-send-email-philip.yang@huawei.com> <1494501243.6093.16.camel@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com To: Yang Feng Cc: zouming.zouming@huawei.com, Xose Vazquez Perez , guanjunxiong@huawei.com, shenhong09@huawei.com, dm-devel@redhat.com, hege09@huawei.com List-Id: dm-devel.ids SGkgWWFuZywKClRoYW5rcyBmb3IgaW1wcm92aW5nIHlvdXIgcGF0Y2guIFBsZWFzZSBmaW5kIG15 IGNvbW1lbnRzIGJlbG93LgoKT24gTW9uLCAyMDE3LTA1LTE1IGF0IDE4OjQ0ICswODAwLCBZYW5n IEZlbmcgd3JvdGU6Cj4gSGVsbG8gTWFydGluLAo+IAo+IFRoYW5rIHlvdSB2ZXJ5IG11Y2ggZm9y IHlvdXIgcmVtYXJrcy4gSSBhbSBzb3JyeSBmb3IgbGF0ZSByZXBseSwKPiBQbGVhc2UgZmluZCBt eSBhbnN3ZXIgYW5kIHRoZSB1cGRhdGVkIHBhdGNoLgo+IAo+ID4gSGVsbG8gWWFuZywKPiA+IAo+ ID4gdGhhbmsgeW91IGZvciB5b3VyIHdvcmsuIFBsZWFzZSBmaW5kIG15IHJlbWFya3MgYmVsb3cu Cj4gPiAKPiA+IE9uIE1vbiwgMjAxNy0wNS0wOCBhdCAxMTo1OCArMDgwMCwgWWFuZyBGZW5nIHdy b3RlOgo+ID4gPiBQcmlvcml0aXplciBmb3IgZGV2aWNlIG1hcHBlciBtdWx0aXBhdGgsIHdoZXJl IHRoZSBjb3JyZXNwb25kaW5nCj4gPiA+IHByaW9yaXR5Cj4gPiA+IHZhbHVlcyBvZiBzcGVjaWZp YyBwYXRocyBhcmUgcHJvdmlkZWQgYnkgYSB0aW1lLWRlbGF5IGFsZ29yaXRobS4KPiA+ID4gQW5k Cj4gPiA+IHRoZQo+ID4gPiB0aW1lLWRlbGF5IGFsZ29yaXRobSBpcyBkZXBlbmRlbnQgb24gdGhl IGZvbGxvd2luZwo+ID4gPiBhcmd1bWVudHMoZGVsYXlfaW50ZXJ2YWwsCj4gPiA+IGNvbnNfbnVt KS4KPiA+ID4gVGhlIHByaW5jaXBsZSBvZiB0aGUgYWxnb3JpdGhtIGlzIGlsbHVzdHJhdGVkIGFz IGZvbGxvd3M6Cj4gPiA+IDEuIEJ5IHNlbmRpbmcgYSBjZXJ0YWluIG51bWJlciAiY29uc19udW0i IG9mIHJlYWQgSU9zIHRvIHRoZQo+ID4gPiBjdXJyZW50Cj4gPiA+IHBhdGgKPiA+ID4gwqDCoMKg Y29udGludW91c2x5LCB0aGUgSU9zJyBhdmVyYWdlIGRlbGF5IGNhbiBiZSBjYWxjdWxhdGVkLgo+ ID4gPiAyLiBBY2NvcmRpbmcgdG8gdGhlIGF2ZXJhZ2UgZGVsYXkgb2YgZWFjaCBwYXRoIGFuZCB0 aGUgd2VpZ2h0Cj4gPiA+IHZhbHVlCj4gPiA+IMKgwqDCoCJkZWxheV9pbnRlcnZhbCIsIHRoZSBw cmlvcml0eSAicmMiIG9mIGVhY2ggcGF0aCBjYW4gYmUKPiA+ID4gcHJvdmlkZWQuCj4gPiA+IAo+ ID4gPiDCoMKgwqDCoMKgZGVsYXlfaW50ZXJ2YWzCoMKgZGVsYXlfaW50ZXJ2YWzCoMKgZGVsYXlf aW50ZXJ2YWzCoMKgwqDCoMKgwqDCoGRlbGF5X2kKPiA+ID4gbnRlcgo+ID4gCj4gPiBIb3cgZG9l cyB0aGlzIGFsZ29yaXRobSBiZWhhdmUgdW5kZXIgbG9hZD8gQ2FuIHdlIGJlIHN1cmUgdGhhdAo+ ID4gcHJpb3JpdGllcyBkb24ndCBzdGFydCB0byBmbHVjdHVhdGUgd2lsZGx5IGJlY2F1c2UgYnVz eSBwYXRocyB3aWxsCj4gPiB1c3VhbGx5IGhhdmUgbG9uZ2VyIGxhdGVuY2llcyB0aGFuIGlkbGUg b25lcz8KPiAKPiBJIGhhdmUgYSBsb3Qgb2YgdGVzdCB1bmRlciBsb2FkLiBXaGVuIHRoZSBhcHBy b3ByaWF0ZSB2YWx1ZSBvZgo+IGFyZ3VtZW50ICJkZWxheV9pbnRlcnZhbCIgaXMgc2V0LAo+IHRo aXMgYWxnb3JpdGhtIGJlaGF2ZSB3ZWxsIGFuZCBjYW4gc2VwYXJhdGUgdGhlIHBhdGhzIHdobydz IGF2ZXJhZ2UKPiBkZWxheSBpcyBtb3JlIHRoYW4gb3RoZXJzLgo+IFdoZW4gYWRkIGEgbmV3IHBh dGggb3IgdGhlIHBhdGgncyBzdGF0ZSBjaGFuZ2UgZnJvbSBkb3duIHRvIHVwLAo+IGdldHByaW8o KSBvZiB0aGUgcHJpb3JpdGl6ZXIgaXMgdHJpZ2dlcmVkLCBhbmQKPiB0aGUgY3VycmVudCBwYXRo IGlzIG5vdCB1bmRlciBJT3MuCgo+ID4gPiDCoGxpYm11bHRpcGF0aC9NYWtlZmlsZcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDIgKy0KPiA+ID4gwqBsaWJtdWx0 aXBhdGgvY2hlY2tlcnMvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgwqA3ICstCj4g PiA+IMKgbGlibXVsdGlwYXRoL2NoZWNrZXJzL2VtY19jbGFyaWlvbi5jwqDCoMKgwqB8wqDCoMKg MiArLQo+ID4gPiDCoGxpYm11bHRpcGF0aC9jaGVja2Vycy9saWJzZy5jwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHzCoMKgOTQgLS0tLS0tLS0tLS0tCj4gPiA+IMKgbGlibXVsdGlwYXRoL2NoZWNrZXJz L2xpYnNnLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDkgLS0KPiA+ID4gwqBsaWJtdWx0 aXBhdGgvY2hlY2tlcnMvcmVhZHNlY3RvcjAuY8KgwqDCoMKgwqB8wqDCoMKgMiArLQo+ID4gPiDC oGxpYm11bHRpcGF0aC9saWJzZy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHzCoMKgOTQgKysrKysrKysrKysrCj4gPiA+IMKgbGlibXVsdGlwYXRoL2xpYnNnLmjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqDCoDkgKysKPiA+ID4gwqBs aWJtdWx0aXBhdGgvcHJpb3JpdGl6ZXJzL01ha2VmaWxlwqDCoMKgwqDCoMKgfMKgwqDCoDYgKy0K PiA+ID4gwqBsaWJtdWx0aXBhdGgvcHJpb3JpdGl6ZXJzL2RlbGF5ZWRwYXRoLmMgfCAyNDbCoAoK UGxlYXNlIHRoaW5rIGFib3V0IHRoZSBuYW1lIG9uY2UgYWdhaW4uIE1heWJlIHlvdSBzaG91bGQg Y2FsbCBpdAoiaW9fbGF0ZW5jeSIgb3IgInBhdGhfbGF0ZW5jeSIgaW5zdGVhZCBvZiAiZGVsYXll ZHBhdGgiPwoKPiA+IAo+ID4gV2h5IGRvIHlvdSBoYXZlIHRvIG1vdmUgbGlic2cgZm9yIHRoaXM/ IEl0J3MgYWxyZWFkeSB1c2VkIGJ5Cj4gPiB2YXJpb3VzCj4gPiBjaGVja2Vycywgd2h5IGNhbid0 IHlvdXIgY2hlY2tlciBkbyB0aGUgc2FtZT8gSWYgeW91IHJlYWxseSBuZWVkIHRvCj4gPiBkbwo+ ID4gaXQsIHlvdSBzaG91bGQgYXQgbGVhc3Qgc2VwYXJhdGUgdGhhdCBwYXJ0IG9mIHRoZSBwYXRj aCBmcm9tIHRoZQo+ID4gYWRkZWQKPiA+IGNvZGUuCj4gCj4gT0ssIHRoaXMgdGltZSwgbGlic2cg d2lsbCBub3QgYmUgbW92ZWQuCj4gCj4gPiA+ICsKPiA+ID4gKyNkZWZpbmUgQ0hBUl9TRUPCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJTRUMiCj4gPiA+ICsjZGVmaW5lIENIQVJfTVNF Q8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCJNU0VDIgo+ID4gPiArI2RlZmluZSBDSEFS X1VTRUPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAiVVNFQyIKPiA+IAo+ID4gSSBzdWdn ZXN0IHRvIHVzZSAicyIsICJtcyIsIGFuZCAidXMiIGhlcmUgaW5zdGVhZC4KPiAKPiBPSywgYXMg dGhlIGZvbGxvd2luZyBwYXRjaC4KPiAKPiA+IElmIHlvdSBjcmVhdGUgYW4gYXJyYXkgb2YgImNv bnN0IGNoYXIqIiBpbnN0ZWFkIGxpa2UgeW91IGRpZCBmb3IKPiA+IGNvbnZlcnNpb25fcmF0aW8g YmVsb3csIHlvdSBjb3VsZCBpbXBsZW1lbnQgZ2V0X2ludGVydmFsX3R5cGUoKQo+ID4gbW9yZQo+ ID4gZWxlZ2FudGx5IHVzaW5nIGEgbG9vcCBvdmVyIHRoYXQgYXJyYXkuCj4gCj4gT0ssIGFzIHRo ZSBmb2xsb3dpbmcgcGF0Y2guCj4gCj4gPiA+ICtzdGF0aWMgaW50IGdldF9pbnRlcnZhbF90eXBl KGNoYXIgKnNvdXJjZSwgY2hhciAqdHlwZSkKPiA+ID4gK3vCoMKgCj4gPiA+ICvCoMKgwqDCoC8q aXMgVVNFQyovCj4gPiA+ICvCoMKgwqDCoGlmICgoc3Ryc3RyKHNvdXJjZSwgQ0hBUl9VU0VDKSAh PSBOVUxMKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCYmIChzdHJzdHIoc291cmNlLCBDSEFSX1VT RUMpWzRdID09ICdfJykpCj4gPiAKPiA+IFBsZWFzZSBhdm9pZCB0aGVzZSBkb3VibGUgc3Ryc3Ry KCkgaW52b2NhdGlvbi4gVGhlIGNvbXBpbGVyIG1heQo+ID4gb3B0aW1pemUgaXQgYXdheSwgYnV0 IGl0IGp1c3QgbG9va3Mgc3RyYW5nZS4gVGhlIGZvbGxvd2luZyB3b3VsZMKgCj4gPiBsb29rIGJl dHRlciB0byBtZSwgYW5kIEkgZmluZCBpdCBhY3R1YWxseSBtb3JlIHJlYWRhYmxlOgo+ID4gCj4g PiDCoMKgwqDCoMKgwqDCoMKgaWYgKCgocCA9IHN0cnN0cihzb3VyY2UsIENIQVJfVVNFQykpICE9 IE5VTEwpICYmIHBbNF0gPT0KPiA+ICdfJykKPiAKPiBPSywgYXMgdGhlIGZvbGxvd2luZyBwYXRj aC4KPiAKPiA+ID4gK3N0YXRpYyBpbnQgZ2V0X3N0cmluZ19mcm9tX3VuZGVyKGNoYXIgKmFyZ3Ms Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYXIgKmJlZm9yZXN0cmluZywKPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhciAqYWZ0ZXJzdHJpbmcsCj4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGludCAqdHlwZSkKPiA+IAo+ID4gTWF5YmUgeW91IGNvdWxkIGZpZ3Vy ZSBvdXQgYSBtb3JlIGRlc2NyaXB0aXZlIG5hbWUgZm9yIHRoaXMKPiA+IGZ1bmN0aW9uPwo+ID4g Cj4gPiBBIGNvbW1lbnQgaW4gdGhlIGNvZGUgc2hvd2luZyBob3cgdGhlIHN0cmluZyB0byBiZSBw YXJzZWQgdHlwaWNhbGx5Cj4gPiBsb29rcyBsaWtlIHdvdWxkIGJlIGhlbHBmdWwgZm9yIHRoZSBy ZWFkZXIuCj4gCj4gT0ssIGFzIHRoZSBmb2xsb3dpbmcgcGF0Y2guCj4gCj4gPiA+ICvCoMKgwqDC oHRva2VuID0gc3RydG9rX3Ioc291cmNlLCB1bmRlciwgJnNhdmVwdHIpOwo+ID4gPiArwqDCoMKg wqB0b2tlbiA9IHN0cnRvayh0b2tlbiwgY2hhcl90eXBlKTsKPiA+IAo+ID4gSSdtIHByZXR0eSBz dXJlIHRoaXMgaXMgaXMgbm90IHdoYXQgeW91IGludGVuZGVkIHRvIHdyaXRlLiBJZgo+ID4gY2hh cl90eXBlCj4gPiBpcyAidXNlYyIsIHRoaXMgd291bGQgc3BsaXQgdGhlIHN0cmluZyBhdCB0aGUg cG9zc2libGUgZGVsaW1pdGVycwo+ID4gJ3UnLAo+ID4gJ3MnLCAnZScsIGFuZCAnYycgKHRoZSAy bmQgYXJndW1lbnQgb2Ygc3RydG9rKDMpIGlzIG5vdCBhIHNlcXVlbmNlLAo+ID4gYnV0Cj4gPiBh ICdzZXQnIG9mIGJ5dGVzKS4gSXQgbWlnaHQgYWNjaWRlbnRhbGx5IHdvcmsgd2l0aCB0aGUgaW5w dXQKPiA+IHN0cmluZ3MKPiA+IHlvdSBhcmUgdXNpbmcgKGluIHBhcnRpY3VsYXIgYmVjYXVzZSB5 b3Ugb25seSBsb29rIGF0IHRoZSBmaXJzdAo+ID4gdG9rZW4pLAo+ID4gYnV0IG5ldmVydGhlbGVz cyBpdCdzIHdyb25nLgo+IAo+IE9LLCBhcyB0aGUgZm9sbG93aW5nIHBhdGNoLgo+IAo+ID4gPiAr wqDCoMKgwqBpZiAoKHRva2VuID09IE5VTEwpIHx8IChzYXZlcHRyID09IE5VTEwpKQo+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoHRtcCA9IHRv a2VuOwo+ID4gPiArwqDCoMKgwqB3aGlsZSAoKnRtcCAhPSAnXDAnKQo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoGlmICghaXNkaWdpdCgqdG1wKyspKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIDA7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgdG1wID0gc2F2ZXB0cjsKPiA+ID4g K8KgwqDCoMKgd2hpbGUgKCp0bXAgIT0gJ1wwJykKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBpZiAo IWlzZGlnaXQoKnRtcCsrKSkKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAw Owo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoHN0cm5jcHkoYmVmb3Jlc3RyaW5nLCB0b2tlbiwgc3Ry bGVuKHRva2VuKSArIDEpOwo+ID4gPiArwqDCoMKgwqBzdHJuY3B5KGFmdGVyc3RyaW5nLCBzYXZl cHRyLCBzdHJsZW4oc2F2ZXB0cikgKyAxKTsKPiA+ID4gK8KgwqDCoMKgcmV0dXJuIDE7Cj4gPiA+ ICt9Cj4gPiAKPiA+IEkgZG9uJ3QgdGhpbmsgaXQncyBzYWZlIHRvIHVzZSBzYXZlcHRyIHRoZSB3 YXkgeW91IGRvIGl0LiBUaGUKPiA+IHN0cnRva19yCj4gPiBtYW4gcGFnZSBzYXlzIHRoaXMgcGFy YW1ldGVyIGlzIGZvciAiaW50ZXJuYWwgdXNlIi4gV2hpbGUgaXQgbWFrZXMKPiA+IHNlbnNlIHRv IGFzc3VtZSB0aGF0IGl0IHBvaW50cyB0byB0aGUgbmV4dCB0b2tlbiwgSSdtIG5vdCBzdXJlIGlm Cj4gPiB0aGF0J3MgZ3VhcmFudGVlZC4gWW91IHdvdWxkIGJlIHNhZmUgYnkgY2FsbGluZ8KgCj4g PiAKPiA+IMKgwqDCoMKgc29tZXZhciA9IHN0cnRva19yKE5VTEwsIHVuZGVyLCAmc2F2ZXB0cikK PiA+IAo+ID4gYW5kIHVzZSAic29tZXZhciIuCj4gCj4gT0ssIGFzIHRoZSBmb2xsb3dpbmcgcGF0 Y2guCj4gCj4gPiAKPiA+IEluIGdlbmVyYWwsIHRoaXMgd2hvbGUgcGFyc2luZyBjb2RlIGlzIG9k ZC4gSUlVQyB0aGlzIHBhcnNlcyBpbnB1dAo+ID4gbG9va2luZyBsaWtlIChbMC05XSspKFNFQ3xN U0VDfFVTRUMpXyhbMC05XSspIGFuZCBzZXRzCj4gPiBiZWZvcmVzdHJpbmcsCj4gPiB0eXBlLCBh bmQgYWZ0ZXJzdHJpbmcgdG8gdGhlIHJlZ2V4IG1hdGNoZXMgXDEsIFwyLCBhbmQgXDMsCj4gPiBy ZXNwZWN0aXZlbHkuCj4gPiAKPiA+IFdoeSBkb24ndCB5b3Ugc3RhcnQgcGFyc2luZyBmcm9tIHRo ZSBiZWdpbm5pbmcgb2YgdGhlIGlucHV0LCBlLmcuCj4gPiB3aXRoCj4gPiBzdHJ0b3VsKCksIGFu ZCBsb29rIGF0IHRoZSByZXN0IGxhdGVyPwo+IAo+IE9LLCBhcyB0aGUgZm9sbG93aW5nIHBhdGNo LgoKSG0sIEkgY2FuJ3Qgc2VlIGEgbG90IG9mIGRpZmZlcmVuY2UgaW4gdGhlIHBhcnNpbmcgY29k ZSB3cnQgdGhlCnByZXZpb3VzIHZlcnNpb24uIElNTyBpdCdzIHN0aWxsIG5vbi1zdHJhaWdodGZv cndhcmQgYW5kIGhhcmQgdG8KY29tcHJlaGVuZC4gTWF5YmUgSSBkaWRuJ3QgZXhwcmVzcyBteXNl bGYgY2xlYXJseSBlbm91Z2guIEhlcmUgaXMgaG93CkknZCBjb2RlIHRoaXM6CgogMS4gVmVyaWZ5 IHRoYXQgdGhlIHN0cmluZyBzdGFydHMgd2l0aCBhIGRpZ2l0LiBFcnJvciBpZiBpdCBkb2VzIG5v dC4KIDIuIFBhcnNlIHRoZSBkZWxheSBpbnRlcnZhbCB1c2luZyBzdHJ0b3VsKCkuCiAzLiBUaGUg ImVuZCIgcG9pbnRlciBvZiBzdHJ0b3VsKCkgcG9pbnRzIHRvIHRoZSB1bml0LCB3aGljaCBoYXMg dG8gYmUKInMiLCAibXMiIG9yICJ1cyIuIFZlcmlmeSwgYW5kIHNldCB0aGUgdW5pdCBhY2NvcmRp bmdseS4KIDQuIFZlcmlmeSB0aGF0IHRoZSBuZXh0IGNoYXJhY3RlciBpcyAnfCcsIGFuZCB0aGF0 IGl0J3MgZm9sbG93ZWQgYnkgYQpkaWdpdC4KIDUuIFBhcnNlIHRoZSBudW1iZXIgd2l0aCBzdHJ0 b3VsKCkKIDYuIFZlcmlmeSB0aGF0IHRoZXJlJ3Mgbm8gZ2FyYmFnZSBhdCB0aGUgZW5kIG9mIHRo ZSBzdHJpbmcuCgo+ID4gPiArCj4gPiA+ICtpbnQgY2hlY2thcmd2YWxpZChpbnQgZGVsYXlfaW50 ZXJ2YWwsIGludCBjb25zX251bSwgaW50IHR5cGUpCj4gPiA+ICt7Cj4gPiA+ICvCoMKgwqDCoGlm ICh0eXBlID09IElOVEVSVkFMX1NFQykKPiA+ID4gK8KgwqDCoMKgewo+ID4gPiArwqDCoMKgwqDC oMKgwqDCoGlmICgoZGVsYXlfaW50ZXJ2YWwgPCAxKSB8fCAoZGVsYXlfaW50ZXJ2YWwgPiA2MCkp Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gK8KgwqDCoMKg fQo+ID4gPiArwqDCoMKgwqBlbHNlIGlmICh0eXBlICE9IElOVEVSVkFMX0lOVkFMSUQpCj4gPiA+ ICvCoMKgwqDCoHsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBpZiAoKGRlbGF5X2ludGVydmFsIDwg MSkgfHwgKGRlbGF5X2ludGVydmFsID49IDEwMDApKQo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Cj4gPiA+ICvCoMKgwqDCoH0KPiA+IAo+ID4gWW91IGNvdWxkIGJlIG1v cmUgZm9yZ2l2aW5nIGhlcmUuIDE1MDAwTVNFQyBjb3VsZCBiZSBhIGxlZ2FsIHZhbHVlLgo+IAo+ IEJlY2F1c2UgdGhpcyB2YWx1ZSBpcyBtb3JlIHRoYW4gMSBzZWNvbmQsIHlvdSBjYW4gdXNlIHRo ZSB1bml0Cj4gc2Vjb25kLgoKUGxlYXNlIGZvbGxvdyB0aGUgaHR0cHM6Ly9lbi53aWtpcGVkaWEu b3JnL3dpa2kvUm9idXN0bmVzc19wcmluY2lwbGUuCklmIGEgdXNlciBlbnRlcnMgIjE1MDBtcyIg aGVyZSwgdGhlIHBhcnNpbmcgd2lsbCBzaWxlbnRseSBmYWlsLCBhbmQKd2l0aCBpdCB0aGUgd2hv bGUgcHJpbyBhbGdvcml0aG0uIFRoaXMgd2lsbCBjYXVzZSB1c2VyIGNvbmZ1c2lvbi4KUGxlYXNl IGRvbid0IGRvIHRoaXMuCgo+IAo+ID4gCj4gPiA+ICvCoMKgwqDCoAo+ID4gPiArwqDCoMKgwqBp ZiAoKGNvbnNfbnVtIDwgMykgfHwgKGNvbnNfbnVtID4gMTAwMCkpCj4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIDA7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgcmV0dXJuIDE7Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gK2ludCBnZXRfZGVsYXlfcHJlZl9hcmcoY2hhciAqYXJncywgaW50ICpk ZWxheV9pbnRlcnZhbCwgaW50Cj4gPiA+ICpjb25zX251bSwgaW50ICp0eXBlKQo+ID4gPiArewo+ ID4gPiArwqDCoMKgwqBjaGFyIGRlbGF5aW50ZXJ2YWxzdHJbTUFYX0NIQVJfU0laRV07Cj4gPiA+ ICvCoMKgwqDCoGNoYXIgY29uc251bXN0cltNQVhfQ0hBUl9TSVpFXTsKPiA+ID4gKwo+ID4gPiAr wqDCoMKgwqBpZiAoZ2V0X3N0cmluZ19mcm9tX3VuZGVyKGFyZ3MsIGRlbGF5aW50ZXJ2YWxzdHIs Cj4gPiA+IGNvbnNudW1zdHIsCj4gPiA+IHR5cGUpID09IDApCj4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIDA7Cj4gPiAKPiA+IEl0IG1pZ2h0IGJlIGdvb2QgdG8gd3JpdGUgdGhlIHBhcnNl ciBzbyB0aGF0IHRoZSBjb25zbnVtIHBhcnQgY2FuCj4gPiBiZQo+ID4gbGVmdCBvdXQgYnkgdGhl IHVzZXIsIGFuZCBhc3N1bWUgYSByZWFzb25hYmxlIGRlZmF1bHQgaW4gdGhhdCBjYXNlLgo+IAo+ IE9LLCBhcyB0aGUgZm9sbG93aW5nIHBhdGNoLgo+IAo+ID4gPiArwqDCoMKgwqB3aGlsZSAodGVt cC0tID4gMCkKPiA+ID4gK8KgwqDCoMKgewo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCh2b2lkKWdl dHRpbWVvZmRheSgmdHYsIE5VTEwpOwo+ID4gPiArwqDCoMKgwqDCoMKgwqDCoGJlZm9yZSA9IHRp bWV2YWxfdG9fdXMoJnR2KTsJCQo+ID4gPiArCj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKGRv X3JlYWRzZWN0b3IwKHBwLT5mZCwgdGltZW91dCkgPT0gMikKPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqB7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25kbG9nKDAsICIlczogcGF0aCBk b3duIiwgcHAtPmRldik7Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMTsK PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgCj4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgKHZvaWQpZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7Cj4gPiAKPiA+IEl0 J3MgYmV0dGVyIHRvIHVzZSBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgLi4uKSBoZXJl LiBUaGVuCj4gPiB5b3UKPiA+IGNhbiB0aHJvdyBhd2F5IHRoZSBkZWxheSA8IDAgY2hlY2sgYmVs b3cuCj4gCj4gT0ssIGFzIHRoZSBmb2xsb3dpbmcgcGF0Y2guCj4gCj4gPiA+ICvCoMKgwqDCoHRv bGRlbGF5IC09IG1pbiArIG1heDsKPiA+ID4gK8KgwqDCoMKgYXZnZGVsYXkgPSB0b2xkZWxheS8o bG9uZyBsb25nKShjb25zX251bSAtIDIpOwo+ID4gPiArwqDCoMKgwqBpZiAoYXZnZGVsYXkgPiBU SFJFU19VU0VDX1ZBTFVFKcKgCj4gPiA+ICvCoMKgwqDCoHvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Cj4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgY29uZGxvZygwLCAiJXM6IGF2Z2RlbGF5IGlzIG1vcmUg dGhhbiB0aHJlc29sZCIsIHBwLQo+ID4gPiA+ZGV2KTsKPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gMTsKPiA+ID4gK8KgwqDCoMKgfQo+ID4gPiArwqDCoMKgwqAKPiA+ID4gKwlyYXRpbyA9 IGdldF9jb252ZXJzaW9uX3JhdGlvKHR5cGUpOwo+ID4gPiArCXJjID0gKGludCkoVEhSRVNfVVNF Q19WQUxVRSAtIChhdmdkZWxheS8oKChsb25nCj4gPiA+IGxvbmcpZGVsYXlfaW50ZXJ2YWwpICog cmF0aW8pKSk7Cj4gPiA+ICsKPiA+ID4gK8KgwqDCoMKgcmV0dXJuIHJjOwo+ID4gPiArfQo+ID4g Cj4gPiBJcyBpdCByZWFzb25hYmxlIHRvIGRvIHRoZXNlIGludGVydmFsIGNhbGN1bGF0aW9ucyBz eW5jaHJvbm91c2x5IGluCj4gPiBnZXRwcmlvKCk/IGNvbnNfbnVtIGlzIGxpbWl0ZWQgdG8gMTAw MCwgc28gdGhpcyByb3V0aW5lIGNvdWxkIGlzc3VlCj4gPiAxMDAwIHJlYWRzIG9uIHRoZSBkZXZp Y2UgYmVmb3JlIHJldHVybmluZy4gSW4gcGFydGljdWxhciBpZiB0aGUKPiA+IGRldmljZQo+ID4g aXMgdW5kZXIgSU8gbG9hZCBhbmQgdGhlIGRlbGF5IGlzIGhpZ2gsIGV4ZWN1dGlvbiBpZiB0aGlz IHJvdXRpbmUKPiA+IGNvdWxkCj4gPiBiZSByZWFsbHkgc2xvdy4KPiA+IAo+ID4gSXQgd291bGQg bWFrZSBtb3JlIHNlbnNlIHRvIG1lIHRvIGhhdmUgYSBzZXBhcmF0ZSB0aHJlYWQgdGhhdAo+ID4g Y2FsY3VsYXRlcyBzb21lIHNvcnQgb2YgInJ1bm5pbmcgYXZlcmFnZSIgZm9yIHRoZSBkZWxheSBv ZiB0aGUKPiA+IGRpZmZlcmVudCBwYXRocywgYW5kIGhhdmUgZ2V0cHJpbygpIGp1c3QgZmV0Y2gg dGhlIGN1cnJlbnQgdmFsdWUgb2YKPiA+IHRoYXQgdmFyaWFibGUuCj4gPiAKPiA+IFJlZ2FyZHMK PiA+IE1hcnRpbgo+ID4gCj4gCj4gV2hlbiBhZGQgYSBuZXcgcGF0aCBvciB0aGUgcGF0aCdzIHN0 YXRlIGNoYW5nZSBmcm9tIGRvd24gdG8gdXAsCj4gZ2V0cHJpbygpIG9mIHRoZSBwcmlvcml0aXpl ciBpcyB0cmlnZ2VyZWQsIGFuZAo+IHRoZSBjdXJyZW50IHBhdGggaXMgbm90IHVuZGVyIElPcy4K PiBVc3VhbGx5LCB0aGUgMTAwMCByZWFkcyB3aWxsIGJlIGZpbmlzaCBmYXN0bHkuCj4gQW5kIGhh dmUgZ2V0cHJpbygpIG5lZWQgdG8gZ2V0IHRoZSB1cC10by1kYXRlIGF2ZXJhZ2UgZGVsYXkgb2Yg dGhlCj4gY3VycmVudCBwYXRoLCB0aGVzZSBpbnRlcnZhbCBjYWxjdWxhdGlvbnMgc3luY2hyb25v dXNseQo+IGlzIGVzc2VudGlhbCBiZWNhdXNlIG9mIHVucmVhc29uYWJsZSBhc3luY2hyb25vdXNs eSBwcm9jZXNzJ3MKPiBleGVjdXRpbmcgdGltZSBELXZhbHVlLCBwYXJ0aWN1bGF5bHkgd2hlbiBh ZGQgYSBuZXcgcGF0aCBvcgo+IHRoZSBwYXRoJ3Mgc3RhdGUgY2hhbmdlIGRvd24gdG8gdXAuCgpJ IGFtIHNvcnJ5LCBJIHdhcyBvbiB0aGUgd3JvbmcgdHJhY2sgaGVyZS4gRG9pbmcgdGhpcyBhc3lu Y2hyb25vdXNseSBpcwpyZWFsbHkgbm90IGdvaW5nIHRvIHdvcmsuIFNvcnJ5IGFib3V0IHRoYXQu IFRoZSBkZWZhdWx0ICJjb25zIiB2YWx1ZSBpcwoyMCwgc28gdGhhdCBzaG91bGQgYmUgYWNjZXB0 YWJsZS7CoAoKSG93ZXZlciBwbGVhc2UgY29uc2lkZXIgbG93ZXJpbmcgdGhlIHVwcGVyIGJvdW5k LCBJIGtpbmQgb2YgZG91YnQgdGhhdAoxMDAwIElPcyB3aWxsIGZpbmlzaCBxdWlja2x5LiBNb3Jl IG9mdGVuIHRoYW4gbm90LCBhIGxvdCBvZiBwYXRocyB3aWxsCmFwcGVhciBhdCB0aGUgc2FtZSB0 aW1lIChlLmcuIGlmIGEgcG9ydCBvZiBhIHN0b3JhZ2UgYXJyYXkgaXMgZW5hYmxlZCkKYW5kIHdl J2xsIGhhdmUgdG8gc2VuZCAxMDAwIElPcyB0byBlYWNoIG9uZS4KCj4gCj4gUGxlYXNlIGZpbmQg dGhlIHVwLXRvLWRhdGUgcGF0Y2ggYmVsb3c6Cj4gCj4gLS0tCj4gRnJvbSAxYTk0MjZkZmJhZDAw YjVkYmVmYzcwMjA2MDNlNDBlODg5NmU0ODY5IE1vbiBTZXAgMTcgMDA6MDA6MDAKPiAyMDAxCj4g RnJvbTogWWFuZyBGZW5nIDxwaGlsaXAueWFuZ0BodWF3ZWkuY29tPgo+IERhdGU6IE1vbiwgMTUg TWF5IDIwMTcgMTg6MzM6MjkgKzA4MDAKPiBTdWJqZWN0OiBbUEFUQ0hdIFtkbS1kZXZlbF0gW1BB VENIXSBtdWx0aXBhdGgtdG9vbHM6UHJpb3JpdGl6ZXIgYmFzZWQKPiBvbiBhIHRpbWUtZGVsYXkg YWxnb3JpdGhtCj4gwqBQcmlvcml0aXplciBmb3IgZGV2aWNlIG1hcHBlciBtdWx0aXBhdGgsIHdo ZXJlIHRoZSBjb3JyZXNwb25kaW5nCj4gcHJpb3JpdHkgdmFsdWVzIG9mIHNwZWNpZmljIHBhdGhz IGFyZSBwcm92aWRlZCBieSBhIHRpbWUtZGVsYXkKPiDCoGFsZ29yaXRobS4gQW5kIHRoZSB0aW1l LWRlbGF5IGFsZ29yaXRobSBpcyBkZXBlbmRlbnQgb24gdGhlCj4gZm9sbG93aW5nIGFyZ3VtZW50 cyhkZWxheV9pbnRlcnZhbCwgY29uc19udW0pLiBUaGUgcHJpbmNpcGxlIG9mIHRoZQo+IMKgYWxn b3JpdGhtIGlzIGlsbHVzdHJhdGVkIGFzIGZvbGxvd3M6Cj4gwqAxLiBCeSBzZW5kaW5nIGEgY2Vy dGFpbiBudW1iZXIgImNvbnNfbnVtIiBvZiByZWFkIElPcyB0byB0aGUgY3VycmVudAo+IHBhdGjC oMKgwqDCoGNvbnRpbnVvdXNseSwgdGhlIElPcycgYXZlcmFnZSBkZWxheSBjYW4gYmUgY2FsY3Vs YXRlZC4KPiDCoDIuIEFjY29yZGluZyB0byB0aGUgYXZlcmFnZSBkZWxheSBvZiBlYWNoIHBhdGgg YW5kIHRoZSB3ZWlnaHQgdmFsdWUKPiAiZGVsYXlfaW50ZXJ2YWwiLCB0aGUgcHJpb3JpdHkgInJj IiBvZiBlYWNoIHBhdGggY2FuIGJlIHByb3ZpZGVkLgo+IAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBkZWxheV9pbnRlcnZhbMKgwqBkZWxheV9pbnRlcnZhbMKgwqBkZWxheV9pbnRlcnZhbMKgwqDC oMKgwqDCoGRlbGF5Xwo+IGludGVydmFsCj4gCSB8LS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0t LS0tLXwtLS0tLS0tLS0tLS0tLS18wqDCoMKgfC0tLS0tLS0tLQo+IC0tLS0tLXwKPiAJIHxwcmlv cml0eSByYW5rIDF8cHJpb3JpdHkgcmFuayAyfHByaW9yaXR5IHJhbmsgM3wuLi58cHJpb3JpdHkK PiByYW5rIHh8Cj4gwqDCoMKgwqDCoMKgwqDCoMKgfC0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0t LS0tLS18LS0tLS0tLS0tLS0tLS0tfMKgwqDCoHwtLS0tLS0tCj4gLS0tLS0tLS18Cj4gCQnCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBQcmlvcml0eSBSYW5rIFBhcnRpdGlvbmluZwo+IC0t LQo+IMKgbGlibXVsdGlwYXRoL3ByaW9yaXRpemVycy9NYWtlZmlsZcKgwqDCoMKgwqDCoHzCoMKg wqA2ICstCj4gwqBsaWJtdWx0aXBhdGgvcHJpb3JpdGl6ZXJzL2RlbGF5ZWRwYXRoLmMgfCAyNjEK PiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+IMKgbGlibXVsdGlwYXRoL3ByaW9y aXRpemVycy9kZWxheWVkcGF0aC5oIHzCoMKgMTcgKysrCj4gwqBtdWx0aXBhdGgvbXVsdGlwYXRo LmNvbmYuNcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDE5ICsrKwo+IMKgNCBmaWxl cyBjaGFuZ2VkLCAzMDIgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+IMKgY3JlYXRlIG1v ZGUgMTAwNjQ0IGxpYm11bHRpcGF0aC9wcmlvcml0aXplcnMvZGVsYXllZHBhdGguYwo+IMKgY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYm11bHRpcGF0aC9wcmlvcml0aXplcnMvZGVsYXllZHBhdGguaAo+ IAo+IGRpZmYgLS1naXQgYS9saWJtdWx0aXBhdGgvcHJpb3JpdGl6ZXJzL01ha2VmaWxlCj4gYi9s aWJtdWx0aXBhdGgvcHJpb3JpdGl6ZXJzL01ha2VmaWxlCj4gaW5kZXggMzZiNDJlNC4uOGRmNTIz NCAxMDA2NDQKPiAtLS0gYS9saWJtdWx0aXBhdGgvcHJpb3JpdGl6ZXJzL01ha2VmaWxlCj4gKysr IGIvbGlibXVsdGlwYXRoL3ByaW9yaXRpemVycy9NYWtlZmlsZQo+IEBAIC0xOCwxMyArMTgsMTcg QEAgTElCUyA9IFwKPiDCoAlsaWJwcmlvcmFuZG9tLnNvIFwKPiDCoAlsaWJwcmlvcmRhYy5zbyBc Cj4gwqAJbGlicHJpb3dlaWdodGVkcGF0aC5zbyBcCj4gLQlsaWJwcmlvc3lzZnMuc28KPiArCWxp YnByaW9kZWxheWVkcGF0aC5zbyBcCj4gKwlsaWJwcmlvc3lzZnMuc28KPiAKPiDCoGFsbDogJChM SUJTKQo+IAo+IMKgbGlicHJpb2FsdWEuc286IGFsdWEubyBhbHVhX3J0cGcubwo+IMKgCSQoQ0Mp ICQoTERGTEFHUykgJChTSEFSRURfRkxBR1MpIC1vICRAICReCj4gCj4gK2xpYnByaW9kZWxheWVk cGF0aC5zbzogZGVsYXllZHBhdGgub8KgwqAuLi9jaGVja2Vycy9saWJzZy5vCj4gKwkkKENDKSAk KExERkxBR1MpICQoU0hBUkVEX0ZMQUdTKSAtbyAkQCAkXgo+ICsKPiDCoGxpYnByaW8lLnNvOiAl Lm8KPiDCoAkkKENDKSAkKExERkxBR1MpICQoU0hBUkVEX0ZMQUdTKSAtbyAkQCAkXgo+IAo+IGRp ZmYgLS1naXQgYS9saWJtdWx0aXBhdGgvcHJpb3JpdGl6ZXJzL2RlbGF5ZWRwYXRoLmMKPiBiL2xp Ym11bHRpcGF0aC9wcmlvcml0aXplcnMvZGVsYXllZHBhdGguYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uMDQ5MGU4ZAo+IC0tLSAvZGV2L251bGwKPiArKysgYi9saWJt dWx0aXBhdGgvcHJpb3JpdGl6ZXJzL2RlbGF5ZWRwYXRoLmMKPiBAQCAtMCwwICsxLDI2MSBAQAo+ ICsvKgo+ICsgKiAoQykgQ29weXJpZ2h0IEhVQVdFSSBUZWNobm9sb2d5IENvcnAuIDIwMTcsIDIw MjHCoMKgwqBBbGwgUmlnaHRzCj4gUmVzZXJ2ZWQuCj4gKyAqCj4gKyAqIG1haW4uYwo+ICsgKgo+ ICsgKiBQcmlvcml0aXplciBmb3IgZGV2aWNlIG1hcHBlciBtdWx0aXBhdGgsIHdoZXJlIHRoZSBj b3JyZXNwb25kaW5nCj4gcHJpb3JpdHkKPiArICogdmFsdWVzIG9mIHNwZWNpZmljIHBhdGhzIGFy ZSBwcm92aWRlZCBieSBhIHRpbWUtZGVsYXkgYWxnb3JpdGhtLgo+IEFuZCB0aGUKPiArICogdGlt ZS1kZWxheSBhbGdvcml0aG0gaXMgZGVwZW5kZW50IG9uIGFyZ3VtZW50cy4KPiArICoKPiArICog VGhlIHByaW5jaXBsZSBvZiB0aGUgYWxnb3JpdGhtIGFzIGZvbGxvd3M6Cj4gKyAqIDEuIEJ5IHNl bmRpbmcgYSBjZXJ0YWluIG51bWJlciAiY29uc19udW0iIG9mIHJlYWQgSU9zIHRvIHRoZQo+IGN1 cnJlbnQgcGF0aAo+ICsgKsKgwqDCoMKgY29udGludW91c2x5LCB0aGUgSU9zJyBhdmVyYWdlIGRl bGF5IGNhbiBiZSBjYWxjdWxhdGVkLgo+ICsgKiAyLiBBY2NvcmRpbmcgdG8gdGhlIGF2ZXJhZ2Ug ZGVsYXkgb2YgZWFjaCBwYXRoIGFuZCB0aGUgd2VpZ2h0Cj4gdmFsdWUKPiArICrCoMKgwqDCoCJk ZWxheV9pbnRlcnZhbCIsIHRoZSBwcmlvcml0eSAicmMiIG9mIGVhY2ggcGF0aCBjYW4gYmUKPiBw cm92aWRlZC4KPiArICoKPiArICogQXV0aG9yKHMpOiBZYW5nIEZlbmcgPHBoaWxpcC55YW5nQGh1 YXdlaS5jb20+Cj4gKyAqwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgWm91IE1pbmcgPHpvdW1pbmcu em91bWluZ0BodWF3ZWkuY29tPgo+ICsgKgo+ICsgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5k ZXIgdGhlIEdQTC4KPiArICovCj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8Y3R5 cGUuaD4KPiArI2luY2x1ZGUgPHRpbWUuaD4KPiArCj4gKyNpbmNsdWRlICJkZWJ1Zy5oIgo+ICsj aW5jbHVkZSAicHJpby5oIgo+ICsjaW5jbHVkZSAic3RydWN0cy5oIgo+ICsjaW5jbHVkZSAiLi4v Y2hlY2tlcnMvbGlic2cuaCIKPiArCj4gKyNpbmNsdWRlICJkZWxheWVkcGF0aC5oIgo+ICsKPiAr I2RlZmluZSBUSFJFU19VU0VDX1ZBTFVFwqDCoMKgwqDCoMKgwqDCoDMwMDAwMDAwMExMwqDCoMKg wqAvKlVTRUMsIDMwMFNFQyovCj4gKyNkZWZpbmUgREVGQVVMVF9ERUxBWV9JTlRFUlZBTMKgwqAx MMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLypNU0VDKi8KPiArI2RlZmluZSBERUZBVUxUX0NP TlNfTlVNwqDCoMKgwqDCoMKgwqDCoDIwCj4gKwo+ICsjZGVmaW5lIE1BWF9DSEFSX1NJWkXCoMKg wqDCoMKgwqDCoMKgwqDCoMKgMzAKPiArCj4gKyNkZWZpbmUgQ0hBUl9TRUPCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCJzIgo+ICsjZGVmaW5lIENIQVJfTVNFQ8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCJtcyIKPiArI2RlZmluZSBDSEFSX1VTRUPCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAidXMiCj4gKwo+ICtlbnVtIGludGVydmFsX3R5cGUgewo+ICvCoMKgwqDC oElOVEVSVkFMX1NFQywKPiArwqDCoMKgwqBJTlRFUlZBTF9NU0VDLAo+ICvCoMKgwqDCoElOVEVS VkFMX1VTRUMsCj4gK8KgwqDCoMKgSU5URVJWQUxfSU5WQUxJRAo+ICt9Owo+ICsKPiArLyogaW50 ZXJ2YWxfdW5pdF9zdHIgYW5kIGludGVydmFsX3VuaXRfdHlwZSBrZWVwIHRoZSBzYW1lIGFzc2ln bm1lbnQKPiBzZXF1ZW5jZSAqLwo+ICtzdGF0aWMgY29uc3QgY2hhciBpbnRlcnZhbF91bml0X3N0 cltdW01BWF9DSEFSX1NJWkVdID0gewo+ICvCoMKgwqDCoENIQVJfVVNFQywgQ0hBUl9NU0VDLCBD SEFSX1NFQwo+ICt9Owo+ICtzdGF0aWMgY29uc3QgaW50IGludGVydmFsX3VuaXRfdHlwZVtdID0g ewo+ICvCoMKgwqDCoElOVEVSVkFMX1VTRUMsIElOVEVSVkFMX01TRUMsIElOVEVSVkFMX1NFQwo+ ICt9OwoKSXQncyBpcnJpdGlhdGluZyB0aGF0IHlvdSB1c2UgYSBkaWZmZXJlbnQgb3JkZXJpbmcg aGVyZSB0aGFuIGluIHRoZQppbnRlcnZhbF90eXBlIGVudW0uCgo+ICsKPiArc3RhdGljIGNvbnN0 IGludCBjb252ZXJzaW9uX3JhdGlvW10gPSB7Cj4gKwlbSU5URVJWQUxfU0VDXQkJPSBVU0VDX1BF Ul9TRUMsCj4gKwlbSU5URVJWQUxfTVNFQ10JwqDCoMKgwqDCoMKgwqDCoD0gVVNFQ19QRVJfTVNF QywKPiArCVtJTlRFUlZBTF9VU0VDXQkJPSBVU0VDX1BFUl9VU0VDLAo+ICsJW0lOVEVSVkFMX0lO VkFMSURdCT0gMAo+ICt9Owo+ICsKPiArCj4gK3N0YXRpYyBpbnQgZG9fcmVhZHNlY3RvcjAoaW50 IGZkLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKPiArewo+ICsJdW5zaWduZWQgY2hhciBidWZbNDA5 Nl07Cj4gKwl1bnNpZ25lZCBjaGFyIHNidWZbU0VOU0VfQlVGRl9MRU5dOwo+ICsJaW50IHJldDsK PiArCj4gKwlyZXQgPSBzZ19yZWFkKGZkLCAmYnVmWzBdLCA0MDk2LCAmc2J1ZlswXSwKPiArCQnC oMKgwqDCoMKgwqBTRU5TRV9CVUZGX0xFTiwgdGltZW91dCk7Cj4gKwo+ICsJcmV0dXJuIHJldDsK PiArfQo+ICsKPiArc3RhdGljIGludCBnZXRfaW50ZXJ2YWxfdHlwZShjaGFyICpzb3VyY2UsIGNo YXIgKnR5cGUpCj4gK3sKPiArwqDCoMKgwqBjaGFyICpwOwo+ICvCoMKgwqDCoGludCBzaXplOwo+ ICvCoMKgwqDCoGludCBpOwo+ICsKPiArwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGlu dGVydmFsX3VuaXRfc3RyKS9NQVhfQ0hBUl9TSVpFOyBpKyspCj4gK8KgwqDCoMKgewo+ICvCoMKg wqDCoMKgwqDCoMKgc2l6ZSA9IHN0cmxlbihpbnRlcnZhbF91bml0X3N0cltpXSk7Cj4gK8KgwqDC oMKgwqDCoMKgwqBwID0gc3Ryc3RyKHNvdXJjZSwgaW50ZXJ2YWxfdW5pdF9zdHJbaV0pOwo+ICvC oMKgwqDCoMKgwqDCoMKgaWYgKHAgIT0gTlVMTCAmJiBwW3NpemVdID09ICd8JykKPiArwqDCoMKg wqDCoMKgwqDCoHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbWVtY3B5KHR5cGUsIGludGVy dmFsX3VuaXRfc3RyW2ldLCBzaXplKzEpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gaW50ZXJ2YWxfdW5pdF90eXBlW2ldOwo+ICvCoMKgwqDCoMKgwqDCoMKgfQo+ICvCoMKgwqDC oH0KPiArCj4gK8KgwqDCoMKgcmV0dXJuIElOVEVSVkFMX0lOVkFMSUQ7Cj4gK30KPiArCj4gKy8q IEluIG11bHRpcGF0aC5jb25mLCBhcmdzIGZvcm06IGRlbGF5X2ludGVydmFsfGNvbnNfbnVtLiBG b3IKPiBleGFtcGxlLAo+ICsqwqDCoGFyZ3MgaXMgIjEwbXN8MjAiLCB0aGlzIGZ1bmN0aW9uIGNh biBnZXQgMTAsIG1zLCBhbmQgMjAuCj4gKyovCj4gK3N0YXRpYyBpbnQgZ2V0X2RpZ2l0X2FuZF90 eXBlKGNoYXIgKmFyZ3MsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCAqaW50ZXJ2YWwsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGludCAqY29uc251bSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaW50ICp0eXBlKQo+ICt7Cj4gK8KgwqDCoMKgY2hhciB0eXBlc3RyW01BWF9DSEFSX1NJ WkVdOwo+ICvCoMKgwqDCoGNoYXIgc291cmNlW01BWF9DSEFSX1NJWkVdOwo+ICvCoMKgwqDCoGNo YXIgdmVydGljYVtdID0gInwiOwo+ICvCoMKgwqDCoGNoYXIgKnRva2VuYmVmb3JlID0gTlVMTDsK PiArwqDCoMKgwqBjaGFyICp0b2tlbmFmdGVyID0gTlVMTDsKPiArwqDCoMKgwqBjaGFyICp0bXAg PSBOVUxMOwo+ICvCoMKgwqDCoHVuc2lnbmVkIGludCBzaXplID0gc3RybGVuKGFyZ3MpOwo+ICsK PiArwqDCoMKgwqBpZiAoKGFyZ3MgPT0gTlVMTCkgfHwgKGludGVydmFsID09IE5VTEwpCj4gK8Kg wqDCoMKgwqDCoMKgwqB8fCAoY29uc251bSA9PSBOVUxMKSB8fCAodHlwZSA9PSBOVUxMKSkKPiAr wqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICsKPiArwqDCoMKgwqAvKiBpbnQgdHlwZSAqLwo+ ICvCoMKgwqDCoGlmICgoc2l6ZSA8IDEpIHx8IChzaXplID4gTUFYX0NIQVJfU0laRS0xKSkKPiAr wqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICsKPiArwqDCoMKgwqBtZW1jcHkoc291cmNlLCBh cmdzLCBzaXplKzEpOwo+ICvCoMKgwqDCoGlmIChzdHJzdHIoc291cmNlLCB2ZXJ0aWNhKSA9PSBO VUxMKQo+ICvCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gKwo+ICvCoMKgwqDCoCp0eXBlID0g Z2V0X2ludGVydmFsX3R5cGUoc291cmNlLCB0eXBlc3RyKTsKPiArwqDCoMKgwqBpZiAoKnR5cGUg PT0gSU5URVJWQUxfSU5WQUxJRCkKPiArwqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBjb25k bG9nKDAsICJkZWxheV9pbnRlcnZhbCB0eXBlIGlzIGludmFsaWQiKTsKPiArwqDCoMKgwqDCoMKg wqDCoHJldHVybiAwOwo+ICvCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgdG9rZW5iZWZvcmUgPSBz dHJ0b2soc291cmNlLCB2ZXJ0aWNhKTsKPiArwqDCoMKgwqB0b2tlbmFmdGVyID0gc3RydG9rKE5V TEwsIHZlcnRpY2EpOwo+ICvCoMKgwqDCoHR5cGVzdHJbMV0gPSAnXDAnOwo+ICvCoMKgwqDCoHRv a2VuYmVmb3JlID0gc3RydG9rKHRva2VuYmVmb3JlLCB0eXBlc3RyKTsKPiArwqDCoMKgwqBpZiAo KHRva2VuYmVmb3JlID09IE5VTEwpIHx8ICh0b2tlbmFmdGVyID09IE5VTEwpKQo+ICvCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gKwo+ICvCoMKgwqDCoHRtcCA9IHRva2VuYmVmb3JlOwo+ICvC oMKgwqDCoHdoaWxlICgqdG1wICE9ICdcMCcpCj4gK8KgwqDCoMKgwqDCoMKgwqBpZiAoIWlzZGln aXQoKnRtcCsrKSkKPiArwqDCoMKgwqDCoMKgwqDCoHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY29uZGxvZygwLCAiZGVsYXlfaW50ZXJ2YWwgc3RyaW5nIGluY2x1ZGUgaW52YWxpZAo+IGNo YXIiKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK8KgwqDCoMKgwqDC oMKgwqB9Cj4gKwo+ICvCoMKgwqDCoHRtcCA9IHRva2VuYWZ0ZXI7Cj4gK8KgwqDCoMKgd2hpbGUg KCp0bXAgIT0gJ1wwJykKPiArwqDCoMKgwqDCoMKgwqDCoGlmICghaXNkaWdpdCgqdG1wKyspKQo+ ICvCoMKgwqDCoMKgwqDCoMKgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25kbG9nKDAs ICJjb25zX251bSBzdHJpbmcgaW5jbHVkZSBpbnZhbGlkIGNoYXIiKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDC oCppbnRlcnZhbCA9IGF0b2kodG9rZW5iZWZvcmUpOwo+ICvCoMKgwqDCoCpjb25zbnVtID0gYXRv aSh0b2tlbmFmdGVyKTsKPiArCj4gK8KgwqDCoMKgcmV0dXJuIDE7Cj4gK30KCnNlZSBhYm92ZS4K Cj4gKwo+ICtpbnQgY2hlY2tfYXJnc192YWxpZChpbnQgZGVsYXlfaW50ZXJ2YWwsIGludCBjb25z X251bSwgaW50IHR5cGUpCj4gK3sKPiArwqDCoMKgwqBpZiAodHlwZSA9PSBJTlRFUlZBTF9TRUMp Cj4gK8KgwqDCoMKgewo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKChkZWxheV9pbnRlcnZhbCA8IDEp IHx8IChkZWxheV9pbnRlcnZhbCA+IDYwKSkKPiArwqDCoMKgwqDCoMKgwqDCoHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgY29uZGxvZygwLCAiZGVsYXlfaW50ZXJ2YWwgdmFsdWVzIGlzIGlu dmFsaWQiKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK8KgwqDCoMKg wqDCoMKgwqB9Cj4gK8KgwqDCoMKgfQo+ICvCoMKgwqDCoGVsc2UgaWYgKHR5cGUgIT0gSU5URVJW QUxfSU5WQUxJRCkKPiArwqDCoMKgwqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBpZiAoKGRlbGF5X2lu dGVydmFsIDwgMSkgfHwgKGRlbGF5X2ludGVydmFsID49IDEwMDApKQo+ICvCoMKgwqDCoMKgwqDC oMKgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb25kbG9nKDAsICJkZWxheV9pbnRlcnZh bCB2YWx1ZXMgaXMgaW52YWxpZCIpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g MDsKPiArwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDCoGlmICgo Y29uc19udW0gPCAzKSB8fCAoY29uc19udW0gPiAxMDAwKSkKPiArwqDCoMKgwqB7Cj4gK8KgwqDC oMKgwqDCoMKgwqBjb25kbG9nKDAsICJjb25zX251bSB2YWx1ZXMgaXMgaW52YWxpZCIpOwo+ICvC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK8KgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqByZXR1 cm4gMTsKPiArfQo+ICsKCnNlZSBhYm92ZS4KCj4gK2ludCBnZXRfZGVsYXlfcHJlZl9hcmcoY2hh ciAqYXJncywgaW50ICpkZWxheV9pbnRlcnZhbCwgaW50Cj4gKmNvbnNfbnVtLCBpbnQgKmludGVy dmFsX3R5cGUpCj4gK3sKPiArwqDCoMKgwqBpZiAoZ2V0X2RpZ2l0X2FuZF90eXBlKGFyZ3MsIGRl bGF5X2ludGVydmFsLCBjb25zX251bSwKPiBpbnRlcnZhbF90eXBlKSA9PSAwKQo+ICvCoMKgwqDC oMKgwqDCoMKgcmV0dXJuIDA7Cj4gKwo+ICvCoMKgwqDCoGlmIChjaGVja19hcmdzX3ZhbGlkKCpk ZWxheV9pbnRlcnZhbCwgKmNvbnNfbnVtLCAqaW50ZXJ2YWxfdHlwZSkKPiA9PSAwKQo+ICvCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gKwo+ICvCoMKgwqDCoHJldHVybiAxOwo+ICt9Cj4gKwo+ ICtsb25nIGxvbmcgZ2V0X2NvbnZlcnNpb25fcmF0aW8oaW50IHR5cGUpCj4gK3sKPiArwqDCoMKg wqByZXR1cm4gY29udmVyc2lvbl9yYXRpb1t0eXBlXTsKPiArfQo+ICsKPiAraW50IGdldHByaW8g KHN0cnVjdCBwYXRoICpwcCwgY2hhciAqYXJncywgdW5zaWduZWQgaW50IHRpbWVvdXQpCj4gK3sK PiArwqDCoMKgwqBpbnQgcmMsIGRlbGF5X2ludGVydmFsLCBjb25zX251bSwgdHlwZSwgdGVtcDsK PiArwqDCoMKgwqBsb25nIGxvbmcgZGVsYXksIGF2Z2RlbGF5LCByYXRpbzsKPiArwqDCoMKgwqBs b25nIGxvbmcgbWluID0gVEhSRVNfVVNFQ19WQUxVRTsKPiArwqDCoMKgwqBsb25nIGxvbmcgbWF4 ID0gMDsKPiArwqDCoMKgwqBsb25nIGxvbmcgdG9sZGVsYXkgPSAwOwo+ICvCoMKgwqDCoGxvbmcg bG9uZyBiZWZvcmUsIGFmdGVyOwo+ICvCoMKgwqDCoHN0cnVjdCB0aW1lc3BlYyB0djsKPiArCj4g KwlpZiAocHAtPmZkIDwgMCkKPiArCcKgwqDCoMKgcmV0dXJuIC1QUklPX05PX0lORk9STUFUSU9O Owo+ICsKPiArwqDCoMKgwqBpZiAoZ2V0X2RlbGF5X3ByZWZfYXJnKGFyZ3MsICZkZWxheV9pbnRl cnZhbCwgJmNvbnNfbnVtLCAmdHlwZSkKPiA9PSAwKQo+ICvCoMKgwqDCoHsKPiArwqDCoMKgwqDC oMKgwqDCoGNvbmRsb2coMywgIiVzOiBnZXQgZGVsYXkgYXJnIGZhaWwiLCBwcC0+ZGV2KTsKPiAr wqDCoMKgwqDCoMKgwqDCoGRlbGF5X2ludGVydmFsID0gREVGQVVMVF9ERUxBWV9JTlRFUlZBTDsK PiArwqDCoMKgwqDCoMKgwqDCoGNvbnNfbnVtID0gREVGQVVMVF9DT05TX05VTTsKPiArwqDCoMKg wqDCoMKgwqDCoHR5cGUgPSBJTlRFUlZBTF9NU0VDOwo+ICvCoMKgwqDCoH0KPiArCj4gK8KgwqDC oMKgdGVtcCA9IGNvbnNfbnVtOwo+ICvCoMKgwqDCoHdoaWxlICh0ZW1wLS0gPiAwKQo+ICvCoMKg wqDCoHsKPiArwqDCoMKgwqDCoMKgwqDCoCh2b2lkKWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RP TklDLCAmdHYpOwo+ICvCoMKgwqDCoMKgwqDCoMKgYmVmb3JlID0gdGltZXZhbF90b191cygmdHYp OwkJCj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgaWYgKGRvX3JlYWRzZWN0b3IwKHBwLT5mZCwgdGlt ZW91dCkgPT0gMikKPiArwqDCoMKgwqDCoMKgwqDCoHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgY29uZGxvZygwLCAiJXM6IHBhdGggZG93biIsIHBwLT5kZXYpOwo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLTE7Cj4gK8KgwqDCoMKgwqDCoMKgwqB9Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoMKgKHZvaWQpY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZ0dik7Cj4gK8Kg wqDCoMKgwqDCoMKgwqBhZnRlciA9IHRpbWV2YWxfdG9fdXMoJnR2KTsKPiArCj4gK8KgwqDCoMKg wqDCoMKgwqBkZWxheSA9IGFmdGVyIC0gYmVmb3JlOwo+ICvCoMKgwqDCoAkKPiArwqDCoMKgwqDC oMKgwqDCoG1pbiA9IChtaW4gPD0gZGVsYXkpID8gbWluIDogZGVsYXk7Cj4gK8KgwqDCoMKgwqDC oMKgwqBtYXggPSAobWF4ID49IGRlbGF5KSA/IG1heCA6IGRlbGF5Owo+ICsKPiArwqDCoMKgwqDC oMKgwqDCoHRvbGRlbGF5ICs9IGRlbGF5Owo+ICvCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgdG9s ZGVsYXkgLT0gbWluICsgbWF4OwoKV2h5IGFyZSB5b3UgZG9pbmcgdGhpcz8gSWYgeW91IHdhbnQg dG8gZGlzY2FyZCAiZXh0cmVtZSIgdmFsdWVzLCB0aGlzCmlzIHByb2JhYmx5IG5vdCBzdWZmaWNp ZW50LiBJZiBjb25zID09IDMsIHRoaXMgd2lsbCBoYXZlIHRoZSBlZmZlY3QgdG8KdXNlIGEgc2lu Z2xlIG1lYXN1cmVtZW50IHJhdGhlciB0aGFuIGFuIGF2ZXJhZ2UsIGlzIHRoYXQgaW50ZW5kZWQ/ CgpCdHcsIGFzIHlvdSBhcmUgZG9pbmcgc3RhdGlzdGljcyBoZXJlIGFueXdheSwgeW91IG1heSB3 YW50IHRvIGNhbGN1bGF0ZQp0aGUgZXN0aW1hdGUgb2YgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBh bmQgd2FybiB0aGUgdXNlciBpZiB0aGUKZGVsYXlfaW50ZXJ2YWwgaXMgc21hbGxlciB0aGFuLCBz YXksIDIgKiBzdGFuZGFyZCBkZXZpYXRpb24uCgpQbGVhc2UgY29uc2lkZXIgcHJpbnRpbmcgYSBt ZXNzYWdlIHdpdGggdGhlIG1lYXN1cmVkIHZhbHVlIGF0IGRlYnVnCmxldmVsIDMgb3IgaGlnaGVy LgoKPiArwqDCoMKgwqBhdmdkZWxheSA9IHRvbGRlbGF5Lyhsb25nIGxvbmcpKGNvbnNfbnVtIC0g Mik7Cj4gK8KgwqDCoMKgaWYgKGF2Z2RlbGF5ID4gVEhSRVNfVVNFQ19WQUxVRSkKPiArwqDCoMKg wqB7Cj4gK8KgwqDCoMKgwqDCoMKgwqBjb25kbG9nKDAsICIlczogYXZnZGVsYXkgaXMgbW9yZSB0 aGFuIHRocmVzb2xkIiwgcHAtPmRldik7Cj4gK8KgwqDCoMKgwqDCoMKgwqByZXR1cm4gMTsKPiAr wqDCoMKgwqB9Cj4gKwo+ICsJcmF0aW8gPSBnZXRfY29udmVyc2lvbl9yYXRpbyh0eXBlKTsKPiAr CXJjID0gKGludCkoVEhSRVNfVVNFQ19WQUxVRSAtIChhdmdkZWxheS8oKChsb25nCj4gbG9uZylk ZWxheV9pbnRlcnZhbCkgKiByYXRpbykpKTsKPiArCj4gK8KgwqDCoMKgcmV0dXJuIHJjOwo+ICt9 Cj4gZGlmZiAtLWdpdCBhL2xpYm11bHRpcGF0aC9wcmlvcml0aXplcnMvZGVsYXllZHBhdGguaAo+ IGIvbGlibXVsdGlwYXRoL3ByaW9yaXRpemVycy9kZWxheWVkcGF0aC5oCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5kODIxM2U5Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBi L2xpYm11bHRpcGF0aC9wcmlvcml0aXplcnMvZGVsYXllZHBhdGguaAo+IEBAIC0wLDAgKzEsMTcg QEAKPiArI2lmbmRlZiBfREVMQVlFRFBBVEhfSAo+ICsjZGVmaW5lIF9ERUxBWUVEUEFUSF9ICj4g Kwo+ICsjZGVmaW5lIFBSSU9fREVMQVlFRF9QQVRIICJkZWxheWVkcGF0aCIKPiArCj4gKyNkZWZp bmUgUFJJT19OT19JTkZPUk1BVElPTiA1Cj4gKwo+ICsjZGVmaW5lIFVTRUNfUEVSX1NFQ8KgwqDC oMKgwqDCoDEwMDAwMDBMTAo+ICsjZGVmaW5lIFVTRUNfUEVSX01TRUPCoMKgwqDCoMKgMTAwMExM Cj4gKyNkZWZpbmUgVVNFQ19QRVJfVVNFQ8KgwqDCoMKgwqAxTEwKPiArCj4gK3N0YXRpYyBpbmxp bmUgbG9uZyBsb25nIHRpbWV2YWxfdG9fdXMoY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0dikKPiAr ewo+ICsJcmV0dXJuICgobG9uZyBsb25nKSB0di0+dHZfc2VjICogVVNFQ19QRVJfU0VDKSArICh0 di0KPiA+dHZfbnNlYyA+PiAxMCk7Cj4gK30KPiArCj4gKyNlbmRpZgo+IGRpZmYgLS1naXQgYS9t dWx0aXBhdGgvbXVsdGlwYXRoLmNvbmYuNSBiL211bHRpcGF0aC9tdWx0aXBhdGguY29uZi41Cj4g aW5kZXggNTkzOTY4OC4uZjFlMTI2ZSAxMDA2NDQKPiAtLS0gYS9tdWx0aXBhdGgvbXVsdGlwYXRo LmNvbmYuNQo+ICsrKyBiL211bHRpcGF0aC9tdWx0aXBhdGguY29uZi41Cj4gQEAgLTI5Myw2ICsy OTMsMTAgQEAgR2VuZXJhdGUgYSByYW5kb20gcHJpb3JpdHkgYmV0d2VlbiAxIGFuZCAxMC4KPiDC oEdlbmVyYXRlIHRoZSBwYXRoIHByaW9yaXR5IGJhc2VkIG9uIHRoZSByZWd1bGFyIGV4cHJlc3Np b24gYW5kIHRoZQo+IMKgcHJpb3JpdHkgcHJvdmlkZWQgYXMgYXJndW1lbnQuIFJlcXVpcmVzIHBy aW9fYXJncyBrZXl3b3JkLgo+IMKgLlRQCj4gKy5JIGRlbGF5ZWRwYXRoCj4gK0dlbmVyYXRlIHRo ZSBwYXRoIHByaW9yaXR5IGJhc2VkIG9uIGEgdGltZS1kZWxheSBhbGdvcml0aG0uCj4gK1JlcXVp cmVzIHByaW9fYXJncyBrZXl3b3JkLgo+ICsuVFAKPiDCoC5JIGRhdGFjb3JlCj4gwqAuXCIgWFhY Cj4gwqA/Pz8uIFJlcXVpcmVzIHByaW9fYXJncyBrZXl3b3JkLgo+IEBAIC0zMzMsNiArMzM3LDIx IEBAIHRoZXNlIHZhbHVlcyBjYW4gYmUgbG9va2VkIHVwIHRocm91Z2ggc3lzZnMgb3IKPiBieSBy dW5uaW5nIFxmSW11bHRpcGF0aGQgc2hvdyBwYXQKPiDCoCIlTjolUjolbjolciJcZlIuIEZvciBl eGFtcGxlOiAweDIwMDEwMGUwOGJhMGFlYTA6MHgyMTAxMDBlMDhiYTBhZWEwOi4qOi4qICwgLio6 Lio6aXFuLjIwMDktMTAuY29tLnJlZGhhdC5tc3AubGFiLmFzay0wNjouKgo+IMKgLlJFCj4gwqAu VFAgMTIKPiArLkkgZGVsYXllZAoKc2hvdWxkIGJlICJkZWxheWVkcGF0aCIgaGVyZT8KCj4gK05l ZWRzIGEgdmFsdWUgb2YgdGhlIGZvcm0KPiArXGZJIjxkZWxheV9pbnRlcnZhbHxjb25zX251bT4i XGZSCj4gKy5SUwo+ICsuVFAgOAo+ICsuSSBkZWxheV9pbnRlcnZhbAo+ICtUaGUgaW50ZXJ2YWwg dmFsdWVzIG9mIGF2ZXJhZ2UgSU8tdGltZS1kZWxheSBiZXR3ZWVuIHR3byBkaWZmZXJlbnQKPiBu ZWlnaGJvdXIgcmFua3Mgb2YgcGF0aCBwcmlvcml0eSwgdXNlZCB0byBwYXJ0aXRpb24gZGlmZmVy ZW50Cj4gcHJpb3JpdHkgcmFua3MuCgpJdCBtaWdodCBiZSBnb29kIHRvIGdpdmUgYW4gZXhhbXBs ZSBoZXJlLCBsaWtlIHRoaXM6CgoiSWYgZGVsYXlfaW50ZXJ2YWw9MTBtcywgdGhlIHBhdGhzIHdp bGwgYmUgZ3JvdXBlZCBpbiBwcmlvcml0eSBncm91cHMKd2l0aCBwYXRoIGxhdGVuY3kgMC0xMG1z LCAxMC0yMG1zLCAyMC0zMG1zLCBldGMuIiAKCj4gK0Zvcm06IFhYcywgb3IgWFhYdXMsIG9yIFhY WG1zLiBVbml0OiBTZWNvbmQsIG9yIE1pY3Jvc2Vjb25kLCBvcgo+IE1pbGxpc2Vjb25kLiBWYWxp ZCBWYWx1ZXM6IEludGVnZXIsIHMgWzEsIDYwXSwgbXMgWzEsIDEwMDApLCB1cyBbMSwKPiAxMDAw KSwKPiArRm9yIGV4YW1wbGU6IDEwcywgb3IgMTAwdXMsIG9yIDEwMG1zLiBUaGUgZGVmYXVsdCBp czogMTBtcy4KPiArLlRQCj4gKy5JIGNvbnNfbnVtCj4gK1RoZSBudW1iZXIgb2YgcmVhZCBJT3Mg c2VudCB0byB0aGUgY3VycmVudCBwYXRoIGNvbnRpbnVvdXNseSwgdXNlZAo+IHRvIGNhbGN1bGF0 ZSB0aGUgYXZlcmFnZSBJTy10aW1lLWRlbGF5LiBWYWxpZCBWYWx1ZXM6IEludGVnZXIsIFszLAo+ IDEwMDBdLgo+ICtGb3IgZXhhbXBsZTogMzAuIFRoZSBkZWZhdWx0IGlzOiAyMC4KPiArLlJFCj4g Ky5UUCAxMgo+IMKgLkkgYWx1YQo+IMKgSWYgXGZJZXhjbHVzaXZlX3ByZWZfYml0XGZSIGlzIHNl dCwgcGF0aHMgd2l0aCB0aGUgXGZJcHJlZmVycmVkCj4gcGF0aFxmUiBiaXQKPiDCoHNldCB3aWxs IGFsd2F5cyBiZSBpbiB0aGVpciBvd24gcGF0aCBncm91cC4KCi0tIApEci4gTWFydGluIFdpbGNr IDxtd2lsY2tAc3VzZS5jb20+LCBUZWwuwqArNDkgKDApOTExIDc0MDUzIDIxMDcKU1VTRSBMaW51 eCBHbWJILCBHRjogRmVsaXggSW1lbmTDtnJmZmVyLCBKYW5lIFNtaXRoYXJkLCBHcmFoYW0gTm9y dG9uCkhSQiAyMTI4NCAoQUcgTsO8cm5iZXJnKQoKLS0KZG0tZGV2ZWwgbWFpbGluZyBsaXN0CmRt LWRldmVsQHJlZGhhdC5jb20KaHR0cHM6Ly93d3cucmVkaGF0LmNvbS9tYWlsbWFuL2xpc3RpbmZv L2RtLWRldmVs