Name: series-workflowblv6t Phase: Failed StartedAt: 2026-07-03 11:53:40 +0000 UTC FinishedAt: 2026-07-03 12:16:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblv6t[0] Phase: Succeeded StartedAt: 2026-07-03 11:53:40 +0000 UTC FinishedAt: 2026-07-03 12:16:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblv6t[0].run-triage Phase: Succeeded StartedAt: 2026-07-03 11:53:40 +0000 UTC FinishedAt: 2026-07-03 12:16:22 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5WTSByZWFkIGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW92aW5nIE5WTSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIGluc2lkZSB0aGUgcmVhZCBsb29wIHRvIHByZXZlbnQgRlcgbG9jayB0aW1lb3V0cy4gVGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgaGFyZHdhcmUgQWRtaW4gUXVldWUgKEFRKSB0byBwcm9jZXNzIGNvbW1hbmRzLiBXaXRob3V0IHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlIG9yIGEgZnVsbCBzb2Z0d2FyZSBlbXVsYXRvciAod2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gUUVNVSksIHRoZSBBUSBjb21tYW5kcyB3aWxsIHNpbXBseSB0aW1lb3V0IGFuZCBmYWlsLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OTYxMGM4NzM4MjdmZDJkMzcyODE1YmRkMzUxYWQxY2QwZjBlYzQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAxMjoxNDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcbmluZGV4IDIyYjdkOGU2YmQ5ZThmLi43YzdmZTNkMmU5ZDk5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG5AQCAtMTg5MSwyNiAmIzQzOzE4OTEsMTUgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fc25hcHNob3Qoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fYmxrczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dTMyIHJlYWRfc3ogPSBtaW5fdCh1MzIsIElDRV9ERVZMSU5LX1JFQURfQkxLX1NJWkUsIGxlZnQpO1xuIFxuLVx0XHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4tXHRcdGlmIChzdGF0dXMpIHtcbi1cdFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7aWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRcdHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlXCYjMzQ7KTtcbi1cdFx0XHR2ZnJlZShudm1fZGF0YSk7XG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdH1cbi1cbiBcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGkgKiBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XG4gXHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7aWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkIGFmdGVyIHJlYWRpbmcgJXUgYnl0ZXMsIGVyciAlZCBhcV9lcnIgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRyZWFkX3N6LCBzdGF0dXMsIGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyk7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXCYjMzQ7KTtcbi1cdFx0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFx0XHRcdHZmcmVlKG52bV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0fVxuLVx0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFxuIFx0XHR0bXAgJiM0Mzs9IHJlYWRfc3o7XG4gXHRcdGxlZnQgLT0gcmVhZF9zejtcbkBAIC0xOTY2LDI0ICYjNDM7MTk1NSwxNCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChzdGF0dXMpIHtcbi1cdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O2ljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJWRcXG5cJiMzNDssXG4tXHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4gXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgKHUzMilvZmZzZXQsIFx1MDAyNnNpemUsIGRhdGEsXG4gXHRcdFx0XHQgICByZWFkX3NoYWRvd19yYW0pO1xuIFx0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7aWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkIGFmdGVyIHJlYWRpbmcgJXUgYnl0ZXMsIGVyciAlZCBhcV9lcnIgJWRcXG5cJiMzNDssXG4gXHRcdFx0c2l6ZSwgc3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBOVk0gY29udGVudHNcJiMzNDspO1xuLVx0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbi1cdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuaW5kZXggNDkzNzFiMDY1ODQ1ODIuLmRkZWNhMzlkODIyYmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5AQCAtODY5LDI0ICYjNDM7ODY5LDE1IEBAIGljZV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuIFx0aWYgKCFidWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmV0ID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xcblwmIzM0Oyxcbi1cdFx0XHRyZXQsIGxpYmllX2FxX3N0cihody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRyZXQgPSBpY2VfcmVhZF9mbGF0X252bShodywgZWVwcm9tLVx1MDAzZW9mZnNldCwgXHUwMDI2ZWVwcm9tLVx1MDAzZWxlbiwgYnVmLFxuIFx0XHRcdFx0ZmFsc2UpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVzXFxuXCYjMzQ7LFxuIFx0XHRcdHJldCwgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xuLVx0XHRnb3RvIHJlbGVhc2U7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdG1lbWNweShieXRlcywgYnVmLCBlZXByb20tXHUwMDNlbGVuKTtcbi1yZWxlYXNlOlxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBvdXQ6XG4gXHRrZnJlZShidWYpO1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xuaW5kZXggN2UxODdhODA0ZGZhMTYuLmNiMTU0MTg0NDI0MmJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xuQEAgLTU4LDYgJiM0Mzs1OCwxMSBAQCBpbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCxcbiAgKiBicmVha3MgcmVhZCByZXF1ZXN0cyBhY3Jvc3MgU2hhZG93IFJBTSBzZWN0b3JzIGFuZCBlbnN1cmVzIHRoYXQgbm8gc2luZ2xlXG4gICogcmVhZCByZXF1ZXN0IGV4Y2VlZHMgdGhlIG1heGltdW0gNEtCIHJlYWQgZm9yIGEgc2luZ2xlIEFkbWluUSBjb21tYW5kLlxuICAqXG4mIzQzOyAqIEZXIGNhcHMgdGhlIHJlYWQgbG9jayBhdCBhIG1heGltdW0gb2YgMzAwMG1zLCBzbyBhIHJlYWQgc3Bhbm5pbmcgbXVsdGlwbGVcbiYjNDM7ICogNEtCIHNlY3RvcnMgY2Fubm90IGJlIGRvbmUgdW5kZXIgYSBzaW5nbGUgbG9jayB3aXRob3V0IEZXIHJlY2xhaW1pbmcgaXRcbiYjNDM7ICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRXG4mIzQzOyAqIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLlxuJiM0MzsgKlxuICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmVcbiAgKiBwYXJ0aWFsbHkgdXBkYXRlZCBpZiBzb21lIHJlYWRzIHN1Y2NlZWQgYmVmb3JlIGEgZmFpbHVyZS5cbiAgKi9cbkBAIC02NSw2ICYjNDM7NzAsNyBAQCBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuIFx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKVxuIHtcbiYjNDM7XHRlbnVtIGxpYmllX2FxX2VyciBhcV9lcnI7XG4gXHR1MzIgaW5sZW4gPSAqbGVuZ3RoO1xuIFx0dTMyIGJ5dGVzX3JlYWQgPSAwO1xuIFx0Ym9vbCBsYXN0X2NtZDtcbkBAIC05MiwxMiAmIzQzOzk4LDI4IEBAIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsXG4gXG4gXHRcdGxhc3RfY21kID0gIShieXRlc19yZWFkICYjNDM7IHJlYWRfc2l6ZSBcdTAwM2MgaW5sZW4pO1xuIFxuJiM0MztcdFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuJiM0MztcdFx0aWYgKHN0YXR1cylcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRzdGF0dXMgPSBpY2VfYXFfcmVhZF9udm0oaHcsIElDRV9BUUNfTlZNX1NUQVJUX1BPSU5ULFxuIFx0XHRcdFx0XHQgb2Zmc2V0LCByZWFkX3NpemUsXG4gXHRcdFx0XHRcdCBkYXRhICYjNDM7IGJ5dGVzX3JlYWQsIGxhc3RfY21kLFxuIFx0XHRcdFx0XHQgcmVhZF9zaGFkb3dfcmFtLCBOVUxMKTtcbi1cdFx0aWYgKHN0YXR1cylcbiYjNDM7XHRcdGlmIChzdGF0dXMpIHtcbiYjNDM7XHRcdFx0LyogaWNlX3JlbGVhc2VfbnZtKCkgaXNzdWVzIGFuIEFRIGNvbW1hbmQgdGhhdCB3b3VsZFxuJiM0MztcdFx0XHQgKiBvdmVyd3JpdGUgc3FfbGFzdF9zdGF0dXMsIHdoaWNoIHNvbWUgY2FsbGVyc1xuJiM0MztcdFx0XHQgKiBpbnNwZWN0IGFmdGVyIGEgZmFpbGVkIHJlYWQuIFByZXNlcnZlIHRoZSByZWFkJiMzOTtzXG4mIzQzO1x0XHRcdCAqIEFRIGVycm9yIGFjcm9zcyB0aGUgcmVsZWFzZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGFxX2VyciA9IGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRcdGljZV9yZWxlYXNlX252bShodyk7XG4mIzQzO1x0XHRcdGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyA9IGFxX2VycjtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFxuIFx0XHRieXRlc19yZWFkICYjNDM7PSByZWFkX3NpemU7XG4gXHRcdG9mZnNldCAmIzQzOz0gcmVhZF9zaXplO1xuQEAgLTMzMCwxNCAmIzQzOzM1Miw4IEBAIGljZV9yZWFkX2ZsYXNoX21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTE2IG1vZHVsZSxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4tXHRpZiAoc3RhdHVzKVxuLVx0XHRyZXR1cm4gc3RhdHVzO1xuLVxuIFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICYjNDM7IG9mZnNldCwgXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSk7XG4gXG4tXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuLVxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG5AQCAtNDE5LDI0ICYjNDM7NDM1LDE5IEBAIGljZV9yZWFkX25ldGxpc3RfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MzIgb2Zmc2V0XG4gfVxuIFxuIC8qKlxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxuJiM0MzsgKiBpY2VfcmVhZF9zcl93b3JkIC0gUmVhZHMgU2hhZG93IFJBTSB3b3JkXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbiAgKiBAb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIFNoYWRvdyBSQU0gd29yZCB0byByZWFkICgweDAwMDAwMCAtIDB4MDAxRkZGKVxuICAqIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgU2hhZG93IFJBTVxuICAqXG4tICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgdGhlIGljZV9yZWFkX3NyX3dvcmRfYXEuXG4mIzQzOyAqIFJlYWRzIG9uZSAxNiBiaXQgd29yZCBmcm9tIHRoZSBTaGFkb3cgUkFNIHVzaW5nIGljZV9yZWFkX3NyX3dvcmRfYXEuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBOVk0gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgaW50ZXJuYWxseSBieSBpY2VfcmVhZF9mbGF0X252bSgpXG4mIzQzOyAqIGFyb3VuZCB0aGUgRlcgcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXG4gICovXG4gaW50IGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSlcbiB7XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKCFzdGF0dXMpIHtcbi1cdFx0c3RhdHVzID0gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTtcbi1cdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cdH1cbi1cbi1cdHJldHVybiBzdGF0dXM7XG4mIzQzO1x0cmV0dXJuIGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTg1NiwxMSAmIzQzOzg2Nyw3IEBAIGludCBpY2VfZ2V0X2luYWN0aXZlX25ldGxpc3RfdmVyKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX25ldGxpc3RfaW5mbyAqbmV0XG4gc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG4gXHR1MzIgbWluX3NpemUgPSAwLCBtYXhfc2l6ZSA9IElDRV9BUUNfTlZNX01BWF9PRkZTRVQgJiM0MzsgMTtcbi1cdGludCBzdGF0dXM7XG4tXG4tXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4tXHRpZiAoc3RhdHVzKVxuLVx0XHRyZXR1cm4gc3RhdHVzO1xuJiM0MztcdGludCBzdGF0dXMgPSAwO1xuIFxuIFx0d2hpbGUgKChtYXhfc2l6ZSAtIG1pbl9zaXplKSBcdTAwM2UgMSkge1xuIFx0XHR1MzIgb2Zmc2V0ID0gKG1heF9zaXplICYjNDM7IG1pbl9zaXplKSAvIDI7XG5AQCAtODgwLDcgJiM0Mzs4ODcsNyBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRcdG1pbl9zaXplID0gb2Zmc2V0O1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgKi9cbi1cdFx0XHRnb3RvIGVycl9yZWFkX2ZsYXRfbnZtO1xuJiM0MztcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODg4LDkgJiM0Mzs4OTUsNiBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFxuIFx0aHctXHUwMDNlZmxhc2guZmxhc2hfc2l6ZSA9IG1heF9zaXplO1xuIFxuLWVycl9yZWFkX2ZsYXRfbnZtOlxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5WTSByZWFkIGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW92aW5nIE5WTSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIGluc2lkZSB0aGUgcmVhZCBsb29wIHRvIHByZXZlbnQgRlcgbG9jayB0aW1lb3V0cy4gVGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgaGFyZHdhcmUgQWRtaW4gUXVldWUgKEFRKSB0byBwcm9jZXNzIGNvbW1hbmRzLiBXaXRob3V0IHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlIG9yIGEgZnVsbCBzb2Z0d2FyZSBlbXVsYXRvciAod2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gUUVNVSksIHRoZSBBUSBjb21tYW5kcyB3aWxsIHNpbXBseSB0aW1lb3V0IGFuZCBmYWlsLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5NjEwYzg3MzgyN2ZkMmQzNzI4MTViZGQzNTFhZDFjZDBmMGVjNDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDEyOjE0OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jCmluZGV4IDIyYjdkOGU2YmQ5ZThmLi43YzdmZTNkMmU5ZDk5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYwpAQCAtMTg5MSwyNiAmIzQzOzE4OTEsMTUgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fc25hcHNob3Qoc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiAJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9ibGtzOyBpJiM0MzsmIzQzOykgewogCQl1MzIgcmVhZF9zeiA9IG1pbl90KHUzMiwgSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSwgbGVmdCk7CiAKLQkJc3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZGJnKGRldiwgJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCQlzdGF0dXMsIGh3LSZndDthZG1pbnEuc3FfbGFzdF9zdGF0dXMpOwotCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlJiMzNDspOwotCQkJdmZyZWUobnZtX2RhdGEpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQogCQlzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgaSAqIElDRV9ERVZMSU5LX1JFQURfQkxLX1NJWkUsCiAJCQkJCSAgICZhbXA7cmVhZF9zeiwgdG1wLCByZWFkX3NoYWRvd19yYW0pOwogCQlpZiAoc3RhdHVzKSB7CiAJCQlkZXZfZGJnKGRldiwgJiMzNDtpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxuJiMzNDssCiAJCQkJcmVhZF9zeiwgc3RhdHVzLCBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTsKIAkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzJiMzNDspOwotCQkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAkJCXZmcmVlKG52bV9kYXRhKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWljZV9yZWxlYXNlX252bShodyk7CiAKIAkJdG1wICYjNDM7PSByZWFkX3N6OwogCQlsZWZ0IC09IHJlYWRfc3o7CkBAIC0xOTY2LDI0ICYjNDM7MTk1NSwxNCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLAogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKLQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZGJnKGRldiwgJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCXN0YXR1cywgaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyk7Ci0JCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZSYjMzQ7KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCiAJc3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCAmYW1wO3NpemUsIGRhdGEsCiAJCQkJICAgcmVhZF9zaGFkb3dfcmFtKTsKIAlpZiAoc3RhdHVzKSB7CiAJCWRldl9kYmcoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKIAkJCXNpemUsIHN0YXR1cywgaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyk7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzJiMzNDspOwotCQlpY2VfcmVsZWFzZV9udm0oaHcpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYwppbmRleCA0OTM3MWIwNjU4NDU4Mi4uZGRlY2EzOWQ4MjJiYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCkBAIC04NjksMjQgJiM0Mzs4NjksMTUgQEAgaWNlX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sCiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0ID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICYjMzQ7aWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xuJiMzNDssCi0JCQlyZXQsIGxpYmllX2FxX3N0cihody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXJldCA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBlZXByb20tJmd0O29mZnNldCwgJmFtcDtlZXByb20tJmd0O2xlbiwgYnVmLAogCQkJCWZhbHNlKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xuJiMzNDssCiAJCQlyZXQsIGxpYmllX2FxX3N0cihody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7Ci0JCWdvdG8gcmVsZWFzZTsKJiM0MzsJCWdvdG8gb3V0OwogCX0KIAogCW1lbWNweShieXRlcywgYnVmLCBlZXByb20tJmd0O2xlbik7Ci1yZWxlYXNlOgotCWljZV9yZWxlYXNlX252bShodyk7CiBvdXQ6CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMKaW5kZXggN2UxODdhODA0ZGZhMTYuLmNiMTU0MTg0NDI0MmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMKQEAgLTU4LDYgJiM0Mzs1OCwxMSBAQCBpbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCwKICAqIGJyZWFrcyByZWFkIHJlcXVlc3RzIGFjcm9zcyBTaGFkb3cgUkFNIHNlY3RvcnMgYW5kIGVuc3VyZXMgdGhhdCBubyBzaW5nbGUKICAqIHJlYWQgcmVxdWVzdCBleGNlZWRzIHRoZSBtYXhpbXVtIDRLQiByZWFkIGZvciBhIHNpbmdsZSBBZG1pblEgY29tbWFuZC4KICAqCiYjNDM7ICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZQomIzQzOyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0CiYjNDM7ICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRCiYjNDM7ICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuCiYjNDM7ICoKICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmUKICAqIHBhcnRpYWxseSB1cGRhdGVkIGlmIHNvbWUgcmVhZHMgc3VjY2VlZCBiZWZvcmUgYSBmYWlsdXJlLgogICovCkBAIC02NSw2ICYjNDM7NzAsNyBAQCBpbnQKIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsCiAJCSAgYm9vbCByZWFkX3NoYWRvd19yYW0pCiB7CiYjNDM7CWVudW0gbGliaWVfYXFfZXJyIGFxX2VycjsKIAl1MzIgaW5sZW4gPSAqbGVuZ3RoOwogCXUzMiBieXRlc19yZWFkID0gMDsKIAlib29sIGxhc3RfY21kOwpAQCAtOTIsMTIgJiM0Mzs5OCwyOCBAQCBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLAogCiAJCWxhc3RfY21kID0gIShieXRlc19yZWFkICYjNDM7IHJlYWRfc2l6ZSAmbHQ7IGlubGVuKTsKIAomIzQzOwkJc3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwomIzQzOwkJaWYgKHN0YXR1cykKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJc3RhdHVzID0gaWNlX2FxX3JlYWRfbnZtKGh3LCBJQ0VfQVFDX05WTV9TVEFSVF9QT0lOVCwKIAkJCQkJIG9mZnNldCwgcmVhZF9zaXplLAogCQkJCQkgZGF0YSAmIzQzOyBieXRlc19yZWFkLCBsYXN0X2NtZCwKIAkJCQkJIHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7Ci0JCWlmIChzdGF0dXMpCiYjNDM7CQlpZiAoc3RhdHVzKSB7CiYjNDM7CQkJLyogaWNlX3JlbGVhc2VfbnZtKCkgaXNzdWVzIGFuIEFRIGNvbW1hbmQgdGhhdCB3b3VsZAomIzQzOwkJCSAqIG92ZXJ3cml0ZSBzcV9sYXN0X3N0YXR1cywgd2hpY2ggc29tZSBjYWxsZXJzCiYjNDM7CQkJICogaW5zcGVjdCBhZnRlciBhIGZhaWxlZCByZWFkLiBQcmVzZXJ2ZSB0aGUgcmVhZCYjMzk7cwomIzQzOwkJCSAqIEFRIGVycm9yIGFjcm9zcyB0aGUgcmVsZWFzZS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlhcV9lcnIgPSBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzOwomIzQzOwomIzQzOwkJCWljZV9yZWxlYXNlX252bShodyk7CiYjNDM7CQkJaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyA9IGFxX2VycjsKIAkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAogCQlieXRlc19yZWFkICYjNDM7PSByZWFkX3NpemU7CiAJCW9mZnNldCAmIzQzOz0gcmVhZF9zaXplOwpAQCAtMzMwLDE0ICYjNDM7MzUyLDggQEAgaWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKLQogCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCAmIzQzOyBvZmZzZXQsICZhbXA7bGVuZ3RoLCBkYXRhLCBmYWxzZSk7CiAKLQlpY2VfcmVsZWFzZV9udm0oaHcpOwotCiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDE5LDI0ICYjNDM7NDM1LDE5IEBAIGljZV9yZWFkX25ldGxpc3RfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MzIgb2Zmc2V0CiB9CiAKIC8qKgotICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZCBhbmQgYWNxdWlyZSBOVk0gaWYgbmVjZXNzYXJ5CiYjNDM7ICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZAogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpCiAgKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU0KICAqCi0gKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyB0aGUgaWNlX3JlYWRfc3Jfd29yZF9hcS4KJiM0MzsgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9zcl93b3JkX2FxLgomIzQzOyAqCiYjNDM7ICogVGhlIE5WTSBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBpbnRlcm5hbGx5IGJ5IGljZV9yZWFkX2ZsYXRfbnZtKCkKJiM0MzsgKiBhcm91bmQgdGhlIEZXIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLgogICovCiBpbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKQogewotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTsKLQkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwomIzQzOwlyZXR1cm4gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTsKIH0KIAogLyoqCkBAIC04NTYsMTEgJiM0Mzs4NjcsNyBAQCBpbnQgaWNlX2dldF9pbmFjdGl2ZV9uZXRsaXN0X3ZlcihzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9uZXRsaXN0X2luZm8gKm5ldAogc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodykKIHsKIAl1MzIgbWluX3NpemUgPSAwLCBtYXhfc2l6ZSA9IElDRV9BUUNfTlZNX01BWF9PRkZTRVQgJiM0MzsgMTsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CiYjNDM7CWludCBzdGF0dXMgPSAwOwogCiAJd2hpbGUgKChtYXhfc2l6ZSAtIG1pbl9zaXplKSAmZ3Q7IDEpIHsKIAkJdTMyIG9mZnNldCA9IChtYXhfc2l6ZSAmIzQzOyBtaW5fc2l6ZSkgLyAyOwpAQCAtODgwLDcgJiM0Mzs4ODcsNyBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KQogCQkJbWluX3NpemUgPSBvZmZzZXQ7CiAJCX0gZWxzZSB7CiAJCQkvKiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkICovCi0JCQlnb3RvIGVycl9yZWFkX2ZsYXRfbnZtOwomIzQzOwkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAl9CiAKQEAgLTg4OCw5ICYjNDM7ODk1LDYgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodykKIAogCWh3LSZndDtmbGFzaC5mbGFzaF9zaXplID0gbWF4X3NpemU7CiAKLWVycl9yZWFkX2ZsYXRfbnZtOgotCWljZV9yZWxlYXNlX252bShodyk7Ci0KIAlyZXR1cm4gc3RhdHVzOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBJbnRlbCBJQ0UgRHJpdmVyJiMzOTtzIE5WTSBSZWFkIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBJbnRlbCBJQ0UgKEV0aGVybmV0KSBkcml2ZXIuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0byBob3cgTlZNIHJlYWRzIGFyZSBoYW5kbGVkLCBtb3ZpbmcgdGhlIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZSBhcm91bmQgZWFjaCBBZG1pbiBRdWV1ZSAoQVEpIHJlYWQgd2l0aGluIGBpY2VfcmVhZF9mbGF0X252bWAuIFRoaXMgaXMgZHJpdmVuIGJ5IGZpcm13YXJlIGxpbWl0YXRpb25zIG9uIHJlYWQgbG9jayBkdXJhdGlvbi4KCk15IHByaW1hcnkgY29uY2VybiBpcyByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBkcml2ZXIsIHRoZSBJbnRlbCBJQ0UsIGlzIHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUg4oCTIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgYWRhcHRlcnMuIFN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLCBsaWtlIFFFTVUgb3IgR0NFLCB0eXBpY2FsbHkgd291bGRuJiMzOTt0IGV4cG9zZSB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBvciBQQ0kgcGFzc3Rocm91Z2guIEFuZCBJIGFscmVhZHkga25vdyB0aGF0IFFFTVUgZG9lc24mIzM5O3QgaGF2ZSBhbiBlbXVsYXRvciBmb3IgSUNFOyBpdCBoYXMgb3RoZXIgbmV0d29yayBhZGFwdGVycywgYnV0IG5vdCB0aGlzIG9uZS4gSSBicmllZmx5IGNoZWNrZWQgaWYgU3l6a2FsbGVyIG9mZmVycyBhbnkgc2ltaWxhciBlbXVsYXRpb24sIGJ1dCBpdCBmb2N1c2VzIG9uIFVTQiwgV2lGaSwgb3IgRFJNIGVtdWxhdGlvbi4gTm90aGluZyBmb3IgSUNFLgoKSSBoYXZlIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBgaWNlYCBkcml2ZXIgY2FuIGJlIHByb2JlZCB3aXRob3V0IHRoZSBoYXJkd2FyZS4gUENJIGRyaXZlcnMgcmVxdWlyZSBhIFBDSSBJRCBtYXRjaCwgd2hpY2ggbWVhbnMgYSB2aXJ0dWFsIFBDSSBkZXZpY2Ugd291bGQgYmUgbmVlZGVkLiBTeXprYWxsZXIgaGFzIHV0aWxpdGllcyBsaWtlIGBzeXpfcGNpX2Nvbm5lY3RgLCBidXQgSSBrbm93IGl0JiMzOTtzIG5vdCBhIGZ1bGwtYmxvd24gUENJIGVtdWxhdG9yIGNhcGFibGUgb2YgaGFuZGxpbmcgYSBjb21wbGV4IGRyaXZlciBsaWtlIElDRS4gU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGlzIHZlcnkgbGltaXRlZC4gSXQgbGlrZWx5IHdvbiYjMzk7dCBnZXQgZmFyIGVub3VnaCB0byBleGVjdXRlIHRoZSBjb2RlIGluIGBpY2VfcmVhZF9mbGF0X252bWAsIHdoaWNoIG5lZWRzIHRoZSBBZG1pbiBRdWV1ZSAoQVEpIHRvIGZ1bmN0aW9uLiBUaGUgQVEsIGluIHR1cm4sIHJlcXVpcmVzIERNQSByaW5ncyBhbmQgaGFyZHdhcmUtbGlrZSBwcm9jZXNzaW5nIG9mIGRlc2NyaXB0b3JzLCB3aGljaCBhIGR1bW15IFBDSSBkZXZpY2Ugd29uJiMzOTt0IGRvLiBgaWNlX2FxX3JlYWRfbnZtYCB3b3VsZCB0aW1lb3V0IG9yIGZhaWwgaW1tZWRpYXRlbHkuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGBpY2VfcmVhZF9mbGF0X252bWAgY2FuIGJlIHJlYWNoZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGRldmxpbmsgYW5kIGV0aHRvb2wgaW50ZXJmYWNlcy4gYGljZV9kZXZsaW5rX252bV9zbmFwc2hvdGAsIGBpY2VfZGV2bGlua19udm1fcmVhZGAsIGFuZCBgaWNlX2dldF9lZXByb21gIGFyZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aG9zZSBhcmUgb25seSBhY2Nlc3NpYmxlIGlmIHRoZSBuZXRkZXYvZGV2bGluayBkZXZpY2UgaXMgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHkuIFRoaXMgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBvZiBgaWNlX3Byb2JlYC4gQW5kIGBpY2VfcHJvYmVgIG5lZWRzIHRoZSBoYXJkd2FyZSB0byBiZSBpbml0aWFsaXplZCAoYGljZV9pbml0X2h3YCkuIFRoYXQgaW5pdGlhbGl6YXRpb24gc2V0cyB1cCB0aGUgQWRtaW4gUXVldWUuIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCByZXNwb25kIHRvIEFRIGNvbW1hbmRzLCBgaWNlX2luaXRfaHdgIGZhaWxzLCBhbmQgdGhlIGRyaXZlciB3b24mIzM5O3QgcHJvYmUuIFdpdGhvdXQgYSByZWFsIGRldmljZSBvciBhIGNvbXBsZXRlIGVtdWxhdG9yLCB0aGUgZHJpdmVyIHdvbiYjMzk7dCBwcm9iZSwgYW5kIHRob3NlIG5ldGRldi9kZXZsaW5rIGludGVyZmFjZXMgd29uJiMzOTt0IGV4aXN0LgoKU28sIHJlYWxpc3RpY2FsbHksIGBpY2VfcmVhZF9mbGF0X252bWAgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIHNwZWNpZmljIGhhcmR3YXJlLgoKSSYjMzk7bGwgY29uZmlybSB0aGlzIGJ5IGxvb2tpbmcgYXQgYGljZV9wcm9iZWAgdXNpbmcgYGdyZXBwZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTExNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxMTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTQ4OiAqIGljZV9wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ5LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE1NTppY2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIzOS1cdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjQwOlx0XHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI0MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODM5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4NDEtXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4NDI6XHQucHJvYmUgPSBpY2VfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODQzLVx0LnJlbW92ZSA9IGljZV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBvciBkZWJ1Z2dpbmcsIGFuZCB3cml0aW5nIGl0IGFzIHRob3VnaCBpdCB3ZXJlIG15IG93biBzdHJlYW0gb2YgY29uc2Npb3VzbmVzczoKCioqRGl2aW5nIERlZXAgaW50byB0aGUgUHJvYmUgU2VxdWVuY2UqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGluIGBpY2VfcHJvYmVgLiBUaGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtyZSBzdXBwb3NlZCB0byBiZSBjaGVja2luZyB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24sIHJpZ2h0PyBNYWtlcyBzZW5zZS4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGZpcnN0IHN0ZXAgd2hlbiB0aGluZ3MgZ28gd3JvbmcsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBpY2VfaW5pdF9od2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBJZiB0aGlzIHByb2JlIGZhaWxzIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGBpY2VfaW5pdF9od2AgZnVuY3Rpb24gZm9yIGVycm9ycy4gR290dGEgZW5zdXJlIHdlJiMzOTtyZSBnZXR0aW5nIHRob3NlIGNydWNpYWwgaGFyZHdhcmUgY29tcG9uZW50cyB1cCBhbmQgcnVubmluZyBjb3JyZWN0bHkuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyB3aGVyZSB0aGUgcm9vdCBjYXVzZSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9pbml0X2h3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTIzNT1zdGF0aWMgaW50IGljZV9kZXZsaW5rX3JlaW5pdF91cChzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMjQyOlx0ZXJyID0gaWNlX2luaXRfaHcoXHUwMDI2cGYtXHUwMDNlaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEyNDMtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI0NDpcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ljZV9pbml0X2h3IGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0NS1cdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTk2MD1zdGF0aWMgaW50IF9fZndsb2dfaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg0OiAqIGljZV9pbml0X2h3IC0gbWFpbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4NS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjk4NzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI0LVx0XHRnb3RvIGVycl91bnJvbGxfZmx0cl9tZ210X3N0cnVjdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTEyNTpcdHN0YXR1cyA9IGljZV9pbml0X2h3X3RibHMoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI2LVx0aWYgKHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTExNTY9c3RhdGljIHZvaWQgX19md2xvZ19kZWluaXQoc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTY2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTY3OiAqIGljZV9kZWluaXRfaHcgLSB1bnJvbGwgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucyBkb25lIGJ5IGljZV9pbml0X2h3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNjgtICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNzAtICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgZHVyaW5nIG5vbWluYWwgb3BlcmF0aW9uLCBub3QgYXMgYSByZXN1bHQgb2ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE3MTogKiBpY2VfaW5pdF9odygpIGZhaWxpbmcgc2luY2UgaWNlX2luaXRfaHcoKSB3aWxsIHRha2UgY2FyZSBvZiB1bnJvbGxpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3Mi0gKiBhcHBsaWNhYmxlIGluaXRpYWxpemF0aW9ucyBpZiBpdCBmYWlscyBmb3IgYW55IHJlYXNvbi5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaDo4MzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04NC12b2lkIGljZV9kZWluaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM9MjM4OD1pbnQgaWNlX2NmZ190eF90b3BvKHN0cnVjdCBpY2VfaHcgKmh3LCBjb25zdCB2b2lkICpidWYsIHUzMiBsZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0yNTQwLVx0aWNlX2RlaW5pdF9odyhodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jOjI1NDE6XHRpZiAoaWNlX2luaXRfaHcoaHcpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1NDItXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcJiMzNDtGYWlsZWQgdG8gcmUtaW5pdCBoYXJkd2FyZSBhZnRlciBzZXR0aW5nIFR4IHRvcG9sb2d5XFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTIxNTQ9dm9pZCBpY2VfY2xlYXJfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jOjIxOTg6ICogaWNlX2luaXRfaHdfdGJscyAtIGluaXQgaGFyZHdhcmUgdGFibGUgbWVtb3J5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTktICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjIwMTppbnQgaWNlX2luaXRfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaD01OD1ib29sIGljZV9pc19pbml0X3BrZ19zdWNjZXNzZnVsKGVudW0gaWNlX2RkcF9zdGF0ZSBzdGF0ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oOjU5OmludCBpY2VfaW5pdF9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmgtNjAtdm9pZCBpY2VfZnJlZV9zZWcoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTU9aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MjpcdGVyciA9IGljZV9pbml0X2h3KGh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDMtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjQ0Olx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2luaXRfaHcgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDUtXHRcdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYz02OD11MzIgaWNlX2NvbnZfbGlua19zcGVlZF90b192aXJ0Y2hubChib29sIGFkdl9saW5rX3N1cHBvcnQsIHUxNiBsaW5rX3NwZWVkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmMtODktICogMS4gVGhlIG1haWxib3ggc25hcHNob3Qgc3RydWN0dXJlLCBpY2VfbWJ4X3NuYXBzaG90LCBpcyBpbml0aWFsaXplZCBkdXJpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmM6OTA6ICogZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIGljZV9pbml0X2h3KCkgdXNpbmcgaWNlX21ieF9pbml0X3NuYXBzaG90KCkuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX21ieC5jLTkxLSAqIFRoZSBzdHJ1Y3QgaWNlX21ieF9zbmFwc2hvdCBoZWxwcyB0byB0cmFjayBhbmQgdHJhdmVyc2UgYSBzdGF0aWMgd2luZG93IG9mXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSW5pdGlhbGl6YXRpb24gRmxvdyBvZiB0aGUgSW50ZWwgSWNlIERyaXZlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgZHJpdmVyIHN0YXJ0cyB1cCB3aXRoIGBpY2VfcHJvYmVgLiBBbmQgSSByZWNhbGwgdGhhdCBgaWNlX2luaXRfaHdgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHdpdGhpbiB0aGF0IGBpY2VfcHJvYmVgIHJvdXRpbmUuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8ganVtcCBkaXJlY3RseSBpbnRvIHRoZSBzb3VyY2UgY29kZSBmb3IgYGljZV9pbml0X2h3YCBpdHNlbGYsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsIHRvIGdldCBhIGdyaXAgb24gdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgSW50ZWwgSWNlIGRyaXZlci4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcyBhbmQgcG90ZW50aWFsIGVhcmx5IGNvbmZpZ3VyYXRpb24gc3RlcHMuIEtub3dpbmcgYGljZV9pbml0X2h3YCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBwcm9iZSBnaXZlcyBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBhbmQgbWFrZXMgaXQgb2J2aW91cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgZGVidWdnaW5nIGlmIGlzc3VlcyBhcmUgcmVwb3J0ZWQgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2luaXRfaHcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9OTYwPXN0YXRpYyBpbnQgX19md2xvZ19pbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTgzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzo5ODQ6ICogaWNlX2luaXRfaHcgLSBtYWluIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTg1LSAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4Ni0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg3OmludCBpY2VfaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTg4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjQtXHRcdGdvdG8gZXJyX3Vucm9sbF9mbHRyX21nbXRfc3RydWN0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTI1Olx0c3RhdHVzID0gaWNlX2luaXRfaHdfdGJscyhodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjYtXHRpZiAoc3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MTE1Nj1zdGF0aWMgdm9pZCBfX2Z3bG9nX2RlaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNjYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjExNjc6ICogaWNlX2RlaW5pdF9odyAtIHVucm9sbCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zIGRvbmUgYnkgaWNlX2luaXRfaHdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE2OC0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3MC0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb25seSBkdXJpbmcgbm9taW5hbCBvcGVyYXRpb24sIG5vdCBhcyBhIHJlc3VsdCBvZlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTcxOiAqIGljZV9pbml0X2h3KCkgZmFpbGluZyBzaW5jZSBpY2VfaW5pdF9odygpIHdpbGwgdGFrZSBjYXJlIG9mIHVucm9sbGluZ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTcyLSAqIGFwcGxpY2FibGUgaW5pdGlhbGl6YXRpb25zIGlmIGl0IGZhaWxzIGZvciBhbnkgcmVhc29uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBIYXJkd2FyZSBJbml0aWFsaXphdGlvbiBUaG91Z2h0cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgaWNlX2luaXRfaHdgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgbmFtZSwgc28gbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1RoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIG5pdHR5LWdyaXR0eSBvZiBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUuJiMzNDsgSSBrbm93IHRoaXMgbGlrZWx5IGludm9sdmVzIGEgY2hhaW4gb2YgZXZlbnRzLCBtYXliZSBzdGFydGluZyB3aXRoIHBvd2VyLW9uIHNlcXVlbmNpbmcsIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGVuIG1vdmluZyBpbnRvIHNldHRpbmcgdXAgdGhlIG1lbW9yeSBjb250cm9sbGVycyBhbmQgcG9zc2libHkgYW55IGZ1bmRhbWVudGFsIHBlcmlwaGVyYWwgaW50ZXJmYWNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZXkgaGFuZGxlIHRoaW5ncyBsaWtlIHJlc2V0IGFzc2VydGlvbiBhbmQgZGUtYXNzZXJ0aW9uIGZvciB0aGUgdmFyaW91cyBJUCBibG9ja3MuIFRoZSBhcmNoaXRlY3R1cmUgaW4gdXNlIHdpbGwgc3Ryb25nbHkgaW5mb3JtIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGlzIGFwcHJvYWNoZWQuIElzIGl0IGEgaGllcmFyY2hpY2FsIGRlc2lnbj8gQSBtb25vbGl0aGljIGFwcHJvYWNoPyBJJiMzOTtsbCBiZSB3YXRjaGluZyB0byBzZWUgaG93IHRoZXkgaXNvbGF0ZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCB0b28sIGhvcGVmdWxseSwgaXTigJlzIGRvbmUgaW4gYSBjbGVhbiwgbWFpbnRhaW5hYmxlIHdheSB0aGF0IHVzZXMgYWJzdHJhY3Rpb24gbGF5ZXJzLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGxvdy1sZXZlbCByZWdpc3RlciB3cml0ZXMgYW5kIHJlYWRiYWNrcyB0aGF0IGFyZSBjcml0aWNhbCB0byBicmluZ2luZyB0aGUgaGFyZHdhcmUgdG8gYSBzdGFibGUgc3RhdGUuIEZyb20gaGVyZSwgdGhlIHJlYWwgaW50ZXJlc3Rpbmcgc3R1ZmYgYmVnaW5zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODc6XHRpbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXG4gOTg4Olx0e1xuIDk4OTpcdFx0c3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKnBjYXBzIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIDk5MDpcdFx0dm9pZCAqbWFjX2J1ZiBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiA5OTE6XHRcdHUxNiBtYWNfYnVmX2xlbjtcbiA5OTI6XHRcdGludCBzdGF0dXM7XG4gOTkzOlx0XG4gOTk0Olx0XHQvKiBTZXQgTUFDIHR5cGUgYmFzZWQgb24gRGV2aWNlSUQgKi9cbiA5OTU6XHRcdHN0YXR1cyA9IGljZV9zZXRfbWFjX3R5cGUoaHcpO1xuIDk5NjpcdFx0aWYgKHN0YXR1cylcbiA5OTc6XHRcdFx0cmV0dXJuIHN0YXR1cztcbiA5OTg6XHRcbiA5OTk6XHRcdGh3LVx1MDAzZXBmX2lkID0gRklFTERfR0VUKFBGX0ZVTkNfUklEX0ZVTkNfTlVNX00sIHJkMzIoaHcsIFBGX0ZVTkNfUklEKSk7XG4xMDAwOlx0XG4xMDAxOlx0XHRzdGF0dXMgPSBpY2VfcmVzZXQoaHcsIElDRV9SRVNFVF9QRlIpO1xuMTAwMjpcdFx0aWYgKHN0YXR1cylcbjEwMDM6XHRcdFx0cmV0dXJuIHN0YXR1cztcbjEwMDQ6XHRcbjEwMDU6XHRcdGljZV9nZXRfaXRyX2ludHJsX2dyYW4oaHcpO1xuMTAwNjpcdFxuMTAwNzpcdFx0c3RhdHVzID0gaWNlX2NyZWF0ZV9hbGxfY3RybHEoaHcpO1xuMTAwODpcdFx0aWYgKHN0YXR1cylcbjEwMDk6XHRcdFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcbjEwMTA6XHRcbjEwMTE6XHRcdHN0YXR1cyA9IF9fZndsb2dfaW5pdChodyk7XG4xMDEyOlx0XHRpZiAoc3RhdHVzKVxuMTAxMzpcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfRldfTE9HLCBcJiMzNDtFcnJvciBpbml0aWFsaXppbmcgRlcgbG9nZ2luZzogJWRcXG5cJiMzNDssXG4xMDE0Olx0XHRcdFx0ICBzdGF0dXMpO1xuMTAxNTpcdFxuMTAxNjpcdFx0c3RhdHVzID0gaWNlX2NsZWFyX3BmX2NmZyhodyk7XG4xMDE3Olx0XHRpZiAoc3RhdHVzKVxuMTAxODpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTAxOTpcdFxuMTAyMDpcdFx0LyogU2V0IGJpdCB0byBlbmFibGUgRmxvdyBEaXJlY3RvciBmaWx0ZXJzICovXG4xMDIxOlx0XHR3cjMyKGh3LCBQRlFGX0ZEX0VOQSwgUEZRRl9GRF9FTkFfRkRfRU5BX00pO1xuMTAyMjpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aHctXHUwMDNlZmRpcl9saXN0X2hlYWQpO1xuMTAyMzpcdFxuMTAyNDpcdFx0aWNlX2NsZWFyX3B4ZV9tb2RlKGh3KTtcbjEwMjU6XHRcbjEwMjY6XHRcdHN0YXR1cyA9IGljZV9pbml0X252bShodyk7XG4xMDI3Olx0XHRpZiAoc3RhdHVzKVxuMTAyODpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTAyOTpcdFxuMTAzMDpcdFx0c3RhdHVzID0gaWNlX2dldF9jYXBzKGh3KTtcbjEwMzE6XHRcdGlmIChzdGF0dXMpXG4xMDMyOlx0XHRcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XG4xMDMzOlx0XG4xMDM0Olx0XHRpZiAoIWh3LVx1MDAzZXBvcnRfaW5mbylcbjEwMzU6XHRcdFx0aHctXHUwMDNlcG9ydF9pbmZvID0gZGV2bV9remFsbG9jKGljZV9od190b19kZXYoaHcpLFxuMTAzNjpcdFx0XHRcdFx0XHQgICAgIHNpemVvZigqaHctXHUwMDNlcG9ydF9pbmZvKSxcbjEwMzc6XHRcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbjEwMzg6XHRcdGlmICghaHctXHUwMDNlcG9ydF9pbmZvKSB7XG4xMDM5Olx0XHRcdHN0YXR1cyA9IC1FTk9NRU07XG4xMDQwOlx0XHRcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XG4xMDQxOlx0XHR9XG4xMDQyOlx0XG4xMDQzOlx0XHRody1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlbG9jYWxfZndkX21vZGUgPSBJQ0VfTE9DQUxfRldEX01PREVfRU5BQkxFRDtcbjEwNDQ6XHRcdC8qIHNldCB0aGUgYmFjayBwb2ludGVyIHRvIEhXICovXG4xMDQ1Olx0XHRody1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlaHcgPSBodztcbjEwNDY6XHRcbjEwNDc6XHRcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIHN3aXRjaCBjb25maWd1cmF0aW9uIGRhdGEgKi9cbjEwNDg6XHRcdHN0YXR1cyA9IGljZV9nZXRfaW5pdGlhbF9zd19jZmcoaHcpO1xuMTA0OTpcdFx0aWYgKHN0YXR1cylcbjEwNTA6XHRcdFx0Z290byBlcnJfdW5yb2xsX2FsbG9jO1xuMTA1MTpcdFxuMTA1MjpcdFx0aHctXHUwMDNlZXZiX3ZlYiA9IHRydWU7XG4xMDUzOlx0XG4xMDU0Olx0XHQvKiBpbml0IHhhcnJheSBmb3IgaWRlbnRpZnlpbmcgc2NoZWR1bGluZyBub2RlcyB1bmlxdWVseSAqL1xuMTA1NTpcdFx0eGFfaW5pdF9mbGFncyhcdTAwMjZody1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlc2NoZWRfbm9kZV9pZHMsIFhBX0ZMQUdTX0FMTE9DKTtcbjEwNTY6XHRcbjEwNTc6XHRcdC8qIFF1ZXJ5IHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGZvciBUeCBzY2hlZHVsZXIgKi9cbjEwNTg6XHRcdHN0YXR1cyA9IGljZV9zY2hlZF9xdWVyeV9yZXNfYWxsb2MoaHcpO1xuMTA1OTpcdFx0aWYgKHN0YXR1cykge1xuMTA2MDpcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfU0NIRUQsIFwmIzM0O0ZhaWxlZCB0byBnZXQgc2NoZWR1bGVyIGFsbG9jYXRlZCByZXNvdXJjZXNcXG5cJiMzNDspO1xuMTA2MTpcdFx0XHRnb3RvIGVycl91bnJvbGxfYWxsb2M7XG4xMDYyOlx0XHR9XG4xMDYzOlx0XHRpY2Vfc2NoZWRfZ2V0X3BzbV9jbGtfZnJlcShodyk7XG4xMDY0Olx0XG4xMDY1Olx0XHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBzY2hlZHVsZXIgZGF0YSAqL1xuMTA2NjpcdFx0c3RhdHVzID0gaWNlX3NjaGVkX2luaXRfcG9ydChody1cdTAwM2Vwb3J0X2luZm8pO1xuMTA2NzpcdFx0aWYgKHN0YXR1cylcbjEwNjg6XHRcdFx0Z290byBlcnJfdW5yb2xsX3NjaGVkO1xuMTA2OTpcdFxuMTA3MDpcdFx0cGNhcHMgPSBremFsbG9jX29iaigqcGNhcHMpO1xuMTA3MTpcdFx0aWYgKCFwY2Fwcykge1xuMTA3MjpcdFx0XHRzdGF0dXMgPSAtRU5PTUVNO1xuMTA3MzpcdFx0XHRnb3RvIGVycl91bnJvbGxfc2NoZWQ7XG4xMDc0Olx0XHR9XG4xMDc1Olx0XG4xMDc2Olx0XHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBQSFkgY2FwYWJpbGl0aWVzICovXG4xMDc3Olx0XHRzdGF0dXMgPSBpY2VfYXFfZ2V0X3BoeV9jYXBzKGh3LVx1MDAzZXBvcnRfaW5mbywgZmFsc2UsXG4xMDc4Olx0XHRcdFx0XHQgICAgIElDRV9BUUNfUkVQT1JUX1RPUE9fQ0FQX01FRElBLCBwY2FwcyxcbjEwNzk6XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4xMDgwOlx0XHRpZiAoc3RhdHVzKVxuMTA4MTpcdFx0XHRkZXZfd2FybihpY2VfaHdfdG9fZGV2KGh3KSwgXCYjMzQ7R2V0IFBIWSBjYXBhYmlsaXRpZXMgZmFpbGVkIHN0YXR1cyA9ICVkLCBjb250aW51aW5nIGFueXdheVxcblwmIzM0OyxcbjEwODI6XHRcdFx0XHQgc3RhdHVzKTtcbjEwODM6XHRcbjEwODQ6XHRcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIGxpbmsgaW5mb3JtYXRpb24gKi9cbjEwODU6XHRcdHN0YXR1cyA9IGljZV9hcV9nZXRfbGlua19pbmZvKGh3LVx1MDAzZXBvcnRfaW5mbywgZmFsc2UsIE5VTEwsIE5VTEwpO1xuMTA4NjpcdFx0aWYgKHN0YXR1cylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBJbml0aWFsaXphdGlvbiBpbiB0aGUgSUNFIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgSUNFIGRyaXZlciBpbml0aWFsaXplcy4gRmlyc3QsIGl0IGNhbGxzIGBpY2VfY3JlYXRlX2FsbF9jdHJscShodylgIHRvIHNldCB1cCB0aGUgQWRtaW4gUXVldWUsIHdoaWNoIGlzIHRoZSBjb3JuZXJzdG9uZS4gVGhlbiwgd2UgaGF2ZSBgaWNlX2luaXRfbnZtKGh3KWAgYW5kIGBpY2VfZ2V0X2NhcHMoaHcpYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSYjMzk7cmUgdGhlIG9uZXMgc2VuZGluZyB0aG9zZSBBUSBjb21tYW5kcyB0byB0aGUgaGFyZHdhcmUuIE5vdywgYSBmYWlsdXJlIGhlcmUg4oCTIGVpdGhlciBubyBoYXJkd2FyZSBwcmVzZW50IG9yIGEgbm9uLXJlc3BvbnNpdmUgZGV2aWNlIOKAkyBtZWFucyBgaWNlX2luaXRfaHdgIGlzIGdvaW5nIHRvIGJvbWIgb3V0LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQsIGJlaW5nIHRoZSBleHBlcnQgSSBhbSwgaXMgd2hldGhlciBTeXprYWxsZXIgY291bGQgZnV6eiB0aGlzLiBDYW4gd2UgaW5qZWN0IGZha2UgUENJIHJlc3BvbnNlcyBhbmQgbWVzcyB3aXRoIGl0PyBCdXQsIHJlYWxpc3RpY2FsbHksIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgcm9idXN0IFBDSSBlbXVsYXRvciB0aGF0IGNhbiByZXBsaWNhdGUgdGhlIGNvbXBsZXhpdHkgb2Ygc29tZXRoaW5nIGxpa2UgdGhlIElDRSBBZG1pbiBRdWV1ZS4gVGhpcyBBUSB1c2VzIERNQSByaW5ncywgc28gdGhlIGRyaXZlciB3cml0ZXMgZGVzY3JpcHRvcnMgdG8gbWVtb3J5IHJpbmdzIGFuZCBtYW5pcHVsYXRlcyB0YWlsIHBvaW50ZXJzLCB3aGlsZSB0aGUgaGFyZHdhcmUgcmVhZHMgdGhlIGRlc2NyaXB0b3JzLCBleGVjdXRlcyBjb21tYW5kcywgd3JpdGVzIHJlc3VsdHMgYmFjaywgYW5kIHVwZGF0ZXMgaGVhZCBwb2ludGVycy4gVGhpcyBzZXR1cCYjMzk7cyBpbnRyaWNhdGUuCgpTaW11bGF0aW5nIHRoaXMgaW4gU3l6a2FsbGVyIGlzIGEgbmlnaHRtYXJlIGJlY2F1c2UgeW91IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBETUEgcmluZyBsYXlvdXQgYW5kIGRlc2NyaXB0b3IgZm9ybWF0cywgd2hpY2ggYXJlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIElDRSBoYXJkd2FyZS4gU28sIGBpY2VfcHJvYmVgIGlzIGxpa2VseSB0byBmYWlsIGVhcmx5LCBhbmQgdGhlIGRyaXZlciB3b24mIzM5O3QgZXZlbiByZWdpc3Rlci4KClRoaXMgaXMgYWxsIGNydWNpYWwgYmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBJJiMzOTttIGZvY3VzaW5nIG9uLCBzcGVjaWZpY2FsbHkgaW4gYGljZV9yZWFkX2ZsYXRfbnZtYCwgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIGRyaXZlciBzdWNjZXNzZnVsbHkgcHJvYmVzIGFuZCByZWdpc3RlcnMgZGV2bGluay9ldGh0b29sIGludGVyZmFjZXMsIG9yIHBvdGVudGlhbGx5IGR1cmluZyB0aGUgcHJvYmUgaWYgYGljZV9pbml0X252bWAgY2FsbHMgaXQuIFNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIGlmIGBpY2VfaW5pdF9udm1gIGNhbGxzIGBpY2VfcmVhZF9mbGF0X252bWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9pbml0X252bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz05ODc9aW50IGljZV9pbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTAyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTAyNjpcdHN0YXR1cyA9IGljZV9pbml0X252bShodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTEwMjctXHRpZiAoc3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTE3Nzc9c3RhdGljIHZvaWQgaWNlX2hhbmRsZV9tZGRfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTkyNS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjE5MjY6ICogaWNlX2luaXRfbnZtX3BoeV90eXBlIC0gSW5pdGlhbGl6ZSB0aGUgTlZNIFBIWSB0eXBlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xOTI3LSAqIEBwaTogcG9ydCBpbmZvIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTE5MzAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzoxOTMxOnN0YXRpYyBpbnQgaWNlX2luaXRfbnZtX3BoeV90eXBlKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTE5MzIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3OTI9c3RhdGljIHZvaWQgaWNlX2luaXRfbGluayhzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00ODAxLVx0Lyogbm90IGEgZmF0YWwgZXJyb3IgaWYgdGhpcyBmYWlscyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDgwMjpcdGVyciA9IGljZV9pbml0X252bV9waHlfdHlwZShwZi1cdTAwM2Vody5wb3J0X2luZm8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDgwMy1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo0ODA0Olx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2luaXRfbnZtX3BoeV90eXBlIGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00ODA1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTc2Mzc9c3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc2ODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3Njg1Olx0ZXJyID0gaWNlX2luaXRfbnZtKGh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc2ODYtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3Njg3Olx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2luaXRfbnZtIGZhaWxlZCAlZFxcblwmIzM0OywgZXJyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc2ODgtXHRcdGdvdG8gZXJyX2luaXRfY3RybHE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xMDkyPXN0YXRpYyBpbnQgaWNlX2RldGVybWluZV9jc3NfaGRyX2xlbihzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTExMTAtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExMTE6ICogaWNlX2luaXRfbnZtIC0gaW5pdGlhbGl6ZXMgTlZNIHNldHRpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTExMi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTExNi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MTExNzppbnQgaWNlX2luaXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMTE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oPTMwPWludCBpY2VfcmVhZF9wYmFfc3RyaW5nKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCAqcGJhX251bSwgdTMyIHBiYV9udW1fc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oOjMxOmludCBpY2VfaW5pdF9udm0oc3RydWN0IGljZV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaC0zMi1pbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTlZNIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaWNlX2luaXRfbnZtYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBpbml0aWFsaXppbmcgdGhlIE5vbi1Wb2xhdGlsZSBNZW1vcnkgKE5WTSkgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlIE5WTSBpcyBjcml0aWNhbCwgc28gYSBjYXJlZnVsIGFuYWx5c2lzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGVzc2VudGlhbC4KCk15IGZpcnN0IGh1bmNoIGlzIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBjYWxscy4gSSBzdXNwZWN0IHRoYXQgYSBmdW5jdGlvbiBzdWNoIGFzIGBpY2VfaW5pdF9udm1gIHdvdWxkIGJlIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIE5WTSwgbGlrZWx5IGJ5IHJlYWRpbmcgZGF0YSBmcm9tIGl0LiBJIG5lZWQgdG8ga25vdyAqaG93KiBgaWNlX2luaXRfbnZtYCBhY2NvbXBsaXNoZXMgdGhpcyBpbml0aWFsaXphdGlvbi4gR2l2ZW4gdGhhdCBgaWNlX3JlYWRfZmxhdF9udm1gIGxvb2tzIGxpa2UgYSBmdW5jdGlvbiBuYW1lIHRoYXQgaXMgd2VsbC1zdWl0ZWQgdG8gYWNjZXNzaW5nIE5WTSBpbiBhIGZsYXQsIGxpbmVhciB3YXksIG15IG1pbmQgaXMgZHJhd24gdG8gdGhpbmtpbmcgJiMzNDtJIHdvbmRlciBpZiBgaWNlX2luaXRfbnZtYCBjYWxscyBgaWNlX3JlYWRfZmxhdF9udm1gPyYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpbnRlcmFjdGlvbiBhbmQgaXQgaXMgYW4gZXNzZW50aWFsIHBpZWNlIG9mIHRoZSBsYXJnZXIgcHV6emxlIG9mIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSBOVk0uIFRoZSBhbnN3ZXIgd2lsbCBsaWtlbHkgZGlyZWN0IG15IGludmVzdGlnYXRpb24gdG8gb3RoZXIgZnVuY3Rpb24gY2FsbHMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX3JlYWRfZmxhdF9udm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9MjE9aW50IGljZV9hcV9yZWFkX252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG1vZHVsZV90eXBlaWQsIHUzMiBvZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy00OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6NTA6ICogaWNlX3JlYWRfZmxhdF9udm0gLSBSZWFkIHBvcnRpb24gb2YgTlZNIGJ5IGZsYXQgb2Zmc2V0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTUxLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz02OT1pbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6NzA6aWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtNzEtXHRcdCAgYm9vbCByZWFkX3NoYWRvd19yYW0pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xODQ9aW50IGljZV9hcV9lcmFzZV9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCBzdHJ1Y3QgaWNlX3NxX2NkICpjZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIwNi0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMDc6ICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgaWNlX3JlYWRfZmxhdF9udm0uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIwOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9MjA5PXN0YXRpYyBpbnQgaWNlX3JlYWRfc3Jfd29yZF9hcShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMTU6XHQvKiBOb3RlIHRoYXQgaWNlX3JlYWRfZmxhdF9udm0gdGFrZXMgaW50byBhY2NvdW50IHRoZSA0S2IgQWRtaW5RIGFuZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMTYtXHQgKiBTaGFkb3cgUkFNIHNlY3RvciByZXN0cmljdGlvbnMgbmVjZXNzYXJ5IHdoZW4gcmVhZGluZyBmcm9tIHRoZSBOVk0uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIxNy1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMTg6XHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgb2Zmc2V0ICogc2l6ZW9mKHUxNiksIFx1MDAyNmJ5dGVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMTktXHRcdFx0XHQgICAoX19mb3JjZSB1OCAqKVx1MDAyNmRhdGFfbG9jYWwsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9MzQyPWljZV9yZWFkX2ZsYXNoX21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTE2IG1vZHVsZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTM1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MzU1Olx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICYjNDM7IG9mZnNldCwgXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTM1Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTQyND1pY2VfcmVhZF9uZXRsaXN0X21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtNDQ0LSAqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjQ0NTogKiBUaGUgTlZNIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGludGVybmFsbHkgYnkgaWNlX3JlYWRfZmxhdF9udm0oKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy00NDYtICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTg2Nz1zdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtODc2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzo4Nzc6XHRcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFx1MDAyNmxlbiwgXHUwMDI2ZGF0YSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy04NzgtXHRcdGlmIChzdGF0dXMgPT0gLUVJTyBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NDMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZsYXNoIERpc2NvdmVyeSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGZsYXNoIHNpemUgZGlzY292ZXJ5IHByb2Nlc3MgaGVyZS4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgZnVuY3Rpb24gYGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplYCBwbGF5cyBhIGNyaXRpY2FsIHJvbGUuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAgbWFrZXMgYSBjYWxsIHRvIGBpY2VfcmVhZF9mbGF0X252bWAuIFNvLCB0aGUgZmxhc2ggc2l6ZSBkaXNjb3ZlcnkgZnVuY3Rpb25hbGl0eSByZWxpZXMgZGlyZWN0bHkgb24gcmVhZGluZyBmcm9tIHRoZSBub24tdm9sYXRpbGUgbWVtb3J5IHRocm91Z2ggdGhhdCBgaWNlX3JlYWRfZmxhdF9udm1gIGZ1bmN0aW9uLiBOb3csIHdoZXJlIGlzIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAgYmVpbmcgaW5pdGlhdGVkPyBFeGFtaW5pbmcgdGhlIGNhbGwgc3RhY2ssIEkgc2VlIHRoYXQgYGljZV9pbml0X252bWAgYWN0dWFsbHkgY2FsbHMgYGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplYC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoZSBmbGFzaCBzaXplIGRldGVjdGlvbiBpcyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIE5WTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGtleSBhcyBJIGNvbnRpbnVlIHRvIGRlYnVnIHRoaXMgc3lzdGVtIG9yIGludGVncmF0ZSBhIG5ldyBmbGFzaCBjaGlwLiBUaGlzIGlzIGV4YWN0bHkgdGhlIHNvcnQgb2YgbG93LWxldmVsIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJlZm9yZSBJIGdldCB0byB0aGUgYXBwbGljYXRpb24tbGV2ZWwgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9ODU0PWludCBpY2VfZ2V0X2luYWN0aXZlX25ldGxpc3RfdmVyKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX25ldGxpc3RfaW5mbyAqbmV0bGlzdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg1OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6ODYwOiAqIGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplIC0gRGlzY292ZXIgdGhlIGF2YWlsYWJsZSBmbGFzaCBzaXplLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy04NjEtICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg2Ni0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6ODY3OnN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg2OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xMTE3PWludCBpY2VfaW5pdF9udm0oc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMTQzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoxMTQ0Olx0c3RhdHVzID0gaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMTQ1LVx0aWYgKHN0YXR1cykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDcyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTSBJbml0aWFsaXphdGlvbiBhbmQgUmVhZCBQYXRoKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTm9uLVZvbGF0aWxlIE1lbW9yeSAoTlZNKSBpbml0aWFsaXphdGlvbiB3b3JrcyBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgYGljZV9pbml0X252bWAga2lja3MgdGhpbmdzIG9mZiBieSBjYWxsaW5nIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGBpY2VfcmVhZF9mbGF0X252bWAuIFRoZSBjcnVjaWFsIHBpZWNlIGlzIHRoYXQgYGljZV9pbml0X252bWAgZGVwZW5kcyBvbiBhIGZ1bmN0aW9uaW5nIGhhcmR3YXJlIEFkbWluIFF1ZXVlIChBUSkuIElmIHRoZXJlJiMzOTtzIG5vIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBpZiB0aGUgZHJpdmVyIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZCwgYGljZV9pbml0X252bWAgaXMgYm91bmQgdG8gZmFpbC4KCk5vdywgaWYgYGljZV9pbml0X252bWAgZmFpbHMsIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAgaXMgc3RpbGwgY2FsbGVkLCBsZWFkaW5nIHRvIGBpY2VfcmVhZF9mbGF0X252bWAgYmVpbmcgZXhlY3V0ZWQsIGV2ZW4gaW4gdGhlIGFic2VuY2Ugb2YgaGFyZHdhcmUuIFRoaXMgcGF0aCBhdHRlbXB0cyB0byBhY3F1aXJlIE5WTSBhY2Nlc3MgdXNpbmcgYGljZV9hY3F1aXJlX252bWAgYW5kIHRoZW4gcmVhZCB2aWEgYGljZV9hcV9yZWFkX252bWAuIEhvd2V2ZXIsIHNpbmNlIHRoZSBBUSBpc24mIzM5O3QgZnVuY3Rpb25hbCwgYGljZV9hcV9yZWFkX252bWAgd2lsbCBpbmV2aXRhYmx5IHRpbWUgb3V0IG9yIGZhaWwuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPwoKVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgYGljZV9yZWFkX2ZsYXRfbnZtYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgYWNxdWlyZXMgYSBsb2NrLCByZWFkcywgYW5kIHRoZW4gcmVsZWFzZXMgdGhlIGxvY2suIFRoZSBtb2RpZmllZCB2ZXJzaW9uIG5vdyBhY3F1aXJlcyB0aGUgbG9jayAqaW5zaWRlKiB0aGUgcmVhZCBmdW5jdGlvbiwgYmVmb3JlIHRoZSBBUSBjb21tYW5kLiBNb3JlIGltcG9ydGFudGx5LCBpdCBzZWVtcyB0aGF0IGlmIGBpY2VfYXFfcmVhZF9udm1gICpkb2VzKiBmYWlsLCB0aGUgZHJpdmVyIHN0b3JlcyB0aGUgbGFzdCBBUSBzdGF0dXMsIGNhbGxzIGBpY2VfcmVsZWFzZV9udm1gIHRvIHJlbGVhc2UgdGhlIGxvY2ssIGFuZCB0aGVuICpyZXN0b3JlcyogdGhlIEFRIHN0YXR1cy4KClRoZSBpc3N1ZSBpcyB0aGF0IGlmIGBpY2VfYXFfcmVhZF9udm1gIGNvbnNpc3RlbnRseSBmYWlscywgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHdpdGhvdXQgcmVhbCBoYXJkd2FyZSwgYW55IGZ1enppbmcgYXR0ZW1wdHMgYXJlIGdvaW5nIHRvIGJlIHByZWRpY3RhYmxlLiBTeXprYWxsZXIsIGluIHRoaXMgY2FzZSwgd291bGQgY29uc3RhbnRseSBoaXQgdGhlIGZhaWx1cmUgcGF0aCBkdWUgdG8gdGhlIG5vbi1mdW5jdGlvbmFsIEFRLiBJdOKAmXMgZXNzZW50aWFsbHkgYSBsb2NrIGFjcXVpc2l0aW9uL3JlbGVhc2UgYXJvdW5kIGEgZmFpbGluZyBBUSBjb21tYW5kLCBhbmQgdGhlIGRyaXZlciBpcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhpcyBmYWlsdXJlLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW55IGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlIGhlcmUuIEV2ZW4gaWYgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgdHJpZ2dlciB0aGlzLCB0aGUgb3V0Y29tZSB3b3VsZCBiZSBjb25zaXN0ZW50IHRpbWVvdXRzLiBUaGUgQVEgcmVzcG9uc2UgY2FuJiMzOTt0IGJlIGNvbnRyb2xsZWQuIEFuZCB5ZXMsIGBpY2VfYWNxdWlyZV9udm1gIGRvZXMgcmVseSBvbiB0aGUgQWRtaW4gUXVldWUuIFNvIG5vLCB0aGlzIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2FjcXVpcmVfbnZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTcwPWljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjEwMTpcdFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMDItXHRcdGlmIChzdGF0dXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0yMDk9c3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMjctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjIyODogKiBpY2VfYWNxdWlyZV9udm0gLSBHZW5lcmljIHJlcXVlc3QgZm9yIGFjcXVpcmluZyB0aGUgTlZNIG93bmVyc2hpcFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMjktICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIzMy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MjM0OmludCBpY2VfYWNxdWlyZV9udm0oc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19hY2Nlc3NfdHlwZSBhY2Nlc3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIzNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xMTg2PWludCBpY2VfbnZtX3ZhbGlkYXRlX2NoZWNrc3VtKHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE5MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MTE5MjpcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE5My1cdGlmIChzdGF0dXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDgxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgSUNFIE5WTSBBY3F1aXNpdGlvbioqCgpBbHJpZ2h0LCBteSBicmFpbiBpcyBhbHJlYWR5IHplcm9pbmcgaW4uIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgY29kZS4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBgaWNlX2FjcXVpcmVfbnZtYCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5WTSBhY3F1aXNpdGlvbiBwcm9jZXNzIHdvcmtzIGZvciB0aGlzIEludGVsIEV0aGVybmV0IGNvbnRyb2xsZXIgKElDRSkuIEkgaW1tZWRpYXRlbHkgd2FudCB0byBncmFzcCB0aGUgaW5pdGlhbGl6YXRpb24sIHRoZSBlcnJvciBoYW5kbGluZywgYW5kIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBvZiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gbG93LWxldmVsIE5WTSBpbnRlcmZhY2UgZnVuY3Rpb25zIGFuZCBhbnkgcmVsZXZhbnQgcG93ZXIgbWFuYWdlbWVudCBvciBoYXJkd2FyZS1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzIHByb2Nlc3MuIE15IGJhY2tncm91bmQgaXMgZGVlcCBlbm91Z2ggdGhhdCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgc3RyYXRlZ2llcyB0aGF0IHRoZSBkcml2ZXIgdXNlcyB0byBlbnN1cmUgdGhlIE5WTSBpcyBhY2Nlc3NlZCByZWxpYWJseS4gTXkgZ29hbCBpcyB0byBjb21wbGV0ZWx5IGRpc3NlY3QgaXRzIGJlaGF2aW9yLCB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaGFyZHdhcmUsIGFuZCBpZGVudGlmeSBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNDpcdGludCBpY2VfYWNxdWlyZV9udm0oc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19hY2Nlc3NfdHlwZSBhY2Nlc3MpXG4gMjM1Olx0e1xuIDIzNjpcdFx0aWYgKGh3LVx1MDAzZWZsYXNoLmJsYW5rX252bV9tb2RlKVxuIDIzNzpcdFx0XHRyZXR1cm4gMDtcbiAyMzg6XHRcbiAyMzk6XHRcdHJldHVybiBpY2VfYWNxdWlyZV9yZXMoaHcsIElDRV9OVk1fUkVTX0lELCBhY2Nlc3MsIElDRV9OVk1fVElNRU9VVCk7XG4gMjQwOlx0fVxuIDI0MTpcdFxuIDI0MjpcdC8qKlxuIDI0MzpcdCAqIGljZV9yZWxlYXNlX252bSAtIEdlbmVyaWMgcmVxdWVzdCBmb3IgcmVsZWFzaW5nIHRoZSBOVk0gb3duZXJzaGlwXG4gMjQ0Olx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbiAyNDU6XHQgKlxuIDI0NjpcdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWxlYXNlIE5WTSBvd25lcnNoaXAuXG4gMjQ3Olx0ICovXG4gMjQ4Olx0dm9pZCBpY2VfcmVsZWFzZV9udm0oc3RydWN0IGljZV9odyAqaHcpXG4gMjQ5Olx0e1xuIDI1MDpcdFx0aWYgKGh3LVx1MDAzZWZsYXNoLmJsYW5rX252bV9tb2RlKVxuIDI1MTpcdFx0XHRyZXR1cm47XG4gMjUyOlx0XG4gMjUzOlx0XHRpY2VfcmVsZWFzZV9yZXMoaHcsIElDRV9OVk1fUkVTX0lEKTtcbiAyNTQ6XHR9XG4gMjU1Olx0XG4gMjU2Olx0LyoqXG4gMjU3Olx0ICogaWNlX2dldF9mbGFzaF9iYW5rX29mZnNldCAtIEdldCBvZmZzZXQgaW50byByZXF1ZXN0ZWQgZmxhc2ggYmFua1xuIDI1ODpcdCAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gMjU5Olx0ICogQGJhbms6IHdoZXRoZXIgdG8gcmVhZCBmcm9tIHRoZSBhY3RpdmUgb3IgaW5hY3RpdmUgZmxhc2ggYmFua1xuIDI2MDpcdCAqIEBtb2R1bGU6IHRoZSBtb2R1bGUgdG8gcmVhZCBmcm9tXG4gMjYxOlx0ICpcbiAyNjI6XHQgKiBCYXNlZCBvbiB0aGUgbW9kdWxlLCBsb29rdXAgdGhlIG1vZHVsZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZVxuIDI2MzpcdCAqIGZsYXNoLlxuIDI2NDpcdCAqXG4gMjY1Olx0ICogUmV0dXJucyB0aGUgZmxhc2ggb2Zmc2V0LiBOb3RlIHRoYXQgYSB2YWx1ZSBvZiB6ZXJvIGlzIGludmFsaWQgYW5kIG11c3QgYmVcbiAyNjY6XHQgKiB0cmVhdGVkIGFzIGFuIGVycm9yLlxuIDI2NzpcdCAqL1xuIDI2ODpcdHN0YXRpYyB1MzIgaWNlX2dldF9mbGFzaF9iYW5rX29mZnNldChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTE2IG1vZHVsZSlcbiAyNjk6XHR7XG4gMjcwOlx0XHRzdHJ1Y3QgaWNlX2JhbmtfaW5mbyAqYmFua3MgPSBcdTAwMjZody1cdTAwM2VmbGFzaC5iYW5rcztcbiAyNzE6XHRcdGVudW0gaWNlX2ZsYXNoX2JhbmsgYWN0aXZlX2Jhbms7XG4gMjcyOlx0XHRib29sIHNlY29uZF9iYW5rX2FjdGl2ZTtcbiAyNzM6XHRcdHUzMiBvZmZzZXQsIHNpemU7XG4gMjc0Olx0XG4gMjc1Olx0XHRzd2l0Y2ggKG1vZHVsZSkge1xuIDI3NjpcdFx0Y2FzZSBJQ0VfU1JfMVNUX05WTV9CQU5LX1BUUjpcbiAyNzc6XHRcdFx0b2Zmc2V0ID0gYmFua3MtXHUwMDNlbnZtX3B0cjtcbiAyNzg6XHRcdFx0c2l6ZSA9IGJhbmtzLVx1MDAzZW52bV9zaXplO1xuIDI3OTpcdFx0XHRhY3RpdmVfYmFuayA9IGJhbmtzLVx1MDAzZW52bV9iYW5rO1xuIDI4MDpcdFx0XHRicmVhaztcbiAyODE6XHRcdGNhc2UgSUNFX1NSXzFTVF9PUk9NX0JBTktfUFRSOlxuIDI4MjpcdFx0XHRvZmZzZXQgPSBiYW5rcy1cdTAwM2Vvcm9tX3B0cjtcbiAyODM6XHRcdFx0c2l6ZSA9IGJhbmtzLVx1MDAzZW9yb21fc2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKlJlc291cmNlIE1hbmFnZW1lbnQgaW4gdGhlIEljZSBMYXllcioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGl0JiMzOTtzIGxldmVyYWdpbmcgYGljZV9hY3F1aXJlX3Jlc2AgYW5kIGBpY2VfcmVsZWFzZV9yZXNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgJiMzNDtpY2UmIzM0OyBsYXllciDigJMgYW5kIHRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIG9mIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgd2UmIzM5O3JlIGRpc2N1c3NpbmcuIFRoZXNlIGZ1bmN0aW9uIGNhbGxzIGFyZSBteSBicmVhZCBhbmQgYnV0dGVyIGluIHNpdHVhdGlvbnMgbGlrZSB0aGlzLiBJdOKAmXMgcHJldHR5IG9idmlvdXMgdGhleSYjMzk7cmUgYWN0aW5nIGFzIGdhdGVrZWVwZXJzLCBjb250cm9sbGluZyBhY2Nlc3MgdG8gc29tZXRoaW5nIGNyaXRpY2FsLiBUaGUgJiMzNDthY3F1aXJlJiMzNDsgc3Ryb25nbHkgc3VnZ2VzdHMgZ3JhYmJpbmcgZXhjbHVzaXZlIG9yIHNoYXJlZCBhY2Nlc3MsIGxpa2VseSBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuICYjMzQ7UmVsZWFzZSwmIzM0OyB0aGVuLCBzeW1tZXRyaWNhbGx5IHJlbGlucXVpc2hlcyB0aGF0IGNvbnRyb2wsIGhvcGVmdWxseSBpbiBhIHRpZHkgYW5kIHByZWRpY3RhYmxlIG1hbm5lci4gSSBuZWVkIHRvIGRpZyBkZWVwZXIsIG9mIGNvdXJzZSwgYnV0IGp1c3QgZnJvbSB0aGVzZSBuYW1lcywgSSYjMzk7bSBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBjb250cm9sbGVkIGFjY2VzcyB0byBhIHNoYXJlZCByZXNvdXJjZSB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyAmIzM0O2ljZSYjMzQ7IGNvbXBvbmVudC4gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzIOKAkyBidXQgdGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgKndoYXQqIHJlc291cmNlIGlzIGJlaW5nIG1hbmFnZWQsICp3aHkqIGl0IG5lZWRzIGNvbnRyb2xsZWQgYWNjZXNzLCBhbmQgKmhvdyogdGhlIHN5c3RlbSBlbnN1cmVzIHByb3BlciBzeW5jaHJvbml6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9hY3F1aXJlX3JlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0yMTMxPWljZV9hcV9yZWxlYXNlX3JlcyhzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2lkcyByZXMsIHU4IHNkcF9udW1iZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTQ3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoyMTQ4OiAqIGljZV9hY3F1aXJlX3Jlc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTQ5LSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0yMTU2PWludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoyMTU3OmljZV9hY3F1aXJlX3JlcyhzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2lkcyByZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxNTgtXHRcdGVudW0gaWNlX2FxX3Jlc19hY2Nlc3NfdHlwZSBhY2Nlc3MsIHUzMiB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMjE3Mi1cdGlmIChzdGF0dXMgPT0gLUVBTFJFQURZKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoyMTczOlx0XHRnb3RvIGljZV9hY3F1aXJlX3Jlc19leGl0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTc0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMjE5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MjE5NjppY2VfYWNxdWlyZV9yZXNfZXhpdDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMjE5Ny1cdGlmIChzdGF0dXMgPT0gLUVBTFJFQURZKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaD05Nz1pbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6OTg6aWNlX2FjcXVpcmVfcmVzKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfaWRzIHJlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtOTktXHRcdGVudW0gaWNlX2FxX3Jlc19hY2Nlc3NfdHlwZSBhY2Nlc3MsIHUzMiB0aW1lb3V0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jPTExMzY9c3RhdGljIGludCBpY2VfYWNxdWlyZV9nbG9iYWxfY2ZnX2xvY2soc3RydWN0IGljZV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0xMTQwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYzoxMTQxOlx0c3RhdHVzID0gaWNlX2FjcXVpcmVfcmVzKGh3LCBJQ0VfR0xPQkFMX0NGR19MT0NLX1JFU19JRCwgYWNjZXNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0xMTQyLVx0XHRcdFx0IElDRV9HTE9CQUxfQ0ZHX0xPQ0tfVElNRU9VVCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYz0yMzg4PWludCBpY2VfY2ZnX3R4X3RvcG8oc3RydWN0IGljZV9odyAqaHcsIGNvbnN0IHZvaWQgKmJ1ZiwgdTMyIGxlbilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1MDEtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM6MjUwMjpcdHN0YXR1cyA9IGljZV9hY3F1aXJlX3JlcyhodywgSUNFX0dMT0JBTF9DRkdfTE9DS19SRVNfSUQsIElDRV9SRVNfV1JJVEUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1MDMtXHRcdFx0XHQgSUNFX0dMT0JBTF9DRkdfTE9DS19USU1FT1VUKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTI3OD1pY2VfYWNxdWlyZV9jaGFuZ2VfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjc5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjgwOlx0cmV0dXJuIGljZV9hY3F1aXJlX3JlcyhodywgSUNFX0NIQU5HRV9MT0NLX1JFU19JRCwgYWNjZXNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYy0yODEtXHRcdFx0ICAgICAgIElDRV9DSEFOR0VfTE9DS19USU1FT1VUKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTIzND1pbnQgaWNlX2FjcXVpcmVfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfYWNjZXNzX3R5cGUgYWNjZXNzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjM4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMzk6XHRyZXR1cm4gaWNlX2FjcXVpcmVfcmVzKGh3LCBJQ0VfTlZNX1JFU19JRCwgYWNjZXNzLCBJQ0VfTlZNX1RJTUVPVVQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yNDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA0OAoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAxODU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBDb2RlIGFuZCBpdHMgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhpcyBgaWNlX3JlYWRfZmxhdF9udm1gIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIEkmIzM5O3ZlIGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB0aGlzIHBhdGNoLCBpbiBpdHMgY3VycmVudCBmb3JtLCBpc24mIzM5O3Qgc29tZXRoaW5nIHRoYXQmIzM5O3Mgd29ydGggZnV6emluZy4gSGVyZSYjMzk7cyB3aHk6CgpFc3NlbnRpYWxseSwgdGhpcyBjb2RlIGlzIGRlZXBseSB0aWVkIHRvIHRoZSBoYXJkd2FyZS4gYGljZV9yZWFkX2ZsYXRfbnZtYCBpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIHdoZXJlIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgbm9uLXZvbGF0aWxlIG1lbW9yeSAoTlZNKSBvbiBhbiBJbnRlbCBJQ0UgbmV0d29yayBhZGFwdGVyLiBUaGUgY29yZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24gcmVsaWVzIGhlYXZpbHkgb24gdGhlIEFkbWluIFF1ZXVlIChBUSkgb2YgdGhlIGhhcmR3YXJlLCB3aGljaCBpcyBtYW5hZ2VkIHZpYSBgaWNlX2FjcXVpcmVfbnZtYCBhbmQgYGljZV9yZWxlYXNlX252bWAuIFRoZSBgaWNlX2FxX2FsbG9jX2ZyZWVfcmVzYCBmdW5jdGlvbiBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgYGljZV9hY3F1aXJlX3Jlc2AgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJ5IGBpY2VfYWNxdWlyZV9udm1gLCBzaG93aW5nIHRoYXQgTlZNIGNvbW1hbmRzIHV0aWxpemUgdGhlIEFkbWluIFF1ZXVlLiBUaGlzIEFkbWluIFF1ZXVlIGlzIG5vdCBnb2luZyB0byB3b3JrIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBwcmVzZW50IGFuZCBydW5uaW5nLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB0cmllcyB0byBhY3F1aXJlIGFuIE5WTSBsb2NrLCB0aGVuIHNlbmRzIGFuIEFkbWluIFF1ZXVlIGNvbW1hbmQgdG8gcmVhZCBhIGNodW5rIG9mIHRoZSBOVk0uIFRoZSBwYXRjaCBtb2RpZmllcyB0aGlzIGJ5IG1vdmluZyB0aGUgbG9jayBhY3F1aXNpdGlvbiBpbnNpZGUgdGhlIGxvb3AuIEhvd2V2ZXIsIHRoZSBpbml0aWFsIGBpY2VfYWNxdWlyZV9udm1gIHdpbGwgZmFpbCB3aGVuIHRoZXJlJiMzOTtzIG5vIGhhcmR3YXJlIG9yIHByb3BlciBlbXVsYXRpb24gYmVjYXVzZSB0aGUgQVEgY29tbWFuZCB3aWxsIHRpbWVvdXQuIFRoZSBkcml2ZXIgZmFpbHMgZHVyaW5nIHByb2JlLCBzbyBkZXZsaW5rIGFuZCBldGh0b29sIGludGVyZmFjZXMgd29uJiMzOTt0IGV2ZW4gYmUgcmVnaXN0ZXJlZC4gVGhhdCBtZWFucyBgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90YCwgYGljZV9kZXZsaW5rX252bV9yZWFkYCwgYW5kIGBpY2VfZ2V0X2VlcHJvbWAgYXJlIHVucmVhY2hhYmxlLiBUaGUgb25seSB3YXkgd2UgZ2V0IHRvIGBpY2VfcmVhZF9mbGF0X252bWAgaXMgZHVyaW5nIHRoZSBwcm9iZSBzZXF1ZW5jZSB2aWEgYGljZV9pbml0X252bWAgYW5kIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAuIEJ1dCBgaWNlX2luaXRfbnZtYCBpcyBjYWxsZWQgYWZ0ZXIgYGljZV9jcmVhdGVfYWxsX2N0cmxxYCB3aGljaCBhbGxvY2F0ZXMgbWVtb3J5LiBJZiB0aGVyZSYjMzk7cyBubyBoYXJkd2FyZSwgdGhlIGZpcnN0IEFRIGNvbW1hbmQgd2lsbCB0aW1lb3V0LgoKRXZlbiBpZiBgaHctJmd0O2ZsYXNoLmJsYW5rX252bV9tb2RlYCBpcyB0cnVlLCB0aGVuIGBpY2VfYWNxdWlyZV9udm1gIHJldHVybnMgMCwgYnV0IHRoZSBjYWxsIHRvIGBpY2VfYXFfcmVhZF9udm1gIHdpbGwgdGltZSBvdXQsIHNpbmNlIGBpY2VfYXFfc2VuZF9jbWRgIHdpbGwgYXR0ZW1wdCB0byBzZW5kIGFuIEFkbWluIFF1ZXVlIGNvbW1hbmQuCgpTeXprYWxsZXIgY2FuJiMzOTt0IHNpbXVsYXRlIHRoZSBETUEgaW50ZXJhY3Rpb25zIGFuZCB3aWxsIGp1c3QgdGltZW91dCB3aGVuIGl0IHRyaWVzIHRvIGZ1enogdGhlc2UgQVEgcmVzcG9uc2VzLiBUaGUgbG9vcCB3aXRoaW4gYGljZV9yZWFkX2ZsYXRfbnZtYCB3b24mIzM5O3QgZXhlY3V0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBsb2dpYyBvZiBhY3F1aXJpbmcgYW5kIHJlbGVhc2luZyB0aGUgbG9jayBpbnNpZGUgdGhlIGxvb3AgaXMgY29tcGxldGVseSBoYXJkd2FyZS1kZXBlbmRlbnQgYW5kIGNhbiYjMzk7dCBiZSBleGVyY2lzZWQgZWZmZWN0aXZlbHkuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIGZ1enppbmcgaXQgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGJlbmVmaWNpYWwuIFRodXMsIHRoZSBjb3JyZWN0IGRldGVybWluYXRpb24gaXMgV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5WTSByZWFkIGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW92aW5nIE5WTSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIGluc2lkZSB0aGUgcmVhZCBsb29wIHRvIHByZXZlbnQgRlcgbG9jayB0aW1lb3V0cy4gVGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgaGFyZHdhcmUgQWRtaW4gUXVldWUgKEFRKSB0byBwcm9jZXNzIGNvbW1hbmRzLiBXaXRob3V0IHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlIG9yIGEgZnVsbCBzb2Z0d2FyZSBlbXVsYXRvciAod2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gUUVNVSksIHRoZSBBUSBjb21tYW5kcyB3aWxsIHNpbXBseSB0aW1lb3V0IGFuZCBmYWlsLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5WTSByZWFkIGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW92aW5nIE5WTSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIGluc2lkZSB0aGUgcmVhZCBsb29wIHRvIHByZXZlbnQgRlcgbG9jayB0aW1lb3V0cy4gVGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgaGFyZHdhcmUgQWRtaW4gUXVldWUgKEFRKSB0byBwcm9jZXNzIGNvbW1hbmRzLiBXaXRob3V0IHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlIG9yIGEgZnVsbCBzb2Z0d2FyZSBlbXVsYXRvciAod2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gUUVNVSksIHRoZSBBUSBjb21tYW5kcyB3aWxsIHNpbXBseSB0aW1lb3V0IGFuZCBmYWlsLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNDo0NS44MzMwOTg4MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTM0MDQ2NjE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTlZNIHJlYWQgbG9naWMgaW4gdGhlIEludGVsIElDRSBkcml2ZXIsIHNwZWNpZmljYWxseSBtb3ZpbmcgTlZNIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgaW5zaWRlIHRoZSByZWFkIGxvb3AgdG8gcHJldmVudCBGVyBsb2NrIHRpbWVvdXRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBoYXJkd2FyZSBBZG1pbiBRdWV1ZSAoQVEpIHRvIHByb2Nlc3MgY29tbWFuZHMuIFdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgaGFyZHdhcmUgb3IgYSBmdWxsIHNvZnR3YXJlIGVtdWxhdG9yICh3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBRRU1VKSwgdGhlIEFRIGNvbW1hbmRzIHdpbGwgc2ltcGx5IHRpbWVvdXQgYW5kIGZhaWwuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byBtZWFuaW5nZnVsbHkgcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTQ6NDUuODMzMTA1MDU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ1MDQzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OTYxMGM4NzM4MjdmZDJkMzcyODE1YmRkMzUxYWQxY2QwZjBlYzQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMTI6MTQ6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXFxuaW5kZXggMjJiN2Q4ZTZiZDllOGYuLjdjN2ZlM2QyZTlkOTkwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xcbkBAIC0xODkxLDI2ICsxODkxLDE1IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2Jsa3M7IGkrKykge1xcbiBcXHRcXHR1MzIgcmVhZF9zeiA9IG1pbl90KHUzMiwgSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSwgbGVmdCk7XFxuIFxcbi1cXHRcXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuLVxcdFxcdGlmIChzdGF0dXMpIHtcXG4tXFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRzdGF0dXMsIGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVxcXCIpO1xcbi1cXHRcXHRcXHR2ZnJlZShudm1fZGF0YSk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgaSAqIElDRV9ERVZMSU5LX1JFQURfQkxLX1NJWkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XFxuIFxcdFxcdGlmIChzdGF0dXMpIHtcXG4gXFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cmVhZF9zeiwgc3RhdHVzLCBody1cXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkZhaWxlZCB0byByZWFkIE5WTSBjb250ZW50c1xcXCIpO1xcbi1cXHRcXHRcXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xcbiBcXHRcXHRcXHR2ZnJlZShudm1fZGF0YSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcbiBcXHRcXHR0bXAgKz0gcmVhZF9zejtcXG4gXFx0XFx0bGVmdCAtPSByZWFkX3N6O1xcbkBAIC0xOTY2LDI0ICsxOTU1LDE0IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3JlYWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuIFxcbi1cXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuLVxcdGlmIChzdGF0dXMpIHtcXG4tXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRzdGF0dXMsIGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xcbi1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4gXFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCBcXHUwMDI2c2l6ZSwgZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgcmVhZF9zaGFkb3dfcmFtKTtcXG4gXFx0aWYgKHN0YXR1cykge1xcbiBcXHRcXHRkZXZfZGJnKGRldiwgXFxcImljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRzaXplLCBzdGF0dXMsIGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXFxcIik7XFxuLVxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuLVxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuaW5kZXggNDkzNzFiMDY1ODQ1ODIuLmRkZWNhMzlkODIyYmIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcXG5AQCAtODY5LDI0ICs4NjksMTUgQEAgaWNlX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuIFxcdGlmICghYnVmKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHJldCwgbGliaWVfYXFfc3RyKGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHJldCA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBlZXByb20tXFx1MDAzZW9mZnNldCwgXFx1MDAyNmVlcHJvbS1cXHUwMDNlbGVuLCBidWYsXFxuIFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0cmV0LCBsaWJpZV9hcV9zdHIoaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xcbi1cXHRcXHRnb3RvIHJlbGVhc2U7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbiBcXHRtZW1jcHkoYnl0ZXMsIGJ1ZiwgZWVwcm9tLVxcdTAwM2VsZW4pO1xcbi1yZWxlYXNlOlxcbi1cXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xcbiBvdXQ6XFxuIFxcdGtmcmVlKGJ1Zik7XFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXFxuaW5kZXggN2UxODdhODA0ZGZhMTYuLmNiMTU0MTg0NDI0MmJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXFxuQEAgLTU4LDYgKzU4LDExIEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxcbiAgKiBicmVha3MgcmVhZCByZXF1ZXN0cyBhY3Jvc3MgU2hhZG93IFJBTSBzZWN0b3JzIGFuZCBlbnN1cmVzIHRoYXQgbm8gc2luZ2xlXFxuICAqIHJlYWQgcmVxdWVzdCBleGNlZWRzIHRoZSBtYXhpbXVtIDRLQiByZWFkIGZvciBhIHNpbmdsZSBBZG1pblEgY29tbWFuZC5cXG4gICpcXG4rICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZVxcbisgKiA0S0Igc2VjdG9ycyBjYW5ub3QgYmUgZG9uZSB1bmRlciBhIHNpbmdsZSBsb2NrIHdpdGhvdXQgRlcgcmVjbGFpbWluZyBpdFxcbisgKiBtaWQtcmVhZC4gVGhlIE5WTSBsb2NrIGlzIHRoZXJlZm9yZSBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgYXJvdW5kIGVhY2ggQVFcXG4rICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXFxuKyAqXFxuICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmVcXG4gICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuXFxuICAqL1xcbkBAIC02NSw2ICs3MCw3IEBAIGludFxcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxcbiBcXHRcXHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKVxcbiB7XFxuK1xcdGVudW0gbGliaWVfYXFfZXJyIGFxX2VycjtcXG4gXFx0dTMyIGlubGVuID0gKmxlbmd0aDtcXG4gXFx0dTMyIGJ5dGVzX3JlYWQgPSAwO1xcbiBcXHRib29sIGxhc3RfY21kO1xcbkBAIC05MiwxMiArOTgsMjggQEAgaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcXG4gXFxuIFxcdFxcdGxhc3RfY21kID0gIShieXRlc19yZWFkICsgcmVhZF9zaXplIFxcdTAwM2MgaW5sZW4pO1xcbiBcXG4rXFx0XFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xcbitcXHRcXHRpZiAoc3RhdHVzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuIFxcdFxcdHN0YXR1cyA9IGljZV9hcV9yZWFkX252bShodywgSUNFX0FRQ19OVk1fU1RBUlRfUE9JTlQsXFxuIFxcdFxcdFxcdFxcdFxcdCBvZmZzZXQsIHJlYWRfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0IGRhdGEgKyBieXRlc19yZWFkLCBsYXN0X2NtZCxcXG4gXFx0XFx0XFx0XFx0XFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XFxuLVxcdFxcdGlmIChzdGF0dXMpXFxuK1xcdFxcdGlmIChzdGF0dXMpIHtcXG4rXFx0XFx0XFx0LyogaWNlX3JlbGVhc2VfbnZtKCkgaXNzdWVzIGFuIEFRIGNvbW1hbmQgdGhhdCB3b3VsZFxcbitcXHRcXHRcXHQgKiBvdmVyd3JpdGUgc3FfbGFzdF9zdGF0dXMsIHdoaWNoIHNvbWUgY2FsbGVyc1xcbitcXHRcXHRcXHQgKiBpbnNwZWN0IGFmdGVyIGEgZmFpbGVkIHJlYWQuIFByZXNlcnZlIHRoZSByZWFkJ3NcXG4rXFx0XFx0XFx0ICogQVEgZXJyb3IgYWNyb3NzIHRoZSByZWxlYXNlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0YXFfZXJyID0gaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cztcXG4rXFxuK1xcdFxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuK1xcdFxcdFxcdGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMgPSBhcV9lcnI7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xcbiBcXG4gXFx0XFx0Ynl0ZXNfcmVhZCArPSByZWFkX3NpemU7XFxuIFxcdFxcdG9mZnNldCArPSByZWFkX3NpemU7XFxuQEAgLTMzMCwxNCArMzUyLDggQEAgaWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xcbi1cXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRyZXR1cm4gc3RhdHVzO1xcbi1cXG4gXFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICsgb2Zmc2V0LCBcXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSk7XFxuIFxcbi1cXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xcbi1cXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbiBcXG5AQCAtNDE5LDI0ICs0MzUsMTkgQEAgaWNlX3JlYWRfbmV0bGlzdF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUzMiBvZmZzZXRcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxcbisgKiBpY2VfcmVhZF9zcl93b3JkIC0gUmVhZHMgU2hhZG93IFJBTSB3b3JkXFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpXFxuICAqIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgU2hhZG93IFJBTVxcbiAgKlxcbi0gKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyB0aGUgaWNlX3JlYWRfc3Jfd29yZF9hcS5cXG4rICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgaWNlX3JlYWRfc3Jfd29yZF9hcS5cXG4rICpcXG4rICogVGhlIE5WTSBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBpbnRlcm5hbGx5IGJ5IGljZV9yZWFkX2ZsYXRfbnZtKClcXG4rICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cXG4gICovXFxuIGludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuIHtcXG4tXFx0aW50IHN0YXR1cztcXG4tXFxuLVxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKCFzdGF0dXMpIHtcXG4tXFx0XFx0c3RhdHVzID0gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTtcXG4tXFx0XFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIHN0YXR1cztcXG4rXFx0cmV0dXJuIGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04NTYsMTEgKzg2Nyw3IEBAIGludCBpY2VfZ2V0X2luYWN0aXZlX25ldGxpc3RfdmVyKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX25ldGxpc3RfaW5mbyAqbmV0XFxuIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXFxuIHtcXG4gXFx0dTMyIG1pbl9zaXplID0gMCwgbWF4X3NpemUgPSBJQ0VfQVFDX05WTV9NQVhfT0ZGU0VUICsgMTtcXG4tXFx0aW50IHN0YXR1cztcXG4tXFxuLVxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4rXFx0aW50IHN0YXR1cyA9IDA7XFxuIFxcbiBcXHR3aGlsZSAoKG1heF9zaXplIC0gbWluX3NpemUpIFxcdTAwM2UgMSkge1xcbiBcXHRcXHR1MzIgb2Zmc2V0ID0gKG1heF9zaXplICsgbWluX3NpemUpIC8gMjtcXG5AQCAtODgwLDcgKzg4Nyw3IEBAIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcdFxcdFxcdG1pbl9zaXplID0gb2Zmc2V0O1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHQvKiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkICovXFxuLVxcdFxcdFxcdGdvdG8gZXJyX3JlYWRfZmxhdF9udm07XFxuK1xcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtODg4LDkgKzg5NSw2IEBAIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcbiBcXHRody1cXHUwMDNlZmxhc2guZmxhc2hfc2l6ZSA9IG1heF9zaXplO1xcbiBcXG4tZXJyX3JlYWRfZmxhdF9udm06XFxuLVxcdGljZV9yZWxlYXNlX252bShodyk7XFxuLVxcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNDo0Ni41NTA5MTg5NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NjIyNjM0NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBOVk0gcmVhZCBsb2dpYyBpbiB0aGUgSW50ZWwgSUNFIGRyaXZlciwgc3BlY2lmaWNhbGx5IG1vdmluZyBOVk0gbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBpbnNpZGUgdGhlIHJlYWQgbG9vcCB0byBwcmV2ZW50IEZXIGxvY2sgdGltZW91dHMuIFRoaXMgY29kZSByZWxpZXMgb24gdGhlIGhhcmR3YXJlIEFkbWluIFF1ZXVlIChBUSkgdG8gcHJvY2VzcyBjb21tYW5kcy4gV2l0aG91dCBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBoYXJkd2FyZSBvciBhIGZ1bGwgc29mdHdhcmUgZW11bGF0b3IgKHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIFFFTVUpLCB0aGUgQVEgY29tbWFuZHMgd2lsbCBzaW1wbHkgdGltZW91dCBhbmQgZmFpbC4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIG1lYW5pbmdmdWxseSByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5NjEwYzg3MzgyN2ZkMmQzNzI4MTViZGQzNTFhZDFjZDBmMGVjNDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjE0OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG5pbmRleCAyMmI3ZDhlNmJkOWU4Zi4uN2M3ZmUzZDJlOWQ5OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xuQEAgLTE4OTEsMjYgKzE4OTEsMTUgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fc25hcHNob3Qoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fYmxrczsgaSsrKSB7XG4gXHRcdHUzMiByZWFkX3N6ID0gbWluX3QodTMyLCBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLCBsZWZ0KTtcbiBcbi1cdFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0XHRpZiAoc3RhdHVzKSB7XG4tXHRcdFx0ZGV2X2RiZyhkZXYsIFwiaWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVwiKTtcbi1cdFx0XHR2ZnJlZShudm1fZGF0YSk7XG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdH1cbi1cbiBcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGkgKiBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XG4gXHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRkZXZfZGJnKGRldiwgXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuIFx0XHRcdFx0cmVhZF9zeiwgc3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiRmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXCIpO1xuLVx0XHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXHRcdFx0dmZyZWUobnZtX2RhdGEpO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHR9XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRcdHRtcCArPSByZWFkX3N6O1xuIFx0XHRsZWZ0IC09IHJlYWRfc3o7XG5AQCAtMTk2NiwyNCArMTk1NSwxNCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChzdGF0dXMpIHtcbi1cdFx0ZGV2X2RiZyhkZXYsIFwiaWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlXCIpO1xuLVx0XHRyZXR1cm4gLUVJTztcbi1cdH1cbi1cbiBcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCAodTMyKW9mZnNldCwgXHUwMDI2c2l6ZSwgZGF0YSxcbiBcdFx0XHRcdCAgIHJlYWRfc2hhZG93X3JhbSk7XG4gXHRpZiAoc3RhdHVzKSB7XG4gXHRcdGRldl9kYmcoZGV2LCBcImljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXFxuXCIsXG4gXHRcdFx0c2l6ZSwgc3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcIkZhaWxlZCB0byByZWFkIE5WTSBjb250ZW50c1wiKTtcbi1cdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4tXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbmluZGV4IDQ5MzcxYjA2NTg0NTgyLi5kZGVjYTM5ZDgyMmJiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuQEAgLTg2OSwyNCArODY5LDE1IEBAIGljZV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuIFx0aWYgKCFidWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmV0ID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRkZXZfZXJyKGRldiwgXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVzXFxuXCIsXG4tXHRcdFx0cmV0LCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0cmV0ID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGVlcHJvbS1cdTAwM2VvZmZzZXQsIFx1MDAyNmVlcHJvbS1cdTAwM2VsZW4sIGJ1ZixcbiBcdFx0XHRcdGZhbHNlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0ZGV2X2VycihkZXYsIFwiaWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVzXFxuXCIsXG4gXHRcdFx0cmV0LCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4tXHRcdGdvdG8gcmVsZWFzZTtcbitcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRtZW1jcHkoYnl0ZXMsIGJ1ZiwgZWVwcm9tLVx1MDAzZWxlbik7XG4tcmVsZWFzZTpcbi1cdGljZV9yZWxlYXNlX252bShodyk7XG4gb3V0OlxuIFx0a2ZyZWUoYnVmKTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbmluZGV4IDdlMTg3YTgwNGRmYTE2Li5jYjE1NDE4NDQyNDJiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbkBAIC01OCw2ICs1OCwxMSBAQCBpbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCxcbiAgKiBicmVha3MgcmVhZCByZXF1ZXN0cyBhY3Jvc3MgU2hhZG93IFJBTSBzZWN0b3JzIGFuZCBlbnN1cmVzIHRoYXQgbm8gc2luZ2xlXG4gICogcmVhZCByZXF1ZXN0IGV4Y2VlZHMgdGhlIG1heGltdW0gNEtCIHJlYWQgZm9yIGEgc2luZ2xlIEFkbWluUSBjb21tYW5kLlxuICAqXG4rICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZVxuKyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0XG4rICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRXG4rICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXG4rICpcbiAgKiBSZXR1cm5zIGEgc3RhdHVzIGNvZGUgb24gZmFpbHVyZS4gTm90ZSB0aGF0IHRoZSBkYXRhIHBvaW50ZXIgbWF5IGJlXG4gICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuXG4gICovXG5AQCAtNjUsNiArNzAsNyBAQCBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuIFx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKVxuIHtcbitcdGVudW0gbGliaWVfYXFfZXJyIGFxX2VycjtcbiBcdHUzMiBpbmxlbiA9ICpsZW5ndGg7XG4gXHR1MzIgYnl0ZXNfcmVhZCA9IDA7XG4gXHRib29sIGxhc3RfY21kO1xuQEAgLTkyLDEyICs5OCwyOCBAQCBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuIFxuIFx0XHRsYXN0X2NtZCA9ICEoYnl0ZXNfcmVhZCArIHJlYWRfc2l6ZSBcdTAwM2MgaW5sZW4pO1xuIFxuK1x0XHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4rXHRcdGlmIChzdGF0dXMpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdHN0YXR1cyA9IGljZV9hcV9yZWFkX252bShodywgSUNFX0FRQ19OVk1fU1RBUlRfUE9JTlQsXG4gXHRcdFx0XHRcdCBvZmZzZXQsIHJlYWRfc2l6ZSxcbiBcdFx0XHRcdFx0IGRhdGEgKyBieXRlc19yZWFkLCBsYXN0X2NtZCxcbiBcdFx0XHRcdFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XG4tXHRcdGlmIChzdGF0dXMpXG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHQvKiBpY2VfcmVsZWFzZV9udm0oKSBpc3N1ZXMgYW4gQVEgY29tbWFuZCB0aGF0IHdvdWxkXG4rXHRcdFx0ICogb3ZlcndyaXRlIHNxX2xhc3Rfc3RhdHVzLCB3aGljaCBzb21lIGNhbGxlcnNcbitcdFx0XHQgKiBpbnNwZWN0IGFmdGVyIGEgZmFpbGVkIHJlYWQuIFByZXNlcnZlIHRoZSByZWFkJ3NcbitcdFx0XHQgKiBBUSBlcnJvciBhY3Jvc3MgdGhlIHJlbGVhc2UuXG4rXHRcdFx0ICovXG4rXHRcdFx0YXFfZXJyID0gaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzO1xuK1xuK1x0XHRcdGljZV9yZWxlYXNlX252bShodyk7XG4rXHRcdFx0aHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzID0gYXFfZXJyO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRcdGJ5dGVzX3JlYWQgKz0gcmVhZF9zaXplO1xuIFx0XHRvZmZzZXQgKz0gcmVhZF9zaXplO1xuQEAgLTMzMCwxNCArMzUyLDggQEAgaWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChzdGF0dXMpXG4tXHRcdHJldHVybiBzdGF0dXM7XG4tXG4gXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgc3RhcnQgKyBvZmZzZXQsIFx1MDAyNmxlbmd0aCwgZGF0YSwgZmFsc2UpO1xuIFxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuQEAgLTQxOSwyNCArNDM1LDE5IEBAIGljZV9yZWFkX25ldGxpc3RfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MzIgb2Zmc2V0XG4gfVxuIFxuIC8qKlxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxuKyAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmRcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpXG4gICogQGRhdGE6IHdvcmQgcmVhZCBmcm9tIHRoZSBTaGFkb3cgUkFNXG4gICpcbi0gKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyB0aGUgaWNlX3JlYWRfc3Jfd29yZF9hcS5cbisgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9zcl93b3JkX2FxLlxuKyAqXG4rICogVGhlIE5WTSBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBpbnRlcm5hbGx5IGJ5IGljZV9yZWFkX2ZsYXRfbnZtKClcbisgKiBhcm91bmQgdGhlIEZXIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLlxuICAqL1xuIGludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4ge1xuLVx0aW50IHN0YXR1cztcbi1cbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmICghc3RhdHVzKSB7XG4tXHRcdHN0YXR1cyA9IGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gc3RhdHVzO1xuK1x0cmV0dXJuIGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTg1NiwxMSArODY3LDcgQEAgaW50IGljZV9nZXRfaW5hY3RpdmVfbmV0bGlzdF92ZXIoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfbmV0bGlzdF9pbmZvICpuZXRcbiBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIHtcbiBcdHUzMiBtaW5fc2l6ZSA9IDAsIG1heF9zaXplID0gSUNFX0FRQ19OVk1fTUFYX09GRlNFVCArIDE7XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cylcbi1cdFx0cmV0dXJuIHN0YXR1cztcbitcdGludCBzdGF0dXMgPSAwO1xuIFxuIFx0d2hpbGUgKChtYXhfc2l6ZSAtIG1pbl9zaXplKSBcdTAwM2UgMSkge1xuIFx0XHR1MzIgb2Zmc2V0ID0gKG1heF9zaXplICsgbWluX3NpemUpIC8gMjtcbkBAIC04ODAsNyArODg3LDcgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdFx0XHRtaW5fc2l6ZSA9IG9mZnNldDtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkICovXG4tXHRcdFx0Z290byBlcnJfcmVhZF9mbGF0X252bTtcbitcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODg4LDkgKzg5NSw2IEBAIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXG4gXG4gXHRody1cdTAwM2VmbGFzaC5mbGFzaF9zaXplID0gbWF4X3NpemU7XG4gXG4tZXJyX3JlYWRfZmxhdF9udm06XG4tXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuLVxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNDo0Ni41NTA5MjE4OTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAzOTU2MTczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgSW50ZWwgSUNFIERyaXZlcidzIE5WTSBSZWFkIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgSW50ZWwgSUNFIChFdGhlcm5ldCkgZHJpdmVyLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0byBob3cgTlZNIHJlYWRzIGFyZSBoYW5kbGVkLCBtb3ZpbmcgdGhlIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZSBhcm91bmQgZWFjaCBBZG1pbiBRdWV1ZSAoQVEpIHJlYWQgd2l0aGluIGBpY2VfcmVhZF9mbGF0X252bWAuIFRoaXMgaXMgZHJpdmVuIGJ5IGZpcm13YXJlIGxpbWl0YXRpb25zIG9uIHJlYWQgbG9jayBkdXJhdGlvbi5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIGRyaXZlciwgdGhlIEludGVsIElDRSwgaXMgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZSDigJMgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBhZGFwdGVycy4gU3RhbmRhcmQgdmlydHVhbGl6YXRpb24sIGxpa2UgUUVNVSBvciBHQ0UsIHR5cGljYWxseSB3b3VsZG4ndCBleHBvc2UgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyB1bmxlc3MgdGhlcmUncyBhbiBlbXVsYXRvciBvciBQQ0kgcGFzc3Rocm91Z2guIEFuZCBJIGFscmVhZHkga25vdyB0aGF0IFFFTVUgZG9lc24ndCBoYXZlIGFuIGVtdWxhdG9yIGZvciBJQ0U7IGl0IGhhcyBvdGhlciBuZXR3b3JrIGFkYXB0ZXJzLCBidXQgbm90IHRoaXMgb25lLiBJIGJyaWVmbHkgY2hlY2tlZCBpZiBTeXprYWxsZXIgb2ZmZXJzIGFueSBzaW1pbGFyIGVtdWxhdGlvbiwgYnV0IGl0IGZvY3VzZXMgb24gVVNCLCBXaUZpLCBvciBEUk0gZW11bGF0aW9uLiBOb3RoaW5nIGZvciBJQ0UuXG5cbkkgaGF2ZSB0byB2ZXJpZnkgd2hldGhlciB0aGUgYGljZWAgZHJpdmVyIGNhbiBiZSBwcm9iZWQgd2l0aG91dCB0aGUgaGFyZHdhcmUuIFBDSSBkcml2ZXJzIHJlcXVpcmUgYSBQQ0kgSUQgbWF0Y2gsIHdoaWNoIG1lYW5zIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHdvdWxkIGJlIG5lZWRlZC4gU3l6a2FsbGVyIGhhcyB1dGlsaXRpZXMgbGlrZSBgc3l6X3BjaV9jb25uZWN0YCwgYnV0IEkga25vdyBpdCdzIG5vdCBhIGZ1bGwtYmxvd24gUENJIGVtdWxhdG9yIGNhcGFibGUgb2YgaGFuZGxpbmcgYSBjb21wbGV4IGRyaXZlciBsaWtlIElDRS4gU3l6a2FsbGVyJ3MgUENJIGZ1enppbmcgaXMgdmVyeSBsaW1pdGVkLiBJdCBsaWtlbHkgd29uJ3QgZ2V0IGZhciBlbm91Z2ggdG8gZXhlY3V0ZSB0aGUgY29kZSBpbiBgaWNlX3JlYWRfZmxhdF9udm1gLCB3aGljaCBuZWVkcyB0aGUgQWRtaW4gUXVldWUgKEFRKSB0byBmdW5jdGlvbi4gVGhlIEFRLCBpbiB0dXJuLCByZXF1aXJlcyBETUEgcmluZ3MgYW5kIGhhcmR3YXJlLWxpa2UgcHJvY2Vzc2luZyBvZiBkZXNjcmlwdG9ycywgd2hpY2ggYSBkdW1teSBQQ0kgZGV2aWNlIHdvbid0IGRvLiBgaWNlX2FxX3JlYWRfbnZtYCB3b3VsZCB0aW1lb3V0IG9yIGZhaWwgaW1tZWRpYXRlbHkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYGljZV9yZWFkX2ZsYXRfbnZtYCBjYW4gYmUgcmVhY2hlZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBjYWxsZWQgZnJvbSBkZXZsaW5rIGFuZCBldGh0b29sIGludGVyZmFjZXMuIGBpY2VfZGV2bGlua19udm1fc25hcHNob3RgLCBgaWNlX2RldmxpbmtfbnZtX3JlYWRgLCBhbmQgYGljZV9nZXRfZWVwcm9tYCBhcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gSG93ZXZlciwgdGhvc2UgYXJlIG9ubHkgYWNjZXNzaWJsZSBpZiB0aGUgbmV0ZGV2L2RldmxpbmsgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgb2YgYGljZV9wcm9iZWAuIEFuZCBgaWNlX3Byb2JlYCBuZWVkcyB0aGUgaGFyZHdhcmUgdG8gYmUgaW5pdGlhbGl6ZWQgKGBpY2VfaW5pdF9od2ApLiBUaGF0IGluaXRpYWxpemF0aW9uIHNldHMgdXAgdGhlIEFkbWluIFF1ZXVlLiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCByZXNwb25kIHRvIEFRIGNvbW1hbmRzLCBgaWNlX2luaXRfaHdgIGZhaWxzLCBhbmQgdGhlIGRyaXZlciB3b24ndCBwcm9iZS4gV2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgY29tcGxldGUgZW11bGF0b3IsIHRoZSBkcml2ZXIgd29uJ3QgcHJvYmUsIGFuZCB0aG9zZSBuZXRkZXYvZGV2bGluayBpbnRlcmZhY2VzIHdvbid0IGV4aXN0LlxuXG5TbywgcmVhbGlzdGljYWxseSwgYGljZV9yZWFkX2ZsYXRfbnZtYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkknbGwgY29uZmlybSB0aGlzIGJ5IGxvb2tpbmcgYXQgYGljZV9wcm9iZWAgdXNpbmcgYGdyZXBwZXJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTczLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjAwLjU5MDQ4NjI4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY3OTc1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDktICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTU1OmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjM5LVxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODM5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0MS1cXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODQyOlxcdC5wcm9iZSA9IGljZV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODQzLVxcdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNTowMC44MzcyOTAxMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzk0MDMzMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gb3IgZGVidWdnaW5nLCBhbmQgd3JpdGluZyBpdCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gc3RyZWFtIG9mIGNvbnNjaW91c25lc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgUHJvYmUgU2VxdWVuY2UqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBpbiBgaWNlX3Byb2JlYC4gVGhhdCdzIHdoZXJlIHdlJ3JlIHN1cHBvc2VkIHRvIGJlIGNoZWNraW5nIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgcmlnaHQ/IE1ha2VzIHNlbnNlLiBJdCdzIG9mdGVuIHRoZSBmaXJzdCBzdGVwIHdoZW4gdGhpbmdzIGdvIHdyb25nLCBzbyBsZXQncyBzdGFydCB3aXRoIGBpY2VfaW5pdF9od2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIElmIHRoaXMgcHJvYmUgZmFpbHMgd2UgbmVlZCB0byBjaGVjayB0aGUgYGljZV9pbml0X2h3YCBmdW5jdGlvbiBmb3IgZXJyb3JzLiBHb3R0YSBlbnN1cmUgd2UncmUgZ2V0dGluZyB0aG9zZSBjcnVjaWFsIGhhcmR3YXJlIGNvbXBvbmVudHMgdXAgYW5kIHJ1bm5pbmcgY29ycmVjdGx5LiBMZXQncyBzZWUgaWYgdGhpcyBpcyB3aGVyZSB0aGUgcm9vdCBjYXVzZSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MDcuNjMxMzI1MTE1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MDg2NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9pbml0X2h3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jPTEyMzU9c3RhdGljIGludCBpY2VfZGV2bGlua19yZWluaXRfdXAoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI0MjpcXHRlcnIgPSBpY2VfaW5pdF9odyhcXHUwMDI2cGYtXFx1MDAzZWh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0My1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jOjEyNDQ6XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpY2VfaW5pdF9odyBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjQ1LVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTk2MD1zdGF0aWMgaW50IF9fZndsb2dfaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTgzLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg0OiAqIGljZV9pbml0X2h3IC0gbWFpbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODUtICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4Ni0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjk4NzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI0LVxcdFxcdGdvdG8gZXJyX3Vucm9sbF9mbHRyX21nbXRfc3RydWN0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTEyNTpcXHRzdGF0dXMgPSBpY2VfaW5pdF9od190YmxzKGh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjYtXFx0aWYgKHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MTE1Nj1zdGF0aWMgdm9pZCBfX2Z3bG9nX2RlaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE2Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjExNjc6ICogaWNlX2RlaW5pdF9odyAtIHVucm9sbCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zIGRvbmUgYnkgaWNlX2luaXRfaHdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNjgtICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3MC0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb25seSBkdXJpbmcgbm9taW5hbCBvcGVyYXRpb24sIG5vdCBhcyBhIHJlc3VsdCBvZlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE3MTogKiBpY2VfaW5pdF9odygpIGZhaWxpbmcgc2luY2UgaWNlX2luaXRfaHcoKSB3aWxsIHRha2UgY2FyZSBvZiB1bnJvbGxpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNzItICogYXBwbGljYWJsZSBpbml0aWFsaXphdGlvbnMgaWYgaXQgZmFpbHMgZm9yIGFueSByZWFzb24uXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODM6aW50IGljZV9pbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTg0LXZvaWQgaWNlX2RlaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jPTIzODg9aW50IGljZV9jZmdfdHhfdG9wbyhzdHJ1Y3QgaWNlX2h3ICpodywgY29uc3Qgdm9pZCAqYnVmLCB1MzIgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0yNTQwLVxcdGljZV9kZWluaXRfaHcoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM6MjU0MTpcXHRpZiAoaWNlX2luaXRfaHcoaHcpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0yNTQyLVxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcXFwiRmFpbGVkIHRvIHJlLWluaXQgaGFyZHdhcmUgYWZ0ZXIgc2V0dGluZyBUeCB0b3BvbG9neVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTIxNTQ9dm9pZCBpY2VfY2xlYXJfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjE5Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jOjIxOTg6ICogaWNlX2luaXRfaHdfdGJscyAtIGluaXQgaGFyZHdhcmUgdGFibGUgbWVtb3J5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYy0yMTk5LSAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYy0yMjAwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjIwMTppbnQgaWNlX2luaXRfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIyMDIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaD01OD1ib29sIGljZV9pc19pbml0X3BrZ19zdWNjZXNzZnVsKGVudW0gaWNlX2RkcF9zdGF0ZSBzdGF0ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaDo1OTppbnQgaWNlX2luaXRfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaC02MC12b2lkIGljZV9mcmVlX3NlZyhzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU1PWljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyNDI6XFx0ZXJyID0gaWNlX2luaXRfaHcoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDMtXFx0aWYgKGVycikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyNDQ6XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpY2VfaW5pdF9odyBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmM9Njg9dTMyIGljZV9jb252X2xpbmtfc3BlZWRfdG9fdmlydGNobmwoYm9vbCBhZHZfbGlua19zdXBwb3J0LCB1MTYgbGlua19zcGVlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmMtODktICogMS4gVGhlIG1haWxib3ggc25hcHNob3Qgc3RydWN0dXJlLCBpY2VfbWJ4X3NuYXBzaG90LCBpcyBpbml0aWFsaXplZCBkdXJpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX21ieC5jOjkwOiAqIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiBpY2VfaW5pdF9odygpIHVzaW5nIGljZV9tYnhfaW5pdF9zbmFwc2hvdCgpLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmMtOTEtICogVGhlIHN0cnVjdCBpY2VfbWJ4X3NuYXBzaG90IGhlbHBzIHRvIHRyYWNrIGFuZCB0cmF2ZXJzZSBhIHN0YXRpYyB3aW5kb3cgb2ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MDcuNzI4NDIwMTU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1MzIyNjU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBGbG93IG9mIHRoZSBJbnRlbCBJY2UgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgZHJpdmVyIHN0YXJ0cyB1cCB3aXRoIGBpY2VfcHJvYmVgLiBBbmQgSSByZWNhbGwgdGhhdCBgaWNlX2luaXRfaHdgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHdpdGhpbiB0aGF0IGBpY2VfcHJvYmVgIHJvdXRpbmUuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8ganVtcCBkaXJlY3RseSBpbnRvIHRoZSBzb3VyY2UgY29kZSBmb3IgYGljZV9pbml0X2h3YCBpdHNlbGYsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoYXQgbGV2ZWwgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugd2l0aGluIHRoaXMgcGFydGljdWxhciBJbnRlbCBJY2UgZHJpdmVyLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSByZWdpc3RlciByZWFkcy93cml0ZXMgYW5kIHBvdGVudGlhbCBlYXJseSBjb25maWd1cmF0aW9uIHN0ZXBzLiBLbm93aW5nIGBpY2VfaW5pdF9od2AgaXMgY2FsbGVkIGR1cmluZyB0aGUgcHJvYmUgZ2l2ZXMgbWUgYSBoaWdoLWxldmVsIHZpZXcgYW5kIG1ha2VzIGl0IG9idmlvdXMgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGRlYnVnZ2luZyBpZiBpc3N1ZXMgYXJlIHJlcG9ydGVkIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MTIuNzgxNjUwODI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODUxOTU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpY2VfaW5pdF9od1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9OTYwPXN0YXRpYyBpbnQgX19md2xvZ19pbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzo5ODQ6ICogaWNlX2luaXRfaHcgLSBtYWluIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4NS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTg2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg3OmludCBpY2VfaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjQtXFx0XFx0Z290byBlcnJfdW5yb2xsX2ZsdHJfbWdtdF9zdHJ1Y3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTI1OlxcdHN0YXR1cyA9IGljZV9pbml0X2h3X3RibHMoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTEyNi1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0xMTU2PXN0YXRpYyB2b2lkIF9fZndsb2dfZGVpbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTY2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE2NzogKiBpY2VfZGVpbml0X2h3IC0gdW5yb2xsIGluaXRpYWxpemF0aW9uIG9wZXJhdGlvbnMgZG9uZSBieSBpY2VfaW5pdF9od1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE2OC0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTcwLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGR1cmluZyBub21pbmFsIG9wZXJhdGlvbiwgbm90IGFzIGEgcmVzdWx0IG9mXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTcxOiAqIGljZV9pbml0X2h3KCkgZmFpbGluZyBzaW5jZSBpY2VfaW5pdF9odygpIHdpbGwgdGFrZSBjYXJlIG9mIHVucm9sbGluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3Mi0gKiBhcHBsaWNhYmxlIGluaXRpYWxpemF0aW9ucyBpZiBpdCBmYWlscyBmb3IgYW55IHJlYXNvbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MTIuOTAwMjA2Mzk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NTY4MDQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBpY2VfaW5pdF9od2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBuYW1lLCBzbyBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgbml0dHktZ3JpdHR5IG9mIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZS5cIiBJIGtub3cgdGhpcyBsaWtlbHkgaW52b2x2ZXMgYSBjaGFpbiBvZiBldmVudHMsIG1heWJlIHN0YXJ0aW5nIHdpdGggcG93ZXItb24gc2VxdWVuY2luZywgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHRoZW4gbW92aW5nIGludG8gc2V0dGluZyB1cCB0aGUgbWVtb3J5IGNvbnRyb2xsZXJzIGFuZCBwb3NzaWJseSBhbnkgZnVuZGFtZW50YWwgcGVyaXBoZXJhbCBpbnRlcmZhY2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGV5IGhhbmRsZSB0aGluZ3MgbGlrZSByZXNldCBhc3NlcnRpb24gYW5kIGRlLWFzc2VydGlvbiBmb3IgdGhlIHZhcmlvdXMgSVAgYmxvY2tzLiBUaGUgYXJjaGl0ZWN0dXJlIGluIHVzZSB3aWxsIHN0cm9uZ2x5IGluZm9ybSBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpcyBhcHByb2FjaGVkLiBJcyBpdCBhIGhpZXJhcmNoaWNhbCBkZXNpZ24/IEEgbW9ub2xpdGhpYyBhcHByb2FjaD8gSSdsbCBiZSB3YXRjaGluZyB0byBzZWUgaG93IHRoZXkgaXNvbGF0ZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCB0b28sIGhvcGVmdWxseSwgaXTigJlzIGRvbmUgaW4gYSBjbGVhbiwgbWFpbnRhaW5hYmxlIHdheSB0aGF0IHVzZXMgYWJzdHJhY3Rpb24gbGF5ZXJzLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgbG93LWxldmVsIHJlZ2lzdGVyIHdyaXRlcyBhbmQgcmVhZGJhY2tzIHRoYXQgYXJlIGNyaXRpY2FsIHRvIGJyaW5naW5nIHRoZSBoYXJkd2FyZSB0byBhIHN0YWJsZSBzdGF0ZS4gRnJvbSBoZXJlLCB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBiZWdpbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNToxNi4xOTU4ODk2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY1NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTg3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4NzpcXHRpbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXFxuIDk4ODpcXHR7XFxuIDk4OTpcXHRcXHRzdHJ1Y3QgaWNlX2FxY19nZXRfcGh5X2NhcHNfZGF0YSAqcGNhcHMgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuIDk5MDpcXHRcXHR2b2lkICptYWNfYnVmIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbiA5OTE6XFx0XFx0dTE2IG1hY19idWZfbGVuO1xcbiA5OTI6XFx0XFx0aW50IHN0YXR1cztcXG4gOTkzOlxcdFxcbiA5OTQ6XFx0XFx0LyogU2V0IE1BQyB0eXBlIGJhc2VkIG9uIERldmljZUlEICovXFxuIDk5NTpcXHRcXHRzdGF0dXMgPSBpY2Vfc2V0X21hY190eXBlKGh3KTtcXG4gOTk2OlxcdFxcdGlmIChzdGF0dXMpXFxuIDk5NzpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRody1cXHUwMDNlcGZfaWQgPSBGSUVMRF9HRVQoUEZfRlVOQ19SSURfRlVOQ19OVU1fTSwgcmQzMihodywgUEZfRlVOQ19SSUQpKTtcXG4xMDAwOlxcdFxcbjEwMDE6XFx0XFx0c3RhdHVzID0gaWNlX3Jlc2V0KGh3LCBJQ0VfUkVTRVRfUEZSKTtcXG4xMDAyOlxcdFxcdGlmIChzdGF0dXMpXFxuMTAwMzpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRpY2VfZ2V0X2l0cl9pbnRybF9ncmFuKGh3KTtcXG4xMDA2OlxcdFxcbjEwMDc6XFx0XFx0c3RhdHVzID0gaWNlX2NyZWF0ZV9hbGxfY3RybHEoaHcpO1xcbjEwMDg6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDA5OlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdHN0YXR1cyA9IF9fZndsb2dfaW5pdChodyk7XFxuMTAxMjpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMTM6XFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0ZXX0xPRywgXFxcIkVycm9yIGluaXRpYWxpemluZyBGVyBsb2dnaW5nOiAlZFxcXFxuXFxcIixcXG4xMDE0OlxcdFxcdFxcdFxcdCAgc3RhdHVzKTtcXG4xMDE1OlxcdFxcbjEwMTY6XFx0XFx0c3RhdHVzID0gaWNlX2NsZWFyX3BmX2NmZyhodyk7XFxuMTAxNzpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMTg6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0LyogU2V0IGJpdCB0byBlbmFibGUgRmxvdyBEaXJlY3RvciBmaWx0ZXJzICovXFxuMTAyMTpcXHRcXHR3cjMyKGh3LCBQRlFGX0ZEX0VOQSwgUEZRRl9GRF9FTkFfRkRfRU5BX00pO1xcbjEwMjI6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmh3LVxcdTAwM2VmZGlyX2xpc3RfaGVhZCk7XFxuMTAyMzpcXHRcXG4xMDI0OlxcdFxcdGljZV9jbGVhcl9weGVfbW9kZShodyk7XFxuMTAyNTpcXHRcXG4xMDI2OlxcdFxcdHN0YXR1cyA9IGljZV9pbml0X252bShodyk7XFxuMTAyNzpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMjg6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcXG4xMDI5OlxcdFxcbjEwMzA6XFx0XFx0c3RhdHVzID0gaWNlX2dldF9jYXBzKGh3KTtcXG4xMDMxOlxcdFxcdGlmIChzdGF0dXMpXFxuMTAzMjpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHRpZiAoIWh3LVxcdTAwM2Vwb3J0X2luZm8pXFxuMTAzNTpcXHRcXHRcXHRody1cXHUwMDNlcG9ydF9pbmZvID0gZGV2bV9remFsbG9jKGljZV9od190b19kZXYoaHcpLFxcbjEwMzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKmh3LVxcdTAwM2Vwb3J0X2luZm8pLFxcbjEwMzc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4xMDM4OlxcdFxcdGlmICghaHctXFx1MDAzZXBvcnRfaW5mbykge1xcbjEwMzk6XFx0XFx0XFx0c3RhdHVzID0gLUVOT01FTTtcXG4xMDQwOlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XFxuMTA0MTpcXHRcXHR9XFxuMTA0MjpcXHRcXG4xMDQzOlxcdFxcdGh3LVxcdTAwM2Vwb3J0X2luZm8tXFx1MDAzZWxvY2FsX2Z3ZF9tb2RlID0gSUNFX0xPQ0FMX0ZXRF9NT0RFX0VOQUJMRUQ7XFxuMTA0NDpcXHRcXHQvKiBzZXQgdGhlIGJhY2sgcG9pbnRlciB0byBIVyAqL1xcbjEwNDU6XFx0XFx0aHctXFx1MDAzZXBvcnRfaW5mby1cXHUwMDNlaHcgPSBodztcXG4xMDQ2OlxcdFxcbjEwNDc6XFx0XFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggc3dpdGNoIGNvbmZpZ3VyYXRpb24gZGF0YSAqL1xcbjEwNDg6XFx0XFx0c3RhdHVzID0gaWNlX2dldF9pbml0aWFsX3N3X2NmZyhodyk7XFxuMTA0OTpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwNTA6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2FsbG9jO1xcbjEwNTE6XFx0XFxuMTA1MjpcXHRcXHRody1cXHUwMDNlZXZiX3ZlYiA9IHRydWU7XFxuMTA1MzpcXHRcXG4xMDU0OlxcdFxcdC8qIGluaXQgeGFycmF5IGZvciBpZGVudGlmeWluZyBzY2hlZHVsaW5nIG5vZGVzIHVuaXF1ZWx5ICovXFxuMTA1NTpcXHRcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZody1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VzY2hlZF9ub2RlX2lkcywgWEFfRkxBR1NfQUxMT0MpO1xcbjEwNTY6XFx0XFxuMTA1NzpcXHRcXHQvKiBRdWVyeSB0aGUgYWxsb2NhdGVkIHJlc291cmNlcyBmb3IgVHggc2NoZWR1bGVyICovXFxuMTA1ODpcXHRcXHRzdGF0dXMgPSBpY2Vfc2NoZWRfcXVlcnlfcmVzX2FsbG9jKGh3KTtcXG4xMDU5OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4xMDYwOlxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19TQ0hFRCwgXFxcIkZhaWxlZCB0byBnZXQgc2NoZWR1bGVyIGFsbG9jYXRlZCByZXNvdXJjZXNcXFxcblxcXCIpO1xcbjEwNjE6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2FsbG9jO1xcbjEwNjI6XFx0XFx0fVxcbjEwNjM6XFx0XFx0aWNlX3NjaGVkX2dldF9wc21fY2xrX2ZyZXEoaHcpO1xcbjEwNjQ6XFx0XFxuMTA2NTpcXHRcXHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBzY2hlZHVsZXIgZGF0YSAqL1xcbjEwNjY6XFx0XFx0c3RhdHVzID0gaWNlX3NjaGVkX2luaXRfcG9ydChody1cXHUwMDNlcG9ydF9pbmZvKTtcXG4xMDY3OlxcdFxcdGlmIChzdGF0dXMpXFxuMTA2ODpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfc2NoZWQ7XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdHBjYXBzID0ga3phbGxvY19vYmooKnBjYXBzKTtcXG4xMDcxOlxcdFxcdGlmICghcGNhcHMpIHtcXG4xMDcyOlxcdFxcdFxcdHN0YXR1cyA9IC1FTk9NRU07XFxuMTA3MzpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfc2NoZWQ7XFxuMTA3NDpcXHRcXHR9XFxuMTA3NTpcXHRcXG4xMDc2OlxcdFxcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIFBIWSBjYXBhYmlsaXRpZXMgKi9cXG4xMDc3OlxcdFxcdHN0YXR1cyA9IGljZV9hcV9nZXRfcGh5X2NhcHMoaHctXFx1MDAzZXBvcnRfaW5mbywgZmFsc2UsXFxuMTA3ODpcXHRcXHRcXHRcXHRcXHQgICAgIElDRV9BUUNfUkVQT1JUX1RPUE9fQ0FQX01FRElBLCBwY2FwcyxcXG4xMDc5OlxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCk7XFxuMTA4MDpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwODE6XFx0XFx0XFx0ZGV2X3dhcm4oaWNlX2h3X3RvX2RldihodyksIFxcXCJHZXQgUEhZIGNhcGFiaWxpdGllcyBmYWlsZWQgc3RhdHVzID0gJWQsIGNvbnRpbnVpbmcgYW55d2F5XFxcXG5cXFwiLFxcbjEwODI6XFx0XFx0XFx0XFx0IHN0YXR1cyk7XFxuMTA4MzpcXHRcXG4xMDg0OlxcdFxcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIGxpbmsgaW5mb3JtYXRpb24gKi9cXG4xMDg1OlxcdFxcdHN0YXR1cyA9IGljZV9hcV9nZXRfbGlua19pbmZvKGh3LVxcdTAwM2Vwb3J0X2luZm8sIGZhbHNlLCBOVUxMLCBOVUxMKTtcXG4xMDg2OlxcdFxcdGlmIChzdGF0dXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjE2LjE5ODQ1OTUxOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQ5ODU3ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gaW4gdGhlIElDRSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBJQ0UgZHJpdmVyIGluaXRpYWxpemVzLiBGaXJzdCwgaXQgY2FsbHMgYGljZV9jcmVhdGVfYWxsX2N0cmxxKGh3KWAgdG8gc2V0IHVwIHRoZSBBZG1pbiBRdWV1ZSwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lLiBUaGVuLCB3ZSBoYXZlIGBpY2VfaW5pdF9udm0oaHcpYCBhbmQgYGljZV9nZXRfY2FwcyhodylgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5J3JlIHRoZSBvbmVzIHNlbmRpbmcgdGhvc2UgQVEgY29tbWFuZHMgdG8gdGhlIGhhcmR3YXJlLiBOb3csIGEgZmFpbHVyZSBoZXJlIOKAkyBlaXRoZXIgbm8gaGFyZHdhcmUgcHJlc2VudCBvciBhIG5vbi1yZXNwb25zaXZlIGRldmljZSDigJMgbWVhbnMgYGljZV9pbml0X2h3YCBpcyBnb2luZyB0byBib21iIG91dC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQsIGJlaW5nIHRoZSBleHBlcnQgSSBhbSwgaXMgd2hldGhlciBTeXprYWxsZXIgY291bGQgZnV6eiB0aGlzLiBDYW4gd2UgaW5qZWN0IGZha2UgUENJIHJlc3BvbnNlcyBhbmQgbWVzcyB3aXRoIGl0PyBCdXQsIHJlYWxpc3RpY2FsbHksIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSByb2J1c3QgUENJIGVtdWxhdG9yIHRoYXQgY2FuIHJlcGxpY2F0ZSB0aGUgY29tcGxleGl0eSBvZiBzb21ldGhpbmcgbGlrZSB0aGUgSUNFIEFkbWluIFF1ZXVlLiBUaGlzIEFRIHVzZXMgRE1BIHJpbmdzLCBzbyB0aGUgZHJpdmVyIHdyaXRlcyBkZXNjcmlwdG9ycyB0byBtZW1vcnkgcmluZ3MgYW5kIG1hbmlwdWxhdGVzIHRhaWwgcG9pbnRlcnMsIHdoaWxlIHRoZSBoYXJkd2FyZSByZWFkcyB0aGUgZGVzY3JpcHRvcnMsIGV4ZWN1dGVzIGNvbW1hbmRzLCB3cml0ZXMgcmVzdWx0cyBiYWNrLCBhbmQgdXBkYXRlcyBoZWFkIHBvaW50ZXJzLiBUaGlzIHNldHVwJ3MgaW50cmljYXRlLlxuXG5TaW11bGF0aW5nIHRoaXMgaW4gU3l6a2FsbGVyIGlzIGEgbmlnaHRtYXJlIGJlY2F1c2UgeW91IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBETUEgcmluZyBsYXlvdXQgYW5kIGRlc2NyaXB0b3IgZm9ybWF0cywgd2hpY2ggYXJlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIElDRSBoYXJkd2FyZS4gU28sIGBpY2VfcHJvYmVgIGlzIGxpa2VseSB0byBmYWlsIGVhcmx5LCBhbmQgdGhlIGRyaXZlciB3b24ndCBldmVuIHJlZ2lzdGVyLlxuXG5UaGlzIGlzIGFsbCBjcnVjaWFsIGJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgSSdtIGZvY3VzaW5nIG9uLCBzcGVjaWZpY2FsbHkgaW4gYGljZV9yZWFkX2ZsYXRfbnZtYCwgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIGRyaXZlciBzdWNjZXNzZnVsbHkgcHJvYmVzIGFuZCByZWdpc3RlcnMgZGV2bGluay9ldGh0b29sIGludGVyZmFjZXMsIG9yIHBvdGVudGlhbGx5IGR1cmluZyB0aGUgcHJvYmUgaWYgYGljZV9pbml0X252bWAgY2FsbHMgaXQuIFNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIGlmIGBpY2VfaW5pdF9udm1gIGNhbGxzIGBpY2VfcmVhZF9mbGF0X252bWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MjIuMDQ4MzIzNjk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5OTU2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2luaXRfbnZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz05ODc9aW50IGljZV9pbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMDI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTAyNjpcXHRzdGF0dXMgPSBpY2VfaW5pdF9udm0oaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTAyNy1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MTc3Nz1zdGF0aWMgdm9pZCBpY2VfaGFuZGxlX21kZF9ldmVudChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTE5MjUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTkyNjogKiBpY2VfaW5pdF9udm1fcGh5X3R5cGUgLSBJbml0aWFsaXplIHRoZSBOVk0gUEhZIHR5cGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xOTI3LSAqIEBwaTogcG9ydCBpbmZvIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTkzMC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzoxOTMxOnN0YXRpYyBpbnQgaWNlX2luaXRfbnZtX3BoeV90eXBlKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xOTMyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3OTI9c3RhdGljIHZvaWQgaWNlX2luaXRfbGluayhzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ4MDEtXFx0Lyogbm90IGEgZmF0YWwgZXJyb3IgaWYgdGhpcyBmYWlscyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ4MDI6XFx0ZXJyID0gaWNlX2luaXRfbnZtX3BoeV90eXBlKHBmLVxcdTAwM2Vody5wb3J0X2luZm8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ4MDMtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo0ODA0OlxcdFxcdGRldl9lcnIoZGV2LCBcXFwiaWNlX2luaXRfbnZtX3BoeV90eXBlIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDgwNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTc2Mzc9c3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzY4NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3Njg1OlxcdGVyciA9IGljZV9pbml0X252bShodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzY4Ni1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NzY4NzpcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9pbml0X252bSBmYWlsZWQgJWRcXFxcblxcXCIsIGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzY4OC1cXHRcXHRnb3RvIGVycl9pbml0X2N0cmxxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xMDkyPXN0YXRpYyBpbnQgaWNlX2RldGVybWluZV9jc3NfaGRyX2xlbihzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTExMC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExMTE6ICogaWNlX2luaXRfbnZtIC0gaW5pdGlhbGl6ZXMgTlZNIHNldHRpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTExMTItICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTExNi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExMTc6aW50IGljZV9pbml0X252bShzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTExMTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaD0zMD1pbnQgaWNlX3JlYWRfcGJhX3N0cmluZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggKnBiYV9udW0sIHUzMiBwYmFfbnVtX3NpemUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmg6MzE6aW50IGljZV9pbml0X252bShzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaC0zMi1pbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MjIuMjI2MzI1MTIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODYzNTc2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOVk0gSW5pdGlhbGl6YXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaWNlX2luaXRfbnZtYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBpbml0aWFsaXppbmcgdGhlIE5vbi1Wb2xhdGlsZSBNZW1vcnkgKE5WTSkgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlIE5WTSBpcyBjcml0aWNhbCwgc28gYSBjYXJlZnVsIGFuYWx5c2lzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGVzc2VudGlhbC5cblxuTXkgZmlyc3QgaHVuY2ggaXMgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJIHN1c3BlY3QgdGhhdCBhIGZ1bmN0aW9uIHN1Y2ggYXMgYGljZV9pbml0X252bWAgd291bGQgYmUgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgTlZNLCBsaWtlbHkgYnkgcmVhZGluZyBkYXRhIGZyb20gaXQuIEkgbmVlZCB0byBrbm93ICpob3cqIGBpY2VfaW5pdF9udm1gIGFjY29tcGxpc2hlcyB0aGlzIGluaXRpYWxpemF0aW9uLiBHaXZlbiB0aGF0IGBpY2VfcmVhZF9mbGF0X252bWAgbG9va3MgbGlrZSBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBpcyB3ZWxsLXN1aXRlZCB0byBhY2Nlc3NpbmcgTlZNIGluIGEgZmxhdCwgbGluZWFyIHdheSwgbXkgbWluZCBpcyBkcmF3biB0byB0aGlua2luZyBcIkkgd29uZGVyIGlmIGBpY2VfaW5pdF9udm1gIGNhbGxzIGBpY2VfcmVhZF9mbGF0X252bWA/XCIgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uIGFuZCBpdCBpcyBhbiBlc3NlbnRpYWwgcGllY2Ugb2YgdGhlIGxhcmdlciBwdXp6bGUgb2YgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIE5WTS4gVGhlIGFuc3dlciB3aWxsIGxpa2VseSBkaXJlY3QgbXkgaW52ZXN0aWdhdGlvbiB0byBvdGhlciBmdW5jdGlvbiBjYWxscyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjI1LjkxMjY4NjA4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDc2NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9yZWFkX2ZsYXRfbnZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0yMT1pbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtNDktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzo1MDogKiBpY2VfcmVhZF9mbGF0X252bSAtIFJlYWQgcG9ydGlvbiBvZiBOVk0gYnkgZmxhdCBvZmZzZXRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTUxLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTY5PWludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6NzA6aWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTcxLVxcdFxcdCAgYm9vbCByZWFkX3NoYWRvd19yYW0pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTE4ND1pbnQgaWNlX2FxX2VyYXNlX252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG1vZHVsZV90eXBlaWQsIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMDYtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjIwNzogKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9mbGF0X252bS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIwOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTIwOT1zdGF0aWMgaW50IGljZV9yZWFkX3NyX3dvcmRfYXEoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MjE1OlxcdC8qIE5vdGUgdGhhdCBpY2VfcmVhZF9mbGF0X252bSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIDRLYiBBZG1pblEgYW5kXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMTYtXFx0ICogU2hhZG93IFJBTSBzZWN0b3IgcmVzdHJpY3Rpb25zIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgTlZNLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjE3LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MjE4OlxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQgKiBzaXplb2YodTE2KSwgXFx1MDAyNmJ5dGVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjE5LVxcdFxcdFxcdFxcdCAgIChfX2ZvcmNlIHU4ICopXFx1MDAyNmRhdGFfbG9jYWwsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0zNDI9aWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0zNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzozNTU6XFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICsgb2Zmc2V0LCBcXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0zNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTQyND1pY2VfcmVhZF9uZXRsaXN0X21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy00NDQtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjQ0NTogKiBUaGUgTlZNIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGludGVybmFsbHkgYnkgaWNlX3JlYWRfZmxhdF9udm0oKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtNDQ2LSAqIGFyb3VuZCB0aGUgRlcgcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTg2Nz1zdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy04NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzo4Nzc6XFx0XFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIG9mZnNldCwgXFx1MDAyNmxlbiwgXFx1MDAyNmRhdGEsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg3OC1cXHRcXHRpZiAoc3RhdHVzID09IC1FSU8gXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MjYuMDE1NzcyMTA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDYxMTY3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgRmxhc2ggRGlzY292ZXJ5IExvZ2ljKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGZsYXNoIHNpemUgZGlzY292ZXJ5IHByb2Nlc3MgaGVyZS4gSXQncyBjbGVhciB0aGF0IHRoZSBmdW5jdGlvbiBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgIHBsYXlzIGEgY3JpdGljYWwgcm9sZS4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgIG1ha2VzIGEgY2FsbCB0byBgaWNlX3JlYWRfZmxhdF9udm1gLiBTbywgdGhlIGZsYXNoIHNpemUgZGlzY292ZXJ5IGZ1bmN0aW9uYWxpdHkgcmVsaWVzIGRpcmVjdGx5IG9uIHJlYWRpbmcgZnJvbSB0aGUgbm9uLXZvbGF0aWxlIG1lbW9yeSB0aHJvdWdoIHRoYXQgYGljZV9yZWFkX2ZsYXRfbnZtYCBmdW5jdGlvbi4gTm93LCB3aGVyZSBpcyBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgIGJlaW5nIGluaXRpYXRlZD8gRXhhbWluaW5nIHRoZSBjYWxsIHN0YWNrLCBJIHNlZSB0aGF0IGBpY2VfaW5pdF9udm1gIGFjdHVhbGx5IGNhbGxzIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGUgZmxhc2ggc2l6ZSBkZXRlY3Rpb24gaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBOVk0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgYXMgSSBjb250aW51ZSB0byBkZWJ1ZyB0aGlzIHN5c3RlbSBvciBpbnRlZ3JhdGUgYSBuZXcgZmxhc2ggY2hpcC4gVGhpcyBpcyBleGFjdGx5IHRoZSBzb3J0IG9mIGxvdy1sZXZlbCBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZWZvcmUgSSBnZXQgdG8gdGhlIGFwcGxpY2F0aW9uLWxldmVsIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MzIuNDYxODkzODY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkzNzcyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTg1ND1pbnQgaWNlX2dldF9pbmFjdGl2ZV9uZXRsaXN0X3ZlcihzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9uZXRsaXN0X2luZm8gKm5ldGxpc3QpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg1OS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjg2MDogKiBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZSAtIERpc2NvdmVyIHRoZSBhdmFpbGFibGUgZmxhc2ggc2l6ZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg2MS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy04NjYtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzo4Njc6c3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg2OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTExMTc9aW50IGljZV9pbml0X252bShzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExNDQ6XFx0c3RhdHVzID0gaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE0NS1cXHRpZiAoc3RhdHVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjMyLjU3MTI3NzY3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDIwNjAxMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlZNIEluaXRpYWxpemF0aW9uIGFuZCBSZWFkIFBhdGgqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgdW5kZXJzdGFuZGluZyBob3cgdGhlIE5vbi1Wb2xhdGlsZSBNZW1vcnkgKE5WTSkgaW5pdGlhbGl6YXRpb24gd29ya3MgaW4gdGhpcyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGBpY2VfaW5pdF9udm1gIGtpY2tzIHRoaW5ncyBvZmYgYnkgY2FsbGluZyBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgaWNlX3JlYWRfZmxhdF9udm1gLiBUaGUgY3J1Y2lhbCBwaWVjZSBpcyB0aGF0IGBpY2VfaW5pdF9udm1gIGRlcGVuZHMgb24gYSBmdW5jdGlvbmluZyBoYXJkd2FyZSBBZG1pbiBRdWV1ZSAoQVEpLiBJZiB0aGVyZSdzIG5vIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBpZiB0aGUgZHJpdmVyIGlzbid0IHByb3Blcmx5IGluaXRpYWxpemVkLCBgaWNlX2luaXRfbnZtYCBpcyBib3VuZCB0byBmYWlsLlxuXG5Ob3csIGlmIGBpY2VfaW5pdF9udm1gIGZhaWxzLCBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgIGlzIHN0aWxsIGNhbGxlZCwgbGVhZGluZyB0byBgaWNlX3JlYWRfZmxhdF9udm1gIGJlaW5nIGV4ZWN1dGVkLCBldmVuIGluIHRoZSBhYnNlbmNlIG9mIGhhcmR3YXJlLiBUaGlzIHBhdGggYXR0ZW1wdHMgdG8gYWNxdWlyZSBOVk0gYWNjZXNzIHVzaW5nIGBpY2VfYWNxdWlyZV9udm1gIGFuZCB0aGVuIHJlYWQgdmlhIGBpY2VfYXFfcmVhZF9udm1gLiBIb3dldmVyLCBzaW5jZSB0aGUgQVEgaXNuJ3QgZnVuY3Rpb25hbCwgYGljZV9hcV9yZWFkX252bWAgd2lsbCBpbmV2aXRhYmx5IHRpbWUgb3V0IG9yIGZhaWwuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nP1xuXG5UaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBgaWNlX3JlYWRfZmxhdF9udm1gIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBhY3F1aXJlcyBhIGxvY2ssIHJlYWRzLCBhbmQgdGhlbiByZWxlYXNlcyB0aGUgbG9jay4gVGhlIG1vZGlmaWVkIHZlcnNpb24gbm93IGFjcXVpcmVzIHRoZSBsb2NrICppbnNpZGUqIHRoZSByZWFkIGZ1bmN0aW9uLCBiZWZvcmUgdGhlIEFRIGNvbW1hbmQuIE1vcmUgaW1wb3J0YW50bHksIGl0IHNlZW1zIHRoYXQgaWYgYGljZV9hcV9yZWFkX252bWAgKmRvZXMqIGZhaWwsIHRoZSBkcml2ZXIgc3RvcmVzIHRoZSBsYXN0IEFRIHN0YXR1cywgY2FsbHMgYGljZV9yZWxlYXNlX252bWAgdG8gcmVsZWFzZSB0aGUgbG9jaywgYW5kIHRoZW4gKnJlc3RvcmVzKiB0aGUgQVEgc3RhdHVzLlxuXG5UaGUgaXNzdWUgaXMgdGhhdCBpZiBgaWNlX2FxX3JlYWRfbnZtYCBjb25zaXN0ZW50bHkgZmFpbHMsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvciB3aXRob3V0IHJlYWwgaGFyZHdhcmUsIGFueSBmdXp6aW5nIGF0dGVtcHRzIGFyZSBnb2luZyB0byBiZSBwcmVkaWN0YWJsZS4gU3l6a2FsbGVyLCBpbiB0aGlzIGNhc2UsIHdvdWxkIGNvbnN0YW50bHkgaGl0IHRoZSBmYWlsdXJlIHBhdGggZHVlIHRvIHRoZSBub24tZnVuY3Rpb25hbCBBUS4gSXTigJlzIGVzc2VudGlhbGx5IGEgbG9jayBhY3F1aXNpdGlvbi9yZWxlYXNlIGFyb3VuZCBhIGZhaWxpbmcgQVEgY29tbWFuZCwgYW5kIHRoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoaXMgZmFpbHVyZSwgc28gSSBkb24ndCBzZWUgYW55IGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlIGhlcmUuIEV2ZW4gaWYgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgdHJpZ2dlciB0aGlzLCB0aGUgb3V0Y29tZSB3b3VsZCBiZSBjb25zaXN0ZW50IHRpbWVvdXRzLiBUaGUgQVEgcmVzcG9uc2UgY2FuJ3QgYmUgY29udHJvbGxlZC4gQW5kIHllcywgYGljZV9hY3F1aXJlX252bWAgZG9lcyByZWx5IG9uIHRoZSBBZG1pbiBRdWV1ZS4gU28gbm8sIHRoaXMgZG9lc24ndCBzZWVtIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjQxLjk5MTg5MDgwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNjkxMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9hY3F1aXJlX252bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9NzA9aWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MTAxOlxcdFxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTEwMi1cXHRcXHRpZiAoc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0yMDk9c3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIyNy0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjIyODogKiBpY2VfYWNxdWlyZV9udm0gLSBHZW5lcmljIHJlcXVlc3QgZm9yIGFjcXVpcmluZyB0aGUgTlZNIG93bmVyc2hpcFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjI5LSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIzMy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjIzNDppbnQgaWNlX2FjcXVpcmVfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfYWNjZXNzX3R5cGUgYWNjZXNzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9MTE4Nj1pbnQgaWNlX252bV92YWxpZGF0ZV9jaGVja3N1bShzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExOTI6XFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE5My1cXHRpZiAoc3RhdHVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNTo0Mi40MzQ1ODc0NTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MjA2NjIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIElDRSBOVk0gQWNxdWlzaXRpb24qKlxuXG5BbHJpZ2h0LCBteSBicmFpbiBpcyBhbHJlYWR5IHplcm9pbmcgaW4uIExldCdzIGdldCByaWdodCBpbnRvIHRoZSBjb2RlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBpY2VfYWNxdWlyZV9udm1gIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTlZNIGFjcXVpc2l0aW9uIHByb2Nlc3Mgd29ya3MgZm9yIHRoaXMgSW50ZWwgRXRoZXJuZXQgY29udHJvbGxlciAoSUNFKS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGdyYXNwIHRoZSBpbml0aWFsaXphdGlvbiwgdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IG9mIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGxvdy1sZXZlbCBOVk0gaW50ZXJmYWNlIGZ1bmN0aW9ucyBhbmQgYW55IHJlbGV2YW50IHBvd2VyIG1hbmFnZW1lbnQgb3IgaGFyZHdhcmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBwcm9jZXNzLiBNeSBiYWNrZ3JvdW5kIGlzIGRlZXAgZW5vdWdoIHRoYXQgSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgc3RyYXRlZ2llcyB0aGF0IHRoZSBkcml2ZXIgdXNlcyB0byBlbnN1cmUgdGhlIE5WTSBpcyBhY2Nlc3NlZCByZWxpYWJseS4gTXkgZ29hbCBpcyB0byBjb21wbGV0ZWx5IGRpc3NlY3QgaXRzIGJlaGF2aW9yLCB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaGFyZHdhcmUsIGFuZCBpZGVudGlmeSBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4MSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjQ4LjgwNjY1ODA0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDczNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzQ6XFx0aW50IGljZV9hY3F1aXJlX252bShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcylcXG4gMjM1OlxcdHtcXG4gMjM2OlxcdFxcdGlmIChody1cXHUwMDNlZmxhc2guYmxhbmtfbnZtX21vZGUpXFxuIDIzNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjM4OlxcdFxcbiAyMzk6XFx0XFx0cmV0dXJuIGljZV9hY3F1aXJlX3JlcyhodywgSUNFX05WTV9SRVNfSUQsIGFjY2VzcywgSUNFX05WTV9USU1FT1VUKTtcXG4gMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0LyoqXFxuIDI0MzpcXHQgKiBpY2VfcmVsZWFzZV9udm0gLSBHZW5lcmljIHJlcXVlc3QgZm9yIHJlbGVhc2luZyB0aGUgTlZNIG93bmVyc2hpcFxcbiAyNDQ6XFx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4gMjQ1OlxcdCAqXFxuIDI0NjpcXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVsZWFzZSBOVk0gb3duZXJzaGlwLlxcbiAyNDc6XFx0ICovXFxuIDI0ODpcXHR2b2lkIGljZV9yZWxlYXNlX252bShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdGlmIChody1cXHUwMDNlZmxhc2guYmxhbmtfbnZtX21vZGUpXFxuIDI1MTpcXHRcXHRcXHRyZXR1cm47XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdGljZV9yZWxlYXNlX3JlcyhodywgSUNFX05WTV9SRVNfSUQpO1xcbiAyNTQ6XFx0fVxcbiAyNTU6XFx0XFxuIDI1NjpcXHQvKipcXG4gMjU3OlxcdCAqIGljZV9nZXRfZmxhc2hfYmFua19vZmZzZXQgLSBHZXQgb2Zmc2V0IGludG8gcmVxdWVzdGVkIGZsYXNoIGJhbmtcXG4gMjU4OlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuIDI1OTpcXHQgKiBAYmFuazogd2hldGhlciB0byByZWFkIGZyb20gdGhlIGFjdGl2ZSBvciBpbmFjdGl2ZSBmbGFzaCBiYW5rXFxuIDI2MDpcXHQgKiBAbW9kdWxlOiB0aGUgbW9kdWxlIHRvIHJlYWQgZnJvbVxcbiAyNjE6XFx0ICpcXG4gMjYyOlxcdCAqIEJhc2VkIG9uIHRoZSBtb2R1bGUsIGxvb2t1cCB0aGUgbW9kdWxlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlXFxuIDI2MzpcXHQgKiBmbGFzaC5cXG4gMjY0OlxcdCAqXFxuIDI2NTpcXHQgKiBSZXR1cm5zIHRoZSBmbGFzaCBvZmZzZXQuIE5vdGUgdGhhdCBhIHZhbHVlIG9mIHplcm8gaXMgaW52YWxpZCBhbmQgbXVzdCBiZVxcbiAyNjY6XFx0ICogdHJlYXRlZCBhcyBhbiBlcnJvci5cXG4gMjY3OlxcdCAqL1xcbiAyNjg6XFx0c3RhdGljIHUzMiBpY2VfZ2V0X2ZsYXNoX2Jhbmtfb2Zmc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlKVxcbiAyNjk6XFx0e1xcbiAyNzA6XFx0XFx0c3RydWN0IGljZV9iYW5rX2luZm8gKmJhbmtzID0gXFx1MDAyNmh3LVxcdTAwM2VmbGFzaC5iYW5rcztcXG4gMjcxOlxcdFxcdGVudW0gaWNlX2ZsYXNoX2JhbmsgYWN0aXZlX2Jhbms7XFxuIDI3MjpcXHRcXHRib29sIHNlY29uZF9iYW5rX2FjdGl2ZTtcXG4gMjczOlxcdFxcdHUzMiBvZmZzZXQsIHNpemU7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdHN3aXRjaCAobW9kdWxlKSB7XFxuIDI3NjpcXHRcXHRjYXNlIElDRV9TUl8xU1RfTlZNX0JBTktfUFRSOlxcbiAyNzc6XFx0XFx0XFx0b2Zmc2V0ID0gYmFua3MtXFx1MDAzZW52bV9wdHI7XFxuIDI3ODpcXHRcXHRcXHRzaXplID0gYmFua3MtXFx1MDAzZW52bV9zaXplO1xcbiAyNzk6XFx0XFx0XFx0YWN0aXZlX2JhbmsgPSBiYW5rcy1cXHUwMDNlbnZtX2Jhbms7XFxuIDI4MDpcXHRcXHRcXHRicmVhaztcXG4gMjgxOlxcdFxcdGNhc2UgSUNFX1NSXzFTVF9PUk9NX0JBTktfUFRSOlxcbiAyODI6XFx0XFx0XFx0b2Zmc2V0ID0gYmFua3MtXFx1MDAzZW9yb21fcHRyO1xcbiAyODM6XFx0XFx0XFx0c2l6ZSA9IGJhbmtzLVxcdTAwM2Vvcm9tX3NpemU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjQ4LjgwNjkwNzc5OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYxNTAwNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKlJlc291cmNlIE1hbmFnZW1lbnQgaW4gdGhlIEljZSBMYXllcioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBpdCdzIGxldmVyYWdpbmcgYGljZV9hY3F1aXJlX3Jlc2AgYW5kIGBpY2VfcmVsZWFzZV9yZXNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgXCJpY2VcIiBsYXllciDigJMgYW5kIHRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIG9mIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgd2UncmUgZGlzY3Vzc2luZy4gVGhlc2UgZnVuY3Rpb24gY2FsbHMgYXJlIG15IGJyZWFkIGFuZCBidXR0ZXIgaW4gc2l0dWF0aW9ucyBsaWtlIHRoaXMuIEl04oCZcyBwcmV0dHkgb2J2aW91cyB0aGV5J3JlIGFjdGluZyBhcyBnYXRla2VlcGVycywgY29udHJvbGxpbmcgYWNjZXNzIHRvIHNvbWV0aGluZyBjcml0aWNhbC4gVGhlIFwiYWNxdWlyZVwiIHN0cm9uZ2x5IHN1Z2dlc3RzIGdyYWJiaW5nIGV4Y2x1c2l2ZSBvciBzaGFyZWQgYWNjZXNzLCBsaWtlbHkgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBcIlJlbGVhc2UsXCIgdGhlbiwgc3ltbWV0cmljYWxseSByZWxpbnF1aXNoZXMgdGhhdCBjb250cm9sLCBob3BlZnVsbHkgaW4gYSB0aWR5IGFuZCBwcmVkaWN0YWJsZSBtYW5uZXIuIEkgbmVlZCB0byBkaWcgZGVlcGVyLCBvZiBjb3Vyc2UsIGJ1dCBqdXN0IGZyb20gdGhlc2UgbmFtZXMsIEknbSBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBjb250cm9sbGVkIGFjY2VzcyB0byBhIHNoYXJlZCByZXNvdXJjZSB3aXRoaW4gdGhlIHN5c3RlbSdzIFwiaWNlXCIgY29tcG9uZW50LiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMg4oCTIGJ1dCB0aGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZpZ3VyaW5nIG91dCAqd2hhdCogcmVzb3VyY2UgaXMgYmVpbmcgbWFuYWdlZCwgKndoeSogaXQgbmVlZHMgY29udHJvbGxlZCBhY2Nlc3MsIGFuZCAqaG93KiB0aGUgc3lzdGVtIGVuc3VyZXMgcHJvcGVyIHN5bmNocm9uaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjUxLjk2ODQxMTQwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MDMyNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9hY3F1aXJlX3Jlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MjEzMT1pY2VfYXFfcmVsZWFzZV9yZXMoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19pZHMgcmVzLCB1OCBzZHBfbnVtYmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTQ3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MjE0ODogKiBpY2VfYWNxdWlyZV9yZXNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxNDktICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MjE1Nj1pbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjIxNTc6aWNlX2FjcXVpcmVfcmVzKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfaWRzIHJlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxNTgtXFx0XFx0ZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcywgdTMyIHRpbWVvdXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxNzItXFx0aWYgKHN0YXR1cyA9PSAtRUFMUkVBRFkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoyMTczOlxcdFxcdGdvdG8gaWNlX2FjcXVpcmVfcmVzX2V4aXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTc0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTk1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MjE5NjppY2VfYWNxdWlyZV9yZXNfZXhpdDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxOTctXFx0aWYgKHN0YXR1cyA9PSAtRUFMUkVBRFkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg9OTc9aW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaDo5ODppY2VfYWNxdWlyZV9yZXMoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19pZHMgcmVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtOTktXFx0XFx0ZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcywgdTMyIHRpbWVvdXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYz0xMTM2PXN0YXRpYyBpbnQgaWNlX2FjcXVpcmVfZ2xvYmFsX2NmZ19sb2NrKHN0cnVjdCBpY2VfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0xMTQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM6MTE0MTpcXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9yZXMoaHcsIElDRV9HTE9CQUxfQ0ZHX0xPQ0tfUkVTX0lELCBhY2Nlc3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0xMTQyLVxcdFxcdFxcdFxcdCBJQ0VfR0xPQkFMX0NGR19MT0NLX1RJTUVPVVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYz0yMzg4PWludCBpY2VfY2ZnX3R4X3RvcG8oc3RydWN0IGljZV9odyAqaHcsIGNvbnN0IHZvaWQgKmJ1ZiwgdTMyIGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmMtMjUwMS1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jOjI1MDI6XFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfcmVzKGh3LCBJQ0VfR0xPQkFMX0NGR19MT0NLX1JFU19JRCwgSUNFX1JFU19XUklURSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1MDMtXFx0XFx0XFx0XFx0IElDRV9HTE9CQUxfQ0ZHX0xPQ0tfVElNRU9VVCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTI3OD1pY2VfYWNxdWlyZV9jaGFuZ2VfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTI3OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYzoyODA6XFx0cmV0dXJuIGljZV9hY3F1aXJlX3JlcyhodywgSUNFX0NIQU5HRV9MT0NLX1JFU19JRCwgYWNjZXNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjgxLVxcdFxcdFxcdCAgICAgICBJQ0VfQ0hBTkdFX0xPQ0tfVElNRU9VVCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTIzND1pbnQgaWNlX2FjcXVpcmVfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfYWNjZXNzX3R5cGUgYWNjZXNzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMzk6XFx0cmV0dXJuIGljZV9hY3F1aXJlX3JlcyhodywgSUNFX05WTV9SRVNfSUQsIGFjY2VzcywgSUNFX05WTV9USU1FT1VUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTI0MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjUyLjE1NDQ1NTgyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTAxOTA0NTI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQ29kZSBhbmQgaXRzIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBvZiB0aGlzIGBpY2VfcmVhZF9mbGF0X252bWAgZnVuY3Rpb24gYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgSSd2ZSBjb21lIHRvIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhpcyBwYXRjaCwgaW4gaXRzIGN1cnJlbnQgZm9ybSwgaXNuJ3Qgc29tZXRoaW5nIHRoYXQncyB3b3J0aCBmdXp6aW5nLiBIZXJlJ3Mgd2h5OlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBjb2RlIGlzIGRlZXBseSB0aWVkIHRvIHRoZSBoYXJkd2FyZS4gYGljZV9yZWFkX2ZsYXRfbnZtYCBpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIHdoZXJlIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgbm9uLXZvbGF0aWxlIG1lbW9yeSAoTlZNKSBvbiBhbiBJbnRlbCBJQ0UgbmV0d29yayBhZGFwdGVyLiBUaGUgY29yZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24gcmVsaWVzIGhlYXZpbHkgb24gdGhlIEFkbWluIFF1ZXVlIChBUSkgb2YgdGhlIGhhcmR3YXJlLCB3aGljaCBpcyBtYW5hZ2VkIHZpYSBgaWNlX2FjcXVpcmVfbnZtYCBhbmQgYGljZV9yZWxlYXNlX252bWAuIFRoZSBgaWNlX2FxX2FsbG9jX2ZyZWVfcmVzYCBmdW5jdGlvbiBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgYGljZV9hY3F1aXJlX3Jlc2AgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJ5IGBpY2VfYWNxdWlyZV9udm1gLCBzaG93aW5nIHRoYXQgTlZNIGNvbW1hbmRzIHV0aWxpemUgdGhlIEFkbWluIFF1ZXVlLiBUaGlzIEFkbWluIFF1ZXVlIGlzIG5vdCBnb2luZyB0byB3b3JrIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBwcmVzZW50IGFuZCBydW5uaW5nLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBjb2RlIHRyaWVzIHRvIGFjcXVpcmUgYW4gTlZNIGxvY2ssIHRoZW4gc2VuZHMgYW4gQWRtaW4gUXVldWUgY29tbWFuZCB0byByZWFkIGEgY2h1bmsgb2YgdGhlIE5WTS4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoaXMgYnkgbW92aW5nIHRoZSBsb2NrIGFjcXVpc2l0aW9uIGluc2lkZSB0aGUgbG9vcC4gSG93ZXZlciwgdGhlIGluaXRpYWwgYGljZV9hY3F1aXJlX252bWAgd2lsbCBmYWlsIHdoZW4gdGhlcmUncyBubyBoYXJkd2FyZSBvciBwcm9wZXIgZW11bGF0aW9uIGJlY2F1c2UgdGhlIEFRIGNvbW1hbmQgd2lsbCB0aW1lb3V0LiBUaGUgZHJpdmVyIGZhaWxzIGR1cmluZyBwcm9iZSwgc28gZGV2bGluayBhbmQgZXRodG9vbCBpbnRlcmZhY2VzIHdvbid0IGV2ZW4gYmUgcmVnaXN0ZXJlZC4gVGhhdCBtZWFucyBgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90YCwgYGljZV9kZXZsaW5rX252bV9yZWFkYCwgYW5kIGBpY2VfZ2V0X2VlcHJvbWAgYXJlIHVucmVhY2hhYmxlLiBUaGUgb25seSB3YXkgd2UgZ2V0IHRvIGBpY2VfcmVhZF9mbGF0X252bWAgaXMgZHVyaW5nIHRoZSBwcm9iZSBzZXF1ZW5jZSB2aWEgYGljZV9pbml0X252bWAgYW5kIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAuIEJ1dCBgaWNlX2luaXRfbnZtYCBpcyBjYWxsZWQgYWZ0ZXIgYGljZV9jcmVhdGVfYWxsX2N0cmxxYCB3aGljaCBhbGxvY2F0ZXMgbWVtb3J5LiBJZiB0aGVyZSdzIG5vIGhhcmR3YXJlLCB0aGUgZmlyc3QgQVEgY29tbWFuZCB3aWxsIHRpbWVvdXQuXG5cbkV2ZW4gaWYgYGh3LVx1MDAzZWZsYXNoLmJsYW5rX252bV9tb2RlYCBpcyB0cnVlLCB0aGVuIGBpY2VfYWNxdWlyZV9udm1gIHJldHVybnMgMCwgYnV0IHRoZSBjYWxsIHRvIGBpY2VfYXFfcmVhZF9udm1gIHdpbGwgdGltZSBvdXQsIHNpbmNlIGBpY2VfYXFfc2VuZF9jbWRgIHdpbGwgYXR0ZW1wdCB0byBzZW5kIGFuIEFkbWluIFF1ZXVlIGNvbW1hbmQuXG5cblN5emthbGxlciBjYW4ndCBzaW11bGF0ZSB0aGUgRE1BIGludGVyYWN0aW9ucyBhbmQgd2lsbCBqdXN0IHRpbWVvdXQgd2hlbiBpdCB0cmllcyB0byBmdXp6IHRoZXNlIEFRIHJlc3BvbnNlcy4gVGhlIGxvb3Agd2l0aGluIGBpY2VfcmVhZF9mbGF0X252bWAgd29uJ3QgZXhlY3V0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcGF0Y2gncyBjb3JlIGxvZ2ljIG9mIGFjcXVpcmluZyBhbmQgcmVsZWFzaW5nIHRoZSBsb2NrIGluc2lkZSB0aGUgbG9vcCBpcyBjb21wbGV0ZWx5IGhhcmR3YXJlLWRlcGVuZGVudCBhbmQgY2FuJ3QgYmUgZXhlcmNpc2VkIGVmZmVjdGl2ZWx5LlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIGZ1enppbmcgaXQgaXNuJ3QgZ29pbmcgdG8gYmUgYmVuZWZpY2lhbC4gVGh1cywgdGhlIGNvcnJlY3QgZGV0ZXJtaW5hdGlvbiBpcyBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQ4LCJPdXRwdXRUb2tlbnMiOjEyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTY6MTEuMTczNTA1MTcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTlZNIHJlYWQgbG9naWMgaW4gdGhlIEludGVsIElDRSBkcml2ZXIsIHNwZWNpZmljYWxseSBtb3ZpbmcgTlZNIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgaW5zaWRlIHRoZSByZWFkIGxvb3AgdG8gcHJldmVudCBGVyBsb2NrIHRpbWVvdXRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBoYXJkd2FyZSBBZG1pbiBRdWV1ZSAoQVEpIHRvIHByb2Nlc3MgY29tbWFuZHMuIFdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgaGFyZHdhcmUgb3IgYSBmdWxsIHNvZnR3YXJlIGVtdWxhdG9yICh3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBRRU1VKSwgdGhlIEFRIGNvbW1hbmRzIHdpbGwgc2ltcGx5IHRpbWVvdXQgYW5kIGZhaWwuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byBtZWFuaW5nZnVsbHkgcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTlZNIHJlYWQgbG9naWMgaW4gdGhlIEludGVsIElDRSBkcml2ZXIsIHNwZWNpZmljYWxseSBtb3ZpbmcgTlZNIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgaW5zaWRlIHRoZSByZWFkIGxvb3AgdG8gcHJldmVudCBGVyBsb2NrIHRpbWVvdXRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBoYXJkd2FyZSBBZG1pbiBRdWV1ZSAoQVEpIHRvIHByb2Nlc3MgY29tbWFuZHMuIFdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgaGFyZHdhcmUgb3IgYSBmdWxsIHNvZnR3YXJlIGVtdWxhdG9yICh3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBRRU1VKSwgdGhlIEFRIGNvbW1hbmRzIHdpbGwgc2ltcGx5IHRpbWVvdXQgYW5kIGZhaWwuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byBtZWFuaW5nZnVsbHkgcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowblv6t[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-03 11:53:40 +0000 UTC FinishedAt: 2026-07-03 12:16:12 +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+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5WTSByZWFkIGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW92aW5nIE5WTSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIGluc2lkZSB0aGUgcmVhZCBsb29wIHRvIHByZXZlbnQgRlcgbG9jayB0aW1lb3V0cy4gVGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgaGFyZHdhcmUgQWRtaW4gUXVldWUgKEFRKSB0byBwcm9jZXNzIGNvbW1hbmRzLiBXaXRob3V0IHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlIG9yIGEgZnVsbCBzb2Z0d2FyZSBlbXVsYXRvciAod2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gUUVNVSksIHRoZSBBUSBjb21tYW5kcyB3aWxsIHNpbXBseSB0aW1lb3V0IGFuZCBmYWlsLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3OTYxMGM4NzM4MjdmZDJkMzcyODE1YmRkMzUxYWQxY2QwZjBlYzQ3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMyAxMjoxNDo0NCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcbmluZGV4IDIyYjdkOGU2YmQ5ZThmLi43YzdmZTNkMmU5ZDk5MCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG5AQCAtMTg5MSwyNiAmIzQzOzE4OTEsMTUgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fc25hcHNob3Qoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fYmxrczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dTMyIHJlYWRfc3ogPSBtaW5fdCh1MzIsIElDRV9ERVZMSU5LX1JFQURfQkxLX1NJWkUsIGxlZnQpO1xuIFxuLVx0XHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4tXHRcdGlmIChzdGF0dXMpIHtcbi1cdFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7aWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRcdHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbi1cdFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlXCYjMzQ7KTtcbi1cdFx0XHR2ZnJlZShudm1fZGF0YSk7XG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdH1cbi1cbiBcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGkgKiBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XG4gXHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7aWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkIGFmdGVyIHJlYWRpbmcgJXUgYnl0ZXMsIGVyciAlZCBhcV9lcnIgJWRcXG5cJiMzNDssXG4gXHRcdFx0XHRyZWFkX3N6LCBzdGF0dXMsIGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyk7XG4gXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXCYjMzQ7KTtcbi1cdFx0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFx0XHRcdHZmcmVlKG52bV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0fVxuLVx0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFxuIFx0XHR0bXAgJiM0Mzs9IHJlYWRfc3o7XG4gXHRcdGxlZnQgLT0gcmVhZF9zejtcbkBAIC0xOTY2LDI0ICYjNDM7MTk1NSwxNCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChzdGF0dXMpIHtcbi1cdFx0ZGV2X2RiZyhkZXYsIFwmIzM0O2ljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJWRcXG5cJiMzNDssXG4tXHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlXCYjMzQ7KTtcbi1cdFx0cmV0dXJuIC1FSU87XG4tXHR9XG4tXG4gXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgKHUzMilvZmZzZXQsIFx1MDAyNnNpemUsIGRhdGEsXG4gXHRcdFx0XHQgICByZWFkX3NoYWRvd19yYW0pO1xuIFx0aWYgKHN0YXR1cykge1xuIFx0XHRkZXZfZGJnKGRldiwgXCYjMzQ7aWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkIGFmdGVyIHJlYWRpbmcgJXUgYnl0ZXMsIGVyciAlZCBhcV9lcnIgJWRcXG5cJiMzNDssXG4gXHRcdFx0c2l6ZSwgc3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtGYWlsZWQgdG8gcmVhZCBOVk0gY29udGVudHNcJiMzNDspO1xuLVx0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFx0XHRyZXR1cm4gLUVJTztcbiBcdH1cbi1cdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuaW5kZXggNDkzNzFiMDY1ODQ1ODIuLmRkZWNhMzlkODIyYmIxIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG5AQCAtODY5LDI0ICYjNDM7ODY5LDE1IEBAIGljZV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuIFx0aWYgKCFidWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmV0ID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xcblwmIzM0Oyxcbi1cdFx0XHRyZXQsIGxpYmllX2FxX3N0cihody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcbi1cdFx0Z290byBvdXQ7XG4tXHR9XG4tXG4gXHRyZXQgPSBpY2VfcmVhZF9mbGF0X252bShodywgZWVwcm9tLVx1MDAzZW9mZnNldCwgXHUwMDI2ZWVwcm9tLVx1MDAzZWxlbiwgYnVmLFxuIFx0XHRcdFx0ZmFsc2UpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVzXFxuXCYjMzQ7LFxuIFx0XHRcdHJldCwgbGliaWVfYXFfc3RyKGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xuLVx0XHRnb3RvIHJlbGVhc2U7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdG1lbWNweShieXRlcywgYnVmLCBlZXByb20tXHUwMDNlbGVuKTtcbi1yZWxlYXNlOlxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBvdXQ6XG4gXHRrZnJlZShidWYpO1xuIFx0cmV0dXJuIHJldDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xuaW5kZXggN2UxODdhODA0ZGZhMTYuLmNiMTU0MTg0NDI0MmJhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1xuQEAgLTU4LDYgJiM0Mzs1OCwxMSBAQCBpbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCxcbiAgKiBicmVha3MgcmVhZCByZXF1ZXN0cyBhY3Jvc3MgU2hhZG93IFJBTSBzZWN0b3JzIGFuZCBlbnN1cmVzIHRoYXQgbm8gc2luZ2xlXG4gICogcmVhZCByZXF1ZXN0IGV4Y2VlZHMgdGhlIG1heGltdW0gNEtCIHJlYWQgZm9yIGEgc2luZ2xlIEFkbWluUSBjb21tYW5kLlxuICAqXG4mIzQzOyAqIEZXIGNhcHMgdGhlIHJlYWQgbG9jayBhdCBhIG1heGltdW0gb2YgMzAwMG1zLCBzbyBhIHJlYWQgc3Bhbm5pbmcgbXVsdGlwbGVcbiYjNDM7ICogNEtCIHNlY3RvcnMgY2Fubm90IGJlIGRvbmUgdW5kZXIgYSBzaW5nbGUgbG9jayB3aXRob3V0IEZXIHJlY2xhaW1pbmcgaXRcbiYjNDM7ICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRXG4mIzQzOyAqIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLlxuJiM0MzsgKlxuICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmVcbiAgKiBwYXJ0aWFsbHkgdXBkYXRlZCBpZiBzb21lIHJlYWRzIHN1Y2NlZWQgYmVmb3JlIGEgZmFpbHVyZS5cbiAgKi9cbkBAIC02NSw2ICYjNDM7NzAsNyBAQCBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuIFx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKVxuIHtcbiYjNDM7XHRlbnVtIGxpYmllX2FxX2VyciBhcV9lcnI7XG4gXHR1MzIgaW5sZW4gPSAqbGVuZ3RoO1xuIFx0dTMyIGJ5dGVzX3JlYWQgPSAwO1xuIFx0Ym9vbCBsYXN0X2NtZDtcbkBAIC05MiwxMiAmIzQzOzk4LDI4IEBAIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsXG4gXG4gXHRcdGxhc3RfY21kID0gIShieXRlc19yZWFkICYjNDM7IHJlYWRfc2l6ZSBcdTAwM2MgaW5sZW4pO1xuIFxuJiM0MztcdFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuJiM0MztcdFx0aWYgKHN0YXR1cylcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuIFx0XHRzdGF0dXMgPSBpY2VfYXFfcmVhZF9udm0oaHcsIElDRV9BUUNfTlZNX1NUQVJUX1BPSU5ULFxuIFx0XHRcdFx0XHQgb2Zmc2V0LCByZWFkX3NpemUsXG4gXHRcdFx0XHRcdCBkYXRhICYjNDM7IGJ5dGVzX3JlYWQsIGxhc3RfY21kLFxuIFx0XHRcdFx0XHQgcmVhZF9zaGFkb3dfcmFtLCBOVUxMKTtcbi1cdFx0aWYgKHN0YXR1cylcbiYjNDM7XHRcdGlmIChzdGF0dXMpIHtcbiYjNDM7XHRcdFx0LyogaWNlX3JlbGVhc2VfbnZtKCkgaXNzdWVzIGFuIEFRIGNvbW1hbmQgdGhhdCB3b3VsZFxuJiM0MztcdFx0XHQgKiBvdmVyd3JpdGUgc3FfbGFzdF9zdGF0dXMsIHdoaWNoIHNvbWUgY2FsbGVyc1xuJiM0MztcdFx0XHQgKiBpbnNwZWN0IGFmdGVyIGEgZmFpbGVkIHJlYWQuIFByZXNlcnZlIHRoZSByZWFkJiMzOTtzXG4mIzQzO1x0XHRcdCAqIEFRIGVycm9yIGFjcm9zcyB0aGUgcmVsZWFzZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGFxX2VyciA9IGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cztcbiYjNDM7XG4mIzQzO1x0XHRcdGljZV9yZWxlYXNlX252bShodyk7XG4mIzQzO1x0XHRcdGh3LVx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cyA9IGFxX2VycjtcbiBcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFxuIFx0XHRieXRlc19yZWFkICYjNDM7PSByZWFkX3NpemU7XG4gXHRcdG9mZnNldCAmIzQzOz0gcmVhZF9zaXplO1xuQEAgLTMzMCwxNCAmIzQzOzM1Miw4IEBAIGljZV9yZWFkX2ZsYXNoX21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTE2IG1vZHVsZSxcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4gXG4tXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4tXHRpZiAoc3RhdHVzKVxuLVx0XHRyZXR1cm4gc3RhdHVzO1xuLVxuIFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICYjNDM7IG9mZnNldCwgXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSk7XG4gXG4tXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuLVxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG5AQCAtNDE5LDI0ICYjNDM7NDM1LDE5IEBAIGljZV9yZWFkX25ldGxpc3RfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MzIgb2Zmc2V0XG4gfVxuIFxuIC8qKlxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxuJiM0MzsgKiBpY2VfcmVhZF9zcl93b3JkIC0gUmVhZHMgU2hhZG93IFJBTSB3b3JkXG4gICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbiAgKiBAb2Zmc2V0OiBvZmZzZXQgb2YgdGhlIFNoYWRvdyBSQU0gd29yZCB0byByZWFkICgweDAwMDAwMCAtIDB4MDAxRkZGKVxuICAqIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgU2hhZG93IFJBTVxuICAqXG4tICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgdGhlIGljZV9yZWFkX3NyX3dvcmRfYXEuXG4mIzQzOyAqIFJlYWRzIG9uZSAxNiBiaXQgd29yZCBmcm9tIHRoZSBTaGFkb3cgUkFNIHVzaW5nIGljZV9yZWFkX3NyX3dvcmRfYXEuXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSBOVk0gbG9jayBpcyBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgaW50ZXJuYWxseSBieSBpY2VfcmVhZF9mbGF0X252bSgpXG4mIzQzOyAqIGFyb3VuZCB0aGUgRlcgcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXG4gICovXG4gaW50IGljZV9yZWFkX3NyX3dvcmQoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSlcbiB7XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKCFzdGF0dXMpIHtcbi1cdFx0c3RhdHVzID0gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTtcbi1cdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cdH1cbi1cbi1cdHJldHVybiBzdGF0dXM7XG4mIzQzO1x0cmV0dXJuIGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTg1NiwxMSAmIzQzOzg2Nyw3IEBAIGludCBpY2VfZ2V0X2luYWN0aXZlX25ldGxpc3RfdmVyKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX25ldGxpc3RfaW5mbyAqbmV0XG4gc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcbiB7XG4gXHR1MzIgbWluX3NpemUgPSAwLCBtYXhfc2l6ZSA9IElDRV9BUUNfTlZNX01BWF9PRkZTRVQgJiM0MzsgMTtcbi1cdGludCBzdGF0dXM7XG4tXG4tXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4tXHRpZiAoc3RhdHVzKVxuLVx0XHRyZXR1cm4gc3RhdHVzO1xuJiM0MztcdGludCBzdGF0dXMgPSAwO1xuIFxuIFx0d2hpbGUgKChtYXhfc2l6ZSAtIG1pbl9zaXplKSBcdTAwM2UgMSkge1xuIFx0XHR1MzIgb2Zmc2V0ID0gKG1heF9zaXplICYjNDM7IG1pbl9zaXplKSAvIDI7XG5AQCAtODgwLDcgJiM0Mzs4ODcsNyBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFx0XHRcdG1pbl9zaXplID0gb2Zmc2V0O1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgKi9cbi1cdFx0XHRnb3RvIGVycl9yZWFkX2ZsYXRfbnZtO1xuJiM0MztcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODg4LDkgJiM0Mzs4OTUsNiBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIFxuIFx0aHctXHUwMDNlZmxhc2guZmxhc2hfc2l6ZSA9IG1heF9zaXplO1xuIFxuLWVycl9yZWFkX2ZsYXRfbnZtOlxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5WTSByZWFkIGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW92aW5nIE5WTSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIGluc2lkZSB0aGUgcmVhZCBsb29wIHRvIHByZXZlbnQgRlcgbG9jayB0aW1lb3V0cy4gVGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgaGFyZHdhcmUgQWRtaW4gUXVldWUgKEFRKSB0byBwcm9jZXNzIGNvbW1hbmRzLiBXaXRob3V0IHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlIG9yIGEgZnVsbCBzb2Z0d2FyZSBlbXVsYXRvciAod2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gUUVNVSksIHRoZSBBUSBjb21tYW5kcyB3aWxsIHNpbXBseSB0aW1lb3V0IGFuZCBmYWlsLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc5NjEwYzg3MzgyN2ZkMmQzNzI4MTViZGQzNTFhZDFjZDBmMGVjNDcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzIDEyOjE0OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jCmluZGV4IDIyYjdkOGU2YmQ5ZThmLi43YzdmZTNkMmU5ZDk5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYwpAQCAtMTg5MSwyNiAmIzQzOzE4OTEsMTUgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fc25hcHNob3Qoc3RydWN0IGRldmxpbmsgKmRldmxpbmssCiAJZm9yIChpID0gMDsgaSAmbHQ7IG51bV9ibGtzOyBpJiM0MzsmIzQzOykgewogCQl1MzIgcmVhZF9zeiA9IG1pbl90KHUzMiwgSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSwgbGVmdCk7CiAKLQkJc3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwotCQlpZiAoc3RhdHVzKSB7Ci0JCQlkZXZfZGJnKGRldiwgJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCQlzdGF0dXMsIGh3LSZndDthZG1pbnEuc3FfbGFzdF9zdGF0dXMpOwotCQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlJiMzNDspOwotCQkJdmZyZWUobnZtX2RhdGEpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KLQogCQlzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgaSAqIElDRV9ERVZMSU5LX1JFQURfQkxLX1NJWkUsCiAJCQkJCSAgICZhbXA7cmVhZF9zeiwgdG1wLCByZWFkX3NoYWRvd19yYW0pOwogCQlpZiAoc3RhdHVzKSB7CiAJCQlkZXZfZGJnKGRldiwgJiMzNDtpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxuJiMzNDssCiAJCQkJcmVhZF9zeiwgc3RhdHVzLCBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTsKIAkJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzJiMzNDspOwotCQkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAkJCXZmcmVlKG52bV9kYXRhKTsKIAkJCXJldHVybiAtRUlPOwogCQl9Ci0JCWljZV9yZWxlYXNlX252bShodyk7CiAKIAkJdG1wICYjNDM7PSByZWFkX3N6OwogCQlsZWZ0IC09IHJlYWRfc3o7CkBAIC0xOTY2LDI0ICYjNDM7MTk1NSwxNCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLAogCQlyZXR1cm4gLUVSQU5HRTsKIAl9CiAKLQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7Ci0JaWYgKHN0YXR1cykgewotCQlkZXZfZGJnKGRldiwgJiMzNDtpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKLQkJCXN0YXR1cywgaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyk7Ci0JCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZSYjMzQ7KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCiAJc3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCAmYW1wO3NpemUsIGRhdGEsCiAJCQkJICAgcmVhZF9zaGFkb3dfcmFtKTsKIAlpZiAoc3RhdHVzKSB7CiAJCWRldl9kYmcoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXG4mIzM0OywKIAkJCXNpemUsIHN0YXR1cywgaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyk7CiAJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7RmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzJiMzNDspOwotCQlpY2VfcmVsZWFzZV9udm0oaHcpOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYwppbmRleCA0OTM3MWIwNjU4NDU4Mi4uZGRlY2EzOWQ4MjJiYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jCkBAIC04NjksMjQgJiM0Mzs4NjksMTUgQEAgaWNlX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sCiAJaWYgKCFidWYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcmV0ID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycihkZXYsICYjMzQ7aWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xuJiMzNDssCi0JCQlyZXQsIGxpYmllX2FxX3N0cihody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXJldCA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBlZXByb20tJmd0O29mZnNldCwgJmFtcDtlZXByb20tJmd0O2xlbiwgYnVmLAogCQkJCWZhbHNlKTsKIAlpZiAocmV0KSB7CiAJCWRldl9lcnIoZGV2LCAmIzM0O2ljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xuJiMzNDssCiAJCQlyZXQsIGxpYmllX2FxX3N0cihody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7Ci0JCWdvdG8gcmVsZWFzZTsKJiM0MzsJCWdvdG8gb3V0OwogCX0KIAogCW1lbWNweShieXRlcywgYnVmLCBlZXByb20tJmd0O2xlbik7Ci1yZWxlYXNlOgotCWljZV9yZWxlYXNlX252bShodyk7CiBvdXQ6CiAJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMKaW5kZXggN2UxODdhODA0ZGZhMTYuLmNiMTU0MTg0NDI0MmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMKQEAgLTU4LDYgJiM0Mzs1OCwxMSBAQCBpbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCwKICAqIGJyZWFrcyByZWFkIHJlcXVlc3RzIGFjcm9zcyBTaGFkb3cgUkFNIHNlY3RvcnMgYW5kIGVuc3VyZXMgdGhhdCBubyBzaW5nbGUKICAqIHJlYWQgcmVxdWVzdCBleGNlZWRzIHRoZSBtYXhpbXVtIDRLQiByZWFkIGZvciBhIHNpbmdsZSBBZG1pblEgY29tbWFuZC4KICAqCiYjNDM7ICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZQomIzQzOyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0CiYjNDM7ICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRCiYjNDM7ICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuCiYjNDM7ICoKICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmUKICAqIHBhcnRpYWxseSB1cGRhdGVkIGlmIHNvbWUgcmVhZHMgc3VjY2VlZCBiZWZvcmUgYSBmYWlsdXJlLgogICovCkBAIC02NSw2ICYjNDM7NzAsNyBAQCBpbnQKIGljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsCiAJCSAgYm9vbCByZWFkX3NoYWRvd19yYW0pCiB7CiYjNDM7CWVudW0gbGliaWVfYXFfZXJyIGFxX2VycjsKIAl1MzIgaW5sZW4gPSAqbGVuZ3RoOwogCXUzMiBieXRlc19yZWFkID0gMDsKIAlib29sIGxhc3RfY21kOwpAQCAtOTIsMTIgJiM0Mzs5OCwyOCBAQCBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLAogCiAJCWxhc3RfY21kID0gIShieXRlc19yZWFkICYjNDM7IHJlYWRfc2l6ZSAmbHQ7IGlubGVuKTsKIAomIzQzOwkJc3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwomIzQzOwkJaWYgKHN0YXR1cykKJiM0MzsJCQlicmVhazsKJiM0MzsKIAkJc3RhdHVzID0gaWNlX2FxX3JlYWRfbnZtKGh3LCBJQ0VfQVFDX05WTV9TVEFSVF9QT0lOVCwKIAkJCQkJIG9mZnNldCwgcmVhZF9zaXplLAogCQkJCQkgZGF0YSAmIzQzOyBieXRlc19yZWFkLCBsYXN0X2NtZCwKIAkJCQkJIHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7Ci0JCWlmIChzdGF0dXMpCiYjNDM7CQlpZiAoc3RhdHVzKSB7CiYjNDM7CQkJLyogaWNlX3JlbGVhc2VfbnZtKCkgaXNzdWVzIGFuIEFRIGNvbW1hbmQgdGhhdCB3b3VsZAomIzQzOwkJCSAqIG92ZXJ3cml0ZSBzcV9sYXN0X3N0YXR1cywgd2hpY2ggc29tZSBjYWxsZXJzCiYjNDM7CQkJICogaW5zcGVjdCBhZnRlciBhIGZhaWxlZCByZWFkLiBQcmVzZXJ2ZSB0aGUgcmVhZCYjMzk7cwomIzQzOwkJCSAqIEFRIGVycm9yIGFjcm9zcyB0aGUgcmVsZWFzZS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlhcV9lcnIgPSBody0mZ3Q7YWRtaW5xLnNxX2xhc3Rfc3RhdHVzOwomIzQzOwomIzQzOwkJCWljZV9yZWxlYXNlX252bShodyk7CiYjNDM7CQkJaHctJmd0O2FkbWlucS5zcV9sYXN0X3N0YXR1cyA9IGFxX2VycjsKIAkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKIAogCQlieXRlc19yZWFkICYjNDM7PSByZWFkX3NpemU7CiAJCW9mZnNldCAmIzQzOz0gcmVhZF9zaXplOwpAQCAtMzMwLDE0ICYjNDM7MzUyLDggQEAgaWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKLQogCXN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBzdGFydCAmIzQzOyBvZmZzZXQsICZhbXA7bGVuZ3RoLCBkYXRhLCBmYWxzZSk7CiAKLQlpY2VfcmVsZWFzZV9udm0oaHcpOwotCiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNDE5LDI0ICYjNDM7NDM1LDE5IEBAIGljZV9yZWFkX25ldGxpc3RfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MzIgb2Zmc2V0CiB9CiAKIC8qKgotICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZCBhbmQgYWNxdWlyZSBOVk0gaWYgbmVjZXNzYXJ5CiYjNDM7ICogaWNlX3JlYWRfc3Jfd29yZCAtIFJlYWRzIFNoYWRvdyBSQU0gd29yZAogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpCiAgKiBAZGF0YTogd29yZCByZWFkIGZyb20gdGhlIFNoYWRvdyBSQU0KICAqCi0gKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyB0aGUgaWNlX3JlYWRfc3Jfd29yZF9hcS4KJiM0MzsgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9zcl93b3JkX2FxLgomIzQzOyAqCiYjNDM7ICogVGhlIE5WTSBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBpbnRlcm5hbGx5IGJ5IGljZV9yZWFkX2ZsYXRfbnZtKCkKJiM0MzsgKiBhcm91bmQgdGhlIEZXIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLgogICovCiBpbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKQogewotCWludCBzdGF0dXM7Ci0KLQlzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7Ci0JaWYgKCFzdGF0dXMpIHsKLQkJc3RhdHVzID0gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTsKLQkJaWNlX3JlbGVhc2VfbnZtKGh3KTsKLQl9Ci0KLQlyZXR1cm4gc3RhdHVzOwomIzQzOwlyZXR1cm4gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTsKIH0KIAogLyoqCkBAIC04NTYsMTEgJiM0Mzs4NjcsNyBAQCBpbnQgaWNlX2dldF9pbmFjdGl2ZV9uZXRsaXN0X3ZlcihzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9uZXRsaXN0X2luZm8gKm5ldAogc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodykKIHsKIAl1MzIgbWluX3NpemUgPSAwLCBtYXhfc2l6ZSA9IElDRV9BUUNfTlZNX01BWF9PRkZTRVQgJiM0MzsgMTsKLQlpbnQgc3RhdHVzOwotCi0Jc3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpOwotCWlmIChzdGF0dXMpCi0JCXJldHVybiBzdGF0dXM7CiYjNDM7CWludCBzdGF0dXMgPSAwOwogCiAJd2hpbGUgKChtYXhfc2l6ZSAtIG1pbl9zaXplKSAmZ3Q7IDEpIHsKIAkJdTMyIG9mZnNldCA9IChtYXhfc2l6ZSAmIzQzOyBtaW5fc2l6ZSkgLyAyOwpAQCAtODgwLDcgJiM0Mzs4ODcsNyBAQCBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KQogCQkJbWluX3NpemUgPSBvZmZzZXQ7CiAJCX0gZWxzZSB7CiAJCQkvKiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkICovCi0JCQlnb3RvIGVycl9yZWFkX2ZsYXRfbnZtOwomIzQzOwkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAl9CiAKQEAgLTg4OCw5ICYjNDM7ODk1LDYgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodykKIAogCWh3LSZndDtmbGFzaC5mbGFzaF9zaXplID0gbWF4X3NpemU7CiAKLWVycl9yZWFkX2ZsYXRfbnZtOgotCWljZV9yZWxlYXNlX252bShodyk7Ci0KIAlyZXR1cm4gc3RhdHVzOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NzMKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIHRoZSBJbnRlbCBJQ0UgRHJpdmVyJiMzOTtzIE5WTSBSZWFkIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBJbnRlbCBJQ0UgKEV0aGVybmV0KSBkcml2ZXIuIEl0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0byBob3cgTlZNIHJlYWRzIGFyZSBoYW5kbGVkLCBtb3ZpbmcgdGhlIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZSBhcm91bmQgZWFjaCBBZG1pbiBRdWV1ZSAoQVEpIHJlYWQgd2l0aGluIGBpY2VfcmVhZF9mbGF0X252bWAuIFRoaXMgaXMgZHJpdmVuIGJ5IGZpcm13YXJlIGxpbWl0YXRpb25zIG9uIHJlYWQgbG9jayBkdXJhdGlvbi4KCk15IHByaW1hcnkgY29uY2VybiBpcyByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhpcyBkcml2ZXIsIHRoZSBJbnRlbCBJQ0UsIGlzIHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUg4oCTIEludGVsIEU4MDAgc2VyaWVzIFBDSWUgYWRhcHRlcnMuIFN0YW5kYXJkIHZpcnR1YWxpemF0aW9uLCBsaWtlIFFFTVUgb3IgR0NFLCB0eXBpY2FsbHkgd291bGRuJiMzOTt0IGV4cG9zZSB0aGVzZSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXJzIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBvciBQQ0kgcGFzc3Rocm91Z2guIEFuZCBJIGFscmVhZHkga25vdyB0aGF0IFFFTVUgZG9lc24mIzM5O3QgaGF2ZSBhbiBlbXVsYXRvciBmb3IgSUNFOyBpdCBoYXMgb3RoZXIgbmV0d29yayBhZGFwdGVycywgYnV0IG5vdCB0aGlzIG9uZS4gSSBicmllZmx5IGNoZWNrZWQgaWYgU3l6a2FsbGVyIG9mZmVycyBhbnkgc2ltaWxhciBlbXVsYXRpb24sIGJ1dCBpdCBmb2N1c2VzIG9uIFVTQiwgV2lGaSwgb3IgRFJNIGVtdWxhdGlvbi4gTm90aGluZyBmb3IgSUNFLgoKSSBoYXZlIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBgaWNlYCBkcml2ZXIgY2FuIGJlIHByb2JlZCB3aXRob3V0IHRoZSBoYXJkd2FyZS4gUENJIGRyaXZlcnMgcmVxdWlyZSBhIFBDSSBJRCBtYXRjaCwgd2hpY2ggbWVhbnMgYSB2aXJ0dWFsIFBDSSBkZXZpY2Ugd291bGQgYmUgbmVlZGVkLiBTeXprYWxsZXIgaGFzIHV0aWxpdGllcyBsaWtlIGBzeXpfcGNpX2Nvbm5lY3RgLCBidXQgSSBrbm93IGl0JiMzOTtzIG5vdCBhIGZ1bGwtYmxvd24gUENJIGVtdWxhdG9yIGNhcGFibGUgb2YgaGFuZGxpbmcgYSBjb21wbGV4IGRyaXZlciBsaWtlIElDRS4gU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGlzIHZlcnkgbGltaXRlZC4gSXQgbGlrZWx5IHdvbiYjMzk7dCBnZXQgZmFyIGVub3VnaCB0byBleGVjdXRlIHRoZSBjb2RlIGluIGBpY2VfcmVhZF9mbGF0X252bWAsIHdoaWNoIG5lZWRzIHRoZSBBZG1pbiBRdWV1ZSAoQVEpIHRvIGZ1bmN0aW9uLiBUaGUgQVEsIGluIHR1cm4sIHJlcXVpcmVzIERNQSByaW5ncyBhbmQgaGFyZHdhcmUtbGlrZSBwcm9jZXNzaW5nIG9mIGRlc2NyaXB0b3JzLCB3aGljaCBhIGR1bW15IFBDSSBkZXZpY2Ugd29uJiMzOTt0IGRvLiBgaWNlX2FxX3JlYWRfbnZtYCB3b3VsZCB0aW1lb3V0IG9yIGZhaWwgaW1tZWRpYXRlbHkuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gc2VlIGlmIGBpY2VfcmVhZF9mbGF0X252bWAgY2FuIGJlIHJlYWNoZWQuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGRldmxpbmsgYW5kIGV0aHRvb2wgaW50ZXJmYWNlcy4gYGljZV9kZXZsaW5rX252bV9zbmFwc2hvdGAsIGBpY2VfZGV2bGlua19udm1fcmVhZGAsIGFuZCBgaWNlX2dldF9lZXByb21gIGFyZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zLiBIb3dldmVyLCB0aG9zZSBhcmUgb25seSBhY2Nlc3NpYmxlIGlmIHRoZSBuZXRkZXYvZGV2bGluayBkZXZpY2UgaXMgcmVnaXN0ZXJlZCBzdWNjZXNzZnVsbHkuIFRoaXMgcmVnaXN0cmF0aW9uIGhhcHBlbnMgYXQgdGhlIGVuZCBvZiBgaWNlX3Byb2JlYC4gQW5kIGBpY2VfcHJvYmVgIG5lZWRzIHRoZSBoYXJkd2FyZSB0byBiZSBpbml0aWFsaXplZCAoYGljZV9pbml0X2h3YCkuIFRoYXQgaW5pdGlhbGl6YXRpb24gc2V0cyB1cCB0aGUgQWRtaW4gUXVldWUuIElmIHRoZSBoYXJkd2FyZSBkb2VzbiYjMzk7dCByZXNwb25kIHRvIEFRIGNvbW1hbmRzLCBgaWNlX2luaXRfaHdgIGZhaWxzLCBhbmQgdGhlIGRyaXZlciB3b24mIzM5O3QgcHJvYmUuIFdpdGhvdXQgYSByZWFsIGRldmljZSBvciBhIGNvbXBsZXRlIGVtdWxhdG9yLCB0aGUgZHJpdmVyIHdvbiYjMzk7dCBwcm9iZSwgYW5kIHRob3NlIG5ldGRldi9kZXZsaW5rIGludGVyZmFjZXMgd29uJiMzOTt0IGV4aXN0LgoKU28sIHJlYWxpc3RpY2FsbHksIGBpY2VfcmVhZF9mbGF0X252bWAgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHdpdGhvdXQgdGhlIHNwZWNpZmljIGhhcmR3YXJlLgoKSSYjMzk7bGwgY29uZmlybSB0aGlzIGJ5IGxvb2tpbmcgYXQgYGljZV9wcm9iZWAgdXNpbmcgYGdyZXBwZXJgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTExNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxMTgte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTQ4OiAqIGljZV9wcm9iZSAtIERldmljZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTQ5LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTQ9c3RhdGljIGludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE1NTppY2VfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTIzOS1cdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjQwOlx0XHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTI0MS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODM5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTU4NDEtXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjU4NDI6XHQucHJvYmUgPSBpY2VfcHJvYmUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODQzLVx0LnJlbW92ZSA9IGljZV9yZW1vdmUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgyMQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBvciBkZWJ1Z2dpbmcsIGFuZCB3cml0aW5nIGl0IGFzIHRob3VnaCBpdCB3ZXJlIG15IG93biBzdHJlYW0gb2YgY29uc2Npb3VzbmVzczoKCioqRGl2aW5nIERlZXAgaW50byB0aGUgUHJvYmUgU2VxdWVuY2UqKgoKQWxyaWdodCwgc28gd2UmIzM5O3JlIGluIGBpY2VfcHJvYmVgLiBUaGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtyZSBzdXBwb3NlZCB0byBiZSBjaGVja2luZyB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24sIHJpZ2h0PyBNYWtlcyBzZW5zZS4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGZpcnN0IHN0ZXAgd2hlbiB0aGluZ3MgZ28gd3JvbmcsIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIGBpY2VfaW5pdF9od2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZyBvYnZpb3VzLiBJZiB0aGlzIHByb2JlIGZhaWxzIHdlIG5lZWQgdG8gY2hlY2sgdGhlIGBpY2VfaW5pdF9od2AgZnVuY3Rpb24gZm9yIGVycm9ycy4gR290dGEgZW5zdXJlIHdlJiMzOTtyZSBnZXR0aW5nIHRob3NlIGNydWNpYWwgaGFyZHdhcmUgY29tcG9uZW50cyB1cCBhbmQgcnVubmluZyBjb3JyZWN0bHkuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBpcyB3aGVyZSB0aGUgcm9vdCBjYXVzZSBsaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9pbml0X2h3JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM9MTIzNT1zdGF0aWMgaW50IGljZV9kZXZsaW5rX3JlaW5pdF91cChzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYzoxMjQyOlx0ZXJyID0gaWNlX2luaXRfaHcoXHUwMDI2cGYtXHUwMDNlaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jLTEyNDMtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI0NDpcdFx0ZGV2X2VycihkZXYsIFwmIzM0O2ljZV9pbml0X2h3IGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0NS1cdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTk2MD1zdGF0aWMgaW50IF9fZndsb2dfaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg0OiAqIGljZV9pbml0X2h3IC0gbWFpbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4NS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODYtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjk4NzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI0LVx0XHRnb3RvIGVycl91bnJvbGxfZmx0cl9tZ210X3N0cnVjdDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTEyNTpcdHN0YXR1cyA9IGljZV9pbml0X2h3X3RibHMoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI2LVx0aWYgKHN0YXR1cylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTExNTY9c3RhdGljIHZvaWQgX19md2xvZ19kZWluaXQoc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTY2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTY3OiAqIGljZV9kZWluaXRfaHcgLSB1bnJvbGwgaW5pdGlhbGl6YXRpb24gb3BlcmF0aW9ucyBkb25lIGJ5IGljZV9pbml0X2h3XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNjgtICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNzAtICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIG9ubHkgZHVyaW5nIG5vbWluYWwgb3BlcmF0aW9uLCBub3QgYXMgYSByZXN1bHQgb2ZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE3MTogKiBpY2VfaW5pdF9odygpIGZhaWxpbmcgc2luY2UgaWNlX2luaXRfaHcoKSB3aWxsIHRha2UgY2FyZSBvZiB1bnJvbGxpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3Mi0gKiBhcHBsaWNhYmxlIGluaXRpYWxpemF0aW9ucyBpZiBpdCBmYWlscyBmb3IgYW55IHJlYXNvbi5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaDo4MzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaC04NC12b2lkIGljZV9kZWluaXRfaHcoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM9MjM4OD1pbnQgaWNlX2NmZ190eF90b3BvKHN0cnVjdCBpY2VfaHcgKmh3LCBjb25zdCB2b2lkICpidWYsIHUzMiBsZW4pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0yNTQwLVx0aWNlX2RlaW5pdF9odyhodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jOjI1NDE6XHRpZiAoaWNlX2luaXRfaHcoaHcpKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1NDItXHRcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcJiMzNDtGYWlsZWQgdG8gcmUtaW5pdCBoYXJkd2FyZSBhZnRlciBzZXR0aW5nIFR4IHRvcG9sb2d5XFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTIxNTQ9dm9pZCBpY2VfY2xlYXJfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jOjIxOTg6ICogaWNlX2luaXRfaHdfdGJscyAtIGluaXQgaGFyZHdhcmUgdGFibGUgbWVtb3J5XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIxOTktICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjIwMTppbnQgaWNlX2luaXRfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjIwMi17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaD01OD1ib29sIGljZV9pc19pbml0X3BrZ19zdWNjZXNzZnVsKGVudW0gaWNlX2RkcF9zdGF0ZSBzdGF0ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5oOjU5OmludCBpY2VfaW5pdF9od190YmxzKHN0cnVjdCBpY2VfaHcgKmh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmgtNjAtdm9pZCBpY2VfZnJlZV9zZWcoc3RydWN0IGljZV9odyAqaHcpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTUxNTU9aWNlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjQxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MjpcdGVyciA9IGljZV9pbml0X2h3KGh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDMtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MjQ0Olx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2luaXRfaHcgZmFpbGVkOiAlZFxcblwmIzM0OywgZXJyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDUtXHRcdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV92Zl9tYnguYz02OD11MzIgaWNlX2NvbnZfbGlua19zcGVlZF90b192aXJ0Y2hubChib29sIGFkdl9saW5rX3N1cHBvcnQsIHUxNiBsaW5rX3NwZWVkKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmMtODktICogMS4gVGhlIG1haWxib3ggc25hcHNob3Qgc3RydWN0dXJlLCBpY2VfbWJ4X3NuYXBzaG90LCBpcyBpbml0aWFsaXplZCBkdXJpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmM6OTA6ICogZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIGljZV9pbml0X2h3KCkgdXNpbmcgaWNlX21ieF9pbml0X3NuYXBzaG90KCkuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX21ieC5jLTkxLSAqIFRoZSBzdHJ1Y3QgaWNlX21ieF9zbmFwc2hvdCBoZWxwcyB0byB0cmFjayBhbmQgdHJhdmVyc2UgYSBzdGF0aWMgd2luZG93IG9mXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg3MQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgSW5pdGlhbGl6YXRpb24gRmxvdyBvZiB0aGUgSW50ZWwgSWNlIERyaXZlcioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLCB0aGUgZHJpdmVyIHN0YXJ0cyB1cCB3aXRoIGBpY2VfcHJvYmVgLiBBbmQgSSByZWNhbGwgdGhhdCBgaWNlX2luaXRfaHdgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHdpdGhpbiB0aGF0IGBpY2VfcHJvYmVgIHJvdXRpbmUuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8ganVtcCBkaXJlY3RseSBpbnRvIHRoZSBzb3VyY2UgY29kZSBmb3IgYGljZV9pbml0X2h3YCBpdHNlbGYsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGF0IGxldmVsIHRvIGdldCBhIGdyaXAgb24gdGhlIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIHdpdGhpbiB0aGlzIHBhcnRpY3VsYXIgSW50ZWwgSWNlIGRyaXZlci4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdGhlIHJlZ2lzdGVyIHJlYWRzL3dyaXRlcyBhbmQgcG90ZW50aWFsIGVhcmx5IGNvbmZpZ3VyYXRpb24gc3RlcHMuIEtub3dpbmcgYGljZV9pbml0X2h3YCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBwcm9iZSBnaXZlcyBtZSBhIGhpZ2gtbGV2ZWwgdmlldyBhbmQgbWFrZXMgaXQgb2J2aW91cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgbXkgZGVidWdnaW5nIGlmIGlzc3VlcyBhcmUgcmVwb3J0ZWQgbGF0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2luaXRfaHcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9OTYwPXN0YXRpYyBpbnQgX19md2xvZ19pbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTgzLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzo5ODQ6ICogaWNlX2luaXRfaHcgLSBtYWluIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTg1LSAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4Ni0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg3OmludCBpY2VfaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTg4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjQtXHRcdGdvdG8gZXJyX3Vucm9sbF9mbHRyX21nbXRfc3RydWN0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTI1Olx0c3RhdHVzID0gaWNlX2luaXRfaHdfdGJscyhodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjYtXHRpZiAoc3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MTE1Nj1zdGF0aWMgdm9pZCBfX2Z3bG9nX2RlaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNjYtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjExNjc6ICogaWNlX2RlaW5pdF9odyAtIHVucm9sbCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zIGRvbmUgYnkgaWNlX2luaXRfaHdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE2OC0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3MC0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb25seSBkdXJpbmcgbm9taW5hbCBvcGVyYXRpb24sIG5vdCBhcyBhIHJlc3VsdCBvZlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTcxOiAqIGljZV9pbml0X2h3KCkgZmFpbGluZyBzaW5jZSBpY2VfaW5pdF9odygpIHdpbGwgdGFrZSBjYXJlIG9mIHVucm9sbGluZ1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTcyLSAqIGFwcGxpY2FibGUgaW5pdGlhbGl6YXRpb25zIGlmIGl0IGZhaWxzIGZvciBhbnkgcmVhc29uLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzkKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW5pdGlhbCBIYXJkd2FyZSBJbml0aWFsaXphdGlvbiBUaG91Z2h0cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgaWNlX2luaXRfaHdgIGZ1bmN0aW9uLiBJIHNlZSB0aGUgbmFtZSwgc28gbXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1RoaXMgaXMgd2hlcmUgdGhlIHJ1YmJlciBtZWV0cyB0aGUgcm9hZCwgdGhlIG5pdHR5LWdyaXR0eSBvZiBicmluZ2luZyB1cCB0aGUgaGFyZHdhcmUuJiMzNDsgSSBrbm93IHRoaXMgbGlrZWx5IGludm9sdmVzIGEgY2hhaW4gb2YgZXZlbnRzLCBtYXliZSBzdGFydGluZyB3aXRoIHBvd2VyLW9uIHNlcXVlbmNpbmcsIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGVuIG1vdmluZyBpbnRvIHNldHRpbmcgdXAgdGhlIG1lbW9yeSBjb250cm9sbGVycyBhbmQgcG9zc2libHkgYW55IGZ1bmRhbWVudGFsIHBlcmlwaGVyYWwgaW50ZXJmYWNlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgb24gaG93IHRoZXkgaGFuZGxlIHRoaW5ncyBsaWtlIHJlc2V0IGFzc2VydGlvbiBhbmQgZGUtYXNzZXJ0aW9uIGZvciB0aGUgdmFyaW91cyBJUCBibG9ja3MuIFRoZSBhcmNoaXRlY3R1cmUgaW4gdXNlIHdpbGwgc3Ryb25nbHkgaW5mb3JtIGhvdyB0aGlzIGluaXRpYWxpemF0aW9uIGlzIGFwcHJvYWNoZWQuIElzIGl0IGEgaGllcmFyY2hpY2FsIGRlc2lnbj8gQSBtb25vbGl0aGljIGFwcHJvYWNoPyBJJiMzOTtsbCBiZSB3YXRjaGluZyB0byBzZWUgaG93IHRoZXkgaXNvbGF0ZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCB0b28sIGhvcGVmdWxseSwgaXTigJlzIGRvbmUgaW4gYSBjbGVhbiwgbWFpbnRhaW5hYmxlIHdheSB0aGF0IHVzZXMgYWJzdHJhY3Rpb24gbGF5ZXJzLiBVbHRpbWF0ZWx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIGxvdy1sZXZlbCByZWdpc3RlciB3cml0ZXMgYW5kIHJlYWRiYWNrcyB0aGF0IGFyZSBjcml0aWNhbCB0byBicmluZ2luZyB0aGUgaGFyZHdhcmUgdG8gYSBzdGFibGUgc3RhdGUuIEZyb20gaGVyZSwgdGhlIHJlYWwgaW50ZXJlc3Rpbmcgc3R1ZmYgYmVnaW5zIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5ODcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5ODc6XHRpbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXG4gOTg4Olx0e1xuIDk4OTpcdFx0c3RydWN0IGljZV9hcWNfZ2V0X3BoeV9jYXBzX2RhdGEgKnBjYXBzIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xuIDk5MDpcdFx0dm9pZCAqbWFjX2J1ZiBfX2ZyZWUoa2ZyZWUpID0gTlVMTDtcbiA5OTE6XHRcdHUxNiBtYWNfYnVmX2xlbjtcbiA5OTI6XHRcdGludCBzdGF0dXM7XG4gOTkzOlx0XG4gOTk0Olx0XHQvKiBTZXQgTUFDIHR5cGUgYmFzZWQgb24gRGV2aWNlSUQgKi9cbiA5OTU6XHRcdHN0YXR1cyA9IGljZV9zZXRfbWFjX3R5cGUoaHcpO1xuIDk5NjpcdFx0aWYgKHN0YXR1cylcbiA5OTc6XHRcdFx0cmV0dXJuIHN0YXR1cztcbiA5OTg6XHRcbiA5OTk6XHRcdGh3LVx1MDAzZXBmX2lkID0gRklFTERfR0VUKFBGX0ZVTkNfUklEX0ZVTkNfTlVNX00sIHJkMzIoaHcsIFBGX0ZVTkNfUklEKSk7XG4xMDAwOlx0XG4xMDAxOlx0XHRzdGF0dXMgPSBpY2VfcmVzZXQoaHcsIElDRV9SRVNFVF9QRlIpO1xuMTAwMjpcdFx0aWYgKHN0YXR1cylcbjEwMDM6XHRcdFx0cmV0dXJuIHN0YXR1cztcbjEwMDQ6XHRcbjEwMDU6XHRcdGljZV9nZXRfaXRyX2ludHJsX2dyYW4oaHcpO1xuMTAwNjpcdFxuMTAwNzpcdFx0c3RhdHVzID0gaWNlX2NyZWF0ZV9hbGxfY3RybHEoaHcpO1xuMTAwODpcdFx0aWYgKHN0YXR1cylcbjEwMDk6XHRcdFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcbjEwMTA6XHRcbjEwMTE6XHRcdHN0YXR1cyA9IF9fZndsb2dfaW5pdChodyk7XG4xMDEyOlx0XHRpZiAoc3RhdHVzKVxuMTAxMzpcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfRldfTE9HLCBcJiMzNDtFcnJvciBpbml0aWFsaXppbmcgRlcgbG9nZ2luZzogJWRcXG5cJiMzNDssXG4xMDE0Olx0XHRcdFx0ICBzdGF0dXMpO1xuMTAxNTpcdFxuMTAxNjpcdFx0c3RhdHVzID0gaWNlX2NsZWFyX3BmX2NmZyhodyk7XG4xMDE3Olx0XHRpZiAoc3RhdHVzKVxuMTAxODpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTAxOTpcdFxuMTAyMDpcdFx0LyogU2V0IGJpdCB0byBlbmFibGUgRmxvdyBEaXJlY3RvciBmaWx0ZXJzICovXG4xMDIxOlx0XHR3cjMyKGh3LCBQRlFGX0ZEX0VOQSwgUEZRRl9GRF9FTkFfRkRfRU5BX00pO1xuMTAyMjpcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aHctXHUwMDNlZmRpcl9saXN0X2hlYWQpO1xuMTAyMzpcdFxuMTAyNDpcdFx0aWNlX2NsZWFyX3B4ZV9tb2RlKGh3KTtcbjEwMjU6XHRcbjEwMjY6XHRcdHN0YXR1cyA9IGljZV9pbml0X252bShodyk7XG4xMDI3Olx0XHRpZiAoc3RhdHVzKVxuMTAyODpcdFx0XHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xuMTAyOTpcdFxuMTAzMDpcdFx0c3RhdHVzID0gaWNlX2dldF9jYXBzKGh3KTtcbjEwMzE6XHRcdGlmIChzdGF0dXMpXG4xMDMyOlx0XHRcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XG4xMDMzOlx0XG4xMDM0Olx0XHRpZiAoIWh3LVx1MDAzZXBvcnRfaW5mbylcbjEwMzU6XHRcdFx0aHctXHUwMDNlcG9ydF9pbmZvID0gZGV2bV9remFsbG9jKGljZV9od190b19kZXYoaHcpLFxuMTAzNjpcdFx0XHRcdFx0XHQgICAgIHNpemVvZigqaHctXHUwMDNlcG9ydF9pbmZvKSxcbjEwMzc6XHRcdFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbjEwMzg6XHRcdGlmICghaHctXHUwMDNlcG9ydF9pbmZvKSB7XG4xMDM5Olx0XHRcdHN0YXR1cyA9IC1FTk9NRU07XG4xMDQwOlx0XHRcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XG4xMDQxOlx0XHR9XG4xMDQyOlx0XG4xMDQzOlx0XHRody1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlbG9jYWxfZndkX21vZGUgPSBJQ0VfTE9DQUxfRldEX01PREVfRU5BQkxFRDtcbjEwNDQ6XHRcdC8qIHNldCB0aGUgYmFjayBwb2ludGVyIHRvIEhXICovXG4xMDQ1Olx0XHRody1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlaHcgPSBodztcbjEwNDY6XHRcbjEwNDc6XHRcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIHN3aXRjaCBjb25maWd1cmF0aW9uIGRhdGEgKi9cbjEwNDg6XHRcdHN0YXR1cyA9IGljZV9nZXRfaW5pdGlhbF9zd19jZmcoaHcpO1xuMTA0OTpcdFx0aWYgKHN0YXR1cylcbjEwNTA6XHRcdFx0Z290byBlcnJfdW5yb2xsX2FsbG9jO1xuMTA1MTpcdFxuMTA1MjpcdFx0aHctXHUwMDNlZXZiX3ZlYiA9IHRydWU7XG4xMDUzOlx0XG4xMDU0Olx0XHQvKiBpbml0IHhhcnJheSBmb3IgaWRlbnRpZnlpbmcgc2NoZWR1bGluZyBub2RlcyB1bmlxdWVseSAqL1xuMTA1NTpcdFx0eGFfaW5pdF9mbGFncyhcdTAwMjZody1cdTAwM2Vwb3J0X2luZm8tXHUwMDNlc2NoZWRfbm9kZV9pZHMsIFhBX0ZMQUdTX0FMTE9DKTtcbjEwNTY6XHRcbjEwNTc6XHRcdC8qIFF1ZXJ5IHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIGZvciBUeCBzY2hlZHVsZXIgKi9cbjEwNTg6XHRcdHN0YXR1cyA9IGljZV9zY2hlZF9xdWVyeV9yZXNfYWxsb2MoaHcpO1xuMTA1OTpcdFx0aWYgKHN0YXR1cykge1xuMTA2MDpcdFx0XHRpY2VfZGVidWcoaHcsIElDRV9EQkdfU0NIRUQsIFwmIzM0O0ZhaWxlZCB0byBnZXQgc2NoZWR1bGVyIGFsbG9jYXRlZCByZXNvdXJjZXNcXG5cJiMzNDspO1xuMTA2MTpcdFx0XHRnb3RvIGVycl91bnJvbGxfYWxsb2M7XG4xMDYyOlx0XHR9XG4xMDYzOlx0XHRpY2Vfc2NoZWRfZ2V0X3BzbV9jbGtfZnJlcShodyk7XG4xMDY0Olx0XG4xMDY1Olx0XHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBzY2hlZHVsZXIgZGF0YSAqL1xuMTA2NjpcdFx0c3RhdHVzID0gaWNlX3NjaGVkX2luaXRfcG9ydChody1cdTAwM2Vwb3J0X2luZm8pO1xuMTA2NzpcdFx0aWYgKHN0YXR1cylcbjEwNjg6XHRcdFx0Z290byBlcnJfdW5yb2xsX3NjaGVkO1xuMTA2OTpcdFxuMTA3MDpcdFx0cGNhcHMgPSBremFsbG9jX29iaigqcGNhcHMpO1xuMTA3MTpcdFx0aWYgKCFwY2Fwcykge1xuMTA3MjpcdFx0XHRzdGF0dXMgPSAtRU5PTUVNO1xuMTA3MzpcdFx0XHRnb3RvIGVycl91bnJvbGxfc2NoZWQ7XG4xMDc0Olx0XHR9XG4xMDc1Olx0XG4xMDc2Olx0XHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBQSFkgY2FwYWJpbGl0aWVzICovXG4xMDc3Olx0XHRzdGF0dXMgPSBpY2VfYXFfZ2V0X3BoeV9jYXBzKGh3LVx1MDAzZXBvcnRfaW5mbywgZmFsc2UsXG4xMDc4Olx0XHRcdFx0XHQgICAgIElDRV9BUUNfUkVQT1JUX1RPUE9fQ0FQX01FRElBLCBwY2FwcyxcbjEwNzk6XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4xMDgwOlx0XHRpZiAoc3RhdHVzKVxuMTA4MTpcdFx0XHRkZXZfd2FybihpY2VfaHdfdG9fZGV2KGh3KSwgXCYjMzQ7R2V0IFBIWSBjYXBhYmlsaXRpZXMgZmFpbGVkIHN0YXR1cyA9ICVkLCBjb250aW51aW5nIGFueXdheVxcblwmIzM0OyxcbjEwODI6XHRcdFx0XHQgc3RhdHVzKTtcbjEwODM6XHRcbjEwODQ6XHRcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIGxpbmsgaW5mb3JtYXRpb24gKi9cbjEwODU6XHRcdHN0YXR1cyA9IGljZV9hcV9nZXRfbGlua19pbmZvKGh3LVx1MDAzZXBvcnRfaW5mbywgZmFsc2UsIE5VTEwsIE5VTEwpO1xuMTA4NjpcdFx0aWYgKHN0YXR1cylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE1NzkKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyODkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBJbml0aWFsaXphdGlvbiBpbiB0aGUgSUNFIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgSUNFIGRyaXZlciBpbml0aWFsaXplcy4gRmlyc3QsIGl0IGNhbGxzIGBpY2VfY3JlYXRlX2FsbF9jdHJscShodylgIHRvIHNldCB1cCB0aGUgQWRtaW4gUXVldWUsIHdoaWNoIGlzIHRoZSBjb3JuZXJzdG9uZS4gVGhlbiwgd2UgaGF2ZSBgaWNlX2luaXRfbnZtKGh3KWAgYW5kIGBpY2VfZ2V0X2NhcHMoaHcpYC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjcnVjaWFsIGJlY2F1c2UgdGhleSYjMzk7cmUgdGhlIG9uZXMgc2VuZGluZyB0aG9zZSBBUSBjb21tYW5kcyB0byB0aGUgaGFyZHdhcmUuIE5vdywgYSBmYWlsdXJlIGhlcmUg4oCTIGVpdGhlciBubyBoYXJkd2FyZSBwcmVzZW50IG9yIGEgbm9uLXJlc3BvbnNpdmUgZGV2aWNlIOKAkyBtZWFucyBgaWNlX2luaXRfaHdgIGlzIGdvaW5nIHRvIGJvbWIgb3V0LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQsIGJlaW5nIHRoZSBleHBlcnQgSSBhbSwgaXMgd2hldGhlciBTeXprYWxsZXIgY291bGQgZnV6eiB0aGlzLiBDYW4gd2UgaW5qZWN0IGZha2UgUENJIHJlc3BvbnNlcyBhbmQgbWVzcyB3aXRoIGl0PyBCdXQsIHJlYWxpc3RpY2FsbHksIFN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgcm9idXN0IFBDSSBlbXVsYXRvciB0aGF0IGNhbiByZXBsaWNhdGUgdGhlIGNvbXBsZXhpdHkgb2Ygc29tZXRoaW5nIGxpa2UgdGhlIElDRSBBZG1pbiBRdWV1ZS4gVGhpcyBBUSB1c2VzIERNQSByaW5ncywgc28gdGhlIGRyaXZlciB3cml0ZXMgZGVzY3JpcHRvcnMgdG8gbWVtb3J5IHJpbmdzIGFuZCBtYW5pcHVsYXRlcyB0YWlsIHBvaW50ZXJzLCB3aGlsZSB0aGUgaGFyZHdhcmUgcmVhZHMgdGhlIGRlc2NyaXB0b3JzLCBleGVjdXRlcyBjb21tYW5kcywgd3JpdGVzIHJlc3VsdHMgYmFjaywgYW5kIHVwZGF0ZXMgaGVhZCBwb2ludGVycy4gVGhpcyBzZXR1cCYjMzk7cyBpbnRyaWNhdGUuCgpTaW11bGF0aW5nIHRoaXMgaW4gU3l6a2FsbGVyIGlzIGEgbmlnaHRtYXJlIGJlY2F1c2UgeW91IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBETUEgcmluZyBsYXlvdXQgYW5kIGRlc2NyaXB0b3IgZm9ybWF0cywgd2hpY2ggYXJlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIElDRSBoYXJkd2FyZS4gU28sIGBpY2VfcHJvYmVgIGlzIGxpa2VseSB0byBmYWlsIGVhcmx5LCBhbmQgdGhlIGRyaXZlciB3b24mIzM5O3QgZXZlbiByZWdpc3Rlci4KClRoaXMgaXMgYWxsIGNydWNpYWwgYmVjYXVzZSB0aGUgbW9kaWZpZWQgY29kZSBJJiMzOTttIGZvY3VzaW5nIG9uLCBzcGVjaWZpY2FsbHkgaW4gYGljZV9yZWFkX2ZsYXRfbnZtYCwgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIGRyaXZlciBzdWNjZXNzZnVsbHkgcHJvYmVzIGFuZCByZWdpc3RlcnMgZGV2bGluay9ldGh0b29sIGludGVyZmFjZXMsIG9yIHBvdGVudGlhbGx5IGR1cmluZyB0aGUgcHJvYmUgaWYgYGljZV9pbml0X252bWAgY2FsbHMgaXQuIFNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIGlmIGBpY2VfaW5pdF9udm1gIGNhbGxzIGBpY2VfcmVhZF9mbGF0X252bWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9pbml0X252bSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz05ODc9aW50IGljZV9pbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTAyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTAyNjpcdHN0YXR1cyA9IGljZV9pbml0X252bShodyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTEwMjctXHRpZiAoc3RhdHVzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTE3Nzc9c3RhdGljIHZvaWQgaWNlX2hhbmRsZV9tZGRfZXZlbnQoc3RydWN0IGljZV9wZiAqcGYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTkyNS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjE5MjY6ICogaWNlX2luaXRfbnZtX3BoeV90eXBlIC0gSW5pdGlhbGl6ZSB0aGUgTlZNIFBIWSB0eXBlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xOTI3LSAqIEBwaTogcG9ydCBpbmZvIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTE5MzAtICovXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzoxOTMxOnN0YXRpYyBpbnQgaWNlX2luaXRfbnZtX3BoeV90eXBlKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTE5MzIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3OTI9c3RhdGljIHZvaWQgaWNlX2luaXRfbGluayhzdHJ1Y3QgaWNlX3BmICpwZilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00ODAxLVx0Lyogbm90IGEgZmF0YWwgZXJyb3IgaWYgdGhpcyBmYWlscyAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NDgwMjpcdGVyciA9IGljZV9pbml0X252bV9waHlfdHlwZShwZi1cdTAwM2Vody5wb3J0X2luZm8pO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDgwMy1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo0ODA0Olx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2luaXRfbnZtX3BoeV90eXBlIGZhaWxlZDogJWRcXG5cJiMzNDssIGVycik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy00ODA1LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTc2Mzc9c3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc2ODQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3Njg1Olx0ZXJyID0gaWNlX2luaXRfbnZtKGh3KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc2ODYtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3Njg3Olx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7aWNlX2luaXRfbnZtIGZhaWxlZCAlZFxcblwmIzM0OywgZXJyKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTc2ODgtXHRcdGdvdG8gZXJyX2luaXRfY3RybHE7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xMDkyPXN0YXRpYyBpbnQgaWNlX2RldGVybWluZV9jc3NfaGRyX2xlbihzdHJ1Y3QgaWNlX2h3ICpodylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTExMTAtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExMTE6ICogaWNlX2luaXRfbnZtIC0gaW5pdGlhbGl6ZXMgTlZNIHNldHRpbmdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTExMi0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTExNi0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MTExNzppbnQgaWNlX2luaXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3KVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMTE4LXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oPTMwPWludCBpY2VfcmVhZF9wYmFfc3RyaW5nKHN0cnVjdCBpY2VfaHcgKmh3LCB1OCAqcGJhX251bSwgdTMyIHBiYV9udW1fc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5oOjMxOmludCBpY2VfaW5pdF9udm0oc3RydWN0IGljZV9odyAqaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaC0zMi1pbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM0NjcKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqSW52ZXN0aWdhdGluZyB0aGUgTlZNIEluaXRpYWxpemF0aW9uIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgaWNlX2luaXRfbnZtYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBpbml0aWFsaXppbmcgdGhlIE5vbi1Wb2xhdGlsZSBNZW1vcnkgKE5WTSkgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlIE5WTSBpcyBjcml0aWNhbCwgc28gYSBjYXJlZnVsIGFuYWx5c2lzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGVzc2VudGlhbC4KCk15IGZpcnN0IGh1bmNoIGlzIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBjYWxscy4gSSBzdXNwZWN0IHRoYXQgYSBmdW5jdGlvbiBzdWNoIGFzIGBpY2VfaW5pdF9udm1gIHdvdWxkIGJlIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIE5WTSwgbGlrZWx5IGJ5IHJlYWRpbmcgZGF0YSBmcm9tIGl0LiBJIG5lZWQgdG8ga25vdyAqaG93KiBgaWNlX2luaXRfbnZtYCBhY2NvbXBsaXNoZXMgdGhpcyBpbml0aWFsaXphdGlvbi4gR2l2ZW4gdGhhdCBgaWNlX3JlYWRfZmxhdF9udm1gIGxvb2tzIGxpa2UgYSBmdW5jdGlvbiBuYW1lIHRoYXQgaXMgd2VsbC1zdWl0ZWQgdG8gYWNjZXNzaW5nIE5WTSBpbiBhIGZsYXQsIGxpbmVhciB3YXksIG15IG1pbmQgaXMgZHJhd24gdG8gdGhpbmtpbmcgJiMzNDtJIHdvbmRlciBpZiBgaWNlX2luaXRfbnZtYCBjYWxscyBgaWNlX3JlYWRfZmxhdF9udm1gPyYjMzQ7IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBpbnRlcmFjdGlvbiBhbmQgaXQgaXMgYW4gZXNzZW50aWFsIHBpZWNlIG9mIHRoZSBsYXJnZXIgcHV6emxlIG9mIGhvdyB0aGUgc3lzdGVtIGludGVyYWN0cyB3aXRoIHRoZSBOVk0uIFRoZSBhbnN3ZXIgd2lsbCBsaWtlbHkgZGlyZWN0IG15IGludmVzdGlnYXRpb24gdG8gb3RoZXIgZnVuY3Rpb24gY2FsbHMgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX3JlYWRfZmxhdF9udm0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9MjE9aW50IGljZV9hcV9yZWFkX252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG1vZHVsZV90eXBlaWQsIHUzMiBvZmZzZXQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy00OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6NTA6ICogaWNlX3JlYWRfZmxhdF9udm0gLSBSZWFkIHBvcnRpb24gb2YgTlZNIGJ5IGZsYXQgb2Zmc2V0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTUxLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz02OT1pbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6NzA6aWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtNzEtXHRcdCAgYm9vbCByZWFkX3NoYWRvd19yYW0pXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xODQ9aW50IGljZV9hcV9lcmFzZV9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCBzdHJ1Y3QgaWNlX3NxX2NkICpjZClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIwNi0gKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMDc6ICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgaWNlX3JlYWRfZmxhdF9udm0uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIwOC0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9MjA5PXN0YXRpYyBpbnQgaWNlX3JlYWRfc3Jfd29yZF9hcShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjE0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMTU6XHQvKiBOb3RlIHRoYXQgaWNlX3JlYWRfZmxhdF9udm0gdGFrZXMgaW50byBhY2NvdW50IHRoZSA0S2IgQWRtaW5RIGFuZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMTYtXHQgKiBTaGFkb3cgUkFNIHNlY3RvciByZXN0cmljdGlvbnMgbmVjZXNzYXJ5IHdoZW4gcmVhZGluZyBmcm9tIHRoZSBOVk0uXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIxNy1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMTg6XHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgb2Zmc2V0ICogc2l6ZW9mKHUxNiksIFx1MDAyNmJ5dGVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMTktXHRcdFx0XHQgICAoX19mb3JjZSB1OCAqKVx1MDAyNmRhdGFfbG9jYWwsIHRydWUpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9MzQyPWljZV9yZWFkX2ZsYXNoX21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTE2IG1vZHVsZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTM1NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MzU1Olx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICYjNDM7IG9mZnNldCwgXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTM1Ni1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTQyND1pY2VfcmVhZF9uZXRsaXN0X21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtNDQ0LSAqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjQ0NTogKiBUaGUgTlZNIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGludGVybmFsbHkgYnkgaWNlX3JlYWRfZmxhdF9udm0oKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy00NDYtICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTg2Nz1zdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtODc2LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzo4Nzc6XHRcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQsIFx1MDAyNmxlbiwgXHUwMDI2ZGF0YSwgZmFsc2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy04NzgtXHRcdGlmIChzdGF0dXMgPT0gLUVJTyBcdTAwMjZcdTAwMjZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ5NDMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgdGhlIEZsYXNoIERpc2NvdmVyeSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNpbmcgdGhlIGZsYXNoIHNpemUgZGlzY292ZXJ5IHByb2Nlc3MgaGVyZS4gSXQmIzM5O3MgY2xlYXIgdGhhdCB0aGUgZnVuY3Rpb24gYGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplYCBwbGF5cyBhIGNyaXRpY2FsIHJvbGUuIExvb2tpbmcgYXQgdGhlIGNvZGUsIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAgbWFrZXMgYSBjYWxsIHRvIGBpY2VfcmVhZF9mbGF0X252bWAuIFNvLCB0aGUgZmxhc2ggc2l6ZSBkaXNjb3ZlcnkgZnVuY3Rpb25hbGl0eSByZWxpZXMgZGlyZWN0bHkgb24gcmVhZGluZyBmcm9tIHRoZSBub24tdm9sYXRpbGUgbWVtb3J5IHRocm91Z2ggdGhhdCBgaWNlX3JlYWRfZmxhdF9udm1gIGZ1bmN0aW9uLiBOb3csIHdoZXJlIGlzIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAgYmVpbmcgaW5pdGlhdGVkPyBFeGFtaW5pbmcgdGhlIGNhbGwgc3RhY2ssIEkgc2VlIHRoYXQgYGljZV9pbml0X252bWAgYWN0dWFsbHkgY2FsbHMgYGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplYC4gVGhhdCB0ZWxscyBtZSB0aGF0IHRoZSBmbGFzaCBzaXplIGRldGVjdGlvbiBpcyBhIGZ1bmRhbWVudGFsIHBhcnQgb2YgdGhlIE5WTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZS4gVGhpcyBpbmZvcm1hdGlvbiB3aWxsIGJlIGtleSBhcyBJIGNvbnRpbnVlIHRvIGRlYnVnIHRoaXMgc3lzdGVtIG9yIGludGVncmF0ZSBhIG5ldyBmbGFzaCBjaGlwLiBUaGlzIGlzIGV4YWN0bHkgdGhlIHNvcnQgb2YgbG93LWxldmVsIGluZm9ybWF0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGJlZm9yZSBJIGdldCB0byB0aGUgYXBwbGljYXRpb24tbGV2ZWwgZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9ODU0PWludCBpY2VfZ2V0X2luYWN0aXZlX25ldGxpc3RfdmVyKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX25ldGxpc3RfaW5mbyAqbmV0bGlzdClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg1OS0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6ODYwOiAqIGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplIC0gRGlzY292ZXIgdGhlIGF2YWlsYWJsZSBmbGFzaCBzaXplLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy04NjEtICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3Rcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg2Ni0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6ODY3OnN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg2OC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xMTE3PWludCBpY2VfaW5pdF9udm0oc3RydWN0IGljZV9odyAqaHcpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMTQzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoxMTQ0Olx0c3RhdHVzID0gaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoaHcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMTQ1LVx0aWYgKHN0YXR1cykge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0MwoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDcyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE5WTSBJbml0aWFsaXphdGlvbiBhbmQgUmVhZCBQYXRoKioKCk9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHJldm9sdmVzIGFyb3VuZCB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgTm9uLVZvbGF0aWxlIE1lbW9yeSAoTlZNKSBpbml0aWFsaXphdGlvbiB3b3JrcyBpbiB0aGlzIGNvbnRleHQuIFNwZWNpZmljYWxseSwgYGljZV9pbml0X252bWAga2lja3MgdGhpbmdzIG9mZiBieSBjYWxsaW5nIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAsIHdoaWNoIGluIHR1cm4sIGNhbGxzIGBpY2VfcmVhZF9mbGF0X252bWAuIFRoZSBjcnVjaWFsIHBpZWNlIGlzIHRoYXQgYGljZV9pbml0X252bWAgZGVwZW5kcyBvbiBhIGZ1bmN0aW9uaW5nIGhhcmR3YXJlIEFkbWluIFF1ZXVlIChBUSkuIElmIHRoZXJlJiMzOTtzIG5vIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBpZiB0aGUgZHJpdmVyIGlzbiYjMzk7dCBwcm9wZXJseSBpbml0aWFsaXplZCwgYGljZV9pbml0X252bWAgaXMgYm91bmQgdG8gZmFpbC4KCk5vdywgaWYgYGljZV9pbml0X252bWAgZmFpbHMsIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAgaXMgc3RpbGwgY2FsbGVkLCBsZWFkaW5nIHRvIGBpY2VfcmVhZF9mbGF0X252bWAgYmVpbmcgZXhlY3V0ZWQsIGV2ZW4gaW4gdGhlIGFic2VuY2Ugb2YgaGFyZHdhcmUuIFRoaXMgcGF0aCBhdHRlbXB0cyB0byBhY3F1aXJlIE5WTSBhY2Nlc3MgdXNpbmcgYGljZV9hY3F1aXJlX252bWAgYW5kIHRoZW4gcmVhZCB2aWEgYGljZV9hcV9yZWFkX252bWAuIEhvd2V2ZXIsIHNpbmNlIHRoZSBBUSBpc24mIzM5O3QgZnVuY3Rpb25hbCwgYGljZV9hcV9yZWFkX252bWAgd2lsbCBpbmV2aXRhYmx5IHRpbWUgb3V0IG9yIGZhaWwuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPwoKVGhlIGNvZGUgc25pcHBldCBzaG93cyBhIHNpZ25pZmljYW50IGNoYW5nZSB0byB0aGUgYGljZV9yZWFkX2ZsYXRfbnZtYCBmdW5jdGlvbi4gVGhlIG9yaWdpbmFsIGNvZGUgYWNxdWlyZXMgYSBsb2NrLCByZWFkcywgYW5kIHRoZW4gcmVsZWFzZXMgdGhlIGxvY2suIFRoZSBtb2RpZmllZCB2ZXJzaW9uIG5vdyBhY3F1aXJlcyB0aGUgbG9jayAqaW5zaWRlKiB0aGUgcmVhZCBmdW5jdGlvbiwgYmVmb3JlIHRoZSBBUSBjb21tYW5kLiBNb3JlIGltcG9ydGFudGx5LCBpdCBzZWVtcyB0aGF0IGlmIGBpY2VfYXFfcmVhZF9udm1gICpkb2VzKiBmYWlsLCB0aGUgZHJpdmVyIHN0b3JlcyB0aGUgbGFzdCBBUSBzdGF0dXMsIGNhbGxzIGBpY2VfcmVsZWFzZV9udm1gIHRvIHJlbGVhc2UgdGhlIGxvY2ssIGFuZCB0aGVuICpyZXN0b3JlcyogdGhlIEFRIHN0YXR1cy4KClRoZSBpc3N1ZSBpcyB0aGF0IGlmIGBpY2VfYXFfcmVhZF9udm1gIGNvbnNpc3RlbnRseSBmYWlscywgd2hpY2ggaXMgdGhlIGV4cGVjdGVkIGJlaGF2aW9yIHdpdGhvdXQgcmVhbCBoYXJkd2FyZSwgYW55IGZ1enppbmcgYXR0ZW1wdHMgYXJlIGdvaW5nIHRvIGJlIHByZWRpY3RhYmxlLiBTeXprYWxsZXIsIGluIHRoaXMgY2FzZSwgd291bGQgY29uc3RhbnRseSBoaXQgdGhlIGZhaWx1cmUgcGF0aCBkdWUgdG8gdGhlIG5vbi1mdW5jdGlvbmFsIEFRLiBJdOKAmXMgZXNzZW50aWFsbHkgYSBsb2NrIGFjcXVpc2l0aW9uL3JlbGVhc2UgYXJvdW5kIGEgZmFpbGluZyBBUSBjb21tYW5kLCBhbmQgdGhlIGRyaXZlciBpcyBkZXNpZ25lZCB0byBoYW5kbGUgdGhpcyBmYWlsdXJlLCBzbyBJIGRvbiYjMzk7dCBzZWUgYW55IGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlIGhlcmUuIEV2ZW4gaWYgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgdHJpZ2dlciB0aGlzLCB0aGUgb3V0Y29tZSB3b3VsZCBiZSBjb25zaXN0ZW50IHRpbWVvdXRzLiBUaGUgQVEgcmVzcG9uc2UgY2FuJiMzOTt0IGJlIGNvbnRyb2xsZWQuIEFuZCB5ZXMsIGBpY2VfYWNxdWlyZV9udm1gIGRvZXMgcmVseSBvbiB0aGUgQWRtaW4gUXVldWUuIFNvIG5vLCB0aGlzIGRvZXNuJiMzOTt0IHNlZW0gbGlrZSBhIHByb21pc2luZyBhdmVudWUgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWNlX2FjcXVpcmVfbnZtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTcwPWljZV9yZWFkX2ZsYXRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgKmxlbmd0aCwgdTggKmRhdGEsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMDAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjEwMTpcdFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0xMDItXHRcdGlmIChzdGF0dXMpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0yMDk9c3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMjctLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjIyODogKiBpY2VfYWNxdWlyZV9udm0gLSBHZW5lcmljIHJlcXVlc3QgZm9yIGFjcXVpcmluZyB0aGUgTlZNIG93bmVyc2hpcFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMjktICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIzMy0gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MjM0OmludCBpY2VfYWNxdWlyZV9udm0oc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19hY2Nlc3NfdHlwZSBhY2Nlc3MpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIzNS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xMTg2PWludCBpY2VfbnZtX3ZhbGlkYXRlX2NoZWNrc3VtKHN0cnVjdCBpY2VfaHcgKmh3KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE5MS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MTE5MjpcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE5My1cdGlmIChzdGF0dXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDgxCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgSUNFIE5WTSBBY3F1aXNpdGlvbioqCgpBbHJpZ2h0LCBteSBicmFpbiBpcyBhbHJlYWR5IHplcm9pbmcgaW4uIExldCYjMzk7cyBnZXQgcmlnaHQgaW50byB0aGUgY29kZS4gTXkgcHJpbWFyeSBmb2N1cyBpcyBvbiBgaWNlX2FjcXVpcmVfbnZtYCB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIE5WTSBhY3F1aXNpdGlvbiBwcm9jZXNzIHdvcmtzIGZvciB0aGlzIEludGVsIEV0aGVybmV0IGNvbnRyb2xsZXIgKElDRSkuIEkgaW1tZWRpYXRlbHkgd2FudCB0byBncmFzcCB0aGUgaW5pdGlhbGl6YXRpb24sIHRoZSBlcnJvciBoYW5kbGluZywgYW5kIHRoZSBvdmVyYWxsIGNvbnRyb2wgZmxvdyBvZiB0aGlzIGNyaXRpY2FsIGZ1bmN0aW9uLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMgdG8gbG93LWxldmVsIE5WTSBpbnRlcmZhY2UgZnVuY3Rpb25zIGFuZCBhbnkgcmVsZXZhbnQgcG93ZXIgbWFuYWdlbWVudCBvciBoYXJkd2FyZS1zcGVjaWZpYyBjb25zaWRlcmF0aW9ucyB0aGF0IGltcGFjdCB0aGlzIHByb2Nlc3MuIE15IGJhY2tncm91bmQgaXMgZGVlcCBlbm91Z2ggdGhhdCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgc3RyYXRlZ2llcyB0aGF0IHRoZSBkcml2ZXIgdXNlcyB0byBlbnN1cmUgdGhlIE5WTSBpcyBhY2Nlc3NlZCByZWxpYWJseS4gTXkgZ29hbCBpcyB0byBjb21wbGV0ZWx5IGRpc3NlY3QgaXRzIGJlaGF2aW9yLCB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaGFyZHdhcmUsIGFuZCBpZGVudGlmeSBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBidWdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIzNDpcdGludCBpY2VfYWNxdWlyZV9udm0oc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19hY2Nlc3NfdHlwZSBhY2Nlc3MpXG4gMjM1Olx0e1xuIDIzNjpcdFx0aWYgKGh3LVx1MDAzZWZsYXNoLmJsYW5rX252bV9tb2RlKVxuIDIzNzpcdFx0XHRyZXR1cm4gMDtcbiAyMzg6XHRcbiAyMzk6XHRcdHJldHVybiBpY2VfYWNxdWlyZV9yZXMoaHcsIElDRV9OVk1fUkVTX0lELCBhY2Nlc3MsIElDRV9OVk1fVElNRU9VVCk7XG4gMjQwOlx0fVxuIDI0MTpcdFxuIDI0MjpcdC8qKlxuIDI0MzpcdCAqIGljZV9yZWxlYXNlX252bSAtIEdlbmVyaWMgcmVxdWVzdCBmb3IgcmVsZWFzaW5nIHRoZSBOVk0gb3duZXJzaGlwXG4gMjQ0Olx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbiAyNDU6XHQgKlxuIDI0NjpcdCAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZWxlYXNlIE5WTSBvd25lcnNoaXAuXG4gMjQ3Olx0ICovXG4gMjQ4Olx0dm9pZCBpY2VfcmVsZWFzZV9udm0oc3RydWN0IGljZV9odyAqaHcpXG4gMjQ5Olx0e1xuIDI1MDpcdFx0aWYgKGh3LVx1MDAzZWZsYXNoLmJsYW5rX252bV9tb2RlKVxuIDI1MTpcdFx0XHRyZXR1cm47XG4gMjUyOlx0XG4gMjUzOlx0XHRpY2VfcmVsZWFzZV9yZXMoaHcsIElDRV9OVk1fUkVTX0lEKTtcbiAyNTQ6XHR9XG4gMjU1Olx0XG4gMjU2Olx0LyoqXG4gMjU3Olx0ICogaWNlX2dldF9mbGFzaF9iYW5rX29mZnNldCAtIEdldCBvZmZzZXQgaW50byByZXF1ZXN0ZWQgZmxhc2ggYmFua1xuIDI1ODpcdCAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gMjU5Olx0ICogQGJhbms6IHdoZXRoZXIgdG8gcmVhZCBmcm9tIHRoZSBhY3RpdmUgb3IgaW5hY3RpdmUgZmxhc2ggYmFua1xuIDI2MDpcdCAqIEBtb2R1bGU6IHRoZSBtb2R1bGUgdG8gcmVhZCBmcm9tXG4gMjYxOlx0ICpcbiAyNjI6XHQgKiBCYXNlZCBvbiB0aGUgbW9kdWxlLCBsb29rdXAgdGhlIG1vZHVsZSBvZmZzZXQgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZVxuIDI2MzpcdCAqIGZsYXNoLlxuIDI2NDpcdCAqXG4gMjY1Olx0ICogUmV0dXJucyB0aGUgZmxhc2ggb2Zmc2V0LiBOb3RlIHRoYXQgYSB2YWx1ZSBvZiB6ZXJvIGlzIGludmFsaWQgYW5kIG11c3QgYmVcbiAyNjY6XHQgKiB0cmVhdGVkIGFzIGFuIGVycm9yLlxuIDI2NzpcdCAqL1xuIDI2ODpcdHN0YXRpYyB1MzIgaWNlX2dldF9mbGFzaF9iYW5rX29mZnNldChzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTE2IG1vZHVsZSlcbiAyNjk6XHR7XG4gMjcwOlx0XHRzdHJ1Y3QgaWNlX2JhbmtfaW5mbyAqYmFua3MgPSBcdTAwMjZody1cdTAwM2VmbGFzaC5iYW5rcztcbiAyNzE6XHRcdGVudW0gaWNlX2ZsYXNoX2JhbmsgYWN0aXZlX2Jhbms7XG4gMjcyOlx0XHRib29sIHNlY29uZF9iYW5rX2FjdGl2ZTtcbiAyNzM6XHRcdHUzMiBvZmZzZXQsIHNpemU7XG4gMjc0Olx0XG4gMjc1Olx0XHRzd2l0Y2ggKG1vZHVsZSkge1xuIDI3NjpcdFx0Y2FzZSBJQ0VfU1JfMVNUX05WTV9CQU5LX1BUUjpcbiAyNzc6XHRcdFx0b2Zmc2V0ID0gYmFua3MtXHUwMDNlbnZtX3B0cjtcbiAyNzg6XHRcdFx0c2l6ZSA9IGJhbmtzLVx1MDAzZW52bV9zaXplO1xuIDI3OTpcdFx0XHRhY3RpdmVfYmFuayA9IGJhbmtzLVx1MDAzZW52bV9iYW5rO1xuIDI4MDpcdFx0XHRicmVhaztcbiAyODE6XHRcdGNhc2UgSUNFX1NSXzFTVF9PUk9NX0JBTktfUFRSOlxuIDI4MjpcdFx0XHRvZmZzZXQgPSBiYW5rcy1cdTAwM2Vvcm9tX3B0cjtcbiAyODM6XHRcdFx0c2l6ZSA9IGJhbmtzLVx1MDAzZW9yb21fc2l6ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDMgMTI6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1NTQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWlsb3JlZCBhcyBpZiBJLCBhbiBleHBlcnQsIGFtIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKlJlc291cmNlIE1hbmFnZW1lbnQgaW4gdGhlIEljZSBMYXllcioqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCwgYXMgZXhwZWN0ZWQsIGl0JiMzOTtzIGxldmVyYWdpbmcgYGljZV9hY3F1aXJlX3Jlc2AgYW5kIGBpY2VfcmVsZWFzZV9yZXNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgJiMzNDtpY2UmIzM0OyBsYXllciDigJMgYW5kIHRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIG9mIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgd2UmIzM5O3JlIGRpc2N1c3NpbmcuIFRoZXNlIGZ1bmN0aW9uIGNhbGxzIGFyZSBteSBicmVhZCBhbmQgYnV0dGVyIGluIHNpdHVhdGlvbnMgbGlrZSB0aGlzLiBJdOKAmXMgcHJldHR5IG9idmlvdXMgdGhleSYjMzk7cmUgYWN0aW5nIGFzIGdhdGVrZWVwZXJzLCBjb250cm9sbGluZyBhY2Nlc3MgdG8gc29tZXRoaW5nIGNyaXRpY2FsLiBUaGUgJiMzNDthY3F1aXJlJiMzNDsgc3Ryb25nbHkgc3VnZ2VzdHMgZ3JhYmJpbmcgZXhjbHVzaXZlIG9yIHNoYXJlZCBhY2Nlc3MsIGxpa2VseSBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuICYjMzQ7UmVsZWFzZSwmIzM0OyB0aGVuLCBzeW1tZXRyaWNhbGx5IHJlbGlucXVpc2hlcyB0aGF0IGNvbnRyb2wsIGhvcGVmdWxseSBpbiBhIHRpZHkgYW5kIHByZWRpY3RhYmxlIG1hbm5lci4gSSBuZWVkIHRvIGRpZyBkZWVwZXIsIG9mIGNvdXJzZSwgYnV0IGp1c3QgZnJvbSB0aGVzZSBuYW1lcywgSSYjMzk7bSBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBjb250cm9sbGVkIGFjY2VzcyB0byBhIHNoYXJlZCByZXNvdXJjZSB3aXRoaW4gdGhlIHN5c3RlbSYjMzk7cyAmIzM0O2ljZSYjMzQ7IGNvbXBvbmVudC4gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzIOKAkyBidXQgdGhpcyBpcyBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50IGZvciBmaWd1cmluZyBvdXQgKndoYXQqIHJlc291cmNlIGlzIGJlaW5nIG1hbmFnZWQsICp3aHkqIGl0IG5lZWRzIGNvbnRyb2xsZWQgYWNjZXNzLCBhbmQgKmhvdyogdGhlIHN5c3RlbSBlbnN1cmVzIHByb3BlciBzeW5jaHJvbml6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAzIDEyOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ljZV9hY3F1aXJlX3JlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0yMTMxPWljZV9hcV9yZWxlYXNlX3JlcyhzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2lkcyByZXMsIHU4IHNkcF9udW1iZXIsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTQ3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoyMTQ4OiAqIGljZV9hY3F1aXJlX3Jlc1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTQ5LSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0yMTU2PWludFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoyMTU3OmljZV9hY3F1aXJlX3JlcyhzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2lkcyByZXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxNTgtXHRcdGVudW0gaWNlX2FxX3Jlc19hY2Nlc3NfdHlwZSBhY2Nlc3MsIHUzMiB0aW1lb3V0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMjE3Mi1cdGlmIChzdGF0dXMgPT0gLUVBTFJFQURZKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoyMTczOlx0XHRnb3RvIGljZV9hY3F1aXJlX3Jlc19leGl0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTc0LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMjE5NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MjE5NjppY2VfYWNxdWlyZV9yZXNfZXhpdDpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMjE5Ny1cdGlmIChzdGF0dXMgPT0gLUVBTFJFQURZKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaD05Nz1pbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6OTg6aWNlX2FjcXVpcmVfcmVzKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfaWRzIHJlcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtOTktXHRcdGVudW0gaWNlX2FxX3Jlc19hY2Nlc3NfdHlwZSBhY2Nlc3MsIHUzMiB0aW1lb3V0KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jPTExMzY9c3RhdGljIGludCBpY2VfYWNxdWlyZV9nbG9iYWxfY2ZnX2xvY2soc3RydWN0IGljZV9odyAqaHcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0xMTQwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYzoxMTQxOlx0c3RhdHVzID0gaWNlX2FjcXVpcmVfcmVzKGh3LCBJQ0VfR0xPQkFMX0NGR19MT0NLX1JFU19JRCwgYWNjZXNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0xMTQyLVx0XHRcdFx0IElDRV9HTE9CQUxfQ0ZHX0xPQ0tfVElNRU9VVCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYz0yMzg4PWludCBpY2VfY2ZnX3R4X3RvcG8oc3RydWN0IGljZV9odyAqaHcsIGNvbnN0IHZvaWQgKmJ1ZiwgdTMyIGxlbilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1MDEtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM6MjUwMjpcdHN0YXR1cyA9IGljZV9hY3F1aXJlX3JlcyhodywgSUNFX0dMT0JBTF9DRkdfTE9DS19SRVNfSUQsIElDRV9SRVNfV1JJVEUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1MDMtXHRcdFx0XHQgSUNFX0dMT0JBTF9DRkdfTE9DS19USU1FT1VUKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTI3OD1pY2VfYWNxdWlyZV9jaGFuZ2VfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcylcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjc5LXtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjgwOlx0cmV0dXJuIGljZV9hY3F1aXJlX3JlcyhodywgSUNFX0NIQU5HRV9MT0NLX1JFU19JRCwgYWNjZXNzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYy0yODEtXHRcdFx0ICAgICAgIElDRV9DSEFOR0VfTE9DS19USU1FT1VUKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTIzND1pbnQgaWNlX2FjcXVpcmVfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfYWNjZXNzX3R5cGUgYWNjZXNzKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjM4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMzk6XHRyZXR1cm4gaWNlX2FjcXVpcmVfcmVzKGh3LCBJQ0VfTlZNX1JFU19JRCwgYWNjZXNzLCBJQ0VfTlZNX1RJTUVPVVQpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yNDAtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDA0OAoJCQkJCQkJb3V0cHV0OiAxMjcKCQkJCQkJCXRob3VnaHRzOiAxODU2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIHRoZSBDb2RlIGFuZCBpdHMgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gdHJhY2luZyB0aGUgZXhlY3V0aW9uIHBhdGggb2YgdGhpcyBgaWNlX3JlYWRfZmxhdF9udm1gIGZ1bmN0aW9uIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgYW5kIEkmIzM5O3ZlIGNvbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB0aGlzIHBhdGNoLCBpbiBpdHMgY3VycmVudCBmb3JtLCBpc24mIzM5O3Qgc29tZXRoaW5nIHRoYXQmIzM5O3Mgd29ydGggZnV6emluZy4gSGVyZSYjMzk7cyB3aHk6CgpFc3NlbnRpYWxseSwgdGhpcyBjb2RlIGlzIGRlZXBseSB0aWVkIHRvIHRoZSBoYXJkd2FyZS4gYGljZV9yZWFkX2ZsYXRfbnZtYCBpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIHdoZXJlIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgbm9uLXZvbGF0aWxlIG1lbW9yeSAoTlZNKSBvbiBhbiBJbnRlbCBJQ0UgbmV0d29yayBhZGFwdGVyLiBUaGUgY29yZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24gcmVsaWVzIGhlYXZpbHkgb24gdGhlIEFkbWluIFF1ZXVlIChBUSkgb2YgdGhlIGhhcmR3YXJlLCB3aGljaCBpcyBtYW5hZ2VkIHZpYSBgaWNlX2FjcXVpcmVfbnZtYCBhbmQgYGljZV9yZWxlYXNlX252bWAuIFRoZSBgaWNlX2FxX2FsbG9jX2ZyZWVfcmVzYCBmdW5jdGlvbiBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgYGljZV9hY3F1aXJlX3Jlc2AgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJ5IGBpY2VfYWNxdWlyZV9udm1gLCBzaG93aW5nIHRoYXQgTlZNIGNvbW1hbmRzIHV0aWxpemUgdGhlIEFkbWluIFF1ZXVlLiBUaGlzIEFkbWluIFF1ZXVlIGlzIG5vdCBnb2luZyB0byB3b3JrIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBwcmVzZW50IGFuZCBydW5uaW5nLgoKU3BlY2lmaWNhbGx5LCB0aGUgY29kZSB0cmllcyB0byBhY3F1aXJlIGFuIE5WTSBsb2NrLCB0aGVuIHNlbmRzIGFuIEFkbWluIFF1ZXVlIGNvbW1hbmQgdG8gcmVhZCBhIGNodW5rIG9mIHRoZSBOVk0uIFRoZSBwYXRjaCBtb2RpZmllcyB0aGlzIGJ5IG1vdmluZyB0aGUgbG9jayBhY3F1aXNpdGlvbiBpbnNpZGUgdGhlIGxvb3AuIEhvd2V2ZXIsIHRoZSBpbml0aWFsIGBpY2VfYWNxdWlyZV9udm1gIHdpbGwgZmFpbCB3aGVuIHRoZXJlJiMzOTtzIG5vIGhhcmR3YXJlIG9yIHByb3BlciBlbXVsYXRpb24gYmVjYXVzZSB0aGUgQVEgY29tbWFuZCB3aWxsIHRpbWVvdXQuIFRoZSBkcml2ZXIgZmFpbHMgZHVyaW5nIHByb2JlLCBzbyBkZXZsaW5rIGFuZCBldGh0b29sIGludGVyZmFjZXMgd29uJiMzOTt0IGV2ZW4gYmUgcmVnaXN0ZXJlZC4gVGhhdCBtZWFucyBgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90YCwgYGljZV9kZXZsaW5rX252bV9yZWFkYCwgYW5kIGBpY2VfZ2V0X2VlcHJvbWAgYXJlIHVucmVhY2hhYmxlLiBUaGUgb25seSB3YXkgd2UgZ2V0IHRvIGBpY2VfcmVhZF9mbGF0X252bWAgaXMgZHVyaW5nIHRoZSBwcm9iZSBzZXF1ZW5jZSB2aWEgYGljZV9pbml0X252bWAgYW5kIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAuIEJ1dCBgaWNlX2luaXRfbnZtYCBpcyBjYWxsZWQgYWZ0ZXIgYGljZV9jcmVhdGVfYWxsX2N0cmxxYCB3aGljaCBhbGxvY2F0ZXMgbWVtb3J5LiBJZiB0aGVyZSYjMzk7cyBubyBoYXJkd2FyZSwgdGhlIGZpcnN0IEFRIGNvbW1hbmQgd2lsbCB0aW1lb3V0LgoKRXZlbiBpZiBgaHctJmd0O2ZsYXNoLmJsYW5rX252bV9tb2RlYCBpcyB0cnVlLCB0aGVuIGBpY2VfYWNxdWlyZV9udm1gIHJldHVybnMgMCwgYnV0IHRoZSBjYWxsIHRvIGBpY2VfYXFfcmVhZF9udm1gIHdpbGwgdGltZSBvdXQsIHNpbmNlIGBpY2VfYXFfc2VuZF9jbWRgIHdpbGwgYXR0ZW1wdCB0byBzZW5kIGFuIEFkbWluIFF1ZXVlIGNvbW1hbmQuCgpTeXprYWxsZXIgY2FuJiMzOTt0IHNpbXVsYXRlIHRoZSBETUEgaW50ZXJhY3Rpb25zIGFuZCB3aWxsIGp1c3QgdGltZW91dCB3aGVuIGl0IHRyaWVzIHRvIGZ1enogdGhlc2UgQVEgcmVzcG9uc2VzLiBUaGUgbG9vcCB3aXRoaW4gYGljZV9yZWFkX2ZsYXRfbnZtYCB3b24mIzM5O3QgZXhlY3V0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcGF0Y2gmIzM5O3MgY29yZSBsb2dpYyBvZiBhY3F1aXJpbmcgYW5kIHJlbGVhc2luZyB0aGUgbG9jayBpbnNpZGUgdGhlIGxvb3AgaXMgY29tcGxldGVseSBoYXJkd2FyZS1kZXBlbmRlbnQgYW5kIGNhbiYjMzk7dCBiZSBleGVyY2lzZWQgZWZmZWN0aXZlbHkuCgpUaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIGZ1enppbmcgaXQgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGJlbmVmaWNpYWwuIFRodXMsIHRoZSBjb3JyZWN0IGRldGVybWluYXRpb24gaXMgV29ydGhGdXp6aW5nPWZhbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMyAxMjoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5WTSByZWFkIGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW92aW5nIE5WTSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIGluc2lkZSB0aGUgcmVhZCBsb29wIHRvIHByZXZlbnQgRlcgbG9jayB0aW1lb3V0cy4gVGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgaGFyZHdhcmUgQWRtaW4gUXVldWUgKEFRKSB0byBwcm9jZXNzIGNvbW1hbmRzLiBXaXRob3V0IHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlIG9yIGEgZnVsbCBzb2Z0d2FyZSBlbXVsYXRvciAod2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gUUVNVSksIHRoZSBBUSBjb21tYW5kcyB3aWxsIHNpbXBseSB0aW1lb3V0IGFuZCBmYWlsLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIE5WTSByZWFkIGxvZ2ljIGluIHRoZSBJbnRlbCBJQ0UgZHJpdmVyLCBzcGVjaWZpY2FsbHkgbW92aW5nIE5WTSBsb2NrIGFjcXVpc2l0aW9uIGFuZCByZWxlYXNlIGluc2lkZSB0aGUgcmVhZCBsb29wIHRvIHByZXZlbnQgRlcgbG9jayB0aW1lb3V0cy4gVGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgaGFyZHdhcmUgQWRtaW4gUXVldWUgKEFRKSB0byBwcm9jZXNzIGNvbW1hbmRzLiBXaXRob3V0IHBoeXNpY2FsIEludGVsIEU4MDAgc2VyaWVzIGhhcmR3YXJlIG9yIGEgZnVsbCBzb2Z0d2FyZSBlbXVsYXRvciAod2hpY2ggZG9lcyBub3QgZXhpc3QgaW4gUUVNVSksIHRoZSBBUSBjb21tYW5kcyB3aWxsIHNpbXBseSB0aW1lb3V0IGFuZCBmYWlsLiBUaGVyZWZvcmUsIHRoaXMgY29kZSBwYXRoIGlzIGltcG9zc2libGUgdG8gbWVhbmluZ2Z1bGx5IHJlYWNoIGFuZCBmdXp6IGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNDo0NS44MzMwOTg4MjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTM0MDQ2NjE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTlZNIHJlYWQgbG9naWMgaW4gdGhlIEludGVsIElDRSBkcml2ZXIsIHNwZWNpZmljYWxseSBtb3ZpbmcgTlZNIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgaW5zaWRlIHRoZSByZWFkIGxvb3AgdG8gcHJldmVudCBGVyBsb2NrIHRpbWVvdXRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBoYXJkd2FyZSBBZG1pbiBRdWV1ZSAoQVEpIHRvIHByb2Nlc3MgY29tbWFuZHMuIFdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgaGFyZHdhcmUgb3IgYSBmdWxsIHNvZnR3YXJlIGVtdWxhdG9yICh3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBRRU1VKSwgdGhlIEFRIGNvbW1hbmRzIHdpbGwgc2ltcGx5IHRpbWVvdXQgYW5kIGZhaWwuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byBtZWFuaW5nZnVsbHkgcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTQ6NDUuODMzMTA1MDU4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQ1MDQzODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3OTYxMGM4NzM4MjdmZDJkMzcyODE1YmRkMzUxYWQxY2QwZjBlYzQ3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDMgMTI6MTQ6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXFxuaW5kZXggMjJiN2Q4ZTZiZDllOGYuLjdjN2ZlM2QyZTlkOTkwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xcbkBAIC0xODkxLDI2ICsxODkxLDE1IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90KHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnVtX2Jsa3M7IGkrKykge1xcbiBcXHRcXHR1MzIgcmVhZF9zeiA9IG1pbl90KHUzMiwgSUNFX0RFVkxJTktfUkVBRF9CTEtfU0laRSwgbGVmdCk7XFxuIFxcbi1cXHRcXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuLVxcdFxcdGlmIChzdGF0dXMpIHtcXG4tXFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHRzdGF0dXMsIGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xcbi1cXHRcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVxcXCIpO1xcbi1cXHRcXHRcXHR2ZnJlZShudm1fZGF0YSk7XFxuLVxcdFxcdFxcdHJldHVybiAtRUlPO1xcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgaSAqIElDRV9ERVZMSU5LX1JFQURfQkxLX1NJWkUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XFxuIFxcdFxcdGlmIChzdGF0dXMpIHtcXG4gXFx0XFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcXFxuXFxcIixcXG4gXFx0XFx0XFx0XFx0cmVhZF9zeiwgc3RhdHVzLCBody1cXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcXG4gXFx0XFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcIkZhaWxlZCB0byByZWFkIE5WTSBjb250ZW50c1xcXCIpO1xcbi1cXHRcXHRcXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xcbiBcXHRcXHRcXHR2ZnJlZShudm1fZGF0YSk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcbiBcXHRcXHR0bXAgKz0gcmVhZF9zejtcXG4gXFx0XFx0bGVmdCAtPSByZWFkX3N6O1xcbkBAIC0xOTY2LDI0ICsxOTU1LDE0IEBAIHN0YXRpYyBpbnQgaWNlX2RldmxpbmtfbnZtX3JlYWQoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXFxuIFxcdFxcdHJldHVybiAtRVJBTkdFO1xcbiBcXHR9XFxuIFxcbi1cXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XFxuLVxcdGlmIChzdGF0dXMpIHtcXG4tXFx0XFx0ZGV2X2RiZyhkZXYsIFxcXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRzdGF0dXMsIGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xcbi1cXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVxcXCIpO1xcbi1cXHRcXHRyZXR1cm4gLUVJTztcXG4tXFx0fVxcbi1cXG4gXFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsICh1MzIpb2Zmc2V0LCBcXHUwMDI2c2l6ZSwgZGF0YSxcXG4gXFx0XFx0XFx0XFx0ICAgcmVhZF9zaGFkb3dfcmFtKTtcXG4gXFx0aWYgKHN0YXR1cykge1xcbiBcXHRcXHRkZXZfZGJnKGRldiwgXFxcImljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXFxcXG5cXFwiLFxcbiBcXHRcXHRcXHRzaXplLCBzdGF0dXMsIGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xcbiBcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiRmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXFxcIik7XFxuLVxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHR9XFxuLVxcdGljZV9yZWxlYXNlX252bShodyk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuaW5kZXggNDkzNzFiMDY1ODQ1ODIuLmRkZWNhMzlkODIyYmIxIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcXG5AQCAtODY5LDI0ICs4NjksMTUgQEAgaWNlX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sXFxuIFxcdGlmICghYnVmKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdHJldCA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKHJldCkge1xcbi1cXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9hY3F1aXJlX252bSBmYWlsZWQsIGVyciAlZCBhcV9lcnIgJXNcXFxcblxcXCIsXFxuLVxcdFxcdFxcdHJldCwgbGliaWVfYXFfc3RyKGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpKTtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4tXFxuIFxcdHJldCA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBlZXByb20tXFx1MDAzZW9mZnNldCwgXFx1MDAyNmVlcHJvbS1cXHUwMDNlbGVuLCBidWYsXFxuIFxcdFxcdFxcdFxcdGZhbHNlKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlc1xcXFxuXFxcIixcXG4gXFx0XFx0XFx0cmV0LCBsaWJpZV9hcV9zdHIoaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cykpO1xcbi1cXHRcXHRnb3RvIHJlbGVhc2U7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbiBcXHRtZW1jcHkoYnl0ZXMsIGJ1ZiwgZWVwcm9tLVxcdTAwM2VsZW4pO1xcbi1yZWxlYXNlOlxcbi1cXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xcbiBvdXQ6XFxuIFxcdGtmcmVlKGJ1Zik7XFxuIFxcdHJldHVybiByZXQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXFxuaW5kZXggN2UxODdhODA0ZGZhMTYuLmNiMTU0MTg0NDI0MmJhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXFxuQEAgLTU4LDYgKzU4LDExIEBAIGludCBpY2VfYXFfcmVhZF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUxNiBtb2R1bGVfdHlwZWlkLCB1MzIgb2Zmc2V0LFxcbiAgKiBicmVha3MgcmVhZCByZXF1ZXN0cyBhY3Jvc3MgU2hhZG93IFJBTSBzZWN0b3JzIGFuZCBlbnN1cmVzIHRoYXQgbm8gc2luZ2xlXFxuICAqIHJlYWQgcmVxdWVzdCBleGNlZWRzIHRoZSBtYXhpbXVtIDRLQiByZWFkIGZvciBhIHNpbmdsZSBBZG1pblEgY29tbWFuZC5cXG4gICpcXG4rICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZVxcbisgKiA0S0Igc2VjdG9ycyBjYW5ub3QgYmUgZG9uZSB1bmRlciBhIHNpbmdsZSBsb2NrIHdpdGhvdXQgRlcgcmVjbGFpbWluZyBpdFxcbisgKiBtaWQtcmVhZC4gVGhlIE5WTSBsb2NrIGlzIHRoZXJlZm9yZSBhY3F1aXJlZCBhbmQgcmVsZWFzZWQgYXJvdW5kIGVhY2ggQVFcXG4rICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXFxuKyAqXFxuICAqIFJldHVybnMgYSBzdGF0dXMgY29kZSBvbiBmYWlsdXJlLiBOb3RlIHRoYXQgdGhlIGRhdGEgcG9pbnRlciBtYXkgYmVcXG4gICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuXFxuICAqL1xcbkBAIC02NSw2ICs3MCw3IEBAIGludFxcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxcbiBcXHRcXHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKVxcbiB7XFxuK1xcdGVudW0gbGliaWVfYXFfZXJyIGFxX2VycjtcXG4gXFx0dTMyIGlubGVuID0gKmxlbmd0aDtcXG4gXFx0dTMyIGJ5dGVzX3JlYWQgPSAwO1xcbiBcXHRib29sIGxhc3RfY21kO1xcbkBAIC05MiwxMiArOTgsMjggQEAgaWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcXG4gXFxuIFxcdFxcdGxhc3RfY21kID0gIShieXRlc19yZWFkICsgcmVhZF9zaXplIFxcdTAwM2MgaW5sZW4pO1xcbiBcXG4rXFx0XFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xcbitcXHRcXHRpZiAoc3RhdHVzKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuIFxcdFxcdHN0YXR1cyA9IGljZV9hcV9yZWFkX252bShodywgSUNFX0FRQ19OVk1fU1RBUlRfUE9JTlQsXFxuIFxcdFxcdFxcdFxcdFxcdCBvZmZzZXQsIHJlYWRfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0XFx0IGRhdGEgKyBieXRlc19yZWFkLCBsYXN0X2NtZCxcXG4gXFx0XFx0XFx0XFx0XFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XFxuLVxcdFxcdGlmIChzdGF0dXMpXFxuK1xcdFxcdGlmIChzdGF0dXMpIHtcXG4rXFx0XFx0XFx0LyogaWNlX3JlbGVhc2VfbnZtKCkgaXNzdWVzIGFuIEFRIGNvbW1hbmQgdGhhdCB3b3VsZFxcbitcXHRcXHRcXHQgKiBvdmVyd3JpdGUgc3FfbGFzdF9zdGF0dXMsIHdoaWNoIHNvbWUgY2FsbGVyc1xcbitcXHRcXHRcXHQgKiBpbnNwZWN0IGFmdGVyIGEgZmFpbGVkIHJlYWQuIFByZXNlcnZlIHRoZSByZWFkJ3NcXG4rXFx0XFx0XFx0ICogQVEgZXJyb3IgYWNyb3NzIHRoZSByZWxlYXNlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0YXFfZXJyID0gaHctXFx1MDAzZWFkbWlucS5zcV9sYXN0X3N0YXR1cztcXG4rXFxuK1xcdFxcdFxcdGljZV9yZWxlYXNlX252bShodyk7XFxuK1xcdFxcdFxcdGh3LVxcdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMgPSBhcV9lcnI7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xcbiBcXG4gXFx0XFx0Ynl0ZXNfcmVhZCArPSByZWFkX3NpemU7XFxuIFxcdFxcdG9mZnNldCArPSByZWFkX3NpemU7XFxuQEAgLTMzMCwxNCArMzUyLDggQEAgaWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLFxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbiBcXG4tXFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xcbi1cXHRpZiAoc3RhdHVzKVxcbi1cXHRcXHRyZXR1cm4gc3RhdHVzO1xcbi1cXG4gXFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICsgb2Zmc2V0LCBcXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSk7XFxuIFxcbi1cXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xcbi1cXG4gXFx0cmV0dXJuIHN0YXR1cztcXG4gfVxcbiBcXG5AQCAtNDE5LDI0ICs0MzUsMTkgQEAgaWNlX3JlYWRfbmV0bGlzdF9tb2R1bGUoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2Jhbmtfc2VsZWN0IGJhbmssIHUzMiBvZmZzZXRcXG4gfVxcbiBcXG4gLyoqXFxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxcbisgKiBpY2VfcmVhZF9zcl93b3JkIC0gUmVhZHMgU2hhZG93IFJBTSB3b3JkXFxuICAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpXFxuICAqIEBkYXRhOiB3b3JkIHJlYWQgZnJvbSB0aGUgU2hhZG93IFJBTVxcbiAgKlxcbi0gKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyB0aGUgaWNlX3JlYWRfc3Jfd29yZF9hcS5cXG4rICogUmVhZHMgb25lIDE2IGJpdCB3b3JkIGZyb20gdGhlIFNoYWRvdyBSQU0gdXNpbmcgaWNlX3JlYWRfc3Jfd29yZF9hcS5cXG4rICpcXG4rICogVGhlIE5WTSBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBpbnRlcm5hbGx5IGJ5IGljZV9yZWFkX2ZsYXRfbnZtKClcXG4rICogYXJvdW5kIHRoZSBGVyByZWFkLCBzbyB0aGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGxvY2sgaGVsZC5cXG4gICovXFxuIGludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuIHtcXG4tXFx0aW50IHN0YXR1cztcXG4tXFxuLVxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKCFzdGF0dXMpIHtcXG4tXFx0XFx0c3RhdHVzID0gaWNlX3JlYWRfc3Jfd29yZF9hcShodywgb2Zmc2V0LCBkYXRhKTtcXG4tXFx0XFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcXG4tXFx0fVxcbi1cXG4tXFx0cmV0dXJuIHN0YXR1cztcXG4rXFx0cmV0dXJuIGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XFxuIH1cXG4gXFxuIC8qKlxcbkBAIC04NTYsMTEgKzg2Nyw3IEBAIGludCBpY2VfZ2V0X2luYWN0aXZlX25ldGxpc3RfdmVyKHN0cnVjdCBpY2VfaHcgKmh3LCBzdHJ1Y3QgaWNlX25ldGxpc3RfaW5mbyAqbmV0XFxuIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXFxuIHtcXG4gXFx0dTMyIG1pbl9zaXplID0gMCwgbWF4X3NpemUgPSBJQ0VfQVFDX05WTV9NQVhfT0ZGU0VUICsgMTtcXG4tXFx0aW50IHN0YXR1cztcXG4tXFxuLVxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG4tXFx0aWYgKHN0YXR1cylcXG4tXFx0XFx0cmV0dXJuIHN0YXR1cztcXG4rXFx0aW50IHN0YXR1cyA9IDA7XFxuIFxcbiBcXHR3aGlsZSAoKG1heF9zaXplIC0gbWluX3NpemUpIFxcdTAwM2UgMSkge1xcbiBcXHRcXHR1MzIgb2Zmc2V0ID0gKG1heF9zaXplICsgbWluX3NpemUpIC8gMjtcXG5AQCAtODgwLDcgKzg4Nyw3IEBAIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcdFxcdFxcdG1pbl9zaXplID0gb2Zmc2V0O1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHQvKiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkICovXFxuLVxcdFxcdFxcdGdvdG8gZXJyX3JlYWRfZmxhdF9udm07XFxuK1xcdFxcdFxcdHJldHVybiBzdGF0dXM7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXG5AQCAtODg4LDkgKzg5NSw2IEBAIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXFxuIFxcbiBcXHRody1cXHUwMDNlZmxhc2guZmxhc2hfc2l6ZSA9IG1heF9zaXplO1xcbiBcXG4tZXJyX3JlYWRfZmxhdF9udm06XFxuLVxcdGljZV9yZWxlYXNlX252bShodyk7XFxuLVxcbiBcXHRyZXR1cm4gc3RhdHVzO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNDo0Ni41NTA5MTg5NjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg0NjIyNjM0NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBOVk0gcmVhZCBsb2dpYyBpbiB0aGUgSW50ZWwgSUNFIGRyaXZlciwgc3BlY2lmaWNhbGx5IG1vdmluZyBOVk0gbG9jayBhY3F1aXNpdGlvbiBhbmQgcmVsZWFzZSBpbnNpZGUgdGhlIHJlYWQgbG9vcCB0byBwcmV2ZW50IEZXIGxvY2sgdGltZW91dHMuIFRoaXMgY29kZSByZWxpZXMgb24gdGhlIGhhcmR3YXJlIEFkbWluIFF1ZXVlIChBUSkgdG8gcHJvY2VzcyBjb21tYW5kcy4gV2l0aG91dCBwaHlzaWNhbCBJbnRlbCBFODAwIHNlcmllcyBoYXJkd2FyZSBvciBhIGZ1bGwgc29mdHdhcmUgZW11bGF0b3IgKHdoaWNoIGRvZXMgbm90IGV4aXN0IGluIFFFTVUpLCB0aGUgQVEgY29tbWFuZHMgd2lsbCBzaW1wbHkgdGltZW91dCBhbmQgZmFpbC4gVGhlcmVmb3JlLCB0aGlzIGNvZGUgcGF0aCBpcyBpbXBvc3NpYmxlIHRvIG1lYW5pbmdmdWxseSByZWFjaCBhbmQgZnV6eiBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5NjEwYzg3MzgyN2ZkMmQzNzI4MTViZGQzNTFhZDFjZDBmMGVjNDdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzIDEyOjE0OjQ0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jXG5pbmRleCAyMmI3ZDhlNmJkOWU4Zi4uN2M3ZmUzZDJlOWQ5OTAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuY1xuQEAgLTE4OTEsMjYgKzE4OTEsMTUgQEAgc3RhdGljIGludCBpY2VfZGV2bGlua19udm1fc25hcHNob3Qoc3RydWN0IGRldmxpbmsgKmRldmxpbmssXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBudW1fYmxrczsgaSsrKSB7XG4gXHRcdHUzMiByZWFkX3N6ID0gbWluX3QodTMyLCBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLCBsZWZ0KTtcbiBcbi1cdFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0XHRpZiAoc3RhdHVzKSB7XG4tXHRcdFx0ZGV2X2RiZyhkZXYsIFwiaWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdFx0c3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuLVx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiRmFpbGVkIHRvIGFjcXVpcmUgTlZNIHNlbWFwaG9yZVwiKTtcbi1cdFx0XHR2ZnJlZShudm1fZGF0YSk7XG4tXHRcdFx0cmV0dXJuIC1FSU87XG4tXHRcdH1cbi1cbiBcdFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGkgKiBJQ0VfREVWTElOS19SRUFEX0JMS19TSVpFLFxuIFx0XHRcdFx0XHQgICBcdTAwMjZyZWFkX3N6LCB0bXAsIHJlYWRfc2hhZG93X3JhbSk7XG4gXHRcdGlmIChzdGF0dXMpIHtcbiBcdFx0XHRkZXZfZGJnKGRldiwgXCJpY2VfcmVhZF9mbGF0X252bSBmYWlsZWQgYWZ0ZXIgcmVhZGluZyAldSBieXRlcywgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuIFx0XHRcdFx0cmVhZF9zeiwgc3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuIFx0XHRcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssIFwiRmFpbGVkIHRvIHJlYWQgTlZNIGNvbnRlbnRzXCIpO1xuLVx0XHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXHRcdFx0dmZyZWUobnZtX2RhdGEpO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHR9XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRcdHRtcCArPSByZWFkX3N6O1xuIFx0XHRsZWZ0IC09IHJlYWRfc3o7XG5AQCAtMTk2NiwyNCArMTk1NSwxNCBAQCBzdGF0aWMgaW50IGljZV9kZXZsaW5rX252bV9yZWFkKHN0cnVjdCBkZXZsaW5rICpkZXZsaW5rLFxuIFx0XHRyZXR1cm4gLUVSQU5HRTtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChzdGF0dXMpIHtcbi1cdFx0ZGV2X2RiZyhkZXYsIFwiaWNlX2FjcXVpcmVfbnZtIGZhaWxlZCwgZXJyICVkIGFxX2VyciAlZFxcblwiLFxuLVx0XHRcdHN0YXR1cywgaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKTtcbi1cdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJGYWlsZWQgdG8gYWNxdWlyZSBOVk0gc2VtYXBob3JlXCIpO1xuLVx0XHRyZXR1cm4gLUVJTztcbi1cdH1cbi1cbiBcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCAodTMyKW9mZnNldCwgXHUwMDI2c2l6ZSwgZGF0YSxcbiBcdFx0XHRcdCAgIHJlYWRfc2hhZG93X3JhbSk7XG4gXHRpZiAoc3RhdHVzKSB7XG4gXHRcdGRldl9kYmcoZGV2LCBcImljZV9yZWFkX2ZsYXRfbnZtIGZhaWxlZCBhZnRlciByZWFkaW5nICV1IGJ5dGVzLCBlcnIgJWQgYXFfZXJyICVkXFxuXCIsXG4gXHRcdFx0c2l6ZSwgc3RhdHVzLCBody1cdTAwM2VhZG1pbnEuc3FfbGFzdF9zdGF0dXMpO1xuIFx0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcIkZhaWxlZCB0byByZWFkIE5WTSBjb250ZW50c1wiKTtcbi1cdFx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbiBcdFx0cmV0dXJuIC1FSU87XG4gXHR9XG4tXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9ldGh0b29sLmNcbmluZGV4IDQ5MzcxYjA2NTg0NTgyLi5kZGVjYTM5ZDgyMmJiMSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZXRodG9vbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2V0aHRvb2wuY1xuQEAgLTg2OSwyNCArODY5LDE1IEBAIGljZV9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLFxuIFx0aWYgKCFidWYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cmV0ID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHJldCkge1xuLVx0XHRkZXZfZXJyKGRldiwgXCJpY2VfYWNxdWlyZV9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVzXFxuXCIsXG4tXHRcdFx0cmV0LCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4tXHRcdGdvdG8gb3V0O1xuLVx0fVxuLVxuIFx0cmV0ID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIGVlcHJvbS1cdTAwM2VvZmZzZXQsIFx1MDAyNmVlcHJvbS1cdTAwM2VsZW4sIGJ1ZixcbiBcdFx0XHRcdGZhbHNlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0ZGV2X2VycihkZXYsIFwiaWNlX3JlYWRfZmxhdF9udm0gZmFpbGVkLCBlcnIgJWQgYXFfZXJyICVzXFxuXCIsXG4gXHRcdFx0cmV0LCBsaWJpZV9hcV9zdHIoaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzKSk7XG4tXHRcdGdvdG8gcmVsZWFzZTtcbitcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHRtZW1jcHkoYnl0ZXMsIGJ1ZiwgZWVwcm9tLVx1MDAzZWxlbik7XG4tcmVsZWFzZTpcbi1cdGljZV9yZWxlYXNlX252bShodyk7XG4gb3V0OlxuIFx0a2ZyZWUoYnVmKTtcbiBcdHJldHVybiByZXQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbmluZGV4IDdlMTg3YTgwNGRmYTE2Li5jYjE1NDE4NDQyNDJiYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcbkBAIC01OCw2ICs1OCwxMSBAQCBpbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCxcbiAgKiBicmVha3MgcmVhZCByZXF1ZXN0cyBhY3Jvc3MgU2hhZG93IFJBTSBzZWN0b3JzIGFuZCBlbnN1cmVzIHRoYXQgbm8gc2luZ2xlXG4gICogcmVhZCByZXF1ZXN0IGV4Y2VlZHMgdGhlIG1heGltdW0gNEtCIHJlYWQgZm9yIGEgc2luZ2xlIEFkbWluUSBjb21tYW5kLlxuICAqXG4rICogRlcgY2FwcyB0aGUgcmVhZCBsb2NrIGF0IGEgbWF4aW11bSBvZiAzMDAwbXMsIHNvIGEgcmVhZCBzcGFubmluZyBtdWx0aXBsZVxuKyAqIDRLQiBzZWN0b3JzIGNhbm5vdCBiZSBkb25lIHVuZGVyIGEgc2luZ2xlIGxvY2sgd2l0aG91dCBGVyByZWNsYWltaW5nIGl0XG4rICogbWlkLXJlYWQuIFRoZSBOVk0gbG9jayBpcyB0aGVyZWZvcmUgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGFyb3VuZCBlYWNoIEFRXG4rICogcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXG4rICpcbiAgKiBSZXR1cm5zIGEgc3RhdHVzIGNvZGUgb24gZmFpbHVyZS4gTm90ZSB0aGF0IHRoZSBkYXRhIHBvaW50ZXIgbWF5IGJlXG4gICogcGFydGlhbGx5IHVwZGF0ZWQgaWYgc29tZSByZWFkcyBzdWNjZWVkIGJlZm9yZSBhIGZhaWx1cmUuXG4gICovXG5AQCAtNjUsNiArNzAsNyBAQCBpbnRcbiBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuIFx0XHQgIGJvb2wgcmVhZF9zaGFkb3dfcmFtKVxuIHtcbitcdGVudW0gbGliaWVfYXFfZXJyIGFxX2VycjtcbiBcdHUzMiBpbmxlbiA9ICpsZW5ndGg7XG4gXHR1MzIgYnl0ZXNfcmVhZCA9IDA7XG4gXHRib29sIGxhc3RfY21kO1xuQEAgLTkyLDEyICs5OCwyOCBAQCBpY2VfcmVhZF9mbGF0X252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTMyIG9mZnNldCwgdTMyICpsZW5ndGgsIHU4ICpkYXRhLFxuIFxuIFx0XHRsYXN0X2NtZCA9ICEoYnl0ZXNfcmVhZCArIHJlYWRfc2l6ZSBcdTAwM2MgaW5sZW4pO1xuIFxuK1x0XHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9udm0oaHcsIElDRV9SRVNfUkVBRCk7XG4rXHRcdGlmIChzdGF0dXMpXG4rXHRcdFx0YnJlYWs7XG4rXG4gXHRcdHN0YXR1cyA9IGljZV9hcV9yZWFkX252bShodywgSUNFX0FRQ19OVk1fU1RBUlRfUE9JTlQsXG4gXHRcdFx0XHRcdCBvZmZzZXQsIHJlYWRfc2l6ZSxcbiBcdFx0XHRcdFx0IGRhdGEgKyBieXRlc19yZWFkLCBsYXN0X2NtZCxcbiBcdFx0XHRcdFx0IHJlYWRfc2hhZG93X3JhbSwgTlVMTCk7XG4tXHRcdGlmIChzdGF0dXMpXG4rXHRcdGlmIChzdGF0dXMpIHtcbitcdFx0XHQvKiBpY2VfcmVsZWFzZV9udm0oKSBpc3N1ZXMgYW4gQVEgY29tbWFuZCB0aGF0IHdvdWxkXG4rXHRcdFx0ICogb3ZlcndyaXRlIHNxX2xhc3Rfc3RhdHVzLCB3aGljaCBzb21lIGNhbGxlcnNcbitcdFx0XHQgKiBpbnNwZWN0IGFmdGVyIGEgZmFpbGVkIHJlYWQuIFByZXNlcnZlIHRoZSByZWFkJ3NcbitcdFx0XHQgKiBBUSBlcnJvciBhY3Jvc3MgdGhlIHJlbGVhc2UuXG4rXHRcdFx0ICovXG4rXHRcdFx0YXFfZXJyID0gaHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzO1xuK1xuK1x0XHRcdGljZV9yZWxlYXNlX252bShodyk7XG4rXHRcdFx0aHctXHUwMDNlYWRtaW5xLnNxX2xhc3Rfc3RhdHVzID0gYXFfZXJyO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXG4rXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4gXG4gXHRcdGJ5dGVzX3JlYWQgKz0gcmVhZF9zaXplO1xuIFx0XHRvZmZzZXQgKz0gcmVhZF9zaXplO1xuQEAgLTMzMCwxNCArMzUyLDggQEAgaWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLFxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiBcbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmIChzdGF0dXMpXG4tXHRcdHJldHVybiBzdGF0dXM7XG4tXG4gXHRzdGF0dXMgPSBpY2VfcmVhZF9mbGF0X252bShodywgc3RhcnQgKyBvZmZzZXQsIFx1MDAyNmxlbmd0aCwgZGF0YSwgZmFsc2UpO1xuIFxuLVx0aWNlX3JlbGVhc2VfbnZtKGh3KTtcbi1cbiBcdHJldHVybiBzdGF0dXM7XG4gfVxuIFxuQEAgLTQxOSwyNCArNDM1LDE5IEBAIGljZV9yZWFkX25ldGxpc3RfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MzIgb2Zmc2V0XG4gfVxuIFxuIC8qKlxuLSAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmQgYW5kIGFjcXVpcmUgTlZNIGlmIG5lY2Vzc2FyeVxuKyAqIGljZV9yZWFkX3NyX3dvcmQgLSBSZWFkcyBTaGFkb3cgUkFNIHdvcmRcbiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuICAqIEBvZmZzZXQ6IG9mZnNldCBvZiB0aGUgU2hhZG93IFJBTSB3b3JkIHRvIHJlYWQgKDB4MDAwMDAwIC0gMHgwMDFGRkYpXG4gICogQGRhdGE6IHdvcmQgcmVhZCBmcm9tIHRoZSBTaGFkb3cgUkFNXG4gICpcbi0gKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyB0aGUgaWNlX3JlYWRfc3Jfd29yZF9hcS5cbisgKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9zcl93b3JkX2FxLlxuKyAqXG4rICogVGhlIE5WTSBsb2NrIGlzIGFjcXVpcmVkIGFuZCByZWxlYXNlZCBpbnRlcm5hbGx5IGJ5IGljZV9yZWFkX2ZsYXRfbnZtKClcbisgKiBhcm91bmQgdGhlIEZXIHJlYWQsIHNvIHRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgd2l0aG91dCB0aGUgbG9jayBoZWxkLlxuICAqL1xuIGludCBpY2VfcmVhZF9zcl93b3JkKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXG4ge1xuLVx0aW50IHN0YXR1cztcbi1cbi1cdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcbi1cdGlmICghc3RhdHVzKSB7XG4tXHRcdHN0YXR1cyA9IGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XG4tXHRcdGljZV9yZWxlYXNlX252bShodyk7XG4tXHR9XG4tXG4tXHRyZXR1cm4gc3RhdHVzO1xuK1x0cmV0dXJuIGljZV9yZWFkX3NyX3dvcmRfYXEoaHcsIG9mZnNldCwgZGF0YSk7XG4gfVxuIFxuIC8qKlxuQEAgLTg1NiwxMSArODY3LDcgQEAgaW50IGljZV9nZXRfaW5hY3RpdmVfbmV0bGlzdF92ZXIoc3RydWN0IGljZV9odyAqaHcsIHN0cnVjdCBpY2VfbmV0bGlzdF9pbmZvICpuZXRcbiBzdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxuIHtcbiBcdHUzMiBtaW5fc2l6ZSA9IDAsIG1heF9zaXplID0gSUNFX0FRQ19OVk1fTUFYX09GRlNFVCArIDE7XG4tXHRpbnQgc3RhdHVzO1xuLVxuLVx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xuLVx0aWYgKHN0YXR1cylcbi1cdFx0cmV0dXJuIHN0YXR1cztcbitcdGludCBzdGF0dXMgPSAwO1xuIFxuIFx0d2hpbGUgKChtYXhfc2l6ZSAtIG1pbl9zaXplKSBcdTAwM2UgMSkge1xuIFx0XHR1MzIgb2Zmc2V0ID0gKG1heF9zaXplICsgbWluX3NpemUpIC8gMjtcbkBAIC04ODAsNyArODg3LDcgQEAgc3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcbiBcdFx0XHRtaW5fc2l6ZSA9IG9mZnNldDtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBhbiB1bmV4cGVjdGVkIGVycm9yIG9jY3VycmVkICovXG4tXHRcdFx0Z290byBlcnJfcmVhZF9mbGF0X252bTtcbitcdFx0XHRyZXR1cm4gc3RhdHVzO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtODg4LDkgKzg5NSw2IEBAIHN0YXRpYyBpbnQgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoc3RydWN0IGljZV9odyAqaHcpXG4gXG4gXHRody1cdTAwM2VmbGFzaC5mbGFzaF9zaXplID0gbWF4X3NpemU7XG4gXG4tZXJyX3JlYWRfZmxhdF9udm06XG4tXHRpY2VfcmVsZWFzZV9udm0oaHcpO1xuLVxuIFx0cmV0dXJuIHN0YXR1cztcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNDo0Ni41NTA5MjE4OTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNDAzOTU2MTczMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyB0aGUgSW50ZWwgSUNFIERyaXZlcidzIE5WTSBSZWFkIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgSW50ZWwgSUNFIChFdGhlcm5ldCkgZHJpdmVyLiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHNwZWNpZmljYWxseSB0byBob3cgTlZNIHJlYWRzIGFyZSBoYW5kbGVkLCBtb3ZpbmcgdGhlIGxvY2sgYWNxdWlzaXRpb24vcmVsZWFzZSBhcm91bmQgZWFjaCBBZG1pbiBRdWV1ZSAoQVEpIHJlYWQgd2l0aGluIGBpY2VfcmVhZF9mbGF0X252bWAuIFRoaXMgaXMgZHJpdmVuIGJ5IGZpcm13YXJlIGxpbWl0YXRpb25zIG9uIHJlYWQgbG9jayBkdXJhdGlvbi5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHJlYWNoYWJpbGl0eSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIGRyaXZlciwgdGhlIEludGVsIElDRSwgaXMgdGllZCB0byBwaHlzaWNhbCBoYXJkd2FyZSDigJMgSW50ZWwgRTgwMCBzZXJpZXMgUENJZSBhZGFwdGVycy4gU3RhbmRhcmQgdmlydHVhbGl6YXRpb24sIGxpa2UgUUVNVSBvciBHQ0UsIHR5cGljYWxseSB3b3VsZG4ndCBleHBvc2UgdGhlc2UgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVycyB1bmxlc3MgdGhlcmUncyBhbiBlbXVsYXRvciBvciBQQ0kgcGFzc3Rocm91Z2guIEFuZCBJIGFscmVhZHkga25vdyB0aGF0IFFFTVUgZG9lc24ndCBoYXZlIGFuIGVtdWxhdG9yIGZvciBJQ0U7IGl0IGhhcyBvdGhlciBuZXR3b3JrIGFkYXB0ZXJzLCBidXQgbm90IHRoaXMgb25lLiBJIGJyaWVmbHkgY2hlY2tlZCBpZiBTeXprYWxsZXIgb2ZmZXJzIGFueSBzaW1pbGFyIGVtdWxhdGlvbiwgYnV0IGl0IGZvY3VzZXMgb24gVVNCLCBXaUZpLCBvciBEUk0gZW11bGF0aW9uLiBOb3RoaW5nIGZvciBJQ0UuXG5cbkkgaGF2ZSB0byB2ZXJpZnkgd2hldGhlciB0aGUgYGljZWAgZHJpdmVyIGNhbiBiZSBwcm9iZWQgd2l0aG91dCB0aGUgaGFyZHdhcmUuIFBDSSBkcml2ZXJzIHJlcXVpcmUgYSBQQ0kgSUQgbWF0Y2gsIHdoaWNoIG1lYW5zIGEgdmlydHVhbCBQQ0kgZGV2aWNlIHdvdWxkIGJlIG5lZWRlZC4gU3l6a2FsbGVyIGhhcyB1dGlsaXRpZXMgbGlrZSBgc3l6X3BjaV9jb25uZWN0YCwgYnV0IEkga25vdyBpdCdzIG5vdCBhIGZ1bGwtYmxvd24gUENJIGVtdWxhdG9yIGNhcGFibGUgb2YgaGFuZGxpbmcgYSBjb21wbGV4IGRyaXZlciBsaWtlIElDRS4gU3l6a2FsbGVyJ3MgUENJIGZ1enppbmcgaXMgdmVyeSBsaW1pdGVkLiBJdCBsaWtlbHkgd29uJ3QgZ2V0IGZhciBlbm91Z2ggdG8gZXhlY3V0ZSB0aGUgY29kZSBpbiBgaWNlX3JlYWRfZmxhdF9udm1gLCB3aGljaCBuZWVkcyB0aGUgQWRtaW4gUXVldWUgKEFRKSB0byBmdW5jdGlvbi4gVGhlIEFRLCBpbiB0dXJuLCByZXF1aXJlcyBETUEgcmluZ3MgYW5kIGhhcmR3YXJlLWxpa2UgcHJvY2Vzc2luZyBvZiBkZXNjcmlwdG9ycywgd2hpY2ggYSBkdW1teSBQQ0kgZGV2aWNlIHdvbid0IGRvLiBgaWNlX2FxX3JlYWRfbnZtYCB3b3VsZCB0aW1lb3V0IG9yIGZhaWwgaW1tZWRpYXRlbHkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBzZWUgaWYgYGljZV9yZWFkX2ZsYXRfbnZtYCBjYW4gYmUgcmVhY2hlZC4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBjYWxsZWQgZnJvbSBkZXZsaW5rIGFuZCBldGh0b29sIGludGVyZmFjZXMuIGBpY2VfZGV2bGlua19udm1fc25hcHNob3RgLCBgaWNlX2RldmxpbmtfbnZtX3JlYWRgLCBhbmQgYGljZV9nZXRfZWVwcm9tYCBhcmUgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucy4gSG93ZXZlciwgdGhvc2UgYXJlIG9ubHkgYWNjZXNzaWJsZSBpZiB0aGUgbmV0ZGV2L2RldmxpbmsgZGV2aWNlIGlzIHJlZ2lzdGVyZWQgc3VjY2Vzc2Z1bGx5LiBUaGlzIHJlZ2lzdHJhdGlvbiBoYXBwZW5zIGF0IHRoZSBlbmQgb2YgYGljZV9wcm9iZWAuIEFuZCBgaWNlX3Byb2JlYCBuZWVkcyB0aGUgaGFyZHdhcmUgdG8gYmUgaW5pdGlhbGl6ZWQgKGBpY2VfaW5pdF9od2ApLiBUaGF0IGluaXRpYWxpemF0aW9uIHNldHMgdXAgdGhlIEFkbWluIFF1ZXVlLiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCByZXNwb25kIHRvIEFRIGNvbW1hbmRzLCBgaWNlX2luaXRfaHdgIGZhaWxzLCBhbmQgdGhlIGRyaXZlciB3b24ndCBwcm9iZS4gV2l0aG91dCBhIHJlYWwgZGV2aWNlIG9yIGEgY29tcGxldGUgZW11bGF0b3IsIHRoZSBkcml2ZXIgd29uJ3QgcHJvYmUsIGFuZCB0aG9zZSBuZXRkZXYvZGV2bGluayBpbnRlcmZhY2VzIHdvbid0IGV4aXN0LlxuXG5TbywgcmVhbGlzdGljYWxseSwgYGljZV9yZWFkX2ZsYXRfbnZtYCBpcyBjb21wbGV0ZWx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkknbGwgY29uZmlybSB0aGlzIGJ5IGxvb2tpbmcgYXQgYGljZV9wcm9iZWAgdXNpbmcgYGdyZXBwZXJgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTczLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA0MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjAwLjU5MDQ4NjI4MloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDY3OTc1NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9NTEwMj12b2lkIGljZV91bmxvYWQoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE2LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUxMTc6c3RhdGljIGludCBpY2VfcHJvYmVfcmVjb3ZlcnlfbW9kZShzdHJ1Y3QgaWNlX3BmICpwZilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MTE4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDctLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTE0ODogKiBpY2VfcHJvYmUgLSBEZXZpY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUxNDktICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU0PXN0YXRpYyBpbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1MTU1OmljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTE1Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjM5LVxcdGlmIChpY2VfaXNfcmVjb3ZlcnlfbW9kZShodykpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NTI0MDpcXHRcXHRyZXR1cm4gaWNlX3Byb2JlX3JlY292ZXJ5X21vZGUocGYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDEtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01ODM5PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpY2VfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNTg0MS1cXHQuaWRfdGFibGUgPSBpY2VfcGNpX3RibCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo1ODQyOlxcdC5wcm9iZSA9IGljZV9wcm9iZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01ODQzLVxcdC5yZW1vdmUgPSBpY2VfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNTowMC44MzcyOTAxMDNaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzk0MDMzMDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gb3IgZGVidWdnaW5nLCBhbmQgd3JpdGluZyBpdCBhcyB0aG91Z2ggaXQgd2VyZSBteSBvd24gc3RyZWFtIG9mIGNvbnNjaW91c25lc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byB0aGUgUHJvYmUgU2VxdWVuY2UqKlxuXG5BbHJpZ2h0LCBzbyB3ZSdyZSBpbiBgaWNlX3Byb2JlYC4gVGhhdCdzIHdoZXJlIHdlJ3JlIHN1cHBvc2VkIHRvIGJlIGNoZWNraW5nIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiwgcmlnaHQ/IE1ha2VzIHNlbnNlLiBJdCdzIG9mdGVuIHRoZSBmaXJzdCBzdGVwIHdoZW4gdGhpbmdzIGdvIHdyb25nLCBzbyBsZXQncyBzdGFydCB3aXRoIGBpY2VfaW5pdF9od2AuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMuIElmIHRoaXMgcHJvYmUgZmFpbHMgd2UgbmVlZCB0byBjaGVjayB0aGUgYGljZV9pbml0X2h3YCBmdW5jdGlvbiBmb3IgZXJyb3JzLiBHb3R0YSBlbnN1cmUgd2UncmUgZ2V0dGluZyB0aG9zZSBjcnVjaWFsIGhhcmR3YXJlIGNvbXBvbmVudHMgdXAgYW5kIHJ1bm5pbmcgY29ycmVjdGx5LiBMZXQncyBzZWUgaWYgdGhpcyBpcyB3aGVyZSB0aGUgcm9vdCBjYXVzZSBsaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODIxLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MDcuNjMxMzI1MTE1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3MDg2NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9pbml0X2h3XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jPTEyMzU9c3RhdGljIGludCBpY2VfZGV2bGlua19yZWluaXRfdXAoc3RydWN0IGljZV9wZiAqcGYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmM6MTI0MjpcXHRlcnIgPSBpY2VfaW5pdF9odyhcXHUwMDI2cGYtXFx1MDAzZWh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvZGV2bGluay9kZXZsaW5rLmMtMTI0My1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2RldmxpbmsvZGV2bGluay5jOjEyNDQ6XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpY2VfaW5pdF9odyBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9kZXZsaW5rL2RldmxpbmsuYy0xMjQ1LVxcdFxcdHJldHVybiBlcnI7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jPTk2MD1zdGF0aWMgaW50IF9fZndsb2dfaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTgzLS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg0OiAqIGljZV9pbml0X2h3IC0gbWFpbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiByb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODUtICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4Ni0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjk4NzppbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTI0LVxcdFxcdGdvdG8gZXJyX3Vucm9sbF9mbHRyX21nbXRfc3RydWN0O1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTEyNTpcXHRzdGF0dXMgPSBpY2VfaW5pdF9od190YmxzKGh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjYtXFx0aWYgKHN0YXR1cylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MTE1Nj1zdGF0aWMgdm9pZCBfX2Z3bG9nX2RlaW5pdChzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE2Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjExNjc6ICogaWNlX2RlaW5pdF9odyAtIHVucm9sbCBpbml0aWFsaXphdGlvbiBvcGVyYXRpb25zIGRvbmUgYnkgaWNlX2luaXRfaHdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNjgtICogQGh3OiBwb2ludGVyIHRvIHRoZSBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3MC0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgb25seSBkdXJpbmcgbm9taW5hbCBvcGVyYXRpb24sIG5vdCBhcyBhIHJlc3VsdCBvZlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE3MTogKiBpY2VfaW5pdF9odygpIGZhaWxpbmcgc2luY2UgaWNlX2luaXRfaHcoKSB3aWxsIHRha2UgY2FyZSBvZiB1bnJvbGxpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExNzItICogYXBwbGljYWJsZSBpbml0aWFsaXphdGlvbnMgaWYgaXQgZmFpbHMgZm9yIGFueSByZWFzb24uXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTgyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg6ODM6aW50IGljZV9pbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5oLTg0LXZvaWQgaWNlX2RlaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jPTIzODg9aW50IGljZV9jZmdfdHhfdG9wbyhzdHJ1Y3QgaWNlX2h3ICpodywgY29uc3Qgdm9pZCAqYnVmLCB1MzIgbGVuKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0yNTQwLVxcdGljZV9kZWluaXRfaHcoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM6MjU0MTpcXHRpZiAoaWNlX2luaXRfaHcoaHcpKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0yNTQyLVxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19JTklULCBcXFwiRmFpbGVkIHRvIHJlLWluaXQgaGFyZHdhcmUgYWZ0ZXIgc2V0dGluZyBUeCB0b3BvbG9neVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTIxNTQ9dm9pZCBpY2VfY2xlYXJfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjE5Ny0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jOjIxOTg6ICogaWNlX2luaXRfaHdfdGJscyAtIGluaXQgaGFyZHdhcmUgdGFibGUgbWVtb3J5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYy0yMTk5LSAqIEBodzogcG9pbnRlciB0byB0aGUgaGFyZHdhcmUgc3RydWN0dXJlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYy0yMjAwLSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmM6MjIwMTppbnQgaWNlX2luaXRfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTIyMDIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaD01OD1ib29sIGljZV9pc19pbml0X3BrZ19zdWNjZXNzZnVsKGVudW0gaWNlX2RkcF9zdGF0ZSBzdGF0ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaDo1OTppbnQgaWNlX2luaXRfaHdfdGJscyhzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuaC02MC12b2lkIGljZV9mcmVlX3NlZyhzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYz01MTU1PWljZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy01MjQxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyNDI6XFx0ZXJyID0gaWNlX2luaXRfaHcoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDMtXFx0aWYgKGVycikge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjUyNDQ6XFx0XFx0ZGV2X2VycihkZXYsIFxcXCJpY2VfaW5pdF9odyBmYWlsZWQ6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTUyNDUtXFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmM9Njg9dTMyIGljZV9jb252X2xpbmtfc3BlZWRfdG9fdmlydGNobmwoYm9vbCBhZHZfbGlua19zdXBwb3J0LCB1MTYgbGlua19zcGVlZClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmMtODktICogMS4gVGhlIG1haWxib3ggc25hcHNob3Qgc3RydWN0dXJlLCBpY2VfbWJ4X3NuYXBzaG90LCBpcyBpbml0aWFsaXplZCBkdXJpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX3ZmX21ieC5jOjkwOiAqIGRyaXZlciBpbml0aWFsaXphdGlvbiBpbiBpY2VfaW5pdF9odygpIHVzaW5nIGljZV9tYnhfaW5pdF9zbmFwc2hvdCgpLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfdmZfbWJ4LmMtOTEtICogVGhlIHN0cnVjdCBpY2VfbWJ4X3NuYXBzaG90IGhlbHBzIHRvIHRyYWNrIGFuZCB0cmF2ZXJzZSBhIHN0YXRpYyB3aW5kb3cgb2ZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MDcuNzI4NDIwMTU3WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1MzIyNjU5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBGbG93IG9mIHRoZSBJbnRlbCBJY2UgRHJpdmVyKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCB0aGUgZHJpdmVyIHN0YXJ0cyB1cCB3aXRoIGBpY2VfcHJvYmVgLiBBbmQgSSByZWNhbGwgdGhhdCBgaWNlX2luaXRfaHdgIGlzIGEgZnVuY3Rpb24gY2FsbGVkIHdpdGhpbiB0aGF0IGBpY2VfcHJvYmVgIHJvdXRpbmUuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMgdG8ganVtcCBkaXJlY3RseSBpbnRvIHRoZSBzb3VyY2UgY29kZSBmb3IgYGljZV9pbml0X2h3YCBpdHNlbGYsIHdoaWNoIGlzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoYXQgbGV2ZWwgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2Ugd2l0aGluIHRoaXMgcGFydGljdWxhciBJbnRlbCBJY2UgZHJpdmVyLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSByZWdpc3RlciByZWFkcy93cml0ZXMgYW5kIHBvdGVudGlhbCBlYXJseSBjb25maWd1cmF0aW9uIHN0ZXBzLiBLbm93aW5nIGBpY2VfaW5pdF9od2AgaXMgY2FsbGVkIGR1cmluZyB0aGUgcHJvYmUgZ2l2ZXMgbWUgYSBoaWdoLWxldmVsIHZpZXcgYW5kIG1ha2VzIGl0IG9idmlvdXMgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IG15IGRlYnVnZ2luZyBpZiBpc3N1ZXMgYXJlIHJlcG9ydGVkIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODcxLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MTIuNzgxNjUwODI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODUxOTU1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpY2VfaW5pdF9od1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9OTYwPXN0YXRpYyBpbnQgX19md2xvZ19pbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy05ODMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzo5ODQ6ICogaWNlX2luaXRfaHcgLSBtYWluIGhhcmR3YXJlIGluaXRpYWxpemF0aW9uIHJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4NS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtOTg2LSAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6OTg3OmludCBpY2VfaW5pdF9odyhzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTk4OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTExMjQtXFx0XFx0Z290byBlcnJfdW5yb2xsX2ZsdHJfbWdtdF9zdHJ1Y3Q7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTI1OlxcdHN0YXR1cyA9IGljZV9pbml0X2h3X3RibHMoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTEyNi1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz0xMTU2PXN0YXRpYyB2b2lkIF9fZndsb2dfZGVpbml0KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTY2LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTE2NzogKiBpY2VfZGVpbml0X2h3IC0gdW5yb2xsIGluaXRpYWxpemF0aW9uIG9wZXJhdGlvbnMgZG9uZSBieSBpY2VfaW5pdF9od1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE2OC0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMTcwLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGR1cmluZyBub21pbmFsIG9wZXJhdGlvbiwgbm90IGFzIGEgcmVzdWx0IG9mXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoxMTcxOiAqIGljZV9pbml0X2h3KCkgZmFpbGluZyBzaW5jZSBpY2VfaW5pdF9odygpIHdpbGwgdGFrZSBjYXJlIG9mIHVucm9sbGluZ1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTE3Mi0gKiBhcHBsaWNhYmxlIGluaXRpYWxpemF0aW9ucyBpZiBpdCBmYWlscyBmb3IgYW55IHJlYXNvbi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MTIuOTAwMjA2Mzk2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5NTY4MDQ1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkluaXRpYWwgSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGBpY2VfaW5pdF9od2AgZnVuY3Rpb24uIEkgc2VlIHRoZSBuYW1lLCBzbyBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiVGhpcyBpcyB3aGVyZSB0aGUgcnViYmVyIG1lZXRzIHRoZSByb2FkLCB0aGUgbml0dHktZ3JpdHR5IG9mIGJyaW5naW5nIHVwIHRoZSBoYXJkd2FyZS5cIiBJIGtub3cgdGhpcyBsaWtlbHkgaW52b2x2ZXMgYSBjaGFpbiBvZiBldmVudHMsIG1heWJlIHN0YXJ0aW5nIHdpdGggcG93ZXItb24gc2VxdWVuY2luZywgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHRoZW4gbW92aW5nIGludG8gc2V0dGluZyB1cCB0aGUgbWVtb3J5IGNvbnRyb2xsZXJzIGFuZCBwb3NzaWJseSBhbnkgZnVuZGFtZW50YWwgcGVyaXBoZXJhbCBpbnRlcmZhY2VzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIG9uIGhvdyB0aGV5IGhhbmRsZSB0aGluZ3MgbGlrZSByZXNldCBhc3NlcnRpb24gYW5kIGRlLWFzc2VydGlvbiBmb3IgdGhlIHZhcmlvdXMgSVAgYmxvY2tzLiBUaGUgYXJjaGl0ZWN0dXJlIGluIHVzZSB3aWxsIHN0cm9uZ2x5IGluZm9ybSBob3cgdGhpcyBpbml0aWFsaXphdGlvbiBpcyBhcHByb2FjaGVkLiBJcyBpdCBhIGhpZXJhcmNoaWNhbCBkZXNpZ24/IEEgbW9ub2xpdGhpYyBhcHByb2FjaD8gSSdsbCBiZSB3YXRjaGluZyB0byBzZWUgaG93IHRoZXkgaXNvbGF0ZSBhbnkgaGFyZHdhcmUtc3BlY2lmaWMgZGVwZW5kZW5jaWVzLCB0b28sIGhvcGVmdWxseSwgaXTigJlzIGRvbmUgaW4gYSBjbGVhbiwgbWFpbnRhaW5hYmxlIHdheSB0aGF0IHVzZXMgYWJzdHJhY3Rpb24gbGF5ZXJzLiBVbHRpbWF0ZWx5LCBJJ20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgbG93LWxldmVsIHJlZ2lzdGVyIHdyaXRlcyBhbmQgcmVhZGJhY2tzIHRoYXQgYXJlIGNyaXRpY2FsIHRvIGJyaW5naW5nIHRoZSBoYXJkd2FyZSB0byBhIHN0YWJsZSBzdGF0ZS4gRnJvbSBoZXJlLCB0aGUgcmVhbCBpbnRlcmVzdGluZyBzdHVmZiBiZWdpbnMhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk3MzksIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNToxNi4xOTU4ODk2NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY1NTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTg3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk4NzpcXHRpbnQgaWNlX2luaXRfaHcoc3RydWN0IGljZV9odyAqaHcpXFxuIDk4ODpcXHR7XFxuIDk4OTpcXHRcXHRzdHJ1Y3QgaWNlX2FxY19nZXRfcGh5X2NhcHNfZGF0YSAqcGNhcHMgX19mcmVlKGtmcmVlKSA9IE5VTEw7XFxuIDk5MDpcXHRcXHR2b2lkICptYWNfYnVmIF9fZnJlZShrZnJlZSkgPSBOVUxMO1xcbiA5OTE6XFx0XFx0dTE2IG1hY19idWZfbGVuO1xcbiA5OTI6XFx0XFx0aW50IHN0YXR1cztcXG4gOTkzOlxcdFxcbiA5OTQ6XFx0XFx0LyogU2V0IE1BQyB0eXBlIGJhc2VkIG9uIERldmljZUlEICovXFxuIDk5NTpcXHRcXHRzdGF0dXMgPSBpY2Vfc2V0X21hY190eXBlKGh3KTtcXG4gOTk2OlxcdFxcdGlmIChzdGF0dXMpXFxuIDk5NzpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbiA5OTg6XFx0XFxuIDk5OTpcXHRcXHRody1cXHUwMDNlcGZfaWQgPSBGSUVMRF9HRVQoUEZfRlVOQ19SSURfRlVOQ19OVU1fTSwgcmQzMihodywgUEZfRlVOQ19SSUQpKTtcXG4xMDAwOlxcdFxcbjEwMDE6XFx0XFx0c3RhdHVzID0gaWNlX3Jlc2V0KGh3LCBJQ0VfUkVTRVRfUEZSKTtcXG4xMDAyOlxcdFxcdGlmIChzdGF0dXMpXFxuMTAwMzpcXHRcXHRcXHRyZXR1cm4gc3RhdHVzO1xcbjEwMDQ6XFx0XFxuMTAwNTpcXHRcXHRpY2VfZ2V0X2l0cl9pbnRybF9ncmFuKGh3KTtcXG4xMDA2OlxcdFxcbjEwMDc6XFx0XFx0c3RhdHVzID0gaWNlX2NyZWF0ZV9hbGxfY3RybHEoaHcpO1xcbjEwMDg6XFx0XFx0aWYgKHN0YXR1cylcXG4xMDA5OlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XFxuMTAxMDpcXHRcXG4xMDExOlxcdFxcdHN0YXR1cyA9IF9fZndsb2dfaW5pdChodyk7XFxuMTAxMjpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMTM6XFx0XFx0XFx0aWNlX2RlYnVnKGh3LCBJQ0VfREJHX0ZXX0xPRywgXFxcIkVycm9yIGluaXRpYWxpemluZyBGVyBsb2dnaW5nOiAlZFxcXFxuXFxcIixcXG4xMDE0OlxcdFxcdFxcdFxcdCAgc3RhdHVzKTtcXG4xMDE1OlxcdFxcbjEwMTY6XFx0XFx0c3RhdHVzID0gaWNlX2NsZWFyX3BmX2NmZyhodyk7XFxuMTAxNzpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMTg6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcXG4xMDE5OlxcdFxcbjEwMjA6XFx0XFx0LyogU2V0IGJpdCB0byBlbmFibGUgRmxvdyBEaXJlY3RvciBmaWx0ZXJzICovXFxuMTAyMTpcXHRcXHR3cjMyKGh3LCBQRlFGX0ZEX0VOQSwgUEZRRl9GRF9FTkFfRkRfRU5BX00pO1xcbjEwMjI6XFx0XFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmh3LVxcdTAwM2VmZGlyX2xpc3RfaGVhZCk7XFxuMTAyMzpcXHRcXG4xMDI0OlxcdFxcdGljZV9jbGVhcl9weGVfbW9kZShodyk7XFxuMTAyNTpcXHRcXG4xMDI2OlxcdFxcdHN0YXR1cyA9IGljZV9pbml0X252bShodyk7XFxuMTAyNzpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwMjg6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2NxaW5pdDtcXG4xMDI5OlxcdFxcbjEwMzA6XFx0XFx0c3RhdHVzID0gaWNlX2dldF9jYXBzKGh3KTtcXG4xMDMxOlxcdFxcdGlmIChzdGF0dXMpXFxuMTAzMjpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfY3Fpbml0O1xcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHRpZiAoIWh3LVxcdTAwM2Vwb3J0X2luZm8pXFxuMTAzNTpcXHRcXHRcXHRody1cXHUwMDNlcG9ydF9pbmZvID0gZGV2bV9remFsbG9jKGljZV9od190b19kZXYoaHcpLFxcbjEwMzY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBzaXplb2YoKmh3LVxcdTAwM2Vwb3J0X2luZm8pLFxcbjEwMzc6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBHRlBfS0VSTkVMKTtcXG4xMDM4OlxcdFxcdGlmICghaHctXFx1MDAzZXBvcnRfaW5mbykge1xcbjEwMzk6XFx0XFx0XFx0c3RhdHVzID0gLUVOT01FTTtcXG4xMDQwOlxcdFxcdFxcdGdvdG8gZXJyX3Vucm9sbF9jcWluaXQ7XFxuMTA0MTpcXHRcXHR9XFxuMTA0MjpcXHRcXG4xMDQzOlxcdFxcdGh3LVxcdTAwM2Vwb3J0X2luZm8tXFx1MDAzZWxvY2FsX2Z3ZF9tb2RlID0gSUNFX0xPQ0FMX0ZXRF9NT0RFX0VOQUJMRUQ7XFxuMTA0NDpcXHRcXHQvKiBzZXQgdGhlIGJhY2sgcG9pbnRlciB0byBIVyAqL1xcbjEwNDU6XFx0XFx0aHctXFx1MDAzZXBvcnRfaW5mby1cXHUwMDNlaHcgPSBodztcXG4xMDQ2OlxcdFxcbjEwNDc6XFx0XFx0LyogSW5pdGlhbGl6ZSBwb3J0X2luZm8gc3RydWN0IHdpdGggc3dpdGNoIGNvbmZpZ3VyYXRpb24gZGF0YSAqL1xcbjEwNDg6XFx0XFx0c3RhdHVzID0gaWNlX2dldF9pbml0aWFsX3N3X2NmZyhodyk7XFxuMTA0OTpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwNTA6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2FsbG9jO1xcbjEwNTE6XFx0XFxuMTA1MjpcXHRcXHRody1cXHUwMDNlZXZiX3ZlYiA9IHRydWU7XFxuMTA1MzpcXHRcXG4xMDU0OlxcdFxcdC8qIGluaXQgeGFycmF5IGZvciBpZGVudGlmeWluZyBzY2hlZHVsaW5nIG5vZGVzIHVuaXF1ZWx5ICovXFxuMTA1NTpcXHRcXHR4YV9pbml0X2ZsYWdzKFxcdTAwMjZody1cXHUwMDNlcG9ydF9pbmZvLVxcdTAwM2VzY2hlZF9ub2RlX2lkcywgWEFfRkxBR1NfQUxMT0MpO1xcbjEwNTY6XFx0XFxuMTA1NzpcXHRcXHQvKiBRdWVyeSB0aGUgYWxsb2NhdGVkIHJlc291cmNlcyBmb3IgVHggc2NoZWR1bGVyICovXFxuMTA1ODpcXHRcXHRzdGF0dXMgPSBpY2Vfc2NoZWRfcXVlcnlfcmVzX2FsbG9jKGh3KTtcXG4xMDU5OlxcdFxcdGlmIChzdGF0dXMpIHtcXG4xMDYwOlxcdFxcdFxcdGljZV9kZWJ1ZyhodywgSUNFX0RCR19TQ0hFRCwgXFxcIkZhaWxlZCB0byBnZXQgc2NoZWR1bGVyIGFsbG9jYXRlZCByZXNvdXJjZXNcXFxcblxcXCIpO1xcbjEwNjE6XFx0XFx0XFx0Z290byBlcnJfdW5yb2xsX2FsbG9jO1xcbjEwNjI6XFx0XFx0fVxcbjEwNjM6XFx0XFx0aWNlX3NjaGVkX2dldF9wc21fY2xrX2ZyZXEoaHcpO1xcbjEwNjQ6XFx0XFxuMTA2NTpcXHRcXHQvKiBJbml0aWFsaXplIHBvcnRfaW5mbyBzdHJ1Y3Qgd2l0aCBzY2hlZHVsZXIgZGF0YSAqL1xcbjEwNjY6XFx0XFx0c3RhdHVzID0gaWNlX3NjaGVkX2luaXRfcG9ydChody1cXHUwMDNlcG9ydF9pbmZvKTtcXG4xMDY3OlxcdFxcdGlmIChzdGF0dXMpXFxuMTA2ODpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfc2NoZWQ7XFxuMTA2OTpcXHRcXG4xMDcwOlxcdFxcdHBjYXBzID0ga3phbGxvY19vYmooKnBjYXBzKTtcXG4xMDcxOlxcdFxcdGlmICghcGNhcHMpIHtcXG4xMDcyOlxcdFxcdFxcdHN0YXR1cyA9IC1FTk9NRU07XFxuMTA3MzpcXHRcXHRcXHRnb3RvIGVycl91bnJvbGxfc2NoZWQ7XFxuMTA3NDpcXHRcXHR9XFxuMTA3NTpcXHRcXG4xMDc2OlxcdFxcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIFBIWSBjYXBhYmlsaXRpZXMgKi9cXG4xMDc3OlxcdFxcdHN0YXR1cyA9IGljZV9hcV9nZXRfcGh5X2NhcHMoaHctXFx1MDAzZXBvcnRfaW5mbywgZmFsc2UsXFxuMTA3ODpcXHRcXHRcXHRcXHRcXHQgICAgIElDRV9BUUNfUkVQT1JUX1RPUE9fQ0FQX01FRElBLCBwY2FwcyxcXG4xMDc5OlxcdFxcdFxcdFxcdFxcdCAgICAgTlVMTCk7XFxuMTA4MDpcXHRcXHRpZiAoc3RhdHVzKVxcbjEwODE6XFx0XFx0XFx0ZGV2X3dhcm4oaWNlX2h3X3RvX2RldihodyksIFxcXCJHZXQgUEhZIGNhcGFiaWxpdGllcyBmYWlsZWQgc3RhdHVzID0gJWQsIGNvbnRpbnVpbmcgYW55d2F5XFxcXG5cXFwiLFxcbjEwODI6XFx0XFx0XFx0XFx0IHN0YXR1cyk7XFxuMTA4MzpcXHRcXG4xMDg0OlxcdFxcdC8qIEluaXRpYWxpemUgcG9ydF9pbmZvIHN0cnVjdCB3aXRoIGxpbmsgaW5mb3JtYXRpb24gKi9cXG4xMDg1OlxcdFxcdHN0YXR1cyA9IGljZV9hcV9nZXRfbGlua19pbmZvKGh3LVxcdTAwM2Vwb3J0X2luZm8sIGZhbHNlLCBOVUxMLCBOVUxMKTtcXG4xMDg2OlxcdFxcdGlmIChzdGF0dXMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjE2LjE5ODQ1OTUxOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODQ5ODU3ODE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSGFyZHdhcmUgSW5pdGlhbGl6YXRpb24gaW4gdGhlIElDRSBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBJQ0UgZHJpdmVyIGluaXRpYWxpemVzLiBGaXJzdCwgaXQgY2FsbHMgYGljZV9jcmVhdGVfYWxsX2N0cmxxKGh3KWAgdG8gc2V0IHVwIHRoZSBBZG1pbiBRdWV1ZSwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lLiBUaGVuLCB3ZSBoYXZlIGBpY2VfaW5pdF9udm0oaHcpYCBhbmQgYGljZV9nZXRfY2FwcyhodylgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNydWNpYWwgYmVjYXVzZSB0aGV5J3JlIHRoZSBvbmVzIHNlbmRpbmcgdGhvc2UgQVEgY29tbWFuZHMgdG8gdGhlIGhhcmR3YXJlLiBOb3csIGEgZmFpbHVyZSBoZXJlIOKAkyBlaXRoZXIgbm8gaGFyZHdhcmUgcHJlc2VudCBvciBhIG5vbi1yZXNwb25zaXZlIGRldmljZSDigJMgbWVhbnMgYGljZV9pbml0X2h3YCBpcyBnb2luZyB0byBib21iIG91dC5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQsIGJlaW5nIHRoZSBleHBlcnQgSSBhbSwgaXMgd2hldGhlciBTeXprYWxsZXIgY291bGQgZnV6eiB0aGlzLiBDYW4gd2UgaW5qZWN0IGZha2UgUENJIHJlc3BvbnNlcyBhbmQgbWVzcyB3aXRoIGl0PyBCdXQsIHJlYWxpc3RpY2FsbHksIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSByb2J1c3QgUENJIGVtdWxhdG9yIHRoYXQgY2FuIHJlcGxpY2F0ZSB0aGUgY29tcGxleGl0eSBvZiBzb21ldGhpbmcgbGlrZSB0aGUgSUNFIEFkbWluIFF1ZXVlLiBUaGlzIEFRIHVzZXMgRE1BIHJpbmdzLCBzbyB0aGUgZHJpdmVyIHdyaXRlcyBkZXNjcmlwdG9ycyB0byBtZW1vcnkgcmluZ3MgYW5kIG1hbmlwdWxhdGVzIHRhaWwgcG9pbnRlcnMsIHdoaWxlIHRoZSBoYXJkd2FyZSByZWFkcyB0aGUgZGVzY3JpcHRvcnMsIGV4ZWN1dGVzIGNvbW1hbmRzLCB3cml0ZXMgcmVzdWx0cyBiYWNrLCBhbmQgdXBkYXRlcyBoZWFkIHBvaW50ZXJzLiBUaGlzIHNldHVwJ3MgaW50cmljYXRlLlxuXG5TaW11bGF0aW5nIHRoaXMgaW4gU3l6a2FsbGVyIGlzIGEgbmlnaHRtYXJlIGJlY2F1c2UgeW91IG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBETUEgcmluZyBsYXlvdXQgYW5kIGRlc2NyaXB0b3IgZm9ybWF0cywgd2hpY2ggYXJlIHZlcnkgc3BlY2lmaWMgdG8gdGhlIElDRSBoYXJkd2FyZS4gU28sIGBpY2VfcHJvYmVgIGlzIGxpa2VseSB0byBmYWlsIGVhcmx5LCBhbmQgdGhlIGRyaXZlciB3b24ndCBldmVuIHJlZ2lzdGVyLlxuXG5UaGlzIGlzIGFsbCBjcnVjaWFsIGJlY2F1c2UgdGhlIG1vZGlmaWVkIGNvZGUgSSdtIGZvY3VzaW5nIG9uLCBzcGVjaWZpY2FsbHkgaW4gYGljZV9yZWFkX2ZsYXRfbnZtYCwgaXMgb25seSByZWFjaGFibGUgaWYgdGhlIGRyaXZlciBzdWNjZXNzZnVsbHkgcHJvYmVzIGFuZCByZWdpc3RlcnMgZGV2bGluay9ldGh0b29sIGludGVyZmFjZXMsIG9yIHBvdGVudGlhbGx5IGR1cmluZyB0aGUgcHJvYmUgaWYgYGljZV9pbml0X252bWAgY2FsbHMgaXQuIFNvIHRoZSBuZXh0IHN0ZXAgaXMgdG8gbWFrZSBzdXJlIGlmIGBpY2VfaW5pdF9udm1gIGNhbGxzIGBpY2VfcmVhZF9mbGF0X252bWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTc5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MjIuMDQ4MzIzNjk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzc5OTU2MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2luaXRfbnZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYz05ODc9aW50IGljZV9pbml0X2h3KHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0xMDI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MTAyNjpcXHRzdGF0dXMgPSBpY2VfaW5pdF9udm0oaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmMtMTAyNy1cXHRpZiAoc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM9MTc3Nz1zdGF0aWMgdm9pZCBpY2VfaGFuZGxlX21kZF9ldmVudChzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTE5MjUtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6MTkyNjogKiBpY2VfaW5pdF9udm1fcGh5X3R5cGUgLSBJbml0aWFsaXplIHRoZSBOVk0gUEhZIHR5cGVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xOTI3LSAqIEBwaTogcG9ydCBpbmZvIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtMTkzMC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzoxOTMxOnN0YXRpYyBpbnQgaWNlX2luaXRfbnZtX3BoeV90eXBlKHN0cnVjdCBpY2VfcG9ydF9pbmZvICpwaSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYy0xOTMyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTQ3OTI9c3RhdGljIHZvaWQgaWNlX2luaXRfbGluayhzdHJ1Y3QgaWNlX3BmICpwZilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ4MDEtXFx0Lyogbm90IGEgZmF0YWwgZXJyb3IgaWYgdGhpcyBmYWlscyAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jOjQ4MDI6XFx0ZXJyID0gaWNlX2luaXRfbnZtX3BoeV90eXBlKHBmLVxcdTAwM2Vody5wb3J0X2luZm8pO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jLTQ4MDMtXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo0ODA0OlxcdFxcdGRldl9lcnIoZGV2LCBcXFwiaWNlX2luaXRfbnZtX3BoeV90eXBlIGZhaWxlZDogJWRcXFxcblxcXCIsIGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNDgwNS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbWFpbi5jPTc2Mzc9c3RhdGljIHZvaWQgaWNlX3JlYnVpbGQoc3RydWN0IGljZV9wZiAqcGYsIGVudW0gaWNlX3Jlc2V0X3JlcSByZXNldF90eXBlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzY4NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX21haW4uYzo3Njg1OlxcdGVyciA9IGljZV9pbml0X252bShodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzY4Ni1cXHRpZiAoZXJyKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmM6NzY4NzpcXHRcXHRkZXZfZXJyKGRldiwgXFxcImljZV9pbml0X252bSBmYWlsZWQgJWRcXFxcblxcXCIsIGVycik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9tYWluLmMtNzY4OC1cXHRcXHRnb3RvIGVycl9pbml0X2N0cmxxO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0xMDkyPXN0YXRpYyBpbnQgaWNlX2RldGVybWluZV9jc3NfaGRyX2xlbihzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTExMC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExMTE6ICogaWNlX2luaXRfbnZtIC0gaW5pdGlhbGl6ZXMgTlZNIHNldHRpbmdcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTExMTItICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3RcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTExNi0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExMTc6aW50IGljZV9pbml0X252bShzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTExMTgte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaD0zMD1pbnQgaWNlX3JlYWRfcGJhX3N0cmluZyhzdHJ1Y3QgaWNlX2h3ICpodywgdTggKnBiYV9udW0sIHUzMiBwYmFfbnVtX3NpemUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmg6MzE6aW50IGljZV9pbml0X252bShzdHJ1Y3QgaWNlX2h3ICpodyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uaC0zMi1pbnQgaWNlX3JlYWRfc3Jfd29yZChzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG9mZnNldCwgdTE2ICpkYXRhKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MjIuMjI2MzI1MTIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODYzNTc2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBOVk0gSW5pdGlhbGl6YXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgaWNlX2luaXRfbnZtYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSBpbiBpbml0aWFsaXppbmcgdGhlIE5vbi1Wb2xhdGlsZSBNZW1vcnkgKE5WTSkgd2l0aGluIHRoaXMgc3BlY2lmaWMgY29udGV4dC4gVGhlIE5WTSBpcyBjcml0aWNhbCwgc28gYSBjYXJlZnVsIGFuYWx5c2lzIG9mIHRoZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzIGlzIGVzc2VudGlhbC5cblxuTXkgZmlyc3QgaHVuY2ggaXMgdG8gY2hlY2sgdGhlIGZ1bmN0aW9uIGNhbGxzLiBJIHN1c3BlY3QgdGhhdCBhIGZ1bmN0aW9uIHN1Y2ggYXMgYGljZV9pbml0X252bWAgd291bGQgYmUgaW52b2x2ZWQgaW4gc2V0dGluZyB1cCB0aGUgTlZNLCBsaWtlbHkgYnkgcmVhZGluZyBkYXRhIGZyb20gaXQuIEkgbmVlZCB0byBrbm93ICpob3cqIGBpY2VfaW5pdF9udm1gIGFjY29tcGxpc2hlcyB0aGlzIGluaXRpYWxpemF0aW9uLiBHaXZlbiB0aGF0IGBpY2VfcmVhZF9mbGF0X252bWAgbG9va3MgbGlrZSBhIGZ1bmN0aW9uIG5hbWUgdGhhdCBpcyB3ZWxsLXN1aXRlZCB0byBhY2Nlc3NpbmcgTlZNIGluIGEgZmxhdCwgbGluZWFyIHdheSwgbXkgbWluZCBpcyBkcmF3biB0byB0aGlua2luZyBcIkkgd29uZGVyIGlmIGBpY2VfaW5pdF9udm1gIGNhbGxzIGBpY2VfcmVhZF9mbGF0X252bWA/XCIgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGludGVyYWN0aW9uIGFuZCBpdCBpcyBhbiBlc3NlbnRpYWwgcGllY2Ugb2YgdGhlIGxhcmdlciBwdXp6bGUgb2YgaG93IHRoZSBzeXN0ZW0gaW50ZXJhY3RzIHdpdGggdGhlIE5WTS4gVGhlIGFuc3dlciB3aWxsIGxpa2VseSBkaXJlY3QgbXkgaW52ZXN0aWdhdGlvbiB0byBvdGhlciBmdW5jdGlvbiBjYWxscyBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ2NywiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjI1LjkxMjY4NjA4NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMDc2NTgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9yZWFkX2ZsYXRfbnZtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0yMT1pbnQgaWNlX2FxX3JlYWRfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgbW9kdWxlX3R5cGVpZCwgdTMyIG9mZnNldCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtNDktLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzo1MDogKiBpY2VfcmVhZF9mbGF0X252bSAtIFJlYWQgcG9ydGlvbiBvZiBOVk0gYnkgZmxhdCBvZmZzZXRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTUxLSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTY5PWludFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6NzA6aWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTcxLVxcdFxcdCAgYm9vbCByZWFkX3NoYWRvd19yYW0pXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTE4ND1pbnQgaWNlX2FxX2VyYXNlX252bShzdHJ1Y3QgaWNlX2h3ICpodywgdTE2IG1vZHVsZV90eXBlaWQsIHN0cnVjdCBpY2Vfc3FfY2QgKmNkKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMDYtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjIwNzogKiBSZWFkcyBvbmUgMTYgYml0IHdvcmQgZnJvbSB0aGUgU2hhZG93IFJBTSB1c2luZyBpY2VfcmVhZF9mbGF0X252bS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIwOC0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTIwOT1zdGF0aWMgaW50IGljZV9yZWFkX3NyX3dvcmRfYXEoc3RydWN0IGljZV9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjE0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MjE1OlxcdC8qIE5vdGUgdGhhdCBpY2VfcmVhZF9mbGF0X252bSB0YWtlcyBpbnRvIGFjY291bnQgdGhlIDRLYiBBZG1pblEgYW5kXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMTYtXFx0ICogU2hhZG93IFJBTSBzZWN0b3IgcmVzdHJpY3Rpb25zIG5lY2Vzc2FyeSB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgTlZNLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjE3LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MjE4OlxcdHN0YXR1cyA9IGljZV9yZWFkX2ZsYXRfbnZtKGh3LCBvZmZzZXQgKiBzaXplb2YodTE2KSwgXFx1MDAyNmJ5dGVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjE5LVxcdFxcdFxcdFxcdCAgIChfX2ZvcmNlIHU4ICopXFx1MDAyNmRhdGFfbG9jYWwsIHRydWUpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0zNDI9aWNlX3JlYWRfZmxhc2hfbW9kdWxlKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0zNTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzozNTU6XFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIHN0YXJ0ICsgb2Zmc2V0LCBcXHUwMDI2bGVuZ3RoLCBkYXRhLCBmYWxzZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0zNTYtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTQyND1pY2VfcmVhZF9uZXRsaXN0X21vZHVsZShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYmFua19zZWxlY3QgYmFuaywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy00NDQtICpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjQ0NTogKiBUaGUgTlZNIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkIGludGVybmFsbHkgYnkgaWNlX3JlYWRfZmxhdF9udm0oKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtNDQ2LSAqIGFyb3VuZCB0aGUgRlcgcmVhZCwgc28gdGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRob3V0IHRoZSBsb2NrIGhlbGQuXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTg2Nz1zdGF0aWMgaW50IGljZV9kaXNjb3Zlcl9mbGFzaF9zaXplKHN0cnVjdCBpY2VfaHcgKmh3KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy04NzYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzo4Nzc6XFx0XFx0c3RhdHVzID0gaWNlX3JlYWRfZmxhdF9udm0oaHcsIG9mZnNldCwgXFx1MDAyNmxlbiwgXFx1MDAyNmRhdGEsIGZhbHNlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg3OC1cXHRcXHRpZiAoc3RhdHVzID09IC1FSU8gXFx1MDAyNlxcdTAwMjZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MjYuMDE1NzcyMTA3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NDYxMTY3NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgRmxhc2ggRGlzY292ZXJ5IExvZ2ljKipcblxuT2theSwgc28gSSdtIHRyYWNpbmcgdGhlIGZsYXNoIHNpemUgZGlzY292ZXJ5IHByb2Nlc3MgaGVyZS4gSXQncyBjbGVhciB0aGF0IHRoZSBmdW5jdGlvbiBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgIHBsYXlzIGEgY3JpdGljYWwgcm9sZS4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgIG1ha2VzIGEgY2FsbCB0byBgaWNlX3JlYWRfZmxhdF9udm1gLiBTbywgdGhlIGZsYXNoIHNpemUgZGlzY292ZXJ5IGZ1bmN0aW9uYWxpdHkgcmVsaWVzIGRpcmVjdGx5IG9uIHJlYWRpbmcgZnJvbSB0aGUgbm9uLXZvbGF0aWxlIG1lbW9yeSB0aHJvdWdoIHRoYXQgYGljZV9yZWFkX2ZsYXRfbnZtYCBmdW5jdGlvbi4gTm93LCB3aGVyZSBpcyBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgIGJlaW5nIGluaXRpYXRlZD8gRXhhbWluaW5nIHRoZSBjYWxsIHN0YWNrLCBJIHNlZSB0aGF0IGBpY2VfaW5pdF9udm1gIGFjdHVhbGx5IGNhbGxzIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAuIFRoYXQgdGVsbHMgbWUgdGhhdCB0aGUgZmxhc2ggc2l6ZSBkZXRlY3Rpb24gaXMgYSBmdW5kYW1lbnRhbCBwYXJ0IG9mIHRoZSBOVk0gaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBiZSBrZXkgYXMgSSBjb250aW51ZSB0byBkZWJ1ZyB0aGlzIHN5c3RlbSBvciBpbnRlZ3JhdGUgYSBuZXcgZmxhc2ggY2hpcC4gVGhpcyBpcyBleGFjdGx5IHRoZSBzb3J0IG9mIGxvdy1sZXZlbCBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBiZWZvcmUgSSBnZXQgdG8gdGhlIGFwcGxpY2F0aW9uLWxldmVsIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQzLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTU6MzIuNDYxODkzODY3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDkzNzcyMjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTg1ND1pbnQgaWNlX2dldF9pbmFjdGl2ZV9uZXRsaXN0X3ZlcihzdHJ1Y3QgaWNlX2h3ICpodywgc3RydWN0IGljZV9uZXRsaXN0X2luZm8gKm5ldGxpc3QpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg1OS0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjg2MDogKiBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZSAtIERpc2NvdmVyIHRoZSBhdmFpbGFibGUgZmxhc2ggc2l6ZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg2MS0gKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy04NjYtICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzo4Njc6c3RhdGljIGludCBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZShzdHJ1Y3QgaWNlX2h3ICpodylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTg2OC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTExMTc9aW50IGljZV9pbml0X252bShzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE0My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExNDQ6XFx0c3RhdHVzID0gaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemUoaHcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE0NS1cXHRpZiAoc3RhdHVzKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjMyLjU3MTI3NzY3OFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NDIwNjAxMzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTlZNIEluaXRpYWxpemF0aW9uIGFuZCBSZWFkIFBhdGgqKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyByZXZvbHZlcyBhcm91bmQgdW5kZXJzdGFuZGluZyBob3cgdGhlIE5vbi1Wb2xhdGlsZSBNZW1vcnkgKE5WTSkgaW5pdGlhbGl6YXRpb24gd29ya3MgaW4gdGhpcyBjb250ZXh0LiBTcGVjaWZpY2FsbHksIGBpY2VfaW5pdF9udm1gIGtpY2tzIHRoaW5ncyBvZmYgYnkgY2FsbGluZyBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgLCB3aGljaCBpbiB0dXJuLCBjYWxscyBgaWNlX3JlYWRfZmxhdF9udm1gLiBUaGUgY3J1Y2lhbCBwaWVjZSBpcyB0aGF0IGBpY2VfaW5pdF9udm1gIGRlcGVuZHMgb24gYSBmdW5jdGlvbmluZyBoYXJkd2FyZSBBZG1pbiBRdWV1ZSAoQVEpLiBJZiB0aGVyZSdzIG5vIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBpZiB0aGUgZHJpdmVyIGlzbid0IHByb3Blcmx5IGluaXRpYWxpemVkLCBgaWNlX2luaXRfbnZtYCBpcyBib3VuZCB0byBmYWlsLlxuXG5Ob3csIGlmIGBpY2VfaW5pdF9udm1gIGZhaWxzLCBgaWNlX2Rpc2NvdmVyX2ZsYXNoX3NpemVgIGlzIHN0aWxsIGNhbGxlZCwgbGVhZGluZyB0byBgaWNlX3JlYWRfZmxhdF9udm1gIGJlaW5nIGV4ZWN1dGVkLCBldmVuIGluIHRoZSBhYnNlbmNlIG9mIGhhcmR3YXJlLiBUaGlzIHBhdGggYXR0ZW1wdHMgdG8gYWNxdWlyZSBOVk0gYWNjZXNzIHVzaW5nIGBpY2VfYWNxdWlyZV9udm1gIGFuZCB0aGVuIHJlYWQgdmlhIGBpY2VfYXFfcmVhZF9udm1gLiBIb3dldmVyLCBzaW5jZSB0aGUgQVEgaXNuJ3QgZnVuY3Rpb25hbCwgYGljZV9hcV9yZWFkX252bWAgd2lsbCBpbmV2aXRhYmx5IHRpbWUgb3V0IG9yIGZhaWwuIFRoZSBxdWVzdGlvbiBpcywgaXMgdGhpcyB3b3J0aCBmdXp6aW5nP1xuXG5UaGUgY29kZSBzbmlwcGV0IHNob3dzIGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIHRoZSBgaWNlX3JlYWRfZmxhdF9udm1gIGZ1bmN0aW9uLiBUaGUgb3JpZ2luYWwgY29kZSBhY3F1aXJlcyBhIGxvY2ssIHJlYWRzLCBhbmQgdGhlbiByZWxlYXNlcyB0aGUgbG9jay4gVGhlIG1vZGlmaWVkIHZlcnNpb24gbm93IGFjcXVpcmVzIHRoZSBsb2NrICppbnNpZGUqIHRoZSByZWFkIGZ1bmN0aW9uLCBiZWZvcmUgdGhlIEFRIGNvbW1hbmQuIE1vcmUgaW1wb3J0YW50bHksIGl0IHNlZW1zIHRoYXQgaWYgYGljZV9hcV9yZWFkX252bWAgKmRvZXMqIGZhaWwsIHRoZSBkcml2ZXIgc3RvcmVzIHRoZSBsYXN0IEFRIHN0YXR1cywgY2FsbHMgYGljZV9yZWxlYXNlX252bWAgdG8gcmVsZWFzZSB0aGUgbG9jaywgYW5kIHRoZW4gKnJlc3RvcmVzKiB0aGUgQVEgc3RhdHVzLlxuXG5UaGUgaXNzdWUgaXMgdGhhdCBpZiBgaWNlX2FxX3JlYWRfbnZtYCBjb25zaXN0ZW50bHkgZmFpbHMsIHdoaWNoIGlzIHRoZSBleHBlY3RlZCBiZWhhdmlvciB3aXRob3V0IHJlYWwgaGFyZHdhcmUsIGFueSBmdXp6aW5nIGF0dGVtcHRzIGFyZSBnb2luZyB0byBiZSBwcmVkaWN0YWJsZS4gU3l6a2FsbGVyLCBpbiB0aGlzIGNhc2UsIHdvdWxkIGNvbnN0YW50bHkgaGl0IHRoZSBmYWlsdXJlIHBhdGggZHVlIHRvIHRoZSBub24tZnVuY3Rpb25hbCBBUS4gSXTigJlzIGVzc2VudGlhbGx5IGEgbG9jayBhY3F1aXNpdGlvbi9yZWxlYXNlIGFyb3VuZCBhIGZhaWxpbmcgQVEgY29tbWFuZCwgYW5kIHRoZSBkcml2ZXIgaXMgZGVzaWduZWQgdG8gaGFuZGxlIHRoaXMgZmFpbHVyZSwgc28gSSBkb24ndCBzZWUgYW55IGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlIGhlcmUuIEV2ZW4gaWYgc3l6a2FsbGVyIGNvdWxkIHNvbWVob3cgdHJpZ2dlciB0aGlzLCB0aGUgb3V0Y29tZSB3b3VsZCBiZSBjb25zaXN0ZW50IHRpbWVvdXRzLiBUaGUgQVEgcmVzcG9uc2UgY2FuJ3QgYmUgY29udHJvbGxlZC4gQW5kIHllcywgYGljZV9hY3F1aXJlX252bWAgZG9lcyByZWx5IG9uIHRoZSBBZG1pbiBRdWV1ZS4gU28gbm8sIHRoaXMgZG9lc24ndCBzZWVtIGxpa2UgYSBwcm9taXNpbmcgYXZlbnVlIGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NjQzLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjQxLjk5MTg5MDgwN1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNjkxMTA1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9hY3F1aXJlX252bVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9NzA9aWNlX3JlYWRfZmxhdF9udm0oc3RydWN0IGljZV9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiAqbGVuZ3RoLCB1OCAqZGF0YSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTAwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM6MTAxOlxcdFxcdHN0YXR1cyA9IGljZV9hY3F1aXJlX252bShodywgSUNFX1JFU19SRUFEKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTEwMi1cXHRcXHRpZiAoc3RhdHVzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYz0yMDk9c3RhdGljIGludCBpY2VfcmVhZF9zcl93b3JkX2FxKHN0cnVjdCBpY2VfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIyNy0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjIyODogKiBpY2VfYWNxdWlyZV9udm0gLSBHZW5lcmljIHJlcXVlc3QgZm9yIGFjcXVpcmluZyB0aGUgTlZNIG93bmVyc2hpcFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjI5LSAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTIzMy0gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjIzNDppbnQgaWNlX2FjcXVpcmVfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfYWNjZXNzX3R5cGUgYWNjZXNzKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMjM1LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmM9MTE4Nj1pbnQgaWNlX252bV92YWxpZGF0ZV9jaGVja3N1bShzdHJ1Y3QgaWNlX2h3ICpodylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE5MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jOjExOTI6XFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfbnZtKGh3LCBJQ0VfUkVTX1JFQUQpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfbnZtLmMtMTE5My1cXHRpZiAoc3RhdHVzKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wM1QxMjoxNTo0Mi40MzQ1ODc0NTNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjM3MjA2NjIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgdGhlIElDRSBOVk0gQWNxdWlzaXRpb24qKlxuXG5BbHJpZ2h0LCBteSBicmFpbiBpcyBhbHJlYWR5IHplcm9pbmcgaW4uIExldCdzIGdldCByaWdodCBpbnRvIHRoZSBjb2RlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBpY2VfYWNxdWlyZV9udm1gIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgTlZNIGFjcXVpc2l0aW9uIHByb2Nlc3Mgd29ya3MgZm9yIHRoaXMgSW50ZWwgRXRoZXJuZXQgY29udHJvbGxlciAoSUNFKS4gSSBpbW1lZGlhdGVseSB3YW50IHRvIGdyYXNwIHRoZSBpbml0aWFsaXphdGlvbiwgdGhlIGVycm9yIGhhbmRsaW5nLCBhbmQgdGhlIG92ZXJhbGwgY29udHJvbCBmbG93IG9mIHRoaXMgY3JpdGljYWwgZnVuY3Rpb24uIEknbSBleHBlY3RpbmcgdG8gc2VlIGNhbGxzIHRvIGxvdy1sZXZlbCBOVk0gaW50ZXJmYWNlIGZ1bmN0aW9ucyBhbmQgYW55IHJlbGV2YW50IHBvd2VyIG1hbmFnZW1lbnQgb3IgaGFyZHdhcmUtc3BlY2lmaWMgY29uc2lkZXJhdGlvbnMgdGhhdCBpbXBhY3QgdGhpcyBwcm9jZXNzLiBNeSBiYWNrZ3JvdW5kIGlzIGRlZXAgZW5vdWdoIHRoYXQgSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgc3RyYXRlZ2llcyB0aGF0IHRoZSBkcml2ZXIgdXNlcyB0byBlbnN1cmUgdGhlIE5WTSBpcyBhY2Nlc3NlZCByZWxpYWJseS4gTXkgZ29hbCBpcyB0byBjb21wbGV0ZWx5IGRpc3NlY3QgaXRzIGJlaGF2aW9yLCB1bmRlcnN0YW5kIGl0cyBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgaGFyZHdhcmUsIGFuZCBpZGVudGlmeSBhbnkgb3Bwb3J0dW5pdGllcyBmb3Igb3B0aW1pemF0aW9uIG9yIHBvdGVudGlhbCBidWdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzQ4MSwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjQ4LjgwNjY1ODA0N1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDczNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzQsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMzQ6XFx0aW50IGljZV9hY3F1aXJlX252bShzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcylcXG4gMjM1OlxcdHtcXG4gMjM2OlxcdFxcdGlmIChody1cXHUwMDNlZmxhc2guYmxhbmtfbnZtX21vZGUpXFxuIDIzNzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjM4OlxcdFxcbiAyMzk6XFx0XFx0cmV0dXJuIGljZV9hY3F1aXJlX3JlcyhodywgSUNFX05WTV9SRVNfSUQsIGFjY2VzcywgSUNFX05WTV9USU1FT1VUKTtcXG4gMjQwOlxcdH1cXG4gMjQxOlxcdFxcbiAyNDI6XFx0LyoqXFxuIDI0MzpcXHQgKiBpY2VfcmVsZWFzZV9udm0gLSBHZW5lcmljIHJlcXVlc3QgZm9yIHJlbGVhc2luZyB0aGUgTlZNIG93bmVyc2hpcFxcbiAyNDQ6XFx0ICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4gMjQ1OlxcdCAqXFxuIDI0NjpcXHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgcmVsZWFzZSBOVk0gb3duZXJzaGlwLlxcbiAyNDc6XFx0ICovXFxuIDI0ODpcXHR2b2lkIGljZV9yZWxlYXNlX252bShzdHJ1Y3QgaWNlX2h3ICpodylcXG4gMjQ5OlxcdHtcXG4gMjUwOlxcdFxcdGlmIChody1cXHUwMDNlZmxhc2guYmxhbmtfbnZtX21vZGUpXFxuIDI1MTpcXHRcXHRcXHRyZXR1cm47XFxuIDI1MjpcXHRcXG4gMjUzOlxcdFxcdGljZV9yZWxlYXNlX3JlcyhodywgSUNFX05WTV9SRVNfSUQpO1xcbiAyNTQ6XFx0fVxcbiAyNTU6XFx0XFxuIDI1NjpcXHQvKipcXG4gMjU3OlxcdCAqIGljZV9nZXRfZmxhc2hfYmFua19vZmZzZXQgLSBHZXQgb2Zmc2V0IGludG8gcmVxdWVzdGVkIGZsYXNoIGJhbmtcXG4gMjU4OlxcdCAqIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuIDI1OTpcXHQgKiBAYmFuazogd2hldGhlciB0byByZWFkIGZyb20gdGhlIGFjdGl2ZSBvciBpbmFjdGl2ZSBmbGFzaCBiYW5rXFxuIDI2MDpcXHQgKiBAbW9kdWxlOiB0aGUgbW9kdWxlIHRvIHJlYWQgZnJvbVxcbiAyNjE6XFx0ICpcXG4gMjYyOlxcdCAqIEJhc2VkIG9uIHRoZSBtb2R1bGUsIGxvb2t1cCB0aGUgbW9kdWxlIG9mZnNldCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlXFxuIDI2MzpcXHQgKiBmbGFzaC5cXG4gMjY0OlxcdCAqXFxuIDI2NTpcXHQgKiBSZXR1cm5zIHRoZSBmbGFzaCBvZmZzZXQuIE5vdGUgdGhhdCBhIHZhbHVlIG9mIHplcm8gaXMgaW52YWxpZCBhbmQgbXVzdCBiZVxcbiAyNjY6XFx0ICogdHJlYXRlZCBhcyBhbiBlcnJvci5cXG4gMjY3OlxcdCAqL1xcbiAyNjg6XFx0c3RhdGljIHUzMiBpY2VfZ2V0X2ZsYXNoX2Jhbmtfb2Zmc2V0KHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9iYW5rX3NlbGVjdCBiYW5rLCB1MTYgbW9kdWxlKVxcbiAyNjk6XFx0e1xcbiAyNzA6XFx0XFx0c3RydWN0IGljZV9iYW5rX2luZm8gKmJhbmtzID0gXFx1MDAyNmh3LVxcdTAwM2VmbGFzaC5iYW5rcztcXG4gMjcxOlxcdFxcdGVudW0gaWNlX2ZsYXNoX2JhbmsgYWN0aXZlX2Jhbms7XFxuIDI3MjpcXHRcXHRib29sIHNlY29uZF9iYW5rX2FjdGl2ZTtcXG4gMjczOlxcdFxcdHUzMiBvZmZzZXQsIHNpemU7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdHN3aXRjaCAobW9kdWxlKSB7XFxuIDI3NjpcXHRcXHRjYXNlIElDRV9TUl8xU1RfTlZNX0JBTktfUFRSOlxcbiAyNzc6XFx0XFx0XFx0b2Zmc2V0ID0gYmFua3MtXFx1MDAzZW52bV9wdHI7XFxuIDI3ODpcXHRcXHRcXHRzaXplID0gYmFua3MtXFx1MDAzZW52bV9zaXplO1xcbiAyNzk6XFx0XFx0XFx0YWN0aXZlX2JhbmsgPSBiYW5rcy1cXHUwMDNlbnZtX2Jhbms7XFxuIDI4MDpcXHRcXHRcXHRicmVhaztcXG4gMjgxOlxcdFxcdGNhc2UgSUNFX1NSXzFTVF9PUk9NX0JBTktfUFRSOlxcbiAyODI6XFx0XFx0XFx0b2Zmc2V0ID0gYmFua3MtXFx1MDAzZW9yb21fcHRyO1xcbiAyODM6XFx0XFx0XFx0c2l6ZSA9IGJhbmtzLVxcdTAwM2Vvcm9tX3NpemU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjQ4LjgwNjkwNzc5OFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTYxNTAwNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFpbG9yZWQgYXMgaWYgSSwgYW4gZXhwZXJ0LCBhbSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKlJlc291cmNlIE1hbmFnZW1lbnQgaW4gdGhlIEljZSBMYXllcioqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQsIGFzIGV4cGVjdGVkLCBpdCdzIGxldmVyYWdpbmcgYGljZV9hY3F1aXJlX3Jlc2AgYW5kIGBpY2VfcmVsZWFzZV9yZXNgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoYXQgXCJpY2VcIiBsYXllciDigJMgYW5kIHRoaXMgaXMgbGlrZWx5IHRoZSBjb3JlIG9mIHdoYXRldmVyIGZ1bmN0aW9uYWxpdHkgd2UncmUgZGlzY3Vzc2luZy4gVGhlc2UgZnVuY3Rpb24gY2FsbHMgYXJlIG15IGJyZWFkIGFuZCBidXR0ZXIgaW4gc2l0dWF0aW9ucyBsaWtlIHRoaXMuIEl04oCZcyBwcmV0dHkgb2J2aW91cyB0aGV5J3JlIGFjdGluZyBhcyBnYXRla2VlcGVycywgY29udHJvbGxpbmcgYWNjZXNzIHRvIHNvbWV0aGluZyBjcml0aWNhbC4gVGhlIFwiYWNxdWlyZVwiIHN0cm9uZ2x5IHN1Z2dlc3RzIGdyYWJiaW5nIGV4Y2x1c2l2ZSBvciBzaGFyZWQgYWNjZXNzLCBsaWtlbHkgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBcIlJlbGVhc2UsXCIgdGhlbiwgc3ltbWV0cmljYWxseSByZWxpbnF1aXNoZXMgdGhhdCBjb250cm9sLCBob3BlZnVsbHkgaW4gYSB0aWR5IGFuZCBwcmVkaWN0YWJsZSBtYW5uZXIuIEkgbmVlZCB0byBkaWcgZGVlcGVyLCBvZiBjb3Vyc2UsIGJ1dCBqdXN0IGZyb20gdGhlc2UgbmFtZXMsIEknbSBidWlsZGluZyBhIG1lbnRhbCBtb2RlbCBvZiBjb250cm9sbGVkIGFjY2VzcyB0byBhIHNoYXJlZCByZXNvdXJjZSB3aXRoaW4gdGhlIHN5c3RlbSdzIFwiaWNlXCIgY29tcG9uZW50LiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMg4oCTIGJ1dCB0aGlzIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGZpZ3VyaW5nIG91dCAqd2hhdCogcmVzb3VyY2UgaXMgYmVpbmcgbWFuYWdlZCwgKndoeSogaXQgbmVlZHMgY29udHJvbGxlZCBhY2Nlc3MsIGFuZCAqaG93KiB0aGUgc3lzdGVtIGVuc3VyZXMgcHJvcGVyIHN5bmNocm9uaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1NTQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjUxLjk2ODQxMTQwMloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2MDMyNDA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImljZV9hY3F1aXJlX3Jlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MjEzMT1pY2VfYXFfcmVsZWFzZV9yZXMoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19pZHMgcmVzLCB1OCBzZHBfbnVtYmVyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTQ3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MjE0ODogKiBpY2VfYWNxdWlyZV9yZXNcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxNDktICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM9MjE1Nj1pbnRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jOjIxNTc6aWNlX2FjcXVpcmVfcmVzKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfaWRzIHJlcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxNTgtXFx0XFx0ZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcywgdTMyIHRpbWVvdXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxNzItXFx0aWYgKHN0YXR1cyA9PSAtRUFMUkVBRFkpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYzoyMTczOlxcdFxcdGdvdG8gaWNlX2FjcXVpcmVfcmVzX2V4aXQ7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTc0LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uYy0yMTk1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmM6MjE5NjppY2VfYWNxdWlyZV9yZXNfZXhpdDpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2NvbW1vbi5jLTIxOTctXFx0aWYgKHN0YXR1cyA9PSAtRUFMUkVBRFkpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmg9OTc9aW50XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9jb21tb24uaDo5ODppY2VfYWNxdWlyZV9yZXMoc3RydWN0IGljZV9odyAqaHcsIGVudW0gaWNlX2FxX3Jlc19pZHMgcmVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfY29tbW9uLmgtOTktXFx0XFx0ZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcywgdTMyIHRpbWVvdXQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYz0xMTM2PXN0YXRpYyBpbnQgaWNlX2FjcXVpcmVfZ2xvYmFsX2NmZ19sb2NrKHN0cnVjdCBpY2VfaHcgKmh3LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0xMTQwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmM6MTE0MTpcXHRzdGF0dXMgPSBpY2VfYWNxdWlyZV9yZXMoaHcsIElDRV9HTE9CQUxfQ0ZHX0xPQ0tfUkVTX0lELCBhY2Nlc3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYy0xMTQyLVxcdFxcdFxcdFxcdCBJQ0VfR0xPQkFMX0NGR19MT0NLX1RJTUVPVVQpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9kZHAuYz0yMzg4PWludCBpY2VfY2ZnX3R4X3RvcG8oc3RydWN0IGljZV9odyAqaHcsIGNvbnN0IHZvaWQgKmJ1ZiwgdTMyIGxlbilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZGRwLmMtMjUwMS1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jOjI1MDI6XFx0c3RhdHVzID0gaWNlX2FjcXVpcmVfcmVzKGh3LCBJQ0VfR0xPQkFMX0NGR19MT0NLX1JFU19JRCwgSUNFX1JFU19XUklURSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2RkcC5jLTI1MDMtXFx0XFx0XFx0XFx0IElDRV9HTE9CQUxfQ0ZHX0xPQ0tfVElNRU9VVCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jPTI3OD1pY2VfYWNxdWlyZV9jaGFuZ2VfbG9jayhzdHJ1Y3QgaWNlX2h3ICpodywgZW51bSBpY2VfYXFfcmVzX2FjY2Vzc190eXBlIGFjY2VzcylcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX2ZsZXhfcGlwZS5jLTI3OS17XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9mbGV4X3BpcGUuYzoyODA6XFx0cmV0dXJuIGljZV9hY3F1aXJlX3JlcyhodywgSUNFX0NIQU5HRV9MT0NLX1JFU19JRCwgYWNjZXNzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2ljZS9pY2VfZmxleF9waXBlLmMtMjgxLVxcdFxcdFxcdCAgICAgICBJQ0VfQ0hBTkdFX0xPQ0tfVElNRU9VVCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jPTIzND1pbnQgaWNlX2FjcXVpcmVfbnZtKHN0cnVjdCBpY2VfaHcgKmh3LCBlbnVtIGljZV9hcV9yZXNfYWNjZXNzX3R5cGUgYWNjZXNzKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYy0yMzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWNlL2ljZV9udm0uYzoyMzk6XFx0cmV0dXJuIGljZV9hY3F1aXJlX3JlcyhodywgSUNFX05WTV9SRVNfSUQsIGFjY2VzcywgSUNFX05WTV9USU1FT1VUKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pY2UvaWNlX252bS5jLTI0MC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAzVDEyOjE1OjUyLjE1NDQ1NTgyN1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTAxOTA0NTI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiB0aGUgQ29kZSBhbmQgaXRzIFJlYWNoYWJpbGl0eSoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0cmFjaW5nIHRoZSBleGVjdXRpb24gcGF0aCBvZiB0aGlzIGBpY2VfcmVhZF9mbGF0X252bWAgZnVuY3Rpb24gYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgSSd2ZSBjb21lIHRvIHRoZSBjb25jbHVzaW9uIHRoYXQgdGhpcyBwYXRjaCwgaW4gaXRzIGN1cnJlbnQgZm9ybSwgaXNuJ3Qgc29tZXRoaW5nIHRoYXQncyB3b3J0aCBmdXp6aW5nLiBIZXJlJ3Mgd2h5OlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBjb2RlIGlzIGRlZXBseSB0aWVkIHRvIHRoZSBoYXJkd2FyZS4gYGljZV9yZWFkX2ZsYXRfbnZtYCBpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIHdoZXJlIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCB0aGUgbm9uLXZvbGF0aWxlIG1lbW9yeSAoTlZNKSBvbiBhbiBJbnRlbCBJQ0UgbmV0d29yayBhZGFwdGVyLiBUaGUgY29yZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgZnVuY3Rpb24gcmVsaWVzIGhlYXZpbHkgb24gdGhlIEFkbWluIFF1ZXVlIChBUSkgb2YgdGhlIGhhcmR3YXJlLCB3aGljaCBpcyBtYW5hZ2VkIHZpYSBgaWNlX2FjcXVpcmVfbnZtYCBhbmQgYGljZV9yZWxlYXNlX252bWAuIFRoZSBgaWNlX2FxX2FsbG9jX2ZyZWVfcmVzYCBmdW5jdGlvbiBpcyBjYWxsZWQgdGhyb3VnaCB0aGUgYGljZV9hY3F1aXJlX3Jlc2AgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJ5IGBpY2VfYWNxdWlyZV9udm1gLCBzaG93aW5nIHRoYXQgTlZNIGNvbW1hbmRzIHV0aWxpemUgdGhlIEFkbWluIFF1ZXVlLiBUaGlzIEFkbWluIFF1ZXVlIGlzIG5vdCBnb2luZyB0byB3b3JrIHdpdGhvdXQgdGhlIGFjdHVhbCBoYXJkd2FyZSBwcmVzZW50IGFuZCBydW5uaW5nLlxuXG5TcGVjaWZpY2FsbHksIHRoZSBjb2RlIHRyaWVzIHRvIGFjcXVpcmUgYW4gTlZNIGxvY2ssIHRoZW4gc2VuZHMgYW4gQWRtaW4gUXVldWUgY29tbWFuZCB0byByZWFkIGEgY2h1bmsgb2YgdGhlIE5WTS4gVGhlIHBhdGNoIG1vZGlmaWVzIHRoaXMgYnkgbW92aW5nIHRoZSBsb2NrIGFjcXVpc2l0aW9uIGluc2lkZSB0aGUgbG9vcC4gSG93ZXZlciwgdGhlIGluaXRpYWwgYGljZV9hY3F1aXJlX252bWAgd2lsbCBmYWlsIHdoZW4gdGhlcmUncyBubyBoYXJkd2FyZSBvciBwcm9wZXIgZW11bGF0aW9uIGJlY2F1c2UgdGhlIEFRIGNvbW1hbmQgd2lsbCB0aW1lb3V0LiBUaGUgZHJpdmVyIGZhaWxzIGR1cmluZyBwcm9iZSwgc28gZGV2bGluayBhbmQgZXRodG9vbCBpbnRlcmZhY2VzIHdvbid0IGV2ZW4gYmUgcmVnaXN0ZXJlZC4gVGhhdCBtZWFucyBgaWNlX2RldmxpbmtfbnZtX3NuYXBzaG90YCwgYGljZV9kZXZsaW5rX252bV9yZWFkYCwgYW5kIGBpY2VfZ2V0X2VlcHJvbWAgYXJlIHVucmVhY2hhYmxlLiBUaGUgb25seSB3YXkgd2UgZ2V0IHRvIGBpY2VfcmVhZF9mbGF0X252bWAgaXMgZHVyaW5nIHRoZSBwcm9iZSBzZXF1ZW5jZSB2aWEgYGljZV9pbml0X252bWAgYW5kIGBpY2VfZGlzY292ZXJfZmxhc2hfc2l6ZWAuIEJ1dCBgaWNlX2luaXRfbnZtYCBpcyBjYWxsZWQgYWZ0ZXIgYGljZV9jcmVhdGVfYWxsX2N0cmxxYCB3aGljaCBhbGxvY2F0ZXMgbWVtb3J5LiBJZiB0aGVyZSdzIG5vIGhhcmR3YXJlLCB0aGUgZmlyc3QgQVEgY29tbWFuZCB3aWxsIHRpbWVvdXQuXG5cbkV2ZW4gaWYgYGh3LVx1MDAzZWZsYXNoLmJsYW5rX252bV9tb2RlYCBpcyB0cnVlLCB0aGVuIGBpY2VfYWNxdWlyZV9udm1gIHJldHVybnMgMCwgYnV0IHRoZSBjYWxsIHRvIGBpY2VfYXFfcmVhZF9udm1gIHdpbGwgdGltZSBvdXQsIHNpbmNlIGBpY2VfYXFfc2VuZF9jbWRgIHdpbGwgYXR0ZW1wdCB0byBzZW5kIGFuIEFkbWluIFF1ZXVlIGNvbW1hbmQuXG5cblN5emthbGxlciBjYW4ndCBzaW11bGF0ZSB0aGUgRE1BIGludGVyYWN0aW9ucyBhbmQgd2lsbCBqdXN0IHRpbWVvdXQgd2hlbiBpdCB0cmllcyB0byBmdXp6IHRoZXNlIEFRIHJlc3BvbnNlcy4gVGhlIGxvb3Agd2l0aGluIGBpY2VfcmVhZF9mbGF0X252bWAgd29uJ3QgZXhlY3V0ZSBtb3JlIHRoYW4gb25jZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgcGF0Y2gncyBjb3JlIGxvZ2ljIG9mIGFjcXVpcmluZyBhbmQgcmVsZWFzaW5nIHRoZSBsb2NrIGluc2lkZSB0aGUgbG9vcCBpcyBjb21wbGV0ZWx5IGhhcmR3YXJlLWRlcGVuZGVudCBhbmQgY2FuJ3QgYmUgZXhlcmNpc2VkIGVmZmVjdGl2ZWx5LlxuXG5UaGVyZWZvcmUsIGJlY2F1c2UgdGhpcyBjb2RlIHBhdGggaXMgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBldmVuIHdpdGggc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUsIGZ1enppbmcgaXQgaXNuJ3QgZ29pbmcgdG8gYmUgYmVuZWZpY2lhbC4gVGh1cywgdGhlIGNvcnJlY3QgZGV0ZXJtaW5hdGlvbiBpcyBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwMDQ4LCJPdXRwdXRUb2tlbnMiOjEyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDNUMTI6MTY6MTEuMTczNTA1MTcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTlZNIHJlYWQgbG9naWMgaW4gdGhlIEludGVsIElDRSBkcml2ZXIsIHNwZWNpZmljYWxseSBtb3ZpbmcgTlZNIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgaW5zaWRlIHRoZSByZWFkIGxvb3AgdG8gcHJldmVudCBGVyBsb2NrIHRpbWVvdXRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBoYXJkd2FyZSBBZG1pbiBRdWV1ZSAoQVEpIHRvIHByb2Nlc3MgY29tbWFuZHMuIFdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgaGFyZHdhcmUgb3IgYSBmdWxsIHNvZnR3YXJlIGVtdWxhdG9yICh3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBRRU1VKSwgdGhlIEFRIGNvbW1hbmRzIHdpbGwgc2ltcGx5IHRpbWVvdXQgYW5kIGZhaWwuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byBtZWFuaW5nZnVsbHkgcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgTlZNIHJlYWQgbG9naWMgaW4gdGhlIEludGVsIElDRSBkcml2ZXIsIHNwZWNpZmljYWxseSBtb3ZpbmcgTlZNIGxvY2sgYWNxdWlzaXRpb24gYW5kIHJlbGVhc2UgaW5zaWRlIHRoZSByZWFkIGxvb3AgdG8gcHJldmVudCBGVyBsb2NrIHRpbWVvdXRzLiBUaGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBoYXJkd2FyZSBBZG1pbiBRdWV1ZSAoQVEpIHRvIHByb2Nlc3MgY29tbWFuZHMuIFdpdGhvdXQgcGh5c2ljYWwgSW50ZWwgRTgwMCBzZXJpZXMgaGFyZHdhcmUgb3IgYSBmdWxsIHNvZnR3YXJlIGVtdWxhdG9yICh3aGljaCBkb2VzIG5vdCBleGlzdCBpbiBRRU1VKSwgdGhlIEFRIGNvbW1hbmRzIHdpbGwgc2ltcGx5IHRpbWVvdXQgYW5kIGZhaWwuIFRoZXJlZm9yZSwgdGhpcyBjb2RlIHBhdGggaXMgaW1wb3NzaWJsZSB0byBtZWFuaW5nZnVsbHkgcmVhY2ggYW5kIGZ1enogaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowblv6t[1] Phase: Running StartedAt: 2026-07-03 12:16:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowblv6t[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-03 12:16:22 +0000 UTC FinishedAt: 2026-07-03 12:16:30 +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,}