Name: series-workflowmndnj Phase: Failed StartedAt: 2026-08-01 12:41:20 +0000 UTC FinishedAt: 2026-08-01 13:00:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmndnj[0] Phase: Succeeded StartedAt: 2026-08-01 12:41:20 +0000 UTC FinishedAt: 2026-08-01 13:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmndnj[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 12:41:20 +0000 UTC FinishedAt: 2026-08-01 13:00:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODA4ZmY2NDM5MzViOGMzNmEzNjQwZWY2NjRhMWZlNzdkZmQxMDU0ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTM6MDA6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1Z1xuaW5kZXggMTI0NGRjYWMyMjk0YS4uNzA4NzNhYWM2NzVmYSAxMDA2NDRcbi0tLSBhL2xpYi9LY29uZmlnLmRlYnVnXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvS2NvbmZpZy5kZWJ1Z1xuQEAgLTM0MjcsNiAmIzQzOzM0MjcsMzYgQEAgY29uZmlnIFRFU1RfS0VYRUNfSEFORE9WRVJcbiBcbiBcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbiYjNDM7Y29uZmlnIFRFU1RfVk1TVEFUXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7Vk0gU3RhdGlzdGljcyBCZW5jaG1hcmtcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IG5cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBIHN5bnRoZXRpYyBiZW5jaG1hcmsgbWVhc3VyaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBWTSBzdGF0aXN0aWNzLFxuJiM0MztcdCAgdXNlZnVsIHRvIGFuYWx5emUgYW55IGltcHJvdmVtZW50cyBvciByZWdyZXNzaW9ucyBpbiBmdW5jdGlvbnMgdGhhdFxuJiM0MztcdCAgYXJlIGZyZXF1ZW50bHkgdXNlZCBpbiBob3QgY29kZSBwYXRocy5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiYjNDM7Y29uZmlnIFRFU1RfU0xBQlxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1NsYWIgQWxsb2NhdG9yIEJlbmNobWFya1wmIzM0O1xuJiM0MztcdGRlZmF1bHQgblxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIEEgc3ludGhldGljIGJlbmNobWFyayB0aGF0IG1lYXN1cmVzIHNsYWIgYWxsb2NhdG9yIHBlcmZvcm1hbmNlLFxuJiM0MztcdCAgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHNpbmdsZSB0aHJlYWQgdGVzdGluZyBieSByZXBlYXRlZGx5XG4mIzQzO1x0ICBhbGxvY2F0aW5nIHRoZW4gZnJlZWluZyBtZW1vcnkgYW5kIGNvbmN1cnJlbnQgb3IgcmVtb3RlIGFsbG9jYXRpb25zLlxuJiM0MztcbiYjNDM7XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuJiM0Mztjb25maWcgVEVTVF9QQUdFQUxMT0NcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtQYWdlIEFsbG9jYXRvciBCZW5jaG1hcmtcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IG5cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwYWdlIGFsbG9jYXRvciwgdXNlZnVsXG4mIzQzO1x0ICB0byBhbmFseXplIGFueSBpbXByb3ZlbWVudHMgb3IgcmVncmVzc2lvbnMgd2hlbiByZXBlYXRlZGx5IGFsbG9jYXRpbmdcbiYjNDM7XHQgIGFuZCBmcmVlaW5nIG1lbW9yeSBhcyB3ZWxsIGFzIGNvbmN1cnJlbnQgYW5kIHJlbW90ZSBhbGxvY2F0aW9ucy5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiBjb25maWcgUkFURUxJTUlUX0tVTklUX1RFU1RcbiBcdHRyaXN0YXRlIFwmIzM0O0tVbml0IFRlc3QgZm9yIGNvcnJlY3RuZXNzIGFuZCBzdHJlc3Mgb2YgcmF0ZWxpbWl0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiBcdGRlcGVuZHMgb24gS1VOSVRcbmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGVcbmluZGV4IDdmNzVjYzZlZGY5NGEuLjE3YzE2NGUxNDVhZDQgMTAwNjQ0XG4tLS0gYS9saWIvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9NYWtlZmlsZVxuQEAgLTEwNSw2ICYjNDM7MTA1LDkgQEAgb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4gb2JqLSQoQ09ORklHX1RFU1RfUkVGX1RSQUNLRVIpICYjNDM7PSB0ZXN0X3JlZl90cmFja2VyLm9cbiBvYmotJChDT05GSUdfVEVTVF9PQkpQT09MKSAmIzQzOz0gdGVzdF9vYmpwb29sLm9cbiBvYmotJChDT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUikgJiM0Mzs9IHRlc3Rfa2hvLm9cbiYjNDM7b2JqLSQoQ09ORklHX1RFU1RfVk1TVEFUKSAmIzQzOz0gdGVzdF92bXN0YXQub1xuJiM0MztvYmotJChDT05GSUdfVEVTVF9TTEFCKSAmIzQzOz0gdGVzdF9zbGFiLm9cbiYjNDM7b2JqLSQoQ09ORklHX1RFU1RfUEFHRUFMTE9DKSAmIzQzOz0gdGVzdF9wYWdlYWxsb2Mub1xuIFxuIG9iai0kKENPTkZJR19URVNUX0ZQVSkgJiM0Mzs9IHRlc3RfZnB1Lm9cbiB0ZXN0X2ZwdS15IDo9IHRlc3RfZnB1X2dsdWUubyB0ZXN0X2ZwdV9pbXBsLm9cbmRpZmYgLS1naXQgYS9saWIvdGVzdF9wYWdlYWxsb2MuYyBiL2xpYi90ZXN0X3BhZ2VhbGxvYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA1MTRkZjUyYzViMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfcGFnZWFsbG9jLmNcbkBAIC0wLDAgJiM0MzsxLDMzNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBUZXN0IG1vZHVsZSBmb3IgaW4ga2VybmVsIHN5bnRoZXRpYyBwYWdlIGFsbG9jYXRvciB0ZXN0aW5nLlxuJiM0MzsgKlxuJiM0MzsgKiBDb21waWxlZCBhcyBhIG1vZHVsZS4gVGhlIG1vZHVsZSBuZWVkcyB0byBiZSBsb2FkZWQgdG8gcnVuLlxuJiM0MzsgKlxuJiM0MzsgKiAoQykgMjAwOSBMaW51eCBGb3VuZGF0aW9uLCBDaHJpc3RvcGggTGFtZXRlciBcdTAwM2NjbEBnZW50d28ub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vdGltZXguaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBURVNUX0NPVU5UIDEwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQ09OQ1VSUkVOVF9NQVhfT1JERVIgNlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19TTVBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XHRpbnQgb3JkZXI7XG4mIzQzO1x0aW50IGNvdW50O1xuJiM0MztcdHN0cnVjdCBwYWdlICoqdjtcbiYjNDM7XHR2b2lkICgqdGVzdF9wMSkoc3RydWN0IHRlc3Rfc3RydWN0ICp0KTtcbiYjNDM7XHR2b2lkICgqdGVzdF9wMikoc3RydWN0IHRlc3Rfc3RydWN0ICp0KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0MTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0b3AxO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnQyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RvcDI7XG4mIzQzO30gdGVzdFtOUl9DUFVTXTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHVzIFx1MDAzZSAwIGFuZCB0aGVuIGFsbCB0aGVcbiYjNDM7ICogb2JqZWN0cyBsYXRlciBvbiBjcHUgMFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogUGVyZm9ybSBubyBhbGxvY2F0aW9ucyBvbiBjcHUgMCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKSB7XG4mIzQzO1x0XHRcdHAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC1cdTAwM2VvcmRlcik7XG4mIzQzO1x0XHRcdC8qIFVzZSBvYmplY3QgKi9cbiYjNDM7XHRcdFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTcsIDQpO1xuJiM0MztcdFx0fSBlbHNlXG4mIzQzO1x0XHRcdHAgPSBOVUxMO1xuJiM0MztcdFx0dC1cdTAwM2V2W2ldID0gcDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlbW90ZV9mcmVlX3Rlc3RfcDIoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsIGZyZWVzIGFyZSBjb21wbGV0ZWQgb24gY3B1IHplcm8gKi9cbiYjNDM7XHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBwYWdlICpwID0gdGVzdFtjcHVdLnZbaV07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIXApXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRfX2ZyZWVfcGFnZXMocCwgdC1cdTAwM2VvcmRlcik7XG4mIzQzO1x0XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBhbmQgbGF0ZXIgZnJlZSB0aGVtIGFsbCBhZ2FpblxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLCB0LVx1MDAzZW9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAxNCwgNCk7XG4mIzQzO1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcCA9IHQtXHUwMDNldltpXTtcbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZXMocCwgdC1cdTAwM2VvcmRlcik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFsbG9jX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtXHUwMDNlb3JkZXIpO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChwYWdlX2FkZHJlc3MocCksIDEyLCA0KTtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhwLCB0LVx1MDAzZW9yZGVyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBhdG9taWNfdCB0ZXN0c19ydW5uaW5nO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgcGhhc2UxX2NvbXBsZXRlO1xuJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24xKTtcbiYjNDM7c3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjb21wbGV0aW9uMik7XG4mIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjMpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2Z1bmModm9pZCAqcHJpdmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IHByaXZhdGU7XG4mIzQzO1x0Y3B1bWFza190IG5ld21hc2sgPSBDUFVfTUFTS19OT05FO1xuJiM0MztcbiYjNDM7XHRjcHVtYXNrX3NldF9jcHUodC1cdTAwM2VjcHUsIFx1MDAyNm5ld21hc2spO1xuJiM0MztcdHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIFx1MDAyNm5ld21hc2spO1xuJiM0MztcdHQtXHUwMDNldiA9IGttYWxsb2NfYXJyYXkodC1cdTAwM2Vjb3VudCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0YXRvbWljX2luYyhcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcbiYjNDM7XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24xKTtcbiYjNDM7XHR0LVx1MDAzZXN0YXJ0MSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHR0LVx1MDAzZXRlc3RfcDEodCk7XG4mIzQzO1x0dC1cdTAwM2VzdG9wMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNnBoYXNlMV9jb21wbGV0ZSk7XG4mIzQzO1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMik7XG4mIzQzO1x0dC1cdTAwM2VzdGFydDIgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0aWYgKHQtXHUwMDNldGVzdF9wMilcbiYjNDM7XHRcdHQtXHUwMDNldGVzdF9wMih0KTtcbiYjNDM7XHR0LVx1MDAzZXN0b3AyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdGF0b21pY19kZWMoXHUwMDI2dGVzdHNfcnVubmluZyk7XG4mIzQzO1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMyk7XG4mIzQzO1x0a2ZyZWUodC1cdTAwM2V2KTtcbiYjNDM7XHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuJiM0MztcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkb19jb25jdXJyZW50X3Rlc3Qodm9pZCAoKnAxKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksXG4mIzQzO1x0XHR2b2lkICgqcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcbiYjNDM7XHRcdGludCBvcmRlciwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lMSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lMiA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN1bTIgPSAwO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cGhhc2UxX2NvbXBsZXRlLCAwKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjEpO1xuJiM0MztcdGluaXRfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMik7XG4mIzQzO1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24zKTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiYjNDM7XHRcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IFx1MDAyNnRlc3RbY3B1XTtcbiYjNDM7XG4mIzQzO1x0XHR0LVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHRcdHQtXHUwMDNlY291bnQgPSBURVNUX0NPVU5UO1xuJiM0MztcdFx0dC1cdTAwM2V0ZXN0X3AxID0gcDE7XG4mIzQzO1x0XHR0LVx1MDAzZXRlc3RfcDIgPSBwMjtcbiYjNDM7XHRcdHQtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbiYjNDM7XHRcdHQtXHUwMDNldGFzayA9IGt0aHJlYWRfcnVuKHRlc3RfZnVuYywgdCwgXCYjMzQ7dGVzdCVkXCYjMzQ7LCBjcHUpO1xuJiM0MztcdFx0aWYgKElTX0VSUih0LVx1MDAzZXRhc2spKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gc3RhcnQgdGVzdCBmdW5jXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgKi9cbiYjNDM7XHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2dGVzdHNfcnVubmluZykgXHUwMDNjIG51bV9vbmxpbmVfY3B1cygpKSB7XG4mIzQzO1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4mIzQzO1x0XHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24xKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgaGF2ZSBjb21wbGV0ZWQgcGhhc2UgMSAqL1xuJiM0MztcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZwaGFzZTFfY29tcGxldGUpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuJiM0MztcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcdGNvbXBsZXRlX2FsbChcdTAwMjZjb21wbGV0aW9uMik7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDIgKi9cbiYjNDM7XHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2dGVzdHNfcnVubmluZykpIHtcbiYjNDM7XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbiYjNDM7XHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRjb21wbGV0ZV9hbGwoXHUwMDI2Y29tcGxldGlvbjMpO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbiYjNDM7XHRcdGt0aHJlYWRfc3RvcCh0ZXN0W2NwdV0udGFzayk7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0OyVzKCVkKTpcJiMzNDssIG5hbWUsIG9yZGVyKTtcbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuJiM0MztcdFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXHUwMDI2dGVzdFtjcHVdO1xuJiM0MztcbiYjNDM7XHRcdHRpbWUxID0gdC1cdTAwM2VzdG9wMSAtIHQtXHUwMDNlc3RhcnQxO1xuJiM0MztcdFx0dGltZTIgPSB0LVx1MDAzZXN0b3AyIC0gdC1cdTAwM2VzdGFydDI7XG4mIzQzO1x0XHRzdW0xICYjNDM7PSB0aW1lMTtcbiYjNDM7XHRcdHN1bTIgJiM0Mzs9IHRpbWUyO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDsgJWQ9JWx1XCYjMzQ7LCBjcHUsIHRpbWUxIC8gVEVTVF9DT1VOVCk7XG4mIzQzO1x0XHRpZiAocDIpXG4mIzQzO1x0XHRcdHByX2NvbnQoXCYjMzQ7LyVsdVwmIzM0OywgdGltZTIgLyBURVNUX0NPVU5UKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJfY29udChcJiMzNDsgQXZlcmFnZT0lbHVcJiMzNDssIHN1bTEgLyBudW1fb25saW5lX2NwdXMoKSAvIFRFU1RfQ09VTlQpO1xuJiM0MztcdGlmIChwMilcbiYjNDM7XHRcdHByX2NvbnQoXCYjMzQ7LyVsdVwmIzM0Oywgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XG4mIzQzO1x0cHJfY29udChcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdHNjaGVkdWxlX3RpbWVvdXQoMjAwKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGFnZWFsbG9jX3Rlc3RfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqKnYgPSBrbWFsbG9jX2FycmF5KFRFU1RfQ09VTlQsIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XG4mIzQzO1x0aW50IHJlbTtcbiYjNDM7XHRpbnQgb3JkZXI7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3Rlc3QgaW5pdFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O1NpbmdsZSB0aHJlYWQgdGVzdGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7PT09PT09PT09PT09PT09PT09PT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDsxLiBSZXBlYXRlZGx5IGFsbG9jYXRlIHRoZW4gZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsXG4mIzQzO1x0XHRcdFx0XHRcdG9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghcCkge1xuJiM0MztcdFx0XHRcdHByX2VycihcJiMzNDtDYW5ub3QgYWxsb2NhdGUgb3JkZXI9JWRcXG5cJiMzNDssIG9yZGVyKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LyogVG91Y2ggcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAyMiwgNCk7XG4mIzQzO1x0XHRcdHZbaV0gPSBwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbiYjNDM7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDslaSB0aW1lcyBhbGxvY19wYWdlKCwlZCkgXCYjMzQ7LCBpLCBvcmRlcik7XG4mIzQzO1x0XHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbiYjNDM7XHRcdHByX2NvbnQoXCYjMzQ7LVx1MDAzZSAlbGx1IGN5Y2xlcyBcJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcbiYjNDM7XHRcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnAgPSB2W2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0X19mcmVlX3BhZ2VzKHAsIG9yZGVyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDtfX2ZyZWVfcGFnZXMoLCVkKVwmIzM0Oywgb3JkZXIpO1xuJiM0MztcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4mIzQzO1x0XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7Mi4gYWxsb2MvZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgb3JkZXIpO1xuJiM0MztcdFx0XHRfX2ZyZWVfcGFnZXMocCwgb3JkZXIpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbiYjNDM7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDslaSB0aW1lcyBhbGxvYyggLCVkKS9mcmVlIFwmIzM0OywgaSwgb3JkZXIpO1xuJiM0MztcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4mIzQzO1x0XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcdH1cbiYjNDM7XHRrZnJlZSh2KTtcbiYjNDM7I2lmZGVmIENPTkZJR19TTVBcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O0NvbmN1cnJlbnQgYWxsb2NzXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0Oz09PT09PT09PT09PT09PT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjIENPTkNVUlJFTlRfTUFYX09SREVSOyBvcmRlciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY190aGVuX2ZyZWVfdGVzdF9wMSxcbiYjNDM7XHRcdFx0YWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIsXG4mIzQzO1x0XHRcdG9yZGVyLCBcJiMzNDtQYWdlIGFsbG9jIE4qYWxsb2MgTipmcmVlXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDstLS0tRmFzdHBhdGgtLS1cXG5cJiMzNDspO1xuJiM0MztcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgQ09OQ1VSUkVOVF9NQVhfT1JERVI7IG9yZGVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZG9fY29uY3VycmVudF90ZXN0KGFsbG9jX2ZyZWVfdGVzdF9wMSwgTlVMTCxcbiYjNDM7XHRcdFx0b3JkZXIsIFwmIzM0O1BhZ2UgTiooYWxsb2MgZnJlZSlcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtSZW1vdGUgZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0Oz09PT09PT09PT09PT09PT1cXG5cJiMzNDspO1xuJiM0MztcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgQ09OQ1VSUkVOVF9NQVhfT1JERVI7IG9yZGVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZG9fY29uY3VycmVudF90ZXN0KHJlbW90ZV9mcmVlX3Rlc3RfcDEsXG4mIzQzO1x0XHRcdFx0cmVtb3RlX2ZyZWVfdGVzdF9wMixcbiYjNDM7XHRcdFx0b3JkZXIsIFwmIzM0O04qcmVtb3RlIGZyZWVcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBhZ2VhbGxvY190ZXN0X2V4aXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3Rlc3QgZXhpdFxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO21vZHVsZV9pbml0KHBhZ2VhbGxvY190ZXN0X2luaXQpXG4mIzQzO21vZHVsZV9leGl0KHBhZ2VhbGxvY190ZXN0X2V4aXQpXG4mIzQzO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0NocmlzdG9waCBMYW1ldGVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3BhZ2UgYWxsb2NhdG9yIHBlcmZvcm1hbmNlIHRlc3RcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3NsYWIuYyBiL2xpYi90ZXN0X3NsYWIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE0M2IwZDczZGFhYjlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3NsYWIuY1xuQEAgLTAsMCAmIzQzOzEsMzc1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIFRlc3QgbW9kdWxlIGZvciBzeW50aGV0aWMgaW4ga2VybmVsIHNsYWIgYWxsb2NhdG9yIHRlc3RpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB0ZXN0IGlzIHRyaWdnZXJlZCBieSBsb2FkaW5nIHRoZSBtb2R1bGUgKHdoaWNoIHdpbGwgZmFpbCkuXG4mIzQzOyAqXG4mIzQzOyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24gXHUwMDNjY2xAZ2VudHdvLm9yZ1x1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RpbWV4LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMFxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19TTVBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XHRpbnQgc2l6ZTtcbiYjNDM7XHRpbnQgY291bnQ7XG4mIzQzO1x0dm9pZCAqKnY7XG4mIzQzO1x0dm9pZCAoKnRlc3RfcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XG4mIzQzO1x0dm9pZCAoKnRlc3RfcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydDE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdG9wMTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0MjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0b3AyO1xuJiM0Mzt9IHRlc3RbTlJfQ1BVU107XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgb24gY3B1cyBcdTAwM2UgMCBhbmQgdGhlbiBhbGwgdGhlXG4mIzQzOyAqIG9iamVjdHMgbGF0ZXIgb24gY3B1IDBcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJlbW90ZV9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFBlcmZvcm0gbm8gYWxsb2NhdGlvbnMgb24gY3B1IDAgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0LVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTggKnA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xuJiM0MztcdFx0XHRwID0ga21hbGxvYyh0LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0XHQvKiBVc2Ugb2JqZWN0ICovXG4mIzQzO1x0XHRcdCpwID0gMTc7XG4mIzQzO1x0XHR9IGVsc2VcbiYjNDM7XHRcdFx0cCA9IE5VTEw7XG4mIzQzO1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHQvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqL1xuJiM0MztcdGlmIChzbXBfcHJvY2Vzc29yX2lkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdC1cdTAwM2Vjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dTggKnAgPSB0ZXN0W2NwdV0udltpXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghcClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdCpwID0gMTY7XG4mIzQzO1x0XHRcdGtmcmVlKHApO1xuJiM0MztcdFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgb24gY3B1IDAgYW5kIGZyZWUgdGhlbSBpbW1lZGlhdGVseSBvbiB0aGVcbiYjNDM7ICogb3RoZXIgcHJvY2Vzc29ycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFsbG9jX25fZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1x0Y2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xuJiM0MztcdFx0LyogQ29uc3VtZXIgKi9cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQgLyBudW1fb25saW5lX2NwdXMoKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0ZG8ge1xuJiM0MztcdFx0XHRcdHAgPSB0LVx1MDAzZXZbaV07XG4mIzQzO1x0XHRcdFx0aWYgKCFwKVxuJiM0MztcdFx0XHRcdFx0Y3B1X3JlbGF4KCk7XG4mIzQzO1x0XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdFx0KnAgPSAxNztcbiYjNDM7XHRcdFx0fSB3aGlsZSAoIXApO1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdFx0dC1cdTAwM2V2W2ldID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0LyogUHJvZHVjZXIgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0LVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiYjNDM7XHRcdFx0aWYgKGNwdSkge1xuJiM0MztcdFx0XHRcdHAgPSBrbWFsbG9jKHQtXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdFx0LyogVXNlIG9iamVjdCAqL1xuJiM0MztcdFx0XHRcdCpwID0gMTc7XG4mIzQzO1x0XHRcdFx0dGVzdFtjcHVdLnZbaV0gPSBwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgYW5kIGxhdGVyIGZyZWUgdGhlbSBhbGwgYWdhaW5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1OCAqcCA9IGttYWxsb2ModC1cdTAwM2VzaXplLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0XHQqcCA9IDE0O1xuJiM0MztcdFx0dC1cdTAwM2V2W2ldID0gcDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1OCAqcCA9IHQtXHUwMDNldltpXTtcbiYjNDM7XG4mIzQzO1x0XHQqcCA9IDEzO1xuJiM0MztcdFx0a2ZyZWUocCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTggKnAgPSBrbWFsbG9jKHQtXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdFx0KnAgPSAxMjtcbiYjNDM7XHRcdGtmcmVlKHApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGF0b21pY190IHRlc3RzX3J1bm5pbmc7XG4mIzQzO3N0YXRpYyBhdG9taWNfdCBwaGFzZTFfY29tcGxldGU7XG4mIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjEpO1xuJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24yKTtcbiYjNDM7c3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjb21wbGV0aW9uMyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfZnVuYyh2b2lkICpwcml2YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gcHJpdmF0ZTtcbiYjNDM7XHRjcHVtYXNrX3QgbmV3bWFzayA9IENQVV9NQVNLX05PTkU7XG4mIzQzO1xuJiM0MztcdGNwdW1hc2tfc2V0X2NwdSh0LVx1MDAzZWNwdSwgXHUwMDI2bmV3bWFzayk7XG4mIzQzO1x0c2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgXHUwMDI2bmV3bWFzayk7XG4mIzQzO1x0dC1cdTAwM2V2ID0ga2NhbGxvYyh0LVx1MDAzZWNvdW50LCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdGF0b21pY19pbmMoXHUwMDI2dGVzdHNfcnVubmluZyk7XG4mIzQzO1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMSk7XG4mIzQzO1x0dC1cdTAwM2VzdGFydDEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0dC1cdTAwM2V0ZXN0X3AxKHQpO1xuJiM0MztcdHQtXHUwMDNlc3RvcDEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0YXRvbWljX2luYyhcdTAwMjZwaGFzZTFfY29tcGxldGUpO1xuJiM0MztcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjIpO1xuJiM0MztcdHQtXHUwMDNlc3RhcnQyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdGlmICh0LVx1MDAzZXRlc3RfcDIpXG4mIzQzO1x0XHR0LVx1MDAzZXRlc3RfcDIodCk7XG4mIzQzO1x0dC1cdTAwM2VzdG9wMiA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRhdG9taWNfZGVjKFx1MDAyNnRlc3RzX3J1bm5pbmcpO1xuJiM0MztcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjMpO1xuJiM0MztcdGtmcmVlKHQtXHUwMDNldik7XG4mIzQzO1x0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcbiYjNDM7XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbiYjNDM7XHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLFxuJiM0MztcdFx0dm9pZCAoKnAyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksXG4mIzQzO1x0XHRpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lMSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lMiA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN1bTIgPSAwO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cGhhc2UxX2NvbXBsZXRlLCAwKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjEpO1xuJiM0MztcdGluaXRfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMik7XG4mIzQzO1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24zKTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiYjNDM7XHRcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IFx1MDAyNnRlc3RbY3B1XTtcbiYjNDM7XG4mIzQzO1x0XHR0LVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHRcdHQtXHUwMDNlY291bnQgPSBURVNUX0NPVU5UO1xuJiM0MztcdFx0dC1cdTAwM2V0ZXN0X3AxID0gcDE7XG4mIzQzO1x0XHR0LVx1MDAzZXRlc3RfcDIgPSBwMjtcbiYjNDM7XHRcdHQtXHUwMDNlc2l6ZSA9IHNpemU7XG4mIzQzO1x0XHR0LVx1MDAzZXRhc2sgPSBrdGhyZWFkX3J1bih0ZXN0X2Z1bmMsIHQsIFwmIzM0O3Rlc3QlZFwmIzM0OywgY3B1KTtcbiYjNDM7XHRcdGlmIChJU19FUlIodC1cdTAwM2V0YXNrKSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IHRlc3QgZnVuY1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGFyZSBydW5uaW5nICovXG4mIzQzO1x0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNnRlc3RzX3J1bm5pbmcpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuJiM0MztcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcdGNvbXBsZXRlX2FsbChcdTAwMjZjb21wbGV0aW9uMSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDEgKi9cbiYjNDM7XHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2cGhhc2UxX2NvbXBsZXRlKSBcdTAwM2MgbnVtX29ubGluZV9jcHVzKCkpIHtcbiYjNDM7XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbiYjNDM7XHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRjb21wbGV0ZV9hbGwoXHUwMDI2Y29tcGxldGlvbjIpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAyICovXG4mIzQzO1x0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNnRlc3RzX3J1bm5pbmcpKSB7XG4mIzQzO1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4mIzQzO1x0XHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24zKTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4mIzQzO1x0XHRrdGhyZWFkX3N0b3AodGVzdFtjcHVdLnRhc2spO1xuJiM0MztcbiYjNDM7XHRwcl9hbGVydChcJiMzNDslcyglZCk6XCYjMzQ7LCBuYW1lLCBzaXplKTtcbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuJiM0MztcdFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXHUwMDI2dGVzdFtjcHVdO1xuJiM0MztcbiYjNDM7XHRcdHRpbWUxID0gdC1cdTAwM2VzdG9wMSAtIHQtXHUwMDNlc3RhcnQxO1xuJiM0MztcdFx0dGltZTIgPSB0LVx1MDAzZXN0b3AyIC0gdC1cdTAwM2VzdGFydDI7XG4mIzQzO1x0XHRzdW0xICYjNDM7PSB0aW1lMTtcbiYjNDM7XHRcdHN1bTIgJiM0Mzs9IHRpbWUyO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDsgJWQ9JWx1XCYjMzQ7LCBjcHUsIHRpbWUxIC8gVEVTVF9DT1VOVCk7XG4mIzQzO1x0XHRpZiAocDIpXG4mIzQzO1x0XHRcdHByX2NvbnQoXCYjMzQ7LyVsdVwmIzM0OywgdGltZTIgLyBURVNUX0NPVU5UKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJfY29udChcJiMzNDsgQXZlcmFnZT0lbHVcJiMzNDssIHN1bTEgLyBudW1fb25saW5lX2NwdXMoKSAvIFRFU1RfQ09VTlQpO1xuJiM0MztcdGlmIChwMilcbiYjNDM7XHRcdHByX2NvbnQoXCYjMzQ7LyVsdVwmIzM0Oywgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XG4mIzQzO1x0cHJfY29udChcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdHNjaGVkdWxlX3RpbWVvdXQoMjAwKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2xhYl90ZXN0X2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHZvaWQgKip2ID0ga21hbGxvY19hcnJheShURVNUX0NPVU5ULCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0Y3ljbGVzX3QgdGltZTEsIHRpbWUyLCB0aW1lO1xuJiM0MztcdGludCByZW07XG4mIzQzO1x0aW50IHNpemU7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3Rlc3QgaW5pdFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O1NpbmdsZSB0aHJlYWQgdGVzdGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7PT09PT09PT09PT09PT09PT09PT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDsxLiBLbWFsbG9jOiBSZXBlYXRlZGx5IGFsbG9jYXRlIHRoZW4gZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKHNpemUgPSA4OyBzaXplIFx1MDAzYz0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAyOyBzaXplIFx1MDAzY1x1MDAzYz0gMSkge1xuJiM0MztcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1OCAqcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdFx0XHQqcCA9IDIyO1xuJiM0MztcdFx0XHR2W2ldID0gcDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7JWkgdGltZXMga21hbGxvYyglZCkgXCYjMzQ7LCBpLCBzaXplKTtcbiYjNDM7XHRcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDstXHUwMDNlICVsbHUgY3ljbGVzIFwmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7XG4mIzQzO1xuJiM0MztcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1OCAqcCA9IHZbaV07XG4mIzQzO1xuJiM0MztcdFx0XHQqcCA9IDIzO1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDtrZnJlZSBcJiMzNDspO1xuJiM0MztcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4mIzQzO1x0XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7Mi4gS21hbGxvYzogYWxsb2MvZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKHNpemUgPSA4OyBzaXplIFx1MDAzYz0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAyOyBzaXplIFx1MDAzY1x1MDAzYz0gMSkge1xuJiM0MztcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1OCAqcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7JWkgdGltZXMga21hbGxvYyglZCkva2ZyZWUgXCYjMzQ7LCBpLCBzaXplKTtcbiYjNDM7XHRcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDstXHUwMDNlICVsbHUgY3ljbGVzXFxuXCYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbiYjNDM7XHR9XG4mIzQzO1x0a2ZyZWUodik7XG4mIzQzOyNpZmRlZiBDT05GSUdfU01QXG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtDb25jdXJyZW50IGFsbG9jc1xcblwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDs9PT09PT09PT09PT09PT09PVxcblwmIzM0Oyk7XG4mIzQzO1x0Zm9yIChpID0gMzsgaSBcdTAwM2M9IFBBR0VfU0hJRlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRkb19jb25jdXJyZW50X3Rlc3Qoa21hbGxvY19hbGxvY190aGVuX2ZyZWVfdGVzdF9wMSxcbiYjNDM7XHRcdFx0a21hbGxvY19hbGxvY190aGVuX2ZyZWVfdGVzdF9wMixcbiYjNDM7XHRcdFx0MSBcdTAwM2NcdTAwM2MgaSwgXCYjMzQ7S21hbGxvYyBOKmFsbG9jIE4qZnJlZVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcdGZvciAoaSA9IDM7IGkgXHUwMDNjPSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZG9fY29uY3VycmVudF90ZXN0KGttYWxsb2NfYWxsb2NfZnJlZV90ZXN0X3AxLCBOVUxMLFxuJiM0MztcdFx0XHQxIFx1MDAzY1x1MDAzYyBpLCBcJiMzNDtLbWFsbG9jIE4qKGFsbG9jIGZyZWUpXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7UmVtb3RlIGZyZWUgdGVzdFxcblwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDs9PT09PT09PT09PT09PT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKGkgPSAzOyBpIFx1MDAzYz0gUEFHRV9TSElGVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRvX2NvbmN1cnJlbnRfdGVzdChyZW1vdGVfZnJlZV90ZXN0X3AxLFxuJiM0MztcdFx0XHRcdHJlbW90ZV9mcmVlX3Rlc3RfcDIsXG4mIzQzO1x0XHRcdDEgXHUwMDNjXHUwMDNjIGksIFwmIzM0O04qcmVtb3RlIGZyZWVcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDsxIGFsbG9jIE4gZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0Oz09PT09PT09PT09PT09PT09PT1cXG5cJiMzNDspO1xuJiM0MztcdGZvciAoaSA9IDM7IGkgXHUwMDNjPSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZG9fY29uY3VycmVudF90ZXN0KGFsbG9jX25fZnJlZV90ZXN0X3AxLFxuJiM0MztcdFx0XHRcdE5VTEwsXG4mIzQzO1x0XHRcdDEgXHUwMDNjXHUwMDNjIGksIFwmIzM0OzEgYWxsb2MgTiBmcmVlXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNsYWJfdGVzdF9leGl0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRwcl9hbGVydChcJiMzNDt0ZXN0IGV4aXRcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzttb2R1bGVfaW5pdChzbGFiX3Rlc3RfaW5pdClcbiYjNDM7bW9kdWxlX2V4aXQoc2xhYl90ZXN0X2V4aXQpXG4mIzQzO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0NocmlzdG9waCBMYW1ldGVyIGFuZCBNYXRoaWV1IERlc25veWVyc1wmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTTEFCIHRlc3RcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3Ztc3RhdC5jIGIvbGliL3Rlc3Rfdm1zdGF0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNjNmNDM5YWI5ZDJhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF92bXN0YXQuY1xuQEAgLTAsMCAmIzQzOzEsOTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogVGVzdCBtb2R1bGUgZm9yIGluLWtlcm5lbCBzeW50aGV0aWMgdm0gc3RhdGlzdGljcyBwZXJmb3JtYW5jZS5cbiYjNDM7ICpcbiYjNDM7ICogZXhlY3V0ZVxuJiM0MzsgKlxuJiM0MzsgKlx0bW9kcHJvYmUgdGVzdF92bXN0YXRcbiYjNDM7ICpcbiYjNDM7ICogdG8gcnVuIHRoaXMgdGVzdFxuJiM0MzsgKlxuJiM0MzsgKiAoQykgMjAwOSBMaW51eCBGb3VuZGF0aW9uLCBDaHJpc3RvcGggTGFtZXRlciBcdTAwM2NjbEBnZW50d28ub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RpbWV4LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMFxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2bXN0YXRfdGVzdF9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XG4mIzQzO1x0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O1ZNc3RhdCB0ZXN0aW5nXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDs9PT09PT09PT09PT09PT09PT09PT1cXG5cJiMzNDspO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0OzEuIGluY196b25lX3BhZ2Vfc3RhdGUoKSB0aGVuIGRlY196b25lX3BhZ2Vfc3RhdGUoKVxcblwmIzM0Oyk7XG4mIzQzO1x0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZSRUVfQ01BX1BBR0VTKTtcbiYjNDM7XG4mIzQzO1x0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0OyVpIHRpbWVzIGluY196b25lX3BhZ2Vfc3RhdGUoKSBcJiMzNDssIGkpO1xuJiM0MztcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuJiM0MztcdHByX2NvbnQoXCYjMzQ7LVx1MDAzZSAlbGx1IGN5Y2xlcyBcJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcbiYjNDM7XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdF9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XG4mIzQzO1xuJiM0MztcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xuJiM0MztcbiYjNDM7XHRwcl9jb250KFwmIzM0O19fZGVjX3pfcF9zKCkgXCYjMzQ7KTtcbiYjNDM7XHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbiYjNDM7XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbiYjNDM7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7Mi4gaW5jX3pvbmVfcGFnZV9zdGF0ZSgpL2RlY196b25lX3BhZ2Vfc3RhdGUoKVxcblwmIzM0Oyk7XG4mIzQzO1x0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpO1xuJiM0MztcdFx0ZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbiYjNDM7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7JWkgdGltZXMgaW5jL2RlYyBcJiMzNDssIGkpO1xuJiM0MztcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuJiM0MztcdHByX2NvbnQoXCYjMzQ7LVx1MDAzZSAlbGx1IGN5Y2xlc1xcblwmIzM0OywgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcbiYjNDM7XHRwcl9hbGVydChcJiMzNDszLiBjb3VudF92bV9ldmVudCgpXFxuXCYjMzQ7KTtcbiYjNDM7XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNvdW50X3ZtX2V2ZW50KFNMQUJTX1NDQU5ORUQpO1xuJiM0MztcbiYjNDM7XHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbiYjNDM7XG4mIzQzO1x0Y291bnRfdm1fZXZlbnRzKFNMQUJTX1NDQU5ORUQsIC1URVNUX0NPVU5UKTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDslaSBjb3VudF92bV9ldmVudHMgXCYjMzQ7LCBpKTtcbiYjNDM7XHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbiYjNDM7XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbiYjNDM7XHRfX2ZyZWVfcGFnZShwYWdlKTtcbiYjNDM7XHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZtc3RhdF90ZXN0X2V4aXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3Rlc3QgZXhpdFxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO21vZHVsZV9pbml0KHZtc3RhdF90ZXN0X2luaXQpXG4mIzQzO21vZHVsZV9leGl0KHZtc3RhdF90ZXN0X2V4aXQpXG4mIzQzO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0NocmlzdG9waCBMYW1ldGVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1ZNIHN0YXRpc3RpY3MgdGVzdFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODA4ZmY2NDM5MzViOGMzNmEzNjQwZWY2NjRhMWZlNzdkZmQxMDU0ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTM6MDA6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDEyNDRkY2FjMjI5NGEuLjcwODczYWFjNjc1ZmEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0zNDI3LDYgJiM0MzszNDI3LDM2IEBAIGNvbmZpZyBURVNUX0tFWEVDX0hBTkRPVkVSCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKJiM0Mztjb25maWcgVEVTVF9WTVNUQVQKJiM0MzsJdHJpc3RhdGUgJiMzNDtWTSBTdGF0aXN0aWNzIEJlbmNobWFyayYjMzQ7CiYjNDM7CWRlZmF1bHQgbgomIzQzOwloZWxwCiYjNDM7CSAgQSBzeW50aGV0aWMgYmVuY2htYXJrIG1lYXN1cmluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgVk0gc3RhdGlzdGljcywKJiM0MzsJICB1c2VmdWwgdG8gYW5hbHl6ZSBhbnkgaW1wcm92ZW1lbnRzIG9yIHJlZ3Jlc3Npb25zIGluIGZ1bmN0aW9ucyB0aGF0CiYjNDM7CSAgYXJlIGZyZXF1ZW50bHkgdXNlZCBpbiBob3QgY29kZSBwYXRocy4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwomIzQzO2NvbmZpZyBURVNUX1NMQUIKJiM0MzsJdHJpc3RhdGUgJiMzNDtTbGFiIEFsbG9jYXRvciBCZW5jaG1hcmsmIzM0OwomIzQzOwlkZWZhdWx0IG4KJiM0MzsJaGVscAomIzQzOwkgIEEgc3ludGhldGljIGJlbmNobWFyayB0aGF0IG1lYXN1cmVzIHNsYWIgYWxsb2NhdG9yIHBlcmZvcm1hbmNlLAomIzQzOwkgIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzaW5nbGUgdGhyZWFkIHRlc3RpbmcgYnkgcmVwZWF0ZWRseQomIzQzOwkgIGFsbG9jYXRpbmcgdGhlbiBmcmVlaW5nIG1lbW9yeSBhbmQgY29uY3VycmVudCBvciByZW1vdGUgYWxsb2NhdGlvbnMuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzYXkgTi4KJiM0MzsKJiM0Mztjb25maWcgVEVTVF9QQUdFQUxMT0MKJiM0MzsJdHJpc3RhdGUgJiMzNDtQYWdlIEFsbG9jYXRvciBCZW5jaG1hcmsmIzM0OwomIzQzOwlkZWZhdWx0IG4KJiM0MzsJaGVscAomIzQzOwkgIEEgYmVuY2htYXJrIG1lYXN1cmluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdG9yLCB1c2VmdWwKJiM0MzsJICB0byBhbmFseXplIGFueSBpbXByb3ZlbWVudHMgb3IgcmVncmVzc2lvbnMgd2hlbiByZXBlYXRlZGx5IGFsbG9jYXRpbmcKJiM0MzsJICBhbmQgZnJlZWluZyBtZW1vcnkgYXMgd2VsbCBhcyBjb25jdXJyZW50IGFuZCByZW1vdGUgYWxsb2NhdGlvbnMuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzYXkgTi4KJiM0MzsKIGNvbmZpZyBSQVRFTElNSVRfS1VOSVRfVEVTVAogCXRyaXN0YXRlICYjMzQ7S1VuaXQgVGVzdCBmb3IgY29ycmVjdG5lc3MgYW5kIHN0cmVzcyBvZiByYXRlbGltaXQmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTCiAJZGVwZW5kcyBvbiBLVU5JVApkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDdmNzVjYzZlZGY5NGEuLjE3YzE2NGUxNDVhZDQgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9saWIvTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDkgQEAgb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vCiBvYmotJChDT05GSUdfVEVTVF9SRUZfVFJBQ0tFUikgJiM0Mzs9IHRlc3RfcmVmX3RyYWNrZXIubwogb2JqLSQoQ09ORklHX1RFU1RfT0JKUE9PTCkgJiM0Mzs9IHRlc3Rfb2JqcG9vbC5vCiBvYmotJChDT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUikgJiM0Mzs9IHRlc3Rfa2hvLm8KJiM0MztvYmotJChDT05GSUdfVEVTVF9WTVNUQVQpICYjNDM7PSB0ZXN0X3Ztc3RhdC5vCiYjNDM7b2JqLSQoQ09ORklHX1RFU1RfU0xBQikgJiM0Mzs9IHRlc3Rfc2xhYi5vCiYjNDM7b2JqLSQoQ09ORklHX1RFU1RfUEFHRUFMTE9DKSAmIzQzOz0gdGVzdF9wYWdlYWxsb2MubwogCiBvYmotJChDT05GSUdfVEVTVF9GUFUpICYjNDM7PSB0ZXN0X2ZwdS5vCiB0ZXN0X2ZwdS15IDo9IHRlc3RfZnB1X2dsdWUubyB0ZXN0X2ZwdV9pbXBsLm8KZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3BhZ2VhbGxvYy5jIGIvbGliL3Rlc3RfcGFnZWFsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA1MTRkZjUyYzViMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3BhZ2VhbGxvYy5jCkBAIC0wLDAgJiM0MzsxLDMzNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBUZXN0IG1vZHVsZSBmb3IgaW4ga2VybmVsIHN5bnRoZXRpYyBwYWdlIGFsbG9jYXRvciB0ZXN0aW5nLgomIzQzOyAqCiYjNDM7ICogQ29tcGlsZWQgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgbmVlZHMgdG8gYmUgbG9hZGVkIHRvIHJ1bi4KJiM0MzsgKgomIzQzOyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24sIENocmlzdG9waCBMYW1ldGVyICZsdDtjbEBnZW50d28ub3JnJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9qaWZmaWVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL3RpbWV4LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0NPVU5UIDEwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIENPTkNVUlJFTlRfTUFYX09SREVSIDYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1NNUAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCB7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKJiM0MzsJaW50IGNwdTsKJiM0MzsJaW50IG9yZGVyOwomIzQzOwlpbnQgY291bnQ7CiYjNDM7CXN0cnVjdCBwYWdlICoqdjsKJiM0MzsJdm9pZCAoKnRlc3RfcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7CiYjNDM7CXZvaWQgKCp0ZXN0X3AyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0MTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdG9wMTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydDI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RvcDI7CiYjNDM7fSB0ZXN0W05SX0NQVVNdOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdXMgJmd0OyAwIGFuZCB0aGVuIGFsbCB0aGUKJiM0MzsgKiBvYmplY3RzIGxhdGVyIG9uIGNwdSAwCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogUGVyZm9ybSBubyBhbGxvY2F0aW9ucyBvbiBjcHUgMCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcDsKJiM0MzsKJiM0MzsJCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkpIHsKJiM0MzsJCQlwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtJmd0O29yZGVyKTsKJiM0MzsJCQkvKiBVc2Ugb2JqZWN0ICovCiYjNDM7CQkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTcsIDQpOwomIzQzOwkJfSBlbHNlCiYjNDM7CQkJcCA9IE5VTEw7CiYjNDM7CQl0LSZndDt2W2ldID0gcDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwkvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqLwomIzQzOwlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB0LSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgcGFnZSAqcCA9IHRlc3RbY3B1XS52W2ldOwomIzQzOwomIzQzOwkJCWlmICghcCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJX19mcmVlX3BhZ2VzKHAsIHQtJmd0O29yZGVyKTsKJiM0MzsJCX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgYW5kIGxhdGVyIGZyZWUgdGhlbSBhbGwgYWdhaW4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhbGxvY190aGVuX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHQtJmd0O2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC0mZ3Q7b3JkZXIpOwomIzQzOwomIzQzOwkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTQsIDQpOwomIzQzOwkJdC0mZ3Q7dltpXSA9IHA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIoc3RydWN0IHRlc3Rfc3RydWN0ICp0KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0LSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwID0gdC0mZ3Q7dltpXTsKJiM0MzsKJiM0MzsJCV9fZnJlZV9wYWdlcyhwLCB0LSZndDtvcmRlcik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhbGxvY19mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC0mZ3Q7b3JkZXIpOwomIzQzOwomIzQzOwkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTIsIDQpOwomIzQzOwkJX19mcmVlX3BhZ2VzKHAsIHQtJmd0O29yZGVyKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYXRvbWljX3QgdGVzdHNfcnVubmluZzsKJiM0MztzdGF0aWMgYXRvbWljX3QgcGhhc2UxX2NvbXBsZXRlOwomIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjEpOwomIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjIpOwomIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjMpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9mdW5jKHZvaWQgKnByaXZhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBwcml2YXRlOwomIzQzOwljcHVtYXNrX3QgbmV3bWFzayA9IENQVV9NQVNLX05PTkU7CiYjNDM7CiYjNDM7CWNwdW1hc2tfc2V0X2NwdSh0LSZndDtjcHUsICZhbXA7bmV3bWFzayk7CiYjNDM7CXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZhbXA7bmV3bWFzayk7CiYjNDM7CXQtJmd0O3YgPSBrbWFsbG9jX2FycmF5KHQtJmd0O2NvdW50LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwlhdG9taWNfaW5jKCZhbXA7dGVzdHNfcnVubmluZyk7CiYjNDM7CXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDtjb21wbGV0aW9uMSk7CiYjNDM7CXQtJmd0O3N0YXJ0MSA9IGdldF9jeWNsZXMoKTsKJiM0MzsJdC0mZ3Q7dGVzdF9wMSh0KTsKJiM0MzsJdC0mZ3Q7c3RvcDEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtwaGFzZTFfY29tcGxldGUpOwomIzQzOwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwl0LSZndDtzdGFydDIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWlmICh0LSZndDt0ZXN0X3AyKQomIzQzOwkJdC0mZ3Q7dGVzdF9wMih0KTsKJiM0MzsJdC0mZ3Q7c3RvcDIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWF0b21pY19kZWMoJmFtcDt0ZXN0c19ydW5uaW5nKTsKJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2NvbXBsZXRpb24zKTsKJiM0MzsJa2ZyZWUodC0mZ3Q7dik7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiYjNDM7CQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLAomIzQzOwkJdm9pZCAoKnAyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksCiYjNDM7CQlpbnQgb3JkZXIsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWUxID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lMiA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3VtMSA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3VtMiA9IDA7CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDt0ZXN0c19ydW5uaW5nLCAwKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3BoYXNlMV9jb21wbGV0ZSwgMCk7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO2NvbXBsZXRpb24xKTsKJiM0MzsJaW5pdF9jb21wbGV0aW9uKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDtjb21wbGV0aW9uMyk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiYjNDM7CQlzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSAmYW1wO3Rlc3RbY3B1XTsKJiM0MzsKJiM0MzsJCXQtJmd0O2NwdSA9IGNwdTsKJiM0MzsJCXQtJmd0O2NvdW50ID0gVEVTVF9DT1VOVDsKJiM0MzsJCXQtJmd0O3Rlc3RfcDEgPSBwMTsKJiM0MzsJCXQtJmd0O3Rlc3RfcDIgPSBwMjsKJiM0MzsJCXQtJmd0O29yZGVyID0gb3JkZXI7CiYjNDM7CQl0LSZndDt0YXNrID0ga3RocmVhZF9ydW4odGVzdF9mdW5jLCB0LCAmIzM0O3Rlc3QlZCYjMzQ7LCBjcHUpOwomIzQzOwkJaWYgKElTX0VSUih0LSZndDt0YXNrKSkgewomIzQzOwkJCXByX2VycigmIzM0O0ZhaWxlZCB0byBzdGFydCB0ZXN0IGZ1bmNcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgKi8KJiM0MzsJd2hpbGUgKGF0b21pY19yZWFkKCZhbXA7dGVzdHNfcnVubmluZykgJmx0OyBudW1fb25saW5lX2NwdXMoKSkgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwomIzQzOwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CiYjNDM7CX0KJiM0MzsJY29tcGxldGVfYWxsKCZhbXA7Y29tcGxldGlvbjEpOwomIzQzOwomIzQzOwkvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAxICovCiYjNDM7CXdoaWxlIChhdG9taWNfcmVhZCgmYW1wO3BoYXNlMV9jb21wbGV0ZSkgJmx0OyBudW1fb25saW5lX2NwdXMoKSkgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwomIzQzOwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CiYjNDM7CX0KJiM0MzsJY29tcGxldGVfYWxsKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwomIzQzOwkvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAyICovCiYjNDM7CXdoaWxlIChhdG9taWNfcmVhZCgmYW1wO3Rlc3RzX3J1bm5pbmcpKSB7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiYjNDM7CQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKJiM0MzsJfQomIzQzOwljb21wbGV0ZV9hbGwoJmFtcDtjb21wbGV0aW9uMyk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQomIzQzOwkJa3RocmVhZF9zdG9wKHRlc3RbY3B1XS50YXNrKTsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDslcyglZCk6JiMzNDssIG5hbWUsIG9yZGVyKTsKJiM0MzsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKJiM0MzsJCXN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9ICZhbXA7dGVzdFtjcHVdOwomIzQzOwomIzQzOwkJdGltZTEgPSB0LSZndDtzdG9wMSAtIHQtJmd0O3N0YXJ0MTsKJiM0MzsJCXRpbWUyID0gdC0mZ3Q7c3RvcDIgLSB0LSZndDtzdGFydDI7CiYjNDM7CQlzdW0xICYjNDM7PSB0aW1lMTsKJiM0MzsJCXN1bTIgJiM0Mzs9IHRpbWUyOwomIzQzOwkJcHJfY29udCgmIzM0OyAlZD0lbHUmIzM0OywgY3B1LCB0aW1lMSAvIFRFU1RfQ09VTlQpOwomIzQzOwkJaWYgKHAyKQomIzQzOwkJCXByX2NvbnQoJiMzNDsvJWx1JiMzNDssIHRpbWUyIC8gVEVTVF9DT1VOVCk7CiYjNDM7CX0KJiM0MzsJcHJfY29udCgmIzM0OyBBdmVyYWdlPSVsdSYjMzQ7LCBzdW0xIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTsKJiM0MzsJaWYgKHAyKQomIzQzOwkJcHJfY29udCgmIzM0Oy8lbHUmIzM0Oywgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7CiYjNDM7CXByX2NvbnQoJiMzNDtcbiYjMzQ7KTsKJiM0MzsJc2NoZWR1bGVfdGltZW91dCgyMDApOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztzdGF0aWMgaW50IHBhZ2VhbGxvY190ZXN0X2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXZvaWQgKip2ID0ga21hbGxvY19hcnJheShURVNUX0NPVU5ULCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwljeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7CiYjNDM7CWludCByZW07CiYjNDM7CWludCBvcmRlcjsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDt0ZXN0IGluaXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDtTaW5nbGUgdGhyZWFkIHRlc3RpbmdcbiYjMzQ7KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDs9PT09PT09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDsxLiBSZXBlYXRlZGx5IGFsbG9jYXRlIHRoZW4gZnJlZSB0ZXN0XG4mIzM0Oyk7CiYjNDM7CWZvciAob3JkZXIgPSAwOyBvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7CiYjNDM7CQl0aW1lMSA9IGdldF9jeWNsZXMoKTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsCiYjNDM7CQkJCQkJb3JkZXIpOwomIzQzOwomIzQzOwkJCWlmICghcCkgewomIzQzOwkJCQlwcl9lcnIoJiMzNDtDYW5ub3QgYWxsb2NhdGUgb3JkZXI9JWRcbiYjMzQ7LCBvcmRlcik7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkvKiBUb3VjaCBwYWdlICovCiYjNDM7CQkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMjIsIDQpOwomIzQzOwkJCXZbaV0gPSBwOwomIzQzOwkJfQomIzQzOwkJdGltZTIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQl0aW1lID0gdGltZTIgLSB0aW1lMTsKJiM0MzsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7JWkgdGltZXMgYWxsb2NfcGFnZSgsJWQpICYjMzQ7LCBpLCBvcmRlcik7CiYjNDM7CQl0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgJmFtcDtyZW0pOwomIzQzOwkJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzICYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTsKJiM0MzsKJiM0MzsJCXRpbWUxID0gZ2V0X2N5Y2xlcygpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHBhZ2UgKnAgPSB2W2ldOwomIzQzOwomIzQzOwkJCV9fZnJlZV9wYWdlcyhwLCBvcmRlcik7CiYjNDM7CQl9CiYjNDM7CQl0aW1lMiA9IGdldF9jeWNsZXMoKTsKJiM0MzsJCXRpbWUgPSB0aW1lMiAtIHRpbWUxOwomIzQzOwomIzQzOwkJcHJfY29udCgmIzM0O19fZnJlZV9wYWdlcygsJWQpJiMzNDssIG9yZGVyKTsKJiM0MzsJCXRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCAmYW1wO3JlbSk7CiYjNDM7CQlwcl9jb250KCYjMzQ7LSZndDsgJWxsdSBjeWNsZXNcbiYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9hbGVydCgmIzM0OzIuIGFsbG9jL2ZyZWUgdGVzdFxuJiMzNDspOwomIzQzOwlmb3IgKG9yZGVyID0gMDsgb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVI7IG9yZGVyJiM0MzsmIzQzOykgewomIzQzOwkJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLAomIzQzOwkJCQkJCSAgICAgb3JkZXIpOwomIzQzOwkJCV9fZnJlZV9wYWdlcyhwLCBvcmRlcik7CiYjNDM7CQl9CiYjNDM7CQl0aW1lMiA9IGdldF9jeWNsZXMoKTsKJiM0MzsJCXRpbWUgPSB0aW1lMiAtIHRpbWUxOwomIzQzOwomIzQzOwkJcHJfYWxlcnQoJiMzNDslaSB0aW1lcyBhbGxvYyggLCVkKS9mcmVlICYjMzQ7LCBpLCBvcmRlcik7CiYjNDM7CQl0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgJmFtcDtyZW0pOwomIzQzOwkJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzXG4mIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7CiYjNDM7CX0KJiM0MzsJa2ZyZWUodik7CiYjNDM7I2lmZGVmIENPTkZJR19TTVAKJiM0MzsJcHJfaW5mbygmIzM0O0NvbmN1cnJlbnQgYWxsb2NzXG4mIzM0Oyk7CiYjNDM7CXByX2luZm8oJiMzNDs9PT09PT09PT09PT09PT09PVxuJiMzNDspOwomIzQzOwlmb3IgKG9yZGVyID0gMDsgb3JkZXIgJmx0OyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlkb19jb25jdXJyZW50X3Rlc3QoYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEsCiYjNDM7CQkJYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIsCiYjNDM7CQkJb3JkZXIsICYjMzQ7UGFnZSBhbGxvYyBOKmFsbG9jIE4qZnJlZSYjMzQ7KTsKJiM0MzsJfQomIzQzOwlwcl9pbmZvKCYjMzQ7LS0tLUZhc3RwYXRoLS0tXG4mIzM0Oyk7CiYjNDM7CWZvciAob3JkZXIgPSAwOyBvcmRlciAmbHQ7IENPTkNVUlJFTlRfTUFYX09SREVSOyBvcmRlciYjNDM7JiM0MzspIHsKJiM0MzsJCWRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY19mcmVlX3Rlc3RfcDEsIE5VTEwsCiYjNDM7CQkJb3JkZXIsICYjMzQ7UGFnZSBOKihhbGxvYyBmcmVlKSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7UmVtb3RlIGZyZWUgdGVzdFxuJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7PT09PT09PT09PT09PT09PVxuJiMzNDspOwomIzQzOwlmb3IgKG9yZGVyID0gMDsgb3JkZXIgJmx0OyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlkb19jb25jdXJyZW50X3Rlc3QocmVtb3RlX2ZyZWVfdGVzdF9wMSwKJiM0MzsJCQkJcmVtb3RlX2ZyZWVfdGVzdF9wMiwKJiM0MzsJCQlvcmRlciwgJiMzNDtOKnJlbW90ZSBmcmVlJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi8KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGFnZWFsbG9jX3Rlc3RfZXhpdCh2b2lkKQomIzQzO3sKJiM0MzsJcHJfYWxlcnQoJiMzNDt0ZXN0IGV4aXRcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7bW9kdWxlX2luaXQocGFnZWFsbG9jX3Rlc3RfaW5pdCkKJiM0Mzttb2R1bGVfZXhpdChwYWdlYWxsb2NfdGVzdF9leGl0KQomIzQzOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtDaHJpc3RvcGggTGFtZXRlciYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtwYWdlIGFsbG9jYXRvciBwZXJmb3JtYW5jZSB0ZXN0JiMzNDspOwpkaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfc2xhYi5jIGIvbGliL3Rlc3Rfc2xhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmE0M2IwZDczZGFhYjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9zbGFiLmMKQEAgLTAsMCAmIzQzOzEsMzc1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIFRlc3QgbW9kdWxlIGZvciBzeW50aGV0aWMgaW4ga2VybmVsIHNsYWIgYWxsb2NhdG9yIHRlc3RpbmcuCiYjNDM7ICoKJiM0MzsgKiBUaGUgdGVzdCBpcyB0cmlnZ2VyZWQgYnkgbG9hZGluZyB0aGUgbW9kdWxlICh3aGljaCB3aWxsIGZhaWwpLgomIzQzOyAqCiYjNDM7ICogKEMpIDIwMDkgTGludXggRm91bmRhdGlvbiAmbHQ7Y2xAZ2VudHdvLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvamlmZmllcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS90aW1leC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMAomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfU01QCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2t0aHJlYWQuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwomIzQzOwlpbnQgY3B1OwomIzQzOwlpbnQgc2l6ZTsKJiM0MzsJaW50IGNvdW50OwomIzQzOwl2b2lkICoqdjsKJiM0MzsJdm9pZCAoKnRlc3RfcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7CiYjNDM7CXZvaWQgKCp0ZXN0X3AyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0MTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdG9wMTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydDI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RvcDI7CiYjNDM7fSB0ZXN0W05SX0NQVVNdOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdXMgJmd0OyAwIGFuZCB0aGVuIGFsbCB0aGUKJiM0MzsgKiBvYmplY3RzIGxhdGVyIG9uIGNwdSAwCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogUGVyZm9ybSBubyBhbGxvY2F0aW9ucyBvbiBjcHUgMCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1OCAqcDsKJiM0MzsKJiM0MzsJCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkpIHsKJiM0MzsJCQlwID0ga21hbGxvYyh0LSZndDtzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJCQkvKiBVc2Ugb2JqZWN0ICovCiYjNDM7CQkJKnAgPSAxNzsKJiM0MzsJCX0gZWxzZQomIzQzOwkJCXAgPSBOVUxMOwomIzQzOwkJdC0mZ3Q7dltpXSA9IHA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJLyogQWxsIGZyZWVzIGFyZSBjb21wbGV0ZWQgb24gY3B1IHplcm8gKi8KJiM0MzsJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdTggKnAgPSB0ZXN0W2NwdV0udltpXTsKJiM0MzsKJiM0MzsJCQlpZiAoIXApCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCSpwID0gMTY7CiYjNDM7CQkJa2ZyZWUocCk7CiYjNDM7CQl9CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdSAwIGFuZCBmcmVlIHRoZW0gaW1tZWRpYXRlbHkgb24gdGhlCiYjNDM7ICogb3RoZXIgcHJvY2Vzc29ycy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhbGxvY19uX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsJaW50IGNwdTsKJiM0MzsJY2hhciAqcDsKJiM0MzsKJiM0MzsJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkgewomIzQzOwkJLyogQ29uc3VtZXIgKi8KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB0LSZndDtjb3VudCAvIG51bV9vbmxpbmVfY3B1cygpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWRvIHsKJiM0MzsJCQkJcCA9IHQtJmd0O3ZbaV07CiYjNDM7CQkJCWlmICghcCkKJiM0MzsJCQkJCWNwdV9yZWxheCgpOwomIzQzOwkJCQllbHNlCiYjNDM7CQkJCQkqcCA9IDE3OwomIzQzOwkJCX0gd2hpbGUgKCFwKTsKJiM0MzsJCQlrZnJlZShwKTsKJiM0MzsJCQl0LSZndDt2W2ldID0gTlVMTDsKJiM0MzsJCX0KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwkvKiBQcm9kdWNlciAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewomIzQzOwkJCWlmIChjcHUpIHsKJiM0MzsJCQkJcCA9IGttYWxsb2ModC0mZ3Q7c2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQkJCS8qIFVzZSBvYmplY3QgKi8KJiM0MzsJCQkJKnAgPSAxNzsKJiM0MzsJCQkJdGVzdFtjcHVdLnZbaV0gPSBwOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBhbmQgbGF0ZXIgZnJlZSB0aGVtIGFsbCBhZ2FpbgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0LSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4ICpwID0ga21hbGxvYyh0LSZndDtzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsKJiM0MzsJCSpwID0gMTQ7CiYjNDM7CQl0LSZndDt2W2ldID0gcDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbWFsbG9jX2FsbG9jX3RoZW5fZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1OCAqcCA9IHQtJmd0O3ZbaV07CiYjNDM7CiYjNDM7CQkqcCA9IDEzOwomIzQzOwkJa2ZyZWUocCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBrbWFsbG9jX2FsbG9jX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1OCAqcCA9IGttYWxsb2ModC0mZ3Q7c2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CiYjNDM7CQkqcCA9IDEyOwomIzQzOwkJa2ZyZWUocCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGF0b21pY190IHRlc3RzX3J1bm5pbmc7CiYjNDM7c3RhdGljIGF0b21pY190IHBoYXNlMV9jb21wbGV0ZTsKJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24xKTsKJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24yKTsKJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24zKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfZnVuYyh2b2lkICpwcml2YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gcHJpdmF0ZTsKJiM0MzsJY3B1bWFza190IG5ld21hc2sgPSBDUFVfTUFTS19OT05FOwomIzQzOwomIzQzOwljcHVtYXNrX3NldF9jcHUodC0mZ3Q7Y3B1LCAmYW1wO25ld21hc2spOwomIzQzOwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmYW1wO25ld21hc2spOwomIzQzOwl0LSZndDt2ID0ga2NhbGxvYyh0LSZndDtjb3VudCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwlhdG9taWNfaW5jKCZhbXA7dGVzdHNfcnVubmluZyk7CiYjNDM7CXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDtjb21wbGV0aW9uMSk7CiYjNDM7CXQtJmd0O3N0YXJ0MSA9IGdldF9jeWNsZXMoKTsKJiM0MzsJdC0mZ3Q7dGVzdF9wMSh0KTsKJiM0MzsJdC0mZ3Q7c3RvcDEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtwaGFzZTFfY29tcGxldGUpOwomIzQzOwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwl0LSZndDtzdGFydDIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWlmICh0LSZndDt0ZXN0X3AyKQomIzQzOwkJdC0mZ3Q7dGVzdF9wMih0KTsKJiM0MzsJdC0mZ3Q7c3RvcDIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWF0b21pY19kZWMoJmFtcDt0ZXN0c19ydW5uaW5nKTsKJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2NvbXBsZXRpb24zKTsKJiM0MzsJa2ZyZWUodC0mZ3Q7dik7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiYjNDM7CQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLAomIzQzOwkJdm9pZCAoKnAyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksCiYjNDM7CQlpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBjcHU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZTEgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWUyID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdW0xID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdW0yID0gMDsKJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3Rlc3RzX3J1bm5pbmcsIDApOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cGhhc2UxX2NvbXBsZXRlLCAwKTsKJiM0MzsJaW5pdF9jb21wbGV0aW9uKCZhbXA7Y29tcGxldGlvbjEpOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDtjb21wbGV0aW9uMik7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO2NvbXBsZXRpb24zKTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKJiM0MzsJCXN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9ICZhbXA7dGVzdFtjcHVdOwomIzQzOwomIzQzOwkJdC0mZ3Q7Y3B1ID0gY3B1OwomIzQzOwkJdC0mZ3Q7Y291bnQgPSBURVNUX0NPVU5UOwomIzQzOwkJdC0mZ3Q7dGVzdF9wMSA9IHAxOwomIzQzOwkJdC0mZ3Q7dGVzdF9wMiA9IHAyOwomIzQzOwkJdC0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CQl0LSZndDt0YXNrID0ga3RocmVhZF9ydW4odGVzdF9mdW5jLCB0LCAmIzM0O3Rlc3QlZCYjMzQ7LCBjcHUpOwomIzQzOwkJaWYgKElTX0VSUih0LSZndDt0YXNrKSkgewomIzQzOwkJCXByX2VycigmIzM0O0ZhaWxlZCB0byBzdGFydCB0ZXN0IGZ1bmNcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgKi8KJiM0MzsJd2hpbGUgKGF0b21pY19yZWFkKCZhbXA7dGVzdHNfcnVubmluZykgJmx0OyBudW1fb25saW5lX2NwdXMoKSkgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwomIzQzOwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CiYjNDM7CX0KJiM0MzsJY29tcGxldGVfYWxsKCZhbXA7Y29tcGxldGlvbjEpOwomIzQzOwomIzQzOwkvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAxICovCiYjNDM7CXdoaWxlIChhdG9taWNfcmVhZCgmYW1wO3BoYXNlMV9jb21wbGV0ZSkgJmx0OyBudW1fb25saW5lX2NwdXMoKSkgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwomIzQzOwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CiYjNDM7CX0KJiM0MzsJY29tcGxldGVfYWxsKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwomIzQzOwkvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAyICovCiYjNDM7CXdoaWxlIChhdG9taWNfcmVhZCgmYW1wO3Rlc3RzX3J1bm5pbmcpKSB7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiYjNDM7CQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKJiM0MzsJfQomIzQzOwljb21wbGV0ZV9hbGwoJmFtcDtjb21wbGV0aW9uMyk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQomIzQzOwkJa3RocmVhZF9zdG9wKHRlc3RbY3B1XS50YXNrKTsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDslcyglZCk6JiMzNDssIG5hbWUsIHNpemUpOwomIzQzOwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewomIzQzOwkJc3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gJmFtcDt0ZXN0W2NwdV07CiYjNDM7CiYjNDM7CQl0aW1lMSA9IHQtJmd0O3N0b3AxIC0gdC0mZ3Q7c3RhcnQxOwomIzQzOwkJdGltZTIgPSB0LSZndDtzdG9wMiAtIHQtJmd0O3N0YXJ0MjsKJiM0MzsJCXN1bTEgJiM0Mzs9IHRpbWUxOwomIzQzOwkJc3VtMiAmIzQzOz0gdGltZTI7CiYjNDM7CQlwcl9jb250KCYjMzQ7ICVkPSVsdSYjMzQ7LCBjcHUsIHRpbWUxIC8gVEVTVF9DT1VOVCk7CiYjNDM7CQlpZiAocDIpCiYjNDM7CQkJcHJfY29udCgmIzM0Oy8lbHUmIzM0OywgdGltZTIgLyBURVNUX0NPVU5UKTsKJiM0MzsJfQomIzQzOwlwcl9jb250KCYjMzQ7IEF2ZXJhZ2U9JWx1JiMzNDssIHN1bTEgLyBudW1fb25saW5lX2NwdXMoKSAvIFRFU1RfQ09VTlQpOwomIzQzOwlpZiAocDIpCiYjNDM7CQlwcl9jb250KCYjMzQ7LyVsdSYjMzQ7LCBzdW0yIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTsKJiM0MzsJcHJfY29udCgmIzM0O1xuJiMzNDspOwomIzQzOwlzY2hlZHVsZV90aW1lb3V0KDIwMCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2xhYl90ZXN0X2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXZvaWQgKip2ID0ga21hbGxvY19hcnJheShURVNUX0NPVU5ULCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwljeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7CiYjNDM7CWludCByZW07CiYjNDM7CWludCBzaXplOwomIzQzOwomIzQzOwlwcl9hbGVydCgmIzM0O3Rlc3QgaW5pdFxuJiMzNDspOwomIzQzOwomIzQzOwlwcl9hbGVydCgmIzM0O1NpbmdsZSB0aHJlYWQgdGVzdGluZ1xuJiMzNDspOwomIzQzOwlwcl9hbGVydCgmIzM0Oz09PT09PT09PT09PT09PT09PT09PVxuJiMzNDspOwomIzQzOwlwcl9hbGVydCgmIzM0OzEuIEttYWxsb2M6IFJlcGVhdGVkbHkgYWxsb2NhdGUgdGhlbiBmcmVlIHRlc3RcbiYjMzQ7KTsKJiM0MzsJZm9yIChzaXplID0gODsgc2l6ZSAmbHQ7PSBQQUdFX1NJWkUgJmx0OyZsdDsgMjsgc2l6ZSAmbHQ7Jmx0Oz0gMSkgewomIzQzOwkJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQl1OCAqcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CiYjNDM7CQkJKnAgPSAyMjsKJiM0MzsJCQl2W2ldID0gcDsKJiM0MzsJCX0KJiM0MzsJCXRpbWUyID0gZ2V0X2N5Y2xlcygpOwomIzQzOwkJdGltZSA9IHRpbWUyIC0gdGltZTE7CiYjNDM7CiYjNDM7CQlwcl9hbGVydCgmIzM0OyVpIHRpbWVzIGttYWxsb2MoJWQpICYjMzQ7LCBpLCBzaXplKTsKJiM0MzsJCXRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCAmYW1wO3JlbSk7CiYjNDM7CQlwcl9jb250KCYjMzQ7LSZndDsgJWxsdSBjeWNsZXMgJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwomIzQzOwkJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQl1OCAqcCA9IHZbaV07CiYjNDM7CiYjNDM7CQkJKnAgPSAyMzsKJiM0MzsJCQlrZnJlZShwKTsKJiM0MzsJCX0KJiM0MzsJCXRpbWUyID0gZ2V0X2N5Y2xlcygpOwomIzQzOwkJdGltZSA9IHRpbWUyIC0gdGltZTE7CiYjNDM7CiYjNDM7CQlwcl9jb250KCYjMzQ7a2ZyZWUgJiMzNDspOwomIzQzOwkJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJCXByX2NvbnQoJiMzNDstJmd0OyAlbGx1IGN5Y2xlc1xuJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7Mi4gS21hbGxvYzogYWxsb2MvZnJlZSB0ZXN0XG4mIzM0Oyk7CiYjNDM7CWZvciAoc2l6ZSA9IDg7IHNpemUgJmx0Oz0gUEFHRV9TSVpFICZsdDsmbHQ7IDI7IHNpemUgJmx0OyZsdDs9IDEpIHsKJiM0MzsJCXRpbWUxID0gZ2V0X2N5Y2xlcygpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdTggKnAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJfQomIzQzOwkJdGltZTIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQl0aW1lID0gdGltZTIgLSB0aW1lMTsKJiM0MzsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7JWkgdGltZXMga21hbGxvYyglZCkva2ZyZWUgJiMzNDssIGksIHNpemUpOwomIzQzOwkJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJCXByX2NvbnQoJiMzNDstJmd0OyAlbGx1IGN5Y2xlc1xuJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwl9CiYjNDM7CWtmcmVlKHYpOwomIzQzOyNpZmRlZiBDT05GSUdfU01QCiYjNDM7CXByX2luZm8oJiMzNDtDb25jdXJyZW50IGFsbG9jc1xuJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7PT09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJZm9yIChpID0gMzsgaSAmbHQ7PSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZG9fY29uY3VycmVudF90ZXN0KGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEsCiYjNDM7CQkJa21hbGxvY19hbGxvY190aGVuX2ZyZWVfdGVzdF9wMiwKJiM0MzsJCQkxICZsdDsmbHQ7IGksICYjMzQ7S21hbGxvYyBOKmFsbG9jIE4qZnJlZSYjMzQ7KTsKJiM0MzsJfQomIzQzOwlmb3IgKGkgPSAzOyBpICZsdDs9IFBBR0VfU0hJRlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlkb19jb25jdXJyZW50X3Rlc3Qoa21hbGxvY19hbGxvY19mcmVlX3Rlc3RfcDEsIE5VTEwsCiYjNDM7CQkJMSAmbHQ7Jmx0OyBpLCAmIzM0O0ttYWxsb2MgTiooYWxsb2MgZnJlZSkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1JlbW90ZSBmcmVlIHRlc3RcbiYjMzQ7KTsKJiM0MzsJcHJfaW5mbygmIzM0Oz09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJZm9yIChpID0gMzsgaSAmbHQ7PSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZG9fY29uY3VycmVudF90ZXN0KHJlbW90ZV9mcmVlX3Rlc3RfcDEsCiYjNDM7CQkJCXJlbW90ZV9mcmVlX3Rlc3RfcDIsCiYjNDM7CQkJMSAmbHQ7Jmx0OyBpLCAmIzM0O04qcmVtb3RlIGZyZWUmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0OzEgYWxsb2MgTiBmcmVlIHRlc3RcbiYjMzQ7KTsKJiM0MzsJcHJfaW5mbygmIzM0Oz09PT09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJZm9yIChpID0gMzsgaSAmbHQ7PSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZG9fY29uY3VycmVudF90ZXN0KGFsbG9jX25fZnJlZV90ZXN0X3AxLAomIzQzOwkJCQlOVUxMLAomIzQzOwkJCTEgJmx0OyZsdDsgaSwgJiMzNDsxIGFsbG9jIE4gZnJlZSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNsYWJfdGVzdF9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlwcl9hbGVydCgmIzM0O3Rlc3QgZXhpdFxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzttb2R1bGVfaW5pdChzbGFiX3Rlc3RfaW5pdCkKJiM0Mzttb2R1bGVfZXhpdChzbGFiX3Rlc3RfZXhpdCkKJiM0MzsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Q2hyaXN0b3BoIExhbWV0ZXIgYW5kIE1hdGhpZXUgRGVzbm95ZXJzJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1NMQUIgdGVzdCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3Ztc3RhdC5jIGIvbGliL3Rlc3Rfdm1zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjYzZjQzOWFiOWQyYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3Ztc3RhdC5jCkBAIC0wLDAgJiM0MzsxLDk1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIFRlc3QgbW9kdWxlIGZvciBpbi1rZXJuZWwgc3ludGhldGljIHZtIHN0YXRpc3RpY3MgcGVyZm9ybWFuY2UuCiYjNDM7ICoKJiM0MzsgKiBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKgltb2Rwcm9iZSB0ZXN0X3Ztc3RhdAomIzQzOyAqCiYjNDM7ICogdG8gcnVuIHRoaXMgdGVzdAomIzQzOyAqCiYjNDM7ICogKEMpIDIwMDkgTGludXggRm91bmRhdGlvbiwgQ2hyaXN0b3BoIExhbWV0ZXIgJmx0O2NsQGdlbnR3by5vcmcmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ppZmZpZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL3RpbWV4LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0NPVU5UIDEwMDAwCiYjNDM7CiYjNDM7c3RhdGljIGludCB2bXN0YXRfdGVzdF9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJY3ljbGVzX3QgdGltZTEsIHRpbWUyLCB0aW1lOwomIzQzOwlpbnQgcmVtOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7Vk1zdGF0IHRlc3RpbmdcbiYjMzQ7KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDs9PT09PT09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDsxLiBpbmNfem9uZV9wYWdlX3N0YXRlKCkgdGhlbiBkZWNfem9uZV9wYWdlX3N0YXRlKClcbiYjMzQ7KTsKJiM0MzsJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykKJiM0MzsJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpOwomIzQzOwomIzQzOwl0aW1lMiA9IGdldF9jeWNsZXMoKTsKJiM0MzsJdGltZSA9IHRpbWUyIC0gdGltZTE7CiYjNDM7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7JWkgdGltZXMgaW5jX3pvbmVfcGFnZV9zdGF0ZSgpICYjMzQ7LCBpKTsKJiM0MzsJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzICYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTsKJiM0MzsKJiM0MzsJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykKJiM0MzsJCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7CiYjNDM7CiYjNDM7CXRpbWUyID0gZ2V0X2N5Y2xlcygpOwomIzQzOwl0aW1lID0gdGltZTIgLSB0aW1lMTsKJiM0MzsKJiM0MzsJcHJfY29udCgmIzM0O19fZGVjX3pfcF9zKCkgJiMzNDspOwomIzQzOwl0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgJmFtcDtyZW0pOwomIzQzOwlwcl9jb250KCYjMzQ7LSZndDsgJWxsdSBjeWNsZXNcbiYjMzQ7LCAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7CiYjNDM7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7Mi4gaW5jX3pvbmVfcGFnZV9zdGF0ZSgpL2RlY196b25lX3BhZ2Vfc3RhdGUoKVxuJiMzNDspOwomIzQzOwl0aW1lMSA9IGdldF9jeWNsZXMoKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZSRUVfQ01BX1BBR0VTKTsKJiM0MzsJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRpbWUyID0gZ2V0X2N5Y2xlcygpOwomIzQzOwl0aW1lID0gdGltZTIgLSB0aW1lMTsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDslaSB0aW1lcyBpbmMvZGVjICYjMzQ7LCBpKTsKJiM0MzsJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzXG4mIzM0OywgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwomIzQzOwlwcl9hbGVydCgmIzM0OzMuIGNvdW50X3ZtX2V2ZW50KClcbiYjMzQ7KTsKJiM0MzsJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNvdW50X3ZtX2V2ZW50KFNMQUJTX1NDQU5ORUQpOwomIzQzOwomIzQzOwl0aW1lMiA9IGdldF9jeWNsZXMoKTsKJiM0MzsJdGltZSA9IHRpbWUyIC0gdGltZTE7CiYjNDM7CiYjNDM7CWNvdW50X3ZtX2V2ZW50cyhTTEFCU19TQ0FOTkVELCAtVEVTVF9DT1VOVCk7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7JWkgY291bnRfdm1fZXZlbnRzICYjMzQ7LCBpKTsKJiM0MzsJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzXG4mIzM0OywgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwlfX2ZyZWVfcGFnZShwYWdlKTsKJiM0MzsJcmV0dXJuIC1FQUdBSU47IC8qIEZhaWwgd2lsbCBkaXJlY3RseSB1bmxvYWQgdGhlIG1vZHVsZSAqLwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2bXN0YXRfdGVzdF9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlwcl9hbGVydCgmIzM0O3Rlc3QgZXhpdFxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzttb2R1bGVfaW5pdCh2bXN0YXRfdGVzdF9pbml0KQomIzQzO21vZHVsZV9leGl0KHZtc3RhdF90ZXN0X2V4aXQpCiYjNDM7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0NocmlzdG9waCBMYW1ldGVyJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1ZNIHN0YXRpc3RpY3MgdGVzdCYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjUKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiA1NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRocmVlIG5ldyB0ZXN0IG1vZHVsZXM6IGB0ZXN0X3Ztc3RhdGAsIGB0ZXN0X3NsYWJgLCBhbmQgYHRlc3RfcGFnZWFsbG9jYC4gVGhleSYjMzk7cmUgc3ludGhldGljIGJlbmNobWFya3MgZm9yIFZNIHN0YXRpc3RpY3MsIHNsYWIgYWxsb2NhdG9yLCBhbmQgdGhlIHBhZ2UgYWxsb2NhdG9yLCByZXNwZWN0aXZlbHkuIFRoZXkgZ2V0IGFkZGVkIHRvIGBLY29uZmlnLmRlYnVnYCBhbmQgdGhlIE1ha2VmaWxlLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhleSAqZXhlY3V0ZSogdXBvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKGBtb2R1bGVfaW5pdGApIGFuZCB0aGVuIGltbWVkaWF0ZWx5IHVubG9hZCB0aGVtc2VsdmVzIGJ5IHJldHVybmluZyBgLUVBR0FJTmAuCgpJbml0aWFsbHksIEkgYXNrZWQgbXlzZWxmLCAmIzM0O0FyZSB0aGVzZSBldmVuICp3b3J0aCogZnV6emluZz8mIzM0OyBNeSBleHBlcnRpc2UgdGVsbHMgbWUgZnV6emluZyB1c3VhbGx5IGZvY3VzZXMgb24gY2hhbmdlcyB0aGF0IGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSwgQVBJcywgb3IgZHJpdmVycy4gVGhlc2UgbW9kdWxlcywgaG93ZXZlciwgYXJlIGVzc2VudGlhbGx5IGp1c3QgYmVuY2htYXJrcy4gVGhleSBkb24mIzM5O3QgZXhwb3NlIGFueSBuZXcgc3lzY2FsbHMsIGlvY3Rscywgb3IgZnVuY3Rpb25hbCBsb2dpYy4gVGhleSBqdXN0IHJlcGVhdGVkbHkgY2FsbCBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb25zIGxpa2UgYGFsbG9jX3BhZ2VzYCwgYGttYWxsb2NgLCBhbmQgYGluY196b25lX3BhZ2Vfc3RhdGVgIGluIGEgbG9vcCwgcHVyZWx5IHRvIG1lYXN1cmUgcGVyZm9ybWFuY2UuIFRoZXkgYXJlICpub3QqIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIGNvcmUgb3BlcmF0aW9uLgoKVGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBpZiBhIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcgaGFzIHNldmVyYWwgZGVmaW5lZCByZWFzb25zIGZvciBhIGZhbHNlIHJldHVybiwgYW5kIGFsdGhvdWdoIGEgdGVzdCBtb2R1bGUgaXNuJiMzOTt0IGV4cGxpY2l0LCBpdCBzZWVtcyB0aGF0IGl0JiMzOTtzIGp1c3Qgbm90IGZ1bmN0aW9uYWwgY2hhbmdlcy4KCkkgcmUtZXhhbWluZWQgdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBpZiBzb21ldGhpbmcgc2hvdWxkIGJlIGZ1enplZC4gSXQgZG9lc24mIzM5O3QgZXhwbGljaXRseSBtZW50aW9uIHRlc3QgbW9kdWxlcywgYnV0IGl0IGRvZXMgc2F5IHRoaW5ncyBsaWtlIGNvZGUgY29tbWVudHMsIHB1cmUgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBhbmQgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24gZmxvdy4gQmVuY2htYXJrIG1vZHVsZXMgZG9uJiMzOTt0IGRvIHRoZXNlIHRoaW5ncywgYnV0IHRoZXkgYWxzbyBkb24mIzM5O3QgcmVhbGx5ICpkbyogYW55dGhpbmcgdGhhdCYjMzk7cyBmdXp6ZWQuCgpXaGlsZSBTeXprYWxsZXIgKmNvdWxkKiBsb2FkIG1vZHVsZXMsIGZ1enppbmcgYSBiZW5jaG1hcmsgbW9kdWxlIGlzIHBvaW50bGVzcy4gSXQgZG9lc24mIzM5O3QgdGFrZSBpbnB1dCBmcm9tIHVzZXIgc3BhY2U7IGl0IGp1c3QgcnVucyBhIGhhcmRjb2RlZCBiZW5jaG1hcmsgb24gbG9hZC4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZXNlIGFyZSBwdXJlbHkgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzIHRoYXQgZXhlY3V0ZSBoYXJkY29kZWQgdGVzdHMgb24gbG9hZCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMgb3IgdXNlci1mYWNpbmcgQVBJcyB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBUaGV5IGFyZSBmb3IgbWVhc3VyaW5nIHBlcmZvcm1hbmNlLCBub3QgZXhwb3NpbmcgbmV3IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN5bnRoZXRpYyBiZW5jaG1hcmsgbW9kdWxlcyAodGVzdF92bXN0YXQsIHRlc3Rfc2xhYiwgdGVzdF9wYWdlYWxsb2MpIHRoYXQgZXhlY3V0ZSBoYXJkY29kZWQgcGVyZm9ybWFuY2UgdGVzdHMgdXBvbiBtb2R1bGUgbG9hZC4gVGhlc2UgbW9kdWxlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgdXNlci1mYWNpbmcgQVBJcywgb3IgY29tcGxleCBzdGF0ZSBtYWNoaW5lcyB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjAwOjAyLjEwNDE2NDI1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTIzMjY0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzowMDowMi4xMDQxNzEyOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTg4MjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgwOGZmNjQzOTM1YjhjMzZhMzY0MGVmNjY0YTFmZTc3ZGZkMTA1NGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzowMDowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnXFxuaW5kZXggMTI0NGRjYWMyMjk0YS4uNzA4NzNhYWM2NzVmYSAxMDA2NDRcXG4tLS0gYS9saWIvS2NvbmZpZy5kZWJ1Z1xcbisrKyBiL2xpYi9LY29uZmlnLmRlYnVnXFxuQEAgLTM0MjcsNiArMzQyNywzNiBAQCBjb25maWcgVEVTVF9LRVhFQ19IQU5ET1ZFUlxcbiBcXG4gXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiBcXG4rY29uZmlnIFRFU1RfVk1TVEFUXFxuK1xcdHRyaXN0YXRlIFxcXCJWTSBTdGF0aXN0aWNzIEJlbmNobWFya1xcXCJcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGhlbHBcXG4rXFx0ICBBIHN5bnRoZXRpYyBiZW5jaG1hcmsgbWVhc3VyaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBWTSBzdGF0aXN0aWNzLFxcbitcXHQgIHVzZWZ1bCB0byBhbmFseXplIGFueSBpbXByb3ZlbWVudHMgb3IgcmVncmVzc2lvbnMgaW4gZnVuY3Rpb25zIHRoYXRcXG4rXFx0ICBhcmUgZnJlcXVlbnRseSB1c2VkIGluIGhvdCBjb2RlIHBhdGhzLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbitcXG4rY29uZmlnIFRFU1RfU0xBQlxcbitcXHR0cmlzdGF0ZSBcXFwiU2xhYiBBbGxvY2F0b3IgQmVuY2htYXJrXFxcIlxcbitcXHRkZWZhdWx0IG5cXG4rXFx0aGVscFxcbitcXHQgIEEgc3ludGhldGljIGJlbmNobWFyayB0aGF0IG1lYXN1cmVzIHNsYWIgYWxsb2NhdG9yIHBlcmZvcm1hbmNlLFxcbitcXHQgIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzaW5nbGUgdGhyZWFkIHRlc3RpbmcgYnkgcmVwZWF0ZWRseVxcbitcXHQgIGFsbG9jYXRpbmcgdGhlbiBmcmVlaW5nIG1lbW9yeSBhbmQgY29uY3VycmVudCBvciByZW1vdGUgYWxsb2NhdGlvbnMuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbitjb25maWcgVEVTVF9QQUdFQUxMT0NcXG4rXFx0dHJpc3RhdGUgXFxcIlBhZ2UgQWxsb2NhdG9yIEJlbmNobWFya1xcXCJcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGhlbHBcXG4rXFx0ICBBIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwYWdlIGFsbG9jYXRvciwgdXNlZnVsXFxuK1xcdCAgdG8gYW5hbHl6ZSBhbnkgaW1wcm92ZW1lbnRzIG9yIHJlZ3Jlc3Npb25zIHdoZW4gcmVwZWF0ZWRseSBhbGxvY2F0aW5nXFxuK1xcdCAgYW5kIGZyZWVpbmcgbWVtb3J5IGFzIHdlbGwgYXMgY29uY3VycmVudCBhbmQgcmVtb3RlIGFsbG9jYXRpb25zLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbitcXG4gY29uZmlnIFJBVEVMSU1JVF9LVU5JVF9URVNUXFxuIFxcdHRyaXN0YXRlIFxcXCJLVW5pdCBUZXN0IGZvciBjb3JyZWN0bmVzcyBhbmQgc3RyZXNzIG9mIHJhdGVsaW1pdFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiBcXHRkZXBlbmRzIG9uIEtVTklUXFxuZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZVxcbmluZGV4IDdmNzVjYzZlZGY5NGEuLjE3YzE2NGUxNDVhZDQgMTAwNjQ0XFxuLS0tIGEvbGliL01ha2VmaWxlXFxuKysrIGIvbGliL01ha2VmaWxlXFxuQEAgLTEwNSw2ICsxMDUsOSBAQCBvYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSArPSB0ZXN0X2ZyZWVfcGFnZXMub1xcbiBvYmotJChDT05GSUdfVEVTVF9SRUZfVFJBQ0tFUikgKz0gdGVzdF9yZWZfdHJhY2tlci5vXFxuIG9iai0kKENPTkZJR19URVNUX09CSlBPT0wpICs9IHRlc3Rfb2JqcG9vbC5vXFxuIG9iai0kKENPTkZJR19URVNUX0tFWEVDX0hBTkRPVkVSKSArPSB0ZXN0X2toby5vXFxuK29iai0kKENPTkZJR19URVNUX1ZNU1RBVCkgKz0gdGVzdF92bXN0YXQub1xcbitvYmotJChDT05GSUdfVEVTVF9TTEFCKSArPSB0ZXN0X3NsYWIub1xcbitvYmotJChDT05GSUdfVEVTVF9QQUdFQUxMT0MpICs9IHRlc3RfcGFnZWFsbG9jLm9cXG4gXFxuIG9iai0kKENPTkZJR19URVNUX0ZQVSkgKz0gdGVzdF9mcHUub1xcbiB0ZXN0X2ZwdS15IDo9IHRlc3RfZnB1X2dsdWUubyB0ZXN0X2ZwdV9pbXBsLm9cXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfcGFnZWFsbG9jLmMgYi9saWIvdGVzdF9wYWdlYWxsb2MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA1MTRkZjUyYzViMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9saWIvdGVzdF9wYWdlYWxsb2MuY1xcbkBAIC0wLDAgKzEsMzM3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIFRlc3QgbW9kdWxlIGZvciBpbiBrZXJuZWwgc3ludGhldGljIHBhZ2UgYWxsb2NhdG9yIHRlc3RpbmcuXFxuKyAqXFxuKyAqIENvbXBpbGVkIGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIG5lZWRzIHRvIGJlIGxvYWRlZCB0byBydW4uXFxuKyAqXFxuKyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24sIENocmlzdG9waCBMYW1ldGVyIFxcdTAwM2NjbEBnZW50d28ub3JnXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaWZmaWVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vdGltZXguaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwXFxuK1xcbisjZGVmaW5lIENPTkNVUlJFTlRfTUFYX09SREVSIDZcXG4rXFxuKyNpZmRlZiBDT05GSUdfU01QXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuK1xcbitzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbitcXHRpbnQgY3B1O1xcbitcXHRpbnQgb3JkZXI7XFxuK1xcdGludCBjb3VudDtcXG4rXFx0c3RydWN0IHBhZ2UgKip2O1xcbitcXHR2b2lkICgqdGVzdF9wMSkoc3RydWN0IHRlc3Rfc3RydWN0ICp0KTtcXG4rXFx0dm9pZCAoKnRlc3RfcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQxO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0b3AxO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0MjtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdG9wMjtcXG4rfSB0ZXN0W05SX0NQVVNdO1xcbitcXG4rLypcXG4rICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdXMgXFx1MDAzZSAwIGFuZCB0aGVuIGFsbCB0aGVcXG4rICogb2JqZWN0cyBsYXRlciBvbiBjcHUgMFxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBQZXJmb3JtIG5vIGFsbG9jYXRpb25zIG9uIGNwdSAwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0LVxcdTAwM2Vjb3VudDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwO1xcbitcXG4rXFx0XFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xcbitcXHRcXHRcXHRwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtXFx1MDAzZW9yZGVyKTtcXG4rXFx0XFx0XFx0LyogVXNlIG9iamVjdCAqL1xcbitcXHRcXHRcXHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAxNywgNCk7XFxuK1xcdFxcdH0gZWxzZVxcbitcXHRcXHRcXHRwID0gTlVMTDtcXG4rXFx0XFx0dC1cXHUwMDNldltpXSA9IHA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHQvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqL1xcbitcXHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHQtXFx1MDAzZWNvdW50OyBpKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IHBhZ2UgKnAgPSB0ZXN0W2NwdV0udltpXTtcXG4rXFxuK1xcdFxcdFxcdGlmICghcClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRfX2ZyZWVfcGFnZXMocCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXHRcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBhbmQgbGF0ZXIgZnJlZSB0aGVtIGFsbCBhZ2FpblxcbisgKi9cXG4rc3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHQtXFx1MDAzZWNvdW50OyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXG4rXFx0XFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTQsIDQpO1xcbitcXHRcXHR0LVxcdTAwM2V2W2ldID0gcDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhbGxvY190aGVuX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcCA9IHQtXFx1MDAzZXZbaV07XFxuK1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cy4gRnJlZSB0aGVtIGltbWVkaWF0ZWx5LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYWxsb2NfZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXG4rXFx0XFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTIsIDQpO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBhdG9taWNfdCB0ZXN0c19ydW5uaW5nO1xcbitzdGF0aWMgYXRvbWljX3QgcGhhc2UxX2NvbXBsZXRlO1xcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24xKTtcXG4rc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjb21wbGV0aW9uMik7XFxuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjMpO1xcbitcXG4rc3RhdGljIGludCB0ZXN0X2Z1bmModm9pZCAqcHJpdmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBwcml2YXRlO1xcbitcXHRjcHVtYXNrX3QgbmV3bWFzayA9IENQVV9NQVNLX05PTkU7XFxuK1xcbitcXHRjcHVtYXNrX3NldF9jcHUodC1cXHUwMDNlY3B1LCBcXHUwMDI2bmV3bWFzayk7XFxuK1xcdHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIFxcdTAwMjZuZXdtYXNrKTtcXG4rXFx0dC1cXHUwMDNldiA9IGttYWxsb2NfYXJyYXkodC1cXHUwMDNlY291bnQsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7XFxuK1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcXG4rXFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjEpO1xcbitcXHR0LVxcdTAwM2VzdGFydDEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdHQtXFx1MDAzZXRlc3RfcDEodCk7XFxuK1xcdHQtXFx1MDAzZXN0b3AxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZwaGFzZTFfY29tcGxldGUpO1xcbitcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZjb21wbGV0aW9uMik7XFxuK1xcdHQtXFx1MDAzZXN0YXJ0MiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0aWYgKHQtXFx1MDAzZXRlc3RfcDIpXFxuK1xcdFxcdHQtXFx1MDAzZXRlc3RfcDIodCk7XFxuK1xcdHQtXFx1MDAzZXN0b3AyID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRhdG9taWNfZGVjKFxcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcXG4rXFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjMpO1xcbitcXHRrZnJlZSh0LVxcdTAwM2V2KTtcXG4rXFx0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcXG4rXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xcbitcXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLFxcbitcXHRcXHR2b2lkICgqcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcXG4rXFx0XFx0aW50IG9yZGVyLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZTEgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWUyID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdW0yID0gMDtcXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZwaGFzZTFfY29tcGxldGUsIDApO1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmNvbXBsZXRpb24xKTtcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjb21wbGV0aW9uMik7XFxuK1xcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjMpO1xcbitcXG4rXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcXG4rXFx0XFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXFx1MDAyNnRlc3RbY3B1XTtcXG4rXFxuK1xcdFxcdHQtXFx1MDAzZWNwdSA9IGNwdTtcXG4rXFx0XFx0dC1cXHUwMDNlY291bnQgPSBURVNUX0NPVU5UO1xcbitcXHRcXHR0LVxcdTAwM2V0ZXN0X3AxID0gcDE7XFxuK1xcdFxcdHQtXFx1MDAzZXRlc3RfcDIgPSBwMjtcXG4rXFx0XFx0dC1cXHUwMDNlb3JkZXIgPSBvcmRlcjtcXG4rXFx0XFx0dC1cXHUwMDNldGFzayA9IGt0aHJlYWRfcnVuKHRlc3RfZnVuYywgdCwgXFxcInRlc3QlZFxcXCIsIGNwdSk7XFxuK1xcdFxcdGlmIChJU19FUlIodC1cXHUwMDNldGFzaykpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gc3RhcnQgdGVzdCBmdW5jXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGFyZSBydW5uaW5nICovXFxuK1xcdHdoaWxlIChhdG9taWNfcmVhZChcXHUwMDI2dGVzdHNfcnVubmluZykgXFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xcbitcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuK1xcdFxcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xcbitcXHR9XFxuK1xcdGNvbXBsZXRlX2FsbChcXHUwMDI2Y29tcGxldGlvbjEpO1xcbitcXG4rXFx0LyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgaGF2ZSBjb21wbGV0ZWQgcGhhc2UgMSAqL1xcbitcXHR3aGlsZSAoYXRvbWljX3JlYWQoXFx1MDAyNnBoYXNlMV9jb21wbGV0ZSkgXFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xcbitcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuK1xcdFxcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xcbitcXHR9XFxuK1xcdGNvbXBsZXRlX2FsbChcXHUwMDI2Y29tcGxldGlvbjIpO1xcbitcXG4rXFx0LyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgaGF2ZSBjb21wbGV0ZWQgcGhhc2UgMiAqL1xcbitcXHR3aGlsZSAoYXRvbWljX3JlYWQoXFx1MDAyNnRlc3RzX3J1bm5pbmcpKSB7XFxuK1xcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcXG4rXFx0XFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XFxuK1xcdH1cXG4rXFx0Y29tcGxldGVfYWxsKFxcdTAwMjZjb21wbGV0aW9uMyk7XFxuK1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcXG4rXFx0XFx0a3RocmVhZF9zdG9wKHRlc3RbY3B1XS50YXNrKTtcXG4rXFxuK1xcdHByX2FsZXJ0KFxcXCIlcyglZCk6XFxcIiwgbmFtZSwgb3JkZXIpO1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xcbitcXHRcXHRzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBcXHUwMDI2dGVzdFtjcHVdO1xcbitcXG4rXFx0XFx0dGltZTEgPSB0LVxcdTAwM2VzdG9wMSAtIHQtXFx1MDAzZXN0YXJ0MTtcXG4rXFx0XFx0dGltZTIgPSB0LVxcdTAwM2VzdG9wMiAtIHQtXFx1MDAzZXN0YXJ0MjtcXG4rXFx0XFx0c3VtMSArPSB0aW1lMTtcXG4rXFx0XFx0c3VtMiArPSB0aW1lMjtcXG4rXFx0XFx0cHJfY29udChcXFwiICVkPSVsdVxcXCIsIGNwdSwgdGltZTEgLyBURVNUX0NPVU5UKTtcXG4rXFx0XFx0aWYgKHAyKVxcbitcXHRcXHRcXHRwcl9jb250KFxcXCIvJWx1XFxcIiwgdGltZTIgLyBURVNUX0NPVU5UKTtcXG4rXFx0fVxcbitcXHRwcl9jb250KFxcXCIgQXZlcmFnZT0lbHVcXFwiLCBzdW0xIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTtcXG4rXFx0aWYgKHAyKVxcbitcXHRcXHRwcl9jb250KFxcXCIvJWx1XFxcIiwgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XFxuK1xcdHByX2NvbnQoXFxcIlxcXFxuXFxcIik7XFxuK1xcdHNjaGVkdWxlX3RpbWVvdXQoMjAwKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBpbnQgcGFnZWFsbG9jX3Rlc3RfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHZvaWQgKip2ID0ga21hbGxvY19hcnJheShURVNUX0NPVU5ULCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XFxuK1xcdGludCByZW07XFxuK1xcdGludCBvcmRlcjtcXG4rXFxuK1xcdHByX2FsZXJ0KFxcXCJ0ZXN0IGluaXRcXFxcblxcXCIpO1xcbitcXG4rXFx0cHJfYWxlcnQoXFxcIlNpbmdsZSB0aHJlYWQgdGVzdGluZ1xcXFxuXFxcIik7XFxuK1xcdHByX2FsZXJ0KFxcXCI9PT09PT09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRwcl9hbGVydChcXFwiMS4gUmVwZWF0ZWRseSBhbGxvY2F0ZSB0aGVuIGZyZWUgdGVzdFxcXFxuXFxcIik7XFxuK1xcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUjsgb3JkZXIrKykge1xcbitcXHRcXHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRvcmRlcik7XFxuK1xcbitcXHRcXHRcXHRpZiAoIXApIHtcXG4rXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJDYW5ub3QgYWxsb2NhdGUgb3JkZXI9JWRcXFxcblxcXCIsIG9yZGVyKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdC8qIFRvdWNoIHBhZ2UgKi9cXG4rXFx0XFx0XFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMjIsIDQpO1xcbitcXHRcXHRcXHR2W2ldID0gcDtcXG4rXFx0XFx0fVxcbitcXHRcXHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0XFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XFxuK1xcbitcXHRcXHRwcl9hbGVydChcXFwiJWkgdGltZXMgYWxsb2NfcGFnZSgsJWQpIFxcXCIsIGksIG9yZGVyKTtcXG4rXFx0XFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFxcdTAwMjZyZW0pO1xcbitcXHRcXHRwcl9jb250KFxcXCItXFx1MDAzZSAlbGx1IGN5Y2xlcyBcXFwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcXG4rXFxuK1xcdFxcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpwID0gdltpXTtcXG4rXFxuK1xcdFxcdFxcdF9fZnJlZV9wYWdlcyhwLCBvcmRlcik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0XFx0cHJfY29udChcXFwiX19mcmVlX3BhZ2VzKCwlZClcXFwiLCBvcmRlcik7XFxuK1xcdFxcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcXHUwMDI2cmVtKTtcXG4rXFx0XFx0cHJfY29udChcXFwiLVxcdTAwM2UgJWxsdSBjeWNsZXNcXFxcblxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXHR9XFxuK1xcbitcXHRwcl9hbGVydChcXFwiMi4gYWxsb2MvZnJlZSB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0Zm9yIChvcmRlciA9IDA7IG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSOyBvcmRlcisrKSB7XFxuK1xcdFxcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgb3JkZXIpO1xcbitcXHRcXHRcXHRfX2ZyZWVfcGFnZXMocCwgb3JkZXIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRcXHR0aW1lID0gdGltZTIgLSB0aW1lMTtcXG4rXFxuK1xcdFxcdHByX2FsZXJ0KFxcXCIlaSB0aW1lcyBhbGxvYyggLCVkKS9mcmVlIFxcXCIsIGksIG9yZGVyKTtcXG4rXFx0XFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFxcdTAwMjZyZW0pO1xcbitcXHRcXHRwcl9jb250KFxcXCItXFx1MDAzZSAlbGx1IGN5Y2xlc1xcXFxuXFxcIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7XFxuK1xcdH1cXG4rXFx0a2ZyZWUodik7XFxuKyNpZmRlZiBDT05GSUdfU01QXFxuK1xcdHByX2luZm8oXFxcIkNvbmN1cnJlbnQgYWxsb2NzXFxcXG5cXFwiKTtcXG4rXFx0cHJfaW5mbyhcXFwiPT09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXIrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3QoYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEsXFxuK1xcdFxcdFxcdGFsbG9jX3RoZW5fZnJlZV90ZXN0X3AyLFxcbitcXHRcXHRcXHRvcmRlciwgXFxcIlBhZ2UgYWxsb2MgTiphbGxvYyBOKmZyZWVcXFwiKTtcXG4rXFx0fVxcbitcXHRwcl9pbmZvKFxcXCItLS0tRmFzdHBhdGgtLS1cXFxcblxcXCIpO1xcbitcXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXIrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3QoYWxsb2NfZnJlZV90ZXN0X3AxLCBOVUxMLFxcbitcXHRcXHRcXHRvcmRlciwgXFxcIlBhZ2UgTiooYWxsb2MgZnJlZSlcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cHJfaW5mbyhcXFwiUmVtb3RlIGZyZWUgdGVzdFxcXFxuXFxcIik7XFxuK1xcdHByX2luZm8oXFxcIj09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXIrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3QocmVtb3RlX2ZyZWVfdGVzdF9wMSxcXG4rXFx0XFx0XFx0XFx0cmVtb3RlX2ZyZWVfdGVzdF9wMixcXG4rXFx0XFx0XFx0b3JkZXIsIFxcXCJOKnJlbW90ZSBmcmVlXFxcIik7XFxuK1xcdH1cXG4rXFxuKyNlbmRpZlxcbitcXG4rXFx0cmV0dXJuIC1FQUdBSU47IC8qIEZhaWwgd2lsbCBkaXJlY3RseSB1bmxvYWQgdGhlIG1vZHVsZSAqL1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwYWdlYWxsb2NfdGVzdF9leGl0KHZvaWQpXFxuK3tcXG4rXFx0cHJfYWxlcnQoXFxcInRlc3QgZXhpdFxcXFxuXFxcIik7XFxuK31cXG4rXFxuK21vZHVsZV9pbml0KHBhZ2VhbGxvY190ZXN0X2luaXQpXFxuK21vZHVsZV9leGl0KHBhZ2VhbGxvY190ZXN0X2V4aXQpXFxuK1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkNocmlzdG9waCBMYW1ldGVyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwicGFnZSBhbGxvY2F0b3IgcGVyZm9ybWFuY2UgdGVzdFxcXCIpO1xcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9zbGFiLmMgYi9saWIvdGVzdF9zbGFiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE0M2IwZDczZGFhYjlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbGliL3Rlc3Rfc2xhYi5jXFxuQEAgLTAsMCArMSwzNzUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogVGVzdCBtb2R1bGUgZm9yIHN5bnRoZXRpYyBpbiBrZXJuZWwgc2xhYiBhbGxvY2F0b3IgdGVzdGluZy5cXG4rICpcXG4rICogVGhlIHRlc3QgaXMgdHJpZ2dlcmVkIGJ5IGxvYWRpbmcgdGhlIG1vZHVsZSAod2hpY2ggd2lsbCBmYWlsKS5cXG4rICpcXG4rICogKEMpIDIwMDkgTGludXggRm91bmRhdGlvbiBcXHUwMDNjY2xAZ2VudHdvLm9yZ1xcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvamlmZmllcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3RpbWV4LmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFRFU1RfQ09VTlQgMTAwMDBcXG4rXFxuKyNpZmRlZiBDT05GSUdfU01QXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuK1xcbitzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbitcXHRpbnQgY3B1O1xcbitcXHRpbnQgc2l6ZTtcXG4rXFx0aW50IGNvdW50O1xcbitcXHR2b2lkICoqdjtcXG4rXFx0dm9pZCAoKnRlc3RfcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XFxuK1xcdHZvaWQgKCp0ZXN0X3AyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0MTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdG9wMTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydDI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RvcDI7XFxuK30gdGVzdFtOUl9DUFVTXTtcXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHVzIFxcdTAwM2UgMCBhbmQgdGhlbiBhbGwgdGhlXFxuKyAqIG9iamVjdHMgbGF0ZXIgb24gY3B1IDBcXG4rICovXFxuK3N0YXRpYyB2b2lkIHJlbW90ZV9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogUGVyZm9ybSBubyBhbGxvY2F0aW9ucyBvbiBjcHUgMCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHR1OCAqcDtcXG4rXFxuK1xcdFxcdGlmIChzbXBfcHJvY2Vzc29yX2lkKCkpIHtcXG4rXFx0XFx0XFx0cCA9IGttYWxsb2ModC1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdC8qIFVzZSBvYmplY3QgKi9cXG4rXFx0XFx0XFx0KnAgPSAxNztcXG4rXFx0XFx0fSBlbHNlXFxuK1xcdFxcdFxcdHAgPSBOVUxMO1xcbitcXHRcXHR0LVxcdTAwM2V2W2ldID0gcDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdC8qIEFsbCBmcmVlcyBhcmUgY29tcGxldGVkIG9uIGNwdSB6ZXJvICovXFxuK1xcdGlmIChzbXBfcHJvY2Vzc29yX2lkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHRcXHR1OCAqcCA9IHRlc3RbY3B1XS52W2ldO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFwKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdCpwID0gMTY7XFxuK1xcdFxcdFxcdGtmcmVlKHApO1xcbitcXHRcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHUgMCBhbmQgZnJlZSB0aGVtIGltbWVkaWF0ZWx5IG9uIHRoZVxcbisgKiBvdGhlciBwcm9jZXNzb3JzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYWxsb2Nfbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXHRpbnQgY3B1O1xcbitcXHRjaGFyICpwO1xcbitcXG4rXFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xcbitcXHRcXHQvKiBDb25zdW1lciAqL1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQgLyBudW1fb25saW5lX2NwdXMoKTsgaSsrKSB7XFxuK1xcdFxcdFxcdGRvIHtcXG4rXFx0XFx0XFx0XFx0cCA9IHQtXFx1MDAzZXZbaV07XFxuK1xcdFxcdFxcdFxcdGlmICghcClcXG4rXFx0XFx0XFx0XFx0XFx0Y3B1X3JlbGF4KCk7XFxuK1xcdFxcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0XFx0KnAgPSAxNztcXG4rXFx0XFx0XFx0fSB3aGlsZSAoIXApO1xcbitcXHRcXHRcXHRrZnJlZShwKTtcXG4rXFx0XFx0XFx0dC1cXHUwMDNldltpXSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdC8qIFByb2R1Y2VyICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0LVxcdTAwM2Vjb3VudDsgaSsrKSB7XFxuK1xcdFxcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7XFxuK1xcdFxcdFxcdGlmIChjcHUpIHtcXG4rXFx0XFx0XFx0XFx0cCA9IGttYWxsb2ModC1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdFxcdC8qIFVzZSBvYmplY3QgKi9cXG4rXFx0XFx0XFx0XFx0KnAgPSAxNztcXG4rXFx0XFx0XFx0XFx0dGVzdFtjcHVdLnZbaV0gPSBwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgYW5kIGxhdGVyIGZyZWUgdGhlbSBhbGwgYWdhaW5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHQtXFx1MDAzZWNvdW50OyBpKyspIHtcXG4rXFx0XFx0dTggKnAgPSBrbWFsbG9jKHQtXFx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xcbitcXG4rXFx0XFx0KnAgPSAxNDtcXG4rXFx0XFx0dC1cXHUwMDNldltpXSA9IHA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga21hbGxvY19hbGxvY190aGVuX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHR1OCAqcCA9IHQtXFx1MDAzZXZbaV07XFxuK1xcbitcXHRcXHQqcCA9IDEzO1xcbitcXHRcXHRrZnJlZShwKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0dTggKnAgPSBrbWFsbG9jKHQtXFx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xcbitcXG4rXFx0XFx0KnAgPSAxMjtcXG4rXFx0XFx0a2ZyZWUocCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGF0b21pY190IHRlc3RzX3J1bm5pbmc7XFxuK3N0YXRpYyBhdG9taWNfdCBwaGFzZTFfY29tcGxldGU7XFxuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjEpO1xcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24yKTtcXG4rc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjb21wbGV0aW9uMyk7XFxuK1xcbitzdGF0aWMgaW50IHRlc3RfZnVuYyh2b2lkICpwcml2YXRlKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IHByaXZhdGU7XFxuK1xcdGNwdW1hc2tfdCBuZXdtYXNrID0gQ1BVX01BU0tfTk9ORTtcXG4rXFxuK1xcdGNwdW1hc2tfc2V0X2NwdSh0LVxcdTAwM2VjcHUsIFxcdTAwMjZuZXdtYXNrKTtcXG4rXFx0c2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgXFx1MDAyNm5ld21hc2spO1xcbitcXHR0LVxcdTAwM2V2ID0ga2NhbGxvYyh0LVxcdTAwM2Vjb3VudCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpO1xcbitcXG4rXFx0YXRvbWljX2luYyhcXHUwMDI2dGVzdHNfcnVubmluZyk7XFxuK1xcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNmNvbXBsZXRpb24xKTtcXG4rXFx0dC1cXHUwMDNlc3RhcnQxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHR0LVxcdTAwM2V0ZXN0X3AxKHQpO1xcbitcXHR0LVxcdTAwM2VzdG9wMSA9IGdldF9jeWNsZXMoKTtcXG4rXFx0YXRvbWljX2luYyhcXHUwMDI2cGhhc2UxX2NvbXBsZXRlKTtcXG4rXFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjIpO1xcbitcXHR0LVxcdTAwM2VzdGFydDIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdGlmICh0LVxcdTAwM2V0ZXN0X3AyKVxcbitcXHRcXHR0LVxcdTAwM2V0ZXN0X3AyKHQpO1xcbitcXHR0LVxcdTAwM2VzdG9wMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0YXRvbWljX2RlYyhcXHUwMDI2dGVzdHNfcnVubmluZyk7XFxuK1xcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNmNvbXBsZXRpb24zKTtcXG4rXFx0a2ZyZWUodC1cXHUwMDNldik7XFxuK1xcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XFxuK1xcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcXG4rXFx0XFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRvX2NvbmN1cnJlbnRfdGVzdCh2b2lkICgqcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcXG4rXFx0XFx0dm9pZCAoKnAyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksXFxuK1xcdFxcdGludCBzaXplLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZTEgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWUyID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdW0yID0gMDtcXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZwaGFzZTFfY29tcGxldGUsIDApO1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmNvbXBsZXRpb24xKTtcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjb21wbGV0aW9uMik7XFxuK1xcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjMpO1xcbitcXG4rXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcXG4rXFx0XFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXFx1MDAyNnRlc3RbY3B1XTtcXG4rXFxuK1xcdFxcdHQtXFx1MDAzZWNwdSA9IGNwdTtcXG4rXFx0XFx0dC1cXHUwMDNlY291bnQgPSBURVNUX0NPVU5UO1xcbitcXHRcXHR0LVxcdTAwM2V0ZXN0X3AxID0gcDE7XFxuK1xcdFxcdHQtXFx1MDAzZXRlc3RfcDIgPSBwMjtcXG4rXFx0XFx0dC1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdFxcdHQtXFx1MDAzZXRhc2sgPSBrdGhyZWFkX3J1bih0ZXN0X2Z1bmMsIHQsIFxcXCJ0ZXN0JWRcXFwiLCBjcHUpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHQtXFx1MDAzZXRhc2spKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHN0YXJ0IHRlc3QgZnVuY1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBhcmUgcnVubmluZyAqL1xcbitcXHR3aGlsZSAoYXRvbWljX3JlYWQoXFx1MDAyNnRlc3RzX3J1bm5pbmcpIFxcdTAwM2MgbnVtX29ubGluZV9jcHVzKCkpIHtcXG4rXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xcbitcXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcXG4rXFx0fVxcbitcXHRjb21wbGV0ZV9hbGwoXFx1MDAyNmNvbXBsZXRpb24xKTtcXG4rXFxuK1xcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDEgKi9cXG4rXFx0d2hpbGUgKGF0b21pY19yZWFkKFxcdTAwMjZwaGFzZTFfY29tcGxldGUpIFxcdTAwM2MgbnVtX29ubGluZV9jcHVzKCkpIHtcXG4rXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xcbitcXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcXG4rXFx0fVxcbitcXHRjb21wbGV0ZV9hbGwoXFx1MDAyNmNvbXBsZXRpb24yKTtcXG4rXFxuK1xcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDIgKi9cXG4rXFx0d2hpbGUgKGF0b21pY19yZWFkKFxcdTAwMjZ0ZXN0c19ydW5uaW5nKSkge1xcbitcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuK1xcdFxcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xcbitcXHR9XFxuK1xcdGNvbXBsZXRlX2FsbChcXHUwMDI2Y29tcGxldGlvbjMpO1xcbitcXG4rXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXFxuK1xcdFxcdGt0aHJlYWRfc3RvcCh0ZXN0W2NwdV0udGFzayk7XFxuK1xcbitcXHRwcl9hbGVydChcXFwiJXMoJWQpOlxcXCIsIG5hbWUsIHNpemUpO1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xcbitcXHRcXHRzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBcXHUwMDI2dGVzdFtjcHVdO1xcbitcXG4rXFx0XFx0dGltZTEgPSB0LVxcdTAwM2VzdG9wMSAtIHQtXFx1MDAzZXN0YXJ0MTtcXG4rXFx0XFx0dGltZTIgPSB0LVxcdTAwM2VzdG9wMiAtIHQtXFx1MDAzZXN0YXJ0MjtcXG4rXFx0XFx0c3VtMSArPSB0aW1lMTtcXG4rXFx0XFx0c3VtMiArPSB0aW1lMjtcXG4rXFx0XFx0cHJfY29udChcXFwiICVkPSVsdVxcXCIsIGNwdSwgdGltZTEgLyBURVNUX0NPVU5UKTtcXG4rXFx0XFx0aWYgKHAyKVxcbitcXHRcXHRcXHRwcl9jb250KFxcXCIvJWx1XFxcIiwgdGltZTIgLyBURVNUX0NPVU5UKTtcXG4rXFx0fVxcbitcXHRwcl9jb250KFxcXCIgQXZlcmFnZT0lbHVcXFwiLCBzdW0xIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTtcXG4rXFx0aWYgKHAyKVxcbitcXHRcXHRwcl9jb250KFxcXCIvJWx1XFxcIiwgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XFxuK1xcdHByX2NvbnQoXFxcIlxcXFxuXFxcIik7XFxuK1xcdHNjaGVkdWxlX3RpbWVvdXQoMjAwKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBpbnQgc2xhYl90ZXN0X2luaXQodm9pZClcXG4re1xcbitcXHR2b2lkICoqdiA9IGttYWxsb2NfYXJyYXkoVEVTVF9DT1VOVCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0Y3ljbGVzX3QgdGltZTEsIHRpbWUyLCB0aW1lO1xcbitcXHRpbnQgcmVtO1xcbitcXHRpbnQgc2l6ZTtcXG4rXFxuK1xcdHByX2FsZXJ0KFxcXCJ0ZXN0IGluaXRcXFxcblxcXCIpO1xcbitcXG4rXFx0cHJfYWxlcnQoXFxcIlNpbmdsZSB0aHJlYWQgdGVzdGluZ1xcXFxuXFxcIik7XFxuK1xcdHByX2FsZXJ0KFxcXCI9PT09PT09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRwcl9hbGVydChcXFwiMS4gS21hbGxvYzogUmVwZWF0ZWRseSBhbGxvY2F0ZSB0aGVuIGZyZWUgdGVzdFxcXFxuXFxcIik7XFxuK1xcdGZvciAoc2l6ZSA9IDg7IHNpemUgXFx1MDAzYz0gUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIDI7IHNpemUgXFx1MDAzY1xcdTAwM2M9IDEpIHtcXG4rXFx0XFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0XFx0dTggKnAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xcbitcXG4rXFx0XFx0XFx0KnAgPSAyMjtcXG4rXFx0XFx0XFx0dltpXSA9IHA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0XFx0cHJfYWxlcnQoXFxcIiVpIHRpbWVzIGttYWxsb2MoJWQpIFxcXCIsIGksIHNpemUpO1xcbitcXHRcXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXFx1MDAyNnJlbSk7XFxuK1xcdFxcdHByX2NvbnQoXFxcIi1cXHUwMDNlICVsbHUgY3ljbGVzIFxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXG4rXFx0XFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0XFx0dTggKnAgPSB2W2ldO1xcbitcXG4rXFx0XFx0XFx0KnAgPSAyMztcXG4rXFx0XFx0XFx0a2ZyZWUocCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0XFx0cHJfY29udChcXFwia2ZyZWUgXFxcIik7XFxuK1xcdFxcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcXHUwMDI2cmVtKTtcXG4rXFx0XFx0cHJfY29udChcXFwiLVxcdTAwM2UgJWxsdSBjeWNsZXNcXFxcblxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXHR9XFxuK1xcbitcXHRwcl9hbGVydChcXFwiMi4gS21hbGxvYzogYWxsb2MvZnJlZSB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0Zm9yIChzaXplID0gODsgc2l6ZSBcXHUwMDNjPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgMjsgc2l6ZSBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbitcXHRcXHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRcXHR1OCAqcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcbitcXHRcXHRcXHRrZnJlZShwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0XFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XFxuK1xcbitcXHRcXHRwcl9hbGVydChcXFwiJWkgdGltZXMga21hbGxvYyglZCkva2ZyZWUgXFxcIiwgaSwgc2l6ZSk7XFxuK1xcdFxcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcXHUwMDI2cmVtKTtcXG4rXFx0XFx0cHJfY29udChcXFwiLVxcdTAwM2UgJWxsdSBjeWNsZXNcXFxcblxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXHR9XFxuK1xcdGtmcmVlKHYpO1xcbisjaWZkZWYgQ09ORklHX1NNUFxcbitcXHRwcl9pbmZvKFxcXCJDb25jdXJyZW50IGFsbG9jc1xcXFxuXFxcIik7XFxuK1xcdHByX2luZm8oXFxcIj09PT09PT09PT09PT09PT09XFxcXG5cXFwiKTtcXG4rXFx0Zm9yIChpID0gMzsgaSBcXHUwMDNjPSBQQUdFX1NISUZUOyBpKyspIHtcXG4rXFx0XFx0ZG9fY29uY3VycmVudF90ZXN0KGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEsXFxuK1xcdFxcdFxcdGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIsXFxuK1xcdFxcdFxcdDEgXFx1MDAzY1xcdTAwM2MgaSwgXFxcIkttYWxsb2MgTiphbGxvYyBOKmZyZWVcXFwiKTtcXG4rXFx0fVxcbitcXHRmb3IgKGkgPSAzOyBpIFxcdTAwM2M9IFBBR0VfU0hJRlQ7IGkrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3Qoa21hbGxvY19hbGxvY19mcmVlX3Rlc3RfcDEsIE5VTEwsXFxuK1xcdFxcdFxcdDEgXFx1MDAzY1xcdTAwM2MgaSwgXFxcIkttYWxsb2MgTiooYWxsb2MgZnJlZSlcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cHJfaW5mbyhcXFwiUmVtb3RlIGZyZWUgdGVzdFxcXFxuXFxcIik7XFxuK1xcdHByX2luZm8oXFxcIj09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRmb3IgKGkgPSAzOyBpIFxcdTAwM2M9IFBBR0VfU0hJRlQ7IGkrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3QocmVtb3RlX2ZyZWVfdGVzdF9wMSxcXG4rXFx0XFx0XFx0XFx0cmVtb3RlX2ZyZWVfdGVzdF9wMixcXG4rXFx0XFx0XFx0MSBcXHUwMDNjXFx1MDAzYyBpLCBcXFwiTipyZW1vdGUgZnJlZVxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRwcl9pbmZvKFxcXCIxIGFsbG9jIE4gZnJlZSB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0cHJfaW5mbyhcXFwiPT09PT09PT09PT09PT09PT09PVxcXFxuXFxcIik7XFxuK1xcdGZvciAoaSA9IDM7IGkgXFx1MDAzYz0gUEFHRV9TSElGVDsgaSsrKSB7XFxuK1xcdFxcdGRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY19uX2ZyZWVfdGVzdF9wMSxcXG4rXFx0XFx0XFx0XFx0TlVMTCxcXG4rXFx0XFx0XFx0MSBcXHUwMDNjXFx1MDAzYyBpLCBcXFwiMSBhbGxvYyBOIGZyZWVcXFwiKTtcXG4rXFx0fVxcbitcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi9cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2xhYl90ZXN0X2V4aXQodm9pZClcXG4re1xcbitcXHRwcl9hbGVydChcXFwidGVzdCBleGl0XFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rbW9kdWxlX2luaXQoc2xhYl90ZXN0X2luaXQpXFxuK21vZHVsZV9leGl0KHNsYWJfdGVzdF9leGl0KVxcbitcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJDaHJpc3RvcGggTGFtZXRlciBhbmQgTWF0aGlldSBEZXNub3llcnNcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJTTEFCIHRlc3RcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfdm1zdGF0LmMgYi9saWIvdGVzdF92bXN0YXQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjYzZjQzOWFiOWQyYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9saWIvdGVzdF92bXN0YXQuY1xcbkBAIC0wLDAgKzEsOTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogVGVzdCBtb2R1bGUgZm9yIGluLWtlcm5lbCBzeW50aGV0aWMgdm0gc3RhdGlzdGljcyBwZXJmb3JtYW5jZS5cXG4rICpcXG4rICogZXhlY3V0ZVxcbisgKlxcbisgKlxcdG1vZHByb2JlIHRlc3Rfdm1zdGF0XFxuKyAqXFxuKyAqIHRvIHJ1biB0aGlzIHRlc3RcXG4rICpcXG4rICogKEMpIDIwMDkgTGludXggRm91bmRhdGlvbiwgQ2hyaXN0b3BoIExhbWV0ZXIgXFx1MDAzY2NsQGdlbnR3by5vcmdcXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vdGltZXguaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMFxcbitcXG4rc3RhdGljIGludCB2bXN0YXRfdGVzdF9pbml0KHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGN5Y2xlc190IHRpbWUxLCB0aW1lMiwgdGltZTtcXG4rXFx0aW50IHJlbTtcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpO1xcbitcXG4rXFx0cHJfYWxlcnQoXFxcIlZNc3RhdCB0ZXN0aW5nXFxcXG5cXFwiKTtcXG4rXFx0cHJfYWxlcnQoXFxcIj09PT09PT09PT09PT09PT09PT09PVxcXFxuXFxcIik7XFxuK1xcdHByX2FsZXJ0KFxcXCIxLiBpbmNfem9uZV9wYWdlX3N0YXRlKCkgdGhlbiBkZWNfem9uZV9wYWdlX3N0YXRlKClcXFxcblxcXCIpO1xcbitcXHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKylcXG4rXFx0XFx0aW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XFxuK1xcbitcXHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XFxuK1xcbitcXHRwcl9hbGVydChcXFwiJWkgdGltZXMgaW5jX3pvbmVfcGFnZV9zdGF0ZSgpIFxcXCIsIGkpO1xcbitcXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXFx1MDAyNnJlbSk7XFxuK1xcdHByX2NvbnQoXFxcIi1cXHUwMDNlICVsbHUgY3ljbGVzIFxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXG4rXFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspXFxuK1xcdFxcdF9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XFxuK1xcbitcXHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XFxuK1xcbitcXHRwcl9jb250KFxcXCJfX2RlY196X3BfcygpIFxcXCIpO1xcbitcXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXFx1MDAyNnJlbSk7XFxuK1xcdHByX2NvbnQoXFxcIi1cXHUwMDNlICVsbHUgY3ljbGVzXFxcXG5cXFwiLCAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7XFxuK1xcbitcXHRwcl9hbGVydChcXFwiMi4gaW5jX3pvbmVfcGFnZV9zdGF0ZSgpL2RlY196b25lX3BhZ2Vfc3RhdGUoKVxcXFxuXFxcIik7XFxuK1xcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XFxuK1xcdFxcdGluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpO1xcbitcXHRcXHRkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZSRUVfQ01BX1BBR0VTKTtcXG4rXFx0fVxcbitcXG4rXFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0cHJfYWxlcnQoXFxcIiVpIHRpbWVzIGluYy9kZWMgXFxcIiwgaSk7XFxuK1xcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcXHUwMDI2cmVtKTtcXG4rXFx0cHJfY29udChcXFwiLVxcdTAwM2UgJWxsdSBjeWNsZXNcXFxcblxcXCIsICAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcXG4rXFxuK1xcdHByX2FsZXJ0KFxcXCIzLiBjb3VudF92bV9ldmVudCgpXFxcXG5cXFwiKTtcXG4rXFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspXFxuK1xcdFxcdGNvdW50X3ZtX2V2ZW50KFNMQUJTX1NDQU5ORUQpO1xcbitcXG4rXFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0Y291bnRfdm1fZXZlbnRzKFNMQUJTX1NDQU5ORUQsIC1URVNUX0NPVU5UKTtcXG4rXFx0cHJfYWxlcnQoXFxcIiVpIGNvdW50X3ZtX2V2ZW50cyBcXFwiLCBpKTtcXG4rXFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFxcdTAwMjZyZW0pO1xcbitcXHRwcl9jb250KFxcXCItXFx1MDAzZSAlbGx1IGN5Y2xlc1xcXFxuXFxcIiwgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rXFx0cmV0dXJuIC1FQUdBSU47IC8qIEZhaWwgd2lsbCBkaXJlY3RseSB1bmxvYWQgdGhlIG1vZHVsZSAqL1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2bXN0YXRfdGVzdF9leGl0KHZvaWQpXFxuK3tcXG4rXFx0cHJfYWxlcnQoXFxcInRlc3QgZXhpdFxcXFxuXFxcIik7XFxuK31cXG4rXFxuK21vZHVsZV9pbml0KHZtc3RhdF90ZXN0X2luaXQpXFxuK21vZHVsZV9leGl0KHZtc3RhdF90ZXN0X2V4aXQpXFxuK1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkNocmlzdG9waCBMYW1ldGVyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiVk0gc3RhdGlzdGljcyB0ZXN0XFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjAwOjAyLjYwNTExNjQ5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc5NTEzNjY5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MDhmZjY0MzkzNWI4YzM2YTM2NDBlZjY2NGExZmU3N2RmZDEwNTRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzowMDowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWdcbmluZGV4IDEyNDRkY2FjMjI5NGEuLjcwODczYWFjNjc1ZmEgMTAwNjQ0XG4tLS0gYS9saWIvS2NvbmZpZy5kZWJ1Z1xuKysrIGIvbGliL0tjb25maWcuZGVidWdcbkBAIC0zNDI3LDYgKzM0MjcsMzYgQEAgY29uZmlnIFRFU1RfS0VYRUNfSEFORE9WRVJcbiBcbiBcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbitjb25maWcgVEVTVF9WTVNUQVRcbitcdHRyaXN0YXRlIFwiVk0gU3RhdGlzdGljcyBCZW5jaG1hcmtcIlxuK1x0ZGVmYXVsdCBuXG4rXHRoZWxwXG4rXHQgIEEgc3ludGhldGljIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIFZNIHN0YXRpc3RpY3MsXG4rXHQgIHVzZWZ1bCB0byBhbmFseXplIGFueSBpbXByb3ZlbWVudHMgb3IgcmVncmVzc2lvbnMgaW4gZnVuY3Rpb25zIHRoYXRcbitcdCAgYXJlIGZyZXF1ZW50bHkgdXNlZCBpbiBob3QgY29kZSBwYXRocy5cbitcbitcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbitjb25maWcgVEVTVF9TTEFCXG4rXHR0cmlzdGF0ZSBcIlNsYWIgQWxsb2NhdG9yIEJlbmNobWFya1wiXG4rXHRkZWZhdWx0IG5cbitcdGhlbHBcbitcdCAgQSBzeW50aGV0aWMgYmVuY2htYXJrIHRoYXQgbWVhc3VyZXMgc2xhYiBhbGxvY2F0b3IgcGVyZm9ybWFuY2UsXG4rXHQgIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzaW5nbGUgdGhyZWFkIHRlc3RpbmcgYnkgcmVwZWF0ZWRseVxuK1x0ICBhbGxvY2F0aW5nIHRoZW4gZnJlZWluZyBtZW1vcnkgYW5kIGNvbmN1cnJlbnQgb3IgcmVtb3RlIGFsbG9jYXRpb25zLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuK2NvbmZpZyBURVNUX1BBR0VBTExPQ1xuK1x0dHJpc3RhdGUgXCJQYWdlIEFsbG9jYXRvciBCZW5jaG1hcmtcIlxuK1x0ZGVmYXVsdCBuXG4rXHRoZWxwXG4rXHQgIEEgYmVuY2htYXJrIG1lYXN1cmluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdG9yLCB1c2VmdWxcbitcdCAgdG8gYW5hbHl6ZSBhbnkgaW1wcm92ZW1lbnRzIG9yIHJlZ3Jlc3Npb25zIHdoZW4gcmVwZWF0ZWRseSBhbGxvY2F0aW5nXG4rXHQgIGFuZCBmcmVlaW5nIG1lbW9yeSBhcyB3ZWxsIGFzIGNvbmN1cnJlbnQgYW5kIHJlbW90ZSBhbGxvY2F0aW9ucy5cbitcbitcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbiBjb25maWcgUkFURUxJTUlUX0tVTklUX1RFU1RcbiBcdHRyaXN0YXRlIFwiS1VuaXQgVGVzdCBmb3IgY29ycmVjdG5lc3MgYW5kIHN0cmVzcyBvZiByYXRlbGltaXRcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gXHRkZXBlbmRzIG9uIEtVTklUXG5kaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlXG5pbmRleCA3Zjc1Y2M2ZWRmOTRhLi4xN2MxNjRlMTQ1YWQ0IDEwMDY0NFxuLS0tIGEvbGliL01ha2VmaWxlXG4rKysgYi9saWIvTWFrZWZpbGVcbkBAIC0xMDUsNiArMTA1LDkgQEAgb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgKz0gdGVzdF9mcmVlX3BhZ2VzLm9cbiBvYmotJChDT05GSUdfVEVTVF9SRUZfVFJBQ0tFUikgKz0gdGVzdF9yZWZfdHJhY2tlci5vXG4gb2JqLSQoQ09ORklHX1RFU1RfT0JKUE9PTCkgKz0gdGVzdF9vYmpwb29sLm9cbiBvYmotJChDT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUikgKz0gdGVzdF9raG8ub1xuK29iai0kKENPTkZJR19URVNUX1ZNU1RBVCkgKz0gdGVzdF92bXN0YXQub1xuK29iai0kKENPTkZJR19URVNUX1NMQUIpICs9IHRlc3Rfc2xhYi5vXG4rb2JqLSQoQ09ORklHX1RFU1RfUEFHRUFMTE9DKSArPSB0ZXN0X3BhZ2VhbGxvYy5vXG4gXG4gb2JqLSQoQ09ORklHX1RFU1RfRlBVKSArPSB0ZXN0X2ZwdS5vXG4gdGVzdF9mcHUteSA6PSB0ZXN0X2ZwdV9nbHVlLm8gdGVzdF9mcHVfaW1wbC5vXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfcGFnZWFsbG9jLmMgYi9saWIvdGVzdF9wYWdlYWxsb2MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMwNTE0ZGY1MmM1YjBcbi0tLSAvZGV2L251bGxcbisrKyBiL2xpYi90ZXN0X3BhZ2VhbGxvYy5jXG5AQCAtMCwwICsxLDMzNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBUZXN0IG1vZHVsZSBmb3IgaW4ga2VybmVsIHN5bnRoZXRpYyBwYWdlIGFsbG9jYXRvciB0ZXN0aW5nLlxuKyAqXG4rICogQ29tcGlsZWQgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgbmVlZHMgdG8gYmUgbG9hZGVkIHRvIHJ1bi5cbisgKlxuKyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24sIENocmlzdG9waCBMYW1ldGVyIFx1MDAzY2NsQGdlbnR3by5vcmdcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vdGltZXguaFx1MDAzZVxuK1xuKyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwXG4rXG4rI2RlZmluZSBDT05DVVJSRU5UX01BWF9PUkRFUiA2XG4rXG4rI2lmZGVmIENPTkZJR19TTVBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbitcbitzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbitcdGludCBjcHU7XG4rXHRpbnQgb3JkZXI7XG4rXHRpbnQgY291bnQ7XG4rXHRzdHJ1Y3QgcGFnZSAqKnY7XG4rXHR2b2lkICgqdGVzdF9wMSkoc3RydWN0IHRlc3Rfc3RydWN0ICp0KTtcbitcdHZvaWQgKCp0ZXN0X3AyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydDE7XG4rXHR1bnNpZ25lZCBsb25nIHN0b3AxO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydDI7XG4rXHR1bnNpZ25lZCBsb25nIHN0b3AyO1xuK30gdGVzdFtOUl9DUFVTXTtcbitcbisvKlxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHVzIFx1MDAzZSAwIGFuZCB0aGVuIGFsbCB0aGVcbisgKiBvYmplY3RzIGxhdGVyIG9uIGNwdSAwXG4rICovXG4rc3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHQvKiBQZXJmb3JtIG5vIGFsbG9jYXRpb25zIG9uIGNwdSAwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0LVx1MDAzZWNvdW50OyBpKyspIHtcbitcdFx0c3RydWN0IHBhZ2UgKnA7XG4rXG4rXHRcdGlmIChzbXBfcHJvY2Vzc29yX2lkKCkpIHtcbitcdFx0XHRwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtXHUwMDNlb3JkZXIpO1xuK1x0XHRcdC8qIFVzZSBvYmplY3QgKi9cbitcdFx0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAxNywgNCk7XG4rXHRcdH0gZWxzZVxuK1x0XHRcdHAgPSBOVUxMO1xuK1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcdGludCBjcHU7XG4rXG4rXHQvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqL1xuK1x0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpwID0gdGVzdFtjcHVdLnZbaV07XG4rXG4rXHRcdFx0aWYgKCFwKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0X19mcmVlX3BhZ2VzKHAsIHQtXHUwMDNlb3JkZXIpO1xuK1x0XHR9XG4rfVxuK1xuKy8qXG4rICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIGFuZCBsYXRlciBmcmVlIHRoZW0gYWxsIGFnYWluXG4rICovXG4rc3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdC1cdTAwM2Vjb3VudDsgaSsrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtXHUwMDNlb3JkZXIpO1xuK1xuK1x0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAxNCwgNCk7XG4rXHRcdHQtXHUwMDNldltpXSA9IHA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFsbG9jX3RoZW5fZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcCA9IHQtXHUwMDNldltpXTtcbitcbitcdFx0X19mcmVlX3BhZ2VzKHAsIHQtXHUwMDNlb3JkZXIpO1xuK1x0fVxuK31cbitcbisvKlxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cy4gRnJlZSB0aGVtIGltbWVkaWF0ZWx5LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGFsbG9jX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcbitcdFx0c3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC1cdTAwM2VvcmRlcik7XG4rXG4rXHRcdG1lbXNldChwYWdlX2FkZHJlc3MocCksIDEyLCA0KTtcbitcdFx0X19mcmVlX3BhZ2VzKHAsIHQtXHUwMDNlb3JkZXIpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYXRvbWljX3QgdGVzdHNfcnVubmluZztcbitzdGF0aWMgYXRvbWljX3QgcGhhc2UxX2NvbXBsZXRlO1xuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjEpO1xuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjIpO1xuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjMpO1xuK1xuK3N0YXRpYyBpbnQgdGVzdF9mdW5jKHZvaWQgKnByaXZhdGUpXG4re1xuK1x0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gcHJpdmF0ZTtcbitcdGNwdW1hc2tfdCBuZXdtYXNrID0gQ1BVX01BU0tfTk9ORTtcbitcbitcdGNwdW1hc2tfc2V0X2NwdSh0LVx1MDAzZWNwdSwgXHUwMDI2bmV3bWFzayk7XG4rXHRzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBcdTAwMjZuZXdtYXNrKTtcbitcdHQtXHUwMDNldiA9IGttYWxsb2NfYXJyYXkodC1cdTAwM2Vjb3VudCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTtcbitcbitcdGF0b21pY19pbmMoXHUwMDI2dGVzdHNfcnVubmluZyk7XG4rXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcdHQtXHUwMDNlc3RhcnQxID0gZ2V0X2N5Y2xlcygpO1xuK1x0dC1cdTAwM2V0ZXN0X3AxKHQpO1xuK1x0dC1cdTAwM2VzdG9wMSA9IGdldF9jeWNsZXMoKTtcbitcdGF0b21pY19pbmMoXHUwMDI2cGhhc2UxX2NvbXBsZXRlKTtcbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjIpO1xuK1x0dC1cdTAwM2VzdGFydDIgPSBnZXRfY3ljbGVzKCk7XG4rXHRpZiAodC1cdTAwM2V0ZXN0X3AyKVxuK1x0XHR0LVx1MDAzZXRlc3RfcDIodCk7XG4rXHR0LVx1MDAzZXN0b3AyID0gZ2V0X2N5Y2xlcygpO1xuK1x0YXRvbWljX2RlYyhcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjMpO1xuK1x0a2ZyZWUodC1cdTAwM2V2KTtcbitcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbitcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLFxuK1x0XHR2b2lkICgqcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcbitcdFx0aW50IG9yZGVyLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGludCBjcHU7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWUxID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgdGltZTIgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgc3VtMiA9IDA7XG4rXG4rXHRhdG9taWNfc2V0KFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xuK1x0YXRvbWljX3NldChcdTAwMjZwaGFzZTFfY29tcGxldGUsIDApO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMik7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjMpO1xuK1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbitcdFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXHUwMDI2dGVzdFtjcHVdO1xuK1xuK1x0XHR0LVx1MDAzZWNwdSA9IGNwdTtcbitcdFx0dC1cdTAwM2Vjb3VudCA9IFRFU1RfQ09VTlQ7XG4rXHRcdHQtXHUwMDNldGVzdF9wMSA9IHAxO1xuK1x0XHR0LVx1MDAzZXRlc3RfcDIgPSBwMjtcbitcdFx0dC1cdTAwM2VvcmRlciA9IG9yZGVyO1xuK1x0XHR0LVx1MDAzZXRhc2sgPSBrdGhyZWFkX3J1bih0ZXN0X2Z1bmMsIHQsIFwidGVzdCVkXCIsIGNwdSk7XG4rXHRcdGlmIChJU19FUlIodC1cdTAwM2V0YXNrKSkge1xuK1x0XHRcdHByX2VycihcIkZhaWxlZCB0byBzdGFydCB0ZXN0IGZ1bmNcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBhcmUgcnVubmluZyAqL1xuK1x0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNnRlc3RzX3J1bm5pbmcpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcbitcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDEgKi9cbitcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZwaGFzZTFfY29tcGxldGUpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24yKTtcbitcbitcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDIgKi9cbitcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZ0ZXN0c19ydW5uaW5nKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24zKTtcbitcbitcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuK1x0XHRrdGhyZWFkX3N0b3AodGVzdFtjcHVdLnRhc2spO1xuK1xuK1x0cHJfYWxlcnQoXCIlcyglZCk6XCIsIG5hbWUsIG9yZGVyKTtcbitcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7XG4rXHRcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IFx1MDAyNnRlc3RbY3B1XTtcbitcbitcdFx0dGltZTEgPSB0LVx1MDAzZXN0b3AxIC0gdC1cdTAwM2VzdGFydDE7XG4rXHRcdHRpbWUyID0gdC1cdTAwM2VzdG9wMiAtIHQtXHUwMDNlc3RhcnQyO1xuK1x0XHRzdW0xICs9IHRpbWUxO1xuK1x0XHRzdW0yICs9IHRpbWUyO1xuK1x0XHRwcl9jb250KFwiICVkPSVsdVwiLCBjcHUsIHRpbWUxIC8gVEVTVF9DT1VOVCk7XG4rXHRcdGlmIChwMilcbitcdFx0XHRwcl9jb250KFwiLyVsdVwiLCB0aW1lMiAvIFRFU1RfQ09VTlQpO1xuK1x0fVxuK1x0cHJfY29udChcIiBBdmVyYWdlPSVsdVwiLCBzdW0xIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTtcbitcdGlmIChwMilcbitcdFx0cHJfY29udChcIi8lbHVcIiwgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XG4rXHRwcl9jb250KFwiXFxuXCIpO1xuK1x0c2NoZWR1bGVfdGltZW91dCgyMDApO1xuK31cbisjZW5kaWZcbitcbitzdGF0aWMgaW50IHBhZ2VhbGxvY190ZXN0X2luaXQodm9pZClcbit7XG4rXHR2b2lkICoqdiA9IGttYWxsb2NfYXJyYXkoVEVTVF9DT1VOVCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XG4rXHRpbnQgcmVtO1xuK1x0aW50IG9yZGVyO1xuK1xuK1x0cHJfYWxlcnQoXCJ0ZXN0IGluaXRcXG5cIik7XG4rXG4rXHRwcl9hbGVydChcIlNpbmdsZSB0aHJlYWQgdGVzdGluZ1xcblwiKTtcbitcdHByX2FsZXJ0KFwiPT09PT09PT09PT09PT09PT09PT09XFxuXCIpO1xuK1x0cHJfYWxlcnQoXCIxLiBSZXBlYXRlZGx5IGFsbG9jYXRlIHRoZW4gZnJlZSB0ZXN0XFxuXCIpO1xuK1x0Zm9yIChvcmRlciA9IDA7IG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVI7IG9yZGVyKyspIHtcbitcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsXG4rXHRcdFx0XHRcdFx0b3JkZXIpO1xuK1xuK1x0XHRcdGlmICghcCkge1xuK1x0XHRcdFx0cHJfZXJyKFwiQ2Fubm90IGFsbG9jYXRlIG9yZGVyPSVkXFxuXCIsIG9yZGVyKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKiBUb3VjaCBwYWdlICovXG4rXHRcdFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMjIsIDQpO1xuK1x0XHRcdHZbaV0gPSBwO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfYWxlcnQoXCIlaSB0aW1lcyBhbGxvY19wYWdlKCwlZCkgXCIsIGksIG9yZGVyKTtcbitcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzIFwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcbitcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpwID0gdltpXTtcbitcbitcdFx0XHRfX2ZyZWVfcGFnZXMocCwgb3JkZXIpO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfY29udChcIl9fZnJlZV9wYWdlcygsJWQpXCIsIG9yZGVyKTtcbitcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzXFxuXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuK1x0fVxuK1xuK1x0cHJfYWxlcnQoXCIyLiBhbGxvYy9mcmVlIHRlc3RcXG5cIik7XG4rXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUjsgb3JkZXIrKykge1xuK1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCxcbitcdFx0XHRcdFx0XHQgICAgIG9yZGVyKTtcbitcdFx0XHRfX2ZyZWVfcGFnZXMocCwgb3JkZXIpO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfYWxlcnQoXCIlaSB0aW1lcyBhbGxvYyggLCVkKS9mcmVlIFwiLCBpLCBvcmRlcik7XG4rXHRcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuK1x0XHRwcl9jb250KFwiLVx1MDAzZSAlbGx1IGN5Y2xlc1xcblwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcdH1cbitcdGtmcmVlKHYpO1xuKyNpZmRlZiBDT05GSUdfU01QXG4rXHRwcl9pbmZvKFwiQ29uY3VycmVudCBhbGxvY3NcXG5cIik7XG4rXHRwcl9pbmZvKFwiPT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjIENPTkNVUlJFTlRfTUFYX09SREVSOyBvcmRlcisrKSB7XG4rXHRcdGRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY190aGVuX2ZyZWVfdGVzdF9wMSxcbitcdFx0XHRhbGxvY190aGVuX2ZyZWVfdGVzdF9wMixcbitcdFx0XHRvcmRlciwgXCJQYWdlIGFsbG9jIE4qYWxsb2MgTipmcmVlXCIpO1xuK1x0fVxuK1x0cHJfaW5mbyhcIi0tLS1GYXN0cGF0aC0tLVxcblwiKTtcbitcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgQ09OQ1VSUkVOVF9NQVhfT1JERVI7IG9yZGVyKyspIHtcbitcdFx0ZG9fY29uY3VycmVudF90ZXN0KGFsbG9jX2ZyZWVfdGVzdF9wMSwgTlVMTCxcbitcdFx0XHRvcmRlciwgXCJQYWdlIE4qKGFsbG9jIGZyZWUpXCIpO1xuK1x0fVxuK1xuK1x0cHJfaW5mbyhcIlJlbW90ZSBmcmVlIHRlc3RcXG5cIik7XG4rXHRwcl9pbmZvKFwiPT09PT09PT09PT09PT09PVxcblwiKTtcbitcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgQ09OQ1VSUkVOVF9NQVhfT1JERVI7IG9yZGVyKyspIHtcbitcdFx0ZG9fY29uY3VycmVudF90ZXN0KHJlbW90ZV9mcmVlX3Rlc3RfcDEsXG4rXHRcdFx0XHRyZW1vdGVfZnJlZV90ZXN0X3AyLFxuK1x0XHRcdG9yZGVyLCBcIk4qcmVtb3RlIGZyZWVcIik7XG4rXHR9XG4rXG4rI2VuZGlmXG4rXG4rXHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBhZ2VhbGxvY190ZXN0X2V4aXQodm9pZClcbit7XG4rXHRwcl9hbGVydChcInRlc3QgZXhpdFxcblwiKTtcbit9XG4rXG4rbW9kdWxlX2luaXQocGFnZWFsbG9jX3Rlc3RfaW5pdClcbittb2R1bGVfZXhpdChwYWdlYWxsb2NfdGVzdF9leGl0KVxuK1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJDaHJpc3RvcGggTGFtZXRlclwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJwYWdlIGFsbG9jYXRvciBwZXJmb3JtYW5jZSB0ZXN0XCIpO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3NsYWIuYyBiL2xpYi90ZXN0X3NsYWIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE0M2IwZDczZGFhYjlcbi0tLSAvZGV2L251bGxcbisrKyBiL2xpYi90ZXN0X3NsYWIuY1xuQEAgLTAsMCArMSwzNzUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogVGVzdCBtb2R1bGUgZm9yIHN5bnRoZXRpYyBpbiBrZXJuZWwgc2xhYiBhbGxvY2F0b3IgdGVzdGluZy5cbisgKlxuKyAqIFRoZSB0ZXN0IGlzIHRyaWdnZXJlZCBieSBsb2FkaW5nIHRoZSBtb2R1bGUgKHdoaWNoIHdpbGwgZmFpbCkuXG4rICpcbisgKiAoQykgMjAwOSBMaW51eCBGb3VuZGF0aW9uIFx1MDAzY2NsQGdlbnR3by5vcmdcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vdGltZXguaFx1MDAzZVxuK1xuKyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMFxuK1xuKyNpZmRlZiBDT05GSUdfU01QXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4rXG4rc3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCB7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4rXHRpbnQgY3B1O1xuK1x0aW50IHNpemU7XG4rXHRpbnQgY291bnQ7XG4rXHR2b2lkICoqdjtcbitcdHZvaWQgKCp0ZXN0X3AxKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpO1xuK1x0dm9pZCAoKnRlc3RfcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0MTtcbitcdHVuc2lnbmVkIGxvbmcgc3RvcDE7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0MjtcbitcdHVuc2lnbmVkIGxvbmcgc3RvcDI7XG4rfSB0ZXN0W05SX0NQVVNdO1xuK1xuKy8qXG4rICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdXMgXHUwMDNlIDAgYW5kIHRoZW4gYWxsIHRoZVxuKyAqIG9iamVjdHMgbGF0ZXIgb24gY3B1IDBcbisgKi9cbitzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qIFBlcmZvcm0gbm8gYWxsb2NhdGlvbnMgb24gY3B1IDAgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHR1OCAqcDtcbitcbitcdFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xuK1x0XHRcdHAgPSBrbWFsbG9jKHQtXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0LyogVXNlIG9iamVjdCAqL1xuK1x0XHRcdCpwID0gMTc7XG4rXHRcdH0gZWxzZVxuK1x0XHRcdHAgPSBOVUxMO1xuK1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcdGludCBjcHU7XG4rXG4rXHQvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqL1xuK1x0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHRcdHU4ICpwID0gdGVzdFtjcHVdLnZbaV07XG4rXG4rXHRcdFx0aWYgKCFwKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0KnAgPSAxNjtcbitcdFx0XHRrZnJlZShwKTtcbitcdFx0fVxuK31cbitcbisvKlxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHUgMCBhbmQgZnJlZSB0aGVtIGltbWVkaWF0ZWx5IG9uIHRoZVxuKyAqIG90aGVyIHByb2Nlc3NvcnMuXG4rICovXG4rc3RhdGljIHZvaWQgYWxsb2Nfbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuK3tcbitcdGludCBpO1xuK1x0aW50IGNwdTtcbitcdGNoYXIgKnA7XG4rXG4rXHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKSB7XG4rXHRcdC8qIENvbnN1bWVyICovXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQgLyBudW1fb25saW5lX2NwdXMoKTsgaSsrKSB7XG4rXHRcdFx0ZG8ge1xuK1x0XHRcdFx0cCA9IHQtXHUwMDNldltpXTtcbitcdFx0XHRcdGlmICghcClcbitcdFx0XHRcdFx0Y3B1X3JlbGF4KCk7XG4rXHRcdFx0XHRlbHNlXG4rXHRcdFx0XHRcdCpwID0gMTc7XG4rXHRcdFx0fSB3aGlsZSAoIXApO1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHRcdHQtXHUwMDNldltpXSA9IE5VTEw7XG4rXHRcdH1cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0LyogUHJvZHVjZXIgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuK1x0XHRcdGlmIChjcHUpIHtcbitcdFx0XHRcdHAgPSBrbWFsbG9jKHQtXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0XHQvKiBVc2Ugb2JqZWN0ICovXG4rXHRcdFx0XHQqcCA9IDE3O1xuK1x0XHRcdFx0dGVzdFtjcHVdLnZbaV0gPSBwO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK31cbitcbisvKlxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBhbmQgbGF0ZXIgZnJlZSB0aGVtIGFsbCBhZ2FpblxuKyAqL1xuK3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdC1cdTAwM2Vjb3VudDsgaSsrKSB7XG4rXHRcdHU4ICpwID0ga21hbGxvYyh0LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuK1xuK1x0XHQqcCA9IDE0O1xuK1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBrbWFsbG9jX2FsbG9jX3RoZW5fZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHR1OCAqcCA9IHQtXHUwMDNldltpXTtcbitcbitcdFx0KnAgPSAxMztcbitcdFx0a2ZyZWUocCk7XG4rXHR9XG4rfVxuK1xuKy8qXG4rICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzLiBGcmVlIHRoZW0gaW1tZWRpYXRlbHkuXG4rICovXG4rc3RhdGljIHZvaWQga21hbGxvY19hbGxvY19mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XG4rXHRcdHU4ICpwID0ga21hbGxvYyh0LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuK1xuK1x0XHQqcCA9IDEyO1xuK1x0XHRrZnJlZShwKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGF0b21pY190IHRlc3RzX3J1bm5pbmc7XG4rc3RhdGljIGF0b21pY190IHBoYXNlMV9jb21wbGV0ZTtcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24xKTtcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24yKTtcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24zKTtcbitcbitzdGF0aWMgaW50IHRlc3RfZnVuYyh2b2lkICpwcml2YXRlKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IHByaXZhdGU7XG4rXHRjcHVtYXNrX3QgbmV3bWFzayA9IENQVV9NQVNLX05PTkU7XG4rXG4rXHRjcHVtYXNrX3NldF9jcHUodC1cdTAwM2VjcHUsIFx1MDAyNm5ld21hc2spO1xuK1x0c2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgXHUwMDI2bmV3bWFzayk7XG4rXHR0LVx1MDAzZXYgPSBrY2FsbG9jKHQtXHUwMDNlY291bnQsIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTtcbitcbitcdGF0b21pY19pbmMoXHUwMDI2dGVzdHNfcnVubmluZyk7XG4rXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcdHQtXHUwMDNlc3RhcnQxID0gZ2V0X2N5Y2xlcygpO1xuK1x0dC1cdTAwM2V0ZXN0X3AxKHQpO1xuK1x0dC1cdTAwM2VzdG9wMSA9IGdldF9jeWNsZXMoKTtcbitcdGF0b21pY19pbmMoXHUwMDI2cGhhc2UxX2NvbXBsZXRlKTtcbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjIpO1xuK1x0dC1cdTAwM2VzdGFydDIgPSBnZXRfY3ljbGVzKCk7XG4rXHRpZiAodC1cdTAwM2V0ZXN0X3AyKVxuK1x0XHR0LVx1MDAzZXRlc3RfcDIodCk7XG4rXHR0LVx1MDAzZXN0b3AyID0gZ2V0X2N5Y2xlcygpO1xuK1x0YXRvbWljX2RlYyhcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjMpO1xuK1x0a2ZyZWUodC1cdTAwM2V2KTtcbitcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbitcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLFxuK1x0XHR2b2lkICgqcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcbitcdFx0aW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aW50IGNwdTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZTEgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyB0aW1lMiA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIHN1bTEgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBzdW0yID0gMDtcbitcbitcdGF0b21pY19zZXQoXHUwMDI2dGVzdHNfcnVubmluZywgMCk7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnBoYXNlMV9jb21wbGV0ZSwgMCk7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjEpO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24yKTtcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMyk7XG4rXG4rXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuK1x0XHRzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBcdTAwMjZ0ZXN0W2NwdV07XG4rXG4rXHRcdHQtXHUwMDNlY3B1ID0gY3B1O1xuK1x0XHR0LVx1MDAzZWNvdW50ID0gVEVTVF9DT1VOVDtcbitcdFx0dC1cdTAwM2V0ZXN0X3AxID0gcDE7XG4rXHRcdHQtXHUwMDNldGVzdF9wMiA9IHAyO1xuK1x0XHR0LVx1MDAzZXNpemUgPSBzaXplO1xuK1x0XHR0LVx1MDAzZXRhc2sgPSBrdGhyZWFkX3J1bih0ZXN0X2Z1bmMsIHQsIFwidGVzdCVkXCIsIGNwdSk7XG4rXHRcdGlmIChJU19FUlIodC1cdTAwM2V0YXNrKSkge1xuK1x0XHRcdHByX2VycihcIkZhaWxlZCB0byBzdGFydCB0ZXN0IGZ1bmNcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBhcmUgcnVubmluZyAqL1xuK1x0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNnRlc3RzX3J1bm5pbmcpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcbitcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDEgKi9cbitcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZwaGFzZTFfY29tcGxldGUpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24yKTtcbitcbitcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDIgKi9cbitcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZ0ZXN0c19ydW5uaW5nKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24zKTtcbitcbitcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuK1x0XHRrdGhyZWFkX3N0b3AodGVzdFtjcHVdLnRhc2spO1xuK1xuK1x0cHJfYWxlcnQoXCIlcyglZCk6XCIsIG5hbWUsIHNpemUpO1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbitcdFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXHUwMDI2dGVzdFtjcHVdO1xuK1xuK1x0XHR0aW1lMSA9IHQtXHUwMDNlc3RvcDEgLSB0LVx1MDAzZXN0YXJ0MTtcbitcdFx0dGltZTIgPSB0LVx1MDAzZXN0b3AyIC0gdC1cdTAwM2VzdGFydDI7XG4rXHRcdHN1bTEgKz0gdGltZTE7XG4rXHRcdHN1bTIgKz0gdGltZTI7XG4rXHRcdHByX2NvbnQoXCIgJWQ9JWx1XCIsIGNwdSwgdGltZTEgLyBURVNUX0NPVU5UKTtcbitcdFx0aWYgKHAyKVxuK1x0XHRcdHByX2NvbnQoXCIvJWx1XCIsIHRpbWUyIC8gVEVTVF9DT1VOVCk7XG4rXHR9XG4rXHRwcl9jb250KFwiIEF2ZXJhZ2U9JWx1XCIsIHN1bTEgLyBudW1fb25saW5lX2NwdXMoKSAvIFRFU1RfQ09VTlQpO1xuK1x0aWYgKHAyKVxuK1x0XHRwcl9jb250KFwiLyVsdVwiLCBzdW0yIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTtcbitcdHByX2NvbnQoXCJcXG5cIik7XG4rXHRzY2hlZHVsZV90aW1lb3V0KDIwMCk7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyBpbnQgc2xhYl90ZXN0X2luaXQodm9pZClcbit7XG4rXHR2b2lkICoqdiA9IGttYWxsb2NfYXJyYXkoVEVTVF9DT1VOVCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XG4rXHRpbnQgcmVtO1xuK1x0aW50IHNpemU7XG4rXG4rXHRwcl9hbGVydChcInRlc3QgaW5pdFxcblwiKTtcbitcbitcdHByX2FsZXJ0KFwiU2luZ2xlIHRocmVhZCB0ZXN0aW5nXFxuXCIpO1xuK1x0cHJfYWxlcnQoXCI9PT09PT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRwcl9hbGVydChcIjEuIEttYWxsb2M6IFJlcGVhdGVkbHkgYWxsb2NhdGUgdGhlbiBmcmVlIHRlc3RcXG5cIik7XG4rXHRmb3IgKHNpemUgPSA4OyBzaXplIFx1MDAzYz0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAyOyBzaXplIFx1MDAzY1x1MDAzYz0gMSkge1xuK1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XG4rXHRcdFx0dTggKnAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuK1xuK1x0XHRcdCpwID0gMjI7XG4rXHRcdFx0dltpXSA9IHA7XG4rXHRcdH1cbitcdFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4rXHRcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xuK1xuK1x0XHRwcl9hbGVydChcIiVpIHRpbWVzIGttYWxsb2MoJWQpIFwiLCBpLCBzaXplKTtcbitcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzIFwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcbitcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xuK1x0XHRcdHU4ICpwID0gdltpXTtcbitcbitcdFx0XHQqcCA9IDIzO1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfY29udChcImtmcmVlIFwiKTtcbitcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzXFxuXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuK1x0fVxuK1xuK1x0cHJfYWxlcnQoXCIyLiBLbWFsbG9jOiBhbGxvYy9mcmVlIHRlc3RcXG5cIik7XG4rXHRmb3IgKHNpemUgPSA4OyBzaXplIFx1MDAzYz0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAyOyBzaXplIFx1MDAzY1x1MDAzYz0gMSkge1xuK1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XG4rXHRcdFx0dTggKnAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuK1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfYWxlcnQoXCIlaSB0aW1lcyBrbWFsbG9jKCVkKS9rZnJlZSBcIiwgaSwgc2l6ZSk7XG4rXHRcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuK1x0XHRwcl9jb250KFwiLVx1MDAzZSAlbGx1IGN5Y2xlc1xcblwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcdH1cbitcdGtmcmVlKHYpO1xuKyNpZmRlZiBDT05GSUdfU01QXG4rXHRwcl9pbmZvKFwiQ29uY3VycmVudCBhbGxvY3NcXG5cIik7XG4rXHRwcl9pbmZvKFwiPT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRmb3IgKGkgPSAzOyBpIFx1MDAzYz0gUEFHRV9TSElGVDsgaSsrKSB7XG4rXHRcdGRvX2NvbmN1cnJlbnRfdGVzdChrbWFsbG9jX2FsbG9jX3RoZW5fZnJlZV90ZXN0X3AxLFxuK1x0XHRcdGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIsXG4rXHRcdFx0MSBcdTAwM2NcdTAwM2MgaSwgXCJLbWFsbG9jIE4qYWxsb2MgTipmcmVlXCIpO1xuK1x0fVxuK1x0Zm9yIChpID0gMzsgaSBcdTAwM2M9IFBBR0VfU0hJRlQ7IGkrKykge1xuK1x0XHRkb19jb25jdXJyZW50X3Rlc3Qoa21hbGxvY19hbGxvY19mcmVlX3Rlc3RfcDEsIE5VTEwsXG4rXHRcdFx0MSBcdTAwM2NcdTAwM2MgaSwgXCJLbWFsbG9jIE4qKGFsbG9jIGZyZWUpXCIpO1xuK1x0fVxuK1xuK1x0cHJfaW5mbyhcIlJlbW90ZSBmcmVlIHRlc3RcXG5cIik7XG4rXHRwcl9pbmZvKFwiPT09PT09PT09PT09PT09PVxcblwiKTtcbitcdGZvciAoaSA9IDM7IGkgXHUwMDNjPSBQQUdFX1NISUZUOyBpKyspIHtcbitcdFx0ZG9fY29uY3VycmVudF90ZXN0KHJlbW90ZV9mcmVlX3Rlc3RfcDEsXG4rXHRcdFx0XHRyZW1vdGVfZnJlZV90ZXN0X3AyLFxuK1x0XHRcdDEgXHUwMDNjXHUwMDNjIGksIFwiTipyZW1vdGUgZnJlZVwiKTtcbitcdH1cbitcbitcdHByX2luZm8oXCIxIGFsbG9jIE4gZnJlZSB0ZXN0XFxuXCIpO1xuK1x0cHJfaW5mbyhcIj09PT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRmb3IgKGkgPSAzOyBpIFx1MDAzYz0gUEFHRV9TSElGVDsgaSsrKSB7XG4rXHRcdGRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY19uX2ZyZWVfdGVzdF9wMSxcbitcdFx0XHRcdE5VTEwsXG4rXHRcdFx0MSBcdTAwM2NcdTAwM2MgaSwgXCIxIGFsbG9jIE4gZnJlZVwiKTtcbitcdH1cbitcbisjZW5kaWZcbitcdHJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi9cbit9XG4rXG4rc3RhdGljIHZvaWQgc2xhYl90ZXN0X2V4aXQodm9pZClcbit7XG4rXHRwcl9hbGVydChcInRlc3QgZXhpdFxcblwiKTtcbit9XG4rXG4rbW9kdWxlX2luaXQoc2xhYl90ZXN0X2luaXQpXG4rbW9kdWxlX2V4aXQoc2xhYl90ZXN0X2V4aXQpXG4rXG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rTU9EVUxFX0FVVEhPUihcIkNocmlzdG9waCBMYW1ldGVyIGFuZCBNYXRoaWV1IERlc25veWVyc1wiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJTTEFCIHRlc3RcIik7XG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfdm1zdGF0LmMgYi9saWIvdGVzdF92bXN0YXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY2M2Y0MzlhYjlkMmFcbi0tLSAvZGV2L251bGxcbisrKyBiL2xpYi90ZXN0X3Ztc3RhdC5jXG5AQCAtMCwwICsxLDk1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIFRlc3QgbW9kdWxlIGZvciBpbi1rZXJuZWwgc3ludGhldGljIHZtIHN0YXRpc3RpY3MgcGVyZm9ybWFuY2UuXG4rICpcbisgKiBleGVjdXRlXG4rICpcbisgKlx0bW9kcHJvYmUgdGVzdF92bXN0YXRcbisgKlxuKyAqIHRvIHJ1biB0aGlzIHRlc3RcbisgKlxuKyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24sIENocmlzdG9waCBMYW1ldGVyIFx1MDAzY2NsQGdlbnR3by5vcmdcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3RpbWV4LmhcdTAwM2VcbitcbisjZGVmaW5lIFRFU1RfQ09VTlQgMTAwMDBcbitcbitzdGF0aWMgaW50IHZtc3RhdF90ZXN0X2luaXQodm9pZClcbit7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcdGN5Y2xlc190IHRpbWUxLCB0aW1lMiwgdGltZTtcbitcdGludCByZW07XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXG4rXHRwcl9hbGVydChcIlZNc3RhdCB0ZXN0aW5nXFxuXCIpO1xuK1x0cHJfYWxlcnQoXCI9PT09PT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRwcl9hbGVydChcIjEuIGluY196b25lX3BhZ2Vfc3RhdGUoKSB0aGVuIGRlY196b25lX3BhZ2Vfc3RhdGUoKVxcblwiKTtcbitcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKVxuK1x0XHRpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZSRUVfQ01BX1BBR0VTKTtcbitcbitcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4rXG4rXHRwcl9hbGVydChcIiVpIHRpbWVzIGluY196b25lX3BhZ2Vfc3RhdGUoKSBcIiwgaSk7XG4rXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbitcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzIFwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcbitcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKVxuK1x0XHRfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpO1xuK1xuK1x0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4rXHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdHByX2NvbnQoXCJfX2RlY196X3BfcygpIFwiKTtcbitcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuK1x0cHJfY29udChcIi1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cIiwgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuK1xuK1x0cHJfYWxlcnQoXCIyLiBpbmNfem9uZV9wYWdlX3N0YXRlKCkvZGVjX3pvbmVfcGFnZV9zdGF0ZSgpXFxuXCIpO1xuK1x0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcbitcdFx0aW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XG4rXHRcdGRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpO1xuK1x0fVxuK1xuK1x0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4rXHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdHByX2FsZXJ0KFwiJWkgdGltZXMgaW5jL2RlYyBcIiwgaSk7XG4rXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbitcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzXFxuXCIsICAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcbitcdHByX2FsZXJ0KFwiMy4gY291bnRfdm1fZXZlbnQoKVxcblwiKTtcbitcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKVxuK1x0XHRjb3VudF92bV9ldmVudChTTEFCU19TQ0FOTkVEKTtcbitcbitcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4rXG4rXHRjb3VudF92bV9ldmVudHMoU0xBQlNfU0NBTk5FRCwgLVRFU1RfQ09VTlQpO1xuK1x0cHJfYWxlcnQoXCIlaSBjb3VudF92bV9ldmVudHMgXCIsIGkpO1xuK1x0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRwcl9jb250KFwiLVx1MDAzZSAlbGx1IGN5Y2xlc1xcblwiLCAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7XG4rXHRfX2ZyZWVfcGFnZShwYWdlKTtcbitcdHJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi9cbit9XG4rXG4rc3RhdGljIHZvaWQgdm1zdGF0X3Rlc3RfZXhpdCh2b2lkKVxuK3tcbitcdHByX2FsZXJ0KFwidGVzdCBleGl0XFxuXCIpO1xuK31cbitcbittb2R1bGVfaW5pdCh2bXN0YXRfdGVzdF9pbml0KVxuK21vZHVsZV9leGl0KHZtc3RhdF90ZXN0X2V4aXQpXG4rXG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rTU9EVUxFX0FVVEhPUihcIkNocmlzdG9waCBMYW1ldGVyXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIlZNIHN0YXRpc3RpY3MgdGVzdFwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjAwOjAyLjYwNTExODU4OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTEzMzI2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aHJlZSBuZXcgdGVzdCBtb2R1bGVzOiBgdGVzdF92bXN0YXRgLCBgdGVzdF9zbGFiYCwgYW5kIGB0ZXN0X3BhZ2VhbGxvY2AuIFRoZXkncmUgc3ludGhldGljIGJlbmNobWFya3MgZm9yIFZNIHN0YXRpc3RpY3MsIHNsYWIgYWxsb2NhdG9yLCBhbmQgdGhlIHBhZ2UgYWxsb2NhdG9yLCByZXNwZWN0aXZlbHkuIFRoZXkgZ2V0IGFkZGVkIHRvIGBLY29uZmlnLmRlYnVnYCBhbmQgdGhlIE1ha2VmaWxlLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhleSAqZXhlY3V0ZSogdXBvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKGBtb2R1bGVfaW5pdGApIGFuZCB0aGVuIGltbWVkaWF0ZWx5IHVubG9hZCB0aGVtc2VsdmVzIGJ5IHJldHVybmluZyBgLUVBR0FJTmAuXG5cbkluaXRpYWxseSwgSSBhc2tlZCBteXNlbGYsIFwiQXJlIHRoZXNlIGV2ZW4gKndvcnRoKiBmdXp6aW5nP1wiIE15IGV4cGVydGlzZSB0ZWxscyBtZSBmdXp6aW5nIHVzdWFsbHkgZm9jdXNlcyBvbiBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsaXR5LCBBUElzLCBvciBkcml2ZXJzLiBUaGVzZSBtb2R1bGVzLCBob3dldmVyLCBhcmUgZXNzZW50aWFsbHkganVzdCBiZW5jaG1hcmtzLiBUaGV5IGRvbid0IGV4cG9zZSBhbnkgbmV3IHN5c2NhbGxzLCBpb2N0bHMsIG9yIGZ1bmN0aW9uYWwgbG9naWMuIFRoZXkganVzdCByZXBlYXRlZGx5IGNhbGwgZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9ucyBsaWtlIGBhbGxvY19wYWdlc2AsIGBrbWFsbG9jYCwgYW5kIGBpbmNfem9uZV9wYWdlX3N0YXRlYCBpbiBhIGxvb3AsIHB1cmVseSB0byBtZWFzdXJlIHBlcmZvcm1hbmNlLiBUaGV5IGFyZSAqbm90KiBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCdzIGNvcmUgb3BlcmF0aW9uLlxuXG5UaGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIGEgcGF0Y2ggaXMgd29ydGggZnV6emluZyBoYXMgc2V2ZXJhbCBkZWZpbmVkIHJlYXNvbnMgZm9yIGEgZmFsc2UgcmV0dXJuLCBhbmQgYWx0aG91Z2ggYSB0ZXN0IG1vZHVsZSBpc24ndCBleHBsaWNpdCwgaXQgc2VlbXMgdGhhdCBpdCdzIGp1c3Qgbm90IGZ1bmN0aW9uYWwgY2hhbmdlcy5cblxuSSByZS1leGFtaW5lZCB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIHNvbWV0aGluZyBzaG91bGQgYmUgZnV6emVkLiBJdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiB0ZXN0IG1vZHVsZXMsIGJ1dCBpdCBkb2VzIHNheSB0aGluZ3MgbGlrZSBjb2RlIGNvbW1lbnRzLCBwdXJlIGRlY29yYXRpdmUgY2hhbmdlcywgYW5kIGNoYW5nZXMgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24gZmxvdy4gQmVuY2htYXJrIG1vZHVsZXMgZG9uJ3QgZG8gdGhlc2UgdGhpbmdzLCBidXQgdGhleSBhbHNvIGRvbid0IHJlYWxseSAqZG8qIGFueXRoaW5nIHRoYXQncyBmdXp6ZWQuXG5cbldoaWxlIFN5emthbGxlciAqY291bGQqIGxvYWQgbW9kdWxlcywgZnV6emluZyBhIGJlbmNobWFyayBtb2R1bGUgaXMgcG9pbnRsZXNzLiBJdCBkb2Vzbid0IHRha2UgaW5wdXQgZnJvbSB1c2VyIHNwYWNlOyBpdCBqdXN0IHJ1bnMgYSBoYXJkY29kZWQgYmVuY2htYXJrIG9uIGxvYWQuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGVzZSBhcmUgcHVyZWx5IHN5bnRoZXRpYyBiZW5jaG1hcmsgbW9kdWxlcyB0aGF0IGV4ZWN1dGUgaGFyZGNvZGVkIHRlc3RzIG9uIGxvYWQgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHVzZXItZmFjaW5nIEFQSXMgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZy4gVGhleSBhcmUgZm9yIG1lYXN1cmluZyBwZXJmb3JtYW5jZSwgbm90IGV4cG9zaW5nIG5ldyB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODY1LCJPdXRwdXRUb2tlbnMiOjg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6MDA6MTAuNTU2NDU1MDY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN5bnRoZXRpYyBiZW5jaG1hcmsgbW9kdWxlcyAodGVzdF92bXN0YXQsIHRlc3Rfc2xhYiwgdGVzdF9wYWdlYWxsb2MpIHRoYXQgZXhlY3V0ZSBoYXJkY29kZWQgcGVyZm9ybWFuY2UgdGVzdHMgdXBvbiBtb2R1bGUgbG9hZC4gVGhlc2UgbW9kdWxlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgdXNlci1mYWNpbmcgQVBJcywgb3IgY29tcGxleCBzdGF0ZSBtYWNoaW5lcyB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzeW50aGV0aWMgYmVuY2htYXJrIG1vZHVsZXMgKHRlc3Rfdm1zdGF0LCB0ZXN0X3NsYWIsIHRlc3RfcGFnZWFsbG9jKSB0aGF0IGV4ZWN1dGUgaGFyZGNvZGVkIHBlcmZvcm1hbmNlIHRlc3RzIHVwb24gbW9kdWxlIGxvYWQuIFRoZXNlIG1vZHVsZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMsIHVzZXItZmFjaW5nIEFQSXMsIG9yIGNvbXBsZXggc3RhdGUgbWFjaGluZXMgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmndnj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 12:41:20 +0000 UTC FinishedAt: 2026-08-01 13:00:11 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEzOjAwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODA4ZmY2NDM5MzViOGMzNmEzNjQwZWY2NjRhMWZlNzdkZmQxMDU0ZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgQXVnIDEgMTM6MDA6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1Z1xuaW5kZXggMTI0NGRjYWMyMjk0YS4uNzA4NzNhYWM2NzVmYSAxMDA2NDRcbi0tLSBhL2xpYi9LY29uZmlnLmRlYnVnXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvS2NvbmZpZy5kZWJ1Z1xuQEAgLTM0MjcsNiAmIzQzOzM0MjcsMzYgQEAgY29uZmlnIFRFU1RfS0VYRUNfSEFORE9WRVJcbiBcbiBcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbiYjNDM7Y29uZmlnIFRFU1RfVk1TVEFUXG4mIzQzO1x0dHJpc3RhdGUgXCYjMzQ7Vk0gU3RhdGlzdGljcyBCZW5jaG1hcmtcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IG5cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBIHN5bnRoZXRpYyBiZW5jaG1hcmsgbWVhc3VyaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBWTSBzdGF0aXN0aWNzLFxuJiM0MztcdCAgdXNlZnVsIHRvIGFuYWx5emUgYW55IGltcHJvdmVtZW50cyBvciByZWdyZXNzaW9ucyBpbiBmdW5jdGlvbnMgdGhhdFxuJiM0MztcdCAgYXJlIGZyZXF1ZW50bHkgdXNlZCBpbiBob3QgY29kZSBwYXRocy5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiYjNDM7Y29uZmlnIFRFU1RfU0xBQlxuJiM0MztcdHRyaXN0YXRlIFwmIzM0O1NsYWIgQWxsb2NhdG9yIEJlbmNobWFya1wmIzM0O1xuJiM0MztcdGRlZmF1bHQgblxuJiM0MztcdGhlbHBcbiYjNDM7XHQgIEEgc3ludGhldGljIGJlbmNobWFyayB0aGF0IG1lYXN1cmVzIHNsYWIgYWxsb2NhdG9yIHBlcmZvcm1hbmNlLFxuJiM0MztcdCAgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHNpbmdsZSB0aHJlYWQgdGVzdGluZyBieSByZXBlYXRlZGx5XG4mIzQzO1x0ICBhbGxvY2F0aW5nIHRoZW4gZnJlZWluZyBtZW1vcnkgYW5kIGNvbmN1cnJlbnQgb3IgcmVtb3RlIGFsbG9jYXRpb25zLlxuJiM0MztcbiYjNDM7XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuJiM0Mztjb25maWcgVEVTVF9QQUdFQUxMT0NcbiYjNDM7XHR0cmlzdGF0ZSBcJiMzNDtQYWdlIEFsbG9jYXRvciBCZW5jaG1hcmtcJiMzNDtcbiYjNDM7XHRkZWZhdWx0IG5cbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwYWdlIGFsbG9jYXRvciwgdXNlZnVsXG4mIzQzO1x0ICB0byBhbmFseXplIGFueSBpbXByb3ZlbWVudHMgb3IgcmVncmVzc2lvbnMgd2hlbiByZXBlYXRlZGx5IGFsbG9jYXRpbmdcbiYjNDM7XHQgIGFuZCBmcmVlaW5nIG1lbW9yeSBhcyB3ZWxsIGFzIGNvbmN1cnJlbnQgYW5kIHJlbW90ZSBhbGxvY2F0aW9ucy5cbiYjNDM7XG4mIzQzO1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiM0MztcbiBjb25maWcgUkFURUxJTUlUX0tVTklUX1RFU1RcbiBcdHRyaXN0YXRlIFwmIzM0O0tVbml0IFRlc3QgZm9yIGNvcnJlY3RuZXNzIGFuZCBzdHJlc3Mgb2YgcmF0ZWxpbWl0XCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiBcdGRlcGVuZHMgb24gS1VOSVRcbmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGVcbmluZGV4IDdmNzVjYzZlZGY5NGEuLjE3YzE2NGUxNDVhZDQgMTAwNjQ0XG4tLS0gYS9saWIvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9NYWtlZmlsZVxuQEAgLTEwNSw2ICYjNDM7MTA1LDkgQEAgb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vXG4gb2JqLSQoQ09ORklHX1RFU1RfUkVGX1RSQUNLRVIpICYjNDM7PSB0ZXN0X3JlZl90cmFja2VyLm9cbiBvYmotJChDT05GSUdfVEVTVF9PQkpQT09MKSAmIzQzOz0gdGVzdF9vYmpwb29sLm9cbiBvYmotJChDT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUikgJiM0Mzs9IHRlc3Rfa2hvLm9cbiYjNDM7b2JqLSQoQ09ORklHX1RFU1RfVk1TVEFUKSAmIzQzOz0gdGVzdF92bXN0YXQub1xuJiM0MztvYmotJChDT05GSUdfVEVTVF9TTEFCKSAmIzQzOz0gdGVzdF9zbGFiLm9cbiYjNDM7b2JqLSQoQ09ORklHX1RFU1RfUEFHRUFMTE9DKSAmIzQzOz0gdGVzdF9wYWdlYWxsb2Mub1xuIFxuIG9iai0kKENPTkZJR19URVNUX0ZQVSkgJiM0Mzs9IHRlc3RfZnB1Lm9cbiB0ZXN0X2ZwdS15IDo9IHRlc3RfZnB1X2dsdWUubyB0ZXN0X2ZwdV9pbXBsLm9cbmRpZmYgLS1naXQgYS9saWIvdGVzdF9wYWdlYWxsb2MuYyBiL2xpYi90ZXN0X3BhZ2VhbGxvYy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA1MTRkZjUyYzViMFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvbGliL3Rlc3RfcGFnZWFsbG9jLmNcbkBAIC0wLDAgJiM0MzsxLDMzNyBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuJiM0MzsvKlxuJiM0MzsgKiBUZXN0IG1vZHVsZSBmb3IgaW4ga2VybmVsIHN5bnRoZXRpYyBwYWdlIGFsbG9jYXRvciB0ZXN0aW5nLlxuJiM0MzsgKlxuJiM0MzsgKiBDb21waWxlZCBhcyBhIG1vZHVsZS4gVGhlIG1vZHVsZSBuZWVkcyB0byBiZSBsb2FkZWQgdG8gcnVuLlxuJiM0MzsgKlxuJiM0MzsgKiAoQykgMjAwOSBMaW51eCBGb3VuZGF0aW9uLCBDaHJpc3RvcGggTGFtZXRlciBcdTAwM2NjbEBnZW50d28ub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vdGltZXguaFx1MDAzZVxuJiM0MztcbiYjNDM7I2RlZmluZSBURVNUX0NPVU5UIDEwMDBcbiYjNDM7XG4mIzQzOyNkZWZpbmUgQ09OQ1VSUkVOVF9NQVhfT1JERVIgNlxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19TTVBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XHRpbnQgb3JkZXI7XG4mIzQzO1x0aW50IGNvdW50O1xuJiM0MztcdHN0cnVjdCBwYWdlICoqdjtcbiYjNDM7XHR2b2lkICgqdGVzdF9wMSkoc3RydWN0IHRlc3Rfc3RydWN0ICp0KTtcbiYjNDM7XHR2b2lkICgqdGVzdF9wMikoc3RydWN0IHRlc3Rfc3RydWN0ICp0KTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0MTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0b3AxO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RhcnQyO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgc3RvcDI7XG4mIzQzO30gdGVzdFtOUl9DUFVTXTtcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHVzIFx1MDAzZSAwIGFuZCB0aGVuIGFsbCB0aGVcbiYjNDM7ICogb2JqZWN0cyBsYXRlciBvbiBjcHUgMFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0LyogUGVyZm9ybSBubyBhbGxvY2F0aW9ucyBvbiBjcHUgMCAqL1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKSB7XG4mIzQzO1x0XHRcdHAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC1cdTAwM2VvcmRlcik7XG4mIzQzO1x0XHRcdC8qIFVzZSBvYmplY3QgKi9cbiYjNDM7XHRcdFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTcsIDQpO1xuJiM0MztcdFx0fSBlbHNlXG4mIzQzO1x0XHRcdHAgPSBOVUxMO1xuJiM0MztcdFx0dC1cdTAwM2V2W2ldID0gcDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJlbW90ZV9mcmVlX3Rlc3RfcDIoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0LyogQWxsIGZyZWVzIGFyZSBjb21wbGV0ZWQgb24gY3B1IHplcm8gKi9cbiYjNDM7XHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBwYWdlICpwID0gdGVzdFtjcHVdLnZbaV07XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIXApXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRfX2ZyZWVfcGFnZXMocCwgdC1cdTAwM2VvcmRlcik7XG4mIzQzO1x0XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBhbmQgbGF0ZXIgZnJlZSB0aGVtIGFsbCBhZ2FpblxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLCB0LVx1MDAzZW9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAxNCwgNCk7XG4mIzQzO1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgcGFnZSAqcCA9IHQtXHUwMDNldltpXTtcbiYjNDM7XG4mIzQzO1x0XHRfX2ZyZWVfcGFnZXMocCwgdC1cdTAwM2VvcmRlcik7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFsbG9jX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtXHUwMDNlb3JkZXIpO1xuJiM0MztcbiYjNDM7XHRcdG1lbXNldChwYWdlX2FkZHJlc3MocCksIDEyLCA0KTtcbiYjNDM7XHRcdF9fZnJlZV9wYWdlcyhwLCB0LVx1MDAzZW9yZGVyKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBhdG9taWNfdCB0ZXN0c19ydW5uaW5nO1xuJiM0MztzdGF0aWMgYXRvbWljX3QgcGhhc2UxX2NvbXBsZXRlO1xuJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24xKTtcbiYjNDM7c3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjb21wbGV0aW9uMik7XG4mIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjMpO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCB0ZXN0X2Z1bmModm9pZCAqcHJpdmF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IHByaXZhdGU7XG4mIzQzO1x0Y3B1bWFza190IG5ld21hc2sgPSBDUFVfTUFTS19OT05FO1xuJiM0MztcbiYjNDM7XHRjcHVtYXNrX3NldF9jcHUodC1cdTAwM2VjcHUsIFx1MDAyNm5ld21hc2spO1xuJiM0MztcdHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIFx1MDAyNm5ld21hc2spO1xuJiM0MztcdHQtXHUwMDNldiA9IGttYWxsb2NfYXJyYXkodC1cdTAwM2Vjb3VudCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0YXRvbWljX2luYyhcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcbiYjNDM7XHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24xKTtcbiYjNDM7XHR0LVx1MDAzZXN0YXJ0MSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHR0LVx1MDAzZXRlc3RfcDEodCk7XG4mIzQzO1x0dC1cdTAwM2VzdG9wMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRhdG9taWNfaW5jKFx1MDAyNnBoYXNlMV9jb21wbGV0ZSk7XG4mIzQzO1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMik7XG4mIzQzO1x0dC1cdTAwM2VzdGFydDIgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0aWYgKHQtXHUwMDNldGVzdF9wMilcbiYjNDM7XHRcdHQtXHUwMDNldGVzdF9wMih0KTtcbiYjNDM7XHR0LVx1MDAzZXN0b3AyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdGF0b21pY19kZWMoXHUwMDI2dGVzdHNfcnVubmluZyk7XG4mIzQzO1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMyk7XG4mIzQzO1x0a2ZyZWUodC1cdTAwM2V2KTtcbiYjNDM7XHR3aGlsZSAoIWt0aHJlYWRfc2hvdWxkX3N0b3AoKSkge1xuJiM0MztcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBkb19jb25jdXJyZW50X3Rlc3Qodm9pZCAoKnAxKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksXG4mIzQzO1x0XHR2b2lkICgqcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcbiYjNDM7XHRcdGludCBvcmRlciwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lMSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lMiA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN1bTIgPSAwO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cGhhc2UxX2NvbXBsZXRlLCAwKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjEpO1xuJiM0MztcdGluaXRfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMik7XG4mIzQzO1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24zKTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiYjNDM7XHRcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IFx1MDAyNnRlc3RbY3B1XTtcbiYjNDM7XG4mIzQzO1x0XHR0LVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHRcdHQtXHUwMDNlY291bnQgPSBURVNUX0NPVU5UO1xuJiM0MztcdFx0dC1cdTAwM2V0ZXN0X3AxID0gcDE7XG4mIzQzO1x0XHR0LVx1MDAzZXRlc3RfcDIgPSBwMjtcbiYjNDM7XHRcdHQtXHUwMDNlb3JkZXIgPSBvcmRlcjtcbiYjNDM7XHRcdHQtXHUwMDNldGFzayA9IGt0aHJlYWRfcnVuKHRlc3RfZnVuYywgdCwgXCYjMzQ7dGVzdCVkXCYjMzQ7LCBjcHUpO1xuJiM0MztcdFx0aWYgKElTX0VSUih0LVx1MDAzZXRhc2spKSB7XG4mIzQzO1x0XHRcdHByX2VycihcJiMzNDtGYWlsZWQgdG8gc3RhcnQgdGVzdCBmdW5jXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgKi9cbiYjNDM7XHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2dGVzdHNfcnVubmluZykgXHUwMDNjIG51bV9vbmxpbmVfY3B1cygpKSB7XG4mIzQzO1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4mIzQzO1x0XHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24xKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgaGF2ZSBjb21wbGV0ZWQgcGhhc2UgMSAqL1xuJiM0MztcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZwaGFzZTFfY29tcGxldGUpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuJiM0MztcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcdGNvbXBsZXRlX2FsbChcdTAwMjZjb21wbGV0aW9uMik7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDIgKi9cbiYjNDM7XHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2dGVzdHNfcnVubmluZykpIHtcbiYjNDM7XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbiYjNDM7XHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRjb21wbGV0ZV9hbGwoXHUwMDI2Y29tcGxldGlvbjMpO1xuJiM0MztcbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcbiYjNDM7XHRcdGt0aHJlYWRfc3RvcCh0ZXN0W2NwdV0udGFzayk7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0OyVzKCVkKTpcJiMzNDssIG5hbWUsIG9yZGVyKTtcbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuJiM0MztcdFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXHUwMDI2dGVzdFtjcHVdO1xuJiM0MztcbiYjNDM7XHRcdHRpbWUxID0gdC1cdTAwM2VzdG9wMSAtIHQtXHUwMDNlc3RhcnQxO1xuJiM0MztcdFx0dGltZTIgPSB0LVx1MDAzZXN0b3AyIC0gdC1cdTAwM2VzdGFydDI7XG4mIzQzO1x0XHRzdW0xICYjNDM7PSB0aW1lMTtcbiYjNDM7XHRcdHN1bTIgJiM0Mzs9IHRpbWUyO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDsgJWQ9JWx1XCYjMzQ7LCBjcHUsIHRpbWUxIC8gVEVTVF9DT1VOVCk7XG4mIzQzO1x0XHRpZiAocDIpXG4mIzQzO1x0XHRcdHByX2NvbnQoXCYjMzQ7LyVsdVwmIzM0OywgdGltZTIgLyBURVNUX0NPVU5UKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJfY29udChcJiMzNDsgQXZlcmFnZT0lbHVcJiMzNDssIHN1bTEgLyBudW1fb25saW5lX2NwdXMoKSAvIFRFU1RfQ09VTlQpO1xuJiM0MztcdGlmIChwMilcbiYjNDM7XHRcdHByX2NvbnQoXCYjMzQ7LyVsdVwmIzM0Oywgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XG4mIzQzO1x0cHJfY29udChcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdHNjaGVkdWxlX3RpbWVvdXQoMjAwKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcGFnZWFsbG9jX3Rlc3RfaW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0dm9pZCAqKnYgPSBrbWFsbG9jX2FycmF5KFRFU1RfQ09VTlQsIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XG4mIzQzO1x0aW50IHJlbTtcbiYjNDM7XHRpbnQgb3JkZXI7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3Rlc3QgaW5pdFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O1NpbmdsZSB0aHJlYWQgdGVzdGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7PT09PT09PT09PT09PT09PT09PT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDsxLiBSZXBlYXRlZGx5IGFsbG9jYXRlIHRoZW4gZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsXG4mIzQzO1x0XHRcdFx0XHRcdG9yZGVyKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghcCkge1xuJiM0MztcdFx0XHRcdHByX2VycihcJiMzNDtDYW5ub3QgYWxsb2NhdGUgb3JkZXI9JWRcXG5cJiMzNDssIG9yZGVyKTtcbiYjNDM7XHRcdFx0XHRicmVhaztcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0LyogVG91Y2ggcGFnZSAqL1xuJiM0MztcdFx0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAyMiwgNCk7XG4mIzQzO1x0XHRcdHZbaV0gPSBwO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbiYjNDM7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDslaSB0aW1lcyBhbGxvY19wYWdlKCwlZCkgXCYjMzQ7LCBpLCBvcmRlcik7XG4mIzQzO1x0XHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbiYjNDM7XHRcdHByX2NvbnQoXCYjMzQ7LVx1MDAzZSAlbGx1IGN5Y2xlcyBcJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcbiYjNDM7XHRcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3RydWN0IHBhZ2UgKnAgPSB2W2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0X19mcmVlX3BhZ2VzKHAsIG9yZGVyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDtfX2ZyZWVfcGFnZXMoLCVkKVwmIzM0Oywgb3JkZXIpO1xuJiM0MztcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4mIzQzO1x0XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7Mi4gYWxsb2MvZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgb3JkZXIpO1xuJiM0MztcdFx0XHRfX2ZyZWVfcGFnZXMocCwgb3JkZXIpO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbiYjNDM7XG4mIzQzO1x0XHRwcl9hbGVydChcJiMzNDslaSB0aW1lcyBhbGxvYyggLCVkKS9mcmVlIFwmIzM0OywgaSwgb3JkZXIpO1xuJiM0MztcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4mIzQzO1x0XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcdH1cbiYjNDM7XHRrZnJlZSh2KTtcbiYjNDM7I2lmZGVmIENPTkZJR19TTVBcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O0NvbmN1cnJlbnQgYWxsb2NzXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0Oz09PT09PT09PT09PT09PT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjIENPTkNVUlJFTlRfTUFYX09SREVSOyBvcmRlciYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY190aGVuX2ZyZWVfdGVzdF9wMSxcbiYjNDM7XHRcdFx0YWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIsXG4mIzQzO1x0XHRcdG9yZGVyLCBcJiMzNDtQYWdlIGFsbG9jIE4qYWxsb2MgTipmcmVlXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDstLS0tRmFzdHBhdGgtLS1cXG5cJiMzNDspO1xuJiM0MztcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgQ09OQ1VSUkVOVF9NQVhfT1JERVI7IG9yZGVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZG9fY29uY3VycmVudF90ZXN0KGFsbG9jX2ZyZWVfdGVzdF9wMSwgTlVMTCxcbiYjNDM7XHRcdFx0b3JkZXIsIFwmIzM0O1BhZ2UgTiooYWxsb2MgZnJlZSlcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtSZW1vdGUgZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0Oz09PT09PT09PT09PT09PT1cXG5cJiMzNDspO1xuJiM0MztcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgQ09OQ1VSUkVOVF9NQVhfT1JERVI7IG9yZGVyJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZG9fY29uY3VycmVudF90ZXN0KHJlbW90ZV9mcmVlX3Rlc3RfcDEsXG4mIzQzO1x0XHRcdFx0cmVtb3RlX2ZyZWVfdGVzdF9wMixcbiYjNDM7XHRcdFx0b3JkZXIsIFwmIzM0O04qcmVtb3RlIGZyZWVcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHBhZ2VhbGxvY190ZXN0X2V4aXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3Rlc3QgZXhpdFxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO21vZHVsZV9pbml0KHBhZ2VhbGxvY190ZXN0X2luaXQpXG4mIzQzO21vZHVsZV9leGl0KHBhZ2VhbGxvY190ZXN0X2V4aXQpXG4mIzQzO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0NocmlzdG9waCBMYW1ldGVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O3BhZ2UgYWxsb2NhdG9yIHBlcmZvcm1hbmNlIHRlc3RcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3NsYWIuYyBiL2xpYi90ZXN0X3NsYWIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE0M2IwZDczZGFhYjlcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3NsYWIuY1xuQEAgLTAsMCAmIzQzOzEsMzc1IEBAXG4mIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4mIzQzOy8qXG4mIzQzOyAqIFRlc3QgbW9kdWxlIGZvciBzeW50aGV0aWMgaW4ga2VybmVsIHNsYWIgYWxsb2NhdG9yIHRlc3RpbmcuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSB0ZXN0IGlzIHRyaWdnZXJlZCBieSBsb2FkaW5nIHRoZSBtb2R1bGUgKHdoaWNoIHdpbGwgZmFpbCkuXG4mIzQzOyAqXG4mIzQzOyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24gXHUwMDNjY2xAZ2VudHdvLm9yZ1x1MDAzZVxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2ppZmZpZXMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RpbWV4LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMFxuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19TTVBcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcbiYjNDM7XHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XHRpbnQgc2l6ZTtcbiYjNDM7XHRpbnQgY291bnQ7XG4mIzQzO1x0dm9pZCAqKnY7XG4mIzQzO1x0dm9pZCAoKnRlc3RfcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XG4mIzQzO1x0dm9pZCAoKnRlc3RfcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydDE7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdG9wMTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0YXJ0MjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN0b3AyO1xuJiM0Mzt9IHRlc3RbTlJfQ1BVU107XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgb24gY3B1cyBcdTAwM2UgMCBhbmQgdGhlbiBhbGwgdGhlXG4mIzQzOyAqIG9iamVjdHMgbGF0ZXIgb24gY3B1IDBcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJlbW90ZV9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qIFBlcmZvcm0gbm8gYWxsb2NhdGlvbnMgb24gY3B1IDAgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0LVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTggKnA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xuJiM0MztcdFx0XHRwID0ga21hbGxvYyh0LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuJiM0MztcdFx0XHQvKiBVc2Ugb2JqZWN0ICovXG4mIzQzO1x0XHRcdCpwID0gMTc7XG4mIzQzO1x0XHR9IGVsc2VcbiYjNDM7XHRcdFx0cCA9IE5VTEw7XG4mIzQzO1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XHRpbnQgY3B1O1xuJiM0MztcbiYjNDM7XHQvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqL1xuJiM0MztcdGlmIChzbXBfcHJvY2Vzc29yX2lkKCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgdC1cdTAwM2Vjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0dTggKnAgPSB0ZXN0W2NwdV0udltpXTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICghcClcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdCpwID0gMTY7XG4mIzQzO1x0XHRcdGtmcmVlKHApO1xuJiM0MztcdFx0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgb24gY3B1IDAgYW5kIGZyZWUgdGhlbSBpbW1lZGlhdGVseSBvbiB0aGVcbiYjNDM7ICogb3RoZXIgcHJvY2Vzc29ycy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGFsbG9jX25fZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1x0Y2hhciAqcDtcbiYjNDM7XG4mIzQzO1x0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xuJiM0MztcdFx0LyogQ29uc3VtZXIgKi9cbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQgLyBudW1fb25saW5lX2NwdXMoKTsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0ZG8ge1xuJiM0MztcdFx0XHRcdHAgPSB0LVx1MDAzZXZbaV07XG4mIzQzO1x0XHRcdFx0aWYgKCFwKVxuJiM0MztcdFx0XHRcdFx0Y3B1X3JlbGF4KCk7XG4mIzQzO1x0XHRcdFx0ZWxzZVxuJiM0MztcdFx0XHRcdFx0KnAgPSAxNztcbiYjNDM7XHRcdFx0fSB3aGlsZSAoIXApO1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdFx0dC1cdTAwM2V2W2ldID0gTlVMTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1x0LyogUHJvZHVjZXIgKi9cbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0LVx1MDAzZWNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiYjNDM7XHRcdFx0aWYgKGNwdSkge1xuJiM0MztcdFx0XHRcdHAgPSBrbWFsbG9jKHQtXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0XHRcdFx0LyogVXNlIG9iamVjdCAqL1xuJiM0MztcdFx0XHRcdCpwID0gMTc7XG4mIzQzO1x0XHRcdFx0dGVzdFtjcHVdLnZbaV0gPSBwO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgYW5kIGxhdGVyIGZyZWUgdGhlbSBhbGwgYWdhaW5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1OCAqcCA9IGttYWxsb2ModC1cdTAwM2VzaXplLCBHRlBfS0VSTkVMKTtcbiYjNDM7XG4mIzQzO1x0XHQqcCA9IDE0O1xuJiM0MztcdFx0dC1cdTAwM2V2W2ldID0gcDtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuJiM0Mzt7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1OCAqcCA9IHQtXHUwMDNldltpXTtcbiYjNDM7XG4mIzQzO1x0XHQqcCA9IDEzO1xuJiM0MztcdFx0a2ZyZWUocCk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dTggKnAgPSBrbWFsbG9jKHQtXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdFx0KnAgPSAxMjtcbiYjNDM7XHRcdGtmcmVlKHApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGF0b21pY190IHRlc3RzX3J1bm5pbmc7XG4mIzQzO3N0YXRpYyBhdG9taWNfdCBwaGFzZTFfY29tcGxldGU7XG4mIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjEpO1xuJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24yKTtcbiYjNDM7c3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjb21wbGV0aW9uMyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHRlc3RfZnVuYyh2b2lkICpwcml2YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gcHJpdmF0ZTtcbiYjNDM7XHRjcHVtYXNrX3QgbmV3bWFzayA9IENQVV9NQVNLX05PTkU7XG4mIzQzO1xuJiM0MztcdGNwdW1hc2tfc2V0X2NwdSh0LVx1MDAzZWNwdSwgXHUwMDI2bmV3bWFzayk7XG4mIzQzO1x0c2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgXHUwMDI2bmV3bWFzayk7XG4mIzQzO1x0dC1cdTAwM2V2ID0ga2NhbGxvYyh0LVx1MDAzZWNvdW50LCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdGF0b21pY19pbmMoXHUwMDI2dGVzdHNfcnVubmluZyk7XG4mIzQzO1x0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMSk7XG4mIzQzO1x0dC1cdTAwM2VzdGFydDEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0dC1cdTAwM2V0ZXN0X3AxKHQpO1xuJiM0MztcdHQtXHUwMDNlc3RvcDEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0YXRvbWljX2luYyhcdTAwMjZwaGFzZTFfY29tcGxldGUpO1xuJiM0MztcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjIpO1xuJiM0MztcdHQtXHUwMDNlc3RhcnQyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdGlmICh0LVx1MDAzZXRlc3RfcDIpXG4mIzQzO1x0XHR0LVx1MDAzZXRlc3RfcDIodCk7XG4mIzQzO1x0dC1cdTAwM2VzdG9wMiA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRhdG9taWNfZGVjKFx1MDAyNnRlc3RzX3J1bm5pbmcpO1xuJiM0MztcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjMpO1xuJiM0MztcdGtmcmVlKHQtXHUwMDNldik7XG4mIzQzO1x0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcbiYjNDM7XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbiYjNDM7XHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLFxuJiM0MztcdFx0dm9pZCAoKnAyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksXG4mIzQzO1x0XHRpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGludCBjcHU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lMSA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB0aW1lMiA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHN1bTIgPSAwO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cGhhc2UxX2NvbXBsZXRlLCAwKTtcbiYjNDM7XHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjEpO1xuJiM0MztcdGluaXRfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMik7XG4mIzQzO1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24zKTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbiYjNDM7XHRcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IFx1MDAyNnRlc3RbY3B1XTtcbiYjNDM7XG4mIzQzO1x0XHR0LVx1MDAzZWNwdSA9IGNwdTtcbiYjNDM7XHRcdHQtXHUwMDNlY291bnQgPSBURVNUX0NPVU5UO1xuJiM0MztcdFx0dC1cdTAwM2V0ZXN0X3AxID0gcDE7XG4mIzQzO1x0XHR0LVx1MDAzZXRlc3RfcDIgPSBwMjtcbiYjNDM7XHRcdHQtXHUwMDNlc2l6ZSA9IHNpemU7XG4mIzQzO1x0XHR0LVx1MDAzZXRhc2sgPSBrdGhyZWFkX3J1bih0ZXN0X2Z1bmMsIHQsIFwmIzM0O3Rlc3QlZFwmIzM0OywgY3B1KTtcbiYjNDM7XHRcdGlmIChJU19FUlIodC1cdTAwM2V0YXNrKSkge1xuJiM0MztcdFx0XHRwcl9lcnIoXCYjMzQ7RmFpbGVkIHRvIHN0YXJ0IHRlc3QgZnVuY1xcblwmIzM0Oyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGFyZSBydW5uaW5nICovXG4mIzQzO1x0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNnRlc3RzX3J1bm5pbmcpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuJiM0MztcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xuJiM0MztcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4mIzQzO1x0fVxuJiM0MztcdGNvbXBsZXRlX2FsbChcdTAwMjZjb21wbGV0aW9uMSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDEgKi9cbiYjNDM7XHR3aGlsZSAoYXRvbWljX3JlYWQoXHUwMDI2cGhhc2UxX2NvbXBsZXRlKSBcdTAwM2MgbnVtX29ubGluZV9jcHVzKCkpIHtcbiYjNDM7XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbiYjNDM7XHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRjb21wbGV0ZV9hbGwoXHUwMDI2Y29tcGxldGlvbjIpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAyICovXG4mIzQzO1x0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNnRlc3RzX3J1bm5pbmcpKSB7XG4mIzQzO1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4mIzQzO1x0XHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24zKTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4mIzQzO1x0XHRrdGhyZWFkX3N0b3AodGVzdFtjcHVdLnRhc2spO1xuJiM0MztcbiYjNDM7XHRwcl9hbGVydChcJiMzNDslcyglZCk6XCYjMzQ7LCBuYW1lLCBzaXplKTtcbiYjNDM7XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuJiM0MztcdFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXHUwMDI2dGVzdFtjcHVdO1xuJiM0MztcbiYjNDM7XHRcdHRpbWUxID0gdC1cdTAwM2VzdG9wMSAtIHQtXHUwMDNlc3RhcnQxO1xuJiM0MztcdFx0dGltZTIgPSB0LVx1MDAzZXN0b3AyIC0gdC1cdTAwM2VzdGFydDI7XG4mIzQzO1x0XHRzdW0xICYjNDM7PSB0aW1lMTtcbiYjNDM7XHRcdHN1bTIgJiM0Mzs9IHRpbWUyO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDsgJWQ9JWx1XCYjMzQ7LCBjcHUsIHRpbWUxIC8gVEVTVF9DT1VOVCk7XG4mIzQzO1x0XHRpZiAocDIpXG4mIzQzO1x0XHRcdHByX2NvbnQoXCYjMzQ7LyVsdVwmIzM0OywgdGltZTIgLyBURVNUX0NPVU5UKTtcbiYjNDM7XHR9XG4mIzQzO1x0cHJfY29udChcJiMzNDsgQXZlcmFnZT0lbHVcJiMzNDssIHN1bTEgLyBudW1fb25saW5lX2NwdXMoKSAvIFRFU1RfQ09VTlQpO1xuJiM0MztcdGlmIChwMilcbiYjNDM7XHRcdHByX2NvbnQoXCYjMzQ7LyVsdVwmIzM0Oywgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XG4mIzQzO1x0cHJfY29udChcJiMzNDtcXG5cJiMzNDspO1xuJiM0MztcdHNjaGVkdWxlX3RpbWVvdXQoMjAwKTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgc2xhYl90ZXN0X2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHZvaWQgKip2ID0ga21hbGxvY19hcnJheShURVNUX0NPVU5ULCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0dW5zaWduZWQgaW50IGk7XG4mIzQzO1x0Y3ljbGVzX3QgdGltZTEsIHRpbWUyLCB0aW1lO1xuJiM0MztcdGludCByZW07XG4mIzQzO1x0aW50IHNpemU7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3Rlc3QgaW5pdFxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O1NpbmdsZSB0aHJlYWQgdGVzdGluZ1xcblwmIzM0Oyk7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7PT09PT09PT09PT09PT09PT09PT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDsxLiBLbWFsbG9jOiBSZXBlYXRlZGx5IGFsbG9jYXRlIHRoZW4gZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKHNpemUgPSA4OyBzaXplIFx1MDAzYz0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAyOyBzaXplIFx1MDAzY1x1MDAzYz0gMSkge1xuJiM0MztcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1OCAqcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdFx0XHQqcCA9IDIyO1xuJiM0MztcdFx0XHR2W2ldID0gcDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7JWkgdGltZXMga21hbGxvYyglZCkgXCYjMzQ7LCBpLCBzaXplKTtcbiYjNDM7XHRcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDstXHUwMDNlICVsbHUgY3ljbGVzIFwmIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7XG4mIzQzO1xuJiM0MztcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1OCAqcCA9IHZbaV07XG4mIzQzO1xuJiM0MztcdFx0XHQqcCA9IDIzO1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDtrZnJlZSBcJiMzNDspO1xuJiM0MztcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4mIzQzO1x0XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7Mi4gS21hbGxvYzogYWxsb2MvZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKHNpemUgPSA4OyBzaXplIFx1MDAzYz0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAyOyBzaXplIFx1MDAzY1x1MDAzYz0gMSkge1xuJiM0MztcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHR1OCAqcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdFx0XHRrZnJlZShwKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdFx0cHJfYWxlcnQoXCYjMzQ7JWkgdGltZXMga21hbGxvYyglZCkva2ZyZWUgXCYjMzQ7LCBpLCBzaXplKTtcbiYjNDM7XHRcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuJiM0MztcdFx0cHJfY29udChcJiMzNDstXHUwMDNlICVsbHUgY3ljbGVzXFxuXCYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbiYjNDM7XHR9XG4mIzQzO1x0a2ZyZWUodik7XG4mIzQzOyNpZmRlZiBDT05GSUdfU01QXG4mIzQzO1x0cHJfaW5mbyhcJiMzNDtDb25jdXJyZW50IGFsbG9jc1xcblwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDs9PT09PT09PT09PT09PT09PVxcblwmIzM0Oyk7XG4mIzQzO1x0Zm9yIChpID0gMzsgaSBcdTAwM2M9IFBBR0VfU0hJRlQ7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRkb19jb25jdXJyZW50X3Rlc3Qoa21hbGxvY19hbGxvY190aGVuX2ZyZWVfdGVzdF9wMSxcbiYjNDM7XHRcdFx0a21hbGxvY19hbGxvY190aGVuX2ZyZWVfdGVzdF9wMixcbiYjNDM7XHRcdFx0MSBcdTAwM2NcdTAwM2MgaSwgXCYjMzQ7S21hbGxvYyBOKmFsbG9jIE4qZnJlZVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcdGZvciAoaSA9IDM7IGkgXHUwMDNjPSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZG9fY29uY3VycmVudF90ZXN0KGttYWxsb2NfYWxsb2NfZnJlZV90ZXN0X3AxLCBOVUxMLFxuJiM0MztcdFx0XHQxIFx1MDAzY1x1MDAzYyBpLCBcJiMzNDtLbWFsbG9jIE4qKGFsbG9jIGZyZWUpXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHByX2luZm8oXCYjMzQ7UmVtb3RlIGZyZWUgdGVzdFxcblwmIzM0Oyk7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDs9PT09PT09PT09PT09PT09XFxuXCYjMzQ7KTtcbiYjNDM7XHRmb3IgKGkgPSAzOyBpIFx1MDAzYz0gUEFHRV9TSElGVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRvX2NvbmN1cnJlbnRfdGVzdChyZW1vdGVfZnJlZV90ZXN0X3AxLFxuJiM0MztcdFx0XHRcdHJlbW90ZV9mcmVlX3Rlc3RfcDIsXG4mIzQzO1x0XHRcdDEgXHUwMDNjXHUwMDNjIGksIFwmIzM0O04qcmVtb3RlIGZyZWVcJiMzNDspO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cHJfaW5mbyhcJiMzNDsxIGFsbG9jIE4gZnJlZSB0ZXN0XFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0Oz09PT09PT09PT09PT09PT09PT1cXG5cJiMzNDspO1xuJiM0MztcdGZvciAoaSA9IDM7IGkgXHUwMDNjPSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0ZG9fY29uY3VycmVudF90ZXN0KGFsbG9jX25fZnJlZV90ZXN0X3AxLFxuJiM0MztcdFx0XHRcdE5VTEwsXG4mIzQzO1x0XHRcdDEgXHUwMDNjXHUwMDNjIGksIFwmIzM0OzEgYWxsb2MgTiBmcmVlXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNsYWJfdGVzdF9leGl0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRwcl9hbGVydChcJiMzNDt0ZXN0IGV4aXRcXG5cJiMzNDspO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzttb2R1bGVfaW5pdChzbGFiX3Rlc3RfaW5pdClcbiYjNDM7bW9kdWxlX2V4aXQoc2xhYl90ZXN0X2V4aXQpXG4mIzQzO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0NocmlzdG9waCBMYW1ldGVyIGFuZCBNYXRoaWV1IERlc25veWVyc1wmIzM0Oyk7XG4mIzQzO01PRFVMRV9ERVNDUklQVElPTihcJiMzNDtTTEFCIHRlc3RcJiMzNDspO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3Ztc3RhdC5jIGIvbGliL3Rlc3Rfdm1zdGF0LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi5mNjNmNDM5YWI5ZDJhXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF92bXN0YXQuY1xuQEAgLTAsMCAmIzQzOzEsOTUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogVGVzdCBtb2R1bGUgZm9yIGluLWtlcm5lbCBzeW50aGV0aWMgdm0gc3RhdGlzdGljcyBwZXJmb3JtYW5jZS5cbiYjNDM7ICpcbiYjNDM7ICogZXhlY3V0ZVxuJiM0MzsgKlxuJiM0MzsgKlx0bW9kcHJvYmUgdGVzdF92bXN0YXRcbiYjNDM7ICpcbiYjNDM7ICogdG8gcnVuIHRoaXMgdGVzdFxuJiM0MzsgKlxuJiM0MzsgKiAoQykgMjAwOSBMaW51eCBGb3VuZGF0aW9uLCBDaHJpc3RvcGggTGFtZXRlciBcdTAwM2NjbEBnZW50d28ub3JnXHUwMDNlXG4mIzQzOyAqL1xuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21tLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjYXNtL3RpbWV4LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMFxuJiM0MztcbiYjNDM7c3RhdGljIGludCB2bXN0YXRfdGVzdF9pbml0KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XG4mIzQzO1x0aW50IHJlbTtcbiYjNDM7XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O1ZNc3RhdCB0ZXN0aW5nXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDs9PT09PT09PT09PT09PT09PT09PT1cXG5cJiMzNDspO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0OzEuIGluY196b25lX3BhZ2Vfc3RhdGUoKSB0aGVuIGRlY196b25lX3BhZ2Vfc3RhdGUoKVxcblwmIzM0Oyk7XG4mIzQzO1x0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspXG4mIzQzO1x0XHRpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZSRUVfQ01BX1BBR0VTKTtcbiYjNDM7XG4mIzQzO1x0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4mIzQzO1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0OyVpIHRpbWVzIGluY196b25lX3BhZ2Vfc3RhdGUoKSBcJiMzNDssIGkpO1xuJiM0MztcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuJiM0MztcdHByX2NvbnQoXCYjMzQ7LVx1MDAzZSAlbGx1IGN5Y2xlcyBcJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcbiYjNDM7XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdF9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XG4mIzQzO1xuJiM0MztcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuJiM0MztcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xuJiM0MztcbiYjNDM7XHRwcl9jb250KFwmIzM0O19fZGVjX3pfcF9zKCkgXCYjMzQ7KTtcbiYjNDM7XHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbiYjNDM7XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbiYjNDM7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7Mi4gaW5jX3pvbmVfcGFnZV9zdGF0ZSgpL2RlY196b25lX3BhZ2Vfc3RhdGUoKVxcblwmIzM0Oyk7XG4mIzQzO1x0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpO1xuJiM0MztcdFx0ZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbiYjNDM7XG4mIzQzO1x0cHJfYWxlcnQoXCYjMzQ7JWkgdGltZXMgaW5jL2RlYyBcJiMzNDssIGkpO1xuJiM0MztcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuJiM0MztcdHByX2NvbnQoXCYjMzQ7LVx1MDAzZSAlbGx1IGN5Y2xlc1xcblwmIzM0OywgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuJiM0MztcbiYjNDM7XHRwcl9hbGVydChcJiMzNDszLiBjb3VudF92bV9ldmVudCgpXFxuXCYjMzQ7KTtcbiYjNDM7XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNvdW50X3ZtX2V2ZW50KFNMQUJTX1NDQU5ORUQpO1xuJiM0MztcbiYjNDM7XHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcbiYjNDM7XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbiYjNDM7XG4mIzQzO1x0Y291bnRfdm1fZXZlbnRzKFNMQUJTX1NDQU5ORUQsIC1URVNUX0NPVU5UKTtcbiYjNDM7XHRwcl9hbGVydChcJiMzNDslaSBjb3VudF92bV9ldmVudHMgXCYjMzQ7LCBpKTtcbiYjNDM7XHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbiYjNDM7XHRwcl9jb250KFwmIzM0Oy1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cJiMzNDssICAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbiYjNDM7XHRfX2ZyZWVfcGFnZShwYWdlKTtcbiYjNDM7XHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHZtc3RhdF90ZXN0X2V4aXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHByX2FsZXJ0KFwmIzM0O3Rlc3QgZXhpdFxcblwmIzM0Oyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO21vZHVsZV9pbml0KHZtc3RhdF90ZXN0X2luaXQpXG4mIzQzO21vZHVsZV9leGl0KHZtc3RhdF90ZXN0X2V4aXQpXG4mIzQzO1xuJiM0MztNT0RVTEVfTElDRU5TRShcJiMzNDtHUExcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0NocmlzdG9waCBMYW1ldGVyXCYjMzQ7KTtcbiYjNDM7TU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O1ZNIHN0YXRpc3RpY3MgdGVzdFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6MDA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODA4ZmY2NDM5MzViOGMzNmEzNjQwZWY2NjRhMWZlNzdkZmQxMDU0ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDEgMTM6MDA6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnCmluZGV4IDEyNDRkY2FjMjI5NGEuLjcwODczYWFjNjc1ZmEgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnLmRlYnVnCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi9LY29uZmlnLmRlYnVnCkBAIC0zNDI3LDYgJiM0MzszNDI3LDM2IEBAIGNvbmZpZyBURVNUX0tFWEVDX0hBTkRPVkVSCiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKJiM0Mztjb25maWcgVEVTVF9WTVNUQVQKJiM0MzsJdHJpc3RhdGUgJiMzNDtWTSBTdGF0aXN0aWNzIEJlbmNobWFyayYjMzQ7CiYjNDM7CWRlZmF1bHQgbgomIzQzOwloZWxwCiYjNDM7CSAgQSBzeW50aGV0aWMgYmVuY2htYXJrIG1lYXN1cmluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgVk0gc3RhdGlzdGljcywKJiM0MzsJICB1c2VmdWwgdG8gYW5hbHl6ZSBhbnkgaW1wcm92ZW1lbnRzIG9yIHJlZ3Jlc3Npb25zIGluIGZ1bmN0aW9ucyB0aGF0CiYjNDM7CSAgYXJlIGZyZXF1ZW50bHkgdXNlZCBpbiBob3QgY29kZSBwYXRocy4KJiM0MzsKJiM0MzsJICBJZiB1bnN1cmUsIHNheSBOLgomIzQzOwomIzQzO2NvbmZpZyBURVNUX1NMQUIKJiM0MzsJdHJpc3RhdGUgJiMzNDtTbGFiIEFsbG9jYXRvciBCZW5jaG1hcmsmIzM0OwomIzQzOwlkZWZhdWx0IG4KJiM0MzsJaGVscAomIzQzOwkgIEEgc3ludGhldGljIGJlbmNobWFyayB0aGF0IG1lYXN1cmVzIHNsYWIgYWxsb2NhdG9yIHBlcmZvcm1hbmNlLAomIzQzOwkgIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzaW5nbGUgdGhyZWFkIHRlc3RpbmcgYnkgcmVwZWF0ZWRseQomIzQzOwkgIGFsbG9jYXRpbmcgdGhlbiBmcmVlaW5nIG1lbW9yeSBhbmQgY29uY3VycmVudCBvciByZW1vdGUgYWxsb2NhdGlvbnMuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzYXkgTi4KJiM0MzsKJiM0Mztjb25maWcgVEVTVF9QQUdFQUxMT0MKJiM0MzsJdHJpc3RhdGUgJiMzNDtQYWdlIEFsbG9jYXRvciBCZW5jaG1hcmsmIzM0OwomIzQzOwlkZWZhdWx0IG4KJiM0MzsJaGVscAomIzQzOwkgIEEgYmVuY2htYXJrIG1lYXN1cmluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdG9yLCB1c2VmdWwKJiM0MzsJICB0byBhbmFseXplIGFueSBpbXByb3ZlbWVudHMgb3IgcmVncmVzc2lvbnMgd2hlbiByZXBlYXRlZGx5IGFsbG9jYXRpbmcKJiM0MzsJICBhbmQgZnJlZWluZyBtZW1vcnkgYXMgd2VsbCBhcyBjb25jdXJyZW50IGFuZCByZW1vdGUgYWxsb2NhdGlvbnMuCiYjNDM7CiYjNDM7CSAgSWYgdW5zdXJlLCBzYXkgTi4KJiM0MzsKIGNvbmZpZyBSQVRFTElNSVRfS1VOSVRfVEVTVAogCXRyaXN0YXRlICYjMzQ7S1VuaXQgVGVzdCBmb3IgY29ycmVjdG5lc3MgYW5kIHN0cmVzcyBvZiByYXRlbGltaXQmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTCiAJZGVwZW5kcyBvbiBLVU5JVApkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlCmluZGV4IDdmNzVjYzZlZGY5NGEuLjE3YzE2NGUxNDVhZDQgMTAwNjQ0Ci0tLSBhL2xpYi9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9saWIvTWFrZWZpbGUKQEAgLTEwNSw2ICYjNDM7MTA1LDkgQEAgb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgJiM0Mzs9IHRlc3RfZnJlZV9wYWdlcy5vCiBvYmotJChDT05GSUdfVEVTVF9SRUZfVFJBQ0tFUikgJiM0Mzs9IHRlc3RfcmVmX3RyYWNrZXIubwogb2JqLSQoQ09ORklHX1RFU1RfT0JKUE9PTCkgJiM0Mzs9IHRlc3Rfb2JqcG9vbC5vCiBvYmotJChDT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUikgJiM0Mzs9IHRlc3Rfa2hvLm8KJiM0MztvYmotJChDT05GSUdfVEVTVF9WTVNUQVQpICYjNDM7PSB0ZXN0X3Ztc3RhdC5vCiYjNDM7b2JqLSQoQ09ORklHX1RFU1RfU0xBQikgJiM0Mzs9IHRlc3Rfc2xhYi5vCiYjNDM7b2JqLSQoQ09ORklHX1RFU1RfUEFHRUFMTE9DKSAmIzQzOz0gdGVzdF9wYWdlYWxsb2MubwogCiBvYmotJChDT05GSUdfVEVTVF9GUFUpICYjNDM7PSB0ZXN0X2ZwdS5vCiB0ZXN0X2ZwdS15IDo9IHRlc3RfZnB1X2dsdWUubyB0ZXN0X2ZwdV9pbXBsLm8KZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3BhZ2VhbGxvYy5jIGIvbGliL3Rlc3RfcGFnZWFsbG9jLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA1MTRkZjUyYzViMAotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3BhZ2VhbGxvYy5jCkBAIC0wLDAgJiM0MzsxLDMzNyBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBUZXN0IG1vZHVsZSBmb3IgaW4ga2VybmVsIHN5bnRoZXRpYyBwYWdlIGFsbG9jYXRvciB0ZXN0aW5nLgomIzQzOyAqCiYjNDM7ICogQ29tcGlsZWQgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgbmVlZHMgdG8gYmUgbG9hZGVkIHRvIHJ1bi4KJiM0MzsgKgomIzQzOyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24sIENocmlzdG9waCBMYW1ldGVyICZsdDtjbEBnZW50d28ub3JnJmd0OwomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9qaWZmaWVzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2luaXQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW9kdWxlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL3RpbWV4LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0NPVU5UIDEwMDAKJiM0MzsKJiM0MzsjZGVmaW5lIENPTkNVUlJFTlRfTUFYX09SREVSIDYKJiM0MzsKJiM0MzsjaWZkZWYgQ09ORklHX1NNUAomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rdGhyZWFkLmgmZ3Q7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCB7CiYjNDM7CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKJiM0MzsJaW50IGNwdTsKJiM0MzsJaW50IG9yZGVyOwomIzQzOwlpbnQgY291bnQ7CiYjNDM7CXN0cnVjdCBwYWdlICoqdjsKJiM0MzsJdm9pZCAoKnRlc3RfcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7CiYjNDM7CXZvaWQgKCp0ZXN0X3AyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0MTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdG9wMTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydDI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RvcDI7CiYjNDM7fSB0ZXN0W05SX0NQVVNdOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdXMgJmd0OyAwIGFuZCB0aGVuIGFsbCB0aGUKJiM0MzsgKiBvYmplY3RzIGxhdGVyIG9uIGNwdSAwCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogUGVyZm9ybSBubyBhbGxvY2F0aW9ucyBvbiBjcHUgMCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlzdHJ1Y3QgcGFnZSAqcDsKJiM0MzsKJiM0MzsJCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkpIHsKJiM0MzsJCQlwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtJmd0O29yZGVyKTsKJiM0MzsJCQkvKiBVc2Ugb2JqZWN0ICovCiYjNDM7CQkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTcsIDQpOwomIzQzOwkJfSBlbHNlCiYjNDM7CQkJcCA9IE5VTEw7CiYjNDM7CQl0LSZndDt2W2ldID0gcDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwlpbnQgY3B1OwomIzQzOwomIzQzOwkvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqLwomIzQzOwlpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB0LSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgcGFnZSAqcCA9IHRlc3RbY3B1XS52W2ldOwomIzQzOwomIzQzOwkJCWlmICghcCkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJX19mcmVlX3BhZ2VzKHAsIHQtJmd0O29yZGVyKTsKJiM0MzsJCX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgYW5kIGxhdGVyIGZyZWUgdGhlbSBhbGwgYWdhaW4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhbGxvY190aGVuX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IHQtJmd0O2NvdW50OyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC0mZ3Q7b3JkZXIpOwomIzQzOwomIzQzOwkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTQsIDQpOwomIzQzOwkJdC0mZ3Q7dltpXSA9IHA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIoc3RydWN0IHRlc3Rfc3RydWN0ICp0KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0LSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXN0cnVjdCBwYWdlICpwID0gdC0mZ3Q7dltpXTsKJiM0MzsKJiM0MzsJCV9fZnJlZV9wYWdlcyhwLCB0LSZndDtvcmRlcik7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhbGxvY19mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC0mZ3Q7b3JkZXIpOwomIzQzOwomIzQzOwkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTIsIDQpOwomIzQzOwkJX19mcmVlX3BhZ2VzKHAsIHQtJmd0O29yZGVyKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYXRvbWljX3QgdGVzdHNfcnVubmluZzsKJiM0MztzdGF0aWMgYXRvbWljX3QgcGhhc2UxX2NvbXBsZXRlOwomIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjEpOwomIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjIpOwomIzQzO3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjMpOwomIzQzOwomIzQzO3N0YXRpYyBpbnQgdGVzdF9mdW5jKHZvaWQgKnByaXZhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBwcml2YXRlOwomIzQzOwljcHVtYXNrX3QgbmV3bWFzayA9IENQVV9NQVNLX05PTkU7CiYjNDM7CiYjNDM7CWNwdW1hc2tfc2V0X2NwdSh0LSZndDtjcHUsICZhbXA7bmV3bWFzayk7CiYjNDM7CXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZhbXA7bmV3bWFzayk7CiYjNDM7CXQtJmd0O3YgPSBrbWFsbG9jX2FycmF5KHQtJmd0O2NvdW50LCBzaXplb2Yoc3RydWN0IHBhZ2UgKiksIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwlhdG9taWNfaW5jKCZhbXA7dGVzdHNfcnVubmluZyk7CiYjNDM7CXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDtjb21wbGV0aW9uMSk7CiYjNDM7CXQtJmd0O3N0YXJ0MSA9IGdldF9jeWNsZXMoKTsKJiM0MzsJdC0mZ3Q7dGVzdF9wMSh0KTsKJiM0MzsJdC0mZ3Q7c3RvcDEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtwaGFzZTFfY29tcGxldGUpOwomIzQzOwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwl0LSZndDtzdGFydDIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWlmICh0LSZndDt0ZXN0X3AyKQomIzQzOwkJdC0mZ3Q7dGVzdF9wMih0KTsKJiM0MzsJdC0mZ3Q7c3RvcDIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWF0b21pY19kZWMoJmFtcDt0ZXN0c19ydW5uaW5nKTsKJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2NvbXBsZXRpb24zKTsKJiM0MzsJa2ZyZWUodC0mZ3Q7dik7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiYjNDM7CQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLAomIzQzOwkJdm9pZCAoKnAyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksCiYjNDM7CQlpbnQgb3JkZXIsIGNvbnN0IGNoYXIgKm5hbWUpCiYjNDM7ewomIzQzOwlpbnQgY3B1OwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWUxID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lMiA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3VtMSA9IDA7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3VtMiA9IDA7CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDt0ZXN0c19ydW5uaW5nLCAwKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3BoYXNlMV9jb21wbGV0ZSwgMCk7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO2NvbXBsZXRpb24xKTsKJiM0MzsJaW5pdF9jb21wbGV0aW9uKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDtjb21wbGV0aW9uMyk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7CiYjNDM7CQlzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSAmYW1wO3Rlc3RbY3B1XTsKJiM0MzsKJiM0MzsJCXQtJmd0O2NwdSA9IGNwdTsKJiM0MzsJCXQtJmd0O2NvdW50ID0gVEVTVF9DT1VOVDsKJiM0MzsJCXQtJmd0O3Rlc3RfcDEgPSBwMTsKJiM0MzsJCXQtJmd0O3Rlc3RfcDIgPSBwMjsKJiM0MzsJCXQtJmd0O29yZGVyID0gb3JkZXI7CiYjNDM7CQl0LSZndDt0YXNrID0ga3RocmVhZF9ydW4odGVzdF9mdW5jLCB0LCAmIzM0O3Rlc3QlZCYjMzQ7LCBjcHUpOwomIzQzOwkJaWYgKElTX0VSUih0LSZndDt0YXNrKSkgewomIzQzOwkJCXByX2VycigmIzM0O0ZhaWxlZCB0byBzdGFydCB0ZXN0IGZ1bmNcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgKi8KJiM0MzsJd2hpbGUgKGF0b21pY19yZWFkKCZhbXA7dGVzdHNfcnVubmluZykgJmx0OyBudW1fb25saW5lX2NwdXMoKSkgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwomIzQzOwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CiYjNDM7CX0KJiM0MzsJY29tcGxldGVfYWxsKCZhbXA7Y29tcGxldGlvbjEpOwomIzQzOwomIzQzOwkvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAxICovCiYjNDM7CXdoaWxlIChhdG9taWNfcmVhZCgmYW1wO3BoYXNlMV9jb21wbGV0ZSkgJmx0OyBudW1fb25saW5lX2NwdXMoKSkgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwomIzQzOwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CiYjNDM7CX0KJiM0MzsJY29tcGxldGVfYWxsKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwomIzQzOwkvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAyICovCiYjNDM7CXdoaWxlIChhdG9taWNfcmVhZCgmYW1wO3Rlc3RzX3J1bm5pbmcpKSB7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiYjNDM7CQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKJiM0MzsJfQomIzQzOwljb21wbGV0ZV9hbGwoJmFtcDtjb21wbGV0aW9uMyk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQomIzQzOwkJa3RocmVhZF9zdG9wKHRlc3RbY3B1XS50YXNrKTsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDslcyglZCk6JiMzNDssIG5hbWUsIG9yZGVyKTsKJiM0MzsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKJiM0MzsJCXN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9ICZhbXA7dGVzdFtjcHVdOwomIzQzOwomIzQzOwkJdGltZTEgPSB0LSZndDtzdG9wMSAtIHQtJmd0O3N0YXJ0MTsKJiM0MzsJCXRpbWUyID0gdC0mZ3Q7c3RvcDIgLSB0LSZndDtzdGFydDI7CiYjNDM7CQlzdW0xICYjNDM7PSB0aW1lMTsKJiM0MzsJCXN1bTIgJiM0Mzs9IHRpbWUyOwomIzQzOwkJcHJfY29udCgmIzM0OyAlZD0lbHUmIzM0OywgY3B1LCB0aW1lMSAvIFRFU1RfQ09VTlQpOwomIzQzOwkJaWYgKHAyKQomIzQzOwkJCXByX2NvbnQoJiMzNDsvJWx1JiMzNDssIHRpbWUyIC8gVEVTVF9DT1VOVCk7CiYjNDM7CX0KJiM0MzsJcHJfY29udCgmIzM0OyBBdmVyYWdlPSVsdSYjMzQ7LCBzdW0xIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTsKJiM0MzsJaWYgKHAyKQomIzQzOwkJcHJfY29udCgmIzM0Oy8lbHUmIzM0Oywgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7CiYjNDM7CXByX2NvbnQoJiMzNDtcbiYjMzQ7KTsKJiM0MzsJc2NoZWR1bGVfdGltZW91dCgyMDApOwomIzQzO30KJiM0MzsjZW5kaWYKJiM0MzsKJiM0MztzdGF0aWMgaW50IHBhZ2VhbGxvY190ZXN0X2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXZvaWQgKip2ID0ga21hbGxvY19hcnJheShURVNUX0NPVU5ULCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwljeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7CiYjNDM7CWludCByZW07CiYjNDM7CWludCBvcmRlcjsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDt0ZXN0IGluaXRcbiYjMzQ7KTsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDtTaW5nbGUgdGhyZWFkIHRlc3RpbmdcbiYjMzQ7KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDs9PT09PT09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDsxLiBSZXBlYXRlZGx5IGFsbG9jYXRlIHRoZW4gZnJlZSB0ZXN0XG4mIzM0Oyk7CiYjNDM7CWZvciAob3JkZXIgPSAwOyBvcmRlciAmbHQ7PSBNQVhfUEFHRV9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7CiYjNDM7CQl0aW1lMSA9IGdldF9jeWNsZXMoKTsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsCiYjNDM7CQkJCQkJb3JkZXIpOwomIzQzOwomIzQzOwkJCWlmICghcCkgewomIzQzOwkJCQlwcl9lcnIoJiMzNDtDYW5ub3QgYWxsb2NhdGUgb3JkZXI9JWRcbiYjMzQ7LCBvcmRlcik7CiYjNDM7CQkJCWJyZWFrOwomIzQzOwkJCX0KJiM0MzsKJiM0MzsJCQkvKiBUb3VjaCBwYWdlICovCiYjNDM7CQkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMjIsIDQpOwomIzQzOwkJCXZbaV0gPSBwOwomIzQzOwkJfQomIzQzOwkJdGltZTIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQl0aW1lID0gdGltZTIgLSB0aW1lMTsKJiM0MzsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7JWkgdGltZXMgYWxsb2NfcGFnZSgsJWQpICYjMzQ7LCBpLCBvcmRlcik7CiYjNDM7CQl0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgJmFtcDtyZW0pOwomIzQzOwkJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzICYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTsKJiM0MzsKJiM0MzsJCXRpbWUxID0gZ2V0X2N5Y2xlcygpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJc3RydWN0IHBhZ2UgKnAgPSB2W2ldOwomIzQzOwomIzQzOwkJCV9fZnJlZV9wYWdlcyhwLCBvcmRlcik7CiYjNDM7CQl9CiYjNDM7CQl0aW1lMiA9IGdldF9jeWNsZXMoKTsKJiM0MzsJCXRpbWUgPSB0aW1lMiAtIHRpbWUxOwomIzQzOwomIzQzOwkJcHJfY29udCgmIzM0O19fZnJlZV9wYWdlcygsJWQpJiMzNDssIG9yZGVyKTsKJiM0MzsJCXRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCAmYW1wO3JlbSk7CiYjNDM7CQlwcl9jb250KCYjMzQ7LSZndDsgJWxsdSBjeWNsZXNcbiYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9hbGVydCgmIzM0OzIuIGFsbG9jL2ZyZWUgdGVzdFxuJiMzNDspOwomIzQzOwlmb3IgKG9yZGVyID0gMDsgb3JkZXIgJmx0Oz0gTUFYX1BBR0VfT1JERVI7IG9yZGVyJiM0MzsmIzQzOykgewomIzQzOwkJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLAomIzQzOwkJCQkJCSAgICAgb3JkZXIpOwomIzQzOwkJCV9fZnJlZV9wYWdlcyhwLCBvcmRlcik7CiYjNDM7CQl9CiYjNDM7CQl0aW1lMiA9IGdldF9jeWNsZXMoKTsKJiM0MzsJCXRpbWUgPSB0aW1lMiAtIHRpbWUxOwomIzQzOwomIzQzOwkJcHJfYWxlcnQoJiMzNDslaSB0aW1lcyBhbGxvYyggLCVkKS9mcmVlICYjMzQ7LCBpLCBvcmRlcik7CiYjNDM7CQl0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgJmFtcDtyZW0pOwomIzQzOwkJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzXG4mIzM0OywgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7CiYjNDM7CX0KJiM0MzsJa2ZyZWUodik7CiYjNDM7I2lmZGVmIENPTkZJR19TTVAKJiM0MzsJcHJfaW5mbygmIzM0O0NvbmN1cnJlbnQgYWxsb2NzXG4mIzM0Oyk7CiYjNDM7CXByX2luZm8oJiMzNDs9PT09PT09PT09PT09PT09PVxuJiMzNDspOwomIzQzOwlmb3IgKG9yZGVyID0gMDsgb3JkZXIgJmx0OyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlkb19jb25jdXJyZW50X3Rlc3QoYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEsCiYjNDM7CQkJYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIsCiYjNDM7CQkJb3JkZXIsICYjMzQ7UGFnZSBhbGxvYyBOKmFsbG9jIE4qZnJlZSYjMzQ7KTsKJiM0MzsJfQomIzQzOwlwcl9pbmZvKCYjMzQ7LS0tLUZhc3RwYXRoLS0tXG4mIzM0Oyk7CiYjNDM7CWZvciAob3JkZXIgPSAwOyBvcmRlciAmbHQ7IENPTkNVUlJFTlRfTUFYX09SREVSOyBvcmRlciYjNDM7JiM0MzspIHsKJiM0MzsJCWRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY19mcmVlX3Rlc3RfcDEsIE5VTEwsCiYjNDM7CQkJb3JkZXIsICYjMzQ7UGFnZSBOKihhbGxvYyBmcmVlKSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOwlwcl9pbmZvKCYjMzQ7UmVtb3RlIGZyZWUgdGVzdFxuJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7PT09PT09PT09PT09PT09PVxuJiMzNDspOwomIzQzOwlmb3IgKG9yZGVyID0gMDsgb3JkZXIgJmx0OyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXImIzQzOyYjNDM7KSB7CiYjNDM7CQlkb19jb25jdXJyZW50X3Rlc3QocmVtb3RlX2ZyZWVfdGVzdF9wMSwKJiM0MzsJCQkJcmVtb3RlX2ZyZWVfdGVzdF9wMiwKJiM0MzsJCQlvcmRlciwgJiMzNDtOKnJlbW90ZSBmcmVlJiMzNDspOwomIzQzOwl9CiYjNDM7CiYjNDM7I2VuZGlmCiYjNDM7CiYjNDM7CXJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi8KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcGFnZWFsbG9jX3Rlc3RfZXhpdCh2b2lkKQomIzQzO3sKJiM0MzsJcHJfYWxlcnQoJiMzNDt0ZXN0IGV4aXRcbiYjMzQ7KTsKJiM0Mzt9CiYjNDM7CiYjNDM7bW9kdWxlX2luaXQocGFnZWFsbG9jX3Rlc3RfaW5pdCkKJiM0Mzttb2R1bGVfZXhpdChwYWdlYWxsb2NfdGVzdF9leGl0KQomIzQzOwomIzQzO01PRFVMRV9MSUNFTlNFKCYjMzQ7R1BMJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtDaHJpc3RvcGggTGFtZXRlciYjMzQ7KTsKJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtwYWdlIGFsbG9jYXRvciBwZXJmb3JtYW5jZSB0ZXN0JiMzNDspOwpkaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfc2xhYi5jIGIvbGliL3Rlc3Rfc2xhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmE0M2IwZDczZGFhYjkKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9saWIvdGVzdF9zbGFiLmMKQEAgLTAsMCAmIzQzOzEsMzc1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIFRlc3QgbW9kdWxlIGZvciBzeW50aGV0aWMgaW4ga2VybmVsIHNsYWIgYWxsb2NhdG9yIHRlc3RpbmcuCiYjNDM7ICoKJiM0MzsgKiBUaGUgdGVzdCBpcyB0cmlnZ2VyZWQgYnkgbG9hZGluZyB0aGUgbW9kdWxlICh3aGljaCB3aWxsIGZhaWwpLgomIzQzOyAqCiYjNDM7ICogKEMpIDIwMDkgTGludXggRm91bmRhdGlvbiAmbHQ7Y2xAZ2VudHdvLm9yZyZndDsKJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvamlmZmllcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jb21waWxlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2FzbS90aW1leC5oJmd0OwomIzQzOwomIzQzOyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMAomIzQzOwomIzQzOyNpZmRlZiBDT05GSUdfU01QCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NvbXBsZXRpb24uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2t0aHJlYWQuaCZndDsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHsKJiM0MzsJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwomIzQzOwlpbnQgY3B1OwomIzQzOwlpbnQgc2l6ZTsKJiM0MzsJaW50IGNvdW50OwomIzQzOwl2b2lkICoqdjsKJiM0MzsJdm9pZCAoKnRlc3RfcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7CiYjNDM7CXZvaWQgKCp0ZXN0X3AyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpOwomIzQzOwl1bnNpZ25lZCBsb25nIHN0YXJ0MTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdG9wMTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydDI7CiYjNDM7CXVuc2lnbmVkIGxvbmcgc3RvcDI7CiYjNDM7fSB0ZXN0W05SX0NQVVNdOwomIzQzOwomIzQzOy8qCiYjNDM7ICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdXMgJmd0OyAwIGFuZCB0aGVuIGFsbCB0aGUKJiM0MzsgKiBvYmplY3RzIGxhdGVyIG9uIGNwdSAwCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyogUGVyZm9ybSBubyBhbGxvY2F0aW9ucyBvbiBjcHUgMCAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1OCAqcDsKJiM0MzsKJiM0MzsJCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkpIHsKJiM0MzsJCQlwID0ga21hbGxvYyh0LSZndDtzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsJCQkvKiBVc2Ugb2JqZWN0ICovCiYjNDM7CQkJKnAgPSAxNzsKJiM0MzsJCX0gZWxzZQomIzQzOwkJCXAgPSBOVUxMOwomIzQzOwkJdC0mZ3Q7dltpXSA9IHA7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJLyogQWxsIGZyZWVzIGFyZSBjb21wbGV0ZWQgb24gY3B1IHplcm8gKi8KJiM0MzsJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdTggKnAgPSB0ZXN0W2NwdV0udltpXTsKJiM0MzsKJiM0MzsJCQlpZiAoIXApCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCSpwID0gMTY7CiYjNDM7CQkJa2ZyZWUocCk7CiYjNDM7CQl9CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdSAwIGFuZCBmcmVlIHRoZW0gaW1tZWRpYXRlbHkgb24gdGhlCiYjNDM7ICogb3RoZXIgcHJvY2Vzc29ycy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBhbGxvY19uX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsJaW50IGNwdTsKJiM0MzsJY2hhciAqcDsKJiM0MzsKJiM0MzsJaWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkgewomIzQzOwkJLyogQ29uc3VtZXIgKi8KJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB0LSZndDtjb3VudCAvIG51bV9vbmxpbmVfY3B1cygpOyBpJiM0MzsmIzQzOykgewomIzQzOwkJCWRvIHsKJiM0MzsJCQkJcCA9IHQtJmd0O3ZbaV07CiYjNDM7CQkJCWlmICghcCkKJiM0MzsJCQkJCWNwdV9yZWxheCgpOwomIzQzOwkJCQllbHNlCiYjNDM7CQkJCQkqcCA9IDE3OwomIzQzOwkJCX0gd2hpbGUgKCFwKTsKJiM0MzsJCQlrZnJlZShwKTsKJiM0MzsJCQl0LSZndDt2W2ldID0gTlVMTDsKJiM0MzsJCX0KJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwkvKiBQcm9kdWNlciAqLwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewomIzQzOwkJCWlmIChjcHUpIHsKJiM0MzsJCQkJcCA9IGttYWxsb2ModC0mZ3Q7c2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CQkJCS8qIFVzZSBvYmplY3QgKi8KJiM0MzsJCQkJKnAgPSAxNzsKJiM0MzsJCQkJdGVzdFtjcHVdLnZbaV0gPSBwOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBhbmQgbGF0ZXIgZnJlZSB0aGVtIGFsbCBhZ2FpbgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyB0LSZndDtjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXU4ICpwID0ga21hbGxvYyh0LSZndDtzaXplLCBHRlBfS0VSTkVMKTsKJiM0MzsKJiM0MzsJCSpwID0gMTQ7CiYjNDM7CQl0LSZndDt2W2ldID0gcDsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBrbWFsbG9jX2FsbG9jX3RoZW5fZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgdC0mZ3Q7Y291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1OCAqcCA9IHQtJmd0O3ZbaV07CiYjNDM7CiYjNDM7CQkqcCA9IDEzOwomIzQzOwkJa2ZyZWUocCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBrbWFsbG9jX2FsbG9jX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl1OCAqcCA9IGttYWxsb2ModC0mZ3Q7c2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CiYjNDM7CQkqcCA9IDEyOwomIzQzOwkJa2ZyZWUocCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGF0b21pY190IHRlc3RzX3J1bm5pbmc7CiYjNDM7c3RhdGljIGF0b21pY190IHBoYXNlMV9jb21wbGV0ZTsKJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24xKTsKJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24yKTsKJiM0MztzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24zKTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IHRlc3RfZnVuYyh2b2lkICpwcml2YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gcHJpdmF0ZTsKJiM0MzsJY3B1bWFza190IG5ld21hc2sgPSBDUFVfTUFTS19OT05FOwomIzQzOwomIzQzOwljcHVtYXNrX3NldF9jcHUodC0mZ3Q7Y3B1LCAmYW1wO25ld21hc2spOwomIzQzOwlzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCAmYW1wO25ld21hc2spOwomIzQzOwl0LSZndDt2ID0ga2NhbGxvYyh0LSZndDtjb3VudCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwlhdG9taWNfaW5jKCZhbXA7dGVzdHNfcnVubmluZyk7CiYjNDM7CXdhaXRfZm9yX2NvbXBsZXRpb24oJmFtcDtjb21wbGV0aW9uMSk7CiYjNDM7CXQtJmd0O3N0YXJ0MSA9IGdldF9jeWNsZXMoKTsKJiM0MzsJdC0mZ3Q7dGVzdF9wMSh0KTsKJiM0MzsJdC0mZ3Q7c3RvcDEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWF0b21pY19pbmMoJmFtcDtwaGFzZTFfY29tcGxldGUpOwomIzQzOwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwl0LSZndDtzdGFydDIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWlmICh0LSZndDt0ZXN0X3AyKQomIzQzOwkJdC0mZ3Q7dGVzdF9wMih0KTsKJiM0MzsJdC0mZ3Q7c3RvcDIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWF0b21pY19kZWMoJmFtcDt0ZXN0c19ydW5uaW5nKTsKJiM0MzsJd2FpdF9mb3JfY29tcGxldGlvbigmYW1wO2NvbXBsZXRpb24zKTsKJiM0MzsJa2ZyZWUodC0mZ3Q7dik7CiYjNDM7CXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiYjNDM7CQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLAomIzQzOwkJdm9pZCAoKnAyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksCiYjNDM7CQlpbnQgc2l6ZSwgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWludCBjcHU7CiYjNDM7CXVuc2lnbmVkIGxvbmcgdGltZTEgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWUyID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdW0xID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdW0yID0gMDsKJiM0MzsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3Rlc3RzX3J1bm5pbmcsIDApOwomIzQzOwlhdG9taWNfc2V0KCZhbXA7cGhhc2UxX2NvbXBsZXRlLCAwKTsKJiM0MzsJaW5pdF9jb21wbGV0aW9uKCZhbXA7Y29tcGxldGlvbjEpOwomIzQzOwlpbml0X2NvbXBsZXRpb24oJmFtcDtjb21wbGV0aW9uMik7CiYjNDM7CWluaXRfY29tcGxldGlvbigmYW1wO2NvbXBsZXRpb24zKTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKJiM0MzsJCXN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9ICZhbXA7dGVzdFtjcHVdOwomIzQzOwomIzQzOwkJdC0mZ3Q7Y3B1ID0gY3B1OwomIzQzOwkJdC0mZ3Q7Y291bnQgPSBURVNUX0NPVU5UOwomIzQzOwkJdC0mZ3Q7dGVzdF9wMSA9IHAxOwomIzQzOwkJdC0mZ3Q7dGVzdF9wMiA9IHAyOwomIzQzOwkJdC0mZ3Q7c2l6ZSA9IHNpemU7CiYjNDM7CQl0LSZndDt0YXNrID0ga3RocmVhZF9ydW4odGVzdF9mdW5jLCB0LCAmIzM0O3Rlc3QlZCYjMzQ7LCBjcHUpOwomIzQzOwkJaWYgKElTX0VSUih0LSZndDt0YXNrKSkgewomIzQzOwkJCXByX2VycigmIzM0O0ZhaWxlZCB0byBzdGFydCB0ZXN0IGZ1bmNcbiYjMzQ7KTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgYXJlIHJ1bm5pbmcgKi8KJiM0MzsJd2hpbGUgKGF0b21pY19yZWFkKCZhbXA7dGVzdHNfcnVubmluZykgJmx0OyBudW1fb25saW5lX2NwdXMoKSkgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwomIzQzOwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CiYjNDM7CX0KJiM0MzsJY29tcGxldGVfYWxsKCZhbXA7Y29tcGxldGlvbjEpOwomIzQzOwomIzQzOwkvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAxICovCiYjNDM7CXdoaWxlIChhdG9taWNfcmVhZCgmYW1wO3BoYXNlMV9jb21wbGV0ZSkgJmx0OyBudW1fb25saW5lX2NwdXMoKSkgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOwomIzQzOwkJc2NoZWR1bGVfdGltZW91dCgxMCk7CiYjNDM7CX0KJiM0MzsJY29tcGxldGVfYWxsKCZhbXA7Y29tcGxldGlvbjIpOwomIzQzOwomIzQzOwkvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBoYXZlIGNvbXBsZXRlZCBwaGFzZSAyICovCiYjNDM7CXdoaWxlIChhdG9taWNfcmVhZCgmYW1wO3Rlc3RzX3J1bm5pbmcpKSB7CiYjNDM7CQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiYjNDM7CQlzY2hlZHVsZV90aW1lb3V0KDEwKTsKJiM0MzsJfQomIzQzOwljb21wbGV0ZV9hbGwoJmFtcDtjb21wbGV0aW9uMyk7CiYjNDM7CiYjNDM7CWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQomIzQzOwkJa3RocmVhZF9zdG9wKHRlc3RbY3B1XS50YXNrKTsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDslcyglZCk6JiMzNDssIG5hbWUsIHNpemUpOwomIzQzOwlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewomIzQzOwkJc3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gJmFtcDt0ZXN0W2NwdV07CiYjNDM7CiYjNDM7CQl0aW1lMSA9IHQtJmd0O3N0b3AxIC0gdC0mZ3Q7c3RhcnQxOwomIzQzOwkJdGltZTIgPSB0LSZndDtzdG9wMiAtIHQtJmd0O3N0YXJ0MjsKJiM0MzsJCXN1bTEgJiM0Mzs9IHRpbWUxOwomIzQzOwkJc3VtMiAmIzQzOz0gdGltZTI7CiYjNDM7CQlwcl9jb250KCYjMzQ7ICVkPSVsdSYjMzQ7LCBjcHUsIHRpbWUxIC8gVEVTVF9DT1VOVCk7CiYjNDM7CQlpZiAocDIpCiYjNDM7CQkJcHJfY29udCgmIzM0Oy8lbHUmIzM0OywgdGltZTIgLyBURVNUX0NPVU5UKTsKJiM0MzsJfQomIzQzOwlwcl9jb250KCYjMzQ7IEF2ZXJhZ2U9JWx1JiMzNDssIHN1bTEgLyBudW1fb25saW5lX2NwdXMoKSAvIFRFU1RfQ09VTlQpOwomIzQzOwlpZiAocDIpCiYjNDM7CQlwcl9jb250KCYjMzQ7LyVsdSYjMzQ7LCBzdW0yIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTsKJiM0MzsJcHJfY29udCgmIzM0O1xuJiMzNDspOwomIzQzOwlzY2hlZHVsZV90aW1lb3V0KDIwMCk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3N0YXRpYyBpbnQgc2xhYl90ZXN0X2luaXQodm9pZCkKJiM0Mzt7CiYjNDM7CXZvaWQgKip2ID0ga21hbGxvY19hcnJheShURVNUX0NPVU5ULCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CXVuc2lnbmVkIGludCBpOwomIzQzOwljeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7CiYjNDM7CWludCByZW07CiYjNDM7CWludCBzaXplOwomIzQzOwomIzQzOwlwcl9hbGVydCgmIzM0O3Rlc3QgaW5pdFxuJiMzNDspOwomIzQzOwomIzQzOwlwcl9hbGVydCgmIzM0O1NpbmdsZSB0aHJlYWQgdGVzdGluZ1xuJiMzNDspOwomIzQzOwlwcl9hbGVydCgmIzM0Oz09PT09PT09PT09PT09PT09PT09PVxuJiMzNDspOwomIzQzOwlwcl9hbGVydCgmIzM0OzEuIEttYWxsb2M6IFJlcGVhdGVkbHkgYWxsb2NhdGUgdGhlbiBmcmVlIHRlc3RcbiYjMzQ7KTsKJiM0MzsJZm9yIChzaXplID0gODsgc2l6ZSAmbHQ7PSBQQUdFX1NJWkUgJmx0OyZsdDsgMjsgc2l6ZSAmbHQ7Jmx0Oz0gMSkgewomIzQzOwkJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQl1OCAqcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiYjNDM7CiYjNDM7CQkJKnAgPSAyMjsKJiM0MzsJCQl2W2ldID0gcDsKJiM0MzsJCX0KJiM0MzsJCXRpbWUyID0gZ2V0X2N5Y2xlcygpOwomIzQzOwkJdGltZSA9IHRpbWUyIC0gdGltZTE7CiYjNDM7CiYjNDM7CQlwcl9hbGVydCgmIzM0OyVpIHRpbWVzIGttYWxsb2MoJWQpICYjMzQ7LCBpLCBzaXplKTsKJiM0MzsJCXRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCAmYW1wO3JlbSk7CiYjNDM7CQlwcl9jb250KCYjMzQ7LSZndDsgJWxsdSBjeWNsZXMgJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwomIzQzOwkJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgVEVTVF9DT1VOVDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQl1OCAqcCA9IHZbaV07CiYjNDM7CiYjNDM7CQkJKnAgPSAyMzsKJiM0MzsJCQlrZnJlZShwKTsKJiM0MzsJCX0KJiM0MzsJCXRpbWUyID0gZ2V0X2N5Y2xlcygpOwomIzQzOwkJdGltZSA9IHRpbWUyIC0gdGltZTE7CiYjNDM7CiYjNDM7CQlwcl9jb250KCYjMzQ7a2ZyZWUgJiMzNDspOwomIzQzOwkJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJCXByX2NvbnQoJiMzNDstJmd0OyAlbGx1IGN5Y2xlc1xuJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7Mi4gS21hbGxvYzogYWxsb2MvZnJlZSB0ZXN0XG4mIzM0Oyk7CiYjNDM7CWZvciAoc2l6ZSA9IDg7IHNpemUgJmx0Oz0gUEFHRV9TSVpFICZsdDsmbHQ7IDI7IHNpemUgJmx0OyZsdDs9IDEpIHsKJiM0MzsJCXRpbWUxID0gZ2V0X2N5Y2xlcygpOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQkJdTggKnAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwomIzQzOwomIzQzOwkJCWtmcmVlKHApOwomIzQzOwkJfQomIzQzOwkJdGltZTIgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CQl0aW1lID0gdGltZTIgLSB0aW1lMTsKJiM0MzsKJiM0MzsJCXByX2FsZXJ0KCYjMzQ7JWkgdGltZXMga21hbGxvYyglZCkva2ZyZWUgJiMzNDssIGksIHNpemUpOwomIzQzOwkJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJCXByX2NvbnQoJiMzNDstJmd0OyAlbGx1IGN5Y2xlc1xuJiMzNDssICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwl9CiYjNDM7CWtmcmVlKHYpOwomIzQzOyNpZmRlZiBDT05GSUdfU01QCiYjNDM7CXByX2luZm8oJiMzNDtDb25jdXJyZW50IGFsbG9jc1xuJiMzNDspOwomIzQzOwlwcl9pbmZvKCYjMzQ7PT09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJZm9yIChpID0gMzsgaSAmbHQ7PSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZG9fY29uY3VycmVudF90ZXN0KGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEsCiYjNDM7CQkJa21hbGxvY19hbGxvY190aGVuX2ZyZWVfdGVzdF9wMiwKJiM0MzsJCQkxICZsdDsmbHQ7IGksICYjMzQ7S21hbGxvYyBOKmFsbG9jIE4qZnJlZSYjMzQ7KTsKJiM0MzsJfQomIzQzOwlmb3IgKGkgPSAzOyBpICZsdDs9IFBBR0VfU0hJRlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlkb19jb25jdXJyZW50X3Rlc3Qoa21hbGxvY19hbGxvY19mcmVlX3Rlc3RfcDEsIE5VTEwsCiYjNDM7CQkJMSAmbHQ7Jmx0OyBpLCAmIzM0O0ttYWxsb2MgTiooYWxsb2MgZnJlZSkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1JlbW90ZSBmcmVlIHRlc3RcbiYjMzQ7KTsKJiM0MzsJcHJfaW5mbygmIzM0Oz09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJZm9yIChpID0gMzsgaSAmbHQ7PSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZG9fY29uY3VycmVudF90ZXN0KHJlbW90ZV9mcmVlX3Rlc3RfcDEsCiYjNDM7CQkJCXJlbW90ZV9mcmVlX3Rlc3RfcDIsCiYjNDM7CQkJMSAmbHQ7Jmx0OyBpLCAmIzM0O04qcmVtb3RlIGZyZWUmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0OzEgYWxsb2MgTiBmcmVlIHRlc3RcbiYjMzQ7KTsKJiM0MzsJcHJfaW5mbygmIzM0Oz09PT09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJZm9yIChpID0gMzsgaSAmbHQ7PSBQQUdFX1NISUZUOyBpJiM0MzsmIzQzOykgewomIzQzOwkJZG9fY29uY3VycmVudF90ZXN0KGFsbG9jX25fZnJlZV90ZXN0X3AxLAomIzQzOwkJCQlOVUxMLAomIzQzOwkJCTEgJmx0OyZsdDsgaSwgJiMzNDsxIGFsbG9jIE4gZnJlZSYjMzQ7KTsKJiM0MzsJfQomIzQzOwomIzQzOyNlbmRpZgomIzQzOwlyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovCiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHNsYWJfdGVzdF9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlwcl9hbGVydCgmIzM0O3Rlc3QgZXhpdFxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzttb2R1bGVfaW5pdChzbGFiX3Rlc3RfaW5pdCkKJiM0Mzttb2R1bGVfZXhpdChzbGFiX3Rlc3RfZXhpdCkKJiM0MzsKJiM0MztNT0RVTEVfTElDRU5TRSgmIzM0O0dQTCYjMzQ7KTsKJiM0MztNT0RVTEVfQVVUSE9SKCYjMzQ7Q2hyaXN0b3BoIExhbWV0ZXIgYW5kIE1hdGhpZXUgRGVzbm95ZXJzJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1NMQUIgdGVzdCYjMzQ7KTsKZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3Ztc3RhdC5jIGIvbGliL3Rlc3Rfdm1zdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uZjYzZjQzOWFiOWQyYQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2xpYi90ZXN0X3Ztc3RhdC5jCkBAIC0wLDAgJiM0MzsxLDk1IEBACiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIKJiM0MzsvKgomIzQzOyAqIFRlc3QgbW9kdWxlIGZvciBpbi1rZXJuZWwgc3ludGhldGljIHZtIHN0YXRpc3RpY3MgcGVyZm9ybWFuY2UuCiYjNDM7ICoKJiM0MzsgKiBleGVjdXRlCiYjNDM7ICoKJiM0MzsgKgltb2Rwcm9iZSB0ZXN0X3Ztc3RhdAomIzQzOyAqCiYjNDM7ICogdG8gcnVuIHRoaXMgdGVzdAomIzQzOyAqCiYjNDM7ICogKEMpIDIwMDkgTGludXggRm91bmRhdGlvbiwgQ2hyaXN0b3BoIExhbWV0ZXIgJmx0O2NsQGdlbnR3by5vcmcmZ3Q7CiYjNDM7ICovCiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2ppZmZpZXMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tb2R1bGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbW0uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL3RpbWV4LmgmZ3Q7CiYjNDM7CiYjNDM7I2RlZmluZSBURVNUX0NPVU5UIDEwMDAwCiYjNDM7CiYjNDM7c3RhdGljIGludCB2bXN0YXRfdGVzdF9pbml0KHZvaWQpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJY3ljbGVzX3QgdGltZTEsIHRpbWUyLCB0aW1lOwomIzQzOwlpbnQgcmVtOwomIzQzOwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7CiYjNDM7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7Vk1zdGF0IHRlc3RpbmdcbiYjMzQ7KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDs9PT09PT09PT09PT09PT09PT09PT1cbiYjMzQ7KTsKJiM0MzsJcHJfYWxlcnQoJiMzNDsxLiBpbmNfem9uZV9wYWdlX3N0YXRlKCkgdGhlbiBkZWNfem9uZV9wYWdlX3N0YXRlKClcbiYjMzQ7KTsKJiM0MzsJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykKJiM0MzsJCWluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpOwomIzQzOwomIzQzOwl0aW1lMiA9IGdldF9jeWNsZXMoKTsKJiM0MzsJdGltZSA9IHRpbWUyIC0gdGltZTE7CiYjNDM7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7JWkgdGltZXMgaW5jX3pvbmVfcGFnZV9zdGF0ZSgpICYjMzQ7LCBpKTsKJiM0MzsJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzICYjMzQ7LCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTsKJiM0MzsKJiM0MzsJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykKJiM0MzsJCV9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7CiYjNDM7CiYjNDM7CXRpbWUyID0gZ2V0X2N5Y2xlcygpOwomIzQzOwl0aW1lID0gdGltZTIgLSB0aW1lMTsKJiM0MzsKJiM0MzsJcHJfY29udCgmIzM0O19fZGVjX3pfcF9zKCkgJiMzNDspOwomIzQzOwl0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgJmFtcDtyZW0pOwomIzQzOwlwcl9jb250KCYjMzQ7LSZndDsgJWxsdSBjeWNsZXNcbiYjMzQ7LCAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7CiYjNDM7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7Mi4gaW5jX3pvbmVfcGFnZV9zdGF0ZSgpL2RlY196b25lX3BhZ2Vfc3RhdGUoKVxuJiMzNDspOwomIzQzOwl0aW1lMSA9IGdldF9jeWNsZXMoKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFRFU1RfQ09VTlQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZSRUVfQ01BX1BBR0VTKTsKJiM0MzsJCWRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXRpbWUyID0gZ2V0X2N5Y2xlcygpOwomIzQzOwl0aW1lID0gdGltZTIgLSB0aW1lMTsKJiM0MzsKJiM0MzsJcHJfYWxlcnQoJiMzNDslaSB0aW1lcyBpbmMvZGVjICYjMzQ7LCBpKTsKJiM0MzsJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzXG4mIzM0OywgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwomIzQzOwlwcl9hbGVydCgmIzM0OzMuIGNvdW50X3ZtX2V2ZW50KClcbiYjMzQ7KTsKJiM0MzsJdGltZTEgPSBnZXRfY3ljbGVzKCk7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBURVNUX0NPVU5UOyBpJiM0MzsmIzQzOykKJiM0MzsJCWNvdW50X3ZtX2V2ZW50KFNMQUJTX1NDQU5ORUQpOwomIzQzOwomIzQzOwl0aW1lMiA9IGdldF9jeWNsZXMoKTsKJiM0MzsJdGltZSA9IHRpbWUyIC0gdGltZTE7CiYjNDM7CiYjNDM7CWNvdW50X3ZtX2V2ZW50cyhTTEFCU19TQ0FOTkVELCAtVEVTVF9DT1VOVCk7CiYjNDM7CXByX2FsZXJ0KCYjMzQ7JWkgY291bnRfdm1fZXZlbnRzICYjMzQ7LCBpKTsKJiM0MzsJdGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsICZhbXA7cmVtKTsKJiM0MzsJcHJfY29udCgmIzM0Oy0mZ3Q7ICVsbHUgY3ljbGVzXG4mIzM0OywgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpOwomIzQzOwlfX2ZyZWVfcGFnZShwYWdlKTsKJiM0MzsJcmV0dXJuIC1FQUdBSU47IC8qIEZhaWwgd2lsbCBkaXJlY3RseSB1bmxvYWQgdGhlIG1vZHVsZSAqLwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB2bXN0YXRfdGVzdF9leGl0KHZvaWQpCiYjNDM7ewomIzQzOwlwcl9hbGVydCgmIzM0O3Rlc3QgZXhpdFxuJiMzNDspOwomIzQzO30KJiM0MzsKJiM0Mzttb2R1bGVfaW5pdCh2bXN0YXRfdGVzdF9pbml0KQomIzQzO21vZHVsZV9leGl0KHZtc3RhdF90ZXN0X2V4aXQpCiYjNDM7CiYjNDM7TU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiYjNDM7TU9EVUxFX0FVVEhPUigmIzM0O0NocmlzdG9waCBMYW1ldGVyJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O1ZNIHN0YXRpc3RpY3MgdGVzdCYjMzQ7KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA4NjUKCQkJCQkJCW91dHB1dDogODgKCQkJCQkJCXRob3VnaHRzOiA1NzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIHRocmVlIG5ldyB0ZXN0IG1vZHVsZXM6IGB0ZXN0X3Ztc3RhdGAsIGB0ZXN0X3NsYWJgLCBhbmQgYHRlc3RfcGFnZWFsbG9jYC4gVGhleSYjMzk7cmUgc3ludGhldGljIGJlbmNobWFya3MgZm9yIFZNIHN0YXRpc3RpY3MsIHNsYWIgYWxsb2NhdG9yLCBhbmQgdGhlIHBhZ2UgYWxsb2NhdG9yLCByZXNwZWN0aXZlbHkuIFRoZXkgZ2V0IGFkZGVkIHRvIGBLY29uZmlnLmRlYnVnYCBhbmQgdGhlIE1ha2VmaWxlLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhleSAqZXhlY3V0ZSogdXBvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKGBtb2R1bGVfaW5pdGApIGFuZCB0aGVuIGltbWVkaWF0ZWx5IHVubG9hZCB0aGVtc2VsdmVzIGJ5IHJldHVybmluZyBgLUVBR0FJTmAuCgpJbml0aWFsbHksIEkgYXNrZWQgbXlzZWxmLCAmIzM0O0FyZSB0aGVzZSBldmVuICp3b3J0aCogZnV6emluZz8mIzM0OyBNeSBleHBlcnRpc2UgdGVsbHMgbWUgZnV6emluZyB1c3VhbGx5IGZvY3VzZXMgb24gY2hhbmdlcyB0aGF0IGludHJvZHVjZSBuZXcgZnVuY3Rpb25hbGl0eSwgQVBJcywgb3IgZHJpdmVycy4gVGhlc2UgbW9kdWxlcywgaG93ZXZlciwgYXJlIGVzc2VudGlhbGx5IGp1c3QgYmVuY2htYXJrcy4gVGhleSBkb24mIzM5O3QgZXhwb3NlIGFueSBuZXcgc3lzY2FsbHMsIGlvY3Rscywgb3IgZnVuY3Rpb25hbCBsb2dpYy4gVGhleSBqdXN0IHJlcGVhdGVkbHkgY2FsbCBleGlzdGluZyBrZXJuZWwgZnVuY3Rpb25zIGxpa2UgYGFsbG9jX3BhZ2VzYCwgYGttYWxsb2NgLCBhbmQgYGluY196b25lX3BhZ2Vfc3RhdGVgIGluIGEgbG9vcCwgcHVyZWx5IHRvIG1lYXN1cmUgcGVyZm9ybWFuY2UuIFRoZXkgYXJlICpub3QqIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsJiMzOTtzIGNvcmUgb3BlcmF0aW9uLgoKVGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBpZiBhIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcgaGFzIHNldmVyYWwgZGVmaW5lZCByZWFzb25zIGZvciBhIGZhbHNlIHJldHVybiwgYW5kIGFsdGhvdWdoIGEgdGVzdCBtb2R1bGUgaXNuJiMzOTt0IGV4cGxpY2l0LCBpdCBzZWVtcyB0aGF0IGl0JiMzOTtzIGp1c3Qgbm90IGZ1bmN0aW9uYWwgY2hhbmdlcy4KCkkgcmUtZXhhbWluZWQgdGhlIGNyaXRlcmlhIGZvciBkZXRlcm1pbmluZyBpZiBzb21ldGhpbmcgc2hvdWxkIGJlIGZ1enplZC4gSXQgZG9lc24mIzM5O3QgZXhwbGljaXRseSBtZW50aW9uIHRlc3QgbW9kdWxlcywgYnV0IGl0IGRvZXMgc2F5IHRoaW5ncyBsaWtlIGNvZGUgY29tbWVudHMsIHB1cmUgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBhbmQgY2hhbmdlcyB0aGF0IGRvbiYjMzk7dCBhbHRlciBleGVjdXRpb24gZmxvdy4gQmVuY2htYXJrIG1vZHVsZXMgZG9uJiMzOTt0IGRvIHRoZXNlIHRoaW5ncywgYnV0IHRoZXkgYWxzbyBkb24mIzM5O3QgcmVhbGx5ICpkbyogYW55dGhpbmcgdGhhdCYjMzk7cyBmdXp6ZWQuCgpXaGlsZSBTeXprYWxsZXIgKmNvdWxkKiBsb2FkIG1vZHVsZXMsIGZ1enppbmcgYSBiZW5jaG1hcmsgbW9kdWxlIGlzIHBvaW50bGVzcy4gSXQgZG9lc24mIzM5O3QgdGFrZSBpbnB1dCBmcm9tIHVzZXIgc3BhY2U7IGl0IGp1c3QgcnVucyBhIGhhcmRjb2RlZCBiZW5jaG1hcmsgb24gbG9hZC4gVGhlcmVmb3JlLCBJIHdpbGwgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBNeSByZWFzb25pbmcgaXMgY2xlYXI6IHRoZXNlIGFyZSBwdXJlbHkgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzIHRoYXQgZXhlY3V0ZSBoYXJkY29kZWQgdGVzdHMgb24gbG9hZCBhbmQgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMgb3IgdXNlci1mYWNpbmcgQVBJcyB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiBUaGV5IGFyZSBmb3IgbWVhc3VyaW5nIHBlcmZvcm1hbmNlLCBub3QgZXhwb3NpbmcgbmV3IHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN5bnRoZXRpYyBiZW5jaG1hcmsgbW9kdWxlcyAodGVzdF92bXN0YXQsIHRlc3Rfc2xhYiwgdGVzdF9wYWdlYWxsb2MpIHRoYXQgZXhlY3V0ZSBoYXJkY29kZWQgcGVyZm9ybWFuY2UgdGVzdHMgdXBvbiBtb2R1bGUgbG9hZC4gVGhlc2UgbW9kdWxlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgdXNlci1mYWNpbmcgQVBJcywgb3IgY29tcGxleCBzdGF0ZSBtYWNoaW5lcyB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjAwOjAyLjEwNDE2NDI1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTIzMjY0MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMzowMDowMi4xMDQxNzEyOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5OTg4MjMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgwOGZmNjQzOTM1YjhjMzZhMzY0MGVmNjY0YTFmZTc3ZGZkMTA1NGVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzowMDowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZy5kZWJ1ZyBiL2xpYi9LY29uZmlnLmRlYnVnXFxuaW5kZXggMTI0NGRjYWMyMjk0YS4uNzA4NzNhYWM2NzVmYSAxMDA2NDRcXG4tLS0gYS9saWIvS2NvbmZpZy5kZWJ1Z1xcbisrKyBiL2xpYi9LY29uZmlnLmRlYnVnXFxuQEAgLTM0MjcsNiArMzQyNywzNiBAQCBjb25maWcgVEVTVF9LRVhFQ19IQU5ET1ZFUlxcbiBcXG4gXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiBcXG4rY29uZmlnIFRFU1RfVk1TVEFUXFxuK1xcdHRyaXN0YXRlIFxcXCJWTSBTdGF0aXN0aWNzIEJlbmNobWFya1xcXCJcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGhlbHBcXG4rXFx0ICBBIHN5bnRoZXRpYyBiZW5jaG1hcmsgbWVhc3VyaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBWTSBzdGF0aXN0aWNzLFxcbitcXHQgIHVzZWZ1bCB0byBhbmFseXplIGFueSBpbXByb3ZlbWVudHMgb3IgcmVncmVzc2lvbnMgaW4gZnVuY3Rpb25zIHRoYXRcXG4rXFx0ICBhcmUgZnJlcXVlbnRseSB1c2VkIGluIGhvdCBjb2RlIHBhdGhzLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbitcXG4rY29uZmlnIFRFU1RfU0xBQlxcbitcXHR0cmlzdGF0ZSBcXFwiU2xhYiBBbGxvY2F0b3IgQmVuY2htYXJrXFxcIlxcbitcXHRkZWZhdWx0IG5cXG4rXFx0aGVscFxcbitcXHQgIEEgc3ludGhldGljIGJlbmNobWFyayB0aGF0IG1lYXN1cmVzIHNsYWIgYWxsb2NhdG9yIHBlcmZvcm1hbmNlLFxcbitcXHQgIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzaW5nbGUgdGhyZWFkIHRlc3RpbmcgYnkgcmVwZWF0ZWRseVxcbitcXHQgIGFsbG9jYXRpbmcgdGhlbiBmcmVlaW5nIG1lbW9yeSBhbmQgY29uY3VycmVudCBvciByZW1vdGUgYWxsb2NhdGlvbnMuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbitjb25maWcgVEVTVF9QQUdFQUxMT0NcXG4rXFx0dHJpc3RhdGUgXFxcIlBhZ2UgQWxsb2NhdG9yIEJlbmNobWFya1xcXCJcXG4rXFx0ZGVmYXVsdCBuXFxuK1xcdGhlbHBcXG4rXFx0ICBBIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZSBwYWdlIGFsbG9jYXRvciwgdXNlZnVsXFxuK1xcdCAgdG8gYW5hbHl6ZSBhbnkgaW1wcm92ZW1lbnRzIG9yIHJlZ3Jlc3Npb25zIHdoZW4gcmVwZWF0ZWRseSBhbGxvY2F0aW5nXFxuK1xcdCAgYW5kIGZyZWVpbmcgbWVtb3J5IGFzIHdlbGwgYXMgY29uY3VycmVudCBhbmQgcmVtb3RlIGFsbG9jYXRpb25zLlxcbitcXG4rXFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbitcXG4gY29uZmlnIFJBVEVMSU1JVF9LVU5JVF9URVNUXFxuIFxcdHRyaXN0YXRlIFxcXCJLVW5pdCBUZXN0IGZvciBjb3JyZWN0bmVzcyBhbmQgc3RyZXNzIG9mIHJhdGVsaW1pdFxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiBcXHRkZXBlbmRzIG9uIEtVTklUXFxuZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZVxcbmluZGV4IDdmNzVjYzZlZGY5NGEuLjE3YzE2NGUxNDVhZDQgMTAwNjQ0XFxuLS0tIGEvbGliL01ha2VmaWxlXFxuKysrIGIvbGliL01ha2VmaWxlXFxuQEAgLTEwNSw2ICsxMDUsOSBAQCBvYmotJChDT05GSUdfVEVTVF9GUkVFX1BBR0VTKSArPSB0ZXN0X2ZyZWVfcGFnZXMub1xcbiBvYmotJChDT05GSUdfVEVTVF9SRUZfVFJBQ0tFUikgKz0gdGVzdF9yZWZfdHJhY2tlci5vXFxuIG9iai0kKENPTkZJR19URVNUX09CSlBPT0wpICs9IHRlc3Rfb2JqcG9vbC5vXFxuIG9iai0kKENPTkZJR19URVNUX0tFWEVDX0hBTkRPVkVSKSArPSB0ZXN0X2toby5vXFxuK29iai0kKENPTkZJR19URVNUX1ZNU1RBVCkgKz0gdGVzdF92bXN0YXQub1xcbitvYmotJChDT05GSUdfVEVTVF9TTEFCKSArPSB0ZXN0X3NsYWIub1xcbitvYmotJChDT05GSUdfVEVTVF9QQUdFQUxMT0MpICs9IHRlc3RfcGFnZWFsbG9jLm9cXG4gXFxuIG9iai0kKENPTkZJR19URVNUX0ZQVSkgKz0gdGVzdF9mcHUub1xcbiB0ZXN0X2ZwdS15IDo9IHRlc3RfZnB1X2dsdWUubyB0ZXN0X2ZwdV9pbXBsLm9cXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfcGFnZWFsbG9jLmMgYi9saWIvdGVzdF9wYWdlYWxsb2MuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uMzA1MTRkZjUyYzViMFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9saWIvdGVzdF9wYWdlYWxsb2MuY1xcbkBAIC0wLDAgKzEsMzM3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXFxuKy8qXFxuKyAqIFRlc3QgbW9kdWxlIGZvciBpbiBrZXJuZWwgc3ludGhldGljIHBhZ2UgYWxsb2NhdG9yIHRlc3RpbmcuXFxuKyAqXFxuKyAqIENvbXBpbGVkIGFzIGEgbW9kdWxlLiBUaGUgbW9kdWxlIG5lZWRzIHRvIGJlIGxvYWRlZCB0byBydW4uXFxuKyAqXFxuKyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24sIENocmlzdG9waCBMYW1ldGVyIFxcdTAwM2NjbEBnZW50d28ub3JnXFx1MDAzZVxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9qaWZmaWVzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vdGltZXguaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwXFxuK1xcbisjZGVmaW5lIENPTkNVUlJFTlRfTUFYX09SREVSIDZcXG4rXFxuKyNpZmRlZiBDT05GSUdfU01QXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuK1xcbitzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbitcXHRpbnQgY3B1O1xcbitcXHRpbnQgb3JkZXI7XFxuK1xcdGludCBjb3VudDtcXG4rXFx0c3RydWN0IHBhZ2UgKip2O1xcbitcXHR2b2lkICgqdGVzdF9wMSkoc3RydWN0IHRlc3Rfc3RydWN0ICp0KTtcXG4rXFx0dm9pZCAoKnRlc3RfcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQxO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0b3AxO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0MjtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdG9wMjtcXG4rfSB0ZXN0W05SX0NQVVNdO1xcbitcXG4rLypcXG4rICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdXMgXFx1MDAzZSAwIGFuZCB0aGVuIGFsbCB0aGVcXG4rICogb2JqZWN0cyBsYXRlciBvbiBjcHUgMFxcbisgKi9cXG4rc3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKiBQZXJmb3JtIG5vIGFsbG9jYXRpb25zIG9uIGNwdSAwICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0LVxcdTAwM2Vjb3VudDsgaSsrKSB7XFxuK1xcdFxcdHN0cnVjdCBwYWdlICpwO1xcbitcXG4rXFx0XFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xcbitcXHRcXHRcXHRwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtXFx1MDAzZW9yZGVyKTtcXG4rXFx0XFx0XFx0LyogVXNlIG9iamVjdCAqL1xcbitcXHRcXHRcXHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAxNywgNCk7XFxuK1xcdFxcdH0gZWxzZVxcbitcXHRcXHRcXHRwID0gTlVMTDtcXG4rXFx0XFx0dC1cXHUwMDNldltpXSA9IHA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcdGludCBjcHU7XFxuK1xcbitcXHQvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqL1xcbitcXHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHQtXFx1MDAzZWNvdW50OyBpKyspIHtcXG4rXFx0XFx0XFx0c3RydWN0IHBhZ2UgKnAgPSB0ZXN0W2NwdV0udltpXTtcXG4rXFxuK1xcdFxcdFxcdGlmICghcClcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHRfX2ZyZWVfcGFnZXMocCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXHRcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBhbmQgbGF0ZXIgZnJlZSB0aGVtIGFsbCBhZ2FpblxcbisgKi9cXG4rc3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHQtXFx1MDAzZWNvdW50OyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXG4rXFx0XFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTQsIDQpO1xcbitcXHRcXHR0LVxcdTAwM2V2W2ldID0gcDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBhbGxvY190aGVuX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHRzdHJ1Y3QgcGFnZSAqcCA9IHQtXFx1MDAzZXZbaV07XFxuK1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cy4gRnJlZSB0aGVtIGltbWVkaWF0ZWx5LlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYWxsb2NfZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0c3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXG4rXFx0XFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMTIsIDQpO1xcbitcXHRcXHRfX2ZyZWVfcGFnZXMocCwgdC1cXHUwMDNlb3JkZXIpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBhdG9taWNfdCB0ZXN0c19ydW5uaW5nO1xcbitzdGF0aWMgYXRvbWljX3QgcGhhc2UxX2NvbXBsZXRlO1xcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24xKTtcXG4rc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjb21wbGV0aW9uMik7XFxuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjMpO1xcbitcXG4rc3RhdGljIGludCB0ZXN0X2Z1bmModm9pZCAqcHJpdmF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBwcml2YXRlO1xcbitcXHRjcHVtYXNrX3QgbmV3bWFzayA9IENQVV9NQVNLX05PTkU7XFxuK1xcbitcXHRjcHVtYXNrX3NldF9jcHUodC1cXHUwMDNlY3B1LCBcXHUwMDI2bmV3bWFzayk7XFxuK1xcdHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIFxcdTAwMjZuZXdtYXNrKTtcXG4rXFx0dC1cXHUwMDNldiA9IGttYWxsb2NfYXJyYXkodC1cXHUwMDNlY291bnQsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwgR0ZQX0tFUk5FTCk7XFxuK1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcXG4rXFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjEpO1xcbitcXHR0LVxcdTAwM2VzdGFydDEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdHQtXFx1MDAzZXRlc3RfcDEodCk7XFxuK1xcdHQtXFx1MDAzZXN0b3AxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRhdG9taWNfaW5jKFxcdTAwMjZwaGFzZTFfY29tcGxldGUpO1xcbitcXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFxcdTAwMjZjb21wbGV0aW9uMik7XFxuK1xcdHQtXFx1MDAzZXN0YXJ0MiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0aWYgKHQtXFx1MDAzZXRlc3RfcDIpXFxuK1xcdFxcdHQtXFx1MDAzZXRlc3RfcDIodCk7XFxuK1xcdHQtXFx1MDAzZXN0b3AyID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRhdG9taWNfZGVjKFxcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcXG4rXFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjMpO1xcbitcXHRrZnJlZSh0LVxcdTAwM2V2KTtcXG4rXFx0d2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpIHtcXG4rXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xcbitcXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLFxcbitcXHRcXHR2b2lkICgqcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcXG4rXFx0XFx0aW50IG9yZGVyLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZTEgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWUyID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdW0yID0gMDtcXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZwaGFzZTFfY29tcGxldGUsIDApO1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmNvbXBsZXRpb24xKTtcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjb21wbGV0aW9uMik7XFxuK1xcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjMpO1xcbitcXG4rXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcXG4rXFx0XFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXFx1MDAyNnRlc3RbY3B1XTtcXG4rXFxuK1xcdFxcdHQtXFx1MDAzZWNwdSA9IGNwdTtcXG4rXFx0XFx0dC1cXHUwMDNlY291bnQgPSBURVNUX0NPVU5UO1xcbitcXHRcXHR0LVxcdTAwM2V0ZXN0X3AxID0gcDE7XFxuK1xcdFxcdHQtXFx1MDAzZXRlc3RfcDIgPSBwMjtcXG4rXFx0XFx0dC1cXHUwMDNlb3JkZXIgPSBvcmRlcjtcXG4rXFx0XFx0dC1cXHUwMDNldGFzayA9IGt0aHJlYWRfcnVuKHRlc3RfZnVuYywgdCwgXFxcInRlc3QlZFxcXCIsIGNwdSk7XFxuK1xcdFxcdGlmIChJU19FUlIodC1cXHUwMDNldGFzaykpIHtcXG4rXFx0XFx0XFx0cHJfZXJyKFxcXCJGYWlsZWQgdG8gc3RhcnQgdGVzdCBmdW5jXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGFyZSBydW5uaW5nICovXFxuK1xcdHdoaWxlIChhdG9taWNfcmVhZChcXHUwMDI2dGVzdHNfcnVubmluZykgXFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xcbitcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuK1xcdFxcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xcbitcXHR9XFxuK1xcdGNvbXBsZXRlX2FsbChcXHUwMDI2Y29tcGxldGlvbjEpO1xcbitcXG4rXFx0LyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgaGF2ZSBjb21wbGV0ZWQgcGhhc2UgMSAqL1xcbitcXHR3aGlsZSAoYXRvbWljX3JlYWQoXFx1MDAyNnBoYXNlMV9jb21wbGV0ZSkgXFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xcbitcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuK1xcdFxcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xcbitcXHR9XFxuK1xcdGNvbXBsZXRlX2FsbChcXHUwMDI2Y29tcGxldGlvbjIpO1xcbitcXG4rXFx0LyogV2FpdCB0aWxsIGFsbCBwcm9jZXNzZXMgaGF2ZSBjb21wbGV0ZWQgcGhhc2UgMiAqL1xcbitcXHR3aGlsZSAoYXRvbWljX3JlYWQoXFx1MDAyNnRlc3RzX3J1bm5pbmcpKSB7XFxuK1xcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcXG4rXFx0XFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XFxuK1xcdH1cXG4rXFx0Y29tcGxldGVfYWxsKFxcdTAwMjZjb21wbGV0aW9uMyk7XFxuK1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSlcXG4rXFx0XFx0a3RocmVhZF9zdG9wKHRlc3RbY3B1XS50YXNrKTtcXG4rXFxuK1xcdHByX2FsZXJ0KFxcXCIlcyglZCk6XFxcIiwgbmFtZSwgb3JkZXIpO1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xcbitcXHRcXHRzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBcXHUwMDI2dGVzdFtjcHVdO1xcbitcXG4rXFx0XFx0dGltZTEgPSB0LVxcdTAwM2VzdG9wMSAtIHQtXFx1MDAzZXN0YXJ0MTtcXG4rXFx0XFx0dGltZTIgPSB0LVxcdTAwM2VzdG9wMiAtIHQtXFx1MDAzZXN0YXJ0MjtcXG4rXFx0XFx0c3VtMSArPSB0aW1lMTtcXG4rXFx0XFx0c3VtMiArPSB0aW1lMjtcXG4rXFx0XFx0cHJfY29udChcXFwiICVkPSVsdVxcXCIsIGNwdSwgdGltZTEgLyBURVNUX0NPVU5UKTtcXG4rXFx0XFx0aWYgKHAyKVxcbitcXHRcXHRcXHRwcl9jb250KFxcXCIvJWx1XFxcIiwgdGltZTIgLyBURVNUX0NPVU5UKTtcXG4rXFx0fVxcbitcXHRwcl9jb250KFxcXCIgQXZlcmFnZT0lbHVcXFwiLCBzdW0xIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTtcXG4rXFx0aWYgKHAyKVxcbitcXHRcXHRwcl9jb250KFxcXCIvJWx1XFxcIiwgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XFxuK1xcdHByX2NvbnQoXFxcIlxcXFxuXFxcIik7XFxuK1xcdHNjaGVkdWxlX3RpbWVvdXQoMjAwKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBpbnQgcGFnZWFsbG9jX3Rlc3RfaW5pdCh2b2lkKVxcbit7XFxuK1xcdHZvaWQgKip2ID0ga21hbGxvY19hcnJheShURVNUX0NPVU5ULCBzaXplb2Yodm9pZCAqKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdHVuc2lnbmVkIGludCBpO1xcbitcXHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XFxuK1xcdGludCByZW07XFxuK1xcdGludCBvcmRlcjtcXG4rXFxuK1xcdHByX2FsZXJ0KFxcXCJ0ZXN0IGluaXRcXFxcblxcXCIpO1xcbitcXG4rXFx0cHJfYWxlcnQoXFxcIlNpbmdsZSB0aHJlYWQgdGVzdGluZ1xcXFxuXFxcIik7XFxuK1xcdHByX2FsZXJ0KFxcXCI9PT09PT09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRwcl9hbGVydChcXFwiMS4gUmVwZWF0ZWRseSBhbGxvY2F0ZSB0aGVuIGZyZWUgdGVzdFxcXFxuXFxcIik7XFxuK1xcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcXHUwMDNjPSBNQVhfUEFHRV9PUkRFUjsgb3JkZXIrKykge1xcbitcXHRcXHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqcCA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwgfCBfX0dGUF9DT01QLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRvcmRlcik7XFxuK1xcbitcXHRcXHRcXHRpZiAoIXApIHtcXG4rXFx0XFx0XFx0XFx0cHJfZXJyKFxcXCJDYW5ub3QgYWxsb2NhdGUgb3JkZXI9JWRcXFxcblxcXCIsIG9yZGVyKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdC8qIFRvdWNoIHBhZ2UgKi9cXG4rXFx0XFx0XFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMjIsIDQpO1xcbitcXHRcXHRcXHR2W2ldID0gcDtcXG4rXFx0XFx0fVxcbitcXHRcXHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0XFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XFxuK1xcbitcXHRcXHRwcl9hbGVydChcXFwiJWkgdGltZXMgYWxsb2NfcGFnZSgsJWQpIFxcXCIsIGksIG9yZGVyKTtcXG4rXFx0XFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFxcdTAwMjZyZW0pO1xcbitcXHRcXHRwcl9jb250KFxcXCItXFx1MDAzZSAlbGx1IGN5Y2xlcyBcXFwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcXG4rXFxuK1xcdFxcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpwID0gdltpXTtcXG4rXFxuK1xcdFxcdFxcdF9fZnJlZV9wYWdlcyhwLCBvcmRlcik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0XFx0cHJfY29udChcXFwiX19mcmVlX3BhZ2VzKCwlZClcXFwiLCBvcmRlcik7XFxuK1xcdFxcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcXHUwMDI2cmVtKTtcXG4rXFx0XFx0cHJfY29udChcXFwiLVxcdTAwM2UgJWxsdSBjeWNsZXNcXFxcblxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXHR9XFxuK1xcbitcXHRwcl9hbGVydChcXFwiMi4gYWxsb2MvZnJlZSB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0Zm9yIChvcmRlciA9IDA7IG9yZGVyIFxcdTAwM2M9IE1BWF9QQUdFX09SREVSOyBvcmRlcisrKSB7XFxuK1xcdFxcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgb3JkZXIpO1xcbitcXHRcXHRcXHRfX2ZyZWVfcGFnZXMocCwgb3JkZXIpO1xcbitcXHRcXHR9XFxuK1xcdFxcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRcXHR0aW1lID0gdGltZTIgLSB0aW1lMTtcXG4rXFxuK1xcdFxcdHByX2FsZXJ0KFxcXCIlaSB0aW1lcyBhbGxvYyggLCVkKS9mcmVlIFxcXCIsIGksIG9yZGVyKTtcXG4rXFx0XFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFxcdTAwMjZyZW0pO1xcbitcXHRcXHRwcl9jb250KFxcXCItXFx1MDAzZSAlbGx1IGN5Y2xlc1xcXFxuXFxcIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7XFxuK1xcdH1cXG4rXFx0a2ZyZWUodik7XFxuKyNpZmRlZiBDT05GSUdfU01QXFxuK1xcdHByX2luZm8oXFxcIkNvbmN1cnJlbnQgYWxsb2NzXFxcXG5cXFwiKTtcXG4rXFx0cHJfaW5mbyhcXFwiPT09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXIrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3QoYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEsXFxuK1xcdFxcdFxcdGFsbG9jX3RoZW5fZnJlZV90ZXN0X3AyLFxcbitcXHRcXHRcXHRvcmRlciwgXFxcIlBhZ2UgYWxsb2MgTiphbGxvYyBOKmZyZWVcXFwiKTtcXG4rXFx0fVxcbitcXHRwcl9pbmZvKFxcXCItLS0tRmFzdHBhdGgtLS1cXFxcblxcXCIpO1xcbitcXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXIrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3QoYWxsb2NfZnJlZV90ZXN0X3AxLCBOVUxMLFxcbitcXHRcXHRcXHRvcmRlciwgXFxcIlBhZ2UgTiooYWxsb2MgZnJlZSlcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cHJfaW5mbyhcXFwiUmVtb3RlIGZyZWUgdGVzdFxcXFxuXFxcIik7XFxuK1xcdHByX2luZm8oXFxcIj09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXFx1MDAzYyBDT05DVVJSRU5UX01BWF9PUkRFUjsgb3JkZXIrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3QocmVtb3RlX2ZyZWVfdGVzdF9wMSxcXG4rXFx0XFx0XFx0XFx0cmVtb3RlX2ZyZWVfdGVzdF9wMixcXG4rXFx0XFx0XFx0b3JkZXIsIFxcXCJOKnJlbW90ZSBmcmVlXFxcIik7XFxuK1xcdH1cXG4rXFxuKyNlbmRpZlxcbitcXG4rXFx0cmV0dXJuIC1FQUdBSU47IC8qIEZhaWwgd2lsbCBkaXJlY3RseSB1bmxvYWQgdGhlIG1vZHVsZSAqL1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBwYWdlYWxsb2NfdGVzdF9leGl0KHZvaWQpXFxuK3tcXG4rXFx0cHJfYWxlcnQoXFxcInRlc3QgZXhpdFxcXFxuXFxcIik7XFxuK31cXG4rXFxuK21vZHVsZV9pbml0KHBhZ2VhbGxvY190ZXN0X2luaXQpXFxuK21vZHVsZV9leGl0KHBhZ2VhbGxvY190ZXN0X2V4aXQpXFxuK1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkNocmlzdG9waCBMYW1ldGVyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwicGFnZSBhbGxvY2F0b3IgcGVyZm9ybWFuY2UgdGVzdFxcXCIpO1xcbmRpZmYgLS1naXQgYS9saWIvdGVzdF9zbGFiLmMgYi9saWIvdGVzdF9zbGFiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE0M2IwZDczZGFhYjlcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvbGliL3Rlc3Rfc2xhYi5jXFxuQEAgLTAsMCArMSwzNzUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogVGVzdCBtb2R1bGUgZm9yIHN5bnRoZXRpYyBpbiBrZXJuZWwgc2xhYiBhbGxvY2F0b3IgdGVzdGluZy5cXG4rICpcXG4rICogVGhlIHRlc3QgaXMgdHJpZ2dlcmVkIGJ5IGxvYWRpbmcgdGhlIG1vZHVsZSAod2hpY2ggd2lsbCBmYWlsKS5cXG4rICpcXG4rICogKEMpIDIwMDkgTGludXggRm91bmRhdGlvbiBcXHUwMDNjY2xAZ2VudHdvLm9yZ1xcdTAwM2VcXG4rICovXFxuK1xcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvamlmZmllcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGlsZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL3RpbWV4LmhcXHUwMDNlXFxuK1xcbisjZGVmaW5lIFRFU1RfQ09VTlQgMTAwMDBcXG4rXFxuKyNpZmRlZiBDT05GSUdfU01QXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rdGhyZWFkLmhcXHUwMDNlXFxuK1xcbitzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcXG4rXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbitcXHRpbnQgY3B1O1xcbitcXHRpbnQgc2l6ZTtcXG4rXFx0aW50IGNvdW50O1xcbitcXHR2b2lkICoqdjtcXG4rXFx0dm9pZCAoKnRlc3RfcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XFxuK1xcdHZvaWQgKCp0ZXN0X3AyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpO1xcbitcXHR1bnNpZ25lZCBsb25nIHN0YXJ0MTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdG9wMTtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdGFydDI7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RvcDI7XFxuK30gdGVzdFtOUl9DUFVTXTtcXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHVzIFxcdTAwM2UgMCBhbmQgdGhlbiBhbGwgdGhlXFxuKyAqIG9iamVjdHMgbGF0ZXIgb24gY3B1IDBcXG4rICovXFxuK3N0YXRpYyB2b2lkIHJlbW90ZV9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0LyogUGVyZm9ybSBubyBhbGxvY2F0aW9ucyBvbiBjcHUgMCAqL1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHR1OCAqcDtcXG4rXFxuK1xcdFxcdGlmIChzbXBfcHJvY2Vzc29yX2lkKCkpIHtcXG4rXFx0XFx0XFx0cCA9IGttYWxsb2ModC1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdC8qIFVzZSBvYmplY3QgKi9cXG4rXFx0XFx0XFx0KnAgPSAxNztcXG4rXFx0XFx0fSBlbHNlXFxuK1xcdFxcdFxcdHAgPSBOVUxMO1xcbitcXHRcXHR0LVxcdTAwM2V2W2ldID0gcDtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdC8qIEFsbCBmcmVlcyBhcmUgY29tcGxldGVkIG9uIGNwdSB6ZXJvICovXFxuK1xcdGlmIChzbXBfcHJvY2Vzc29yX2lkKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHRcXHR1OCAqcCA9IHRlc3RbY3B1XS52W2ldO1xcbitcXG4rXFx0XFx0XFx0aWYgKCFwKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdCpwID0gMTY7XFxuK1xcdFxcdFxcdGtmcmVlKHApO1xcbitcXHRcXHR9XFxuK31cXG4rXFxuKy8qXFxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHUgMCBhbmQgZnJlZSB0aGVtIGltbWVkaWF0ZWx5IG9uIHRoZVxcbisgKiBvdGhlciBwcm9jZXNzb3JzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgYWxsb2Nfbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXHRpbnQgY3B1O1xcbitcXHRjaGFyICpwO1xcbitcXG4rXFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xcbitcXHRcXHQvKiBDb25zdW1lciAqL1xcbitcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQgLyBudW1fb25saW5lX2NwdXMoKTsgaSsrKSB7XFxuK1xcdFxcdFxcdGRvIHtcXG4rXFx0XFx0XFx0XFx0cCA9IHQtXFx1MDAzZXZbaV07XFxuK1xcdFxcdFxcdFxcdGlmICghcClcXG4rXFx0XFx0XFx0XFx0XFx0Y3B1X3JlbGF4KCk7XFxuK1xcdFxcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0XFx0KnAgPSAxNztcXG4rXFx0XFx0XFx0fSB3aGlsZSAoIXApO1xcbitcXHRcXHRcXHRrZnJlZShwKTtcXG4rXFx0XFx0XFx0dC1cXHUwMDNldltpXSA9IE5VTEw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdC8qIFByb2R1Y2VyICovXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB0LVxcdTAwM2Vjb3VudDsgaSsrKSB7XFxuK1xcdFxcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7XFxuK1xcdFxcdFxcdGlmIChjcHUpIHtcXG4rXFx0XFx0XFx0XFx0cCA9IGttYWxsb2ModC1cXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdFxcdFxcdFxcdC8qIFVzZSBvYmplY3QgKi9cXG4rXFx0XFx0XFx0XFx0KnAgPSAxNztcXG4rXFx0XFx0XFx0XFx0dGVzdFtjcHVdLnZbaV0gPSBwO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMgYW5kIGxhdGVyIGZyZWUgdGhlbSBhbGwgYWdhaW5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxcbit7XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHQtXFx1MDAzZWNvdW50OyBpKyspIHtcXG4rXFx0XFx0dTggKnAgPSBrbWFsbG9jKHQtXFx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xcbitcXG4rXFx0XFx0KnAgPSAxNDtcXG4rXFx0XFx0dC1cXHUwMDNldltpXSA9IHA7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQga21hbGxvY19hbGxvY190aGVuX2ZyZWVfdGVzdF9wMihzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgdC1cXHUwMDNlY291bnQ7IGkrKykge1xcbitcXHRcXHR1OCAqcCA9IHQtXFx1MDAzZXZbaV07XFxuK1xcbitcXHRcXHQqcCA9IDEzO1xcbitcXHRcXHRrZnJlZShwKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBBbGxvY2F0ZSBURVNUX0NPVU5UIG9iamVjdHMuIEZyZWUgdGhlbSBpbW1lZGlhdGVseS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0dTggKnAgPSBrbWFsbG9jKHQtXFx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xcbitcXG4rXFx0XFx0KnAgPSAxMjtcXG4rXFx0XFx0a2ZyZWUocCk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIGF0b21pY190IHRlc3RzX3J1bm5pbmc7XFxuK3N0YXRpYyBhdG9taWNfdCBwaGFzZTFfY29tcGxldGU7XFxuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjEpO1xcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24yKTtcXG4rc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihjb21wbGV0aW9uMyk7XFxuK1xcbitzdGF0aWMgaW50IHRlc3RfZnVuYyh2b2lkICpwcml2YXRlKVxcbit7XFxuK1xcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IHByaXZhdGU7XFxuK1xcdGNwdW1hc2tfdCBuZXdtYXNrID0gQ1BVX01BU0tfTk9ORTtcXG4rXFxuK1xcdGNwdW1hc2tfc2V0X2NwdSh0LVxcdTAwM2VjcHUsIFxcdTAwMjZuZXdtYXNrKTtcXG4rXFx0c2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgXFx1MDAyNm5ld21hc2spO1xcbitcXHR0LVxcdTAwM2V2ID0ga2NhbGxvYyh0LVxcdTAwM2Vjb3VudCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpO1xcbitcXG4rXFx0YXRvbWljX2luYyhcXHUwMDI2dGVzdHNfcnVubmluZyk7XFxuK1xcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNmNvbXBsZXRpb24xKTtcXG4rXFx0dC1cXHUwMDNlc3RhcnQxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHR0LVxcdTAwM2V0ZXN0X3AxKHQpO1xcbitcXHR0LVxcdTAwM2VzdG9wMSA9IGdldF9jeWNsZXMoKTtcXG4rXFx0YXRvbWljX2luYyhcXHUwMDI2cGhhc2UxX2NvbXBsZXRlKTtcXG4rXFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjIpO1xcbitcXHR0LVxcdTAwM2VzdGFydDIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdGlmICh0LVxcdTAwM2V0ZXN0X3AyKVxcbitcXHRcXHR0LVxcdTAwM2V0ZXN0X3AyKHQpO1xcbitcXHR0LVxcdTAwM2VzdG9wMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0YXRvbWljX2RlYyhcXHUwMDI2dGVzdHNfcnVubmluZyk7XFxuK1xcdHdhaXRfZm9yX2NvbXBsZXRpb24oXFx1MDAyNmNvbXBsZXRpb24zKTtcXG4rXFx0a2ZyZWUodC1cXHUwMDNldik7XFxuK1xcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XFxuK1xcdFxcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcXG4rXFx0XFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGRvX2NvbmN1cnJlbnRfdGVzdCh2b2lkICgqcDEpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcXG4rXFx0XFx0dm9pZCAoKnAyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKiksXFxuK1xcdFxcdGludCBzaXplLCBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGludCBjcHU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdGltZTEgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWUyID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBzdW0yID0gMDtcXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZwaGFzZTFfY29tcGxldGUsIDApO1xcbitcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmNvbXBsZXRpb24xKTtcXG4rXFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjb21wbGV0aW9uMik7XFxuK1xcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y29tcGxldGlvbjMpO1xcbitcXG4rXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcXG4rXFx0XFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXFx1MDAyNnRlc3RbY3B1XTtcXG4rXFxuK1xcdFxcdHQtXFx1MDAzZWNwdSA9IGNwdTtcXG4rXFx0XFx0dC1cXHUwMDNlY291bnQgPSBURVNUX0NPVU5UO1xcbitcXHRcXHR0LVxcdTAwM2V0ZXN0X3AxID0gcDE7XFxuK1xcdFxcdHQtXFx1MDAzZXRlc3RfcDIgPSBwMjtcXG4rXFx0XFx0dC1cXHUwMDNlc2l6ZSA9IHNpemU7XFxuK1xcdFxcdHQtXFx1MDAzZXRhc2sgPSBrdGhyZWFkX3J1bih0ZXN0X2Z1bmMsIHQsIFxcXCJ0ZXN0JWRcXFwiLCBjcHUpO1xcbitcXHRcXHRpZiAoSVNfRVJSKHQtXFx1MDAzZXRhc2spKSB7XFxuK1xcdFxcdFxcdHByX2VycihcXFwiRmFpbGVkIHRvIHN0YXJ0IHRlc3QgZnVuY1xcXFxuXFxcIik7XFxuK1xcdFxcdFxcdHJldHVybjtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBhcmUgcnVubmluZyAqL1xcbitcXHR3aGlsZSAoYXRvbWljX3JlYWQoXFx1MDAyNnRlc3RzX3J1bm5pbmcpIFxcdTAwM2MgbnVtX29ubGluZV9jcHVzKCkpIHtcXG4rXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xcbitcXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcXG4rXFx0fVxcbitcXHRjb21wbGV0ZV9hbGwoXFx1MDAyNmNvbXBsZXRpb24xKTtcXG4rXFxuK1xcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDEgKi9cXG4rXFx0d2hpbGUgKGF0b21pY19yZWFkKFxcdTAwMjZwaGFzZTFfY29tcGxldGUpIFxcdTAwM2MgbnVtX29ubGluZV9jcHVzKCkpIHtcXG4rXFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpO1xcbitcXHRcXHRzY2hlZHVsZV90aW1lb3V0KDEwKTtcXG4rXFx0fVxcbitcXHRjb21wbGV0ZV9hbGwoXFx1MDAyNmNvbXBsZXRpb24yKTtcXG4rXFxuK1xcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDIgKi9cXG4rXFx0d2hpbGUgKGF0b21pY19yZWFkKFxcdTAwMjZ0ZXN0c19ydW5uaW5nKSkge1xcbitcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XFxuK1xcdFxcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xcbitcXHR9XFxuK1xcdGNvbXBsZXRlX2FsbChcXHUwMDI2Y29tcGxldGlvbjMpO1xcbitcXG4rXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXFxuK1xcdFxcdGt0aHJlYWRfc3RvcCh0ZXN0W2NwdV0udGFzayk7XFxuK1xcbitcXHRwcl9hbGVydChcXFwiJXMoJWQpOlxcXCIsIG5hbWUsIHNpemUpO1xcbitcXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xcbitcXHRcXHRzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBcXHUwMDI2dGVzdFtjcHVdO1xcbitcXG4rXFx0XFx0dGltZTEgPSB0LVxcdTAwM2VzdG9wMSAtIHQtXFx1MDAzZXN0YXJ0MTtcXG4rXFx0XFx0dGltZTIgPSB0LVxcdTAwM2VzdG9wMiAtIHQtXFx1MDAzZXN0YXJ0MjtcXG4rXFx0XFx0c3VtMSArPSB0aW1lMTtcXG4rXFx0XFx0c3VtMiArPSB0aW1lMjtcXG4rXFx0XFx0cHJfY29udChcXFwiICVkPSVsdVxcXCIsIGNwdSwgdGltZTEgLyBURVNUX0NPVU5UKTtcXG4rXFx0XFx0aWYgKHAyKVxcbitcXHRcXHRcXHRwcl9jb250KFxcXCIvJWx1XFxcIiwgdGltZTIgLyBURVNUX0NPVU5UKTtcXG4rXFx0fVxcbitcXHRwcl9jb250KFxcXCIgQXZlcmFnZT0lbHVcXFwiLCBzdW0xIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTtcXG4rXFx0aWYgKHAyKVxcbitcXHRcXHRwcl9jb250KFxcXCIvJWx1XFxcIiwgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XFxuK1xcdHByX2NvbnQoXFxcIlxcXFxuXFxcIik7XFxuK1xcdHNjaGVkdWxlX3RpbWVvdXQoMjAwKTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3N0YXRpYyBpbnQgc2xhYl90ZXN0X2luaXQodm9pZClcXG4re1xcbitcXHR2b2lkICoqdiA9IGttYWxsb2NfYXJyYXkoVEVTVF9DT1VOVCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpO1xcbitcXHR1bnNpZ25lZCBpbnQgaTtcXG4rXFx0Y3ljbGVzX3QgdGltZTEsIHRpbWUyLCB0aW1lO1xcbitcXHRpbnQgcmVtO1xcbitcXHRpbnQgc2l6ZTtcXG4rXFxuK1xcdHByX2FsZXJ0KFxcXCJ0ZXN0IGluaXRcXFxcblxcXCIpO1xcbitcXG4rXFx0cHJfYWxlcnQoXFxcIlNpbmdsZSB0aHJlYWQgdGVzdGluZ1xcXFxuXFxcIik7XFxuK1xcdHByX2FsZXJ0KFxcXCI9PT09PT09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRwcl9hbGVydChcXFwiMS4gS21hbGxvYzogUmVwZWF0ZWRseSBhbGxvY2F0ZSB0aGVuIGZyZWUgdGVzdFxcXFxuXFxcIik7XFxuK1xcdGZvciAoc2l6ZSA9IDg7IHNpemUgXFx1MDAzYz0gUEFHRV9TSVpFIFxcdTAwM2NcXHUwMDNjIDI7IHNpemUgXFx1MDAzY1xcdTAwM2M9IDEpIHtcXG4rXFx0XFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0XFx0dTggKnAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xcbitcXG4rXFx0XFx0XFx0KnAgPSAyMjtcXG4rXFx0XFx0XFx0dltpXSA9IHA7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0XFx0cHJfYWxlcnQoXFxcIiVpIHRpbWVzIGttYWxsb2MoJWQpIFxcXCIsIGksIHNpemUpO1xcbitcXHRcXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXFx1MDAyNnJlbSk7XFxuK1xcdFxcdHByX2NvbnQoXFxcIi1cXHUwMDNlICVsbHUgY3ljbGVzIFxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXG4rXFx0XFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcXG4rXFx0XFx0XFx0dTggKnAgPSB2W2ldO1xcbitcXG4rXFx0XFx0XFx0KnAgPSAyMztcXG4rXFx0XFx0XFx0a2ZyZWUocCk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdFxcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0XFx0cHJfY29udChcXFwia2ZyZWUgXFxcIik7XFxuK1xcdFxcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcXHUwMDI2cmVtKTtcXG4rXFx0XFx0cHJfY29udChcXFwiLVxcdTAwM2UgJWxsdSBjeWNsZXNcXFxcblxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXHR9XFxuK1xcbitcXHRwcl9hbGVydChcXFwiMi4gS21hbGxvYzogYWxsb2MvZnJlZSB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0Zm9yIChzaXplID0gODsgc2l6ZSBcXHUwMDNjPSBQQUdFX1NJWkUgXFx1MDAzY1xcdTAwM2MgMjsgc2l6ZSBcXHUwMDNjXFx1MDAzYz0gMSkge1xcbitcXHRcXHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xcbitcXHRcXHRcXHR1OCAqcCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7XFxuK1xcbitcXHRcXHRcXHRrZnJlZShwKTtcXG4rXFx0XFx0fVxcbitcXHRcXHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0XFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XFxuK1xcbitcXHRcXHRwcl9hbGVydChcXFwiJWkgdGltZXMga21hbGxvYyglZCkva2ZyZWUgXFxcIiwgaSwgc2l6ZSk7XFxuK1xcdFxcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcXHUwMDI2cmVtKTtcXG4rXFx0XFx0cHJfY29udChcXFwiLVxcdTAwM2UgJWxsdSBjeWNsZXNcXFxcblxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXHR9XFxuK1xcdGtmcmVlKHYpO1xcbisjaWZkZWYgQ09ORklHX1NNUFxcbitcXHRwcl9pbmZvKFxcXCJDb25jdXJyZW50IGFsbG9jc1xcXFxuXFxcIik7XFxuK1xcdHByX2luZm8oXFxcIj09PT09PT09PT09PT09PT09XFxcXG5cXFwiKTtcXG4rXFx0Zm9yIChpID0gMzsgaSBcXHUwMDNjPSBQQUdFX1NISUZUOyBpKyspIHtcXG4rXFx0XFx0ZG9fY29uY3VycmVudF90ZXN0KGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEsXFxuK1xcdFxcdFxcdGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIsXFxuK1xcdFxcdFxcdDEgXFx1MDAzY1xcdTAwM2MgaSwgXFxcIkttYWxsb2MgTiphbGxvYyBOKmZyZWVcXFwiKTtcXG4rXFx0fVxcbitcXHRmb3IgKGkgPSAzOyBpIFxcdTAwM2M9IFBBR0VfU0hJRlQ7IGkrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3Qoa21hbGxvY19hbGxvY19mcmVlX3Rlc3RfcDEsIE5VTEwsXFxuK1xcdFxcdFxcdDEgXFx1MDAzY1xcdTAwM2MgaSwgXFxcIkttYWxsb2MgTiooYWxsb2MgZnJlZSlcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0cHJfaW5mbyhcXFwiUmVtb3RlIGZyZWUgdGVzdFxcXFxuXFxcIik7XFxuK1xcdHByX2luZm8oXFxcIj09PT09PT09PT09PT09PT1cXFxcblxcXCIpO1xcbitcXHRmb3IgKGkgPSAzOyBpIFxcdTAwM2M9IFBBR0VfU0hJRlQ7IGkrKykge1xcbitcXHRcXHRkb19jb25jdXJyZW50X3Rlc3QocmVtb3RlX2ZyZWVfdGVzdF9wMSxcXG4rXFx0XFx0XFx0XFx0cmVtb3RlX2ZyZWVfdGVzdF9wMixcXG4rXFx0XFx0XFx0MSBcXHUwMDNjXFx1MDAzYyBpLCBcXFwiTipyZW1vdGUgZnJlZVxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRwcl9pbmZvKFxcXCIxIGFsbG9jIE4gZnJlZSB0ZXN0XFxcXG5cXFwiKTtcXG4rXFx0cHJfaW5mbyhcXFwiPT09PT09PT09PT09PT09PT09PVxcXFxuXFxcIik7XFxuK1xcdGZvciAoaSA9IDM7IGkgXFx1MDAzYz0gUEFHRV9TSElGVDsgaSsrKSB7XFxuK1xcdFxcdGRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY19uX2ZyZWVfdGVzdF9wMSxcXG4rXFx0XFx0XFx0XFx0TlVMTCxcXG4rXFx0XFx0XFx0MSBcXHUwMDNjXFx1MDAzYyBpLCBcXFwiMSBhbGxvYyBOIGZyZWVcXFwiKTtcXG4rXFx0fVxcbitcXG4rI2VuZGlmXFxuK1xcdHJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi9cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgc2xhYl90ZXN0X2V4aXQodm9pZClcXG4re1xcbitcXHRwcl9hbGVydChcXFwidGVzdCBleGl0XFxcXG5cXFwiKTtcXG4rfVxcbitcXG4rbW9kdWxlX2luaXQoc2xhYl90ZXN0X2luaXQpXFxuK21vZHVsZV9leGl0KHNsYWJfdGVzdF9leGl0KVxcbitcXG4rTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbitNT0RVTEVfQVVUSE9SKFxcXCJDaHJpc3RvcGggTGFtZXRlciBhbmQgTWF0aGlldSBEZXNub3llcnNcXFwiKTtcXG4rTU9EVUxFX0RFU0NSSVBUSU9OKFxcXCJTTEFCIHRlc3RcXFwiKTtcXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfdm1zdGF0LmMgYi9saWIvdGVzdF92bXN0YXQuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZjYzZjQzOWFiOWQyYVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9saWIvdGVzdF92bXN0YXQuY1xcbkBAIC0wLDAgKzEsOTUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogVGVzdCBtb2R1bGUgZm9yIGluLWtlcm5lbCBzeW50aGV0aWMgdm0gc3RhdGlzdGljcyBwZXJmb3JtYW5jZS5cXG4rICpcXG4rICogZXhlY3V0ZVxcbisgKlxcbisgKlxcdG1vZHByb2JlIHRlc3Rfdm1zdGF0XFxuKyAqXFxuKyAqIHRvIHJ1biB0aGlzIHRlc3RcXG4rICpcXG4rICogKEMpIDIwMDkgTGludXggRm91bmRhdGlvbiwgQ2hyaXN0b3BoIExhbWV0ZXIgXFx1MDAzY2NsQGdlbnR3by5vcmdcXHUwMDNlXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vdGltZXguaFxcdTAwM2VcXG4rXFxuKyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMFxcbitcXG4rc3RhdGljIGludCB2bXN0YXRfdGVzdF9pbml0KHZvaWQpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IGk7XFxuK1xcdGN5Y2xlc190IHRpbWUxLCB0aW1lMiwgdGltZTtcXG4rXFx0aW50IHJlbTtcXG4rXFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBhbGxvY19wYWdlKEdGUF9LRVJORUwpO1xcbitcXG4rXFx0cHJfYWxlcnQoXFxcIlZNc3RhdCB0ZXN0aW5nXFxcXG5cXFwiKTtcXG4rXFx0cHJfYWxlcnQoXFxcIj09PT09PT09PT09PT09PT09PT09PVxcXFxuXFxcIik7XFxuK1xcdHByX2FsZXJ0KFxcXCIxLiBpbmNfem9uZV9wYWdlX3N0YXRlKCkgdGhlbiBkZWNfem9uZV9wYWdlX3N0YXRlKClcXFxcblxcXCIpO1xcbitcXHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKylcXG4rXFx0XFx0aW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XFxuK1xcbitcXHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XFxuK1xcbitcXHRwcl9hbGVydChcXFwiJWkgdGltZXMgaW5jX3pvbmVfcGFnZV9zdGF0ZSgpIFxcXCIsIGkpO1xcbitcXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXFx1MDAyNnJlbSk7XFxuK1xcdHByX2NvbnQoXFxcIi1cXHUwMDNlICVsbHUgY3ljbGVzIFxcXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXG4rXFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspXFxuK1xcdFxcdF9fZGVjX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XFxuK1xcbitcXHR0aW1lMiA9IGdldF9jeWNsZXMoKTtcXG4rXFx0dGltZSA9IHRpbWUyIC0gdGltZTE7XFxuK1xcbitcXHRwcl9jb250KFxcXCJfX2RlY196X3BfcygpIFxcXCIpO1xcbitcXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXFx1MDAyNnJlbSk7XFxuK1xcdHByX2NvbnQoXFxcIi1cXHUwMDNlICVsbHUgY3ljbGVzXFxcXG5cXFwiLCAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7XFxuK1xcbitcXHRwcl9hbGVydChcXFwiMi4gaW5jX3pvbmVfcGFnZV9zdGF0ZSgpL2RlY196b25lX3BhZ2Vfc3RhdGUoKVxcXFxuXFxcIik7XFxuK1xcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XFxuK1xcdFxcdGluY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpO1xcbitcXHRcXHRkZWNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZSRUVfQ01BX1BBR0VTKTtcXG4rXFx0fVxcbitcXG4rXFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0cHJfYWxlcnQoXFxcIiVpIHRpbWVzIGluYy9kZWMgXFxcIiwgaSk7XFxuK1xcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcXHUwMDI2cmVtKTtcXG4rXFx0cHJfY29udChcXFwiLVxcdTAwM2UgJWxsdSBjeWNsZXNcXFxcblxcXCIsICAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcXG4rXFxuK1xcdHByX2FsZXJ0KFxcXCIzLiBjb3VudF92bV9ldmVudCgpXFxcXG5cXFwiKTtcXG4rXFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBURVNUX0NPVU5UOyBpKyspXFxuK1xcdFxcdGNvdW50X3ZtX2V2ZW50KFNMQUJTX1NDQU5ORUQpO1xcbitcXG4rXFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XFxuK1xcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xcbitcXG4rXFx0Y291bnRfdm1fZXZlbnRzKFNMQUJTX1NDQU5ORUQsIC1URVNUX0NPVU5UKTtcXG4rXFx0cHJfYWxlcnQoXFxcIiVpIGNvdW50X3ZtX2V2ZW50cyBcXFwiLCBpKTtcXG4rXFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFxcdTAwMjZyZW0pO1xcbitcXHRwcl9jb250KFxcXCItXFx1MDAzZSAlbGx1IGN5Y2xlc1xcXFxuXFxcIiwgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xcbitcXHRfX2ZyZWVfcGFnZShwYWdlKTtcXG4rXFx0cmV0dXJuIC1FQUdBSU47IC8qIEZhaWwgd2lsbCBkaXJlY3RseSB1bmxvYWQgdGhlIG1vZHVsZSAqL1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCB2bXN0YXRfdGVzdF9leGl0KHZvaWQpXFxuK3tcXG4rXFx0cHJfYWxlcnQoXFxcInRlc3QgZXhpdFxcXFxuXFxcIik7XFxuK31cXG4rXFxuK21vZHVsZV9pbml0KHZtc3RhdF90ZXN0X2luaXQpXFxuK21vZHVsZV9leGl0KHZtc3RhdF90ZXN0X2V4aXQpXFxuK1xcbitNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkNocmlzdG9waCBMYW1ldGVyXFxcIik7XFxuK01PRFVMRV9ERVNDUklQVElPTihcXFwiVk0gc3RhdGlzdGljcyB0ZXN0XFxcIik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjAwOjAyLjYwNTExNjQ5OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjc5NTEzNjY5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3ludGhldGljIGJlbmNobWFyayBtb2R1bGVzICh0ZXN0X3Ztc3RhdCwgdGVzdF9zbGFiLCB0ZXN0X3BhZ2VhbGxvYykgdGhhdCBleGVjdXRlIGhhcmRjb2RlZCBwZXJmb3JtYW5jZSB0ZXN0cyB1cG9uIG1vZHVsZSBsb2FkLiBUaGVzZSBtb2R1bGVzIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljLCB1c2VyLWZhY2luZyBBUElzLCBvciBjb21wbGV4IHN0YXRlIG1hY2hpbmVzIHRoYXQgd291bGQgYmVuZWZpdCBmcm9tIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MDhmZjY0MzkzNWI4YzM2YTM2NDBlZjY2NGExZmU3N2RmZDEwNTRlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMSAxMzowMDowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWdcbmluZGV4IDEyNDRkY2FjMjI5NGEuLjcwODczYWFjNjc1ZmEgMTAwNjQ0XG4tLS0gYS9saWIvS2NvbmZpZy5kZWJ1Z1xuKysrIGIvbGliL0tjb25maWcuZGVidWdcbkBAIC0zNDI3LDYgKzM0MjcsMzYgQEAgY29uZmlnIFRFU1RfS0VYRUNfSEFORE9WRVJcbiBcbiBcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiBcbitjb25maWcgVEVTVF9WTVNUQVRcbitcdHRyaXN0YXRlIFwiVk0gU3RhdGlzdGljcyBCZW5jaG1hcmtcIlxuK1x0ZGVmYXVsdCBuXG4rXHRoZWxwXG4rXHQgIEEgc3ludGhldGljIGJlbmNobWFyayBtZWFzdXJpbmcgdGhlIHBlcmZvcm1hbmNlIG9mIFZNIHN0YXRpc3RpY3MsXG4rXHQgIHVzZWZ1bCB0byBhbmFseXplIGFueSBpbXByb3ZlbWVudHMgb3IgcmVncmVzc2lvbnMgaW4gZnVuY3Rpb25zIHRoYXRcbitcdCAgYXJlIGZyZXF1ZW50bHkgdXNlZCBpbiBob3QgY29kZSBwYXRocy5cbitcbitcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbitjb25maWcgVEVTVF9TTEFCXG4rXHR0cmlzdGF0ZSBcIlNsYWIgQWxsb2NhdG9yIEJlbmNobWFya1wiXG4rXHRkZWZhdWx0IG5cbitcdGhlbHBcbitcdCAgQSBzeW50aGV0aWMgYmVuY2htYXJrIHRoYXQgbWVhc3VyZXMgc2xhYiBhbGxvY2F0b3IgcGVyZm9ybWFuY2UsXG4rXHQgIHNwZWNpZmljYWxseSBmb2N1c2luZyBvbiBzaW5nbGUgdGhyZWFkIHRlc3RpbmcgYnkgcmVwZWF0ZWRseVxuK1x0ICBhbGxvY2F0aW5nIHRoZW4gZnJlZWluZyBtZW1vcnkgYW5kIGNvbmN1cnJlbnQgb3IgcmVtb3RlIGFsbG9jYXRpb25zLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuK2NvbmZpZyBURVNUX1BBR0VBTExPQ1xuK1x0dHJpc3RhdGUgXCJQYWdlIEFsbG9jYXRvciBCZW5jaG1hcmtcIlxuK1x0ZGVmYXVsdCBuXG4rXHRoZWxwXG4rXHQgIEEgYmVuY2htYXJrIG1lYXN1cmluZyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHBhZ2UgYWxsb2NhdG9yLCB1c2VmdWxcbitcdCAgdG8gYW5hbHl6ZSBhbnkgaW1wcm92ZW1lbnRzIG9yIHJlZ3Jlc3Npb25zIHdoZW4gcmVwZWF0ZWRseSBhbGxvY2F0aW5nXG4rXHQgIGFuZCBmcmVlaW5nIG1lbW9yeSBhcyB3ZWxsIGFzIGNvbmN1cnJlbnQgYW5kIHJlbW90ZSBhbGxvY2F0aW9ucy5cbitcbitcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbitcbiBjb25maWcgUkFURUxJTUlUX0tVTklUX1RFU1RcbiBcdHRyaXN0YXRlIFwiS1VuaXQgVGVzdCBmb3IgY29ycmVjdG5lc3MgYW5kIHN0cmVzcyBvZiByYXRlbGltaXRcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gXHRkZXBlbmRzIG9uIEtVTklUXG5kaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxlIGIvbGliL01ha2VmaWxlXG5pbmRleCA3Zjc1Y2M2ZWRmOTRhLi4xN2MxNjRlMTQ1YWQ0IDEwMDY0NFxuLS0tIGEvbGliL01ha2VmaWxlXG4rKysgYi9saWIvTWFrZWZpbGVcbkBAIC0xMDUsNiArMTA1LDkgQEAgb2JqLSQoQ09ORklHX1RFU1RfRlJFRV9QQUdFUykgKz0gdGVzdF9mcmVlX3BhZ2VzLm9cbiBvYmotJChDT05GSUdfVEVTVF9SRUZfVFJBQ0tFUikgKz0gdGVzdF9yZWZfdHJhY2tlci5vXG4gb2JqLSQoQ09ORklHX1RFU1RfT0JKUE9PTCkgKz0gdGVzdF9vYmpwb29sLm9cbiBvYmotJChDT05GSUdfVEVTVF9LRVhFQ19IQU5ET1ZFUikgKz0gdGVzdF9raG8ub1xuK29iai0kKENPTkZJR19URVNUX1ZNU1RBVCkgKz0gdGVzdF92bXN0YXQub1xuK29iai0kKENPTkZJR19URVNUX1NMQUIpICs9IHRlc3Rfc2xhYi5vXG4rb2JqLSQoQ09ORklHX1RFU1RfUEFHRUFMTE9DKSArPSB0ZXN0X3BhZ2VhbGxvYy5vXG4gXG4gb2JqLSQoQ09ORklHX1RFU1RfRlBVKSArPSB0ZXN0X2ZwdS5vXG4gdGVzdF9mcHUteSA6PSB0ZXN0X2ZwdV9nbHVlLm8gdGVzdF9mcHVfaW1wbC5vXG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3RfcGFnZWFsbG9jLmMgYi9saWIvdGVzdF9wYWdlYWxsb2MuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjMwNTE0ZGY1MmM1YjBcbi0tLSAvZGV2L251bGxcbisrKyBiL2xpYi90ZXN0X3BhZ2VhbGxvYy5jXG5AQCAtMCwwICsxLDMzNyBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4rLypcbisgKiBUZXN0IG1vZHVsZSBmb3IgaW4ga2VybmVsIHN5bnRoZXRpYyBwYWdlIGFsbG9jYXRvciB0ZXN0aW5nLlxuKyAqXG4rICogQ29tcGlsZWQgYXMgYSBtb2R1bGUuIFRoZSBtb2R1bGUgbmVlZHMgdG8gYmUgbG9hZGVkIHRvIHJ1bi5cbisgKlxuKyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24sIENocmlzdG9waCBMYW1ldGVyIFx1MDAzY2NsQGdlbnR3by5vcmdcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pbml0LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vdGltZXguaFx1MDAzZVxuK1xuKyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwXG4rXG4rI2RlZmluZSBDT05DVVJSRU5UX01BWF9PUkRFUiA2XG4rXG4rI2lmZGVmIENPTkZJR19TTVBcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21wbGV0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rdGhyZWFkLmhcdTAwM2VcbitcbitzdGF0aWMgc3RydWN0IHRlc3Rfc3RydWN0IHtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbitcdGludCBjcHU7XG4rXHRpbnQgb3JkZXI7XG4rXHRpbnQgY291bnQ7XG4rXHRzdHJ1Y3QgcGFnZSAqKnY7XG4rXHR2b2lkICgqdGVzdF9wMSkoc3RydWN0IHRlc3Rfc3RydWN0ICp0KTtcbitcdHZvaWQgKCp0ZXN0X3AyKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydDE7XG4rXHR1bnNpZ25lZCBsb25nIHN0b3AxO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydDI7XG4rXHR1bnNpZ25lZCBsb25nIHN0b3AyO1xuK30gdGVzdFtOUl9DUFVTXTtcbitcbisvKlxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHVzIFx1MDAzZSAwIGFuZCB0aGVuIGFsbCB0aGVcbisgKiBvYmplY3RzIGxhdGVyIG9uIGNwdSAwXG4rICovXG4rc3RhdGljIHZvaWQgcmVtb3RlX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHQvKiBQZXJmb3JtIG5vIGFsbG9jYXRpb25zIG9uIGNwdSAwICovXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB0LVx1MDAzZWNvdW50OyBpKyspIHtcbitcdFx0c3RydWN0IHBhZ2UgKnA7XG4rXG4rXHRcdGlmIChzbXBfcHJvY2Vzc29yX2lkKCkpIHtcbitcdFx0XHRwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtXHUwMDNlb3JkZXIpO1xuK1x0XHRcdC8qIFVzZSBvYmplY3QgKi9cbitcdFx0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAxNywgNCk7XG4rXHRcdH0gZWxzZVxuK1x0XHRcdHAgPSBOVUxMO1xuK1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcdGludCBjcHU7XG4rXG4rXHQvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqL1xuK1x0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpwID0gdGVzdFtjcHVdLnZbaV07XG4rXG4rXHRcdFx0aWYgKCFwKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0X19mcmVlX3BhZ2VzKHAsIHQtXHUwMDNlb3JkZXIpO1xuK1x0XHR9XG4rfVxuK1xuKy8qXG4rICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIGFuZCBsYXRlciBmcmVlIHRoZW0gYWxsIGFnYWluXG4rICovXG4rc3RhdGljIHZvaWQgYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdC1cdTAwM2Vjb3VudDsgaSsrKSB7XG4rXHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsIHQtXHUwMDNlb3JkZXIpO1xuK1xuK1x0XHRtZW1zZXQocGFnZV9hZGRyZXNzKHApLCAxNCwgNCk7XG4rXHRcdHQtXHUwMDNldltpXSA9IHA7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGFsbG9jX3RoZW5fZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHRzdHJ1Y3QgcGFnZSAqcCA9IHQtXHUwMDNldltpXTtcbitcbitcdFx0X19mcmVlX3BhZ2VzKHAsIHQtXHUwMDNlb3JkZXIpO1xuK1x0fVxuK31cbitcbisvKlxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cy4gRnJlZSB0aGVtIGltbWVkaWF0ZWx5LlxuKyAqL1xuK3N0YXRpYyB2b2lkIGFsbG9jX2ZyZWVfdGVzdF9wMShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcbitcdFx0c3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCwgdC1cdTAwM2VvcmRlcik7XG4rXG4rXHRcdG1lbXNldChwYWdlX2FkZHJlc3MocCksIDEyLCA0KTtcbitcdFx0X19mcmVlX3BhZ2VzKHAsIHQtXHUwMDNlb3JkZXIpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgYXRvbWljX3QgdGVzdHNfcnVubmluZztcbitzdGF0aWMgYXRvbWljX3QgcGhhc2UxX2NvbXBsZXRlO1xuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjEpO1xuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjIpO1xuK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oY29tcGxldGlvbjMpO1xuK1xuK3N0YXRpYyBpbnQgdGVzdF9mdW5jKHZvaWQgKnByaXZhdGUpXG4re1xuK1x0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gcHJpdmF0ZTtcbitcdGNwdW1hc2tfdCBuZXdtYXNrID0gQ1BVX01BU0tfTk9ORTtcbitcbitcdGNwdW1hc2tfc2V0X2NwdSh0LVx1MDAzZWNwdSwgXHUwMDI2bmV3bWFzayk7XG4rXHRzZXRfY3B1c19hbGxvd2VkX3B0cihjdXJyZW50LCBcdTAwMjZuZXdtYXNrKTtcbitcdHQtXHUwMDNldiA9IGttYWxsb2NfYXJyYXkodC1cdTAwM2Vjb3VudCwgc2l6ZW9mKHN0cnVjdCBwYWdlICopLCBHRlBfS0VSTkVMKTtcbitcbitcdGF0b21pY19pbmMoXHUwMDI2dGVzdHNfcnVubmluZyk7XG4rXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcdHQtXHUwMDNlc3RhcnQxID0gZ2V0X2N5Y2xlcygpO1xuK1x0dC1cdTAwM2V0ZXN0X3AxKHQpO1xuK1x0dC1cdTAwM2VzdG9wMSA9IGdldF9jeWNsZXMoKTtcbitcdGF0b21pY19pbmMoXHUwMDI2cGhhc2UxX2NvbXBsZXRlKTtcbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjIpO1xuK1x0dC1cdTAwM2VzdGFydDIgPSBnZXRfY3ljbGVzKCk7XG4rXHRpZiAodC1cdTAwM2V0ZXN0X3AyKVxuK1x0XHR0LVx1MDAzZXRlc3RfcDIodCk7XG4rXHR0LVx1MDAzZXN0b3AyID0gZ2V0X2N5Y2xlcygpO1xuK1x0YXRvbWljX2RlYyhcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjMpO1xuK1x0a2ZyZWUodC1cdTAwM2V2KTtcbitcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbitcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLFxuK1x0XHR2b2lkICgqcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcbitcdFx0aW50IG9yZGVyLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGludCBjcHU7XG4rXHR1bnNpZ25lZCBsb25nIHRpbWUxID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgdGltZTIgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBzdW0xID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgc3VtMiA9IDA7XG4rXG4rXHRhdG9taWNfc2V0KFx1MDAyNnRlc3RzX3J1bm5pbmcsIDApO1xuK1x0YXRvbWljX3NldChcdTAwMjZwaGFzZTFfY29tcGxldGUsIDApO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMik7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjMpO1xuK1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbitcdFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXHUwMDI2dGVzdFtjcHVdO1xuK1xuK1x0XHR0LVx1MDAzZWNwdSA9IGNwdTtcbitcdFx0dC1cdTAwM2Vjb3VudCA9IFRFU1RfQ09VTlQ7XG4rXHRcdHQtXHUwMDNldGVzdF9wMSA9IHAxO1xuK1x0XHR0LVx1MDAzZXRlc3RfcDIgPSBwMjtcbitcdFx0dC1cdTAwM2VvcmRlciA9IG9yZGVyO1xuK1x0XHR0LVx1MDAzZXRhc2sgPSBrdGhyZWFkX3J1bih0ZXN0X2Z1bmMsIHQsIFwidGVzdCVkXCIsIGNwdSk7XG4rXHRcdGlmIChJU19FUlIodC1cdTAwM2V0YXNrKSkge1xuK1x0XHRcdHByX2VycihcIkZhaWxlZCB0byBzdGFydCB0ZXN0IGZ1bmNcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBhcmUgcnVubmluZyAqL1xuK1x0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNnRlc3RzX3J1bm5pbmcpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcbitcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDEgKi9cbitcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZwaGFzZTFfY29tcGxldGUpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24yKTtcbitcbitcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDIgKi9cbitcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZ0ZXN0c19ydW5uaW5nKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24zKTtcbitcbitcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuK1x0XHRrdGhyZWFkX3N0b3AodGVzdFtjcHVdLnRhc2spO1xuK1xuK1x0cHJfYWxlcnQoXCIlcyglZCk6XCIsIG5hbWUsIG9yZGVyKTtcbitcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7XG4rXHRcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IFx1MDAyNnRlc3RbY3B1XTtcbitcbitcdFx0dGltZTEgPSB0LVx1MDAzZXN0b3AxIC0gdC1cdTAwM2VzdGFydDE7XG4rXHRcdHRpbWUyID0gdC1cdTAwM2VzdG9wMiAtIHQtXHUwMDNlc3RhcnQyO1xuK1x0XHRzdW0xICs9IHRpbWUxO1xuK1x0XHRzdW0yICs9IHRpbWUyO1xuK1x0XHRwcl9jb250KFwiICVkPSVsdVwiLCBjcHUsIHRpbWUxIC8gVEVTVF9DT1VOVCk7XG4rXHRcdGlmIChwMilcbitcdFx0XHRwcl9jb250KFwiLyVsdVwiLCB0aW1lMiAvIFRFU1RfQ09VTlQpO1xuK1x0fVxuK1x0cHJfY29udChcIiBBdmVyYWdlPSVsdVwiLCBzdW0xIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTtcbitcdGlmIChwMilcbitcdFx0cHJfY29udChcIi8lbHVcIiwgc3VtMiAvIG51bV9vbmxpbmVfY3B1cygpIC8gVEVTVF9DT1VOVCk7XG4rXHRwcl9jb250KFwiXFxuXCIpO1xuK1x0c2NoZWR1bGVfdGltZW91dCgyMDApO1xuK31cbisjZW5kaWZcbitcbitzdGF0aWMgaW50IHBhZ2VhbGxvY190ZXN0X2luaXQodm9pZClcbit7XG4rXHR2b2lkICoqdiA9IGttYWxsb2NfYXJyYXkoVEVTVF9DT1VOVCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XG4rXHRpbnQgcmVtO1xuK1x0aW50IG9yZGVyO1xuK1xuK1x0cHJfYWxlcnQoXCJ0ZXN0IGluaXRcXG5cIik7XG4rXG4rXHRwcl9hbGVydChcIlNpbmdsZSB0aHJlYWQgdGVzdGluZ1xcblwiKTtcbitcdHByX2FsZXJ0KFwiPT09PT09PT09PT09PT09PT09PT09XFxuXCIpO1xuK1x0cHJfYWxlcnQoXCIxLiBSZXBlYXRlZGx5IGFsbG9jYXRlIHRoZW4gZnJlZSB0ZXN0XFxuXCIpO1xuK1x0Zm9yIChvcmRlciA9IDA7IG9yZGVyIFx1MDAzYz0gTUFYX1BBR0VfT1JERVI7IG9yZGVyKyspIHtcbitcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpwID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX0NPTVAsXG4rXHRcdFx0XHRcdFx0b3JkZXIpO1xuK1xuK1x0XHRcdGlmICghcCkge1xuK1x0XHRcdFx0cHJfZXJyKFwiQ2Fubm90IGFsbG9jYXRlIG9yZGVyPSVkXFxuXCIsIG9yZGVyKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHQvKiBUb3VjaCBwYWdlICovXG4rXHRcdFx0bWVtc2V0KHBhZ2VfYWRkcmVzcyhwKSwgMjIsIDQpO1xuK1x0XHRcdHZbaV0gPSBwO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfYWxlcnQoXCIlaSB0aW1lcyBhbGxvY19wYWdlKCwlZCkgXCIsIGksIG9yZGVyKTtcbitcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzIFwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcbitcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xuK1x0XHRcdHN0cnVjdCBwYWdlICpwID0gdltpXTtcbitcbitcdFx0XHRfX2ZyZWVfcGFnZXMocCwgb3JkZXIpO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfY29udChcIl9fZnJlZV9wYWdlcygsJWQpXCIsIG9yZGVyKTtcbitcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzXFxuXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuK1x0fVxuK1xuK1x0cHJfYWxlcnQoXCIyLiBhbGxvYy9mcmVlIHRlc3RcXG5cIik7XG4rXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjPSBNQVhfUEFHRV9PUkRFUjsgb3JkZXIrKykge1xuK1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XG4rXHRcdFx0c3RydWN0IHBhZ2UgKnAgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfQ09NUCxcbitcdFx0XHRcdFx0XHQgICAgIG9yZGVyKTtcbitcdFx0XHRfX2ZyZWVfcGFnZXMocCwgb3JkZXIpO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfYWxlcnQoXCIlaSB0aW1lcyBhbGxvYyggLCVkKS9mcmVlIFwiLCBpLCBvcmRlcik7XG4rXHRcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuK1x0XHRwcl9jb250KFwiLVx1MDAzZSAlbGx1IGN5Y2xlc1xcblwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcdH1cbitcdGtmcmVlKHYpO1xuKyNpZmRlZiBDT05GSUdfU01QXG4rXHRwcl9pbmZvKFwiQ29uY3VycmVudCBhbGxvY3NcXG5cIik7XG4rXHRwcl9pbmZvKFwiPT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRmb3IgKG9yZGVyID0gMDsgb3JkZXIgXHUwMDNjIENPTkNVUlJFTlRfTUFYX09SREVSOyBvcmRlcisrKSB7XG4rXHRcdGRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY190aGVuX2ZyZWVfdGVzdF9wMSxcbitcdFx0XHRhbGxvY190aGVuX2ZyZWVfdGVzdF9wMixcbitcdFx0XHRvcmRlciwgXCJQYWdlIGFsbG9jIE4qYWxsb2MgTipmcmVlXCIpO1xuK1x0fVxuK1x0cHJfaW5mbyhcIi0tLS1GYXN0cGF0aC0tLVxcblwiKTtcbitcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgQ09OQ1VSUkVOVF9NQVhfT1JERVI7IG9yZGVyKyspIHtcbitcdFx0ZG9fY29uY3VycmVudF90ZXN0KGFsbG9jX2ZyZWVfdGVzdF9wMSwgTlVMTCxcbitcdFx0XHRvcmRlciwgXCJQYWdlIE4qKGFsbG9jIGZyZWUpXCIpO1xuK1x0fVxuK1xuK1x0cHJfaW5mbyhcIlJlbW90ZSBmcmVlIHRlc3RcXG5cIik7XG4rXHRwcl9pbmZvKFwiPT09PT09PT09PT09PT09PVxcblwiKTtcbitcdGZvciAob3JkZXIgPSAwOyBvcmRlciBcdTAwM2MgQ09OQ1VSUkVOVF9NQVhfT1JERVI7IG9yZGVyKyspIHtcbitcdFx0ZG9fY29uY3VycmVudF90ZXN0KHJlbW90ZV9mcmVlX3Rlc3RfcDEsXG4rXHRcdFx0XHRyZW1vdGVfZnJlZV90ZXN0X3AyLFxuK1x0XHRcdG9yZGVyLCBcIk4qcmVtb3RlIGZyZWVcIik7XG4rXHR9XG4rXG4rI2VuZGlmXG4rXG4rXHRyZXR1cm4gLUVBR0FJTjsgLyogRmFpbCB3aWxsIGRpcmVjdGx5IHVubG9hZCB0aGUgbW9kdWxlICovXG4rfVxuK1xuK3N0YXRpYyB2b2lkIHBhZ2VhbGxvY190ZXN0X2V4aXQodm9pZClcbit7XG4rXHRwcl9hbGVydChcInRlc3QgZXhpdFxcblwiKTtcbit9XG4rXG4rbW9kdWxlX2luaXQocGFnZWFsbG9jX3Rlc3RfaW5pdClcbittb2R1bGVfZXhpdChwYWdlYWxsb2NfdGVzdF9leGl0KVxuK1xuK01PRFVMRV9MSUNFTlNFKFwiR1BMXCIpO1xuK01PRFVMRV9BVVRIT1IoXCJDaHJpc3RvcGggTGFtZXRlclwiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJwYWdlIGFsbG9jYXRvciBwZXJmb3JtYW5jZSB0ZXN0XCIpO1xuZGlmZiAtLWdpdCBhL2xpYi90ZXN0X3NsYWIuYyBiL2xpYi90ZXN0X3NsYWIuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmE0M2IwZDczZGFhYjlcbi0tLSAvZGV2L251bGxcbisrKyBiL2xpYi90ZXN0X3NsYWIuY1xuQEAgLTAsMCArMSwzNzUgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogVGVzdCBtb2R1bGUgZm9yIHN5bnRoZXRpYyBpbiBrZXJuZWwgc2xhYiBhbGxvY2F0b3IgdGVzdGluZy5cbisgKlxuKyAqIFRoZSB0ZXN0IGlzIHRyaWdnZXJlZCBieSBsb2FkaW5nIHRoZSBtb2R1bGUgKHdoaWNoIHdpbGwgZmFpbCkuXG4rICpcbisgKiAoQykgMjAwOSBMaW51eCBGb3VuZGF0aW9uIFx1MDAzY2NsQGdlbnR3by5vcmdcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vdGltZXguaFx1MDAzZVxuK1xuKyNkZWZpbmUgVEVTVF9DT1VOVCAxMDAwMFxuK1xuKyNpZmRlZiBDT05GSUdfU01QXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva3RocmVhZC5oXHUwMDNlXG4rXG4rc3RhdGljIHN0cnVjdCB0ZXN0X3N0cnVjdCB7XG4rXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4rXHRpbnQgY3B1O1xuK1x0aW50IHNpemU7XG4rXHRpbnQgY291bnQ7XG4rXHR2b2lkICoqdjtcbitcdHZvaWQgKCp0ZXN0X3AxKShzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQpO1xuK1x0dm9pZCAoKnRlc3RfcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCk7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0MTtcbitcdHVuc2lnbmVkIGxvbmcgc3RvcDE7XG4rXHR1bnNpZ25lZCBsb25nIHN0YXJ0MjtcbitcdHVuc2lnbmVkIGxvbmcgc3RvcDI7XG4rfSB0ZXN0W05SX0NQVVNdO1xuK1xuKy8qXG4rICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzIG9uIGNwdXMgXHUwMDNlIDAgYW5kIHRoZW4gYWxsIHRoZVxuKyAqIG9iamVjdHMgbGF0ZXIgb24gY3B1IDBcbisgKi9cbitzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AxKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcbitcdC8qIFBlcmZvcm0gbm8gYWxsb2NhdGlvbnMgb24gY3B1IDAgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHR1OCAqcDtcbitcbitcdFx0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSkge1xuK1x0XHRcdHAgPSBrbWFsbG9jKHQtXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0LyogVXNlIG9iamVjdCAqL1xuK1x0XHRcdCpwID0gMTc7XG4rXHRcdH0gZWxzZVxuK1x0XHRcdHAgPSBOVUxMO1xuK1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCByZW1vdGVfZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcdGludCBjcHU7XG4rXG4rXHQvKiBBbGwgZnJlZXMgYXJlIGNvbXBsZXRlZCBvbiBjcHUgemVybyAqL1xuK1x0aWYgKHNtcF9wcm9jZXNzb3JfaWQoKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHRcdHU4ICpwID0gdGVzdFtjcHVdLnZbaV07XG4rXG4rXHRcdFx0aWYgKCFwKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0KnAgPSAxNjtcbitcdFx0XHRrZnJlZShwKTtcbitcdFx0fVxuK31cbitcbisvKlxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBvbiBjcHUgMCBhbmQgZnJlZSB0aGVtIGltbWVkaWF0ZWx5IG9uIHRoZVxuKyAqIG90aGVyIHByb2Nlc3NvcnMuXG4rICovXG4rc3RhdGljIHZvaWQgYWxsb2Nfbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuK3tcbitcdGludCBpO1xuK1x0aW50IGNwdTtcbitcdGNoYXIgKnA7XG4rXG4rXHRpZiAoc21wX3Byb2Nlc3Nvcl9pZCgpKSB7XG4rXHRcdC8qIENvbnN1bWVyICovXG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQgLyBudW1fb25saW5lX2NwdXMoKTsgaSsrKSB7XG4rXHRcdFx0ZG8ge1xuK1x0XHRcdFx0cCA9IHQtXHUwMDNldltpXTtcbitcdFx0XHRcdGlmICghcClcbitcdFx0XHRcdFx0Y3B1X3JlbGF4KCk7XG4rXHRcdFx0XHRlbHNlXG4rXHRcdFx0XHRcdCpwID0gMTc7XG4rXHRcdFx0fSB3aGlsZSAoIXApO1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHRcdHQtXHUwMDNldltpXSA9IE5VTEw7XG4rXHRcdH1cbitcdFx0cmV0dXJuO1xuK1x0fVxuK1x0LyogUHJvZHVjZXIgKi9cbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuK1x0XHRcdGlmIChjcHUpIHtcbitcdFx0XHRcdHAgPSBrbWFsbG9jKHQtXHUwMDNlc2l6ZSwgR0ZQX0tFUk5FTCk7XG4rXHRcdFx0XHQvKiBVc2Ugb2JqZWN0ICovXG4rXHRcdFx0XHQqcCA9IDE3O1xuK1x0XHRcdFx0dGVzdFtjcHVdLnZbaV0gPSBwO1xuK1x0XHRcdH1cbitcdFx0fVxuK1x0fVxuK31cbitcbisvKlxuKyAqIEFsbG9jYXRlIFRFU1RfQ09VTlQgb2JqZWN0cyBhbmQgbGF0ZXIgZnJlZSB0aGVtIGFsbCBhZ2FpblxuKyAqL1xuK3N0YXRpYyB2b2lkIGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgdC1cdTAwM2Vjb3VudDsgaSsrKSB7XG4rXHRcdHU4ICpwID0ga21hbGxvYyh0LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuK1xuK1x0XHQqcCA9IDE0O1xuK1x0XHR0LVx1MDAzZXZbaV0gPSBwO1xuK1x0fVxuK31cbitcbitzdGF0aWMgdm9pZCBrbWFsbG9jX2FsbG9jX3RoZW5fZnJlZV90ZXN0X3AyKHN0cnVjdCB0ZXN0X3N0cnVjdCAqdClcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHQtXHUwMDNlY291bnQ7IGkrKykge1xuK1x0XHR1OCAqcCA9IHQtXHUwMDNldltpXTtcbitcbitcdFx0KnAgPSAxMztcbitcdFx0a2ZyZWUocCk7XG4rXHR9XG4rfVxuK1xuKy8qXG4rICogQWxsb2NhdGUgVEVTVF9DT1VOVCBvYmplY3RzLiBGcmVlIHRoZW0gaW1tZWRpYXRlbHkuXG4rICovXG4rc3RhdGljIHZvaWQga21hbGxvY19hbGxvY19mcmVlX3Rlc3RfcDEoc3RydWN0IHRlc3Rfc3RydWN0ICp0KVxuK3tcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XG4rXHRcdHU4ICpwID0ga21hbGxvYyh0LVx1MDAzZXNpemUsIEdGUF9LRVJORUwpO1xuK1xuK1x0XHQqcCA9IDEyO1xuK1x0XHRrZnJlZShwKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGF0b21pY190IHRlc3RzX3J1bm5pbmc7XG4rc3RhdGljIGF0b21pY190IHBoYXNlMV9jb21wbGV0ZTtcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24xKTtcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24yKTtcbitzdGF0aWMgREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24zKTtcbitcbitzdGF0aWMgaW50IHRlc3RfZnVuYyh2b2lkICpwcml2YXRlKVxuK3tcbitcdHN0cnVjdCB0ZXN0X3N0cnVjdCAqdCA9IHByaXZhdGU7XG4rXHRjcHVtYXNrX3QgbmV3bWFzayA9IENQVV9NQVNLX05PTkU7XG4rXG4rXHRjcHVtYXNrX3NldF9jcHUodC1cdTAwM2VjcHUsIFx1MDAyNm5ld21hc2spO1xuK1x0c2V0X2NwdXNfYWxsb3dlZF9wdHIoY3VycmVudCwgXHUwMDI2bmV3bWFzayk7XG4rXHR0LVx1MDAzZXYgPSBrY2FsbG9jKHQtXHUwMDNlY291bnQsIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTtcbitcbitcdGF0b21pY19pbmMoXHUwMDI2dGVzdHNfcnVubmluZyk7XG4rXHR3YWl0X2Zvcl9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcdHQtXHUwMDNlc3RhcnQxID0gZ2V0X2N5Y2xlcygpO1xuK1x0dC1cdTAwM2V0ZXN0X3AxKHQpO1xuK1x0dC1cdTAwM2VzdG9wMSA9IGdldF9jeWNsZXMoKTtcbitcdGF0b21pY19pbmMoXHUwMDI2cGhhc2UxX2NvbXBsZXRlKTtcbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjIpO1xuK1x0dC1cdTAwM2VzdGFydDIgPSBnZXRfY3ljbGVzKCk7XG4rXHRpZiAodC1cdTAwM2V0ZXN0X3AyKVxuK1x0XHR0LVx1MDAzZXRlc3RfcDIodCk7XG4rXHR0LVx1MDAzZXN0b3AyID0gZ2V0X2N5Y2xlcygpO1xuK1x0YXRvbWljX2RlYyhcdTAwMjZ0ZXN0c19ydW5uaW5nKTtcbitcdHdhaXRfZm9yX2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjMpO1xuK1x0a2ZyZWUodC1cdTAwM2V2KTtcbitcdHdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7XG4rXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTtcbitcdFx0c2NoZWR1bGVfdGltZW91dCgxMCk7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgZG9fY29uY3VycmVudF90ZXN0KHZvaWQgKCpwMSkoc3RydWN0IHRlc3Rfc3RydWN0ICopLFxuK1x0XHR2b2lkICgqcDIpKHN0cnVjdCB0ZXN0X3N0cnVjdCAqKSxcbitcdFx0aW50IHNpemUsIGNvbnN0IGNoYXIgKm5hbWUpXG4re1xuK1x0aW50IGNwdTtcbitcdHVuc2lnbmVkIGxvbmcgdGltZTEgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyB0aW1lMiA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIHN1bTEgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyBzdW0yID0gMDtcbitcbitcdGF0b21pY19zZXQoXHUwMDI2dGVzdHNfcnVubmluZywgMCk7XG4rXHRhdG9taWNfc2V0KFx1MDAyNnBoYXNlMV9jb21wbGV0ZSwgMCk7XG4rXHRpbml0X2NvbXBsZXRpb24oXHUwMDI2Y29tcGxldGlvbjEpO1xuK1x0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmNvbXBsZXRpb24yKTtcbitcdGluaXRfY29tcGxldGlvbihcdTAwMjZjb21wbGV0aW9uMyk7XG4rXG4rXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuK1x0XHRzdHJ1Y3QgdGVzdF9zdHJ1Y3QgKnQgPSBcdTAwMjZ0ZXN0W2NwdV07XG4rXG4rXHRcdHQtXHUwMDNlY3B1ID0gY3B1O1xuK1x0XHR0LVx1MDAzZWNvdW50ID0gVEVTVF9DT1VOVDtcbitcdFx0dC1cdTAwM2V0ZXN0X3AxID0gcDE7XG4rXHRcdHQtXHUwMDNldGVzdF9wMiA9IHAyO1xuK1x0XHR0LVx1MDAzZXNpemUgPSBzaXplO1xuK1x0XHR0LVx1MDAzZXRhc2sgPSBrdGhyZWFkX3J1bih0ZXN0X2Z1bmMsIHQsIFwidGVzdCVkXCIsIGNwdSk7XG4rXHRcdGlmIChJU19FUlIodC1cdTAwM2V0YXNrKSkge1xuK1x0XHRcdHByX2VycihcIkZhaWxlZCB0byBzdGFydCB0ZXN0IGZ1bmNcXG5cIik7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBXYWl0IHRpbGwgYWxsIHByb2Nlc3NlcyBhcmUgcnVubmluZyAqL1xuK1x0d2hpbGUgKGF0b21pY19yZWFkKFx1MDAyNnRlc3RzX3J1bm5pbmcpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24xKTtcbitcbitcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDEgKi9cbitcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZwaGFzZTFfY29tcGxldGUpIFx1MDAzYyBudW1fb25saW5lX2NwdXMoKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24yKTtcbitcbitcdC8qIFdhaXQgdGlsbCBhbGwgcHJvY2Vzc2VzIGhhdmUgY29tcGxldGVkIHBoYXNlIDIgKi9cbitcdHdoaWxlIChhdG9taWNfcmVhZChcdTAwMjZ0ZXN0c19ydW5uaW5nKSkge1xuK1x0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7XG4rXHRcdHNjaGVkdWxlX3RpbWVvdXQoMTApO1xuK1x0fVxuK1x0Y29tcGxldGVfYWxsKFx1MDAyNmNvbXBsZXRpb24zKTtcbitcbitcdGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KVxuK1x0XHRrdGhyZWFkX3N0b3AodGVzdFtjcHVdLnRhc2spO1xuK1xuK1x0cHJfYWxlcnQoXCIlcyglZCk6XCIsIG5hbWUsIHNpemUpO1xuK1x0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcbitcdFx0c3RydWN0IHRlc3Rfc3RydWN0ICp0ID0gXHUwMDI2dGVzdFtjcHVdO1xuK1xuK1x0XHR0aW1lMSA9IHQtXHUwMDNlc3RvcDEgLSB0LVx1MDAzZXN0YXJ0MTtcbitcdFx0dGltZTIgPSB0LVx1MDAzZXN0b3AyIC0gdC1cdTAwM2VzdGFydDI7XG4rXHRcdHN1bTEgKz0gdGltZTE7XG4rXHRcdHN1bTIgKz0gdGltZTI7XG4rXHRcdHByX2NvbnQoXCIgJWQ9JWx1XCIsIGNwdSwgdGltZTEgLyBURVNUX0NPVU5UKTtcbitcdFx0aWYgKHAyKVxuK1x0XHRcdHByX2NvbnQoXCIvJWx1XCIsIHRpbWUyIC8gVEVTVF9DT1VOVCk7XG4rXHR9XG4rXHRwcl9jb250KFwiIEF2ZXJhZ2U9JWx1XCIsIHN1bTEgLyBudW1fb25saW5lX2NwdXMoKSAvIFRFU1RfQ09VTlQpO1xuK1x0aWYgKHAyKVxuK1x0XHRwcl9jb250KFwiLyVsdVwiLCBzdW0yIC8gbnVtX29ubGluZV9jcHVzKCkgLyBURVNUX0NPVU5UKTtcbitcdHByX2NvbnQoXCJcXG5cIik7XG4rXHRzY2hlZHVsZV90aW1lb3V0KDIwMCk7XG4rfVxuKyNlbmRpZlxuK1xuK3N0YXRpYyBpbnQgc2xhYl90ZXN0X2luaXQodm9pZClcbit7XG4rXHR2b2lkICoqdiA9IGttYWxsb2NfYXJyYXkoVEVTVF9DT1VOVCwgc2l6ZW9mKHZvaWQgKiksIEdGUF9LRVJORUwpO1xuK1x0dW5zaWduZWQgaW50IGk7XG4rXHRjeWNsZXNfdCB0aW1lMSwgdGltZTIsIHRpbWU7XG4rXHRpbnQgcmVtO1xuK1x0aW50IHNpemU7XG4rXG4rXHRwcl9hbGVydChcInRlc3QgaW5pdFxcblwiKTtcbitcbitcdHByX2FsZXJ0KFwiU2luZ2xlIHRocmVhZCB0ZXN0aW5nXFxuXCIpO1xuK1x0cHJfYWxlcnQoXCI9PT09PT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRwcl9hbGVydChcIjEuIEttYWxsb2M6IFJlcGVhdGVkbHkgYWxsb2NhdGUgdGhlbiBmcmVlIHRlc3RcXG5cIik7XG4rXHRmb3IgKHNpemUgPSA4OyBzaXplIFx1MDAzYz0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAyOyBzaXplIFx1MDAzY1x1MDAzYz0gMSkge1xuK1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XG4rXHRcdFx0dTggKnAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuK1xuK1x0XHRcdCpwID0gMjI7XG4rXHRcdFx0dltpXSA9IHA7XG4rXHRcdH1cbitcdFx0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4rXHRcdHRpbWUgPSB0aW1lMiAtIHRpbWUxO1xuK1xuK1x0XHRwcl9hbGVydChcIiVpIHRpbWVzIGttYWxsb2MoJWQpIFwiLCBpLCBzaXplKTtcbitcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzIFwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcbitcdFx0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIFRFU1RfQ09VTlQ7IGkrKykge1xuK1x0XHRcdHU4ICpwID0gdltpXTtcbitcbitcdFx0XHQqcCA9IDIzO1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfY29udChcImtmcmVlIFwiKTtcbitcdFx0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzXFxuXCIsICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuK1x0fVxuK1xuK1x0cHJfYWxlcnQoXCIyLiBLbWFsbG9jOiBhbGxvYy9mcmVlIHRlc3RcXG5cIik7XG4rXHRmb3IgKHNpemUgPSA4OyBzaXplIFx1MDAzYz0gUEFHRV9TSVpFIFx1MDAzY1x1MDAzYyAyOyBzaXplIFx1MDAzY1x1MDAzYz0gMSkge1xuK1x0XHR0aW1lMSA9IGdldF9jeWNsZXMoKTtcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKSB7XG4rXHRcdFx0dTggKnAgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpO1xuK1xuK1x0XHRcdGtmcmVlKHApO1xuK1x0XHR9XG4rXHRcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0XHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdFx0cHJfYWxlcnQoXCIlaSB0aW1lcyBrbWFsbG9jKCVkKS9rZnJlZSBcIiwgaSwgc2l6ZSk7XG4rXHRcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuK1x0XHRwcl9jb250KFwiLVx1MDAzZSAlbGx1IGN5Y2xlc1xcblwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcdH1cbitcdGtmcmVlKHYpO1xuKyNpZmRlZiBDT05GSUdfU01QXG4rXHRwcl9pbmZvKFwiQ29uY3VycmVudCBhbGxvY3NcXG5cIik7XG4rXHRwcl9pbmZvKFwiPT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRmb3IgKGkgPSAzOyBpIFx1MDAzYz0gUEFHRV9TSElGVDsgaSsrKSB7XG4rXHRcdGRvX2NvbmN1cnJlbnRfdGVzdChrbWFsbG9jX2FsbG9jX3RoZW5fZnJlZV90ZXN0X3AxLFxuK1x0XHRcdGttYWxsb2NfYWxsb2NfdGhlbl9mcmVlX3Rlc3RfcDIsXG4rXHRcdFx0MSBcdTAwM2NcdTAwM2MgaSwgXCJLbWFsbG9jIE4qYWxsb2MgTipmcmVlXCIpO1xuK1x0fVxuK1x0Zm9yIChpID0gMzsgaSBcdTAwM2M9IFBBR0VfU0hJRlQ7IGkrKykge1xuK1x0XHRkb19jb25jdXJyZW50X3Rlc3Qoa21hbGxvY19hbGxvY19mcmVlX3Rlc3RfcDEsIE5VTEwsXG4rXHRcdFx0MSBcdTAwM2NcdTAwM2MgaSwgXCJLbWFsbG9jIE4qKGFsbG9jIGZyZWUpXCIpO1xuK1x0fVxuK1xuK1x0cHJfaW5mbyhcIlJlbW90ZSBmcmVlIHRlc3RcXG5cIik7XG4rXHRwcl9pbmZvKFwiPT09PT09PT09PT09PT09PVxcblwiKTtcbitcdGZvciAoaSA9IDM7IGkgXHUwMDNjPSBQQUdFX1NISUZUOyBpKyspIHtcbitcdFx0ZG9fY29uY3VycmVudF90ZXN0KHJlbW90ZV9mcmVlX3Rlc3RfcDEsXG4rXHRcdFx0XHRyZW1vdGVfZnJlZV90ZXN0X3AyLFxuK1x0XHRcdDEgXHUwMDNjXHUwMDNjIGksIFwiTipyZW1vdGUgZnJlZVwiKTtcbitcdH1cbitcbitcdHByX2luZm8oXCIxIGFsbG9jIE4gZnJlZSB0ZXN0XFxuXCIpO1xuK1x0cHJfaW5mbyhcIj09PT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRmb3IgKGkgPSAzOyBpIFx1MDAzYz0gUEFHRV9TSElGVDsgaSsrKSB7XG4rXHRcdGRvX2NvbmN1cnJlbnRfdGVzdChhbGxvY19uX2ZyZWVfdGVzdF9wMSxcbitcdFx0XHRcdE5VTEwsXG4rXHRcdFx0MSBcdTAwM2NcdTAwM2MgaSwgXCIxIGFsbG9jIE4gZnJlZVwiKTtcbitcdH1cbitcbisjZW5kaWZcbitcdHJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi9cbit9XG4rXG4rc3RhdGljIHZvaWQgc2xhYl90ZXN0X2V4aXQodm9pZClcbit7XG4rXHRwcl9hbGVydChcInRlc3QgZXhpdFxcblwiKTtcbit9XG4rXG4rbW9kdWxlX2luaXQoc2xhYl90ZXN0X2luaXQpXG4rbW9kdWxlX2V4aXQoc2xhYl90ZXN0X2V4aXQpXG4rXG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rTU9EVUxFX0FVVEhPUihcIkNocmlzdG9waCBMYW1ldGVyIGFuZCBNYXRoaWV1IERlc25veWVyc1wiKTtcbitNT0RVTEVfREVTQ1JJUFRJT04oXCJTTEFCIHRlc3RcIik7XG5kaWZmIC0tZ2l0IGEvbGliL3Rlc3Rfdm1zdGF0LmMgYi9saWIvdGVzdF92bXN0YXQuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmY2M2Y0MzlhYjlkMmFcbi0tLSAvZGV2L251bGxcbisrKyBiL2xpYi90ZXN0X3Ztc3RhdC5jXG5AQCAtMCwwICsxLDk1IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbisvKlxuKyAqIFRlc3QgbW9kdWxlIGZvciBpbi1rZXJuZWwgc3ludGhldGljIHZtIHN0YXRpc3RpY3MgcGVyZm9ybWFuY2UuXG4rICpcbisgKiBleGVjdXRlXG4rICpcbisgKlx0bW9kcHJvYmUgdGVzdF92bXN0YXRcbisgKlxuKyAqIHRvIHJ1biB0aGlzIHRlc3RcbisgKlxuKyAqIChDKSAyMDA5IExpbnV4IEZvdW5kYXRpb24sIENocmlzdG9waCBMYW1ldGVyIFx1MDAzY2NsQGdlbnR3by5vcmdcdTAwM2VcbisgKi9cbitcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW5pdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL3RpbWV4LmhcdTAwM2VcbitcbisjZGVmaW5lIFRFU1RfQ09VTlQgMTAwMDBcbitcbitzdGF0aWMgaW50IHZtc3RhdF90ZXN0X2luaXQodm9pZClcbit7XG4rXHR1bnNpZ25lZCBpbnQgaTtcbitcdGN5Y2xlc190IHRpbWUxLCB0aW1lMiwgdGltZTtcbitcdGludCByZW07XG4rXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCk7XG4rXG4rXHRwcl9hbGVydChcIlZNc3RhdCB0ZXN0aW5nXFxuXCIpO1xuK1x0cHJfYWxlcnQoXCI9PT09PT09PT09PT09PT09PT09PT1cXG5cIik7XG4rXHRwcl9hbGVydChcIjEuIGluY196b25lX3BhZ2Vfc3RhdGUoKSB0aGVuIGRlY196b25lX3BhZ2Vfc3RhdGUoKVxcblwiKTtcbitcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKVxuK1x0XHRpbmNfem9uZV9wYWdlX3N0YXRlKHBhZ2UsIE5SX0ZSRUVfQ01BX1BBR0VTKTtcbitcbitcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4rXG4rXHRwcl9hbGVydChcIiVpIHRpbWVzIGluY196b25lX3BhZ2Vfc3RhdGUoKSBcIiwgaSk7XG4rXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbitcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzIFwiLCAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcbitcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKVxuK1x0XHRfX2RlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpO1xuK1xuK1x0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4rXHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdHByX2NvbnQoXCJfX2RlY196X3BfcygpIFwiKTtcbitcdHRpbWUgPSBkaXZfdTY0X3JlbSh0aW1lLCBURVNUX0NPVU5ULCBcdTAwMjZyZW0pO1xuK1x0cHJfY29udChcIi1cdTAwM2UgJWxsdSBjeWNsZXNcXG5cIiwgICh1bnNpZ25lZCBsb25nIGxvbmcpIHRpbWUpO1xuK1xuK1x0cHJfYWxlcnQoXCIyLiBpbmNfem9uZV9wYWdlX3N0YXRlKCkvZGVjX3pvbmVfcGFnZV9zdGF0ZSgpXFxuXCIpO1xuK1x0dGltZTEgPSBnZXRfY3ljbGVzKCk7XG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBURVNUX0NPVU5UOyBpKyspIHtcbitcdFx0aW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9GUkVFX0NNQV9QQUdFUyk7XG4rXHRcdGRlY196b25lX3BhZ2Vfc3RhdGUocGFnZSwgTlJfRlJFRV9DTUFfUEFHRVMpO1xuK1x0fVxuK1xuK1x0dGltZTIgPSBnZXRfY3ljbGVzKCk7XG4rXHR0aW1lID0gdGltZTIgLSB0aW1lMTtcbitcbitcdHByX2FsZXJ0KFwiJWkgdGltZXMgaW5jL2RlYyBcIiwgaSk7XG4rXHR0aW1lID0gZGl2X3U2NF9yZW0odGltZSwgVEVTVF9DT1VOVCwgXHUwMDI2cmVtKTtcbitcdHByX2NvbnQoXCItXHUwMDNlICVsbHUgY3ljbGVzXFxuXCIsICAodW5zaWduZWQgbG9uZyBsb25nKSB0aW1lKTtcbitcbitcdHByX2FsZXJ0KFwiMy4gY291bnRfdm1fZXZlbnQoKVxcblwiKTtcbitcdHRpbWUxID0gZ2V0X2N5Y2xlcygpO1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgVEVTVF9DT1VOVDsgaSsrKVxuK1x0XHRjb3VudF92bV9ldmVudChTTEFCU19TQ0FOTkVEKTtcbitcbitcdHRpbWUyID0gZ2V0X2N5Y2xlcygpO1xuK1x0dGltZSA9IHRpbWUyIC0gdGltZTE7XG4rXG4rXHRjb3VudF92bV9ldmVudHMoU0xBQlNfU0NBTk5FRCwgLVRFU1RfQ09VTlQpO1xuK1x0cHJfYWxlcnQoXCIlaSBjb3VudF92bV9ldmVudHMgXCIsIGkpO1xuK1x0dGltZSA9IGRpdl91NjRfcmVtKHRpbWUsIFRFU1RfQ09VTlQsIFx1MDAyNnJlbSk7XG4rXHRwcl9jb250KFwiLVx1MDAzZSAlbGx1IGN5Y2xlc1xcblwiLCAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdGltZSk7XG4rXHRfX2ZyZWVfcGFnZShwYWdlKTtcbitcdHJldHVybiAtRUFHQUlOOyAvKiBGYWlsIHdpbGwgZGlyZWN0bHkgdW5sb2FkIHRoZSBtb2R1bGUgKi9cbit9XG4rXG4rc3RhdGljIHZvaWQgdm1zdGF0X3Rlc3RfZXhpdCh2b2lkKVxuK3tcbitcdHByX2FsZXJ0KFwidGVzdCBleGl0XFxuXCIpO1xuK31cbitcbittb2R1bGVfaW5pdCh2bXN0YXRfdGVzdF9pbml0KVxuK21vZHVsZV9leGl0KHZtc3RhdF90ZXN0X2V4aXQpXG4rXG4rTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4rTU9EVUxFX0FVVEhPUihcIkNocmlzdG9waCBMYW1ldGVyXCIpO1xuK01PRFVMRV9ERVNDUklQVElPTihcIlZNIHN0YXRpc3RpY3MgdGVzdFwiKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEzOjAwOjAyLjYwNTExODU4OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc5NTEzMzI2NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gncyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0aHJlZSBuZXcgdGVzdCBtb2R1bGVzOiBgdGVzdF92bXN0YXRgLCBgdGVzdF9zbGFiYCwgYW5kIGB0ZXN0X3BhZ2VhbGxvY2AuIFRoZXkncmUgc3ludGhldGljIGJlbmNobWFya3MgZm9yIFZNIHN0YXRpc3RpY3MsIHNsYWIgYWxsb2NhdG9yLCBhbmQgdGhlIHBhZ2UgYWxsb2NhdG9yLCByZXNwZWN0aXZlbHkuIFRoZXkgZ2V0IGFkZGVkIHRvIGBLY29uZmlnLmRlYnVnYCBhbmQgdGhlIE1ha2VmaWxlLiBUaGUgY3J1Y2lhbCBwYXJ0IGlzIHRoYXQgdGhleSAqZXhlY3V0ZSogdXBvbiBtb2R1bGUgaW5pdGlhbGl6YXRpb24gKGBtb2R1bGVfaW5pdGApIGFuZCB0aGVuIGltbWVkaWF0ZWx5IHVubG9hZCB0aGVtc2VsdmVzIGJ5IHJldHVybmluZyBgLUVBR0FJTmAuXG5cbkluaXRpYWxseSwgSSBhc2tlZCBteXNlbGYsIFwiQXJlIHRoZXNlIGV2ZW4gKndvcnRoKiBmdXp6aW5nP1wiIE15IGV4cGVydGlzZSB0ZWxscyBtZSBmdXp6aW5nIHVzdWFsbHkgZm9jdXNlcyBvbiBjaGFuZ2VzIHRoYXQgaW50cm9kdWNlIG5ldyBmdW5jdGlvbmFsaXR5LCBBUElzLCBvciBkcml2ZXJzLiBUaGVzZSBtb2R1bGVzLCBob3dldmVyLCBhcmUgZXNzZW50aWFsbHkganVzdCBiZW5jaG1hcmtzLiBUaGV5IGRvbid0IGV4cG9zZSBhbnkgbmV3IHN5c2NhbGxzLCBpb2N0bHMsIG9yIGZ1bmN0aW9uYWwgbG9naWMuIFRoZXkganVzdCByZXBlYXRlZGx5IGNhbGwgZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9ucyBsaWtlIGBhbGxvY19wYWdlc2AsIGBrbWFsbG9jYCwgYW5kIGBpbmNfem9uZV9wYWdlX3N0YXRlYCBpbiBhIGxvb3AsIHB1cmVseSB0byBtZWFzdXJlIHBlcmZvcm1hbmNlLiBUaGV5IGFyZSAqbm90KiBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCdzIGNvcmUgb3BlcmF0aW9uLlxuXG5UaGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIGEgcGF0Y2ggaXMgd29ydGggZnV6emluZyBoYXMgc2V2ZXJhbCBkZWZpbmVkIHJlYXNvbnMgZm9yIGEgZmFsc2UgcmV0dXJuLCBhbmQgYWx0aG91Z2ggYSB0ZXN0IG1vZHVsZSBpc24ndCBleHBsaWNpdCwgaXQgc2VlbXMgdGhhdCBpdCdzIGp1c3Qgbm90IGZ1bmN0aW9uYWwgY2hhbmdlcy5cblxuSSByZS1leGFtaW5lZCB0aGUgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIHNvbWV0aGluZyBzaG91bGQgYmUgZnV6emVkLiBJdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiB0ZXN0IG1vZHVsZXMsIGJ1dCBpdCBkb2VzIHNheSB0aGluZ3MgbGlrZSBjb2RlIGNvbW1lbnRzLCBwdXJlIGRlY29yYXRpdmUgY2hhbmdlcywgYW5kIGNoYW5nZXMgdGhhdCBkb24ndCBhbHRlciBleGVjdXRpb24gZmxvdy4gQmVuY2htYXJrIG1vZHVsZXMgZG9uJ3QgZG8gdGhlc2UgdGhpbmdzLCBidXQgdGhleSBhbHNvIGRvbid0IHJlYWxseSAqZG8qIGFueXRoaW5nIHRoYXQncyBmdXp6ZWQuXG5cbldoaWxlIFN5emthbGxlciAqY291bGQqIGxvYWQgbW9kdWxlcywgZnV6emluZyBhIGJlbmNobWFyayBtb2R1bGUgaXMgcG9pbnRsZXNzLiBJdCBkb2Vzbid0IHRha2UgaW5wdXQgZnJvbSB1c2VyIHNwYWNlOyBpdCBqdXN0IHJ1bnMgYSBoYXJkY29kZWQgYmVuY2htYXJrIG9uIGxvYWQuIFRoZXJlZm9yZSwgSSB3aWxsIHNldCBgV29ydGhGdXp6aW5nPWZhbHNlYC4gTXkgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGVzZSBhcmUgcHVyZWx5IHN5bnRoZXRpYyBiZW5jaG1hcmsgbW9kdWxlcyB0aGF0IGV4ZWN1dGUgaGFyZGNvZGVkIHRlc3RzIG9uIGxvYWQgYW5kIGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBmdW5jdGlvbmFsIGxvZ2ljIG9yIHVzZXItZmFjaW5nIEFQSXMgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZy4gVGhleSBhcmUgZm9yIG1lYXN1cmluZyBwZXJmb3JtYW5jZSwgbm90IGV4cG9zaW5nIG5ldyB2dWxuZXJhYmlsaXRpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODY1LCJPdXRwdXRUb2tlbnMiOjg4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTM6MDA6MTAuNTU2NDU1MDY2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjY0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN5bnRoZXRpYyBiZW5jaG1hcmsgbW9kdWxlcyAodGVzdF92bXN0YXQsIHRlc3Rfc2xhYiwgdGVzdF9wYWdlYWxsb2MpIHRoYXQgZXhlY3V0ZSBoYXJkY29kZWQgcGVyZm9ybWFuY2UgdGVzdHMgdXBvbiBtb2R1bGUgbG9hZC4gVGhlc2UgbW9kdWxlcyBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgZnVuY3Rpb25hbCBsb2dpYywgdXNlci1mYWNpbmcgQVBJcywgb3IgY29tcGxleCBzdGF0ZSBtYWNoaW5lcyB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzeW50aGV0aWMgYmVuY2htYXJrIG1vZHVsZXMgKHRlc3Rfdm1zdGF0LCB0ZXN0X3NsYWIsIHRlc3RfcGFnZWFsbG9jKSB0aGF0IGV4ZWN1dGUgaGFyZGNvZGVkIHBlcmZvcm1hbmNlIHRlc3RzIHVwb24gbW9kdWxlIGxvYWQuIFRoZXNlIG1vZHVsZXMgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGZ1bmN0aW9uYWwgbG9naWMsIHVzZXItZmFjaW5nIEFQSXMsIG9yIGNvbXBsZXggc3RhdGUgbWFjaGluZXMgdGhhdCB3b3VsZCBiZW5lZml0IGZyb20gZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmndnj[1] Phase: Running StartedAt: 2026-08-01 13:00:21 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmndnj[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-01 13:00:21 +0000 UTC FinishedAt: 2026-08-01 13:00:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}