From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matthew Auld Subject: Re: [PATCH v3 06/12] tests/perf: rework oa-exponent test Date: Wed, 23 Aug 2017 23:17:43 +0100 Message-ID: <20170823214906.52rdxuuvg3jog7wa@mwahaha> References: <20170823160339.6382-1-lionel.g.landwerlin@intel.com> <20170823160339.6382-7-lionel.g.landwerlin@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x241.google.com (mail-wr0-x241.google.com [IPv6:2a00:1450:400c:c0c::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 306736E64C for ; Wed, 23 Aug 2017 22:17:47 +0000 (UTC) Received: by mail-wr0-x241.google.com with SMTP id u17so494740wrf.3 for ; Wed, 23 Aug 2017 15:17:47 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20170823160339.6382-7-lionel.g.landwerlin@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Lionel Landwerlin Cc: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gMDgvMjMsIExpb25lbCBMYW5kd2VybGluIHdyb3RlOgo+IE5ldyBpc3N1ZXMgdGhhdCB3ZXJl IGRpc2NvdmVyZWQgd2hpbGUgbWFraW5nIHRoZSB0ZXN0cyB3b3JrIG9uIEdlbjgrIDoKPiAKPiAg LSB3ZSBuZWVkIHRvIG1lYXN1cmUgdGltaW5ncyBiZXR3ZWVuIHBlcmlvZGljIHJlcG9ydHMgYW5k IGRpc2NhcmQgYWxsCj4gICAgb3RoZXIga2luZCBvZiByZXBvcnRzCj4gCj4gIC0gaXQgc2VlbXMg cGVyaW9kaWNpdHkgb2YgdGhlIHJlcG9ydHMgY2FuIGJlIGFmZmVjdGVkIG91dHNpZGUgb2YgUkM2 Cj4gICAgKGZyZXF1ZW5jeSBjaGFuZ2UpLCB3ZSBjYW4gZGV0ZWN0IHRoaXMgYnkgbG9va2luZyBh dCB0aGUgYW1vdW50IG9mCj4gICAgY2xvY2sgY3ljbGVzIHBlciB0aW1lc3RhbXAgZGVsdGFzCj4g Cj4gU2lnbmVkLW9mZi1ieTogTGlvbmVsIExhbmR3ZXJsaW4gPGxpb25lbC5nLmxhbmR3ZXJsaW5A aW50ZWwuY29tPgo+IC0tLQo+ICB0ZXN0cy9wZXJmLmMgfCA3MzQgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5n ZWQsIDYwMCBpbnNlcnRpb25zKCspLCAxMzQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBh L3Rlc3RzL3BlcmYuYyBiL3Rlc3RzL3BlcmYuYwo+IGluZGV4IGNhNjk0NDBkLi5lNTRhMTRlZCAx MDA2NDQKPiAtLS0gYS90ZXN0cy9wZXJmLmMKPiArKysgYi90ZXN0cy9wZXJmLmMKPiBAQCAtMjgs NiArMjgsNyBAQAo+ICAjaW5jbHVkZSA8ZmNudGwuaD4KPiAgI2luY2x1ZGUgPGludHR5cGVzLmg+ Cj4gICNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVkZSA8c2lnbmFsLmg+Cj4gICNpbmNsdWRl IDxzeXMvc3RhdC5oPgo+ICAjaW5jbHVkZSA8c3lzL3RpbWUuaD4KPiAgI2luY2x1ZGUgPHN5cy90 aW1lcy5oPgo+IEBAIC0zMDYsNiArMzA3LDI1IEBAIHN0YXRpYyB1aW50MzJfdCAoKnJlYWRfcmVw b3J0X3RpY2tzKSh1aW50MzJfdCAqcmVwb3J0LAo+ICBzdGF0aWMgdm9pZCAoKnNhbml0eV9jaGVj a19yZXBvcnRzKSh1aW50MzJfdCAqb2FfcmVwb3J0MCwgdWludDMyX3QgKm9hX3JlcG9ydDEsCj4g IAkJCQkgICAgZW51bSBkcm1faTkxNV9vYV9mb3JtYXQgZm9ybWF0KTsKPiAgCj4gK3N0YXRpYyBi b29sCj4gK3RpbWVzdGFtcF9kZWx0YV93aXRoaW4odWludDMyX3QgZGVsdGEsCj4gKwkJICAgICAg IHVpbnQzMl90IGV4cGVjdGVkX2RlbHRhLAo+ICsJCSAgICAgICB1aW50MzJfdCBtYXJnaW4pCj4g K3sKPiArCXJldHVybiBkZWx0YSA+PSAoZXhwZWN0ZWRfZGVsdGEgLSBtYXJnaW4pICYmCj4gKwkg ICAgICAgZGVsdGEgPD0gKGV4cGVjdGVkX2RlbHRhICsgbWFyZ2luKTsKPiArfQo+ICsKPiArc3Rh dGljIGJvb2wKPiArZG91YmxlX3ZhbHVlX3dpdGhpbihkb3VibGUgdmFsdWUsCj4gKwkJICAgIGRv dWJsZSBleHBlY3RlZCwKPiArCQkgICAgZG91YmxlIHBlcmNlbnRfbWFyZ2luKQo+ICt7Cj4gKwly ZXR1cm4gdmFsdWUgPj0gKGV4cGVjdGVkIC0gZXhwZWN0ZWQgKiBwZXJjZW50X21hcmdpbiAvIDEw MC4wKSAmJgo+ICsJICAgICAgIHZhbHVlIDw9IChleHBlY3RlZCArIGV4cGVjdGVkICogcGVyY2Vu dF9tYXJnaW4gLyAxMDAuMCk7Cj4gKwo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZAo+ICBfX3BlcmZf Y2xvc2UoaW50IGZkKQo+ICB7Cj4gQEAgLTQ3Miw2ICs0OTIsMjAgQEAgZ2VuOF9yZWFkX3JlcG9y dF90aWNrcyh1aW50MzJfdCAqcmVwb3J0LCBlbnVtIGRybV9pOTE1X29hX2Zvcm1hdCBmb3JtYXQp Cj4gIAlyZXR1cm4gcmVwb3J0WzNdOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZAo+ICtnZW44X3Jl YWRfcmVwb3J0X2Nsb2NrX3JhdGlvcyh1aW50MzJfdCAqcmVwb3J0LAo+ICsJCQkgICAgICB1aW50 MzJfdCAqc2xpY2VfZnJlcV9taHosCj4gKwkJCSAgICAgIHVpbnQzMl90ICp1bnNsaWNlX2ZyZXFf bWh6KQo+ICt7Cj4gKwl1aW50MzJfdCB1bnNsaWNlX2ZyZXEgPSByZXBvcnRbMF0gJiAweDFmZjsK PiArCXVpbnQzMl90IHNsaWNlX2ZyZXFfbG93ID0gKHJlcG9ydFswXSA+PiAyNSkgJiAweDdmOwo+ ICsJdWludDMyX3Qgc2xpY2VfZnJlcV9oaWdoID0gKHJlcG9ydFswXSA+PiA5KSAmIDB4MzsKPiAr CXVpbnQzMl90IHNsaWNlX2ZyZXEgPSBzbGljZV9mcmVxX2xvdyB8IChzbGljZV9mcmVxX2hpZ2gg PDwgNyk7Cj4gKwo+ICsJKnNsaWNlX2ZyZXFfbWh6ID0gKHNsaWNlX2ZyZXEgKiAxNjY2NikgLyAx MDAwOwo+ICsJKnVuc2xpY2VfZnJlcV9taHogPSAodW5zbGljZV9mcmVxICogMTY2NjYpIC8gMTAw MDsKPiArfQo+ICsKPiAgc3RhdGljIGNvbnN0IGNoYXIgKgo+ICBnZW44X3JlYWRfcmVwb3J0X3Jl YXNvbihjb25zdCB1aW50MzJfdCAqcmVwb3J0KQo+ICB7Cj4gQEAgLTQ5NCwyOSArNTI4LDYgQEAg Z2VuOF9yZWFkX3JlcG9ydF9yZWFzb24oY29uc3QgdWludDMyX3QgKnJlcG9ydCkKPiAgCQlyZXR1 cm4gInVua25vd24iOwo+ICB9Cj4gIAo+IC1zdGF0aWMgYm9vbAo+IC1vYV9yZXBvcnRfaXNfcGVy aW9kaWModWludDMyX3Qgb2FfZXhwb25lbnQsIGNvbnN0IHVpbnQzMl90ICpyZXBvcnQpCj4gLXsK PiAtCWlmIChJU19IQVNXRUxMKGRldmlkKSkgewo+IC0JCS8qIEZvciBIYXN3ZWxsIHdlIGRvbid0 IGhhdmUgYSBkb2N1bWVudGVkIHJlcG9ydCByZWFzb24gZmllbGQKPiAtCQkgKiAodGhvdWdoIGVt cGlyaWNhbGx5IHJlcG9ydFswXSBiaXQgMTAgZG9lcyBzZWVtIHRvIGNvcnJlbGF0ZQo+IC0JCSAq IHdpdGggYSB0aW1lciB0cmlnZ2VyIHJlYXNvbikgc28gd2UgaW5zdGVhZCBpbmZlciB3aGljaAo+ IC0JCSAqIHJlcG9ydHMgYXJlIHRpbWVyIHRyaWdnZXJlZCBieSBjaGVja2luZyBpZiB0aGUgbGVh c3QKPiAtCQkgKiBzaWduaWZpY2FudCBiaXRzIGFyZSB6ZXJvIGFuZCB0aGUgZXhwb25lbnQgYml0 IGlzIHNldC4KPiAtCQkgKi8KPiAtCQl1aW50MzJfdCBvYV9leHBvbmVudF9tYXNrID0gKDEgPDwg KG9hX2V4cG9uZW50ICsgMSkpIC0gMTsKPiAtCj4gLQkJaWYgKChyZXBvcnRbMV0gJiBvYV9leHBv bmVudF9tYXNrKSAhPSAoMSA8PCBvYV9leHBvbmVudCkpCj4gLQkJCXJldHVybiB0cnVlOwo+IC0J fSBlbHNlIHsKPiAtCQlpZiAoKHJlcG9ydFswXSA+PiBPQVJFUE9SVF9SRUFTT05fU0hJRlQpICYK PiAtCQkgICAgT0FSRVBPUlRfUkVBU09OX1RJTUVSKQo+IC0JCQlyZXR1cm4gdHJ1ZTsKPiAtCX0K PiAtCj4gLQlyZXR1cm4gZmFsc2U7Cj4gLX0KPiAtCj4gIHN0YXRpYyB1aW50NjRfdAo+ICB0aW1l YmFzZV9zY2FsZSh1aW50MzJfdCB1MzJfZGVsdGEpCj4gIHsKPiBAQCAtNTYzLDYgKzU3NCwyOSBA QCBvYV9leHBvbmVudF90b19ucyhpbnQgZXhwb25lbnQpCj4gICAgICAgICByZXR1cm4gMTAwMDAw MDAwMFVMTCAqICgyVUxMIDw8IGV4cG9uZW50KSAvIHRpbWVzdGFtcF9mcmVxdWVuY3k7Cj4gIH0K PiAgCj4gK3N0YXRpYyBib29sCj4gK29hX3JlcG9ydF9pc19wZXJpb2RpYyh1aW50MzJfdCBvYV9l eHBvbmVudCwgY29uc3QgdWludDMyX3QgKnJlcG9ydCkKPiArewo+ICsJaWYgKElTX0hBU1dFTEwo ZGV2aWQpKSB7Cj4gKwkJLyogRm9yIEhhc3dlbGwgd2UgZG9uJ3QgaGF2ZSBhIGRvY3VtZW50ZWQg cmVwb3J0IHJlYXNvbiBmaWVsZAo+ICsJCSAqICh0aG91Z2ggZW1waXJpY2FsbHkgcmVwb3J0WzBd IGJpdCAxMCBkb2VzIHNlZW0gdG8gY29ycmVsYXRlCj4gKwkJICogd2l0aCBhIHRpbWVyIHRyaWdn ZXIgcmVhc29uKSBzbyB3ZSBpbnN0ZWFkIGluZmVyIHdoaWNoCj4gKwkJICogcmVwb3J0cyBhcmUg dGltZXIgdHJpZ2dlcmVkIGJ5IGNoZWNraW5nIGlmIHRoZSBsZWFzdAo+ICsJCSAqIHNpZ25pZmlj YW50IGJpdHMgYXJlIHplcm8gYW5kIHRoZSBleHBvbmVudCBiaXQgaXMgc2V0Lgo+ICsJCSAqLwo+ ICsJCXVpbnQzMl90IG9hX2V4cG9uZW50X21hc2sgPSAoMSA8PCAob2FfZXhwb25lbnQgKyAxKSkg LSAxOwo+ICsKPiArCQlpZiAoKHJlcG9ydFsxXSAmIG9hX2V4cG9uZW50X21hc2spID09ICgxIDw8 IG9hX2V4cG9uZW50KSkKPiArCQkJcmV0dXJuIHRydWU7Cj4gKwl9IGVsc2Ugewo+ICsJCWlmICgo cmVwb3J0WzBdID4+IE9BUkVQT1JUX1JFQVNPTl9TSElGVCkgJgo+ICsJCSAgICBPQVJFUE9SVF9S RUFTT05fVElNRVIpCj4gKwkJCXJldHVybiB0cnVlOwo+ICsJfQo+ICsKPiArCXJldHVybiBmYWxz ZTsKPiArfQo+ICsKPiAgc3RhdGljIGJvb2wKPiAgb2FfcmVwb3J0X2N0eF9pc192YWxpZCh1aW50 MzJfdCAqcmVwb3J0KQo+ICB7Cj4gQEAgLTU3OCw2ICs2MTIsMTI4IEBAIG9hX3JlcG9ydF9jdHhf aXNfdmFsaWQodWludDMyX3QgKnJlcG9ydCkKPiAgCWlndF9hc3NlcnQoISJyZWFjaGVkIik7Cj4g IH0KPiAgCj4gK3N0YXRpYyB1aW50MzJfdAo+ICtvYV9yZXBvcnRfZ2V0X2N0eF9pZCh1aW50MzJf dCAqcmVwb3J0KQo+ICt7Cj4gKwlpZiAoIW9hX3JlcG9ydF9jdHhfaXNfdmFsaWQocmVwb3J0KSkK PiArCQlyZXR1cm4gMHhmZmZmZmZmZjsKPiArCXJldHVybiByZXBvcnRbMl07Cj4gK30KPiArCj4g K3N0YXRpYyBkb3VibGUKPiArb2FfcmVwb3J0c190aWNrX3Blcl9wZXJpb2QodWludDMyX3QgKnJl cG9ydDAsIHVpbnQzMl90ICpyZXBvcnQxKQo+ICt7Cj4gKwlpZiAoaW50ZWxfZ2VuKGRldmlkKSA8 IDgpCj4gKwkJcmV0dXJuIDAuMDsKPiArCj4gKwkvKiBNZWFzdXJlIHRoZSBudW1iZXIgR1BVIHRp Y2sgZGVsdGEgdG8gdGltZXN0YW1wIGRlbHRhLiAqLwo+ICsJcmV0dXJuIChkb3VibGUpIChyZXBv cnQxWzNdIC0gcmVwb3J0MFszXSkgLwo+ICsJICAgICAgIChkb3VibGUpIChyZXBvcnQxWzFdIC0g cmVwb3J0MFsxXSk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3NjcmF0Y2hfYnVmX21lbXNl dChkcm1faW50ZWxfYm8gKmJvLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIHVpbnQzMl90IGNvbG9y KQo+ICt7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IGRybV9pbnRlbF9ib19tYXAoYm8sIHRy dWUgLyogd3JpdGFibGUgKi8pOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiArCWZv ciAoaW50IGkgPSAwOyBpIDwgd2lkdGggKiBoZWlnaHQ7IGkrKykKPiArCQkoKHVpbnQzMl90ICop Ym8tPnZpcnR1YWwpW2ldID0gY29sb3I7Cj4gKwo+ICsJZHJtX2ludGVsX2JvX3VubWFwKGJvKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArc2NyYXRjaF9idWZfaW5pdChkcm1faW50ZWxfYnVm bWdyICpidWZtZ3IsCj4gKwkJIHN0cnVjdCBpZ3RfYnVmICpidWYsCj4gKwkJIGludCB3aWR0aCwg aW50IGhlaWdodCwKPiArCQkgdWludDMyX3QgY29sb3IpCj4gK3sKPiArCXNpemVfdCBzdHJpZGUg PSB3aWR0aCAqIDQ7Cj4gKwlzaXplX3Qgc2l6ZSA9IHN0cmlkZSAqIGhlaWdodDsKPiArCWRybV9p bnRlbF9ibyAqYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVmbWdyLCAiIiwgc2l6ZSwgNDA5Nik7 Cj4gKwo+ICsJc2NyYXRjaF9idWZfbWVtc2V0KGJvLCB3aWR0aCwgaGVpZ2h0LCBjb2xvcik7Cj4g Kwo+ICsJYnVmLT5ibyA9IGJvOwo+ICsJYnVmLT5zdHJpZGUgPSBzdHJpZGU7Cj4gKwlidWYtPnRp bGluZyA9IEk5MTVfVElMSU5HX05PTkU7Cj4gKwlidWYtPnNpemUgPSBzaXplOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgdm9pZAo+ICtlbWl0X3JlcG9ydF9wZXJmX2NvdW50KHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsCj4gKwkJICAgICAgIGRybV9pbnRlbF9ibyAqZHN0X2JvLAo+ICsJCSAg ICAgICBpbnQgZHN0X29mZnNldCwKPiArCQkgICAgICAgdWludDMyX3QgcmVwb3J0X2lkKQo+ICt7 Cj4gKwlpZiAoSVNfSEFTV0VMTChkZXZpZCkpIHsKPiArCQlCRUdJTl9CQVRDSCgzLCAxKTsKPiAr CQlPVVRfQkFUQ0goR0VONl9NSV9SRVBPUlRfUEVSRl9DT1VOVCk7Cj4gKwkJT1VUX1JFTE9DKGRz dF9ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJV Q1RJT04sCj4gKwkJCSAgZHN0X29mZnNldCk7Cj4gKwkJT1VUX0JBVENIKHJlcG9ydF9pZCk7Cj4g KwkJQURWQU5DRV9CQVRDSCgpOwo+ICsJfSBlbHNlIHsKPiArCQkvKiBYWFg6IE5COiBuIGR3b3Jk cyBhcmcgaXMgYWN0dWFsbHkgbWFnaWMgc2luY2UgaXQgaW50ZXJuYWxseQo+ICsJCSAqIGF1dG9t YXRpY2FsbHkgYWNjb3VudHMgZm9yIGxhcmdlciBhZGRyZXNzZXMgb24gZ2VuID49IDguLi4KPiAr CQkgKi8KPiArCQlCRUdJTl9CQVRDSCgzLCAxKTsKPiArCQlPVVRfQkFUQ0goR0VOOF9NSV9SRVBP UlRfUEVSRl9DT1VOVCk7Cj4gKwkJT1VUX1JFTE9DKGRzdF9ibywgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCj4gKwkJCSAgZHN0X29mZnNl dCk7Cj4gKwkJT1VUX0JBVENIKHJlcG9ydF9pZCk7Cj4gKwkJQURWQU5DRV9CQVRDSCgpOwo+ICsJ fQo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDMyX3QKPiAraTkxNV9nZXRfb25lX2dwdV90aW1lc3Rh bXAodWludDMyX3QgKmNvbnRleHRfaWQpCj4gK3sKPiArCWRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1n ciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZHJtX2ZkLCA0MDk2KTsKPiArCWRybV9pbnRl bF9jb250ZXh0ICptaV9ycGNfY3R4ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2NyZWF0ZShidWZt Z3IpOwo+ICsJZHJtX2ludGVsX2JvICptaV9ycGNfYm8gPSBkcm1faW50ZWxfYm9fYWxsb2MoYnVm bWdyLCAibWlfcnBjIGRlc3QgYm8iLCA0MDk2LCA2NCk7Cj4gKwlzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKm1pX3JwY19iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgZGV2 aWQpOwo+ICsJaW50IHJldDsKPiArCXVpbnQzMl90IHRpbWVzdGFtcDsKPiArCj4gKwlkcm1faW50 ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyKTsKPiArCj4gKwlpZiAoY29udGV4dF9p ZCkgewo+ICsJCXJldCA9IGRybV9pbnRlbF9nZW1fY29udGV4dF9nZXRfaWQobWlfcnBjX2N0eCwg Y29udGV4dF9pZCk7Cj4gKwkJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsJfQo+ICsKPiArCWln dF9hc3NlcnQobWlfcnBjX2N0eCk7Cj4gKwlpZ3RfYXNzZXJ0KG1pX3JwY19ibyk7Cj4gKwlpZ3Rf YXNzZXJ0KG1pX3JwY19iYXRjaCk7Cj4gKwo+ICsJcmV0ID0gZHJtX2ludGVsX2JvX21hcChtaV9y cGNfYm8sIHRydWUpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsJbWVtc2V0KG1pX3Jw Y19iby0+dmlydHVhbCwgMHg4MCwgNDA5Nik7Cj4gKwlkcm1faW50ZWxfYm9fdW5tYXAobWlfcnBj X2JvKTsKPiArCj4gKwllbWl0X3JlcG9ydF9wZXJmX2NvdW50KG1pX3JwY19iYXRjaCwKPiArCQkJ ICAgICAgIG1pX3JwY19ibywgLyogZHN0ICovCj4gKwkJCSAgICAgICAwLCAvKiBkc3Qgb2Zmc2V0 IGluIGJ5dGVzICovCj4gKwkJCSAgICAgICAweGRlYWRiZWVmKTsgLyogcmVwb3J0IElEICovCj4g Kwo+ICsJaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KG1pX3JwY19iYXRjaCwg bWlfcnBjX2N0eCk7Cj4gKwo+ICsJcmV0ID0gZHJtX2ludGVsX2JvX21hcChtaV9ycGNfYm8sIGZh bHNlIC8qIHdyaXRlIGVuYWJsZSAqLyk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gKwl0 aW1lc3RhbXAgPSAoKHVpbnQzMl90ICopbWlfcnBjX2JvLT52aXJ0dWFsKVsxXTsKPiArCWRybV9p bnRlbF9ib191bm1hcChtaV9ycGNfYm8pOwo+ICsKPiArCWRybV9pbnRlbF9ib191bnJlZmVyZW5j ZShtaV9ycGNfYm8pOwo+ICsJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShtaV9ycGNfYmF0Y2gpOwo+ ICsJZHJtX2ludGVsX2dlbV9jb250ZXh0X2Rlc3Ryb3kobWlfcnBjX2N0eCk7Cj4gKwlkcm1faW50 ZWxfYnVmbWdyX2Rlc3Ryb3koYnVmbWdyKTsKPiArCj4gKwlyZXR1cm4gdGltZXN0YW1wOwo+ICt9 Cj4gIAo+ICBzdGF0aWMgdm9pZAo+ICBoc3dfc2FuaXR5X2NoZWNrX3JlbmRlcl9iYXNpY19yZXBv cnRzKHVpbnQzMl90ICpvYV9yZXBvcnQwLCB1aW50MzJfdCAqb2FfcmVwb3J0MSwKPiBAQCAtMTAz Miw3ICsxMTg4LDYgQEAgaTkxNV9yZWFkX3JlcG9ydHNfdW50aWxfdGltZXN0YW1wKGVudW0gZHJt X2k5MTVfb2FfZm9ybWF0IG9hX2Zvcm1hdCwKPiAgCXJldHVybiB0b3RhbF9sZW47Cj4gIH0KPiAg Cj4gLQo+ICAvKiBDQVBfU1lTX0FETUlOIGlzIHJlcXVpcmVkIHRvIG9wZW4gc3lzdGVtIHdpZGUg bWV0cmljcywgdW5sZXNzIHRoZSBzeXN0ZW0KPiAgICogY29udHJvbCBwYXJhbWV0ZXIgZGV2Lmk5 MTUucGVyZl9zdHJlYW1fcGFyYW5vaWQgPT0gMCAqLwo+ICBzdGF0aWMgdm9pZAo+IEBAIC0xMzQ3 LDIwICsxNTAyLDYgQEAgb3Blbl9hbmRfcmVhZF8yX29hX3JlcG9ydHMoaW50IGZvcm1hdF9pZCwK PiAgCV9fcGVyZl9jbG9zZShzdHJlYW1fZmQpOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZAo+IC1n ZW44X3JlYWRfcmVwb3J0X2Nsb2NrX3JhdGlvcyh1aW50MzJfdCAqcmVwb3J0LAo+IC0JCQkgICAg ICB1aW50MzJfdCAqc2xpY2VfZnJlcV9taHosCj4gLQkJCSAgICAgIHVpbnQzMl90ICp1bnNsaWNl X2ZyZXFfbWh6KQo+IC17Cj4gLQl1aW50MzJfdCB1bnNsaWNlX2ZyZXEgPSByZXBvcnRbMF0gJiAw eDFmZjsKPiAtCXVpbnQzMl90IHNsaWNlX2ZyZXFfbG93ID0gKHJlcG9ydFswXSA+PiAyNSkgJiAw eDdmOwo+IC0JdWludDMyX3Qgc2xpY2VfZnJlcV9oaWdoID0gKHJlcG9ydFswXSA+PiA5KSAmIDB4 MzsKPiAtCXVpbnQzMl90IHNsaWNlX2ZyZXEgPSBzbGljZV9mcmVxX2xvdyB8IChzbGljZV9mcmVx X2hpZ2ggPDwgNyk7Cj4gLQo+IC0JKnNsaWNlX2ZyZXFfbWh6ID0gKHNsaWNlX2ZyZXEgKiAxNjY2 NikgLyAxMDAwOwo+IC0JKnVuc2xpY2VfZnJlcV9taHogPSAodW5zbGljZV9mcmVxICogMTY2NjYp IC8gMTAwMDsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQKPiAgcHJpbnRfcmVwb3J0cyh1aW50MzJf dCAqb2FfcmVwb3J0MCwgdWludDMyX3QgKm9hX3JlcG9ydDEsIGludCBmbXQpCj4gIHsKPiBAQCAt MTU1Miw3NCArMTY5Myw0NTcgQEAgdGVzdF9vYV9mb3JtYXRzKHZvaWQpCj4gIAl9Cj4gIH0KPiAg Cj4gKwo+ICtlbnVtIGxvYWQgewo+ICsJTE9XLAo+ICsJSElHSAo+ICt9Owo+ICsKPiArI2RlZmlu ZSBMT0FEX0hFTFBFUl9QQVVTRV9VU0VDIDUwMAo+ICsKPiArc3RhdGljIHN0cnVjdCBsb2FkX2hl bHBlciB7Cj4gKwlpbnQgZGV2aWQ7Cj4gKwlpbnQgaGFzX3BwZ3R0Owo+ICsJZHJtX2ludGVsX2J1 Zm1nciAqYnVmbWdyOwo+ICsJZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQ7Cj4gKwl1aW50MzJf dCBjb250ZXh0X2lkOwo+ICsJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsKPiArCWRy bV9pbnRlbF9ibyAqdGFyZ2V0X2J1ZmZlcjsKVW51c2VkLgoKPiArCWVudW0gbG9hZCBsb2FkOwo+ ICsJYm9vbCBleGl0Owo+ICsJc3RydWN0IGlndF9oZWxwZXJfcHJvY2VzcyBpZ3RfcHJvYzsKPiAr CXN0cnVjdCBpZ3RfYnVmIHNyYywgZHN0Owo+ICt9IGxoID0geyAwLCB9OwpJc24ndCB0aGlzIGp1 c3QgemVybyBpbml0aWFsaXppbmcgLmRldmlkIHdpdGggdGhhdCBzdHJheSBjb21tYSwgYnV0IHRo ZW4gYWdhaW4KdGhpcyBpcyBzdGF0aWMgc28gd2UgbmVlZG4ndCBldmVuIGJvdGhlci4uLgoKPiAr Cj4gK3N0YXRpYyB2b2lkIGxvYWRfaGVscGVyX3NpZ25hbF9oYW5kbGVyKGludCBzaWcpCj4gK3sK PiArCWlmIChzaWcgPT0gU0lHVVNSMikKPiArCQlsaC5sb2FkID0gbGgubG9hZCA9PSBMT1cgPyBI SUdIIDogTE9XOwo+ICsJZWxzZQo+ICsJCWxoLmV4aXQgPSB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBsb2FkX2hlbHBlcl9zZXRfbG9hZChlbnVtIGxvYWQgbG9hZCkKPiArewo+ICsJaWd0 X2Fzc2VydChsaC5pZ3RfcHJvYy5ydW5uaW5nKTsKPiArCj4gKwlpZiAobGgubG9hZCA9PSBsb2Fk KQo+ICsJCXJldHVybjsKPiArCj4gKwlsaC5sb2FkID0gbG9hZDsKPiArCWtpbGwobGguaWd0X3By b2MucGlkLCBTSUdVU1IyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgbG9hZF9oZWxwZXJfcnVu KGVudW0gbG9hZCBsb2FkKQo+ICt7Cj4gKwkvKgo+ICsJICogRklYTUUgZm9yayBoZWxwZXJzIHdv bid0IGdldCBjbGVhbmVkIHVwIHdoZW4gc3RhcnRlZCBmcm9tIHdpdGhpbiBhCj4gKwkgKiBzdWJ0 ZXN0LCBzbyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgaXQgc3RpY2tzIGFyb3VuZCBhIGJpdCB0b28g bG9uZy4KPiArCSAqLwo+ICsJaWYgKGxoLmlndF9wcm9jLnJ1bm5pbmcpIHsKPiArCQlsb2FkX2hl bHBlcl9zZXRfbG9hZChsb2FkKTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJbGgubG9hZCA9 IGxvYWQ7Cj4gKwo+ICsJaWd0X2ZvcmtfaGVscGVyKCZsaC5pZ3RfcHJvYykgewo+ICsJCXNpZ25h bChTSUdVU1IxLCBsb2FkX2hlbHBlcl9zaWduYWxfaGFuZGxlcik7Cj4gKwkJc2lnbmFsKFNJR1VT UjIsIGxvYWRfaGVscGVyX3NpZ25hbF9oYW5kbGVyKTsKPiArCj4gKwkJd2hpbGUgKCFsaC5leGl0 KSB7Cj4gKwkJCWludCByZXQ7Cj4gKwo+ICsJCQlyZW5kZXJfY29weShsaC5iYXRjaCwKPiArCQkJ CSAgICBsaC5jb250ZXh0LAo+ICsJCQkJICAgICZsaC5zcmMsIDAsIDAsIDE5MjAsIDEwODAsCj4g KwkJCQkgICAgJmxoLmRzdCwgMCwgMCk7Cj4gKwo+ICsJCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVz aF93aXRoX2NvbnRleHQobGguYmF0Y2gsCj4gKwkJCQkJCQkgICAgIGxoLmNvbnRleHQpOwo+ICsK PiArCQkJcmV0ID0gZHJtX2ludGVsX2dlbV9jb250ZXh0X2dldF9pZChsaC5jb250ZXh0LAo+ICsJ CQkJCQkJICAgJmxoLmNvbnRleHRfaWQpOwo+ICsJCQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4g Kwo+ICsJCQlkcm1faW50ZWxfYm9fd2FpdF9yZW5kZXJpbmcobGguZHN0LmJvKTsKPiArCj4gKwkJ CS8qIExvd2VyIHRoZSBsb2FkIGJ5IHBhdXNpbmcgYWZ0ZXIgZXZlcnkgc3VibWl0dGVkCj4gKwkJ CSAqIHdyaXRlLiAqLwo+ICsJCQlpZiAobGgubG9hZCA9PSBMT1cpCj4gKwkJCQl1c2xlZXAoTE9B RF9IRUxQRVJfUEFVU0VfVVNFQyk7Cj4gKwkJfQo+ICsJfQo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBsb2FkX2hlbHBlcl9zdG9wKHZvaWQpCj4gK3sKPiArCWtpbGwobGguaWd0X3Byb2MucGlkLCBT SUdVU1IxKTsKPiArCWlndF9hc3NlcnQoaWd0X3dhaXRfaGVscGVyKCZsaC5pZ3RfcHJvYykgPT0g MCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGxvYWRfaGVscGVyX2luaXQodm9pZCkKPiArewo+ ICsJaW50IHJldDsKPiArCj4gKwlsaC5kZXZpZCA9IGludGVsX2dldF9kcm1fZGV2aWQoZHJtX2Zk KTsKPiArCWxoLmhhc19wcGd0dCA9IGdlbV91c2VzX3BwZ3R0KGRybV9mZCk7Cj4gKwo+ICsJLyog TUlfU1RPUkVfREFUQSBjYW4gb25seSB1c2UgR1RUIGFkZHJlc3Mgb24gZ2VuNCsvZzMzIGFuZCBu ZWVkcwo+ICsJICogc25vb3BhYmxlIG1lbSBvbiBwcmUtZ2VuNi4gSGVuY2UgbG9hZC1oZWxwZXIg b25seSB3b3JrcyBvbiBnZW42KywgYnV0Cj4gKwkgKiB0aGF0J3MgYWxzbyBhbGwgd2UgY2FyZSBh Ym91dCBmb3IgdGhlIHJwcyB0ZXN0Y2FzZSovCj4gKwlpZ3RfYXNzZXJ0KGludGVsX2dlbihsaC5k ZXZpZCkgPj0gNik7Cj4gKwlsaC5idWZtZ3IgPSBkcm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGRy bV9mZCwgNDA5Nik7Cj4gKwlpZ3RfYXNzZXJ0KGxoLmJ1Zm1ncik7Cj4gKwo+ICsJZHJtX2ludGVs X2J1Zm1ncl9nZW1fZW5hYmxlX3JldXNlKGxoLmJ1Zm1ncik7Cj4gKwo+ICsJbGguY29udGV4dCA9 IGRybV9pbnRlbF9nZW1fY29udGV4dF9jcmVhdGUobGguYnVmbWdyKTsKPiArCWlndF9hc3NlcnQo bGguY29udGV4dCk7Cj4gKwo+ICsJbGguY29udGV4dF9pZCA9IDB4ZmZmZmZmZmY7Cj4gKwlyZXQg PSBkcm1faW50ZWxfZ2VtX2NvbnRleHRfZ2V0X2lkKGxoLmNvbnRleHQsICZsaC5jb250ZXh0X2lk KTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCWlndF9hc3NlcnRfbmVxKGxoLmNvbnRl eHRfaWQsIDB4ZmZmZmZmZmYpOwo+ICsKPiArCWxoLmJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJf YWxsb2MobGguYnVmbWdyLCBsaC5kZXZpZCk7Cj4gKwlpZ3RfYXNzZXJ0KGxoLmJhdGNoKTsKPiAr Cj4gKwlzY3JhdGNoX2J1Zl9pbml0KGxoLmJ1Zm1nciwgJmxoLmRzdCwgMTkyMCwgMTA4MCwgMCk7 Cj4gKwlzY3JhdGNoX2J1Zl9pbml0KGxoLmJ1Zm1nciwgJmxoLnNyYywgMTkyMCwgMTA4MCwgMCk7 Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGxvYWRfaGVscGVyX2Zpbmkodm9pZCkKPiArewo+ICsJ aWYgKGxoLmlndF9wcm9jLnJ1bm5pbmcpCj4gKwkJbG9hZF9oZWxwZXJfc3RvcCgpOwo+ICsKPiAr CWlmIChsaC5zcmMuYm8pCj4gKwkJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGxoLnNyYy5ibyk7 Cj4gKwlpZiAobGguZHN0LmJvKQo+ICsJCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShsaC5kc3Qu Ym8pOwo+ICsKPiArCWlmIChsaC5iYXRjaCkKPiArCQlpbnRlbF9iYXRjaGJ1ZmZlcl9mcmVlKGxo LmJhdGNoKTsKPiArCj4gKwlpZiAobGguY29udGV4dCkKPiArCQlkcm1faW50ZWxfZ2VtX2NvbnRl eHRfZGVzdHJveShsaC5jb250ZXh0KTsKPiArCj4gKwlpZiAobGguYnVmbWdyKQo+ICsJCWRybV9p bnRlbF9idWZtZ3JfZGVzdHJveShsaC5idWZtZ3IpOwo+ICt9Cj4gKwo+ICBzdGF0aWMgdm9pZAo+ ICB0ZXN0X29hX2V4cG9uZW50cyh2b2lkKQo+ICB7Cj4gLQlpZ3RfZGVidWcoIlRlc3RpbmcgT0Eg dGltZXIgZXhwb25lbnRzXG4iKTsKPiArCWxvYWRfaGVscGVyX2luaXQoKTsKPiArCWxvYWRfaGVs cGVyX3J1bihISUdIKTsKPiAgCj4gIAkvKiBJdCdzIGFza2luZyBhIGxvdCB0byBzYW1wbGUgd2l0 aCBhIDE2MCBuYW5vc2Vjb25kIHBlcmlvZCBhbmQgdGhlCj4gIAkgKiB0ZXN0IGNhbiBmYWlsIGR1 ZSB0byBidWZmZXIgb3ZlcmZsb3dzIGlmIGl0IHdhc24ndCBwb3NzaWJsZSB0bwo+ICAJICoga2Vl cCB1cCwgc28gd2UgZG9uJ3Qgc3RhcnQgZnJvbSBhbiBleHBvbmVudCBvZiB6ZXJvLi4uCj4gIAkg Ki8KPiAtCWZvciAoaW50IGkgPSA1OyBpIDwgMjA7IGkrKykgewo+IC0JCXVpbnQzMl90IGV4cGVj dGVkX3RpbWVzdGFtcF9kZWx0YTsKPiAtCQl1aW50MzJfdCB0aW1lc3RhbXBfZGVsdGE7Cj4gLQkJ dWludDMyX3Qgb2FfcmVwb3J0MFs2NF07Cj4gLQkJdWludDMyX3Qgb2FfcmVwb3J0MVs2NF07Cj4g Kwlmb3IgKGludCBleHBvbmVudCA9IDU7IGV4cG9uZW50IDwgMTg7IGV4cG9uZW50KyspIHsKPiAr CQl1aW50NjRfdCBleHBlY3RlZF90aW1lc3RhbXBfZGVsdGE7Cj4gIAkJdWludDMyX3QgdGltZV9k ZWx0YTsKPiAtCQl1aW50MzJfdCBjbG9ja19kZWx0YTsKPiAtCQl1aW50MzJfdCBmcmVxOwo+ICAJ CWludCBuX3Rlc3RlZCA9IDA7Cj4gKwkJaW50IG5fdGltZV9kZWx0YV9tYXRjaGVzID0gMDsKPiAg Cj4gIAkJLyogVGhlIGV4cG9uZW50IGlzIGVmZmVjdGl2ZWx5IHNlbGVjdGluZyBhIGJpdCBpbiB0 aGUgdGltZXN0YW1wCj4gIAkJICogdG8gdHJpZ2dlciByZXBvcnRzIG9uIGFuZCBzbyBpbiBwcmFj dGljZSB3ZSBleHBlY3QgdGhlIHJhdwo+ICAJCSAqIHRpbWVzdGFtcCBkZWx0YXMgZm9yIHBlcmlv ZGljIHJlcG9ydHMgdG8gZXhhY3RseSBtYXRjaCB0aGUKPiAgCQkgKiB2YWx1ZSBvZiBuZXh0IGJp dC4KPiAgCQkgKi8KPiAtCQlleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEgPSAyIDw8IGk7Cj4gKwkJ ZXhwZWN0ZWRfdGltZXN0YW1wX2RlbHRhID0gMlVMIDw8IGV4cG9uZW50Owo+ICAKPiAgCQlmb3Ig KGludCBqID0gMDsgbl90ZXN0ZWQgPCAxMCAmJiBqIDwgMTAwOyBqKyspIHsKPiAtCQkJdWludDMy X3QgdGlja3MwLCB0aWNrczE7Cj4gLQo+IC0JCQlpZ3RfZGVidWcoIklURVIgJWQ6IHRlc3Rpbmcg T0EgZXhwb25lbnQgJWQgKHBlcmlvZCA9ICUiUFJJdTY0Im5zKVxuIiwKPiAtCQkJCSAgaiwgaSwg b2FfZXhwb25lbnRfdG9fbnMoaSkpOwo+IC0KPiAtCQkJb3Blbl9hbmRfcmVhZF8yX29hX3JlcG9y dHModGVzdF9vYV9mb3JtYXQsCj4gLQkJCQkJCSAgIGksIC8qIGV4cG9uZW50ICovCj4gLQkJCQkJ CSAgIG9hX3JlcG9ydDAsCj4gLQkJCQkJCSAgIG9hX3JlcG9ydDEsCj4gLQkJCQkJCSAgIHRydWUp OyAvKiB0aW1lciB0cmlnZ2VyZWQKPiAtCQkJCQkJCSAgICAgcmVwb3J0cyBvbmx5ICovCj4gLQo+ IC0JCQl0aW1lc3RhbXBfZGVsdGEgPSBvYV9yZXBvcnQxWzFdIC0gb2FfcmVwb3J0MFsxXTsKPiAt CQkJaWd0X2Fzc2VydF9uZXEodGltZXN0YW1wX2RlbHRhLCAwKTsKPiAtCj4gLQkJCWlmICh0aW1l c3RhbXBfZGVsdGEgIT0gZXhwZWN0ZWRfdGltZXN0YW1wX2RlbHRhKSB7Cj4gLQkJCQlpZ3RfZGVi dWcoInRpbWVzdGFtcDAgPSAldS8weCV4XG4iLAo+IC0JCQkJCSAgb2FfcmVwb3J0MFsxXSwgb2Ff cmVwb3J0MFsxXSk7Cj4gLQkJCQlpZ3RfZGVidWcoInRpbWVzdGFtcDEgPSAldS8weCV4XG4iLAo+ IC0JCQkJCSAgb2FfcmVwb3J0MVsxXSwgb2FfcmVwb3J0MVsxXSk7Cj4gKwkJCXVpbnQ2NF90IHBy b3BlcnRpZXNbXSA9IHsKPiArCQkJCS8qIEluY2x1ZGUgT0EgcmVwb3J0cyBpbiBzYW1wbGVzICov Cj4gKwkJCQlEUk1fSTkxNV9QRVJGX1BST1BfU0FNUExFX09BLCB0cnVlLAo+ICsKPiArCQkJCS8q IE9BIHVuaXQgY29uZmlndXJhdGlvbiAqLwo+ICsJCQkJRFJNX0k5MTVfUEVSRl9QUk9QX09BX01F VFJJQ1NfU0VULCB0ZXN0X21ldHJpY19zZXRfaWQsCj4gKwkJCQlEUk1fSTkxNV9QRVJGX1BST1Bf T0FfRk9STUFULCB0ZXN0X29hX2Zvcm1hdCwKPiArCQkJCURSTV9JOTE1X1BFUkZfUFJPUF9PQV9F WFBPTkVOVCwgZXhwb25lbnQsCj4gKwkJCX07Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9wZXJmX29w ZW5fcGFyYW0gcGFyYW0gPSB7Cj4gKwkJCQkuZmxhZ3MgPSBJOTE1X1BFUkZfRkxBR19GRF9DTE9F WEVDLAo+ICsJCQkJLm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShwcm9wZXJ0aWVzKSAvIDIs Cj4gKwkJCQkucHJvcGVydGllc19wdHIgPSB0b191c2VyX3BvaW50ZXIocHJvcGVydGllcyksCj4g KwkJCX07Cj4gKwkJCWludCByZXQ7Cj4gKwkJCXVpbnQ2NF90IGF2ZXJhZ2VfdGltZXN0YW1wX2Rl bHRhOwo+ICsJCQl1aW50MzJfdCBuX3JlcG9ydHMgPSAwOwo+ICsJCQl1aW50MzJfdCBuX3JlcG9y dF9sb3N0ID0gMDsKPiArCQkJdWludDMyX3Qgbl9pZGxlX3JlcG9ydHMgPSAwOwo+ICsJCQl1aW50 MzJfdCBuX3JlYWRzID0gMDsKPiArCQkJdWludDMyX3QgY29udGV4dF9pZDsKPiArCQkJdWludDY0 X3QgZmlyc3RfdGltZXN0YW1wID0gMDsKPiArCQkJYm9vbCBjaGVja19maXJzdF90aW1lc3RhbXAg PSB0cnVlOwo+ICsJCQlzdHJ1Y3QgZHJtX2k5MTVfcGVyZl9yZWNvcmRfaGVhZGVyICpoZWFkZXI7 Cj4gKwkJCXVpbnQ2NF90IGRlbHRhX2RlbHRhOwo+ICsJCQlzdHJ1Y3Qgewo+ICsJCQkJdWludDMy X3QgcmVwb3J0WzY0XTsKPiArCQkJfSByZXBvcnRzWzMwXTsKPiArCQkJc3RydWN0IHsKPiArCQkJ CXVpbnQ4X3QgKmJ1ZjsKPiArCQkJCXNpemVfdCBsZW47Cj4gKwkJCX0gcmVhZHNbMTAwMF07Cj4g KwkJCWRvdWJsZSBlcnJvcjsKPiArCQkJZG91YmxlIHRpY2tfcGVyX3BlcmlvZDsKPiArCj4gKwkJ CWlndF9kZWJ1ZygiSVRFUiAlZDogdGVzdGluZyBPQSBleHBvbmVudCAlZCwiCj4gKwkJCQkgICIg ZXhwZWN0ZWQgdHMgZGVsdGEgPSAlIlBSSXU2NCIgKCUiUFJJdTY0Im5zLyUuMmZ1cy8lLjJmbXMp XG4iLAo+ICsJCQkJICBqLCBleHBvbmVudCwKPiArCQkJCSAgZXhwZWN0ZWRfdGltZXN0YW1wX2Rl bHRhLAo+ICsJCQkJICBvYV9leHBvbmVudF90b19ucyhleHBvbmVudCksCj4gKwkJCQkgIG9hX2V4 cG9uZW50X3RvX25zKGV4cG9uZW50KSAvIDEwMDAuMCwKPiArCQkJCSAgb2FfZXhwb25lbnRfdG9f bnMoZXhwb25lbnQpIC8gKDEwMDAuMCAqIDEwMDAuMCkpOwo+ICsKPiArCQkJc3RyZWFtX2ZkID0g X19wZXJmX29wZW4oZHJtX2ZkLCAmcGFyYW0pOwo+ICsKPiArCQkJLyogUmlnaHQgYWZ0ZXIgb3Bl bmluZyB0aGUgT0Egc3RyZWFtLCByZWFkIGEKPiArCQkJICogZmlyc3QgdGltZXN0YW1wIGFzIHdh eSB0byBmaWx0ZXIgcHJldmlvdXNseQo+ICsJCQkgKiBzY2hlZHVsZWQgd29yayB0aGF0IHdvdWxk IGhhdmUgY29uZmlndXJlZAo+ICsJCQkgKiB0aGUgT0EgdW5pdCBhdCBhIGRpZmZlcmVudCBwZXJp b2QuICovCj4gKwkJCWZpcnN0X3RpbWVzdGFtcCA9IGk5MTVfZ2V0X29uZV9ncHVfdGltZXN0YW1w KCZjb250ZXh0X2lkKTsKPiArCj4gKwkJCXdoaWxlIChuX3JlYWRzIDwgQVJSQVlfU0laRShyZWFk cykgJiYKPiArCQkJICAgICAgIG5fcmVwb3J0cyA8IEFSUkFZX1NJWkUocmVwb3J0cykpIHsKPiAr CQkJCWNvbnN0IHNpemVfdCBidWZfc2l6ZSA9IDEwMjQgKiAxMDI0Owo+ICsJCQkJdWludDhfdCAq YnVmID0gcmVhZHNbbl9yZWFkcysrXS5idWYgPSBjYWxsb2MoMSwgYnVmX3NpemUpOwo+ICsKPiAr CQkJCXdoaWxlICgocmV0ID0gcmVhZChzdHJlYW1fZmQsIGJ1ZiwgYnVmX3NpemUpKSA8IDAgJiYK PiArCQkJCSAgICAgICBlcnJubyA9PSBFSU5UUikKPiArCQkJCQk7Cj4gKwo+ICsJCQkJLyogV2Ug c2hvdWxkIG5ldmVyIGhhdmUgbm8gZGF0YS4gKi8KPiArCQkJCWlndF9hc3NlcnQocmV0ID4gMCk7 Cj4gKwkJCQlyZWFkc1tuX3JlYWRzIC0gMV0ubGVuID0gcmV0Owo+ICsKPiArCQkJCWlndF9kZWJ1 ZygiID4gcmVhZCAlaSBieXRlc1xuIiwgcmV0KTsKPiArCj4gKwkJCQlmb3IgKGludCBvZmZzZXQg PSAwOwo+ICsJCQkJICAgICBvZmZzZXQgPCByZXQgJiYgbl9yZXBvcnRzIDwgQVJSQVlfU0laRShy ZXBvcnRzKTsKPiArCQkJCSAgICAgb2Zmc2V0ICs9IGhlYWRlci0+c2l6ZSkgewo+ICsJCQkJCXVp bnQzMl90ICpyZXBvcnQ7Cj4gKwkJCQkJZG91YmxlIHByZXZpb3VzX3RpY2tfcGVyX3BlcmlvZDsK PiArCj4gKwkJCQkJaGVhZGVyID0gKHZvaWQgKikoYnVmICsgb2Zmc2V0KTsKPiArCj4gKwkJCQkJ aWYgKGhlYWRlci0+dHlwZSA9PSBEUk1fSTkxNV9QRVJGX1JFQ09SRF9PQV9CVUZGRVJfTE9TVCkg ewo+ICsJCQkJCQlpZ3RfYXNzZXJ0KCEicmVhY2hlZCIpOwo+ICsJCQkJCQlicmVhazsKPiArCQkJ CQl9Cj4gKwo+ICsJCQkJCWlmIChoZWFkZXItPnR5cGUgPT0gRFJNX0k5MTVfUEVSRl9SRUNPUkRf T0FfUkVQT1JUX0xPU1QpIHsKPiArCQkJCQkJbl9yZXBvcnRfbG9zdCsrOwo+ICsJCQkJCQluX3Jl cG9ydHMgPSAwOwo+ICsJCQkJCQluX3JlcG9ydF9sb3N0ID0gMDsKRWg/Cgo+ICsJCQkJCQluX2lk bGVfcmVwb3J0cyA9IDA7Cj4gKwkJCQkJCWZvciAoaW50IHIgPSAwOyByIDwgbl9yZWFkczsgcisr KQo+ICsJCQkJCQkJZnJlZShyZWFkc1tyXS5idWYpOwo+ICsJCQkJCQluX3JlYWRzID0gMDsKPiAr CQkJCQkJYnJlYWs7Cj4gKwkJCQkJfQo+ICsKPiArCQkJCQlpZiAoaGVhZGVyLT50eXBlICE9IERS TV9JOTE1X1BFUkZfUkVDT1JEX1NBTVBMRSkKPiArCQkJCQkJY29udGludWU7Cj4gKwo+ICsJCQkJ CXJlcG9ydCA9ICh2b2lkICopKGhlYWRlciArIDEpOwo+ICsKPiArCQkJCQkvKiBTa2lwIGFueXRo aW5nIGJlZm9yZSB0aGUgZmlyc3QKPiArCQkJCQkgKiB0aW1lc3RhbXAsIGl0IG1pZ2h0IG5vdCBi ZSBhdCB0aGUKPiArCQkJCQkgKiByaWdodCBwZXJpb2RpYyBleHBvbmVudC4gKi8KPiArCQkJCQlp ZiAoY2hlY2tfZmlyc3RfdGltZXN0YW1wICYmCj4gKwkJCQkJICAgIHJlcG9ydFsxXSA8IGZpcnN0 X3RpbWVzdGFtcCkgewo+ICsJCQkJCQlpZ3RfZGVidWcoIiA+IERyb3BwaW5nIHRzPSV1IChwcmlv ciAlIlBSSXU2NCIpXG4iLAo+ICsJCQkJCQkJICByZXBvcnRbMV0sIGZpcnN0X3RpbWVzdGFtcCk7 Cj4gKwkJCQkJCWNvbnRpbnVlOwo+ICsJCQkJCX0KPiArCj4gKwkJCQkJLyogT25jZSB3ZSd2ZSBw YXNzZWQgdGhlIGZpcnN0Cj4gKwkJCQkJICogdGltZXN0YW1wLCBubyBuZWVkIHRvIGNoZWNrLiAq Lwo+ICsJCQkJCWNoZWNrX2ZpcnN0X3RpbWVzdGFtcCA9IGZhbHNlOwo+ICsKPiArCQkJCQlpZiAo IW9hX3JlcG9ydF9jdHhfaXNfdmFsaWQocmVwb3J0KSkKPiArCQkJCQkJbl9pZGxlX3JlcG9ydHMr KzsKPiArCj4gKwkJCQkJLyogV2Ugb25seSBtZWFzdXJlIHRpbWVzdGFtcHMgYmV0d2Vlbgo+ICsJ CQkJCSAqIHBlcmlvZGljIHJlcG9ydHMuICovCj4gKwkJCQkJaWYgKCFvYV9yZXBvcnRfaXNfcGVy aW9kaWMoZXhwb25lbnQsIHJlcG9ydCkpCj4gKwkJCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJCQlp Z3RfZGVidWcoIiA+IHdyaXRlICVpIHRpbWVzdGFtcD0ldVxuIiwgbl9yZXBvcnRzLCByZXBvcnRb MV0pOwo+ICsJCQkJCW1lbWNweShyZXBvcnRzW25fcmVwb3J0c10ucmVwb3J0LCByZXBvcnQsCj4g KwkJCQkJICAgICAgIHNpemVvZihyZXBvcnRzW25fcmVwb3J0c10ucmVwb3J0KSk7Cj4gKwkJCQkJ bl9yZXBvcnRzKys7Cj4gKwo+ICsJCQkJCXByZXZpb3VzX3RpY2tfcGVyX3BlcmlvZCA9IHRpY2tf cGVyX3BlcmlvZDsKPiArCj4gKwkJCQkJaWYgKG5fcmVwb3J0cyA+IDEpIHsKPiArCQkJCQkJdGlj a19wZXJfcGVyaW9kID0KPiArCQkJCQkJCW9hX3JlcG9ydHNfdGlja19wZXJfcGVyaW9kKHJlcG9y dHNbbl9yZXBvcnRzIC0gMl0ucmVwb3J0LAo+ICsJCQkJCQkJCQkJICAgcmVwb3J0c1tuX3JlcG9y dHMgLSAxXS5yZXBvcnQpOwo+ICsKPiArCQkJCQkJLyogRGlzbWlzcyB0aGUgc2VyaWVzIG9mIHJl cG9ydAo+ICsJCQkJCQkgKiBpZiB3ZSBub3RpY2UgY2xvY2sgZnJlcXVlbmN5Cj4gKwkJCQkJCSAq IGNoYW5nZXMuICovCj4gKwkJCQkJCWlmICghZG91YmxlX3ZhbHVlX3dpdGhpbih0aWNrX3Blcl9w ZXJpb2QsCj4gKwkJCQkJCQkJCSBwcmV2aW91c190aWNrX3Blcl9wZXJpb2QsIDUpKSB7Cj4gKwkJ CQkJCQkJaWd0X2RlYnVnKCJOb3RpY2VkIGNsb2NrIGZyZXF1ZW5jeSBjaGFuZ2UgYXQgdHM9JXUg KCVmIC8gJWYpLCAiCj4gKwkJCQkJCQkJCSAgImRyb3BwaW5nIHJlcG9ydHMgYW5kIHRyeWluZyBh Z2FpblxuIiwKPiArCQkJCQkJCQkJICByZXBvcnRbMV0sIHByZXZpb3VzX3RpY2tfcGVyX3Blcmlv ZCwgdGlja19wZXJfcGVyaW9kKTsKPiArCQkJCQkJCQluX3JlcG9ydHMgPSAwOwo+ICsJCQkJCQkJ CW5fcmVwb3J0X2xvc3QgPSAwOwo+ICsJCQkJCQkJCW5faWRsZV9yZXBvcnRzID0gMDsKPiArCQkJ CQkJCQlmb3IgKGludCByID0gMDsgciA8IG5fcmVhZHM7IHIrKykKPiArCQkJCQkJCQkJZnJlZShy ZWFkc1tyXS5idWYpOwo+ICsJCQkJCQkJCW5fcmVhZHMgPSAwOwo+ICsJCQkJCQkJCWJyZWFrOwo+ ICsJCQkJCQl9Cj4gKwkJCQkJfQo+ICsJCQkJfQo+ICAJCQl9Cj4gIAo+IC0JCQlpZ3RfYXNzZXJ0 X2VxKHRpbWVzdGFtcF9kZWx0YSwgZXhwZWN0ZWRfdGltZXN0YW1wX2RlbHRhKTsKPiArCQkJX19w ZXJmX2Nsb3NlKHN0cmVhbV9mZCk7Cj4gKwkJCWlndF9kZWJ1ZygiY2xvc2VkIHN0cmVhbVxuIik7 Cj4gIAo+IC0JCQl0aWNrczAgPSByZWFkX3JlcG9ydF90aWNrcyhvYV9yZXBvcnQwLCB0ZXN0X29h X2Zvcm1hdCk7Cj4gLQkJCXRpY2tzMSA9IHJlYWRfcmVwb3J0X3RpY2tzKG9hX3JlcG9ydDEsIHRl c3Rfb2FfZm9ybWF0KTsKPiAtCQkJY2xvY2tfZGVsdGEgPSB0aWNrczEgLSB0aWNrczA7Cj4gKwkJ CWlndF9hc3NlcnRfZXEobl9yZXBvcnRzLCBBUlJBWV9TSVpFKHJlcG9ydHMpKTsKPiAgCj4gLQkJ CXRpbWVfZGVsdGEgPSB0aW1lYmFzZV9zY2FsZSh0aW1lc3RhbXBfZGVsdGEpOwo+ICsJCQlhdmVy YWdlX3RpbWVzdGFtcF9kZWx0YSA9IDA7Cj4gKwkJCWZvciAoaW50IGkgPSAwOyBpIDwgKG5fcmVw b3J0cyAtIDEpOyBpKyspIHsKPiArCQkJCS8qIFhYWDogY2FsY3VsYXRpbmcgd2l0aCB1MzIgYXJp dGhtZXRpYyB0byBhY2NvdW50IGZvciBvdmVyZmxvdyAqLwo+ICsJCQkJdWludDMyX3QgdTMyX2Rl bHRhID0gcmVwb3J0c1tpICsgMV0ucmVwb3J0WzFdIC0gcmVwb3J0c1tpXS5yZXBvcnRbMV07Cj4g IAo+IC0JCQlmcmVxID0gKCh1aW50NjRfdCljbG9ja19kZWx0YSAqIDEwMDApIC8gdGltZV9kZWx0 YTsKPiAtCQkJaWd0X2RlYnVnKCJJVEVSICVkOiB0aW1lIGRlbHRhID0gJSJQUkl1MzIiKG5zKSBj bG9jayBkZWx0YSA9ICUiUFJJdTMyIiBmcmVxID0gJSJQUkl1MzIiKG1oeilcbiIsCj4gLQkJCQkg IGosIHRpbWVfZGVsdGEsIGNsb2NrX2RlbHRhLCBmcmVxKTsKPiArCQkJCWF2ZXJhZ2VfdGltZXN0 YW1wX2RlbHRhICs9IHUzMl9kZWx0YTsKPiArCQkJfQo+ICsJCQlhdmVyYWdlX3RpbWVzdGFtcF9k ZWx0YSAvPSAobl9yZXBvcnRzIC0gMSk7Cj4gKwo+ICsJCQlpZiAoYXZlcmFnZV90aW1lc3RhbXBf ZGVsdGEgPiBleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEpCj4gKwkJCQlkZWx0YV9kZWx0YSAgPSBh dmVyYWdlX3RpbWVzdGFtcF9kZWx0YSAtIGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YTsKPiArCQkJ ZWxzZQo+ICsJCQkJZGVsdGFfZGVsdGEgPSBleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEgLSBhdmVy YWdlX3RpbWVzdGFtcF9kZWx0YTsKPiArCQkJZXJyb3IgPSAoZGVsdGFfZGVsdGEgLyAoZG91Ymxl KWV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YSkgKiAxMDAuMDsKPiArCj4gKwkJCXRpbWVfZGVsdGEg PSB0aW1lYmFzZV9zY2FsZShhdmVyYWdlX3RpbWVzdGFtcF9kZWx0YSk7Cj4gKwo+ICsJCQlpZ3Rf ZGVidWcoIiA+IEF2Zy4gdGltZSBkZWx0YSA9ICUiUFJJdTMyIihucyksIgo+ICsJCQkJICAiIGxv c3QgcmVwb3J0cyA9ICV1LCBuIGlkbGUgcmVwb3J0cyA9ICV1LCIKPiArCQkJCSAgIiBuIHJlYWRz ID0gJXUsIGVycm9yPSVmXG4iLAo+ICsJCQkJICB0aW1lX2RlbHRhLCBuX3JlcG9ydF9sb3N0LCBu X2lkbGVfcmVwb3J0cywgbl9yZWFkcywgZXJyb3IpOwo+ICsJCQlpZiAoZXJyb3IgPiA1KSB7Cj4g KwkJCQl1aW50MzJfdCAqcnB0ID0gTlVMTCwgKmxhc3QgPSBOVUxMLCAqbGFzdF9wZXJpb2RpYyA9 IE5VTEw7Cj4gKwo+ICsJCQkJaWd0X2RlYnVnKCIgPiBNb3JlIHRoYW4gNSUlIGVycm9yOiBhdmdf dHNfZGVsdGEgPSAlIlBSSXU2NCIsIGRlbHRhX2RlbHRhID0gJSJQUkl1NjQiLCAiCj4gKwkJCQkJ ICAiZXhwZWN0ZWRfZGVsdGEgPSAlIlBSSXU2NCIsIGZpcnN0X3RpbWVzdGFtcCA9ICUiUFJJdTY0 IiBjdHhfaWQ9JSJQUkl1MzIiXG4iLAo+ICsJCQkJCSAgYXZlcmFnZV90aW1lc3RhbXBfZGVsdGEs IGRlbHRhX2RlbHRhLCBleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEsIGZpcnN0X3RpbWVzdGFtcCwg Y29udGV4dF9pZCk7Cj4gKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IChuX3JlcG9ydHMgLSAxKTsg aSsrKSB7Cj4gKwkJCQkJLyogWFhYOiBjYWxjdWxhdGluZyB3aXRoIHUzMiBhcml0aG1ldGljIHRv IGFjY291bnQgZm9yIG92ZXJmbG93ICovCj4gKwkJCQkJdWludDMyX3QgdTMyX2RlbHRhID0KPiAr CQkJCQkJcmVwb3J0c1tpICsgMV0ucmVwb3J0WzFdIC0gcmVwb3J0c1tpXS5yZXBvcnRbMV07Cj4g Kwo+ICsJCQkJCWlmICh1MzJfZGVsdGEgPiBleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEpCj4gKwkJ CQkJCWRlbHRhX2RlbHRhICA9IHUzMl9kZWx0YSAtIGV4cGVjdGVkX3RpbWVzdGFtcF9kZWx0YTsK PiArCQkJCQllbHNlCj4gKwkJCQkJCWRlbHRhX2RlbHRhID0gZXhwZWN0ZWRfdGltZXN0YW1wX2Rl bHRhIC0gdTMyX2RlbHRhOwo+ICsJCQkJCWVycm9yID0gKGRlbHRhX2RlbHRhIC8gKGRvdWJsZSll eHBlY3RlZF90aW1lc3RhbXBfZGVsdGEpICogMTAwLjA7Cj4gKwo+ICsJCQkJCWlndF9kZWJ1Zygi ID4gdHM9JXUtJXUgdGltZXN0YW1wIGRlbHRhIGZyb20gJTJkIHRvICUyZCA9ICUtOHUgKGVycm9y ID0gJXUlJSwgY3R4X2lkID0gJXgpXG4iLAo+ICsJCQkJCQkgIHJlcG9ydHNbaSArIDFdLnJlcG9y dFsxXSwgcmVwb3J0c1tpXS5yZXBvcnRbMV0sCj4gKwkJCQkJCSAgaSwgaSArIDEsIHUzMl9kZWx0 YSwgKHVuc2lnbmVkKWVycm9yLAo+ICsJCQkJCQkgIG9hX3JlcG9ydF9nZXRfY3R4X2lkKHJlcG9y dHNbaSArIDFdLnJlcG9ydCkpOwo+ICsJCQkJfQo+ICsJCQkJZm9yIChpbnQgciA9IDA7IHIgPCBu X3JlYWRzOyByKyspIHsKPiArCQkJCQlpZ3RfZGVidWcoIiA+IHJlYWRcbiIpOwo+ICsJCQkJCWZv ciAoaW50IG9mZnNldCA9IDA7Cj4gKwkJCQkJICAgICBvZmZzZXQgPCByZWFkc1tyXS5sZW47Cj4g KwkJCQkJICAgICBvZmZzZXQgKz0gaGVhZGVyLT5zaXplKSB7Cj4gKwkJCQkJCWludCBjb3VudGVy X3ByaW50ID0gMTM7CldoeSBjb3VudGVyIEExMywgd2hhdCdzIHRoZSBzaWduaWZpY2FuY2U/IFBl cmhhcHMgd2UgbmVlZCBhIGNvbW1lbnQuLi4KCj4gKwkJCQkJCXVpbnQ2NF90IGEwID0gMCwgYU4g PSAwOwo+ICsJCQkJCQlkb3VibGUgbG9jYWxfcGVyaW9kID0gMDsKPiArCj4gKwkJCQkJCWhlYWRl ciA9ICh2b2lkICopICZyZWFkc1tyXS5idWZbb2Zmc2V0XTsKPiArCj4gKwkJCQkJCWlmIChoZWFk ZXItPnR5cGUgIT0gRFJNX0k5MTVfUEVSRl9SRUNPUkRfU0FNUExFKSB7Cj4gKwkJCQkJCQlpZ3Rf ZGVidWcoIiA+IGxvc3NcbiIpOwo+ICsJCQkJCQkJY29udGludWU7Cj4gKwkJCQkJCX0KPiArCj4g KwkJCQkJCXJwdCA9ICh2b2lkICopKGhlYWRlciArIDEpOwo+ICsKPiArCQkJCQkJaWYgKGxhc3Qp IHsKPiArCQkJCQkJCWEwID0gZ2VuOF9yZWFkXzQwYml0X2FfY291bnRlcihycHQsIHRlc3Rfb2Ff Zm9ybWF0LCAwKSAtCj4gKwkJCQkJCQkJZ2VuOF9yZWFkXzQwYml0X2FfY291bnRlcihsYXN0LCB0 ZXN0X29hX2Zvcm1hdCwgMCk7Cj4gKwkJCQkJCQlhTiA9IGdlbjhfcmVhZF80MGJpdF9hX2NvdW50 ZXIocnB0LCB0ZXN0X29hX2Zvcm1hdCwgY291bnRlcl9wcmludCkgLQo+ICsJCQkJCQkJCWdlbjhf cmVhZF80MGJpdF9hX2NvdW50ZXIobGFzdCwgdGVzdF9vYV9mb3JtYXQsIGNvdW50ZXJfcHJpbnQp Owo+ICsJCQkJCQl9Cj4gKwo+ICsJCQkJCQlpZiAobGFzdF9wZXJpb2RpYyAmJgo+ICsJCQkJCQkg ICAgb2FfcmVwb3J0X2lzX3BlcmlvZGljKGV4cG9uZW50LCBycHQpKSB7Cj4gKwkJCQkJCQlsb2Nh bF9wZXJpb2QgPQo+ICsJCQkJCQkJCSgodWludDY0X3QpIHJwdFszXSAtIGxhc3RfcGVyaW9kaWNb M10pICAvCj4gKwkJCQkJCQkJKCh1aW50NjRfdCkgcnB0WzFdIC0gbGFzdF9wZXJpb2RpY1sxXSk7 CkhtbSBJIHRob3VnaHQgdGhlICdHUFUgQ2xvY2sgVGlja3MnIHdhcyBvbmx5IHByZXNlbnQgb24g Z2VuOCsgcmVwb3J0cywgc2luY2UKdGhpcyBpcyBhbHNvIHJ1biBvbiBoYXN3ZWxsIGFyZSB3ZSBu b3QgcmVhZGluZyBhIGNvdW50ZXIgaGVyZT8gRG8gd2UgbmVlZCB0byB1c2UKdGhlIG9hX3JlcG9y dHNfdGlja19wZXJfcGVyaW9kKCkgaGVscGVyPyBTb21lIG90aGVyIHRlc3RzIGFsc28gbG9vayBz dXNwZWN0LCBvcgphbSBJIG1pc3Npbmcgc29tZXRoaW5nPwoKQW55d2F5IHNlZW1zIHRvIHBhc3Mg bm93IG9uIG15IGJkdyA6KQoKPiArCQkJCQkJfQo+ICsKPiArCQkJCQkJaWd0X2RlYnVnKCIgPiBy ZXBvcnQgdHM9JXUiCj4gKwkJCQkJCQkgICIgdHNfZGVsdGFfbGFzdD0lOHUgdHNfZGVsdGFfbGFz dF9wZXJpb2RpYz0lOHUgaXNfdGltZXI9JWkgY3R4X2lkPSU4eCBncHVfdGlja3M9JXUgcGVyaW9k PSUuMmYgQTA9JWx1IEElaT0lbHVcbiIsCj4gKwkJCQkJCQkgIHJwdFsxXSwKPiArCQkJCQkJCSAg KGxhc3QgIT0gTlVMTCkgPyAocnB0WzFdIC0gbGFzdFsxXSkgOiAwLAo+ICsJCQkJCQkJICAobGFz dF9wZXJpb2RpYyAhPSBOVUxMKSA/IChycHRbMV0gLSBsYXN0X3BlcmlvZGljWzFdKSA6IDAsCj4g KwkJCQkJCQkgIG9hX3JlcG9ydF9pc19wZXJpb2RpYyhleHBvbmVudCwgcnB0KSwKPiArCQkJCQkJ CSAgb2FfcmVwb3J0X2dldF9jdHhfaWQocnB0KSwKPiArCQkJCQkJCSAgKGxhc3QgIT0gTlVMTCkg PyAocnB0WzNdIC0gbGFzdFszXSkgOiAwLAo+ICsJCQkJCQkJICBsb2NhbF9wZXJpb2QsCj4gKwkJ CQkJCQkgIGEwLCBjb3VudGVyX3ByaW50LCBhTik7Cj4gKwo+ICsJCQkJCQlsYXN0ID0gcnB0Owo+ ICsJCQkJCQlpZiAob2FfcmVwb3J0X2lzX3BlcmlvZGljKGV4cG9uZW50LCBycHQpKQo+ICsJCQkJ CQkJbGFzdF9wZXJpb2RpYyA9IHJwdDsKPiArCQkJCQl9Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJaWd0 X2Fzc2VydCghInJlYWNoZWQiKTsKPiArCQkJfQo+ICsKPiArCQkJaWYgKHRpbWVzdGFtcF9kZWx0 YV93aXRoaW4oYXZlcmFnZV90aW1lc3RhbXBfZGVsdGEsCj4gKwkJCQkJCSAgIGV4cGVjdGVkX3Rp bWVzdGFtcF9kZWx0YSwKPiArCQkJCQkJICAgZXhwZWN0ZWRfdGltZXN0YW1wX2RlbHRhICogMC4w NSkpIHsKPiArCQkJCWlndF9kZWJ1ZygiID4gdGltZXN0YW1wIGRlbHRhIG1hdGNoaW5nICUiUFJJ dTY0Im5zIH49IGV4cGVjdGVkICUiUFJJdTY0IiEgOilcbiIsCj4gKwkJCQkJICB0aW1lYmFzZV9z Y2FsZShhdmVyYWdlX3RpbWVzdGFtcF9kZWx0YSksCj4gKwkJCQkJICB0aW1lYmFzZV9zY2FsZShl eHBlY3RlZF90aW1lc3RhbXBfZGVsdGEpKTsKPiArCQkJCW5fdGltZV9kZWx0YV9tYXRjaGVzKys7 Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZ3RfZGVidWcoIiA+IHRpbWVzdGFtcCBkZWx0YSBtaXNt YXRjaDogJSJQUkl1NjQibnMgIT0gZXhwZWN0ZWQgJSJQUkl1NjQibnNcbiIsCj4gKwkJCQkJICB0 aW1lYmFzZV9zY2FsZShhdmVyYWdlX3RpbWVzdGFtcF9kZWx0YSksCj4gKwkJCQkJICB0aW1lYmFz ZV9zY2FsZShleHBlY3RlZF90aW1lc3RhbXBfZGVsdGEpKTsKPiArCQkJCWlndF9hc3NlcnQoYXZl cmFnZV90aW1lc3RhbXBfZGVsdGEgPAo+ICsJCQkJCSAgIChleHBlY3RlZF90aW1lc3RhbXBfZGVs dGEgKiAyKSk7Cj4gKwkJCX0KPiAgCj4gIAkJCW5fdGVzdGVkKys7Cj4gKwo+ICsJCQlmb3IgKGlu dCByID0gMDsgciA8IG5fcmVhZHM7IHIrKykKPiArCQkJCWZyZWUocmVhZHNbcl0uYnVmKTsKPiAg CQl9Cj4gIAo+ICAJCWlmIChuX3Rlc3RlZCA8IDEwKQo+IC0JCQlpZ3RfZGVidWcoInN5c2ZzIGZy ZXF1ZW5jeSBwaW5uaW5nIHRvbyB1bnN0YWJsZSBmb3IgY3Jvc3MtcmVmZXJlbmNpbmcgd2l0aCBP QSBkZXJpdmVkIGZyZXF1ZW5jeSIpOwo+ICsJCQlpZ3RfZGVidWcoIlRvbyBtYW55IHRlc3QgaXRl cmF0aW9ucyBoYWQgdG8gYmUgc2tpcHBlZFxuIik7Cj4gIAkJaWd0X2Fzc2VydF9lcShuX3Rlc3Rl ZCwgMTApOwo+ICsKPiArCQlpZ3RfZGVidWcoIk51bWJlciBvZiBpdGVyYXRpb25zIHdpdGggZXhw ZWN0ZWQgdGltZXN0YW1wIGRlbHRhID0gJWRcbiIsCj4gKwkJCSAgbl90aW1lX2RlbHRhX21hdGNo ZXMpOwo+ICsKPiArCQkvKiBUaGUgSFcgZG9lc24ndCBnaXZlIHVzIGFueSBzdHJpY3QgZ3VhcmFu dGVlIHRoYXQgdGhlCj4gKwkJICogdGltZXN0YW1wcyBhcmUgZXhhY3RseSBhbGlnbmVkIHdpdGgg dGhlIGV4cG9uZW50IG1hc2sgYnV0Cj4gKwkJICogaW4gcHJhY3RpY2UgaXQgc2VlbXMgdmVyeSBy YXJlIGZvciB0aGF0IG5vdCB0byBiZSB0aGUgY2FzZQo+ICsJCSAqIHNvIGl0IGEgdXNlZnVsIHNh bml0eSBjaGVjayB0byBhc3NlcnQgcXVpdGUgc3RyaWN0bHkuLi4KPiArCQkgKi8KPiArCQlpZ3Rf YXNzZXJ0KG5fdGltZV9kZWx0YV9tYXRjaGVzID49IDkpOwo+ICAJfQo+ICsKPiArCWxvYWRfaGVs cGVyX3N0b3AoKTsKPiArCWxvYWRfaGVscGVyX2ZpbmkoKTsKPiAgfQo+ICAKPiAgLyogVGhlIE9B IGV4cG9uZW50IHNlbGVjdHMgYSB0aW1lc3RhbXAgY291bnRlciBiaXQgdG8gdHJpZ2dlciByZXBv cnRzIG9uLgo+IEBAIC0yNDg1LDMyICszMDA5LDYgQEAgdGVzdF9kaXNhYmxlZF9yZWFkX2Vycm9y KHZvaWQpCj4gIAlfX3BlcmZfY2xvc2Uoc3RyZWFtX2ZkKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZv aWQKPiAtZW1pdF9yZXBvcnRfcGVyZl9jb3VudChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAo+IC0JCSAgICAgICBkcm1faW50ZWxfYm8gKmRzdF9ibywKPiAtCQkgICAgICAgaW50IGRz dF9vZmZzZXQsCj4gLQkJICAgICAgIHVpbnQzMl90IHJlcG9ydF9pZCkKPiAtewo+IC0JaWYgKElT X0hBU1dFTEwoZGV2aWQpKSB7Cj4gLQkJQkVHSU5fQkFUQ0goMywgMSk7Cj4gLQkJT1VUX0JBVENI KEdFTjZfTUlfUkVQT1JUX1BFUkZfQ09VTlQpOwo+IC0JCU9VVF9SRUxPQyhkc3RfYm8sIEk5MTVf R0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAo+IC0J CQkgIGRzdF9vZmZzZXQpOwo+IC0JCU9VVF9CQVRDSChyZXBvcnRfaWQpOwo+IC0JCUFEVkFOQ0Vf QkFUQ0goKTsKPiAtCX0gZWxzZSB7Cj4gLQkJLyogWFhYOiBOQjogbiBkd29yZHMgYXJnIGlzIGFj dHVhbGx5IG1hZ2ljIHNpbmNlIGl0IGludGVybmFsbHkKPiAtCQkgKiBhdXRvbWF0aWNhbGx5IGFj Y291bnRzIGZvciBsYXJnZXIgYWRkcmVzc2VzIG9uIGdlbiA+PSA4Li4uCj4gLQkJICovCj4gLQkJ QkVHSU5fQkFUQ0goMywgMSk7Cj4gLQkJT1VUX0JBVENIKEdFTjhfTUlfUkVQT1JUX1BFUkZfQ09V TlQpOwo+IC0JCU9VVF9SRUxPQyhkc3RfYm8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwg STkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAo+IC0JCQkgIGRzdF9vZmZzZXQpOwo+IC0JCU9V VF9CQVRDSChyZXBvcnRfaWQpOwo+IC0JCUFEVkFOQ0VfQkFUQ0goKTsKPiAtCX0KPiAtfQo+IC0K PiAgc3RhdGljIHZvaWQKPiAgdGVzdF9taV9ycGModm9pZCkKPiAgewo+IEBAIC0yNTgwLDM4ICsz MDc4LDYgQEAgdGVzdF9taV9ycGModm9pZCkKPiAgCV9fcGVyZl9jbG9zZShzdHJlYW1fZmQpOwo+ ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZAo+IC1zY3JhdGNoX2J1Zl9tZW1zZXQoZHJtX2ludGVsX2Jv ICpibywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCB1aW50MzJfdCBjb2xvcikKPiAtewo+IC0JaW50 IHJldDsKPiAtCj4gLQlyZXQgPSBkcm1faW50ZWxfYm9fbWFwKGJvLCB0cnVlIC8qIHdyaXRhYmxl ICovKTsKPiAtCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiAtCj4gLQlmb3IgKGludCBpID0gMDsg aSA8IHdpZHRoICogaGVpZ2h0OyBpKyspCj4gLQkJKCh1aW50MzJfdCAqKWJvLT52aXJ0dWFsKVtp XSA9IGNvbG9yOwo+IC0KPiAtCWRybV9pbnRlbF9ib191bm1hcChibyk7Cj4gLX0KPiAtCj4gLXN0 YXRpYyB2b2lkCj4gLXNjcmF0Y2hfYnVmX2luaXQoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAo+ IC0JCSBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAo+IC0JCSBpbnQgd2lkdGgsIGludCBoZWlnaHQsCj4g LQkJIHVpbnQzMl90IGNvbG9yKQo+IC17Cj4gLQlzaXplX3Qgc3RyaWRlID0gd2lkdGggKiA0Owo+ IC0Jc2l6ZV90IHNpemUgPSBzdHJpZGUgKiBoZWlnaHQ7Cj4gLQlkcm1faW50ZWxfYm8gKmJvID0g ZHJtX2ludGVsX2JvX2FsbG9jKGJ1Zm1nciwgIiIsIHNpemUsIDQwOTYpOwo+IC0KPiAtCXNjcmF0 Y2hfYnVmX21lbXNldChibywgd2lkdGgsIGhlaWdodCwgY29sb3IpOwo+IC0KPiAtCWJ1Zi0+Ym8g PSBibzsKPiAtCWJ1Zi0+c3RyaWRlID0gc3RyaWRlOwo+IC0JYnVmLT50aWxpbmcgPSBJOTE1X1RJ TElOR19OT05FOwo+IC0JYnVmLT5zaXplID0gc2l6ZTsKPiAtfQo+IC0KPiAgc3RhdGljIHZvaWQK PiAgZW1pdF9zdGFsbF90aW1lc3RhbXBfYW5kX3JwYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAo+ICAJCQkgICAgIGRybV9pbnRlbF9ibyAqZHN0LAo+IC0tIAo+IDIuMTQuMQo+IAo+ IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gSW50ZWwt Z2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKPiBodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeApfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFp bGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5m cmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK