From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from us-smtp-delivery-1.mimecast.com ([205.139.110.120] helo=us-smtp-1.mimecast.com) by bombadil.infradead.org with esmtps (Exim 4.92.2 #3 (Red Hat Linux)) id 1iBfvs-0001kL-BI for ath10k@lists.infradead.org; Sat, 21 Sep 2019 14:00:18 +0000 Received: by mail-ed1-f71.google.com with SMTP id d7so6031245edp.23 for ; Sat, 21 Sep 2019 07:00:09 -0700 (PDT) From: Toke =?utf-8?Q?H=C3=B8iland-J=C3=B8rgensen?= Subject: Re: [PATCH 2/4] mac80211: defer txqs removal from rbtree In-Reply-To: <910d9bb5f9016b29fb2aaeb0b89bac38@codeaurora.org> References: <1568639388-27291-1-git-send-email-yiboz@codeaurora.org> <1568639388-27291-2-git-send-email-yiboz@codeaurora.org> <87pnjyiq7o.fsf@toke.dk> <87sgothmpy.fsf@toke.dk> <8cdece5c030fd95817fb099021c38613@codeaurora.org> <87tv98fu6l.fsf@toke.dk> <1b4ab006d9b5c88035845aaac193ef48@codeaurora.org> <8736gre3bm.fsf@toke.dk> <198124204167325252fcfcd65e3f2733@codeaurora.org> <87ftkp7uuz.fsf@toke.dk> <4574cce4079f8dab2b2bf223431a6eae@codeaurora.org> <877e617qg2.fsf@toke.dk> <910d9bb5f9016b29fb2aaeb0b89bac38@codeaurora.org> Date: Sat, 21 Sep 2019 16:00:06 +0200 Message-ID: <874l157nrt.fsf@toke.dk> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "ath10k" Errors-To: ath10k-bounces+kvalo=adurom.com@lists.infradead.org To: Yibo Zhao Cc: linux-wireless-owner@vger.kernel.org, linux-wireless@vger.kernel.org, ath10k@lists.infradead.org WWlibyBaaGFvIDx5aWJvekBjb2RlYXVyb3JhLm9yZz4gd3JpdGVzOgoKPiBPbiAyMDE5LTA5LTIx IDIxOjAyLCBUb2tlIEjDuGlsYW5kLUrDuHJnZW5zZW4gd3JvdGU6Cj4+IFlpYm8gWmhhbyA8eWli b3pAY29kZWF1cm9yYS5vcmc+IHdyaXRlczoKPj4gCj4+PiBPbiAyMDE5LTA5LTIxIDE5OjI3LCBU b2tlIEjDuGlsYW5kLUrDuHJnZW5zZW4gd3JvdGU6Cj4+Pj4gWWlibyBaaGFvIDx5aWJvekBjb2Rl YXVyb3JhLm9yZz4gd3JpdGVzOgo+Pj4+IAo+Pj4+PiBPbiAyMDE5LTA5LTIwIDE3OjE1LCBUb2tl IEjDuGlsYW5kLUrDuHJnZW5zZW4gd3JvdGU6Cj4+Pj4+PiBZaWJvIFpoYW8gPHlpYm96QGNvZGVh dXJvcmEub3JnPiB3cml0ZXM6Cj4+Pj4+PiAKPj4+Pj4+PiBPbiAyMDE5LTA5LTE5IDE4OjM3LCBU b2tlIEjDuGlsYW5kLUrDuHJnZW5zZW4gd3JvdGU6Cj4+Pj4+Pj4+IFlpYm8gWmhhbyA8eWlib3pA Y29kZWF1cm9yYS5vcmc+IHdyaXRlczoKPj4+Pj4+Pj4gCj4+Pj4+Pj4+PiBPbiAyMDE5LTA5LTE4 IDE5OjIzLCBUb2tlIEjDuGlsYW5kLUrDuHJnZW5zZW4gd3JvdGU6Cj4+Pj4+Pj4+Pj4gWWlibyBa aGFvIDx5aWJvekBjb2RlYXVyb3JhLm9yZz4gd3JpdGVzOgo+Pj4+Pj4+Pj4+IAo+Pj4+Pj4+Pj4+ PiBPbiAyMDE5LTA5LTE4IDA1OjEwLCBUb2tlIEjDuGlsYW5kLUrDuHJnZW5zZW4gd3JvdGU6Cj4+ Pj4+Pj4+Pj4+PiBZaWJvIFpoYW8gPHlpYm96QGNvZGVhdXJvcmEub3JnPiB3cml0ZXM6Cj4+Pj4+ Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+PiBJbiBhIGxvb3AgdHhxcyBkZXF1ZXVlIHNjZW5hcmlvLCBp ZiB0aGUgZmlyc3QgdHhxIGluIHRoZQo+Pj4+Pj4+Pj4+Pj4+IHJidHJlZQo+Pj4+Pj4+Pj4+Pj4+ IGdldHMKPj4+Pj4+Pj4+Pj4+PiByZW1vdmVkIGZyb20gcmJ0cmVlIGltbWVkaWF0ZWx5IGluIHRo ZSAKPj4+Pj4+Pj4+Pj4+PiBpZWVlODAyMTFfcmV0dXJuX3R4cSgpLAo+Pj4+Pj4+Pj4+Pj4+IHRo ZQo+Pj4+Pj4+Pj4+Pj4+IGxvb3Agd2lsbCBicmVhayBzb29uIGluIHRoZSBpZWVlODAyMTFfbmV4 dF90eHEoKSBkdWUgdG8KPj4+Pj4+Pj4+Pj4+PiBzY2hlZHVsZV9wb3MKPj4+Pj4+Pj4+Pj4+PiBu b3QgbGVhZGluZyB0byB0aGUgc2Vjb25kIHR4cSBpbiB0aGUgcmJ0cmVlLiBUaHVzLCBkZWZlcmlu Zwo+Pj4+Pj4+Pj4+Pj4+IHRoZQo+Pj4+Pj4+Pj4+Pj4+IHJlbW92YWwgcmlnaHQgYmVmb3JlIHRo ZSBlbmQgb2YgdGhpcyBzY2hlZHVsZSByb3VuZC4KPj4+Pj4+Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+ PiBDby1kZXZlbG9wZWQtYnk6IFlpYm8gWmhhbyA8eWlib3pAY29kZWF1cm9yYS5vcmc+Cj4+Pj4+ Pj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogWWlibyBaaGFvIDx5aWJvekBjb2RlYXVyb3JhLm9yZz4K Pj4+Pj4+Pj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBUb2tlIEjDuGlsYW5kLUrDuHJnZW5zZW4gPHRv a2VAdG9rZS5kaz4KPj4+Pj4+Pj4+Pj4+IAo+Pj4+Pj4+Pj4+Pj4gSSBkaWRuJ3Qgd3JpdGUgdGhp cyBwYXRjaCwgc28gcGxlYXNlIGRvbid0IHVzZSBteSBzaWduLW9mZi4KPj4+Pj4+Pj4+Pj4+IEkn bGwKPj4+Pj4+Pj4+Pj4+IGFkZAo+Pj4+Pj4+Pj4+Pj4gYWNrIG9yIHJldmlldyB0YWdzIGFzIGFw cHJvcHJpYXRlIGluIHJlcGx5OyBidXQgYSBmZXcgCj4+Pj4+Pj4+Pj4+PiBjb21tZW50cwo+Pj4+ Pj4+Pj4+Pj4gZmlyc3Q6Cj4+Pj4+Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+PiAtLS0KPj4+Pj4+Pj4+ Pj4+PiAgaW5jbHVkZS9uZXQvbWFjODAyMTEuaCAgICAgfCAxNiArKysrKysrKysrLS0KPj4+Pj4+ Pj4+Pj4+PiAgbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmggfCAgMyArKysKPj4+Pj4+Pj4+Pj4+ PiAgbmV0L21hYzgwMjExL21haW4uYyAgICAgICAgfCAgNiArKysrKwo+Pj4+Pj4+Pj4+Pj4+ICBu ZXQvbWFjODAyMTEvdHguYyAgICAgICAgICB8IDYzCj4+Pj4+Pj4+Pj4+Pj4gKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQo+Pj4+Pj4+Pj4+Pj4+ICA0IGZpbGVz IGNoYW5nZWQsIDgzIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4+Pj4+Pj4+Pj4+Pj4g Cj4+Pj4+Pj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNs dWRlL25ldC9tYWM4MDIxMS5oCj4+Pj4+Pj4+Pj4+Pj4gaW5kZXggYWMyZWQ4ZS4uYmE1YTM0NSAx MDA2NDQKPj4+Pj4+Pj4+Pj4+PiAtLS0gYS9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCj4+Pj4+Pj4+ Pj4+Pj4gKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaAo+Pj4+Pj4+Pj4+Pj4+IEBAIC05MjUs NiArOTI1LDggQEAgc3RydWN0IGllZWU4MDIxMV90eF9yYXRlIHsKPj4+Pj4+Pj4+Pj4+PiAKPj4+ Pj4+Pj4+Pj4+PiAgI2RlZmluZSBJRUVFODAyMTFfTUFYX1RYX1JFVFJZCQkzMQo+Pj4+Pj4+Pj4+ Pj4+IAo+Pj4+Pj4+Pj4+Pj4+ICsjZGVmaW5lIElFRUU4MDIxMV9BSVJUSU1FX1RYUV9STV9DSEtf SU5UVl9JTl9NUyAxMDAKPj4+Pj4+Pj4+Pj4+PiArCj4+Pj4+Pj4+Pj4+Pj4gIHN0YXRpYyBpbmxp bmUgdm9pZCBpZWVlODAyMTFfcmF0ZV9zZXRfdmh0KHN0cnVjdAo+Pj4+Pj4+Pj4+Pj4+IGllZWU4 MDIxMV90eF9yYXRlCj4+Pj4+Pj4+Pj4+Pj4gKnJhdGUsCj4+Pj4+Pj4+Pj4+Pj4gIAkJCQkJICB1 OCBtY3MsIHU4IG5zcykKPj4+Pj4+Pj4+Pj4+PiAgewo+Pj4+Pj4+Pj4+Pj4+IEBAIC02MjMyLDcg KzYyMzQsOCBAQCBzdHJ1Y3Qgc2tfYnVmZgo+Pj4+Pj4+Pj4+Pj4+ICppZWVlODAyMTFfdHhfZGVx dWV1ZShzdHJ1Y3QKPj4+Pj4+Pj4+Pj4+PiBpZWVlODAyMTFfaHcgKmh3LAo+Pj4+Pj4+Pj4+Pj4+ ICAgKiBAYWM6IEFDIG51bWJlciB0byByZXR1cm4gcGFja2V0cyBmcm9tLgo+Pj4+Pj4+Pj4+Pj4+ ICAgKgo+Pj4+Pj4+Pj4+Pj4+ICAgKiBTaG91bGQgb25seSBiZSBjYWxsZWQgYmV0d2VlbiBjYWxs cyB0bwo+Pj4+Pj4+Pj4+Pj4+IGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQoKQo+Pj4+Pj4+ Pj4+Pj4+IC0gKiBhbmQgaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoKS4KPj4+Pj4+Pj4+Pj4+ PiArICogYW5kIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfZW5kKCkuIElmIHRoZSB0eHEgaXMgZW1w dHksIAo+Pj4+Pj4+Pj4+Pj4+IGl0Cj4+Pj4+Pj4+Pj4+Pj4gd2lsbAo+Pj4+Pj4+Pj4+Pj4+IGJl Cj4+Pj4+Pj4+Pj4+Pj4gYWRkZWQKPj4+Pj4+Pj4+Pj4+PiArICogdG8gYSByZW1vdmUgbGlzdCBh bmQgZ2V0IHJlbW92ZWQgbGF0ZXIuCj4+Pj4+Pj4+Pj4+Pj4gICAqIFJldHVybnMgdGhlIG5leHQg dHhxIGlmIHN1Y2Nlc3NmdWwsICVOVUxMIGlmIG5vIHF1ZXVlIGlzCj4+Pj4+Pj4+Pj4+Pj4gZWxp Z2libGUuCj4+Pj4+Pj4+Pj4+Pj4gSWYgYSB0eHEKPj4+Pj4+Pj4+Pj4+PiAgICogaXMgcmV0dXJu ZWQsIGl0IHNob3VsZCBiZSByZXR1cm5lZCB3aXRoCj4+Pj4+Pj4+Pj4+Pj4gaWVlZTgwMjExX3Jl dHVybl90eHEoKQo+Pj4+Pj4+Pj4+Pj4+IGFmdGVyIHRoZQo+Pj4+Pj4+Pj4+Pj4+ICAgKiBkcml2 ZXIgaGFzIGZpbmlzaGVkIHNjaGVkdWxpbmcgaXQuCj4+Pj4+Pj4+Pj4+Pj4gQEAgLTYyNjgsNyAr NjI3MSw4IEBAIHZvaWQgCj4+Pj4+Pj4+Pj4+Pj4gaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9zdGFy dChzdHJ1Y3QKPj4+Pj4+Pj4+Pj4+PiBpZWVlODAyMTFfaHcgKmh3LCB1OCBhYykKPj4+Pj4+Pj4+ Pj4+PiAgICogQGh3OiBwb2ludGVyIGFzIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3 KCkKPj4+Pj4+Pj4+Pj4+PiAgICogQGFjOiBBQyBudW1iZXIgdG8gYWNxdWlyZSBsb2NrcyBmb3IK Pj4+Pj4+Pj4+Pj4+PiAgICoKPj4+Pj4+Pj4+Pj4+PiAtICogUmVsZWFzZSBsb2NrcyBwcmV2aW91 c2x5IGFjcXVpcmVkIGJ5Cj4+Pj4+Pj4+Pj4+Pj4gaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQo KS4KPj4+Pj4+Pj4+Pj4+PiArICogUmVsZWFzZSBsb2NrcyBwcmV2aW91c2x5IGFjcXVpcmVkIGJ5 Cj4+Pj4+Pj4+Pj4+Pj4gaWVlZTgwMjExX3R4cV9zY2hlZHVsZV9lbmQoKS4KPj4+Pj4+Pj4+Pj4+ PiBDaGVjawo+Pj4+Pj4+Pj4+Pj4+ICsgKiBhbmQgcmVtb3ZlIHRoZSBlbXB0eSB0eHEgZnJvbSBy Yi10cmVlLgo+Pj4+Pj4+Pj4+Pj4+ICAgKi8KPj4+Pj4+Pj4+Pj4+PiAgdm9pZCBpZWVlODAyMTFf dHhxX3NjaGVkdWxlX2VuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTgKPj4+Pj4+Pj4+Pj4+ PiBhYykKPj4+Pj4+Pj4+Pj4+PiAgCV9fcmVsZWFzZXModHhxX2xvY2spOwo+Pj4+Pj4+Pj4+Pj4+ IEBAIC02Mjg3LDYgKzYyOTEsMTQgQEAgdm9pZCBpZWVlODAyMTFfc2NoZWR1bGVfdHhxKHN0cnVj dAo+Pj4+Pj4+Pj4+Pj4+IGllZWU4MDIxMV9odwo+Pj4+Pj4+Pj4+Pj4+ICpodywgc3RydWN0IGll ZWU4MDIxMV90eHEgKnR4cSkKPj4+Pj4+Pj4+Pj4+PiAgCV9fYWNxdWlyZXModHhxX2xvY2spIF9f cmVsZWFzZXModHhxX2xvY2spOwo+Pj4+Pj4+Pj4+Pj4+IAo+Pj4+Pj4+Pj4+Pj4+ICAvKioKPj4+ Pj4+Pj4+Pj4+PiArICogaWVlZTgwMjExX3R4cXNfY2hlY2sgLSBDaGVjayB0eHFzIHdhaXRpbmcg Zm9yIHJlbW92YWwKPj4+Pj4+Pj4+Pj4+PiArICoKPj4+Pj4+Pj4+Pj4+PiArICogQHRtcjogcG9p bnRlciBhcyBvYnRhaW5lZCBmcm9tIGxvY2FsCj4+Pj4+Pj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4+Pj4+ Pj4gKyAqLwo+Pj4+Pj4+Pj4+Pj4+ICt2b2lkIGllZWU4MDIxMV90eHFzX2NoZWNrKHN0cnVjdCB0 aW1lcl9saXN0ICp0bXIpOwo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiArLyoqCj4+Pj4+ Pj4+Pj4+Pj4gICAqIGllZWU4MDIxMV90eHFfbWF5X3RyYW5zbWl0IC0gY2hlY2sgd2hldGhlciBU WFEgaXMgCj4+Pj4+Pj4+Pj4+Pj4gYWxsb3dlZAo+Pj4+Pj4+Pj4+Pj4+IHRvCj4+Pj4+Pj4+Pj4+ Pj4gdHJhbnNtaXQKPj4+Pj4+Pj4+Pj4+PiAgICoKPj4+Pj4+Pj4+Pj4+PiAgICogVGhpcyBmdW5j dGlvbiBpcyB1c2VkIHRvIGNoZWNrIHdoZXRoZXIgZ2l2ZW4gdHhxIGlzCj4+Pj4+Pj4+Pj4+Pj4g YWxsb3dlZAo+Pj4+Pj4+Pj4+Pj4+IHRvCj4+Pj4+Pj4+Pj4+Pj4gdHJhbnNtaXQgYnkKPj4+Pj4+ Pj4+Pj4+PiBkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKPj4+Pj4+Pj4+ Pj4+PiBiL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oCj4+Pj4+Pj4+Pj4+Pj4gaW5kZXggYTQ1 NTZmOS4uNDlhYTE0M2UgMTAwNjQ0Cj4+Pj4+Pj4+Pj4+Pj4gLS0tIGEvbmV0L21hYzgwMjExL2ll ZWU4MDIxMV9pLmgKPj4+Pj4+Pj4+Pj4+PiArKysgYi9uZXQvbWFjODAyMTEvaWVlZTgwMjExX2ku aAo+Pj4+Pj4+Pj4+Pj4+IEBAIC04NDcsNiArODQ3LDcgQEAgc3RydWN0IHR4cV9pbmZvIHsKPj4+ Pj4+Pj4+Pj4+PiAgCXN0cnVjdCBjb2RlbF9zdGF0cyBjc3RhdHM7Cj4+Pj4+Pj4+Pj4+Pj4gIAlz dHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYWdzOwo+Pj4+Pj4+Pj4+Pj4+ICAJc3RydWN0IHJiX25vZGUg c2NoZWR1bGVfb3JkZXI7Cj4+Pj4+Pj4+Pj4+Pj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGNhbmRpZGF0 ZTsKPj4+Pj4+Pj4+Pj4+PiAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4+Pj4+Pj4+Pj4+Pj4gCj4+ Pj4+Pj4+Pj4+Pj4gIAkvKiBrZWVwIGxhc3QhICovCj4+Pj4+Pj4+Pj4+Pj4gQEAgLTExNDUsNiAr MTE0Niw4IEBAIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgewo+Pj4+Pj4+Pj4+Pj4+ICAJdTY0IGFp cnRpbWVfdl90W0lFRUU4MDIxMV9OVU1fQUNTXTsKPj4+Pj4+Pj4+Pj4+PiAgCXU2NCBhaXJ0aW1l X3dlaWdodF9zdW1bSUVFRTgwMjExX05VTV9BQ1NdOwo+Pj4+Pj4+Pj4+Pj4+IAo+Pj4+Pj4+Pj4+ Pj4+ICsJc3RydWN0IGxpc3RfaGVhZCByZW1vdmVfbGlzdFtJRUVFODAyMTFfTlVNX0FDU107Cj4+ Pj4+Pj4+Pj4+Pj4gKwlzdHJ1Y3QgdGltZXJfbGlzdCByZW1vdmVfdGltZXI7Cj4+Pj4+Pj4+Pj4+ Pj4gIAl1MTYgYWlydGltZV9mbGFnczsKPj4+Pj4+Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+PiAgCWNv bnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHM7Cj4+Pj4+Pj4+Pj4+Pj4gZGlmZiAtLWdpdCBh L25ldC9tYWM4MDIxMS9tYWluLmMgYi9uZXQvbWFjODAyMTEvbWFpbi5jCj4+Pj4+Pj4+Pj4+Pj4g aW5kZXggZTlmZmE4ZS4uNzhmZTI0YSAxMDA2NDQKPj4+Pj4+Pj4+Pj4+PiAtLS0gYS9uZXQvbWFj ODAyMTEvbWFpbi5jCj4+Pj4+Pj4+Pj4+Pj4gKysrIGIvbmV0L21hYzgwMjExL21haW4uYwo+Pj4+ Pj4+Pj4+Pj4+IEBAIC02NjcsMTAgKzY2NywxNSBAQCBzdHJ1Y3QgaWVlZTgwMjExX2h3Cj4+Pj4+ Pj4+Pj4+Pj4gKmllZWU4MDIxMV9hbGxvY19od19ubShzaXplX3QgcHJpdl9kYXRhX2xlbiwKPj4+ Pj4+Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+PiAgCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVN X0FDUzsgaSsrKSB7Cj4+Pj4+Pj4+Pj4+Pj4gIAkJbG9jYWwtPmFjdGl2ZV90eHFzW2ldID0gUkJf Uk9PVF9DQUNIRUQ7Cj4+Pj4+Pj4+Pj4+Pj4gKwkJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5yZW1v dmVfbGlzdFtpXSk7Cj4+Pj4+Pj4+Pj4+Pj4gIAkJc3Bpbl9sb2NrX2luaXQoJmxvY2FsLT5hY3Rp dmVfdHhxX2xvY2tbaV0pOwo+Pj4+Pj4+Pj4+Pj4+ICAJfQo+Pj4+Pj4+Pj4+Pj4+ICAJbG9jYWwt PmFpcnRpbWVfZmxhZ3MgPSBBSVJUSU1FX1VTRV9UWCB8IEFJUlRJTUVfVVNFX1JYOwo+Pj4+Pj4+ Pj4+Pj4+IAo+Pj4+Pj4+Pj4+Pj4+ICsJdGltZXJfc2V0dXAoJmxvY2FsLT5yZW1vdmVfdGltZXIs IGllZWU4MDIxMV90eHFzX2NoZWNrLCAKPj4+Pj4+Pj4+Pj4+PiAwKTsKPj4+Pj4+Pj4+Pj4+PiAr CW1vZF90aW1lcigmbG9jYWwtPnJlbW92ZV90aW1lciwKPj4+Pj4+Pj4+Pj4+PiArCQkgIGppZmZp ZXMgKwo+Pj4+Pj4+Pj4+Pj4+IG1zZWNzX3RvX2ppZmZpZXMoSUVFRTgwMjExX0FJUlRJTUVfVFhR X1JNX0NIS19JTlRWX0lOX01TKSk7Cj4+Pj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ICAJSU5J VF9MSVNUX0hFQUQoJmxvY2FsLT5jaGFuY3R4X2xpc3QpOwo+Pj4+Pj4+Pj4+Pj4+ICAJbXV0ZXhf aW5pdCgmbG9jYWwtPmNoYW5jdHhfbXR4KTsKPj4+Pj4+Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+PiBA QCAtMTMwNSw2ICsxMzEwLDcgQEAgdm9pZCBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhzdHJ1Y3QK Pj4+Pj4+Pj4+Pj4+PiBpZWVlODAyMTFfaHcKPj4+Pj4+Pj4+Pj4+PiAqaHcpCj4+Pj4+Pj4+Pj4+ Pj4gIAl0YXNrbGV0X2tpbGwoJmxvY2FsLT50eF9wZW5kaW5nX3Rhc2tsZXQpOwo+Pj4+Pj4+Pj4+ Pj4+ICAJdGFza2xldF9raWxsKCZsb2NhbC0+dGFza2xldCk7Cj4+Pj4+Pj4+Pj4+Pj4gCj4+Pj4+ Pj4+Pj4+Pj4gKwlkZWxfdGltZXJfc3luYygmbG9jYWwtPnJlbW92ZV90aW1lcik7Cj4+Pj4+Pj4+ Pj4+Pj4gICNpZmRlZiBDT05GSUdfSU5FVAo+Pj4+Pj4+Pj4+Pj4+ICAJdW5yZWdpc3Rlcl9pbmV0 YWRkcl9ub3RpZmllcigmbG9jYWwtPmlmYV9ub3RpZmllcik7Cj4+Pj4+Pj4+Pj4+Pj4gICNlbmRp Zgo+Pj4+Pj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvdHguYyBiL25ldC9tYWM4 MDIxMS90eC5jCj4+Pj4+Pj4+Pj4+Pj4gaW5kZXggZDAwYmFhYS4uNDJjYTAxMCAxMDA2NDQKPj4+ Pj4+Pj4+Pj4+PiAtLS0gYS9uZXQvbWFjODAyMTEvdHguYwo+Pj4+Pj4+Pj4+Pj4+ICsrKyBiL25l dC9tYWM4MDIxMS90eC5jCj4+Pj4+Pj4+Pj4+Pj4gQEAgLTE0NTAsNiArMTQ1MCw3IEBAIHZvaWQg aWVlZTgwMjExX3R4cV9pbml0KHN0cnVjdAo+Pj4+Pj4+Pj4+Pj4+IGllZWU4MDIxMV9zdWJfaWZf ZGF0YSAqc2RhdGEsCj4+Pj4+Pj4+Pj4+Pj4gIAljb2RlbF9zdGF0c19pbml0KCZ0eHFpLT5jc3Rh dHMpOwo+Pj4+Pj4+Pj4+Pj4+ICAJX19za2JfcXVldWVfaGVhZF9pbml0KCZ0eHFpLT5mcmFncyk7 Cj4+Pj4+Pj4+Pj4+Pj4gIAlSQl9DTEVBUl9OT0RFKCZ0eHFpLT5zY2hlZHVsZV9vcmRlcik7Cj4+ Pj4+Pj4+Pj4+Pj4gKwlJTklUX0xJU1RfSEVBRCgmdHhxaS0+Y2FuZGlkYXRlKTsKPj4+Pj4+Pj4+ Pj4+PiAKPj4+Pj4+Pj4+Pj4+PiAgCXR4cWktPnR4cS52aWYgPSAmc2RhdGEtPnZpZjsKPj4+Pj4+ Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+PiBAQCAtMzcyNCw2ICszNzI1LDkgQEAgdm9pZCBpZWVlODAy MTFfc2NoZWR1bGVfdHhxKHN0cnVjdAo+Pj4+Pj4+Pj4+Pj4+IGllZWU4MDIxMV9odwo+Pj4+Pj4+ Pj4+Pj4+ICpodywKPj4+Pj4+Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+PiAgCXNwaW5fbG9ja19iaCgm bG9jYWwtPmFjdGl2ZV90eHFfbG9ja1thY10pOwo+Pj4+Pj4+Pj4+Pj4+IAo+Pj4+Pj4+Pj4+Pj4+ ICsJaWYgKCFsaXN0X2VtcHR5KCZ0eHFpLT5jYW5kaWRhdGUpKQo+Pj4+Pj4+Pj4+Pj4+ICsJCWxp c3RfZGVsX2luaXQoJnR4cWktPmNhbmRpZGF0ZSk7Cj4+Pj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+ Pj4+ICAJaWYgKCFSQl9FTVBUWV9OT0RFKCZ0eHFpLT5zY2hlZHVsZV9vcmRlcikpCj4+Pj4+Pj4+ Pj4+Pj4gIAkJZ290byBvdXQ7Cj4+Pj4+Pj4+Pj4+Pj4gCj4+Pj4+Pj4+Pj4+Pj4gQEAgLTM3ODMs NiArMzc4NywyMCBAQCBzdGF0aWMgdm9pZAo+Pj4+Pj4+Pj4+Pj4+IF9faWVlZTgwMjExX3Vuc2No ZWR1bGVfdHhxKHN0cnVjdAo+Pj4+Pj4+Pj4+Pj4+IGllZWU4MDIxMV9odyAqaHcsCj4+Pj4+Pj4+ Pj4+Pj4gIAlSQl9DTEVBUl9OT0RFKCZ0eHFpLT5zY2hlZHVsZV9vcmRlcik7Cj4+Pj4+Pj4+Pj4+ Pj4gIH0KPj4+Pj4+Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+PiArdm9pZCBpZWVlODAyMTFfcmVtb3Zl X3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKPj4+Pj4+Pj4+Pj4+PiArCQkJICBzdHJ1Y3Qg aWVlZTgwMjExX3R4cSAqdHhxKQo+Pj4+Pj4+Pj4+Pj4+ICt7Cj4+Pj4+Pj4+Pj4+Pj4gKwlzdHJ1 Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKPj4+Pj4+Pj4+Pj4+ PiArCXN0cnVjdCB0eHFfaW5mbyAqdHhxaSA9IHRvX3R4cV9pbmZvKHR4cSk7Cj4+Pj4+Pj4+Pj4+ Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmbG9jYWwtPmFjdGl2ZV90 eHFfbG9ja1t0eHEtPmFjXSk7Cj4+Pj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ICsJaWYgKCFS Ql9FTVBUWV9OT0RFKCZ0eHFpLT5zY2hlZHVsZV9vcmRlcikpIHsKPj4+Pj4+Pj4+Pj4+PiArCQlf X2llZWU4MDIxMV91bnNjaGVkdWxlX3R4cShodywgdHhxKTsKPj4+Pj4+Pj4+Pj4+PiArCQlsaXN0 X2RlbF9pbml0KCZ0eHFpLT5jYW5kaWRhdGUpOwo+Pj4+Pj4+Pj4+Pj4+ICsJfQo+Pj4+Pj4+Pj4+ Pj4+ICt9Cj4+Pj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ICB2b2lkIGllZWU4MDIxMV91bnNj aGVkdWxlX3R4cShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKPj4+Pj4+Pj4+Pj4+PiAgCQkJICAg ICAgc3RydWN0IGllZWU4MDIxMV90eHEgKnR4cSkKPj4+Pj4+Pj4+Pj4+PiAgCV9fYWNxdWlyZXMo dHhxX2xvY2spIF9fcmVsZWFzZXModHhxX2xvY2spCj4+Pj4+Pj4+Pj4+Pj4gQEAgLTM3OTAsNyAr MzgwOCw3IEBAIHZvaWQgaWVlZTgwMjExX3Vuc2NoZWR1bGVfdHhxKHN0cnVjdAo+Pj4+Pj4+Pj4+ Pj4+IGllZWU4MDIxMV9odyAqaHcsCj4+Pj4+Pj4+Pj4+Pj4gIAlzdHJ1Y3QgaWVlZTgwMjExX2xv Y2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKPj4+Pj4+Pj4+Pj4+PiAKPj4+Pj4+Pj4+Pj4+ PiAgCXNwaW5fbG9ja19iaCgmbG9jYWwtPmFjdGl2ZV90eHFfbG9ja1t0eHEtPmFjXSk7Cj4+Pj4+ Pj4+Pj4+Pj4gLQlfX2llZWU4MDIxMV91bnNjaGVkdWxlX3R4cShodywgdHhxKTsKPj4+Pj4+Pj4+ Pj4+PiArCWllZWU4MDIxMV9yZW1vdmVfdHhxKGh3LCB0eHEpOwo+Pj4+Pj4+Pj4+Pj4+ICAJc3Bp bl91bmxvY2tfYmgoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tbdHhxLT5hY10pOwo+Pj4+Pj4+Pj4+ Pj4+ICB9Cj4+Pj4+Pj4+Pj4+Pj4gCj4+Pj4+Pj4+Pj4+Pj4gQEAgLTM4MDMsMTEgKzM4MjEsNDgg QEAgdm9pZCBpZWVlODAyMTFfcmV0dXJuX3R4cShzdHJ1Y3QKPj4+Pj4+Pj4+Pj4+PiBpZWVlODAy MTFfaHcKPj4+Pj4+Pj4+Pj4+PiAqaHcsCj4+Pj4+Pj4+Pj4+Pj4gIAlsb2NrZGVwX2Fzc2VydF9o ZWxkKCZsb2NhbC0+YWN0aXZlX3R4cV9sb2NrW3R4cS0+YWNdKTsKPj4+Pj4+Pj4+Pj4+PiAKPj4+ Pj4+Pj4+Pj4+PiAgCWlmICghUkJfRU1QVFlfTk9ERSgmdHhxaS0+c2NoZWR1bGVfb3JkZXIpICYm Cj4+Pj4+Pj4+Pj4+Pj4gLQkgICAgKHNrYl9xdWV1ZV9lbXB0eSgmdHhxaS0+ZnJhZ3MpICYmCj4+ Pj4+Pj4+Pj4+Pj4gIXR4cWktPnRpbi5iYWNrbG9nX3BhY2tldHMpKQo+Pj4+Pj4+Pj4+Pj4+IC0J CV9faWVlZTgwMjExX3Vuc2NoZWR1bGVfdHhxKGh3LCB0eHEpOwo+Pj4+Pj4+Pj4+Pj4+ICsJCSF0 eHFfaGFzX3F1ZXVlKCZ0eHFpLT50eHEpICYmCj4+Pj4+Pj4+Pj4+Pj4gKwkJbGlzdF9lbXB0eSgm dHhxaS0+Y2FuZGlkYXRlKSkKPj4+Pj4+Pj4+Pj4+PiArCQlsaXN0X2FkZF90YWlsKCZ0eHFpLT5j YW5kaWRhdGUsCj4+Pj4+Pj4+Pj4+Pj4gJmxvY2FsLT5yZW1vdmVfbGlzdFt0eHEtPmFjXSk7Cj4+ Pj4+Pj4+Pj4+Pj4gKwo+Pj4+Pj4+Pj4+Pj4+ICB9Cj4+Pj4+Pj4+Pj4+Pj4gIEVYUE9SVF9TWU1C T0woaWVlZTgwMjExX3JldHVybl90eHEpOwo+Pj4+Pj4+Pj4+Pj4+IAo+Pj4+Pj4+Pj4+Pj4+ICt2 b2lkIF9faWVlZTgwMjExX2NoZWNrX3R4cXMoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWws Cj4+Pj4+Pj4+Pj4+Pj4gaW50Cj4+Pj4+Pj4+Pj4+Pj4gYWMpCj4+Pj4+Pj4+Pj4+Pj4gK3sKPj4+ Pj4+Pj4+Pj4+PiArCXN0cnVjdCB0eHFfaW5mbyAqaXRlciwgKnRtcDsKPj4+Pj4+Pj4+Pj4+PiAr CXN0cnVjdCBzdGFfaW5mbyAqc3RhOwo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiArCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tbYWNdKTsKPj4+Pj4+Pj4+ Pj4+PiArCj4+Pj4+Pj4+Pj4+Pj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaXRlciwgdG1w LCAKPj4+Pj4+Pj4+Pj4+PiAmbG9jYWwtPnJlbW92ZV9saXN0W2FjXSwKPj4+Pj4+Pj4+Pj4+PiAr CQkJCSBjYW5kaWRhdGUpIHsKPj4+Pj4+Pj4+Pj4+PiArCQlzdGEgPSBjb250YWluZXJfb2YoaXRl ci0+dHhxLnN0YSwgc3RydWN0IHN0YV9pbmZvLCBzdGEpOwo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+ Pj4+Pj4+PiArCQlpZiAodHhxX2hhc19xdWV1ZSgmaXRlci0+dHhxKSkKPj4+Pj4+Pj4+Pj4+PiAr CQkJbGlzdF9kZWxfaW5pdCgmaXRlci0+Y2FuZGlkYXRlKTsKPj4+Pj4+Pj4+Pj4+PiArCQllbHNl Cj4+Pj4+Pj4+Pj4+Pj4gKwkJCWllZWU4MDIxMV9yZW1vdmVfdHhxKCZsb2NhbC0+aHcsICZpdGVy LT50eHEpOwo+Pj4+Pj4+Pj4+Pj4+ICsJfQo+Pj4+Pj4+Pj4+Pj4+ICt9Cj4+Pj4+Pj4+Pj4+Pj4g Kwo+Pj4+Pj4+Pj4+Pj4+ICt2b2lkIGllZWU4MDIxMV90eHFzX2NoZWNrKHN0cnVjdCB0aW1lcl9s aXN0ICp0KQo+Pj4+Pj4+Pj4+Pj4+ICt7Cj4+Pj4+Pj4+Pj4+Pj4gKwlzdHJ1Y3QgaWVlZTgwMjEx X2xvY2FsICpsb2NhbCA9IGZyb21fdGltZXIobG9jYWwsIHQsCj4+Pj4+Pj4+Pj4+Pj4gcmVtb3Zl X3RpbWVyKTsKPj4+Pj4+Pj4+Pj4+PiArCXN0cnVjdCB0eHFfaW5mbyAqaXRlciwgKnRtcDsKPj4+ Pj4+Pj4+Pj4+PiArCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwo+Pj4+Pj4+Pj4+Pj4+ICsJaW50IGFj Owo+Pj4+Pj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4+Pj4+PiArCWZvciAoYWMgPSAwOyBhYyA8IElFRUU4 MDIxMV9OVU1fQUNTOyBhYysrKSB7Cj4+Pj4+Pj4+Pj4+Pj4gKwkJc3Bpbl9sb2NrX2JoKCZsb2Nh bC0+YWN0aXZlX3R4cV9sb2NrW2FjXSk7Cj4+Pj4+Pj4+Pj4+Pj4gKwkJX19pZWVlODAyMTFfY2hl Y2tfdHhxcyhsb2NhbCwgYWMpOwo+Pj4+Pj4+Pj4+Pj4+ICsJCXNwaW5fdW5sb2NrX2JoKCZsb2Nh bC0+YWN0aXZlX3R4cV9sb2NrW2FjXSk7Cj4+Pj4+Pj4+Pj4+Pj4gKwl9Cj4+Pj4+Pj4+Pj4+Pj4g Kwo+Pj4+Pj4+Pj4+Pj4+ICsJbW9kX3RpbWVyKCZsb2NhbC0+cmVtb3ZlX3RpbWVyLAo+Pj4+Pj4+ Pj4+Pj4+ICsJCSAgamlmZmllcyArCj4+Pj4+Pj4+Pj4+Pj4gbXNlY3NfdG9famlmZmllcyhJRUVF ODAyMTFfQUlSVElNRV9UWFFfUk1fQ0hLX0lOVFZfSU5fTVMpKTsKPj4+Pj4+Pj4+Pj4+PiArfQo+ Pj4+Pj4+Pj4+Pj4gCj4+Pj4+Pj4+Pj4+PiBJJ2xsIGFzayB0aGUgc2FtZSBhcyBJIGRpZCBsYXN0 IHRpbWUgKHdoZXJlIHlvdSB0b2xkIG1lIHRvIAo+Pj4+Pj4+Pj4+Pj4gaG9sZAo+Pj4+Pj4+Pj4+ Pj4gb2ZmCj4+Pj4+Pj4+Pj4+PiB1bnRpbCB0aGlzIHJvdW5kKToKPj4+Pj4+Pj4+Pj4+IAo+Pj4+ Pj4+Pj4+Pj4gV2h5IGRvIHlvdSBuZWVkIHRoZSB0aW1lciBhbmQgdGhlIHBlcmlvZGljIGNoZWNr PyBJZiBUWFFzIGFyZQo+Pj4+Pj4+Pj4+Pj4gYWRkZWQKPj4+Pj4+Pj4+Pj4+IHRvCj4+Pj4+Pj4+ Pj4+PiB0aGUgcmVtb3ZlIGxpc3QgZHVyaW5nIHRoZSBzY2hlZHVsaW5nIHJ1biwgYW5kCj4+Pj4+ Pj4+Pj4+PiBfX2llZWU4MDIxMV9jaGVja190eHFzKCkKPj4+Pj4+Pj4+Pj4+IGlzIHJ1biBmcm9t IHNjaGVkdWxlX2VuZCgpLCBpc24ndCB0aGF0IHN1ZmZpY2llbnQgdG8gY2xlYXIgCj4+Pj4+Pj4+ Pj4+PiB0aGUKPj4+Pj4+Pj4+Pj4+IGxpc3Q/Cj4+Pj4+Pj4+Pj4+IElzIGl0IHBvc3NpYmxlIHRo YXQgYSB0eHEgaXMgbm90IGFkZGVkIHRvIHRoZSByZW1vdmUgbGlzdCBidXQKPj4+Pj4+Pj4+Pj4g dGhlbgo+Pj4+Pj4+Pj4+PiBwYWNrZXRzIGluIGl0IGFyZSBkcm9wcGVkIGJ5IGZxX2NvZGVsIGFs Z28/IExpa2UgdGhlIHN0YXRpb24KPj4+Pj4+Pj4+Pj4gZGlzY29ubmVjdHMKPj4+Pj4+Pj4+Pj4g d2l0aG91dCBhbnkgbm90aWZpY2F0aW9uLgo+Pj4+Pj4+Pj4+IAo+Pj4+Pj4+Pj4+IFdlbGwgYXMg bG9uZyBhcyBhbGwgdGhlIG90aGVyIGNsZWFudXAgcGF0aHMgY2FsbCBkaXJlY3RseSBpbnRvCj4+ Pj4+Pj4+Pj4gX191bnNjaGVkdWxlX3R4cSgpLCB0aGF0IHNob3VsZCByZW1vdmUgc3RhdGlvbnMg ZnJvbSB0aGUKPj4+Pj4+Pj4+PiBzY2hlZHVsZXIKPj4+Pj4+Pj4+PiB3aGVuCj4+Pj4+Pj4+Pj4g dGhleSBkaXNjb25uZWN0IGV0Yy4KPj4+Pj4+Pj4+IFllcywgdGhlIGRpc2Nvbm5lY3Qgc2NlbmFy aW8gaXMgYSBiYWQgZXhhbXBsZS4gTXkgY29uY2VybiBpcywgCj4+Pj4+Pj4+PiBzYXksCj4+Pj4+ Pj4+PiB3ZQo+Pj4+Pj4+Pj4gaGF2ZSAxMCBzdGF0aW9ucyBhbmQgb25seSBvbmUgb2YgdGhlbSBp cyBhc3NpZ25lZCBhIHZlcnkgc21hbGwKPj4+Pj4+Pj4+IHdlaWdodAo+Pj4+Pj4+Pj4gY29tcGFy ZWQgd2l0aCB0aGF0IG9mIG90aGVycy4gU3VwcG9zZSwgYWZ0ZXIgaXRzIGNoYW5jZSBvZiBUeCwg Cj4+Pj4+Pj4+PiBpdAo+Pj4+Pj4+Pj4gaXMKPj4+Pj4+Pj4+IG1vc3QgbGlrZWx5IHRvIGJlIHBs YWNlZCBpbiB0aGUgcmlnaHRtb3N0KHN0aWxsIGhhcyBzb21lIHBhY2tldHMKPj4+Pj4+Pj4+IGlu Cj4+Pj4+Pj4+PiB0aGUKPj4+Pj4+Pj4+IHR4cSkgYW5kIG5vIG1vcmUgaW5jb21pbmcgZGF0YSBm b3IgaXQuIFRoZSByZW1haW5pbmcgcGFja2V0cyBpbgo+Pj4+Pj4+Pj4gdHhxCj4+Pj4+Pj4+PiB3 aWxsCj4+Pj4+Pj4+PiBiZSBkcm9wcGVkIGR1ZSB0byB0aW1lb3V0IGFsZ28gaW4gY29kZWwoY29y cmVjdCBtZSBpZiBJIGFtIAo+Pj4+Pj4+Pj4gd3JvbmcpCj4+Pj4+Pj4+PiBidXQKPj4+Pj4+Pj4+ IHRoaXMgZW1wdHkgdHhxIHdpbGwgc3RheSBvbiB0aGUgcmJ0cmVlIHVudGlsIG90aGVyIHR4cXMg Z2V0Cj4+Pj4+Pj4+PiBkcmFpbmVkCj4+Pj4+Pj4+PiBvcgo+Pj4+Pj4+Pj4gZ2xvYmFsIHZ0IGNh dGNoIHVwIHdpdGggaXRzIHZ0LiBUaGUgc3RheWluZyB0aW1lIGNvdWxkIGJlIGxvbmcgCj4+Pj4+ Pj4+PiBpZgo+Pj4+Pj4+Pj4gd2VpZ2h0Cj4+Pj4+Pj4+PiBpcyBleHRyZW1lbHkgc21hbGwuIFRo ZW4gZG8gd2UgbmVlZCB0aW1lciB0byBjaGVjayBvciBhbnkgb3RoZXIKPj4+Pj4+Pj4+IGJldHRl cgo+Pj4+Pj4+Pj4gc29sdXRpb24/Cj4+Pj4+Pj4+IAo+Pj4+Pj4+PiBBaCwgSSBzZWUgd2hhdCB5 b3UgbWVhbi4gTm8sIEkgZG9uJ3QgdGhpbmsgdGhpcyB3aWxsIGJlIGEgCj4+Pj4+Pj4+IHByb2Js ZW07Cj4+Pj4+Pj4+IHRoZQo+Pj4+Pj4+PiBzY2VuYXJpbyB5b3UncmUgZGVzY3JpYmluZyB3b3Vs ZCBwbGF5IG91dCBsaWtlIHRoaXM6Cj4+Pj4+Pj4+IAo+Pj4+Pj4+PiAxLiBTdGF0aW9uIGVuZHMg dHJhbnNtaXR0aW5nLCBzdGlsbCBoYXMgYSBzaW5nbGUgcGFja2V0IHF1ZXVlZCwKPj4+Pj4+Pj4g Z2V0cwo+Pj4+Pj4+PiAgICBtb3ZlZCB0byB0aGUgZW5kIG9mIHRoZSByYnRyZWUgKGFuZCBzdGF5 cyB0aGVyZSBmb3IgYSB3aGlsZSkuCj4+Pj4+Pj4+IAo+Pj4+Pj4+PiAyLiBXaGVuIHdlIGZpbmFs bHkgZ2V0IHRvIHRoZSBwb2ludCB3aGVyZSB0aGlzIHN0YXRpb24gZ2V0cyAKPj4+Pj4+Pj4gYW5v dGhlcgo+Pj4+Pj4+PiAgICBjaGFuY2UgdG8gdHJhbnNtaXQsIHRoZSBDb0RlbCBkcm9wIHRpbWVy IHRyaWdnZXJzIGFuZCB0aGUgbGFzdAo+Pj4+Pj4+PiBwYWNrZXQKPj4+Pj4+Pj4gICAgaXMgZHJv cHBlZFswXS4gVGhpcyBtZWFucyB0aGF0IHRoZSBxdWV1ZSB3aWxsIGp1c3QgYmUgZW1wdHkKPj4+ Pj4+Pj4gICAgKGFuZCBpZWVlODAyMTFfdHhfZGVxdWV1ZSgpIHdpbGwgcmV0dXJuIE5VTEwpLgo+ Pj4+Pj4+PiAKPj4+Pj4+Pj4gMy4gQmVjYXVzZSB0aGUgcXVldWUgaXMgZW1wdHksIGllZWU4MDIx MV9yZXR1cm5fdHhxKCkgd2lsbCBub3QgCj4+Pj4+Pj4+IHB1dAo+Pj4+Pj4+PiBpdAo+Pj4+Pj4+ PiAgICBiYWNrIG9uIHRoZSByYnRyZWUuCj4+Pj4+Pj4+IAo+Pj4+Pj4+PiBDcnVjaWFsbHksIGlu IDIuIHRoZSBDb0RlbCBhbGdvcml0aG0gZG9lc24ndCBraWNrIGluIHVudGlsIHRoZQo+Pj4+Pj4+ PiBwb2ludAo+Pj4+Pj4+PiBvZgo+Pj4+Pj4+PiBwYWNrZXQgZGVxdWV1ZS4gQnV0IGV2ZW4gaWYg YW4gZW1wdHkgcXVldWUgc3RheXMgb24gdGhlIHJidHJlZSAKPj4+Pj4+Pj4gZm9yCj4+Pj4+Pj4+ IGEKPj4+Pj4+Pj4gd2hpbGUsIHRoZXJlIGlzIG5vIGhhcm0gaW4gdGhhdDogZXZlbnR1YWxseSBp dCB3aWxsIGdldCBpdHMgdHVybiwKPj4+Pj4+Pj4gaXQKPj4+Pj4+Pj4gd2lsbCB0dXJuIG91dCB0 byBiZSBlbXB0eSwgYW5kIGp1c3QgYmUgc2tpcHBlZCBvdmVyLgo+Pj4+Pj4+IFRoZW4gdGhhdCB3 aWxsIGJlIGZpbmUuIFRoYW5rcyBmb3IgdGhlIGV4cGxhbmF0aW9uIG9mIHRoZSBkcm9wcGluZwo+ Pj4+Pj4+IHBhcnQKPj4+Pj4+PiBpbiBDb0RlbCBhbGdvcml0aG0uCj4+Pj4+PiAKPj4+Pj4+IFl1 cCwgdGhpbmsgc28uIEFuZCB5b3UncmUgd2VsY29tZSA6KQo+Pj4+Pj4gCj4+Pj4+Pj4+IFRoZSBp c3N1ZSB3ZSBuZWVkIHRvIGJlIGNvbmNlcm5lZCBhYm91dCBpcyB0aGUgb3Bwb3NpdGU6IElmIHdl IAo+Pj4+Pj4+PiBoYXZlCj4+Pj4+Pj4+IGEKPj4+Pj4+Pj4gcXVldWUgdGhhdCAqZG9lcyogaGF2 ZSBwYWNrZXRzIHF1ZXVlZCwgYnV0IHdoaWNoIGlzICpub3QqIAo+Pj4+Pj4+PiBzY2hlZHVsZWQK Pj4+Pj4+Pj4gZm9yCj4+Pj4+Pj4+IHRyYW5zbWlzc2lvbiwgdGhhdCB3aWxsIHN0YWxsIFRYLgo+ Pj4+Pj4+IElzIGl0IGJ5IGRlc2lnbiBzaW5jZSBpdHMgdnQgaXMgbW9yZSB0aGFuIGdsb2JhbCB2 dCwgcmlnaHQ/IFRoZQo+Pj4+Pj4+IGxhdHRlbmN5Cj4+Pj4+Pj4gbWF5IHNvbWVob3cgZ2V0IGlt cGFjdGVkIHRob3VnaC4KPj4+Pj4+IAo+Pj4+Pj4gV2VsbCwgaXQgc2hvdWxkIHN0aWxsIHN0YXkg b24gdGhlIHJidHJlZSBhcyBsb25nIGFzIGl0IGhhcyBwYWNrZXRzCj4+Pj4+PiBxdWV1ZWQuIFdl IGRvbid0IGhhdmUgYSBjaGVjayBhbnl3aGVyZSB0aGF0IHJlc2NoZWR1bGVzIFRYUXMgd2hvc2UK Pj4+Pj4+IHZfdAo+Pj4+Pj4gZHJvcHMgYmVsb3cgZ2xvYmFsIHZfdC4uLgo+Pj4+Pj4gCj4+Pj4+ Pj4+IFswXSBDb0RlbCBpbiBtb3N0IGNhc2VzIG9ubHkgZHJvcHMgYSBzaW5nbGUgcGFja2V0IGF0 IGEgdGltZSwgc28gCj4+Pj4+Pj4+IGl0Cj4+Pj4+Pj4+IHdpbGwKPj4+Pj4+Pj4gbm90IGNsZWFy IG91dCBhbiBlbnRpcmUgcXVldWUgd2l0aCBtdWx0aXBsZSBwYWNrZXRzIGluIG9uZSBnby4gCj4+ Pj4+Pj4+IEJ1dAo+Pj4+Pj4+PiB5b3UKPj4+Pj4+Pj4gYXJlIHJpZ2h0IHRoYXQgaXQgY291bGQg Y29uY2VpdmFibHkgZHJvcCB0aGUgbGFzdCBwYWNrZXQgaW4gYQo+Pj4+Pj4+PiBxdWV1ZS4KPj4+ Pj4+Pj4gCj4+Pj4+Pj4+Pj4gV2Ugb25seSBuZWVkIHRvIGRlZmVyIHJlbW92YWwgaW5zaWRlIGEg c2luZ2xlICJzY2hlZHVsaW5nIAo+Pj4+Pj4+Pj4+IHJvdW5kIgo+Pj4+Pj4+Pj4+IChpLmUuLAo+ Pj4+Pj4+Pj4+IGJldHdlZW4gYSBwYWlyIG9mIGllZWU4MDIxMV90eHFfc2NoZWR1bGVfc3RhcnQv ZW5kLiBTbyBpZiB3ZSAKPj4+Pj4+Pj4+PiBqdXN0Cj4+Pj4+Pj4+Pj4gd2Fsawo+Pj4+Pj4+Pj4+ IHRoZSByZW1vdmUgbGlzdCBpbiBzY2hlZHVsZV9lbmQoKSB3ZSBzaG91bGQgYmUgZW5vdWdoLCBu bz8KPj4+Pj4+Pj4+PiAKPj4+Pj4+Pj4+PiBIbW0sIG9yIG1heWJlIGEgc2ltcGxlciB3YXkgdG8g Zml4IHRoZSBvcmlnaW5hbCBpc3N1ZSBpcyBqdXN0IAo+Pj4+Pj4+Pj4+IHRvCj4+Pj4+Pj4+Pj4g aGF2ZQo+Pj4+Pj4+Pj4+IHVuc2NoZWR1bGVfdHhxKCkgdXBkYXRlIHRoZSBzY2hlZHVsZV9wb3Mo KSBwb2ludGVyPwo+Pj4+Pj4+Pj4+IAo+Pj4+Pj4+Pj4+IEkuZS4sIHVuc2NoZWR1bGVfdHhxIGNo ZWNrcyBpZiB0aGUgdHhxIGJlaW5nIHJlbW92ZWQgaXMgCj4+Pj4+Pj4+Pj4gY3VycmVudGx5Cj4+ Pj4+Pj4+Pj4gYmVpbmcKPj4+Pj4+Pj4+PiBwb2ludGVkIHRvIGJ5IHNjaGVkdWxlX3Bvc1thY10s IGFuZCBpZiBpdCBpcywgaXQgdXBkYXRlcwo+Pj4+Pj4+Pj4+IHNjaGVkdWxlX3Bvcwo+Pj4+Pj4+ Pj4+IHRvCj4+Pj4+Pj4+Pj4gYmUgdGhlIHJiX25leHQgb2YgdGhlIGN1cnJlbnQgdmFsdWU/Cj4+ Pj4+Pj4+PiBBY3R1YWxseSwgaWYgc2NoZWR1bGVfcG9zIGlzIHVwZGF0ZWQgdG8gcmJfbmV4dCBv ZiB0aGUgY3VycmVudAo+Pj4+Pj4+Pj4gdmFsdWUsCj4+Pj4+Pj4+PiB0aGVuIGluIHRoZSBuZXh0 X3R4cSgpIHdoZXJlIHdlIGFyZSBnb2luZyB0byB1c2UgcmJfbmV4dCBhZ2FpbiAKPj4+Pj4+Pj4+ IGFuZAo+Pj4+Pj4+Pj4gZmluYWxseSBwaWNrIHRoZSBuZXh0IG5vZGUgb2YgdGhlIG5vZGUgd2Ug cmVhbGx5IHdhbnQuIElzIGl0IAo+Pj4+Pj4+Pj4gZmluZQo+Pj4+Pj4+Pj4gdG8KPj4+Pj4+Pj4+ IHVwZGF0ZSBzY2hlZHVsZV9wb3MgdG8gTlVMTD8KPj4+Pj4+Pj4gCj4+Pj4+Pj4+IEhtbSwgeWVh aCwgZ29vZCBwb2ludC4KPj4+Pj4+Pj4gCj4+Pj4+Pj4+IElmIHdlIGRvIGVuZCB1cCBzZXR0aW5n IHNjaGVkdWxlX3BvcyB0byBOVUxMIGluIHRoZSBtaWRkbGUgb2YgYQo+Pj4+Pj4+PiBzY2hlZHVs aW5nIHJvdW5kLCB0aGF0IHdpbGwgbWFrZSBuZXh0X3R4cSgpICJzdGFydCBvdmVyIiwgYW5kIGRv Cj4+Pj4+Pj4+IGFub3RoZXIKPj4+Pj4+Pj4gbG9vcCB0aHJvdWdoIHRoZSB3aG9sZSB0aGluZy4g SSBndWVzcyB3ZSBtYXkgYmUgYWJsZSBoaXQgYSBjYXNlCj4+Pj4+Pj4+IHdoZXJlCj4+Pj4+Pj4+ IHRoaW5ncyBjYW4gb3NjaWxsYXRlIGJhY2sgYW5kIGZvcnRoIGJldHdlZW4gYWRkaXRpb24gYW5k IHJlbW92YWwKPj4+Pj4+Pj4gcmVzdWx0aW5nIGluIGFuIGluZmluaXRlIGxvb3A/IE5vdCBzdXJl LCBidXQgYXQgbGVhc3QgSSBjYW4ndCAKPj4+Pj4+Pj4gc2VlbQo+Pj4+Pj4+PiB0bwo+Pj4+Pj4+ PiBjb252aW5jZSBteXNlbGYgdGhhdCB0aGlzIGNhbid0IGhhcHBlbi4KPj4+Pj4+PiAKPj4+Pj4+ PiBBcyB0aGUgbG9vcCBvZiBuZXh0X3R4cSB1bmRlciBsb2NrIHByb3RlY3Rpb24gYXMgYmVsb3cs Cj4+Pj4+Pj4gCj4+Pj4+Pj4gdHhxX3NjaGVkdWxlX3N0YXJ0KCk7Cj4+Pj4+Pj4gd2hpbGUodHhx PW5leHRfdHhxKCkpewo+Pj4+Pj4+IC4uLgo+Pj4+Pj4+IHJldHVybl90eHEodHhxKTsKPj4+Pj4+ PiB9Cj4+Pj4+Pj4gdHhxX3NjaGVkdWxlX2VuZCgpOwo+Pj4+Pj4+IAo+Pj4+Pj4+IEkgZG8gbm90 IHNlZSBhbnkgY2hhbmNlIG9mIGFkZGl0aW9uLCBubz8KPj4+Pj4+IAo+Pj4+Pj4gQXMgeW91IG5v dGVkIGluIHlvdXIgb3RoZXIgZW1haWwsIEZlbGl4IHJlZHVjZWQgdGhlIGxvY2tpbmcuIEFuZAo+ Pj4+Pj4geWVhaCwKPj4+Pj4+IHdlIG5lZWQgdG8gcmViYXNlIHRoaXMgc2VyaWVzIHRvIGFsc28g aW5jb3Jwb3JhdGUgdGhhdC4gSSBmaWd1cmUgSQo+Pj4+Pj4gY2FuCj4+Pj4+PiBzZW5kIGFuIHVw ZGF0ZWQgdmVyc2lvbiBvZiB0aGUgZmlyc3QgcGF0Y2ggaW4gdGhlIHNlcmllcyBvbmNlIHdlJ3Zl Cj4+Pj4+PiB3b3JrZWQgb3V0IHRoZSByZW1haW5pbmcgaXNzdWVzIHdpdGggeW91ciBmb2xsb3ct dXAgcGF0Y2hlcy4KPj4+Pj4+IAo+Pj4+PiBPaCwgSSB3YXMgdGhpbmtpbmcgd2Ugd2VyZSBkaXNj dXNzaW5nIHdpdGhvdXQgbG9ja2luZyByZWR1Y2VkLiBZZXMsIAo+Pj4+PiBJCj4+Pj4+IGFsc28g YWdyZWUgdGhlcmUgbWlnaHQgYmUgYSBjYXNlIGNhdXNpbmcgaW5maW5pdGUgbG9vcC4gV2l0aCBs b2NraW5nCj4+Pj4+IHJlZHVjZWQsIHRoZSB0cmVlIGNhbiBiZSBhZGp1c3RlZCBiZXR3ZWVuIG5l eHRfdHhxKCkgYW5kIAo+Pj4+PiByZXR1cm5fdHhxKCkKPj4+Pj4gaW4KPj4+Pj4gdGhlIGxvb3Ag c2l0dWF0aW9uLiBGb3IgZnVydGhlciBkaXNjdXNzaW9uLCBsZXQgJ3MgY29uc2lkZXIsCj4+Pj4+ IDEpIHRoZSB0cmVlIHN0YXJ0cyBsaWtlOgo+Pj4+PiAgICAgICAgIEEtPkItPkMtPkQtPkUKPj4+ Pj4gMikgdGhlbiBuZXh0X3R4cSgpIHJldHVybnMgQSBmb3IgZGVxdWV1aW5nCj4+Pj4+IDMpIGRy aXZlciBkZXF1ZXVlcyBBIGFuZCBkcmFpbmVzIEEgd2l0aG91dCBhbnkgYWN0aXZlIHR4cSBsb2Nr ZWQKPj4+Pj4gbWVhbmluZwo+Pj4+PiB0aGUgdHJlZSBjb3VsZCBiZSBjaGFuZ2VkIHVwb24gVHgg Y29tcGVsZXRpb24uCj4+Pj4+IDQpIHRoZW4gaW4gcmV0dXJuX3R4cSgpLCB0aGUgdHJlZSBjb3Vs ZCBiZSwKPj4+Pj4gICAgICAgICBpICAgQS0+Qi0+Qy0+RC0+RSDvvIhBIGlzIGVtcHR5LCBhbmQg bWF5YmUgc29vbiBiZSBhZGRlZCBiYWNrCj4+Pj4+IGJlZm9yZSB0aGUgbG9vcCBlbmTvvIkKPj4+ Pj4gICAgICAgICBpaSAgQi0+Qy0+QS0+RC0+RSDvvIhBIGlzIGVtcHR5LCBhbmQgbWF5YmUgc29v biBiZSBhZGRlZCBiYWNrCj4+Pj4+IGJlZm9yZSB0aGUgbG9vcCBlbmTvvIkKPj4+Pj4gICAgICAg ICBpaWkgQi0+Qy0+RC0+RS0+QSDvvIhBIGlzIGVtcHR5LCBhbmQgbWF5YmUgc29vbiBiZSBhZGRl ZCBiYWNrCj4+Pj4+IGJlZm9yZSB0aGUgbG9vcCBlbmQpCj4+Pj4+IAo+Pj4+PiB3aXRoIHRoaXMg Y2hhbmdlOgo+Pj4+PiAgIGxvY2FsLT5zY2hlZHVsZV9wb3NbYWNdID0gcmJfbmV4dChub2RlKSA/ OiByYl9wcmV2KG5vZGUpOwo+Pj4+PiAKPj4+Pj4gZm9yIGNhc2UgaSwgbG9jYWwtPnNjaGVkdWxl X3Bvc1thY10gaXMgcmJfbmV4dChBKSB3aGljaCBpcyBCLCBhbmQgaW4KPj4+Pj4gbmV4dF90eHEo KSwgcmJfbmV4dChCKSBpcyB3aGF0IHdlIHJldHVybnMgd2hpY2ggYWN0dWFsbHkgaXMgQyBhbmQg QiAKPj4+Pj4gaXMKPj4+Pj4gc2tpcHBlZCwgbm8/Cj4+Pj4+IAo+Pj4+PiBTaW1pbGlhciBmb3Ig Y2FzZSBpaSwgd2Ugc2tpcCBCLCBDLCBELgo+Pj4+IAo+Pj4+IFl1cCwgSSB0aGluayB5b3UncmUg cmlnaHQuIEJ1dCBpZiB3ZSBjYW4gZml4IHRoaXMgYnkgbWFraW5nCj4+Pj4gaWVlZTgwMjExX3Jl c29ydF90eHEoKSBhd2FyZSBvZiB0aGUgc2NoZWR1bGVfcG9zIGFzIHdlbGwsIG5vPyBJLmUuLCAK Pj4+PiBpZgo+Pj4+IHJlc29ydF90eHEoKSBhY3RzIG9uIHRoZSB0eHEgdGhhdCdzIGN1cnJlbnRs eSBpbiBzY2hlZHVsZV9wb3MsIGl0IAo+Pj4+IHdpbGwKPj4+PiB1cGRhdGUgc2NoZWR1bGUgcG9z IHdpdGggdGhlIHNhbWUgcmJfbmV4dChub2RlKSA/OiByYl9wcmV2KG5vZGUpOwo+Pj4+IChvcHRp b25hbGx5IGFmdGVyIGNoZWNraW5nIHRoYXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBub2RlIGlzIGFj dHVhbGx5Cj4+Pj4gZ29pbmcgdG8gY2hhbmdlKS4KPj4+IFNvcnJ5LCBwbGVhc2UgaWdvcmUgbGFz dCBlbWFpbCBzZW50IGJ5IG1pc3Rha2UuCj4+PiAKPj4+IEkgZG9uJ3QgdGhpbmsgaXQgbWFrZXMg YW55IGRpZmZlcmVuY2Ugd2l0aCB0aGF0IGluIHVuc2NoZWR1bGVfdHhxKCkuIAo+Pj4gRm9yCj4+ PiBjYXNlIGksIGl0IGZpbmFsbHkgcGlja3MgQyBhcyB3ZWxsIGluIG5leHRfdHhxKCkuIEZvciBu ZXh0X3R4cSgpLAo+Pj4gc2NoZWR1bGVfcG9zIG1lYW5zIHByZXZpb3VzIGNhbmRpZGF0ZSBub2Rl IHdoZXJlYXMgd2l0aCB5b3VyIGNoYW5nZSwgCj4+PiBpdAo+Pj4gbG9va3MgbGlrZSBzY2hlZHVs ZV9wb3MgaXMgY3VycmVudCBjYW5kaWRhdGUgbm9kZSBpbnN0ZWFkLgo+PiAKPj4gSG1tLCB0aGF0 IHdhcyBub3QgYWN0dWFsbHkgd2hhdCBJIHdhcyB0aGlua2luZywgYnV0IHllYWggSSB0aGluayB5 b3UncmUKPj4gcmlnaHQgdGhhdCBpdCB3b3VsZCBiZSBlYXNpZXIgdG8ganVzdCBjaGFuZ2UgaXQg c28gc2NoZWR1bGVfcG9zIGlzCj4+IHBvaW50aW5nIHRvIHRoZSBuZXh0IGFuZCBub3QgdGhlIGN1 cnJlbnQgdHhxIHdlIHdhbnQgdG8gc2NoZWR1bGUuCj4gU28gZG8geW91IG1lYW4gd2UgY2FuIGNo YW5nZSBuZXh0X3R4cSBsaWtlIHRoaXMsCj4KPiAgIHN0cnVjdCBpZWVlODAyMTFfdHhxICppZWVl ODAyMTFfbmV4dF90eHEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IAo+IGFjKQo+ICAgewo+ ICAgCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gaHdfdG9fbG9jYWwoaHcpOwo+IAlz dHJ1Y3QgcmJfbm9kZSAqbm9kZSA9IGxvY2FsLT5zY2hlZHVsZV9wb3NbYWNdOwo+ICAgCXN0cnVj dCB0eHFfaW5mbyAqdHhxaSA9IE5VTEw7Cj4gCWJvb2wgZmlyc3QgPSBmYWxzZTsKPgo+ICAgCWxv Y2tkZXBfYXNzZXJ0X2hlbGQoJmxvY2FsLT5hY3RpdmVfdHhxX2xvY2tbYWNdKTsKPgo+IAlpZiAo IW5vZGUpIHsKPiAJICAgICAgICBub2RlID0gcmJfZmlyc3RfY2FjaGVkKCZsb2NhbC0+YWN0aXZl X3R4cXNbYWNdKTsKPiAJCWZpcnN0ID0gdHJ1ZTsKPiAtCX0gZWxzZQo+IC0JCW5vZGUgPSByYl9u ZXh0KG5vZGUpOwo+ICsgICAgICAgfQo+ICsKPiAJaWYgKCFub2RlKQo+ICAgCQlyZXR1cm4gTlVM TDsKCkFoLCBubywgbm93IEkgcmVtZW1iZXIgd2h5IHRoaXMgZGlkbid0IHdvcmsgYW5kIEkgd2Vu dCB3aXRoIHRoZSBvdGhlcgphcHByb2FjaDogSWYgeW91IG1ha2UgdGhpcyBjaGFuZ2UsIHlvdSBh bHNvIGhhdmUgdG8gaGF2ZSB0aGlzIGF0IHRoZQplbmQ6Cgpsb2NhbC0+c2NoZWR1bGVfcG9zW2Fj XSA9IHJiX25leHQobm9kZSk7CgoKQnV0IHRoaXMgbWVhbnMgd2UgY2FuIG5vIGxvbmdlciBkaXN0 aW5ndWlzaCBiZXR3ZWVuIGhhdmluZyBnb25lIHRocm91Z2gKdGhlIHdob2xlIHRoaW5nIChzbyBy Yl9uZXh0KCkgcmV0dXJucyBOVUxMKSwgb3Igc3RhcnRpbmcgb3V0IHdpdGgKbm90aGluZy4KClNv LCBpbnN0ZWFkIHdlIG5lZWQgdG8ga2VlcCBuZXh0X3R4cSgpIHRoZSB3YXkgaXQgaXMsIGFuZCBq dXN0IGFkZAoKbG9jYWwtPnNjaGVkdWxlX3Bvc1thY10gPSByYl9wcmV2KG5vZGUpOwoKd2hlbmV2 ZXIgd2UgcmVtb3ZlIGEgbm9kZSAoYm90aCBpbiByZXR1cm5fdHhxKCkgYW5kIHJlc29ydF90eHEo KSkuCgo+PiAKPj4gV2UnZCBzdGlsbCBuZWVkIGEgY2hlY2sgaW4gcmVzb3J0X3R4cSgpIHRoZW4s IGJ1dCBpdCB3b3VsZCBtYWtlIGl0IHNhZmUKPj4gdG8gdW5zY2hlZHVsZSBpbiByZXR1cm5fdHhx KCkuLi4KPiBZZXMsIGFncmVlIHdpdGggdGhhdC4KPgo+Cj4+IAo+Pj4+PiBBbHNvIEkgYW0gd29u ZGVyaW5nIGlmIHRoZXJlIHdpbGwgYmUgc29tZSBTTVAgaXNzdWVzIHJlbGF0aW5nIHdpdGgKPj4+ Pj4gbG9jYWwtPnNjaGVkdWxlX3Bvc1thY10uCj4+Pj4gCj4+Pj4gTm90IHN1cmUgd2hhdCB5b3Ug bWVhbiBieSB0aGlzPwo+Pj4gTXkgYmFkLiBQbGVhc2UgaWdub3JlIHRoaXMuCj4+PiAKPj4+IAo+ Pj4+IAo+Pj4+Pj4+IEluIGF0aDEwaywgd2Ugd2lsbCB1c3VhbGx5IHB1c2ggcGFja2V0cyBvZiBm aXJzdCB0eHEgYXMgbWFueSBhcyB3ZQo+Pj4+Pj4+IGNhbgo+Pj4+Pj4+IHVudGlsIGl0IGlzIGRy YWluZWQgYW5kIHRoZW4gbW92ZSB0byB0aGUgbmV4dCBvbmUuIFNvIGlmIGEgdHhxIAo+Pj4+Pj4+ IGdldHMKPj4+Pj4+PiByZW1vdmVkIGluIHRoZSByZXR1cm5fdHhxLCBpdCBzaG91bGQgYWx3YXlz IGJlIHRoZSBsZWZ0bW9zdC4gQW5kCj4+Pj4+Pj4gZHVyaW5nIHRoaXMgcGVyaW9kLCBuZWl0aGVy IHZ0IG9mIGFueSBzdGF0aW9uIG9yIGdsb2JhbCB2dCBjYW4gYmUKPj4+Pj4+PiB1cGRhdGVkIGR1 ZSB0byBsb2NrIHByb3RlY3Rpb24uCj4+Pj4+Pj4gCj4+Pj4+Pj4+IAo+Pj4+Pj4+PiBCdXQgaW4g dGhhdCBjYXNlLCB3ZSBjb3VsZCBmaXggaXQgYnkganVzdCBjb25kaXRpb25hbGx5IGFzc2lnbmlu Zwo+Pj4+Pj4+PiBlaXRoZXIKPj4+Pj4+Pj4gcmJfbmV4dCBvciByYl9wcmV2IHRvIHRoZSBzY2hl ZHVsZV9wb3MgaW4gdW5zY2hlZHVsZV90eHEoKT8gSS5lLiwKPj4+Pj4+Pj4gc29tZXRoaW5nIGxp a2U6Cj4+Pj4+Pj4+IAo+Pj4+Pj4+PiBsb2NhbC0+c2NoZWR1bGVfcG9zW2FjXSA9IHJiX25leHQo bm9kZSkgPzogcmJfcHJldihub2RlKTsKPj4+Pj4+PiBJIGFtIG5vdCBzdXJlIEkgYW0gZ2V0dGlu ZyB5b3VyIHBvaW50LiBTdGlsbCBpbiBuZXh0X3R4cSwKPj4+Pj4+PiBzY2hlZHVsZV9wb3NbYWNd IHdpbGwgbGVhZCB1cyB0byB0aGUgbmV4dCBub2RlIG9mIHRoZSBvbmUgd2Ugd2FudC4KPj4+Pj4+ IAo+Pj4+Pj4gVGhlIGxvZ2ljIGluIG5leHRfdHhxIGlzIGRpZmZlcmVudCB3aGVuIHNjaGVkdWxl X3Bvc1thY10gaXMgTlVMTCwgCj4+Pj4+PiB2cwo+Pj4+Pj4gd2hlbiByYl9uZXh0KHNjaGVkdWxl X3Bvc1thY10pIGlzIE5VTEwuIFRoZSBmb3JtZXIgcmVzdGFydHMgYSBuZXcKPj4+Pj4+IHNjaGVk dWxpbmcgcm91bmQsIHdoaWxlIHRoZSBsYXR0ZXIgZW5kcyB0aGUgY3VycmVudCByb3VuZC4KPj4+ Pj4+IAo+Pj4+Pj4gLVRva2UKPj4+Pj4gCj4+Pj4+IC0tCj4+Pj4+IFlpYm8KPj4+IAo+Pj4gLS0K Pj4+IFlpYm8KPgo+IC0tIAo+IFlpYm8KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwphdGgxMGsgbWFpbGluZyBsaXN0CmF0aDEwa0BsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vYXRoMTBr Cg==