From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: References: <20180319182205.29454-1-tvrtko.ursulin@linux.intel.com> <20180319182205.29454-6-tvrtko.ursulin@linux.intel.com> <0283b8dc-951a-c0aa-9f1f-8552d2f27e5c@intel.com> From: Tvrtko Ursulin Message-ID: <155d3252-87e7-d282-57d0-cce4fa66fce8@linux.intel.com> Date: Fri, 23 Mar 2018 10:18:37 +0000 MIME-Version: 1.0 In-Reply-To: <0283b8dc-951a-c0aa-9f1f-8552d2f27e5c@intel.com> Content-Language: en-GB Subject: Re: [igt-dev] [PATCH i-g-t 5/5] tests/i915_query: Engine queues tests List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Lionel Landwerlin , Tvrtko Ursulin , igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin List-ID: Ck9uIDIyLzAzLzIwMTggMjE6MjIsIExpb25lbCBMYW5kd2VybGluIHdyb3RlOgo+IE9uIDE5LzAz LzE4IDE4OjIyLCBUdnJ0a28gVXJzdWxpbiB3cm90ZToKPj4gRnJvbTogVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KPj4KPj4gLi4uCj4+Cj4+IFNpZ25lZC1vZmYtYnk6 IFR2cnRrbyBVcnN1bGluIDx0dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4+IC0tLQo+PiDCoCB0 ZXN0cy9pOTE1X3F1ZXJ5LmMgfCAzODEgCj4+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrCj4+IMKgIDEgZmlsZSBjaGFuZ2VkLCAzODEgaW5zZXJ0 aW9ucygrKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNV9xdWVyeS5jIGIvdGVzdHMvaTkx NV9xdWVyeS5jCj4+IGluZGV4IGM3ZGU4Y2JkODM3MS4uOTRlN2EzMjk3ZWJkIDEwMDY0NAo+PiAt LS0gYS90ZXN0cy9pOTE1X3F1ZXJ5LmMKPj4gKysrIGIvdGVzdHMvaTkxNV9xdWVyeS5jCj4+IEBA IC00NzcsOCArNDc3LDM1OCBAQCB0ZXN0X3F1ZXJ5X3RvcG9sb2d5X2tub3duX3BjaV9pZHMoaW50 IGZkLCBpbnQgCj4+IGRldmlkKQo+PiDCoMKgwqDCoMKgIGZyZWUodG9wb19pbmZvKTsKPj4gwqAg fQo+PiArI2RlZmluZSBEUk1fSTkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTwqDCoMKgIDIKPj4gKwo+ PiArc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9xdWV1ZXMgewo+PiArwqDCoMKgIC8qKiBF bmdpbmUgY2xhc3MgYXMgaW4gZW51bSBkcm1faTkxNV9nZW1fZW5naW5lX2NsYXNzLiAqLwo+PiAr wqDCoMKgIF9fdTE2IGNsYXNzOwo+PiArCj4+ICvCoMKgwqAgLyoqIEVuZ2luZSBpbnN0YW5jZSBu dW1iZXIuICovCj4+ICvCoMKgwqAgX191MTYgaW5zdGFuY2U7Cj4+ICsKPj4gK8KgwqDCoCAvKiog TnVtYmVyIG9mIHJlcXVlc3RzIHdpdGggdW5yZXNvbHZlZCBmZW5jZXMgYW5kIGRlcGVuZGVuY2ll cy4gKi8KPj4gK8KgwqDCoCBfX3UzMiBxdWV1ZWQ7Cj4+ICsKPj4gK8KgwqDCoCAvKiogTnVtYmVy IG9mIHJlYWR5IHJlcXVlc3RzIHdhaXRpbmcgb24gYSBzbG90IG9uIEdQVS4gKi8KPj4gK8KgwqDC oCBfX3UzMiBydW5uYWJsZTsKPj4gKwo+PiArwqDCoMKgIC8qKiBOdW1iZXIgb2YgcmVxdWVzdHMg ZXhlY3V0aW5nIG9uIHRoZSBHUFUuICovCj4+ICvCoMKgwqAgX191MzIgcnVubmluZzsKPj4gKwo+ PiArwqDCoMKgIF9fdTMyIHJzdmRbNV07Cj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgYm9vbCBxdWVy eV9lbmdpbmVfcXVldWVzX3N1cHBvcnRlZChpbnQgZmQpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0 IGRybV9pOTE1X3F1ZXJ5X2l0ZW0gaXRlbSA9IHsKPj4gK8KgwqDCoMKgwqDCoMKgIC5xdWVyeV9p ZCA9IERSTV9JOTE1X1FVRVJZX0VOR0lORV9RVUVVRVMsCj4+ICvCoMKgwqAgfTsKPj4gKwo+PiAr wqDCoMKgIHJldHVybiBfX2k5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKSA9PSAwICYmIGl0 ZW0ubGVuZ3RoID4gMDsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQgZW5naW5lX3F1ZXVlc19p bnZhbGlkKGludCBmZCkKPj4gK3sKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnlfZW5n aW5lX3F1ZXVlcyBxdWV1ZXM7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2l0ZW0g aXRlbTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQgbGVuOwo+PiArwqDCoMKgIHVuc2lnbmVkIGlu dCBpOwo+PiArCj4+ICvCoMKgwqAgLyogRmxhZ3MgaXMgTUJaLiAqLwo+PiArwqDCoMKgIG1lbXNl dCgmaXRlbSwgMCwgc2l6ZW9mKGl0ZW0pKTsKPj4gK8KgwqDCoCBpdGVtLnF1ZXJ5X2lkID0gRFJN X0k5MTVfUVVFUllfRU5HSU5FX1FVRVVFUzsKPj4gK8KgwqDCoCBpdGVtLmZsYWdzID0gMTsKPj4g K8KgwqDCoCBpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7Cj4+ICvCoMKgwqAgaWd0X2Fz c2VydF9lcShpdGVtLmxlbmd0aCwgLUVJTlZBTCk7Cj4+ICsKPj4gK8KgwqDCoCAvKiBMZW5ndGgg bm90IHplcm8gYW5kIG5vdCBncmVhdGVyIG9yIGVxdWFsIHJlcXVpcmVkIHNpemUuICovCj4+ICvC oMKgwqAgbWVtc2V0KCZpdGVtLCAwLCBzaXplb2YoaXRlbSkpOwo+PiArwqDCoMKgIGl0ZW0ucXVl cnlfaWQgPSBEUk1fSTkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTOwo+PiArwqDCoMKgIGl0ZW0ubGVu Z3RoID0gMTsKPj4gK8KgwqDCoCBpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7Cj4+ICvC oMKgwqAgaWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwgLUVOT1NQQyk7Cj4+ICsKPj4gK8KgwqDC oCAvKiBRdWVyeSBjb3JyZWN0IGxlbmd0aC4gKi8KPj4gK8KgwqDCoCBtZW1zZXQoJml0ZW0sIDAs IHNpemVvZihpdGVtKSk7Cj4+ICvCoMKgwqAgaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZ X0VOR0lORV9RVUVVRVM7Cj4+ICvCoMKgwqAgaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEp Owo+PiArwqDCoMKgIGlndF9hc3NlcnQoaXRlbS5sZW5ndGggPj0gMCk7Cj4+ICvCoMKgwqAgbGVu ID0gaXRlbS5sZW5ndGg7Cj4+ICsKPj4gK8KgwqDCoCAvKiBJdmFsaWQgcG9pbnRlci4gKi8KPj4g K8KgwqDCoCBtZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7Cj4+ICvCoMKgwqAgaXRlbS5x dWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX0VOR0lORV9RVUVVRVM7Cj4+ICvCoMKgwqAgaXRlbS5s ZW5ndGggPSBsZW47Cj4+ICvCoMKgwqAgaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOwo+ PiArwqDCoMKgIGlndF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIC1FRkFVTFQpOwo+PiArCj4+ICvC oMKgwqAgLyogUmVzZXJ2ZWQgZmllbGRzIGFyZSBNQlouICovCj4+ICsKPj4gK8KgwqDCoCBmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShxdWV1ZXMucnN2ZCk7IGkrKykgewo+PiArwqDCoMKgwqDC oMKgwqAgbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsKPj4gK8KgwqDCoMKgwqDC oMKgIHF1ZXVlcy5yc3ZkW2ldID0gMTsKPj4gK8KgwqDCoMKgwqDCoMKgIG1lbXNldCgmaXRlbSwg MCwgc2l6ZW9mKGl0ZW0pKTsKPj4gK8KgwqDCoMKgwqDCoMKgIGl0ZW0ucXVlcnlfaWQgPSBEUk1f STkxNV9RVUVSWV9FTkdJTkVfUVVFVUVTOwo+PiArwqDCoMKgwqDCoMKgwqAgaXRlbS5sZW5ndGgg PSBsZW47Cj4+ICvCoMKgwqDCoMKgwqDCoCBpdGVtLmRhdGFfcHRyID0gdG9fdXNlcl9wb2ludGVy KCZxdWV1ZXMpOwo+PiArwqDCoMKgwqDCoMKgwqAgaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0s IDEpOwo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwgLUVJTlZB TCk7Cj4+ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVv ZihxdWV1ZXMpKTsKPj4gK8KgwqDCoCBxdWV1ZXMuY2xhc3MgPSAtMTsKPj4gK8KgwqDCoCBtZW1z ZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7Cj4+ICvCoMKgwqAgaXRlbS5xdWVyeV9pZCA9IERS TV9JOTE1X1FVRVJZX0VOR0lORV9RVUVVRVM7Cj4+ICvCoMKgwqAgaXRlbS5sZW5ndGggPSBsZW47 Cj4+ICvCoMKgwqAgaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcXVldWVzKTsKPj4g K8KgwqDCoCBpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRlbSwgMSk7Cj4+ICvCoMKgwqAgaWd0X2Fz c2VydF9lcShpdGVtLmxlbmd0aCwgLUVOT0VOVCk7Cj4+ICsKPiAKPiBMb29rcyBsaWtlIHlvdSd2 ZSBjb3BpZWQgdGhlIGZldyBsaW5lcyBhYm92ZSBhZnRlci4KPiBJdCBzZWVtcyB0byBiZSB0aGUg c2FtZSB0ZXN0LgoKQWJvdmUgaXMgY2hlY2tpbmcgaW52YWxpZCBjbGFzcyBpcyByZWplY3RlZCwg YmVsb3cgaXMgY2hlY2tpbmcgaW52YWxpZCAKaW5zdGFuY2UgLSBpZiBJIHVuZGVyc3Rvb2QgY29y cmVjdGx5IHdoYXQgeW91IGFyZSBwb2ludGluZyBhdD8KCj4+ICvCoMKgwqAgbWVtc2V0KCZxdWV1 ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsKPj4gK8KgwqDCoCBxdWV1ZXMuaW5zdGFuY2UgPSAtMTsK Pj4gK8KgwqDCoCBtZW1zZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7Cj4+ICvCoMKgwqAgaXRl bS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX0VOR0lORV9RVUVVRVM7Cj4+ICvCoMKgwqAgaXRl bS5sZW5ndGggPSBsZW47Cj4+ICvCoMKgwqDCoMKgwqDCoCBpdGVtLmRhdGFfcHRyID0gdG9fdXNl cl9wb2ludGVyKCZxdWV1ZXMpOwo+PiArwqDCoMKgIGk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVt LCAxKTsKPj4gK8KgwqDCoCBpZ3RfYXNzZXJ0X2VxKGl0ZW0ubGVuZ3RoLCAtRU5PRU5UKTsKPj4g K30KPj4gKwo+PiArc3RhdGljIHZvaWQgZW5naW5lX3F1ZXVlcyhpbnQgZmQsIGNvbnN0IHN0cnVj dCAKPj4gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0 IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9xdWV1ZXMgcXVldWVzOwo+PiArwqDCoMKgIHN0cnVjdCBk cm1faTkxNV9xdWVyeV9pdGVtIGl0ZW07Cj4+ICvCoMKgwqAgdW5zaWduZWQgaW50IGxlbjsKPj4g Kwo+PiArwqDCoMKgIC8qIFF1ZXJ5IHJlcXVpcmVkIGJ1ZmZlciBsZW5ndGguICovCj4+ICvCoMKg wqAgbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsKPj4gK8KgwqDCoCBtZW1zZXQo Jml0ZW0sIDAsIHNpemVvZihpdGVtKSk7Cj4+ICvCoMKgwqAgaXRlbS5xdWVyeV9pZCA9IERSTV9J OTE1X1FVRVJZX0VOR0lORV9RVUVVRVM7Cj4+ICvCoMKgwqAgaXRlbS5kYXRhX3B0ciA9IHRvX3Vz ZXJfcG9pbnRlcigmcXVldWVzKTsKPj4gK8KgwqDCoCBpOTE1X3F1ZXJ5X2l0ZW1zKGZkLCAmaXRl bSwgMSk7Cj4+ICvCoMKgwqAgaWd0X2Fzc2VydChpdGVtLmxlbmd0aCA+PSAwKTsKPj4gK8KgwqDC oCBpZ3RfYXNzZXJ0KGl0ZW0ubGVuZ3RoIDw9IHNpemVvZihxdWV1ZXMpKTsKPj4gK8KgwqDCoCBs ZW4gPSBpdGVtLmxlbmd0aDsKPj4gKwo+PiArwqDCoMKgIC8qIENoZWNrIGxlbmd0aCBsYXJnZXIg dGhhbiByZXF1aXJlZCB3b3JrcyBhbmQgcmVwb3J0cyBzYW1lIAo+PiBsZW5ndGguICovCj4+ICvC oMKgwqAgbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsKPj4gK8KgwqDCoCBtZW1z ZXQoJml0ZW0sIDAsIHNpemVvZihpdGVtKSk7Cj4+ICvCoMKgwqAgaXRlbS5xdWVyeV9pZCA9IERS TV9JOTE1X1FVRVJZX0VOR0lORV9RVUVVRVM7Cj4+ICvCoMKgwqAgaXRlbS5kYXRhX3B0ciA9IHRv X3VzZXJfcG9pbnRlcigmcXVldWVzKTsKPj4gK8KgwqDCoCBpdGVtLmxlbmd0aCA9IGxlbiArIDE7 Cj4+ICvCoMKgwqAgaTkxNV9xdWVyeV9pdGVtcyhmZCwgJml0ZW0sIDEpOwo+PiArwqDCoMKgIGln dF9hc3NlcnRfZXEoaXRlbS5sZW5ndGgsIGxlbik7Cj4+ICsKPj4gK8KgwqDCoCAvKiBBY3R1YWwg cXVlcnkuICovCj4+ICvCoMKgwqAgbWVtc2V0KCZxdWV1ZXMsIDAsIHNpemVvZihxdWV1ZXMpKTsK Pj4gK8KgwqDCoCBxdWV1ZXMuY2xhc3MgPSBlLT5jbGFzczsKPj4gK8KgwqDCoCBxdWV1ZXMuaW5z dGFuY2UgPSBlLT5pbnN0YW5jZTsKPj4gK8KgwqDCoCBtZW1zZXQoJml0ZW0sIDAsIHNpemVvZihp dGVtKSk7Cj4+ICvCoMKgwqAgaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZX0VOR0lORV9R VUVVRVM7Cj4+ICvCoMKgwqAgaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmcXVldWVz KTsKPj4gK8KgwqDCoCBpdGVtLmxlbmd0aCA9IGxlbjsKPj4gK8KgwqDCoCBpOTE1X3F1ZXJ5X2l0 ZW1zKGZkLCAmaXRlbSwgMSk7Cj4+ICvCoMKgwqAgaWd0X2Fzc2VydF9lcShpdGVtLmxlbmd0aCwg bGVuKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHVuc2lnbmVkIGludCBlMnJpbmcoaW50IGdlbV9m ZCwgY29uc3Qgc3RydWN0IAo+PiBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPj4gK3sKPj4g K8KgwqDCoCByZXR1cm4gZ2VtX2NsYXNzX2luc3RhbmNlX3RvX2ViX2ZsYWdzKGdlbV9mZCwgZS0+ Y2xhc3MsIAo+PiBlLT5pbnN0YW5jZSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtf X3F1ZXJ5X3F1ZXVlcyhpbnQgZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5l MiAqZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9xdWVyeV9lbmdp bmVfcXVldWVzICpxdWV1ZXMpCj4+ICt7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5 X2l0ZW0gaXRlbTsKPj4gKwo+PiArwqDCoMKgIG1lbXNldChxdWV1ZXMsIDAsIHNpemVvZigqcXVl dWVzKSk7Cj4+ICvCoMKgwqAgcXVldWVzLT5jbGFzcyA9IGUtPmNsYXNzOwo+PiArwqDCoMKgIHF1 ZXVlcy0+aW5zdGFuY2UgPSBlLT5pbnN0YW5jZTsKPj4gK8KgwqDCoCBtZW1zZXQoJml0ZW0sIDAs IHNpemVvZihpdGVtKSk7Cj4+ICvCoMKgwqAgaXRlbS5xdWVyeV9pZCA9IERSTV9JOTE1X1FVRVJZ X0VOR0lORV9RVUVVRVM7Cj4+ICvCoMKgwqAgaXRlbS5kYXRhX3B0ciA9IHRvX3VzZXJfcG9pbnRl cihxdWV1ZXMpOwo+PiArwqDCoMKgIGl0ZW0ubGVuZ3RoID0gc2l6ZW9mKCpxdWV1ZXMpOwo+PiAr wqDCoMKgIGk5MTVfcXVlcnlfaXRlbXMoZmQsICZpdGVtLCAxKTsKPj4gK8KgwqDCoCBpZ3RfYXNz ZXJ0X2VxKGl0ZW0ubGVuZ3RoLCBzaXplb2YoKnF1ZXVlcykpOwo+PiArfQo+PiArCj4+ICtzdGF0 aWMgdm9pZAo+PiArZW5naW5lX3F1ZXVlZChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxf ZXhlY3V0aW9uX2VuZ2luZTIgKmUpCj4+ICt7Cj4+ICvCoMKgwqAgY29uc3QgdW5zaWduZWQgbG9u ZyBlbmdpbmUgPSBlMnJpbmcoZ2VtX2ZkLCBlKTsKPj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVf cXVlcnlfZW5naW5lX3F1ZXVlcyBxdWV1ZXM7Cj4+ICvCoMKgwqAgY29uc3QgdW5zaWduZWQgaW50 IG1heF9ycSA9IDEwOwo+PiArwqDCoMKgIHVpbnQzMl90IHF1ZXVlZFttYXhfcnEgKyAxXTsKPj4g K8KgwqDCoCB1aW50MzJfdCBib1ttYXhfcnEgKyAxXTsKPj4gK8KgwqDCoCB1bnNpZ25lZCBpbnQg biwgaTsKPj4gKwo+PiArwqDCoMKgIG1lbXNldChxdWV1ZWQsIDAsIHNpemVvZihxdWV1ZWQpKTsK Pj4gK8KgwqDCoCBtZW1zZXQoYm8sIDAsIHNpemVvZihibykpOwo+PiArCj4+ICvCoMKgwqAgZm9y IChuID0gMDsgbiA8PSBtYXhfcnE7IG4rKykgewo+PiArwqDCoMKgwqDCoMKgwqAgaW50IGZlbmNl ID0gLTE7Cj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaWd0X2NvcmsgY29yayA9IHsgLmZkID0g ZmVuY2UsIC50eXBlID0gQ09SS19TWU5DX0ZEIH07Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGdl bV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGlmIChuKQo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmZW5jZSA9IGlndF9jb3JrX3BsdWcoJmNvcmssIC0x KTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgewo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBv YmogPSB7IH07Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgZWIgPSB7IH07Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KCFib1tpXSkgewo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHVpbnQz Ml90IGJiZSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBib1tpXSA9IGdlbV9jcmVhdGUoZ2VtX2ZkLCA0MDk2KTsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZW1fd3JpdGUoZ2VtX2ZkLCBib1tpXSwgNDA5Miwg JmJiZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzaXpl b2YoYmJlKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBvYmouaGFuZGxlID0gYm9baV07Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZWIuYnVmZmVyX2NvdW50ID0gMTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg ZWIuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoJm9iaik7Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZWIuZmxhZ3MgPSBlbmdpbmUgfCBJOTE1X0VYRUNfRkVOQ0VfSU47Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGViLnJzdmQyID0gZmVuY2U7Cj4+ICsKPj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZ2VtX2V4ZWNidWYoZ2VtX2ZkLCAmZWIpOwo+PiArwqDCoMKgwqDC oMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBfX3F1ZXJ5X3F1ZXVlcyhnZW1fZmQsIGUs ICZxdWV1ZXMpOwo+PiArwqDCoMKgwqDCoMKgwqAgcXVldWVkW25dID0gcXVldWVzLnF1ZXVlZDsK Pj4gK8KgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJuPSV1IHF1ZXVlZD0ldVxuIiwgbiwgcXVldWVk W25dKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGZlbmNlID49IDApCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlndF9jb3JrX3VucGx1ZygmY29yayk7Cj4+ICsKPj4gK8KgwqDCoMKg wqDCoMKgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGdlbV9zeW5jKGdlbV9mZCwgYm9baV0pOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIGZv ciAoaSA9IDA7IGkgPCBtYXhfcnE7IGkrKykgewo+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGJvW2ld KQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZW1fY2xvc2UoZ2VtX2ZkLCBib1tpXSk7Cj4+ ICvCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8PSBtYXhfcnE7IGkrKykK Pj4gK8KgwqDCoMKgwqDCoMKgIGlndF9hc3NlcnRfZXEocXVldWVkW2ldLCBpKTsKPj4gK30KPj4g Kwo+IAo+IEknbSBub3Qgc3VyZSB0byB1bmRlcnN0YW5kIHdoYXQgdGhlIDIgZnVuY3Rpb24gYmVs b3cgYXJlIG1lYW50IHRvIGRvLgo+IENvdWxkIHlvdSBwdXQgYSBjb21tZW50PwoKWWVhaCwgd2ls bCBuZWVkIG1vcmUgY29tbWVudHMuCgo+IF9faWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGwgYWxzbyBh cHBlYXIgdG8gYmUgbWlzc2luZy4KCkkgdGhpbmsgSSBtZW50aW9uZWQgaW4gdGhlIGNvbW1pdCBp dCBkZXBlbmRzIG9uIGFub3RoZXIgeWV0IHVubWVyZ2VkIApwYXRjaCBzbyBJIHdhcyBzZW5kaW5n IGl0IG9ubHkgZm9yIHJlZmVyZW5jZSBmb3Igbm93LgoKVGhpcyBwYXJ0aWN1bGFyIEFQSSBoYXMg bGl0dGxlIGNoYW5jZSBvZiBiZWluZyBtZXJnZWQgYW55IHRpbWUgc29vbiBkdWUgCmxhY2sgb2Yg dXNlcnNwYWNlLiBUaGlzIGlzIG1vc3RseSBzbyB0aGUgcHJvZHVjdCBncm91cCBpbnRlcmVzdGVk IGluIGl0IApjYW4gc2x1cnAgdGhlIHR3byAoaTkxNSArIElHVCkgZnJvbSB0aGUgbWFpbGluZyBs aXN0IGZvciB0aGVpciB1c2UuCgo+PiArc3RhdGljIGlndF9zcGluX3QgKiBfX3NwaW5fcG9sbChp bnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgbG9uZyAKPj4gZmxhZ3MpCj4+ICt7Cj4+ICvC oMKgwqAgaWYgKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIGZsYWdzKSkKPj4gK8KgwqDCoMKgwqDC oMKgIHJldHVybiBfX2lndF9zcGluX2JhdGNoX25ld19wb2xsKGZkLCBjdHgsIGZsYWdzKTsKPj4g K8KgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gX19pZ3Rfc3Bpbl9iYXRjaF9u ZXcoZmQsIGN0eCwgZmxhZ3MsIDApOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgdW5zaWduZWQgbG9u ZyBfX3NwaW5fd2FpdChpbnQgZmQsIGlndF9zcGluX3QgKnNwaW4pCj4+ICt7Cj4+ICvCoMKgwqAg c3RydWN0IHRpbWVzcGVjIHN0YXJ0ID0geyB9Owo+PiArCj4+ICvCoMKgwqAgaWd0X25zZWNfZWxh cHNlZCgmc3RhcnQpOwo+PiArCj4+ICvCoMKgwqAgaWYgKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQs IHNwaW4tPmV4ZWNidWYuZmxhZ3MpKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25n IHRpbWVvdXQgPSAwOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCB3aGlsZSAoIXNwaW4tPnJ1bm5p bmcpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyB0ID0gaWd0X25z ZWNfZWxhcHNlZCgmc3RhcnQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgo dCAtIHRpbWVvdXQpID4gMjUwZTYpIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB0aW1lb3V0ID0gdDsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfd2Fy bigiU3Bpbm5lciBub3QgcnVubmluZyBhZnRlciAlLjJmbXNcbiIsCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIChkb3VibGUpdCAvIDFlNik7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoMKgwqDCoMKgIH07Cj4+ICvCoMKgwqAgfSBlbHNl IHsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9kZWJ1ZygiX19zcGluX3dhaXQgLSB1c2xlZXAgbW9k ZVxuIik7Cj4+ICvCoMKgwqDCoMKgwqDCoCB1c2xlZXAoNTAwZTMpOyAvKiBCZXR0ZXIgdGhhbiBu b3RoaW5nISAqLwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgIHJldHVybiBpZ3RfbnNlY19l bGFwc2VkKCZzdGFydCk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyB2b2lkCj4+ICtlbmdpbmVfcnVu bmFibGUoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICpl KQo+PiArewo+PiArwqDCoMKgIGNvbnN0IHVuc2lnbmVkIGxvbmcgZW5naW5lID0gZTJyaW5nKGdl bV9mZCwgZSk7Cj4+ICvCoMKgwqAgc3RydWN0IGRybV9pOTE1X3F1ZXJ5X2VuZ2luZV9xdWV1ZXMg cXVldWVzOwo+PiArwqDCoMKgIGNvbnN0IHVuc2lnbmVkIGludCBtYXhfcnEgPSAxMDsKPj4gK8Kg wqDCoCBpZ3Rfc3Bpbl90ICpzcGluW21heF9ycSArIDFdOwo+PiArwqDCoMKgIHVpbnQzMl90IHJ1 bm5hYmxlW21heF9ycSArIDFdOwo+PiArwqDCoMKgIHVpbnQzMl90IGN0eFttYXhfcnFdOwo+PiAr wqDCoMKgIHVuc2lnbmVkIGludCBuLCBpOwo+PiArCj4+ICvCoMKgwqAgbWVtc2V0KHJ1bm5hYmxl LCAwLCBzaXplb2YocnVubmFibGUpKTsKPj4gK8KgwqDCoCBtZW1zZXQoY3R4LCAwLCBzaXplb2Yo Y3R4KSk7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKG4gPSAwOyBuIDw9IG1heF9ycTsgbisrKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoCBnZW1fcXVpZXNjZW50X2dwdShnZW1fZmQpOwo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmICghY3R4W2ldKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGN0 eFtpXSA9IGdlbV9jb250ZXh0X2NyZWF0ZShnZW1fZmQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChpID09IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3BpbltpXSA9IF9fc3Bpbl9wb2xsKGdlbV9mZCwgY3R4W2ldLCBlbmdpbmUpOwo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBlbHNlCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3BpbltpXSA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgY3R4W2ldLAo+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZW5naW5lLCAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKgwqDC oMKgwqAgaWYgKG4pCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9fc3Bpbl93YWl0KGdlbV9m ZCwgc3BpblswXSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIF9fcXVlcnlfcXVldWVzKGdlbV9m ZCwgZSwgJnF1ZXVlcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBydW5uYWJsZVtuXSA9IHF1ZXVlcy5y dW5uYWJsZTsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJuPSV1IHJ1bm5hYmxlPSV1XG4i LCBuLCBydW5uYWJsZVtuXSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkg PCBuOyBpKyspIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3NwaW5fYmF0Y2hfZW5k KHNwaW5baV0pOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZW1fc3luYyhnZW1fZmQsIHNw aW5baV0tPmhhbmRsZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9zcGluX2JhdGNo X2ZyZWUoZ2VtX2ZkLCBzcGluW2ldKTsKPj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9 Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbWF4X3JxOyBpKyspIHsKPj4gK8KgwqDC oMKgwqDCoMKgIGlmIChjdHhbaV0pCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGdlbV9jb250 ZXh0X2Rlc3Ryb3koZ2VtX2ZkLCBjdHhbaV0pOwo+PiArwqDCoMKgIH0KPj4gKwo+PiArwqDCoMKg IGlndF9hc3NlcnRfZXEocnVubmFibGVbMF0sIDApOwo+IAo+IFdoeSBvbmx5IGNoZWNraW5nIHRo ZSBmaXJzdCAmIGxhc3QgaXRlbXM/Cj4gSXQgc2VlbXMgdGhhdCB0aGUgcmVzdWx0cyBzaG91bGQg YmUgY29uc2lzdGVudD8gbm8/CgpEZXBlbmRpbmcgb24gdGhlIHN1Ym1pc3Npb24gYmFja2VuZCAo cmluZ2J1ZmZlci9leGVjbGlzdHMvZ3VjKSwgYW5kIApudW1iZXIgb2Ygc3VibWlzc2lvbiBwb3J0 cywgdGhlIHNwbGl0IGJldHdlZW4gcnVubmFibGUgYW5kIHJ1bm5pbmcgCmNvdW50ZXIgZm9yIGEg Z2l2ZW4gc3VibWlzc2lvbiBwYXR0ZXJuIHdpbGwgdmFyeS4KClRoaXMgc2VyaWVzIG9mIHRocmVl IGFzc2VydHMgaXMgc3VwcG9zZWQgdG8gbWFrZSBpdCB3b3JrIHdpdGggYW55IApiYWNrZW5kIGFu ZCBhbnkgbnVtYmVyIG9mIHBvcnRzIChhcyBsb25nIGFzIGxlc3MgdGhhbiB0ZW4pLgoKSSB0aGlu ayBJIGNhbm5vdCBtYWtlIHRoZSBhc3NlcnQgc3Ryb25nZXIgd2l0aG91dCBlbWJlZGRpbmcgdGhp cyAKa25vd2xlZGdlIGluIHRoZSB0ZXN0LCBidXQgSSdsbCBoYXZlIGFub3RoZXIgdGhpbmsgYWJv dXQgaXQuCgo+IAo+PiArwqDCoMKgIGlndF9hc3NlcnQocnVubmFibGVbbWF4X3JxXSA+IDApOwo+ PiArwqDCoMKgIGlndF9hc3NlcnRfZXEocnVubmFibGVbbWF4X3JxXSAtIHJ1bm5hYmxlW21heF9y cSAtIDFdLCAxKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIHZvaWQKPj4gK2VuZ2luZV9ydW5uaW5n KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKPj4g K3sKPj4gK8KgwqDCoCBjb25zdCB1bnNpZ25lZCBsb25nIGVuZ2luZSA9IGUycmluZyhnZW1fZmQs IGUpOwo+PiArwqDCoMKgIHN0cnVjdCBkcm1faTkxNV9xdWVyeV9lbmdpbmVfcXVldWVzIHF1ZXVl czsKPj4gK8KgwqDCoCBjb25zdCB1bnNpZ25lZCBpbnQgbWF4X3JxID0gMTA7Cj4+ICvCoMKgwqAg aWd0X3NwaW5fdCAqc3BpblttYXhfcnEgKyAxXTsKPj4gK8KgwqDCoCB1aW50MzJfdCBydW5uaW5n W21heF9ycSArIDFdOwo+PiArwqDCoMKgIHVuc2lnbmVkIGludCBuLCBpOwo+PiArCj4+ICvCoMKg wqAgbWVtc2V0KHJ1bm5pbmcsIDAsIHNpemVvZihydW5uaW5nKSk7Cj4+ICvCoMKgwqAgbWVtc2V0 KHNwaW4sIDAsIHNpemVvZihzcGluKSk7Cj4+ICsKPj4gK8KgwqDCoCBmb3IgKG4gPSAwOyBuIDw9 IG1heF9ycTsgbisrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoCBnZW1fcXVpZXNjZW50X2dwdShnZW1f ZmQpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Cj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChpID09IDApCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3BpbltpXSA9IF9fc3Bpbl9wb2xsKGdlbV9mZCwgMCwgZW5naW5lKTsK Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZWxzZQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNwaW5baV0gPSBfX2lndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsCj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBlbmdpbmUsIDApOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKg wqDCoMKgwqDCoCBpZiAobikKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgX19zcGluX3dhaXQo Z2VtX2ZkLCBzcGluWzBdKTsKPj4gKwo+PiArwqDCoMKgwqDCoMKgwqAgX19xdWVyeV9xdWV1ZXMo Z2VtX2ZkLCBlLCAmcXVldWVzKTsKPj4gK8KgwqDCoMKgwqDCoMKgIHJ1bm5pbmdbbl0gPSBxdWV1 ZXMucnVubmluZzsKPj4gK8KgwqDCoMKgwqDCoMKgIGlndF9pbmZvKCJuPSV1IHJ1bm5pbmc9JXVc biIsIG4sIHJ1bm5pbmdbbl0pOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBp IDwgbjsgaSsrKSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9zcGluX2JhdGNoX2Vu ZChzcGluW2ldKTsKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ2VtX3N5bmMoZ2VtX2ZkLCBz cGluW2ldLT5oYW5kbGUpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfc3Bpbl9iYXRj aF9mcmVlKGdlbV9mZCwgc3BpbltpXSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+ICvCoMKgwqAg fQo+PiArCj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8PSBtYXhfcnE7IGkrKykKPj4gK8KgwqDC oMKgwqDCoMKgIGlndF9hc3NlcnRfZXEocnVubmluZ1tpXSwgaSk7Cj4+ICt9Cj4+ICsKPj4gwqAg aWd0X21haW4KPj4gwqAgewo+PiArwqDCoMKgIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25f ZW5naW5lMiAqZTsKPj4gwqDCoMKgwqDCoCBpbnQgZmQgPSAtMTsKPj4gwqDCoMKgwqDCoCBpbnQg ZGV2aWQ7Cj4+IEBAIC01MjQsNiArODc0LDM3IEBAIGlndF9tYWluCj4+IMKgwqDCoMKgwqDCoMKg wqDCoCB0ZXN0X3F1ZXJ5X3RvcG9sb2d5X2tub3duX3BjaV9pZHMoZmQsIGRldmlkKTsKPj4gwqDC oMKgwqDCoCB9Cj4gCj4gSSBndWVzcyB3ZSBjb3VsZCBhZGQgYSBncm91cCBmb3IgdGhlIHRvcG9s b2d5IHRvby4KCk15IGRpbGVtbWEgd2FzIHdoZXRoZXIgdG8gc3R1ZmYgdGVzdHMgZm9yIGFueSBx dWVyeSBpbnRvIGk5MTVfcXVlcnkuYywgCm9yIHNwbGl0IG91dCB0byBzZXBhcmF0ZSBiaW5hcmll cy4KCkkgY2FuIGltYWdpbmUsIGlmL3doZW4gdGhlIG51bWJlciBvZiBxdWVyaWVzIGdyb3dzLCBp OTE1X3F1ZXJ5LmMgd291bGQgCmJlY29tZSB1bm1hbmFnZWFibGUgd2l0aCB0aGUgZm9ybWVyIGFw cHJvYWNoLiBXaGF0IGRvIHlvdSB0aGluaz8KClJlZ2FyZHMsCgpUdnJ0a28KCj4gCj4+ICvCoMKg wqAgaWd0X3N1YnRlc3RfZ3JvdXAgewo+PiArwqDCoMKgwqDCoMKgwqAgaWd0X2ZpeHR1cmUgewo+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3RfcmVxdWlyZShxdWVyeV9lbmdpbmVfcXVldWVz X3N1cHBvcnRlZChmZCkpOwo+PiArwqDCoMKgwqDCoMKgwqAgfQo+PiArCj4+ICvCoMKgwqDCoMKg wqDCoCBpZ3Rfc3VidGVzdCgiZW5naW5lLXF1ZXVlcy1pbnZhbGlkIikKPj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZW5naW5lX3F1ZXVlc19pbnZhbGlkKGZkKTsKPj4gKwo+PiArwqDCoMKgwqDC oMKgwqAgZm9yX2VhY2hfZW5naW5lX2NsYXNzX2luc3RhbmNlKGZkLCBlKSB7Cj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlndF9zdWJ0ZXN0X2dyb3VwIHsKPj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZ3RfZml4dHVyZSB7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBnZW1fcmVxdWlyZV9lbmdpbmUoZmQsCj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZS0+Y2xhc3MsCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZS0+aW5zdGFuY2UpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0K Pj4gKwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlndF9zdWJ0ZXN0X2YoImVu Z2luZS1xdWV1ZXMtJXMiLCBlLT5uYW1lKQo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZW5naW5lX3F1ZXVlcyhmZCwgZSk7Cj4+ICsKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBpZ3Rfc3VidGVzdF9mKCJlbmdpbmUtcXVldWVkLSVzIiwgZS0+bmFt ZSkKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuZ2luZV9xdWV1 ZWQoZmQsIGUpOwo+PiArCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWd0X3N1 YnRlc3RfZigiZW5naW5lLXJ1bm5hYmxlLSVzIiwgZS0+bmFtZSkKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVuZ2luZV9ydW5uYWJsZShmZCwgZSk7Cj4+ICsKPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZ3Rfc3VidGVzdF9mKCJlbmdpbmUtcnVu bmluZy0lcyIsIGUtPm5hbWUpCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBlbmdpbmVfcnVubmluZyhmZCwgZSk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0K Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4gK8KgwqDCoCB9Cj4+ICsKPj4gwqDCoMKgwqDCoCBpZ3Rf Zml4dHVyZSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBjbG9zZShmZCk7Cj4+IMKgwqDCoMKgwqAg fQo+IAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gaWd0LWRldiBtYWlsaW5nIGxpc3QKPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+ IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1h aWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK