From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v10] lib: Add a simple prime number generator Date: Tue, 27 Dec 2016 12:31:42 +0100 Message-ID: <20161227113142.GG19172@dvetter-linux.ger.corp.intel.com> References: <20161222083641.2691-5-chris@chris-wilson.co.uk> <20161222144514.3911-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 01AAF8997E for ; Tue, 27 Dec 2016 11:31:47 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id m203so56781137wma.3 for ; Tue, 27 Dec 2016 03:31:46 -0800 (PST) Content-Disposition: inline In-Reply-To: <20161222144514.3911-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBEZWMgMjIsIDIwMTYgYXQgMDI6NDU6MTRQTSArMDAwMCwgQ2hyaXMgV2lsc29uIHdy b3RlOgo+IFByaW1lIG51bWJlcnMgYXJlIGludGVyZXN0aW5nIGZvciB0ZXN0aW5nIGNvbXBvbmVu dHMgdGhhdCB1c2UgbXVsdGlwbGllcwo+IGFuZCBkaXZpZGVzLCBzdWNoIGFzIHRlc3RpbmcgRFJN J3Mgc3RydWN0IGRybV9tbSBhbGlnbm1lbnQgY29tcHV0YXRpb25zLgo+IAo+IHYyOiBNb3ZlIHRv IGxpYi8sIGFkZCBzZWxmdGVzdAo+IHYzOiBGaXggaW5pdGlhbCBjb25zdGFudHMgKGV4Y2x1ZGUg MC8xIGZyb20gYmVpbmcgcHJpbWVzKQo+IHY0OiBNb3JlIFJDVSBtYXJrdXAgdG8ga2VlcCAwZGF5 L3NwYXJzZSBoYXBweQo+IHY1OiBGaXggUkNVIHVud2luZCBvbiBtb2R1bGUgZXhpdCwgYWRkIHRv IGtzZWxmdGVzdHMKPiB2NjogVGlkeSBjb21wdXRhdGlvbiBvZiBiaXRtYXAgc2l6ZQo+IHY3OiBm b3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbSgpCj4gdjg6IENvbXBvc2Ugc21hbGwtcHJpbWVzIHVz aW5nIEJJVCgpIGZvciBlYXNpZXIgdmVyaWZpY2F0aW9uCj4gdjk6IE1vdmUgcmN1IGRhbmNlIGVu dGlyZWx5IGludG8gY2FsbGVycy4KPiB2MTA6IEltcHJvdmUgcXVvdGUgZm9yIEJldHJhbmQncyBQ b3N0dWxhdGUgKGFrYSBDaGVieXNoZXYncyB0aGVvcmVtKQo+IAo+IFNpZ25lZC1vZmYtYnk6IENo cmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBMdWthcyBXdW5uZXIg PGx1a2FzQHd1bm5lci5kZT4KPiBSZXZpZXdlZC1ieTogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMu bGFodGluZW5AbGludXguaW50ZWwuY29tPgo+IC0tLQo+ICBpbmNsdWRlL2xpbnV4L3ByaW1lX251 bWJlcnMuaCAgICAgICAgICAgICAgICB8ICAzNyArKysrCj4gIGxpYi9LY29uZmlnICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA3ICsKPiAgbGliL01ha2VmaWxlICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+ICBsaWIvcHJpbWVfbnVtYmVycy5jICAg ICAgICAgICAgICAgICAgICAgICAgICB8IDMxNCArKysrKysrKysrKysrKysrKysrKysrKysrKysK PiAgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbGliL3ByaW1lX251bWJlcnMuc2ggfCAgMTUgKysK CllvdSB0eXBlZCBhbGwgdGhhdCBuaWNlIGtlcm5lbC1kb2MsIGJ1dCBubyBzdGFuemEgaW4gYW55 IC5yc3QgdG8gcHVsbCBpdAppbi4gQ2FuIHlvdSBwbHMgZml4IHRoYXQgdXAgaW4gYSBmb2xsb3ct dXAsIGNjOiBsaW51eC1kb2NAdmdlcj8KLURhbmllbAoKPiAgNSBmaWxlcyBjaGFuZ2VkLCAzNzUg aW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9wcmltZV9u dW1iZXJzLmgKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9wcmltZV9udW1iZXJzLmMKPiAgY3Jl YXRlIG1vZGUgMTAwNzU1IHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi9wcmltZV9udW1iZXJz LnNoCj4gCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHJpbWVfbnVtYmVycy5oIGIvaW5j bHVkZS9saW51eC9wcmltZV9udW1iZXJzLmgKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4 IDAwMDAwMDAwMDAwMC4uMTRlYzRmNTY3MzQyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2luY2x1 ZGUvbGludXgvcHJpbWVfbnVtYmVycy5oCj4gQEAgLTAsMCArMSwzNyBAQAo+ICsjaWZuZGVmIF9f TElOVVhfUFJJTUVfTlVNQkVSU19ICj4gKyNkZWZpbmUgX19MSU5VWF9QUklNRV9OVU1CRVJTX0gK PiArCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsKPiArYm9vbCBpc19wcmltZV9udW1i ZXIodW5zaWduZWQgbG9uZyB4KTsKPiArdW5zaWduZWQgbG9uZyBuZXh0X3ByaW1lX251bWJlcih1 bnNpZ25lZCBsb25nIHgpOwo+ICsKPiArLyoqCj4gKyAqIGZvcl9lYWNoX3ByaW1lX251bWJlciAt IGl0ZXJhdGUgb3ZlciBlYWNoIHByaW1lIHVwdG8gYSB2YWx1ZQo+ICsgKiBAcHJpbWU6IHRoZSBj dXJyZW50IHByaW1lIG51bWJlciBpbiB0aGlzIGl0ZXJhdGlvbgo+ICsgKiBAbWF4OiB0aGUgdXBw ZXIgbGltaXQKPiArICoKPiArICogU3RhcnRpbmcgZnJvbSB0aGUgZmlyc3QgcHJpbWUgbnVtYmVy IDIgaXRlcmF0ZSBvdmVyIGVhY2ggcHJpbWUgbnVtYmVyIHVwIHRvCj4gKyAqIHRoZSBAbWF4IHZh bHVlLiBPbiBlYWNoIGl0ZXJhdGlvbiwgQHByaW1lIGlzIHNldCB0byB0aGUgY3VycmVudCBwcmlt ZSBudW1iZXIuCj4gKyAqIEBtYXggc2hvdWxkIGJlIGxlc3MgdGhhbiBVTE9OR19NQVggdG8gZW5z dXJlIHRlcm1pbmF0aW9uLiBUbyBiZWdpbiB3aXRoCj4gKyAqIEBwcmltZSBzZXQgdG8gMSBvbiB0 aGUgZmlyc3QgaXRlcmF0aW9uIHVzZSBmb3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbSgpCj4gKyAq IGluc3RlYWQuCj4gKyAqLwo+ICsjZGVmaW5lIGZvcl9lYWNoX3ByaW1lX251bWJlcihwcmltZSwg bWF4KSBcCj4gKwlmb3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbSgocHJpbWUpLCAyLCAobWF4KSkK PiArCj4gKy8qKgo+ICsgKiBmb3JfZWFjaF9wcmltZV9udW1iZXJfZnJvbSAtIGl0ZXJhdGUgb3Zl ciBlYWNoIHByaW1lIHVwdG8gYSB2YWx1ZQo+ICsgKiBAcHJpbWU6IHRoZSBjdXJyZW50IHByaW1l IG51bWJlciBpbiB0aGlzIGl0ZXJhdGlvbgo+ICsgKiBAZnJvbTogdGhlIGluaXRpYWwgdmFsdWUK PiArICogQG1heDogdGhlIHVwcGVyIGxpbWl0Cj4gKyAqCj4gKyAqIFN0YXJ0aW5nIGZyb20gQGZy b20gaXRlcmF0ZSBvdmVyIGVhY2ggc3VjY2Vzc2l2ZSBwcmltZSBudW1iZXIgdXAgdG8gdGhlCj4g KyAqIEBtYXggdmFsdWUuIE9uIGVhY2ggaXRlcmF0aW9uLCBAcHJpbWUgaXMgc2V0IHRvIHRoZSBj dXJyZW50IHByaW1lIG51bWJlci4KPiArICogQG1heCBzaG91bGQgYmUgbGVzcyB0aGFuIFVMT05H X01BWCwgYW5kIEBmcm9tIGxlc3MgdGhhbiBAbWF4LCB0byBlbnN1cmUKPiArICogdGVybWluYXRp b24uCj4gKyAqLwo+ICsjZGVmaW5lIGZvcl9lYWNoX3ByaW1lX251bWJlcl9mcm9tKHByaW1lLCBm cm9tLCBtYXgpIFwKPiArCWZvciAocHJpbWUgPSAoZnJvbSk7IHByaW1lIDw9IChtYXgpOyBwcmlt ZSA9IG5leHRfcHJpbWVfbnVtYmVyKHByaW1lKSkKPiArCj4gKyNlbmRpZiAvKiAhX19MSU5VWF9Q UklNRV9OVU1CRVJTX0ggKi8KPiBkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcgYi9saWIvS2NvbmZp Zwo+IGluZGV4IDI2MGE4MGUzMTNiOS4uMTc4OGExZjUwZDI4IDEwMDY0NAo+IC0tLSBhL2xpYi9L Y29uZmlnCj4gKysrIGIvbGliL0tjb25maWcKPiBAQCAtNTUwLDQgKzU1MCwxMSBAQCBjb25maWcg U1RBQ0tERVBPVAo+ICBjb25maWcgU0JJVE1BUAo+ICAJYm9vbAo+ICAKPiArY29uZmlnIFBSSU1F X05VTUJFUlMKPiArCXRyaXN0YXRlICJQcmltZSBudW1iZXIgZ2VuZXJhdG9yIgo+ICsJZGVmYXVs dCBuCj4gKwloZWxwCj4gKwkgIFByb3ZpZGVzIGEgaGVscGVyIG1vZHVsZSB0byBnZW5lcmF0ZSBw cmltZSBudW1iZXJzLiBVc2VmdWwgZm9yIHdyaXRpbmcKPiArCSAgdGVzdCBjb2RlLCBlc3BlY2lh bGx5IHdoZW4gY2hlY2tpbmcgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzb24uCj4gKwo+ICBlbmRt ZW51Cj4gZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQo+IGluZGV4IDUw MTQ0YTNhZWViZC4uYzY2NDE0M2ZkOTE3IDEwMDY0NAo+IC0tLSBhL2xpYi9NYWtlZmlsZQo+ICsr KyBiL2xpYi9NYWtlZmlsZQo+IEBAIC0xOTcsNiArMTk3LDggQEAgb2JqLSQoQ09ORklHX0FTTjEp ICs9IGFzbjFfZGVjb2Rlci5vCj4gIAo+ICBvYmotJChDT05GSUdfRk9OVF9TVVBQT1JUKSArPSBm b250cy8KPiAgCj4gK29iai0kKENPTkZJR19QUklNRV9OVU1CRVJTKSArPSBwcmltZV9udW1iZXJz Lm8KPiArCj4gIGhvc3Rwcm9ncy15CTo9IGdlbl9jcmMzMnRhYmxlCj4gIGNsZWFuLWZpbGVzCTo9 IGNyYzMydGFibGUuaAo+ICAKPiBkaWZmIC0tZ2l0IGEvbGliL3ByaW1lX251bWJlcnMuYyBiL2xp Yi9wcmltZV9udW1iZXJzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAw MDAwMC4uYzliM2MyOTYxNGFhCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2xpYi9wcmltZV9udW1i ZXJzLmMKPiBAQCAtMCwwICsxLDMxNCBAQAo+ICsjZGVmaW5lIHByX2ZtdChmbXQpICJwcmltZSBu dW1iZXJzOiAiIGZtdCAiXG4iCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5jbHVkZSA8bGludXgvcHJpbWVfbnVtYmVycy5o Pgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsKPiArI2RlZmluZSBiaXRtYXBfc2l6ZShu Yml0cykgKEJJVFNfVE9fTE9OR1MobmJpdHMpICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQo+ICsK PiArc3RydWN0IHByaW1lcyB7Cj4gKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1Owo+ICsJdW5zaWduZWQg bG9uZyBsYXN0LCBzejsKPiArCXVuc2lnbmVkIGxvbmcgcHJpbWVzW107Cj4gK307Cj4gKwo+ICsj aWYgQklUU19QRVJfTE9ORyA9PSA2NAo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IHByaW1lcyBzbWFs bF9wcmltZXMgPSB7Cj4gKwkubGFzdCA9IDYxLAo+ICsJLnN6ID0gNjQsCj4gKwkucHJpbWVzID0g ewo+ICsJCUJJVCgyKSB8Cj4gKwkJQklUKDMpIHwKPiArCQlCSVQoNSkgfAo+ICsJCUJJVCg3KSB8 Cj4gKwkJQklUKDExKSB8Cj4gKwkJQklUKDEzKSB8Cj4gKwkJQklUKDE3KSB8Cj4gKwkJQklUKDE5 KSB8Cj4gKwkJQklUKDIzKSB8Cj4gKwkJQklUKDI5KSB8Cj4gKwkJQklUKDMxKSB8Cj4gKwkJQklU KDM3KSB8Cj4gKwkJQklUKDQxKSB8Cj4gKwkJQklUKDQzKSB8Cj4gKwkJQklUKDQ3KSB8Cj4gKwkJ QklUKDUzKSB8Cj4gKwkJQklUKDU5KSB8Cj4gKwkJQklUKDYxKQo+ICsJfQo+ICt9Owo+ICsjZWxp ZiBCSVRTX1BFUl9MT05HID09IDMyCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJpbWVzIHNtYWxs X3ByaW1lcyA9IHsKPiArCS5sYXN0ID0gMzEsCj4gKwkuc3ogPSAzMiwKPiArCS5wcmltZXMgPSB7 Cj4gKwkJQklUKDIpIHwKPiArCQlCSVQoMykgfAo+ICsJCUJJVCg1KSB8Cj4gKwkJQklUKDcpIHwK PiArCQlCSVQoMTEpIHwKPiArCQlCSVQoMTMpIHwKPiArCQlCSVQoMTcpIHwKPiArCQlCSVQoMTkp IHwKPiArCQlCSVQoMjMpIHwKPiArCQlCSVQoMjkpIHwKPiArCQlCSVQoMzEpCj4gKwl9Cj4gK307 Cj4gKyNlbHNlCj4gKyNlcnJvciAidW5oYW5kbGVkIEJJVFNfUEVSX0xPTkciCj4gKyNlbmRpZgo+ ICsKPiArc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBw cmltZXMgX19yY3UgKnByaW1lcyA9IFJDVV9JTklUSUFMSVpFUigmc21hbGxfcHJpbWVzKTsKPiAr Cj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNlbGZ0ZXN0X21heDsKPiArCj4gK3N0YXRpYyBib29s IHNsb3dfaXNfcHJpbWVfbnVtYmVyKHVuc2lnbmVkIGxvbmcgeCkKPiArewo+ICsJdW5zaWduZWQg bG9uZyB5ID0gaW50X3NxcnQoeCk7Cj4gKwo+ICsJd2hpbGUgKHkgPiAxKSB7Cj4gKwkJaWYgKCh4 ICUgeSkgPT0gMCkKPiArCQkJYnJlYWs7Cj4gKwkJeS0tOwo+ICsJfQo+ICsKPiArCXJldHVybiB5 ID09IDE7Cj4gK30KPiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNsb3dfbmV4dF9wcmltZV9u dW1iZXIodW5zaWduZWQgbG9uZyB4KQo+ICt7Cj4gKwl3aGlsZSAoeCA8IFVMT05HX01BWCAmJiAh c2xvd19pc19wcmltZV9udW1iZXIoKyt4KSkKPiArCQk7Cj4gKwo+ICsJcmV0dXJuIHg7Cj4gK30K PiArCj4gK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsZWFyX211bHRpcGxlcyh1bnNpZ25lZCBsb25n IHgsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKnAsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGxv bmcgc3RhcnQsCj4gKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQo+ICt7Cj4gKwl1bnNpZ25l ZCBsb25nIG07Cj4gKwo+ICsJbSA9IDIgKiB4Owo+ICsJaWYgKG0gPCBzdGFydCkKPiArCQltID0g cm91bmR1cChzdGFydCwgeCk7Cj4gKwo+ICsJd2hpbGUgKG0gPCBlbmQpIHsKPiArCQlfX2NsZWFy X2JpdChtLCBwKTsKPiArCQltICs9IHg7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHg7Cj4gK30KPiAr Cj4gK3N0YXRpYyBib29sIGV4cGFuZF90b19uZXh0X3ByaW1lKHVuc2lnbmVkIGxvbmcgeCkKPiAr ewo+ICsJY29uc3Qgc3RydWN0IHByaW1lcyAqcDsKPiArCXN0cnVjdCBwcmltZXMgKm5ldzsKPiAr CXVuc2lnbmVkIGxvbmcgc3osIHk7Cj4gKwo+ICsJLyogQmV0cmFuZCdzIFBvc3R1bGF0ZSAob3Ig Q2hlYnlzaGV2J3MgdGhlb3JlbSkgc3RhdGVzIHRoYXQgaWYgbiA+IDMsCj4gKwkgKiB0aGVyZSBp cyBhbHdheXMgYXQgbGVhc3Qgb25lIHByaW1lIHAgYmV0d2VlbiBuIGFuZCAybiAtIDIuCj4gKwkg KiBFcXVpdmFsZW50bHksIGlmIG4gPiAxLCB0aGVuIHRoZXJlIGlzIGFsd2F5cyBhdCBsZWFzdCBv bmUgcHJpbWUgcAo+ICsJICogc3VjaCB0aGF0IG4gPCBwIDwgMm4uCj4gKwkgKgo+ICsJICogaHR0 cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9CZXJ0cmFuZHNQb3N0dWxhdGUuaHRtbAo+ICsJICog aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQmVydHJhbmQnc19wb3N0dWxhdGUKPiArCSAq Lwo+ICsJc3ogPSAyICogeDsKPiArCWlmIChzeiA8IHgpCj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsK PiArCXN6ID0gcm91bmRfdXAoc3osIEJJVFNfUEVSX0xPTkcpOwo+ICsJbmV3ID0ga21hbGxvYyhz aXplb2YoKm5ldykgKyBiaXRtYXBfc2l6ZShzeiksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFuZXcp Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCW11dGV4X2xvY2soJmxvY2spOwo+ICsJcCA9IHJj dV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQocHJpbWVzLCBsb2NrZGVwX2lzX2hlbGQoJmxvY2spKTsK PiArCWlmICh4IDwgcC0+bGFzdCkgewo+ICsJCWtmcmVlKG5ldyk7Cj4gKwkJZ290byB1bmxvY2s7 Cj4gKwl9Cj4gKwo+ICsJLyogV2hlcmUgbWVtb3J5IHBlcm1pdHMsIHRyYWNrIHRoZSBwcmltZXMg dXNpbmcgdGhlCj4gKwkgKiBTaWV2ZSBvZiBFcmF0b3N0aGVuZXMuIFRoZSBzaWV2ZSBpcyB0byBy ZW1vdmUgYWxsIG11bHRpcGxlcyBvZiBrbm93bgo+ICsJICogcHJpbWVzIGZyb20gdGhlIHNldCwg d2hhdCByZW1haW5zIGluIHRoZSBzZXQgaXMgdGhlcmVmb3JlIHByaW1lLgo+ICsJICovCj4gKwli aXRtYXBfZmlsbChuZXctPnByaW1lcywgc3opOwo+ICsJYml0bWFwX2NvcHkobmV3LT5wcmltZXMs IHAtPnByaW1lcywgcC0+c3opOwo+ICsJZm9yICh5ID0gMlVMOyB5IDwgc3o7IHkgPSBmaW5kX25l eHRfYml0KG5ldy0+cHJpbWVzLCBzeiwgeSArIDEpKQo+ICsJCW5ldy0+bGFzdCA9IGNsZWFyX211 bHRpcGxlcyh5LCBuZXctPnByaW1lcywgcC0+c3osIHN6KTsKPiArCW5ldy0+c3ogPSBzejsKPiAr Cj4gKwlCVUdfT04obmV3LT5sYXN0IDw9IHgpOwo+ICsKPiArCXJjdV9hc3NpZ25fcG9pbnRlcihw cmltZXMsIG5ldyk7Cj4gKwlpZiAocCAhPSAmc21hbGxfcHJpbWVzKQo+ICsJCWtmcmVlX3JjdSgo c3RydWN0IHByaW1lcyAqKXAsIHJjdSk7Cj4gKwo+ICt1bmxvY2s6Cj4gKwltdXRleF91bmxvY2so JmxvY2spOwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGZyZWVfcHJp bWVzKHZvaWQpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBwcmltZXMgKnA7Cj4gKwo+ICsJbXV0ZXhf bG9jaygmbG9jayk7Cj4gKwlwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChwcmltZXMsIGxv Y2tkZXBfaXNfaGVsZCgmbG9jaykpOwo+ICsJaWYgKHAgIT0gJnNtYWxsX3ByaW1lcykgewo+ICsJ CXJjdV9hc3NpZ25fcG9pbnRlcihwcmltZXMsICZzbWFsbF9wcmltZXMpOwo+ICsJCWtmcmVlX3Jj dSgoc3RydWN0IHByaW1lcyAqKXAsIHJjdSk7Cj4gKwl9Cj4gKwltdXRleF91bmxvY2soJmxvY2sp Owo+ICt9Cj4gKwo+ICsvKioKPiArICogbmV4dF9wcmltZV9udW1iZXIgLSByZXR1cm4gdGhlIG5l eHQgcHJpbWUgbnVtYmVyCj4gKyAqIEB4OiB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHNlYXJjaGlu ZyB0byB0ZXN0Cj4gKyAqCj4gKyAqIEEgcHJpbWUgbnVtYmVyIGlzIGFuIGludGVnZXIgZ3JlYXRl ciB0aGFuIDEgdGhhdCBpcyBvbmx5IGRpdmlzaWJsZSBieQo+ICsgKiBpdHNlbGYgYW5kIDEuICBU aGUgc2V0IG9mIHByaW1lIG51bWJlcnMgaXMgY29tcHV0ZWQgdXNpbmcgdGhlIFNpZXZlIG9mCj4g KyAqIEVyYXRvc2hlbmVzIChvbiBmaW5kaW5nIGEgcHJpbWUsIGFsbCBtdWx0aXBsZXMgb2YgdGhh dCBwcmltZSBhcmUgcmVtb3ZlZAo+ICsgKiBmcm9tIHRoZSBzZXQpIGVuYWJsaW5nIGEgZmFzdCBs b29rdXAgb2YgdGhlIG5leHQgcHJpbWUgbnVtYmVyIGxhcmdlciB0aGFuCj4gKyAqIEB4LiBJZiB0 aGUgc2lldmUgZmFpbHMgKG1lbW9yeSBsaW1pdGF0aW9uKSwgdGhlIHNlYXJjaCBmYWxscyBiYWNr IHRvIHVzaW5nCj4gKyAqIHNsb3cgdHJpYWwtZGl2aXNvbiwgdXAgdG8gdGhlIHZhbHVlIG9mIFVM T05HX01BWCAod2hpY2ggaXMgcmVwb3J0ZWQgYXMgdGhlCj4gKyAqIGZpbmFsIHByaW1lIGFzIGEg c2VudGluZWwpLgo+ICsgKgo+ICsgKiBSZXR1cm5zOiB0aGUgbmV4dCBwcmltZSBudW1iZXIgbGFy Z2VyIHRoYW4gQHgKPiArICovCj4gK3Vuc2lnbmVkIGxvbmcgbmV4dF9wcmltZV9udW1iZXIodW5z aWduZWQgbG9uZyB4KQo+ICt7Cj4gKwljb25zdCBzdHJ1Y3QgcHJpbWVzICpwOwo+ICsKPiArCXJj dV9yZWFkX2xvY2soKTsKPiArCXAgPSByY3VfZGVyZWZlcmVuY2UocHJpbWVzKTsKPiArCXdoaWxl ICh4ID49IHAtPmxhc3QpIHsKPiArCQlyY3VfcmVhZF91bmxvY2soKTsKPiArCj4gKwkJaWYgKCFl eHBhbmRfdG9fbmV4dF9wcmltZSh4KSkKPiArCQkJcmV0dXJuIHNsb3dfbmV4dF9wcmltZV9udW1i ZXIoeCk7Cj4gKwo+ICsJCXJjdV9yZWFkX2xvY2soKTsKPiArCQlwID0gcmN1X2RlcmVmZXJlbmNl KHByaW1lcyk7Cj4gKwl9Cj4gKwl4ID0gZmluZF9uZXh0X2JpdChwLT5wcmltZXMsIHAtPmxhc3Qs IHggKyAxKTsKPiArCXJjdV9yZWFkX3VubG9jaygpOwo+ICsKPiArCXJldHVybiB4Owo+ICt9Cj4g K0VYUE9SVF9TWU1CT0wobmV4dF9wcmltZV9udW1iZXIpOwo+ICsKPiArLyoqCj4gKyAqIGlzX3By aW1lX251bWJlciAtIHRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gbnVtYmVyIGlzIHByaW1lCj4gKyAq IEB4OiB0aGUgbnVtYmVyIHRvIHRlc3QKPiArICoKPiArICogQSBwcmltZSBudW1iZXIgaXMgYW4g aW50ZWdlciBncmVhdGVyIHRoYW4gMSB0aGF0IGlzIG9ubHkgZGl2aXNpYmxlIGJ5Cj4gKyAqIGl0 c2VsZiBhbmQgMS4gSW50ZXJuYWxseSBhIGNhY2hlIG9mIHByaW1lIG51bWJlcnMgaXMga2VwdCAo dG8gc3BlZWQgdXAKPiArICogc2VhcmNoaW5nIGZvciBzZXF1ZW50aWFsIHByaW1lcywgc2VlIG5l eHRfcHJpbWVfbnVtYmVyKCkpLCBidXQgaWYgdGhlIG51bWJlcgo+ICsgKiBmYWxscyBvdXRzaWRl IG9mIHRoYXQgY2FjaGUsIGl0cyBwcmltYWxpdHkgaXMgdGVzdGVkIHVzaW5nIHRyaWFsLWRpdmlz b24uCj4gKyAqCj4gKyAqIFJldHVybnM6IHRydWUgaWYgQHggaXMgcHJpbWUsIGZhbHNlIGZvciBj b21wb3NpdGUgbnVtYmVycy4KPiArICovCj4gK2Jvb2wgaXNfcHJpbWVfbnVtYmVyKHVuc2lnbmVk IGxvbmcgeCkKPiArewo+ICsJY29uc3Qgc3RydWN0IHByaW1lcyAqcDsKPiArCWJvb2wgcmVzdWx0 Owo+ICsKPiArCXJjdV9yZWFkX2xvY2soKTsKPiArCXAgPSByY3VfZGVyZWZlcmVuY2UocHJpbWVz KTsKPiArCXdoaWxlICh4ID49IHAtPnN6KSB7Cj4gKwkJcmN1X3JlYWRfdW5sb2NrKCk7Cj4gKwo+ ICsJCWlmICghZXhwYW5kX3RvX25leHRfcHJpbWUoeCkpCj4gKwkJCXJldHVybiBzbG93X2lzX3By aW1lX251bWJlcih4KTsKPiArCj4gKwkJcmN1X3JlYWRfbG9jaygpOwo+ICsJCXAgPSByY3VfZGVy ZWZlcmVuY2UocHJpbWVzKTsKPiArCX0KPiArCXJlc3VsdCA9IHRlc3RfYml0KHgsIHAtPnByaW1l cyk7Cj4gKwlyY3VfcmVhZF91bmxvY2soKTsKPiArCj4gKwlyZXR1cm4gcmVzdWx0Owo+ICt9Cj4g K0VYUE9SVF9TWU1CT0woaXNfcHJpbWVfbnVtYmVyKTsKPiArCj4gK3N0YXRpYyB2b2lkIGR1bXBf cHJpbWVzKHZvaWQpCj4gK3sKPiArCWNvbnN0IHN0cnVjdCBwcmltZXMgKnA7Cj4gKwljaGFyICpi dWY7Cj4gKwo+ICsJYnVmID0ga21hbGxvYyhQQUdFX1NJWkUsIEdGUF9LRVJORUwpOwo+ICsKPiAr CXJjdV9yZWFkX2xvY2soKTsKPiArCXAgPSByY3VfZGVyZWZlcmVuY2UocHJpbWVzKTsKPiArCj4g KwlpZiAoYnVmKQo+ICsJCWJpdG1hcF9wcmludF90b19wYWdlYnVmKHRydWUsIGJ1ZiwgcC0+cHJp bWVzLCBwLT5zeik7Cj4gKwlwcl9pbmZvKCJwcmltZXMue2xhc3Q9JWx1LCAuc3o9JWx1LCAucHJp bWVzW109Li4ueCVseH0gPSAlcyIsCj4gKwkJcC0+bGFzdCwgcC0+c3osIHAtPnByaW1lc1tCSVRT X1RPX0xPTkdTKHAtPnN6KSAtIDFdLCBidWYpOwo+ICsKPiArCXJjdV9yZWFkX3VubG9jaygpOwo+ ICsKPiArCWtmcmVlKGJ1Zik7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2VsZnRlc3QodW5zaWdu ZWQgbG9uZyBtYXgpCj4gK3sKPiArCXVuc2lnbmVkIGxvbmcgeCwgbGFzdDsKPiArCj4gKwlpZiAo IW1heCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlmb3IgKGxhc3QgPSAwLCB4ID0gMjsgeCA8IG1h eDsgeCsrKSB7Cj4gKwkJYm9vbCBzbG93ID0gc2xvd19pc19wcmltZV9udW1iZXIoeCk7Cj4gKwkJ Ym9vbCBmYXN0ID0gaXNfcHJpbWVfbnVtYmVyKHgpOwo+ICsKPiArCQlpZiAoc2xvdyAhPSBmYXN0 KSB7Cj4gKwkJCXByX2VycigiaW5jb25zaXN0ZW50IHJlc3VsdCBmb3IgaXMtcHJpbWUoJWx1KTog c2xvdz0lcywgZmFzdD0lcyEiLAo+ICsJCQkgICAgICAgeCwgc2xvdyA/ICJ5ZXMiIDogIm5vIiwg ZmFzdCA/ICJ5ZXMiIDogIm5vIik7Cj4gKwkJCWdvdG8gZXJyOwo+ICsJCX0KPiArCj4gKwkJaWYg KCFzbG93KQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKG5leHRfcHJpbWVfbnVtYmVyKGxh c3QpICE9IHgpIHsKPiArCQkJcHJfZXJyKCJpbmNvcnJlY3QgcmVzdWx0IGZvciBuZXh0LXByaW1l KCVsdSk6IGV4cGVjdGVkICVsdSwgZ290ICVsdSIsCj4gKwkJCSAgICAgICBsYXN0LCB4LCBuZXh0 X3ByaW1lX251bWJlcihsYXN0KSk7Cj4gKwkJCWdvdG8gZXJyOwo+ICsJCX0KPiArCQlsYXN0ID0g eDsKPiArCX0KPiArCj4gKwlwcl9pbmZvKCJzZWxmdGVzdCglbHUpIHBhc3NlZCwgbGFzdCBwcmlt ZSB3YXMgJWx1IiwgeCwgbGFzdCk7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2VycjoKPiArCWR1bXBf cHJpbWVzKCk7Cj4gKwlyZXR1cm4gLUVJTlZBTDsKPiArfQo+ICsKPiArc3RhdGljIGludCBfX2lu aXQgcHJpbWVzX2luaXQodm9pZCkKPiArewo+ICsJcmV0dXJuIHNlbGZ0ZXN0KHNlbGZ0ZXN0X21h eCk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIF9fZXhpdCBwcmltZXNfZXhpdCh2b2lkKQo+ICt7 Cj4gKwlmcmVlX3ByaW1lcygpOwo+ICt9Cj4gKwo+ICttb2R1bGVfaW5pdChwcmltZXNfaW5pdCk7 Cj4gK21vZHVsZV9leGl0KHByaW1lc19leGl0KTsKPiArCj4gK21vZHVsZV9wYXJhbV9uYW1lZChz ZWxmdGVzdCwgc2VsZnRlc3RfbWF4LCB1bG9uZywgMDQwMCk7Cj4gKwo+ICtNT0RVTEVfQVVUSE9S KCJJbnRlbCBDb3Jwb3JhdGlvbiIpOwo+ICtNT0RVTEVfTElDRU5TRSgiR1BMIik7Cj4gZGlmZiAt LWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi9wcmltZV9udW1iZXJzLnNoIGIvdG9v bHMvdGVzdGluZy9zZWxmdGVzdHMvbGliL3ByaW1lX251bWJlcnMuc2gKPiBuZXcgZmlsZSBtb2Rl IDEwMDc1NQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZGE0Y2JjZDc2NmY1Cj4gLS0tIC9kZXYvbnVs bAo+ICsrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2xpYi9wcmltZV9udW1iZXJzLnNoCj4g QEAgLTAsMCArMSwxNSBAQAo+ICsjIS9iaW4vc2gKPiArIyBDaGVja3MgZmFzdC9zbG93IHByaW1l X251bWJlciBnZW5lcmF0aW9uIGZvciBpbmNvbnNpc3RlbmNpZXMKPiArCj4gK2lmICEgL3NiaW4v bW9kcHJvYmUgLXEgLXIgcHJpbWVfbnVtYmVyczsgdGhlbgo+ICsJZWNobyAicHJpbWVfbnVtYmVy czogW1NLSVBdIgo+ICsJZXhpdCA3Nwo+ICtmaQo+ICsKPiAraWYgL3NiaW4vbW9kcHJvYmUgLXEg cHJpbWVfbnVtYmVycyBzZWxmdGVzdD02NTUzNjsgdGhlbgo+ICsJL3NiaW4vbW9kcHJvYmUgLXEg LXIgcHJpbWVfbnVtYmVycwo+ICsJZWNobyAicHJpbWVfbnVtYmVyczogb2siCj4gK2Vsc2UKPiAr CWVjaG8gInByaW1lX251bWJlcnM6IFtGQUlMXSIKPiArCWV4aXQgMQo+ICtmaQo+IC0tIAo+IDIu MTEuMAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAoKLS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0 aW9uCmh0dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo=