Name: series-workflowc4mvl Phase: Failed StartedAt: 2026-07-16 14:00:37 +0000 UTC FinishedAt: 2026-07-16 14:16:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc4mvl[0] Phase: Succeeded StartedAt: 2026-07-16 14:00:37 +0000 UTC FinishedAt: 2026-07-16 14:16:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc4mvl[0].run-triage Phase: Succeeded StartedAt: 2026-07-16 14:00:37 +0000 UTC FinishedAt: 2026-07-16 14:16:27 +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+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERQTEwgKERpZ2l0YWwgUGhhc2UgTG9ja2VkIExvb3ApIHBpbiBtYW5hZ2VtZW50IGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgKEU4MDAgc2VyaWVzKSBldGhlcm5ldCBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFuZCByZXF1aXJlcyBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHRoZSBkZXZpY2UgZmlybXdhcmUgKGUuZy4sIEFkbWluIFF1ZXVlKSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgYW5kIGluaXRpYWxpemUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmEzY2YxYzMyMmRjZDRkNDJlYTllMzllMDQyMTUxZTVlMDlkN2U5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE0OjE0OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbmluZGV4IDMwYzNhNGRiN2Q2MTFjLi5mMjEzZDZlMTJjYzQ5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuQEAgLTUzOCw2ICYjNDM7NTM4LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxuJiM0MzsgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuJiM0MzsgKlxuJiM0MzsgKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXG4mIzQzOyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuJiM0MzsgKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4mIzM5O3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxuJiM0MzsgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlXG4mIzQzOyAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLVx1MDAzZWRwbGxzLmxvY2sgaXNcbiYjNDM7ICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4mIzQzOyAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcbiYjNDM7XG4mIzQzO1x0cGVlciA9IGNoYW5nZWQtXHUwMDNlbXV4ZWQ7XG4mIzQzO1x0aWYgKHBlZXItXHUwMDNlcGluKVxuJiM0MztcdFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItXHUwMDNlcGluKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfZHBsbF9waW5fc3RvcmVfc3RhdGUgLSB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBwaW4gaW4gU1cgYm9va2tlZXBpbmdcbiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluXG5AQCAtNjY5LDEwICYjNDM7NjkyLDEwIEBAIGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0cCA9IFx1MDAyNmQtXHUwMDNlc21hW0lDRV9EUExMX1BJTl9TV18yX0lEWF07XG4gXHRwLVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4gXHRwLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcbiYjNDM7XHRpZiAoZGF0YSBcdTAwMjYgSUNFX1NNQTJfRElSX0VOKVxuJiM0MztcdFx0cC1cdTAwM2VkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUO1xuIFx0aWYgKChkYXRhIFx1MDAyNiBJQ0VfU01BMl9JTkFDVElWRV9NQVNLKSA9PSBJQ0VfU01BMl9JTkFDVElWRV9NQVNLKVxuIFx0XHRwLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuLVx0ZWxzZSBpZiAoZGF0YSBcdTAwMjYgSUNFX1NNQTJfRElSX0VOKVxuLVx0XHRwLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXG4gXHRwID0gXHUwMDI2ZC1cdTAwM2V1ZmxbSUNFX0RQTExfUElOX1NXXzFfSURYXTtcbiBcdGlmICghKGRhdGEgXHUwMDI2IChJQ0VfU01BMV9ESVJfRU4gfCBJQ0VfU01BMV9UWF9FTikpKVxuQEAgLTExNjMsMzIgJiM0MzsxMTg2LDYgQEAgaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHRcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xuIH1cbiBcbi0vKipcbi0gKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2Vcbi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3Rcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuLSAqXG4tICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuLXtcbi1cdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXG4tXHRwZWVyID0gKGNoYW5nZWQgXHUwMDNlPSBkLVx1MDAzZXNtYSBcdTAwMjZcdTAwMjYgY2hhbmdlZCBcdTAwM2MgZC1cdTAwM2VzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4tfVxuLVxuIC8qKlxuICAqIGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0IC0gc2V0IGRpcmVjdGlvbiBvZiBTTUEgcGluXG4gICogQHA6IHBvaW50ZXIgdG8gYSBwaW5cbkBAIC0xMjE5LDE3ICYjNDM7MTIxNiwyMSBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXG4gXG4gXHRzd2l0Y2ggKHAtXHUwMDNlaWR4KSB7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbi1cdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9NQVNLO1xuLVx0XHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpXG4mIzQzO1x0XHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX0RJUl9FTjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfRElSX0VOO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xuJiM0MztcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxuIFx0XHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuIFx0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfRElSX0VOO1xuLVx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0ZGF0YSBcdTAwMjY9IH4oSUNFX1NNQTJfVFhfRU4gfCBJQ0VfU01BMl9VRkwyX1JYX0RJUyk7XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuQEAgLTEyNTAsNyAmIzQzOzEyNTEsNyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXG4gXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxuIFx0ICogc3RpbGwgYmUgdXNpbmcgaXQuXG4gXHQgKi9cbi1cdHBlZXIgPSBcdTAwMjZkLVx1MDAzZXVmbFtwLVx1MDAzZWlkeF07XG4mIzQzO1x0cGVlciA9IHAtXHUwMDNlbXV4ZWQ7XG4gXHRpZiAocGVlci1cdTAwM2VhY3RpdmUpIHtcbiBcdFx0c3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0O1xuIFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG5AQCAtMTMxNSwxMCAmIzQzOzEzMTYsMTIgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4gXHRcdFx0ZW5hYmxlID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiBcdFx0XHQvKiBTa2lwIGlmIFUuRkwxIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcgVFhfRU5cbiBcdFx0XHQgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZVxuIFx0XHRcdCAqIHRoZSBwYWlyZWQgU01BMSBvdXRwdXQuXG5AQCAtMTMyOSwxOCAmIzQzOzEzMzIsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VvdXRwdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiBcdFx0XHRlbmFibGUgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDIgaXMgbm90IGFjdGl2ZSwgc2V0dGluZ1xuIFx0XHRcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXG4gXHRcdFx0ICogU01BMiBpbnB1dC5cbkBAIC0xMzUyLDcgJiM0MzsxMzU4LDggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VpbnB1dDtcbkBAIC0xMzcwLDE3ICYjNDM7MTM3Nyw0NCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbi1cdGlmIChlbmFibGUpXG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKGh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4tXHRlbHNlXG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHAtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBwLVx1MDAzZW11eGVkO1xuJiM0MztcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldDtcbiYjNDM7XHRcdFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGU7XG4mIzQzO1x0XHRcdGludCBwZWVyX3JldDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwZWVyLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZW91dHB1dDtcbiYjNDM7XHRcdFx0XHRwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZWlucHV0O1xuJiM0MztcdFx0XHRcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgcGVlcl90YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBwZWVyX3R5cGUsIE5VTEwpO1xuJiM0MztcdFx0XHRpZiAoIXBlZXJfcmV0KVxuJiM0MztcdFx0XHRcdHBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBwZWVyX3R5cGUsIE5VTEwpO1xuJiM0MztcdFx0XHRpZiAocGVlcl9yZXQpXG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHN5bmMgcGVlciBwaW4gJXUgYWZ0ZXIgZW5hYmxpbmcgVS5GTCBwaW4gJXUsIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCBwZWVyX3RhcmdldC1cdTAwM2VpZHgsIHRhcmdldC1cdTAwM2VpZHgsIHBlZXJfcmV0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuLVx0aWYgKCFyZXQpXG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0fVxuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdGlmICghcmV0KVxuLVx0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHApO1xuJiM0MztcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTQ2Nyw2ICYjNDM7MTUwMSw3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gc21hLVx1MDAzZXBmO1xuIFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xuJiM0MztcdHU4IG9sZF9kYXRhID0gMDtcbiBcdGJvb2wgZW5hYmxlO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNDc5LDI4ICYjNDM7MTUxNCwxMjAgQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuLVx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4tXHRcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4mIzQzO1x0c3dpdGNoIChzdGF0ZSkge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbiYjNDM7XHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZW5hYmxlID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxuJiM0MztcdFx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4mIzQzO1x0XHRcdGVuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVuYWJsZSA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiYjNDM7XHRcdGVuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc21hLVx1MDAzZWRpcmVjdGlvbikge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxuIFx0XHR0YXJnZXQgPSBzbWEtXHUwMDNlaW5wdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbi1cdH0gZWxzZSB7XG4tXHRcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4gXG4tXHRpZiAoZW5hYmxlKVxuJiM0MztcdGlmIChlbmFibGUpIHtcbiYjNDM7XHRcdHU4IGRhdGE7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIFx1MDAyNmRhdGEpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRvbGRfZGF0YSA9IGRhdGE7XG4mIzQzO1x0XHRpZiAoc21hLVx1MDAzZWlkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc21hLVx1MDAzZWlkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiYjNDM7XG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgZC1cdTAwM2VkcGxsX2lkeCwgdHlwZSxcbiBcdFx0XHRcdFx0ICBleHRhY2spO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuLVx0aWYgKCFyZXQpXG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1x0XHQvKiByZWZyZXNoIHRhcmdldCBzdGF0ZSBmaXJzdCBzbyBhIHBlZXItc2lkZSBlcnJvciBjYW5ub3QgbGVhdmUgaXQgc3RhbGUgKi9cbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBzbWEtXHUwMDNlbXV4ZWQ7XG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0O1xuJiM0MztcdFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwZWVyLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZW91dHB1dDtcbiYjNDM7XHRcdFx0XHRwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZWlucHV0O1xuJiM0MztcdFx0XHRcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgIGQtXHUwMDNlZHBsbF9pZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgcGVlcl90eXBlLCBleHRhY2spO1xuJiM0MztcdFx0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdHBlZXJfdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLFxuJiM0MztcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4mIzQzO1x0fVxuJiM0MztcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7cmVzdG9yZV9zbWFfY3RybDpcbiYjNDM7XHR7XG4mIzQzO1x0XHRpbnQgcmVzdG9yZV9yZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmVzdG9yZV9yZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbiYjNDM7XHRcdGlmICghcmVzdG9yZV9yZXQpXG4mIzQzO1x0XHRcdHJlc3RvcmVfcmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuJiM0MztcdFx0aWYgKHJlc3RvcmVfcmV0KVxuJiM0MztcdFx0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2wgYWZ0ZXIgcGluIHN0YXRlIGVycm9yICVkLCByZXN0b3JlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgcmV0LCByZXN0b3JlX3JldCk7XG4mIzQzO1x0fVxuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdGlmICghcmV0KVxuLVx0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHNtYSk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE2OTcsNyAmIzQzOzE4MjQsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NTE0LDYgJiM0Mzs0NjQxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0aWYgKHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYylcbiBcdFx0XHRwaW4tXHUwMDNlcmVmX3N5bmMgPSBwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcbiBcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XG4mIzQzO1x0XHRwaW4tXHUwMDNlbXV4ZWQgPSBcdTAwMjZkLVx1MDAzZXVmbFtpXTtcbiYjNDM7XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJQ0VfRFBMTF9QSU5fU1dfTlVNOyBpJiM0MzsmIzQzOykge1xuQEAgLTQ1MjMsNyAmIzQzOzQ2NTIsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRwaW4tXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPSBjYXBzO1xuIFx0XHRwaW4tXHUwMDNlcGYgPSBwZjtcbiBcdFx0cGluLVx1MDAzZXByb3AuYm9hcmRfbGFiZWwgPSBpY2VfZHBsbF9zd19waW5fdWZsW2ldO1xuLVx0XHRpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHtcbiYjNDM7XHRcdHN3aXRjaCAoaSkge1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXHRcdFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTtcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZCA9XG5AQCAtNDUzMyw3ICYjNDM7NDY2Myw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0cGluLVx1MDAzZXByb3AuZnJlcV9zdXBwb3J0ZWRfbnVtID0gZnJlcV9zdXBwX251bTtcbiBcdFx0XHRwaW4tXHUwMDNlaW5wdXQgPSBOVUxMO1xuIFx0XHRcdHBpbi1cdTAwM2VvdXRwdXQgPSBcdTAwMjZkLVx1MDAzZW91dHB1dHNbcGluX2Fic19pZHhdO1xuLVx0XHR9IGVsc2UgaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzJfSURYKSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgJiM0MztcbiBcdFx0XHRcdCAgICAgIGlucHV0X2lkeF9vZmZzZXQ7XG5AQCAtNDU0Niw3ICYjNDM7NDY3NywxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XG4gXHRcdFx0XHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxuIFx0XHRcdFx0IGNhcHMpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O0ludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNlc21hW2ldO1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbmluZGV4IDEwM2JhM2U0OTA2ODJjLi5kYzZmMDk2YmYwNjlhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuQEAgLTc2LDYgJiM0Mzs3Niw3IEBAIHN0cnVjdCBpY2VfZHBsbF9waW4ge1xuIFx0czMyIHBoYXNlX2FkanVzdDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmlucHV0O1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqb3V0cHV0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkO1xuIFx0ZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xuIFx0czY0IHBoYXNlX29mZnNldDtcbiBcdHU4IHN0YXR1cztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBwaW4gbWFuYWdlbWVudCBsb2dpYyBpbiB0aGUgSW50ZWwgSUNFIChFODAwIHNlcmllcykgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgcmVxdWlyZXMgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGV2aWNlIGZpcm13YXJlIChlLmcuLCBBZG1pbiBRdWV1ZSkgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCBpbml0aWFsaXplLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmEzY2YxYzMyMmRjZDRkNDJlYTllMzllMDQyMTUxZTVlMDlkN2U5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDE0OjE0OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYwppbmRleCAzMGMzYTRkYjdkNjExYy4uZjIxM2Q2ZTEyY2M0OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCkBAIC01MzgsNiAmIzQzOzUzOCwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2UKJiM0MzsgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKQomIzQzOyAqCiYjNDM7ICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZAomIzQzOyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJTwomIzQzOyAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlCiYjNDM7ICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZQomIzQzOyAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi0mZ3Q7ZHBsbHMubG9jayBpcwomIzQzOyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpcwomIzQzOyAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7CiYjNDM7CiYjNDM7CXBlZXIgPSBjaGFuZ2VkLSZndDttdXhlZDsKJiM0MzsJaWYgKHBlZXItJmd0O3BpbikKJiM0MzsJCV9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLSZndDtwaW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nCiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluCkBAIC02NjksMTAgJiM0Mzs2OTIsMTAgQEAgaWNlX2RwbGxfc3dfcGluc191cGRhdGUoc3RydWN0IGljZV9wZiAqcGYpCiAJcCA9ICZhbXA7ZC0mZ3Q7c21hW0lDRV9EUExMX1BJTl9TV18yX0lEWF07CiAJcC0mZ3Q7YWN0aXZlID0gdHJ1ZTsKIAlwLSZndDtkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ7CiYjNDM7CWlmIChkYXRhICZhbXA7IElDRV9TTUEyX0RJUl9FTikKJiM0MzsJCXAtJmd0O2RpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7CiAJaWYgKChkYXRhICZhbXA7IElDRV9TTUEyX0lOQUNUSVZFX01BU0spID09IElDRV9TTUEyX0lOQUNUSVZFX01BU0spCiAJCXAtJmd0O2FjdGl2ZSA9IGZhbHNlOwotCWVsc2UgaWYgKGRhdGEgJmFtcDsgSUNFX1NNQTJfRElSX0VOKQotCQlwLSZndDtkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOwogCiAJcCA9ICZhbXA7ZC0mZ3Q7dWZsW0lDRV9EUExMX1BJTl9TV18xX0lEWF07CiAJaWYgKCEoZGF0YSAmYW1wOyAoSUNFX1NNQTFfRElSX0VOIHwgSUNFX1NNQTFfVFhfRU4pKSkKQEAgLTExNjMsMzIgJiM0MzsxMTg2LDYgQEAgaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCQkgICAgICBleHRhY2ssIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTsKIH0KIAotLyoqCi0gKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2UKLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdAotICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSkKLSAqCi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kCi0gKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbiYjMzk7cyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU8KLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlCi0gKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlCi0gKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS4KLSAqCi0gKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLSZndDtkcGxscy5sb2NrIGlzCi0gKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXMKLSAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci4KLSAqLwotc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbHMgKmQsCi0JCQkJCXN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpCi17Ci0Jc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjsKLQotCXBlZXIgPSAoY2hhbmdlZCAmZ3Q7PSBkLSZndDtzbWEgJmFtcDsmYW1wOyBjaGFuZ2VkICZsdDsgZC0mZ3Q7c21hICYjNDM7IElDRV9EUExMX1BJTl9TV19OVU0pID8KLQkJJmFtcDtkLSZndDt1ZmxbY2hhbmdlZC0mZ3Q7aWR4XSA6ICZhbXA7ZC0mZ3Q7c21hW2NoYW5nZWQtJmd0O2lkeF07Ci0JaWYgKHBlZXItJmd0O3BpbikKLQkJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItJmd0O3Bpbik7Ci19Ci0KIC8qKgogICogaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQgLSBzZXQgZGlyZWN0aW9uIG9mIFNNQSBwaW4KICAqIEBwOiBwb2ludGVyIHRvIGEgcGluCkBAIC0xMjE5LDE3ICYjNDM7MTIxNiwyMSBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsCiAKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlkYXRhICZhbXA7PSB+SUNFX1NNQTFfTUFTSzsKLQkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKQomIzQzOwkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwogCQkJZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9ESVJfRU47CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwomIzQzOwkJfQogCQlicmVhazsKIAljYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDoKIAkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHsKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9ESVJfRU47Ci0JCQlkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTOwogCQl9IGVsc2UgewotCQkJZGF0YSAmYW1wOz0gfihJQ0VfU01BMl9UWF9FTiB8IElDRV9TTUEyX1VGTDJfUlhfRElTKTsKIAkJCWRhdGEgfD0gSUNFX1NNQTJfRElSX0VOOwomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUzsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVFhfRU47CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEyNTAsNyAmIzQzOzEyNTEsNyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsCiAJICogYmFja2luZyBwaW4gd2hlbiBVLkZMIGJlY29tZXMgaW5hY3RpdmUgYmVjYXVzZSB0aGUgU01BIHBpbiBtYXkKIAkgKiBzdGlsbCBiZSB1c2luZyBpdC4KIAkgKi8KLQlwZWVyID0gJmFtcDtkLSZndDt1ZmxbcC0mZ3Q7aWR4XTsKJiM0MzsJcGVlciA9IHAtJmd0O211eGVkOwogCWlmIChwZWVyLSZndDthY3RpdmUpIHsKIAkJc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0OwogCQllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7CkBAIC0xMzE1LDEwICYjNDM7MTMxNiwxMiBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJcmV0ID0gLUVJTlZBTDsKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7CiYjNDM7CQlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CQljYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDoKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9NQVNLOwogCQkJZW5hYmxlID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOgogCQkJLyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOCiAJCQkgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZQogCQkJICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC4KQEAgLTEzMjksMTggJiM0MzsxMzMyLDIxIEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTFfVFhfRU47CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtvdXRwdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkgewomIzQzOwkJc3dpdGNoIChzdGF0ZSkgewomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOgogCQkJZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47CiAJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSB0cnVlOwotCQl9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkgewomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiAJCQkvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcKIAkJCSAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkCiAJCQkgKiBTTUEyIGlucHV0LgpAQCAtMTM1Miw3ICYjNDM7MTM1OCw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtpbnB1dDsKQEAgLTEzNzAsMTcgJiM0MzsxMzc3LDQ0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKIAotCWlmIChlbmFibGUpCiYjNDM7CWlmIChlbmFibGUpIHsKIAkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShodywgdGFyZ2V0LCBkLSZndDtkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTsKLQllbHNlCiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CQlpZiAoIXJldCAmYW1wOyZhbXA7IHAtJmd0O211eGVkLSZndDthY3RpdmUpIHsKJiM0MzsJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyID0gcC0mZ3Q7bXV4ZWQ7CiYjNDM7CQkJc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQ7CiYjNDM7CQkJZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGU7CiYjNDM7CQkJaW50IHBlZXJfcmV0OwomIzQzOwomIzQzOwkJCWlmIChwZWVyLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkgewomIzQzOwkJCQlwZWVyX3RhcmdldCA9IHBlZXItJmd0O291dHB1dDsKJiM0MzsJCQkJcGVlcl90eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCXBlZXJfdGFyZ2V0ID0gcGVlci0mZ3Q7aW5wdXQ7CiYjNDM7CQkJCXBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOwomIzQzOwkJCX0KJiM0MzsJCQlwZWVyX3JldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwZi0mZ3Q7aHcsIHBlZXJfdGFyZ2V0LAomIzQzOwkJCQkJCSAgICAgICBwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4LAomIzQzOwkJCQkJCSAgICAgICBwZWVyX3R5cGUsIE5VTEwpOwomIzQzOwkJCWlmICghcGVlcl9yZXQpCiYjNDM7CQkJCXBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsCiYjNDM7CQkJCQkJCSAgICAgcGVlcl90eXBlLCBOVUxMKTsKJiM0MzsJCQlpZiAocGVlcl9yZXQpCiYjNDM7CQkJCWRldl93YXJuKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJCQkJICYjMzQ7RmFpbGVkIHRvIHN5bmMgcGVlciBwaW4gJXUgYWZ0ZXIgZW5hYmxpbmcgVS5GTCBwaW4gJXUsIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJCQkgcGVlcl90YXJnZXQtJmd0O2lkeCwgdGFyZ2V0LSZndDtpZHgsIHBlZXJfcmV0KTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKIAkJcmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwl9CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7ZHBsbHMubG9jayk7CiAJaWYgKCFyZXQpCi0JCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcigmYW1wO3BmLSZndDtkcGxscywgcCk7CiYjNDM7CQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ2Nyw2ICYjNDM7MTUwMSw3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBkcGxsX3ByaXY7CiAJc3RydWN0IGljZV9wZiAqcGYgPSBzbWEtJmd0O3BmOwogCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTsKJiM0MzsJdTggb2xkX2RhdGEgPSAwOwogCWJvb2wgZW5hYmxlOwogCWludCByZXQ7CiAKQEAgLTE0NzksMjggJiM0MzsxNTE0LDEyMCBAQCBpY2VfZHBsbF9zbWFfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCWlmIChyZXQpCiAJCQlnb3RvIHVubG9jazsKIAl9Ci0JaWYgKHNtYS0mZ3Q7ZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkgewotCQllbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRToKJiM0MzsJCWlmIChzbWEtJmd0O2RpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7CiYjNDM7CQkJZW5hYmxlID0gZmFsc2U7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCWVuYWJsZSA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6CiYjNDM7CQlpZiAoc21hLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7CiYjNDM7CQkJZW5hYmxlID0gZmFsc2U7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCWVuYWJsZSA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiYjNDM7CQllbmFibGUgPSBmYWxzZTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoc21hLSZndDtkaXJlY3Rpb24pIHsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6CiAJCXRhcmdldCA9IHNtYS0mZ3Q7aW5wdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKLQl9IGVsc2UgewotCQllbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOgogCQl0YXJnZXQgPSBzbWEtJmd0O291dHB1dDsKIAkJdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5sb2NrOwogCX0KIAotCWlmIChlbmFibGUpCiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCXU4IGRhdGE7CiYjNDM7CiYjNDM7CQlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybCgmYW1wO3BmLSZndDtodywgJmFtcDtkYXRhKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQlvbGRfZGF0YSA9IGRhdGE7CiYjNDM7CQlpZiAoc21hLSZndDtpZHggPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwomIzQzOwkJfSBlbHNlIGlmIChzbWEtJmd0O2lkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUEyX1RYX0VOOwomIzQzOwkJfQomIzQzOwkJcmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBkYXRhKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKJiM0MzsKIAkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgdGFyZ2V0LCBkLSZndDtkcGxsX2lkeCwgdHlwZSwKIAkJCQkJICBleHRhY2spOwotCWVsc2UKLQkJcmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoJmFtcDtwZi0mZ3Q7aHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKLQlpZiAoIXJldCkKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3NtYV9jdHJsOwomIzQzOwkJLyogcmVmcmVzaCB0YXJnZXQgc3RhdGUgZmlyc3Qgc28gYSBwZWVyLXNpZGUgZXJyb3IgY2Fubm90IGxlYXZlIGl0IHN0YWxlICovCiAJCXJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3NtYV9jdHJsOwomIzQzOwomIzQzOwkJaWYgKHNtYS0mZ3Q7bXV4ZWQtJmd0O2FjdGl2ZSkgewomIzQzOwkJCXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBzbWEtJmd0O211eGVkOwomIzQzOwkJCXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0OwomIzQzOwkJCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlOwomIzQzOwomIzQzOwkJCWlmIChwZWVyLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkgewomIzQzOwkJCQlwZWVyX3RhcmdldCA9IHBlZXItJmd0O291dHB1dDsKJiM0MzsJCQkJcGVlcl90eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCXBlZXJfdGFyZ2V0ID0gcGVlci0mZ3Q7aW5wdXQ7CiYjNDM7CQkJCXBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOwomIzQzOwkJCX0KJiM0MzsJCQlyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cGYtJmd0O2h3LCBwZWVyX3RhcmdldCwKJiM0MzsJCQkJCQkgIGQtJmd0O2RwbGxfaWR4LAomIzQzOwkJCQkJCSAgcGVlcl90eXBlLCBleHRhY2spOwomIzQzOwkJCWlmICghcmV0KQomIzQzOwkJCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwKJiM0MzsJCQkJCQkJCXBlZXJfdHlwZSwgZXh0YWNrKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZSgmYW1wO3BmLSZndDtodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLAomIzQzOwkJCQkJCQlleHRhY2spOwomIzQzOwl9CiYjNDM7CWdvdG8gdW5sb2NrOwomIzQzOwomIzQzO3Jlc3RvcmVfc21hX2N0cmw6CiYjNDM7CXsKJiM0MzsJCWludCByZXN0b3JlX3JldDsKJiM0MzsKJiM0MzsJCXJlc3RvcmVfcmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBvbGRfZGF0YSk7CiYjNDM7CQlpZiAoIXJlc3RvcmVfcmV0KQomIzQzOwkJCXJlc3RvcmVfcmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpOwomIzQzOwkJaWYgKHJlc3RvcmVfcmV0KQomIzQzOwkJCWRldl93YXJuKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbCBhZnRlciBwaW4gc3RhdGUgZXJyb3IgJWQsIHJlc3RvcmUgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJIHJldCwgcmVzdG9yZV9yZXQpOwomIzQzOwl9CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7ZHBsbHMubG9jayk7CiAJaWYgKCFyZXQpCi0JCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcigmYW1wO3BmLSZndDtkcGxscywgc21hKTsKJiM0MzsJCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzbWEpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2OTcsNyAmIzQzOzE4MjQsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LAogCXJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHAsIGRpcmVjdGlvbiwgZXh0YWNrKTsKIAltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7ZHBsbHMubG9jayk7CiAJaWYgKCFyZXQpCi0JCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcigmYW1wO3BmLSZndDtkcGxscywgcCk7CiYjNDM7CQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDUxNCw2ICYjNDM7NDY0MSw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCWlmIChwaW4tJmd0O2lucHV0LSZndDtyZWZfc3luYykKIAkJCXBpbi0mZ3Q7cmVmX3N5bmMgPSBwaW4tJmd0O2lucHV0LSZndDtyZWZfc3luYyAtIHBpbl9hYnNfaWR4OwogCQlwaW4tJmd0O291dHB1dCA9ICZhbXA7ZC0mZ3Q7b3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07CiYjNDM7CQlwaW4tJmd0O211eGVkID0gJmFtcDtkLSZndDt1ZmxbaV07CiYjNDM7CiAJCWljZV9kcGxsX3BoYXNlX3JhbmdlX3NldCgmYW1wO3Bpbi0mZ3Q7cHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7CiAJfQogCWZvciAoaSA9IDA7IGkgJmx0OyBJQ0VfRFBMTF9QSU5fU1dfTlVNOyBpJiM0MzsmIzQzOykgewpAQCAtNDUyMyw3ICYjNDM7NDY1Miw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCXBpbi0mZ3Q7cHJvcC5jYXBhYmlsaXRpZXMgPSBjYXBzOwogCQlwaW4tJmd0O3BmID0gcGY7CiAJCXBpbi0mZ3Q7cHJvcC5ib2FyZF9sYWJlbCA9IGljZV9kcGxsX3N3X3Bpbl91ZmxbaV07Ci0JCWlmIChpID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkgewomIzQzOwkJc3dpdGNoIChpKSB7CiYjNDM7CQljYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDoKIAkJCXBpbi0mZ3Q7ZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDsKIAkJCXBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSk7CiAJCQlwaW4tJmd0O3Byb3AuZnJlcV9zdXBwb3J0ZWQgPQpAQCAtNDUzMyw3ICYjNDM7NDY2Myw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCQlwaW4tJmd0O3Byb3AuZnJlcV9zdXBwb3J0ZWRfbnVtID0gZnJlcV9zdXBwX251bTsKIAkJCXBpbi0mZ3Q7aW5wdXQgPSBOVUxMOwogCQkJcGluLSZndDtvdXRwdXQgPSAmYW1wO2QtJmd0O291dHB1dHNbcGluX2Fic19pZHhdOwotCQl9IGVsc2UgaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzJfSURYKSB7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDoKIAkJCXBpbi0mZ3Q7ZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOwogCQkJcGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfSU5QVVRfQUJTKGkpICYjNDM7CiAJCQkJICAgICAgaW5wdXRfaWR4X29mZnNldDsKQEAgLTQ1NDYsNyAmIzQzOzQ2NzcsMTIgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJCXBpbi0mZ3Q7cHJvcC5jYXBhYmlsaXRpZXMgPQogCQkJCShEUExMX1BJTl9DQVBBQklMSVRJRVNfUFJJT1JJVFlfQ0FOX0NIQU5HRSB8CiAJCQkJIGNhcHMpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCAmIzM0O0ludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXG4mIzM0OywgaSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KJiM0MzsJCXBpbi0mZ3Q7bXV4ZWQgPSAmYW1wO2QtJmd0O3NtYVtpXTsKIAkJaWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KCZhbXA7cGluLSZndDtwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgKaW5kZXggMTAzYmEzZTQ5MDY4MmMuLmRjNmYwOTZiZjA2OWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaApAQCAtNzYsNiAmIzQzOzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7CiAJczMyIHBoYXNlX2FkanVzdDsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkOwogCWVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlzNjQgcGhhc2Vfb2Zmc2V0OwogCXU4IHN0YXR1czsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBJbnRlbCBJQ0UgRFBMTCBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY2AuIEl0JiMzOTtzIHR3ZWFraW5nIHRoZSBEUExMIHBpbiBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgSW50ZWwgSUNFIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBFODAwIHNlcmllcy4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmdW5jdGlvbnM6IGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc3dfcGluc191cGRhdGVgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgLCBhbmQgYGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zYC4gSXQgYWRkcyBhIGBtdXhlZGAgcG9pbnRlciBpbiB0aGUgYGljZV9kcGxsX3BpbmAgc3RydWN0IGZvciBtYW5hZ2luZyBzaGFyZWQgU01BL1UuRkwgc2lnbmFsIHBhdGhzLCBhbmQgaXQgbW9kaWZpZXMgaG93IHBpbiBzdGF0ZXMgYW5kIGRpcmVjdGlvbnMgYXJlIGhhbmRsZWQsIGluY2x1ZGluZyB1cGRhdGVzIHRvIHRoZSBQQ0E5NTc1IEdQSU8gZXhwYW5kZXIuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIGNvZGUgZXZlbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgc2V0dXA/IFRoZSBgaWNlYCBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIEludGVsIEU4MDAgUENJZSBuZXR3b3JrIGNhcmRzLiBUeXBpY2FsbHksIFBDSWUgZHJpdmVycywgdW5sZXNzIHRoZXkmIzM5O3JlIGZvciBhIHdlbGwtZW11bGF0ZWQgaGFyZHdhcmUsIGFyZW4mIzM5O3QgZWFzaWx5IGFjY2Vzc2libGUgd2l0aGluIHNvbWV0aGluZyBsaWtlIFFFTVUuIERvZXMgUUVNVSBldmVuIGhhdmUgYW4gRTgwMCBzZXJpZXMgZW11bGF0b3I/IEEgcXVpY2sgY2hlY2sgcmV2ZWFscyBpdCBkb2VzbiYjMzk7dC4gV2UmIzM5O3ZlIGdvdCBlbXVsYXRvcnMgZm9yIGUxMDAwLCBlMTAwMGUsIGlnYiwgYW5kIG90aGVycywgYnV0IG5vdGhpbmcgZm9yIGBpY2VgLgoKVGhlbiBJIHJlbWVtYmVyIHN5emthbGxlci4gRG9lcyBpdCBwb3RlbnRpYWxseSBhbGxvdyB1cyB0byByZWFjaCBpdD8gSSB0aGluayBhYm91dCBzeXprYWxsZXImIzM5O3MgYWJpbGl0eSB0byBmdXp6IFBDSSBkZXZpY2VzLCB1c2luZyBhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24gbWVjaGFuaXNtICh2aGNpIG9yIHNpbWlsYXIpLiBEb2VzIHN5emthbGxlciBvZmZlciBzb21ldGhpbmcgbGlrZSBhIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCBvciBhIHNpbWlsYXIgUENJIGZ1enppbmcgc3VwcG9ydD8gSW5pdGlhbGx5LCBJJiMzOTttIGRyYXdpbmcgYSBibGFuaywgYnV0IHRoZW4gSSByZWNhbGwsIHllcywgc3l6a2FsbGVyICpkb2VzKiBoYXZlIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAgb3IgYSBzaW1pbGFyIGNhbGwuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgc3l6a2FsbGVyIGlzIHJvYnVzdCBlbm91Z2ggdG8gcmVhY2ggZGVlcCBpbnRvIGRyaXZlci1zcGVjaWZpYyBsb2dpYy4KCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjay4gQ2FuIHN5emthbGxlciBwcm9iZSB0aGUgYGljZWAgZHJpdmVyIHVzaW5nIGEgZmFrZSBQQ0kgZGV2aWNlPyBUaGUgYGljZWAgZHJpdmVyIGhhcyBzaWduaWZpY2FudCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgLSBmaXJtd2FyZSwgdGhlIEFkbWluIFF1ZXVlLCBldGMuIC0gbWFraW5nIGl0IG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBnZXQgcGFzdCB0aGUgaW5pdGlhbCBwcm9iZSB3aXRob3V0IGVpdGhlciBhIHJlYWwgZGV2aWNlIG9yIGEgKnZlcnkqIGdvb2QgZW11bGF0b3IuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWUgaWYgc3l6a2FsbGVyIGlzLCBpbiBmYWN0LCBmdXp6aW5nIHRoZSBgaWNlYCBkcml2ZXIuIEkmIzM5O2xsIHNlYXJjaCBzeXprYWxsZXIgcmVwb3J0cyBmb3IgYGljZV9wcm9iZWAgb3Igc2ltaWxhciBoaXRzLiBUaGlzIHdpbGwgdGVsbCBtZSBpZiBpdCYjMzk7cyBldmVuIHdvcnRoIHB1cnN1aW5nIGZ1enppbmcsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIHByb21wdCBkZXRhaWxzLgoKV2FpdCBhIHNlY29uZCwgdGhlIHByb21wdCBzcGVjaWZpZXM6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIGBpY2VgIGlzIGEgUENJZSBkcml2ZXIgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCB0aGVyZSYjMzk7cyBubyBlcXVpdmFsZW50IG9mIHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYG5ldGRldnNpbWAgZm9yIGl0LCBhbmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGl0LCBpdCYjMzk7cyBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBjb2RlIGluIGFueSBvZiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBvbmUgbGFzdCB0aGluZywgdG8gc2VlIGlmIHNvbWUgYGljZWAgZW11bGF0b3IgZXhpc3RzLiBJIGhhdmUgdG8gYWNjZXB0IHRoZSByZWFsaXR5IG9mIHRoZSBzaXR1YXRpb24uCgpZZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQuIFRoZSBJbnRlbCBFODAwIHNlcmllcyBpcyBjb21wbGV4LiBJdCByZXF1aXJlcyBpbnRlcmFjdGlvbnMgd2l0aCBmaXJtd2FyZSAoQWRtaW4gUXVldWUsIE5WTSksIGFuZCB0aGUgZHJpdmVyIHdpbGwgZmFpbCBwcm9iaW5nIGVhcmx5IGlmIHRoZSBmaXJtd2FyZSBkb2VzbiYjMzk7dCByZXNwb25kLiBJIHRoaW5rIEkgd2lsbCBqdXN0IGNoZWNrIHRoZSBgaWNlX3Byb2JlYCByb3V0aW5lIGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNgIGZpbGUgb25lIGxhc3QgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpY2VfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMDI9dm9pZCBpY2VfdW5sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxMTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTE3OnN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE0OS0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxNTU6aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMzktXHRpZiAoaWNlX2lzX3JlY292ZXJ5X21vZGUoaHcpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcdFx0cmV0dXJuIGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTgzOT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODQxLVx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODQyOlx0LnByb2JlID0gaWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0My1cdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAmIzM5O2ljZV9wcm9iZSYjMzk7KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBkaXNzZWN0IGBpY2VfcHJvYmVgIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkZXNpZ25lZCB0byBkby4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSwgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIGltcGxlbWVudGF0aW9uLCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgYW55IGludGVyYWN0aW9ucyBpdCBoYXMgd2l0aCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucy4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNhcGFiaWxpdGllcyBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByZWxldmFuY2Ugb3IgaW1wYWN0LiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCBhIHN1cmZhY2UtbGV2ZWwgZ2xhbmNlIGFuZCBkaWcgZGVlcCBpbnRvIGl0cyBpbm5lciB3b3JraW5ncy4gSSBrbm93IEkgbmVlZCB0byB0cmVhdCB0aGlzIGFzIHRob3VnaCBJIHdlcmUgZ29pbmcgaW4gb24gYSBzdXJnaWNhbCBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTU0Olx0c3RhdGljIGludFxuNTE1NTpcdGljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXG41MTU2Olx0e1xuNTE1NzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG41MTU4Olx0XHRib29sIG5lZWRfZGV2X2RlaW5pdCA9IGZhbHNlO1xuNTE1OTpcdFx0c3RydWN0IGljZV9hZGFwdGVyICphZGFwdGVyO1xuNTE2MDpcdFx0c3RydWN0IGljZV9wZiAqcGY7XG41MTYxOlx0XHRzdHJ1Y3QgaWNlX2h3ICpodztcbjUxNjI6XHRcdGludCBlcnI7XG41MTYzOlx0XG41MTY0Olx0XHRpZiAocGRldi1cdTAwM2Vpc192aXJ0Zm4pIHtcbjUxNjU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2NhbiYjMzk7dCBwcm9iZSBhIHZpcnR1YWwgZnVuY3Rpb25cXG5cJiMzNDspO1xuNTE2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjUxNjc6XHRcdH1cbjUxNjg6XHRcbjUxNjk6XHRcdC8qIHdoZW4gdW5kZXIgYSBrZHVtcCBrZXJuZWwgaW5pdGlhdGUgYSByZXNldCBiZWZvcmUgZW5hYmxpbmcgdGhlXG41MTcwOlx0XHQgKiBkZXZpY2UgaW4gb3JkZXIgdG8gY2xlYXIgb3V0IGFueSBwZW5kaW5nIERNQSB0cmFuc2FjdGlvbnMuIFRoZXNlXG41MTcxOlx0XHQgKiB0cmFuc2FjdGlvbnMgY2FuIGNhdXNlIHNvbWUgc3lzdGVtcyB0byBtYWNoaW5lIGNoZWNrIHdoZW4gZG9pbmdcbjUxNzI6XHRcdCAqIHRoZSBwY2ltX2VuYWJsZV9kZXZpY2UoKSBiZWxvdy5cbjUxNzM6XHRcdCAqL1xuNTE3NDpcdFx0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKSB7XG41MTc1Olx0XHRcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuNTE3NjpcdFx0XHRwY2lfY2xlYXJfbWFzdGVyKHBkZXYpO1xuNTE3NzpcdFx0XHRlcnIgPSBwY2llX2ZscihwZGV2KTtcbjUxNzg6XHRcdFx0aWYgKGVycilcbjUxNzk6XHRcdFx0XHRyZXR1cm4gZXJyO1xuNTE4MDpcdFx0XHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcbjUxODE6XHRcdH1cbjUxODI6XHRcbjUxODM6XHRcdC8qIHRoaXMgZHJpdmVyIHVzZXMgZGV2cmVzLCBzZWVcbjUxODQ6XHRcdCAqIERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdFxuNTE4NTpcdFx0ICovXG41MTg2Olx0XHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XG41MTg3Olx0XHRpZiAoZXJyKVxuNTE4ODpcdFx0XHRyZXR1cm4gZXJyO1xuNTE4OTpcdFxuNTE5MDpcdFx0ZXJyID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIEJJVChJQ0VfQkFSMCksIGRldl9kcml2ZXJfc3RyaW5nKGRldikpO1xuNTE5MTpcdFx0aWYgKGVycikge1xuNTE5MjpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7QkFSMCBJL08gbWFwIGVycm9yICVkXFxuXCYjMzQ7LCBlcnIpO1xuNTE5MzpcdFx0XHRyZXR1cm4gZXJyO1xuNTE5NDpcdFx0fVxuNTE5NTpcdFxuNTE5NjpcdFx0cGYgPSBpY2VfYWxsb2NhdGVfcGYoZGV2KTtcbjUxOTc6XHRcdGlmICghcGYpXG41MTk4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNTE5OTpcdFxuNTIwMDpcdFx0LyogaW5pdGlhbGl6ZSBBdXhpbGlhcnkgaW5kZXggdG8gaW52YWxpZCB2YWx1ZSAqL1xuNTIwMTpcdFx0cGYtXHUwMDNlYXV4X2lkeCA9IC0xO1xuNTIwMjpcdFxuNTIwMzpcdFx0Lyogc2V0IHVwIGZvciBoaWdoIG9yIGxvdyBETUEgKi9cbjUyMDQ6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTtcbjUyMDU6XHRcdGlmIChlcnIpIHtcbjUyMDY6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0RNQSBjb25maWd1cmF0aW9uIGZhaWxlZDogMHgleFxcblwmIzM0OywgZXJyKTtcbjUyMDc6XHRcdFx0cmV0dXJuIGVycjtcbjUyMDg6XHRcdH1cbjUyMDk6XHRcbjUyMTA6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuNTIxMTpcdFx0cGYtXHUwMDNlcGRldiA9IHBkZXY7XG41MjEyOlx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGYpO1xuNTIxMzpcdFx0c2V0X2JpdChJQ0VfRE9XTiwgcGYtXHUwMDNlc3RhdGUpO1xuNTIxNDpcdFx0LyogRGlzYWJsZSBzZXJ2aWNlIHRhc2sgdW50aWwgRE9XTiBiaXQgaXMgY2xlYXJlZCAqL1xuNTIxNTpcdFx0c2V0X2JpdChJQ0VfU0VSVklDRV9ESVMsIHBmLVx1MDAzZXN0YXRlKTtcbjUyMTY6XHRcbjUyMTc6XHRcdGh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG41MjE4Olx0XHRody1cdTAwM2Vod19hZGRyID0gcGNpbV9pb21hcF90YWJsZShwZGV2KVtJQ0VfQkFSMF07XG41MjE5Olx0XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbjUyMjA6XHRcbjUyMjE6XHRcdGh3LVx1MDAzZWJhY2sgPSBwZjtcbjUyMjI6XHRcdGh3LVx1MDAzZXBvcnRfaW5mbyA9IE5VTEw7XG41MjIzOlx0XHRody1cdTAwM2V2ZW5kb3JfaWQgPSBwZGV2LVx1MDAzZXZlbmRvcjtcbjUyMjQ6XHRcdGh3LVx1MDAzZWRldmljZV9pZCA9IHBkZXYtXHUwMDNlZGV2aWNlO1xuNTIyNTpcdFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCBcdTAwMjZody1cdTAwM2VyZXZpc2lvbl9pZCk7XG41MjI2Olx0XHRody1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xuNTIyNzpcdFx0aHctXHUwMDNlc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcbjUyMjg6XHRcdGh3LVx1MDAzZWJ1cy5kZXZpY2UgPSBQQ0lfU0xPVChwZGV2LVx1MDAzZWRldmZuKTtcbjUyMjk6XHRcdGh3LVx1MDAzZWJ1cy5mdW5jID0gUENJX0ZVTkMocGRldi1cdTAwM2VkZXZmbik7XG41MjMwOlx0XHRpY2Vfc2V0X2N0cmxxX2xlbihodyk7XG41MjMxOlx0XG41MjMyOlx0XHRwZi1cdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIElDRV9ERkxUX05FVElGX00pO1xuNTIzMzpcdFxuNTIzNDpcdCNpZm5kZWYgQ09ORklHX0RZTkFNSUNfREVCVUdcbjUyMzU6XHRcdGlmIChkZWJ1ZyBcdTAwM2MgLTEpXG41MjM2Olx0XHRcdGh3LVx1MDAzZWRlYnVnX21hc2sgPSBkZWJ1ZztcbjUyMzc6XHQjZW5kaWZcbjUyMzg6XHRcbjUyMzk6XHRcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXG41MjQwOlx0XHRcdHJldHVybiBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShwZik7XG41MjQxOlx0XG41MjQyOlx0XHRlcnIgPSBpY2VfaW5pdF9odyhodyk7XG41MjQzOlx0XHRpZiAoZXJyKSB7XG41MjQ0Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtpY2VfaW5pdF9odyBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuNTI0NTpcdFx0XHRyZXR1cm4gZXJyO1xuNTI0NjpcdFx0fVxuNTI0NzpcdFxuNTI0ODpcdFx0aWNlX2luaXRfZGV2X2h3KHBmKTtcbjUyNDk6XHRcbjUyNTA6XHRcdGFkYXB0ZXIgPSBpY2VfYWRhcHRlcl9nZXQocGRldik7XG41MjUxOlx0XHRpZiAoSVNfRVJSKGFkYXB0ZXIpKSB7XG41MjUyOlx0XHRcdGVyciA9IFBUUl9FUlIoYWRhcHRlcik7XG41MjUzOlx0XHRcdGdvdG8gdW5yb2xsX2h3X2luaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyOTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGljZV9pbml0X2h3YCBGdW5jdGlvbiBDYWxsKioKCk9rYXksIHNvIHRoZSBjb2RlJiMzOTtzIGp1bXBpbmcgaW50byBgaWNlX2luaXRfaHdgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIHdoaWNoIHJlZ2lzdGVycyBhcmUgYmVpbmcgdG91Y2hlZC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgc3RlcHM6IGlzIGl0IHByaW1hcmlseSBzZXR0aW5nIHVwIGNsb2NrcywgY29uZmlndXJpbmcgdGhlIFBIWSwgaW5pdGlhbGl6aW5nIERNQSBjaGFubmVscywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb21tZW50cyBiZXR0ZXIgYmUgZ29vZCwgYnV0IEkmIzM5O20gZXhwZWN0aW5nIHRvIGhhdmUgdG8gcmV2ZXJzZS1lbmdpbmVlciBzb21lIG9mIHRoaXMuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNyaXRpY2FsIHBhdGggdG8gZ2V0dGluZyB0aGUgc2lsaWNvbiBmdW5jdGlvbmFsIOKAkyB3aGF0JiMzOTtzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGZvciBhIGJhc2ljIGJyaW5nLXVwLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHRyYXBzOiByYWNlIGNvbmRpdGlvbnMsIG9ic2N1cmUgcmVnaXN0ZXIgc2V0dGluZ3Mgd2l0aCBkZWZhdWx0IHZhbHVlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYmxvY2sgcHJvZ3Jlc3MuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIGRlcGVuZGVuY3kgdHJlZSBoZXJlIOKAkyBJIG5lZWQgdG8gdHJhY2sgaG93IG9uZSBpbml0aWFsaXphdGlvbiBzdGVwIHNldHMgdXAgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoZSBuZXh0LiBUaGlzIGlzIGxpa2VseSB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBlbHNlLCBzbyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgaGVyZSBpcyBwYXJhbW91bnQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9pbml0X2h3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTIzNT1zdGF0aWMgaW50IGljZV9kZXZsaW5rX3JlaW5pdF91cChzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMjQyOlx0ZXJyID0gaWNlX2luaXRfaHcoXHUwMDI2cGYtXHUwMDNlaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEyNDMtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI0NDpcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ljZV9pbml0X2h3IGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0NS1cdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTk2MD1zdGF0aWMgaW50IF9fZndsb2dfaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg0OiAqIGljZV9pbml0X2h3IC0gbWFpbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4NS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjk4NzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI0LVx0XHRnb3RvIGVycl91bnJvbGxfZmx0cl9tZ210X3N0cnVjdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTEyNTpcdHN0YXR1cyA9IGljZV9pbml0X2h3X3RibHMoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI2LVx0aWYgKHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTExNTY9c3RhdGljIHZvaWQgX19md2xvZ19kZWluaXQoc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTY2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTY3OiAqIGljZV9kZWluaXRfaHcgLSB1bnJvbGwgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucyBkb25lIGJ5IGljZV9pbml0X2h3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNjgtICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNzAtICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgZHVyaW5nIG5vbWluYWwgb3BlcmF0aW9uLCBub3QgYXMgYSByZXN1bHQgb2ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE3MTogKiBpY2VfaW5pdF9odygpIGZhaWxpbmcgc2luY2UgaWNlX2luaXRfaHcoKSB3aWxsIHRha2UgY2FyZSBvZiB1bnJvbGxpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3Mi0gKiBhcHBsaWNhYmxlIGluaXRpYWxpemF0aW9ucyBpZiBpdCBmYWlscyBmb3IgYW55IHJlYXNvbi5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaDo4MzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04NC12b2lkIGljZV9kZWluaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM9MjM4OD1pbnQgaWNlX2NmZ190eF90b3BvKHN0cnVjdCBpY2VfaHcgKmh3LCBjb25zdCB2b2lkICpidWYsIHUzMiBsZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0yNTQwLVx0aWNlX2RlaW5pdF9odyhodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jOjI1NDE6XHRpZiAoaWNlX2luaXRfaHcoaHcpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1NDItXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcJiMzNDtGYWlsZWQgdG8gcmUtaW5pdCBoYXJkd2FyZSBhZnRlciBzZXR0aW5nIFR4IHRvcG9sb2d5XFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTIxNTQ9dm9pZCBpY2VfY2xlYXJfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jOjIxOTg6ICogaWNlX2luaXRfaHdfdGJscyAtIGluaXQgaGFyZHdhcmUgdGFibGUgbWVtb3J5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTktICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjIwMTppbnQgaWNlX2luaXRfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaD01OD1ib29sIGljZV9pc19pbml0X3BrZ19zdWNjZXNzZnVsKGVudW0gaWNlX2RkcF9zdGF0ZSBzdGF0ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oOjU5OmludCBpY2VfaW5pdF9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmgtNjAtdm9pZCBpY2VfZnJlZV9zZWcoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTU9aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MjpcdGVyciA9IGljZV9pbml0X2h3KGh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDMtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjQ0Olx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2luaXRfaHcgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDUtXHRcdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYz02OD11MzIgaWNlX2NvbnZfbGlua19zcGVlZF90b192aXJ0Y2hubChib29sIGFkdl9saW5rX3N1cHBvcnQsIHUxNiBsaW5rX3NwZWVkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmMtODktICogMS4gVGhlIG1haWxib3ggc25hcHNob3Qgc3RydWN0dXJlLCBpY2VfbWJ4X3NuYXBzaG90LCBpcyBpbml0aWFsaXplZCBkdXJpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmM6OTA6ICogZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIGljZV9pbml0X2h3KCkgdXNpbmcgaWNlX21ieF9pbml0X3NuYXBzaG90KCkuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX21ieC5jLTkxLSAqIFRoZSBzdHJ1Y3QgaWNlX21ieF9zbmFwc2hvdCBoZWxwcyB0byB0cmFjayBhbmQgdHJhdmVyc2UgYSBzdGF0aWMgd2luZG93IG9mXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIElDRSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBJbnRlbCBJQ0UgRXRoZXJuZXQgZHJpdmVycy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGljZV9pbml0X2h3YCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGlzIHR5cGljYWxseSBsb2NhdGVkLiBJIGtub3cgdGhpcyBjb2RlLCBidXQgaXQmIzM5O3MgYmVlbiBhIHdoaWxlLCBhbmQgaXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJldmlzaXQgdGhlIGZvdW5kYXRpb25hbCBzdGVwcyB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgaGFyZHdhcmUtcmVsYXRlZCBpc3N1ZXMgb3IgbG9va2luZyBhdCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjYWxscyB0byBjb25maWd1cmUgdGhlIE1BQywgUEhZLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IHNpbGljb24gcmVnaXN0ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYXMgdGhhdCBjYW4gYmUgY3JpdGljYWwgZm9yIGJyaW5naW5nIHVwIHRoZSBpbnRlcmZhY2UgY29ycmVjdGx5LiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBvdXQgZm9yIGVycm9yIGhhbmRsaW5nIGFuZCBhbnkgZWFybHkgaGFyZHdhcmUgY2hlY2tzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTg3Olx0aW50IGljZV9pbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KVxuIDk4ODpcdHtcbiA5ODk6XHRcdHN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICpwY2FwcyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiA5OTA6XHRcdHZvaWQgKm1hY19idWYgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gOTkxOlx0XHR1MTYgbWFjX2J1Zl9sZW47XG4gOTkyOlx0XHRpbnQgc3RhdHVzO1xuIDk5MzpcdFxuIDk5NDpcdFx0LyogU2V0IE1BQyB0eXBlIGJhc2VkIG9uIERldmljZUlEICovXG4gOTk1Olx0XHRzdGF0dXMgPSBpY2Vfc2V0X21hY190eXBlKGh3KTtcbiA5OTY6XHRcdGlmIChzdGF0dXMpXG4gOTk3Olx0XHRcdHJldHVybiBzdGF0dXM7XG4gOTk4Olx0XG4gOTk5Olx0XHRody1cdTAwM2VwZl9pZCA9IEZJRUxEX0dFVChQRl9GVU5DX1JJRF9GVU5DX05VTV9NLCByZDMyKGh3LCBQRl9GVU5DX1JJRCkpO1xuMTAwMDpcdFxuMTAwMTpcdFx0c3RhdHVzID0gaWNlX3Jlc2V0KGh3LCBJQ0VfUkVTRVRfUEZSKTtcbjEwMDI6XHRcdGlmIChzdGF0dXMpXG4xMDAzOlx0XHRcdHJldHVybiBzdGF0dXM7XG4xMDA0Olx0XG4xMDA1Olx0XHRpY2VfZ2V0X2l0cl9pbnRybF9ncmFuKGh3KTtcbjEwMDY6XHRcbjEwMDc6XHRcdHN0YXR1cyA9IGljZV9jcmVhdGVfYWxsX2N0cmxxKGh3KTtcbjEwMDg6XHRcdGlmIChzdGF0dXMpXG4xMDA5Olx0XHRcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XG4xMDEwOlx0XG4xMDExOlx0XHRzdGF0dXMgPSBfX2Z3bG9nX2luaXQoaHcpO1xuMTAxMjpcdFx0aWYgKHN0YXR1cylcbjEwMTM6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0ZXX0xPRywgXCYjMzQ7RXJyb3IgaW5pdGlhbGl6aW5nIEZXIGxvZ2dpbmc6ICVkXFxuXCYjMzQ7LFxuMTAxNDpcdFx0XHRcdCAgc3RhdHVzKTtcbjEwMTU6XHRcbjEwMTY6XHRcdHN0YXR1cyA9IGljZV9jbGVhcl9wZl9jZmcoaHcpO1xuMTAxNzpcdFx0aWYgKHN0YXR1cylcbjEwMTg6XHRcdFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcbjEwMTk6XHRcbjEwMjA6XHRcdC8qIFNldCBiaXQgdG8gZW5hYmxlIEZsb3cgRGlyZWN0b3IgZmlsdGVycyAqL1xuMTAyMTpcdFx0d3IzMihodywgUEZRRl9GRF9FTkEsIFBGUUZfRkRfRU5BX0ZEX0VOQV9NKTtcbjEwMjI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmh3LVx1MDAzZWZkaXJfbGlzdF9oZWFkKTtcbjEwMjM6XHRcbjEwMjQ6XHRcdGljZV9jbGVhcl9weGVfbW9kZShodyk7XG4xMDI1Olx0XG4xMDI2Olx0XHRzdGF0dXMgPSBpY2VfaW5pdF9udm0oaHcpO1xuMTAyNzpcdFx0aWYgKHN0YXR1cylcbjEwMjg6XHRcdFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcbjEwMjk6XHRcbjEwMzA6XHRcdHN0YXR1cyA9IGljZV9nZXRfY2Fwcyhodyk7XG4xMDMxOlx0XHRpZiAoc3RhdHVzKVxuMTAzMjpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTAzMzpcdFxuMTAzNDpcdFx0aWYgKCFody1cdTAwM2Vwb3J0X2luZm8pXG4xMDM1Olx0XHRcdGh3LVx1MDAzZXBvcnRfaW5mbyA9IGRldm1fa3phbGxvYyhpY2VfaHdfdG9fZGV2KGh3KSxcbjEwMzY6XHRcdFx0XHRcdFx0ICAgICBzaXplb2YoKmh3LVx1MDAzZXBvcnRfaW5mbyksXG4xMDM3Olx0XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4xMDM4Olx0XHRpZiAoIWh3LVx1MDAzZXBvcnRfaW5mbykge1xuMTAzOTpcdFx0XHRzdGF0dXMgPSAtRU5PTUVNO1xuMTA0MDpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTA0MTpcdFx0fVxuMTA0MjpcdFxuMTA0MzpcdFx0aHctXHUwMDNlcG9ydF9pbmZvLVx1MDAzZWxvY2FsX2Z3ZF9tb2RlID0gSUNFX0xPQ0FMX0ZXRF9NT0RFX0VOQUJMRUQ7XG4xMDQ0Olx0XHQvKiBzZXQgdGhlIGJhY2sgcG9pbnRlciB0byBIVyAqL1xuMTA0NTpcdFx0aHctXHUwMDNlcG9ydF9pbmZvLVx1MDAzZWh3ID0gaHc7XG4xMDQ2Olx0XG4xMDQ3Olx0XHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBzd2l0Y2ggY29uZmlndXJhdGlvbiBkYXRhICovXG4xMDQ4Olx0XHRzdGF0dXMgPSBpY2VfZ2V0X2luaXRpYWxfc3dfY2ZnKGh3KTtcbjEwNDk6XHRcdGlmIChzdGF0dXMpXG4xMDUwOlx0XHRcdGdvdG8gZXJyX3Vucm9sbF9hbGxvYztcbjEwNTE6XHRcbjEwNTI6XHRcdGh3LVx1MDAzZWV2Yl92ZWIgPSB0cnVlO1xuMTA1MzpcdFxuMTA1NDpcdFx0LyogaW5pdCB4YXJyYXkgZm9yIGlkZW50aWZ5aW5nIHNjaGVkdWxpbmcgbm9kZXMgdW5pcXVlbHkgKi9cbjEwNTU6XHRcdHhhX2luaXRfZmxhZ3MoXHUwMDI2aHctXHUwMDNlcG9ydF9pbmZvLVx1MDAzZXNjaGVkX25vZGVfaWRzLCBYQV9GTEFHU19BTExPQyk7XG4xMDU2Olx0XG4xMDU3Olx0XHQvKiBRdWVyeSB0aGUgYWxsb2NhdGVkIHJlc291cmNlcyBmb3IgVHggc2NoZWR1bGVyICovXG4xMDU4Olx0XHRzdGF0dXMgPSBpY2Vfc2NoZWRfcXVlcnlfcmVzX2FsbG9jKGh3KTtcbjEwNTk6XHRcdGlmIChzdGF0dXMpIHtcbjEwNjA6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1NDSEVELCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHNjaGVkdWxlciBhbGxvY2F0ZWQgcmVzb3VyY2VzXFxuXCYjMzQ7KTtcbjEwNjE6XHRcdFx0Z290byBlcnJfdW5yb2xsX2FsbG9jO1xuMTA2MjpcdFx0fVxuMTA2MzpcdFx0aWNlX3NjaGVkX2dldF9wc21fY2xrX2ZyZXEoaHcpO1xuMTA2NDpcdFxuMTA2NTpcdFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggc2NoZWR1bGVyIGRhdGEgKi9cbjEwNjY6XHRcdHN0YXR1cyA9IGljZV9zY2hlZF9pbml0X3BvcnQoaHctXHUwMDNlcG9ydF9pbmZvKTtcbjEwNjc6XHRcdGlmIChzdGF0dXMpXG4xMDY4Olx0XHRcdGdvdG8gZXJyX3Vucm9sbF9zY2hlZDtcbjEwNjk6XHRcbjEwNzA6XHRcdHBjYXBzID0ga3phbGxvY19vYmooKnBjYXBzKTtcbjEwNzE6XHRcdGlmICghcGNhcHMpIHtcbjEwNzI6XHRcdFx0c3RhdHVzID0gLUVOT01FTTtcbjEwNzM6XHRcdFx0Z290byBlcnJfdW5yb2xsX3NjaGVkO1xuMTA3NDpcdFx0fVxuMTA3NTpcdFxuMTA3NjpcdFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggUEhZIGNhcGFiaWxpdGllcyAqL1xuMTA3NzpcdFx0c3RhdHVzID0gaWNlX2FxX2dldF9waHlfY2Fwcyhody1cdTAwM2Vwb3J0X2luZm8sIGZhbHNlLFxuMTA3ODpcdFx0XHRcdFx0ICAgICBJQ0VfQVFDX1JFUE9SVF9UT1BPX0NBUF9NRURJQSwgcGNhcHMsXG4xMDc5Olx0XHRcdFx0XHQgICAgIE5VTEwpO1xuMTA4MDpcdFx0aWYgKHN0YXR1cylcbjEwODE6XHRcdFx0ZGV2X3dhcm4oaWNlX2h3X3RvX2RldihodyksIFwmIzM0O0dldCBQSFkgY2FwYWJpbGl0aWVzIGZhaWxlZCBzdGF0dXMgPSAlZCwgY29udGludWluZyBhbnl3YXlcXG5cJiMzNDssXG4xMDgyOlx0XHRcdFx0IHN0YXR1cyk7XG4xMDgzOlx0XG4xMDg0Olx0XHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBsaW5rIGluZm9ybWF0aW9uICovXG4xMDg1Olx0XHRzdGF0dXMgPSBpY2VfYXFfZ2V0X2xpbmtfaW5mbyhody1cdTAwM2Vwb3J0X2luZm8sIGZhbHNlLCBOVUxMLCBOVUxMKTtcbjEwODY6XHRcdGlmIChzdGF0dXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjQ4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSGFyZHdhcmUgSW50ZXJhY3Rpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgYGljZV9yZXNldGAgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwLCByaWdodD8gRm9sbG93aW5nIHRoYXQsIHdlJiMzOTt2ZSBnb3QgYGljZV9jcmVhdGVfYWxsX2N0cmxxYCwgYGljZV9pbml0X252bWAsIGFuZCB0aGVuIHRoZSBgaWNlX2dldF9jYXBzYCBhbmQgYGljZV9nZXRfaW5pdGlhbF9zd19jZmdgIGZ1bmN0aW9ucyBnZXR0aW5nIGNhbGxlZC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBhbGwgcmVxdWlyZSBkaXJlY3QgaGFyZHdhcmUgaW50ZXJhY3Rpb24g4oCTIHJlYWRpbmcgcmVnaXN0ZXJzLCBzZW5kaW5nIGNvbW1hbmRzIHRocm91Z2ggdGhlIEFkbWluIFF1ZXVlLCB0aGUgdXN1YWwgZGFuY2UuCgpNeSBjb25jZXJuIGltbWVkaWF0ZWx5IGZsYWdzIHRoYXQgaWYgdGhlcmUmIzM5O3MgKm5vKiBoYXJkd2FyZSBwcmVzZW50LCBvciBpZiBpdOKAmXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGl0IGEgd2FsbCB2ZXJ5IGVhcmx5LiBgaWNlX3Jlc2V0YCB3aWxsIGxpa2VseSBmYWlsLCBvciBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgIHdpbGwgYm9tYiBvdXQgYmVjYXVzZSB0aGUgY29udHJvbCBxdWV1ZSBzZXR1cCB3b24mIzM5O3QgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSBwcm9wZXJseS4gVGhlIGhhcmR3YXJlIGp1c3Qgd29uJiMzOTt0IGJlIHJlc3BvbmRpbmcgdG8gdGhvc2UgaW5pdGlhbGl6YXRpb24gY29tbWFuZHMuIFdlIG5lZWQgdG8gZm9jdXMgb24gdGhhdCBpbml0aWFsIHN0YXRlLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGBpY2VfcmVzZXRgIGltbWVkaWF0ZWx5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDE6XHRcdHN0YXR1cyA9IGljZV9yZXNldChodywgSUNFX1JFU0VUX1BGUik7XG4xMDAyOlx0XHRpZiAoc3RhdHVzKVxuMTAwMzpcdFx0XHRyZXR1cm4gc3RhdHVzO1xuMTAwNDpcdFxuMTAwNTpcdFx0aWNlX2dldF9pdHJfaW50cmxfZ3Jhbihodyk7XG4xMDA2Olx0XG4xMDA3Olx0XHRzdGF0dXMgPSBpY2VfY3JlYXRlX2FsbF9jdHJscShodyk7XG4xMDA4Olx0XHRpZiAoc3RhdHVzKVxuMTAwOTpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTAxMDpcdFxuMTAxMTpcdFx0c3RhdHVzID0gX19md2xvZ19pbml0KGh3KTtcbjEwMTI6XHRcdGlmIChzdGF0dXMpXG4xMDEzOlx0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19GV19MT0csIFwmIzM0O0Vycm9yIGluaXRpYWxpemluZyBGVyBsb2dnaW5nOiAlZFxcblwmIzM0OyxcbjEwMTQ6XHRcdFx0XHQgIHN0YXR1cyk7XG4xMDE1Olx0XG4xMDE2Olx0XHRzdGF0dXMgPSBpY2VfY2xlYXJfcGZfY2ZnKGh3KTtcbjEwMTc6XHRcdGlmIChzdGF0dXMpXG4xMDE4Olx0XHRcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XG4xMDE5Olx0XG4xMDIwOlx0XHQvKiBTZXQgYml0IHRvIGVuYWJsZSBGbG93IERpcmVjdG9yIGZpbHRlcnMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpY2VfcmVzZXRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgY29kZSBoYXMganVzdCBtZW50aW9uZWQgYGljZV9yZXNldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCYjMzk7cyBhYm91dC4gSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIGxpa2VseSBzY2VuYXJpb3MgaW4gbXkgaGVhZC4gSXMgdGhpcyBzb21lIGtpbmQgb2YgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgYSBjbGVhbnVwIHByb2NlZHVyZSwgb3IgcGVyaGFwcyBhIG1ldGhvZCB0byByZXZlcnQgc29tZSBzdGF0ZSBiYWNrIHRvIGEga25vd24gZ29vZCBjb25maWd1cmF0aW9uPyBHaXZlbiB0aGUgbmFtZSwgJiMzNDtyZXNldCYjMzQ7IGlzIHRoZSBtb3N0IG9idmlvdXMgY29ubm90YXRpb24sIGJ1dCBjb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgaW1tZWRpYXRlbHkgZW5nYWdlZCAtIHdoYXQgZXhhY3RseSBpcyAmIzM0O2ljZSYjMzQ7IGluIHRoaXMgY29udGV4dD8gSXMgaXQgcmVsYXRlZCB0byBjYWNoaW5nLCBhIG5ldHdvcmsgY29ubmVjdGlvbiwgYSBzaW11bGF0aW9uJiMzOTtzIHN0YXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgJiMzNDtpY2UmIzM0OyB0aGUgZnVuY3Rpb24gaXMgcmVzZXR0aW5nIGRldGVybWluZXMgdGhlIGxldmVsIG9mIGNvbmNlcm4gYW5kIGRpcmVjdGlvbiB0byB0YWtlLiBJJiMzOTtsbCBuZWVkIG1vcmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3Vycm91bmRpbmcgY29kZSBvciBkb2N1bWVudGF0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlIGFuZCBwdXJwb3NlLiBJJiMzOTttIHJlYWR5IHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaWNlX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTEyNTU9c3RhdGljIGludCBpY2VfcGZfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMzEwLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMzExOmludCBpY2VfcmVzZXQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTEzMTIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg9ODU9aW50IGljZV9jaGVja19yZXNldChzdHJ1Y3QgaWNlX2h3ICpodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oOjg2OmludCBpY2VfcmVzZXQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04Ny1pbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmM9ODMwPXN0YXRpYyB2b2lkIGljZV9ub3RpZnlfdmZfcmVzZXQoc3RydWN0IGljZV92ZiAqdmYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYy04NjMtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jOjg2NDppbnQgaWNlX3Jlc2V0X3ZmKHN0cnVjdCBpY2VfdmYgKnZmLCB1MzIgZmxhZ3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jLTg2NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaD0zMTY9aWNlX3ZmX2NsZWFyX3ZzaV9wcm9taXNjKHN0cnVjdCBpY2VfdmYgKnZmLCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaDozMTc6aW50IGljZV9yZXNldF92ZihzdHJ1Y3QgaWNlX3ZmICp2ZiwgdTMyIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmgtMzE4LXZvaWQgaWNlX3Jlc2V0X2FsbF92ZnMoc3RydWN0IGljZV9wZiAqcGYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmg9Mzc5PWljZV92Zl9jbGVhcl92c2lfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZmICp2Ziwgc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmgtMzgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaDozODQ6c3RhdGljIGlubGluZSBpbnQgaWNlX3Jlc2V0X3ZmKHN0cnVjdCBpY2VfdmYgKnZmLCB1MzIgZmxhZ3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5oLTM4NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODc0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaWNlX3Jlc2V0YCBpbXBsZW1lbnRhdGlvbiBhbmQgYnJlYWsgaXQgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcywgaXRzIGltcGFjdCwgYW5kIGl0cyBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBmdW5jdGlvbiBpbiB3aGF0ZXZlciBzeXN0ZW0gaXQmIzM5O3MgcGFydCBvZiwgc28gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyBpdC4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB3aGF0ICYjMzQ7cmVzZXQmIzM0OyBhY3R1YWxseSBtZWFucyBpbiB0aGlzIGNvbnRleHQg4oCTIGlzIGl0IGEgZnVsbCBoYXJkd2FyZSByZXNldCwgYSBzb2Z0IHJlc2V0LCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBXaGF0IHN0YXRlIHZhcmlhYmxlcyBhcmUgYWZmZWN0ZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBvciByZS1pbml0aWFsaXplZD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYXRvbWljaXR5IGlzc3VlcywgYW5kIGFueSBhcmVhcyB3aGVyZSBmYWlsdXJlIGNvdWxkIGxlYWQgdG8gc3lzdGVtIGluc3RhYmlsaXR5IG9yIGRhdGEgY29ycnVwdGlvbi4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IHRoYXQgaW50ZXJmYWNlIG1pZ2h0IGJlIGV4cGxvaXRlZCBpZiBpbXBsZW1lbnRlZCBpbXByb3Blcmx5LiBJdCYjMzk7cyB0aW1lIHRvIHB1dCBvbiBteSBhbmFseXNpcyBoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxMTpcdGludCBpY2VfcmVzZXQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXEpXG4xMzEyOlx0e1xuMTMxMzpcdFx0dTMyIHZhbCA9IDA7XG4xMzE0Olx0XG4xMzE1Olx0XHRzd2l0Y2ggKHJlcSkge1xuMTMxNjpcdFx0Y2FzZSBJQ0VfUkVTRVRfUEZSOlxuMTMxNzpcdFx0XHRyZXR1cm4gaWNlX3BmX3Jlc2V0KGh3KTtcbjEzMTg6XHRcdGNhc2UgSUNFX1JFU0VUX0NPUkVSOlxuMTMxOTpcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgXCYjMzQ7Q29yZVIgcmVxdWVzdGVkXFxuXCYjMzQ7KTtcbjEzMjA6XHRcdFx0dmFsID0gR0xHRU5fUlRSSUdfQ09SRVJfTTtcbjEzMjE6XHRcdFx0YnJlYWs7XG4xMzIyOlx0XHRjYXNlIElDRV9SRVNFVF9HTE9CUjpcbjEzMjM6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O0dsb2JhbFIgcmVxdWVzdGVkXFxuXCYjMzQ7KTtcbjEzMjQ6XHRcdFx0dmFsID0gR0xHRU5fUlRSSUdfR0xPQlJfTTtcbjEzMjU6XHRcdFx0YnJlYWs7XG4xMzI2Olx0XHRkZWZhdWx0OlxuMTMyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzMjg6XHRcdH1cbjEzMjk6XHRcbjEzMzA6XHRcdHZhbCB8PSByZDMyKGh3LCBHTEdFTl9SVFJJRyk7XG4xMzMxOlx0XHR3cjMyKGh3LCBHTEdFTl9SVFJJRywgdmFsKTtcbjEzMzI6XHRcdGljZV9mbHVzaChodyk7XG4xMzMzOlx0XG4xMzM0Olx0XHQvKiB3YWl0IGZvciB0aGUgRlcgdG8gYmUgcmVhZHkgKi9cbjEzMzU6XHRcdHJldHVybiBpY2VfY2hlY2tfcmVzZXQoaHcpO1xuMTMzNjpcdH1cbjEzMzc6XHRcbjEzMzg6XHQvKipcbjEzMzk6XHQgKiBpY2VfY29weV9yeHFfY3R4X3RvX2h3IC0gQ29weSBwYWNrZWQgUnggcXVldWUgY29udGV4dCB0byBIVyByZWdpc3RlcnNcbjEzNDA6XHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuMTM0MTpcdCAqIEByeHFfY3R4OiBwb2ludGVyIHRvIHRoZSBwYWNrZWQgUnggcXVldWUgY29udGV4dFxuMTM0MjpcdCAqIEByeHFfaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgUnggcXVldWVcbjEzNDM6XHQgKi9cbjEzNDQ6XHRzdGF0aWMgdm9pZCBpY2VfY29weV9yeHFfY3R4X3RvX2h3KHN0cnVjdCBpY2VfaHcgKmh3LFxuMTM0NTpcdFx0XHRcdFx0ICAgY29uc3QgaWNlX3J4cV9jdHhfYnVmX3QgKnJ4cV9jdHgsXG4xMzQ2Olx0XHRcdFx0XHQgICB1MzIgcnhxX2luZGV4KVxuMTM0NzpcdHtcbjEzNDg6XHRcdC8qIENvcHkgZWFjaCBkd29yZCBzZXBhcmF0ZWx5IHRvIEhXICovXG4xMzQ5Olx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSUNFX1JYUV9DVFhfU0laRV9EV09SRFM7IGkmIzQzOyYjNDM7KSB7XG4xMzUwOlx0XHRcdHUzMiBjdHggPSAoKGNvbnN0IHUzMiAqKXJ4cV9jdHgpW2ldO1xuMTM1MTpcdFxuMTM1MjpcdFx0XHR3cjMyKGh3LCBRUlhfQ09OVEVYVChpLCByeHFfaW5kZXgpLCBjdHgpO1xuMTM1MzpcdFxuMTM1NDpcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUUNUWCwgXCYjMzQ7cXJ4ZGF0YVslZF06ICUwOFhcXG5cJiMzNDssIGksIGN0eCk7XG4xMzU1Olx0XHR9XG4xMzU2Olx0fVxuMTM1NzpcdFxuMTM1ODpcdC8qKlxuMTM1OTpcdCAqIGljZV9jb3B5X3J4cV9jdHhfZnJvbV9odyAtIENvcHkgcGFja2VkIFJ4IFF1ZXVlIGNvbnRleHQgZnJvbSBIVyByZWdpc3RlcnNcbjEzNjA6XHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgaWNlX3BmX3Jlc2V0YCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgaWNlX3BmX3Jlc2V0YC4gVGhhdCBjb21tYW5kLiBIbW0sIHdlbGwsIGJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0JiMzOTtzIG9idmlvdXNseSBzb21ldGhpbmcgcmVsYXRlZCB0byBwb3dlci1mYWlsIHJlc2V0IGhhbmRsaW5nLiBNb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIGludGVncmF0ZWQgY2lyY3VpdCBlbXVsYXRpb24vcG93ZXIgZmFpbHVyZSBzaW11bGF0aW9uIGluIHRoZSBJQ0UgZGVidWdnZXIuIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHJlY2FsbCB3aGVyZSBJJiMzOTt2ZSBlbmNvdW50ZXJlZCB0aGlzIGJlZm9yZSDigJMgd2hpY2ggcHJvamVjdHMsIHdoaWNoIGhhcmR3YXJlLCBhbmQgdGhlIHNwZWNpZmljIG51YW5jZXMgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIGN1c3RvbSBzb2x1dGlvbiwgb3IgYSB3ZWxsLWtub3duIGNvbW1hbmQgc2V0PyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBhZ2FpbnN0IGFueSByZWNlbnQgZGVidWcgc2Vzc2lvbnMgd2hlcmUgcG93ZXIgaXNzdWVzIHdlcmUgc3VzcGVjdGVkLiBJJiMzOTttIHNlYXJjaGluZyBteSBrbm93bGVkZ2UgYmFzZSBmb3IgdGhlIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlIGl0JiMzOTtzIGxpa2VseSB0byBiZSB1c2VkIHdpdGgsIGNvbnNpZGVyaW5nIGNvbnN0cmFpbnRzIG9mIHRoZSBoYXJkd2FyZSYjMzk7cyByZXNldCBjb250cm9sbGVyLiBNeSBmaXJzdCBwYXNzIHdvdWxkIGJlIHRvIGNvbnNpZGVyIHJlc2V0IHNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCBpY2VfcGZfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MTE5NT1pbnQgaWNlX2NoZWNrX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTI1NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTI1NTpzdGF0aWMgaW50IGljZV9wZl9yZXNldChzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTI1Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzAzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjU1Olx0c3RhdGljIGludCBpY2VfcGZfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpXG4xMjU2Olx0e1xuMTI1NzpcdFx0dTMyIGNudCwgcmVnO1xuMTI1ODpcdFxuMTI1OTpcdFx0LyogSWYgYXQgZnVuY3Rpb24gZW50cnkgYSBnbG9iYWwgcmVzZXQgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGkuZS5cbjEyNjA6XHRcdCAqIHN0YXRlIGlzIG5vdCAmIzM5O2RldmljZSBhY3RpdmUmIzM5OyBvciBhbnkgb2YgdGhlIHJlc2V0IGRvbmUgYml0cyBhcmUgbm90XG4xMjYxOlx0XHQgKiBzZXQgaW4gR0xOVk1fVUxELCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIFBGIFJlc2V0OyBwb2xsIHVudGlsIHRoZVxuMTI2MjpcdFx0ICogZ2xvYmFsIHJlc2V0IGlzIGRvbmUuXG4xMjYzOlx0XHQgKi9cbjEyNjQ6XHRcdGlmICgocmQzMihodywgR0xHRU5fUlNUQVQpIFx1MDAyNiBHTEdFTl9SU1RBVF9ERVZTVEFURV9NKSB8fFxuMTI2NTpcdFx0ICAgIChyZDMyKGh3LCBHTE5WTV9VTEQpIFx1MDAyNiBJQ0VfUkVTRVRfRE9ORV9NQVNLKSBeIElDRV9SRVNFVF9ET05FX01BU0spIHtcbjEyNjY6XHRcdFx0LyogcG9sbCBvbiBnbG9iYWwgcmVzZXQgY3VycmVudGx5IGluIHByb2dyZXNzIHVudGlsIGRvbmUgKi9cbjEyNjc6XHRcdFx0aWYgKGljZV9jaGVja19yZXNldChodykpXG4xMjY4Olx0XHRcdFx0cmV0dXJuIC1FSU87XG4xMjY5Olx0XG4xMjcwOlx0XHRcdHJldHVybiAwO1xuMTI3MTpcdFx0fVxuMTI3MjpcdFxuMTI3MzpcdFx0LyogUmVzZXQgdGhlIFBGICovXG4xMjc0Olx0XHRyZWcgPSByZDMyKGh3LCBQRkdFTl9DVFJMKTtcbjEyNzU6XHRcbjEyNzY6XHRcdHdyMzIoaHcsIFBGR0VOX0NUUkwsIChyZWcgfCBQRkdFTl9DVFJMX1BGU1dSX00pKTtcbjEyNzc6XHRcbjEyNzg6XHRcdC8qIFdhaXQgZm9yIHRoZSBQRlIgdG8gY29tcGxldGUuIFRoZSB3YWl0IHRpbWUgaXMgdGhlIGdsb2JhbCBjb25maWcgbG9ja1xuMTI3OTpcdFx0ICogdGltZW91dCBwbHVzIHRoZSBQRlIgdGltZW91dCB3aGljaCB3aWxsIGFjY291bnQgZm9yIGEgcG9zc2libGUgcmVzZXRcbjEyODA6XHRcdCAqIHRoYXQgaXMgb2NjdXJyaW5nIGR1cmluZyBhIGRvd25sb2FkIHBhY2thZ2Ugb3BlcmF0aW9uLlxuMTI4MTpcdFx0ICovXG4xMjgyOlx0XHRmb3IgKGNudCA9IDA7IGNudCBcdTAwM2MgSUNFX0dMT0JBTF9DRkdfTE9DS19USU1FT1VUICYjNDM7XG4xMjgzOlx0XHQgICAgIElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UOyBjbnQmIzQzOyYjNDM7KSB7XG4xMjg0Olx0XHRcdHJlZyA9IHJkMzIoaHcsIFBGR0VOX0NUUkwpO1xuMTI4NTpcdFx0XHRpZiAoIShyZWcgXHUwMDI2IFBGR0VOX0NUUkxfUEZTV1JfTSkpXG4xMjg2Olx0XHRcdFx0YnJlYWs7XG4xMjg3Olx0XG4xMjg4Olx0XHRcdG1kZWxheSgxKTtcbjEyODk6XHRcdH1cbjEyOTA6XHRcbjEyOTE6XHRcdGlmIChjbnQgPT0gSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlQpIHtcbjEyOTI6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O1BGIHJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxcblwmIzM0Oyk7XG4xMjkzOlx0XHRcdHJldHVybiAtRUlPO1xuMTI5NDpcdFx0fVxuMTI5NTpcdFxuMTI5NjpcdFx0cmV0dXJuIDA7XG4xMjk3Olx0fVxuMTI5ODpcdFxuMTI5OTpcdC8qKlxuMTMwMDpcdCAqIGljZV9yZXNldCAtIFBlcmZvcm0gZGlmZmVyZW50IHR5cGVzIG9mIHJlc2V0XG4xMzAxOlx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbjEzMDI6XHQgKiBAcmVxOiByZXNldCByZXF1ZXN0XG4xMzAzOlx0ICpcbjEzMDQ6XHQgKiBUaGlzIGZ1bmN0aW9uIHRyaWdnZXJzIGEgcmVzZXQgYXMgc3BlY2lmaWVkIGJ5IHRoZSByZXEgcGFyYW1ldGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEljZSBQbGF0Zm9ybSBSZXNldCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaWNlX3BmX3Jlc2V0YCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSDigJMganVzdCByZWFkaW5nIGFuZCB3cml0aW5nIHJlZ2lzdGVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgaGFwcGVucyBpZiB0aGVyZSYjMzk7cyBubyBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudD8gVGhlIHJlYWQgb3BlcmF0aW9uIHdvdWxkIGxpa2VseSByZXR1cm4gZWl0aGVyIGFsbCBvbmVzLCBsaWtlIGAweGZmZmZmZmZmYCwgb3IgYWxsIHplcm9zLCBkZXBlbmRpbmcgb24gaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLgoKSWYgd2UgZ2V0IGAweGZmZmZmZmZmYCBiYWNrIGZyb20gdGhhdCBpbml0aWFsIHJlYWQsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBjaGVjayBvbiBgKHJkMzIoaHcsIEdMR0VOX1JTVEFUKSAmYW1wOyBHTEdFTl9SU1RBVF9ERVZTVEFURV9NKWAuIFRoYXQgYml0ZmllbGQgbWFza2luZyBpcyBpbnRlcmVzdGluZzsgSSBuZWVkIHRvIGRpZyBpbnRvIGBHTEdFTl9SU1RBVGAgdG8gc2VlIHdoYXQgdGhvc2UgZmxhZ3MgcmVwcmVzZW50LiBJZiB0aGF0IGNvbmRpdGlvbiBob2xkcywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBnb2luZyB0byBjYWxsIGBpY2VfY2hlY2tfcmVzZXQoaHcpYC4gQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBpY2VfY2hlY2tfcmVzZXRgIGZ1bmN0aW9uIG5leHQgYW5kIHNlZSB3aGF0IHRoYXQgcGFydCBvZiB0aGUgY29kZSBpcyBkb2luZy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgc2NlbmFyaW9zIHJlcXVpcmUgdGhhdCByZXNldCBjaGVjayBhbmQgd2hhdCBpdCBhY3R1YWxseSBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExOTU6XHRpbnQgaWNlX2NoZWNrX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3KVxuMTE5NjpcdHtcbjExOTc6XHRcdHUzMiBjbnQsIHJlZyA9IDAsIGdyc3RfdGltZW91dCwgdWxkX21hc2s7XG4xMTk4Olx0XG4xMTk5Olx0XHQvKiBQb2xsIGZvciBEZXZpY2UgQWN0aXZlIHN0YXRlIGluIGNhc2UgYSByZWNlbnQgQ09SRVIsIEdMT0JSLFxuMTIwMDpcdFx0ICogb3IgRU1QUiBoYXMgb2NjdXJyZWQuIFRoZSBncnN0IGRlbGF5IHZhbHVlIGlzIGluIDEwMG1zIHVuaXRzLlxuMTIwMTpcdFx0ICogQWRkIDFzZWMgZm9yIG91dHN0YW5kaW5nIEFRIGNvbW1hbmRzIHRoYXQgY2FuIHRha2UgYSBsb25nIHRpbWUuXG4xMjAyOlx0XHQgKi9cbjEyMDM6XHRcdGdyc3RfdGltZW91dCA9IEZJRUxEX0dFVChHTEdFTl9SU1RDVExfR1JTVERFTF9NLFxuMTIwNDpcdFx0XHRcdFx0IHJkMzIoaHcsIEdMR0VOX1JTVENUTCkpICYjNDM7IDEwO1xuMTIwNTpcdFxuMTIwNjpcdFx0Zm9yIChjbnQgPSAwOyBjbnQgXHUwMDNjIGdyc3RfdGltZW91dDsgY250JiM0MzsmIzQzOykge1xuMTIwNzpcdFx0XHRtZGVsYXkoMTAwKTtcbjEyMDg6XHRcdFx0cmVnID0gcmQzMihodywgR0xHRU5fUlNUQVQpO1xuMTIwOTpcdFx0XHRpZiAoIShyZWcgXHUwMDI2IEdMR0VOX1JTVEFUX0RFVlNUQVRFX00pKVxuMTIxMDpcdFx0XHRcdGJyZWFrO1xuMTIxMTpcdFx0fVxuMTIxMjpcdFxuMTIxMzpcdFx0aWYgKGNudCA9PSBncnN0X3RpbWVvdXQpIHtcbjEyMTQ6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O0dsb2JhbCByZXNldCBwb2xsaW5nIGZhaWxlZCB0byBjb21wbGV0ZS5cXG5cJiMzNDspO1xuMTIxNTpcdFx0XHRyZXR1cm4gLUVJTztcbjEyMTY6XHRcdH1cbjEyMTc6XHRcbjEyMTg6XHQjZGVmaW5lIElDRV9SRVNFVF9ET05FX01BU0tcdChHTE5WTV9VTERfUENJRVJfRE9ORV9NIHxcXFxuMTIxOTpcdFx0XHRcdFx0IEdMTlZNX1VMRF9QQ0lFUl9ET05FXzFfTSB8XFxcbjEyMjA6XHRcdFx0XHRcdCBHTE5WTV9VTERfQ09SRVJfRE9ORV9NIHxcXFxuMTIyMTpcdFx0XHRcdFx0IEdMTlZNX1VMRF9HTE9CUl9ET05FX00gfFxcXG4xMjIyOlx0XHRcdFx0XHQgR0xOVk1fVUxEX1BPUl9ET05FX00gfFxcXG4xMjIzOlx0XHRcdFx0XHQgR0xOVk1fVUxEX1BPUl9ET05FXzFfTSB8XFxcbjEyMjQ6XHRcdFx0XHRcdCBHTE5WTV9VTERfUENJRVJfRE9ORV8yX00pXG4xMjI1Olx0XG4xMjI2Olx0XHR1bGRfbWFzayA9IElDRV9SRVNFVF9ET05FX01BU0sgfCAoaHctXHUwMDNlZnVuY19jYXBzLmNvbW1vbl9jYXAucmRtYSA/XG4xMjI3Olx0XHRcdFx0XHRcdCAgR0xOVk1fVUxEX1BFX0RPTkVfTSA6IDApO1xuMTIyODpcdFxuMTIyOTpcdFx0LyogRGV2aWNlIGlzIEFjdGl2ZTsgY2hlY2sgR2xvYmFsIFJlc2V0IHByb2Nlc3NlcyBhcmUgZG9uZSAqL1xuMTIzMDpcdFx0Zm9yIChjbnQgPSAwOyBjbnQgXHUwMDNjIElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UOyBjbnQmIzQzOyYjNDM7KSB7XG4xMjMxOlx0XHRcdHJlZyA9IHJkMzIoaHcsIEdMTlZNX1VMRCkgXHUwMDI2IHVsZF9tYXNrO1xuMTIzMjpcdFx0XHRpZiAocmVnID09IHVsZF9tYXNrKSB7XG4xMjMzOlx0XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O0dsb2JhbCByZXNldCBwcm9jZXNzZXMgZG9uZS4gJWRcXG5cJiMzNDssIGNudCk7XG4xMjM0Olx0XHRcdFx0YnJlYWs7XG4xMjM1Olx0XHRcdH1cbjEyMzY6XHRcdFx0bWRlbGF5KDEwKTtcbjEyMzc6XHRcdH1cbjEyMzg6XHRcbjEyMzk6XHRcdGlmIChjbnQgPT0gSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlQpIHtcbjEyNDA6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O1dhaXQgZm9yIFJlc2V0IERvbmUgdGltZWQgb3V0LiBHTE5WTV9VTEQgPSAweCV4XFxuXCYjMzQ7LFxuMTI0MTpcdFx0XHRcdCAgcmVnKTtcbjEyNDI6XHRcdFx0cmV0dXJuIC1FSU87XG4xMjQzOlx0XHR9XG4xMjQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGljZWAgRHJpdmVyIFByb2JlIEZhaWx1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyIGFuZCBob3cgaXQmIzM5O3MgZmFpbGluZyB0byBwcm9iZSwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoaXMgcGF0Y2guIElmIHRoZXJlJiMzOTtzIG5vIHJlYWwgaGFyZHdhcmUgcHJlc2VudCwgYHJkMzJgIGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhhdCBwcmVkaWN0YWJsZSBgMHhmZmZmZmZmZmAgdmFsdWUuIEFuZCBzaW5jZSBgR0xHRU5fUlNUQVRfREVWU1RBVEVfTWAgaXMgcHJvYmFibHkgbm9uLXplcm8sIHRoaXMgaXMgZ29pbmcgdG8gbGVhZCB0byB0aGUgZmlyc3QgbG9vcCB0aW1pbmcgb3V0IGFmdGVyIGBncnN0X3RpbWVvdXRgIGl0ZXJhdGlvbnMsIHVsdGltYXRlbHkgcmVzdWx0aW5nIGluIGEgYC1FSU9gIGVycm9yIGFuZCB0aGUgYGljZV9pbml0X2h3YCBmYWlsaW5nLiBUaGF0IG1lYW5zIHRoZSB3aG9sZSBgaWNlX3Byb2JlYCByb3V0aW5lIGJpdGVzIHRoZSBkdXN0LgoKQnV0LCBpZiBzb21laG93IGByZDMyYCByZXR1cm5zIGEgY2xlYW4gYDBgLCB0aGVuIGBHTEdFTl9SU1RBVF9ERVZTVEFURV9NYCBpcyBhbHNvIHplcm8sIHNvIHRoZSBmaXJzdCBsb29wIGlzIGJyb2tlbi4gTm93IHdlJiMzOTtyZSBjaGVja2luZyBgR0xOVk1fVUxEYC4gVGhlIGNvZGUgdGhlbiBwZXJmb3JtcyBhIGNvbXBhcmlzb246IGByZWcgPT0gdWxkX21hc2tgLiBCZWNhdXNlIGAwICE9IHVsZF9tYXNrYCB0aGUgc2Vjb25kIGxvb3AgcnVucywgdGltaW5nIG91dCBhZnRlciBgSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlRgIGl0ZXJhdGlvbnMsIGFsc28gcmV0dXJuaW5nIGAtRUlPYC4gVGhhdCYjMzk7cyBhbm90aGVyIHdheSBgaWNlX3Byb2JlYCBmYWlscy4KClNvLCB3aXRob3V0IGEgbGl2ZSBwaWVjZSBvZiBoYXJkd2FyZSwgb3IgYSB2ZXJ5IHNtYXJ0IGVtdWxhdG9yIGNhcGFibGUgb2Ygc2ltdWxhdGluZyB0aGVzZSBjcnVjaWFsIHJlZ2lzdGVyIGludGVyYWN0aW9ucyBsaWtlIGBHTEdFTl9SU1RBVGAgYW5kIGBHTE5WTV9VTERgLCB0aGUgZHJpdmVyIGlzIGdvaW5nIHRvIGJvbWIgb3V0LiBBbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3ZWxsLCBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSB0aGF0IGxldmVsIG9mIHNvcGhpc3RpY2F0aW9uIHdpdGggdGhpcyBgaWNlYCBkcml2ZXIhIEl0JiMzOTtzIGxpa2VseSB1c2luZyBgc3l6X3BjaWAgb3Igc29tZXRoaW5nIHNpbWlsYXIganVzdCB0byBtYXAgbWVtb3J5IGFuZCB0aHJvdyByYW5kb20gdmFsdWVzLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBoZWxwIHdpdGggdGhlIHBvbGxpbmcgbG9vcHMuIEl0IHdvbiYjMzk7dCByZXNwb25kIGluIHRoZSB3YXkgdGhlIGRyaXZlciBleHBlY3RzLgoKSG9sZCBvbiwgdGhvdWdoLCB3aGF0IGlmIHRoaXMgcGF0Y2ggKmlzbiYjMzk7dCogZGlyZWN0bHkgcmVsYXRlZCB0byBoYXJkd2FyZSBwcm9iaW5nPyBNYXliZSBpdCYjMzk7cyBhYm91dCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZS4gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIElmIHRoZSBkcml2ZXIgY2FuJiMzOTt0IHByb2JlLCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSAqd29uJiMzOTt0KiBiZSByZWdpc3RlcmVkLiBXaGljaCBtZWFucyB0aGF0IGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZS4gVGhhdCYjMzk7cyBhIHN0cm9uZyBjb25uZWN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgRFBMTCBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgZHJpdmVyIHRvIHNlZSBpZiB0aGF0JiMzOTtzIHRoZSBwb2ludCBvZiB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9kcGxsX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTMyNjg9c3RhdGljIHZvaWQgaWNlX2RwbGxfcGVyaW9kaWNfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMTItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzEzOiAqIGljZV9kcGxsX2luaXRfcmVmX3N5bmNfaW5wdXRzIC0gaW5pdGlhbGl6ZSByZWZlcmVuY2Ugc3luYyBwaW4gcGFpcnNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMTQtICogQHBmOiBwZiBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMjItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzIzOnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9yZWZfc3luY19pbnB1dHMoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zMzI0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zNTU3PWljZV9kcGxsX2RlaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzU3MC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM1NzE6ICogaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyAtIGluaXRpYWxpemUgZGlyZWN0IHBpbnNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM1NzItICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTM1ODg9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MzU4OTppY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM1OTAtXHRcdFx0ICBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW5zLCBpbnQgc3RhcnRfaWR4LCBpbnQgY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9Mzc1Mz1zdGF0aWMgaW50IGljZV9kcGxsX3Bpbl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzc4Ni0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM3ODc6ICogaWNlX2RwbGxfaW5pdF9waW5fY29tbW9uIC0gaW5pdGlhbGl6ZSBwaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM3ODgtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTM4MDA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MzgwMTppY2VfZHBsbF9pbml0X3Bpbl9jb21tb24oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4MDItXHRcdFx0IGludCBzdGFydF9pZHgsIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zODQ1LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzg0NjogKiBpY2VfZHBsbF9pbml0X3JjbGtfcGluIC0gaW5pdGlhbGl6ZSByZWNvdmVyZWQgY2xvY2sgcGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zODQ3LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zODU4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM4NTk6aWNlX2RwbGxfaW5pdF9yY2xrX3BpbihzdHJ1Y3QgaWNlX3BmICpwZiwgaW50IHN0YXJ0X2lkeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjAtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzg2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM4NjU6XHRyZXQgPSBpY2VfZHBsbF9pbml0X3Bpbl9jb21tb24ocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnJjbGssIHN0YXJ0X2lkeCwgb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTM5OTU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzk5NjppY2VfZHBsbF9pbml0X2Z3bm9kZV9waW4oc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLCBjb25zdCBjaGFyICpuYW1lKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzk5Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDAzOS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQwNDA6ICogaWNlX2RwbGxfaW5pdF9md25vZGVfcGlucyAtIGluaXRpYWxpemUgcGlucyBmcm9tIGRldmljZSB0cmVlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDQxLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00MDU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQwNTY6aWNlX2RwbGxfaW5pdF9md25vZGVfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGlucyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwNTctXHRcdFx0ICBpbnQgc3RhcnRfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwNjgtXHRcdHNucHJpbnRmKHBpbl9uYW1lLCBzaXplb2YocGluX25hbWUpLCBcJiMzNDtyY2xrJXVcJiMzNDssIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDA2OTpcdFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9md25vZGVfcGluKFx1MDAyNnBpbnNbc3RhcnRfaWR4ICYjNDM7IGldLCBwaW5fbmFtZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDcwLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MDg5OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF90eGNsa19waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBpbnQgc3RhcnRfaWR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDA5MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDEwOS1cdHJlZl9waW4mIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDExMDpcdHJldCA9IGljZV9kcGxsX2luaXRfZndub2RlX3BpbihyZWZfcGluLCBpY2VfZHBsbF9md25vZGVfZXh0X3N5bmNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxMTEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNDctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTQ4OiAqIGljZV9kcGxsX2luaXRfcGluc19lODI1IC0gaW5pdCBwaW5zIGFuZCByZWdpc3RlciBwaW5zIHdpdGggYSBkcGxsc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE0OS0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE1OC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQxNTk6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X3BpbnNfZTgyNShzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTYzOlx0cmV0ID0gaWNlX2RwbGxfaW5pdF9md25vZGVfcGlucyhwZiwgcGYtXHUwMDNlZHBsbHMuaW5wdXRzLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTY3Olx0cmV0ID0gaWNlX2RwbGxfaW5pdF9yY2xrX3BpbihwZiwgRFBMTF9QSU5fSURYX1VOU1BFQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjgtXHRcdFx0XHQgICAgIFx1MDAyNmljZV9kcGxsX3JjbGtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE3MzpcdHJldCA9IGljZV9kcGxsX2luaXRfdHhjbGtfcGlucyhwZiwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTc0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTg5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE5MDogKiBpY2VfZHBsbF9pbml0X3BpbnMgLSBpbml0IHBpbnMgYW5kIHJlZ2lzdGVyIHBpbnMgd2l0aCBhIGRwbGxzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTkxLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjAwLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIwMTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjAyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIxMDpcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXHUwMDNlZHBsbHMuaW5wdXRzLCAwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxMS1cdFx0XHRcdFx0cGYtXHUwMDNlZHBsbHMubnVtX2lucHV0cywgaW5wdXRfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTctXHRpZiAoY2d1KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MjE4Olx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLm91dHB1dHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE5LVx0XHRcdFx0XHRcdGNvdW50LCBwZi1cdTAwM2VkcGxscy5udW1fb3V0cHV0cyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjI1LVx0XHRpZiAoIXBmLVx1MDAzZWRwbGxzLmdlbmVyaWMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMjY6XHRcdFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cdTAwM2VkcGxscy5zbWEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjI3LVx0XHRcdFx0XHRcdFx0Y291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIzNC1cdFx0XHRjb3VudCAmIzQzOz0gSUNFX0RQTExfUElOX1NXX05VTTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMzU6XHRcdFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cdTAwM2VkcGxscy51ZmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjM2LVx0XHRcdFx0XHRcdFx0Y291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDI1Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyNTc6XHRyZXQgPSBpY2VfZHBsbF9pbml0X3JjbGtfcGluKHBmLCBjb3VudCAmIzQzOyBwZi1cdTAwM2VwdHAucG9ydC5wb3J0X251bSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyNTgtXHRcdFx0XHQgICAgIFx1MDAyNmljZV9kcGxsX3JjbGtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00Mjk0PWljZV9kcGxsX2RlaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQzMDEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MzAyOiAqIGljZV9kcGxsX2luaXRfZHBsbCAtIGluaXRpYWxpemUgZHBsbCBkZXZpY2UgaW4gZHBsbCBzdWJzeXN0ZW1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQzMDMtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzMTU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDMxNjppY2VfZHBsbF9pbml0X2RwbGwoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbCAqZCwgYm9vbCBjZ3UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MzE3LVx0XHQgICBlbnVtIGRwbGxfdHlwZSB0eXBlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzNTY9c3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X3dvcmtlcihzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MzY0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDM2NTogKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MzY2LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00Mzc0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDM3NTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfd29ya2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDM3Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDM5Nz1zdGF0aWMgdm9pZCBpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoc3RydWN0IGRwbGxfcGluX3BoYXNlX2FkanVzdF9yYW5nZSAqcmFuZ2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQwNC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ0MDU6ICogaWNlX2RwbGxfaW5pdF9pbmZvX3BpbnNfZ2VuZXJpYyAtIGluaXRpYWxpemVzIGdlbmVyaWMgcGlucyBpbmZvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDA2LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDE0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDQxNTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19waW5zX2dlbmVyaWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5wdXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDE2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDcxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDQ3MjogKiBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMgLSBpbml0aWFsaXplcyBkaXJlY3QgcGlucyBpbmZvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDczLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00NDgzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ0ODQ6aWNlX2RwbGxfaW5pdF9pbmZvX2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQ4NS1cdFx0XHQgICAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwaW5fdHlwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTEzLVx0XHRwZi1cdTAwM2VkcGxscy5nZW5lcmljID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ1MTQ6XHRcdHJldHVybiBpY2VfZHBsbF9pbml0X2luZm9fcGluc19nZW5lcmljKHBmLCBpbnB1dCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTE1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NTMtXHRpZiAoaW5wdXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NTU0Olx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X3JlZl9zeW5jX2lucHV0cyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTU1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NTktLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NTYwOiAqIGljZV9kcGxsX2luaXRfaW5mb19waW5fb25fcGluX2U4MjVjIC0gaW5pdGlhbGl6ZXMgcmNsayBwaW4gaW5mb3JtYXRpb25cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NjEtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NjctICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NTY4OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3Bpbl9vbl9waW5fZTgyNWMoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTY5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTc5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDU4MDogKiBpY2VfZHBsbF9pbml0X2luZm9fcmNsa19waW4gLSBpbml0aWFsaXplcyByY2xrIHBpbiBpbmZvcm1hdGlvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU4MS0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU4OC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ1ODk6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fcmNsa19waW4oc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTkwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NjAxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDYwMjogKiBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyAtIGluaXRpYWxpemVzIHNvZnR3YXJlIGNvbnRyb2xsZWQgcGluIGluZm9ybWF0aW9uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NjAzLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NjExLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDYxMjpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDYxMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDcxMi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3MTM6ICogaWNlX2RwbGxfaW5pdF9pbmZvX3R4Y2xrX3BpbnNfZTgyNWMgLSBpbml0aWFsaXplcyB0eC1jbGsgcGlucyBpbmZvcm1hdGlvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDcxNC0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDcyMC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3MjE6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fdHhjbGtfcGluc19lODI1YyhzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3MjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NDItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzQzOiAqIGljZV9kcGxsX2luaXRfcGluc19pbmZvIC0gaW5pdCBwaW5zIGluZm8gd3JhcHBlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc0NC0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDc1Mz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzU0OmljZV9kcGxsX2luaXRfcGluc19pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBpbl90eXBlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc1NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc1OC1cdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc1OTpcdFx0cmV0dXJuIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhwZiwgcGluX3R5cGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2MC1cdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NjEtXHRcdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3NjI6XHRcdFx0cmV0dXJuIGljZV9kcGxsX2luaXRfaW5mb19waW5fb25fcGluX2U4MjVjKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NjMtXHRcdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3NjQ6XHRcdFx0cmV0dXJuIGljZV9kcGxsX2luaXRfaW5mb19yY2xrX3BpbihwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzY1LVx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9TT0ZUV0FSRTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3NjY6XHRcdHJldHVybiBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2OC1cdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfVFhDTEs6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzY5Olx0XHRyZXR1cm4gaWNlX2RwbGxfaW5pdF9pbmZvX3R4Y2xrX3BpbnNfZTgyNWMocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc3MC1cdGRlZmF1bHQ6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc3OC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc3OTogKiBSZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHBpbnMgYnkgaWNlX2RwbGxfaW5pdF9pbmZvIGZ1bmN0aW9uLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc4MC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQ3ODE9c3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X2luZm8oc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc5My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3OTQ6ICogaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjIC0gcHJlcGFyZSBwZiYjMzk7cyBkcGxsIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBmb3IgZTgyNWNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3OTUtICogZGV2aWNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDgwMy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4MDQ6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fZTgyNWMoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODA1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDgyOTpcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9SQ0xLX0lOUFVUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4MzAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4MzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODMzOlx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX1RYQ0xLKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4MzQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODQ3OiAqIGljZV9kcGxsX2luaXRfaW5mbyAtIHByZXBhcmUgcGYmIzM5O3MgZHBsbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NDgtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NTYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODU3OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTAyOlx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MDMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTE0Olx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhwZiwgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MTUtXHRcdGlmIChyZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00OTE2LVx0XHRcdGdvdG8gZGVpbml0X2luZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTE3Olx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhwZiwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDkxOC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00OTI3LVx0XHRwZi1cdTAwM2VkcGxscy5yY2xrLnBhcmVudF9pZHhbaV0gPSBkLVx1MDAzZWJhc2VfcmNsa19pZHggJiM0MzsgaTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ5Mjg6XHRyZXQgPSBpY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhwZiwgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00OTI5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00OTYwPXZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMDAtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDAxOiAqIGljZV9kcGxsX2luaXRfZTgyNSAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMDItICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMDktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDEwOnN0YXRpYyB2b2lkIGljZV9kcGxsX2luaXRfZTgyNShzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMTEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDM1Olx0ZXJyID0gaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzYtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTAzNy1cdFx0Z290byBlcnJfZXhpdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwMzg6XHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnR4YywgZmFsc2UsIERQTExfVFlQRV9HRU5FUklDKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzktXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA0MC1cdFx0Z290byBkZWluaXRfaW5mbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwNDE6XHRlcnIgPSBpY2VfZHBsbF9pbml0X3BpbnNfZTgyNShwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDQyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDU4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA1OTogKiBpY2VfZHBsbF9pbml0X2U4MTAgLSBpbml0aWFsaXplIHN1cHBvcnQgZm9yIGRwbGwgc3Vic3lzdGVtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDYwLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDY3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA2ODpzdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MTAoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDY5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDc0LVx0bXV0ZXhfaW5pdChcdTAwMjZkLVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA3NTpcdGVyciA9IGljZV9kcGxsX2luaXRfaW5mbyhwZiwgY2d1KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNzYtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA3Ny1cdFx0Z290byBlcnJfZXhpdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwNzg6XHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLmVlYywgY2d1LCBEUExMX1RZUEVfRUVDKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNzktXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA4MC1cdFx0Z290byBkZWluaXRfaW5mbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwODE6XHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcywgY2d1LCBEUExMX1RZUEVfUFBTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwODItXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA4My1cdFx0Z290byBkZWluaXRfZWVjO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA4NDpcdGVyciA9IGljZV9kcGxsX2luaXRfcGlucyhwZiwgY2d1KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwODUtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwODctXHRpZiAoY2d1KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDg4Olx0XHRlcnIgPSBpY2VfZHBsbF9pbml0X3dvcmtlcihwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDg5LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MTA5OnZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTItXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTExMzpcdFx0aWNlX2RwbGxfaW5pdF9lODI1KHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTQtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTExNS1cdGRlZmF1bHQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MTE2Olx0XHRpY2VfZHBsbF9pbml0X2U4MTAocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTExNy1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmg9MTcyPXN0cnVjdCBpY2VfZHBsbHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oLTIwMi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFRQXzE1ODhfQ0xPQ0spXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaDoyMDM6dm9pZCBpY2VfZHBsbF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oLTIwNC12b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaC0yMDUtI2Vsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oOjIwNjpzdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaC0yMDctc3RhdGljIGlubGluZSB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDcyMT1zdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzM2LVx0ICAgIGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfUEhZX1JDTEspKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDczNzpcdFx0aWNlX2RwbGxfaW5pdChwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzM4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGBpY2VfZHBsbF9pbml0YCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mga2lja2VkIG9mZiBmcm9tIGBpY2VfaW5pdF9mZWF0dXJlc2AuIEFuZCB3aGVyZSBkb2VzICp0aGF0KiBjb21lIGZyb20/IEFoLCB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBpY2VfcHJvYmVgIOKAkyBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgY29udGV4dC4gQnV0IGhvbGQgb24sIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhpcyBzdHJhaWdodC4gWWVzLCB0aGUgcGFyZW50IG9mIGBpY2VfaW5pdF9mZWF0dXJlc2AgaXMgZGVmaW5pdGVseSBgaWNlX3Byb2JlYC4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIHdlZWRzLCBJIHRoaW5rIGl0JiMzOTtzIHBydWRlbnQgdG8ganVzdCBxdWlja2x5IHZlcmlmeSB3aGVyZSBgaWNlX2luaXRfZmVhdHVyZXNgIGlzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2luaXRfZmVhdHVyZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3MTE9dm9pZCBpY2VfZGVpbml0X2RldihzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDcyMTpzdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ3MjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUwMjk9aW50IGljZV9sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUwNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MDY4Olx0aWNlX2luaXRfZmVhdHVyZXMocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTA2OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBIaWVyYXJjaHkqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgaWNlX2xvYWRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgaWNlX3Byb2JlYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLCB0aGUgZnVuZGFtZW50YWwgcmVsYXRpb25zaGlwIEkgbmVlZCB0byBncmFzcC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zOiB3aGF0JiMzOTtzIHRoZSBwdXJwb3NlIG9mIGBpY2VfcHJvYmVgIGFuZCBob3cgZG9lcyBgaWNlX2xvYWRgIGZpdCBpbnRvIHRoYXQgcHJvY2Vzcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgdGhlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jeS4gSXMgYGljZV9sb2FkYCBhIGNvcmUgY29tcG9uZW50IG9mIGBpY2VfcHJvYmVgLCBvciBpcyBpdCBhIHN1cHBvcnRpbmcgdXRpbGl0eSBjYWxsZWQgb3Bwb3J0dW5pc3RpY2FsbHk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyBhcnJhbmdlbWVudCwgYmFzZWQgb24gYmVzdCBwcmFjdGljZXMgd2l0aGluIHRoaXMgc3lzdGVtIG9yIHNpbWlsYXIgc3lzdGVtcyBJJiMzOTt2ZSB3b3JrZWQgb24/IE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gZm9ybSBwb3RlbnRpYWwgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBsaWtlIGVycm9yIGhhbmRsaW5nLCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcmF0aW9uYWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpY2VfbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jPTEyMzU9c3RhdGljIGludCBpY2VfZGV2bGlua19yZWluaXRfdXAoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEyNzEtXHQvKiBObyBuZWVkIHRvIHRha2UgZGV2bF9sb2NrLCBpdCYjMzk7cyBhbHJlYWR5IHRha2VuIGJ5IGRldmxpbmsgQVBJICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI3MjpcdGVyciA9IGljZV9sb2FkKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjczLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmg9MTA1NT12b2lkIGljZV9zdGFydF9zZXJ2aWNlX3Rhc2soc3RydWN0IGljZV9wZiAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oOjEwNTY6aW50IGljZV9sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC0xMDU3LXZvaWQgaWNlX3VubG9hZChzdHJ1Y3QgaWNlX3BmICpwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDE4MT1zdGF0aWMgdm9pZCBpY2VfbG9nX3BrZ19pbml0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9kZHBfc3RhdGUgc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDI1Ny0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQyNTg6ICogaWNlX2xvYWRfcGtnIC0gbG9hZC9yZWxvYWQgdGhlIEREUCBQYWNrYWdlIGZpbGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQyNTktICogQGZpcm13YXJlOiBmaXJtd2FyZSBzdHJ1Y3R1cmUgd2hlbiBmaXJtd2FyZSByZXF1ZXN0ZWQgb3IgTlVMTCBmb3IgcmVsb2FkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDI2NT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDI2NjppY2VfbG9hZF9wa2coY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00MjY3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00NTM1PXN0YXRpYyBpbnQgaWNlX2luaXRfZGRwX2NvbmZpZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDU1NS1cdC8qIERvd25sb2FkIGZpcm13YXJlIHRvIGRldmljZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDU1NjpcdGljZV9sb2FkX3BrZyhmaXJtd2FyZSwgcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDU1Ny1cdHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUwMTM9c3RhdGljIHZvaWQgaWNlX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDIzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTAyNDogKiBpY2VfbG9hZCAtIGxvYWQgcGYgYnkgaW5pdCBodyBhbmQgc3RhcnRpbmcgVlNJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDI1LSAqIEBwZjogcG9pbnRlciB0byB0aGUgcGYgaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDI4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTAyOTppbnQgaWNlX2xvYWQoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDMwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU1PWljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI2NS1cdGRldmxfbG9jayhwcml2X3RvX2RldmxpbmsocGYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyNjY6XHRlcnIgPSBpY2VfbG9hZChwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjY3LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz03NjM3PXN0YXRpYyB2b2lkIGljZV9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NjczLVx0XHRcdC8qIFJlbG9hZCBERFAgUGFja2FnZSBhZnRlciBDT1JFUi9HTE9CUiByZXNldCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NzY3NDpcdFx0XHRpY2VfbG9hZF9wa2coTlVMTCwgcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzY3NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEUExMIE5ldGxpbmsgSW50ZXJmYWNlJiMzOTtzIFZ1bG5lcmFiaWxpdHkgV2luZG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZS4gYGljZV9sb2FkYCBnZXRzIGNhbGxlZCBmcm9tIGBpY2VfcHJvYmVgLCB3aGljaCBpcyBmaW5lLiBCdXQgSSYjMzk7bSBub3RpY2luZyB0aGF0IGBpY2VfbG9hZGAgaXMgY2FsbGVkICphZnRlciogYGljZV9pbml0X2h3YC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGljZV9pbml0X2h3YCBpcyB0aGUgZ2F0ZWtlZXBlcjsgaXQgYmFpbHMgb3V0IGlmIGl0IGRvZXNuJiMzOTt0IGRldGVjdCB0aGUgcmVhbCBoYXJkd2FyZS4gSWYgYGljZV9pbml0X2h3YCBmYWlscywgYGljZV9sb2FkYCBuZXZlciBnZXRzIGNhbGxlZC4gQW5kIHRoYXQgbWVhbnMgYGljZV9kcGxsX2luaXRgIHdvbiYjMzk7dCBydW4uIENvbnNlcXVlbnRseSwgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgZm9yIHRoaXMgc3BlY2lmaWMgZGV2aWNlIG5ldmVyIGdldHMgcmVnaXN0ZXJlZC4gVGh1cywgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gKGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgKSBhcmUgdW5yZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rLgoKTm93LCBteSBtaW5kIGlzIHJhY2luZy4gSXMgdGhlcmUgYW55IHdheSBzeXprYWxsZXIgY291bGQgY2lyY3VtdmVudCBgaWNlX2luaXRfaHdgPyBEb2VzIGl0IGhhdmUgYSBtZWNoYW5pc20gdG8gYnlwYXNzIHRoaXMgaW5pdGlhbCBoYXJkd2FyZSBjaGVjaz8gTm9wZS4gU3l6a2FsbGVyJiMzOTtzIHN0cmVuZ3RoIGxpZXMgaW4gaXRzIGFiaWxpdHkgdG8gZnV6eiBhbmQgcHJvdmlkZSBpbnB1dCwgcGFydGljdWxhcmx5IFBDSSBtZW1vcnkgcmVhZHMsIGJ1dCBpdCBjYW4mIzM5O3QgZnVuZGFtZW50YWxseSBhbHRlciB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLiBJdCBjYW4gb25seSBmZWVkIHRoZSBiZWFzdC4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIHRoaXMuIElmIHN5emthbGxlciB0aHJvd3MgcmFuZG9tIHZhbHVlcyBhdCBQQ0kgbWVtb3J5IHJlYWRzLCBgaWNlX2luaXRfaHdgIHdpbGwgbGlrZWx5IGZhaWwuIEl0IGV4cGVjdHMgc3BlY2lmaWMgcmVnaXN0ZXIgc2VxdWVuY2VzIGFuZCB2YWx1ZXMsIGxpa2UgYEdMR0VOX1JTVEFUX0RFVlNUQVRFX01gIHRvIGJlIDAgYW5kIHNwZWNpZmljIGJpdHMgaW4gYEdMTlZNX1VMRGAgc2V0LiBUaGUgcHJvYmFiaWxpdHkgb2Ygc3l6a2FsbGVyIHN0dW1ibGluZyB1cG9uIHRoZSBleGFjdCByZWdpc3RlciByZWFkIHNlcXVlbmNlIG5lZWRlZCB0byBwYXNzIGBpY2VfY2hlY2tfcmVzZXRgIGFuZCBvdGhlciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzdGVwcyBpcyBwcmFjdGljYWxseSB6ZXJvLiBJdCYjMzk7cyBhIG5lZWRsZSBpbiBhIGhheXN0YWNrLCBhIGNvbWJpbmF0b3JpYWwgZXhwbG9zaW9uIG9mIGltcHJvYmFibGUgdmFsdWVzLgoKV2FpdC4uLiBkb2VzIGBzeXpfcGNpYCBldmVuIHN1cHBvcnQgZHluYW1pYyByZXNwb25zZXMgdG8gbWVtb3J5IHJlYWRzPyBVc3VhbGx5LCBpdCYjMzk7cyBqdXN0IGEgc2hhcmVkIG1lbW9yeSByZWdpb24gbWFwcGluZywgc28gYW55IHJlYWRzIHdpbGwgcmV0dXJuIHdoYXRldmVyIGlzIHByZS1wb3B1bGF0ZWQgaW4gdGhhdCBtZW1vcnkuIElmIGl0JiMzOTtzIGEgc3RhdGljIHJlZ2lvbiwgYHJkMzJgIHdvdWxkIGNvbnNpc3RlbnRseSByZXR1cm4gdGhlIHNhbWUgdmFsdWUuCgpMZXQmIzM5O3Mgem9vbSBpbiBvbiBgaWNlX2NoZWNrX3Jlc2V0YC4gSSBzZWUgYSBsb29wIGxpa2UgdGhpczoKCmBgYGMKCWZvciAoY250ID0gMDsgY250ICZsdDsgZ3JzdF90aW1lb3V0OyBjbnQmIzQzOyYjNDM7KSB7CgkJbWRlbGF5KDEwMCk7CgkJcmVnID0gcmQzMihodywgR0xHRU5fUlNUQVQpOwoJCWlmICghKHJlZyAmYW1wOyBHTEdFTl9SU1RBVF9ERVZTVEFURV9NKSkKCQkJYnJlYWs7Cgl9CmBgYAoKSWYgdGhlIG1lbW9yeSBtYXBwZWQgYnkgc3l6a2FsbGVyIGhhcHBlbnMgdG8gaGF2ZSBgR0xHRU5fUlNUQVRfREVWU1RBVEVfTWAgY2xlYXJlZCwgdGhlIGxvb3AgYnJlYWtzIGVhcmx5LiBUaGVuOgoKYGBgYwoJZm9yIChjbnQgPSAwOyBjbnQgJmx0OyBJQ0VfUEZfUkVTRVRfV0FJVF9DT1VOVDsgY250JiM0MzsmIzQzOykgewoJCXJlZyA9IHJkMzIoaHcsIEdMTlZNX1VMRCkgJmFtcDsgdWxkX21hc2s7CgkJaWYgKHJlZyA9PSB1bGRfbWFzaykgewoJCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgJiMzNDtHbG9iYWwgcmVzZXQgcHJvY2Vzc2VzIGRvbmUuICVkXG4mIzM0OywgY250KTsKCQkJYnJlYWs7CgkJfQoJCW1kZWxheSgxMCk7Cgl9CmBgYAoKSWYgdGhlIG1lbW9yeSYjMzk7cyBiaXRzIGZvciBgdWxkX21hc2tgIGhhcHBlbiB0byBiZSBzZXQgY29ycmVjdGx5LCBhZ2FpbiwgaXQgd2lsbCBicmVhay4gSXQmIzM5O3MgaW1wcm9iYWJsZSwgYnV0IG5vdCBpbXBvc3NpYmxlLgoKVGhlIGNhdmVhdCBoZXJlIGlzIHRoYXQgYEdMR0VOX1JTVEFUYCBhbmQgYEdMTlZNX1VMRGAgYXJlIGF0IGRpZmZlcmVudCBvZmZzZXRzLiBJZiBzeXprYWxsZXIgbWFwcyBhIG1lbW9yeSByZWdpb24gYW5kIGxvYWRzIGl0IHdpdGggcmFuZG9tIGJ5dGVzLCBpdCBtaWdodCAqYWNjaWRlbnRhbGx5KiBoYXZlIHRoZSByaWdodCBiaXRzIGluIHRoZSByaWdodCBwbGFjZXMuIEl0IGlzIHN0aWxsIGEgdmVyeSBpbXByb2JhYmxlIHBhdGguIEJ1dCwgZXZlbiBpZiBpdCBoYXBwZW5zLCB0aGVyZSBhcmUgbWFueSBvdGhlciBjaGVja3MgaW4gYGljZV9pbml0X2h3YC4gRm9yIGluc3RhbmNlLCBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgIHJlcXVpcmVzIHNldHRpbmcgdXAgcmluZ3MgYW5kIHdhaXRpbmcgZm9yIGhhcmR3YXJlIHRvIHVwZGF0ZSBoZWFkL3RhaWwgcG9pbnRlcnMgb3Igc3RhdHVzIGJpdHMuIExldCBtZSBnbyBjaGVjayBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpY2VfY3JlYXRlX2FsbF9jdHJscSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaD04Nj1pbnQgaWNlX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9yZXNldF9yZXEgcmVxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODc6aW50IGljZV9jcmVhdGVfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtODgtaW50IGljZV9pbml0X2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jPTc4Nj1zdGF0aWMgdm9pZCBpY2VfaW5pdF9jdHJscV9sb2NrcyhzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy04MDctICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmM6ODA4OmludCBpY2VfY3JlYXRlX2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy04MDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ4MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDg6XHRpbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpXG4gODA5Olx0e1xuIDgxMDpcdFx0aWNlX2luaXRfY3RybHFfbG9ja3MoXHUwMDI2aHctXHUwMDNlYWRtaW5xKTtcbiA4MTE6XHRcdGlmIChpY2VfaXNfc2JxX3N1cHBvcnRlZChodykpXG4gODEyOlx0XHRcdGljZV9pbml0X2N0cmxxX2xvY2tzKFx1MDAyNmh3LVx1MDAzZXNicSk7XG4gODEzOlx0XHRpY2VfaW5pdF9jdHJscV9sb2NrcyhcdTAwMjZody1cdTAwM2VtYWlsYm94cSk7XG4gODE0Olx0XG4gODE1Olx0XHRyZXR1cm4gaWNlX2luaXRfYWxsX2N0cmxxKGh3KTtcbiA4MTY6XHR9XG4gODE3Olx0XG4gODE4Olx0LyoqXG4gODE5Olx0ICogaWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MgLSBEZXN0cm95IGxvY2tzIGZvciBhIGNvbnRyb2wgcXVldWVcbiA4MjA6XHQgKiBAY3E6IHBvaW50ZXIgdG8gdGhlIGNvbnRyb2wgcXVldWVcbiA4MjE6XHQgKlxuIDgyMjpcdCAqIERlc3Ryb3lzIHRoZSBzZW5kIGFuZCByZWNlaXZlIHF1ZXVlIGxvY2tzIGZvciBhIGdpdmVuIGNvbnRyb2wgcXVldWUuXG4gODIzOlx0ICovXG4gODI0Olx0c3RhdGljIHZvaWQgaWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3Moc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSlcbiA4MjU6XHR7XG4gODI2Olx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmNxLVx1MDAzZXNxX2xvY2spO1xuIDgyNzpcdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZjcS1cdTAwM2VycV9sb2NrKTtcbiA4Mjg6XHR9XG4gODI5Olx0XG4gODMwOlx0LyoqXG4gODMxOlx0ICogaWNlX2Rlc3Ryb3lfYWxsX2N0cmxxIC0gZXhpdCByb3V0aW5lIGZvciBhbGwgY29udHJvbCBxdWV1ZXNcbiA4MzI6XHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuIDgzMzpcdCAqXG4gODM0Olx0ICogVGhpcyBmdW5jdGlvbiBzaHV0cyBkb3duIGFsbCB0aGUgY29udHJvbCBxdWV1ZXMgYW5kIHRoZW4gZGVzdHJveXMgdGhlXG4gODM1Olx0ICogY29udHJvbCBxdWV1ZSBsb2Nrcy4gSXQgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGR1cmluZyBkcml2ZXIgdW5sb2FkLiBUaGVcbiA4MzY6XHQgKiBkcml2ZXIgc2hvdWxkIGNhbGwgaWNlX3NodXRkb3duX2FsbF9jdHJscSBpZiBpdCBuZWVkcyB0byBzaHV0IGRvd24gYW5kXG4gODM3Olx0ICogcmVpbml0aWFsaXplIGNvbnRyb2wgcXVldWVzLCBzdWNoIGFzIGluIHJlc3BvbnNlIHRvIGEgcmVzZXQgZXZlbnQuXG4gODM4Olx0ICovXG4gODM5Olx0dm9pZCBpY2VfZGVzdHJveV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpXG4gODQwOlx0e1xuIDg0MTpcdFx0Lyogc2h1dCBkb3duIGFsbCB0aGUgY29udHJvbCBxdWV1ZXMgZmlyc3QgKi9cbiA4NDI6XHRcdGljZV9zaHV0ZG93bl9hbGxfY3RybHEoaHcsIHRydWUpO1xuIDg0MzpcdFxuIDg0NDpcdFx0aWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MoXHUwMDI2aHctXHUwMDNlYWRtaW5xKTtcbiA4NDU6XHRcdGlmIChpY2VfaXNfc2JxX3N1cHBvcnRlZChodykpXG4gODQ2Olx0XHRcdGljZV9kZXN0cm95X2N0cmxxX2xvY2tzKFx1MDAyNmh3LVx1MDAzZXNicSk7XG4gODQ3Olx0XHRpY2VfZGVzdHJveV9jdHJscV9sb2NrcyhcdTAwMjZody1cdTAwM2VtYWlsYm94cSk7XG4gODQ4Olx0fVxuIDg0OTpcdFxuIDg1MDpcdC8qKlxuIDg1MTpcdCAqIGljZV9jbGVhbl9zcSAtIGNsZWFucyBzZW5kIHNpZGUgb2YgYSBjb250cm9sIHF1ZXVlXG4gODUyOlx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiA4NTM6XHQgKiBAY3E6IHBvaW50ZXIgdG8gdGhlIHNwZWNpZmljIENvbnRyb2wgcXVldWVcbiA4NTQ6XHQgKlxuIDg1NTpcdCAqIHJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIGRlc2NcbiA4NTY6XHQgKi9cbiA4NTc6XHRzdGF0aWMgdTE2IGljZV9jbGVhbl9zcShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzMjIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gSWNlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHRoZSBkZWJ1Z2dpbmcgdHJhY2UgaGFzIGhpdCBgaWNlX2luaXRfYWxsX2N0cmxxYC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYXMgdGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIOKAkyBsaWtlbHkgdGhlIG1hc3RlciBpbml0aWFsaXplciBmb3IgdGhlICpJQ0UqIChJIGFzc3VtZSBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBzdWJzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGgpIGNvbnRyb2xsZXIgcXVldWVzLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBtYWluIHRocmVhZCBvciB0YXNrIHRoYXQgbWFuYWdlcyB0aGUgY29udHJvbCBmbG93IGlzIGluaXRpYWxpemVkLCBvciB3aGVyZSB2YXJpb3VzIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgYnJvdWdodCBvbmxpbmUsIGFuZCB0aGUgY29udHJvbGxlciYjMzk7cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZSBiZWNhdXNlIGRlcGVuZGluZyBvbiB3aGF0IG9jY3VycywgdGhlIHByb2JsZW0gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nIG1heSBsaWUgaW4gdGhlIGljZSBjb25maWd1cmF0aW9uLCBzeXN0ZW0gcmVzZXQsIG9yIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIFdoYXQgZm9sbG93cyB0aGlzIGZ1bmN0aW9uIGNhbGwgd2lsbCB0ZWxsIG1lIGhvdyBjcml0aWNhbCB0aGlzIHN0ZXAgaXMgdG8gdGhlIHJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGF0IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpY2VfaW5pdF9hbGxfY3RybHEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg9ODc9aW50IGljZV9jcmVhdGVfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODg6aW50IGljZV9pbml0X2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTg5LXZvaWQgaWNlX3NodXRkb3duX2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCB1bmxvYWRpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYz03MjE9dm9pZCBpY2Vfc2h1dGRvd25fYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIHVubG9hZGluZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmMtNzQ0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jOjc0NTppbnQgaWNlX2luaXRfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTc0Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODQ0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0NTpcdGludCBpY2VfaW5pdF9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpXG4gNzQ2Olx0e1xuIDc0NzpcdFx0dTMyIHJldHJ5ID0gMDtcbiA3NDg6XHRcdGludCBzdGF0dXM7XG4gNzQ5Olx0XG4gNzUwOlx0XHQvKiBJbml0IEZXIGFkbWluIHF1ZXVlICovXG4gNzUxOlx0XHRkbyB7XG4gNzUyOlx0XHRcdHN0YXR1cyA9IGljZV9pbml0X2N0cmxxKGh3LCBJQ0VfQ1RMX1FfQURNSU4pO1xuIDc1MzpcdFx0XHRpZiAoc3RhdHVzKVxuIDc1NDpcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gNzU1Olx0XG4gNzU2Olx0XHRcdHN0YXR1cyA9IGljZV9pbml0X2NoZWNrX2FkbWlucShodyk7XG4gNzU3Olx0XHRcdGlmIChzdGF0dXMgIT0gLUVJTylcbiA3NTg6XHRcdFx0XHRicmVhaztcbiA3NTk6XHRcbiA3NjA6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0FRX01TRywgXCYjMzQ7UmV0cnkgQWRtaW4gUXVldWUgaW5pdCBkdWUgdG8gRlcgY3JpdGljYWwgZXJyb3JcXG5cJiMzNDspO1xuIDc2MTpcdFx0XHRpY2Vfc2h1dGRvd25fY3RybHEoaHcsIElDRV9DVExfUV9BRE1JTiwgdHJ1ZSk7XG4gNzYyOlx0XHRcdG1zbGVlcChJQ0VfQ1RMX1FfQURNSU5fSU5JVF9NU0VDKTtcbiA3NjM6XHRcdH0gd2hpbGUgKHJldHJ5JiM0MzsmIzQzOyBcdTAwM2MgSUNFX0NUTF9RX0FETUlOX0lOSVRfVElNRU9VVCk7XG4gNzY0Olx0XG4gNzY1Olx0XHRpZiAoc3RhdHVzKVxuIDc2NjpcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIDc2NzpcdFx0Lyogc2lkZWJhbmQgY29udHJvbCBxdWV1ZSAoU0JRKSBpbnRlcmZhY2UgaXMgbm90IHN1cHBvcnRlZCBvbiBzb21lXG4gNzY4Olx0XHQgKiBkZXZpY2VzLiBJbml0aWFsaXplIGlmIHN1cHBvcnRlZCwgZWxzZSBmYWxsYmFjayB0byB0aGUgYWRtaW4gcXVldWVcbiA3Njk6XHRcdCAqIGludGVyZmFjZVxuIDc3MDpcdFx0ICovXG4gNzcxOlx0XHRpZiAoaWNlX2lzX3NicV9zdXBwb3J0ZWQoaHcpKSB7XG4gNzcyOlx0XHRcdHN0YXR1cyA9IGljZV9pbml0X2N0cmxxKGh3LCBJQ0VfQ1RMX1FfU0IpO1xuIDc3MzpcdFx0XHRpZiAoc3RhdHVzKVxuIDc3NDpcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gNzc1Olx0XHR9XG4gNzc2Olx0XHQvKiBJbml0IE1haWxib3ggcXVldWUgKi9cbiA3Nzc6XHRcdHJldHVybiBpY2VfaW5pdF9jdHJscShodywgSUNFX0NUTF9RX01BSUxCT1gpO1xuIDc3ODpcdH1cbiA3Nzk6XHRcbiA3ODA6XHQvKipcbiA3ODE6XHQgKiBpY2VfaW5pdF9jdHJscV9sb2NrcyAtIEluaXRpYWxpemUgbG9ja3MgZm9yIGEgY29udHJvbCBxdWV1ZVxuIDc4MjpcdCAqIEBjcTogcG9pbnRlciB0byB0aGUgY29udHJvbCBxdWV1ZVxuIDc4MzpcdCAqXG4gNzg0Olx0ICogSW5pdGlhbGl6ZXMgdGhlIHNlbmQgYW5kIHJlY2VpdmUgcXVldWUgbG9ja3MgZm9yIGEgZ2l2ZW4gY29udHJvbCBxdWV1ZS5cbiA3ODU6XHQgKi9cbiA3ODY6XHRzdGF0aWMgdm9pZCBpY2VfaW5pdF9jdHJscV9sb2NrcyhzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxKVxuIDc4NzpcdHtcbiA3ODg6XHRcdG11dGV4X2luaXQoXHUwMDI2Y3EtXHUwMDNlc3FfbG9jayk7XG4gNzg5Olx0XHRtdXRleF9pbml0KFx1MDAyNmNxLVx1MDAzZXJxX2xvY2spO1xuIDc5MDpcdH1cbiA3OTE6XHRcbiA3OTI6XHQvKipcbiA3OTM6XHQgKiBpY2VfY3JlYXRlX2FsbF9jdHJscSAtIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYWxsIGNvbnRyb2wgcXVldWVzXG4gNzk0Olx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBpY2VfaW5pdF9jdHJscWAqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYGljZV9pbml0X2N0cmxxYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgaW1tZWRpYXRlbHkgYmVnaW4gcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3RzLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgd2l0aGluIHRoZSBgaWNlYCBmcmFtZXdvcmssIGxpa2VseSBpbml0aWFsaXphdGlvbiBvciBjb250cm9sIGZ1bmN0aW9ucy4gVGhlIGBpbml0YCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIHRoZSBzZXR1cCBwaGFzZSBmb3IgYSBwYXJ0aWN1bGFyIG1vZHVsZSBvciBjb21wb25lbnQsIGFuZCBgY3RybHFgPyBUaGF0IGNvdWxkIGJlIGEgY3VzdG9tIG5hbWUgZm9yIGEgc3BlY2lmaWMgY29udHJvbCBncm91cCBvciBtYXliZSBldmVuIHNvbWUgc29ydCBvZiBRdWljayBjb21tYW5kIGluaXRpYXRpb24uIEkgbmVlZCB0byBrbm93IHdoZXJlIEkmIzM5O20gZ29pbmcgdG8gbG9vayB0byB1bnBhY2sgdGhpcy4gSXMgdGhpcyBhIHN5c3RlbSBzZXJ2aWNlPyBPciBpcyBpdCBwYXJ0IG9mIGEgdXNlci1sYW5kIHByb2dyYW0/IE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggbGlicmFyaWVzIGFyZSBsaW5rZWQsIHdoaWNoIHN5c3RlbSBjb21wb25lbnRzIGFyZSBpbiBwbGF5IGFuZCB3aGF0IHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBjb21wb25lbnQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQgaWNlX2luaXRfY3RybHEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYz01NzA9c3RhdGljIGludCBpY2VfaW5pdF9jaGVja19hZG1pbnEoc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTYwNS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYzo2MDY6c3RhdGljIGludCBpY2VfaW5pdF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfY3RsX3EgcV90eXBlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTYwNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDM5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwNjpcdHN0YXRpYyBpbnQgaWNlX2luaXRfY3RybHEoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2N0bF9xIHFfdHlwZSlcbiA2MDc6XHR7XG4gNjA4Olx0XHRzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxO1xuIDYwOTpcdFx0aW50IHJldF9jb2RlO1xuIDYxMDpcdFxuIDYxMTpcdFx0c3dpdGNoIChxX3R5cGUpIHtcbiA2MTI6XHRcdGNhc2UgSUNFX0NUTF9RX0FETUlOOlxuIDYxMzpcdFx0XHRpY2VfYWRtaW5xX2luaXRfcmVncyhodyk7XG4gNjE0Olx0XHRcdGNxID0gXHUwMDI2aHctXHUwMDNlYWRtaW5xO1xuIDYxNTpcdFx0XHRicmVhaztcbiA2MTY6XHRcdGNhc2UgSUNFX0NUTF9RX1NCOlxuIDYxNzpcdFx0XHRpY2Vfc2JfaW5pdF9yZWdzKGh3KTtcbiA2MTg6XHRcdFx0Y3EgPSBcdTAwMjZody1cdTAwM2VzYnE7XG4gNjE5Olx0XHRcdGJyZWFrO1xuIDYyMDpcdFx0Y2FzZSBJQ0VfQ1RMX1FfTUFJTEJPWDpcbiA2MjE6XHRcdFx0aWNlX21haWxib3hfaW5pdF9yZWdzKGh3KTtcbiA2MjI6XHRcdFx0Y3EgPSBcdTAwMjZody1cdTAwM2VtYWlsYm94cTtcbiA2MjM6XHRcdFx0YnJlYWs7XG4gNjI0Olx0XHRkZWZhdWx0OlxuIDYyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2MjY6XHRcdH1cbiA2Mjc6XHRcdGNxLVx1MDAzZXF0eXBlID0gcV90eXBlO1xuIDYyODpcdFxuIDYyOTpcdFx0LyogdmVyaWZ5IGlucHV0IGZvciB2YWxpZCBjb25maWd1cmF0aW9uICovXG4gNjMwOlx0XHRpZiAoIWNxLVx1MDAzZW51bV9ycV9lbnRyaWVzIHx8ICFjcS1cdTAwM2VudW1fc3FfZW50cmllcyB8fFxuIDYzMTpcdFx0ICAgICFjcS1cdTAwM2VycV9idWZfc2l6ZSB8fCAhY3EtXHUwMDNlc3FfYnVmX3NpemUpIHtcbiA2MzI6XHRcdFx0cmV0dXJuIC1FSU87XG4gNjMzOlx0XHR9XG4gNjM0Olx0XG4gNjM1Olx0XHQvKiBhbGxvY2F0ZSB0aGUgQVRRICovXG4gNjM2Olx0XHRyZXRfY29kZSA9IGljZV9pbml0X3NxKGh3LCBjcSk7XG4gNjM3Olx0XHRpZiAocmV0X2NvZGUpXG4gNjM4Olx0XHRcdHJldHVybiByZXRfY29kZTtcbiA2Mzk6XHRcbiA2NDA6XHRcdC8qIGFsbG9jYXRlIHRoZSBBUlEgKi9cbiA2NDE6XHRcdHJldF9jb2RlID0gaWNlX2luaXRfcnEoaHcsIGNxKTtcbiA2NDI6XHRcdGlmIChyZXRfY29kZSlcbiA2NDM6XHRcdFx0Z290byBpbml0X2N0cmxxX2ZyZWVfc3E7XG4gNjQ0Olx0XG4gNjQ1Olx0XHQvKiBzdWNjZXNzISAqL1xuIDY0NjpcdFx0cmV0dXJuIDA7XG4gNjQ3Olx0XG4gNjQ4Olx0aW5pdF9jdHJscV9mcmVlX3NxOlxuIDY0OTpcdFx0aWNlX3NodXRkb3duX3NxKGh3LCBjcSk7XG4gNjUwOlx0XHRyZXR1cm4gcmV0X2NvZGU7XG4gNjUxOlx0fVxuIDY1MjpcdFxuIDY1MzpcdC8qKlxuIDY1NDpcdCAqIGljZV9pc19zYnFfc3VwcG9ydGVkIC0gaXMgdGhlIHNpZGViYW5kIHF1ZXVlIHN1cHBvcnRlZFxuIDY1NTpcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzgxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgYGljZV9pbml0X2NoZWNrX2FkbWlucWAqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGljZV9pbml0X2NoZWNrX2FkbWlucWAgZnVuY3Rpb24uIFdoYXQmIzM5O3MgaXQgZG9pbmc/IEJhc2VkIG9uIHRoZSBuYW1lLCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGNvZGUgYmxvY2sgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3IgdmVyaWZpY2F0aW9uIHJlbGF0ZWQgdG8gYW4gYWRtaW5pc3RyYXRpdmUgcXVldWUgb3IgcG9zc2libHkgYSBkYXRhIHN0cnVjdHVyZSBpbnZvbHZlZCBpbiBhZG1pbiB0YXNrcy4gVGhlICYjMzQ7aWNlJiMzNDsgcHJlZml4IHByb2JhYmx5IGluZGljYXRlcyB0aGlzIGlzIHBhcnQgb2YgYSBsYXJnZXIgY29tcG9uZW50IG9yIHN1YnN5c3RlbSwgcGVyaGFwcyByZWxhdGVkIHRvIHRoZSBJbnRlcm5ldCBDb250cm9sIEVuZ2luZSAoSUNFKSwgd2hhdGV2ZXIgdGhhdCBmcmFtZXdvcmsgbWF5IGJlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIG15IHByZWxpbWluYXJ5IGFzc3VtcHRpb25zIGFib3V0IHRoZSBjb250ZXh0IGFyZSBhY2N1cmF0ZS4gSSB3aWxsIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3MDpcdHN0YXRpYyBpbnQgaWNlX2luaXRfY2hlY2tfYWRtaW5xKHN0cnVjdCBpY2VfaHcgKmh3KVxuIDU3MTpcdHtcbiA1NzI6XHRcdHN0cnVjdCBpY2VfY3RsX3FfaW5mbyAqY3EgPSBcdTAwMjZody1cdTAwM2VhZG1pbnE7XG4gNTczOlx0XHRpbnQgc3RhdHVzO1xuIDU3NDpcdFxuIDU3NTpcdFx0c3RhdHVzID0gaWNlX2FxX2dldF9md192ZXIoaHcsIE5VTEwpO1xuIDU3NjpcdFx0aWYgKHN0YXR1cylcbiA1Nzc6XHRcdFx0Z290byBpbml0X2N0cmxxX2ZyZWVfcnE7XG4gNTc4Olx0XG4gNTc5Olx0XHRpZiAoIWljZV9hcV92ZXJfY2hlY2soaHcpKSB7XG4gNTgwOlx0XHRcdHN0YXR1cyA9IC1FSU87XG4gNTgxOlx0XHRcdGdvdG8gaW5pdF9jdHJscV9mcmVlX3JxO1xuIDU4MjpcdFx0fVxuIDU4MzpcdFxuIDU4NDpcdFx0cmV0dXJuIDA7XG4gNTg1Olx0XG4gNTg2Olx0aW5pdF9jdHJscV9mcmVlX3JxOlxuIDU4NzpcdFx0aWNlX3NodXRkb3duX3JxKGh3LCBjcSk7XG4gNTg4Olx0XHRpY2Vfc2h1dGRvd25fc3EoaHcsIGNxKTtcbiA1ODk6XHRcdHJldHVybiBzdGF0dXM7XG4gNTkwOlx0fVxuIDU5MTpcdFxuIDU5MjpcdC8qKlxuIDU5MzpcdCAqIGljZV9pbml0X2N0cmxxIC0gbWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBhbnkgY29udHJvbCBRdWV1ZVxuIDU5NDpcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG4gNTk1Olx0ICogQHFfdHlwZTogc3BlY2lmaWMgQ29udHJvbCBxdWV1ZSB0eXBlXG4gNTk2Olx0ICpcbiA1OTc6XHQgKiBQcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBkcml2ZXIgKk1VU1QqIHNldCB0aGUgZm9sbG93aW5nIGZpZWxkc1xuIDU5ODpcdCAqIGluIHRoZSBjcS1cdTAwM2VzdHJ1Y3R1cmU6XG4gNTk5Olx0ICogICAgIC0gY3EtXHUwMDNlbnVtX3NxX2VudHJpZXNcbiA2MDA6XHQgKiAgICAgLSBjcS1cdTAwM2VudW1fcnFfZW50cmllc1xuIDYwMTpcdCAqICAgICAtIGNxLVx1MDAzZXJxX2J1Zl9zaXplXG4gNjAyOlx0ICogICAgIC0gY3EtXHUwMDNlc3FfYnVmX3NpemVcbiA2MDM6XHQgKlxuIDYwNDpcdCAqIE5PVEU6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaW5pdGlhbGl6ZSB0aGUgY29udHJvbHEgbG9ja3NcbiA2MDU6XHQgKi9cbiA2MDY6XHRzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9jdGxfcSBxX3R5cGUpXG4gNjA3Olx0e1xuIDYwODpcdFx0c3RydWN0IGljZV9jdGxfcV9pbmZvICpjcTtcbiA2MDk6XHRcdGludCByZXRfY29kZTtcbiA2MTA6XHRcbiA2MTE6XHRcdHN3aXRjaCAocV90eXBlKSB7XG4gNjEyOlx0XHRjYXNlIElDRV9DVExfUV9BRE1JTjpcbiA2MTM6XHRcdFx0aWNlX2FkbWlucV9pbml0X3JlZ3MoaHcpO1xuIDYxNDpcdFx0XHRjcSA9IFx1MDAyNmh3LVx1MDAzZWFkbWlucTtcbiA2MTU6XHRcdFx0YnJlYWs7XG4gNjE2Olx0XHRjYXNlIElDRV9DVExfUV9TQjpcbiA2MTc6XHRcdFx0aWNlX3NiX2luaXRfcmVncyhodyk7XG4gNjE4Olx0XHRcdGNxID0gXHUwMDI2aHctXHUwMDNlc2JxO1xuIDYxOTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3NjAKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogODU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhpbmtpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgY29kZSBpcyAqZGVmaW5pdGVseSogdW5yZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSB3aG9sZSB0aGluZyBoaW5nZXMgb24gYSBzdWNjZXNzZnVsIHByb2JlIG9mIHRoZSBJbnRlbCBFODAwIHNlcmllcyBQQ0llIG5ldHdvcmsgY2FyZCwgYW5kIHRoYXQgcHJvYmUgcmVsaWVzIG9uIGEgZnVuY3Rpb25pbmcgZmlybXdhcmUgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBBZG1pbiBRdWV1ZS4KCkZpcnN0LCBJIHJlYWxpemVkIHRoYXQgYGljZV9hcV9nZXRfZndfdmVyYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIElmIHRoZXJlJiMzOTtzIG5vIGZpcm13YXJlLCBpdCB0aW1lcyBvdXQgb3IgZmFpbHMuIFRoaXMgbGVhZHMgdG8gYGljZV9pbml0X2NoZWNrX2FkbWlucWAgZmFpbGluZywgd2hpY2ggaW4gdHVybiBjYXVzZXMgYGljZV9pbml0X2FsbF9jdHJscWAgdG8gcmV0cnkgYW5kICphbHNvKiBmYWlsLiBDb25zZXF1ZW50bHksIGBpY2VfaW5pdF9od2AgYW5kIHVsdGltYXRlbHkgYGljZV9wcm9iZWAgZmFpbCwgcHJldmVudGluZyB0aGUgZHJpdmVyIGZyb20gbG9hZGluZyBhbmQgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgZnJvbSByZWdpc3RlcmluZy4gQmFzaWNhbGx5LCBpdCYjMzk7cyBhIGNhc2NhZGluZyBmYWlsdXJlLiBTaW5jZSB0aGUgcHJvYmUgZG9lc24mIzM5O3Qgd29yaywgdGhlIGRyaXZlciB3b24mIzM5O3QgbG9hZCBhbmQgbXkgRFBMTCBjb2RlIGlzIGluYWNjZXNzaWJsZS4KClRoZW4gSSBjb25zaWRlcmVkIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgbWFnaWNhbGx5IG1vY2sgdGhlIEFkbWluIFF1ZXVlLiBJIGtub3cgc3l6a2FsbGVyIHByZXR0eSB3ZWxsLCBhbmQgSSBrbm93IGl0ICpkb2VzbiYjMzk7dCogaGF2ZSBhIHNwZWNpZmljIG1vY2sgZm9yIEludGVsIElDRSBBZG1pbiBRdWV1ZSwgb25seSBnZW5lcmljIFBDSSBmdXp6aW5nLiBUaGF0IGFtb3VudHMgdG8gcmFuZG9tIG1lbW9yeSB3cml0ZXMgYW5kIGl0JiMzOTtzIGEgbG9uZyBzaG90LCBJIG1lYW4gYSBjb21wbGV0ZSBzaG90IGluIHRoZSBkYXJrLCBhbmQgaW1wb3NzaWJsZSB0byByZWxpYWJseSBzaW11bGF0ZSB0aGUgY29tcGxleCBBZG1pbiBRdWV1ZSBwcm90b2NvbCwgaW5jbHVkaW5nIHNldHRpbmcgdXAgZGVzY3JpcHRvcnMsIHVwZGF0aW5nIHBvaW50ZXJzIGFuZCB3cml0aW5nIGNvcnJlY3QgcmVzcG9uc2VzLiBObyB3YXkgdGhhdCBpcyBnb2luZyB0byB3b3JrLgoKTmV4dCBJIGRvdWJsZS1jaGVja2VkIGlmIHRoZXJlIHdhcyBzb21lIG90aGVyIGhpZGRlbiBwYXRoLiBJIGV4YW1pbmVkIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc3dfcGluc191cGRhdGVgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgLCBhbmQgYGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zYC4gSSB0cmFjZWQgdGhlaXIgY2FsbHMuIFRoZXkmIzM5O3JlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgaWNlX2RwbGwuY2AuIFRoZSBjYWxsYmFja3MgYXJlIGFsbCByZWdpc3RlcmVkIGFuZCBpbml0aWFsaXplZCB3aXRoaW4gYGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zYCBvciByZWxhdGVkIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYGljZV9kcGxsX2luaXRgLiBJIGxvb2tlZCBiYWNrIGFuZCBjb25maXJtZWQgdGhhdCBgaWNlX2RwbGxfaW5pdGAgaXMgKm9ubHkqIGNhbGxlZCBpZiBgaWNlX3Byb2JlYCBzdWNjZWVkZWQgLSBpLmUuLCB0aGUgZHJpdmVyIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhbmQgcHJvYmVkIHRoZSBoYXJkd2FyZS4gR2l2ZW4gbXkgZWFybGllciBjb25jbHVzaW9uLCBzaW5jZSB0aGUgZHJpdmVyIGNhbiYjMzk7dCBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCB0aGUgcmVhbCBoYXJkd2FyZSBvciBhIHZlcnkgc29waGlzdGljYXRlZCBlbXVsYXRvciAod2hpY2ggZG9lc24mIzM5O3QgZXhpc3QpLCB0aGlzIGNvZGUgaXMgYWxzbyB1bnJlYWNoYWJsZS4KCkZpbmFsbHksIEkgcmV2aWV3ZWQgdGhlIHByb21wdCYjMzk7cyBpbnN0cnVjdGlvbnM6IEkgbmVlZCB0byBmbGFnICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHJlYWNoIHRoZSBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggaXMgZm9yIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgKnJlcXVpcmVzKiBmaXJtd2FyZSBpbnRlcmFjdGlvbi4gVGhlcmUmIzM5O3Mgbm8gZWZmZWN0aXZlIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciB0aGlzOyBub3QgaW4gUUVNVSwgbm90IGluIHRoZSBrZXJuZWwuIFNvLCB0aGUgZHJpdmVyIGZhaWxzIHRvIHByb2JlLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gU2ltcGxlLiBUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHNob3VsZCBiZSBzZXQgdG8gKmZhbHNlKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBwaW4gbWFuYWdlbWVudCBsb2dpYyBpbiB0aGUgSW50ZWwgSUNFIChFODAwIHNlcmllcykgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgcmVxdWlyZXMgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGV2aWNlIGZpcm13YXJlIChlLmcuLCBBZG1pbiBRdWV1ZSkgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCBpbml0aWFsaXplLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgcGluIG1hbmFnZW1lbnQgbG9naWMgaW4gdGhlIEludGVsIElDRSAoRTgwMCBzZXJpZXMpIGV0aGVybmV0IGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIHJlcXVpcmVzIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW4gUXVldWUpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDowNS44ODIxMDY2MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzOTI1Nzc5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERQTEwgKERpZ2l0YWwgUGhhc2UgTG9ja2VkIExvb3ApIHBpbiBtYW5hZ2VtZW50IGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgKEU4MDAgc2VyaWVzKSBldGhlcm5ldCBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFuZCByZXF1aXJlcyBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHRoZSBkZXZpY2UgZmlybXdhcmUgKGUuZy4sIEFkbWluIFF1ZXVlKSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgYW5kIGluaXRpYWxpemUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDowNS44ODIxMTE4MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NzI5Mzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJhM2NmMWMzMjJkY2Q0ZDQyZWE5ZTM5ZTA0MjE1MWU1ZTA5ZDdlOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTQ6MTQ6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbmluZGV4IDMwYzNhNGRiN2Q2MTFjLi5mMjEzZDZlMTJjYzQ5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuQEAgLTUzOCw2ICs1MzgsMjkgQEAgaWNlX2RwbGxfcGluX2Rpc2FibGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxcbisgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxcbisgKlxcbisgKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXFxuKyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXFxuKyAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbidzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcXG4rICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxcbisgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cXHUwMDNlZHBsbHMubG9jayBpc1xcbisgKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXNcXG4rICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpXFxuK3tcXG4rXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcXG4rXFxuK1xcdHBlZXIgPSBjaGFuZ2VkLVxcdTAwM2VtdXhlZDtcXG4rXFx0aWYgKHBlZXItXFx1MDAzZXBpbilcXG4rXFx0XFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItXFx1MDAzZXBpbik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9waW5fc3RvcmVfc3RhdGUgLSB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBwaW4gaW4gU1cgYm9va2tlZXBpbmdcXG4gICogQHBpbjogcG9pbnRlciB0byBhIHBpblxcbkBAIC02NjksMTAgKzY5MiwxMCBAQCBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0cCA9IFxcdTAwMjZkLVxcdTAwM2VzbWFbSUNFX0RQTExfUElOX1NXXzJfSURYXTtcXG4gXFx0cC1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4gXFx0cC1cXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xcbitcXHRpZiAoZGF0YSBcXHUwMDI2IElDRV9TTUEyX0RJUl9FTilcXG4rXFx0XFx0cC1cXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcXG4gXFx0aWYgKChkYXRhIFxcdTAwMjYgSUNFX1NNQTJfSU5BQ1RJVkVfTUFTSykgPT0gSUNFX1NNQTJfSU5BQ1RJVkVfTUFTSylcXG4gXFx0XFx0cC1cXHUwMDNlYWN0aXZlID0gZmFsc2U7XFxuLVxcdGVsc2UgaWYgKGRhdGEgXFx1MDAyNiBJQ0VfU01BMl9ESVJfRU4pXFxuLVxcdFxcdHAtXFx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XFxuIFxcbiBcXHRwID0gXFx1MDAyNmQtXFx1MDAzZXVmbFtJQ0VfRFBMTF9QSU5fU1dfMV9JRFhdO1xcbiBcXHRpZiAoIShkYXRhIFxcdTAwMjYgKElDRV9TTUExX0RJUl9FTiB8IElDRV9TTUExX1RYX0VOKSkpXFxuQEAgLTExNjMsMzIgKzExODYsNiBAQCBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBleHRhY2ssIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxcbi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3RcXG4tICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSlcXG4tICpcXG4tICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxcbi0gKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbidzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xcbi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4ncyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXFxuLSAqIG5vdGlmaWNhdGlvbiBmb3IgdGhlIHBlZXIgcGluIHNvIHVzZXJzcGFjZSBjb25zdW1lcnMgbW9uaXRvcmluZyB0aGVcXG4tICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuXFxuLSAqXFxuLSAqIENvbnRleHQ6IENhbGxlZCBmcm9tIGRwbGxfcGluX29wcyBjYWxsYmFja3MgYWZ0ZXIgcGYtXFx1MDAzZWRwbGxzLmxvY2sgaXNcXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXFxuLSAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci5cXG4tICovXFxuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxcbi17XFxuLVxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XFxuLVxcbi1cXHRwZWVyID0gKGNoYW5nZWQgXFx1MDAzZT0gZC1cXHUwMDNlc21hIFxcdTAwMjZcXHUwMDI2IGNoYW5nZWQgXFx1MDAzYyBkLVxcdTAwM2VzbWEgKyBJQ0VfRFBMTF9QSU5fU1dfTlVNKSA/XFxuLVxcdFxcdFxcdTAwMjZkLVxcdTAwM2V1ZmxbY2hhbmdlZC1cXHUwMDNlaWR4XSA6IFxcdTAwMjZkLVxcdTAwM2VzbWFbY2hhbmdlZC1cXHUwMDNlaWR4XTtcXG4tXFx0aWYgKHBlZXItXFx1MDAzZXBpbilcXG4tXFx0XFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItXFx1MDAzZXBpbik7XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldCAtIHNldCBkaXJlY3Rpb24gb2YgU01BIHBpblxcbiAgKiBAcDogcG9pbnRlciB0byBhIHBpblxcbkBAIC0xMjE5LDE3ICsxMjE2LDIxIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcXG4gXFxuIFxcdHN3aXRjaCAocC1cXHUwMDNlaWR4KSB7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbi1cXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9NQVNLO1xcbi1cXHRcXHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpXFxuK1xcdFxcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkge1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcXG4gXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XFxuK1xcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxcbiBcXHRcXHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xcbiBcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9ESVJfRU47XFxuLVxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfihJQ0VfU01BMl9UWF9FTiB8IElDRV9TTUEyX1VGTDJfUlhfRElTKTtcXG4gXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtMTI1MCw3ICsxMjUxLDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxcbiBcXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxcbiBcXHQgKiBzdGlsbCBiZSB1c2luZyBpdC5cXG4gXFx0ICovXFxuLVxcdHBlZXIgPSBcXHUwMDI2ZC1cXHUwMDNldWZsW3AtXFx1MDAzZWlkeF07XFxuK1xcdHBlZXIgPSBwLVxcdTAwM2VtdXhlZDtcXG4gXFx0aWYgKHBlZXItXFx1MDAzZWFjdGl2ZSkge1xcbiBcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XFxuIFxcdFxcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcXG5AQCAtMTMxNSwxMCArMTMxNiwxMiBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdHN3aXRjaCAocC1cXHUwMDNlaWR4KSB7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbi1cXHRcXHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XFxuK1xcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0XFx0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XFxuIFxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX01BU0s7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0LyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOXFxuIFxcdFxcdFxcdCAqIHdoaWxlIERJUl9FTiBpcyBzZXQgd291bGQgYWxzbyBkZWFjdGl2YXRlXFxuIFxcdFxcdFxcdCAqIHRoZSBwYWlyZWQgU01BMSBvdXRwdXQuXFxuQEAgLTEzMjksMTggKzEzMzIsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTFfVFhfRU47XFxuIFxcdFxcdFxcdGVuYWJsZSA9IGZhbHNlO1xcbi1cXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dGFyZ2V0ID0gcC1cXHUwMDNlb3V0cHV0O1xcbiBcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuLVxcdFxcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFKSB7XFxuK1xcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0XFx0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0LyogU2tpcCBpZiBVLkZMMiBpcyBub3QgYWN0aXZlLCBzZXR0aW5nXFxuIFxcdFxcdFxcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXFxuIFxcdFxcdFxcdCAqIFNNQTIgaW5wdXQuXFxuQEAgLTEzNTIsNyArMTM1OCw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xcbiBcXHRcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHRhcmdldCA9IHAtXFx1MDAzZWlucHV0O1xcbkBAIC0xMzcwLDE3ICsxMzc3LDQ0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbi1cXHRpZiAoZW5hYmxlKVxcbitcXHRpZiAoZW5hYmxlKSB7XFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC1cXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XFxuLVxcdGVsc2VcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlbXV4ZWQtXFx1MDAzZWFjdGl2ZSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyID0gcC1cXHUwMDNlbXV4ZWQ7XFxuK1xcdFxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0O1xcbitcXHRcXHRcXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZTtcXG4rXFx0XFx0XFx0aW50IHBlZXJfcmV0O1xcbitcXG4rXFx0XFx0XFx0aWYgKHBlZXItXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XFxuK1xcdFxcdFxcdFxcdHBlZXJfdGFyZ2V0ID0gcGVlci1cXHUwMDNlb3V0cHV0O1xcbitcXHRcXHRcXHRcXHRwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdHBlZXJfdGFyZ2V0ID0gcGVlci1cXHUwMDNlaW5wdXQ7XFxuK1xcdFxcdFxcdFxcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCBwZWVyX3RhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBwZWVyX3R5cGUsIE5VTEwpO1xcbitcXHRcXHRcXHRpZiAoIXBlZXJfcmV0KVxcbitcXHRcXHRcXHRcXHRwZWVyX3JldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBlZXJfdHlwZSwgTlVMTCk7XFxuK1xcdFxcdFxcdGlmIChwZWVyX3JldClcXG4rXFx0XFx0XFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHN5bmMgcGVlciBwaW4gJXUgYWZ0ZXIgZW5hYmxpbmcgVS5GTCBwaW4gJXUsIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0IHBlZXJfdGFyZ2V0LVxcdTAwM2VpZHgsIHRhcmdldC1cXHUwMDNlaWR4LCBwZWVyX3JldCk7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4tXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0fVxcbiBcXG4gdW5sb2NrOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLCBwKTtcXG4rXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xNDY3LDYgKzE1MDEsNyBAQCBpY2VfZHBsbF9zbWFfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcXG4gXFx0c3RydWN0IGljZV9wZiAqcGYgPSBzbWEtXFx1MDAzZXBmO1xcbiBcXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XFxuK1xcdHU4IG9sZF9kYXRhID0gMDtcXG4gXFx0Ym9vbCBlbmFibGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0xNDc5LDI4ICsxNTE0LDEyMCBAQCBpY2VfZHBsbF9zbWFfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuLVxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4tXFx0XFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XFxuK1xcdFxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XFxuK1xcdFxcdFxcdGVuYWJsZSA9IGZhbHNlO1xcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRlbmFibGUgPSB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XFxuK1xcdFxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4rXFx0XFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVuYWJsZSA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4rXFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0c3dpdGNoIChzbWEtXFx1MDAzZWRpcmVjdGlvbikge1xcbitcXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcXG4gXFx0XFx0dGFyZ2V0ID0gc21hLVxcdTAwM2VpbnB1dDtcXG4gXFx0XFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ6XFxuIFxcdFxcdHRhcmdldCA9IHNtYS1cXHUwMDNlb3V0cHV0O1xcbiBcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChlbmFibGUpXFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0dTggZGF0YTtcXG4rXFxuK1xcdFxcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFxcdTAwMjZwZi1cXHUwMDNlaHcsIFxcdTAwMjZkYXRhKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdG9sZF9kYXRhID0gZGF0YTtcXG4rXFx0XFx0aWYgKHNtYS1cXHUwMDNlaWR4ID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcXG4rXFx0XFx0fSBlbHNlIGlmIChzbWEtXFx1MDAzZWlkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcXHUwMDI2cGYtXFx1MDAzZWh3LCBkYXRhKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbitcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsIGQtXFx1MDAzZWRwbGxfaWR4LCB0eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGV4dGFjayk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbi1cXHRpZiAoIXJldClcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbitcXHRcXHQvKiByZWZyZXNoIHRhcmdldCBzdGF0ZSBmaXJzdCBzbyBhIHBlZXItc2lkZSBlcnJvciBjYW5ub3QgbGVhdmUgaXQgc3RhbGUgKi9cXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuK1xcbitcXHRcXHRpZiAoc21hLVxcdTAwM2VtdXhlZC1cXHUwMDNlYWN0aXZlKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBzbWEtXFx1MDAzZW11eGVkO1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldDtcXG4rXFx0XFx0XFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGU7XFxuK1xcbitcXHRcXHRcXHRpZiAocGVlci1cXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcXG4rXFx0XFx0XFx0XFx0cGVlcl90YXJnZXQgPSBwZWVyLVxcdTAwM2VvdXRwdXQ7XFxuK1xcdFxcdFxcdFxcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0cGVlcl90YXJnZXQgPSBwZWVyLVxcdTAwM2VpbnB1dDtcXG4rXFx0XFx0XFx0XFx0cGVlcl90eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCBwZWVyX3RhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBkLVxcdTAwM2VkcGxsX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBwZWVyX3R5cGUsIGV4dGFjayk7XFxuK1xcdFxcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGVlcl90eXBlLCBleHRhY2spO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHR9XFxuK1xcdGdvdG8gdW5sb2NrO1xcbitcXG4rcmVzdG9yZV9zbWFfY3RybDpcXG4rXFx0e1xcbitcXHRcXHRpbnQgcmVzdG9yZV9yZXQ7XFxuK1xcbitcXHRcXHRyZXN0b3JlX3JldCA9IGljZV93cml0ZV9zbWFfY3RybChcXHUwMDI2cGYtXFx1MDAzZWh3LCBvbGRfZGF0YSk7XFxuK1xcdFxcdGlmICghcmVzdG9yZV9yZXQpXFxuK1xcdFxcdFxcdHJlc3RvcmVfcmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xcbitcXHRcXHRpZiAocmVzdG9yZV9yZXQpXFxuK1xcdFxcdFxcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLFxcbitcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byByZXN0b3JlIFNNQSBjb250cm9sIGFmdGVyIHBpbiBzdGF0ZSBlcnJvciAlZCwgcmVzdG9yZSBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCByZXQsIHJlc3RvcmVfcmV0KTtcXG4rXFx0fVxcbiBcXG4gdW5sb2NrOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLCBzbWEpO1xcbitcXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMTY5Nyw3ICsxODI0LDcgQEAgaWNlX2RwbGxfcGluX3NtYV9kaXJlY3Rpb25fc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLCBwKTtcXG4rXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC00NTE0LDYgKzQ2NDEsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRpZiAocGluLVxcdTAwM2VpbnB1dC1cXHUwMDNlcmVmX3N5bmMpXFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcmVmX3N5bmMgPSBwaW4tXFx1MDAzZWlucHV0LVxcdTAwM2VyZWZfc3luYyAtIHBpbl9hYnNfaWR4O1xcbiBcXHRcXHRwaW4tXFx1MDAzZW91dHB1dCA9IFxcdTAwMjZkLVxcdTAwM2VvdXRwdXRzW0lDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpXTtcXG4rXFx0XFx0cGluLVxcdTAwM2VtdXhlZCA9IFxcdTAwMjZkLVxcdTAwM2V1ZmxbaV07XFxuK1xcbiBcXHRcXHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXFx1MDAyNnBpbi1cXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XFxuIFxcdH1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElDRV9EUExMX1BJTl9TV19OVU07IGkrKykge1xcbkBAIC00NTIzLDcgKzQ2NTIsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRwaW4tXFx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID0gY2FwcztcXG4gXFx0XFx0cGluLVxcdTAwM2VwZiA9IHBmO1xcbiBcXHRcXHRwaW4tXFx1MDAzZXByb3AuYm9hcmRfbGFiZWwgPSBpY2VfZHBsbF9zd19waW5fdWZsW2ldO1xcbi1cXHRcXHRpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHtcXG4rXFx0XFx0c3dpdGNoIChpKSB7XFxuK1xcdFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XFxuIFxcdFxcdFxcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSk7XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZCA9XFxuQEAgLTQ1MzMsNyArNDY2Myw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZWlucHV0ID0gTlVMTDtcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VvdXRwdXQgPSBcXHUwMDI2ZC1cXHUwMDNlb3V0cHV0c1twaW5fYWJzX2lkeF07XFxuLVxcdFxcdH0gZWxzZSBpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcXG4gXFx0XFx0XFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfSU5QVVRfQUJTKGkpICtcXG4gXFx0XFx0XFx0XFx0ICAgICAgaW5wdXRfaWR4X29mZnNldDtcXG5AQCAtNDU0Niw3ICs0Njc3LDEyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPVxcbiBcXHRcXHRcXHRcXHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxcbiBcXHRcXHRcXHRcXHQgY2Fwcyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcXFwiSW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcXFxcblxcXCIsIGkpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbitcXHRcXHRwaW4tXFx1MDAzZW11eGVkID0gXFx1MDAyNmQtXFx1MDAzZXNtYVtpXTtcXG4gXFx0XFx0aWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KFxcdTAwMjZwaW4tXFx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuaW5kZXggMTAzYmEzZTQ5MDY4MmMuLmRjNmYwOTZiZjA2OWExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcXG5AQCAtNzYsNiArNzYsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxfcGluIHtcXG4gXFx0czMyIHBoYXNlX2FkanVzdDtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqaW5wdXQ7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm91dHB1dDtcXG4rXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqbXV4ZWQ7XFxuIFxcdGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjtcXG4gXFx0czY0IHBoYXNlX29mZnNldDtcXG4gXFx0dTggc3RhdHVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDowNi41NTAxNDM4MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODcyNDUzNDE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgcGluIG1hbmFnZW1lbnQgbG9naWMgaW4gdGhlIEludGVsIElDRSAoRTgwMCBzZXJpZXMpIGV0aGVybmV0IGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIHJlcXVpcmVzIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW4gUXVldWUpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmEzY2YxYzMyMmRjZDRkNDJlYTllMzllMDQyMTUxZTVlMDlkN2U5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE0OjE0OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuaW5kZXggMzBjM2E0ZGI3ZDYxMWMuLmYyMTNkNmUxMmNjNDljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5AQCAtNTM4LDYgKzUzOCwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXG4rICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSlcbisgKlxuKyAqIFNNQSBhbmQgVS5GTCBwaW5zIHNoYXJlIHBoeXNpY2FsIHNpZ25hbCBwYXRocyBpbiBwYWlycyAoU01BMS9VLkZMMSBhbmRcbisgKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbidzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuKyAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbidzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcbisgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlXG4rICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLVx1MDAzZWRwbGxzLmxvY2sgaXNcbisgKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXNcbisgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXG4rICovXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpXG4re1xuK1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcbitcbitcdHBlZXIgPSBjaGFuZ2VkLVx1MDAzZW11eGVkO1xuK1x0aWYgKHBlZXItXHUwMDNlcGluKVxuK1x0XHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci1cdTAwM2VwaW4pO1xuK31cbitcbiAvKipcbiAgKiBpY2VfZHBsbF9waW5fc3RvcmVfc3RhdGUgLSB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBwaW4gaW4gU1cgYm9va2tlZXBpbmdcbiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluXG5AQCAtNjY5LDEwICs2OTIsMTAgQEAgaWNlX2RwbGxfc3dfcGluc191cGRhdGUoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRwID0gXHUwMDI2ZC1cdTAwM2VzbWFbSUNFX0RQTExfUElOX1NXXzJfSURYXTtcbiBcdHAtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiBcdHAtXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xuK1x0aWYgKGRhdGEgXHUwMDI2IElDRV9TTUEyX0RJUl9FTilcbitcdFx0cC1cdTAwM2VkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUO1xuIFx0aWYgKChkYXRhIFx1MDAyNiBJQ0VfU01BMl9JTkFDVElWRV9NQVNLKSA9PSBJQ0VfU01BMl9JTkFDVElWRV9NQVNLKVxuIFx0XHRwLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuLVx0ZWxzZSBpZiAoZGF0YSBcdTAwMjYgSUNFX1NNQTJfRElSX0VOKVxuLVx0XHRwLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXG4gXHRwID0gXHUwMDI2ZC1cdTAwM2V1ZmxbSUNFX0RQTExfUElOX1NXXzFfSURYXTtcbiBcdGlmICghKGRhdGEgXHUwMDI2IChJQ0VfU01BMV9ESVJfRU4gfCBJQ0VfU01BMV9UWF9FTikpKVxuQEAgLTExNjMsMzIgKzExODYsNiBAQCBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdFx0ICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxuLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXG4tICpcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXG4tICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4ncyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuLXtcbi1cdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXG4tXHRwZWVyID0gKGNoYW5nZWQgXHUwMDNlPSBkLVx1MDAzZXNtYSBcdTAwMjZcdTAwMjYgY2hhbmdlZCBcdTAwM2MgZC1cdTAwM2VzbWEgKyBJQ0VfRFBMTF9QSU5fU1dfTlVNKSA/XG4tXHRcdFx1MDAyNmQtXHUwMDNldWZsW2NoYW5nZWQtXHUwMDNlaWR4XSA6IFx1MDAyNmQtXHUwMDNlc21hW2NoYW5nZWQtXHUwMDNlaWR4XTtcbi1cdGlmIChwZWVyLVx1MDAzZXBpbilcbi1cdFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItXHUwMDNlcGluKTtcbi19XG4tXG4gLyoqXG4gICogaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQgLSBzZXQgZGlyZWN0aW9uIG9mIFNNQSBwaW5cbiAgKiBAcDogcG9pbnRlciB0byBhIHBpblxuQEAgLTEyMTksMTcgKzEyMTYsMjEgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFxuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcbi1cdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKVxuK1x0XHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTFfRElSX0VOO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfRElSX0VOO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4rXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX0RJUl9FTjtcbi1cdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTI1MCw3ICsxMjUxLDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0ICogYmFja2luZyBwaW4gd2hlbiBVLkZMIGJlY29tZXMgaW5hY3RpdmUgYmVjYXVzZSB0aGUgU01BIHBpbiBtYXlcbiBcdCAqIHN0aWxsIGJlIHVzaW5nIGl0LlxuIFx0ICovXG4tXHRwZWVyID0gXHUwMDI2ZC1cdTAwM2V1ZmxbcC1cdTAwM2VpZHhdO1xuK1x0cGVlciA9IHAtXHUwMDNlbXV4ZWQ7XG4gXHRpZiAocGVlci1cdTAwM2VhY3RpdmUpIHtcbiBcdFx0c3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0O1xuIFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG5AQCAtMTMxNSwxMCArMTMxNiwxMiBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSAtRUlOVkFMO1xuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcbitcdFx0c3dpdGNoIChzdGF0ZSkge1xuK1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4gXHRcdFx0ZW5hYmxlID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6XG4gXHRcdFx0LyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOXG4gXHRcdFx0ICogd2hpbGUgRElSX0VOIGlzIHNldCB3b3VsZCBhbHNvIGRlYWN0aXZhdGVcbiBcdFx0XHQgKiB0aGUgcGFpcmVkIFNNQTEgb3V0cHV0LlxuQEAgLTEzMjksMTggKzEzMzIsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdHRhcmdldCA9IHAtXHUwMDNlb3V0cHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkge1xuK1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDIgaXMgbm90IGFjdGl2ZSwgc2V0dGluZ1xuIFx0XHRcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXG4gXHRcdFx0ICogU01BMiBpbnB1dC5cbkBAIC0xMzUyLDcgKzEzNTgsOCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdFx0fVxuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4gXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VpbnB1dDtcbkBAIC0xMzcwLDE3ICsxMzc3LDQ0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0aWYgKGVuYWJsZSlcbitcdGlmIChlbmFibGUpIHtcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShodywgdGFyZ2V0LCBkLVx1MDAzZWRwbGxfaWR4LCB0eXBlLCBleHRhY2spO1xuLVx0ZWxzZVxuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkLVx1MDAzZWFjdGl2ZSkge1xuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBwLVx1MDAzZW11eGVkO1xuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0O1xuK1x0XHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlO1xuK1x0XHRcdGludCBwZWVyX3JldDtcbitcbitcdFx0XHRpZiAocGVlci1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkge1xuK1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZW91dHB1dDtcbitcdFx0XHRcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZWlucHV0O1xuK1x0XHRcdFx0cGVlcl90eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4rXHRcdFx0fVxuK1x0XHRcdHBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgcGVlcl90YXJnZXQsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCxcbitcdFx0XHRcdFx0XHQgICAgICAgcGVlcl90eXBlLCBOVUxMKTtcbitcdFx0XHRpZiAoIXBlZXJfcmV0KVxuK1x0XHRcdFx0cGVlcl9yZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHRcdCAgICAgcGVlcl90eXBlLCBOVUxMKTtcbitcdFx0XHRpZiAocGVlcl9yZXQpXG4rXHRcdFx0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHRcdFx0IFwiRmFpbGVkIHRvIHN5bmMgcGVlciBwaW4gJXUgYWZ0ZXIgZW5hYmxpbmcgVS5GTCBwaW4gJXUsIGVyciAlZFxcblwiLFxuK1x0XHRcdFx0XHQgcGVlcl90YXJnZXQtXHUwMDNlaWR4LCB0YXJnZXQtXHUwMDNlaWR4LCBwZWVyX3JldCk7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKGh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHR9XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4rXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE0NjcsNiArMTUwMSw3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gc21hLVx1MDAzZXBmO1xuIFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xuK1x0dTggb2xkX2RhdGEgPSAwO1xuIFx0Ym9vbCBlbmFibGU7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE0NzksMjggKzE1MTQsMTIwIEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbi1cdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxuK1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4rXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0XHRlbmFibGUgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxuK1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbitcdFx0XHRlbmFibGUgPSBmYWxzZTtcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHRcdGVuYWJsZSA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6XG4rXHRcdGVuYWJsZSA9IGZhbHNlO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChzbWEtXHUwMDNlZGlyZWN0aW9uKSB7XG4rXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZWlucHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxuIFx0XHR0YXJnZXQgPSBzbWEtXHUwMDNlb3V0cHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuLVx0aWYgKGVuYWJsZSlcbitcdGlmIChlbmFibGUpIHtcbitcdFx0dTggZGF0YTtcbitcbitcdFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIFx1MDAyNmRhdGEpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRvbGRfZGF0YSA9IGRhdGE7XG4rXHRcdGlmIChzbWEtXHUwMDNlaWR4ID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4rXHRcdH0gZWxzZSBpZiAoc21hLVx1MDAzZWlkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XG4rXHRcdH1cbitcdFx0cmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBkYXRhKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbitcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCBkLVx1MDAzZWRwbGxfaWR4LCB0eXBlLFxuIFx0XHRcdFx0XHQgIGV4dGFjayk7XG4tXHRlbHNlXG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4rXHRcdC8qIHJlZnJlc2ggdGFyZ2V0IHN0YXRlIGZpcnN0IHNvIGEgcGVlci1zaWRlIGVycm9yIGNhbm5vdCBsZWF2ZSBpdCBzdGFsZSAqL1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuK1xuK1x0XHRpZiAoc21hLVx1MDAzZW11eGVkLVx1MDAzZWFjdGl2ZSkge1xuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBzbWEtXHUwMDNlbXV4ZWQ7XG4rXHRcdFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQ7XG4rXHRcdFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGU7XG4rXG4rXHRcdFx0aWYgKHBlZXItXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbitcdFx0XHRcdHBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4rXHRcdFx0XHRwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdHBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbitcdFx0XHRcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuK1x0XHRcdH1cbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHQgIGQtXHUwMDNlZHBsbF9pZHgsXG4rXHRcdFx0XHRcdFx0ICBwZWVyX3R5cGUsIGV4dGFjayk7XG4rXHRcdFx0aWYgKCFyZXQpXG4rXHRcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHRcdFx0cGVlcl90eXBlLCBleHRhY2spO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSxcbitcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4rXHR9XG4rXHRnb3RvIHVubG9jaztcbitcbityZXN0b3JlX3NtYV9jdHJsOlxuK1x0e1xuK1x0XHRpbnQgcmVzdG9yZV9yZXQ7XG4rXG4rXHRcdHJlc3RvcmVfcmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBvbGRfZGF0YSk7XG4rXHRcdGlmICghcmVzdG9yZV9yZXQpXG4rXHRcdFx0cmVzdG9yZV9yZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4rXHRcdGlmIChyZXN0b3JlX3JldClcbitcdFx0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHRcdCBcIkZhaWxlZCB0byByZXN0b3JlIFNNQSBjb250cm9sIGFmdGVyIHBpbiBzdGF0ZSBlcnJvciAlZCwgcmVzdG9yZSBlcnIgJWRcXG5cIixcbitcdFx0XHRcdCByZXQsIHJlc3RvcmVfcmV0KTtcbitcdH1cbiBcbiB1bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBzbWEpO1xuK1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE2OTcsNyArMTgyNCw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwKTtcbitcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDUxNCw2ICs0NjQxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0aWYgKHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYylcbiBcdFx0XHRwaW4tXHUwMDNlcmVmX3N5bmMgPSBwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcbiBcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XG4rXHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNldWZsW2ldO1xuK1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUNFX0RQTExfUElOX1NXX05VTTsgaSsrKSB7XG5AQCAtNDUyMyw3ICs0NjUyLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0cGluLVx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID0gY2FwcztcbiBcdFx0cGluLVx1MDAzZXBmID0gcGY7XG4gXHRcdHBpbi1cdTAwM2Vwcm9wLmJvYXJkX2xhYmVsID0gaWNlX2RwbGxfc3dfcGluX3VmbFtpXTtcbi1cdFx0aWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7XG4rXHRcdHN3aXRjaCAoaSkge1xuK1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpO1xuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkID1cbkBAIC00NTMzLDcgKzQ2NjMsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07XG4gXHRcdFx0cGluLVx1MDAzZWlucHV0ID0gTlVMTDtcbiBcdFx0XHRwaW4tXHUwMDNlb3V0cHV0ID0gXHUwMDI2ZC1cdTAwM2VvdXRwdXRzW3Bpbl9hYnNfaWR4XTtcbi1cdFx0fSBlbHNlIGlmIChpID09IElDRV9EUExMX1BJTl9TV18yX0lEWCkge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xuIFx0XHRcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSArXG4gXHRcdFx0XHQgICAgICBpbnB1dF9pZHhfb2Zmc2V0O1xuQEAgLTQ1NDYsNyArNDY3NywxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XG4gXHRcdFx0XHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxuIFx0XHRcdFx0IGNhcHMpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwiSW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcXG5cIiwgaSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0cGluLVx1MDAzZW11eGVkID0gXHUwMDI2ZC1cdTAwM2VzbWFbaV07XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuaW5kZXggMTAzYmEzZTQ5MDY4MmMuLmRjNmYwOTZiZjA2OWExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5AQCAtNzYsNiArNzYsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxfcGluIHtcbiBcdHMzMiBwaGFzZV9hZGp1c3Q7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm91dHB1dDtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkO1xuIFx0ZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xuIFx0czY0IHBoYXNlX29mZnNldDtcbiBcdHU4IHN0YXR1cztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjA2LjU1MDE0NTQyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDMwOTc4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIEludGVsIElDRSBEUExMIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY2AuIEl0J3MgdHdlYWtpbmcgdGhlIERQTEwgcGluIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBJbnRlbCBJQ0UgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIEU4MDAgc2VyaWVzLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZ1bmN0aW9uczogYGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcmAsIGBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZWAsIGBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldGAsIGBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldGAsIGBpY2VfZHBsbF9zbWFfcGluX3N0YXRlX3NldGAsIGFuZCBgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnNgLiBJdCBhZGRzIGEgYG11eGVkYCBwb2ludGVyIGluIHRoZSBgaWNlX2RwbGxfcGluYCBzdHJ1Y3QgZm9yIG1hbmFnaW5nIHNoYXJlZCBTTUEvVS5GTCBzaWduYWwgcGF0aHMsIGFuZCBpdCBtb2RpZmllcyBob3cgcGluIHN0YXRlcyBhbmQgZGlyZWN0aW9ucyBhcmUgaGFuZGxlZCwgaW5jbHVkaW5nIHVwZGF0ZXMgdG8gdGhlIFBDQTk1NzUgR1BJTyBleHBhbmRlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIGV2ZW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIHNldHVwPyBUaGUgYGljZWAgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciBwaHlzaWNhbCBJbnRlbCBFODAwIFBDSWUgbmV0d29yayBjYXJkcy4gVHlwaWNhbGx5LCBQQ0llIGRyaXZlcnMsIHVubGVzcyB0aGV5J3JlIGZvciBhIHdlbGwtZW11bGF0ZWQgaGFyZHdhcmUsIGFyZW4ndCBlYXNpbHkgYWNjZXNzaWJsZSB3aXRoaW4gc29tZXRoaW5nIGxpa2UgUUVNVS4gRG9lcyBRRU1VIGV2ZW4gaGF2ZSBhbiBFODAwIHNlcmllcyBlbXVsYXRvcj8gQSBxdWljayBjaGVjayByZXZlYWxzIGl0IGRvZXNuJ3QuIFdlJ3ZlIGdvdCBlbXVsYXRvcnMgZm9yIGUxMDAwLCBlMTAwMGUsIGlnYiwgYW5kIG90aGVycywgYnV0IG5vdGhpbmcgZm9yIGBpY2VgLlxuXG5UaGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyLiBEb2VzIGl0IHBvdGVudGlhbGx5IGFsbG93IHVzIHRvIHJlYWNoIGl0PyBJIHRoaW5rIGFib3V0IHN5emthbGxlcidzIGFiaWxpdHkgdG8gZnV6eiBQQ0kgZGV2aWNlcywgdXNpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uIG1lY2hhbmlzbSAodmhjaSBvciBzaW1pbGFyKS4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgc29tZXRoaW5nIGxpa2UgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwgb3IgYSBzaW1pbGFyIFBDSSBmdXp6aW5nIHN1cHBvcnQ/IEluaXRpYWxseSwgSSdtIGRyYXdpbmcgYSBibGFuaywgYnV0IHRoZW4gSSByZWNhbGwsIHllcywgc3l6a2FsbGVyICpkb2VzKiBoYXZlIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAgb3IgYSBzaW1pbGFyIGNhbGwuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgc3l6a2FsbGVyIGlzIHJvYnVzdCBlbm91Z2ggdG8gcmVhY2ggZGVlcCBpbnRvIGRyaXZlci1zcGVjaWZpYyBsb2dpYy5cblxuT2theSwgbGV0J3MgY2lyY2xlIGJhY2suIENhbiBzeXprYWxsZXIgcHJvYmUgdGhlIGBpY2VgIGRyaXZlciB1c2luZyBhIGZha2UgUENJIGRldmljZT8gVGhlIGBpY2VgIGRyaXZlciBoYXMgc2lnbmlmaWNhbnQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIC0gZmlybXdhcmUsIHRoZSBBZG1pbiBRdWV1ZSwgZXRjLiAtIG1ha2luZyBpdCBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gZ2V0IHBhc3QgdGhlIGluaXRpYWwgcHJvYmUgd2l0aG91dCBlaXRoZXIgYSByZWFsIGRldmljZSBvciBhICp2ZXJ5KiBnb29kIGVtdWxhdG9yLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWUgaWYgc3l6a2FsbGVyIGlzLCBpbiBmYWN0LCBmdXp6aW5nIHRoZSBgaWNlYCBkcml2ZXIuIEknbGwgc2VhcmNoIHN5emthbGxlciByZXBvcnRzIGZvciBgaWNlX3Byb2JlYCBvciBzaW1pbGFyIGhpdHMuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIGl0J3MgZXZlbiB3b3J0aCBwdXJzdWluZyBmdXp6aW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBwcm9tcHQgZGV0YWlscy5cblxuV2FpdCBhIHNlY29uZCwgdGhlIHByb21wdCBzcGVjaWZpZXM6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFNpbmNlIGBpY2VgIGlzIGEgUENJZSBkcml2ZXIgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCB0aGVyZSdzIG5vIGVxdWl2YWxlbnQgb2Ygc29tZXRoaW5nIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgbmV0ZGV2c2ltYCBmb3IgaXQsIGFuZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBpdCwgaXQncyBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBjb2RlIGluIGFueSBvZiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBvbmUgbGFzdCB0aGluZywgdG8gc2VlIGlmIHNvbWUgYGljZWAgZW11bGF0b3IgZXhpc3RzLiBJIGhhdmUgdG8gYWNjZXB0IHRoZSByZWFsaXR5IG9mIHRoZSBzaXR1YXRpb24uXG5cblllcCwgdGhhdCdzIHdoYXQgSSB0aG91Z2h0LiBUaGUgSW50ZWwgRTgwMCBzZXJpZXMgaXMgY29tcGxleC4gSXQgcmVxdWlyZXMgaW50ZXJhY3Rpb25zIHdpdGggZmlybXdhcmUgKEFkbWluIFF1ZXVlLCBOVk0pLCBhbmQgdGhlIGRyaXZlciB3aWxsIGZhaWwgcHJvYmluZyBlYXJseSBpZiB0aGUgZmlybXdhcmUgZG9lc24ndCByZXNwb25kLiBJIHRoaW5rIEkgd2lsbCBqdXN0IGNoZWNrIHRoZSBgaWNlX3Byb2JlYCByb3V0aW5lIGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNgIGZpbGUgb25lIGxhc3QgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjE5LjU4MTEyNjUwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY5NjA0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDktICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTU1OmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjM5LVxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODM5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0MS1cXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODQyOlxcdC5wcm9iZSA9IGljZV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODQzLVxcdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDoxOS42OTgwOTU5MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE0OTk3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJ2ljZV9wcm9iZScqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBsZXQncyBkaXNzZWN0IGBpY2VfcHJvYmVgIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCdzIGRlc2lnbmVkIHRvIGRvLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IGl0cyBpbXBsZW1lbnRhdGlvbiwgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgYW5kIGFueSBpbnRlcmFjdGlvbnMgaXQgaGFzIHdpdGggb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNhcGFiaWxpdGllcyBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByZWxldmFuY2Ugb3IgaW1wYWN0LiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VyZmFjZS1sZXZlbCBnbGFuY2UgYW5kIGRpZyBkZWVwIGludG8gaXRzIGlubmVyIHdvcmtpbmdzLiBJIGtub3cgSSBuZWVkIHRvIHRyZWF0IHRoaXMgYXMgdGhvdWdoIEkgd2VyZSBnb2luZyBpbiBvbiBhIHN1cmdpY2FsIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MTUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDoyMi44MTMwOTU0MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTE1NCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxNTQ6XFx0c3RhdGljIGludFxcbjUxNTU6XFx0aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcXG41MTU2OlxcdHtcXG41MTU3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuNTE1ODpcXHRcXHRib29sIG5lZWRfZGV2X2RlaW5pdCA9IGZhbHNlO1xcbjUxNTk6XFx0XFx0c3RydWN0IGljZV9hZGFwdGVyICphZGFwdGVyO1xcbjUxNjA6XFx0XFx0c3RydWN0IGljZV9wZiAqcGY7XFxuNTE2MTpcXHRcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG41MTYyOlxcdFxcdGludCBlcnI7XFxuNTE2MzpcXHRcXG41MTY0OlxcdFxcdGlmIChwZGV2LVxcdTAwM2Vpc192aXJ0Zm4pIHtcXG41MTY1OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiY2FuJ3QgcHJvYmUgYSB2aXJ0dWFsIGZ1bmN0aW9uXFxcXG5cXFwiKTtcXG41MTY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjUxNjc6XFx0XFx0fVxcbjUxNjg6XFx0XFxuNTE2OTpcXHRcXHQvKiB3aGVuIHVuZGVyIGEga2R1bXAga2VybmVsIGluaXRpYXRlIGEgcmVzZXQgYmVmb3JlIGVuYWJsaW5nIHRoZVxcbjUxNzA6XFx0XFx0ICogZGV2aWNlIGluIG9yZGVyIHRvIGNsZWFyIG91dCBhbnkgcGVuZGluZyBETUEgdHJhbnNhY3Rpb25zLiBUaGVzZVxcbjUxNzE6XFx0XFx0ICogdHJhbnNhY3Rpb25zIGNhbiBjYXVzZSBzb21lIHN5c3RlbXMgdG8gbWFjaGluZSBjaGVjayB3aGVuIGRvaW5nXFxuNTE3MjpcXHRcXHQgKiB0aGUgcGNpbV9lbmFibGVfZGV2aWNlKCkgYmVsb3cuXFxuNTE3MzpcXHRcXHQgKi9cXG41MTc0OlxcdFxcdGlmIChpc19rZHVtcF9rZXJuZWwoKSkge1xcbjUxNzU6XFx0XFx0XFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuNTE3NjpcXHRcXHRcXHRwY2lfY2xlYXJfbWFzdGVyKHBkZXYpO1xcbjUxNzc6XFx0XFx0XFx0ZXJyID0gcGNpZV9mbHIocGRldik7XFxuNTE3ODpcXHRcXHRcXHRpZiAoZXJyKVxcbjUxNzk6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG41MTgwOlxcdFxcdFxcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xcbjUxODE6XFx0XFx0fVxcbjUxODI6XFx0XFxuNTE4MzpcXHRcXHQvKiB0aGlzIGRyaXZlciB1c2VzIGRldnJlcywgc2VlXFxuNTE4NDpcXHRcXHQgKiBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3RcXG41MTg1OlxcdFxcdCAqL1xcbjUxODY6XFx0XFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbjUxODc6XFx0XFx0aWYgKGVycilcXG41MTg4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNTE4OTpcXHRcXG41MTkwOlxcdFxcdGVyciA9IHBjaW1faW9tYXBfcmVnaW9ucyhwZGV2LCBCSVQoSUNFX0JBUjApLCBkZXZfZHJpdmVyX3N0cmluZyhkZXYpKTtcXG41MTkxOlxcdFxcdGlmIChlcnIpIHtcXG41MTkyOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiQkFSMCBJL08gbWFwIGVycm9yICVkXFxcXG5cXFwiLCBlcnIpO1xcbjUxOTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG41MTk0OlxcdFxcdH1cXG41MTk1OlxcdFxcbjUxOTY6XFx0XFx0cGYgPSBpY2VfYWxsb2NhdGVfcGYoZGV2KTtcXG41MTk3OlxcdFxcdGlmICghcGYpXFxuNTE5ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG41MTk5OlxcdFxcbjUyMDA6XFx0XFx0LyogaW5pdGlhbGl6ZSBBdXhpbGlhcnkgaW5kZXggdG8gaW52YWxpZCB2YWx1ZSAqL1xcbjUyMDE6XFx0XFx0cGYtXFx1MDAzZWF1eF9pZHggPSAtMTtcXG41MjAyOlxcdFxcbjUyMDM6XFx0XFx0Lyogc2V0IHVwIGZvciBoaWdoIG9yIGxvdyBETUEgKi9cXG41MjA0OlxcdFxcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTtcXG41MjA1OlxcdFxcdGlmIChlcnIpIHtcXG41MjA2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRE1BIGNvbmZpZ3VyYXRpb24gZmFpbGVkOiAweCV4XFxcXG5cXFwiLCBlcnIpO1xcbjUyMDc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG41MjA4OlxcdFxcdH1cXG41MjA5OlxcdFxcbjUyMTA6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuNTIxMTpcXHRcXHRwZi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuNTIxMjpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGYpO1xcbjUyMTM6XFx0XFx0c2V0X2JpdChJQ0VfRE9XTiwgcGYtXFx1MDAzZXN0YXRlKTtcXG41MjE0OlxcdFxcdC8qIERpc2FibGUgc2VydmljZSB0YXNrIHVudGlsIERPV04gYml0IGlzIGNsZWFyZWQgKi9cXG41MjE1OlxcdFxcdHNldF9iaXQoSUNFX1NFUlZJQ0VfRElTLCBwZi1cXHUwMDNlc3RhdGUpO1xcbjUyMTY6XFx0XFxuNTIxNzpcXHRcXHRodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuNTIxODpcXHRcXHRody1cXHUwMDNlaHdfYWRkciA9IHBjaW1faW9tYXBfdGFibGUocGRldilbSUNFX0JBUjBdO1xcbjUyMTk6XFx0XFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuNTIyMDpcXHRcXG41MjIxOlxcdFxcdGh3LVxcdTAwM2ViYWNrID0gcGY7XFxuNTIyMjpcXHRcXHRody1cXHUwMDNlcG9ydF9pbmZvID0gTlVMTDtcXG41MjIzOlxcdFxcdGh3LVxcdTAwM2V2ZW5kb3JfaWQgPSBwZGV2LVxcdTAwM2V2ZW5kb3I7XFxuNTIyNDpcXHRcXHRody1cXHUwMDNlZGV2aWNlX2lkID0gcGRldi1cXHUwMDNlZGV2aWNlO1xcbjUyMjU6XFx0XFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCBcXHUwMDI2aHctXFx1MDAzZXJldmlzaW9uX2lkKTtcXG41MjI2OlxcdFxcdGh3LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcjtcXG41MjI3OlxcdFxcdGh3LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcXG41MjI4OlxcdFxcdGh3LVxcdTAwM2VidXMuZGV2aWNlID0gUENJX1NMT1QocGRldi1cXHUwMDNlZGV2Zm4pO1xcbjUyMjk6XFx0XFx0aHctXFx1MDAzZWJ1cy5mdW5jID0gUENJX0ZVTkMocGRldi1cXHUwMDNlZGV2Zm4pO1xcbjUyMzA6XFx0XFx0aWNlX3NldF9jdHJscV9sZW4oaHcpO1xcbjUyMzE6XFx0XFxuNTIzMjpcXHRcXHRwZi1cXHUwMDNlbXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnLCBJQ0VfREZMVF9ORVRJRl9NKTtcXG41MjMzOlxcdFxcbjUyMzQ6XFx0I2lmbmRlZiBDT05GSUdfRFlOQU1JQ19ERUJVR1xcbjUyMzU6XFx0XFx0aWYgKGRlYnVnIFxcdTAwM2MgLTEpXFxuNTIzNjpcXHRcXHRcXHRody1cXHUwMDNlZGVidWdfbWFzayA9IGRlYnVnO1xcbjUyMzc6XFx0I2VuZGlmXFxuNTIzODpcXHRcXG41MjM5OlxcdFxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuNTI0MDpcXHRcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbjUyNDE6XFx0XFxuNTI0MjpcXHRcXHRlcnIgPSBpY2VfaW5pdF9odyhodyk7XFxuNTI0MzpcXHRcXHRpZiAoZXJyKSB7XFxuNTI0NDpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9pbml0X2h3IGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuNTI0NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjUyNDY6XFx0XFx0fVxcbjUyNDc6XFx0XFxuNTI0ODpcXHRcXHRpY2VfaW5pdF9kZXZfaHcocGYpO1xcbjUyNDk6XFx0XFxuNTI1MDpcXHRcXHRhZGFwdGVyID0gaWNlX2FkYXB0ZXJfZ2V0KHBkZXYpO1xcbjUyNTE6XFx0XFx0aWYgKElTX0VSUihhZGFwdGVyKSkge1xcbjUyNTI6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihhZGFwdGVyKTtcXG41MjUzOlxcdFxcdFxcdGdvdG8gdW5yb2xsX2h3X2luaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjIyLjgxMzQ0Njc2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODQ0NTUwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaWNlX2luaXRfaHdgIEZ1bmN0aW9uIENhbGwqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIGp1bXBpbmcgaW50byBgaWNlX2luaXRfaHdgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgd2hpY2ggcmVnaXN0ZXJzIGFyZSBiZWluZyB0b3VjaGVkLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzdGVwczogaXMgaXQgcHJpbWFyaWx5IHNldHRpbmcgdXAgY2xvY2tzLCBjb25maWd1cmluZyB0aGUgUEhZLCBpbml0aWFsaXppbmcgRE1BIGNoYW5uZWxzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbW1lbnRzIGJldHRlciBiZSBnb29kLCBidXQgSSdtIGV4cGVjdGluZyB0byBoYXZlIHRvIHJldmVyc2UtZW5naW5lZXIgc29tZSBvZiB0aGlzLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjcml0aWNhbCBwYXRoIHRvIGdldHRpbmcgdGhlIHNpbGljb24gZnVuY3Rpb25hbCDigJMgd2hhdCdzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGZvciBhIGJhc2ljIGJyaW5nLXVwLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdHJhcHM6IHJhY2UgY29uZGl0aW9ucywgb2JzY3VyZSByZWdpc3RlciBzZXR0aW5ncyB3aXRoIGRlZmF1bHQgdmFsdWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBibG9jayBwcm9ncmVzcy4gSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBzb3J0IG9mIGRlcGVuZGVuY3kgdHJlZSBoZXJlIOKAkyBJIG5lZWQgdG8gdHJhY2sgaG93IG9uZSBpbml0aWFsaXphdGlvbiBzdGVwIHNldHMgdXAgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoZSBuZXh0LiBUaGlzIGlzIGxpa2VseSB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBlbHNlLCBzbyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgaGVyZSBpcyBwYXJhbW91bnQuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjI3Ljc5NzkwNDk1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU2ODcxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2luaXRfaHdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTIzNT1zdGF0aWMgaW50IGljZV9kZXZsaW5rX3JlaW5pdF91cChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMjQyOlxcdGVyciA9IGljZV9pbml0X2h3KFxcdTAwMjZwZi1cXHUwMDNlaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjQzLVxcdGlmIChlcnIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI0NDpcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9pbml0X2h3IGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEyNDUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9OTYwPXN0YXRpYyBpbnQgX19md2xvZ19pbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzo5ODQ6ICogaWNlX2luaXRfaHcgLSBtYWluIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4NS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTg2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg3OmludCBpY2VfaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjQtXFx0XFx0Z290byBlcnJfdW5yb2xsX2ZsdHJfbWdtdF9zdHJ1Y3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTI1OlxcdHN0YXR1cyA9IGljZV9pbml0X2h3X3RibHMoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTEyNi1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0xMTU2PXN0YXRpYyB2b2lkIF9fZndsb2dfZGVpbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTY2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE2NzogKiBpY2VfZGVpbml0X2h3IC0gdW5yb2xsIGluaXRpYWxpemF0aW9uIG9wZXJhdGlvbnMgZG9uZSBieSBpY2VfaW5pdF9od1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE2OC0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTcwLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGR1cmluZyBub21pbmFsIG9wZXJhdGlvbiwgbm90IGFzIGEgcmVzdWx0IG9mXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTcxOiAqIGljZV9pbml0X2h3KCkgZmFpbGluZyBzaW5jZSBpY2VfaW5pdF9odygpIHdpbGwgdGFrZSBjYXJlIG9mIHVucm9sbGluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3Mi0gKiBhcHBsaWNhYmxlIGluaXRpYWxpemF0aW9ucyBpZiBpdCBmYWlscyBmb3IgYW55IHJlYXNvbi5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaDo4MzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtODQtdm9pZCBpY2VfZGVpbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM9MjM4OD1pbnQgaWNlX2NmZ190eF90b3BvKHN0cnVjdCBpY2VfaHcgKmh3LCBjb25zdCB2b2lkICpidWYsIHUzMiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1NDAtXFx0aWNlX2RlaW5pdF9odyhodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYzoyNTQxOlxcdGlmIChpY2VfaW5pdF9odyhodykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1NDItXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFxcXCJGYWlsZWQgdG8gcmUtaW5pdCBoYXJkd2FyZSBhZnRlciBzZXR0aW5nIFR4IHRvcG9sb2d5XFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM9MjE1ND12b2lkIGljZV9jbGVhcl9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYy0yMTk3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjE5ODogKiBpY2VfaW5pdF9od190YmxzIC0gaW5pdCBoYXJkd2FyZSB0YWJsZSBtZW1vcnlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTktICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIyMDAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYzoyMjAxOmludCBpY2VfaW5pdF9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oPTU4PWJvb2wgaWNlX2lzX2luaXRfcGtnX3N1Y2Nlc3NmdWwoZW51bSBpY2VfZGRwX3N0YXRlIHN0YXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oOjU5OmludCBpY2VfaW5pdF9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oLTYwLXZvaWQgaWNlX2ZyZWVfc2VnKHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTU9aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MjpcXHRlcnIgPSBpY2VfaW5pdF9odyhodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI0My1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0NDpcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9pbml0X2h3IGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI0NS1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYz02OD11MzIgaWNlX2NvbnZfbGlua19zcGVlZF90b192aXJ0Y2hubChib29sIGFkdl9saW5rX3N1cHBvcnQsIHUxNiBsaW5rX3NwZWVkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYy04OS0gKiAxLiBUaGUgbWFpbGJveCBzbmFwc2hvdCBzdHJ1Y3R1cmUsIGljZV9tYnhfc25hcHNob3QsIGlzIGluaXRpYWxpemVkIGR1cmluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmM6OTA6ICogZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIGljZV9pbml0X2h3KCkgdXNpbmcgaWNlX21ieF9pbml0X3NuYXBzaG90KCkuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYy05MS0gKiBUaGUgc3RydWN0IGljZV9tYnhfc25hcHNob3QgaGVscHMgdG8gdHJhY2sgYW5kIHRyYXZlcnNlIGEgc3RhdGljIHdpbmRvdyBvZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDoyOC4xNzM1OTc4MjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg2OTQ1MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgSUNFIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBJbnRlbCBJQ0UgRXRoZXJuZXQgZHJpdmVycy4gTGV0J3Mgc3RhcnQgd2l0aCBgaWNlX2luaXRfaHdgIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY2AuIFRoYXQncyB3aGVyZSB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyB0eXBpY2FsbHkgbG9jYXRlZC4gSSBrbm93IHRoaXMgY29kZSwgYnV0IGl0J3MgYmVlbiBhIHdoaWxlLCBhbmQgaXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcmV2aXNpdCB0aGUgZm91bmRhdGlvbmFsIHN0ZXBzIHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbCBoYXJkd2FyZS1yZWxhdGVkIGlzc3VlcyBvciBsb29raW5nIGF0IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgdGhlIGNydWNpYWwgY2FsbHMgdG8gY29uZmlndXJlIHRoZSBNQUMsIFBIWSwgYW5kIGFueSBvdGhlciByZWxldmFudCBzaWxpY29uIHJlZ2lzdGVycy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYXMgdGhhdCBjYW4gYmUgY3JpdGljYWwgZm9yIGJyaW5naW5nIHVwIHRoZSBpbnRlcmZhY2UgY29ycmVjdGx5LiBJJ2xsIGFsc28gd2FudCB0byBsb29rIG91dCBmb3IgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBlYXJseSBoYXJkd2FyZSBjaGVja3MuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQyNywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjMyLjI2MDU0NjA3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTg3OlxcdGludCBpY2VfaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodylcXG4gOTg4OlxcdHtcXG4gOTg5OlxcdFxcdHN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICpwY2FwcyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gOTkwOlxcdFxcdHZvaWQgKm1hY19idWYgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuIDk5MTpcXHRcXHR1MTYgbWFjX2J1Zl9sZW47XFxuIDk5MjpcXHRcXHRpbnQgc3RhdHVzO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHQvKiBTZXQgTUFDIHR5cGUgYmFzZWQgb24gRGV2aWNlSUQgKi9cXG4gOTk1OlxcdFxcdHN0YXR1cyA9IGljZV9zZXRfbWFjX3R5cGUoaHcpO1xcbiA5OTY6XFx0XFx0aWYgKHN0YXR1cylcXG4gOTk3OlxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdGh3LVxcdTAwM2VwZl9pZCA9IEZJRUxEX0dFVChQRl9GVU5DX1JJRF9GVU5DX05VTV9NLCByZDMyKGh3LCBQRl9GVU5DX1JJRCkpO1xcbjEwMDA6XFx0XFxuMTAwMTpcXHRcXHRzdGF0dXMgPSBpY2VfcmVzZXQoaHcsIElDRV9SRVNFVF9QRlIpO1xcbjEwMDI6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDAzOlxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdGljZV9nZXRfaXRyX2ludHJsX2dyYW4oaHcpO1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRzdGF0dXMgPSBpY2VfY3JlYXRlX2FsbF9jdHJscShodyk7XFxuMTAwODpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMDk6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcXG4xMDEwOlxcdFxcbjEwMTE6XFx0XFx0c3RhdHVzID0gX19md2xvZ19pbml0KGh3KTtcXG4xMDEyOlxcdFxcdGlmIChzdGF0dXMpXFxuMTAxMzpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfRldfTE9HLCBcXFwiRXJyb3IgaW5pdGlhbGl6aW5nIEZXIGxvZ2dpbmc6ICVkXFxcXG5cXFwiLFxcbjEwMTQ6XFx0XFx0XFx0XFx0ICBzdGF0dXMpO1xcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHRzdGF0dXMgPSBpY2VfY2xlYXJfcGZfY2ZnKGh3KTtcXG4xMDE3OlxcdFxcdGlmIChzdGF0dXMpXFxuMTAxODpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHQvKiBTZXQgYml0IHRvIGVuYWJsZSBGbG93IERpcmVjdG9yIGZpbHRlcnMgKi9cXG4xMDIxOlxcdFxcdHdyMzIoaHcsIFBGUUZfRkRfRU5BLCBQRlFGX0ZEX0VOQV9GRF9FTkFfTSk7XFxuMTAyMjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aHctXFx1MDAzZWZkaXJfbGlzdF9oZWFkKTtcXG4xMDIzOlxcdFxcbjEwMjQ6XFx0XFx0aWNlX2NsZWFyX3B4ZV9tb2RlKGh3KTtcXG4xMDI1OlxcdFxcbjEwMjY6XFx0XFx0c3RhdHVzID0gaWNlX2luaXRfbnZtKGh3KTtcXG4xMDI3OlxcdFxcdGlmIChzdGF0dXMpXFxuMTAyODpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xcbjEwMjk6XFx0XFxuMTAzMDpcXHRcXHRzdGF0dXMgPSBpY2VfZ2V0X2NhcHMoaHcpO1xcbjEwMzE6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDMyOlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdGlmICghaHctXFx1MDAzZXBvcnRfaW5mbylcXG4xMDM1OlxcdFxcdFxcdGh3LVxcdTAwM2Vwb3J0X2luZm8gPSBkZXZtX2t6YWxsb2MoaWNlX2h3X3RvX2RldihodyksXFxuMTAzNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqaHctXFx1MDAzZXBvcnRfaW5mbyksXFxuMTAzNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbjEwMzg6XFx0XFx0aWYgKCFody1cXHUwMDNlcG9ydF9pbmZvKSB7XFxuMTAzOTpcXHRcXHRcXHRzdGF0dXMgPSAtRU5PTUVNO1xcbjEwNDA6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcXG4xMDQxOlxcdFxcdH1cXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0aHctXFx1MDAzZXBvcnRfaW5mby1cXHUwMDNlbG9jYWxfZndkX21vZGUgPSBJQ0VfTE9DQUxfRldEX01PREVfRU5BQkxFRDtcXG4xMDQ0OlxcdFxcdC8qIHNldCB0aGUgYmFjayBwb2ludGVyIHRvIEhXICovXFxuMTA0NTpcXHRcXHRody1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VodyA9IGh3O1xcbjEwNDY6XFx0XFxuMTA0NzpcXHRcXHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBzd2l0Y2ggY29uZmlndXJhdGlvbiBkYXRhICovXFxuMTA0ODpcXHRcXHRzdGF0dXMgPSBpY2VfZ2V0X2luaXRpYWxfc3dfY2ZnKGh3KTtcXG4xMDQ5OlxcdFxcdGlmIChzdGF0dXMpXFxuMTA1MDpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfYWxsb2M7XFxuMTA1MTpcXHRcXG4xMDUyOlxcdFxcdGh3LVxcdTAwM2VldmJfdmViID0gdHJ1ZTtcXG4xMDUzOlxcdFxcbjEwNTQ6XFx0XFx0LyogaW5pdCB4YXJyYXkgZm9yIGlkZW50aWZ5aW5nIHNjaGVkdWxpbmcgbm9kZXMgdW5pcXVlbHkgKi9cXG4xMDU1OlxcdFxcdHhhX2luaXRfZmxhZ3MoXFx1MDAyNmh3LVxcdTAwM2Vwb3J0X2luZm8tXFx1MDAzZXNjaGVkX25vZGVfaWRzLCBYQV9GTEFHU19BTExPQyk7XFxuMTA1NjpcXHRcXG4xMDU3OlxcdFxcdC8qIFF1ZXJ5IHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGZvciBUeCBzY2hlZHVsZXIgKi9cXG4xMDU4OlxcdFxcdHN0YXR1cyA9IGljZV9zY2hlZF9xdWVyeV9yZXNfYWxsb2MoaHcpO1xcbjEwNTk6XFx0XFx0aWYgKHN0YXR1cykge1xcbjEwNjA6XFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1NDSEVELCBcXFwiRmFpbGVkIHRvIGdldCBzY2hlZHVsZXIgYWxsb2NhdGVkIHJlc291cmNlc1xcXFxuXFxcIik7XFxuMTA2MTpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfYWxsb2M7XFxuMTA2MjpcXHRcXHR9XFxuMTA2MzpcXHRcXHRpY2Vfc2NoZWRfZ2V0X3BzbV9jbGtfZnJlcShodyk7XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIHNjaGVkdWxlciBkYXRhICovXFxuMTA2NjpcXHRcXHRzdGF0dXMgPSBpY2Vfc2NoZWRfaW5pdF9wb3J0KGh3LVxcdTAwM2Vwb3J0X2luZm8pO1xcbjEwNjc6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDY4OlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9zY2hlZDtcXG4xMDY5OlxcdFxcbjEwNzA6XFx0XFx0cGNhcHMgPSBremFsbG9jX29iaigqcGNhcHMpO1xcbjEwNzE6XFx0XFx0aWYgKCFwY2Fwcykge1xcbjEwNzI6XFx0XFx0XFx0c3RhdHVzID0gLUVOT01FTTtcXG4xMDczOlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9zY2hlZDtcXG4xMDc0OlxcdFxcdH1cXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggUEhZIGNhcGFiaWxpdGllcyAqL1xcbjEwNzc6XFx0XFx0c3RhdHVzID0gaWNlX2FxX2dldF9waHlfY2Fwcyhody1cXHUwMDNlcG9ydF9pbmZvLCBmYWxzZSxcXG4xMDc4OlxcdFxcdFxcdFxcdFxcdCAgICAgSUNFX0FRQ19SRVBPUlRfVE9QT19DQVBfTUVESUEsIHBjYXBzLFxcbjEwNzk6XFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG4xMDgwOlxcdFxcdGlmIChzdGF0dXMpXFxuMTA4MTpcXHRcXHRcXHRkZXZfd2FybihpY2VfaHdfdG9fZGV2KGh3KSwgXFxcIkdldCBQSFkgY2FwYWJpbGl0aWVzIGZhaWxlZCBzdGF0dXMgPSAlZCwgY29udGludWluZyBhbnl3YXlcXFxcblxcXCIsXFxuMTA4MjpcXHRcXHRcXHRcXHQgc3RhdHVzKTtcXG4xMDgzOlxcdFxcbjEwODQ6XFx0XFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggbGluayBpbmZvcm1hdGlvbiAqL1xcbjEwODU6XFx0XFx0c3RhdHVzID0gaWNlX2FxX2dldF9saW5rX2luZm8oaHctXFx1MDAzZXBvcnRfaW5mbywgZmFsc2UsIE5VTEwsIE5VTEwpO1xcbjEwODY6XFx0XFx0aWYgKHN0YXR1cylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTQ6MzIuMjYwOTkyNTg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MTg5NzIxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBIYXJkd2FyZSBJbnRlcmFjdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhlIGBpY2VfcmVzZXRgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCwgcmlnaHQ/IEZvbGxvd2luZyB0aGF0LCB3ZSd2ZSBnb3QgYGljZV9jcmVhdGVfYWxsX2N0cmxxYCwgYGljZV9pbml0X252bWAsIGFuZCB0aGVuIHRoZSBgaWNlX2dldF9jYXBzYCBhbmQgYGljZV9nZXRfaW5pdGlhbF9zd19jZmdgIGZ1bmN0aW9ucyBnZXR0aW5nIGNhbGxlZC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBhbGwgcmVxdWlyZSBkaXJlY3QgaGFyZHdhcmUgaW50ZXJhY3Rpb24g4oCTIHJlYWRpbmcgcmVnaXN0ZXJzLCBzZW5kaW5nIGNvbW1hbmRzIHRocm91Z2ggdGhlIEFkbWluIFF1ZXVlLCB0aGUgdXN1YWwgZGFuY2UuXG5cbk15IGNvbmNlcm4gaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCBpZiB0aGVyZSdzICpubyogaGFyZHdhcmUgcHJlc2VudCwgb3IgaWYgaXTigJlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCwgd2UncmUgZ29pbmcgdG8gaGl0IGEgd2FsbCB2ZXJ5IGVhcmx5LiBgaWNlX3Jlc2V0YCB3aWxsIGxpa2VseSBmYWlsLCBvciBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgIHdpbGwgYm9tYiBvdXQgYmVjYXVzZSB0aGUgY29udHJvbCBxdWV1ZSBzZXR1cCB3b24ndCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHByb3Blcmx5LiBUaGUgaGFyZHdhcmUganVzdCB3b24ndCBiZSByZXNwb25kaW5nIHRvIHRob3NlIGluaXRpYWxpemF0aW9uIGNvbW1hbmRzLiBXZSBuZWVkIHRvIGZvY3VzIG9uIHRoYXQgaW5pdGlhbCBzdGF0ZSwgYW5kIEkgbmVlZCB0byBjaGVjayBgaWNlX3Jlc2V0YCBpbW1lZGlhdGVseS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI0OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjM4LjA3OTk2Nzg0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDg3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAxOlxcdFxcdHN0YXR1cyA9IGljZV9yZXNldChodywgSUNFX1JFU0VUX1BGUik7XFxuMTAwMjpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMDM6XFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4xMDA0OlxcdFxcbjEwMDU6XFx0XFx0aWNlX2dldF9pdHJfaW50cmxfZ3Jhbihodyk7XFxuMTAwNjpcXHRcXG4xMDA3OlxcdFxcdHN0YXR1cyA9IGljZV9jcmVhdGVfYWxsX2N0cmxxKGh3KTtcXG4xMDA4OlxcdFxcdGlmIChzdGF0dXMpXFxuMTAwOTpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xcbjEwMTA6XFx0XFxuMTAxMTpcXHRcXHRzdGF0dXMgPSBfX2Z3bG9nX2luaXQoaHcpO1xcbjEwMTI6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDEzOlxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19GV19MT0csIFxcXCJFcnJvciBpbml0aWFsaXppbmcgRlcgbG9nZ2luZzogJWRcXFxcblxcXCIsXFxuMTAxNDpcXHRcXHRcXHRcXHQgIHN0YXR1cyk7XFxuMTAxNTpcXHRcXG4xMDE2OlxcdFxcdHN0YXR1cyA9IGljZV9jbGVhcl9wZl9jZmcoaHcpO1xcbjEwMTc6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDE4OlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XFxuMTAxOTpcXHRcXG4xMDIwOlxcdFxcdC8qIFNldCBiaXQgdG8gZW5hYmxlIEZsb3cgRGlyZWN0b3IgZmlsdGVycyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDozOC4wODAzMTgzODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5OTk5NzEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGljZV9yZXNldGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgY29kZSBoYXMganVzdCBtZW50aW9uZWQgYGljZV9yZXNldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCdzIGFib3V0LiBJJ20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGluIG15IGhlYWQuIElzIHRoaXMgc29tZSBraW5kIG9mIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGEgY2xlYW51cCBwcm9jZWR1cmUsIG9yIHBlcmhhcHMgYSBtZXRob2QgdG8gcmV2ZXJ0IHNvbWUgc3RhdGUgYmFjayB0byBhIGtub3duIGdvb2QgY29uZmlndXJhdGlvbj8gR2l2ZW4gdGhlIG5hbWUsIFwicmVzZXRcIiBpcyB0aGUgbW9zdCBvYnZpb3VzIGNvbm5vdGF0aW9uLCBidXQgY29udGV4dCBpcyBldmVyeXRoaW5nLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IGVuZ2FnZWQgLSB3aGF0IGV4YWN0bHkgaXMgXCJpY2VcIiBpbiB0aGlzIGNvbnRleHQ/IElzIGl0IHJlbGF0ZWQgdG8gY2FjaGluZywgYSBuZXR3b3JrIGNvbm5lY3Rpb24sIGEgc2ltdWxhdGlvbidzIHN0YXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgXCJpY2VcIiB0aGUgZnVuY3Rpb24gaXMgcmVzZXR0aW5nIGRldGVybWluZXMgdGhlIGxldmVsIG9mIGNvbmNlcm4gYW5kIGRpcmVjdGlvbiB0byB0YWtlLiBJJ2xsIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdXJyb3VuZGluZyBjb2RlIG9yIGRvY3VtZW50YXRpb24gdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBzY29wZSBhbmQgcHVycG9zZS4gSSdtIHJlYWR5IHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDo0Mi4wODAzMTg5NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTQ0NDA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaWNlX3Jlc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0xMjU1PXN0YXRpYyBpbnQgaWNlX3BmX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMzEwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTMxMTppbnQgaWNlX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9yZXNldF9yZXEgcmVxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTMxMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oPTg1PWludCBpY2VfY2hlY2tfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODY6aW50IGljZV9yZXNldChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfcmVzZXRfcmVxIHJlcSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04Ny1pbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYz04MzA9c3RhdGljIHZvaWQgaWNlX25vdGlmeV92Zl9yZXNldChzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMtODYzLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmM6ODY0OmludCBpY2VfcmVzZXRfdmYoc3RydWN0IGljZV92ZiAqdmYsIHUzMiBmbGFncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jLTg2NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5oPTMxNj1pY2VfdmZfY2xlYXJfdnNpX3Byb21pc2Moc3RydWN0IGljZV92ZiAqdmYsIHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaDozMTc6aW50IGljZV9yZXNldF92ZihzdHJ1Y3QgaWNlX3ZmICp2ZiwgdTMyIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5oLTMxOC12b2lkIGljZV9yZXNldF9hbGxfdmZzKHN0cnVjdCBpY2VfcGYgKnBmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmg9Mzc5PWljZV92Zl9jbGVhcl92c2lfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZmICp2Ziwgc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaC0zODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaDozODQ6c3RhdGljIGlubGluZSBpbnQgaWNlX3Jlc2V0X3ZmKHN0cnVjdCBpY2VfdmYgKnZmLCB1MzIgZmxhZ3MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaC0zODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDo0Mi4xODE3Njk0MjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NDA1MzE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGljZV9yZXNldGAgaW1wbGVtZW50YXRpb24gYW5kIGJyZWFrIGl0IGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MsIGl0cyBpbXBhY3QsIGFuZCBpdHMgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgZnVuY3Rpb24gaW4gd2hhdGV2ZXIgc3lzdGVtIGl0J3MgcGFydCBvZiwgc28gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIGl0LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCBcInJlc2V0XCIgYWN0dWFsbHkgbWVhbnMgaW4gdGhpcyBjb250ZXh0IOKAkyBpcyBpdCBhIGZ1bGwgaGFyZHdhcmUgcmVzZXQsIGEgc29mdCByZXNldCwgb3Igc29tZXRoaW5nIG1vcmUgbnVhbmNlZD8gV2hhdCBzdGF0ZSB2YXJpYWJsZXMgYXJlIGFmZmVjdGVkPyBXaGF0IHJlc291cmNlcyBhcmUgcmVsZWFzZWQgb3IgcmUtaW5pdGlhbGl6ZWQ/IEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYXRvbWljaXR5IGlzc3VlcywgYW5kIGFueSBhcmVhcyB3aGVyZSBmYWlsdXJlIGNvdWxkIGxlYWQgdG8gc3lzdGVtIGluc3RhYmlsaXR5IG9yIGRhdGEgY29ycnVwdGlvbi4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IHRoYXQgaW50ZXJmYWNlIG1pZ2h0IGJlIGV4cGxvaXRlZCBpZiBpbXBsZW1lbnRlZCBpbXByb3Blcmx5LiBJdCdzIHRpbWUgdG8gcHV0IG9uIG15IGFuYWx5c2lzIGhhdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NzQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDo0NS42MjU4MjY1ODFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxMTpcXHRpbnQgaWNlX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9yZXNldF9yZXEgcmVxKVxcbjEzMTI6XFx0e1xcbjEzMTM6XFx0XFx0dTMyIHZhbCA9IDA7XFxuMTMxNDpcXHRcXG4xMzE1OlxcdFxcdHN3aXRjaCAocmVxKSB7XFxuMTMxNjpcXHRcXHRjYXNlIElDRV9SRVNFVF9QRlI6XFxuMTMxNzpcXHRcXHRcXHRyZXR1cm4gaWNlX3BmX3Jlc2V0KGh3KTtcXG4xMzE4OlxcdFxcdGNhc2UgSUNFX1JFU0VUX0NPUkVSOlxcbjEzMTk6XFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFxcXCJDb3JlUiByZXF1ZXN0ZWRcXFxcblxcXCIpO1xcbjEzMjA6XFx0XFx0XFx0dmFsID0gR0xHRU5fUlRSSUdfQ09SRVJfTTtcXG4xMzIxOlxcdFxcdFxcdGJyZWFrO1xcbjEzMjI6XFx0XFx0Y2FzZSBJQ0VfUkVTRVRfR0xPQlI6XFxuMTMyMzpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgXFxcIkdsb2JhbFIgcmVxdWVzdGVkXFxcXG5cXFwiKTtcXG4xMzI0OlxcdFxcdFxcdHZhbCA9IEdMR0VOX1JUUklHX0dMT0JSX007XFxuMTMyNTpcXHRcXHRcXHRicmVhaztcXG4xMzI2OlxcdFxcdGRlZmF1bHQ6XFxuMTMyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzI4OlxcdFxcdH1cXG4xMzI5OlxcdFxcbjEzMzA6XFx0XFx0dmFsIHw9IHJkMzIoaHcsIEdMR0VOX1JUUklHKTtcXG4xMzMxOlxcdFxcdHdyMzIoaHcsIEdMR0VOX1JUUklHLCB2YWwpO1xcbjEzMzI6XFx0XFx0aWNlX2ZsdXNoKGh3KTtcXG4xMzMzOlxcdFxcbjEzMzQ6XFx0XFx0Lyogd2FpdCBmb3IgdGhlIEZXIHRvIGJlIHJlYWR5ICovXFxuMTMzNTpcXHRcXHRyZXR1cm4gaWNlX2NoZWNrX3Jlc2V0KGh3KTtcXG4xMzM2OlxcdH1cXG4xMzM3OlxcdFxcbjEzMzg6XFx0LyoqXFxuMTMzOTpcXHQgKiBpY2VfY29weV9yeHFfY3R4X3RvX2h3IC0gQ29weSBwYWNrZWQgUnggcXVldWUgY29udGV4dCB0byBIVyByZWdpc3RlcnNcXG4xMzQwOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuMTM0MTpcXHQgKiBAcnhxX2N0eDogcG9pbnRlciB0byB0aGUgcGFja2VkIFJ4IHF1ZXVlIGNvbnRleHRcXG4xMzQyOlxcdCAqIEByeHFfaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgUnggcXVldWVcXG4xMzQzOlxcdCAqL1xcbjEzNDQ6XFx0c3RhdGljIHZvaWQgaWNlX2NvcHlfcnhxX2N0eF90b19odyhzdHJ1Y3QgaWNlX2h3ICpodyxcXG4xMzQ1OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGljZV9yeHFfY3R4X2J1Zl90ICpyeHFfY3R4LFxcbjEzNDY6XFx0XFx0XFx0XFx0XFx0ICAgdTMyIHJ4cV9pbmRleClcXG4xMzQ3OlxcdHtcXG4xMzQ4OlxcdFxcdC8qIENvcHkgZWFjaCBkd29yZCBzZXBhcmF0ZWx5IHRvIEhXICovXFxuMTM0OTpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIElDRV9SWFFfQ1RYX1NJWkVfRFdPUkRTOyBpKyspIHtcXG4xMzUwOlxcdFxcdFxcdHUzMiBjdHggPSAoKGNvbnN0IHUzMiAqKXJ4cV9jdHgpW2ldO1xcbjEzNTE6XFx0XFxuMTM1MjpcXHRcXHRcXHR3cjMyKGh3LCBRUlhfQ09OVEVYVChpLCByeHFfaW5kZXgpLCBjdHgpO1xcbjEzNTM6XFx0XFxuMTM1NDpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUUNUWCwgXFxcInFyeGRhdGFbJWRdOiAlMDhYXFxcXG5cXFwiLCBpLCBjdHgpO1xcbjEzNTU6XFx0XFx0fVxcbjEzNTY6XFx0fVxcbjEzNTc6XFx0XFxuMTM1ODpcXHQvKipcXG4xMzU5OlxcdCAqIGljZV9jb3B5X3J4cV9jdHhfZnJvbV9odyAtIENvcHkgcGFja2VkIFJ4IFF1ZXVlIGNvbnRleHQgZnJvbSBIVyByZWdpc3RlcnNcXG4xMzYwOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjQ1LjYyNjEzNjQ3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDA3NDMwMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgaWNlX3BmX3Jlc2V0YCoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGljZV9wZl9yZXNldGAuIFRoYXQgY29tbWFuZC4gSG1tLCB3ZWxsLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCdzIG9idmlvdXNseSBzb21ldGhpbmcgcmVsYXRlZCB0byBwb3dlci1mYWlsIHJlc2V0IGhhbmRsaW5nLiBNb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIGludGVncmF0ZWQgY2lyY3VpdCBlbXVsYXRpb24vcG93ZXIgZmFpbHVyZSBzaW11bGF0aW9uIGluIHRoZSBJQ0UgZGVidWdnZXIuIEknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gcmVjYWxsIHdoZXJlIEkndmUgZW5jb3VudGVyZWQgdGhpcyBiZWZvcmUg4oCTIHdoaWNoIHByb2plY3RzLCB3aGljaCBoYXJkd2FyZSwgYW5kIHRoZSBzcGVjaWZpYyBudWFuY2VzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgYSBjdXN0b20gc29sdXRpb24sIG9yIGEgd2VsbC1rbm93biBjb21tYW5kIHNldD8gSSdtIGFscmVhZHkgbWVudGFsbHkgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBhZ2FpbnN0IGFueSByZWNlbnQgZGVidWcgc2Vzc2lvbnMgd2hlcmUgcG93ZXIgaXNzdWVzIHdlcmUgc3VzcGVjdGVkLiBJJ20gc2VhcmNoaW5nIG15IGtub3dsZWRnZSBiYXNlIGZvciB0aGUgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgaXQncyBsaWtlbHkgdG8gYmUgdXNlZCB3aXRoLCBjb25zaWRlcmluZyBjb25zdHJhaW50cyBvZiB0aGUgaGFyZHdhcmUncyByZXNldCBjb250cm9sbGVyLiBNeSBmaXJzdCBwYXNzIHdvdWxkIGJlIHRvIGNvbnNpZGVyIHJlc2V0IHNlcXVlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjU0LjYzMzU2OTIxN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyNDYwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGludCBpY2VfcGZfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTExOTU9aW50IGljZV9jaGVja19yZXNldChzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTI1NC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjEyNTU6c3RhdGljIGludCBpY2VfcGZfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMjU2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTQ6NTQuNzA5ODI0Nzk1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTI2Mzk2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxODMwMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTQ6NTcuOTYyNDY2ODgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Nzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTU6XFx0c3RhdGljIGludCBpY2VfcGZfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpXFxuMTI1NjpcXHR7XFxuMTI1NzpcXHRcXHR1MzIgY250LCByZWc7XFxuMTI1ODpcXHRcXG4xMjU5OlxcdFxcdC8qIElmIGF0IGZ1bmN0aW9uIGVudHJ5IGEgZ2xvYmFsIHJlc2V0IHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCBpLmUuXFxuMTI2MDpcXHRcXHQgKiBzdGF0ZSBpcyBub3QgJ2RldmljZSBhY3RpdmUnIG9yIGFueSBvZiB0aGUgcmVzZXQgZG9uZSBiaXRzIGFyZSBub3RcXG4xMjYxOlxcdFxcdCAqIHNldCBpbiBHTE5WTV9VTEQsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgUEYgUmVzZXQ7IHBvbGwgdW50aWwgdGhlXFxuMTI2MjpcXHRcXHQgKiBnbG9iYWwgcmVzZXQgaXMgZG9uZS5cXG4xMjYzOlxcdFxcdCAqL1xcbjEyNjQ6XFx0XFx0aWYgKChyZDMyKGh3LCBHTEdFTl9SU1RBVCkgXFx1MDAyNiBHTEdFTl9SU1RBVF9ERVZTVEFURV9NKSB8fFxcbjEyNjU6XFx0XFx0ICAgIChyZDMyKGh3LCBHTE5WTV9VTEQpIFxcdTAwMjYgSUNFX1JFU0VUX0RPTkVfTUFTSykgXiBJQ0VfUkVTRVRfRE9ORV9NQVNLKSB7XFxuMTI2NjpcXHRcXHRcXHQvKiBwb2xsIG9uIGdsb2JhbCByZXNldCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgdW50aWwgZG9uZSAqL1xcbjEyNjc6XFx0XFx0XFx0aWYgKGljZV9jaGVja19yZXNldChodykpXFxuMTI2ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4xMjY5OlxcdFxcbjEyNzA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTI3MTpcXHRcXHR9XFxuMTI3MjpcXHRcXG4xMjczOlxcdFxcdC8qIFJlc2V0IHRoZSBQRiAqL1xcbjEyNzQ6XFx0XFx0cmVnID0gcmQzMihodywgUEZHRU5fQ1RSTCk7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdHdyMzIoaHcsIFBGR0VOX0NUUkwsIChyZWcgfCBQRkdFTl9DVFJMX1BGU1dSX00pKTtcXG4xMjc3OlxcdFxcbjEyNzg6XFx0XFx0LyogV2FpdCBmb3IgdGhlIFBGUiB0byBjb21wbGV0ZS4gVGhlIHdhaXQgdGltZSBpcyB0aGUgZ2xvYmFsIGNvbmZpZyBsb2NrXFxuMTI3OTpcXHRcXHQgKiB0aW1lb3V0IHBsdXMgdGhlIFBGUiB0aW1lb3V0IHdoaWNoIHdpbGwgYWNjb3VudCBmb3IgYSBwb3NzaWJsZSByZXNldFxcbjEyODA6XFx0XFx0ICogdGhhdCBpcyBvY2N1cnJpbmcgZHVyaW5nIGEgZG93bmxvYWQgcGFja2FnZSBvcGVyYXRpb24uXFxuMTI4MTpcXHRcXHQgKi9cXG4xMjgyOlxcdFxcdGZvciAoY250ID0gMDsgY250IFxcdTAwM2MgSUNFX0dMT0JBTF9DRkdfTE9DS19USU1FT1VUICtcXG4xMjgzOlxcdFxcdCAgICAgSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlQ7IGNudCsrKSB7XFxuMTI4NDpcXHRcXHRcXHRyZWcgPSByZDMyKGh3LCBQRkdFTl9DVFJMKTtcXG4xMjg1OlxcdFxcdFxcdGlmICghKHJlZyBcXHUwMDI2IFBGR0VOX0NUUkxfUEZTV1JfTSkpXFxuMTI4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjg3OlxcdFxcbjEyODg6XFx0XFx0XFx0bWRlbGF5KDEpO1xcbjEyODk6XFx0XFx0fVxcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRpZiAoY250ID09IElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UKSB7XFxuMTI5MjpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgXFxcIlBGIHJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxcXFxuXFxcIik7XFxuMTI5MzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4xMjk0OlxcdFxcdH1cXG4xMjk1OlxcdFxcbjEyOTY6XFx0XFx0cmV0dXJuIDA7XFxuMTI5NzpcXHR9XFxuMTI5ODpcXHRcXG4xMjk5OlxcdC8qKlxcbjEzMDA6XFx0ICogaWNlX3Jlc2V0IC0gUGVyZm9ybSBkaWZmZXJlbnQgdHlwZXMgb2YgcmVzZXRcXG4xMzAxOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuMTMwMjpcXHQgKiBAcmVxOiByZXNldCByZXF1ZXN0XFxuMTMwMzpcXHQgKlxcbjEzMDQ6XFx0ICogVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBhIHJlc2V0IGFzIHNwZWNpZmllZCBieSB0aGUgcmVxIHBhcmFtZXRlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTQ6NTcuOTYyNzE2MzkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU1NTkxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJY2UgUGxhdGZvcm0gUmVzZXQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpY2VfcGZfcmVzZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBqdXN0IHJlYWRpbmcgYW5kIHdyaXRpbmcgcmVnaXN0ZXJzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zIGlmIHRoZXJlJ3Mgbm8gYWN0dWFsIGhhcmR3YXJlIHByZXNlbnQ/IFRoZSByZWFkIG9wZXJhdGlvbiB3b3VsZCBsaWtlbHkgcmV0dXJuIGVpdGhlciBhbGwgb25lcywgbGlrZSBgMHhmZmZmZmZmZmAsIG9yIGFsbCB6ZXJvcywgZGVwZW5kaW5nIG9uIGhvdyBpdCdzIGltcGxlbWVudGVkLlxuXG5JZiB3ZSBnZXQgYDB4ZmZmZmZmZmZgIGJhY2sgZnJvbSB0aGF0IGluaXRpYWwgcmVhZCwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgY2hlY2sgb24gYChyZDMyKGh3LCBHTEdFTl9SU1RBVCkgXHUwMDI2IEdMR0VOX1JTVEFUX0RFVlNUQVRFX00pYC4gVGhhdCBiaXRmaWVsZCBtYXNraW5nIGlzIGludGVyZXN0aW5nOyBJIG5lZWQgdG8gZGlnIGludG8gYEdMR0VOX1JTVEFUYCB0byBzZWUgd2hhdCB0aG9zZSBmbGFncyByZXByZXNlbnQuIElmIHRoYXQgY29uZGl0aW9uIGhvbGRzLCBpdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gY2FsbCBgaWNlX2NoZWNrX3Jlc2V0KGh3KWAuIEFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGF0IGBpY2VfY2hlY2tfcmVzZXRgIGZ1bmN0aW9uIG5leHQgYW5kIHNlZSB3aGF0IHRoYXQgcGFydCBvZiB0aGUgY29kZSBpcyBkb2luZy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgcmVxdWlyZSB0aGF0IHJlc2V0IGNoZWNrIGFuZCB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTMxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MDEuODA4Mjc4MzU4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExOTU6XFx0aW50IGljZV9jaGVja19yZXNldChzdHJ1Y3QgaWNlX2h3ICpodylcXG4xMTk2OlxcdHtcXG4xMTk3OlxcdFxcdHUzMiBjbnQsIHJlZyA9IDAsIGdyc3RfdGltZW91dCwgdWxkX21hc2s7XFxuMTE5ODpcXHRcXG4xMTk5OlxcdFxcdC8qIFBvbGwgZm9yIERldmljZSBBY3RpdmUgc3RhdGUgaW4gY2FzZSBhIHJlY2VudCBDT1JFUiwgR0xPQlIsXFxuMTIwMDpcXHRcXHQgKiBvciBFTVBSIGhhcyBvY2N1cnJlZC4gVGhlIGdyc3QgZGVsYXkgdmFsdWUgaXMgaW4gMTAwbXMgdW5pdHMuXFxuMTIwMTpcXHRcXHQgKiBBZGQgMXNlYyBmb3Igb3V0c3RhbmRpbmcgQVEgY29tbWFuZHMgdGhhdCBjYW4gdGFrZSBhIGxvbmcgdGltZS5cXG4xMjAyOlxcdFxcdCAqL1xcbjEyMDM6XFx0XFx0Z3JzdF90aW1lb3V0ID0gRklFTERfR0VUKEdMR0VOX1JTVENUTF9HUlNUREVMX00sXFxuMTIwNDpcXHRcXHRcXHRcXHRcXHQgcmQzMihodywgR0xHRU5fUlNUQ1RMKSkgKyAxMDtcXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0Zm9yIChjbnQgPSAwOyBjbnQgXFx1MDAzYyBncnN0X3RpbWVvdXQ7IGNudCsrKSB7XFxuMTIwNzpcXHRcXHRcXHRtZGVsYXkoMTAwKTtcXG4xMjA4OlxcdFxcdFxcdHJlZyA9IHJkMzIoaHcsIEdMR0VOX1JTVEFUKTtcXG4xMjA5OlxcdFxcdFxcdGlmICghKHJlZyBcXHUwMDI2IEdMR0VOX1JTVEFUX0RFVlNUQVRFX00pKVxcbjEyMTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIxMTpcXHRcXHR9XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGlmIChjbnQgPT0gZ3JzdF90aW1lb3V0KSB7XFxuMTIxNDpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgXFxcIkdsb2JhbCByZXNldCBwb2xsaW5nIGZhaWxlZCB0byBjb21wbGV0ZS5cXFxcblxcXCIpO1xcbjEyMTU6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuMTIxNjpcXHRcXHR9XFxuMTIxNzpcXHRcXG4xMjE4OlxcdCNkZWZpbmUgSUNFX1JFU0VUX0RPTkVfTUFTS1xcdChHTE5WTV9VTERfUENJRVJfRE9ORV9NIHxcXFxcXFxuMTIxOTpcXHRcXHRcXHRcXHRcXHQgR0xOVk1fVUxEX1BDSUVSX0RPTkVfMV9NIHxcXFxcXFxuMTIyMDpcXHRcXHRcXHRcXHRcXHQgR0xOVk1fVUxEX0NPUkVSX0RPTkVfTSB8XFxcXFxcbjEyMjE6XFx0XFx0XFx0XFx0XFx0IEdMTlZNX1VMRF9HTE9CUl9ET05FX00gfFxcXFxcXG4xMjIyOlxcdFxcdFxcdFxcdFxcdCBHTE5WTV9VTERfUE9SX0RPTkVfTSB8XFxcXFxcbjEyMjM6XFx0XFx0XFx0XFx0XFx0IEdMTlZNX1VMRF9QT1JfRE9ORV8xX00gfFxcXFxcXG4xMjI0OlxcdFxcdFxcdFxcdFxcdCBHTE5WTV9VTERfUENJRVJfRE9ORV8yX00pXFxuMTIyNTpcXHRcXG4xMjI2OlxcdFxcdHVsZF9tYXNrID0gSUNFX1JFU0VUX0RPTkVfTUFTSyB8IChody1cXHUwMDNlZnVuY19jYXBzLmNvbW1vbl9jYXAucmRtYSA/XFxuMTIyNzpcXHRcXHRcXHRcXHRcXHRcXHQgIEdMTlZNX1VMRF9QRV9ET05FX00gOiAwKTtcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0LyogRGV2aWNlIGlzIEFjdGl2ZTsgY2hlY2sgR2xvYmFsIFJlc2V0IHByb2Nlc3NlcyBhcmUgZG9uZSAqL1xcbjEyMzA6XFx0XFx0Zm9yIChjbnQgPSAwOyBjbnQgXFx1MDAzYyBJQ0VfUEZfUkVTRVRfV0FJVF9DT1VOVDsgY250KyspIHtcXG4xMjMxOlxcdFxcdFxcdHJlZyA9IHJkMzIoaHcsIEdMTlZNX1VMRCkgXFx1MDAyNiB1bGRfbWFzaztcXG4xMjMyOlxcdFxcdFxcdGlmIChyZWcgPT0gdWxkX21hc2spIHtcXG4xMjMzOlxcdFxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcXFwiR2xvYmFsIHJlc2V0IHByb2Nlc3NlcyBkb25lLiAlZFxcXFxuXFxcIiwgY250KTtcXG4xMjM0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMzU6XFx0XFx0XFx0fVxcbjEyMzY6XFx0XFx0XFx0bWRlbGF5KDEwKTtcXG4xMjM3OlxcdFxcdH1cXG4xMjM4OlxcdFxcbjEyMzk6XFx0XFx0aWYgKGNudCA9PSBJQ0VfUEZfUkVTRVRfV0FJVF9DT1VOVCkge1xcbjEyNDA6XFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFxcXCJXYWl0IGZvciBSZXNldCBEb25lIHRpbWVkIG91dC4gR0xOVk1fVUxEID0gMHgleFxcXFxuXFxcIixcXG4xMjQxOlxcdFxcdFxcdFxcdCAgcmVnKTtcXG4xMjQyOlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjEyNDM6XFx0XFx0fVxcbjEyNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjAxLjgwODU4Mjc3OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTkxNTgxNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGljZWAgRHJpdmVyIFByb2JlIEZhaWx1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpY2VgIGRyaXZlciBhbmQgaG93IGl0J3MgZmFpbGluZyB0byBwcm9iZSwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoaXMgcGF0Y2guIElmIHRoZXJlJ3Mgbm8gcmVhbCBoYXJkd2FyZSBwcmVzZW50LCBgcmQzMmAgaXMgZ29pbmcgdG8gZ2l2ZSBtZSB0aGF0IHByZWRpY3RhYmxlIGAweGZmZmZmZmZmYCB2YWx1ZS4gQW5kIHNpbmNlIGBHTEdFTl9SU1RBVF9ERVZTVEFURV9NYCBpcyBwcm9iYWJseSBub24temVybywgdGhpcyBpcyBnb2luZyB0byBsZWFkIHRvIHRoZSBmaXJzdCBsb29wIHRpbWluZyBvdXQgYWZ0ZXIgYGdyc3RfdGltZW91dGAgaXRlcmF0aW9ucywgdWx0aW1hdGVseSByZXN1bHRpbmcgaW4gYSBgLUVJT2AgZXJyb3IgYW5kIHRoZSBgaWNlX2luaXRfaHdgIGZhaWxpbmcuIFRoYXQgbWVhbnMgdGhlIHdob2xlIGBpY2VfcHJvYmVgIHJvdXRpbmUgYml0ZXMgdGhlIGR1c3QuXG5cbkJ1dCwgaWYgc29tZWhvdyBgcmQzMmAgcmV0dXJucyBhIGNsZWFuIGAwYCwgdGhlbiBgR0xHRU5fUlNUQVRfREVWU1RBVEVfTWAgaXMgYWxzbyB6ZXJvLCBzbyB0aGUgZmlyc3QgbG9vcCBpcyBicm9rZW4uIE5vdyB3ZSdyZSBjaGVja2luZyBgR0xOVk1fVUxEYC4gVGhlIGNvZGUgdGhlbiBwZXJmb3JtcyBhIGNvbXBhcmlzb246IGByZWcgPT0gdWxkX21hc2tgLiBCZWNhdXNlIGAwICE9IHVsZF9tYXNrYCB0aGUgc2Vjb25kIGxvb3AgcnVucywgdGltaW5nIG91dCBhZnRlciBgSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlRgIGl0ZXJhdGlvbnMsIGFsc28gcmV0dXJuaW5nIGAtRUlPYC4gVGhhdCdzIGFub3RoZXIgd2F5IGBpY2VfcHJvYmVgIGZhaWxzLlxuXG5Tbywgd2l0aG91dCBhIGxpdmUgcGllY2Ugb2YgaGFyZHdhcmUsIG9yIGEgdmVyeSBzbWFydCBlbXVsYXRvciBjYXBhYmxlIG9mIHNpbXVsYXRpbmcgdGhlc2UgY3J1Y2lhbCByZWdpc3RlciBpbnRlcmFjdGlvbnMgbGlrZSBgR0xHRU5fUlNUQVRgIGFuZCBgR0xOVk1fVUxEYCwgdGhlIGRyaXZlciBpcyBnb2luZyB0byBib21iIG91dC4gQW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgd2VsbCwgU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSB0aGF0IGxldmVsIG9mIHNvcGhpc3RpY2F0aW9uIHdpdGggdGhpcyBgaWNlYCBkcml2ZXIhIEl0J3MgbGlrZWx5IHVzaW5nIGBzeXpfcGNpYCBvciBzb21ldGhpbmcgc2ltaWxhciBqdXN0IHRvIG1hcCBtZW1vcnkgYW5kIHRocm93IHJhbmRvbSB2YWx1ZXMsIGJ1dCB0aGF0IGRvZXNuJ3QgaGVscCB3aXRoIHRoZSBwb2xsaW5nIGxvb3BzLiBJdCB3b24ndCByZXNwb25kIGluIHRoZSB3YXkgdGhlIGRyaXZlciBleHBlY3RzLlxuXG5Ib2xkIG9uLCB0aG91Z2gsIHdoYXQgaWYgdGhpcyBwYXRjaCAqaXNuJ3QqIGRpcmVjdGx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgcHJvYmluZz8gTWF5YmUgaXQncyBhYm91dCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZS4gTm93IHRoYXQncyBpbnRlcmVzdGluZy4gSWYgdGhlIGRyaXZlciBjYW4ndCBwcm9iZSwgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgKndvbid0KiBiZSByZWdpc3RlcmVkLiBXaGljaCBtZWFucyB0aGF0IGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZS4gVGhhdCdzIGEgc3Ryb25nIGNvbm5lY3Rpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoZSBEUExMIGludGVyZmFjZSBpcyBhY3R1YWxseSBpbml0aWFsaXplZCB3aXRoaW4gdGhpcyBkcml2ZXIgdG8gc2VlIGlmIHRoYXQncyB0aGUgcG9pbnQgb2YgdGhpcyBwYXRjaC4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MDguODAwMTY2MjMzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NjYwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2RwbGxfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTMyNjg9c3RhdGljIHZvaWQgaWNlX2RwbGxfcGVyaW9kaWNfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzMxMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzEzOiAqIGljZV9kcGxsX2luaXRfcmVmX3N5bmNfaW5wdXRzIC0gaW5pdGlhbGl6ZSByZWZlcmVuY2Ugc3luYyBwaW4gcGFpcnNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zMzE0LSAqIEBwZjogcGYgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMjItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MzMyMzpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfcmVmX3N5bmNfaW5wdXRzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMjQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MzU1Nz1pY2VfZHBsbF9kZWluaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzU3MC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozNTcxOiAqIGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMgLSBpbml0aWFsaXplIGRpcmVjdCBwaW5zXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzU3Mi0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zNTg4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozNTg5OmljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM1OTAtXFx0XFx0XFx0ICBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW5zLCBpbnQgc3RhcnRfaWR4LCBpbnQgY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zNzUzPXN0YXRpYyBpbnQgaWNlX2RwbGxfcGluX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM3ODYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzc4NzogKiBpY2VfZHBsbF9pbml0X3Bpbl9jb21tb24gLSBpbml0aWFsaXplIHBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM3ODgtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MzgwMD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MzgwMTppY2VfZHBsbF9pbml0X3Bpbl9jb21tb24oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zODAyLVxcdFxcdFxcdCBpbnQgc3RhcnRfaWR4LCBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zODQ1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM4NDY6ICogaWNlX2RwbGxfaW5pdF9yY2xrX3BpbiAtIGluaXRpYWxpemUgcmVjb3ZlcmVkIGNsb2NrIHBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NDctICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9Mzg1OD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzg1OTppY2VfZHBsbF9pbml0X3JjbGtfcGluKHN0cnVjdCBpY2VfcGYgKnBmLCBpbnQgc3RhcnRfaWR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjAtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzg2NTpcXHRyZXQgPSBpY2VfZHBsbF9pbml0X3Bpbl9jb21tb24ocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMucmNsaywgc3RhcnRfaWR4LCBvcHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTM5OTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM5OTY6aWNlX2RwbGxfaW5pdF9md25vZGVfcGluKHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbiwgY29uc3QgY2hhciAqbmFtZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zOTk3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwMzktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDA0MDogKiBpY2VfZHBsbF9pbml0X2Z3bm9kZV9waW5zIC0gaW5pdGlhbGl6ZSBwaW5zIGZyb20gZGV2aWNlIHRyZWVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDQxLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQwNTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQwNTY6aWNlX2RwbGxfaW5pdF9md25vZGVfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGlucyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDU3LVxcdFxcdFxcdCAgaW50IHN0YXJ0X2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwNjgtXFx0XFx0c25wcmludGYocGluX25hbWUsIHNpemVvZihwaW5fbmFtZSksIFxcXCJyY2xrJXVcXFwiLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MDY5OlxcdFxcdHJldCA9IGljZV9kcGxsX2luaXRfZndub2RlX3BpbihcXHUwMDI2cGluc1tzdGFydF9pZHggKyBpXSwgcGluX25hbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwNzAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDA4OTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfdHhjbGtfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgaW50IHN0YXJ0X2lkeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxMDktXFx0cmVmX3BpbisrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQxMTA6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9md25vZGVfcGluKHJlZl9waW4sIGljZV9kcGxsX2Z3bm9kZV9leHRfc3luY2UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxMTEtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNDctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE0ODogKiBpY2VfZHBsbF9pbml0X3BpbnNfZTgyNSAtIGluaXQgcGlucyBhbmQgcmVnaXN0ZXIgcGlucyB3aXRoIGEgZHBsbHNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTQ5LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNTgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE1OTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfcGluc19lODI1KHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTYzOlxcdHJldCA9IGljZV9kcGxsX2luaXRfZndub2RlX3BpbnMocGYsIHBmLVxcdTAwM2VkcGxscy5pbnB1dHMsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE2NzpcXHRyZXQgPSBpY2VfZHBsbF9pbml0X3JjbGtfcGluKHBmLCBEUExMX1BJTl9JRFhfVU5TUEVDLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjgtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aWNlX2RwbGxfcmNsa19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTczOlxcdHJldCA9IGljZV9kcGxsX2luaXRfdHhjbGtfcGlucyhwZiwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE3NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE4OS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTkwOiAqIGljZV9kcGxsX2luaXRfcGlucyAtIGluaXQgcGlucyBhbmQgcmVnaXN0ZXIgcGlucyB3aXRoIGEgZHBsbHNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTkxLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMDAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIwMTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMTA6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cXHUwMDNlZHBsbHMuaW5wdXRzLCAwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTEtXFx0XFx0XFx0XFx0XFx0cGYtXFx1MDAzZWRwbGxzLm51bV9pbnB1dHMsIGlucHV0X29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTctXFx0aWYgKGNndSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMTg6XFx0XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cXHUwMDNlZHBsbHMub3V0cHV0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE5LVxcdFxcdFxcdFxcdFxcdFxcdGNvdW50LCBwZi1cXHUwMDNlZHBsbHMubnVtX291dHB1dHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjI1LVxcdFxcdGlmICghcGYtXFx1MDAzZWRwbGxzLmdlbmVyaWMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MjI2OlxcdFxcdFxcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXFx1MDAzZWRwbGxzLnNtYSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjI3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvdW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIzNC1cXHRcXHRcXHRjb3VudCArPSBJQ0VfRFBMTF9QSU5fU1dfTlVNO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMzU6XFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cXHUwMDNlZHBsbHMudWZsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMzYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyNTc6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9yY2xrX3BpbihwZiwgY291bnQgKyBwZi1cXHUwMDNlcHRwLnBvcnQucG9ydF9udW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDI1OC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZpY2VfZHBsbF9yY2xrX29wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00Mjk0PWljZV9kcGxsX2RlaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDMwMS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MzAyOiAqIGljZV9kcGxsX2luaXRfZHBsbCAtIGluaXRpYWxpemUgZHBsbCBkZXZpY2UgaW4gZHBsbCBzdWJzeXN0ZW1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MzAzLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzMTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQzMTY6aWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQzMTctXFx0XFx0ICAgZW51bSBkcGxsX3R5cGUgdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzNTY9c3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X3dvcmtlcihzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQzNjQtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDM2NTogKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDM2Ni0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00Mzc0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQzNzU6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X3dvcmtlcihzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00Mzc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzOTc9c3RhdGljIHZvaWQgaWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KHN0cnVjdCBkcGxsX3Bpbl9waGFzZV9hZGp1c3RfcmFuZ2UgKnJhbmdlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQwNC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NDA1OiAqIGljZV9kcGxsX2luaXRfaW5mb19waW5zX2dlbmVyaWMgLSBpbml0aWFsaXplcyBnZW5lcmljIHBpbnMgaW5mb1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ0MDYtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQxNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NDE1OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3BpbnNfZ2VuZXJpYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbnB1dClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDE2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ0NzEtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDQ3MjogKiBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMgLSBpbml0aWFsaXplcyBkaXJlY3QgcGlucyBpbmZvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQ3My0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00NDgzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NDg0OmljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDg1LVxcdFxcdFxcdCAgICAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBpbl90eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDUxMy1cXHRcXHRwZi1cXHUwMDNlZHBsbHMuZ2VuZXJpYyA9IHRydWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDUxNDpcXHRcXHRyZXR1cm4gaWNlX2RwbGxfaW5pdF9pbmZvX3BpbnNfZ2VuZXJpYyhwZiwgaW5wdXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1MTUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU1My1cXHRpZiAoaW5wdXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDU1NDpcXHRcXHRyZXQgPSBpY2VfZHBsbF9pbml0X3JlZl9zeW5jX2lucHV0cyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU1NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NTktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDU2MDogKiBpY2VfZHBsbF9pbml0X2luZm9fcGluX29uX3Bpbl9lODI1YyAtIGluaXRpYWxpemVzIHJjbGsgcGluIGluZm9ybWF0aW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU2MS0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTY3LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ1Njg6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fcGluX29uX3Bpbl9lODI1YyhzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTY5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NzktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDU4MDogKiBpY2VfZHBsbF9pbml0X2luZm9fcmNsa19waW4gLSBpbml0aWFsaXplcyByY2xrIHBpbiBpbmZvcm1hdGlvblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1ODEtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU4OC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NTg5OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3JjbGtfcGluKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1OTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDYwMS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NjAyOiAqIGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zIC0gaW5pdGlhbGl6ZXMgc29mdHdhcmUgY29udHJvbGxlZCBwaW4gaW5mb3JtYXRpb25cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NjAzLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ2MTEtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDYxMjpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ2MTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDcxMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzEzOiAqIGljZV9kcGxsX2luaXRfaW5mb190eGNsa19waW5zX2U4MjVjIC0gaW5pdGlhbGl6ZXMgdHgtY2xrIHBpbnMgaW5mb3JtYXRpb25cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzE0LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3MjAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDcyMTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb190eGNsa19waW5zX2U4MjVjKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc0Mi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzQzOiAqIGljZV9kcGxsX2luaXRfcGluc19pbmZvIC0gaW5pdCBwaW5zIGluZm8gd3JhcHBlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NDQtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDc1Mz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc1NDppY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwaW5fdHlwZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NTgtXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc1OTpcXHRcXHRyZXR1cm4gaWNlX2RwbGxfaW5pdF9pbmZvX2RpcmVjdF9waW5zKHBmLCBwaW5fdHlwZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2MC1cXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2MS1cXHRcXHRpZiAocGYtXFx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3NjI6XFx0XFx0XFx0cmV0dXJuIGljZV9kcGxsX2luaXRfaW5mb19waW5fb25fcGluX2U4MjVjKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzYzLVxcdFxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzY0OlxcdFxcdFxcdHJldHVybiBpY2VfZHBsbF9pbml0X2luZm9fcmNsa19waW4ocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NjUtXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9TT0ZUV0FSRTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzY2OlxcdFxcdHJldHVybiBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzY4LVxcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfVFhDTEs6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc2OTpcXHRcXHRyZXR1cm4gaWNlX2RwbGxfaW5pdF9pbmZvX3R4Y2xrX3BpbnNfZTgyNWMocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NzAtXFx0ZGVmYXVsdDpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NzgtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0Nzc5OiAqIFJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBmb3IgcGlucyBieSBpY2VfZHBsbF9pbml0X2luZm8gZnVuY3Rpb24uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc4MC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00NzgxPXN0YXRpYyB2b2lkIGljZV9kcGxsX2RlaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc5My0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0Nzk0OiAqIGljZV9kcGxsX2luaXRfaW5mb19lODI1YyAtIHByZXBhcmUgcGYncyBkcGxsIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBmb3IgZTgyNWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00Nzk1LSAqIGRldmljZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDgwMy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODA0OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4MDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDgyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODI5OlxcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9SQ0xLX0lOUFVUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODMwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODMyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4MzM6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX1RYQ0xLKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODM0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODQ2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4NDc6ICogaWNlX2RwbGxfaW5pdF9pbmZvIC0gcHJlcGFyZSBwZidzIGRwbGwgaW5mb3JtYXRpb24gc3RydWN0dXJlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDg0OC0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODU2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4NTc6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm8oc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDkwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTAyOlxcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDkwMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDkxMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTE0OlxcdFxcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MTUtXFx0XFx0aWYgKHJldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00OTE2LVxcdFxcdFxcdGdvdG8gZGVpbml0X2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDkxNzpcXHRcXHRyZXQgPSBpY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhwZiwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MTgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MjctXFx0XFx0cGYtXFx1MDAzZWRwbGxzLnJjbGsucGFyZW50X2lkeFtpXSA9IGQtXFx1MDAzZWJhc2VfcmNsa19pZHggKyBpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ5Mjg6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MjktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQ5NjA9dm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDAwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwMDE6ICogaWNlX2RwbGxfaW5pdF9lODI1IC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciBkcGxsIHN1YnN5c3RlbVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMDItICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTAwOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDEwOnN0YXRpYyB2b2lkIGljZV9kcGxsX2luaXRfZTgyNShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTAzNTpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X2luZm9fZTgyNWMocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzYtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDM3LVxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTAzODpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMudHhjLCBmYWxzZSwgRFBMTF9UWVBFX0dFTkVSSUMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzktXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDQwLVxcdFxcdGdvdG8gZGVpbml0X2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA0MTpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X3BpbnNfZTgyNShwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA0Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA1OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDU5OiAqIGljZV9kcGxsX2luaXRfZTgxMCAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDYwLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNjctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA2ODpzdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MTAoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDc0LVxcdG11dGV4X2luaXQoXFx1MDAyNmQtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwNzU6XFx0ZXJyID0gaWNlX2RwbGxfaW5pdF9pbmZvKHBmLCBjZ3UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNzYtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDc3LVxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA3ODpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMuZWVjLCBjZ3UsIERQTExfVFlQRV9FRUMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNzktXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDgwLVxcdFxcdGdvdG8gZGVpbml0X2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA4MTpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMucHBzLCBjZ3UsIERQTExfVFlQRV9QUFMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwODItXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDgzLVxcdFxcdGdvdG8gZGVpbml0X2VlYztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDg0OlxcdGVyciA9IGljZV9kcGxsX2luaXRfcGlucyhwZiwgY2d1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDg1LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDg3LVxcdGlmIChjZ3UpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDg4OlxcdFxcdGVyciA9IGljZV9kcGxsX2luaXRfd29ya2VyKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDg5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MTA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUxMDk6dm9pZCBpY2VfZHBsbF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTExMi1cXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUxMTM6XFx0XFx0aWNlX2RwbGxfaW5pdF9lODI1KHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MTE0LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTUtXFx0ZGVmYXVsdDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MTE2OlxcdFxcdGljZV9kcGxsX2luaXRfZTgxMChwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTExNy1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oPTE3Mj1zdHJ1Y3QgaWNlX2RwbGxzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oLTIwMi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFRQXzE1ODhfQ0xPQ0spXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmg6MjAzOnZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgtMjA0LXZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaC0yMDUtI2Vsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaDoyMDY6c3RhdGljIGlubGluZSB2b2lkIGljZV9kcGxsX2luaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oLTIwNy1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKSB7IH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3MjE9c3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzM2LVxcdCAgICBpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX1BIWV9SQ0xLKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo0NzM3OlxcdFxcdGljZV9kcGxsX2luaXQocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ3MzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjA4LjkzMjk0MTI1MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTQyOTY2NjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBJbml0aWFsaXphdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYGljZV9kcGxsX2luaXRgIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCdzIGtpY2tlZCBvZmYgZnJvbSBgaWNlX2luaXRfZmVhdHVyZXNgLiBBbmQgd2hlcmUgZG9lcyAqdGhhdCogY29tZSBmcm9tPyBBaCwgdGhhdCdzIGNhbGxlZCBmcm9tIGBpY2VfcHJvYmVgIOKAkyBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgY29udGV4dC4gQnV0IGhvbGQgb24sIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGlzIHN0cmFpZ2h0LiBZZXMsIHRoZSBwYXJlbnQgb2YgYGljZV9pbml0X2ZlYXR1cmVzYCBpcyBkZWZpbml0ZWx5IGBpY2VfcHJvYmVgLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGUgd2VlZHMsIEkgdGhpbmsgaXQncyBwcnVkZW50IHRvIGp1c3QgcXVpY2tseSB2ZXJpZnkgd2hlcmUgYGljZV9pbml0X2ZlYXR1cmVzYCBpcyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGwgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MzAuMzYyNjExMjE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODY3ODEyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2luaXRfZmVhdHVyZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00NzExPXZvaWQgaWNlX2RlaW5pdF9kZXYoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ3MjE6c3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDcyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MDI5PWludCBpY2VfbG9hZChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUwNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTA2ODpcXHRpY2VfaW5pdF9mZWF0dXJlcyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTA2OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MzAuNzQ5Mzk4MzQ5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTQ4NTk1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIEhpZXJhcmNoeSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhhdCBgaWNlX2xvYWRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgaWNlX3Byb2JlYC4gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUsIHRoZSBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIGdyYXNwLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnM6IHdoYXQncyB0aGUgcHVycG9zZSBvZiBgaWNlX3Byb2JlYCBhbmQgaG93IGRvZXMgYGljZV9sb2FkYCBmaXQgaW50byB0aGF0IHByb2Nlc3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIHRoZSBmdW5jdGlvbmFsIGRlcGVuZGVuY3kuIElzIGBpY2VfbG9hZGAgYSBjb3JlIGNvbXBvbmVudCBvZiBgaWNlX3Byb2JlYCwgb3IgaXMgaXQgYSBzdXBwb3J0aW5nIHV0aWxpdHkgY2FsbGVkIG9wcG9ydHVuaXN0aWNhbGx5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgYXJyYW5nZW1lbnQsIGJhc2VkIG9uIGJlc3QgcHJhY3RpY2VzIHdpdGhpbiB0aGlzIHN5c3RlbSBvciBzaW1pbGFyIHN5c3RlbXMgSSd2ZSB3b3JrZWQgb24/IE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gZm9ybSBwb3RlbnRpYWwgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBsaWtlIGVycm9yIGhhbmRsaW5nLCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcmF0aW9uYWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE1MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjMzLjk0NDI2MDc5OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MDA0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2xvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTIzNT1zdGF0aWMgaW50IGljZV9kZXZsaW5rX3JlaW5pdF91cChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjcxLVxcdC8qIE5vIG5lZWQgdG8gdGFrZSBkZXZsX2xvY2ssIGl0J3MgYWxyZWFkeSB0YWtlbiBieSBkZXZsaW5rIEFQSSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMjcyOlxcdGVyciA9IGljZV9sb2FkKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI3My1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oPTEwNTU9dm9pZCBpY2Vfc3RhcnRfc2VydmljZV90YXNrKHN0cnVjdCBpY2VfcGYgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmg6MTA1NjppbnQgaWNlX2xvYWQoc3RydWN0IGljZV9wZiAqcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC0xMDU3LXZvaWQgaWNlX3VubG9hZChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00MTgxPXN0YXRpYyB2b2lkIGljZV9sb2dfcGtnX2luaXQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2RkcF9zdGF0ZSBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQyNTctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDI1ODogKiBpY2VfbG9hZF9wa2cgLSBsb2FkL3JlbG9hZCB0aGUgRERQIFBhY2thZ2UgZmlsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQyNTktICogQGZpcm13YXJlOiBmaXJtd2FyZSBzdHJ1Y3R1cmUgd2hlbiBmaXJtd2FyZSByZXF1ZXN0ZWQgb3IgTlVMTCBmb3IgcmVsb2FkXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00MjY1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDI2NjppY2VfbG9hZF9wa2coY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDI2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00NTM1PXN0YXRpYyBpbnQgaWNlX2luaXRfZGRwX2NvbmZpZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NTU1LVxcdC8qIERvd25sb2FkIGZpcm13YXJlIHRvIGRldmljZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ1NTY6XFx0aWNlX2xvYWRfcGtnKGZpcm13YXJlLCBwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDU1Ny1cXHRyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUwMTM9c3RhdGljIHZvaWQgaWNlX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUwMjMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTAyNDogKiBpY2VfbG9hZCAtIGxvYWQgcGYgYnkgaW5pdCBodyBhbmQgc3RhcnRpbmcgVlNJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTAyNS0gKiBAcGY6IHBvaW50ZXIgdG8gdGhlIHBmIGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDI4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUwMjk6aW50IGljZV9sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUwMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTE1NT1pY2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI2NS1cXHRkZXZsX2xvY2socHJpdl90b19kZXZsaW5rKHBmKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI2NjpcXHRlcnIgPSBpY2VfbG9hZChwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI2Ny1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NzYzNz1zdGF0aWMgdm9pZCBpY2VfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NjczLVxcdFxcdFxcdC8qIFJlbG9hZCBERFAgUGFja2FnZSBhZnRlciBDT1JFUi9HTE9CUiByZXNldCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjc2NzQ6XFx0XFx0XFx0aWNlX2xvYWRfcGtnKE5VTEwsIHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03Njc1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MzQuMDA3NjY3Mjg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTQ5NTQ2MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFBMTCBOZXRsaW5rIEludGVyZmFjZSdzIFZ1bG5lcmFiaWxpdHkgV2luZG93KipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIGBpY2VfbG9hZGAgZ2V0cyBjYWxsZWQgZnJvbSBgaWNlX3Byb2JlYCwgd2hpY2ggaXMgZmluZS4gQnV0IEknbSBub3RpY2luZyB0aGF0IGBpY2VfbG9hZGAgaXMgY2FsbGVkICphZnRlciogYGljZV9pbml0X2h3YC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGljZV9pbml0X2h3YCBpcyB0aGUgZ2F0ZWtlZXBlcjsgaXQgYmFpbHMgb3V0IGlmIGl0IGRvZXNuJ3QgZGV0ZWN0IHRoZSByZWFsIGhhcmR3YXJlLiBJZiBgaWNlX2luaXRfaHdgIGZhaWxzLCBgaWNlX2xvYWRgIG5ldmVyIGdldHMgY2FsbGVkLiBBbmQgdGhhdCBtZWFucyBgaWNlX2RwbGxfaW5pdGAgd29uJ3QgcnVuLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGZvciB0aGlzIHNwZWNpZmljIGRldmljZSBuZXZlciBnZXRzIHJlZ2lzdGVyZWQuIFRodXMsIHRoZSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4gKGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgKSBhcmUgdW5yZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rLlxuXG5Ob3csIG15IG1pbmQgaXMgcmFjaW5nLiBJcyB0aGVyZSBhbnkgd2F5IHN5emthbGxlciBjb3VsZCBjaXJjdW12ZW50IGBpY2VfaW5pdF9od2A/IERvZXMgaXQgaGF2ZSBhIG1lY2hhbmlzbSB0byBieXBhc3MgdGhpcyBpbml0aWFsIGhhcmR3YXJlIGNoZWNrPyBOb3BlLiBTeXprYWxsZXIncyBzdHJlbmd0aCBsaWVzIGluIGl0cyBhYmlsaXR5IHRvIGZ1enogYW5kIHByb3ZpZGUgaW5wdXQsIHBhcnRpY3VsYXJseSBQQ0kgbWVtb3J5IHJlYWRzLCBidXQgaXQgY2FuJ3QgZnVuZGFtZW50YWxseSBhbHRlciB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIHBhdGguIEl0IGNhbiBvbmx5IGZlZWQgdGhlIGJlYXN0LlxuXG5Pa2F5LCBsZXQncyBleHBsb3JlIHRoaXMuIElmIHN5emthbGxlciB0aHJvd3MgcmFuZG9tIHZhbHVlcyBhdCBQQ0kgbWVtb3J5IHJlYWRzLCBgaWNlX2luaXRfaHdgIHdpbGwgbGlrZWx5IGZhaWwuIEl0IGV4cGVjdHMgc3BlY2lmaWMgcmVnaXN0ZXIgc2VxdWVuY2VzIGFuZCB2YWx1ZXMsIGxpa2UgYEdMR0VOX1JTVEFUX0RFVlNUQVRFX01gIHRvIGJlIDAgYW5kIHNwZWNpZmljIGJpdHMgaW4gYEdMTlZNX1VMRGAgc2V0LiBUaGUgcHJvYmFiaWxpdHkgb2Ygc3l6a2FsbGVyIHN0dW1ibGluZyB1cG9uIHRoZSBleGFjdCByZWdpc3RlciByZWFkIHNlcXVlbmNlIG5lZWRlZCB0byBwYXNzIGBpY2VfY2hlY2tfcmVzZXRgIGFuZCBvdGhlciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzdGVwcyBpcyBwcmFjdGljYWxseSB6ZXJvLiBJdCdzIGEgbmVlZGxlIGluIGEgaGF5c3RhY2ssIGEgY29tYmluYXRvcmlhbCBleHBsb3Npb24gb2YgaW1wcm9iYWJsZSB2YWx1ZXMuXG5cbldhaXQuLi4gZG9lcyBgc3l6X3BjaWAgZXZlbiBzdXBwb3J0IGR5bmFtaWMgcmVzcG9uc2VzIHRvIG1lbW9yeSByZWFkcz8gVXN1YWxseSwgaXQncyBqdXN0IGEgc2hhcmVkIG1lbW9yeSByZWdpb24gbWFwcGluZywgc28gYW55IHJlYWRzIHdpbGwgcmV0dXJuIHdoYXRldmVyIGlzIHByZS1wb3B1bGF0ZWQgaW4gdGhhdCBtZW1vcnkuIElmIGl0J3MgYSBzdGF0aWMgcmVnaW9uLCBgcmQzMmAgd291bGQgY29uc2lzdGVudGx5IHJldHVybiB0aGUgc2FtZSB2YWx1ZS5cblxuTGV0J3Mgem9vbSBpbiBvbiBgaWNlX2NoZWNrX3Jlc2V0YC4gSSBzZWUgYSBsb29wIGxpa2UgdGhpczpcblxuYGBgY1xuXHRmb3IgKGNudCA9IDA7IGNudCBcdTAwM2MgZ3JzdF90aW1lb3V0OyBjbnQrKykge1xuXHRcdG1kZWxheSgxMDApO1xuXHRcdHJlZyA9IHJkMzIoaHcsIEdMR0VOX1JTVEFUKTtcblx0XHRpZiAoIShyZWcgXHUwMDI2IEdMR0VOX1JTVEFUX0RFVlNUQVRFX00pKVxuXHRcdFx0YnJlYWs7XG5cdH1cbmBgYFxuXG5JZiB0aGUgbWVtb3J5IG1hcHBlZCBieSBzeXprYWxsZXIgaGFwcGVucyB0byBoYXZlIGBHTEdFTl9SU1RBVF9ERVZTVEFURV9NYCBjbGVhcmVkLCB0aGUgbG9vcCBicmVha3MgZWFybHkuIFRoZW46XG5cbmBgYGNcblx0Zm9yIChjbnQgPSAwOyBjbnQgXHUwMDNjIElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UOyBjbnQrKykge1xuXHRcdHJlZyA9IHJkMzIoaHcsIEdMTlZNX1VMRCkgXHUwMDI2IHVsZF9tYXNrO1xuXHRcdGlmIChyZWcgPT0gdWxkX21hc2spIHtcblx0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcIkdsb2JhbCByZXNldCBwcm9jZXNzZXMgZG9uZS4gJWRcXG5cIiwgY250KTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRtZGVsYXkoMTApO1xuXHR9XG5gYGBcblxuSWYgdGhlIG1lbW9yeSdzIGJpdHMgZm9yIGB1bGRfbWFza2AgaGFwcGVuIHRvIGJlIHNldCBjb3JyZWN0bHksIGFnYWluLCBpdCB3aWxsIGJyZWFrLiBJdCdzIGltcHJvYmFibGUsIGJ1dCBub3QgaW1wb3NzaWJsZS5cblxuVGhlIGNhdmVhdCBoZXJlIGlzIHRoYXQgYEdMR0VOX1JTVEFUYCBhbmQgYEdMTlZNX1VMRGAgYXJlIGF0IGRpZmZlcmVudCBvZmZzZXRzLiBJZiBzeXprYWxsZXIgbWFwcyBhIG1lbW9yeSByZWdpb24gYW5kIGxvYWRzIGl0IHdpdGggcmFuZG9tIGJ5dGVzLCBpdCBtaWdodCAqYWNjaWRlbnRhbGx5KiBoYXZlIHRoZSByaWdodCBiaXRzIGluIHRoZSByaWdodCBwbGFjZXMuIEl0IGlzIHN0aWxsIGEgdmVyeSBpbXByb2JhYmxlIHBhdGguIEJ1dCwgZXZlbiBpZiBpdCBoYXBwZW5zLCB0aGVyZSBhcmUgbWFueSBvdGhlciBjaGVja3MgaW4gYGljZV9pbml0X2h3YC4gRm9yIGluc3RhbmNlLCBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgIHJlcXVpcmVzIHNldHRpbmcgdXAgcmluZ3MgYW5kIHdhaXRpbmcgZm9yIGhhcmR3YXJlIHRvIHVwZGF0ZSBoZWFkL3RhaWwgcG9pbnRlcnMgb3Igc3RhdHVzIGJpdHMuIExldCBtZSBnbyBjaGVjayBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjQ1LjE1NzIxNzgwMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk4MTY3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGljZV9jcmVhdGVfYWxsX2N0cmxxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaD04Nj1pbnQgaWNlX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9yZXNldF9yZXEgcmVxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oOjg3OmludCBpY2VfY3JlYXRlX2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04OC1pbnQgaWNlX2luaXRfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYz03ODY9c3RhdGljIHZvaWQgaWNlX2luaXRfY3RybHFfbG9ja3Moc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy04MDctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jOjgwODppbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTgwOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjQ1LjI0NzA0MDE0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTgyOTczODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjozNDQ4MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6NDguNzA1MzM5OTEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODA4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODA4OlxcdGludCBpY2VfY3JlYXRlX2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gODA5OlxcdHtcXG4gODEwOlxcdFxcdGljZV9pbml0X2N0cmxxX2xvY2tzKFxcdTAwMjZody1cXHUwMDNlYWRtaW5xKTtcXG4gODExOlxcdFxcdGlmIChpY2VfaXNfc2JxX3N1cHBvcnRlZChodykpXFxuIDgxMjpcXHRcXHRcXHRpY2VfaW5pdF9jdHJscV9sb2NrcyhcXHUwMDI2aHctXFx1MDAzZXNicSk7XFxuIDgxMzpcXHRcXHRpY2VfaW5pdF9jdHJscV9sb2NrcyhcXHUwMDI2aHctXFx1MDAzZW1haWxib3hxKTtcXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0cmV0dXJuIGljZV9pbml0X2FsbF9jdHJscShodyk7XFxuIDgxNjpcXHR9XFxuIDgxNzpcXHRcXG4gODE4OlxcdC8qKlxcbiA4MTk6XFx0ICogaWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MgLSBEZXN0cm95IGxvY2tzIGZvciBhIGNvbnRyb2wgcXVldWVcXG4gODIwOlxcdCAqIEBjcTogcG9pbnRlciB0byB0aGUgY29udHJvbCBxdWV1ZVxcbiA4MjE6XFx0ICpcXG4gODIyOlxcdCAqIERlc3Ryb3lzIHRoZSBzZW5kIGFuZCByZWNlaXZlIHF1ZXVlIGxvY2tzIGZvciBhIGdpdmVuIGNvbnRyb2wgcXVldWUuXFxuIDgyMzpcXHQgKi9cXG4gODI0OlxcdHN0YXRpYyB2b2lkIGljZV9kZXN0cm95X2N0cmxxX2xvY2tzKHN0cnVjdCBpY2VfY3RsX3FfaW5mbyAqY3EpXFxuIDgyNTpcXHR7XFxuIDgyNjpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZjcS1cXHUwMDNlc3FfbG9jayk7XFxuIDgyNzpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZjcS1cXHUwMDNlcnFfbG9jayk7XFxuIDgyODpcXHR9XFxuIDgyOTpcXHRcXG4gODMwOlxcdC8qKlxcbiA4MzE6XFx0ICogaWNlX2Rlc3Ryb3lfYWxsX2N0cmxxIC0gZXhpdCByb3V0aW5lIGZvciBhbGwgY29udHJvbCBxdWV1ZXNcXG4gODMyOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuIDgzMzpcXHQgKlxcbiA4MzQ6XFx0ICogVGhpcyBmdW5jdGlvbiBzaHV0cyBkb3duIGFsbCB0aGUgY29udHJvbCBxdWV1ZXMgYW5kIHRoZW4gZGVzdHJveXMgdGhlXFxuIDgzNTpcXHQgKiBjb250cm9sIHF1ZXVlIGxvY2tzLiBJdCBzaG91bGQgYmUgY2FsbGVkIG9uY2UgZHVyaW5nIGRyaXZlciB1bmxvYWQuIFRoZVxcbiA4MzY6XFx0ICogZHJpdmVyIHNob3VsZCBjYWxsIGljZV9zaHV0ZG93bl9hbGxfY3RybHEgaWYgaXQgbmVlZHMgdG8gc2h1dCBkb3duIGFuZFxcbiA4Mzc6XFx0ICogcmVpbml0aWFsaXplIGNvbnRyb2wgcXVldWVzLCBzdWNoIGFzIGluIHJlc3BvbnNlIHRvIGEgcmVzZXQgZXZlbnQuXFxuIDgzODpcXHQgKi9cXG4gODM5OlxcdHZvaWQgaWNlX2Rlc3Ryb3lfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KVxcbiA4NDA6XFx0e1xcbiA4NDE6XFx0XFx0Lyogc2h1dCBkb3duIGFsbCB0aGUgY29udHJvbCBxdWV1ZXMgZmlyc3QgKi9cXG4gODQyOlxcdFxcdGljZV9zaHV0ZG93bl9hbGxfY3RybHEoaHcsIHRydWUpO1xcbiA4NDM6XFx0XFxuIDg0NDpcXHRcXHRpY2VfZGVzdHJveV9jdHJscV9sb2NrcyhcXHUwMDI2aHctXFx1MDAzZWFkbWlucSk7XFxuIDg0NTpcXHRcXHRpZiAoaWNlX2lzX3NicV9zdXBwb3J0ZWQoaHcpKVxcbiA4NDY6XFx0XFx0XFx0aWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MoXFx1MDAyNmh3LVxcdTAwM2VzYnEpO1xcbiA4NDc6XFx0XFx0aWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MoXFx1MDAyNmh3LVxcdTAwM2VtYWlsYm94cSk7XFxuIDg0ODpcXHR9XFxuIDg0OTpcXHRcXG4gODUwOlxcdC8qKlxcbiA4NTE6XFx0ICogaWNlX2NsZWFuX3NxIC0gY2xlYW5zIHNlbmQgc2lkZSBvZiBhIGNvbnRyb2wgcXVldWVcXG4gODUyOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuIDg1MzpcXHQgKiBAY3E6IHBvaW50ZXIgdG8gdGhlIHNwZWNpZmljIENvbnRyb2wgcXVldWVcXG4gODU0OlxcdCAqXFxuIDg1NTpcXHQgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZnJlZSBkZXNjXFxuIDg1NjpcXHQgKi9cXG4gODU3OlxcdHN0YXRpYyB1MTYgaWNlX2NsZWFuX3NxKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo0OC43MDU3MTE0MTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3Njc3NTI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIEljZSBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRoZSBkZWJ1Z2dpbmcgdHJhY2UgaGFzIGhpdCBgaWNlX2luaXRfYWxsX2N0cmxxYC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBhcyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMg4oCTIGxpa2VseSB0aGUgbWFzdGVyIGluaXRpYWxpemVyIGZvciB0aGUgKklDRSogKEkgYXNzdW1lIGl0J3MgcmVsYXRlZCB0byB0aGUgc3Vic3lzdGVtIEknbSB3b3JraW5nIHdpdGgpIGNvbnRyb2xsZXIgcXVldWVzLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBtYWluIHRocmVhZCBvciB0YXNrIHRoYXQgbWFuYWdlcyB0aGUgY29udHJvbCBmbG93IGlzIGluaXRpYWxpemVkLCBvciB3aGVyZSB2YXJpb3VzIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgYnJvdWdodCBvbmxpbmUsIGFuZCB0aGUgY29udHJvbGxlcidzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGhlcmUgYmVjYXVzZSBkZXBlbmRpbmcgb24gd2hhdCBvY2N1cnMsIHRoZSBwcm9ibGVtIEknbSBpbnZlc3RpZ2F0aW5nIG1heSBsaWUgaW4gdGhlIGljZSBjb25maWd1cmF0aW9uLCBzeXN0ZW0gcmVzZXQsIG9yIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIFdoYXQgZm9sbG93cyB0aGlzIGZ1bmN0aW9uIGNhbGwgd2lsbCB0ZWxsIG1lIGhvdyBjcml0aWNhbCB0aGlzIHN0ZXAgaXMgdG8gdGhlIHJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGF0IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzIyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo1Mi40ODI0ODk2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTUxNDAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaWNlX2luaXRfYWxsX2N0cmxxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaD04Nz1pbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODg6aW50IGljZV9pbml0X2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04OS12b2lkIGljZV9zaHV0ZG93bl9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcsIGJvb2wgdW5sb2FkaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYz03MjE9dm9pZCBpY2Vfc2h1dGRvd25fYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIHVubG9hZGluZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy03NDQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jOjc0NTppbnQgaWNlX2luaXRfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy03NDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo1Mi41NTQwMTM3NDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0ODI0NTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjM1ODQ0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo1NC40MDIyNjIyMjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDU6XFx0aW50IGljZV9pbml0X2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gNzQ2OlxcdHtcXG4gNzQ3OlxcdFxcdHUzMiByZXRyeSA9IDA7XFxuIDc0ODpcXHRcXHRpbnQgc3RhdHVzO1xcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHQvKiBJbml0IEZXIGFkbWluIHF1ZXVlICovXFxuIDc1MTpcXHRcXHRkbyB7XFxuIDc1MjpcXHRcXHRcXHRzdGF0dXMgPSBpY2VfaW5pdF9jdHJscShodywgSUNFX0NUTF9RX0FETUlOKTtcXG4gNzUzOlxcdFxcdFxcdGlmIChzdGF0dXMpXFxuIDc1NDpcXHRcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiA3NTU6XFx0XFxuIDc1NjpcXHRcXHRcXHRzdGF0dXMgPSBpY2VfaW5pdF9jaGVja19hZG1pbnEoaHcpO1xcbiA3NTc6XFx0XFx0XFx0aWYgKHN0YXR1cyAhPSAtRUlPKVxcbiA3NTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc1OTpcXHRcXG4gNzYwOlxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19BUV9NU0csIFxcXCJSZXRyeSBBZG1pbiBRdWV1ZSBpbml0IGR1ZSB0byBGVyBjcml0aWNhbCBlcnJvclxcXFxuXFxcIik7XFxuIDc2MTpcXHRcXHRcXHRpY2Vfc2h1dGRvd25fY3RybHEoaHcsIElDRV9DVExfUV9BRE1JTiwgdHJ1ZSk7XFxuIDc2MjpcXHRcXHRcXHRtc2xlZXAoSUNFX0NUTF9RX0FETUlOX0lOSVRfTVNFQyk7XFxuIDc2MzpcXHRcXHR9IHdoaWxlIChyZXRyeSsrIFxcdTAwM2MgSUNFX0NUTF9RX0FETUlOX0lOSVRfVElNRU9VVCk7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdGlmIChzdGF0dXMpXFxuIDc2NjpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiA3Njc6XFx0XFx0Lyogc2lkZWJhbmQgY29udHJvbCBxdWV1ZSAoU0JRKSBpbnRlcmZhY2UgaXMgbm90IHN1cHBvcnRlZCBvbiBzb21lXFxuIDc2ODpcXHRcXHQgKiBkZXZpY2VzLiBJbml0aWFsaXplIGlmIHN1cHBvcnRlZCwgZWxzZSBmYWxsYmFjayB0byB0aGUgYWRtaW4gcXVldWVcXG4gNzY5OlxcdFxcdCAqIGludGVyZmFjZVxcbiA3NzA6XFx0XFx0ICovXFxuIDc3MTpcXHRcXHRpZiAoaWNlX2lzX3NicV9zdXBwb3J0ZWQoaHcpKSB7XFxuIDc3MjpcXHRcXHRcXHRzdGF0dXMgPSBpY2VfaW5pdF9jdHJscShodywgSUNFX0NUTF9RX1NCKTtcXG4gNzczOlxcdFxcdFxcdGlmIChzdGF0dXMpXFxuIDc3NDpcXHRcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiA3NzU6XFx0XFx0fVxcbiA3NzY6XFx0XFx0LyogSW5pdCBNYWlsYm94IHF1ZXVlICovXFxuIDc3NzpcXHRcXHRyZXR1cm4gaWNlX2luaXRfY3RybHEoaHcsIElDRV9DVExfUV9NQUlMQk9YKTtcXG4gNzc4OlxcdH1cXG4gNzc5OlxcdFxcbiA3ODA6XFx0LyoqXFxuIDc4MTpcXHQgKiBpY2VfaW5pdF9jdHJscV9sb2NrcyAtIEluaXRpYWxpemUgbG9ja3MgZm9yIGEgY29udHJvbCBxdWV1ZVxcbiA3ODI6XFx0ICogQGNxOiBwb2ludGVyIHRvIHRoZSBjb250cm9sIHF1ZXVlXFxuIDc4MzpcXHQgKlxcbiA3ODQ6XFx0ICogSW5pdGlhbGl6ZXMgdGhlIHNlbmQgYW5kIHJlY2VpdmUgcXVldWUgbG9ja3MgZm9yIGEgZ2l2ZW4gY29udHJvbCBxdWV1ZS5cXG4gNzg1OlxcdCAqL1xcbiA3ODY6XFx0c3RhdGljIHZvaWQgaWNlX2luaXRfY3RybHFfbG9ja3Moc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSlcXG4gNzg3OlxcdHtcXG4gNzg4OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmNxLVxcdTAwM2VzcV9sb2NrKTtcXG4gNzg5OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmNxLVxcdTAwM2VycV9sb2NrKTtcXG4gNzkwOlxcdH1cXG4gNzkxOlxcdFxcbiA3OTI6XFx0LyoqXFxuIDc5MzpcXHQgKiBpY2VfY3JlYXRlX2FsbF9jdHJscSAtIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYWxsIGNvbnRyb2wgcXVldWVzXFxuIDc5NDpcXHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo1NC40MDIzNzEyODNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNDk3NjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGljZV9pbml0X2N0cmxxYCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGBpY2VfaW5pdF9jdHJscWAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgaW1tZWRpYXRlbHkgYmVnaW4gcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3RzLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWV0aGluZyB3aXRoaW4gdGhlIGBpY2VgIGZyYW1ld29yaywgbGlrZWx5IGluaXRpYWxpemF0aW9uIG9yIGNvbnRyb2wgZnVuY3Rpb25zLiBUaGUgYGluaXRgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIHNldHVwIHBoYXNlIGZvciBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGNvbXBvbmVudCwgYW5kIGBjdHJscWA/IFRoYXQgY291bGQgYmUgYSBjdXN0b20gbmFtZSBmb3IgYSBzcGVjaWZpYyBjb250cm9sIGdyb3VwIG9yIG1heWJlIGV2ZW4gc29tZSBzb3J0IG9mIFF1aWNrIGNvbW1hbmQgaW5pdGlhdGlvbi4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSdtIGdvaW5nIHRvIGxvb2sgdG8gdW5wYWNrIHRoaXMuIElzIHRoaXMgYSBzeXN0ZW0gc2VydmljZT8gT3IgaXMgaXQgcGFydCBvZiBhIHVzZXItbGFuZCBwcm9ncmFtPyBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIGxpYnJhcmllcyBhcmUgbGlua2VkLCB3aGljaCBzeXN0ZW0gY29tcG9uZW50cyBhcmUgaW4gcGxheSBhbmQgd2hhdCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY29tcG9uZW50IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6NTcuNTI3MzUwMzgzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzc5ODAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jPTU3MD1zdGF0aWMgaW50IGljZV9pbml0X2NoZWNrX2FkbWlucShzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy02MDUtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jOjYwNjpzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9jdGxfcSBxX3R5cGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTYwNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjU3LjU5NTE1MzgwMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg2OTAwMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MzcwMzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjU5LjQ4MjA1NzkyNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwNixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwNjpcXHRzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9jdGxfcSBxX3R5cGUpXFxuIDYwNzpcXHR7XFxuIDYwODpcXHRcXHRzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxO1xcbiA2MDk6XFx0XFx0aW50IHJldF9jb2RlO1xcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHRzd2l0Y2ggKHFfdHlwZSkge1xcbiA2MTI6XFx0XFx0Y2FzZSBJQ0VfQ1RMX1FfQURNSU46XFxuIDYxMzpcXHRcXHRcXHRpY2VfYWRtaW5xX2luaXRfcmVncyhodyk7XFxuIDYxNDpcXHRcXHRcXHRjcSA9IFxcdTAwMjZody1cXHUwMDNlYWRtaW5xO1xcbiA2MTU6XFx0XFx0XFx0YnJlYWs7XFxuIDYxNjpcXHRcXHRjYXNlIElDRV9DVExfUV9TQjpcXG4gNjE3OlxcdFxcdFxcdGljZV9zYl9pbml0X3JlZ3MoaHcpO1xcbiA2MTg6XFx0XFx0XFx0Y3EgPSBcXHUwMDI2aHctXFx1MDAzZXNicTtcXG4gNjE5OlxcdFxcdFxcdGJyZWFrO1xcbiA2MjA6XFx0XFx0Y2FzZSBJQ0VfQ1RMX1FfTUFJTEJPWDpcXG4gNjIxOlxcdFxcdFxcdGljZV9tYWlsYm94X2luaXRfcmVncyhodyk7XFxuIDYyMjpcXHRcXHRcXHRjcSA9IFxcdTAwMjZody1cXHUwMDNlbWFpbGJveHE7XFxuIDYyMzpcXHRcXHRcXHRicmVhaztcXG4gNjI0OlxcdFxcdGRlZmF1bHQ6XFxuIDYyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjI2OlxcdFxcdH1cXG4gNjI3OlxcdFxcdGNxLVxcdTAwM2VxdHlwZSA9IHFfdHlwZTtcXG4gNjI4OlxcdFxcbiA2Mjk6XFx0XFx0LyogdmVyaWZ5IGlucHV0IGZvciB2YWxpZCBjb25maWd1cmF0aW9uICovXFxuIDYzMDpcXHRcXHRpZiAoIWNxLVxcdTAwM2VudW1fcnFfZW50cmllcyB8fCAhY3EtXFx1MDAzZW51bV9zcV9lbnRyaWVzIHx8XFxuIDYzMTpcXHRcXHQgICAgIWNxLVxcdTAwM2VycV9idWZfc2l6ZSB8fCAhY3EtXFx1MDAzZXNxX2J1Zl9zaXplKSB7XFxuIDYzMjpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gNjMzOlxcdFxcdH1cXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0LyogYWxsb2NhdGUgdGhlIEFUUSAqL1xcbiA2MzY6XFx0XFx0cmV0X2NvZGUgPSBpY2VfaW5pdF9zcShodywgY3EpO1xcbiA2Mzc6XFx0XFx0aWYgKHJldF9jb2RlKVxcbiA2Mzg6XFx0XFx0XFx0cmV0dXJuIHJldF9jb2RlO1xcbiA2Mzk6XFx0XFxuIDY0MDpcXHRcXHQvKiBhbGxvY2F0ZSB0aGUgQVJRICovXFxuIDY0MTpcXHRcXHRyZXRfY29kZSA9IGljZV9pbml0X3JxKGh3LCBjcSk7XFxuIDY0MjpcXHRcXHRpZiAocmV0X2NvZGUpXFxuIDY0MzpcXHRcXHRcXHRnb3RvIGluaXRfY3RybHFfZnJlZV9zcTtcXG4gNjQ0OlxcdFxcbiA2NDU6XFx0XFx0Lyogc3VjY2VzcyEgKi9cXG4gNjQ2OlxcdFxcdHJldHVybiAwO1xcbiA2NDc6XFx0XFxuIDY0ODpcXHRpbml0X2N0cmxxX2ZyZWVfc3E6XFxuIDY0OTpcXHRcXHRpY2Vfc2h1dGRvd25fc3EoaHcsIGNxKTtcXG4gNjUwOlxcdFxcdHJldHVybiByZXRfY29kZTtcXG4gNjUxOlxcdH1cXG4gNjUyOlxcdFxcbiA2NTM6XFx0LyoqXFxuIDY1NDpcXHQgKiBpY2VfaXNfc2JxX3N1cHBvcnRlZCAtIGlzIHRoZSBzaWRlYmFuZCBxdWV1ZSBzdXBwb3J0ZWRcXG4gNjU1OlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjU5LjQ4MjE5MDQ0NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjExNzA0MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGBpY2VfaW5pdF9jaGVja19hZG1pbnFgKipcblxuQWxyaWdodCwgSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgaWNlX2luaXRfY2hlY2tfYWRtaW5xYCBmdW5jdGlvbi4gV2hhdCdzIGl0IGRvaW5nPyBCYXNlZCBvbiB0aGUgbmFtZSwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIGJsb2NrIGhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9yIHZlcmlmaWNhdGlvbiByZWxhdGVkIHRvIGFuIGFkbWluaXN0cmF0aXZlIHF1ZXVlIG9yIHBvc3NpYmx5IGEgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gYWRtaW4gdGFza3MuIFRoZSBcImljZVwiIHByZWZpeCBwcm9iYWJseSBpbmRpY2F0ZXMgdGhpcyBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGNvbXBvbmVudCBvciBzdWJzeXN0ZW0sIHBlcmhhcHMgcmVsYXRlZCB0byB0aGUgSW50ZXJuZXQgQ29udHJvbCBFbmdpbmUgKElDRSksIHdoYXRldmVyIHRoYXQgZnJhbWV3b3JrIG1heSBiZS4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIG15IHByZWxpbWluYXJ5IGFzc3VtcHRpb25zIGFib3V0IHRoZSBjb250ZXh0IGFyZSBhY2N1cmF0ZS4gSSB3aWxsIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3ODEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE2OjAzLjY5Mzg5Njg3NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRzdGF0aWMgaW50IGljZV9pbml0X2NoZWNrX2FkbWlucShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gNTcxOlxcdHtcXG4gNTcyOlxcdFxcdHN0cnVjdCBpY2VfY3RsX3FfaW5mbyAqY3EgPSBcXHUwMDI2aHctXFx1MDAzZWFkbWlucTtcXG4gNTczOlxcdFxcdGludCBzdGF0dXM7XFxuIDU3NDpcXHRcXG4gNTc1OlxcdFxcdHN0YXR1cyA9IGljZV9hcV9nZXRfZndfdmVyKGh3LCBOVUxMKTtcXG4gNTc2OlxcdFxcdGlmIChzdGF0dXMpXFxuIDU3NzpcXHRcXHRcXHRnb3RvIGluaXRfY3RybHFfZnJlZV9ycTtcXG4gNTc4OlxcdFxcbiA1Nzk6XFx0XFx0aWYgKCFpY2VfYXFfdmVyX2NoZWNrKGh3KSkge1xcbiA1ODA6XFx0XFx0XFx0c3RhdHVzID0gLUVJTztcXG4gNTgxOlxcdFxcdFxcdGdvdG8gaW5pdF9jdHJscV9mcmVlX3JxO1xcbiA1ODI6XFx0XFx0fVxcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRyZXR1cm4gMDtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0aW5pdF9jdHJscV9mcmVlX3JxOlxcbiA1ODc6XFx0XFx0aWNlX3NodXRkb3duX3JxKGh3LCBjcSk7XFxuIDU4ODpcXHRcXHRpY2Vfc2h1dGRvd25fc3EoaHcsIGNxKTtcXG4gNTg5OlxcdFxcdHJldHVybiBzdGF0dXM7XFxuIDU5MDpcXHR9XFxuIDU5MTpcXHRcXG4gNTkyOlxcdC8qKlxcbiA1OTM6XFx0ICogaWNlX2luaXRfY3RybHEgLSBtYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIGFueSBjb250cm9sIFF1ZXVlXFxuIDU5NDpcXHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbiA1OTU6XFx0ICogQHFfdHlwZTogc3BlY2lmaWMgQ29udHJvbCBxdWV1ZSB0eXBlXFxuIDU5NjpcXHQgKlxcbiA1OTc6XFx0ICogUHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgZHJpdmVyICpNVVNUKiBzZXQgdGhlIGZvbGxvd2luZyBmaWVsZHNcXG4gNTk4OlxcdCAqIGluIHRoZSBjcS1cXHUwMDNlc3RydWN0dXJlOlxcbiA1OTk6XFx0ICogICAgIC0gY3EtXFx1MDAzZW51bV9zcV9lbnRyaWVzXFxuIDYwMDpcXHQgKiAgICAgLSBjcS1cXHUwMDNlbnVtX3JxX2VudHJpZXNcXG4gNjAxOlxcdCAqICAgICAtIGNxLVxcdTAwM2VycV9idWZfc2l6ZVxcbiA2MDI6XFx0ICogICAgIC0gY3EtXFx1MDAzZXNxX2J1Zl9zaXplXFxuIDYwMzpcXHQgKlxcbiA2MDQ6XFx0ICogTk9URTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBpbml0aWFsaXplIHRoZSBjb250cm9scSBsb2Nrc1xcbiA2MDU6XFx0ICovXFxuIDYwNjpcXHRzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9jdGxfcSBxX3R5cGUpXFxuIDYwNzpcXHR7XFxuIDYwODpcXHRcXHRzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxO1xcbiA2MDk6XFx0XFx0aW50IHJldF9jb2RlO1xcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHRzd2l0Y2ggKHFfdHlwZSkge1xcbiA2MTI6XFx0XFx0Y2FzZSBJQ0VfQ1RMX1FfQURNSU46XFxuIDYxMzpcXHRcXHRcXHRpY2VfYWRtaW5xX2luaXRfcmVncyhodyk7XFxuIDYxNDpcXHRcXHRcXHRjcSA9IFxcdTAwMjZody1cXHUwMDNlYWRtaW5xO1xcbiA2MTU6XFx0XFx0XFx0YnJlYWs7XFxuIDYxNjpcXHRcXHRjYXNlIElDRV9DVExfUV9TQjpcXG4gNjE3OlxcdFxcdFxcdGljZV9zYl9pbml0X3JlZ3MoaHcpO1xcbiA2MTg6XFx0XFx0XFx0Y3EgPSBcXHUwMDI2aHctXFx1MDAzZXNicTtcXG4gNjE5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNjowMy42OTQwMTIxMjRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1ODA2MzY0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhpbmtpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgY29kZSBpcyAqZGVmaW5pdGVseSogdW5yZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSB3aG9sZSB0aGluZyBoaW5nZXMgb24gYSBzdWNjZXNzZnVsIHByb2JlIG9mIHRoZSBJbnRlbCBFODAwIHNlcmllcyBQQ0llIG5ldHdvcmsgY2FyZCwgYW5kIHRoYXQgcHJvYmUgcmVsaWVzIG9uIGEgZnVuY3Rpb25pbmcgZmlybXdhcmUgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBBZG1pbiBRdWV1ZS5cblxuRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBgaWNlX2FxX2dldF9md192ZXJgIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSWYgdGhlcmUncyBubyBmaXJtd2FyZSwgaXQgdGltZXMgb3V0IG9yIGZhaWxzLiBUaGlzIGxlYWRzIHRvIGBpY2VfaW5pdF9jaGVja19hZG1pbnFgIGZhaWxpbmcsIHdoaWNoIGluIHR1cm4gY2F1c2VzIGBpY2VfaW5pdF9hbGxfY3RybHFgIHRvIHJldHJ5IGFuZCAqYWxzbyogZmFpbC4gQ29uc2VxdWVudGx5LCBgaWNlX2luaXRfaHdgIGFuZCB1bHRpbWF0ZWx5IGBpY2VfcHJvYmVgIGZhaWwsIHByZXZlbnRpbmcgdGhlIGRyaXZlciBmcm9tIGxvYWRpbmcgYW5kIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGZyb20gcmVnaXN0ZXJpbmcuIEJhc2ljYWxseSwgaXQncyBhIGNhc2NhZGluZyBmYWlsdXJlLiBTaW5jZSB0aGUgcHJvYmUgZG9lc24ndCB3b3JrLCB0aGUgZHJpdmVyIHdvbid0IGxvYWQgYW5kIG15IERQTEwgY29kZSBpcyBpbmFjY2Vzc2libGUuXG5cblRoZW4gSSBjb25zaWRlcmVkIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgbWFnaWNhbGx5IG1vY2sgdGhlIEFkbWluIFF1ZXVlLiBJIGtub3cgc3l6a2FsbGVyIHByZXR0eSB3ZWxsLCBhbmQgSSBrbm93IGl0ICpkb2Vzbid0KiBoYXZlIGEgc3BlY2lmaWMgbW9jayBmb3IgSW50ZWwgSUNFIEFkbWluIFF1ZXVlLCBvbmx5IGdlbmVyaWMgUENJIGZ1enppbmcuIFRoYXQgYW1vdW50cyB0byByYW5kb20gbWVtb3J5IHdyaXRlcyBhbmQgaXQncyBhIGxvbmcgc2hvdCwgSSBtZWFuIGEgY29tcGxldGUgc2hvdCBpbiB0aGUgZGFyaywgYW5kIGltcG9zc2libGUgdG8gcmVsaWFibHkgc2ltdWxhdGUgdGhlIGNvbXBsZXggQWRtaW4gUXVldWUgcHJvdG9jb2wsIGluY2x1ZGluZyBzZXR0aW5nIHVwIGRlc2NyaXB0b3JzLCB1cGRhdGluZyBwb2ludGVycyBhbmQgd3JpdGluZyBjb3JyZWN0IHJlc3BvbnNlcy4gTm8gd2F5IHRoYXQgaXMgZ29pbmcgdG8gd29yay5cblxuTmV4dCBJIGRvdWJsZS1jaGVja2VkIGlmIHRoZXJlIHdhcyBzb21lIG90aGVyIGhpZGRlbiBwYXRoLiBJIGV4YW1pbmVkIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc3dfcGluc191cGRhdGVgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgLCBhbmQgYGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zYC4gSSB0cmFjZWQgdGhlaXIgY2FsbHMuIFRoZXkncmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBpY2VfZHBsbC5jYC4gVGhlIGNhbGxiYWNrcyBhcmUgYWxsIHJlZ2lzdGVyZWQgYW5kIGluaXRpYWxpemVkIHdpdGhpbiBgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnNgIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIGNhbGxlZCBieSBgaWNlX2RwbGxfaW5pdGAuIEkgbG9va2VkIGJhY2sgYW5kIGNvbmZpcm1lZCB0aGF0IGBpY2VfZHBsbF9pbml0YCBpcyAqb25seSogY2FsbGVkIGlmIGBpY2VfcHJvYmVgIHN1Y2NlZWRlZCAtIGkuZS4sIHRoZSBkcml2ZXIgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGFuZCBwcm9iZWQgdGhlIGhhcmR3YXJlLiBHaXZlbiBteSBlYXJsaWVyIGNvbmNsdXNpb24sIHNpbmNlIHRoZSBkcml2ZXIgY2FuJ3QgaW5pdGlhbGl6ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5IHNvcGhpc3RpY2F0ZWQgZW11bGF0b3IgKHdoaWNoIGRvZXNuJ3QgZXhpc3QpLCB0aGlzIGNvZGUgaXMgYWxzbyB1bnJlYWNoYWJsZS5cblxuRmluYWxseSwgSSByZXZpZXdlZCB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb25zOiBJIG5lZWQgdG8gZmxhZyBcIldvcnRoRnV6emluZz1mYWxzZVwiIGlmIHRoZXJlJ3Mgbm8gd2F5IHRvIHJlYWNoIHRoZSBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggaXMgZm9yIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgKnJlcXVpcmVzKiBmaXJtd2FyZSBpbnRlcmFjdGlvbi4gVGhlcmUncyBubyBlZmZlY3RpdmUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZm9yIHRoaXM7IG5vdCBpbiBRRU1VLCBub3QgaW4gdGhlIGtlcm5lbC4gU28sIHRoZSBkcml2ZXIgZmFpbHMgdG8gcHJvYmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBTaW1wbGUuIFRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IFwiV29ydGhGdXp6aW5nXCIgc2hvdWxkIGJlIHNldCB0byAqZmFsc2UqLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc2MCwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNjoxNS4yNzQ2NTIxNTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBwaW4gbWFuYWdlbWVudCBsb2dpYyBpbiB0aGUgSW50ZWwgSUNFIChFODAwIHNlcmllcykgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgcmVxdWlyZXMgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGV2aWNlIGZpcm13YXJlIChlLmcuLCBBZG1pbiBRdWV1ZSkgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCBpbml0aWFsaXplLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgcGluIG1hbmFnZW1lbnQgbG9naWMgaW4gdGhlIEludGVsIElDRSAoRTgwMCBzZXJpZXMpIGV0aGVybmV0IGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIHJlcXVpcmVzIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW4gUXVldWUpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowc4mvl[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-16 14:00:37 +0000 UTC FinishedAt: 2026-07-16 14:16:17 +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+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIERQTEwgKERpZ2l0YWwgUGhhc2UgTG9ja2VkIExvb3ApIHBpbiBtYW5hZ2VtZW50IGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgKEU4MDAgc2VyaWVzKSBldGhlcm5ldCBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFuZCByZXF1aXJlcyBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHRoZSBkZXZpY2UgZmlybXdhcmUgKGUuZy4sIEFkbWluIFF1ZXVlKSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgYW5kIGluaXRpYWxpemUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmEzY2YxYzMyMmRjZDRkNDJlYTllMzllMDQyMTUxZTVlMDlkN2U5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE0OjE0OjA0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbmluZGV4IDMwYzNhNGRiN2Q2MTFjLi5mMjEzZDZlMTJjYzQ5YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuQEAgLTUzOCw2ICYjNDM7NTM4LDI5IEBAIGljZV9kcGxsX3Bpbl9kaXNhYmxlKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW4sXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxuJiM0MzsgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuJiM0MzsgKlxuJiM0MzsgKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXG4mIzQzOyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuJiM0MzsgKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4mIzM5O3Mgc3RhdGUgbWF5IGFsc28gY2hhbmdlLiAgU2VuZCBhIGNoYW5nZVxuJiM0MzsgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlXG4mIzQzOyAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLVx1MDAzZWRwbGxzLmxvY2sgaXNcbiYjNDM7ICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4mIzQzOyAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcbiYjNDM7XG4mIzQzO1x0cGVlciA9IGNoYW5nZWQtXHUwMDNlbXV4ZWQ7XG4mIzQzO1x0aWYgKHBlZXItXHUwMDNlcGluKVxuJiM0MztcdFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItXHUwMDNlcGluKTtcbiYjNDM7fVxuJiM0MztcbiAvKipcbiAgKiBpY2VfZHBsbF9waW5fc3RvcmVfc3RhdGUgLSB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBwaW4gaW4gU1cgYm9va2tlZXBpbmdcbiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluXG5AQCAtNjY5LDEwICYjNDM7NjkyLDEwIEBAIGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0cCA9IFx1MDAyNmQtXHUwMDNlc21hW0lDRV9EUExMX1BJTl9TV18yX0lEWF07XG4gXHRwLVx1MDAzZWFjdGl2ZSA9IHRydWU7XG4gXHRwLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcbiYjNDM7XHRpZiAoZGF0YSBcdTAwMjYgSUNFX1NNQTJfRElSX0VOKVxuJiM0MztcdFx0cC1cdTAwM2VkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUO1xuIFx0aWYgKChkYXRhIFx1MDAyNiBJQ0VfU01BMl9JTkFDVElWRV9NQVNLKSA9PSBJQ0VfU01BMl9JTkFDVElWRV9NQVNLKVxuIFx0XHRwLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuLVx0ZWxzZSBpZiAoZGF0YSBcdTAwMjYgSUNFX1NNQTJfRElSX0VOKVxuLVx0XHRwLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXG4gXHRwID0gXHUwMDI2ZC1cdTAwM2V1ZmxbSUNFX0RQTExfUElOX1NXXzFfSURYXTtcbiBcdGlmICghKGRhdGEgXHUwMDI2IChJQ0VfU01BMV9ESVJfRU4gfCBJQ0VfU01BMV9UWF9FTikpKVxuQEAgLTExNjMsMzIgJiM0MzsxMTg2LDYgQEAgaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0XHRcdCAgICAgIGV4dGFjaywgSUNFX0RQTExfUElOX1RZUEVfSU5QVVQpO1xuIH1cbiBcbi0vKipcbi0gKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2Vcbi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3Rcbi0gKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxuLSAqXG4tICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxuLSAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuLXtcbi1cdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXG4tXHRwZWVyID0gKGNoYW5nZWQgXHUwMDNlPSBkLVx1MDAzZXNtYSBcdTAwMjZcdTAwMjYgY2hhbmdlZCBcdTAwM2MgZC1cdTAwM2VzbWEgJiM0MzsgSUNFX0RQTExfUElOX1NXX05VTSkgP1xuLVx0XHRcdTAwMjZkLVx1MDAzZXVmbFtjaGFuZ2VkLVx1MDAzZWlkeF0gOiBcdTAwMjZkLVx1MDAzZXNtYVtjaGFuZ2VkLVx1MDAzZWlkeF07XG4tXHRpZiAocGVlci1cdTAwM2VwaW4pXG4tXHRcdF9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLVx1MDAzZXBpbik7XG4tfVxuLVxuIC8qKlxuICAqIGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0IC0gc2V0IGRpcmVjdGlvbiBvZiBTTUEgcGluXG4gICogQHA6IHBvaW50ZXIgdG8gYSBwaW5cbkBAIC0xMjE5LDE3ICYjNDM7MTIxNiwyMSBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXG4gXG4gXHRzd2l0Y2ggKHAtXHUwMDNlaWR4KSB7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbi1cdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9NQVNLO1xuLVx0XHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpXG4mIzQzO1x0XHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX0RJUl9FTjtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfRElSX0VOO1xuJiM0MztcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xuJiM0MztcdFx0fVxuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxuIFx0XHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuIFx0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfRElSX0VOO1xuLVx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0ZGF0YSBcdTAwMjY9IH4oSUNFX1NNQTJfVFhfRU4gfCBJQ0VfU01BMl9VRkwyX1JYX0RJUyk7XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4mIzQzO1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XG4gXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuQEAgLTEyNTAsNyAmIzQzOzEyNTEsNyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsXG4gXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxuIFx0ICogc3RpbGwgYmUgdXNpbmcgaXQuXG4gXHQgKi9cbi1cdHBlZXIgPSBcdTAwMjZkLVx1MDAzZXVmbFtwLVx1MDAzZWlkeF07XG4mIzQzO1x0cGVlciA9IHAtXHUwMDNlbXV4ZWQ7XG4gXHRpZiAocGVlci1cdTAwM2VhY3RpdmUpIHtcbiBcdFx0c3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0O1xuIFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG5AQCAtMTMxNSwxMCAmIzQzOzEzMTYsMTIgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gLUVJTlZBTDtcbiBcdHN3aXRjaCAocC1cdTAwM2VpZHgpIHtcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4gXHRcdFx0ZW5hYmxlID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiBcdFx0XHQvKiBTa2lwIGlmIFUuRkwxIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcgVFhfRU5cbiBcdFx0XHQgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZVxuIFx0XHRcdCAqIHRoZSBwYWlyZWQgU01BMSBvdXRwdXQuXG5AQCAtMTMyOSwxOCAmIzQzOzEzMzIsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VvdXRwdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFKSB7XG4mIzQzO1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4mIzQzO1x0XHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XG4gXHRcdFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XG4gXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiBcdFx0XHRlbmFibGUgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDIgaXMgbm90IGFjdGl2ZSwgc2V0dGluZ1xuIFx0XHRcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXG4gXHRcdFx0ICogU01BMiBpbnB1dC5cbkBAIC0xMzUyLDcgJiM0MzsxMzU4LDggQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VpbnB1dDtcbkBAIC0xMzcwLDE3ICYjNDM7MTM3Nyw0NCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIHVubG9jaztcbiBcbi1cdGlmIChlbmFibGUpXG4mIzQzO1x0aWYgKGVuYWJsZSkge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKGh3LCB0YXJnZXQsIGQtXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XG4tXHRlbHNlXG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHAtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBwLVx1MDAzZW11eGVkO1xuJiM0MztcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldDtcbiYjNDM7XHRcdFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGU7XG4mIzQzO1x0XHRcdGludCBwZWVyX3JldDtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwZWVyLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZW91dHB1dDtcbiYjNDM7XHRcdFx0XHRwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZWlucHV0O1xuJiM0MztcdFx0XHRcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgcGVlcl90YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBwZi1cdTAwM2VkcGxscy5lZWMuZHBsbF9pZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBwZWVyX3R5cGUsIE5VTEwpO1xuJiM0MztcdFx0XHRpZiAoIXBlZXJfcmV0KVxuJiM0MztcdFx0XHRcdHBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICBwZWVyX3R5cGUsIE5VTEwpO1xuJiM0MztcdFx0XHRpZiAocGVlcl9yZXQpXG4mIzQzO1x0XHRcdFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXG4mIzQzO1x0XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHN5bmMgcGVlciBwaW4gJXUgYWZ0ZXIgZW5hYmxpbmcgVS5GTCBwaW4gJXUsIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdCBwZWVyX3RhcmdldC1cdTAwM2VpZHgsIHRhcmdldC1cdTAwM2VpZHgsIHBlZXJfcmV0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuLVx0aWYgKCFyZXQpXG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdGlmICghcmV0KVxuJiM0MztcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0fVxuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdGlmICghcmV0KVxuLVx0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHApO1xuJiM0MztcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTQ2Nyw2ICYjNDM7MTUwMSw3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gc21hLVx1MDAzZXBmO1xuIFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xuJiM0MztcdHU4IG9sZF9kYXRhID0gMDtcbiBcdGJvb2wgZW5hYmxlO1xuIFx0aW50IHJldDtcbiBcbkBAIC0xNDc5LDI4ICYjNDM7MTUxNCwxMjAgQEAgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRpZiAocmV0KVxuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuLVx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4tXHRcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU7XG4mIzQzO1x0c3dpdGNoIChzdGF0ZSkge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbiYjNDM7XHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4mIzQzO1x0XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRcdGdvdG8gdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZW5hYmxlID0gdHJ1ZTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxuJiM0MztcdFx0aWYgKHNtYS1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7XG4mIzQzO1x0XHRcdGVuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGVuYWJsZSA9IHRydWU7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcbiYjNDM7XHRcdGVuYWJsZSA9IGZhbHNlO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoc21hLVx1MDAzZWRpcmVjdGlvbikge1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOlxuIFx0XHR0YXJnZXQgPSBzbWEtXHUwMDNlaW5wdXQ7XG4gXHRcdHR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDtcbi1cdH0gZWxzZSB7XG4tXHRcdGVuYWJsZSA9IHN0YXRlID09IERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZW91dHB1dDtcbiBcdFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRyZXQgPSAtRUlOVkFMO1xuJiM0MztcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4gXG4tXHRpZiAoZW5hYmxlKVxuJiM0MztcdGlmIChlbmFibGUpIHtcbiYjNDM7XHRcdHU4IGRhdGE7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIFx1MDAyNmRhdGEpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byB1bmxvY2s7XG4mIzQzO1x0XHRvbGRfZGF0YSA9IGRhdGE7XG4mIzQzO1x0XHRpZiAoc21hLVx1MDAzZWlkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc21hLVx1MDAzZWlkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUztcbiYjNDM7XHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcdTAwMjZwZi1cdTAwM2VodywgZGF0YSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHVubG9jaztcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbiYjNDM7XG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHRhcmdldCwgZC1cdTAwM2VkcGxsX2lkeCwgdHlwZSxcbiBcdFx0XHRcdFx0ICBleHRhY2spO1xuLVx0ZWxzZVxuLVx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuLVx0aWYgKCFyZXQpXG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1x0XHQvKiByZWZyZXNoIHRhcmdldCBzdGF0ZSBmaXJzdCBzbyBhIHBlZXItc2lkZSBlcnJvciBjYW5ub3QgbGVhdmUgaXQgc3RhbGUgKi9cbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzbWEtXHUwMDNlbXV4ZWQtXHUwMDNlYWN0aXZlKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBzbWEtXHUwMDNlbXV4ZWQ7XG4mIzQzO1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0O1xuJiM0MztcdFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmIChwZWVyLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4mIzQzO1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZW91dHB1dDtcbiYjNDM7XHRcdFx0XHRwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4mIzQzO1x0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZWlucHV0O1xuJiM0MztcdFx0XHRcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoXHUwMDI2cGYtXHUwMDNlaHcsIHBlZXJfdGFyZ2V0LFxuJiM0MztcdFx0XHRcdFx0XHQgIGQtXHUwMDNlZHBsbF9pZHgsXG4mIzQzO1x0XHRcdFx0XHRcdCAgcGVlcl90eXBlLCBleHRhY2spO1xuJiM0MztcdFx0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdHBlZXJfdHlwZSwgZXh0YWNrKTtcbiYjNDM7XHRcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4mIzQzO1x0XHRpZiAoIXJldClcbiYjNDM7XHRcdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLFxuJiM0MztcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4mIzQzO1x0fVxuJiM0MztcdGdvdG8gdW5sb2NrO1xuJiM0MztcbiYjNDM7cmVzdG9yZV9zbWFfY3RybDpcbiYjNDM7XHR7XG4mIzQzO1x0XHRpbnQgcmVzdG9yZV9yZXQ7XG4mIzQzO1xuJiM0MztcdFx0cmVzdG9yZV9yZXQgPSBpY2Vfd3JpdGVfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIG9sZF9kYXRhKTtcbiYjNDM7XHRcdGlmICghcmVzdG9yZV9yZXQpXG4mIzQzO1x0XHRcdHJlc3RvcmVfcmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuJiM0MztcdFx0aWYgKHJlc3RvcmVfcmV0KVxuJiM0MztcdFx0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHJlc3RvcmUgU01BIGNvbnRyb2wgYWZ0ZXIgcGluIHN0YXRlIGVycm9yICVkLCByZXN0b3JlIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgcmV0LCByZXN0b3JlX3JldCk7XG4mIzQzO1x0fVxuIFxuIHVubG9jazpcbiBcdG11dGV4X3VubG9jayhcdTAwMjZwZi1cdTAwM2VkcGxscy5sb2NrKTtcbiBcdGlmICghcmV0KVxuLVx0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoXHUwMDI2cGYtXHUwMDNlZHBsbHMsIHNtYSk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE2OTcsNyAmIzQzOzE4MjQsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spO1xuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4mIzQzO1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC00NTE0LDYgJiM0Mzs0NjQxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0aWYgKHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYylcbiBcdFx0XHRwaW4tXHUwMDNlcmVmX3N5bmMgPSBwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcbiBcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XG4mIzQzO1x0XHRwaW4tXHUwMDNlbXV4ZWQgPSBcdTAwMjZkLVx1MDAzZXVmbFtpXTtcbiYjNDM7XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJQ0VfRFBMTF9QSU5fU1dfTlVNOyBpJiM0MzsmIzQzOykge1xuQEAgLTQ1MjMsNyAmIzQzOzQ2NTIsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRwaW4tXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPSBjYXBzO1xuIFx0XHRwaW4tXHUwMDNlcGYgPSBwZjtcbiBcdFx0cGluLVx1MDAzZXByb3AuYm9hcmRfbGFiZWwgPSBpY2VfZHBsbF9zd19waW5fdWZsW2ldO1xuLVx0XHRpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHtcbiYjNDM7XHRcdHN3aXRjaCAoaSkge1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXHRcdFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKTtcbiBcdFx0XHRwaW4tXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZCA9XG5AQCAtNDUzMyw3ICYjNDM7NDY2Myw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRcdFx0cGluLVx1MDAzZXByb3AuZnJlcV9zdXBwb3J0ZWRfbnVtID0gZnJlcV9zdXBwX251bTtcbiBcdFx0XHRwaW4tXHUwMDNlaW5wdXQgPSBOVUxMO1xuIFx0XHRcdHBpbi1cdTAwM2VvdXRwdXQgPSBcdTAwMjZkLVx1MDAzZW91dHB1dHNbcGluX2Fic19pZHhdO1xuLVx0XHR9IGVsc2UgaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzJfSURYKSB7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XG4gXHRcdFx0cGluLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19JTlBVVF9BQlMoaSkgJiM0MztcbiBcdFx0XHRcdCAgICAgIGlucHV0X2lkeF9vZmZzZXQ7XG5AQCAtNDU0Niw3ICYjNDM7NDY3NywxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XG4gXHRcdFx0XHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxuIFx0XHRcdFx0IGNhcHMpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwmIzM0O0ludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbiYjNDM7XHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNlc21hW2ldO1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbmluZGV4IDEwM2JhM2U0OTA2ODJjLi5kYzZmMDk2YmYwNjlhMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuQEAgLTc2LDYgJiM0Mzs3Niw3IEBAIHN0cnVjdCBpY2VfZHBsbF9waW4ge1xuIFx0czMyIHBoYXNlX2FkanVzdDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKmlucHV0O1xuIFx0c3RydWN0IGljZV9kcGxsX3BpbiAqb3V0cHV0O1xuJiM0MztcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkO1xuIFx0ZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xuIFx0czY0IHBoYXNlX29mZnNldDtcbiBcdHU4IHN0YXR1cztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBwaW4gbWFuYWdlbWVudCBsb2dpYyBpbiB0aGUgSW50ZWwgSUNFIChFODAwIHNlcmllcykgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgcmVxdWlyZXMgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGV2aWNlIGZpcm13YXJlIChlLmcuLCBBZG1pbiBRdWV1ZSkgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCBpbml0aWFsaXplLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmEzY2YxYzMyMmRjZDRkNDJlYTllMzllMDQyMTUxZTVlMDlkN2U5YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDE2IDE0OjE0OjA0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYwppbmRleCAzMGMzYTRkYjdkNjExYy4uZjIxM2Q2ZTEyY2M0OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jCkBAIC01MzgsNiAmIzQzOzUzOCwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2UKJiM0MzsgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKQomIzQzOyAqCiYjNDM7ICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZAomIzQzOyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJiMzOTtzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJTwomIzQzOyAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlCiYjNDM7ICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZQomIzQzOyAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLgomIzQzOyAqCiYjNDM7ICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi0mZ3Q7ZHBsbHMubG9jayBpcwomIzQzOyAqICAgICAgICAgIHJlbGVhc2VkLiAgVXNlcyBfX2RwbGxfcGluX2NoYW5nZV9udGYoKSBiZWNhdXNlIGRwbGxfbG9jayBpcwomIzQzOyAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc3RydWN0IGljZV9kcGxsX3BpbiAqY2hhbmdlZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7CiYjNDM7CiYjNDM7CXBlZXIgPSBjaGFuZ2VkLSZndDttdXhlZDsKJiM0MzsJaWYgKHBlZXItJmd0O3BpbikKJiM0MzsJCV9fZHBsbF9waW5fY2hhbmdlX250ZihwZWVyLSZndDtwaW4pOwomIzQzO30KJiM0MzsKIC8qKgogICogaWNlX2RwbGxfcGluX3N0b3JlX3N0YXRlIC0gdXBkYXRlcyB0aGUgc3RhdGUgb2YgcGluIGluIFNXIGJvb2trZWVwaW5nCiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluCkBAIC02NjksMTAgJiM0Mzs2OTIsMTAgQEAgaWNlX2RwbGxfc3dfcGluc191cGRhdGUoc3RydWN0IGljZV9wZiAqcGYpCiAJcCA9ICZhbXA7ZC0mZ3Q7c21hW0lDRV9EUExMX1BJTl9TV18yX0lEWF07CiAJcC0mZ3Q7YWN0aXZlID0gdHJ1ZTsKIAlwLSZndDtkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ7CiYjNDM7CWlmIChkYXRhICZhbXA7IElDRV9TTUEyX0RJUl9FTikKJiM0MzsJCXAtJmd0O2RpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7CiAJaWYgKChkYXRhICZhbXA7IElDRV9TTUEyX0lOQUNUSVZFX01BU0spID09IElDRV9TTUEyX0lOQUNUSVZFX01BU0spCiAJCXAtJmd0O2FjdGl2ZSA9IGZhbHNlOwotCWVsc2UgaWYgKGRhdGEgJmFtcDsgSUNFX1NNQTJfRElSX0VOKQotCQlwLSZndDtkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOwogCiAJcCA9ICZhbXA7ZC0mZ3Q7dWZsW0lDRV9EUExMX1BJTl9TV18xX0lEWF07CiAJaWYgKCEoZGF0YSAmYW1wOyAoSUNFX1NNQTFfRElSX0VOIHwgSUNFX1NNQTFfVFhfRU4pKSkKQEAgLTExNjMsMzIgJiM0MzsxMTg2LDYgQEAgaWNlX2RwbGxfaW5wdXRfc3RhdGVfZ2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCQkgICAgICBleHRhY2ssIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTsKIH0KIAotLyoqCi0gKiBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIgLSBub3RpZnkgdGhlIHBhaXJlZCBTVyBwaW4gYWZ0ZXIgYSBzdGF0ZSBjaGFuZ2UKLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdAotICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSkKLSAqCi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kCi0gKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbiYjMzk7cyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU8KLSAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbiYjMzk7cyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlCi0gKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlCi0gKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS4KLSAqCi0gKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLSZndDtkcGxscy5sb2NrIGlzCi0gKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXMKLSAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci4KLSAqLwotc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbHMgKmQsCi0JCQkJCXN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpCi17Ci0Jc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjsKLQotCXBlZXIgPSAoY2hhbmdlZCAmZ3Q7PSBkLSZndDtzbWEgJmFtcDsmYW1wOyBjaGFuZ2VkICZsdDsgZC0mZ3Q7c21hICYjNDM7IElDRV9EUExMX1BJTl9TV19OVU0pID8KLQkJJmFtcDtkLSZndDt1ZmxbY2hhbmdlZC0mZ3Q7aWR4XSA6ICZhbXA7ZC0mZ3Q7c21hW2NoYW5nZWQtJmd0O2lkeF07Ci0JaWYgKHBlZXItJmd0O3BpbikKLQkJX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItJmd0O3Bpbik7Ci19Ci0KIC8qKgogICogaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQgLSBzZXQgZGlyZWN0aW9uIG9mIFNNQSBwaW4KICAqIEBwOiBwb2ludGVyIHRvIGEgcGluCkBAIC0xMjE5LDE3ICYjNDM7MTIxNiwyMSBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsCiAKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlkYXRhICZhbXA7PSB+SUNFX1NNQTFfTUFTSzsKLQkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKQomIzQzOwkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwogCQkJZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9ESVJfRU47CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwomIzQzOwkJfQogCQlicmVhazsKIAljYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDoKIAkJaWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHsKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9ESVJfRU47Ci0JCQlkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTOwogCQl9IGVsc2UgewotCQkJZGF0YSAmYW1wOz0gfihJQ0VfU01BMl9UWF9FTiB8IElDRV9TTUEyX1VGTDJfUlhfRElTKTsKIAkJCWRhdGEgfD0gSUNFX1NNQTJfRElSX0VOOwomIzQzOwkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMl9VRkwyX1JYX0RJUzsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVFhfRU47CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEyNTAsNyAmIzQzOzEyNTEsNyBAQCBzdGF0aWMgaW50IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHN0cnVjdCBpY2VfZHBsbF9waW4gKnAsCiAJICogYmFja2luZyBwaW4gd2hlbiBVLkZMIGJlY29tZXMgaW5hY3RpdmUgYmVjYXVzZSB0aGUgU01BIHBpbiBtYXkKIAkgKiBzdGlsbCBiZSB1c2luZyBpdC4KIAkgKi8KLQlwZWVyID0gJmFtcDtkLSZndDt1ZmxbcC0mZ3Q7aWR4XTsKJiM0MzsJcGVlciA9IHAtJmd0O211eGVkOwogCWlmIChwZWVyLSZndDthY3RpdmUpIHsKIAkJc3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0OwogCQllbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7CkBAIC0xMzE1LDEwICYjNDM7MTMxNiwxMiBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJcmV0ID0gLUVJTlZBTDsKIAlzd2l0Y2ggKHAtJmd0O2lkeCkgewogCWNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7CiYjNDM7CQlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CQljYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDoKIAkJCWRhdGEgJmFtcDs9IH5JQ0VfU01BMV9NQVNLOwogCQkJZW5hYmxlID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOgogCQkJLyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOCiAJCQkgKiB3aGlsZSBESVJfRU4gaXMgc2V0IHdvdWxkIGFsc28gZGVhY3RpdmF0ZQogCQkJICogdGhlIHBhaXJlZCBTTUExIG91dHB1dC4KQEAgLTEzMjksMTggJiM0MzsxMzMyLDIxIEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTFfVFhfRU47CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtvdXRwdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7CiAJCWJyZWFrOwogCWNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOgotCQlpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkgewomIzQzOwkJc3dpdGNoIChzdGF0ZSkgewomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOgogCQkJZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47CiAJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSB0cnVlOwotCQl9IGVsc2UgaWYgKHN0YXRlID09IERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRCkgewomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiAJCQkvKiBTa2lwIGlmIFUuRkwyIGlzIG5vdCBhY3RpdmUsIHNldHRpbmcKIAkJCSAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkCiAJCQkgKiBTTUEyIGlucHV0LgpAQCAtMTM1Miw3ICYjNDM7MTM1OCw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAkJCX0KIAkJCWRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7CiAJCQllbmFibGUgPSBmYWxzZTsKLQkJfSBlbHNlIHsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiAJCQlnb3RvIHVubG9jazsKIAkJfQogCQl0YXJnZXQgPSBwLSZndDtpbnB1dDsKQEAgLTEzNzAsMTcgJiM0MzsxMzc3LDQ0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlpZiAocmV0KQogCQlnb3RvIHVubG9jazsKIAotCWlmIChlbmFibGUpCiYjNDM7CWlmIChlbmFibGUpIHsKIAkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShodywgdGFyZ2V0LCBkLSZndDtkcGxsX2lkeCwgdHlwZSwgZXh0YWNrKTsKLQllbHNlCiYjNDM7CQlpZiAoIXJldCkKJiM0MzsJCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7CiYjNDM7CQlpZiAoIXJldCAmYW1wOyZhbXA7IHAtJmd0O211eGVkLSZndDthY3RpdmUpIHsKJiM0MzsJCQlzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyID0gcC0mZ3Q7bXV4ZWQ7CiYjNDM7CQkJc3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQ7CiYjNDM7CQkJZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGU7CiYjNDM7CQkJaW50IHBlZXJfcmV0OwomIzQzOwomIzQzOwkJCWlmIChwZWVyLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkgewomIzQzOwkJCQlwZWVyX3RhcmdldCA9IHBlZXItJmd0O291dHB1dDsKJiM0MzsJCQkJcGVlcl90eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCXBlZXJfdGFyZ2V0ID0gcGVlci0mZ3Q7aW5wdXQ7CiYjNDM7CQkJCXBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOwomIzQzOwkJCX0KJiM0MzsJCQlwZWVyX3JldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoJmFtcDtwZi0mZ3Q7aHcsIHBlZXJfdGFyZ2V0LAomIzQzOwkJCQkJCSAgICAgICBwZi0mZ3Q7ZHBsbHMuZWVjLmRwbGxfaWR4LAomIzQzOwkJCQkJCSAgICAgICBwZWVyX3R5cGUsIE5VTEwpOwomIzQzOwkJCWlmICghcGVlcl9yZXQpCiYjNDM7CQkJCXBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgcGVlcl90YXJnZXQsCiYjNDM7CQkJCQkJCSAgICAgcGVlcl90eXBlLCBOVUxMKTsKJiM0MzsJCQlpZiAocGVlcl9yZXQpCiYjNDM7CQkJCWRldl93YXJuKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJCQkJICYjMzQ7RmFpbGVkIHRvIHN5bmMgcGVlciBwaW4gJXUgYWZ0ZXIgZW5hYmxpbmcgVS5GTCBwaW4gJXUsIGVyciAlZFxuJiMzNDssCiYjNDM7CQkJCQkgcGVlcl90YXJnZXQtJmd0O2lkeCwgdGFyZ2V0LSZndDtpZHgsIHBlZXJfcmV0KTsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKIAkJcmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwl9CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7ZHBsbHMubG9jayk7CiAJaWYgKCFyZXQpCi0JCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcigmYW1wO3BmLSZndDtkcGxscywgcCk7CiYjNDM7CQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ2Nyw2ICYjNDM7MTUwMSw3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdiwKIAlzdHJ1Y3QgaWNlX2RwbGwgKmQgPSBkcGxsX3ByaXY7CiAJc3RydWN0IGljZV9wZiAqcGYgPSBzbWEtJmd0O3BmOwogCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTsKJiM0MzsJdTggb2xkX2RhdGEgPSAwOwogCWJvb2wgZW5hYmxlOwogCWludCByZXQ7CiAKQEAgLTE0NzksMjggJiM0MzsxNTE0LDEyMCBAQCBpY2VfZHBsbF9zbWFfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsCiAJCWlmIChyZXQpCiAJCQlnb3RvIHVubG9jazsKIAl9Ci0JaWYgKHNtYS0mZ3Q7ZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkgewotCQllbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOwomIzQzOwlzd2l0Y2ggKHN0YXRlKSB7CiYjNDM7CWNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRToKJiM0MzsJCWlmIChzbWEtJmd0O2RpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7CiYjNDM7CQkJZW5hYmxlID0gZmFsc2U7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCWVuYWJsZSA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6CiYjNDM7CQlpZiAoc21hLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUKSB7CiYjNDM7CQkJZW5hYmxlID0gZmFsc2U7CiYjNDM7CQkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCQlnb3RvIHVubG9jazsKJiM0MzsJCX0KJiM0MzsJCWVuYWJsZSA9IHRydWU7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6CiYjNDM7CQllbmFibGUgPSBmYWxzZTsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN3aXRjaCAoc21hLSZndDtkaXJlY3Rpb24pIHsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQ6CiAJCXRhcmdldCA9IHNtYS0mZ3Q7aW5wdXQ7CiAJCXR5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVDsKLQl9IGVsc2UgewotCQllbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOgogCQl0YXJnZXQgPSBzbWEtJmd0O291dHB1dDsKIAkJdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gdW5sb2NrOwogCX0KIAotCWlmIChlbmFibGUpCiYjNDM7CWlmIChlbmFibGUpIHsKJiM0MzsJCXU4IGRhdGE7CiYjNDM7CiYjNDM7CQlyZXQgPSBpY2VfcmVhZF9zbWFfY3RybCgmYW1wO3BmLSZndDtodywgJmFtcDtkYXRhKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQlvbGRfZGF0YSA9IGRhdGE7CiYjNDM7CQlpZiAoc21hLSZndDtpZHggPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUExX1RYX0VOOwomIzQzOwkJfSBlbHNlIGlmIChzbWEtJmd0O2lkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHsKJiM0MzsJCQlkYXRhICZhbXA7PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7CiYjNDM7CQkJZGF0YSAmYW1wOz0gfklDRV9TTUEyX1RYX0VOOwomIzQzOwkJfQomIzQzOwkJcmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBkYXRhKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byB1bmxvY2s7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gcmVzdG9yZV9zbWFfY3RybDsKJiM0MzsKIAkJcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZSgmYW1wO3BmLSZndDtodywgdGFyZ2V0LCBkLSZndDtkcGxsX2lkeCwgdHlwZSwKIAkJCQkJICBleHRhY2spOwotCWVsc2UKLQkJcmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoJmFtcDtwZi0mZ3Q7aHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKLQlpZiAoIXJldCkKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3NtYV9jdHJsOwomIzQzOwkJLyogcmVmcmVzaCB0YXJnZXQgc3RhdGUgZmlyc3Qgc28gYSBwZWVyLXNpZGUgZXJyb3IgY2Fubm90IGxlYXZlIGl0IHN0YWxlICovCiAJCXJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJZ290byByZXN0b3JlX3NtYV9jdHJsOwomIzQzOwomIzQzOwkJaWYgKHNtYS0mZ3Q7bXV4ZWQtJmd0O2FjdGl2ZSkgewomIzQzOwkJCXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBzbWEtJmd0O211eGVkOwomIzQzOwkJCXN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0OwomIzQzOwkJCWVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlOwomIzQzOwomIzQzOwkJCWlmIChwZWVyLSZndDtkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkgewomIzQzOwkJCQlwZWVyX3RhcmdldCA9IHBlZXItJmd0O291dHB1dDsKJiM0MzsJCQkJcGVlcl90eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOwomIzQzOwkJCX0gZWxzZSB7CiYjNDM7CQkJCXBlZXJfdGFyZ2V0ID0gcGVlci0mZ3Q7aW5wdXQ7CiYjNDM7CQkJCXBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUOwomIzQzOwkJCX0KJiM0MzsJCQlyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKCZhbXA7cGYtJmd0O2h3LCBwZWVyX3RhcmdldCwKJiM0MzsJCQkJCQkgIGQtJmd0O2RwbGxfaWR4LAomIzQzOwkJCQkJCSAgcGVlcl90eXBlLCBleHRhY2spOwomIzQzOwkJCWlmICghcmV0KQomIzQzOwkJCQlyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCwKJiM0MzsJCQkJCQkJCXBlZXJfdHlwZSwgZXh0YWNrKTsKJiM0MzsJCQlpZiAocmV0KQomIzQzOwkJCQlnb3RvIHJlc3RvcmVfc21hX2N0cmw7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlyZXQgPSBpY2VfZHBsbF9waW5fZGlzYWJsZSgmYW1wO3BmLSZndDtodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spOwomIzQzOwkJaWYgKCFyZXQpCiYjNDM7CQkJcmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLAomIzQzOwkJCQkJCQlleHRhY2spOwomIzQzOwl9CiYjNDM7CWdvdG8gdW5sb2NrOwomIzQzOwomIzQzO3Jlc3RvcmVfc21hX2N0cmw6CiYjNDM7CXsKJiM0MzsJCWludCByZXN0b3JlX3JldDsKJiM0MzsKJiM0MzsJCXJlc3RvcmVfcmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKCZhbXA7cGYtJmd0O2h3LCBvbGRfZGF0YSk7CiYjNDM7CQlpZiAoIXJlc3RvcmVfcmV0KQomIzQzOwkJCXJlc3RvcmVfcmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpOwomIzQzOwkJaWYgKHJlc3RvcmVfcmV0KQomIzQzOwkJCWRldl93YXJuKGljZV9wZl90b19kZXYocGYpLAomIzQzOwkJCQkgJiMzNDtGYWlsZWQgdG8gcmVzdG9yZSBTTUEgY29udHJvbCBhZnRlciBwaW4gc3RhdGUgZXJyb3IgJWQsIHJlc3RvcmUgZXJyICVkXG4mIzM0OywKJiM0MzsJCQkJIHJldCwgcmVzdG9yZV9yZXQpOwomIzQzOwl9CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7ZHBsbHMubG9jayk7CiAJaWYgKCFyZXQpCi0JCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcigmYW1wO3BmLSZndDtkcGxscywgc21hKTsKJiM0MzsJCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzbWEpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2OTcsNyAmIzQzOzE4MjQsNyBAQCBpY2VfZHBsbF9waW5fc21hX2RpcmVjdGlvbl9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LAogCXJldCA9IGljZV9kcGxsX3NtYV9kaXJlY3Rpb25fc2V0KHAsIGRpcmVjdGlvbiwgZXh0YWNrKTsKIAltdXRleF91bmxvY2soJmFtcDtwZi0mZ3Q7ZHBsbHMubG9jayk7CiAJaWYgKCFyZXQpCi0JCWljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcigmYW1wO3BmLSZndDtkcGxscywgcCk7CiYjNDM7CQlpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIocCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDUxNCw2ICYjNDM7NDY0MSw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCWlmIChwaW4tJmd0O2lucHV0LSZndDtyZWZfc3luYykKIAkJCXBpbi0mZ3Q7cmVmX3N5bmMgPSBwaW4tJmd0O2lucHV0LSZndDtyZWZfc3luYyAtIHBpbl9hYnNfaWR4OwogCQlwaW4tJmd0O291dHB1dCA9ICZhbXA7ZC0mZ3Q7b3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07CiYjNDM7CQlwaW4tJmd0O211eGVkID0gJmFtcDtkLSZndDt1ZmxbaV07CiYjNDM7CiAJCWljZV9kcGxsX3BoYXNlX3JhbmdlX3NldCgmYW1wO3Bpbi0mZ3Q7cHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7CiAJfQogCWZvciAoaSA9IDA7IGkgJmx0OyBJQ0VfRFBMTF9QSU5fU1dfTlVNOyBpJiM0MzsmIzQzOykgewpAQCAtNDUyMyw3ICYjNDM7NDY1Miw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCXBpbi0mZ3Q7cHJvcC5jYXBhYmlsaXRpZXMgPSBjYXBzOwogCQlwaW4tJmd0O3BmID0gcGY7CiAJCXBpbi0mZ3Q7cHJvcC5ib2FyZF9sYWJlbCA9IGljZV9kcGxsX3N3X3Bpbl91ZmxbaV07Ci0JCWlmIChpID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkgewomIzQzOwkJc3dpdGNoIChpKSB7CiYjNDM7CQljYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDoKIAkJCXBpbi0mZ3Q7ZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDsKIAkJCXBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSk7CiAJCQlwaW4tJmd0O3Byb3AuZnJlcV9zdXBwb3J0ZWQgPQpAQCAtNDUzMyw3ICYjNDM7NDY2Myw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpCiAJCQlwaW4tJmd0O3Byb3AuZnJlcV9zdXBwb3J0ZWRfbnVtID0gZnJlcV9zdXBwX251bTsKIAkJCXBpbi0mZ3Q7aW5wdXQgPSBOVUxMOwogCQkJcGluLSZndDtvdXRwdXQgPSAmYW1wO2QtJmd0O291dHB1dHNbcGluX2Fic19pZHhdOwotCQl9IGVsc2UgaWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzJfSURYKSB7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQljYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDoKIAkJCXBpbi0mZ3Q7ZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUOwogCQkJcGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfSU5QVVRfQUJTKGkpICYjNDM7CiAJCQkJICAgICAgaW5wdXRfaWR4X29mZnNldDsKQEAgLTQ1NDYsNyAmIzQzOzQ2NzcsMTIgQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZikKIAkJCXBpbi0mZ3Q7cHJvcC5jYXBhYmlsaXRpZXMgPQogCQkJCShEUExMX1BJTl9DQVBBQklMSVRJRVNfUFJJT1JJVFlfQ0FOX0NIQU5HRSB8CiAJCQkJIGNhcHMpOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJZGVmYXVsdDoKJiM0MzsJCQlkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCAmIzM0O0ludmFsaWQgVS5GTCBwaW4gaW5kZXg6ICVkXG4mIzM0OywgaSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KJiM0MzsJCXBpbi0mZ3Q7bXV4ZWQgPSAmYW1wO2QtJmd0O3NtYVtpXTsKIAkJaWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KCZhbXA7cGluLSZndDtwcm9wLnBoYXNlX3JhbmdlLCBwaGFzZV9hZGpfbWF4KTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgKaW5kZXggMTAzYmEzZTQ5MDY4MmMuLmRjNmYwOTZiZjA2OWExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaApAQCAtNzYsNiAmIzQzOzc2LDcgQEAgc3RydWN0IGljZV9kcGxsX3BpbiB7CiAJczMyIHBoYXNlX2FkanVzdDsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDsKIAlzdHJ1Y3QgaWNlX2RwbGxfcGluICpvdXRwdXQ7CiYjNDM7CXN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkOwogCWVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjsKIAlzNjQgcGhhc2Vfb2Zmc2V0OwogCXU4IHN0YXR1czsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4MQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDgxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBJbnRlbCBJQ0UgRFBMTCBDb2RlIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY2AuIEl0JiMzOTtzIHR3ZWFraW5nIHRoZSBEUExMIHBpbiBtYW5hZ2VtZW50IHdpdGhpbiB0aGUgSW50ZWwgSUNFIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IHRoZSBFODAwIHNlcmllcy4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmdW5jdGlvbnM6IGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc3dfcGluc191cGRhdGVgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgLCBhbmQgYGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zYC4gSXQgYWRkcyBhIGBtdXhlZGAgcG9pbnRlciBpbiB0aGUgYGljZV9kcGxsX3BpbmAgc3RydWN0IGZvciBtYW5hZ2luZyBzaGFyZWQgU01BL1UuRkwgc2lnbmFsIHBhdGhzLCBhbmQgaXQgbW9kaWZpZXMgaG93IHBpbiBzdGF0ZXMgYW5kIGRpcmVjdGlvbnMgYXJlIGhhbmRsZWQsIGluY2x1ZGluZyB1cGRhdGVzIHRvIHRoZSBQQ0E5NTc1IEdQSU8gZXhwYW5kZXIuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIGNhbiB0aGlzIGNvZGUgZXZlbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgc2V0dXA/IFRoZSBgaWNlYCBkcml2ZXIgaXMgZGVzaWduZWQgZm9yIHBoeXNpY2FsIEludGVsIEU4MDAgUENJZSBuZXR3b3JrIGNhcmRzLiBUeXBpY2FsbHksIFBDSWUgZHJpdmVycywgdW5sZXNzIHRoZXkmIzM5O3JlIGZvciBhIHdlbGwtZW11bGF0ZWQgaGFyZHdhcmUsIGFyZW4mIzM5O3QgZWFzaWx5IGFjY2Vzc2libGUgd2l0aGluIHNvbWV0aGluZyBsaWtlIFFFTVUuIERvZXMgUUVNVSBldmVuIGhhdmUgYW4gRTgwMCBzZXJpZXMgZW11bGF0b3I/IEEgcXVpY2sgY2hlY2sgcmV2ZWFscyBpdCBkb2VzbiYjMzk7dC4gV2UmIzM5O3ZlIGdvdCBlbXVsYXRvcnMgZm9yIGUxMDAwLCBlMTAwMGUsIGlnYiwgYW5kIG90aGVycywgYnV0IG5vdGhpbmcgZm9yIGBpY2VgLgoKVGhlbiBJIHJlbWVtYmVyIHN5emthbGxlci4gRG9lcyBpdCBwb3RlbnRpYWxseSBhbGxvdyB1cyB0byByZWFjaCBpdD8gSSB0aGluayBhYm91dCBzeXprYWxsZXImIzM5O3MgYWJpbGl0eSB0byBmdXp6IFBDSSBkZXZpY2VzLCB1c2luZyBhIHZpcnR1YWwgUENJIGRldmljZSBpbmplY3Rpb24gbWVjaGFuaXNtICh2aGNpIG9yIHNpbWlsYXIpLiBEb2VzIHN5emthbGxlciBvZmZlciBzb21ldGhpbmcgbGlrZSBhIGBzeXpfcGNpYCBwc2V1ZG8tc3lzY2FsbCBvciBhIHNpbWlsYXIgUENJIGZ1enppbmcgc3VwcG9ydD8gSW5pdGlhbGx5LCBJJiMzOTttIGRyYXdpbmcgYSBibGFuaywgYnV0IHRoZW4gSSByZWNhbGwsIHllcywgc3l6a2FsbGVyICpkb2VzKiBoYXZlIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAgb3IgYSBzaW1pbGFyIGNhbGwuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgc3l6a2FsbGVyIGlzIHJvYnVzdCBlbm91Z2ggdG8gcmVhY2ggZGVlcCBpbnRvIGRyaXZlci1zcGVjaWZpYyBsb2dpYy4KCk9rYXksIGxldCYjMzk7cyBjaXJjbGUgYmFjay4gQ2FuIHN5emthbGxlciBwcm9iZSB0aGUgYGljZWAgZHJpdmVyIHVzaW5nIGEgZmFrZSBQQ0kgZGV2aWNlPyBUaGUgYGljZWAgZHJpdmVyIGhhcyBzaWduaWZpY2FudCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMgLSBmaXJtd2FyZSwgdGhlIEFkbWluIFF1ZXVlLCBldGMuIC0gbWFraW5nIGl0IG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byBnZXQgcGFzdCB0aGUgaW5pdGlhbCBwcm9iZSB3aXRob3V0IGVpdGhlciBhIHJlYWwgZGV2aWNlIG9yIGEgKnZlcnkqIGdvb2QgZW11bGF0b3IuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzZWUgaWYgc3l6a2FsbGVyIGlzLCBpbiBmYWN0LCBmdXp6aW5nIHRoZSBgaWNlYCBkcml2ZXIuIEkmIzM5O2xsIHNlYXJjaCBzeXprYWxsZXIgcmVwb3J0cyBmb3IgYGljZV9wcm9iZWAgb3Igc2ltaWxhciBoaXRzLiBUaGlzIHdpbGwgdGVsbCBtZSBpZiBpdCYjMzk7cyBldmVuIHdvcnRoIHB1cnN1aW5nIGZ1enppbmcsIGJ1dCB0aGVuIEkgcmVtZW1iZXIgdGhlIHByb21wdCBkZXRhaWxzLgoKV2FpdCBhIHNlY29uZCwgdGhlIHByb21wdCBzcGVjaWZpZXM6ICYjMzQ7Q29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIFNpbmNlIGBpY2VgIGlzIGEgUENJZSBkcml2ZXIgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCB0aGVyZSYjMzk7cyBubyBlcXVpdmFsZW50IG9mIHNvbWV0aGluZyBsaWtlIGBtYWM4MDIxMV9od3NpbWAgb3IgYG5ldGRldnNpbWAgZm9yIGl0LCBhbmQgUUVNVSBkb2VzbiYjMzk7dCBlbXVsYXRlIGl0LCBpdCYjMzk7cyBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBjb2RlIGluIGFueSBvZiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBvbmUgbGFzdCB0aGluZywgdG8gc2VlIGlmIHNvbWUgYGljZWAgZW11bGF0b3IgZXhpc3RzLiBJIGhhdmUgdG8gYWNjZXB0IHRoZSByZWFsaXR5IG9mIHRoZSBzaXR1YXRpb24uCgpZZXAsIHRoYXQmIzM5O3Mgd2hhdCBJIHRob3VnaHQuIFRoZSBJbnRlbCBFODAwIHNlcmllcyBpcyBjb21wbGV4LiBJdCByZXF1aXJlcyBpbnRlcmFjdGlvbnMgd2l0aCBmaXJtd2FyZSAoQWRtaW4gUXVldWUsIE5WTSksIGFuZCB0aGUgZHJpdmVyIHdpbGwgZmFpbCBwcm9iaW5nIGVhcmx5IGlmIHRoZSBmaXJtd2FyZSBkb2VzbiYjMzk7dCByZXNwb25kLiBJIHRoaW5rIEkgd2lsbCBqdXN0IGNoZWNrIHRoZSBgaWNlX3Byb2JlYCByb3V0aW5lIGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNgIGZpbGUgb25lIGxhc3QgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpY2VfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxMDI9dm9pZCBpY2VfdW5sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxMTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTE3OnN0YXRpYyBpbnQgaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE0OS0gKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxNTU6aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNTYte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyMzktXHRpZiAoaWNlX2lzX3JlY292ZXJ5X21vZGUoaHcpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcdFx0cmV0dXJuIGljZV9wcm9iZV9yZWNvdmVyeV9tb2RlKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTgzOT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWNlX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODQxLVx0LmlkX3RhYmxlID0gaWNlX3BjaV90YmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODQyOlx0LnByb2JlID0gaWNlX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0My1cdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1MTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiAmIzM5O2ljZV9wcm9iZSYjMzk7KioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIGxldCYjMzk7cyBkaXNzZWN0IGBpY2VfcHJvYmVgIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBkZXNpZ25lZCB0byBkby4mIzM0OyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb25hbGl0eSwgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgaXRzIGltcGxlbWVudGF0aW9uLCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgYW55IGludGVyYWN0aW9ucyBpdCBoYXMgd2l0aCBvdGhlciBtb2R1bGVzIG9yIGZ1bmN0aW9ucy4gSSYjMzk7bSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNhcGFiaWxpdGllcyBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByZWxldmFuY2Ugb3IgaW1wYWN0LiBJJiMzOTtsbCBuZWVkIHRvIGdvIGJleW9uZCBhIHN1cmZhY2UtbGV2ZWwgZ2xhbmNlIGFuZCBkaWcgZGVlcCBpbnRvIGl0cyBpbm5lciB3b3JraW5ncy4gSSBrbm93IEkgbmVlZCB0byB0cmVhdCB0aGlzIGFzIHRob3VnaCBJIHdlcmUgZ29pbmcgaW4gb24gYSBzdXJnaWNhbCBhc3Nlc3NtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MTU0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MTU0Olx0c3RhdGljIGludFxuNTE1NTpcdGljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXG41MTU2Olx0e1xuNTE1NzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG41MTU4Olx0XHRib29sIG5lZWRfZGV2X2RlaW5pdCA9IGZhbHNlO1xuNTE1OTpcdFx0c3RydWN0IGljZV9hZGFwdGVyICphZGFwdGVyO1xuNTE2MDpcdFx0c3RydWN0IGljZV9wZiAqcGY7XG41MTYxOlx0XHRzdHJ1Y3QgaWNlX2h3ICpodztcbjUxNjI6XHRcdGludCBlcnI7XG41MTYzOlx0XG41MTY0Olx0XHRpZiAocGRldi1cdTAwM2Vpc192aXJ0Zm4pIHtcbjUxNjU6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2NhbiYjMzk7dCBwcm9iZSBhIHZpcnR1YWwgZnVuY3Rpb25cXG5cJiMzNDspO1xuNTE2NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjUxNjc6XHRcdH1cbjUxNjg6XHRcbjUxNjk6XHRcdC8qIHdoZW4gdW5kZXIgYSBrZHVtcCBrZXJuZWwgaW5pdGlhdGUgYSByZXNldCBiZWZvcmUgZW5hYmxpbmcgdGhlXG41MTcwOlx0XHQgKiBkZXZpY2UgaW4gb3JkZXIgdG8gY2xlYXIgb3V0IGFueSBwZW5kaW5nIERNQSB0cmFuc2FjdGlvbnMuIFRoZXNlXG41MTcxOlx0XHQgKiB0cmFuc2FjdGlvbnMgY2FuIGNhdXNlIHNvbWUgc3lzdGVtcyB0byBtYWNoaW5lIGNoZWNrIHdoZW4gZG9pbmdcbjUxNzI6XHRcdCAqIHRoZSBwY2ltX2VuYWJsZV9kZXZpY2UoKSBiZWxvdy5cbjUxNzM6XHRcdCAqL1xuNTE3NDpcdFx0aWYgKGlzX2tkdW1wX2tlcm5lbCgpKSB7XG41MTc1Olx0XHRcdHBjaV9zYXZlX3N0YXRlKHBkZXYpO1xuNTE3NjpcdFx0XHRwY2lfY2xlYXJfbWFzdGVyKHBkZXYpO1xuNTE3NzpcdFx0XHRlcnIgPSBwY2llX2ZscihwZGV2KTtcbjUxNzg6XHRcdFx0aWYgKGVycilcbjUxNzk6XHRcdFx0XHRyZXR1cm4gZXJyO1xuNTE4MDpcdFx0XHRwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTtcbjUxODE6XHRcdH1cbjUxODI6XHRcbjUxODM6XHRcdC8qIHRoaXMgZHJpdmVyIHVzZXMgZGV2cmVzLCBzZWVcbjUxODQ6XHRcdCAqIERvY3VtZW50YXRpb24vZHJpdmVyLWFwaS9kcml2ZXItbW9kZWwvZGV2cmVzLnJzdFxuNTE4NTpcdFx0ICovXG41MTg2Olx0XHRlcnIgPSBwY2ltX2VuYWJsZV9kZXZpY2UocGRldik7XG41MTg3Olx0XHRpZiAoZXJyKVxuNTE4ODpcdFx0XHRyZXR1cm4gZXJyO1xuNTE4OTpcdFxuNTE5MDpcdFx0ZXJyID0gcGNpbV9pb21hcF9yZWdpb25zKHBkZXYsIEJJVChJQ0VfQkFSMCksIGRldl9kcml2ZXJfc3RyaW5nKGRldikpO1xuNTE5MTpcdFx0aWYgKGVycikge1xuNTE5MjpcdFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7QkFSMCBJL08gbWFwIGVycm9yICVkXFxuXCYjMzQ7LCBlcnIpO1xuNTE5MzpcdFx0XHRyZXR1cm4gZXJyO1xuNTE5NDpcdFx0fVxuNTE5NTpcdFxuNTE5NjpcdFx0cGYgPSBpY2VfYWxsb2NhdGVfcGYoZGV2KTtcbjUxOTc6XHRcdGlmICghcGYpXG41MTk4Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuNTE5OTpcdFxuNTIwMDpcdFx0LyogaW5pdGlhbGl6ZSBBdXhpbGlhcnkgaW5kZXggdG8gaW52YWxpZCB2YWx1ZSAqL1xuNTIwMTpcdFx0cGYtXHUwMDNlYXV4X2lkeCA9IC0xO1xuNTIwMjpcdFxuNTIwMzpcdFx0Lyogc2V0IHVwIGZvciBoaWdoIG9yIGxvdyBETUEgKi9cbjUyMDQ6XHRcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTtcbjUyMDU6XHRcdGlmIChlcnIpIHtcbjUyMDY6XHRcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0RNQSBjb25maWd1cmF0aW9uIGZhaWxlZDogMHgleFxcblwmIzM0OywgZXJyKTtcbjUyMDc6XHRcdFx0cmV0dXJuIGVycjtcbjUyMDg6XHRcdH1cbjUyMDk6XHRcbjUyMTA6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuNTIxMTpcdFx0cGYtXHUwMDNlcGRldiA9IHBkZXY7XG41MjEyOlx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGYpO1xuNTIxMzpcdFx0c2V0X2JpdChJQ0VfRE9XTiwgcGYtXHUwMDNlc3RhdGUpO1xuNTIxNDpcdFx0LyogRGlzYWJsZSBzZXJ2aWNlIHRhc2sgdW50aWwgRE9XTiBiaXQgaXMgY2xlYXJlZCAqL1xuNTIxNTpcdFx0c2V0X2JpdChJQ0VfU0VSVklDRV9ESVMsIHBmLVx1MDAzZXN0YXRlKTtcbjUyMTY6XHRcbjUyMTc6XHRcdGh3ID0gXHUwMDI2cGYtXHUwMDNlaHc7XG41MjE4Olx0XHRody1cdTAwM2Vod19hZGRyID0gcGNpbV9pb21hcF90YWJsZShwZGV2KVtJQ0VfQkFSMF07XG41MjE5Olx0XHRwY2lfc2F2ZV9zdGF0ZShwZGV2KTtcbjUyMjA6XHRcbjUyMjE6XHRcdGh3LVx1MDAzZWJhY2sgPSBwZjtcbjUyMjI6XHRcdGh3LVx1MDAzZXBvcnRfaW5mbyA9IE5VTEw7XG41MjIzOlx0XHRody1cdTAwM2V2ZW5kb3JfaWQgPSBwZGV2LVx1MDAzZXZlbmRvcjtcbjUyMjQ6XHRcdGh3LVx1MDAzZWRldmljZV9pZCA9IHBkZXYtXHUwMDNlZGV2aWNlO1xuNTIyNTpcdFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCBcdTAwMjZody1cdTAwM2VyZXZpc2lvbl9pZCk7XG41MjI2Olx0XHRody1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi1cdTAwM2VzdWJzeXN0ZW1fdmVuZG9yO1xuNTIyNzpcdFx0aHctXHUwMDNlc3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcbjUyMjg6XHRcdGh3LVx1MDAzZWJ1cy5kZXZpY2UgPSBQQ0lfU0xPVChwZGV2LVx1MDAzZWRldmZuKTtcbjUyMjk6XHRcdGh3LVx1MDAzZWJ1cy5mdW5jID0gUENJX0ZVTkMocGRldi1cdTAwM2VkZXZmbik7XG41MjMwOlx0XHRpY2Vfc2V0X2N0cmxxX2xlbihodyk7XG41MjMxOlx0XG41MjMyOlx0XHRwZi1cdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoZGVidWcsIElDRV9ERkxUX05FVElGX00pO1xuNTIzMzpcdFxuNTIzNDpcdCNpZm5kZWYgQ09ORklHX0RZTkFNSUNfREVCVUdcbjUyMzU6XHRcdGlmIChkZWJ1ZyBcdTAwM2MgLTEpXG41MjM2Olx0XHRcdGh3LVx1MDAzZWRlYnVnX21hc2sgPSBkZWJ1ZztcbjUyMzc6XHQjZW5kaWZcbjUyMzg6XHRcbjUyMzk6XHRcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXG41MjQwOlx0XHRcdHJldHVybiBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShwZik7XG41MjQxOlx0XG41MjQyOlx0XHRlcnIgPSBpY2VfaW5pdF9odyhodyk7XG41MjQzOlx0XHRpZiAoZXJyKSB7XG41MjQ0Olx0XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtpY2VfaW5pdF9odyBmYWlsZWQ6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuNTI0NTpcdFx0XHRyZXR1cm4gZXJyO1xuNTI0NjpcdFx0fVxuNTI0NzpcdFxuNTI0ODpcdFx0aWNlX2luaXRfZGV2X2h3KHBmKTtcbjUyNDk6XHRcbjUyNTA6XHRcdGFkYXB0ZXIgPSBpY2VfYWRhcHRlcl9nZXQocGRldik7XG41MjUxOlx0XHRpZiAoSVNfRVJSKGFkYXB0ZXIpKSB7XG41MjUyOlx0XHRcdGVyciA9IFBUUl9FUlIoYWRhcHRlcik7XG41MjUzOlx0XHRcdGdvdG8gdW5yb2xsX2h3X2luaXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyOTcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGljZV9pbml0X2h3YCBGdW5jdGlvbiBDYWxsKioKCk9rYXksIHNvIHRoZSBjb2RlJiMzOTtzIGp1bXBpbmcgaW50byBgaWNlX2luaXRfaHdgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJiMzOTttIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYW5kIHdoaWNoIHJlZ2lzdGVycyBhcmUgYmVpbmcgdG91Y2hlZC4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIGNydWNpYWwgc3RlcHM6IGlzIGl0IHByaW1hcmlseSBzZXR0aW5nIHVwIGNsb2NrcywgY29uZmlndXJpbmcgdGhlIFBIWSwgaW5pdGlhbGl6aW5nIERNQSBjaGFubmVscywgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBjb21tZW50cyBiZXR0ZXIgYmUgZ29vZCwgYnV0IEkmIzM5O20gZXhwZWN0aW5nIHRvIGhhdmUgdG8gcmV2ZXJzZS1lbmdpbmVlciBzb21lIG9mIHRoaXMuIE15IGZvY3VzIHdpbGwgYmUgb24gdGhlIGNyaXRpY2FsIHBhdGggdG8gZ2V0dGluZyB0aGUgc2lsaWNvbiBmdW5jdGlvbmFsIOKAkyB3aGF0JiMzOTtzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGZvciBhIGJhc2ljIGJyaW5nLXVwLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgcG90ZW50aWFsIHRyYXBzOiByYWNlIGNvbmRpdGlvbnMsIG9ic2N1cmUgcmVnaXN0ZXIgc2V0dGluZ3Mgd2l0aCBkZWZhdWx0IHZhbHVlcyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YsIG9yIGFueXRoaW5nIHRoYXQgY291bGQgYmxvY2sgcHJvZ3Jlc3MuIEkmIzM5O20gYXNzdW1pbmcgdGhlcmUmIzM5O3Mgc29tZSBzb3J0IG9mIGRlcGVuZGVuY3kgdHJlZSBoZXJlIOKAkyBJIG5lZWQgdG8gdHJhY2sgaG93IG9uZSBpbml0aWFsaXphdGlvbiBzdGVwIHNldHMgdXAgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoZSBuZXh0LiBUaGlzIGlzIGxpa2VseSB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBlbHNlLCBzbyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgaGVyZSBpcyBwYXJhbW91bnQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyB3aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9pbml0X2h3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTIzNT1zdGF0aWMgaW50IGljZV9kZXZsaW5rX3JlaW5pdF91cChzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMjQyOlx0ZXJyID0gaWNlX2luaXRfaHcoXHUwMDI2cGYtXHUwMDNlaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEyNDMtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI0NDpcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ljZV9pbml0X2h3IGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0NS1cdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTk2MD1zdGF0aWMgaW50IF9fZndsb2dfaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg0OiAqIGljZV9pbml0X2h3IC0gbWFpbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4NS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjk4NzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI0LVx0XHRnb3RvIGVycl91bnJvbGxfZmx0cl9tZ210X3N0cnVjdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTEyNTpcdHN0YXR1cyA9IGljZV9pbml0X2h3X3RibHMoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI2LVx0aWYgKHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTExNTY9c3RhdGljIHZvaWQgX19md2xvZ19kZWluaXQoc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTY2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTY3OiAqIGljZV9kZWluaXRfaHcgLSB1bnJvbGwgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucyBkb25lIGJ5IGljZV9pbml0X2h3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNjgtICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNzAtICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgZHVyaW5nIG5vbWluYWwgb3BlcmF0aW9uLCBub3QgYXMgYSByZXN1bHQgb2ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE3MTogKiBpY2VfaW5pdF9odygpIGZhaWxpbmcgc2luY2UgaWNlX2luaXRfaHcoKSB3aWxsIHRha2UgY2FyZSBvZiB1bnJvbGxpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3Mi0gKiBhcHBsaWNhYmxlIGluaXRpYWxpemF0aW9ucyBpZiBpdCBmYWlscyBmb3IgYW55IHJlYXNvbi5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaDo4MzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04NC12b2lkIGljZV9kZWluaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM9MjM4OD1pbnQgaWNlX2NmZ190eF90b3BvKHN0cnVjdCBpY2VfaHcgKmh3LCBjb25zdCB2b2lkICpidWYsIHUzMiBsZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0yNTQwLVx0aWNlX2RlaW5pdF9odyhodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jOjI1NDE6XHRpZiAoaWNlX2luaXRfaHcoaHcpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1NDItXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcJiMzNDtGYWlsZWQgdG8gcmUtaW5pdCBoYXJkd2FyZSBhZnRlciBzZXR0aW5nIFR4IHRvcG9sb2d5XFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTIxNTQ9dm9pZCBpY2VfY2xlYXJfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jOjIxOTg6ICogaWNlX2luaXRfaHdfdGJscyAtIGluaXQgaGFyZHdhcmUgdGFibGUgbWVtb3J5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTktICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjIwMTppbnQgaWNlX2luaXRfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaD01OD1ib29sIGljZV9pc19pbml0X3BrZ19zdWNjZXNzZnVsKGVudW0gaWNlX2RkcF9zdGF0ZSBzdGF0ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oOjU5OmludCBpY2VfaW5pdF9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmgtNjAtdm9pZCBpY2VfZnJlZV9zZWcoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTU9aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MjpcdGVyciA9IGljZV9pbml0X2h3KGh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDMtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjQ0Olx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2luaXRfaHcgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDUtXHRcdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYz02OD11MzIgaWNlX2NvbnZfbGlua19zcGVlZF90b192aXJ0Y2hubChib29sIGFkdl9saW5rX3N1cHBvcnQsIHUxNiBsaW5rX3NwZWVkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmMtODktICogMS4gVGhlIG1haWxib3ggc25hcHNob3Qgc3RydWN0dXJlLCBpY2VfbWJ4X3NuYXBzaG90LCBpcyBpbml0aWFsaXplZCBkdXJpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmM6OTA6ICogZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIGljZV9pbml0X2h3KCkgdXNpbmcgaWNlX21ieF9pbml0X3NuYXBzaG90KCkuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX21ieC5jLTkxLSAqIFRoZSBzdHJ1Y3QgaWNlX21ieF9zbmFwc2hvdCBoZWxwcyB0byB0cmFjayBhbmQgdHJhdmVyc2UgYSBzdGF0aWMgd2luZG93IG9mXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0MjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIElDRSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBJbnRlbCBJQ0UgRXRoZXJuZXQgZHJpdmVycy4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYGljZV9pbml0X2h3YCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIGlzIHR5cGljYWxseSBsb2NhdGVkLiBJIGtub3cgdGhpcyBjb2RlLCBidXQgaXQmIzM5O3MgYmVlbiBhIHdoaWxlLCBhbmQgaXQmIzM5O3MgYWx3YXlzIGEgZ29vZCBpZGVhIHRvIHJldmlzaXQgdGhlIGZvdW5kYXRpb25hbCBzdGVwcyB3aGVuIGRlYWxpbmcgd2l0aCBwb3RlbnRpYWwgaGFyZHdhcmUtcmVsYXRlZCBpc3N1ZXMgb3IgbG9va2luZyBhdCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBJJiMzOTtsbCBwcm9iYWJseSBiZSBsb29raW5nIGZvciB0aGUgY3J1Y2lhbCBjYWxscyB0byBjb25maWd1cmUgdGhlIE1BQywgUEhZLCBhbmQgYW55IG90aGVyIHJlbGV2YW50IHNpbGljb24gcmVnaXN0ZXJzLiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYXMgdGhhdCBjYW4gYmUgY3JpdGljYWwgZm9yIGJyaW5naW5nIHVwIHRoZSBpbnRlcmZhY2UgY29ycmVjdGx5LiBJJiMzOTtsbCBhbHNvIHdhbnQgdG8gbG9vayBvdXQgZm9yIGVycm9yIGhhbmRsaW5nIGFuZCBhbnkgZWFybHkgaGFyZHdhcmUgY2hlY2tzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTg3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgOTg3Olx0aW50IGljZV9pbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KVxuIDk4ODpcdHtcbiA5ODk6XHRcdHN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICpwY2FwcyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiA5OTA6XHRcdHZvaWQgKm1hY19idWYgX19mcmVlKGtmcmVlKSA9IE5VTEw7XG4gOTkxOlx0XHR1MTYgbWFjX2J1Zl9sZW47XG4gOTkyOlx0XHRpbnQgc3RhdHVzO1xuIDk5MzpcdFxuIDk5NDpcdFx0LyogU2V0IE1BQyB0eXBlIGJhc2VkIG9uIERldmljZUlEICovXG4gOTk1Olx0XHRzdGF0dXMgPSBpY2Vfc2V0X21hY190eXBlKGh3KTtcbiA5OTY6XHRcdGlmIChzdGF0dXMpXG4gOTk3Olx0XHRcdHJldHVybiBzdGF0dXM7XG4gOTk4Olx0XG4gOTk5Olx0XHRody1cdTAwM2VwZl9pZCA9IEZJRUxEX0dFVChQRl9GVU5DX1JJRF9GVU5DX05VTV9NLCByZDMyKGh3LCBQRl9GVU5DX1JJRCkpO1xuMTAwMDpcdFxuMTAwMTpcdFx0c3RhdHVzID0gaWNlX3Jlc2V0KGh3LCBJQ0VfUkVTRVRfUEZSKTtcbjEwMDI6XHRcdGlmIChzdGF0dXMpXG4xMDAzOlx0XHRcdHJldHVybiBzdGF0dXM7XG4xMDA0Olx0XG4xMDA1Olx0XHRpY2VfZ2V0X2l0cl9pbnRybF9ncmFuKGh3KTtcbjEwMDY6XHRcbjEwMDc6XHRcdHN0YXR1cyA9IGljZV9jcmVhdGVfYWxsX2N0cmxxKGh3KTtcbjEwMDg6XHRcdGlmIChzdGF0dXMpXG4xMDA5Olx0XHRcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XG4xMDEwOlx0XG4xMDExOlx0XHRzdGF0dXMgPSBfX2Z3bG9nX2luaXQoaHcpO1xuMTAxMjpcdFx0aWYgKHN0YXR1cylcbjEwMTM6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0ZXX0xPRywgXCYjMzQ7RXJyb3IgaW5pdGlhbGl6aW5nIEZXIGxvZ2dpbmc6ICVkXFxuXCYjMzQ7LFxuMTAxNDpcdFx0XHRcdCAgc3RhdHVzKTtcbjEwMTU6XHRcbjEwMTY6XHRcdHN0YXR1cyA9IGljZV9jbGVhcl9wZl9jZmcoaHcpO1xuMTAxNzpcdFx0aWYgKHN0YXR1cylcbjEwMTg6XHRcdFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcbjEwMTk6XHRcbjEwMjA6XHRcdC8qIFNldCBiaXQgdG8gZW5hYmxlIEZsb3cgRGlyZWN0b3IgZmlsdGVycyAqL1xuMTAyMTpcdFx0d3IzMihodywgUEZRRl9GRF9FTkEsIFBGUUZfRkRfRU5BX0ZEX0VOQV9NKTtcbjEwMjI6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmh3LVx1MDAzZWZkaXJfbGlzdF9oZWFkKTtcbjEwMjM6XHRcbjEwMjQ6XHRcdGljZV9jbGVhcl9weGVfbW9kZShodyk7XG4xMDI1Olx0XG4xMDI2Olx0XHRzdGF0dXMgPSBpY2VfaW5pdF9udm0oaHcpO1xuMTAyNzpcdFx0aWYgKHN0YXR1cylcbjEwMjg6XHRcdFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcbjEwMjk6XHRcbjEwMzA6XHRcdHN0YXR1cyA9IGljZV9nZXRfY2Fwcyhodyk7XG4xMDMxOlx0XHRpZiAoc3RhdHVzKVxuMTAzMjpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTAzMzpcdFxuMTAzNDpcdFx0aWYgKCFody1cdTAwM2Vwb3J0X2luZm8pXG4xMDM1Olx0XHRcdGh3LVx1MDAzZXBvcnRfaW5mbyA9IGRldm1fa3phbGxvYyhpY2VfaHdfdG9fZGV2KGh3KSxcbjEwMzY6XHRcdFx0XHRcdFx0ICAgICBzaXplb2YoKmh3LVx1MDAzZXBvcnRfaW5mbyksXG4xMDM3Olx0XHRcdFx0XHRcdCAgICAgR0ZQX0tFUk5FTCk7XG4xMDM4Olx0XHRpZiAoIWh3LVx1MDAzZXBvcnRfaW5mbykge1xuMTAzOTpcdFx0XHRzdGF0dXMgPSAtRU5PTUVNO1xuMTA0MDpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTA0MTpcdFx0fVxuMTA0MjpcdFxuMTA0MzpcdFx0aHctXHUwMDNlcG9ydF9pbmZvLVx1MDAzZWxvY2FsX2Z3ZF9tb2RlID0gSUNFX0xPQ0FMX0ZXRF9NT0RFX0VOQUJMRUQ7XG4xMDQ0Olx0XHQvKiBzZXQgdGhlIGJhY2sgcG9pbnRlciB0byBIVyAqL1xuMTA0NTpcdFx0aHctXHUwMDNlcG9ydF9pbmZvLVx1MDAzZWh3ID0gaHc7XG4xMDQ2Olx0XG4xMDQ3Olx0XHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBzd2l0Y2ggY29uZmlndXJhdGlvbiBkYXRhICovXG4xMDQ4Olx0XHRzdGF0dXMgPSBpY2VfZ2V0X2luaXRpYWxfc3dfY2ZnKGh3KTtcbjEwNDk6XHRcdGlmIChzdGF0dXMpXG4xMDUwOlx0XHRcdGdvdG8gZXJyX3Vucm9sbF9hbGxvYztcbjEwNTE6XHRcbjEwNTI6XHRcdGh3LVx1MDAzZWV2Yl92ZWIgPSB0cnVlO1xuMTA1MzpcdFxuMTA1NDpcdFx0LyogaW5pdCB4YXJyYXkgZm9yIGlkZW50aWZ5aW5nIHNjaGVkdWxpbmcgbm9kZXMgdW5pcXVlbHkgKi9cbjEwNTU6XHRcdHhhX2luaXRfZmxhZ3MoXHUwMDI2aHctXHUwMDNlcG9ydF9pbmZvLVx1MDAzZXNjaGVkX25vZGVfaWRzLCBYQV9GTEFHU19BTExPQyk7XG4xMDU2Olx0XG4xMDU3Olx0XHQvKiBRdWVyeSB0aGUgYWxsb2NhdGVkIHJlc291cmNlcyBmb3IgVHggc2NoZWR1bGVyICovXG4xMDU4Olx0XHRzdGF0dXMgPSBpY2Vfc2NoZWRfcXVlcnlfcmVzX2FsbG9jKGh3KTtcbjEwNTk6XHRcdGlmIChzdGF0dXMpIHtcbjEwNjA6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1NDSEVELCBcJiMzNDtGYWlsZWQgdG8gZ2V0IHNjaGVkdWxlciBhbGxvY2F0ZWQgcmVzb3VyY2VzXFxuXCYjMzQ7KTtcbjEwNjE6XHRcdFx0Z290byBlcnJfdW5yb2xsX2FsbG9jO1xuMTA2MjpcdFx0fVxuMTA2MzpcdFx0aWNlX3NjaGVkX2dldF9wc21fY2xrX2ZyZXEoaHcpO1xuMTA2NDpcdFxuMTA2NTpcdFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggc2NoZWR1bGVyIGRhdGEgKi9cbjEwNjY6XHRcdHN0YXR1cyA9IGljZV9zY2hlZF9pbml0X3BvcnQoaHctXHUwMDNlcG9ydF9pbmZvKTtcbjEwNjc6XHRcdGlmIChzdGF0dXMpXG4xMDY4Olx0XHRcdGdvdG8gZXJyX3Vucm9sbF9zY2hlZDtcbjEwNjk6XHRcbjEwNzA6XHRcdHBjYXBzID0ga3phbGxvY19vYmooKnBjYXBzKTtcbjEwNzE6XHRcdGlmICghcGNhcHMpIHtcbjEwNzI6XHRcdFx0c3RhdHVzID0gLUVOT01FTTtcbjEwNzM6XHRcdFx0Z290byBlcnJfdW5yb2xsX3NjaGVkO1xuMTA3NDpcdFx0fVxuMTA3NTpcdFxuMTA3NjpcdFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggUEhZIGNhcGFiaWxpdGllcyAqL1xuMTA3NzpcdFx0c3RhdHVzID0gaWNlX2FxX2dldF9waHlfY2Fwcyhody1cdTAwM2Vwb3J0X2luZm8sIGZhbHNlLFxuMTA3ODpcdFx0XHRcdFx0ICAgICBJQ0VfQVFDX1JFUE9SVF9UT1BPX0NBUF9NRURJQSwgcGNhcHMsXG4xMDc5Olx0XHRcdFx0XHQgICAgIE5VTEwpO1xuMTA4MDpcdFx0aWYgKHN0YXR1cylcbjEwODE6XHRcdFx0ZGV2X3dhcm4oaWNlX2h3X3RvX2RldihodyksIFwmIzM0O0dldCBQSFkgY2FwYWJpbGl0aWVzIGZhaWxlZCBzdGF0dXMgPSAlZCwgY29udGludWluZyBhbnl3YXlcXG5cJiMzNDssXG4xMDgyOlx0XHRcdFx0IHN0YXR1cyk7XG4xMDgzOlx0XG4xMDg0Olx0XHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBsaW5rIGluZm9ybWF0aW9uICovXG4xMDg1Olx0XHRzdGF0dXMgPSBpY2VfYXFfZ2V0X2xpbmtfaW5mbyhody1cdTAwM2Vwb3J0X2luZm8sIGZhbHNlLCBOVUxMLCBOVUxMKTtcbjEwODY6XHRcdGlmIChzdGF0dXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MjQ4CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgSGFyZHdhcmUgSW50ZXJhY3Rpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyB0aGUgYGljZV9yZXNldGAgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLCB3aGljaCBpcyB1c3VhbGx5IHRoZSBmaXJzdCBzdGVwLCByaWdodD8gRm9sbG93aW5nIHRoYXQsIHdlJiMzOTt2ZSBnb3QgYGljZV9jcmVhdGVfYWxsX2N0cmxxYCwgYGljZV9pbml0X252bWAsIGFuZCB0aGVuIHRoZSBgaWNlX2dldF9jYXBzYCBhbmQgYGljZV9nZXRfaW5pdGlhbF9zd19jZmdgIGZ1bmN0aW9ucyBnZXR0aW5nIGNhbGxlZC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBhbGwgcmVxdWlyZSBkaXJlY3QgaGFyZHdhcmUgaW50ZXJhY3Rpb24g4oCTIHJlYWRpbmcgcmVnaXN0ZXJzLCBzZW5kaW5nIGNvbW1hbmRzIHRocm91Z2ggdGhlIEFkbWluIFF1ZXVlLCB0aGUgdXN1YWwgZGFuY2UuCgpNeSBjb25jZXJuIGltbWVkaWF0ZWx5IGZsYWdzIHRoYXQgaWYgdGhlcmUmIzM5O3MgKm5vKiBoYXJkd2FyZSBwcmVzZW50LCBvciBpZiBpdOKAmXMgbm90IHByb3Blcmx5IGluaXRpYWxpemVkLCB3ZSYjMzk7cmUgZ29pbmcgdG8gaGl0IGEgd2FsbCB2ZXJ5IGVhcmx5LiBgaWNlX3Jlc2V0YCB3aWxsIGxpa2VseSBmYWlsLCBvciBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgIHdpbGwgYm9tYiBvdXQgYmVjYXVzZSB0aGUgY29udHJvbCBxdWV1ZSBzZXR1cCB3b24mIzM5O3QgYmUgYWJsZSB0byBjb21tdW5pY2F0ZSBwcm9wZXJseS4gVGhlIGhhcmR3YXJlIGp1c3Qgd29uJiMzOTt0IGJlIHJlc3BvbmRpbmcgdG8gdGhvc2UgaW5pdGlhbGl6YXRpb24gY29tbWFuZHMuIFdlIG5lZWQgdG8gZm9jdXMgb24gdGhhdCBpbml0aWFsIHN0YXRlLCBhbmQgSSBuZWVkIHRvIGNoZWNrIGBpY2VfcmVzZXRgIGltbWVkaWF0ZWx5LiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwMDE6XHRcdHN0YXR1cyA9IGljZV9yZXNldChodywgSUNFX1JFU0VUX1BGUik7XG4xMDAyOlx0XHRpZiAoc3RhdHVzKVxuMTAwMzpcdFx0XHRyZXR1cm4gc3RhdHVzO1xuMTAwNDpcdFxuMTAwNTpcdFx0aWNlX2dldF9pdHJfaW50cmxfZ3Jhbihodyk7XG4xMDA2Olx0XG4xMDA3Olx0XHRzdGF0dXMgPSBpY2VfY3JlYXRlX2FsbF9jdHJscShodyk7XG4xMDA4Olx0XHRpZiAoc3RhdHVzKVxuMTAwOTpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTAxMDpcdFxuMTAxMTpcdFx0c3RhdHVzID0gX19md2xvZ19pbml0KGh3KTtcbjEwMTI6XHRcdGlmIChzdGF0dXMpXG4xMDEzOlx0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19GV19MT0csIFwmIzM0O0Vycm9yIGluaXRpYWxpemluZyBGVyBsb2dnaW5nOiAlZFxcblwmIzM0OyxcbjEwMTQ6XHRcdFx0XHQgIHN0YXR1cyk7XG4xMDE1Olx0XG4xMDE2Olx0XHRzdGF0dXMgPSBpY2VfY2xlYXJfcGZfY2ZnKGh3KTtcbjEwMTc6XHRcdGlmIChzdGF0dXMpXG4xMDE4Olx0XHRcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XG4xMDE5Olx0XG4xMDIwOlx0XHQvKiBTZXQgYml0IHRvIGVuYWJsZSBGbG93IERpcmVjdG9yIGZpbHRlcnMgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5MzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpY2VfcmVzZXRgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgY29kZSBoYXMganVzdCBtZW50aW9uZWQgYGljZV9yZXNldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCYjMzk7cyBhYm91dC4gSSYjMzk7bSBpbW1lZGlhdGVseSBydW5uaW5nIHRocm91Z2ggdGhlIGxpa2VseSBzY2VuYXJpb3MgaW4gbXkgaGVhZC4gSXMgdGhpcyBzb21lIGtpbmQgb2YgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgYSBjbGVhbnVwIHByb2NlZHVyZSwgb3IgcGVyaGFwcyBhIG1ldGhvZCB0byByZXZlcnQgc29tZSBzdGF0ZSBiYWNrIHRvIGEga25vd24gZ29vZCBjb25maWd1cmF0aW9uPyBHaXZlbiB0aGUgbmFtZSwgJiMzNDtyZXNldCYjMzQ7IGlzIHRoZSBtb3N0IG9idmlvdXMgY29ubm90YXRpb24sIGJ1dCBjb250ZXh0IGlzIGV2ZXJ5dGhpbmcuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgaW1tZWRpYXRlbHkgZW5nYWdlZCAtIHdoYXQgZXhhY3RseSBpcyAmIzM0O2ljZSYjMzQ7IGluIHRoaXMgY29udGV4dD8gSXMgaXQgcmVsYXRlZCB0byBjYWNoaW5nLCBhIG5ldHdvcmsgY29ubmVjdGlvbiwgYSBzaW11bGF0aW9uJiMzOTtzIHN0YXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgJiMzNDtpY2UmIzM0OyB0aGUgZnVuY3Rpb24gaXMgcmVzZXR0aW5nIGRldGVybWluZXMgdGhlIGxldmVsIG9mIGNvbmNlcm4gYW5kIGRpcmVjdGlvbiB0byB0YWtlLiBJJiMzOTtsbCBuZWVkIG1vcmUgaW5mb3JtYXRpb24gZnJvbSB0aGUgc3Vycm91bmRpbmcgY29kZSBvciBkb2N1bWVudGF0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uJiMzOTtzIHNjb3BlIGFuZCBwdXJwb3NlLiBJJiMzOTttIHJlYWR5IHRvIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbnQgaWNlX3Jlc2V0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTEyNTU9c3RhdGljIGludCBpY2VfcGZfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMzEwLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMzExOmludCBpY2VfcmVzZXQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXEpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTEzMTIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg9ODU9aW50IGljZV9jaGVja19yZXNldChzdHJ1Y3QgaWNlX2h3ICpodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oOjg2OmludCBpY2VfcmVzZXQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXEpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04Ny1pbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmM9ODMwPXN0YXRpYyB2b2lkIGljZV9ub3RpZnlfdmZfcmVzZXQoc3RydWN0IGljZV92ZiAqdmYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYy04NjMtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jOjg2NDppbnQgaWNlX3Jlc2V0X3ZmKHN0cnVjdCBpY2VfdmYgKnZmLCB1MzIgZmxhZ3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jLTg2NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaD0zMTY9aWNlX3ZmX2NsZWFyX3ZzaV9wcm9taXNjKHN0cnVjdCBpY2VfdmYgKnZmLCBzdHJ1Y3QgaWNlX3ZzaSAqdnNpLCB1OCBwcm9taXNjX20pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaDozMTc6aW50IGljZV9yZXNldF92ZihzdHJ1Y3QgaWNlX3ZmICp2ZiwgdTMyIGZsYWdzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmgtMzE4LXZvaWQgaWNlX3Jlc2V0X2FsbF92ZnMoc3RydWN0IGljZV9wZiAqcGYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmg9Mzc5PWljZV92Zl9jbGVhcl92c2lfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZmICp2Ziwgc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmgtMzgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaDozODQ6c3RhdGljIGlubGluZSBpbnQgaWNlX3Jlc2V0X3ZmKHN0cnVjdCBpY2VfdmYgKnZmLCB1MzIgZmxhZ3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5oLTM4NS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODc0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgaWNlX3Jlc2V0YCBpbXBsZW1lbnRhdGlvbiBhbmQgYnJlYWsgaXQgZG93bi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIG1lY2hhbmljcywgaXRzIGltcGFjdCwgYW5kIGl0cyBwb3RlbnRpYWwgZWRnZSBjYXNlcy4gTXkgZXhwZXJ0aXNlIHRlbGxzIG1lIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBjcml0aWNhbCBmdW5jdGlvbiBpbiB3aGF0ZXZlciBzeXN0ZW0gaXQmIzM5O3MgcGFydCBvZiwgc28gSSYjMzk7bGwgYmUgbWV0aWN1bG91c2x5IGV4YW1pbmluZyBpdC4gSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciB3aGF0ICYjMzQ7cmVzZXQmIzM0OyBhY3R1YWxseSBtZWFucyBpbiB0aGlzIGNvbnRleHQg4oCTIGlzIGl0IGEgZnVsbCBoYXJkd2FyZSByZXNldCwgYSBzb2Z0IHJlc2V0LCBvciBzb21ldGhpbmcgbW9yZSBudWFuY2VkPyBXaGF0IHN0YXRlIHZhcmlhYmxlcyBhcmUgYWZmZWN0ZWQ/IFdoYXQgcmVzb3VyY2VzIGFyZSByZWxlYXNlZCBvciByZS1pbml0aWFsaXplZD8gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYXRvbWljaXR5IGlzc3VlcywgYW5kIGFueSBhcmVhcyB3aGVyZSBmYWlsdXJlIGNvdWxkIGxlYWQgdG8gc3lzdGVtIGluc3RhYmlsaXR5IG9yIGRhdGEgY29ycnVwdGlvbi4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IHRoYXQgaW50ZXJmYWNlIG1pZ2h0IGJlIGV4cGxvaXRlZCBpZiBpbXBsZW1lbnRlZCBpbXByb3Blcmx5LiBJdCYjMzk7cyB0aW1lIHRvIHB1dCBvbiBteSBhbmFseXNpcyBoYXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMTEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTMxMTpcdGludCBpY2VfcmVzZXQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXEpXG4xMzEyOlx0e1xuMTMxMzpcdFx0dTMyIHZhbCA9IDA7XG4xMzE0Olx0XG4xMzE1Olx0XHRzd2l0Y2ggKHJlcSkge1xuMTMxNjpcdFx0Y2FzZSBJQ0VfUkVTRVRfUEZSOlxuMTMxNzpcdFx0XHRyZXR1cm4gaWNlX3BmX3Jlc2V0KGh3KTtcbjEzMTg6XHRcdGNhc2UgSUNFX1JFU0VUX0NPUkVSOlxuMTMxOTpcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgXCYjMzQ7Q29yZVIgcmVxdWVzdGVkXFxuXCYjMzQ7KTtcbjEzMjA6XHRcdFx0dmFsID0gR0xHRU5fUlRSSUdfQ09SRVJfTTtcbjEzMjE6XHRcdFx0YnJlYWs7XG4xMzIyOlx0XHRjYXNlIElDRV9SRVNFVF9HTE9CUjpcbjEzMjM6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O0dsb2JhbFIgcmVxdWVzdGVkXFxuXCYjMzQ7KTtcbjEzMjQ6XHRcdFx0dmFsID0gR0xHRU5fUlRSSUdfR0xPQlJfTTtcbjEzMjU6XHRcdFx0YnJlYWs7XG4xMzI2Olx0XHRkZWZhdWx0OlxuMTMyNzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjEzMjg6XHRcdH1cbjEzMjk6XHRcbjEzMzA6XHRcdHZhbCB8PSByZDMyKGh3LCBHTEdFTl9SVFJJRyk7XG4xMzMxOlx0XHR3cjMyKGh3LCBHTEdFTl9SVFJJRywgdmFsKTtcbjEzMzI6XHRcdGljZV9mbHVzaChodyk7XG4xMzMzOlx0XG4xMzM0Olx0XHQvKiB3YWl0IGZvciB0aGUgRlcgdG8gYmUgcmVhZHkgKi9cbjEzMzU6XHRcdHJldHVybiBpY2VfY2hlY2tfcmVzZXQoaHcpO1xuMTMzNjpcdH1cbjEzMzc6XHRcbjEzMzg6XHQvKipcbjEzMzk6XHQgKiBpY2VfY29weV9yeHFfY3R4X3RvX2h3IC0gQ29weSBwYWNrZWQgUnggcXVldWUgY29udGV4dCB0byBIVyByZWdpc3RlcnNcbjEzNDA6XHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuMTM0MTpcdCAqIEByeHFfY3R4OiBwb2ludGVyIHRvIHRoZSBwYWNrZWQgUnggcXVldWUgY29udGV4dFxuMTM0MjpcdCAqIEByeHFfaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgUnggcXVldWVcbjEzNDM6XHQgKi9cbjEzNDQ6XHRzdGF0aWMgdm9pZCBpY2VfY29weV9yeHFfY3R4X3RvX2h3KHN0cnVjdCBpY2VfaHcgKmh3LFxuMTM0NTpcdFx0XHRcdFx0ICAgY29uc3QgaWNlX3J4cV9jdHhfYnVmX3QgKnJ4cV9jdHgsXG4xMzQ2Olx0XHRcdFx0XHQgICB1MzIgcnhxX2luZGV4KVxuMTM0NzpcdHtcbjEzNDg6XHRcdC8qIENvcHkgZWFjaCBkd29yZCBzZXBhcmF0ZWx5IHRvIEhXICovXG4xMzQ5Olx0XHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgSUNFX1JYUV9DVFhfU0laRV9EV09SRFM7IGkmIzQzOyYjNDM7KSB7XG4xMzUwOlx0XHRcdHUzMiBjdHggPSAoKGNvbnN0IHUzMiAqKXJ4cV9jdHgpW2ldO1xuMTM1MTpcdFxuMTM1MjpcdFx0XHR3cjMyKGh3LCBRUlhfQ09OVEVYVChpLCByeHFfaW5kZXgpLCBjdHgpO1xuMTM1MzpcdFxuMTM1NDpcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUUNUWCwgXCYjMzQ7cXJ4ZGF0YVslZF06ICUwOFhcXG5cJiMzNDssIGksIGN0eCk7XG4xMzU1Olx0XHR9XG4xMzU2Olx0fVxuMTM1NzpcdFxuMTM1ODpcdC8qKlxuMTM1OTpcdCAqIGljZV9jb3B5X3J4cV9jdHhfZnJvbV9odyAtIENvcHkgcGFja2VkIFJ4IFF1ZXVlIGNvbnRleHQgZnJvbSBIVyByZWdpc3RlcnNcbjEzNjA6XHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzkxNQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gbXkgZG9tYWluIG9mIGV4cGVydGlzZToKCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgaWNlX3BmX3Jlc2V0YCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4gTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBgaWNlX3BmX3Jlc2V0YC4gVGhhdCBjb21tYW5kLiBIbW0sIHdlbGwsIGJhc2VkIG9uIHRoZSBuYW1pbmcsIGl0JiMzOTtzIG9idmlvdXNseSBzb21ldGhpbmcgcmVsYXRlZCB0byBwb3dlci1mYWlsIHJlc2V0IGhhbmRsaW5nLiBNb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIGludGVncmF0ZWQgY2lyY3VpdCBlbXVsYXRpb24vcG93ZXIgZmFpbHVyZSBzaW11bGF0aW9uIGluIHRoZSBJQ0UgZGVidWdnZXIuIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIHJlY2FsbCB3aGVyZSBJJiMzOTt2ZSBlbmNvdW50ZXJlZCB0aGlzIGJlZm9yZSDigJMgd2hpY2ggcHJvamVjdHMsIHdoaWNoIGhhcmR3YXJlLCBhbmQgdGhlIHNwZWNpZmljIG51YW5jZXMgb2YgaXRzIGltcGxlbWVudGF0aW9uLiBJcyBpdCBhIGN1c3RvbSBzb2x1dGlvbiwgb3IgYSB3ZWxsLWtub3duIGNvbW1hbmQgc2V0PyBJJiMzOTttIGFscmVhZHkgbWVudGFsbHkgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBhZ2FpbnN0IGFueSByZWNlbnQgZGVidWcgc2Vzc2lvbnMgd2hlcmUgcG93ZXIgaXNzdWVzIHdlcmUgc3VzcGVjdGVkLiBJJiMzOTttIHNlYXJjaGluZyBteSBrbm93bGVkZ2UgYmFzZSBmb3IgdGhlIHBhcnRpY3VsYXIgYXJjaGl0ZWN0dXJlIGl0JiMzOTtzIGxpa2VseSB0byBiZSB1c2VkIHdpdGgsIGNvbnNpZGVyaW5nIGNvbnN0cmFpbnRzIG9mIHRoZSBoYXJkd2FyZSYjMzk7cyByZXNldCBjb250cm9sbGVyLiBNeSBmaXJzdCBwYXNzIHdvdWxkIGJlIHRvIGNvbnNpZGVyIHJlc2V0IHNlcXVlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RhdGljIGludCBpY2VfcGZfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MTE5NT1pbnQgaWNlX2NoZWNrX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTI1NC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTI1NTpzdGF0aWMgaW50IGljZV9wZl9yZXNldChzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTI1Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MzAzCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTI1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMjU1Olx0c3RhdGljIGludCBpY2VfcGZfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpXG4xMjU2Olx0e1xuMTI1NzpcdFx0dTMyIGNudCwgcmVnO1xuMTI1ODpcdFxuMTI1OTpcdFx0LyogSWYgYXQgZnVuY3Rpb24gZW50cnkgYSBnbG9iYWwgcmVzZXQgd2FzIGFscmVhZHkgaW4gcHJvZ3Jlc3MsIGkuZS5cbjEyNjA6XHRcdCAqIHN0YXRlIGlzIG5vdCAmIzM5O2RldmljZSBhY3RpdmUmIzM5OyBvciBhbnkgb2YgdGhlIHJlc2V0IGRvbmUgYml0cyBhcmUgbm90XG4xMjYxOlx0XHQgKiBzZXQgaW4gR0xOVk1fVUxELCB0aGVyZSBpcyBubyBuZWVkIGZvciBhIFBGIFJlc2V0OyBwb2xsIHVudGlsIHRoZVxuMTI2MjpcdFx0ICogZ2xvYmFsIHJlc2V0IGlzIGRvbmUuXG4xMjYzOlx0XHQgKi9cbjEyNjQ6XHRcdGlmICgocmQzMihodywgR0xHRU5fUlNUQVQpIFx1MDAyNiBHTEdFTl9SU1RBVF9ERVZTVEFURV9NKSB8fFxuMTI2NTpcdFx0ICAgIChyZDMyKGh3LCBHTE5WTV9VTEQpIFx1MDAyNiBJQ0VfUkVTRVRfRE9ORV9NQVNLKSBeIElDRV9SRVNFVF9ET05FX01BU0spIHtcbjEyNjY6XHRcdFx0LyogcG9sbCBvbiBnbG9iYWwgcmVzZXQgY3VycmVudGx5IGluIHByb2dyZXNzIHVudGlsIGRvbmUgKi9cbjEyNjc6XHRcdFx0aWYgKGljZV9jaGVja19yZXNldChodykpXG4xMjY4Olx0XHRcdFx0cmV0dXJuIC1FSU87XG4xMjY5Olx0XG4xMjcwOlx0XHRcdHJldHVybiAwO1xuMTI3MTpcdFx0fVxuMTI3MjpcdFxuMTI3MzpcdFx0LyogUmVzZXQgdGhlIFBGICovXG4xMjc0Olx0XHRyZWcgPSByZDMyKGh3LCBQRkdFTl9DVFJMKTtcbjEyNzU6XHRcbjEyNzY6XHRcdHdyMzIoaHcsIFBGR0VOX0NUUkwsIChyZWcgfCBQRkdFTl9DVFJMX1BGU1dSX00pKTtcbjEyNzc6XHRcbjEyNzg6XHRcdC8qIFdhaXQgZm9yIHRoZSBQRlIgdG8gY29tcGxldGUuIFRoZSB3YWl0IHRpbWUgaXMgdGhlIGdsb2JhbCBjb25maWcgbG9ja1xuMTI3OTpcdFx0ICogdGltZW91dCBwbHVzIHRoZSBQRlIgdGltZW91dCB3aGljaCB3aWxsIGFjY291bnQgZm9yIGEgcG9zc2libGUgcmVzZXRcbjEyODA6XHRcdCAqIHRoYXQgaXMgb2NjdXJyaW5nIGR1cmluZyBhIGRvd25sb2FkIHBhY2thZ2Ugb3BlcmF0aW9uLlxuMTI4MTpcdFx0ICovXG4xMjgyOlx0XHRmb3IgKGNudCA9IDA7IGNudCBcdTAwM2MgSUNFX0dMT0JBTF9DRkdfTE9DS19USU1FT1VUICYjNDM7XG4xMjgzOlx0XHQgICAgIElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UOyBjbnQmIzQzOyYjNDM7KSB7XG4xMjg0Olx0XHRcdHJlZyA9IHJkMzIoaHcsIFBGR0VOX0NUUkwpO1xuMTI4NTpcdFx0XHRpZiAoIShyZWcgXHUwMDI2IFBGR0VOX0NUUkxfUEZTV1JfTSkpXG4xMjg2Olx0XHRcdFx0YnJlYWs7XG4xMjg3Olx0XG4xMjg4Olx0XHRcdG1kZWxheSgxKTtcbjEyODk6XHRcdH1cbjEyOTA6XHRcbjEyOTE6XHRcdGlmIChjbnQgPT0gSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlQpIHtcbjEyOTI6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O1BGIHJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxcblwmIzM0Oyk7XG4xMjkzOlx0XHRcdHJldHVybiAtRUlPO1xuMTI5NDpcdFx0fVxuMTI5NTpcdFxuMTI5NjpcdFx0cmV0dXJuIDA7XG4xMjk3Olx0fVxuMTI5ODpcdFxuMTI5OTpcdC8qKlxuMTMwMDpcdCAqIGljZV9yZXNldCAtIFBlcmZvcm0gZGlmZmVyZW50IHR5cGVzIG9mIHJlc2V0XG4xMzAxOlx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbjEzMDI6XHQgKiBAcmVxOiByZXNldCByZXF1ZXN0XG4xMzAzOlx0ICpcbjEzMDQ6XHQgKiBUaGlzIGZ1bmN0aW9uIHRyaWdnZXJzIGEgcmVzZXQgYXMgc3BlY2lmaWVkIGJ5IHRoZSByZXEgcGFyYW1ldGVyLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTEzMQoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDEwMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEljZSBQbGF0Zm9ybSBSZXNldCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgaWNlX3BmX3Jlc2V0YCBmdW5jdGlvbi4gSXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBvbiB0aGUgc3VyZmFjZSDigJMganVzdCByZWFkaW5nIGFuZCB3cml0aW5nIHJlZ2lzdGVycy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHdoYXQgaGFwcGVucyBpZiB0aGVyZSYjMzk7cyBubyBhY3R1YWwgaGFyZHdhcmUgcHJlc2VudD8gVGhlIHJlYWQgb3BlcmF0aW9uIHdvdWxkIGxpa2VseSByZXR1cm4gZWl0aGVyIGFsbCBvbmVzLCBsaWtlIGAweGZmZmZmZmZmYCwgb3IgYWxsIHplcm9zLCBkZXBlbmRpbmcgb24gaG93IGl0JiMzOTtzIGltcGxlbWVudGVkLgoKSWYgd2UgZ2V0IGAweGZmZmZmZmZmYCBiYWNrIGZyb20gdGhhdCBpbml0aWFsIHJlYWQsIGl0IGxvb2tzIGxpa2UgdGhlcmUmIzM5O3MgYSBjaGVjayBvbiBgKHJkMzIoaHcsIEdMR0VOX1JTVEFUKSAmYW1wOyBHTEdFTl9SU1RBVF9ERVZTVEFURV9NKWAuIFRoYXQgYml0ZmllbGQgbWFza2luZyBpcyBpbnRlcmVzdGluZzsgSSBuZWVkIHRvIGRpZyBpbnRvIGBHTEdFTl9SU1RBVGAgdG8gc2VlIHdoYXQgdGhvc2UgZmxhZ3MgcmVwcmVzZW50LiBJZiB0aGF0IGNvbmRpdGlvbiBob2xkcywgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBnb2luZyB0byBjYWxsIGBpY2VfY2hlY2tfcmVzZXQoaHcpYC4gQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGF0IGBpY2VfY2hlY2tfcmVzZXRgIGZ1bmN0aW9uIG5leHQgYW5kIHNlZSB3aGF0IHRoYXQgcGFydCBvZiB0aGUgY29kZSBpcyBkb2luZy4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgc2NlbmFyaW9zIHJlcXVpcmUgdGhhdCByZXNldCBjaGVjayBhbmQgd2hhdCBpdCBhY3R1YWxseSBkb2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExOTU6XHRpbnQgaWNlX2NoZWNrX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3KVxuMTE5NjpcdHtcbjExOTc6XHRcdHUzMiBjbnQsIHJlZyA9IDAsIGdyc3RfdGltZW91dCwgdWxkX21hc2s7XG4xMTk4Olx0XG4xMTk5Olx0XHQvKiBQb2xsIGZvciBEZXZpY2UgQWN0aXZlIHN0YXRlIGluIGNhc2UgYSByZWNlbnQgQ09SRVIsIEdMT0JSLFxuMTIwMDpcdFx0ICogb3IgRU1QUiBoYXMgb2NjdXJyZWQuIFRoZSBncnN0IGRlbGF5IHZhbHVlIGlzIGluIDEwMG1zIHVuaXRzLlxuMTIwMTpcdFx0ICogQWRkIDFzZWMgZm9yIG91dHN0YW5kaW5nIEFRIGNvbW1hbmRzIHRoYXQgY2FuIHRha2UgYSBsb25nIHRpbWUuXG4xMjAyOlx0XHQgKi9cbjEyMDM6XHRcdGdyc3RfdGltZW91dCA9IEZJRUxEX0dFVChHTEdFTl9SU1RDVExfR1JTVERFTF9NLFxuMTIwNDpcdFx0XHRcdFx0IHJkMzIoaHcsIEdMR0VOX1JTVENUTCkpICYjNDM7IDEwO1xuMTIwNTpcdFxuMTIwNjpcdFx0Zm9yIChjbnQgPSAwOyBjbnQgXHUwMDNjIGdyc3RfdGltZW91dDsgY250JiM0MzsmIzQzOykge1xuMTIwNzpcdFx0XHRtZGVsYXkoMTAwKTtcbjEyMDg6XHRcdFx0cmVnID0gcmQzMihodywgR0xHRU5fUlNUQVQpO1xuMTIwOTpcdFx0XHRpZiAoIShyZWcgXHUwMDI2IEdMR0VOX1JTVEFUX0RFVlNUQVRFX00pKVxuMTIxMDpcdFx0XHRcdGJyZWFrO1xuMTIxMTpcdFx0fVxuMTIxMjpcdFxuMTIxMzpcdFx0aWYgKGNudCA9PSBncnN0X3RpbWVvdXQpIHtcbjEyMTQ6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O0dsb2JhbCByZXNldCBwb2xsaW5nIGZhaWxlZCB0byBjb21wbGV0ZS5cXG5cJiMzNDspO1xuMTIxNTpcdFx0XHRyZXR1cm4gLUVJTztcbjEyMTY6XHRcdH1cbjEyMTc6XHRcbjEyMTg6XHQjZGVmaW5lIElDRV9SRVNFVF9ET05FX01BU0tcdChHTE5WTV9VTERfUENJRVJfRE9ORV9NIHxcXFxuMTIxOTpcdFx0XHRcdFx0IEdMTlZNX1VMRF9QQ0lFUl9ET05FXzFfTSB8XFxcbjEyMjA6XHRcdFx0XHRcdCBHTE5WTV9VTERfQ09SRVJfRE9ORV9NIHxcXFxuMTIyMTpcdFx0XHRcdFx0IEdMTlZNX1VMRF9HTE9CUl9ET05FX00gfFxcXG4xMjIyOlx0XHRcdFx0XHQgR0xOVk1fVUxEX1BPUl9ET05FX00gfFxcXG4xMjIzOlx0XHRcdFx0XHQgR0xOVk1fVUxEX1BPUl9ET05FXzFfTSB8XFxcbjEyMjQ6XHRcdFx0XHRcdCBHTE5WTV9VTERfUENJRVJfRE9ORV8yX00pXG4xMjI1Olx0XG4xMjI2Olx0XHR1bGRfbWFzayA9IElDRV9SRVNFVF9ET05FX01BU0sgfCAoaHctXHUwMDNlZnVuY19jYXBzLmNvbW1vbl9jYXAucmRtYSA/XG4xMjI3Olx0XHRcdFx0XHRcdCAgR0xOVk1fVUxEX1BFX0RPTkVfTSA6IDApO1xuMTIyODpcdFxuMTIyOTpcdFx0LyogRGV2aWNlIGlzIEFjdGl2ZTsgY2hlY2sgR2xvYmFsIFJlc2V0IHByb2Nlc3NlcyBhcmUgZG9uZSAqL1xuMTIzMDpcdFx0Zm9yIChjbnQgPSAwOyBjbnQgXHUwMDNjIElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UOyBjbnQmIzQzOyYjNDM7KSB7XG4xMjMxOlx0XHRcdHJlZyA9IHJkMzIoaHcsIEdMTlZNX1VMRCkgXHUwMDI2IHVsZF9tYXNrO1xuMTIzMjpcdFx0XHRpZiAocmVnID09IHVsZF9tYXNrKSB7XG4xMjMzOlx0XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O0dsb2JhbCByZXNldCBwcm9jZXNzZXMgZG9uZS4gJWRcXG5cJiMzNDssIGNudCk7XG4xMjM0Olx0XHRcdFx0YnJlYWs7XG4xMjM1Olx0XHRcdH1cbjEyMzY6XHRcdFx0bWRlbGF5KDEwKTtcbjEyMzc6XHRcdH1cbjEyMzg6XHRcbjEyMzk6XHRcdGlmIChjbnQgPT0gSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlQpIHtcbjEyNDA6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFwmIzM0O1dhaXQgZm9yIFJlc2V0IERvbmUgdGltZWQgb3V0LiBHTE5WTV9VTEQgPSAweCV4XFxuXCYjMzQ7LFxuMTI0MTpcdFx0XHRcdCAgcmVnKTtcbjEyNDI6XHRcdFx0cmV0dXJuIC1FSU87XG4xMjQzOlx0XHR9XG4xMjQ0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDA1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMzQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGljZWAgRHJpdmVyIFByb2JlIEZhaWx1cmUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGljZWAgZHJpdmVyIGFuZCBob3cgaXQmIzM5O3MgZmFpbGluZyB0byBwcm9iZSwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoaXMgcGF0Y2guIElmIHRoZXJlJiMzOTtzIG5vIHJlYWwgaGFyZHdhcmUgcHJlc2VudCwgYHJkMzJgIGlzIGdvaW5nIHRvIGdpdmUgbWUgdGhhdCBwcmVkaWN0YWJsZSBgMHhmZmZmZmZmZmAgdmFsdWUuIEFuZCBzaW5jZSBgR0xHRU5fUlNUQVRfREVWU1RBVEVfTWAgaXMgcHJvYmFibHkgbm9uLXplcm8sIHRoaXMgaXMgZ29pbmcgdG8gbGVhZCB0byB0aGUgZmlyc3QgbG9vcCB0aW1pbmcgb3V0IGFmdGVyIGBncnN0X3RpbWVvdXRgIGl0ZXJhdGlvbnMsIHVsdGltYXRlbHkgcmVzdWx0aW5nIGluIGEgYC1FSU9gIGVycm9yIGFuZCB0aGUgYGljZV9pbml0X2h3YCBmYWlsaW5nLiBUaGF0IG1lYW5zIHRoZSB3aG9sZSBgaWNlX3Byb2JlYCByb3V0aW5lIGJpdGVzIHRoZSBkdXN0LgoKQnV0LCBpZiBzb21laG93IGByZDMyYCByZXR1cm5zIGEgY2xlYW4gYDBgLCB0aGVuIGBHTEdFTl9SU1RBVF9ERVZTVEFURV9NYCBpcyBhbHNvIHplcm8sIHNvIHRoZSBmaXJzdCBsb29wIGlzIGJyb2tlbi4gTm93IHdlJiMzOTtyZSBjaGVja2luZyBgR0xOVk1fVUxEYC4gVGhlIGNvZGUgdGhlbiBwZXJmb3JtcyBhIGNvbXBhcmlzb246IGByZWcgPT0gdWxkX21hc2tgLiBCZWNhdXNlIGAwICE9IHVsZF9tYXNrYCB0aGUgc2Vjb25kIGxvb3AgcnVucywgdGltaW5nIG91dCBhZnRlciBgSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlRgIGl0ZXJhdGlvbnMsIGFsc28gcmV0dXJuaW5nIGAtRUlPYC4gVGhhdCYjMzk7cyBhbm90aGVyIHdheSBgaWNlX3Byb2JlYCBmYWlscy4KClNvLCB3aXRob3V0IGEgbGl2ZSBwaWVjZSBvZiBoYXJkd2FyZSwgb3IgYSB2ZXJ5IHNtYXJ0IGVtdWxhdG9yIGNhcGFibGUgb2Ygc2ltdWxhdGluZyB0aGVzZSBjcnVjaWFsIHJlZ2lzdGVyIGludGVyYWN0aW9ucyBsaWtlIGBHTEdFTl9SU1RBVGAgYW5kIGBHTE5WTV9VTERgLCB0aGUgZHJpdmVyIGlzIGdvaW5nIHRvIGJvbWIgb3V0LiBBbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3ZWxsLCBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSB0aGF0IGxldmVsIG9mIHNvcGhpc3RpY2F0aW9uIHdpdGggdGhpcyBgaWNlYCBkcml2ZXIhIEl0JiMzOTtzIGxpa2VseSB1c2luZyBgc3l6X3BjaWAgb3Igc29tZXRoaW5nIHNpbWlsYXIganVzdCB0byBtYXAgbWVtb3J5IGFuZCB0aHJvdyByYW5kb20gdmFsdWVzLCBidXQgdGhhdCBkb2VzbiYjMzk7dCBoZWxwIHdpdGggdGhlIHBvbGxpbmcgbG9vcHMuIEl0IHdvbiYjMzk7dCByZXNwb25kIGluIHRoZSB3YXkgdGhlIGRyaXZlciBleHBlY3RzLgoKSG9sZCBvbiwgdGhvdWdoLCB3aGF0IGlmIHRoaXMgcGF0Y2ggKmlzbiYjMzk7dCogZGlyZWN0bHkgcmVsYXRlZCB0byBoYXJkd2FyZSBwcm9iaW5nPyBNYXliZSBpdCYjMzk7cyBhYm91dCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZS4gTm93IHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcuIElmIHRoZSBkcml2ZXIgY2FuJiMzOTt0IHByb2JlLCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZSAqd29uJiMzOTt0KiBiZSByZWdpc3RlcmVkLiBXaGljaCBtZWFucyB0aGF0IGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZS4gVGhhdCYjMzk7cyBhIHN0cm9uZyBjb25uZWN0aW9uLiBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGUgRFBMTCBpbnRlcmZhY2UgaXMgYWN0dWFsbHkgaW5pdGlhbGl6ZWQgd2l0aGluIHRoaXMgZHJpdmVyIHRvIHNlZSBpZiB0aGF0JiMzOTtzIHRoZSBwb2ludCBvZiB0aGlzIHBhdGNoLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9kcGxsX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTMyNjg9c3RhdGljIHZvaWQgaWNlX2RwbGxfcGVyaW9kaWNfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMTItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzEzOiAqIGljZV9kcGxsX2luaXRfcmVmX3N5bmNfaW5wdXRzIC0gaW5pdGlhbGl6ZSByZWZlcmVuY2Ugc3luYyBwaW4gcGFpcnNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMTQtICogQHBmOiBwZiBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMjItICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzIzOnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9yZWZfc3luY19pbnB1dHMoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zMzI0LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zNTU3PWljZV9kcGxsX2RlaW5pdF9kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzU3MC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM1NzE6ICogaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyAtIGluaXRpYWxpemUgZGlyZWN0IHBpbnNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM1NzItICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTM1ODg9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MzU4OTppY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM1OTAtXHRcdFx0ICBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW5zLCBpbnQgc3RhcnRfaWR4LCBpbnQgY291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9Mzc1Mz1zdGF0aWMgaW50IGljZV9kcGxsX3Bpbl9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzc4Ni0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM3ODc6ICogaWNlX2RwbGxfaW5pdF9waW5fY29tbW9uIC0gaW5pdGlhbGl6ZSBwaW5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM3ODgtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTM4MDA9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MzgwMTppY2VfZHBsbF9pbml0X3Bpbl9jb21tb24oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4MDItXHRcdFx0IGludCBzdGFydF9pZHgsIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zODQ1LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzg0NjogKiBpY2VfZHBsbF9pbml0X3JjbGtfcGluIC0gaW5pdGlhbGl6ZSByZWNvdmVyZWQgY2xvY2sgcGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zODQ3LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zODU4PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM4NTk6aWNlX2RwbGxfaW5pdF9yY2xrX3BpbihzdHJ1Y3QgaWNlX3BmICpwZiwgaW50IHN0YXJ0X2lkeCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjAtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzg2NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM4NjU6XHRyZXQgPSBpY2VfZHBsbF9pbml0X3Bpbl9jb21tb24ocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnJjbGssIHN0YXJ0X2lkeCwgb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjYtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTM5OTU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzk5NjppY2VfZHBsbF9pbml0X2Z3bm9kZV9waW4oc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLCBjb25zdCBjaGFyICpuYW1lKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzk5Ny17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDAzOS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQwNDA6ICogaWNlX2RwbGxfaW5pdF9md25vZGVfcGlucyAtIGluaXRpYWxpemUgcGlucyBmcm9tIGRldmljZSB0cmVlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDQxLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00MDU1PXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQwNTY6aWNlX2RwbGxfaW5pdF9md25vZGVfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGlucyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwNTctXHRcdFx0ICBpbnQgc3RhcnRfaWR4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwNjgtXHRcdHNucHJpbnRmKHBpbl9uYW1lLCBzaXplb2YocGluX25hbWUpLCBcJiMzNDtyY2xrJXVcJiMzNDssIGkpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDA2OTpcdFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9md25vZGVfcGluKFx1MDAyNnBpbnNbc3RhcnRfaWR4ICYjNDM7IGldLCBwaW5fbmFtZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDcwLVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwODgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MDg5OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF90eGNsa19waW5zKHN0cnVjdCBpY2VfcGYgKnBmLCBpbnQgc3RhcnRfaWR4KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDA5MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDEwOS1cdHJlZl9waW4mIzQzOyYjNDM7O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDExMDpcdHJldCA9IGljZV9kcGxsX2luaXRfZndub2RlX3BpbihyZWZfcGluLCBpY2VfZHBsbF9md25vZGVfZXh0X3N5bmNlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxMTEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNDctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTQ4OiAqIGljZV9kcGxsX2luaXRfcGluc19lODI1IC0gaW5pdCBwaW5zIGFuZCByZWdpc3RlciBwaW5zIHdpdGggYSBkcGxsc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE0OS0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE1OC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQxNTk6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X3BpbnNfZTgyNShzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTYzOlx0cmV0ID0gaWNlX2RwbGxfaW5pdF9md25vZGVfcGlucyhwZiwgcGYtXHUwMDNlZHBsbHMuaW5wdXRzLCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTY3Olx0cmV0ID0gaWNlX2RwbGxfaW5pdF9yY2xrX3BpbihwZiwgRFBMTF9QSU5fSURYX1VOU1BFQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjgtXHRcdFx0XHQgICAgIFx1MDAyNmljZV9kcGxsX3JjbGtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTcyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE3MzpcdHJldCA9IGljZV9kcGxsX2luaXRfdHhjbGtfcGlucyhwZiwgMCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTc0LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTg5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE5MDogKiBpY2VfZHBsbF9pbml0X3BpbnMgLSBpbml0IHBpbnMgYW5kIHJlZ2lzdGVyIHBpbnMgd2l0aCBhIGRwbGxzXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTkxLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjAwLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIwMTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjAyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIxMDpcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXHUwMDNlZHBsbHMuaW5wdXRzLCAwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIxMS1cdFx0XHRcdFx0cGYtXHUwMDNlZHBsbHMubnVtX2lucHV0cywgaW5wdXRfb3BzLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTctXHRpZiAoY2d1KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MjE4Olx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X2RpcmVjdF9waW5zKHBmLCBjZ3UsIHBmLVx1MDAzZWRwbGxzLm91dHB1dHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE5LVx0XHRcdFx0XHRcdGNvdW50LCBwZi1cdTAwM2VkcGxscy5udW1fb3V0cHV0cyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjI1LVx0XHRpZiAoIXBmLVx1MDAzZWRwbGxzLmdlbmVyaWMpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMjY6XHRcdFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cdTAwM2VkcGxscy5zbWEsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjI3LVx0XHRcdFx0XHRcdFx0Y291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIzNC1cdFx0XHRjb3VudCAmIzQzOz0gSUNFX0RQTExfUElOX1NXX05VTTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMzU6XHRcdFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cdTAwM2VkcGxscy51ZmwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjM2LVx0XHRcdFx0XHRcdFx0Y291bnQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDI1Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyNTc6XHRyZXQgPSBpY2VfZHBsbF9pbml0X3JjbGtfcGluKHBmLCBjb3VudCAmIzQzOyBwZi1cdTAwM2VwdHAucG9ydC5wb3J0X251bSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyNTgtXHRcdFx0XHQgICAgIFx1MDAyNmljZV9kcGxsX3JjbGtfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00Mjk0PWljZV9kcGxsX2RlaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQzMDEtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MzAyOiAqIGljZV9kcGxsX2luaXRfZHBsbCAtIGluaXRpYWxpemUgZHBsbCBkZXZpY2UgaW4gZHBsbCBzdWJzeXN0ZW1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQzMDMtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzMTU9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDMxNjppY2VfZHBsbF9pbml0X2RwbGwoc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbCAqZCwgYm9vbCBjZ3UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MzE3LVx0XHQgICBlbnVtIGRwbGxfdHlwZSB0eXBlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzNTY9c3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X3dvcmtlcihzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MzY0LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDM2NTogKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MzY2LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00Mzc0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDM3NTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfd29ya2VyKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDM3Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDM5Nz1zdGF0aWMgdm9pZCBpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoc3RydWN0IGRwbGxfcGluX3BoYXNlX2FkanVzdF9yYW5nZSAqcmFuZ2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQwNC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ0MDU6ICogaWNlX2RwbGxfaW5pdF9pbmZvX3BpbnNfZ2VuZXJpYyAtIGluaXRpYWxpemVzIGdlbmVyaWMgcGlucyBpbmZvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDA2LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDE0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDQxNTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19waW5zX2dlbmVyaWMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgaW5wdXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDE2LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDcxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDQ3MjogKiBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMgLSBpbml0aWFsaXplcyBkaXJlY3QgcGlucyBpbmZvXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDczLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00NDgzPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ0ODQ6aWNlX2RwbGxfaW5pdF9pbmZvX2RpcmVjdF9waW5zKHN0cnVjdCBpY2VfcGYgKnBmLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQ4NS1cdFx0XHQgICAgICAgZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwaW5fdHlwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTEzLVx0XHRwZi1cdTAwM2VkcGxscy5nZW5lcmljID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ1MTQ6XHRcdHJldHVybiBpY2VfZHBsbF9pbml0X2luZm9fcGluc19nZW5lcmljKHBmLCBpbnB1dCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTE1LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NTMtXHRpZiAoaW5wdXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NTU0Olx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X3JlZl9zeW5jX2lucHV0cyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTU1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NTktLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NTYwOiAqIGljZV9kcGxsX2luaXRfaW5mb19waW5fb25fcGluX2U4MjVjIC0gaW5pdGlhbGl6ZXMgcmNsayBwaW4gaW5mb3JtYXRpb25cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NjEtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NjctICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NTY4OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3Bpbl9vbl9waW5fZTgyNWMoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTY5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTc5LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDU4MDogKiBpY2VfZHBsbF9pbml0X2luZm9fcmNsa19waW4gLSBpbml0aWFsaXplcyByY2xrIHBpbiBpbmZvcm1hdGlvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU4MS0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU4OC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ1ODk6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fcmNsa19waW4oc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTkwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NjAxLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDYwMjogKiBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyAtIGluaXRpYWxpemVzIHNvZnR3YXJlIGNvbnRyb2xsZWQgcGluIGluZm9ybWF0aW9uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NjAzLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NjExLSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDYxMjpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDYxMy17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDcxMi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3MTM6ICogaWNlX2RwbGxfaW5pdF9pbmZvX3R4Y2xrX3BpbnNfZTgyNWMgLSBpbml0aWFsaXplcyB0eC1jbGsgcGlucyBpbmZvcm1hdGlvblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDcxNC0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDcyMC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3MjE6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fdHhjbGtfcGluc19lODI1YyhzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3MjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NDItLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzQzOiAqIGljZV9kcGxsX2luaXRfcGluc19pbmZvIC0gaW5pdCBwaW5zIGluZm8gd3JhcHBlclxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc0NC0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDc1Mz1zdGF0aWMgaW50XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzU0OmljZV9kcGxsX2luaXRfcGluc19pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBpbl90eXBlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc1NS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc1OC1cdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUOlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc1OTpcdFx0cmV0dXJuIGljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhwZiwgcGluX3R5cGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2MC1cdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NjEtXHRcdGlmIChwZi1cdTAwM2Vody5tYWNfdHlwZSA9PSBJQ0VfTUFDX0dFTkVSSUNfM0tfRTgyNSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3NjI6XHRcdFx0cmV0dXJuIGljZV9kcGxsX2luaXRfaW5mb19waW5fb25fcGluX2U4MjVjKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NjMtXHRcdGVsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3NjQ6XHRcdFx0cmV0dXJuIGljZV9kcGxsX2luaXRfaW5mb19yY2xrX3BpbihwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzY1LVx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9TT0ZUV0FSRTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3NjY6XHRcdHJldHVybiBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzY3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2OC1cdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfVFhDTEs6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzY5Olx0XHRyZXR1cm4gaWNlX2RwbGxfaW5pdF9pbmZvX3R4Y2xrX3BpbnNfZTgyNWMocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc3MC1cdGRlZmF1bHQ6XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc3OC0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc3OTogKiBSZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIHBpbnMgYnkgaWNlX2RwbGxfaW5pdF9pbmZvIGZ1bmN0aW9uLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc4MC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQ3ODE9c3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X2luZm8oc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc5My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3OTQ6ICogaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjIC0gcHJlcGFyZSBwZiYjMzk7cyBkcGxsIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBmb3IgZTgyNWNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3OTUtICogZGV2aWNlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDgwMy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4MDQ6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fZTgyNWMoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODA1LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODI4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDgyOTpcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9SQ0xLX0lOUFVUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4MzAtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4MzItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODMzOlx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX1RYQ0xLKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4MzQtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NDYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODQ3OiAqIGljZV9kcGxsX2luaXRfaW5mbyAtIHByZXBhcmUgcGYmIzM5O3MgZHBsbCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NDgtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NTYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODU3OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmLCBib29sIGNndSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MDEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTAyOlx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MDMtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MTMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTE0Olx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhwZiwgSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MTUtXHRcdGlmIChyZXQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00OTE2LVx0XHRcdGdvdG8gZGVpbml0X2luZm87XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTE3Olx0XHRyZXQgPSBpY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhwZiwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDkxOC1cdFx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00OTI3LVx0XHRwZi1cdTAwM2VkcGxscy5yY2xrLnBhcmVudF9pZHhbaV0gPSBkLVx1MDAzZWJhc2VfcmNsa19pZHggJiM0MzsgaTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ5Mjg6XHRyZXQgPSBpY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhwZiwgSUNFX0RQTExfUElOX1RZUEVfUkNMS19JTlBVVCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00OTI5LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00OTYwPXZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMDAtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDAxOiAqIGljZV9kcGxsX2luaXRfZTgyNSAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMDItICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMDktICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDEwOnN0YXRpYyB2b2lkIGljZV9kcGxsX2luaXRfZTgyNShzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMTEte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDM1Olx0ZXJyID0gaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzYtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTAzNy1cdFx0Z290byBlcnJfZXhpdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwMzg6XHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnR4YywgZmFsc2UsIERQTExfVFlQRV9HRU5FUklDKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzktXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA0MC1cdFx0Z290byBkZWluaXRfaW5mbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwNDE6XHRlcnIgPSBpY2VfZHBsbF9pbml0X3BpbnNfZTgyNShwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDQyLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDU4LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA1OTogKiBpY2VfZHBsbF9pbml0X2U4MTAgLSBpbml0aWFsaXplIHN1cHBvcnQgZm9yIGRwbGwgc3Vic3lzdGVtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDYwLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDY3LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA2ODpzdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MTAoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDY5LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDc0LVx0bXV0ZXhfaW5pdChcdTAwMjZkLVx1MDAzZWxvY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA3NTpcdGVyciA9IGljZV9kcGxsX2luaXRfaW5mbyhwZiwgY2d1KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNzYtXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA3Ny1cdFx0Z290byBlcnJfZXhpdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwNzg6XHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLmVlYywgY2d1LCBEUExMX1RZUEVfRUVDKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNzktXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA4MC1cdFx0Z290byBkZWluaXRfaW5mbztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwODE6XHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFx1MDAyNnBmLVx1MDAzZWRwbGxzLnBwcywgY2d1LCBEUExMX1RZUEVfUFBTKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwODItXHRpZiAoZXJyKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA4My1cdFx0Z290byBkZWluaXRfZWVjO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA4NDpcdGVyciA9IGljZV9kcGxsX2luaXRfcGlucyhwZiwgY2d1KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwODUtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwODctXHRpZiAoY2d1KSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDg4Olx0XHRlcnIgPSBpY2VfZHBsbF9pbml0X3dvcmtlcihwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDg5LVx0XHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MTA5OnZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTAte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTItXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTExMzpcdFx0aWNlX2RwbGxfaW5pdF9lODI1KHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTQtXHRcdGJyZWFrO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTExNS1cdGRlZmF1bHQ6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MTE2Olx0XHRpY2VfZHBsbF9pbml0X2U4MTAocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTExNy1cdFx0YnJlYWs7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmg9MTcyPXN0cnVjdCBpY2VfZHBsbHMge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oLTIwMi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFRQXzE1ODhfQ0xPQ0spXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaDoyMDM6dm9pZCBpY2VfZHBsbF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oLTIwNC12b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaC0yMDUtI2Vsc2VcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oOjIwNjpzdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaC0yMDctc3RhdGljIGlubGluZSB2b2lkIGljZV9kcGxsX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZikgeyB9XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDcyMT1zdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzM2LVx0ICAgIGljZV9pc19mZWF0dXJlX3N1cHBvcnRlZChwZiwgSUNFX0ZfUEhZX1JDTEspKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDczNzpcdFx0aWNlX2RwbGxfaW5pdChwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzM4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY0MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyYWNpbmcgdGhlIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGlzIGBpY2VfZHBsbF9pbml0YCBmdW5jdGlvbiBnZXRzIGNhbGxlZC4gUmlnaHQsIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3Mga2lja2VkIG9mZiBmcm9tIGBpY2VfaW5pdF9mZWF0dXJlc2AuIEFuZCB3aGVyZSBkb2VzICp0aGF0KiBjb21lIGZyb20/IEFoLCB0aGF0JiMzOTtzIGNhbGxlZCBmcm9tIGBpY2VfcHJvYmVgIOKAkyBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgY29udGV4dC4gQnV0IGhvbGQgb24sIGxldCYjMzk7cyBqdXN0IG1ha2Ugc3VyZSBJIGhhdmUgdGhpcyBzdHJhaWdodC4gWWVzLCB0aGUgcGFyZW50IG9mIGBpY2VfaW5pdF9mZWF0dXJlc2AgaXMgZGVmaW5pdGVseSBgaWNlX3Byb2JlYC4gQmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhlIHdlZWRzLCBJIHRoaW5rIGl0JiMzOTtzIHBydWRlbnQgdG8ganVzdCBxdWlja2x5IHZlcmlmeSB3aGVyZSBgaWNlX2luaXRfZmVhdHVyZXNgIGlzIGNhbGxlZCBmcm9tLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbCBzdGFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2luaXRfZmVhdHVyZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3MTE9dm9pZCBpY2VfZGVpbml0X2RldihzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzIwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDcyMTpzdGF0aWMgdm9pZCBpY2VfaW5pdF9mZWF0dXJlcyhzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ3MjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUwMjk9aW50IGljZV9sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUwNjctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MDY4Olx0aWNlX2luaXRfZmVhdHVyZXMocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTA2OS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzExNTEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbCBIaWVyYXJjaHkqKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgaWNlX2xvYWRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgaWNlX3Byb2JlYC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbiBoZXJlLCB0aGUgZnVuZGFtZW50YWwgcmVsYXRpb25zaGlwIEkgbmVlZCB0byBncmFzcC4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0byBjb25zaWRlciB0aGUgaW1wbGljYXRpb25zOiB3aGF0JiMzOTtzIHRoZSBwdXJwb3NlIG9mIGBpY2VfcHJvYmVgIGFuZCBob3cgZG9lcyBgaWNlX2xvYWRgIGZpdCBpbnRvIHRoYXQgcHJvY2Vzcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBhbmQgdGhlIGZ1bmN0aW9uYWwgZGVwZW5kZW5jeS4gSXMgYGljZV9sb2FkYCBhIGNvcmUgY29tcG9uZW50IG9mIGBpY2VfcHJvYmVgLCBvciBpcyBpdCBhIHN1cHBvcnRpbmcgdXRpbGl0eSBjYWxsZWQgb3Bwb3J0dW5pc3RpY2FsbHk/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggdGhpcyBhcnJhbmdlbWVudCwgYmFzZWQgb24gYmVzdCBwcmFjdGljZXMgd2l0aGluIHRoaXMgc3lzdGVtIG9yIHNpbWlsYXIgc3lzdGVtcyBJJiMzOTt2ZSB3b3JrZWQgb24/IE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gZm9ybSBwb3RlbnRpYWwgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBsaWtlIGVycm9yIGhhbmRsaW5nLCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcmF0aW9uYWxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpY2VfbG9hZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jPTEyMzU9c3RhdGljIGludCBpY2VfZGV2bGlua19yZWluaXRfdXAoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEyNzEtXHQvKiBObyBuZWVkIHRvIHRha2UgZGV2bF9sb2NrLCBpdCYjMzk7cyBhbHJlYWR5IHRha2VuIGJ5IGRldmxpbmsgQVBJICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI3MjpcdGVyciA9IGljZV9sb2FkKHBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjczLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmg9MTA1NT12b2lkIGljZV9zdGFydF9zZXJ2aWNlX3Rhc2soc3RydWN0IGljZV9wZiAqcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oOjEwNTY6aW50IGljZV9sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC0xMDU3LXZvaWQgaWNlX3VubG9hZChzdHJ1Y3QgaWNlX3BmICpwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDE4MT1zdGF0aWMgdm9pZCBpY2VfbG9nX3BrZ19pbml0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9kZHBfc3RhdGUgc3RhdGUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDI1Ny0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQyNTg6ICogaWNlX2xvYWRfcGtnIC0gbG9hZC9yZWxvYWQgdGhlIEREUCBQYWNrYWdlIGZpbGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQyNTktICogQGZpcm13YXJlOiBmaXJtd2FyZSBzdHJ1Y3R1cmUgd2hlbiBmaXJtd2FyZSByZXF1ZXN0ZWQgb3IgTlVMTCBmb3IgcmVsb2FkXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NDI2NT1zdGF0aWMgdm9pZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDI2NjppY2VfbG9hZF9wa2coY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00MjY3LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00NTM1PXN0YXRpYyBpbnQgaWNlX2luaXRfZGRwX2NvbmZpZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDU1NS1cdC8qIERvd25sb2FkIGZpcm13YXJlIHRvIGRldmljZSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDU1NjpcdGljZV9sb2FkX3BrZyhmaXJtd2FyZSwgcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDU1Ny1cdHJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUwMTM9c3RhdGljIHZvaWQgaWNlX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDIzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTAyNDogKiBpY2VfbG9hZCAtIGxvYWQgcGYgYnkgaW5pdCBodyBhbmQgc3RhcnRpbmcgVlNJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDI1LSAqIEBwZjogcG9pbnRlciB0byB0aGUgcGYgaW5zdGFuY2Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDI4LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTAyOTppbnQgaWNlX2xvYWQoc3RydWN0IGljZV9wZiAqcGYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDMwLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU1PWljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI2NS1cdGRldmxfbG9jayhwcml2X3RvX2RldmxpbmsocGYpKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyNjY6XHRlcnIgPSBpY2VfbG9hZChwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjY3LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz03NjM3PXN0YXRpYyB2b2lkIGljZV9yZWJ1aWxkKHN0cnVjdCBpY2VfcGYgKnBmLCBlbnVtIGljZV9yZXNldF9yZXEgcmVzZXRfdHlwZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NjczLVx0XHRcdC8qIFJlbG9hZCBERFAgUGFja2FnZSBhZnRlciBDT1JFUi9HTE9CUiByZXNldCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NzY3NDpcdFx0XHRpY2VfbG9hZF9wa2coTlVMTCwgcGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzY3NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1NzIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEUExMIE5ldGxpbmsgSW50ZXJmYWNlJiMzOTtzIFZ1bG5lcmFiaWxpdHkgV2luZG93KioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aGUgZXhlY3V0aW9uIGZsb3cgaGVyZS4gYGljZV9sb2FkYCBnZXRzIGNhbGxlZCBmcm9tIGBpY2VfcHJvYmVgLCB3aGljaCBpcyBmaW5lLiBCdXQgSSYjMzk7bSBub3RpY2luZyB0aGF0IGBpY2VfbG9hZGAgaXMgY2FsbGVkICphZnRlciogYGljZV9pbml0X2h3YC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGljZV9pbml0X2h3YCBpcyB0aGUgZ2F0ZWtlZXBlcjsgaXQgYmFpbHMgb3V0IGlmIGl0IGRvZXNuJiMzOTt0IGRldGVjdCB0aGUgcmVhbCBoYXJkd2FyZS4gSWYgYGljZV9pbml0X2h3YCBmYWlscywgYGljZV9sb2FkYCBuZXZlciBnZXRzIGNhbGxlZC4gQW5kIHRoYXQgbWVhbnMgYGljZV9kcGxsX2luaXRgIHdvbiYjMzk7dCBydW4uIENvbnNlcXVlbnRseSwgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgZm9yIHRoaXMgc3BlY2lmaWMgZGV2aWNlIG5ldmVyIGdldHMgcmVnaXN0ZXJlZC4gVGh1cywgdGhlIGZ1bmN0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4gKGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgKSBhcmUgdW5yZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rLgoKTm93LCBteSBtaW5kIGlzIHJhY2luZy4gSXMgdGhlcmUgYW55IHdheSBzeXprYWxsZXIgY291bGQgY2lyY3VtdmVudCBgaWNlX2luaXRfaHdgPyBEb2VzIGl0IGhhdmUgYSBtZWNoYW5pc20gdG8gYnlwYXNzIHRoaXMgaW5pdGlhbCBoYXJkd2FyZSBjaGVjaz8gTm9wZS4gU3l6a2FsbGVyJiMzOTtzIHN0cmVuZ3RoIGxpZXMgaW4gaXRzIGFiaWxpdHkgdG8gZnV6eiBhbmQgcHJvdmlkZSBpbnB1dCwgcGFydGljdWxhcmx5IFBDSSBtZW1vcnkgcmVhZHMsIGJ1dCBpdCBjYW4mIzM5O3QgZnVuZGFtZW50YWxseSBhbHRlciB0aGUga2VybmVsJiMzOTtzIGV4ZWN1dGlvbiBwYXRoLiBJdCBjYW4gb25seSBmZWVkIHRoZSBiZWFzdC4KCk9rYXksIGxldCYjMzk7cyBleHBsb3JlIHRoaXMuIElmIHN5emthbGxlciB0aHJvd3MgcmFuZG9tIHZhbHVlcyBhdCBQQ0kgbWVtb3J5IHJlYWRzLCBgaWNlX2luaXRfaHdgIHdpbGwgbGlrZWx5IGZhaWwuIEl0IGV4cGVjdHMgc3BlY2lmaWMgcmVnaXN0ZXIgc2VxdWVuY2VzIGFuZCB2YWx1ZXMsIGxpa2UgYEdMR0VOX1JTVEFUX0RFVlNUQVRFX01gIHRvIGJlIDAgYW5kIHNwZWNpZmljIGJpdHMgaW4gYEdMTlZNX1VMRGAgc2V0LiBUaGUgcHJvYmFiaWxpdHkgb2Ygc3l6a2FsbGVyIHN0dW1ibGluZyB1cG9uIHRoZSBleGFjdCByZWdpc3RlciByZWFkIHNlcXVlbmNlIG5lZWRlZCB0byBwYXNzIGBpY2VfY2hlY2tfcmVzZXRgIGFuZCBvdGhlciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzdGVwcyBpcyBwcmFjdGljYWxseSB6ZXJvLiBJdCYjMzk7cyBhIG5lZWRsZSBpbiBhIGhheXN0YWNrLCBhIGNvbWJpbmF0b3JpYWwgZXhwbG9zaW9uIG9mIGltcHJvYmFibGUgdmFsdWVzLgoKV2FpdC4uLiBkb2VzIGBzeXpfcGNpYCBldmVuIHN1cHBvcnQgZHluYW1pYyByZXNwb25zZXMgdG8gbWVtb3J5IHJlYWRzPyBVc3VhbGx5LCBpdCYjMzk7cyBqdXN0IGEgc2hhcmVkIG1lbW9yeSByZWdpb24gbWFwcGluZywgc28gYW55IHJlYWRzIHdpbGwgcmV0dXJuIHdoYXRldmVyIGlzIHByZS1wb3B1bGF0ZWQgaW4gdGhhdCBtZW1vcnkuIElmIGl0JiMzOTtzIGEgc3RhdGljIHJlZ2lvbiwgYHJkMzJgIHdvdWxkIGNvbnNpc3RlbnRseSByZXR1cm4gdGhlIHNhbWUgdmFsdWUuCgpMZXQmIzM5O3Mgem9vbSBpbiBvbiBgaWNlX2NoZWNrX3Jlc2V0YC4gSSBzZWUgYSBsb29wIGxpa2UgdGhpczoKCmBgYGMKCWZvciAoY250ID0gMDsgY250ICZsdDsgZ3JzdF90aW1lb3V0OyBjbnQmIzQzOyYjNDM7KSB7CgkJbWRlbGF5KDEwMCk7CgkJcmVnID0gcmQzMihodywgR0xHRU5fUlNUQVQpOwoJCWlmICghKHJlZyAmYW1wOyBHTEdFTl9SU1RBVF9ERVZTVEFURV9NKSkKCQkJYnJlYWs7Cgl9CmBgYAoKSWYgdGhlIG1lbW9yeSBtYXBwZWQgYnkgc3l6a2FsbGVyIGhhcHBlbnMgdG8gaGF2ZSBgR0xHRU5fUlNUQVRfREVWU1RBVEVfTWAgY2xlYXJlZCwgdGhlIGxvb3AgYnJlYWtzIGVhcmx5LiBUaGVuOgoKYGBgYwoJZm9yIChjbnQgPSAwOyBjbnQgJmx0OyBJQ0VfUEZfUkVTRVRfV0FJVF9DT1VOVDsgY250JiM0MzsmIzQzOykgewoJCXJlZyA9IHJkMzIoaHcsIEdMTlZNX1VMRCkgJmFtcDsgdWxkX21hc2s7CgkJaWYgKHJlZyA9PSB1bGRfbWFzaykgewoJCQlpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgJiMzNDtHbG9iYWwgcmVzZXQgcHJvY2Vzc2VzIGRvbmUuICVkXG4mIzM0OywgY250KTsKCQkJYnJlYWs7CgkJfQoJCW1kZWxheSgxMCk7Cgl9CmBgYAoKSWYgdGhlIG1lbW9yeSYjMzk7cyBiaXRzIGZvciBgdWxkX21hc2tgIGhhcHBlbiB0byBiZSBzZXQgY29ycmVjdGx5LCBhZ2FpbiwgaXQgd2lsbCBicmVhay4gSXQmIzM5O3MgaW1wcm9iYWJsZSwgYnV0IG5vdCBpbXBvc3NpYmxlLgoKVGhlIGNhdmVhdCBoZXJlIGlzIHRoYXQgYEdMR0VOX1JTVEFUYCBhbmQgYEdMTlZNX1VMRGAgYXJlIGF0IGRpZmZlcmVudCBvZmZzZXRzLiBJZiBzeXprYWxsZXIgbWFwcyBhIG1lbW9yeSByZWdpb24gYW5kIGxvYWRzIGl0IHdpdGggcmFuZG9tIGJ5dGVzLCBpdCBtaWdodCAqYWNjaWRlbnRhbGx5KiBoYXZlIHRoZSByaWdodCBiaXRzIGluIHRoZSByaWdodCBwbGFjZXMuIEl0IGlzIHN0aWxsIGEgdmVyeSBpbXByb2JhYmxlIHBhdGguIEJ1dCwgZXZlbiBpZiBpdCBoYXBwZW5zLCB0aGVyZSBhcmUgbWFueSBvdGhlciBjaGVja3MgaW4gYGljZV9pbml0X2h3YC4gRm9yIGluc3RhbmNlLCBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgIHJlcXVpcmVzIHNldHRpbmcgdXAgcmluZ3MgYW5kIHdhaXRpbmcgZm9yIGhhcmR3YXJlIHRvIHVwZGF0ZSBoZWFkL3RhaWwgcG9pbnRlcnMgb3Igc3RhdHVzIGJpdHMuIExldCBtZSBnbyBjaGVjayBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpY2VfY3JlYXRlX2FsbF9jdHJscSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaD04Nj1pbnQgaWNlX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9yZXNldF9yZXEgcmVxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODc6aW50IGljZV9jcmVhdGVfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtODgtaW50IGljZV9pbml0X2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodyk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jPTc4Nj1zdGF0aWMgdm9pZCBpY2VfaW5pdF9jdHJscV9sb2NrcyhzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy04MDctICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmM6ODA4OmludCBpY2VfY3JlYXRlX2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy04MDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNiAxNDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ4MwoJCQkJCQkJb3V0cHV0OiA0NQoJCQkJCQkJdGhvdWdodHM6IDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MDg6XHRpbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpXG4gODA5Olx0e1xuIDgxMDpcdFx0aWNlX2luaXRfY3RybHFfbG9ja3MoXHUwMDI2aHctXHUwMDNlYWRtaW5xKTtcbiA4MTE6XHRcdGlmIChpY2VfaXNfc2JxX3N1cHBvcnRlZChodykpXG4gODEyOlx0XHRcdGljZV9pbml0X2N0cmxxX2xvY2tzKFx1MDAyNmh3LVx1MDAzZXNicSk7XG4gODEzOlx0XHRpY2VfaW5pdF9jdHJscV9sb2NrcyhcdTAwMjZody1cdTAwM2VtYWlsYm94cSk7XG4gODE0Olx0XG4gODE1Olx0XHRyZXR1cm4gaWNlX2luaXRfYWxsX2N0cmxxKGh3KTtcbiA4MTY6XHR9XG4gODE3Olx0XG4gODE4Olx0LyoqXG4gODE5Olx0ICogaWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MgLSBEZXN0cm95IGxvY2tzIGZvciBhIGNvbnRyb2wgcXVldWVcbiA4MjA6XHQgKiBAY3E6IHBvaW50ZXIgdG8gdGhlIGNvbnRyb2wgcXVldWVcbiA4MjE6XHQgKlxuIDgyMjpcdCAqIERlc3Ryb3lzIHRoZSBzZW5kIGFuZCByZWNlaXZlIHF1ZXVlIGxvY2tzIGZvciBhIGdpdmVuIGNvbnRyb2wgcXVldWUuXG4gODIzOlx0ICovXG4gODI0Olx0c3RhdGljIHZvaWQgaWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3Moc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSlcbiA4MjU6XHR7XG4gODI2Olx0XHRtdXRleF9kZXN0cm95KFx1MDAyNmNxLVx1MDAzZXNxX2xvY2spO1xuIDgyNzpcdFx0bXV0ZXhfZGVzdHJveShcdTAwMjZjcS1cdTAwM2VycV9sb2NrKTtcbiA4Mjg6XHR9XG4gODI5Olx0XG4gODMwOlx0LyoqXG4gODMxOlx0ICogaWNlX2Rlc3Ryb3lfYWxsX2N0cmxxIC0gZXhpdCByb3V0aW5lIGZvciBhbGwgY29udHJvbCBxdWV1ZXNcbiA4MzI6XHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuIDgzMzpcdCAqXG4gODM0Olx0ICogVGhpcyBmdW5jdGlvbiBzaHV0cyBkb3duIGFsbCB0aGUgY29udHJvbCBxdWV1ZXMgYW5kIHRoZW4gZGVzdHJveXMgdGhlXG4gODM1Olx0ICogY29udHJvbCBxdWV1ZSBsb2Nrcy4gSXQgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIGR1cmluZyBkcml2ZXIgdW5sb2FkLiBUaGVcbiA4MzY6XHQgKiBkcml2ZXIgc2hvdWxkIGNhbGwgaWNlX3NodXRkb3duX2FsbF9jdHJscSBpZiBpdCBuZWVkcyB0byBzaHV0IGRvd24gYW5kXG4gODM3Olx0ICogcmVpbml0aWFsaXplIGNvbnRyb2wgcXVldWVzLCBzdWNoIGFzIGluIHJlc3BvbnNlIHRvIGEgcmVzZXQgZXZlbnQuXG4gODM4Olx0ICovXG4gODM5Olx0dm9pZCBpY2VfZGVzdHJveV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpXG4gODQwOlx0e1xuIDg0MTpcdFx0Lyogc2h1dCBkb3duIGFsbCB0aGUgY29udHJvbCBxdWV1ZXMgZmlyc3QgKi9cbiA4NDI6XHRcdGljZV9zaHV0ZG93bl9hbGxfY3RybHEoaHcsIHRydWUpO1xuIDg0MzpcdFxuIDg0NDpcdFx0aWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MoXHUwMDI2aHctXHUwMDNlYWRtaW5xKTtcbiA4NDU6XHRcdGlmIChpY2VfaXNfc2JxX3N1cHBvcnRlZChodykpXG4gODQ2Olx0XHRcdGljZV9kZXN0cm95X2N0cmxxX2xvY2tzKFx1MDAyNmh3LVx1MDAzZXNicSk7XG4gODQ3Olx0XHRpY2VfZGVzdHJveV9jdHJscV9sb2NrcyhcdTAwMjZody1cdTAwM2VtYWlsYm94cSk7XG4gODQ4Olx0fVxuIDg0OTpcdFxuIDg1MDpcdC8qKlxuIDg1MTpcdCAqIGljZV9jbGVhbl9zcSAtIGNsZWFucyBzZW5kIHNpZGUgb2YgYSBjb250cm9sIHF1ZXVlXG4gODUyOlx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiA4NTM6XHQgKiBAY3E6IHBvaW50ZXIgdG8gdGhlIHNwZWNpZmljIENvbnRyb2wgcXVldWVcbiA4NTQ6XHQgKlxuIDg1NTpcdCAqIHJldHVybnMgdGhlIG51bWJlciBvZiBmcmVlIGRlc2NcbiA4NTY6XHQgKi9cbiA4NTc6XHRzdGF0aWMgdTE2IGljZV9jbGVhbl9zcShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzUzMjIKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBJbnZlc3RpZ2F0aW9uIGludG8gSWNlIEluaXRpYWxpemF0aW9uKioKCkFscmlnaHQsIHRoZSBkZWJ1Z2dpbmcgdHJhY2UgaGFzIGhpdCBgaWNlX2luaXRfYWxsX2N0cmxxYC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiwgYXMgdGhlIG5hbWluZyBjb252ZW50aW9uIHN1Z2dlc3RzIOKAkyBsaWtlbHkgdGhlIG1hc3RlciBpbml0aWFsaXplciBmb3IgdGhlICpJQ0UqIChJIGFzc3VtZSBpdCYjMzk7cyByZWxhdGVkIHRvIHRoZSBzdWJzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGgpIGNvbnRyb2xsZXIgcXVldWVzLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBtYWluIHRocmVhZCBvciB0YXNrIHRoYXQgbWFuYWdlcyB0aGUgY29udHJvbCBmbG93IGlzIGluaXRpYWxpemVkLCBvciB3aGVyZSB2YXJpb3VzIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgYnJvdWdodCBvbmxpbmUsIGFuZCB0aGUgY29udHJvbGxlciYjMzk7cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaGVyZSBiZWNhdXNlIGRlcGVuZGluZyBvbiB3aGF0IG9jY3VycywgdGhlIHByb2JsZW0gSSYjMzk7bSBpbnZlc3RpZ2F0aW5nIG1heSBsaWUgaW4gdGhlIGljZSBjb25maWd1cmF0aW9uLCBzeXN0ZW0gcmVzZXQsIG9yIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIFdoYXQgZm9sbG93cyB0aGlzIGZ1bmN0aW9uIGNhbGwgd2lsbCB0ZWxsIG1lIGhvdyBjcml0aWNhbCB0aGlzIHN0ZXAgaXMgdG8gdGhlIHJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGF0IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBpY2VfaW5pdF9hbGxfY3RybHEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg9ODc9aW50IGljZV9jcmVhdGVfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODg6aW50IGljZV9pbml0X2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTg5LXZvaWQgaWNlX3NodXRkb3duX2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodywgYm9vbCB1bmxvYWRpbmcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYz03MjE9dm9pZCBpY2Vfc2h1dGRvd25fYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIHVubG9hZGluZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmMtNzQ0LSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jOjc0NTppbnQgaWNlX2luaXRfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTc0Ni17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODQ0CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDc0NTpcdGludCBpY2VfaW5pdF9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpXG4gNzQ2Olx0e1xuIDc0NzpcdFx0dTMyIHJldHJ5ID0gMDtcbiA3NDg6XHRcdGludCBzdGF0dXM7XG4gNzQ5Olx0XG4gNzUwOlx0XHQvKiBJbml0IEZXIGFkbWluIHF1ZXVlICovXG4gNzUxOlx0XHRkbyB7XG4gNzUyOlx0XHRcdHN0YXR1cyA9IGljZV9pbml0X2N0cmxxKGh3LCBJQ0VfQ1RMX1FfQURNSU4pO1xuIDc1MzpcdFx0XHRpZiAoc3RhdHVzKVxuIDc1NDpcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gNzU1Olx0XG4gNzU2Olx0XHRcdHN0YXR1cyA9IGljZV9pbml0X2NoZWNrX2FkbWlucShodyk7XG4gNzU3Olx0XHRcdGlmIChzdGF0dXMgIT0gLUVJTylcbiA3NTg6XHRcdFx0XHRicmVhaztcbiA3NTk6XHRcbiA3NjA6XHRcdFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0FRX01TRywgXCYjMzQ7UmV0cnkgQWRtaW4gUXVldWUgaW5pdCBkdWUgdG8gRlcgY3JpdGljYWwgZXJyb3JcXG5cJiMzNDspO1xuIDc2MTpcdFx0XHRpY2Vfc2h1dGRvd25fY3RybHEoaHcsIElDRV9DVExfUV9BRE1JTiwgdHJ1ZSk7XG4gNzYyOlx0XHRcdG1zbGVlcChJQ0VfQ1RMX1FfQURNSU5fSU5JVF9NU0VDKTtcbiA3NjM6XHRcdH0gd2hpbGUgKHJldHJ5JiM0MzsmIzQzOyBcdTAwM2MgSUNFX0NUTF9RX0FETUlOX0lOSVRfVElNRU9VVCk7XG4gNzY0Olx0XG4gNzY1Olx0XHRpZiAoc3RhdHVzKVxuIDc2NjpcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIDc2NzpcdFx0Lyogc2lkZWJhbmQgY29udHJvbCBxdWV1ZSAoU0JRKSBpbnRlcmZhY2UgaXMgbm90IHN1cHBvcnRlZCBvbiBzb21lXG4gNzY4Olx0XHQgKiBkZXZpY2VzLiBJbml0aWFsaXplIGlmIHN1cHBvcnRlZCwgZWxzZSBmYWxsYmFjayB0byB0aGUgYWRtaW4gcXVldWVcbiA3Njk6XHRcdCAqIGludGVyZmFjZVxuIDc3MDpcdFx0ICovXG4gNzcxOlx0XHRpZiAoaWNlX2lzX3NicV9zdXBwb3J0ZWQoaHcpKSB7XG4gNzcyOlx0XHRcdHN0YXR1cyA9IGljZV9pbml0X2N0cmxxKGh3LCBJQ0VfQ1RMX1FfU0IpO1xuIDc3MzpcdFx0XHRpZiAoc3RhdHVzKVxuIDc3NDpcdFx0XHRcdHJldHVybiBzdGF0dXM7XG4gNzc1Olx0XHR9XG4gNzc2Olx0XHQvKiBJbml0IE1haWxib3ggcXVldWUgKi9cbiA3Nzc6XHRcdHJldHVybiBpY2VfaW5pdF9jdHJscShodywgSUNFX0NUTF9RX01BSUxCT1gpO1xuIDc3ODpcdH1cbiA3Nzk6XHRcbiA3ODA6XHQvKipcbiA3ODE6XHQgKiBpY2VfaW5pdF9jdHJscV9sb2NrcyAtIEluaXRpYWxpemUgbG9ja3MgZm9yIGEgY29udHJvbCBxdWV1ZVxuIDc4MjpcdCAqIEBjcTogcG9pbnRlciB0byB0aGUgY29udHJvbCBxdWV1ZVxuIDc4MzpcdCAqXG4gNzg0Olx0ICogSW5pdGlhbGl6ZXMgdGhlIHNlbmQgYW5kIHJlY2VpdmUgcXVldWUgbG9ja3MgZm9yIGEgZ2l2ZW4gY29udHJvbCBxdWV1ZS5cbiA3ODU6XHQgKi9cbiA3ODY6XHRzdGF0aWMgdm9pZCBpY2VfaW5pdF9jdHJscV9sb2NrcyhzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxKVxuIDc4NzpcdHtcbiA3ODg6XHRcdG11dGV4X2luaXQoXHUwMDI2Y3EtXHUwMDNlc3FfbG9jayk7XG4gNzg5Olx0XHRtdXRleF9pbml0KFx1MDAyNmNxLVx1MDAzZXJxX2xvY2spO1xuIDc5MDpcdH1cbiA3OTE6XHRcbiA3OTI6XHQvKipcbiA3OTM6XHQgKiBpY2VfY3JlYXRlX2FsbF9jdHJscSAtIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYWxsIGNvbnRyb2wgcXVldWVzXG4gNzk0Olx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY2MzYKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqSW5pdGlhbCBBc3Nlc3NtZW50IG9mIGBpY2VfaW5pdF9jdHJscWAqKgoKQWxyaWdodCwgdGhlIGZpcnN0IHRoaW5nIHRoYXQgcG9wcyBpbnRvIG15IGhlYWQgaXMgYGljZV9pbml0X2N0cmxxYC4gVGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgaW1tZWRpYXRlbHkgYmVnaW4gcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3RzLiBJJiMzOTttIGFzc3VtaW5nIHRoaXMgaXMgcmVsYXRlZCB0byBzb21ldGhpbmcgd2l0aGluIHRoZSBgaWNlYCBmcmFtZXdvcmssIGxpa2VseSBpbml0aWFsaXphdGlvbiBvciBjb250cm9sIGZ1bmN0aW9ucy4gVGhlIGBpbml0YCBzdHJvbmdseSBzdWdnZXN0cyB0aGlzIGlzIHRoZSBzZXR1cCBwaGFzZSBmb3IgYSBwYXJ0aWN1bGFyIG1vZHVsZSBvciBjb21wb25lbnQsIGFuZCBgY3RybHFgPyBUaGF0IGNvdWxkIGJlIGEgY3VzdG9tIG5hbWUgZm9yIGEgc3BlY2lmaWMgY29udHJvbCBncm91cCBvciBtYXliZSBldmVuIHNvbWUgc29ydCBvZiBRdWljayBjb21tYW5kIGluaXRpYXRpb24uIEkgbmVlZCB0byBrbm93IHdoZXJlIEkmIzM5O20gZ29pbmcgdG8gbG9vayB0byB1bnBhY2sgdGhpcy4gSXMgdGhpcyBhIHN5c3RlbSBzZXJ2aWNlPyBPciBpcyBpdCBwYXJ0IG9mIGEgdXNlci1sYW5kIHByb2dyYW0/IE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgd2hpY2ggbGlicmFyaWVzIGFyZSBsaW5rZWQsIHdoaWNoIHN5c3RlbSBjb21wb25lbnRzIGFyZSBpbiBwbGF5IGFuZCB3aGF0IHRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBjb21wb25lbnQgaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0YXRpYyBpbnQgaWNlX2luaXRfY3RybHEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYz01NzA9c3RhdGljIGludCBpY2VfaW5pdF9jaGVja19hZG1pbnEoc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTYwNS0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYzo2MDY6c3RhdGljIGludCBpY2VfaW5pdF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfY3RsX3EgcV90eXBlKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTYwNy17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3MDM5CgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYwNjpcdHN0YXRpYyBpbnQgaWNlX2luaXRfY3RybHEoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2N0bF9xIHFfdHlwZSlcbiA2MDc6XHR7XG4gNjA4Olx0XHRzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxO1xuIDYwOTpcdFx0aW50IHJldF9jb2RlO1xuIDYxMDpcdFxuIDYxMTpcdFx0c3dpdGNoIChxX3R5cGUpIHtcbiA2MTI6XHRcdGNhc2UgSUNFX0NUTF9RX0FETUlOOlxuIDYxMzpcdFx0XHRpY2VfYWRtaW5xX2luaXRfcmVncyhodyk7XG4gNjE0Olx0XHRcdGNxID0gXHUwMDI2aHctXHUwMDNlYWRtaW5xO1xuIDYxNTpcdFx0XHRicmVhaztcbiA2MTY6XHRcdGNhc2UgSUNFX0NUTF9RX1NCOlxuIDYxNzpcdFx0XHRpY2Vfc2JfaW5pdF9yZWdzKGh3KTtcbiA2MTg6XHRcdFx0Y3EgPSBcdTAwMjZody1cdTAwM2VzYnE7XG4gNjE5Olx0XHRcdGJyZWFrO1xuIDYyMDpcdFx0Y2FzZSBJQ0VfQ1RMX1FfTUFJTEJPWDpcbiA2MjE6XHRcdFx0aWNlX21haWxib3hfaW5pdF9yZWdzKGh3KTtcbiA2MjI6XHRcdFx0Y3EgPSBcdTAwMjZody1cdTAwM2VtYWlsYm94cTtcbiA2MjM6XHRcdFx0YnJlYWs7XG4gNjI0Olx0XHRkZWZhdWx0OlxuIDYyNTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiA2MjY6XHRcdH1cbiA2Mjc6XHRcdGNxLVx1MDAzZXF0eXBlID0gcV90eXBlO1xuIDYyODpcdFxuIDYyOTpcdFx0LyogdmVyaWZ5IGlucHV0IGZvciB2YWxpZCBjb25maWd1cmF0aW9uICovXG4gNjMwOlx0XHRpZiAoIWNxLVx1MDAzZW51bV9ycV9lbnRyaWVzIHx8ICFjcS1cdTAwM2VudW1fc3FfZW50cmllcyB8fFxuIDYzMTpcdFx0ICAgICFjcS1cdTAwM2VycV9idWZfc2l6ZSB8fCAhY3EtXHUwMDNlc3FfYnVmX3NpemUpIHtcbiA2MzI6XHRcdFx0cmV0dXJuIC1FSU87XG4gNjMzOlx0XHR9XG4gNjM0Olx0XG4gNjM1Olx0XHQvKiBhbGxvY2F0ZSB0aGUgQVRRICovXG4gNjM2Olx0XHRyZXRfY29kZSA9IGljZV9pbml0X3NxKGh3LCBjcSk7XG4gNjM3Olx0XHRpZiAocmV0X2NvZGUpXG4gNjM4Olx0XHRcdHJldHVybiByZXRfY29kZTtcbiA2Mzk6XHRcbiA2NDA6XHRcdC8qIGFsbG9jYXRlIHRoZSBBUlEgKi9cbiA2NDE6XHRcdHJldF9jb2RlID0gaWNlX2luaXRfcnEoaHcsIGNxKTtcbiA2NDI6XHRcdGlmIChyZXRfY29kZSlcbiA2NDM6XHRcdFx0Z290byBpbml0X2N0cmxxX2ZyZWVfc3E7XG4gNjQ0Olx0XG4gNjQ1Olx0XHQvKiBzdWNjZXNzISAqL1xuIDY0NjpcdFx0cmV0dXJuIDA7XG4gNjQ3Olx0XG4gNjQ4Olx0aW5pdF9jdHJscV9mcmVlX3NxOlxuIDY0OTpcdFx0aWNlX3NodXRkb3duX3NxKGh3LCBjcSk7XG4gNjUwOlx0XHRyZXR1cm4gcmV0X2NvZGU7XG4gNjUxOlx0fVxuIDY1MjpcdFxuIDY1MzpcdC8qKlxuIDY1NDpcdCAqIGljZV9pc19zYnFfc3VwcG9ydGVkIC0gaXMgdGhlIHNpZGViYW5kIHF1ZXVlIHN1cHBvcnRlZFxuIDY1NTpcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE2IDE0OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzgxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgYGljZV9pbml0X2NoZWNrX2FkbWlucWAqKgoKQWxyaWdodCwgSSYjMzk7bSB0YWtpbmcgYSBsb29rIGF0IHRoaXMgYGljZV9pbml0X2NoZWNrX2FkbWlucWAgZnVuY3Rpb24uIFdoYXQmIzM5O3MgaXQgZG9pbmc/IEJhc2VkIG9uIHRoZSBuYW1lLCBteSBpbml0aWFsIGFzc3VtcHRpb24gaXMgdGhhdCB0aGlzIGNvZGUgYmxvY2sgaGFuZGxlcyB0aGUgaW5pdGlhbGl6YXRpb24gb3IgdmVyaWZpY2F0aW9uIHJlbGF0ZWQgdG8gYW4gYWRtaW5pc3RyYXRpdmUgcXVldWUgb3IgcG9zc2libHkgYSBkYXRhIHN0cnVjdHVyZSBpbnZvbHZlZCBpbiBhZG1pbiB0YXNrcy4gVGhlICYjMzQ7aWNlJiMzNDsgcHJlZml4IHByb2JhYmx5IGluZGljYXRlcyB0aGlzIGlzIHBhcnQgb2YgYSBsYXJnZXIgY29tcG9uZW50IG9yIHN1YnN5c3RlbSwgcGVyaGFwcyByZWxhdGVkIHRvIHRoZSBJbnRlcm5ldCBDb250cm9sIEVuZ2luZSAoSUNFKSwgd2hhdGV2ZXIgdGhhdCBmcmFtZXdvcmsgbWF5IGJlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIG15IHByZWxpbWluYXJ5IGFzc3VtcHRpb25zIGFib3V0IHRoZSBjb250ZXh0IGFyZSBhY2N1cmF0ZS4gSSB3aWxsIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU3MDpcdHN0YXRpYyBpbnQgaWNlX2luaXRfY2hlY2tfYWRtaW5xKHN0cnVjdCBpY2VfaHcgKmh3KVxuIDU3MTpcdHtcbiA1NzI6XHRcdHN0cnVjdCBpY2VfY3RsX3FfaW5mbyAqY3EgPSBcdTAwMjZody1cdTAwM2VhZG1pbnE7XG4gNTczOlx0XHRpbnQgc3RhdHVzO1xuIDU3NDpcdFxuIDU3NTpcdFx0c3RhdHVzID0gaWNlX2FxX2dldF9md192ZXIoaHcsIE5VTEwpO1xuIDU3NjpcdFx0aWYgKHN0YXR1cylcbiA1Nzc6XHRcdFx0Z290byBpbml0X2N0cmxxX2ZyZWVfcnE7XG4gNTc4Olx0XG4gNTc5Olx0XHRpZiAoIWljZV9hcV92ZXJfY2hlY2soaHcpKSB7XG4gNTgwOlx0XHRcdHN0YXR1cyA9IC1FSU87XG4gNTgxOlx0XHRcdGdvdG8gaW5pdF9jdHJscV9mcmVlX3JxO1xuIDU4MjpcdFx0fVxuIDU4MzpcdFxuIDU4NDpcdFx0cmV0dXJuIDA7XG4gNTg1Olx0XG4gNTg2Olx0aW5pdF9jdHJscV9mcmVlX3JxOlxuIDU4NzpcdFx0aWNlX3NodXRkb3duX3JxKGh3LCBjcSk7XG4gNTg4Olx0XHRpY2Vfc2h1dGRvd25fc3EoaHcsIGNxKTtcbiA1ODk6XHRcdHJldHVybiBzdGF0dXM7XG4gNTkwOlx0fVxuIDU5MTpcdFxuIDU5MjpcdC8qKlxuIDU5MzpcdCAqIGljZV9pbml0X2N0cmxxIC0gbWFpbiBpbml0aWFsaXphdGlvbiByb3V0aW5lIGZvciBhbnkgY29udHJvbCBRdWV1ZVxuIDU5NDpcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG4gNTk1Olx0ICogQHFfdHlwZTogc3BlY2lmaWMgQ29udHJvbCBxdWV1ZSB0eXBlXG4gNTk2Olx0ICpcbiA1OTc6XHQgKiBQcmlvciB0byBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBkcml2ZXIgKk1VU1QqIHNldCB0aGUgZm9sbG93aW5nIGZpZWxkc1xuIDU5ODpcdCAqIGluIHRoZSBjcS1cdTAwM2VzdHJ1Y3R1cmU6XG4gNTk5Olx0ICogICAgIC0gY3EtXHUwMDNlbnVtX3NxX2VudHJpZXNcbiA2MDA6XHQgKiAgICAgLSBjcS1cdTAwM2VudW1fcnFfZW50cmllc1xuIDYwMTpcdCAqICAgICAtIGNxLVx1MDAzZXJxX2J1Zl9zaXplXG4gNjAyOlx0ICogICAgIC0gY3EtXHUwMDNlc3FfYnVmX3NpemVcbiA2MDM6XHQgKlxuIDYwNDpcdCAqIE5PVEU6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaW5pdGlhbGl6ZSB0aGUgY29udHJvbHEgbG9ja3NcbiA2MDU6XHQgKi9cbiA2MDY6XHRzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9jdGxfcSBxX3R5cGUpXG4gNjA3Olx0e1xuIDYwODpcdFx0c3RydWN0IGljZV9jdGxfcV9pbmZvICpjcTtcbiA2MDk6XHRcdGludCByZXRfY29kZTtcbiA2MTA6XHRcbiA2MTE6XHRcdHN3aXRjaCAocV90eXBlKSB7XG4gNjEyOlx0XHRjYXNlIElDRV9DVExfUV9BRE1JTjpcbiA2MTM6XHRcdFx0aWNlX2FkbWlucV9pbml0X3JlZ3MoaHcpO1xuIDYxNDpcdFx0XHRjcSA9IFx1MDAyNmh3LVx1MDAzZWFkbWlucTtcbiA2MTU6XHRcdFx0YnJlYWs7XG4gNjE2Olx0XHRjYXNlIElDRV9DVExfUV9TQjpcbiA2MTc6XHRcdFx0aWNlX3NiX2luaXRfcmVncyhodyk7XG4gNjE4Olx0XHRcdGNxID0gXHUwMDI2aHctXHUwMDNlc2JxO1xuIDYxOTpcdFx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzg3NjAKCQkJCQkJCW91dHB1dDogMTI2CgkJCQkJCQl0aG91Z2h0czogODU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhpbmtpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgY29kZSBpcyAqZGVmaW5pdGVseSogdW5yZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSB3aG9sZSB0aGluZyBoaW5nZXMgb24gYSBzdWNjZXNzZnVsIHByb2JlIG9mIHRoZSBJbnRlbCBFODAwIHNlcmllcyBQQ0llIG5ldHdvcmsgY2FyZCwgYW5kIHRoYXQgcHJvYmUgcmVsaWVzIG9uIGEgZnVuY3Rpb25pbmcgZmlybXdhcmUgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBBZG1pbiBRdWV1ZS4KCkZpcnN0LCBJIHJlYWxpemVkIHRoYXQgYGljZV9hcV9nZXRfZndfdmVyYCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQuIElmIHRoZXJlJiMzOTtzIG5vIGZpcm13YXJlLCBpdCB0aW1lcyBvdXQgb3IgZmFpbHMuIFRoaXMgbGVhZHMgdG8gYGljZV9pbml0X2NoZWNrX2FkbWlucWAgZmFpbGluZywgd2hpY2ggaW4gdHVybiBjYXVzZXMgYGljZV9pbml0X2FsbF9jdHJscWAgdG8gcmV0cnkgYW5kICphbHNvKiBmYWlsLiBDb25zZXF1ZW50bHksIGBpY2VfaW5pdF9od2AgYW5kIHVsdGltYXRlbHkgYGljZV9wcm9iZWAgZmFpbCwgcHJldmVudGluZyB0aGUgZHJpdmVyIGZyb20gbG9hZGluZyBhbmQgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgZnJvbSByZWdpc3RlcmluZy4gQmFzaWNhbGx5LCBpdCYjMzk7cyBhIGNhc2NhZGluZyBmYWlsdXJlLiBTaW5jZSB0aGUgcHJvYmUgZG9lc24mIzM5O3Qgd29yaywgdGhlIGRyaXZlciB3b24mIzM5O3QgbG9hZCBhbmQgbXkgRFBMTCBjb2RlIGlzIGluYWNjZXNzaWJsZS4KClRoZW4gSSBjb25zaWRlcmVkIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgbWFnaWNhbGx5IG1vY2sgdGhlIEFkbWluIFF1ZXVlLiBJIGtub3cgc3l6a2FsbGVyIHByZXR0eSB3ZWxsLCBhbmQgSSBrbm93IGl0ICpkb2VzbiYjMzk7dCogaGF2ZSBhIHNwZWNpZmljIG1vY2sgZm9yIEludGVsIElDRSBBZG1pbiBRdWV1ZSwgb25seSBnZW5lcmljIFBDSSBmdXp6aW5nLiBUaGF0IGFtb3VudHMgdG8gcmFuZG9tIG1lbW9yeSB3cml0ZXMgYW5kIGl0JiMzOTtzIGEgbG9uZyBzaG90LCBJIG1lYW4gYSBjb21wbGV0ZSBzaG90IGluIHRoZSBkYXJrLCBhbmQgaW1wb3NzaWJsZSB0byByZWxpYWJseSBzaW11bGF0ZSB0aGUgY29tcGxleCBBZG1pbiBRdWV1ZSBwcm90b2NvbCwgaW5jbHVkaW5nIHNldHRpbmcgdXAgZGVzY3JpcHRvcnMsIHVwZGF0aW5nIHBvaW50ZXJzIGFuZCB3cml0aW5nIGNvcnJlY3QgcmVzcG9uc2VzLiBObyB3YXkgdGhhdCBpcyBnb2luZyB0byB3b3JrLgoKTmV4dCBJIGRvdWJsZS1jaGVja2VkIGlmIHRoZXJlIHdhcyBzb21lIG90aGVyIGhpZGRlbiBwYXRoLiBJIGV4YW1pbmVkIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc3dfcGluc191cGRhdGVgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgLCBhbmQgYGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zYC4gSSB0cmFjZWQgdGhlaXIgY2FsbHMuIFRoZXkmIzM5O3JlIGFsbCBzdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgaWNlX2RwbGwuY2AuIFRoZSBjYWxsYmFja3MgYXJlIGFsbCByZWdpc3RlcmVkIGFuZCBpbml0aWFsaXplZCB3aXRoaW4gYGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zYCBvciByZWxhdGVkIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYGljZV9kcGxsX2luaXRgLiBJIGxvb2tlZCBiYWNrIGFuZCBjb25maXJtZWQgdGhhdCBgaWNlX2RwbGxfaW5pdGAgaXMgKm9ubHkqIGNhbGxlZCBpZiBgaWNlX3Byb2JlYCBzdWNjZWVkZWQgLSBpLmUuLCB0aGUgZHJpdmVyIHN1Y2Nlc3NmdWxseSBpbml0aWFsaXplZCBhbmQgcHJvYmVkIHRoZSBoYXJkd2FyZS4gR2l2ZW4gbXkgZWFybGllciBjb25jbHVzaW9uLCBzaW5jZSB0aGUgZHJpdmVyIGNhbiYjMzk7dCBpbml0aWFsaXplIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCB0aGUgcmVhbCBoYXJkd2FyZSBvciBhIHZlcnkgc29waGlzdGljYXRlZCBlbXVsYXRvciAod2hpY2ggZG9lc24mIzM5O3QgZXhpc3QpLCB0aGlzIGNvZGUgaXMgYWxzbyB1bnJlYWNoYWJsZS4KCkZpbmFsbHksIEkgcmV2aWV3ZWQgdGhlIHByb21wdCYjMzk7cyBpbnN0cnVjdGlvbnM6IEkgbmVlZCB0byBmbGFnICYjMzQ7V29ydGhGdXp6aW5nPWZhbHNlJiMzNDsgaWYgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIHJlYWNoIHRoZSBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggaXMgZm9yIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgKnJlcXVpcmVzKiBmaXJtd2FyZSBpbnRlcmFjdGlvbi4gVGhlcmUmIzM5O3Mgbm8gZWZmZWN0aXZlIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIGZvciB0aGlzOyBub3QgaW4gUUVNVSwgbm90IGluIHRoZSBrZXJuZWwuIFNvLCB0aGUgZHJpdmVyIGZhaWxzIHRvIHByb2JlLCB0aGUgY29kZSBpcyB1bnJlYWNoYWJsZS4gU2ltcGxlLiBUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgdGhhdCAmIzM0O1dvcnRoRnV6emluZyYjMzQ7IHNob3VsZCBiZSBzZXQgdG8gKmZhbHNlKi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTYgMTQ6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBwaW4gbWFuYWdlbWVudCBsb2dpYyBpbiB0aGUgSW50ZWwgSUNFIChFODAwIHNlcmllcykgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgcmVxdWlyZXMgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGV2aWNlIGZpcm13YXJlIChlLmcuLCBBZG1pbiBRdWV1ZSkgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCBpbml0aWFsaXplLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgcGluIG1hbmFnZW1lbnQgbG9naWMgaW4gdGhlIEludGVsIElDRSAoRTgwMCBzZXJpZXMpIGV0aGVybmV0IGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIHJlcXVpcmVzIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW4gUXVldWUpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDowNS44ODIxMDY2MThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjkzOTI1Nzc5NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIERQTEwgKERpZ2l0YWwgUGhhc2UgTG9ja2VkIExvb3ApIHBpbiBtYW5hZ2VtZW50IGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgKEU4MDAgc2VyaWVzKSBldGhlcm5ldCBkcml2ZXIuIFRoaXMgZHJpdmVyIGlzIGZvciBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGFuZCByZXF1aXJlcyBjb21wbGV4IGludGVyYWN0aW9ucyB3aXRoIHRoZSBkZXZpY2UgZmlybXdhcmUgKGUuZy4sIEFkbWluIFF1ZXVlKSB0byBzdWNjZXNzZnVsbHkgcHJvYmUgYW5kIGluaXRpYWxpemUuIFNpbmNlIHRoZXJlIGlzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciB0aGlzIGhhcmR3YXJlIGluIFFFTVUgb3IgdGhlIGtlcm5lbCwgdGhlIGRyaXZlciB3aWxsIGZhaWwgdG8gcHJvYmUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDowNS44ODIxMTE4MDhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY2NzI5Mzk2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGJhM2NmMWMzMjJkY2Q0ZDQyZWE5ZTM5ZTA0MjE1MWU1ZTA5ZDdlOWFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBKdWwgMTYgMTQ6MTQ6MDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbmluZGV4IDMwYzNhNGRiN2Q2MTFjLi5mMjEzZDZlMTJjYzQ5YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXFxuQEAgLTUzOCw2ICs1MzgsMjkgQEAgaWNlX2RwbGxfcGluX2Rpc2FibGUoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxcbisgKiBAY2hhbmdlZDogdGhlIFNXIHBpbiB0aGF0IHdhcyBleHBsaWNpdGx5IGNoYW5nZWQgKGFscmVhZHkgbm90aWZpZWQgYnkgZHBsbCBjb3JlKVxcbisgKlxcbisgKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXFxuKyAqIFNNQTIvVS5GTDIpLiAgV2hlbiBvbmUgcGluJ3Mgcm91dGluZyBjaGFuZ2VzIHZpYSB0aGUgUENBOTU3NSBHUElPXFxuKyAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbidzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcXG4rICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxcbisgKiBwZWVyIHZpYSBkcGxsIG5ldGxpbmsgbGVhcm4gYWJvdXQgdGhlIHVwZGF0ZS5cXG4rICpcXG4rICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cXHUwMDNlZHBsbHMubG9jayBpc1xcbisgKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXNcXG4rICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpXFxuK3tcXG4rXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcXG4rXFxuK1xcdHBlZXIgPSBjaGFuZ2VkLVxcdTAwM2VtdXhlZDtcXG4rXFx0aWYgKHBlZXItXFx1MDAzZXBpbilcXG4rXFx0XFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItXFx1MDAzZXBpbik7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9waW5fc3RvcmVfc3RhdGUgLSB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBwaW4gaW4gU1cgYm9va2tlZXBpbmdcXG4gICogQHBpbjogcG9pbnRlciB0byBhIHBpblxcbkBAIC02NjksMTAgKzY5MiwxMCBAQCBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShzdHJ1Y3QgaWNlX3BmICpwZilcXG4gXFx0cCA9IFxcdTAwMjZkLVxcdTAwM2VzbWFbSUNFX0RQTExfUElOX1NXXzJfSURYXTtcXG4gXFx0cC1cXHUwMDNlYWN0aXZlID0gdHJ1ZTtcXG4gXFx0cC1cXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xcbitcXHRpZiAoZGF0YSBcXHUwMDI2IElDRV9TTUEyX0RJUl9FTilcXG4rXFx0XFx0cC1cXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcXG4gXFx0aWYgKChkYXRhIFxcdTAwMjYgSUNFX1NNQTJfSU5BQ1RJVkVfTUFTSykgPT0gSUNFX1NNQTJfSU5BQ1RJVkVfTUFTSylcXG4gXFx0XFx0cC1cXHUwMDNlYWN0aXZlID0gZmFsc2U7XFxuLVxcdGVsc2UgaWYgKGRhdGEgXFx1MDAyNiBJQ0VfU01BMl9ESVJfRU4pXFxuLVxcdFxcdHAtXFx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XFxuIFxcbiBcXHRwID0gXFx1MDAyNmQtXFx1MDAzZXVmbFtJQ0VfRFBMTF9QSU5fU1dfMV9JRFhdO1xcbiBcXHRpZiAoIShkYXRhIFxcdTAwMjYgKElDRV9TTUExX0RJUl9FTiB8IElDRV9TTUExX1RYX0VOKSkpXFxuQEAgLTExNjMsMzIgKzExODYsNiBAQCBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHRcXHQgICAgICBleHRhY2ssIElDRV9EUExMX1BJTl9UWVBFX0lOUFVUKTtcXG4gfVxcbiBcXG4tLyoqXFxuLSAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxcbi0gKiBAZDogcG9pbnRlciB0byBkcGxscyBzdHJ1Y3RcXG4tICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSlcXG4tICpcXG4tICogU01BIGFuZCBVLkZMIHBpbnMgc2hhcmUgcGh5c2ljYWwgc2lnbmFsIHBhdGhzIGluIHBhaXJzIChTTUExL1UuRkwxIGFuZFxcbi0gKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbidzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xcbi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4ncyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXFxuLSAqIG5vdGlmaWNhdGlvbiBmb3IgdGhlIHBlZXIgcGluIHNvIHVzZXJzcGFjZSBjb25zdW1lcnMgbW9uaXRvcmluZyB0aGVcXG4tICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuXFxuLSAqXFxuLSAqIENvbnRleHQ6IENhbGxlZCBmcm9tIGRwbGxfcGluX29wcyBjYWxsYmFja3MgYWZ0ZXIgcGYtXFx1MDAzZWRwbGxzLmxvY2sgaXNcXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXFxuLSAqICAgICAgICAgIHN0aWxsIGhlbGQgYnkgdGhlIGRwbGwgbmV0bGluayBsYXllci5cXG4tICovXFxuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxcbi17XFxuLVxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XFxuLVxcbi1cXHRwZWVyID0gKGNoYW5nZWQgXFx1MDAzZT0gZC1cXHUwMDNlc21hIFxcdTAwMjZcXHUwMDI2IGNoYW5nZWQgXFx1MDAzYyBkLVxcdTAwM2VzbWEgKyBJQ0VfRFBMTF9QSU5fU1dfTlVNKSA/XFxuLVxcdFxcdFxcdTAwMjZkLVxcdTAwM2V1ZmxbY2hhbmdlZC1cXHUwMDNlaWR4XSA6IFxcdTAwMjZkLVxcdTAwM2VzbWFbY2hhbmdlZC1cXHUwMDNlaWR4XTtcXG4tXFx0aWYgKHBlZXItXFx1MDAzZXBpbilcXG4tXFx0XFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItXFx1MDAzZXBpbik7XFxuLX1cXG4tXFxuIC8qKlxcbiAgKiBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldCAtIHNldCBkaXJlY3Rpb24gb2YgU01BIHBpblxcbiAgKiBAcDogcG9pbnRlciB0byBhIHBpblxcbkBAIC0xMjE5LDE3ICsxMjE2LDIxIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQoc3RydWN0IGljZV9kcGxsX3BpbiAqcCxcXG4gXFxuIFxcdHN3aXRjaCAocC1cXHUwMDNlaWR4KSB7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbi1cXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9NQVNLO1xcbi1cXHRcXHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpXFxuK1xcdFxcdGlmIChkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkge1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcXG4gXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMV9ESVJfRU47XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX0RJUl9FTjtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XFxuK1xcdFxcdH1cXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxcbiBcXHRcXHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xcbiBcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9ESVJfRU47XFxuLVxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfihJQ0VfU01BMl9UWF9FTiB8IElDRV9TTUEyX1VGTDJfUlhfRElTKTtcXG4gXFx0XFx0XFx0ZGF0YSB8PSBJQ0VfU01BMl9ESVJfRU47XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG5AQCAtMTI1MCw3ICsxMjUxLDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxcbiBcXHQgKiBiYWNraW5nIHBpbiB3aGVuIFUuRkwgYmVjb21lcyBpbmFjdGl2ZSBiZWNhdXNlIHRoZSBTTUEgcGluIG1heVxcbiBcXHQgKiBzdGlsbCBiZSB1c2luZyBpdC5cXG4gXFx0ICovXFxuLVxcdHBlZXIgPSBcXHUwMDI2ZC1cXHUwMDNldWZsW3AtXFx1MDAzZWlkeF07XFxuK1xcdHBlZXIgPSBwLVxcdTAwM2VtdXhlZDtcXG4gXFx0aWYgKHBlZXItXFx1MDAzZWFjdGl2ZSkge1xcbiBcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICp0YXJnZXQ7XFxuIFxcdFxcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgdHlwZTtcXG5AQCAtMTMxNSwxMCArMTMxNiwxMiBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdHJldCA9IC1FSU5WQUw7XFxuIFxcdHN3aXRjaCAocC1cXHUwMDNlaWR4KSB7XFxuIFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbi1cXHRcXHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEKSB7XFxuK1xcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0XFx0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XFxuIFxcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUExX01BU0s7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0LyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOXFxuIFxcdFxcdFxcdCAqIHdoaWxlIERJUl9FTiBpcyBzZXQgd291bGQgYWxzbyBkZWFjdGl2YXRlXFxuIFxcdFxcdFxcdCAqIHRoZSBwYWlyZWQgU01BMSBvdXRwdXQuXFxuQEAgLTEzMjksMTggKzEzMzIsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGRhdGEgfD0gSUNFX1NNQTFfVFhfRU47XFxuIFxcdFxcdFxcdGVuYWJsZSA9IGZhbHNlO1xcbi1cXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdFxcdH1cXG4gXFx0XFx0dGFyZ2V0ID0gcC1cXHUwMDNlb3V0cHV0O1xcbiBcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFg6XFxuLVxcdFxcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFKSB7XFxuK1xcdFxcdHN3aXRjaCAoc3RhdGUpIHtcXG4rXFx0XFx0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcXG4gXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuIFxcdFxcdFxcdGVuYWJsZSA9IHRydWU7XFxuLVxcdFxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4gXFx0XFx0XFx0LyogU2tpcCBpZiBVLkZMMiBpcyBub3QgYWN0aXZlLCBzZXR0aW5nXFxuIFxcdFxcdFxcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXFxuIFxcdFxcdFxcdCAqIFNNQTIgaW5wdXQuXFxuQEAgLTEzNTIsNyArMTM1OCw4IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHRcXHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xcbiBcXHRcXHRcXHRlbmFibGUgPSBmYWxzZTtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHRcXHR9XFxuIFxcdFxcdHRhcmdldCA9IHAtXFx1MDAzZWlucHV0O1xcbkBAIC0xMzcwLDE3ICsxMzc3LDQ0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcbi1cXHRpZiAoZW5hYmxlKVxcbitcXHRpZiAoZW5hYmxlKSB7XFxuIFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9lbmFibGUoaHcsIHRhcmdldCwgZC1cXHUwMDNlZHBsbF9pZHgsIHR5cGUsIGV4dGFjayk7XFxuLVxcdGVsc2VcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKCFyZXQgXFx1MDAyNlxcdTAwMjYgcC1cXHUwMDNlbXV4ZWQtXFx1MDAzZWFjdGl2ZSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyID0gcC1cXHUwMDNlbXV4ZWQ7XFxuK1xcdFxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0O1xcbitcXHRcXHRcXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBlZXJfdHlwZTtcXG4rXFx0XFx0XFx0aW50IHBlZXJfcmV0O1xcbitcXG4rXFx0XFx0XFx0aWYgKHBlZXItXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XFxuK1xcdFxcdFxcdFxcdHBlZXJfdGFyZ2V0ID0gcGVlci1cXHUwMDNlb3V0cHV0O1xcbitcXHRcXHRcXHRcXHRwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XFxuK1xcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdHBlZXJfdGFyZ2V0ID0gcGVlci1cXHUwMDNlaW5wdXQ7XFxuK1xcdFxcdFxcdFxcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdHBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCBwZWVyX3RhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHBmLVxcdTAwM2VkcGxscy5lZWMuZHBsbF9pZHgsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBwZWVyX3R5cGUsIE5VTEwpO1xcbitcXHRcXHRcXHRpZiAoIXBlZXJfcmV0KVxcbitcXHRcXHRcXHRcXHRwZWVyX3JldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHBlZXJfdGFyZ2V0LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHBlZXJfdHlwZSwgTlVMTCk7XFxuK1xcdFxcdFxcdGlmIChwZWVyX3JldClcXG4rXFx0XFx0XFx0XFx0ZGV2X3dhcm4oaWNlX3BmX3RvX2RldihwZiksXFxuK1xcdFxcdFxcdFxcdFxcdCBcXFwiRmFpbGVkIHRvIHN5bmMgcGVlciBwaW4gJXUgYWZ0ZXIgZW5hYmxpbmcgVS5GTCBwaW4gJXUsIGVyciAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0XFx0IHBlZXJfdGFyZ2V0LVxcdTAwM2VpZHgsIHRhcmdldC1cXHUwMDNlaWR4LCBwZWVyX3JldCk7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoaHcsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4tXFx0aWYgKCFyZXQpXFxuLVxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0XFx0aWYgKCFyZXQpXFxuK1xcdFxcdFxcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSwgZXh0YWNrKTtcXG4rXFx0fVxcbiBcXG4gdW5sb2NrOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLCBwKTtcXG4rXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xNDY3LDYgKzE1MDEsNyBAQCBpY2VfZHBsbF9zbWFfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcXG4gXFx0c3RydWN0IGljZV9wZiAqcGYgPSBzbWEtXFx1MDAzZXBmO1xcbiBcXHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XFxuK1xcdHU4IG9sZF9kYXRhID0gMDtcXG4gXFx0Ym9vbCBlbmFibGU7XFxuIFxcdGludCByZXQ7XFxuIFxcbkBAIC0xNDc5LDI4ICsxNTE0LDEyMCBAQCBpY2VfZHBsbF9zbWFfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXFxuIFxcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbiBcXHR9XFxuLVxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4tXFx0XFx0ZW5hYmxlID0gc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTtcXG4rXFx0c3dpdGNoIChzdGF0ZSkge1xcbitcXHRjYXNlIERQTExfUElOX1NUQVRFX1NFTEVDVEFCTEU6XFxuK1xcdFxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XFxuK1xcdFxcdFxcdGVuYWJsZSA9IGZhbHNlO1xcbitcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRlbmFibGUgPSB0cnVlO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ6XFxuK1xcdFxcdGlmIChzbWEtXFx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcXG4rXFx0XFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdFxcdHJldCA9IC1FSU5WQUw7XFxuK1xcdFxcdFxcdGdvdG8gdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVuYWJsZSA9IHRydWU7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX1NUQVRFX0RJU0NPTk5FQ1RFRDpcXG4rXFx0XFx0ZW5hYmxlID0gZmFsc2U7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIHVubG9jaztcXG4rXFx0fVxcbitcXG4rXFx0c3dpdGNoIChzbWEtXFx1MDAzZWRpcmVjdGlvbikge1xcbitcXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcXG4gXFx0XFx0dGFyZ2V0ID0gc21hLVxcdTAwM2VpbnB1dDtcXG4gXFx0XFx0dHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ6XFxuIFxcdFxcdHRhcmdldCA9IHNtYS1cXHUwMDNlb3V0cHV0O1xcbiBcXHRcXHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0ID0gLUVJTlZBTDtcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChlbmFibGUpXFxuK1xcdGlmIChlbmFibGUpIHtcXG4rXFx0XFx0dTggZGF0YTtcXG4rXFxuK1xcdFxcdHJldCA9IGljZV9yZWFkX3NtYV9jdHJsKFxcdTAwMjZwZi1cXHUwMDNlaHcsIFxcdTAwMjZkYXRhKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdG9sZF9kYXRhID0gZGF0YTtcXG4rXFx0XFx0aWYgKHNtYS1cXHUwMDNlaWR4ID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xcbitcXHRcXHRcXHRkYXRhIFxcdTAwMjY9IH5JQ0VfU01BMV9UWF9FTjtcXG4rXFx0XFx0fSBlbHNlIGlmIChzbWEtXFx1MDAzZWlkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcXG4rXFx0XFx0XFx0ZGF0YSBcXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XFxuK1xcdFxcdFxcdGRhdGEgXFx1MDAyNj0gfklDRV9TTUEyX1RYX0VOO1xcbitcXHRcXHR9XFxuK1xcdFxcdHJldCA9IGljZV93cml0ZV9zbWFfY3RybChcXHUwMDI2cGYtXFx1MDAzZWh3LCBkYXRhKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuK1xcdFxcdHJldCA9IGljZV9kcGxsX3N3X3BpbnNfdXBkYXRlKHBmKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbitcXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCB0YXJnZXQsIGQtXFx1MDAzZWRwbGxfaWR4LCB0eXBlLFxcbiBcXHRcXHRcXHRcXHRcXHQgIGV4dGFjayk7XFxuLVxcdGVsc2VcXG4tXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbi1cXHRpZiAoIXJldClcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xcbitcXHRcXHQvKiByZWZyZXNoIHRhcmdldCBzdGF0ZSBmaXJzdCBzbyBhIHBlZXItc2lkZSBlcnJvciBjYW5ub3QgbGVhdmUgaXQgc3RhbGUgKi9cXG4gXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuK1xcbitcXHRcXHRpZiAoc21hLVxcdTAwM2VtdXhlZC1cXHUwMDNlYWN0aXZlKSB7XFxuK1xcdFxcdFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBzbWEtXFx1MDAzZW11eGVkO1xcbitcXHRcXHRcXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpwZWVyX3RhcmdldDtcXG4rXFx0XFx0XFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGU7XFxuK1xcbitcXHRcXHRcXHRpZiAocGVlci1cXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcXG4rXFx0XFx0XFx0XFx0cGVlcl90YXJnZXQgPSBwZWVyLVxcdTAwM2VvdXRwdXQ7XFxuK1xcdFxcdFxcdFxcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0cGVlcl90YXJnZXQgPSBwZWVyLVxcdTAwM2VpbnB1dDtcXG4rXFx0XFx0XFx0XFx0cGVlcl90eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcXHUwMDI2cGYtXFx1MDAzZWh3LCBwZWVyX3RhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBkLVxcdTAwM2VkcGxsX2lkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBwZWVyX3R5cGUsIGV4dGFjayk7XFxuK1xcdFxcdFxcdGlmICghcmV0KVxcbitcXHRcXHRcXHRcXHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0cGVlcl90eXBlLCBleHRhY2spO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XFxuK1xcdFxcdH1cXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX2Rpc2FibGUoXFx1MDAyNnBmLVxcdTAwM2VodywgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xcbitcXHRcXHRpZiAoIXJldClcXG4rXFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRleHRhY2spO1xcbitcXHR9XFxuK1xcdGdvdG8gdW5sb2NrO1xcbitcXG4rcmVzdG9yZV9zbWFfY3RybDpcXG4rXFx0e1xcbitcXHRcXHRpbnQgcmVzdG9yZV9yZXQ7XFxuK1xcbitcXHRcXHRyZXN0b3JlX3JldCA9IGljZV93cml0ZV9zbWFfY3RybChcXHUwMDI2cGYtXFx1MDAzZWh3LCBvbGRfZGF0YSk7XFxuK1xcdFxcdGlmICghcmVzdG9yZV9yZXQpXFxuK1xcdFxcdFxcdHJlc3RvcmVfcmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xcbitcXHRcXHRpZiAocmVzdG9yZV9yZXQpXFxuK1xcdFxcdFxcdGRldl93YXJuKGljZV9wZl90b19kZXYocGYpLFxcbitcXHRcXHRcXHRcXHQgXFxcIkZhaWxlZCB0byByZXN0b3JlIFNNQSBjb250cm9sIGFmdGVyIHBpbiBzdGF0ZSBlcnJvciAlZCwgcmVzdG9yZSBlcnIgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCByZXQsIHJlc3RvcmVfcmV0KTtcXG4rXFx0fVxcbiBcXG4gdW5sb2NrOlxcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLCBzbWEpO1xcbitcXHRcXHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcXG4gXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG5AQCAtMTY5Nyw3ICsxODI0LDcgQEAgaWNlX2RwbGxfcGluX3NtYV9kaXJlY3Rpb25fc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcXG4gXFx0cmV0ID0gaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQocCwgZGlyZWN0aW9uLCBleHRhY2spO1xcbiBcXHRtdXRleF91bmxvY2soXFx1MDAyNnBmLVxcdTAwM2VkcGxscy5sb2NrKTtcXG4gXFx0aWYgKCFyZXQpXFxuLVxcdFxcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcXHUwMDI2cGYtXFx1MDAzZWRwbGxzLCBwKTtcXG4rXFx0XFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC00NTE0LDYgKzQ2NDEsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRpZiAocGluLVxcdTAwM2VpbnB1dC1cXHUwMDNlcmVmX3N5bmMpXFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcmVmX3N5bmMgPSBwaW4tXFx1MDAzZWlucHV0LVxcdTAwM2VyZWZfc3luYyAtIHBpbl9hYnNfaWR4O1xcbiBcXHRcXHRwaW4tXFx1MDAzZW91dHB1dCA9IFxcdTAwMjZkLVxcdTAwM2VvdXRwdXRzW0lDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpXTtcXG4rXFx0XFx0cGluLVxcdTAwM2VtdXhlZCA9IFxcdTAwMjZkLVxcdTAwM2V1ZmxbaV07XFxuK1xcbiBcXHRcXHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXFx1MDAyNnBpbi1cXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XFxuIFxcdH1cXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElDRV9EUExMX1BJTl9TV19OVU07IGkrKykge1xcbkBAIC00NTIzLDcgKzQ2NTIsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbiBcXHRcXHRwaW4tXFx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID0gY2FwcztcXG4gXFx0XFx0cGluLVxcdTAwM2VwZiA9IHBmO1xcbiBcXHRcXHRwaW4tXFx1MDAzZXByb3AuYm9hcmRfbGFiZWwgPSBpY2VfZHBsbF9zd19waW5fdWZsW2ldO1xcbi1cXHRcXHRpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFgpIHtcXG4rXFx0XFx0c3dpdGNoIChpKSB7XFxuK1xcdFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzFfSURYOlxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XFxuIFxcdFxcdFxcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX09VVFBVVF9BQlMoaSk7XFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZCA9XFxuQEAgLTQ1MzMsNyArNDY2Myw4IEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5mcmVxX3N1cHBvcnRlZF9udW0gPSBmcmVxX3N1cHBfbnVtO1xcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZWlucHV0ID0gTlVMTDtcXG4gXFx0XFx0XFx0cGluLVxcdTAwM2VvdXRwdXQgPSBcXHUwMDI2ZC1cXHUwMDNlb3V0cHV0c1twaW5fYWJzX2lkeF07XFxuLVxcdFxcdH0gZWxzZSBpZiAoaSA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxcbiBcXHRcXHRcXHRwaW4tXFx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9JTlBVVDtcXG4gXFx0XFx0XFx0cGluX2Fic19pZHggPSBJQ0VfRFBMTF9QSU5fU1dfSU5QVVRfQUJTKGkpICtcXG4gXFx0XFx0XFx0XFx0ICAgICAgaW5wdXRfaWR4X29mZnNldDtcXG5AQCAtNDU0Niw3ICs0Njc3LDEyIEBAIHN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnMoc3RydWN0IGljZV9wZiAqcGYpXFxuIFxcdFxcdFxcdHBpbi1cXHUwMDNlcHJvcC5jYXBhYmlsaXRpZXMgPVxcbiBcXHRcXHRcXHRcXHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxcbiBcXHRcXHRcXHRcXHQgY2Fwcyk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRkZWZhdWx0OlxcbitcXHRcXHRcXHRkZXZfZXJyKGljZV9wZl90b19kZXYocGYpLCBcXFwiSW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcXFxcblxcXCIsIGkpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0XFx0fVxcbitcXHRcXHRwaW4tXFx1MDAzZW11eGVkID0gXFx1MDAyNmQtXFx1MDAzZXNtYVtpXTtcXG4gXFx0XFx0aWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KFxcdTAwMjZwaW4tXFx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xcbiBcXHR9XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuaW5kZXggMTAzYmEzZTQ5MDY4MmMuLmRjNmYwOTZiZjA2OWExIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcXG5AQCAtNzYsNiArNzYsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxfcGluIHtcXG4gXFx0czMyIHBoYXNlX2FkanVzdDtcXG4gXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqaW5wdXQ7XFxuIFxcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm91dHB1dDtcXG4rXFx0c3RydWN0IGljZV9kcGxsX3BpbiAqbXV4ZWQ7XFxuIFxcdGVudW0gZHBsbF9waW5fZGlyZWN0aW9uIGRpcmVjdGlvbjtcXG4gXFx0czY0IHBoYXNlX29mZnNldDtcXG4gXFx0dTggc3RhdHVzO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDowNi41NTAxNDM4MzVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyODcyNDUzNDE4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgcGluIG1hbmFnZW1lbnQgbG9naWMgaW4gdGhlIEludGVsIElDRSAoRTgwMCBzZXJpZXMpIGV0aGVybmV0IGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIHJlcXVpcmVzIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW4gUXVldWUpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmEzY2YxYzMyMmRjZDRkNDJlYTllMzllMDQyMTUxZTVlMDlkN2U5YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDE2IDE0OjE0OjA0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY1xuaW5kZXggMzBjM2E0ZGI3ZDYxMWMuLmYyMTNkNmUxMmNjNDljIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jXG5AQCAtNTM4LDYgKzUzOCwyOSBAQCBpY2VfZHBsbF9waW5fZGlzYWJsZShzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9kcGxsX3BpbiAqcGluLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLyoqXG4rICogaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyIC0gbm90aWZ5IHRoZSBwYWlyZWQgU1cgcGluIGFmdGVyIGEgc3RhdGUgY2hhbmdlXG4rICogQGNoYW5nZWQ6IHRoZSBTVyBwaW4gdGhhdCB3YXMgZXhwbGljaXRseSBjaGFuZ2VkIChhbHJlYWR5IG5vdGlmaWVkIGJ5IGRwbGwgY29yZSlcbisgKlxuKyAqIFNNQSBhbmQgVS5GTCBwaW5zIHNoYXJlIHBoeXNpY2FsIHNpZ25hbCBwYXRocyBpbiBwYWlycyAoU01BMS9VLkZMMSBhbmRcbisgKiBTTUEyL1UuRkwyKS4gIFdoZW4gb25lIHBpbidzIHJvdXRpbmcgY2hhbmdlcyB2aWEgdGhlIFBDQTk1NzUgR1BJT1xuKyAqIGV4cGFuZGVyLCB0aGUgcGFpcmVkIHBpbidzIHN0YXRlIG1heSBhbHNvIGNoYW5nZS4gIFNlbmQgYSBjaGFuZ2VcbisgKiBub3RpZmljYXRpb24gZm9yIHRoZSBwZWVyIHBpbiBzbyB1c2Vyc3BhY2UgY29uc3VtZXJzIG1vbml0b3JpbmcgdGhlXG4rICogcGVlciB2aWEgZHBsbCBuZXRsaW5rIGxlYXJuIGFib3V0IHRoZSB1cGRhdGUuXG4rICpcbisgKiBDb250ZXh0OiBDYWxsZWQgZnJvbSBkcGxsX3Bpbl9vcHMgY2FsbGJhY2tzIGFmdGVyIHBmLVx1MDAzZWRwbGxzLmxvY2sgaXNcbisgKiAgICAgICAgICByZWxlYXNlZC4gIFVzZXMgX19kcGxsX3Bpbl9jaGFuZ2VfbnRmKCkgYmVjYXVzZSBkcGxsX2xvY2sgaXNcbisgKiAgICAgICAgICBzdGlsbCBoZWxkIGJ5IHRoZSBkcGxsIG5ldGxpbmsgbGF5ZXIuXG4rICovXG4rc3RhdGljIHZvaWQgaWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHN0cnVjdCBpY2VfZHBsbF9waW4gKmNoYW5nZWQpXG4re1xuK1x0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcjtcbitcbitcdHBlZXIgPSBjaGFuZ2VkLVx1MDAzZW11eGVkO1xuK1x0aWYgKHBlZXItXHUwMDNlcGluKVxuK1x0XHRfX2RwbGxfcGluX2NoYW5nZV9udGYocGVlci1cdTAwM2VwaW4pO1xuK31cbitcbiAvKipcbiAgKiBpY2VfZHBsbF9waW5fc3RvcmVfc3RhdGUgLSB1cGRhdGVzIHRoZSBzdGF0ZSBvZiBwaW4gaW4gU1cgYm9va2tlZXBpbmdcbiAgKiBAcGluOiBwb2ludGVyIHRvIGEgcGluXG5AQCAtNjY5LDEwICs2OTIsMTAgQEAgaWNlX2RwbGxfc3dfcGluc191cGRhdGUoc3RydWN0IGljZV9wZiAqcGYpXG4gXHRwID0gXHUwMDI2ZC1cdTAwM2VzbWFbSUNFX0RQTExfUElOX1NXXzJfSURYXTtcbiBcdHAtXHUwMDNlYWN0aXZlID0gdHJ1ZTtcbiBcdHAtXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xuK1x0aWYgKGRhdGEgXHUwMDI2IElDRV9TTUEyX0RJUl9FTilcbitcdFx0cC1cdTAwM2VkaXJlY3Rpb24gPSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUO1xuIFx0aWYgKChkYXRhIFx1MDAyNiBJQ0VfU01BMl9JTkFDVElWRV9NQVNLKSA9PSBJQ0VfU01BMl9JTkFDVElWRV9NQVNLKVxuIFx0XHRwLVx1MDAzZWFjdGl2ZSA9IGZhbHNlO1xuLVx0ZWxzZSBpZiAoZGF0YSBcdTAwMjYgSUNFX1NNQTJfRElSX0VOKVxuLVx0XHRwLVx1MDAzZWRpcmVjdGlvbiA9IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQ7XG4gXG4gXHRwID0gXHUwMDI2ZC1cdTAwM2V1ZmxbSUNFX0RQTExfUElOX1NXXzFfSURYXTtcbiBcdGlmICghKGRhdGEgXHUwMDI2IChJQ0VfU01BMV9ESVJfRU4gfCBJQ0VfU01BMV9UWF9FTikpKVxuQEAgLTExNjMsMzIgKzExODYsNiBAQCBpY2VfZHBsbF9pbnB1dF9zdGF0ZV9nZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdFx0ICAgICAgZXh0YWNrLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XG4gfVxuIFxuLS8qKlxuLSAqIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlciAtIG5vdGlmeSB0aGUgcGFpcmVkIFNXIHBpbiBhZnRlciBhIHN0YXRlIGNoYW5nZVxuLSAqIEBkOiBwb2ludGVyIHRvIGRwbGxzIHN0cnVjdFxuLSAqIEBjaGFuZ2VkOiB0aGUgU1cgcGluIHRoYXQgd2FzIGV4cGxpY2l0bHkgY2hhbmdlZCAoYWxyZWFkeSBub3RpZmllZCBieSBkcGxsIGNvcmUpXG4tICpcbi0gKiBTTUEgYW5kIFUuRkwgcGlucyBzaGFyZSBwaHlzaWNhbCBzaWduYWwgcGF0aHMgaW4gcGFpcnMgKFNNQTEvVS5GTDEgYW5kXG4tICogU01BMi9VLkZMMikuICBXaGVuIG9uZSBwaW4ncyByb3V0aW5nIGNoYW5nZXMgdmlhIHRoZSBQQ0E5NTc1IEdQSU9cbi0gKiBleHBhbmRlciwgdGhlIHBhaXJlZCBwaW4ncyBzdGF0ZSBtYXkgYWxzbyBjaGFuZ2UuICBTZW5kIGEgY2hhbmdlXG4tICogbm90aWZpY2F0aW9uIGZvciB0aGUgcGVlciBwaW4gc28gdXNlcnNwYWNlIGNvbnN1bWVycyBtb25pdG9yaW5nIHRoZVxuLSAqIHBlZXIgdmlhIGRwbGwgbmV0bGluayBsZWFybiBhYm91dCB0aGUgdXBkYXRlLlxuLSAqXG4tICogQ29udGV4dDogQ2FsbGVkIGZyb20gZHBsbF9waW5fb3BzIGNhbGxiYWNrcyBhZnRlciBwZi1cdTAwM2VkcGxscy5sb2NrIGlzXG4tICogICAgICAgICAgcmVsZWFzZWQuICBVc2VzIF9fZHBsbF9waW5fY2hhbmdlX250ZigpIGJlY2F1c2UgZHBsbF9sb2NrIGlzXG4tICogICAgICAgICAgc3RpbGwgaGVsZCBieSB0aGUgZHBsbCBuZXRsaW5rIGxheWVyLlxuLSAqL1xuLXN0YXRpYyB2b2lkIGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihzdHJ1Y3QgaWNlX2RwbGxzICpkLFxuLVx0XHRcdFx0XHRzdHJ1Y3QgaWNlX2RwbGxfcGluICpjaGFuZ2VkKVxuLXtcbi1cdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXI7XG4tXG4tXHRwZWVyID0gKGNoYW5nZWQgXHUwMDNlPSBkLVx1MDAzZXNtYSBcdTAwMjZcdTAwMjYgY2hhbmdlZCBcdTAwM2MgZC1cdTAwM2VzbWEgKyBJQ0VfRFBMTF9QSU5fU1dfTlVNKSA/XG4tXHRcdFx1MDAyNmQtXHUwMDNldWZsW2NoYW5nZWQtXHUwMDNlaWR4XSA6IFx1MDAyNmQtXHUwMDNlc21hW2NoYW5nZWQtXHUwMDNlaWR4XTtcbi1cdGlmIChwZWVyLVx1MDAzZXBpbilcbi1cdFx0X19kcGxsX3Bpbl9jaGFuZ2VfbnRmKHBlZXItXHUwMDNlcGluKTtcbi19XG4tXG4gLyoqXG4gICogaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXQgLSBzZXQgZGlyZWN0aW9uIG9mIFNNQSBwaW5cbiAgKiBAcDogcG9pbnRlciB0byBhIHBpblxuQEAgLTEyMTksMTcgKzEyMTYsMjEgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFxuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfTUFTSztcbi1cdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKVxuK1x0XHRpZiAoZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTFfRElSX0VOO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfRElSX0VOO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4rXHRcdH1cbiBcdFx0YnJlYWs7XG4gXHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0aWYgKGRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX0RJUl9FTjtcbi1cdFx0XHRkYXRhIHw9IElDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdGRhdGEgXHUwMDI2PSB+KElDRV9TTUEyX1RYX0VOIHwgSUNFX1NNQTJfVUZMMl9SWF9ESVMpO1xuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfRElSX0VOO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4rXHRcdFx0ZGF0YSBcdTAwMjY9IH5JQ0VfU01BMl9UWF9FTjtcbiBcdFx0fVxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG5AQCAtMTI1MCw3ICsxMjUxLDcgQEAgc3RhdGljIGludCBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChzdHJ1Y3QgaWNlX2RwbGxfcGluICpwLFxuIFx0ICogYmFja2luZyBwaW4gd2hlbiBVLkZMIGJlY29tZXMgaW5hY3RpdmUgYmVjYXVzZSB0aGUgU01BIHBpbiBtYXlcbiBcdCAqIHN0aWxsIGJlIHVzaW5nIGl0LlxuIFx0ICovXG4tXHRwZWVyID0gXHUwMDI2ZC1cdTAwM2V1ZmxbcC1cdTAwM2VpZHhdO1xuK1x0cGVlciA9IHAtXHUwMDNlbXV4ZWQ7XG4gXHRpZiAocGVlci1cdTAwM2VhY3RpdmUpIHtcbiBcdFx0c3RydWN0IGljZV9kcGxsX3BpbiAqdGFyZ2V0O1xuIFx0XHRlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHR5cGU7XG5AQCAtMTMxNSwxMCArMTMxNiwxMiBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSAtRUlOVkFMO1xuIFx0c3dpdGNoIChwLVx1MDAzZWlkeCkge1xuIFx0Y2FzZSBJQ0VfRFBMTF9QSU5fU1dfMV9JRFg6XG4tXHRcdGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQpIHtcbitcdFx0c3dpdGNoIChzdGF0ZSkge1xuK1x0XHRjYXNlIERQTExfUElOX1NUQVRFX0NPTk5FQ1RFRDpcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUExX01BU0s7XG4gXHRcdFx0ZW5hYmxlID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmIChzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQpIHtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6XG4gXHRcdFx0LyogU2tpcCBpZiBVLkZMMSBpcyBub3QgYWN0aXZlLCBzZXR0aW5nIFRYX0VOXG4gXHRcdFx0ICogd2hpbGUgRElSX0VOIGlzIHNldCB3b3VsZCBhbHNvIGRlYWN0aXZhdGVcbiBcdFx0XHQgKiB0aGUgcGFpcmVkIFNNQTEgb3V0cHV0LlxuQEAgLTEzMjksMTggKzEzMzIsMjEgQEAgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXQoY29uc3Qgc3RydWN0IGRwbGxfcGluICpwaW4sIHZvaWQgKnBpbl9wcml2LFxuIFx0XHRcdH1cbiBcdFx0XHRkYXRhIHw9IElDRV9TTUExX1RYX0VOO1xuIFx0XHRcdGVuYWJsZSA9IGZhbHNlO1xuLVx0XHR9IGVsc2Uge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuIFx0XHRcdGdvdG8gdW5sb2NrO1xuIFx0XHR9XG4gXHRcdHRhcmdldCA9IHAtXHUwMDNlb3V0cHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xuIFx0XHRicmVhaztcbiBcdGNhc2UgSUNFX0RQTExfUElOX1NXXzJfSURYOlxuLVx0XHRpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRSkge1xuK1x0XHRzd2l0Y2ggKHN0YXRlKSB7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfU0VMRUNUQUJMRTpcbiBcdFx0XHRkYXRhIHw9IElDRV9TTUEyX0RJUl9FTjtcbiBcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuIFx0XHRcdGVuYWJsZSA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc3RhdGUgPT0gRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEKSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGNhc2UgRFBMTF9QSU5fU1RBVEVfRElTQ09OTkVDVEVEOlxuIFx0XHRcdC8qIFNraXAgaWYgVS5GTDIgaXMgbm90IGFjdGl2ZSwgc2V0dGluZ1xuIFx0XHRcdCAqIFVGTDJfUlhfRElTIGNvdWxkIGFsc28gZGlzYWJsZSB0aGUgcGFpcmVkXG4gXHRcdFx0ICogU01BMiBpbnB1dC5cbkBAIC0xMzUyLDcgKzEzNTgsOCBAQCBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRcdFx0fVxuIFx0XHRcdGRhdGEgfD0gSUNFX1NNQTJfVUZMMl9SWF9ESVM7XG4gXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4tXHRcdH0gZWxzZSB7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdGRlZmF1bHQ6XG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHRcdH1cbiBcdFx0dGFyZ2V0ID0gcC1cdTAwM2VpbnB1dDtcbkBAIC0xMzcwLDE3ICsxMzc3LDQ0IEBAIGljZV9kcGxsX3VmbF9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gdW5sb2NrO1xuIFxuLVx0aWYgKGVuYWJsZSlcbitcdGlmIChlbmFibGUpIHtcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShodywgdGFyZ2V0LCBkLVx1MDAzZWRwbGxfaWR4LCB0eXBlLCBleHRhY2spO1xuLVx0ZWxzZVxuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBwLVx1MDAzZW11eGVkLVx1MDAzZWFjdGl2ZSkge1xuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBwLVx1MDAzZW11eGVkO1xuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXJfdGFyZ2V0O1xuK1x0XHRcdGVudW0gaWNlX2RwbGxfcGluX3R5cGUgcGVlcl90eXBlO1xuK1x0XHRcdGludCBwZWVyX3JldDtcbitcbitcdFx0XHRpZiAocGVlci1cdTAwM2VkaXJlY3Rpb24gPT0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVCkge1xuK1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZW91dHB1dDtcbitcdFx0XHRcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX09VVFBVVDtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0cGVlcl90YXJnZXQgPSBwZWVyLVx1MDAzZWlucHV0O1xuK1x0XHRcdFx0cGVlcl90eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4rXHRcdFx0fVxuK1x0XHRcdHBlZXJfcmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgcGVlcl90YXJnZXQsXG4rXHRcdFx0XHRcdFx0ICAgICAgIHBmLVx1MDAzZWRwbGxzLmVlYy5kcGxsX2lkeCxcbitcdFx0XHRcdFx0XHQgICAgICAgcGVlcl90eXBlLCBOVUxMKTtcbitcdFx0XHRpZiAoIXBlZXJfcmV0KVxuK1x0XHRcdFx0cGVlcl9yZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHRcdCAgICAgcGVlcl90eXBlLCBOVUxMKTtcbitcdFx0XHRpZiAocGVlcl9yZXQpXG4rXHRcdFx0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHRcdFx0IFwiRmFpbGVkIHRvIHN5bmMgcGVlciBwaW4gJXUgYWZ0ZXIgZW5hYmxpbmcgVS5GTCBwaW4gJXUsIGVyciAlZFxcblwiLFxuK1x0XHRcdFx0XHQgcGVlcl90YXJnZXQtXHUwMDNlaWR4LCB0YXJnZXQtXHUwMDNlaWR4LCBwZWVyX3JldCk7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4gXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKGh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbi1cdFx0cmV0ID0gaWNlX2RwbGxfcGluX3N0YXRlX3VwZGF0ZShwZiwgdGFyZ2V0LCB0eXBlLCBleHRhY2spO1xuK1x0XHRpZiAoIXJldClcbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHR9XG4gXG4gdW5sb2NrOlxuIFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBmLVx1MDAzZWRwbGxzLmxvY2spO1xuIFx0aWYgKCFyZXQpXG4tXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihcdTAwMjZwZi1cdTAwM2VkcGxscywgcCk7XG4rXHRcdGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcihwKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE0NjcsNiArMTUwMSw3IEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdHN0cnVjdCBpY2VfZHBsbCAqZCA9IGRwbGxfcHJpdjtcbiBcdHN0cnVjdCBpY2VfcGYgKnBmID0gc21hLVx1MDAzZXBmO1xuIFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSB0eXBlO1xuK1x0dTggb2xkX2RhdGEgPSAwO1xuIFx0Ym9vbCBlbmFibGU7XG4gXHRpbnQgcmV0O1xuIFxuQEAgLTE0NzksMjggKzE1MTQsMTIwIEBAIGljZV9kcGxsX3NtYV9waW5fc3RhdGVfc2V0KGNvbnN0IHN0cnVjdCBkcGxsX3BpbiAqcGluLCB2b2lkICpwaW5fcHJpdixcbiBcdFx0aWYgKHJldClcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbi1cdGlmIChzbWEtXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9JTlBVVCkge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFO1xuK1x0c3dpdGNoIChzdGF0ZSkge1xuK1x0Y2FzZSBEUExMX1BJTl9TVEFURV9TRUxFQ1RBQkxFOlxuK1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUKSB7XG4rXHRcdFx0ZW5hYmxlID0gZmFsc2U7XG4rXHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0fVxuK1x0XHRlbmFibGUgPSB0cnVlO1xuK1x0XHRicmVhaztcbitcdGNhc2UgRFBMTF9QSU5fU1RBVEVfQ09OTkVDVEVEOlxuK1x0XHRpZiAoc21hLVx1MDAzZWRpcmVjdGlvbiA9PSBEUExMX1BJTl9ESVJFQ1RJT05fSU5QVVQpIHtcbitcdFx0XHRlbmFibGUgPSBmYWxzZTtcbitcdFx0XHRyZXQgPSAtRUlOVkFMO1xuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHR9XG4rXHRcdGVuYWJsZSA9IHRydWU7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9TVEFURV9ESVNDT05ORUNURUQ6XG4rXHRcdGVuYWJsZSA9IGZhbHNlO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gdW5sb2NrO1xuK1x0fVxuK1xuK1x0c3dpdGNoIChzbWEtXHUwMDNlZGlyZWN0aW9uKSB7XG4rXHRjYXNlIERQTExfUElOX0RJUkVDVElPTl9JTlBVVDpcbiBcdFx0dGFyZ2V0ID0gc21hLVx1MDAzZWlucHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfSU5QVVQ7XG4tXHR9IGVsc2Uge1xuLVx0XHRlbmFibGUgPSBzdGF0ZSA9PSBEUExMX1BJTl9TVEFURV9DT05ORUNURUQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBEUExMX1BJTl9ESVJFQ1RJT05fT1VUUFVUOlxuIFx0XHR0YXJnZXQgPSBzbWEtXHUwMDNlb3V0cHV0O1xuIFx0XHR0eXBlID0gSUNFX0RQTExfUElOX1RZUEVfT1VUUFVUO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldCA9IC1FSU5WQUw7XG4rXHRcdGdvdG8gdW5sb2NrO1xuIFx0fVxuIFxuLVx0aWYgKGVuYWJsZSlcbitcdGlmIChlbmFibGUpIHtcbitcdFx0dTggZGF0YTtcbitcbitcdFx0cmV0ID0gaWNlX3JlYWRfc21hX2N0cmwoXHUwMDI2cGYtXHUwMDNlaHcsIFx1MDAyNmRhdGEpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gdW5sb2NrO1xuK1x0XHRvbGRfZGF0YSA9IGRhdGE7XG4rXHRcdGlmIChzbWEtXHUwMDNlaWR4ID09IElDRV9EUExMX1BJTl9TV18xX0lEWCkge1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTFfVFhfRU47XG4rXHRcdH0gZWxzZSBpZiAoc21hLVx1MDAzZWlkeCA9PSBJQ0VfRFBMTF9QSU5fU1dfMl9JRFgpIHtcbitcdFx0XHRkYXRhIFx1MDAyNj0gfklDRV9TTUEyX1VGTDJfUlhfRElTO1xuK1x0XHRcdGRhdGEgXHUwMDI2PSB+SUNFX1NNQTJfVFhfRU47XG4rXHRcdH1cbitcdFx0cmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBkYXRhKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHVubG9jaztcbitcdFx0cmV0ID0gaWNlX2RwbGxfc3dfcGluc191cGRhdGUocGYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGdvdG8gcmVzdG9yZV9zbWFfY3RybDtcbitcbiBcdFx0cmV0ID0gaWNlX2RwbGxfcGluX2VuYWJsZShcdTAwMjZwZi1cdTAwM2VodywgdGFyZ2V0LCBkLVx1MDAzZWRwbGxfaWR4LCB0eXBlLFxuIFx0XHRcdFx0XHQgIGV4dGFjayk7XG4tXHRlbHNlXG4tXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4tXHRpZiAoIXJldClcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4rXHRcdC8qIHJlZnJlc2ggdGFyZ2V0IHN0YXRlIGZpcnN0IHNvIGEgcGVlci1zaWRlIGVycm9yIGNhbm5vdCBsZWF2ZSBpdCBzdGFsZSAqL1xuIFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0Z290byByZXN0b3JlX3NtYV9jdHJsO1xuK1xuK1x0XHRpZiAoc21hLVx1MDAzZW11eGVkLVx1MDAzZWFjdGl2ZSkge1xuK1x0XHRcdHN0cnVjdCBpY2VfZHBsbF9waW4gKnBlZXIgPSBzbWEtXHUwMDNlbXV4ZWQ7XG4rXHRcdFx0c3RydWN0IGljZV9kcGxsX3BpbiAqcGVlcl90YXJnZXQ7XG4rXHRcdFx0ZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwZWVyX3R5cGU7XG4rXG4rXHRcdFx0aWYgKHBlZXItXHUwMDNlZGlyZWN0aW9uID09IERQTExfUElOX0RJUkVDVElPTl9PVVRQVVQpIHtcbitcdFx0XHRcdHBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VvdXRwdXQ7XG4rXHRcdFx0XHRwZWVyX3R5cGUgPSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ7XG4rXHRcdFx0fSBlbHNlIHtcbitcdFx0XHRcdHBlZXJfdGFyZ2V0ID0gcGVlci1cdTAwM2VpbnB1dDtcbitcdFx0XHRcdHBlZXJfdHlwZSA9IElDRV9EUExMX1BJTl9UWVBFX0lOUFVUO1xuK1x0XHRcdH1cbitcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fZW5hYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCBwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHQgIGQtXHUwMDNlZHBsbF9pZHgsXG4rXHRcdFx0XHRcdFx0ICBwZWVyX3R5cGUsIGV4dGFjayk7XG4rXHRcdFx0aWYgKCFyZXQpXG4rXHRcdFx0XHRyZXQgPSBpY2VfZHBsbF9waW5fc3RhdGVfdXBkYXRlKHBmLCBwZWVyX3RhcmdldCxcbitcdFx0XHRcdFx0XHRcdFx0cGVlcl90eXBlLCBleHRhY2spO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRnb3RvIHJlc3RvcmVfc21hX2N0cmw7XG4rXHRcdH1cbitcdH0gZWxzZSB7XG4rXHRcdHJldCA9IGljZV9kcGxsX3Bpbl9kaXNhYmxlKFx1MDAyNnBmLVx1MDAzZWh3LCB0YXJnZXQsIHR5cGUsIGV4dGFjayk7XG4rXHRcdGlmICghcmV0KVxuK1x0XHRcdHJldCA9IGljZV9kcGxsX3Bpbl9zdGF0ZV91cGRhdGUocGYsIHRhcmdldCwgdHlwZSxcbitcdFx0XHRcdFx0XHRcdGV4dGFjayk7XG4rXHR9XG4rXHRnb3RvIHVubG9jaztcbitcbityZXN0b3JlX3NtYV9jdHJsOlxuK1x0e1xuK1x0XHRpbnQgcmVzdG9yZV9yZXQ7XG4rXG4rXHRcdHJlc3RvcmVfcmV0ID0gaWNlX3dyaXRlX3NtYV9jdHJsKFx1MDAyNnBmLVx1MDAzZWh3LCBvbGRfZGF0YSk7XG4rXHRcdGlmICghcmVzdG9yZV9yZXQpXG4rXHRcdFx0cmVzdG9yZV9yZXQgPSBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZShwZik7XG4rXHRcdGlmIChyZXN0b3JlX3JldClcbitcdFx0XHRkZXZfd2FybihpY2VfcGZfdG9fZGV2KHBmKSxcbitcdFx0XHRcdCBcIkZhaWxlZCB0byByZXN0b3JlIFNNQSBjb250cm9sIGFmdGVyIHBpbiBzdGF0ZSBlcnJvciAlZCwgcmVzdG9yZSBlcnIgJWRcXG5cIixcbitcdFx0XHRcdCByZXQsIHJlc3RvcmVfcmV0KTtcbitcdH1cbiBcbiB1bmxvY2s6XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBzbWEpO1xuK1x0XHRpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXIoc21hKTtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuQEAgLTE2OTcsNyArMTgyNCw3IEBAIGljZV9kcGxsX3Bpbl9zbWFfZGlyZWN0aW9uX3NldChjb25zdCBzdHJ1Y3QgZHBsbF9waW4gKnBpbiwgdm9pZCAqcGluX3ByaXYsXG4gXHRyZXQgPSBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldChwLCBkaXJlY3Rpb24sIGV4dGFjayk7XG4gXHRtdXRleF91bmxvY2soXHUwMDI2cGYtXHUwMDNlZHBsbHMubG9jayk7XG4gXHRpZiAoIXJldClcbi1cdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKFx1MDAyNnBmLVx1MDAzZWRwbGxzLCBwKTtcbitcdFx0aWNlX2RwbGxfc3dfcGluX25vdGlmeV9wZWVyKHApO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtNDUxNCw2ICs0NjQxLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0aWYgKHBpbi1cdTAwM2VpbnB1dC1cdTAwM2VyZWZfc3luYylcbiBcdFx0XHRwaW4tXHUwMDNlcmVmX3N5bmMgPSBwaW4tXHUwMDNlaW5wdXQtXHUwMDNlcmVmX3N5bmMgLSBwaW5fYWJzX2lkeDtcbiBcdFx0cGluLVx1MDAzZW91dHB1dCA9IFx1MDAyNmQtXHUwMDNlb3V0cHV0c1tJQ0VfRFBMTF9QSU5fU1dfT1VUUFVUX0FCUyhpKV07XG4rXHRcdHBpbi1cdTAwM2VtdXhlZCA9IFx1MDAyNmQtXHUwMDNldWZsW2ldO1xuK1xuIFx0XHRpY2VfZHBsbF9waGFzZV9yYW5nZV9zZXQoXHUwMDI2cGluLVx1MDAzZXByb3AucGhhc2VfcmFuZ2UsIHBoYXNlX2Fkal9tYXgpO1xuIFx0fVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgSUNFX0RQTExfUElOX1NXX05VTTsgaSsrKSB7XG5AQCAtNDUyMyw3ICs0NjUyLDggQEAgc3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZilcbiBcdFx0cGluLVx1MDAzZXByb3AuY2FwYWJpbGl0aWVzID0gY2FwcztcbiBcdFx0cGluLVx1MDAzZXBmID0gcGY7XG4gXHRcdHBpbi1cdTAwM2Vwcm9wLmJvYXJkX2xhYmVsID0gaWNlX2RwbGxfc3dfcGluX3VmbFtpXTtcbi1cdFx0aWYgKGkgPT0gSUNFX0RQTExfUElOX1NXXzFfSURYKSB7XG4rXHRcdHN3aXRjaCAoaSkge1xuK1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18xX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX09VVFBVVDtcbiBcdFx0XHRwaW5fYWJzX2lkeCA9IElDRV9EUExMX1BJTl9TV19PVVRQVVRfQUJTKGkpO1xuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkID1cbkBAIC00NTMzLDcgKzQ2NjMsOCBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmZyZXFfc3VwcG9ydGVkX251bSA9IGZyZXFfc3VwcF9udW07XG4gXHRcdFx0cGluLVx1MDAzZWlucHV0ID0gTlVMTDtcbiBcdFx0XHRwaW4tXHUwMDNlb3V0cHV0ID0gXHUwMDI2ZC1cdTAwM2VvdXRwdXRzW3Bpbl9hYnNfaWR4XTtcbi1cdFx0fSBlbHNlIGlmIChpID09IElDRV9EUExMX1BJTl9TV18yX0lEWCkge1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIElDRV9EUExMX1BJTl9TV18yX0lEWDpcbiBcdFx0XHRwaW4tXHUwMDNlZGlyZWN0aW9uID0gRFBMTF9QSU5fRElSRUNUSU9OX0lOUFVUO1xuIFx0XHRcdHBpbl9hYnNfaWR4ID0gSUNFX0RQTExfUElOX1NXX0lOUFVUX0FCUyhpKSArXG4gXHRcdFx0XHQgICAgICBpbnB1dF9pZHhfb2Zmc2V0O1xuQEAgLTQ1NDYsNyArNDY3NywxMiBAQCBzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxuIFx0XHRcdHBpbi1cdTAwM2Vwcm9wLmNhcGFiaWxpdGllcyA9XG4gXHRcdFx0XHQoRFBMTF9QSU5fQ0FQQUJJTElUSUVTX1BSSU9SSVRZX0NBTl9DSEFOR0UgfFxuIFx0XHRcdFx0IGNhcHMpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGRldl9lcnIoaWNlX3BmX3RvX2RldihwZiksIFwiSW52YWxpZCBVLkZMIHBpbiBpbmRleDogJWRcXG5cIiwgaSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdH1cbitcdFx0cGluLVx1MDAzZW11eGVkID0gXHUwMDI2ZC1cdTAwM2VzbWFbaV07XG4gXHRcdGljZV9kcGxsX3BoYXNlX3JhbmdlX3NldChcdTAwMjZwaW4tXHUwMDNlcHJvcC5waGFzZV9yYW5nZSwgcGhhc2VfYWRqX21heCk7XG4gXHR9XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaFxuaW5kZXggMTAzYmEzZTQ5MDY4MmMuLmRjNmYwOTZiZjA2OWExIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oXG5AQCAtNzYsNiArNzYsNyBAQCBzdHJ1Y3QgaWNlX2RwbGxfcGluIHtcbiBcdHMzMiBwaGFzZV9hZGp1c3Q7XG4gXHRzdHJ1Y3QgaWNlX2RwbGxfcGluICppbnB1dDtcbiBcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm91dHB1dDtcbitcdHN0cnVjdCBpY2VfZHBsbF9waW4gKm11eGVkO1xuIFx0ZW51bSBkcGxsX3Bpbl9kaXJlY3Rpb24gZGlyZWN0aW9uO1xuIFx0czY0IHBoYXNlX29mZnNldDtcbiBcdHU4IHN0YXR1cztcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjA2LjU1MDE0NTQyNVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzMDMwOTc4NTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIEludGVsIElDRSBEUExMIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuY2AuIEl0J3MgdHdlYWtpbmcgdGhlIERQTEwgcGluIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBJbnRlbCBJQ0UgZXRoZXJuZXQgZHJpdmVyLCBzcGVjaWZpY2FsbHkgdGhlIEU4MDAgc2VyaWVzLiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZ1bmN0aW9uczogYGljZV9kcGxsX3N3X3Bpbl9ub3RpZnlfcGVlcmAsIGBpY2VfZHBsbF9zd19waW5zX3VwZGF0ZWAsIGBpY2VfZHBsbF9zbWFfZGlyZWN0aW9uX3NldGAsIGBpY2VfZHBsbF91ZmxfcGluX3N0YXRlX3NldGAsIGBpY2VfZHBsbF9zbWFfcGluX3N0YXRlX3NldGAsIGFuZCBgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnNgLiBJdCBhZGRzIGEgYG11eGVkYCBwb2ludGVyIGluIHRoZSBgaWNlX2RwbGxfcGluYCBzdHJ1Y3QgZm9yIG1hbmFnaW5nIHNoYXJlZCBTTUEvVS5GTCBzaWduYWwgcGF0aHMsIGFuZCBpdCBtb2RpZmllcyBob3cgcGluIHN0YXRlcyBhbmQgZGlyZWN0aW9ucyBhcmUgaGFuZGxlZCwgaW5jbHVkaW5nIHVwZGF0ZXMgdG8gdGhlIFBDQTk1NzUgR1BJTyBleHBhbmRlci5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBjYW4gdGhpcyBjb2RlIGV2ZW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIHNldHVwPyBUaGUgYGljZWAgZHJpdmVyIGlzIGRlc2lnbmVkIGZvciBwaHlzaWNhbCBJbnRlbCBFODAwIFBDSWUgbmV0d29yayBjYXJkcy4gVHlwaWNhbGx5LCBQQ0llIGRyaXZlcnMsIHVubGVzcyB0aGV5J3JlIGZvciBhIHdlbGwtZW11bGF0ZWQgaGFyZHdhcmUsIGFyZW4ndCBlYXNpbHkgYWNjZXNzaWJsZSB3aXRoaW4gc29tZXRoaW5nIGxpa2UgUUVNVS4gRG9lcyBRRU1VIGV2ZW4gaGF2ZSBhbiBFODAwIHNlcmllcyBlbXVsYXRvcj8gQSBxdWljayBjaGVjayByZXZlYWxzIGl0IGRvZXNuJ3QuIFdlJ3ZlIGdvdCBlbXVsYXRvcnMgZm9yIGUxMDAwLCBlMTAwMGUsIGlnYiwgYW5kIG90aGVycywgYnV0IG5vdGhpbmcgZm9yIGBpY2VgLlxuXG5UaGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyLiBEb2VzIGl0IHBvdGVudGlhbGx5IGFsbG93IHVzIHRvIHJlYWNoIGl0PyBJIHRoaW5rIGFib3V0IHN5emthbGxlcidzIGFiaWxpdHkgdG8gZnV6eiBQQ0kgZGV2aWNlcywgdXNpbmcgYSB2aXJ0dWFsIFBDSSBkZXZpY2UgaW5qZWN0aW9uIG1lY2hhbmlzbSAodmhjaSBvciBzaW1pbGFyKS4gRG9lcyBzeXprYWxsZXIgb2ZmZXIgc29tZXRoaW5nIGxpa2UgYSBgc3l6X3BjaWAgcHNldWRvLXN5c2NhbGwgb3IgYSBzaW1pbGFyIFBDSSBmdXp6aW5nIHN1cHBvcnQ/IEluaXRpYWxseSwgSSdtIGRyYXdpbmcgYSBibGFuaywgYnV0IHRoZW4gSSByZWNhbGwsIHllcywgc3l6a2FsbGVyICpkb2VzKiBoYXZlIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcyB2aWEgYHN5el9wY2lfZGV2aWNlX2FkZGAgb3IgYSBzaW1pbGFyIGNhbGwuIFRoZSBjcml0aWNhbCBxdWVzdGlvbiBiZWNvbWVzIHdoZXRoZXIgc3l6a2FsbGVyIGlzIHJvYnVzdCBlbm91Z2ggdG8gcmVhY2ggZGVlcCBpbnRvIGRyaXZlci1zcGVjaWZpYyBsb2dpYy5cblxuT2theSwgbGV0J3MgY2lyY2xlIGJhY2suIENhbiBzeXprYWxsZXIgcHJvYmUgdGhlIGBpY2VgIGRyaXZlciB1c2luZyBhIGZha2UgUENJIGRldmljZT8gVGhlIGBpY2VgIGRyaXZlciBoYXMgc2lnbmlmaWNhbnQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzIC0gZmlybXdhcmUsIHRoZSBBZG1pbiBRdWV1ZSwgZXRjLiAtIG1ha2luZyBpdCBub3RvcmlvdXNseSBkaWZmaWN1bHQgdG8gZ2V0IHBhc3QgdGhlIGluaXRpYWwgcHJvYmUgd2l0aG91dCBlaXRoZXIgYSByZWFsIGRldmljZSBvciBhICp2ZXJ5KiBnb29kIGVtdWxhdG9yLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzZWUgaWYgc3l6a2FsbGVyIGlzLCBpbiBmYWN0LCBmdXp6aW5nIHRoZSBgaWNlYCBkcml2ZXIuIEknbGwgc2VhcmNoIHN5emthbGxlciByZXBvcnRzIGZvciBgaWNlX3Byb2JlYCBvciBzaW1pbGFyIGhpdHMuIFRoaXMgd2lsbCB0ZWxsIG1lIGlmIGl0J3MgZXZlbiB3b3J0aCBwdXJzdWluZyBmdXp6aW5nLCBidXQgdGhlbiBJIHJlbWVtYmVyIHRoZSBwcm9tcHQgZGV0YWlscy5cblxuV2FpdCBhIHNlY29uZCwgdGhlIHByb21wdCBzcGVjaWZpZXM6IFwiQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCIuIFNpbmNlIGBpY2VgIGlzIGEgUENJZSBkcml2ZXIgZm9yIHBoeXNpY2FsIGhhcmR3YXJlIGFuZCB0aGVyZSdzIG5vIGVxdWl2YWxlbnQgb2Ygc29tZXRoaW5nIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBvciBgbmV0ZGV2c2ltYCBmb3IgaXQsIGFuZCBRRU1VIGRvZXNuJ3QgZW11bGF0ZSBpdCwgaXQncyBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHRvIHJlYWNoIHRoZSBjb2RlIGluIGFueSBvZiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIExldCBtZSBqdXN0IGRvdWJsZSBjaGVjayBvbmUgbGFzdCB0aGluZywgdG8gc2VlIGlmIHNvbWUgYGljZWAgZW11bGF0b3IgZXhpc3RzLiBJIGhhdmUgdG8gYWNjZXB0IHRoZSByZWFsaXR5IG9mIHRoZSBzaXR1YXRpb24uXG5cblllcCwgdGhhdCdzIHdoYXQgSSB0aG91Z2h0LiBUaGUgSW50ZWwgRTgwMCBzZXJpZXMgaXMgY29tcGxleC4gSXQgcmVxdWlyZXMgaW50ZXJhY3Rpb25zIHdpdGggZmlybXdhcmUgKEFkbWluIFF1ZXVlLCBOVk0pLCBhbmQgdGhlIGRyaXZlciB3aWxsIGZhaWwgcHJvYmluZyBlYXJseSBpZiB0aGUgZmlybXdhcmUgZG9lc24ndCByZXNwb25kLiBJIHRoaW5rIEkgd2lsbCBqdXN0IGNoZWNrIHRoZSBgaWNlX3Byb2JlYCByb3V0aW5lIGluIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNgIGZpbGUgb25lIGxhc3QgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzI4MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxOCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjE5LjU4MTEyNjUwM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTY5NjA0MDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDktICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTU1OmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjM5LVxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODM5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0MS1cXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODQyOlxcdC5wcm9iZSA9IGljZV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODQzLVxcdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDoxOS42OTgwOTU5MzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE0OTk3NjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgRnVuY3Rpb24gJ2ljZV9wcm9iZScqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJPa2F5LCBsZXQncyBkaXNzZWN0IGBpY2VfcHJvYmVgIGFuZCBmaWd1cmUgb3V0IGV4YWN0bHkgd2hhdCBpdCdzIGRlc2lnbmVkIHRvIGRvLlwiIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBmdW5jdGlvbmFsaXR5LCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGxhcmdlciBzeXN0ZW0uIEknbGwgbmVlZCB0byBsb29rIGF0IGl0cyBpbXBsZW1lbnRhdGlvbiwgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgYW5kIGFueSBpbnRlcmFjdGlvbnMgaXQgaGFzIHdpdGggb3RoZXIgbW9kdWxlcyBvciBmdW5jdGlvbnMuIEknbSBhbHJlYWR5IHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBlZGdlIGNhc2VzIG9yIHVuZm9yZXNlZW4gY29uc2VxdWVuY2VzLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGNhcGFiaWxpdGllcyBpcyBlc3NlbnRpYWwgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gdG8gYXNzZXNzIGl0cyByZWxldmFuY2Ugb3IgaW1wYWN0LiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VyZmFjZS1sZXZlbCBnbGFuY2UgYW5kIGRpZyBkZWVwIGludG8gaXRzIGlubmVyIHdvcmtpbmdzLiBJIGtub3cgSSBuZWVkIHRvIHRyZWF0IHRoaXMgYXMgdGhvdWdoIEkgd2VyZSBnb2luZyBpbiBvbiBhIHN1cmdpY2FsIGFzc2Vzc21lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1MTUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDoyMi44MTMwOTU0MDFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDk3ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTE1NCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjUxNTQ6XFx0c3RhdGljIGludFxcbjUxNTU6XFx0aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcXG41MTU2OlxcdHtcXG41MTU3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuNTE1ODpcXHRcXHRib29sIG5lZWRfZGV2X2RlaW5pdCA9IGZhbHNlO1xcbjUxNTk6XFx0XFx0c3RydWN0IGljZV9hZGFwdGVyICphZGFwdGVyO1xcbjUxNjA6XFx0XFx0c3RydWN0IGljZV9wZiAqcGY7XFxuNTE2MTpcXHRcXHRzdHJ1Y3QgaWNlX2h3ICpodztcXG41MTYyOlxcdFxcdGludCBlcnI7XFxuNTE2MzpcXHRcXG41MTY0OlxcdFxcdGlmIChwZGV2LVxcdTAwM2Vpc192aXJ0Zm4pIHtcXG41MTY1OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiY2FuJ3QgcHJvYmUgYSB2aXJ0dWFsIGZ1bmN0aW9uXFxcXG5cXFwiKTtcXG41MTY2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjUxNjc6XFx0XFx0fVxcbjUxNjg6XFx0XFxuNTE2OTpcXHRcXHQvKiB3aGVuIHVuZGVyIGEga2R1bXAga2VybmVsIGluaXRpYXRlIGEgcmVzZXQgYmVmb3JlIGVuYWJsaW5nIHRoZVxcbjUxNzA6XFx0XFx0ICogZGV2aWNlIGluIG9yZGVyIHRvIGNsZWFyIG91dCBhbnkgcGVuZGluZyBETUEgdHJhbnNhY3Rpb25zLiBUaGVzZVxcbjUxNzE6XFx0XFx0ICogdHJhbnNhY3Rpb25zIGNhbiBjYXVzZSBzb21lIHN5c3RlbXMgdG8gbWFjaGluZSBjaGVjayB3aGVuIGRvaW5nXFxuNTE3MjpcXHRcXHQgKiB0aGUgcGNpbV9lbmFibGVfZGV2aWNlKCkgYmVsb3cuXFxuNTE3MzpcXHRcXHQgKi9cXG41MTc0OlxcdFxcdGlmIChpc19rZHVtcF9rZXJuZWwoKSkge1xcbjUxNzU6XFx0XFx0XFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuNTE3NjpcXHRcXHRcXHRwY2lfY2xlYXJfbWFzdGVyKHBkZXYpO1xcbjUxNzc6XFx0XFx0XFx0ZXJyID0gcGNpZV9mbHIocGRldik7XFxuNTE3ODpcXHRcXHRcXHRpZiAoZXJyKVxcbjUxNzk6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG41MTgwOlxcdFxcdFxcdHBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpO1xcbjUxODE6XFx0XFx0fVxcbjUxODI6XFx0XFxuNTE4MzpcXHRcXHQvKiB0aGlzIGRyaXZlciB1c2VzIGRldnJlcywgc2VlXFxuNTE4NDpcXHRcXHQgKiBEb2N1bWVudGF0aW9uL2RyaXZlci1hcGkvZHJpdmVyLW1vZGVsL2RldnJlcy5yc3RcXG41MTg1OlxcdFxcdCAqL1xcbjUxODY6XFx0XFx0ZXJyID0gcGNpbV9lbmFibGVfZGV2aWNlKHBkZXYpO1xcbjUxODc6XFx0XFx0aWYgKGVycilcXG41MTg4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuNTE4OTpcXHRcXG41MTkwOlxcdFxcdGVyciA9IHBjaW1faW9tYXBfcmVnaW9ucyhwZGV2LCBCSVQoSUNFX0JBUjApLCBkZXZfZHJpdmVyX3N0cmluZyhkZXYpKTtcXG41MTkxOlxcdFxcdGlmIChlcnIpIHtcXG41MTkyOlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiQkFSMCBJL08gbWFwIGVycm9yICVkXFxcXG5cXFwiLCBlcnIpO1xcbjUxOTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG41MTk0OlxcdFxcdH1cXG41MTk1OlxcdFxcbjUxOTY6XFx0XFx0cGYgPSBpY2VfYWxsb2NhdGVfcGYoZGV2KTtcXG41MTk3OlxcdFxcdGlmICghcGYpXFxuNTE5ODpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG41MTk5OlxcdFxcbjUyMDA6XFx0XFx0LyogaW5pdGlhbGl6ZSBBdXhpbGlhcnkgaW5kZXggdG8gaW52YWxpZCB2YWx1ZSAqL1xcbjUyMDE6XFx0XFx0cGYtXFx1MDAzZWF1eF9pZHggPSAtMTtcXG41MjAyOlxcdFxcbjUyMDM6XFx0XFx0Lyogc2V0IHVwIGZvciBoaWdoIG9yIGxvdyBETUEgKi9cXG41MjA0OlxcdFxcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soNjQpKTtcXG41MjA1OlxcdFxcdGlmIChlcnIpIHtcXG41MjA2OlxcdFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRE1BIGNvbmZpZ3VyYXRpb24gZmFpbGVkOiAweCV4XFxcXG5cXFwiLCBlcnIpO1xcbjUyMDc6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG41MjA4OlxcdFxcdH1cXG41MjA5OlxcdFxcbjUyMTA6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuNTIxMTpcXHRcXHRwZi1cXHUwMDNlcGRldiA9IHBkZXY7XFxuNTIxMjpcXHRcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgcGYpO1xcbjUyMTM6XFx0XFx0c2V0X2JpdChJQ0VfRE9XTiwgcGYtXFx1MDAzZXN0YXRlKTtcXG41MjE0OlxcdFxcdC8qIERpc2FibGUgc2VydmljZSB0YXNrIHVudGlsIERPV04gYml0IGlzIGNsZWFyZWQgKi9cXG41MjE1OlxcdFxcdHNldF9iaXQoSUNFX1NFUlZJQ0VfRElTLCBwZi1cXHUwMDNlc3RhdGUpO1xcbjUyMTY6XFx0XFxuNTIxNzpcXHRcXHRodyA9IFxcdTAwMjZwZi1cXHUwMDNlaHc7XFxuNTIxODpcXHRcXHRody1cXHUwMDNlaHdfYWRkciA9IHBjaW1faW9tYXBfdGFibGUocGRldilbSUNFX0JBUjBdO1xcbjUyMTk6XFx0XFx0cGNpX3NhdmVfc3RhdGUocGRldik7XFxuNTIyMDpcXHRcXG41MjIxOlxcdFxcdGh3LVxcdTAwM2ViYWNrID0gcGY7XFxuNTIyMjpcXHRcXHRody1cXHUwMDNlcG9ydF9pbmZvID0gTlVMTDtcXG41MjIzOlxcdFxcdGh3LVxcdTAwM2V2ZW5kb3JfaWQgPSBwZGV2LVxcdTAwM2V2ZW5kb3I7XFxuNTIyNDpcXHRcXHRody1cXHUwMDNlZGV2aWNlX2lkID0gcGRldi1cXHUwMDNlZGV2aWNlO1xcbjUyMjU6XFx0XFx0cGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX1JFVklTSU9OX0lELCBcXHUwMDI2aHctXFx1MDAzZXJldmlzaW9uX2lkKTtcXG41MjI2OlxcdFxcdGh3LVxcdTAwM2VzdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX3ZlbmRvcjtcXG41MjI3OlxcdFxcdGh3LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlX2lkID0gcGRldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZTtcXG41MjI4OlxcdFxcdGh3LVxcdTAwM2VidXMuZGV2aWNlID0gUENJX1NMT1QocGRldi1cXHUwMDNlZGV2Zm4pO1xcbjUyMjk6XFx0XFx0aHctXFx1MDAzZWJ1cy5mdW5jID0gUENJX0ZVTkMocGRldi1cXHUwMDNlZGV2Zm4pO1xcbjUyMzA6XFx0XFx0aWNlX3NldF9jdHJscV9sZW4oaHcpO1xcbjUyMzE6XFx0XFxuNTIzMjpcXHRcXHRwZi1cXHUwMDNlbXNnX2VuYWJsZSA9IG5ldGlmX21zZ19pbml0KGRlYnVnLCBJQ0VfREZMVF9ORVRJRl9NKTtcXG41MjMzOlxcdFxcbjUyMzQ6XFx0I2lmbmRlZiBDT05GSUdfRFlOQU1JQ19ERUJVR1xcbjUyMzU6XFx0XFx0aWYgKGRlYnVnIFxcdTAwM2MgLTEpXFxuNTIzNjpcXHRcXHRcXHRody1cXHUwMDNlZGVidWdfbWFzayA9IGRlYnVnO1xcbjUyMzc6XFx0I2VuZGlmXFxuNTIzODpcXHRcXG41MjM5OlxcdFxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuNTI0MDpcXHRcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbjUyNDE6XFx0XFxuNTI0MjpcXHRcXHRlcnIgPSBpY2VfaW5pdF9odyhodyk7XFxuNTI0MzpcXHRcXHRpZiAoZXJyKSB7XFxuNTI0NDpcXHRcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9pbml0X2h3IGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuNTI0NTpcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbjUyNDY6XFx0XFx0fVxcbjUyNDc6XFx0XFxuNTI0ODpcXHRcXHRpY2VfaW5pdF9kZXZfaHcocGYpO1xcbjUyNDk6XFx0XFxuNTI1MDpcXHRcXHRhZGFwdGVyID0gaWNlX2FkYXB0ZXJfZ2V0KHBkZXYpO1xcbjUyNTE6XFx0XFx0aWYgKElTX0VSUihhZGFwdGVyKSkge1xcbjUyNTI6XFx0XFx0XFx0ZXJyID0gUFRSX0VSUihhZGFwdGVyKTtcXG41MjUzOlxcdFxcdFxcdGdvdG8gdW5yb2xsX2h3X2luaXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjIyLjgxMzQ0Njc2MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5ODQ0NTUwMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBgaWNlX2luaXRfaHdgIEZ1bmN0aW9uIENhbGwqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSdzIGp1bXBpbmcgaW50byBgaWNlX2luaXRfaHdgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW4gYW5kIHVuZGVyc3RhbmQgdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ20gaW1tZWRpYXRlbHkgaW50ZXJlc3RlZCBpbiB0aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgd2hpY2ggcmVnaXN0ZXJzIGFyZSBiZWluZyB0b3VjaGVkLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzdGVwczogaXMgaXQgcHJpbWFyaWx5IHNldHRpbmcgdXAgY2xvY2tzLCBjb25maWd1cmluZyB0aGUgUEhZLCBpbml0aWFsaXppbmcgRE1BIGNoYW5uZWxzLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGNvbW1lbnRzIGJldHRlciBiZSBnb29kLCBidXQgSSdtIGV4cGVjdGluZyB0byBoYXZlIHRvIHJldmVyc2UtZW5naW5lZXIgc29tZSBvZiB0aGlzLiBNeSBmb2N1cyB3aWxsIGJlIG9uIHRoZSBjcml0aWNhbCBwYXRoIHRvIGdldHRpbmcgdGhlIHNpbGljb24gZnVuY3Rpb25hbCDigJMgd2hhdCdzIGFic29sdXRlbHkgbmVjZXNzYXJ5IGZvciBhIGJhc2ljIGJyaW5nLXVwLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgdHJhcHM6IHJhY2UgY29uZGl0aW9ucywgb2JzY3VyZSByZWdpc3RlciBzZXR0aW5ncyB3aXRoIGRlZmF1bHQgdmFsdWVzIEkgbmVlZCB0byBiZSBhd2FyZSBvZiwgb3IgYW55dGhpbmcgdGhhdCBjb3VsZCBibG9jayBwcm9ncmVzcy4gSSdtIGFzc3VtaW5nIHRoZXJlJ3Mgc29tZSBzb3J0IG9mIGRlcGVuZGVuY3kgdHJlZSBoZXJlIOKAkyBJIG5lZWQgdG8gdHJhY2sgaG93IG9uZSBpbml0aWFsaXphdGlvbiBzdGVwIHNldHMgdXAgdGhlIHByZXJlcXVpc2l0ZXMgZm9yIHRoZSBuZXh0LiBUaGlzIGlzIGxpa2VseSB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyBlbHNlLCBzbyBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgaGVyZSBpcyBwYXJhbW91bnQuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyOTcsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjI3Ljc5NzkwNDk1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzU2ODcxNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2luaXRfaHdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTIzNT1zdGF0aWMgaW50IGljZV9kZXZsaW5rX3JlaW5pdF91cChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMjQyOlxcdGVyciA9IGljZV9pbml0X2h3KFxcdTAwMjZwZi1cXHUwMDNlaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjQzLVxcdGlmIChlcnIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI0NDpcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9pbml0X2h3IGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEyNDUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9OTYwPXN0YXRpYyBpbnQgX19md2xvZ19pbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzo5ODQ6ICogaWNlX2luaXRfaHcgLSBtYWluIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4NS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTg2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg3OmludCBpY2VfaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjQtXFx0XFx0Z290byBlcnJfdW5yb2xsX2ZsdHJfbWdtdF9zdHJ1Y3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTI1OlxcdHN0YXR1cyA9IGljZV9pbml0X2h3X3RibHMoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTEyNi1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0xMTU2PXN0YXRpYyB2b2lkIF9fZndsb2dfZGVpbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTY2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE2NzogKiBpY2VfZGVpbml0X2h3IC0gdW5yb2xsIGluaXRpYWxpemF0aW9uIG9wZXJhdGlvbnMgZG9uZSBieSBpY2VfaW5pdF9od1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE2OC0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTcwLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGR1cmluZyBub21pbmFsIG9wZXJhdGlvbiwgbm90IGFzIGEgcmVzdWx0IG9mXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTcxOiAqIGljZV9pbml0X2h3KCkgZmFpbGluZyBzaW5jZSBpY2VfaW5pdF9odygpIHdpbGwgdGFrZSBjYXJlIG9mIHVucm9sbGluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3Mi0gKiBhcHBsaWNhYmxlIGluaXRpYWxpemF0aW9ucyBpZiBpdCBmYWlscyBmb3IgYW55IHJlYXNvbi5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaDo4MzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtODQtdm9pZCBpY2VfZGVpbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM9MjM4OD1pbnQgaWNlX2NmZ190eF90b3BvKHN0cnVjdCBpY2VfaHcgKmh3LCBjb25zdCB2b2lkICpidWYsIHUzMiBsZW4pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1NDAtXFx0aWNlX2RlaW5pdF9odyhodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYzoyNTQxOlxcdGlmIChpY2VfaW5pdF9odyhodykpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1NDItXFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFxcXCJGYWlsZWQgdG8gcmUtaW5pdCBoYXJkd2FyZSBhZnRlciBzZXR0aW5nIFR4IHRvcG9sb2d5XFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM9MjE1ND12b2lkIGljZV9jbGVhcl9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYy0yMTk3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjE5ODogKiBpY2VfaW5pdF9od190YmxzIC0gaW5pdCBoYXJkd2FyZSB0YWJsZSBtZW1vcnlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTktICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIyMDAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYzoyMjAxOmludCBpY2VfaW5pdF9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oPTU4PWJvb2wgaWNlX2lzX2luaXRfcGtnX3N1Y2Nlc3NmdWwoZW51bSBpY2VfZGRwX3N0YXRlIHN0YXRlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oOjU5OmludCBpY2VfaW5pdF9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oLTYwLXZvaWQgaWNlX2ZyZWVfc2VnKHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTU9aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MjpcXHRlcnIgPSBpY2VfaW5pdF9odyhodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI0My1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0NDpcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9pbml0X2h3IGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI0NS1cXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYz02OD11MzIgaWNlX2NvbnZfbGlua19zcGVlZF90b192aXJ0Y2hubChib29sIGFkdl9saW5rX3N1cHBvcnQsIHUxNiBsaW5rX3NwZWVkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYy04OS0gKiAxLiBUaGUgbWFpbGJveCBzbmFwc2hvdCBzdHJ1Y3R1cmUsIGljZV9tYnhfc25hcHNob3QsIGlzIGluaXRpYWxpemVkIGR1cmluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmM6OTA6ICogZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIGljZV9pbml0X2h3KCkgdXNpbmcgaWNlX21ieF9pbml0X3NuYXBzaG90KCkuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYy05MS0gKiBUaGUgc3RydWN0IGljZV9tYnhfc25hcHNob3QgaGVscHMgdG8gdHJhY2sgYW5kIHRyYXZlcnNlIGEgc3RhdGljIHdpbmRvdyBvZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDoyOC4xNzM1OTc4MjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDg2OTQ1MzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB0aGUgSUNFIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIHRoZSBJbnRlbCBJQ0UgRXRoZXJuZXQgZHJpdmVycy4gTGV0J3Mgc3RhcnQgd2l0aCBgaWNlX2luaXRfaHdgIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY2AuIFRoYXQncyB3aGVyZSB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gcm91dGluZSBpcyB0eXBpY2FsbHkgbG9jYXRlZC4gSSBrbm93IHRoaXMgY29kZSwgYnV0IGl0J3MgYmVlbiBhIHdoaWxlLCBhbmQgaXQncyBhbHdheXMgYSBnb29kIGlkZWEgdG8gcmV2aXNpdCB0aGUgZm91bmRhdGlvbmFsIHN0ZXBzIHdoZW4gZGVhbGluZyB3aXRoIHBvdGVudGlhbCBoYXJkd2FyZS1yZWxhdGVkIGlzc3VlcyBvciBsb29raW5nIGF0IHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIEknbGwgcHJvYmFibHkgYmUgbG9va2luZyBmb3IgdGhlIGNydWNpYWwgY2FsbHMgdG8gY29uZmlndXJlIHRoZSBNQUMsIFBIWSwgYW5kIGFueSBvdGhlciByZWxldmFudCBzaWxpY29uIHJlZ2lzdGVycy4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgYXMgdGhhdCBjYW4gYmUgY3JpdGljYWwgZm9yIGJyaW5naW5nIHVwIHRoZSBpbnRlcmZhY2UgY29ycmVjdGx5LiBJJ2xsIGFsc28gd2FudCB0byBsb29rIG91dCBmb3IgZXJyb3IgaGFuZGxpbmcgYW5kIGFueSBlYXJseSBoYXJkd2FyZSBjaGVja3MuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQyNywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjMyLjI2MDU0NjA3OVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDQ1ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5ODcsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTg3OlxcdGludCBpY2VfaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodylcXG4gOTg4OlxcdHtcXG4gOTg5OlxcdFxcdHN0cnVjdCBpY2VfYXFjX2dldF9waHlfY2Fwc19kYXRhICpwY2FwcyBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcXG4gOTkwOlxcdFxcdHZvaWQgKm1hY19idWYgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuIDk5MTpcXHRcXHR1MTYgbWFjX2J1Zl9sZW47XFxuIDk5MjpcXHRcXHRpbnQgc3RhdHVzO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHQvKiBTZXQgTUFDIHR5cGUgYmFzZWQgb24gRGV2aWNlSUQgKi9cXG4gOTk1OlxcdFxcdHN0YXR1cyA9IGljZV9zZXRfbWFjX3R5cGUoaHcpO1xcbiA5OTY6XFx0XFx0aWYgKHN0YXR1cylcXG4gOTk3OlxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIDk5ODpcXHRcXG4gOTk5OlxcdFxcdGh3LVxcdTAwM2VwZl9pZCA9IEZJRUxEX0dFVChQRl9GVU5DX1JJRF9GVU5DX05VTV9NLCByZDMyKGh3LCBQRl9GVU5DX1JJRCkpO1xcbjEwMDA6XFx0XFxuMTAwMTpcXHRcXHRzdGF0dXMgPSBpY2VfcmVzZXQoaHcsIElDRV9SRVNFVF9QRlIpO1xcbjEwMDI6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDAzOlxcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuMTAwNDpcXHRcXG4xMDA1OlxcdFxcdGljZV9nZXRfaXRyX2ludHJsX2dyYW4oaHcpO1xcbjEwMDY6XFx0XFxuMTAwNzpcXHRcXHRzdGF0dXMgPSBpY2VfY3JlYXRlX2FsbF9jdHJscShodyk7XFxuMTAwODpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMDk6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcXG4xMDEwOlxcdFxcbjEwMTE6XFx0XFx0c3RhdHVzID0gX19md2xvZ19pbml0KGh3KTtcXG4xMDEyOlxcdFxcdGlmIChzdGF0dXMpXFxuMTAxMzpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfRldfTE9HLCBcXFwiRXJyb3IgaW5pdGlhbGl6aW5nIEZXIGxvZ2dpbmc6ICVkXFxcXG5cXFwiLFxcbjEwMTQ6XFx0XFx0XFx0XFx0ICBzdGF0dXMpO1xcbjEwMTU6XFx0XFxuMTAxNjpcXHRcXHRzdGF0dXMgPSBpY2VfY2xlYXJfcGZfY2ZnKGh3KTtcXG4xMDE3OlxcdFxcdGlmIChzdGF0dXMpXFxuMTAxODpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xcbjEwMTk6XFx0XFxuMTAyMDpcXHRcXHQvKiBTZXQgYml0IHRvIGVuYWJsZSBGbG93IERpcmVjdG9yIGZpbHRlcnMgKi9cXG4xMDIxOlxcdFxcdHdyMzIoaHcsIFBGUUZfRkRfRU5BLCBQRlFGX0ZEX0VOQV9GRF9FTkFfTSk7XFxuMTAyMjpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2aHctXFx1MDAzZWZkaXJfbGlzdF9oZWFkKTtcXG4xMDIzOlxcdFxcbjEwMjQ6XFx0XFx0aWNlX2NsZWFyX3B4ZV9tb2RlKGh3KTtcXG4xMDI1OlxcdFxcbjEwMjY6XFx0XFx0c3RhdHVzID0gaWNlX2luaXRfbnZtKGh3KTtcXG4xMDI3OlxcdFxcdGlmIChzdGF0dXMpXFxuMTAyODpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xcbjEwMjk6XFx0XFxuMTAzMDpcXHRcXHRzdGF0dXMgPSBpY2VfZ2V0X2NhcHMoaHcpO1xcbjEwMzE6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDMyOlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XFxuMTAzMzpcXHRcXG4xMDM0OlxcdFxcdGlmICghaHctXFx1MDAzZXBvcnRfaW5mbylcXG4xMDM1OlxcdFxcdFxcdGh3LVxcdTAwM2Vwb3J0X2luZm8gPSBkZXZtX2t6YWxsb2MoaWNlX2h3X3RvX2RldihodyksXFxuMTAzNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZigqaHctXFx1MDAzZXBvcnRfaW5mbyksXFxuMTAzNzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbjEwMzg6XFx0XFx0aWYgKCFody1cXHUwMDNlcG9ydF9pbmZvKSB7XFxuMTAzOTpcXHRcXHRcXHRzdGF0dXMgPSAtRU5PTUVNO1xcbjEwNDA6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcXG4xMDQxOlxcdFxcdH1cXG4xMDQyOlxcdFxcbjEwNDM6XFx0XFx0aHctXFx1MDAzZXBvcnRfaW5mby1cXHUwMDNlbG9jYWxfZndkX21vZGUgPSBJQ0VfTE9DQUxfRldEX01PREVfRU5BQkxFRDtcXG4xMDQ0OlxcdFxcdC8qIHNldCB0aGUgYmFjayBwb2ludGVyIHRvIEhXICovXFxuMTA0NTpcXHRcXHRody1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VodyA9IGh3O1xcbjEwNDY6XFx0XFxuMTA0NzpcXHRcXHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBzd2l0Y2ggY29uZmlndXJhdGlvbiBkYXRhICovXFxuMTA0ODpcXHRcXHRzdGF0dXMgPSBpY2VfZ2V0X2luaXRpYWxfc3dfY2ZnKGh3KTtcXG4xMDQ5OlxcdFxcdGlmIChzdGF0dXMpXFxuMTA1MDpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfYWxsb2M7XFxuMTA1MTpcXHRcXG4xMDUyOlxcdFxcdGh3LVxcdTAwM2VldmJfdmViID0gdHJ1ZTtcXG4xMDUzOlxcdFxcbjEwNTQ6XFx0XFx0LyogaW5pdCB4YXJyYXkgZm9yIGlkZW50aWZ5aW5nIHNjaGVkdWxpbmcgbm9kZXMgdW5pcXVlbHkgKi9cXG4xMDU1OlxcdFxcdHhhX2luaXRfZmxhZ3MoXFx1MDAyNmh3LVxcdTAwM2Vwb3J0X2luZm8tXFx1MDAzZXNjaGVkX25vZGVfaWRzLCBYQV9GTEFHU19BTExPQyk7XFxuMTA1NjpcXHRcXG4xMDU3OlxcdFxcdC8qIFF1ZXJ5IHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGZvciBUeCBzY2hlZHVsZXIgKi9cXG4xMDU4OlxcdFxcdHN0YXR1cyA9IGljZV9zY2hlZF9xdWVyeV9yZXNfYWxsb2MoaHcpO1xcbjEwNTk6XFx0XFx0aWYgKHN0YXR1cykge1xcbjEwNjA6XFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX1NDSEVELCBcXFwiRmFpbGVkIHRvIGdldCBzY2hlZHVsZXIgYWxsb2NhdGVkIHJlc291cmNlc1xcXFxuXFxcIik7XFxuMTA2MTpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfYWxsb2M7XFxuMTA2MjpcXHRcXHR9XFxuMTA2MzpcXHRcXHRpY2Vfc2NoZWRfZ2V0X3BzbV9jbGtfZnJlcShodyk7XFxuMTA2NDpcXHRcXG4xMDY1OlxcdFxcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIHNjaGVkdWxlciBkYXRhICovXFxuMTA2NjpcXHRcXHRzdGF0dXMgPSBpY2Vfc2NoZWRfaW5pdF9wb3J0KGh3LVxcdTAwM2Vwb3J0X2luZm8pO1xcbjEwNjc6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDY4OlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9zY2hlZDtcXG4xMDY5OlxcdFxcbjEwNzA6XFx0XFx0cGNhcHMgPSBremFsbG9jX29iaigqcGNhcHMpO1xcbjEwNzE6XFx0XFx0aWYgKCFwY2Fwcykge1xcbjEwNzI6XFx0XFx0XFx0c3RhdHVzID0gLUVOT01FTTtcXG4xMDczOlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9zY2hlZDtcXG4xMDc0OlxcdFxcdH1cXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggUEhZIGNhcGFiaWxpdGllcyAqL1xcbjEwNzc6XFx0XFx0c3RhdHVzID0gaWNlX2FxX2dldF9waHlfY2Fwcyhody1cXHUwMDNlcG9ydF9pbmZvLCBmYWxzZSxcXG4xMDc4OlxcdFxcdFxcdFxcdFxcdCAgICAgSUNFX0FRQ19SRVBPUlRfVE9QT19DQVBfTUVESUEsIHBjYXBzLFxcbjEwNzk6XFx0XFx0XFx0XFx0XFx0ICAgICBOVUxMKTtcXG4xMDgwOlxcdFxcdGlmIChzdGF0dXMpXFxuMTA4MTpcXHRcXHRcXHRkZXZfd2FybihpY2VfaHdfdG9fZGV2KGh3KSwgXFxcIkdldCBQSFkgY2FwYWJpbGl0aWVzIGZhaWxlZCBzdGF0dXMgPSAlZCwgY29udGludWluZyBhbnl3YXlcXFxcblxcXCIsXFxuMTA4MjpcXHRcXHRcXHRcXHQgc3RhdHVzKTtcXG4xMDgzOlxcdFxcbjEwODQ6XFx0XFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggbGluayBpbmZvcm1hdGlvbiAqL1xcbjEwODU6XFx0XFx0c3RhdHVzID0gaWNlX2FxX2dldF9saW5rX2luZm8oaHctXFx1MDAzZXBvcnRfaW5mbywgZmFsc2UsIE5VTEwsIE5VTEwpO1xcbjEwODY6XFx0XFx0aWYgKHN0YXR1cylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTQ6MzIuMjYwOTkyNTg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MTg5NzIxODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBIYXJkd2FyZSBJbnRlcmFjdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhlIGBpY2VfcmVzZXRgIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCwgd2hpY2ggaXMgdXN1YWxseSB0aGUgZmlyc3Qgc3RlcCwgcmlnaHQ/IEZvbGxvd2luZyB0aGF0LCB3ZSd2ZSBnb3QgYGljZV9jcmVhdGVfYWxsX2N0cmxxYCwgYGljZV9pbml0X252bWAsIGFuZCB0aGVuIHRoZSBgaWNlX2dldF9jYXBzYCBhbmQgYGljZV9nZXRfaW5pdGlhbF9zd19jZmdgIGZ1bmN0aW9ucyBnZXR0aW5nIGNhbGxlZC4gSSBrbm93IHRoZXNlIGZ1bmN0aW9ucyBhbGwgcmVxdWlyZSBkaXJlY3QgaGFyZHdhcmUgaW50ZXJhY3Rpb24g4oCTIHJlYWRpbmcgcmVnaXN0ZXJzLCBzZW5kaW5nIGNvbW1hbmRzIHRocm91Z2ggdGhlIEFkbWluIFF1ZXVlLCB0aGUgdXN1YWwgZGFuY2UuXG5cbk15IGNvbmNlcm4gaW1tZWRpYXRlbHkgZmxhZ3MgdGhhdCBpZiB0aGVyZSdzICpubyogaGFyZHdhcmUgcHJlc2VudCwgb3IgaWYgaXTigJlzIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCwgd2UncmUgZ29pbmcgdG8gaGl0IGEgd2FsbCB2ZXJ5IGVhcmx5LiBgaWNlX3Jlc2V0YCB3aWxsIGxpa2VseSBmYWlsLCBvciBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgIHdpbGwgYm9tYiBvdXQgYmVjYXVzZSB0aGUgY29udHJvbCBxdWV1ZSBzZXR1cCB3b24ndCBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHByb3Blcmx5LiBUaGUgaGFyZHdhcmUganVzdCB3b24ndCBiZSByZXNwb25kaW5nIHRvIHRob3NlIGluaXRpYWxpemF0aW9uIGNvbW1hbmRzLiBXZSBuZWVkIHRvIGZvY3VzIG9uIHRoYXQgaW5pdGlhbCBzdGF0ZSwgYW5kIEkgbmVlZCB0byBjaGVjayBgaWNlX3Jlc2V0YCBpbW1lZGlhdGVseS4gSSdtIGdvaW5nIHRvIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTI0OCwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjM4LjA3OTk2Nzg0NloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDg3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDAxOlxcdFxcdHN0YXR1cyA9IGljZV9yZXNldChodywgSUNFX1JFU0VUX1BGUik7XFxuMTAwMjpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMDM6XFx0XFx0XFx0cmV0dXJuIHN0YXR1cztcXG4xMDA0OlxcdFxcbjEwMDU6XFx0XFx0aWNlX2dldF9pdHJfaW50cmxfZ3Jhbihodyk7XFxuMTAwNjpcXHRcXG4xMDA3OlxcdFxcdHN0YXR1cyA9IGljZV9jcmVhdGVfYWxsX2N0cmxxKGh3KTtcXG4xMDA4OlxcdFxcdGlmIChzdGF0dXMpXFxuMTAwOTpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xcbjEwMTA6XFx0XFxuMTAxMTpcXHRcXHRzdGF0dXMgPSBfX2Z3bG9nX2luaXQoaHcpO1xcbjEwMTI6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDEzOlxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19GV19MT0csIFxcXCJFcnJvciBpbml0aWFsaXppbmcgRlcgbG9nZ2luZzogJWRcXFxcblxcXCIsXFxuMTAxNDpcXHRcXHRcXHRcXHQgIHN0YXR1cyk7XFxuMTAxNTpcXHRcXG4xMDE2OlxcdFxcdHN0YXR1cyA9IGljZV9jbGVhcl9wZl9jZmcoaHcpO1xcbjEwMTc6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDE4OlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XFxuMTAxOTpcXHRcXG4xMDIwOlxcdFxcdC8qIFNldCBiaXQgdG8gZW5hYmxlIEZsb3cgRGlyZWN0b3IgZmlsdGVycyAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDozOC4wODAzMTgzODZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk5OTk5NzEyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGljZV9yZXNldGAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgY29kZSBoYXMganVzdCBtZW50aW9uZWQgYGljZV9yZXNldGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCdzIGFib3V0LiBJJ20gaW1tZWRpYXRlbHkgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zIGluIG15IGhlYWQuIElzIHRoaXMgc29tZSBraW5kIG9mIGluaXRpYWxpemF0aW9uIHJvdXRpbmUsIGEgY2xlYW51cCBwcm9jZWR1cmUsIG9yIHBlcmhhcHMgYSBtZXRob2QgdG8gcmV2ZXJ0IHNvbWUgc3RhdGUgYmFjayB0byBhIGtub3duIGdvb2QgY29uZmlndXJhdGlvbj8gR2l2ZW4gdGhlIG5hbWUsIFwicmVzZXRcIiBpcyB0aGUgbW9zdCBvYnZpb3VzIGNvbm5vdGF0aW9uLCBidXQgY29udGV4dCBpcyBldmVyeXRoaW5nLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIGltbWVkaWF0ZWx5IGVuZ2FnZWQgLSB3aGF0IGV4YWN0bHkgaXMgXCJpY2VcIiBpbiB0aGlzIGNvbnRleHQ/IElzIGl0IHJlbGF0ZWQgdG8gY2FjaGluZywgYSBuZXR3b3JrIGNvbm5lY3Rpb24sIGEgc2ltdWxhdGlvbidzIHN0YXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIHR5cGUgb2YgXCJpY2VcIiB0aGUgZnVuY3Rpb24gaXMgcmVzZXR0aW5nIGRldGVybWluZXMgdGhlIGxldmVsIG9mIGNvbmNlcm4gYW5kIGRpcmVjdGlvbiB0byB0YWtlLiBJJ2xsIG5lZWQgbW9yZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBzdXJyb3VuZGluZyBjb2RlIG9yIGRvY3VtZW50YXRpb24gdG8gdHJ1bHkgdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb24ncyBzY29wZSBhbmQgcHVycG9zZS4gSSdtIHJlYWR5IHRvIGludmVzdGlnYXRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTkzNSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDo0Mi4wODAzMTg5NzlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTQ0NDA3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaWNlX3Jlc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0xMjU1PXN0YXRpYyBpbnQgaWNlX3BmX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMzEwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTMxMTppbnQgaWNlX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9yZXNldF9yZXEgcmVxKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTMxMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oPTg1PWludCBpY2VfY2hlY2tfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODY6aW50IGljZV9yZXNldChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfcmVzZXRfcmVxIHJlcSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04Ny1pbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuYz04MzA9c3RhdGljIHZvaWQgaWNlX25vdGlmeV92Zl9yZXNldChzdHJ1Y3QgaWNlX3ZmICp2ZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmMtODYzLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmM6ODY0OmludCBpY2VfcmVzZXRfdmYoc3RydWN0IGljZV92ZiAqdmYsIHUzMiBmbGFncylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5jLTg2NS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5oPTMxNj1pY2VfdmZfY2xlYXJfdnNpX3Byb21pc2Moc3RydWN0IGljZV92ZiAqdmYsIHN0cnVjdCBpY2VfdnNpICp2c2ksIHU4IHByb21pc2NfbSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaDozMTc6aW50IGljZV9yZXNldF92ZihzdHJ1Y3QgaWNlX3ZmICp2ZiwgdTMyIGZsYWdzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX2xpYi5oLTMxOC12b2lkIGljZV9yZXNldF9hbGxfdmZzKHN0cnVjdCBpY2VfcGYgKnBmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbGliLmg9Mzc5PWljZV92Zl9jbGVhcl92c2lfcHJvbWlzYyhzdHJ1Y3QgaWNlX3ZmICp2Ziwgc3RydWN0IGljZV92c2kgKnZzaSwgdTggcHJvbWlzY19tKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaC0zODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaDozODQ6c3RhdGljIGlubGluZSBpbnQgaWNlX3Jlc2V0X3ZmKHN0cnVjdCBpY2VfdmYgKnZmLCB1MzIgZmxhZ3MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9saWIuaC0zODUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDo0Mi4xODE3Njk0MjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0NDA1MzE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGljZV9yZXNldGAgaW1wbGVtZW50YXRpb24gYW5kIGJyZWFrIGl0IGRvd24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBtZWNoYW5pY3MsIGl0cyBpbXBhY3QsIGFuZCBpdHMgcG90ZW50aWFsIGVkZ2UgY2FzZXMuIE15IGV4cGVydGlzZSB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgZnVuY3Rpb24gaW4gd2hhdGV2ZXIgc3lzdGVtIGl0J3MgcGFydCBvZiwgc28gSSdsbCBiZSBtZXRpY3Vsb3VzbHkgZXhhbWluaW5nIGl0LiBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgd2hhdCBcInJlc2V0XCIgYWN0dWFsbHkgbWVhbnMgaW4gdGhpcyBjb250ZXh0IOKAkyBpcyBpdCBhIGZ1bGwgaGFyZHdhcmUgcmVzZXQsIGEgc29mdCByZXNldCwgb3Igc29tZXRoaW5nIG1vcmUgbnVhbmNlZD8gV2hhdCBzdGF0ZSB2YXJpYWJsZXMgYXJlIGFmZmVjdGVkPyBXaGF0IHJlc291cmNlcyBhcmUgcmVsZWFzZWQgb3IgcmUtaW5pdGlhbGl6ZWQ/IEknbGwgYmUgbG9va2luZyBmb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgYXRvbWljaXR5IGlzc3VlcywgYW5kIGFueSBhcmVhcyB3aGVyZSBmYWlsdXJlIGNvdWxkIGxlYWQgdG8gc3lzdGVtIGluc3RhYmlsaXR5IG9yIGRhdGEgY29ycnVwdGlvbi4gSeKAmWxsIGJlIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIGZ1bmN0aW9uIGludGVyZmFjZXMgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLCBhbmQgaG93IHRoYXQgaW50ZXJmYWNlIG1pZ2h0IGJlIGV4cGxvaXRlZCBpZiBpbXBsZW1lbnRlZCBpbXByb3Blcmx5LiBJdCdzIHRpbWUgdG8gcHV0IG9uIG15IGFuYWx5c2lzIGhhdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTY4NzQsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNDo0NS42MjU4MjY1ODFaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3OTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTMxMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTMxMTpcXHRpbnQgaWNlX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9yZXNldF9yZXEgcmVxKVxcbjEzMTI6XFx0e1xcbjEzMTM6XFx0XFx0dTMyIHZhbCA9IDA7XFxuMTMxNDpcXHRcXG4xMzE1OlxcdFxcdHN3aXRjaCAocmVxKSB7XFxuMTMxNjpcXHRcXHRjYXNlIElDRV9SRVNFVF9QRlI6XFxuMTMxNzpcXHRcXHRcXHRyZXR1cm4gaWNlX3BmX3Jlc2V0KGh3KTtcXG4xMzE4OlxcdFxcdGNhc2UgSUNFX1JFU0VUX0NPUkVSOlxcbjEzMTk6XFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFxcXCJDb3JlUiByZXF1ZXN0ZWRcXFxcblxcXCIpO1xcbjEzMjA6XFx0XFx0XFx0dmFsID0gR0xHRU5fUlRSSUdfQ09SRVJfTTtcXG4xMzIxOlxcdFxcdFxcdGJyZWFrO1xcbjEzMjI6XFx0XFx0Y2FzZSBJQ0VfUkVTRVRfR0xPQlI6XFxuMTMyMzpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgXFxcIkdsb2JhbFIgcmVxdWVzdGVkXFxcXG5cXFwiKTtcXG4xMzI0OlxcdFxcdFxcdHZhbCA9IEdMR0VOX1JUUklHX0dMT0JSX007XFxuMTMyNTpcXHRcXHRcXHRicmVhaztcXG4xMzI2OlxcdFxcdGRlZmF1bHQ6XFxuMTMyNzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4xMzI4OlxcdFxcdH1cXG4xMzI5OlxcdFxcbjEzMzA6XFx0XFx0dmFsIHw9IHJkMzIoaHcsIEdMR0VOX1JUUklHKTtcXG4xMzMxOlxcdFxcdHdyMzIoaHcsIEdMR0VOX1JUUklHLCB2YWwpO1xcbjEzMzI6XFx0XFx0aWNlX2ZsdXNoKGh3KTtcXG4xMzMzOlxcdFxcbjEzMzQ6XFx0XFx0Lyogd2FpdCBmb3IgdGhlIEZXIHRvIGJlIHJlYWR5ICovXFxuMTMzNTpcXHRcXHRyZXR1cm4gaWNlX2NoZWNrX3Jlc2V0KGh3KTtcXG4xMzM2OlxcdH1cXG4xMzM3OlxcdFxcbjEzMzg6XFx0LyoqXFxuMTMzOTpcXHQgKiBpY2VfY29weV9yeHFfY3R4X3RvX2h3IC0gQ29weSBwYWNrZWQgUnggcXVldWUgY29udGV4dCB0byBIVyByZWdpc3RlcnNcXG4xMzQwOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuMTM0MTpcXHQgKiBAcnhxX2N0eDogcG9pbnRlciB0byB0aGUgcGFja2VkIFJ4IHF1ZXVlIGNvbnRleHRcXG4xMzQyOlxcdCAqIEByeHFfaW5kZXg6IHRoZSBpbmRleCBvZiB0aGUgUnggcXVldWVcXG4xMzQzOlxcdCAqL1xcbjEzNDQ6XFx0c3RhdGljIHZvaWQgaWNlX2NvcHlfcnhxX2N0eF90b19odyhzdHJ1Y3QgaWNlX2h3ICpodyxcXG4xMzQ1OlxcdFxcdFxcdFxcdFxcdCAgIGNvbnN0IGljZV9yeHFfY3R4X2J1Zl90ICpyeHFfY3R4LFxcbjEzNDY6XFx0XFx0XFx0XFx0XFx0ICAgdTMyIHJ4cV9pbmRleClcXG4xMzQ3OlxcdHtcXG4xMzQ4OlxcdFxcdC8qIENvcHkgZWFjaCBkd29yZCBzZXBhcmF0ZWx5IHRvIEhXICovXFxuMTM0OTpcXHRcXHRmb3IgKGludCBpID0gMDsgaSBcXHUwMDNjIElDRV9SWFFfQ1RYX1NJWkVfRFdPUkRTOyBpKyspIHtcXG4xMzUwOlxcdFxcdFxcdHUzMiBjdHggPSAoKGNvbnN0IHUzMiAqKXJ4cV9jdHgpW2ldO1xcbjEzNTE6XFx0XFxuMTM1MjpcXHRcXHRcXHR3cjMyKGh3LCBRUlhfQ09OVEVYVChpLCByeHFfaW5kZXgpLCBjdHgpO1xcbjEzNTM6XFx0XFxuMTM1NDpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfUUNUWCwgXFxcInFyeGRhdGFbJWRdOiAlMDhYXFxcXG5cXFwiLCBpLCBjdHgpO1xcbjEzNTU6XFx0XFx0fVxcbjEzNTY6XFx0fVxcbjEzNTc6XFx0XFxuMTM1ODpcXHQvKipcXG4xMzU5OlxcdCAqIGljZV9jb3B5X3J4cV9jdHhfZnJvbV9odyAtIENvcHkgcGFja2VkIFJ4IFF1ZXVlIGNvbnRleHQgZnJvbSBIVyByZWdpc3RlcnNcXG4xMzYwOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjQ1LjYyNjEzNjQ3MVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDA3NDMwMTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIG15IGRvbWFpbiBvZiBleHBlcnRpc2U6XG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBgaWNlX3BmX3Jlc2V0YCoqXG5cblJpZ2h0LCBsZXQncyBzZWUuIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYGljZV9wZl9yZXNldGAuIFRoYXQgY29tbWFuZC4gSG1tLCB3ZWxsLCBiYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCdzIG9idmlvdXNseSBzb21ldGhpbmcgcmVsYXRlZCB0byBwb3dlci1mYWlsIHJlc2V0IGhhbmRsaW5nLiBNb3N0IGxpa2VseSBkZWFsaW5nIHdpdGggdGhlIGludGVncmF0ZWQgY2lyY3VpdCBlbXVsYXRpb24vcG93ZXIgZmFpbHVyZSBzaW11bGF0aW9uIGluIHRoZSBJQ0UgZGVidWdnZXIuIEknbSBpbW1lZGlhdGVseSB0cnlpbmcgdG8gcmVjYWxsIHdoZXJlIEkndmUgZW5jb3VudGVyZWQgdGhpcyBiZWZvcmUg4oCTIHdoaWNoIHByb2plY3RzLCB3aGljaCBoYXJkd2FyZSwgYW5kIHRoZSBzcGVjaWZpYyBudWFuY2VzIG9mIGl0cyBpbXBsZW1lbnRhdGlvbi4gSXMgaXQgYSBjdXN0b20gc29sdXRpb24sIG9yIGEgd2VsbC1rbm93biBjb21tYW5kIHNldD8gSSdtIGFscmVhZHkgbWVudGFsbHkgY3Jvc3MtcmVmZXJlbmNpbmcgdGhpcyBhZ2FpbnN0IGFueSByZWNlbnQgZGVidWcgc2Vzc2lvbnMgd2hlcmUgcG93ZXIgaXNzdWVzIHdlcmUgc3VzcGVjdGVkLiBJJ20gc2VhcmNoaW5nIG15IGtub3dsZWRnZSBiYXNlIGZvciB0aGUgcGFydGljdWxhciBhcmNoaXRlY3R1cmUgaXQncyBsaWtlbHkgdG8gYmUgdXNlZCB3aXRoLCBjb25zaWRlcmluZyBjb25zdHJhaW50cyBvZiB0aGUgaGFyZHdhcmUncyByZXNldCBjb250cm9sbGVyLiBNeSBmaXJzdCBwYXNzIHdvdWxkIGJlIHRvIGNvbnNpZGVyIHJlc2V0IHNlcXVlbmNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5MTUsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE0OjU0LjYzMzU2OTIxN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyNDYwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RhdGljIGludCBpY2VfcGZfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTExOTU9aW50IGljZV9jaGVja19yZXNldChzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTI1NC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjEyNTU6c3RhdGljIGludCBpY2VfcGZfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMjU2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTQ6NTQuNzA5ODI0Nzk1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNTI2Mzk2MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjoxODMwMywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTQ6NTcuOTYyNDY2ODgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0Nzk2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyNTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEyNTU6XFx0c3RhdGljIGludCBpY2VfcGZfcmVzZXQoc3RydWN0IGljZV9odyAqaHcpXFxuMTI1NjpcXHR7XFxuMTI1NzpcXHRcXHR1MzIgY250LCByZWc7XFxuMTI1ODpcXHRcXG4xMjU5OlxcdFxcdC8qIElmIGF0IGZ1bmN0aW9uIGVudHJ5IGEgZ2xvYmFsIHJlc2V0IHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLCBpLmUuXFxuMTI2MDpcXHRcXHQgKiBzdGF0ZSBpcyBub3QgJ2RldmljZSBhY3RpdmUnIG9yIGFueSBvZiB0aGUgcmVzZXQgZG9uZSBiaXRzIGFyZSBub3RcXG4xMjYxOlxcdFxcdCAqIHNldCBpbiBHTE5WTV9VTEQsIHRoZXJlIGlzIG5vIG5lZWQgZm9yIGEgUEYgUmVzZXQ7IHBvbGwgdW50aWwgdGhlXFxuMTI2MjpcXHRcXHQgKiBnbG9iYWwgcmVzZXQgaXMgZG9uZS5cXG4xMjYzOlxcdFxcdCAqL1xcbjEyNjQ6XFx0XFx0aWYgKChyZDMyKGh3LCBHTEdFTl9SU1RBVCkgXFx1MDAyNiBHTEdFTl9SU1RBVF9ERVZTVEFURV9NKSB8fFxcbjEyNjU6XFx0XFx0ICAgIChyZDMyKGh3LCBHTE5WTV9VTEQpIFxcdTAwMjYgSUNFX1JFU0VUX0RPTkVfTUFTSykgXiBJQ0VfUkVTRVRfRE9ORV9NQVNLKSB7XFxuMTI2NjpcXHRcXHRcXHQvKiBwb2xsIG9uIGdsb2JhbCByZXNldCBjdXJyZW50bHkgaW4gcHJvZ3Jlc3MgdW50aWwgZG9uZSAqL1xcbjEyNjc6XFx0XFx0XFx0aWYgKGljZV9jaGVja19yZXNldChodykpXFxuMTI2ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4xMjY5OlxcdFxcbjEyNzA6XFx0XFx0XFx0cmV0dXJuIDA7XFxuMTI3MTpcXHRcXHR9XFxuMTI3MjpcXHRcXG4xMjczOlxcdFxcdC8qIFJlc2V0IHRoZSBQRiAqL1xcbjEyNzQ6XFx0XFx0cmVnID0gcmQzMihodywgUEZHRU5fQ1RSTCk7XFxuMTI3NTpcXHRcXG4xMjc2OlxcdFxcdHdyMzIoaHcsIFBGR0VOX0NUUkwsIChyZWcgfCBQRkdFTl9DVFJMX1BGU1dSX00pKTtcXG4xMjc3OlxcdFxcbjEyNzg6XFx0XFx0LyogV2FpdCBmb3IgdGhlIFBGUiB0byBjb21wbGV0ZS4gVGhlIHdhaXQgdGltZSBpcyB0aGUgZ2xvYmFsIGNvbmZpZyBsb2NrXFxuMTI3OTpcXHRcXHQgKiB0aW1lb3V0IHBsdXMgdGhlIFBGUiB0aW1lb3V0IHdoaWNoIHdpbGwgYWNjb3VudCBmb3IgYSBwb3NzaWJsZSByZXNldFxcbjEyODA6XFx0XFx0ICogdGhhdCBpcyBvY2N1cnJpbmcgZHVyaW5nIGEgZG93bmxvYWQgcGFja2FnZSBvcGVyYXRpb24uXFxuMTI4MTpcXHRcXHQgKi9cXG4xMjgyOlxcdFxcdGZvciAoY250ID0gMDsgY250IFxcdTAwM2MgSUNFX0dMT0JBTF9DRkdfTE9DS19USU1FT1VUICtcXG4xMjgzOlxcdFxcdCAgICAgSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlQ7IGNudCsrKSB7XFxuMTI4NDpcXHRcXHRcXHRyZWcgPSByZDMyKGh3LCBQRkdFTl9DVFJMKTtcXG4xMjg1OlxcdFxcdFxcdGlmICghKHJlZyBcXHUwMDI2IFBGR0VOX0NUUkxfUEZTV1JfTSkpXFxuMTI4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4xMjg3OlxcdFxcbjEyODg6XFx0XFx0XFx0bWRlbGF5KDEpO1xcbjEyODk6XFx0XFx0fVxcbjEyOTA6XFx0XFxuMTI5MTpcXHRcXHRpZiAoY250ID09IElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UKSB7XFxuMTI5MjpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgXFxcIlBGIHJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxcXFxuXFxcIik7XFxuMTI5MzpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4xMjk0OlxcdFxcdH1cXG4xMjk1OlxcdFxcbjEyOTY6XFx0XFx0cmV0dXJuIDA7XFxuMTI5NzpcXHR9XFxuMTI5ODpcXHRcXG4xMjk5OlxcdC8qKlxcbjEzMDA6XFx0ICogaWNlX3Jlc2V0IC0gUGVyZm9ybSBkaWZmZXJlbnQgdHlwZXMgb2YgcmVzZXRcXG4xMzAxOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuMTMwMjpcXHQgKiBAcmVxOiByZXNldCByZXF1ZXN0XFxuMTMwMzpcXHQgKlxcbjEzMDQ6XFx0ICogVGhpcyBmdW5jdGlvbiB0cmlnZ2VycyBhIHJlc2V0IGFzIHNwZWNpZmllZCBieSB0aGUgcmVxIHBhcmFtZXRlci5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTQ6NTcuOTYyNzE2MzkyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDU1NTkxOTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJY2UgUGxhdGZvcm0gUmVzZXQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpY2VfcGZfcmVzZXRgIGZ1bmN0aW9uLiBJdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIG9uIHRoZSBzdXJmYWNlIOKAkyBqdXN0IHJlYWRpbmcgYW5kIHdyaXRpbmcgcmVnaXN0ZXJzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgd2hhdCBoYXBwZW5zIGlmIHRoZXJlJ3Mgbm8gYWN0dWFsIGhhcmR3YXJlIHByZXNlbnQ/IFRoZSByZWFkIG9wZXJhdGlvbiB3b3VsZCBsaWtlbHkgcmV0dXJuIGVpdGhlciBhbGwgb25lcywgbGlrZSBgMHhmZmZmZmZmZmAsIG9yIGFsbCB6ZXJvcywgZGVwZW5kaW5nIG9uIGhvdyBpdCdzIGltcGxlbWVudGVkLlxuXG5JZiB3ZSBnZXQgYDB4ZmZmZmZmZmZgIGJhY2sgZnJvbSB0aGF0IGluaXRpYWwgcmVhZCwgaXQgbG9va3MgbGlrZSB0aGVyZSdzIGEgY2hlY2sgb24gYChyZDMyKGh3LCBHTEdFTl9SU1RBVCkgXHUwMDI2IEdMR0VOX1JTVEFUX0RFVlNUQVRFX00pYC4gVGhhdCBiaXRmaWVsZCBtYXNraW5nIGlzIGludGVyZXN0aW5nOyBJIG5lZWQgdG8gZGlnIGludG8gYEdMR0VOX1JTVEFUYCB0byBzZWUgd2hhdCB0aG9zZSBmbGFncyByZXByZXNlbnQuIElmIHRoYXQgY29uZGl0aW9uIGhvbGRzLCBpdCBsb29rcyBsaWtlIGl0J3MgZ29pbmcgdG8gY2FsbCBgaWNlX2NoZWNrX3Jlc2V0KGh3KWAuIEFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGF0IGBpY2VfY2hlY2tfcmVzZXRgIGZ1bmN0aW9uIG5leHQgYW5kIHNlZSB3aGF0IHRoYXQgcGFydCBvZiB0aGUgY29kZSBpcyBkb2luZy4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBzY2VuYXJpb3MgcmVxdWlyZSB0aGF0IHJlc2V0IGNoZWNrIGFuZCB3aGF0IGl0IGFjdHVhbGx5IGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTMxLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MDEuODA4Mjc4MzU4WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwMzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExOTU6XFx0aW50IGljZV9jaGVja19yZXNldChzdHJ1Y3QgaWNlX2h3ICpodylcXG4xMTk2OlxcdHtcXG4xMTk3OlxcdFxcdHUzMiBjbnQsIHJlZyA9IDAsIGdyc3RfdGltZW91dCwgdWxkX21hc2s7XFxuMTE5ODpcXHRcXG4xMTk5OlxcdFxcdC8qIFBvbGwgZm9yIERldmljZSBBY3RpdmUgc3RhdGUgaW4gY2FzZSBhIHJlY2VudCBDT1JFUiwgR0xPQlIsXFxuMTIwMDpcXHRcXHQgKiBvciBFTVBSIGhhcyBvY2N1cnJlZC4gVGhlIGdyc3QgZGVsYXkgdmFsdWUgaXMgaW4gMTAwbXMgdW5pdHMuXFxuMTIwMTpcXHRcXHQgKiBBZGQgMXNlYyBmb3Igb3V0c3RhbmRpbmcgQVEgY29tbWFuZHMgdGhhdCBjYW4gdGFrZSBhIGxvbmcgdGltZS5cXG4xMjAyOlxcdFxcdCAqL1xcbjEyMDM6XFx0XFx0Z3JzdF90aW1lb3V0ID0gRklFTERfR0VUKEdMR0VOX1JTVENUTF9HUlNUREVMX00sXFxuMTIwNDpcXHRcXHRcXHRcXHRcXHQgcmQzMihodywgR0xHRU5fUlNUQ1RMKSkgKyAxMDtcXG4xMjA1OlxcdFxcbjEyMDY6XFx0XFx0Zm9yIChjbnQgPSAwOyBjbnQgXFx1MDAzYyBncnN0X3RpbWVvdXQ7IGNudCsrKSB7XFxuMTIwNzpcXHRcXHRcXHRtZGVsYXkoMTAwKTtcXG4xMjA4OlxcdFxcdFxcdHJlZyA9IHJkMzIoaHcsIEdMR0VOX1JTVEFUKTtcXG4xMjA5OlxcdFxcdFxcdGlmICghKHJlZyBcXHUwMDI2IEdMR0VOX1JTVEFUX0RFVlNUQVRFX00pKVxcbjEyMTA6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTIxMTpcXHRcXHR9XFxuMTIxMjpcXHRcXG4xMjEzOlxcdFxcdGlmIChjbnQgPT0gZ3JzdF90aW1lb3V0KSB7XFxuMTIxNDpcXHRcXHRcXHRpY2VfZGVidWcoaHcsIElDRV9EQkdfSU5JVCwgXFxcIkdsb2JhbCByZXNldCBwb2xsaW5nIGZhaWxlZCB0byBjb21wbGV0ZS5cXFxcblxcXCIpO1xcbjEyMTU6XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuMTIxNjpcXHRcXHR9XFxuMTIxNzpcXHRcXG4xMjE4OlxcdCNkZWZpbmUgSUNFX1JFU0VUX0RPTkVfTUFTS1xcdChHTE5WTV9VTERfUENJRVJfRE9ORV9NIHxcXFxcXFxuMTIxOTpcXHRcXHRcXHRcXHRcXHQgR0xOVk1fVUxEX1BDSUVSX0RPTkVfMV9NIHxcXFxcXFxuMTIyMDpcXHRcXHRcXHRcXHRcXHQgR0xOVk1fVUxEX0NPUkVSX0RPTkVfTSB8XFxcXFxcbjEyMjE6XFx0XFx0XFx0XFx0XFx0IEdMTlZNX1VMRF9HTE9CUl9ET05FX00gfFxcXFxcXG4xMjIyOlxcdFxcdFxcdFxcdFxcdCBHTE5WTV9VTERfUE9SX0RPTkVfTSB8XFxcXFxcbjEyMjM6XFx0XFx0XFx0XFx0XFx0IEdMTlZNX1VMRF9QT1JfRE9ORV8xX00gfFxcXFxcXG4xMjI0OlxcdFxcdFxcdFxcdFxcdCBHTE5WTV9VTERfUENJRVJfRE9ORV8yX00pXFxuMTIyNTpcXHRcXG4xMjI2OlxcdFxcdHVsZF9tYXNrID0gSUNFX1JFU0VUX0RPTkVfTUFTSyB8IChody1cXHUwMDNlZnVuY19jYXBzLmNvbW1vbl9jYXAucmRtYSA/XFxuMTIyNzpcXHRcXHRcXHRcXHRcXHRcXHQgIEdMTlZNX1VMRF9QRV9ET05FX00gOiAwKTtcXG4xMjI4OlxcdFxcbjEyMjk6XFx0XFx0LyogRGV2aWNlIGlzIEFjdGl2ZTsgY2hlY2sgR2xvYmFsIFJlc2V0IHByb2Nlc3NlcyBhcmUgZG9uZSAqL1xcbjEyMzA6XFx0XFx0Zm9yIChjbnQgPSAwOyBjbnQgXFx1MDAzYyBJQ0VfUEZfUkVTRVRfV0FJVF9DT1VOVDsgY250KyspIHtcXG4xMjMxOlxcdFxcdFxcdHJlZyA9IHJkMzIoaHcsIEdMTlZNX1VMRCkgXFx1MDAyNiB1bGRfbWFzaztcXG4xMjMyOlxcdFxcdFxcdGlmIChyZWcgPT0gdWxkX21hc2spIHtcXG4xMjMzOlxcdFxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcXFwiR2xvYmFsIHJlc2V0IHByb2Nlc3NlcyBkb25lLiAlZFxcXFxuXFxcIiwgY250KTtcXG4xMjM0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjEyMzU6XFx0XFx0XFx0fVxcbjEyMzY6XFx0XFx0XFx0bWRlbGF5KDEwKTtcXG4xMjM3OlxcdFxcdH1cXG4xMjM4OlxcdFxcbjEyMzk6XFx0XFx0aWYgKGNudCA9PSBJQ0VfUEZfUkVTRVRfV0FJVF9DT1VOVCkge1xcbjEyNDA6XFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0lOSVQsIFxcXCJXYWl0IGZvciBSZXNldCBEb25lIHRpbWVkIG91dC4gR0xOVk1fVUxEID0gMHgleFxcXFxuXFxcIixcXG4xMjQxOlxcdFxcdFxcdFxcdCAgcmVnKTtcXG4xMjQyOlxcdFxcdFxcdHJldHVybiAtRUlPO1xcbjEyNDM6XFx0XFx0fVxcbjEyNDQ6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjAxLjgwODU4Mjc3OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTkxNTgxNTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgYGljZWAgRHJpdmVyIFByb2JlIEZhaWx1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBpY2VgIGRyaXZlciBhbmQgaG93IGl0J3MgZmFpbGluZyB0byBwcm9iZSwgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIHRoaXMgcGF0Y2guIElmIHRoZXJlJ3Mgbm8gcmVhbCBoYXJkd2FyZSBwcmVzZW50LCBgcmQzMmAgaXMgZ29pbmcgdG8gZ2l2ZSBtZSB0aGF0IHByZWRpY3RhYmxlIGAweGZmZmZmZmZmYCB2YWx1ZS4gQW5kIHNpbmNlIGBHTEdFTl9SU1RBVF9ERVZTVEFURV9NYCBpcyBwcm9iYWJseSBub24temVybywgdGhpcyBpcyBnb2luZyB0byBsZWFkIHRvIHRoZSBmaXJzdCBsb29wIHRpbWluZyBvdXQgYWZ0ZXIgYGdyc3RfdGltZW91dGAgaXRlcmF0aW9ucywgdWx0aW1hdGVseSByZXN1bHRpbmcgaW4gYSBgLUVJT2AgZXJyb3IgYW5kIHRoZSBgaWNlX2luaXRfaHdgIGZhaWxpbmcuIFRoYXQgbWVhbnMgdGhlIHdob2xlIGBpY2VfcHJvYmVgIHJvdXRpbmUgYml0ZXMgdGhlIGR1c3QuXG5cbkJ1dCwgaWYgc29tZWhvdyBgcmQzMmAgcmV0dXJucyBhIGNsZWFuIGAwYCwgdGhlbiBgR0xHRU5fUlNUQVRfREVWU1RBVEVfTWAgaXMgYWxzbyB6ZXJvLCBzbyB0aGUgZmlyc3QgbG9vcCBpcyBicm9rZW4uIE5vdyB3ZSdyZSBjaGVja2luZyBgR0xOVk1fVUxEYC4gVGhlIGNvZGUgdGhlbiBwZXJmb3JtcyBhIGNvbXBhcmlzb246IGByZWcgPT0gdWxkX21hc2tgLiBCZWNhdXNlIGAwICE9IHVsZF9tYXNrYCB0aGUgc2Vjb25kIGxvb3AgcnVucywgdGltaW5nIG91dCBhZnRlciBgSUNFX1BGX1JFU0VUX1dBSVRfQ09VTlRgIGl0ZXJhdGlvbnMsIGFsc28gcmV0dXJuaW5nIGAtRUlPYC4gVGhhdCdzIGFub3RoZXIgd2F5IGBpY2VfcHJvYmVgIGZhaWxzLlxuXG5Tbywgd2l0aG91dCBhIGxpdmUgcGllY2Ugb2YgaGFyZHdhcmUsIG9yIGEgdmVyeSBzbWFydCBlbXVsYXRvciBjYXBhYmxlIG9mIHNpbXVsYXRpbmcgdGhlc2UgY3J1Y2lhbCByZWdpc3RlciBpbnRlcmFjdGlvbnMgbGlrZSBgR0xHRU5fUlNUQVRgIGFuZCBgR0xOVk1fVUxEYCwgdGhlIGRyaXZlciBpcyBnb2luZyB0byBib21iIG91dC4gQW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgd2VsbCwgU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSB0aGF0IGxldmVsIG9mIHNvcGhpc3RpY2F0aW9uIHdpdGggdGhpcyBgaWNlYCBkcml2ZXIhIEl0J3MgbGlrZWx5IHVzaW5nIGBzeXpfcGNpYCBvciBzb21ldGhpbmcgc2ltaWxhciBqdXN0IHRvIG1hcCBtZW1vcnkgYW5kIHRocm93IHJhbmRvbSB2YWx1ZXMsIGJ1dCB0aGF0IGRvZXNuJ3QgaGVscCB3aXRoIHRoZSBwb2xsaW5nIGxvb3BzLiBJdCB3b24ndCByZXNwb25kIGluIHRoZSB3YXkgdGhlIGRyaXZlciBleHBlY3RzLlxuXG5Ib2xkIG9uLCB0aG91Z2gsIHdoYXQgaWYgdGhpcyBwYXRjaCAqaXNuJ3QqIGRpcmVjdGx5IHJlbGF0ZWQgdG8gaGFyZHdhcmUgcHJvYmluZz8gTWF5YmUgaXQncyBhYm91dCB0aGUgRFBMTCBuZXRsaW5rIGludGVyZmFjZS4gTm93IHRoYXQncyBpbnRlcmVzdGluZy4gSWYgdGhlIGRyaXZlciBjYW4ndCBwcm9iZSwgdGhlIERQTEwgbmV0bGluayBpbnRlcmZhY2UgKndvbid0KiBiZSByZWdpc3RlcmVkLiBXaGljaCBtZWFucyB0aGF0IGNvZGUgcGF0aCBpcyB1bnJlYWNoYWJsZS4gVGhhdCdzIGEgc3Ryb25nIGNvbm5lY3Rpb24uIEkgbmVlZCB0byB0cmFjZSBiYWNrIHRvIHdoZXJlIHRoZSBEUExMIGludGVyZmFjZSBpcyBhY3R1YWxseSBpbml0aWFsaXplZCB3aXRoaW4gdGhpcyBkcml2ZXIgdG8gc2VlIGlmIHRoYXQncyB0aGUgcG9pbnQgb2YgdGhpcyBwYXRjaC4gTGV0J3Mgc3RhcnQgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDA1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MDguODAwMTY2MjMzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzI3NjYwOTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2RwbGxfaW5pdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTMyNjg9c3RhdGljIHZvaWQgaWNlX2RwbGxfcGVyaW9kaWNfd29yayhzdHJ1Y3Qga3RocmVhZF93b3JrICp3b3JrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzMxMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozMzEzOiAqIGljZV9kcGxsX2luaXRfcmVmX3N5bmNfaW5wdXRzIC0gaW5pdGlhbGl6ZSByZWZlcmVuY2Ugc3luYyBwaW4gcGFpcnNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zMzE0LSAqIEBwZjogcGYgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMjItICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MzMyMzpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfcmVmX3N5bmNfaW5wdXRzKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTMzMjQte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MzU1Nz1pY2VfZHBsbF9kZWluaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzU3MC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozNTcxOiAqIGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMgLSBpbml0aWFsaXplIGRpcmVjdCBwaW5zXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtMzU3Mi0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zNTg4PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzozNTg5OmljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMoc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM1OTAtXFx0XFx0XFx0ICBzdHJ1Y3QgaWNlX2RwbGxfcGluICpwaW5zLCBpbnQgc3RhcnRfaWR4LCBpbnQgY291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz0zNzUzPXN0YXRpYyBpbnQgaWNlX2RwbGxfcGluX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM3ODYtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzc4NzogKiBpY2VfZHBsbF9pbml0X3Bpbl9jb21tb24gLSBpbml0aWFsaXplIHBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM3ODgtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9MzgwMD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6MzgwMTppY2VfZHBsbF9pbml0X3Bpbl9jb21tb24oc3RydWN0IGljZV9wZiAqcGYsIHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zODAyLVxcdFxcdFxcdCBpbnQgc3RhcnRfaWR4LCBjb25zdCBzdHJ1Y3QgZHBsbF9waW5fb3BzICpvcHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zODQ1LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM4NDY6ICogaWNlX2RwbGxfaW5pdF9yY2xrX3BpbiAtIGluaXRpYWxpemUgcmVjb3ZlcmVkIGNsb2NrIHBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NDctICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9Mzg1OD1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzg1OTppY2VfZHBsbF9pbml0X3JjbGtfcGluKHN0cnVjdCBpY2VfcGYgKnBmLCBpbnQgc3RhcnRfaWR4LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjAtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBkcGxsX3Bpbl9vcHMgKm9wcylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6Mzg2NTpcXHRyZXQgPSBpY2VfZHBsbF9pbml0X3Bpbl9jb21tb24ocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMucmNsaywgc3RhcnRfaWR4LCBvcHMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTM4NjYtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTM5OTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjM5OTY6aWNlX2RwbGxfaW5pdF9md25vZGVfcGluKHN0cnVjdCBpY2VfZHBsbF9waW4gKnBpbiwgY29uc3QgY2hhciAqbmFtZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy0zOTk3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwMzktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDA0MDogKiBpY2VfZHBsbF9pbml0X2Z3bm9kZV9waW5zIC0gaW5pdGlhbGl6ZSBwaW5zIGZyb20gZGV2aWNlIHRyZWVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDQxLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQwNTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQwNTY6aWNlX2RwbGxfaW5pdF9md25vZGVfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgc3RydWN0IGljZV9kcGxsX3BpbiAqcGlucyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDU3LVxcdFxcdFxcdCAgaW50IHN0YXJ0X2lkeClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwNjgtXFx0XFx0c25wcmludGYocGluX25hbWUsIHNpemVvZihwaW5fbmFtZSksIFxcXCJyY2xrJXVcXFwiLCBpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MDY5OlxcdFxcdHJldCA9IGljZV9kcGxsX2luaXRfZndub2RlX3BpbihcXHUwMDI2cGluc1tzdGFydF9pZHggKyBpXSwgcGluX25hbWUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwNzAtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQwODgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDA4OTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfdHhjbGtfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgaW50IHN0YXJ0X2lkeClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MDkwLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxMDktXFx0cmVmX3BpbisrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQxMTA6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9md25vZGVfcGluKHJlZl9waW4sIGljZV9kcGxsX2Z3bm9kZV9leHRfc3luY2UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxMTEtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNDctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE0ODogKiBpY2VfZHBsbF9pbml0X3BpbnNfZTgyNSAtIGluaXQgcGlucyBhbmQgcmVnaXN0ZXIgcGlucyB3aXRoIGEgZHBsbHNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTQ5LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNTgtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE1OTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfcGluc19lODI1KHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE2Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTYzOlxcdHJldCA9IGljZV9kcGxsX2luaXRfZndub2RlX3BpbnMocGYsIHBmLVxcdTAwM2VkcGxscy5pbnB1dHMsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjQtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDE2NzpcXHRyZXQgPSBpY2VfZHBsbF9pbml0X3JjbGtfcGluKHBmLCBEUExMX1BJTl9JRFhfVU5TUEVDLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQxNjgtXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aWNlX2RwbGxfcmNsa19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE3Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTczOlxcdHJldCA9IGljZV9kcGxsX2luaXRfdHhjbGtfcGlucyhwZiwgMCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE3NC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDE4OS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MTkwOiAqIGljZV9kcGxsX2luaXRfcGlucyAtIGluaXQgcGlucyBhbmQgcmVnaXN0ZXIgcGlucyB3aXRoIGEgZHBsbHNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MTkxLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMDAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDIwMTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBjZ3UpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIwMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjA5LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMTA6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cXHUwMDNlZHBsbHMuaW5wdXRzLCAwLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTEtXFx0XFx0XFx0XFx0XFx0cGYtXFx1MDAzZWRwbGxzLm51bV9pbnB1dHMsIGlucHV0X29wcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMTctXFx0aWYgKGNndSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMTg6XFx0XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cXHUwMDNlZHBsbHMub3V0cHV0cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjE5LVxcdFxcdFxcdFxcdFxcdFxcdGNvdW50LCBwZi1cXHUwMDNlZHBsbHMubnVtX291dHB1dHMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjI1LVxcdFxcdGlmICghcGYtXFx1MDAzZWRwbGxzLmdlbmVyaWMpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MjI2OlxcdFxcdFxcdHJldCA9IGljZV9kcGxsX2luaXRfZGlyZWN0X3BpbnMocGYsIGNndSwgcGYtXFx1MDAzZWRwbGxzLnNtYSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjI3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdGNvdW50LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDIzNC1cXHRcXHRcXHRjb3VudCArPSBJQ0VfRFBMTF9QSU5fU1dfTlVNO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyMzU6XFx0XFx0XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9kaXJlY3RfcGlucyhwZiwgY2d1LCBwZi1cXHUwMDNlZHBsbHMudWZsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQyMzYtXFx0XFx0XFx0XFx0XFx0XFx0XFx0Y291bnQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MjU2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQyNTc6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9yY2xrX3BpbihwZiwgY291bnQgKyBwZi1cXHUwMDNlcHRwLnBvcnQucG9ydF9udW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDI1OC1cXHRcXHRcXHRcXHQgICAgIFxcdTAwMjZpY2VfZHBsbF9yY2xrX29wcyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00Mjk0PWljZV9kcGxsX2RlaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDMwMS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0MzAyOiAqIGljZV9kcGxsX2luaXRfZHBsbCAtIGluaXRpYWxpemUgZHBsbCBkZXZpY2UgaW4gZHBsbCBzdWJzeXN0ZW1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00MzAzLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzMTU9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQzMTY6aWNlX2RwbGxfaW5pdF9kcGxsKHN0cnVjdCBpY2VfcGYgKnBmLCBzdHJ1Y3QgaWNlX2RwbGwgKmQsIGJvb2wgY2d1LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQzMTctXFx0XFx0ICAgZW51bSBkcGxsX3R5cGUgdHlwZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzNTY9c3RhdGljIHZvaWQgaWNlX2RwbGxfZGVpbml0X3dvcmtlcihzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQzNjQtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDM2NTogKiBpY2VfZHBsbF9pbml0X3dvcmtlciAtIEluaXRpYWxpemUgRFBMTHMgcGVyaW9kaWMgd29ya2VyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDM2Ni0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00Mzc0LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQzNzU6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X3dvcmtlcihzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00Mzc2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQzOTc9c3RhdGljIHZvaWQgaWNlX2RwbGxfcGhhc2VfcmFuZ2Vfc2V0KHN0cnVjdCBkcGxsX3Bpbl9waGFzZV9hZGp1c3RfcmFuZ2UgKnJhbmdlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQwNC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NDA1OiAqIGljZV9kcGxsX2luaXRfaW5mb19waW5zX2dlbmVyaWMgLSBpbml0aWFsaXplcyBnZW5lcmljIHBpbnMgaW5mb1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ0MDYtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQxNC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NDE1OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3BpbnNfZ2VuZXJpYyhzdHJ1Y3QgaWNlX3BmICpwZiwgYm9vbCBpbnB1dClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDE2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ0NzEtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDQ3MjogKiBpY2VfZHBsbF9pbml0X2luZm9fZGlyZWN0X3BpbnMgLSBpbml0aWFsaXplcyBkaXJlY3QgcGlucyBpbmZvXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDQ3My0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00NDgzPXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NDg0OmljZV9kcGxsX2luaXRfaW5mb19kaXJlY3RfcGlucyhzdHJ1Y3QgaWNlX3BmICpwZixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NDg1LVxcdFxcdFxcdCAgICAgICBlbnVtIGljZV9kcGxsX3Bpbl90eXBlIHBpbl90eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDUxMy1cXHRcXHRwZi1cXHUwMDNlZHBsbHMuZ2VuZXJpYyA9IHRydWU7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDUxNDpcXHRcXHRyZXR1cm4gaWNlX2RwbGxfaW5pdF9pbmZvX3BpbnNfZ2VuZXJpYyhwZiwgaW5wdXQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1MTUtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU1My1cXHRpZiAoaW5wdXQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDU1NDpcXHRcXHRyZXQgPSBpY2VfZHBsbF9pbml0X3JlZl9zeW5jX2lucHV0cyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU1NS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NTktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDU2MDogKiBpY2VfZHBsbF9pbml0X2luZm9fcGluX29uX3Bpbl9lODI1YyAtIGluaXRpYWxpemVzIHJjbGsgcGluIGluZm9ybWF0aW9uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU2MS0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTY3LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ1Njg6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm9fcGluX29uX3Bpbl9lODI1YyhzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NTY5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1NzktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDU4MDogKiBpY2VfZHBsbF9pbml0X2luZm9fcmNsa19waW4gLSBpbml0aWFsaXplcyByY2xrIHBpbiBpbmZvcm1hdGlvblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1ODEtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDU4OC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NTg5OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX3JjbGtfcGluKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ1OTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDYwMS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NjAyOiAqIGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zIC0gaW5pdGlhbGl6ZXMgc29mdHdhcmUgY29udHJvbGxlZCBwaW4gaW5mb3JtYXRpb25cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NjAzLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ2MTEtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDYxMjpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ2MTMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDcxMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzEzOiAqIGljZV9kcGxsX2luaXRfaW5mb190eGNsa19waW5zX2U4MjVjIC0gaW5pdGlhbGl6ZXMgdHgtY2xrIHBpbnMgaW5mb3JtYXRpb25cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzE0LSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3MjAtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDcyMTpzdGF0aWMgaW50IGljZV9kcGxsX2luaXRfaW5mb190eGNsa19waW5zX2U4MjVjKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3MjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc0Mi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzQzOiAqIGljZV9kcGxsX2luaXRfcGluc19pbmZvIC0gaW5pdCBwaW5zIGluZm8gd3JhcHBlclxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NDQtICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM9NDc1Mz1zdGF0aWMgaW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc1NDppY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfZHBsbF9waW5fdHlwZSBwaW5fdHlwZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzU1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NTgtXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc1OTpcXHRcXHRyZXR1cm4gaWNlX2RwbGxfaW5pdF9pbmZvX2RpcmVjdF9waW5zKHBmLCBwaW5fdHlwZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2MC1cXHRjYXNlIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQ6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2MS1cXHRcXHRpZiAocGYtXFx1MDAzZWh3Lm1hY190eXBlID09IElDRV9NQUNfR0VORVJJQ18zS19FODI1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ3NjI6XFx0XFx0XFx0cmV0dXJuIGljZV9kcGxsX2luaXRfaW5mb19waW5fb25fcGluX2U4MjVjKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzYzLVxcdFxcdGVsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzY0OlxcdFxcdFxcdHJldHVybiBpY2VfZHBsbF9pbml0X2luZm9fcmNsa19waW4ocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NjUtXFx0Y2FzZSBJQ0VfRFBMTF9QSU5fVFlQRV9TT0ZUV0FSRTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0NzY2OlxcdFxcdHJldHVybiBpY2VfZHBsbF9pbml0X2luZm9fc3dfcGlucyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc2Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00NzY4LVxcdGNhc2UgSUNFX0RQTExfUElOX1RZUEVfVFhDTEs6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDc2OTpcXHRcXHRyZXR1cm4gaWNlX2RwbGxfaW5pdF9pbmZvX3R4Y2xrX3BpbnNfZTgyNWMocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NzAtXFx0ZGVmYXVsdDpcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ3NzgtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0Nzc5OiAqIFJlbGVhc2UgbWVtb3J5IGFsbG9jYXRlZCBmb3IgcGlucyBieSBpY2VfZHBsbF9pbml0X2luZm8gZnVuY3Rpb24uXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc4MC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYz00NzgxPXN0YXRpYyB2b2lkIGljZV9kcGxsX2RlaW5pdF9pbmZvKHN0cnVjdCBpY2VfcGYgKnBmKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDc5My0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0Nzk0OiAqIGljZV9kcGxsX2luaXRfaW5mb19lODI1YyAtIHByZXBhcmUgcGYncyBkcGxsIGluZm9ybWF0aW9uIHN0cnVjdHVyZSBmb3IgZTgyNWNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00Nzk1LSAqIGRldmljZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDgwMy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODA0OnN0YXRpYyBpbnQgaWNlX2RwbGxfaW5pdF9pbmZvX2U4MjVjKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4MDUte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDgyOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0ODI5OlxcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9SQ0xLX0lOUFVUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODMwLVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODMyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4MzM6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX1RYQ0xLKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODM0LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODQ2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4NDc6ICogaWNlX2RwbGxfaW5pdF9pbmZvIC0gcHJlcGFyZSBwZidzIGRwbGwgaW5mb3JtYXRpb24gc3RydWN0dXJlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDg0OC0gKiBAcGY6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00ODU2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ4NTc6c3RhdGljIGludCBpY2VfZHBsbF9pbml0X2luZm8oc3RydWN0IGljZV9wZiAqcGYsIGJvb2wgY2d1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ4NTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDkwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTAyOlxcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9JTlBVVCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDkwMy1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNDkxMy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo0OTE0OlxcdFxcdHJldCA9IGljZV9kcGxsX2luaXRfcGluc19pbmZvKHBmLCBJQ0VfRFBMTF9QSU5fVFlQRV9PVVRQVVQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MTUtXFx0XFx0aWYgKHJldClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy00OTE2LVxcdFxcdFxcdGdvdG8gZGVpbml0X2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NDkxNzpcXHRcXHRyZXQgPSBpY2VfZHBsbF9pbml0X3BpbnNfaW5mbyhwZiwgSUNFX0RQTExfUElOX1RZUEVfU09GVFdBUkUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MTgtXFx0XFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MjctXFx0XFx0cGYtXFx1MDAzZWRwbGxzLnJjbGsucGFyZW50X2lkeFtpXSA9IGQtXFx1MDAzZWJhc2VfcmNsa19pZHggKyBpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjQ5Mjg6XFx0cmV0ID0gaWNlX2RwbGxfaW5pdF9waW5zX2luZm8ocGYsIElDRV9EUExMX1BJTl9UWVBFX1JDTEtfSU5QVVQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTQ5MjktXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jPTQ5NjA9dm9pZCBpY2VfZHBsbF9kZWluaXQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDAwLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwMDE6ICogaWNlX2RwbGxfaW5pdF9lODI1IC0gaW5pdGlhbGl6ZSBzdXBwb3J0IGZvciBkcGxsIHN1YnN5c3RlbVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMDItICogQHBmOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTAwOS0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDEwOnN0YXRpYyB2b2lkIGljZV9kcGxsX2luaXRfZTgyNShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDExLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTAzNTpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X2luZm9fZTgyNWMocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzYtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDM3LVxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTAzODpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMudHhjLCBmYWxzZSwgRFBMTF9UWVBFX0dFTkVSSUMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwMzktXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDQwLVxcdFxcdGdvdG8gZGVpbml0X2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA0MTpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X3BpbnNfZTgyNShwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA0Mi1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA1OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDU5OiAqIGljZV9kcGxsX2luaXRfZTgxMCAtIGluaXRpYWxpemUgc3VwcG9ydCBmb3IgZHBsbCBzdWJzeXN0ZW1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDYwLSAqIEBwZjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNjctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA2ODpzdGF0aWMgdm9pZCBpY2VfZHBsbF9pbml0X2U4MTAoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTA2OS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDc0LVxcdG11dGV4X2luaXQoXFx1MDAyNmQtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUwNzU6XFx0ZXJyID0gaWNlX2RwbGxfaW5pdF9pbmZvKHBmLCBjZ3UpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNzYtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDc3LVxcdFxcdGdvdG8gZXJyX2V4aXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA3ODpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMuZWVjLCBjZ3UsIERQTExfVFlQRV9FRUMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwNzktXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDgwLVxcdFxcdGdvdG8gZGVpbml0X2luZm87XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmM6NTA4MTpcXHRlcnIgPSBpY2VfZHBsbF9pbml0X2RwbGwocGYsIFxcdTAwMjZwZi1cXHUwMDNlZHBsbHMucHBzLCBjZ3UsIERQTExfVFlQRV9QUFMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUwODItXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDgzLVxcdFxcdGdvdG8gZGVpbml0X2VlYztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDg0OlxcdGVyciA9IGljZV9kcGxsX2luaXRfcGlucyhwZiwgY2d1KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDg1LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDg3LVxcdGlmIChjZ3UpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MDg4OlxcdFxcdGVyciA9IGljZV9kcGxsX2luaXRfd29ya2VyKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MDg5LVxcdFxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MTA4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUxMDk6dm9pZCBpY2VfZHBsbF9pbml0KHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTExMi1cXHRjYXNlIElDRV9NQUNfR0VORVJJQ18zS19FODI1OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jOjUxMTM6XFx0XFx0aWNlX2RwbGxfaW5pdF9lODI1KHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYy01MTE0LVxcdFxcdGJyZWFrO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5jLTUxMTUtXFx0ZGVmYXVsdDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuYzo1MTE2OlxcdFxcdGljZV9kcGxsX2luaXRfZTgxMChwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmMtNTExNy1cXHRcXHRicmVhaztcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oPTE3Mj1zdHJ1Y3QgaWNlX2RwbGxzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oLTIwMi0jaWYgSVNfRU5BQkxFRChDT05GSUdfUFRQXzE1ODhfQ0xPQ0spXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmg6MjAzOnZvaWQgaWNlX2RwbGxfaW5pdChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kcGxsLmgtMjA0LXZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaC0yMDUtI2Vsc2VcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RwbGwuaDoyMDY6c3RhdGljIGlubGluZSB2b2lkIGljZV9kcGxsX2luaXQoc3RydWN0IGljZV9wZiAqcGYpIHsgfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZHBsbC5oLTIwNy1zdGF0aWMgaW5saW5lIHZvaWQgaWNlX2RwbGxfZGVpbml0KHN0cnVjdCBpY2VfcGYgKnBmKSB7IH1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3MjE9c3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzM2LVxcdCAgICBpY2VfaXNfZmVhdHVyZV9zdXBwb3J0ZWQocGYsIElDRV9GX1BIWV9SQ0xLKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo0NzM3OlxcdFxcdGljZV9kcGxsX2luaXQocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ3MzgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjA4LjkzMjk0MTI1MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTQyOTY2NjQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcmFjaW5nIHRoZSBJbml0aWFsaXphdGlvbiBGbG93KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoaXMgYGljZV9kcGxsX2luaXRgIGZ1bmN0aW9uIGdldHMgY2FsbGVkLiBSaWdodCwgaXQgbG9va3MgbGlrZSBpdCdzIGtpY2tlZCBvZmYgZnJvbSBgaWNlX2luaXRfZmVhdHVyZXNgLiBBbmQgd2hlcmUgZG9lcyAqdGhhdCogY29tZSBmcm9tPyBBaCwgdGhhdCdzIGNhbGxlZCBmcm9tIGBpY2VfcHJvYmVgIOKAkyBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIGRlcGVuZGluZyBvbiB0aGUgZXhhY3QgY29udGV4dC4gQnV0IGhvbGQgb24sIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZSB0aGlzIHN0cmFpZ2h0LiBZZXMsIHRoZSBwYXJlbnQgb2YgYGljZV9pbml0X2ZlYXR1cmVzYCBpcyBkZWZpbml0ZWx5IGBpY2VfcHJvYmVgLiBCZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGUgd2VlZHMsIEkgdGhpbmsgaXQncyBwcnVkZW50IHRvIGp1c3QgcXVpY2tseSB2ZXJpZnkgd2hlcmUgYGljZV9pbml0X2ZlYXR1cmVzYCBpcyBjYWxsZWQgZnJvbS4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGwgc3RhY2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjQxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MzAuMzYyNjExMjE3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODY3ODEyMTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2luaXRfZmVhdHVyZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00NzExPXZvaWQgaWNlX2RlaW5pdF9kZXYoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NzIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ3MjE6c3RhdGljIHZvaWQgaWNlX2luaXRfZmVhdHVyZXMoc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDcyMi17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MDI5PWludCBpY2VfbG9hZChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUwNjctXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTA2ODpcXHRpY2VfaW5pdF9mZWF0dXJlcyhwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTA2OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MzAuNzQ5Mzk4MzQ5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTQ4NTk1MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsIEhpZXJhcmNoeSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgdGhhdCBgaWNlX2xvYWRgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIHdpdGhpbiBgaWNlX3Byb2JlYC4gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIGhlcmUsIHRoZSBmdW5kYW1lbnRhbCByZWxhdGlvbnNoaXAgSSBuZWVkIHRvIGdyYXNwLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGNvbnNpZGVyIHRoZSBpbXBsaWNhdGlvbnM6IHdoYXQncyB0aGUgcHVycG9zZSBvZiBgaWNlX3Byb2JlYCBhbmQgaG93IGRvZXMgYGljZV9sb2FkYCBmaXQgaW50byB0aGF0IHByb2Nlc3M/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgYW5kIHRoZSBmdW5jdGlvbmFsIGRlcGVuZGVuY3kuIElzIGBpY2VfbG9hZGAgYSBjb3JlIGNvbXBvbmVudCBvZiBgaWNlX3Byb2JlYCwgb3IgaXMgaXQgYSBzdXBwb3J0aW5nIHV0aWxpdHkgY2FsbGVkIG9wcG9ydHVuaXN0aWNhbGx5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIGlzc3VlcyB3aXRoIHRoaXMgYXJyYW5nZW1lbnQsIGJhc2VkIG9uIGJlc3QgcHJhY3RpY2VzIHdpdGhpbiB0aGlzIHN5c3RlbSBvciBzaW1pbGFyIHN5c3RlbXMgSSd2ZSB3b3JrZWQgb24/IE15IGJyYWluIGlzIGFscmVhZHkgc3RhcnRpbmcgdG8gZm9ybSBwb3RlbnRpYWwgYXJlYXMgZm9yIGRlZXBlciBpbnZlc3RpZ2F0aW9uLCBsaWtlIGVycm9yIGhhbmRsaW5nLCBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIGFuZCB0aGUgb3ZlcmFsbCBkZXNpZ24gcmF0aW9uYWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTE1MSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjMzLjk0NDI2MDc5OFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0MDA0NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2xvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTIzNT1zdGF0aWMgaW50IGljZV9kZXZsaW5rX3JlaW5pdF91cChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjcxLVxcdC8qIE5vIG5lZWQgdG8gdGFrZSBkZXZsX2xvY2ssIGl0J3MgYWxyZWFkeSB0YWtlbiBieSBkZXZsaW5rIEFQSSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMjcyOlxcdGVyciA9IGljZV9sb2FkKHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI3My1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZS5oPTEwNTU9dm9pZCBpY2Vfc3RhcnRfc2VydmljZV90YXNrKHN0cnVjdCBpY2VfcGYgKnBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlLmg6MTA1NjppbnQgaWNlX2xvYWQoc3RydWN0IGljZV9wZiAqcGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2UuaC0xMDU3LXZvaWQgaWNlX3VubG9hZChzdHJ1Y3QgaWNlX3BmICpwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00MTgxPXN0YXRpYyB2b2lkIGljZV9sb2dfcGtnX2luaXQoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2RkcF9zdGF0ZSBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQyNTctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDI1ODogKiBpY2VfbG9hZF9wa2cgLSBsb2FkL3JlbG9hZCB0aGUgRERQIFBhY2thZ2UgZmlsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQyNTktICogQGZpcm13YXJlOiBmaXJtd2FyZSBzdHJ1Y3R1cmUgd2hlbiBmaXJtd2FyZSByZXF1ZXN0ZWQgb3IgTlVMTCBmb3IgcmVsb2FkXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00MjY1PXN0YXRpYyB2b2lkXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDI2NjppY2VfbG9hZF9wa2coY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZSwgc3RydWN0IGljZV9wZiAqcGYpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDI2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz00NTM1PXN0YXRpYyBpbnQgaWNlX2luaXRfZGRwX2NvbmZpZyhzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00NTU1LVxcdC8qIERvd25sb2FkIGZpcm13YXJlIHRvIGRldmljZSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ1NTY6XFx0aWNlX2xvYWRfcGtnKGZpcm13YXJlLCBwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDU1Ny1cXHRyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUwMTM9c3RhdGljIHZvaWQgaWNlX2RlaW5pdChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUwMjMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTAyNDogKiBpY2VfbG9hZCAtIGxvYWQgcGYgYnkgaW5pdCBodyBhbmQgc3RhcnRpbmcgVlNJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTAyNS0gKiBAcGY6IHBvaW50ZXIgdG8gdGhlIHBmIGluc3RhbmNlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MDI4LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUwMjk6aW50IGljZV9sb2FkKHN0cnVjdCBpY2VfcGYgKnBmKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUwMzAte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTE1NT1pY2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI2NS1cXHRkZXZsX2xvY2socHJpdl90b19kZXZsaW5rKHBmKSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI2NjpcXHRlcnIgPSBpY2VfbG9hZChwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI2Ny1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NzYzNz1zdGF0aWMgdm9pZCBpY2VfcmVidWlsZChzdHJ1Y3QgaWNlX3BmICpwZiwgZW51bSBpY2VfcmVzZXRfcmVxIHJlc2V0X3R5cGUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03NjczLVxcdFxcdFxcdC8qIFJlbG9hZCBERFAgUGFja2FnZSBhZnRlciBDT1JFUi9HTE9CUiByZXNldCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjc2NzQ6XFx0XFx0XFx0aWNlX2xvYWRfcGtnKE5VTEwsIHBmKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy03Njc1LVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6MzQuMDA3NjY3Mjg2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTQ5NTQ2MjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRFBMTCBOZXRsaW5rIEludGVyZmFjZSdzIFZ1bG5lcmFiaWxpdHkgV2luZG93KipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGV4ZWN1dGlvbiBmbG93IGhlcmUuIGBpY2VfbG9hZGAgZ2V0cyBjYWxsZWQgZnJvbSBgaWNlX3Byb2JlYCwgd2hpY2ggaXMgZmluZS4gQnV0IEknbSBub3RpY2luZyB0aGF0IGBpY2VfbG9hZGAgaXMgY2FsbGVkICphZnRlciogYGljZV9pbml0X2h3YC4gVGhlIGNyaXRpY2FsIHBvaW50IGlzIHRoYXQgYGljZV9pbml0X2h3YCBpcyB0aGUgZ2F0ZWtlZXBlcjsgaXQgYmFpbHMgb3V0IGlmIGl0IGRvZXNuJ3QgZGV0ZWN0IHRoZSByZWFsIGhhcmR3YXJlLiBJZiBgaWNlX2luaXRfaHdgIGZhaWxzLCBgaWNlX2xvYWRgIG5ldmVyIGdldHMgY2FsbGVkLiBBbmQgdGhhdCBtZWFucyBgaWNlX2RwbGxfaW5pdGAgd29uJ3QgcnVuLiBDb25zZXF1ZW50bHksIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGZvciB0aGlzIHNwZWNpZmljIGRldmljZSBuZXZlciBnZXRzIHJlZ2lzdGVyZWQuIFRodXMsIHRoZSBmdW5jdGlvbnMgSSdtIGludGVyZXN0ZWQgaW4gKGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgKSBhcmUgdW5yZWFjaGFibGUgdGhyb3VnaCBuZXRsaW5rLlxuXG5Ob3csIG15IG1pbmQgaXMgcmFjaW5nLiBJcyB0aGVyZSBhbnkgd2F5IHN5emthbGxlciBjb3VsZCBjaXJjdW12ZW50IGBpY2VfaW5pdF9od2A/IERvZXMgaXQgaGF2ZSBhIG1lY2hhbmlzbSB0byBieXBhc3MgdGhpcyBpbml0aWFsIGhhcmR3YXJlIGNoZWNrPyBOb3BlLiBTeXprYWxsZXIncyBzdHJlbmd0aCBsaWVzIGluIGl0cyBhYmlsaXR5IHRvIGZ1enogYW5kIHByb3ZpZGUgaW5wdXQsIHBhcnRpY3VsYXJseSBQQ0kgbWVtb3J5IHJlYWRzLCBidXQgaXQgY2FuJ3QgZnVuZGFtZW50YWxseSBhbHRlciB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIHBhdGguIEl0IGNhbiBvbmx5IGZlZWQgdGhlIGJlYXN0LlxuXG5Pa2F5LCBsZXQncyBleHBsb3JlIHRoaXMuIElmIHN5emthbGxlciB0aHJvd3MgcmFuZG9tIHZhbHVlcyBhdCBQQ0kgbWVtb3J5IHJlYWRzLCBgaWNlX2luaXRfaHdgIHdpbGwgbGlrZWx5IGZhaWwuIEl0IGV4cGVjdHMgc3BlY2lmaWMgcmVnaXN0ZXIgc2VxdWVuY2VzIGFuZCB2YWx1ZXMsIGxpa2UgYEdMR0VOX1JTVEFUX0RFVlNUQVRFX01gIHRvIGJlIDAgYW5kIHNwZWNpZmljIGJpdHMgaW4gYEdMTlZNX1VMRGAgc2V0LiBUaGUgcHJvYmFiaWxpdHkgb2Ygc3l6a2FsbGVyIHN0dW1ibGluZyB1cG9uIHRoZSBleGFjdCByZWdpc3RlciByZWFkIHNlcXVlbmNlIG5lZWRlZCB0byBwYXNzIGBpY2VfY2hlY2tfcmVzZXRgIGFuZCBvdGhlciBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzdGVwcyBpcyBwcmFjdGljYWxseSB6ZXJvLiBJdCdzIGEgbmVlZGxlIGluIGEgaGF5c3RhY2ssIGEgY29tYmluYXRvcmlhbCBleHBsb3Npb24gb2YgaW1wcm9iYWJsZSB2YWx1ZXMuXG5cbldhaXQuLi4gZG9lcyBgc3l6X3BjaWAgZXZlbiBzdXBwb3J0IGR5bmFtaWMgcmVzcG9uc2VzIHRvIG1lbW9yeSByZWFkcz8gVXN1YWxseSwgaXQncyBqdXN0IGEgc2hhcmVkIG1lbW9yeSByZWdpb24gbWFwcGluZywgc28gYW55IHJlYWRzIHdpbGwgcmV0dXJuIHdoYXRldmVyIGlzIHByZS1wb3B1bGF0ZWQgaW4gdGhhdCBtZW1vcnkuIElmIGl0J3MgYSBzdGF0aWMgcmVnaW9uLCBgcmQzMmAgd291bGQgY29uc2lzdGVudGx5IHJldHVybiB0aGUgc2FtZSB2YWx1ZS5cblxuTGV0J3Mgem9vbSBpbiBvbiBgaWNlX2NoZWNrX3Jlc2V0YC4gSSBzZWUgYSBsb29wIGxpa2UgdGhpczpcblxuYGBgY1xuXHRmb3IgKGNudCA9IDA7IGNudCBcdTAwM2MgZ3JzdF90aW1lb3V0OyBjbnQrKykge1xuXHRcdG1kZWxheSgxMDApO1xuXHRcdHJlZyA9IHJkMzIoaHcsIEdMR0VOX1JTVEFUKTtcblx0XHRpZiAoIShyZWcgXHUwMDI2IEdMR0VOX1JTVEFUX0RFVlNUQVRFX00pKVxuXHRcdFx0YnJlYWs7XG5cdH1cbmBgYFxuXG5JZiB0aGUgbWVtb3J5IG1hcHBlZCBieSBzeXprYWxsZXIgaGFwcGVucyB0byBoYXZlIGBHTEdFTl9SU1RBVF9ERVZTVEFURV9NYCBjbGVhcmVkLCB0aGUgbG9vcCBicmVha3MgZWFybHkuIFRoZW46XG5cbmBgYGNcblx0Zm9yIChjbnQgPSAwOyBjbnQgXHUwMDNjIElDRV9QRl9SRVNFVF9XQUlUX0NPVU5UOyBjbnQrKykge1xuXHRcdHJlZyA9IHJkMzIoaHcsIEdMTlZNX1VMRCkgXHUwMDI2IHVsZF9tYXNrO1xuXHRcdGlmIChyZWcgPT0gdWxkX21hc2spIHtcblx0XHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcIkdsb2JhbCByZXNldCBwcm9jZXNzZXMgZG9uZS4gJWRcXG5cIiwgY250KTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRtZGVsYXkoMTApO1xuXHR9XG5gYGBcblxuSWYgdGhlIG1lbW9yeSdzIGJpdHMgZm9yIGB1bGRfbWFza2AgaGFwcGVuIHRvIGJlIHNldCBjb3JyZWN0bHksIGFnYWluLCBpdCB3aWxsIGJyZWFrLiBJdCdzIGltcHJvYmFibGUsIGJ1dCBub3QgaW1wb3NzaWJsZS5cblxuVGhlIGNhdmVhdCBoZXJlIGlzIHRoYXQgYEdMR0VOX1JTVEFUYCBhbmQgYEdMTlZNX1VMRGAgYXJlIGF0IGRpZmZlcmVudCBvZmZzZXRzLiBJZiBzeXprYWxsZXIgbWFwcyBhIG1lbW9yeSByZWdpb24gYW5kIGxvYWRzIGl0IHdpdGggcmFuZG9tIGJ5dGVzLCBpdCBtaWdodCAqYWNjaWRlbnRhbGx5KiBoYXZlIHRoZSByaWdodCBiaXRzIGluIHRoZSByaWdodCBwbGFjZXMuIEl0IGlzIHN0aWxsIGEgdmVyeSBpbXByb2JhYmxlIHBhdGguIEJ1dCwgZXZlbiBpZiBpdCBoYXBwZW5zLCB0aGVyZSBhcmUgbWFueSBvdGhlciBjaGVja3MgaW4gYGljZV9pbml0X2h3YC4gRm9yIGluc3RhbmNlLCBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgIHJlcXVpcmVzIHNldHRpbmcgdXAgcmluZ3MgYW5kIHdhaXRpbmcgZm9yIGhhcmR3YXJlIHRvIHVwZGF0ZSBoZWFkL3RhaWwgcG9pbnRlcnMgb3Igc3RhdHVzIGJpdHMuIExldCBtZSBnbyBjaGVjayBgaWNlX2NyZWF0ZV9hbGxfY3RybHFgXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMyNTcyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjQ1LjE1NzIxNzgwMVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODk4MTY3MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGljZV9jcmVhdGVfYWxsX2N0cmxxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaD04Nj1pbnQgaWNlX3Jlc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9yZXNldF9yZXEgcmVxKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oOjg3OmludCBpY2VfY3JlYXRlX2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04OC1pbnQgaWNlX2luaXRfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYz03ODY9c3RhdGljIHZvaWQgaWNlX2luaXRfY3RybHFfbG9ja3Moc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy04MDctICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jOjgwODppbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTgwOS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjQ1LjI0NzA0MDE0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NTgyOTczODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjozNDQ4MywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6NDguNzA1MzM5OTEzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbnRyb2xxLmNcIixcbiAgXCJGaXJzdExpbmVcIjogODA4LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODA4OlxcdGludCBpY2VfY3JlYXRlX2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gODA5OlxcdHtcXG4gODEwOlxcdFxcdGljZV9pbml0X2N0cmxxX2xvY2tzKFxcdTAwMjZody1cXHUwMDNlYWRtaW5xKTtcXG4gODExOlxcdFxcdGlmIChpY2VfaXNfc2JxX3N1cHBvcnRlZChodykpXFxuIDgxMjpcXHRcXHRcXHRpY2VfaW5pdF9jdHJscV9sb2NrcyhcXHUwMDI2aHctXFx1MDAzZXNicSk7XFxuIDgxMzpcXHRcXHRpY2VfaW5pdF9jdHJscV9sb2NrcyhcXHUwMDI2aHctXFx1MDAzZW1haWxib3hxKTtcXG4gODE0OlxcdFxcbiA4MTU6XFx0XFx0cmV0dXJuIGljZV9pbml0X2FsbF9jdHJscShodyk7XFxuIDgxNjpcXHR9XFxuIDgxNzpcXHRcXG4gODE4OlxcdC8qKlxcbiA4MTk6XFx0ICogaWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MgLSBEZXN0cm95IGxvY2tzIGZvciBhIGNvbnRyb2wgcXVldWVcXG4gODIwOlxcdCAqIEBjcTogcG9pbnRlciB0byB0aGUgY29udHJvbCBxdWV1ZVxcbiA4MjE6XFx0ICpcXG4gODIyOlxcdCAqIERlc3Ryb3lzIHRoZSBzZW5kIGFuZCByZWNlaXZlIHF1ZXVlIGxvY2tzIGZvciBhIGdpdmVuIGNvbnRyb2wgcXVldWUuXFxuIDgyMzpcXHQgKi9cXG4gODI0OlxcdHN0YXRpYyB2b2lkIGljZV9kZXN0cm95X2N0cmxxX2xvY2tzKHN0cnVjdCBpY2VfY3RsX3FfaW5mbyAqY3EpXFxuIDgyNTpcXHR7XFxuIDgyNjpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZjcS1cXHUwMDNlc3FfbG9jayk7XFxuIDgyNzpcXHRcXHRtdXRleF9kZXN0cm95KFxcdTAwMjZjcS1cXHUwMDNlcnFfbG9jayk7XFxuIDgyODpcXHR9XFxuIDgyOTpcXHRcXG4gODMwOlxcdC8qKlxcbiA4MzE6XFx0ICogaWNlX2Rlc3Ryb3lfYWxsX2N0cmxxIC0gZXhpdCByb3V0aW5lIGZvciBhbGwgY29udHJvbCBxdWV1ZXNcXG4gODMyOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuIDgzMzpcXHQgKlxcbiA4MzQ6XFx0ICogVGhpcyBmdW5jdGlvbiBzaHV0cyBkb3duIGFsbCB0aGUgY29udHJvbCBxdWV1ZXMgYW5kIHRoZW4gZGVzdHJveXMgdGhlXFxuIDgzNTpcXHQgKiBjb250cm9sIHF1ZXVlIGxvY2tzLiBJdCBzaG91bGQgYmUgY2FsbGVkIG9uY2UgZHVyaW5nIGRyaXZlciB1bmxvYWQuIFRoZVxcbiA4MzY6XFx0ICogZHJpdmVyIHNob3VsZCBjYWxsIGljZV9zaHV0ZG93bl9hbGxfY3RybHEgaWYgaXQgbmVlZHMgdG8gc2h1dCBkb3duIGFuZFxcbiA4Mzc6XFx0ICogcmVpbml0aWFsaXplIGNvbnRyb2wgcXVldWVzLCBzdWNoIGFzIGluIHJlc3BvbnNlIHRvIGEgcmVzZXQgZXZlbnQuXFxuIDgzODpcXHQgKi9cXG4gODM5OlxcdHZvaWQgaWNlX2Rlc3Ryb3lfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KVxcbiA4NDA6XFx0e1xcbiA4NDE6XFx0XFx0Lyogc2h1dCBkb3duIGFsbCB0aGUgY29udHJvbCBxdWV1ZXMgZmlyc3QgKi9cXG4gODQyOlxcdFxcdGljZV9zaHV0ZG93bl9hbGxfY3RybHEoaHcsIHRydWUpO1xcbiA4NDM6XFx0XFxuIDg0NDpcXHRcXHRpY2VfZGVzdHJveV9jdHJscV9sb2NrcyhcXHUwMDI2aHctXFx1MDAzZWFkbWlucSk7XFxuIDg0NTpcXHRcXHRpZiAoaWNlX2lzX3NicV9zdXBwb3J0ZWQoaHcpKVxcbiA4NDY6XFx0XFx0XFx0aWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MoXFx1MDAyNmh3LVxcdTAwM2VzYnEpO1xcbiA4NDc6XFx0XFx0aWNlX2Rlc3Ryb3lfY3RybHFfbG9ja3MoXFx1MDAyNmh3LVxcdTAwM2VtYWlsYm94cSk7XFxuIDg0ODpcXHR9XFxuIDg0OTpcXHRcXG4gODUwOlxcdC8qKlxcbiA4NTE6XFx0ICogaWNlX2NsZWFuX3NxIC0gY2xlYW5zIHNlbmQgc2lkZSBvZiBhIGNvbnRyb2wgcXVldWVcXG4gODUyOlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuIDg1MzpcXHQgKiBAY3E6IHBvaW50ZXIgdG8gdGhlIHNwZWNpZmljIENvbnRyb2wgcXVldWVcXG4gODU0OlxcdCAqXFxuIDg1NTpcXHQgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZnJlZSBkZXNjXFxuIDg1NjpcXHQgKi9cXG4gODU3OlxcdHN0YXRpYyB1MTYgaWNlX2NsZWFuX3NxKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo0OC43MDU3MTE0MTNaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc3Njc3NTI3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgSW52ZXN0aWdhdGlvbiBpbnRvIEljZSBJbml0aWFsaXphdGlvbioqXG5cbkFscmlnaHQsIHRoZSBkZWJ1Z2dpbmcgdHJhY2UgaGFzIGhpdCBgaWNlX2luaXRfYWxsX2N0cmxxYC4gVGhhdCdzIGEga2V5IGZ1bmN0aW9uLCBhcyB0aGUgbmFtaW5nIGNvbnZlbnRpb24gc3VnZ2VzdHMg4oCTIGxpa2VseSB0aGUgbWFzdGVyIGluaXRpYWxpemVyIGZvciB0aGUgKklDRSogKEkgYXNzdW1lIGl0J3MgcmVsYXRlZCB0byB0aGUgc3Vic3lzdGVtIEknbSB3b3JraW5nIHdpdGgpIGNvbnRyb2xsZXIgcXVldWVzLiBUaGlzIGNvdWxkIGJlIHdoZXJlIHRoZSBtYWluIHRocmVhZCBvciB0YXNrIHRoYXQgbWFuYWdlcyB0aGUgY29udHJvbCBmbG93IGlzIGluaXRpYWxpemVkLCBvciB3aGVyZSB2YXJpb3VzIGhhcmR3YXJlIHJlc291cmNlcyBhcmUgYnJvdWdodCBvbmxpbmUsIGFuZCB0aGUgY29udHJvbGxlcidzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGhlcmUgYmVjYXVzZSBkZXBlbmRpbmcgb24gd2hhdCBvY2N1cnMsIHRoZSBwcm9ibGVtIEknbSBpbnZlc3RpZ2F0aW5nIG1heSBsaWUgaW4gdGhlIGljZSBjb25maWd1cmF0aW9uLCBzeXN0ZW0gcmVzZXQsIG9yIGEgbWVtb3J5IG1hbmFnZW1lbnQgaXNzdWUuIFdoYXQgZm9sbG93cyB0aGlzIGZ1bmN0aW9uIGNhbGwgd2lsbCB0ZWxsIG1lIGhvdyBjcml0aWNhbCB0aGlzIHN0ZXAgaXMgdG8gdGhlIHJlc3Qgb2YgdGhlIGFwcGxpY2F0aW9uLiBJIHdpbGwgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdmFyaWFibGVzIGFyZSBiZWluZyBwYXNzZWQsIGFuZCB3aGF0IG1lbW9yeSBpcyBiZWluZyBhbGxvY2F0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1MzIyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo1Mi40ODI0ODk2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTUxNDAwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgaWNlX2luaXRfYWxsX2N0cmxxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaD04Nz1pbnQgaWNlX2NyZWF0ZV9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODg6aW50IGljZV9pbml0X2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04OS12b2lkIGljZV9zaHV0ZG93bl9hbGxfY3RybHEoc3RydWN0IGljZV9odyAqaHcsIGJvb2wgdW5sb2FkaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYz03MjE9dm9pZCBpY2Vfc2h1dGRvd25fYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBib29sIHVubG9hZGluZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy03NDQtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jOjc0NTppbnQgaWNlX2luaXRfYWxsX2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy03NDYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo1Mi41NTQwMTM3NDlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTg0ODI0NTE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjM1ODQ0LCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo1NC40MDIyNjIyMjNaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA3NDUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDU6XFx0aW50IGljZV9pbml0X2FsbF9jdHJscShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gNzQ2OlxcdHtcXG4gNzQ3OlxcdFxcdHUzMiByZXRyeSA9IDA7XFxuIDc0ODpcXHRcXHRpbnQgc3RhdHVzO1xcbiA3NDk6XFx0XFxuIDc1MDpcXHRcXHQvKiBJbml0IEZXIGFkbWluIHF1ZXVlICovXFxuIDc1MTpcXHRcXHRkbyB7XFxuIDc1MjpcXHRcXHRcXHRzdGF0dXMgPSBpY2VfaW5pdF9jdHJscShodywgSUNFX0NUTF9RX0FETUlOKTtcXG4gNzUzOlxcdFxcdFxcdGlmIChzdGF0dXMpXFxuIDc1NDpcXHRcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiA3NTU6XFx0XFxuIDc1NjpcXHRcXHRcXHRzdGF0dXMgPSBpY2VfaW5pdF9jaGVja19hZG1pbnEoaHcpO1xcbiA3NTc6XFx0XFx0XFx0aWYgKHN0YXR1cyAhPSAtRUlPKVxcbiA3NTg6XFx0XFx0XFx0XFx0YnJlYWs7XFxuIDc1OTpcXHRcXG4gNzYwOlxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19BUV9NU0csIFxcXCJSZXRyeSBBZG1pbiBRdWV1ZSBpbml0IGR1ZSB0byBGVyBjcml0aWNhbCBlcnJvclxcXFxuXFxcIik7XFxuIDc2MTpcXHRcXHRcXHRpY2Vfc2h1dGRvd25fY3RybHEoaHcsIElDRV9DVExfUV9BRE1JTiwgdHJ1ZSk7XFxuIDc2MjpcXHRcXHRcXHRtc2xlZXAoSUNFX0NUTF9RX0FETUlOX0lOSVRfTVNFQyk7XFxuIDc2MzpcXHRcXHR9IHdoaWxlIChyZXRyeSsrIFxcdTAwM2MgSUNFX0NUTF9RX0FETUlOX0lOSVRfVElNRU9VVCk7XFxuIDc2NDpcXHRcXG4gNzY1OlxcdFxcdGlmIChzdGF0dXMpXFxuIDc2NjpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiA3Njc6XFx0XFx0Lyogc2lkZWJhbmQgY29udHJvbCBxdWV1ZSAoU0JRKSBpbnRlcmZhY2UgaXMgbm90IHN1cHBvcnRlZCBvbiBzb21lXFxuIDc2ODpcXHRcXHQgKiBkZXZpY2VzLiBJbml0aWFsaXplIGlmIHN1cHBvcnRlZCwgZWxzZSBmYWxsYmFjayB0byB0aGUgYWRtaW4gcXVldWVcXG4gNzY5OlxcdFxcdCAqIGludGVyZmFjZVxcbiA3NzA6XFx0XFx0ICovXFxuIDc3MTpcXHRcXHRpZiAoaWNlX2lzX3NicV9zdXBwb3J0ZWQoaHcpKSB7XFxuIDc3MjpcXHRcXHRcXHRzdGF0dXMgPSBpY2VfaW5pdF9jdHJscShodywgSUNFX0NUTF9RX1NCKTtcXG4gNzczOlxcdFxcdFxcdGlmIChzdGF0dXMpXFxuIDc3NDpcXHRcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiA3NzU6XFx0XFx0fVxcbiA3NzY6XFx0XFx0LyogSW5pdCBNYWlsYm94IHF1ZXVlICovXFxuIDc3NzpcXHRcXHRyZXR1cm4gaWNlX2luaXRfY3RybHEoaHcsIElDRV9DVExfUV9NQUlMQk9YKTtcXG4gNzc4OlxcdH1cXG4gNzc5OlxcdFxcbiA3ODA6XFx0LyoqXFxuIDc4MTpcXHQgKiBpY2VfaW5pdF9jdHJscV9sb2NrcyAtIEluaXRpYWxpemUgbG9ja3MgZm9yIGEgY29udHJvbCBxdWV1ZVxcbiA3ODI6XFx0ICogQGNxOiBwb2ludGVyIHRvIHRoZSBjb250cm9sIHF1ZXVlXFxuIDc4MzpcXHQgKlxcbiA3ODQ6XFx0ICogSW5pdGlhbGl6ZXMgdGhlIHNlbmQgYW5kIHJlY2VpdmUgcXVldWUgbG9ja3MgZm9yIGEgZ2l2ZW4gY29udHJvbCBxdWV1ZS5cXG4gNzg1OlxcdCAqL1xcbiA3ODY6XFx0c3RhdGljIHZvaWQgaWNlX2luaXRfY3RybHFfbG9ja3Moc3RydWN0IGljZV9jdGxfcV9pbmZvICpjcSlcXG4gNzg3OlxcdHtcXG4gNzg4OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmNxLVxcdTAwM2VzcV9sb2NrKTtcXG4gNzg5OlxcdFxcdG11dGV4X2luaXQoXFx1MDAyNmNxLVxcdTAwM2VycV9sb2NrKTtcXG4gNzkwOlxcdH1cXG4gNzkxOlxcdFxcbiA3OTI6XFx0LyoqXFxuIDc5MzpcXHQgKiBpY2VfY3JlYXRlX2FsbF9jdHJscSAtIG1haW4gaW5pdGlhbGl6YXRpb24gcm91dGluZSBmb3IgYWxsIGNvbnRyb2wgcXVldWVzXFxuIDc5NDpcXHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNTo1NC40MDIzNzEyODNaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzEyNDk3NjI3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgYGljZV9pbml0X2N0cmxxYCoqXG5cbkFscmlnaHQsIHRoZSBmaXJzdCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGBpY2VfaW5pdF9jdHJscWAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgaW1tZWRpYXRlbHkgYmVnaW4gcnVubmluZyB0aHJvdWdoIG15IG1lbnRhbCBjaGVja2xpc3RzLiBJJ20gYXNzdW1pbmcgdGhpcyBpcyByZWxhdGVkIHRvIHNvbWV0aGluZyB3aXRoaW4gdGhlIGBpY2VgIGZyYW1ld29yaywgbGlrZWx5IGluaXRpYWxpemF0aW9uIG9yIGNvbnRyb2wgZnVuY3Rpb25zLiBUaGUgYGluaXRgIHN0cm9uZ2x5IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIHNldHVwIHBoYXNlIGZvciBhIHBhcnRpY3VsYXIgbW9kdWxlIG9yIGNvbXBvbmVudCwgYW5kIGBjdHJscWA/IFRoYXQgY291bGQgYmUgYSBjdXN0b20gbmFtZSBmb3IgYSBzcGVjaWZpYyBjb250cm9sIGdyb3VwIG9yIG1heWJlIGV2ZW4gc29tZSBzb3J0IG9mIFF1aWNrIGNvbW1hbmQgaW5pdGlhdGlvbi4gSSBuZWVkIHRvIGtub3cgd2hlcmUgSSdtIGdvaW5nIHRvIGxvb2sgdG8gdW5wYWNrIHRoaXMuIElzIHRoaXMgYSBzeXN0ZW0gc2VydmljZT8gT3IgaXMgaXQgcGFydCBvZiBhIHVzZXItbGFuZCBwcm9ncmFtPyBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHdoaWNoIGxpYnJhcmllcyBhcmUgbGlua2VkLCB3aGljaCBzeXN0ZW0gY29tcG9uZW50cyBhcmUgaW4gcGxheSBhbmQgd2hhdCB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgY29tcG9uZW50IGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjYzNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTZUMTQ6MTU6NTcuNTI3MzUwMzgzWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Nzc5ODAzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jPTU3MD1zdGF0aWMgaW50IGljZV9pbml0X2NoZWNrX2FkbWlucShzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29udHJvbHEuYy02MDUtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jOjYwNjpzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9jdGxfcSBxX3R5cGUpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jLTYwNy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjU3LjU5NTE1MzgwMloiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxODg2OTAwMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MzcwMzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjU5LjQ4MjA1NzkyNVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYwNixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDYwNjpcXHRzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9jdGxfcSBxX3R5cGUpXFxuIDYwNzpcXHR7XFxuIDYwODpcXHRcXHRzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxO1xcbiA2MDk6XFx0XFx0aW50IHJldF9jb2RlO1xcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHRzd2l0Y2ggKHFfdHlwZSkge1xcbiA2MTI6XFx0XFx0Y2FzZSBJQ0VfQ1RMX1FfQURNSU46XFxuIDYxMzpcXHRcXHRcXHRpY2VfYWRtaW5xX2luaXRfcmVncyhodyk7XFxuIDYxNDpcXHRcXHRcXHRjcSA9IFxcdTAwMjZody1cXHUwMDNlYWRtaW5xO1xcbiA2MTU6XFx0XFx0XFx0YnJlYWs7XFxuIDYxNjpcXHRcXHRjYXNlIElDRV9DVExfUV9TQjpcXG4gNjE3OlxcdFxcdFxcdGljZV9zYl9pbml0X3JlZ3MoaHcpO1xcbiA2MTg6XFx0XFx0XFx0Y3EgPSBcXHUwMDI2aHctXFx1MDAzZXNicTtcXG4gNjE5OlxcdFxcdFxcdGJyZWFrO1xcbiA2MjA6XFx0XFx0Y2FzZSBJQ0VfQ1RMX1FfTUFJTEJPWDpcXG4gNjIxOlxcdFxcdFxcdGljZV9tYWlsYm94X2luaXRfcmVncyhodyk7XFxuIDYyMjpcXHRcXHRcXHRjcSA9IFxcdTAwMjZody1cXHUwMDNlbWFpbGJveHE7XFxuIDYyMzpcXHRcXHRcXHRicmVhaztcXG4gNjI0OlxcdFxcdGRlZmF1bHQ6XFxuIDYyNTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gNjI2OlxcdFxcdH1cXG4gNjI3OlxcdFxcdGNxLVxcdTAwM2VxdHlwZSA9IHFfdHlwZTtcXG4gNjI4OlxcdFxcbiA2Mjk6XFx0XFx0LyogdmVyaWZ5IGlucHV0IGZvciB2YWxpZCBjb25maWd1cmF0aW9uICovXFxuIDYzMDpcXHRcXHRpZiAoIWNxLVxcdTAwM2VudW1fcnFfZW50cmllcyB8fCAhY3EtXFx1MDAzZW51bV9zcV9lbnRyaWVzIHx8XFxuIDYzMTpcXHRcXHQgICAgIWNxLVxcdTAwM2VycV9idWZfc2l6ZSB8fCAhY3EtXFx1MDAzZXNxX2J1Zl9zaXplKSB7XFxuIDYzMjpcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gNjMzOlxcdFxcdH1cXG4gNjM0OlxcdFxcbiA2MzU6XFx0XFx0LyogYWxsb2NhdGUgdGhlIEFUUSAqL1xcbiA2MzY6XFx0XFx0cmV0X2NvZGUgPSBpY2VfaW5pdF9zcShodywgY3EpO1xcbiA2Mzc6XFx0XFx0aWYgKHJldF9jb2RlKVxcbiA2Mzg6XFx0XFx0XFx0cmV0dXJuIHJldF9jb2RlO1xcbiA2Mzk6XFx0XFxuIDY0MDpcXHRcXHQvKiBhbGxvY2F0ZSB0aGUgQVJRICovXFxuIDY0MTpcXHRcXHRyZXRfY29kZSA9IGljZV9pbml0X3JxKGh3LCBjcSk7XFxuIDY0MjpcXHRcXHRpZiAocmV0X2NvZGUpXFxuIDY0MzpcXHRcXHRcXHRnb3RvIGluaXRfY3RybHFfZnJlZV9zcTtcXG4gNjQ0OlxcdFxcbiA2NDU6XFx0XFx0Lyogc3VjY2VzcyEgKi9cXG4gNjQ2OlxcdFxcdHJldHVybiAwO1xcbiA2NDc6XFx0XFxuIDY0ODpcXHRpbml0X2N0cmxxX2ZyZWVfc3E6XFxuIDY0OTpcXHRcXHRpY2Vfc2h1dGRvd25fc3EoaHcsIGNxKTtcXG4gNjUwOlxcdFxcdHJldHVybiByZXRfY29kZTtcXG4gNjUxOlxcdH1cXG4gNjUyOlxcdFxcbiA2NTM6XFx0LyoqXFxuIDY1NDpcXHQgKiBpY2VfaXNfc2JxX3N1cHBvcnRlZCAtIGlzIHRoZSBzaWRlYmFuZCBxdWV1ZSBzdXBwb3J0ZWRcXG4gNjU1OlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE1OjU5LjQ4MjE5MDQ0NVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjExNzA0MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIGBpY2VfaW5pdF9jaGVja19hZG1pbnFgKipcblxuQWxyaWdodCwgSSdtIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgaWNlX2luaXRfY2hlY2tfYWRtaW5xYCBmdW5jdGlvbi4gV2hhdCdzIGl0IGRvaW5nPyBCYXNlZCBvbiB0aGUgbmFtZSwgbXkgaW5pdGlhbCBhc3N1bXB0aW9uIGlzIHRoYXQgdGhpcyBjb2RlIGJsb2NrIGhhbmRsZXMgdGhlIGluaXRpYWxpemF0aW9uIG9yIHZlcmlmaWNhdGlvbiByZWxhdGVkIHRvIGFuIGFkbWluaXN0cmF0aXZlIHF1ZXVlIG9yIHBvc3NpYmx5IGEgZGF0YSBzdHJ1Y3R1cmUgaW52b2x2ZWQgaW4gYWRtaW4gdGFza3MuIFRoZSBcImljZVwiIHByZWZpeCBwcm9iYWJseSBpbmRpY2F0ZXMgdGhpcyBpcyBwYXJ0IG9mIGEgbGFyZ2VyIGNvbXBvbmVudCBvciBzdWJzeXN0ZW0sIHBlcmhhcHMgcmVsYXRlZCB0byB0aGUgSW50ZXJuZXQgQ29udHJvbCBFbmdpbmUgKElDRSksIHdoYXRldmVyIHRoYXQgZnJhbWV3b3JrIG1heSBiZS4gSSdsbCBuZWVkIHRvIGRpZyBkZWVwZXIgdG8gc2VlIGlmIG15IHByZWxpbWluYXJ5IGFzc3VtcHRpb25zIGFib3V0IHRoZSBjb250ZXh0IGFyZSBhY2N1cmF0ZS4gSSB3aWxsIG5lZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSBpdHNlbGYgdG8gdW5kZXJzdGFuZCB0aGUgZnVuY3Rpb27igJlzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gZXhwbG9yZSB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IGhhcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc3ODEsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE2VDE0OjE2OjAzLjY5Mzg5Njg3NFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM4OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb250cm9scS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU3MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDU3MDpcXHRzdGF0aWMgaW50IGljZV9pbml0X2NoZWNrX2FkbWlucShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gNTcxOlxcdHtcXG4gNTcyOlxcdFxcdHN0cnVjdCBpY2VfY3RsX3FfaW5mbyAqY3EgPSBcXHUwMDI2aHctXFx1MDAzZWFkbWlucTtcXG4gNTczOlxcdFxcdGludCBzdGF0dXM7XFxuIDU3NDpcXHRcXG4gNTc1OlxcdFxcdHN0YXR1cyA9IGljZV9hcV9nZXRfZndfdmVyKGh3LCBOVUxMKTtcXG4gNTc2OlxcdFxcdGlmIChzdGF0dXMpXFxuIDU3NzpcXHRcXHRcXHRnb3RvIGluaXRfY3RybHFfZnJlZV9ycTtcXG4gNTc4OlxcdFxcbiA1Nzk6XFx0XFx0aWYgKCFpY2VfYXFfdmVyX2NoZWNrKGh3KSkge1xcbiA1ODA6XFx0XFx0XFx0c3RhdHVzID0gLUVJTztcXG4gNTgxOlxcdFxcdFxcdGdvdG8gaW5pdF9jdHJscV9mcmVlX3JxO1xcbiA1ODI6XFx0XFx0fVxcbiA1ODM6XFx0XFxuIDU4NDpcXHRcXHRyZXR1cm4gMDtcXG4gNTg1OlxcdFxcbiA1ODY6XFx0aW5pdF9jdHJscV9mcmVlX3JxOlxcbiA1ODc6XFx0XFx0aWNlX3NodXRkb3duX3JxKGh3LCBjcSk7XFxuIDU4ODpcXHRcXHRpY2Vfc2h1dGRvd25fc3EoaHcsIGNxKTtcXG4gNTg5OlxcdFxcdHJldHVybiBzdGF0dXM7XFxuIDU5MDpcXHR9XFxuIDU5MTpcXHRcXG4gNTkyOlxcdC8qKlxcbiA1OTM6XFx0ICogaWNlX2luaXRfY3RybHEgLSBtYWluIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgZm9yIGFueSBjb250cm9sIFF1ZXVlXFxuIDU5NDpcXHQgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbiA1OTU6XFx0ICogQHFfdHlwZTogc3BlY2lmaWMgQ29udHJvbCBxdWV1ZSB0eXBlXFxuIDU5NjpcXHQgKlxcbiA1OTc6XFx0ICogUHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCB0aGUgZHJpdmVyICpNVVNUKiBzZXQgdGhlIGZvbGxvd2luZyBmaWVsZHNcXG4gNTk4OlxcdCAqIGluIHRoZSBjcS1cXHUwMDNlc3RydWN0dXJlOlxcbiA1OTk6XFx0ICogICAgIC0gY3EtXFx1MDAzZW51bV9zcV9lbnRyaWVzXFxuIDYwMDpcXHQgKiAgICAgLSBjcS1cXHUwMDNlbnVtX3JxX2VudHJpZXNcXG4gNjAxOlxcdCAqICAgICAtIGNxLVxcdTAwM2VycV9idWZfc2l6ZVxcbiA2MDI6XFx0ICogICAgIC0gY3EtXFx1MDAzZXNxX2J1Zl9zaXplXFxuIDYwMzpcXHQgKlxcbiA2MDQ6XFx0ICogTk9URTogdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBpbml0aWFsaXplIHRoZSBjb250cm9scSBsb2Nrc1xcbiA2MDU6XFx0ICovXFxuIDYwNjpcXHRzdGF0aWMgaW50IGljZV9pbml0X2N0cmxxKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9jdGxfcSBxX3R5cGUpXFxuIDYwNzpcXHR7XFxuIDYwODpcXHRcXHRzdHJ1Y3QgaWNlX2N0bF9xX2luZm8gKmNxO1xcbiA2MDk6XFx0XFx0aW50IHJldF9jb2RlO1xcbiA2MTA6XFx0XFxuIDYxMTpcXHRcXHRzd2l0Y2ggKHFfdHlwZSkge1xcbiA2MTI6XFx0XFx0Y2FzZSBJQ0VfQ1RMX1FfQURNSU46XFxuIDYxMzpcXHRcXHRcXHRpY2VfYWRtaW5xX2luaXRfcmVncyhodyk7XFxuIDYxNDpcXHRcXHRcXHRjcSA9IFxcdTAwMjZody1cXHUwMDNlYWRtaW5xO1xcbiA2MTU6XFx0XFx0XFx0YnJlYWs7XFxuIDYxNjpcXHRcXHRjYXNlIElDRV9DVExfUV9TQjpcXG4gNjE3OlxcdFxcdFxcdGljZV9zYl9pbml0X3JlZ3MoaHcpO1xcbiA2MTg6XFx0XFx0XFx0Y3EgPSBcXHUwMDI2aHctXFx1MDAzZXNicTtcXG4gNjE5OlxcdFxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNjowMy42OTQwMTIxMjRaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTE1ODA2MzY0MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KipcblxuT2theSwgc28gaGVyZSdzIHRoZSBicmVha2Rvd24gb2YgbXkgdGhpbmtpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgY29kZSBpcyAqZGVmaW5pdGVseSogdW5yZWFjaGFibGUgaW4gYSB0eXBpY2FsIGZ1enppbmcgZW52aXJvbm1lbnQuIFRoZSB3aG9sZSB0aGluZyBoaW5nZXMgb24gYSBzdWNjZXNzZnVsIHByb2JlIG9mIHRoZSBJbnRlbCBFODAwIHNlcmllcyBQQ0llIG5ldHdvcmsgY2FyZCwgYW5kIHRoYXQgcHJvYmUgcmVsaWVzIG9uIGEgZnVuY3Rpb25pbmcgZmlybXdhcmUgaW50ZXJhY3Rpb24sIHNwZWNpZmljYWxseSB0aHJvdWdoIHRoZSBBZG1pbiBRdWV1ZS5cblxuRmlyc3QsIEkgcmVhbGl6ZWQgdGhhdCBgaWNlX2FxX2dldF9md192ZXJgIGlzIHRoZSBzdGFydGluZyBwb2ludC4gSWYgdGhlcmUncyBubyBmaXJtd2FyZSwgaXQgdGltZXMgb3V0IG9yIGZhaWxzLiBUaGlzIGxlYWRzIHRvIGBpY2VfaW5pdF9jaGVja19hZG1pbnFgIGZhaWxpbmcsIHdoaWNoIGluIHR1cm4gY2F1c2VzIGBpY2VfaW5pdF9hbGxfY3RybHFgIHRvIHJldHJ5IGFuZCAqYWxzbyogZmFpbC4gQ29uc2VxdWVudGx5LCBgaWNlX2luaXRfaHdgIGFuZCB1bHRpbWF0ZWx5IGBpY2VfcHJvYmVgIGZhaWwsIHByZXZlbnRpbmcgdGhlIGRyaXZlciBmcm9tIGxvYWRpbmcgYW5kIHRoZSBEUExMIG5ldGxpbmsgaW50ZXJmYWNlIGZyb20gcmVnaXN0ZXJpbmcuIEJhc2ljYWxseSwgaXQncyBhIGNhc2NhZGluZyBmYWlsdXJlLiBTaW5jZSB0aGUgcHJvYmUgZG9lc24ndCB3b3JrLCB0aGUgZHJpdmVyIHdvbid0IGxvYWQgYW5kIG15IERQTEwgY29kZSBpcyBpbmFjY2Vzc2libGUuXG5cblRoZW4gSSBjb25zaWRlcmVkIHdoZXRoZXIgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgbWFnaWNhbGx5IG1vY2sgdGhlIEFkbWluIFF1ZXVlLiBJIGtub3cgc3l6a2FsbGVyIHByZXR0eSB3ZWxsLCBhbmQgSSBrbm93IGl0ICpkb2Vzbid0KiBoYXZlIGEgc3BlY2lmaWMgbW9jayBmb3IgSW50ZWwgSUNFIEFkbWluIFF1ZXVlLCBvbmx5IGdlbmVyaWMgUENJIGZ1enppbmcuIFRoYXQgYW1vdW50cyB0byByYW5kb20gbWVtb3J5IHdyaXRlcyBhbmQgaXQncyBhIGxvbmcgc2hvdCwgSSBtZWFuIGEgY29tcGxldGUgc2hvdCBpbiB0aGUgZGFyaywgYW5kIGltcG9zc2libGUgdG8gcmVsaWFibHkgc2ltdWxhdGUgdGhlIGNvbXBsZXggQWRtaW4gUXVldWUgcHJvdG9jb2wsIGluY2x1ZGluZyBzZXR0aW5nIHVwIGRlc2NyaXB0b3JzLCB1cGRhdGluZyBwb2ludGVycyBhbmQgd3JpdGluZyBjb3JyZWN0IHJlc3BvbnNlcy4gTm8gd2F5IHRoYXQgaXMgZ29pbmcgdG8gd29yay5cblxuTmV4dCBJIGRvdWJsZS1jaGVja2VkIGlmIHRoZXJlIHdhcyBzb21lIG90aGVyIGhpZGRlbiBwYXRoLiBJIGV4YW1pbmVkIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBpY2VfZHBsbF9zd19waW5fbm90aWZ5X3BlZXJgLCBgaWNlX2RwbGxfc3dfcGluc191cGRhdGVgLCBgaWNlX2RwbGxfc21hX2RpcmVjdGlvbl9zZXRgLCBgaWNlX2RwbGxfdWZsX3Bpbl9zdGF0ZV9zZXRgLCBgaWNlX2RwbGxfc21hX3Bpbl9zdGF0ZV9zZXRgLCBhbmQgYGljZV9kcGxsX2luaXRfaW5mb19zd19waW5zYC4gSSB0cmFjZWQgdGhlaXIgY2FsbHMuIFRoZXkncmUgYWxsIHN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIGBpY2VfZHBsbC5jYC4gVGhlIGNhbGxiYWNrcyBhcmUgYWxsIHJlZ2lzdGVyZWQgYW5kIGluaXRpYWxpemVkIHdpdGhpbiBgaWNlX2RwbGxfaW5pdF9pbmZvX3N3X3BpbnNgIG9yIHJlbGF0ZWQgZnVuY3Rpb25zIGNhbGxlZCBieSBgaWNlX2RwbGxfaW5pdGAuIEkgbG9va2VkIGJhY2sgYW5kIGNvbmZpcm1lZCB0aGF0IGBpY2VfZHBsbF9pbml0YCBpcyAqb25seSogY2FsbGVkIGlmIGBpY2VfcHJvYmVgIHN1Y2NlZWRlZCAtIGkuZS4sIHRoZSBkcml2ZXIgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkIGFuZCBwcm9iZWQgdGhlIGhhcmR3YXJlLiBHaXZlbiBteSBlYXJsaWVyIGNvbmNsdXNpb24sIHNpbmNlIHRoZSBkcml2ZXIgY2FuJ3QgaW5pdGlhbGl6ZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUgb3IgYSB2ZXJ5IHNvcGhpc3RpY2F0ZWQgZW11bGF0b3IgKHdoaWNoIGRvZXNuJ3QgZXhpc3QpLCB0aGlzIGNvZGUgaXMgYWxzbyB1bnJlYWNoYWJsZS5cblxuRmluYWxseSwgSSByZXZpZXdlZCB0aGUgcHJvbXB0J3MgaW5zdHJ1Y3Rpb25zOiBJIG5lZWQgdG8gZmxhZyBcIldvcnRoRnV6emluZz1mYWxzZVwiIGlmIHRoZXJlJ3Mgbm8gd2F5IHRvIHJlYWNoIHRoZSBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggaXMgZm9yIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIHRoYXQgKnJlcXVpcmVzKiBmaXJtd2FyZSBpbnRlcmFjdGlvbi4gVGhlcmUncyBubyBlZmZlY3RpdmUgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgZm9yIHRoaXM7IG5vdCBpbiBRRU1VLCBub3QgaW4gdGhlIGtlcm5lbC4gU28sIHRoZSBkcml2ZXIgZmFpbHMgdG8gcHJvYmUsIHRoZSBjb2RlIGlzIHVucmVhY2hhYmxlLiBTaW1wbGUuIFRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IFwiV29ydGhGdXp6aW5nXCIgc2hvdWxkIGJlIHNldCB0byAqZmFsc2UqLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODc2MCwiT3V0cHV0VG9rZW5zIjoxMjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNlQxNDoxNjoxNS4yNzQ2NTIxNTFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDUzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBEUExMIChEaWdpdGFsIFBoYXNlIExvY2tlZCBMb29wKSBwaW4gbWFuYWdlbWVudCBsb2dpYyBpbiB0aGUgSW50ZWwgSUNFIChFODAwIHNlcmllcykgZXRoZXJuZXQgZHJpdmVyLiBUaGlzIGRyaXZlciBpcyBmb3IgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBhbmQgcmVxdWlyZXMgY29tcGxleCBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgZGV2aWNlIGZpcm13YXJlIChlLmcuLCBBZG1pbiBRdWV1ZSkgdG8gc3VjY2Vzc2Z1bGx5IHByb2JlIGFuZCBpbml0aWFsaXplLiBTaW5jZSB0aGVyZSBpcyBubyBzb2Z0d2FyZSBlbXVsYXRvciBmb3IgdGhpcyBoYXJkd2FyZSBpbiBRRU1VIG9yIHRoZSBrZXJuZWwsIHRoZSBkcml2ZXIgd2lsbCBmYWlsIHRvIHByb2JlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgRFBMTCAoRGlnaXRhbCBQaGFzZSBMb2NrZWQgTG9vcCkgcGluIG1hbmFnZW1lbnQgbG9naWMgaW4gdGhlIEludGVsIElDRSAoRTgwMCBzZXJpZXMpIGV0aGVybmV0IGRyaXZlci4gVGhpcyBkcml2ZXIgaXMgZm9yIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgYW5kIHJlcXVpcmVzIGNvbXBsZXggaW50ZXJhY3Rpb25zIHdpdGggdGhlIGRldmljZSBmaXJtd2FyZSAoZS5nLiwgQWRtaW4gUXVldWUpIHRvIHN1Y2Nlc3NmdWxseSBwcm9iZSBhbmQgaW5pdGlhbGl6ZS4gU2luY2UgdGhlcmUgaXMgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIHRoaXMgaGFyZHdhcmUgaW4gUUVNVSBvciB0aGUga2VybmVsLCB0aGUgZHJpdmVyIHdpbGwgZmFpbCB0byBwcm9iZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyB1bnJlYWNoYWJsZSBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowc4mvl[1] Phase: Running StartedAt: 2026-07-16 14:16:27 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowc4mvl[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-16 14:16:27 +0000 UTC FinishedAt: 2026-07-16 14:16:44 +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,}