From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Mika Kuoppala In-Reply-To: <20200128081221.3508833-1-chris@chris-wilson.co.uk> References: <20200128081221.3508833-1-chris@chris-wilson.co.uk> Date: Wed, 29 Jan 2020 16:21:17 +0200 Message-ID: <878slq9wde.fsf@gaia.fi.intel.com> MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t] i915: Drop prefault controls List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-ID: Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gVGhleSBo YXZlbid0IGJlZW4gZWZmZWN0aXZlIGZvciBhIGxvbmcgdGltZTsgc28gZHJvcCB0aGVtLgo+Cj4g U2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+CgpB Y2tlZC1ieTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+Cgo+ IC0tLQo+ICBiZW5jaG1hcmtzL2dlbV9leGVjX3JlbG9jLmMgICAgICAgICAgfCAgMTkgKy0KPiAg bGliL2lndF9kZWJ1Z2ZzLmMgICAgICAgICAgICAgICAgICAgIHwgIDU5IC0tLS0KPiAgbGliL2ln dF9kZWJ1Z2ZzLmggICAgICAgICAgICAgICAgICAgIHwgICA3IC0KPiAgdGVzdHMvTWFrZWZpbGUu c291cmNlcyAgICAgICAgICAgICAgIHwgICA2IC0KPiAgdGVzdHMvaTkxNS9nZW1fZXhlY19mYXVs dGluZ19yZWxvYy5jIHwgICA1IC0KPiAgdGVzdHMvaTkxNS9nZW1fZXhlY19sdXRfaGFuZGxlLmMg ICAgIHwgIDI0ICstCj4gIHRlc3RzL2k5MTUvZ2VtX21tYXBfZ3R0LmMgICAgICAgICAgICB8ICAx NSAtCj4gIHRlc3RzL2k5MTUvZ2VtX3BlcnNpc3RlbnRfcmVsb2NzLmMgICB8ICAyNCArLQo+ICB0 ZXN0cy9pOTE1L2dlbV9yZWxvY19vdmVyZmxvdy5jICAgICAgfCA0MzYgLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gIHRlc3RzL2k5MTUvZ2VtX3JlbG9jX3ZzX2dwdS5jICAgICAgICB8IDM1 MiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgdGVzdHMvbWVzb24uYnVpbGQgICAgICAgICAgICAg ICAgICAgIHwgICAyIC0KPiAgMTEgZmlsZXMgY2hhbmdlZCwgMTAgaW5zZXJ0aW9ucygrKSwgOTM5 IGRlbGV0aW9ucygtKQo+ICBkZWxldGUgbW9kZSAxMDA2NDQgdGVzdHMvaTkxNS9nZW1fcmVsb2Nf b3ZlcmZsb3cuYwo+ICBkZWxldGUgbW9kZSAxMDA2NDQgdGVzdHMvaTkxNS9nZW1fcmVsb2NfdnNf Z3B1LmMKPgo+IGRpZmYgLS1naXQgYS9iZW5jaG1hcmtzL2dlbV9leGVjX3JlbG9jLmMgYi9iZW5j aG1hcmtzL2dlbV9leGVjX3JlbG9jLmMKPiBpbmRleCBjNzM0NjQzYzcuLjBhMjQ1NGNiOSAxMDA2 NDQKPiAtLS0gYS9iZW5jaG1hcmtzL2dlbV9leGVjX3JlbG9jLmMKPiArKysgYi9iZW5jaG1hcmtz L2dlbV9leGVjX3JlbG9jLmMKPiBAQCAtNDgsNyArNDgsNiBAQAo+ICAjZGVmaW5lIFNLSVBfUkVM T0MgMHgxCj4gICNkZWZpbmUgTk9fUkVMT0MgMHgyCj4gICNkZWZpbmUgQ1lDTEVfQkFUQ0ggMHg0 Cj4gLSNkZWZpbmUgRkFVTFQgMHg4Cj4gICNkZWZpbmUgTFVUIDB4MTAKPiAgI2RlZmluZSBTRVFV RU5USUFMX09GRlNFVCAweDIwCj4gICNkZWZpbmUgUkVWRVJTRV9PRkZTRVQgMHg0MAo+IEBAIC0x MjEsMTEgKzEyMCw3IEBAIHN0YXRpYyBpbnQgcnVuKHVuc2lnbmVkIGJhdGNoX3NpemUsCj4gIAkJ bWVtY3B5KHJlbG9jLCBtZW1fcmVsb2MsIHNpemVvZigqbWVtX3JlbG9jKSpudW1fcmVsb2NzKTsK PiAgCQltdW5tYXAocmVsb2MsIHNpemUpOwo+ICAKPiAtCQlpZiAoZmxhZ3MgJiBGQVVMVCkgewo+ IC0JCQlpZ3RfZGlzYWJsZV9wcmVmYXVsdCgpOwo+IC0JCQlyZWxvYyA9IF9fZ2VtX21tYXBfX2Nw dShmZCwgcmVsb2NfaGFuZGxlLCAwLCBzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsKPiAt CQl9IGVsc2UKPiAtCQkJcmVsb2MgPSBtZW1fcmVsb2M7Cj4gKwkJcmVsb2MgPSBtZW1fcmVsb2M7 Cj4gIAl9Cj4gIAo+ICAJZ2VtX2V4ZWNbbnVtX29iamVjdHNdLnJlbG9jYXRpb25fY291bnQgPSBu dW1fcmVsb2NzOwo+IEBAIC0xNjIsMjIgKzE1NywxMiBAQCBzdGF0aWMgaW50IHJ1bih1bnNpZ25l ZCBiYXRjaF9zaXplLAo+ICAJCQkJCWdlbV9leGVjW251bV9vYmplY3RzXS5oYW5kbGUgPSBjeWNs ZVtjXTsKPiAgCQkJCX0KPiAgCQkJfQo+IC0JCQlpZiAoZmxhZ3MgJiBGQVVMVCAmJiByZWxvYykg ewo+IC0JCQkJbXVubWFwKHJlbG9jLCBzaXplKTsKPiAtCQkJCXJlbG9jID0gX19nZW1fbW1hcF9f Y3B1KGZkLCByZWxvY19oYW5kbGUsIDAsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpOwo+ IC0JCQkJZ2VtX2V4ZWNbbnVtX29iamVjdHNdLnJlbG9jc19wdHIgPSAodWludHB0cl90KXJlbG9j Owo+IC0JCQl9Cj4gIAkJCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4gIAkJfQo+ICAJCWdl dHRpbWVvZmRheSgmZW5kLCBOVUxMKTsKPiAgCQlwcmludGYoIiUuM2ZcbiIsIEVMQVBTRUQoJnN0 YXJ0LCAmZW5kKSk7Cj4gIAl9Cj4gIAo+IC0JaWYgKGZsYWdzICYgRkFVTFQgJiYgcmVsb2MpIHsK PiAtCQltdW5tYXAocmVsb2MsIHNpemUpOwo+IC0JCWlndF9lbmFibGVfcHJlZmF1bHQoKTsKPiAt CX0KPiAtCj4gIAlyZXR1cm4gMDsKPiAgfQo+ICAKPiBAQCAtMjA4LDggKzE5Myw2IEBAIGludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikKPiAgCQkJCWZsYWdzIHw9IDA7Cj4gIAkJCX0gZWxz ZSBpZiAoc3RyY21wKG9wdGFyZywgImN5Y2xpYyIpID09IDApIHsKPiAgCQkJCWZsYWdzIHw9IENZ Q0xFX0JBVENIOwo+IC0JCQl9IGVsc2UgaWYgKHN0cmNtcChvcHRhcmcsICJmYXVsdCIpID09IDAp IHsKPiAtCQkJCWZsYWdzIHw9IEZBVUxUOwo+ICAJCQl9IGVsc2UgaWYgKHN0cmNtcChvcHRhcmcs ICJza2lwIikgPT0gMCkgewo+ICAJCQkJZmxhZ3MgfD0gU0tJUF9SRUxPQzsKPiAgCQkJfSBlbHNl IGlmIChzdHJjbXAob3B0YXJnLCAibm9uZSIpID09IDApIHsKPiBkaWZmIC0tZ2l0IGEvbGliL2ln dF9kZWJ1Z2ZzLmMgYi9saWIvaWd0X2RlYnVnZnMuYwo+IGluZGV4IDY3Njg4NGM4NS4uOGNhYzlk MWUxIDEwMDY0NAo+IC0tLSBhL2xpYi9pZ3RfZGVidWdmcy5jCj4gKysrIGIvbGliL2lndF9kZWJ1 Z2ZzLmMKPiBAQCAtNzcsOSArNzcsNiBAQAo+ICAgKgo+ICAgKiAtIGRybS9pOTE1IHN1cHBvcnRz IGludGVyZmFjZXMgdG8gZXZpY3QgY2VydGFpbiBjbGFzc2VzIG9mIGdlbSBidWZmZXIKPiAgICog ICBvYmplY3RzLCBzZWUgaWd0X2Ryb3BfY2FjaGVzX3NldCgpLgo+IC0gKgo+IC0gKiAtIGRybS9p OTE1IHN1cHBvcnRzIGFuIGludGVyZmFjZSB0byBkaXNhYmxlIHByZWZhdWx0aW5nLCB1c2VmdWwg dG8gdGVzdAo+IC0gKiAgIHNsb3cgcGF0aHMgaW4gaW9jdGxzLiBTZWUgaWd0X2Rpc2FibGVfcHJl ZmF1bHQoKS4KPiAgICovCj4gIAo+ICAvKgo+IEBAIC0xMDYxLDYyICsxMDU4LDYgQEAgdm9pZCBp Z3RfZHJvcF9jYWNoZXNfc2V0KGludCBkcm1fZmQsIHVpbnQ2NF90IHZhbCkKPiAgCWNsb3NlKGRp cik7Cj4gIH0KPiAgCj4gLS8qCj4gLSAqIFByZWZhdWx0IGNvbnRyb2wKPiAtICovCj4gLQo+IC0j ZGVmaW5lIFBSRUZBVUxUX0RFQlVHRlMgIi9zeXMvbW9kdWxlL2k5MTUvcGFyYW1ldGVycy9wcmVm YXVsdF9kaXNhYmxlIgo+IC1zdGF0aWMgdm9pZCBpZ3RfcHJlZmF1bHRfY29udHJvbChib29sIGVu YWJsZSkKPiAtewo+IC0JY29uc3QgY2hhciAqbmFtZSA9IFBSRUZBVUxUX0RFQlVHRlM7Cj4gLQlp bnQgZmQ7Cj4gLQljaGFyIGJ1ZlsyXSA9IHsnWScsICdOJ307Cj4gLQlpbnQgaW5kZXg7Cj4gLQo+ IC0JZmQgPSBvcGVuKG5hbWUsIE9fUkRXUik7Cj4gLQlpZ3RfcmVxdWlyZShmZCA+PSAwKTsKPiAt Cj4gLQlpZiAoZW5hYmxlKQo+IC0JCWluZGV4ID0gMTsKPiAtCWVsc2UKPiAtCQlpbmRleCA9IDA7 Cj4gLQo+IC0JaWd0X3JlcXVpcmUod3JpdGUoZmQsICZidWZbaW5kZXhdLCAxKSA9PSAxKTsKPiAt Cj4gLQljbG9zZShmZCk7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGVuYWJsZV9wcmVmYXVsdF9h dF9leGl0KGludCBzaWcpCj4gLXsKPiAtCWlndF9lbmFibGVfcHJlZmF1bHQoKTsKPiAtfQo+IC0K PiAtLyoqCj4gLSAqIGlndF9kaXNhYmxlX3ByZWZhdWx0Ogo+IC0gKgo+IC0gKiBEaXNhYmxlIHBy ZWZhdWx0aW5nIGluIGNlcnRhaW4gZ2VtIGlvY3RscyB0aHJvdWdoIHRoZSBkZWJ1Z2ZzIGludGVy ZmFjZS4gQXMKPiAtICogdXN1YWwgdGhpcyBpbnN0YWxscyBhbiBleGl0IGhhbmRsZXIgdG8gY2xl YW4gdXAgYW5kIHJlLWVuYWJsZSBwcmVmYXVsdGluZwo+IC0gKiBldmVuIHdoZW4gdGhlIHRlc3Qg ZXhpdGVkIGFibm9ybWFsbHkuCj4gLSAqCj4gLSAqIGlndF9lbmFibGVfcHJlZmF1bHQoKSB3aWxs IGVuYWJsZSBub3JtYWxlIG9wZXJhdGlvbiBhZ2Fpbi4KPiAtICovCj4gLXZvaWQgaWd0X2Rpc2Fi bGVfcHJlZmF1bHQodm9pZCkKPiAtewo+IC0JaWd0X3ByZWZhdWx0X2NvbnRyb2woZmFsc2UpOwo+ IC0KPiAtCWlndF9pbnN0YWxsX2V4aXRfaGFuZGxlcihlbmFibGVfcHJlZmF1bHRfYXRfZXhpdCk7 Cj4gLX0KPiAtCj4gLS8qKgo+IC0gKiBpZ3RfZW5hYmxlX3ByZWZhdWx0Ogo+IC0gKgo+IC0gKiBF bmFibGUgcHJlZmF1bHQgKGFnYWluKSB0aHJvdWdoIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZS4KPiAt ICovCj4gLXZvaWQgaWd0X2VuYWJsZV9wcmVmYXVsdCh2b2lkKQo+IC17Cj4gLQlpZ3RfcHJlZmF1 bHRfY29udHJvbCh0cnVlKTsKPiAtfQo+IC0KPiAgc3RhdGljIGludCBnZXRfb2JqZWN0X2NvdW50 KGludCBmZCkKPiAgewo+ICAJaW50IGRpciwgcmV0LCBzY2FubmVkOwo+IGRpZmYgLS1naXQgYS9s aWIvaWd0X2RlYnVnZnMuaCBiL2xpYi9pZ3RfZGVidWdmcy5oCj4gaW5kZXggNWYwY2U0OTJiLi4x ZTBjYzEwOGQgMTAwNjQ0Cj4gLS0tIGEvbGliL2lndF9kZWJ1Z2ZzLmgKPiArKysgYi9saWIvaWd0 X2RlYnVnZnMuaAo+IEBAIC0yMDIsMTMgKzIwMiw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByY3Vf YmFycmllcihpbnQgZmQpCj4gIAlpZ3RfZHJvcF9jYWNoZXNfc2V0KGZkLCBEUk9QX1JDVSk7Cj4g IH0KPiAgCj4gLS8qCj4gLSAqIFByZWZhdWx0IGNvbnRyb2wKPiAtICovCj4gLQo+IC12b2lkIGln dF9kaXNhYmxlX3ByZWZhdWx0KHZvaWQpOwo+IC12b2lkIGlndF9lbmFibGVfcHJlZmF1bHQodm9p ZCk7Cj4gLQo+ICAvKgo+ICAgKiBQdXQgdGhlIGRyaXZlciBpbnRvIGEgc3RhYmxlIChxdWllc2Nl bnQpIHN0YXRlIGFuZCBnZXQgdGhlIGN1cnJlbnQgbnVtYmVyIG9mCj4gICAqIGdlbSBidWZmZXIg b2JqZWN0cwo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFr ZWZpbGUuc291cmNlcwo+IGluZGV4IDdjNTY5MzQ1Ny4uZjIwYmUxMTM1IDEwMDY0NAo+IC0tLSBh L3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4g QEAgLTM2MywxMiArMzYzLDYgQEAgZ2VtX3JlYWR3cml0ZV9TT1VSQ0VTID0gaTkxNS9nZW1fcmVh ZHdyaXRlLmMKPiAgVEVTVFNfcHJvZ3MgKz0gZ2VtX3JlZ19yZWFkCj4gIGdlbV9yZWdfcmVhZF9T T1VSQ0VTID0gaTkxNS9nZW1fcmVnX3JlYWQuYwo+ICAKPiAtVEVTVFNfcHJvZ3MgKz0gZ2VtX3Jl bG9jX292ZXJmbG93Cj4gLWdlbV9yZWxvY19vdmVyZmxvd19TT1VSQ0VTID0gaTkxNS9nZW1fcmVs b2Nfb3ZlcmZsb3cuYwo+IC0KPiAtVEVTVFNfcHJvZ3MgKz0gZ2VtX3JlbG9jX3ZzX2dwdQo+IC1n ZW1fcmVsb2NfdnNfZ3B1X1NPVVJDRVMgPSBpOTE1L2dlbV9yZWxvY192c19ncHUuYwo+IC0KPiAg VEVTVFNfcHJvZ3MgKz0gZ2VtX3JlbmRlcl9jb3B5Cj4gIGdlbV9yZW5kZXJfY29weV9TT1VSQ0VT ID0gaTkxNS9nZW1fcmVuZGVyX2NvcHkuYwo+ICAKPiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9n ZW1fZXhlY19mYXVsdGluZ19yZWxvYy5jIGIvdGVzdHMvaTkxNS9nZW1fZXhlY19mYXVsdGluZ19y ZWxvYy5jCj4gaW5kZXggMGJiNWZhOTFhLi5jMmFlYTAzOTMgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMv aTkxNS9nZW1fZXhlY19mYXVsdGluZ19yZWxvYy5jCj4gKysrIGIvdGVzdHMvaTkxNS9nZW1fZXhl Y19mYXVsdGluZ19yZWxvYy5jCj4gQEAgLTI0Nyw5ICsyNDcsNCBAQCBpZ3RfbWFpbgo+ICB7Cj4g IAlpZ3Rfc3VidGVzdCgibm9ybWFsIikKPiAgCQlydW4oT0JKRUNUX1NJWkUpOwo+IC0JaWd0X3N1 YnRlc3QoIm5vLXByZWZhdWx0Iikgewo+IC0JCWlndF9kaXNhYmxlX3ByZWZhdWx0KCk7Cj4gLQkJ cnVuKE9CSkVDVF9TSVpFKTsKPiAtCQlpZ3RfZW5hYmxlX3ByZWZhdWx0KCk7Cj4gLQl9Cj4gIH0K PiBkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fZXhlY19sdXRfaGFuZGxlLmMgYi90ZXN0cy9p OTE1L2dlbV9leGVjX2x1dF9oYW5kbGUuYwo+IGluZGV4IGI3YjY5MTU3Mi4uNmYyMjc2MjhjIDEw MDY0NAo+IC0tLSBhL3Rlc3RzL2k5MTUvZ2VtX2V4ZWNfbHV0X2hhbmRsZS5jCj4gKysrIGIvdGVz dHMvaTkxNS9nZW1fZXhlY19sdXRfaGFuZGxlLmMKPiBAQCAtNTIsNyArNTIsNiBAQCBJR1RfVEVT VF9ERVNDUklQVElPTigiRXhlcmNpc2VzIHRoZSBiYXNpYyBleGVjYnVmZmVyIHVzaW5nIHRoZSBo YW5kbGUgTFVUIgo+ICAjZGVmaW5lIFNLSVBfUkVMT0MgMHgxCj4gICNkZWZpbmUgTk9fUkVMT0Mg MHgyCj4gICNkZWZpbmUgQ1lDTEVfQkFUQ0ggMHg0Cj4gLSNkZWZpbmUgRkFVTFQgMHg4Cj4gIAo+ ICBpbnQgdGFyZ2V0W01BWF9OVU1fUkVMT0NdOwo+ICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNf b2JqZWN0MiBnZW1fZXhlY1tNQVhfTlVNX0VYRUMrMV07Cj4gQEAgLTkyLDcgKzkxLDYgQEAgaWd0 X3NpbXBsZV9tYWluCj4gIAl9IHBhc3NbXSA9IHsKPiAgCQl7IC5uYW1lID0gInJlbG9jYXRpb24i LCAuZmxhZ3MgPSAwIH0sCj4gIAkJeyAubmFtZSA9ICJjeWNsZS1yZWxvY2F0aW9uIiwgLmZsYWdz ID0gQ1lDTEVfQkFUQ0ggfSwKPiAtCQl7IC5uYW1lID0gImZhdWx0LXJlbG9jYXRpb24iLCAuZmxh Z3MgPSBGQVVMVCB9LAo+ICAJCXsgLm5hbWUgPSAic2tpcC1yZWxvY3MiLCAuZmxhZ3MgPSBTS0lQ X1JFTE9DIH0sCj4gIAkJeyAubmFtZSA9ICJuby1yZWxvY3MiLCAuZmxhZ3MgPSBTS0lQX1JFTE9D IHwgTk9fUkVMT0MgfSwKPiAgCQl7IC5uYW1lID0gTlVMTCB9LAo+IEBAIC0xMzIsOCArMTMwLDYg QEAgaWd0X3NpbXBsZV9tYWluCj4gIAlpZ3RfcmVxdWlyZShoYXNfZXhlY19sdXQoZmQpKTsKPiAg Cj4gIAlmb3IgKHAgPSBwYXNzOyBwLT5uYW1lICE9IE5VTEw7IHArKykgewo+IC0JCWlmIChwLT5m bGFncyAmIEZBVUxUKQo+IC0JCQlpZ3RfZGlzYWJsZV9wcmVmYXVsdCgpOwo+ICAJCWZvciAobiA9 IDE7IG4gPD0gTUFYX05VTV9FWEVDOyBuICo9IDIpIHsKPiAgCQkJZG91YmxlIGVsYXBzZWRbMTZd WzJdOwo+ICAJCQlkb3VibGUgc194LCBzX3ksIHNfeHgsIHNfeHk7Cj4gQEAgLTE0NSwxMCArMTQx LDcgQEAgaWd0X3NpbXBsZV9tYWluCj4gIAkJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2Jq ZWN0MiAqb2JqZWN0czsKPiAgCQkJCXN0cnVjdCB0aW1ldmFsIHN0YXJ0LCBlbmQ7Cj4gIAo+IC0J CQkJaWYgKHAtPmZsYWdzICYgRkFVTFQpCj4gLQkJCQkJcmVsb2MgPSBfX2dlbV9tbWFwX19jcHUo ZmQsIHJlbG9jX2hhbmRsZSwgMCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gLQkJ CQllbHNlCj4gLQkJCQkJcmVsb2MgPSBtZW1fcmVsb2M7Cj4gKwkJCQlyZWxvYyA9IG1lbV9yZWxv YzsKPiAgCj4gIAkJCQlnZW1fZXhlY1tNQVhfTlVNX0VYRUNdLnJlbG9jYXRpb25fY291bnQgPSBt Owo+ICAJCQkJZ2VtX2V4ZWNbTUFYX05VTV9FWEVDXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2lu dGVyKHJlbG9jKTsKPiBAQCAtMTc4LDExICsxNzEsNiBAQCBpZ3Rfc2ltcGxlX21haW4KPiAgCQkJ CQkJCWdlbV9leGVjW01BWF9OVU1fRVhFQ10uaGFuZGxlID0gY3ljbGVbY107Cj4gIAkJCQkJCX0K PiAgCQkJCQl9Cj4gLQkJCQkJaWYgKHAtPmZsYWdzICYgRkFVTFQpIHsKPiAtCQkJCQkJbXVubWFw KHJlbG9jLCBzaXplKTsKPiAtCQkJCQkJcmVsb2MgPSBfX2dlbV9tbWFwX19jcHUoZmQsIHJlbG9j X2hhbmRsZSwgMCwgc2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7Cj4gLQkJCQkJCWdlbV9l eGVjW01BWF9OVU1fRVhFQ10ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihyZWxvYyk7Cj4g LQkJCQkJfQo+ICAJCQkJCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4gIAkJCQl9Cj4gIAkJ CQlnZXR0aW1lb2ZkYXkoJmVuZCwgTlVMTCk7Cj4gQEAgLTIwOCwxMSArMTk2LDYgQEAgaWd0X3Np bXBsZV9tYWluCj4gIAkJCQkJCQlnZW1fZXhlY1tNQVhfTlVNX0VYRUNdLmhhbmRsZSA9IGN5Y2xl W2NdOwo+ICAJCQkJCQl9Cj4gIAkJCQkJfQo+IC0JCQkJCWlmIChwLT5mbGFncyAmIEZBVUxUKSB7 Cj4gLQkJCQkJCW11bm1hcChyZWxvYywgc2l6ZSk7Cj4gLQkJCQkJCXJlbG9jID0gX19nZW1fbW1h cF9fY3B1KGZkLCByZWxvY19oYW5kbGUsIDAsIHNpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUp Owo+IC0JCQkJCQlnZW1fZXhlY1tNQVhfTlVNX0VYRUNdLnJlbG9jc19wdHIgPSB0b191c2VyX3Bv aW50ZXIocmVsb2MpOwo+IC0JCQkJCX0KPiAgCQkJCQlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYp Owo+ICAJCQkJfQo+ICAJCQkJZ2V0dGltZW9mZGF5KCZlbmQsIE5VTEwpOwo+IEBAIC0yMjIsOSAr MjA1LDYgQEAgaWd0X3NpbXBsZV9tYWluCj4gIAkJCQl3aGlsZSAoYyAhPSAwKTsKPiAgCQkJCWdl bV9leGVjW01BWF9OVU1fRVhFQ10uaGFuZGxlID0gY3ljbGVbY107Cj4gIAkJCQllbGFwc2VkW2ld WzBdID0gRUxBUFNFRCgmc3RhcnQsICZlbmQpOwo+IC0KPiAtCQkJCWlmIChwLT5mbGFncyAmIEZB VUxUKQo+IC0JCQkJCW11bm1hcChyZWxvYywgc2l6ZSk7Cj4gIAkJCX0KPiAgCj4gIAkJCWlndF9p bmZvKCIlczogYnVmZmVycz0lNGQ6IiwgcC0+bmFtZSwgbik7Cj4gQEAgLTI1NSw3ICsyMzUsNSBA QCBpZ3Rfc2ltcGxlX21haW4KPiAgCj4gIAkJCWlndF9pbmZvKCJcbiIpOwo+ICAJCX0KPiAtCQlp ZiAocC0+ZmxhZ3MgJiBGQVVMVCkKPiAtCQkJaWd0X2VuYWJsZV9wcmVmYXVsdCgpOwo+ICAJfQo+ ICB9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX21tYXBfZ3R0LmMgYi90ZXN0cy9pOTE1 L2dlbV9tbWFwX2d0dC5jCj4gaW5kZXggYWY4N2ViYzM4Li4xZjQ2NTVhZjQgMTAwNjQ0Cj4gLS0t IGEvdGVzdHMvaTkxNS9nZW1fbW1hcF9ndHQuYwo+ICsrKyBiL3Rlc3RzL2k5MTUvZ2VtX21tYXBf Z3R0LmMKPiBAQCAtMTAyMiwxNSArMTAyMiw2IEBAIHRlc3RfZmF1bHRfY29uY3VycmVudChpbnQg ZmQpCj4gIAkJbXVubWFwKHB0cltuXSwgKnB0cltuXSAqIHNpemVvZih1aW50MzJfdCkpOwo+ICB9 Cj4gIAo+IC1zdGF0aWMgdm9pZAo+IC1ydW5fd2l0aG91dF9wcmVmYXVsdChpbnQgZmQsCj4gLQkJ CXZvaWQgKCpmdW5jKShpbnQgZmQpKQo+IC17Cj4gLQlpZ3RfZGlzYWJsZV9wcmVmYXVsdCgpOwo+ IC0JZnVuYyhmZCk7Cj4gLQlpZ3RfZW5hYmxlX3ByZWZhdWx0KCk7Cj4gLX0KPiAtCj4gIHN0YXRp YyBpbnQgbW1hcF9pb2N0bChpbnQgaTkxNSwgc3RydWN0IGRybV9pOTE1X2dlbV9tbWFwX2d0dCAq YXJnKQo+ICB7Cj4gIAlpbnQgZXJyID0gMDsKPiBAQCAtMTEwOSwxMiArMTEwMCw2IEBAIGlndF9t YWluCj4gIAkJdGVzdF9yZWFkX3dyaXRlMihmZCwgUkVBRF9BRlRFUl9XUklURSk7Cj4gIAlpZ3Rf c3VidGVzdCgiZmF1bHQtY29uY3VycmVudCIpCj4gIAkJdGVzdF9mYXVsdF9jb25jdXJyZW50KGZk KTsKPiAtCWlndF9zdWJ0ZXN0KCJiYXNpYy1yZWFkLW5vLXByZWZhdWx0IikKPiAtCQlydW5fd2l0 aG91dF9wcmVmYXVsdChmZCwgdGVzdF9yZWFkKTsKPiAtCWlndF9zdWJ0ZXN0KCJiYXNpYy13cml0 ZS1uby1wcmVmYXVsdCIpCj4gLQkJcnVuX3dpdGhvdXRfcHJlZmF1bHQoZmQsIHRlc3Rfd3JpdGUp Owo+IC0JaWd0X3N1YnRlc3QoImJhc2ljLXdyaXRlLWd0dC1uby1wcmVmYXVsdCIpCj4gLQkJcnVu X3dpdGhvdXRfcHJlZmF1bHQoZmQsIHRlc3Rfd3JpdGVfZ3R0KTsKPiAgCWlndF9zdWJ0ZXN0KCJi YXNpYy13cml0ZS1jcHUtcmVhZC1ndHQiKQo+ICAJCXRlc3Rfd3JpdGVfY3B1X3JlYWRfZ3R0KGZk KTsKPiAgCWlndF9zdWJ0ZXN0KCJiYXNpYy13YyIpCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUv Z2VtX3BlcnNpc3RlbnRfcmVsb2NzLmMgYi90ZXN0cy9pOTE1L2dlbV9wZXJzaXN0ZW50X3JlbG9j cy5jCj4gaW5kZXggN2M4MzFhYWFmLi40NDJmNzY4ZTYgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvaTkx NS9nZW1fcGVyc2lzdGVudF9yZWxvY3MuYwo+ICsrKyBiL3Rlc3RzL2k5MTUvZ2VtX3BlcnNpc3Rl bnRfcmVsb2NzLmMKPiBAQCAtMTkyLDE2ICsxOTIsMTMgQEAgc3RhdGljIHZvaWQgZmF1bHRpbmdf cmVsb2NfYW5kX2VtaXQoaW50IGZkLCBkcm1faW50ZWxfYm8gKnRhcmdldF9ibywKPiAgCWdlbV9l eGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIGRvX3Rlc3QoaW50 IGZkLCBib29sIGZhdWx0aW5nX3JlbG9jKQo+ICtzdGF0aWMgdm9pZCBkb190ZXN0KGludCBmZCkK PiAgewo+ICAJdWludDMyX3QgdGlsaW5nX21vZGUgPSBJOTE1X1RJTElOR19YOwo+ICAJdW5zaWdu ZWQgbG9uZyBwaXRjaCwgYWN0X3NpemU7Cj4gIAl1aW50MzJfdCB0ZXN0Owo+ICAJaW50IGksIHJl cGVhdDsKPiAgCj4gLQlpZiAoZmF1bHRpbmdfcmVsb2MpCj4gLQkJaWd0X2Rpc2FibGVfcHJlZmF1 bHQoKTsKPiAtCj4gIAlhY3Rfc2l6ZSA9IDIwNDg7Cj4gIAlkdW1teV9ibyA9IGRybV9pbnRlbF9i b19hbGxvY190aWxlZChidWZtZ3IsICJ0aWxlZCBkdW1teV9ibyIsIGFjdF9zaXplLCBhY3Rfc2l6 ZSwKPiAgCQkJCSAgICAgIDQsICZ0aWxpbmdfbW9kZSwgJnBpdGNoLCAwKTsKPiBAQCAtMjY4LDE2 ICsyNjUsMTIgQEAgc3RhdGljIHZvaWQgZG9fdGVzdChpbnQgZmQsIGJvb2wgZmF1bHRpbmdfcmVs b2MpCj4gIAlkcm1faW50ZWxfZ2VtX2JvX3VubWFwX2d0dChkdW1teV9ibyk7Cj4gIAo+ICAJZHJt X2ludGVsX2JvX3VucmVmZXJlbmNlKGR1bW15X2JvKTsKPiAtCj4gLQlpZiAoZmF1bHRpbmdfcmVs b2MpCj4gLQkJaWd0X2VuYWJsZV9wcmVmYXVsdCgpOwo+ICB9Cj4gIAo+ICAjZGVmaW5lIElOVEVS UlVQVAkoMSA8PCAwKQo+IC0jZGVmaW5lIEZBVUxUSU5HCSgxIDw8IDEpCj4gLSNkZWZpbmUgVEhS QVNICQkoMSA8PCAyKQo+IC0jZGVmaW5lIFRIUkFTSF9JTkFDVElWRQkoMSA8PCAzKQo+IC0jZGVm aW5lIEFMTF9GTEFHUwkoSU5URVJSVVBUIHwgRkFVTFRJTkcgfCBUSFJBU0ggfCBUSFJBU0hfSU5B Q1RJVkUpCj4gKyNkZWZpbmUgVEhSQVNICQkoMSA8PCAxKQo+ICsjZGVmaW5lIFRIUkFTSF9JTkFD VElWRQkoMSA8PCAyKQo+ICsjZGVmaW5lIEFMTF9GTEFHUwkoSU5URVJSVVBUIHwgVEhSQVNIIHwg VEhSQVNIX0lOQUNUSVZFKQo+ICBzdGF0aWMgdm9pZCBkb19mb3JrZWRfdGVzdChpbnQgZmQsIHVu c2lnbmVkIGZsYWdzKQo+ICB7Cj4gIAlpbnQgbnVtX3RocmVhZHMgPSBzeXNjb25mKF9TQ19OUFJP Q0VTU09SU19PTkxOKTsKPiBAQCAtMzA2LDcgKzI5OSw3IEBAIHN0YXRpYyB2b2lkIGRvX2Zvcmtl ZF90ZXN0KGludCBmZCwgdW5zaWduZWQgZmxhZ3MpCj4gIAkJaWYgKGZsYWdzICYgSU5URVJSVVBU KQo+ICAJCQlpZ3RfZm9ya19zaWduYWxfaGVscGVyKCk7Cj4gIAo+IC0JCWRvX3Rlc3QoZmQsIGZs YWdzICYgRkFVTFRJTkcpOwo+ICsJCWRvX3Rlc3QoZmQpOwo+ICAKPiAgCQlpZiAoZmxhZ3MgJiBJ TlRFUlJVUFQpCj4gIAkJCWlndF9zdG9wX3NpZ25hbF9oZWxwZXIoKTsKPiBAQCAtMzM3LDIwICsz MzAsMTkgQEAgaWd0X21haW4KPiAgCX0KPiAgCj4gIAlpZ3Rfc3VidGVzdCgibm9ybWFsIikKPiAt CQlkb190ZXN0KGZkLCBmYWxzZSk7Cj4gKwkJZG9fdGVzdChmZCk7Cj4gIAo+ICAJaWd0X2Zvcmtf c2lnbmFsX2hlbHBlcigpOwo+ICAJaWd0X3N1YnRlc3QoImludGVycnVwdGlibGUiKQo+IC0JCWRv X3Rlc3QoZmQsIGZhbHNlKTsKPiArCQlkb190ZXN0KGZkKTsKPiAgCWlndF9zdG9wX3NpZ25hbF9o ZWxwZXIoKTsKPiAgCj4gIAlmb3IgKHVuc2lnbmVkIGZsYWdzID0gMDsgZmxhZ3MgPD0gQUxMX0ZM QUdTOyBmbGFncysrKSB7Cj4gIAkJaWYgKChmbGFncyAmIFRIUkFTSCkgJiYgKGZsYWdzICYgVEhS QVNIX0lOQUNUSVZFKSkKPiAgCQkJY29udGludWU7Cj4gIAo+IC0JCWlndF9zdWJ0ZXN0X2YoImZv cmtlZCVzJXMlcyVzIiwKPiArCQlpZ3Rfc3VidGVzdF9mKCJmb3JrZWQlcyVzJXMiLAo+ICAJCQkg ICAgICBmbGFncyAmIElOVEVSUlVQVCA/ICItaW50ZXJydXB0aWJsZSIgOiAiIiwKPiAtCQkJICAg ICAgZmxhZ3MgJiBGQVVMVElORyA/ICItZmF1bHRpbmctcmVsb2MiIDogIiIsCj4gIAkJCSAgICAg IGZsYWdzICYgVEhSQVNIID8gIi10aHJhc2hpbmciIDogIiIsCj4gIAkJCSAgICAgIGZsYWdzICYg VEhSQVNIX0lOQUNUSVZFID8gIi10aHJhc2gtaW5hY3RpdmUiIDogIiIpCj4gIAkJCWRvX2Zvcmtl ZF90ZXN0KGZkLCBmbGFncyk7Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2k5MTUvZ2VtX3JlbG9jX292 ZXJmbG93LmMgYi90ZXN0cy9pOTE1L2dlbV9yZWxvY19vdmVyZmxvdy5jCj4gZGVsZXRlZCBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggYzlkMWYyMDc1Li4wMDAwMDAwMDAKPiAtLS0gYS90ZXN0cy9p OTE1L2dlbV9yZWxvY19vdmVyZmxvdy5jCj4gKysrIC9kZXYvbnVsbAo+IEBAIC0xLDQzNiArMCww IEBACj4gLS8qCj4gLSAqIENvcHlyaWdodCAgMjAxMyBHb29nbGUKPiAtICogQ29weXJpZ2h0ICAy MDEzIEludGVsIENvcnBvcmF0aW9uCj4gLSAqCj4gLSAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdy YW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCj4gLSAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCj4gLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiAtICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsCj4gLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJt aXQgcGVyc29ucyB0byB3aG9tIHRoZQo+IC0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+IC0gKgo+IC0gKiBUaGUg YWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVk aW5nIHRoZSBuZXh0Cj4gLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiAtICogU29mdHdhcmUuCj4gLSAq Cj4gLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9U IExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAo+IC0gKiBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8g RVZFTlQgU0hBTEwKPiAtICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElB QkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiAtICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcK PiAtICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+IC0gKiBJTiBUSEUgU09GVFdBUkUuCj4gLSAqCj4g LSAqIEF1dGhvcnM6Cj4gLSAqICAgIEtlZXMgQ29vayA8a2Vlc2Nvb2tAY2hyb21pdW0ub3JnPgo+ IC0gKiAgICBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+IC0gKiAgICBS YWZhZWwgQmFyYmFsaG8gPHJhZmFlbC5iYXJiYWxob0BpbnRlbC5jb20+Cj4gLSAqCj4gLSAqLwo+ IC0KPiAtI2luY2x1ZGUgImlndC5oIgo+IC0jaW5jbHVkZSA8c3RkbGliLmg+Cj4gLSNpbmNsdWRl IDxzdGRpby5oPgo+IC0jaW5jbHVkZSA8c3RkaW50Lmg+Cj4gLSNpbmNsdWRlIDxzdHJpbmcuaD4K PiAtI2luY2x1ZGUgPGZjbnRsLmg+Cj4gLSNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+IC0jaW5jbHVk ZSA8ZXJybm8uaD4KPiAtI2luY2x1ZGUgPHVuaXN0ZC5oPgo+IC0jaW5jbHVkZSA8bWFsbG9jLmg+ Cj4gLSNpbmNsdWRlIDxsaW1pdHMuaD4KPiAtI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+IC0jaW5j bHVkZSA8c3lzL3N0YXQuaD4KPiAtI2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4gLSNpbmNsdWRlIDxz eXMvdHlwZXMuaD4KPiAtI2luY2x1ZGUgImRybS5oIgo+IC0KPiAtSUdUX1RFU1RfREVTQ1JJUFRJ T04oIkNoZWNrIHRoYXQga2VybmVsIHJlbG9jYXRpb24gb3ZlcmZsb3dzIGFyZSBjYXVnaHQuIik7 Cj4gLQo+IC0vKgo+IC0gKiBUZXN0Y2FzZTogS2VybmVsIHJlbG9jYXRpb24gb3ZlcmZsb3dzIGFy ZSBjYXVnaHQuCj4gLSAqLwo+IC0KPiAtaW50IGZkLCBlbnRyaWVzLCBudW07Cj4gLXN0cnVjdCBk cm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpvYmo7Cj4gLXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y2J1ZmZlcjIgZXhlY2J1ZjsKPiAtc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5 ICpyZWxvYzsKPiAtCj4gLXN0YXRpYyB1aW50MzJfdCB0YXJnZXRfaGFuZGxlKHZvaWQpCj4gLXsK PiAtCXJldHVybiBleGVjYnVmLmZsYWdzICYgSTkxNV9FWEVDX0hBTkRMRV9MVVQgPyAwIDogb2Jq WzBdLmhhbmRsZTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgc291cmNlX29mZnNldF90ZXN0cyhp bnQgZGV2aWQsIGJvb2wgcmVsb2NfZ3R0KQo+IC17Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl bG9jYXRpb25fZW50cnkgc2luZ2xlX3JlbG9jOwo+IC0JY29uc3QgY2hhciAqcmVsb2NhdGlvbl90 eXBlOwo+IC0KPiAtCWlmIChyZWxvY19ndHQpCj4gLQkJcmVsb2NhdGlvbl90eXBlID0gInJlbG9j LWd0dCI7Cj4gLQllbHNlCj4gLQkJcmVsb2NhdGlvbl90eXBlID0gInJlbG9jLWNwdSI7Cj4gLQo+ IC0JaWd0X2ZpeHR1cmUgewo+IC0JCW9ialsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMDsKPiAtCQlv YmpbMV0ucmVsb2NzX3B0ciA9IDA7Cj4gLQo+IC0JCW9ialswXS5yZWxvY2F0aW9uX2NvdW50ID0g MTsKPiAtCQlvYmpbMF0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcigmc2luZ2xlX3JlbG9j KTsKPiAtCQlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDI7Cj4gLQo+IC0JCWlmIChyZWxvY19ndHQp IHsKPiAtCQkJZ2VtX3NldF9kb21haW4oZmQsIG9ialswXS5oYW5kbGUsIEk5MTVfR0VNX0RPTUFJ Tl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9HVFQpOwo+IC0JCQlyZWxvY2F0aW9uX3R5cGUgPSAicmVs b2MtZ3R0IjsKPiAtCQl9IGVsc2Ugewo+IC0JCQlnZW1fc2V0X2RvbWFpbihmZCwgb2JqWzBdLmhh bmRsZSwgSTkxNV9HRU1fRE9NQUlOX0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4gLQkJCXJl bG9jYXRpb25fdHlwZSA9ICJyZWxvYy1jcHUiOwo+IC0JCX0KPiAtCX0KPiAtCj4gLQkvKiBTcGVj aWFsIHRlc3RzIGZvciA2NGIgcmVsb2NzLiAqLwo+IC0JaWd0X3N1YnRlc3RfZigic291cmNlLW9m ZnNldC1wYWdlLXN0cmFkbGUtZ2VuOC0lcyIsIHJlbG9jYXRpb25fdHlwZSkgewo+IC0JCWlndF9y ZXF1aXJlKGludGVsX2dlbihkZXZpZCkgPj0gOCk7Cj4gLQkJc2luZ2xlX3JlbG9jLm9mZnNldCA9 IDQwOTYgLSA0Owo+IC0JCXNpbmdsZV9yZWxvYy5kZWx0YSA9IDA7Cj4gLQkJc2luZ2xlX3JlbG9j LnRhcmdldF9oYW5kbGUgPSB0YXJnZXRfaGFuZGxlKCk7Cj4gLQkJc2luZ2xlX3JlbG9jLnJlYWRf ZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gLQkJc2luZ2xlX3JlbG9jLndyaXRl X2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gLQkJc2luZ2xlX3JlbG9jLnByZXN1 bWVkX29mZnNldCA9IC0xOwo+IC0JCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4gLQo+IC0J CXNpbmdsZV9yZWxvYy5kZWx0YSA9IDEwMjQ7Cj4gLQkJZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVm KTsKPiAtCX0KPiAtCj4gLQlpZ3Rfc3VidGVzdF9mKCJzb3VyY2Utb2Zmc2V0LWVuZC1nZW44LSVz IiwgcmVsb2NhdGlvbl90eXBlKSB7Cj4gLQkJaWd0X3JlcXVpcmUoaW50ZWxfZ2VuKGRldmlkKSA+ PSA4KTsKPiAtCQlzaW5nbGVfcmVsb2Mub2Zmc2V0ID0gODE5MiAtIDg7Cj4gLQkJc2luZ2xlX3Jl bG9jLmRlbHRhID0gMDsKPiAtCQlzaW5nbGVfcmVsb2MudGFyZ2V0X2hhbmRsZSA9IHRhcmdldF9o YW5kbGUoKTsKPiAtCQlzaW5nbGVfcmVsb2MucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9NQUlO X1JFTkRFUjsKPiAtCQlzaW5nbGVfcmVsb2Mud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlO X1JFTkRFUjsKPiAtCQlzaW5nbGVfcmVsb2MucHJlc3VtZWRfb2Zmc2V0ID0gLTE7Cj4gLQkJZ2Vt X2V4ZWNidWYoZmQsICZleGVjYnVmKTsKPiAtCX0KPiAtCj4gLQlpZ3Rfc3VidGVzdF9mKCJzb3Vy Y2Utb2Zmc2V0LW92ZXJmbG93LWdlbjgtJXMiLCByZWxvY2F0aW9uX3R5cGUpIHsKPiAtCQlpZ3Rf cmVxdWlyZShpbnRlbF9nZW4oZGV2aWQpID49IDgpOwo+IC0JCXNpbmdsZV9yZWxvYy5vZmZzZXQg PSA4MTkyIC0gNDsKPiAtCQlzaW5nbGVfcmVsb2MuZGVsdGEgPSAwOwo+IC0JCXNpbmdsZV9yZWxv Yy50YXJnZXRfaGFuZGxlID0gdGFyZ2V0X2hhbmRsZSgpOwo+IC0JCXNpbmdsZV9yZWxvYy5yZWFk X2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+IC0JCXNpbmdsZV9yZWxvYy53cml0 ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+IC0JCXNpbmdsZV9yZWxvYy5wcmVz dW1lZF9vZmZzZXQgPSAtMTsKPiAtCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZl eGVjYnVmKSwgLUVJTlZBTCk7Cj4gLQl9Cj4gLQo+IC0JLyogVGVzdHMgZm9yIG9sZCA0Ynl0ZSBy ZWxvY3Mgb24gcHJlLWdlbjguICovCj4gLQlpZ3Rfc3VidGVzdF9mKCJzb3VyY2Utb2Zmc2V0LWVu ZC0lcyIsIHJlbG9jYXRpb25fdHlwZSkgewo+IC0JCWlndF9yZXF1aXJlKGludGVsX2dlbihkZXZp ZCkgPCA4KTsKPiAtCQlzaW5nbGVfcmVsb2Mub2Zmc2V0ID0gODE5MiAtIDQ7Cj4gLQkJc2luZ2xl X3JlbG9jLmRlbHRhID0gMDsKPiAtCQlzaW5nbGVfcmVsb2MudGFyZ2V0X2hhbmRsZSA9IHRhcmdl dF9oYW5kbGUoKTsKPiAtCQlzaW5nbGVfcmVsb2MucmVhZF9kb21haW5zID0gSTkxNV9HRU1fRE9N QUlOX1JFTkRFUjsKPiAtCQlzaW5nbGVfcmVsb2Mud3JpdGVfZG9tYWluID0gSTkxNV9HRU1fRE9N QUlOX1JFTkRFUjsKPiAtCQlzaW5nbGVfcmVsb2MucHJlc3VtZWRfb2Zmc2V0ID0gLTE7Cj4gLQkJ Z2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKPiAtCX0KPiAtCj4gLQlpZ3Rfc3VidGVzdF9mKCJz b3VyY2Utb2Zmc2V0LWJpZy0lcyIsIHJlbG9jYXRpb25fdHlwZSkgewo+IC0JCXNpbmdsZV9yZWxv Yy5vZmZzZXQgPSA4MTkyOwo+IC0JCXNpbmdsZV9yZWxvYy5kZWx0YSA9IDA7Cj4gLQkJc2luZ2xl X3JlbG9jLnRhcmdldF9oYW5kbGUgPSB0YXJnZXRfaGFuZGxlKCk7Cj4gLQkJc2luZ2xlX3JlbG9j LnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gLQkJc2luZ2xlX3JlbG9j LndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gLQkJc2luZ2xlX3JlbG9j LnByZXN1bWVkX29mZnNldCA9IC0xOwo+IC0JCWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1Zihm ZCwgJmV4ZWNidWYpLCAtRUlOVkFMKTsKPiAtCX0KPiAtCj4gLQlpZ3Rfc3VidGVzdF9mKCJzb3Vy Y2Utb2Zmc2V0LW5lZ2F0aXZlLSVzIiwgcmVsb2NhdGlvbl90eXBlKSB7Cj4gLQkJc2luZ2xlX3Jl bG9jLm9mZnNldCA9IChpbnQ2NF90KSAtNDsKPiAtCQlzaW5nbGVfcmVsb2MuZGVsdGEgPSAwOwo+ IC0JCXNpbmdsZV9yZWxvYy50YXJnZXRfaGFuZGxlID0gdGFyZ2V0X2hhbmRsZSgpOwo+IC0JCXNp bmdsZV9yZWxvYy5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+IC0JCXNp bmdsZV9yZWxvYy53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+IC0JCXNp bmdsZV9yZWxvYy5wcmVzdW1lZF9vZmZzZXQgPSAtMTsKPiAtCQlpZ3RfYXNzZXJ0X2VxKF9fZ2Vt X2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVJTlZBTCk7Cj4gLQl9Cj4gLQo+IC0JaWd0X3N1YnRl c3RfZigic291cmNlLW9mZnNldC11bmFsaWduZWQtJXMiLCByZWxvY2F0aW9uX3R5cGUpIHsKPiAt CQlzaW5nbGVfcmVsb2Mub2Zmc2V0ID0gMTsKPiAtCQlzaW5nbGVfcmVsb2MuZGVsdGEgPSAwOwo+ IC0JCXNpbmdsZV9yZWxvYy50YXJnZXRfaGFuZGxlID0gdGFyZ2V0X2hhbmRsZSgpOwo+IC0JCXNp bmdsZV9yZWxvYy5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+IC0JCXNp bmdsZV9yZWxvYy53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+IC0JCXNp bmdsZV9yZWxvYy5wcmVzdW1lZF9vZmZzZXQgPSAtMTsKPiAtCQlpZ3RfYXNzZXJ0X2VxKF9fZ2Vt X2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVJTlZBTCk7Cj4gLQl9Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIHJlbG9jX3Rlc3RzKGNvbnN0IGNoYXIgKnN1ZmZpeCkKPiAtewo+IC0JdWludDY0X3Qg bWF4X3JlbG9jYXRpb25zOwo+IC0JaW50IGk7Cj4gLQo+IC0JbWF4X3JlbG9jYXRpb25zID0gbWlu KFVMT05HX01BWCwgU0laRV9NQVgpOwo+IC0JbWF4X3JlbG9jYXRpb25zIC89IHNpemVvZihzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkpOwo+IC0JaWd0X2RlYnVnKCJNYXhpbXVt IGFsbG9jYWJsZSByZWxvY2F0aW9uczogJSdsbHVcbiIsCj4gLQkJICAobG9uZyBsb25nKW1heF9y ZWxvY2F0aW9ucyk7Cj4gLQo+IC0JaWd0X3N1YnRlc3RfZigiaW52YWxpZC1hZGRyZXNzJXMiLCBz dWZmaXgpIHsKPiAtCQkvKiBBdHRlbXB0IHVubWFwcGVkIHNpbmdsZSBlbnRyeS4gKi8KPiAtCQlv YmpbMF0ucmVsb2NhdGlvbl9jb3VudCA9IDE7Cj4gLQkJb2JqWzBdLnJlbG9jc19wdHIgPSAwOwo+ IC0JCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMTsKPiAtCj4gLQkJaWd0X2Fzc2VydF9lcShfX2dl bV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1FRkFVTFQpOwo+IC0JfQo+IC0KPiAtCWlndF9zdWJ0 ZXN0X2YoInNpbmdsZS1mYXVsdCVzIiwgc3VmZml4KSB7Cj4gLQkJb2JqWzBdLnJlbG9jYXRpb25f Y291bnQgPSBlbnRyaWVzICsgMTsKPiAtCQlleGVjYnVmLmJ1ZmZlcl9jb3VudCA9IDE7Cj4gLQo+ IC0JCS8qIG91dC1vZi1ib3VuZHMgYWZ0ZXIgKi8KPiAtCQlvYmpbMF0ucmVsb2NzX3B0ciA9IHRv X3VzZXJfcG9pbnRlcihyZWxvYyk7Cj4gLQkJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZk LCAmZXhlY2J1ZiksIC1FRkFVTFQpOwo+IC0KPiAtCQkvKiBvdXQtb2YtYm91bmRzIGJlZm9yZSAq Lwo+IC0JCW9ialswXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKChyZWxvYyAtIDEpKTsK PiAtCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVGQVVMVCk7 Cj4gLQl9Cj4gLQo+IC0JaWd0X2ZpeHR1cmUgewo+IC0JCW9ialswXS5yZWxvY2F0aW9uX2NvdW50 ID0gMDsKPiAtCQlvYmpbMF0ucmVsb2NzX3B0ciA9IDA7Cj4gLQo+IC0JCWV4ZWNidWYuYnVmZmVy X2NvdW50ID0gMTsKPiAtCj4gLQkJLyogTWFrZSBzdXJlIHRoZSBiYXRjaCB3b3VsZCBzdWNjZWVk IGV4Y2VwdCBmb3IgdGhlIHRoaW5nIHdlJ3JlCj4gLQkJICogdGVzdGluZy4gKi8KPiAtCQlpZ3Rf cmVxdWlyZShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZikgPT0gMCk7Cj4gLQl9Cj4gLQo+IC0J aWd0X3N1YnRlc3RfZigiYmF0Y2gtc3RhcnQtdW5hbGlnbmVkJXMiLCBzdWZmaXgpIHsKPiAtCQll eGVjYnVmLmJhdGNoX3N0YXJ0X29mZnNldCA9IDE7Cj4gLQkJZXhlY2J1Zi5iYXRjaF9sZW4gPSA4 Owo+IC0JCWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAtRUlOVkFM KTsKPiAtCX0KPiAtCj4gLQlpZ3Rfc3VidGVzdF9mKCJiYXRjaC1lbmQtdW5hbGlnbmVkJXMiLCBz dWZmaXgpIHsKPiAtCQlleGVjYnVmLmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4gLQkJZXhlY2J1 Zi5iYXRjaF9sZW4gPSA3Owo+IC0JCWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4 ZWNidWYpLCAtRUlOVkFMKTsKPiAtCX0KPiAtCj4gLQlpZ3Rfc3VidGVzdF9mKCJiYXRjaC1ib3Ro LXVuYWxpZ25lZCVzIiwgc3VmZml4KSB7Cj4gLQkJZXhlY2J1Zi5iYXRjaF9zdGFydF9vZmZzZXQg PSAxOwo+IC0JCWV4ZWNidWYuYmF0Y2hfbGVuID0gNzsKPiAtCQlpZ3RfYXNzZXJ0X2VxKF9fZ2Vt X2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVJTlZBTCk7Cj4gLQl9Cj4gLQo+IC0JaWd0X2ZpeHR1 cmUgewo+IC0JCS8qIFVuZG8gZGFtYWdlIGZvciBuZXh0IHRlc3RzLiAqLwo+IC0JCWV4ZWNidWYu YmF0Y2hfc3RhcnRfb2Zmc2V0ID0gMDsKPiAtCQlleGVjYnVmLmJhdGNoX2xlbiA9IDA7Cj4gLQkJ aWd0X3JlcXVpcmUoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpID09IDApOwo+IC0JfQo+IC0K PiAtCWlndF9zdWJ0ZXN0X2YoInNpbmdsZS1vdmVyZmxvdyVzIiwgc3VmZml4KSB7Cj4gLQkJaWYg KCpzdWZmaXgpIHsKPiAtCQkJaWd0X3JlcXVpcmVfZihpbnRlbF9nZXRfYXZhaWxfcmFtX21iKCkg Pgo+IC0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRy eSkgKiBlbnRyaWVzIC8gKDEwMjQqMTAyNCksCj4gLQkJCQkgICAgICAiVGVzdCByZXF1aXJlcyBh dCBsZWFzdCAlJ2xsdSBNaUIsIGJ1dCBvbmx5ICUnbGx1IE1pQiBvZiBSQU0gYXZhaWxhYmxlXG4i LAo+IC0JCQkJICAgICAgKGxvbmcgbG9uZylzaXplb2Yoc3RydWN0IGRybV9pOTE1X2dlbV9yZWxv Y2F0aW9uX2VudHJ5KSAqIGVudHJpZXMgLyAoMTAyNCoxMDI0KSwKPiAtCQkJCSAgICAgIChsb25n IGxvbmcpaW50ZWxfZ2V0X2F2YWlsX3JhbV9tYigpKTsKPiAtCQl9Cj4gLQo+IC0JCW9ialswXS5y ZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKHJlbG9jKTsKPiAtCQlvYmpbMF0ucmVsb2NhdGlv bl9jb3VudCA9IGVudHJpZXM7Cj4gLQkJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAxOwo+IC0JCWdl bV9leGVjYnVmKGZkLCAmZXhlY2J1Zik7Cj4gLQo+IC0JCS8qIEF0dGVtcHQgc2luZ2xlIG92ZXJm bG93ZWQgZW50cnkuICovCj4gLQkJb2JqWzBdLnJlbG9jYXRpb25fY291bnQgPSAtMTsKPiAtCQlp Z3RfZGVidWcoInJlbG9jYXRpb25fY291bnQ9JXVcbiIsCj4gLQkJCQlvYmpbMF0ucmVsb2NhdGlv bl9jb3VudCk7Cj4gLQkJaWYgKG1heF9yZWxvY2F0aW9ucyA8PSBvYmpbMF0ucmVsb2NhdGlvbl9j b3VudCkKPiAtCQkJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1F SU5WQUwpOwo+IC0JCWVsc2UKPiAtCQkJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVmKGZkLCAm ZXhlY2J1ZiksIC1FRkFVTFQpOwo+IC0KPiAtCQlpZiAobWF4X3JlbG9jYXRpb25zICsgMSA8IG9i alswXS5yZWxvY2F0aW9uX2NvdW50KSB7Cj4gLQkJCW9ialswXS5yZWxvY2F0aW9uX2NvdW50ID0g bWF4X3JlbG9jYXRpb25zICsgMTsKPiAtCQkJaWd0X2RlYnVnKCJyZWxvY2F0aW9uX2NvdW50PSV1 XG4iLAo+IC0JCQkJICBvYmpbMF0ucmVsb2NhdGlvbl9jb3VudCk7Cj4gLQkJCWlndF9hc3NlcnRf ZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAtRUlOVkFMKTsKPiAtCj4gLQkJCW9ialsw XS5yZWxvY2F0aW9uX2NvdW50ID0gbWF4X3JlbG9jYXRpb25zIC0gMTsKPiAtCQkJaWd0X2RlYnVn KCJyZWxvY2F0aW9uX2NvdW50PSV1XG4iLAo+IC0JCQkJICBvYmpbMF0ucmVsb2NhdGlvbl9jb3Vu dCk7Cj4gLQkJCWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAtRUZB VUxUKTsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JaWd0X3N1YnRlc3RfZigid3JhcHBlZC1vdmVyZmxv dyVzIiwgc3VmZml4KSB7Cj4gLQkJaWYgKCpzdWZmaXgpIHsKPiAtCQkJaWd0X3JlcXVpcmVfZihp bnRlbF9nZXRfYXZhaWxfcmFtX21iKCkgPgo+IC0JCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBkcm1f aTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSkgKiBlbnRyaWVzICogbnVtIC8gKDEwMjQqMTAyNCks Cj4gLQkJCQkgICAgICAiVGVzdCByZXF1aXJlcyBhdCBsZWFzdCAlJ2xsdSBNaUIsIGJ1dCBvbmx5 ICUnbGx1IE1pQiBvZiBSQU0gYXZhaWxhYmxlXG4iLAo+IC0JCQkJICAgICAgKGxvbmcgbG9uZylz aXplb2Yoc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5KSAqIGVudHJpZXMgKiBu dW0gLyAoMTAyNCoxMDI0KSwKPiAtCQkJCSAgICAgIChsb25nIGxvbmcpaW50ZWxfZ2V0X2F2YWls X3JhbV9tYigpKTsKPiAtCQl9Cj4gLQo+IC0JCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKykgewo+ IC0JCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqbyA9ICZvYmpbaV07Cj4gLQo+ IC0JCQlvLT5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKHJlbG9jKTsKPiAtCQkJby0+cmVs b2NhdGlvbl9jb3VudCA9IGVudHJpZXM7Cj4gLQkJfQo+IC0JCWV4ZWNidWYuYnVmZmVyX2NvdW50 ID0gaTsKPiAtCQlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+IC0KPiAtCQlvYmpbaS0xXS5y ZWxvY2F0aW9uX2NvdW50ID0gLTE7Cj4gLQkJaWd0X2RlYnVnKCJyZWxvY2F0aW9uX2NvdW50WyVk XT0ldVxuIiwKPiAtCQkJICBpLTEsIG9ialtpLTFdLnJlbG9jYXRpb25fY291bnQpOwo+IC0gICAg ICAgICAgICAgICAgaWYgKG1heF9yZWxvY2F0aW9ucyA8PSBvYmpbaS0xXS5yZWxvY2F0aW9uX2Nv dW50KQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNi dWYoZmQsICZleGVjYnVmKSwgLUVJTlZBTCk7Cj4gLQkJZWxzZQo+IC0gICAgICAgICAgICAgICAg ICAgICAgICBpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKSwgLUVGQVVM VCk7Cj4gLQo+IC0JCWlmIChtYXhfcmVsb2NhdGlvbnMgPCBvYmpbaS0xXS5yZWxvY2F0aW9uX2Nv dW50KSB7Cj4gLQkJCW9ialtpLTFdLnJlbG9jYXRpb25fY291bnQgPSBtYXhfcmVsb2NhdGlvbnM7 Cj4gLQkJCWlndF9kZWJ1ZygicmVsb2NhdGlvbl9jb3VudFslZF09JXVcbiIsCj4gLQkJCQkgIGkt MSwgb2JqW2ktMV0ucmVsb2NhdGlvbl9jb3VudCk7Cj4gLQkJCS8qIFdoZXRoZXIgdGhlIGtlcm5l bCByZXBvcnRzIHRoZSBFRkFVTFQgZm9yIHRoZQo+IC0JCQkgKiBpbnZhbGlkIHJlbG9jYXRpb24g YXJyYXkgb3IgRUlOVkFMIGZvciB0aGUgb3ZlcmZsb3cKPiAtCQkJICogaW4gYXJyYXkgc2l6ZSBk ZXBlbmRzIHVwb24gdGhlIG9yZGVyIG9mIHRoZQo+IC0JCQkgKiBpbmRpdmlkdWFsIHRlc3RzLiBG cm9tIGEgY29uc2lzdGVuY3kgcGVyc3BlY3RpdmUKPiAtCQkJICogRUZBVUxUIGlzIHByZWZlcnJl ZCAoaS5lLiB1c2luZyB0aGF0IHJlbG9jYXRpb24KPiAtCQkJICogYXJyYXkgYnkgaXRzZWxmIHdv dWxkIGNhdXNlIEVGQVVMVCBub3QgRUlOVkFMKS4KPiAtCQkJICovCj4gLQkJCWlndF9hc3NlcnRf ZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpLCAtRUZBVUxUKTsKPiAtCj4gLQkJCW9ialtp LTFdLnJlbG9jYXRpb25fY291bnQgPSBtYXhfcmVsb2NhdGlvbnMgLSAxOwo+IC0JCQlpZ3RfZGVi dWcoInJlbG9jYXRpb25fY291bnRbJWRdPSV1XG4iLAo+IC0JCQkJICBpLTEsIG9ialtpLTFdLnJl bG9jYXRpb25fY291bnQpOwo+IC0JCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYoZmQsICZl eGVjYnVmKSwgLUVGQVVMVCk7Cj4gLQkJfQo+IC0KPiAtCQlvYmpbaS0xXS5yZWxvY2F0aW9uX2Nv dW50ID0gZW50cmllcyArIDE7Cj4gLQkJaWd0X2RlYnVnKCJyZWxvY2F0aW9uX2NvdW50WyVkXT0l dVxuIiwKPiAtICAgICAgICAgICAgICAgICAgICAgICAgICBpLTEsIG9ialtpLTFdLnJlbG9jYXRp b25fY291bnQpOwo+IC0JCWlndF9hc3NlcnRfZXEoX19nZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYp LCAtRUZBVUxUKTsKPiAtCj4gLQkJb2JqWzBdLnJlbG9jYXRpb25fY291bnQgPSAtMTsKPiAtCQlp ZiAobWF4X3JlbG9jYXRpb25zIDwgb2JqWzBdLnJlbG9jYXRpb25fY291bnQpIHsKPiAtCQkJZXhl Y2J1Zi5idWZmZXJfY291bnQgPSAxOwo+IC0JCQlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ IC0KPiAtCQkJLyogQXMgb3V0bGluZWQgYWJvdmUsIHRoaXMgaXMgd2h5IEVGQVVMVCBpcyBwcmVm ZXJyZWQgKi8KPiAtCQkJb2JqWzBdLnJlbG9jYXRpb25fY291bnQgPSBtYXhfcmVsb2NhdGlvbnM7 Cj4gLQkJCWlndF9kZWJ1ZygicmVsb2NhdGlvbl9jb3VudFswXT0ldVxuIiwKPiAtCQkJCSAgb2Jq WzBdLnJlbG9jYXRpb25fY291bnQpOwo+IC0JCQlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2V4ZWNidWYo ZmQsICZleGVjYnVmKSwgLUVGQVVMVCk7Cj4gLQkJfQo+IC0JfQo+IC19Cj4gLQo+IC1zdGF0aWMg dm9pZCBidWZmZXJfY291bnRfdGVzdHModm9pZCkKPiAtewo+IC0JaWd0X3N1YnRlc3QoImJ1ZmZl cmNvdW50LW92ZXJmbG93Iikgewo+IC0JCWlndF9za2lwX29uKFNJWkVfTUFYIC8gc2l6ZW9mKCpv YmopID49IFVJTlRfTUFYKTsKPiAtCj4gLQkJZm9yIChpbnQgaSA9IDA7IGkgPCBudW07IGkrKykg ewo+IC0JCQlvYmpbaV0ucmVsb2NhdGlvbl9jb3VudCA9IDA7Cj4gLQkJCW9ialtpXS5yZWxvY3Nf cHRyID0gMDsKPiAtCQl9Cj4gLQo+IC0JCS8qIFdlIG9ubHkgaGF2ZSBudW0gYnVmZmVycyBhY3R1 YWxseSwgYnV0IHRoZSBvdmVyZmxvdyB3aWxsIG1ha2UKPiAtCQkgKiBzdXJlIHdlIGJsb3cgdXAg dGhlIGtlcm5lbCBiZWZvcmUgd2UgYmxvdyB1cCB1c2Vyc3BhY2UuICovCj4gLQkJZXhlY2J1Zi5i dWZmZXJfY291bnQgPSBudW07Cj4gLQo+IC0JCS8qIE1ha2Ugc3VyZSB0aGUgYmFzaWMgdGhpbmcg d291bGQgd29yayBmaXJzdCAuLi4gKi8KPiAtCQlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOwo+ IC0KPiAtCQkvKiAuLi4gdGhlbiBiZSBldmlsOiBPdmVyZmxvdyBvZiB0aGUgcG9pbnRlciB0YWJs ZSAod2hpY2ggaGFzIGEKPiAtCQkgKiBiaXQgb2YgbGVhZCBkYXRhc3RydWN0dXJlcywgc28gbm8g KyAxIG5lZWRlZCB0byBvdmVyZmxvdykuICovCj4gLQkJZXhlY2J1Zi5idWZmZXJfY291bnQgPSBJ TlRfTUFYIC8gc2l6ZW9mKHZvaWQgKik7Cj4gLQkJaWd0X2Fzc2VydF9lcShfX2dlbV9leGVjYnVm KGZkLCAmZXhlY2J1ZiksIC1FSU5WQUwpOwo+IC0KPiAtCQkvKiAuLi4gdGhlbiBiZSBldmlsOiBD b3B5aW5nL2FsbG9jYXRpbmcgdGhlIGFycmF5LiAqLwo+IC0JCWV4ZWNidWYuYnVmZmVyX2NvdW50 ID0gVUlOVF9NQVggLyBzaXplb2Yob2JqWzBdKSArIDE7Cj4gLQkJaWd0X2Fzc2VydF9lcShfX2dl bV9leGVjYnVmKGZkLCAmZXhlY2J1ZiksIC1FSU5WQUwpOwo+IC0JfQo+IC19Cj4gLQo+IC1pZ3Rf bWFpbgo+IC17Cj4gLQlpbnQgZGV2aWQgPSAwOwo+IC0KPiAtCWlndF9maXh0dXJlIHsKPiAtCQl1 aW50MzJfdCBiYmUgPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+IC0JCXNpemVfdCByZWxvY19zaXpl Owo+IC0KPiAtCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+IC0JCWlndF9y ZXF1aXJlX2dlbShmZCk7Cj4gLQkJZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGZkKTsKPiAt Cj4gLQkJLyogQ3JlYXRlIGdpYW50IHJlbG9jIGJ1ZmZlciBhcmVhLiAqLwo+IC0JCW51bSA9IDI1 NzsKPiAtCQllbnRyaWVzID0gKCgxVUxMIDw8IDMyKSAvIChudW0gLSAxKSk7Cj4gLQkJcmVsb2Nf c2l6ZSA9IGVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2Vu dHJ5KTsKPiAtCQlpZ3RfYXNzZXJ0KChyZWxvY19zaXplICYgNDA5NSkgPT0gMCk7Cj4gLQkJcmVs b2MgPSBtbWFwKE5VTEwsIHJlbG9jX3NpemUgKyAyKjQwOTYsIFBST1RfUkVBRCB8IFBST1RfV1JJ VEUsCj4gLQkJCSAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwo+IC0JCWlndF9h c3NlcnQocmVsb2MgIT0gTUFQX0ZBSUxFRCk7Cj4gLQkJaWd0X3JlcXVpcmVfZihtbG9jayhyZWxv YywgcmVsb2Nfc2l6ZSkgPT0gMCwKPiAtCQkJICAgICAgIlRlc3RzIHJlcXVpcmUgYXQgbGVhc3Qg JSdsbHUgTWlCIG9mIGF2YWlsYWJsZSBtZW1vcnlcbiIsCj4gLQkJCSAgICAgIChsb25nIGxvbmcg dW5zaWduZWQpcmVsb2Nfc2l6ZSAvICgxMDI0KjEwMjQpKTsKPiAtCj4gLQkJLyogZGlzYWJsZSBh Y2Nlc3MgYmVmb3JlICsgYWZ0ZXIgKi8KPiAtCQltcHJvdGVjdChyZWxvYywgNDA5NiwgMCk7Cj4g LQkJcmVsb2MgPSAoc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5ICopKChjaGFy ICopcmVsb2MgKyA0MDk2KTsKPiAtCQltcHJvdGVjdChyZWxvYyArIGVudHJpZXMsIDQwOTYsIDAp Owo+IC0KPiAtCQkvKiBBbGxvY2F0ZSB0aGUgaGFuZGxlcyB3ZSdsbCBuZWVkIHRvIHdyYXAuICov Cj4gLQkJaW50ZWxfcmVxdWlyZV9tZW1vcnkobnVtKzEsIDQwOTYsIENIRUNLX1JBTSk7Cj4gLQkJ b2JqID0gY2FsbG9jKG51bSwgc2l6ZW9mKCpvYmopKTsKPiAtCQlpZ3RfYXNzZXJ0KG9iaik7Cj4g LQo+IC0JCS8qIEZpcnN0IG9iamVjdCBpcyB1c2VkIGZvciBwYWdlIGNyb3NzaW5nIHRlc3RzICov Cj4gLQkJb2JqWzBdLmhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIDgxOTIpOwo+IC0JCWdlbV93cml0 ZShmZCwgb2JqWzBdLmhhbmRsZSwgMCwgJmJiZSwgc2l6ZW9mKGJiZSkpOwo+IC0JCWZvciAoaW50 IGkgPSAxOyBpIDwgbnVtOyBpKyspIHsKPiAtCQkJb2JqW2ldLmhhbmRsZSA9IGdlbV9jcmVhdGUo ZmQsIDQwOTYpOwo+IC0JCQlnZW1fd3JpdGUoZmQsIG9ialtpXS5oYW5kbGUsIDAsICZiYmUsIHNp emVvZihiYmUpKTsKPiAtCQl9Cj4gLQo+IC0JCS8qIENyZWF0ZSByZWxvY2F0aW9uIG9iamVjdHMu ICovCj4gLQkJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1ZikpOwo+IC0JCWV4ZWNi dWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKPiAtCQlleGVjYnVmLmJ1ZmZl cl9jb3VudCA9IDE7Cj4gLQkJZXhlY2J1Zi5mbGFncyA9IEk5MTVfRVhFQ19IQU5ETEVfTFVUOwo+ IC0JCWlmIChfX2dlbV9leGVjYnVmKGZkLCAmZXhlY2J1ZikpCj4gLQkJCWV4ZWNidWYuZmxhZ3Mg PSAwOwo+IC0KPiAtCQlmb3IgKGludCBpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgewo+IC0JCQly ZWxvY1tpXS50YXJnZXRfaGFuZGxlID0gdGFyZ2V0X2hhbmRsZSgpOwo+IC0JCQlyZWxvY1tpXS5v ZmZzZXQgPSAxMDI0Owo+IC0JCQlyZWxvY1tpXS5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01B SU5fSU5TVFJVQ1RJT047Cj4gLQkJCXJlbG9jW2ldLndyaXRlX2RvbWFpbiA9IDA7Cj4gLQkJfQo+ IC0JfQo+IC0KPiAtCXJlbG9jX3Rlc3RzKCIiKTsKPiAtCWlndF9maXh0dXJlCj4gLQkJaWd0X2Rp c2FibGVfcHJlZmF1bHQoKTsKPiAtCXJlbG9jX3Rlc3RzKCItbm9wcmVmYXVsdCIpOwo+IC0JaWd0 X2ZpeHR1cmUKPiAtCQlpZ3RfZW5hYmxlX3ByZWZhdWx0KCk7Cj4gLQo+IC0Jc291cmNlX29mZnNl dF90ZXN0cyhkZXZpZCwgZmFsc2UpOwo+IC0Jc291cmNlX29mZnNldF90ZXN0cyhkZXZpZCwgdHJ1 ZSk7Cj4gLQo+IC0JYnVmZmVyX2NvdW50X3Rlc3RzKCk7Cj4gLX0KPiBkaWZmIC0tZ2l0IGEvdGVz dHMvaTkxNS9nZW1fcmVsb2NfdnNfZ3B1LmMgYi90ZXN0cy9pOTE1L2dlbV9yZWxvY192c19ncHUu Ywo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IGViYzcxYTY4Yy4uMDAwMDAwMDAw Cj4gLS0tIGEvdGVzdHMvaTkxNS9nZW1fcmVsb2NfdnNfZ3B1LmMKPiArKysgL2Rldi9udWxsCj4g QEAgLTEsMzUyICswLDAgQEAKPiAtLyoKPiAtICogQ29weXJpZ2h0IMKpIDIwMTEsMjAxMyBJbnRl bCBDb3Jwb3JhdGlvbgo+IC0gKgo+IC0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBm cmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQo+IC0gKiBjb3B5IG9mIHRo aXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0 d2FyZSIpLAo+IC0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gLSAqIHRoZSByaWdodHMgdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAo+IC0g KiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNv bnMgdG8gd2hvbSB0aGUKPiAtICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAtICoKPiAtICogVGhlIGFib3ZlIGNv cHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUg bmV4dAo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Ig c3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gLSAqIFNvZnR3YXJlLgo+IC0gKgo+IC0gKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUgo+IC0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKPiAtICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCj4gLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gLSAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCj4gLSAqIEZS T00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0Ug T1IgT1RIRVIgREVBTElOR1MKPiAtICogSU4gVEhFIFNPRlRXQVJFLgo+IC0gKgo+IC0gKiBBdXRo b3JzOgo+IC0gKiAgICBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGZmd2xsLmNoPgo+IC0g Kgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlICJpZ3QuaCIKPiAtI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ IC0jaW5jbHVkZSA8c3RkaW8uaD4KPiAtI2luY2x1ZGUgPHN0cmluZy5oPgo+IC0jaW5jbHVkZSA8 ZmNudGwuaD4KPiAtI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gLSNpbmNsdWRlIDxlcnJuby5oPgo+ IC0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KPiAtI2luY2x1ZGUgPHN5cy90aW1lLmg+Cj4gLSNpbmNs dWRlIDxzaWduYWwuaD4KPiAtI2luY2x1ZGUgPHN5cy93YWl0Lmg+Cj4gLQo+IC0jaW5jbHVkZSA8 ZHJtLmg+Cj4gLQo+IC0KPiAtSUdUX1RFU1RfREVTQ1JJUFRJT04oIlRlc3Qga2VybmVsIHJlbG9j YXRpb25zIHZzLiBncHUgcmFjZXMuIik7Cj4gLQo+IC0vKgo+IC0gKiBUZXN0Y2FzZTogS2VybmVs IHJlbG9jYXRpb25zIHZzLiBncHUgcmFjZXMKPiAtICoKPiAtICovCj4gLQo+IC1zdGF0aWMgZHJt X2ludGVsX2J1Zm1nciAqYnVmbWdyOwo+IC1zdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo Owo+IC0KPiAtdWludDMyX3QgYmxvYlsyMDQ4KjIwNDhdOwo+IC0jZGVmaW5lIE5VTV9UQVJHRVRf Qk9TIDE2Cj4gLWRybV9pbnRlbF9ibyAqcGNfdGFyZ2V0X2JvW05VTV9UQVJHRVRfQk9TXTsKPiAt ZHJtX2ludGVsX2JvICpkdW1teV9ibzsKPiAtZHJtX2ludGVsX2JvICpzcGVjaWFsX2JvOwo+IC11 aW50MzJfdCBkZXZpZDsKPiAtaW50IHNwZWNpYWxfcmVsb2Nfb2ZzOwo+IC1pbnQgc3BlY2lhbF9i YXRjaF9sZW47Cj4gLQo+IC1zdGF0aWMgdm9pZCBjcmVhdGVfc3BlY2lhbF9ibyh2b2lkKQo+IC17 Cj4gLQl1aW50MzJfdCBkYXRhWzEwMjRdOwo+IC0JaW50IGxlbiA9IDA7Cj4gLQlpbnQgc21hbGxf cGl0Y2ggPSA2NDsKPiAtI2RlZmluZSBCQVRDSChkdykgZGF0YVtsZW4rK10gPSAoZHcpOwo+IC0K PiAtCW1lbXNldChkYXRhLCAwLCA0MDk2KTsKPiAtCXNwZWNpYWxfYm8gPSBkcm1faW50ZWxfYm9f YWxsb2MoYnVmbWdyLCAic3BlY2lhbCBiYXRjaCIsIDQwOTYsIDQwOTYpOwo+IC0KPiAtCWlmIChp bnRlbF9nZW4oZGV2aWQpID49IDgpIHsKPiAtCQlCQVRDSChNSV9OT09QKTsKPiAtCQlCQVRDSChY WV9DT0xPUl9CTFRfQ01EX05PTEVOIHwgNSB8Cj4gLQkJCQlDT0xPUl9CTFRfV1JJVEVfQUxQSEEg fCBYWV9DT0xPUl9CTFRfV1JJVEVfUkdCKTsKPiAtCX0gZWxzZSB7Cj4gLQkJQkFUQ0goWFlfQ09M T1JfQkxUX0NNRF9OT0xFTiB8IDQgfAo+IC0JCQkJQ09MT1JfQkxUX1dSSVRFX0FMUEhBIHwgWFlf Q09MT1JfQkxUX1dSSVRFX1JHQik7Cj4gLQl9Cj4gLQo+IC0JQkFUQ0goKDMgPDwgMjQpIHwgKDB4 ZjAgPDwgMTYpIHwgc21hbGxfcGl0Y2gpOwo+IC0JQkFUQ0goMCk7Cj4gLQlCQVRDSCgxIDw8IDE2 IHwgMSk7Cj4gLQlzcGVjaWFsX3JlbG9jX29mcyA9IDQqbGVuOwo+IC0JQkFUQ0goMCk7Cj4gLQlp ZiAoaW50ZWxfZ2VuKGRldmlkKSA+PSA4KQo+IC0JCUJBVENIKDApOwo+IC0JQkFUQ0goMHhkZWFk YmVlZik7Cj4gLQo+IC0jZGVmaW5lIENNRF9QT0xZX1NUSVBQTEVfT0ZGU0VUICAgICAgIDB4Nzkw Ngo+IC0JLyogYmF0Y2hidWZmZXIgZW5kICovCj4gLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2aWQp KSB7Cj4gLQkJQkFUQ0goQ01EX1BPTFlfU1RJUFBMRV9PRkZTRVQgPDwgMTYpOwo+IC0JCUJBVENI KDApOwo+IC0JfQo+IC0JaWd0X2Fzc2VydF9lcShsZW4gJSAyLCAwKTsKPiAtCUJBVENIKE1JX05P T1ApOwo+IC0JQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX0VORCk7Cj4gLQo+IC0JZHJtX2ludGVsX2Jv X3N1YmRhdGEoc3BlY2lhbF9ibywgMCwgNDA5NiwgZGF0YSk7Cj4gLQlzcGVjaWFsX2JhdGNoX2xl biA9IGxlbio0Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBlbWl0X2R1bW15X2xvYWQoaW50IHBp dGNoKQo+IC17Cj4gLQlpbnQgaTsKPiAtCXVpbnQzMl90IHRpbGVfZmxhZ3MgPSAwOwo+IC0KPiAt CWlmIChJU185NjUoZGV2aWQpKSB7Cj4gLQkJcGl0Y2ggLz0gNDsKPiAtCQl0aWxlX2ZsYWdzID0g WFlfU1JDX0NPUFlfQkxUX1NSQ19USUxFRCB8Cj4gLQkJCVhZX1NSQ19DT1BZX0JMVF9EU1RfVElM RUQ7Cj4gLQl9Cj4gLQo+IC0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKPiAtCQlCTElUX0NP UFlfQkFUQ0hfU1RBUlQodGlsZV9mbGFncyk7Cj4gLQkJT1VUX0JBVENIKCgzIDw8IDI0KSB8IC8q IDMyIGJpdHMgKi8KPiAtCQkJICAoMHhjYyA8PCAxNikgfCAvKiBjb3B5IFJPUCAqLwo+IC0JCQkg IHBpdGNoKTsKPiAtCQlPVVRfQkFUQ0goMCA8PCAxNiB8IDEwMjQpOwo+IC0JCU9VVF9CQVRDSCgo MjA0OCkgPDwgMTYgfCAoMjA0OCkpOwo+IC0JCU9VVF9SRUxPQ19GRU5DRUQoZHVtbXlfYm8sIEk5 MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIDApOwo+IC0JCU9V VF9CQVRDSCgwIDw8IDE2IHwgMCk7Cj4gLQkJT1VUX0JBVENIKHBpdGNoKTsKPiAtCQlPVVRfUkVM T0NfRkVOQ0VEKGR1bW15X2JvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCAwLCAwKTsKPiAtCQlB RFZBTkNFX0JBVENIKCk7Cj4gLQo+IC0JCWlmIChiYXRjaC0+Z2VuID49IDYpIHsKPiAtCQkJQkVH SU5fQkFUQ0goMywgMCk7Cj4gLQkJCU9VVF9CQVRDSChYWV9TRVRVUF9DTElQX0JMVF9DTUQpOwo+ IC0JCQlPVVRfQkFUQ0goMCk7Cj4gLQkJCU9VVF9CQVRDSCgwKTsKPiAtCQkJQURWQU5DRV9CQVRD SCgpOwo+IC0JCX0KPiAtCX0KPiAtCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoKGJhdGNoKTsKPiAt fQo+IC0KPiAtc3RhdGljIHZvaWQgcmVsb2NfYW5kX2VtaXQoaW50IGZkLCBkcm1faW50ZWxfYm8g KnRhcmdldF9ibywgYm9vbCBmYXVsdGluZ19yZWxvYykKPiAtewo+IC0Jc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29i amVjdDIgZXhlY1syXTsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSBy ZWxvY1sxXTsKPiAtCXVpbnQzMl90IGhhbmRsZV9yZWxvY3M7Cj4gLQl2b2lkICpndHRfcmVsb2Nz Owo+IC0KPiAtCW1lbXNldCgmZXhlY2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKPiAtCW1lbXNl dChleGVjLCAwLCBzaXplb2YoZXhlYykpOwo+IC0JbWVtc2V0KHJlbG9jLCAwLCBzaXplb2YocmVs b2MpKTsKPiAtCj4gLQlleGVjWzBdLmhhbmRsZSA9IHRhcmdldF9iby0+aGFuZGxlOwo+IC0KPiAt CXJlbG9jWzBdLm9mZnNldCA9IHNwZWNpYWxfcmVsb2Nfb2ZzOwo+IC0JcmVsb2NbMF0udGFyZ2V0 X2hhbmRsZSA9IHRhcmdldF9iby0+aGFuZGxlOwo+IC0JcmVsb2NbMF0ucmVhZF9kb21haW5zID0g STkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKPiAtCXJlbG9jWzBdLndyaXRlX2RvbWFpbiA9IEk5MTVf R0VNX0RPTUFJTl9SRU5ERVI7Cj4gLQkvKiBXZSBkbyBub3QgdHJhY2sgdGhlIGxhc3QgcGF0Y2hl ZCB2YWx1ZSwgc28gZm9yY2UgdGhlIHJlbG9jYXRpb24KPiAtCSAqIGV2ZXJ5IHRpbWUuCj4gLQkg Ki8KPiAtCXJlbG9jWzBdLnByZXN1bWVkX29mZnNldCA9IC0xOwo+IC0KPiAtCWhhbmRsZV9yZWxv Y3MgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKPiAtCWdlbV93cml0ZShmZCwgaGFuZGxlX3JlbG9j cywgMCwgcmVsb2MsIHNpemVvZihyZWxvYykpOwo+IC0JZ3R0X3JlbG9jcyA9IGdlbV9tbWFwX19n dHQoZmQsIGhhbmRsZV9yZWxvY3MsIDQwOTYsCj4gLQkJCQkgICBQUk9UX1JFQUQgfCBQUk9UX1dS SVRFKTsKPiAtCj4gLQlleGVjWzFdLmhhbmRsZSA9IHNwZWNpYWxfYm8tPmhhbmRsZTsKPiAtCWV4 ZWNbMV0ucmVsb2NhdGlvbl9jb3VudCA9IDE7Cj4gLQkvKiBBIG5ld2x5IG1tYXAgZ3R0IGJvIHdp bGwgZmF1bHQgb24gZmlyc3QgYWNjZXNzLiAqLwo+IC0JaWYgKGZhdWx0aW5nX3JlbG9jKQo+IC0J CWV4ZWNbMV0ucmVsb2NzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihndHRfcmVsb2NzKTsKPiAtCWVs c2UKPiAtCQlleGVjWzFdLnJlbG9jc19wdHIgPSB0b191c2VyX3BvaW50ZXIocmVsb2MpOwo+IC0K PiAtCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIoZXhlYyk7Cj4gLQlleGVj YnVmLmJ1ZmZlcl9jb3VudCA9IDI7Cj4gLQlleGVjYnVmLmJhdGNoX2xlbiA9IHNwZWNpYWxfYmF0 Y2hfbGVuOwo+IC0JaWYgKGludGVsX2dlbihkZXZpZCkgPj0gNikKPiAtCQlleGVjYnVmLmZsYWdz IHw9IEk5MTVfRVhFQ19CTFQ7Cj4gLQo+IC0JZ2VtX2V4ZWNidWYoZmQsICZleGVjYnVmKTsKPiAt Cj4gLQlnZW1fY2xvc2UoZmQsIGhhbmRsZV9yZWxvY3MpOwo+IC19Cj4gLQo+IC1zdGF0aWMgaWd0 X2hhbmdfdCBub19oYW5nKGludCBmZCkKPiAtewo+IC0JcmV0dXJuIChpZ3RfaGFuZ190KXswfTsK PiAtfQo+IC0KPiAtc3RhdGljIGlndF9oYW5nX3QgYmNzX2hhbmcoaW50IGZkKQo+IC17Cj4gLQly ZXR1cm4gaWd0X2hhbmdfcmluZyhmZCwgSTkxNV9FWEVDX0JMVCk7Cj4gLX0KPiAtCj4gLXN0YXRp YyB2b2lkIGRvX3Rlc3QoaW50IGZkLCBib29sIGZhdWx0aW5nX3JlbG9jLAo+IC0JCSAgICBpZ3Rf aGFuZ190ICgqZG9faGFuZykoaW50IGZkKSkKPiAtewo+IC0JdWludDMyX3QgdGlsaW5nX21vZGUg PSBJOTE1X1RJTElOR19YOwo+IC0JdW5zaWduZWQgbG9uZyBwaXRjaCwgYWN0X3NpemU7Cj4gLQl1 aW50MzJfdCB0ZXN0Owo+IC0JaW50IGk7Cj4gLQo+IC0JaWYgKGZhdWx0aW5nX3JlbG9jKQo+IC0J CWlndF9kaXNhYmxlX3ByZWZhdWx0KCk7Cj4gLQo+IC0JYWN0X3NpemUgPSAyMDQ4Owo+IC0JZHVt bXlfYm8gPSBkcm1faW50ZWxfYm9fYWxsb2NfdGlsZWQoYnVmbWdyLCAidGlsZWQgZHVtbXlfYm8i LCBhY3Rfc2l6ZSwgYWN0X3NpemUsCj4gLQkJCQkgICAgICA0LCAmdGlsaW5nX21vZGUsICZwaXRj aCwgMCk7Cj4gLQo+IC0JZHJtX2ludGVsX2JvX3N1YmRhdGEoZHVtbXlfYm8sIDAsIGFjdF9zaXpl KmFjdF9zaXplKjQsIGJsb2IpOwo+IC0KPiAtCWNyZWF0ZV9zcGVjaWFsX2JvKCk7Cj4gLQo+IC0J Zm9yIChpID0gMDsgaSA8IE5VTV9UQVJHRVRfQk9TOyBpKyspIHsKPiAtCQlpZ3RfaGFuZ190IGhh bmc7Cj4gLQo+IC0JCXBjX3RhcmdldF9ib1tpXSA9IGRybV9pbnRlbF9ib19hbGxvYyhidWZtZ3Is ICJzcGVjaWFsIGJhdGNoIiwgNDA5NiwgNDA5Nik7Cj4gLQkJZW1pdF9kdW1teV9sb2FkKHBpdGNo KTsKPiAtCQlpZ3RfYXNzZXJ0KHBjX3RhcmdldF9ib1tpXS0+b2Zmc2V0ID09IDApOwo+IC0JCWhh bmcgPSBkb19oYW5nKGZkKTsKPiAtCj4gLQkJcmVsb2NfYW5kX2VtaXQoZmQsIHBjX3RhcmdldF9i b1tpXSwgZmF1bHRpbmdfcmVsb2MpOwo+IC0KPiAtCQlpZ3RfcG9zdF9oYW5nX3JpbmcoZmQsIGhh bmcpOwo+IC0JfQo+IC0KPiAtCS8qIE9ubHkgY2hlY2sgYXQgdGhlIGVuZCB0byBhdm9pZCB1bm5l Y2Vzc2FyeSBzeW5jaHJvbm91cyBiZWhhdmlvdXIuICovCj4gLQlmb3IgKGkgPSAwOyBpIDwgTlVN X1RBUkdFVF9CT1M7IGkrKykgewo+IC0JCWRybV9pbnRlbF9ib19nZXRfc3ViZGF0YShwY190YXJn ZXRfYm9baV0sIDAsIDQsICZ0ZXN0KTsKPiAtCQlpZ3RfYXNzZXJ0X2YodGVzdCA9PSAweGRlYWRi ZWVmLAo+IC0JCQkgICAgICJtaXNtYXRjaCBpbiBidWZmZXIgJWk6IDB4JTA4eCBpbnN0ZWFkIG9m IDB4ZGVhZGJlZWZcbiIsIGksIHRlc3QpOwo+IC0JCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShw Y190YXJnZXRfYm9baV0pOwo+IC0JfQo+IC0KPiAtCWRybV9pbnRlbF9nZW1fYm9fbWFwX2d0dChk dW1teV9ibyk7Cj4gLQlkcm1faW50ZWxfZ2VtX2JvX3VubWFwX2d0dChkdW1teV9ibyk7Cj4gLQo+ IC0JZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKHNwZWNpYWxfYm8pOwo+IC0JZHJtX2ludGVsX2Jv X3VucmVmZXJlbmNlKGR1bW15X2JvKTsKPiAtCj4gLQlpZiAoZmF1bHRpbmdfcmVsb2MpCj4gLQkJ aWd0X2VuYWJsZV9wcmVmYXVsdCgpOwo+IC19Cj4gLQo+IC0jZGVmaW5lIElOVEVSUlVQVAkoMSA8 PCAwKQo+IC0jZGVmaW5lIEZBVUxUSU5HCSgxIDw8IDEpCj4gLSNkZWZpbmUgVEhSQVNICQkoMSA8 PCAyKQo+IC0jZGVmaW5lIFRIUkFTSF9JTkFDVElWRQkoMSA8PCAzKQo+IC0jZGVmaW5lIEhBTkcJ CSgxIDw8IDQpCj4gLSNkZWZpbmUgQUxMX0ZMQUdTCShIQU5HIHwgSU5URVJSVVBUIHwgRkFVTFRJ TkcgfCBUSFJBU0ggfCBUSFJBU0hfSU5BQ1RJVkUpCj4gLXN0YXRpYyB2b2lkIGRvX2ZvcmtlZF90 ZXN0KGludCBmZCwgdW5zaWduZWQgZmxhZ3MpCj4gLXsKPiAtCWludCBudW1fdGhyZWFkcyA9IHN5 c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pOwo+IC0Jc3RydWN0IGlndF9oZWxwZXJfcHJvY2Vz cyB0aHJhc2hlciA9IHt9Owo+IC0KPiAtCWlmIChmbGFncyAmIEhBTkcpCj4gLQkJaWd0X3JlcXVp cmVfaGFuZ19yaW5nKGZkLCBJOTE1X0VYRUNfQkxUKTsKPiAtCj4gLQlpZiAoZmxhZ3MgJiAoVEhS QVNIIHwgVEhSQVNIX0lOQUNUSVZFKSkgewo+IC0JCWlndF9mb3JrX2hlbHBlcigmdGhyYXNoZXIp IHsKPiAtCQkJdWludDY0X3QgdmFsOwo+IC0KPiAtCQkJdmFsID0gRFJPUF9SRVRJUkUgfCBEUk9Q X0JPVU5EIHwgRFJPUF9VTkJPVU5EOwo+IC0JCQlpZiAoIShmbGFncyAmIFRIUkFTSF9JTkFDVElW RSkpCj4gLQkJCQl2YWwgfD0gRFJPUF9BQ1RJVkUgfCBEUk9QX1NIUklOS19BTEw7Cj4gLQo+IC0J CQl3aGlsZSAoMSkgewo+IC0JCQkJdXNsZWVwKDEwMDApOwo+IC0JCQkJaWd0X2Ryb3BfY2FjaGVz X3NldChmZCwgdmFsKTsKPiAtCQkJfQo+IC0JCX0KPiAtCX0KPiAtCj4gLQlpZ3RfZm9yayhpLCBu dW1fdGhyZWFkcyAqIDQpIHsKPiAtCQkvKiByZS1jcmVhdGUgcHJvY2VzcyBsb2NhbCBkYXRhICov Cj4gLQkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiAtCQlidWZtZ3IgPSBk cm1faW50ZWxfYnVmbWdyX2dlbV9pbml0KGZkLCA0MDk2KTsKPiAtCQliYXRjaCA9IGludGVsX2Jh dGNoYnVmZmVyX2FsbG9jKGJ1Zm1nciwgZGV2aWQpOwo+IC0KPiAtCQlpZiAoZmxhZ3MgJiBJTlRF UlJVUFQpCj4gLQkJCWlndF9mb3JrX3NpZ25hbF9oZWxwZXIoKTsKPiAtCj4gLQkJZG9fdGVzdChm ZCwgZmxhZ3MgJiBGQVVMVElORywgZmxhZ3MgJiBIQU5HID8gYmNzX2hhbmcgOiBub19oYW5nKTsK PiAtCj4gLQkJaWYgKGZsYWdzICYgSU5URVJSVVBUKQo+IC0JCQlpZ3Rfc3RvcF9zaWduYWxfaGVs cGVyKCk7Cj4gLQl9Cj4gLQo+IC0JaWd0X3dhaXRjaGlsZHJlbigpOwo+IC0JaWYgKGZsYWdzICYg KFRIUkFTSCB8IFRIUkFTSF9JTkFDVElWRSkpCj4gLQkJaWd0X3N0b3BfaGVscGVyKCZ0aHJhc2hl cik7Cj4gLX0KPiAtCj4gLWludCBmZDsKPiAtCj4gLSNkZWZpbmUgTUFYX0JMVF9TSVpFIDEyOAo+ IC1pZ3RfbWFpbgo+IC17Cj4gLQltZW1zZXQoYmxvYiwgJ0EnLCBzaXplb2YoYmxvYikpOwo+IC0K PiAtCWlndF9maXh0dXJlIHsKPiAtCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwp Owo+IC0JCWlndF9yZXF1aXJlX2dlbShmZCk7Cj4gLQkJZ2VtX3JlcXVpcmVfYmxpdHRlcihmZCk7 Cj4gLQkJYnVmbWdyID0gZHJtX2ludGVsX2J1Zm1ncl9nZW1faW5pdChmZCwgNDA5Nik7Cj4gLQkJ LyogZGlzYWJsZSByZXVzZSwgb3RoZXJ3aXNlIHRoZSB0ZXN0IGZhaWxzICovCj4gLQkJLy9kcm1f aW50ZWxfYnVmbWdyX2dlbV9lbmFibGVfcmV1c2UoYnVmbWdyKTsKPiAtCQlkZXZpZCA9IGludGVs X2dldF9kcm1fZGV2aWQoZmQpOwo+IC0JCWJhdGNoID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxsb2Mo YnVmbWdyLCBkZXZpZCk7Cj4gLQl9Cj4gLQo+IC0JaWd0X3N1YnRlc3QoIm5vcm1hbCIpCj4gLQkJ ZG9fdGVzdChmZCwgZmFsc2UsIG5vX2hhbmcpOwo+IC0KPiAtCWlndF9zdWJ0ZXN0KCJmYXVsdGlu Zy1yZWxvYyIpCj4gLQkJZG9fdGVzdChmZCwgdHJ1ZSwgbm9faGFuZyk7Cj4gLQo+IC0JaWd0X2Zv cmtfc2lnbmFsX2hlbHBlcigpOwo+IC0JaWd0X3N1YnRlc3QoImludGVycnVwdGlibGUiKQo+IC0J CWRvX3Rlc3QoZmQsIGZhbHNlLCBub19oYW5nKTsKPiAtCj4gLQlpZ3Rfc3VidGVzdCgiaW50ZXJy dXB0aWJsZS1oYW5nIikKPiAtCQlkb190ZXN0KGZkLCBmYWxzZSwgYmNzX2hhbmcpOwo+IC0KPiAt CWlndF9zdWJ0ZXN0KCJmYXVsdGluZy1yZWxvYy1pbnRlcnJ1cHRpYmxlIikKPiAtCQlkb190ZXN0 KGZkLCB0cnVlLCBub19oYW5nKTsKPiAtCj4gLQlpZ3Rfc3VidGVzdCgiZmF1bHRpbmctcmVsb2Mt aW50ZXJydXB0aWJsZS1oYW5nIikKPiAtCQlkb190ZXN0KGZkLCB0cnVlLCBiY3NfaGFuZyk7Cj4g LQlpZ3Rfc3RvcF9zaWduYWxfaGVscGVyKCk7Cj4gLQo+IC0JZm9yICh1bnNpZ25lZCBmbGFncyA9 IDA7IGZsYWdzIDw9IEFMTF9GTEFHUzsgZmxhZ3MrKykgewo+IC0JCWlmICgoZmxhZ3MgJiBUSFJB U0gpICYmIChmbGFncyAmIFRIUkFTSF9JTkFDVElWRSkpCj4gLQkJCWNvbnRpbnVlOwo+IC0KPiAt CQlpZ3Rfc3VidGVzdF9mKCJmb3JrZWQlcyVzJXMlcyVzIiwKPiAtCQkJICAgICAgZmxhZ3MgJiBJ TlRFUlJVUFQgPyAiLWludGVycnVwdGlibGUiIDogIiIsCj4gLQkJCSAgICAgIGZsYWdzICYgRkFV TFRJTkcgPyAiLWZhdWx0aW5nLXJlbG9jIiA6ICIiLAo+IC0JCQkgICAgICBmbGFncyAmIFRIUkFT SCA/ICItdGhyYXNoaW5nIiA6ICIiLAo+IC0JCQkgICAgICBmbGFncyAmIFRIUkFTSF9JTkFDVElW RSA/ICItdGhyYXNoLWluYWN0aXZlIiA6ICIiLAo+IC0JCQkgICAgICBmbGFncyAmIEhBTkcgPyAi LWhhbmciOiAiIikKPiAtCQkJZG9fZm9ya2VkX3Rlc3QoZmQsIGZsYWdzKTsKPiAtCX0KPiAtCj4g LQlpZ3RfZml4dHVyZSB7Cj4gLQkJaW50ZWxfYmF0Y2hidWZmZXJfZnJlZShiYXRjaCk7Cj4gLQkJ ZHJtX2ludGVsX2J1Zm1ncl9kZXN0cm95KGJ1Zm1ncik7Cj4gLQo+IC0JCWNsb3NlKGZkKTsKPiAt CX0KPiAtfQo+IGRpZmYgLS1naXQgYS90ZXN0cy9tZXNvbi5idWlsZCBiL3Rlc3RzL21lc29uLmJ1 aWxkCj4gaW5kZXggNjI3ODNlMmNmLi5iYzEwYjY1NTAgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvbWVz b24uYnVpbGQKPiArKysgYi90ZXN0cy9tZXNvbi5idWlsZAo+IEBAIC0xODYsOCArMTg2LDYgQEAg aTkxNV9wcm9ncyA9IFsKPiAgCSdnZW1fcmVhZF9yZWFkX3NwZWVkJywKPiAgCSdnZW1fcmVhZHdy aXRlJywKPiAgCSdnZW1fcmVnX3JlYWQnLAo+IC0JJ2dlbV9yZWxvY19vdmVyZmxvdycsCj4gLQkn Z2VtX3JlbG9jX3ZzX2dwdScsCj4gIAknZ2VtX3JlbmRlcl9jb3B5JywKPiAgCSdnZW1fcmVuZGVy X2NvcHlfcmVkdXgnLAo+ICAJJ2dlbV9yZW5kZXJfbGluZWFyX2JsaXRzJywKPiAtLSAKPiAyLjI1 LjAKPgo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4g aWd0LWRldiBtYWlsaW5nIGxpc3QKPiBpZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0 dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxp bmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVk ZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK