From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniele Ceraolo Spurio Subject: Re: [PATCH i-g-t v3 2/6] lib/intel_batchbuffer: Add functions to be used in the scheduler test Date: Mon, 14 Mar 2016 12:16:05 +0000 Message-ID: <56E6AB85.4070700@intel.com> References: <1457607814-18751-1-git-send-email-derek.j.morton@intel.com> <1457607814-18751-3-git-send-email-derek.j.morton@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 608416E662 for ; Mon, 14 Mar 2016 12:16:34 +0000 (UTC) In-Reply-To: <1457607814-18751-3-git-send-email-derek.j.morton@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Derek Morton , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CgpPbiAxMC8wMy8xNiAxMTowMywgRGVyZWsgTW9ydG9uIHdyb3RlOgo+IEFkZHMgZnVuY3Rpb25z IHRvIGNyZWF0ZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgYmF0Y2ggYnVmZmVycyB0byBwZXJmb3Jt Cj4gc2V2ZXJhbCBmdW5jdGlvbnMgaW5jbHVkaW5nOgo+IEJhdGNoIGJ1ZmZlciB3aGljaCB3aWxs IHJ1biBmb3IgYSBsb25nIGR1cmF0aW9uIHRvIHByb3ZpZGUgYSBkZWxheSBvbiBhCj4gc3BlY2lm aWVkIHJpbmcuCj4gRnVuY3Rpb24gdG8gY2FsaWJyYXRlIHRoZSBkZWxheSBiYXRjaCBidWZmZXIg dG8gcnVuIGZvciBhIHNwZWNpZmllZCBwZXJpb2QKPiBvZiB0aW1lLgo+IEZ1bmN0aW9uIHRvIGNy ZWF0ZSBhIGJhdGNoIGJ1ZmZlciB3aGljaCB3cml0ZXMgdGltZXN0YW1wcyB0byBhIGJ1ZmZlciBv YmplY3QuCj4gRnVuY3Rpb24gdG8gY29tcGFyZSB0aW1lc3RhbXBzIGFsbG93aW5nIGZvciB3cmFw cGluZyBvZiB0aGUgdmFsdWVzLgo+Cj4gdjI6IE1vdmVkIGNvZGUgdG8gaW50ZWxfYmF0Y2hidWZm ZXIgKERhbmllbCBWZXR0ZXIpCj4gICAgICBBZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20g RGFuaWVsZSBDZXJhb2xvIFNwdXJpbwo+Cj4gU2lnbmVkLW9mZi1ieTogRGVyZWsgTW9ydG9uIDxk ZXJlay5qLm1vcnRvbkBpbnRlbC5jb20+Cj4gLS0tCj4gICBsaWIvaW50ZWxfYmF0Y2hidWZmZXIu YyB8IDM4NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0K PiAgIGxpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oIHwgIDE0ICsrCj4gICAyIGZpbGVzIGNoYW5nZWQs IDM5MyBpbnNlcnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+Cj4gZGlmZiAtLWdpdCBhL2xpYi9p bnRlbF9iYXRjaGJ1ZmZlci5jIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMKPiBpbmRleCA2OTI1 MjFmLi4zMGU3OGM1IDEwMDY0NAo+IC0tLSBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5jCj4gKysr IGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmMKPiBAQCAtMSw4ICsxLDggQEAKPiAgIC8qKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKgo+IC0gKgo+ICsgKgo+ICAgICogQ29weXJpZ2h0IDIwMDYgVHVuZ3N0ZW4gR3Jh cGhpY3MsIEluYy4sIENlZGFyIFBhcmssIFRleGFzLgo+ICAgICogQWxsIFJpZ2h0cyBSZXNlcnZl ZC4KPiAtICoKPiArICoKPiAgICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gICAgKiBjb3B5IG9mIHRoaXMg c29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCj4gICAgKiAi U29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwg aW5jbHVkaW5nCj4gQEAgLTEwLDExICsxMCwxMSBAQAo+ICAgICogZGlzdHJpYnV0ZSwgc3ViIGxp Y2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bwo+ICAgICog cGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNv LCBzdWJqZWN0IHRvCj4gICAgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gLSAqCj4gKyAq Cj4gICAgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZQo+ICAgICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKPiAgICAqIG9mIHRoZSBT b2Z0d2FyZS4KPiAtICoKPiArICoKPiAgICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCj4gICAgKiBPUiBJTVBM SUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCj4gICAg KiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBO T04tSU5GUklOR0VNRU5ULgo+IEBAIC0yMiw3ICsyMiw3IEBACj4gICAgKiBBTlkgQ0xBSU0sIERB TUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwKPiAgICAqIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBD T05ORUNUSU9OIFdJVEggVEhFCj4gICAgKiBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERF QUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KPiAtICoKPiArICoKPiAgICAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq Ki8KPiAgIAo+ICAgI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gQEAgLTMwLDYgKzMwLDggQEAKPiAg ICNpbmNsdWRlIDxzdGRpby5oPgo+ICAgI2luY2x1ZGUgPHN0cmluZy5oPgo+ICAgI2luY2x1ZGUg PGFzc2VydC5oPgo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRlIDx0aW1lLmg+Cj4g ICAKPiAgICNpbmNsdWRlICJkcm0uaCIKPiAgICNpbmNsdWRlICJkcm10ZXN0LmgiCj4gQEAgLTQy LDYgKzQ0LDcgQEAKPiAgICNpbmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgo+ICAgI2luY2x1ZGUg Im1lZGlhX3NwaW4uaCIKPiAgICNpbmNsdWRlICJncGdwdV9maWxsLmgiCj4gKyNpbmNsdWRlICJp Z3RfZ3QuaCIKPiAgIAo+ICAgI2luY2x1ZGUgPGk5MTVfZHJtLmg+Cj4gICAKPiBAQCAtODE3LDMg KzgyMCwzNzQgQEAgaWd0X21lZGlhX3NwaW5mdW5jX3QgaWd0X2dldF9tZWRpYV9zcGluZnVuYyhp bnQgZGV2aWQpCj4gICAKPiAgIAlyZXR1cm4gc3BpbjsKPiAgIH0KPiArCj4gKyNkZWZpbmUgU0VD X1RPX05TRUMgKDEwMDAgKiAxMDAwICogMTAwMCkKPiArI2RlZmluZSBEV09SRFNfVE9fQllURVMo eCkgKCh4KSo0KQo+ICsKPiArI2RlZmluZSBNSV9TVE9SRV9SRUdJU1RFUl9NRU0oTEVOR1RIKSAg ICgoMHgwMjQgPDwgMjMpIHwgKChMRU5HVEggLSAyKSAmIDB4ZmYpKQo+ICsjZGVmaW5lIE1JX01B VEgoTnJJbnN0KSAgICAgICAgICAgICAgICAgKCgweDAxQSA8PCAyMykgfCAoKE5ySW5zdCAtIDEp ICYgMHgzZikpCj4gKyNkZWZpbmUgTUlfQ09ORElUSU9OQUxfQkFUQ0hfQlVGRkVSX0VORCAoKDB4 MDM2IDw8IDIzKSB8ICgxIDw8IDIxKSB8IDIpCj4gKyNkZWZpbmUgTUlfQ09QWV9NRU1fTUVNICAg ICAgICAgICAgICAgICAoKDB4MDJFIDw8IDIzKSB8ICgzKSkKPiArCj4gKyNkZWZpbmUgQUxVX0xP QUQoVE8sIEZST00pICAoKDB4MDgwIDw8IDIwKSB8ICgoVE8pIDw8IDEwKSB8IChGUk9NKSkKPiAr I2RlZmluZSBBTFVfU1VCICAgICAgICAgICAgICggMHgxMDEgPDwgMjApCj4gKyNkZWZpbmUgQUxV X1NUT1JFKFRPLCBGUk9NKSAoKDB4MTgwIDw8IDIwKSB8ICgoVE8pIDw8IDEwKSB8IChGUk9NKSkK PiArCj4gKyNkZWZpbmUgVElNRVNUQU1QX29mZnNldCAgICAgICgweDM1OCkgLyogRWxhcHNlZCB0 aW1lIGZyb20gc3lzdGVtIHN0YXJ0ICovCj4gKyNkZWZpbmUgQ1RYX1RJTUVTVEFNUF9vZmZzZXQg ICgweDNBOCkgLyogRWxhcHNlZCBUaW1lIGZyb20gY29udGV4dCBjcmVhdGlvbiAqLwo+ICsjZGVm aW5lIEFMVV9HUFVfUjBfTFNCX29mZnNldCAoMHg2MDApCj4gKyNkZWZpbmUgQUxVX0dQVV9SMF9N U0Jfb2Zmc2V0ICgweDYwNCkKPiArI2RlZmluZSBBTFVfR1BVX1IxX0xTQl9vZmZzZXQgKDB4NjA4 KQo+ICsjZGVmaW5lIEFMVV9HUFVfUjFfTVNCX29mZnNldCAoMHg2MEMpCj4gKyNkZWZpbmUgQUxV X0dQVV9SMl9MU0Jfb2Zmc2V0ICgweDYxMCkKPiArI2RlZmluZSBBTFVfR1BVX1IyX01TQl9vZmZz ZXQgKDB4NjE0KQo+ICsKPiArI2RlZmluZSBBTFVfUjBfRU5DT0RJTkcgICAoMHgwMCkKPiArI2Rl ZmluZSBBTFVfUjFfRU5DT0RJTkcgICAoMHgwMSkKPiArI2RlZmluZSBBTFVfU1JDQV9FTkNPRElO RyAoMHgyMCkKPiArI2RlZmluZSBBTFVfU1JDQl9FTkNPRElORyAoMHgyMSkKPiArI2RlZmluZSBB TFVfQUNDVV9FTkNPRElORyAoMHgzMSkKPiArCj4gK3N0YXRpYyBpbnQgYmJfYWRkcmVzc19zaXpl X2R3KGludCBmZCkKPiArewo+ICsJaWYgKGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2RldmlkKGZk KSkgPj0gOCkKPiArCQlyZXR1cm4gMjsKPiArCWVsc2UKPiArCQlyZXR1cm4gMTsKPiArfQo+ICsK PiArc3RhdGljIHVpbnQzMl90IGdldF9tbWlvX2Jhc2UoaW50IHJpbmdpZCkKPiArewo+ICsJc3dp dGNoIChyaW5naWQpIHsKPiArCWNhc2UgSTkxNV9FWEVDX1JFTkRFUjoKPiArCQlyZXR1cm4gMHgw MjAwMDsKPiArCWNhc2UgSTkxNV9FWEVDX0JTRDoKPiArCWNhc2UgSTkxNV9FWEVDX0JTRCB8IDE8 PDEzOiAvKiBCU0QxICovCj4gKwkJcmV0dXJuIDB4MTIwMDA7Cj4gKwljYXNlIEk5MTVfRVhFQ19C U0QgfCAyPDwxMzogLyogQlNEMiAqLwo+ICsJCXJldHVybiAweDFjMDAwOwo+ICsJY2FzZSBJOTE1 X0VYRUNfQkxUOgo+ICsJCXJldHVybiAweDIyMDAwOwo+ICsJY2FzZSBJOTE1X0VYRUNfVkVCT1g6 Cj4gKwkJcmV0dXJuIDB4MUEwMDA7Cj4gKwlkZWZhdWx0Ogo+ICsJCWlndF9hc3NlcnRfZigwLCAi SW52YWxpZCByaW5naWQgJWQgcGFzc2VkIHRvIGdldF9tbWlvX2Jhc2UoKVxuIiwgcmluZ2lkKTsK PiArCX0KPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9iYXRjaF91c2VkCj4gKyAqIEBiYXRjaCBi YXRjaGJ1ZmZlciB0byBnZXQgb2Zmc2V0IGZyb20KPiArICoKPiArICogVGhpcyByZXR1cm5zIHRo ZSBudW1iZXIgb2YgYnl0ZXMgb2YgdGhlIGJhdGNoYnVmZmVyIHRoYXQgaGF2ZSBiZWVuIHVzZWQu Cj4gKyAqIGUuZy4gVGhlIG9mZnNldCBpbnRvIHRoZSBiYXRjaGJ1ZmZlciB0aGF0IHRoZSBuZXh0 IE9VVF9CQVRDSCB3b3VsZCB3cml0ZSB0by4KPiArICoKPiArICogUmV0dXJuczoKPiArICogVGhl IG51bWJlciBvZiBieXRlcyBvZiB0aGUgYmF0Y2hidWZmZXIgdGhhdCBoYXZlIGJlZW4gdXNlZC4K PiArICovCj4gK3VpbnQzMl90IGlndF9iYXRjaF91c2VkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpCj4gK3sKPiArCXJldHVybiBiYXRjaC0+cHRyIC0gYmF0Y2gtPmJ1ZmZlcjsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGlndF9jcmVhdGVfZGVsYXlfYmI6Cj4gKyAqIEBmZDogZmlsZSBk ZXNjcmlwdG9yIGZvciBpOTE1IGRyaXZlciBpbnN0YW5jZQo+ICsgKiBAYmF0Y2g6IEJhdGNoIGJ1 ZmZlciB0byB3cml0ZSB0bwo+ICsgKiByaW5naWQ6IFJpbmcgdG8gY3JlYXRlIGJhdGNoIGJ1ZmZl ciBmb3IuIGUuZy4gSTkxNV9FWEVDX1JFTkRFUgoKcmluZ2lkIGlzIHRoZSBleGVjdXRpb24gZmxh ZyBvZiB0aGUgcmluZwoKPiArICogbG9vcHM6IE51bWJlciBvZiB0aW1lcyB0byBsb29wCj4gKyAq IGRlc3Q6IEJ1ZmZlciB0byB1c2UgZm9yIHNhdmluZyB0aGUgY3VycmVudCBsb29wIGNvdW50IGFu ZCB0aW1lc3RhbXAuCj4gKyAqCj4gKyAqIFRoaXMgY3JlYXRlcyBhIGJhdGNoIGJ1ZmZlciB3aGlj aCB3aWxsIGl0ZXJhdGUgYSBsb29wIGEgc3BlY2lmaWVkIG51bWJlcgo+ICsgKiBvZiB0aW1lcy4g SW50ZW5kZWQgZm9yIGNyZWF0aW5nIGJhdGNoIGJ1ZmZlcnMgd2hpY2ggdGFrZSBhbiBhcmJpdGFy aWx5Cj4gKyAqIGxvbmcgdGltZSB0byBleGVjdXRlLiBUaGlzIGNhbiBiZSB1c2VmdWwgdG8ga2Vl cCBhIHJpbmcgYnVzeSB3aGlsZQo+ICsgKiBjb25zdHJ1Y3RpbmcgYSB0ZXN0IHNjZW5hcmlvLgo+ ICsgKgo+ICsgKiBUaGUgZGVzdCBidWZmZXIgd2lsbCBoYXZlIGEgbnVtYmVyIG9mIER3b3JkcyB3 cml0dGVuIGJ5IHRoZSBiYXRjaCBidWZmZXIKPiArICogd2hlbiBpdCBydW5zLiBUaGV5IGFyZToK PiArICogRFcwICYgRFcxIC0gVGhlc2UgYXJlIGxvYWRlZCB3aXRoIHRoZSB2YWx1ZSBvZiAnbG9v cHMnIGFuZCBhcmUgZGVjcmVtZW50ZWQKPiArICogICAgICAgICAgICAgYXMgdGhlIGJhdGNoIGJ1 ZmZlciBleGVjdXRlcy4gVGhleSB3aWxsIGJlIDAgYWZ0ZXIgdGhlIGJhdGNoCj4gKyAqICAgICAg ICAgICAgIGJ1ZmZlciBjb21wbGV0ZXMgaWYgaXQgZmluaXNoZWQgc3VjY2VzZnVsbHkuCj4gKyAq IERXMiBUaW1lc3RhbXAgLSBBbiBpbmRpY2F0aW9uIG9mIHdoZW4gdGhlIGJhdGNoIGJ1ZmZlciBy YW4gYWxsb3dpbmcgYQo+ICsgKiAgICAgICAgICAgICAgICAgY29tcGFyaXNvbiBiZXR3ZWVuIGJh dGNoIGJ1ZmZlcnMgdG8gc2hvdyBleGVjdXRpb24gb3JkZXIuCj4gKyAqICAgICAgICAgICAgICAg ICBNYXkgd3JhcCBzbyBpZ3RfY29tcGFyZV90aW1lc3RhbXBzKCkgc2hvdWxkIGJlIHVzZWQgdG8K PiArICogICAgICAgICAgICAgICAgIGNvbXBhcmUgdGltZXN0YW1wcy4KPiArICogICAgICAgICAg ICAgICAgIFRoZSB0aW1lc3RhbXAgd2lsbCB3cmFwIGV2ZXJ5IGZldyBtaW51dGVzLgo+ICsgKgo+ ICsgKi8KPiArdm9pZCBpZ3RfY3JlYXRlX2RlbGF5X2JiKGludCBmZCwgc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKCk5vdyB0aGF0IHlvdSdyZSBwYXNzaW5nIHRoZSBiYXRjaCBmcm9t IHRoZSBvdXRzaWRlIHlvdSdyZSBvbmx5IHVzaW5nIHRoZSAKZmQgdG8gZ2V0IHRoZSBnZW4uIEhv d2V2ZXIsIHRoZSBnZW4gaXMgYWxyZWFkeSBzYXZlZCBpbnNpZGUgdGhlIGJhdGNoIHNvIAp5b3Ug Y291bGQgZ2V0IGl0IGZyb20gdGhlcmUgYW5kIGRyb3AgdGhlIGZkIHBhcmFtZXRlci4gdGhlIApi Yl9hZGRyZXNzX3NpemVfZHcgd291bGQgbmVlZCB0byBiZSBtb2RpZmllZCB0byBnZXQgdGhlIGJh dGNoIG9yIHRoZSBnZW4gCmFzIGEgcGFyYW1ldGVyLCBidXQgaXQgbG9va3MgbGlrZSBhbiBvayBj aGFuZ2UgdG8gbWUuIFNhbWUgcmVhc29uaW5nIAphcHBsaWVzIHRvIG90aGVyIGZ1bmN0aW9ucyB5 b3UndmUgYWRkZWQuCgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJpbmdpZCwgdWlu dDMyX3QgbG9vcHMsIGRybV9pbnRlbF9ibyAqZGVzdCkKPiArewo+ICsJaW50IGFkZHJfc2l6ZV9k dzsKPiArCXVpbnQzMl90IG1taW9fYmFzZSwganVtcF9vZmZzZXQ7Cj4gKwo+ICsJLyogQ01EIHBh cnNlciBibG9ja3MgcmVhZGluZyBUSU1FU1RBTVAgcmVnaXN0ZXIgb24gZ2VuIDcuNSAqLwo+ICsJ aWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSA+PSA4KTsKPiAr Cj4gKwlhZGRyX3NpemVfZHcgPSBiYl9hZGRyZXNzX3NpemVfZHcoZmQpOwo+ICsJbW1pb19iYXNl ID0gZ2V0X21taW9fYmFzZShyaW5naWQpOwo+ICsJaWd0X2Fzc2VydChiYXRjaCk7Cj4gKwlCRUdJ Tl9CQVRDSCgzMiwgNSk7Cj4gKwo+ICsJLyogc3RvcmUgY3VycmVudCB0aW1lc3RhbXAgaW4gRFcy ICovCj4gKwlPVVRfQkFUQ0goTUlfU1RPUkVfUkVHSVNURVJfTUVNKGFkZHJfc2l6ZV9kdyArIDIp KTsKPiArCU9VVF9CQVRDSChtbWlvX2Jhc2UgKyBUSU1FU1RBTVBfb2Zmc2V0KTsKPiArCU9VVF9S RUxPQyhkZXN0LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9J TlNUUlVDVElPTiwgRFdPUkRTX1RPX0JZVEVTKDIpKTsKPiArCj4gKwkvKiBMb2FkIFIwIHdpdGgg bG9vcHMgKi8KPiArCU9VVF9CQVRDSChNSV9MT0FEX1JFR0lTVEVSX0lNTSk7Cj4gKwlPVVRfQkFU Q0gobW1pb19iYXNlICsgQUxVX0dQVV9SMF9MU0Jfb2Zmc2V0KTsKPiArCU9VVF9CQVRDSChsb29w cyk7Cj4gKwlPVVRfQkFUQ0goTUlfTE9BRF9SRUdJU1RFUl9JTU0pOwo+ICsJT1VUX0JBVENIKG1t aW9fYmFzZSArIEFMVV9HUFVfUjBfTVNCX29mZnNldCk7Cj4gKwlPVVRfQkFUQ0goMHgwMDAwMDAw MCk7Cj4gKwkvKiBMb2FkIFIxIHdpdGggMSAqLwo+ICsJT1VUX0JBVENIKE1JX0xPQURfUkVHSVNU RVJfSU1NKTsKPiArCU9VVF9CQVRDSChtbWlvX2Jhc2UgKyBBTFVfR1BVX1IxX0xTQl9vZmZzZXQp Owo+ICsJT1VUX0JBVENIKDB4MDAwMDAwMDEpOwo+ICsJT1VUX0JBVENIKE1JX0xPQURfUkVHSVNU RVJfSU1NKTsKPiArCU9VVF9CQVRDSChtbWlvX2Jhc2UgKyBBTFVfR1BVX1IxX01TQl9vZmZzZXQp Owo+ICsJT1VUX0JBVENIKDB4MDAwMDAwMDApOwo+ICsJLyogQ29weSBSMCAvIFIxIGludG8gU1JD QSAvIFNSQ0IsIFBlcmZvcm0gUjAgLSBSMSwgU3RvcmUgcmVzdWx0IGluIFIwICovCj4gKwkvKiBl LmcuIFIwIC09IDEgKi8KPiArCWp1bXBfb2Zmc2V0PWlndF9iYXRjaF91c2VkKGJhdGNoKTsKCmZv ciBjbGFyaXR5IHRoZSBzYW1wbGluZyBvZiBqdW1wIG9mZnNldCBjb3VsZCBnbyBhYm92ZSB0aGUg QUxVIGNvbW1lbnQgCihhbmQgaGF2ZSBhIGNvbW1lbnQgb2YgaXRzIG93bikKCj4gKwlPVVRfQkFU Q0goTUlfTUFUSCg0KSk7Cj4gKwlPVVRfQkFUQ0goQUxVX0xPQUQoQUxVX1NSQ0FfRU5DT0RJTkcs IEFMVV9SMF9FTkNPRElORykpOwo+ICsJT1VUX0JBVENIKEFMVV9MT0FEKEFMVV9TUkNCX0VOQ09E SU5HLCBBTFVfUjFfRU5DT0RJTkcpKTsKPiArCU9VVF9CQVRDSChBTFVfU1VCKTsKPiArCU9VVF9C QVRDSChBTFVfU1RPUkUoQUxVX1IwX0VOQ09ESU5HLCBBTFVfQUNDVV9FTkNPRElORykpOwo+ICsJ LyogQ29weSBSMCB0byBkZXN0Cj4gKwkgKiBPbiBHZW44IE1JX0NPTkRJVElPTkFMX0JBVENIX0JV RkZFUl9FTkQgQlNEIHJpbmcgQ29tcGFyZSBhZGRyZXNzCj4gKwkgKiBwb2ludHMgdG8gMiBEd29y ZHMsIGEgbWFzayAoRFcwKSBhbmQgZGF0YSAoRFcxKSB3aGljaCBhcmUgQU5EZWQKPiArCSAqIHRv Z2V0aGVyLgo+ICsJICogT24gR2VuOSssIGFuZCB0aGUgb3RoZXIgcmluZ3Mgb24gR2VuOCBDb21w YXJlIGFkZHJlc3MgcG9pbnRzIHRvCj4gKwkgKiBqdXN0IERhdGEgKERXMCkuIEZvciBzaW1wbGlj aXR5IGFsd2F5cyBjb3B5IFIwIExTQiB0byBEVzAgYW5kIERXMS4KPiArCSAqLwo+ICsJT1VUX0JB VENIKE1JX1NUT1JFX1JFR0lTVEVSX01FTShhZGRyX3NpemVfZHcgKyAyKSk7Cj4gKwlPVVRfQkFU Q0gobW1pb19iYXNlICsgQUxVX0dQVV9SMF9MU0Jfb2Zmc2V0KTsKPiArCU9VVF9SRUxPQyhkZXN0 LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElP TiwgMCk7Cj4gKwlPVVRfQkFUQ0goTUlfU1RPUkVfUkVHSVNURVJfTUVNKGFkZHJfc2l6ZV9kdyAr IDIpKTsKPiArCU9VVF9CQVRDSChtbWlvX2Jhc2UgKyBBTFVfR1BVX1IwX0xTQl9vZmZzZXQpOwo+ ICsJT1VUX1JFTE9DKGRlc3QsIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgSTkxNV9HRU1f RE9NQUlOX0lOU1RSVUNUSU9OLCBEV09SRFNfVE9fQllURVMoMSkpOwo+ICsJLyogUmVwZWF0IHVu dGlsIFIwID09IDAgKi8KPiArCU9VVF9CQVRDSChNSV9DT05ESVRJT05BTF9CQVRDSF9CVUZGRVJf RU5EKTsKPiArCU9VVF9CQVRDSCgweDAwMDAwMDAwKTsKPiArCU9VVF9SRUxPQyhkZXN0LCBJOTE1 X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCk7 Cj4gKwlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgKGFkZHJfc2l6ZV9kdyAtIDEp KTsKPiArCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwg MCwganVtcF9vZmZzZXQpOwo+ICsKPiArCS8qIFNob3VsZCBuZXZlciBnZXQgaGVyZSwgYnV0IGVu ZCBpZiBpdCBoYXBwZW5zICovCj4gKwlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX0VORCk7Cj4g KwlBRFZBTkNFX0JBVENIKCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfY3JlYXRlX3RpbWVz dGFtcF9iYjoKPiArICogQGZkOiBmaWxlIGRlc2NyaXB0b3IgZm9yIGk5MTUgZHJpdmVyIGluc3Rh bmNlCj4gKyAqIEBiYXRjaDogQmF0Y2ggYnVmZmVyIHRvIHdyaXRlIHRvCj4gKyAqIHJpbmdpZDog UmluZyB0byBjcmVhdGUgYmF0Y2ggYnVmZmVyIGZvci4gZS5nLiBJOTE1X0VYRUNfUkVOREVSCj4g KyAqIGRlc3Q6IEJ1ZmZlciB0byB1c2UgZm9yIHNhdmluZyB0aGUgdGltZXN0YW1wcy4KPiArICog bG9hZDogQnVmZmVyIHRvIGFjY2Vzcy4gU2V0IE5VTEwgaWYgbm90IHJlcXVpcmVkLgo+ICsgKiB3 cml0ZTogSWYgdHJ1ZSBhbmQgbG9hZCBpcyBub3QgTlVMTCwgd2lsbCBhbHNvIHdyaXRlIGEgdGlt ZXN0YW1wIHRvIGxvYWQKPiArICogYnVmZmVyLiBJZiBmYWxzZSBhbmQgbG9hZCBpcyBub3QgTlVM TCwgd2lsbCByZWFkIGZyb20gbG9hZCBidWZmZXIgaW50byBkZXN0Lgo+ICsgKiBJbnRlbmRlZCBm b3IgZGVwZW5kZW5jeSBjaGVja2luZy4KPiArICoKPiArICogVGhpcyBjcmVhdGVzIGEgYmF0Y2gg YnVmZmVyIHdoaWNoIHdyaXRlcyB0aW1lc3RhbXBzIGludG8gYSBidWZmZXIgb2JqZWN0Lgo+ICsg KiBJZiAnbG9hZCcgaXMgbm9uIG51bGwsIGRhdGEgaXMgZWl0aGVyIHdyaXR0ZW4gdG8gJ2xvYWQn IG9yIGNvcGllZCBmcm9tICdsb2FkJwo+ICsgKiBkZXBlbmRpbmcgb24gd2hldGhlciAnd3JpdGUn IGlzIHNldC4KPiArICoKPiArICogVGhlIGRlc3QgYnVmZmVyIHdpbGwgaGF2ZSBhIG51bWJlciBv ZiBEd29yZHMgd3JpdHRlbiBieSB0aGUgYmF0Y2ggYnVmZmVyCj4gKyAqIHdoZW4gaXQgcnVucy4g VGhleSBhcmU6Cj4gKyAqIERXMCBSZXBvcnRlZCB0aW1lc3RhbXAgLSBBbiBpbmRpY2F0aW9uIG9m IHdoZW4gdGhlIGJhdGNoIGJ1ZmZlciByYW4gYWxsb3dpbmcgYQo+ICsgKiAgICAgICAgICAgICAg ICAgICAgICAgICAgY29tcGFyaXNvbiBiZXR3ZWVuIGJhdGNoIGJ1ZmZlcnMgdG8gc2hvdyBleGVj dXRpb24gb3JkZXIuCj4gKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBNYXkgd3JhcCBzbyBp Z3RfY29tcGFyZV90aW1lc3RhbXBzKCkgc2hvdWxkIGJlIHVzZWQgdG8KPiArICogICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbXBhcmUgdGltZXN0YW1wcy4KPiArICogICAgICAgICAgICAgICAg ICAgICAgICAgIFRoZSB0aW1lc3RhbXAgd2lsbCB3cmFwIGV2ZXJ5IGZldyBtaW51dGVzLgo+ICsg KiBEVzIgVmFsdWUgY29waWVkIGZyb20gRFcwIG9mIGxvYWQgaWYgd3JpdGUgPT0gZmFsc2UKPiAr ICoKPiArICovCj4gK3ZvaWQgaWd0X2NyZWF0ZV90aW1lc3RhbXBfYmIoaW50IGZkLCBzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBpbnQgcmluZ2lkLAo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRybV9pbnRlbF9ibyAqZGVzdCwgZHJtX2ludGVsX2JvICpsb2FkLCBib29s IHdyaXRlKQoKSSBzdGlsbCB0aGluayB0aGF0IHRoZSB0aW1lc3RhbXAgY2FwdHVyZSBzaG91bGQg YmUgaXRzIG93biBmdW5jdGlvbiwgCmJlY2F1c2UgaXQgY291bGQgYmUgdXNlZnVsIHRvIGFkZCBp dCBtdWx0aXBsZSB0aW1lIGluIHRoZSBzYW1lIGJhdGNoLiAKWW91IGNvdWxkIHNwbGl0IHRoYXQg b3V0IGluIGEgc2VwYXJhdGUgZnVuY3Rpb24gYW5kIHRoZW4gY2FsbCBpdCBmcm9tIAppZ3RfY3Jl YXRlX3RpbWVzdGFtcF9iYiwgaS5lLiBzb21ldGhpbmcgbGlrZToKCmlndF9lbWl0X3RpbWVzdGFt cF9zYW1wbGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgaW50IHJpbmdpZCwgCmRy bV9pbnRlbF9ibyAqZGVzdCwgdW5zaWduZWQgZGVzdF9vZmZzZXQpOwoKUGVyc29uYWxseSBJIGFs c28gc3RpbGwgZG9uJ3QgcmVhbGx5IGxpa2UgdGhlICJsb2FkIiBoYW5kbGluZywgd2hpY2ggaXMg Cm5vdCByZWxhdGVkIHRvIHRpbWVzdGFtcHMgaW4gYW55IHdheS4gd29uJ3Qgb3Bwb3NlIGl0IGlm IG90aGVyIHBlb3BsZSAKYXJlIG9rIHdpdGggaXQgdGhvdWdoLgoKPiArewo+ICsJaW50IGFkZHJf c2l6ZV9kdzsKPiArCXVpbnQzMl90IG1taW9fYmFzZTsKPiArCj4gKwkvKiBDTUQgcGFyc2VyIGJs b2NrcyByZWFkaW5nIFRJTUVTVEFNUCByZWdpc3RlciBvbiBnZW4gNy41ICovCj4gKwlpZ3RfcmVx dWlyZShpbnRlbF9nZW4oaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkpID49IDgpOwo+ICsKPiArCWFk ZHJfc2l6ZV9kdyA9IGJiX2FkZHJlc3Nfc2l6ZV9kdyhmZCk7Cj4gKwltbWlvX2Jhc2UgPSBnZXRf bW1pb19iYXNlKHJpbmdpZCk7Cj4gKwlpZ3RfYXNzZXJ0KGJhdGNoKTsKPiArCj4gKwlCRUdJTl9C QVRDSCgzLCAxKTsKPiArCS8qIHN0b3JlIGN1cnJlbnQgcmVwb3J0ZWQgdGltZXN0YW1wIGluIERX MCAqLwo+ICsJT1VUX0JBVENIKE1JX1NUT1JFX1JFR0lTVEVSX01FTShhZGRyX3NpemVfZHcgKyAy KSk7Cj4gKwlPVVRfQkFUQ0gobW1pb19iYXNlICsgVElNRVNUQU1QX29mZnNldCk7Cj4gKwlPVVRf UkVMT0MoZGVzdCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJOTE1X0dFTV9ET01BSU5f SU5TVFJVQ1RJT04sIERXT1JEU19UT19CWVRFUygwKSk7Cj4gKwo+ICsJQURWQU5DRV9CQVRDSCgp Owo+ICsKPiArCWlmKGxvYWQgIT0gTlVMTCkgewoKc3R5bGU6IHdlIHRlbmQgdG8gcHV0IGEgc3Bh Y2UgYmV0d2VlbiBpZi93aGlsZS9mb3IgYW5kIHRoZSBwYXJlbnRoZXNpcywgCmJ1dCB5b3UgZGlk bid0IGFueXdoZXJlIGluIHRoaXMgcGF0Y2gKCj4gKwkJaWYod3JpdGUpIHsKPiArCQkJQkVHSU5f QkFUQ0goMywgMSk7Cj4gKwkJCU9VVF9CQVRDSChNSV9TVE9SRV9SRUdJU1RFUl9NRU0oYWRkcl9z aXplX2R3ICsgMikpOwo+ICsJCQlPVVRfQkFUQ0gobW1pb19iYXNlICsgVElNRVNUQU1QX29mZnNl dCk7Cj4gKwkJCU9VVF9SRUxPQyhsb2FkLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIEk5 MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgRFdPUkRTX1RPX0JZVEVTKDApKTsKPiArCQkJQURW QU5DRV9CQVRDSCgpOwo+ICsJCX0KPiArCQllbHNlIHsKCndlaXJkIGluZGVudAoKPiArCQkJQkVH SU5fQkFUQ0goMywgMik7Cj4gKwkJCU9VVF9CQVRDSChNSV9DT1BZX01FTV9NRU0pOwo+ICsJCQlP VVRfUkVMT0MoZGVzdCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJOTE1X0dFTV9ET01B SU5fSU5TVFJVQ1RJT04sIERXT1JEU19UT19CWVRFUygyKSk7Cj4gKwkJCU9VVF9SRUxPQyhsb2Fk LCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIERXT1JEU19UT19CWVRFUygwKSk7Cj4g KwkJCUFEVkFOQ0VfQkFUQ0goKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJQkVHSU5fQkFUQ0goMSwg MCk7Cj4gKwlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX0VORCk7Cj4gKwlBRFZBTkNFX0JBVENI KCk7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBpZ3RfY3JlYXRlX25vb3BfYmI6Cj4gKyAqIEBiYXRj aDogQmF0Y2ggYnVmZmVyIHRvIHdyaXRlIHRvCj4gKyAqIG5vb3BzOiBOdW1iZXIgb2YgTUlfTk9P UCBpbnN0cnVjdGlvbnMgdG8gYWRkIHRvIHRoZSBiYXRjaCBidWZmZXIuCj4gKyAqCj4gKyAqIFRo aXMgY3JlYXRlcyBhIGJhdGNoIGJ1ZmZlciB3aXRoIGEgc3BlY2lmaWVkIG51bWJlciBvZiBNSV9O T09QIGluc3RydWN0aW9ucy4KPiArICovCj4gK3ZvaWQgaWd0X2NyZWF0ZV9ub29wX2JiKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGludCBub29wcykKPiArewo+ICsJaW50IGxvb3A7 Cj4gKwo+ICsJaWd0X2Fzc2VydChiYXRjaCk7Cj4gKwo+ICsJQkVHSU5fQkFUQ0gobm9vcHMgKyAx LCAwKTsKPiArCWZvcihsb29wID0gMDsgbG9vcCA8IG5vb3BzOyBsb29wKyspCj4gKwkJT1VUX0JB VENIKE1JX05PT1ApOwo+ICsJT1VUX0JBVENIKE1JX0JBVENIX0JVRkZFUl9FTkQpOwo+ICsJQURW QU5DRV9CQVRDSCgpOwo+ICsKPiArfQo+ICsKPiArLyogU3RvcmUgY2FsaWJyYXRlZCB2YWx1ZXMg c28gdGhleSBvbmx5IG5lZWQgY2FsY3VsYXRpbmcgb25jZS4KPiArICogVXNlIGludGVsX2V4ZWN1 dGlvbl9lbmdpbmVzIGFycmF5IGFzIGxpc3Qgb2Ygc3VwcG9ydGVkIHJpbmdzCj4gKyAqLwo+ICtz dGF0aWMgdWludDMyX3QgKmNhbGlicmF0ZWRfcmluZ192YWx1ZSA9IE5VTEw7Cj4gKwo+ICsvKioK PiArICogaWd0X2NhbGlicmF0ZV9kZWxheV9iYjoKPiArICogQGZkOiBmaWxlIGRlc2NyaXB0b3Ig Zm9yIGk5MTUgZHJpdmVyIGluc3RhbmNlCj4gKyAqIEBidWZtZ3I6IEJ1ZmZlciBtYW5hZ2VyIHRv IGJlIHVzZWQgZm9yIGNyZWF0aW9uIG9mIGJhdGNoIGJ1ZmZlcnMKPiArICogcmluZ2lkOiBSaW5n IHRvIGNhbGlicmF0ZS4gZS5nLiBJOTE1X0VYRUNfUkVOREVSCj4gKyAqCj4gKyAqIFRoaXMgY2Fs Y3VsYXRlcyB0aGUgdmFsdWUgb2YgbG9vcHMgdGhhdCB3b3VsZCBuZWVkIHRvIGJlIHBhc3NlZCB0 bwo+ICsgKiBpZ3RfY3JlYXRlX2RlbGF5X2JiKCkgdG8gY3JlYXRlIGEgZGVsYXkgb2YgYWJvdXQg MSBzZWNvbmQgb24gdGhlIHNwZWNpZmllZAo+ICsgKiByaW5nLgo+ICsgKgo+ICsgKiBSZXR1cm5z Ogo+ICsgKiB1aW50MzJfdCB0byBiZSBwYXNzZWQgdG8gaWd0X2NyZWF0ZV9kZWxheV9iYigpLgo+ ICsgKi8KPiArLyogMHgxMDAwMDAgd2lsbCBydW4gZm9yIGFib3V0IDAuNiAtIDAuOCBzZWNvbmRz IChkZXBlbmRhbnQgb24gcmluZykgb24gQlhUIEhXICovCj4gKyNkZWZpbmUgQ0FMX1NFRUQgKDB4 MTAwMDAwKQo+ICt1aW50MzJfdCBpZ3RfY2FsaWJyYXRlX2RlbGF5X2JiKGludCBmZCwgZHJtX2lu dGVsX2J1Zm1nciAqYnVmbWdyLCBpbnQgcmluZ2lkKQo+ICt7Cj4gKwl1aW50MzJfdCBidWZbMl07 Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJiOwo+ICsJc3RydWN0IHRpbWVzcGVjIHN0 YXJ0LCBlbmQ7Cj4gKwl1aW50NjRfdCBkdXJhdGlvbjsKPiArCXVpbnQ2NF90IGNhbGlicmF0ZWQ7 Cj4gKwlkcm1faW50ZWxfYm8gKnRhcmdldF9ibzsKPiArCWludCByaW5nX2luZGV4PTA7Cj4gKwo+ ICsvKglpZ3RfYXNzZXJ0KHJpbmdpZCA8IDgpOwo+ICsJaWYoY2FsaWJyYXRlZF9yaW5nX3ZhbHVl W3JpbmdpZF0gIT0gMCkKPiArCQlyZXR1cm4gY2FsaWJyYXRlZF9yaW5nX3ZhbHVlW3JpbmdpZF07 Ki8KCmRlYWQgY29kZQoKPiArCj4gKwlpZihjYWxpYnJhdGVkX3JpbmdfdmFsdWUgPT0gTlVMTCkg ewo+ICsJCWludCBjb3VudDsKPiArCQlmb3IoY291bnQgPSAwOyBpbnRlbF9leGVjdXRpb25fZW5n aW5lc1tjb3VudF0ubmFtZSAhPSBOVUxMOyBjb3VudCsrKSB7fQoKQ2FuIHlvdSBhZGQgYSBjb21t ZW50IHRvIGV4cGxhaW4gd2h5IHRoaXMgbG9vcCBpcyByZXF1aXJlZCB0byBjb3VudCB0aGUgCmVu Z2luZXM/IGl0IGNvdWxkIGFsc28gYmUgcG9zc2libGUgdG8gYWRkIGEgZnVuY3Rpb24gaW4gaWd0 X2d0IHRvIHJldHVybiAKdGhlIGV4ZWNfZW5naW5lcyBjb3VudCwgYnV0IEknbSBub3Qgc3VyZSB0 aGF0J3Mgd29ydGggdGhlIGVmZm9ydC4gQWxzbywgCkJTRDEgYW5kIEJTRDIgd2lsbCBoYXZlIHRo ZSBzYW1lIGNhbGlicmF0aW9uIHZhbHVlIHNvIHlvdSBjYW4gY2FsaWJyYXRlIApvbmx5IG9uY2Ug Zm9yIEk5MTVfRVhFQ19CU0QKCj4gKwkJY2FsaWJyYXRlZF9yaW5nX3ZhbHVlID0gY2FsbG9jKGNv dW50LCBzaXplb2YodWludDMyX3QpKTsKPiArCQlpZ3RfYXNzZXJ0KGNhbGlicmF0ZWRfcmluZ192 YWx1ZSk7Cj4gKwl9Cj4gKwo+ICsJLyogQ2hlY2sgaWYgdGhlcmUgaXMgYWxyZWFkeSBhIGNhbGli cmF0aW9uIHZhbHVlIGZvciB0aGlzIHJpbmcgKi8KPiArCXdoaWxlKGludGVsX2V4ZWN1dGlvbl9l bmdpbmVzW3JpbmdfaW5kZXhdLm5hbWUgIT0gTlVMTCkgewo+ICsJCWlmKChpbnRlbF9leGVjdXRp b25fZW5naW5lc1tyaW5nX2luZGV4XS5leGVjX2lkIHwKPiArCQkgICAgaW50ZWxfZXhlY3V0aW9u X2VuZ2luZXNbcmluZ19pbmRleF0uZmxhZ3MpID09IHJpbmdpZCkgewo+ICsJCQlpZihjYWxpYnJh dGVkX3JpbmdfdmFsdWVbcmluZ19pbmRleF0gIT0gMCkgewo+ICsJCQkJcmV0dXJuIGNhbGlicmF0 ZWRfcmluZ192YWx1ZVtyaW5nX2luZGV4XTsKPiArCQkJfQo+ICsJCQlicmVhazsKPiArCQl9Cj4g KwkJcmluZ19pbmRleCsrOwoKQ291bGQgdXNlIGEgZm9yIGxvb3AgaW5zdGVhZCBvZiBpbmNyZW1l bnRpbmcgb24gZWFjaCBpdGVyYXRpb24uCgo+ICsJfQo+ICsKPiArCXRhcmdldF9ibyA9IGRybV9p bnRlbF9ib19hbGxvYyhidWZtZ3IsICJ0YXJnZXQgYm8iLCBCQVRDSF9TWiwgQkFUQ0hfU1opOwo+ ICsJaWd0X2Fzc2VydCh0YXJnZXRfYm8pOwo+ICsKPiArCS8qIFB1dCBzb21lIG5vbiB6ZXJvIHZh bHVlcyBpbiB0aGUgdGFyZ2V0IGJvICovCj4gKwl7CgpUaGlzIGJyYWNrZXQgdXNlZCB0byBnaXZl IHNjb3BlIHRvIHRoZSBkYXRhIHZhcmlhYmxlIGRvZXNuJ3QgbG9vayAKZXNzZW50aWFsIGFzIHRo ZXJlIGFyZSBubyBvdGhlciB1c2VzIG9mIGEgdmFyaWFibGUgbmFtZWQgZGF0YSBpbiB0aGlzIApm dW5jdGlvbgoKPiArCQl1aW50MzJfdCBkYXRhPTB4ZmZmZmZmZmY7CgpzdHlsZTogc3BhY2VzIGFy b3VuZCAiPSIKCj4gKwkJZHJtX2ludGVsX2JvX3N1YmRhdGEodGFyZ2V0X2JvLCAwLCA0LCAmZGF0 YSk7Cgp0aGUgc3ViZGF0YSBjYWxsIGNhbiBmYWlsLiBJbiB0aGUgdHJlZSB3ZSBkb24ndCBjaGVj ayB0aGUgcmV0dXJuIGNvZGUgb24gCmV2ZXJ5IHVzYWdlLCBidXQgSSBiZWxpZXZlIGl0IGlzIHNh ZmVyIHRvIGRvIGl0LiBkb19vcl9kaWUoKSBzaG91bGQgZG8gCnRoZSB0cmljay4KCj4gKwl9Cj4g Kwo+ICsJYmIgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGxvYyhidWZtZ3IsIGludGVsX2dldF9kcm1f ZGV2aWQoZmQpKTsKPiArCWlndF9hc3NlcnQoYmIpOwo+ICsJaWd0X2NyZWF0ZV9kZWxheV9iYihm ZCwgYmIsIHJpbmdpZCwgQ0FMX1NFRUQsIHRhcmdldF9ibyk7Cj4gKwo+ICsJZ2VtX3F1aWVzY2Vu dF9ncHUoZmQpOwo+ICsJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICZzdGFydCk7Cj4g KwlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKGJiLCByaW5naWQpOwo+ICsJLyogVGhp cyB3aWxsIG5vdCByZXR1cm4gdW50aWwgdGhlIGJvIGhhcyBmaW5pc2hlZCBleGVjdXRpbmcgKi8K PiArCWRybV9pbnRlbF9ib193YWl0X3JlbmRlcmluZyh0YXJnZXRfYm8pOwo+ICsJY2xvY2tfZ2V0 dGltZShDTE9DS19NT05PVE9OSUMsICZlbmQpOwo+ICsKPiArCWRybV9pbnRlbF9ib19nZXRfc3Vi ZGF0YSh0YXJnZXRfYm8sIDAsIDQsICh2b2lkKilidWYpOwoKV2h5IGFyZSB5b3UgdXNpbmcgYSAy IHdvcmRzIGFycmF5IHRvIHJlYWQgb25seSAxIHdvcmQ/IHdoYXQncyB0aGUgCnB1cnBvc2Ugb2Yg YnVmWzFdPyBpZiB5b3UgZG9uJ3QgbmVlZCBpdCB5b3UgY291bGQgcmV1c2UgdGhlIGRhdGEgCnZh cmlhYmxlIGZyb20gYWJvdmUKCj4gKwo+ICsJLyogYnVmWzBdIGluIHRoZSB0YXJnZXQgYnVmZmVy IHNob3VsZCBiZSAwIGlmIHRoZSBiYXRjaCBidWZmZXIgY29tcGxldGVkICovCj4gKwlpZ3RfYXNz ZXJ0X2YoYnVmWzBdID09IDAsICJidWZbMF0gZXhwZWN0ZWQgMHgwLCBnb3QgMHgleFxuIiwgYnVm WzBdKTsKPiArCj4gKwlkdXJhdGlvbiA9ICgoKCh1aW50NjRfdCllbmQudHZfc2VjIC0gKHVpbnQ2 NF90KXN0YXJ0LnR2X3NlYykgKiBTRUNfVE9fTlNFQykKPiArCSAgICAgICAgICAgKyAodWludDY0 X3QpZW5kLnR2X25zZWMpIC0gKHVpbnQ2NF90KXN0YXJ0LnR2X25zZWM7Cj4gKwo+ICsJY2FsaWJy YXRlZCA9ICgoKHVpbnQ2NF90KShDQUxfU0VFRCkgKiBTRUNfVE9fTlNFQykgLyBkdXJhdGlvbik7 Cj4gKwlpZ3RfZGVidWcoIlVuY2FsaWJyYXRlZCBydW4gdG9vayAlIiBQUkl1NjQgIi4lMDQiIFBS SXU2NCAic1xuIiwKPiArCSAgICAgICAgICBkdXJhdGlvbiAvIFNFQ19UT19OU0VDLAo+ICsJICAg ICAgICAgIChkdXJhdGlvbiAlIFNFQ19UT19OU0VDKSAvIDEwMDAwMCk7Cj4gKwlkcm1faW50ZWxf Ym9fdW5yZWZlcmVuY2UodGFyZ2V0X2JvKTsKPiArCWludGVsX2JhdGNoYnVmZmVyX2ZyZWUoYmIp Owo+ICsKPiArCS8qIFNhbml0eSBjaGVjay4gSWYgZHVyYXRpb24gPCAxMDBtcywgc29tZXRoaW5n IGhhcyBjbGVhcmx5IGdvbmUgd3JvbmcgKi8KPiArCWlndF9hc3NlcnQoZHVyYXRpb24gPiAoU0VD X1RPX05TRUMgIC8gMTApKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2YoY2FsaWJyYXRlZCA8PSBVSU5U MzJfTUFYLCAiQ2FsaWJyYXRlZCB2YWx1ZSA+IFVJTlQzMl9NQVhcbiIpOwo+ICsKPiArCWlmKGlu dGVsX2V4ZWN1dGlvbl9lbmdpbmVzW3JpbmdfaW5kZXhdLm5hbWUgIT0gTlVMTCkKPiArCQljYWxp YnJhdGVkX3JpbmdfdmFsdWVbcmluZ19pbmRleF0gPSAodWludDMyX3QpY2FsaWJyYXRlZDsKPiAr CXJldHVybiAodWludDMyX3QpY2FsaWJyYXRlZDsKPiArfQo+ICsKPiArLyoqCj4gKyAqIGlndF9j b21wYXJlX3RpbWVzdGFtcHM6Cj4gKyAqIEB0czE6IHRpbWVzdGFtcCAxCj4gKyAqIEB0czI6IHRp bWVzdGFtcCAyCj4gKyAqCj4gKyAqIFRoaXMgY29tcGFyZXMgdHdvIHVpbnQzMl90IHRpbWVzdGFt cHMuIFRvIGhhbmRsZSB3cmFwcGluZyBpdCBhc3N1bWVzIHRoZQo+ICsgKiBkaWZmZXJlbmNlIGJl dHdlZW4gdGhlIHR3byB0aW1lc3RhbXBzIGlzIGxlc3MgdGhhbiAxLzQgdGhlIG1heCBlbGFwc2Vk IHRpbWUKPiArICogcmVwcmVzZW50ZWQgYnkgdGhlIGNvdW50ZXJzLgo+ICsgKiBJdCBhbHNvIGFz c3VtZXMgdGhlIHRpbWVzdGFtcHMgYXJlIHNhbXBsZXMgZnJvbSB0aGUgc2FtZSBjb3VudGVyLgo+ ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBUcnVlIGlmIHRzMiA+IHRzMSwgYWxsb3dpbmcgZm9y IGNvdW50ZXIgd3JhcHBpbmcsIGZhbHNlIG90aGVyd2lzZS4KPiArICovCj4gKwo+ICtib29sIGln dF9jb21wYXJlX3RpbWVzdGFtcHModWludDMyX3QgdHMxLCB1aW50MzJfdCB0czIpCj4gK3sKPiAr CWlmICh0czIgPiB0czEpCgpUaGlzIHdpbGwgcmV0dXJuIHRydWUgaWYgdHMyID0gMHhGRkZGRkZG RiBhbmQgdHMxID0gMHgwMDAwMDAwMSBldmVuIGlmIAp0czEgY2FtZSBhZnRlciB0czIgZHVlIHRv IHdyYXBwaW5nLgoKPiArCQlyZXR1cm4gdHJ1ZTsKPiArCWVsc2UgaWYgKCh0czEgPiAweDgwMDAw MDAwKSAmJiAodHMyIDwgMHg0MDAwMDAwMCkpCj4gKwkJcmV0dXJuIHRydWU7IC8qIEFzc3VtaW5n IHRpbWVzdGFtcCBjb3VudGVyIHdyYXBwZWQgKi8KPiArCWVsc2UKPiArCQlyZXR1cm4gZmFsc2U7 Cj4gK30KCllvdSBjb3VsZCB1c2Ugc29tZXRoaW5nIGxpa2U6CgogICAgIHJldHVybiAoaW50MzJf dCkodHMyIC0gdHMxKSA+IDA7CgpUaGlzIHNob3VsZCBnaXZlIHlvdSB0aGUgcmlnaHQgcmVzdWx0 IGFzIGxvbmcgYXMgdGhlIDIgc2FtcGxlcyBhcmUgbm90IAptb3JlIHRoYW4gfjUwJSBvZiB0aGUg dGltZXN0YW1wIHBlcmlvZCBhcGFydAoKUmVnYXJkcywKRGFuaWVsZQoKPiBkaWZmIC0tZ2l0IGEv bGliL2ludGVsX2JhdGNoYnVmZmVyLmggYi9saWIvaW50ZWxfYmF0Y2hidWZmZXIuaAo+IGluZGV4 IDg2OTc0N2QuLjViNjZmYTMgMTAwNjQ0Cj4gLS0tIGEvbGliL2ludGVsX2JhdGNoYnVmZmVyLmgK PiArKysgYi9saWIvaW50ZWxfYmF0Y2hidWZmZXIuaAo+IEBAIC0zMjMsNCArMzIzLDE4IEBAIHR5 cGVkZWYgdm9pZCAoKmlndF9tZWRpYV9zcGluZnVuY190KShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAo+ICAgCj4gICBpZ3RfbWVkaWFfc3BpbmZ1bmNfdCBpZ3RfZ2V0X21lZGlhX3Nw aW5mdW5jKGludCBkZXZpZCk7Cj4gICAKPiArdWludDMyX3QgaWd0X2JhdGNoX3VzZWQoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7Cj4gKwo+ICt2b2lkIGlndF9jcmVhdGVfZGVsYXlf YmIoaW50IGZkLCBzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAo+ICsJCWludCByaW5n aWQsIHVpbnQzMl90IGxvb3BzLCBkcm1faW50ZWxfYm8gKmRlc3QpOwo+ICsKPiArdm9pZCBpZ3Rf Y3JlYXRlX3RpbWVzdGFtcF9iYihpbnQgZmQsIHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsIGludCByaW5naWQsCj4gKwkJCWRybV9pbnRlbF9ibyAqZGVzdCwgZHJtX2ludGVsX2JvICps b2FkLCBib29sIHdyaXRlKTsKPiArCj4gK3ZvaWQgaWd0X2NyZWF0ZV9ub29wX2JiKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGludCBub29wcyk7Cj4gKwo+ICt1aW50MzJfdCBpZ3Rf Y2FsaWJyYXRlX2RlbGF5X2JiKGludCBmZCwgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLCBpbnQg cmluZ2lkKTsKPiArCj4gK2Jvb2wgaWd0X2NvbXBhcmVfdGltZXN0YW1wcyh1aW50MzJfdCB0czEs IHVpbnQzMl90IHRzMik7Cj4gKwo+ICAgI2VuZGlmCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pbnRlbC1nZngK