From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Wentland, Harry" Subject: Re: [PATCH i-g-t] igt: add timeline test cases v2 Date: Fri, 14 Dec 2018 19:23:53 +0000 Message-ID: <42de691f-3631-49d4-2149-9cee0b338d03@amd.com> References: <20181211103735.26058-1-david1.zhou@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20181211103735.26058-1-david1.zhou-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US Content-ID: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Zhou, David(ChunMing)" , "Koenig, Christian" , "dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "intel-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , IGT development List-Id: dri-devel@lists.freedesktop.org T24gMjAxOC0xMi0xMSA1OjM3IGEubS4sIENodW5taW5nIFpob3Ugd3JvdGU6DQo+IHYyOiBhZGFw dCB0byBuZXcgdHJhbnNmZXIgaW9jdGwNCj4gDQo+IFNpZ25lZC1vZmYtYnk6IENodW5taW5nIFpo b3UgPGRhdmlkMS56aG91QGFtZC5jb20+DQoNCitpZ3QtZGV2DQoNCkkgdGhpbmsgaW50ZWwtZ2Z4 IHN0aWxsIHdvcmtzIGZvciBJR1QgZGV2ZWxvcG1lbnQgYnV0IG1vc3Qgb2YgdGhlIElHVCB3b3Jr IGhhcHBlbnMgb24gaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcgbm93Lg0KDQpIYXJyeQ0K DQo+IC0tLQ0KPiAgaW5jbHVkZS9kcm0tdWFwaS9kcm0uaCAgIHwgICAzMyArKw0KPiAgbGliL2ln dF9zeW5jb2JqLmMgICAgICAgIHwgIDIwNiArKysrKysrKw0KPiAgbGliL2lndF9zeW5jb2JqLmgg ICAgICAgIHwgICAxOSArDQo+ICB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgfCAgICAxICsNCj4g IHRlc3RzL3N5bmNvYmpfdGltZWxpbmUuYyB8IDEwMzIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysNCj4gIDUgZmlsZXMgY2hhbmdlZCwgMTI5MSBpbnNlcnRpb25zKCspDQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvc3luY29ial90aW1lbGluZS5jDQo+IA0KPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9kcm0tdWFwaS9kcm0uaCBiL2luY2x1ZGUvZHJtLXVhcGkvZHJtLmgN Cj4gaW5kZXggODVjNjg1YTIuLmRjZDI0NWQ5IDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2RybS11 YXBpL2RybS5oDQo+ICsrKyBiL2luY2x1ZGUvZHJtLXVhcGkvZHJtLmgNCj4gQEAgLTczMSw2ICs3 MzEsOCBAQCBzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlIHsNCj4gIA0KPiAgI2RlZmluZSBEUk1f U1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQUxMICgxIDw8IDApDQo+ICAjZGVmaW5lIERSTV9TWU5D T0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUICgxIDw8IDEpDQo+ICsvKiB3YWl0IGZvciB0 aW1lIHBvaW50IHRvIGJlY29tZSBhdmFpbGFibGUgKi8NCj4gKyNkZWZpbmUgRFJNX1NZTkNPQkpf V0FJVF9GTEFHU19XQUlUX0FWQUlMQUJMRSAoMSA8PCAyKQ0KPiAgc3RydWN0IGRybV9zeW5jb2Jq X3dhaXQgew0KPiAgCV9fdTY0IGhhbmRsZXM7DQo+ICAJLyogYWJzb2x1dGUgdGltZW91dCAqLw0K PiBAQCAtNzQxLDExICs3NDMsMzggQEAgc3RydWN0IGRybV9zeW5jb2JqX3dhaXQgew0KPiAgCV9f dTMyIHBhZDsNCj4gIH07DQo+ICANCj4gK3N0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0 IHsNCj4gKyAgICAgICAgX191NjQgaGFuZGxlczsNCj4gKyAgICAgICAgLyogd2FpdCBvbiBzcGVj aWZpYyB0aW1lbGluZSBwb2ludCBmb3IgZXZlcnkgaGFuZGxlcyovDQo+ICsgICAgICAgIF9fdTY0 IHBvaW50czsNCj4gKyAgICAgICAgLyogYWJzb2x1dGUgdGltZW91dCAqLw0KPiArICAgICAgICBf X3M2NCB0aW1lb3V0X25zZWM7DQo+ICsgICAgICAgIF9fdTMyIGNvdW50X2hhbmRsZXM7DQo+ICsg ICAgICAgIF9fdTMyIGZsYWdzOw0KPiArICAgICAgICBfX3UzMiBmaXJzdF9zaWduYWxlZDsgLyog b25seSB2YWxpZCB3aGVuIG5vdCB3YWl0aW5nIGFsbCAqLw0KPiArICAgICAgICBfX3UzMiBwYWQ7 DQo+ICt9Ow0KPiArDQo+ICBzdHJ1Y3QgZHJtX3N5bmNvYmpfYXJyYXkgew0KPiAgCV9fdTY0IGhh bmRsZXM7DQo+ICAJX191MzIgY291bnRfaGFuZGxlczsNCj4gIAlfX3UzMiBwYWQ7DQo+ICB9Ow0K PiArc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IHsNCj4gKyAgICAgICBfX3U2NCBo YW5kbGVzOw0KPiArICAgICAgIF9fdTY0IHBvaW50czsNCj4gKyAgICAgICBfX3UzMiBjb3VudF9o YW5kbGVzOw0KPiArICAgICAgIF9fdTMyIHBhZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBkcm1f c3luY29ial90cmFuc2ZlciB7DQo+ICsgICAgICAgIF9fdTMyIHNyY19oYW5kbGU7DQo+ICsgICAg ICAgIF9fdTMyIGRzdF9oYW5kbGU7DQo+ICsgICAgICAgIF9fdTY0IHNyY19wb2ludDsNCj4gKyAg ICAgICAgX191NjQgZHN0X3BvaW50Ow0KPiArICAgICAgICBfX3UzMiBmbGFnczsNCj4gKyAgICAg ICAgX191MzIgcGFkOw0KPiArfTsNCj4gIA0KPiAgLyogUXVlcnkgY3VycmVudCBzY2Fub3V0IHNl cXVlbmNlIG51bWJlciAqLw0KPiAgc3RydWN0IGRybV9jcnRjX2dldF9zZXF1ZW5jZSB7DQo+IEBA IC05MDIsNiArOTMxLDEwIEBAIGV4dGVybiAiQyIgew0KPiAgI2RlZmluZSBEUk1fSU9DVExfTU9E RV9MSVNUX0xFU1NFRVMJRFJNX0lPV1IoMHhDNywgc3RydWN0IGRybV9tb2RlX2xpc3RfbGVzc2Vl cykNCj4gICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VUX0xFQVNFCURSTV9JT1dSKDB4QzgsIHN0 cnVjdCBkcm1fbW9kZV9nZXRfbGVhc2UpDQo+ICAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX1JFVk9L RV9MRUFTRQlEUk1fSU9XUigweEM5LCBzdHJ1Y3QgZHJtX21vZGVfcmV2b2tlX2xlYXNlKQ0KPiAr I2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlUIERSTV9JT1dSKDB4Q0EsIHN0 cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0KQ0KPiArI2RlZmluZSBEUk1fSU9DVExfU1lO Q09CSl9RVUVSWSAgICAgICAgIERSTV9JT1dSKDB4Q0IsIHN0cnVjdCBkcm1fc3luY29ial90aW1l bGluZV9hcnJheSkNCj4gKyNkZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfVFJBTlNGRVIgICAgRFJN X0lPV1IoMHhDQywgc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyKQ0KPiArI2RlZmluZSBEUk1f SU9DVExfU1lOQ09CSl9USU1FTElORV9TSUdOQUwgICAgRFJNX0lPV1IoMHhDRCwgc3RydWN0IGRy bV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5KQ0KPiAgDQo+ICAvKioNCj4gICAqIERldmljZSBzcGVj aWZpYyBpb2N0bHMgc2hvdWxkIG9ubHkgYmUgaW4gdGhlaXIgcmVzcGVjdGl2ZSBoZWFkZXJzDQo+ IGRpZmYgLS1naXQgYS9saWIvaWd0X3N5bmNvYmouYyBiL2xpYi9pZ3Rfc3luY29iai5jDQo+IGlu ZGV4IGQ5MTE0Y2E4Li5lZmEyYWRjNCAxMDA2NDQNCj4gLS0tIGEvbGliL2lndF9zeW5jb2JqLmMN Cj4gKysrIGIvbGliL2lndF9zeW5jb2JqLmMNCj4gQEAgLTI4NiwzICsyODYsMjA5IEBAIHN5bmNv Ympfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50KQ0KPiAg ew0KPiAgCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3NpZ25hbChmZCwgaGFuZGxlcywgY291bnQp LCAwKTsNCj4gIH0NCj4gKw0KPiArc3RhdGljIGludA0KPiArX19zeW5jb2JqX3RpbWVsaW5lX3Np Z25hbChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLCB1aW50MzJf dCBjb3VudCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJy YXkgPSB7IDAgfTsNCj4gKwlpbnQgZXJyID0gMDsNCj4gKw0KPiArCWFycmF5LmhhbmRsZXMgPSB0 b191c2VyX3BvaW50ZXIoaGFuZGxlcyk7DQo+ICsJYXJyYXkucG9pbnRzID0gdG9fdXNlcl9wb2lu dGVyKHBvaW50cyk7DQo+ICsJYXJyYXkuY291bnRfaGFuZGxlcyA9IGNvdW50Ow0KPiArCWlmIChk cm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAmYXJyYXkpKQ0K PiArCQllcnIgPSAtZXJybm87DQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgKiBzeW5jb2JqX3NpZ25hbDoNCj4gKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3Iu DQo+ICsgKiBAaGFuZGxlczogQXJyYXkgb2Ygc3luY29iaiBoYW5kbGVzIHRvIHNpZ25hbA0KPiAr ICogQHBvaW50czogTGlzdCBvZiBwb2ludCBvZiBoYW5kbGVzIHRvIHNpZ25hbC4NCj4gKyAqIEBj b3VudDogQ291bnQgb2Ygc3luY29iaiBoYW5kbGVzLg0KPiArICoNCj4gKyAqIFNpZ25hbCBhIHNl dCBvZiBzeW5jb2Jqcy4NCj4gKyAqLw0KPiArdm9pZA0KPiArc3luY29ial90aW1lbGluZV9zaWdu YWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBvaW50cywgdWludDMyX3Qg Y291bnQpDQo+ICt7DQo+ICsJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfc2lnbmFs KGZkLCBoYW5kbGVzLCBwb2ludHMsIGNvdW50KSwgMCk7DQo+ICt9DQo+ICtpbnQNCj4gK19fc3lu Y29ial90aW1lbGluZV93YWl0X2lvY3RsKGludCBmZCwgc3RydWN0IGRybV9zeW5jb2JqX3RpbWVs aW5lX3dhaXQgKmFyZ3MpDQo+ICt7DQo+ICsJaW50IGVyciA9IDA7DQo+ICsJaWYgKGRybUlvY3Rs KGZkLCBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlULCBhcmdzKSkNCj4gKwkJZXJyID0g LWVycm5vOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICtzdGF0aWMgaW50DQo+ICtfX3N5bmNv YmpfdGltZWxpbmVfd2FpdChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9p bnRzLA0KPiArCQkJdW5zaWduZWQgbnVtX2hhbmRsZXMsDQo+ICsJCQlpbnQ2NF90IHRpbWVvdXRf bnNlYywgdW5zaWduZWQgZmxhZ3MsDQo+ICsJCQl1aW50MzJfdCAqZmlyc3Rfc2lnbmFsZWQpDQo+ ICt7DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgYXJnczsNCj4gKwlpbnQg cmV0Ow0KPiArDQo+ICsJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKGhhbmRsZXMpOw0K PiArCWFyZ3MucG9pbnRzID0gKHVpbnQ2NF90KXRvX3VzZXJfcG9pbnRlcihwb2ludHMpOw0KPiAr CWFyZ3MudGltZW91dF9uc2VjID0gdGltZW91dF9uc2VjOw0KPiArCWFyZ3MuY291bnRfaGFuZGxl cyA9IG51bV9oYW5kbGVzOw0KPiArCWFyZ3MuZmxhZ3MgPSBmbGFnczsNCj4gKwlhcmdzLmZpcnN0 X3NpZ25hbGVkID0gMDsNCj4gKwlhcmdzLnBhZCA9IDA7DQo+ICsNCj4gKwlyZXQgPSBkcm1Jb2N0 bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfV0FJVCwgJmFyZ3MpOw0KPiArCWlmIChy ZXQgPCAwKQ0KPiArCQlyZXR1cm4gLWVycm5vOw0KPiArDQo+ICsJaWYgKGZpcnN0X3NpZ25hbGVk KQ0KPiArCQkqZmlyc3Rfc2lnbmFsZWQgPSBhcmdzLmZpcnN0X3NpZ25hbGVkOw0KPiArDQo+ICsJ cmV0dXJuIHJldDsNCj4gK30NCj4gK2ludA0KPiArc3luY29ial90aW1lbGluZV93YWl0X2Vycihp bnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLA0KPiArCQkJICB1bnNp Z25lZCBudW1faGFuZGxlcywNCj4gKwkJCSAgaW50NjRfdCB0aW1lb3V0X25zZWMsIHVuc2lnbmVk IGZsYWdzKQ0KPiArew0KPiArCXJldHVybiBfX3N5bmNvYmpfdGltZWxpbmVfd2FpdChmZCwgaGFu ZGxlcywgcG9pbnRzLCBudW1faGFuZGxlcywNCj4gKwkJCQkgICAgICAgdGltZW91dF9uc2VjLCBm bGFncywgTlVMTCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogc3luY29ial90aW1lbGluZV93 YWl0Og0KPiArICogQGZkOiBUaGUgRFJNIGZpbGUgZGVzY3JpcHRvcg0KPiArICogQGhhbmRsZXM6 IExpc3Qgb2Ygc3luY29iaiBoYW5kbGVzIHRvIHdhaXQgZm9yLg0KPiArICogQHBvaW50czogTGlz dCBvZiBwb2ludCBvZiBoYW5kbGVzIHRvIHdhaXQgZm9yLg0KPiArICogQG51bV9oYW5kbGVzOiBD b3VudCBvZiBoYW5kbGVzDQo+ICsgKiBAdGltZW91dF9uc2VjOiBBYnNvbHV0ZSB3YWl0IHRpbWVv dXQgaW4gbmFub3NlY29uZHMuDQo+ICsgKiBAZmxhZ3M6IFdhaXQgaW9jdGwgZmxhZ3MuDQo+ICsg KiBAZmlyc3Rfc2lnbmFsZWQ6IFJldHVybmVkIGhhbmRsZSBmb3IgZmlyc3Qgc2lnbmFsZWQgc3lu Y29iai4NCj4gKyAqDQo+ICsgKiBXYWl0cyBpbiB0aGUga2VybmVsIGZvciBhbnkvYWxsIHRoZSBy ZXF1ZXN0ZWQgc3luY29ianMgdGltZWxpbmUgcG9pbnQNCj4gKyAqIHVzaW5nIHRoZSB0aW1lb3V0 IGFuZCBmbGFncy4NCj4gKyAqIFJldHVybnM6IGJvb2wgdmFsdWUgLSBmYWxzZSA9IHRpbWVkb3V0 LCB0cnVlID0gc2lnbmFsZWQNCj4gKyAqLw0KPiArYm9vbA0KPiArc3luY29ial90aW1lbGluZV93 YWl0KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsDQo+ICsJCSAg ICAgIHVuc2lnbmVkIG51bV9oYW5kbGVzLA0KPiArCQkgICAgICBpbnQ2NF90IHRpbWVvdXRfbnNl YywgdW5zaWduZWQgZmxhZ3MsDQo+ICsJCSAgICAgIHVpbnQzMl90ICpmaXJzdF9zaWduYWxlZCkN Cj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gX19zeW5jb2JqX3RpbWVsaW5lX3dh aXQoZmQsIGhhbmRsZXMsIHBvaW50cywgbnVtX2hhbmRsZXMsDQo+ICsJCQkJICAgICAgdGltZW91 dF9uc2VjLCBmbGFncywgZmlyc3Rfc2lnbmFsZWQpOw0KPiArCWlmIChyZXQgPT0gLUVUSU1FKQ0K PiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOw0KPiArDQo+ICsJ cmV0dXJuIHRydWU7DQo+ICsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArX19zeW5jb2Jq X3RpbWVsaW5lX3F1ZXJ5KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICoqcG9p bnRzLA0KPiArCQkJIHVpbnQzMl90IGhhbmRsZV9jb3VudCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJt X3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJnczsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJYXJn cy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKGhhbmRsZXMpOw0KPiArCWFyZ3MucG9pbnRzID0g KHVpbnQ2NF90KXRvX3VzZXJfcG9pbnRlcihwb2ludHMpOw0KPiArCWFyZ3MuY291bnRfaGFuZGxl cyA9IGhhbmRsZV9jb3VudDsNCj4gKwlhcmdzLnBhZCA9IDA7DQo+ICsNCj4gKwlyZXQgPSBkcm1J b2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfUVVFUlksICZhcmdzKTsNCj4gKwlpZiAocmV0KQ0K PiArCQlyZXR1cm4gcmV0Ow0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAq IHN5bmNvYmpfdGltZWxpbmVfcXVlcnk6DQo+ICsgKiBAZmQ6IFRoZSBEUk0gZmlsZSBkZXNjcmlw dG9yLg0KPiArICogQGhhbmRsZXM6IEFycmF5IG9mIHN5bmNvYmogaGFuZGxlcy4NCj4gKyAqIEBw b2ludHM6IEFycmF5IG9mIHN5bmNvYmogcG9pbnRzIHF1ZXJpZWQuDQo+ICsgKiBAY291bnQ6IENv dW50IG9mIHN5bmNvYmogaGFuZGxlcy4NCj4gKyAqDQo+ICsgKiBxdWVyeSBhIHNldCBvZiBzeW5j b2Jqcy4NCj4gKyAqLw0KPiArdm9pZA0KPiArc3luY29ial90aW1lbGluZV9xdWVyeShpbnQgZmQs IHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqKnBvaW50cywNCj4gKwkJICAgICAgIHVpbnQz Ml90IGNvdW50KQ0KPiArew0KPiArCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3F1 ZXJ5KGZkLCBoYW5kbGVzLCBwb2ludHMsIGNvdW50KSwgMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQNCj4gK19fc3luY29ial9iaW5hcnlfdG9fdGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0 aW1lbGluZV9oYW5kbGUsDQo+ICsJCQkgICAgIHVpbnQ2NF90IHBvaW50LCB1aW50MzJfdCBiaW5h cnlfaGFuZGxlKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fc3luY29ial90cmFuc2ZlciBhcmdzOw0K PiArDQo+ICsJYXJncy5zcmNfaGFuZGxlID0gYmluYXJ5X2hhbmRsZTsNCj4gKwlhcmdzLmRzdF9o YW5kbGUgPSB0aW1lbGluZV9oYW5kbGU7DQo+ICsJYXJncy5zcmNfcG9pbnQgPSAwOw0KPiArCWFy Z3MuZHN0X3BvaW50ID0gcG9pbnQ7DQo+ICsJYXJncy5mbGFncyA9IDA7DQo+ICsJYXJncy5wYWQg PSAwOw0KPiArCXJldHVybiBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVFJBTlNGRVIs ICZhcmdzKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBzeW5jb2JqX2JpbmFyeV90b190aW1l bGluZToNCj4gKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3IuDQo+ICsgKiBAdGltZWxp bmVfaGFuZGxlczogQXJyYXkgb2YgdGltZWxpbmUgc3luY29iaiBoYW5kbGVzLg0KPiArICogQHBv aW50OiBzeW5jb2JqIHBvaW50Lg0KPiArICogQGJpbmFyeV9oYW5kbGU6IEFycmF5IG9mIGJpbmFy eSBzeW5jb2JqIGhhbmRsZXMuDQo+ICsgKg0KPiArICogcXVlcnkgYSBzZXQgb2Ygc3luY29ianMu DQo+ICsgKi8NCj4gK3ZvaWQNCj4gK3N5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lKGludCBmZCwg dWludDMyX3QgdGltZWxpbmVfaGFuZGxlLA0KPiArCQkJICAgdWludDY0X3QgcG9pbnQsIHVpbnQz Ml90IGJpbmFyeV9oYW5kbGUpDQo+ICt7DQo+ICsJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfYmlu YXJ5X3RvX3RpbWVsaW5lKGZkLCB0aW1lbGluZV9oYW5kbGUsIHBvaW50LA0KPiArCQkJCQkJICAg YmluYXJ5X2hhbmRsZSksIDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtfX3N5bmNv YmpfdGltZWxpbmVfdG9fYmluYXJ5KGludCBmZCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSwNCj4g KwkJCSAgICAgdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLA0KPiArCQkJICAgICB1aW50NjRfdCBw b2ludCwNCj4gKwkJCSAgICAgdWludDMyX3QgZmxhZ3MpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9z eW5jb2JqX3RyYW5zZmVyIGFyZ3M7DQo+ICsNCj4gKwlhcmdzLmRzdF9oYW5kbGUgPSBiaW5hcnlf aGFuZGxlOw0KPiArCWFyZ3Muc3JjX2hhbmRsZSA9IHRpbWVsaW5lX2hhbmRsZTsNCj4gKwlhcmdz LmRzdF9wb2ludCA9IDA7DQo+ICsJYXJncy5zcmNfcG9pbnQgPSBwb2ludDsNCj4gKwlhcmdzLmZs YWdzID0gZmxhZ3M7DQo+ICsJYXJncy5wYWQgPSAwOw0KPiArCXJldHVybiBkcm1Jb2N0bChmZCwg RFJNX0lPQ1RMX1NZTkNPQkpfVFJBTlNGRVIsICZhcmdzKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgKiBzeW5jb2JqX2JpbmFyeV90b190aW1lbGluZToNCj4gKyAqIEBmZDogVGhlIERSTSBmaWxl IGRlc2NyaXB0b3IuDQo+ICsgKiBAdGltZWxpbmVfaGFuZGxlczogQXJyYXkgb2YgdGltZWxpbmUg c3luY29iaiBoYW5kbGVzLg0KPiArICogQHBvaW50OiBzeW5jb2JqIHBvaW50Lg0KPiArICogQGJp bmFyeV9oYW5kbGU6IEFycmF5IG9mIGJpbmFyeSBzeW5jb2JqIGhhbmRsZXMuDQo+ICsgKg0KPiAr ICogcXVlcnkgYSBzZXQgb2Ygc3luY29ianMuDQo+ICsgKi8NCj4gK3ZvaWQNCj4gK3N5bmNvYmpf dGltZWxpbmVfdG9fYmluYXJ5KGludCBmZCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSwNCj4gKwkJ CSAgIHVpbnQzMl90IHRpbWVsaW5lX2hhbmRsZSwNCj4gKwkJCSAgIHVpbnQ2NF90IHBvaW50LA0K PiArCQkJICAgdWludDMyX3QgZmxhZ3MpDQo+ICt7DQo+ICsJaWd0X2Fzc2VydF9lcShfX3N5bmNv YmpfdGltZWxpbmVfdG9fYmluYXJ5KGZkLCBiaW5hcnlfaGFuZGxlLA0KPiArCQkJCQkJICAgdGlt ZWxpbmVfaGFuZGxlLCBwb2ludCwNCj4gKwkJCQkJCSAgIGZsYWdzKSwgMCk7DQo+ICt9DQo+IGRp ZmYgLS1naXQgYS9saWIvaWd0X3N5bmNvYmouaCBiL2xpYi9pZ3Rfc3luY29iai5oDQo+IGluZGV4 IDQ0ZDEzNzhkLi4xNzVlNTAyNyAxMDA2NDQNCj4gLS0tIGEvbGliL2lndF9zeW5jb2JqLmgNCj4g KysrIGIvbGliL2lndF9zeW5jb2JqLmgNCj4gQEAgLTY1LDcgKzY1LDI2IEBAIGludCBzeW5jb2Jq X3dhaXRfZXJyKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50LA0KPiAg Ym9vbCBzeW5jb2JqX3dhaXQoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDMyX3QgY291 bnQsDQo+ICAJCSAgdWludDY0X3QgYWJzX3RpbWVvdXRfbnNlYywgdWludDMyX3QgZmxhZ3MsDQo+ ICAJCSAgdWludDMyX3QgKmZpcnN0X3NpZ25hbGVkKTsNCj4gK2ludCBfX3N5bmNvYmpfdGltZWxp bmVfd2FpdF9pb2N0bChpbnQgZmQsDQo+ICsJCQkJICBzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxp bmVfd2FpdCAqYXJncyk7DQo+ICtib29sIHN5bmNvYmpfdGltZWxpbmVfd2FpdChpbnQgZmQsIHVp bnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLA0KPiArCQkJICAgdW5zaWduZWQgbnVt X2hhbmRsZXMsDQo+ICsJCQkgICBpbnQ2NF90IHRpbWVvdXRfbnNlYywgdW5zaWduZWQgZmxhZ3Ms DQo+ICsJCQkgICB1aW50MzJfdCAqZmlyc3Rfc2lnbmFsZWQpOw0KPiAraW50IHN5bmNvYmpfdGlt ZWxpbmVfd2FpdF9lcnIoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBvaW50 cywNCj4gKwkJCSAgICAgIHVuc2lnbmVkIG51bV9oYW5kbGVzLA0KPiArCQkJICAgICAgaW50NjRf dCB0aW1lb3V0X25zZWMsIHVuc2lnbmVkIGZsYWdzKTsNCj4gIHZvaWQgc3luY29ial9yZXNldChp bnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50MzJfdCBjb3VudCk7DQo+ICB2b2lkIHN5bmNv Ympfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50KTsNCj4g K3ZvaWQgc3luY29ial90aW1lbGluZV9xdWVyeShpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1 aW50NjRfdCAqKnBvaW50cywNCj4gKwkJCSAgICB1aW50MzJfdCBjb3VudCk7DQo+ICt2b2lkIHN5 bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lKGludCBmZCwgdWludDMyX3QgdGltZWxpbmVfaGFuZGxl LA0KPiArCQkJCXVpbnQ2NF90IHBvaW50LCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlKTsNCj4gK3Zv aWQgc3luY29ial90aW1lbGluZV90b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlfaGFu ZGxlLA0KPiArCQkJCXVpbnQzMl90IHRpbWVsaW5lX2hhbmRsZSwNCj4gKwkJCQl1aW50NjRfdCBw b2ludCwNCj4gKwkJCQl1aW50MzJfdCBmbGFncyk7DQo+ICt2b2lkIHN5bmNvYmpfdGltZWxpbmVf c2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsDQo+ICsJ CQkgICAgIHVpbnQzMl90IGNvdW50KTsNCj4gIA0KPiAgI2VuZGlmIC8qIElHVF9TWU5DT0JKX0gg Ki8NCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQN Cj4gaW5kZXggYjhhNmU2MWIuLmJkZGMyMjNjIDEwMDY0NA0KPiAtLS0gYS90ZXN0cy9tZXNvbi5i dWlsZA0KPiArKysgYi90ZXN0cy9tZXNvbi5idWlsZA0KPiBAQCAtNzcsNiArNzcsNyBAQCB0ZXN0 X3Byb2dzID0gWw0KPiAgCSdzd19zeW5jJywNCj4gIAknc3luY29ial9iYXNpYycsDQo+ICAJJ3N5 bmNvYmpfd2FpdCcsDQo+ICsJJ3N5bmNvYmpfdGltZWxpbmUnLA0KPiAgCSd0ZW1wbGF0ZScsDQo+ ICAJJ3Rvb2xzX3Rlc3QnLA0KPiAgCSd2M2RfZ2V0X2JvX29mZnNldCcsDQo+IGRpZmYgLS1naXQg YS90ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMgYi90ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAuLjUwNWZkOWVkDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvdGVzdHMvc3luY29ial90aW1lbGluZS5jDQo+IEBAIC0wLDAgKzEs MTAzMiBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9u DQo+ICsgKg0KPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQ0KPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gKyAqDQo+ICsgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 DQo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+ICsgKiBTb2Z0d2FyZS4NCj4gKyAqDQo+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUg0KPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+ICsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwNCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORw0KPiAr ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUw0KPiArICogSU4gVEhFIFNPRlRXQVJFLg0KPiArICovDQo+ ICsNCj4gKyNpbmNsdWRlICJpZ3QuaCINCj4gKyNpbmNsdWRlICJzd19zeW5jLmgiDQo+ICsjaW5j bHVkZSAiaWd0X3N5bmNvYmouaCINCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4NCj4gKyNpbmNsdWRl IDx0aW1lLmg+DQo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+DQo+ICsjaW5jbHVkZSA8cHRocmVh ZC5oPg0KPiArI2luY2x1ZGUgPHNpZ25hbC5oPg0KPiArI2luY2x1ZGUgImRybS5oIg0KPiArDQo+ ICtJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdHMgZm9yIHRoZSBkcm0gdGltZWxpbmUgc3luYyBv YmplY3QgQVBJIik7DQo+ICsNCj4gKy8qIE9uZSB0ZW50aCBvZiBhIHNlY29uZCAqLw0KPiArI2Rl ZmluZSBTSE9SVF9USU1FX05TRUMgMTAwMDAwMDAwdWxsDQo+ICsNCj4gKyNkZWZpbmUgTlNFQ1Nf UEVSX1NFQyAxMDAwMDAwMDAwdWxsDQo+ICsNCj4gK3N0YXRpYyB1aW50NjRfdA0KPiArZ2V0dGlt ZV9ucyh2b2lkKQ0KPiArew0KPiArCXN0cnVjdCB0aW1lc3BlYyBjdXJyZW50Ow0KPiArCWNsb2Nr X2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmY3VycmVudCk7DQo+ICsJcmV0dXJuICh1aW50NjRf dCljdXJyZW50LnR2X3NlYyAqIE5TRUNTX1BFUl9TRUMgKyBjdXJyZW50LnR2X25zZWM7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtzbGVlcF9uc2VjKHVpbnQ2NF90IHRpbWVfbnNlYykN Cj4gK3sNCj4gKwlzdHJ1Y3QgdGltZXNwZWMgdDsNCj4gKwl0LnR2X3NlYyA9IHRpbWVfbnNlYyAv IE5TRUNTX1BFUl9TRUM7DQo+ICsJdC50dl9uc2VjID0gdGltZV9uc2VjICUgTlNFQ1NfUEVSX1NF QzsNCj4gKwlpZ3RfYXNzZXJ0X2VxKG5hbm9zbGVlcCgmdCwgTlVMTCksIDApOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdWludDY0X3QNCj4gK3Nob3J0X3RpbWVvdXQodm9pZCkNCj4gK3sNCj4gKwly ZXR1cm4gZ2V0dGltZV9ucygpICsgU0hPUlRfVElNRV9OU0VDOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50DQo+ICtzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGludCBmZCwgdWludDMyX3QgaGFuZGxl LCB1aW50NjRfdCBwb2ludCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlOw0K PiArCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsJaW50IHRp bWVsaW5lLCBmZW5jZTsNCj4gKw0KPiArCXRpbWVsaW5lID0gc3dfc3luY190aW1lbGluZV9jcmVh dGUoKTsNCj4gKwlmZW5jZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlX2ZlbmNlKHRpbWVsaW5l LCAxKTsNCj4gKwlzeW5jb2JqX2ltcG9ydF9zeW5jX2ZpbGUoZmQsIHN5bmNvYmosIGZlbmNlKTsN Cj4gKwlzeW5jb2JqX2JpbmFyeV90b190aW1lbGluZShmZCwgaGFuZGxlLCBwb2ludCwgc3luY29i aik7DQo+ICsJY2xvc2UoZmVuY2UpOw0KPiArDQo+ICsJc3luY29ial9kZXN0cm95KGZkLCBzeW5j b2JqKTsNCj4gKwlyZXR1cm4gdGltZWxpbmU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ ICtzeW5jb2JqX3RyaWdnZXIoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHBvaW50 KQ0KPiArew0KPiArCWludCB0aW1lbGluZSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIGhh bmRsZSwgcG9pbnQpOw0KPiArCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lLCAxKTsNCj4g KwljbG9zZSh0aW1lbGluZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB0aW1lcl90DQo+ICtzZXRf dGltZXIodm9pZCAoKmNiKSh1bmlvbiBzaWd2YWwpLCB2b2lkICpwdHIsIGludCBpLCB1aW50NjRf dCBuc2VjKQ0KPiArew0KPiArICAgICAgICB0aW1lcl90IHRpbWVyOw0KPiArICAgICAgICBzdHJ1 Y3Qgc2lnZXZlbnQgc2V2Ow0KPiArICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyBpdHM7DQo+ICsN Cj4gKyAgICAgICAgbWVtc2V0KCZzZXYsIDAsIHNpemVvZihzZXYpKTsNCj4gKyAgICAgICAgc2V2 LnNpZ2V2X25vdGlmeSA9IFNJR0VWX1RIUkVBRDsNCj4gKwlpZiAocHRyKQ0KPiArCQlzZXYuc2ln ZXZfdmFsdWUuc2l2YWxfcHRyID0gcHRyOw0KPiArCWVsc2UNCj4gKwkJc2V2LnNpZ2V2X3ZhbHVl LnNpdmFsX2ludCA9IGk7DQo+ICsgICAgICAgIHNldi5zaWdldl9ub3RpZnlfZnVuY3Rpb24gPSBj YjsNCj4gKyAgICAgICAgaWd0X2Fzc2VydCh0aW1lcl9jcmVhdGUoQ0xPQ0tfTU9OT1RPTklDLCAm c2V2LCAmdGltZXIpID09IDApOw0KPiArDQo+ICsgICAgICAgIG1lbXNldCgmaXRzLCAwLCBzaXpl b2YoaXRzKSk7DQo+ICsgICAgICAgIGl0cy5pdF92YWx1ZS50dl9zZWMgPSBuc2VjIC8gTlNFQ19Q RVJfU0VDOw0KPiArICAgICAgICBpdHMuaXRfdmFsdWUudHZfbnNlYyA9IG5zZWMgJSBOU0VDX1BF Ul9TRUM7DQo+ICsgICAgICAgIGlndF9hc3NlcnQodGltZXJfc2V0dGltZSh0aW1lciwgMCwgJml0 cywgTlVMTCkgPT0gMCk7DQo+ICsNCj4gKwlyZXR1cm4gdGltZXI7DQo+ICt9DQo+ICsNCj4gK3N0 cnVjdCBmZF9oYW5kbGVfcGFpciB7DQo+ICsJaW50IGZkOw0KPiArCXVpbnQzMl90IGhhbmRsZTsN Cj4gKwl1aW50NjRfdCBwb2ludDsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0aW1l bGluZV9pbmNfZnVuYyh1bmlvbiBzaWd2YWwgc2lndmFsKQ0KPiArew0KPiArCXN3X3N5bmNfdGlt ZWxpbmVfaW5jKHNpZ3ZhbC5zaXZhbF9pbnQsIDEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZA0KPiArc3luY29ial90cmlnZ2VyX2ZyZWVfcGFpcl9mdW5jKHVuaW9uIHNpZ3ZhbCBzaWd2YWwp DQo+ICt7DQo+ICsJc3RydWN0IGZkX2hhbmRsZV9wYWlyICpwYWlyID0gc2lndmFsLnNpdmFsX3B0 cjsNCj4gKwlzeW5jb2JqX3RyaWdnZXIocGFpci0+ZmQsIHBhaXItPmhhbmRsZSwgcGFpci0+cG9p bnQpOw0KPiArCWZyZWUocGFpcik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB0aW1lcl90DQo+ICtz eW5jb2JqX3RyaWdnZXJfZGVsYXllZChpbnQgZmQsIHVpbnQzMl90IHN5bmNvYmosIHVpbnQ2NF90 IHBvaW50LCB1aW50NjRfdCBuc2VjKQ0KPiArew0KPiArCXN0cnVjdCBmZF9oYW5kbGVfcGFpciAq cGFpciA9IG1hbGxvYyhzaXplb2YoKnBhaXIpKTsNCj4gKw0KPiArCXBhaXItPmZkID0gZmQ7DQo+ ICsJcGFpci0+aGFuZGxlID0gc3luY29iajsNCj4gKwlwYWlyLT5wb2ludCA9IHN5bmNvYmo7DQo+ ICsNCj4gKwlyZXR1cm4gc2V0X3RpbWVyKHN5bmNvYmpfdHJpZ2dlcl9mcmVlX3BhaXJfZnVuYywg cGFpciwgMCwgbnNlYyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3dhaXRf YmFkX2ZsYWdzKGludCBmZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVf d2FpdCB3YWl0ID0geyAwIH07DQo+ICsJd2FpdC5mbGFncyA9IDB4ZGVhZGJlZWY7DQo+ICsJaWd0 X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChmZCwgJndhaXQpLCAtRUlO VkFMKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rfd2FpdF96ZXJvX2hhbmRs ZXMoaW50IGZkKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdh aXQgPSB7IDAgfTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lv Y3RsKGZkLCAmd2FpdCksIC1FSU5WQUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr dGVzdF93YWl0X2lsbGVnYWxfaGFuZGxlKGludCBmZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5 bmNvYmpfdGltZWxpbmVfd2FpdCB3YWl0ID0geyAwIH07DQo+ICsJdWludDMyX3QgaGFuZGxlID0g MDsNCj4gKw0KPiArCXdhaXQuY291bnRfaGFuZGxlcyA9IDE7DQo+ICsJd2FpdC5oYW5kbGVzID0g dG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOw0KPiArCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3Rp bWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0KSwgLUVOT0VOVCk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkDQo+ICt0ZXN0X3F1ZXJ5X3plcm9faGFuZGxlcyhpbnQgZmQpDQo+ICt7DQo+ICsJ c3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFyZ3MgPSB7IDAgfTsNCj4gKwlpbnQg cmV0Ow0KPiArDQo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZ LCAmYXJncyk7DQo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gIEVJTlZBTCk7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3F1ZXJ5X2lsbGVnYWxfaGFuZGxl KGludCBmZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJn cyA9IHsgMCB9Ow0KPiArCXVpbnQzMl90IGhhbmRsZSA9IDA7DQo+ICsJaW50IHJldDsNCj4gKw0K PiArCWFyZ3MuY291bnRfaGFuZGxlcyA9IDE7DQo+ICsJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9w b2ludGVyKCZoYW5kbGUpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09C Sl9RVUVSWSwgJmFyZ3MpOw0KPiArCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVO T0VOVCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3F1ZXJ5X29uZV9pbGxl Z2FsX2hhbmRsZShpbnQgZmQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5l X2FycmF5IGFycmF5ID0geyAwIH07DQo+ICsJdWludDMyX3Qgc3luY29ianNbM107DQo+ICsJdWlu dDY0X3QgaW5pdGlhbF9wb2ludCA9IDE7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXN5bmNvYmpz WzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0KPiArCXN5bmNvYmpzWzFdID0gMDsNCj4gKwlz eW5jb2Jqc1syXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKw0KPiArCXN5bmNvYmpfdGlt ZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMF0sICZpbml0aWFsX3BvaW50LCAxKTsNCj4gKwlz eW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgJnN5bmNvYmpzWzJdLCAmaW5pdGlhbF9wb2ludCwg MSk7DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3lu Y29ianNbMF0sDQo+ICsJCQkJCQkmaW5pdGlhbF9wb2ludCwgMSwgMCwgMCksIDApOw0KPiArCWln dF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmpzWzJdLA0K PiArCQkJCQkJJmluaXRpYWxfcG9pbnQsIDEsIDAsIDApLCAwKTsNCj4gKw0KPiArCWFycmF5LmNv dW50X2hhbmRsZXMgPSAzOw0KPiArCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoc3lu Y29ianMpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9RVUVSWSwg JmFycmF5KTsNCj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpOw0K PiArDQo+ICsJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7DQo+ICsJc3luY29ial9k ZXN0cm95KGZkLCBzeW5jb2Jqc1syXSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0 ZXN0X3F1ZXJ5X2JhZF9wYWQoaW50IGZkKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fc3luY29ial90 aW1lbGluZV9hcnJheSBhcnJheSA9IHsgMCB9Ow0KPiArCXVpbnQzMl90IGhhbmRsZSA9IDA7DQo+ ICsJaW50IHJldDsNCj4gKw0KPiArCWFycmF5LnBhZCA9IDB4ZGVhZGJlZWY7DQo+ICsJYXJyYXku Y291bnRfaGFuZGxlcyA9IDE7DQo+ICsJYXJyYXkuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcigm aGFuZGxlKTsNCj4gKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfUVVFUlks ICZhcnJheSk7DQo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rfc2lnbmFsX3plcm9faGFuZGxlcyhp bnQgZmQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFyZ3Mg PSB7IDAgfTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9J T0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFyZ3MpOw0KPiArCWlndF9hc3NlcnQocmV0 ID09IC0xICYmIGVycm5vID09ICBFSU5WQUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0K PiArdGVzdF9zaWduYWxfaWxsZWdhbF9oYW5kbGUoaW50IGZkKQ0KPiArew0KPiArCXN0cnVjdCBk cm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdzID0geyAwIH07DQo+ICsJdWludDMyX3QgaGFu ZGxlID0gMDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJYXJncy5jb3VudF9oYW5kbGVzID0gMTsN Cj4gKwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7DQo+ICsJcmV0ID0g ZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFyZ3MpOw0K PiArCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3NpZ25hbF9pbGxlZ2FsX3BvaW50KGludCBmZCkNCj4g K3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJncyA9IHsgMCB9Ow0K PiArCXVpbnQzMl90IGhhbmRsZSA9IDE7DQo+ICsJdWludDY0X3QgcG9pbnQgPSAwOw0KPiArCWlu dCByZXQ7DQo+ICsNCj4gKwlhcmdzLmNvdW50X2hhbmRsZXMgPSAxOw0KPiArCWFyZ3MuaGFuZGxl cyA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsNCj4gKwlhcmdzLnBvaW50cyA9IHRvX3VzZXJf cG9pbnRlcigmcG9pbnQpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09C Sl9USU1FTElORV9TSUdOQUwsICZhcmdzKTsNCj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBl cnJubyA9PSBFTk9FTlQpOw0KPiArfQ0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rfc2lnbmFsX29u ZV9pbGxlZ2FsX2hhbmRsZShpbnQgZmQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3Rp bWVsaW5lX2FycmF5IGFycmF5ID0geyAwIH07DQo+ICsJdWludDMyX3Qgc3luY29ianNbM107DQo+ ICsJdWludDY0X3QgaW5pdGlhbF9wb2ludCA9IDE7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXN5 bmNvYmpzWzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0KPiArCXN5bmNvYmpzWzFdID0gMDsN Cj4gKwlzeW5jb2Jqc1syXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKw0KPiArCXN5bmNv YmpfdGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMF0sICZpbml0aWFsX3BvaW50LCAxKTsN Cj4gKwlzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgJnN5bmNvYmpzWzJdLCAmaW5pdGlhbF9w b2ludCwgMSk7DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZk LCAmc3luY29ianNbMF0sDQo+ICsJCQkJCQkmaW5pdGlhbF9wb2ludCwgMSwgMCwgMCksIDApOw0K PiArCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmpz WzJdLA0KPiArCQkJCQkJJmluaXRpYWxfcG9pbnQsIDEsIDAsIDApLCAwKTsNCj4gKw0KPiArCWFy cmF5LmNvdW50X2hhbmRsZXMgPSAzOw0KPiArCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50 ZXIoc3luY29ianMpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9U SU1FTElORV9TSUdOQUwsICZhcnJheSk7DQo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJy bm8gPT0gRU5PRU5UKTsNCj4gKw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMF0p Ow0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMl0pOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZA0KPiArdGVzdF9zaWduYWxfYmFkX3BhZChpbnQgZmQpDQo+ICt7DQo+ICsJc3Ry dWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFycmF5ID0geyAwIH07DQo+ICsJdWludDMy X3QgaGFuZGxlID0gMDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJYXJyYXkucGFkID0gMHhkZWFk YmVlZjsNCj4gKwlhcnJheS5jb3VudF9oYW5kbGVzID0gMTsNCj4gKwlhcnJheS5oYW5kbGVzID0g dG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9D VExfU1lOQ09CSl9USU1FTElORV9TSUdOQUwsICZhcnJheSk7DQo+ICsJaWd0X2Fzc2VydChyZXQg PT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4g K3Rlc3Rfc2lnbmFsX2FycmF5KGludCBmZCkNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2Jqc1s0 XTsNCj4gKwl1aW50NjRfdCBwb2ludHNbNF0gPSB7MSwgMSwgMSwgMH07DQo+ICsNCj4gKwlzeW5j b2Jqc1swXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKwlzeW5jb2Jqc1sxXSA9IHN5bmNv YmpfY3JlYXRlKGZkLCAwKTsNCj4gKwlzeW5jb2Jqc1syXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAw KTsNCj4gKwlzeW5jb2Jqc1szXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKw0KPiArCXN5 bmNvYmpfdGltZWxpbmVfc2lnbmFsKGZkLCBzeW5jb2JqcywgcG9pbnRzLCA0KTsNCj4gKwlpZ3Rf YXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsIHN5bmNvYmpzLA0KPiArCQkJ CQkJcG9pbnRzLCAzLCAwLCAwKSwgMCk7DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3dhaXRf ZXJyKGZkLCAmc3luY29ianNbM10sIDEsIDAsIDApLCAwKTsNCj4gKw0KPiArCXN5bmNvYmpfZGVz dHJveShmZCwgc3luY29ianNbMF0pOw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNb MV0pOw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMl0pOw0KPiArCXN5bmNvYmpf ZGVzdHJveShmZCwgc3luY29ianNbM10pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr dGVzdF90cmFuc2Zlcl9pbGxlZ2FsX2hhbmRsZShpbnQgZmQpDQo+ICt7DQo+ICsJc3RydWN0IGRy bV9zeW5jb2JqX3RyYW5zZmVyIGFyZ3MgPSB7IDAgfTsNCj4gKwl1aW50MzJfdCBoYW5kbGUgPSAw Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlhcmdzLnNyY19oYW5kbGUgPSB0b191c2VyX3BvaW50 ZXIoJmhhbmRsZSk7DQo+ICsJYXJncy5kc3RfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5k bGUpOw0KPiArCWFyZ3Muc3JjX3BvaW50ID0gMTsNCj4gKwlhcmdzLmRzdF9wb2ludCA9IDA7DQo+ ICsJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RSQU5TRkVSLCAmYXJncyk7 DQo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3RfdHJhbnNmZXJfYmFkX3BhZChpbnQgZmQpDQo+ICt7 DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyIGFyZyA9IHsgMCB9Ow0KPiArCXVpbnQz Ml90IGhhbmRsZSA9IDA7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWFyZy5wYWQgPSAweGRlYWRi ZWVmOw0KPiArCWFyZy5zcmNfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOw0KPiAr CWFyZy5kc3RfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOw0KPiArCXJldCA9IGRy bUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9UUkFOU0ZFUiwgJmFyZyk7DQo+ICsJaWd0X2Fz c2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsNCj4gK30NCj4gKw0KPiArI2RlZmlu ZSBXQUlUX0ZPUl9TVUJNSVQJCSgxIDw8IDApDQo+ICsjZGVmaW5lIFdBSVRfQUxMCQkoMSA8PCAx KQ0KPiArI2RlZmluZSBXQUlUX0FWQUlMQUJMRQkJKDEgPDwgMikNCj4gKyNkZWZpbmUgV0FJVF9V TlNVQk1JVFRFRAkoMSA8PCAzKQ0KPiArI2RlZmluZSBXQUlUX1NVQk1JVFRFRAkJKDEgPDwgNCkN Cj4gKyNkZWZpbmUgV0FJVF9TSUdOQUxFRAkJKDEgPDwgNSkNCj4gKyNkZWZpbmUgV0FJVF9GTEFH U19NQVgJCSgxIDw8IDYpIC0gMQ0KPiArDQo+ICtzdGF0aWMgdWludDMyX3QNCj4gK2ZsYWdzX2Zv cl90ZXN0X2ZsYWdzKHVpbnQzMl90IHRlc3RfZmxhZ3MpDQo+ICt7DQo+ICsJdWludDMyX3QgZmxh Z3MgPSAwOw0KPiArDQo+ICsJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpDQo+ICsJ CWZsYWdzIHw9IERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUOw0KPiArDQo+ ICsJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0FWQUlMQUJMRSkNCj4gKwkJZmxhZ3MgfD0gRFJNX1NZ TkNPQkpfV0FJVF9GTEFHU19XQUlUX0FWQUlMQUJMRTsNCj4gKw0KPiArCWlmICh0ZXN0X2ZsYWdz ICYgV0FJVF9BTEwpDQo+ICsJCWZsYWdzIHw9IERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9B TEw7DQo+ICsNCj4gKwlyZXR1cm4gZmxhZ3M7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ ICt0ZXN0X3NpbmdsZV93YWl0KGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncywgaW50IGV4cGVj dCkNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0K PiArCXVpbnQzMl90IGZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7DQo+ ICsJdWludDY0X3QgcG9pbnQgPSAxOw0KPiArCWludCB0aW1lbGluZSA9IC0xOw0KPiArDQo+ICsJ aWYgKHRlc3RfZmxhZ3MgJiAoV0FJVF9TVUJNSVRURUQgfCBXQUlUX1NJR05BTEVEKSkNCj4gKwkJ dGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2JqLCBwb2ludCk7DQo+ ICsNCj4gKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfU0lHTkFMRUQpDQo+ICsJCXN3X3N5bmNfdGlt ZWxpbmVfaW5jKHRpbWVsaW5lLCAxKTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZXEoc3luY29ial90 aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwgMSwNCj4gKwkJCQkJCTAsIGZs YWdzKSwgZXhwZWN0KTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93 YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwgMSwNCj4gKwkJCQkJCXNob3J0X3RpbWVvdXQo KSwgZmxhZ3MpLCBleHBlY3QpOw0KPiArDQo+ICsJaWYgKGV4cGVjdCAhPSAtRVRJTUUpIHsNCj4g KwkJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwg JnBvaW50LCAxLA0KPiArCQkJCQkJCVVJTlQ2NF9NQVgsIGZsYWdzKSwgZXhwZWN0KTsNCj4gKwl9 DQo+ICsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOw0KPiArCWlmICh0aW1lbGlu ZSAhPSAtMSkNCj4gKwkJY2xvc2UodGltZWxpbmUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZA0KPiArdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFn cykNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0K PiArCXVpbnQzMl90IGZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7DQo+ ICsJdWludDY0X3QgcG9pbnQgPSAxOw0KPiArCWludCB0aW1lbGluZSA9IC0xOw0KPiArCXRpbWVy X3QgdGltZXI7DQo+ICsNCj4gKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkgew0K PiArCQl0aW1lciA9IHN5bmNvYmpfdHJpZ2dlcl9kZWxheWVkKGZkLCBzeW5jb2JqLCBwb2ludCwg U0hPUlRfVElNRV9OU0VDKTsNCj4gKwl9IGVsc2Ugew0KPiArCQl0aW1lbGluZSA9IHN5bmNvYmpf YXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmosIHBvaW50KTsNCj4gKwkJdGltZXIgPSBzZXRfdGlt ZXIodGltZWxpbmVfaW5jX2Z1bmMsIE5VTEwsDQo+ICsJCQkJICB0aW1lbGluZSwgU0hPUlRfVElN RV9OU0VDKTsNCj4gKwl9DQo+ICsNCj4gKwlpZ3RfYXNzZXJ0KHN5bmNvYmpfdGltZWxpbmVfd2Fp dChmZCwgJnN5bmNvYmosICZwb2ludCwgMSwNCj4gKwkJCQlnZXR0aW1lX25zKCkgKyBTSE9SVF9U SU1FX05TRUMgKiAyLA0KPiArCQkJCWZsYWdzLCBOVUxMKSk7DQo+ICsNCj4gKwl0aW1lcl9kZWxl dGUodGltZXIpOw0KPiArDQo+ICsJaWYgKHRpbWVsaW5lICE9IC0xKQ0KPiArCQljbG9zZSh0aW1l bGluZSk7DQo+ICsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZA0KPiArdGVzdF9yZXNldF91bnNpZ25hbGVkKGludCBmZCkNCj4gK3sN Cj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0KPiArCXVpbnQ2 NF90IHBvaW50ID0gMTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93 YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwNCj4gKwkJCQkJCTEsIDAsIDApLCAtRUlOVkFM KTsNCj4gKw0KPiArCXN5bmNvYmpfcmVzZXQoZmQsICZzeW5jb2JqLCAxKTsNCj4gKw0KPiArCWln dF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2lu dCwNCj4gKwkJCQkJCTEsIDAsIDApLCAtRUlOVkFMKTsNCj4gKw0KPiArCXN5bmNvYmpfZGVzdHJv eShmZCwgc3luY29iaik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3Jlc2V0 X3NpZ25hbGVkKGludCBmZCkNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9j cmVhdGUoZmQsIDApOw0KPiArCXVpbnQ2NF90IHBvaW50ID0gMTsNCj4gKw0KPiArCXN5bmNvYmpf dHJpZ2dlcihmZCwgc3luY29iaiwgcG9pbnQpOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcShzeW5j b2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LA0KPiArCQkJCQkJMSwg MCwgMCksIDApOw0KPiArDQo+ICsJc3luY29ial9yZXNldChmZCwgJnN5bmNvYmosIDEpOw0KPiAr DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29i aiwgJnBvaW50LA0KPiArCQkJCQkJMSwgMCwgMCksIC1FSU5WQUwpOw0KPiArDQo+ICsJc3luY29i al9kZXN0cm95KGZkLCBzeW5jb2JqKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rl c3RfcmVzZXRfbXVsdGlwbGVfc2lnbmFsZWQoaW50IGZkKQ0KPiArew0KPiArCXVpbnQ2NF90IHBv aW50c1szXSA9IHsxLCAxLCAxfTsNCj4gKwl1aW50MzJfdCBzeW5jb2Jqc1szXTsNCj4gKwlpbnQg aTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gKwkJc3luY29ianNbaV0g PSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsJCXN5bmNvYmpfdHJpZ2dlcihmZCwgc3luY29i anNbaV0sIHBvaW50c1tpXSk7DQo+ICsJfQ0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2Jq X3RpbWVsaW5lX3dhaXRfZXJyKGZkLCBzeW5jb2JqcywgcG9pbnRzLCAzLCAwLCAwKSwgMCk7DQo+ ICsNCj4gKwlzeW5jb2JqX3Jlc2V0KGZkLCBzeW5jb2JqcywgMyk7DQo+ICsNCj4gKwlmb3IgKGkg PSAwOyBpIDwgMzsgaSsrKSB7DQo+ICsJCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93 YWl0X2VycihmZCwgJnN5bmNvYmpzW2ldLA0KPiArCQkJCQkJCSZwb2ludHNbaV0sIDEsDQo+ICsJ CQkJCQkJMCwgMCksIC1FSU5WQUwpOw0KPiArCQlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpz W2ldKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtyZXNldF9hbmRfdHJp Z2dlcl9mdW5jKHVuaW9uIHNpZ3ZhbCBzaWd2YWwpDQo+ICt7DQo+ICsJc3RydWN0IGZkX2hhbmRs ZV9wYWlyICpwYWlyID0gc2lndmFsLnNpdmFsX3B0cjsNCj4gKwlzeW5jb2JqX3Jlc2V0KHBhaXIt PmZkLCAmcGFpci0+aGFuZGxlLCAxKTsNCj4gKwlzeW5jb2JqX3RyaWdnZXIocGFpci0+ZmQsIHBh aXItPmhhbmRsZSwgcGFpci0+cG9pbnQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr dGVzdF9yZXNldF9kdXJpbmdfd2FpdF9mb3Jfc3VibWl0KGludCBmZCkNCj4gK3sNCj4gKwl1aW50 MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0KPiArCXVpbnQzMl90IGZsYWdz ID0gTE9DQUxfU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVDsNCj4gKwlzdHJ1Y3Qg ZmRfaGFuZGxlX3BhaXIgcGFpcjsNCj4gKwl1aW50NjRfdCBwb2ludCA9IDE7DQo+ICsJdGltZXJf dCB0aW1lcjsNCj4gKw0KPiArCXBhaXIuZmQgPSBmZDsNCj4gKwlwYWlyLmhhbmRsZSA9IHN5bmNv Ymo7DQo+ICsJdGltZXIgPSBzZXRfdGltZXIocmVzZXRfYW5kX3RyaWdnZXJfZnVuYywgJnBhaXIs IDAsIFNIT1JUX1RJTUVfTlNFQyk7DQo+ICsNCj4gKwkvKiBBIHJlc2V0IHNob3VsZCBiZSBhIG5v LW9wIGV2ZW4gaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdhaXQgKi8NCj4gKwlpZ3RfYXNz ZXJ0KHN5bmNvYmpfdGltZWxpbmVfd2FpdChmZCwgJnN5bmNvYmosICZwb2ludCwgMSwNCj4gKwkJ CQlnZXR0aW1lX25zKCkgKyBTSE9SVF9USU1FX05TRUMgKiAyLA0KPiArCQkJCWZsYWdzLCBOVUxM KSk7DQo+ICsNCj4gKwl0aW1lcl9kZWxldGUodGltZXIpOw0KPiArDQo+ICsJc3luY29ial9kZXN0 cm95KGZkLCBzeW5jb2JqKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rfc2ln bmFsKGludCBmZCkNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUo ZmQsIDApOw0KPiArCXVpbnQzMl90IGZsYWdzID0gTE9DQUxfU1lOQ09CSl9XQUlUX0ZMQUdTX1dB SVRfRk9SX1NVQk1JVDsNCj4gKwl1aW50NjRfdCBwb2ludCA9IDE7DQo+ICsNCj4gKwlpZ3RfYXNz ZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsDQo+ ICsJCQkJCQkxLCAwLCAwKSwgLUVJTlZBTCk7DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3Rp bWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LA0KPiArCQkJCQkJMSwgMCwgZmxh Z3MpLCAtRVRJTUUpOw0KPiArDQo+ICsJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsICZzeW5j b2JqLCAmcG9pbnQsIDEpOw0KPiArDQo+ICsJaWd0X2Fzc2VydChzeW5jb2JqX3RpbWVsaW5lX3dh aXQoZmQsICZzeW5jb2JqLCAmcG9pbnQsIDEsIDAsIDAsIE5VTEwpKTsNCj4gKwlpZ3RfYXNzZXJ0 KHN5bmNvYmpfdGltZWxpbmVfd2FpdChmZCwgJnN5bmNvYmosICZwb2ludCwgMSwgMCwgZmxhZ3Ms IE5VTEwpKTsNCj4gKw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29iaik7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X211bHRpX3dhaXQoaW50IGZkLCB1aW50MzJfdCB0 ZXN0X2ZsYWdzLCBpbnQgZXhwZWN0KQ0KPiArew0KPiArCXVpbnQzMl90IHN5bmNvYmpzWzNdOw0K PiArCXVpbnQzMl90IHRmbGFnLCBmbGFnczsNCj4gKwlpbnQgaSwgZmlkeCwgdGltZWxpbmU7DQo+ ICsJdWludDY0X3QgcG9pbnRzWzNdID0gezEsIDEsIDF9Ow0KPiArDQo+ICsJc3luY29ianNbMF0g PSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsJc3luY29ianNbMV0gPSBzeW5jb2JqX2NyZWF0 ZShmZCwgMCk7DQo+ICsJc3luY29ianNbMl0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsN Cj4gKwlmbGFncyA9IGZsYWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOw0KPiArCXRlc3Rf ZmxhZ3MgJj0gfihXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCB8IFdBSVRfQVZBSUxBQkxFKTsN Cj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gKwkJZmlkeCA9IGZmcyh0ZXN0 X2ZsYWdzKSAtIDE7DQo+ICsJCXRmbGFnID0gKDEgPDwgZmlkeCk7DQo+ICsNCj4gKwkJaWYgKHRl c3RfZmxhZ3MgJiB+dGZsYWcpDQo+ICsJCQl0ZXN0X2ZsYWdzICY9IH50ZmxhZzsNCj4gKw0KPiAr CQlpZiAodGZsYWcgJiAoV0FJVF9TVUJNSVRURUQgfCBXQUlUX1NJR05BTEVEKSkNCj4gKwkJCXRp bWVsaW5lID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbaV0sDQo+ICsJCQkJ CQkJICBwb2ludHNbaV0pOw0KPiArCQlpZiAodGZsYWcgJiBXQUlUX1NJR05BTEVEKQ0KPiArCQkJ c3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmUsIDEpOw0KPiArCX0NCj4gKw0KPiArCWlndF9h c3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgc3luY29ianMsIHBvaW50cywg MywgMCwgZmxhZ3MpLCBleHBlY3QpOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3Rp bWVsaW5lX3dhaXRfZXJyKGZkLCBzeW5jb2JqcywgcG9pbnRzLCAzLCBzaG9ydF90aW1lb3V0KCks DQo+ICsJCQkJICAgICAgIGZsYWdzKSwgZXhwZWN0KTsNCj4gKw0KPiArCWlmIChleHBlY3QgIT0g LUVUSU1FKSB7DQo+ICsJCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2Vycihm ZCwgc3luY29ianMsIHBvaW50cywgMywgVUlOVDY0X01BWCwNCj4gKwkJCQkJICAgICAgIGZsYWdz KSwgZXhwZWN0KTsNCj4gKwl9DQo+ICsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpz WzBdKTsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzFdKTsNCj4gKwlzeW5jb2Jq X2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzJdKTsNCj4gK30NCj4gKw0KPiArc3RydWN0IHdhaXRfdGhy ZWFkX2RhdGEgew0KPiArCWludCBmZDsNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVf d2FpdCB3YWl0Ow0KPiArfTsNCj4gKw0KPiArc3RhdGljIHZvaWQgKg0KPiArd2FpdF90aHJlYWRf ZnVuYyh2b2lkICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCB3YWl0X3RocmVhZF9kYXRhICp3YWl0 ID0gZGF0YTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3Rs KHdhaXQtPmZkLCAmd2FpdC0+d2FpdCksIDApOw0KPiArCXJldHVybiBOVUxMOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZA0KPiArdGVzdF93YWl0X3NuYXBzaG90KGludCBmZCwgdWludDMyX3Qg dGVzdF9mbGFncykNCj4gK3sNCj4gKwlzdHJ1Y3Qgd2FpdF90aHJlYWRfZGF0YSB3YWl0ID0geyAw IH07DQo+ICsJdWludDMyX3Qgc3luY29ianNbMl07DQo+ICsJdWludDY0X3QgcG9pbnRzWzJdID0g ezEsIDF9Ow0KPiArCWludCB0aW1lbGluZXNbM10gPSB7IC0xLCAtMSwgLTEgfTsNCj4gKwlwdGhy ZWFkX3QgdGhyZWFkOw0KPiArDQo+ICsJc3luY29ianNbMF0gPSBzeW5jb2JqX2NyZWF0ZShmZCwg MCk7DQo+ICsJc3luY29ianNbMV0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsNCj4gKwlp ZiAoISh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSkgew0KPiArCQl0aW1lbGluZXNbMF0g PSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsNCj4g KwkJdGltZWxpbmVzWzFdID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbMV0s IHBvaW50c1sxXSk7DQo+ICsJfQ0KPiArDQo+ICsJd2FpdC5mZCA9IGZkOw0KPiArCXdhaXQud2Fp dC5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKHN5bmNvYmpzKTsNCj4gKwl3YWl0LndhaXQuY291 bnRfaGFuZGxlcyA9IDI7DQo+ICsJd2FpdC53YWl0LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcihw b2ludHMpOw0KPiArCXdhaXQud2FpdC50aW1lb3V0X25zZWMgPSBzaG9ydF90aW1lb3V0KCk7DQo+ ICsJd2FpdC53YWl0LmZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7DQo+ ICsNCj4gKwlpZ3RfYXNzZXJ0X2VxKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIE5VTEwsIHdhaXRf dGhyZWFkX2Z1bmMsICZ3YWl0KSwgMCk7DQo+ICsNCj4gKwlzbGVlcF9uc2VjKFNIT1JUX1RJTUVf TlNFQyAvIDUpOw0KPiArDQo+ICsJLyogVHJ5IHRvIGZha2UgdGhlIGtlcm5lbCBvdXQgYnkgdHJp Z2dlcmluZyBvciBwYXJ0aWFsbHkgdHJpZ2dlcmluZw0KPiArCSAqIHRoZSBmaXJzdCBmZW5jZS4N Cj4gKwkgKi8NCj4gKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfQUxMKSB7DQo+ICsJCS8qIElmIGl0 J3MgV0FJVF9BTEwsIGFjdHVhbGx5IHRyaWdnZXIgaXQgKi8NCj4gKwkJaWYgKHRpbWVsaW5lc1sw XSA9PSAtMSkNCj4gKwkJCXN5bmNvYmpfdHJpZ2dlcihmZCwgc3luY29ianNbMF0sIHBvaW50c1sw XSk7DQo+ICsJCWVsc2UNCj4gKwkJCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lc1swXSwg MSk7DQo+ICsJfSBlbHNlIGlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSB7DQo+ICsJ CXRpbWVsaW5lc1swXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzWzBdLCBw b2ludHNbMF0pOw0KPiArCX0NCj4gKw0KPiArCXNsZWVwX25zZWMoU0hPUlRfVElNRV9OU0VDIC8g NSk7DQo+ICsNCj4gKwkvKiBUaGVuIHJlc2V0IGl0ICovDQo+ICsJc3luY29ial9yZXNldChmZCwg JnN5bmNvYmpzWzBdLCAxKTsNCj4gKw0KPiArCXNsZWVwX25zZWMoU0hPUlRfVElNRV9OU0VDIC8g NSk7DQo+ICsNCj4gKwkvKiBUaGVuICJzdWJtaXQiIGl0IGluIGEgd2F5IHRoYXQgd2lsbCBuZXZl ciB0cmlnZ2VyLiAgVGhpcyB3YXksIGlmDQo+ICsJICogdGhlIGtlcm5lbCBwaWNrcyB1cCBvbiB0 aGUgbmV3IGZlbmNlIChpdCBzaG91bGRuJ3QpLCB3ZSdsbCBnZXQgYQ0KPiArCSAqIHRpbWVvdXQu DQo+ICsJICovDQo+ICsJdGltZWxpbmVzWzJdID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwg c3luY29ianNbMF0sIHBvaW50c1swXSk7DQo+ICsNCj4gKwlzbGVlcF9uc2VjKFNIT1JUX1RJTUVf TlNFQyAvIDUpOw0KPiArDQo+ICsJLyogTm93IHRyaWdnZXIgdGhlIHNlY29uZCBmZW5jZSB0byBj b21wbGV0ZSB0aGUgd2FpdCAqLw0KPiArDQo+ICsJaWYgKHRpbWVsaW5lc1sxXSA9PSAtMSkNCj4g KwkJc3luY29ial90cmlnZ2VyKGZkLCBzeW5jb2Jqc1sxXSwgcG9pbnRzWzFdKTsNCj4gKwllbHNl DQo+ICsJCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lc1sxXSwgMSk7DQo+ICsNCj4gKwlw dGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsNCj4gKw0KPiArCWlmICghKHRlc3RfZmxhZ3MgJiBX QUlUX0FMTCkpDQo+ICsJCWlndF9hc3NlcnRfZXEod2FpdC53YWl0LmZpcnN0X3NpZ25hbGVkLCAx KTsNCj4gKw0KPiArCWNsb3NlKHRpbWVsaW5lc1swXSk7DQo+ICsJY2xvc2UodGltZWxpbmVzWzFd KTsNCj4gKwljbG9zZSh0aW1lbGluZXNbMl0pOw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3lu Y29ianNbMF0pOw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMV0pOw0KPiArfQ0K PiArDQo+ICsvKiBUaGUgbnVtYmVycyAwLTcsIGVhY2ggcmVwZWF0ZWQgNXggYW5kIHNodWZmbGVk LiAqLw0KPiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNodWZmbGVkXzBfN194NFtdID0gew0KPiAr CTIsIDAsIDYsIDEsIDEsIDQsIDUsIDIsIDAsIDcsIDEsIDcsIDYsIDMsIDQsIDUsDQo+ICsJMCwg MiwgNywgMywgNSwgNCwgMCwgNiwgNywgMywgMiwgNSwgNiwgMSwgNCwgMywNCj4gK307DQo+ICsN Cj4gK2VudW0gc3luY29ial9zdGFnZSB7DQo+ICsJU1RBR0VfVU5TVUJNSVRURUQsDQo+ICsJU1RB R0VfU1VCTUlUVEVELA0KPiArCVNUQUdFX1NJR05BTEVELA0KPiArCVNUQUdFX1JFU0VULA0KPiAr CVNUQUdFX1JFU1VCTUlUVEVELA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rf d2FpdF9jb21wbGV4KGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncykNCj4gK3sNCj4gKwlzdHJ1 Y3Qgd2FpdF90aHJlYWRfZGF0YSB3YWl0ID0geyAwIH07DQo+ICsJdWludDMyX3Qgc3luY29ianNb OF07DQo+ICsJdWludDY0X3QgcG9pbnRzWzhdID0gezEsIDEsIDEsIDEsIDEsIDEsIDEsIDF9Ow0K PiArCWVudW0gc3luY29ial9zdGFnZSBzdGFnZVs4XTsNCj4gKwlpbnQgaSwgaiwgdGltZWxpbmVz WzhdOw0KPiArCXVpbnQzMl90IGZpcnN0X3NpZ25hbGVkID0gLTEsIG51bV9zaWduYWxlZCA9IDA7 DQo+ICsJcHRocmVhZF90IHRocmVhZDsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCA4OyBpKysp IHsNCj4gKwkJc3RhZ2VbaV0gPSBTVEFHRV9VTlNVQk1JVFRFRDsNCj4gKwkJc3luY29ianNbaV0g PSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHRlc3RfZmxhZ3Mg JiBXQUlUX0ZPUl9TVUJNSVQpIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykNCj4gKwkJ CXRpbWVsaW5lc1tpXSA9IC0xOw0KPiArCX0gZWxzZSB7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCA4 OyBpKyspDQo+ICsJCQl0aW1lbGluZXNbaV0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBz eW5jb2Jqc1tpXSwNCj4gKwkJCQkJCQkgICAgICBwb2ludHNbaV0pOw0KPiArCX0NCj4gKw0KPiAr CXdhaXQuZmQgPSBmZDsNCj4gKwl3YWl0LndhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihz eW5jb2Jqcyk7DQo+ICsJd2FpdC53YWl0LmNvdW50X2hhbmRsZXMgPSAyOw0KPiArCXdhaXQud2Fp dC5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIocG9pbnRzKTsNCj4gKwl3YWl0LndhaXQudGltZW91 dF9uc2VjID0gZ2V0dGltZV9ucygpICsgTlNFQ1NfUEVSX1NFQzsNCj4gKwl3YWl0LndhaXQuZmxh Z3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsNCj4gKw0KPiArCWlndF9hc3Nl cnRfZXEocHRocmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwgd2FpdF90aHJlYWRfZnVuYywgJndh aXQpLCAwKTsNCj4gKw0KPiArCXNsZWVwX25zZWMoTlNFQ1NfUEVSX1NFQyAvIDUwKTsNCj4gKw0K PiArCW51bV9zaWduYWxlZCA9IDA7DQo+ICsJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc2h1 ZmZsZWRfMF83X3g0KTsgaisrKSB7DQo+ICsJCWkgPSBzaHVmZmxlZF8wXzdfeDRbal07DQo+ICsJ CWlndF9hc3NlcnRfbHQoaSwgQVJSQVlfU0laRShzeW5jb2JqcykpOw0KPiArDQo+ICsJCXN3aXRj aCAoc3RhZ2VbaV0rKykgew0KPiArCQljYXNlIFNUQUdFX1VOU1VCTUlUVEVEOg0KPiArCQkJLyog V2UgbmVlZCB0byBzdWJtaXQgYXR0YWNoIGEgZmVuY2UgKi8NCj4gKwkJCWlmICghKHRlc3RfZmxh Z3MgJiBXQUlUX0ZPUl9TVUJNSVQpKSB7DQo+ICsJCQkJLyogV2UgaGFkIHRvIGF0dGFjaCBvbmUg dXAtZnJvbnQgKi8NCj4gKwkJCQlpZ3RfYXNzZXJ0X25lcSh0aW1lbGluZXNbaV0sIC0xKTsNCj4g KwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKwkJCXRpbWVsaW5lc1tpXSA9IHN5bmNvYmpfYXR0YWNo X3N3X3N5bmMoZmQsIHN5bmNvYmpzW2ldLA0KPiArCQkJCQkJCSAgICAgIHBvaW50c1tpXSk7DQo+ ICsJCQlicmVhazsNCj4gKw0KPiArCQljYXNlIFNUQUdFX1NVQk1JVFRFRDoNCj4gKwkJCS8qIFdl IGhhdmUgYSBmZW5jZSwgdHJpZ2dlciBpdCAqLw0KPiArCQkJaWd0X2Fzc2VydF9uZXEodGltZWxp bmVzW2ldLCAtMSk7DQo+ICsJCQlzd19zeW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZXNbaV0sIDEp Ow0KPiArCQkJY2xvc2UodGltZWxpbmVzW2ldKTsNCj4gKwkJCXRpbWVsaW5lc1tpXSA9IC0xOw0K PiArCQkJaWYgKG51bV9zaWduYWxlZCA9PSAwKQ0KPiArCQkJCWZpcnN0X3NpZ25hbGVkID0gaTsN Cj4gKwkJCW51bV9zaWduYWxlZCsrOw0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJY2FzZSBTVEFH RV9TSUdOQUxFRDoNCj4gKwkJCS8qIFdlJ3JlIGFscmVhZHkgc2lnbmFsZWQsIHJlc2V0ICovDQo+ ICsJCQlzeW5jb2JqX3Jlc2V0KGZkLCAmc3luY29ianNbaV0sIDEpOw0KPiArCQkJYnJlYWs7DQo+ ICsNCj4gKwkJY2FzZSBTVEFHRV9SRVNFVDoNCj4gKwkJCS8qIFdlJ3JlIHJlc2V0LCBzdWJtaXQg YW5kIGRvbid0IHNpZ25hbCAqLw0KPiArCQkJdGltZWxpbmVzW2ldID0gc3luY29ial9hdHRhY2hf c3dfc3luYyhmZCwgc3luY29ianNbaV0sDQo+ICsJCQkJCQkJICAgICAgcG9pbnRzW2ldKTsNCj4g KwkJCWJyZWFrOw0KPiArDQo+ICsJCWNhc2UgU1RBR0VfUkVTVUJNSVRURUQ6DQo+ICsJCQlpZ3Rf YXNzZXJ0KCEiU2hvdWxkIG5vdCByZWFjaCB0aGlzIHN0YWdlIik7DQo+ICsJCQlicmVhazsNCj4g KwkJfQ0KPiArDQo+ICsJCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9BTEwpIHsNCj4gKwkJCWlmIChu dW1fc2lnbmFsZWQgPT0gQVJSQVlfU0laRShzeW5jb2JqcykpDQo+ICsJCQkJYnJlYWs7DQo+ICsJ CX0gZWxzZSB7DQo+ICsJCQlpZiAobnVtX3NpZ25hbGVkID4gMCkNCj4gKwkJCQlicmVhazsNCj4g KwkJfQ0KPiArDQo+ICsJCXNsZWVwX25zZWMoTlNFQ1NfUEVSX1NFQyAvIDEwMCk7DQo+ICsJfQ0K PiArDQo+ICsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7DQo+ICsNCj4gKwlpZiAodGVzdF9m bGFncyAmIFdBSVRfQUxMKSB7DQo+ICsJCWlndF9hc3NlcnRfZXEobnVtX3NpZ25hbGVkLCBBUlJB WV9TSVpFKHN5bmNvYmpzKSk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJaWd0X2Fzc2VydF9lcShudW1f c2lnbmFsZWQsIDEpOw0KPiArCQlpZ3RfYXNzZXJ0X2VxKHdhaXQud2FpdC5maXJzdF9zaWduYWxl ZCwgZmlyc3Rfc2lnbmFsZWQpOw0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCA4OyBp KyspIHsNCj4gKwkJY2xvc2UodGltZWxpbmVzW2ldKTsNCj4gKwkJc3luY29ial9kZXN0cm95KGZk LCBzeW5jb2Jqc1tpXSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArdGVz dF93YWl0X2ludGVycnVwdGVkKGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncykNCj4gK3sNCj4g KwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCB3YWl0ID0geyAwIH07DQo+ICsJdWlu dDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKwl1aW50NjRfdCBwb2lu dCA9IDE7DQo+ICsJaW50IHRpbWVsaW5lOw0KPiArDQo+ICsJd2FpdC5oYW5kbGVzID0gdG9fdXNl cl9wb2ludGVyKCZzeW5jb2JqKTsNCj4gKwl3YWl0LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcigm cG9pbnQpOw0KPiArCXdhaXQuY291bnRfaGFuZGxlcyA9IDE7DQo+ICsJd2FpdC5mbGFncyA9IGZs YWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOw0KPiArDQo+ICsJaWYgKHRlc3RfZmxhZ3Mg JiBXQUlUX0ZPUl9TVUJNSVQpIHsNCj4gKwkJd2FpdC50aW1lb3V0X25zZWMgPSBzaG9ydF90aW1l b3V0KCk7DQo+ICsJCWlndF93aGlsZV9pbnRlcnJ1cHRpYmxlKHRydWUpDQo+ICsJCQlpZ3RfYXNz ZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FVElNRSk7 DQo+ICsJfQ0KPiArDQo+ICsJdGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBz eW5jb2JqLCBwb2ludCk7DQo+ICsNCj4gKwl3YWl0LnRpbWVvdXRfbnNlYyA9IHNob3J0X3RpbWVv dXQoKTsNCj4gKwlpZ3Rfd2hpbGVfaW50ZXJydXB0aWJsZSh0cnVlKQ0KPiArCQlpZ3RfYXNzZXJ0 X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FVElNRSk7DQo+ ICsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOw0KPiArCWNsb3NlKHRpbWVsaW5l KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wNCj4gK2hhc19zeW5jb2JqX3RpbWVsaW5lX3dh aXQoaW50IGZkKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdh aXQgPSB7IDAgfTsNCj4gKwl1aW50MzJfdCBoYW5kbGUgPSAwOw0KPiArCXVpbnQ2NF90IHZhbHVl Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlpZiAoZHJtR2V0Q2FwKGZkLCBEUk1fQ0FQX1NZTkNP QkosICZ2YWx1ZSkpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwlpZiAoIXZhbHVlKQ0KPiArCQly ZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwkvKiBUcnkgd2FpdGluZyBmb3IgemVybyBzeW5jIG9iamVj dHMgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUwgKi8NCj4gKwl3YWl0LmNvdW50X2hhbmRsZXMgPSAx Ow0KPiArCXdhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsNCj4gKwlyZXQg PSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfV0FJVCwgJndhaXQpOw0K PiArCXJldHVybiByZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UOw0KPiArfQ0KPiArDQo+ICtp Z3RfbWFpbg0KPiArew0KPiArCWludCBmZCA9IC0xOw0KPiArDQo+ICsJaWd0X2ZpeHR1cmUgew0K PiArCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfQU5ZKTsNCj4gKwkJaWd0X3JlcXVpcmUo aGFzX3N5bmNvYmpfdGltZWxpbmVfd2FpdChmZCkpOw0KPiArCQlpZ3RfcmVxdWlyZV9zd19zeW5j KCk7DQo+ICsJfQ0KPiArDQo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtd2FpdC1iYWQtZmxhZ3Mi KQ0KPiArCQl0ZXN0X3dhaXRfYmFkX2ZsYWdzKGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJp bnZhbGlkLXdhaXQtemVyby1oYW5kbGVzIikNCj4gKwkJdGVzdF93YWl0X3plcm9faGFuZGxlcyhm ZCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC13YWl0LWlsbGVnYWwtaGFuZGxlIikN Cj4gKwkJdGVzdF93YWl0X2lsbGVnYWxfaGFuZGxlKGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0 KCJpbnZhbGlkLXF1ZXJ5LXplcm8taGFuZGxlcyIpDQo+ICsJCXRlc3RfcXVlcnlfemVyb19oYW5k bGVzKGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXF1ZXJ5LWlsbGVnYWwtaGFu ZGxlIikNCj4gKwkJdGVzdF9xdWVyeV9pbGxlZ2FsX2hhbmRsZShmZCk7DQo+ICsNCj4gKwlpZ3Rf c3VidGVzdCgiaW52YWxpZC1xdWVyeS1vbmUtaWxsZWdhbC1oYW5kbGUiKQ0KPiArCQl0ZXN0X3F1 ZXJ5X29uZV9pbGxlZ2FsX2hhbmRsZShmZCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxp ZC1xdWVyeS1iYWQtcGFkIikNCj4gKwkJdGVzdF9xdWVyeV9iYWRfcGFkKGZkKTsNCj4gKw0KPiAr CWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC16ZXJvLWhhbmRsZXMiKQ0KPiArCQl0ZXN0X3Np Z25hbF96ZXJvX2hhbmRsZXMoZmQpOw0KPiArDQo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtc2ln bmFsLWlsbGVnYWwtaGFuZGxlIikNCj4gKwkJdGVzdF9zaWduYWxfaWxsZWdhbF9oYW5kbGUoZmQp Ow0KPiArDQo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtc2lnbmFsLWlsbGVnYWwtcG9pbnQiKQ0K PiArCQl0ZXN0X3NpZ25hbF9pbGxlZ2FsX3BvaW50KGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0 KCJpbnZhbGlkLXNpZ25hbC1vbmUtaWxsZWdhbC1oYW5kbGUiKQ0KPiArCQl0ZXN0X3NpZ25hbF9v bmVfaWxsZWdhbF9oYW5kbGUoZmQpOw0KPiArDQo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtc2ln bmFsLWJhZC1wYWQiKQ0KPiArCQl0ZXN0X3NpZ25hbF9iYWRfcGFkKGZkKTsNCj4gKw0KPiArCWln dF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1hcnJheSIpDQo+ICsJCXRlc3Rfc2lnbmFsX2FycmF5 KGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXRyYW5zZmVyLWlsbGVnYWwtaGFu ZGxlIikNCj4gKwkJdGVzdF90cmFuc2Zlcl9pbGxlZ2FsX2hhbmRsZShmZCk7DQo+ICsNCj4gKwlp Z3Rfc3VidGVzdCgiaW52YWxpZC10cmFuc2Zlci1iYWQtcGFkIikNCj4gKwkJdGVzdF90cmFuc2Zl cl9iYWRfcGFkKGZkKTsNCj4gKw0KPiArCWZvciAodW5zaWduZWQgZmxhZ3MgPSAwOyBmbGFncyA8 IFdBSVRfRkxBR1NfTUFYOyBmbGFncysrKSB7DQo+ICsJCWludCBlcnI7DQo+ICsNCj4gKwkJLyog T25seSBvbmUgd2FpdCBtb2RlIGZvciBzaW5nbGUtd2FpdCB0ZXN0cyAqLw0KPiArCQlpZiAoX19i dWlsdGluX3BvcGNvdW50KGZsYWdzICYgKFdBSVRfVU5TVUJNSVRURUQgfA0KPiArCQkJCQkJV0FJ VF9TVUJNSVRURUQgfA0KPiArCQkJCQkJV0FJVF9TSUdOQUxFRCkpICE9IDEpDQo+ICsJCQljb250 aW51ZTsNCj4gKw0KPiArCQlpZiAoKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRFRCkgJiYgIShmbGFn cyAmIFdBSVRfRk9SX1NVQk1JVCkpDQo+ICsJCQllcnIgPSAtRUlOVkFMOw0KPiArCQllbHNlIGlm ICghKGZsYWdzICYgV0FJVF9TSUdOQUxFRCkgJiYgISgoZmxhZ3MgJiBXQUlUX1NVQk1JVFRFRCkg JiYgKGZsYWdzICYgV0FJVF9BVkFJTEFCTEUpKSkNCj4gKwkJCWVyciA9IC1FVElNRTsNCj4gKwkJ ZWxzZQ0KPiArCQkJZXJyID0gMDsNCj4gKw0KPiArCQlpZ3Rfc3VidGVzdF9mKCIlc3NpbmdsZS13 YWl0JXMlcyVzJXMlcyVzIiwNCj4gKwkJCSAgICAgIGVyciA9PSAtRUlOVkFMID8gImludmFsaWQt IiA6IGVyciA9PSAtRVRJTUUgPyAiZXRpbWUtIiA6ICIiLA0KPiArCQkJICAgICAgKGZsYWdzICYg V0FJVF9BTEwpID8gIi1hbGwiIDogIiIsDQo+ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlUX0ZPUl9T VUJNSVQpID8gIi1mb3Itc3VibWl0IiA6ICIiLA0KPiArCQkJICAgICAgKGZsYWdzICYgV0FJVF9B VkFJTEFCTEUpID8gIi1hdmFpbGFibGUiIDogIiIsDQo+ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlU X1VOU1VCTUlUVEVEKSA/ICItdW5zdWJtaXR0ZWQiIDogIiIsDQo+ICsJCQkgICAgICAoZmxhZ3Mg JiBXQUlUX1NVQk1JVFRFRCkgPyAiLXN1Ym1pdHRlZCIgOiAiIiwNCj4gKwkJCSAgICAgIChmbGFn cyAmIFdBSVRfU0lHTkFMRUQpID8gIi1zaWduYWxlZCIgOiAiIikNCj4gKwkJCXRlc3Rfc2luZ2xl X3dhaXQoZmQsIGZsYWdzLCBlcnIpOw0KPiArCX0NCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3YWl0 LWRlbGF5ZWQtc2lnbmFsIikNCj4gKwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGZkLCAwKTsN Cj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3YWl0LWZvci1zdWJtaXQtZGVsYXllZC1zdWJtaXQiKQ0K PiArCQl0ZXN0X3dhaXRfZGVsYXllZF9zaWduYWwoZmQsIFdBSVRfRk9SX1NVQk1JVCk7DQo+ICsN Cj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1hbGwtZGVsYXllZC1zaWduYWwiKQ0KPiArCQl0ZXN0X3dh aXRfZGVsYXllZF9zaWduYWwoZmQsIFdBSVRfQUxMKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3 YWl0LWFsbC1mb3Itc3VibWl0LWRlbGF5ZWQtc3VibWl0IikNCj4gKwkJdGVzdF93YWl0X2RlbGF5 ZWRfc2lnbmFsKGZkLCBXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCk7DQo+ICsNCj4gKwlpZ3Rf c3VidGVzdCgicmVzZXQtdW5zaWduYWxlZCIpDQo+ICsJCXRlc3RfcmVzZXRfdW5zaWduYWxlZChm ZCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgicmVzZXQtc2lnbmFsZWQiKQ0KPiArCQl0ZXN0X3Jl c2V0X3NpZ25hbGVkKGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJyZXNldC1tdWx0aXBsZS1z aWduYWxlZCIpDQo+ICsJCXRlc3RfcmVzZXRfbXVsdGlwbGVfc2lnbmFsZWQoZmQpOw0KPiArDQo+ ICsJaWd0X3N1YnRlc3QoInJlc2V0LWR1cmluZy13YWl0LWZvci1zdWJtaXQiKQ0KPiArCQl0ZXN0 X3Jlc2V0X2R1cmluZ193YWl0X2Zvcl9zdWJtaXQoZmQpOw0KPiArDQo+ICsJaWd0X3N1YnRlc3Qo InNpZ25hbCIpDQo+ICsJCXRlc3Rfc2lnbmFsKGZkKTsNCj4gKw0KPiArCWZvciAodW5zaWduZWQg ZmxhZ3MgPSAwOyBmbGFncyA8IFdBSVRfRkxBR1NfTUFYOyBmbGFncysrKSB7DQo+ICsJCWludCBl cnI7DQo+ICsNCj4gKwkJLyogQXQgbGVhc3Qgb25lIHdhaXQgbW9kZSBmb3IgbXVsdGktd2FpdCB0 ZXN0cyAqLw0KPiArCQlpZiAoIShmbGFncyAmIChXQUlUX1VOU1VCTUlUVEVEIHwNCj4gKwkJCSAg ICAgICBXQUlUX1NVQk1JVFRFRCB8DQo+ICsJCQkgICAgICAgV0FJVF9TSUdOQUxFRCkpKQ0KPiAr CQkJY29udGludWU7DQo+ICsNCj4gKwkJZXJyID0gMDsNCj4gKwkJaWYgKChmbGFncyAmIFdBSVRf VU5TVUJNSVRURUQpICYmICEoZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpKSB7DQo+ICsJCQllcnIg PSAtRUlOVkFMOw0KPiArCQl9IGVsc2UgaWYgKGZsYWdzICYgV0FJVF9BTEwpIHsNCj4gKwkJCWlm IChmbGFncyAmIChXQUlUX1VOU1VCTUlUVEVEIHwgV0FJVF9TVUJNSVRURUQpKQ0KPiArCQkJCWVy ciA9IC1FVElNRTsNCj4gKwkJCWlmICghKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRFRCkgJiYgKGZs YWdzICYgV0FJVF9TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfQVZBSUxBQkxFKSkNCj4gKwkJ CQllcnIgPSAwOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJaWYgKCEoZmxhZ3MgJiBXQUlUX1NJR05B TEVEKSAmJiAhKChmbGFncyAmIFdBSVRfU1VCTUlUVEVEKSAmJiAoZmxhZ3MgJiBXQUlUX0FWQUlM QUJMRSkpKQ0KPiArCQkJCWVyciA9IC1FVElNRTsNCj4gKwkJfQ0KPiArDQo+ICsJCWlndF9zdWJ0 ZXN0X2YoIiVzbXVsdGktd2FpdCVzJXMlcyVzJXMlcyIsDQo+ICsJCQkgICAgICBlcnIgPT0gLUVJ TlZBTCA/ICJpbnZhbGlkLSIgOiBlcnIgPT0gLUVUSU1FID8gImV0aW1lLSIgOiAiIiwNCj4gKwkJ CSAgICAgIChmbGFncyAmIFdBSVRfQUxMKSA/ICItYWxsIiA6ICIiLA0KPiArCQkJICAgICAgKGZs YWdzICYgV0FJVF9GT1JfU1VCTUlUKSA/ICItZm9yLXN1Ym1pdCIgOiAiIiwNCj4gKwkJCSAgICAg IChmbGFncyAmIFdBSVRfQVZBSUxBQkxFKSA/ICItYXZhaWxhYmxlIiA6ICIiLA0KPiArCQkJICAg ICAgKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRFRCkgPyAiLXVuc3VibWl0dGVkIiA6ICIiLA0KPiAr CQkJICAgICAgKGZsYWdzICYgV0FJVF9TVUJNSVRURUQpID8gIi1zdWJtaXR0ZWQiIDogIiIsDQo+ ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1NJR05BTEVEKSA/ICItc2lnbmFsZWQiIDogIiIpDQo+ ICsJCQl0ZXN0X211bHRpX3dhaXQoZmQsIGZsYWdzLCBlcnIpOw0KPiArCX0NCj4gKwlpZ3Rfc3Vi dGVzdCgid2FpdC1hbnktc25hcHNob3QiKQ0KPiArCQl0ZXN0X3dhaXRfc25hcHNob3QoZmQsIDAp Ow0KPiArDQo+ICsJaWd0X3N1YnRlc3QoIndhaXQtYWxsLXNuYXBzaG90IikNCj4gKwkJdGVzdF93 YWl0X3NuYXBzaG90KGZkLCBXQUlUX0FMTCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1m b3Itc3VibWl0LXNuYXBzaG90IikNCj4gKwkJdGVzdF93YWl0X3NuYXBzaG90KGZkLCBXQUlUX0ZP Ul9TVUJNSVQpOw0KPiArDQo+ICsJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWZvci1zdWJtaXQtc25h cHNob3QiKQ0KPiArCQl0ZXN0X3dhaXRfc25hcHNob3QoZmQsIFdBSVRfQUxMIHwgV0FJVF9GT1Jf U1VCTUlUKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3YWl0LWFueS1jb21wbGV4IikNCj4gKwkJ dGVzdF93YWl0X2NvbXBsZXgoZmQsIDApOw0KPiArDQo+ICsJaWd0X3N1YnRlc3QoIndhaXQtYWxs LWNvbXBsZXgiKQ0KPiArCQl0ZXN0X3dhaXRfY29tcGxleChmZCwgV0FJVF9BTEwpOw0KPiArDQo+ ICsJaWd0X3N1YnRlc3QoIndhaXQtZm9yLXN1Ym1pdC1jb21wbGV4IikNCj4gKwkJdGVzdF93YWl0 X2NvbXBsZXgoZmQsIFdBSVRfRk9SX1NVQk1JVCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgid2Fp dC1hbGwtZm9yLXN1Ym1pdC1jb21wbGV4IikNCj4gKwkJdGVzdF93YWl0X2NvbXBsZXgoZmQsIFdB SVRfQUxMIHwgV0FJVF9GT1JfU1VCTUlUKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3YWl0LWFu eS1pbnRlcnJ1cHRlZCIpDQo+ICsJCXRlc3Rfd2FpdF9pbnRlcnJ1cHRlZChmZCwgMCk7DQo+ICsN Cj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1hbGwtaW50ZXJydXB0ZWQiKQ0KPiArCQl0ZXN0X3dhaXRf aW50ZXJydXB0ZWQoZmQsIFdBSVRfQUxMKTsNCj4gK30NCj4gDQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2FtZC1nZngK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: "Wentland, Harry" Date: Fri, 14 Dec 2018 19:23:53 +0000 Message-ID: <42de691f-3631-49d4-2149-9cee0b338d03@amd.com> References: <20181211103735.26058-1-david1.zhou@amd.com> In-Reply-To: <20181211103735.26058-1-david1.zhou@amd.com> Content-Language: en-US Content-ID: MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t] igt: add timeline test cases v2 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: "Zhou, David(ChunMing)" , "Koenig, Christian" , "dri-devel@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" , "intel-gfx@lists.freedesktop.org" , IGT development List-ID: T24gMjAxOC0xMi0xMSA1OjM3IGEubS4sIENodW5taW5nIFpob3Ugd3JvdGU6DQo+IHYyOiBhZGFw dCB0byBuZXcgdHJhbnNmZXIgaW9jdGwNCj4gDQo+IFNpZ25lZC1vZmYtYnk6IENodW5taW5nIFpo b3UgPGRhdmlkMS56aG91QGFtZC5jb20+DQoNCitpZ3QtZGV2DQoNCkkgdGhpbmsgaW50ZWwtZ2Z4 IHN0aWxsIHdvcmtzIGZvciBJR1QgZGV2ZWxvcG1lbnQgYnV0IG1vc3Qgb2YgdGhlIElHVCB3b3Jr IGhhcHBlbnMgb24gaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcgbm93Lg0KDQpIYXJyeQ0K DQo+IC0tLQ0KPiAgaW5jbHVkZS9kcm0tdWFwaS9kcm0uaCAgIHwgICAzMyArKw0KPiAgbGliL2ln dF9zeW5jb2JqLmMgICAgICAgIHwgIDIwNiArKysrKysrKw0KPiAgbGliL2lndF9zeW5jb2JqLmgg ICAgICAgIHwgICAxOSArDQo+ICB0ZXN0cy9tZXNvbi5idWlsZCAgICAgICAgfCAgICAxICsNCj4g IHRlc3RzL3N5bmNvYmpfdGltZWxpbmUuYyB8IDEwMzIgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysNCj4gIDUgZmlsZXMgY2hhbmdlZCwgMTI5MSBpbnNlcnRpb25zKCspDQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvc3luY29ial90aW1lbGluZS5jDQo+IA0KPiBkaWZm IC0tZ2l0IGEvaW5jbHVkZS9kcm0tdWFwaS9kcm0uaCBiL2luY2x1ZGUvZHJtLXVhcGkvZHJtLmgN Cj4gaW5kZXggODVjNjg1YTIuLmRjZDI0NWQ5IDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL2RybS11 YXBpL2RybS5oDQo+ICsrKyBiL2luY2x1ZGUvZHJtLXVhcGkvZHJtLmgNCj4gQEAgLTczMSw2ICs3 MzEsOCBAQCBzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlIHsNCj4gIA0KPiAgI2RlZmluZSBEUk1f U1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfQUxMICgxIDw8IDApDQo+ICAjZGVmaW5lIERSTV9TWU5D T0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUICgxIDw8IDEpDQo+ICsvKiB3YWl0IGZvciB0 aW1lIHBvaW50IHRvIGJlY29tZSBhdmFpbGFibGUgKi8NCj4gKyNkZWZpbmUgRFJNX1NZTkNPQkpf V0FJVF9GTEFHU19XQUlUX0FWQUlMQUJMRSAoMSA8PCAyKQ0KPiAgc3RydWN0IGRybV9zeW5jb2Jq X3dhaXQgew0KPiAgCV9fdTY0IGhhbmRsZXM7DQo+ICAJLyogYWJzb2x1dGUgdGltZW91dCAqLw0K PiBAQCAtNzQxLDExICs3NDMsMzggQEAgc3RydWN0IGRybV9zeW5jb2JqX3dhaXQgew0KPiAgCV9f dTMyIHBhZDsNCj4gIH07DQo+ICANCj4gK3N0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0 IHsNCj4gKyAgICAgICAgX191NjQgaGFuZGxlczsNCj4gKyAgICAgICAgLyogd2FpdCBvbiBzcGVj aWZpYyB0aW1lbGluZSBwb2ludCBmb3IgZXZlcnkgaGFuZGxlcyovDQo+ICsgICAgICAgIF9fdTY0 IHBvaW50czsNCj4gKyAgICAgICAgLyogYWJzb2x1dGUgdGltZW91dCAqLw0KPiArICAgICAgICBf X3M2NCB0aW1lb3V0X25zZWM7DQo+ICsgICAgICAgIF9fdTMyIGNvdW50X2hhbmRsZXM7DQo+ICsg ICAgICAgIF9fdTMyIGZsYWdzOw0KPiArICAgICAgICBfX3UzMiBmaXJzdF9zaWduYWxlZDsgLyog b25seSB2YWxpZCB3aGVuIG5vdCB3YWl0aW5nIGFsbCAqLw0KPiArICAgICAgICBfX3UzMiBwYWQ7 DQo+ICt9Ow0KPiArDQo+ICBzdHJ1Y3QgZHJtX3N5bmNvYmpfYXJyYXkgew0KPiAgCV9fdTY0IGhh bmRsZXM7DQo+ICAJX191MzIgY291bnRfaGFuZGxlczsNCj4gIAlfX3UzMiBwYWQ7DQo+ICB9Ow0K PiArc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IHsNCj4gKyAgICAgICBfX3U2NCBo YW5kbGVzOw0KPiArICAgICAgIF9fdTY0IHBvaW50czsNCj4gKyAgICAgICBfX3UzMiBjb3VudF9o YW5kbGVzOw0KPiArICAgICAgIF9fdTMyIHBhZDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBkcm1f c3luY29ial90cmFuc2ZlciB7DQo+ICsgICAgICAgIF9fdTMyIHNyY19oYW5kbGU7DQo+ICsgICAg ICAgIF9fdTMyIGRzdF9oYW5kbGU7DQo+ICsgICAgICAgIF9fdTY0IHNyY19wb2ludDsNCj4gKyAg ICAgICAgX191NjQgZHN0X3BvaW50Ow0KPiArICAgICAgICBfX3UzMiBmbGFnczsNCj4gKyAgICAg ICAgX191MzIgcGFkOw0KPiArfTsNCj4gIA0KPiAgLyogUXVlcnkgY3VycmVudCBzY2Fub3V0IHNl cXVlbmNlIG51bWJlciAqLw0KPiAgc3RydWN0IGRybV9jcnRjX2dldF9zZXF1ZW5jZSB7DQo+IEBA IC05MDIsNiArOTMxLDEwIEBAIGV4dGVybiAiQyIgew0KPiAgI2RlZmluZSBEUk1fSU9DVExfTU9E RV9MSVNUX0xFU1NFRVMJRFJNX0lPV1IoMHhDNywgc3RydWN0IGRybV9tb2RlX2xpc3RfbGVzc2Vl cykNCj4gICNkZWZpbmUgRFJNX0lPQ1RMX01PREVfR0VUX0xFQVNFCURSTV9JT1dSKDB4QzgsIHN0 cnVjdCBkcm1fbW9kZV9nZXRfbGVhc2UpDQo+ICAjZGVmaW5lIERSTV9JT0NUTF9NT0RFX1JFVk9L RV9MRUFTRQlEUk1fSU9XUigweEM5LCBzdHJ1Y3QgZHJtX21vZGVfcmV2b2tlX2xlYXNlKQ0KPiAr I2RlZmluZSBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlUIERSTV9JT1dSKDB4Q0EsIHN0 cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0KQ0KPiArI2RlZmluZSBEUk1fSU9DVExfU1lO Q09CSl9RVUVSWSAgICAgICAgIERSTV9JT1dSKDB4Q0IsIHN0cnVjdCBkcm1fc3luY29ial90aW1l bGluZV9hcnJheSkNCj4gKyNkZWZpbmUgRFJNX0lPQ1RMX1NZTkNPQkpfVFJBTlNGRVIgICAgRFJN X0lPV1IoMHhDQywgc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyKQ0KPiArI2RlZmluZSBEUk1f SU9DVExfU1lOQ09CSl9USU1FTElORV9TSUdOQUwgICAgRFJNX0lPV1IoMHhDRCwgc3RydWN0IGRy bV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5KQ0KPiAgDQo+ICAvKioNCj4gICAqIERldmljZSBzcGVj aWZpYyBpb2N0bHMgc2hvdWxkIG9ubHkgYmUgaW4gdGhlaXIgcmVzcGVjdGl2ZSBoZWFkZXJzDQo+ IGRpZmYgLS1naXQgYS9saWIvaWd0X3N5bmNvYmouYyBiL2xpYi9pZ3Rfc3luY29iai5jDQo+IGlu ZGV4IGQ5MTE0Y2E4Li5lZmEyYWRjNCAxMDA2NDQNCj4gLS0tIGEvbGliL2lndF9zeW5jb2JqLmMN Cj4gKysrIGIvbGliL2lndF9zeW5jb2JqLmMNCj4gQEAgLTI4NiwzICsyODYsMjA5IEBAIHN5bmNv Ympfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50KQ0KPiAg ew0KPiAgCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3NpZ25hbChmZCwgaGFuZGxlcywgY291bnQp LCAwKTsNCj4gIH0NCj4gKw0KPiArc3RhdGljIGludA0KPiArX19zeW5jb2JqX3RpbWVsaW5lX3Np Z25hbChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLCB1aW50MzJf dCBjb3VudCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJy YXkgPSB7IDAgfTsNCj4gKwlpbnQgZXJyID0gMDsNCj4gKw0KPiArCWFycmF5LmhhbmRsZXMgPSB0 b191c2VyX3BvaW50ZXIoaGFuZGxlcyk7DQo+ICsJYXJyYXkucG9pbnRzID0gdG9fdXNlcl9wb2lu dGVyKHBvaW50cyk7DQo+ICsJYXJyYXkuY291bnRfaGFuZGxlcyA9IGNvdW50Ow0KPiArCWlmIChk cm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfU0lHTkFMLCAmYXJyYXkpKQ0K PiArCQllcnIgPSAtZXJybm87DQo+ICsJcmV0dXJuIGVycjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgKiBzeW5jb2JqX3NpZ25hbDoNCj4gKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3Iu DQo+ICsgKiBAaGFuZGxlczogQXJyYXkgb2Ygc3luY29iaiBoYW5kbGVzIHRvIHNpZ25hbA0KPiAr ICogQHBvaW50czogTGlzdCBvZiBwb2ludCBvZiBoYW5kbGVzIHRvIHNpZ25hbC4NCj4gKyAqIEBj b3VudDogQ291bnQgb2Ygc3luY29iaiBoYW5kbGVzLg0KPiArICoNCj4gKyAqIFNpZ25hbCBhIHNl dCBvZiBzeW5jb2Jqcy4NCj4gKyAqLw0KPiArdm9pZA0KPiArc3luY29ial90aW1lbGluZV9zaWdu YWwoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBvaW50cywgdWludDMyX3Qg Y291bnQpDQo+ICt7DQo+ICsJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfc2lnbmFs KGZkLCBoYW5kbGVzLCBwb2ludHMsIGNvdW50KSwgMCk7DQo+ICt9DQo+ICtpbnQNCj4gK19fc3lu Y29ial90aW1lbGluZV93YWl0X2lvY3RsKGludCBmZCwgc3RydWN0IGRybV9zeW5jb2JqX3RpbWVs aW5lX3dhaXQgKmFyZ3MpDQo+ICt7DQo+ICsJaW50IGVyciA9IDA7DQo+ICsJaWYgKGRybUlvY3Rs KGZkLCBEUk1fSU9DVExfU1lOQ09CSl9USU1FTElORV9XQUlULCBhcmdzKSkNCj4gKwkJZXJyID0g LWVycm5vOw0KPiArCXJldHVybiBlcnI7DQo+ICt9DQo+ICtzdGF0aWMgaW50DQo+ICtfX3N5bmNv YmpfdGltZWxpbmVfd2FpdChpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9p bnRzLA0KPiArCQkJdW5zaWduZWQgbnVtX2hhbmRsZXMsDQo+ICsJCQlpbnQ2NF90IHRpbWVvdXRf bnNlYywgdW5zaWduZWQgZmxhZ3MsDQo+ICsJCQl1aW50MzJfdCAqZmlyc3Rfc2lnbmFsZWQpDQo+ ICt7DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX3dhaXQgYXJnczsNCj4gKwlpbnQg cmV0Ow0KPiArDQo+ICsJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKGhhbmRsZXMpOw0K PiArCWFyZ3MucG9pbnRzID0gKHVpbnQ2NF90KXRvX3VzZXJfcG9pbnRlcihwb2ludHMpOw0KPiAr CWFyZ3MudGltZW91dF9uc2VjID0gdGltZW91dF9uc2VjOw0KPiArCWFyZ3MuY291bnRfaGFuZGxl cyA9IG51bV9oYW5kbGVzOw0KPiArCWFyZ3MuZmxhZ3MgPSBmbGFnczsNCj4gKwlhcmdzLmZpcnN0 X3NpZ25hbGVkID0gMDsNCj4gKwlhcmdzLnBhZCA9IDA7DQo+ICsNCj4gKwlyZXQgPSBkcm1Jb2N0 bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfV0FJVCwgJmFyZ3MpOw0KPiArCWlmIChy ZXQgPCAwKQ0KPiArCQlyZXR1cm4gLWVycm5vOw0KPiArDQo+ICsJaWYgKGZpcnN0X3NpZ25hbGVk KQ0KPiArCQkqZmlyc3Rfc2lnbmFsZWQgPSBhcmdzLmZpcnN0X3NpZ25hbGVkOw0KPiArDQo+ICsJ cmV0dXJuIHJldDsNCj4gK30NCj4gK2ludA0KPiArc3luY29ial90aW1lbGluZV93YWl0X2Vycihp bnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLA0KPiArCQkJICB1bnNp Z25lZCBudW1faGFuZGxlcywNCj4gKwkJCSAgaW50NjRfdCB0aW1lb3V0X25zZWMsIHVuc2lnbmVk IGZsYWdzKQ0KPiArew0KPiArCXJldHVybiBfX3N5bmNvYmpfdGltZWxpbmVfd2FpdChmZCwgaGFu ZGxlcywgcG9pbnRzLCBudW1faGFuZGxlcywNCj4gKwkJCQkgICAgICAgdGltZW91dF9uc2VjLCBm bGFncywgTlVMTCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogc3luY29ial90aW1lbGluZV93 YWl0Og0KPiArICogQGZkOiBUaGUgRFJNIGZpbGUgZGVzY3JpcHRvcg0KPiArICogQGhhbmRsZXM6 IExpc3Qgb2Ygc3luY29iaiBoYW5kbGVzIHRvIHdhaXQgZm9yLg0KPiArICogQHBvaW50czogTGlz dCBvZiBwb2ludCBvZiBoYW5kbGVzIHRvIHdhaXQgZm9yLg0KPiArICogQG51bV9oYW5kbGVzOiBD b3VudCBvZiBoYW5kbGVzDQo+ICsgKiBAdGltZW91dF9uc2VjOiBBYnNvbHV0ZSB3YWl0IHRpbWVv dXQgaW4gbmFub3NlY29uZHMuDQo+ICsgKiBAZmxhZ3M6IFdhaXQgaW9jdGwgZmxhZ3MuDQo+ICsg KiBAZmlyc3Rfc2lnbmFsZWQ6IFJldHVybmVkIGhhbmRsZSBmb3IgZmlyc3Qgc2lnbmFsZWQgc3lu Y29iai4NCj4gKyAqDQo+ICsgKiBXYWl0cyBpbiB0aGUga2VybmVsIGZvciBhbnkvYWxsIHRoZSBy ZXF1ZXN0ZWQgc3luY29ianMgdGltZWxpbmUgcG9pbnQNCj4gKyAqIHVzaW5nIHRoZSB0aW1lb3V0 IGFuZCBmbGFncy4NCj4gKyAqIFJldHVybnM6IGJvb2wgdmFsdWUgLSBmYWxzZSA9IHRpbWVkb3V0 LCB0cnVlID0gc2lnbmFsZWQNCj4gKyAqLw0KPiArYm9vbA0KPiArc3luY29ial90aW1lbGluZV93 YWl0KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsDQo+ICsJCSAg ICAgIHVuc2lnbmVkIG51bV9oYW5kbGVzLA0KPiArCQkgICAgICBpbnQ2NF90IHRpbWVvdXRfbnNl YywgdW5zaWduZWQgZmxhZ3MsDQo+ICsJCSAgICAgIHVpbnQzMl90ICpmaXJzdF9zaWduYWxlZCkN Cj4gK3sNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gX19zeW5jb2JqX3RpbWVsaW5lX3dh aXQoZmQsIGhhbmRsZXMsIHBvaW50cywgbnVtX2hhbmRsZXMsDQo+ICsJCQkJICAgICAgdGltZW91 dF9uc2VjLCBmbGFncywgZmlyc3Rfc2lnbmFsZWQpOw0KPiArCWlmIChyZXQgPT0gLUVUSU1FKQ0K PiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOw0KPiArDQo+ICsJ cmV0dXJuIHRydWU7DQo+ICsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArX19zeW5jb2Jq X3RpbWVsaW5lX3F1ZXJ5KGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICoqcG9p bnRzLA0KPiArCQkJIHVpbnQzMl90IGhhbmRsZV9jb3VudCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJt X3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJnczsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJYXJn cy5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKGhhbmRsZXMpOw0KPiArCWFyZ3MucG9pbnRzID0g KHVpbnQ2NF90KXRvX3VzZXJfcG9pbnRlcihwb2ludHMpOw0KPiArCWFyZ3MuY291bnRfaGFuZGxl cyA9IGhhbmRsZV9jb3VudDsNCj4gKwlhcmdzLnBhZCA9IDA7DQo+ICsNCj4gKwlyZXQgPSBkcm1J b2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfUVVFUlksICZhcmdzKTsNCj4gKwlpZiAocmV0KQ0K PiArCQlyZXR1cm4gcmV0Ow0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAq IHN5bmNvYmpfdGltZWxpbmVfcXVlcnk6DQo+ICsgKiBAZmQ6IFRoZSBEUk0gZmlsZSBkZXNjcmlw dG9yLg0KPiArICogQGhhbmRsZXM6IEFycmF5IG9mIHN5bmNvYmogaGFuZGxlcy4NCj4gKyAqIEBw b2ludHM6IEFycmF5IG9mIHN5bmNvYmogcG9pbnRzIHF1ZXJpZWQuDQo+ICsgKiBAY291bnQ6IENv dW50IG9mIHN5bmNvYmogaGFuZGxlcy4NCj4gKyAqDQo+ICsgKiBxdWVyeSBhIHNldCBvZiBzeW5j b2Jqcy4NCj4gKyAqLw0KPiArdm9pZA0KPiArc3luY29ial90aW1lbGluZV9xdWVyeShpbnQgZmQs IHVpbnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqKnBvaW50cywNCj4gKwkJICAgICAgIHVpbnQz Ml90IGNvdW50KQ0KPiArew0KPiArCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3RpbWVsaW5lX3F1 ZXJ5KGZkLCBoYW5kbGVzLCBwb2ludHMsIGNvdW50KSwgMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQNCj4gK19fc3luY29ial9iaW5hcnlfdG9fdGltZWxpbmUoaW50IGZkLCB1aW50MzJfdCB0 aW1lbGluZV9oYW5kbGUsDQo+ICsJCQkgICAgIHVpbnQ2NF90IHBvaW50LCB1aW50MzJfdCBiaW5h cnlfaGFuZGxlKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fc3luY29ial90cmFuc2ZlciBhcmdzOw0K PiArDQo+ICsJYXJncy5zcmNfaGFuZGxlID0gYmluYXJ5X2hhbmRsZTsNCj4gKwlhcmdzLmRzdF9o YW5kbGUgPSB0aW1lbGluZV9oYW5kbGU7DQo+ICsJYXJncy5zcmNfcG9pbnQgPSAwOw0KPiArCWFy Z3MuZHN0X3BvaW50ID0gcG9pbnQ7DQo+ICsJYXJncy5mbGFncyA9IDA7DQo+ICsJYXJncy5wYWQg PSAwOw0KPiArCXJldHVybiBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVFJBTlNGRVIs ICZhcmdzKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBzeW5jb2JqX2JpbmFyeV90b190aW1l bGluZToNCj4gKyAqIEBmZDogVGhlIERSTSBmaWxlIGRlc2NyaXB0b3IuDQo+ICsgKiBAdGltZWxp bmVfaGFuZGxlczogQXJyYXkgb2YgdGltZWxpbmUgc3luY29iaiBoYW5kbGVzLg0KPiArICogQHBv aW50OiBzeW5jb2JqIHBvaW50Lg0KPiArICogQGJpbmFyeV9oYW5kbGU6IEFycmF5IG9mIGJpbmFy eSBzeW5jb2JqIGhhbmRsZXMuDQo+ICsgKg0KPiArICogcXVlcnkgYSBzZXQgb2Ygc3luY29ianMu DQo+ICsgKi8NCj4gK3ZvaWQNCj4gK3N5bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lKGludCBmZCwg dWludDMyX3QgdGltZWxpbmVfaGFuZGxlLA0KPiArCQkJICAgdWludDY0X3QgcG9pbnQsIHVpbnQz Ml90IGJpbmFyeV9oYW5kbGUpDQo+ICt7DQo+ICsJaWd0X2Fzc2VydF9lcShfX3N5bmNvYmpfYmlu YXJ5X3RvX3RpbWVsaW5lKGZkLCB0aW1lbGluZV9oYW5kbGUsIHBvaW50LA0KPiArCQkJCQkJICAg YmluYXJ5X2hhbmRsZSksIDApOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50DQo+ICtfX3N5bmNv YmpfdGltZWxpbmVfdG9fYmluYXJ5KGludCBmZCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSwNCj4g KwkJCSAgICAgdWludDMyX3QgdGltZWxpbmVfaGFuZGxlLA0KPiArCQkJICAgICB1aW50NjRfdCBw b2ludCwNCj4gKwkJCSAgICAgdWludDMyX3QgZmxhZ3MpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9z eW5jb2JqX3RyYW5zZmVyIGFyZ3M7DQo+ICsNCj4gKwlhcmdzLmRzdF9oYW5kbGUgPSBiaW5hcnlf aGFuZGxlOw0KPiArCWFyZ3Muc3JjX2hhbmRsZSA9IHRpbWVsaW5lX2hhbmRsZTsNCj4gKwlhcmdz LmRzdF9wb2ludCA9IDA7DQo+ICsJYXJncy5zcmNfcG9pbnQgPSBwb2ludDsNCj4gKwlhcmdzLmZs YWdzID0gZmxhZ3M7DQo+ICsJYXJncy5wYWQgPSAwOw0KPiArCXJldHVybiBkcm1Jb2N0bChmZCwg RFJNX0lPQ1RMX1NZTkNPQkpfVFJBTlNGRVIsICZhcmdzKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgKiBzeW5jb2JqX2JpbmFyeV90b190aW1lbGluZToNCj4gKyAqIEBmZDogVGhlIERSTSBmaWxl IGRlc2NyaXB0b3IuDQo+ICsgKiBAdGltZWxpbmVfaGFuZGxlczogQXJyYXkgb2YgdGltZWxpbmUg c3luY29iaiBoYW5kbGVzLg0KPiArICogQHBvaW50OiBzeW5jb2JqIHBvaW50Lg0KPiArICogQGJp bmFyeV9oYW5kbGU6IEFycmF5IG9mIGJpbmFyeSBzeW5jb2JqIGhhbmRsZXMuDQo+ICsgKg0KPiAr ICogcXVlcnkgYSBzZXQgb2Ygc3luY29ianMuDQo+ICsgKi8NCj4gK3ZvaWQNCj4gK3N5bmNvYmpf dGltZWxpbmVfdG9fYmluYXJ5KGludCBmZCwgdWludDMyX3QgYmluYXJ5X2hhbmRsZSwNCj4gKwkJ CSAgIHVpbnQzMl90IHRpbWVsaW5lX2hhbmRsZSwNCj4gKwkJCSAgIHVpbnQ2NF90IHBvaW50LA0K PiArCQkJICAgdWludDMyX3QgZmxhZ3MpDQo+ICt7DQo+ICsJaWd0X2Fzc2VydF9lcShfX3N5bmNv YmpfdGltZWxpbmVfdG9fYmluYXJ5KGZkLCBiaW5hcnlfaGFuZGxlLA0KPiArCQkJCQkJICAgdGlt ZWxpbmVfaGFuZGxlLCBwb2ludCwNCj4gKwkJCQkJCSAgIGZsYWdzKSwgMCk7DQo+ICt9DQo+IGRp ZmYgLS1naXQgYS9saWIvaWd0X3N5bmNvYmouaCBiL2xpYi9pZ3Rfc3luY29iai5oDQo+IGluZGV4 IDQ0ZDEzNzhkLi4xNzVlNTAyNyAxMDA2NDQNCj4gLS0tIGEvbGliL2lndF9zeW5jb2JqLmgNCj4g KysrIGIvbGliL2lndF9zeW5jb2JqLmgNCj4gQEAgLTY1LDcgKzY1LDI2IEBAIGludCBzeW5jb2Jq X3dhaXRfZXJyKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50LA0KPiAg Ym9vbCBzeW5jb2JqX3dhaXQoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDMyX3QgY291 bnQsDQo+ICAJCSAgdWludDY0X3QgYWJzX3RpbWVvdXRfbnNlYywgdWludDMyX3QgZmxhZ3MsDQo+ ICAJCSAgdWludDMyX3QgKmZpcnN0X3NpZ25hbGVkKTsNCj4gK2ludCBfX3N5bmNvYmpfdGltZWxp bmVfd2FpdF9pb2N0bChpbnQgZmQsDQo+ICsJCQkJICBzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxp bmVfd2FpdCAqYXJncyk7DQo+ICtib29sIHN5bmNvYmpfdGltZWxpbmVfd2FpdChpbnQgZmQsIHVp bnQzMl90ICpoYW5kbGVzLCB1aW50NjRfdCAqcG9pbnRzLA0KPiArCQkJICAgdW5zaWduZWQgbnVt X2hhbmRsZXMsDQo+ICsJCQkgICBpbnQ2NF90IHRpbWVvdXRfbnNlYywgdW5zaWduZWQgZmxhZ3Ms DQo+ICsJCQkgICB1aW50MzJfdCAqZmlyc3Rfc2lnbmFsZWQpOw0KPiAraW50IHN5bmNvYmpfdGlt ZWxpbmVfd2FpdF9lcnIoaW50IGZkLCB1aW50MzJfdCAqaGFuZGxlcywgdWludDY0X3QgKnBvaW50 cywNCj4gKwkJCSAgICAgIHVuc2lnbmVkIG51bV9oYW5kbGVzLA0KPiArCQkJICAgICAgaW50NjRf dCB0aW1lb3V0X25zZWMsIHVuc2lnbmVkIGZsYWdzKTsNCj4gIHZvaWQgc3luY29ial9yZXNldChp bnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1aW50MzJfdCBjb3VudCk7DQo+ICB2b2lkIHN5bmNv Ympfc2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQzMl90IGNvdW50KTsNCj4g K3ZvaWQgc3luY29ial90aW1lbGluZV9xdWVyeShpbnQgZmQsIHVpbnQzMl90ICpoYW5kbGVzLCB1 aW50NjRfdCAqKnBvaW50cywNCj4gKwkJCSAgICB1aW50MzJfdCBjb3VudCk7DQo+ICt2b2lkIHN5 bmNvYmpfYmluYXJ5X3RvX3RpbWVsaW5lKGludCBmZCwgdWludDMyX3QgdGltZWxpbmVfaGFuZGxl LA0KPiArCQkJCXVpbnQ2NF90IHBvaW50LCB1aW50MzJfdCBiaW5hcnlfaGFuZGxlKTsNCj4gK3Zv aWQgc3luY29ial90aW1lbGluZV90b19iaW5hcnkoaW50IGZkLCB1aW50MzJfdCBiaW5hcnlfaGFu ZGxlLA0KPiArCQkJCXVpbnQzMl90IHRpbWVsaW5lX2hhbmRsZSwNCj4gKwkJCQl1aW50NjRfdCBw b2ludCwNCj4gKwkJCQl1aW50MzJfdCBmbGFncyk7DQo+ICt2b2lkIHN5bmNvYmpfdGltZWxpbmVf c2lnbmFsKGludCBmZCwgdWludDMyX3QgKmhhbmRsZXMsIHVpbnQ2NF90ICpwb2ludHMsDQo+ICsJ CQkgICAgIHVpbnQzMl90IGNvdW50KTsNCj4gIA0KPiAgI2VuZGlmIC8qIElHVF9TWU5DT0JKX0gg Ki8NCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL21lc29uLmJ1aWxkIGIvdGVzdHMvbWVzb24uYnVpbGQN Cj4gaW5kZXggYjhhNmU2MWIuLmJkZGMyMjNjIDEwMDY0NA0KPiAtLS0gYS90ZXN0cy9tZXNvbi5i dWlsZA0KPiArKysgYi90ZXN0cy9tZXNvbi5idWlsZA0KPiBAQCAtNzcsNiArNzcsNyBAQCB0ZXN0 X3Byb2dzID0gWw0KPiAgCSdzd19zeW5jJywNCj4gIAknc3luY29ial9iYXNpYycsDQo+ICAJJ3N5 bmNvYmpfd2FpdCcsDQo+ICsJJ3N5bmNvYmpfdGltZWxpbmUnLA0KPiAgCSd0ZW1wbGF0ZScsDQo+ ICAJJ3Rvb2xzX3Rlc3QnLA0KPiAgCSd2M2RfZ2V0X2JvX29mZnNldCcsDQo+IGRpZmYgLS1naXQg YS90ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMgYi90ZXN0cy9zeW5jb2JqX3RpbWVsaW5lLmMNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAuLjUwNWZkOWVkDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvdGVzdHMvc3luY29ial90aW1lbGluZS5jDQo+IEBAIC0wLDAgKzEs MTAzMiBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCDCqSAyMDE4IEludGVsIENvcnBvcmF0aW9u DQo+ICsgKg0KPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2Fy ZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksDQo+ ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uDQo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwNCj4gKyAqIGFuZC9v ciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZQ0KPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRv IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gKyAqDQo+ICsgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 DQo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlDQo+ICsgKiBTb2Z0d2FyZS4NCj4gKyAqDQo+ICsgKiBU SEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkg S0lORCwgRVhQUkVTUyBPUg0KPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRF RCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksDQo+ICsgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwNCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBG T1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSDQo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORw0KPiAr ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUw0KPiArICogSU4gVEhFIFNPRlRXQVJFLg0KPiArICovDQo+ ICsNCj4gKyNpbmNsdWRlICJpZ3QuaCINCj4gKyNpbmNsdWRlICJzd19zeW5jLmgiDQo+ICsjaW5j bHVkZSAiaWd0X3N5bmNvYmouaCINCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4NCj4gKyNpbmNsdWRl IDx0aW1lLmg+DQo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+DQo+ICsjaW5jbHVkZSA8cHRocmVh ZC5oPg0KPiArI2luY2x1ZGUgPHNpZ25hbC5oPg0KPiArI2luY2x1ZGUgImRybS5oIg0KPiArDQo+ ICtJR1RfVEVTVF9ERVNDUklQVElPTigiVGVzdHMgZm9yIHRoZSBkcm0gdGltZWxpbmUgc3luYyBv YmplY3QgQVBJIik7DQo+ICsNCj4gKy8qIE9uZSB0ZW50aCBvZiBhIHNlY29uZCAqLw0KPiArI2Rl ZmluZSBTSE9SVF9USU1FX05TRUMgMTAwMDAwMDAwdWxsDQo+ICsNCj4gKyNkZWZpbmUgTlNFQ1Nf UEVSX1NFQyAxMDAwMDAwMDAwdWxsDQo+ICsNCj4gK3N0YXRpYyB1aW50NjRfdA0KPiArZ2V0dGlt ZV9ucyh2b2lkKQ0KPiArew0KPiArCXN0cnVjdCB0aW1lc3BlYyBjdXJyZW50Ow0KPiArCWNsb2Nr X2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmY3VycmVudCk7DQo+ICsJcmV0dXJuICh1aW50NjRf dCljdXJyZW50LnR2X3NlYyAqIE5TRUNTX1BFUl9TRUMgKyBjdXJyZW50LnR2X25zZWM7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtzbGVlcF9uc2VjKHVpbnQ2NF90IHRpbWVfbnNlYykN Cj4gK3sNCj4gKwlzdHJ1Y3QgdGltZXNwZWMgdDsNCj4gKwl0LnR2X3NlYyA9IHRpbWVfbnNlYyAv IE5TRUNTX1BFUl9TRUM7DQo+ICsJdC50dl9uc2VjID0gdGltZV9uc2VjICUgTlNFQ1NfUEVSX1NF QzsNCj4gKwlpZ3RfYXNzZXJ0X2VxKG5hbm9zbGVlcCgmdCwgTlVMTCksIDApOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdWludDY0X3QNCj4gK3Nob3J0X3RpbWVvdXQodm9pZCkNCj4gK3sNCj4gKwly ZXR1cm4gZ2V0dGltZV9ucygpICsgU0hPUlRfVElNRV9OU0VDOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgaW50DQo+ICtzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGludCBmZCwgdWludDMyX3QgaGFuZGxl LCB1aW50NjRfdCBwb2ludCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfaGFuZGxlOw0K PiArCXVpbnQzMl90IHN5bmNvYmogPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsJaW50IHRp bWVsaW5lLCBmZW5jZTsNCj4gKw0KPiArCXRpbWVsaW5lID0gc3dfc3luY190aW1lbGluZV9jcmVh dGUoKTsNCj4gKwlmZW5jZSA9IHN3X3N5bmNfdGltZWxpbmVfY3JlYXRlX2ZlbmNlKHRpbWVsaW5l LCAxKTsNCj4gKwlzeW5jb2JqX2ltcG9ydF9zeW5jX2ZpbGUoZmQsIHN5bmNvYmosIGZlbmNlKTsN Cj4gKwlzeW5jb2JqX2JpbmFyeV90b190aW1lbGluZShmZCwgaGFuZGxlLCBwb2ludCwgc3luY29i aik7DQo+ICsJY2xvc2UoZmVuY2UpOw0KPiArDQo+ICsJc3luY29ial9kZXN0cm95KGZkLCBzeW5j b2JqKTsNCj4gKwlyZXR1cm4gdGltZWxpbmU7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ ICtzeW5jb2JqX3RyaWdnZXIoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQ2NF90IHBvaW50 KQ0KPiArew0KPiArCWludCB0aW1lbGluZSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIGhh bmRsZSwgcG9pbnQpOw0KPiArCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lLCAxKTsNCj4g KwljbG9zZSh0aW1lbGluZSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB0aW1lcl90DQo+ICtzZXRf dGltZXIodm9pZCAoKmNiKSh1bmlvbiBzaWd2YWwpLCB2b2lkICpwdHIsIGludCBpLCB1aW50NjRf dCBuc2VjKQ0KPiArew0KPiArICAgICAgICB0aW1lcl90IHRpbWVyOw0KPiArICAgICAgICBzdHJ1 Y3Qgc2lnZXZlbnQgc2V2Ow0KPiArICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyBpdHM7DQo+ICsN Cj4gKyAgICAgICAgbWVtc2V0KCZzZXYsIDAsIHNpemVvZihzZXYpKTsNCj4gKyAgICAgICAgc2V2 LnNpZ2V2X25vdGlmeSA9IFNJR0VWX1RIUkVBRDsNCj4gKwlpZiAocHRyKQ0KPiArCQlzZXYuc2ln ZXZfdmFsdWUuc2l2YWxfcHRyID0gcHRyOw0KPiArCWVsc2UNCj4gKwkJc2V2LnNpZ2V2X3ZhbHVl LnNpdmFsX2ludCA9IGk7DQo+ICsgICAgICAgIHNldi5zaWdldl9ub3RpZnlfZnVuY3Rpb24gPSBj YjsNCj4gKyAgICAgICAgaWd0X2Fzc2VydCh0aW1lcl9jcmVhdGUoQ0xPQ0tfTU9OT1RPTklDLCAm c2V2LCAmdGltZXIpID09IDApOw0KPiArDQo+ICsgICAgICAgIG1lbXNldCgmaXRzLCAwLCBzaXpl b2YoaXRzKSk7DQo+ICsgICAgICAgIGl0cy5pdF92YWx1ZS50dl9zZWMgPSBuc2VjIC8gTlNFQ19Q RVJfU0VDOw0KPiArICAgICAgICBpdHMuaXRfdmFsdWUudHZfbnNlYyA9IG5zZWMgJSBOU0VDX1BF Ul9TRUM7DQo+ICsgICAgICAgIGlndF9hc3NlcnQodGltZXJfc2V0dGltZSh0aW1lciwgMCwgJml0 cywgTlVMTCkgPT0gMCk7DQo+ICsNCj4gKwlyZXR1cm4gdGltZXI7DQo+ICt9DQo+ICsNCj4gK3N0 cnVjdCBmZF9oYW5kbGVfcGFpciB7DQo+ICsJaW50IGZkOw0KPiArCXVpbnQzMl90IGhhbmRsZTsN Cj4gKwl1aW50NjRfdCBwb2ludDsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0aW1l bGluZV9pbmNfZnVuYyh1bmlvbiBzaWd2YWwgc2lndmFsKQ0KPiArew0KPiArCXN3X3N5bmNfdGlt ZWxpbmVfaW5jKHNpZ3ZhbC5zaXZhbF9pbnQsIDEpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZA0KPiArc3luY29ial90cmlnZ2VyX2ZyZWVfcGFpcl9mdW5jKHVuaW9uIHNpZ3ZhbCBzaWd2YWwp DQo+ICt7DQo+ICsJc3RydWN0IGZkX2hhbmRsZV9wYWlyICpwYWlyID0gc2lndmFsLnNpdmFsX3B0 cjsNCj4gKwlzeW5jb2JqX3RyaWdnZXIocGFpci0+ZmQsIHBhaXItPmhhbmRsZSwgcGFpci0+cG9p bnQpOw0KPiArCWZyZWUocGFpcik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB0aW1lcl90DQo+ICtz eW5jb2JqX3RyaWdnZXJfZGVsYXllZChpbnQgZmQsIHVpbnQzMl90IHN5bmNvYmosIHVpbnQ2NF90 IHBvaW50LCB1aW50NjRfdCBuc2VjKQ0KPiArew0KPiArCXN0cnVjdCBmZF9oYW5kbGVfcGFpciAq cGFpciA9IG1hbGxvYyhzaXplb2YoKnBhaXIpKTsNCj4gKw0KPiArCXBhaXItPmZkID0gZmQ7DQo+ ICsJcGFpci0+aGFuZGxlID0gc3luY29iajsNCj4gKwlwYWlyLT5wb2ludCA9IHN5bmNvYmo7DQo+ ICsNCj4gKwlyZXR1cm4gc2V0X3RpbWVyKHN5bmNvYmpfdHJpZ2dlcl9mcmVlX3BhaXJfZnVuYywg cGFpciwgMCwgbnNlYyk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3dhaXRf YmFkX2ZsYWdzKGludCBmZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVf d2FpdCB3YWl0ID0geyAwIH07DQo+ICsJd2FpdC5mbGFncyA9IDB4ZGVhZGJlZWY7DQo+ICsJaWd0 X2Fzc2VydF9lcShfX3N5bmNvYmpfdGltZWxpbmVfd2FpdF9pb2N0bChmZCwgJndhaXQpLCAtRUlO VkFMKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rfd2FpdF96ZXJvX2hhbmRs ZXMoaW50IGZkKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdh aXQgPSB7IDAgfTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lv Y3RsKGZkLCAmd2FpdCksIC1FSU5WQUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr dGVzdF93YWl0X2lsbGVnYWxfaGFuZGxlKGludCBmZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5 bmNvYmpfdGltZWxpbmVfd2FpdCB3YWl0ID0geyAwIH07DQo+ICsJdWludDMyX3QgaGFuZGxlID0g MDsNCj4gKw0KPiArCXdhaXQuY291bnRfaGFuZGxlcyA9IDE7DQo+ICsJd2FpdC5oYW5kbGVzID0g dG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOw0KPiArCWlndF9hc3NlcnRfZXEoX19zeW5jb2JqX3Rp bWVsaW5lX3dhaXRfaW9jdGwoZmQsICZ3YWl0KSwgLUVOT0VOVCk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyB2b2lkDQo+ICt0ZXN0X3F1ZXJ5X3plcm9faGFuZGxlcyhpbnQgZmQpDQo+ICt7DQo+ICsJ c3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFyZ3MgPSB7IDAgfTsNCj4gKwlpbnQg cmV0Ow0KPiArDQo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1FVRVJZ LCAmYXJncyk7DQo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gIEVJTlZBTCk7 DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3F1ZXJ5X2lsbGVnYWxfaGFuZGxl KGludCBmZCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJn cyA9IHsgMCB9Ow0KPiArCXVpbnQzMl90IGhhbmRsZSA9IDA7DQo+ICsJaW50IHJldDsNCj4gKw0K PiArCWFyZ3MuY291bnRfaGFuZGxlcyA9IDE7DQo+ICsJYXJncy5oYW5kbGVzID0gdG9fdXNlcl9w b2ludGVyKCZoYW5kbGUpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09C Sl9RVUVSWSwgJmFyZ3MpOw0KPiArCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVO T0VOVCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3F1ZXJ5X29uZV9pbGxl Z2FsX2hhbmRsZShpbnQgZmQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5l X2FycmF5IGFycmF5ID0geyAwIH07DQo+ICsJdWludDMyX3Qgc3luY29ianNbM107DQo+ICsJdWlu dDY0X3QgaW5pdGlhbF9wb2ludCA9IDE7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXN5bmNvYmpz WzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0KPiArCXN5bmNvYmpzWzFdID0gMDsNCj4gKwlz eW5jb2Jqc1syXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKw0KPiArCXN5bmNvYmpfdGlt ZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMF0sICZpbml0aWFsX3BvaW50LCAxKTsNCj4gKwlz eW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgJnN5bmNvYmpzWzJdLCAmaW5pdGlhbF9wb2ludCwg MSk7DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3lu Y29ianNbMF0sDQo+ICsJCQkJCQkmaW5pdGlhbF9wb2ludCwgMSwgMCwgMCksIDApOw0KPiArCWln dF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmpzWzJdLA0K PiArCQkJCQkJJmluaXRpYWxfcG9pbnQsIDEsIDAsIDApLCAwKTsNCj4gKw0KPiArCWFycmF5LmNv dW50X2hhbmRsZXMgPSAzOw0KPiArCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoc3lu Y29ianMpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9RVUVSWSwg JmFycmF5KTsNCj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBlcnJubyA9PSBFTk9FTlQpOw0K PiArDQo+ICsJc3luY29ial9kZXN0cm95KGZkLCBzeW5jb2Jqc1swXSk7DQo+ICsJc3luY29ial9k ZXN0cm95KGZkLCBzeW5jb2Jqc1syXSk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0 ZXN0X3F1ZXJ5X2JhZF9wYWQoaW50IGZkKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fc3luY29ial90 aW1lbGluZV9hcnJheSBhcnJheSA9IHsgMCB9Ow0KPiArCXVpbnQzMl90IGhhbmRsZSA9IDA7DQo+ ICsJaW50IHJldDsNCj4gKw0KPiArCWFycmF5LnBhZCA9IDB4ZGVhZGJlZWY7DQo+ICsJYXJyYXku Y291bnRfaGFuZGxlcyA9IDE7DQo+ICsJYXJyYXkuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcigm aGFuZGxlKTsNCj4gKwlyZXQgPSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfUVVFUlks ICZhcnJheSk7DQo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsN Cj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rfc2lnbmFsX3plcm9faGFuZGxlcyhp bnQgZmQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFyZ3Mg PSB7IDAgfTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9J T0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFyZ3MpOw0KPiArCWlndF9hc3NlcnQocmV0 ID09IC0xICYmIGVycm5vID09ICBFSU5WQUwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0K PiArdGVzdF9zaWduYWxfaWxsZWdhbF9oYW5kbGUoaW50IGZkKQ0KPiArew0KPiArCXN0cnVjdCBk cm1fc3luY29ial90aW1lbGluZV9hcnJheSBhcmdzID0geyAwIH07DQo+ICsJdWludDMyX3QgaGFu ZGxlID0gMDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJYXJncy5jb3VudF9oYW5kbGVzID0gMTsN Cj4gKwlhcmdzLmhhbmRsZXMgPSB0b191c2VyX3BvaW50ZXIoJmhhbmRsZSk7DQo+ICsJcmV0ID0g ZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RJTUVMSU5FX1NJR05BTCwgJmFyZ3MpOw0K PiArCWlndF9hc3NlcnQocmV0ID09IC0xICYmIGVycm5vID09IEVOT0VOVCk7DQo+ICt9DQo+ICsN Cj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3NpZ25hbF9pbGxlZ2FsX3BvaW50KGludCBmZCkNCj4g K3sNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfYXJyYXkgYXJncyA9IHsgMCB9Ow0K PiArCXVpbnQzMl90IGhhbmRsZSA9IDE7DQo+ICsJdWludDY0X3QgcG9pbnQgPSAwOw0KPiArCWlu dCByZXQ7DQo+ICsNCj4gKwlhcmdzLmNvdW50X2hhbmRsZXMgPSAxOw0KPiArCWFyZ3MuaGFuZGxl cyA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsNCj4gKwlhcmdzLnBvaW50cyA9IHRvX3VzZXJf cG9pbnRlcigmcG9pbnQpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09C Sl9USU1FTElORV9TSUdOQUwsICZhcmdzKTsNCj4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAtMSAmJiBl cnJubyA9PSBFTk9FTlQpOw0KPiArfQ0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rfc2lnbmFsX29u ZV9pbGxlZ2FsX2hhbmRsZShpbnQgZmQpDQo+ICt7DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3Rp bWVsaW5lX2FycmF5IGFycmF5ID0geyAwIH07DQo+ICsJdWludDMyX3Qgc3luY29ianNbM107DQo+ ICsJdWludDY0X3QgaW5pdGlhbF9wb2ludCA9IDE7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCXN5 bmNvYmpzWzBdID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0KPiArCXN5bmNvYmpzWzFdID0gMDsN Cj4gKwlzeW5jb2Jqc1syXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKw0KPiArCXN5bmNv YmpfdGltZWxpbmVfc2lnbmFsKGZkLCAmc3luY29ianNbMF0sICZpbml0aWFsX3BvaW50LCAxKTsN Cj4gKwlzeW5jb2JqX3RpbWVsaW5lX3NpZ25hbChmZCwgJnN5bmNvYmpzWzJdLCAmaW5pdGlhbF9w b2ludCwgMSk7DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZk LCAmc3luY29ianNbMF0sDQo+ICsJCQkJCQkmaW5pdGlhbF9wb2ludCwgMSwgMCwgMCksIDApOw0K PiArCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmpz WzJdLA0KPiArCQkJCQkJJmluaXRpYWxfcG9pbnQsIDEsIDAsIDApLCAwKTsNCj4gKw0KPiArCWFy cmF5LmNvdW50X2hhbmRsZXMgPSAzOw0KPiArCWFycmF5LmhhbmRsZXMgPSB0b191c2VyX3BvaW50 ZXIoc3luY29ianMpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9U SU1FTElORV9TSUdOQUwsICZhcnJheSk7DQo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJy bm8gPT0gRU5PRU5UKTsNCj4gKw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMF0p Ow0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMl0pOw0KPiArfQ0KPiArDQo+ICtz dGF0aWMgdm9pZA0KPiArdGVzdF9zaWduYWxfYmFkX3BhZChpbnQgZmQpDQo+ICt7DQo+ICsJc3Ry dWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lX2FycmF5IGFycmF5ID0geyAwIH07DQo+ICsJdWludDMy X3QgaGFuZGxlID0gMDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJYXJyYXkucGFkID0gMHhkZWFk YmVlZjsNCj4gKwlhcnJheS5jb3VudF9oYW5kbGVzID0gMTsNCj4gKwlhcnJheS5oYW5kbGVzID0g dG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOw0KPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9D VExfU1lOQ09CSl9USU1FTElORV9TSUdOQUwsICZhcnJheSk7DQo+ICsJaWd0X2Fzc2VydChyZXQg PT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4g K3Rlc3Rfc2lnbmFsX2FycmF5KGludCBmZCkNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2Jqc1s0 XTsNCj4gKwl1aW50NjRfdCBwb2ludHNbNF0gPSB7MSwgMSwgMSwgMH07DQo+ICsNCj4gKwlzeW5j b2Jqc1swXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKwlzeW5jb2Jqc1sxXSA9IHN5bmNv YmpfY3JlYXRlKGZkLCAwKTsNCj4gKwlzeW5jb2Jqc1syXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAw KTsNCj4gKwlzeW5jb2Jqc1szXSA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKw0KPiArCXN5 bmNvYmpfdGltZWxpbmVfc2lnbmFsKGZkLCBzeW5jb2JqcywgcG9pbnRzLCA0KTsNCj4gKwlpZ3Rf YXNzZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsIHN5bmNvYmpzLA0KPiArCQkJ CQkJcG9pbnRzLCAzLCAwLCAwKSwgMCk7DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3dhaXRf ZXJyKGZkLCAmc3luY29ianNbM10sIDEsIDAsIDApLCAwKTsNCj4gKw0KPiArCXN5bmNvYmpfZGVz dHJveShmZCwgc3luY29ianNbMF0pOw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNb MV0pOw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMl0pOw0KPiArCXN5bmNvYmpf ZGVzdHJveShmZCwgc3luY29ianNbM10pOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr dGVzdF90cmFuc2Zlcl9pbGxlZ2FsX2hhbmRsZShpbnQgZmQpDQo+ICt7DQo+ICsJc3RydWN0IGRy bV9zeW5jb2JqX3RyYW5zZmVyIGFyZ3MgPSB7IDAgfTsNCj4gKwl1aW50MzJfdCBoYW5kbGUgPSAw Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlhcmdzLnNyY19oYW5kbGUgPSB0b191c2VyX3BvaW50 ZXIoJmhhbmRsZSk7DQo+ICsJYXJncy5kc3RfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5k bGUpOw0KPiArCWFyZ3Muc3JjX3BvaW50ID0gMTsNCj4gKwlhcmdzLmRzdF9wb2ludCA9IDA7DQo+ ICsJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9TWU5DT0JKX1RSQU5TRkVSLCAmYXJncyk7 DQo+ICsJaWd0X2Fzc2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UKTsNCj4gK30NCj4g Kw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3RfdHJhbnNmZXJfYmFkX3BhZChpbnQgZmQpDQo+ICt7 DQo+ICsJc3RydWN0IGRybV9zeW5jb2JqX3RyYW5zZmVyIGFyZyA9IHsgMCB9Ow0KPiArCXVpbnQz Ml90IGhhbmRsZSA9IDA7DQo+ICsJaW50IHJldDsNCj4gKw0KPiArCWFyZy5wYWQgPSAweGRlYWRi ZWVmOw0KPiArCWFyZy5zcmNfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOw0KPiAr CWFyZy5kc3RfaGFuZGxlID0gdG9fdXNlcl9wb2ludGVyKCZoYW5kbGUpOw0KPiArCXJldCA9IGRy bUlvY3RsKGZkLCBEUk1fSU9DVExfU1lOQ09CSl9UUkFOU0ZFUiwgJmFyZyk7DQo+ICsJaWd0X2Fz c2VydChyZXQgPT0gLTEgJiYgZXJybm8gPT0gRUlOVkFMKTsNCj4gK30NCj4gKw0KPiArI2RlZmlu ZSBXQUlUX0ZPUl9TVUJNSVQJCSgxIDw8IDApDQo+ICsjZGVmaW5lIFdBSVRfQUxMCQkoMSA8PCAx KQ0KPiArI2RlZmluZSBXQUlUX0FWQUlMQUJMRQkJKDEgPDwgMikNCj4gKyNkZWZpbmUgV0FJVF9V TlNVQk1JVFRFRAkoMSA8PCAzKQ0KPiArI2RlZmluZSBXQUlUX1NVQk1JVFRFRAkJKDEgPDwgNCkN Cj4gKyNkZWZpbmUgV0FJVF9TSUdOQUxFRAkJKDEgPDwgNSkNCj4gKyNkZWZpbmUgV0FJVF9GTEFH U19NQVgJCSgxIDw8IDYpIC0gMQ0KPiArDQo+ICtzdGF0aWMgdWludDMyX3QNCj4gK2ZsYWdzX2Zv cl90ZXN0X2ZsYWdzKHVpbnQzMl90IHRlc3RfZmxhZ3MpDQo+ICt7DQo+ICsJdWludDMyX3QgZmxh Z3MgPSAwOw0KPiArDQo+ICsJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpDQo+ICsJ CWZsYWdzIHw9IERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlUOw0KPiArDQo+ ICsJaWYgKHRlc3RfZmxhZ3MgJiBXQUlUX0FWQUlMQUJMRSkNCj4gKwkJZmxhZ3MgfD0gRFJNX1NZ TkNPQkpfV0FJVF9GTEFHU19XQUlUX0FWQUlMQUJMRTsNCj4gKw0KPiArCWlmICh0ZXN0X2ZsYWdz ICYgV0FJVF9BTEwpDQo+ICsJCWZsYWdzIHw9IERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9B TEw7DQo+ICsNCj4gKwlyZXR1cm4gZmxhZ3M7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ ICt0ZXN0X3NpbmdsZV93YWl0KGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncywgaW50IGV4cGVj dCkNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0K PiArCXVpbnQzMl90IGZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7DQo+ ICsJdWludDY0X3QgcG9pbnQgPSAxOw0KPiArCWludCB0aW1lbGluZSA9IC0xOw0KPiArDQo+ICsJ aWYgKHRlc3RfZmxhZ3MgJiAoV0FJVF9TVUJNSVRURUQgfCBXQUlUX1NJR05BTEVEKSkNCj4gKwkJ dGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2JqLCBwb2ludCk7DQo+ ICsNCj4gKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfU0lHTkFMRUQpDQo+ICsJCXN3X3N5bmNfdGlt ZWxpbmVfaW5jKHRpbWVsaW5lLCAxKTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZXEoc3luY29ial90 aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwgMSwNCj4gKwkJCQkJCTAsIGZs YWdzKSwgZXhwZWN0KTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93 YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwgMSwNCj4gKwkJCQkJCXNob3J0X3RpbWVvdXQo KSwgZmxhZ3MpLCBleHBlY3QpOw0KPiArDQo+ICsJaWYgKGV4cGVjdCAhPSAtRVRJTUUpIHsNCj4g KwkJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwg JnBvaW50LCAxLA0KPiArCQkJCQkJCVVJTlQ2NF9NQVgsIGZsYWdzKSwgZXhwZWN0KTsNCj4gKwl9 DQo+ICsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOw0KPiArCWlmICh0aW1lbGlu ZSAhPSAtMSkNCj4gKwkJY2xvc2UodGltZWxpbmUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9p ZA0KPiArdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFn cykNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0K PiArCXVpbnQzMl90IGZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7DQo+ ICsJdWludDY0X3QgcG9pbnQgPSAxOw0KPiArCWludCB0aW1lbGluZSA9IC0xOw0KPiArCXRpbWVy X3QgdGltZXI7DQo+ICsNCj4gKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfRk9SX1NVQk1JVCkgew0K PiArCQl0aW1lciA9IHN5bmNvYmpfdHJpZ2dlcl9kZWxheWVkKGZkLCBzeW5jb2JqLCBwb2ludCwg U0hPUlRfVElNRV9OU0VDKTsNCj4gKwl9IGVsc2Ugew0KPiArCQl0aW1lbGluZSA9IHN5bmNvYmpf YXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmosIHBvaW50KTsNCj4gKwkJdGltZXIgPSBzZXRfdGlt ZXIodGltZWxpbmVfaW5jX2Z1bmMsIE5VTEwsDQo+ICsJCQkJICB0aW1lbGluZSwgU0hPUlRfVElN RV9OU0VDKTsNCj4gKwl9DQo+ICsNCj4gKwlpZ3RfYXNzZXJ0KHN5bmNvYmpfdGltZWxpbmVfd2Fp dChmZCwgJnN5bmNvYmosICZwb2ludCwgMSwNCj4gKwkJCQlnZXR0aW1lX25zKCkgKyBTSE9SVF9U SU1FX05TRUMgKiAyLA0KPiArCQkJCWZsYWdzLCBOVUxMKSk7DQo+ICsNCj4gKwl0aW1lcl9kZWxl dGUodGltZXIpOw0KPiArDQo+ICsJaWYgKHRpbWVsaW5lICE9IC0xKQ0KPiArCQljbG9zZSh0aW1l bGluZSk7DQo+ICsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZA0KPiArdGVzdF9yZXNldF91bnNpZ25hbGVkKGludCBmZCkNCj4gK3sN Cj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0KPiArCXVpbnQ2 NF90IHBvaW50ID0gMTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93 YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2ludCwNCj4gKwkJCQkJCTEsIDAsIDApLCAtRUlOVkFM KTsNCj4gKw0KPiArCXN5bmNvYmpfcmVzZXQoZmQsICZzeW5jb2JqLCAxKTsNCj4gKw0KPiArCWln dF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgJnN5bmNvYmosICZwb2lu dCwNCj4gKwkJCQkJCTEsIDAsIDApLCAtRUlOVkFMKTsNCj4gKw0KPiArCXN5bmNvYmpfZGVzdHJv eShmZCwgc3luY29iaik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X3Jlc2V0 X3NpZ25hbGVkKGludCBmZCkNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9j cmVhdGUoZmQsIDApOw0KPiArCXVpbnQ2NF90IHBvaW50ID0gMTsNCj4gKw0KPiArCXN5bmNvYmpf dHJpZ2dlcihmZCwgc3luY29iaiwgcG9pbnQpOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcShzeW5j b2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LA0KPiArCQkJCQkJMSwg MCwgMCksIDApOw0KPiArDQo+ICsJc3luY29ial9yZXNldChmZCwgJnN5bmNvYmosIDEpOw0KPiAr DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3RpbWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29i aiwgJnBvaW50LA0KPiArCQkJCQkJMSwgMCwgMCksIC1FSU5WQUwpOw0KPiArDQo+ICsJc3luY29i al9kZXN0cm95KGZkLCBzeW5jb2JqKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rl c3RfcmVzZXRfbXVsdGlwbGVfc2lnbmFsZWQoaW50IGZkKQ0KPiArew0KPiArCXVpbnQ2NF90IHBv aW50c1szXSA9IHsxLCAxLCAxfTsNCj4gKwl1aW50MzJfdCBzeW5jb2Jqc1szXTsNCj4gKwlpbnQg aTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gKwkJc3luY29ianNbaV0g PSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsJCXN5bmNvYmpfdHJpZ2dlcihmZCwgc3luY29i anNbaV0sIHBvaW50c1tpXSk7DQo+ICsJfQ0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2Jq X3RpbWVsaW5lX3dhaXRfZXJyKGZkLCBzeW5jb2JqcywgcG9pbnRzLCAzLCAwLCAwKSwgMCk7DQo+ ICsNCj4gKwlzeW5jb2JqX3Jlc2V0KGZkLCBzeW5jb2JqcywgMyk7DQo+ICsNCj4gKwlmb3IgKGkg PSAwOyBpIDwgMzsgaSsrKSB7DQo+ICsJCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93 YWl0X2VycihmZCwgJnN5bmNvYmpzW2ldLA0KPiArCQkJCQkJCSZwb2ludHNbaV0sIDEsDQo+ICsJ CQkJCQkJMCwgMCksIC1FSU5WQUwpOw0KPiArCQlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpz W2ldKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtyZXNldF9hbmRfdHJp Z2dlcl9mdW5jKHVuaW9uIHNpZ3ZhbCBzaWd2YWwpDQo+ICt7DQo+ICsJc3RydWN0IGZkX2hhbmRs ZV9wYWlyICpwYWlyID0gc2lndmFsLnNpdmFsX3B0cjsNCj4gKwlzeW5jb2JqX3Jlc2V0KHBhaXIt PmZkLCAmcGFpci0+aGFuZGxlLCAxKTsNCj4gKwlzeW5jb2JqX3RyaWdnZXIocGFpci0+ZmQsIHBh aXItPmhhbmRsZSwgcGFpci0+cG9pbnQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiAr dGVzdF9yZXNldF9kdXJpbmdfd2FpdF9mb3Jfc3VibWl0KGludCBmZCkNCj4gK3sNCj4gKwl1aW50 MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUoZmQsIDApOw0KPiArCXVpbnQzMl90IGZsYWdz ID0gTE9DQUxfU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVDsNCj4gKwlzdHJ1Y3Qg ZmRfaGFuZGxlX3BhaXIgcGFpcjsNCj4gKwl1aW50NjRfdCBwb2ludCA9IDE7DQo+ICsJdGltZXJf dCB0aW1lcjsNCj4gKw0KPiArCXBhaXIuZmQgPSBmZDsNCj4gKwlwYWlyLmhhbmRsZSA9IHN5bmNv Ymo7DQo+ICsJdGltZXIgPSBzZXRfdGltZXIocmVzZXRfYW5kX3RyaWdnZXJfZnVuYywgJnBhaXIs IDAsIFNIT1JUX1RJTUVfTlNFQyk7DQo+ICsNCj4gKwkvKiBBIHJlc2V0IHNob3VsZCBiZSBhIG5v LW9wIGV2ZW4gaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdhaXQgKi8NCj4gKwlpZ3RfYXNz ZXJ0KHN5bmNvYmpfdGltZWxpbmVfd2FpdChmZCwgJnN5bmNvYmosICZwb2ludCwgMSwNCj4gKwkJ CQlnZXR0aW1lX25zKCkgKyBTSE9SVF9USU1FX05TRUMgKiAyLA0KPiArCQkJCWZsYWdzLCBOVUxM KSk7DQo+ICsNCj4gKwl0aW1lcl9kZWxldGUodGltZXIpOw0KPiArDQo+ICsJc3luY29ial9kZXN0 cm95KGZkLCBzeW5jb2JqKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rfc2ln bmFsKGludCBmZCkNCj4gK3sNCj4gKwl1aW50MzJfdCBzeW5jb2JqID0gc3luY29ial9jcmVhdGUo ZmQsIDApOw0KPiArCXVpbnQzMl90IGZsYWdzID0gTE9DQUxfU1lOQ09CSl9XQUlUX0ZMQUdTX1dB SVRfRk9SX1NVQk1JVDsNCj4gKwl1aW50NjRfdCBwb2ludCA9IDE7DQo+ICsNCj4gKwlpZ3RfYXNz ZXJ0X2VxKHN5bmNvYmpfdGltZWxpbmVfd2FpdF9lcnIoZmQsICZzeW5jb2JqLCAmcG9pbnQsDQo+ ICsJCQkJCQkxLCAwLCAwKSwgLUVJTlZBTCk7DQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3Rp bWVsaW5lX3dhaXRfZXJyKGZkLCAmc3luY29iaiwgJnBvaW50LA0KPiArCQkJCQkJMSwgMCwgZmxh Z3MpLCAtRVRJTUUpOw0KPiArDQo+ICsJc3luY29ial90aW1lbGluZV9zaWduYWwoZmQsICZzeW5j b2JqLCAmcG9pbnQsIDEpOw0KPiArDQo+ICsJaWd0X2Fzc2VydChzeW5jb2JqX3RpbWVsaW5lX3dh aXQoZmQsICZzeW5jb2JqLCAmcG9pbnQsIDEsIDAsIDAsIE5VTEwpKTsNCj4gKwlpZ3RfYXNzZXJ0 KHN5bmNvYmpfdGltZWxpbmVfd2FpdChmZCwgJnN5bmNvYmosICZwb2ludCwgMSwgMCwgZmxhZ3Ms IE5VTEwpKTsNCj4gKw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29iaik7DQo+ICt9DQo+ ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICt0ZXN0X211bHRpX3dhaXQoaW50IGZkLCB1aW50MzJfdCB0 ZXN0X2ZsYWdzLCBpbnQgZXhwZWN0KQ0KPiArew0KPiArCXVpbnQzMl90IHN5bmNvYmpzWzNdOw0K PiArCXVpbnQzMl90IHRmbGFnLCBmbGFnczsNCj4gKwlpbnQgaSwgZmlkeCwgdGltZWxpbmU7DQo+ ICsJdWludDY0X3QgcG9pbnRzWzNdID0gezEsIDEsIDF9Ow0KPiArDQo+ICsJc3luY29ianNbMF0g PSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsJc3luY29ianNbMV0gPSBzeW5jb2JqX2NyZWF0 ZShmZCwgMCk7DQo+ICsJc3luY29ianNbMl0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsN Cj4gKwlmbGFncyA9IGZsYWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOw0KPiArCXRlc3Rf ZmxhZ3MgJj0gfihXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCB8IFdBSVRfQVZBSUxBQkxFKTsN Cj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsNCj4gKwkJZmlkeCA9IGZmcyh0ZXN0 X2ZsYWdzKSAtIDE7DQo+ICsJCXRmbGFnID0gKDEgPDwgZmlkeCk7DQo+ICsNCj4gKwkJaWYgKHRl c3RfZmxhZ3MgJiB+dGZsYWcpDQo+ICsJCQl0ZXN0X2ZsYWdzICY9IH50ZmxhZzsNCj4gKw0KPiAr CQlpZiAodGZsYWcgJiAoV0FJVF9TVUJNSVRURUQgfCBXQUlUX1NJR05BTEVEKSkNCj4gKwkJCXRp bWVsaW5lID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbaV0sDQo+ICsJCQkJ CQkJICBwb2ludHNbaV0pOw0KPiArCQlpZiAodGZsYWcgJiBXQUlUX1NJR05BTEVEKQ0KPiArCQkJ c3dfc3luY190aW1lbGluZV9pbmModGltZWxpbmUsIDEpOw0KPiArCX0NCj4gKw0KPiArCWlndF9h c3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2VycihmZCwgc3luY29ianMsIHBvaW50cywg MywgMCwgZmxhZ3MpLCBleHBlY3QpOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcShzeW5jb2JqX3Rp bWVsaW5lX3dhaXRfZXJyKGZkLCBzeW5jb2JqcywgcG9pbnRzLCAzLCBzaG9ydF90aW1lb3V0KCks DQo+ICsJCQkJICAgICAgIGZsYWdzKSwgZXhwZWN0KTsNCj4gKw0KPiArCWlmIChleHBlY3QgIT0g LUVUSU1FKSB7DQo+ICsJCWlndF9hc3NlcnRfZXEoc3luY29ial90aW1lbGluZV93YWl0X2Vycihm ZCwgc3luY29ianMsIHBvaW50cywgMywgVUlOVDY0X01BWCwNCj4gKwkJCQkJICAgICAgIGZsYWdz KSwgZXhwZWN0KTsNCj4gKwl9DQo+ICsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpz WzBdKTsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzFdKTsNCj4gKwlzeW5jb2Jq X2Rlc3Ryb3koZmQsIHN5bmNvYmpzWzJdKTsNCj4gK30NCj4gKw0KPiArc3RydWN0IHdhaXRfdGhy ZWFkX2RhdGEgew0KPiArCWludCBmZDsNCj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVf d2FpdCB3YWl0Ow0KPiArfTsNCj4gKw0KPiArc3RhdGljIHZvaWQgKg0KPiArd2FpdF90aHJlYWRf ZnVuYyh2b2lkICpkYXRhKQ0KPiArew0KPiArCXN0cnVjdCB3YWl0X3RocmVhZF9kYXRhICp3YWl0 ID0gZGF0YTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3Rs KHdhaXQtPmZkLCAmd2FpdC0+d2FpdCksIDApOw0KPiArCXJldHVybiBOVUxMOw0KPiArfQ0KPiAr DQo+ICtzdGF0aWMgdm9pZA0KPiArdGVzdF93YWl0X3NuYXBzaG90KGludCBmZCwgdWludDMyX3Qg dGVzdF9mbGFncykNCj4gK3sNCj4gKwlzdHJ1Y3Qgd2FpdF90aHJlYWRfZGF0YSB3YWl0ID0geyAw IH07DQo+ICsJdWludDMyX3Qgc3luY29ianNbMl07DQo+ICsJdWludDY0X3QgcG9pbnRzWzJdID0g ezEsIDF9Ow0KPiArCWludCB0aW1lbGluZXNbM10gPSB7IC0xLCAtMSwgLTEgfTsNCj4gKwlwdGhy ZWFkX3QgdGhyZWFkOw0KPiArDQo+ICsJc3luY29ianNbMF0gPSBzeW5jb2JqX2NyZWF0ZShmZCwg MCk7DQo+ICsJc3luY29ianNbMV0gPSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsNCj4gKwlp ZiAoISh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSkgew0KPiArCQl0aW1lbGluZXNbMF0g PSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBzeW5jb2Jqc1swXSwgcG9pbnRzWzBdKTsNCj4g KwkJdGltZWxpbmVzWzFdID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwgc3luY29ianNbMV0s IHBvaW50c1sxXSk7DQo+ICsJfQ0KPiArDQo+ICsJd2FpdC5mZCA9IGZkOw0KPiArCXdhaXQud2Fp dC5oYW5kbGVzID0gdG9fdXNlcl9wb2ludGVyKHN5bmNvYmpzKTsNCj4gKwl3YWl0LndhaXQuY291 bnRfaGFuZGxlcyA9IDI7DQo+ICsJd2FpdC53YWl0LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcihw b2ludHMpOw0KPiArCXdhaXQud2FpdC50aW1lb3V0X25zZWMgPSBzaG9ydF90aW1lb3V0KCk7DQo+ ICsJd2FpdC53YWl0LmZsYWdzID0gZmxhZ3NfZm9yX3Rlc3RfZmxhZ3ModGVzdF9mbGFncyk7DQo+ ICsNCj4gKwlpZ3RfYXNzZXJ0X2VxKHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWQsIE5VTEwsIHdhaXRf dGhyZWFkX2Z1bmMsICZ3YWl0KSwgMCk7DQo+ICsNCj4gKwlzbGVlcF9uc2VjKFNIT1JUX1RJTUVf TlNFQyAvIDUpOw0KPiArDQo+ICsJLyogVHJ5IHRvIGZha2UgdGhlIGtlcm5lbCBvdXQgYnkgdHJp Z2dlcmluZyBvciBwYXJ0aWFsbHkgdHJpZ2dlcmluZw0KPiArCSAqIHRoZSBmaXJzdCBmZW5jZS4N Cj4gKwkgKi8NCj4gKwlpZiAodGVzdF9mbGFncyAmIFdBSVRfQUxMKSB7DQo+ICsJCS8qIElmIGl0 J3MgV0FJVF9BTEwsIGFjdHVhbGx5IHRyaWdnZXIgaXQgKi8NCj4gKwkJaWYgKHRpbWVsaW5lc1sw XSA9PSAtMSkNCj4gKwkJCXN5bmNvYmpfdHJpZ2dlcihmZCwgc3luY29ianNbMF0sIHBvaW50c1sw XSk7DQo+ICsJCWVsc2UNCj4gKwkJCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lc1swXSwg MSk7DQo+ICsJfSBlbHNlIGlmICh0ZXN0X2ZsYWdzICYgV0FJVF9GT1JfU1VCTUlUKSB7DQo+ICsJ CXRpbWVsaW5lc1swXSA9IHN5bmNvYmpfYXR0YWNoX3N3X3N5bmMoZmQsIHN5bmNvYmpzWzBdLCBw b2ludHNbMF0pOw0KPiArCX0NCj4gKw0KPiArCXNsZWVwX25zZWMoU0hPUlRfVElNRV9OU0VDIC8g NSk7DQo+ICsNCj4gKwkvKiBUaGVuIHJlc2V0IGl0ICovDQo+ICsJc3luY29ial9yZXNldChmZCwg JnN5bmNvYmpzWzBdLCAxKTsNCj4gKw0KPiArCXNsZWVwX25zZWMoU0hPUlRfVElNRV9OU0VDIC8g NSk7DQo+ICsNCj4gKwkvKiBUaGVuICJzdWJtaXQiIGl0IGluIGEgd2F5IHRoYXQgd2lsbCBuZXZl ciB0cmlnZ2VyLiAgVGhpcyB3YXksIGlmDQo+ICsJICogdGhlIGtlcm5lbCBwaWNrcyB1cCBvbiB0 aGUgbmV3IGZlbmNlIChpdCBzaG91bGRuJ3QpLCB3ZSdsbCBnZXQgYQ0KPiArCSAqIHRpbWVvdXQu DQo+ICsJICovDQo+ICsJdGltZWxpbmVzWzJdID0gc3luY29ial9hdHRhY2hfc3dfc3luYyhmZCwg c3luY29ianNbMF0sIHBvaW50c1swXSk7DQo+ICsNCj4gKwlzbGVlcF9uc2VjKFNIT1JUX1RJTUVf TlNFQyAvIDUpOw0KPiArDQo+ICsJLyogTm93IHRyaWdnZXIgdGhlIHNlY29uZCBmZW5jZSB0byBj b21wbGV0ZSB0aGUgd2FpdCAqLw0KPiArDQo+ICsJaWYgKHRpbWVsaW5lc1sxXSA9PSAtMSkNCj4g KwkJc3luY29ial90cmlnZ2VyKGZkLCBzeW5jb2Jqc1sxXSwgcG9pbnRzWzFdKTsNCj4gKwllbHNl DQo+ICsJCXN3X3N5bmNfdGltZWxpbmVfaW5jKHRpbWVsaW5lc1sxXSwgMSk7DQo+ICsNCj4gKwlw dGhyZWFkX2pvaW4odGhyZWFkLCBOVUxMKTsNCj4gKw0KPiArCWlmICghKHRlc3RfZmxhZ3MgJiBX QUlUX0FMTCkpDQo+ICsJCWlndF9hc3NlcnRfZXEod2FpdC53YWl0LmZpcnN0X3NpZ25hbGVkLCAx KTsNCj4gKw0KPiArCWNsb3NlKHRpbWVsaW5lc1swXSk7DQo+ICsJY2xvc2UodGltZWxpbmVzWzFd KTsNCj4gKwljbG9zZSh0aW1lbGluZXNbMl0pOw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3lu Y29ianNbMF0pOw0KPiArCXN5bmNvYmpfZGVzdHJveShmZCwgc3luY29ianNbMV0pOw0KPiArfQ0K PiArDQo+ICsvKiBUaGUgbnVtYmVycyAwLTcsIGVhY2ggcmVwZWF0ZWQgNXggYW5kIHNodWZmbGVk LiAqLw0KPiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNodWZmbGVkXzBfN194NFtdID0gew0KPiAr CTIsIDAsIDYsIDEsIDEsIDQsIDUsIDIsIDAsIDcsIDEsIDcsIDYsIDMsIDQsIDUsDQo+ICsJMCwg MiwgNywgMywgNSwgNCwgMCwgNiwgNywgMywgMiwgNSwgNiwgMSwgNCwgMywNCj4gK307DQo+ICsN Cj4gK2VudW0gc3luY29ial9zdGFnZSB7DQo+ICsJU1RBR0VfVU5TVUJNSVRURUQsDQo+ICsJU1RB R0VfU1VCTUlUVEVELA0KPiArCVNUQUdFX1NJR05BTEVELA0KPiArCVNUQUdFX1JFU0VULA0KPiAr CVNUQUdFX1JFU1VCTUlUVEVELA0KPiArfTsNCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK3Rlc3Rf d2FpdF9jb21wbGV4KGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncykNCj4gK3sNCj4gKwlzdHJ1 Y3Qgd2FpdF90aHJlYWRfZGF0YSB3YWl0ID0geyAwIH07DQo+ICsJdWludDMyX3Qgc3luY29ianNb OF07DQo+ICsJdWludDY0X3QgcG9pbnRzWzhdID0gezEsIDEsIDEsIDEsIDEsIDEsIDEsIDF9Ow0K PiArCWVudW0gc3luY29ial9zdGFnZSBzdGFnZVs4XTsNCj4gKwlpbnQgaSwgaiwgdGltZWxpbmVz WzhdOw0KPiArCXVpbnQzMl90IGZpcnN0X3NpZ25hbGVkID0gLTEsIG51bV9zaWduYWxlZCA9IDA7 DQo+ICsJcHRocmVhZF90IHRocmVhZDsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCA4OyBpKysp IHsNCj4gKwkJc3RhZ2VbaV0gPSBTVEFHRV9VTlNVQk1JVFRFRDsNCj4gKwkJc3luY29ianNbaV0g PSBzeW5jb2JqX2NyZWF0ZShmZCwgMCk7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHRlc3RfZmxhZ3Mg JiBXQUlUX0ZPUl9TVUJNSVQpIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykNCj4gKwkJ CXRpbWVsaW5lc1tpXSA9IC0xOw0KPiArCX0gZWxzZSB7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCA4 OyBpKyspDQo+ICsJCQl0aW1lbGluZXNbaV0gPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBz eW5jb2Jqc1tpXSwNCj4gKwkJCQkJCQkgICAgICBwb2ludHNbaV0pOw0KPiArCX0NCj4gKw0KPiAr CXdhaXQuZmQgPSBmZDsNCj4gKwl3YWl0LndhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcihz eW5jb2Jqcyk7DQo+ICsJd2FpdC53YWl0LmNvdW50X2hhbmRsZXMgPSAyOw0KPiArCXdhaXQud2Fp dC5wb2ludHMgPSB0b191c2VyX3BvaW50ZXIocG9pbnRzKTsNCj4gKwl3YWl0LndhaXQudGltZW91 dF9uc2VjID0gZ2V0dGltZV9ucygpICsgTlNFQ1NfUEVSX1NFQzsNCj4gKwl3YWl0LndhaXQuZmxh Z3MgPSBmbGFnc19mb3JfdGVzdF9mbGFncyh0ZXN0X2ZsYWdzKTsNCj4gKw0KPiArCWlndF9hc3Nl cnRfZXEocHRocmVhZF9jcmVhdGUoJnRocmVhZCwgTlVMTCwgd2FpdF90aHJlYWRfZnVuYywgJndh aXQpLCAwKTsNCj4gKw0KPiArCXNsZWVwX25zZWMoTlNFQ1NfUEVSX1NFQyAvIDUwKTsNCj4gKw0K PiArCW51bV9zaWduYWxlZCA9IDA7DQo+ICsJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc2h1 ZmZsZWRfMF83X3g0KTsgaisrKSB7DQo+ICsJCWkgPSBzaHVmZmxlZF8wXzdfeDRbal07DQo+ICsJ CWlndF9hc3NlcnRfbHQoaSwgQVJSQVlfU0laRShzeW5jb2JqcykpOw0KPiArDQo+ICsJCXN3aXRj aCAoc3RhZ2VbaV0rKykgew0KPiArCQljYXNlIFNUQUdFX1VOU1VCTUlUVEVEOg0KPiArCQkJLyog V2UgbmVlZCB0byBzdWJtaXQgYXR0YWNoIGEgZmVuY2UgKi8NCj4gKwkJCWlmICghKHRlc3RfZmxh Z3MgJiBXQUlUX0ZPUl9TVUJNSVQpKSB7DQo+ICsJCQkJLyogV2UgaGFkIHRvIGF0dGFjaCBvbmUg dXAtZnJvbnQgKi8NCj4gKwkJCQlpZ3RfYXNzZXJ0X25lcSh0aW1lbGluZXNbaV0sIC0xKTsNCj4g KwkJCQlicmVhazsNCj4gKwkJCX0NCj4gKwkJCXRpbWVsaW5lc1tpXSA9IHN5bmNvYmpfYXR0YWNo X3N3X3N5bmMoZmQsIHN5bmNvYmpzW2ldLA0KPiArCQkJCQkJCSAgICAgIHBvaW50c1tpXSk7DQo+ ICsJCQlicmVhazsNCj4gKw0KPiArCQljYXNlIFNUQUdFX1NVQk1JVFRFRDoNCj4gKwkJCS8qIFdl IGhhdmUgYSBmZW5jZSwgdHJpZ2dlciBpdCAqLw0KPiArCQkJaWd0X2Fzc2VydF9uZXEodGltZWxp bmVzW2ldLCAtMSk7DQo+ICsJCQlzd19zeW5jX3RpbWVsaW5lX2luYyh0aW1lbGluZXNbaV0sIDEp Ow0KPiArCQkJY2xvc2UodGltZWxpbmVzW2ldKTsNCj4gKwkJCXRpbWVsaW5lc1tpXSA9IC0xOw0K PiArCQkJaWYgKG51bV9zaWduYWxlZCA9PSAwKQ0KPiArCQkJCWZpcnN0X3NpZ25hbGVkID0gaTsN Cj4gKwkJCW51bV9zaWduYWxlZCsrOw0KPiArCQkJYnJlYWs7DQo+ICsNCj4gKwkJY2FzZSBTVEFH RV9TSUdOQUxFRDoNCj4gKwkJCS8qIFdlJ3JlIGFscmVhZHkgc2lnbmFsZWQsIHJlc2V0ICovDQo+ ICsJCQlzeW5jb2JqX3Jlc2V0KGZkLCAmc3luY29ianNbaV0sIDEpOw0KPiArCQkJYnJlYWs7DQo+ ICsNCj4gKwkJY2FzZSBTVEFHRV9SRVNFVDoNCj4gKwkJCS8qIFdlJ3JlIHJlc2V0LCBzdWJtaXQg YW5kIGRvbid0IHNpZ25hbCAqLw0KPiArCQkJdGltZWxpbmVzW2ldID0gc3luY29ial9hdHRhY2hf c3dfc3luYyhmZCwgc3luY29ianNbaV0sDQo+ICsJCQkJCQkJICAgICAgcG9pbnRzW2ldKTsNCj4g KwkJCWJyZWFrOw0KPiArDQo+ICsJCWNhc2UgU1RBR0VfUkVTVUJNSVRURUQ6DQo+ICsJCQlpZ3Rf YXNzZXJ0KCEiU2hvdWxkIG5vdCByZWFjaCB0aGlzIHN0YWdlIik7DQo+ICsJCQlicmVhazsNCj4g KwkJfQ0KPiArDQo+ICsJCWlmICh0ZXN0X2ZsYWdzICYgV0FJVF9BTEwpIHsNCj4gKwkJCWlmIChu dW1fc2lnbmFsZWQgPT0gQVJSQVlfU0laRShzeW5jb2JqcykpDQo+ICsJCQkJYnJlYWs7DQo+ICsJ CX0gZWxzZSB7DQo+ICsJCQlpZiAobnVtX3NpZ25hbGVkID4gMCkNCj4gKwkJCQlicmVhazsNCj4g KwkJfQ0KPiArDQo+ICsJCXNsZWVwX25zZWMoTlNFQ1NfUEVSX1NFQyAvIDEwMCk7DQo+ICsJfQ0K PiArDQo+ICsJcHRocmVhZF9qb2luKHRocmVhZCwgTlVMTCk7DQo+ICsNCj4gKwlpZiAodGVzdF9m bGFncyAmIFdBSVRfQUxMKSB7DQo+ICsJCWlndF9hc3NlcnRfZXEobnVtX3NpZ25hbGVkLCBBUlJB WV9TSVpFKHN5bmNvYmpzKSk7DQo+ICsJfSBlbHNlIHsNCj4gKwkJaWd0X2Fzc2VydF9lcShudW1f c2lnbmFsZWQsIDEpOw0KPiArCQlpZ3RfYXNzZXJ0X2VxKHdhaXQud2FpdC5maXJzdF9zaWduYWxl ZCwgZmlyc3Rfc2lnbmFsZWQpOw0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCA4OyBp KyspIHsNCj4gKwkJY2xvc2UodGltZWxpbmVzW2ldKTsNCj4gKwkJc3luY29ial9kZXN0cm95KGZk LCBzeW5jb2Jqc1tpXSk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArdGVz dF93YWl0X2ludGVycnVwdGVkKGludCBmZCwgdWludDMyX3QgdGVzdF9mbGFncykNCj4gK3sNCj4g KwlzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmVfd2FpdCB3YWl0ID0geyAwIH07DQo+ICsJdWlu dDMyX3Qgc3luY29iaiA9IHN5bmNvYmpfY3JlYXRlKGZkLCAwKTsNCj4gKwl1aW50NjRfdCBwb2lu dCA9IDE7DQo+ICsJaW50IHRpbWVsaW5lOw0KPiArDQo+ICsJd2FpdC5oYW5kbGVzID0gdG9fdXNl cl9wb2ludGVyKCZzeW5jb2JqKTsNCj4gKwl3YWl0LnBvaW50cyA9IHRvX3VzZXJfcG9pbnRlcigm cG9pbnQpOw0KPiArCXdhaXQuY291bnRfaGFuZGxlcyA9IDE7DQo+ICsJd2FpdC5mbGFncyA9IGZs YWdzX2Zvcl90ZXN0X2ZsYWdzKHRlc3RfZmxhZ3MpOw0KPiArDQo+ICsJaWYgKHRlc3RfZmxhZ3Mg JiBXQUlUX0ZPUl9TVUJNSVQpIHsNCj4gKwkJd2FpdC50aW1lb3V0X25zZWMgPSBzaG9ydF90aW1l b3V0KCk7DQo+ICsJCWlndF93aGlsZV9pbnRlcnJ1cHRpYmxlKHRydWUpDQo+ICsJCQlpZ3RfYXNz ZXJ0X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FVElNRSk7 DQo+ICsJfQ0KPiArDQo+ICsJdGltZWxpbmUgPSBzeW5jb2JqX2F0dGFjaF9zd19zeW5jKGZkLCBz eW5jb2JqLCBwb2ludCk7DQo+ICsNCj4gKwl3YWl0LnRpbWVvdXRfbnNlYyA9IHNob3J0X3RpbWVv dXQoKTsNCj4gKwlpZ3Rfd2hpbGVfaW50ZXJydXB0aWJsZSh0cnVlKQ0KPiArCQlpZ3RfYXNzZXJ0 X2VxKF9fc3luY29ial90aW1lbGluZV93YWl0X2lvY3RsKGZkLCAmd2FpdCksIC1FVElNRSk7DQo+ ICsNCj4gKwlzeW5jb2JqX2Rlc3Ryb3koZmQsIHN5bmNvYmopOw0KPiArCWNsb3NlKHRpbWVsaW5l KTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGJvb2wNCj4gK2hhc19zeW5jb2JqX3RpbWVsaW5lX3dh aXQoaW50IGZkKQ0KPiArew0KPiArCXN0cnVjdCBkcm1fc3luY29ial90aW1lbGluZV93YWl0IHdh aXQgPSB7IDAgfTsNCj4gKwl1aW50MzJfdCBoYW5kbGUgPSAwOw0KPiArCXVpbnQ2NF90IHZhbHVl Ow0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlpZiAoZHJtR2V0Q2FwKGZkLCBEUk1fQ0FQX1NZTkNP QkosICZ2YWx1ZSkpDQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwlpZiAoIXZhbHVlKQ0KPiArCQly ZXR1cm4gZmFsc2U7DQo+ICsNCj4gKwkvKiBUcnkgd2FpdGluZyBmb3IgemVybyBzeW5jIG9iamVj dHMgc2hvdWxkIGZhaWwgd2l0aCBFSU5WQUwgKi8NCj4gKwl3YWl0LmNvdW50X2hhbmRsZXMgPSAx Ow0KPiArCXdhaXQuaGFuZGxlcyA9IHRvX3VzZXJfcG9pbnRlcigmaGFuZGxlKTsNCj4gKwlyZXQg PSBkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1NZTkNPQkpfVElNRUxJTkVfV0FJVCwgJndhaXQpOw0K PiArCXJldHVybiByZXQgPT0gLTEgJiYgZXJybm8gPT0gRU5PRU5UOw0KPiArfQ0KPiArDQo+ICtp Z3RfbWFpbg0KPiArew0KPiArCWludCBmZCA9IC0xOw0KPiArDQo+ICsJaWd0X2ZpeHR1cmUgew0K PiArCQlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfQU5ZKTsNCj4gKwkJaWd0X3JlcXVpcmUo aGFzX3N5bmNvYmpfdGltZWxpbmVfd2FpdChmZCkpOw0KPiArCQlpZ3RfcmVxdWlyZV9zd19zeW5j KCk7DQo+ICsJfQ0KPiArDQo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtd2FpdC1iYWQtZmxhZ3Mi KQ0KPiArCQl0ZXN0X3dhaXRfYmFkX2ZsYWdzKGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJp bnZhbGlkLXdhaXQtemVyby1oYW5kbGVzIikNCj4gKwkJdGVzdF93YWl0X3plcm9faGFuZGxlcyhm ZCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxpZC13YWl0LWlsbGVnYWwtaGFuZGxlIikN Cj4gKwkJdGVzdF93YWl0X2lsbGVnYWxfaGFuZGxlKGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0 KCJpbnZhbGlkLXF1ZXJ5LXplcm8taGFuZGxlcyIpDQo+ICsJCXRlc3RfcXVlcnlfemVyb19oYW5k bGVzKGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXF1ZXJ5LWlsbGVnYWwtaGFu ZGxlIikNCj4gKwkJdGVzdF9xdWVyeV9pbGxlZ2FsX2hhbmRsZShmZCk7DQo+ICsNCj4gKwlpZ3Rf c3VidGVzdCgiaW52YWxpZC1xdWVyeS1vbmUtaWxsZWdhbC1oYW5kbGUiKQ0KPiArCQl0ZXN0X3F1 ZXJ5X29uZV9pbGxlZ2FsX2hhbmRsZShmZCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgiaW52YWxp ZC1xdWVyeS1iYWQtcGFkIikNCj4gKwkJdGVzdF9xdWVyeV9iYWRfcGFkKGZkKTsNCj4gKw0KPiAr CWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC16ZXJvLWhhbmRsZXMiKQ0KPiArCQl0ZXN0X3Np Z25hbF96ZXJvX2hhbmRsZXMoZmQpOw0KPiArDQo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtc2ln bmFsLWlsbGVnYWwtaGFuZGxlIikNCj4gKwkJdGVzdF9zaWduYWxfaWxsZWdhbF9oYW5kbGUoZmQp Ow0KPiArDQo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtc2lnbmFsLWlsbGVnYWwtcG9pbnQiKQ0K PiArCQl0ZXN0X3NpZ25hbF9pbGxlZ2FsX3BvaW50KGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0 KCJpbnZhbGlkLXNpZ25hbC1vbmUtaWxsZWdhbC1oYW5kbGUiKQ0KPiArCQl0ZXN0X3NpZ25hbF9v bmVfaWxsZWdhbF9oYW5kbGUoZmQpOw0KPiArDQo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtc2ln bmFsLWJhZC1wYWQiKQ0KPiArCQl0ZXN0X3NpZ25hbF9iYWRfcGFkKGZkKTsNCj4gKw0KPiArCWln dF9zdWJ0ZXN0KCJpbnZhbGlkLXNpZ25hbC1hcnJheSIpDQo+ICsJCXRlc3Rfc2lnbmFsX2FycmF5 KGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLXRyYW5zZmVyLWlsbGVnYWwtaGFu ZGxlIikNCj4gKwkJdGVzdF90cmFuc2Zlcl9pbGxlZ2FsX2hhbmRsZShmZCk7DQo+ICsNCj4gKwlp Z3Rfc3VidGVzdCgiaW52YWxpZC10cmFuc2Zlci1iYWQtcGFkIikNCj4gKwkJdGVzdF90cmFuc2Zl cl9iYWRfcGFkKGZkKTsNCj4gKw0KPiArCWZvciAodW5zaWduZWQgZmxhZ3MgPSAwOyBmbGFncyA8 IFdBSVRfRkxBR1NfTUFYOyBmbGFncysrKSB7DQo+ICsJCWludCBlcnI7DQo+ICsNCj4gKwkJLyog T25seSBvbmUgd2FpdCBtb2RlIGZvciBzaW5nbGUtd2FpdCB0ZXN0cyAqLw0KPiArCQlpZiAoX19i dWlsdGluX3BvcGNvdW50KGZsYWdzICYgKFdBSVRfVU5TVUJNSVRURUQgfA0KPiArCQkJCQkJV0FJ VF9TVUJNSVRURUQgfA0KPiArCQkJCQkJV0FJVF9TSUdOQUxFRCkpICE9IDEpDQo+ICsJCQljb250 aW51ZTsNCj4gKw0KPiArCQlpZiAoKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRFRCkgJiYgIShmbGFn cyAmIFdBSVRfRk9SX1NVQk1JVCkpDQo+ICsJCQllcnIgPSAtRUlOVkFMOw0KPiArCQllbHNlIGlm ICghKGZsYWdzICYgV0FJVF9TSUdOQUxFRCkgJiYgISgoZmxhZ3MgJiBXQUlUX1NVQk1JVFRFRCkg JiYgKGZsYWdzICYgV0FJVF9BVkFJTEFCTEUpKSkNCj4gKwkJCWVyciA9IC1FVElNRTsNCj4gKwkJ ZWxzZQ0KPiArCQkJZXJyID0gMDsNCj4gKw0KPiArCQlpZ3Rfc3VidGVzdF9mKCIlc3NpbmdsZS13 YWl0JXMlcyVzJXMlcyVzIiwNCj4gKwkJCSAgICAgIGVyciA9PSAtRUlOVkFMID8gImludmFsaWQt IiA6IGVyciA9PSAtRVRJTUUgPyAiZXRpbWUtIiA6ICIiLA0KPiArCQkJICAgICAgKGZsYWdzICYg V0FJVF9BTEwpID8gIi1hbGwiIDogIiIsDQo+ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlUX0ZPUl9T VUJNSVQpID8gIi1mb3Itc3VibWl0IiA6ICIiLA0KPiArCQkJICAgICAgKGZsYWdzICYgV0FJVF9B VkFJTEFCTEUpID8gIi1hdmFpbGFibGUiIDogIiIsDQo+ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlU X1VOU1VCTUlUVEVEKSA/ICItdW5zdWJtaXR0ZWQiIDogIiIsDQo+ICsJCQkgICAgICAoZmxhZ3Mg JiBXQUlUX1NVQk1JVFRFRCkgPyAiLXN1Ym1pdHRlZCIgOiAiIiwNCj4gKwkJCSAgICAgIChmbGFn cyAmIFdBSVRfU0lHTkFMRUQpID8gIi1zaWduYWxlZCIgOiAiIikNCj4gKwkJCXRlc3Rfc2luZ2xl X3dhaXQoZmQsIGZsYWdzLCBlcnIpOw0KPiArCX0NCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3YWl0 LWRlbGF5ZWQtc2lnbmFsIikNCj4gKwkJdGVzdF93YWl0X2RlbGF5ZWRfc2lnbmFsKGZkLCAwKTsN Cj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3YWl0LWZvci1zdWJtaXQtZGVsYXllZC1zdWJtaXQiKQ0K PiArCQl0ZXN0X3dhaXRfZGVsYXllZF9zaWduYWwoZmQsIFdBSVRfRk9SX1NVQk1JVCk7DQo+ICsN Cj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1hbGwtZGVsYXllZC1zaWduYWwiKQ0KPiArCQl0ZXN0X3dh aXRfZGVsYXllZF9zaWduYWwoZmQsIFdBSVRfQUxMKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3 YWl0LWFsbC1mb3Itc3VibWl0LWRlbGF5ZWQtc3VibWl0IikNCj4gKwkJdGVzdF93YWl0X2RlbGF5 ZWRfc2lnbmFsKGZkLCBXQUlUX0FMTCB8IFdBSVRfRk9SX1NVQk1JVCk7DQo+ICsNCj4gKwlpZ3Rf c3VidGVzdCgicmVzZXQtdW5zaWduYWxlZCIpDQo+ICsJCXRlc3RfcmVzZXRfdW5zaWduYWxlZChm ZCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgicmVzZXQtc2lnbmFsZWQiKQ0KPiArCQl0ZXN0X3Jl c2V0X3NpZ25hbGVkKGZkKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJyZXNldC1tdWx0aXBsZS1z aWduYWxlZCIpDQo+ICsJCXRlc3RfcmVzZXRfbXVsdGlwbGVfc2lnbmFsZWQoZmQpOw0KPiArDQo+ ICsJaWd0X3N1YnRlc3QoInJlc2V0LWR1cmluZy13YWl0LWZvci1zdWJtaXQiKQ0KPiArCQl0ZXN0 X3Jlc2V0X2R1cmluZ193YWl0X2Zvcl9zdWJtaXQoZmQpOw0KPiArDQo+ICsJaWd0X3N1YnRlc3Qo InNpZ25hbCIpDQo+ICsJCXRlc3Rfc2lnbmFsKGZkKTsNCj4gKw0KPiArCWZvciAodW5zaWduZWQg ZmxhZ3MgPSAwOyBmbGFncyA8IFdBSVRfRkxBR1NfTUFYOyBmbGFncysrKSB7DQo+ICsJCWludCBl cnI7DQo+ICsNCj4gKwkJLyogQXQgbGVhc3Qgb25lIHdhaXQgbW9kZSBmb3IgbXVsdGktd2FpdCB0 ZXN0cyAqLw0KPiArCQlpZiAoIShmbGFncyAmIChXQUlUX1VOU1VCTUlUVEVEIHwNCj4gKwkJCSAg ICAgICBXQUlUX1NVQk1JVFRFRCB8DQo+ICsJCQkgICAgICAgV0FJVF9TSUdOQUxFRCkpKQ0KPiAr CQkJY29udGludWU7DQo+ICsNCj4gKwkJZXJyID0gMDsNCj4gKwkJaWYgKChmbGFncyAmIFdBSVRf VU5TVUJNSVRURUQpICYmICEoZmxhZ3MgJiBXQUlUX0ZPUl9TVUJNSVQpKSB7DQo+ICsJCQllcnIg PSAtRUlOVkFMOw0KPiArCQl9IGVsc2UgaWYgKGZsYWdzICYgV0FJVF9BTEwpIHsNCj4gKwkJCWlm IChmbGFncyAmIChXQUlUX1VOU1VCTUlUVEVEIHwgV0FJVF9TVUJNSVRURUQpKQ0KPiArCQkJCWVy ciA9IC1FVElNRTsNCj4gKwkJCWlmICghKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRFRCkgJiYgKGZs YWdzICYgV0FJVF9TVUJNSVRURUQpICYmIChmbGFncyAmIFdBSVRfQVZBSUxBQkxFKSkNCj4gKwkJ CQllcnIgPSAwOw0KPiArCQl9IGVsc2Ugew0KPiArCQkJaWYgKCEoZmxhZ3MgJiBXQUlUX1NJR05B TEVEKSAmJiAhKChmbGFncyAmIFdBSVRfU1VCTUlUVEVEKSAmJiAoZmxhZ3MgJiBXQUlUX0FWQUlM QUJMRSkpKQ0KPiArCQkJCWVyciA9IC1FVElNRTsNCj4gKwkJfQ0KPiArDQo+ICsJCWlndF9zdWJ0 ZXN0X2YoIiVzbXVsdGktd2FpdCVzJXMlcyVzJXMlcyIsDQo+ICsJCQkgICAgICBlcnIgPT0gLUVJ TlZBTCA/ICJpbnZhbGlkLSIgOiBlcnIgPT0gLUVUSU1FID8gImV0aW1lLSIgOiAiIiwNCj4gKwkJ CSAgICAgIChmbGFncyAmIFdBSVRfQUxMKSA/ICItYWxsIiA6ICIiLA0KPiArCQkJICAgICAgKGZs YWdzICYgV0FJVF9GT1JfU1VCTUlUKSA/ICItZm9yLXN1Ym1pdCIgOiAiIiwNCj4gKwkJCSAgICAg IChmbGFncyAmIFdBSVRfQVZBSUxBQkxFKSA/ICItYXZhaWxhYmxlIiA6ICIiLA0KPiArCQkJICAg ICAgKGZsYWdzICYgV0FJVF9VTlNVQk1JVFRFRCkgPyAiLXVuc3VibWl0dGVkIiA6ICIiLA0KPiAr CQkJICAgICAgKGZsYWdzICYgV0FJVF9TVUJNSVRURUQpID8gIi1zdWJtaXR0ZWQiIDogIiIsDQo+ ICsJCQkgICAgICAoZmxhZ3MgJiBXQUlUX1NJR05BTEVEKSA/ICItc2lnbmFsZWQiIDogIiIpDQo+ ICsJCQl0ZXN0X211bHRpX3dhaXQoZmQsIGZsYWdzLCBlcnIpOw0KPiArCX0NCj4gKwlpZ3Rfc3Vi dGVzdCgid2FpdC1hbnktc25hcHNob3QiKQ0KPiArCQl0ZXN0X3dhaXRfc25hcHNob3QoZmQsIDAp Ow0KPiArDQo+ICsJaWd0X3N1YnRlc3QoIndhaXQtYWxsLXNuYXBzaG90IikNCj4gKwkJdGVzdF93 YWl0X3NuYXBzaG90KGZkLCBXQUlUX0FMTCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1m b3Itc3VibWl0LXNuYXBzaG90IikNCj4gKwkJdGVzdF93YWl0X3NuYXBzaG90KGZkLCBXQUlUX0ZP Ul9TVUJNSVQpOw0KPiArDQo+ICsJaWd0X3N1YnRlc3QoIndhaXQtYWxsLWZvci1zdWJtaXQtc25h cHNob3QiKQ0KPiArCQl0ZXN0X3dhaXRfc25hcHNob3QoZmQsIFdBSVRfQUxMIHwgV0FJVF9GT1Jf U1VCTUlUKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3YWl0LWFueS1jb21wbGV4IikNCj4gKwkJ dGVzdF93YWl0X2NvbXBsZXgoZmQsIDApOw0KPiArDQo+ICsJaWd0X3N1YnRlc3QoIndhaXQtYWxs LWNvbXBsZXgiKQ0KPiArCQl0ZXN0X3dhaXRfY29tcGxleChmZCwgV0FJVF9BTEwpOw0KPiArDQo+ ICsJaWd0X3N1YnRlc3QoIndhaXQtZm9yLXN1Ym1pdC1jb21wbGV4IikNCj4gKwkJdGVzdF93YWl0 X2NvbXBsZXgoZmQsIFdBSVRfRk9SX1NVQk1JVCk7DQo+ICsNCj4gKwlpZ3Rfc3VidGVzdCgid2Fp dC1hbGwtZm9yLXN1Ym1pdC1jb21wbGV4IikNCj4gKwkJdGVzdF93YWl0X2NvbXBsZXgoZmQsIFdB SVRfQUxMIHwgV0FJVF9GT1JfU1VCTUlUKTsNCj4gKw0KPiArCWlndF9zdWJ0ZXN0KCJ3YWl0LWFu eS1pbnRlcnJ1cHRlZCIpDQo+ICsJCXRlc3Rfd2FpdF9pbnRlcnJ1cHRlZChmZCwgMCk7DQo+ICsN Cj4gKwlpZ3Rfc3VidGVzdCgid2FpdC1hbGwtaW50ZXJydXB0ZWQiKQ0KPiArCQl0ZXN0X3dhaXRf aW50ZXJydXB0ZWQoZmQsIFdBSVRfQUxMKTsNCj4gK30NCj4gDQpfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2 QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2lndC1kZXYK